1 /*********************************************************************
\r
2 ** File Name: sdio_pal.h
\r
3 ** Author: yanping.xie
\r
5 ** Copyright: 2004 Spreadtrum, Incoporated. All Rights Reserved.
\r
6 ** Description: This file describe operation of sdio host.
\r
7 *********************************************************************
\r
9 *********************************************************************
\r
11 ** ------------------------------------------------------------------------- **
\r
12 ** DATE NAME DESCRIPTION
\r
13 ** 09/05/2013 ypxie Create.
\r
14 ********************************************************************/
\r
15 #ifndef __SDIO_CORE_H_
\r
16 #define __SDIO_CORE_H_
\r
18 typedef enum sdio_slot_e_tag
\r
20 SDIO_SLOT_0 = 0, /* SDIO0 : S1 */
\r
21 SDIO_SLOT_1 = 1, /* SDIO0 : S2 */
\r
22 SDIO_SLOT_2 = 2, /* SDIO0 : SLAVE */
\r
23 SDIO_SLOT_3 = 3, /* SDIO1 : S1 */
\r
24 SDIO_SLOT_4 = 4, /* SDIO1 : S2 */
\r
25 SDIO_SLOT_5 = 5, /* SDIO1 : SLAVEv */
\r
26 SDIO_SLOT_6 = 6, /* SDIO2 : S1 */
\r
27 SDIO_SLOT_7 = 7, /* SDIO2 : S2 */
\r
28 SDIO_SLOT_8 = 8, /* SDIO2 : SLAVE */
\r
29 SDIO_SLOT_9 = 9, /* SDIO3 : S1 (emmc)*/
\r
30 SDIO_SLOT_10 = 10, /* SDIO3 : S2 */
\r
31 SDIO_SLOT_11 = 11, /* SDIO3 : SLAVE */
\r
35 typedef enum sdio_volt_e_tag
\r
47 typedef enum sdio_type_e_tag
\r
51 SDIO_TYPE_MASTER = 2,
\r
56 /* used for sd clock */
\r
57 #define SDIO_CLK_400K 400000
\r
58 #define SDIO_CLK_13M 13000000
\r
59 #define SDIO_CLK_26M 26000000
\r
60 #define SDIO_CLK_52M 52000000
\r
61 #define SDIO_CLK_104M 104000000
\r
62 #define SDIO_CLK_200M 200000000
\r
65 typedef enum sdio_pal_cmd_tag
\r
67 // cmdindex,rsp,transmode , MS:master & slave
\r
68 CMD0_GO_IDLE_STATE, /* MMC, SD, MS */
\r
69 CMD1_SEND_OP_COND, /* MMC */
\r
70 CMD2_ALL_SEND_CID, /* MMC, SD */
\r
71 CMD3_SET_RELATIVE_ADDR_SD, /* SD */
\r
72 CMD3_SET_RELATIVE_ADDR, /* MMC */
\r
74 CMD5_SLEEP_AWAKE, /* MMC, MS */
\r
75 CMD6_SWITCH, /* MMC */
\r
76 CMD7_SELECT_CARD_SD, /* MMC, SD, MS */
\r
77 CMD7_SELECT_CARD, /* MMC */
\r
78 CMD8_SEND_IF_COND_SD, /* SD */
\r
79 CMD8_SEND_IF_COND, /* MMC */
\r
80 CMD9_SEND_CSD, /* MMC, SD */
\r
81 CMD10_SEND_CID, /* MMC, SD */
\r
82 CMD11_READ_DAT_UNTIL_STOP, /* SD */
\r
83 CMD11_READ_DAT_UNTIL_STOP_AUT12, /* SD */
\r
84 CMD12_STOP_TRANSMISSION, /* MMC, SD */
\r
85 CMD13_SEND_STATUS, /* MMC, SD */
\r
86 CMD14_BUS_TEST_R, /* MMC */
\r
87 CMD15_GO_INACTIVE_STATE,
\r
88 CMD16_SET_BLOCKLEN, /* MMC, SD */
\r
89 CMD17_READ_SINGLE_BLOCK, /* MMC, SD */
\r
90 CMD18_READ_MULTIPLE_BLOCK, /* MMC, SD */
\r
91 CMD18_READ_MULTIPLE_BLOCK_AUT12, /* MMC, SD */
\r
92 CMD19_SEND_TUNING_BLOCK, /* MMC, SD */
\r
93 CMD20_WRITE_DAT_UNTIL_STOP, /* SD */
\r
94 CMD20_WRITE_DAT_UNTIL_STOP_AUT12, /* SD */
\r
95 CMD21_SEND_TUNING_BLOCK_HS200, /* MMC */
\r
96 CMD23_SET_BLOCK_COUNT, /* MMC, SD */
\r
97 CMD24_WRITE_BLOCK, /* MMC, SD */
\r
98 CMD25_WRITE_MULTIPLE_BLOCK, /* MMC, SD */
\r
99 CMD25_WRITE_MULTIPLE_BLOCK_AUT12, /* MMC, SD */
\r
100 CMD26_PROGRAM_CID, /* MMC */
\r
101 CMD27_PROGRAM_CSD, /* MMC, SD */
\r
102 CMD28_SET_WRITE_PROT, /* MMC, SD */
\r
103 CMD29_CLR_WRITE_PROT, /* MMC, SD */
\r
104 CMD30_SEND_WRITE_PROT, /* MMC, SD */
\r
105 CMD31_SEND_WRITE_PROT_TYPE, /* MMC */
\r
106 CMD32_ERASE_WR_BLK_START, /* SD */
\r
107 CMD33_ERASE_WR_BLK_END, /* SD */
\r
108 CMD35_ERASE_GROUP_START, /* MMC */
\r
109 CMD36_ERASE_GROUP_END, /* MMC */
\r
110 CMD38_ERASE, /* MMC, SD */
\r
111 CMD39_FAST_IO, /* MMC */
\r
112 CMD40_GO_IRQ_STATE, /* MMC */
\r
113 CMD42_LOCK_UNLOCK_SD, /* SD */
\r
114 CMD42_LOCK_UNLOCK_MMC, /* MMC */
\r
115 CMD55_APP_CMD, /* MMC, SD */
\r
116 CMD56_GEN_CMD_SD, /* SD */
\r
117 CMD56_GEN_CMD_MMC, /* MMC */
\r
118 ACMD6_SET_BUS_WIDTH, /* SD */
\r
119 ACMD13_SD_STATUS, /* SD */
\r
120 ACMD22_SEND_NUM_WR_BLCOKS, /* SD */
\r
121 ACMD23_SET_WR_BLK_ERASE_COUNT, /* SD */
\r
122 ACMD41_SD_SEND_OP_COND, /* SD */
\r
123 ACMD42_SET_CLR_CARD_DETECT, /* SD */
\r
124 ACMD51_SEND_SCR, /* SD */
\r
127 CMD52_IO_RW_DIRECT, /* MS */
\r
128 CMD53_READ_BYTES, /* MS */
\r
129 CMD53_READ_BLOCKS, /* MS */
\r
130 CMD53_WRITE_BYTES, /* MS */
\r
131 CMD53_WRITE_BLOCKS, /* MS */
\r
136 //typedef void (*sdio_call_back)(uint32 msg, uint32 slot_no);
\r
138 typedef struct sdio_pal_handle_t_tag
\r
140 volatile sdio_reg_ptr host_cfg; /* base address */
\r
141 uint32 slot_no; /* slot no */
\r
142 sdio_type_e sdio_type; /* sdio type */
\r
143 uint32 sdio_version; /* sdio version */
\r
145 // sdio_call_back sig_call_back;
\r
146 volatile uint32 card_event;
147 // volatile uint32 card_err_code;
\r
149 uint32 base_clock; /* base clock */
\r
150 uint32 sd_clock; /* used clock */
\r
151 sdio_speedmode_e spd_mode;
\r
152 sdio_buswidth_e bus_width; /* bus width */
\r
154 uint16 rca; /* card RCA */
\r
155 uint32 block_len; /* block length */
\r
156 } sdio_pal_t, *sdio_pal_ptr;
\r
162 SDIO_DMA_BIDIRECTIONAL
165 typedef struct sdio_data_param_t_tag
\r
170 sdio_dma_dir_e direction;
\r
171 } sdio_data_param_t;
\r
173 typedef enum sdio_pal_err_e_tag
\r
176 ERR_CMD_TIMEOUT = BIT_0,
\r
177 ERR_CMD_CRC = BIT_1,
\r
178 ERR_CMD_END_BIT = BIT_2,
\r
179 ERR_CMD_INDEX = BIT_3,
\r
180 ERR_DATA_TIMEOUT = BIT_4,
\r
181 ERR_DATA_CRC = BIT_5,
\r
182 ERR_DATA_END_BIT = BIT_6,
\r
183 ERR_CUR_LIMIT = BIT_7,
\r
184 ERR_AUTO_CMD12 = BIT_8,
\r
185 ERR_TRGT_RSP = BIT_9,
\r
186 ERR_BAD_PARAM = BIT_10 /* software error */
\r
189 #endif /* __SDIO_CORE_H_ */