Nothing to see here, move along
1pub fn phys_to_virt(phys: u64, hhdm_offset: u64) -> Option<u64> {
2 phys.checked_add(hhdm_offset)
3}
4
5pub fn virt_to_phys(virt: u64, hhdm_offset: u64) -> Option<u64> {
6 virt.checked_sub(hhdm_offset)
7}
8
9pub const CANONICAL_SHIFT: u32 = 47;
10
11pub fn is_canonical(addr: u64) -> bool {
12 const {
13 assert!(
14 CANONICAL_SHIFT == 47,
15 "is_canonical assumes 4-level paging (48-bit VA)"
16 )
17 }
18 let top_bits = addr >> CANONICAL_SHIFT;
19 top_bits == 0 || top_bits == (u64::MAX >> CANONICAL_SHIFT)
20}