Merge amd64 NDK from amd64 branch:
[reactos.git] / reactos / include / ndk / amd64 / mmtypes.h
index 88f8c51..a920078 100644 (file)
@@ -1,18 +1,20 @@
 /*++ NDK Version: 0095
 
 Copyright (c) Alex Ionescu.  All rights reserved.
+Copyright (c) Timo Kreuzer  All rights reserved.
 
 Header Name:
 
-    mmtypes.h (X86)
+    mmtypes.h (AMD64)
 
 Abstract:
 
-    i386 Type definitions for the Memory Manager
+    AMD64 Type definitions for the Memory Manager
 
 Author:
 
     Alex Ionescu (alex.ionescu@reactos.com)   06-Oct-2004
+    Timo Kreuzer (timo.kreuzer@reactos.com)   15-Aug-2008
 
 --*/
 
@@ -42,128 +44,155 @@ C_ASSERT(MM_ALLOCATION_GRANULARITY &&
 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
+typedef struct _HARDWARE_PTE
 {
-    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;
+    ULONG64 Valid:1;
+    ULONG64 Write:1;
+    ULONG64 Owner:1;
+    ULONG64 WriteThrough:1;
+    ULONG64 CacheDisable:1;
+    ULONG64 Accessed:1;
+    ULONG64 Dirty:1;
+    ULONG64 LargePage:1;
+    ULONG64 Global:1;
+    ULONG64 CopyOnWrite:1;
+    ULONG64 Prototype:1;
+    ULONG64 reserved0:1;
+    ULONG64 PageFrameNumber:28;
+    ULONG64 reserved1:12;
+    ULONG64 SoftwareWsIndex:11;
+    ULONG64 NoExecute:1;
+} HARDWARE_PTE, *PHARDWARE_PTE;
 
 typedef struct _MMPTE_SOFTWARE
 {
-    ULONG Valid:1;
-    ULONG PageFileLow:4;
-    ULONG Protection:5;
-    ULONG Prototype:1;
-    ULONG Transition:1;
-    ULONG PageFileHigh:20;
-} MMPTE_SOFTWARE;
+    ULONG64 Valid:1;
+    ULONG64 PageFileLow:4;
+    ULONG64 Protection:5;
+    ULONG64 Prototype:1;
+    ULONG64 Transition:1;
+    ULONG64 UsedPageTableEntries:10;
+    ULONG64 Reserved:10;
+    ULONG64 PageFileHigh:32;
+} MMPTE_SOFTWARE, *PMMPTE_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;
+    ULONG64 Valid:1;
+    ULONG64 Write:1;
+    ULONG64 Owner:1;
+    ULONG64 WriteThrough:1;
+    ULONG64 CacheDisable:1;
+    ULONG64 Protection:5;
+    ULONG64 Prototype:1;
+    ULONG64 Transition:1;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    ULONG64 PageFrameNumber:36;
+    ULONG64 Unused:16;
+#else
+    ULONG64 PageFrameNumber:28;
+    ULONG64 Unused:24;
+#endif
 } MMPTE_TRANSITION;
 
 typedef struct _MMPTE_PROTOTYPE
 {
-    ULONG Valid:1;
-    ULONG ProtoAddressLow:7;
-    ULONG ReadOnly:1;
-    ULONG WhichPool:1;
-    ULONG Prototype:1;
-    ULONG ProtoAddressHigh:21;
+    ULONG64 Valid:1;
+    ULONG64 Unused0:7;
+    ULONG64 ReadOnly:1;
+    ULONG64 Unused1:1;
+    ULONG64 Prototype:1;
+    ULONG64 Protection:5;
+    LONG64 ProtoAddress:48;
 } MMPTE_PROTOTYPE;
 
 typedef struct _MMPTE_SUBSECTION
 {
-    ULONG Valid:1;
-    ULONG SubsectionAddressLow:4;
-    ULONG Protection:5;
-    ULONG Prototype:1;
-    ULONG SubsectionAddressHigh:20;
-    ULONG WhichPool:1;
+    ULONG64 Valid:1;
+    ULONG64 Unused0:4;
+    ULONG64 Protection:5;
+    ULONG64 Prototype:1;
+    ULONG64 Unused1:5;
+    LONG64 SubsectionAddress:48;
 } MMPTE_SUBSECTION;
 
 typedef struct _MMPTE_LIST
 {
-    ULONG Valid:1;
-    ULONG OneEntry:1;
-    ULONG filler0:8;
-    ULONG NextEntry:20;
-    ULONG Prototype:1;
-    ULONG filler1:1;
+    ULONG64 Valid:1;
+    ULONG64 OneEntry:1;
+    ULONG64 filler0:3;
+    ULONG64 Protection:5;
+    ULONG64 Prototype:1;
+    ULONG64 Transition:1;
+    ULONG64 filler1:20;
+    ULONG64 NextEntry:32;
 } 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;
-
+    ULONG64 Valid:1;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    ULONG64 Dirty1:1;
 #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;
+#ifdef CONFIG_SMP
+    ULONG64 Writable:1;
+#else
+    ULONG64 Write:1;
+#endif
+#endif
+    ULONG64 Owner:1;
+    ULONG64 WriteThrough:1;
+    ULONG64 CacheDisable:1;
+    ULONG64 Accessed:1;
+    ULONG64 Dirty:1;
+    ULONG64 LargePage:1;
+    ULONG64 Global:1;
+    ULONG64 CopyOnWrite:1;
+    ULONG64 Prototype:1;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    ULONG64 Write:1;
+    ULONG64 PageFrameNumber:36;
+    ULONG64 reserved1:4;
+#else
+#ifdef CONFIG_SMP
+    ULONG64 Write:1;
+#else
+    ULONG64 reserved0:1;
+#endif
+    ULONG64 PageFrameNumber:28;
+    ULONG64 reserved1:12;
+#endif
+    ULONG64 SoftwareWsIndex:11;
+    ULONG64 NoExecute:1;
 } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
 
+typedef struct _MMPTE_HARDWARE_LARGEPAGE
+{
+    ULONG64 Valid:1;
+    ULONG64 Write:1;
+    ULONG64 Owner:1;
+    ULONG64 WriteThrough:1;
+    ULONG64 CacheDisable:1;
+    ULONG64 Accessed:1;
+    ULONG64 Dirty:1;
+    ULONG64 LargePage:1;
+    ULONG64 Global:1;
+    ULONG64 CopyOnWrite:1;
+    ULONG64 Prototype:1;
+    ULONG64 reserved0:1;
+    ULONG64 PAT:1;
+    ULONG64 reserved1:8;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    ULONG64 PageFrameNumber:27;
+    ULONG64 reserved2:16;
+#else
+    ULONG64 PageFrameNumber:19;
+    ULONG64 reserved2:24;
 #endif
+} MMPTE_HARDWARE_LARGEPAGE, *PMMPTE_HARDWARE_LARGEPAGE;
 
-//
-// Use the right PTE structure
-//
-#define HARDWARE_PTE        HARDWARE_PTE_X86
-#define PHARDWARE_PTE       PHARDWARE_PTE_X86
 
-#endif
+#endif // !AMD64_MMTYPES_H