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
27 // Page-related Macros
30 #define PAGE_SIZE 0x1000
32 #define PAGE_SHIFT 12L
33 #define MM_ALLOCATION_GRANULARITY 0x10000
34 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L
37 // Sanity checks for Paging Macros
40 C_ASSERT(PAGE_SIZE
== (1 << PAGE_SHIFT
));
41 C_ASSERT(MM_ALLOCATION_GRANULARITY
== (1 << MM_ALLOCATION_GRANULARITY_SHIFT
));
42 C_ASSERT(MM_ALLOCATION_GRANULARITY
&&
43 !(MM_ALLOCATION_GRANULARITY
& (MM_ALLOCATION_GRANULARITY
- 1)));
44 C_ASSERT(MM_ALLOCATION_GRANULARITY
>= PAGE_SIZE
);
48 // Page Table Entry Definitions
50 typedef struct _HARDWARE_PDE_ARMV6
52 ULONG Valid
:1; // Only for small pages
53 ULONG LargePage
:1; // Note, if large then Valid = 0
59 ULONG PageFrameNumber
:22;
60 } HARDWARE_PDE_ARMV6
, *PHARDWARE_PDE_ARMV6
;
62 typedef struct _HARDWARE_LARGE_PTE_ARMV6
64 ULONG Valid
:1; // Only for small pages
65 ULONG LargePage
:1; // Note, if large then Valid = 0
73 ULONG CacheAttributes
:3;
77 ULONG SuperLagePage
:1;
79 ULONG PageFrameNumber
:12;
80 } HARDWARE_LARGE_PTE_ARMV6
, *PHARDWARE_LARGE_PTE_ARMV6
;
82 typedef struct _HARDWARE_PTE_ARMV6
90 ULONG CacheAttributes
:3;
94 ULONG PageFrameNumber
:20;
95 } HARDWARE_PTE_ARMV6
, *PHARDWARE_PTE_ARMV6
;
97 C_ASSERT(sizeof(HARDWARE_PDE_ARMV6
) == sizeof(ULONG
));
98 C_ASSERT(sizeof(HARDWARE_LARGE_PTE_ARMV6
) == sizeof(ULONG
));
99 C_ASSERT(sizeof(HARDWARE_PTE_ARMV6
) == sizeof(ULONG
));
101 typedef struct _MMPTE_SOFTWARE
108 ULONG PageFileHigh
:20;
111 typedef struct _MMPTE_TRANSITION
121 ULONG PageFrameNumber
:20;
124 typedef struct _MMPTE_PROTOTYPE
127 ULONG ProtoAddressLow
:7;
130 ULONG ProtoAddressHigh
:21;
133 typedef struct _MMPTE_SUBSECTION
136 ULONG SubsectionAddressLow
:4;
139 ULONG SubsectionAddressHigh
:20;
143 typedef struct _MMPTE_LIST
152 typedef union _MMPTE_HARDWARE
160 ULONG CacheAttributes
:3;
164 ULONG PageFrameNumber
:20;
165 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
167 typedef union _MMPDE_HARDWARE
176 ULONG PageFrameNumber
:22;
177 } MMPDE_HARDWARE
, *PMMPDE_HARDWARE
;
179 typedef struct _MMPDE
189 // Use the right PTE structure
191 #define HARDWARE_PTE HARDWARE_PTE_ARMV6
192 #define PHARDWARE_PTE PHARDWARE_PTE_ARMV6