Struct x86_64::structures::paging::mapper::MappedPageTable [−][src]
pub struct MappedPageTable<'a, P: PageTableFrameMapping> { /* fields omitted */ }
Expand description
A Mapper implementation that relies on a PhysAddr to VirtAddr conversion function.
This type requires that the all physical page table frames are mapped to some virtual
address. Normally, this is done by mapping the complete physical address space into
the virtual address space at some offset. Other mappings between physical and virtual
memory are possible too, as long as they can be calculated as an PhysAddr
to
VirtAddr
closure.
Implementations
impl<'a, P: PageTableFrameMapping> MappedPageTable<'a, P>
[src]
impl<'a, P: PageTableFrameMapping> MappedPageTable<'a, P>
[src]pub unsafe fn new(
level_4_table: &'a mut PageTable,
page_table_frame_mapping: P
) -> Self
[src]
pub unsafe fn new(
level_4_table: &'a mut PageTable,
page_table_frame_mapping: P
) -> Self
[src]Creates a new MappedPageTable
that uses the passed closure for converting virtual
to physical addresses.
Safety
This function is unsafe because the caller must guarantee that the passed page_table_frame_mapping
closure is correct. Also, the passed level_4_table
must point to the level 4 page table
of a valid page table hierarchy. Otherwise this function might break memory safety, e.g.
by writing to an illegal memory location.
pub fn level_4_table(&mut self) -> &mut PageTable
[src]
pub fn level_4_table(&mut self) -> &mut PageTable
[src]Returns a mutable reference to the wrapped level 4 PageTable
instance.
Trait Implementations
impl<'a, P: Debug + PageTableFrameMapping> Debug for MappedPageTable<'a, P>
[src]
impl<'a, P: Debug + PageTableFrameMapping> Debug for MappedPageTable<'a, P>
[src]impl<'a, P: PageTableFrameMapping> Mapper<Size1GiB> for MappedPageTable<'a, P>
[src]
impl<'a, P: PageTableFrameMapping> Mapper<Size1GiB> for MappedPageTable<'a, P>
[src]unsafe fn map_to_with_table_flags<A: ?Sized>(
&mut self,
page: Page<Size1GiB>,
frame: PhysFrame<Size1GiB>,
flags: PageTableFlags,
parent_table_flags: PageTableFlags,
allocator: &mut A
) -> Result<MapperFlush<Size1GiB>, MapToError<Size1GiB>> where
A: FrameAllocator<Size4KiB>,
[src]
unsafe fn map_to_with_table_flags<A: ?Sized>(
&mut self,
page: Page<Size1GiB>,
frame: PhysFrame<Size1GiB>,
flags: PageTableFlags,
parent_table_flags: PageTableFlags,
allocator: &mut A
) -> Result<MapperFlush<Size1GiB>, MapToError<Size1GiB>> where
A: FrameAllocator<Size4KiB>,
[src]Creates a new mapping in the page table. Read more
fn unmap(
&mut self,
page: Page<Size1GiB>
) -> Result<(PhysFrame<Size1GiB>, MapperFlush<Size1GiB>), UnmapError>
[src]
fn unmap(
&mut self,
page: Page<Size1GiB>
) -> Result<(PhysFrame<Size1GiB>, MapperFlush<Size1GiB>), UnmapError>
[src]Removes a mapping from the page table and returns the frame that used to be mapped. Read more
unsafe fn update_flags(
&mut self,
page: Page<Size1GiB>,
flags: PageTableFlags
) -> Result<MapperFlush<Size1GiB>, FlagUpdateError>
[src]
unsafe fn update_flags(
&mut self,
page: Page<Size1GiB>,
flags: PageTableFlags
) -> Result<MapperFlush<Size1GiB>, FlagUpdateError>
[src]Updates the flags of an existing mapping. Read more
unsafe fn set_flags_p4_entry(
&mut self,
page: Page<Size1GiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]
unsafe fn set_flags_p4_entry(
&mut self,
page: Page<Size1GiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]Set the flags of an existing page level 4 table entry Read more
unsafe fn set_flags_p3_entry(
&mut self,
_page: Page<Size1GiB>,
_flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]
unsafe fn set_flags_p3_entry(
&mut self,
_page: Page<Size1GiB>,
_flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]Set the flags of an existing page table level 3 entry Read more
unsafe fn set_flags_p2_entry(
&mut self,
_page: Page<Size1GiB>,
_flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]
unsafe fn set_flags_p2_entry(
&mut self,
_page: Page<Size1GiB>,
_flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]Set the flags of an existing page table level 2 entry Read more
fn translate_page(
&self,
page: Page<Size1GiB>
) -> Result<PhysFrame<Size1GiB>, TranslateError>
[src]
fn translate_page(
&self,
page: Page<Size1GiB>
) -> Result<PhysFrame<Size1GiB>, TranslateError>
[src]Return the frame that the specified page is mapped to. Read more
unsafe fn map_to<A: ?Sized>(
&mut self,
page: Page<S>,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
[src]
unsafe fn map_to<A: ?Sized>(
&mut self,
page: Page<S>,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
[src]Creates a new mapping in the page table. Read more
unsafe fn identity_map<A: ?Sized>(
&mut self,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
S: PageSize,
Self: Mapper<S>,
[src]
unsafe fn identity_map<A: ?Sized>(
&mut self,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
S: PageSize,
Self: Mapper<S>,
[src]Maps the given frame to the virtual page with the same address. Read more
impl<'a, P: PageTableFrameMapping> Mapper<Size2MiB> for MappedPageTable<'a, P>
[src]
impl<'a, P: PageTableFrameMapping> Mapper<Size2MiB> for MappedPageTable<'a, P>
[src]unsafe fn map_to_with_table_flags<A: ?Sized>(
&mut self,
page: Page<Size2MiB>,
frame: PhysFrame<Size2MiB>,
flags: PageTableFlags,
parent_table_flags: PageTableFlags,
allocator: &mut A
) -> Result<MapperFlush<Size2MiB>, MapToError<Size2MiB>> where
A: FrameAllocator<Size4KiB>,
[src]
unsafe fn map_to_with_table_flags<A: ?Sized>(
&mut self,
page: Page<Size2MiB>,
frame: PhysFrame<Size2MiB>,
flags: PageTableFlags,
parent_table_flags: PageTableFlags,
allocator: &mut A
) -> Result<MapperFlush<Size2MiB>, MapToError<Size2MiB>> where
A: FrameAllocator<Size4KiB>,
[src]Creates a new mapping in the page table. Read more
fn unmap(
&mut self,
page: Page<Size2MiB>
) -> Result<(PhysFrame<Size2MiB>, MapperFlush<Size2MiB>), UnmapError>
[src]
fn unmap(
&mut self,
page: Page<Size2MiB>
) -> Result<(PhysFrame<Size2MiB>, MapperFlush<Size2MiB>), UnmapError>
[src]Removes a mapping from the page table and returns the frame that used to be mapped. Read more
unsafe fn update_flags(
&mut self,
page: Page<Size2MiB>,
flags: PageTableFlags
) -> Result<MapperFlush<Size2MiB>, FlagUpdateError>
[src]
unsafe fn update_flags(
&mut self,
page: Page<Size2MiB>,
flags: PageTableFlags
) -> Result<MapperFlush<Size2MiB>, FlagUpdateError>
[src]Updates the flags of an existing mapping. Read more
unsafe fn set_flags_p4_entry(
&mut self,
page: Page<Size2MiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]
unsafe fn set_flags_p4_entry(
&mut self,
page: Page<Size2MiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]Set the flags of an existing page level 4 table entry Read more
unsafe fn set_flags_p3_entry(
&mut self,
page: Page<Size2MiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]
unsafe fn set_flags_p3_entry(
&mut self,
page: Page<Size2MiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]Set the flags of an existing page table level 3 entry Read more
unsafe fn set_flags_p2_entry(
&mut self,
_page: Page<Size2MiB>,
_flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]
unsafe fn set_flags_p2_entry(
&mut self,
_page: Page<Size2MiB>,
_flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]Set the flags of an existing page table level 2 entry Read more
fn translate_page(
&self,
page: Page<Size2MiB>
) -> Result<PhysFrame<Size2MiB>, TranslateError>
[src]
fn translate_page(
&self,
page: Page<Size2MiB>
) -> Result<PhysFrame<Size2MiB>, TranslateError>
[src]Return the frame that the specified page is mapped to. Read more
unsafe fn map_to<A: ?Sized>(
&mut self,
page: Page<S>,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
[src]
unsafe fn map_to<A: ?Sized>(
&mut self,
page: Page<S>,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
[src]Creates a new mapping in the page table. Read more
unsafe fn identity_map<A: ?Sized>(
&mut self,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
S: PageSize,
Self: Mapper<S>,
[src]
unsafe fn identity_map<A: ?Sized>(
&mut self,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
S: PageSize,
Self: Mapper<S>,
[src]Maps the given frame to the virtual page with the same address. Read more
impl<'a, P: PageTableFrameMapping> Mapper<Size4KiB> for MappedPageTable<'a, P>
[src]
impl<'a, P: PageTableFrameMapping> Mapper<Size4KiB> for MappedPageTable<'a, P>
[src]unsafe fn map_to_with_table_flags<A: ?Sized>(
&mut self,
page: Page<Size4KiB>,
frame: PhysFrame<Size4KiB>,
flags: PageTableFlags,
parent_table_flags: PageTableFlags,
allocator: &mut A
) -> Result<MapperFlush<Size4KiB>, MapToError<Size4KiB>> where
A: FrameAllocator<Size4KiB>,
[src]
unsafe fn map_to_with_table_flags<A: ?Sized>(
&mut self,
page: Page<Size4KiB>,
frame: PhysFrame<Size4KiB>,
flags: PageTableFlags,
parent_table_flags: PageTableFlags,
allocator: &mut A
) -> Result<MapperFlush<Size4KiB>, MapToError<Size4KiB>> where
A: FrameAllocator<Size4KiB>,
[src]Creates a new mapping in the page table. Read more
fn unmap(
&mut self,
page: Page<Size4KiB>
) -> Result<(PhysFrame<Size4KiB>, MapperFlush<Size4KiB>), UnmapError>
[src]
fn unmap(
&mut self,
page: Page<Size4KiB>
) -> Result<(PhysFrame<Size4KiB>, MapperFlush<Size4KiB>), UnmapError>
[src]Removes a mapping from the page table and returns the frame that used to be mapped. Read more
unsafe fn update_flags(
&mut self,
page: Page<Size4KiB>,
flags: PageTableFlags
) -> Result<MapperFlush<Size4KiB>, FlagUpdateError>
[src]
unsafe fn update_flags(
&mut self,
page: Page<Size4KiB>,
flags: PageTableFlags
) -> Result<MapperFlush<Size4KiB>, FlagUpdateError>
[src]Updates the flags of an existing mapping. Read more
unsafe fn set_flags_p4_entry(
&mut self,
page: Page<Size4KiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]
unsafe fn set_flags_p4_entry(
&mut self,
page: Page<Size4KiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]Set the flags of an existing page level 4 table entry Read more
unsafe fn set_flags_p3_entry(
&mut self,
page: Page<Size4KiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]
unsafe fn set_flags_p3_entry(
&mut self,
page: Page<Size4KiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]Set the flags of an existing page table level 3 entry Read more
unsafe fn set_flags_p2_entry(
&mut self,
page: Page<Size4KiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]
unsafe fn set_flags_p2_entry(
&mut self,
page: Page<Size4KiB>,
flags: PageTableFlags
) -> Result<MapperFlushAll, FlagUpdateError>
[src]Set the flags of an existing page table level 2 entry Read more
fn translate_page(
&self,
page: Page<Size4KiB>
) -> Result<PhysFrame<Size4KiB>, TranslateError>
[src]
fn translate_page(
&self,
page: Page<Size4KiB>
) -> Result<PhysFrame<Size4KiB>, TranslateError>
[src]Return the frame that the specified page is mapped to. Read more
unsafe fn map_to<A: ?Sized>(
&mut self,
page: Page<S>,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
[src]
unsafe fn map_to<A: ?Sized>(
&mut self,
page: Page<S>,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
[src]Creates a new mapping in the page table. Read more
unsafe fn identity_map<A: ?Sized>(
&mut self,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
S: PageSize,
Self: Mapper<S>,
[src]
unsafe fn identity_map<A: ?Sized>(
&mut self,
frame: PhysFrame<S>,
flags: PageTableFlags,
frame_allocator: &mut A
) -> Result<MapperFlush<S>, MapToError<S>> where
Self: Sized,
A: FrameAllocator<Size4KiB>,
S: PageSize,
Self: Mapper<S>,
[src]Maps the given frame to the virtual page with the same address. Read more
impl<'a, P: PageTableFrameMapping> Translate for MappedPageTable<'a, P>
[src]
impl<'a, P: PageTableFrameMapping> Translate for MappedPageTable<'a, P>
[src]fn translate(&self, addr: VirtAddr) -> TranslateResult
[src]
fn translate(&self, addr: VirtAddr) -> TranslateResult
[src]Return the frame that the given virtual address is mapped to and the offset within that frame. Read more
Auto Trait Implementations
impl<'a, P> Send for MappedPageTable<'a, P> where
P: Send,
P: Send,
impl<'a, P> Sync for MappedPageTable<'a, P> where
P: Sync,
P: Sync,
impl<'a, P> Unpin for MappedPageTable<'a, P> where
P: Unpin,
P: Unpin,
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> MapperAllSizes for T where
T: Mapper<Size4KiB> + Mapper<Size2MiB> + Mapper<Size1GiB>,
[src]
T: Mapper<Size4KiB> + Mapper<Size2MiB> + Mapper<Size1GiB>,