diff -purN 2.6_kernel/include/linux/mmc/card.h 2.6_kernel-sdio/include/linux/mmc/card.h --- 2.6_kernel/include/linux/mmc/card.h 2006-09-05 17:53:31.000000000 -0500 +++ 2.6_kernel-sdio/include/linux/mmc/card.h 2006-09-05 17:56:49.000000000 -0500 @@ -150,4 +150,32 @@ static inline int mmc_card_claim_host(st /* ARG for CMD6 to change bus width. */ #define BUS_WIDTH_CHANGE_ARG 0x03B70100 + +/* + * SDIO card CCCR register offsets. + */ +#define CCCR_SDIO_REVISION 0x00 +#define CCCR_SD_SPECIFICATION_REVISION 0x01 +#define CCCR_IO_ENABLE 0x02 +#define CCCR_IO_READY 0x03 +#define CCCR_INT_ENABLE 0x04 +#define CCCR_INT_PENDING 0x05 +#define CCCR_IO_ABORT 0x06 +#define CCCR_BUS_INTF_CONTROL 0x07 +#define CCCR_CARD_CAPACITY 0x08 +#define CCCR_COMMON_CIS_PTR1 0x09 +#define CCCR_COMMON_CIS_PTR2 0x0A +#define CCCR_COMMON_CIS_PTR3 0x0B +#define CCCR_BUS_SUSPEND 0x0C +#define CCCR_FUNCTION_SELECT 0x0D +#define CCCR_EXEC_FLAGS 0x0E +#define CCCR_READY_FLAGS 0x0F +#define CCCR_FN0_BLK_SIZE1 0x10 +#define CCCR_FN0_BLK_SIZE2 0x11 +#define FBR1 0x100 + +#define FUNCTION_0 0 +#define FUNCTION_1 1 +#define READ 0 +#define WRITE 1 #endif diff -purN 2.6_kernel/include/linux/mmc/host.h 2.6_kernel-sdio/include/linux/mmc/host.h --- 2.6_kernel/include/linux/mmc/host.h 2006-09-05 17:55:22.000000000 -0500 +++ 2.6_kernel-sdio/include/linux/mmc/host.h 2006-09-05 17:56:38.000000000 -0500 @@ -106,6 +106,7 @@ struct mmc_host { unsigned int mode; /* current card mode of host */ #define MMC_MODE_MMC 0 #define MMC_MODE_SD 1 +#define MMC_MODE_SDIO 2 struct list_head cards; /* devices attached to this host */ diff -purN 2.6_kernel/include/linux/mmc/mmc.h 2.6_kernel-sdio/include/linux/mmc/mmc.h --- 2.6_kernel/include/linux/mmc/mmc.h 2006-09-05 17:52:12.000000000 -0500 +++ 2.6_kernel-sdio/include/linux/mmc/mmc.h 2006-09-05 17:56:13.000000000 -0500 @@ -38,6 +38,8 @@ struct mmc_command { #define MMC_RSP_R1B (MMC_RSP_SHORT|MMC_RSP_CRC|MMC_RSP_BUSY) #define MMC_RSP_R2 (MMC_RSP_LONG|MMC_RSP_CRC) #define MMC_RSP_R3 (MMC_RSP_SHORT) +#define MMC_RSP_R4 (MMC_RSP_SHORT) +#define MMC_RSP_R5 (MMC_RSP_SHORT) #define MMC_RSP_R6 (MMC_RSP_SHORT|MMC_RSP_CRC) unsigned int retries; /* max number of retries */ @@ -78,9 +80,16 @@ struct mmc_data { struct scatterlist *sg; /* I/O scatter list */ }; +struct sdio_data { + u32 *sdio_buffer_phys; + void *sdio_buffer_virt; + struct mmc_request *mrq; /* assoicated request */ +}; + struct mmc_request { struct mmc_command *cmd; struct mmc_data *data; + struct sdio_data *sdiodata; struct mmc_command *stop; void *done_data; /* completion data */ diff -purN 2.6_kernel/include/linux/mmc/protocol.h 2.6_kernel-sdio/include/linux/mmc/protocol.h --- 2.6_kernel/include/linux/mmc/protocol.h 2006-09-05 17:54:41.000000000 -0500 +++ 2.6_kernel-sdio/include/linux/mmc/protocol.h 2006-09-05 17:56:26.000000000 -0500 @@ -90,6 +90,12 @@ #define SD_APP_OP_COND 41 /* bcr [31:0] OCR R3 */ #define SD_APP_SEND_SCR 51 /* adtc R1 */ +/* SDIO commands type argument response */ +/* This is basically the same command as for MMC with some quirks. */ +#define SDIO_SEND_RELATIVE_ADDR 3 /* bcr R6 */ +#define IO_SEND_OP_COND 5 +#define IO_RW_DIRECT 52 +#define IO_RW_EXTENDED 53 /* MMC status in R1 Type