X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EmbeddedPkg%2FUniversal%2FMmcDxe%2FMmc.c;h=3b9dc187276ce190e8200c751b89aa3893a41871;hp=cfa9a51f50773b3d65c42cf6e50179ad61d32ad9;hb=76c09700edc67686b29662e81a3ca7d947594ce5;hpb=3de99375d289d2945192be9e38fce63224d27b21 diff --git a/EmbeddedPkg/Universal/MmcDxe/Mmc.c b/EmbeddedPkg/Universal/MmcDxe/Mmc.c index cfa9a51f50..3b9dc18727 100644 --- a/EmbeddedPkg/Universal/MmcDxe/Mmc.c +++ b/EmbeddedPkg/Universal/MmcDxe/Mmc.c @@ -1,27 +1,25 @@ /** @file Main file of the MMC Dxe driver. The driver entrypoint is defined into this file. - Copyright (c) 2011, ARM Limited. All rights reserved. - - This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php + Copyright (c) 2011-2013, ARM Limited. All rights reserved. - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ #include -#include #include #include #include #include #include -#include #include "Mmc.h" @@ -116,7 +114,7 @@ MMC_HOST_INSTANCE* CreateMmcHostInstance ( MmcHostInstance->MmcHost = MmcHost; // Create DevicePath for the new MMC Host - Status = MmcHost->BuildDevicePath(&NewDevicePathNode); + Status = MmcHost->BuildDevicePath (MmcHost, &NewDevicePathNode); if (EFI_ERROR (Status)) { goto FREE_MEDIA; } @@ -173,6 +171,9 @@ EFI_STATUS DestroyMmcHostInstance ( if (MmcHostInstance->BlockIo.Media) { FreePool(MmcHostInstance->BlockIo.Media); } + if (MmcHostInstance->CardInfo.ECSDData) { + FreePages (MmcHostInstance->CardInfo.ECSDData, EFI_SIZE_TO_PAGES (sizeof (ECSD))); + } FreePool (MmcHostInstance); return Status; @@ -248,7 +249,7 @@ MmcDriverBindingSupported ( } /** - + **/ EFI_STATUS EFIAPI @@ -299,13 +300,16 @@ MmcDriverBindingStart ( InsertMmcHost (MmcHostInstance); MmcHostInstance->Initialized = FALSE; + + // Detect card presence now + CheckCardsCallback (NULL, NULL); } return EFI_SUCCESS; } /** - + **/ EFI_STATUS EFIAPI @@ -361,11 +365,15 @@ CheckCardsCallback ( MmcHostInstance = MMC_HOST_INSTANCE_FROM_LINK(CurrentLink); ASSERT(MmcHostInstance != NULL); - if (MmcHostInstance->MmcHost->IsCardPresent() == !MmcHostInstance->Initialized) { + if (MmcHostInstance->MmcHost->IsCardPresent (MmcHostInstance->MmcHost) == !MmcHostInstance->Initialized) { MmcHostInstance->State = MmcHwInitializationState; MmcHostInstance->BlockIo.Media->MediaPresent = !MmcHostInstance->Initialized; MmcHostInstance->Initialized = !MmcHostInstance->Initialized; + if (MmcHostInstance->BlockIo.Media->MediaPresent) { + InitializeMmcDevice (MmcHostInstance); + } + Status = gBS->ReinstallProtocolInterface ( (MmcHostInstance->MmcHandle), &gEfiBlockIoProtocolGuid, @@ -382,6 +390,7 @@ CheckCardsCallback ( } } + EFI_DRIVER_BINDING_PROTOCOL gMmcDriverBinding = { MmcDriverBindingSupported, MmcDriverBindingStart, @@ -392,7 +401,7 @@ EFI_DRIVER_BINDING_PROTOCOL gMmcDriverBinding = { }; /** - + **/ EFI_STATUS EFIAPI @@ -436,8 +445,8 @@ MmcDxeInitialize ( CheckCardsCallback, NULL, &gCheckCardsEvent); - ASSERT_EFI_ERROR (Status); - + ASSERT_EFI_ERROR (Status); + Status = gBS->SetTimer( gCheckCardsEvent, TimerPeriodic,