SHELL_FREE_NON_NULL (StringPtrUnknown);\r
}\r
\r
-/**\r
- This function scan ACPI table in RSDT.\r
-\r
- @param Rsdt ACPI RSDT\r
- @param Signature ACPI table signature\r
-\r
- @return ACPI table\r
-**/\r
-VOID *\r
-ScanTableInRSDT (\r
- IN RSDT_TABLE *Rsdt,\r
- IN UINT32 Signature\r
- )\r
-{\r
- UINTN Index;\r
- UINT32 EntryCount;\r
- UINT32 *EntryPtr;\r
- EFI_ACPI_DESCRIPTION_HEADER *Table;\r
-\r
- EntryCount = (Rsdt->Header.Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof(UINT32);\r
-\r
- EntryPtr = &Rsdt->Entry;\r
- for (Index = 0; Index < EntryCount; Index ++, EntryPtr ++) {\r
- Table = (EFI_ACPI_DESCRIPTION_HEADER*)((UINTN)(*EntryPtr));\r
- if (Table->Signature == Signature) {\r
- return Table;\r
- }\r
- }\r
-\r
- return NULL;\r
-}\r
-\r
-/**\r
- This function scan ACPI table in XSDT.\r
-\r
- @param Xsdt ACPI XSDT\r
- @param Signature ACPI table signature\r
-\r
- @return ACPI table\r
-**/\r
-VOID *\r
-ScanTableInXSDT (\r
- IN XSDT_TABLE *Xsdt,\r
- IN UINT32 Signature\r
- )\r
-{\r
- UINTN Index;\r
- UINT32 EntryCount;\r
- UINT64 EntryPtr;\r
- UINTN BasePtr;\r
- EFI_ACPI_DESCRIPTION_HEADER *Table;\r
-\r
- EntryCount = (Xsdt->Header.Length - sizeof (EFI_ACPI_DESCRIPTION_HEADER)) / sizeof(UINT64);\r
-\r
- BasePtr = (UINTN)(&(Xsdt->Entry));\r
- for (Index = 0; Index < EntryCount; Index ++) {\r
- CopyMem (&EntryPtr, (VOID *)(BasePtr + Index * sizeof(UINT64)), sizeof(UINT64));\r
- Table = (EFI_ACPI_DESCRIPTION_HEADER*)((UINTN)(EntryPtr));\r
- if (Table->Signature == Signature) {\r
- return Table;\r
- }\r
- }\r
-\r
- return NULL;\r
-}\r
-\r
-/**\r
- This function scan ACPI table in RSDP.\r
-\r
- @param Rsdp ACPI RSDP\r
- @param Signature ACPI table signature\r
-\r
- @return ACPI table\r
-**/\r
-VOID *\r
-FindAcpiPtr (\r
- IN EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER *Rsdp,\r
- IN UINT32 Signature\r
- )\r
-{\r
- EFI_ACPI_DESCRIPTION_HEADER *AcpiTable;\r
- RSDT_TABLE *Rsdt;\r
- XSDT_TABLE *Xsdt;\r
-\r
- AcpiTable = NULL;\r
-\r
- //\r
- // Check ACPI2.0 table\r
- //\r
- Rsdt = (RSDT_TABLE *)(UINTN)Rsdp->RsdtAddress;\r
- Xsdt = NULL;\r
- if ((Rsdp->Revision >= 2) && (Rsdp->XsdtAddress < (UINT64)(UINTN)-1)) {\r
- Xsdt = (XSDT_TABLE *)(UINTN)Rsdp->XsdtAddress;\r
- }\r
- //\r
- // Check Xsdt\r
- //\r
- if (Xsdt != NULL) {\r
- AcpiTable = ScanTableInXSDT (Xsdt, Signature);\r
- }\r
- //\r
- // Check Rsdt\r
- //\r
- if ((AcpiTable == NULL) && (Rsdt != NULL)) {\r
- AcpiTable = ScanTableInRSDT (Rsdt, Signature);\r
- }\r
-\r
- return AcpiTable;\r
-}\r
-\r
/**\r
Get Boot performance table form Acpi table.\r
\r
GetBootPerformanceTable (\r
)\r
{\r
- EFI_STATUS Status;\r
- VOID *AcpiTable;\r
FIRMWARE_PERFORMANCE_TABLE *FirmwarePerformanceTable;\r
\r
- AcpiTable = NULL;\r
-\r
- Status = EfiGetSystemConfigurationTable (\r
- &gEfiAcpi20TableGuid,\r
- &AcpiTable\r
- );\r
- if (EFI_ERROR (Status)) {\r
- Status = EfiGetSystemConfigurationTable (\r
- &gEfiAcpi10TableGuid,\r
- &AcpiTable\r
- );\r
- }\r
- if (EFI_ERROR(Status) || AcpiTable == NULL) {\r
- ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_GET_ACPI_TABLE_FAIL), mDpHiiHandle);\r
- return Status;\r
- }\r
-\r
- FirmwarePerformanceTable = FindAcpiPtr (\r
- (EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)AcpiTable,\r
- EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE\r
- );\r
+ FirmwarePerformanceTable = (FIRMWARE_PERFORMANCE_TABLE *) EfiLocateFirstAcpiTable (\r
+ EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE\r
+ );\r
if (FirmwarePerformanceTable == NULL) {\r
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DP_GET_ACPI_FPDT_FAIL), mDpHiiHandle);\r
return EFI_NOT_FOUND;\r