- Major rewrite of Memory Descriptor List (MDL) implementation (moving it towards...
[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 typedef enum _MMSYSTEM_PTE_POOL_TYPE
17 {
18 SystemPteSpace,
19 NonPagedPoolExpansion,
20 MaximumPtePoolTypes
21 } MMSYSTEM_PTE_POOL_TYPE;
22
23 typedef enum _MI_PFN_CACHE_ATTRIBUTE
24 {
25 MiNonCached,
26 MiCached,
27 MiWriteCombined,
28 MiNotMapped
29 } MI_PFN_CACHE_ATTRIBUTE, *PMI_PFN_CACHE_ATTRIBUTE;
30
31 typedef struct _PHYSICAL_MEMORY_RUN
32 {
33 ULONG BasePage;
34 ULONG PageCount;
35 } PHYSICAL_MEMORY_RUN, *PPHYSICAL_MEMORY_RUN;
36
37 typedef struct _PHYSICAL_MEMORY_DESCRIPTOR
38 {
39 ULONG NumberOfRuns;
40 ULONG NumberOfPages;
41 PHYSICAL_MEMORY_RUN Run[1];
42 } PHYSICAL_MEMORY_DESCRIPTOR, *PPHYSICAL_MEMORY_DESCRIPTOR;
43
44 extern MMPTE HyperTemplatePte;
45
46 extern ULONG MmSizeOfNonPagedPoolInBytes;
47 extern ULONG MmMaximumNonPagedPoolInBytes;
48 extern PVOID MmNonPagedPoolStart;
49 extern PVOID MmNonPagedPoolExpansionStart;
50 extern PVOID MmNonPagedPoolEnd;
51 extern PMMPTE MmFirstReservedMappingPte, MmLastReservedMappingPte;
52 extern PMMPTE MiFirstReservedZeroingPte;
53 extern MI_PFN_CACHE_ATTRIBUTE MiPlatformCacheAttributes[2][MmMaximumCacheType];
54 extern PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock;
55 extern ULONG MmBootImageSize;
56 extern PMMPTE MmSystemPtesStart[MaximumPtePoolTypes];
57 extern PMMPTE MmSystemPtesEnd[MaximumPtePoolTypes];
58
59 VOID
60 NTAPI
61 MiInitializeArmPool(
62 VOID
63 );
64
65 VOID
66 NTAPI
67 MiInitializeSystemPtes(
68 IN PMMPTE StartingPte,
69 IN ULONG NumberOfPtes,
70 IN MMSYSTEM_PTE_POOL_TYPE PoolType
71 );
72
73 PMMPTE
74 NTAPI
75 MiReserveSystemPtes(
76 IN ULONG NumberOfPtes,
77 IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType
78 );
79
80 VOID
81 NTAPI
82 MiReleaseSystemPtes(
83 IN PMMPTE StartingPte,
84 IN ULONG NumberOfPtes,
85 IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType
86 );
87
88
89 PFN_NUMBER
90 NTAPI
91 MiFindContiguousPages(
92 IN PFN_NUMBER LowestPfn,
93 IN PFN_NUMBER HighestPfn,
94 IN PFN_NUMBER BoundaryPfn,
95 IN PFN_NUMBER SizeInPages,
96 IN MEMORY_CACHING_TYPE CacheType
97 );
98
99 PVOID
100 NTAPI
101 MiCheckForContiguousMemory(
102 IN PVOID BaseAddress,
103 IN PFN_NUMBER BaseAddressPages,
104 IN PFN_NUMBER SizeInPages,
105 IN PFN_NUMBER LowestPfn,
106 IN PFN_NUMBER HighestPfn,
107 IN PFN_NUMBER BoundaryPfn,
108 IN MI_PFN_CACHE_ATTRIBUTE CacheAttribute
109 );
110
111 PMDL
112 NTAPI
113 MiAllocatePagesForMdl(
114 IN PHYSICAL_ADDRESS LowAddress,
115 IN PHYSICAL_ADDRESS HighAddress,
116 IN PHYSICAL_ADDRESS SkipBytes,
117 IN SIZE_T TotalBytes,
118 IN MI_PFN_CACHE_ATTRIBUTE CacheAttribute,
119 IN ULONG Flags
120 );
121
122 PVOID
123 NTAPI
124 MiMapLockedPagesInUserSpace(
125 IN PMDL Mdl,
126 IN PVOID BaseVa,
127 IN MEMORY_CACHING_TYPE CacheType,
128 IN PVOID BaseAddress
129 );
130
131 VOID
132 NTAPI
133 MiUnmapLockedPagesInUserSpace(
134 IN PVOID BaseAddress,
135 IN PMDL Mdl
136 );
137
138 /* EOF */