* Sync up to trunk r55544.
[reactos.git] / 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 //
23 // Dependencies
24 //
25
26 //
27 // Page-related Macros
28 //
29 #define PAGE_SIZE 0x1000
30 #define PAGE_SHIFT 12L
31 #define MM_ALLOCATION_GRANULARITY 0x10000
32 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L
33
34 //
35 // Address of the shared user page
36 //
37 #define MM_SHARED_USER_DATA_VA 0x7FFE0000
38
39 //
40 // Sanity checks for Paging Macros
41 //
42 #ifdef C_ASSERT
43 C_ASSERT(PAGE_SIZE == (1 << PAGE_SHIFT));
44 C_ASSERT(MM_ALLOCATION_GRANULARITY == (1 << MM_ALLOCATION_GRANULARITY_SHIFT));
45 C_ASSERT(MM_ALLOCATION_GRANULARITY &&
46 !(MM_ALLOCATION_GRANULARITY & (MM_ALLOCATION_GRANULARITY - 1)));
47 C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE);
48 #endif
49
50 //
51 // PAE SEG0 Base?
52 //
53 #define KSEG0_BASE_PAE 0xE0000000
54
55 //
56 // Page Table Entry Definitions
57 //
58 typedef struct _HARDWARE_PTE_X86
59 {
60 ULONG Valid:1;
61 ULONG Write:1;
62 ULONG Owner:1;
63 ULONG WriteThrough:1;
64 ULONG CacheDisable:1;
65 ULONG Accessed:1;
66 ULONG Dirty:1;
67 ULONG LargePage:1;
68 ULONG Global:1;
69 ULONG CopyOnWrite:1;
70 ULONG Prototype: 1;
71 ULONG reserved: 1;
72 ULONG PageFrameNumber:20;
73 } HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
74
75 typedef struct _MMPTE_SOFTWARE
76 {
77 ULONG Valid:1;
78 ULONG PageFileLow:4;
79 ULONG Protection:5;
80 ULONG Prototype:1;
81 ULONG Transition:1;
82 ULONG PageFileHigh:20;
83 } MMPTE_SOFTWARE;
84
85 typedef struct _MMPTE_TRANSITION
86 {
87 ULONG Valid:1;
88 ULONG Write:1;
89 ULONG Owner:1;
90 ULONG WriteThrough:1;
91 ULONG CacheDisable:1;
92 ULONG Protection:5;
93 ULONG Prototype:1;
94 ULONG Transition:1;
95 ULONG PageFrameNumber:20;
96 } MMPTE_TRANSITION;
97
98 typedef struct _MMPTE_PROTOTYPE
99 {
100 ULONG Valid:1;
101 ULONG ProtoAddressLow:7;
102 ULONG ReadOnly:1;
103 ULONG WhichPool:1;
104 ULONG Prototype:1;
105 ULONG ProtoAddressHigh:21;
106 } MMPTE_PROTOTYPE;
107
108 typedef struct _MMPTE_SUBSECTION
109 {
110 ULONG Valid:1;
111 ULONG SubsectionAddressLow:4;
112 ULONG Protection:5;
113 ULONG Prototype:1;
114 ULONG SubsectionAddressHigh:20;
115 ULONG WhichPool:1;
116 } MMPTE_SUBSECTION;
117
118 typedef struct _MMPTE_LIST
119 {
120 ULONG Valid:1;
121 ULONG OneEntry:1;
122 ULONG filler0:8;
123 ULONG Prototype:1;
124 ULONG filler1:1;
125 ULONG NextEntry:20;
126 } MMPTE_LIST;
127
128 #ifndef CONFIG_SMP
129
130 typedef struct _MMPTE_HARDWARE
131 {
132 ULONG Valid:1;
133 ULONG Write:1;
134 ULONG Owner:1;
135 ULONG WriteThrough:1;
136 ULONG CacheDisable:1;
137 ULONG Accessed:1;
138 ULONG Dirty:1;
139 ULONG LargePage:1;
140 ULONG Global:1;
141 ULONG CopyOnWrite:1;
142 ULONG Prototype:1;
143 ULONG reserved:1;
144 ULONG PageFrameNumber:20;
145 } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
146
147 #else
148
149 typedef struct _MMPTE_HARDWARE
150 {
151 ULONG Valid:1;
152 ULONG Writable:1;
153 ULONG Owner:1;
154 ULONG WriteThrough:1;
155 ULONG CacheDisable:1;
156 ULONG Accessed:1;
157 ULONG Dirty:1;
158 ULONG LargePage:1;
159 ULONG Global:1;
160 ULONG CopyOnWrite:1;
161 ULONG Prototype:1;
162 ULONG Write:1;
163 ULONG PageFrameNumber:20;
164 } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
165
166 #endif
167
168 //
169 // Use the right PTE structure
170 //
171 #define HARDWARE_PTE HARDWARE_PTE_X86
172 #define PHARDWARE_PTE PHARDWARE_PTE_X86
173
174 #endif