]> rtime.felk.cvut.cz Git - l4.git/blobdiff - kernel/fiasco/src/boot/bootstrap.cc
Update
[l4.git] / kernel / fiasco / src / boot / bootstrap.cc
index 9ce820f19cb73402abc9d9937fc49eb35b460728..ec76bc40db6b54464b83f28f95435140f064eeeb 100644 (file)
@@ -10,6 +10,7 @@
 #include "boot_cpu.h"
 #include "boot_paging.h"
 #include "boot_console.h"
+#include "kernel_console.h"
 #include "checksum.h"
 #include "config.h"
 #include "globalconfig.h"
 #include "kmem_alloc.h"
 #include "mem_layout.h"
 #include "mem_region.h"
-#include "multiboot.h"
 #include "panic.h"
 #include "processor.h"
 #include "reset.h"
+#include "mem_unit.h"
 
 struct check_sum
 {
@@ -41,6 +42,11 @@ exit(int)
     Proc::pause();
 }
 
+void assert_fail(char const *expr, char const *file, unsigned int line)
+{
+  panic("Assertion failed at %s:%u: %s\n", file, line, expr);
+}
+
 // test if [start1..end1-1] overlaps [start2..end2-1]
 static
 void
@@ -52,18 +58,16 @@ check_overlap (const char *str,
           start1, end1, str, start2, end2);
 }
 
-typedef void (*Start)(Multiboot_info *, unsigned, unsigned) FIASCO_FASTCALL;
+typedef void (*Start)(unsigned) FIASCO_FASTCALL;
 
 extern "C" FIASCO_FASTCALL
 void
-bootstrap (Multiboot_info *mbi, unsigned int flag)
+bootstrap()
 {
   extern Kip my_kernel_info_page;
   Start start;
 
-  assert(flag == Multiboot_header::Valid);
-
-  // setup stuff for base_paging_init() 
+  // setup stuff for base_paging_init()
   base_cpu_setup();
   // now do base_paging_init(): sets up paging with one-to-one mapping
   base_paging_init();
@@ -71,6 +75,7 @@ bootstrap (Multiboot_info *mbi, unsigned int flag)
   asm volatile ("" ::: "memory");
 
   Kip::init_global_kip(&my_kernel_info_page);
+  Kconsole::init();
   Boot_console::init();
   printf("Boot: KIP @ %p\n", Kip::k());
 
@@ -92,10 +97,12 @@ bootstrap (Multiboot_info *mbi, unsigned int flag)
 
   base_map_physical_memory_for_kernel();
 
+  Mem_unit::tlb_flush();
+
   start = (Start)_start;
 
-  Address phys_start = (Address)_start - Mem_layout::Kernel_image;
-  Address phys_end   = (Address)_end   - Mem_layout::Kernel_image;
+  Address phys_start = (Address)_start - Mem_layout::Kernel_image + Mem_layout::Kernel_image_phys;
+  Address phys_end   = (Address)_end   - Mem_layout::Kernel_image + Mem_layout::Kernel_image_phys;
   check_overlap ("VGA/IO", phys_start, phys_end, 0xa0000, 0x100000);
 
   if (Checksum::get_checksum_ro() != check_sum.checksum_ro)
@@ -104,5 +111,5 @@ bootstrap (Multiboot_info *mbi, unsigned int flag)
   if (Checksum::get_checksum_rw() != check_sum.checksum_rw)
     panic("Read-write (data) checksum does not match.");
 
-  start (mbi, flag, check_sum.checksum_ro);
+  start(check_sum.checksum_ro);
 }