PageRenderTime 57ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/include/sbsdpcmdev.h

https://gitlab.com/buktemirlnk/mirrors
C Header | 300 lines | 197 code | 40 blank | 63 comment | 0 complexity | 39f22cde89466d25e14c4628d986916e MD5 | raw file
  1. /*
  2. * Broadcom SiliconBackplane SDIO/PCMCIA hardware-specific
  3. * device core support
  4. *
  5. * Copyright (C) 1999-2017, Broadcom Corporation
  6. *
  7. * Unless you and Broadcom execute a separate written software license
  8. * agreement governing use of this software, this software is licensed to you
  9. * under the terms of the GNU General Public License version 2 (the "GPL"),
  10. * available at http://www.broadcom.com/licenses/GPLv2.php, with the
  11. * following added to such license:
  12. *
  13. * As a special exception, the copyright holders of this software give you
  14. * permission to link this software with independent modules, and to copy and
  15. * distribute the resulting executable under terms of your choice, provided that
  16. * you also meet, for each linked independent module, the terms and conditions of
  17. * the license of that module. An independent module is a module which is not
  18. * derived from this software. The special exception does not apply to any
  19. * modifications of the software.
  20. *
  21. * Notwithstanding the above, under no circumstances may you combine this
  22. * software in any way with any other Broadcom software provided under a license
  23. * other than the GPL, without Broadcom's express prior written consent.
  24. *
  25. *
  26. * <<Broadcom-WL-IPTag/Open:>>
  27. *
  28. * $Id: sbsdpcmdev.h 610395 2016-01-06 22:52:57Z $
  29. */
  30. #ifndef _sbsdpcmdev_h_
  31. #define _sbsdpcmdev_h_
  32. /* cpp contortions to concatenate w/arg prescan */
  33. #ifndef PAD
  34. #define _PADLINE(line) pad ## line
  35. #define _XSTR(line) _PADLINE(line)
  36. #define PAD _XSTR(__LINE__)
  37. #endif /* PAD */
  38. typedef volatile struct {
  39. dma64regs_t xmt; /* dma tx */
  40. uint32 PAD[2];
  41. dma64regs_t rcv; /* dma rx */
  42. uint32 PAD[2];
  43. } dma64p_t;
  44. /* dma64 sdiod corerev >= 1 */
  45. typedef volatile struct {
  46. dma64p_t dma64regs[2];
  47. dma64diag_t dmafifo; /* DMA Diagnostic Regs, 0x280-0x28c */
  48. uint32 PAD[92];
  49. } sdiodma64_t;
  50. /* dma32 sdiod corerev == 0 */
  51. typedef volatile struct {
  52. dma32regp_t dma32regs[2]; /* dma tx & rx, 0x200-0x23c */
  53. dma32diag_t dmafifo; /* DMA Diagnostic Regs, 0x240-0x24c */
  54. uint32 PAD[108];
  55. } sdiodma32_t;
  56. /* dma32 regs for pcmcia core */
  57. typedef volatile struct {
  58. dma32regp_t dmaregs; /* DMA Regs, 0x200-0x21c, rev8 */
  59. dma32diag_t dmafifo; /* DMA Diagnostic Regs, 0x220-0x22c */
  60. uint32 PAD[116];
  61. } pcmdma32_t;
  62. /* core registers */
  63. typedef volatile struct {
  64. uint32 corecontrol; /* CoreControl, 0x000, rev8 */
  65. uint32 corestatus; /* CoreStatus, 0x004, rev8 */
  66. uint32 PAD[1];
  67. uint32 biststatus; /* BistStatus, 0x00c, rev8 */
  68. /* PCMCIA access */
  69. uint16 pcmciamesportaladdr; /* PcmciaMesPortalAddr, 0x010, rev8 */
  70. uint16 PAD[1];
  71. uint16 pcmciamesportalmask; /* PcmciaMesPortalMask, 0x014, rev8 */
  72. uint16 PAD[1];
  73. uint16 pcmciawrframebc; /* PcmciaWrFrameBC, 0x018, rev8 */
  74. uint16 PAD[1];
  75. uint16 pcmciaunderflowtimer; /* PcmciaUnderflowTimer, 0x01c, rev8 */
  76. uint16 PAD[1];
  77. /* interrupt */
  78. uint32 intstatus; /* IntStatus, 0x020, rev8 */
  79. uint32 hostintmask; /* IntHostMask, 0x024, rev8 */
  80. uint32 intmask; /* IntSbMask, 0x028, rev8 */
  81. uint32 sbintstatus; /* SBIntStatus, 0x02c, rev8 */
  82. uint32 sbintmask; /* SBIntMask, 0x030, rev8 */
  83. uint32 funcintmask; /* SDIO Function Interrupt Mask, SDIO rev4 */
  84. uint32 PAD[2];
  85. uint32 tosbmailbox; /* ToSBMailbox, 0x040, rev8 */
  86. uint32 tohostmailbox; /* ToHostMailbox, 0x044, rev8 */
  87. uint32 tosbmailboxdata; /* ToSbMailboxData, 0x048, rev8 */
  88. uint32 tohostmailboxdata; /* ToHostMailboxData, 0x04c, rev8 */
  89. /* synchronized access to registers in SDIO clock domain */
  90. uint32 sdioaccess; /* SdioAccess, 0x050, rev8 */
  91. uint32 PAD[3];
  92. /* PCMCIA frame control */
  93. uint8 pcmciaframectrl; /* pcmciaFrameCtrl, 0x060, rev8 */
  94. uint8 PAD[3];
  95. uint8 pcmciawatermark; /* pcmciaWaterMark, 0x064, rev8 */
  96. uint8 PAD[155];
  97. /* interrupt batching control */
  98. uint32 intrcvlazy; /* IntRcvLazy, 0x100, rev8 */
  99. uint32 PAD[3];
  100. /* counters */
  101. uint32 cmd52rd; /* Cmd52RdCount, 0x110, rev8, SDIO: cmd52 reads */
  102. uint32 cmd52wr; /* Cmd52WrCount, 0x114, rev8, SDIO: cmd52 writes */
  103. uint32 cmd53rd; /* Cmd53RdCount, 0x118, rev8, SDIO: cmd53 reads */
  104. uint32 cmd53wr; /* Cmd53WrCount, 0x11c, rev8, SDIO: cmd53 writes */
  105. uint32 abort; /* AbortCount, 0x120, rev8, SDIO: aborts */
  106. uint32 datacrcerror; /* DataCrcErrorCount, 0x124, rev8, SDIO: frames w/bad CRC */
  107. uint32 rdoutofsync; /* RdOutOfSyncCount, 0x128, rev8, SDIO/PCMCIA: Rd Frm OOS */
  108. uint32 wroutofsync; /* RdOutOfSyncCount, 0x12c, rev8, SDIO/PCMCIA: Wr Frm OOS */
  109. uint32 writebusy; /* WriteBusyCount, 0x130, rev8, SDIO: dev asserted "busy" */
  110. uint32 readwait; /* ReadWaitCount, 0x134, rev8, SDIO: read: no data avail */
  111. uint32 readterm; /* ReadTermCount, 0x138, rev8, SDIO: rd frm terminates */
  112. uint32 writeterm; /* WriteTermCount, 0x13c, rev8, SDIO: wr frm terminates */
  113. uint32 PAD[40];
  114. uint32 clockctlstatus; /* ClockCtlStatus, 0x1e0, rev8 */
  115. uint32 PAD[1];
  116. uint32 powerctl; /* 0x1e8 */
  117. uint32 PAD[5];
  118. /* DMA engines */
  119. volatile union {
  120. pcmdma32_t pcm32;
  121. sdiodma32_t sdiod32;
  122. sdiodma64_t sdiod64;
  123. } dma;
  124. /* SDIO/PCMCIA CIS region */
  125. char cis[512]; /* 512 byte CIS, 0x400-0x5ff, rev6 */
  126. /* PCMCIA function control registers */
  127. char pcmciafcr[256]; /* PCMCIA FCR, 0x600-6ff, rev6 */
  128. uint16 PAD[55];
  129. /* PCMCIA backplane access */
  130. uint16 backplanecsr; /* BackplaneCSR, 0x76E, rev6 */
  131. uint16 backplaneaddr0; /* BackplaneAddr0, 0x770, rev6 */
  132. uint16 backplaneaddr1; /* BackplaneAddr1, 0x772, rev6 */
  133. uint16 backplaneaddr2; /* BackplaneAddr2, 0x774, rev6 */
  134. uint16 backplaneaddr3; /* BackplaneAddr3, 0x776, rev6 */
  135. uint16 backplanedata0; /* BackplaneData0, 0x778, rev6 */
  136. uint16 backplanedata1; /* BackplaneData1, 0x77a, rev6 */
  137. uint16 backplanedata2; /* BackplaneData2, 0x77c, rev6 */
  138. uint16 backplanedata3; /* BackplaneData3, 0x77e, rev6 */
  139. uint16 PAD[31];
  140. /* sprom "size" & "blank" info */
  141. uint16 spromstatus; /* SPROMStatus, 0x7BE, rev2 */
  142. uint32 PAD[464];
  143. /* Sonics SiliconBackplane registers */
  144. sbconfig_t sbconfig; /* SbConfig Regs, 0xf00-0xfff, rev8 */
  145. } sdpcmd_regs_t;
  146. /* corecontrol */
  147. #define CC_CISRDY (1 << 0) /* CIS Ready */
  148. #define CC_BPRESEN (1 << 1) /* CCCR RES signal causes backplane reset */
  149. #define CC_F2RDY (1 << 2) /* set CCCR IOR2 bit */
  150. #define CC_CLRPADSISO (1 << 3) /* clear SDIO pads isolation bit (rev 11) */
  151. #define CC_XMTDATAAVAIL_MODE (1 << 4) /* data avail generates an interrupt */
  152. #define CC_XMTDATAAVAIL_CTRL (1 << 5) /* data avail interrupt ctrl */
  153. /* corestatus */
  154. #define CS_PCMCIAMODE (1 << 0) /* Device Mode; 0=SDIO, 1=PCMCIA */
  155. #define CS_SMARTDEV (1 << 1) /* 1=smartDev enabled */
  156. #define CS_F2ENABLED (1 << 2) /* 1=host has enabled the device */
  157. #define PCMCIA_MES_PA_MASK 0x7fff /* PCMCIA Message Portal Address Mask */
  158. #define PCMCIA_MES_PM_MASK 0x7fff /* PCMCIA Message Portal Mask Mask */
  159. #define PCMCIA_WFBC_MASK 0xffff /* PCMCIA Write Frame Byte Count Mask */
  160. #define PCMCIA_UT_MASK 0x07ff /* PCMCIA Underflow Timer Mask */
  161. /* intstatus */
  162. #define I_SMB_SW0 (1 << 0) /* To SB Mail S/W interrupt 0 */
  163. #define I_SMB_SW1 (1 << 1) /* To SB Mail S/W interrupt 1 */
  164. #define I_SMB_SW2 (1 << 2) /* To SB Mail S/W interrupt 2 */
  165. #define I_SMB_SW3 (1 << 3) /* To SB Mail S/W interrupt 3 */
  166. #define I_SMB_SW_MASK 0x0000000f /* To SB Mail S/W interrupts mask */
  167. #define I_SMB_SW_SHIFT 0 /* To SB Mail S/W interrupts shift */
  168. #define I_HMB_SW0 (1 << 4) /* To Host Mail S/W interrupt 0 */
  169. #define I_HMB_SW1 (1 << 5) /* To Host Mail S/W interrupt 1 */
  170. #define I_HMB_SW2 (1 << 6) /* To Host Mail S/W interrupt 2 */
  171. #define I_HMB_SW3 (1 << 7) /* To Host Mail S/W interrupt 3 */
  172. #define I_HMB_SW_MASK 0x000000f0 /* To Host Mail S/W interrupts mask */
  173. #define I_HMB_SW_SHIFT 4 /* To Host Mail S/W interrupts shift */
  174. #define I_WR_OOSYNC (1 << 8) /* Write Frame Out Of Sync */
  175. #define I_RD_OOSYNC (1 << 9) /* Read Frame Out Of Sync */
  176. #define I_PC (1 << 10) /* descriptor error */
  177. #define I_PD (1 << 11) /* data error */
  178. #define I_DE (1 << 12) /* Descriptor protocol Error */
  179. #define I_RU (1 << 13) /* Receive descriptor Underflow */
  180. #define I_RO (1 << 14) /* Receive fifo Overflow */
  181. #define I_XU (1 << 15) /* Transmit fifo Underflow */
  182. #define I_RI (1 << 16) /* Receive Interrupt */
  183. #define I_BUSPWR (1 << 17) /* SDIO Bus Power Change (rev 9) */
  184. #define I_XMTDATA_AVAIL (1 << 23) /* bits in fifo */
  185. #define I_XI (1 << 24) /* Transmit Interrupt */
  186. #define I_RF_TERM (1 << 25) /* Read Frame Terminate */
  187. #define I_WF_TERM (1 << 26) /* Write Frame Terminate */
  188. #define I_PCMCIA_XU (1 << 27) /* PCMCIA Transmit FIFO Underflow */
  189. #define I_SBINT (1 << 28) /* sbintstatus Interrupt */
  190. #define I_CHIPACTIVE (1 << 29) /* chip transitioned from doze to active state */
  191. #define I_SRESET (1 << 30) /* CCCR RES interrupt */
  192. #define I_IOE2 (1U << 31) /* CCCR IOE2 Bit Changed */
  193. #define I_ERRORS (I_PC | I_PD | I_DE | I_RU | I_RO | I_XU) /* DMA Errors */
  194. #define I_DMA (I_RI | I_XI | I_ERRORS)
  195. /* sbintstatus */
  196. #define I_SB_SERR (1 << 8) /* Backplane SError (write) */
  197. #define I_SB_RESPERR (1 << 9) /* Backplane Response Error (read) */
  198. #define I_SB_SPROMERR (1 << 10) /* Error accessing the sprom */
  199. /* sdioaccess */
  200. #define SDA_DATA_MASK 0x000000ff /* Read/Write Data Mask */
  201. #define SDA_ADDR_MASK 0x000fff00 /* Read/Write Address Mask */
  202. #define SDA_ADDR_SHIFT 8 /* Read/Write Address Shift */
  203. #define SDA_WRITE 0x01000000 /* Write bit */
  204. #define SDA_READ 0x00000000 /* Write bit cleared for Read */
  205. #define SDA_BUSY 0x80000000 /* Busy bit */
  206. /* sdioaccess-accessible register address spaces */
  207. #define SDA_CCCR_SPACE 0x000 /* sdioAccess CCCR register space */
  208. #define SDA_F1_FBR_SPACE 0x100 /* sdioAccess F1 FBR register space */
  209. #define SDA_F2_FBR_SPACE 0x200 /* sdioAccess F2 FBR register space */
  210. #define SDA_F1_REG_SPACE 0x300 /* sdioAccess F1 core-specific register space */
  211. /* SDA_F1_REG_SPACE sdioaccess-accessible F1 reg space register offsets */
  212. #define SDA_CHIPCONTROLDATA 0x006 /* ChipControlData */
  213. #define SDA_CHIPCONTROLENAB 0x007 /* ChipControlEnable */
  214. #define SDA_F2WATERMARK 0x008 /* Function 2 Watermark */
  215. #define SDA_DEVICECONTROL 0x009 /* DeviceControl */
  216. #define SDA_SBADDRLOW 0x00a /* SbAddrLow */
  217. #define SDA_SBADDRMID 0x00b /* SbAddrMid */
  218. #define SDA_SBADDRHIGH 0x00c /* SbAddrHigh */
  219. #define SDA_FRAMECTRL 0x00d /* FrameCtrl */
  220. #define SDA_CHIPCLOCKCSR 0x00e /* ChipClockCSR */
  221. #define SDA_SDIOPULLUP 0x00f /* SdioPullUp */
  222. #define SDA_SDIOWRFRAMEBCLOW 0x019 /* SdioWrFrameBCLow */
  223. #define SDA_SDIOWRFRAMEBCHIGH 0x01a /* SdioWrFrameBCHigh */
  224. #define SDA_SDIORDFRAMEBCLOW 0x01b /* SdioRdFrameBCLow */
  225. #define SDA_SDIORDFRAMEBCHIGH 0x01c /* SdioRdFrameBCHigh */
  226. /* SDA_F2WATERMARK */
  227. #define SDA_F2WATERMARK_MASK 0x7f /* F2Watermark Mask */
  228. /* SDA_SBADDRLOW */
  229. #define SDA_SBADDRLOW_MASK 0x80 /* SbAddrLow Mask */
  230. /* SDA_SBADDRMID */
  231. #define SDA_SBADDRMID_MASK 0xff /* SbAddrMid Mask */
  232. /* SDA_SBADDRHIGH */
  233. #define SDA_SBADDRHIGH_MASK 0xff /* SbAddrHigh Mask */
  234. /* SDA_FRAMECTRL */
  235. #define SFC_RF_TERM (1 << 0) /* Read Frame Terminate */
  236. #define SFC_WF_TERM (1 << 1) /* Write Frame Terminate */
  237. #define SFC_CRC4WOOS (1 << 2) /* HW reports CRC error for write out of sync */
  238. #define SFC_ABORTALL (1 << 3) /* Abort cancels all in-progress frames */
  239. /* pcmciaframectrl */
  240. #define PFC_RF_TERM (1 << 0) /* Read Frame Terminate */
  241. #define PFC_WF_TERM (1 << 1) /* Write Frame Terminate */
  242. /* intrcvlazy */
  243. #define IRL_TO_MASK 0x00ffffff /* timeout */
  244. #define IRL_FC_MASK 0xff000000 /* frame count */
  245. #define IRL_FC_SHIFT 24 /* frame count */
  246. /* rx header */
  247. typedef volatile struct {
  248. uint16 len;
  249. uint16 flags;
  250. } sdpcmd_rxh_t;
  251. /* rx header flags */
  252. #define RXF_CRC 0x0001 /* CRC error detected */
  253. #define RXF_WOOS 0x0002 /* write frame out of sync */
  254. #define RXF_WF_TERM 0x0004 /* write frame terminated */
  255. #define RXF_ABORT 0x0008 /* write frame aborted */
  256. #define RXF_DISCARD (RXF_CRC | RXF_WOOS | RXF_WF_TERM | RXF_ABORT) /* bad frame */
  257. /* HW frame tag */
  258. #define SDPCM_FRAMETAG_LEN 4 /* HW frametag: 2 bytes len, 2 bytes check val */
  259. #define SDPCM_HWEXT_LEN 8
  260. #endif /* _sbsdpcmdev_h_ */