]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg: Refine codes of iSCSI driver
authorZhang Lubo <lubo.zhang@intel.com>
Thu, 11 Aug 2016 02:24:10 +0000 (10:24 +0800)
committerJiaxin Wu <jiaxin.wu@intel.com>
Thu, 18 Aug 2016 05:53:55 +0000 (13:53 +0800)
The RSDT is only used when the bios need to support ACPI 1.0
version. When change PcdAcpiExposedTableVersions to 0x3C, it
will not support ACPI 1.0. The default is 0x3E.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo <lubo.zhang@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Ye Ting <ting.ye@intel.com>
Cc: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
MdeModulePkg/Universal/Network/IScsiDxe/IScsiIbft.c

index e5f685fc6db88fca3f87343efbe4923329d4c4c2..45d89a6933de548689da2d7acfb89f9e44d07e4c 100644 (file)
@@ -436,9 +436,12 @@ IScsiPublishIbft (
   EFI_HANDLE                                *HandleBuffer;\r
   UINT8                                     *Heap;\r
   UINT8                                     Checksum;\r
-  UINTN                                         Index;\r
   EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER  *Rsdp;\r
   EFI_ACPI_DESCRIPTION_HEADER                   *Rsdt;\r
+  EFI_ACPI_DESCRIPTION_HEADER                   *Xsdt;\r
+\r
+  Rsdt = NULL;\r
+  Xsdt = NULL;\r
 \r
   Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **)&AcpiTableProtocol);\r
   if (EFI_ERROR (Status)) {\r
@@ -449,25 +452,22 @@ IScsiPublishIbft (
   //\r
   // Find ACPI table RSD_PTR from system table\r
   //\r
-  for (Index = 0, Rsdp = NULL; Index < gST->NumberOfTableEntries; Index++) {\r
-    if (CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpi20TableGuid) ||\r
-      CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpi10TableGuid) ||\r
-      CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpiTableGuid)\r
-      ) {\r
-      //\r
-      // A match was found.\r
-      //\r
-      Rsdp = (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) gST->ConfigurationTable[Index].VendorTable;\r
-      break;\r
-    }\r
+  Status = EfiGetSystemConfigurationTable (&gEfiAcpiTableGuid, (VOID **) &Rsdp);\r
+  if (EFI_ERROR (Status)) {\r
+    Status = EfiGetSystemConfigurationTable (&gEfiAcpi10TableGuid, (VOID **) &Rsdp);\r
   }\r
 \r
-  if (Rsdp == NULL) {\r
+  if (EFI_ERROR (Status) || (Rsdp == NULL)) {\r
     return ;\r
-  } else {\r
+  } else if (Rsdp->Revision >= EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION && Rsdp->XsdtAddress != 0) {\r
+    Xsdt = (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->XsdtAddress;\r
+  } else if (Rsdp->RsdtAddress != 0) {\r
     Rsdt = (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->RsdtAddress;\r
   }\r
 \r
+  if ((Xsdt == NULL) && (Rsdt == NULL)) {\r
+    return ;\r
+  }\r
 \r
   if (mIbftInstalled) {\r
     Status = AcpiTableProtocol->UninstallAcpiTable (\r
@@ -506,7 +506,12 @@ IScsiPublishIbft (
   //\r
   // Fill in the various section of the iSCSI Boot Firmware Table.\r
   //\r
-  IScsiInitIbfTableHeader (Table, Rsdt->OemId, &Rsdt->OemTableId);\r
+  if (Rsdp->Revision >= EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION) {\r
+    IScsiInitIbfTableHeader (Table, Xsdt->OemId, &Xsdt->OemTableId);\r
+  } else {\r
+    IScsiInitIbfTableHeader (Table, Rsdt->OemId, &Rsdt->OemTableId);\r
+  }\r
+\r
   IScsiInitControlSection (Table, HandleCount);\r
   IScsiFillInitiatorSection (Table, &Heap, HandleBuffer[0]);\r
   IScsiFillNICAndTargetSections (Table, &Heap, HandleCount, HandleBuffer);\r