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
27 // Page-related Macros
29 #define PAGE_SIZE 0x1000
30 #define PAGE_SHIFT 12L
31 #define MM_ALLOCATION_GRANULARITY 0x10000
32 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L
35 // Address of the shared user page
37 #define MM_SHARED_USER_DATA_VA 0x7FFE0000
40 // Sanity checks for Paging Macros
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
);
53 #define KSEG0_BASE_PAE 0xE0000000
56 // Page Table Entry Definitions
58 typedef struct _HARDWARE_PTE_X86
72 ULONG PageFrameNumber
:20;
73 } HARDWARE_PTE_X86
, *PHARDWARE_PTE_X86
;
75 typedef struct _MMPTE_SOFTWARE
82 ULONG PageFileHigh
:20;
85 typedef struct _MMPTE_TRANSITION
95 ULONG PageFrameNumber
:20;
98 typedef struct _MMPTE_PROTOTYPE
101 ULONG ProtoAddressLow
:7;
105 ULONG ProtoAddressHigh
:21;
108 typedef struct _MMPTE_SUBSECTION
111 ULONG SubsectionAddressLow
:4;
114 ULONG SubsectionAddressHigh
:20;
118 typedef struct _MMPTE_LIST
130 typedef struct _MMPTE_HARDWARE
135 ULONG WriteThrough
:1;
136 ULONG CacheDisable
:1;
144 ULONG PageFrameNumber
:20;
145 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
149 typedef struct _MMPTE_HARDWARE
154 ULONG WriteThrough
:1;
155 ULONG CacheDisable
:1;
163 ULONG PageFrameNumber
:20;
164 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
169 // Use the right PTE structure
171 #define HARDWARE_PTE HARDWARE_PTE_X86
172 #define PHARDWARE_PTE PHARDWARE_PTE_X86