[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