/** @file\r
Definition of the MMC Host Protocol\r
\r
- Copyright (c) 2011, ARM Limited. All rights reserved.\r
- \r
- This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
- http://opensource.org/licenses/bsd-license.php \r
+ Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+ This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
\r
#define MMC_CMD55 (MMC_INDX(55) | MMC_CMD_WAIT_RESPONSE)\r
#define MMC_ACMD41 (MMC_INDX(41) | MMC_CMD_WAIT_RESPONSE | MMC_CMD_NO_CRC_RESPONSE)\r
\r
+// Valid responses for CMD1 in eMMC\r
+#define EMMC_CMD1_CAPACITY_LESS_THAN_2GB 0x00FF8080 // Capacity <= 2GB, byte addressing used\r
+#define EMMC_CMD1_CAPACITY_GREATER_THAN_2GB 0x40FF8080 // Capacity > 2GB, 512-byte sector addressing used\r
+\r
typedef enum _MMC_STATE {\r
MmcInvalidState = 0,\r
MmcHwInitializationState,\r
MmcDisconnectState,\r
} MMC_STATE;\r
\r
-typedef BOOLEAN (*MMC_ISCARDPRESENT)();\r
+///\r
+/// Forward declaration for EFI_MMC_HOST_PROTOCOL\r
+///\r
+typedef struct _EFI_MMC_HOST_PROTOCOL EFI_MMC_HOST_PROTOCOL;\r
+\r
+typedef BOOLEAN (EFIAPI *MMC_ISCARDPRESENT) (\r
+ IN EFI_MMC_HOST_PROTOCOL *This\r
+ );\r
+\r
+typedef BOOLEAN (EFIAPI *MMC_ISREADONLY) (\r
+ IN EFI_MMC_HOST_PROTOCOL *This\r
+ );\r
+\r
+typedef EFI_STATUS (EFIAPI *MMC_BUILDDEVICEPATH) (\r
+ IN EFI_MMC_HOST_PROTOCOL *This,\r
+ OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
+ );\r
+\r
+typedef EFI_STATUS (EFIAPI *MMC_NOTIFYSTATE) (\r
+ IN EFI_MMC_HOST_PROTOCOL *This,\r
+ IN MMC_STATE State\r
+ );\r
+\r
+typedef EFI_STATUS (EFIAPI *MMC_SENDCOMMAND) (\r
+ IN EFI_MMC_HOST_PROTOCOL *This,\r
+ IN MMC_CMD Cmd,\r
+ IN UINT32 Argument\r
+ );\r
\r
-typedef BOOLEAN (*MMC_ISREADONLY)();\r
+typedef EFI_STATUS (EFIAPI *MMC_RECEIVERESPONSE) (\r
+ IN EFI_MMC_HOST_PROTOCOL *This,\r
+ IN MMC_RESPONSE_TYPE Type,\r
+ IN UINT32 *Buffer\r
+ );\r
\r
-typedef EFI_STATUS (*MMC_BUILDDEVICEPATH)(EFI_DEVICE_PATH_PROTOCOL **DevicePath);\r
+typedef EFI_STATUS (EFIAPI *MMC_READBLOCKDATA) (\r
+ IN EFI_MMC_HOST_PROTOCOL *This,\r
+ IN EFI_LBA Lba,\r
+ IN UINTN Length,\r
+ OUT UINT32 *Buffer\r
+ );\r
\r
-typedef EFI_STATUS (*MMC_NOTIFYSTATE)(MMC_STATE State);\r
+typedef EFI_STATUS (EFIAPI *MMC_WRITEBLOCKDATA) (\r
+ IN EFI_MMC_HOST_PROTOCOL *This,\r
+ IN EFI_LBA Lba,\r
+ IN UINTN Length,\r
+ IN UINT32 *Buffer\r
+ );\r
\r
-typedef EFI_STATUS (*MMC_SENDCOMMAND)(MMC_CMD Cmd, UINT32 Argument);\r
\r
-typedef EFI_STATUS (*MMC_RECEIVERESPONSE)(MMC_RESPONSE_TYPE Type, UINT32* Buffer);\r
+struct _EFI_MMC_HOST_PROTOCOL {\r
\r
-typedef EFI_STATUS (*MMC_READBLOCKDATA)(EFI_LBA Lba, UINTN Length, UINT32* Buffer);\r
+ UINT32 Revision;\r
+ MMC_ISCARDPRESENT IsCardPresent;\r
+ MMC_ISREADONLY IsReadOnly;\r
+ MMC_BUILDDEVICEPATH BuildDevicePath;\r
\r
-typedef EFI_STATUS (*MMC_WRITEBLOCKDATA)(EFI_LBA Lba, UINTN Length, UINT32* Buffer);\r
+ MMC_NOTIFYSTATE NotifyState;\r
\r
-typedef struct _EFI_MMC_HOST_PROTOCOL {\r
- MMC_ISCARDPRESENT IsCardPresent;\r
- MMC_ISREADONLY IsReadOnly;\r
- MMC_BUILDDEVICEPATH BuildDevicePath;\r
+ MMC_SENDCOMMAND SendCommand;\r
+ MMC_RECEIVERESPONSE ReceiveResponse;\r
\r
- MMC_NOTIFYSTATE NotifyState;\r
+ MMC_READBLOCKDATA ReadBlockData;\r
+ MMC_WRITEBLOCKDATA WriteBlockData;\r
\r
- MMC_SENDCOMMAND SendCommand;\r
- MMC_RECEIVERESPONSE ReceiveResponse;\r
+};\r
\r
- MMC_READBLOCKDATA ReadBlockData;\r
- MMC_WRITEBLOCKDATA WriteBlockData;\r
-} EFI_MMC_HOST_PROTOCOL;\r
+#define MMC_HOST_PROTOCOL_REVISION 0x00010001 // 1.1\r
\r
extern EFI_GUID gEfiMmcHostProtocolGuid;\r
\r