reactos/sdk/include/ndk/arm64/mmtypes.h
Justin Miller 4363e74ddc
[REACTOS] Finally get some ARM64 applications building (#4517)
- Add some missing ARM64 exports to ntdll, kernel32 and user32
- Create mmtypes header file based on WoA debug symbols
- Get the remaining headers in order, so we can build ARM64 apps
- Adjust subsystem version for binaries so they can run on WoA host
- Get calc, notepad and more base apps to build for ARM64 platform

CORE-17518

Reviewed-by: Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Reviewed-by: Stanislav Motylkov <x86corez@gmail.com>
2022-05-25 17:06:32 +03:00

152 lines
3.2 KiB
C

#ifndef _ARM64_MMTYPES_H
#define _ARM64_MMTYPES_H
#ifdef __cplusplus
extern "C" {
#endif
//
// Page-related Macros
//
#ifndef PAGE_SIZE
#define PAGE_SIZE 0x1000
#endif
#define PAGE_SHIFT 12L
#define MM_ALLOCATION_GRANULARITY 0x10000
#define MM_ALLOCATION_GRANULARITY_SHIFT 16L
#define MM_PAGE_FRAME_NUMBER_SIZE 20
/* Following structs are based on WoA symbols */
typedef struct _HARDWARE_PTE
{
/* 8 Byte struct */
ULONG64 Valid:1;
ULONG64 NotLargePage:1;
ULONG64 CacheType:2;
ULONG64 OsAvailable2:1;
ULONG64 NonSecure:1;
ULONG64 Owner:1;
ULONG64 NotDirty:1;
ULONG64 Shareability:2;
ULONG64 Accessed:1;
ULONG64 NonGlobal:1;
ULONG64 PageFrameNumber:36;
ULONG64 RsvdZ1:4;
ULONG64 ContigousBit:1;
ULONG64 PrivilegedNoExecute:1;
ULONG64 UserNoExecute:1;
ULONG64 Writable:1;
ULONG64 CopyOnWrite:1;
ULONG64 OsAvailable:2;
ULONG64 PxnTable:1;
ULONG64 UxnTable:1;
ULONG64 ApTable:2;
ULONG64 NsTable:1;
} HARDWARE_PTE, *PHARDWARE_PTE;
typedef struct _MMPTE_SOFTWARE
{
/* 8 Byte struct */
ULONG64 Valid:1;
ULONG64 Protection:5;
ULONG64 PageFileLow:4;
ULONG64 Prototype:1;
ULONG64 Transition:1;
ULONG64 PageFileReserved:1;
ULONG64 PageFileAllocated:1;
ULONG64 UsedPageTableEntries:10;
ULONG64 ColdPage:1;
ULONG64 OnStandbyLookaside:1;
ULONG64 RsvdZ1:6;
ULONG64 PageFileHigh:32;
} MMPTE_SOFTWARE;
typedef struct _MMPTE_TRANSITION
{
/* 8 Byte struct */
ULONG64 Valid:1;
ULONG64 Protection:5;
ULONG64 Spare:2;
ULONG64 OnStandbyLookaside:1;
ULONG64 IoTracker:1;
ULONG64 Prototype:1;
ULONG64 Transition:1;
ULONG64 PageFrameNumber:40;
ULONG64 RsvdZ1:12;
} MMPTE_TRANSITION;
typedef struct _MMPTE_PROTOTYPE
{
/* 8 Byte struct */
ULONG64 Valid:1;
ULONG64 Protection:5;
ULONG64 HiberVerifyConverted:1;
ULONG64 Unused1:1;
ULONG64 ReadOnly:1;
ULONG64 Combined:1;
ULONG64 Prototype:1;
ULONG64 DemandFillProto:1;
ULONG64 RsvdZ1:4;
ULONG64 ProtoAddress:48;
} MMPTE_PROTOTYPE;
typedef struct _MMPTE_SUBSECTION
{
/* 8 Byte struct */
ULONG64 Valid:1;
ULONG64 Protection:5;
ULONG64 OnStandbyLookaside:1;
ULONG64 RsvdZ1:3;
ULONG64 Prototype:1;
ULONG64 ColdPage:1;
ULONG64 RsvdZ2:4;
ULONG64 SubsectionAddress:48;
} MMPTE_SUBSECTION;
typedef struct _MMPTE_TIMESTAMP
{
/* 8 Byte struct */
ULONG64 MustBeZero:1;
ULONG64 Protection:5;
ULONG64 PageFileLow:4;
ULONG64 Prototype:1;
ULONG64 Transition:1;
ULONG64 RsvdZ1:20;
ULONG64 GlobalTimeStamp:32;
} MMPTE_TIMESTAMP;
typedef struct _MMPTE_LIST
{
/* 8 Byte struct */
ULONG64 Valid:1;
ULONG64 Protection:5;
ULONG64 OneEntry:1;
ULONG64 RsvdZ1:3;
ULONG64 Prototype:1;
ULONG64 Transition:1;
ULONG64 RsvdZ2:16;
ULONG64 NextEntry:36;
} MMPTE_LIST;
typedef struct _MMPTE
{
union
{
ULONG_PTR Long;
HARDWARE_PTE Flush;
HARDWARE_PTE Hard;
MMPTE_PROTOTYPE Proto;
MMPTE_SOFTWARE Soft;
MMPTE_TRANSITION Trans;
MMPTE_SUBSECTION Subsect;
MMPTE_LIST List;
} u;
} MMPTE, *PMMPTE;
#ifdef __cplusplus
}; // extern "C"
#endif
#endif