- NDK 0.98, now with versionned headers. Too many changes to list, see the TinyKRNL...
[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 //
23 // Dependencies
24 //
25
26 //
27 // Page-related Macros
28 //
29 #define PAGE_SIZE 0x1000
30 #define PAGE_SHIFT 12L
31
32 //
33 // Page Table Entry Definitions
34 //
35 typedef struct _HARDWARE_PTE_X86
36 {
37 ULONG Valid:1;
38 ULONG Write:1;
39 ULONG Owner:1;
40 ULONG WriteThrough:1;
41 ULONG CacheDisable:1;
42 ULONG Accessed:1;
43 ULONG Dirty:1;
44 ULONG LargePage:1;
45 ULONG Global:1;
46 ULONG CopyOnWrite:1;
47 ULONG Prototype: 1;
48 ULONG reserved: 1;
49 ULONG PageFrameNumber:20;
50 } HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
51
52 typedef struct _MMPTE_SOFTWARE
53 {
54 ULONG Valid:1;
55 ULONG PageFileLow:4;
56 ULONG Protection:5;
57 ULONG Prototype:1;
58 ULONG Transition:1;
59 ULONG PageFileHigh:20;
60 } MMPTE_SOFTWARE;
61
62 typedef struct _MMPTE_TRANSITION
63 {
64 ULONG Valid:1;
65 ULONG Write:1;
66 ULONG Owner:1;
67 ULONG WriteThrough:1;
68 ULONG CacheDisable:1;
69 ULONG Protection:5;
70 ULONG Prototype:1;
71 ULONG Transition:1;
72 ULONG PageFrameNumber:20;
73 } MMPTE_TRANSITION;
74
75 typedef struct _MMPTE_PROTOTYPE
76 {
77 ULONG Valid:1;
78 ULONG ProtoAddressLow:7;
79 ULONG ReadOnly:1;
80 ULONG WhichPool:1;
81 ULONG Prototype:1;
82 ULONG ProtoAddressHigh:21;
83 } MMPTE_PROTOTYPE;
84
85 typedef struct _MMPTE_SUBSECTION
86 {
87 ULONG Valid:1;
88 ULONG SubsectionAddressLow:4;
89 ULONG Protection:5;
90 ULONG Prototype:1;
91 ULONG SubsectionAddressHigh:20;
92 ULONG WhichPool:1;
93 } MMPTE_SUBSECTION;
94
95 typedef struct _MMPTE_LIST
96 {
97 ULONG Valid:1;
98 ULONG OneEntry:1;
99 ULONG filler10:10;
100 ULONG NextEntry:20;
101 } MMPTE_LIST;
102
103 #ifndef CONFIG_SMP
104
105 typedef struct _MMPTE_HARDWARE
106 {
107 ULONG Valid:1;
108 ULONG Write:1;
109 ULONG Owner:1;
110 ULONG WriteThrough:1;
111 ULONG CacheDisable:1;
112 ULONG Accessed:1;
113 ULONG Dirty:1;
114 ULONG LargePage:1;
115 ULONG Global:1;
116 ULONG CopyOnWrite:1;
117 ULONG Prototype:1;
118 ULONG reserved:1;
119 ULONG PageFrameNumber:20;
120 } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
121
122 #else
123
124 typedef struct _MMPTE_HARDWARE
125 {
126 ULONG Valid:1;
127 ULONG Writable:1;
128 ULONG Owner:1;
129 ULONG WriteThrough:1;
130 ULONG CacheDisable:1;
131 ULONG Accessed:1;
132 ULONG Dirty:1;
133 ULONG LargePage:1;
134 ULONG Global:1;
135 ULONG CopyOnWrite:1;
136 ULONG Prototype:1;
137 ULONG Write:1;
138 ULONG PageFrameNumber:20;
139 } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
140
141 #endif
142
143 //
144 // Use the right PTE structure
145 //
146 #define HARDWARE_PTE HARDWARE_PTE_X86
147 #define PHARDWARE_PTE PHARDWARE_PTE_X86
148
149 #endif