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