1 INTERFACE [ia32,ux,amd64]:
14 * Insert memory descriptor for the Kmem region and finish the memory
16 * @post no more memory descriptors may be added
18 static void setup_kmem_region (Address kmem_base, Address kmem_size);
25 Kip_init::setup_ux(Kip *)
28 IMPLEMENTATION [ia32,ux,amd64]:
31 #include "boot_info.h"
39 /** KIP initialization. */
40 PUBLIC static FIASCO_INIT
42 Kip_init::init_freq(Cpu const &cpu)
44 Kip::k()->frequency_cpu = div32(cpu.frequency(), 1000);
48 namespace KIP_namespace
53 Max_len_version = 512,
55 Size_mem_descs = sizeof(Mword) * 2 * Num_mem_descs,
61 char mem_descs[Size_mem_descs];
64 KIP my_kernel_info_page asm("my_kernel_info_page") __attribute__((section(".kernel_info_page"))) =
67 /* 00/00 */ L4_KERNEL_INFO_MAGIC,
68 Config::Kernel_version_id,
69 (Size_mem_descs + sizeof(Kip)) >> 4,
75 /* 50/A0 */ 0, (sizeof(Kip) << (sizeof(Mword)*4)) | Num_mem_descs, {},
77 /* A0/140 */ 0, 0, 0, 0,
79 /* E0/1C0 */ 0, 0, {},
80 /* F0/1D0 */ {"", 0}, {},
86 PUBLIC static FIASCO_INIT
90 Kip *kinfo = reinterpret_cast<Kip*>(&KIP_namespace::my_kernel_info_page);
93 Kip::init_global_kip(kinfo);
96 Kip::k()->sched_granularity = Config::Scheduler_granularity;
98 setup_user_virtual(kinfo);
100 reserve_amd64_hole();
103 Mem_desc *md = kinfo->mem_descs();
104 Mem_desc *end = md + kinfo->num_mem_descs();
106 extern char _boot_sys_start[];
107 extern char _boot_sys_end[];
109 for (;md != end; ++md)
111 if (md->type() != Mem_desc::Reserved || md->is_virtual())
114 if (md->start() == (Address)_boot_sys_start
115 && md->end() == (Address)_boot_sys_end - 1)
116 md->type(Mem_desc::Undefined);
118 if (md->contains(Kmem::kernel_image_start())
119 && md->contains(Kmem::kcode_end()-1))
121 *md = Mem_desc(Kmem::kernel_image_start(), Kmem::kcode_end() -1,
128 IMPLEMENTATION [amd64]:
130 PRIVATE static inline NOEXPORT NEEDS["kip.h"]
132 Kip_init::reserve_amd64_hole()
134 enum { Trigger = 0x0000800000000000UL };
135 Kip::k()->add_mem_region(Mem_desc(Trigger, ~Trigger,
136 Mem_desc::Reserved, true));
139 IMPLEMENTATION [!amd64]:
141 PRIVATE static inline NOEXPORT
143 Kip_init::reserve_amd64_hole()
146 IMPLEMENTATION [!ux]:
148 PUBLIC static FIASCO_INIT
150 Kip_init::setup_user_virtual(Kip *kinfo)
152 kinfo->add_mem_region(Mem_desc(0, Mem_layout::User_max,
153 Mem_desc::Conventional, true));