14d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/*
24d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * SDIO spec header file
34d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * Protocol and standard (common) device definitions
44d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *
59984c42af1f24da360515edd81441ef5dfe23da4Dmitry Shmidt * Copyright (C) 1999-2010, Broadcom Corporation
64d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *
74d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *      Unless you and Broadcom execute a separate written software license
84d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * agreement governing use of this software, this software is licensed to you
94d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * under the terms of the GNU General Public License version 2 (the "GPL"),
104d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * available at http://www.broadcom.com/licenses/GPLv2.php, with the
114d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * following added to such license:
124d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *
134d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *      As a special exception, the copyright holders of this software give you
144d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * permission to link this software with independent modules, and to copy and
154d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * distribute the resulting executable under terms of your choice, provided that
164d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * you also meet, for each linked independent module, the terms and conditions of
174d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * the license of that module.  An independent module is a module which is not
184d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * derived from this software.  The special exception does not apply to any
194d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * modifications of the software.
204d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *
214d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *      Notwithstanding the above, under no circumstances may you combine this
224d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * software in any way with any other Broadcom software provided under a license
234d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * other than the GPL, without Broadcom's express prior written consent.
244d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *
25492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt * $Id: sdio.h,v 13.24.4.1.4.1.16.1 2009/08/12 01:08:02 Exp $
264d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt */
274d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
284d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#ifndef	_SDIO_H
294d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define	_SDIO_H
304d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
314d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
324d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* CCCR structure for function 0 */
334d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidttypedef volatile struct {
344d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	cccr_sdio_rev;		/* RO, cccr and sdio revision */
354d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	sd_rev;			/* RO, sd spec revision */
364d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	io_en;			/* I/O enable */
374d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	io_rdy;			/* I/O ready reg */
384d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	intr_ctl;		/* Master and per function interrupt enable control */
394d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	intr_status;		/* RO, interrupt pending status */
404d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	io_abort;		/* read/write abort or reset all functions */
414d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	bus_inter;		/* bus interface control */
424d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	capability;		/* RO, card capability */
434d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
444d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	cis_base_low;		/* 0x9 RO, common CIS base address, LSB */
454d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	cis_base_mid;
464d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	cis_base_high;		/* 0xB RO, common CIS base address, MSB */
474d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
484d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	/* suspend/resume registers */
494d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	bus_suspend;		/* 0xC */
504d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	func_select;		/* 0xD */
514d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	exec_flag;		/* 0xE */
524d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	ready_flag;		/* 0xF */
534d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
544d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	fn0_blk_size[2];	/* 0x10(LSB), 0x11(MSB) */
554d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
564d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	power_control;		/* 0x12 (SDIO version 1.10) */
574d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
584d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	speed_control;		/* 0x13 */
594d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt} sdio_regs_t;
604d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
614d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* SDIO Device CCCR offsets */
624d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_REV			0x00
634d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_SDREV		0x01
644d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_IOEN			0x02
654d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_IORDY		0x03
664d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_INTEN		0x04
674d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_INTPEND		0x05
684d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_IOABORT		0x06
694d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_BICTRL		0x07
704d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_CAPABLITIES		0x08
714d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_CISPTR_0		0x09
724d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_CISPTR_1		0x0A
734d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_CISPTR_2		0x0B
744d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_BUSSUSP		0x0C
754d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_FUNCSEL		0x0D
764d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_EXECFLAGS		0x0E
774d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_RDYFLAGS		0x0F
784d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_BLKSIZE_0		0x10
794d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_BLKSIZE_1		0x11
804d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_POWER_CONTROL	0x12
814d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_CCCR_SPEED_CONTROL	0x13
824d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
83492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt/* Broadcom extensions (corerev >= 1) */
84492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt#define SDIOD_CCCR_BRCM_SEPINT		0xf2
85492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt
864d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* cccr_sdio_rev */
874d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_REV_SDIOID_MASK	0xf0	/* SDIO spec revision number */
884d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_REV_CCCRID_MASK	0x0f	/* CCCR format version number */
894d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
904d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* sd_rev */
914d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_REV_PHY_MASK		0x0f	/* SD format version number */
924d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
934d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* io_en */
944d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_ENABLE_1	0x02	/* function 1 I/O enable */
954d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_ENABLE_2	0x04	/* function 2 I/O enable */
964d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
974d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* io_rdys */
984d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_READY_1	0x02	/* function 1 I/O ready */
994d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_READY_2	0x04	/* function 2 I/O ready */
1004d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1014d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* intr_ctl */
1024d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define INTR_CTL_MASTER_EN	0x1	/* interrupt enable master */
1034d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define INTR_CTL_FUNC1_EN	0x2	/* interrupt enable for function 1 */
1044d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define INTR_CTL_FUNC2_EN	0x4	/* interrupt enable for function 2 */
1054d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1064d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* intr_status */
1074d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define INTR_STATUS_FUNC1	0x2	/* interrupt pending for function 1 */
1084d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define INTR_STATUS_FUNC2	0x4	/* interrupt pending for function 2 */
1094d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1104d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* io_abort */
1114d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define IO_ABORT_RESET_ALL	0x08	/* I/O card reset */
1124d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define IO_ABORT_FUNC_MASK	0x07	/* abort selction: function x */
1134d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1144d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* bus_inter */
1154d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define BUS_CARD_DETECT_DIS	0x80	/* Card Detect disable */
1164d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define BUS_SPI_CONT_INTR_CAP	0x40	/* support continuous SPI interrupt */
1174d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define BUS_SPI_CONT_INTR_EN	0x20	/* continuous SPI interrupt enable */
1184d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define BUS_SD_DATA_WIDTH_MASK	0x03	/* bus width mask */
1194d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define BUS_SD_DATA_WIDTH_4BIT	0x02	/* bus width 4-bit mode */
1204d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define BUS_SD_DATA_WIDTH_1BIT	0x00	/* bus width 1-bit mode */
1214d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1224d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* capability */
1234d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_CAP_4BLS		0x80	/* 4-bit support for low speed card */
1244d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_CAP_LSC		0x40	/* low speed card */
1254d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_CAP_E4MI		0x20	/* enable interrupt between block of data in 4-bit mode */
1264d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_CAP_S4MI		0x10	/* support interrupt between block of data in 4-bit mode */
1274d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_CAP_SBS		0x08	/* support suspend/resume */
1284d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_CAP_SRW		0x04	/* support read wait */
1294d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_CAP_SMB		0x02	/* support multi-block transfer */
1304d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_CAP_SDC		0x01	/* Support Direct commands during multi-byte transfer */
1314d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1324d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* power_control */
1334d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_POWER_SMPC		0x01	/* supports master power control (RO) */
1344d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_POWER_EMPC		0x02	/* enable master power control (allow > 200mA) (RW) */
1354d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1364d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* speed_control (control device entry into high-speed clocking mode) */
1374d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_SPEED_SHS		0x01	/* supports high-speed [clocking] mode (RO) */
1384d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_SPEED_EHS		0x02	/* enable high-speed [clocking] mode (RW) */
1394d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
140492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt/* brcm sepint */
141492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt#define SDIO_SEPINT_MASK	0x01	/* route sdpcmdev intr onto separate pad (chip-specific) */
142492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt#define SDIO_SEPINT_OE		0x02	/* 1 asserts output enable for above pad */
143492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt#define SDIO_SEPINT_ACT_HI	0x04	/* use active high interrupt level instead of active low */
144492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt
1454d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* FBR structure for function 1-7, FBR addresses and register offsets */
1464d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidttypedef volatile struct {
1474d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	devctr;			/* device interface, CSA control */
1484d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	ext_dev;		/* extended standard I/O device type code */
1494d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	pwr_sel;		/* power selection support */
1504d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	PAD[6];			/* reserved */
1514d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1524d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	cis_low;		/* CIS LSB */
1534d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	cis_mid;
1544d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	cis_high;		/* CIS MSB */
1554d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	csa_low;		/* code storage area, LSB */
1564d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	csa_mid;
1574d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	csa_high;		/* code storage area, MSB */
1584d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	csa_dat_win;		/* data access window to function */
1594d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1604d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	uint8	fnx_blk_size[2];	/* block size, little endian */
1614d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt} sdio_fbr_t;
1624d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1634d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* Maximum number of I/O funcs */
1644d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_MAX_IOFUNCS		7
1654d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1664d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* SDIO Device FBR Start Address  */
1674d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_STARTADDR		0x100
1684d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1694d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* SDIO Device FBR Size */
1704d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_SIZE			0x100
1714d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1724d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* Macro to calculate FBR register base */
173492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt#define SDIOD_FBR_BASE(n)		((n) * 0x100)
1744d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1754d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* Function register offsets */
1764d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_DEVCTR		0x00	/* basic info for function */
1774d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_EXT_DEV		0x01	/* extended I/O device code */
1784d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_PWR_SEL		0x02	/* power selection bits */
1794d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1804d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* SDIO Function CIS ptr offset */
1814d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_CISPTR_0		0x09
1824d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_CISPTR_1		0x0A
1834d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_CISPTR_2		0x0B
1844d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1854d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* Code Storage Area pointer */
1864d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_CSA_ADDR_0		0x0C
1874d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_CSA_ADDR_1		0x0D
1884d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_CSA_ADDR_2		0x0E
1894d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_CSA_DATA		0x0F
1904d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1914d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* SDIO Function I/O Block Size */
1924d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_BLKSIZE_0		0x10
1934d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_BLKSIZE_1		0x11
1944d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
1954d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* devctr */
1964d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_DEVCTR_DIC	0x0f	/* device interface code */
1974d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_DECVTR_CSA	0x40	/* CSA support flag */
1984d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_FBR_DEVCTR_CSA_EN	0x80	/* CSA enabled */
1994d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* interface codes */
2004d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_DIC_NONE		0	/* SDIO standard interface is not supported */
2014d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_DIC_UART		1
2024d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_DIC_BLUETOOTH_A	2
2034d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_DIC_BLUETOOTH_B	3
2044d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_DIC_GPS		4
2054d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_DIC_CAMERA	5
2064d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_DIC_PHS		6
2074d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_DIC_WLAN		7
2084d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_DIC_EXT		0xf	/* extended device interface, read ext_dev register */
2094d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2104d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* pwr_sel */
2114d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_PWR_SEL_SPS	0x01	/* supports power selection */
2124d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOD_PWR_SEL_EPS	0x02	/* enable power selection (low-current mode) */
2134d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2144d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* misc defines */
2154d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_0		0
2164d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_1		1
2174d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_2		2
2184d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_3		3
2194d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_4		4
2204d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_5		5
2214d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_6		6
2224d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_FUNC_7		7
2234d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2244d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CARD_TYPE_UNKNOWN	0	/* bad type or unrecognized */
2254d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CARD_TYPE_IO		1	/* IO only card */
2264d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CARD_TYPE_MEMORY	2	/* memory only card */
2274d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CARD_TYPE_COMBO	3	/* IO and memory combo card */
2284d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2294d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_MAX_BLOCK_SIZE	2048	/* maximum block size for block mode operation */
2304d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_MIN_BLOCK_SIZE	1	/* minimum block size for block mode operation */
2314d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2324d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* Card registers: status bit position */
2334d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CARDREG_STATUS_BIT_OUTOFRANGE		31
2344d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CARDREG_STATUS_BIT_COMCRCERROR		23
2354d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CARDREG_STATUS_BIT_ILLEGALCOMMAND	22
2364d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CARDREG_STATUS_BIT_ERROR		19
2374d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CARDREG_STATUS_BIT_IOCURRENTSTATE3	12
2384d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CARDREG_STATUS_BIT_IOCURRENTSTATE2	11
2394d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CARDREG_STATUS_BIT_IOCURRENTSTATE1	10
2404d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CARDREG_STATUS_BIT_IOCURRENTSTATE0	9
2414d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CARDREG_STATUS_BIT_FUN_NUM_ERROR	4
2424d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2434d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2444d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2454d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_GO_IDLE_STATE		0	/* mandatory for SDIO */
2464d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_SEND_OPCOND		1
2474d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_MMC_SET_RCA		3
2484d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_IO_SEND_OP_COND		5	/* mandatory for SDIO */
2494d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_SELECT_DESELECT_CARD	7
2504d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_SEND_CSD			9
2514d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_SEND_CID			10
2524d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_STOP_TRANSMISSION	12
2534d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_SEND_STATUS		13
2544d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_GO_INACTIVE_STATE	15
2554d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_SET_BLOCKLEN		16
2564d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_READ_SINGLE_BLOCK	17
2574d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_READ_MULTIPLE_BLOCK	18
2584d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_WRITE_BLOCK		24
2594d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_WRITE_MULTIPLE_BLOCK	25
2604d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_PROGRAM_CSD		27
2614d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_SET_WRITE_PROT		28
2624d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_CLR_WRITE_PROT		29
2634d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_SEND_WRITE_PROT		30
2644d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_ERASE_WR_BLK_START	32
2654d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_ERASE_WR_BLK_END		33
2664d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_ERASE			38
2674d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_LOCK_UNLOCK		42
2684d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_IO_RW_DIRECT		52	/* mandatory for SDIO */
2694d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_IO_RW_EXTENDED		53	/* mandatory for SDIO */
2704d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_APP_CMD			55
2714d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_GEN_CMD			56
2724d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_READ_OCR			58
2734d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_CMD_CRC_ON_OFF		59	/* mandatory for SDIO */
2744d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_ACMD_SD_STATUS		13
2754d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_ACMD_SEND_NUM_WR_BLOCKS	22
2764d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_ACMD_SET_WR_BLOCK_ERASE_CNT	23
2774d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_ACMD_SD_SEND_OP_COND		41
2784d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_ACMD_SET_CLR_CARD_DETECT	42
2794d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_ACMD_SEND_SCR		51
2804d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2814d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* argument for SD_CMD_IO_RW_DIRECT and SD_CMD_IO_RW_EXTENDED */
2824d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_IO_OP_READ		0   /* Read_Write: Read */
2834d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_IO_OP_WRITE		1   /* Read_Write: Write */
2844d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_IO_RW_NORMAL		0   /* no RAW */
2854d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_IO_RW_RAW		1   /* RAW */
2864d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_IO_BYTE_MODE		0   /* Byte Mode */
2874d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_IO_BLOCK_MODE	1   /* BlockMode */
2884d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_IO_FIXED_ADDRESS	0   /* fix Address */
2894d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_IO_INCREMENT_ADDRESS	1   /* IncrementAddress */
2904d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2914d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* build SD_CMD_IO_RW_DIRECT Argument */
2924d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_IO_RW_DIRECT_ARG(rw, raw, func, addr, data) \
293492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt	((((rw) & 1) << 31) | (((func) & 0x7) << 28) | (((raw) & 1) << 27) | \
294492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt	 (((addr) & 0x1FFFF) << 9) | ((data) & 0xFF))
2954d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
2964d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* build SD_CMD_IO_RW_EXTENDED Argument */
2974d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIO_IO_RW_EXTENDED_ARG(rw, blk, func, addr, inc_addr, count) \
298492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt	((((rw) & 1) << 31) | (((func) & 0x7) << 28) | (((blk) & 1) << 27) | \
299492884be0b302c6c6ea51b360c1f7b0996d96a8bDmitry Shmidt	 (((inc_addr) & 1) << 26) | (((addr) & 0x1FFFF) << 9) | ((count) & 0x1FF))
3004d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3014d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* SDIO response parameters */
3024d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_NO_NONE			0
3034d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_NO_1			1
3044d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_NO_2			2
3054d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_NO_3			3
3064d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_NO_4			4
3074d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_NO_5			5
3084d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_NO_6			6
3094d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3104d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	/* Modified R6 response (to CMD3) */
3114d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR6_COM_CRC_ERROR	0x8000
3124d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR6_ILLEGAL_COMMAND	0x4000
3134d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR6_ERROR		0x2000
3144d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3154d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	/* Modified R1 in R4 Response (to CMD5) */
3164d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR1_SBIT			0x80
3174d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR1_PARAMETER_ERROR	0x40
3184d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR1_RFU5			0x20
3194d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR1_FUNC_NUM_ERROR	0x10
3204d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR1_COM_CRC_ERROR	0x08
3214d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR1_ILLEGAL_COMMAND	0x04
3224d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR1_RFU1			0x02
3234d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_MR1_IDLE_STATE		0x01
3244d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3254d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt	/* R5 response (to CMD52 and CMD53) */
3264d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_R5_COM_CRC_ERROR		0x80
3274d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_R5_ILLEGAL_COMMAND	0x40
3284d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_R5_IO_CURRENTSTATE1	0x20
3294d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_R5_IO_CURRENTSTATE0	0x10
3304d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_R5_ERROR			0x08
3314d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_R5_RFU			0x04
3324d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_R5_FUNC_NUM_ERROR	0x02
3334d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_R5_OUT_OF_RANGE		0x01
3344d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3354d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SD_RSP_R5_ERRBITS		0xCB
3364d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3374d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3384d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* ------------------------------------------------
3394d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *  SDIO Commands and responses
3404d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *
3414d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *  I/O only commands are:
3424d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *      CMD0, CMD3, CMD5, CMD7, CMD15, CMD52, CMD53
3434d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * ------------------------------------------------
3444d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt */
3454d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3464d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* SDIO Commands */
3474d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_CMD_0		0
3484d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_CMD_3		3
3494d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_CMD_5		5
3504d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_CMD_7		7
3514d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_CMD_15		15
3524d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_CMD_52		52
3534d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_CMD_53		53
3544d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_CMD_59		59
3554d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3564d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* SDIO Command Responses */
3574d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_RSP_NONE		0
3584d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_RSP_R1		1
3594d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_RSP_R2		2
3604d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_RSP_R3		3
3614d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_RSP_R4		4
3624d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_RSP_R5		5
3634d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_RSP_R6		6
3644d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3654d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/*
3664d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *  SDIO Response Error flags
3674d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt */
3684d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_RSP5_ERROR_FLAGS	0xCB
3694d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3704d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* ------------------------------------------------
3714d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * SDIO Command structures. I/O only commands are:
3724d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *
3734d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * 	CMD0, CMD3, CMD5, CMD7, CMD15, CMD52, CMD53
3744d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * ------------------------------------------------
3754d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt */
3764d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3774d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD5_OCR_M		BITFIELD_MASK(24)
3784d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD5_OCR_S		0
3794d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3804d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD7_RCA_M		BITFIELD_MASK(16)
3814d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD7_RCA_S		16
3824d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3834d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD_15_RCA_M		BITFIELD_MASK(16)
3844d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD_15_RCA_S		16
3854d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3864d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD52_DATA_M		BITFIELD_MASK(8)  /* Bits [7:0]    - Write Data/Stuff bits of CMD52
3874d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   */
3884d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD52_DATA_S		0
3894d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD52_REG_ADDR_M	BITFIELD_MASK(17) /* Bits [25:9]   - register address */
3904d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD52_REG_ADDR_S	9
3914d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD52_RAW_M		BITFIELD_MASK(1)  /* Bit  27       - Read after Write flag */
3924d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD52_RAW_S		27
3934d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD52_FUNCTION_M	BITFIELD_MASK(3)  /* Bits [30:28]  - Function number */
3944d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD52_FUNCTION_S	28
3954d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD52_RW_FLAG_M		BITFIELD_MASK(1)  /* Bit  31       - R/W flag */
3964d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD52_RW_FLAG_S		31
3974d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3984d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
3994d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_BYTE_BLK_CNT_M	BITFIELD_MASK(9) /* Bits [8:0]     - Byte/Block Count of CMD53 */
4004d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_BYTE_BLK_CNT_S	0
4014d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_REG_ADDR_M	BITFIELD_MASK(17) /* Bits [25:9]   - register address */
4024d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_REG_ADDR_S	9
4034d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_OP_CODE_M		BITFIELD_MASK(1)  /* Bit  26       - R/W Operation Code */
4044d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_OP_CODE_S		26
4054d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_BLK_MODE_M	BITFIELD_MASK(1)  /* Bit  27       - Block Mode */
4064d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_BLK_MODE_S	27
4074d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_FUNCTION_M	BITFIELD_MASK(3)  /* Bits [30:28]  - Function number */
4084d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_FUNCTION_S	28
4094d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_RW_FLAG_M		BITFIELD_MASK(1)  /* Bit  31       - R/W flag */
4104d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define CMD53_RW_FLAG_S		31
4114d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
4124d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* ------------------------------------------------------
4134d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * SDIO Command Response structures for SD1 and SD4 modes
4144d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt *  -----------------------------------------------------
4154d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt */
4164d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP4_IO_OCR_M		BITFIELD_MASK(24) /* Bits [23:0]  - Card's OCR Bits [23:0] */
4174d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP4_IO_OCR_S		0
4184d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP4_STUFF_M		BITFIELD_MASK(3)  /* Bits [26:24] - Stuff bits */
4194d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP4_STUFF_S		24
4204d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP4_MEM_PRESENT_M	BITFIELD_MASK(1)  /* Bit  27      - Memory present */
4214d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP4_MEM_PRESENT_S	27
4224d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP4_NUM_FUNCS_M	BITFIELD_MASK(3)  /* Bits [30:28] - Number of I/O funcs */
4234d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP4_NUM_FUNCS_S	28
4244d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP4_CARD_READY_M	BITFIELD_MASK(1)  /* Bit  31      - SDIO card ready */
4254d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP4_CARD_READY_S	31
4264d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
4274d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6_STATUS_M		BITFIELD_MASK(16) /* Bits [15:0]  - Card status bits [19,22,23,12:0]
4284d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   */
4294d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6_STATUS_S		0
4304d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6_IO_RCA_M		BITFIELD_MASK(16) /* Bits [31:16] - RCA bits[31-16] */
4314d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6_IO_RCA_S		16
4324d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
4334d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_AKE_SEQ_ERROR_M	BITFIELD_MASK(1)  /* Bit 3       - Authentication seq error */
4344d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_AKE_SEQ_ERROR_S	3
4354d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_APP_CMD_M		BITFIELD_MASK(1)  /* Bit 5       - Card expects ACMD */
4364d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_APP_CMD_S		5
4374d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_READY_FOR_DATA_M	BITFIELD_MASK(1)  /* Bit 8       - Ready for data (buff empty) */
4384d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_READY_FOR_DATA_S	8
4394d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CURR_STATE_M	BITFIELD_MASK(4)  /* Bits [12:9] - State of card
4404d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   * when Cmd was received
4414d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   */
4424d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CURR_STATE_S	9
4434d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_EARSE_RESET_M	BITFIELD_MASK(1)  /* Bit 13   - Erase seq cleared */
4444d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_EARSE_RESET_S	13
4454d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CARD_ECC_DISABLE_M	BITFIELD_MASK(1)  /* Bit 14   - Card ECC disabled */
4464d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CARD_ECC_DISABLE_S	14
4474d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_WP_ERASE_SKIP_M	BITFIELD_MASK(1)  /* Bit 15   - Partial blocks erased due to W/P */
4484d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_WP_ERASE_SKIP_S	15
4494d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CID_CSD_OVERW_M	BITFIELD_MASK(1)  /* Bit 16   - Illegal write to CID or R/O bits
4504d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   * of CSD
4514d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   */
4524d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CID_CSD_OVERW_S	16
4534d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_ERROR_M		BITFIELD_MASK(1)  /* Bit 19   - General/Unknown error */
4544d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_ERROR_S		19
4554d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CC_ERROR_M		BITFIELD_MASK(1)  /* Bit 20   - Internal Card Control error */
4564d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CC_ERROR_S		20
4574d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CARD_ECC_FAILED_M	BITFIELD_MASK(1)  /* Bit 21   - Card internal ECC failed
4584d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   * to correct data
4594d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   */
4604d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CARD_ECC_FAILED_S	21
4614d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_ILLEGAL_CMD_M	BITFIELD_MASK(1)  /* Bit 22   - Cmd not legal for the card state */
4624d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_ILLEGAL_CMD_S	22
4634d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_COM_CRC_ERROR_M	BITFIELD_MASK(1)  /* Bit 23   - CRC check of previous command failed
4644d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   */
4654d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_COM_CRC_ERROR_S	23
4664d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_LOCK_UNLOCK_FAIL_M	BITFIELD_MASK(1)  /* Bit 24   - Card lock-unlock Cmd Seq error */
4674d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_LOCK_UNLOCK_FAIL_S	24
4684d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CARD_LOCKED_M	BITFIELD_MASK(1)  /* Bit 25   - Card locked by the host */
4694d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_CARD_LOCKED_S	25
4704d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_WP_VIOLATION_M	BITFIELD_MASK(1)  /* Bit 26   - Attempt to program
4714d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   * write-protected blocks
4724d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt						   */
4734d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_WP_VIOLATION_S	26
4744d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_ERASE_PARAM_M	BITFIELD_MASK(1)  /* Bit 27   - Invalid erase blocks */
4754d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_ERASE_PARAM_S	27
4764d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_ERASE_SEQ_ERR_M	BITFIELD_MASK(1)  /* Bit 28   - Erase Cmd seq error */
4774d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_ERASE_SEQ_ERR_S	28
4784d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_BLK_LEN_ERR_M	BITFIELD_MASK(1)  /* Bit 29   - Block length error */
4794d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_BLK_LEN_ERR_S	29
4804d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_ADDR_ERR_M		BITFIELD_MASK(1)  /* Bit 30   - Misaligned address */
4814d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_ADDR_ERR_S		30
4824d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_OUT_OF_RANGE_M	BITFIELD_MASK(1)  /* Bit 31   - Cmd arg was out of range */
4834d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP1_OUT_OF_RANGE_S	31
4844d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
4854d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
4864d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP5_DATA_M		BITFIELD_MASK(8)  /* Bits [0:7]   - data */
4874d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP5_DATA_S		0
4884d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP5_FLAGS_M		BITFIELD_MASK(8)  /* Bit  [15:8]  - Rsp flags */
4894d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP5_FLAGS_S		8
4904d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP5_STUFF_M		BITFIELD_MASK(16) /* Bits [31:16] - Stuff bits */
4914d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP5_STUFF_S		16
4924d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
4934d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* ----------------------------------------------
4944d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * SDIO Command Response structures for SPI mode
4954d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt * ----------------------------------------------
4964d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt */
4974d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_IO_OCR_M	BITFIELD_MASK(16) /* Bits [15:0]    - Card's OCR Bits [23:8] */
4984d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_IO_OCR_S	0
4994d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_STUFF_M		BITFIELD_MASK(3)  /* Bits [18:16]   - Stuff bits */
5004d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_STUFF_S		16
5014d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_MEM_PRESENT_M	BITFIELD_MASK(1)  /* Bit  19        - Memory present */
5024d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_MEM_PRESENT_S	19
5034d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_NUM_FUNCS_M	BITFIELD_MASK(3)  /* Bits [22:20]   - Number of I/O funcs */
5044d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_NUM_FUNCS_S	20
5054d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_CARD_READY_M	BITFIELD_MASK(1)  /* Bit  23        - SDIO card ready */
5064d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_CARD_READY_S	23
5074d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_IDLE_STATE_M	BITFIELD_MASK(1)  /* Bit  24        - idle state */
5084d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_IDLE_STATE_S	24
5094d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_ILLEGAL_CMD_M	BITFIELD_MASK(1)  /* Bit  26        - Illegal Cmd error */
5104d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_ILLEGAL_CMD_S	26
5114d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_COM_CRC_ERROR_M	BITFIELD_MASK(1)  /* Bit  27        - COM CRC error */
5124d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_COM_CRC_ERROR_S	27
5134d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_FUNC_NUM_ERROR_M	BITFIELD_MASK(1)  /* Bit  28        - Function number error
5144d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   */
5154d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_FUNC_NUM_ERROR_S	28
5164d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_PARAM_ERROR_M	BITFIELD_MASK(1)  /* Bit  30        - Parameter Error Bit */
5174d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_PARAM_ERROR_S	30
5184d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_START_BIT_M	BITFIELD_MASK(1)  /* Bit  31        - Start Bit */
5194d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP4_START_BIT_S	31
5204d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
5214d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_DATA_M			BITFIELD_MASK(8)  /* Bits [23:16]   - R/W Data */
5224d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_DATA_S			16
5234d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_IDLE_STATE_M		BITFIELD_MASK(1)  /* Bit  24        - Idle state */
5244d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_IDLE_STATE_S		24
5254d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_ILLEGAL_CMD_M		BITFIELD_MASK(1)  /* Bit  26        - Illegal Cmd error */
5264d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_ILLEGAL_CMD_S		26
5274d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_COM_CRC_ERROR_M		BITFIELD_MASK(1)  /* Bit  27        - COM CRC error */
5284d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_COM_CRC_ERROR_S		27
5294d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_FUNC_NUM_ERROR_M	BITFIELD_MASK(1)  /* Bit  28        - Function number error
5304d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   */
5314d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_FUNC_NUM_ERROR_S	28
5324d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_PARAM_ERROR_M		BITFIELD_MASK(1)  /* Bit  30        - Parameter Error Bit */
5334d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_PARAM_ERROR_S		30
5344d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_START_BIT_M		BITFIELD_MASK(1)  /* Bit  31        - Start Bit */
5354d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SPIRSP5_START_BIT_S		31
5364d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
5374d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt/* RSP6 card status format; Pg 68 Physical Layer spec v 1.10 */
5384d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_AKE_SEQ_ERROR_M	BITFIELD_MASK(1)  /* Bit 3	- Authentication seq error
5394d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   */
5404d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_AKE_SEQ_ERROR_S	3
5414d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_APP_CMD_M		BITFIELD_MASK(1)  /* Bit 5	- Card expects ACMD */
5424d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_APP_CMD_S		5
5434d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_READY_FOR_DATA_M	BITFIELD_MASK(1)  /* Bit 8	- Ready for data
5444d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   * (buff empty)
5454d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   */
5464d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_READY_FOR_DATA_S	8
5474d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_CURR_STATE_M		BITFIELD_MASK(4)  /* Bits [12:9] - Card state at
5484d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   * Cmd reception
5494d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   */
5504d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_CURR_STATE_S		9
5514d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_ERROR_M		BITFIELD_MASK(1)  /* Bit 13  - General/Unknown error Bit 19
5524d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   */
5534d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_ERROR_S		13
5544d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_ILLEGAL_CMD_M		BITFIELD_MASK(1)  /* Bit 14  - Illegal cmd for
5554d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   * card state Bit 22
5564d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   */
5574d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_ILLEGAL_CMD_S		14
5584d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_COM_CRC_ERROR_M	BITFIELD_MASK(1)  /* Bit 15  - CRC previous command
5594d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   * failed Bit 23
5604d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt							   */
5614d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define RSP6STAT_COM_CRC_ERROR_S	15
5624d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
5634d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_XFER_TYPE_READ    SD_IO_OP_READ
5644d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#define SDIOH_XFER_TYPE_WRITE   SD_IO_OP_WRITE
5654d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt
5664d92e4c7da35860a39214c8fdb794ce0243dfabbDmitry Shmidt#endif /* _SDIO_H */
567