From: Benjamin Herrenschmidt Date: Fri, 23 Dec 2022 01:47:52 +0000 (+1100) Subject: kern/acpi: Export a generic grub_acpi_find_table() X-Git-Tag: grub-2.12-rc1~176 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cff78b3b61b7a91bca5746914134bfa08273ebf8;p=thirdparty%2Fgrub.git kern/acpi: Export a generic grub_acpi_find_table() And convert grub_acpi_find_fadt() to use it. Signed-off-by: Benjamin Herrenschmidt Reviewed-by: Daniel Kiper --- diff --git a/grub-core/kern/acpi.c b/grub-core/kern/acpi.c index 70898ddcd..a9bcd85fc 100644 --- a/grub-core/kern/acpi.c +++ b/grub-core/kern/acpi.c @@ -19,6 +19,7 @@ #include #include #include +#include #include /* Simple checksum by summing all bytes. Used by ACPI and SMBIOS. */ @@ -85,35 +86,42 @@ grub_acpi_xsdt_find_table (struct grub_acpi_table_header *xsdt, const char *sig) return 0; } -struct grub_acpi_fadt * -grub_acpi_find_fadt (void) +void * +grub_acpi_find_table (const char *sig) { - struct grub_acpi_fadt *fadt = 0; + struct grub_acpi_fadt *r = NULL; struct grub_acpi_rsdp_v10 *rsdpv1; struct grub_acpi_rsdp_v20 *rsdpv2; + rsdpv1 = grub_machine_acpi_get_rsdpv1 (); if (rsdpv1) - fadt = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *) - (grub_addr_t) rsdpv1->rsdt_addr, - GRUB_ACPI_FADT_SIGNATURE); - if (fadt) - return fadt; + r = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *) + (grub_addr_t) rsdpv1->rsdt_addr, + sig); + if (r) + return r; rsdpv2 = grub_machine_acpi_get_rsdpv2 (); if (rsdpv2) - fadt = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *) - (grub_addr_t) rsdpv2->rsdpv1.rsdt_addr, - GRUB_ACPI_FADT_SIGNATURE); - if (fadt) - return fadt; + 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) #endif ) - fadt = grub_acpi_xsdt_find_table ((struct grub_acpi_table_header *) - (grub_addr_t) rsdpv2->xsdt_addr, - GRUB_ACPI_FADT_SIGNATURE); - if (fadt) - return fadt; + r = grub_acpi_xsdt_find_table ((struct grub_acpi_table_header *) + (grub_addr_t) rsdpv2->xsdt_addr, + sig); + if (r) + return r; return 0; } + +struct grub_acpi_fadt * +grub_acpi_find_fadt (void) +{ + return grub_acpi_find_table (GRUB_ACPI_FADT_SIGNATURE); +} diff --git a/include/grub/acpi.h b/include/grub/acpi.h index 84f49487d..8c126b2b9 100644 --- a/include/grub/acpi.h +++ b/include/grub/acpi.h @@ -244,4 +244,7 @@ enum struct grub_acpi_fadt * EXPORT_FUNC(grub_acpi_find_fadt) (void); +void * +EXPORT_FUNC(grub_acpi_find_table) (const char *sig); + #endif /* ! GRUB_ACPI_HEADER */