d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef _DEBUG_H_
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define _DEBUG_H_
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* TBA - complete debug.h file content */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef __LINUX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <linux/types.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <linux/kernel.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(USER_LINUX)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <stdio.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <string.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <stdlib.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/types.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(__SunOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/types.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/cmn_err.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/ddi.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <sys/sunddi.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#undef u /* see solaris/src/bnxe.h for explanation */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "bcmtype.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t win_debug_enter_fatal_state( const IN u8_t b_dbg );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DBG_ERR_STR "(!)"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DBG_WRN_STR "(?)"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// convert __FILE__ to wchar_t - __WFILE__
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WIDEN2(x) L ## x
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WIDEN(x) WIDEN2(x)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __WFILE__ WIDEN(__FILE__)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// This is a substitution for __FILE__ in order to get rid of entire file path
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if !(defined _VBD_CMD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __FILE_STRIPPED__ strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __WFILE_STRIPPED__ wcsrchr(__WFILE__, L'\\') ? wcsrchr(__WFILE__, L'\\') + 1 : __WFILE__
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else // VBD_CMD
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __FILE_STRIPPED__ __FILE__
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __WFILE_STRIPPED__ __WFILE__
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// Currently only VBD_CMD support it but maybe other USER_MODE like WineDiag should support it as well
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid printf_color( unsigned long color, const char *format, ... );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define printf_ex printf_color
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif // !(_VBD_CMD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MAX_STR_DBG_LOGGER_NAME 100
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// logger callback prototype
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef u8_t (*debug_logger_cb_t)( void *context, long msg_code, long gui_code, u8_t b_raise_gui, u32_t string_cnt, u32_t data_cnt, ...) ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// logger functins prototype
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t debug_deregister_logger ( IN const void* context ) ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t debug_register_logger ( debug_logger_cb_t debug_logger_cb,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi long msg_code,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi long gui_code,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t b_raise_gui,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void* context,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t times_to_log ) ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t debug_execute_loggers ( unsigned short* wsz_file, unsigned long line, unsigned short* wsz_cond ) ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid debug_register_logger_device_name( unsigned short* wstr_device_desc, unsigned long size ) ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// max number of loggers
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MAX_DEBUG_LOGGER_CNT 3
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _dbg_logger_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_logger_cb_t debug_logger_cb ; // callback
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void* context ; // unique context
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t msg_code ; // msg_code
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t gui_code ; // gui_code
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t b_raise_gui ; // do raise gui message
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t times_to_log ; // number of times to log
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} dbg_logger_t ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern dbg_logger_t g_dbg_logger_arr[MAX_DEBUG_LOGGER_CNT] ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Debug Break Filters */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern u32_t g_dbg_flags;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MEMORY_ALLOCATION_FAILURE 0x1
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define FW_SANITY_UPLOAD_CHECK 0x2
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define UNDER_TEST 0x4
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INVALID_MESSAGE_ID 0x8
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define ABORTIVE_DISCONNECT_DURING_IND 0x10
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define SRIOV_TEST 0x20
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DBG_BREAK_ON(_cond) (GET_FLAGS(g_dbg_flags, _cond) != 0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Storage defined in the module main c file */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern u8_t dbg_trace_level;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern u32_t dbg_code_path;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* code paths */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_INIT 0x00000100 /* Initialization */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_NVM 0x00000200 /* nvram */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_ELINK 0x00000400 /* ELINK */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L2_SP 0x00001000 /* L2 Slow Path */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L2_SEND 0x00002000 /* L2 Transmit */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L2_RECV 0x00004000 /* L2 Receive */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L2_INTERRUPT 0x00008000 /* L2 Interrupt */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L2 0x0000f000 /* L2 all */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L4_SP 0x00010000 /* L4 Slow Path */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L4_SEND 0x00020000 /* L4 Transmit */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L4_RECV 0x00040000 /* L4 Receive */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L4_INTERRUPT 0x00080000 /* L4 Interrupt */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L4 0x000f0000 /* L4 all */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L5_SP 0x00100000 /* L5 Slow Path */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L5_SEND 0x00200000 /* L5 Transmit */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L5_RECV 0x00400000 /* L5 Receive */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_L5 0x00f00000 /* L5 all */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_VF 0x01000000 /* VF all */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_EQ 0x02000000 /* Event Queue */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_STAT 0x04000000 /* Statistics */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_ER 0x08000000 /* Event Queue */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_OMGR 0x10000000 /* OOO Manager */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_ENCAP 0x20000000 /* Encapsulated packets */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_DIAG 0x40000000 /* Diagnostics */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_MISC 0x80000000 /* Miscellaneous */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* more code paths can be added
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * bits that are still not defined can be privately used in each module */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_ALL 0xffffff00
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CP_MASK 0xffffff00
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Message levels. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef enum
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi LV_VERBOSE = 0x04,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi LV_INFORM = 0x03,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi LV_WARN = 0x02,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi LV_FATAL = 0x01
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} msg_level_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define LV_MASK 0xff
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Code path and messsage level combined. These are the first argument
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * of the DbgMessage macro. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEi (CP_INIT | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMi (CP_INIT | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNi (CP_INIT | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEnv (CP_NVM | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMnv (CP_NVM | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNnv (CP_NVM | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl2sp (CP_L2_SP | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl2sp (CP_L2_SP | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl2sp (CP_L2_SP | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl2tx (CP_L2_SEND | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl2tx (CP_L2_SEND | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl2tx (CP_L2_SEND | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl2rx (CP_L2_RECV | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl2rx (CP_L2_RECV | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl2rx (CP_L2_RECV | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl2int (CP_L2_INTERRUPT | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl2int (CP_L2_INTERRUPT | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl2int (CP_L2_INTERRUPT | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl2 (CP_L2 | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl2 (CP_L2 | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl2 (CP_L2 | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl4sp (CP_L4_SP | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl4sp (CP_L4_SP | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl4sp (CP_L4_SP | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl4tx (CP_L4_SEND | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl4tx (CP_L4_SEND | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl4tx (CP_L4_SEND | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl4rx (CP_L4_RECV | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl4rx (CP_L4_RECV | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl4rx (CP_L4_RECV | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl4fp (CP_L4_RECV | CP_L4_SEND | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl4fp (CP_L4_RECV | CP_L4_SEND | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl4fp (CP_L4_RECV | CP_L4_SEND | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl4int (CP_L4_INTERRUPT | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl4int (CP_L4_INTERRUPT | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl4int (CP_L4_INTERRUPT | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl4 (CP_L4 | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl4 (CP_L4 | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl4 (CP_L4 | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl5sp (CP_L5_SP | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl5sp (CP_L5_SP | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl5sp (CP_L5_SP | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl5tx (CP_L5_SEND | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl5tx (CP_L5_SEND | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl5tx (CP_L5_SEND | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl5rx (CP_L5_RECV | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl5rx (CP_L5_RECV | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl5rx (CP_L5_RECV | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEl5 (CP_L5 | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMl5 (CP_L5 | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNl5 (CP_L5 | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEvf (CP_VF | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMvf (CP_VF | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNvf (CP_VF | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define FATALvf (CP_VF | LV_FATAL)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEmi (CP_MISC | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMmi (CP_MISC | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNmi (CP_MISC | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEeq (CP_EQ | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMeq (CP_EQ | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNeq (CP_EQ | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSOmgr (CP_OMGR | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFOROmgr (CP_OMGR | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WAROmgr (CP_OMGR | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEstat (CP_STAT | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMstat (CP_STAT | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNstat (CP_STAT | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Error Recovery */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEer (CP_ER | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMer (CP_ER | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNer (CP_ER | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Elink */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEelink (CP_ELINK | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMelink (CP_ELINK | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNelink (CP_ELINK | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Encapsulated packets */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSEencap (CP_ENCAP | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORMencap (CP_ENCAP | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARNencap (CP_ENCAP | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define FATAL (CP_ALL | LV_FATAL)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* This is an existing debug macro in 2.6.27 Linux kernel */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef WARN
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#undef WARN
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(_VBD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARN (0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WARN (CP_ALL | LV_WARN)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define INFORM (CP_ALL | LV_INFORM)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VERBOSE (CP_ALL | LV_VERBOSE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(DOS) || defined(__USER_MODE_DEBUG) || defined(UEFI)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfAll(_cond) do {\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(_cond) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi printf("DEBUG BREAK! Condition failed: if("#_cond##")\n"); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi fflush(stdout); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi log_message("DEBUG BREAK! Condition failed: if("#_cond##") at file %s (line %4d)\n", __FILE_STRIPPED__, __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi assert(0); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define EXECUTE_LOGGERS(_s) do {\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi printf(_s); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi fflush(stdout); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(_VBD_CMD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <assert.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <string.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfAll(_cond) do {\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(_cond) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgMessage(NULL, FATAL, "DEBUG BREAK! Condition failed: if("#_cond##")\n"); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi assert(0); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define EXECUTE_LOGGERS(_s) DbgMessage(NULL, FATAL, _s);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(__LINUX) || defined(USER_LINUX)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfAll(_cond) do {\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(_cond) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgMessage(NULL, FATAL, "DEBUG BREAK! Condition failed: if(%s)\n", #_cond); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_break(); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define EXECUTE_LOGGERS(_s) DbgMessage(NULL, FATAL, _s);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(__SunOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(__SunOS_MDB)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfAll(_c) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (_c) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* nop in MDB */ ; \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } while (0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else /* !__SunOS_MDB */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfAll(_c) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if (_c) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi cmn_err(CE_PANIC, "<%d> %s(%4d): Condition Failed! - if ("#_c")", \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ((FATAL) & LV_MASK), \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi __FILE_STRIPPED__, \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } while (0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* __SunOS_MDB */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define EXECUTE_LOGGERS(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else // Windows
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiunsigned char __cdecl win_debug_log_assert( void* drv_object,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi long msg_code,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi long gui_code,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned char b_raise_gui,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned int string_cnt,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned int data_cnt,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if DBG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfAll(_cond) DbgBreakIf(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <ntddk.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <wchar.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Debug Print callback - printk (DbgPrint/vDbgPrintEx)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef
d14abf155341d55053c76eeec58b787a456b753bRobert MustacchiULONG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi(__cdecl* PFN_DRIVER_TRACE)(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN PCHAR String,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiextern PFN_DRIVER_TRACE printk;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfAll(_cond) do {\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(_cond) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_execute_loggers( __WFILE_STRIPPED__ , __LINE__, WIDEN(#_cond##) ); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi printk("eVBD-DRV: DEBUG BREAK! Condition failed: if("#_cond##")\n"); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if ( win_debug_enter_fatal_state(FALSE) )\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi {\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreakPoint();\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif //DBG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define EXECUTE_LOGGERS(_s) debug_execute_loggers( __WFILE_STRIPPED__ , __LINE__, WIDEN(#_s##) )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if DBG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* These constants control the output of messages.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Set your debug message output level and code path here. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef DBG_MSG_CP
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DBG_MSG_CP CP_ALL /* Where to output messages. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef DBG_MSG_LV
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef _VBD_CMD_
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DBG_MSG_LV dbg_trace_level
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//change this to higher level than FATAL to open debug messages.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DBG_MSG_LV LV_FATAL /* Level of message output. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//STATIC is now not empty define
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef STATIC
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define STATIC static
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#define DbgBreak(_c)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* This is the original implementation where both code path and debug level can only be defined
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi once at compile time */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if 0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CODE_PATH(_m) ((_m) & DBG_MSG_CP)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MSG_LEVEL(_m) ((_m) & LV_MASK)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define LOG_MSG(_m) (CODE_PATH(_m) && \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MSG_LEVEL(_m) <= DBG_MSG_LV)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CODE_PATH(_m) ((_m) & dbg_code_path)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MSG_LEVEL(_m) ((_m) & LV_MASK)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define LOG_MSG(_m) (CODE_PATH(_m) && \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MSG_LEVEL(_m) <= dbg_trace_level)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_print_bdf(int level, void* dev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* per OS methods */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(UEFI)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <stdio.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <assert.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <string.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid console_cleanup(void);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiconsole_init(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiconsole_print(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * console_buffer_p
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid __cdecl
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchidebug_msgx(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long level,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char *msg,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MessageHdr(_dev, _level) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_msgx((_level), "TrLv<%d>, %s (%4d): ", ((_level) & LV_MASK), __FILE_STRIPPED__, __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mm_print_bdf(_level, (void*)(_dev)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } while (0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//void DbgMessage(void *dummy, int level, char *msg, ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgMessage
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define log_message
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define debug_break() do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_msgx(FATAL, "DEBUG BREAK!\n"); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi console_print(NULL); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi fflush(stdout); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi assert(0); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreak() debug_break()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIf(_cond) do {\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(_cond) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr(NULL,LV_FATAL); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_msgx(FATAL, "Condition failed: if("#_cond##")\n"); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_break(); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsg(_s) do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr(NULL,LV_FATAL); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_msgx(FATAL, "Debug Break Message: " _s); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_break(); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakFastPath() DbgBreak()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfFastPath(_cond) DbgBreakIf(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsgFastPath(_s) DbgBreakMsg(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define dbg_out(_c, _m, _s, _d1) debug_msgx((WARN), "TrLv<%d>, %s (%4d): %p"##_s" %s\n", ((WARN) & LV_MASK), __FILE_STRIPPED__, __LINE__, _c, _d1 )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(DOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <stdio.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <assert.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <string.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid console_cleanup(void);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiconsole_init(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiconsole_print(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * console_buffer_p
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid __cdecl
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchidebug_msgx(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long level,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char *msg,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid __cdecl
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilog_msgx(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char *msg,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// DOS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define debug_message(l, fmt, ...) debug_msgx(l, fmt, ##__VA_ARGS__)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define log_message(fmt, ...) log_msgx(fmt, ##__VA_ARGS__)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// TODO: need to relate to dbg_trace_module_name
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MessageHdr(_dev, _level) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message("%s, TrLv<%d>, %s (%d): %p ", dbg_trace_module_name, (_level), __FILE_STRIPPED__, __LINE__, _dev )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi*/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// DOS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MessageHdr(_dev, _level) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message((_level), "TrLv<%d>, %s (%4d): ", ((_level) & LV_MASK), __FILE_STRIPPED__, __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mm_print_bdf(_level, (void*)(_dev)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } while (0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgMessage(_c, _m, _s, ...) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchido { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr((_c), (_m)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message((_m), _s, ##__VA_ARGS__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// DOS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define debug_break() do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message(FATAL, "DEBUG BREAK at file %s (line %4d)!\n", __FILE_STRIPPED__, __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi log_message("DEBUG BREAK at file %s (line %4d)!\n", __FILE_STRIPPED__, __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi console_print(NULL); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi fflush(stdout); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi assert(0); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// DOS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreak() debug_break()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// DOS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIf(_cond) do {\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(_cond) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr(NULL,LV_FATAL); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message(FATAL, "Condition failed: if("#_cond##")\n"); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_break(); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// DOS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsg(_s) do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr(NULL,LV_FATAL); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message(FATAL, "Debug Break Message: " _s); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_break(); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// DOS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakFastPath() DbgBreak()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfFastPath(_cond) DbgBreakIf(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsgFastPath(_s) DbgBreakMsg(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// DOS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define dbg_out(_c, _m, _s, _d1) debug_msgx((WARN), "TrLv<%d>, %s (%4d): %p"##_s" %s\n", ((WARN) & LV_MASK), __FILE_STRIPPED__, __LINE__, _c, _d1 )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(__USER_MODE_DEBUG)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <stdio.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <assert.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <string.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid __cdecl
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilog_msgx(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char *msg,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define debug_message(fmt, ...) printf(fmt, ##__VA_ARGS__); fflush(stdout);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define log_message(fmt, ...) log_msgx(fmt, ##__VA_ARGS__)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// TODO: need to relate to dbg_trace_module_name
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MessageHdr(_dev, _level) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message("%s, TrLv<%d>, %s (%d): %p ", dbg_trace_module_name, (_level), __FILE_STRIPPED__, __LINE__, _dev )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi*/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// __USER_MODE_DEBUG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MessageHdr(_dev, _level) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message("TrLv<%d>, %-12s (%4d): %p ", ((_level) & LV_MASK), __FILE_STRIPPED__, __LINE__, _dev )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgMessage(_c, _m, _s, ...) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(LOG_MSG(_m)) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr((_c), (_m)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message(_s, ##__VA_ARGS__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// __USER_MODE_DEBUG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define debug_break() do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message("DEBUG BREAK at file %s (line %4d)!\n", __FILE_STRIPPED__, __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi log_message("DEBUG BREAK at file %s (line %4d)!\n", __FILE_STRIPPED__, __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi fflush(stdout); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi assert(0); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// __USER_MODE_DEBUG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreak() debug_break()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIf(_cond) do {\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(_cond) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr(NULL,LV_FATAL); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message("Condition failed: if("#_cond##")\n"); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_break(); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// __USER_MODE_DEBUG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsg(_s) do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr(NULL,LV_FATAL); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_message("Debug Break Message: " _s); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_break(); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// __USER_MODE_DEBUG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakFastPath() DbgBreak()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfFastPath(_cond) DbgBreakIf(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsgFastPath(_s) DbgBreakMsg(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi//#define dbg_out(_c, _m, _s, _d1) DbgMessage((_c), (_m), (_s), (_d1))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define dbg_out(_c, _m, _s, _d1) printf(_s, _d1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(__LINUX) || defined(USER_LINUX)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __cdecl
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreak debug_break
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#undef __FILE_STRIPPED__
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef __LINUX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchichar *os_if_strrchr(char *a, int n);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __FILE_STRIPPED__ os_if_strrchr(__FILE__, '/') ? os_if_strrchr(__FILE__, '/') + 1 : __FILE__
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define __FILE_STRIPPED__ strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Debug break and output routines.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid __cdecl
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchidebug_msgx(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long level,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char *msg,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef USER_LINUX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid __cdecl
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilog_msgx(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char *msg,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MessageHdr(_dev, _level) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi printf("TrLv<%d>, %s (%4d): %p ", ((_level) & LV_MASK), __FILE_STRIPPED__, __LINE__, _dev )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define log_message(fmt, ...) log_msgx(fmt, ##__VA_ARGS__)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define debug_break() do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr(NULL, LV_FATAL); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_msgx(FATAL, "DEBUG BREAK at file %s (line %4d)!\n", __FILE_STRIPPED__, __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi log_message("DEBUG BREAK at file %s (line %4d)!\n", __FILE_STRIPPED__, __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi fflush(stdout); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi exit(1); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} while(0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else /* KERNEL */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MessageHdr(_dev, _level) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi do { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi printk(KERN_CRIT "TrLv<%d>, %s (%4d): ", ((_level) & LV_MASK), __FILE_STRIPPED__, __LINE__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi mm_print_bdf(_level, (void*)(_dev)); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi } while (0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid debug_break(void);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef USER_LINUX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgMessageXX(_c, _m, _s...) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(LOG_MSG(_m)) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr(_c, _m); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_msgx(_m, ##_s); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else /* __LINUX */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgMessageXX(_c, _m, _s...) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(unlikely(LOG_MSG(_m))) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi MessageHdr(_c, _m); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_msgx(_m, ##_s); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgMessage DbgMessageXX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// LINUX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifdef USER_LINUX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIf(_c) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(_c) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgMessage(NULL, FATAL, "if("#_c")\n"); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreak(); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else /* __LINUX */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIf(_c) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(unlikely(_c)) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgMessage(NULL, FATAL, "if("#_c")\n"); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgBreak(); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// LINUX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsg(_m) do {DbgMessage(NULL, FATAL, _m); DbgBreak();} while (0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// LINUX
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakFastPath() DbgBreak()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfFastPath(_cond) DbgBreakIf(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsgFastPath(_s) DbgBreakMsg(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define dbg_out(_c, _m, _s, _d1) debug_msgx(_m, "TrLv<%d>, %s (%4d): %p"_s" %s\n", ((WARN) & LV_MASK), __FILE_STRIPPED__, __LINE__, _c, _d1 )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(__SunOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(__SunOS_MDB)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgMessage(_c, _m, _s, ...)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreak()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIf(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsg(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakFastPath()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfFastPath(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsgFastPath(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define dbg_out(_c, _m, _s, _d1) cmn_err(CE_NOTE, _s, _d1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* under //servers/main/nx2/577xx/drivers/solaris/src */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "bnxe_debug.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(__WINDOWS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(_VBD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include <SAL.h>
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef _In_
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define _In_
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef _Out_
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define _Out_
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Debug break and output routines.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchidebug_break(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *ctx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid __cdecl
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchidebug_msg(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *ctx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long level,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _In_ char *file,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long line,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _In_ char *msg,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid __cdecl
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchidebug_msgx(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *ctx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi unsigned long level,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi _In_ char *msg,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid um_dbg_log_msg(void* ctx, char *file, char *function, unsigned long line, const char* format_msg, unsigned int args_num, ...);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VA_NUM_ARGS_SIZE_PREFIX__VA_NUM_ARGS_SIZE_POSTFIX ,,,,,,,,,,0
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VA_NUM_ARGS(...) VA_NUM_ARGS_IMP_((VA_NUM_ARGS_SIZE_PREFIX_ ## __VA_ARGS__ ## _VA_NUM_ARGS_SIZE_POSTFIX,10,9,8,7,6,5,4,3,2,1,0))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VA_NUM_ARGS_IMP_(__args) VA_NUM_ARGS_IMP __args
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define VA_NUM_ARGS_IMP(__p0,__p1,__p2,__p3,__p4,__p5,__p6,__p7,__p8,__p9,__n,...) __n
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// WINDDK
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgMessage(_c, _m, _s, ...) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(LOG_MSG(_m)) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_msg(_c, _m, __FILE__, __LINE__, _s, ##__VA_ARGS__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi um_dbg_log_msg(_c, __FILE__, __FUNCTION__, __LINE__, _s, VA_NUM_ARGS(##__VA_ARGS__), ##__VA_ARGS__); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// WINDDK
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIf(_c) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi if(_c) \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi { \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_msg(NULL, FATAL, __FILE__, __LINE__, "if("#_c##")\n"); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_execute_loggers( __WFILE_STRIPPED__ , __LINE__, WIDEN(#_c##) );\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi win_debug_enter_fatal_state(TRUE);\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi __debugbreak(); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// WINDDK
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsg(_m) debug_msg(NULL, FATAL, __FILE__, __LINE__, _m); \
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi debug_execute_loggers( __WFILE_STRIPPED__ , __LINE__, WIDEN(#_m##) );\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi __debugbreak()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// WINDDK
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreak() debug_execute_loggers( __WFILE_STRIPPED__ , __LINE__, L"DbgBreak" );\
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi __debugbreak()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// WINDDK (debug)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakFastPath() DbgBreak()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfFastPath(_cond) DbgBreakIf(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsgFastPath(_s) DbgBreakMsg(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// WINDDK
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define dbg_out(_c, _m, _s, _d1) debug_msg(_c, _m, __FILE__, __LINE__, _s, _d1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif //OS architectures
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// Error Macros (Currently supports Windows DDK & DOS):
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// in debug builds - outputs a debug message and enter condition in case TRUE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// in release builds - enters condition in case TRUE (like debug but without the debug print)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// Macro for checking parameter for NULL value
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// Usage Example:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// if( CHECK_NULL( ptr ))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// return FALSE ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CHK_NULL(p) ((p==NULL) ? (dbg_out(NULL, WARN, DBG_ERR_STR" %s is NULL\n",#p), TRUE): FALSE )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// Macros that returns the value of the expression and outputs a debug string in debug versions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// Usage Example:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// if( ERR_IF( val < 0 ))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// return FALSE ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define ERR_IF(cond)(((cond)==TRUE) ? (dbg_out(NULL, WARN, DBG_ERR_STR" ErrIf failed %s\n",#cond), TRUE): FALSE )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WRN_IF(cond)(((cond)==TRUE) ? (dbg_out(NULL, WARN, DBG_WRN_STR" WrnIf failed %s\n",#cond), TRUE): FALSE )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else // !DBG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define STATIC static
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgMessage(_c, _m, ...)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if ! (defined(WIN_DIAG) || defined(__LINUX) || defined(USER_LINUX) || defined(__SunOS))
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// WINDDK DbgBreak (retail) and logging an event
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreak() debug_execute_loggers( __WFILE_STRIPPED__ , __LINE__, L"DbgBreak" )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIf(_cond) if(_cond){ debug_execute_loggers( __WFILE_STRIPPED__ , __LINE__, WIDEN(#_cond##) ); }
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsg(_s) debug_execute_loggers( __WFILE_STRIPPED__ , __LINE__, WIDEN(#_s##) )
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// WINDDK DbgBreak (retail) without logging an event
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakNoLog()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfNoLog(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsgNoLog(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi// WINDDK DbgBreak FastPath (retail)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakFastPath() DbgBreakNoLog()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfFastPath(_cond) DbgBreakIfNoLog(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsgFastPath(_s) DbgBreakMsgNoLog(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else // WIN_DIAG and Linux and Solaris
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreak()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIf(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsg(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakFastPath()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakIfFastPath(_cond)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define DbgBreakMsgFastPath(_s)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif // !WIN_DIAG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define CHK_NULL(p) (p==NULL)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define ERR_IF(cond)(cond==TRUE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define WRN_IF(cond)(cond==TRUE)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif // !DBG
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* _DEBUG_H_ */