17302Sgdamore@opensolaris.org /* 27302Sgdamore@opensolaris.org * CDDL HEADER START 37302Sgdamore@opensolaris.org * 47302Sgdamore@opensolaris.org * The contents of this file are subject to the terms of the 57302Sgdamore@opensolaris.org * Common Development and Distribution License (the "License"). 67302Sgdamore@opensolaris.org * You may not use this file except in compliance with the License. 77302Sgdamore@opensolaris.org * 87302Sgdamore@opensolaris.org * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97302Sgdamore@opensolaris.org * or http://www.opensolaris.org/os/licensing. 107302Sgdamore@opensolaris.org * See the License for the specific language governing permissions 117302Sgdamore@opensolaris.org * and limitations under the License. 127302Sgdamore@opensolaris.org * 137302Sgdamore@opensolaris.org * When distributing Covered Code, include this CDDL HEADER in each 147302Sgdamore@opensolaris.org * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157302Sgdamore@opensolaris.org * If applicable, add the following below this CDDL HEADER, with the 167302Sgdamore@opensolaris.org * fields enclosed by brackets "[]" replaced with your own identifying 177302Sgdamore@opensolaris.org * information: Portions Copyright [yyyy] [name of copyright owner] 187302Sgdamore@opensolaris.org * 197302Sgdamore@opensolaris.org * CDDL HEADER END 207302Sgdamore@opensolaris.org */ 217302Sgdamore@opensolaris.org /* 22*8708Sgdamore@opensolaris.org * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 237302Sgdamore@opensolaris.org * Use is subject to license terms. 247302Sgdamore@opensolaris.org */ 257302Sgdamore@opensolaris.org 267302Sgdamore@opensolaris.org #ifndef _SYS_SDCARD_SDHOST_H 277302Sgdamore@opensolaris.org #define _SYS_SDCARD_SDHOST_H 287302Sgdamore@opensolaris.org 297302Sgdamore@opensolaris.org /* 307302Sgdamore@opensolaris.org * The entire contents of this file are private the SD Host driver 317302Sgdamore@opensolaris.org * implementation. 327302Sgdamore@opensolaris.org */ 337302Sgdamore@opensolaris.org 347302Sgdamore@opensolaris.org #include <sys/types.h> 357302Sgdamore@opensolaris.org #include <sys/ksynch.h> 367302Sgdamore@opensolaris.org #include <sys/param.h> 377302Sgdamore@opensolaris.org #include <sys/kmem.h> 387302Sgdamore@opensolaris.org #include <sys/inttypes.h> 397302Sgdamore@opensolaris.org #include <sys/cmn_err.h> 407302Sgdamore@opensolaris.org #include <sys/conf.h> 417302Sgdamore@opensolaris.org #include <sys/modctl.h> 427302Sgdamore@opensolaris.org #include <sys/sdcard/sda.h> 437302Sgdamore@opensolaris.org #include <sys/pci.h> 44*8708Sgdamore@opensolaris.org #include <sys/kstat.h> 457302Sgdamore@opensolaris.org #include <sys/ddi.h> 467302Sgdamore@opensolaris.org #include <sys/sunddi.h> 477302Sgdamore@opensolaris.org 487302Sgdamore@opensolaris.org #define BIT(x) (1 << (x)) 497302Sgdamore@opensolaris.org 507302Sgdamore@opensolaris.org /* 517302Sgdamore@opensolaris.org * SD Host Spec says that a controller can support up to 6 different 527302Sgdamore@opensolaris.org * slots, each with its own register set. 537302Sgdamore@opensolaris.org */ 547302Sgdamore@opensolaris.org #define SDHOST_MAXSLOTS 6 557302Sgdamore@opensolaris.org 567302Sgdamore@opensolaris.org /* 577302Sgdamore@opensolaris.org * SD Host specific PCI configuration register. 587302Sgdamore@opensolaris.org */ 597302Sgdamore@opensolaris.org #define SLOTINFO 0x40 607302Sgdamore@opensolaris.org #define SLOTINFO_NSLOT_SHFT 4 617302Sgdamore@opensolaris.org #define SLOTINFO_NSLOT_MSK (0x3 << SLOTINFO_NSLOT_SHFT) 627302Sgdamore@opensolaris.org #define SLOTINFO_BAR_SHFT 0 637302Sgdamore@opensolaris.org #define SLOTINFO_BAR_MSK (0x3 << SLOTINFO_BAR_SHFT) 647302Sgdamore@opensolaris.org 657302Sgdamore@opensolaris.org #define SLOTINFO_NSLOT(x) \ 667302Sgdamore@opensolaris.org ((((x) & SLOTINFO_NSLOT_MSK) >> SLOTINFO_NSLOT_SHFT) + 1) 677302Sgdamore@opensolaris.org 687302Sgdamore@opensolaris.org #define SLOTINFO_BAR(x) \ 697302Sgdamore@opensolaris.org (((x) & SLOTINFO_BAR_MSK) >> SLOTINFO_BAR_SHFT) 707302Sgdamore@opensolaris.org 717302Sgdamore@opensolaris.org /* 727302Sgdamore@opensolaris.org * Slot-specific CSRs 737302Sgdamore@opensolaris.org */ 747302Sgdamore@opensolaris.org #define REG_SDMA_ADDR 0x0000 /* 32 bits */ 757302Sgdamore@opensolaris.org #define REG_BLKSZ 0x0004 /* 16 bits */ 767302Sgdamore@opensolaris.org #define REG_BLOCK_COUNT 0x0006 /* 16 bits */ 777302Sgdamore@opensolaris.org #define REG_ARGUMENT 0x0008 /* 32 bits */ 787302Sgdamore@opensolaris.org #define REG_XFR_MODE 0x000C /* 16 bits */ 797302Sgdamore@opensolaris.org #define REG_COMMAND 0x000E /* 16 bits */ 807302Sgdamore@opensolaris.org #define REG_RESP1 0x0010 /* 32 bits */ 817302Sgdamore@opensolaris.org #define REG_RESP2 0x0014 /* 32 bits */ 827302Sgdamore@opensolaris.org #define REG_RESP3 0x0018 /* 32 bits */ 837302Sgdamore@opensolaris.org #define REG_RESP4 0x001C /* 32 bits */ 847302Sgdamore@opensolaris.org #define REG_DATA 0x0020 /* 32 bits */ 857302Sgdamore@opensolaris.org #define REG_PRS 0x0024 /* 32 bits */ 867302Sgdamore@opensolaris.org #define REG_HOST_CONTROL 0x0028 /* 8 bits */ 877302Sgdamore@opensolaris.org #define REG_POWER_CONTROL 0x0029 /* 8 bits */ 887302Sgdamore@opensolaris.org #define REG_BLOCK_GAP_CONTROL 0x002A /* 8 bits */ 897302Sgdamore@opensolaris.org #define REG_WAKEUP_CONTROL 0x002B /* 8 bits */ 907302Sgdamore@opensolaris.org #define REG_CLOCK_CONTROL 0x002C /* 16 bits */ 917302Sgdamore@opensolaris.org #define REG_TIMEOUT_CONTROL 0x002E /* 8 bits */ 927302Sgdamore@opensolaris.org #define REG_SOFT_RESET 0x002F /* 8 bits */ 937302Sgdamore@opensolaris.org #define REG_INT_STAT 0x0030 /* 16 bits */ 947302Sgdamore@opensolaris.org #define REG_ERR_STAT 0x0032 /* 16 bits */ 957302Sgdamore@opensolaris.org #define REG_INT_EN 0x0034 /* 16 bits */ 967302Sgdamore@opensolaris.org #define REG_ERR_EN 0x0036 /* 16 bits */ 977302Sgdamore@opensolaris.org #define REG_INT_MASK 0x0038 /* 16 bits */ 987302Sgdamore@opensolaris.org #define REG_ERR_MASK 0x003A /* 16 bits */ 997302Sgdamore@opensolaris.org #define REG_ACMD12_ERROR 0x003C /* 16 bits */ 1007302Sgdamore@opensolaris.org #define REG_CAPAB 0x0040 /* 64 bits */ 1017302Sgdamore@opensolaris.org #define REG_MAX_CURRENT 0x0048 /* 64 bits */ 1027302Sgdamore@opensolaris.org #define REG_SLOT_INT_STAT 0x00FC /* 16 bits */ 1037302Sgdamore@opensolaris.org #define REG_VERSION 0x00FE /* 16 bits */ 1047302Sgdamore@opensolaris.org #define REG_ERR_FORCE 0x0052 /* 16 bits */ 1057302Sgdamore@opensolaris.org #define REG_ACMD12_ERROR_FORCE 0x0050 /* 16 bits */ 1067302Sgdamore@opensolaris.org #define REG_ADMA_ERROR 0x0054 /* 8 bits */ 1077302Sgdamore@opensolaris.org #define REG_ADMA_ADDR 0x0058 /* 64 bits */ 1087302Sgdamore@opensolaris.org 1097302Sgdamore@opensolaris.org /* REG_BLKSZ bits */ 1107302Sgdamore@opensolaris.org #define BLKSZ_XFR_BLK_SIZE_MASK (0x0fff) 1117302Sgdamore@opensolaris.org #define BLKSZ_BOUNDARY_4K (0 << 12) 1127302Sgdamore@opensolaris.org #define BLKSZ_BOUNDARY_8K (1 << 12) 1137302Sgdamore@opensolaris.org #define BLKSZ_BOUNDARY_16K (2 << 12) 1147302Sgdamore@opensolaris.org #define BLKSZ_BOUNDARY_32K (3 << 12) 1157302Sgdamore@opensolaris.org #define BLKSZ_BOUNDARY_64K (4 << 12) 1167302Sgdamore@opensolaris.org #define BLKSZ_BOUNDARY_128K (5 << 12) 1177302Sgdamore@opensolaris.org #define BLKSZ_BOUNDARY_256K (6 << 12) 1187302Sgdamore@opensolaris.org #define BLKSZ_BOUNDARY_512K (7 << 12) 1197302Sgdamore@opensolaris.org #define BLKSZ_BOUNDARY_MASK (0x7 << 12) 1207302Sgdamore@opensolaris.org 1217302Sgdamore@opensolaris.org /* REG_XFR_MODE bits */ 1227302Sgdamore@opensolaris.org #define XFR_MODE_DMA_EN BIT(0) 1237302Sgdamore@opensolaris.org #define XFR_MODE_COUNT BIT(1) 1247302Sgdamore@opensolaris.org #define XFR_MODE_AUTO_CMD12 BIT(2) 1257302Sgdamore@opensolaris.org #define XFR_MODE_READ BIT(4) /* 1 = read, 0 = write */ 1267302Sgdamore@opensolaris.org #define XFR_MODE_MULTI BIT(5) /* 1 = multi, 0 = single */ 1277302Sgdamore@opensolaris.org 1287302Sgdamore@opensolaris.org /* REG_COMMAND bits */ 1297302Sgdamore@opensolaris.org #define COMMAND_CRC_CHECK_EN BIT(3) 1307302Sgdamore@opensolaris.org #define COMMAND_INDEX_CHECK_EN BIT(4) 1317302Sgdamore@opensolaris.org #define COMMAND_DATA_PRESENT BIT(5) 1327302Sgdamore@opensolaris.org #define COMMAND_TYPE 1337302Sgdamore@opensolaris.org #define COMMAND_TYPE_NORM (0 << 6) 1347302Sgdamore@opensolaris.org #define COMMAND_TYPE_SUSPEND (1 << 6) 1357302Sgdamore@opensolaris.org #define COMMAND_TYPE_RESUME (2 << 6) 1367302Sgdamore@opensolaris.org #define COMMAND_TYPE_ABORT (3 << 6) 1377302Sgdamore@opensolaris.org #define COMMAND_TYPE_MASK (0x3 << 6) 1387302Sgdamore@opensolaris.org #define COMMAND_RESP_NONE 0 1397302Sgdamore@opensolaris.org #define COMMAND_RESP_136 1 /* R2 */ 1407302Sgdamore@opensolaris.org #define COMMAND_RESP_48 2 /* R1, R3, R6, R7 */ 1417302Sgdamore@opensolaris.org #define COMMAND_RESP_48_BUSY 3 /* R1b */ 1427302Sgdamore@opensolaris.org 1437302Sgdamore@opensolaris.org /* REG_PRS bits */ 1447302Sgdamore@opensolaris.org #define PRS_CMD_INHIBIT BIT(0) 1457302Sgdamore@opensolaris.org #define PRS_DAT_INHIBIT BIT(1) 1467302Sgdamore@opensolaris.org #define PRS_DAT_ACTIVE BIT(2) 1477302Sgdamore@opensolaris.org #define PRS_WRITE_ACTIVE BIT(8) 1487302Sgdamore@opensolaris.org #define PRS_READ_ACTIVE BIT(9) 1497302Sgdamore@opensolaris.org #define PRS_BUF_WR_EN BIT(10) 1507302Sgdamore@opensolaris.org #define PRS_BUF_RD_EN BIT(11) 1517302Sgdamore@opensolaris.org #define PRS_CARD_INSERTED BIT(16) 1527302Sgdamore@opensolaris.org #define PRS_CARD_STABLE BIT(17) 1537302Sgdamore@opensolaris.org #define PRS_CARD_DETECT BIT(18) 1547302Sgdamore@opensolaris.org #define PRS_WRITE_ENABLE BIT(19) 1557302Sgdamore@opensolaris.org #define PRS_DAT0_SIG BIT(20) 1567302Sgdamore@opensolaris.org #define PRS_DAT1_SIG BIT(21) 1577302Sgdamore@opensolaris.org #define PRS_DAT2_SIG BIT(22) 1587302Sgdamore@opensolaris.org #define PRS_DAT3_SIG BIT(23) 1597302Sgdamore@opensolaris.org 1607302Sgdamore@opensolaris.org #define PRS_INHIBIT \ 1617302Sgdamore@opensolaris.org (PRS_CMD_INHIBIT | PRS_DAT_INHIBIT) 1627302Sgdamore@opensolaris.org #define PRS_DAT_SIG \ 1637302Sgdamore@opensolaris.org (PRS_DAT0_SIG | PRS_DAT1_SIG | PRS_DAT2_SIG | PRS_DAT3_SIG) 1647302Sgdamore@opensolaris.org 1657302Sgdamore@opensolaris.org /* REG_HOST_CONTROL bits */ 1667302Sgdamore@opensolaris.org #define HOST_CONTROL_LED_ON BIT(0) 1677302Sgdamore@opensolaris.org #define HOST_CONTROL_DATA_WIDTH BIT(1) 1687302Sgdamore@opensolaris.org #define HOST_CONTROL_HIGH_SPEED_EN BIT(2) 1697302Sgdamore@opensolaris.org #define HOST_CONTROL_DMA_SDMA (0 << 3) 1707302Sgdamore@opensolaris.org #define HOST_CONTROL_DMA_ADMA32 (2 << 3) 1717302Sgdamore@opensolaris.org #define HOST_CONTROL_DMA_ADMA64 (3 << 3) 1727302Sgdamore@opensolaris.org #define HOST_CONTROL_DMA_MASK (0x3 << 3) 1737302Sgdamore@opensolaris.org #define HOST_CONTROL_CARD_DETECT_TEST BIT(6) 1747302Sgdamore@opensolaris.org #define HOST_CONTROL_CARD_DETECT_SEL BIT(7) 1757302Sgdamore@opensolaris.org 1767302Sgdamore@opensolaris.org /* REG_POWER_CONTROL bits */ 1777302Sgdamore@opensolaris.org #define POWER_CONTROL_BUS_POWER BIT(0) 1787302Sgdamore@opensolaris.org #define POWER_CONTROL_33V (7 << 1) 1797302Sgdamore@opensolaris.org #define POWER_CONTROL_30V (6 << 1) 1807302Sgdamore@opensolaris.org #define POWER_CONTROL_18V (5 << 1) 1817302Sgdamore@opensolaris.org 1827302Sgdamore@opensolaris.org /* REG_BLOCK_GAP_CONTROL bits */ 1837302Sgdamore@opensolaris.org #define BLOCK_GAP_CONTROL_STOP BIT(0) 1847302Sgdamore@opensolaris.org #define BLOCK_GAP_CONTROL_CONTINUE BIT(1) 1857302Sgdamore@opensolaris.org #define BLOCK_GAP_CONTROL_READ_WAIT BIT(2) 1867302Sgdamore@opensolaris.org #define BLOCK_GAP_CONTROL_INTERRUPT BIT(3) 1877302Sgdamore@opensolaris.org 1887302Sgdamore@opensolaris.org /* REG_WAKEUP_CONTROL bits */ 1897302Sgdamore@opensolaris.org #define WAKEUP_CONTROL_INTERRUPT BIT(0) 1907302Sgdamore@opensolaris.org #define WAKEUP_CONTROL_INSERT BIT(1) 1917302Sgdamore@opensolaris.org #define WAKEUP_CONTROL_REMOVE BIT(2) 1927302Sgdamore@opensolaris.org 1937302Sgdamore@opensolaris.org /* REG_CLOCK_CONTROL bits */ 1947302Sgdamore@opensolaris.org #define CLOCK_CONTROL_INT_CLOCK_EN BIT(0) 1957302Sgdamore@opensolaris.org #define CLOCK_CONTROL_INT_CLOCK_STABLE BIT(1) 1967302Sgdamore@opensolaris.org #define CLOCK_CONTROL_SD_CLOCK_EN BIT(2) 1977302Sgdamore@opensolaris.org #define CLOCK_CONTROL_FREQ_MASK (0xff << 8) 1987302Sgdamore@opensolaris.org #define CLOCK_CONTROL_FREQ_SHIFT 8 1997302Sgdamore@opensolaris.org 2007302Sgdamore@opensolaris.org /* REG_TIMEOUT_CONTROL bits */ 2017302Sgdamore@opensolaris.org #define TIMEOUT_TIMECLK_2_27 (0xe) 2027302Sgdamore@opensolaris.org /* not listing them all here... but it goes on */ 2037302Sgdamore@opensolaris.org #define TIMEOUT_TIMECLK_2_13 (0x0) 2047302Sgdamore@opensolaris.org 2057302Sgdamore@opensolaris.org /* REG_SOFT_RESET bits */ 2067302Sgdamore@opensolaris.org #define SOFT_RESET_ALL BIT(0) 2077302Sgdamore@opensolaris.org #define SOFT_RESET_CMD BIT(1) 2087302Sgdamore@opensolaris.org #define SOFT_RESET_DAT BIT(2) 2097302Sgdamore@opensolaris.org 2107302Sgdamore@opensolaris.org /* REG_INT_{STAT,EN,MASK} bits */ 2117302Sgdamore@opensolaris.org #define INT_CMD BIT(0) 2127302Sgdamore@opensolaris.org #define INT_XFR BIT(1) 2137302Sgdamore@opensolaris.org #define INT_BG BIT(2) 2147302Sgdamore@opensolaris.org #define INT_DMA BIT(3) 2157302Sgdamore@opensolaris.org #define INT_WR BIT(4) 2167302Sgdamore@opensolaris.org #define INT_RD BIT(5) 2177302Sgdamore@opensolaris.org #define INT_INS BIT(6) 2187302Sgdamore@opensolaris.org #define INT_REM BIT(7) 2197302Sgdamore@opensolaris.org #define INT_CARD BIT(8) 2207302Sgdamore@opensolaris.org #define INT_ERR BIT(15) 2217302Sgdamore@opensolaris.org 2227302Sgdamore@opensolaris.org #define INT_PIO (INT_RD | INT_WR) 2237302Sgdamore@opensolaris.org #define INT_HOTPLUG (INT_INS | INT_REM) 2247302Sgdamore@opensolaris.org 2257302Sgdamore@opensolaris.org #define INT_MASK (INT_XFR | INT_DMA | INT_PIO | INT_HOTPLUG) 2267302Sgdamore@opensolaris.org #define INT_ENAB (INT_MASK | INT_CMD) 2277302Sgdamore@opensolaris.org 2287302Sgdamore@opensolaris.org /* REG_ERR_{STAT,EN,MASK} bits */ 2297302Sgdamore@opensolaris.org #define ERR_VENDOR (0xf << 12) 2307302Sgdamore@opensolaris.org #define ERR_ADMA BIT(9) 2317302Sgdamore@opensolaris.org #define ERR_ACMD12 BIT(8) 2327302Sgdamore@opensolaris.org #define ERR_CURRENT BIT(7) 2337302Sgdamore@opensolaris.org #define ERR_DAT_END BIT(6) 2347302Sgdamore@opensolaris.org #define ERR_DAT_CRC BIT(5) 2357302Sgdamore@opensolaris.org #define ERR_DAT_TMO BIT(4) 2367302Sgdamore@opensolaris.org #define ERR_CMD_IDX BIT(3) 2377302Sgdamore@opensolaris.org #define ERR_CMD_END BIT(2) 2387302Sgdamore@opensolaris.org #define ERR_CMD_CRC BIT(1) 2397302Sgdamore@opensolaris.org #define ERR_CMD_TMO BIT(0) 2407302Sgdamore@opensolaris.org 2417302Sgdamore@opensolaris.org #define ERR_CMD (ERR_CMD_IDX | ERR_CMD_END | ERR_CMD_CRC | ERR_CMD_TMO) 2427302Sgdamore@opensolaris.org #define ERR_CMD_CFL (ERR_CMD_CRC | ERR_CMD_TMO) 2437302Sgdamore@opensolaris.org 2447302Sgdamore@opensolaris.org #define ERR_DAT (ERR_DAT_END | ERR_DAT_CRC | ERR_DAT_TMO) 2457302Sgdamore@opensolaris.org 2467302Sgdamore@opensolaris.org #define ERR_MASK (ERR_ACMD12 | ERR_DAT) 2477302Sgdamore@opensolaris.org #define ERR_ENAB (ERR_MASK | ERR_CMD) 2487302Sgdamore@opensolaris.org 2497302Sgdamore@opensolaris.org /* REG_ACMD12_ERROR bits */ 2507302Sgdamore@opensolaris.org #define ACMD12_ERROR_NOT_EXECUTED BIT(0) 2517302Sgdamore@opensolaris.org #define ACMD12_ERROR_TIMEOUT BIT(1) 2527302Sgdamore@opensolaris.org #define ACMD12_ERROR_CRC BIT(2) 2537302Sgdamore@opensolaris.org #define ACMD12_ERROR_END_BIT BIT(3) 2547302Sgdamore@opensolaris.org #define ACMD12_ERROR_INDEX BIT(4) 2557302Sgdamore@opensolaris.org #define ACMD12_ERROR_NOT_ISSUED BIT(7) 2567302Sgdamore@opensolaris.org 2577302Sgdamore@opensolaris.org /* REG_CAPAB bits */ 2587302Sgdamore@opensolaris.org #define CAPAB_TIMEOUT_FREQ_SHIFT 0 2597302Sgdamore@opensolaris.org #define CAPAB_TIMEOUT_FREQ_MASK (0x3f << 0) 2607302Sgdamore@opensolaris.org #define CAPAB_TIMEOUT_UNITS BIT(7) /* 1 == MHz, 0 = kHz */ 2617302Sgdamore@opensolaris.org #define CAPAB_BASE_FREQ_SHIFT 8 2627302Sgdamore@opensolaris.org #define CAPAB_BASE_FREQ_MASK (0x3f << 8) 2637302Sgdamore@opensolaris.org #define CAPAB_MAXBLK_512 (0 << 16) 2647302Sgdamore@opensolaris.org #define CAPAB_MAXBLK_1K (1 << 16) 2657302Sgdamore@opensolaris.org #define CAPAB_MAXBLK_2K (2 << 16) 2667302Sgdamore@opensolaris.org #define CAPAB_MAXBLK_MASK (0x3 << 16) 2677302Sgdamore@opensolaris.org #define CAPAB_ADMA2 BIT(19) 2687302Sgdamore@opensolaris.org #define CAPAB_ADMA1 BIT(20) 2697302Sgdamore@opensolaris.org #define CAPAB_HIGH_SPEED BIT(21) 2707302Sgdamore@opensolaris.org #define CAPAB_SDMA BIT(22) 2717302Sgdamore@opensolaris.org #define CAPAB_SUSPEND BIT(23) 2727302Sgdamore@opensolaris.org #define CAPAB_33V BIT(24) 2737302Sgdamore@opensolaris.org #define CAPAB_30V BIT(25) 2747302Sgdamore@opensolaris.org #define CAPAB_18V BIT(26) 2757302Sgdamore@opensolaris.org #define CAPAB_VOLTS (CAPAB_33V | CAPAB_30V | CAPAB_18V) 2767302Sgdamore@opensolaris.org #define CAPAB_64BIT BIT(28) 2777302Sgdamore@opensolaris.org 2787302Sgdamore@opensolaris.org /* REG_MAX_CURRENT bits */ 2797302Sgdamore@opensolaris.org #define MAX_CURRENT_33V_SHIFT 0 2807302Sgdamore@opensolaris.org #define MAX_CURRENT_33V_MASK (0xff << 0) 2817302Sgdamore@opensolaris.org #define MAX_CURRENT_30V_SHIFT 8 2827302Sgdamore@opensolaris.org #define MAX_CURRENT_30V_MASK (0xff << 8) 2837302Sgdamore@opensolaris.org #define MAX_CURRENT_18V_SHIFT 16 2847302Sgdamore@opensolaris.org #define MAX_CURRENT_18V_MASK (0xff << 16) 2857302Sgdamore@opensolaris.org 2867302Sgdamore@opensolaris.org /* REG_VERSION bits */ 2877302Sgdamore@opensolaris.org #define VERSION_VENDOR_SHIFT 8 2887302Sgdamore@opensolaris.org #define VERSION_VENDOR_MASK (0xff << 8) 2897302Sgdamore@opensolaris.org #define VERSION_SDHOST_MASK 0xff 2907302Sgdamore@opensolaris.org #define VERSION_SDHOST_1 0 2917302Sgdamore@opensolaris.org #define VERSION_SDHOST_2 1 2927302Sgdamore@opensolaris.org 2937302Sgdamore@opensolaris.org /* REG_ADMA_ERROR bits */ 2947302Sgdamore@opensolaris.org #define ADMA_ERROR_STATE_ST_STOP 0 2957302Sgdamore@opensolaris.org #define ADMA_ERROR_STATE_ST_FDS 1 2967302Sgdamore@opensolaris.org #define ADMA_ERROR_STATE_ST_TFR 3 2977302Sgdamore@opensolaris.org #define ADMA_ERROR_STATE_MASK 0x3 2987302Sgdamore@opensolaris.org #define ADMA_ERROR_LEN_MISMATCH BIT(2) 2997302Sgdamore@opensolaris.org 300*8708Sgdamore@opensolaris.org /* 301*8708Sgdamore@opensolaris.org * Properties. 302*8708Sgdamore@opensolaris.org */ 303*8708Sgdamore@opensolaris.org #define SDHOST_PROP_ENABLE_MSI "enable-msi" 304*8708Sgdamore@opensolaris.org #define SDHOST_PROP_ENABLE_MSIX "enable-msix" 305*8708Sgdamore@opensolaris.org #define SDHOST_PROP_FORCE_PIO "force-pio" 306*8708Sgdamore@opensolaris.org #define SDHOST_PROP_FORCE_DMA "force-dma" 307*8708Sgdamore@opensolaris.org 3087302Sgdamore@opensolaris.org #endif /* _SYS_SDCARD_SDHOST_H */ 309