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
37 #define MM_PAGE_FRAME_NUMBER_SIZE 20
40 // Address of the shared user page
42 #define MM_SHARED_USER_DATA_VA 0x7FFE0000
45 // Sanity checks for Paging Macros
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
);
58 #define KSEG0_BASE_PAE 0xE0000000
61 // Page Table Entry Definitions
63 typedef struct _HARDWARE_PTE_X86
77 ULONG PageFrameNumber
:20;
78 } HARDWARE_PTE_X86
, *PHARDWARE_PTE_X86
;
80 typedef struct _MMPTE_SOFTWARE
87 ULONG PageFileHigh
:20;
90 typedef struct _MMPTE_TRANSITION
100 ULONG PageFrameNumber
:20;
103 typedef struct _MMPTE_PROTOTYPE
106 ULONG ProtoAddressLow
:7;
110 ULONG ProtoAddressHigh
:21;
113 typedef struct _MMPTE_SUBSECTION
116 ULONG SubsectionAddressLow
:4;
119 ULONG SubsectionAddressHigh
:20;
123 typedef struct _MMPTE_LIST
135 typedef struct _MMPTE_HARDWARE
140 ULONG WriteThrough
:1;
141 ULONG CacheDisable
:1;
149 ULONG PageFrameNumber
:20;
150 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
154 typedef struct _MMPTE_HARDWARE
159 ULONG WriteThrough
:1;
160 ULONG CacheDisable
:1;
168 ULONG PageFrameNumber
:20;
169 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
174 // Use the right PTE structure
176 #define HARDWARE_PTE HARDWARE_PTE_X86
177 #define PHARDWARE_PTE PHARDWARE_PTE_X86