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]

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]

Returns a mutable reference to the wrapped level 4 PageTable instance.

Trait Implementations

impl<'a, P: Debug + PageTableFrameMapping> Debug for MappedPageTable<'a, P>[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

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]

Creates a new mapping in the page table. Read more

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

Maps the given frame to the virtual page with the same address. Read more

impl<'a, P: PageTableFrameMapping> Translate for MappedPageTable<'a, P>[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

fn translate_addr(&self, addr: VirtAddr) -> Option<PhysAddr>[src]

Translates the given virtual address to the physical address that it maps to. Read more

Auto Trait Implementations

impl<'a, P> Send for MappedPageTable<'a, P> where
    P: Send

impl<'a, P> Sync for MappedPageTable<'a, P> where
    P: Sync

impl<'a, P> Unpin for MappedPageTable<'a, P> where
    P: Unpin

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.

impl<T> MapperAllSizes for T where
    T: Mapper<Size4KiB> + Mapper<Size2MiB> + Mapper<Size1GiB>, 
[src]