mwifiex: add dump data debug support
authorZhaoyang Liu <liuzy@marvell.com>
Mon, 11 May 2015 19:18:19 +0000 (00:48 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 26 May 2015 10:50:35 +0000 (13:50 +0300)
This patch is to add support for data hexdump debug feature.
It is controlled by level debug_mask in adapter structure.

Signed-off-by: Zhaoyang Liu <liuzy@marvell.com>
Signed-off-by: Cathy Luo <cluo@marvell.com>
Signed-off-by: Avinash Patil <patila@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/mwifiex/cmdevt.c
drivers/net/wireless/mwifiex/main.h
drivers/net/wireless/mwifiex/pcie.c
drivers/net/wireless/mwifiex/scan.c
drivers/net/wireless/mwifiex/txrx.c

index c5a14ff7eb82d63dc5a4e1560ff33acfe2cebaac..5b197860b584a48df5cb1a93c8cca334058436ec 100644 (file)
@@ -201,6 +201,7 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv,
                "cmd: DNLD_CMD: %#x, act %#x, len %d, seqno %#x\n", cmd_code,
                le16_to_cpu(*(__le16 *) ((u8 *) host_cmd + S_DS_GEN)), cmd_size,
                le16_to_cpu(host_cmd->seq_num));
+       mwifiex_dbg_dump(adapter, CMD_D, "cmd buffer:", host_cmd, cmd_size);
 
        if (adapter->iface_type == MWIFIEX_USB) {
                tmp = cpu_to_le32(MWIFIEX_USB_TYPE_CMD);
@@ -286,6 +287,8 @@ static int mwifiex_dnld_sleep_confirm_cmd(struct mwifiex_adapter *adapter)
                le16_to_cpu(sleep_cfm_buf->action),
                le16_to_cpu(sleep_cfm_buf->size),
                le16_to_cpu(sleep_cfm_buf->seq_num));
+       mwifiex_dbg_dump(adapter, CMD_D, "SLEEP_CFM buffer: ", sleep_cfm_buf,
+                        le16_to_cpu(sleep_cfm_buf->size));
 
        if (adapter->iface_type == MWIFIEX_USB) {
                sleep_cfm_tmp =
@@ -362,8 +365,9 @@ int mwifiex_alloc_cmd_buffer(struct mwifiex_adapter *adapter)
        for (i = 0; i < MWIFIEX_NUM_OF_CMD_BUFFER; i++) {
                cmd_array[i].skb = dev_alloc_skb(MWIFIEX_SIZE_OF_CMD_BUFFER);
                if (!cmd_array[i].skb) {
-                       dev_err(adapter->dev, "ALLOC_CMD_BUF: out of memory\n");
-                       return -1;
+                       dev_err(adapter->dev,
+                               "unable to allocate command buffer\n");
+                       return -ENOMEM;
                }
        }
 
@@ -460,6 +464,7 @@ int mwifiex_process_event(struct mwifiex_adapter *adapter)
        }
 
        dev_dbg(adapter->dev, "EVENT: cause: %#x\n", eventcause);
+       mwifiex_dbg_dump(adapter, EVT_D, "Event Buf:", skb->data, skb->len);
 
        if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP)
                ret = mwifiex_process_uap_event(priv);
@@ -826,6 +831,8 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
                "cmd: CMD_RESP: 0x%x, result %d, len %d, seqno 0x%x\n",
                orig_cmdresp_no, cmdresp_result,
                le16_to_cpu(resp->size), le16_to_cpu(resp->seq_num));
+       mwifiex_dbg_dump(adapter, CMD_D, "CMD_RESP buffer:", resp,
+                        le16_to_cpu(resp->size));
 
        if (!(orig_cmdresp_no & HostCmd_RET_BIT)) {
                dev_err(adapter->dev, "CMD_RESP: invalid cmd resp\n");
index 6cbbc50126ac1d6e096203d9bd3b3d46187f349c..2f5516194e32b92d284585668d13a52473f2688f 100644 (file)
@@ -186,6 +186,15 @@ do {                                                               \
                        dev_info((adapter)->dev, fmt, ## args); \
 } while (0)
 
+#define DEBUG_DUMP_DATA_MAX_LEN                128
+#define mwifiex_dbg_dump(adapter, dbg_mask, str, buf, len)     \
+do {                                                           \
+       if ((adapter)->debug_mask & MWIFIEX_DBG_##dbg_mask)     \
+               print_hex_dump(KERN_DEBUG, str,                 \
+                              DUMP_PREFIX_OFFSET, 16, 1,       \
+                              buf, len, false);                \
+} while (0)
+
 struct mwifiex_dbg {
        u32 num_cmd_host_to_card_failure;
        u32 num_cmd_sleep_cfm_host_to_card_failure;
index bcc7751d883c3773b558ef8c8b8bb8c3a8a3c474..88bda3f68164a9892d58ce158d68e51c2462fe6c 100644 (file)
@@ -1721,7 +1721,7 @@ static int mwifiex_pcie_process_event_ready(struct mwifiex_adapter *adapter)
                   len is 2 bytes followed by type which is 2 bytes */
                memcpy(&data_len, skb_cmd->data, sizeof(__le16));
                evt_len = le16_to_cpu(data_len);
-
+               skb_trim(skb_cmd, evt_len);
                skb_pull(skb_cmd, INTF_HEADER_LEN);
                dev_dbg(adapter->dev, "info: Event length: %d\n", evt_len);
 
index 0ffdb7c5afd21345cfea5c025d0a2cacb2840076..84843d1b0a0471bfe0854bd595a27fafe38df0dd 100644 (file)
@@ -2125,6 +2125,9 @@ int mwifiex_handle_event_ext_scan_report(struct mwifiex_private *priv,
        dev_dbg(adapter->dev,
                "EXT_SCAN: size %d, returned %d APs...",
                scan_resp_size, num_of_set);
+       mwifiex_dbg_dump(adapter, CMD_D, "EXT_SCAN buffer:", buf,
+                        scan_resp_size +
+                        sizeof(struct mwifiex_event_scan_result));
 
        tlv = (struct mwifiex_ie_types_data *)scan_resp;
 
index a245f444aeec17e23c027b60d027239050fb4497..73082b51f6e14094eb46a4ccbbd8a8113cc5853a 100644 (file)
@@ -55,6 +55,9 @@ int mwifiex_handle_rx_packet(struct mwifiex_adapter *adapter,
                return -1;
        }
 
+       mwifiex_dbg_dump(adapter, DAT_D, "rx pkt:", skb->data,
+                        min_t(size_t, skb->len, DEBUG_DUMP_DATA_MAX_LEN));
+
        memset(rx_info, 0, sizeof(*rx_info));
        rx_info->bss_num = priv->bss_num;
        rx_info->bss_type = priv->bss_type;
@@ -112,6 +115,8 @@ int mwifiex_process_tx(struct mwifiex_private *priv, struct sk_buff *skb,
                                                           skb, tx_param);
                }
        }
+       mwifiex_dbg_dump(adapter, DAT_D, "tx pkt:", skb->data,
+                        min_t(size_t, skb->len, DEBUG_DUMP_DATA_MAX_LEN));
 
        switch (ret) {
        case -ENOSR: