1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
#![cfg(target_arch="x86_64")] #![warn(missing_docs)] #![feature(const_fn)] #![feature(asm)] #![feature(associated_consts)] #![no_std] #![cfg_attr(test, allow(unused_features))] pub use address::{VirtualAddress, PhysicalAddress}; #[macro_use] extern crate bitflags; #[macro_use] extern crate raw_cpuid; extern crate bit_field; pub mod address; macro_rules! bit { ( $x:expr ) => { 1 << $x }; } macro_rules! check_flag { ($doc:meta, $fun:ident, $flag:ident) => ( #[$doc] pub fn $fun(&self) -> bool { self.contains($flag) } ) } macro_rules! is_bit_set { ($field:expr, $bit:expr) => ( $field & (1 << $bit) > 0 ) } macro_rules! check_bit_fn { ($doc:meta, $fun:ident, $field:ident, $bit:expr) => ( #[$doc] pub fn $fun(&self) -> bool { is_bit_set!(self.$field, $bit) } ) } pub mod time; pub mod irq; pub mod paging; pub mod task; pub mod syscall; pub mod sgx; pub mod control_regs; pub mod dtables; pub mod io; pub mod msr; pub mod flags; pub mod segmentation; pub mod tlb; pub mod cpuid { pub use raw_cpuid::*; } #[derive(Copy, Clone, PartialEq, Eq)] #[repr(u8)] pub enum PrivilegeLevel { Ring0 = 0, Ring1 = 1, Ring2 = 2, Ring3 = 3, } #[inline(always)] pub unsafe fn halt() { asm!("hlt" :::: "volatile"); }