Merge trunk HEAD (r46369)
[reactos.git] / reactos / ntoskrnl / mm / freelist.c
index 7f2646f..0221fc7 100644 (file)
 /* The first array contains ReactOS PFNs, the second contains ARM3 PFNs */
 PPHYSICAL_PAGE MmPfnDatabase[2];
 
+    struct
+    {
+        LIST_ENTRY ListEntry; // 0x000
+        ULONG_PTR RmapListHead;   // 0x008
+        USHORT ReferenceCount; // 0x00C
+        struct // 0x00$
+        {
+            USHORT _unused1:1;
+            USHORT StartOfAllocation:1;
+            USHORT EndOfAllocation:1;
+            USHORT Zero:1; 
+            USHORT LockCount:4;
+            USHORT Consumer:3;
+            USHORT _unused2:1;
+            USHORT Type:2;
+            USHORT _unused3:1;
+            USHORT _unused4:1;
+        } Flags;
+        LONG MapCount; // 0x10
+        ULONG_PTR SavedSwapEntry; // 0x018
+    };
+} PHYSICAL_PAGE, *PPHYSICAL_PAGE;
+
+C_ASSERT(sizeof(PHYSICAL_PAGE) == sizeof(MMPFN));
+
+#define MiGetPfnEntry(Pfn) ((PPHYSICAL_PAGE)MiGetPfnEntry(Pfn))
+#define MiGetPfnEntryIndex(x) MiGetPfnEntryIndex((struct _MMPFN*)x)
+#define LockCount            Flags.LockCount
+
+PMMPFN MmPfnDatabase;
+#define MmPfnDatabase ((PPHYSICAL_PAGE)MmPfnDatabase)
+
+#define MMPFN PHYSICAL_PAGE
+#define PMMPFN PPHYSICAL_PAGE
+
 ULONG MmAvailablePages;
 ULONG MmResidentAvailablePages;
 
@@ -92,7 +127,7 @@ MmGetLRUFirstUserPage(VOID)
 
 VOID
 NTAPI
-MmInsertLRULastUserPage(PFN_TYPE Pfn)
+MmInsertLRULastUserPage(PFN_NUMBER Pfn)
 {
     KIRQL OldIrql;
 
@@ -102,9 +137,9 @@ MmInsertLRULastUserPage(PFN_TYPE Pfn)
     KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
 }
 
-PFN_TYPE
+PFN_NUMBER
 NTAPI
-MmGetLRUNextUserPage(PFN_TYPE PreviousPfn)
+MmGetLRUNextUserPage(PFN_NUMBER PreviousPfn)
 {
     ULONG Position;
     KIRQL OldIrql;
@@ -121,7 +156,7 @@ MmGetLRUNextUserPage(PFN_TYPE PreviousPfn)
 
 VOID
 NTAPI
-MmRemoveLRUUserPage(PFN_TYPE Page)
+MmRemoveLRUUserPage(PFN_NUMBER Page)
 {
     /* Unset the page as a user page */
     RtlClearBit(&MiUserPfnBitMap, Page);
@@ -702,18 +737,18 @@ MmInitializePageList(VOID)
 
 VOID
 NTAPI
-MmSetRmapListHeadPage(PFN_TYPE Pfn, struct _MM_RMAP_ENTRY* ListHead)
+MmSetRmapListHeadPage(PFN_NUMBER Pfn, struct _MM_RMAP_ENTRY* ListHead)
 {
    KIRQL oldIrql;
     
    oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
-   MiGetPfnEntry(Pfn)->RmapListHead = (LONG)ListHead;
+   MiGetPfnEntry(Pfn)->RmapListHead = (LONG_PTR)ListHead;
    KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql);
 }
 
 struct _MM_RMAP_ENTRY*
 NTAPI
-MmGetRmapListHeadPage(PFN_TYPE Pfn)
+MmGetRmapListHeadPage(PFN_NUMBER Pfn)
 {
    KIRQL oldIrql;
    struct _MM_RMAP_ENTRY* ListHead;
@@ -727,7 +762,7 @@ MmGetRmapListHeadPage(PFN_TYPE Pfn)
 
 VOID
 NTAPI
-MmSetSavedSwapEntryPage(PFN_TYPE Pfn,  SWAPENTRY SwapEntry)
+MmSetSavedSwapEntryPage(PFN_NUMBER Pfn,  SWAPENTRY SwapEntry)
 {
    KIRQL oldIrql;
 
@@ -738,7 +773,7 @@ MmSetSavedSwapEntryPage(PFN_TYPE Pfn,  SWAPENTRY SwapEntry)
 
 SWAPENTRY
 NTAPI
-MmGetSavedSwapEntryPage(PFN_TYPE Pfn)
+MmGetSavedSwapEntryPage(PFN_NUMBER Pfn)
 {
    SWAPENTRY SwapEntry;
    KIRQL oldIrql;
@@ -752,7 +787,7 @@ MmGetSavedSwapEntryPage(PFN_TYPE Pfn)
 
 VOID
 NTAPI
-MmReferencePage(PFN_TYPE Pfn)
+MmReferencePage(PFN_NUMBER Pfn)
 {
    PPHYSICAL_PAGE Page;
 
@@ -771,7 +806,7 @@ MmReferencePage(PFN_TYPE Pfn)
 
 ULONG
 NTAPI
-MmGetReferenceCountPage(PFN_TYPE Pfn)
+MmGetReferenceCountPage(PFN_NUMBER Pfn)
 {
    KIRQL oldIrql;
    ULONG RCount;
@@ -791,7 +826,7 @@ MmGetReferenceCountPage(PFN_TYPE Pfn)
 
 BOOLEAN
 NTAPI
-MmIsPageInUse(PFN_TYPE Pfn)
+MmIsPageInUse(PFN_NUMBER Pfn)
 {
     return MiIsPfnInUse(MiGetPfnEntry(Pfn));
 }
@@ -806,7 +841,7 @@ MiSetConsumer(IN PFN_TYPE Pfn,
 
 VOID
 NTAPI
-MmDereferencePage(PFN_TYPE Pfn)
+MmDereferencePage(PFN_NUMBER Pfn)
 {
    PPHYSICAL_PAGE Page;
 
@@ -828,11 +863,11 @@ MmDereferencePage(PFN_TYPE Pfn)
    }
 }
 
-PFN_TYPE
+PFN_NUMBER
 NTAPI
 MmAllocPage(ULONG Type)
 {
-   PFN_TYPE PfnOffset;
+   PFN_NUMBER PfnOffset;
    PPHYSICAL_PAGE PageDescriptor;
    BOOLEAN NeedClear = FALSE;
 
@@ -876,7 +911,7 @@ MmAllocPage(ULONG Type)
 
 NTSTATUS
 NTAPI
-MiZeroPage(PFN_TYPE Page)
+MiZeroPage(PFN_NUMBER Page)
 {
     KIRQL Irql;
     PVOID TempAddress;
@@ -900,7 +935,7 @@ MmZeroPageThreadMain(PVOID Ignored)
    NTSTATUS Status;
    KIRQL oldIrql;
    PPHYSICAL_PAGE PageDescriptor;
-   PFN_TYPE Pfn;
+   PFN_NUMBER Pfn;
    ULONG Count;
 
    /* Free initial kernel memory */