[NTOS]: Enable usage of ARM3 paged pool, up until Mm Phase 2.
[reactos.git] / reactos / ntoskrnl / include / internal / mm.h
index 6ec9315..d8c6178 100644 (file)
@@ -6,22 +6,21 @@
 
 struct _EPROCESS;
 
-extern PFN_NUMBER MiFreeSwapPages;
-extern PFN_NUMBER MiUsedSwapPages;
-extern SIZE_T MmPagedPoolSize;
-extern SIZE_T MmTotalPagedPoolQuota;
-extern SIZE_T MmTotalNonPagedPoolQuota;
+extern ULONG MiFreeSwapPages;
+extern ULONG MiUsedSwapPages;
+extern ULONG MmPagedPoolSize;
+extern ULONG MmTotalPagedPoolQuota;
+extern ULONG MmTotalNonPagedPoolQuota;
 extern PHYSICAL_ADDRESS MmSharedDataPagePhysicalAddress;
-extern PFN_NUMBER MmNumberOfPhysicalPages;
+extern ULONG MmNumberOfPhysicalPages;
 extern UCHAR MmDisablePagingExecutive;
-extern PFN_NUMBER MmLowestPhysicalPage;
-extern PFN_NUMBER MmHighestPhysicalPage;
-extern PFN_NUMBER MmAvailablePages;
-extern PFN_NUMBER MmResidentAvailablePages;
-extern ULONG_PTR MmNumberOfSystemPtes;
+extern ULONG MmLowestPhysicalPage;
+extern ULONG MmHighestPhysicalPage;
+extern ULONG MmAvailablePages;
+extern ULONG MmResidentAvailablePages;
 
 extern PVOID MmPagedPoolBase;
-extern SIZE_T MmPagedPoolSize;
+extern ULONG MmPagedPoolSize;
 
 extern PMEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptor;
 extern MEMORY_ALLOCATION_DESCRIPTOR MiFreeDescriptorOrg;
@@ -47,14 +46,14 @@ extern SIZE_T MmPagedPoolCommit;
 extern SIZE_T MmPeakCommitment;
 extern SIZE_T MmtotalCommitLimitMaximum;
 
-extern PVOID MiDebugMapping;
-extern PMMPTE MmDebugPte;
+extern BOOLEAN MiDbgReadyForPhysical;
 
 struct _KTRAP_FRAME;
 struct _EPROCESS;
 struct _MM_RMAP_ENTRY;
 struct _MM_PAGEOP;
 typedef ULONG SWAPENTRY;
+typedef ULONG PFN_TYPE, *PPFN_TYPE;
 
 //
 // MmDbgCopyMemory Flags
@@ -203,7 +202,6 @@ typedef ULONG SWAPENTRY;
     (PAGE_WRITECOPY | \
     PAGE_EXECUTE_WRITECOPY)
 
-#define MI_PFN_ELEMENT(Pfn) (&MmPfnDatabase[Pfn])
 
 #define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \
     InterlockedCompareExchange((PLONG)(PointerPte), Exchange, Comperand)
@@ -346,9 +344,6 @@ typedef struct _MMPFN
             USHORT ShortFlags;
         } e2;
     } u3;
-#ifdef _WIN64
-    ULONG UsedPageTableEntries;
-#endif
     union
     {
         MMPTE OriginalPte;
@@ -359,7 +354,7 @@ typedef struct _MMPFN
         ULONG_PTR EntireFrame;               // SavedSwapEntry
         struct
         {
-            ULONG_PTR PteFrame: 8*sizeof(PVOID)-7;
+            ULONG_PTR PteFrame:25;
             ULONG_PTR InPageError:1;
             ULONG_PTR VerifierAllocation:1;
             ULONG_PTR AweAllocation:1;
@@ -369,7 +364,7 @@ typedef struct _MMPFN
     } u4;
 } MMPFN, *PMMPFN;
 
-extern PMMPFN MmPfnDatabase[2];
+extern PMMPFN MmPfnDatabase;
 
 typedef struct _MMPFNLIST
 {
@@ -471,7 +466,7 @@ typedef VOID
     PVOID Context,
     PMEMORY_AREA MemoryArea,
     PVOID Address,
-    PFN_NUMBER Page,
+    PFN_TYPE Page,
     SWAPENTRY SwapEntry,
     BOOLEAN Dirty
 );
@@ -693,7 +688,7 @@ VOID
 NTAPI
 MmBuildMdlFromPages(
     PMDL Mdl,
-    PPFN_NUMBER Pages
+    PULONG Pages
 );
 
 /* mminit.c ******************************************************************/
@@ -743,7 +738,7 @@ NTSTATUS
 NTAPI
 MmReadFromSwapPage(
     SWAPENTRY SwapEntry,
-    PFN_NUMBER Page
+    PFN_TYPE Page
 );
 
 BOOLEAN
@@ -754,7 +749,7 @@ NTSTATUS
 NTAPI
 MmWriteToSwapPage(
     SWAPENTRY SwapEntry,
-    PFN_NUMBER Page
+    PFN_TYPE Page
 );
 
 NTSTATUS
@@ -880,7 +875,7 @@ MmQueryAnonMem(
     PMEMORY_AREA MemoryArea,
     PVOID Address,
     PMEMORY_BASIC_INFORMATION Info,
-    PSIZE_T ResultLength
+    PULONG ResultLength
 );
 
 VOID
@@ -922,18 +917,18 @@ ExUnmapPage(PVOID Addr);
 
 PVOID
 NTAPI
-ExAllocatePageWithPhysPage(PFN_NUMBER Page);
+ExAllocatePageWithPhysPage(PFN_TYPE Page);
 
 NTSTATUS
 NTAPI
 MiCopyFromUserPage(
-    PFN_NUMBER Page,
+    PFN_TYPE Page,
     PVOID SourceAddress
 );
 
 NTSTATUS
 NTAPI
-MiZeroPage(PFN_NUMBER Page);
+MiZeroPage(PFN_TYPE Page);
 
 /* memsafe.s *****************************************************************/
 
@@ -1004,7 +999,7 @@ NTSTATUS
 NTAPI
 MmReleasePageMemoryConsumer(
     ULONG Consumer,
-    PFN_NUMBER Page
+    PFN_TYPE Page
 );
 
 NTSTATUS
@@ -1012,7 +1007,7 @@ NTAPI
 MmRequestPageMemoryConsumer(
     ULONG Consumer,
     BOOLEAN MyWait,
-    PPFN_NUMBER AllocatedPage
+    PPFN_TYPE AllocatedPage
 );
 
 VOID
@@ -1028,18 +1023,18 @@ MmRebalanceMemoryConsumers(VOID);
 VOID
 NTAPI
 MmSetRmapListHeadPage(
-    PFN_NUMBER Page,
+    PFN_TYPE Page,
     struct _MM_RMAP_ENTRY* ListHead
 );
 
 struct _MM_RMAP_ENTRY*
 NTAPI
-MmGetRmapListHeadPage(PFN_NUMBER Page);
+MmGetRmapListHeadPage(PFN_TYPE Page);
 
 VOID
 NTAPI
 MmInsertRmap(
-    PFN_NUMBER Page,
+    PFN_TYPE Page,
     struct _EPROCESS *Process,
     PVOID Address
 );
@@ -1047,7 +1042,7 @@ MmInsertRmap(
 VOID
 NTAPI
 MmDeleteAllRmaps(
-    PFN_NUMBER Page,
+    PFN_TYPE Page,
     PVOID Context,
     VOID (*DeleteMapping)(PVOID Context, struct _EPROCESS *Process, PVOID Address)
 );
@@ -1055,7 +1050,7 @@ MmDeleteAllRmaps(
 VOID
 NTAPI
 MmDeleteRmap(
-    PFN_NUMBER Page,
+    PFN_TYPE Page,
     struct _EPROCESS *Process,
     PVOID Address
 );
@@ -1066,29 +1061,29 @@ MmInitializeRmapList(VOID);
 
 VOID
 NTAPI
-MmSetCleanAllRmaps(PFN_NUMBER Page);
+MmSetCleanAllRmaps(PFN_TYPE Page);
 
 VOID
 NTAPI
-MmSetDirtyAllRmaps(PFN_NUMBER Page);
+MmSetDirtyAllRmaps(PFN_TYPE Page);
 
 BOOLEAN
 NTAPI
-MmIsDirtyPageRmap(PFN_NUMBER Page);
+MmIsDirtyPageRmap(PFN_TYPE Page);
 
 NTSTATUS
 NTAPI
-MmWritePagePhysicalAddress(PFN_NUMBER Page);
+MmWritePagePhysicalAddress(PFN_TYPE Page);
 
 NTSTATUS
 NTAPI
-MmPageOutPhysicalAddress(PFN_NUMBER Page);
+MmPageOutPhysicalAddress(PFN_TYPE Page);
 
 /* freelist.c **********************************************************/
 
 FORCEINLINE
 PMMPFN
-MiGetPfnEntry(IN PFN_NUMBER Pfn)
+MiGetPfnEntry(IN PFN_TYPE Pfn)
 {
     PMMPFN Page;
     extern RTL_BITMAP MiPfnBitMap;
@@ -1100,7 +1095,7 @@ MiGetPfnEntry(IN PFN_NUMBER Pfn)
     if ((MiPfnBitMap.Buffer) && !(RtlTestBit(&MiPfnBitMap, Pfn))) return NULL;
 
     /* Get the entry */
-    Page = &MmPfnDatabase[0][Pfn];
+    Page = &MmPfnDatabase[Pfn];
 
     /* Return it */
     return Page;
@@ -1113,36 +1108,36 @@ MiGetPfnEntryIndex(IN PMMPFN Pfn1)
     //
     // This will return the Page Frame Number (PFN) from the MMPFN
     //
-    return Pfn1 - MmPfnDatabase[0];
+    return Pfn1 - MmPfnDatabase;
 }
 
-PFN_NUMBER
+PFN_TYPE
 NTAPI
-MmGetLRUNextUserPage(PFN_NUMBER PreviousPage);
+MmGetLRUNextUserPage(PFN_TYPE PreviousPage);
 
-PFN_NUMBER
+PFN_TYPE
 NTAPI
 MmGetLRUFirstUserPage(VOID);
 
 VOID
 NTAPI
-MmInsertLRULastUserPage(PFN_NUMBER Page);
+MmInsertLRULastUserPage(PFN_TYPE Page);
 
 VOID
 NTAPI
-MmRemoveLRUUserPage(PFN_NUMBER Page);
+MmRemoveLRUUserPage(PFN_TYPE Page);
 
 VOID
 NTAPI
-MmLockPage(PFN_NUMBER Page);
+MmLockPage(PFN_TYPE Page);
 
 VOID
 NTAPI
-MmUnlockPage(PFN_NUMBER Page);
+MmUnlockPage(PFN_TYPE Page);
 
 ULONG
 NTAPI
-MmGetLockCountPage(PFN_NUMBER Page);
+MmGetLockCountPage(PFN_TYPE Page);
 
 VOID
 NTAPI
@@ -1156,7 +1151,7 @@ MmDumpPfnDatabase(
    VOID
 );
 
-PFN_NUMBER
+PFN_TYPE
 NTAPI
 MmGetContinuousPages(
     ULONG NumberOfBytes,
@@ -1191,7 +1186,7 @@ MiUnmapPageInHyperSpace(IN PEPROCESS Process,
 
 PVOID
 NTAPI
-MiMapPagesToZeroInHyperSpace(IN PFN_NUMBER *Pages,
+MiMapPagesToZeroInHyperSpace(IN PMMPFN *Pages,
                              IN PFN_NUMBER NumberOfPages);
 
 VOID
@@ -1214,7 +1209,8 @@ FORCEINLINE
 PVOID
 MiMapPageToZeroInHyperSpace(IN PFN_NUMBER Page)
 {
-    return MiMapPagesToZeroInHyperSpace(&Page, 1);
+    PMMPFN Pfn1 = MiGetPfnEntry(Page);
+    return MiMapPagesToZeroInHyperSpace(&Pfn1, 1);
 }
 
 #define MmDeleteHyperspaceMapping(x) MiUnmapPageInHyperSpace(HyperProcess, x, HyperIrql);
@@ -1226,7 +1222,7 @@ NTAPI
 MmCreateVirtualMappingForKernel(
     PVOID Address,
     ULONG flProtect,
-    PPFN_NUMBER Pages,
+    PPFN_TYPE Pages,
     ULONG PageCount
 );
 
@@ -1243,7 +1239,7 @@ MmCreateVirtualMapping(
     struct _EPROCESS* Process,
     PVOID Address,
     ULONG flProtect,
-    PPFN_NUMBER Pages,
+    PPFN_TYPE Pages,
     ULONG PageCount
 );
 
@@ -1253,7 +1249,7 @@ MmCreateVirtualMappingUnsafe(
     struct _EPROCESS* Process,
     PVOID Address,
     ULONG flProtect,
-    PPFN_NUMBER Pages,
+    PPFN_TYPE Pages,
     ULONG PageCount
 );
 
@@ -1288,7 +1284,7 @@ MmDisableVirtualMapping(
     struct _EPROCESS *Process,
     PVOID Address,
     BOOLEAN* WasDirty,
-    PPFN_NUMBER Page
+    PPFN_TYPE Page
 );
 
 VOID
@@ -1328,7 +1324,7 @@ MmIsPageSwapEntry(
 VOID
 NTAPI
 MmTransferOwnershipPage(
-    PFN_NUMBER Page,
+    PFN_TYPE Page,
     ULONG NewConsumer
 );
 
@@ -1339,7 +1335,7 @@ MmSetDirtyPage(
     PVOID Address
 );
 
-PFN_NUMBER
+PFN_TYPE
 NTAPI
 MmAllocPage(
     ULONG Consumer
@@ -1352,34 +1348,34 @@ MmAllocPagesSpecifyRange(
     PHYSICAL_ADDRESS LowestAddress,
     PHYSICAL_ADDRESS HighestAddress,
     ULONG NumberOfPages,
-    PPFN_NUMBER Pages
+    PPFN_TYPE Pages
 );
 
 VOID
 NTAPI
-MmDereferencePage(PFN_NUMBER Page);
+MmDereferencePage(PFN_TYPE Page);
 
 VOID
 NTAPI
-MmReferencePage(PFN_NUMBER Page);
+MmReferencePage(PFN_TYPE Page);
 
 ULONG
 NTAPI
-MmGetReferenceCountPage(PFN_NUMBER Page);
+MmGetReferenceCountPage(PFN_TYPE Page);
 
 BOOLEAN
 NTAPI
-MmIsPageInUse(PFN_NUMBER Page);
+MmIsPageInUse(PFN_TYPE Page);
 
 VOID
 NTAPI
 MmSetSavedSwapEntryPage(
-    PFN_NUMBER Page,
+    PFN_TYPE Page,
     SWAPENTRY SavedSwapEntry);
 
 SWAPENTRY
 NTAPI
-MmGetSavedSwapEntryPage(PFN_NUMBER Page);
+MmGetSavedSwapEntryPage(PFN_TYPE Page);
 
 VOID
 NTAPI
@@ -1399,7 +1395,7 @@ MmDeletePageTable(
     PVOID Address
 );
 
-PFN_NUMBER
+PFN_TYPE
 NTAPI
 MmGetPfnForProcess(
     struct _EPROCESS *Process,
@@ -1411,14 +1407,14 @@ NTAPI
 MmCreateProcessAddressSpace(
     IN ULONG MinWs,
     IN PEPROCESS Dest,
-    IN PULONG_PTR DirectoryTableBase
+    IN PULONG DirectoryTableBase
 );
 
 NTSTATUS
 NTAPI
 MmInitializeHandBuiltProcess(
     IN PEPROCESS Process,
-    IN PULONG_PTR DirectoryTableBase
+    IN PULONG DirectoryTableBase
 );
 
 
@@ -1443,7 +1439,7 @@ MmDeleteVirtualMapping(
     PVOID Address,
     BOOLEAN FreePage,
     BOOLEAN* WasDirty,
-    PPFN_NUMBER Page
+    PPFN_TYPE Page
 );
 
 BOOLEAN
@@ -1455,11 +1451,11 @@ MmIsDirtyPage(
 
 VOID
 NTAPI
-MmMarkPageMapped(PFN_NUMBER Page);
+MmMarkPageMapped(PFN_TYPE Page);
 
 VOID
 NTAPI
-MmMarkPageUnmapped(PFN_NUMBER Page);
+MmMarkPageUnmapped(PFN_TYPE Page);
 
 VOID
 NTAPI
@@ -1547,19 +1543,13 @@ MmAllocateSection(
     PVOID BaseAddress
 );
 
-VOID
-NTAPI
-MmFreeSection(
-    PVOID BaseAddress
-);
-
 NTSTATUS
 NTAPI
 MmQuerySectionView(
     PMEMORY_AREA MemoryArea,
     PVOID Address,
     PMEMORY_BASIC_INFORMATION Info,
-    PSIZE_T ResultLength
+    PULONG ResultLength
 );
 
 NTSTATUS
@@ -1652,8 +1642,8 @@ MiQueryVirtualMemory(
     IN PVOID Address,
     IN MEMORY_INFORMATION_CLASS VirtualMemoryInformationClass,
     OUT PVOID VirtualMemoryInformation,
-    IN SIZE_T Length,
-    OUT PSIZE_T ResultLength
+    IN ULONG Length,
+    OUT PULONG ResultLength
 );
 
 /* sysldr.c ******************************************************************/