aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/bcmdhd/include/sdio.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/bcmdhd/include/sdio.h')
-rw-r--r--drivers/net/wireless/bcmdhd/include/sdio.h611
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 */
33typedef 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 */
173typedef 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 */