#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)]
pub struct PhysAddr(u64);
impl PhysAddr {
#[must_use]
pub const fn new(addr: u64) -> Self {
Self(addr)
}
#[must_use]
pub const fn as_u64(self) -> u64 {
self.0
}
#[must_use]
pub const fn is_page_aligned(self) -> bool {
self.0.trailing_zeros() >= 12
}
#[must_use]
pub const fn page_align_down(self) -> Self {
Self(self.0 & !0xFFF)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)]
pub struct VirtAddr(u64);
impl VirtAddr {
#[must_use]
pub const fn new(addr: u64) -> Self {
Self(addr)
}
#[must_use]
pub const fn as_u64(self) -> u64 {
self.0
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(transparent)]
pub struct GuestPhysAddr(u64);
impl GuestPhysAddr {
#[must_use]
pub const fn new(addr: u64) -> Self {
Self(addr)
}
#[must_use]
pub const fn as_u64(self) -> u64 {
self.0
}
#[must_use]
pub const fn is_page_aligned(self) -> bool {
self.0.trailing_zeros() >= 12
}
}