summaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-10 19:08:04 +0200
committerMiguel <m.i@gmx.at>2018-09-10 19:08:04 +0200
commitee2ec6abbcfb6de48a8f5594e05ba0a837216fa8 (patch)
tree6173e5182459529ac5dc3fbb59b30fd37c5ee4ab /kernel/kernel.c
parent65f5cca027af81e77b3e06da658b6d13f1861a03 (diff)
apic et al.
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index dd8d3f0..4c7227b 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -11,6 +11,7 @@
#include "vmem.h"
//-- clean below headers --//
+#include "apic.h"
#include "kernel/scheduler.h"
#include "driver/timer.h"
@@ -70,6 +71,13 @@ void kernel_main(uint32_t eax,uint32_t ebx)
interrupts_install();
fixme("register interrupt callback funcs (instead hardcoded dispatcher)");
+ // -- APIC -- //
+ klog("Advanced Programmable Interrupt Controller (APIC) config ...");
+ apic_init(&cfg_acpi);
+ ioapic_config();
+ apic_enable();
+ apic_init_timer(3);// freq in HZ
+
// -- MEMORY MANAGEMENT -- //
klog("Memory init ... ");
mem_init(cfg_multiboot);
@@ -88,6 +96,10 @@ void kernel_main(uint32_t eax,uint32_t ebx)
x86_set_page_directory(dir);
x86_paging_enable();
+ // temporary TODO
+ uint32_t *cpu_mem=0x8000000; //1024 pages from here on are mapped per cpu for testing! TODO: dynamic!
+ *cpu_mem=apic_id();
+
// -- RAM IMAGE -- //
klog("Ram Filesystem init ... ");
fs_mount(cfg_multiboot);
@@ -120,6 +132,8 @@ void kernel_main(uint32_t eax,uint32_t ebx)
klog("Unlock application processors ... ");
asm_smp_unlock();
+ PutFont('X', 100,200, 0x00ffff,0xff00ff); // TODO temporary!
+
klog("Enable Interrupts ... ");
x86_sti(); // this will start processing hardware interrupts