#ifndef _ARM_MMTYPES_H
#define _ARM_MMTYPES_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
//
// Dependencies
//
#define PAGE_SHIFT 12L
#define MM_ALLOCATION_GRANULARITY 0x10000
#define MM_ALLOCATION_GRANULARITY_SHIFT 16L
+#define MM_PAGE_FRAME_NUMBER_SIZE 20
+
+//
+// User space range limit
+//
+#define MI_HIGHEST_USER_ADDRESS (PVOID)0x7FFEFFFF
+
+//
+// Address of the shared user page
+//
+#define MM_SHARED_USER_DATA_VA 0x7FFE0000
//
// Sanity checks for Paging Macros
ULONG NoExecute:1;
ULONG Domain:4;
ULONG Ecc:1;
- ULONG Sbo:1;
+ ULONG Sbo:1; // ULONG Accessed:1;?
ULONG Owner:1;
ULONG CacheAttributes:3;
ULONG ReadOnly:1;
ULONG Valid:1;
ULONG Buffered:1;
ULONG Cached:1;
- ULONG Sbo:1;
+ ULONG Sbo:1; // ULONG Accessed:1;?
ULONG Owner:1;
ULONG CacheAttributes:3;
ULONG ReadOnly:1;
ULONG Prototype:1;
} MMPTE_LIST;
-typedef union _MMPTE_HARDWARE
+typedef struct _MMPTE_HARDWARE
{
ULONG NoExecute:1;
ULONG Valid:1;
ULONG PageFrameNumber:20;
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
+
+//
+// Use the right PTE structure
+//
+#define HARDWARE_PTE HARDWARE_PTE_ARMV6
+#define PHARDWARE_PTE PHARDWARE_PTE_ARMV6
+
+typedef struct _MMPTE
+{
+ union
+ {
+ ULONG_PTR Long;
+ HARDWARE_PTE Flush;
+ MMPTE_HARDWARE Hard;
+ MMPTE_PROTOTYPE Proto;
+ MMPTE_SOFTWARE Soft;
+ MMPTE_TRANSITION Trans;
+ MMPTE_SUBSECTION Subsect;
+ MMPTE_LIST List;
+ } u;
+} MMPTE, *PMMPTE;
+
typedef union _MMPDE_HARDWARE
{
ULONG Valid:1;
typedef struct _MMPDE
{
- union
+ union
{
MMPDE_HARDWARE Hard;
ULONG Long;
} u;
} MMPDE, *PMMPDE;
-//
-// Use the right PTE structure
-//
-#define HARDWARE_PTE HARDWARE_PTE_ARMV6
-#define PHARDWARE_PTE PHARDWARE_PTE_ARMV6
+#ifdef __cplusplus
+}; // extern "C"
+#endif
#endif