[ROSTESTS]
[reactos.git] / reactos / include / ndk / amd64 / mmtypes.h
1 /*++ NDK Version: 0095
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4 Copyright (c) Timo Kreuzer All rights reserved.
5
6 Header Name:
7
8 mmtypes.h (AMD64)
9
10 Abstract:
11
12 AMD64 Type definitions for the Memory Manager
13
14 Author:
15
16 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
17 Timo Kreuzer (timo.kreuzer@reactos.com) 15-Aug-2008
18
19 --*/
20
21 #ifndef _AMD64_MMTYPES_H
22 #define _AMD64_MMTYPES_H
23
24 //
25 // Dependencies
26 //
27
28 //
29 // Page-related Macros
30 //
31 #define PAGE_SIZE 0x1000
32 #define PAGE_SHIFT 12L
33 #define MM_ALLOCATION_GRANULARITY 0x10000
34 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L
35
36 //
37 // Sanity checks for Paging Macros
38 //
39 #ifdef C_ASSERT
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);
45 #endif
46
47 //
48 // Page Table Entry Definitions
49 //
50 typedef struct _HARDWARE_PTE
51 {
52 ULONG64 Valid:1;
53 ULONG64 Write:1;
54 ULONG64 Owner:1;
55 ULONG64 WriteThrough:1;
56 ULONG64 CacheDisable:1;
57 ULONG64 Accessed:1;
58 ULONG64 Dirty:1;
59 ULONG64 LargePage:1;
60 ULONG64 Global:1;
61 ULONG64 CopyOnWrite:1;
62 ULONG64 Prototype:1;
63 ULONG64 reserved0:1;
64 ULONG64 PageFrameNumber:28;
65 ULONG64 reserved1:12;
66 ULONG64 SoftwareWsIndex:11;
67 ULONG64 NoExecute:1;
68 } HARDWARE_PTE, *PHARDWARE_PTE;
69
70 typedef struct _MMPTE_SOFTWARE
71 {
72 ULONG64 Valid:1;
73 ULONG64 PageFileLow:4;
74 ULONG64 Protection:5;
75 ULONG64 Prototype:1;
76 ULONG64 Transition:1;
77 ULONG64 UsedPageTableEntries:10;
78 ULONG64 Reserved:10;
79 ULONG64 PageFileHigh:32;
80 } MMPTE_SOFTWARE, *PMMPTE_SOFTWARE;
81
82 typedef struct _MMPTE_TRANSITION
83 {
84 ULONG64 Valid:1;
85 ULONG64 Write:1;
86 ULONG64 Owner:1;
87 ULONG64 WriteThrough:1;
88 ULONG64 CacheDisable:1;
89 ULONG64 Protection:5;
90 ULONG64 Prototype:1;
91 ULONG64 Transition:1;
92 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
93 ULONG64 PageFrameNumber:36;
94 ULONG64 Unused:16;
95 #else
96 ULONG64 PageFrameNumber:28;
97 ULONG64 Unused:24;
98 #endif
99 } MMPTE_TRANSITION;
100
101 typedef struct _MMPTE_PROTOTYPE
102 {
103 ULONG64 Valid:1;
104 ULONG64 Unused0:7;
105 ULONG64 ReadOnly:1;
106 ULONG64 Unused1:1;
107 ULONG64 Prototype:1;
108 ULONG64 Protection:5;
109 LONG64 ProtoAddress:48;
110 } MMPTE_PROTOTYPE;
111
112 typedef struct _MMPTE_SUBSECTION
113 {
114 ULONG64 Valid:1;
115 ULONG64 Unused0:4;
116 ULONG64 Protection:5;
117 ULONG64 Prototype:1;
118 ULONG64 Unused1:5;
119 LONG64 SubsectionAddress:48;
120 } MMPTE_SUBSECTION;
121
122 typedef struct _MMPTE_LIST
123 {
124 ULONG64 Valid:1;
125 ULONG64 OneEntry:1;
126 ULONG64 filler0:3;
127 ULONG64 Protection:5;
128 ULONG64 Prototype:1;
129 ULONG64 Transition:1;
130 ULONG64 filler1:20;
131 ULONG64 NextEntry:32;
132 } MMPTE_LIST;
133
134 typedef struct _MMPTE_HARDWARE
135 {
136 ULONG64 Valid:1;
137 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
138 ULONG64 Dirty1:1;
139 #else
140 #ifdef CONFIG_SMP
141 ULONG64 Writable:1;
142 #else
143 ULONG64 Write:1;
144 #endif
145 #endif
146 ULONG64 Owner:1;
147 ULONG64 WriteThrough:1;
148 ULONG64 CacheDisable:1;
149 ULONG64 Accessed:1;
150 ULONG64 Dirty:1;
151 ULONG64 LargePage:1;
152 ULONG64 Global:1;
153 ULONG64 CopyOnWrite:1;
154 ULONG64 Prototype:1;
155 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
156 ULONG64 Write:1;
157 ULONG64 PageFrameNumber:36;
158 ULONG64 reserved1:4;
159 #else
160 #ifdef CONFIG_SMP
161 ULONG64 Write:1;
162 #else
163 ULONG64 reserved0:1;
164 #endif
165 ULONG64 PageFrameNumber:28;
166 ULONG64 reserved1:12;
167 #endif
168 ULONG64 SoftwareWsIndex:11;
169 ULONG64 NoExecute:1;
170 } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
171
172 typedef struct _MMPTE_HARDWARE_LARGEPAGE
173 {
174 ULONG64 Valid:1;
175 ULONG64 Write:1;
176 ULONG64 Owner:1;
177 ULONG64 WriteThrough:1;
178 ULONG64 CacheDisable:1;
179 ULONG64 Accessed:1;
180 ULONG64 Dirty:1;
181 ULONG64 LargePage:1;
182 ULONG64 Global:1;
183 ULONG64 CopyOnWrite:1;
184 ULONG64 Prototype:1;
185 ULONG64 reserved0:1;
186 ULONG64 PAT:1;
187 ULONG64 reserved1:8;
188 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
189 ULONG64 PageFrameNumber:27;
190 ULONG64 reserved2:16;
191 #else
192 ULONG64 PageFrameNumber:19;
193 ULONG64 reserved2:24;
194 #endif
195 } MMPTE_HARDWARE_LARGEPAGE, *PMMPTE_HARDWARE_LARGEPAGE;
196
197
198 #endif // !AMD64_MMTYPES_H