summaryrefslogtreecommitdiff
path: root/drivers/mmc/host/mmc_atsmb.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mmc/host/mmc_atsmb.h')
-rwxr-xr-xdrivers/mmc/host/mmc_atsmb.h691
1 files changed, 691 insertions, 0 deletions
diff --git a/drivers/mmc/host/mmc_atsmb.h b/drivers/mmc/host/mmc_atsmb.h
new file mode 100755
index 00000000..845b1116
--- /dev/null
+++ b/drivers/mmc/host/mmc_atsmb.h
@@ -0,0 +1,691 @@
+/*++
+linux/drivers/mmc/host/mmc_atsmb.h
+
+Copyright (c) 2008 WonderMedia Technologies, Inc.
+
+This program is free software: you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software Foundation,
+either version 2 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+You should have received a copy of the GNU General Public License along with
+this program. If not, see <http://www.gnu.org/licenses/>.
+
+WonderMedia Technologies, Inc.
+10F, 529, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C.
+--*/
+
+
+
+#ifndef __MMC_ATSMB_H
+#define __MMC_ATSMB_H
+
+#define MMC0_DRIVER_NAME "sdmmc"
+#define MMC1_DRIVER_NAME "sdmmc1"
+#define MMC2_DRIVER_NAME "sdmmc2"
+
+
+
+#define MMC_ERR_NONE 0 /* Only for Android kernel 2.6.29, in MVL5, this variable is defined in mmc.h */
+#define MMC_ERR_FAILED 4 /* Only for Android kernel 2.6.29, in MVL5, this variable is defined in mmc.h */
+/***************Driver version****************/
+#define MMC_DRV_3357_A0_A3 0
+#define MMC_DRV_3357_A4_A7 1
+#define MMC_DRV_3358 2
+#define MMC_DRV_3359 3
+#define MMC_DRV_3400_A0 4
+#define MMC_DRV_3400_A1 5
+#define MMC_DRV_3426_A0 6
+#define MMC_DRV_3426_A1 7
+#define MMC_DRV_3426_A2 8
+#define MMC_DRV_3437_A0 9
+#define MMC_DRV_3437_A1 10
+#define MMC_DRV_3429 11
+#define MMC_DRV_3451_A0 12
+#define MMC_DRV_3465 13
+#define MMC_DRV_3445 14
+#define MMC_DRV_3481 15
+#define MMC_DRV_3498 16
+/************** INT and Base address*****************/
+/*special settings for each one*/
+
+#define MMC_ATSMB0_BASE SD0_SDIO_MMC_BASE_ADDR
+#define MMC_ATMSB0_END (SD0_SDIO_MMC_BASE_ADDR + 0x3FF)
+
+#define MMC_ATSMB1_BASE SD1_SDIO_MMC_BASE_ADDR
+#define MMC_ATMSB1_END (SD1_SDIO_MMC_BASE_ADDR + 0x3FF)
+
+#define MMC_ATSMB2_BASE SD2_SDIO_MMC_BASE_ADDR
+#define MMC_ATMSB2_END (SD2_SDIO_MMC_BASE_ADDR + 0x3FF)
+
+
+/************** INT and Base address*****************/
+
+/* SD0 pin */
+#define GPIO_SD0_CD BIT4
+#define GPIO_SD0_Data (BIT6 | BIT5 | BIT4 | BIT3)
+#define GPIO_SD0_WriteProtect BIT2
+#define GPIO_SD0_Command BIT1
+#define GPIO_SD0_Clock BIT0
+#define GPIO_SD0_POWER BIT7
+#define GPIO_SD0_18SEL BIT4
+
+/* SD1 pin */
+#define GPIO_SD1_Data (BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0)
+#define GPIO_SD1_Command BIT1
+#define GPIO_SD1_Clock BIT0
+#define GPIO_SD1_CD BIT6
+#define GPIO_SD1_WriteProtect BIT5
+#define GPIO_SD1_POWER BIT4
+#define GPIO_SD1_RSTN BIT3
+
+/* SD2 pin */
+#define GPIO_SD2_Data (BIT3 | BIT2 | BIT1 | BIT0)
+#define GPIO_SD2_Command BIT4
+#define GPIO_SD2_Clock BIT5
+#define GPIO_SD2_CD BIT0
+#define GPIO_SD2_WriteProtect BIT7
+#define GPIO_SD2_POWER BIT6
+
+/* SDIO Power pin */
+#define SDIO_WIFI_PWR BIT2
+#define SDIO_WIFI_INT BIT3
+#define SOIO_WIFI_WAKE_FUN BIT27
+
+#define SD0_PIN (GPIO_SD0_Clock | GPIO_SD0_Command | GPIO_SD0_WriteProtect | GPIO_SD0_Data)
+#define SD1_PIN (GPIO_SD1_Clock | GPIO_SD1_Command | GPIO_SD1_WriteProtect | GPIO_SD1_RSTN)
+#define SD2_PIN (GPIO_SD2_Clock | GPIO_SD2_Command | GPIO_SD2_WriteProtect | GPIO_SD2_Data)
+
+/* PIN share switch */
+#define GPIO_SD1_PinShare BIT11
+#define GPIO_SD2_PinShare BIT28
+
+#define SD0_CARD_PWR BIT1
+#define SD1_CARD_PWR BIT2
+#define SD2_CARD_PWR BIT3
+
+/* IO Deive Strength and Slew Rate*/
+#define SD0_IO_Slew_Rate BIT1
+#define SD0_IO_Drive_Strength BIT0
+
+
+
+/*common settings*/
+
+#define NR_SG 128
+
+/*=============================================*/
+/* WMT ATSMB Register Offset*/
+/*=============================================*/
+#define _CTL 0x00 /* 1 byte*/
+#define _CMD_IDX 0x01 /* 1 byte*/
+#define _RSP_TYPE 0x02 /* 1 byte*/
+
+#define _CMD_ARG 0x04 /* 4 bytes*/
+#define _BUS_MODE 0x08 /* 1 byte*/
+#define _EXT_BUS_MODE 0x09 /* 1 byte*/
+#define _CTL2 0x0a /* 2 bytes*/
+#define _BLK_LEN 0x0c /* 2 bytes*/
+#define _BLK_CNT 0x0e /* 2 bytes*/
+#define _RSP_0 0x10 /* 1 bytes*/
+#define _RSP_1 0x11 /* 1 bytes*/
+#define _RSP_2 0x12 /* 1 bytes*/
+#define _RSP_3 0x13 /* 1 bytes*/
+#define _RSP_4 0x14 /* 1 bytes*/
+#define _RSP_5 0x15 /* 1 bytes*/
+#define _RSP_6 0x16 /* 1 bytes*/
+#define _RSP_7 0x17 /* 1 bytes*/
+#define _RSP_8 0x18 /* 1 bytes*/
+#define _RSP_9 0x19 /* 1 bytes*/
+#define _RSP_10 0x1a /* 1 bytes*/
+#define _RSP_11 0x1b /* 1 bytes*/
+#define _RSP_12 0x1c /* 1 bytes*/
+#define _RSP_13 0x1d /* 1 bytes*/
+#define _RSP_14 0x1e /* 1 bytes*/
+#define _RSP_15 0x1f /* 1 bytes*/
+
+#define _CURBLK_CNT 0x20 /* 4 bytes*/
+#define _INT_MASK_0 0x24 /* 1 byte*/
+#define _INT_MASK_1 0x25 /* 1 byte*/
+
+#define _SD_STS_0 0x28 /* 1 byte*/
+#define _SD_STS_1 0x29 /* 1 byte*/
+#define _SD_STS_2 0x2a /* 1 byte*/
+#define _SD_STS_3 0x2b /* 1 byte*/
+#define _RSP_TOUT 0x2c /* 1 byte*/
+
+#define _CLK_SEL 0x30 /* 1 byte*/ /*Not used*/
+
+#define _EXT_CTL 0x34 /* 1 byte*/
+#define _EXT_CTL_1 0x35 /* 1 byte*/
+#define _EXT_CTL_2 0x36 /* 1 byte*/
+
+#define _SHDW_BLKLEN 0x38 /* 2 bytes*/
+#define _MAN_TUNE_VAL 0x3a /* 1 byte*/
+#define _SD_WRI_TUNE 0x3b /* 1 byte*/
+#define _TIMER_VAL 0x3c /* 2 bytes*/
+
+
+#define _PDMA_GCR 0x100
+#define _PDMA_IER 0x104
+#define _PDMA_ISR 0x108
+#define _PDMA_DESPR 0x10C
+#define _PDMA_RBR 0x110
+#define _PDMA_DAR 0x114
+#define _PDMA_BAR 0x118
+#define _PDMA_CPR 0x11C
+#define _PDMA_CCR 0X120
+
+
+/*=========================================*/
+/* SD0 PDMA related Registers */
+/*=========================================*/
+#define ATSMB0_PDMA_GCR (REG32_PTR(_PDMA_GCR + MMC_ATSMB0_BASE))
+#define ATSMB0_PDMA_IER (REG32_PTR(_PDMA_IER + MMC_ATSMB0_BASE))
+#define ATSMB0_PDMA_ISR (REG32_PTR(_PDMA_ISR + MMC_ATSMB0_BASE))
+#define ATSMB0_PDMA_DESPR (REG32_PTR(_PDMA_DESPR + MMC_ATSMB0_BASE))
+#define ATSMB0_PDMA_RBR (REG32_PTR(_PDMA_RBR + MMC_ATSMB0_BASE))
+#define ATSMB0_PDMA_DAR (REG32_PTR(_PDMA_DAR + MMC_ATSMB0_BASE))
+#define ATSMB0_PDMA_BAR (REG32_PTR(_PDMA_BAR + MMC_ATSMB0_BASE))
+#define ATSMB0_PDMA_CPR (REG32_PTR(_PDMA_CPR + MMC_ATSMB0_BASE))
+#define ATSMB0_PDMA_CCR (REG32_PTR(_PDMA_CCR + MMC_ATSMB0_BASE))
+
+
+/*=========================================*/
+/* SD0 Register pointer. */
+/*=========================================*/
+#define ATSMB0_CTL (REG8_PTR(_CTL + MMC_ATSMB0_BASE))
+#define ATSMB0_CMD_IDX (REG8_PTR(_CMD_IDX + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_TYPE (REG8_PTR(_RSP_TYPE + MMC_ATSMB0_BASE))
+#define ATSMB0_CMD_ARG (REG32_PTR(_CMD_ARG + MMC_ATSMB0_BASE))
+#define ATSMB0_BUS_MODE (REG8_PTR(_BUS_MODE + MMC_ATSMB0_BASE))
+#define ATSMB0_EXT_BUS_MODE (REG8_PTR(_EXT_BUS_MODE + MMC_ATSMB0_BASE))
+#define ATSMB0_CTL2 (REG16_PTR(_CTL2 + MMC_ATSMB0_BASE))
+#define ATSMB0_BLK_LEN (REG16_PTR(_BLK_LEN + MMC_ATSMB0_BASE))
+#define ATSMB0_BLK_CNT (REG16_PTR(_BLK_CNT + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_0 (REG8_PTR(_RSP_0 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_1 (REG8_PTR(_RSP_1 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_2 (REG8_PTR(_RSP_2 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_3 (REG8_PTR(_RSP_3 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_4 (REG8_PTR(_RSP_4 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_5 (REG8_PTR(_RSP_5 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_6 (REG8_PTR(_RSP_6 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_7 (REG8_PTR(_RSP_7 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_8 (REG8_PTR(_RSP_8 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_9 (REG8_PTR(_RSP_9 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_10 (REG8_PTR(_RSP_10 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_11 (REG8_PTR(_RSP_11 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_12 (REG8_PTR(_RSP_12 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_13 (REG8_PTR(_RSP_13 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_14 (REG8_PTR(_RSP_14 + MMC_ATSMB0_BASE))
+#define ATSMB0_RSP_15 (REG8_PTR(_RSP_15 + MMC_ATSMB0_BASE))
+
+#define ATSMB0_CURBLK_CNT (REG32_PTR(_CURBLK_CNT + MMC_ATSMB0_BASE))
+#define ATSMB0_INT_MASK_0 (REG8_PTR(_INT_MASK_0 + MMC_ATSMB0_BASE))
+#define ATSMB0_INT_MASK_1 (REG8_PTR(_INT_MASK_1 + MMC_ATSMB0_BASE))
+#define ATSMB0_SD_STS_0 (REG8_PTR(_SD_STS_0 + MMC_ATSMB0_BASE))
+#define ATSMB0_SD_STS_1 (REG8_PTR(_SD_STS_1 + MMC_ATSMB0_BASE))
+#define ATSMB0_SD_STS_2 (REG8_PTR(_SD_STS_2 + MMC_ATSMB0_BASE))
+#define ATSMB0_SD_STS_3 (REG8_PTR(_SD_STS_3 + MMC_ATSMB0_BASE))
+
+#define ATSMB0_RSP_TOUT (REG8_PTR(_RSP_TOUT + MMC_ATSMB0_BASE))
+#define ATSMB0_CLK_SEL (REG8_PTR(_CLK_SEL + MMC_ATSMB0_BASE))
+#define ATSMB0_EXT_CTL (REG8_PTR(_EXT_CTL + MMC_ATSMB0_BASE))
+#define ATSMB0_EXT_CTL_1 (REG8_PTR(_EXT_CTL_1 + MMC_ATSMB0_BASE))
+#define ATSMB0_EXT_CTL_2 (REG8_PTR(_EXT_CTL_2 + MMC_ATSMB0_BASE))
+
+#define ATSMB0_SHDW_BLKLEN (REG16_PTR(_SHDW_BLKLEN + MMC_ATSMB0_BASE))
+#define ATSMB0_MAN_TUNE_VAL (REG8_PTR(_MAN_TUNE_VAL + MMC_ATSMB0_BASE))
+#define ATSMB0_SD_WRI_TUNE (REG8_PTR(_SD_WRI_TUNE+ MMC_ATSMB0_BASE))
+#define ATSMB0_TIMER_VAL (REG16_PTR(_TIMER_VAL + MMC_ATSMB0_BASE))
+
+//#define ATSMB0_INT (REG8_PTR(0xd8140056))
+
+
+
+
+/*=========================================*/
+/* SD1 PDMA related Registers */
+/*=========================================*/
+#define ATSMB1_PDMA_GCR (REG32_PTR(_PDMA_GCR + MMC_ATSMB1_BASE))
+#define ATSMB1_PDMA_IER (REG32_PTR(_PDMA_IER + MMC_ATSMB1_BASE))
+#define ATSMB1_PDMA_ISR (REG32_PTR(_PDMA_ISR + MMC_ATSMB1_BASE))
+#define ATSMB1_PDMA_DESPR (REG32_PTR(_PDMA_DESPR + MMC_ATSMB1_BASE))
+#define ATSMB1_PDMA_RBR (REG32_PTR(_PDMA_RBR + MMC_ATSMB1_BASE))
+#define ATSMB1_PDMA_DAR (REG32_PTR(_PDMA_DAR + MMC_ATSMB1_BASE))
+#define ATSMB1_PDMA_BAR (REG32_PTR(_PDMA_BAR + MMC_ATSMB1_BASE))
+#define ATSMB1_PDMA_CPR (REG32_PTR(_PDMA_CPR + MMC_ATSMB1_BASE))
+#define ATSMB1_PDMA_CCR (REG32_PTR(_PDMA_CCR + MMC_ATSMB1_BASE))
+
+
+/*=========================================*/
+/* SD1 Register pointer. */
+/*=========================================*/
+#define ATSMB1_CTL (REG8_PTR(_CTL + MMC_ATSMB1_BASE))
+#define ATSMB1_CMD_IDX (REG8_PTR(_CMD_IDX + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_TYPE (REG8_PTR(_RSP_TYPE + MMC_ATSMB1_BASE))
+#define ATSMB1_CMD_ARG (REG32_PTR(_CMD_ARG + MMC_ATSMB1_BASE))
+#define ATSMB1_BUS_MODE (REG8_PTR(_BUS_MODE + MMC_ATSMB1_BASE))
+#define ATSMB1_EXT_BUS_MODE (REG8_PTR(_EXT_BUS_MODE + MMC_ATSMB1_BASE))
+#define ATSMB1_CTL2 (REG16_PTR(_CTL2 + MMC_ATSMB1_BASE))
+#define ATSMB1_BLK_LEN (REG16_PTR(_BLK_LEN + MMC_ATSMB1_BASE))
+#define ATSMB1_BLK_CNT (REG16_PTR(_BLK_CNT + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_0 (REG8_PTR(_RSP_0 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_1 (REG8_PTR(_RSP_1 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_2 (REG8_PTR(_RSP_2 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_3 (REG8_PTR(_RSP_3 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_4 (REG8_PTR(_RSP_4 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_5 (REG8_PTR(_RSP_5 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_6 (REG8_PTR(_RSP_6 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_7 (REG8_PTR(_RSP_7 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_8 (REG8_PTR(_RSP_8 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_9 (REG8_PTR(_RSP_9 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_10 (REG8_PTR(_RSP_10 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_11 (REG8_PTR(_RSP_11 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_12 (REG8_PTR(_RSP_12 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_13 (REG8_PTR(_RSP_13 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_14 (REG8_PTR(_RSP_14 + MMC_ATSMB1_BASE))
+#define ATSMB1_RSP_15 (REG8_PTR(_RSP_15 + MMC_ATSMB1_BASE))
+
+#define ATSMB1_CURBLK_CNT (REG32_PTR(_CURBLK_CNT + MMC_ATSMB1_BASE))
+#define ATSMB1_INT_MASK_0 (REG8_PTR(_INT_MASK_0 + MMC_ATSMB1_BASE))
+#define ATSMB1_INT_MASK_1 (REG8_PTR(_INT_MASK_1 + MMC_ATSMB1_BASE))
+#define ATSMB1_SD_STS_0 (REG8_PTR(_SD_STS_0 + MMC_ATSMB1_BASE))
+#define ATSMB1_SD_STS_1 (REG8_PTR(_SD_STS_1 + MMC_ATSMB1_BASE))
+#define ATSMB1_SD_STS_2 (REG8_PTR(_SD_STS_2 + MMC_ATSMB1_BASE))
+#define ATSMB1_SD_STS_3 (REG8_PTR(_SD_STS_3 + MMC_ATSMB1_BASE))
+
+#define ATSMB1_RSP_TOUT (REG8_PTR(_RSP_TOUT + MMC_ATSMB1_BASE))
+#define ATSMB1_CLK_SEL (REG8_PTR(_CLK_SEL + MMC_ATSMB1_BASE))
+#define ATSMB1_EXT_CTL (REG8_PTR(_EXT_CTL + MMC_ATSMB1_BASE))
+#define ATSMB1_EXT_CTL_1 (REG8_PTR(_EXT_CTL_1 + MMC_ATSMB1_BASE))
+#define ATSMB1_EXT_CTL_2 (REG8_PTR(_EXT_CTL_2 + MMC_ATSMB1_BASE))
+
+#define ATSMB1_SHDW_BLKLEN (REG16_PTR(_SHDW_BLKLEN + MMC_ATSMB1_BASE))
+#define ATSMB1_MAN_TUNE_VAL (REG8_PTR(_MAN_TUNE_VAL + MMC_ATSMB1_BASE))
+#define ATSMB1_SD_WRI_TUNE (REG8_PTR(_SD_WRI_TUNE+ MMC_ATSMB1_BASE))
+#define ATSMB1_TIMER_VAL (REG16_PTR(_TIMER_VAL + MMC_ATSMB1_BASE))
+
+
+
+/*=========================================*/
+/* SD2 PDMA related Registers */
+/*=========================================*/
+#define ATSMB2_PDMA_GCR (REG32_PTR(_PDMA_GCR + MMC_ATSMB2_BASE))
+#define ATSMB2_PDMA_IER (REG32_PTR(_PDMA_IER + MMC_ATSMB2_BASE))
+#define ATSMB2_PDMA_ISR (REG32_PTR(_PDMA_ISR + MMC_ATSMB2_BASE))
+#define ATSMB2_PDMA_DESPR (REG32_PTR(_PDMA_DESPR + MMC_ATSMB2_BASE))
+#define ATSMB2_PDMA_RBR (REG32_PTR(_PDMA_RBR + MMC_ATSMB2_BASE))
+#define ATSMB2_PDMA_DAR (REG32_PTR(_PDMA_DAR + MMC_ATSMB2_BASE))
+#define ATSMB2_PDMA_BAR (REG32_PTR(_PDMA_BAR + MMC_ATSMB2_BASE))
+#define ATSMB2_PDMA_CPR (REG32_PTR(_PDMA_CPR + MMC_ATSMB2_BASE))
+#define ATSMB2_PDMA_CCR (REG32_PTR(_PDMA_CCR + MMC_ATSMB2_BASE))
+
+
+/*=========================================*/
+/* SD2 Register pointer. */
+/*=========================================*/
+#define ATSMB2_CTL (REG8_PTR(_CTL + MMC_ATSMB2_BASE))
+#define ATSMB2_CMD_IDX (REG8_PTR(_CMD_IDX + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_TYPE (REG8_PTR(_RSP_TYPE + MMC_ATSMB2_BASE))
+#define ATSMB2_CMD_ARG (REG32_PTR(_CMD_ARG + MMC_ATSMB2_BASE))
+#define ATSMB2_BUS_MODE (REG8_PTR(_BUS_MODE + MMC_ATSMB2_BASE))
+#define ATSMB2_EXT_BUS_MODE (REG8_PTR(_EXT_BUS_MODE + MMC_ATSMB2_BASE))
+#define ATSMB2_CTL2 (REG16_PTR(_CTL2 + MMC_ATSMB2_BASE))
+#define ATSMB2_BLK_LEN (REG16_PTR(_BLK_LEN + MMC_ATSMB2_BASE))
+#define ATSMB2_BLK_CNT (REG16_PTR(_BLK_CNT + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_0 (REG8_PTR(_RSP_0 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_1 (REG8_PTR(_RSP_1 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_2 (REG8_PTR(_RSP_2 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_3 (REG8_PTR(_RSP_3 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_4 (REG8_PTR(_RSP_4 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_5 (REG8_PTR(_RSP_5 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_6 (REG8_PTR(_RSP_6 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_7 (REG8_PTR(_RSP_7 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_8 (REG8_PTR(_RSP_8 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_9 (REG8_PTR(_RSP_9 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_10 (REG8_PTR(_RSP_10 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_11 (REG8_PTR(_RSP_11 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_12 (REG8_PTR(_RSP_12 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_13 (REG8_PTR(_RSP_13 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_14 (REG8_PTR(_RSP_14 + MMC_ATSMB2_BASE))
+#define ATSMB2_RSP_15 (REG8_PTR(_RSP_15 + MMC_ATSMB2_BASE))
+
+#define ATSMB2_CURBLK_CNT (REG32_PTR(_CURBLK_CNT + MMC_ATSMB2_BASE))
+#define ATSMB2_INT_MASK_0 (REG8_PTR(_INT_MASK_0 + MMC_ATSMB2_BASE))
+#define ATSMB2_INT_MASK_1 (REG8_PTR(_INT_MASK_1 + MMC_ATSMB2_BASE))
+#define ATSMB2_SD_STS_0 (REG8_PTR(_SD_STS_0 + MMC_ATSMB2_BASE))
+#define ATSMB2_SD_STS_1 (REG8_PTR(_SD_STS_1 + MMC_ATSMB2_BASE))
+#define ATSMB2_SD_STS_2 (REG8_PTR(_SD_STS_2 + MMC_ATSMB2_BASE))
+#define ATSMB2_SD_STS_3 (REG8_PTR(_SD_STS_3 + MMC_ATSMB2_BASE))
+
+#define ATSMB2_RSP_TOUT (REG8_PTR(_RSP_TOUT + MMC_ATSMB2_BASE))
+#define ATSMB2_CLK_SEL (REG8_PTR(_CLK_SEL + MMC_ATSMB2_BASE))
+#define ATSMB2_EXT_CTL (REG8_PTR(_EXT_CTL + MMC_ATSMB2_BASE))
+#define ATSMB2_EXT_CTL_1 (REG8_PTR(_EXT_CTL_1 + MMC_ATSMB2_BASE))
+#define ATSMB2_EXT_CTL_2 (REG8_PTR(_EXT_CTL_2 + MMC_ATSMB2_BASE))
+
+#define ATSMB2_SHDW_BLKLEN (REG16_PTR(_SHDW_BLKLEN + MMC_ATSMB2_BASE))
+#define ATSMB2_MAN_TUNE_VAL (REG8_PTR(_MAN_TUNE_VAL + MMC_ATSMB2_BASE))
+#define ATSMB2_SD_WRI_TUNE (REG8_PTR(_SD_WRI_TUNE+ MMC_ATSMB2_BASE))
+#define ATSMB2_TIMER_VAL (REG16_PTR(_TIMER_VAL + MMC_ATSMB2_BASE))
+
+
+/*=========================================*/
+/* Register usage const*/
+/*=========================================*/
+/*================================================================================*/
+/**/
+/* SD Host Register Bit Fields*/
+/**/
+/*================================================================================*/
+/**/
+/* Control Register*/
+#define ATSMB_START 0x1
+#define ATSMB_SPISTP BIT1
+#define ATSMB_RXTX BIT2
+#define ATSMB_FFRST BIT3
+#define ATSMB_CT (BIT4|BIT5|BIT6|BIT7)
+/**/
+/* Command Index Register*/
+
+/**/
+/*Response Type Register*/
+#define ATSMB_RT (BIT0|BIT1|BIT2|BIT3)
+#define ATSMB_RY BIT4
+
+/**/
+/* Command Argument Register 0,1,2,3*/
+
+/**/
+/* Bus Mode Register*/
+#define ATSMB_SPI BIT0
+#define ATSMB_BUS_WIDTH_4 BIT1
+#define ATSMB_RW BIT2
+#define ATSMB_SPICRC BIT3
+#define ATSMB_CST BIT4
+#define ATSMB_SPICS BIT5
+#define ATSMB_SDPWR BIT6
+#define ATSMB_SFTRST BIT7
+
+/**/
+/* Block Length Register 0,1*/
+#define ATSMB_BS_L (BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7)
+#define ATSMB_BS_H (BIT8|BIT9|BIT10)
+#define ATSMB_CFD BIT4
+#define ATSMB_INTEN BIT7
+
+/**/
+/* Block Count Register 0,1*/
+
+/**/
+/* Response Register*/
+
+/**/
+/* Data Register*/
+
+/**/
+/* Interrupt Mask Register 0*/
+#define ATSMB_THIE BIT0
+#define ATSMB_TEIE BIT1
+#define ATSMB_TAIE BIT2
+#define ATSMB_RHIE BIT3
+#define ATSMB_MULTI_XFER_DONE_EN BIT4
+#define ATSMB_BLOCK_XFER_DONE_EN BIT5
+#define ATSMB_CDIE BIT6
+#define ATSMB_DEVICE_INSERT_EN BIT7
+
+/**/
+/* Interrupt Mask Register 1*/
+#define ATSMB_SDIO_EN BIT0
+#define ATSMB_RSP_DONE_EN BIT1
+#define ATSMB_RSP_TIMEOUT_EN BIT2
+#define ATSMB_AUTO_STOP_EN BIT3
+#define ATSMB_DATA_TIMEOUT_EN BIT4
+#define ATSMB_RSP_CRC_ERR_EN BIT5
+#define ATSMB_READ_CRC_ERR_EN BIT6
+#define ATSMB_WRITE_CRC_ERR_EN BIT7
+
+/**/
+/* SD Status Register 0*/
+#define ATSMB_TH BIT0
+#define ATSMB_WRITE_PROTECT BIT1 /* 1. write protected is disabled.*/
+#define ATSMB_CARD_NOT_IN_SLOT BIT2
+#define ATSMB_CARD_NOT_IN_SLOT_GPI BIT3
+#define ATSMB_MULTI_XFER_DONE BIT4
+#define ATSMB_BLOCK_XFER_DONE BIT5
+#define ATSMB_SD_CD BIT6 /* what is its purpose?*/
+#define ATSMB_DEVICE_INSERT BIT7
+
+/**/
+/* SD Status Register 1*/
+#define ATSMB_SDIO_INT BIT0
+#define ATSMB_RSP_DONE BIT1
+#define ATSMB_RSP_TIMEOUT BIT2
+#define ATSMB_AUTO_STOP BIT3
+#define ATSMB_DATA_TIMEOUT BIT4
+#define ATSMB_RSP_CRC_ERR BIT5
+#define ATSMB_READ_CRC_ERR BIT6
+#define ATSMB_WRITE_CRC_ERR BIT7
+
+/**/
+/* SD Status Register 2*/
+#define ATSMB_RSP_BUSY BIT5
+#define ATSMB_CLK_FREEZ_STS BIT6
+#define ATSMB_CLK_FREEZ_EN BIT7
+
+
+/* SD Response types*/
+#define ATMSB_TYPE_R0 0 /* NONE response*/
+#define ATMSB_TYPE_R1 1 /* Basic response format*/
+#define ATMSB_TYPE_R2 2 /* R2 response. Used by ALL_SEND_CID(CMD2),*/
+/* SEND_CID(CMD10) and SEND_CSD(CMD9)*/
+#define ATMSB_TYPE_R3 3 /* R3 response. Used by SEND_APP_OP_COND(ACMD41)*/
+#define ATMSB_TYPE_R6 6 /* R6 response. Used by SEND_RELATIVE_ADDR(CMD3)*/
+#define ATMSB_TYPE_R7 7 /* R6 response. Used by SEND_RELATIVE_ADDR(CMD3)*/
+#define ATMSB_TYPE_R1b 9
+#define ATMSB_TYPE_R5 5
+#define ATMSB_TYPE_R4 4
+
+/*
+ * SD PDMA
+ */
+struct SD_PDMA_REG {
+ unsigned long DMA_GCR; /* Rx00 */
+ unsigned long DMA_IER; /* Rx04 */
+ unsigned long DMA_ISR; /* Rx08 */
+ unsigned long *DMA_DESPR; /* Rx0C */
+ unsigned long DMA_RBR; /* Rx10 */
+ unsigned long DMA_DAR; /* Rx14 */
+ unsigned long DMA_BAR; /* Rx18 */
+ unsigned long DMA_CPR; /* Rx1C */
+ unsigned long DMA_CCR; /* RX20 */
+ unsigned long resv[5]; /* RX2C-3C */
+};
+/*
+ * SD PDMA - DMA_GCR : DMA Global Control Register
+ */
+#define SD_PDMA_GCR_DMA_EN 0x00000001 /* [0] -- DMA controller enable*/
+#define SD_PDMA_GCR_SOFTRESET 0x00000100 /* [8] -- Software rest*/
+
+/*
+ * SD PDMA - DMA_IER : DMA Interrupt Enable Register
+ */
+#define SD_PDMA_IER_INT_EN 0x00000001 /* [0] --DMA interrupt enable */
+/*
+ * SD PDMA - DMA_ISR : DMA Interrupt Status Register
+ */
+#define SD_PDMA_IER_INT_STS 0x00000001 /* [0] -- DMA interrupt status */
+/*
+ * SD PDMA - DMA_DESPR : DMA Descriptor base address Pointer Register
+ */
+
+/*
+ * SD PDMA - DMA_RBR : DMA Residual Bytes Register
+ */
+#define SD_PDMA_RBR_End 0x80000000 /* [0] -- DMA interrupt status */
+#define SD_PDMA_RBR_Format 0x40000000 /* [0] -- DMA interrupt status */
+/*
+ * SD PDMA - DMA_DAR : DMA Data Address Register
+ */
+
+/*
+ * SD PDMA - DMA_BAR : DMA Rbanch Address Register
+ */
+
+/*
+ * SD PDMA - DMA_CPR : DMA Command Pointer Register
+ */
+
+/*
+ * SD PDMA - DMA_CCR : DMAContext Control Register for Channel 0
+ */
+#define SD_PDMA_READ 0x00
+#define SD_PDMA_WRITE 0x01
+#define SD_PDMA_CCR_RUN 0x00000080
+#define SD_PDMA_CCR_IF_to_peripheral 0x00000000
+#define SD_PDMA_CCR_peripheral_to_IF 0x00400000
+#define SD_PDMA_CCR_EvtCode 0x0000000f
+#define SD_PDMA_CCR_Evt_no_status 0x00000000
+#define SD_PDMA_CCR_Evt_ff_underrun 0x00000001
+#define SD_PDMA_CCR_Evt_ff_overrun 0x00000002
+#define SD_PDMA_CCR_Evt_desp_read 0x00000003
+#define SD_PDMA_CCR_Evt_data_rw 0x00000004
+#define SD_PDMA_CCR_Evt_early_end 0x00000005
+#define SD_PDMA_CCR_Evt_success 0x0000000f
+
+/*
+ * PDMA Descriptor short
+ */
+struct SD_PDMA_DESC_S{
+ unsigned long volatile ReqCount : 16; /* bit 0 -15 -Request count */
+ unsigned long volatile i : 1; /* bit 16 -interrupt */
+ unsigned long volatile reserve : 13; /* bit 17-29 -reserved */
+ unsigned long volatile format : 1; /* bit 30 -The descriptor format */
+ unsigned long volatile end : 1; /* bit 31 -End flag of descriptor list*/
+ unsigned long volatile *DataBufferAddr; /* bit 31 -Data Buffer address */
+} ;
+
+/*
+ * PDMA Descriptor long
+ */
+struct SD_PDMA_DESC_L{
+ unsigned long volatile ReqCount:16; /* bit 0-15-Request count */
+ unsigned long volatile i:1; /* bit 16 -interrupt*/
+ unsigned long volatile reserve:13; /* bit 17-29-reserved*/
+ unsigned long volatile format:1; /* bit 30-The descriptor format */
+ unsigned long volatile end:1; /* bit 31 -End flag of descriptor list*/
+ unsigned long volatile *DataBufferAddr; /* bit 31-0 -Data Buffer address*/
+ unsigned long volatile *BranchAddr; /* bit 31-2-Descriptor Branch address*/
+ unsigned long volatile reserve0; /* bit 31-0-reserved*/
+};
+
+
+/**/
+/* DMA usage const for Rx08[Config]*/
+/**/
+#define DMA_CFG_WRITE 0x0
+#define DMA_CFG_READ 0x10000
+/*
+#define DMA_CFG_8B 0x00
+#define DMA_CFG_16B 0x01
+#define DMA_CFG_32B 0x02
+
+#define DMA_CFG_SINGLE 0x00
+#define DMA_CFG_INC4 0x10
+#define DMA_CFG_INC8 0x20
+
+#define DMA_CFG_DATA 0x100
+#define DMA_CFG_PRIVILEDGE 0x200
+#define DMA_CFG_BUFFER 0x400
+#define DMA_CFG_CACHE 0x800
+
+#define DMA_CFG_INC 0x1000
+#define DMA_CFG_READ 0x10000
+#define DMA_CFG_WRITE 0x0
+
+#define DMA_CFG_NOINT 0x0
+#define DMA_CFG_ENTCINT 0x100000
+#define DMA_CFG_ENXFERINT 0x200000
+#define DMA_CFG_ENERRINT 0x400000
+#define DMA_CFG_ENFIFOINT 0x800000
+
+//
+// DMA usage const for RxC[Control]
+//
+#define DMA_CTL_ENABLE 0x1
+#define DMA_CTL_SOFTREQ 0x10
+
+//
+// DMA usage const for Rx10[Status]
+//
+#define DMA_STS_TC 0x1
+#define DMA_STS_AHB_ERROR 0x4
+#define DMA_STS_FIFO_EMPTY 0x8
+#define DMA_STS_BULK_COMPLETE 0x2
+*/
+/*=========================================*/
+/* structure definition.*/
+/*=========================================*/
+struct atsmb_host {
+ struct mmc_host *mmc;
+ spinlock_t lock;
+ struct resource *res;
+ void *base;
+ int regular_irq;
+ int dma_irq;
+ /* 2009/01/13 janshiue-s */
+ unsigned long *DescVirAddr;
+ dma_addr_t DescPhyAddr;
+ unsigned int DescSize;
+ unsigned long *BufVirAddr;
+ dma_addr_t BufPhyAddr;
+ unsigned long DmaIntMask;
+ /* 2009/01/13 janshiue-s */
+ struct mmc_request *mrq;
+ struct mmc_command *cmd;
+ struct mmc_data *data;
+ u32 pwr;
+ struct mmc_platform_data *plat;
+ unsigned int sg_len;
+ /* pio stuff */
+ struct scatterlist *sg_ptr;
+ unsigned int sg_off;
+ unsigned int size;
+ /* to support sg, we need little loops when requesting data*/
+ u32 opcode;
+ /*this code may different from the one in command. Eg. When we are accessing data*/
+ unsigned char soft_timeout;
+ void *done_data; /* completion data */
+ void (*done)(void *data);/* completion function */
+ int current_clock;
+
+};
+
+#define MAX_DESC_NUM 256
+
+enum WMT_SD_FUN {
+ SD_MMC,
+ SDIO_WIFI,
+ SD_MAX_FUN
+};
+
+int atsmb_init_short_desc(unsigned long *DescAddr, unsigned int ReqCount,
+ unsigned long *BufferAddr, int End);
+int atsmb_init_long_desc(unsigned long *DescAddr, unsigned int ReqCount,
+ unsigned long *BufferAddr, unsigned long *BranchAddr, int End);
+
+int atsmb1_init_short_desc(unsigned long *DescAddr, unsigned int ReqCount,
+ unsigned long *BufferAddr, int End);
+int atsmb1_init_long_desc(unsigned long *DescAddr, unsigned int ReqCount,
+ unsigned long *BufferAddr, unsigned long *BranchAddr, int End);
+
+int atsmb2_init_short_desc(unsigned long *DescAddr, unsigned int ReqCount,
+ unsigned long *BufferAddr, int End);
+int atsmb2_init_long_desc(unsigned long *DescAddr, unsigned int ReqCount,
+ unsigned long *BufferAddr, unsigned long *BranchAddr, int End);
+
+
+#endif /* __MMC_ATSMB_H */