/*-- Module Name constant.h Author Thomas Parslow (tomp) --*/ // // Debugging Level defines // #ifdef DEBUG0 #define DBG0(x) x #define DBG1(x) #elif defined DEBUG1 #define DBG0(x) x #define DBG1(x) x #else #define DBG0(x) #define DBG1(x) #endif #define WAITFOREVER while(1); #define BUGCHECK while(1); #define ENTRIES_PER_PAGETABLE 1024 #define PAGE_SIZE 0x1000 #define ENABLING 0 #define RE_ENABLING 1 // // Define page-table-entry bit definitions // // Dir Table // ----------========== // 00000000000000000000xxxxxxxxxxxx // ::::::+--- Present = 1 - Not Present = 0 // :::::+---- ReadWrite = 1 - Read only = 0 // ::::+----- UserAccess = 1 - Supervisor = 0 // :::+------ Reserved // ::+------- Reserved // :+-------- Dirty = 1 - Not written = 0 // +--------- Accessed = 1 - No accessed = 0 #define PAGE_SUPERVISOR 0x0000 #define PAGE_READ_ONLY 0x0000 #define PAGE_PRESENT 0x0001 #define PAGE_NOT_PRESENT 0x0000 #define PAGE_READ_WRITE 0x0002 #define PAGE_USER_ACCESS 0x0004 #define PAGE_PERSIST 0x0200 // Tells kernel maintain // // Define RWSP (Read, Write, Supervisor, Present) // #define PAGE_RWSP 0L | PAGE_READ_WRITE | PAGE_SUPERVISOR | PAGE_PRESENT #define PAGE_ROSP 0L | PAGE_READ_ONLY | PAGE_SUPERVISOR | PAGE_PRESENT // Since the entire boot process occurs at ring 0, the only way we can // protext areas that we don't want trashed is too mark them not present #define PAGE_NO_ACCESS 0L | PAGE_READ_ONLY | PAGE_SUPERVISOR | PAGE_NOT_PRESENT // // Page-entry macros // #define PD_Entry(x) (USHORT)((x)>>22) & 0x3ff #define PT_Entry(x) (USHORT)((x)>>12) & 0x3ff #define PAGE_Count(x) (USHORT)((x)/PAGE_SIZE) + (((x) % PAGE_SIZE) ? 1 : 0) #define PhysToSeg(x) (USHORT)((x) >> 4) & 0xffff #define PhysToOff(x) (USHORT)((x) & 0x0f) #define MAKE_FP(p,a) FP_SEG(p) = (USHORT)((a) >> 4) & 0xffff; FP_OFF(p) = (USHORT)((a) & 0x0f) #define MAKE_FLAT_ADDRESS(fp) ( ((ULONG)FP_SEG(fp) * 16 ) + (ULONG)FP_OFF(fp) ) // // Machine type definitions. // N.B. All the constants defined here // must match the ones defined in ntos\inc\i386.h // #define MACHINE_TYPE_ISA 0 #define MACHINE_TYPE_EISA 1 #define MACHINE_TYPE_MCA 2