twizzler_abi/syscall/
info.rs1use core::num::NonZeroUsize;
2
3use super::Syscall;
4use crate::arch::syscall::raw_syscall;
5#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Ord, Eq)]
6#[repr(C)]
7pub struct SysInfo {
9 pub version: u32,
11 pub flags: u32,
13 pub cpu_count: usize,
15 pub page_size: usize,
17}
18
19impl SysInfo {
20 pub fn cpu_count(&self) -> NonZeroUsize {
22 NonZeroUsize::new(self.cpu_count).expect("CPU count from sysinfo should always be non-zero")
23 }
24
25 pub fn page_size(&self) -> usize {
27 self.page_size
28 }
29}
30
31pub fn sys_info() -> SysInfo {
33 let mut sysinfo = core::mem::MaybeUninit::<SysInfo>::zeroed();
34 unsafe {
35 raw_syscall(
36 Syscall::SysInfo,
37 &[&mut sysinfo as *mut core::mem::MaybeUninit<SysInfo> as u64],
38 );
39 sysinfo.assume_init()
40 }
41}