]> rtime.felk.cvut.cz Git - l4.git/blobdiff - kernel/fiasco/src/kern/ia32/kip_init-ia32.cpp
update
[l4.git] / kernel / fiasco / src / kern / ia32 / kip_init-ia32.cpp
index c93ad870259bbd7bea7958d5f86b338d4f8f28e6..a86d74acf2b43ac43528864eba7045f2664ed17b 100644 (file)
@@ -2,9 +2,11 @@ INTERFACE [ia32,ux,amd64]:
 
 #include "initcalls.h"
 #include "types.h"
+#include "kip.h"
 
 class Cpu;
 
+
 class Kip_init
 {
 public:
@@ -16,6 +18,13 @@ public:
   static void setup_kmem_region (Address kmem_base, Address kmem_size);
 };
 
+IMPLEMENTATION [!ux]:
+
+PRIVATE static inline
+void
+Kip_init::setup_ux(Kip *)
+{}
+
 IMPLEMENTATION [ia32,ux,amd64]:
 
 #include <cstring>
@@ -23,7 +32,6 @@ IMPLEMENTATION [ia32,ux,amd64]:
 #include "config.h"
 #include "cpu.h"
 #include "div32.h"
-#include "kip.h"
 #include "kmem.h"
 #include "panic.h"
 
@@ -57,21 +65,19 @@ namespace KIP_namespace
     {
       {
        /* 00/00  */ L4_KERNEL_INFO_MAGIC,
-                    Config::kernel_version_id,
+                    Config::Kernel_version_id,
                     (Size_mem_descs + sizeof(Kip)) >> 4,
                     {}, 0, {},
-       /* 10/20  */ 0, 0, 0, 0,
+       /* 10/20  */ 0, {},
        /* 20/40  */ 0, 0, {},
        /* 30/60  */ 0, 0, {},
        /* 40/80  */ 0, 0, {},
-       /* 50/A0  */ 0, (sizeof(Kip) << (sizeof(Mword)*4)) | Num_mem_descs, 0, 0,
-       /* 60/C0  */ 0, 0, {},
-       /* A0/140 */ 0, 0,
-       /* B0/160 */ 0, 0, 0,
-       /* C0/180 */ {},
-       /* D0/1A0 */ {},
+       /* 50/A0  */ 0, (sizeof(Kip) << (sizeof(Mword)*4)) | Num_mem_descs, {},
+       /* 60/C0  */ {},
+       /* A0/140 */ 0, 0, 0, 0,
+       /* B0/160 */ {},
        /* E0/1C0 */ 0, 0, {},
-       /* F0/1D0 */ { },
+       /* F0/1D0 */ {"", 0}, {},
       },
       {}
     };
@@ -82,12 +88,14 @@ PUBLIC static FIASCO_INIT
 void Kip_init::init()
 {
   Kip *kinfo = reinterpret_cast<Kip*>(&KIP_namespace::my_kernel_info_page);
+  setup_ux(kinfo);
+
   Kip::init_global_kip(kinfo);
 
   Kip::k()->clock = 0;
-  Kip::k()->sched_granularity = Config::scheduler_granularity;
+  Kip::k()->sched_granularity = Config::Scheduler_granularity;
 
-  setup_user_virtual();
+  setup_user_virtual(kinfo);
 
   reserve_amd64_hole();
 
@@ -139,108 +147,8 @@ IMPLEMENTATION [!ux]:
 
 PUBLIC static FIASCO_INIT
 void
-Kip_init::setup_user_virtual()
+Kip_init::setup_user_virtual(Kip *kinfo)
 {
-  Kip *kinfo = reinterpret_cast<Kip*>(&KIP_namespace::my_kernel_info_page);
   kinfo->add_mem_region(Mem_desc(0, Mem_layout::User_max - 1,
                         Mem_desc::Conventional, true));
 }
-
-IMPLEMENTATION [ux]:
-
-#include "boot_info.h"
-#include "multiboot.h"
-#include <cstring>
-
-PUBLIC static FIASCO_INIT
-void
-Kip_init::setup_user_virtual()
-{
-  Kip *kinfo = reinterpret_cast<Kip*>(&KIP_namespace::my_kernel_info_page);
-  // start at 64k because on some distributions (like Ubuntu 8.04) it's
-  // not allowed to map below a certain treshold
-  kinfo->add_mem_region(Mem_desc(Boot_info::min_mappable_address(),
-                                 Mem_layout::User_max - 1,
-                                 Mem_desc::Conventional, true));
-}
-
-PUBLIC static  FIASCO_INIT
-void
-Kip_init::setup_ux()
-{
-  Kip::init_global_kip((Kip*)&KIP_namespace::my_kernel_info_page);
-
-  Multiboot_module *mbm = reinterpret_cast <Multiboot_module*>
-    (Kmem::phys_to_virt (Boot_info::mbi_virt()->mods_addr));
-  Kip::k()->user_ptr = (unsigned long)(Boot_info::mbi_phys());
-  Mem_desc *m = Kip::k()->mem_descs();
-
-  // start at 64k because on some distributions (like Ubuntu 8.04) it's
-  // not allowed to map below a certain treshold
-  *(m++) = Mem_desc(Boot_info::min_mappable_address(),
-                    ((Boot_info::mbi_virt()->mem_upper + 1024) << 10) - 1,
-                    Mem_desc::Conventional);
-  *(m++) = Mem_desc(Kmem::kernel_image_start(), Kmem::kcode_end() - 1, 
-      Mem_desc::Reserved);
-
-  mbm++;
-  Kip::k()->sigma0_ip          = mbm->reserved;
-  if ((Boot_info::sigma0_start() & Config::PAGE_MASK)
-      != ((Boot_info::sigma0_end() + (Config::PAGE_SIZE-1))
-          & Config::PAGE_MASK))
-    *(m++) = Mem_desc(Boot_info::sigma0_start() & Config::PAGE_MASK,
-                      ((Boot_info::sigma0_end() + (Config::PAGE_SIZE-1))
-                       & Config::PAGE_MASK) - 1,
-                      Mem_desc::Reserved);
-
-  mbm++;
-  Kip::k()->root_ip            = mbm->reserved;
-  if ((Boot_info::root_start() & Config::PAGE_MASK)
-      != ((Boot_info::root_end() + (Config::PAGE_SIZE-1)) & Config::PAGE_MASK))
-    *(m++) = Mem_desc(Boot_info::root_start() & Config::PAGE_MASK,
-                      ((Boot_info::root_end() + (Config::PAGE_SIZE-1))
-                       & Config::PAGE_MASK) - 1,
-                      Mem_desc::Bootloader);
-
-  unsigned long version_size = 0;
-  for (char const *v = Kip::k()->version_string(); *v; )
-    {
-      unsigned l = strlen(v) + 1;
-      v += l;
-      version_size += l;
-    }
-
-  version_size += 2;
-
-  Kip::k()->vhw_offset = (Kip::k()->offset_version_strings << 4) + version_size;
-
-  Kip::k()->vhw()->init();
-
-  unsigned long mod_start = ~0UL;
-  unsigned long mod_end = 0;
-
-  mbm++;
-
-  if (Boot_info::mbi_virt()->mods_count <= 3)
-    return;
-
-  for (unsigned i = 0; i < Boot_info::mbi_virt()->mods_count - 3; ++i)
-    {
-      if (mbm[i].mod_start < mod_start)
-       mod_start = mbm[i].mod_start;
-
-      if (mbm[i].mod_end > mod_end)
-       mod_end = mbm[i].mod_end;
-    }
-
-  mod_start &= ~(Config::PAGE_SIZE - 1);
-  mod_end = (mod_end + Config::PAGE_SIZE -1) & ~(Config::PAGE_SIZE - 1);
-
-  if (mod_end > mod_start)
-    *(m++) = Mem_desc(mod_start, mod_end - 1, Mem_desc::Bootloader);
-
-  *(m++) = Mem_desc(Boot_info::mbi_phys(),
-      ((Boot_info::mbi_phys() + Boot_info::mbi_size()
-       + Config::PAGE_SIZE-1) & Config::PAGE_MASK) -1,
-      Mem_desc::Bootloader);
-}