kern/acpi: Export a generic grub_acpi_find_table()
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>
This commit is contained in:
parent
1a241e0506
commit
cff78b3b61
@ -19,6 +19,7 @@
|
|||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
|
#include <grub/mm.h>
|
||||||
#include <grub/acpi.h>
|
#include <grub/acpi.h>
|
||||||
|
|
||||||
/* Simple checksum by summing all bytes. Used by ACPI and SMBIOS. */
|
/* 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct grub_acpi_fadt *
|
void *
|
||||||
grub_acpi_find_fadt (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_v10 *rsdpv1;
|
||||||
struct grub_acpi_rsdp_v20 *rsdpv2;
|
struct grub_acpi_rsdp_v20 *rsdpv2;
|
||||||
|
|
||||||
rsdpv1 = grub_machine_acpi_get_rsdpv1 ();
|
rsdpv1 = grub_machine_acpi_get_rsdpv1 ();
|
||||||
if (rsdpv1)
|
if (rsdpv1)
|
||||||
fadt = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *)
|
r = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *)
|
||||||
(grub_addr_t) rsdpv1->rsdt_addr,
|
(grub_addr_t) rsdpv1->rsdt_addr,
|
||||||
GRUB_ACPI_FADT_SIGNATURE);
|
sig);
|
||||||
if (fadt)
|
if (r)
|
||||||
return fadt;
|
return r;
|
||||||
rsdpv2 = grub_machine_acpi_get_rsdpv2 ();
|
rsdpv2 = grub_machine_acpi_get_rsdpv2 ();
|
||||||
if (rsdpv2)
|
if (rsdpv2)
|
||||||
fadt = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *)
|
r = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *)
|
||||||
(grub_addr_t) rsdpv2->rsdpv1.rsdt_addr,
|
(grub_addr_t) rsdpv2->rsdpv1.rsdt_addr,
|
||||||
GRUB_ACPI_FADT_SIGNATURE);
|
sig);
|
||||||
if (fadt)
|
if (r)
|
||||||
return fadt;
|
return r;
|
||||||
if (rsdpv2
|
if (rsdpv2
|
||||||
#if GRUB_CPU_SIZEOF_VOID_P != 8
|
#if GRUB_CPU_SIZEOF_VOID_P != 8
|
||||||
&& !(rsdpv2->xsdt_addr >> 32)
|
&& !(rsdpv2->xsdt_addr >> 32)
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
fadt = grub_acpi_xsdt_find_table ((struct grub_acpi_table_header *)
|
r = grub_acpi_xsdt_find_table ((struct grub_acpi_table_header *)
|
||||||
(grub_addr_t) rsdpv2->xsdt_addr,
|
(grub_addr_t) rsdpv2->xsdt_addr,
|
||||||
GRUB_ACPI_FADT_SIGNATURE);
|
sig);
|
||||||
if (fadt)
|
if (r)
|
||||||
return fadt;
|
return r;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct grub_acpi_fadt *
|
||||||
|
grub_acpi_find_fadt (void)
|
||||||
|
{
|
||||||
|
return grub_acpi_find_table (GRUB_ACPI_FADT_SIGNATURE);
|
||||||
|
}
|
||||||
|
|||||||
@ -244,4 +244,7 @@ enum
|
|||||||
struct grub_acpi_fadt *
|
struct grub_acpi_fadt *
|
||||||
EXPORT_FUNC(grub_acpi_find_fadt) (void);
|
EXPORT_FUNC(grub_acpi_find_fadt) (void);
|
||||||
|
|
||||||
|
void *
|
||||||
|
EXPORT_FUNC(grub_acpi_find_table) (const char *sig);
|
||||||
|
|
||||||
#endif /* ! GRUB_ACPI_HEADER */
|
#endif /* ! GRUB_ACPI_HEADER */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user