|  | /* Contains macros and constants for the kernel VM mapping, page tables, | 
|  | * segmentation, control registers, etc. */ | 
|  |  | 
|  | #pragma once | 
|  |  | 
|  | #define ROS_INC_ARCH_MMU_H | 
|  |  | 
|  | #include <ros/arch/mmu64.h> | 
|  |  | 
|  | /* **************************************** */ | 
|  | /* Control Registers */ | 
|  |  | 
|  | // Control Register flags | 
|  | #define CR0_PE		0x00000001	// Protection Enable | 
|  | #define CR0_MP		0x00000002	// Monitor coProcessor | 
|  | #define CR0_EM		0x00000004	// Emulation | 
|  | #define CR0_TS		0x00000008	// Task Switched | 
|  | #define CR0_ET		0x00000010	// Extension Type | 
|  | #define CR0_NE		0x00000020	// Numeric Error | 
|  | #define CR0_WP		0x00010000	// Write Protect | 
|  | #define CR0_AM		0x00040000	// Alignment Mask | 
|  | #define CR0_NW		0x20000000	// Not Writethrough - more tricky than it sounds | 
|  | #define CR0_CD		0x40000000	// Cache Disable | 
|  | #define CR0_PG		0x80000000	// Paging | 
|  |  | 
|  | // These two relate to the cacheability (L1, etc) of the page directory | 
|  | #define CR3_PWT		0x00000008	// Page directory caching write through | 
|  | #define CR3_PCD		0x00000010	// Page directory caching disabled | 
|  |  | 
|  | #define CR4_VME		0x00000001	// V86 Mode Extensions | 
|  | #define CR4_PVI		0x00000002	// Protected-Mode Virtual Interrupts | 
|  | #define CR4_TSD		0x00000004	// Time Stamp Disable | 
|  | #define CR4_DE		0x00000008	// Debugging Extensions | 
|  | #define CR4_PSE		0x00000010	// Page Size Extensions | 
|  | #define CR4_PAE		0x00000020	// Physical Address Extensions | 
|  | #define CR4_MCE		0x00000040	// Machine Check Enable | 
|  | #define CR4_PGE		0x00000080	// Global Pages Enabled | 
|  | #define CR4_PCE		0x00000100	// Performance counter enable | 
|  | #define CR4_OSFXSR	0x00000200	// OS support for FXSAVE/FXRSTOR | 
|  | #define CR4_OSXMME	0x00000400	// OS support for unmasked SIMD FP exceptions | 
|  | #define CR4_VMXE	0x00002000	// VMX enable | 
|  | #define CR4_SMXE	0x00004000	// SMX enable | 
|  | #define CR4_FSGSBASE	0x00010000	// RD/WR FS/GS Base enabled | 
|  | #define CR4_OSXSAVE	0x00040000	// XSAVE and processor extended states-enabled | 
|  |  | 
|  | // Eflags register | 
|  | #define FL_CF		0x00000001	// Carry Flag | 
|  | #define FL_PF		0x00000004	// Parity Flag | 
|  | #define FL_AF		0x00000010	// Auxiliary carry Flag | 
|  | #define FL_ZF		0x00000040	// Zero Flag | 
|  | #define FL_SF		0x00000080	// Sign Flag | 
|  | #define FL_TF		0x00000100	// Trap Flag | 
|  | #define FL_IF		0x00000200	// Interrupt Flag | 
|  | #define FL_DF		0x00000400	// Direction Flag | 
|  | #define FL_OF		0x00000800	// Overflow Flag | 
|  | #define FL_STATUS (FL_CF | FL_PF | FL_AF | FL_ZF | FL_SF | FL_OF) | 
|  | #define FL_IOPL_MASK	0x00003000	// I/O Privilege Level bitmask | 
|  | #define FL_IOPL_0	0x00000000	//   IOPL == 0 | 
|  | #define FL_IOPL_1	0x00001000	//   IOPL == 1 | 
|  | #define FL_IOPL_2	0x00002000	//   IOPL == 2 | 
|  | #define FL_IOPL_3	0x00003000	//   IOPL == 3 | 
|  | #define FL_NT		0x00004000	// Nested Task | 
|  | #define FL_RF		0x00010000	// Resume Flag | 
|  | #define FL_VM		0x00020000	// Virtual 8086 mode | 
|  | #define FL_AC		0x00040000	// Alignment Check | 
|  | #define FL_VIF		0x00080000	// Virtual Interrupt Flag | 
|  | #define FL_VIP		0x00100000	// Virtual Interrupt Pending | 
|  | #define FL_ID		0x00200000	// ID flag | 
|  | #define FL_RSVD_1	0x00000002	// These 1s must be 1, rflags |= this | 
|  | #define FL_RSVD_0	0x003f7fd7	// These 0s must be 0, rflags &= this | 
|  |  | 
|  | // Page fault error codes | 
|  | #define FEC_PR		0x1	// Page fault caused by protection violation | 
|  | #define FEC_WR		0x2	// Page fault caused by a write | 
|  | #define FEC_U		0x4	// Page fault occured while in user mode |