sparreal_kernel/os/mem/
address.rs1use 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