update #4 - router
[tomato.git] / release / src / router / ufsd / broadcom_arm / package / ifslinux / fs_conf.h
blobfec00e5ee177b4b324c44efc8e7e227734f91e3f
1 /*++
3 Module Name:
5 fs_conf.h
7 Abstract:
9 This module is a forced include file
10 for entire UFSD-based project.
12 Author:
14 Ahdrey Shedel
16 Revision History:
18 27/12/2002 - Andrey Shedel - Created
20 Since 29/07/2005 - Alexander Mamaev
22 --*/
26 #ifndef __linux__
27 #define __linux__
28 #endif
31 // Tune the UFSD library.
35 // This define allows to exclude part of library not used in driver
37 #define UFSD_DRIVER_LINUX
40 // Force to use additional thread for periodically volume flush
42 //#define UFSD_USE_FLUSH_THREAD
45 // Do not include extended I/O code
46 // Some of the utilities (e.g. fsutil) uses
47 // this I/O codes to get usefull information
49 //#define UFSD_NO_USE_IOCTL
51 #ifndef UFSD_NO_USE_IOCTL
53 // /proc/fs/ufsd/<volume> contains NTFS read/write statistics
55 //#define UFSD_NTFS_STAT
56 #endif
59 // Library never allocates a lot of memory
60 // This defines turns off checking of malloc
62 #define UFSD_MALLOC_CANT_FAIL
65 // Do not allow CRT calls to be used directly from library
66 // When UFSD_NO_CRT_USE is defined then UFSD uses CMemoryManager's
67 // functions Memset/Memcpy instead of intrinsic
69 //#define UFSD_NO_CRT_USE
73 // Exclude code that supports User/Group/Mode emulation in NTFS
75 //#define UFSD_DISABLE_UGM "Turn off $UGM"
78 // Activate this define to check media every write operation
80 //#define UFSD_CHECK_BDI
83 // NTFS uses 64 bit cluster (Win7.x64 still uses 32bit clusters)
85 //#define UFSD_NTFS_64BIT_CLUSTER
88 // Bitmap uses a saved fragments to speed up look for free space
90 // #define USE_ADVANCED_WND_BITMAP
93 // This driver ignores short names. Speed up directory enumeration
95 #define UFSD_IGNORE_SHORTNAMES
98 // By default driver frees memory in flush
100 //#define UFSD_EXFAT_KEEP_BUFFERS "Keep buffers in Flush"
102 //#define UFSD_EXFAT_RECORDS_HASHBITS 16
104 //#define UFSD_NTFS_RECORDS_HASHBITS 16
107 // Do not load all bitmap at mount
109 //#define USE_DELAY_BITMAP_LOAD
112 // Use 'UFSD_BdZero' to zero range of bytes
114 //#define UFSD_USE_BUILTIN_ZEROING "Use built in zeroing"
117 // Exclude annoying messages while tests
119 //#define UFSD_TRACE_SILENT
122 // Force to activate trace
124 //#define UFSD_TRACE
126 #if !defined UFSD_DEBUG && !defined NDEBUG
127 #define UFSD_DEBUG 1
128 #endif
130 #if defined UFSD_DEBUG && !defined UFSD_TRACE
131 #define UFSD_TRACE
132 #endif
134 #if defined(i386)
135 #define UFSDAPI_CALL __attribute__((regparm(3)))
136 #define UFSDAPI_CALLv __attribute__((cdecl)) __attribute__((regparm(0)))
137 #else
138 #define UFSDAPI_CALL
139 #define UFSDAPI_CALLv
140 #endif
142 #ifdef __cplusplus
143 extern "C" {
144 #endif
147 // UFSD_NO_PRINTK - external define to off UFSD_printk from library
149 #ifndef UFSD_NO_PRINTK
151 // Trace message in system log
153 UFSDAPI_CALLv int UFSD_printk( const char* fmt, ... ) __attribute__ ((format (printf, 1, 2)));
154 #define UFSDTracek(a) UFSD_printk a
155 #else
156 #define UFSDTracek(a)
157 #endif
160 #ifdef UFSD_TRACE
163 // _UFSDTrace is used to trace messages from UFSD
164 // UFSDError is called when error occurs
166 UFSDAPI_CALL void UFSDError( int Err, const char* FileName, int Line );
167 UFSDAPI_CALLv void _UFSDTrace( const char* fmt, ... ) __attribute__ ((format (printf, 1, 2)));
168 extern char ufsd_trace_file[128];
169 extern char ufsd_trace_level[16];
170 extern unsigned long UFSD_TraceLevel;
171 extern unsigned long UFSD_CycleMB;
173 #define UFSD_TRACE_NTFS_RW // trace read/write operation (Used by UFSD_SDK).
174 #define UFSD_TRACE_NTFS_DIR // trace directory enumeration (Used by UFSD_SDK).
175 #define UFSD_NTFS_EXTRA_LOG
176 #define UFSD_TRACE_NTFS_JOURNAL
177 #define UFSD_TRACE_HFS_RW
178 #define UFSD_TRACE_HFS_DIR
179 #define UFSD_TRACE_HFS_JOURNAL
180 #define UFSD_TRACE_FAT_DIR
181 #define UFSD_TRACE_EXFAT_RW
182 #define UFSD_TRACE_EXFAT_DIR
183 #define UFSD_EXFAT_EXTRA_LOG
184 #define UFSD_TRACE_REFS_DIR
185 #define UFSD_TRACE_REFS_RW
187 #ifdef UFSD_DEBUG
188 #define UFSD_NTFS_LOG
189 #define UFSD_FAT_LOG
190 #define UFSD_EXFAT_LOG
191 #define UFSD_HFS_LOG
192 #define UFSD_PROFILE // Profiler puts results into trace
193 #endif
195 #define UFSD_LEVEL_ALWAYS 0x00000000
196 #define UFSD_LEVEL_ERROR 0x00000001
197 #define UFSD_LEVEL_DEBUG_HOOKS 0x00000002
198 #define UFSD_LEVEL_UFSD 0x00000010
199 #define UFSD_LEVEL_UFSDAPI 0x00000080
200 #define UFSD_LEVEL_VFS 0x00002000
201 #define UFSD_LEVEL_VFS_WBWE 0x00004000
202 #define UFSD_LEVEL_VFS_GETBLK 0x00008000
203 // highest one contains VERY expensive log.
204 #define UFSD_LEVEL_PAGE_BH 0x10000000
205 #define UFSD_LEVEL_IO 0x20000000
206 #define UFSD_LEVEL_SEMA 0x40000000
207 #define UFSD_LEVEL_MEMMNGR 0x80000000
209 // "all"
210 #define UFSD_LEVEL_STR_ALL ~(UFSD_LEVEL_VFS_WBWE|UFSD_LEVEL_MEMMNGR|UFSD_LEVEL_IO|UFSD_LEVEL_UFSDAPI)
211 // "vfs"
212 #define UFSD_LEVEL_STR_VFS (UFSD_LEVEL_SEMA|UFSD_LEVEL_PAGE_BH|UFSD_LEVEL_VFS|UFSD_LEVEL_VFS_GETBLK|UFSD_LEVEL_ERROR)
213 // "lib"
214 #define UFSD_LEVEL_STR_LIB (UFSD_LEVEL_UFSD|UFSD_LEVEL_ERROR)
215 // "mid"
216 #define UFSD_LEVEL_STR_MID (UFSD_LEVEL_VFS|UFSD_LEVEL_UFSD|UFSD_LEVEL_ERROR)
219 #define UFSD_LEVEL_DEFAULT 0x0000000f
221 UFSDAPI_CALL void UFSD_TraceInc( int Indent );
223 #define UFSDTrace(a) \
224 do { \
225 if ( UFSD_TraceLevel & UFSD_LEVEL_UFSD ) \
226 _UFSDTrace a; \
227 } while((void)0,0)
229 #define DebugTrace(INDENT,LEVEL,X) \
230 do { \
231 if ( 0 != (LEVEL) && !( UFSD_TraceLevel & (LEVEL) ) ) \
232 break; \
233 if ( (INDENT) < 0 ) \
234 UFSD_TraceInc( (INDENT) ); \
235 _UFSDTrace X; \
236 if ( (INDENT) > 0 ) \
237 UFSD_TraceInc( (INDENT) ); \
238 } while((void)0,0)
240 #define TRACE_ONLY(e) e
242 #else
243 #define UFSDTrace(a) do{}while((void)0,0)
244 #define DebugTrace(i, l, x) do{}while((void)0,0)
245 #define TRACE_ONLY(e)
246 #endif
249 #ifdef UFSD_DEBUG
250 UFSDAPI_CALL void _UFSD_DumpStack( void );
251 UFSDAPI_CALL void _UFSD_TurnOnTraceLevel( void );
252 UFSDAPI_CALL void _UFSD_RevertTraceLevel( void );
253 #define UFSD_DumpStack() _UFSD_DumpStack()
254 #define UFSD_TurnOnTraceLevel() _UFSD_TurnOnTraceLevel()
255 #define UFSD_RevertTraceLevel() _UFSD_RevertTraceLevel()
257 #define assert(cond) { \
258 if (!(cond)) { \
259 _UFSDTrace( "***** assertion failed at " \
260 __FILE__", %u: '%s'\n", __LINE__ , #cond); \
264 #define verify(cond) assert(cond)
266 #define DEBUG_ONLY(e) e
267 #else
268 #define assert(cond) NOTHING;
269 #define verify(cond) {(void)(cond);}
270 #define DEBUG_ONLY(e)
271 #endif
274 #if defined UFSD_HFS
275 struct buffer_head;
276 struct page;
277 struct inode;
278 struct super_block;
280 typedef unsigned long long UINT64;
281 #include "jnl.h"
282 #endif
284 #define PIN_BUFFER ((const void*)(size_t)0)
285 #define UNPIN_BUFFER ((const void*)(size_t)1)
286 #define MINUS_ONE_BUFFER ((const void*)(size_t)2)
288 #ifndef Add2Ptr
289 #define Add2Ptr(P,I) ((unsigned char*)(P) + (I))
290 #define PtrOffset(B,O) ((size_t)((size_t)(O) - (size_t)(B)))
291 #endif
294 // static assert in gcc since 4.3, requires -std=c++0x
296 #if defined __cplusplus && __cplusplus >= 201103L
297 #define C_ASSERT(e) static_assert( e, #e )
298 #else
299 #define C_ASSERT(e) typedef char _C_ASSERT_[(e)?1:-1]
300 #endif
303 #ifndef UNREFERENCED_PARAMETER
304 #define UNREFERENCED_PARAMETER(P) {(void)(P);}
305 #endif
307 #define UFSD_ERROR_DEFINED // UFSDError is already declared
308 #define _VERSIONS_H_ // Exclude configuration part of file versions.h
310 void UFSDAPI_CALL UFSD_BdInvalidate( void* Sb );
312 #define UFSD_BdInvalidate UFSD_BdInvalidate
314 #ifdef __cplusplus
315 } // extern "C"{
316 #endif