https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ae0e0569d5015f31b79a59...
commit ae0e0569d5015f31b79a599a903bb9fb43b74e95 Author: Vadim Galyant vgal@rambler.ru AuthorDate: Sat Mar 28 15:45:51 2020 +0300 Commit: GitHub noreply@github.com CommitDate: Sat Mar 28 13:45:51 2020 +0100
[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. --- sdk/include/ndk/i386/mmtypes.h | 150 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 134 insertions(+), 16 deletions(-)
diff --git a/sdk/include/ndk/i386/mmtypes.h b/sdk/include/ndk/i386/mmtypes.h index 238a1cdf9bc..1b52d06de4b 100644 --- a/sdk/include/ndk/i386/mmtypes.h +++ b/sdk/include/ndk/i386/mmtypes.h @@ -65,6 +65,8 @@ C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE); // // Page Table Entry Definitions // +#if !defined(_X86PAE_) + typedef struct _HARDWARE_PTE_X86 { ULONG Valid:1; @@ -135,12 +137,14 @@ typedef struct _MMPTE_LIST ULONG NextEntry:20; } MMPTE_LIST;
-#ifndef CONFIG_SMP - typedef struct _MMPTE_HARDWARE { ULONG Valid:1; +#ifndef CONFIG_SMP ULONG Write:1; +#else + ULONG Writable:1; +#endif ULONG Owner:1; ULONG WriteThrough:1; ULONG CacheDisable:1; @@ -150,27 +154,126 @@ typedef struct _MMPTE_HARDWARE ULONG Global:1; ULONG CopyOnWrite:1; ULONG Prototype:1; +#ifndef CONFIG_SMP ULONG reserved:1; +#else + ULONG Write:1; +#endif ULONG PageFrameNumber:20; } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
#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 { - ULONG Valid:1; - ULONG Writable:1; - ULONG Owner:1; - ULONG WriteThrough:1; - ULONG CacheDisable:1; - ULONG Accessed:1; - ULONG Dirty:1; - ULONG LargePage:1; - ULONG Global:1; - ULONG CopyOnWrite:1; - ULONG Prototype:1; - ULONG Write:1; - ULONG PageFrameNumber:20; + ULONGLONG Valid:1; +#ifndef CONFIG_SMP + ULONGLONG Write:1; +#else + ULONGLONG Writable:1; +#endif + 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; +#ifndef CONFIG_SMP + ULONGLONG reserved0:1; +#else + ULONGLONG Write:1; +#endif + ULONGLONG PageFrameNumber:26; + ULONGLONG reserved1:26; } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
#endif @@ -185,7 +288,16 @@ typedef struct _MMPTE { union { - ULONG_PTR Long; +#if !defined(_X86PAE_) + ULONG Long; +#else + ULONGLONG Long; + struct + { + ULONG LowPart; + ULONG HighPart; + } HighLow; +#endif HARDWARE_PTE Flush; MMPTE_HARDWARE Hard; MMPTE_PROTOTYPE Proto; @@ -197,6 +309,12 @@ typedef struct _MMPTE } MMPTE, *PMMPTE, MMPDE, *PMMPDE;
+#if !defined(_X86PAE_) +C_ASSERT(sizeof(MMPTE) == sizeof(ULONG)); +#else +C_ASSERT(sizeof(MMPTE) == sizeof(ULONGLONG)); +#endif + #ifdef __cplusplus }; // extern "C" #endif