return Adjacent;\r
}\r
\r
-/**\r
- This function find ACPI table with the specified signature in RSDT or XSDT.\r
-\r
- @param Sdt ACPI RSDT or XSDT.\r
- @param Signature ACPI table signature.\r
- @param TablePointerSize Size of table pointer: 4 or 8.\r
-\r
- @return ACPI table or NULL if not found.\r
-**/\r
-VOID *\r
-ScanTableInSDT (\r
- IN EFI_ACPI_DESCRIPTION_HEADER *Sdt,\r
- IN UINT32 Signature,\r
- IN UINTN TablePointerSize\r
- )\r
-{\r
- UINTN Index;\r
- UINTN EntryCount;\r
- UINTN EntryBase;\r
- EFI_ACPI_DESCRIPTION_HEADER *Table;\r
-\r
- EntryCount = (Sdt->Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / TablePointerSize;\r
-\r
- EntryBase = (UINTN) (Sdt + 1);\r
- for (Index = 0; Index < EntryCount; Index++) {\r
- //\r
- // When TablePointerSize is 4 while sizeof (VOID *) is 8, make sure the upper 4 bytes are zero.\r
- //\r
- Table = 0;\r
- CopyMem (&Table, (VOID *) (EntryBase + Index * TablePointerSize), TablePointerSize);\r
-\r
- if (Table == NULL) {\r
- continue;\r
- }\r
-\r
- if (Table->Signature == Signature) {\r
- return Table;\r
- }\r
- }\r
-\r
- return NULL;\r
-}\r
-\r
/**\r
Get the century RTC address from the ACPI FADT table.\r
\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp;\r
EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt;\r
\r
- Status = EfiGetSystemConfigurationTable (&gEfiAcpiTableGuid, (VOID **) &Rsdp);\r
- if (EFI_ERROR (Status)) {\r
- Status = EfiGetSystemConfigurationTable (&gEfiAcpi10TableGuid, (VOID **) &Rsdp);\r
- }\r
-\r
- if (EFI_ERROR (Status) || (Rsdp == NULL)) {\r
- return 0;\r
- }\r
-\r
- Fadt = NULL;\r
-\r
- //\r
- // Find FADT in XSDT\r
- //\r
- if (Rsdp->Revision >= EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION && Rsdp->XsdtAddress != 0) {\r
- Fadt = ScanTableInSDT (\r
- (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->XsdtAddress,\r
- EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,\r
- sizeof (UINTN)\r
- );\r
- }\r
-\r
- //\r
- // Find FADT in RSDT\r
- //\r
- if (Fadt == NULL && Rsdp->RsdtAddress != 0) {\r
- Fadt = ScanTableInSDT (\r
- (EFI_ACPI_DESCRIPTION_HEADER *) (UINTN) Rsdp->RsdtAddress,\r
- EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,\r
- sizeof (UINT32)\r
- );\r
- }\r
+ Fadt = (EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *) EfiLocateFirstAcpiTable (\r
+ EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE\r
+ );\r
\r
if ((Fadt != NULL) &&\r
(Fadt->Century > RTC_ADDRESS_REGISTER_D) && (Fadt->Century < 0x80)\r