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
116 ULONG WriteThrough
:1;
117 ULONG CacheDisable
:1;
121 ULONG PageFrameNumber
:20;
124 typedef struct _MMPTE_PROTOTYPE
127 ULONG ProtoAddressLow
:7;
131 ULONG ProtoAddressHigh
:21;
134 typedef struct _MMPTE_SUBSECTION
137 ULONG SubsectionAddressLow
:4;
140 ULONG SubsectionAddressHigh
:20;
144 typedef struct _MMPTE_LIST
154 typedef union _MMPTE_HARDWARE
164 ULONG CacheAttributes
:3;
168 ULONG PageFrameNumber
:20;
171 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
173 typedef union _MMPDE_HARDWARE
184 ULONG PageFrameNumber
:22;
187 } MMPDE_HARDWARE
, *PMMPDE_HARDWARE
;
189 typedef struct _MMPDE
199 // Use the right PTE structure
201 #define HARDWARE_PTE HARDWARE_PTE_ARMV6
202 #define PHARDWARE_PTE PHARDWARE_PTE_ARMV6