mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-29 16:44:10 +02:00
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 <feng.tian@intel.com> Cc: Zhang Chao B <chao.b.zhang@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Chao Zhang <chao.b.zhang@intel.com>
This commit is contained in:
parent
6596018924
commit
6558fd7311
@ -75,35 +75,49 @@ RamDiskPublishSsdt (
|
|||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_ACPI_DESCRIPTION_HEADER *Table;
|
EFI_ACPI_DESCRIPTION_HEADER *Table;
|
||||||
|
UINTN SectionInstance;
|
||||||
UINTN TableSize;
|
UINTN TableSize;
|
||||||
|
|
||||||
Status = GetSectionFromFv (
|
Status = EFI_SUCCESS;
|
||||||
&gEfiCallerIdGuid,
|
SectionInstance = 0;
|
||||||
EFI_SECTION_RAW,
|
|
||||||
1,
|
|
||||||
(VOID **) &Table,
|
|
||||||
&TableSize
|
|
||||||
);
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
|
||||||
|
|
||||||
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 (
|
if (Table->OemTableId == SIGNATURE_64 ('R', 'a', 'm', 'D', 'i', 's', 'k', ' ')) {
|
||||||
mAcpiTableProtocol,
|
Status = mAcpiTableProtocol->InstallAcpiTable (
|
||||||
Table,
|
mAcpiTableProtocol,
|
||||||
TableSize,
|
Table,
|
||||||
&mRamDiskSsdtTableKey
|
TableSize,
|
||||||
);
|
&mRamDiskSsdtTableKey
|
||||||
ASSERT_EFI_ERROR (Status);
|
);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
mRamDiskSsdtTableKeyValid = TRUE;
|
mRamDiskSsdtTableKeyValid = TRUE;
|
||||||
} else {
|
}
|
||||||
mRamDiskSsdtTableKeyValid = FALSE;
|
|
||||||
|
FreePool (Table);
|
||||||
|
return Status;
|
||||||
|
} else {
|
||||||
|
FreePool (Table);
|
||||||
|
SectionInstance++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FreePool (Table);
|
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user