mirror of
https://github.com/reactos/reactos.git
synced 2024-08-21 19:03:01 +00:00
234 lines
4.8 KiB
C
234 lines
4.8 KiB
C
/*++ NDK Version: 0095
|
|
|
|
Copyright (c) Alex Ionescu. All rights reserved.
|
|
|
|
Header Name:
|
|
|
|
mmtypes.h (AMD64)
|
|
|
|
Abstract:
|
|
|
|
AMD64 Type definitions for the Memory Manager
|
|
|
|
Author:
|
|
|
|
Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
|
|
Timo Kreuzer (timo.kreuzer@reactos.com) 15-Aug-2008
|
|
|
|
--*/
|
|
|
|
#ifndef _AMD64_MMTYPES_H
|
|
#define _AMD64_MMTYPES_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//
|
|
// Dependencies
|
|
//
|
|
|
|
//
|
|
// Page-related Macros
|
|
//
|
|
#define PAGE_SIZE 0x1000
|
|
#define PAGE_SHIFT 12L
|
|
#define MM_ALLOCATION_GRANULARITY 0x10000
|
|
#define MM_ALLOCATION_GRANULARITY_SHIFT 16L
|
|
#define MM_PAGE_FRAME_NUMBER_SIZE 52
|
|
|
|
//
|
|
// User space range limit
|
|
//
|
|
#define MI_HIGHEST_USER_ADDRESS (PVOID)0x000007FFFFFEFFFFULL
|
|
|
|
//
|
|
// Address of the shared user page
|
|
//
|
|
#define MM_SHARED_USER_DATA_VA 0x7FFE0000ULL
|
|
|
|
//
|
|
// Sanity checks for Paging Macros
|
|
//
|
|
#ifdef C_ASSERT
|
|
C_ASSERT(PAGE_SIZE == (1 << PAGE_SHIFT));
|
|
C_ASSERT(MM_ALLOCATION_GRANULARITY == (1 << MM_ALLOCATION_GRANULARITY_SHIFT));
|
|
C_ASSERT(MM_ALLOCATION_GRANULARITY &&
|
|
!(MM_ALLOCATION_GRANULARITY & (MM_ALLOCATION_GRANULARITY - 1)));
|
|
C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE);
|
|
#endif
|
|
|
|
//
|
|
// Page Table Entry Definitions
|
|
//
|
|
typedef struct _HARDWARE_PTE
|
|
{
|
|
ULONG64 Valid:1;
|
|
ULONG64 Write:1;
|
|
ULONG64 Owner:1;
|
|
ULONG64 WriteThrough:1;
|
|
ULONG64 CacheDisable:1;
|
|
ULONG64 Accessed:1;
|
|
ULONG64 Dirty:1;
|
|
ULONG64 LargePage:1;
|
|
ULONG64 Global:1;
|
|
ULONG64 CopyOnWrite:1;
|
|
ULONG64 Prototype:1;
|
|
ULONG64 reserved0:1;
|
|
ULONG64 PageFrameNumber:28;
|
|
ULONG64 reserved1:12;
|
|
ULONG64 SoftwareWsIndex:11;
|
|
ULONG64 NoExecute:1;
|
|
} HARDWARE_PTE, *PHARDWARE_PTE;
|
|
|
|
typedef struct _MMPTE_SOFTWARE
|
|
{
|
|
ULONG64 Valid:1;
|
|
ULONG64 PageFileLow:4;
|
|
ULONG64 Protection:5;
|
|
ULONG64 Prototype:1;
|
|
ULONG64 Transition:1;
|
|
ULONG64 UsedPageTableEntries:10;
|
|
ULONG64 Reserved:10;
|
|
ULONG64 PageFileHigh:32;
|
|
} MMPTE_SOFTWARE, *PMMPTE_SOFTWARE;
|
|
|
|
typedef struct _MMPTE_TRANSITION
|
|
{
|
|
ULONG64 Valid:1;
|
|
ULONG64 Write:1;
|
|
ULONG64 Owner:1;
|
|
ULONG64 WriteThrough:1;
|
|
ULONG64 CacheDisable:1;
|
|
ULONG64 Protection:5;
|
|
ULONG64 Prototype:1;
|
|
ULONG64 Transition:1;
|
|
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
|
ULONG64 PageFrameNumber:36;
|
|
ULONG64 Unused:16;
|
|
#else
|
|
ULONG64 PageFrameNumber:28;
|
|
ULONG64 Unused:24;
|
|
#endif
|
|
} MMPTE_TRANSITION;
|
|
|
|
typedef struct _MMPTE_PROTOTYPE
|
|
{
|
|
ULONG64 Valid:1;
|
|
ULONG64 Unused0:7;
|
|
ULONG64 ReadOnly:1;
|
|
ULONG64 Unused1:1;
|
|
ULONG64 Prototype:1;
|
|
ULONG64 Protection:5;
|
|
LONG64 ProtoAddress:48;
|
|
} MMPTE_PROTOTYPE;
|
|
|
|
typedef struct _MMPTE_SUBSECTION
|
|
{
|
|
ULONG64 Valid:1;
|
|
ULONG64 Unused0:4;
|
|
ULONG64 Protection:5;
|
|
ULONG64 Prototype:1;
|
|
ULONG64 Unused1:5;
|
|
LONG64 SubsectionAddress:48;
|
|
} MMPTE_SUBSECTION;
|
|
|
|
typedef struct _MMPTE_LIST
|
|
{
|
|
ULONG64 Valid:1;
|
|
ULONG64 OneEntry:1;
|
|
ULONG64 filler0:3;
|
|
ULONG64 Protection:5;
|
|
ULONG64 Prototype:1;
|
|
ULONG64 Transition:1;
|
|
ULONG64 filler1:20;
|
|
ULONG64 NextEntry:32;
|
|
} MMPTE_LIST;
|
|
|
|
typedef struct _MMPTE_HARDWARE
|
|
{
|
|
ULONG64 Valid:1;
|
|
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
|
ULONG64 Dirty1:1;
|
|
#else
|
|
#ifdef CONFIG_SMP
|
|
ULONG64 Writable:1;
|
|
#else
|
|
ULONG64 Write:1;
|
|
#endif
|
|
#endif
|
|
ULONG64 Owner:1;
|
|
ULONG64 WriteThrough:1;
|
|
ULONG64 CacheDisable:1;
|
|
ULONG64 Accessed:1;
|
|
ULONG64 Dirty:1;
|
|
ULONG64 LargePage:1;
|
|
ULONG64 Global:1;
|
|
ULONG64 CopyOnWrite:1;
|
|
ULONG64 Prototype:1;
|
|
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
|
ULONG64 Write:1;
|
|
ULONG64 PageFrameNumber:36;
|
|
ULONG64 reserved1:4;
|
|
#else
|
|
#ifdef CONFIG_SMP
|
|
ULONG64 Write:1;
|
|
#else
|
|
ULONG64 reserved0:1;
|
|
#endif
|
|
ULONG64 PageFrameNumber:28;
|
|
ULONG64 reserved1:12;
|
|
#endif
|
|
ULONG64 SoftwareWsIndex:11;
|
|
ULONG64 NoExecute:1;
|
|
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
|
|
|
typedef struct _MMPTE_HARDWARE_LARGEPAGE
|
|
{
|
|
ULONG64 Valid:1;
|
|
ULONG64 Write:1;
|
|
ULONG64 Owner:1;
|
|
ULONG64 WriteThrough:1;
|
|
ULONG64 CacheDisable:1;
|
|
ULONG64 Accessed:1;
|
|
ULONG64 Dirty:1;
|
|
ULONG64 LargePage:1;
|
|
ULONG64 Global:1;
|
|
ULONG64 CopyOnWrite:1;
|
|
ULONG64 Prototype:1;
|
|
ULONG64 reserved0:1;
|
|
ULONG64 PAT:1;
|
|
ULONG64 reserved1:8;
|
|
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
|
ULONG64 PageFrameNumber:27;
|
|
ULONG64 reserved2:16;
|
|
#else
|
|
ULONG64 PageFrameNumber:19;
|
|
ULONG64 reserved2:24;
|
|
#endif
|
|
} MMPTE_HARDWARE_LARGEPAGE, *PMMPTE_HARDWARE_LARGEPAGE;
|
|
|
|
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,
|
|
MMPDE, *PMMPDE,
|
|
MMPPE, *PMMPPE,
|
|
MMPXE, *PMMPXE;
|
|
|
|
#ifdef __cplusplus
|
|
}; // extern "C"
|
|
#endif
|
|
|
|
#endif // !AMD64_MMTYPES_H
|