[KERNEL32]
[reactos.git] / reactos / ntoskrnl / mm / ARM3 / largepag.c
1 /*
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
7 */
8
9 /* INCLUDES *******************************************************************/
10
11 #include <ntoskrnl.h>
12 #define NDEBUG
13 #include <debug.h>
14
15 #line 15 "ARMĀ³::LARGEPAGE"
16 #define MODULE_INVOLVED_IN_ARM3
17 #include "../ARM3/miarm.h"
18
19 /* GLOBALS ********************************************************************/
20
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;
29
30 /* FUNCTIONS ******************************************************************/
31
32 VOID
33 NTAPI
34 MiInitializeLargePageSupport(VOID)
35 {
36 #if _MI_PAGING_LEVELS > 2
37 #error "PAE/x64 Not Implemented"
38 #else
39 /* Initialize the large-page hyperspace PTE used for initial mapping */
40 MiLargePageHyperPte = MiReserveSystemPtes(1, SystemPteSpace);
41 ASSERT(MiLargePageHyperPte);
42 MiLargePageHyperPte->u.Long = 0;
43
44 /* Initialize the process tracking list, and insert the system process */
45 InitializeListHead(&MmProcessList);
46 InsertTailList(&MmProcessList, &PsGetCurrentProcess()->MmProcessLinks);
47 #endif
48 }
49
50 VOID
51 NTAPI
52 MiSyncCachedRanges(VOID)
53 {
54 ULONG i;
55
56 /* Scan every range */
57 for (i = 0; i < MiLargePageRangeIndex; i++)
58 {
59 DPRINT1("No support for large pages\n");
60 while (TRUE);
61 }
62 }
63
64 VOID
65 NTAPI
66 MiInitializeDriverLargePageList(VOID)
67 {
68 PWCHAR p, pp;
69
70 /* Initialize the list */
71 InitializeListHead(&MiLargePageDriverList);
72
73 /* Bail out if there's nothing */
74 if (MmLargePageDriverBufferLength == 0xFFFFFFFF) return;
75
76 /* Loop from start to finish */
77 p = MmLargePageDriverBuffer;
78 pp = MmLargePageDriverBuffer + (MmLargePageDriverBufferLength / sizeof(WCHAR));
79 while (p < pp)
80 {
81 /* Skip whitespaces */
82 if ((*p == L' ') || (*p == L'\n') || (*p == L'\r') || (*p == L'\t'))
83 {
84 /* Skip the character */
85 p++;
86 continue;
87 }
88
89 /* A star means everything */
90 if (*p == L'*')
91 {
92 /* No need to keep going */
93 MiLargePageAllDrivers = TRUE;
94 break;
95 }
96
97 DPRINT1("Large page drivers not supported\n");
98 ASSERT(FALSE);
99 }
100 }
101
102 /* EOF */