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
38 #define MM_PAGE_FRAME_NUMBER_SIZE 52
41 // Address of the shared user page
43 #define MM_SHARED_USER_DATA_VA 0x7FFE0000ULL
46 // Sanity checks for Paging Macros
49 C_ASSERT(PAGE_SIZE
== (1 << PAGE_SHIFT
));
50 C_ASSERT(MM_ALLOCATION_GRANULARITY
== (1 << MM_ALLOCATION_GRANULARITY_SHIFT
));
51 C_ASSERT(MM_ALLOCATION_GRANULARITY
&&
52 !(MM_ALLOCATION_GRANULARITY
& (MM_ALLOCATION_GRANULARITY
- 1)));
53 C_ASSERT(MM_ALLOCATION_GRANULARITY
>= PAGE_SIZE
);
57 // Page Table Entry Definitions
59 typedef struct _HARDWARE_PTE
64 ULONG64 WriteThrough
:1;
65 ULONG64 CacheDisable
:1;
70 ULONG64 CopyOnWrite
:1;
73 ULONG64 PageFrameNumber
:28;
75 ULONG64 SoftwareWsIndex
:11;
77 } HARDWARE_PTE
, *PHARDWARE_PTE
;
79 typedef struct _MMPTE_SOFTWARE
82 ULONG64 PageFileLow
:4;
86 ULONG64 UsedPageTableEntries
:10;
88 ULONG64 PageFileHigh
:32;
89 } MMPTE_SOFTWARE
, *PMMPTE_SOFTWARE
;
91 typedef struct _MMPTE_TRANSITION
96 ULONG64 WriteThrough
:1;
97 ULONG64 CacheDisable
:1;
100 ULONG64 Transition
:1;
101 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
102 ULONG64 PageFrameNumber
:36;
105 ULONG64 PageFrameNumber
:28;
110 typedef struct _MMPTE_PROTOTYPE
117 ULONG64 Protection
:5;
118 LONG64 ProtoAddress
:48;
121 typedef struct _MMPTE_SUBSECTION
125 ULONG64 Protection
:5;
128 LONG64 SubsectionAddress
:48;
131 typedef struct _MMPTE_LIST
136 ULONG64 Protection
:5;
138 ULONG64 Transition
:1;
140 ULONG64 NextEntry
:32;
143 typedef struct _MMPTE_HARDWARE
146 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
156 ULONG64 WriteThrough
:1;
157 ULONG64 CacheDisable
:1;
162 ULONG64 CopyOnWrite
:1;
164 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
166 ULONG64 PageFrameNumber
:36;
174 ULONG64 PageFrameNumber
:28;
175 ULONG64 reserved1
:12;
177 ULONG64 SoftwareWsIndex
:11;
179 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
181 typedef struct _MMPTE_HARDWARE_LARGEPAGE
186 ULONG64 WriteThrough
:1;
187 ULONG64 CacheDisable
:1;
192 ULONG64 CopyOnWrite
:1;
197 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
198 ULONG64 PageFrameNumber
:27;
199 ULONG64 reserved2
:16;
201 ULONG64 PageFrameNumber
:19;
202 ULONG64 reserved2
:24;
204 } MMPTE_HARDWARE_LARGEPAGE
, *PMMPTE_HARDWARE_LARGEPAGE
;
210 #endif // !AMD64_MMTYPES_H