]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg RamDiskDxe: Not use hardcode 'SectionInstance' to locate SSDT
authorHao Wu <hao.a.wu@intel.com>
Tue, 12 Jul 2016 12:10:42 +0000 (20:10 +0800)
committerHao Wu <hao.a.wu@intel.com>
Wed, 20 Jul 2016 07:07:19 +0000 (15:07 +0800)
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>
MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskProtocol.c

index 9383de496f6776df7767c9279c760483bcdc3a1a..6784e2b2f1e9c89a44ba6d71be9400e42897988a 100644 (file)
@@ -75,35 +75,49 @@ RamDiskPublishSsdt (
 {\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