1 /*-
2  * Copyright(c) 2002-2011 Exar Corp.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification are permitted provided the following conditions are met:
7  *
8  *    1. Redistributions of source code must retain the above copyright notice,
9  *       this list of conditions and the following disclaimer.
10  *
11  *    2. Redistributions in binary form must reproduce the above copyright
12  *       notice, this list of conditions and the following disclaimer in the
13  *       documentation and/or other materials provided with the distribution.
14  *
15  *    3. Neither the name of the Exar Corporation nor the names of its
16  *       contributors may be used to endorse or promote products derived from
17  *       this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 /*$FreeBSD: stable/10/sys/dev/vxge/include/vxge-os-debug.h 221167 2011-04-28 14:33:15Z gnn $*/
32 
33 #ifndef	VXGE_OS_DEBUG_H
34 #define	VXGE_OS_DEBUG_H
35 
36 __EXTERN_BEGIN_DECLS
37 
38 #ifndef	VXGE_DEBUG_INLINE_FUNCTIONS
39 
40 #if defined(VXGE_TRACE_INTO_CIRCULAR_ARR)
41 #define	vxge_trace_aux(hldev, vpid, fmt, ...)				\
42 		vxge_os_vasprintf(hldev, vpid, fmt, __VA_ARGS__)
43 #else
44 #define	vxge_trace_aux(hldev, vpid, fmt, ...)				\
45 		vxge_os_vaprintf(hldev, vpid, fmt, __VA_ARGS__)
46 #endif
47 
48 #define	vxge_debug(module, level, hldev, vpid, fmt, ...)		\
49 {									\
50 	if (((u32)level <=						\
51 		((vxge_hal_device_t *)hldev)->debug_level) &&		\
52 	    ((u32)module &						\
53 		((vxge_hal_device_t *)hldev)->debug_module_mask))	\
54 			vxge_trace_aux((vxge_hal_device_h)hldev,	\
55 					vpid, fmt, __VA_ARGS__);	\
56 }
57 
58 /*
59  * vxge_debug_driver
60  * @level: level of debug verbosity.
61  * @hldev: HAL Device
62  * @vpid: Vpath id
63  * @fmt: printf like format string
64  *
65  * Provides logging facilities for OS Dependent functions. Can be customized
66  * with debug levels. Input parameters, except level, are the same
67  * as posix printf. This function may be compiled out if DEBUG macro
68  * was never defined.
69  * See also: vxge_debug_level_e{}.
70  */
71 #if (VXGE_COMPONENT_HAL_DRIVER & VXGE_DEBUG_MODULE_MASK)
72 #define	vxge_debug_driver(level, hldev, vpid, fmt, ...)		    \
73 	if ((u32)level <= g_debug_level)			    \
74 		vxge_os_vaprintf((vxge_hal_device_h)hldev,	    \
75 				vpid, fmt, __VA_ARGS__);
76 #else
77 #define	vxge_debug_driver(level, hldev, vpid, fmt, ...)
78 #endif
79 
80 /*
81  * vxge_debug_osdep
82  * @level: level of debug verbosity.
83  * @hldev: HAL Device
84  * @vpid: Vpath id
85  * @fmt: printf like format string
86  *
87  * Provides logging facilities for OS Dependent functions. Can be customized
88  * with debug levels. Input parameters, except level, are the same
89  * as posix printf. This function may be compiled out if DEBUG macro
90  * was never defined.
91  * See also: vxge_debug_level_e{}.
92  */
93 #if (VXGE_COMPONENT_OSDEP & VXGE_DEBUG_MODULE_MASK)
94 #define	vxge_debug_osdep(level, hldev, vpid, fmt, ...) \
95 	vxge_debug(VXGE_COMPONENT_OSDEP, level, hldev, vpid, fmt, __VA_ARGS__)
96 #else
97 #define	vxge_debug_osdep(level, hldev, vpid, fmt, ...)
98 #endif
99 
100 /*
101  * vxge_debug_ll
102  * @level: level of debug verbosity.
103  * @hldev: HAL Device
104  * @vpid: Vpath id
105  * @fmt: printf like format string
106  *
107  * Provides logging facilities for LL driver. Can be customized
108  * with debug levels. Input parameters, except level, are the same
109  * as posix printf. This function may be compiled out if DEBUG macro
110  * was never defined.
111  * See also: vxge_debug_level_e{}.
112  */
113 #if (VXGE_COMPONENT_LL & VXGE_DEBUG_MODULE_MASK)
114 #define	vxge_debug_ll(level, hldev, vpid, fmt, ...) \
115 	vxge_debug(VXGE_COMPONENT_LL, level, hldev, vpid, fmt, __VA_ARGS__)
116 #else
117 #define	vxge_debug_ll(level, hldev, vpid, fmt, ...)
118 #endif
119 
120 /*
121  * vxge_debug_uld
122  * @component: The Component mask
123  * @level: level of debug verbosity.
124  * @hldev: HAL Device
125  * @vpid: Vpath id
126  * @fmt: printf like format string
127  *
128  * Provides logging facilities for LL driver. Can be customized
129  * with debug levels. Input parameters, except level, are the same
130  * as posix printf. This function may be compiled out if DEBUG macro
131  * was never defined.
132  * See also: vxge_debug_level_e{}.
133  */
134 #if (VXGE_COMPONENT_ULD & VXGE_DEBUG_MODULE_MASK)
135 #define	vxge_debug_uld(component, level, hldev, vpid, fmt, ...) \
136 	vxge_debug(component, level, hldev, vpid, fmt, __VA_ARGS__)
137 #else
138 #define	vxge_debug_uld(level, hldev, vpid, fmt, ...)
139 #endif
140 
141 #else	/* VXGE_DEBUG_INLINE_FUNCTIONS */
142 
143 #if defined(VXGE_TRACE_INTO_CIRCULAR_ARR)
144 #define	vxge_trace_aux(hldev, vpid, fmt)				\
145 		vxge_os_vasprintf(hldev, vpid, fmt)
146 #else
147 #define	vxge_trace_aux(hldev, vpid, fmt)				\
148 		vxge_os_vaprintf(hldev, vpid, fmt)
149 #endif
150 
151 #define	vxge_debug(module, level, hldev, vpid, fmt)			    \
152 {									    \
153 	if (((u32)level <= ((vxge_hal_device_t *)hldev)->debug_level) &&    \
154 	    ((u32)module & ((vxge_hal_device_t *)hldev)->debug_module_mask))\
155 		vxge_trace_aux((vxge_hal_device_h)hldev, vpid, fmt);	    \
156 }
157 
158 /*
159  * vxge_debug_driver
160  * @level: level of debug verbosity.
161  * @hldev: HAL Device
162  * @vpid: Vpath id
163  * @fmt: printf like format string
164  *
165  * Provides logging facilities for OS Dependent functions. Can be customized
166  * with debug levels. Input parameters, except level, are the same
167  * as posix printf. This function may be compiled out if DEBUG macro
168  * was never defined.
169  * See also: vxge_debug_level_e{}.
170  */
171 static inline void vxge_debug_driver(
172     vxge_debug_level_e level,
173     vxge_hal_device_h hldev,
174     u32 vpid,
175     char *fmt, ...)
176 {
177 #if (VXGE_COMPONENT_HAL_DRIVER & VXGE_DEBUG_MODULE_MASK)
178 	if ((u32) level <= g_debug_level)
179 		vxge_os_vaprintf((vxge_hal_device_h) hldev, vpid, fmt);
180 #endif
181 }
182 
183 /*
184  * vxge_debug_osdep
185  * @level: level of debug verbosity.
186  * @hldev: HAL Device
187  * @vpid: Vpath id
188  * @fmt: printf like format string
189  *
190  * Provides logging facilities for OS Dependent functions. Can be customized
191  * with debug levels. Input parameters, except level, are the same
192  * as posix printf. This function may be compiled out if DEBUG macro
193  * was never defined.
194  * See also: vxge_debug_level_e{}.
195  */
196 static inline void vxge_debug_osdep(
197     vxge_debug_level_e level,
198     vxge_hal_device_h hldev,
199     u32 vpid,
200     char *fmt, ...)
201 {
202 #if (VXGE_COMPONENT_OSDEP & VXGE_DEBUG_MODULE_MASK)
203 	vxge_debug(VXGE_COMPONENT_OSDEP, level, hldev, vpid, fmt)
204 #endif
205 }
206 
207 /*
208  * vxge_debug_ll
209  * @level: level of debug verbosity.
210  * @hldev: HAL Device
211  * @vpid: Vpath id
212  * @fmt: printf like format string
213  *
214  * Provides logging facilities for LL driver. Can be customized
215  * with debug levels. Input parameters, except level, are the same
216  * as posix printf. This function may be compiled out if DEBUG macro
217  * was never defined.
218  * See also: vxge_debug_level_e{}.
219  */
220 static inline void vxge_debug_ll(
221     vxge_debug_level_e level,
222     vxge_hal_device_h hldev,
223     u32 vpid,
224     char *fmt, ...)
225 {
226 #if (VXGE_COMPONENT_LL & VXGE_DEBUG_MODULE_MASK)
227 	vxge_debug(VXGE_COMPONENT_LL, level, hldev, vpid, fmt)
228 #endif
229 }
230 
231 /*
232  * vxge_debug_uld
233  * @component: The Component mask
234  * @level: level of debug verbosity.
235  * @hldev: HAL Device
236  * @vpid: Vpath id
237  * @fmt: printf like format string
238  *
239  * Provides logging facilities for LL driver. Can be customized
240  * with debug levels. Input parameters, except level, are the same
241  * as posix printf. This function may be compiled out if DEBUG macro
242  * was never defined.
243  * See also: vxge_debug_level_e{}.
244  */
245 static inline void vxge_debug_uld(
246     u32 component,
247     vxge_debug_level_e level,
248     vxge_hal_device_h hldev,
249     u32 vpid,
250     char *fmt, ...)
251 {
252 #if (VXGE_COMPONENT_ULD & VXGE_DEBUG_MODULE_MASK)
253 	vxge_debug(component, level, hldev, vpid, fmt)
254 #endif
255 }
256 
257 #endif	/* end of VXGE_DEBUG_INLINE_FUNCTIONS */
258 
259 __EXTERN_END_DECLS
260 
261 #endif	/* VXGE_OS_DEBUG_H */
262