diff options
| author | Michal Idziorek <m.i@gmx.at> | 2015-05-14 20:24:21 +0200 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2015-05-14 20:24:21 +0200 |
| commit | fb8a5f18835e8811dd1a98b8eb5352151fc2df31 (patch) | |
| tree | ccc6d426c8d342374fbad1e3243449a8de278770 /kernel/vmem.c | |
| parent | ce3968aa4a941e272171f8fcd389c4909a7a23a5 (diff) | |
little improvements and setting py file for completer
Diffstat (limited to 'kernel/vmem.c')
| -rw-r--r-- | kernel/vmem.c | 61 |
1 files changed, 4 insertions, 57 deletions
diff --git a/kernel/vmem.c b/kernel/vmem.c index ffd39c8..402580a 100644 --- a/kernel/vmem.c +++ b/kernel/vmem.c @@ -9,8 +9,6 @@ #include "lib/logger/log.h" // logger facilities #define FOOLOS_MODULE_NAME "vmem" -static uint32_t phys; - // TODO : why is the frame not 0xfffff?? enum PAGE_PTE_FLAGS { @@ -226,8 +224,9 @@ void vmem_free_dir(pdirectory *dir) x86_paging_enable(); } -// vmem init and also copies all the shit for FORK -// for now it allocates always 3 * 1024 * 4096 bytes at for the kernel +// +// vmem init and also copies all the shit for FORK +// for now it allocates always 3 * 1024 * 4096 bytes at for the kernel // virtual / physical 0x0-0xc00000 (~12MB) // 2*1024*4096 for the loaded prog // virtual 0x8000000-0x8800000 (~8MB) @@ -293,57 +292,6 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir) virt_addr+=1024*4096; } - if(phys!=0) - { - phys_addr=phys; - virt_addr=phys; - // vesa - for(int j=0;j<5;j++) - { - - // this is the table for our page directory. It maps 1024*4096 bytes - ptable* table; - - // create new tables on init - if(copy_dir==NULL) - { - // alloc space for our new table - table = (ptable*) pmmngr_alloc_block (); - if (!table)panic(FOOLOS_MODULE_NAME,"unable to alloc table"); - - //! idenitity mapping - for (int i=0, frame=phys_addr, virt=virt_addr; i<1024; i++, frame+=4096, virt+=4096) - { - //! create a new page - pt_entry page=0; - pt_entry_add_attrib (&page, I86_PTE_PRESENT); - pt_entry_add_attrib (&page, I86_PTE_WRITABLE); - pt_entry_set_frame (&page, frame); - - //! ...and add it to the page table - table->m_entries [PAGE_TABLE_INDEX (virt) ] = page; - } - - pd_entry* entry = &dir->m_entries [PAGE_DIRECTORY_INDEX (virt_addr) ]; - *entry=0; - pd_entry_add_attrib (entry, I86_PDE_PRESENT); - pd_entry_add_attrib (entry, I86_PDE_WRITABLE); - pd_entry_set_frame (entry, (physical_addr)table); - - } - // otherwise simply take existing stuff from pdir 0 - else - { - dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]= - copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]; - - } - - phys_addr+=1024*4096; - virt_addr+=1024*4096; - } - } - // programm space virt_addr=0x8000000; for(int j=0;j<2;j++) @@ -471,9 +419,8 @@ void vmem_set_dir(pdirectory *dir) -pdirectory* vmem_init(uint32_t physbase) +pdirectory* vmem_init(uint32_t mem_block_start) { - phys=physbase; log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"init paging"); pdirectory *dir=vmem_new_space_dir(0); vmem_set_dir(dir); |
