\r
#include "SdMmcPciHcDxe.h"\r
\r
+EDKII_SD_MMC_OVERRIDE *mOverride;\r
+\r
//\r
// Driver Global Variables\r
//\r
//\r
// Reset the specified slot of the SD/MMC Pci Host Controller\r
//\r
- Status = SdMmcHcReset (Private->PciIo, Slot);\r
+ Status = SdMmcHcReset (Private, Slot);\r
if (EFI_ERROR (Status)) {\r
continue;\r
}\r
//\r
// Reinitialize slot and restart identification process for the new attached device\r
//\r
- Status = SdMmcHcInitHost (Private->PciIo, Slot, Private->Capability[Slot]);\r
+ Status = SdMmcHcInitHost (Private, Slot);\r
if (EFI_ERROR (Status)) {\r
continue;\r
}\r
goto Done;\r
}\r
\r
+ //\r
+ // Attempt to locate the singleton instance of the SD/MMC override protocol,\r
+ // which implements platform specific workarounds for non-standard SDHCI\r
+ // implementations.\r
+ //\r
+ if (mOverride == NULL) {\r
+ Status = gBS->LocateProtocol (&gEdkiiSdMmcOverrideProtocolGuid, NULL,\r
+ (VOID **)&mOverride);\r
+ if (!EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_INFO, "%a: found SD/MMC override protocol\n",\r
+ __FUNCTION__));\r
+ }\r
+ }\r
+\r
Support64BitDma = TRUE;\r
for (Slot = FirstBar; Slot < (FirstBar + SlotNum); Slot++) {\r
Private->Slot[Slot].Enable = TRUE;\r
if (EFI_ERROR (Status)) {\r
continue;\r
}\r
+ if (mOverride != NULL && mOverride->Capability != NULL) {\r
+ Status = mOverride->Capability (\r
+ Controller,\r
+ Slot,\r
+ &Private->Capability[Slot]);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_WARN, "%a: Failed to override capability - %r\n",\r
+ __FUNCTION__, Status));\r
+ continue;\r
+ }\r
+ }\r
DumpCapabilityReg (Slot, &Private->Capability[Slot]);\r
\r
Support64BitDma &= Private->Capability[Slot].SysBus64;\r
//\r
// Reset the specified slot of the SD/MMC Pci Host Controller\r
//\r
- Status = SdMmcHcReset (PciIo, Slot);\r
+ Status = SdMmcHcReset (Private, Slot);\r
if (EFI_ERROR (Status)) {\r
continue;\r
}\r
continue;\r
}\r
\r
- Status = SdMmcHcInitHost (PciIo, Slot, Private->Capability[Slot]);\r
+ Status = SdMmcHcInitHost (Private, Slot);\r
if (EFI_ERROR (Status)) {\r
continue;\r
}\r
}\r
\r
Done:\r
- if ((Trb != NULL) && (Trb->AdmaDesc != NULL)) {\r
- FreePages (Trb->AdmaDesc, Trb->AdmaPages);\r
- }\r
-\r
- if (Trb != NULL) {\r
- FreePool (Trb);\r
- }\r
+ SdMmcFreeTrb (Trb);\r
\r
return Status;\r
}\r