3 Copyright (c) Alex Ionescu. All rights reserved.
11 AMD64 Type definitions for the Memory Manager
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
16 Timo Kreuzer (timo.kreuzer@reactos.com) 15-Aug-2008
20 #ifndef _AMD64_MMTYPES_H
21 #define _AMD64_MMTYPES_H
32 // Page-related Macros
34 #define PAGE_SIZE 0x1000
35 #define PAGE_SHIFT 12L
36 #define MM_ALLOCATION_GRANULARITY 0x10000
37 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L
40 // Address of the shared user page
42 #define MM_SHARED_USER_DATA_VA 0x7FFE0000ULL
45 // Sanity checks for Paging Macros
48 C_ASSERT(PAGE_SIZE
== (1 << PAGE_SHIFT
));
49 C_ASSERT(MM_ALLOCATION_GRANULARITY
== (1 << MM_ALLOCATION_GRANULARITY_SHIFT
));
50 C_ASSERT(MM_ALLOCATION_GRANULARITY
&&
51 !(MM_ALLOCATION_GRANULARITY
& (MM_ALLOCATION_GRANULARITY
- 1)));
52 C_ASSERT(MM_ALLOCATION_GRANULARITY
>= PAGE_SIZE
);
56 // Page Table Entry Definitions
58 typedef struct _HARDWARE_PTE
63 ULONG64 WriteThrough
:1;
64 ULONG64 CacheDisable
:1;
69 ULONG64 CopyOnWrite
:1;
72 ULONG64 PageFrameNumber
:28;
74 ULONG64 SoftwareWsIndex
:11;
76 } HARDWARE_PTE
, *PHARDWARE_PTE
;
78 typedef struct _MMPTE_SOFTWARE
81 ULONG64 PageFileLow
:4;
85 ULONG64 UsedPageTableEntries
:10;
87 ULONG64 PageFileHigh
:32;
88 } MMPTE_SOFTWARE
, *PMMPTE_SOFTWARE
;
90 typedef struct _MMPTE_TRANSITION
95 ULONG64 WriteThrough
:1;
96 ULONG64 CacheDisable
:1;
100 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
101 ULONG64 PageFrameNumber
:36;
104 ULONG64 PageFrameNumber
:28;
109 typedef struct _MMPTE_PROTOTYPE
116 ULONG64 Protection
:5;
117 LONG64 ProtoAddress
:48;
120 typedef struct _MMPTE_SUBSECTION
124 ULONG64 Protection
:5;
127 LONG64 SubsectionAddress
:48;
130 typedef struct _MMPTE_LIST
135 ULONG64 Protection
:5;
137 ULONG64 Transition
:1;
139 ULONG64 NextEntry
:32;
142 typedef struct _MMPTE_HARDWARE
145 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
155 ULONG64 WriteThrough
:1;
156 ULONG64 CacheDisable
:1;
161 ULONG64 CopyOnWrite
:1;
163 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
165 ULONG64 PageFrameNumber
:36;
173 ULONG64 PageFrameNumber
:28;
174 ULONG64 reserved1
:12;
176 ULONG64 SoftwareWsIndex
:11;
178 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
180 typedef struct _MMPTE_HARDWARE_LARGEPAGE
185 ULONG64 WriteThrough
:1;
186 ULONG64 CacheDisable
:1;
191 ULONG64 CopyOnWrite
:1;
196 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
197 ULONG64 PageFrameNumber
:27;
198 ULONG64 reserved2
:16;
200 ULONG64 PageFrameNumber
:19;
201 ULONG64 reserved2
:24;
203 } MMPTE_HARDWARE_LARGEPAGE
, *PMMPTE_HARDWARE_LARGEPAGE
;
209 #endif // !AMD64_MMTYPES_H