3 Copyright (c) Alex Ionescu. All rights reserved.
11 ARM Type definitions for the Memory Manager
15 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
19 #ifndef _ARM_MMTYPES_H
20 #define _ARM_MMTYPES_H
31 // Page-related Macros
34 #define PAGE_SIZE 0x1000
36 #define PAGE_SHIFT 12L
37 #define MM_ALLOCATION_GRANULARITY 0x10000
38 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L
39 #define MM_PAGE_FRAME_NUMBER_SIZE 20
42 // User space range limit
44 #define MI_HIGHEST_USER_ADDRESS (PVOID)0x7FFEFFFF
47 // Address of the shared user page
49 #define MM_SHARED_USER_DATA_VA 0x7FFE0000
52 // Sanity checks for Paging Macros
55 C_ASSERT(PAGE_SIZE
== (1 << PAGE_SHIFT
));
56 C_ASSERT(MM_ALLOCATION_GRANULARITY
== (1 << MM_ALLOCATION_GRANULARITY_SHIFT
));
57 C_ASSERT(MM_ALLOCATION_GRANULARITY
&&
58 !(MM_ALLOCATION_GRANULARITY
& (MM_ALLOCATION_GRANULARITY
- 1)));
59 C_ASSERT(MM_ALLOCATION_GRANULARITY
>= PAGE_SIZE
);
63 // Page Table Entry Definitions
65 typedef struct _HARDWARE_PDE_ARMV6
67 ULONG Valid
:1; // Only for small pages
68 ULONG LargePage
:1; // Note, if large then Valid = 0
74 ULONG PageFrameNumber
:22;
75 } HARDWARE_PDE_ARMV6
, *PHARDWARE_PDE_ARMV6
;
77 typedef struct _HARDWARE_LARGE_PTE_ARMV6
79 ULONG Valid
:1; // Only for small pages
80 ULONG LargePage
:1; // Note, if large then Valid = 0
88 ULONG CacheAttributes
:3;
92 ULONG SuperLagePage
:1;
94 ULONG PageFrameNumber
:12;
95 } HARDWARE_LARGE_PTE_ARMV6
, *PHARDWARE_LARGE_PTE_ARMV6
;
97 typedef struct _HARDWARE_PTE_ARMV6
105 ULONG CacheAttributes
:3;
109 ULONG PageFrameNumber
:20;
110 } HARDWARE_PTE_ARMV6
, *PHARDWARE_PTE_ARMV6
;
112 C_ASSERT(sizeof(HARDWARE_PDE_ARMV6
) == sizeof(ULONG
));
113 C_ASSERT(sizeof(HARDWARE_LARGE_PTE_ARMV6
) == sizeof(ULONG
));
114 C_ASSERT(sizeof(HARDWARE_PTE_ARMV6
) == sizeof(ULONG
));
116 typedef struct _MMPTE_SOFTWARE
123 ULONG PageFileHigh
:20;
126 typedef struct _MMPTE_TRANSITION
136 ULONG PageFrameNumber
:20;
139 typedef struct _MMPTE_PROTOTYPE
142 ULONG ProtoAddressLow
:7;
145 ULONG ProtoAddressHigh
:21;
148 typedef struct _MMPTE_SUBSECTION
151 ULONG SubsectionAddressLow
:4;
154 ULONG SubsectionAddressHigh
:20;
158 typedef struct _MMPTE_LIST
167 typedef struct _MMPTE_HARDWARE
175 ULONG CacheAttributes
:3;
179 ULONG PageFrameNumber
:20;
180 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
184 // Use the right PTE structure
186 #define HARDWARE_PTE HARDWARE_PTE_ARMV6
187 #define PHARDWARE_PTE PHARDWARE_PTE_ARMV6
189 typedef struct _MMPTE
196 MMPTE_PROTOTYPE Proto
;
198 MMPTE_TRANSITION Trans
;
199 MMPTE_SUBSECTION Subsect
;
204 typedef union _MMPDE_HARDWARE
213 ULONG PageFrameNumber
:22;
214 } MMPDE_HARDWARE
, *PMMPDE_HARDWARE
;
216 typedef struct _MMPDE