192 lines
4.8 KiB
C
192 lines
4.8 KiB
C
/*++
|
|
|
|
Copyright (c) 1990 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
datamips.c
|
|
|
|
Abstract:
|
|
|
|
This module contains the private hardware specific global storage for
|
|
the memory management subsystem.
|
|
|
|
Author:
|
|
|
|
Lou Perazzoli (loup) 27-Mar-1990
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "mi.h"
|
|
|
|
|
|
// A zero Pte.
|
|
|
|
|
|
MMPTE ZeroPte = { 0 };
|
|
|
|
|
|
// A kernel zero PTE.
|
|
|
|
|
|
#ifdef R3000
|
|
MMPTE ZeroKernelPte = { 0 };
|
|
#endif //R3000
|
|
|
|
#ifdef R4000
|
|
MMPTE ZeroKernelPte = { MM_PTE_GLOBAL_MASK };
|
|
#endif //R4000
|
|
|
|
#ifdef R3000
|
|
MMPTE ValidKernelPte = { MM_PTE_VALID_MASK |
|
|
MM_PTE_WRITE_MASK |
|
|
MM_PTE_DIRTY_MASK |
|
|
MM_PTE_GLOBAL_MASK };
|
|
#endif //R3000
|
|
|
|
#ifdef R4000
|
|
MMPTE ValidKernelPte = { MM_PTE_VALID_MASK |
|
|
MM_PTE_CACHE_ENABLE_MASK |
|
|
MM_PTE_WRITE_MASK |
|
|
MM_PTE_DIRTY_MASK |
|
|
MM_PTE_GLOBAL_MASK };
|
|
#endif //R4000
|
|
|
|
|
|
MMPTE ValidUserPte = { MM_PTE_VALID_MASK |
|
|
MM_PTE_WRITE_MASK |
|
|
MM_PTE_CACHE_ENABLE_MASK |
|
|
MM_PTE_DIRTY_MASK };
|
|
|
|
MMPTE ValidPtePte = { MM_PTE_VALID_MASK |
|
|
MM_PTE_WRITE_MASK |
|
|
MM_PTE_CACHE_ENABLE_MASK |
|
|
MM_PTE_DIRTY_MASK };
|
|
|
|
MMPTE ValidPdePde = { MM_PTE_VALID_MASK |
|
|
MM_PTE_WRITE_MASK |
|
|
MM_PTE_CACHE_ENABLE_MASK |
|
|
MM_PTE_DIRTY_MASK };
|
|
|
|
MMPTE ValidKernelPde = { MM_PTE_VALID_MASK |
|
|
MM_PTE_WRITE_MASK |
|
|
MM_PTE_CACHE_ENABLE_MASK |
|
|
MM_PTE_DIRTY_MASK |
|
|
MM_PTE_GLOBAL_MASK };
|
|
|
|
#ifdef R3000
|
|
MMPTE DemandZeroPde = { MM_READWRITE << 4 };
|
|
#endif //R3000
|
|
|
|
#ifdef R4000
|
|
MMPTE DemandZeroPde = { MM_READWRITE << 3 };
|
|
#endif //R4000
|
|
|
|
#ifdef R3000
|
|
MMPTE DemandZeroPte = { MM_READWRITE << 4 };
|
|
#endif //R3000
|
|
|
|
|
|
#ifdef R4000
|
|
MMPTE DemandZeroPte = { MM_READWRITE << 3 };
|
|
#endif //R4000
|
|
|
|
#ifdef R3000
|
|
MMPTE TransitionPde = { 0x2 | (MM_READWRITE << 4) };
|
|
#endif //R3000
|
|
|
|
#ifdef R4000
|
|
MMPTE TransitionPde = { MM_PTE_TRANSITION_MASK | (MM_READWRITE << 3) };
|
|
#endif //R4000
|
|
|
|
#ifdef R3000
|
|
MMPTE PrototypePte = { 0xFFFFF000 | (MM_READWRITE << 4) | MM_PTE_PROTOTYPE_MASK };
|
|
#endif //R3000
|
|
|
|
#ifdef R4000
|
|
MMPTE PrototypePte = { 0xFFFFF000 | (MM_READWRITE << 3) | MM_PTE_PROTOTYPE_MASK };
|
|
#endif //R4000
|
|
|
|
|
|
// PTE which generates an access violation when referenced.
|
|
|
|
|
|
#ifdef R3000
|
|
MMPTE NoAccessPte = {MM_NOACCESS << 4};
|
|
#endif //R3000
|
|
|
|
#ifdef R4000
|
|
MMPTE NoAccessPte = {MM_NOACCESS << 3};
|
|
#endif //R4000
|
|
|
|
|
|
|
|
// Pool start and end.
|
|
|
|
|
|
PVOID MmNonPagedPoolStart;
|
|
|
|
PVOID MmNonPagedPoolEnd = ((PVOID)MM_NONPAGED_POOL_END);
|
|
|
|
PVOID MmPagedPoolStart = (PVOID)0xE1000000;
|
|
|
|
PVOID MmPagedPoolEnd;
|
|
|
|
|
|
|
|
// Color tables for free and zeroed pages.
|
|
|
|
|
|
MMPFNLIST MmFreePagesByPrimaryColor[2][MM_MAXIMUM_NUMBER_OF_COLORS];
|
|
|
|
PMMCOLOR_TABLES MmFreePagesByColor[2];
|
|
|
|
MMPFNLIST MmStandbyPageListByColor[MM_MAXIMUM_NUMBER_OF_COLORS] = {
|
|
0, StandbyPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, StandbyPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, StandbyPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, StandbyPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, StandbyPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, StandbyPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, StandbyPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, StandbyPageList, MM_EMPTY_LIST, MM_EMPTY_LIST
|
|
};
|
|
|
|
|
|
|
|
// Color tables for modified pages destined for the paging file.
|
|
|
|
|
|
MMPFNLIST MmModifiedPageListByColor[MM_MAXIMUM_NUMBER_OF_COLORS] = {
|
|
0, ModifiedPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, ModifiedPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, ModifiedPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, ModifiedPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, ModifiedPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, ModifiedPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, ModifiedPageList, MM_EMPTY_LIST, MM_EMPTY_LIST,
|
|
0, ModifiedPageList, MM_EMPTY_LIST, MM_EMPTY_LIST};
|
|
|
|
ULONG MmSecondaryColorMask;
|
|
|
|
|
|
// Count of the number of modified pages destined for the paging file.
|
|
|
|
|
|
ULONG MmTotalPagesForPagingFile;
|
|
|
|
|
|
|
|
// PTE reserved for mapping physical data for debugger.
|
|
|
|
|
|
PMMPTE MmDebugPte = (MiGetPteAddress((PVOID)MM_NONPAGED_POOL_END));
|
|
|
|
|
|
// 17 PTEs reserved for mapping MDLs (64k max) + 1 to ensure g-bits right.
|
|
|
|
|
|
PMMPTE MmCrashDumpPte = (MiGetPteAddress((PVOID)MM_NONPAGED_POOL_END));
|