Skip to contentSkip to conversation

bcm: Replace the BCM_DEBUG_* and BCM_SHOW_* macros with functions

PATCH In review Devendra Naga 2 participants 3 messages May 29, 2012 Staging

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 bcm: Replace the BCM_DEBUG_* and BCM_SHOW_* macros with functions

This patch is made by following the improvements told by Joe Perches, replaced the BCM_DEBUG* and BCM_SHOW* macros into functions and added them in a file and added macros in the Debug.h file. This patch also improves the if check in bcm_show_debug_bitmap,

the check was

	if ((i == 1) || (i == 2) || (i == 4) || (i == 8));

and used is_power_of_two instead as suggested by Eric Dumazet.

---
 drivers/staging/bcm/Debug.c  |   55 +++++++++++++++++++++++++++++++++++++
 drivers/staging/bcm/Debug.h  |   62 ++++++++++++++----------------------------
 drivers/staging/bcm/Makefile |    2 +-
 3 files changed, 77 insertions(+), 42 deletions(-)
 create mode 100644 drivers/staging/bcm/Debug.c
drivers/staging/bcm/Debug.c new file +55 -0
new file mode 100644
index 0000000..6522ad6
@@ -0,0 +1,55 @@
+#include <linux/log2.h>
+#include "headers.h"
+
+void bcm_debug_print(PMINI_ADAPTER Adapter, int Type, int SubType,
+			int dbg_level, const char *fmt, ...)
+{
+	struct va_format vaf;
+	va_list args;
+	UINT debug_level = Adapter->stDebugState.debug_level;
+
+	va_start(args, fmt);
+
+	vaf.fmt = fmt;
+	vaf.va = &args;
+
+	if (DBG_TYPE_PRINTK == Type)
+		pr_info("%s: %pV", __func__, &vaf);
+	else if (Adapter &&
+		(dbg_level & DBG_LVL_BITMASK) <= debug_level &&
+		(Type & Adapter->stDebugState.type) &&
+		(SubType & Adapter->stDebugState.subtype[Type])) {
+		if (dbg_level & DBG_NO_FUNC_PRINT)
+			printk(KERN_DEBUG "%pV" , &vaf);
+		else
+			printk(KERN_DEBUG "%s: %pV", __func__, &vaf);
+	}
+
+	va_end(args);
+}
+
+void bcm_debug_print_buffer(PMINI_ADAPTER Adapter, int Type, int SubType,
+			    int dbg_level, const void *buffer, size_t bufferlen)
+{
+	if (DBG_TYPE_PRINTK == Type ||
+	   (Adapter &&
+	   (dbg_level & DBG_LVL_BITMASK) <= Adapter->stDebugState.debug_level &&
+	   (Type & Adapter->stDebugState.type) &&
+	   (SubType & Adapter->stDebugState.subtype[Type]))) {
+		printk(KERN_DEBUG "%s:\n", __func__);
+		print_hex_dump(KERN_DEBUG, " ", DUMP_PREFIX_OFFSET,
+			       16, 1, buffer, bufferlen, false);
+	}
+}
+
+void bcm_show_debug_bitmap(PMINI_ADAPTER Adapter)
+{
+	int i;
+	for (i = 0; i < (NUMTYPES * 2) + 1; i++) {
+		if (is_power_of_2(i)) {
+			BCM_DEBUG_PRINT(Adapter, DBG_TYPE_PRINTK, 0, 0,
+					"subtype[%d] = 0x%08x\n",
+					i, Adapter->stDebugState.subtype[i]);
+		}
+	}
+}
drivers/staging/bcm/Debug.h +21 -41

78 lines not on this page · raw message

drivers/staging/bcm/Makefile +1 -1
index 652b7f8..85b134d 100644
@@ -7,6 +7,6 @@ obj-$(CONFIG_BCM_WIMAX) +=	bcm_wimax.o
 bcm_wimax-y :=  InterfaceDld.o InterfaceIdleMode.o InterfaceInit.o InterfaceRx.o \
 		InterfaceIsr.o InterfaceMisc.o InterfaceTx.o \
 		CmHost.o IPv6Protocol.o Qos.o Transmit.o\
-		Bcmnet.o DDRInit.o HandleControlPacket.o\
+		Debug.o Bcmnet.o DDRInit.o HandleControlPacket.o\
 		LeakyBucket.o Misc.o sort.o Bcmchar.o hostmibs.o PHSModule.o\
 		led_control.o nvm.o vendorspecificextn.o
Signature · 1 line
1.7.9.5
#1 lore raw

On Tue, 2012-05-29 at 16:37 +0530, Devendra Naga wrote:
[]

drivers/staging/bcm/Debug.c

Quoted 1 line
drivers/staging/bcm/Debug.c +0 -0

[]

Quoted 4 lines
drivers/staging/bcm/Debug.c +4 -0
+void bcm_debug_print(PMINI_ADAPTER Adapter, int Type, int SubType,
+			int dbg_level, const char *fmt, ...)
+{
+	struct va_format vaf;

drivers/staging/bcm/Debug.c line 17

Quoted 10 lines
drivers/staging/bcm/Debug.c +10 -0
+	va_list args;
+	UINT debug_level = Adapter->stDebugState.debug_level;
+
+	va_start(args, fmt);
+
+	vaf.fmt = fmt;
+	vaf.va = &args;
+
+	if (DBG_TYPE_PRINTK == Type)
+		pr_info("%s: %pV", __func__, &vaf);

func

drivers/staging/bcm/Debug.c line 25

Quoted 8 lines
drivers/staging/bcm/Debug.c +8 -0
+	else if (Adapter &&
+		(dbg_level & DBG_LVL_BITMASK) <= debug_level &&
+		(Type & Adapter->stDebugState.type) &&
+		(SubType & Adapter->stDebugState.subtype[Type])) {
+		if (dbg_level & DBG_NO_FUNC_PRINT)
+			printk(KERN_DEBUG "%pV" , &vaf);
+		else
+			printk(KERN_DEBUG "%s: %pV", __func__, &vaf);

func

Quoted 4 lines
drivers/staging/bcm/Debug.c +4 -0
+	}
+
+	va_end(args);
+}

drivers/staging/bcm/Debug.c line 39

Quoted 10 lines
drivers/staging/bcm/Debug.c +10 -0
+
+void bcm_debug_print_buffer(PMINI_ADAPTER Adapter, int Type, int SubType,
+			    int dbg_level, const void *buffer, size_t bufferlen)
+{
+	if (DBG_TYPE_PRINTK == Type ||
+	   (Adapter &&
+	   (dbg_level & DBG_LVL_BITMASK) <= Adapter->stDebugState.debug_level &&
+	   (Type & Adapter->stDebugState.type) &&
+	   (SubType & Adapter->stDebugState.subtype[Type]))) {
+		printk(KERN_DEBUG "%s:\n", __func__);

func

drivers/staging/bcm/Debug.c line 43

Quoted 4 lines
drivers/staging/bcm/Debug.c +4 -0
+		print_hex_dump(KERN_DEBUG, " ", DUMP_PREFIX_OFFSET,
+			       16, 1, buffer, bufferlen, false);
+	}
+}

[]

drivers/staging/bcm/Debug.h

Quoted 1 line
drivers/staging/bcm/Debug.h +0 -0

[]

drivers/staging/bcm/Debug.h typedef struct _S_BCM_DEBUG_STATE { · line 223

Quoted 6 lines
drivers/staging/bcm/Debug.h +6 -0
+struct _MINI_ADAPTER;
+
+__printf(5, 6)
+
+void bcm_debug_print(struct _MINI_ADAPTER *Adapter, int Type, int SubType,
+			int dbg_level, const char *fmt, ...);

No blank line between __printf and prototype

drivers/staging/bcm/Debug.h typedef struct _S_BCM_DEBUG_STATE { · line 236

Quoted 13 lines
drivers/staging/bcm/Debug.h +13 -0
+void bcm_debug_print_buffer(struct _MINI_ADAPTER *Adapter, int Type, int SubType,
+			int dbg_level, const void *buffer, size_t bufferlen);
+void bcm_show_debug_bitmap(struct _MINI_ADAPTER *Adapter);
+
+#define BCM_DEBUG_PRINT(Adapter, Type, SubType, dbg_level, fmt, ...)	\
+	bcm_debug_print(Adapter, Type, SubType, dbg_level, fmt, ##__VA_ARGS__)
+
+#define BCM_DEBUG_PRINT_BUFFER(Adapter, Type, SubType, dbg_level,	\
+				buffer, bufferlen)			\
+	bcm_debug_print_buffer(Adapter, Type, SubType, dbg_level,	\
+				buffer, bufferlen)
+#define BCM_SHOW_DEBUG_BITMAP(Adapter)					\
+	bcm_show_debug_bitmap(Adapter)

Turns out to keep the same behavior, you need to add a const char *func argument to these functions and change the macros to pass __func__.

#2 lore raw

Hi Joe,

Quoted 74 lines · Joe Perches

drivers/staging/bcm/Debug.c

Quoted 1 line
drivers/staging/bcm/Debug.c +0 -0

[]

Quoted 4 lines
drivers/staging/bcm/Debug.c +4 -0
+void bcm_debug_print(PMINI_ADAPTER Adapter, int Type, int SubType,
+                     int dbg_level, const char *fmt, ...)
+{
+     struct va_format vaf;

drivers/staging/bcm/Debug.c line 17

Quoted 10 lines
drivers/staging/bcm/Debug.c +10 -0
+     va_list args;
+     UINT debug_level = Adapter->stDebugState.debug_level;
+
+     va_start(args, fmt);
+
+     vaf.fmt = fmt;
+     vaf.va = &args;
+
+     if (DBG_TYPE_PRINTK == Type)
+             pr_info("%s: %pV", __func__, &vaf);

func

Quoted 8 lines

+     else if (Adapter &&
+             (dbg_level & DBG_LVL_BITMASK) <= debug_level &&
+             (Type & Adapter->stDebugState.type) &&
+             (SubType & Adapter->stDebugState.subtype[Type])) {
+             if (dbg_level & DBG_NO_FUNC_PRINT)
+                     printk(KERN_DEBUG "%pV" , &vaf);
+             else
+                     printk(KERN_DEBUG "%s: %pV", __func__, &vaf);

func

Quoted 4 lines

+     }

drivers/staging/bcm/Debug.c +3 -0
+
+     va_end(args);
+}

drivers/staging/bcm/Debug.c line 39

Quoted 10 lines
drivers/staging/bcm/Debug.c +10 -0
+
+void bcm_debug_print_buffer(PMINI_ADAPTER Adapter, int Type, int SubType,
+                         int dbg_level, const void *buffer, size_t bufferlen)
+{
+     if (DBG_TYPE_PRINTK == Type ||
+        (Adapter &&
+        (dbg_level & DBG_LVL_BITMASK) <= Adapter->stDebugState.debug_level &&
+        (Type & Adapter->stDebugState.type) &&
+        (SubType & Adapter->stDebugState.subtype[Type]))) {
+             printk(KERN_DEBUG "%s:\n", __func__);

func

Quoted 4 lines

+             print_hex_dump(KERN_DEBUG, " ", DUMP_PREFIX_OFFSET,
+                            16, 1, buffer, bufferlen, false);
+     }
+}

[]

drivers/staging/bcm/Debug.h

Quoted 1 line
drivers/staging/bcm/Debug.h +0 -0

[]

drivers/staging/bcm/Debug.h typedef struct _S_BCM_DEBUG_STATE { · line 223

Quoted 6 lines
drivers/staging/bcm/Debug.h +6 -0
+struct _MINI_ADAPTER;
+
+__printf(5, 6)
+
+void bcm_debug_print(struct _MINI_ADAPTER *Adapter, int Type, int SubType,
+                     int dbg_level, const char *fmt, ...);

No blank line between __printf and prototype

Quoted 9 lines
drivers/staging/bcm/Debug.h +9 -0
+void bcm_debug_print_buffer(struct _MINI_ADAPTER *Adapter, int Type, int SubType,
+                     int dbg_level, const void *buffer, size_t bufferlen);
+void bcm_show_debug_bitmap(struct _MINI_ADAPTER *Adapter);
+
+#define BCM_DEBUG_PRINT(Adapter, Type, SubType, dbg_level, fmt, ...) \
+     bcm_debug_print(Adapter, Type, SubType, dbg_level, fmt, ##__VA_ARGS__)
+
+#define BCM_DEBUG_PRINT_BUFFER(Adapter, Type, SubType, dbg_level,    \
+                             buffer, bufferlen)                      \
Quoted 11 lines
Quoted 4 lines

+     bcm_debug_print_buffer(Adapter, Type, SubType, dbg_level,       \
+                             buffer, bufferlen)
+#define BCM_SHOW_DEBUG_BITMAP(Adapter)                                       \
+     bcm_show_debug_bitmap(Adapter)

Turns out to keep the same behavior, you need to add a const char *func argument to these functions and change the macros to pass __func__.

Ok. so what i am doing now is wrong as its a function, and __func__ gives the dbg function name, instead the called function since we changed it to functions rather from Macros.

Ok, i will send out new changes.

Thanks,
Devendra.