aboutsummaryrefslogtreecommitdiff
path: root/i386/i386at/acpi_parse_apic.h
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2024-01-31 02:12:26 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2024-02-01 02:22:41 +0100
commit88cbab7aaefdcd2b630d3f970a0c65a50ad419da (patch)
treef8bd78edbd05d7bb7f7cfcef4530b639b8cdb032 /i386/i386at/acpi_parse_apic.h
parentab91fba7200bea7596a95c654c1c467df79b656a (diff)
downloadgnumach-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.h18
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;