From 43fa04650dec59b61f1ff8403ff9a8db2e03d559 Mon Sep 17 00:00:00 2001 From: afrangio Date: Fri, 8 Apr 2022 13:12:57 +0200 Subject: [PATCH] mem: add flag argument to memory_map function --- src/memory/mod.rs | 4 ++-- src/memory/pagetable.rs | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/memory/mod.rs b/src/memory/mod.rs index 056798b..beb1307 100644 --- a/src/memory/mod.rs +++ b/src/memory/mod.rs @@ -46,7 +46,7 @@ pub fn init(mmap: *const MultibootTagMmap, mmap_size: usize) } let page = alloc.request_free_page(false); crate::logln!("requested page userspace: {:#0X}", page); - pt_manager.memory_map(0x150000, page); + pt_manager.memory_map(0x150000, page, 3); } fn id_map(pt_manager: &mut pagetable::Manager) @@ -57,7 +57,7 @@ fn id_map(pt_manager: &mut pagetable::Manager) for i in 0..memory_start / PAGE_SIZE { - pt_manager.memory_map(i * PAGE_SIZE, i * PAGE_SIZE); + pt_manager.memory_map(i * PAGE_SIZE, i * PAGE_SIZE, 3); alloc.lock_page(i); } } diff --git a/src/memory/pagetable.rs b/src/memory/pagetable.rs index f2a3220..d2f6eb2 100644 --- a/src/memory/pagetable.rs +++ b/src/memory/pagetable.rs @@ -41,7 +41,7 @@ impl Manager self.page_directory = core::slice::from_raw_parts_mut(0xffff_f000 as *mut page::DirectoryEntry, 1024) } - fn create_page_directory_entry(&mut self, index: usize) + fn create_page_directory_entry(&mut self, index: usize, flags: usize) { let page_directory_entry = &mut self.page_directory[index]; @@ -50,7 +50,7 @@ impl Manager let alloc = pageframe::Allocator::shared(); page_directory_entry.reset(); page_directory_entry.set_addr(alloc.request_free_page(true) as u32); - page_directory_entry.set_rw(true); + page_directory_entry.value |= flags as u32 & 0xFFF; page_directory_entry.set_present(true); unsafe { @@ -59,7 +59,7 @@ impl Manager } } - fn create_page_table_entry(&mut self, page_directory_index: usize, page_table_index: usize, physical_address: usize) + fn create_page_table_entry(&mut self, page_directory_index: usize, page_table_index: usize, physical_address: usize, flags: usize) { let page_table = unsafe { @@ -70,16 +70,16 @@ impl Manager { page_table_entry.reset(); page_table_entry.set_addr(physical_address as u32); - page_table_entry.set_rw(true); + page_table_entry.value |= flags as u32 & 0xFFF; page_table_entry.set_present(true); } } - pub fn memory_map(&mut self, v_addr: usize, phys_addr: usize) + pub fn memory_map(&mut self, v_addr: usize, phys_addr: usize, flags: usize) { let (pdi, pti): (usize, usize) = page_map_indexer(v_addr); - self.create_page_directory_entry(pdi); - self.create_page_table_entry(pdi, pti, phys_addr); + self.create_page_directory_entry(pdi, flags); + self.create_page_table_entry(pdi, pti, phys_addr, flags); } fn address(&self, page_directory_index: usize) -> u32