mirror of
https://github.com/reactos/reactos.git
synced 2024-08-01 09:01:13 +00:00
add amd64 ketypes.h and mmtypes.h copied from x86
svn path=/branches/ros-amd64-bringup/; revision=34711
This commit is contained in:
parent
07a47f0686
commit
68c4fc0511
725
reactos/include/ndk/amd64/ketypes.h
Normal file
725
reactos/include/ndk/amd64/ketypes.h
Normal file
|
@ -0,0 +1,725 @@
|
|||
/*++ NDK Version: 0098
|
||||
|
||||
Copyright (c) Alex Ionescu. All rights reserved.
|
||||
|
||||
Header Name:
|
||||
|
||||
ketypes.h (X86)
|
||||
|
||||
Abstract:
|
||||
|
||||
i386 Type definitions for the Kernel services.
|
||||
|
||||
Author:
|
||||
|
||||
Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _I386_KETYPES_H
|
||||
#define _I386_KETYPES_H
|
||||
|
||||
//
|
||||
// Dependencies
|
||||
//
|
||||
|
||||
//
|
||||
// KPCR Access for non-IA64 builds
|
||||
//
|
||||
#define K0IPCR ((ULONG_PTR)(KIP0PCRADDRESS))
|
||||
#define PCR ((volatile KPCR * const)K0IPCR)
|
||||
#if defined(CONFIG_SMP) || defined(NT_BUILD)
|
||||
#undef KeGetPcr
|
||||
#define KeGetPcr() ((volatile KPCR * const)__readfsdword(0x1C))
|
||||
#endif
|
||||
|
||||
//
|
||||
// Machine Types
|
||||
//
|
||||
#define MACHINE_TYPE_ISA 0x0000
|
||||
#define MACHINE_TYPE_EISA 0x0001
|
||||
#define MACHINE_TYPE_MCA 0x0002
|
||||
|
||||
//
|
||||
// X86 80386 Segment Types
|
||||
//
|
||||
#define I386_TASK_GATE 0x5
|
||||
#define I386_TSS 0x9
|
||||
#define I386_ACTIVE_TSS 0xB
|
||||
#define I386_CALL_GATE 0xC
|
||||
#define I386_INTERRUPT_GATE 0xE
|
||||
#define I386_TRAP_GATE 0xF
|
||||
|
||||
//
|
||||
// Selector Names
|
||||
//
|
||||
#define RPL_MASK 0x0003
|
||||
#define MODE_MASK 0x0001
|
||||
#define KGDT_R0_CODE 0x8
|
||||
#define KGDT_R0_DATA 0x10
|
||||
#define KGDT_R3_CODE 0x18
|
||||
#define KGDT_R3_DATA 0x20
|
||||
#define KGDT_TSS 0x28
|
||||
#define KGDT_R0_PCR 0x30
|
||||
#define KGDT_R3_TEB 0x38
|
||||
#define KGDT_LDT 0x48
|
||||
#define KGDT_DF_TSS 0x50
|
||||
#define KGDT_NMI_TSS 0x58
|
||||
|
||||
//
|
||||
// CR4
|
||||
//
|
||||
#define CR4_VME 0x1
|
||||
#define CR4_PVI 0x2
|
||||
#define CR4_TSD 0x4
|
||||
#define CR4_DE 0x8
|
||||
#define CR4_PSE 0x10
|
||||
#define CR4_PAE 0x20
|
||||
#define CR4_MCE 0x40
|
||||
#define CR4_PGE 0x80
|
||||
#define CR4_FXSR 0x200
|
||||
#define CR4_XMMEXCPT 0x400
|
||||
|
||||
//
|
||||
// EFlags
|
||||
//
|
||||
#define EFLAGS_CF 0x01L
|
||||
#define EFLAGS_ZF 0x40L
|
||||
#define EFLAGS_TF 0x100L
|
||||
#define EFLAGS_INTERRUPT_MASK 0x200L
|
||||
#define EFLAGS_DF 0x400L
|
||||
#define EFLAGS_NESTED_TASK 0x4000L
|
||||
#define EFLAGS_V86_MASK 0x20000
|
||||
#define EFLAGS_ALIGN_CHECK 0x40000
|
||||
#define EFLAGS_VIF 0x80000
|
||||
#define EFLAGS_VIP 0x100000
|
||||
#define EFLAGS_USER_SANITIZE 0x3F4DD7
|
||||
#define EFLAG_SIGN 0x8000
|
||||
#define EFLAG_ZERO 0x4000
|
||||
|
||||
//
|
||||
// IPI Types
|
||||
//
|
||||
#define IPI_APC 1
|
||||
#define IPI_DPC 2
|
||||
#define IPI_FREEZE 4
|
||||
#define IPI_PACKET_READY 8
|
||||
#define IPI_SYNCH_REQUEST 16
|
||||
|
||||
//
|
||||
// PRCB Flags
|
||||
//
|
||||
#define PRCB_MAJOR_VERSION 1
|
||||
#define PRCB_BUILD_DEBUG 1
|
||||
#define PRCB_BUILD_UNIPROCESSOR 2
|
||||
|
||||
//
|
||||
// HAL Variables
|
||||
//
|
||||
#define INITIAL_STALL_COUNT 0x64
|
||||
|
||||
//
|
||||
// IOPM Definitions
|
||||
//
|
||||
#define IO_ACCESS_MAP_NONE 0
|
||||
#define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
|
||||
#define KiComputeIopmOffset(MapNumber) \
|
||||
(MapNumber == IO_ACCESS_MAP_NONE) ? \
|
||||
(USHORT)(sizeof(KTSS)) : \
|
||||
(USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
|
||||
|
||||
//
|
||||
// Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
|
||||
//
|
||||
#define KSEG0_BASE 0x80000000
|
||||
|
||||
//
|
||||
// Synchronization-level IRQL
|
||||
//
|
||||
#ifndef CONFIG_SMP
|
||||
#define SYNCH_LEVEL DISPATCH_LEVEL
|
||||
#else
|
||||
#define SYNCH_LEVEL (IPI_LEVEL - 1)
|
||||
#endif
|
||||
|
||||
//
|
||||
// Trap Frame Definition
|
||||
//
|
||||
typedef struct _KTRAP_FRAME
|
||||
{
|
||||
ULONG DbgEbp;
|
||||
ULONG DbgEip;
|
||||
ULONG DbgArgMark;
|
||||
ULONG DbgArgPointer;
|
||||
ULONG TempSegCs;
|
||||
ULONG TempEsp;
|
||||
ULONG Dr0;
|
||||
ULONG Dr1;
|
||||
ULONG Dr2;
|
||||
ULONG Dr3;
|
||||
ULONG Dr6;
|
||||
ULONG Dr7;
|
||||
ULONG SegGs;
|
||||
ULONG SegEs;
|
||||
ULONG SegDs;
|
||||
ULONG Edx;
|
||||
ULONG Ecx;
|
||||
ULONG Eax;
|
||||
ULONG PreviousPreviousMode;
|
||||
struct _EXCEPTION_REGISTRATION_RECORD FAR *ExceptionList;
|
||||
ULONG SegFs;
|
||||
ULONG Edi;
|
||||
ULONG Esi;
|
||||
ULONG Ebx;
|
||||
ULONG Ebp;
|
||||
ULONG ErrCode;
|
||||
ULONG Eip;
|
||||
ULONG SegCs;
|
||||
ULONG EFlags;
|
||||
ULONG HardwareEsp;
|
||||
ULONG HardwareSegSs;
|
||||
ULONG V86Es;
|
||||
ULONG V86Ds;
|
||||
ULONG V86Fs;
|
||||
ULONG V86Gs;
|
||||
} KTRAP_FRAME, *PKTRAP_FRAME;
|
||||
|
||||
//
|
||||
// LDT Entry Definition
|
||||
//
|
||||
#ifndef _LDT_ENTRY_DEFINED
|
||||
#define _LDT_ENTRY_DEFINED
|
||||
typedef struct _LDT_ENTRY
|
||||
{
|
||||
USHORT LimitLow;
|
||||
USHORT BaseLow;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR BaseMid;
|
||||
UCHAR Flags1;
|
||||
UCHAR Flags2;
|
||||
UCHAR BaseHi;
|
||||
} Bytes;
|
||||
struct
|
||||
{
|
||||
ULONG BaseMid:8;
|
||||
ULONG Type:5;
|
||||
ULONG Dpl:2;
|
||||
ULONG Pres:1;
|
||||
ULONG LimitHi:4;
|
||||
ULONG Sys:1;
|
||||
ULONG Reserved_0:1;
|
||||
ULONG Default_Big:1;
|
||||
ULONG Granularity:1;
|
||||
ULONG BaseHi:8;
|
||||
} Bits;
|
||||
} HighWord;
|
||||
} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
|
||||
#endif
|
||||
|
||||
//
|
||||
// GDT Entry Definition
|
||||
//
|
||||
typedef struct _KGDTENTRY
|
||||
{
|
||||
USHORT LimitLow;
|
||||
USHORT BaseLow;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR BaseMid;
|
||||
UCHAR Flags1;
|
||||
UCHAR Flags2;
|
||||
UCHAR BaseHi;
|
||||
} Bytes;
|
||||
struct
|
||||
{
|
||||
ULONG BaseMid:8;
|
||||
ULONG Type:5;
|
||||
ULONG Dpl:2;
|
||||
ULONG Pres:1;
|
||||
ULONG LimitHi:4;
|
||||
ULONG Sys:1;
|
||||
ULONG Reserved_0:1;
|
||||
ULONG Default_Big:1;
|
||||
ULONG Granularity:1;
|
||||
ULONG BaseHi:8;
|
||||
} Bits;
|
||||
} HighWord;
|
||||
} KGDTENTRY, *PKGDTENTRY;
|
||||
|
||||
//
|
||||
// IDT Entry Access Definition
|
||||
//
|
||||
typedef struct _KIDT_ACCESS
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR Reserved;
|
||||
UCHAR SegmentType:4;
|
||||
UCHAR SystemSegmentFlag:1;
|
||||
UCHAR Dpl:2;
|
||||
UCHAR Present:1;
|
||||
};
|
||||
USHORT Value;
|
||||
};
|
||||
} KIDT_ACCESS, *PKIDT_ACCESS;
|
||||
|
||||
//
|
||||
// IDT Entry Definition
|
||||
//
|
||||
typedef struct _KIDTENTRY
|
||||
{
|
||||
USHORT Offset;
|
||||
USHORT Selector;
|
||||
USHORT Access;
|
||||
USHORT ExtendedOffset;
|
||||
} KIDTENTRY, *PKIDTENTRY;
|
||||
|
||||
typedef struct _DESCRIPTOR
|
||||
{
|
||||
USHORT Pad;
|
||||
USHORT Limit;
|
||||
ULONG Base;
|
||||
} KDESCRIPTOR, *PKDESCRIPTOR;
|
||||
|
||||
#ifndef NTOS_MODE_USER
|
||||
//
|
||||
// Macro to get current KPRCB
|
||||
//
|
||||
FORCEINLINE
|
||||
struct _KPRCB *
|
||||
KeGetCurrentPrcb(VOID)
|
||||
{
|
||||
return (struct _KPRCB *)(ULONG_PTR)__readfsdword(FIELD_OFFSET(KPCR, Prcb));
|
||||
}
|
||||
|
||||
//
|
||||
// FN/FX (FPU) Save Area Structures
|
||||
//
|
||||
typedef struct _FNSAVE_FORMAT
|
||||
{
|
||||
ULONG ControlWord;
|
||||
ULONG StatusWord;
|
||||
ULONG TagWord;
|
||||
ULONG ErrorOffset;
|
||||
ULONG ErrorSelector;
|
||||
ULONG DataOffset;
|
||||
ULONG DataSelector;
|
||||
UCHAR RegisterArea[80];
|
||||
} FNSAVE_FORMAT, *PFNSAVE_FORMAT;
|
||||
|
||||
typedef struct _FXSAVE_FORMAT
|
||||
{
|
||||
USHORT ControlWord;
|
||||
USHORT StatusWord;
|
||||
USHORT TagWord;
|
||||
USHORT ErrorOpcode;
|
||||
ULONG ErrorOffset;
|
||||
ULONG ErrorSelector;
|
||||
ULONG DataOffset;
|
||||
ULONG DataSelector;
|
||||
ULONG MXCsr;
|
||||
ULONG MXCsrMask;
|
||||
UCHAR RegisterArea[128];
|
||||
UCHAR Reserved3[128];
|
||||
UCHAR Reserved4[224];
|
||||
UCHAR Align16Byte[8];
|
||||
} FXSAVE_FORMAT, *PFXSAVE_FORMAT;
|
||||
|
||||
typedef struct _FX_SAVE_AREA
|
||||
{
|
||||
union
|
||||
{
|
||||
FNSAVE_FORMAT FnArea;
|
||||
FXSAVE_FORMAT FxArea;
|
||||
} U;
|
||||
ULONG NpxSavedCpu;
|
||||
ULONG Cr0NpxState;
|
||||
} FX_SAVE_AREA, *PFX_SAVE_AREA;
|
||||
|
||||
//
|
||||
// Special Registers Structure (outside of CONTEXT)
|
||||
//
|
||||
typedef struct _KSPECIAL_REGISTERS
|
||||
{
|
||||
ULONG Cr0;
|
||||
ULONG Cr2;
|
||||
ULONG Cr3;
|
||||
ULONG Cr4;
|
||||
ULONG KernelDr0;
|
||||
ULONG KernelDr1;
|
||||
ULONG KernelDr2;
|
||||
ULONG KernelDr3;
|
||||
ULONG KernelDr6;
|
||||
ULONG KernelDr7;
|
||||
KDESCRIPTOR Gdtr;
|
||||
KDESCRIPTOR Idtr;
|
||||
USHORT Tr;
|
||||
USHORT Ldtr;
|
||||
ULONG Reserved[6];
|
||||
} KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
|
||||
|
||||
//
|
||||
// Processor State Data
|
||||
//
|
||||
typedef struct _KPROCESSOR_STATE
|
||||
{
|
||||
CONTEXT ContextFrame;
|
||||
KSPECIAL_REGISTERS SpecialRegisters;
|
||||
} KPROCESSOR_STATE, *PKPROCESSOR_STATE;
|
||||
|
||||
//
|
||||
// Processor Region Control Block
|
||||
//
|
||||
#pragma pack(push,4)
|
||||
typedef struct _KPRCB
|
||||
{
|
||||
USHORT MinorVersion;
|
||||
USHORT MajorVersion;
|
||||
struct _KTHREAD *CurrentThread;
|
||||
struct _KTHREAD *NextThread;
|
||||
struct _KTHREAD *IdleThread;
|
||||
UCHAR Number;
|
||||
UCHAR Reserved;
|
||||
USHORT BuildType;
|
||||
KAFFINITY SetMember;
|
||||
UCHAR CpuType;
|
||||
UCHAR CpuID;
|
||||
USHORT CpuStep;
|
||||
KPROCESSOR_STATE ProcessorState;
|
||||
ULONG KernelReserved[16];
|
||||
ULONG HalReserved[16];
|
||||
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
||||
ULONG CFlushSize;
|
||||
UCHAR PrcbPad0[88];
|
||||
#else
|
||||
UCHAR PrcbPad0[92];
|
||||
#endif
|
||||
KSPIN_LOCK_QUEUE LockQueue[LockQueueMaximumLock];
|
||||
struct _KTHREAD *NpxThread;
|
||||
ULONG InterruptCount;
|
||||
ULONG KernelTime;
|
||||
ULONG UserTime;
|
||||
ULONG DpcTime;
|
||||
ULONG DebugDpcTime;
|
||||
ULONG InterruptTime;
|
||||
ULONG AdjustDpcThreshold;
|
||||
ULONG PageColor;
|
||||
UCHAR SkipTick;
|
||||
UCHAR DebuggerSavedIRQL;
|
||||
#if (NTDDI_VERSION >= NTDDI_WS03)
|
||||
UCHAR NodeColor;
|
||||
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
||||
UCHAR PollSlot;
|
||||
#else
|
||||
UCHAR Spare1;
|
||||
#endif
|
||||
ULONG NodeShiftedColor;
|
||||
#else
|
||||
UCHAR Spare1[6];
|
||||
#endif
|
||||
struct _KNODE *ParentNode;
|
||||
ULONG MultiThreadProcessorSet;
|
||||
struct _KPRCB *MultiThreadSetMaster;
|
||||
#if (NTDDI_VERSION >= NTDDI_WS03)
|
||||
ULONG SecondaryColorMask;
|
||||
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
||||
ULONG DpcTimeLimit;
|
||||
#else
|
||||
LONG Sleeping;
|
||||
#endif
|
||||
#else
|
||||
ULONG ThreadStartCount[2];
|
||||
#endif
|
||||
ULONG CcFastReadNoWait;
|
||||
ULONG CcFastReadWait;
|
||||
ULONG CcFastReadNotPossible;
|
||||
ULONG CcCopyReadNoWait;
|
||||
ULONG CcCopyReadWait;
|
||||
ULONG CcCopyReadNoWaitMiss;
|
||||
#if (NTDDI_VERSION < NTDDI_LONGHORN)
|
||||
ULONG KeAlignmentFixupCount;
|
||||
#endif
|
||||
ULONG SpareCounter0;
|
||||
#if (NTDDI_VERSION < NTDDI_LONGHORN)
|
||||
ULONG KeDcacheFlushCount;
|
||||
ULONG KeExceptionDispatchCount;
|
||||
ULONG KeFirstLevelTbFills;
|
||||
ULONG KeFloatingEmulationCount;
|
||||
ULONG KeIcacheFlushCount;
|
||||
ULONG KeSecondLevelTbFills;
|
||||
ULONG KeSystemCalls;
|
||||
#endif
|
||||
volatile ULONG IoReadOperationCount;
|
||||
volatile ULONG IoWriteOperationCount;
|
||||
volatile ULONG IoOtherOperationCount;
|
||||
LARGE_INTEGER IoReadTransferCount;
|
||||
LARGE_INTEGER IoWriteTransferCount;
|
||||
LARGE_INTEGER IoOtherTransferCount;
|
||||
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
||||
ULONG CcFastMdlReadNoWait;
|
||||
ULONG CcFastMdlReadWait;
|
||||
ULONG CcFastMdlReadNotPossible;
|
||||
ULONG CcMapDataNoWait;
|
||||
ULONG CcMapDataWait;
|
||||
ULONG CcPinMappedDataCount;
|
||||
ULONG CcPinReadNoWait;
|
||||
ULONG CcPinReadWait;
|
||||
ULONG CcMdlReadNoWait;
|
||||
ULONG CcMdlReadWait;
|
||||
ULONG CcLazyWriteHotSpots;
|
||||
ULONG CcLazyWriteIos;
|
||||
ULONG CcLazyWritePages;
|
||||
ULONG CcDataFlushes;
|
||||
ULONG CcDataPages;
|
||||
ULONG CcLostDelayedWrites;
|
||||
ULONG CcFastReadResourceMiss;
|
||||
ULONG CcCopyReadWaitMiss;
|
||||
ULONG CcFastMdlReadResourceMiss;
|
||||
ULONG CcMapDataNoWaitMiss;
|
||||
ULONG CcMapDataWaitMiss;
|
||||
ULONG CcPinReadNoWaitMiss;
|
||||
ULONG CcPinReadWaitMiss;
|
||||
ULONG CcMdlReadNoWaitMiss;
|
||||
ULONG CcMdlReadWaitMiss;
|
||||
ULONG CcReadAheadIos;
|
||||
ULONG KeAlignmentFixupCount;
|
||||
ULONG KeExceptionDispatchCount;
|
||||
ULONG KeSystemCalls;
|
||||
ULONG PrcbPad1[3];
|
||||
#else
|
||||
ULONG SpareCounter1[8];
|
||||
#endif
|
||||
PP_LOOKASIDE_LIST PPLookasideList[16];
|
||||
PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
|
||||
PP_LOOKASIDE_LIST PPPagedLookasideList[32];
|
||||
volatile ULONG PacketBarrier;
|
||||
volatile ULONG ReverseStall;
|
||||
PVOID IpiFrame;
|
||||
UCHAR PrcbPad2[52];
|
||||
volatile PVOID CurrentPacket[3];
|
||||
volatile ULONG TargetSet;
|
||||
volatile PKIPI_WORKER WorkerRoutine;
|
||||
volatile ULONG IpiFrozen;
|
||||
UCHAR PrcbPad3[40];
|
||||
volatile ULONG RequestSummary;
|
||||
volatile struct _KPRCB *SignalDone;
|
||||
UCHAR PrcbPad4[56];
|
||||
struct _KDPC_DATA DpcData[2];
|
||||
PVOID DpcStack;
|
||||
ULONG MaximumDpcQueueDepth;
|
||||
ULONG DpcRequestRate;
|
||||
ULONG MinimumDpcRate;
|
||||
volatile UCHAR DpcInterruptRequested;
|
||||
volatile UCHAR DpcThreadRequested;
|
||||
volatile UCHAR DpcRoutineActive;
|
||||
volatile UCHAR DpcThreadActive;
|
||||
ULONG PrcbLock;
|
||||
ULONG DpcLastCount;
|
||||
volatile ULONG TimerHand;
|
||||
volatile ULONG TimerRequest;
|
||||
PVOID DpcThread;
|
||||
KEVENT DpcEvent;
|
||||
UCHAR ThreadDpcEnable;
|
||||
volatile BOOLEAN QuantumEnd;
|
||||
UCHAR PrcbPad50;
|
||||
volatile UCHAR IdleSchedule;
|
||||
LONG DpcSetEventRequest;
|
||||
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
||||
LONG Sleeping;
|
||||
ULONG PeriodicCount;
|
||||
ULONG PeriodicBias;
|
||||
UCHAR PrcbPad5[6];
|
||||
#else
|
||||
UCHAR PrcbPad5[18];
|
||||
#endif
|
||||
LONG TickOffset;
|
||||
KDPC CallDpc;
|
||||
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
||||
LONG ClockKeepAlive;
|
||||
UCHAR ClockCheckSlot;
|
||||
UCHAR ClockPollCycle;
|
||||
UCHAR PrcbPad6[2];
|
||||
LONG DpcWatchdogPeriod;
|
||||
LONG DpcWatchDogCount;
|
||||
LONG ThreadWatchdogPeriod;
|
||||
LONG ThreadWatchDogCount;
|
||||
ULONG PrcbPad70[2];
|
||||
#else
|
||||
ULONG PrcbPad7[8];
|
||||
#endif
|
||||
LIST_ENTRY WaitListHead;
|
||||
ULONG ReadySummary;
|
||||
ULONG QueueIndex;
|
||||
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
||||
SINGLE_LIST_ENTRY DeferredReadyListHead;
|
||||
ULONGLONG StartCycles;
|
||||
ULONGLONG CycleTime;
|
||||
ULONGLONG PrcbPad71[3];
|
||||
LIST_ENTRY DispatcherReadyListHead[32];
|
||||
#else
|
||||
LIST_ENTRY DispatcherReadyListHead[32];
|
||||
SINGLE_LIST_ENTRY DeferredReadyListHead;
|
||||
ULONG PrcbPad72[11];
|
||||
#endif
|
||||
PVOID ChainedInterruptList;
|
||||
LONG LookasideIrpFloat;
|
||||
volatile LONG MmPageFaultCount;
|
||||
volatile LONG MmCopyOnWriteCount;
|
||||
volatile LONG MmTransitionCount;
|
||||
volatile LONG MmCacheTransitionCount;
|
||||
volatile LONG MmDemandZeroCount;
|
||||
volatile LONG MmPageReadCount;
|
||||
volatile LONG MmPageReadIoCount;
|
||||
volatile LONG MmCacheReadCount;
|
||||
volatile LONG MmCacheIoCount;
|
||||
volatile LONG MmDirtyPagesWriteCount;
|
||||
volatile LONG MmDirtyWriteIoCount;
|
||||
volatile LONG MmMappedPagesWriteCount;
|
||||
volatile LONG MmMappedWriteIoCount;
|
||||
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
||||
ULONG CachedCommit;
|
||||
ULONG CachedResidentAvailable;
|
||||
PVOID HyperPte;
|
||||
UCHAR CpuVendor;
|
||||
UCHAR PrcbPad9[3];
|
||||
#else
|
||||
ULONG SpareFields0[1];
|
||||
#endif
|
||||
CHAR VendorString[13];
|
||||
UCHAR InitialApicId;
|
||||
UCHAR LogicalProcessorsPerPhysicalProcessor;
|
||||
ULONG MHz;
|
||||
ULONG FeatureBits;
|
||||
LARGE_INTEGER UpdateSignature;
|
||||
volatile LARGE_INTEGER IsrTime;
|
||||
LARGE_INTEGER SpareField1;
|
||||
FX_SAVE_AREA NpxSaveArea;
|
||||
PROCESSOR_POWER_STATE PowerState;
|
||||
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
||||
KDPC DpcWatchdogDoc;
|
||||
KTIMER DpcWatchdogTimer;
|
||||
PVOID WheaInfo;
|
||||
PVOID EtwSupport;
|
||||
SLIST_HEADER InterruptObjectPool;
|
||||
LARGE_INTEGER HyperCallPagePhysical;
|
||||
LARGE_INTEGER HyperCallPageVirtual;
|
||||
PVOID RateControl;
|
||||
CACHE_DESCRIPTOR Cache[5];
|
||||
ULONG CacheCount;
|
||||
ULONG CacheProcessorMask[5];
|
||||
UCHAR LogicalProcessorsPerCore;
|
||||
UCHAR PrcbPad8[3];
|
||||
ULONG PackageProcessorSet;
|
||||
ULONG CoreProcessorSet;
|
||||
#endif
|
||||
} KPRCB, *PKPRCB;
|
||||
|
||||
//
|
||||
// Processor Control Region
|
||||
//
|
||||
typedef struct _KIPCR
|
||||
{
|
||||
union
|
||||
{
|
||||
NT_TIB NtTib;
|
||||
struct
|
||||
{
|
||||
struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
|
||||
PVOID Used_StackBase;
|
||||
PVOID PerfGlobalGroupMask;
|
||||
PVOID TssCopy;
|
||||
ULONG ContextSwitches;
|
||||
KAFFINITY SetMemberCopy;
|
||||
PVOID Used_Self;
|
||||
};
|
||||
};
|
||||
struct _KPCR *Self;
|
||||
struct _KPRCB *Prcb;
|
||||
KIRQL Irql;
|
||||
ULONG IRR;
|
||||
ULONG IrrActive;
|
||||
ULONG IDR;
|
||||
PVOID KdVersionBlock;
|
||||
PKIDTENTRY IDT;
|
||||
PKGDTENTRY GDT;
|
||||
struct _KTSS *TSS;
|
||||
USHORT MajorVersion;
|
||||
USHORT MinorVersion;
|
||||
KAFFINITY SetMember;
|
||||
ULONG StallScaleFactor;
|
||||
UCHAR SparedUnused;
|
||||
UCHAR Number;
|
||||
UCHAR Reserved;
|
||||
UCHAR L2CacheAssociativity;
|
||||
ULONG VdmAlert;
|
||||
ULONG KernelReserved[14];
|
||||
ULONG SecondLevelCacheSize;
|
||||
ULONG HalReserved[16];
|
||||
ULONG InterruptMode;
|
||||
UCHAR Spare1;
|
||||
ULONG KernelReserved2[17];
|
||||
KPRCB PrcbData;
|
||||
} KIPCR, *PKIPCR;
|
||||
#pragma pack(pop)
|
||||
|
||||
//
|
||||
// TSS Definition
|
||||
//
|
||||
typedef struct _KiIoAccessMap
|
||||
{
|
||||
UCHAR DirectionMap[32];
|
||||
UCHAR IoMap[8196];
|
||||
} KIIO_ACCESS_MAP;
|
||||
|
||||
typedef struct _KTSS
|
||||
{
|
||||
USHORT Backlink;
|
||||
USHORT Reserved0;
|
||||
ULONG Esp0;
|
||||
USHORT Ss0;
|
||||
USHORT Reserved1;
|
||||
ULONG NotUsed1[4];
|
||||
ULONG CR3;
|
||||
ULONG Eip;
|
||||
ULONG EFlags;
|
||||
ULONG Eax;
|
||||
ULONG Ecx;
|
||||
ULONG Edx;
|
||||
ULONG Ebx;
|
||||
ULONG Esp;
|
||||
ULONG Ebp;
|
||||
ULONG Esi;
|
||||
ULONG Edi;
|
||||
USHORT Es;
|
||||
USHORT Reserved2;
|
||||
USHORT Cs;
|
||||
USHORT Reserved3;
|
||||
USHORT Ss;
|
||||
USHORT Reserved4;
|
||||
USHORT Ds;
|
||||
USHORT Reserved5;
|
||||
USHORT Fs;
|
||||
USHORT Reserved6;
|
||||
USHORT Gs;
|
||||
USHORT Reserved7;
|
||||
USHORT LDT;
|
||||
USHORT Reserved8;
|
||||
USHORT Flags;
|
||||
USHORT IoMapBase;
|
||||
KIIO_ACCESS_MAP IoMaps[1];
|
||||
UCHAR IntDirectionMap[32];
|
||||
} KTSS, *PKTSS;
|
||||
|
||||
//
|
||||
// i386 CPUs don't have exception frames
|
||||
//
|
||||
typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
|
||||
#endif
|
||||
#endif
|
169
reactos/include/ndk/amd64/mmtypes.h
Normal file
169
reactos/include/ndk/amd64/mmtypes.h
Normal file
|
@ -0,0 +1,169 @@
|
|||
/*++ NDK Version: 0095
|
||||
|
||||
Copyright (c) Alex Ionescu. All rights reserved.
|
||||
|
||||
Header Name:
|
||||
|
||||
mmtypes.h (X86)
|
||||
|
||||
Abstract:
|
||||
|
||||
i386 Type definitions for the Memory Manager
|
||||
|
||||
Author:
|
||||
|
||||
Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _AMD64_MMTYPES_H
|
||||
#define _AMD64_MMTYPES_H
|
||||
|
||||
//
|
||||
// Dependencies
|
||||
//
|
||||
|
||||
//
|
||||
// Page-related Macros
|
||||
//
|
||||
#define PAGE_SIZE 0x1000
|
||||
#define PAGE_SHIFT 12L
|
||||
#define MM_ALLOCATION_GRANULARITY 0x10000
|
||||
#define MM_ALLOCATION_GRANULARITY_SHIFT 16L
|
||||
|
||||
//
|
||||
// Sanity checks for Paging Macros
|
||||
//
|
||||
#ifdef C_ASSERT
|
||||
C_ASSERT(PAGE_SIZE == (1 << PAGE_SHIFT));
|
||||
C_ASSERT(MM_ALLOCATION_GRANULARITY == (1 << MM_ALLOCATION_GRANULARITY_SHIFT));
|
||||
C_ASSERT(MM_ALLOCATION_GRANULARITY &&
|
||||
!(MM_ALLOCATION_GRANULARITY & (MM_ALLOCATION_GRANULARITY - 1)));
|
||||
C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE);
|
||||
#endif
|
||||
|
||||
//
|
||||
// PAE SEG0 Base?
|
||||
//
|
||||
#define KSEG0_BASE_PAE 0xE0000000
|
||||
|
||||
//
|
||||
// Page Table Entry Definitions
|
||||
//
|
||||
typedef struct _HARDWARE_PTE_X86
|
||||
{
|
||||
ULONG Valid:1;
|
||||
ULONG Write:1;
|
||||
ULONG Owner:1;
|
||||
ULONG WriteThrough:1;
|
||||
ULONG CacheDisable:1;
|
||||
ULONG Accessed:1;
|
||||
ULONG Dirty:1;
|
||||
ULONG LargePage:1;
|
||||
ULONG Global:1;
|
||||
ULONG CopyOnWrite:1;
|
||||
ULONG Prototype: 1;
|
||||
ULONG reserved: 1;
|
||||
ULONG PageFrameNumber:20;
|
||||
} HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
|
||||
|
||||
typedef struct _MMPTE_SOFTWARE
|
||||
{
|
||||
ULONG Valid:1;
|
||||
ULONG PageFileLow:4;
|
||||
ULONG Protection:5;
|
||||
ULONG Prototype:1;
|
||||
ULONG Transition:1;
|
||||
ULONG PageFileHigh:20;
|
||||
} MMPTE_SOFTWARE;
|
||||
|
||||
typedef struct _MMPTE_TRANSITION
|
||||
{
|
||||
ULONG Valid:1;
|
||||
ULONG Write:1;
|
||||
ULONG Owner:1;
|
||||
ULONG WriteThrough:1;
|
||||
ULONG CacheDisable:1;
|
||||
ULONG Protection:5;
|
||||
ULONG Prototype:1;
|
||||
ULONG Transition:1;
|
||||
ULONG PageFrameNumber:20;
|
||||
} MMPTE_TRANSITION;
|
||||
|
||||
typedef struct _MMPTE_PROTOTYPE
|
||||
{
|
||||
ULONG Valid:1;
|
||||
ULONG ProtoAddressLow:7;
|
||||
ULONG ReadOnly:1;
|
||||
ULONG WhichPool:1;
|
||||
ULONG Prototype:1;
|
||||
ULONG ProtoAddressHigh:21;
|
||||
} MMPTE_PROTOTYPE;
|
||||
|
||||
typedef struct _MMPTE_SUBSECTION
|
||||
{
|
||||
ULONG Valid:1;
|
||||
ULONG SubsectionAddressLow:4;
|
||||
ULONG Protection:5;
|
||||
ULONG Prototype:1;
|
||||
ULONG SubsectionAddressHigh:20;
|
||||
ULONG WhichPool:1;
|
||||
} MMPTE_SUBSECTION;
|
||||
|
||||
typedef struct _MMPTE_LIST
|
||||
{
|
||||
ULONG Valid:1;
|
||||
ULONG OneEntry:1;
|
||||
ULONG filler0:8;
|
||||
ULONG NextEntry:20;
|
||||
ULONG Prototype:1;
|
||||
ULONG filler1:1;
|
||||
} MMPTE_LIST;
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
|
||||
typedef struct _MMPTE_HARDWARE
|
||||
{
|
||||
ULONG Valid:1;
|
||||
ULONG Write:1;
|
||||
ULONG Owner:1;
|
||||
ULONG WriteThrough:1;
|
||||
ULONG CacheDisable:1;
|
||||
ULONG Accessed:1;
|
||||
ULONG Dirty:1;
|
||||
ULONG LargePage:1;
|
||||
ULONG Global:1;
|
||||
ULONG CopyOnWrite:1;
|
||||
ULONG Prototype:1;
|
||||
ULONG reserved:1;
|
||||
ULONG PageFrameNumber:20;
|
||||
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
||||
|
||||
#else
|
||||
|
||||
typedef struct _MMPTE_HARDWARE
|
||||
{
|
||||
ULONG Valid:1;
|
||||
ULONG Writable:1;
|
||||
ULONG Owner:1;
|
||||
ULONG WriteThrough:1;
|
||||
ULONG CacheDisable:1;
|
||||
ULONG Accessed:1;
|
||||
ULONG Dirty:1;
|
||||
ULONG LargePage:1;
|
||||
ULONG Global:1;
|
||||
ULONG CopyOnWrite:1;
|
||||
ULONG Prototype:1;
|
||||
ULONG Write:1;
|
||||
ULONG PageFrameNumber:20;
|
||||
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
||||
|
||||
#endif
|
||||
|
||||
//
|
||||
// Use the right PTE structure
|
||||
//
|
||||
#define HARDWARE_PTE HARDWARE_PTE_X86
|
||||
#define PHARDWARE_PTE PHARDWARE_PTE_X86
|
||||
|
||||
#endif
|
|
@ -24,6 +24,8 @@ Author:
|
|||
//
|
||||
#ifdef _M_IX86
|
||||
#include <i386/ketypes.h>
|
||||
#elif defined(_M_AMD64)
|
||||
#include <amd64/ketypes.h>
|
||||
#elif defined(_M_PPC)
|
||||
#include <powerpc/ketypes.h>
|
||||
#elif defined(_M_ARM)
|
||||
|
|
Loading…
Reference in a new issue