summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2017-06-03 15:48:16 +0200
committerRichard Braun <rbraun@sceen.net>2017-06-03 15:48:16 +0200
commit6bdd90785b1519f7b71d79390c0b76d2299445e5 (patch)
tree4143fdaa44991fa778ee7ab17210f9691ac316c4
parentab6aa05afffdbc9c5a0969f37d0b989549de1a9a (diff)
x86/acpi: handle the PCAT_COMPAT flag
-rw-r--r--arch/x86/machine/acpi.c9
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