]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/IndustryStandard/Sd.h
MdePkg: TpmPtp: Add CapCRBIdleBypass definition
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Sd.h
CommitLineData
627373d7
FT
1/** @file\r
2 Header file for SD memory card support.\r
3\r
4 This header file contains some definitions defined in SD Physical Layer Simplified\r
5 Specification Version 4.10 spec.\r
6\r
7 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
8 This program and the accompanying materials\r
9 are licensed and made available under the terms and conditions of the BSD License\r
10 which accompanies this distribution. The full text of the license may be found at\r
11 http://opensource.org/licenses/bsd-license.php\r
12\r
13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
15\r
16**/\r
17\r
18#ifndef __SD_H__\r
19#define __SD_H__\r
20\r
21//\r
22// SD command index\r
23//\r
24#define SD_GO_IDLE_STATE 0\r
25#define SD_ALL_SEND_CID 2\r
26#define SD_SET_RELATIVE_ADDR 3\r
27#define SD_SET_DSR 4\r
28#define SDIO_SEND_OP_COND 5\r
29#define SD_SWITCH_FUNC 6\r
30#define SD_SELECT_DESELECT_CARD 7\r
31#define SD_SEND_IF_COND 8\r
32#define SD_SEND_CSD 9\r
33#define SD_SEND_CID 10\r
34#define SD_VOLTAGE_SWITCH 11\r
35#define SD_STOP_TRANSMISSION 12\r
36#define SD_SEND_STATUS 13\r
37#define SD_GO_INACTIVE_STATE 15\r
38#define SD_SET_BLOCKLEN 16\r
39#define SD_READ_SINGLE_BLOCK 17\r
40#define SD_READ_MULTIPLE_BLOCK 18\r
41#define SD_SEND_TUNING_BLOCK 19\r
42#define SD_SPEED_CLASS_CONTROL 20\r
43#define SD_SET_BLOCK_COUNT 23\r
44#define SD_WRITE_SINGLE_BLOCK 24\r
45#define SD_WRITE_MULTIPLE_BLOCK 25\r
46#define SD_PROGRAM_CSD 27\r
47#define SD_SET_WRITE_PROT 28\r
48#define SD_CLR_WRITE_PROT 29\r
49#define SD_SEND_WRITE_PROT 30\r
50#define SD_ERASE_WR_BLK_START 32\r
51#define SD_ERASE_WR_BLK_END 33\r
52#define SD_ERASE 38\r
53#define SD_LOCK_UNLOCK 42\r
54#define SD_READ_EXTR_SINGLE 48\r
55#define SD_WRITE_EXTR_SINGLE 49\r
56#define SDIO_RW_DIRECT 52\r
57#define SDIO_RW_EXTENDED 53\r
58#define SD_APP_CMD 55\r
59#define SD_GEN_CMD 56\r
60#define SD_READ_EXTR_MULTI 58\r
61#define SD_WRITE_EXTR_MULTI 59\r
62\r
63#define SD_SET_BUS_WIDTH 6 // ACMD6\r
64#define SD_STATUS 13 // ACMD13\r
65#define SD_SEND_NUM_WR_BLOCKS 22 // ACMD22\r
66#define SD_SET_WR_BLK_ERASE_COUNT 23 // ACMD23\r
67#define SD_SEND_OP_COND 41 // ACMD41\r
68#define SD_SET_CLR_CARD_DETECT 42 // ACMD42\r
69#define SD_SEND_SCR 51 // ACMD51\r
70\r
71#pragma pack(1)\r
72typedef struct {\r
73 UINT8 NotUsed:1; // Not used [0:0]\r
74 UINT8 Crc:7; // CRC [7:1]\r
75 UINT16 ManufacturingDate:12; // Manufacturing date [19:8]\r
76 UINT16 Reserved:4; // Reserved [23:20]\r
77 UINT8 ProductSerialNumber[4]; // Product serial number [55:24]\r
78 UINT8 ProductRevision; // Product revision [63:56]\r
79 UINT8 ProductName[5]; // Product name [103:64]\r
80 UINT8 OemId[2]; // OEM/Application ID [119:104]\r
81 UINT8 ManufacturerId; // Manufacturer ID [127:120]\r
82} SD_CID;\r
83\r
84typedef struct {\r
85 UINT32 NotUsed:1; // Not used [0:0]\r
86 UINT32 Crc:7; // CRC [7:1]\r
87 UINT32 Reserved:2; // Reserved [9:8]\r
88 UINT32 FileFormat:2; // File format [11:10]\r
89 UINT32 TmpWriteProtect:1; // Temporary write protection [12:12]\r
90 UINT32 PermWriteProtect:1; // Permanent write protection [13:13]\r
91 UINT32 Copy:1; // Copy flag (OTP) [14:14]\r
92 UINT32 FileFormatGrp:1; // File format group [15:15]\r
93 UINT32 Reserved1:5; // Reserved [20:16]\r
94 UINT32 WriteBlPartial:1; // Partial blocks for write allowed [21:21]\r
95 UINT32 WriteBlLen:4; // Max. write data block length [25:22]\r
96 UINT32 R2WFactor:3; // Write speed factor [28:26]\r
97 UINT32 Reserved2:2; // Manufacturer default ECC [30:29]\r
98 UINT32 WpGrpEnable:1; // Write protect group enable [31:31]\r
99\r
100 UINT32 WpGrpSize:7; // Write protect group size [38:32]\r
101 UINT32 SectorSize:7; // Erase sector size [45:39]\r
102 UINT32 EraseBlkEn:1; // Erase single block enable [46:46]\r
103 UINT32 CSizeMul:3; // device size multiplier [49:47]\r
104 UINT32 VddWCurrMax:3; // max. write current @VDD max [52:50]\r
105 UINT32 VddWCurrMin:3; // max. write current @VDD min [55:53]\r
106 UINT32 VddRCurrMax:3; // max. read current @VDD max [58:56]\r
107 UINT32 VddRCurrMin:3; // max. read current @VDD min [61:59]\r
108 UINT32 CSizeLow:2; // Device size low 2 bits [63:62]\r
109\r
110 UINT32 CSizeHigh:10; // Device size high 10 bits [73:64]\r
111 UINT32 Reserved4:2; // Reserved [75:74]\r
112 UINT32 DsrImp:1; // DSR implemented [76:76]\r
113 UINT32 ReadBlkMisalign:1; // Read block misalignment [77:77]\r
114 UINT32 WriteBlkMisalign:1; // Write block misalignment [78:78]\r
115 UINT32 ReadBlPartial:1; // Partial blocks for read allowed [79:79]\r
116 UINT32 ReadBlLen:4; // Max. read data block length [83:80]\r
117 UINT32 Ccc:12; // Card command classes [95:84]\r
118\r
119 UINT32 TranSpeed:8; // Max. data transfer rate [103:96]\r
120 UINT32 Nsac:8; // Data read access-time in CLK cycles (NSAC*100) [111:104]\r
121 UINT32 Taac:8; // Data read access-time [119:112]\r
122 UINT32 Reserved5:6; // Reserved [125:120]\r
123 UINT32 CsdStructure:2; // CSD structure [127:126]\r
124} SD_CSD;\r
125\r
126typedef struct {\r
127 UINT32 NotUsed:1; // Not used [0:0]\r
128 UINT32 Crc:7; // CRC [7:1]\r
129 UINT32 Reserved:2; // Reserved [9:8]\r
130 UINT32 FileFormat:2; // File format [11:10]\r
131 UINT32 TmpWriteProtect:1; // Temporary write protection [12:12]\r
132 UINT32 PermWriteProtect:1; // Permanent write protection [13:13]\r
133 UINT32 Copy:1; // Copy flag (OTP) [14:14]\r
134 UINT32 FileFormatGrp:1; // File format group [15:15]\r
135 UINT32 Reserved1:5; // Reserved [20:16]\r
136 UINT32 WriteBlPartial:1; // Partial blocks for write allowed [21:21]\r
137 UINT32 WriteBlLen:4; // Max. write data block length [25:22]\r
138 UINT32 R2WFactor:3; // Write speed factor [28:26]\r
139 UINT32 Reserved2:2; // Manufacturer default ECC [30:29]\r
140 UINT32 WpGrpEnable:1; // Write protect group enable [31:31]\r
141\r
142 UINT32 WpGrpSize:7; // Write protect group size [38:32]\r
143 UINT32 SectorSize:7; // Erase sector size [45:39]\r
144 UINT32 EraseBlkEn:1; // Erase single block enable [46:46]\r
145 UINT32 Reserved3:1; // Reserved [47:47]\r
146 UINT32 CSizeLow:16; // Device size low 16 bits [63:48]\r
147\r
148 UINT32 CSizeHigh:6; // Device size high 6 bits [69:64]\r
149 UINT32 Reserved4:6; // Reserved [75:70]\r
150 UINT32 DsrImp:1; // DSR implemented [76:76]\r
151 UINT32 ReadBlkMisalign:1; // Read block misalignment [77:77]\r
152 UINT32 WriteBlkMisalign:1; // Write block misalignment [78:78]\r
153 UINT32 ReadBlPartial:1; // Partial blocks for read allowed [79:79]\r
154 UINT32 ReadBlLen:4; // Max. read data block length [83:80]\r
155 UINT32 Ccc:12; // Card command classes [95:84]\r
156\r
157 UINT32 TranSpeed:8; // Max. data transfer rate [103:96]\r
158 UINT32 Nsac:8; // Data read access-time in CLK cycles (NSAC*100) [111:104]\r
159 UINT32 Taac:8; // Data read access-time [119:112]\r
160 UINT32 Reserved5:6; // Reserved [125:120]\r
161 UINT32 CsdStructure:2; // CSD structure [127:126]\r
162} SD_CSD2;\r
163\r
164typedef struct {\r
165 UINT32 Reserved; // Reserved [31:0]\r
166\r
167 UINT32 CmdSupport:4; // Command Support bits [35:32]\r
168 UINT32 Reserved1:6; // Reserved [41:36]\r
169 UINT32 SdSpec4:1; // Spec. Version 4.00 or higher [42:42]\r
170 UINT32 ExSecurity:4; // Extended Security Support [46:43]\r
171 UINT32 SdSpec3:1; // Spec. Version 3.00 or higher [47:47]\r
172 UINT32 SdBusWidths:4; // DAT Bus widths supported [51:48]\r
173 UINT32 SdSecurity:3; // CPRM security support [54:52]\r
174 UINT32 DataStatAfterErase:1; // Data status after erases [55]\r
175 UINT32 SdSpec:4; // SD Memory Card Spec. Version [59:56]\r
176 UINT32 ScrStructure:4; // SCR Structure [63:60]\r
177} SD_SCR;\r
178\r
179#pragma pack()\r
180\r
181#endif\r