wanpipe/patches/kdrivers/include/wanpipe_debug.h

697 lines
20 KiB
C

/*
************************************************************************
* wanpipe_debug.h WANPIPE(tm) Global definition for Sangoma *
* Debugging messages *
* *
* Authors: Alex Feldman <al.feldman@sangoma.com> *
* David Rokhvarg <davidr@sangoma.com> *
*======================================================================*
* *
* September 21 2009 David Rokhvarg *
* Added Wanpipe Logger definitions. *
* Improved cross-platform macro definitions for driver debugging. *
* *
* May 10 2002 Alex Feldman *
* Initial version *
* *
************************************************************************
*/
#ifndef __WANPIPE_DEBUG_H
# define __WANPIPE_DEBUG_H
#if defined(WAN_KERNEL)
#include "wanpipe_logger.h"
/* NC: If the undefs are used here, one cannot
use the Makefile to enable them. Code is left
here as overview of all available options. Please
use the Makefile to enable them on compile time. */
#if 0
#undef WAN_DEBUG_TE1
#undef WAN_DEBUG_HWEC
#undef WAN_DEBUG_TDMAPI
#undef WAN_DEBUG_BRI
#undef WAN_DEBUG_KERNEL
#undef WAN_DEBUG_MOD
#undef WAN_DEBUG_CFG
#undef WAN_DEBUG_REG
#undef WAN_DEBUG_INIT_VAR
#undef WAN_DEBUG_IOCTL
#undef WAN_DEBUG_CMD
#undef WAN_DEBUG_ISR
#undef WAN_DEBUG_RX
#undef WAN_DEBUG_RX_ERROR
#undef WAN_DEBUG_TX
#undef WAN_DEBUG_TX_ERROR
#undef WAN_DEBUG_TIMER
#undef WAN_DEBUG_UDP
#undef WAN_DEBUG_56K
#undef WAN_DEBUG_A600
#undef WAN_DEBUG_PROCFS
#undef WAN_DEBUG_TDM_VOICE
#undef WAN_DEBUG_TEST
#undef WAN_DEBUG_DBG
#undef WAN_DEBUG_DMA
#undef WAN_DEBUG_SNMP
#undef WAN_DEBUG_TE3
#undef WAN_DEBUG_RM
#undef WAN_DEBUG_FE
#undef WAN_DEBUG_NG
#undef WAN_DEBUG_MEM
#undef WAN_DEBUG_BRI_INIT
#undef WAN_DEBUG_USB
#undef WAN_DEBUG_FUNC
#endif
#define WAN_DEBUG_EVENT /* must be defined for wpabs_debug_event() */
#define AFT_FUNC_DEBUG()
#define WAN_KRN_BREAK_POINT()
#if defined (__WINDOWS__)
extern void OutputLogString(const char *fmt, ...); /* Print to wanpipelog.txt (NOT to Debugger). */
# define DEBUG_PRINT(...) OutputLogString(## __VA_ARGS__)
# define _DEBUG_PRINT(...) OutputLogString(## __VA_ARGS__)
# undef WAN_KRN_BREAK_POINT
# define WAN_KRN_BREAK_POINT() if(0)DbgBreakPoint()
#endif
#if (defined __FreeBSD__) || (defined __OpenBSD__) || defined(__NetBSD__)
# define DEBUG_PRINT(format,msg...) log(LOG_INFO, format, ##msg)
# define _DEBUG_PRINT(format,msg...) log(LOG_INFO, format, ##msg)
#endif
#if defined (__LINUX__)
# define DEBUG_PRINT(...) printk(KERN_INFO ## __VA_ARGS__)
# define _DEBUG_PRINT(...) printk(## __VA_ARGS__)
#endif
#if 1
# define DBG_BATTERY_REMOVAL DEBUG_TEST
#else
# if defined (__WINDOWS__)
# define DBG_BATTERY_REMOVAL if(1)DbgPrint
# else
# define DBG_BATTERY_REMOVAL if(1)DEBUG_EVENT
# endif
#endif
#if defined (__WINDOWS__)
# define DEBUG_TASKQ if(0)DbgPrint
#else
# define DEBUG_TASKQ if(0)DEBUG_EVENT
#endif
/*========================================================
COMMON CODE
*========================================================*/
#define DEBUG_KERNEL(...)
#define DEBUG_MOD(...)
#define DEBUG_CFG(...)
#define DEBUG_REG(...)
#define DEBUG_INIT(...)
#define DEBUG_IOCTL(...)
#define DEBUG_CMD(...)
#define DEBUG_ISR(...)
#define DEBUG_RX(...)
#define DEBUG_RX_ERR(...)
#define DEBUG_TX(...)
#define _DEBUG_TX(...)
#define DEBUG_TX_ERR(...)
#define DEBUG_TIMER(...)
#define DEBUG_UDP(...)
#define DEBUG_TE3(...)
#define DEBUG_56K(...)
#define DEBUG_A600(...)
#define DEBUG_PROCFS(...)
#define DEBUG_TDMV(...)
#define DEBUG_TEST(...)
#define DEBUG_DBG(...)
#define DEBUG_DMA(...)
#define DEBUG_SNMP(...)
#define DEBUG_RM(...)
#define DEBUG_NG(...)
#define DEBUG_BRI_INIT(...)
#define DEBUG_USB(...)
#define _DEBUG_EVENT(...)
#define DEBUG_ADD_MEM(a)
#define DEBUG_SUB_MEM(a)
#define WAN_DEBUG_FUNC_START
#define WAN_DEBUG_FUNC_END
#define WAN_DEBUG_FUNC_LINE
#if 0
# undef _DEBUG_EVENT
# if 1
# define _DEBUG_EVENT(...) _DEBUG_PRINT(...)
# else
# define _DEBUG_EVENT(format,msg...) _DEBUG_PRINT(format,##msg)
# endif
#endif
#ifdef WAN_DEBUG_KERNEL
# undef DEBUG_KERNEL
# define DEBUG_KERNEL(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_MOD
# undef DEBUG_MOD
# define DEBUG_MOD(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_CFG
# undef DEBUG_CFG
# define DEBUG_CFG(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_REG
# undef DEBUG_REG
# define DEBUG_REG(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_INIT_VAR
# undef DEBUG_INIT
# define DEBUG_INIT(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_IOCTL
# undef DEBUG_IOCTL
# define DEBUG_IOCTL(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_CMD
# undef DEBUG_CMD
# define DEBUG_CMD(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_ISR
# undef DEBUG_ISR
# define DEBUG_ISR(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_RX
# undef DEBUG_RX
# define DEBUG_RX(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_RX_ERROR
# undef DEBUG_RX_ERR
# define DEBUG_RX_ERR DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_TX
# undef DEBUG_TX
# define DEBUG_TX(...) DEBUG_PRINT(## __VA_ARGS__)
# undef _DEBUG_TX
# define _DEBUG_TX(...) _DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_TX_ERROR
# undef DEBUG_TX_ERR
# define DEBUG_TX_ERR(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_TIMER
# undef DEBUG_TIMER
# define DEBUG_TIMER(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_UDP
# undef DEBUG_UDP
# define DEBUG_UDP(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_TE3
# undef DEBUG_TE3
# define DEBUG_TE3(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_56K
# undef DEBUG_56K
# define DEBUG_56K(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_A600
# undef DEBUG_A600
# define DEBUG_A600(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_PROCFS
# undef DEBUG_PROCFS
# define DEBUG_PROCFS(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_TDM_VOICE
# undef DEBUG_TDMV
# define DEBUG_TDMV(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_TEST
# undef DEBUG_TEST
# define DEBUG_TEST(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_DBG
# undef DEBUG_DBG
# define DEBUG_DBG(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_DMA
# undef DEBUG_DMA
# define DEBUG_DMA(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_SNMP
# undef DEBUG_SNMP
# define DEBUG_SNMP(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_RM
# undef DEBUG_RM
# define DEBUG_RM(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_NG
# undef DEBUG_NG
# define DEBUG_NG(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_BRI_INIT
# undef DEBUG_BRI_INIT
# define DEBUG_BRI_INIT(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
#ifdef WAN_DEBUG_USB
# undef DEBUG_USB
# define DEBUG_USB(...) DEBUG_PRINT(## __VA_ARGS__)
#endif
/*=================================================*/
/* general Wanpipe Logger macros */
#ifdef WP_LOGGER_DISABLE
/* Debug case in order to check print argument mismatches */
#ifdef __LINUX__
#warning "WP_LOGGER_DISABLE Enabled"
#endif
#ifdef WAN_DEBUG_EVENT_AS_KERN_DEBUG
#define DEBUG_EVENT(format,msg...) printk(KERN_DEBUG format, ##msg)
#else
#define DEBUG_EVENT(format,msg...) printk(KERN_INFO format, ##msg)
#endif
#define DEBUG_WARNING(format,msg...) printk(KERN_WARNING format, ##msg)
#define DEBUG_ERROR(format,msg...) printk(KERN_ERR format, ##msg)
#else
/* Default case */
#define DEBUG_EVENT(...) \
WP_DEBUG(WAN_LOGGER_DEFAULT, SANG_LOGGER_INFORMATION, ## __VA_ARGS__)
#define DEBUG_WARNING(...) \
WP_DEBUG(WAN_LOGGER_DEFAULT, SANG_LOGGER_WARNING, ## __VA_ARGS__)
#define DEBUG_ERROR(...) \
WP_DEBUG(WAN_LOGGER_DEFAULT, SANG_LOGGER_ERROR, ## __VA_ARGS__)
#endif
/***************************************/
/* task-specific Wanpipe Logger macros */
/* T1/E1 */
#define DEBUG_TE1(...) \
WP_DEBUG(WAN_LOGGER_TE1, SANG_LOGGER_TE1_DEFAULT, ## __VA_ARGS__)
/* Hardware Echo Canceller */
#define DEBUG_HWEC(...) \
WP_DEBUG(WAN_LOGGER_HWEC, SANG_LOGGER_HWEC_DEFAULT, ## __VA_ARGS__)
/* TDM API */
#define DEBUG_TDMAPI(...) \
WP_DEBUG(WAN_LOGGER_TDMAPI, SANG_LOGGER_TDMAPI_DEFAULT, ## __VA_ARGS__)
/* General Front End code */
#define DEBUG_FE(...) \
WP_DEBUG(WAN_LOGGER_FE, SANG_LOGGER_FE_DEFAULT, ## __VA_ARGS__)
/* BRI */
#define DEBUG_BRI(...) \
WP_DEBUG(WAN_LOGGER_BRI, SANG_LOGGER_BRI_DEFAULT, ## __VA_ARGS__)
#define DEBUG_HFC_S0_STATES(...) \
WP_DEBUG(WAN_LOGGER_BRI, SANG_LOGGER_BRI_HFC_S0_STATES, ## __VA_ARGS__)
#define DEBUG_L2_TO_L1_ACTIVATION(...) \
WP_DEBUG(WAN_LOGGER_BRI, SANG_LOGGER_BRI_L2_TO_L1_ACTIVATION, ## __VA_ARGS__)
/*==== End of Wanpipe Logger macro definitions ====*/
/*=================================================*/
#define WAN_DEBUG_FLINE DEBUG_EVENT("[%s]: %s:%d\n", \
__FILE__,__FUNCTION__,__LINE__);
#if defined(WAN_DEBUG_FUNC)
# undef WAN_DEBUG_FUNC_START
# define WAN_DEBUG_FUNC_START DEBUG_EVENT("[%s]: %s:%d: Start (%d)\n",\
__FILE__,__FUNCTION__,__LINE__, (unsigned int)SYSTEM_TICKS);
# undef WAN_DEBUG_FUNC_END
# define WAN_DEBUG_FUNC_END DEBUG_EVENT("[%s]: %s:%d: End (%d)\n", \
__FILE__,__FUNCTION__,__LINE__,(unsigned int)SYSTEM_TICKS);
# undef WAN_DEBUG_FUNC_LINE
# define WAN_DEBUG_FUNC_LINE DEBUG_EVENT("[%s]: %s:%d: (%d)\n", \
__FILE__,__FUNCTION__,__LINE__,(unsigned int)SYSTEM_TICKS);
#define BRI_FUNC() if(0)DEBUG_EVENT("%s(): line:%d\n", __FUNCTION__, __LINE__)
#else
# define BRI_FUNC()
#endif /* WAN_DEBUG_FUNC */
#define WAN_ASSERT(val) if (val){ \
DEBUG_EVENT("************** ASSERT FAILED **************\n"); \
DEBUG_EVENT("%s:%d - Critical error\n",__FILE__,__LINE__); \
WAN_KRN_BREAK_POINT(); \
return -EINVAL; \
}
#define WAN_ASSERT_EINVAL(val) WAN_ASSERT(val)
#define WAN_ASSERT1(val) if (val){ \
DEBUG_EVENT("************** ASSERT FAILED **************\n"); \
DEBUG_EVENT("%s:%d - Critical error\n",__FILE__,__LINE__); \
return; \
}
#define WAN_ASSERT_VOID(val) WAN_ASSERT1(val)
#define WAN_ASSERT2(val, ret) if (val){ \
DEBUG_EVENT("************** ASSERT FAILED **************\n"); \
DEBUG_EVENT("%s:%d - Critical error\n",__FILE__,__LINE__); \
return ret; \
}
#define WAN_ASSERT_RC(val,ret) WAN_ASSERT2(val, ret)
#define WAN_MEM_ASSERT(str) {if (str){ \
DEBUG_EVENT("%s: Error: No memory in %s:%d\n", \
str,__FILE__,__LINE__); \
}else{ \
DEBUG_EVENT("wanpipe: Error: No memory in %s:%d\n", \
__FILE__,__LINE__); \
} \
}
#define WAN_OPP_FLAG_ASSERT(val,cmd) if (val){ \
DEBUG_EVENT("%s:%d - Critical error: Opp Flag Set Cmd=0x%x!\n", \
__FILE__,__LINE__,cmd); \
}
#if defined(__FreeBSD__)
# ifndef WAN_SKBDEBUG
# define WAN_SKBDEBUG 0
# endif
# define WAN_SKBCRITASSERT(mm) if (WAN_SKBDEBUG){ \
if ((mm) == NULL){ \
panic("%s:%d: MBUF is NULL!\n", \
__FUNCTION__,__LINE__); \
} \
if (((mm)->m_flags & (M_PKTHDR|M_EXT)) != (M_PKTHDR|M_EXT)){ \
panic("%s:%d: Invalid MBUF m_flags=%X (m=%p)\n", \
__FUNCTION__,__LINE__, \
(mm)->m_flags,(mm)); \
} \
if ((unsigned long)(mm)->m_data < 0x100){ \
panic("%s:%d: Invalid MBUF m_data=%p (m=%p)\n", \
__FUNCTION__,__LINE__, \
(mm)->m_data,(mm)); \
} \
}
#else
# define WAN_SKBCRITASSERT(mm)
#endif
#define WAN_MEM_INIT(id) unsigned long mem_in_used_##id = 0x0l
#define WAN_MEM_INC(id,size) mem_in_used_##id += size
#define WAN_MEM_DEC(id,size) mem_in_used_##id -= size
/* WANPIPE debugging states */
#define WAN_DEBUGGING_NONE 0x00
#define WAN_DEBUGGING_AGAIN 0x01
#define WAN_DEBUGGING_START 0x02
#define WAN_DEBUGGING_CONT 0x03
#define WAN_DEBUGGING_PROTOCOL 0x04
#define WAN_DEBUGGING_END 0x05
/* WANPIPE debugging delay */
#define WAN_DEBUGGING_DELAY 60
/* WANPIPE debugging messages */
#define WAN_DEBUG_NONE_MSG 0x00
#define WAN_DEBUG_ALARM_MSG 0x01
#define WAN_DEBUG_TE1_MSG 0x02
#define WAN_DEBUG_TE3_MSG 0x02
#define WAN_DEBUG_LINERROR_MSG 0x03
#define WAN_DEBUG_CLK_MSG 0x04
#define WAN_DEBUG_TX_MSG 0x05
#define WAN_DEBUG_FR_CPE_MSG 0x06
#define WAN_DEBUG_FR_NODE_MSG 0x07
#define WAN_DEBUG_PPP_LCP_MSG 0x08
#define WAN_DEBUG_PPP_NAK_MSG 0x09
#define WAN_DEBUG_PPP_NEG_MSG 0x0A
#define WAN_DEBUG_CHDLC_KPLV_MSG 0x0B
#define WAN_DEBUG_CHDLC_UNKNWN_MSG 0x0C
/* WAN DEBUG timer */
#define WAN_DEBUG_INIT(card){ \
wan_tasklet_t* debug_task = &card->debug_task; \
WAN_TASKLET_INIT(debug_task, 0, &wanpipe_debugging, card); \
wan_clear_bit(0, (unsigned long*)&card->debug_running); \
wanpipe_debug_timer_init(card); \
}
#define WAN_DEBUG_END(card){ \
wan_del_timer(&card->debug_timer); \
WAN_TASKLET_KILL(&card->debug_task); \
}
#define WAN_DEBUG_STOP(card) wan_clear_bit(0, &card->debug_running)
#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__WINDOWS__)
# define WAN_DEBUG_START(card) \
if (!wan_test_bit(0, &card->debug_running)){ \
wan_set_bit(0, &card->debug_running); \
wan_add_timer(&card->debug_timer, 5*HZ); \
}
#elif defined(__LINUX__)
# define WAN_DEBUG_START(card) \
if (!wan_test_and_set_bit(0, &card->debug_running)){ \
wan_add_timer(&card->debug_timer, 5*HZ); \
}
#else
# error "Undefined WAN_DEBUG_START macro!"
#endif
#if defined(__OpenBSD__) && (OpenBSD >= 200611)
# define WP_READ_LOCK(lock,flag) { \
DEBUG_TEST("%s:%d: RLock %u\n",__FILE__,__LINE__,(u32)lock); \
flag = splnet(); }
# define WP_READ_UNLOCK(lock,flag) { \
DEBUG_TEST("%s:%d: RULock %u\n",__FILE__,__LINE__,(u32)lock); \
splx(flag);}
# define WP_WRITE_LOCK(lock,flag) { \
DEBUG_TEST("%s:%d: WLock %u\n",__FILE__,__LINE__,(u32)lock); \
flag = splnet(); }
# define WP_WRITE_UNLOCK(lock,flag) { \
DEBUG_TEST("%s:%d: WULock %u\n",__FILE__,__LINE__,(u32)lock); \
splx(flag); }
#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)
# define WP_READ_LOCK(lock,flag) { \
DEBUG_TEST("%s:%d: RLock %u\n",__FILE__,__LINE__,(u32)lock); \
flag = splimp(); }
# define WP_READ_UNLOCK(lock,flag) { \
DEBUG_TEST("%s:%d: RULock %u\n",__FILE__,__LINE__,(u32)lock); \
splx(flag);}
# define WP_WRITE_LOCK(lock,flag) { \
DEBUG_TEST("%s:%d: WLock %u\n",__FILE__,__LINE__,(u32)lock); \
flag = splimp(); }
# define WP_WRITE_UNLOCK(lock,flag) { \
DEBUG_TEST("%s:%d: WULock %u\n",__FILE__,__LINE__,(u32)lock); \
splx(flag); }
#elif defined(__WINDOWS__)
# define WP_READ_LOCK(lock,flag) { \
DEBUG_TEST("%s:%d: RLock 0x%p\n",__FILE__,__LINE__,lock); \
flag = splimp(); }
# define WP_READ_UNLOCK(lock,flag) { \
DEBUG_TEST("%s:%d: RULock 0x%p\n",__FILE__,__LINE__,lock); \
splx(flag);}
# define WP_WRITE_LOCK(lock,flag) { \
DEBUG_TEST("%s:%d: WLock 0x%p\n",__FILE__,__LINE__,lock); \
flag = splimp(); }
# define WP_WRITE_UNLOCK(lock,flag) { \
DEBUG_TEST("%s:%d: WULock 0x%p\n",__FILE__,__LINE__,lock); \
splx(flag); }
#elif defined(__LINUX__)
# define WAN_TIMEOUT(sec) { unsigned long timeout; \
timeout=jiffies; \
while ((jiffies-timeout)<sec*HZ){ \
schedule(); \
}\
}
# define WP_READ_LOCK(lock,flag) { DEBUG_TEST("%s:%d: RLock %u\n",__FILE__,__LINE__,(u32)lock);\
read_lock((lock)); flag=0; }
# define WP_READ_UNLOCK(lock,flag) { DEBUG_TEST("%s:%d: RULock %u\n",__FILE__,__LINE__,(u32)lock);\
read_unlock((lock)); flag=0; }
# define WP_WRITE_LOCK(lock,flag) { DEBUG_TEST("%s:%d: WLock %u\n",__FILE__,__LINE__,(u32)lock); \
write_lock_irqsave((lock),flag); }
# define WP_WRITE_UNLOCK(lock,flag) { DEBUG_TEST("%s:%d: WULock %u\n",__FILE__,__LINE__,(u32)lock); \
write_unlock_irqrestore((lock),flag); }
#else
# error "Undefined WAN_DEBUG_START macro!"
#endif
#if defined(__LINUX__) && defined(WP_FUNC_DEBUG)
#define WP_USEC_DEFINE() unsigned long wptimeout; struct timeval wptv1,wptv2;
#define WP_START_TIMING() wptimeout=jiffies; do_gettimeofday(&wptv1);
#define WP_STOP_TIMING_TEST(label,usec) { do_gettimeofday(&wptv2);\
wptimeout=jiffies-wptimeout; \
if (wptimeout >= 2){ \
DEBUG_EVENT("%s:%u %s Jiffies=%lu\n", \
__FUNCTION__,__LINE__,label,wptimeout); \
}\
\
wptimeout=wptv2.tv_usec - wptv1.tv_usec; \
if (wptimeout >= usec){ \
DEBUG_EVENT("%s:%u %s:%s Usec=%lu\n", \
__FUNCTION__,__LINE__,card->devname,label,wptimeout); \
}\
}
#else
#define WP_USEC_DEFINE()
#define WP_START_TIMING()
#define WP_STOP_TIMING_TEST(label,usec)
#endif
static __inline void debug_print_skb_pkt(unsigned char *name, unsigned char *data, int len, int direction)
{
#if defined(__LINUX__) && defined(__KERNEL__)
int i;
printk(KERN_INFO "%s: PKT Len(%i) Dir(%s)\n",name,len,direction?"RX":"TX");
printk(KERN_INFO "%s: DATA: ",name);
for (i=0;i<len;i++){
printk("%02X ", data[i]);
}
printk("\n");
#endif
}
#if 0
static __inline void debug_print_udp_pkt(unsigned char *data,int len,char trc_enabled, char direction)
{
#if defined(__LINUX__) && defined(__KERNEL__)
int i,res;
DEBUG_EVENT("\n");
DEBUG_EVENT("%s UDP PACKET: ",direction?"RX":"TX");
for (i=0; i<sizeof(wan_udp_pkt_t); i++){
if (i==0){
DEBUG_EVENT("\n");
DEBUG_EVENT("IP PKT: ");
}
if (i==sizeof(struct iphdr)){
DEBUG_EVENT("\n");
DEBUG_EVENT("UDP PKT: ");
}
if (i==sizeof(struct iphdr)+sizeof(struct udphdr)){
DEBUG_EVENT("\n");
DEBUG_EVENT("MGMT PKT: ");
}
if (i==sizeof(struct iphdr)+sizeof(struct udphdr)+sizeof(wan_mgmt_t)){
DEBUG_EVENT("\n");
DEBUG_EVENT("CMD PKT: ");
}
if (trc_enabled){
if (i==sizeof(struct iphdr)+sizeof(struct udphdr)+
sizeof(wan_mgmt_t)+sizeof(wan_cmd_t)){
DEBUG_EVENT("\n");
DEBUG_EVENT("TRACE PKT: ");
}
if (i==sizeof(struct iphdr)+sizeof(struct udphdr)+
sizeof(wan_mgmt_t)+sizeof(wan_cmd_t)+
sizeof(wan_trace_info_t)){
DEBUG_EVENT("\n");
DEBUG_EVENT("DATA PKT: ");
}
res=len-(sizeof(struct iphdr)+sizeof(struct udphdr)+
sizeof(wan_mgmt_t)+sizeof(wan_cmd_t)+sizeof(wan_trace_info_t));
res=(res>10)?10:res;
if (i==sizeof(struct iphdr)+sizeof(struct udphdr)+
sizeof(wan_mgmt_t)+sizeof(wan_cmd_t)+sizeof(wan_trace_info_t)+res){
break;
}
}else{
if (i==sizeof(struct iphdr)+sizeof(struct udphdr)+sizeof(wan_mgmt_t)+sizeof(wan_cmd_t)){
DEBUG_EVENT("\n");
DEBUG_EVENT("DATA PKT: ");
}
res=len-(sizeof(struct iphdr)+sizeof(struct udphdr)+
sizeof(wan_mgmt_t)+sizeof(wan_cmd_t));
res=(res>10)?10:res;
if (i==sizeof(struct iphdr)+sizeof(struct udphdr)+
sizeof(wan_mgmt_t)+sizeof(wan_cmd_t)+res){
break;
}
}
DEBUG_EVENT("%02X ",*(data+i));
}
DEBUG_EVENT("\n");
#endif
}
#endif
typedef struct wanpipe_debug_hdr {
unsigned long magic;
unsigned long total_len;
} wanpipe_kernel_msg_info_t;
#define WAN_DEBUG_SET_TRIGGER 0x01
#define WAN_DEBUG_CLEAR_TRIGGER 0x02
#define WAN_DEBUG_READING 0x00
#define WAN_DEBUG_FULL 0x01
#define WAN_DEBUG_TRIGGER 0x02
extern void wan_debug_trigger(int);
extern void wan_debug_write(char*);
extern int wan_debug_read(void*, void*);
/* NC Added to debug function calls */
#if 0
extern void wp_debug_func_init(void);
extern void wp_debug_func_add(unsigned char *func);
extern void wp_debug_func_print(void);
#endif
#endif /* WAN_KERNEL */
#endif /* __WANPIPE_DEBUG_H */