tizen 2.4 release
[kernel/u-boot-tm1.git] / drivers / sdio / sdio_card_pal.h
1 \r
2 \r
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
8 \r
9 typedef struct SDIO_CARD_PAL_Struct{\r
10     int flag;\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
16 \r
17 \r
18 \r
19 typedef enum\r
20 {\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
27 \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
30 \r
31 typedef enum\r
32 {\r
33         SDIO_CARD_PAL_OFF,\r
34         SDIO_CARD_PAL_ON\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
37 \r
38 typedef enum\r
39 {\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
46 \r
47 typedef enum\r
48 {\r
49         SDIO_CARD_PAL_1_BIT,\r
50         SDIO_CARD_PAL_4_BIT,\r
51         SDIO_CARD_PAL_8_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
54 \r
55 typedef enum\r
56 {\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
61 \r
62 typedef enum\r
63 {\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
70         CARD_CMD4_SET_DSR,\r
71         CARD_CMD6_SWITCH_FUNC,\r
72         CARD_CMD7_SELECT_DESELECT_CARD,\r
73         CARD_CMD8_SEND_IF_COND, /*SD*/\r
74         CARD_CMD9_SEND_CSD,\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
91 \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
97 \r
98         CARD_CMD32_ERASE_WR_BLK_START, /*SD*/\r
99         CARD_CMD33_ERASE_WR_BLK_END, /*SD*/\r
100 \r
101         CARD_CMD35_ERASE_GROUP_START, /*MMC*/\r
102         CARD_CMD36_ERASE_GROUP_END, /*MMC*/\r
103 \r
104         CARD_CMD38_ERASE,\r
105 \r
106         CARD_CMD39_FAST_IO, /*MMC*/\r
107         CARD_CMD40_GO_IRQ_STATE, /*MMC*/\r
108 \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
114 \r
115 \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
123 \r
124 \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
130 #endif\r
131 \r
132         CARD_CMDMAX\r
133 }SDIO_CARD_PAL_CMD_E;\r
134 \r
135 typedef struct CARD_DATA_PARAM_TAG\r
136 {\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
140 }\r
141 CARD_DATA_PARAM_T;\r
142 \r
143 typedef enum\r
144 {\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
157 \r
158 \r
159 typedef enum\r
160 {\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
181     SDIO_CMDMAX\r
182 }SDIO_MASTER_PAL_CMD_E;\r
183 \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
190 );\r
191 void SPRD_SDSlave_Pal_Close(SDIO_CARD_PAL_HANDLE handle);\r
192 \r
193 typedef enum CARD_VERTION_E_TAG{\r
194         CARD_V_UNKONWN,\r
195         CARD_SD_V1_X,\r
196         CARD_SD_V2_0_STANDARD,\r
197         CARD_SD_V2_0_HIGHCAP,\r
198         CARD_MMC_331\r
199 }CARD_VERTION_E;\r
200 \r
201 typedef struct CARD_PORT_TAG{\r
202         int open_flag;\r
203 \r
204         SDIO_CARD_PAL_HANDLE sdioPalHd;\r
205 \r
206         CARD_VERTION_E vertion;\r
207         unsigned short RCA;\r
208         SDIO_CARD_PAL_BUFWIDTH_E bus_width;\r
209 \r
210         unsigned int ClockRate;\r
211         unsigned int BlockLen[2];\r
212 \r
213         unsigned int Nac_Max;\r
214         unsigned int GrpSize;\r
215         unsigned int Capacity;\r
216 \r
217         unsigned short  CCC;\r
218         int ifSupportEC;\r
219         int ifSupportHighSpeed;\r
220 \r
221         int ifEnterEC;\r
222         int ifEnterHighSpeed;\r
223 }CARD_PORT_T;\r
224 typedef struct CARD_PORT_TAG* CARD_SDIO_HANDLE;\r
225 #endif\r
226 \r
227 \r
228 \r