pub const PAGE_SHIFT: usize = 12; pub const PAGE_SIZE: usize = 1 << PAGE_SHIFT; pub const PTE_SHIFT: u32 = 12; pub const PMD_SHIFT: u32 = 21; pub const PUD_SHIFT: u32 = 30; pub const PGD_SHIFT: u32 = 39; pub const PTE_SIZE: usize = 1 << PTE_SHIFT; pub const PMD_SIZE: usize = 1 << PMD_SHIFT; pub const PUD_SIZE: usize = 1 << PUD_SHIFT; pub const PGD_SIZE: usize = 1 << PGD_SHIFT; pub const PTE_MASK: usize = 1 << PTE_SHIFT - 1; pub const PMD_MASK: usize = 1 << PMD_SHIFT - 1; pub const PUD_MASK: usize = 1 << PUD_SHIFT - 1; pub const PGD_MASK: usize = 1 << PGD_SHIFT - 1; pub const ENTRIES_PER_TABLE: usize = PAGE_SIZE / 64; pub const PFType = struct{ pub const PROT: usize = 0; pub const WRITE: usize = 1<<1; pub const USER: usize = 1<<2; pub const RSVD: usize = 1<<3; pub const INSTR: usize = 1<<4; pub const PK: usize = 1<<5; pub const SHSTK: usize = 1<<6; }; pub const PGDEntry = packed struct { present: u1, write: u1, supervisor: u1, write_through: u1, cache_disable: u1, accessed: u1, _padding_1: u6, addr: u40, pub fn getIndex(self: usize) usize { return (self >> PGD_SHIFT) & 0x1FF; } };