3 Copyright (c) Alex Ionescu. All rights reserved.
4 Copyright (c) Timo Kreuzer All rights reserved.
12 AMD64 Type definitions for the Memory Manager
16 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
17 Timo Kreuzer (timo.kreuzer@reactos.com) 15-Aug-2008
21 #ifndef _AMD64_MMTYPES_H
22 #define _AMD64_MMTYPES_H
29 // Page-related Macros
31 #define PAGE_SIZE 0x1000
32 #define PAGE_SHIFT 12L
33 #define MM_ALLOCATION_GRANULARITY 0x10000
34 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L
37 // Sanity checks for Paging Macros
40 C_ASSERT(PAGE_SIZE
== (1 << PAGE_SHIFT
));
41 C_ASSERT(MM_ALLOCATION_GRANULARITY
== (1 << MM_ALLOCATION_GRANULARITY_SHIFT
));
42 C_ASSERT(MM_ALLOCATION_GRANULARITY
&&
43 !(MM_ALLOCATION_GRANULARITY
& (MM_ALLOCATION_GRANULARITY
- 1)));
44 C_ASSERT(MM_ALLOCATION_GRANULARITY
>= PAGE_SIZE
);
48 // Page Table Entry Definitions
50 typedef struct _HARDWARE_PTE
55 ULONG64 WriteThrough
:1;
56 ULONG64 CacheDisable
:1;
61 ULONG64 CopyOnWrite
:1;
64 ULONG64 PageFrameNumber
:28;
66 ULONG64 SoftwareWsIndex
:11;
68 } HARDWARE_PTE
, *PHARDWARE_PTE
;
70 typedef struct _MMPTE_SOFTWARE
73 ULONG64 PageFileLow
:4;
77 ULONG64 UsedPageTableEntries
:10;
79 ULONG64 PageFileHigh
:32;
80 } MMPTE_SOFTWARE
, *PMMPTE_SOFTWARE
;
82 typedef struct _MMPTE_TRANSITION
87 ULONG64 WriteThrough
:1;
88 ULONG64 CacheDisable
:1;
92 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
93 ULONG64 PageFrameNumber
:36;
96 ULONG64 PageFrameNumber
:28;
101 typedef struct _MMPTE_PROTOTYPE
108 ULONG64 Protection
:5;
109 LONG64 ProtoAddress
:48;
112 typedef struct _MMPTE_SUBSECTION
116 ULONG64 Protection
:5;
119 LONG64 SubsectionAddress
:48;
122 typedef struct _MMPTE_LIST
127 ULONG64 Protection
:5;
129 ULONG64 Transition
:1;
131 ULONG64 NextEntry
:32;
134 typedef struct _MMPTE_HARDWARE
137 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
147 ULONG64 WriteThrough
:1;
148 ULONG64 CacheDisable
:1;
153 ULONG64 CopyOnWrite
:1;
155 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
157 ULONG64 PageFrameNumber
:36;
165 ULONG64 PageFrameNumber
:28;
166 ULONG64 reserved1
:12;
168 ULONG64 SoftwareWsIndex
:11;
170 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
172 typedef struct _MMPTE_HARDWARE_LARGEPAGE
177 ULONG64 WriteThrough
:1;
178 ULONG64 CacheDisable
:1;
183 ULONG64 CopyOnWrite
:1;
188 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
189 ULONG64 PageFrameNumber
:27;
190 ULONG64 reserved2
:16;
192 ULONG64 PageFrameNumber
:19;
193 ULONG64 reserved2
:24;
195 } MMPTE_HARDWARE_LARGEPAGE
, *PMMPTE_HARDWARE_LARGEPAGE
;
198 #endif // !AMD64_MMTYPES_H