]> git.proxmox.com Git - mirror_edk2.git/blob - QuarkSocPkg/QuarkSouthCluster/Include/MMC.h
QuarkSocPkg: Add new package for Quark SoC X1000
[mirror_edk2.git] / QuarkSocPkg / QuarkSouthCluster / Include / MMC.h
1 /** @file
2
3 Header file for Industry MMC 4.2 spec.
4
5 Copyright (c) 2013-2015 Intel Corporation.
6
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17 #ifndef _MMC_H
18 #define _MMC_H
19
20 #pragma pack(1)
21 //
22 //Command definition
23 //
24
25 #define CMD0 0
26 #define CMD1 1
27 #define CMD2 2
28 #define CMD3 3
29 #define CMD4 4
30 #define CMD6 6
31 #define CMD7 7
32 #define CMD8 8
33 #define CMD9 9
34 #define CMD10 10
35 #define CMD11 11
36 #define CMD12 12
37 #define CMD13 13
38 #define CMD14 14
39 #define CMD15 15
40 #define CMD16 16
41 #define CMD17 17
42 #define CMD18 18
43 #define CMD19 19
44 #define CMD20 20
45 #define CMD23 23
46 #define CMD24 24
47 #define CMD25 25
48 #define CMD26 26
49 #define CMD27 27
50 #define CMD28 28
51 #define CMD29 29
52 #define CMD30 30
53 #define CMD35 35
54 #define CMD36 36
55 #define CMD38 38
56 #define CMD39 39
57 #define CMD40 40
58 #define CMD42 42
59 #define CMD55 55
60 #define CMD56 56
61
62
63
64 #define GO_IDLE_STATE CMD0
65 #define SEND_OP_COND CMD1
66 #define ALL_SEND_CID CMD2
67 #define SET_RELATIVE_ADDR CMD3
68 #define SET_DSR CMD4
69 #define SWITCH CMD6
70 #define SELECT_DESELECT_CARD CMD7
71 #define SEND_EXT_CSD CMD8
72 #define SEND_CSD CMD9
73 #define SEND_CID CMD10
74 #define READ_DAT_UNTIL_STOP CMD11
75 #define STOP_TRANSMISSION CMD12
76 #define SEND_STATUS CMD13
77 #define BUSTEST_R CMD14
78 #define GO_INACTIVE_STATE CMD15
79 #define SET_BLOCKLEN CMD16
80 #define READ_SINGLE_BLOCK CMD17
81 #define READ_MULTIPLE_BLOCK CMD18
82 #define BUSTEST_W CMD19
83 #define WRITE_DAT_UNTIL_STOP CMD20
84 #define SET_BLOCK_COUNT CMD23
85 #define WRITE_BLOCK CMD24
86 #define WRITE_MULTIPLE_BLOCK CMD25
87 #define PROGRAM_CID CMD26
88 #define PROGRAM_CSD CMD27
89 #define SET_WRITE_PROT CMD28
90 #define CLR_WRITE_PROT CMD29
91 #define SEND_WRITE_PROT CMD30
92 #define ERASE_GROUP_START CMD35
93 #define ERASE_GROUP_END CMD36
94 #define ERASE CMD38
95 #define FAST_IO CMD39
96 #define GO_IRQ_STATE CMD40
97 #define LOCK_UNLOCK CMD42
98 #define APP_CMD CMD55
99 #define GEN_CMD CMD56
100
101
102 #define CMD_INDEX_MASK 0x3F
103 #define AUTO_CMD12_ENABLE BIT6
104 #define AUTO_CMD23_ENABLE BIT7
105
106 #define FREQUENCY_OD (400 * 1000)
107 #define FREQUENCY_MMC_PP (26 * 1000 * 1000)
108 #define FREQUENCY_MMC_PP_HIGH (52 * 1000 * 1000)
109
110 #define DEFAULT_DSR_VALUE 0x404
111
112 //
113 //Registers definition
114 //
115
116 typedef struct {
117 UINT32 Reserved0: 7; // 0
118 UINT32 V170_V195: 1; // 1.70V - 1.95V
119 UINT32 V200_V260: 7; // 2.00V - 2.60V
120 UINT32 V270_V360: 9; // 2.70V - 3.60V
121 UINT32 Reserved1: 5; // 0
122 UINT32 AccessMode: 2; // 00b (byte mode), 10b (sector mode)
123 UINT32 Busy: 1; // This bit is set to LOW if the card has not finished the power up routine
124 }OCR;
125
126
127 typedef struct {
128 UINT8 NotUsed: 1; // 1
129 UINT8 CRC: 7; // CRC7 checksum
130 UINT8 MDT; // Manufacturing date
131 UINT32 PSN; // Product serial number
132 UINT8 PRV; // Product revision
133 UINT8 PNM[6]; // Product name
134 UINT16 OID; // OEM/Application ID
135 UINT8 MID; // Manufacturer ID
136 }CID;
137
138
139 typedef struct {
140 UINT8 NotUsed: 1; // 1 [0:0]
141 UINT8 CRC: 7; // CRC [7:1]
142 UINT8 ECC: 2; // ECC code [9:8]
143 UINT8 FILE_FORMAT: 2; // File format [11:10]
144 UINT8 TMP_WRITE_PROTECT: 1; // Temporary write protection [12:12]
145 UINT8 PERM_WRITE_PROTECT: 1; // Permanent write protection [13:13]
146 UINT8 COPY: 1; // Copy flag (OTP) [14:14]
147 UINT8 FILE_FORMAT_GRP: 1; // File format group [15:15]
148 UINT16 CONTENT_PROT_APP: 1; // Content protection application [16:16]
149 UINT16 Reserved0: 4; // 0 [20:17]
150 UINT16 WRITE_BL_PARTIAL: 1; // Partial blocks for write allowed [21:21]
151 UINT16 WRITE_BL_LEN: 4; // Max. write data block length [25:22]
152 UINT16 R2W_FACTOR: 3; // Write speed factor [28:26]
153 UINT16 DEFAULT_ECC: 2; // Manufacturer default ECC [30:29]
154 UINT16 WP_GRP_ENABLE: 1; // Write protect group enable [31:31]
155 UINT32 WP_GRP_SIZE: 5; // Write protect group size [36:32]
156 UINT32 ERASE_GRP_MULT: 5; // Erase group size multiplier [41:37]
157 UINT32 ERASE_GRP_SIZE: 5; // Erase group size [46:42]
158 UINT32 C_SIZE_MULT: 3; // Device size multiplier [49:47]
159 UINT32 VDD_W_CURR_MAX: 3; // Max. write current @ VDD max [52:50]
160 UINT32 VDD_W_CURR_MIN: 3; // Max. write current @ VDD min [55:53]
161 UINT32 VDD_R_CURR_MAX: 3; // Max. read current @ VDD max [58:56]
162 UINT32 VDD_R_CURR_MIN: 3; // Max. read current @ VDD min [61:59]
163 UINT32 C_SIZELow2: 2;// Device size [73:62]
164 UINT32 C_SIZEHigh10: 10;// Device size [73:62]
165 UINT32 Reserved1: 2; // 0 [75:74]
166 UINT32 DSR_IMP: 1; // DSR implemented [76:76]
167 UINT32 READ_BLK_MISALIGN: 1; // Read block misalignment [77:77]
168 UINT32 WRITE_BLK_MISALIGN: 1; // Write block misalignment [78:78]
169 UINT32 READ_BL_PARTIAL: 1; // Partial blocks for read allowed [79:79]
170 UINT32 READ_BL_LEN: 4; // Max. read data block length [83:80]
171 UINT32 CCC: 12;// Card command classes [95:84]
172 UINT8 TRAN_SPEED ; // Max. bus clock frequency [103:96]
173 UINT8 NSAC ; // Data read access-time 2 in CLK cycles (NSAC*100) [111:104]
174 UINT8 TAAC ; // Data read access-time 1 [119:112]
175 UINT8 Reserved2: 2; // 0 [121:120]
176 UINT8 SPEC_VERS: 4; // System specification version [125:122]
177 UINT8 CSD_STRUCTURE: 2; // CSD structure [127:126]
178 }CSD;
179
180 typedef struct {
181 UINT8 Reserved0[181]; // 0 [0:180]
182 UINT8 ERASED_MEM_CONT; // Erased Memory Content [181]
183 UINT8 Reserved2; // Erased Memory Content [182]
184 UINT8 BUS_WIDTH; // Bus Width Mode [183]
185 UINT8 Reserved3; // 0 [184]
186 UINT8 HS_TIMING; // High Speed Interface Timing [185]
187 UINT8 Reserved4; // 0 [186]
188 UINT8 POWER_CLASS; // Power Class [187]
189 UINT8 Reserved5; // 0 [188]
190 UINT8 CMD_SET_REV; // Command Set Revision [189]
191 UINT8 Reserved6; // 0 [190]
192 UINT8 CMD_SET; // Command Set [191]
193 UINT8 EXT_CSD_REV; // Extended CSD Revision [192]
194 UINT8 Reserved7; // 0 [193]
195 UINT8 CSD_STRUCTURE; // CSD Structure Version [194]
196 UINT8 Reserved8; // 0 [195]
197 UINT8 CARD_TYPE; // Card Type [196]
198 UINT8 Reserved9[3]; // 0 [199:197]
199 UINT8 PWR_CL_52_195; // Power Class for 52MHz @ 1.95V [200]
200 UINT8 PWR_CL_26_195; // Power Class for 26MHz @ 1.95V [201]
201 UINT8 PWR_CL_52_360; // Power Class for 52MHz @ 3.6V [202]
202 UINT8 PWR_CL_26_360; // Power Class for 26MHz @ 3.6V [203]
203 UINT8 Reserved10; // 0 [204]
204 UINT8 MIN_PERF_R_4_26; // Minimum Read Performance for 4bit @26MHz [205]
205 UINT8 MIN_PERF_W_4_26; // Minimum Write Performance for 4bit @26MHz [206]
206 UINT8 MIN_PERF_R_8_26_4_52; // Minimum Read Performance for 8bit @26MHz/4bit @52MHz [207]
207 UINT8 MIN_PERF_W_8_26_4_52; // Minimum Write Performance for 8bit @26MHz/4bit @52MHz [208]
208 UINT8 MIN_PERF_R_8_52; // Minimum Read Performance for 8bit @52MHz [209]
209 UINT8 MIN_PERF_W_8_52; // Minimum Write Performance for 8bit @52MHz [210]
210 UINT8 Reserved11; // 0 [211]
211 UINT8 SEC_COUNT[4]; // Sector Count [215:212]
212 UINT8 Reserved12[288]; // 0 [503:216]
213 UINT8 S_CMD_SET; // Sector Count [504]
214 UINT8 Reserved13[7]; // Sector Count [511:505]
215 }EXT_CSD;
216
217
218 //
219 //Card Status definition
220 //
221 typedef struct {
222 UINT32 Reserved0: 2; //Reserved for Manufacturer Test Mode
223 UINT32 Reserved1: 2; //Reserved for Application Specific commands
224 UINT32 Reserved2: 1; //
225 UINT32 SAPP_CMD: 1; //
226 UINT32 Reserved3: 1; //Reserved
227 UINT32 SWITCH_ERROR: 1; //
228 UINT32 READY_FOR_DATA: 1; //
229 UINT32 CURRENT_STATE: 4; //
230 UINT32 ERASE_RESET: 1; //
231 UINT32 Reserved4: 1; //Reserved
232 UINT32 WP_ERASE_SKIP: 1; //
233 UINT32 CID_CSD_OVERWRITE: 1; //
234 UINT32 OVERRUN: 1; //
235 UINT32 UNDERRUN: 1; //
236 UINT32 ERROR: 1; //
237 UINT32 CC_ERROR: 1; //
238 UINT32 CARD_ECC_FAILED: 1; //
239 UINT32 ILLEGAL_COMMAND: 1; //
240 UINT32 COM_CRC_ERROR: 1; //
241 UINT32 LOCK_UNLOCK_FAILED: 1; //
242 UINT32 CARD_IS_LOCKED: 1; //
243 UINT32 WP_VIOLATION: 1; //
244 UINT32 ERASE_PARAM: 1; //
245 UINT32 ERASE_SEQ_ERROR: 1; //
246 UINT32 BLOCK_LEN_ERROR: 1; //
247 UINT32 ADDRESS_MISALIGN: 1; //
248 UINT32 ADDRESS_OUT_OF_RANGE:1; //
249 }CARD_STATUS;
250
251 typedef struct {
252 UINT32 CmdSet: 3;
253 UINT32 Reserved0: 5;
254 UINT32 Value: 8;
255 UINT32 Index: 8;
256 UINT32 Access: 2;
257 UINT32 Reserved1: 6;
258 }SWITCH_ARGUMENT;
259
260 #define CommandSet_Mode 0
261 #define SetBits_Mode 1
262 #define ClearBits_Mode 2
263 #define WriteByte_Mode 3
264
265
266 #define Idle_STATE 0
267 #define Ready_STATE 1
268 #define Ident_STATE 2
269 #define Stby_STATE 3
270 #define Tran_STATE 4
271 #define Data_STATE 5
272 #define Rcv_STATE 6
273 #define Prg_STATE 7
274 #define Dis_STATE 8
275 #define Btst_STATE 9
276
277
278
279 #pragma pack()
280 #endif