/* * Copyright (c) 2021 Huawei Device Co., Ltd. * * HDF is dual licensed: you can use it either under the terms of * the GPL, or the BSD license, at your option. * See the LICENSE file in the root of this repository for complete details. */ #ifndef AUDIO_PLATFORM_IF_H #define AUDIO_PLATFORM_IF_H #include "audio_host.h" #include "audio_platform_base.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif /* __cplusplus */ /** * @brief Defines paltform private data. * * @since 1.0 * @version 1.0 */ struct PlatformData { const char *drvPlatformName; /**< Platform module name */ /** * @brief Defines platform device init. * * @param audioCard Indicates a audio card device. * @param platform Indicates a platform device. * * @return Returns 0 if Platform device init success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*PlatformInit)(const struct AudioCard *audioCard, const struct PlatformDevice *platform); struct AudioDmaOps *ops; /**< Platform module private data */ struct CircleBufInfo renderBufInfo; /**< Render pcm stream transfer */ struct CircleBufInfo captureBufInfo; /**< Capture pcm stream transfer */ struct PcmInfo renderPcmInfo; /**< Render pcm stream info */ struct PcmInfo capturePcmInfo; /**< Capture pcm stream info */ bool platformInitFlag; /**< Platform init flag */ struct AudioMmapData mmapData; /**< Mmap mode transfer data */ uint32_t mmapLoopCount; /**< Loop count for mmap mode pcm stream */ void *dmaPrv; /**< Platform dma private data */ }; /** * @brief Defines Dma operation function set. * * @since 1.0 * @version 1.0 */ struct AudioDmaOps { /** * @brief Defines Dma buff alloc. * * @param platformData Indicates dma device. * @param streamType Indicates capture or render. * * @return Returns 0 if dma buffer alloc success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*DmaBufAlloc)(struct PlatformData *platformData, const enum AudioStreamType streamType); /** * @brief Defines dma buffer free. * * @param platformData Indicates dma device. * @param streamType Indicates capture or render. * * @return Returns 0 if dma buffer free success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*DmaBufFree)(struct PlatformData *platformData, const enum AudioStreamType streamType); /** * @brief Defines dma request channel. * * @param platformData Indicates dma device. * * @return Returns 0 if dma request channel success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*DmaRequestChannel)(const struct PlatformData *platformData, const enum AudioStreamType streamType); /** * @brief Defines dma channel config. * * @param platformData Indicates dma device. * * @return Returns 0 if dma channel config set success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*DmaConfigChannel)(const struct PlatformData *platformData, const enum AudioStreamType streamType); /** * @brief Defines dma prepare function. * * @param platformData Indicates dma device. * * @return Returns 0 if dma device prep set success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*DmaPrep)(const struct PlatformData *platformData, const enum AudioStreamType streamType); /** * @brief Defines dma submit function. * * @param platformData Indicates dma device. * * @return Returns 0 if dma device submit succes; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*DmaSubmit)(const struct PlatformData *platformData, const enum AudioStreamType streamType); /** * @brief Defines dma pending function. * * @param platformData Indicates dma device. * * @return Returns 0 if dma pending success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*DmaPending)(struct PlatformData *platformData, const enum AudioStreamType streamType); /** * @brief Defines pcm stream transfer pause. * * @param platformData Indicates dma device. * * @return Returns 0 if pcm stream transfer pause success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*DmaPause)(struct PlatformData *platformData, const enum AudioStreamType streamType); /** * @brief Defines pcm stream transfer resume. * * @param platformData Indicates dma device. * * @return Returns 0 if pcm stream transfer resume success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*DmaResume)(const struct PlatformData *platformData, const enum AudioStreamType streamType); /** * @brief Defines Get the function of the current playback or recording position. * * @param platformData Indicates dma device. * @param pointer Indicates dma pointer. * * @return Returns 0 if dma device pointer position get success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*DmaPointer)(struct PlatformData *platformData, const enum AudioStreamType streamType, uint32_t *pointer); }; /** * @brief Defines Dai device name and data. * * @since 1.0 * @version 1.0 */ struct PlatformDevice { const char *devPlatformName; /**< Platform device name */ struct PlatformData *devData; /**< Platform module private data */ struct HdfDeviceObject *device; /**< HDF device */ struct DListHead list; /**< Platform list */ }; /** * @brief Defines Platform host in audio driver. * * @since 1.0 * @version 1.0 */ struct PlatformHost { struct IDeviceIoService service; /**< Services provided by patform */ struct HdfDeviceObject *device; /**< HDF device */ void *priv; /**< Platform private data interface */ }; #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */ #endif