[NDK]
[reactos.git] / reactos / include / ndk / i386 / mmtypes.h
1 /*++ NDK Version: 0095
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 mmtypes.h (X86)
8
9 Abstract:
10
11 i386 Type definitions for the Memory Manager
12
13 Author:
14
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
16
17 --*/
18
19 #ifndef _I386_MMTYPES_H
20 #define _I386_MMTYPES_H
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 //
27 // Dependencies
28 //
29
30 //
31 // Page-related Macros
32 //
33 #define PAGE_SIZE 0x1000
34 #define PAGE_SHIFT 12L
35 #define MM_ALLOCATION_GRANULARITY 0x10000
36 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L
37 #define MM_PAGE_FRAME_NUMBER_SIZE 20
38
39 //
40 // Address of the shared user page
41 //
42 #define MM_SHARED_USER_DATA_VA 0x7FFE0000
43
44 //
45 // Sanity checks for Paging Macros
46 //
47 #ifdef C_ASSERT
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);
53 #endif
54
55 //
56 // PAE SEG0 Base?
57 //
58 #define KSEG0_BASE_PAE 0xE0000000
59
60 //
61 // Page Table Entry Definitions
62 //
63 typedef struct _HARDWARE_PTE_X86
64 {
65 ULONG Valid:1;
66 ULONG Write:1;
67 ULONG Owner:1;
68 ULONG WriteThrough:1;
69 ULONG CacheDisable:1;
70 ULONG Accessed:1;
71 ULONG Dirty:1;
72 ULONG LargePage:1;
73 ULONG Global:1;
74 ULONG CopyOnWrite:1;
75 ULONG Prototype: 1;
76 ULONG reserved: 1;
77 ULONG PageFrameNumber:20;
78 } HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
79
80 typedef struct _MMPTE_SOFTWARE
81 {
82 ULONG Valid:1;
83 ULONG PageFileLow:4;
84 ULONG Protection:5;
85 ULONG Prototype:1;
86 ULONG Transition:1;
87 ULONG PageFileHigh:20;
88 } MMPTE_SOFTWARE;
89
90 typedef struct _MMPTE_TRANSITION
91 {
92 ULONG Valid:1;
93 ULONG Write:1;
94 ULONG Owner:1;
95 ULONG WriteThrough:1;
96 ULONG CacheDisable:1;
97 ULONG Protection:5;
98 ULONG Prototype:1;
99 ULONG Transition:1;
100 ULONG PageFrameNumber:20;
101 } MMPTE_TRANSITION;
102
103 typedef struct _MMPTE_PROTOTYPE
104 {
105 ULONG Valid:1;
106 ULONG ProtoAddressLow:7;
107 ULONG ReadOnly:1;
108 ULONG WhichPool:1;
109 ULONG Prototype:1;
110 ULONG ProtoAddressHigh:21;
111 } MMPTE_PROTOTYPE;
112
113 typedef struct _MMPTE_SUBSECTION
114 {
115 ULONG Valid:1;
116 ULONG SubsectionAddressLow:4;
117 ULONG Protection:5;
118 ULONG Prototype:1;
119 ULONG SubsectionAddressHigh:20;
120 ULONG WhichPool:1;
121 } MMPTE_SUBSECTION;
122
123 typedef struct _MMPTE_LIST
124 {
125 ULONG Valid:1;
126 ULONG OneEntry:1;
127 ULONG filler0:8;
128 ULONG Prototype:1;
129 ULONG filler1:1;
130 ULONG NextEntry:20;
131 } MMPTE_LIST;
132
133 #ifndef CONFIG_SMP
134
135 typedef struct _MMPTE_HARDWARE
136 {
137 ULONG Valid:1;
138 ULONG Write:1;
139 ULONG Owner:1;
140 ULONG WriteThrough:1;
141 ULONG CacheDisable:1;
142 ULONG Accessed:1;
143 ULONG Dirty:1;
144 ULONG LargePage:1;
145 ULONG Global:1;
146 ULONG CopyOnWrite:1;
147 ULONG Prototype:1;
148 ULONG reserved:1;
149 ULONG PageFrameNumber:20;
150 } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
151
152 #else
153
154 typedef struct _MMPTE_HARDWARE
155 {
156 ULONG Valid:1;
157 ULONG Writable:1;
158 ULONG Owner:1;
159 ULONG WriteThrough:1;
160 ULONG CacheDisable:1;
161 ULONG Accessed:1;
162 ULONG Dirty:1;
163 ULONG LargePage:1;
164 ULONG Global:1;
165 ULONG CopyOnWrite:1;
166 ULONG Prototype:1;
167 ULONG Write:1;
168 ULONG PageFrameNumber:20;
169 } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
170
171 #endif
172
173 //
174 // Use the right PTE structure
175 //
176 #define HARDWARE_PTE HARDWARE_PTE_X86
177 #define PHARDWARE_PTE PHARDWARE_PTE_X86
178
179 #ifdef __cplusplus
180 }; // extern "C"
181 #endif
182
183 #endif