PageRenderTime 135ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/drivers/net/wireless/bcm4325/include/sbsdioh.h

https://github.com/Bugscz/DellStreak5-GingerBread
C Header | 310 lines | 208 code | 42 blank | 60 comment | 0 complexity | 8967b1831afde8d82dfc40149e6310b5 MD5 | raw file
  1. /*
  2. * BRCM SDIOH (host controller) core hardware definitions.
  3. *
  4. * SDIOH support 1bit, 4 bit SDIO mode as well as SPI mode.
  5. *
  6. * $Id: sbsdioh.h,v 13.20 2006/06/26 21:41:05 Exp $
  7. * Copyright(c) 2003 Broadcom Corporation
  8. */
  9. #ifndef _SBSDIOH_H
  10. #define _SBSDIOH_H
  11. /* cpp contortions to concatenate w/arg prescan */
  12. #ifndef PAD
  13. #define _PADLINE(line) pad ## line
  14. #define _XSTR(line) _PADLINE(line)
  15. #define PAD _XSTR(__LINE__)
  16. #endif /* PAD */
  17. typedef volatile struct {
  18. uint32 devcontrol; /* device control */
  19. uint32 PAD[15]; /* PADDING old codec registers */
  20. /* sdioh registers */
  21. uint32 mode; /* 0x40: sd mode: SDIO1/SDIO4/SPI */
  22. uint32 delay; /* 0x44: various clock config */
  23. uint32 rdto; /* 0x48: read timeout value before SDERROR.ReadTimeOut
  24. * is generated
  25. */
  26. uint32 rbto; /* 0x4c: response busy timeout value before SDERROR.BusyTimeOut
  27. * is generated
  28. */
  29. uint32 test; /* 0x50: test register to force bad CRC */
  30. uint32 arvm; /* 0x54: auto response value and mask */
  31. uint32 error; /* 0x58: Error */
  32. uint32 errormask; /* 0x5c: Error mask */
  33. uint32 cmddat; /* 0x60: SDIO CMD data */
  34. uint32 cmdl; /* 0x64: SDIO CMD argument */
  35. uint32 fifodata; /* 0x68: SDIO fifo data, little endian, changable
  36. * in mode register
  37. */
  38. uint32 respq; /* 0x6c: response queue */
  39. uint32 ct_cmddat; /* 0x70: SDIO CMD data for cutthrough commands */
  40. uint32 ct_cmdl; /* 0x74: SDIO CMD argument for cutthrough commands */
  41. uint32 ct_fifodata; /* 0x78: SDIO fifo data for cutthrough commands,
  42. * little endian only
  43. */
  44. uint32 PAD;
  45. uint32 ap_cmddat; /* 0x80: SDIO CMD data for append commands */
  46. uint32 ap_cmdl; /* 0x84: SDIO CMD argument for append commands */
  47. uint32 ap_fifodata; /* 0x88: SDIO fifo data for append commands, little endian only */
  48. uint32 PAD;
  49. uint32 intstatus; /* 0x90: interrupt status */
  50. uint32 intmask; /* 0x94: interrupt mask */
  51. uint32 PAD;
  52. uint32 debuginfo; /* 0x9c: debug register */
  53. uint32 fifoctl; /* 0xa0: fifo control */
  54. uint32 blocksize; /* 0xa4: cmd53 block mode block size */
  55. uint32 PAD[86];
  56. dma32regp_t dmaregs; /* 0x200 - 0x21C */
  57. } sdioh_regs_t;
  58. /* devcontrol */
  59. #define CODEC_DEVCTRL_SDIOH 0x4000 /* 1: config codec to SDIOH mode,
  60. * 0: normal codec mode
  61. */
  62. /* mode */
  63. #define MODE_DONT_WAIT_DMA 0x2000 /* diag only: in receive DMA mode, Cmdatadone
  64. * will be generated when data transfer done
  65. */
  66. #define MODE_BIG_ENDIAN 0x1000 /* 1: big endian, 0: small endian */
  67. #define MODE_STOP_ALL_CLK 0x0800 /* diag only: 1: stop all SD clock */
  68. #define MODE_PRECMD_CNT_EN 0x0400 /* 1: enable precmd count,
  69. * 0: disable precmd count
  70. */
  71. #define MODE_CLK_OUT_EN 0x0200 /* 0/1: en/disable the clock output to sdio bus */
  72. #define MODE_USE_EXT_CLK 0x0100 /* use external clock or not */
  73. #define MODE_CLK_DIV_MASK 0x00f0 /* divide host clock by 2*this field */
  74. #define MODE_OP_MASK 0x000f /* mode is [3:0] bits */
  75. #define MODE_OP_SDIO4BIT 2 /* SDIO 4 bit mode */
  76. #define MODE_OP_SDIO1BIT 1 /* SDIO 1 bit mode */
  77. #define MODE_OP_SPI 0 /* SPI mode */
  78. #define MODE_HIGHSPEED_EN 0x10000 /* Enable High-Speed clocking Mode. */
  79. /* delay */
  80. #define DLY_CLK_COUNT_PRE_M 0x0000ffff /* dynamic clock: pre clock on cycles before tx */
  81. #define DLY_CLK_COUNT_PRE_O 0
  82. #define DLY_TX_START_COUNT_M 0xffff0000 /* DMA mode only: wait cycle before transferring
  83. * non-empty fifo
  84. */
  85. #define DLY_TX_START_COUNT_O 23
  86. /* test */
  87. #define TEST_BAD_CMD_CRC 0x1 /* force bad CMD crc */
  88. #define TEST_BAD_DAT_CRC 0x2 /* force bad DAT crc */
  89. /* arvm */
  90. #define AR_MASK_OFT 8 /* CMD53 auto response mask */
  91. #define AR_VAL 0x00ff /* CMD53 expected value of auto response,
  92. * after mask
  93. */
  94. /* cmd dat */
  95. #define CMDAT_INDEX_M 0x0000003f /* command index */
  96. #define CMDAT_EXP_RSPTYPE_M 0x000001c0 /* expected response type */
  97. #define CMDAT_EXP_RSPTYPE_O 6
  98. #define CMDAT_DAT_EN_M 0x00000200 /* data command flag */
  99. #define CMDAT_DAT_EN_O 9
  100. #define CMDAT_DAT_WR_M 0x00000400 /* 0: read from SD device,
  101. * 1: write to SD device
  102. */
  103. #define CMDAT_DAT_WR_O 10
  104. #define CMDAT_DMA_MODE_M 0x00000800 /* 0: pio, 1: dma */
  105. #define CMDAT_DMA_MODE_O 11
  106. #define CMDAT_ARC_EN_M 0x00001000 /* auto response check enable/disable */
  107. #define CMDAT_ARC_EN_O 12
  108. #define CMDAT_EXP_BUSY_M 0x00002000 /* R1b only: expect busy after response */
  109. #define CMDAT_EXP_BUSY_O 13
  110. #define CMDAT_NO_RSP_CRC_CHK_M 0x00004000 /* disable response crc checking */
  111. #define CMDAT_NO_RSP_CRC_CHK_O 14
  112. #define CMDAT_NO_RSP_CDX_CHK_M 0x00008000 /* disable response command index checking */
  113. #define CMDAT_NO_RSP_CDX_CHK_O 15
  114. #define CMDAT_DAT_TX_CNT_M 0x1fff0000 /* total number of bytes to transfer */
  115. #define CMDAT_DAT_TX_CNT_O 16
  116. #define CMDAT_DATLEN_PIO 64 /* data length limit for pio mode */
  117. #define CMDAT_DATLEN_DMA_NON53 512 /* data length limit for DMA mode non cmd53 */
  118. #define CMDAT_DATLEN_DMA_53 8096 /* data length limit for DMA mode cmd53 */
  119. #define CMDAT_APPEND_EN_M 0x20000000 /* enable sdioh to append a command */
  120. #define CMDAT_APPEND_EN_O 29
  121. #define CMDAT_ABORT_M 0x40000000 /* abort data */
  122. #define CMDAT_ABORT_O 30
  123. #define CMDAT_BLK_EN_M 0x80000000 /* use block mode */
  124. #define CMDAT_BLK_EN_O 31
  125. /* error and error_mask */
  126. #define ERROR_RSP_CRC 0x0001 /* response crc error */
  127. #define ERROR_RSP_TIME 0x0002 /* response time error */
  128. #define ERROR_RSP_DBIT 0x0004 /* response D bit error */
  129. #define ERROR_RSP_EBIT 0x0008 /* response E bit error */
  130. #define ERROR_DAT_CRC 0x0010 /* data r/w crc error */
  131. #define ERROR_DAT_SBIT 0x0020 /* receive data START bir error */
  132. #define ERROR_DAT_EBIT 0x0040 /* receive data END bit error */
  133. #define ERROR_DAT_RSP_S 0x0080 /* data crc response START bit error */
  134. #define ERROR_DAT_RSP_E 0x0100 /* data crc response END bit error */
  135. #define ERROR_DAT_RSP_UNKNOWN 0x0200 /* data response unknown, not 101 or 010 */
  136. #define ERROR_DAT_RSP_TURNARD 0x0400 /* no 2 turnaround cycle between WRITE and
  137. * CRC reponse
  138. */
  139. #define ERROR_DAT_READ_TO 0x0800 /* data read timeout */
  140. #define ERROR_SPI_TOKEN_UNK 0x1000 /* SPI token unknown */
  141. #define ERROR_SPI_TOKEN_BAD 0x2000 /* SPI error token received */
  142. #define ERROR_SPI_ET_OUTRANGE 0x4000 /* SPI error token: out of range */
  143. #define ERROR_SPI_ET_ECC 0x8000 /* SPI error token: ECC failed */
  144. #define ERROR_SPI_ET_CC 0x010000 /* SPI error token: cc error */
  145. #define ERROR_SPI_ET_ERR 0x020000 /* SPI error token: error */
  146. #define ERROR_AUTO_RSP_CHK 0x040000 /* auto response check error */
  147. #define ERROR_RSP_BUSY_TO 0x080000 /* busy timeout for RBTO */
  148. #define ERROR_RSP_CMDIDX_BAD 0x100000 /* response command index error */
  149. /* intstatus and intmask */
  150. #define INT_CMD_DAT_DONE 0x0001 /* sticky, sdio command/data xfer done */
  151. #define INT_HOST_BUSY 0x0002 /* host busy */
  152. #define INT_DEV_INT 0x0004 /* sdio card interrupt recieved */
  153. #define INT_ERROR_SUM 0x0008 /* logic OR of Error register masked by ErrorMask */
  154. #define INT_CARD_INS 0x0010 /* card inserted */
  155. #define INT_CARD_GONE 0x0020 /* card removed */
  156. #define INT_CMDBUSY_CUTTHRU 0x0040 /* sdioh is busy writing to cmdl_cutthru register */
  157. #define INT_CMDBUSY_APPEND 0x0080 /* this bit is clear when writing cmdl,
  158. * and set when APPEND starts
  159. */
  160. #define INT_CARD_PRESENT 0x0100 /* card is present */
  161. #define INT_STD_PCI_DESC 0x0400 /* standard DMA engine definition */
  162. #define INT_STD_PCI_DATA 0x0800 /* standard DMA engine definition */
  163. #define INT_STD_DESC_ERR 0x1000 /* standard DMA engine definition */
  164. #define INT_STD_RCV_DESC_UF 0x2000 /* standard DMA engine definition */
  165. #define INT_STD_RCV_FIFO_OF 0x4000 /* standard DMA engine definition */
  166. #define INT_STD_XMT_FIFO_UF 0x8000 /* standard DMA engine definition */
  167. #define INT_RCV_INT 0x00010000 /* standard DMA engine definition */
  168. #define INT_XMT_INT 0x01000000 /* standard DMA engine definition */
  169. /* debuginfo */
  170. #define DBGI_REMAIN_COUNT 0x00001fff /* remaining count for data comand,
  171. * change on the fly
  172. */
  173. #define DBGI_CUR_ADDR 0xCfffE000 /* current address of CDM53 */
  174. #define DBGI_CARD_WASBUSY 0x40000000 /* receive card busy signal on data line */
  175. #define DBGI_R1B_DETECTED 0x80000000 /* R1B detected, overwritten by next cmd's status */
  176. /* fifoctl(rcv/xmt) */
  177. #define FIFO_RCV_BUF_RDY 0x10 /* HW set 1 when data are ready and avaiable in
  178. * FIFO, write 1 before read RCVFIFODATA
  179. */
  180. #define FIFO_XMT_BYTE_VALID 0x0f /* which bit is valid in all subsequent writes to
  181. * xmtfifodata
  182. */
  183. #define FIFO_VALID_BYTE1 0x01 /* byte 0 valid */
  184. #define FIFO_VALID_BYTE2 0x02 /* byte 1 valid */
  185. #define FIFO_VALID_BYTE3 0x04 /* byte 2 valid */
  186. #define FIFO_VALID_BYTE4 0x08 /* byte 3 valid */
  187. #define FIFO_VALID_ALL 0x0f /* all four bytes are valid */
  188. #define SDIOH_MODE_PIO 0 /* pio mode */
  189. #define SDIOH_MODE_DMA 1 /* dma mode */
  190. #define SDIOH_CMDTYPE_NORMAL 0 /* normal command */
  191. #define SDIOH_CMDTYPE_APPEND 1 /* append command */
  192. #define SDIOH_CMDTYPE_CUTTHRU 2 /* cut through command */
  193. #define SDIOH_DMA_START_EARLY 0
  194. #define SDIOH_DMA_START_LATE 1
  195. #define SDIOH_DMA_TX 1
  196. #define SDIOH_DMA_RX 2
  197. #define SDIOH_BLOCK_SIZE_MIN 4
  198. #define SDIOH_BLOCK_SIZE_MAX 0x200
  199. #define SDIOH_SB_ENUM_OFFSET 0x1000 /* sdioh-codec core SB address inside pci-sdioh
  200. * controller
  201. */
  202. #define SDIOH_HOST_SUPPORT_OCR 0xfff000 /* supported OCR by host controller */
  203. #define RESP_TYPE_NONE 0
  204. #define RESP_TYPE_R1 1
  205. #define RESP_TYPE_R2 2
  206. #define RESP_TYPE_R3 3
  207. #define RESP_TYPE_R4 4
  208. #define RESP_TYPE_R5 5
  209. #define RESP_TYPE_R6 6
  210. /* SDCMDAT Register */
  211. #define SDIOH_CMD_INDEX_M BITFIELD_MASK(6) /* Bits [5:0] - Command number */
  212. #define SDIOH_CMD_INDEX_S 0
  213. #define SDIOH_CMD_RESP_TYPE_M BITFIELD_MASK(3) /* Bits [8:6] - Response type */
  214. #define SDIOH_CMD_RESP_TYPE_S 6
  215. #define SDIOH_CMD_DATA_EN_M BITFIELD_MASK(1) /* Bit 9 - Using DAT line */
  216. #define SDIOH_CMD_DATA_EN_S 9
  217. #define SDIOH_CMD_DATWR_M BITFIELD_MASK(1) /* Bit 10 - Data Write */
  218. #define SDIOH_CMD_DATWR_S 10
  219. #define SDIOH_CMD_DMAMODE_M BITFIELD_MASK(1) /* Bit 11 - DMA Mode */
  220. #define SDIOH_CMD_DMAMODE_S 11
  221. #define SDIOH_CMD_ARC_EN_M BITFIELD_MASK(1) /* Bit 12 - Auto Response Checking */
  222. #define SDIOH_CMD_ARC_EN_S 12
  223. #define SDIOH_CMD_EXP_BSY_M BITFIELD_MASK(1) /* Bit 13 - Expect Busy (R1b) */
  224. #define SDIOH_CMD_EXP_BSY_S 13
  225. #define SDIOH_CMD_CRC_DIS_M BITFIELD_MASK(1) /* Bit 14 - CRC disable */
  226. #define SDIOH_CMD_CRC_DIS_S 14
  227. #define SDIOH_CMD_INDEX_DIS_M BITFIELD_MASK(1) /* Bit 15 - Disable index checking */
  228. #define SDIOH_CMD_INDEX_DIS_S 15
  229. #define SDIOH_CMD_TR_COUNT_M BITFIELD_MASK(13) /* Bits [28:16] - Transfer Count */
  230. #define SDIOH_CMD_TR_COUNT_S 16
  231. #define SDIOH_CMD_APPEND_EN_M BITFIELD_MASK(1) /* Bit 29 - Append enable */
  232. #define SDIOH_CMD_APPEND_EN_S 29
  233. #define SDIOH_CMD_ABORT_EN_M BITFIELD_MASK(1) /* Bit 30 - Abort enable */
  234. #define SDIOH_CMD_ABORT_EN_S 30
  235. #define SDIOH_CMD_BLKMODE_EN_M BITFIELD_MASK(1) /* Bit 31 - Blockmode enable */
  236. #define SDIOH_CMD_BLKMODE_EN_S 31
  237. /* intstatus and intmask */
  238. #define INT_CMD_DAT_DONE_M BITFIELD_MASK(1) /* Bit 0: sticky,
  239. * sdio command/data xfer done
  240. */
  241. #define INT_CMD_DAT_DONE_S 0
  242. #define INT_HOST_BUSY_M BITFIELD_MASK(1) /* Bit 1: host busy */
  243. #define INT_HOST_BUSY_S 1
  244. #define INT_DEV_INT_M BITFIELD_MASK(1) /* Bit 2: sdio dev interrupt recieved */
  245. #define INT_DEV_INT_S 2
  246. #define INT_ERROR_SUM_M BITFIELD_MASK(1) /* Bit 3: OR of Error reg
  247. * masked by ErrorMask
  248. */
  249. #define INT_ERROR_SUM_S 3
  250. #define INT_CARD_INS_M BITFIELD_MASK(1) /* Bit 4: dev inserted */
  251. #define INT_CARD_INS_S 4
  252. #define INT_CARD_GONE_M BITFIELD_MASK(1) /* Bit 5: dev removed */
  253. #define INT_CARD_GONE_S 5
  254. #define INT_CMDBUSY_CUTTHRU_M BITFIELD_MASK(1) /* sdioh is busy writing to cmdl_cutthru reg
  255. */
  256. #define INT_CMDBUSY_CUTTHRU_S 6
  257. #define INT_CMDBUSY_APPEND_M BITFIELD_MASK(1) /* this bit is clear when writing cmdl, */
  258. #define INT_CMDBUSY_APPEND_S 7 /* and set when APPEND starts */
  259. #define INT_RCV_INT_M BITFIELD_MASK(1) /* Receive DMA Interrupt */
  260. #define INT_RCV_INT_S 16
  261. #define INT_XMT_INT_M BITFIELD_MASK(1) /* Transmit DMA Interrupt */
  262. #define INT_XMT_INT_S 24
  263. /* SDBLOCK Register */
  264. #define SDBLOCK_M BITFIELD_MASK(10) /* Bits [9:0] Blocksize */
  265. #define SDBLOCK_S 0
  266. #define SD1_MODE 0x1 /* SD Host Cntrlr Spec */
  267. #define SD4_MODE 0x2 /* SD Host Cntrlr Spec */
  268. #endif /* _SBSDIOH_H */