diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-devtrace.h | 34 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/tx.c | 25 |
2 files changed, 23 insertions, 36 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-devtrace.h b/drivers/net/wireless/iwlwifi/iwl-devtrace.h index 06ca505bb2cc..59a5f78402fc 100644 --- a/drivers/net/wireless/iwlwifi/iwl-devtrace.h +++ b/drivers/net/wireless/iwlwifi/iwl-devtrace.h | |||
@@ -29,6 +29,7 @@ | |||
29 | 29 | ||
30 | #include <linux/tracepoint.h> | 30 | #include <linux/tracepoint.h> |
31 | #include <linux/device.h> | 31 | #include <linux/device.h> |
32 | #include "iwl-trans.h" | ||
32 | 33 | ||
33 | 34 | ||
34 | #if !defined(CONFIG_IWLWIFI_DEVICE_TRACING) || defined(__CHECKER__) | 35 | #if !defined(CONFIG_IWLWIFI_DEVICE_TRACING) || defined(__CHECKER__) |
@@ -237,27 +238,34 @@ TRACE_EVENT(iwlwifi_dbg, | |||
237 | #define TRACE_SYSTEM iwlwifi | 238 | #define TRACE_SYSTEM iwlwifi |
238 | 239 | ||
239 | TRACE_EVENT(iwlwifi_dev_hcmd, | 240 | TRACE_EVENT(iwlwifi_dev_hcmd, |
240 | TP_PROTO(const struct device *dev, u32 flags, | 241 | TP_PROTO(const struct device *dev, |
241 | const void *hcmd0, size_t len0, | 242 | struct iwl_host_cmd *cmd, u16 total_size, |
242 | const void *hcmd1, size_t len1, | 243 | const void *hdr, size_t hdr_len), |
243 | const void *hcmd2, size_t len2), | 244 | TP_ARGS(dev, cmd, total_size, hdr, hdr_len), |
244 | TP_ARGS(dev, flags, hcmd0, len0, hcmd1, len1, hcmd2, len2), | ||
245 | TP_STRUCT__entry( | 245 | TP_STRUCT__entry( |
246 | DEV_ENTRY | 246 | DEV_ENTRY |
247 | __dynamic_array(u8, hcmd0, len0) | 247 | __dynamic_array(u8, hcmd, total_size) |
248 | __dynamic_array(u8, hcmd1, len1) | ||
249 | __dynamic_array(u8, hcmd2, len2) | ||
250 | __field(u32, flags) | 248 | __field(u32, flags) |
251 | ), | 249 | ), |
252 | TP_fast_assign( | 250 | TP_fast_assign( |
251 | int i, offset = hdr_len; | ||
252 | |||
253 | DEV_ASSIGN; | 253 | DEV_ASSIGN; |
254 | memcpy(__get_dynamic_array(hcmd0), hcmd0, len0); | 254 | __entry->flags = cmd->flags; |
255 | memcpy(__get_dynamic_array(hcmd1), hcmd1, len1); | 255 | memcpy(__get_dynamic_array(hcmd), hdr, hdr_len); |
256 | memcpy(__get_dynamic_array(hcmd2), hcmd2, len2); | 256 | |
257 | __entry->flags = flags; | 257 | for (i = 0; i < IWL_MAX_CMD_TFDS; i++) { |
258 | if (!cmd->len[i]) | ||
259 | continue; | ||
260 | if (!(cmd->dataflags[i] & IWL_HCMD_DFL_NOCOPY)) | ||
261 | continue; | ||
262 | memcpy((u8 *)__get_dynamic_array(hcmd) + offset, | ||
263 | cmd->data[i], cmd->len[i]); | ||
264 | offset += cmd->len[i]; | ||
265 | } | ||
258 | ), | 266 | ), |
259 | TP_printk("[%s] hcmd %#.2x (%ssync)", | 267 | TP_printk("[%s] hcmd %#.2x (%ssync)", |
260 | __get_str(dev), ((u8 *)__get_dynamic_array(hcmd0))[0], | 268 | __get_str(dev), ((u8 *)__get_dynamic_array(hcmd))[0], |
261 | __entry->flags & CMD_ASYNC ? "a" : "") | 269 | __entry->flags & CMD_ASYNC ? "a" : "") |
262 | ); | 270 | ); |
263 | 271 | ||
diff --git a/drivers/net/wireless/iwlwifi/pcie/tx.c b/drivers/net/wireless/iwlwifi/pcie/tx.c index 392d2bc5e357..105e3af3c621 100644 --- a/drivers/net/wireless/iwlwifi/pcie/tx.c +++ b/drivers/net/wireless/iwlwifi/pcie/tx.c | |||
@@ -522,11 +522,6 @@ static int iwl_enqueue_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd) | |||
522 | bool had_nocopy = false; | 522 | bool had_nocopy = false; |
523 | int i; | 523 | int i; |
524 | u32 cmd_pos; | 524 | u32 cmd_pos; |
525 | #ifdef CONFIG_IWLWIFI_DEVICE_TRACING | ||
526 | const void *trace_bufs[IWL_MAX_CMD_TFDS + 1] = {}; | ||
527 | int trace_lens[IWL_MAX_CMD_TFDS + 1] = {}; | ||
528 | int trace_idx; | ||
529 | #endif | ||
530 | 525 | ||
531 | copy_size = sizeof(out_cmd->hdr); | 526 | copy_size = sizeof(out_cmd->hdr); |
532 | cmd_size = sizeof(out_cmd->hdr); | 527 | cmd_size = sizeof(out_cmd->hdr); |
@@ -628,11 +623,6 @@ static int iwl_enqueue_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd) | |||
628 | dma_unmap_len_set(out_meta, len, copy_size); | 623 | dma_unmap_len_set(out_meta, len, copy_size); |
629 | 624 | ||
630 | iwlagn_txq_attach_buf_to_tfd(trans, txq, phys_addr, copy_size, 1); | 625 | iwlagn_txq_attach_buf_to_tfd(trans, txq, phys_addr, copy_size, 1); |
631 | #ifdef CONFIG_IWLWIFI_DEVICE_TRACING | ||
632 | trace_bufs[0] = &out_cmd->hdr; | ||
633 | trace_lens[0] = copy_size; | ||
634 | trace_idx = 1; | ||
635 | #endif | ||
636 | 626 | ||
637 | for (i = 0; i < IWL_MAX_CMD_TFDS; i++) { | 627 | for (i = 0; i < IWL_MAX_CMD_TFDS; i++) { |
638 | if (!cmd->len[i]) | 628 | if (!cmd->len[i]) |
@@ -651,25 +641,14 @@ static int iwl_enqueue_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd) | |||
651 | 641 | ||
652 | iwlagn_txq_attach_buf_to_tfd(trans, txq, phys_addr, | 642 | iwlagn_txq_attach_buf_to_tfd(trans, txq, phys_addr, |
653 | cmd->len[i], 0); | 643 | cmd->len[i], 0); |
654 | #ifdef CONFIG_IWLWIFI_DEVICE_TRACING | ||
655 | trace_bufs[trace_idx] = cmd->data[i]; | ||
656 | trace_lens[trace_idx] = cmd->len[i]; | ||
657 | trace_idx++; | ||
658 | #endif | ||
659 | } | 644 | } |
660 | 645 | ||
661 | out_meta->flags = cmd->flags; | 646 | out_meta->flags = cmd->flags; |
662 | 647 | ||
663 | txq->need_update = 1; | 648 | txq->need_update = 1; |
664 | 649 | ||
665 | /* check that tracing gets all possible blocks */ | 650 | trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size, |
666 | BUILD_BUG_ON(IWL_MAX_CMD_TFDS + 1 != 3); | 651 | &out_cmd->hdr, copy_size); |
667 | #ifdef CONFIG_IWLWIFI_DEVICE_TRACING | ||
668 | trace_iwlwifi_dev_hcmd(trans->dev, cmd->flags, | ||
669 | trace_bufs[0], trace_lens[0], | ||
670 | trace_bufs[1], trace_lens[1], | ||
671 | trace_bufs[2], trace_lens[2]); | ||
672 | #endif | ||
673 | 652 | ||
674 | /* start timer if queue currently empty */ | 653 | /* start timer if queue currently empty */ |
675 | if (q->read_ptr == q->write_ptr && trans_pcie->wd_timeout) | 654 | if (q->read_ptr == q->write_ptr && trans_pcie->wd_timeout) |