Struct axmm::AddrSpace

source ·
pub struct AddrSpace { /* private fields */ }
Expand description

The virtual memory address space.

Implementations§

source§

impl AddrSpace

source

pub const fn base(&self) -> VirtAddr

Returns the address space base.

source

pub const fn end(&self) -> VirtAddr

Returns the address space end.

source

pub fn size(&self) -> usize

Returns the address space size.

source

pub const fn page_table(&self) -> &PageTable

Returns the reference to the inner page table.

source

pub const fn page_table_root(&self) -> PhysAddr

Returns the root physical address of the inner page table.

source

pub fn contains_range(&self, start: VirtAddr, size: usize) -> bool

Checks if the address space contains the given address range.

source

pub fn copy_mappings_from(&mut self, other: &AddrSpace) -> AxResult

Copies page table mappings from another address space.

It copies the page table entries only rather than the memory regions, usually used to copy a portion of the kernel space mapping to the user space.

Returns an error if the two address spaces overlap.

source

pub fn find_free_area( &self, hint: VirtAddr, size: usize, limit: VirtAddrRange ) -> Option<VirtAddr>

Finds a free area that can accommodate the given size.

The search starts from the given hint address, and the area should be within the given limit range.

Returns the start address of the free area. Returns None if no such area is found.

source

pub fn map_linear( &mut self, start_vaddr: VirtAddr, start_paddr: PhysAddr, size: usize, flags: MappingFlags ) -> AxResult

Add a new linear mapping.

See Backend for more details about the mapping backends.

The flags parameter indicates the mapping permissions and attributes.

Returns an error if the address range is out of the address space or not aligned.

source

pub fn map_alloc( &mut self, start: VirtAddr, size: usize, flags: MappingFlags, populate: bool ) -> AxResult

Add a new allocation mapping.

See Backend for more details about the mapping backends.

The flags parameter indicates the mapping permissions and attributes.

Returns an error if the address range is out of the address space or not aligned.

source

pub fn unmap(&mut self, start: VirtAddr, size: usize) -> AxResult

Removes mappings within the specified virtual address range.

Returns an error if the address range is out of the address space or not aligned.

source

pub fn read(&self, start: VirtAddr, buf: &mut [u8]) -> AxResult

To read data from the address space.

§Arguments
  • start - The start virtual address to read.
  • buf - The buffer to store the data.
source

pub fn write(&self, start: VirtAddr, buf: &[u8]) -> AxResult

To write data to the address space.

§Arguments
  • start_vaddr - The start virtual address to write.
  • buf - The buffer to write to the address space.
source

pub fn protect( &mut self, start: VirtAddr, size: usize, flags: MappingFlags ) -> AxResult

Updates mapping within the specified virtual address range.

Returns an error if the address range is out of the address space or not aligned.

source

pub fn clear(&mut self)

Removes all mappings in the address space.

source

pub fn handle_page_fault( &mut self, vaddr: VirtAddr, access_flags: MappingFlags ) -> bool

Handles a page fault at the given address.

access_flags indicates the access type that caused the page fault.

Returns true if the page fault is handled successfully (not a real fault).

Trait Implementations§

source§

impl Debug for AddrSpace

source§

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

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

impl Drop for AddrSpace

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

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.