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
41 // Sanity checks for Paging Macros
44 C_ASSERT(PAGE_SIZE
== (1 << PAGE_SHIFT
));
45 C_ASSERT(MM_ALLOCATION_GRANULARITY
== (1 << MM_ALLOCATION_GRANULARITY_SHIFT
));
46 C_ASSERT(MM_ALLOCATION_GRANULARITY
&&
47 !(MM_ALLOCATION_GRANULARITY
& (MM_ALLOCATION_GRANULARITY
- 1)));
48 C_ASSERT(MM_ALLOCATION_GRANULARITY
>= PAGE_SIZE
);
52 // Page Table Entry Definitions
54 typedef struct _HARDWARE_PDE_ARMV6
56 ULONG Valid
:1; // Only for small pages
57 ULONG LargePage
:1; // Note, if large then Valid = 0
63 ULONG PageFrameNumber
:22;
64 } HARDWARE_PDE_ARMV6
, *PHARDWARE_PDE_ARMV6
;
66 typedef struct _HARDWARE_LARGE_PTE_ARMV6
68 ULONG Valid
:1; // Only for small pages
69 ULONG LargePage
:1; // Note, if large then Valid = 0
77 ULONG CacheAttributes
:3;
81 ULONG SuperLagePage
:1;
83 ULONG PageFrameNumber
:12;
84 } HARDWARE_LARGE_PTE_ARMV6
, *PHARDWARE_LARGE_PTE_ARMV6
;
86 typedef struct _HARDWARE_PTE_ARMV6
94 ULONG CacheAttributes
:3;
98 ULONG PageFrameNumber
:20;
99 } HARDWARE_PTE_ARMV6
, *PHARDWARE_PTE_ARMV6
;
101 C_ASSERT(sizeof(HARDWARE_PDE_ARMV6
) == sizeof(ULONG
));
102 C_ASSERT(sizeof(HARDWARE_LARGE_PTE_ARMV6
) == sizeof(ULONG
));
103 C_ASSERT(sizeof(HARDWARE_PTE_ARMV6
) == sizeof(ULONG
));
105 typedef struct _MMPTE_SOFTWARE
112 ULONG PageFileHigh
:20;
115 typedef struct _MMPTE_TRANSITION
125 ULONG PageFrameNumber
:20;
128 typedef struct _MMPTE_PROTOTYPE
131 ULONG ProtoAddressLow
:7;
134 ULONG ProtoAddressHigh
:21;
137 typedef struct _MMPTE_SUBSECTION
140 ULONG SubsectionAddressLow
:4;
143 ULONG SubsectionAddressHigh
:20;
147 typedef struct _MMPTE_LIST
156 typedef union _MMPTE_HARDWARE
164 ULONG CacheAttributes
:3;
168 ULONG PageFrameNumber
:20;
169 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
171 typedef union _MMPDE_HARDWARE
180 ULONG PageFrameNumber
:22;
181 } MMPDE_HARDWARE
, *PMMPDE_HARDWARE
;
183 typedef struct _MMPDE
193 // Use the right PTE structure
195 #define HARDWARE_PTE HARDWARE_PTE_ARMV6
196 #define PHARDWARE_PTE PHARDWARE_PTE_ARMV6