#[allow(clippy::struct_excessive_bools)]
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct PrivilegeLevel {
pub ring0: bool,
pub ring1: bool,
pub ring2: bool,
pub ring3: bool,
}
#[allow(clippy::struct_excessive_bools)]
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct OperatingMode {
pub real: bool,
pub v8086: bool,
pub protected: bool,
pub compat: bool,
pub long: bool,
}
#[allow(clippy::struct_excessive_bools)]
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct SpecialModes {
pub smm: bool,
pub smm_off: bool,
pub sgx: bool,
pub sgx_off: bool,
pub tsx: bool,
pub tsx_off: bool,
}
#[allow(clippy::struct_excessive_bools)]
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct VmxMode {
pub root: bool,
pub non_root: bool,
pub root_seam: bool,
pub non_root_seam: bool,
pub off: bool,
}
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct CpuModes {
pub privilege_level: PrivilegeLevel,
pub operating_mode: OperatingMode,
pub special_modes: SpecialModes,
pub vmx: VmxMode,
}
#[doc(hidden)]
impl CpuModes {
pub(crate) fn from_raw(raw: ffi::ND_VALID_MODES) -> Self {
let raw = unsafe { raw.__bindgen_anon_1 };
Self {
privilege_level: PrivilegeLevel {
ring0: raw.Ring0() != 0,
ring1: raw.Ring1() != 0,
ring2: raw.Ring2() != 0,
ring3: raw.Ring3() != 0,
},
operating_mode: OperatingMode {
real: raw.Real() != 0,
v8086: raw.V8086() != 0,
protected: raw.Protected() != 0,
compat: raw.Compat() != 0,
long: raw.Long() != 0,
},
special_modes: SpecialModes {
smm: raw.Smm() != 0,
smm_off: raw.SmmOff() != 0,
sgx: raw.Sgx() != 0,
sgx_off: raw.SgxOff() != 0,
tsx: raw.Tsx() != 0,
tsx_off: raw.TsxOff() != 0,
},
vmx: VmxMode {
root: raw.VmxRoot() != 0,
non_root: raw.VmxNonRoot() != 0,
root_seam: raw.VmxRootSeam() != 0,
non_root_seam: raw.VmxNonRootSeam() != 0,
off: raw.VmxOff() != 0,
},
}
}
}