kern/acpi: Use xsdt_addr if present

According to the ACPI specification, in ACPI 2.0 or later, an
ACPI-compatible OS must use the XSDT if present. So, we should
use xsdt_addr instead of rsdt_addr if xsdt_addr is valid.

Signed-off-by: Qiumiao Zhang <zhangqiumiao1@huawei.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
Qiumiao Zhang 2023-06-13 11:20:51 +08:00 committed by Daniel Kiper
parent b2b477e6b2
commit 4fb58cf0af

View File

@ -101,12 +101,6 @@ grub_acpi_find_table (const char *sig)
if (r)
return r;
rsdpv2 = grub_machine_acpi_get_rsdpv2 ();
if (rsdpv2)
r = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *)
(grub_addr_t) rsdpv2->rsdpv1.rsdt_addr,
sig);
if (r)
return r;
if (rsdpv2
#if GRUB_CPU_SIZEOF_VOID_P != 8
&& !(rsdpv2->xsdt_addr >> 32)
@ -117,6 +111,12 @@ grub_acpi_find_table (const char *sig)
sig);
if (r)
return r;
if (rsdpv2)
r = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *)
(grub_addr_t) rsdpv2->rsdpv1.rsdt_addr,
sig);
if (r)
return r;
return 0;
}