#pragma nosharc
#endif
-#ifdef __BSD_ON_CORE_0__
-#include Everything For Free -- It just works!!
+#ifdef __CONFIG_BSD_ON_CORE0__
+#error "Yeah, it's not possible to build ROS with BSD on Core 0, sorry......"
#else
+#include <ros/timer.h>
#include <arch/arch.h>
#include <arch/console.h>
#include <multiboot.h>
#include <kclock.h>
#include <manager.h>
#include <testing.h>
+#include <kmalloc.h>
+#include <hashtable.h>
+#include <mm.h>
+#include <frontend.h>
+
+#include <arch/init.h>
+#include <arch/bitmask.h>
+#include <slab.h>
+#include <kfs.h>
+#include <vfs.h>
+
+// zra: flag for Ivy
+int booting = 1;
void kernel_init(multiboot_info_t *mboot_info)
{
- extern char (BND(__this, end) edata)[], (SNT end)[];
+ extern char (RO BND(__this, end) edata)[], (RO SNT end)[];
// Before doing anything else, complete the ELF loading process.
// Clear the uninitialized global data (BSS) section of our program.
// Paul: Can't use KADDR as arg to multiboot_detect_memory
// since multiboot_detect_memory is what sets npages.
// Must simulate KADDR macro (ugly).
- multiboot_detect_memory((multiboot_info_t*SAFE)(void*TRUSTED)((physaddr_t)mboot_info + KERNBASE));
-
- multiboot_print_memory_map((multiboot_info_t*COUNT(1))KADDR((physaddr_t)mboot_info));
-
- vm_init();
-
- cache_init();
- page_init();
+ multiboot_detect_memory((multiboot_info_t*CT(1))TC((physaddr_t)mboot_info + KERNBASE));
+
+ multiboot_print_memory_map((multiboot_info_t*CT(1))KADDR((physaddr_t)mboot_info));
+
+ vm_init(); // Sets up pages tables, turns on paging
+ cache_init(); // Determine systems's cache properties
+ page_init(); // Initializes free page list, etc
+ kmem_cache_init(); // Sets up slab allocator
+ kmalloc_init();
+ hashtable_init();
+ cache_color_alloc_init(); // Inits data structs
+ colored_page_alloc_init(); // Allocates colors for agnostic processes
+ vmr_init();
+ file_init();
page_check();
- //test_page_coloring();
-
+ vfs_init();
idt_init();
+ kernel_msg_init();
sysenter_init();
timer_init();
+ train_timing();
+
+ // At this point our boot paths diverge based on arch.
+ arch_init();
+
+// printk("Starting tests....\n");
+// test_color_alloc();
+// printk("Testing complete....\n");
- // this returns when all other cores are done and ready to receive IPIs
- smp_boot();
- env_init();
+ // zra: let's Ivy know we're done booting
+ booting = 0;
manager();
}
va_end(ap);
dead:
- /* break into the kernel monitor, if we're core 0 */
- if (core_id()) {
- smp_idle();
- panic("should never see me");
- }
- while (1)
- monitor(NULL);
+ monitor(NULL);
+ smp_idle();
}
/* like panic, but don't */