#![cfg_attr(not(test), no_std)]
#![cfg_attr(feature = "abi_x86_interrupt", feature(abi_x86_interrupt))]
#![cfg_attr(feature = "step_trait", feature(step_trait))]
#![cfg_attr(feature = "doc_cfg", feature(doc_cfg))]
#![warn(missing_docs)]
#![deny(missing_debug_implementations)]
#![deny(unsafe_op_in_unsafe_fn)]
pub use crate::addr::{
align_down, align_up,
enable_la57_mode, disable_la57_mode, is_la57_mode, LA57_ENABLED,
PhysAddr, VirtAddr,
};
pub mod addr;
pub mod instructions;
pub mod registers;
pub mod structures;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
#[repr(u8)]
pub enum PrivilegeLevel {
Ring0 = 0,
Ring1 = 1,
Ring2 = 2,
Ring3 = 3,
}
impl PrivilegeLevel {
#[inline]
pub const fn from_u16(value: u16) -> PrivilegeLevel {
match value {
0 => PrivilegeLevel::Ring0,
1 => PrivilegeLevel::Ring1,
2 => PrivilegeLevel::Ring2,
3 => PrivilegeLevel::Ring3,
_ => panic!("invalid privilege level"),
}
}
}
pub(crate) mod sealed {
pub trait Sealed {}
}