diff --git a/kernel/src/arch/smp.c b/kernel/src/arch/smp.c index f8c3c08..7e294cd 100644 --- a/kernel/src/arch/smp.c +++ b/kernel/src/arch/smp.c @@ -10,12 +10,21 @@ #include #include #include +#include #include #include #include #include #include #include +#include +#include + +void tick(struct register_ctx *) +{ + log_early("tick on CPU %d", get_cpu_local()->cpu_index); + lapic_eoi(); +} #define MSR_GS_BASE 0xC0000101 @@ -91,6 +100,13 @@ void smp_init(void) log_early("%u CPUs detected", cpu_count); lapic_enable(); + + /* Setup IOAPIC */ + ioapic_init(); + + /* Setup timer */ + pit_init(tick); + tss_init(kstack_top); for (uint32_t i = 0; i < cpu_count; i++) diff --git a/kernel/src/dev/pit.c b/kernel/src/dev/pit.c index 0002d2b..bc89cbf 100644 --- a/kernel/src/dev/pit.c +++ b/kernel/src/dev/pit.c @@ -29,6 +29,5 @@ void pit_init(idt_intr_handler handler) outb(0x40, (divisor >> 8) & 0xFF); idt_register_handler(PIT_VECTOR, pit_handler); - ioapic_map(0, PIT_VECTOR, 0, get_cpu_local()->lapic_id); - ioapic_unmask(0); + ioapic_map(0, PIT_VECTOR, 0, 0xFF); /* Broadcast to ALL CPUs */ } \ No newline at end of file diff --git a/kernel/src/emk.c b/kernel/src/emk.c index 887b70d..477b5cf 100644 --- a/kernel/src/emk.c +++ b/kernel/src/emk.c @@ -68,11 +68,6 @@ struct limine_mp_response *mp_response = NULL; struct flanterm_context *ft_ctx = NULL; #endif // FLANTERM_SUPPORT -void tick(struct register_ctx *) -{ - log_early("tick on CPU %d", get_cpu_local()->cpu_index); -} - void emk_entry(void) { __asm__ volatile("movq %%rsp, %0" : "=r"(kstack_top)); @@ -207,16 +202,11 @@ void emk_entry(void) lapic_init(); smp_init(); - /* Setup IOAPIC */ - ioapic_init(); - - /* Setup timer */ - pit_init(tick); - /* Finished */ log_early("%s", LOG_SEPARATOR); log_early("Finished initializing EMK v1.0, took ? seconds"); /* Still not running in usermode, so keep using log_early */ + ioapic_unmask(0); // start the timer __asm__ volatile("sti"); hlt(); } \ No newline at end of file diff --git a/kernel/src/user/sched.h b/kernel/src/user/sched.h new file mode 100644 index 0000000..4ffd959 --- /dev/null +++ b/kernel/src/user/sched.h @@ -0,0 +1,5 @@ +/* EMK 1.0 Copyright (c) 2025 Piraterna */ +#ifndef SCHED_H +#define SCHED_H + +#endif // SCHED_H \ No newline at end of file