From 444a88dddf2411f5502413f3f02725a5968eaa9b Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Tue, 19 Aug 2014 23:25:37 +0200 Subject: virtual memory manager contiuned --- kernel/vmem.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) (limited to 'kernel/vmem.c') 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; } + -- cgit v1.2.3