8303dd9dd89464f18f278675c2f600f5da1cdffe
[reactos.git] / ntoskrnl / cc / cacheman.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: ntoskrnl/cc/cacheman.c
5 * PURPOSE: Cache manager
6 *
7 * PROGRAMMERS: David Welch (welch@cwcom.net)
8 * Pierre Schweitzer (pierre@reactos.org)
9 */
10
11 /* INCLUDES *****************************************************************/
12
13 #include <ntoskrnl.h>
14 #define NDEBUG
15 #include <debug.h>
16
17 BOOLEAN CcPfEnablePrefetcher;
18 PFSN_PREFETCHER_GLOBALS CcPfGlobals;
19
20 /* FUNCTIONS *****************************************************************/
21
22 VOID
23 NTAPI
24 INIT_FUNCTION
25 CcPfInitializePrefetcher(VOID)
26 {
27 /* Notify debugger */
28 DbgPrintEx(DPFLTR_PREFETCHER_ID,
29 DPFLTR_TRACE_LEVEL,
30 "CCPF: InitializePrefetecher()\n");
31
32 /* Setup the Prefetcher Data */
33 InitializeListHead(&CcPfGlobals.ActiveTraces);
34 InitializeListHead(&CcPfGlobals.CompletedTraces);
35 ExInitializeFastMutex(&CcPfGlobals.CompletedTracesLock);
36
37 /* FIXME: Setup the rest of the prefetecher */
38 }
39
40 BOOLEAN
41 NTAPI
42 INIT_FUNCTION
43 CcInitializeCacheManager(VOID)
44 {
45 return CcInitView();
46 }
47
48 VOID
49 NTAPI
50 CcShutdownSystem(VOID)
51 {
52 /* Inform the lazy writer it has to stop activity */
53 CcShutdownLazyWriter();
54 }
55
56 /*
57 * @unimplemented
58 */
59 LARGE_INTEGER
60 NTAPI
61 CcGetFlushedValidData (
62 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
63 IN BOOLEAN BcbListHeld
64 )
65 {
66 LARGE_INTEGER i;
67
68 UNIMPLEMENTED;
69
70 i.QuadPart = 0;
71 return i;
72 }
73
74 /*
75 * @unimplemented
76 */
77 PVOID
78 NTAPI
79 CcRemapBcb (
80 IN PVOID Bcb
81 )
82 {
83 UNIMPLEMENTED;
84
85 return 0;
86 }
87
88 /*
89 * @unimplemented
90 */
91 VOID
92 NTAPI
93 CcScheduleReadAhead (
94 IN PFILE_OBJECT FileObject,
95 IN PLARGE_INTEGER FileOffset,
96 IN ULONG Length
97 )
98 {
99 UNIMPLEMENTED;
100 }
101
102 /*
103 * @unimplemented
104 */
105 VOID
106 NTAPI
107 CcSetAdditionalCacheAttributes (
108 IN PFILE_OBJECT FileObject,
109 IN BOOLEAN DisableReadAhead,
110 IN BOOLEAN DisableWriteBehind
111 )
112 {
113 CCTRACE(CC_API_DEBUG, "FileObject=%p DisableReadAhead=%d DisableWriteBehind=%d\n",
114 FileObject, DisableReadAhead, DisableWriteBehind);
115
116 UNIMPLEMENTED;
117 }
118
119 /*
120 * @unimplemented
121 */
122 VOID
123 NTAPI
124 CcSetBcbOwnerPointer (
125 IN PVOID Bcb,
126 IN PVOID Owner
127 )
128 {
129 PINTERNAL_BCB iBcb = Bcb;
130
131 CCTRACE(CC_API_DEBUG, "Bcb=%p Owner=%p\n",
132 Bcb, Owner);
133
134 if (!ExIsResourceAcquiredExclusiveLite(&iBcb->Lock) && !ExIsResourceAcquiredSharedLite(&iBcb->Lock))
135 {
136 DPRINT1("Current thread doesn't own resource!\n");
137 return;
138 }
139
140 ExSetResourceOwnerPointer(&iBcb->Lock, Owner);
141 }
142
143 /*
144 * @implemented
145 */
146 VOID
147 NTAPI
148 CcSetDirtyPageThreshold (
149 IN PFILE_OBJECT FileObject,
150 IN ULONG DirtyPageThreshold
151 )
152 {
153 PFSRTL_COMMON_FCB_HEADER Fcb;
154 PROS_SHARED_CACHE_MAP SharedCacheMap;
155
156 CCTRACE(CC_API_DEBUG, "FileObject=%p DirtyPageThreshold=%lu\n",
157 FileObject, DirtyPageThreshold);
158
159 SharedCacheMap = FileObject->SectionObjectPointer->SharedCacheMap;
160 if (SharedCacheMap != NULL)
161 {
162 SharedCacheMap->DirtyPageThreshold = DirtyPageThreshold;
163 }
164
165 Fcb = FileObject->FsContext;
166 if (!BooleanFlagOn(Fcb->Flags, FSRTL_FLAG_LIMIT_MODIFIED_PAGES))
167 {
168 SetFlag(Fcb->Flags, FSRTL_FLAG_LIMIT_MODIFIED_PAGES);
169 }
170 }
171
172 /*
173 * @unimplemented
174 */
175 VOID
176 NTAPI
177 CcSetReadAheadGranularity (
178 IN PFILE_OBJECT FileObject,
179 IN ULONG Granularity
180 )
181 {
182 static ULONG Warn;
183
184 CCTRACE(CC_API_DEBUG, "FileObject=%p Granularity=%lu\n",
185 FileObject, Granularity);
186
187 if (!Warn++) UNIMPLEMENTED;
188 }