blob: efcdef0d85b77787a833757986b88d5e24133b6e [file] [log] [blame]
#if !defined(COMMON_DEBUG_H)
#define COMMON_DEBUG_H
/*
* Marvell Debug Interface
*
* MACRO
* MV_DEBUG is defined in debug version not in release version.
*
* Debug funtions:
* MV_PRINT: print string in release and debug build.
* MV_DPRINT: print string in debug build.
* MV_TRACE: print string including file name, line number in release and debug build.
* MV_DTRACE: print string including file name, line number in debug build.
* MV_ASSERT: assert in release and debug build.
* MV_DASSERT: assert in debug build.
*/
#include "com_define.h"
/*
*
* Debug funtions
*
*/
/* For both debug and release version */
#if defined(SIMULATOR)
# include <assert.h>
# define MV_PRINT printf
# define MV_ASSERT assert
# define MV_TRACE(_x_) \
do { \
MV_PRINT("%s(%d) ", __FILE__, __LINE__); \
MV_PRINT _x_; \
} while (0)
#elif defined(_OS_WINDOWS)
/* for VISTA */
# if ((_WIN32_WINNT >= 0x0600) && defined(MV_DEBUG))
ULONG _cdecl MV_PRINT(char* format, ...);
# else
# define MV_PRINT DbgPrint
# endif /* ((_WIN32_WINNT >= 0x0600) && defined(MV_DEBUG)) */
# if (defined(_CPU_IA_64B) || defined(_CPU_AMD_64B))
# if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
# define NTAPI __stdcall
# else
# define NTAPI
# endif /* (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) */
void NTAPI DbgBreakPoint(void);
# define MV_ASSERT(_condition_) \
do { if (!(_condition_)) DbgBreakPoint(); } while(0)
# else
# define MV_ASSERT(_condition_) \
do { if (!(_condition_)) {__asm int 3}; } while(0)
# endif /* (defined(_CPU_IA_64B) || defined(_CPU_AMD_64B)) */
# define MV_TRACE(_x_) \
do { \
MV_PRINT("%s(%d) ", __FILE__, __LINE__); \
MV_PRINT _x_; \
} while (0)
#elif defined(_OS_LINUX)
# define MV_PRINT(format, arg...) printk("%s %d:" format, __FILE__, __LINE__, ## arg)
# define MV_ASSERT(_x_) BUG_ON(!(_x_))
# define MV_TRACE(_x_) \
do { \
MV_PRINT("%s(%d) ", __FILE__, __LINE__); \
MV_PRINT _x_; \
} while(0)
#elif defined(__QNXNTO__)
# define MV_PRINT printk("%s: ", mv_full_name), printk
# define MV_ASSERT(_x_) \
do { \
if (!(_x_)) \
MV_PRINT("Assert at File %s: Line %d.\n", \
__FILE__, __LINE__); \
} while (0)
# define MV_TRACE(_x_) \
do { \
MV_PRINT("%s(%d) ", __FILE__, __LINE__); \
printk _x_; \
} while(0)
#else /* OTHER OSes */
# define MV_PRINT(_x_)
# define MV_ASSERT(_condition_)
# define MV_TRACE(_x_)
#endif /* _OS_WINDOWS */
/*
* Used with MV_DBG macro, see below .
* Should be useful for Win driver too, so it is placed here.
*
*/
#define DMSG_POKE 0x0001 /* flag controlling the dump_stack() */
#define DMSG_KERN 0x0002 /* kernel driver dbg msg */
#define DMSG_SCSI 0x0004 /* SCSI Subsystem dbg msg */
#define DMSG_CORE 0x0008 /* CORE dbg msg */
#define DMSG_HBA 0x0010 /* HBA dbg msg */
#define DMSG_RESER03 0x0020
#define DMSG_FREQ 0x0040 /* msg that'll pop up 100+ times per sec */
#define DMSG_IOCTL 0x0080 /* ioctl msg */
#define DMSG_MSG 0x0100 /* plain msg, should be enabled all time */
#define DMSG_SCSI_FREQ 0x0200 /* freq scsi dbg msg */
#define DMSG_RAID 0x0400 /* raid dbg msg */
#define DMSG_PROF 0x0800 /* profiling msg */
#define DMSG_PROF_FREQ 0x1000 /* freq profiling msg */
#define DMSG_RES 0x2000
#define DMSG_SAS 0x4000 /* sas msg */
#define DMSG_CORE_EH 0x8000 /* core error handling */
/* For debug version only */
#if defined(MV_DEBUG)
# ifdef _OS_LINUX
extern unsigned int mv_dbg_opts;
# define MV_DBG(x,...) \
do { \
if (unlikely(x&mv_dbg_opts)) { \
MV_PRINT(__VA_ARGS__); \
} \
} while (0)
# define MV_POKE() \
do { \
dump_stack(); \
} while (0)
# define MV_DPRINT(x) \
do { \
if (unlikely(DMSG_CORE&mv_dbg_opts)) \
MV_PRINT x; \
} while (0)
# else
# define MV_PRINT printk
# define MV_DPRINT(x) MV_PRINT x
/* in case drivers for non-linux os go crazy */
# define MV_DBG(x) do{}while(0)
# define MV_POKE()
# endif /* _OS_LINUX */
# define MV_DASSERT MV_ASSERT
# define MV_DTRACE MV_DTRACE
#else
# if defined(__QNXNTO__) || defined(_OS_LINUX)
# define MV_DBG(x,...) do{}while(0)
# else
# define MV_DBG(x) do{}while(0)
# endif /* __QNXNTO__ */
//# define MV_PRINT(x,...)
# define MV_POKE()
# define MV_DPRINT(x)
# define MV_DASSERT(x)
# define MV_DTRACE(x)
#endif /* MV_DEBUG */
MV_BOOLEAN mvLogRegisterModule(MV_U8 moduleId, MV_U32 filterMask, char* name);
MV_BOOLEAN mvLogSetModuleFilter(MV_U8 moduleId, MV_U32 filterMask);
MV_U32 mvLogGetModuleFilter(MV_U8 moduleId);
void mvLogMsg(MV_U8 moduleId, MV_U32 type, char* format, ...);
#endif /* COMMON_DEBUG_H */