mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 09:45:19 +08:00
feat: utils: addr: allow to convert from u32 and u64
This commit is contained in:
parent
7fa26c109f
commit
77283b47ef
@ -14,6 +14,15 @@ pub fn align_down(addr: usize, align: usize) -> usize {
|
||||
addr & !(align - 1)
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn is_aligned(addr: usize, align: usize) -> bool {
|
||||
if align.is_power_of_two() {
|
||||
addr & (align - 1) == 0
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Default, Eq, Ord, PartialOrd, PartialEq)]
|
||||
pub struct PhysAddr(pub usize);
|
||||
|
||||
@ -37,11 +46,7 @@ pub trait AddressOps: Copy + Clone + Default + Eq + Ord + PartialOrd + PartialEq
|
||||
where T: Into<usize>;
|
||||
fn is_aligned<T>(&self, align: T) -> bool
|
||||
where T: Into<usize> + Copy {
|
||||
if align.into().is_power_of_two() {
|
||||
self.as_usize() & (align.into() - 1) == 0
|
||||
} else {
|
||||
false
|
||||
}
|
||||
is_aligned(self.as_usize(), align.into())
|
||||
}
|
||||
}
|
||||
|
||||
@ -219,6 +224,19 @@ impl From<usize> for PhysAddr {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u32> for PhysAddr {
|
||||
fn from(addr: u32) -> Self {
|
||||
PhysAddr(addr as usize)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
impl From<u64> for PhysAddr {
|
||||
fn from(addr: u64) -> Self {
|
||||
PhysAddr(addr as usize)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<NonZeroUsize> for PhysAddr {
|
||||
fn from(addr: NonZeroUsize) -> Self {
|
||||
PhysAddr(addr.get())
|
||||
@ -261,6 +279,19 @@ impl From<usize> for VirtAddr {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u32> for VirtAddr {
|
||||
fn from(addr: u32) -> Self {
|
||||
VirtAddr(addr as usize)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(target_pointer_width = "64")]
|
||||
impl From<u64> for VirtAddr {
|
||||
fn from(addr: u64) -> Self {
|
||||
VirtAddr(addr as usize)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<NonZeroUsize> for VirtAddr {
|
||||
fn from(addr: NonZeroUsize) -> Self {
|
||||
VirtAddr(addr.get())
|
||||
|
Loading…
Reference in New Issue
Block a user