diff options
Diffstat (limited to 'drivers/net/wireless/bcmdhd/include/sdio.h')
-rw-r--r-- | drivers/net/wireless/bcmdhd/include/sdio.h | 611 |
1 files changed, 611 insertions, 0 deletions
diff --git a/drivers/net/wireless/bcmdhd/include/sdio.h b/drivers/net/wireless/bcmdhd/include/sdio.h new file mode 100644 index 00000000000..ca932266a1b --- /dev/null +++ b/drivers/net/wireless/bcmdhd/include/sdio.h | |||
@@ -0,0 +1,611 @@ | |||
1 | /* | ||
2 | * SDIO spec header file | ||
3 | * Protocol and standard (common) device definitions | ||
4 | * | ||
5 | * Copyright (C) 1999-2011, 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 | * $Id: sdio.h,v 13.27.14.1 2010-09-07 13:37:45 Exp $ | ||
26 | */ | ||
27 | |||
28 | #ifndef _SDIO_H | ||
29 | #define _SDIO_H | ||
30 | |||
31 | |||
32 | /* CCCR structure for function 0 */ | ||
33 | typedef volatile struct { | ||
34 | uint8 cccr_sdio_rev; /* RO, cccr and sdio revision */ | ||
35 | uint8 sd_rev; /* RO, sd spec revision */ | ||
36 | uint8 io_en; /* I/O enable */ | ||
37 | uint8 io_rdy; /* I/O ready reg */ | ||
38 | uint8 intr_ctl; /* Master and per function interrupt enable control */ | ||
39 | uint8 intr_status; /* RO, interrupt pending status */ | ||
40 | uint8 io_abort; /* read/write abort or reset all functions */ | ||
41 | uint8 bus_inter; /* bus interface control */ | ||
42 | uint8 capability; /* RO, card capability */ | ||
43 | |||
44 | uint8 cis_base_low; /* 0x9 RO, common CIS base address, LSB */ | ||
45 | uint8 cis_base_mid; | ||
46 | uint8 cis_base_high; /* 0xB RO, common CIS base address, MSB */ | ||
47 | |||
48 | /* suspend/resume registers */ | ||
49 | uint8 bus_suspend; /* 0xC */ | ||
50 | uint8 func_select; /* 0xD */ | ||
51 | uint8 exec_flag; /* 0xE */ | ||
52 | uint8 ready_flag; /* 0xF */ | ||
53 | |||
54 | uint8 fn0_blk_size[2]; /* 0x10(LSB), 0x11(MSB) */ | ||
55 | |||
56 | uint8 power_control; /* 0x12 (SDIO version 1.10) */ | ||
57 | |||
58 | uint8 speed_control; /* 0x13 */ | ||
59 | } sdio_regs_t; | ||
60 | |||
61 | /* SDIO Device CCCR offsets */ | ||
62 | #define SDIOD_CCCR_REV 0x00 | ||
63 | #define SDIOD_CCCR_SDREV 0x01 | ||
64 | #define SDIOD_CCCR_IOEN 0x02 | ||
65 | #define SDIOD_CCCR_IORDY 0x03 | ||
66 | #define SDIOD_CCCR_INTEN 0x04 | ||
67 | #define SDIOD_CCCR_INTPEND 0x05 | ||
68 | #define SDIOD_CCCR_IOABORT 0x06 | ||
69 | #define SDIOD_CCCR_BICTRL 0x07 | ||
70 | #define SDIOD_CCCR_CAPABLITIES 0x08 | ||
71 | #define SDIOD_CCCR_CISPTR_0 0x09 | ||
72 | #define SDIOD_CCCR_CISPTR_1 0x0A | ||
73 | #define SDIOD_CCCR_CISPTR_2 0x0B | ||
74 | #define SDIOD_CCCR_BUSSUSP 0x0C | ||
75 | #define SDIOD_CCCR_FUNCSEL 0x0D | ||
76 | #define SDIOD_CCCR_EXECFLAGS 0x0E | ||
77 | #define SDIOD_CCCR_RDYFLAGS 0x0F | ||
78 | #define SDIOD_CCCR_BLKSIZE_0 0x10 | ||
79 | #define SDIOD_CCCR_BLKSIZE_1 0x11 | ||
80 | #define SDIOD_CCCR_POWER_CONTROL 0x12 | ||
81 | #define SDIOD_CCCR_SPEED_CONTROL 0x13 | ||
82 | #define SDIOD_CCCR_UHSI_SUPPORT 0x14 | ||
83 | #define SDIOD_CCCR_DRIVER_STRENGTH 0x15 | ||
84 | #define SDIOD_CCCR_INTR_EXTN 0x16 | ||
85 | |||
86 | /* Broadcom extensions (corerev >= 1) */ | ||
87 | #define SDIOD_CCCR_BRCM_SEPINT 0xf2 | ||
88 | |||
89 | /* cccr_sdio_rev */ | ||
90 | #define SDIO_REV_SDIOID_MASK 0xf0 /* SDIO spec revision number */ | ||
91 | #define SDIO_REV_CCCRID_MASK 0x0f /* CCCR format version number */ | ||
92 | |||
93 | /* sd_rev */ | ||
94 | #define SD_REV_PHY_MASK 0x0f /* SD format version number */ | ||
95 | |||
96 | /* io_en */ | ||
97 | #define SDIO_FUNC_ENABLE_1 0x02 /* function 1 I/O enable */ | ||
98 | #define SDIO_FUNC_ENABLE_2 0x04 /* function 2 I/O enable */ | ||
99 | |||
100 | /* io_rdys */ | ||
101 | #define SDIO_FUNC_READY_1 0x02 /* function 1 I/O ready */ | ||
102 | #define SDIO_FUNC_READY_2 0x04 /* function 2 I/O ready */ | ||
103 | |||
104 | /* intr_ctl */ | ||
105 | #define INTR_CTL_MASTER_EN 0x1 /* interrupt enable master */ | ||
106 | #define INTR_CTL_FUNC1_EN 0x2 /* interrupt enable for function 1 */ | ||
107 | #define INTR_CTL_FUNC2_EN 0x4 /* interrupt enable for function 2 */ | ||
108 | |||
109 | /* intr_status */ | ||
110 | #define INTR_STATUS_FUNC1 0x2 /* interrupt pending for function 1 */ | ||
111 | #define INTR_STATUS_FUNC2 0x4 /* interrupt pending for function 2 */ | ||
112 | |||
113 | /* io_abort */ | ||
114 | #define IO_ABORT_RESET_ALL 0x08 /* I/O card reset */ | ||
115 | #define IO_ABORT_FUNC_MASK 0x07 /* abort selction: function x */ | ||
116 | |||
117 | /* bus_inter */ | ||
118 | #define BUS_CARD_DETECT_DIS 0x80 /* Card Detect disable */ | ||
119 | #define BUS_SPI_CONT_INTR_CAP 0x40 /* support continuous SPI interrupt */ | ||
120 | #define BUS_SPI_CONT_INTR_EN 0x20 /* continuous SPI interrupt enable */ | ||
121 | #define BUS_SD_DATA_WIDTH_MASK 0x03 /* bus width mask */ | ||
122 | #define BUS_SD_DATA_WIDTH_4BIT 0x02 /* bus width 4-bit mode */ | ||
123 | #define BUS_SD_DATA_WIDTH_1BIT 0x00 /* bus width 1-bit mode */ | ||
124 | |||
125 | /* capability */ | ||
126 | #define SDIO_CAP_4BLS 0x80 /* 4-bit support for low speed card */ | ||
127 | #define SDIO_CAP_LSC 0x40 /* low speed card */ | ||
128 | #define SDIO_CAP_E4MI 0x20 /* enable interrupt between block of data in 4-bit mode */ | ||
129 | #define SDIO_CAP_S4MI 0x10 /* support interrupt between block of data in 4-bit mode */ | ||
130 | #define SDIO_CAP_SBS 0x08 /* support suspend/resume */ | ||
131 | #define SDIO_CAP_SRW 0x04 /* support read wait */ | ||
132 | #define SDIO_CAP_SMB 0x02 /* support multi-block transfer */ | ||
133 | #define SDIO_CAP_SDC 0x01 /* Support Direct commands during multi-byte transfer */ | ||
134 | |||
135 | /* power_control */ | ||
136 | #define SDIO_POWER_SMPC 0x01 /* supports master power control (RO) */ | ||
137 | #define SDIO_POWER_EMPC 0x02 /* enable master power control (allow > 200mA) (RW) */ | ||
138 | |||
139 | /* speed_control (control device entry into high-speed clocking mode) */ | ||
140 | #define SDIO_SPEED_SHS 0x01 /* supports high-speed [clocking] mode (RO) */ | ||
141 | #define SDIO_SPEED_EHS 0x02 /* enable high-speed [clocking] mode (RW) */ | ||
142 | |||
143 | /* for setting bus speed in card: 0x13h */ | ||
144 | #define SDIO_BUS_SPEED_UHSISEL_M BITFIELD_MASK(3) | ||
145 | #define SDIO_BUS_SPEED_UHSISEL_S 1 | ||
146 | |||
147 | /* for getting bus speed cap in card: 0x14h */ | ||
148 | #define SDIO_BUS_SPEED_UHSICAP_M BITFIELD_MASK(3) | ||
149 | #define SDIO_BUS_SPEED_UHSICAP_S 0 | ||
150 | |||
151 | /* for getting driver type CAP in card: 0x15h */ | ||
152 | #define SDIO_BUS_DRVR_TYPE_CAP_M BITFIELD_MASK(3) | ||
153 | #define SDIO_BUS_DRVR_TYPE_CAP_S 0 | ||
154 | |||
155 | /* for setting driver type selection in card: 0x15h */ | ||
156 | #define SDIO_BUS_DRVR_TYPE_SEL_M BITFIELD_MASK(2) | ||
157 | #define SDIO_BUS_DRVR_TYPE_SEL_S 4 | ||
158 | |||
159 | /* for getting async int support in card: 0x16h */ | ||
160 | #define SDIO_BUS_ASYNCINT_CAP_M BITFIELD_MASK(1) | ||
161 | #define SDIO_BUS_ASYNCINT_CAP_S 0 | ||
162 | |||
163 | /* for setting async int selection in card: 0x16h */ | ||
164 | #define SDIO_BUS_ASYNCINT_SEL_M BITFIELD_MASK(1) | ||
165 | #define SDIO_BUS_ASYNCINT_SEL_S 1 | ||
166 | |||
167 | /* brcm sepint */ | ||
168 | #define SDIO_SEPINT_MASK 0x01 /* route sdpcmdev intr onto separate pad (chip-specific) */ | ||
169 | #define SDIO_SEPINT_OE 0x02 /* 1 asserts output enable for above pad */ | ||
170 | #define SDIO_SEPINT_ACT_HI 0x04 /* use active high interrupt level instead of active low */ | ||
171 | |||
172 | /* FBR structure for function 1-7, FBR addresses and register offsets */ | ||
173 | typedef volatile struct { | ||
174 | uint8 devctr; /* device interface, CSA control */ | ||
175 | uint8 ext_dev; /* extended standard I/O device type code */ | ||
176 | uint8 pwr_sel; /* power selection support */ | ||
177 | uint8 PAD[6]; /* reserved */ | ||
178 | |||
179 | uint8 cis_low; /* CIS LSB */ | ||
180 | uint8 cis_mid; | ||
181 | uint8 cis_high; /* CIS MSB */ | ||
182 | uint8 csa_low; /* code storage area, LSB */ | ||
183 | uint8 csa_mid; | ||
184 | uint8 csa_high; /* code storage area, MSB */ | ||
185 | uint8 csa_dat_win; /* data access window to function */ | ||
186 | |||
187 | uint8 fnx_blk_size[2]; /* block size, little endian */ | ||
188 | } sdio_fbr_t; | ||
189 | |||
190 | /* Maximum number of I/O funcs */ | ||
191 | #define SDIOD_MAX_IOFUNCS 7 | ||
192 | |||
193 | /* SDIO Device FBR Start Address */ | ||
194 | #define SDIOD_FBR_STARTADDR 0x100 | ||
195 | |||
196 | /* SDIO Device FBR Size */ | ||
197 | #define SDIOD_FBR_SIZE 0x100 | ||
198 | |||
199 | /* Macro to calculate FBR register base */ | ||
200 | #define SDIOD_FBR_BASE(n) ((n) * 0x100) | ||
201 | |||
202 | /* Function register offsets */ | ||
203 | #define SDIOD_FBR_DEVCTR 0x00 /* basic info for function */ | ||
204 | #define SDIOD_FBR_EXT_DEV 0x01 /* extended I/O device code */ | ||
205 | #define SDIOD_FBR_PWR_SEL 0x02 /* power selection bits */ | ||
206 | |||
207 | /* SDIO Function CIS ptr offset */ | ||
208 | #define SDIOD_FBR_CISPTR_0 0x09 | ||
209 | #define SDIOD_FBR_CISPTR_1 0x0A | ||
210 | #define SDIOD_FBR_CISPTR_2 0x0B | ||
211 | |||
212 | /* Code Storage Area pointer */ | ||
213 | #define SDIOD_FBR_CSA_ADDR_0 0x0C | ||
214 | #define SDIOD_FBR_CSA_ADDR_1 0x0D | ||
215 | #define SDIOD_FBR_CSA_ADDR_2 0x0E | ||
216 | #define SDIOD_FBR_CSA_DATA 0x0F | ||
217 | |||
218 | /* SDIO Function I/O Block Size */ | ||
219 | #define SDIOD_FBR_BLKSIZE_0 0x10 | ||
220 | #define SDIOD_FBR_BLKSIZE_1 0x11 | ||
221 | |||
222 | /* devctr */ | ||
223 | #define SDIOD_FBR_DEVCTR_DIC 0x0f /* device interface code */ | ||
224 | #define SDIOD_FBR_DECVTR_CSA 0x40 /* CSA support flag */ | ||
225 | #define SDIOD_FBR_DEVCTR_CSA_EN 0x80 /* CSA enabled */ | ||
226 | /* interface codes */ | ||
227 | #define SDIOD_DIC_NONE 0 /* SDIO standard interface is not supported */ | ||
228 | #define SDIOD_DIC_UART 1 | ||
229 | #define SDIOD_DIC_BLUETOOTH_A 2 | ||
230 | #define SDIOD_DIC_BLUETOOTH_B 3 | ||
231 | #define SDIOD_DIC_GPS 4 | ||
232 | #define SDIOD_DIC_CAMERA 5 | ||
233 | #define SDIOD_DIC_PHS 6 | ||
234 | #define SDIOD_DIC_WLAN 7 | ||
235 | #define SDIOD_DIC_EXT 0xf /* extended device interface, read ext_dev register */ | ||
236 | |||
237 | /* pwr_sel */ | ||
238 | #define SDIOD_PWR_SEL_SPS 0x01 /* supports power selection */ | ||
239 | #define SDIOD_PWR_SEL_EPS 0x02 /* enable power selection (low-current mode) */ | ||
240 | |||
241 | /* misc defines */ | ||
242 | #define SDIO_FUNC_0 0 | ||
243 | #define SDIO_FUNC_1 1 | ||
244 | #define SDIO_FUNC_2 2 | ||
245 | #define SDIO_FUNC_3 3 | ||
246 | #define SDIO_FUNC_4 4 | ||
247 | #define SDIO_FUNC_5 5 | ||
248 | #define SDIO_FUNC_6 6 | ||
249 | #define SDIO_FUNC_7 7 | ||
250 | |||
251 | #define SD_CARD_TYPE_UNKNOWN 0 /* bad type or unrecognized */ | ||
252 | #define SD_CARD_TYPE_IO 1 /* IO only card */ | ||
253 | #define SD_CARD_TYPE_MEMORY 2 /* memory only card */ | ||
254 | #define SD_CARD_TYPE_COMBO 3 /* IO and memory combo card */ | ||
255 | |||
256 | #define SDIO_MAX_BLOCK_SIZE 2048 /* maximum block size for block mode operation */ | ||
257 | #define SDIO_MIN_BLOCK_SIZE 1 /* minimum block size for block mode operation */ | ||
258 | |||
259 | /* Card registers: status bit position */ | ||
260 | #define CARDREG_STATUS_BIT_OUTOFRANGE 31 | ||
261 | #define CARDREG_STATUS_BIT_COMCRCERROR 23 | ||
262 | #define CARDREG_STATUS_BIT_ILLEGALCOMMAND 22 | ||
263 | #define CARDREG_STATUS_BIT_ERROR 19 | ||
264 | #define CARDREG_STATUS_BIT_IOCURRENTSTATE3 12 | ||
265 | #define CARDREG_STATUS_BIT_IOCURRENTSTATE2 11 | ||
266 | #define CARDREG_STATUS_BIT_IOCURRENTSTATE1 10 | ||
267 | #define CARDREG_STATUS_BIT_IOCURRENTSTATE0 9 | ||
268 | #define CARDREG_STATUS_BIT_FUN_NUM_ERROR 4 | ||
269 | |||
270 | |||
271 | |||
272 | #define SD_CMD_GO_IDLE_STATE 0 /* mandatory for SDIO */ | ||
273 | #define SD_CMD_SEND_OPCOND 1 | ||
274 | #define SD_CMD_MMC_SET_RCA 3 | ||
275 | #define SD_CMD_IO_SEND_OP_COND 5 /* mandatory for SDIO */ | ||
276 | #define SD_CMD_SELECT_DESELECT_CARD 7 | ||
277 | #define SD_CMD_SEND_CSD 9 | ||
278 | #define SD_CMD_SEND_CID 10 | ||
279 | #define SD_CMD_STOP_TRANSMISSION 12 | ||
280 | #define SD_CMD_SEND_STATUS 13 | ||
281 | #define SD_CMD_GO_INACTIVE_STATE 15 | ||
282 | #define SD_CMD_SET_BLOCKLEN 16 | ||
283 | #define SD_CMD_READ_SINGLE_BLOCK 17 | ||
284 | #define SD_CMD_READ_MULTIPLE_BLOCK 18 | ||
285 | #define SD_CMD_WRITE_BLOCK 24 | ||
286 | #define SD_CMD_WRITE_MULTIPLE_BLOCK 25 | ||
287 | #define SD_CMD_PROGRAM_CSD 27 | ||
288 | #define SD_CMD_SET_WRITE_PROT 28 | ||
289 | #define SD_CMD_CLR_WRITE_PROT 29 | ||
290 | #define SD_CMD_SEND_WRITE_PROT 30 | ||
291 | #define SD_CMD_ERASE_WR_BLK_START 32 | ||
292 | #define SD_CMD_ERASE_WR_BLK_END 33 | ||
293 | #define SD_CMD_ERASE 38 | ||
294 | #define SD_CMD_LOCK_UNLOCK 42 | ||
295 | #define SD_CMD_IO_RW_DIRECT 52 /* mandatory for SDIO */ | ||
296 | #define SD_CMD_IO_RW_EXTENDED 53 /* mandatory for SDIO */ | ||
297 | #define SD_CMD_APP_CMD 55 | ||
298 | #define SD_CMD_GEN_CMD 56 | ||
299 | #define SD_CMD_READ_OCR 58 | ||
300 | #define SD_CMD_CRC_ON_OFF 59 /* mandatory for SDIO */ | ||
301 | #define SD_ACMD_SD_STATUS 13 | ||
302 | #define SD_ACMD_SEND_NUM_WR_BLOCKS 22 | ||
303 | #define SD_ACMD_SET_WR_BLOCK_ERASE_CNT 23 | ||
304 | #define SD_ACMD_SD_SEND_OP_COND 41 | ||
305 | #define SD_ACMD_SET_CLR_CARD_DETECT 42 | ||
306 | #define SD_ACMD_SEND_SCR 51 | ||
307 | |||
308 | /* argument for SD_CMD_IO_RW_DIRECT and SD_CMD_IO_RW_EXTENDED */ | ||
309 | #define SD_IO_OP_READ 0 /* Read_Write: Read */ | ||
310 | #define SD_IO_OP_WRITE 1 /* Read_Write: Write */ | ||
311 | #define SD_IO_RW_NORMAL 0 /* no RAW */ | ||
312 | #define SD_IO_RW_RAW 1 /* RAW */ | ||
313 | #define SD_IO_BYTE_MODE 0 /* Byte Mode */ | ||
314 | #define SD_IO_BLOCK_MODE 1 /* BlockMode */ | ||
315 | #define SD_IO_FIXED_ADDRESS 0 /* fix Address */ | ||
316 | #define SD_IO_INCREMENT_ADDRESS 1 /* IncrementAddress */ | ||
317 | |||
318 | /* build SD_CMD_IO_RW_DIRECT Argument */ | ||
319 | #define SDIO_IO_RW_DIRECT_ARG(rw, raw, func, addr, data) \ | ||
320 | ((((rw) & 1) << 31) | (((func) & 0x7) << 28) | (((raw) & 1) << 27) | \ | ||
321 | (((addr) & 0x1FFFF) << 9) | ((data) & 0xFF)) | ||
322 | |||
323 | /* build SD_CMD_IO_RW_EXTENDED Argument */ | ||
324 | #define SDIO_IO_RW_EXTENDED_ARG(rw, blk, func, addr, inc_addr, count) \ | ||
325 | ((((rw) & 1) << 31) | (((func) & 0x7) << 28) | (((blk) & 1) << 27) | \ | ||
326 | (((inc_addr) & 1) << 26) | (((addr) & 0x1FFFF) << 9) | ((count) & 0x1FF)) | ||
327 | |||
328 | /* SDIO response parameters */ | ||
329 | #define SD_RSP_NO_NONE 0 | ||
330 | #define SD_RSP_NO_1 1 | ||
331 | #define SD_RSP_NO_2 2 | ||
332 | #define SD_RSP_NO_3 3 | ||
333 | #define SD_RSP_NO_4 4 | ||
334 | #define SD_RSP_NO_5 5 | ||
335 | #define SD_RSP_NO_6 6 | ||
336 | |||
337 | /* Modified R6 response (to CMD3) */ | ||
338 | #define SD_RSP_MR6_COM_CRC_ERROR 0x8000 | ||
339 | #define SD_RSP_MR6_ILLEGAL_COMMAND 0x4000 | ||
340 | #define SD_RSP_MR6_ERROR 0x2000 | ||
341 | |||
342 | /* Modified R1 in R4 Response (to CMD5) */ | ||
343 | #define SD_RSP_MR1_SBIT 0x80 | ||
344 | #define SD_RSP_MR1_PARAMETER_ERROR 0x40 | ||
345 | #define SD_RSP_MR1_RFU5 0x20 | ||
346 | #define SD_RSP_MR1_FUNC_NUM_ERROR 0x10 | ||
347 | #define SD_RSP_MR1_COM_CRC_ERROR 0x08 | ||
348 | #define SD_RSP_MR1_ILLEGAL_COMMAND 0x04 | ||
349 | #define SD_RSP_MR1_RFU1 0x02 | ||
350 | #define SD_RSP_MR1_IDLE_STATE 0x01 | ||
351 | |||
352 | /* R5 response (to CMD52 and CMD53) */ | ||
353 | #define SD_RSP_R5_COM_CRC_ERROR 0x80 | ||
354 | #define SD_RSP_R5_ILLEGAL_COMMAND 0x40 | ||
355 | #define SD_RSP_R5_IO_CURRENTSTATE1 0x20 | ||
356 | #define SD_RSP_R5_IO_CURRENTSTATE0 0x10 | ||
357 | #define SD_RSP_R5_ERROR 0x08 | ||
358 | #define SD_RSP_R5_RFU 0x04 | ||
359 | #define SD_RSP_R5_FUNC_NUM_ERROR 0x02 | ||
360 | #define SD_RSP_R5_OUT_OF_RANGE 0x01 | ||
361 | |||
362 | #define SD_RSP_R5_ERRBITS 0xCB | ||
363 | |||
364 | |||
365 | /* ------------------------------------------------ | ||
366 | * SDIO Commands and responses | ||
367 | * | ||
368 | * I/O only commands are: | ||
369 | * CMD0, CMD3, CMD5, CMD7, CMD15, CMD52, CMD53 | ||
370 | * ------------------------------------------------ | ||
371 | */ | ||
372 | |||
373 | /* SDIO Commands */ | ||
374 | #define SDIOH_CMD_0 0 | ||
375 | #define SDIOH_CMD_3 3 | ||
376 | #define SDIOH_CMD_5 5 | ||
377 | #define SDIOH_CMD_7 7 | ||
378 | #define SDIOH_CMD_11 11 | ||
379 | #define SDIOH_CMD_14 14 | ||
380 | #define SDIOH_CMD_15 15 | ||
381 | #define SDIOH_CMD_19 19 | ||
382 | #define SDIOH_CMD_52 52 | ||
383 | #define SDIOH_CMD_53 53 | ||
384 | #define SDIOH_CMD_59 59 | ||
385 | |||
386 | /* SDIO Command Responses */ | ||
387 | #define SDIOH_RSP_NONE 0 | ||
388 | #define SDIOH_RSP_R1 1 | ||
389 | #define SDIOH_RSP_R2 2 | ||
390 | #define SDIOH_RSP_R3 3 | ||
391 | #define SDIOH_RSP_R4 4 | ||
392 | #define SDIOH_RSP_R5 5 | ||
393 | #define SDIOH_RSP_R6 6 | ||
394 | |||
395 | /* | ||
396 | * SDIO Response Error flags | ||
397 | */ | ||
398 | #define SDIOH_RSP5_ERROR_FLAGS 0xCB | ||
399 | |||
400 | /* ------------------------------------------------ | ||
401 | * SDIO Command structures. I/O only commands are: | ||
402 | * | ||
403 | * CMD0, CMD3, CMD5, CMD7, CMD15, CMD52, CMD53 | ||
404 | * ------------------------------------------------ | ||
405 | */ | ||
406 | |||
407 | #define CMD5_OCR_M BITFIELD_MASK(24) | ||
408 | #define CMD5_OCR_S 0 | ||
409 | |||
410 | #define CMD5_S18R_M BITFIELD_MASK(1) | ||
411 | #define CMD5_S18R_S 24 | ||
412 | |||
413 | #define CMD7_RCA_M BITFIELD_MASK(16) | ||
414 | #define CMD7_RCA_S 16 | ||
415 | #define CMD14_RCA_M BITFIELD_MASK(16) | ||
416 | #define CMD14_RCA_S 16 | ||
417 | #define CMD14_SLEEP_M BITFIELD_MASK(1) | ||
418 | #define CMD14_SLEEP_S 15 | ||
419 | |||
420 | #define CMD_15_RCA_M BITFIELD_MASK(16) | ||
421 | #define CMD_15_RCA_S 16 | ||
422 | |||
423 | #define CMD52_DATA_M BITFIELD_MASK(8) /* Bits [7:0] - Write Data/Stuff bits of CMD52 | ||
424 | */ | ||
425 | #define CMD52_DATA_S 0 | ||
426 | #define CMD52_REG_ADDR_M BITFIELD_MASK(17) /* Bits [25:9] - register address */ | ||
427 | #define CMD52_REG_ADDR_S 9 | ||
428 | #define CMD52_RAW_M BITFIELD_MASK(1) /* Bit 27 - Read after Write flag */ | ||
429 | #define CMD52_RAW_S 27 | ||
430 | #define CMD52_FUNCTION_M BITFIELD_MASK(3) /* Bits [30:28] - Function number */ | ||
431 | #define CMD52_FUNCTION_S 28 | ||
432 | #define CMD52_RW_FLAG_M BITFIELD_MASK(1) /* Bit 31 - R/W flag */ | ||
433 | #define CMD52_RW_FLAG_S 31 | ||
434 | |||
435 | |||
436 | #define CMD53_BYTE_BLK_CNT_M BITFIELD_MASK(9) /* Bits [8:0] - Byte/Block Count of CMD53 */ | ||
437 | #define CMD53_BYTE_BLK_CNT_S 0 | ||
438 | #define CMD53_REG_ADDR_M BITFIELD_MASK(17) /* Bits [25:9] - register address */ | ||
439 | #define CMD53_REG_ADDR_S 9 | ||
440 | #define CMD53_OP_CODE_M BITFIELD_MASK(1) /* Bit 26 - R/W Operation Code */ | ||
441 | #define CMD53_OP_CODE_S 26 | ||
442 | #define CMD53_BLK_MODE_M BITFIELD_MASK(1) /* Bit 27 - Block Mode */ | ||
443 | #define CMD53_BLK_MODE_S 27 | ||
444 | #define CMD53_FUNCTION_M BITFIELD_MASK(3) /* Bits [30:28] - Function number */ | ||
445 | #define CMD53_FUNCTION_S 28 | ||
446 | #define CMD53_RW_FLAG_M BITFIELD_MASK(1) /* Bit 31 - R/W flag */ | ||
447 | #define CMD53_RW_FLAG_S 31 | ||
448 | |||
449 | /* ------------------------------------------------------ | ||
450 | * SDIO Command Response structures for SD1 and SD4 modes | ||
451 | * ----------------------------------------------------- | ||
452 | */ | ||
453 | #define RSP4_IO_OCR_M BITFIELD_MASK(24) /* Bits [23:0] - Card's OCR Bits [23:0] */ | ||
454 | #define RSP4_IO_OCR_S 0 | ||
455 | |||
456 | #define RSP4_S18A_M BITFIELD_MASK(1) /* Bits [23:0] - Card's OCR Bits [23:0] */ | ||
457 | #define RSP4_S18A_S 24 | ||
458 | |||
459 | #define RSP4_STUFF_M BITFIELD_MASK(3) /* Bits [26:24] - Stuff bits */ | ||
460 | #define RSP4_STUFF_S 24 | ||
461 | #define RSP4_MEM_PRESENT_M BITFIELD_MASK(1) /* Bit 27 - Memory present */ | ||
462 | #define RSP4_MEM_PRESENT_S 27 | ||
463 | #define RSP4_NUM_FUNCS_M BITFIELD_MASK(3) /* Bits [30:28] - Number of I/O funcs */ | ||
464 | #define RSP4_NUM_FUNCS_S 28 | ||
465 | #define RSP4_CARD_READY_M BITFIELD_MASK(1) /* Bit 31 - SDIO card ready */ | ||
466 | #define RSP4_CARD_READY_S 31 | ||
467 | |||
468 | #define RSP6_STATUS_M BITFIELD_MASK(16) /* Bits [15:0] - Card status bits [19,22,23,12:0] | ||
469 | */ | ||
470 | #define RSP6_STATUS_S 0 | ||
471 | #define RSP6_IO_RCA_M BITFIELD_MASK(16) /* Bits [31:16] - RCA bits[31-16] */ | ||
472 | #define RSP6_IO_RCA_S 16 | ||
473 | |||
474 | #define RSP1_AKE_SEQ_ERROR_M BITFIELD_MASK(1) /* Bit 3 - Authentication seq error */ | ||
475 | #define RSP1_AKE_SEQ_ERROR_S 3 | ||
476 | #define RSP1_APP_CMD_M BITFIELD_MASK(1) /* Bit 5 - Card expects ACMD */ | ||
477 | #define RSP1_APP_CMD_S 5 | ||
478 | #define RSP1_READY_FOR_DATA_M BITFIELD_MASK(1) /* Bit 8 - Ready for data (buff empty) */ | ||
479 | #define RSP1_READY_FOR_DATA_S 8 | ||
480 | #define RSP1_CURR_STATE_M BITFIELD_MASK(4) /* Bits [12:9] - State of card | ||
481 | * when Cmd was received | ||
482 | */ | ||
483 | #define RSP1_CURR_STATE_S 9 | ||
484 | #define RSP1_EARSE_RESET_M BITFIELD_MASK(1) /* Bit 13 - Erase seq cleared */ | ||
485 | #define RSP1_EARSE_RESET_S 13 | ||
486 | #define RSP1_CARD_ECC_DISABLE_M BITFIELD_MASK(1) /* Bit 14 - Card ECC disabled */ | ||
487 | #define RSP1_CARD_ECC_DISABLE_S 14 | ||
488 | #define RSP1_WP_ERASE_SKIP_M BITFIELD_MASK(1) /* Bit 15 - Partial blocks erased due to W/P */ | ||
489 | #define RSP1_WP_ERASE_SKIP_S 15 | ||
490 | #define RSP1_CID_CSD_OVERW_M BITFIELD_MASK(1) /* Bit 16 - Illegal write to CID or R/O bits | ||
491 | * of CSD | ||
492 | */ | ||
493 | #define RSP1_CID_CSD_OVERW_S 16 | ||
494 | #define RSP1_ERROR_M BITFIELD_MASK(1) /* Bit 19 - General/Unknown error */ | ||
495 | #define RSP1_ERROR_S 19 | ||
496 | #define RSP1_CC_ERROR_M BITFIELD_MASK(1) /* Bit 20 - Internal Card Control error */ | ||
497 | #define RSP1_CC_ERROR_S 20 | ||
498 | #define RSP1_CARD_ECC_FAILED_M BITFIELD_MASK(1) /* Bit 21 - Card internal ECC failed | ||
499 | * to correct data | ||
500 | */ | ||
501 | #define RSP1_CARD_ECC_FAILED_S 21 | ||
502 | #define RSP1_ILLEGAL_CMD_M BITFIELD_MASK(1) /* Bit 22 - Cmd not legal for the card state */ | ||
503 | #define RSP1_ILLEGAL_CMD_S 22 | ||
504 | #define RSP1_COM_CRC_ERROR_M BITFIELD_MASK(1) /* Bit 23 - CRC check of previous command failed | ||
505 | */ | ||
506 | #define RSP1_COM_CRC_ERROR_S 23 | ||
507 | #define RSP1_LOCK_UNLOCK_FAIL_M BITFIELD_MASK(1) /* Bit 24 - Card lock-unlock Cmd Seq error */ | ||
508 | #define RSP1_LOCK_UNLOCK_FAIL_S 24 | ||
509 | #define RSP1_CARD_LOCKED_M BITFIELD_MASK(1) /* Bit 25 - Card locked by the host */ | ||
510 | #define RSP1_CARD_LOCKED_S 25 | ||
511 | #define RSP1_WP_VIOLATION_M BITFIELD_MASK(1) /* Bit 26 - Attempt to program | ||
512 | * write-protected blocks | ||
513 | */ | ||
514 | #define RSP1_WP_VIOLATION_S 26 | ||
515 | #define RSP1_ERASE_PARAM_M BITFIELD_MASK(1) /* Bit 27 - Invalid erase blocks */ | ||
516 | #define RSP1_ERASE_PARAM_S 27 | ||
517 | #define RSP1_ERASE_SEQ_ERR_M BITFIELD_MASK(1) /* Bit 28 - Erase Cmd seq error */ | ||
518 | #define RSP1_ERASE_SEQ_ERR_S 28 | ||
519 | #define RSP1_BLK_LEN_ERR_M BITFIELD_MASK(1) /* Bit 29 - Block length error */ | ||
520 | #define RSP1_BLK_LEN_ERR_S 29 | ||
521 | #define RSP1_ADDR_ERR_M BITFIELD_MASK(1) /* Bit 30 - Misaligned address */ | ||
522 | #define RSP1_ADDR_ERR_S 30 | ||
523 | #define RSP1_OUT_OF_RANGE_M BITFIELD_MASK(1) /* Bit 31 - Cmd arg was out of range */ | ||
524 | #define RSP1_OUT_OF_RANGE_S 31 | ||
525 | |||
526 | |||
527 | #define RSP5_DATA_M BITFIELD_MASK(8) /* Bits [0:7] - data */ | ||
528 | #define RSP5_DATA_S 0 | ||
529 | #define RSP5_FLAGS_M BITFIELD_MASK(8) /* Bit [15:8] - Rsp flags */ | ||
530 | #define RSP5_FLAGS_S 8 | ||
531 | #define RSP5_STUFF_M BITFIELD_MASK(16) /* Bits [31:16] - Stuff bits */ | ||
532 | #define RSP5_STUFF_S 16 | ||
533 | |||
534 | /* ---------------------------------------------- | ||
535 | * SDIO Command Response structures for SPI mode | ||
536 | * ---------------------------------------------- | ||
537 | */ | ||
538 | #define SPIRSP4_IO_OCR_M BITFIELD_MASK(16) /* Bits [15:0] - Card's OCR Bits [23:8] */ | ||
539 | #define SPIRSP4_IO_OCR_S 0 | ||
540 | #define SPIRSP4_STUFF_M BITFIELD_MASK(3) /* Bits [18:16] - Stuff bits */ | ||
541 | #define SPIRSP4_STUFF_S 16 | ||
542 | #define SPIRSP4_MEM_PRESENT_M BITFIELD_MASK(1) /* Bit 19 - Memory present */ | ||
543 | #define SPIRSP4_MEM_PRESENT_S 19 | ||
544 | #define SPIRSP4_NUM_FUNCS_M BITFIELD_MASK(3) /* Bits [22:20] - Number of I/O funcs */ | ||
545 | #define SPIRSP4_NUM_FUNCS_S 20 | ||
546 | #define SPIRSP4_CARD_READY_M BITFIELD_MASK(1) /* Bit 23 - SDIO card ready */ | ||
547 | #define SPIRSP4_CARD_READY_S 23 | ||
548 | #define SPIRSP4_IDLE_STATE_M BITFIELD_MASK(1) /* Bit 24 - idle state */ | ||
549 | #define SPIRSP4_IDLE_STATE_S 24 | ||
550 | #define SPIRSP4_ILLEGAL_CMD_M BITFIELD_MASK(1) /* Bit 26 - Illegal Cmd error */ | ||
551 | #define SPIRSP4_ILLEGAL_CMD_S 26 | ||
552 | #define SPIRSP4_COM_CRC_ERROR_M BITFIELD_MASK(1) /* Bit 27 - COM CRC error */ | ||
553 | #define SPIRSP4_COM_CRC_ERROR_S 27 | ||
554 | #define SPIRSP4_FUNC_NUM_ERROR_M BITFIELD_MASK(1) /* Bit 28 - Function number error | ||
555 | */ | ||
556 | #define SPIRSP4_FUNC_NUM_ERROR_S 28 | ||
557 | #define SPIRSP4_PARAM_ERROR_M BITFIELD_MASK(1) /* Bit 30 - Parameter Error Bit */ | ||
558 | #define SPIRSP4_PARAM_ERROR_S 30 | ||
559 | #define SPIRSP4_START_BIT_M BITFIELD_MASK(1) /* Bit 31 - Start Bit */ | ||
560 | #define SPIRSP4_START_BIT_S 31 | ||
561 | |||
562 | #define SPIRSP5_DATA_M BITFIELD_MASK(8) /* Bits [23:16] - R/W Data */ | ||
563 | #define SPIRSP5_DATA_S 16 | ||
564 | #define SPIRSP5_IDLE_STATE_M BITFIELD_MASK(1) /* Bit 24 - Idle state */ | ||
565 | #define SPIRSP5_IDLE_STATE_S 24 | ||
566 | #define SPIRSP5_ILLEGAL_CMD_M BITFIELD_MASK(1) /* Bit 26 - Illegal Cmd error */ | ||
567 | #define SPIRSP5_ILLEGAL_CMD_S 26 | ||
568 | #define SPIRSP5_COM_CRC_ERROR_M BITFIELD_MASK(1) /* Bit 27 - COM CRC error */ | ||
569 | #define SPIRSP5_COM_CRC_ERROR_S 27 | ||
570 | #define SPIRSP5_FUNC_NUM_ERROR_M BITFIELD_MASK(1) /* Bit 28 - Function number error | ||
571 | */ | ||
572 | #define SPIRSP5_FUNC_NUM_ERROR_S 28 | ||
573 | #define SPIRSP5_PARAM_ERROR_M BITFIELD_MASK(1) /* Bit 30 - Parameter Error Bit */ | ||
574 | #define SPIRSP5_PARAM_ERROR_S 30 | ||
575 | #define SPIRSP5_START_BIT_M BITFIELD_MASK(1) /* Bit 31 - Start Bit */ | ||
576 | #define SPIRSP5_START_BIT_S 31 | ||
577 | |||
578 | /* RSP6 card status format; Pg 68 Physical Layer spec v 1.10 */ | ||
579 | #define RSP6STAT_AKE_SEQ_ERROR_M BITFIELD_MASK(1) /* Bit 3 - Authentication seq error | ||
580 | */ | ||
581 | #define RSP6STAT_AKE_SEQ_ERROR_S 3 | ||
582 | #define RSP6STAT_APP_CMD_M BITFIELD_MASK(1) /* Bit 5 - Card expects ACMD */ | ||
583 | #define RSP6STAT_APP_CMD_S 5 | ||
584 | #define RSP6STAT_READY_FOR_DATA_M BITFIELD_MASK(1) /* Bit 8 - Ready for data | ||
585 | * (buff empty) | ||
586 | */ | ||
587 | #define RSP6STAT_READY_FOR_DATA_S 8 | ||
588 | #define RSP6STAT_CURR_STATE_M BITFIELD_MASK(4) /* Bits [12:9] - Card state at | ||
589 | * Cmd reception | ||
590 | */ | ||
591 | #define RSP6STAT_CURR_STATE_S 9 | ||
592 | #define RSP6STAT_ERROR_M BITFIELD_MASK(1) /* Bit 13 - General/Unknown error Bit 19 | ||
593 | */ | ||
594 | #define RSP6STAT_ERROR_S 13 | ||
595 | #define RSP6STAT_ILLEGAL_CMD_M BITFIELD_MASK(1) /* Bit 14 - Illegal cmd for | ||
596 | * card state Bit 22 | ||
597 | */ | ||
598 | #define RSP6STAT_ILLEGAL_CMD_S 14 | ||
599 | #define RSP6STAT_COM_CRC_ERROR_M BITFIELD_MASK(1) /* Bit 15 - CRC previous command | ||
600 | * failed Bit 23 | ||
601 | */ | ||
602 | #define RSP6STAT_COM_CRC_ERROR_S 15 | ||
603 | |||
604 | #define SDIOH_XFER_TYPE_READ SD_IO_OP_READ | ||
605 | #define SDIOH_XFER_TYPE_WRITE SD_IO_OP_WRITE | ||
606 | |||
607 | /* command issue options */ | ||
608 | #define CMD_OPTION_DEFAULT 0 | ||
609 | #define CMD_OPTION_TUNING 1 | ||
610 | |||
611 | #endif /* _SDIO_H */ | ||