]> git.proxmox.com Git - mirror_edk2.git/blame - EmbeddedPkg/Include/Protocol/MmcHost.h
BaseTools/Capsule: Do not support -o with --dump-info
[mirror_edk2.git] / EmbeddedPkg / Include / Protocol / MmcHost.h
CommitLineData
1bfda055 1/** @file\r
2 Definition of the MMC Host Protocol\r
3\r
b4fdedc2 4 Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
3402aac7
RC
5\r
6 This program and the accompanying materials\r
7 are licensed and made available under the terms and conditions of the BSD License\r
8 which accompanies this distribution. The full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
1bfda055 13\r
14**/\r
15\r
16#ifndef __MMC_HOST_H__\r
17#define __MMC_HOST_H__\r
18\r
19///\r
20/// Global ID for the MMC Host Protocol\r
21///\r
22#define EFI_MMC_HOST_PROTOCOL_GUID \\r
23 { 0x3e591c00, 0x9e4a, 0x11df, {0x92, 0x44, 0x00, 0x02, 0xA5, 0xD5, 0xC5, 0x1B } }\r
24\r
25#define MMC_RESPONSE_TYPE_R1 0\r
26#define MMC_RESPONSE_TYPE_R1b 0\r
27#define MMC_RESPONSE_TYPE_R2 1\r
28#define MMC_RESPONSE_TYPE_R3 0\r
29#define MMC_RESPONSE_TYPE_R6 0\r
30#define MMC_RESPONSE_TYPE_R7 0\r
31#define MMC_RESPONSE_TYPE_OCR 0\r
32#define MMC_RESPONSE_TYPE_CID 1\r
33#define MMC_RESPONSE_TYPE_CSD 1\r
34#define MMC_RESPONSE_TYPE_RCA 0\r
35\r
36typedef UINT32 MMC_RESPONSE_TYPE;\r
37\r
38typedef UINT32 MMC_CMD;\r
39\r
40#define MMC_CMD_WAIT_RESPONSE (1 << 16)\r
41#define MMC_CMD_LONG_RESPONSE (1 << 17)\r
2b826e73 42#define MMC_CMD_NO_CRC_RESPONSE (1 << 18)\r
1bfda055 43\r
2b826e73 44#define MMC_INDX(Index) ((Index) & 0xFFFF)\r
45#define MMC_GET_INDX(MmcCmd) ((MmcCmd) & 0xFFFF)\r
1bfda055 46\r
2b826e73 47#define MMC_CMD0 (MMC_INDX(0) | MMC_CMD_NO_CRC_RESPONSE)\r
48#define MMC_CMD1 (MMC_INDX(1) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_NO_CRC_RESPONSE)\r
1bfda055 49#define MMC_CMD2 (MMC_INDX(2) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_LONG_RESPONSE)\r
50#define MMC_CMD3 (MMC_INDX(3) | MMC_CMD_WAIT_RESPONSE)\r
2b826e73 51#define MMC_CMD5 (MMC_INDX(5) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_NO_CRC_RESPONSE)\r
a28b9aef 52#define MMC_CMD6 (MMC_INDX(6) | MMC_CMD_WAIT_RESPONSE)\r
1bfda055 53#define MMC_CMD7 (MMC_INDX(7) | MMC_CMD_WAIT_RESPONSE)\r
54#define MMC_CMD8 (MMC_INDX(8) | MMC_CMD_WAIT_RESPONSE)\r
55#define MMC_CMD9 (MMC_INDX(9) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_LONG_RESPONSE)\r
56#define MMC_CMD11 (MMC_INDX(11) | MMC_CMD_WAIT_RESPONSE)\r
57#define MMC_CMD12 (MMC_INDX(12) | MMC_CMD_WAIT_RESPONSE)\r
58#define MMC_CMD13 (MMC_INDX(13) | MMC_CMD_WAIT_RESPONSE)\r
59#define MMC_CMD16 (MMC_INDX(16) | MMC_CMD_WAIT_RESPONSE)\r
60#define MMC_CMD17 (MMC_INDX(17) | MMC_CMD_WAIT_RESPONSE)\r
61#define MMC_CMD18 (MMC_INDX(18) | MMC_CMD_WAIT_RESPONSE)\r
62#define MMC_CMD20 (MMC_INDX(20) | MMC_CMD_WAIT_RESPONSE)\r
63#define MMC_CMD23 (MMC_INDX(23) | MMC_CMD_WAIT_RESPONSE)\r
64#define MMC_CMD24 (MMC_INDX(24) | MMC_CMD_WAIT_RESPONSE)\r
a28b9aef 65#define MMC_CMD25 (MMC_INDX(25) | MMC_CMD_WAIT_RESPONSE)\r
1bfda055 66#define MMC_CMD55 (MMC_INDX(55) | MMC_CMD_WAIT_RESPONSE)\r
2b826e73 67#define MMC_ACMD41 (MMC_INDX(41) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_NO_CRC_RESPONSE)\r
a28b9aef 68#define MMC_ACMD51 (MMC_INDX(51) | MMC_CMD_WAIT_RESPONSE)\r
1bfda055 69\r
b4fdedc2
OM
70// Valid responses for CMD1 in eMMC\r
71#define EMMC_CMD1_CAPACITY_LESS_THAN_2GB 0x00FF8080 // Capacity <= 2GB, byte addressing used\r
72#define EMMC_CMD1_CAPACITY_GREATER_THAN_2GB 0x40FF8080 // Capacity > 2GB, 512-byte sector addressing used\r
73\r
a28b9aef
HZ
74#define MMC_STATUS_APP_CMD (1 << 5)\r
75\r
1bfda055 76typedef enum _MMC_STATE {\r
77 MmcInvalidState = 0,\r
78 MmcHwInitializationState,\r
79 MmcIdleState,\r
80 MmcReadyState,\r
81 MmcIdentificationState,\r
82 MmcStandByState,\r
83 MmcTransferState,\r
84 MmcSendingDataState,\r
85 MmcReceiveDataState,\r
86 MmcProgrammingState,\r
87 MmcDisconnectState,\r
88} MMC_STATE;\r
89\r
a28b9aef
HZ
90#define EMMCBACKWARD (0)\r
91#define EMMCHS26 (1 << 0) // High-Speed @26MHz at rated device voltages\r
92#define EMMCHS52 (1 << 1) // High-Speed @52MHz at rated device voltages\r
93#define EMMCHS52DDR1V8 (1 << 2) // High-Speed Dual Data Rate @52MHz 1.8V or 3V I/O\r
94#define EMMCHS52DDR1V2 (1 << 3) // High-Speed Dual Data Rate @52MHz 1.2V I/O\r
95#define EMMCHS200SDR1V8 (1 << 4) // HS200 Single Data Rate @200MHz 1.8V I/O\r
96#define EMMCHS200SDR1V2 (1 << 5) // HS200 Single Data Rate @200MHz 1.2V I/O\r
97#define EMMCHS400DDR1V8 (1 << 6) // HS400 Dual Data Rate @400MHz 1.8V I/O\r
98#define EMMCHS400DDR1V2 (1 << 7) // HS400 Dual Data Rate @400MHz 1.2V I/O\r
99\r
16d88c2d 100///\r
101/// Forward declaration for EFI_MMC_HOST_PROTOCOL\r
102///\r
103typedef struct _EFI_MMC_HOST_PROTOCOL EFI_MMC_HOST_PROTOCOL;\r
104\r
105typedef BOOLEAN (EFIAPI *MMC_ISCARDPRESENT) (\r
106 IN EFI_MMC_HOST_PROTOCOL *This\r
107 );\r
108\r
109typedef BOOLEAN (EFIAPI *MMC_ISREADONLY) (\r
110 IN EFI_MMC_HOST_PROTOCOL *This\r
111 );\r
112\r
113typedef EFI_STATUS (EFIAPI *MMC_BUILDDEVICEPATH) (\r
114 IN EFI_MMC_HOST_PROTOCOL *This,\r
115 OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
116 );\r
117\r
118typedef EFI_STATUS (EFIAPI *MMC_NOTIFYSTATE) (\r
119 IN EFI_MMC_HOST_PROTOCOL *This,\r
120 IN MMC_STATE State\r
121 );\r
122\r
123typedef EFI_STATUS (EFIAPI *MMC_SENDCOMMAND) (\r
124 IN EFI_MMC_HOST_PROTOCOL *This,\r
125 IN MMC_CMD Cmd,\r
126 IN UINT32 Argument\r
127 );\r
128\r
129typedef EFI_STATUS (EFIAPI *MMC_RECEIVERESPONSE) (\r
130 IN EFI_MMC_HOST_PROTOCOL *This,\r
131 IN MMC_RESPONSE_TYPE Type,\r
132 IN UINT32 *Buffer\r
133 );\r
134\r
135typedef EFI_STATUS (EFIAPI *MMC_READBLOCKDATA) (\r
136 IN EFI_MMC_HOST_PROTOCOL *This,\r
137 IN EFI_LBA Lba,\r
138 IN UINTN Length,\r
139 OUT UINT32 *Buffer\r
140 );\r
141\r
142typedef EFI_STATUS (EFIAPI *MMC_WRITEBLOCKDATA) (\r
143 IN EFI_MMC_HOST_PROTOCOL *This,\r
144 IN EFI_LBA Lba,\r
145 IN UINTN Length,\r
146 IN UINT32 *Buffer\r
147 );\r
1bfda055 148\r
a28b9aef
HZ
149typedef EFI_STATUS (EFIAPI *MMC_SETIOS) (\r
150 IN EFI_MMC_HOST_PROTOCOL *This,\r
151 IN UINT32 BusClockFreq,\r
152 IN UINT32 BusWidth,\r
153 IN UINT32 TimingMode\r
154 );\r
155\r
156typedef BOOLEAN (EFIAPI *MMC_ISMULTIBLOCK) (\r
157 IN EFI_MMC_HOST_PROTOCOL *This\r
158 );\r
1bfda055 159\r
6b062a86 160struct _EFI_MMC_HOST_PROTOCOL {\r
1bfda055 161\r
16d88c2d 162 UINT32 Revision;\r
163 MMC_ISCARDPRESENT IsCardPresent;\r
164 MMC_ISREADONLY IsReadOnly;\r
165 MMC_BUILDDEVICEPATH BuildDevicePath;\r
1bfda055 166\r
16d88c2d 167 MMC_NOTIFYSTATE NotifyState;\r
1bfda055 168\r
16d88c2d 169 MMC_SENDCOMMAND SendCommand;\r
170 MMC_RECEIVERESPONSE ReceiveResponse;\r
1bfda055 171\r
16d88c2d 172 MMC_READBLOCKDATA ReadBlockData;\r
173 MMC_WRITEBLOCKDATA WriteBlockData;\r
1bfda055 174\r
a28b9aef
HZ
175 MMC_SETIOS SetIos;\r
176 MMC_ISMULTIBLOCK IsMultiBlock;\r
177\r
6b062a86 178};\r
1bfda055 179\r
a28b9aef
HZ
180#define MMC_HOST_PROTOCOL_REVISION 0x00010002 // 1.2\r
181\r
182#define MMC_HOST_HAS_SETIOS(Host) (Host->Revision >= MMC_HOST_PROTOCOL_REVISION && \\r
183 Host->SetIos != NULL)\r
184#define MMC_HOST_HAS_ISMULTIBLOCK(Host) (Host->Revision >= MMC_HOST_PROTOCOL_REVISION && \\r
185 Host->IsMultiBlock != NULL)\r
16d88c2d 186\r
1bfda055 187extern EFI_GUID gEfiMmcHostProtocolGuid;\r
188\r
189#endif\r
190\r