1 /*
2  *
3  *   Copyright (c) International Business Machines  Corp., 2000,2002
4  *   Modified by Steve French (sfrench@us.ibm.com)
5  *
6  *   This program is free software;  you can redistribute it and/or modify
7  *   it under the terms of the GNU General Public License as published by
8  *   the Free Software Foundation; either version 2 of the License, or
9  *   (at your option) any later version.
10  *
11  *   This program is distributed in the hope that it will be useful,
12  *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
13  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
14  *   the GNU General Public License for more details.
15  *
16  *   You should have received a copy of the GNU General Public License
17  *   along with this program;  if not, write to the Free Software
18  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19  *
20 */
21 
22 #ifndef _H_CIFS_DEBUG
23 #define _H_CIFS_DEBUG
24 
25 void cifs_dump_mem(char *label, void *data, int length);
26 void cifs_dump_detail(void *buf, struct TCP_Server_Info *ptcp_info);
27 void cifs_dump_mids(struct TCP_Server_Info *);
28 extern bool traceSMB;		/* flag which enables the function below */
29 void dump_smb(void *, int);
30 #define CIFS_INFO	0x01
31 #define CIFS_RC		0x02
32 #define CIFS_TIMER	0x04
33 
34 #define VFS 1
35 #define FYI 2
36 extern int cifsFYI;
37 #ifdef CONFIG_CIFS_DEBUG2
38 #define NOISY 4
39 #else
40 #define NOISY 0
41 #endif
42 #define ONCE 8
43 
44 /*
45  *	debug ON
46  *	--------
47  */
48 #ifdef CONFIG_CIFS_DEBUG
49 
50 /* information message: e.g., configuration, major event */
51 #define cifs_dbg_func(ratefunc, type, fmt, ...)			\
52 do {								\
53 	if ((type) & FYI && cifsFYI & CIFS_INFO) {		\
54 		pr_debug_ ## ratefunc("%s: "			\
55 				fmt, __FILE__, ##__VA_ARGS__);	\
56 	} else if ((type) & VFS) {				\
57 		pr_err_ ## ratefunc("CIFS VFS: "		\
58 				 fmt, ##__VA_ARGS__);		\
59 	} else if ((type) & NOISY && (NOISY != 0)) {		\
60 		pr_debug_ ## ratefunc(fmt, ##__VA_ARGS__);	\
61 	}							\
62 } while (0)
63 
64 #define cifs_dbg(type, fmt, ...) \
65 do {							\
66 	if ((type) & ONCE)				\
67 		cifs_dbg_func(once,			\
68 			 type, fmt, ##__VA_ARGS__);	\
69 	else						\
70 		cifs_dbg_func(ratelimited,		\
71 			type, fmt, ##__VA_ARGS__);	\
72 } while (0)
73 
74 /*
75  *	debug OFF
76  *	---------
77  */
78 #else		/* _CIFS_DEBUG */
79 #define cifs_dbg(type, fmt, ...)					\
80 do {									\
81 	if (0)								\
82 		pr_debug(fmt, ##__VA_ARGS__);				\
83 } while (0)
84 #endif
85 
86 #endif				/* _H_CIFS_DEBUG */
87