From 6146ccba2d8049ae1c5215b67face37b21cab0ae Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Wed, 13 Mar 2019 14:23:28 +0100 Subject: [PATCH] Add a `memory::create_example_mapping` function --- src/memory.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/memory.rs b/src/memory.rs index d356dc92..5f40ff97 100644 --- a/src/memory.rs +++ b/src/memory.rs @@ -1,6 +1,9 @@ use x86_64::{ - structures::paging::{MappedPageTable, MapperAllSizes, PageTable, PhysFrame}, - VirtAddr, + structures::paging::{ + FrameAllocator, MappedPageTable, Mapper, MapperAllSizes, Page, PageTable, PhysFrame, + Size4KiB, + }, + PhysAddr, VirtAddr, }; /// Initialize a new MappedPageTable. @@ -36,3 +39,18 @@ unsafe fn active_level_4_table(physical_memory_offset: u64) -> &'static mut Page &mut *page_table_ptr // unsafe } + +/// Creates an example mapping for the given page to frame `0xb8000`. +pub fn create_example_mapping( + page: Page, + mapper: &mut impl Mapper, + frame_allocator: &mut impl FrameAllocator, +) { + use x86_64::structures::paging::PageTableFlags as Flags; + + let frame = PhysFrame::containing_address(PhysAddr::new(0xb8000)); + let flags = Flags::PRESENT | Flags::WRITABLE; + + let map_to_result = unsafe { mapper.map_to(page, frame, flags, frame_allocator) }; + map_to_result.expect("map_to failed").flush(); +}