enum { /* MSRs */ Efer = 0xC0000080, /* Extended Feature Enable */ }; enum { /* Cr0 */ Pe = 0x00000001, /* Protected Mode Enable */ Mp = 0x00000002, /* Monitor Coprocessor */ Em = 0x00000004, /* Emulate Coprocessor */ Ts = 0x00000008, /* Task Switched */ Et = 0x00000010, /* Extension Type */ Ne = 0x00000020, /* Numeric Error */ Wp = 0x00010000, /* Write Protect */ Am = 0x00040000, /* Alignment Mask */ Nw = 0x20000000, /* Not Writethrough */ Cd = 0x40000000, /* Cache Disable */ Pg = 0x80000000, /* Paging Enable */ }; enum { /* Cr3 */ Pwt = 0x00000008, /* Page-Level Writethrough */ Pcd = 0x00000010, /* Page-Level Cache Disable */ }; enum { /* Cr4 */ Vme = 0x00000001, /* Virtual-8086 Mode Extensions */ Pvi = 0x00000002, /* Protected Mode Virtual Interrupts */ //Tsd = 0x00000004, /* Time-Stamp Disable */ De = 0x00000008, /* Debugging Extensions */ Pse = 0x00000010, /* Page-Size Extensions */ Pae = 0x00000020, /* Physical Address Extension */ Mce = 0x00000040, /* Machine Check Enable */ Pge = 0x00000080, /* Page-Global Enable */ Pce = 0x00000100, /* Performance Monitoring Counter Enable */ Osfxsr = 0x00000200, /* FXSAVE/FXRSTOR Support */ Osxmmexcpt = 0x00000400, /* Unmasked Exception Support */ }; enum { /* Efer */ Sce = 0x00000001, /* System Call Extension */ Lme = 0x00000100, /* Long Mode Enable */ Lma = 0x00000400, /* Long Mode Active */ Nxe = 0x00000800, /* No-Execute Enable */ Ffxsr = 0x00004000, /* Fast FXSAVE/FXRSTOR */ }; enum { /* Pte */ PteP = 0x0000000000000001ULL,/* Present */ PteRW = 0x0000000000000002ULL,/* Read/Write */ PteUS = 0x0000000000000004ULL,/* User/Supervisor */ PtePWT = 0x0000000000000008ULL,/* Page-Level Write Through */ PtePCD = 0x0000000000000010ULL,/* Page Level Cache Disable */ PteA = 0x0000000000000020ULL,/* Accessed */ PteD = 0x0000000000000040ULL,/* Dirty */ PtePS = 0x0000000000000080ULL,/* Page Size */ PtePAT0 = PtePS, /* Level 0 PAT */ PteG = 0x0000000000000100ULL,/* Global */ PtePAT1 = 0x0000000000000800ULL,/* Level 1 PAT */ PteNX = 0x8000000000000000ULL,/* No Execute */ }; typedef u64int PTE; #define KZERO64 0xFFFFFFFF80000000ULL #define PGSIZE64 4096 #define PGSHIFT64 12 /* log(PGSIZE) */ #define PTESIZE64 512 #define PTESHIFT64 9 /* log(PTESIZE) */ #define PTEX64(pi, l) (((pi)>>((((l)-1)*9)+12)) & ((1<