]> rtime.felk.cvut.cz Git - l4.git/blobdiff - kernel/fiasco/src/kern/ia32/64/main-ia32-64.cpp
update
[l4.git] / kernel / fiasco / src / kern / ia32 / 64 / main-ia32-64.cpp
index 773f2638f6fdd3a9f2a76a9327b3c457fb99422e..f1aa404c4126010787ae75bcdb15ba1dd30afe46 100644 (file)
@@ -6,6 +6,7 @@
 INTERFACE[amd64]:
 
 #include "initcalls.h"
+#include "std_macros.h"
 
 class Kernel_thread;
 
@@ -22,7 +23,7 @@ IMPLEMENTATION[amd64]:
 
 FIASCO_INIT
 void
-kernel_main (void)
+kernel_main(void)
 {
   unsigned dummy;
 
@@ -30,18 +31,11 @@ kernel_main (void)
 
   // caution: no stack variables in this function because we're going
   // to change the stack pointer!
-
-  printf ("CPU[%u]: %s (%X:%X:%X:%X) Model: %s at %llu MHz\n\n",
-           cpu.id(),
-           cpu.vendor_str(), cpu.family(), cpu.model(),
-           cpu.stepping(), cpu.brand(), cpu.model_str(),
-           div32(cpu.frequency(), 1000000));
-
-  cpu.show_cache_tlb_info("");
+  cpu.print_infos();
 
   printf ("\nFreeing init code/data: %lu bytes (%lu pages)\n\n",
           (Address)(&Mem_layout::initcall_end - &Mem_layout::initcall_start),
-          (Address)(&Mem_layout::initcall_end - &Mem_layout::initcall_start 
+          (Address)(&Mem_layout::initcall_end - &Mem_layout::initcall_start
             >> Config::PAGE_SHIFT));
 
   // Perform architecture specific initialization
@@ -49,36 +43,34 @@ kernel_main (void)
 
   // create kernel thread
   static Kernel_thread *kernel = new (Ram_quota::root) Kernel_thread;
-  nil_thread = kernel;
-  Space *const ktask = Kernel_task::kernel_task();
-  check(kernel->bind(ktask, 0));
+  Task *const ktask = Kernel_task::kernel_task();
+  check(kernel->bind(ktask, User<Utcb>::Ptr(0)));
 
   // switch to stack of kernel thread and bootstrap the kernel
   asm volatile
     ("  movq %%rax, %%cr3       \n\t"   // restore proper cr3 after running on the mp boot dir
-     " movq %%rsp, %0          \n\t"   // save stack pointer in safe variable
-     " movq %4, %%rsp          \n\t"   // switch stack
+     " movq %3, %%rsp          \n\t"   // switch stack
      " call call_bootstrap     \n\t"   // bootstrap kernel thread
-     : "=m" (boot_stack), "=a" (dummy), "=c" (dummy), "=d" (dummy)
-     : "S" (kernel->init_stack()), "D" (kernel),
-        "a" (Mem_layout::pmem_to_phys(Kmem::dir())));
+     : "=a" (dummy), "=c" (dummy), "=d" (dummy)
+     : "S" (kernel->init_stack()), "D" (kernel),
+       "a" (Mem_layout::pmem_to_phys(Kmem::dir())));
 }
 
 
 //------------------------------------------------------------------------
-IMPLEMENTATION[(amd64) && mp]:
+IMPLEMENTATION[amd64 && mp]:
 
 #include "kernel_thread.h"
 
 void
-main_switch_ap_cpu_stack(Kernel_thread *kernel)
+main_switch_ap_cpu_stack(Kernel_thread *kernel, bool resume)
 {
   Mword dummy;
 
   // switch to stack of kernel thread and bootstrap the kernel
   asm volatile
-    (" mov %%rsi, %%rsp        \n\t"   // switch stack
+    (" mov %[rsp], %%rsp       \n\t"   // switch stack
      " call call_ap_bootstrap  \n\t"   // bootstrap kernel thread
      :  "=a" (dummy), "=c" (dummy), "=d" (dummy)
-     : "a"(kernel), "S" (kernel->init_stack()));
+     : "D"(kernel), "S"(resume), [rsp]"r" (kernel->init_stack()));
 }