From 6558fd73117c0df2285a4e16d562115386f5b46b Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 12 Jul 2016 20:10:42 +0800 Subject: MdeModulePkg RamDiskDxe: Not use hardcode 'SectionInstance' to locate SSDT This commit will scan all the EFI raw section instances within the module's FV to make sure the NVDIMM root device SSDT can be properly located. Cc: Feng Tian Cc: Zhang Chao B Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu Reviewed-by: Chao Zhang --- .../Universal/Disk/RamDiskDxe/RamDiskProtocol.c | 58 ++++++++++++++-------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskProtocol.c b/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskProtocol.c index 9383de496f..6784e2b2f1 100644 --- a/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskProtocol.c +++ b/MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskProtocol.c @@ -75,35 +75,49 @@ RamDiskPublishSsdt ( { EFI_STATUS Status; EFI_ACPI_DESCRIPTION_HEADER *Table; + UINTN SectionInstance; UINTN TableSize; - Status = GetSectionFromFv ( - &gEfiCallerIdGuid, - EFI_SECTION_RAW, - 1, - (VOID **) &Table, - &TableSize - ); - ASSERT_EFI_ERROR (Status); + Status = EFI_SUCCESS; + SectionInstance = 0; - ASSERT (Table->OemTableId == SIGNATURE_64 ('R', 'a', 'm', 'D', 'i', 's', 'k', ' ')); + // + // Scan all the EFI raw section instances in FV to find the NVDIMM root + // device SSDT. + // + while (TRUE) { + Status = GetSectionFromFv ( + &gEfiCallerIdGuid, + EFI_SECTION_RAW, + SectionInstance, + (VOID **) &Table, + &TableSize + ); + if (EFI_ERROR (Status)) { + break; + } - Status = mAcpiTableProtocol->InstallAcpiTable ( - mAcpiTableProtocol, - Table, - TableSize, - &mRamDiskSsdtTableKey - ); - ASSERT_EFI_ERROR (Status); + if (Table->OemTableId == SIGNATURE_64 ('R', 'a', 'm', 'D', 'i', 's', 'k', ' ')) { + Status = mAcpiTableProtocol->InstallAcpiTable ( + mAcpiTableProtocol, + Table, + TableSize, + &mRamDiskSsdtTableKey + ); + ASSERT_EFI_ERROR (Status); + + if (!EFI_ERROR (Status)) { + mRamDiskSsdtTableKeyValid = TRUE; + } - if (!EFI_ERROR (Status)) { - mRamDiskSsdtTableKeyValid = TRUE; - } else { - mRamDiskSsdtTableKeyValid = FALSE; + FreePool (Table); + return Status; + } else { + FreePool (Table); + SectionInstance++; + } } - FreePool (Table); - return Status; } -- cgit v1.2.3