//#define NDEBUG
#include <debug.h>
-#include "../ARM3/miarm.h"
+#include <mm/ARM3/miarm.h>
#ifdef _WINKD_
extern PMMPTE MmDebugPte;
#endif
+/* Helper macros */
+#define IS_ALIGNED(addr, align) (((ULONG64)(addr) & (align - 1)) == 0)
+#define IS_PAGE_ALIGNED(addr) IS_ALIGNED(addr, PAGE_SIZE)
+
/* GLOBALS *****************************************************************/
/* Template PTE and PDE for a kernel page */
MMPTE ValidKernelPde = {{PTE_VALID|PTE_READWRITE|PTE_DIRTY|PTE_ACCESSED}};
MMPTE ValidKernelPte = {{PTE_VALID|PTE_READWRITE|PTE_DIRTY|PTE_ACCESSED}};
+/* The same, but for local pages */
+MMPTE ValidKernelPdeLocal = {{PTE_VALID|PTE_READWRITE|PTE_DIRTY|PTE_ACCESSED}};
+MMPTE ValidKernelPteLocal = {{PTE_VALID|PTE_READWRITE|PTE_DIRTY|PTE_ACCESSED}};
+
/* Template PDE for a demand-zero page */
MMPDE DemandZeroPde = {{MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS}};
MMPTE DemandZeroPte = {{MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS}};
/* Setup 1 PPE for hyper space */
MiMapPPEs((PVOID)HYPER_SPACE, (PVOID)HYPER_SPACE_END);
+ /* Setup PPEs for system space view */
+ MiMapPPEs(MiSystemViewStart, (PCHAR)MiSystemViewStart + MmSystemViewSize);
+
/* Setup the mapping PDEs */
MiMapPDEs((PVOID)MI_MAPPING_RANGE_START, (PVOID)MI_MAPPING_RANGE_END);
MiInitializeNonPagedPool();
MiInitializeNonPagedPoolThresholds();
- /* Initialize the nonpaged pool */
- InitializePool(NonPagedPool, 0);
}
VOID
PageCount = MxFreeDescriptor->BasePage - BasePage;
MiAddDescriptorToDatabase(BasePage, PageCount, LoaderMemoryData);
- // Reset the descriptor back so we can create the correct memory blocks
+ /* Reset the descriptor back so we can create the correct memory blocks */
*MxFreeDescriptor = MxOldFreeDescriptor;
}
/* Now process the page tables */
MiBuildPfnDatabaseFromPageTables();
+ /* PFNs are initialized now! */
MiPfnsInitialized = TRUE;
+ //KeLowerIrql(OldIrql);
+
+ /* Need to be at DISPATCH_LEVEL for InitializePool */
+ //KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
+
+ /* Initialize the nonpaged pool */
+ InitializePool(NonPagedPool, 0);
+
KeLowerIrql(OldIrql);
/* Initialize the balancer */