xge-debug.h revision 173139
1171095Ssam/*- 2171095Ssam * Copyright (c) 2002-2007 Neterion, Inc. 3171095Ssam * All rights reserved. 4171095Ssam * 5171095Ssam * Redistribution and use in source and binary forms, with or without 6171095Ssam * modification, are permitted provided that the following conditions 7171095Ssam * are met: 8171095Ssam * 1. Redistributions of source code must retain the above copyright 9171095Ssam * notice, this list of conditions and the following disclaimer. 10171095Ssam * 2. Redistributions in binary form must reproduce the above copyright 11171095Ssam * notice, this list of conditions and the following disclaimer in the 12171095Ssam * documentation and/or other materials provided with the distribution. 13171095Ssam * 14171095Ssam * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15171095Ssam * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16171095Ssam * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17171095Ssam * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18171095Ssam * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19171095Ssam * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20171095Ssam * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21171095Ssam * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22171095Ssam * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23171095Ssam * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24171095Ssam * SUCH DAMAGE. 25171095Ssam * 26171095Ssam * $FreeBSD: head/sys/dev/nxge/include/xge-debug.h 173139 2007-10-29 14:19:32Z rwatson $ 27171095Ssam */ 28171095Ssam 29171095Ssam#ifndef XGE_DEBUG_H 30171095Ssam#define XGE_DEBUG_H 31171095Ssam 32171095Ssam#include <dev/nxge/include/xge-os-pal.h> 33171095Ssam 34171095Ssam__EXTERN_BEGIN_DECLS 35171095Ssam 36171095Ssam/* 37171095Ssam * __FUNCTION__ is, together with __PRETTY_FUNCTION__ or something similar, 38171095Ssam * a gcc extension. we'll have to #ifdef around that, and provide some 39171095Ssam * meaningful replacement for those, so to make some gcc versions happier 40171095Ssam */ 41171095Ssam#ifndef __func__ 42171095Ssam#ifdef __FUNCTION__ 43171095Ssam#define __func__ __FUNCTION__ 44171095Ssam#endif 45171095Ssam#endif 46171095Ssam 47171095Ssam 48171095Ssam#ifdef XGE_DEBUG_FP 49173139Srwatson#define XGE_DEBUG_FP_DEVICE 0x1 50171095Ssam#define XGE_DEBUG_FP_CHANNEL 0x2 51173139Srwatson#define XGE_DEBUG_FP_FIFO 0x4 52173139Srwatson#define XGE_DEBUG_FP_RING 0x8 53173139Srwatson#define XGE_DEBUG_FP_ALL 0xff 54171095Ssam#endif 55171095Ssam 56171095Ssam/** 57171095Ssam * enum xge_debug_level_e 58171095Ssam * @XGE_NONE: debug disabled 59171095Ssam * @XGE_ERR: all errors going to be logged out 60171095Ssam * @XGE_TRACE: all errors plus all kind of verbose tracing print outs 61171095Ssam * going to be logged out. Very noisy. 62171095Ssam * 63171095Ssam * This enumeration going to be used to switch between different 64171095Ssam * debug levels during runtime if DEBUG macro defined during 65171095Ssam * compilation. If DEBUG macro not defined than code will be 66171095Ssam * compiled out. 67171095Ssam */ 68171095Ssamtypedef enum xge_debug_level_e { 69171095Ssam XGE_NONE = 0, 70171095Ssam XGE_TRACE = 1, 71171095Ssam XGE_ERR = 2, 72171095Ssam} xge_debug_level_e; 73171095Ssam 74171095Ssam#define XGE_DEBUG_MODULE_MASK_DEF 0x30000030 75171095Ssam#define XGE_DEBUG_LEVEL_DEF XGE_ERR 76171095Ssam 77171095Ssam#if defined(XGE_DEBUG_TRACE_MASK) || defined(XGE_DEBUG_ERR_MASK) 78171095Ssam 79171095Ssamextern unsigned long *g_module_mask; 80171095Ssamextern int *g_level; 81171095Ssam 82171095Ssam#ifndef XGE_DEBUG_TRACE_MASK 83171095Ssam#define XGE_DEBUG_TRACE_MASK 0 84171095Ssam#endif 85171095Ssam 86171095Ssam#ifndef XGE_DEBUG_ERR_MASK 87171095Ssam#define XGE_DEBUG_ERR_MASK 0 88171095Ssam#endif 89171095Ssam 90171095Ssam/* 91171095Ssam * @XGE_COMPONENT_HAL_CONFIG: do debug for xge core config module 92171095Ssam * @XGE_COMPONENT_HAL_FIFO: do debug for xge core fifo module 93171095Ssam * @XGE_COMPONENT_HAL_RING: do debug for xge core ring module 94171095Ssam * @XGE_COMPONENT_HAL_CHANNEL: do debug for xge core channel module 95171095Ssam * @XGE_COMPONENT_HAL_DEVICE: do debug for xge core device module 96171095Ssam * @XGE_COMPONENT_HAL_DMQ: do debug for xge core DMQ module 97171095Ssam * @XGE_COMPONENT_HAL_UMQ: do debug for xge core UMQ module 98171095Ssam * @XGE_COMPONENT_HAL_SQ: do debug for xge core SQ module 99171095Ssam * @XGE_COMPONENT_HAL_SRQ: do debug for xge core SRQ module 100171095Ssam * @XGE_COMPONENT_HAL_CQRQ: do debug for xge core CRQ module 101171095Ssam * @XGE_COMPONENT_HAL_POOL: do debug for xge core memory pool module 102171095Ssam * @XGE_COMPONENT_HAL_BITMAP: do debug for xge core BITMAP module 103171095Ssam * @XGE_COMPONENT_CORE: do debug for xge KMA core module 104171095Ssam * @XGE_COMPONENT_OSDEP: do debug for xge KMA os dependent parts 105171095Ssam * @XGE_COMPONENT_LL: do debug for xge link layer module 106171095Ssam * @XGE_COMPONENT_ALL: activate debug for all modules with no exceptions 107171095Ssam * 108171095Ssam * This enumeration going to be used to distinguish modules 109171095Ssam * or libraries during compilation and runtime. Makefile must declare 110171095Ssam * XGE_DEBUG_MODULE_MASK macro and set it to proper value. 111171095Ssam */ 112171095Ssam#define XGE_COMPONENT_HAL_CONFIG 0x00000001 113171095Ssam#define XGE_COMPONENT_HAL_FIFO 0x00000002 114171095Ssam#define XGE_COMPONENT_HAL_RING 0x00000004 115171095Ssam#define XGE_COMPONENT_HAL_CHANNEL 0x00000008 116171095Ssam#define XGE_COMPONENT_HAL_DEVICE 0x00000010 117171095Ssam#define XGE_COMPONENT_HAL_MM 0x00000020 118171095Ssam#define XGE_COMPONENT_HAL_QUEUE 0x00000040 119171095Ssam#define XGE_COMPONENT_HAL_INTERRUPT 0x00000080 120171095Ssam#define XGE_COMPONENT_HAL_STATS 0x00000100 121171095Ssam 122171095Ssam /* space for CORE_XXX */ 123171095Ssam#define XGE_COMPONENT_OSDEP 0x10000000 124171095Ssam#define XGE_COMPONENT_LL 0x20000000 125171095Ssam#define XGE_COMPONENT_ALL 0xffffffff 126171095Ssam 127171095Ssam#ifndef XGE_DEBUG_MODULE_MASK 128171095Ssam#error "XGE_DEBUG_MODULE_MASK macro must be defined for DEBUG mode..." 129171095Ssam#endif 130171095Ssam 131171095Ssam#ifndef __GNUC__ 132171095Ssam#ifdef XGE_TRACE_INTO_CIRCULAR_ARR 133173139Srwatson #define xge_trace_aux(fmt) xge_os_vatrace(g_xge_os_tracebuf, fmt) 134171095Ssam#else 135173139Srwatson #define xge_trace_aux(fmt) xge_os_vaprintf(fmt) 136171095Ssam#endif 137171095Ssam 138171095Ssam/** 139171095Ssam * xge_debug 140171095Ssam * @level: level of debug verbosity. 141171095Ssam * @fmt: printf like format string 142171095Ssam * 143171095Ssam * Provides logging facilities. Can be customized on per-module 144171095Ssam * basis or/and with debug levels. Input parameters, except 145171095Ssam * module and level, are the same as posix printf. This function 146171095Ssam * may be compiled out if DEBUG macro was never defined. 147171095Ssam * See also: xge_debug_level_e{}. 148171095Ssam */ 149171095Ssam#define xge_debug(module, level, fmt) { \ 150171095Ssamif (((level >= XGE_TRACE && ((module & XGE_DEBUG_TRACE_MASK) == module)) || \ 151173139Srwatson (level >= XGE_ERR && ((module & XGE_DEBUG_ERR_MASK) == module))) && \ 152173139Srwatson level >= *g_level && module & *(unsigned int *)g_module_mask) { \ 153173139Srwatson xge_trace_aux(fmt); \ 154171095Ssam } \ 155171095Ssam} 156171095Ssam#else /* __GNUC__ */ 157171095Ssam 158171095Ssam#ifdef XGE_TRACE_INTO_CIRCULAR_ARR 159173139Srwatson #define xge_trace_aux(fmt...) xge_os_trace(g_xge_os_tracebuf, fmt) 160171095Ssam#else 161173139Srwatson #define xge_trace_aux(fmt...) xge_os_printf(fmt) 162171095Ssam#endif 163171095Ssam 164171095Ssam#define xge_debug(module, level, fmt...) { \ 165171095Ssamif (((level >= XGE_TRACE && ((module & XGE_DEBUG_TRACE_MASK) == module)) || \ 166173139Srwatson (level >= XGE_ERR && ((module & XGE_DEBUG_ERR_MASK) == module))) && \ 167173139Srwatson level >= *g_level && module & *(unsigned int *)g_module_mask) { \ 168173139Srwatson xge_trace_aux(fmt); \ 169171095Ssam } \ 170171095Ssam} 171171095Ssam#endif /* __GNUC__ */ 172171095Ssam 173171095Ssam#if (XGE_COMPONENT_HAL_STATS & XGE_DEBUG_MODULE_MASK) 174171095Ssam#ifndef __GNUC__ 175171095Ssamstatic inline void xge_debug_stats(xge_debug_level_e level, char *fmt, ...) { 176171095Ssam u32 module = XGE_COMPONENT_HAL_STATS; 177171095Ssam xge_debug(module, level, fmt); 178171095Ssam} 179171095Ssam#else /* __GNUC__ */ 180171095Ssam#define xge_debug_stats(level, fmt...) \ 181171095Ssam xge_debug(XGE_COMPONENT_HAL_STATS, level, fmt) 182171095Ssam#endif /* __GNUC__ */ 183171095Ssam#else 184171095Ssam#ifndef __GNUC__ 185171095Ssamstatic inline void xge_debug_stats(xge_debug_level_e level, char *fmt, ...) {} 186171095Ssam#else /* __GNUC__ */ 187171095Ssam#define xge_debug_stats(level, fmt...) 188171095Ssam#endif /* __GNUC__ */ 189171095Ssam#endif 190171095Ssam 191171095Ssam/* Interrupt Related */ 192171095Ssam#if (XGE_COMPONENT_HAL_INTERRUPT & XGE_DEBUG_MODULE_MASK) 193171095Ssam#ifndef __GNUC__ 194171095Ssamstatic inline void xge_debug_interrupt(xge_debug_level_e level, char *fmt, ...) { 195171095Ssam u32 module = XGE_COMPONENT_HAL_INTERRUPT; 196171095Ssam xge_debug(module, level, fmt); 197171095Ssam} 198171095Ssam#else /* __GNUC__ */ 199171095Ssam#define xge_debug_interrupt(level, fmt...) \ 200171095Ssam xge_debug(XGE_COMPONENT_HAL_INTERRUPT, level, fmt) 201171095Ssam#endif /* __GNUC__ */ 202171095Ssam#else 203171095Ssam#ifndef __GNUC__ 204171095Ssamstatic inline void xge_debug_interrupt(xge_debug_level_e level, char *fmt, ...) {} 205171095Ssam#else /* __GNUC__ */ 206171095Ssam#define xge_debug_interrupt(level, fmt...) 207171095Ssam#endif /* __GNUC__ */ 208171095Ssam#endif 209171095Ssam 210171095Ssam#if (XGE_COMPONENT_HAL_QUEUE & XGE_DEBUG_MODULE_MASK) 211171095Ssam#ifndef __GNUC__ 212171095Ssamstatic inline void xge_debug_queue(xge_debug_level_e level, char *fmt, ...) { 213171095Ssam u32 module = XGE_COMPONENT_HAL_QUEUE; 214171095Ssam xge_debug(module, level, fmt); 215171095Ssam} 216171095Ssam#else /* __GNUC__ */ 217171095Ssam#define xge_debug_queue(level, fmt...) \ 218171095Ssam xge_debug(XGE_COMPONENT_HAL_QUEUE, level, fmt) 219171095Ssam#endif /* __GNUC__ */ 220171095Ssam#else 221171095Ssam#ifndef __GNUC__ 222171095Ssamstatic inline void xge_debug_queue(xge_debug_level_e level, char *fmt, 223171095Ssam...) {} 224171095Ssam#else /* __GNUC__ */ 225171095Ssam#define xge_debug_queue(level, fmt...) 226171095Ssam#endif /* __GNUC__ */ 227171095Ssam#endif 228171095Ssam 229171095Ssam#if (XGE_COMPONENT_HAL_MM & XGE_DEBUG_MODULE_MASK) 230171095Ssam#ifndef __GNUC__ 231171095Ssamstatic inline void xge_debug_mm(xge_debug_level_e level, char *fmt, ...) 232171095Ssam{ 233171095Ssam u32 module = XGE_COMPONENT_HAL_MM; 234171095Ssam xge_debug(module, level, fmt); 235171095Ssam} 236171095Ssam#else /* __GNUC__ */ 237171095Ssam#define xge_debug_mm(level, fmt...) \ 238171095Ssam xge_debug(XGE_COMPONENT_HAL_MM, level, fmt) 239171095Ssam#endif /* __GNUC__ */ 240171095Ssam#else 241171095Ssam#ifndef __GNUC__ 242171095Ssamstatic inline void xge_debug_mm(xge_debug_level_e level, char *fmt, ...) 243171095Ssam{} 244171095Ssam#else /* __GNUC__ */ 245171095Ssam#define xge_debug_mm(level, fmt...) 246171095Ssam#endif /* __GNUC__ */ 247171095Ssam#endif 248171095Ssam 249171095Ssam#if (XGE_COMPONENT_HAL_CONFIG & XGE_DEBUG_MODULE_MASK) 250171095Ssam#ifndef __GNUC__ 251171095Ssamstatic inline void xge_debug_config(xge_debug_level_e level, char *fmt, ...) { 252171095Ssam u32 module = XGE_COMPONENT_HAL_CONFIG; 253171095Ssam xge_debug(module, level, fmt); 254171095Ssam} 255171095Ssam#else /* __GNUC__ */ 256171095Ssam#define xge_debug_config(level, fmt...) \ 257171095Ssam xge_debug(XGE_COMPONENT_HAL_CONFIG, level, fmt) 258171095Ssam#endif /* __GNUC__ */ 259171095Ssam#else 260171095Ssam#ifndef __GNUC__ 261171095Ssamstatic inline void xge_debug_config(xge_debug_level_e level, char *fmt, 262171095Ssam...) {} 263171095Ssam#else /* __GNUC__ */ 264171095Ssam#define xge_debug_config(level, fmt...) 265171095Ssam#endif /* __GNUC__ */ 266171095Ssam#endif 267171095Ssam 268171095Ssam#if (XGE_COMPONENT_HAL_FIFO & XGE_DEBUG_MODULE_MASK) 269171095Ssam#ifndef __GNUC__ 270171095Ssamstatic inline void xge_debug_fifo(xge_debug_level_e level, char *fmt, ...) { 271171095Ssam u32 module = XGE_COMPONENT_HAL_FIFO; 272171095Ssam xge_debug(module, level, fmt); 273171095Ssam} 274171095Ssam#else /* __GNUC__ */ 275171095Ssam#define xge_debug_fifo(level, fmt...) \ 276171095Ssam xge_debug(XGE_COMPONENT_HAL_FIFO, level, fmt) 277171095Ssam#endif /* __GNUC__ */ 278171095Ssam#else 279171095Ssam#ifndef __GNUC__ 280171095Ssamstatic inline void xge_debug_fifo(xge_debug_level_e level, char *fmt, ...) {} 281171095Ssam#else /* __GNUC__ */ 282171095Ssam#define xge_debug_fifo(level, fmt...) 283171095Ssam#endif /* __GNUC__ */ 284171095Ssam#endif 285171095Ssam 286171095Ssam#if (XGE_COMPONENT_HAL_RING & XGE_DEBUG_MODULE_MASK) 287171095Ssam#ifndef __GNUC__ 288171095Ssamstatic inline void xge_debug_ring(xge_debug_level_e level, char *fmt, ...) { 289171095Ssam u32 module = XGE_COMPONENT_HAL_RING; 290171095Ssam xge_debug(module, level, fmt); 291171095Ssam} 292171095Ssam#else /* __GNUC__ */ 293171095Ssam#define xge_debug_ring(level, fmt...) \ 294171095Ssam xge_debug(XGE_COMPONENT_HAL_RING, level, fmt) 295171095Ssam#endif /* __GNUC__ */ 296171095Ssam#else 297171095Ssam#ifndef __GNUC__ 298171095Ssamstatic inline void xge_debug_ring(xge_debug_level_e level, char *fmt, ...) {} 299171095Ssam#else /* __GNUC__ */ 300171095Ssam#define xge_debug_ring(level, fmt...) 301171095Ssam#endif /* __GNUC__ */ 302171095Ssam#endif 303171095Ssam 304171095Ssam#if (XGE_COMPONENT_HAL_CHANNEL & XGE_DEBUG_MODULE_MASK) 305171095Ssam#ifndef __GNUC__ 306171095Ssamstatic inline void xge_debug_channel(xge_debug_level_e level, char *fmt, ...) { 307171095Ssam u32 module = XGE_COMPONENT_HAL_CHANNEL; 308171095Ssam xge_debug(module, level, fmt); 309171095Ssam} 310171095Ssam#else /* __GNUC__ */ 311171095Ssam#define xge_debug_channel(level, fmt...) \ 312171095Ssam xge_debug(XGE_COMPONENT_HAL_CHANNEL, level, fmt) 313171095Ssam#endif /* __GNUC__ */ 314171095Ssam#else 315171095Ssam#ifndef __GNUC__ 316171095Ssamstatic inline void xge_debug_channel(xge_debug_level_e level, char *fmt, ...) {} 317171095Ssam#else /* __GNUC__ */ 318171095Ssam#define xge_debug_channel(level, fmt...) 319171095Ssam#endif /* __GNUC__ */ 320171095Ssam#endif 321171095Ssam 322171095Ssam#if (XGE_COMPONENT_HAL_DEVICE & XGE_DEBUG_MODULE_MASK) 323171095Ssam#ifndef __GNUC__ 324171095Ssamstatic inline void xge_debug_device(xge_debug_level_e level, char *fmt, ...) { 325171095Ssam u32 module = XGE_COMPONENT_HAL_DEVICE; 326171095Ssam xge_debug(module, level, fmt); 327171095Ssam} 328171095Ssam#else /* __GNUC__ */ 329171095Ssam#define xge_debug_device(level, fmt...) \ 330171095Ssam xge_debug(XGE_COMPONENT_HAL_DEVICE, level, fmt) 331171095Ssam#endif /* __GNUC__ */ 332171095Ssam#else 333171095Ssam#ifndef __GNUC__ 334171095Ssamstatic inline void xge_debug_device(xge_debug_level_e level, char *fmt, ...) {} 335171095Ssam#else /* __GNUC__ */ 336171095Ssam#define xge_debug_device(level, fmt...) 337171095Ssam#endif /* __GNUC__ */ 338171095Ssam#endif 339171095Ssam 340171095Ssam#if (XGE_COMPONENT_OSDEP & XGE_DEBUG_MODULE_MASK) 341171095Ssam#ifndef __GNUC__ 342171095Ssamstatic inline void xge_debug_osdep(xge_debug_level_e level, char *fmt, ...) { 343171095Ssam u32 module = XGE_COMPONENT_OSDEP; 344171095Ssam xge_debug(module, level, fmt); 345171095Ssam} 346171095Ssam#else /* __GNUC__ */ 347171095Ssam#define xge_debug_osdep(level, fmt...) \ 348171095Ssam xge_debug(XGE_COMPONENT_OSDEP, level, fmt) 349171095Ssam#endif /* __GNUC__ */ 350171095Ssam#else 351171095Ssam#ifndef __GNUC__ 352171095Ssamstatic inline void xge_debug_osdep(xge_debug_level_e level, char *fmt, ...) {} 353171095Ssam#else /* __GNUC__ */ 354171095Ssam#define xge_debug_osdep(level, fmt...) 355171095Ssam#endif /* __GNUC__ */ 356171095Ssam#endif 357171095Ssam 358171095Ssam#if (XGE_COMPONENT_LL & XGE_DEBUG_MODULE_MASK) 359171095Ssam#ifndef __GNUC__ 360171095Ssamstatic inline void xge_debug_ll(xge_debug_level_e level, char *fmt, ...) 361171095Ssam{ 362171095Ssam u32 module = XGE_COMPONENT_LL; 363171095Ssam xge_debug(module, level, fmt); 364171095Ssam} 365171095Ssam#else /* __GNUC__ */ 366171095Ssam#define xge_debug_ll(level, fmt...) \ 367171095Ssam xge_debug(XGE_COMPONENT_LL, level, fmt) 368171095Ssam#endif /* __GNUC__ */ 369171095Ssam#else 370171095Ssam#ifndef __GNUC__ 371171095Ssamstatic inline void xge_debug_ll(xge_debug_level_e level, char *fmt, ...) {} 372171095Ssam#else /* __GNUC__ */ 373171095Ssam#define xge_debug_ll(level, fmt...) 374171095Ssam#endif /* __GNUC__ */ 375171095Ssam#endif 376171095Ssam 377171095Ssam#else 378171095Ssam 379171095Ssamstatic inline void xge_debug_interrupt(xge_debug_level_e level, char *fmt, ...) {} 380171095Ssamstatic inline void xge_debug_stats(xge_debug_level_e level, char *fmt, ...) {} 381171095Ssamstatic inline void xge_debug_queue(xge_debug_level_e level, char *fmt, ...) {} 382171095Ssamstatic inline void xge_debug_mm(xge_debug_level_e level, char *fmt, ...) {} 383171095Ssamstatic inline void xge_debug_config(xge_debug_level_e level, char *fmt, ...) {} 384171095Ssamstatic inline void xge_debug_fifo(xge_debug_level_e level, char *fmt, ...) {} 385171095Ssamstatic inline void xge_debug_ring(xge_debug_level_e level, char *fmt, ...) {} 386171095Ssamstatic inline void xge_debug_channel(xge_debug_level_e level, char *fmt, ...) {} 387171095Ssamstatic inline void xge_debug_device(xge_debug_level_e level, char *fmt, ...) {} 388171095Ssamstatic inline void xge_debug_hal(xge_debug_level_e level, char *fmt, ...) {} 389171095Ssamstatic inline void xge_debug_osdep(xge_debug_level_e level, char *fmt, ...) {} 390171095Ssamstatic inline void xge_debug_ll(xge_debug_level_e level, char *fmt, ...) {} 391171095Ssam 392171095Ssam#endif /* end of XGE_DEBUG_*_MASK */ 393171095Ssam 394171095Ssam#ifdef XGE_DEBUG_ASSERT 395171095Ssam 396171095Ssam/** 397171095Ssam * xge_assert 398171095Ssam * @test: C-condition to check 399171095Ssam * @fmt: printf like format string 400171095Ssam * 401171095Ssam * This function implements traditional assert. By default assertions 402171095Ssam * are enabled. It can be disabled by defining XGE_DEBUG_ASSERT macro in 403171095Ssam * compilation 404171095Ssam * time. 405171095Ssam */ 406171095Ssam#define xge_assert(test) { \ 407173139Srwatson if (!(test)) xge_os_bug("bad cond: "#test" at %s:%d\n", \ 408171095Ssam __FILE__, __LINE__); } 409171095Ssam#else 410171095Ssam#define xge_assert(test) 411171095Ssam#endif /* end of XGE_DEBUG_ASSERT */ 412171095Ssam 413171095Ssam__EXTERN_END_DECLS 414171095Ssam 415171095Ssam#endif /* XGE_DEBUG_H */ 416