[PATCH 1/2] wcn36xx: add debug_mask module parameter

Kalle Valo kvalo at qca.qualcomm.com
Wed May 1 02:05:42 EDT 2013


With debug_mask module parameter it's easier to
control debug messages.

Signed-off-by: Kalle Valo <kvalo at qca.qualcomm.com>
---
 dxe.c     |   25 ++++++++++++++++---------
 main.c    |    6 +++++-
 txrx.c    |    2 +-
 wcn36xx.h |   19 +++++++++++++++++--
 4 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/dxe.c b/dxe.c
index 5e8a125..f8ece18 100644
--- a/dxe.c
+++ b/dxe.c
@@ -50,14 +50,18 @@ static void * wcn36xx_dma_alloc(size_t size, void **paddr)
 
 static void wcn36xx_dxe_write_register(struct wcn36xx *wcn, int addr, int data)
 {
-	wcn36xx_dbg("wcn36xx_dxe_write_register: addr=%x, data=%x", addr, data);
+	wcn36xx_dbg(WCN36XX_DBG_DXE,
+		    "wcn36xx_dxe_write_register: addr=%x, data=%x",
+		    addr, data);
 	writel(data, wcn->mmio + addr);
 }
 
 static void wcn36xx_dxe_read_register(struct wcn36xx *wcn, int addr, int* data)
 {
 	*data = readl(wcn->mmio + addr);
-	wcn36xx_dbg("wcn36xx_dxe_read_register: addr=%x, data=%x", addr, *data);
+	wcn36xx_dbg(WCN36XX_DBG_DXE,
+		    "wcn36xx_dxe_read_register: addr=%x, data=%x",
+		    addr, *data);
 }
 
 static int wcn36xx_dxe_allocate_ctl_block(struct wcn36xx_dxe_ch *ch)
@@ -284,10 +288,11 @@ void wcn36xx_rx_ready_work(struct work_struct *work)
 	// TODO read which channel generated INT by checking mask
 	wcn36xx_dxe_read_register(wcn, WCN36XX_DXE_INT_SRC_RAW_REG, &intSrc);
 
-	wcn36xx_dbg("wcn36xx_rx_ready_work: Channel=%x", intSrc);
+	wcn36xx_dbg(WCN36XX_DBG_RX, "wcn36xx_rx_ready_work: Channel=%x", intSrc);
+
 	// check if this channel is High or Low. Assume high
 	if (intSrc & WCN36XX_INT_MASK_CHAN_RX_H) {
-		wcn36xx_dbg("wcn36xx_rx_ready_work: MGMT Frame");
+		wcn36xx_dbg(WCN36XX_DBG_RX, "wcn36xx_rx_ready_work: MGMT Frame");
 
 		/* Read Channel Status Register to know why INT Happen */
 		wcn36xx_dxe_read_register(wcn, WCN36XX_DXE_CH_STATUS_REG_ADDR_RX_H, &int_reason);
@@ -302,7 +307,7 @@ void wcn36xx_rx_ready_work(struct work_struct *work)
 		cur_dxe_ctl = wcn->dxe_rx_h_ch.head_blk_ctl;
 		cur_dxe_desc = cur_dxe_ctl->desc;
 
-		wcn36xx_dbg("wcn36xx_rx_ready_work: order=%d ctl=%x", cur_dxe_ctl->ctl_blk_order, cur_dxe_desc->desc_ctl.ctrl);
+		wcn36xx_dbg(WCN36XX_DBG_RX, "wcn36xx_rx_ready_work: order=%d ctl=%x", cur_dxe_ctl->ctl_blk_order, cur_dxe_desc->desc_ctl.ctrl);
 
 		dma_unmap_single( NULL,
 			(dma_addr_t)cur_dxe_desc->desc.dst_addr_l,
@@ -320,7 +325,7 @@ void wcn36xx_rx_ready_work(struct work_struct *work)
 
 		wcn->dxe_rx_h_ch.head_blk_ctl = cur_dxe_ctl->next;
 	} else if (intSrc & WCN36XX_INT_MASK_CHAN_RX_L) {
-		wcn36xx_dbg("wcn36xx_rx_ready_work: DATA Frame");
+		wcn36xx_dbg(WCN36XX_DBG_RX, "wcn36xx_rx_ready_work: DATA Frame");
 
 		/* Read Channel Status Register to know why INT Happen */
 		wcn36xx_dxe_read_register(wcn, WCN36XX_DXE_CH_STATUS_REG_ADDR_RX_L, &int_reason);
@@ -335,7 +340,7 @@ void wcn36xx_rx_ready_work(struct work_struct *work)
 		cur_dxe_ctl = wcn->dxe_rx_l_ch.head_blk_ctl;
 		cur_dxe_desc = cur_dxe_ctl->desc;
 
-		wcn36xx_dbg("wcn36xx_rx_ready_work: order=%d ctl=%x", cur_dxe_ctl->ctl_blk_order, cur_dxe_desc->desc_ctl.ctrl);
+		wcn36xx_dbg(WCN36XX_DBG_RX, "wcn36xx_rx_ready_work: order=%d ctl=%x", cur_dxe_ctl->ctl_blk_order, cur_dxe_desc->desc_ctl.ctrl);
 
 		dma_unmap_single( NULL,
 			(dma_addr_t)cur_dxe_desc->desc.dst_addr_l,
@@ -393,11 +398,11 @@ int wcn36xx_dxe_tx(struct wcn36xx *wcn, struct sk_buff *skb, u8 broadcast, bool
 	struct wcn36xx_dxe_mem_pool * mem_pool = NULL;
 	struct wcn36xx_dxe_ch * cur_ch = NULL;
 	if(is_high) {
-		wcn36xx_dbg("DXE TX: MGMT");
+		wcn36xx_dbg(WCN36XX_DBG_TX, "DXE TX: MGMT");
 		mem_pool = &wcn->mgmt_mem_pool;
 		cur_ch = &wcn->dxe_tx_h_ch;
 	} else {
-		wcn36xx_dbg("DXE TX: DATA");
+		wcn36xx_dbg(WCN36XX_DBG_TX, "DXE TX: DATA");
 		mem_pool = &wcn->data_mem_pool;
 		cur_ch = &wcn->dxe_tx_l_ch;
 	}
@@ -418,6 +423,8 @@ int wcn36xx_dxe_tx(struct wcn36xx *wcn, struct sk_buff *skb, u8 broadcast, bool
 	cur_dxe_desc->fr_len = sizeof(struct wcn36xx_tx_bd);
 	cur_dxe_desc->desc_ctl.ctrl = cur_ch->ctrl_bd;
 
+	wcn36xx_dbg(WCN36XX_DBG_DXE, "DXE TX");
+
 	wcn36xx_dbg_dump("DESC1 >>> ", (char*)cur_dxe_desc, sizeof(*cur_dxe_desc));
 	wcn36xx_dbg_dump("BD   >>> ", (char*)mem_pool->virt_addr, sizeof(struct wcn36xx_tx_bd));
 
diff --git a/main.c b/main.c
index 342e5b9..7622de1 100644
--- a/main.c
+++ b/main.c
@@ -23,6 +23,10 @@
 #include "dxe.h"
 #include "hal.h"
 
+unsigned int debug_mask;
+module_param(debug_mask, uint, 0644);
+MODULE_PARM_DESC(debug_mask, "Debugging mask");
+
 /*
  * provide hw to module exit function
  *
@@ -132,7 +136,7 @@ static void wcn36xx_tx(struct ieee80211_hw *hw,  struct ieee80211_tx_control *co
 	struct ieee80211_mgmt *mgmt;
 	ENTER();
 	mgmt = (struct ieee80211_mgmt *)skb->data;
-	wcn36xx_dbg("wcn36xx_tx: = %x", mgmt->frame_control);
+	wcn36xx_dbg(WCN36XX_DBG_TX, "wcn36xx_tx: = %x", mgmt->frame_control);
 	if (ieee80211_is_data(mgmt->frame_control) || (ieee80211_is_data_qos(mgmt->frame_control))) {
 		wcn36xx_dxe_tx(hw->priv, skb, is_broadcast_ether_addr(mgmt->da) || is_multicast_ether_addr(mgmt->da), false);
 	} else {
diff --git a/txrx.c b/txrx.c
index 0a9ea6a..9f771e9 100644
--- a/txrx.c
+++ b/txrx.c
@@ -38,7 +38,7 @@ int  wcn36xx_rx_skb(struct wcn36xx *wcn, struct sk_buff *skb)
 	status.flag = 0;
 	status.rx_flags = 0;
 	memcpy(skb2->cb, &status, sizeof(struct ieee80211_rx_status));
-	wcn36xx_dbg("RX");
+	wcn36xx_dbg(WCN36XX_DBG_RX, "RX");
 	wcn36xx_dbg_dump("SKB <<< ", (char*)skb2->data, skb2->len);
 	ieee80211_rx_ni(wcn->hw, skb2);
 
diff --git a/wcn36xx.h b/wcn36xx.h
index 1d76ac2..d2ee631 100644
--- a/wcn36xx.h
+++ b/wcn36xx.h
@@ -30,6 +30,20 @@
 #define DRIVER_PREFIX "wcn36xx: "
 #define WLAN_NV_FILE               "wlan/prima/WCNSS_qcom_wlan_nv.bin"
 
+extern unsigned int debug_mask;
+
+enum wcn36xx_debug_mask {
+	WCN36XX_DBG_DXE		= 0x00000001,
+	WCN36XX_DBG_DXE_DUMP	= 0x00000002,
+	WCN36XX_DBG_SMD		= 0x00000004,
+	WCN36XX_DBG_SMD_DUMP	= 0x00000008,
+	WCN36XX_DBG_RX		= 0x00000010,
+	WCN36XX_DBG_RX_DUMP	= 0x00000020,
+	WCN36XX_DBG_TX		= 0x00000040,
+	WCN36XX_DBG_TX_DUMP	= 0x00000080,
+	WCN36XX_DBG_ANY		= 0xffffffff,
+};
+
 #define wcn36xx_error(fmt, arg...) \
 	pr_err(DRIVER_PREFIX "ERROR " fmt "\n", ##arg); \
 	__WARN()
@@ -37,8 +51,9 @@
 #define wcn36xx_info(fmt, arg...) \
 	pr_info(DRIVER_PREFIX fmt "\n", ##arg)
 
-#define wcn36xx_dbg(fmt, arg...) \
-	pr_debug(DRIVER_PREFIX fmt "\n", ##arg)
+#define wcn36xx_dbg(mask, fmt, arg...)			\
+	if (debug_mask & mask)				\
+		pr_debug(DRIVER_PREFIX fmt "\n", ##arg)
 
 #define wcn36xx_dbg_dump(prefix_str, buf, len)			\
 do {									\
-- 
1.7.9.5




More information about the wcn36xx mailing list