use lazy_static::lazy_static;
use crate::{PageFormat, PageLevel};
pub const PAGE_PRESENT: u32 = 1 << 0;
pub const PAGE_WRITE: u32 = 1 << 1;
pub const PAGE_USER: u32 = 1 << 2;
pub const PAGE_HUGE: u32 = 1 << 7;
lazy_static! {
pub static ref PAGE_FORMAT_4K: PageFormat<'static, u32> = PageFormat {
levels: &[
PageLevel {
shift_bits: 12,
va_bits: 10,
present_bit: (PAGE_PRESENT, PAGE_PRESENT),
huge_page_bit: (0, 0),
page_table_mask: 0,
},
PageLevel {
shift_bits: 22,
va_bits: 10,
present_bit: (PAGE_PRESENT, PAGE_PRESENT),
huge_page_bit: (PAGE_HUGE, PAGE_HUGE),
page_table_mask: PAGE_PRESENT | PAGE_WRITE | PAGE_USER,
},
],
physical_mask: 0xffff_f000,
};
pub static ref PAGE_FORMAT_4K_PAE: PageFormat<'static, u64> = PageFormat {
levels: &[
PageLevel {
shift_bits: 12,
va_bits: 9,
present_bit: (PAGE_PRESENT as u64, PAGE_PRESENT as u64),
huge_page_bit: (0, 0),
page_table_mask: 0,
},
PageLevel {
shift_bits: 21,
va_bits: 9,
present_bit: (PAGE_PRESENT as u64, PAGE_PRESENT as u64),
huge_page_bit: (PAGE_HUGE as u64, PAGE_HUGE as u64),
page_table_mask: (PAGE_PRESENT | PAGE_WRITE | PAGE_USER) as u64,
},
PageLevel {
shift_bits: 30,
va_bits: 2,
present_bit: (PAGE_PRESENT as u64, PAGE_PRESENT as u64),
huge_page_bit: (0, 0),
page_table_mask: (PAGE_PRESENT | PAGE_WRITE | PAGE_USER) as u64,
},
],
physical_mask: 0x000f_ffff_ffff_f000,
};
pub static ref DEFAULT_PAGE_FORMAT: PageFormat<'static, u32> = PAGE_FORMAT_4K.clone();
}