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 #define MODULE_INVOLVED_IN_ARM3
16 #include <mm/ARM3/miarm.h>
18 /* GLOBALS ********************************************************************/
20 LIST_ENTRY MmProcessList
;
21 PMMPTE MiLargePageHyperPte
;
22 ULONG MiLargePageRangeIndex
;
23 MI_LARGE_PAGE_RANGES MiLargePageRanges
[64];
24 WCHAR MmLargePageDriverBuffer
[512] = {0};
25 ULONG MmLargePageDriverBufferLength
= -1;
26 LIST_ENTRY MiLargePageDriverList
;
27 BOOLEAN MiLargePageAllDrivers
;
29 /* FUNCTIONS ******************************************************************/
34 MiInitializeLargePageSupport(VOID
)
36 #if _MI_PAGING_LEVELS > 2
37 DPRINT1("MiInitializeLargePageSupport: PAE/x64 Not Implemented\n");
40 /* Initialize the large-page hyperspace PTE used for initial mapping */
41 MiLargePageHyperPte
= MiReserveSystemPtes(1, SystemPteSpace
);
42 ASSERT(MiLargePageHyperPte
);
43 MiLargePageHyperPte
->u
.Long
= 0;
45 /* Initialize the process tracking list, and insert the system process */
46 InitializeListHead(&MmProcessList
);
47 InsertTailList(&MmProcessList
, &PsGetCurrentProcess()->MmProcessLinks
);
54 MiSyncCachedRanges(VOID
)
58 /* Scan every range */
59 for (i
= 0; i
< MiLargePageRangeIndex
; i
++)
61 UNIMPLEMENTED_DBGBREAK("No support for large pages\n");
68 MiInitializeDriverLargePageList(VOID
)
72 /* Initialize the list */
73 InitializeListHead(&MiLargePageDriverList
);
75 /* Bail out if there's nothing */
76 if (MmLargePageDriverBufferLength
== 0xFFFFFFFF) return;
78 /* Loop from start to finish */
79 p
= MmLargePageDriverBuffer
;
80 pp
= MmLargePageDriverBuffer
+ (MmLargePageDriverBufferLength
/ sizeof(WCHAR
));
83 /* Skip whitespaces */
84 if ((*p
== L
' ') || (*p
== L
'\n') || (*p
== L
'\r') || (*p
== L
'\t'))
86 /* Skip the character */
91 /* A star means everything */
94 /* No need to keep going */
95 MiLargePageAllDrivers
= TRUE
;
99 DPRINT1("Large page drivers not supported\n");