pub struct OffsetPageTable<'a> { /* private fields */ }
Available on 64-bit only.
Expand description

A Mapper implementation that requires that the complete physically memory is mapped at some offset in the virtual address space.

Implementations§

source§

impl<'a> OffsetPageTable<'a>

source

pub unsafe fn new( level_4_table: &'a mut PageTable, phys_offset: VirtAddr ) -> Self

Creates a new OffsetPageTable that uses the given offset for converting virtual to physical addresses.

The complete physical memory must be mapped in the virtual address space starting at address phys_offset. This means that for example physical address 0x5000 can be accessed through virtual address phys_offset + 0x5000. This mapping is required because the mapper needs to access page tables, which are not mapped into the virtual address space by default.

§Safety

This function is unsafe because the caller must guarantee that the passed phys_offset 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.

source

pub fn level_4_table(&self) -> &PageTable

Returns an immutable reference to the wrapped level 4 PageTable instance.

source

pub fn level_4_table_mut(&mut self) -> &mut PageTable

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

source

pub fn phys_offset(&self) -> VirtAddr

Returns the offset used for converting virtual to physical addresses.

Trait Implementations§

source§

impl<'a> CleanUp for OffsetPageTable<'a>

source§

unsafe fn clean_up<D>(&mut self, frame_deallocator: &mut D)

Remove all empty P1-P3 tables Read more
source§

unsafe fn clean_up_addr_range<D>( &mut self, range: PageRangeInclusive, frame_deallocator: &mut D )

Remove all empty P1-P3 tables in a certain range Read more
source§

impl<'a> Debug for OffsetPageTable<'a>

source§

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

Formats the value using the given formatter. Read more
source§

impl<'a> Mapper<Size1GiB> for OffsetPageTable<'a>

source§

unsafe fn map_to_with_table_flags<A>( &mut self, page: Page<Size1GiB>, frame: PhysFrame<Size1GiB>, flags: PageTableFlags, parent_table_flags: PageTableFlags, allocator: &mut A ) -> Result<MapperFlush<Size1GiB>, MapToError<Size1GiB>>

Creates a new mapping in the page table. Read more
source§

fn unmap( &mut self, page: Page<Size1GiB> ) -> Result<(PhysFrame<Size1GiB>, MapperFlush<Size1GiB>), UnmapError>

Removes a mapping from the page table and returns the frame that used to be mapped. Read more
source§

unsafe fn update_flags( &mut self, page: Page<Size1GiB>, flags: PageTableFlags ) -> Result<MapperFlush<Size1GiB>, FlagUpdateError>

Updates the flags of an existing mapping. Read more
source§

unsafe fn set_flags_p4_entry( &mut self, page: Page<Size1GiB>, flags: PageTableFlags ) -> Result<MapperFlushAll, FlagUpdateError>

Set the flags of an existing page level 4 table entry Read more
source§

unsafe fn set_flags_p3_entry( &mut self, page: Page<Size1GiB>, flags: PageTableFlags ) -> Result<MapperFlushAll, FlagUpdateError>

Set the flags of an existing page table level 3 entry Read more
source§

unsafe fn set_flags_p2_entry( &mut self, page: Page<Size1GiB>, flags: PageTableFlags ) -> Result<MapperFlushAll, FlagUpdateError>

Set the flags of an existing page table level 2 entry Read more
source§

fn translate_page( &self, page: Page<Size1GiB> ) -> Result<PhysFrame<Size1GiB>, TranslateError>

Return the frame that the specified page is mapped to. Read more
source§

unsafe fn map_to<A>( &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> + ?Sized,

Creates a new mapping in the page table. Read more
source§

unsafe fn identity_map<A>( &mut self, frame: PhysFrame<S>, flags: PageTableFlags, frame_allocator: &mut A ) -> Result<MapperFlush<S>, MapToError<S>>
where Self: Sized + Mapper<S>, A: FrameAllocator<Size4KiB> + ?Sized, S: PageSize,

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

impl<'a> Mapper<Size2MiB> for OffsetPageTable<'a>

source§

unsafe fn map_to_with_table_flags<A>( &mut self, page: Page<Size2MiB>, frame: PhysFrame<Size2MiB>, flags: PageTableFlags, parent_table_flags: PageTableFlags, allocator: &mut A ) -> Result<MapperFlush<Size2MiB>, MapToError<Size2MiB>>

Creates a new mapping in the page table. Read more
source§

fn unmap( &mut self, page: Page<Size2MiB> ) -> Result<(PhysFrame<Size2MiB>, MapperFlush<Size2MiB>), UnmapError>

Removes a mapping from the page table and returns the frame that used to be mapped. Read more
source§

unsafe fn update_flags( &mut self, page: Page<Size2MiB>, flags: PageTableFlags ) -> Result<MapperFlush<Size2MiB>, FlagUpdateError>

Updates the flags of an existing mapping. Read more
source§

unsafe fn set_flags_p4_entry( &mut self, page: Page<Size2MiB>, flags: PageTableFlags ) -> Result<MapperFlushAll, FlagUpdateError>

Set the flags of an existing page level 4 table entry Read more
source§

unsafe fn set_flags_p3_entry( &mut self, page: Page<Size2MiB>, flags: PageTableFlags ) -> Result<MapperFlushAll, FlagUpdateError>

Set the flags of an existing page table level 3 entry Read more
source§

unsafe fn set_flags_p2_entry( &mut self, page: Page<Size2MiB>, flags: PageTableFlags ) -> Result<MapperFlushAll, FlagUpdateError>

Set the flags of an existing page table level 2 entry Read more
source§

fn translate_page( &self, page: Page<Size2MiB> ) -> Result<PhysFrame<Size2MiB>, TranslateError>

Return the frame that the specified page is mapped to. Read more
source§

unsafe fn map_to<A>( &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> + ?Sized,

Creates a new mapping in the page table. Read more
source§

unsafe fn identity_map<A>( &mut self, frame: PhysFrame<S>, flags: PageTableFlags, frame_allocator: &mut A ) -> Result<MapperFlush<S>, MapToError<S>>
where Self: Sized + Mapper<S>, A: FrameAllocator<Size4KiB> + ?Sized, S: PageSize,

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

impl<'a> Mapper<Size4KiB> for OffsetPageTable<'a>

source§

unsafe fn map_to_with_table_flags<A>( &mut self, page: Page<Size4KiB>, frame: PhysFrame<Size4KiB>, flags: PageTableFlags, parent_table_flags: PageTableFlags, allocator: &mut A ) -> Result<MapperFlush<Size4KiB>, MapToError<Size4KiB>>

Creates a new mapping in the page table. Read more
source§

fn unmap( &mut self, page: Page<Size4KiB> ) -> Result<(PhysFrame<Size4KiB>, MapperFlush<Size4KiB>), UnmapError>

Removes a mapping from the page table and returns the frame that used to be mapped. Read more
source§

unsafe fn update_flags( &mut self, page: Page<Size4KiB>, flags: PageTableFlags ) -> Result<MapperFlush<Size4KiB>, FlagUpdateError>

Updates the flags of an existing mapping. Read more
source§

unsafe fn set_flags_p4_entry( &mut self, page: Page<Size4KiB>, flags: PageTableFlags ) -> Result<MapperFlushAll, FlagUpdateError>

Set the flags of an existing page level 4 table entry Read more
source§

unsafe fn set_flags_p3_entry( &mut self, page: Page<Size4KiB>, flags: PageTableFlags ) -> Result<MapperFlushAll, FlagUpdateError>

Set the flags of an existing page table level 3 entry Read more
source§

unsafe fn set_flags_p2_entry( &mut self, page: Page<Size4KiB>, flags: PageTableFlags ) -> Result<MapperFlushAll, FlagUpdateError>

Set the flags of an existing page table level 2 entry Read more
source§

fn translate_page( &self, page: Page<Size4KiB> ) -> Result<PhysFrame<Size4KiB>, TranslateError>

Return the frame that the specified page is mapped to. Read more
source§

unsafe fn map_to<A>( &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> + ?Sized,

Creates a new mapping in the page table. Read more
source§

unsafe fn identity_map<A>( &mut self, frame: PhysFrame<S>, flags: PageTableFlags, frame_allocator: &mut A ) -> Result<MapperFlush<S>, MapToError<S>>
where Self: Sized + Mapper<S>, A: FrameAllocator<Size4KiB> + ?Sized, S: PageSize,

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

impl<'a> Translate for OffsetPageTable<'a>

source§

fn translate(&self, addr: VirtAddr) -> TranslateResult

Return the frame that the given virtual address is mapped to and the offset within that frame. Read more
source§

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

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

Auto Trait Implementations§

§

impl<'a> Freeze for OffsetPageTable<'a>

§

impl<'a> RefUnwindSafe for OffsetPageTable<'a>

§

impl<'a> Send for OffsetPageTable<'a>

§

impl<'a> Sync for OffsetPageTable<'a>

§

impl<'a> Unpin for OffsetPageTable<'a>

§

impl<'a> !UnwindSafe for OffsetPageTable<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

impl<T> MapperAllSizes for T