00001 /*++ 00002 00003 Copyright (c) 1990 Microsoft Corporation 00004 00005 Module Name: 00006 00007 data386.c 00008 00009 Abstract: 00010 00011 This module contains the private hardware specific global storage for 00012 the memory management subsystem. 00013 00014 Author: 00015 00016 Lou Perazzoli (loup) 22-Jan-1990 00017 00018 Revision History: 00019 00020 --*/ 00021 00022 #include "mi.h" 00023 00024 // 00025 // A zero Pte. 00026 // 00027 00028 MMPTE ZeroPte = { 0 }; 00029 00030 // 00031 // A kernel zero PTE. 00032 // 00033 00034 MMPTE ZeroKernelPte = {0x0}; 00035 00036 MMPTE MmPteGlobal = {0x0}; // Set global bit later if processor supports Global Page 00037 00038 // 00039 // Note - MM_PTE_GLOBAL_MASK is or'ed into ValidKernelPte during 00040 // initialization if the processor supports Global Page. Use 00041 // ValidKernelPteLocal if you don't want the global bit (ie: for session 00042 // space). 00043 // 00044 00045 MMPTE ValidKernelPte = { MM_PTE_VALID_MASK | 00046 MM_PTE_WRITE_MASK | 00047 MM_PTE_DIRTY_MASK | 00048 MM_PTE_ACCESS_MASK }; 00049 00050 MMPTE ValidKernelPteLocal = { MM_PTE_VALID_MASK | 00051 MM_PTE_WRITE_MASK | 00052 MM_PTE_DIRTY_MASK | 00053 MM_PTE_ACCESS_MASK }; 00054 00055 00056 MMPTE ValidUserPte = { MM_PTE_VALID_MASK | 00057 MM_PTE_WRITE_MASK | 00058 MM_PTE_OWNER_MASK | 00059 MM_PTE_DIRTY_MASK | 00060 MM_PTE_ACCESS_MASK }; 00061 00062 00063 MMPTE ValidPtePte = { MM_PTE_VALID_MASK | 00064 MM_PTE_WRITE_MASK | 00065 MM_PTE_DIRTY_MASK | 00066 MM_PTE_ACCESS_MASK }; 00067 00068 00069 MMPTE ValidPdePde = { MM_PTE_VALID_MASK | 00070 MM_PTE_WRITE_MASK | 00071 MM_PTE_DIRTY_MASK | 00072 MM_PTE_ACCESS_MASK }; 00073 00074 00075 MMPTE ValidKernelPde = { MM_PTE_VALID_MASK | 00076 MM_PTE_WRITE_MASK | 00077 MM_PTE_DIRTY_MASK | 00078 MM_PTE_ACCESS_MASK }; 00079 00080 MMPTE ValidKernelPdeLocal = { MM_PTE_VALID_MASK | 00081 MM_PTE_WRITE_MASK | 00082 MM_PTE_DIRTY_MASK | 00083 MM_PTE_ACCESS_MASK }; 00084 00085 // NOTE - MM_PTE_GLOBAL_MASK or'ed in later if processor supports Global Page 00086 00087 00088 MMPTE DemandZeroPde = { MM_READWRITE << 5 }; 00089 00090 00091 MMPTE DemandZeroPte = { MM_READWRITE << 5 }; 00092 00093 00094 MMPTE TransitionPde = { MM_PTE_WRITE_MASK | 00095 MM_PTE_OWNER_MASK | 00096 MM_PTE_TRANSITION_MASK | 00097 MM_READWRITE << 5 }; 00098 00099 #if !defined (_X86PAE_) 00100 MMPTE PrototypePte = { 0xFFFFF000 | 00101 MM_PTE_PROTOTYPE_MASK | 00102 MM_READWRITE << 5 }; 00103 #else 00104 MMPTE PrototypePte = { (MI_PTE_LOOKUP_NEEDED << 32) | 00105 MM_PTE_PROTOTYPE_MASK | 00106 MM_READWRITE << 5 }; 00107 #endif 00108 00109 00110 // 00111 // PTE which generates an access violation when referenced. 00112 // 00113 00114 MMPTE NoAccessPte = {MM_NOACCESS << 5}; 00115 00116 // 00117 // Pool start and end. 00118 // 00119 00120 PVOID MmNonPagedPoolStart; 00121 00122 PVOID MmNonPagedPoolEnd = (PVOID)MM_NONPAGED_POOL_END; 00123 00124 PVOID MmPagedPoolStart = (PVOID)MM_PAGED_POOL_START; 00125 00126 PVOID MmPagedPoolEnd; 00127 00128 ULONG MmKseg2Frame; 00129 00130 ULONG MiMaximumWorkingSet = 00131 ((ULONG)((ULONG)2*1024*1024*1024 - 64*1024*1024) >> PAGE_SHIFT); //2Gb-64Mb 00132 00133 // 00134 // Color tables for free and zeroed pages. 00135 // 00136 00137 PMMCOLOR_TABLES MmFreePagesByColor[2]; 00138 00139 // 00140 // Color tables for modified pages destined for the paging file. 00141 // 00142 00143 MMPFNLIST MmModifiedPageListByColor[MM_MAXIMUM_NUMBER_OF_COLORS] = { 00144 0, ModifiedPageList, MM_EMPTY_LIST, MM_EMPTY_LIST}; 00145 00146 00147 ULONG MmSecondaryColorMask; 00148 00149 // 00150 // Count of the number of modified pages destined for the paging file. 00151 // 00152 00153 ULONG MmTotalPagesForPagingFile = 0; 00154 00155 // 00156 // Pte reserved for mapping pages for the debugger. 00157 // 00158 00159 PMMPTE MmDebugPte = (MiGetPteAddress(MM_DEBUG_VA)); 00160 00161 // 00162 // 16 PTEs reserved for mapping MDLs (64k max). 00163 // 00164 00165 PMMPTE MmCrashDumpPte = (MiGetPteAddress(MM_CRASH_DUMP_VA)); 00166 00167 // 00168 // Number of additional system PTEs present. 00169 // 00170 00171 ULONG MiNumberOfExtraSystemPdes; 00172 00173 // 00174 // Size of extended system cache. 00175 // 00176 00177 ULONG MiMaximumSystemCacheSizeExtra; 00178 00179 PVOID MiSystemCacheStartExtra; 00180 00181 PVOID MiSystemCacheEndExtra;