/* 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;
VOID
NTAPI
-MmInsertLRULastUserPage(PFN_TYPE Pfn)
+MmInsertLRULastUserPage(PFN_NUMBER Pfn)
{
KIRQL OldIrql;
KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
}
-PFN_TYPE
+PFN_NUMBER
NTAPI
-MmGetLRUNextUserPage(PFN_TYPE PreviousPfn)
+MmGetLRUNextUserPage(PFN_NUMBER PreviousPfn)
{
ULONG Position;
KIRQL OldIrql;
VOID
NTAPI
-MmRemoveLRUUserPage(PFN_TYPE Page)
+MmRemoveLRUUserPage(PFN_NUMBER Page)
{
/* Unset the page as a user page */
RtlClearBit(&MiUserPfnBitMap, Page);
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;
VOID
NTAPI
-MmSetSavedSwapEntryPage(PFN_TYPE Pfn, SWAPENTRY SwapEntry)
+MmSetSavedSwapEntryPage(PFN_NUMBER Pfn, SWAPENTRY SwapEntry)
{
KIRQL oldIrql;
SWAPENTRY
NTAPI
-MmGetSavedSwapEntryPage(PFN_TYPE Pfn)
+MmGetSavedSwapEntryPage(PFN_NUMBER Pfn)
{
SWAPENTRY SwapEntry;
KIRQL oldIrql;
VOID
NTAPI
-MmReferencePage(PFN_TYPE Pfn)
+MmReferencePage(PFN_NUMBER Pfn)
{
PPHYSICAL_PAGE Page;
ULONG
NTAPI
-MmGetReferenceCountPage(PFN_TYPE Pfn)
+MmGetReferenceCountPage(PFN_NUMBER Pfn)
{
KIRQL oldIrql;
ULONG RCount;
BOOLEAN
NTAPI
-MmIsPageInUse(PFN_TYPE Pfn)
+MmIsPageInUse(PFN_NUMBER Pfn)
{
return MiIsPfnInUse(MiGetPfnEntry(Pfn));
}
VOID
NTAPI
-MmDereferencePage(PFN_TYPE Pfn)
+MmDereferencePage(PFN_NUMBER Pfn)
{
PPHYSICAL_PAGE Page;
}
}
-PFN_TYPE
+PFN_NUMBER
NTAPI
MmAllocPage(ULONG Type)
{
- PFN_TYPE PfnOffset;
+ PFN_NUMBER PfnOffset;
PPHYSICAL_PAGE PageDescriptor;
BOOLEAN NeedClear = FALSE;
NTSTATUS
NTAPI
-MiZeroPage(PFN_TYPE Page)
+MiZeroPage(PFN_NUMBER Page)
{
KIRQL Irql;
PVOID TempAddress;
NTSTATUS Status;
KIRQL oldIrql;
PPHYSICAL_PAGE PageDescriptor;
- PFN_TYPE Pfn;
+ PFN_NUMBER Pfn;
ULONG Count;
/* Free initial kernel memory */