feat: idek
This commit is contained in:
parent
4534f1da14
commit
93d09b1930
4 changed files with 21 additions and 21 deletions
|
@ -4,9 +4,9 @@
|
|||
#include <sys/acpi/madt.h>
|
||||
#include <util/log.h>
|
||||
#include <mm/vmm.h>
|
||||
#include <boot/emk.h>
|
||||
#include <stdatomic.h>
|
||||
|
||||
uint64_t lapic_msr = 0;
|
||||
atomic_uintptr_t lapic_msr = 0;
|
||||
volatile uint64_t *lapic_base = 0;
|
||||
|
||||
void lapic_write(uint32_t offset, uint32_t value)
|
||||
|
@ -16,8 +16,9 @@ void lapic_write(uint32_t offset, uint32_t value)
|
|||
log_early("warning: LAPIC not initialized!");
|
||||
return;
|
||||
}
|
||||
|
||||
volatile uint32_t *reg = (volatile uint32_t *)((uint8_t *)lapic_base + offset);
|
||||
*reg = value;
|
||||
atomic_store((_Atomic uint32_t *)reg, value);
|
||||
}
|
||||
|
||||
uint32_t lapic_read(uint32_t offset)
|
||||
|
@ -27,16 +28,16 @@ uint32_t lapic_read(uint32_t offset)
|
|||
log_early("warning: LAPIC not initialized!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
volatile uint32_t *reg = (volatile uint32_t *)((uint8_t *)lapic_base + offset);
|
||||
uint32_t value = *reg;
|
||||
return value;
|
||||
return atomic_load((_Atomic uint32_t *)reg);
|
||||
}
|
||||
|
||||
void lapic_init()
|
||||
{
|
||||
lapic_msr = rdmsr(LAPIC_BASE);
|
||||
lapic_base = (volatile uint64_t *)(lapic_msr & ~(0xffff));
|
||||
/* Change the lapic address that we got from MADT earlier */
|
||||
lapic_addr = (uint64_t)lapic_base;
|
||||
uint64_t msr = rdmsr(LAPIC_BASE);
|
||||
atomic_store(&lapic_msr, msr);
|
||||
lapic_base = (volatile uint64_t *)(msr & ~(0xffff));
|
||||
atomic_store(&lapic_addr, (uint64_t)lapic_base);
|
||||
log_early("New LAPIC base: 0x%lx", lapic_base);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue