3 #ifndef _SDIO_CARD_PAL_H_
\r
4 #define _SDIO_CARD_PAL_H_
\r
5 #include "../mmc/sdhost_drv.h"
\r
6 #define SDIO_SLAVE_FUNC_0 (0)
\r
7 #define SDIO_SLAVE_FUNC_1 (1)
\r
9 typedef struct SDIO_CARD_PAL_Struct{
\r
11 unsigned int MagicNum; // "SDIO"
\r
12 SDHOST_HANDLE sdio_port;
\r
13 volatile unsigned int s_CardEvent;
\r
14 }SDIO_CARD_PAL_Struct_T;
\r
15 typedef struct SDIO_CARD_PAL_Struct* SDIO_CARD_PAL_HANDLE;
\r
21 SDIO_CARD_PAL_SLOT_0,
\r
22 SDIO_CARD_PAL_SLOT_1,
\r
23 SDIO_CARD_PAL_SLOT_2,
\r
24 SDIO_CARD_PAL_SLOT_3,
\r
25 SDIO_CARD_PAL_SLOT_MAX
\r
26 }SDIO_CARD_PAL_SLOT_E;
\r
28 SDIO_CARD_PAL_HANDLE SPRD_SDSlave_Pal_Open(SDIO_CARD_PAL_SLOT_E slotNo);
\r
29 void SDIO_Card_Pal_SlotSelect(SDIO_CARD_PAL_SLOT_E slotNo);
\r
35 }SDIO_CARD_PAL_PWR_E;
\r
36 int SPRD_SDSlave_Pal_Pwr(SDIO_CARD_PAL_HANDLE handle,SDIO_CARD_PAL_PWR_E onOrOff);
\r
40 SDIO_CARD_PAL_400KHz, // ³õʼ»¯ÆµÂÊ
\r
41 SDIO_CARD_PAL_20MHz, // MMC¿¨µÄ¹¤×÷ƵÂÊ
\r
42 SDIO_CARD_PAL_25MHz, // SD¿¨µÄ¹¤×÷ƵÂÊ
\r
43 SDIO_CARD_PAL_50MHz // SD¿¨¸ßËÙģʽÏµĹ¤×÷ƵÂÊ
\r
44 }SDIO_CARD_PAL_CLKTYPE_E;
\r
45 int SPRD_SDSlave_Pal_SetClk(SDIO_CARD_PAL_HANDLE handle,SDIO_CARD_PAL_CLKTYPE_E clkType);
\r
49 SDIO_CARD_PAL_1_BIT,
\r
50 SDIO_CARD_PAL_4_BIT,
\r
52 }SDIO_CARD_PAL_BUFWIDTH_E;
\r
53 int SPRD_SDSlave_Pal_SetBusWidth(SDIO_CARD_PAL_HANDLE handle,SDIO_CARD_PAL_BUFWIDTH_E widthType);
\r
57 SDIO_CARD_PAL_LOW_SPEED,
\r
58 SDIO_CARD_PAL_HIGH_SPEED
\r
59 }SDIO_CARD_PAL_SPEEDMODE_E;
\r
60 int SPRD_SDSlave_Pal_SetSpeedMode(SDIO_CARD_PAL_HANDLE handle,SDIO_CARD_PAL_SPEEDMODE_E speedMode);
\r
64 // cmdindex,rsp,transmode
\r
65 CARD_CMD0_GO_IDLE_STATE,
\r
66 CARD_CMD1_SEND_OP_COND, /*MMC*/
\r
67 CARD_CMD2_ALL_SEND_CID,
\r
68 CARD_CMD3_SEND_RELATIVE_ADDR, /*SD*/
\r
69 CARD_CMD3_SET_RELATIVE_ADDR, /*MMC*/
\r
71 CARD_CMD6_SWITCH_FUNC,
\r
72 CARD_CMD7_SELECT_DESELECT_CARD,
\r
73 CARD_CMD8_SEND_IF_COND, /*SD*/
\r
75 CARD_CMD10_SEND_CID,
\r
76 CARD_CMD11_READ_DAT_UNTIL_STOP, /*MMC*/
\r
77 CARD_CMD11_READ_DAT_UNTIL_STOP_AUT12, /*MMC*/
\r
78 CARD_CMD12_STOP_TRANSMISSION, //It is auto performed by Host
\r
79 CARD_CMD13_SEND_STATUS,
\r
80 CARD_CMD15_GO_INACTIVE_STATE,
\r
81 CARD_CMD16_SET_BLOCKLEN,
\r
82 CARD_CMD17_READ_SINGLE_BLOCK,
\r
83 CARD_CMD18_READ_MULTIPLE_BLOCK,
\r
84 CARD_CMD18_READ_MULTIPLE_BLOCK_AUT12,
\r
85 CARD_CMD20_WRITE_DAT_UNTIL_STOP, /*MMC*/
\r
86 CARD_CMD20_WRITE_DAT_UNTIL_STOP_AUT12, /*MMC*/
\r
87 CARD_CMD23_SET_BLOCK_COUNT, /*MMC*/
\r
88 CARD_CMD24_WRITE_BLOCK,
\r
89 CARD_CMD25_WRITE_MULTIPLE_BLOCK,
\r
90 CARD_CMD25_WRITE_MULTIPLE_BLOCK_AUT12,
\r
92 CARD_CMD26_PROGRAM_CID, /*MMC*/
\r
93 CARD_CMD27_PROGRAM_CSD,
\r
94 CARD_CMD28_SET_WRITE_PROT,
\r
95 CARD_CMD29_CLR_WRITE_PROT,
\r
96 CARD_CMD30_SEND_WRITE_PROT, // ??
\r
98 CARD_CMD32_ERASE_WR_BLK_START, /*SD*/
\r
99 CARD_CMD33_ERASE_WR_BLK_END, /*SD*/
\r
101 CARD_CMD35_ERASE_GROUP_START, /*MMC*/
\r
102 CARD_CMD36_ERASE_GROUP_END, /*MMC*/
\r
106 CARD_CMD39_FAST_IO, /*MMC*/
\r
107 CARD_CMD40_GO_IRQ_STATE, /*MMC*/
\r
109 CARD_CMD42_LOCK_UNLOCK_SD, /*SD*/ // ??
\r
110 CARD_CMD42_LOCK_UNLOCK_MMC, /*MMC*/ // ??
\r
111 CARD_CMD55_APP_CMD,
\r
112 CARD_CMD56_GEN_CMD_SD, /*SD*/ //??
\r
113 CARD_CMD56_GEN_CMD_MMC, /*MMC*/ //??
\r
116 CARD_ACMD6_SET_BUS_WIDTH, /*SD*/
\r
117 CARD_ACMD13_SD_STATUS, /*SD*/
\r
118 CARD_ACMD22_SEND_NUM_WR_BLCOKS, /*SD*/
\r
119 CARD_ACMD23_SET_WR_BLK_ERASE_COUNT, /*SD*/
\r
120 CARD_ACMD41_SD_SEND_OP_COND, /*SD*/
\r
121 CARD_ACMD42_SET_CLR_CARD_DETECT, /*SD*/
\r
122 CARD_ACMD51_SEND_SCR, /*SD*/
\r
125 #if defined(SPRD_SUPPORT_MCEX)
\r
126 CARD_CMD34_READ_SEC_CMD,
\r
127 CARD_CMD35_WRITE_SEC_CMD,
\r
128 CARD_CMD36_SEND_PSI,
\r
129 CARD_CMD37_CTL_TRM,
\r
133 }SDIO_CARD_PAL_CMD_E;
\r
135 typedef struct CARD_DATA_PARAM_TAG
\r
137 unsigned char *databuf; // the buffer address ,that data will be stored in or read from
\r
138 unsigned int blkLen; // block size
\r
139 unsigned int blkNum; // block number
\r
145 SDIO_CARD_PAL_ERR_NONE = 0,
\r
146 SDIO_CARD_PAL_ERR_RSP = BIT_0,
\r
147 SDIO_CARD_PAL_ERR_CMD12 = BIT_1,
\r
148 SDIO_CARD_PAL_ERR_CUR_LIMIT = BIT_2,
\r
149 SDIO_CARD_PAL_ERR_DATA_END = BIT_3,
\r
150 SDIO_CARD_PAL_ERR_DATA_CRC = BIT_4,
\r
151 SDIO_CARD_PAL_ERR_DATA_TIMEOUT = BIT_5,
\r
152 SDIO_CARD_PAL_ERR_CMD_INDEX = BIT_6,
\r
153 SDIO_CARD_PAL_ERR_CMD_END = BIT_7,
\r
154 SDIO_CARD_PAL_ERR_CMD_CRC = BIT_8,
\r
155 SDIO_CARD_PAL_ERR_CMD_TIMEOUT = BIT_9
\r
156 }SDIO_CARD_PAL_ERROR_E;
\r
161 // cmdindex,rsp,transmode
\r
162 SDIO_CMD3_SEND_RELATIVE_ADDR,
\r
163 SDIO_CMD5_SEND_OP_COND,
\r
164 SDIO_CMD7_SELECT_DESELECT_CARD,
\r
165 SDIO_CMD52_IO_RW_DIRECT,
\r
166 //SDIO_CMD52_IO_RW_DIRECT_ABORT,
\r
167 //SDIO_CMD52_READ_BLOCKS_SUSPEND,
\r
168 //SDIO_CMD52_READ_BLOCKS_RESUME,
\r
169 //SDIO_CMD52_WRITE_BLOCKS_SUSPEND,
\r
170 //SDIO_CMD52_WRITE_BLOCKS_RESUME,
\r
171 SDIO_CMD53_READ_BYTES,
\r
172 SDIO_CMD53_READ_BLOCKS,
\r
173 //SDIO_CMD53_READ_BLOCKS_NO_TRANS_COMP,
\r
174 //SDIO_CMD53_READ_BLOCKS_RESUME,
\r
175 //SDIO_CMD53_READ_BLOCKS_INFINITE,
\r
176 SDIO_CMD53_WRITE_BYTES,
\r
177 SDIO_CMD53_WRITE_BLOCKS,
\r
178 //SDIO_CMD53_WRITE_BLOCKS_NO_TRANS_COMP,
\r
179 //SDIO_CMD53_WRITE_BLOCKS_RESUME,
\r
180 //SDIO_CMD53_WRITE_BLOCKS_INFINITE,
\r
182 }SDIO_MASTER_PAL_CMD_E;
\r
184 SDIO_CARD_PAL_ERROR_E SPRD_SDSlave_Pal_SendCmd(
\r
185 /*IN*/SDIO_CARD_PAL_HANDLE handle,
\r
186 /*IN*/SDIO_MASTER_PAL_CMD_E cmd,
\r
187 /*IN*/unsigned int argument,
\r
188 /*IN*/CARD_DATA_PARAM_T* dataParam,
\r
189 /*OUT*/unsigned char* rspBuf
\r
191 void SPRD_SDSlave_Pal_Close(SDIO_CARD_PAL_HANDLE handle);
\r
193 typedef enum CARD_VERTION_E_TAG{
\r
196 CARD_SD_V2_0_STANDARD,
\r
197 CARD_SD_V2_0_HIGHCAP,
\r
201 typedef struct CARD_PORT_TAG{
\r
204 SDIO_CARD_PAL_HANDLE sdioPalHd;
\r
206 CARD_VERTION_E vertion;
\r
207 unsigned short RCA;
\r
208 SDIO_CARD_PAL_BUFWIDTH_E bus_width;
\r
210 unsigned int ClockRate;
\r
211 unsigned int BlockLen[2];
\r
213 unsigned int Nac_Max;
\r
214 unsigned int GrpSize;
\r
215 unsigned int Capacity;
\r
217 unsigned short CCC;
\r
219 int ifSupportHighSpeed;
\r
222 int ifEnterHighSpeed;
\r
224 typedef struct CARD_PORT_TAG* CARD_SDIO_HANDLE;
\r