summaryrefslogtreecommitdiff
path: root/arch/x86/machine/acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/machine/acpi.c')
-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