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