[sq] add Page caps implementations

This commit is contained in:
Berkus Decker 2020-12-29 16:18:20 +02:00
parent abc84ec6aa
commit 8d8a1c819a
4 changed files with 56 additions and 0 deletions

View File

@ -35,3 +35,21 @@ capdef! { PageDirectory }
//=====================
// Cap implementation
//=====================
impl PageDirectoryCapability {
pub(crate) fn base_address() -> PhysAddr {
PhysAddr::new(self.0.read(PageDirectoryCap::BasePtr))
}
pub(crate) fn is_mapped() -> bool {
self.0.read(PageDirectoryCap::IsMapped) == 1
}
pub(crate) fn mapped_address() -> VirtAddr {
VirtAddr::new(self.0.read(PageDirectoryCap::MappedAddress))
}
pub(crate) fn mapped_asid() -> ASID {
self.0.read(PageDirectoryCap::MappedASID)
}
}

View File

@ -34,3 +34,21 @@ capdef! { PageGlobalDirectory }
//=====================
// Cap implementation
//=====================
impl PageGlobalDirectoryCapability {
pub(crate) fn base_address() -> PhysAddr {
PhysAddr::new(self.0.read(PageGlobalDirectoryCap::BasePtr))
}
pub(crate) fn is_mapped() -> bool {
self.0.read(PageGlobalDirectoryCap::IsMapped) == 1
}
pub(crate) fn mapped_address() -> VirtAddr {
VirtAddr::new(self.0.read(PageGlobalDirectoryCap::MappedAddress))
}
pub(crate) fn mapped_asid() -> ASID {
self.0.read(PageGlobalDirectoryCap::MappedASID)
}
}

View File

@ -35,3 +35,21 @@ capdef! { PageTable }
//=====================
// Cap implementation
//=====================
impl PageTableCapability {
pub(crate) fn base_address() -> PhysAddr {
PhysAddr::new(self.0.read(PageTableCap::BasePtr))
}
pub(crate) fn is_mapped() -> bool {
self.0.read(PageTableCap::IsMapped) == 1
}
pub(crate) fn mapped_address() -> VirtAddr {
VirtAddr::new(self.0.read(PageTableCap::MappedAddress))
}
pub(crate) fn mapped_asid() -> ASID {
self.0.read(PageTableCap::MappedASID)
}
}

View File

@ -26,3 +26,5 @@ impl PageCacheManagement for PageGlobalDirectory {
todo!()
}
}
impl From<PhysAddr> for PageGlobalDirectory {}