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$*/
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 */
171static 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 */
196static 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 */
220static 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 */
245static 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