]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/ppc32/kip_init.cpp
Inital import
[l4.git] / kernel / fiasco / src / kern / ppc32 / kip_init.cpp
1 INTERFACE [ppc32]:
2
3 #include "kip.h"
4
5 class Kip_init
6 {
7 public:
8   static void init();
9 };
10
11
12 //---------------------------------------------------------------------------
13 IMPLEMENTATION [ppc32]:
14
15 #include "mem_layout.h"
16 #include "config.h"
17
18 // Make the stuff below apearing only in this compilation unit.
19 // Trick Preprocess to let the struct reside in the cc file rather
20 // than putting it into the _i.h file which is perfectly wrong in 
21 // this case.
22 namespace KIP_namespace
23 {
24   enum
25   {
26     Num_mem_descs = 20,
27     Max_len_version = 512,
28
29     Size_mem_descs = sizeof(Mword) * 2 * Num_mem_descs,
30   };
31
32   struct KIP
33   {
34     Kip kip;
35     char mem_descs[Size_mem_descs];
36   };
37
38   KIP ppc32_kernel_info_page asm("ppc32_kernel_info_page") __attribute__((section(".kernel_info_page"))) =
39     {
40       {
41         /* 00 */ L4_KERNEL_INFO_MAGIC,
42                  Config::kernel_version_id,
43                  (Size_mem_descs + sizeof(Kip)) >> 4,
44                  0,
45         /* 10 */ {},
46         /* 20 */ 0,0, {},
47         /* 30 */ 0,0, {},
48         /* 40 */ 0,0, {},
49         /* 50 */ 0, (sizeof(Kip) << (sizeof(Mword)*4)) | Num_mem_descs, 0, 0,
50         /* 60 */ 0, 0, {},
51         /* A0 */ 0, {},
52         /* B0 */ 0, 0, {},
53         /* C0 */ {},
54         /* E0 */ 0, 0, {}
55         /* F0 */ { 0, 0, 0 }, { "" },
56       },
57       "",
58     };
59
60 };
61
62
63 IMPLEMENT
64 void Kip_init::init()
65 {
66   Kip *kinfo = reinterpret_cast<Kip*>(&KIP_namespace::ppc32_kernel_info_page);
67   Kip::init_global_kip(kinfo);
68
69   /* add kernel image */
70   kinfo->add_mem_region(Mem_desc(0,(Address)&Mem_layout::end - 1,
71                         Mem_desc::Reserved));
72
73   kinfo->add_mem_region(Mem_desc(0, Mem_layout::User_max - 1, 
74                         Mem_desc::Conventional, true));
75 }