diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-22 17:31:52 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-22 17:36:02 +0100 |
| commit | 57e6722453c27d35a3b02309ce21263d225a23e3 (patch) | |
| tree | 7469dce46d063ddc7a3f3a7da6dcff928730488a /kernel/src/apic/ioapic.c | |
| parent | 2bb4e7fb4c0f5895148bb32da64381b985c8dcef (diff) | |
curr_cpu_apic_id() now works on old amd cpus
Diffstat (limited to 'kernel/src/apic/ioapic.c')
| -rw-r--r-- | kernel/src/apic/ioapic.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/src/apic/ioapic.c b/kernel/src/apic/ioapic.c index a8c3452..73c58d0 100644 --- a/kernel/src/apic/ioapic.c +++ b/kernel/src/apic/ioapic.c @@ -2,6 +2,7 @@ #include <apic.h> #include <paging.h> #include <libk/stdio.h> +#include <msr.h> void ioapic_eoi() { @@ -53,6 +54,8 @@ void ioapic_set_irq(uint8_t irq, uint64_t apic_id, uint8_t vector) ioapic_write((uint8_t)low_index, low); } +#define APIC_BASE_MSR 0x0000001B + void apic_remap_interrupts() { uint8_t bspid = curr_cpu_apic_id(); @@ -63,5 +66,9 @@ void apic_remap_interrupts() // irq is 2 because of gsi remap ioapic_set_irq(0x2, bspid, 0x20); // timer ioapic_set_irq(0x1, bspid, 0x21); // keyboard + + write_msr(APIC_BASE_MSR, read_msr(APIC_BASE_MSR) | (1<<11)); + *((volatile uint32_t*)(lapic_addr + 0xF0)) = (*(volatile uint32_t*)(lapic_addr + 0xF0) | 0x1FF ); + __asm__ volatile ("sti;"); } |
