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