pub struct VirtAddr(/* private fields */);
Expand description
A canonical 64-bit virtual memory address.
This is a wrapper type around an u64
, so it is always 8 bytes, even when compiled
on non 64-bit systems. The
TryFrom
trait can be used for performing conversions
between u64
and usize
.
On x86_64
, only the 48 lower bits of a virtual address can be used. The top 16 bits need
to be copies of bit 47, i.e. the most significant bit. Addresses that fulfil this criterion
are called “canonical”. This type guarantees that it always represents a canonical address.
Implementations§
Source§impl VirtAddr
impl VirtAddr
Sourcepub const fn try_new(addr: u64) -> Result<VirtAddr, VirtAddrNotValid>
pub const fn try_new(addr: u64) -> Result<VirtAddr, VirtAddrNotValid>
Tries to create a new canonical virtual address.
This function checks wether the given address is canonical and returns an error otherwise. An address is canonical if bits 48 to 64 are a correct sign extension (i.e. copies of bit 47).
Sourcepub const fn new_truncate(addr: u64) -> VirtAddr
pub const fn new_truncate(addr: u64) -> VirtAddr
Sourcepub const unsafe fn new_unsafe(addr: u64) -> VirtAddr
pub const unsafe fn new_unsafe(addr: u64) -> VirtAddr
Creates a new virtual address, without any checks.
§Safety
You must make sure bits 48..64 are equal to bit 47. This is not checked.
Sourcepub fn from_ptr<T: ?Sized>(ptr: *const T) -> Self
pub fn from_ptr<T: ?Sized>(ptr: *const T) -> Self
Creates a virtual address from the given pointer
Sourcepub const fn as_mut_ptr<T>(self) -> *mut T
pub const fn as_mut_ptr<T>(self) -> *mut T
Converts the address to a mutable raw pointer.
Sourcepub const fn is_null(self) -> bool
pub const fn is_null(self) -> bool
Convenience method for checking if a virtual address is null.
Sourcepub fn align_up<U>(self, align: U) -> Self
pub fn align_up<U>(self, align: U) -> Self
Aligns the virtual address upwards to the given alignment.
See the align_up
function for more information.
§Panics
This function panics if the resulting address is higher than
0xffff_ffff_ffff_ffff
.
Sourcepub fn align_down<U>(self, align: U) -> Self
pub fn align_down<U>(self, align: U) -> Self
Aligns the virtual address downwards to the given alignment.
See the align_down
function for more information.
Sourcepub fn is_aligned<U>(self, align: U) -> bool
pub fn is_aligned<U>(self, align: U) -> bool
Checks whether the virtual address has the demanded alignment.
Sourcepub const fn page_offset(self) -> PageOffset
pub const fn page_offset(self) -> PageOffset
Returns the 12-bit page offset of this virtual address.
Sourcepub const fn p1_index(self) -> PageTableIndex
pub const fn p1_index(self) -> PageTableIndex
Returns the 9-bit level 1 page table index.
Sourcepub const fn p2_index(self) -> PageTableIndex
pub const fn p2_index(self) -> PageTableIndex
Returns the 9-bit level 2 page table index.
Sourcepub const fn p3_index(self) -> PageTableIndex
pub const fn p3_index(self) -> PageTableIndex
Returns the 9-bit level 3 page table index.
Sourcepub const fn p4_index(self) -> PageTableIndex
pub const fn p4_index(self) -> PageTableIndex
Returns the 9-bit level 4 page table index.
Sourcepub const fn page_table_index(self, level: PageTableLevel) -> PageTableIndex
pub const fn page_table_index(self, level: PageTableLevel) -> PageTableIndex
Returns the 9-bit level page table index.
Trait Implementations§
Source§impl AddAssign<u64> for VirtAddr
impl AddAssign<u64> for VirtAddr
Source§fn add_assign(&mut self, rhs: u64)
fn add_assign(&mut self, rhs: u64)
+=
operation. Read moreSource§impl Ord for VirtAddr
impl Ord for VirtAddr
Source§impl PartialOrd for VirtAddr
impl PartialOrd for VirtAddr
Source§impl Step for VirtAddr
impl Step for VirtAddr
Source§fn steps_between(start: &Self, end: &Self) -> Option<usize>
fn steps_between(start: &Self, end: &Self) -> Option<usize>
step_trait
)Source§fn forward_checked(start: Self, count: usize) -> Option<Self>
fn forward_checked(start: Self, count: usize) -> Option<Self>
step_trait
)Source§fn backward_checked(start: Self, count: usize) -> Option<Self>
fn backward_checked(start: Self, count: usize) -> Option<Self>
step_trait
)Source§fn forward(start: Self, count: usize) -> Self
fn forward(start: Self, count: usize) -> Self
step_trait
)Source§unsafe fn forward_unchecked(start: Self, count: usize) -> Self
unsafe fn forward_unchecked(start: Self, count: usize) -> Self
step_trait
)Source§fn backward(start: Self, count: usize) -> Self
fn backward(start: Self, count: usize) -> Self
step_trait
)Source§unsafe fn backward_unchecked(start: Self, count: usize) -> Self
unsafe fn backward_unchecked(start: Self, count: usize) -> Self
step_trait
)Source§impl SubAssign<u64> for VirtAddr
impl SubAssign<u64> for VirtAddr
Source§fn sub_assign(&mut self, rhs: u64)
fn sub_assign(&mut self, rhs: u64)
-=
operation. Read more