]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Sd/SdDxe/SdDxe.c
MdeModulePkg: Apply uncrustify changes
[mirror_edk2.git] / MdeModulePkg / Bus / Sd / SdDxe / SdDxe.c
index 0cf9067701da03a4cc94c136481f8caf94ce89e3..a7b2515b14c623248ced223cb7e769be281b663f 100644 (file)
@@ -4,14 +4,8 @@
   It produces BlockIo and BlockIo2 protocols to allow upper layer\r
   access the SD memory card device.\r
 \r
-  Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>\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
+  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -20,7 +14,7 @@
 //\r
 // SdDxe Driver Binding Protocol Instance\r
 //\r
-EFI_DRIVER_BINDING_PROTOCOL gSdDxeDriverBinding = {\r
+EFI_DRIVER_BINDING_PROTOCOL  gSdDxeDriverBinding = {\r
   SdDxeDriverBindingSupported,\r
   SdDxeDriverBindingStart,\r
   SdDxeDriverBindingStop,\r
@@ -32,7 +26,7 @@ EFI_DRIVER_BINDING_PROTOCOL gSdDxeDriverBinding = {
 //\r
 // Template for SD_DEVICE data structure.\r
 //\r
-SD_DEVICE mSdDeviceTemplate = {\r
+SD_DEVICE  mSdDeviceTemplate = {\r
   SD_DEVICE_SIGNATURE,         // Signature\r
   NULL,                        // Handle\r
   NULL,                        // DevicePath\r
@@ -69,6 +63,13 @@ SD_DEVICE mSdDeviceTemplate = {
     1,\r
     SdEraseBlocks\r
   },\r
+  {                            // DiskInfo\r
+    EFI_DISK_INFO_SD_MMC_INTERFACE_GUID,\r
+    SdDiskInfoInquiry,\r
+    SdDiskInfoIdentify,\r
+    SdDiskInfoSenseData,\r
+    SdDiskInfoWhichIde\r
+  },\r
   {                            // Queue\r
     NULL,\r
     NULL\r
@@ -98,41 +99,42 @@ DumpCsd (
   IN SD_CSD  *Csd\r
   )\r
 {\r
-  SD_CSD2 *Csd2;\r
-\r
-  DEBUG((DEBUG_INFO, "== Dump Sd Csd Register==\n"));\r
-  DEBUG((DEBUG_INFO, "  CSD structure                    0x%x\n", Csd->CsdStructure));\r
-  DEBUG((DEBUG_INFO, "  Data read access-time 1          0x%x\n", Csd->Taac));\r
-  DEBUG((DEBUG_INFO, "  Data read access-time 2          0x%x\n", Csd->Nsac));\r
-  DEBUG((DEBUG_INFO, "  Max. bus clock frequency         0x%x\n", Csd->TranSpeed));\r
-  DEBUG((DEBUG_INFO, "  Device command classes           0x%x\n", Csd->Ccc));\r
-  DEBUG((DEBUG_INFO, "  Max. read data block length      0x%x\n", Csd->ReadBlLen));\r
-  DEBUG((DEBUG_INFO, "  Partial blocks for read allowed  0x%x\n", Csd->ReadBlPartial));\r
-  DEBUG((DEBUG_INFO, "  Write block misalignment         0x%x\n", Csd->WriteBlkMisalign));\r
-  DEBUG((DEBUG_INFO, "  Read block misalignment          0x%x\n", Csd->ReadBlkMisalign));\r
-  DEBUG((DEBUG_INFO, "  DSR implemented                  0x%x\n", Csd->DsrImp));\r
+  SD_CSD2  *Csd2;\r
+\r
+  DEBUG ((DEBUG_INFO, "== Dump Sd Csd Register==\n"));\r
+  DEBUG ((DEBUG_INFO, "  CSD structure                    0x%x\n", Csd->CsdStructure));\r
+  DEBUG ((DEBUG_INFO, "  Data read access-time 1          0x%x\n", Csd->Taac));\r
+  DEBUG ((DEBUG_INFO, "  Data read access-time 2          0x%x\n", Csd->Nsac));\r
+  DEBUG ((DEBUG_INFO, "  Max. bus clock frequency         0x%x\n", Csd->TranSpeed));\r
+  DEBUG ((DEBUG_INFO, "  Device command classes           0x%x\n", Csd->Ccc));\r
+  DEBUG ((DEBUG_INFO, "  Max. read data block length      0x%x\n", Csd->ReadBlLen));\r
+  DEBUG ((DEBUG_INFO, "  Partial blocks for read allowed  0x%x\n", Csd->ReadBlPartial));\r
+  DEBUG ((DEBUG_INFO, "  Write block misalignment         0x%x\n", Csd->WriteBlkMisalign));\r
+  DEBUG ((DEBUG_INFO, "  Read block misalignment          0x%x\n", Csd->ReadBlkMisalign));\r
+  DEBUG ((DEBUG_INFO, "  DSR implemented                  0x%x\n", Csd->DsrImp));\r
   if (Csd->CsdStructure == 0) {\r
-    DEBUG((DEBUG_INFO, "  Device size                      0x%x\n", Csd->CSizeLow | (Csd->CSizeHigh << 2)));\r
-    DEBUG((DEBUG_INFO, "  Max. read current @ VDD min      0x%x\n", Csd->VddRCurrMin));\r
-    DEBUG((DEBUG_INFO, "  Max. read current @ VDD max      0x%x\n", Csd->VddRCurrMax));\r
-    DEBUG((DEBUG_INFO, "  Max. write current @ VDD min     0x%x\n", Csd->VddWCurrMin));\r
-    DEBUG((DEBUG_INFO, "  Max. write current @ VDD max     0x%x\n", Csd->VddWCurrMax));\r
+    DEBUG ((DEBUG_INFO, "  Device size                      0x%x\n", Csd->CSizeLow | (Csd->CSizeHigh << 2)));\r
+    DEBUG ((DEBUG_INFO, "  Max. read current @ VDD min      0x%x\n", Csd->VddRCurrMin));\r
+    DEBUG ((DEBUG_INFO, "  Max. read current @ VDD max      0x%x\n", Csd->VddRCurrMax));\r
+    DEBUG ((DEBUG_INFO, "  Max. write current @ VDD min     0x%x\n", Csd->VddWCurrMin));\r
+    DEBUG ((DEBUG_INFO, "  Max. write current @ VDD max     0x%x\n", Csd->VddWCurrMax));\r
   } else {\r
-    Csd2 = (SD_CSD2*)(VOID*)Csd;\r
-    DEBUG((DEBUG_INFO, "  Device size                      0x%x\n", Csd2->CSizeLow | (Csd->CSizeHigh << 16)));\r
+    Csd2 = (SD_CSD2 *)(VOID *)Csd;\r
+    DEBUG ((DEBUG_INFO, "  Device size                      0x%x\n", Csd2->CSizeLow | (Csd->CSizeHigh << 16)));\r
   }\r
-  DEBUG((DEBUG_INFO, "  Erase sector size                0x%x\n", Csd->SectorSize));\r
-  DEBUG((DEBUG_INFO, "  Erase single block enable        0x%x\n", Csd->EraseBlkEn));\r
-  DEBUG((DEBUG_INFO, "  Write protect group size         0x%x\n", Csd->WpGrpSize));\r
-  DEBUG((DEBUG_INFO, "  Write protect group enable       0x%x\n", Csd->WpGrpEnable));\r
-  DEBUG((DEBUG_INFO, "  Write speed factor               0x%x\n", Csd->R2WFactor));\r
-  DEBUG((DEBUG_INFO, "  Max. write data block length     0x%x\n", Csd->WriteBlLen));\r
-  DEBUG((DEBUG_INFO, "  Partial blocks for write allowed 0x%x\n", Csd->WriteBlPartial));\r
-  DEBUG((DEBUG_INFO, "  File format group                0x%x\n", Csd->FileFormatGrp));\r
-  DEBUG((DEBUG_INFO, "  Copy flag (OTP)                  0x%x\n", Csd->Copy));\r
-  DEBUG((DEBUG_INFO, "  Permanent write protection       0x%x\n", Csd->PermWriteProtect));\r
-  DEBUG((DEBUG_INFO, "  Temporary write protection       0x%x\n", Csd->TmpWriteProtect));\r
-  DEBUG((DEBUG_INFO, "  File format                      0x%x\n", Csd->FileFormat));\r
+\r
+  DEBUG ((DEBUG_INFO, "  Erase sector size                0x%x\n", Csd->SectorSize));\r
+  DEBUG ((DEBUG_INFO, "  Erase single block enable        0x%x\n", Csd->EraseBlkEn));\r
+  DEBUG ((DEBUG_INFO, "  Write protect group size         0x%x\n", Csd->WpGrpSize));\r
+  DEBUG ((DEBUG_INFO, "  Write protect group enable       0x%x\n", Csd->WpGrpEnable));\r
+  DEBUG ((DEBUG_INFO, "  Write speed factor               0x%x\n", Csd->R2WFactor));\r
+  DEBUG ((DEBUG_INFO, "  Max. write data block length     0x%x\n", Csd->WriteBlLen));\r
+  DEBUG ((DEBUG_INFO, "  Partial blocks for write allowed 0x%x\n", Csd->WriteBlPartial));\r
+  DEBUG ((DEBUG_INFO, "  File format group                0x%x\n", Csd->FileFormatGrp));\r
+  DEBUG ((DEBUG_INFO, "  Copy flag (OTP)                  0x%x\n", Csd->Copy));\r
+  DEBUG ((DEBUG_INFO, "  Permanent write protection       0x%x\n", Csd->PermWriteProtect));\r
+  DEBUG ((DEBUG_INFO, "  Temporary write protection       0x%x\n", Csd->TmpWriteProtect));\r
+  DEBUG ((DEBUG_INFO, "  File format                      0x%x\n", Csd->FileFormat));\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -148,8 +150,8 @@ DumpCsd (
 **/\r
 EFI_STATUS\r
 GetSdModelName (\r
-  IN OUT SD_DEVICE         *Device,\r
-  IN     SD_CID            *Cid\r
+  IN OUT SD_DEVICE  *Device,\r
+  IN     SD_CID     *Cid\r
   )\r
 {\r
   CHAR8  String[SD_MODEL_NAME_MAX_LEN];\r
@@ -177,19 +179,19 @@ GetSdModelName (
 **/\r
 EFI_STATUS\r
 DiscoverUserArea (\r
-  IN SD_DEVICE             *Device\r
+  IN SD_DEVICE  *Device\r
   )\r
 {\r
-  EFI_STATUS                        Status;\r
-  SD_CSD                            *Csd;\r
-  SD_CSD2                           *Csd2;\r
-  SD_CID                            *Cid;\r
-  UINT64                            Capacity;\r
-  UINT32                            DevStatus;\r
-  UINT16                            Rca;\r
-  UINT32                            CSize;\r
-  UINT32                            CSizeMul;\r
-  UINT32                            ReadBlLen;\r
+  EFI_STATUS  Status;\r
+  SD_CSD      *Csd;\r
+  SD_CSD2     *Csd2;\r
+  SD_CID      *Cid;\r
+  UINT64      Capacity;\r
+  UINT32      DevStatus;\r
+  UINT16      Rca;\r
+  UINT32      CSize;\r
+  UINT32      CSizeMul;\r
+  UINT32      ReadBlLen;\r
 \r
   //\r
   // Deselect the device to force it enter stby mode.\r
@@ -200,7 +202,7 @@ DiscoverUserArea (
 \r
   Status = SdSetRca (Device, &Rca);\r
   if (EFI_ERROR (Status)) {\r
-    DEBUG ((EFI_D_ERROR, "DiscoverUserArea(): Assign new Rca = 0x%x fails with %r\n", Rca, Status));\r
+    DEBUG ((DEBUG_ERROR, "DiscoverUserArea(): Assign new Rca = 0x%x fails with %r\n", Rca, Status));\r
     return Status;\r
   }\r
 \r
@@ -209,6 +211,7 @@ DiscoverUserArea (
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
+\r
   DumpCsd (Csd);\r
 \r
   Cid    = &Device->Cid;\r
@@ -216,11 +219,12 @@ DiscoverUserArea (
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
+\r
   GetSdModelName (Device, Cid);\r
 \r
   Status = SdSelect (Device, Rca);\r
   if (EFI_ERROR (Status)) {\r
-    DEBUG ((EFI_D_ERROR, "DiscoverUserArea(): Reselect the device 0x%x fails with %r\n", Rca, Status));\r
+    DEBUG ((DEBUG_ERROR, "DiscoverUserArea(): Reselect the device 0x%x fails with %r\n", Rca, Status));\r
     return Status;\r
   }\r
 \r
@@ -231,15 +235,15 @@ DiscoverUserArea (
 \r
   if (Csd->CsdStructure == 0) {\r
     Device->SectorAddressing = FALSE;\r
-    CSize     = (Csd->CSizeHigh << 2 | Csd->CSizeLow) + 1;\r
-    CSizeMul  = (1 << (Csd->CSizeMul + 2));\r
-    ReadBlLen = (1 << (Csd->ReadBlLen));\r
-    Capacity  = MultU64x32 (MultU64x32 ((UINT64)CSize, CSizeMul), ReadBlLen);\r
+    CSize                    = (Csd->CSizeHigh << 2 | Csd->CSizeLow) + 1;\r
+    CSizeMul                 = (1 << (Csd->CSizeMul + 2));\r
+    ReadBlLen                = (1 << (Csd->ReadBlLen));\r
+    Capacity                 = MultU64x32 (MultU64x32 ((UINT64)CSize, CSizeMul), ReadBlLen);\r
   } else {\r
     Device->SectorAddressing = TRUE;\r
-    Csd2      = (SD_CSD2*)(VOID*)Csd;\r
-    CSize     = (Csd2->CSizeHigh << 16 | Csd2->CSizeLow) + 1;\r
-    Capacity  = MultU64x32 ((UINT64)CSize, SIZE_512KB);\r
+    Csd2                     = (SD_CSD2 *)(VOID *)Csd;\r
+    CSize                    = (Csd2->CSizeHigh << 16 | Csd2->CSizeLow) + 1;\r
+    Capacity                 = MultU64x32 ((UINT64)CSize, SIZE_512KB);\r
   }\r
 \r
   Device->BlockIo.Media               = &Device->BlockMedia;\r
@@ -278,23 +282,23 @@ DiscoverUserArea (
 EFI_STATUS\r
 EFIAPI\r
 DiscoverSdDevice (\r
-  IN  SD_DRIVER_PRIVATE_DATA      *Private,\r
-  IN  UINT8                       Slot\r
+  IN  SD_DRIVER_PRIVATE_DATA  *Private,\r
+  IN  UINT8                   Slot\r
   )\r
 {\r
-  EFI_STATUS                      Status;\r
-  SD_DEVICE                       *Device;\r
-  EFI_DEVICE_PATH_PROTOCOL        *DevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL        *NewDevicePath;\r
-  EFI_DEVICE_PATH_PROTOCOL        *RemainingDevicePath;\r
-  EFI_HANDLE                      DeviceHandle;\r
-  EFI_SD_MMC_PASS_THRU_PROTOCOL   *PassThru;\r
+  EFI_STATUS                     Status;\r
+  SD_DEVICE                      *Device;\r
+  EFI_DEVICE_PATH_PROTOCOL       *DevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL       *NewDevicePath;\r
+  EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath;\r
+  EFI_HANDLE                     DeviceHandle;\r
+  EFI_SD_MMC_PASS_THRU_PROTOCOL  *PassThru;\r
 \r
   Device              = NULL;\r
   DevicePath          = NULL;\r
   NewDevicePath       = NULL;\r
   RemainingDevicePath = NULL;\r
-  PassThru = Private->PassThru;\r
+  PassThru            = Private->PassThru;\r
 \r
   //\r
   // Build Device Path\r
@@ -304,7 +308,7 @@ DiscoverSdDevice (
                        Slot,\r
                        &DevicePath\r
                        );\r
-  if (EFI_ERROR(Status)) {\r
+  if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
 \r
@@ -323,10 +327,10 @@ DiscoverSdDevice (
     goto Error;\r
   }\r
 \r
-  DeviceHandle = NULL;\r
+  DeviceHandle        = NULL;\r
   RemainingDevicePath = NewDevicePath;\r
-  Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &DeviceHandle);\r
-  if (!EFI_ERROR (Status) && (DeviceHandle != NULL) && IsDevicePathEnd(RemainingDevicePath)) {\r
+  Status              = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &DeviceHandle);\r
+  if (!EFI_ERROR (Status) && (DeviceHandle != NULL) && IsDevicePathEnd (RemainingDevicePath)) {\r
     //\r
     // The device has been started, directly return to fast boot.\r
     //\r
@@ -352,7 +356,7 @@ DiscoverSdDevice (
   // Expose user area in the Sd memory card to upper layer.\r
   //\r
   Status = DiscoverUserArea (Device);\r
-  if (EFI_ERROR(Status)) {\r
+  if (EFI_ERROR (Status)) {\r
     goto Error;\r
   }\r
 \r
@@ -366,7 +370,7 @@ DiscoverSdDevice (
     );\r
   AddUnicodeString2 (\r
     "en",\r
-    gSdDxeComponentName.SupportedLanguages,\r
+    gSdDxeComponentName2.SupportedLanguages,\r
     &Device->ControllerNameTable,\r
     Device->ModelName,\r
     FALSE\r
@@ -382,6 +386,8 @@ DiscoverSdDevice (
                   &Device->BlockIo2,\r
                   &gEfiEraseBlockProtocolGuid,\r
                   &Device->EraseBlock,\r
+                  &gEfiDiskInfoProtocolGuid,\r
+                  &Device->DiskInfo,\r
                   NULL\r
                   );\r
 \r
@@ -389,7 +395,7 @@ DiscoverSdDevice (
     gBS->OpenProtocol (\r
            Private->Controller,\r
            &gEfiSdMmcPassThruProtocolGuid,\r
-           (VOID **) &(Private->PassThru),\r
+           (VOID **)&(Private->PassThru),\r
            Private->DriverBindingHandle,\r
            Device->Handle,\r
            EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
@@ -455,15 +461,15 @@ Error:
 EFI_STATUS\r
 EFIAPI\r
 SdDxeDriverBindingSupported (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL   *This,\r
-  IN EFI_HANDLE                    Controller,\r
-  IN EFI_DEVICE_PATH_PROTOCOL      *RemainingDevicePath\r
+  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                   Controller,\r
+  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
   )\r
 {\r
-  EFI_STATUS                       Status;\r
-  EFI_DEVICE_PATH_PROTOCOL         *ParentDevicePath;\r
-  EFI_SD_MMC_PASS_THRU_PROTOCOL    *PassThru;\r
-  UINT8                            Slot;\r
+  EFI_STATUS                     Status;\r
+  EFI_DEVICE_PATH_PROTOCOL       *ParentDevicePath;\r
+  EFI_SD_MMC_PASS_THRU_PROTOCOL  *PassThru;\r
+  UINT8                          Slot;\r
 \r
   //\r
   // Test EFI_SD_MMC_PASS_THRU_PROTOCOL on the controller handle.\r
@@ -471,7 +477,7 @@ SdDxeDriverBindingSupported (
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiSdMmcPassThruProtocolGuid,\r
-                  (VOID**) &PassThru,\r
+                  (VOID **)&PassThru,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
@@ -520,7 +526,7 @@ SdDxeDriverBindingSupported (
   Status = gBS->OpenProtocol (\r
                   Controller,\r
                   &gEfiDevicePathProtocolGuid,\r
-                  (VOID **) &ParentDevicePath,\r
+                  (VOID **)&ParentDevicePath,\r
                   This->DriverBindingHandle,\r
                   Controller,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -560,33 +566,33 @@ SdDxeDriverBindingSupported (
   @retval EFI_SUCCESS              The device was started.\r
   @retval EFI_DEVICE_ERROR         The device could not be started due to a device error.Currently not implemented.\r
   @retval EFI_OUT_OF_RESOURCES     The request could not be completed due to a lack of resources.\r
-  @retval Others                   The driver failded to start the device.\r
+  @retval Others                   The driver failed to start the device.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 SdDxeDriverBindingStart (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL   *This,\r
-  IN EFI_HANDLE                    Controller,\r
-  IN EFI_DEVICE_PATH_PROTOCOL      *RemainingDevicePath\r
+  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN EFI_HANDLE                   Controller,\r
+  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
   )\r
 {\r
-  EFI_STATUS                       Status;\r
-  EFI_SD_MMC_PASS_THRU_PROTOCOL    *PassThru;\r
-  EFI_DEVICE_PATH_PROTOCOL         *ParentDevicePath;\r
-  SD_DRIVER_PRIVATE_DATA           *Private;\r
-  UINT8                            Slot;\r
+  EFI_STATUS                     Status;\r
+  EFI_SD_MMC_PASS_THRU_PROTOCOL  *PassThru;\r
+  EFI_DEVICE_PATH_PROTOCOL       *ParentDevicePath;\r
+  SD_DRIVER_PRIVATE_DATA         *Private;\r
+  UINT8                          Slot;\r
 \r
   Private  = NULL;\r
   PassThru = NULL;\r
-  Status = gBS->OpenProtocol (\r
-                  Controller,\r
-                  &gEfiSdMmcPassThruProtocolGuid,\r
-                  (VOID **) &PassThru,\r
-                  This->DriverBindingHandle,\r
-                  Controller,\r
-                  EFI_OPEN_PROTOCOL_BY_DRIVER\r
-                  );\r
+  Status   = gBS->OpenProtocol (\r
+                    Controller,\r
+                    &gEfiSdMmcPassThruProtocolGuid,\r
+                    (VOID **)&PassThru,\r
+                    This->DriverBindingHandle,\r
+                    Controller,\r
+                    EFI_OPEN_PROTOCOL_BY_DRIVER\r
+                    );\r
   if ((EFI_ERROR (Status)) && (Status != EFI_ALREADY_STARTED)) {\r
     return Status;\r
   }\r
@@ -604,7 +610,7 @@ SdDxeDriverBindingStart (
     Status = gBS->OpenProtocol (\r
                     Controller,\r
                     &gEfiDevicePathProtocolGuid,\r
-                    (VOID **) &ParentDevicePath,\r
+                    (VOID **)&ParentDevicePath,\r
                     This->DriverBindingHandle,\r
                     Controller,\r
                     EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -628,7 +634,7 @@ SdDxeDriverBindingStart (
     Status = gBS->OpenProtocol (\r
                     Controller,\r
                     &gEfiCallerIdGuid,\r
-                    (VOID **) &Private,\r
+                    (VOID **)&Private,\r
                     This->DriverBindingHandle,\r
                     Controller,\r
                     EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -673,14 +679,15 @@ Error:
 \r
     if (Private != NULL) {\r
       gBS->UninstallMultipleProtocolInterfaces (\r
-           Controller,\r
-           &gEfiCallerIdGuid,\r
-           Private,\r
-           NULL\r
-           );\r
+             Controller,\r
+             &gEfiCallerIdGuid,\r
+             Private,\r
+             NULL\r
+             );\r
       FreePool (Private);\r
     }\r
   }\r
+\r
   return Status;\r
 }\r
 \r
@@ -713,30 +720,30 @@ Error:
 EFI_STATUS\r
 EFIAPI\r
 SdDxeDriverBindingStop (\r
-  IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
-  IN  EFI_HANDLE                      Controller,\r
-  IN  UINTN                           NumberOfChildren,\r
-  IN  EFI_HANDLE                      *ChildHandleBuffer\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN  EFI_HANDLE                   Controller,\r
+  IN  UINTN                        NumberOfChildren,\r
+  IN  EFI_HANDLE                   *ChildHandleBuffer\r
   )\r
 {\r
-  EFI_STATUS                          Status;\r
-  BOOLEAN                             AllChildrenStopped;\r
-  UINTN                               Index;\r
-  SD_DRIVER_PRIVATE_DATA              *Private;\r
-  SD_DEVICE                           *Device;\r
-  EFI_SD_MMC_PASS_THRU_PROTOCOL       *PassThru;\r
-  EFI_BLOCK_IO2_PROTOCOL              *BlockIo2;\r
-  EFI_BLOCK_IO_PROTOCOL               *BlockIo;\r
-  LIST_ENTRY                          *Link;\r
-  LIST_ENTRY                          *NextLink;\r
-  SD_REQUEST                          *Request;\r
-  EFI_TPL                             OldTpl;\r
+  EFI_STATUS                     Status;\r
+  BOOLEAN                        AllChildrenStopped;\r
+  UINTN                          Index;\r
+  SD_DRIVER_PRIVATE_DATA         *Private;\r
+  SD_DEVICE                      *Device;\r
+  EFI_SD_MMC_PASS_THRU_PROTOCOL  *PassThru;\r
+  EFI_BLOCK_IO2_PROTOCOL         *BlockIo2;\r
+  EFI_BLOCK_IO_PROTOCOL          *BlockIo;\r
+  LIST_ENTRY                     *Link;\r
+  LIST_ENTRY                     *NextLink;\r
+  SD_REQUEST                     *Request;\r
+  EFI_TPL                        OldTpl;\r
 \r
   if (NumberOfChildren == 0) {\r
     Status = gBS->OpenProtocol (\r
                     Controller,\r
                     &gEfiCallerIdGuid,\r
-                    (VOID **) &Private,\r
+                    (VOID **)&Private,\r
                     This->DriverBindingHandle,\r
                     Controller,\r
                     EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -746,16 +753,16 @@ SdDxeDriverBindingStop (
     }\r
 \r
     gBS->UninstallProtocolInterface (\r
-          Controller,\r
-          &gEfiCallerIdGuid,\r
-          Private\r
-          );\r
+           Controller,\r
+           &gEfiCallerIdGuid,\r
+           Private\r
+           );\r
     gBS->CloseProtocol (\r
-          Controller,\r
-          &gEfiSdMmcPassThruProtocolGuid,\r
-          This->DriverBindingHandle,\r
-          Controller\r
-          );\r
+           Controller,\r
+           &gEfiSdMmcPassThruProtocolGuid,\r
+           This->DriverBindingHandle,\r
+           Controller\r
+           );\r
 \r
     FreePool (Private);\r
 \r
@@ -767,19 +774,19 @@ SdDxeDriverBindingStop (
   for (Index = 0; Index < NumberOfChildren; Index++) {\r
     BlockIo  = NULL;\r
     BlockIo2 = NULL;\r
-    Status = gBS->OpenProtocol (\r
-                    ChildHandleBuffer[Index],\r
-                    &gEfiBlockIoProtocolGuid,\r
-                    (VOID **) &BlockIo,\r
-                    This->DriverBindingHandle,\r
-                    Controller,\r
-                    EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                    );\r
+    Status   = gBS->OpenProtocol (\r
+                      ChildHandleBuffer[Index],\r
+                      &gEfiBlockIoProtocolGuid,\r
+                      (VOID **)&BlockIo,\r
+                      This->DriverBindingHandle,\r
+                      Controller,\r
+                      EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+                      );\r
     if (EFI_ERROR (Status)) {\r
       Status = gBS->OpenProtocol (\r
                       ChildHandleBuffer[Index],\r
                       &gEfiBlockIo2ProtocolGuid,\r
-                      (VOID **) &BlockIo2,\r
+                      (VOID **)&BlockIo2,\r
                       This->DriverBindingHandle,\r
                       Controller,\r
                       EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
@@ -803,7 +810,8 @@ SdDxeDriverBindingStop (
     OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
     for (Link = GetFirstNode (&Device->Queue);\r
          !IsNull (&Device->Queue, Link);\r
-         Link = NextLink) {\r
+         Link = NextLink)\r
+    {\r
       NextLink = GetNextNode (&Device->Queue, Link);\r
       RemoveEntryList (Link);\r
 \r
@@ -818,6 +826,7 @@ SdDxeDriverBindingStop (
 \r
       FreePool (Request);\r
     }\r
+\r
     gBS->RestoreTPL (OldTpl);\r
 \r
     //\r
@@ -840,18 +849,20 @@ SdDxeDriverBindingStop (
                     &Device->BlockIo2,\r
                     &gEfiEraseBlockProtocolGuid,\r
                     &Device->EraseBlock,\r
+                    &gEfiDiskInfoProtocolGuid,\r
+                    &Device->DiskInfo,\r
                     NULL\r
                     );\r
     if (EFI_ERROR (Status)) {\r
       AllChildrenStopped = FALSE;\r
-        gBS->OpenProtocol (\r
-               Controller,\r
-               &gEfiSdMmcPassThruProtocolGuid,\r
-               (VOID **)&PassThru,\r
-               This->DriverBindingHandle,\r
-               ChildHandleBuffer[Index],\r
-               EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
-               );\r
+      gBS->OpenProtocol (\r
+             Controller,\r
+             &gEfiSdMmcPassThruProtocolGuid,\r
+             (VOID **)&PassThru,\r
+             This->DriverBindingHandle,\r
+             ChildHandleBuffer[Index],\r
+             EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+             );\r
     } else {\r
       FreePool (Device->DevicePath);\r
       FreeUnicodeStringTable (Device->ControllerNameTable);\r
@@ -879,11 +890,11 @@ SdDxeDriverBindingStop (
 EFI_STATUS\r
 EFIAPI\r
 InitializeSdDxe (\r
-  IN EFI_HANDLE           ImageHandle,\r
-  IN EFI_SYSTEM_TABLE     *SystemTable\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
 {\r
-  EFI_STATUS              Status;\r
+  EFI_STATUS  Status;\r
 \r
   //\r
   // Install driver model protocol(s).\r
@@ -900,4 +911,3 @@ InitializeSdDxe (
 \r
   return Status;\r
 }\r
-\r