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 */ | ||
