summaryrefslogtreecommitdiff
path: root/src/arch/i386/boot.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/i386/boot.c')
-rw-r--r--src/arch/i386/boot.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/arch/i386/boot.c b/src/arch/i386/boot.c
index 37e1aff..242d070 100644
--- a/src/arch/i386/boot.c
+++ b/src/arch/i386/boot.c
@@ -1,11 +1,16 @@
#include <arch/generic.h>
#include <arch/i386/gdt.h>
#include <arch/i386/interrupts/idt.h>
+#include <arch/i386/multiboot.h>
#include <arch/i386/sysenter.h>
#include <arch/i386/tty.h>
#include <kernel/main.h>
+#include <kernel/panic.h>
-void kmain_early() {
+void kmain_early(struct multiboot_info *multiboot) {
+ struct kmain_info info;
+
+ // setup some basic stuff
tty_clear();
log_const("gdt...");
gdt_init();
@@ -13,5 +18,16 @@ void kmain_early() {
idt_init();
log_const("sysenter...");
sysenter_setup();
- kmain();
+
+ { // find the init module
+ struct multiboot_mod *module = &multiboot->mods[0];
+ if (multiboot->mods_count < 1) {
+ log_const("can't find init! ");
+ panic();
+ }
+ info.init.at = module->start;
+ info.init.size = module->end - module->start;
+ }
+
+ kmain(info);
}