ACPICA: acpidump: Add support for ACPI 1.0 GUID in Linux
For older EFI platforms, searches for the RSDP using ACPI 1.0 GUID if the 2.0 GUID search fails. Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: David E. Box <david.e.box@linux.intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
8aa5e56eeb
commit
890fbfa051
|
@ -77,6 +77,9 @@ osl_map_table(acpi_size address,
|
|||
|
||||
static void osl_unmap_table(struct acpi_table_header *table);
|
||||
|
||||
static acpi_physical_address
|
||||
osl_find_rsdp_via_efi_by_keyword(FILE * file, const char *keyword);
|
||||
|
||||
static acpi_physical_address osl_find_rsdp_via_efi(void);
|
||||
|
||||
static acpi_status osl_load_rsdp(void);
|
||||
|
@ -415,6 +418,38 @@ acpi_os_get_table_by_index(u32 index,
|
|||
return (status);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: osl_find_rsdp_via_efi_by_keyword
|
||||
*
|
||||
* PARAMETERS: keyword - Character string indicating ACPI GUID version
|
||||
* in the EFI table
|
||||
*
|
||||
* RETURN: RSDP address if found
|
||||
*
|
||||
* DESCRIPTION: Find RSDP address via EFI using keyword indicating the ACPI
|
||||
* GUID version.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
static acpi_physical_address
|
||||
osl_find_rsdp_via_efi_by_keyword(FILE * file, const char *keyword)
|
||||
{
|
||||
char buffer[80];
|
||||
unsigned long long address = 0;
|
||||
char format[32];
|
||||
|
||||
snprintf(format, 32, "%s=%s", keyword, "%llx");
|
||||
fseek(file, 0, SEEK_SET);
|
||||
while (fgets(buffer, 80, file)) {
|
||||
if (sscanf(buffer, format, &address) == 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ((acpi_physical_address) (address));
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: osl_find_rsdp_via_efi
|
||||
|
@ -430,20 +465,19 @@ acpi_os_get_table_by_index(u32 index,
|
|||
static acpi_physical_address osl_find_rsdp_via_efi(void)
|
||||
{
|
||||
FILE *file;
|
||||
char buffer[80];
|
||||
unsigned long address = 0;
|
||||
acpi_physical_address address = 0;
|
||||
|
||||
file = fopen(EFI_SYSTAB, "r");
|
||||
if (file) {
|
||||
while (fgets(buffer, 80, file)) {
|
||||
if (sscanf(buffer, "ACPI20=0x%lx", &address) == 1) {
|
||||
break;
|
||||
}
|
||||
address = osl_find_rsdp_via_efi_by_keyword(file, "ACPI20");
|
||||
if (!address) {
|
||||
address =
|
||||
osl_find_rsdp_via_efi_by_keyword(file, "ACPI");
|
||||
}
|
||||
fclose(file);
|
||||
}
|
||||
|
||||
return ((acpi_physical_address) (address));
|
||||
return (address);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
|
|
Loading…
Reference in a new issue