1*5a9dd748SJianyong Wu // Copyright 2023 Arm Limited (or its affiliates). All rights reserved. 2*5a9dd748SJianyong Wu // SPDX-License-Identifier: Apache-2.0 3*5a9dd748SJianyong Wu 4*5a9dd748SJianyong Wu use libc::{sysconf, _SC_PAGESIZE}; 5*5a9dd748SJianyong Wu 6*5a9dd748SJianyong Wu /// get host page size get_page_size() -> u647*5a9dd748SJianyong Wupub fn get_page_size() -> u64 { 8*5a9dd748SJianyong Wu // SAFETY: FFI call. Trivially safe. 9*5a9dd748SJianyong Wu unsafe { sysconf(_SC_PAGESIZE) as u64 } 10*5a9dd748SJianyong Wu } 11*5a9dd748SJianyong Wu 12*5a9dd748SJianyong Wu /// round up address to let it align page size align_page_size_up(address: u64) -> u6413*5a9dd748SJianyong Wupub fn align_page_size_up(address: u64) -> u64 { 14*5a9dd748SJianyong Wu let page_size = get_page_size(); 15*5a9dd748SJianyong Wu (address + page_size - 1) & !(page_size - 1) 16*5a9dd748SJianyong Wu } 17*5a9dd748SJianyong Wu 18*5a9dd748SJianyong Wu /// round down address to let it align page size align_page_size_down(address: u64) -> u6419*5a9dd748SJianyong Wupub fn align_page_size_down(address: u64) -> u64 { 20*5a9dd748SJianyong Wu let page_size = get_page_size(); 21*5a9dd748SJianyong Wu address & !(page_size - 1) 22*5a9dd748SJianyong Wu } 23*5a9dd748SJianyong Wu 24*5a9dd748SJianyong Wu /// Test if address is 4k aligned is_4k_aligned(address: u64) -> bool25*5a9dd748SJianyong Wupub fn is_4k_aligned(address: u64) -> bool { 26*5a9dd748SJianyong Wu (address & 0xfff) == 0 27*5a9dd748SJianyong Wu } 28*5a9dd748SJianyong Wu 29*5a9dd748SJianyong Wu /// Test if size is 4k aligned is_4k_multiple(size: u64) -> bool30*5a9dd748SJianyong Wupub fn is_4k_multiple(size: u64) -> bool { 31*5a9dd748SJianyong Wu (size & 0xfff) == 0 32*5a9dd748SJianyong Wu } 33*5a9dd748SJianyong Wu 34*5a9dd748SJianyong Wu /// Test if address is page size aligned is_page_size_aligned(address: u64) -> bool35*5a9dd748SJianyong Wupub fn is_page_size_aligned(address: u64) -> bool { 36*5a9dd748SJianyong Wu let page_size = get_page_size(); 37*5a9dd748SJianyong Wu address & (page_size - 1) == 0 38*5a9dd748SJianyong Wu } 39