[CMAKE]
[reactos.git] / ntoskrnl / cache / newcc.h
1 #pragma once
2
3 struct _MM_CACHE_SECTION_SEGMENT;
4
5 typedef struct _NOCC_BCB
6 {
7 /* Public part */
8 PUBLIC_BCB Bcb;
9
10 struct _NOCC_CACHE_MAP *Map;
11 struct _MM_CACHE_SECTION_SEGMENT *SectionObject;
12 LARGE_INTEGER FileOffset;
13 ULONG Length;
14 PVOID BaseAddress;
15 BOOLEAN Dirty;
16 PVOID OwnerPointer;
17
18 /* Reference counts */
19 ULONG RefCount;
20
21 LIST_ENTRY ThisFileList;
22
23 KEVENT ExclusiveWait;
24 ULONG ExclusiveWaiter;
25 BOOLEAN Exclusive;
26 } NOCC_BCB, *PNOCC_BCB;
27
28 typedef struct _NOCC_CACHE_MAP
29 {
30 LIST_ENTRY Entry;
31 LIST_ENTRY AssociatedBcb;
32 LIST_ENTRY PrivateCacheMaps;
33 ULONG NumberOfMaps;
34 ULONG RefCount;
35 CC_FILE_SIZES FileSizes;
36 CACHE_MANAGER_CALLBACKS Callbacks;
37 PVOID LazyContext;
38 PVOID LogHandle;
39 PFLUSH_TO_LSN FlushToLsn;
40 ULONG ReadAheadGranularity;
41 } NOCC_CACHE_MAP, *PNOCC_CACHE_MAP;
42
43 VOID
44 NTAPI
45 CcPfInitializePrefetcher(
46 VOID
47 );
48
49 VOID
50 NTAPI
51 CcMdlReadComplete2(
52 IN PMDL MemoryDescriptorList,
53 IN PFILE_OBJECT FileObject
54 );
55
56 VOID
57 NTAPI
58 CcMdlWriteComplete2(
59 IN PFILE_OBJECT FileObject,
60 IN PLARGE_INTEGER FileOffset,
61 IN PMDL MdlChain
62 );
63
64 VOID
65 NTAPI
66 CcInitView(VOID);
67
68 BOOLEAN
69 NTAPI
70 CcpUnpinData(PNOCC_BCB Bcb, BOOLEAN ActuallyRelease);
71
72 BOOLEAN
73 NTAPI
74 CcInitializeCacheManager(VOID);
75
76 VOID
77 NTAPI
78 CcShutdownSystem();
79
80 VOID
81 NTAPI
82 CcInitCacheZeroPage(VOID);
83
84 /* Called by section.c */
85 BOOLEAN
86 NTAPI
87 CcFlushImageSection(PSECTION_OBJECT_POINTERS SectionObjectPointer, MMFLUSH_TYPE FlushType);
88
89 VOID
90 NTAPI
91 _CcpFlushCache
92 (IN PNOCC_CACHE_MAP Map,
93 IN OPTIONAL PLARGE_INTEGER FileOffset,
94 IN ULONG Length,
95 OUT OPTIONAL PIO_STATUS_BLOCK IoStatus,
96 BOOLEAN Delete,
97 const char *File,
98 int Line);
99
100 #define CcpFlushCache(M,F,L,I,D) _CcpFlushCache(M,F,L,I,D,__FILE__,__LINE__)
101
102 BOOLEAN
103 NTAPI
104 CcGetFileSizes(PFILE_OBJECT FileObject, PCC_FILE_SIZES FileSizes);
105
106 ULONG
107 NTAPI
108 CcpCountCacheSections(PNOCC_CACHE_MAP Map);
109
110 BOOLEAN
111 NTAPI
112 CcpAcquireFileLock(PNOCC_CACHE_MAP Map);
113
114 VOID
115 NTAPI
116 CcpReleaseFileLock(PNOCC_CACHE_MAP Map);
117
118 /*
119 * Macro for generic cache manage bugchecking. Note that this macro assumes
120 * that the file name including extension is always longer than 4 characters.
121 */
122 #define KEBUGCHECKCC \
123 KEBUGCHECKEX(CACHE_MANAGER, \
124 (*(ULONG*)(__FILE__ + sizeof(__FILE__) - 4) << 16) | \
125 (__LINE__ & 0xFFFF), 0, 0, 0)
126
127 /* Private data */
128
129 #define CACHE_SINGLE_FILE_MAX (16)
130 #define CACHE_OVERALL_SIZE (32 * 1024 * 1024)
131 #define CACHE_STRIPE VACB_MAPPING_GRANULARITY
132 #define CACHE_SHIFT 18
133 #define CACHE_NUM_SECTIONS (CACHE_OVERALL_SIZE / CACHE_STRIPE)
134 #define CACHE_ROUND_UP(x) (((x) + (CACHE_STRIPE-1)) & ~(CACHE_STRIPE-1))
135 #define CACHE_ROUND_DOWN(x) ((x) & ~(CACHE_STRIPE-1))
136 #define INVALID_CACHE ((ULONG)~0)
137
138 extern NOCC_BCB CcCacheSections[CACHE_NUM_SECTIONS];
139 extern PRTL_BITMAP CcCacheBitmap;
140 extern FAST_MUTEX CcMutex;
141 extern KEVENT CcDeleteEvent;
142 extern ULONG CcCacheClockHand;
143 extern LIST_ENTRY CcPendingUnmap;
144 extern KEVENT CcpLazyWriteEvent;
145
146 #define CcpLock() _CcpLock(__FILE__,__LINE__)
147 #define CcpUnlock() _CcpUnlock(__FILE__,__LINE__)
148
149 extern VOID _CcpLock(const char *file, int line);
150 extern VOID _CcpUnlock(const char *file, int line);
151
152 extern VOID CcpReferenceCache(ULONG Sector);
153 extern VOID CcpDereferenceCache(ULONG Sector, BOOLEAN Immediate);
154 BOOLEAN
155 NTAPI
156 CcpMapData
157 (IN PFILE_OBJECT FileObject,
158 IN PLARGE_INTEGER FileOffset,
159 IN ULONG Length,
160 IN ULONG Flags,
161 OUT PVOID *BcbResult,
162 OUT PVOID *Buffer);
163
164 BOOLEAN
165 NTAPI
166 CcpPinMappedData(IN PNOCC_CACHE_MAP Map,
167 IN PLARGE_INTEGER FileOffset,
168 IN ULONG Length,
169 IN ULONG Flags,
170 IN OUT PVOID *Bcb);