mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 18:25:58 +00:00
[SDK][NDK] MMPTE for PAE (#2453)
This not only makes PAE possible, but also allows to make the definitions and macros in the memory manager header files more human-readable. CORE-16702 * [SDK][NDK] Make the _MMPTE_HARDWARE structure more compact and more human-readable. * [SDK][NDK] Add definitions a struct _MMPTE for PAE mode.
This commit is contained in:
parent
660383b855
commit
ae0e0569d5
1 changed files with 134 additions and 16 deletions
|
@ -65,6 +65,8 @@ C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE);
|
||||||
//
|
//
|
||||||
// Page Table Entry Definitions
|
// Page Table Entry Definitions
|
||||||
//
|
//
|
||||||
|
#if !defined(_X86PAE_)
|
||||||
|
|
||||||
typedef struct _HARDWARE_PTE_X86
|
typedef struct _HARDWARE_PTE_X86
|
||||||
{
|
{
|
||||||
ULONG Valid:1;
|
ULONG Valid:1;
|
||||||
|
@ -135,12 +137,14 @@ typedef struct _MMPTE_LIST
|
||||||
ULONG NextEntry:20;
|
ULONG NextEntry:20;
|
||||||
} MMPTE_LIST;
|
} MMPTE_LIST;
|
||||||
|
|
||||||
#ifndef CONFIG_SMP
|
|
||||||
|
|
||||||
typedef struct _MMPTE_HARDWARE
|
typedef struct _MMPTE_HARDWARE
|
||||||
{
|
{
|
||||||
ULONG Valid:1;
|
ULONG Valid:1;
|
||||||
|
#ifndef CONFIG_SMP
|
||||||
ULONG Write:1;
|
ULONG Write:1;
|
||||||
|
#else
|
||||||
|
ULONG Writable:1;
|
||||||
|
#endif
|
||||||
ULONG Owner:1;
|
ULONG Owner:1;
|
||||||
ULONG WriteThrough:1;
|
ULONG WriteThrough:1;
|
||||||
ULONG CacheDisable:1;
|
ULONG CacheDisable:1;
|
||||||
|
@ -150,27 +154,126 @@ typedef struct _MMPTE_HARDWARE
|
||||||
ULONG Global:1;
|
ULONG Global:1;
|
||||||
ULONG CopyOnWrite:1;
|
ULONG CopyOnWrite:1;
|
||||||
ULONG Prototype:1;
|
ULONG Prototype:1;
|
||||||
|
#ifndef CONFIG_SMP
|
||||||
ULONG reserved:1;
|
ULONG reserved:1;
|
||||||
|
#else
|
||||||
|
ULONG Write:1;
|
||||||
|
#endif
|
||||||
ULONG PageFrameNumber:20;
|
ULONG PageFrameNumber:20;
|
||||||
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
typedef struct _HARDWARE_PTE_X86
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
ULONGLONG Valid:1;
|
||||||
|
ULONGLONG Write:1;
|
||||||
|
ULONGLONG Owner:1;
|
||||||
|
ULONGLONG WriteThrough:1;
|
||||||
|
ULONGLONG CacheDisable:1;
|
||||||
|
ULONGLONG Accessed:1;
|
||||||
|
ULONGLONG Dirty:1;
|
||||||
|
ULONGLONG LargePage:1;
|
||||||
|
ULONGLONG Global:1;
|
||||||
|
ULONGLONG CopyOnWrite:1;
|
||||||
|
ULONGLONG Prototype:1;
|
||||||
|
ULONGLONG reserved0:1;
|
||||||
|
ULONGLONG PageFrameNumber:26;
|
||||||
|
ULONGLONG reserved1:26;
|
||||||
|
};
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
ULONG LowPart;
|
||||||
|
ULONG HighPart;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
|
||||||
|
|
||||||
|
typedef struct _MMPTE_SOFTWARE
|
||||||
|
{
|
||||||
|
ULONGLONG Valid:1;
|
||||||
|
ULONGLONG PageFileLow:4;
|
||||||
|
ULONGLONG Protection:5;
|
||||||
|
ULONGLONG Prototype:1;
|
||||||
|
ULONGLONG Transition:1;
|
||||||
|
ULONGLONG Unused:20;
|
||||||
|
ULONGLONG PageFileHigh:32;
|
||||||
|
} MMPTE_SOFTWARE;
|
||||||
|
|
||||||
|
typedef struct _MMPTE_TRANSITION
|
||||||
|
{
|
||||||
|
ULONGLONG Valid:1;
|
||||||
|
ULONGLONG Write:1;
|
||||||
|
ULONGLONG Owner:1;
|
||||||
|
ULONGLONG WriteThrough:1;
|
||||||
|
ULONGLONG CacheDisable:1;
|
||||||
|
ULONGLONG Protection:5;
|
||||||
|
ULONGLONG Prototype:1;
|
||||||
|
ULONGLONG Transition:1;
|
||||||
|
ULONGLONG PageFrameNumber:26;
|
||||||
|
ULONGLONG Unused:26;
|
||||||
|
} MMPTE_TRANSITION;
|
||||||
|
|
||||||
|
typedef struct _MMPTE_PROTOTYPE
|
||||||
|
{
|
||||||
|
ULONGLONG Valid:1;
|
||||||
|
ULONGLONG Unused0:7;
|
||||||
|
ULONGLONG ReadOnly:1;
|
||||||
|
ULONGLONG Unused1:1;
|
||||||
|
ULONGLONG Prototype:1;
|
||||||
|
ULONGLONG Protection:5;
|
||||||
|
ULONGLONG Unused:16;
|
||||||
|
ULONGLONG ProtoAddress:32;
|
||||||
|
} MMPTE_PROTOTYPE;
|
||||||
|
|
||||||
|
typedef struct _MMPTE_SUBSECTION
|
||||||
|
{
|
||||||
|
ULONGLONG Valid:1;
|
||||||
|
ULONGLONG Unused0:4;
|
||||||
|
ULONGLONG Protection:5;
|
||||||
|
ULONGLONG Prototype:1;
|
||||||
|
ULONGLONG Unused1:21;
|
||||||
|
ULONGLONG SubsectionAddress:32;
|
||||||
|
} MMPTE_SUBSECTION;
|
||||||
|
|
||||||
|
typedef struct _MMPTE_LIST
|
||||||
|
{
|
||||||
|
ULONGLONG Valid:1;
|
||||||
|
ULONGLONG OneEntry:1;
|
||||||
|
ULONGLONG filler0:8;
|
||||||
|
ULONGLONG Prototype:1;
|
||||||
|
ULONGLONG filler1:21;
|
||||||
|
ULONGLONG NextEntry:32;
|
||||||
|
} MMPTE_LIST;
|
||||||
|
|
||||||
typedef struct _MMPTE_HARDWARE
|
typedef struct _MMPTE_HARDWARE
|
||||||
{
|
{
|
||||||
ULONG Valid:1;
|
ULONGLONG Valid:1;
|
||||||
ULONG Writable:1;
|
#ifndef CONFIG_SMP
|
||||||
ULONG Owner:1;
|
ULONGLONG Write:1;
|
||||||
ULONG WriteThrough:1;
|
#else
|
||||||
ULONG CacheDisable:1;
|
ULONGLONG Writable:1;
|
||||||
ULONG Accessed:1;
|
#endif
|
||||||
ULONG Dirty:1;
|
ULONGLONG Owner:1;
|
||||||
ULONG LargePage:1;
|
ULONGLONG WriteThrough:1;
|
||||||
ULONG Global:1;
|
ULONGLONG CacheDisable:1;
|
||||||
ULONG CopyOnWrite:1;
|
ULONGLONG Accessed:1;
|
||||||
ULONG Prototype:1;
|
ULONGLONG Dirty:1;
|
||||||
ULONG Write:1;
|
ULONGLONG LargePage:1;
|
||||||
ULONG PageFrameNumber:20;
|
ULONGLONG Global:1;
|
||||||
|
ULONGLONG CopyOnWrite:1;
|
||||||
|
ULONGLONG Prototype:1;
|
||||||
|
#ifndef CONFIG_SMP
|
||||||
|
ULONGLONG reserved0:1;
|
||||||
|
#else
|
||||||
|
ULONGLONG Write:1;
|
||||||
|
#endif
|
||||||
|
ULONGLONG PageFrameNumber:26;
|
||||||
|
ULONGLONG reserved1:26;
|
||||||
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -185,7 +288,16 @@ typedef struct _MMPTE
|
||||||
{
|
{
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
ULONG_PTR Long;
|
#if !defined(_X86PAE_)
|
||||||
|
ULONG Long;
|
||||||
|
#else
|
||||||
|
ULONGLONG Long;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
ULONG LowPart;
|
||||||
|
ULONG HighPart;
|
||||||
|
} HighLow;
|
||||||
|
#endif
|
||||||
HARDWARE_PTE Flush;
|
HARDWARE_PTE Flush;
|
||||||
MMPTE_HARDWARE Hard;
|
MMPTE_HARDWARE Hard;
|
||||||
MMPTE_PROTOTYPE Proto;
|
MMPTE_PROTOTYPE Proto;
|
||||||
|
@ -197,6 +309,12 @@ typedef struct _MMPTE
|
||||||
} MMPTE, *PMMPTE,
|
} MMPTE, *PMMPTE,
|
||||||
MMPDE, *PMMPDE;
|
MMPDE, *PMMPDE;
|
||||||
|
|
||||||
|
#if !defined(_X86PAE_)
|
||||||
|
C_ASSERT(sizeof(MMPTE) == sizeof(ULONG));
|
||||||
|
#else
|
||||||
|
C_ASSERT(sizeof(MMPTE) == sizeof(ULONGLONG));
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}; // extern "C"
|
}; // extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue