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..9d7b627 100755 --- a/kernel/src/main.c +++ b/kernel/src/main.c @@ -21,8 +21,6 @@ #include #include #include "arch/x86_64/smp.h" -#include "dev/ioapic.h" -#include "dev/lapic.h" #include "mm/paging.h" #include "mm/vma.h" @@ -42,8 +40,8 @@ void kmain(void) { acpi_init(); madt_init(); - lapic_init(); - ioapic_init(); + + cpu_init_apic(); cpu_init_smp(); cpu_init_timer();