[NTOSKRNL]

- implement helper functions MiIsMemoryTypeFree and MiIsMemoryTypeInvisible
- use symbolic names instead of hex values
- Don't ASSERT on mising large page support, just warn
- add some more mm macros for amd64

svn path=/trunk/; revision=53902
This commit is contained in:
Timo Kreuzer 2011-09-30 09:30:52 +00:00
parent b77311e07d
commit 6dac8f7b1c
4 changed files with 59 additions and 13 deletions

View file

@ -93,6 +93,9 @@
/* Easy accessing PFN in PTE */ /* Easy accessing PFN in PTE */
#define PFN_FROM_PTE(v) ((v)->u.Hard.PageFrameNumber) #define PFN_FROM_PTE(v) ((v)->u.Hard.PageFrameNumber)
#define PFN_FROM_PDE(v) ((v)->u.Hard.PageFrameNumber)
#define PFN_FROM_PPE(v) ((v)->u.Hard.PageFrameNumber)
#define PFN_FROM_PXE(v) ((v)->u.Hard.PageFrameNumber)
// FIXME, only copied from x86 // FIXME, only copied from x86
#define MI_MAKE_LOCAL_PAGE(x) ((x)->u.Hard.Global = 0) #define MI_MAKE_LOCAL_PAGE(x) ((x)->u.Hard.Global = 0)
@ -192,15 +195,35 @@ MiAddressToPxi(PVOID Address)
/* Convert a PTE into a corresponding address */ /* Convert a PTE into a corresponding address */
PVOID PVOID
FORCEINLINE FORCEINLINE
MiPteToAddress(PMMPTE Pte) MiPteToAddress(PMMPTE PointerPte)
{ {
/* Use signed math */ /* Use signed math */
LONG64 Temp = (LONG64)Pte; return (PVOID)(((LONG64)PointerPte << 25) >> 16);
Temp <<= 25; }
Temp >>= 16;
return (PVOID)Temp; PVOID
FORCEINLINE
MiPdeToAddress(PMMPTE PointerPde)
{
/* Use signed math */
return (PVOID)(((LONG64)PointerPde << 34) >> 16);
}
PVOID
FORCEINLINE
MiPpeToAddress(PMMPTE PointerPpe)
{
/* Use signed math */
return (PVOID)(((LONG64)PointerPpe << 43) >> 16);
}
PVOID
FORCEINLINE
MiPxeToAddress(PMMPTE PointerPxe)
{
/* Use signed math */
return (PVOID)(((LONG64)PointerPxe << 52) >> 16);
} }
#define MiPdeToAddress MiPteToAddress
BOOLEAN BOOLEAN
FORCEINLINE FORCEINLINE

View file

@ -34,8 +34,8 @@ INIT_FUNCTION
MiInitializeLargePageSupport(VOID) MiInitializeLargePageSupport(VOID)
{ {
#if _MI_PAGING_LEVELS > 2 #if _MI_PAGING_LEVELS > 2
DPRINT1("PAE/x64 Not Implemented\n"); DPRINT1("MiInitializeLargePageSupport: PAE/x64 Not Implemented\n");
ASSERT(FALSE); //ASSERT(FALSE);
#else #else
/* Initialize the large-page hyperspace PTE used for initial mapping */ /* Initialize the large-page hyperspace PTE used for initial mapping */
MiLargePageHyperPte = MiReserveSystemPtes(1, SystemPteSpace); MiLargePageHyperPte = MiReserveSystemPtes(1, SystemPteSpace);

View file

@ -538,6 +538,27 @@ extern PVOID MiSessionPoolEnd; // 0xBE000000
extern PVOID MiSessionPoolStart; // 0xBD000000 extern PVOID MiSessionPoolStart; // 0xBD000000
extern PVOID MiSessionViewStart; // 0xBE000000 extern PVOID MiSessionViewStart; // 0xBE000000
BOOLEAN
FORCEINLINE
MiIsMemoryTypeFree(TYPE_OF_MEMORY MemoryType)
{
return ((MemoryType == LoaderFree) ||
(MemoryType == LoaderLoadedProgram) ||
(MemoryType == LoaderFirmwareTemporary) ||
(MemoryType == LoaderOsloaderStack));
}
BOOLEAN
FORCEINLINE
MiIsMemoryTypeInvisible(TYPE_OF_MEMORY MemoryType)
{
return ((MemoryType == LoaderFirmwarePermanent) ||
(MemoryType == LoaderSpecialMemory) ||
(MemoryType == LoaderHALCachedMemory) ||
(MemoryType == LoaderBBTMemory));
}
// //
// Figures out the hardware bits for a PTE // Figures out the hardware bits for a PTE
// //

View file

@ -572,15 +572,16 @@ MiInitializeColorTables(VOID)
for (i = 0; i < MmSecondaryColors; i++) for (i = 0; i < MmSecondaryColors; i++)
{ {
/* Set both free and zero lists for each color */ /* Set both free and zero lists for each color */
MmFreePagesByColor[ZeroedPageList][i].Flink = 0xFFFFFFFF; MmFreePagesByColor[ZeroedPageList][i].Flink = LIST_HEAD;
MmFreePagesByColor[ZeroedPageList][i].Blink = (PVOID)0xFFFFFFFF; MmFreePagesByColor[ZeroedPageList][i].Blink = (PVOID)LIST_HEAD;
MmFreePagesByColor[ZeroedPageList][i].Count = 0; MmFreePagesByColor[ZeroedPageList][i].Count = 0;
MmFreePagesByColor[FreePageList][i].Flink = 0xFFFFFFFF; MmFreePagesByColor[FreePageList][i].Flink = LIST_HEAD;
MmFreePagesByColor[FreePageList][i].Blink = (PVOID)0xFFFFFFFF; MmFreePagesByColor[FreePageList][i].Blink = (PVOID)LIST_HEAD;
MmFreePagesByColor[FreePageList][i].Count = 0; MmFreePagesByColor[FreePageList][i].Count = 0;
} }
} }
#ifndef _M_AMD64
BOOLEAN BOOLEAN
NTAPI NTAPI
INIT_FUNCTION INIT_FUNCTION
@ -1059,6 +1060,7 @@ MiInitializePfnDatabase(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
/* Finally add the pages for the PFN database itself */ /* Finally add the pages for the PFN database itself */
MiBuildPfnDatabaseSelf(); MiBuildPfnDatabaseSelf();
} }
#endif /* !_M_AMD64 */
VOID VOID
NTAPI NTAPI
@ -1287,7 +1289,7 @@ MiAddHalIoMappings(VOID)
PFN_NUMBER PageFrameIndex; PFN_NUMBER PageFrameIndex;
/* HAL Heap address -- should be on a PDE boundary */ /* HAL Heap address -- should be on a PDE boundary */
BaseAddress = (PVOID)0xFFC00000; BaseAddress = (PVOID)MM_HAL_VA_START;
ASSERT(MiAddressToPteOffset(BaseAddress) == 0); ASSERT(MiAddressToPteOffset(BaseAddress) == 0);
/* Check how many PDEs the heap has */ /* Check how many PDEs the heap has */