Commit 2564a148 authored by Stephen Hemminger's avatar Stephen Hemminger

beceem: cleanup debug level infrastructure

Add module parameter to control debug level and do code cleanup
The whole debug stuff should eventually be removed.
Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
parent 047a5f2b
#include "headers.h" #include "headers.h"
static UINT current_debug_level=BCM_SCREAM; void bcm_print_buffer(UINT debug_level, const char *function_name,
const char *file_name, int line_number,
int bcm_print_buffer( UINT debug_level, const char *function_name, const unsigned char *buffer, int bufferlen,
char *file_name, int line_number, unsigned char *buffer, int bufferlen, enum _BASE_TYPE base) BASE_TYPE base)
{ {
int i;
static const char * const buff_dump_base[] = { static const char * const buff_dump_base[] = {
"DEC", "HEX", "OCT", "BIN" "DEC", "HEX", "OCT", "BIN"
}; };
if(debug_level>=current_debug_level)
{ if(debug_level < BCM_SCREAM)
int i=0; return;
printk("\n%s:%s:%d:Buffer dump of size 0x%x in the %s:\n", file_name, function_name, line_number, bufferlen, buff_dump_base[1]);
for(;i<bufferlen;i++) printk("\n" KERN_DEBUG "%s:%s:%d:Buffer dump of size 0x%x in the %s:\n",
{ file_name, function_name, line_number, bufferlen, buff_dump_base[1]);
if(i && !(i%16) )
printk("\n"); for(i = 0; i < bufferlen;i++) {
switch(base) if(i && !(i%16) )
{ printk("\n");
case BCM_BASE_TYPE_DEC: switch(base) {
printk("%03d ", buffer[i]); case BCM_BASE_TYPE_DEC:
break; printk("%03d ", buffer[i]);
case BCM_BASE_TYPE_OCT: break;
printk("%0x03o ", buffer[i]); case BCM_BASE_TYPE_OCT:
break; printk("%0x03o ", buffer[i]);
case BCM_BASE_TYPE_BIN: break;
printk("%02x ", buffer[i]); case BCM_BASE_TYPE_BIN:
break; printk("%02x ", buffer[i]);
case BCM_BASE_TYPE_HEX: break;
default: case BCM_BASE_TYPE_HEX:
printk("%02X ", buffer[i]); default:
break; printk("%02X ", buffer[i]);
} break;
} }
printk("\n"); printk("\n");
} }
return 0;
} }
...@@ -18,11 +18,9 @@ typedef enum _BASE_TYPE ...@@ -18,11 +18,9 @@ typedef enum _BASE_TYPE
BCM_BASE_TYPE_NONE, BCM_BASE_TYPE_NONE,
} BASE_TYPE, *PBASE_TYPE; } BASE_TYPE, *PBASE_TYPE;
int bcm_print_buffer( UINT debug_level, const char *function_name, void bcm_print_buffer(UINT debug_level, const char *function_name,
char *file_name, int line_number, unsigned char *buffer, int bufferlen, BASE_TYPE base); const char *file_name, int line_number,
const unsigned char *buffer, int bufferlen, BASE_TYPE base);
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
...@@ -229,44 +227,32 @@ typedef struct _S_BCM_DEBUG_STATE { ...@@ -229,44 +227,32 @@ typedef struct _S_BCM_DEBUG_STATE {
//--- Only for direct printk's; "hidden" to API. //--- Only for direct printk's; "hidden" to API.
#define DBG_TYPE_PRINTK 3 #define DBG_TYPE_PRINTK 3
#define PRINTKS_ON 1 // "hidden" from API, set to 0 to turn off all printk's
#define BCM_DEBUG_PRINT(Adapter, Type, SubType, dbg_level, string, args...) do { \
if ((DBG_TYPE_PRINTK == Type) && (PRINTKS_ON)) { \
printk ("%s:" string, __FUNCTION__, ##args); \
printk("\n"); \
} else if (!Adapter) \
; \
else { \
if (((dbg_level & DBG_LVL_BITMASK) <= Adapter->stDebugState.debug_level) && \
((Type & Adapter->stDebugState.type) && (SubType & Adapter->stDebugState.subtype[Type]))) { \
if (dbg_level & DBG_NO_FUNC_PRINT) \
printk (string, ##args); \
else \
{ \
printk ("%s:" string, __FUNCTION__, ##args); \
printk("\n"); \
} \
} \
} \
} while (0)
#define BCM_DEBUG_PRINT_BUFFER(Adapter, Type, SubType, dbg_level, buffer, bufferlen) do { \ #define BCM_DEBUG_PRINT(Adapter, Type, SubType, dbg_level, string, args...) \
if ((DBG_TYPE_PRINTK == Type) && (PRINTKS_ON)) { \ do { \
bcm_print_buffer( dbg_level, __FUNCTION__, __FILE__, __LINE__, buffer, bufferlen, BCM_BASE_TYPE_HEX); \ if (DBG_TYPE_PRINTK == Type) \
} else if (!Adapter) \ pr_info("%s:" string "\n", __func__, ##args); \
; \ else if (Adapter && \
else { \ (dbg_level & DBG_LVL_BITMASK) <= Adapter->stDebugState.debug_level && \
if (((dbg_level & DBG_LVL_BITMASK) <= Adapter->stDebugState.debug_level) && \ (Type & Adapter->stDebugState.type) && \
((Type & Adapter->stDebugState.type) && (SubType & Adapter->stDebugState.subtype[Type]))) { \ (SubType & Adapter->stDebugState.subtype[Type])) { \
if (dbg_level & DBG_NO_FUNC_PRINT) \ if (dbg_level & DBG_NO_FUNC_PRINT) \
bcm_print_buffer( dbg_level, NULL, NULL, __LINE__, buffer, bufferlen, BCM_BASE_TYPE_HEX); \ printk(KERN_DEBUG string, ##args); \
else \ else \
bcm_print_buffer( dbg_level, __FUNCTION__, __FILE__, __LINE__, buffer, bufferlen, BCM_BASE_TYPE_HEX); \ printk(KERN_DEBUG "%s:" string "\n", __func__, ##args); \
} \ } \
} \
} while (0) } while (0)
#define BCM_DEBUG_PRINT_BUFFER(Adapter, Type, SubType, dbg_level, buffer, bufferlen) do { \
if (DBG_TYPE_PRINTK == Type || \
(Adapter && \
(dbg_level & DBG_LVL_BITMASK) <= Adapter->stDebugState.debug_level && \
(Type & Adapter->stDebugState.type) && \
(SubType & Adapter->stDebugState.subtype[Type]))) \
bcm_print_buffer(dbg_level, __func__, __FILE__, __LINE__, \
buffer, bufferlen, BCM_BASE_TYPE_HEX); \
} while(0)
#define BCM_SHOW_DEBUG_BITMAP(Adapter) do { \ #define BCM_SHOW_DEBUG_BITMAP(Adapter) do { \
int i; \ int i; \
......
...@@ -11,6 +11,11 @@ static struct usb_device_id InterfaceUsbtable[] = { ...@@ -11,6 +11,11 @@ static struct usb_device_id InterfaceUsbtable[] = {
}; };
MODULE_DEVICE_TABLE(usb, InterfaceUsbtable); MODULE_DEVICE_TABLE(usb, InterfaceUsbtable);
static unsigned int debug_level = DBG_LVL_CURR;
module_param(debug_level, uint, 0644);
MODULE_PARM_DESC(debug_level, "Debug level (0=none,...,7=all)");
VOID InterfaceAdapterFree(PS_INTERFACE_ADAPTER psIntfAdapter) VOID InterfaceAdapterFree(PS_INTERFACE_ADAPTER psIntfAdapter)
{ {
INT i = 0; INT i = 0;
...@@ -198,7 +203,7 @@ usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id) ...@@ -198,7 +203,7 @@ usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id)
/* Init default driver debug state */ /* Init default driver debug state */
psAdapter->stDebugState.debug_level = DBG_LVL_CURR; psAdapter->stDebugState.debug_level = debug_level;
psAdapter->stDebugState.type = DBG_TYPE_INITEXIT; psAdapter->stDebugState.type = DBG_TYPE_INITEXIT;
memset (psAdapter->stDebugState.subtype, 0, sizeof (psAdapter->stDebugState.subtype)); memset (psAdapter->stDebugState.subtype, 0, sizeof (psAdapter->stDebugState.subtype));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment