Cucumber/Kernel/src/Tier0/apic.c

29 lines
680 B
C
Raw Normal View History

#include "Tier0/apic.h"
#include "Tier0/system.h"
#include "Tier0/kstdio.h"
#include "Tier0/paging.h"
struct {
T_APIC_LAPIC *APIC;
} g_APIC;
void apic_enable_lapic(void)
{
u64 APICMSR = system_msr_get(0x1B);
if (APICMSR & (1 << 11))
kprintf("[i] APIC enable flag set in APIC MSR.\n");
else
{
kprintf("[i] APIC enable flag not set in APIC MSR. Trying to set it...\n");
APICMSR |= (1 << 22);
system_msr_set(0x1B, APICMSR);
}
u64 Virtual = paging_minivmm_allocate();
kprintf("[i] LAPIC will be @0x%x.\n", Virtual);
paging_map_page(Virtual, 0xFEE00000);
g_APIC.APIC = (T_APIC_LAPIC *)Virtual;
}