iwl-devtrace-iwlwifi.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /******************************************************************************
  3. *
  4. * Copyright(c) 2009 - 2014 Intel Corporation. All rights reserved.
  5. * Copyright(c) 2015 Intel Mobile Communications GmbH
  6. * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
  7. * Copyright(c) 2018 Intel Corporation
  8. *****************************************************************************/
  9. #if !defined(__IWLWIFI_DEVICE_TRACE_IWLWIFI) || defined(TRACE_HEADER_MULTI_READ)
  10. #define __IWLWIFI_DEVICE_TRACE_IWLWIFI
  11. #include <linux/tracepoint.h>
  12. #undef TRACE_SYSTEM
  13. #define TRACE_SYSTEM iwlwifi
  14. TRACE_EVENT(iwlwifi_dev_hcmd,
  15. TP_PROTO(const struct device *dev,
  16. struct iwl_host_cmd *cmd, u16 total_size,
  17. struct iwl_cmd_header_wide *hdr),
  18. TP_ARGS(dev, cmd, total_size, hdr),
  19. TP_STRUCT__entry(
  20. DEV_ENTRY
  21. __dynamic_array(u8, hcmd, total_size)
  22. __field(u32, flags)
  23. ),
  24. TP_fast_assign(
  25. int i, offset = sizeof(struct iwl_cmd_header);
  26. if (hdr->group_id)
  27. offset = sizeof(struct iwl_cmd_header_wide);
  28. DEV_ASSIGN;
  29. __entry->flags = cmd->flags;
  30. memcpy(__get_dynamic_array(hcmd), hdr, offset);
  31. for (i = 0; i < IWL_MAX_CMD_TBS_PER_TFD; i++) {
  32. if (!cmd->len[i])
  33. continue;
  34. memcpy((u8 *)__get_dynamic_array(hcmd) + offset,
  35. cmd->data[i], cmd->len[i]);
  36. offset += cmd->len[i];
  37. }
  38. ),
  39. TP_printk("[%s] hcmd %#.2x.%#.2x (%ssync)",
  40. __get_str(dev), ((u8 *)__get_dynamic_array(hcmd))[1],
  41. ((u8 *)__get_dynamic_array(hcmd))[0],
  42. __entry->flags & CMD_ASYNC ? "a" : "")
  43. );
  44. TRACE_EVENT(iwlwifi_dev_rx,
  45. TP_PROTO(const struct device *dev, const struct iwl_trans *trans,
  46. struct iwl_rx_packet *pkt, size_t len),
  47. TP_ARGS(dev, trans, pkt, len),
  48. TP_STRUCT__entry(
  49. DEV_ENTRY
  50. __field(u16, cmd)
  51. __field(u8, hdr_offset)
  52. __dynamic_array(u8, rxbuf,
  53. iwl_rx_trace_len(trans, pkt, len, NULL))
  54. ),
  55. TP_fast_assign(
  56. size_t hdr_offset = 0;
  57. DEV_ASSIGN;
  58. __entry->cmd = WIDE_ID(pkt->hdr.group_id, pkt->hdr.cmd);
  59. memcpy(__get_dynamic_array(rxbuf), pkt,
  60. iwl_rx_trace_len(trans, pkt, len, &hdr_offset));
  61. __entry->hdr_offset = hdr_offset;
  62. ),
  63. TP_printk("[%s] RX cmd %#.2x",
  64. __get_str(dev), __entry->cmd)
  65. );
  66. TRACE_EVENT(iwlwifi_dev_tx,
  67. TP_PROTO(const struct device *dev, struct sk_buff *skb,
  68. void *tfd, size_t tfdlen,
  69. void *buf0, size_t buf0_len,
  70. int hdr_len),
  71. TP_ARGS(dev, skb, tfd, tfdlen, buf0, buf0_len, hdr_len),
  72. TP_STRUCT__entry(
  73. DEV_ENTRY
  74. __field(void *, skbaddr)
  75. __field(size_t, framelen)
  76. __dynamic_array(u8, tfd, tfdlen)
  77. /*
  78. * Do not insert between or below these items,
  79. * we want to keep the frame together (except
  80. * for the possible padding).
  81. */
  82. __dynamic_array(u8, buf0, buf0_len)
  83. __dynamic_array(u8, buf1, hdr_len > 0 && iwl_trace_data(skb) ?
  84. 0 : skb->len - hdr_len)
  85. ),
  86. TP_fast_assign(
  87. DEV_ASSIGN;
  88. __entry->skbaddr = skb;
  89. __entry->framelen = buf0_len;
  90. if (hdr_len > 0)
  91. __entry->framelen += skb->len - hdr_len;
  92. memcpy(__get_dynamic_array(tfd), tfd, tfdlen);
  93. memcpy(__get_dynamic_array(buf0), buf0, buf0_len);
  94. if (hdr_len > 0 && !iwl_trace_data(skb))
  95. skb_copy_bits(skb, hdr_len,
  96. __get_dynamic_array(buf1),
  97. skb->len - hdr_len);
  98. ),
  99. TP_printk("[%s] TX %.2x (%zu bytes) skbaddr=%p",
  100. __get_str(dev), ((u8 *)__get_dynamic_array(buf0))[0],
  101. __entry->framelen, __entry->skbaddr)
  102. );
  103. TRACE_EVENT(iwlwifi_dev_ucode_event,
  104. TP_PROTO(const struct device *dev, u32 time, u32 data, u32 ev),
  105. TP_ARGS(dev, time, data, ev),
  106. TP_STRUCT__entry(
  107. DEV_ENTRY
  108. __field(u32, time)
  109. __field(u32, data)
  110. __field(u32, ev)
  111. ),
  112. TP_fast_assign(
  113. DEV_ASSIGN;
  114. __entry->time = time;
  115. __entry->data = data;
  116. __entry->ev = ev;
  117. ),
  118. TP_printk("[%s] EVT_LOGT:%010u:0x%08x:%04u",
  119. __get_str(dev), __entry->time, __entry->data, __entry->ev)
  120. );
  121. #endif /* __IWLWIFI_DEVICE_TRACE_IWLWIFI */
  122. #undef TRACE_INCLUDE_PATH
  123. #define TRACE_INCLUDE_PATH .
  124. #undef TRACE_INCLUDE_FILE
  125. #define TRACE_INCLUDE_FILE iwl-devtrace-iwlwifi
  126. #include <trace/define_trace.h>