btif_dma_priv.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #ifndef __HAL_BTIF_DMA_H_
  2. #define __HAL_BTIF_DMA_H_
  3. #include <asm/io.h>
  4. #include "btif_dma_pub.h"
  5. #if defined(CONFIG_MTK_CLKMGR)
  6. #if defined(CONFIG_ARCH_MT6580)
  7. #define MTK_BTIF_APDMA_CLK_CG MT_CG_APDMA_SW_CG
  8. #elif defined(CONFIG_ARCH_MT6735) || defined(CONFIG_ARCH_MT6735M) || defined(CONFIG_ARCH_MT6753)
  9. #define MTK_BTIF_APDMA_CLK_CG MT_CG_PERI_APDMA
  10. #endif
  11. #else
  12. extern struct clk *clk_btif_apdma; /*btif apdma clock*/
  13. #endif /* !defined(CONFIG_MTK_CLKMGR) */
  14. #define TX_DMA_VFF_SIZE (1024 * 8) /*Tx vFIFO Len must be 8 Byte allignment */
  15. #define RX_DMA_VFF_SIZE (1024 * 8) /*Rx vFIFO Len must be 8 Byte allignment */
  16. #define DMA_TX_THRE(n) (n - 7) /*Tx Trigger Level */
  17. #define DMA_RX_THRE(n) ((n) * 3 / 4) /*Rx Trigger Level */
  18. /**********************************Hardware related defination**************************/
  19. #ifndef CONFIG_OF
  20. /*DMA channel's offset refer to AP_DMA's base address*/
  21. #define BTIF_TX_DMA_OFFSET 0x880
  22. #define BTIF_RX_DMA_OFFSET 0x900
  23. #endif
  24. /*Register Address Mapping*/
  25. #define DMA_INT_FLAG_OFFSET 0x00
  26. #define DMA_INT_EN_OFFSET 0x04
  27. #define DMA_EN_OFFSET 0x08
  28. #define DMA_RST_OFFSET 0x0C
  29. #define DMA_STOP_OFFSET 0x10
  30. #define DMA_FLUSH_OFFSET 0x14
  31. #define DMA_BASE_OFFSET 0x1C
  32. #define DMA_LEN_OFFSET 0x24
  33. #define DMA_THRE_OFFSET 0x28
  34. #define DMA_WPT_OFFSET 0x2C
  35. #define DMA_RPT_OFFSET 0x30
  36. #define DMA_VALID_OFFSET 0x3C
  37. #define DMA_LEFT_OFFSET 0x40
  38. #define TX_DMA_INT_FLAG(base) (unsigned long)(base + 0x0) /*BTIF Tx Virtual FIFO Interrupt Flag Register */
  39. #define TX_DMA_INT_EN(base) (unsigned long)(base + 0x4) /*BTIF Tx Virtual FIFO Interrupt Enable Register */
  40. #define TX_DMA_EN(base) (unsigned long)(base + DMA_EN_OFFSET)/*BTIF Tx Virtual FIFO Enable Register */
  41. #define TX_DMA_RST(base) (unsigned long)(base + DMA_RST_OFFSET)/*BTIF Tx Virtual FIFO Reset Register */
  42. #define TX_DMA_STOP(base) (unsigned long)(base + DMA_STOP_OFFSET)/*BTIF Tx Virtual FIFO STOP Register */
  43. #define TX_DMA_FLUSH(base) (unsigned long)(base + DMA_FLUSH_OFFSET)/*BTIF Tx Virtual FIFO Flush Register */
  44. #define TX_DMA_VFF_ADDR(base) (unsigned long)(base + 0x1C) /*BTIF Tx Virtual FIFO Base Address Register */
  45. #define TX_DMA_VFF_LEN(base) (unsigned long)(base + 0x24) /*BTIF Tx Virtual FIFO Length Register */
  46. #define TX_DMA_VFF_THRE(base) (unsigned long)(base + 0x28) /*BTIF Tx Virtual FIFO Threshold Register */
  47. #define TX_DMA_VFF_WPT(base) (unsigned long)(base + 0x2C) /*BTIF Tx Virtual FIFO Write Pointer Register */
  48. #define TX_DMA_VFF_RPT(base) (unsigned long)(base + 0x30) /*BTIF Tx Virtual FIFO Read Pointer Register */
  49. #define TX_DMA_W_INT_BUF_SIZE(base) (unsigned long)(base + 0x34)
  50. /*BTIF Tx Virtual FIFO Internal Tx Write Buffer Size Register */
  51. #define TX_DMA_INT_BUF_SIZE(base) (unsigned long)(base + 0x38)
  52. /*BTIF Tx Virtual FIFO Internal Tx Buffer Size Register */
  53. #define TX_DMA_VFF_VALID_SIZE(base) (unsigned long)(base + 0x3C) /*BTIF Tx Virtual FIFO Valid Size Register */
  54. #define TX_DMA_VFF_LEFT_SIZE(base) (unsigned long)(base + 0x40) /*BTIF Tx Virtual FIFO Left Size Register */
  55. #define TX_DMA_DEBUG_STATUS(base) (unsigned long)(base + 0x50) /*BTIF Tx Virtual FIFO Debug Status Register */
  56. /*Rx Register Address Mapping*/
  57. #define RX_DMA_INT_FLAG(base) (unsigned long)(base + 0x0) /*BTIF Rx Virtual FIFO Interrupt Flag Register */
  58. #define RX_DMA_INT_EN(base) (unsigned long)(base + 0x4) /*BTIF Rx Virtual FIFO Interrupt Enable Register */
  59. #define RX_DMA_EN(base) (unsigned long)(base + DMA_EN_OFFSET) /*BTIF Rx Virtual FIFO Enable Register */
  60. #define RX_DMA_RST(base) (unsigned long)(base + DMA_RST_OFFSET) /*BTIF Rx Virtual FIFO Reset Register */
  61. #define RX_DMA_STOP(base) (unsigned long)(base + DMA_STOP_OFFSET) /*BTIF Rx Virtual FIFO Stop Register */
  62. #define RX_DMA_FLUSH(base) (unsigned long)(base + DMA_FLUSH_OFFSET) /*BTIF Rx Virtual FIFO Flush Register */
  63. #define RX_DMA_VFF_ADDR(base) (unsigned long)(base + 0x1C) /*BTIF Rx Virtual FIFO Base Address Register */
  64. #define RX_DMA_VFF_LEN(base) (unsigned long)(base + 0x24) /*BTIF Rx Virtual FIFO Length Register */
  65. #define RX_DMA_VFF_THRE(base) (unsigned long)(base + 0x28) /*BTIF Rx Virtual FIFO Threshold Register */
  66. #define RX_DMA_VFF_WPT(base) (unsigned long)(base + 0x2C) /*BTIF Rx Virtual FIFO Write Pointer Register */
  67. #define RX_DMA_VFF_RPT(base) (unsigned long)(base + 0x30) /*BTIF Rx Virtual FIFO Read Pointer Register */
  68. #define RX_DMA_FLOW_CTRL_THRE(base) (unsigned long)(base + 0x34) /*BTIF Rx Virtual FIFO Flow Control Register */
  69. #define RX_DMA_INT_BUF_SIZE(base) (unsigned long)(base + 0x38) /*BTIF Rx Virtual FIFO Internal Buffer Register */
  70. #define RX_DMA_VFF_VALID_SIZE(base) (unsigned long)(base + 0x3C) /*BTIF Rx Virtual FIFO Valid Size Register */
  71. #define RX_DMA_VFF_LEFT_SIZE(base) (unsigned long)(base + 0x40) /*BTIF Rx Virtual FIFO Left Size Register */
  72. #define RX_DMA_DEBUG_STATUS(base) (unsigned long)(base + 0x50) /*BTIF Rx Virtual FIFO Debug Status Register */
  73. #define DMA_EN_BIT (0x1)
  74. #define DMA_STOP_BIT (0x1)
  75. #define DMA_RST_BIT (0x1)
  76. #define DMA_FLUSH_BIT (0x1)
  77. #define DMA_WARM_RST (0x1 << 0)
  78. #define DMA_HARD_RST (0x1 << 1)
  79. #define DMA_WPT_MASK (0x0000FFFF)
  80. #define DMA_WPT_WRAP (0x00010000)
  81. #define DMA_RPT_MASK (0x0000FFFF)
  82. #define DMA_RPT_WRAP (0x00010000)
  83. /*APDMA BTIF Tx Reg Ctrl Bit*/
  84. #define TX_DMA_INT_FLAG_MASK (0x1)
  85. #define TX_DMA_INTEN_BIT (0x1)
  86. #define TX_DMA_ADDR_MASK (0xFFFFFFF8)
  87. #define TX_DMA_LEN_MASK (0x0000FFF8)
  88. #define TX_DMA_THRE_MASK (0x0000FFFF)
  89. #define TX_DMA_W_INT_BUF_MASK (0x000000FF)
  90. #define TX_DMA_VFF_VALID_MASK (0x0000FFFF)
  91. #define TX_DMA_VFF_LEFT_MASK (0x0000FFFF)
  92. /*APDMA BTIF Rx Reg Ctrl Bit*/
  93. #define RX_DMA_INT_THRE (0x1 << 0)
  94. #define RX_DMA_INT_DONE (0x1 << 1)
  95. #define RX_DMA_INT_THRE_EN (0x1 << 0)
  96. #define RX_DMA_INT_DONE_EN (0x1 << 1)
  97. #define RX_DMA_ADDR_MASK (0xFFFFFFF8)
  98. #define RX_DMA_LEN_MASK (0x0000FFF8)
  99. #define RX_DMA_THRE_MASK (0x0000FFFF)
  100. #define RX_DMA_FLOW_CTRL_THRE_MASK (0x000000FF)
  101. #define RX_DMA_INT_BUF_SIZE_MASK (0x0000001F)
  102. #define RX_DMA_VFF_VALID_MASK (0x0000001F)
  103. #define RX_DMA_VFF_LEFT_MASK (0x0000FFFF)
  104. typedef struct _MTK_BTIF_DMA_VFIFO_ {
  105. DMA_VFIFO vfifo;
  106. unsigned int wpt; /*DMA's write pointer, which is maintained by SW for Tx DMA and HW for Rx DMA */
  107. unsigned int last_wpt_wrap; /*last wrap bit for wpt */
  108. unsigned int rpt; /*DMA's read pointer, which is maintained by HW for Tx DMA and SW for Rx DMA */
  109. unsigned int last_rpt_wrap; /*last wrap bit for rpt */
  110. } MTK_BTIF_DMA_VFIFO, *P_MTK_BTIF_DMA_VFIFO;
  111. /*for DMA debug purpose*/
  112. typedef struct _MTK_BTIF_DMA_REG_DMP_DBG_ {
  113. unsigned long reg_addr;
  114. unsigned int reg_val;
  115. } MTK_BTIF_DMA_REG_DMP_DBG, *P_MTK_BTIF_DMA_REG_DMP_DBG;
  116. #endif /*__HAL_BTIF_DMA_H_*/