diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-08-19 23:25:37 +0200 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-08-19 23:25:37 +0200 |
| commit | 444a88dddf2411f5502413f3f02725a5968eaa9b (patch) | |
| tree | 55f20b54b54b507102d97a0c2b406eeffddaaac4 /kernel/vmem.c | |
| parent | be0e0cad822038b3d86d9b0e60690a10a5814c98 (diff) | |
virtual memory manager contiuned
Diffstat (limited to 'kernel/vmem.c')
| -rw-r--r-- | kernel/vmem.c | 82 |
1 files changed, 81 insertions, 1 deletions
diff --git a/kernel/vmem.c b/kernel/vmem.c index 4424edf..ecdf9cd 100644 --- a/kernel/vmem.c +++ b/kernel/vmem.c @@ -40,6 +40,9 @@ typedef uint32_t pd_entry; //! virtual address typedef uint32_t virtual_addr; +typedef uint32_t physical_addr; + +typedef uint8_t bool; //! i86 architecture defines 1024 entries per table--do not change #define PAGES_PER_TABLE 1024 @@ -70,7 +73,84 @@ struct pdirectory { pd_entry m_entries[PAGES_PER_DIR]; }; +void pt_entry_add_attrib (pt_entry* e, uint32_t attrib) +{ +} +void pt_entry_del_attrib (pt_entry* e, uint32_t attrib) +{ +} +void pt_entry_set_frame (pt_entry* e , physical_addr addr) +{ +} +bool pt_entry_is_present (pt_entry e) +{ + return 1; +} +bool pt_entry_is_writable (pt_entry e) +{ + return 1; +} +physical_addr pt_entry_pfn (pt_entry e) +{ + return 1; +} + +void pd_entry_add_attrib (pd_entry* e, uint32_t attrib) +{ +} + +void pd_entry_del_attrib (pd_entry* e, uint32_t attrib) +{ +} +void pd_entry_set_frame (pd_entry* e, physical_addr add) +{ +} +bool pd_entry_is_present (pd_entry e) +{ + return 1; +} +bool pd_entry_is_user (pd_entry e) +{ + return 1; +} + +bool pd_entry_is_4mb (pd_entry e) +{ + return 1; +} + +bool pd_entry_is_writable (pd_entry e) +{ + return 1; +} + +physical_addr pd_entry_pfn (pd_entry e) +{ + return 1; +} + +void pd_entry_enable_global (pd_entry e) +{ +} + +uint8_t vmmngr_alloc_page (pt_entry* e) +{ + + //! allocate a free physical frame + void* p = pmmngr_alloc_block (); + if (!p) + return 0; + + //! map it to the page + pt_entry_set_frame (e, (physical_addr)p); + pt_entry_add_attrib (e, I86_PTE_PRESENT); + + return 1; +} + void vmem_init() { - scr_put_string_nl("vmem: Init paging (TODO)"); + scr_put_string_nl("vmem: Init paging\nxxx"); + int x=10/0; } + |
