{\r
EFI_STATUS Status;\r
EFI_ACPI_DESCRIPTION_HEADER *Table;\r
+ UINTN SectionInstance;\r
UINTN TableSize;\r
\r
- Status = GetSectionFromFv (\r
- &gEfiCallerIdGuid,\r
- EFI_SECTION_RAW,\r
- 1,\r
- (VOID **) &Table,\r
- &TableSize\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ Status = EFI_SUCCESS;\r
+ SectionInstance = 0;\r
\r
- ASSERT (Table->OemTableId == SIGNATURE_64 ('R', 'a', 'm', 'D', 'i', 's', 'k', ' '));\r
+ //\r
+ // Scan all the EFI raw section instances in FV to find the NVDIMM root\r
+ // device SSDT.\r
+ //\r
+ while (TRUE) {\r
+ Status = GetSectionFromFv (\r
+ &gEfiCallerIdGuid,\r
+ EFI_SECTION_RAW,\r
+ SectionInstance,\r
+ (VOID **) &Table,\r
+ &TableSize\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ break;\r
+ }\r
\r
- Status = mAcpiTableProtocol->InstallAcpiTable (\r
- mAcpiTableProtocol,\r
- Table,\r
- TableSize,\r
- &mRamDiskSsdtTableKey\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ if (Table->OemTableId == SIGNATURE_64 ('R', 'a', 'm', 'D', 'i', 's', 'k', ' ')) {\r
+ Status = mAcpiTableProtocol->InstallAcpiTable (\r
+ mAcpiTableProtocol,\r
+ Table,\r
+ TableSize,\r
+ &mRamDiskSsdtTableKey\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ if (!EFI_ERROR (Status)) {\r
+ mRamDiskSsdtTableKeyValid = TRUE;\r
+ }\r
\r
- if (!EFI_ERROR (Status)) {\r
- mRamDiskSsdtTableKeyValid = TRUE;\r
- } else {\r
- mRamDiskSsdtTableKeyValid = FALSE;\r
+ FreePool (Table);\r
+ return Status;\r
+ } else {\r
+ FreePool (Table);\r
+ SectionInstance++;\r
+ }\r
}\r
\r
- FreePool (Table);\r
-\r
return Status;\r
}\r
\r