summaryrefslogtreecommitdiffstats
path: root/NetworkPkg/IScsiDxe
diff options
context:
space:
mode:
authorZhang Lubo <lubo.zhang@intel.com>2016-08-11 10:14:55 +0800
committerJiaxin Wu <jiaxin.wu@intel.com>2016-08-18 13:54:01 +0800
commit79d909849c0e3d6a40989473accfee95e2c3660e (patch)
tree9d1ba4dbcf204646fc81b99610a1f64f9763422e /NetworkPkg/IScsiDxe
parent998731099efd13edcd64cdd375a890a85f57ee6a (diff)
downloadedk2-79d909849c0e3d6a40989473accfee95e2c3660e.tar.gz
edk2-79d909849c0e3d6a40989473accfee95e2c3660e.tar.bz2
edk2-79d909849c0e3d6a40989473accfee95e2c3660e.zip
NetworkPkg: Refine codes of iSCSI driver
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>
Diffstat (limited to 'NetworkPkg/IScsiDxe')
-rw-r--r--NetworkPkg/IScsiDxe/IScsiIbft.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/NetworkPkg/IScsiDxe/IScsiIbft.c b/NetworkPkg/IScsiDxe/IScsiIbft.c
index 3c179bfc51..27d098d578 100644
--- a/NetworkPkg/IScsiDxe/IScsiIbft.c
+++ b/NetworkPkg/IScsiDxe/IScsiIbft.c
@@ -456,10 +456,12 @@ IScsiPublishIbft (
EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER *Table;
EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp;
EFI_ACPI_DESCRIPTION_HEADER *Rsdt;
+ EFI_ACPI_DESCRIPTION_HEADER *Xsdt;
UINT8 *Heap;
UINT8 Checksum;
- UINTN Index;
+ Rsdt = NULL;
+ Xsdt = NULL;
Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **) &AcpiTableProtocol);
if (EFI_ERROR (Status)) {
@@ -469,25 +471,23 @@ IScsiPublishIbft (
//
// Find ACPI table RSD_PTR from the system table.
//
- for (Index = 0, Rsdp = NULL; Index < gST->NumberOfTableEntries; Index++) {
- if (CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpi20TableGuid) ||
- CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpi10TableGuid) ||
- CompareGuid (&(gST->ConfigurationTable[Index].VendorGuid), &gEfiAcpiTableGuid)
- ) {
- //
- // A match was found.
- //
- Rsdp = (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *) gST->ConfigurationTable[Index].VendorTable;
- break;
- }
+ Status = EfiGetSystemConfigurationTable (&gEfiAcpiTableGuid, (VOID **) &Rsdp);
+ if (EFI_ERROR (Status)) {
+ Status = EfiGetSystemConfigurationTable (&gEfiAcpi10TableGuid, (VOID **) &Rsdp);
}
- if (Rsdp == NULL) {
+ if (EFI_ERROR (Status) || (Rsdp == NULL)) {
return ;
- } else {
+ } else if (Rsdp->Revision >= EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION && Rsdp->XsdtAddress != 0) {
+ Xsdt = (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->XsdtAddress;
+ } else if (Rsdp->RsdtAddress != 0) {
Rsdt = (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->RsdtAddress;
}
+ if ((Xsdt == NULL) && (Rsdt == NULL)) {
+ return ;
+ }
+
if (mIbftInstalled) {
Status = AcpiTableProtocol->UninstallAcpiTable (
AcpiTableProtocol,
@@ -520,7 +520,12 @@ IScsiPublishIbft (
//
// Fill in the various section of the iSCSI Boot Firmware Table.
//
- IScsiInitIbfTableHeader (Table, Rsdt->OemId, &Rsdt->OemTableId);
+ if (Rsdp->Revision >= EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION) {
+ IScsiInitIbfTableHeader (Table, Xsdt->OemId, &Xsdt->OemTableId);
+ } else {
+ IScsiInitIbfTableHeader (Table, Rsdt->OemId, &Rsdt->OemTableId);
+ }
+
IScsiInitControlSection (Table);
IScsiFillInitiatorSection (Table, &Heap);
IScsiFillNICAndTargetSections (Table, &Heap);