/* See COPYRIGHT for copyright information. */
-#ifdef __BSD_ON_CORE_0__
-#include Everything For Free -- It just works!!
+#ifdef __SHARC__
+#pragma nosharc
+#endif
+
+#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 <syscall.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.
print_cpuinfo();
- // zra: using KADDR macro gives a runtime warning, but it is possibly more
- // clear what's going on this way?
+ // Old way, pre Zach's Ivy annotations
//multiboot_detect_memory((multiboot_info_t*)((uint32_t)mboot_info + KERNBASE));
//multiboot_print_memory_map((multiboot_info_t*)((uint32_t)mboot_info + KERNBASE));
- multiboot_detect_memory((multiboot_info_t*COUNT(1))KADDR((physaddr_t)mboot_info));
- multiboot_print_memory_map((multiboot_info_t*COUNT(1))KADDR((physaddr_t)mboot_info));
-
- vm_init();
-
- page_init();
+
+ // 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*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();
-
- env_init();
-
+ vfs_init();
idt_init();
+ kernel_msg_init();
sysenter_init();
timer_init();
-
- // this returns when all other cores are done and ready to receive IPIs
- smp_boot();
+ 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");
+
+ // 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 */