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 // Sanity checks for Paging Macros
45 C_ASSERT(PAGE_SIZE
== (1 << PAGE_SHIFT
));
46 C_ASSERT(MM_ALLOCATION_GRANULARITY
== (1 << MM_ALLOCATION_GRANULARITY_SHIFT
));
47 C_ASSERT(MM_ALLOCATION_GRANULARITY
&&
48 !(MM_ALLOCATION_GRANULARITY
& (MM_ALLOCATION_GRANULARITY
- 1)));
49 C_ASSERT(MM_ALLOCATION_GRANULARITY
>= PAGE_SIZE
);
53 // Page Table Entry Definitions
55 typedef struct _HARDWARE_PDE_ARMV6
57 ULONG Valid
:1; // Only for small pages
58 ULONG LargePage
:1; // Note, if large then Valid = 0
64 ULONG PageFrameNumber
:22;
65 } HARDWARE_PDE_ARMV6
, *PHARDWARE_PDE_ARMV6
;
67 typedef struct _HARDWARE_LARGE_PTE_ARMV6
69 ULONG Valid
:1; // Only for small pages
70 ULONG LargePage
:1; // Note, if large then Valid = 0
78 ULONG CacheAttributes
:3;
82 ULONG SuperLagePage
:1;
84 ULONG PageFrameNumber
:12;
85 } HARDWARE_LARGE_PTE_ARMV6
, *PHARDWARE_LARGE_PTE_ARMV6
;
87 typedef struct _HARDWARE_PTE_ARMV6
95 ULONG CacheAttributes
:3;
99 ULONG PageFrameNumber
:20;
100 } HARDWARE_PTE_ARMV6
, *PHARDWARE_PTE_ARMV6
;
102 C_ASSERT(sizeof(HARDWARE_PDE_ARMV6
) == sizeof(ULONG
));
103 C_ASSERT(sizeof(HARDWARE_LARGE_PTE_ARMV6
) == sizeof(ULONG
));
104 C_ASSERT(sizeof(HARDWARE_PTE_ARMV6
) == sizeof(ULONG
));
106 typedef struct _MMPTE_SOFTWARE
113 ULONG PageFileHigh
:20;
116 typedef struct _MMPTE_TRANSITION
126 ULONG PageFrameNumber
:20;
129 typedef struct _MMPTE_PROTOTYPE
132 ULONG ProtoAddressLow
:7;
135 ULONG ProtoAddressHigh
:21;
138 typedef struct _MMPTE_SUBSECTION
141 ULONG SubsectionAddressLow
:4;
144 ULONG SubsectionAddressHigh
:20;
148 typedef struct _MMPTE_LIST
157 typedef union _MMPTE_HARDWARE
165 ULONG CacheAttributes
:3;
169 ULONG PageFrameNumber
:20;
170 } MMPTE_HARDWARE
, *PMMPTE_HARDWARE
;
172 typedef union _MMPDE_HARDWARE
181 ULONG PageFrameNumber
:22;
182 } MMPDE_HARDWARE
, *PMMPDE_HARDWARE
;
184 typedef struct _MMPDE
194 // Use the right PTE structure
196 #define HARDWARE_PTE HARDWARE_PTE_ARMV6
197 #define PHARDWARE_PTE PHARDWARE_PTE_ARMV6