summaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index c6618ce..03dae1f 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -13,6 +13,7 @@
#include "vmem.h"
//-- clean below headers --//
+#include "asm_start.h"
#include "compositor.h"
#include "sysfs.h"
#include "pci.h"
@@ -40,12 +41,6 @@
#include "driver/vesa.h"
#include "asm_pit.h"
-//ugly?
-extern uint32_t kernel_end[];
-extern uint32_t kernel_start[];
-
-//TODO: we fear overrun of the initial buffer!
-//
/* F00L 0S Entry point (called directly from asm/multiboot.asm */
void kernel_main(uint32_t eax,uint32_t ebx)
{
@@ -62,9 +57,10 @@ void kernel_main(uint32_t eax,uint32_t ebx)
klog("======================================");
uint32_t *top_kernel_vmem=VMEM_KERNEL+VMEM_KERNEL_PAGES*4096;
- klog("The Kernel was loaded at: 0x%08X - 0x%08X",kernel_start,kernel_end);
+ klog("The Kernel was loaded at: 0x%08X - 0x%08X",get_kernel_start(),get_kernel_end());
klog("0x00000000 - 0x%08X will get identity mapped", VMEM_KERNEL_PAGES*4096);
if(kernel_end>=top_kernel_vmem)kpanic("kernel to big. increase VMEM_KERNEL_PAGES");
+ fixme("fear overrun of the initial buffer!");
// -- DISABLE LEGACY PIC -- //
klog("Remapping & Disabling Programmable Interrupt Controller (PIC) ...");
@@ -106,7 +102,6 @@ void kernel_main(uint32_t eax,uint32_t ebx)
fixme("do not disable anymore on context switching!");
fixme("write convenneint management funcs as: mapCPU, mapKErnel, map USerspace..");
fixme("move stack and guard with empty pages!");
-
vmem_init(cfg_multiboot,&cfg_acpi,e1000_addr);
struct pdirectory_struct *dir=vmem_kernel_dir();
@@ -157,10 +152,12 @@ void kernel_main(uint32_t eax,uint32_t ebx)
klog("Unix Time = %u seconds",unixtime);
// -- E1000 INIT (TODO: only if present!) --/
- klog("E1000 init ...");
- fixme("do not hardcode address and allow paging somehwere else");
- e1000_init(e1000_addr);
+ if(e1000_addr)
+ {
+ klog("E1000 init ...");
+ e1000_init(e1000_addr);
+ }
klog("Symmetric Multi Processing (SMP) start ... ");
- smp_start_aps(&cfg_acpi);
+ smp_bsp();
}