xge-debug.h revision 173139
1283625Sdim/*-
2283625Sdim * Copyright (c) 2002-2007 Neterion, Inc.
3353358Sdim * All rights reserved.
4353358Sdim *
5353358Sdim * Redistribution and use in source and binary forms, with or without
6283625Sdim * modification, are permitted provided that the following conditions
7283625Sdim * are met:
8283625Sdim * 1. Redistributions of source code must retain the above copyright
9283625Sdim *    notice, this list of conditions and the following disclaimer.
10283625Sdim * 2. Redistributions in binary form must reproduce the above copyright
11283625Sdim *    notice, this list of conditions and the following disclaimer in the
12283625Sdim *    documentation and/or other materials provided with the distribution.
13283625Sdim *
14283625Sdim * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15283625Sdim * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16283625Sdim * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17283625Sdim * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18285181Sdim * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19283625Sdim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20283625Sdim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21283625Sdim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22341825Sdim * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23283625Sdim * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24283625Sdim * SUCH DAMAGE.
25344779Sdim *
26283625Sdim * $FreeBSD: head/sys/dev/nxge/include/xge-debug.h 173139 2007-10-29 14:19:32Z rwatson $
27283625Sdim */
28283625Sdim
29283625Sdim#ifndef XGE_DEBUG_H
30283625Sdim#define XGE_DEBUG_H
31283625Sdim
32283625Sdim#include <dev/nxge/include/xge-os-pal.h>
33283625Sdim
34283625Sdim__EXTERN_BEGIN_DECLS
35283625Sdim
36283625Sdim/*
37283625Sdim * __FUNCTION__ is, together with __PRETTY_FUNCTION__ or something similar,
38283625Sdim * a gcc extension. we'll have to #ifdef around that, and provide some
39283625Sdim * meaningful replacement for those, so to make some gcc versions happier
40283625Sdim */
41283625Sdim#ifndef __func__
42283625Sdim#ifdef __FUNCTION__
43296417Sdim#define __func__ __FUNCTION__
44283625Sdim#endif
45296417Sdim#endif
46344779Sdim
47283625Sdim
48296417Sdim#ifdef XGE_DEBUG_FP
49283625Sdim#define XGE_DEBUG_FP_DEVICE		0x1
50283625Sdim#define XGE_DEBUG_FP_CHANNEL	0x2
51353358Sdim#define XGE_DEBUG_FP_FIFO		0x4
52344779Sdim#define XGE_DEBUG_FP_RING		0x8
53344779Sdim#define XGE_DEBUG_FP_ALL		0xff
54344779Sdim#endif
55344779Sdim
56309124Sdim/**
57309124Sdim * enum xge_debug_level_e
58353358Sdim * @XGE_NONE: debug disabled
59353358Sdim * @XGE_ERR: all errors going to be logged out
60353358Sdim * @XGE_TRACE: all errors plus all kind of verbose tracing print outs
61353358Sdim *                 going to be logged out. Very noisy.
62353358Sdim *
63353358Sdim * This enumeration going to be used to switch between different
64353358Sdim * debug levels during runtime if DEBUG macro defined during
65283625Sdim * compilation. If DEBUG macro not defined than code will be
66283625Sdim * compiled out.
67283625Sdim */
68283625Sdimtypedef enum xge_debug_level_e {
69283625Sdim	XGE_NONE   = 0,
70344779Sdim	XGE_TRACE  = 1,
71283625Sdim	XGE_ERR    = 2,
72296417Sdim} xge_debug_level_e;
73283625Sdim
74283625Sdim#define XGE_DEBUG_MODULE_MASK_DEF	0x30000030
75283625Sdim#define XGE_DEBUG_LEVEL_DEF		XGE_ERR
76283625Sdim
77283625Sdim#if defined(XGE_DEBUG_TRACE_MASK) || defined(XGE_DEBUG_ERR_MASK)
78283625Sdim
79296417Sdimextern unsigned long *g_module_mask;
80283625Sdimextern int *g_level;
81296417Sdim
82283625Sdim#ifndef XGE_DEBUG_TRACE_MASK
83283625Sdim#define XGE_DEBUG_TRACE_MASK 0
84283625Sdim#endif
85283625Sdim
86283625Sdim#ifndef XGE_DEBUG_ERR_MASK
87296417Sdim#define XGE_DEBUG_ERR_MASK 0
88283625Sdim#endif
89283625Sdim
90283625Sdim/*
91283625Sdim * @XGE_COMPONENT_HAL_CONFIG: do debug for xge core config module
92283625Sdim * @XGE_COMPONENT_HAL_FIFO: do debug for xge core fifo module
93283625Sdim * @XGE_COMPONENT_HAL_RING: do debug for xge core ring module
94309124Sdim * @XGE_COMPONENT_HAL_CHANNEL: do debug for xge core channel module
95309124Sdim * @XGE_COMPONENT_HAL_DEVICE: do debug for xge core device module
96285181Sdim * @XGE_COMPONENT_HAL_DMQ: do debug for xge core DMQ module
97283625Sdim * @XGE_COMPONENT_HAL_UMQ: do debug for xge core UMQ module
98285181Sdim * @XGE_COMPONENT_HAL_SQ: do debug for xge core SQ module
99283625Sdim * @XGE_COMPONENT_HAL_SRQ: do debug for xge core SRQ module
100283625Sdim * @XGE_COMPONENT_HAL_CQRQ: do debug for xge core CRQ module
101283625Sdim * @XGE_COMPONENT_HAL_POOL: do debug for xge core memory pool module
102283625Sdim * @XGE_COMPONENT_HAL_BITMAP: do debug for xge core BITMAP module
103283625Sdim * @XGE_COMPONENT_CORE: do debug for xge KMA core module
104283625Sdim * @XGE_COMPONENT_OSDEP: do debug for xge KMA os dependent parts
105296417Sdim * @XGE_COMPONENT_LL: do debug for xge link layer module
106283625Sdim * @XGE_COMPONENT_ALL: activate debug for all modules with no exceptions
107283625Sdim *
108283625Sdim * This enumeration going to be used to distinguish modules
109283625Sdim * or libraries during compilation and runtime.  Makefile must declare
110283625Sdim * XGE_DEBUG_MODULE_MASK macro and set it to proper value.
111296417Sdim */
112283625Sdim#define XGE_COMPONENT_HAL_CONFIG		0x00000001
113283625Sdim#define	XGE_COMPONENT_HAL_FIFO			0x00000002
114283625Sdim#define	XGE_COMPONENT_HAL_RING			0x00000004
115283625Sdim#define	XGE_COMPONENT_HAL_CHANNEL		0x00000008
116309124Sdim#define	XGE_COMPONENT_HAL_DEVICE		0x00000010
117309124Sdim#define	XGE_COMPONENT_HAL_MM			0x00000020
118285181Sdim#define	XGE_COMPONENT_HAL_QUEUE	        0x00000040
119283625Sdim#define	XGE_COMPONENT_HAL_INTERRUPT     0x00000080
120285181Sdim#define	XGE_COMPONENT_HAL_STATS	        0x00000100
121283625Sdim
122283625Sdim	/* space for CORE_XXX */
123283625Sdim#define	XGE_COMPONENT_OSDEP			0x10000000
124283625Sdim#define	XGE_COMPONENT_LL			0x20000000
125283625Sdim#define	XGE_COMPONENT_ALL			0xffffffff
126283625Sdim
127283625Sdim#ifndef XGE_DEBUG_MODULE_MASK
128283625Sdim#error "XGE_DEBUG_MODULE_MASK macro must be defined for DEBUG mode..."
129283625Sdim#endif
130283625Sdim
131283625Sdim#ifndef __GNUC__
132283625Sdim#ifdef XGE_TRACE_INTO_CIRCULAR_ARR
133283625Sdim	    #define xge_trace_aux(fmt) xge_os_vatrace(g_xge_os_tracebuf, fmt)
134283625Sdim#else
135283625Sdim	    #define xge_trace_aux(fmt) xge_os_vaprintf(fmt)
136283625Sdim#endif
137283625Sdim
138283625Sdim/**
139283625Sdim * xge_debug
140283625Sdim * @level: level of debug verbosity.
141283625Sdim * @fmt: printf like format string
142283625Sdim *
143283625Sdim * Provides logging facilities. Can be customized on per-module
144283625Sdim * basis or/and with debug levels. Input parameters, except
145283625Sdim * module and level, are the same as posix printf. This function
146283625Sdim * may be compiled out if DEBUG macro was never defined.
147283625Sdim * See also: xge_debug_level_e{}.
148283625Sdim */
149283625Sdim#define xge_debug(module, level, fmt) { \
150283625Sdimif (((level >= XGE_TRACE && ((module & XGE_DEBUG_TRACE_MASK) == module)) || \
151283625Sdim	(level >= XGE_ERR && ((module & XGE_DEBUG_ERR_MASK) == module))) && \
152283625Sdim	level >= *g_level && module & *(unsigned int *)g_module_mask) { \
153283625Sdim	            xge_trace_aux(fmt); \
154283625Sdim	} \
155283625Sdim}
156283625Sdim#else /* __GNUC__ */
157283625Sdim
158283625Sdim#ifdef XGE_TRACE_INTO_CIRCULAR_ARR
159283625Sdim	    #define xge_trace_aux(fmt...) xge_os_trace(g_xge_os_tracebuf, fmt)
160283625Sdim#else
161283625Sdim	    #define xge_trace_aux(fmt...) xge_os_printf(fmt)
162283625Sdim#endif
163283625Sdim
164283625Sdim#define xge_debug(module, level, fmt...) { \
165283625Sdimif (((level >= XGE_TRACE && ((module & XGE_DEBUG_TRACE_MASK) == module)) || \
166283625Sdim	(level >= XGE_ERR && ((module & XGE_DEBUG_ERR_MASK) == module))) && \
167283625Sdim	level >= *g_level && module & *(unsigned int *)g_module_mask) { \
168283625Sdim	            xge_trace_aux(fmt); \
169283625Sdim	} \
170283625Sdim}
171283625Sdim#endif /* __GNUC__ */
172283625Sdim
173283625Sdim#if (XGE_COMPONENT_HAL_STATS & XGE_DEBUG_MODULE_MASK)
174283625Sdim#ifndef __GNUC__
175296417Sdimstatic inline void xge_debug_stats(xge_debug_level_e level, char *fmt, ...) {
176296417Sdim	u32 module = XGE_COMPONENT_HAL_STATS;
177360784Sdim	xge_debug(module, level, fmt);
178360784Sdim}
179360784Sdim#else /* __GNUC__ */
180360784Sdim#define xge_debug_stats(level, fmt...) \
181360784Sdim	xge_debug(XGE_COMPONENT_HAL_STATS, level, fmt)
182296417Sdim#endif /* __GNUC__ */
183296417Sdim#else
184296417Sdim#ifndef __GNUC__
185296417Sdimstatic inline void xge_debug_stats(xge_debug_level_e level, char *fmt, ...) {}
186283625Sdim#else /* __GNUC__ */
187283625Sdim#define xge_debug_stats(level, fmt...)
188285181Sdim#endif /* __GNUC__ */
189285181Sdim#endif
190285181Sdim
191285181Sdim/* Interrupt Related */
192285181Sdim#if (XGE_COMPONENT_HAL_INTERRUPT & XGE_DEBUG_MODULE_MASK)
193285181Sdim#ifndef __GNUC__
194309124Sdimstatic inline void xge_debug_interrupt(xge_debug_level_e level, char *fmt, ...) {
195309124Sdim	u32 module = XGE_COMPONENT_HAL_INTERRUPT;
196285181Sdim	xge_debug(module, level, fmt);
197309124Sdim}
198309124Sdim#else /* __GNUC__ */
199296417Sdim#define xge_debug_interrupt(level, fmt...) \
200283625Sdim	xge_debug(XGE_COMPONENT_HAL_INTERRUPT, level, fmt)
201283625Sdim#endif /* __GNUC__ */
202283625Sdim#else
203283625Sdim#ifndef __GNUC__
204283625Sdimstatic inline void xge_debug_interrupt(xge_debug_level_e level, char *fmt, ...) {}
205283625Sdim#else /* __GNUC__ */
206283625Sdim#define xge_debug_interrupt(level, fmt...)
207353358Sdim#endif /* __GNUC__ */
208309124Sdim#endif
209309124Sdim
210286684Sdim#if (XGE_COMPONENT_HAL_QUEUE & XGE_DEBUG_MODULE_MASK)
211283625Sdim#ifndef __GNUC__
212283625Sdimstatic inline void xge_debug_queue(xge_debug_level_e level, char *fmt, ...) {
213283625Sdim	u32 module = XGE_COMPONENT_HAL_QUEUE;
214283625Sdim	xge_debug(module, level, fmt);
215283625Sdim}
216283625Sdim#else /* __GNUC__ */
217283625Sdim#define xge_debug_queue(level, fmt...) \
218283625Sdim	xge_debug(XGE_COMPONENT_HAL_QUEUE, level, fmt)
219283625Sdim#endif /* __GNUC__ */
220283625Sdim#else
221283625Sdim#ifndef __GNUC__
222283625Sdimstatic inline void xge_debug_queue(xge_debug_level_e level, char *fmt,
223283625Sdim...) {}
224283625Sdim#else /* __GNUC__ */
225283625Sdim#define xge_debug_queue(level, fmt...)
226283625Sdim#endif /* __GNUC__ */
227283625Sdim#endif
228283625Sdim
229283625Sdim#if (XGE_COMPONENT_HAL_MM & XGE_DEBUG_MODULE_MASK)
230283625Sdim#ifndef __GNUC__
231283625Sdimstatic inline void xge_debug_mm(xge_debug_level_e level, char *fmt, ...)
232283625Sdim{
233283625Sdim	u32 module = XGE_COMPONENT_HAL_MM;
234283625Sdim	xge_debug(module, level, fmt);
235283625Sdim}
236296417Sdim#else /* __GNUC__ */
237283625Sdim#define xge_debug_mm(level, fmt...) \
238283625Sdim	xge_debug(XGE_COMPONENT_HAL_MM, level, fmt)
239296417Sdim#endif /* __GNUC__ */
240283625Sdim#else
241283625Sdim#ifndef __GNUC__
242283625Sdimstatic inline void xge_debug_mm(xge_debug_level_e level, char *fmt, ...)
243283625Sdim{}
244283625Sdim#else /* __GNUC__ */
245296417Sdim#define xge_debug_mm(level, fmt...)
246283625Sdim#endif /* __GNUC__ */
247283625Sdim#endif
248296417Sdim
249283625Sdim#if (XGE_COMPONENT_HAL_CONFIG & XGE_DEBUG_MODULE_MASK)
250283625Sdim#ifndef __GNUC__
251283625Sdimstatic inline void xge_debug_config(xge_debug_level_e level, char *fmt, ...) {
252283625Sdim	u32 module = XGE_COMPONENT_HAL_CONFIG;
253283625Sdim	xge_debug(module, level, fmt);
254283625Sdim}
255283625Sdim#else /* __GNUC__ */
256283625Sdim#define xge_debug_config(level, fmt...) \
257283625Sdim	xge_debug(XGE_COMPONENT_HAL_CONFIG, level, fmt)
258283625Sdim#endif /* __GNUC__ */
259283625Sdim#else
260283625Sdim#ifndef __GNUC__
261296417Sdimstatic inline void xge_debug_config(xge_debug_level_e level, char *fmt,
262283625Sdim...) {}
263283625Sdim#else /* __GNUC__ */
264296417Sdim#define xge_debug_config(level, fmt...)
265283625Sdim#endif /* __GNUC__ */
266283625Sdim#endif
267283625Sdim
268283625Sdim#if (XGE_COMPONENT_HAL_FIFO & XGE_DEBUG_MODULE_MASK)
269283625Sdim#ifndef __GNUC__
270283625Sdimstatic inline void xge_debug_fifo(xge_debug_level_e level, char *fmt, ...) {
271283625Sdim	u32 module = XGE_COMPONENT_HAL_FIFO;
272283625Sdim	xge_debug(module, level, fmt);
273283625Sdim}
274283625Sdim#else /* __GNUC__ */
275283625Sdim#define xge_debug_fifo(level, fmt...) \
276283625Sdim	xge_debug(XGE_COMPONENT_HAL_FIFO, level, fmt)
277296417Sdim#endif /* __GNUC__ */
278283625Sdim#else
279283625Sdim#ifndef __GNUC__
280283625Sdimstatic inline void xge_debug_fifo(xge_debug_level_e level, char *fmt, ...) {}
281283625Sdim#else /* __GNUC__ */
282283625Sdim#define xge_debug_fifo(level, fmt...)
283283625Sdim#endif /* __GNUC__ */
284283625Sdim#endif
285283625Sdim
286283625Sdim#if (XGE_COMPONENT_HAL_RING & XGE_DEBUG_MODULE_MASK)
287283625Sdim#ifndef __GNUC__
288283625Sdimstatic inline void xge_debug_ring(xge_debug_level_e level, char *fmt, ...) {
289283625Sdim	u32 module = XGE_COMPONENT_HAL_RING;
290283625Sdim	xge_debug(module, level, fmt);
291283625Sdim}
292283625Sdim#else /* __GNUC__ */
293283625Sdim#define xge_debug_ring(level, fmt...) \
294283625Sdim	xge_debug(XGE_COMPONENT_HAL_RING, level, fmt)
295283625Sdim#endif /* __GNUC__ */
296283625Sdim#else
297283625Sdim#ifndef __GNUC__
298283625Sdimstatic inline void xge_debug_ring(xge_debug_level_e level, char *fmt, ...) {}
299283625Sdim#else /* __GNUC__ */
300283625Sdim#define xge_debug_ring(level, fmt...)
301283625Sdim#endif /* __GNUC__ */
302283625Sdim#endif
303283625Sdim
304283625Sdim#if (XGE_COMPONENT_HAL_CHANNEL & XGE_DEBUG_MODULE_MASK)
305283625Sdim#ifndef __GNUC__
306283625Sdimstatic inline void xge_debug_channel(xge_debug_level_e level, char *fmt, ...) {
307283625Sdim	u32 module = XGE_COMPONENT_HAL_CHANNEL;
308296417Sdim	xge_debug(module, level, fmt);
309283625Sdim}
310283625Sdim#else /* __GNUC__ */
311283625Sdim#define xge_debug_channel(level, fmt...) \
312283625Sdim	xge_debug(XGE_COMPONENT_HAL_CHANNEL, level, fmt)
313283625Sdim#endif /* __GNUC__ */
314283625Sdim#else
315283625Sdim#ifndef __GNUC__
316283625Sdimstatic inline void xge_debug_channel(xge_debug_level_e level, char *fmt, ...) {}
317283625Sdim#else /* __GNUC__ */
318283625Sdim#define xge_debug_channel(level, fmt...)
319283625Sdim#endif /* __GNUC__ */
320283625Sdim#endif
321283625Sdim
322283625Sdim#if (XGE_COMPONENT_HAL_DEVICE & XGE_DEBUG_MODULE_MASK)
323283625Sdim#ifndef __GNUC__
324283625Sdimstatic inline void xge_debug_device(xge_debug_level_e level, char *fmt, ...) {
325283625Sdim	u32 module = XGE_COMPONENT_HAL_DEVICE;
326283625Sdim	xge_debug(module, level, fmt);
327283625Sdim}
328283625Sdim#else /* __GNUC__ */
329283625Sdim#define xge_debug_device(level, fmt...) \
330283625Sdim	xge_debug(XGE_COMPONENT_HAL_DEVICE, level, fmt)
331283625Sdim#endif /* __GNUC__ */
332283625Sdim#else
333283625Sdim#ifndef __GNUC__
334283625Sdimstatic inline void xge_debug_device(xge_debug_level_e level, char *fmt, ...) {}
335283625Sdim#else /* __GNUC__ */
336283625Sdim#define xge_debug_device(level, fmt...)
337283625Sdim#endif /* __GNUC__ */
338283625Sdim#endif
339283625Sdim
340283625Sdim#if (XGE_COMPONENT_OSDEP & XGE_DEBUG_MODULE_MASK)
341283625Sdim#ifndef __GNUC__
342283625Sdimstatic inline void xge_debug_osdep(xge_debug_level_e level, char *fmt, ...) {
343283625Sdim	u32 module = XGE_COMPONENT_OSDEP;
344283625Sdim	xge_debug(module, level, fmt);
345283625Sdim}
346283625Sdim#else /* __GNUC__ */
347283625Sdim#define xge_debug_osdep(level, fmt...) \
348283625Sdim	xge_debug(XGE_COMPONENT_OSDEP, level, fmt)
349283625Sdim#endif /* __GNUC__ */
350283625Sdim#else
351283625Sdim#ifndef __GNUC__
352283625Sdimstatic inline void xge_debug_osdep(xge_debug_level_e level, char *fmt, ...) {}
353283625Sdim#else /* __GNUC__ */
354283625Sdim#define xge_debug_osdep(level, fmt...)
355283625Sdim#endif /* __GNUC__ */
356283625Sdim#endif
357283625Sdim
358283625Sdim#if (XGE_COMPONENT_LL & XGE_DEBUG_MODULE_MASK)
359283625Sdim#ifndef __GNUC__
360283625Sdimstatic inline void xge_debug_ll(xge_debug_level_e level, char *fmt, ...)
361283625Sdim{
362283625Sdim	u32 module = XGE_COMPONENT_LL;
363283625Sdim	xge_debug(module, level, fmt);
364283625Sdim}
365283625Sdim#else /* __GNUC__ */
366283625Sdim#define xge_debug_ll(level, fmt...) \
367283625Sdim	xge_debug(XGE_COMPONENT_LL, level, fmt)
368283625Sdim#endif /* __GNUC__ */
369283625Sdim#else
370283625Sdim#ifndef __GNUC__
371283625Sdimstatic inline void xge_debug_ll(xge_debug_level_e level, char *fmt, ...) {}
372283625Sdim#else /* __GNUC__ */
373283625Sdim#define xge_debug_ll(level, fmt...)
374283625Sdim#endif /* __GNUC__ */
375283625Sdim#endif
376283625Sdim
377283625Sdim#else
378283625Sdim
379283625Sdimstatic inline void xge_debug_interrupt(xge_debug_level_e level, char *fmt, ...) {}
380283625Sdimstatic inline void xge_debug_stats(xge_debug_level_e level, char *fmt, ...) {}
381283625Sdimstatic inline void xge_debug_queue(xge_debug_level_e level, char *fmt, ...) {}
382283625Sdimstatic inline void xge_debug_mm(xge_debug_level_e level, char *fmt, ...) {}
383283625Sdimstatic inline void xge_debug_config(xge_debug_level_e level, char *fmt, ...) {}
384283625Sdimstatic inline void xge_debug_fifo(xge_debug_level_e level, char *fmt, ...) {}
385283625Sdimstatic inline void xge_debug_ring(xge_debug_level_e level, char *fmt, ...) {}
386283625Sdimstatic inline void xge_debug_channel(xge_debug_level_e level, char *fmt, ...) {}
387283625Sdimstatic inline void xge_debug_device(xge_debug_level_e level, char *fmt, ...) {}
388283625Sdimstatic inline void xge_debug_hal(xge_debug_level_e level, char *fmt, ...) {}
389283625Sdimstatic inline void xge_debug_osdep(xge_debug_level_e level, char *fmt, ...) {}
390283625Sdimstatic inline void xge_debug_ll(xge_debug_level_e level, char *fmt, ...) {}
391283625Sdim
392283625Sdim#endif /* end of XGE_DEBUG_*_MASK */
393283625Sdim
394283625Sdim#ifdef XGE_DEBUG_ASSERT
395283625Sdim
396283625Sdim/**
397283625Sdim * xge_assert
398283625Sdim * @test: C-condition to check
399283625Sdim * @fmt: printf like format string
400283625Sdim *
401283625Sdim * This function implements traditional assert. By default assertions
402283625Sdim * are enabled. It can be disabled by defining XGE_DEBUG_ASSERT macro in
403283625Sdim * compilation
404283625Sdim * time.
405283625Sdim */
406283625Sdim#define xge_assert(test) { \
407283625Sdim	    if (!(test)) xge_os_bug("bad cond: "#test" at %s:%d\n", \
408283625Sdim	__FILE__, __LINE__); }
409283625Sdim#else
410283625Sdim#define xge_assert(test)
411283625Sdim#endif /* end of XGE_DEBUG_ASSERT */
412283625Sdim
413283625Sdim__EXTERN_END_DECLS
414283625Sdim
415283625Sdim#endif /* XGE_DEBUG_H */
416283625Sdim