]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/ux/main-ux.cpp
7a3e347224636487b79fd575938ab4dc34ceb90a
[l4.git] / kernel / fiasco / src / kern / ux / main-ux.cpp
1 /*
2  * Fiasco-UX
3  * Architecture specific main startup/shutdown code
4  */
5
6 IMPLEMENTATION[ux && mp]:
7
8 #include "app_cpu_thread.h"
9 #include "idt.h"
10 #include "ipi.h"
11 #include "per_cpu_data_alloc.h"
12 #include "usermode.h"
13
14 int FIASCO_FASTCALL boot_ap_cpu(unsigned _cpu) __asm__("BOOT_AP_CPU");
15
16 int boot_ap_cpu(unsigned _cpu)
17 {
18   if (!Per_cpu_data_alloc::alloc(_cpu))
19     {
20       extern Spin_lock _tramp_mp_spinlock;
21       printf("CPU allocation failed for CPU%u, disabling CPU.\n", _cpu);
22       _tramp_mp_spinlock.clear();
23       while (1)
24         Proc::halt();
25     }
26   Per_cpu_data::run_ctors(_cpu);
27   Cpu &cpu = Cpu::cpus.cpu(_cpu);
28
29   Usermode::init(_cpu);
30   Ipi::init(_cpu);
31
32   //Kmem::init_cpu(cpu);
33   Idt::load();
34   //Utcb_init::init_ap(cpu);
35
36   //Timer::init(_cpu);
37
38   // caution: no stack variables in this function because we're going
39   // to change the stack pointer!
40   cpu.print();
41   cpu.show_cache_tlb_info("");
42
43   puts("");
44
45   // create kernel thread
46   App_cpu_thread *kernel = new (Ram_quota::root) App_cpu_thread();
47   set_cpu_of(kernel, _cpu);
48   check(kernel->bind(Kernel_task::kernel_task(), User<Utcb>::Ptr(0)));
49
50   main_switch_ap_cpu_stack(kernel);
51   return 0;
52 }
53
54 IMPLEMENTATION[ux]:
55
56 #include "kernel_console.h"
57
58 void main_arch()
59 {
60   // re-enable the console -- it might have been disabled
61   // by "-quiet" command line switch
62   Kconsole::console()->change_state(0, 0, ~0U, Console::OUTENABLED);
63 }
64
65 FIASCO_INIT
66 int
67 main()
68 {
69   kernel_main();
70 }