diff options
author | Damien Zammit <damien@zamaudio.com> | 2024-01-31 02:12:26 +0000 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2024-02-01 02:22:41 +0100 |
commit | 88cbab7aaefdcd2b630d3f970a0c65a50ad419da (patch) | |
tree | f8bd78edbd05d7bb7f7cfcef4530b639b8cdb032 /i386/i386at/acpi_parse_apic.h | |
parent | ab91fba7200bea7596a95c654c1c467df79b656a (diff) | |
download | gnumach-88cbab7aaefdcd2b630d3f970a0c65a50ad419da.tar.gz gnumach-88cbab7aaefdcd2b630d3f970a0c65a50ad419da.tar.bz2 gnumach-88cbab7aaefdcd2b630d3f970a0c65a50ad419da.zip |
ACPI: Support XSDT (ACPI >= v2.0)
This enables gnumach to additionally parse the XSDT table
if the revision of ACPI is 2.
TESTED: Still works on qemu (ACPI v1.0)
TESTED: Works on a x86 board with XSDT (ACPI v2.0)
Message-ID: <20240131021218.1335821-1-damien@zamaudio.com>
Diffstat (limited to 'i386/i386at/acpi_parse_apic.h')
-rw-r--r-- | i386/i386at/acpi_parse_apic.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/i386/i386at/acpi_parse_apic.h b/i386/i386at/acpi_parse_apic.h index bad10054..df36bb31 100644 --- a/i386/i386at/acpi_parse_apic.h +++ b/i386/i386at/acpi_parse_apic.h @@ -44,10 +44,17 @@ struct acpi_rsdp { uint8_t signature[8]; uint8_t checksum; uint8_t oem_id[6]; - uint8_t revision[1]; + uint8_t revision; uint32_t rsdt_addr; } __attribute__((__packed__)); +struct acpi_rsdp2 { + struct acpi_rsdp v1; + uint32_t length; + uint64_t xsdt_addr; + uint8_t checksum; + uint8_t reserved[3]; +} __attribute__((__packed__)); /* * RSDT Entry Header @@ -77,6 +84,13 @@ struct acpi_rsdt { uint32_t entry[0]; } __attribute__((__packed__)); +#define ACPI_XSDT_SIG "XSDT" + +struct acpi_xsdt { + struct acpi_dhdr header; + uint64_t entry[0]; +} __attribute__((__packed__)); + /* APIC table signature. */ #define ACPI_APIC_SIG "APIC" @@ -157,7 +171,7 @@ struct acpi_apic_irq_override { } __attribute__((__packed__)); int acpi_apic_init(void); -void acpi_print_info(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt, int acpi_rsdt_n); +void acpi_print_info(phys_addr_t rsdp, void *rsdt, int acpi_rsdt_n); extern unsigned lapic_addr; |