]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmbeddedPkg/Include/Protocol/MmcHost.h
MdeModulePkg/AtaAtapiPassThru: Ensure GHC.AE bit is always set in Ahci
[mirror_edk2.git] / EmbeddedPkg / Include / Protocol / MmcHost.h
index 0196aad2ae6dfbbff77271baf12b02ca0021de3b..89f2e80b5c55ea974d44d50178806476afcee869 100644 (file)
@@ -1,15 +1,15 @@
 /** @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
@@ -64,6 +64,10 @@ typedef UINT32 MMC_CMD;
 #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
@@ -78,35 +82,74 @@ typedef enum _MMC_STATE {
     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