00001
00002
00003
00004
00005
00006
00007
00008 #include <mmu.h>
00009
00010 __BEGIN_SYS
00011
00012 int IA32_MMU::init(System_Info * si)
00013 {
00014 db<IA32_MMU>(TRC) << "IA32_MMU::init()\n";
00015
00016 db<IA32_MMU>(INF) << "IA32_MMU:: memory size = "
00017 << si->mem_size << " pages\n";
00018 db<IA32_MMU>(INF) << "IA32_MMU:: free memory = "
00019 << si->mem_free << " pages\n";
00020 db<IA32_MMU>(INF) << "IA32_MMU:: application's memory base = "
00021 << (void *) si->pmm.app_lo << "\n";
00022 db<IA32_MMU>(INF) << "IA32_MMU:: free chunk = {base="
00023 << (void *) si->pmm.mach2 << ",size="
00024 << (void *) si->pmm.mach3 << "}\n";
00025 db<IA32_MMU>(INF) << "IA32_MMU:: free chunk = {base="
00026 << (void *) si->pmm.free << ",size="
00027 << (void *) si->pmm.free_size << "}\n";
00028 db<IA32_MMU>(INF) << "IA32_MMU:: physical memory logical address = "
00029 << (void *) si->lmm.phy_mem << "\n";
00030
00031 // db<IA32_MMU>(INF) << "IA32_MMU::free => {h=" << (void *)_free.head()
00032 // << ",t=" << (void *)_free.head()
00033 // << ",s=" << _free.size()
00034 // << ",t=" << (void *)&_free
00035 // << ",s=" << sizeof(_free) << "}\n";
00036
00037 // Insert all free memory into the _free list
00038 List::Element * e, * m1, * m2;
00039 e = new (phy2log(reinterpret_cast<void *>(si->pmm.mach2)))
00040 List::Element(reinterpret_cast<Page *>(si->pmm.mach2),
00041 si->pmm.mach3);
00042 _free.insert_merging(e, &m1, &m2);
00043
00044 e = new (phy2log(reinterpret_cast<void *>(si->pmm.free)))
00045 List::Element(reinterpret_cast<Page *>(si->pmm.free),
00046 si->pmm.free_size);
00047 _free.insert_merging(e, &m1, &m2);
00048
00049 db<IA32_MMU>(INF) << "Free Frames => " << _free.grouped_size() << "\n";
00050
00051 return 0;
00052 }
00053
00054 __END_SYS
00055