Use IA32_APIC_BASE MSR to get LAPIC address instead of the MADT

This commit is contained in:
Vlad-Robert Baciu
2025-01-11 18:46:27 +02:00
parent 6245a3d19f
commit 6df7c4ebd5
2 changed files with 3 additions and 6 deletions
+2 -6
View File
@@ -5,6 +5,7 @@
#include <kernel/interrupt.h>
#include <arch/cpu.h>
#include <arch/hpet.h>
#include <arch/msr.h>
#include <kernel/timer.h>
#include <kernel/timekeeper.h>
@@ -262,12 +263,7 @@ void arch_apic_init() {
// map LAPIC to virtual memory
struct acpi_madt_lapic_address_override *lapic64 = getentry(ACPI_MADT_ENTRY_TYPE_LAPIC_ADDRESS_OVERRIDE, 0);
void *paddr = lapic64 ? (void *)lapic64->address : (void *)(uint64_t)madt->local_interrupt_controller_address;
if (lapic64)
printf("\e[94mUsing 64 bit override for the local APIC address\n\e[0m");
void *paddr = (void *) rdmsr(MSR_IA32APICBASE);
lapic_address = vmm_map(NULL, PAGE_SIZE, VMM_FLAGS_PHYSICAL, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC, paddr);
__assert(lapic_address);
+1
View File
@@ -3,6 +3,7 @@
#include <stdint.h>
#define MSR_IA32APICBASE 0x1B
#define MSR_EFER 0xC0000080
#define MSR_STAR 0xC0000081
#define MSR_LSTAR 0xC0000082