]> git.proxmox.com Git - mirror_edk2.git/blame - QuarkSocPkg/QuarkSouthCluster/Include/SDCard.h
QuarkSocPkg: Add new package for Quark SoC X1000
[mirror_edk2.git] / QuarkSocPkg / QuarkSouthCluster / Include / SDCard.h
CommitLineData
9b6bbcdb
MK
1/** @file\r
2\r
3Header file for Industry SD Card 2.0 spec.\r
4\r
5Copyright (c) 2013-2015 Intel Corporation.\r
6\r
7This program and the accompanying materials\r
8are licensed and made available under the terms and conditions of the BSD License\r
9which accompanies this distribution. The full text of the license may be found at\r
10http://opensource.org/licenses/bsd-license.php\r
11\r
12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14\r
15**/\r
16\r
17#ifndef _SD_CARD_H\r
18#define _SD_CARD_H\r
19\r
20#include "MMC.h"\r
21\r
22#pragma pack(1)\r
23\r
24#define CHECK_PATTERN 0xAA ///< Physical Layer Simplified Specification Version 3.01 recommended 0xAA\r
25\r
26#define ACMD6 6\r
27#define ACMD13 13\r
28#define ACMD23 23\r
29#define ACMD41 41\r
30#define ACMD42 42\r
31#define ACMD51 51\r
32\r
33\r
34#define SWITCH_FUNC CMD6\r
35#define SEND_IF_COND CMD8\r
36\r
37\r
38#define SET_BUS_WIDTH ACMD6\r
39#define SD_STATUS ACMD13\r
40#define SET_WR_BLK_ERASE_COUNT ACMD23\r
41#define SD_SEND_OP_COND ACMD41\r
42#define SET_CLR_CARD_DETECT ACMD42\r
43#define SEND_SCR ACMD51\r
44\r
45\r
46\r
47#define SD_BUS_WIDTH_1 0\r
48#define SD_BUS_WIDTH_4 2\r
49\r
50\r
51\r
52#define FREQUENCY_SD_PP (25 * 1000 * 1000)\r
53#define FREQUENCY_SD_PP_HIGH (50 * 1000 * 1000)\r
54\r
55\r
56#define SD_SPEC_10 0\r
57#define SD_SPEC_11 1\r
58#define SD_SPEC_20 2\r
59\r
60\r
61#define VOLTAGE_27_36 0x1\r
62\r
63typedef struct {\r
64 UINT8 NotUsed: 1; // 1 [0:0]\r
65 UINT8 CRC: 7; // CRC [7:1]\r
66 UINT8 ECC: 2; // ECC code [9:8]\r
67 UINT8 FILE_FORMAT: 2; // File format [11:10]\r
68 UINT8 TMP_WRITE_PROTECT: 1; // Temporary write protection [12:12]\r
69 UINT8 PERM_WRITE_PROTECT: 1; // Permanent write protection [13:13]\r
70 UINT8 COPY: 1; // Copy flag (OTP) [14:14]\r
71 UINT8 FILE_FORMAT_GRP: 1; // File format group [15:15]\r
72 UINT16 Reserved0: 5; // 0 [20:16]\r
73 UINT16 WRITE_BL_PARTIAL: 1; // Partial blocks for write allowed [21:21]\r
74 UINT16 WRITE_BL_LEN: 4; // Max. write data block length [25:22]\r
75 UINT16 R2W_FACTOR: 3; // Write speed factor [28:26]\r
76 UINT16 DEFAULT_ECC: 2; // Manufacturer default ECC [30:29]\r
77 UINT16 WP_GRP_ENABLE: 1; // Write protect group enable [31:31]\r
78 UINT16 WP_GRP_SIZE: 7; // Write protect group size [38:32]\r
79 UINT16 SECTOR_SIZE: 7; // Erase sector size [45:39]\r
80 UINT16 ERASE_BLK_EN: 1; // Erase single block enable [46:46]\r
81 UINT16 Reserved1: 1; // 0 [47:47]\r
82\r
83 UINT32 C_SIZE: 22; // Device size [69:48]\r
84 UINT32 Reserved2: 6; // 0 [75:70]\r
85 UINT32 DSR_IMP: 1; // DSR implemented [76:76]\r
86 UINT32 READ_BLK_MISALIGN: 1; // Read block misalignment [77:77]\r
87 UINT32 WRITE_BLK_MISALIGN: 1; // Write block misalignment [78:78]\r
88 UINT32 READ_BL_PARTIAL: 1; // Partial blocks for read allowed [79:79]\r
89\r
90 UINT16 READ_BL_LEN: 4; // Max. read data block length [83:80]\r
91 UINT16 CCC: 12; // Card command classes [95:84]\r
92 UINT8 TRAN_SPEED ; // Max. bus clock frequency [103:96]\r
93 UINT8 NSAC ; // Data read access-time 2 in CLK cycles (NSAC*100) [111:104]\r
94 UINT8 TAAC ; // Data read access-time 1 [119:112]\r
95 UINT8 Reserved3: 6; // 0 [125:120]\r
96 UINT8 CSD_STRUCTURE: 2; // CSD structure [127:126]\r
97}CSD_SDV2;\r
98\r
99typedef struct {\r
100 UINT32 Reserved0;\r
101 UINT32 Reserved1: 16;\r
102 UINT32 SD_BUS_WIDTH: 4;\r
103 UINT32 SD_SECURITY: 3;\r
104 UINT32 DATA_STAT_AFTER_ERASE: 1;\r
105 UINT32 SD_SPEC: 4;\r
106 UINT32 SCR_STRUCT: 4;\r
107}SCR;\r
108\r
109\r
110typedef struct {\r
111 UINT8 Reserved0[50];\r
112 UINT8 ERASE_OFFSET: 2;\r
113 UINT8 ERASE_TIMEOUT: 6;\r
114 UINT16 ERASE_SIZE;\r
115 UINT8 Reserved1: 4;\r
116 UINT8 AU_SIZE: 4;\r
117 UINT8 PERFORMANCE_MOVE;\r
118 UINT8 SPEED_CLASS;\r
119 UINT32 SIZE_OF_PROTECTED_AREA;\r
120 UINT32 SD_CARD_TYPE: 16;\r
121 UINT32 Reserved2: 13;\r
122 UINT32 SECURED_MODE: 1;\r
123 UINT32 DAT_BUS_WIDTH: 2;\r
124}SD_STATUS_REG;\r
125\r
126\r
127\r
128typedef struct {\r
129 UINT8 Reserved0[34];\r
130 UINT16 Group1BusyStatus;\r
131 UINT16 Group2BusyStatus;\r
132 UINT16 Group3BusyStatus;\r
133 UINT16 Group4BusyStatus;\r
134 UINT16 Group5BusyStatus;\r
135 UINT16 Group6BusyStatus;\r
136 UINT8 DataStructureVersion;\r
137 UINT8 Group21Status;\r
138 UINT8 Group43Status;\r
139 UINT8 Group65Status;\r
140 UINT16 Group1Function;\r
141 UINT16 Group2Function;\r
142 UINT16 Group3Function;\r
143 UINT16 Group4Function;\r
144 UINT16 Group5Function;\r
145 UINT16 Group6Function;\r
146 UINT16 MaxCurrent;\r
147}SWITCH_STATUS;\r
148\r
149\r
150#pragma pack()\r
151#endif\r
152\r