summaryrefslogtreecommitdiff
path: root/kernel/vmem.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-08-19 23:25:37 +0200
committerMichal Idziorek <m.i@gmx.at>2014-08-19 23:25:37 +0200
commit444a88dddf2411f5502413f3f02725a5968eaa9b (patch)
tree55f20b54b54b507102d97a0c2b406eeffddaaac4 /kernel/vmem.c
parentbe0e0cad822038b3d86d9b0e60690a10a5814c98 (diff)
virtual memory manager contiuned
Diffstat (limited to 'kernel/vmem.c')
-rw-r--r--kernel/vmem.c82
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;
}
+