summaryrefslogtreecommitdiff
path: root/kernel/vmem.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2015-05-14 20:24:21 +0200
committerMichal Idziorek <m.i@gmx.at>2015-05-14 20:24:21 +0200
commitfb8a5f18835e8811dd1a98b8eb5352151fc2df31 (patch)
treeccc6d426c8d342374fbad1e3243449a8de278770 /kernel/vmem.c
parentce3968aa4a941e272171f8fcd389c4909a7a23a5 (diff)
little improvements and setting py file for completer
Diffstat (limited to 'kernel/vmem.c')
-rw-r--r--kernel/vmem.c61
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);