EmbeddedPkg/MmcDxe: Add 'This' pointer attribute to protocol function
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 1 Sep 2011 17:08:41 +0000 (17:08 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 1 Sep 2011 17:08:41 +0000 (17:08 +0000)
This attribute allows the EFI_MMC_HOST_PROTOCOL interface to manage
multiple instances in one driver.

EmbeddedPkg/MmcDxe: Add Revision attribute to the EFI_MMC_HOST_PROTOCOL

Note: The ARM PL180 and Omap35xx MMC host drivers has been updated.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12255 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/Drivers/PL180MciDxe/PL180Mci.c
EmbeddedPkg/Include/Protocol/MmcHost.h
EmbeddedPkg/Universal/MmcDxe/Mmc.c
EmbeddedPkg/Universal/MmcDxe/Mmc.h
EmbeddedPkg/Universal/MmcDxe/MmcBlockIo.c
Omap35xxPkg/MmcHostDxe/MmcHostDxe.c

index 03500af..b79845d 100644 (file)
@@ -46,7 +46,7 @@ MciInitialize (
 \r
 BOOLEAN\r
 MciIsCardPresent (\r
-  VOID\r
+  IN EFI_MMC_HOST_PROTOCOL     *This\r
   )\r
 {\r
   return (MmioRead32(FixedPcdGet32(PcdPL180SysMciRegAddress)) & 1);\r
@@ -54,7 +54,7 @@ MciIsCardPresent (
 \r
 BOOLEAN\r
 MciIsReadOnly (\r
-  VOID\r
+  IN EFI_MMC_HOST_PROTOCOL     *This\r
   )\r
 {\r
   return (MmioRead32(FixedPcdGet32(PcdPL180SysMciRegAddress)) & 2);\r
@@ -92,22 +92,23 @@ MciPrepareDataPath (
   )\r
 {\r
   // Set Data Length & Data Timer\r
-  MmioWrite32(MCI_DATA_TIMER_REG,0xFFFFFFF);\r
-  MmioWrite32(MCI_DATA_LENGTH_REG,MMCI0_BLOCKLEN);\r
+  MmioWrite32 (MCI_DATA_TIMER_REG,0xFFFFFFF);\r
+  MmioWrite32 (MCI_DATA_LENGTH_REG,MMCI0_BLOCKLEN);\r
 \r
 #ifndef USE_STREAM\r
   //Note: we are using a hardcoded BlockLen (=512). If we decide to use a variable size, we could\r
   // compute the pow2 of BlockLen with the above function GetPow2BlockLen()\r
-  MmioWrite32(MCI_DATA_CTL_REG, MCI_DATACTL_ENABLE |  MCI_DATACTL_DMA_ENABLE | TransferDirection | (MMCI0_POW2_BLOCKLEN << 4));\r
+  MmioWrite32 (MCI_DATA_CTL_REG, MCI_DATACTL_ENABLE |  MCI_DATACTL_DMA_ENABLE | TransferDirection | (MMCI0_POW2_BLOCKLEN << 4));\r
 #else\r
-  MmioWrite32(MCI_DATA_CTL_REG, MCI_DATACTL_ENABLE | MCI_DATACTL_DMA_ENABLE | TransferDirection | MCI_DATACTL_STREAM_TRANS);\r
+  MmioWrite32 (MCI_DATA_CTL_REG, MCI_DATACTL_ENABLE | MCI_DATACTL_DMA_ENABLE | TransferDirection | MCI_DATACTL_STREAM_TRANS);\r
 #endif\r
 }\r
 \r
 EFI_STATUS\r
 MciSendCommand (\r
-  IN MMC_CMD MmcCmd,\r
-  IN UINT32 Argument\r
+  IN EFI_MMC_HOST_PROTOCOL     *This,\r
+  IN MMC_CMD                    MmcCmd,\r
+  IN UINT32                     Argument\r
   )\r
 {\r
   UINT32 Status;\r
@@ -190,7 +191,7 @@ MciSendCommand (
   }\r
 \r
 Exit:\r
-       //Disable Command Path\r
+       // Disable Command Path\r
        CmdCtrlReg = MmioRead32(MCI_COMMAND_REG);\r
        MmioWrite32(MCI_COMMAND_REG, (CmdCtrlReg & ~MCI_CPSM_ENABLED));\r
        return RetVal;\r
@@ -198,8 +199,9 @@ Exit:
 \r
 EFI_STATUS\r
 MciReceiveResponse (\r
-  IN MMC_RESPONSE_TYPE Type,\r
-  IN UINT32* Buffer\r
+  IN EFI_MMC_HOST_PROTOCOL     *This,\r
+  IN MMC_RESPONSE_TYPE          Type,\r
+  IN UINT32*                    Buffer\r
   )\r
 {\r
   if (Buffer == NULL) {\r
@@ -223,9 +225,10 @@ MciReceiveResponse (
 \r
 EFI_STATUS\r
 MciReadBlockData (\r
-  IN EFI_LBA Lba,\r
-  IN UINTN Length,\r
-  IN UINT32* Buffer\r
+  IN EFI_MMC_HOST_PROTOCOL     *This,\r
+  IN EFI_LBA                    Lba,\r
+  IN UINTN                      Length,\r
+  IN UINT32*                    Buffer\r
   )\r
 {\r
   UINTN Loop;\r
@@ -298,9 +301,10 @@ MciReadBlockData (
 \r
 EFI_STATUS\r
 MciWriteBlockData (\r
-  IN EFI_LBA Lba,\r
-  IN UINTN Length,\r
-  IN UINT32* Buffer\r
+  IN EFI_MMC_HOST_PROTOCOL     *This,\r
+  IN EFI_LBA                   Lba,\r
+  IN UINTN                     Length,\r
+  IN UINT32*                   Buffer\r
   )\r
 {\r
   UINTN Loop;\r
@@ -396,7 +400,8 @@ Exit:
 \r
 EFI_STATUS\r
 MciNotifyState (\r
-  IN MMC_STATE State\r
+  IN  EFI_MMC_HOST_PROTOCOL     *This,\r
+  IN MMC_STATE                  State\r
   )\r
 {\r
   UINT32      Data32;\r
@@ -490,7 +495,8 @@ EFI_GUID mPL180MciDevicePathGuid = EFI_CALLER_ID_GUID;
 \r
 EFI_STATUS\r
 MciBuildDevicePath (\r
-  IN EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
+  IN EFI_MMC_HOST_PROTOCOL      *This,\r
+  IN EFI_DEVICE_PATH_PROTOCOL   **DevicePath\r
   )\r
 {\r
   EFI_DEVICE_PATH_PROTOCOL    *NewDevicePathNode;\r
@@ -503,6 +509,7 @@ MciBuildDevicePath (
 }\r
 \r
 EFI_MMC_HOST_PROTOCOL gMciHost = {\r
+  MMC_HOST_PROTOCOL_REVISION,\r
   MciIsCardPresent,\r
   MciIsReadOnly,\r
   MciBuildDevicePath,\r
index 0196aad..21112cc 100644 (file)
@@ -78,36 +78,75 @@ typedef enum _MMC_STATE {
     MmcDisconnectState,\r
 } MMC_STATE;\r
 \r
-typedef BOOLEAN (*MMC_ISCARDPRESENT)();\r
-\r
-typedef BOOLEAN (*MMC_ISREADONLY)();\r
-\r
-typedef EFI_STATUS (*MMC_BUILDDEVICEPATH)(EFI_DEVICE_PATH_PROTOCOL **DevicePath);\r
-\r
-typedef EFI_STATUS (*MMC_NOTIFYSTATE)(MMC_STATE State);\r
-\r
-typedef EFI_STATUS (*MMC_SENDCOMMAND)(MMC_CMD Cmd, UINT32 Argument);\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 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 (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 (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_RECEIVERESPONSE)(MMC_RESPONSE_TYPE Type, UINT32* Buffer);\r
 \r
-typedef EFI_STATUS (*MMC_READBLOCKDATA)(EFI_LBA Lba, UINTN Length, UINT32* Buffer);\r
+typedef struct _EFI_MMC_HOST_PROTOCOL {\r
 \r
-typedef EFI_STATUS (*MMC_WRITEBLOCKDATA)(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 struct _EFI_MMC_HOST_PROTOCOL {\r
-    MMC_ISCARDPRESENT       IsCardPresent;\r
-    MMC_ISREADONLY          IsReadOnly;\r
-    MMC_BUILDDEVICEPATH     BuildDevicePath;\r
+  MMC_NOTIFYSTATE         NotifyState;\r
 \r
-    MMC_NOTIFYSTATE         NotifyState;\r
+  MMC_SENDCOMMAND         SendCommand;\r
+  MMC_RECEIVERESPONSE     ReceiveResponse;\r
 \r
-    MMC_SENDCOMMAND         SendCommand;\r
-    MMC_RECEIVERESPONSE     ReceiveResponse;\r
+  MMC_READBLOCKDATA       ReadBlockData;\r
+  MMC_WRITEBLOCKDATA      WriteBlockData;\r
 \r
-    MMC_READBLOCKDATA       ReadBlockData;\r
-    MMC_WRITEBLOCKDATA      WriteBlockData;\r
 } EFI_MMC_HOST_PROTOCOL;\r
 \r
+#define MMC_HOST_PROTOCOL_REVISION    0x00010001    // 1.1\r
+\r
 extern EFI_GUID gEfiMmcHostProtocolGuid;\r
 \r
 #endif\r
index 48d3251..b4f7a78 100644 (file)
@@ -116,7 +116,7 @@ MMC_HOST_INSTANCE* CreateMmcHostInstance (
   MmcHostInstance->MmcHost = MmcHost;\r
 \r
   // Create DevicePath for the new MMC Host\r
-  Status = MmcHost->BuildDevicePath(&NewDevicePathNode);\r
+  Status = MmcHost->BuildDevicePath (MmcHost, &NewDevicePathNode);\r
   if (EFI_ERROR (Status)) {\r
     goto FREE_MEDIA;\r
   }\r
@@ -364,13 +364,13 @@ CheckCardsCallback (
     MmcHostInstance = MMC_HOST_INSTANCE_FROM_LINK(CurrentLink);\r
     ASSERT(MmcHostInstance != NULL);\r
 \r
-    if (MmcHostInstance->MmcHost->IsCardPresent() == !MmcHostInstance->Initialized) {\r
+    if (MmcHostInstance->MmcHost->IsCardPresent (MmcHostInstance->MmcHost) == !MmcHostInstance->Initialized) {\r
       MmcHostInstance->State = MmcHwInitializationState;\r
       MmcHostInstance->BlockIo.Media->MediaPresent = !MmcHostInstance->Initialized;\r
       MmcHostInstance->Initialized = !MmcHostInstance->Initialized;\r
 \r
-      if(MmcHostInstance->BlockIo.Media->MediaPresent) {\r
-        InitializeMmcDevice(MmcHostInstance);\r
+      if (MmcHostInstance->BlockIo.Media->MediaPresent) {\r
+        InitializeMmcDevice (MmcHostInstance);\r
       }\r
 \r
       Status = gBS->ReinstallProtocolInterface (\r
index f3b9029..c7e8c7e 100644 (file)
@@ -288,7 +288,7 @@ MmcFlushBlocks (
   IN EFI_BLOCK_IO_PROTOCOL  *This\r
   );\r
 \r
-EFI_STATUS InitializeMmcDevice(\r
+EFI_STATUS InitializeMmcDevice (\r
   IN  MMC_HOST_INSTANCE   *MmcHost\r
   );\r
 \r
index c12411c..47f4aeb 100644 (file)
@@ -32,7 +32,7 @@ MmcNotifyState (
   )\r
 {\r
   MmcHostInstance->State = State;\r
-  return MmcHostInstance->MmcHost->NotifyState(State);\r
+  return MmcHostInstance->MmcHost->NotifyState (MmcHostInstance->MmcHost, State);\r
 }\r
 \r
 VOID\r
@@ -169,14 +169,14 @@ MmcGetCardStatus(
   if(MmcHostInstance->State != MmcHwInitializationState){\r
     //Get the Status of the card.\r
     CmdArg = MmcHostInstance->CardInfo.RCA << 16;\r
-    Status = MmcHost->SendCommand(MMC_CMD13, CmdArg);\r
+    Status = MmcHost->SendCommand (MmcHost, MMC_CMD13, CmdArg);\r
     if (EFI_ERROR(Status)) {\r
       DEBUG((EFI_D_ERROR, "MmcGetCardStatus(MMC_CMD13): Error and Status = %r\n", Status));\r
       return Status;\r
     }\r
 \r
     //Read Response\r
-    MmcHost->ReceiveResponse(MMC_RESPONSE_TYPE_R1,Response);\r
+    MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_R1,Response);\r
     PrintResponseR1(Response[0]);\r
   }\r
 \r
@@ -214,7 +214,7 @@ MmcIdentificationMode (
     }\r
   } else {\r
     //Note: Could even be used in all cases. But it looks this command could put the state machine into inactive for some cards\r
-    Status = MmcHost->SendCommand(MMC_CMD0, 0);\r
+    Status = MmcHost->SendCommand (MmcHost, MMC_CMD0, 0);\r
     if (EFI_ERROR(Status)) {\r
       DEBUG((EFI_D_ERROR, "MmcIdentificationMode(MMC_CMD0): Error\n"));\r
       return Status;\r
@@ -228,7 +228,7 @@ MmcIdentificationMode (
   }\r
 \r
   // Are we using SDIO ?\r
-  Status = MmcHost->SendCommand(MMC_CMD5, 0);\r
+  Status = MmcHost->SendCommand (MmcHost, MMC_CMD5, 0);\r
   if (Status == EFI_SUCCESS) {\r
     DEBUG((EFI_D_ERROR, "MmcIdentificationMode(MMC_CMD5): Error - SDIO not supported.\n"));\r
     return EFI_UNSUPPORTED;\r
@@ -236,11 +236,11 @@ MmcIdentificationMode (
 \r
   // Check which kind of card we are using. Ver2.00 or later SD Memory Card (PL180 is SD v1.1)\r
   CmdArg = (0x0UL << 12 | BIT8 | 0xCEUL << 0);\r
-  Status = MmcHost->SendCommand(MMC_CMD8, CmdArg);\r
+  Status = MmcHost->SendCommand (MmcHost, MMC_CMD8, CmdArg);\r
   if (Status == EFI_SUCCESS) {\r
     DEBUG ((EFI_D_ERROR, "Card is SD2.0 => Supports high capacity\n"));\r
     IsHCS = TRUE;\r
-    MmcHost->ReceiveResponse(MMC_RESPONSE_TYPE_R7,Response);\r
+    MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_R7,Response);\r
     PrintResponseR1(Response[0]);\r
     //check if it is valid response\r
     if(Response[0] != CmdArg){\r
@@ -255,7 +255,7 @@ MmcIdentificationMode (
   Timeout = MAX_RETRY_COUNT;\r
   while (Timeout > 0) {\r
     // SD Card or MMC Card ? CMD55 indicates to the card that the next command is an application specific command\r
-    Status = MmcHost->SendCommand(MMC_CMD55, 0);\r
+    Status = MmcHost->SendCommand (MmcHost, MMC_CMD55, 0);\r
     if (Status == EFI_SUCCESS) {\r
         DEBUG ((EFI_D_INFO, "Card should be SD\n"));\r
         if (IsHCS) {\r
@@ -269,18 +269,18 @@ MmcIdentificationMode (
         if (IsHCS) {\r
             CmdArg |= BIT30;\r
         }\r
-        Status = MmcHost->SendCommand(MMC_ACMD41, CmdArg);\r
+        Status = MmcHost->SendCommand (MmcHost, MMC_ACMD41, CmdArg);\r
         if (!EFI_ERROR(Status)) {\r
-          MmcHost->ReceiveResponse(MMC_RESPONSE_TYPE_OCR,Response);\r
+          MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_OCR,Response);\r
           ((UINT32 *) &(MmcHostInstance->CardInfo.OCRData))[0] = Response[0];\r
         }\r
     } else {\r
         DEBUG ((EFI_D_INFO, "Card should be MMC\n"));\r
         MmcHostInstance->CardInfo.CardType = MMC_CARD;\r
 \r
-        Status = MmcHost->SendCommand(MMC_CMD1, 0x800000);\r
+        Status = MmcHost->SendCommand (MmcHost, MMC_CMD1, 0x800000);\r
         if (!EFI_ERROR(Status)) {\r
-          MmcHost->ReceiveResponse(MMC_RESPONSE_TYPE_OCR,Response);\r
+          MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_OCR,Response);\r
           ((UINT32 *) &(MmcHostInstance->CardInfo.OCRData))[0] = Response[0];\r
         }\r
     }\r
@@ -315,12 +315,12 @@ MmcIdentificationMode (
     return Status;\r
   }\r
 \r
-  Status = MmcHost->SendCommand(MMC_CMD2, 0);\r
+  Status = MmcHost->SendCommand (MmcHost, MMC_CMD2, 0);\r
   if (EFI_ERROR(Status)) {\r
     DEBUG((EFI_D_ERROR, "MmcIdentificationMode(MMC_CMD2): Error\n"));\r
     return Status;\r
   }\r
-  MmcHost->ReceiveResponse(MMC_RESPONSE_TYPE_CID,Response);\r
+  MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_CID,Response);\r
   PrintCID(Response);\r
 \r
   Status = MmcNotifyState (MmcHostInstance, MmcIdentificationState);\r
@@ -335,13 +335,13 @@ MmcIdentificationMode (
   // The status returned for this CMD3 will be 2 - identification\r
   //\r
   CmdArg = 1;\r
-  Status = MmcHost->SendCommand(MMC_CMD3, CmdArg);\r
+  Status = MmcHost->SendCommand (MmcHost, MMC_CMD3, CmdArg);\r
   if (EFI_ERROR(Status)) {\r
     DEBUG((EFI_D_ERROR, "MmcIdentificationMode(MMC_CMD3): Error\n"));\r
     return Status;\r
   }\r
 \r
-  MmcHost->ReceiveResponse(MMC_RESPONSE_TYPE_RCA,Response);\r
+  MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_RCA,Response);\r
   PrintRCA(Response[0]);\r
 \r
   // For MMC card, RCA is assigned by CMD3 while CMD3 dumps the RCA for SD card\r
@@ -360,7 +360,7 @@ MmcIdentificationMode (
   return EFI_SUCCESS;\r
 }\r
 \r
-EFI_STATUS InitializeMmcDevice(\r
+EFI_STATUS InitializeMmcDevice (\r
   IN  MMC_HOST_INSTANCE   *MmcHostInstance\r
   )\r
 {\r
@@ -376,13 +376,13 @@ EFI_STATUS InitializeMmcDevice(
 \r
   //Send a command to get Card specific data\r
   CmdArg = MmcHostInstance->CardInfo.RCA << 16;\r
-  Status = MmcHost->SendCommand(MMC_CMD9, CmdArg);\r
+  Status = MmcHost->SendCommand (MmcHost, MMC_CMD9, CmdArg);\r
   if (EFI_ERROR(Status)) {\r
     DEBUG((EFI_D_ERROR, "MmcIdentificationMode(MMC_CMD9): Error, Status=%r\n", Status));\r
     return Status;\r
   }\r
   //Read Response\r
-  MmcHost->ReceiveResponse(MMC_RESPONSE_TYPE_CSD,Response);\r
+  MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_CSD,Response);\r
   PrintCSD(Response);\r
 \r
   if (MmcHostInstance->CardInfo.CardType == SD_CARD_2_HIGH) {\r
@@ -403,12 +403,12 @@ EFI_STATUS InitializeMmcDevice(
 \r
   MmcHostInstance->BlockIo.Media->LastBlock    = (NumBlocks - 1);\r
   MmcHostInstance->BlockIo.Media->BlockSize    = BlockSize;\r
-  MmcHostInstance->BlockIo.Media->ReadOnly     = MmcHost->IsReadOnly();\r
+  MmcHostInstance->BlockIo.Media->ReadOnly     = MmcHost->IsReadOnly (MmcHost);\r
   MmcHostInstance->BlockIo.Media->MediaPresent = TRUE;\r
   MmcHostInstance->BlockIo.Media->MediaId++;\r
 \r
   CmdArg = MmcHostInstance->CardInfo.RCA << 16;\r
-  Status = MmcHost->SendCommand(MMC_CMD7, CmdArg);\r
+  Status = MmcHost->SendCommand (MmcHost, MMC_CMD7, CmdArg);\r
   if (EFI_ERROR(Status)) {\r
     DEBUG((EFI_D_ERROR, "MmcIdentificationMode(MMC_CMD7): Error and Status = %r\n", Status));\r
     return Status;\r
@@ -421,7 +421,7 @@ EFI_STATUS InitializeMmcDevice(
   }\r
 \r
   // Set Block Length\r
-  Status = MmcHost->SendCommand(MMC_CMD16, MmcHostInstance->BlockIo.Media->BlockSize);\r
+  Status = MmcHost->SendCommand (MmcHost, MMC_CMD16, MmcHostInstance->BlockIo.Media->BlockSize);\r
   if (EFI_ERROR(Status)) {\r
     DEBUG((EFI_D_ERROR, "MmcIdentificationMode(MMC_CMD16): Error MmcHostInstance->BlockIo.Media->BlockSize: %d and Error = %r\n",MmcHostInstance->BlockIo.Media->BlockSize, Status));\r
     return Status;\r
@@ -429,7 +429,7 @@ EFI_STATUS InitializeMmcDevice(
 \r
   // Block Count (not used). Could return an error for SD card\r
   if (MmcHostInstance->CardInfo.CardType == MMC_CARD) {\r
-    MmcHost->SendCommand(MMC_CMD23, BlockCount);\r
+    MmcHost->SendCommand (MmcHost, MMC_CMD23, BlockCount);\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -452,7 +452,7 @@ MmcReset (
   }\r
 \r
   // If a card is not present then clear all media settings\r
-  if (!MmcHostInstance->MmcHost->IsCardPresent()) {\r
+  if (!MmcHostInstance->MmcHost->IsCardPresent (MmcHostInstance->MmcHost)) {\r
     MmcHostInstance->BlockIo.Media->MediaPresent = FALSE;\r
     MmcHostInstance->BlockIo.Media->LastBlock    = 0;\r
     MmcHostInstance->BlockIo.Media->BlockSize    = 512;  // Should be zero but there is a bug in DiskIo\r
@@ -474,7 +474,7 @@ MmcDetectCard (
   EFI_MMC_HOST_PROTOCOL     *MmcHost\r
   )\r
 {\r
-  if (!MmcHost->IsCardPresent()) {\r
+  if (!MmcHost->IsCardPresent (MmcHost)) {\r
     return EFI_NO_MEDIA;\r
   } else {\r
     return EFI_SUCCESS;\r
@@ -544,9 +544,9 @@ MmcIoBlocks (
     Response[0] = 0;\r
     Timeout = 20;\r
     while(!(Response[0] & MMC_R0_READY_FOR_DATA) && (MMC_R0_CURRENTSTATE(Response) != MMC_R0_STATE_TRAN) && Timeout--) {\r
-      Status = MmcHost->SendCommand(MMC_CMD13, CmdArg);\r
+      Status = MmcHost->SendCommand (MmcHost, MMC_CMD13, CmdArg);\r
       if (!EFI_ERROR(Status)) {\r
-        MmcHost->ReceiveResponse(MMC_RESPONSE_TYPE_R1,Response);\r
+        MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_R1,Response);\r
       }\r
     }\r
 \r
@@ -577,7 +577,7 @@ MmcIoBlocks (
       //TODO: Should we support write stream (MMC_CMD20)\r
 #endif\r
     }\r
-    Status = MmcHost->SendCommand(Cmd, CmdArg);\r
+    Status = MmcHost->SendCommand (MmcHost, Cmd, CmdArg);\r
     if (EFI_ERROR(Status)) {\r
       DEBUG((EFI_D_ERROR, "MmcIdentificationMode(MMC_CMD%d): Error %r\n",Cmd, Status));\r
       return Status;\r
@@ -586,7 +586,7 @@ MmcIoBlocks (
     if (Transfer == MMC_IOBLOCKS_READ) {\r
 #ifndef USE_STREAM\r
       // Read one block of Data\r
-      Status = MmcHost->ReadBlockData(Lba,This->Media->BlockSize,Buffer);\r
+      Status = MmcHost->ReadBlockData (MmcHost, Lba,This->Media->BlockSize,Buffer);\r
       if (EFI_ERROR(Status)) {\r
         DEBUG((EFI_D_BLKIO, "MmcIdentificationMode(): Error Read Block Data and Status = %r\n", Status));\r
         return Status;\r
@@ -603,7 +603,7 @@ MmcIoBlocks (
     } else {\r
 #ifndef USE_STREAM\r
       // Write one block of Data\r
-      Status = MmcHost->WriteBlockData(Lba,This->Media->BlockSize,Buffer);\r
+      Status = MmcHost->WriteBlockData (MmcHost, Lba,This->Media->BlockSize,Buffer);\r
       if (EFI_ERROR(Status)) {\r
         DEBUG((EFI_D_BLKIO, "MmcIdentificationMode(): Error Write Block Data and Status = %r\n", Status));\r
         return Status;\r
@@ -615,9 +615,9 @@ MmcIoBlocks (
     }\r
 \r
     // Command 12 - Stop transmission (ends read)\r
-    Status = MmcHost->SendCommand(MMC_CMD12, 0);\r
+    Status = MmcHost->SendCommand (MmcHost, MMC_CMD12, 0);\r
     if (!EFI_ERROR(Status)) {\r
-      MmcHost->ReceiveResponse(MMC_RESPONSE_TYPE_R1b,Response);\r
+      MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_R1b,Response);\r
     }\r
 \r
     // Command 13 - Read status and wait for programming to complete (return to tran)\r
@@ -625,9 +625,9 @@ MmcIoBlocks (
     CmdArg = MmcHostInstance->CardInfo.RCA << 16;\r
     Response[0] = 0;\r
     while(!(Response[0] & MMC_R0_READY_FOR_DATA) && (MMC_R0_CURRENTSTATE(Response) != MMC_R0_STATE_TRAN) && Timeout--) {\r
-      Status = MmcHost->SendCommand(MMC_CMD13, CmdArg);\r
+      Status = MmcHost->SendCommand (MmcHost, MMC_CMD13, CmdArg);\r
       if (!EFI_ERROR(Status)) {\r
-        MmcHost->ReceiveResponse(MMC_RESPONSE_TYPE_R1,Response);\r
+        MmcHost->ReceiveResponse (MmcHost, MMC_RESPONSE_TYPE_R1,Response);\r
       }\r
       NanoSecondDelay(100);\r
       Timeout--;\r
index 1435c95..17ebf8d 100755 (executable)
@@ -280,7 +280,7 @@ InitializeMMCHS (
 
 BOOLEAN
 MMCIsCardPresent (
-  VOID
+  IN EFI_MMC_HOST_PROTOCOL     *This
   )
 {
   EFI_STATUS  Status;
@@ -299,7 +299,7 @@ MMCIsCardPresent (
 
 BOOLEAN
 MMCIsReadOnly (
-  VOID
+  IN EFI_MMC_HOST_PROTOCOL     *This
   )
 {
   /* Note:
@@ -318,7 +318,8 @@ EFI_GUID mPL180MciDevicePathGuid = EFI_CALLER_ID_GUID;
 
 EFI_STATUS
 MMCBuildDevicePath (
-  IN EFI_DEVICE_PATH_PROTOCOL **DevicePath
+  IN EFI_MMC_HOST_PROTOCOL     *This,
+  IN EFI_DEVICE_PATH_PROTOCOL  **DevicePath
   )
 {
   EFI_DEVICE_PATH_PROTOCOL    *NewDevicePathNode;
@@ -331,8 +332,9 @@ MMCBuildDevicePath (
 
 EFI_STATUS
 MMCSendCommand (
-  IN MMC_CMD MmcCmd,
-  IN UINT32 Argument
+  IN EFI_MMC_HOST_PROTOCOL     *This,
+  IN MMC_CMD                   MmcCmd,
+  IN UINT32                    Argument
   )
 {
   UINTN MmcStatus;
@@ -403,7 +405,8 @@ MMCSendCommand (
 
 EFI_STATUS
 MMCNotifyState (
-  IN MMC_STATE State
+  IN EFI_MMC_HOST_PROTOCOL    *This,
+  IN MMC_STATE                State
   )
 {
   EFI_STATUS              Status;
@@ -526,8 +529,9 @@ MMCNotifyState (
 
 EFI_STATUS
 MMCReceiveResponse (
-  IN MMC_RESPONSE_TYPE Type,
-  IN UINT32* Buffer
+  IN EFI_MMC_HOST_PROTOCOL     *This,
+  IN MMC_RESPONSE_TYPE         Type,
+  IN UINT32*                   Buffer
   )
 {
   if (Buffer == NULL) {
@@ -554,9 +558,10 @@ MMCReceiveResponse (
 
 EFI_STATUS
 MMCReadBlockData (
-  IN EFI_LBA Lba,
-  IN UINTN Length,
-  IN UINT32* Buffer
+  IN EFI_MMC_HOST_PROTOCOL      *This,
+  IN EFI_LBA                    Lba,
+  IN UINTN                      Length,
+  IN UINT32*                    Buffer
   )
 {
   UINTN MmcStatus;
@@ -595,9 +600,10 @@ MMCReadBlockData (
 
 EFI_STATUS
 MMCWriteBlockData (
-  IN EFI_LBA Lba,
-  IN UINTN Length,
-  IN UINT32* Buffer
+  IN EFI_MMC_HOST_PROTOCOL    *This,
+  IN EFI_LBA                  Lba,
+  IN UINTN                    Length,
+  IN UINT32*                  Buffer
   )
 {
   UINTN MmcStatus;
@@ -635,6 +641,7 @@ MMCWriteBlockData (
 }
 
 EFI_MMC_HOST_PROTOCOL gMMCHost = {
+  MMC_HOST_PROTOCOL_REVISION,
   MMCIsCardPresent,
   MMCIsReadOnly,
   MMCBuildDevicePath,