2 * PROJECT: ReactOS Kernel
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * FILE: ntoskrnl/mm/ARM3/largepag.c
5 * PURPOSE: ARM Memory Manager Large Page Support
6 * PROGRAMMERS: ReactOS Portable Systems Group
9 /* INCLUDES *******************************************************************/
15 #line 15 "ARMĀ³::LARGEPAGE"
16 #define MODULE_INVOLVED_IN_ARM3
17 #include "../ARM3/miarm.h"
19 /* GLOBALS ********************************************************************/
21 LIST_ENTRY MmProcessList
;
22 PMMPTE MiLargePageHyperPte
;
23 ULONG MiLargePageRangeIndex
;
24 MI_LARGE_PAGE_RANGES MiLargePageRanges
[64];
25 WCHAR MmLargePageDriverBuffer
[512] = {0};
26 ULONG MmLargePageDriverBufferLength
= -1;
27 LIST_ENTRY MiLargePageDriverList
;
28 BOOLEAN MiLargePageAllDrivers
;
30 /* FUNCTIONS ******************************************************************/
34 MiInitializeLargePageSupport(VOID
)
36 #if _MI_PAGING_LEVELS > 2
37 #error "PAE/x64 Not Implemented"
39 /* Initialize the large-page hyperspace PTE used for initial mapping */
40 MiLargePageHyperPte
= MiReserveSystemPtes(1, SystemPteSpace
);
41 ASSERT(MiLargePageHyperPte
);
42 MiLargePageHyperPte
->u
.Long
= 0;
44 /* Initialize the process tracking list, and insert the system process */
45 InitializeListHead(&MmProcessList
);
46 InsertTailList(&MmProcessList
, &PsGetCurrentProcess()->MmProcessLinks
);
52 MiSyncCachedRanges(VOID
)
56 /* Scan every range */
57 for (i
= 0; i
< MiLargePageRangeIndex
; i
++)
59 DPRINT1("No support for large pages\n");
66 MiInitializeDriverLargePageList(VOID
)
70 /* Initialize the list */
71 InitializeListHead(&MiLargePageDriverList
);
73 /* Bail out if there's nothing */
74 if (MmLargePageDriverBufferLength
== 0xFFFFFFFF) return;
76 /* Loop from start to finish */
77 p
= MmLargePageDriverBuffer
;
78 pp
= MmLargePageDriverBuffer
+ (MmLargePageDriverBufferLength
/ sizeof(WCHAR
));
81 /* Skip whitespaces */
82 if ((*p
== L
' ') || (*p
== L
'\n') || (*p
== L
'\r') || (*p
== L
'\t'))
84 /* Skip the character */
89 /* A star means everything */
92 /* No need to keep going */
93 MiLargePageAllDrivers
= TRUE
;
97 DPRINT1("Large page drivers not supported\n");