- Initialize the value of MmBootImageSize in ARM3 now.
[reactos.git] / reactos / ntoskrnl / mm / ARM3 / miarm.h
1 /*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: ntoskrnl/mm/ARM3/miarm.h
5 * PURPOSE: ARM Memory Manager Header
6 * PROGRAMMERS: ReactOS Portable Systems Group
7 */
8
9 #define MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING ((255*1024*1024) >> PAGE_SHIFT)
10 #define MI_MIN_PAGES_FOR_SYSPTE_TUNING ((19*1024*1024) >> PAGE_SHIFT)
11 #define MI_MIN_PAGES_FOR_SYSPTE_BOOST ((32*1024*1024) >> PAGE_SHIFT)
12 #define MI_MAX_INIT_NONPAGED_POOL_SIZE (128 * 1024 * 1024)
13 #define MI_MAX_NONPAGED_POOL_SIZE (128 * 1024 * 1024)
14 #define MI_MAX_FREE_PAGE_LISTS 4
15
16 #define MI_MIN_INIT_PAGED_POOLSIZE (32 * 1024 * 1024)
17
18 #define MI_SESSION_VIEW_SIZE (20 * 1024 * 1024)
19 #define MI_SESSION_POOL_SIZE (16 * 1024 * 1024)
20 #define MI_SESSION_IMAGE_SIZE (8 * 1024 * 1024)
21 #define MI_SESSION_WORKING_SET_SIZE (4 * 1024 * 1024)
22 #define MI_SESSION_SIZE (MI_SESSION_VIEW_SIZE + \
23 MI_SESSION_POOL_SIZE + \
24 MI_SESSION_IMAGE_SIZE + \
25 MI_SESSION_WORKING_SET_SIZE)
26
27 #define MI_SYSTEM_VIEW_SIZE (16 * 1024 * 1024)
28
29 #define MI_PAGED_POOL_START (PVOID)0xE1000000
30 #define MI_NONPAGED_POOL_END (PVOID)0xFFBE0000
31
32 //
33 // FIXFIX: These should go in ex.h after the pool merge
34 //
35 #define POOL_LISTS_PER_PAGE (PAGE_SIZE / sizeof(LIST_ENTRY))
36 #define BASE_POOL_TYPE_MASK 1
37 #define POOL_MAX_ALLOC (PAGE_SIZE - (sizeof(POOL_HEADER) + sizeof(LIST_ENTRY)))
38
39 typedef struct _POOL_DESCRIPTOR
40 {
41 POOL_TYPE PoolType;
42 ULONG PoolIndex;
43 ULONG RunningAllocs;
44 ULONG RunningDeAllocs;
45 ULONG TotalPages;
46 ULONG TotalBigPages;
47 ULONG Threshold;
48 PVOID LockAddress;
49 PVOID PendingFrees;
50 LONG PendingFreeDepth;
51 SIZE_T TotalBytes;
52 SIZE_T Spare0;
53 LIST_ENTRY ListHeads[POOL_LISTS_PER_PAGE];
54 } POOL_DESCRIPTOR, *PPOOL_DESCRIPTOR;
55
56 typedef struct _POOL_HEADER
57 {
58 union
59 {
60 struct
61 {
62 USHORT PreviousSize:9;
63 USHORT PoolIndex:7;
64 USHORT BlockSize:9;
65 USHORT PoolType:7;
66 };
67 ULONG Ulong1;
68 };
69 union
70 {
71 ULONG PoolTag;
72 struct
73 {
74 USHORT AllocatorBackTraceIndex;
75 USHORT PoolTagHash;
76 };
77 };
78 } POOL_HEADER, *PPOOL_HEADER;
79
80 //
81 // Everything depends on this
82 //
83 C_ASSERT(sizeof(POOL_HEADER) == 8);
84 C_ASSERT(sizeof(POOL_HEADER) == sizeof(LIST_ENTRY));
85
86 //
87 // END FIXFIX
88 //
89
90 typedef enum _MMSYSTEM_PTE_POOL_TYPE
91 {
92 SystemPteSpace,
93 NonPagedPoolExpansion,
94 MaximumPtePoolTypes
95 } MMSYSTEM_PTE_POOL_TYPE;
96
97 typedef enum _MI_PFN_CACHE_ATTRIBUTE
98 {
99 MiNonCached,
100 MiCached,
101 MiWriteCombined,
102 MiNotMapped
103 } MI_PFN_CACHE_ATTRIBUTE, *PMI_PFN_CACHE_ATTRIBUTE;
104
105 typedef struct _PHYSICAL_MEMORY_RUN
106 {
107 ULONG BasePage;
108 ULONG PageCount;
109 } PHYSICAL_MEMORY_RUN, *PPHYSICAL_MEMORY_RUN;
110
111 typedef struct _PHYSICAL_MEMORY_DESCRIPTOR
112 {
113 ULONG NumberOfRuns;
114 ULONG NumberOfPages;
115 PHYSICAL_MEMORY_RUN Run[1];
116 } PHYSICAL_MEMORY_DESCRIPTOR, *PPHYSICAL_MEMORY_DESCRIPTOR;
117
118 extern MMPTE HyperTemplatePte;
119
120 extern ULONG MmSizeOfNonPagedPoolInBytes;
121 extern ULONG MmMaximumNonPagedPoolInBytes;
122 extern PVOID MmNonPagedPoolStart;
123 extern PVOID MmNonPagedPoolExpansionStart;
124 extern PVOID MmNonPagedPoolEnd;
125 extern PMMPTE MmFirstReservedMappingPte, MmLastReservedMappingPte;
126 extern PMMPTE MiFirstReservedZeroingPte;
127 extern MI_PFN_CACHE_ATTRIBUTE MiPlatformCacheAttributes[2][MmMaximumCacheType];
128 extern PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock;
129 extern ULONG MmBootImageSize;
130 extern PMMPTE MmSystemPtesStart[MaximumPtePoolTypes];
131 extern PMMPTE MmSystemPtesEnd[MaximumPtePoolTypes];
132 extern PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor;
133 extern MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor;
134 extern ULONG MxPfnAllocation;
135 extern MM_PAGED_POOL_INFO MmPagedPoolInfo;
136
137 VOID
138 NTAPI
139 MiInitializeArmPool(
140 VOID
141 );
142
143 VOID //
144 NTAPI //
145 InitializePool( //
146 IN POOL_TYPE PoolType,// FIXFIX: This should go in ex.h after the pool merge
147 IN ULONG Threshold //
148 ); //
149
150 VOID
151 NTAPI
152 MiInitializeSystemPtes(
153 IN PMMPTE StartingPte,
154 IN ULONG NumberOfPtes,
155 IN MMSYSTEM_PTE_POOL_TYPE PoolType
156 );
157
158 PMMPTE
159 NTAPI
160 MiReserveSystemPtes(
161 IN ULONG NumberOfPtes,
162 IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType
163 );
164
165 VOID
166 NTAPI
167 MiReleaseSystemPtes(
168 IN PMMPTE StartingPte,
169 IN ULONG NumberOfPtes,
170 IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType
171 );
172
173
174 PFN_NUMBER
175 NTAPI
176 MiFindContiguousPages(
177 IN PFN_NUMBER LowestPfn,
178 IN PFN_NUMBER HighestPfn,
179 IN PFN_NUMBER BoundaryPfn,
180 IN PFN_NUMBER SizeInPages,
181 IN MEMORY_CACHING_TYPE CacheType
182 );
183
184 PVOID
185 NTAPI
186 MiCheckForContiguousMemory(
187 IN PVOID BaseAddress,
188 IN PFN_NUMBER BaseAddressPages,
189 IN PFN_NUMBER SizeInPages,
190 IN PFN_NUMBER LowestPfn,
191 IN PFN_NUMBER HighestPfn,
192 IN PFN_NUMBER BoundaryPfn,
193 IN MI_PFN_CACHE_ATTRIBUTE CacheAttribute
194 );
195
196 PMDL
197 NTAPI
198 MiAllocatePagesForMdl(
199 IN PHYSICAL_ADDRESS LowAddress,
200 IN PHYSICAL_ADDRESS HighAddress,
201 IN PHYSICAL_ADDRESS SkipBytes,
202 IN SIZE_T TotalBytes,
203 IN MI_PFN_CACHE_ATTRIBUTE CacheAttribute,
204 IN ULONG Flags
205 );
206
207 PVOID
208 NTAPI
209 MiMapLockedPagesInUserSpace(
210 IN PMDL Mdl,
211 IN PVOID BaseVa,
212 IN MEMORY_CACHING_TYPE CacheType,
213 IN PVOID BaseAddress
214 );
215
216 VOID
217 NTAPI
218 MiUnmapLockedPagesInUserSpace(
219 IN PVOID BaseAddress,
220 IN PMDL Mdl
221 );
222
223 /* EOF */