3 Copyright (c) Alex Ionescu. All rights reserved.
11 i386 Type definitions for the Memory Manager
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
19 #ifndef _I386_MMTYPES_H
20 #define _I386_MMTYPES_H
31 // Page-related Macros
33 #define PAGE_SIZE 0x1000
34 #define PAGE_SHIFT 12L
35 #define MM_ALLOCATION_GRANULARITY 0x10000
36 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L
39 // Address of the shared user page
41 #define MM_SHARED_USER_DATA_VA 0x7FFE0000
44 // Sanity checks for Paging Macros
47 C_ASSERT(PAGE_SIZE
== (1 << PAGE_SHIFT
));
48 C_ASSERT(MM_ALLOCATION_GRANULARITY
== (1 << MM_ALLOCATION_GRANULARITY_SHIFT
));
49 C_ASSERT(MM_ALLOCATION_GRANULARITY
&&
50 !(MM_ALLOCATION_GRANULARITY
& (MM_ALLOCATION_GRANULARITY
- 1)));
51 C_ASSERT(MM_ALLOCATION_GRANULARITY
>= PAGE_SIZE
);
57 #define KSEG0_BASE_PAE 0xE0000000
60 // Page Table Entry Definitions
62 typedef struct _HARDWARE_PTE_X86
76 ULONG PageFrameNumber
:20;
77 } HARDWARE_PTE_X86
, *PHARDWARE_PTE_X86
;
79 typedef struct _MMPTE_SOFTWARE
86 ULONG PageFileHigh
:20;
89 typedef struct _MMPTE_TRANSITION
99 ULONG PageFrameNumber
:20;
102 typedef struct _MMPTE_PROTOTYPE
105 ULONG ProtoAddressLow
:7;
109 ULONG ProtoAddressHigh
:21;
112 typedef struct _MMPTE_SUBSECTION
115 ULONG SubsectionAddressLow
:4;
118 ULONG SubsectionAddressHigh
:20;
122 typedef struct _MMPTE_LIST
134 typedef struct _MMPTE_HARDWARE
139 ULONG WriteThrough
:1;
140 ULONG CacheDisable
:1;
148 ULONG PageFrameNumber
:20;
149 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
153 typedef struct _MMPTE_HARDWARE
158 ULONG WriteThrough
:1;
159 ULONG CacheDisable
:1;
167 ULONG PageFrameNumber
:20;
168 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
173 // Use the right PTE structure
175 #define HARDWARE_PTE HARDWARE_PTE_X86
176 #define PHARDWARE_PTE PHARDWARE_PTE_X86