From 033d85bd2f50390c425567f0bb907ccd1fe63805 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20M?= Date: Mon, 2 Jun 2025 21:05:51 +0200 Subject: [PATCH] cpu: move apic to x86_64 --- kernel/src/arch/cpu.h | 3 +++ kernel/src/arch/x86_64/cpu.c | 7 +++++++ kernel/src/arch/x86_64/idt.c | 4 ++-- kernel/src/{dev => arch/x86_64}/ioapic.c | 0 kernel/src/{dev => arch/x86_64}/ioapic.h | 0 kernel/src/{dev => arch/x86_64}/lapic.c | 2 +- kernel/src/{dev => arch/x86_64}/lapic.h | 0 kernel/src/arch/x86_64/smp.c | 4 ---- kernel/src/main.c | 4 ++-- 9 files changed, 15 insertions(+), 9 deletions(-) rename kernel/src/{dev => arch/x86_64}/ioapic.c (100%) rename kernel/src/{dev => arch/x86_64}/ioapic.h (100%) rename kernel/src/{dev => arch/x86_64}/lapic.c (97%) rename kernel/src/{dev => arch/x86_64}/lapic.h (100%) diff --git a/kernel/src/arch/cpu.h b/kernel/src/arch/cpu.h index df89abf..bb197f9 100755 --- a/kernel/src/arch/cpu.h +++ b/kernel/src/arch/cpu.h @@ -25,6 +25,9 @@ void cpu_init_smp(); // Initialize the CPU's timer void cpu_init_timer(); +// Initialize the APIC. +void cpu_init_apic(); + // Enable/disable interrupts. void cpu_enable_ints(int enabled); diff --git a/kernel/src/arch/x86_64/cpu.c b/kernel/src/arch/x86_64/cpu.c index d1707c6..7a48f09 100755 --- a/kernel/src/arch/x86_64/cpu.c +++ b/kernel/src/arch/x86_64/cpu.c @@ -7,6 +7,8 @@ #if defined (__x86_64__) +#include "arch/x86_64/lapic.h" +#include "arch/x86_64/ioapic.h" #include #include #include @@ -33,6 +35,11 @@ void cpu_enable_ints(int enabled) { if (enabled) asm("sti"); else asm("cli"); } +void cpu_init_apic() { + lapic_init(); + ioapic_init(); +} + void hcf() { asm ("cli"); for (;;) { diff --git a/kernel/src/arch/x86_64/idt.c b/kernel/src/arch/x86_64/idt.c index a3c918c..e14ffd4 100755 --- a/kernel/src/arch/x86_64/idt.c +++ b/kernel/src/arch/x86_64/idt.c @@ -5,7 +5,6 @@ * idt.c - x86_64 Interrupt Descriptor Table implementation. */ -#include "dev/lapic.h" #if defined(__x86_64__) #include @@ -13,7 +12,8 @@ #include #include #include -#include +#include +#include "arch/x86_64/lapic.h" #include __attribute__((aligned(0x10))) diff --git a/kernel/src/dev/ioapic.c b/kernel/src/arch/x86_64/ioapic.c similarity index 100% rename from kernel/src/dev/ioapic.c rename to kernel/src/arch/x86_64/ioapic.c diff --git a/kernel/src/dev/ioapic.h b/kernel/src/arch/x86_64/ioapic.h similarity index 100% rename from kernel/src/dev/ioapic.h rename to kernel/src/arch/x86_64/ioapic.h diff --git a/kernel/src/dev/lapic.c b/kernel/src/arch/x86_64/lapic.c similarity index 97% rename from kernel/src/dev/lapic.c rename to kernel/src/arch/x86_64/lapic.c index 7e00f78..f1d2bc2 100755 --- a/kernel/src/dev/lapic.c +++ b/kernel/src/arch/x86_64/lapic.c @@ -5,7 +5,7 @@ * lapic.c - Local APIC implementation. */ -#include "dev/lapic.h" +#include "arch/x86_64/lapic.h" #include "arch/x86_64/idt.h" #include "lib/log.h" #include "mm/pmm.h" diff --git a/kernel/src/dev/lapic.h b/kernel/src/arch/x86_64/lapic.h similarity index 100% rename from kernel/src/dev/lapic.h rename to kernel/src/arch/x86_64/lapic.h diff --git a/kernel/src/arch/x86_64/smp.c b/kernel/src/arch/x86_64/smp.c index 50cea7f..7e92c8a 100755 --- a/kernel/src/arch/x86_64/smp.c +++ b/kernel/src/arch/x86_64/smp.c @@ -6,10 +6,6 @@ */ #include "arch/cpu.h" -#include "arch/x86_64/gdt.h" -#include "arch/x86_64/idt.h" -#include "dev/lapic.h" -#include "mm/paging.h" #include #include #include diff --git a/kernel/src/main.c b/kernel/src/main.c index a8345ec..00af298 100755 --- a/kernel/src/main.c +++ b/kernel/src/main.c @@ -42,8 +42,8 @@ void kmain(void) { acpi_init(); madt_init(); - lapic_init(); - ioapic_init(); + + cpu_init_apic(); cpu_init_smp(); cpu_init_timer();