Skip to main content

sparreal_kernel/os/mem/
address.rs

1use core::ptr::NonNull;
2
3use crate::hal::al;
4pub use crate::hal::al::{PhysAddr, VirtAddr};
5
6impl VirtAddr {
7    pub fn as_mut_ptr<T>(&self) -> *mut T {
8        self.raw() as _
9    }
10}
11
12impl<T> From<VirtAddr> for *const T {
13    fn from(value: VirtAddr) -> Self {
14        value.raw() as _
15    }
16}
17
18impl<T> From<VirtAddr> for *mut T {
19    fn from(value: VirtAddr) -> *mut T {
20        value.raw() as _
21    }
22}
23
24impl<T> From<NonNull<T>> for VirtAddr {
25    fn from(value: NonNull<T>) -> Self {
26        Self::new(value.as_ptr() as _)
27    }
28}
29
30impl<T> From<*mut T> for VirtAddr {
31    fn from(value: *mut T) -> Self {
32        Self::new(value as _)
33    }
34}
35
36#[macro_export]
37macro_rules! pa {
38    (val: $val:expr) => {
39        PhysAddr::new($val as _)
40    };
41}
42
43#[macro_export]
44macro_rules! va {
45    (val: $val:expr) => {
46        VirtAddr::new($val as _)
47    };
48}
49
50impl From<VirtAddr> for PhysAddr {
51    fn from(value: VirtAddr) -> Self {
52        al::memory::virt_to_phys(value)
53    }
54}
55
56// impl From<PhysAddr> for VirtAddr {
57//     fn from(value: PhysAddr) -> Self {
58//         al::memory::phys_to_virt(value)
59//     }
60// }