diff options
Diffstat (limited to 'kern/kernel.c')
-rw-r--r-- | kern/kernel.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/kern/kernel.c b/kern/kernel.c index 52217876..7c83d8d1 100644 --- a/kern/kernel.c +++ b/kern/kernel.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011 Richard Braun. + * Copyright (c) 2011, 2012 Richard Braun. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,15 +17,39 @@ #include <kern/init.h> #include <kern/kernel.h> +#include <kern/panic.h> +#include <kern/task.h> +#include <kern/thread.h> #include <machine/cpu.h> -void __init -kernel_main(void) +static void __init +kernel_setup(void *arg) { + (void)arg; + + cpu_mp_setup(); + cpu_intr_enable(); for (;;) cpu_idle(); +} + +void __init +kernel_main(void) +{ + struct thread *thread; + int error; + + task_setup(); + thread_setup(); + + error = thread_create(&thread, "core", kernel_task, kernel_setup, NULL); + + if (error) + panic("kernel: unable to create kernel thread"); + + thread_load(thread); /* Never reached */ } |