From fbc2cc52c8a38c3c63a34f5547ba7c4209a667ac Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Thu, 2 Mar 2023 20:30:55 +0100 Subject: scheduling usermode processes & code refactoring --- kernel/src/apic/ioapic.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'kernel/src/apic/ioapic.c') diff --git a/kernel/src/apic/ioapic.c b/kernel/src/apic/ioapic.c index 7fe005b..1e20486 100644 --- a/kernel/src/apic/ioapic.c +++ b/kernel/src/apic/ioapic.c @@ -30,14 +30,16 @@ void ioapic_set_irq(uint8_t irq, uint64_t apic_id, uint8_t vector) { const uint32_t low_index = (uint32_t)0x10 + irq * 2; const uint32_t high_index = (uint32_t)0x10 + irq * 2 + 1; + uint32_t high; + uint32_t low; - uint32_t high = ioapic_read((uint8_t)high_index); + high = ioapic_read((uint8_t)high_index); /* set APIC ID */ high &= (uint32_t)~0xff000000; high |= (uint32_t)apic_id << 24; ioapic_write((uint8_t)high_index, high); - uint32_t low = ioapic_read((uint8_t)low_index); + low = ioapic_read((uint8_t)low_index); /* unmask the IRQ */ low &= (uint32_t) ~(1 << 16); @@ -57,10 +59,12 @@ void ioapic_set_irq(uint8_t irq, uint64_t apic_id, uint8_t vector) void apic_remap_interrupts() { + uint8_t bspid; + map_addr(ioapic_addr, ioapic_addr, FLAG_PRESENT); map_addr(lapic_addr, lapic_addr, FLAG_PRESENT); - uint8_t bspid = curr_cpu_apic_id(); + bspid = curr_cpu_apic_id(); /* irq is 2 because of gsi remap */ ioapic_set_irq(0x2, bspid, 0x20); /* timer */ -- cgit v1.2.3