xref: /onnv-gate/usr/src/uts/common/io/sdcard/adapters/sdhost/sdhost.h (revision 8708:a3143623767e)
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