]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
kern/acpi: Export a generic grub_acpi_find_table()
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 23 Dec 2022 01:47:52 +0000 (12:47 +1100)
committerDaniel Kiper <daniel.kiper@oracle.com>
Wed, 18 Jan 2023 22:07:06 +0000 (23:07 +0100)
And convert grub_acpi_find_fadt() to use it.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/kern/acpi.c
include/grub/acpi.h

index 70898ddcdd357ebeae1d9469eeea0d9f4c44d233..a9bcd85fc1ba90f12e69eb53461c2b3336b0f8aa 100644 (file)
@@ -19,6 +19,7 @@
 #include <grub/types.h>
 #include <grub/time.h>
 #include <grub/misc.h>
+#include <grub/mm.h>
 #include <grub/acpi.h>
 
 /* 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);
+}
index 84f49487dcdb2a2131cc0c369a9e8c4ffbb7cc8e..8c126b2b95ccd8e322c42c0df8290ece7ac49dfe 100644 (file)
@@ -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 */