Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

91 lines
2.5 KiB

/*--
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