Nucleus
Barry Initialise ACPI later acd0915 (3 years, 3 months ago)
diff --git a/kernel/acpi/apic.c b/kernel/acpi/apic.c
index 67ebb06..423d815 100644
--- a/kernel/acpi/apic.c
+++ b/kernel/acpi/apic.c
@@ -53,6 +53,7 @@ struct ISOEntry {
uint8_t gsi, flags;
};
+int apic = 0;
size_t numCores = 1;
uintptr_t lapicPtr, ioapicPtr;
cpu_t lapicIds[MAX_CPUS], lapicNums[MAX_CPUS];
@@ -125,12 +126,16 @@ apic_start_timer(void)
void
init_apic(struct SDTHeader *header)
{
+ apic = 1;
numCores = 0;
uint8_t overrides[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
/* Iterate the entries */
lapicPtr = *(uint32_t *) (header + 1);
+ set_page(lapicPtr, PAGE_ADDR(lapicPtr) |
+ PTE_PRESENT | PTE_WRITE | PTE_GLOBAL);
+ flush_tlb(lapicPtr);
struct EntryHeader *entry = (void *) (header + 1) + 8;
struct LAPICEntry *lapic;
struct IOAPICEntry *ioapic;
@@ -158,6 +163,9 @@ init_apic(struct SDTHeader *header)
}
entry = (void *) entry + entry->length;
}
+ set_page(ioapicPtr, PAGE_ADDR(ioapicPtr) |
+ PTE_PRESENT | PTE_WRITE | PTE_GLOBAL);
+ flush_tlb(ioapicPtr);
/* Send INT#1 to IRQ#33 on CPU#0 */
write_io_apic(0x10 + (2 * overrides[1] + 0), 33);