summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-08-27 21:49:44 -0400
committerIan Moffett <ian@osmora.org>2025-08-27 21:49:44 -0400
commit5c6d1d90d5cdf32576e5d204ef4c4885e2b84acd (patch)
treec3d0447313d4c01207e17208991f4e02312a0d68
parent2dba7036cefda5d9fa20b96dbe711edb78fa642d (diff)
kernel/amd64: lapic: Fix up LAPIC address handlingmain
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r--sys/arch/amd64/amd64/acpi_machdep.c3
-rw-r--r--sys/arch/amd64/amd64/lapic.c6
-rw-r--r--sys/include/arch/amd64/lapic.h2
3 files changed, 6 insertions, 5 deletions
diff --git a/sys/arch/amd64/amd64/acpi_machdep.c b/sys/arch/amd64/amd64/acpi_machdep.c
index 7533621..0f80607 100644
--- a/sys/arch/amd64/amd64/acpi_machdep.c
+++ b/sys/arch/amd64/amd64/acpi_machdep.c
@@ -34,6 +34,7 @@
#include <dev/acpi/tables.h>
#include <machine/ioapic.h>
#include <machine/lapic.h>
+#include <vm/vm.h>
#define pr_trace(fmt, ...) kprintf("acpi: " fmt, ##__VA_ARGS__)
@@ -51,7 +52,7 @@ acpi_init_madt(void)
cur = (uint8_t *)(madt + 1);
end = (uint8_t *)madt + madt->hdr.length;
- g_lapic_base = madt->lapic_addr;
+ g_lapic_base = PHYS_TO_VIRT(madt->lapic_addr);
while (cur < end) {
apichdr = (void *)cur;
diff --git a/sys/arch/amd64/amd64/lapic.c b/sys/arch/amd64/amd64/lapic.c
index ceb5428..b44b769 100644
--- a/sys/arch/amd64/amd64/lapic.c
+++ b/sys/arch/amd64/amd64/lapic.c
@@ -60,7 +60,7 @@
static struct timer lapic_timer;
static uint8_t lapic_timer_vec = 0;
-uintptr_t g_lapic_base = 0;
+void *g_lapic_base = 0;
void lapic_tmr_isr(void);
@@ -104,7 +104,7 @@ lapic_readl(uint32_t reg)
const struct cpu_info *ci = this_cpu();
if (!ci->has_x2apic) {
- addr = (void *)(g_lapic_base + reg);
+ addr = PTR_OFFSET(g_lapic_base, reg);
return mmio_read32(addr);
} else {
reg >>= 4;
@@ -125,7 +125,7 @@ lapic_writel(uint32_t reg, uint64_t val)
const struct cpu_info *ci = this_cpu();
if (!ci->has_x2apic) {
- addr = (void *)(g_lapic_base + reg);
+ addr = PTR_OFFSET(g_lapic_base, reg);
mmio_write32(addr, val);
} else {
reg >>= 4;
diff --git a/sys/include/arch/amd64/lapic.h b/sys/include/arch/amd64/lapic.h
index 19d9c2c..a566515 100644
--- a/sys/include/arch/amd64/lapic.h
+++ b/sys/include/arch/amd64/lapic.h
@@ -45,6 +45,6 @@ void lapic_init(void);
void lapic_eoi(void);
void lapic_send_ipi(uint8_t id, uint8_t shorthand, uint8_t vector);
-extern uintptr_t g_lapic_base;
+extern void *g_lapic_base;
#endif /* !_MACHINE_LAPIC_H_ */