hv_drv_OsdDMA.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * @file hv_drv_OsdDMA.h
  3. * @brief Osd driver layer Inner DMA interface.
  4. * @verbatim
  5. * ==============================================================================
  6. * ##### How to use this driver #####
  7. * ==============================================================================
  8. * (+) Use Hv_Drv_OsdDMA_Init(...) to init DMA entries.
  9. * (+) Use Hv_Drv_OsdDMA_TransferPrepare(...) to prepare a new DMA transfer.
  10. * (+) Use Hv_Drv_OsdDMA_Pend(...) to pend DMA transfer request.
  11. * (+) Use Hv_Drv_OsdDMA_Transfer(...) to start DMA transfer.
  12. * @endverbatim
  13. *
  14. * @author HiView SoC Software Team
  15. * @version 0.0.1
  16. * @date 2022-08-22
  17. */
  18. #ifndef _HV_DRV_OSDDMA_H
  19. #define _HV_DRV_OSDDMA_H
  20. #include "hv_comm_DataType.h"
  21. #include "hv_drv_OsdTypes.h"
  22. /* 等待DMA搬运完成的最大超时时间 */
  23. #define OSD_DMA_WAITDONE_MS 30
  24. typedef Status (*pfOsdDMACallback)(OsdDMAEntry *);
  25. /**
  26. * @brief print Inner DMA status
  27. * @param[in] None
  28. * @return VOID without return
  29. */
  30. VOID Hv_Drv_OsdDMA_DebugPrintState(VOID);
  31. /**
  32. * @brief Get DMA transfer finish flag
  33. * @param[in] None
  34. * @return HV_TURE if DMA transfer finished, otherwise HV_FALSE
  35. */
  36. BOOL Hv_Drv_OsdDMA_GetTransferDone(VOID);
  37. /**
  38. * @brief Prepare to start a new DMA transfer
  39. * @param[in] None
  40. * @return HV_FAILURE if last DMA not finished, otherwise HV_SUCCESS
  41. */
  42. Status Hv_Drv_OsdDMA_TransferPrepare(VOID);
  43. /**
  44. * @brief pend DMA request to current transfer
  45. * @param[in] uiSrc source address in DDR, aligned to 16 Bytes
  46. * @param[in] uiDst destination address in OSD RAM, aligned to 16 Bytes
  47. * @param[in] uiLength data length in bytes, aligned to 16
  48. * @return VOID without return
  49. */
  50. VOID Hv_Drv_OsdDMA_Pend(UINT32 uiSrc, UINT32 uiDst, UINT32 uiLength);
  51. /**
  52. * @brief clear used DMA channel count
  53. * @param[in] None
  54. * @return VOID without return
  55. */
  56. VOID Hv_Drv_OsdDMA_ClearDMAChannel(VOID);
  57. /**
  58. * @brief set DMA start register, actually start at next VSYNC
  59. * @param[in] None
  60. * @return VOID without return
  61. */
  62. VOID Hv_Drv_OsdDMA_Transfer(VOID);
  63. /**
  64. * @brief set DMA transfer finish flag, called within ISR
  65. * @param[in] None
  66. * @return VOID without return
  67. */
  68. VOID Hv_Drv_OsdDMA_TransferFinish(VOID);
  69. /**
  70. * @brief Execute callback function for all DMA entries
  71. * @param[in] pfCallback callback function to execute for each DMA entry
  72. * @param[in] ucCount DMA entries count to execute pfCallback
  73. * @return HV_SUCCESS for success, HV_FAILURE for failure
  74. */
  75. Status Hv_Drv_OsdDMA_Walk(pfOsdDMACallback pfCallback, UCHAR8 ucCount);
  76. /**
  77. * @brief Init global DMA management data
  78. * @param[in] None
  79. * @return VOID without return
  80. */
  81. VOID Hv_Drv_OsdDMA_Init(VOID);
  82. #endif