#[repr(transparent)]pub struct PageTableEntry(pub usize);Tuple Fields§
§0: usizeImplementations§
Source§impl PageTableEntry
impl PageTableEntry
Sourcepub open spec fn prop_assign_spec(self, flags: usize) -> Self
pub open spec fn prop_assign_spec(self, flags: usize) -> Self
{ Self((self.0 & !Self::PROP_MASK()) | flags as usize) }Sourcepub exec fn prop_assign(&mut self, flags: usize)
pub exec fn prop_assign(&mut self, flags: usize)
ensures
self.0 == old(self).prop_assign_spec(flags).0,Sourcepub exec fn encode_cache(cache: CachePolicy) -> res : usize
pub exec fn encode_cache(cache: CachePolicy) -> res : usize
Sourcepub open spec fn format_flags_spec(prop: PageProperty) -> usize
pub open spec fn format_flags_spec(prop: PageProperty) -> usize
{
let flags: u8 = prop.flags.value();
let priv_flags: u8 = prop.priv_flags.value();
PageTableFlags::PRESENT() | flags.map_forward(&PAGE_FLAG_MAPPING)
| flags.map_invert_forward(&PAGE_INVERTED_FLAG_MAPPING)
| priv_flags.map_forward(&PAGE_PRIV_MAPPING) | Self::encode_cache(prop.cache)
}Sourcepub exec fn format_flags(prop: PageProperty) -> res : usize
pub exec fn format_flags(prop: PageProperty) -> res : usize
ensures
res == Self::format_flags_spec(prop),Sourcepub exec fn format_cache(flags: usize) -> res : CachePolicy
pub exec fn format_cache(flags: usize) -> res : CachePolicy
Sourcepub open spec fn format_property_spec(entry: usize) -> PageProperty
pub open spec fn format_property_spec(entry: usize) -> PageProperty
{
let flags: u8 = entry.map_backward(&PAGE_FLAG_MAPPING)
| entry.map_invert_backward(&PAGE_INVERTED_FLAG_MAPPING);
let priv_flags: u8 = entry.map_backward(&PAGE_PRIV_MAPPING);
let cache = Self::format_cache(entry);
PageProperty {
flags: PageFlags::from_bits(flags),
cache,
priv_flags: PrivilegedPageFlags::from_bits(priv_flags),
}
}Sourcepub exec fn format_property(entry: usize) -> res : PageProperty
pub exec fn format_property(entry: usize) -> res : PageProperty
ensures
res == Self::format_property_spec(entry),Sourcepub exec fn format_huge_page(level: PagingLevel) -> res : u64
pub exec fn format_huge_page(level: PagingLevel) -> res : u64
Trait Implementations§
Source§impl Clone for PageTableEntry
impl Clone for PageTableEntry
Source§impl Debug for PageTableEntry
impl Debug for PageTableEntry
Source§impl PageTableEntryTrait for PageTableEntry
impl PageTableEntryTrait for PageTableEntry
Source§open spec fn default_spec() -> Self
open spec fn default_spec() -> Self
{ Self { 0: 0 } }Source§open spec fn new_absent_spec() -> Self
open spec fn new_absent_spec() -> Self
{ Self::default_spec() }Source§exec fn new_absent() -> res : Self
exec fn new_absent() -> res : Self
Source§open spec fn as_usize_spec(self) -> usize
open spec fn as_usize_spec(self) -> usize
{ self.0 as usize }Source§open spec fn is_present_spec(&self) -> bool
open spec fn is_present_spec(&self) -> bool
{ self.0 & PageTableFlags::PRESENT() != 0 }Source§exec fn is_present(&self) -> res : bool
exec fn is_present(&self) -> res : bool
ensures
res == self.is_present_spec(),Source§open spec fn set_prop_spec(&self, prop: PageProperty) -> Self
open spec fn set_prop_spec(&self, prop: PageProperty) -> Self
{
let flags = Self::format_flags(prop);
self.prop_assign_spec(flags)
}Source§exec fn set_prop(&mut self, prop: PageProperty)
exec fn set_prop(&mut self, prop: PageProperty)
ensures
*self == old(self).set_prop_spec(prop),Source§open spec fn new_page_spec(paddr: Paddr, level: PagingLevel, prop: PageProperty) -> Self
open spec fn new_page_spec(paddr: Paddr, level: PagingLevel, prop: PageProperty) -> Self
{
let addr = paddr & PHYS_ADDR_MASK();
let hp = Self::format_huge_page(level) as usize;
let flags = Self::format_flags(prop) as usize;
Self(addr | hp | flags)
}Source§exec fn new_page(paddr: Paddr, level: PagingLevel, prop: PageProperty) -> res : Self
exec fn new_page(paddr: Paddr, level: PagingLevel, prop: PageProperty) -> res : Self
Source§open spec fn new_pt_spec(paddr: Paddr) -> Self
open spec fn new_pt_spec(paddr: Paddr) -> Self
{
let addr = paddr & PHYS_ADDR_MASK();
Self(
addr | PageTableFlags::PRESENT() | PageTableFlags::WRITABLE()
| PageTableFlags::USER(),
)
}Source§open spec fn paddr_spec(&self) -> Paddr
open spec fn paddr_spec(&self) -> Paddr
{ self.0 & PHYS_ADDR_MASK() }Source§open spec fn is_last_spec(&self, level: PagingLevel) -> bool
open spec fn is_last_spec(&self, level: PagingLevel) -> bool
{ level == 1 || (self.0 & PageTableFlags::HUGE() != 0) }Source§exec fn is_last(&self, level: PagingLevel) -> res : bool
exec fn is_last(&self, level: PagingLevel) -> res : bool
ensures
res == self.is_last_spec(level),Source§proof fn set_prop_properties(self, prop: PageProperty)
proof fn set_prop_properties(self, prop: PageProperty)
Source§proof fn new_properties()
proof fn new_properties()
Source§fn from_usize(pte_raw: usize) -> Self
fn from_usize(pte_raw: usize) -> Self
Source§impl PartialEq for PageTableEntry
impl PartialEq for PageTableEntry
impl Copy for PageTableEntry
impl StructuralPartialEq for PageTableEntry
Auto Trait Implementations§
impl Freeze for PageTableEntry
impl RefUnwindSafe for PageTableEntry
impl Send for PageTableEntry
impl Sync for PageTableEntry
impl Unpin for PageTableEntry
impl UnwindSafe for PageTableEntry
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more