diff --git a/reactos/include/ndk/amd64/ketypes.h b/reactos/include/ndk/amd64/ketypes.h new file mode 100644 index 00000000000..414ef1df675 --- /dev/null +++ b/reactos/include/ndk/amd64/ketypes.h @@ -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 diff --git a/reactos/include/ndk/amd64/mmtypes.h b/reactos/include/ndk/amd64/mmtypes.h new file mode 100644 index 00000000000..88f8c51e76f --- /dev/null +++ b/reactos/include/ndk/amd64/mmtypes.h @@ -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 diff --git a/reactos/include/ndk/arch/ketypes.h b/reactos/include/ndk/arch/ketypes.h index b2d40951a60..1d6394144c5 100644 --- a/reactos/include/ndk/arch/ketypes.h +++ b/reactos/include/ndk/arch/ketypes.h @@ -24,6 +24,8 @@ Author: // #ifdef _M_IX86 #include +#elif defined(_M_AMD64) +#include #elif defined(_M_PPC) #include #elif defined(_M_ARM)