diff options
author | Richard Braun <rbraun@sceen.net> | 2017-06-03 15:48:16 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2017-06-03 15:48:16 +0200 |
commit | 6bdd90785b1519f7b71d79390c0b76d2299445e5 (patch) | |
tree | 4143fdaa44991fa778ee7ab17210f9691ac316c4 | |
parent | ab6aa05afffdbc9c5a0969f37d0b989549de1a9a (diff) |
x86/acpi: handle the PCAT_COMPAT flag
-rw-r--r-- | arch/x86/machine/acpi.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/x86/machine/acpi.c b/arch/x86/machine/acpi.c index 5927e950..1f7e5683 100644 --- a/arch/x86/machine/acpi.c +++ b/arch/x86/machine/acpi.c @@ -31,6 +31,7 @@ #include <machine/io.h> #include <machine/ioapic.h> #include <machine/lapic.h> +#include <machine/pic.h> #include <machine/types.h> #include <vm/vm_kmem.h> @@ -109,6 +110,8 @@ union acpi_madt_entry { struct acpi_madt_entry_ioapic ioapic; } __packed; +#define ACPI_MADT_PC_COMPAT 0x1 + struct acpi_madt { struct acpi_sdth header; uint32_t lapic_addr; @@ -494,11 +497,11 @@ acpi_load_madt(void) table = acpi_lookup_table("APIC"); assert(table != NULL); madt = structof(table, struct acpi_madt, header); + lapic_setup(madt->lapic_addr); is_bsp = 1; /* - * TODO Handle PCAT_COMPAT flag * TODO Handle interrupt overrides */ @@ -511,6 +514,10 @@ acpi_load_madt(void) acpi_load_ioapic(&iter.entry->ioapic); } } + + if (madt->flags & ACPI_MADT_PC_COMPAT) { + pic_setup_disabled(); + } } int __init |