summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
9987310)
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>
EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER *Table;\r
EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp;\r
EFI_ACPI_DESCRIPTION_HEADER *Rsdt;\r
EFI_ACPI_ISCSI_BOOT_FIRMWARE_TABLE_HEADER *Table;\r
EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp;\r
EFI_ACPI_DESCRIPTION_HEADER *Rsdt;\r
+ EFI_ACPI_DESCRIPTION_HEADER *Xsdt;\r
UINT8 *Heap;\r
UINT8 Checksum;\r
UINT8 *Heap;\r
UINT8 Checksum;\r
+ Rsdt = NULL;\r
+ Xsdt = NULL;\r
\r
Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **) &AcpiTableProtocol);\r
if (EFI_ERROR (Status)) {\r
\r
Status = gBS->LocateProtocol (&gEfiAcpiTableProtocolGuid, NULL, (VOID **) &AcpiTableProtocol);\r
if (EFI_ERROR (Status)) {\r
//\r
// Find ACPI table RSD_PTR from the system table.\r
//\r
//\r
// Find ACPI table RSD_PTR from the 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
+ if (EFI_ERROR (Status) || (Rsdp == NULL)) {\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
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
AcpiTableProtocol,\r
if (mIbftInstalled) {\r
Status = AcpiTableProtocol->UninstallAcpiTable (\r
AcpiTableProtocol,\r
//\r
// Fill in the various section of the iSCSI Boot Firmware Table.\r
//\r
//\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);\r
IScsiFillInitiatorSection (Table, &Heap);\r
IScsiFillNICAndTargetSections (Table, &Heap);\r
IScsiInitControlSection (Table);\r
IScsiFillInitiatorSection (Table, &Heap);\r
IScsiFillNICAndTargetSections (Table, &Heap);\r