diff options
author | Zhaoyang Liu <liuzy@marvell.com> | 2015-05-11 15:18:19 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@codeaurora.org> | 2015-05-26 06:50:35 -0400 |
commit | 868093a9df7580d6d50639d58f2c6e334dd73622 (patch) | |
tree | 773d7748ab93655596641460aa47c5297bbc891d /drivers/net/wireless | |
parent | c687a0077faa0d24fe97a4434974f32bd359beb7 (diff) |
mwifiex: add dump data debug support
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>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/mwifiex/cmdevt.c | 11 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/main.h | 9 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/pcie.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/scan.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/txrx.c | 5 |
5 files changed, 27 insertions, 3 deletions
diff --git a/drivers/net/wireless/mwifiex/cmdevt.c b/drivers/net/wireless/mwifiex/cmdevt.c index c5a14ff7eb82..5b197860b584 100644 --- a/drivers/net/wireless/mwifiex/cmdevt.c +++ b/drivers/net/wireless/mwifiex/cmdevt.c | |||
@@ -201,6 +201,7 @@ static int mwifiex_dnld_cmd_to_fw(struct mwifiex_private *priv, | |||
201 | "cmd: DNLD_CMD: %#x, act %#x, len %d, seqno %#x\n", cmd_code, | 201 | "cmd: DNLD_CMD: %#x, act %#x, len %d, seqno %#x\n", cmd_code, |
202 | le16_to_cpu(*(__le16 *) ((u8 *) host_cmd + S_DS_GEN)), cmd_size, | 202 | le16_to_cpu(*(__le16 *) ((u8 *) host_cmd + S_DS_GEN)), cmd_size, |
203 | le16_to_cpu(host_cmd->seq_num)); | 203 | le16_to_cpu(host_cmd->seq_num)); |
204 | mwifiex_dbg_dump(adapter, CMD_D, "cmd buffer:", host_cmd, cmd_size); | ||
204 | 205 | ||
205 | if (adapter->iface_type == MWIFIEX_USB) { | 206 | if (adapter->iface_type == MWIFIEX_USB) { |
206 | tmp = cpu_to_le32(MWIFIEX_USB_TYPE_CMD); | 207 | tmp = cpu_to_le32(MWIFIEX_USB_TYPE_CMD); |
@@ -286,6 +287,8 @@ static int mwifiex_dnld_sleep_confirm_cmd(struct mwifiex_adapter *adapter) | |||
286 | le16_to_cpu(sleep_cfm_buf->action), | 287 | le16_to_cpu(sleep_cfm_buf->action), |
287 | le16_to_cpu(sleep_cfm_buf->size), | 288 | le16_to_cpu(sleep_cfm_buf->size), |
288 | le16_to_cpu(sleep_cfm_buf->seq_num)); | 289 | le16_to_cpu(sleep_cfm_buf->seq_num)); |
290 | mwifiex_dbg_dump(adapter, CMD_D, "SLEEP_CFM buffer: ", sleep_cfm_buf, | ||
291 | le16_to_cpu(sleep_cfm_buf->size)); | ||
289 | 292 | ||
290 | if (adapter->iface_type == MWIFIEX_USB) { | 293 | if (adapter->iface_type == MWIFIEX_USB) { |
291 | sleep_cfm_tmp = | 294 | sleep_cfm_tmp = |
@@ -362,8 +365,9 @@ int mwifiex_alloc_cmd_buffer(struct mwifiex_adapter *adapter) | |||
362 | for (i = 0; i < MWIFIEX_NUM_OF_CMD_BUFFER; i++) { | 365 | for (i = 0; i < MWIFIEX_NUM_OF_CMD_BUFFER; i++) { |
363 | cmd_array[i].skb = dev_alloc_skb(MWIFIEX_SIZE_OF_CMD_BUFFER); | 366 | cmd_array[i].skb = dev_alloc_skb(MWIFIEX_SIZE_OF_CMD_BUFFER); |
364 | if (!cmd_array[i].skb) { | 367 | if (!cmd_array[i].skb) { |
365 | dev_err(adapter->dev, "ALLOC_CMD_BUF: out of memory\n"); | 368 | dev_err(adapter->dev, |
366 | return -1; | 369 | "unable to allocate command buffer\n"); |
370 | return -ENOMEM; | ||
367 | } | 371 | } |
368 | } | 372 | } |
369 | 373 | ||
@@ -460,6 +464,7 @@ int mwifiex_process_event(struct mwifiex_adapter *adapter) | |||
460 | } | 464 | } |
461 | 465 | ||
462 | dev_dbg(adapter->dev, "EVENT: cause: %#x\n", eventcause); | 466 | dev_dbg(adapter->dev, "EVENT: cause: %#x\n", eventcause); |
467 | mwifiex_dbg_dump(adapter, EVT_D, "Event Buf:", skb->data, skb->len); | ||
463 | 468 | ||
464 | if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP) | 469 | if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP) |
465 | ret = mwifiex_process_uap_event(priv); | 470 | ret = mwifiex_process_uap_event(priv); |
@@ -826,6 +831,8 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter) | |||
826 | "cmd: CMD_RESP: 0x%x, result %d, len %d, seqno 0x%x\n", | 831 | "cmd: CMD_RESP: 0x%x, result %d, len %d, seqno 0x%x\n", |
827 | orig_cmdresp_no, cmdresp_result, | 832 | orig_cmdresp_no, cmdresp_result, |
828 | le16_to_cpu(resp->size), le16_to_cpu(resp->seq_num)); | 833 | le16_to_cpu(resp->size), le16_to_cpu(resp->seq_num)); |
834 | mwifiex_dbg_dump(adapter, CMD_D, "CMD_RESP buffer:", resp, | ||
835 | le16_to_cpu(resp->size)); | ||
829 | 836 | ||
830 | if (!(orig_cmdresp_no & HostCmd_RET_BIT)) { | 837 | if (!(orig_cmdresp_no & HostCmd_RET_BIT)) { |
831 | dev_err(adapter->dev, "CMD_RESP: invalid cmd resp\n"); | 838 | dev_err(adapter->dev, "CMD_RESP: invalid cmd resp\n"); |
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h index 6cbbc50126ac..2f5516194e32 100644 --- a/drivers/net/wireless/mwifiex/main.h +++ b/drivers/net/wireless/mwifiex/main.h | |||
@@ -186,6 +186,15 @@ do { \ | |||
186 | dev_info((adapter)->dev, fmt, ## args); \ | 186 | dev_info((adapter)->dev, fmt, ## args); \ |
187 | } while (0) | 187 | } while (0) |
188 | 188 | ||
189 | #define DEBUG_DUMP_DATA_MAX_LEN 128 | ||
190 | #define mwifiex_dbg_dump(adapter, dbg_mask, str, buf, len) \ | ||
191 | do { \ | ||
192 | if ((adapter)->debug_mask & MWIFIEX_DBG_##dbg_mask) \ | ||
193 | print_hex_dump(KERN_DEBUG, str, \ | ||
194 | DUMP_PREFIX_OFFSET, 16, 1, \ | ||
195 | buf, len, false); \ | ||
196 | } while (0) | ||
197 | |||
189 | struct mwifiex_dbg { | 198 | struct mwifiex_dbg { |
190 | u32 num_cmd_host_to_card_failure; | 199 | u32 num_cmd_host_to_card_failure; |
191 | u32 num_cmd_sleep_cfm_host_to_card_failure; | 200 | u32 num_cmd_sleep_cfm_host_to_card_failure; |
diff --git a/drivers/net/wireless/mwifiex/pcie.c b/drivers/net/wireless/mwifiex/pcie.c index bcc7751d883c..88bda3f68164 100644 --- a/drivers/net/wireless/mwifiex/pcie.c +++ b/drivers/net/wireless/mwifiex/pcie.c | |||
@@ -1721,7 +1721,7 @@ static int mwifiex_pcie_process_event_ready(struct mwifiex_adapter *adapter) | |||
1721 | len is 2 bytes followed by type which is 2 bytes */ | 1721 | len is 2 bytes followed by type which is 2 bytes */ |
1722 | memcpy(&data_len, skb_cmd->data, sizeof(__le16)); | 1722 | memcpy(&data_len, skb_cmd->data, sizeof(__le16)); |
1723 | evt_len = le16_to_cpu(data_len); | 1723 | evt_len = le16_to_cpu(data_len); |
1724 | 1724 | skb_trim(skb_cmd, evt_len); | |
1725 | skb_pull(skb_cmd, INTF_HEADER_LEN); | 1725 | skb_pull(skb_cmd, INTF_HEADER_LEN); |
1726 | dev_dbg(adapter->dev, "info: Event length: %d\n", evt_len); | 1726 | dev_dbg(adapter->dev, "info: Event length: %d\n", evt_len); |
1727 | 1727 | ||
diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c index 0ffdb7c5afd2..84843d1b0a04 100644 --- a/drivers/net/wireless/mwifiex/scan.c +++ b/drivers/net/wireless/mwifiex/scan.c | |||
@@ -2125,6 +2125,9 @@ int mwifiex_handle_event_ext_scan_report(struct mwifiex_private *priv, | |||
2125 | dev_dbg(adapter->dev, | 2125 | dev_dbg(adapter->dev, |
2126 | "EXT_SCAN: size %d, returned %d APs...", | 2126 | "EXT_SCAN: size %d, returned %d APs...", |
2127 | scan_resp_size, num_of_set); | 2127 | scan_resp_size, num_of_set); |
2128 | mwifiex_dbg_dump(adapter, CMD_D, "EXT_SCAN buffer:", buf, | ||
2129 | scan_resp_size + | ||
2130 | sizeof(struct mwifiex_event_scan_result)); | ||
2128 | 2131 | ||
2129 | tlv = (struct mwifiex_ie_types_data *)scan_resp; | 2132 | tlv = (struct mwifiex_ie_types_data *)scan_resp; |
2130 | 2133 | ||
diff --git a/drivers/net/wireless/mwifiex/txrx.c b/drivers/net/wireless/mwifiex/txrx.c index a245f444aeec..73082b51f6e1 100644 --- a/drivers/net/wireless/mwifiex/txrx.c +++ b/drivers/net/wireless/mwifiex/txrx.c | |||
@@ -55,6 +55,9 @@ int mwifiex_handle_rx_packet(struct mwifiex_adapter *adapter, | |||
55 | return -1; | 55 | return -1; |
56 | } | 56 | } |
57 | 57 | ||
58 | mwifiex_dbg_dump(adapter, DAT_D, "rx pkt:", skb->data, | ||
59 | min_t(size_t, skb->len, DEBUG_DUMP_DATA_MAX_LEN)); | ||
60 | |||
58 | memset(rx_info, 0, sizeof(*rx_info)); | 61 | memset(rx_info, 0, sizeof(*rx_info)); |
59 | rx_info->bss_num = priv->bss_num; | 62 | rx_info->bss_num = priv->bss_num; |
60 | rx_info->bss_type = priv->bss_type; | 63 | rx_info->bss_type = priv->bss_type; |
@@ -112,6 +115,8 @@ int mwifiex_process_tx(struct mwifiex_private *priv, struct sk_buff *skb, | |||
112 | skb, tx_param); | 115 | skb, tx_param); |
113 | } | 116 | } |
114 | } | 117 | } |
118 | mwifiex_dbg_dump(adapter, DAT_D, "tx pkt:", skb->data, | ||
119 | min_t(size_t, skb->len, DEBUG_DUMP_DATA_MAX_LEN)); | ||
115 | 120 | ||
116 | switch (ret) { | 121 | switch (ret) { |
117 | case -ENOSR: | 122 | case -ENOSR: |