]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmbeddedPkg/Universal/MmcDxe/Mmc.c
MmcDxe: Adding eMMC support
[mirror_edk2.git] / EmbeddedPkg / Universal / MmcDxe / Mmc.c
index cfa9a51f50773b3d65c42cf6e50179ad61d32ad9..9327bd6337a16b27b2caf088544760c68e53f149 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Main file of the MMC Dxe driver. The driver entrypoint is defined into this file.\r
 \r
-  Copyright (c) 2011, ARM Limited. All rights reserved.\r
+  Copyright (c) 2011-2013, 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
 **/\r
 \r
 #include <Protocol/DevicePath.h>\r
-#include <Protocol/MmcHost.h>\r
 \r
 #include <Library/BaseLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/DevicePathLib.h>\r
-#include <Library/DebugLib.h>\r
 \r
 #include "Mmc.h"\r
 \r
@@ -116,7 +114,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
@@ -299,6 +297,9 @@ MmcDriverBindingStart (
     InsertMmcHost (MmcHostInstance);\r
 \r
     MmcHostInstance->Initialized = FALSE;\r
+\r
+    // Detect card presence now\r
+    CheckCardsCallback (NULL, NULL);\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -361,11 +362,15 @@ 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
+      }\r
+\r
       Status = gBS->ReinstallProtocolInterface (\r
                     (MmcHostInstance->MmcHandle),\r
                     &gEfiBlockIoProtocolGuid,\r
@@ -382,6 +387,7 @@ CheckCardsCallback (
   }\r
 }\r
 \r
+\r
 EFI_DRIVER_BINDING_PROTOCOL gMmcDriverBinding = {\r
   MmcDriverBindingSupported,\r
   MmcDriverBindingStart,\r