feat: add pmm, add vmm, add allocator, create memory management foundation
This commit is contained in:
36
kernel/src/mem/address.rs
Normal file
36
kernel/src/mem/address.rs
Normal file
@@ -0,0 +1,36 @@
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
|
||||
#[repr(transparent)]
|
||||
pub struct PhysAddr(pub u64);
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
|
||||
#[repr(transparent)]
|
||||
pub struct VirtAddr(pub u64);
|
||||
|
||||
impl PhysAddr {
|
||||
/// Convert physical address to virtual via HHDM offset
|
||||
pub fn to_virt(self, hhdm_offset: u64) -> VirtAddr {
|
||||
VirtAddr(self.0 + hhdm_offset)
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn is_aligned(self) -> bool { self.0 % 4096 == 0 }
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn align_down(self) -> Self { Self(self.0 & !0xFFF) }
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn align_up(self) -> Self { Self((self.0 + 4095) & !0xFFF) }
|
||||
}
|
||||
|
||||
impl VirtAddr {
|
||||
#[allow(dead_code)]
|
||||
pub fn to_phys(self, hhdm_offset: u64) -> Option<PhysAddr> {
|
||||
if self.0 < hhdm_offset { return None; }
|
||||
Some(PhysAddr(self.0 - hhdm_offset))
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn as_ptr<T>(self) -> *const T { self.0 as *const T }
|
||||
|
||||
pub fn as_mut_ptr<T>(self) -> *mut T { self.0 as *mut T }
|
||||
}
|
||||
Reference in New Issue
Block a user