trace.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #if !defined(_ATH6KL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
  2. #include <net/cfg80211.h>
  3. #include <linux/skbuff.h>
  4. #include <linux/tracepoint.h>
  5. #include "wmi.h"
  6. #include "hif.h"
  7. #if !defined(_ATH6KL_TRACE_H)
  8. static inline unsigned int ath6kl_get_wmi_id(void *buf, size_t buf_len)
  9. {
  10. struct wmi_cmd_hdr *hdr = buf;
  11. if (buf_len < sizeof(*hdr))
  12. return 0;
  13. return le16_to_cpu(hdr->cmd_id);
  14. }
  15. #endif /* __ATH6KL_TRACE_H */
  16. #define _ATH6KL_TRACE_H
  17. /* create empty functions when tracing is disabled */
  18. #if !defined(CONFIG_ATH6KL_TRACING)
  19. #undef TRACE_EVENT
  20. #define TRACE_EVENT(name, proto, ...) \
  21. static inline void trace_ ## name(proto) {}
  22. #endif /* !CONFIG_ATH6KL_TRACING || __CHECKER__ */
  23. #undef TRACE_SYSTEM
  24. #define TRACE_SYSTEM ath6kl
  25. TRACE_EVENT(ath6kl_wmi_cmd,
  26. TP_PROTO(void *buf, size_t buf_len),
  27. TP_ARGS(buf, buf_len),
  28. TP_STRUCT__entry(
  29. __field(unsigned int, id)
  30. __field(size_t, buf_len)
  31. __dynamic_array(u8, buf, buf_len)
  32. ),
  33. TP_fast_assign(
  34. __entry->id = ath6kl_get_wmi_id(buf, buf_len);
  35. __entry->buf_len = buf_len;
  36. memcpy(__get_dynamic_array(buf), buf, buf_len);
  37. ),
  38. TP_printk(
  39. "id %d len %d",
  40. __entry->id, __entry->buf_len
  41. )
  42. );
  43. TRACE_EVENT(ath6kl_wmi_event,
  44. TP_PROTO(void *buf, size_t buf_len),
  45. TP_ARGS(buf, buf_len),
  46. TP_STRUCT__entry(
  47. __field(unsigned int, id)
  48. __field(size_t, buf_len)
  49. __dynamic_array(u8, buf, buf_len)
  50. ),
  51. TP_fast_assign(
  52. __entry->id = ath6kl_get_wmi_id(buf, buf_len);
  53. __entry->buf_len = buf_len;
  54. memcpy(__get_dynamic_array(buf), buf, buf_len);
  55. ),
  56. TP_printk(
  57. "id %d len %d",
  58. __entry->id, __entry->buf_len
  59. )
  60. );
  61. TRACE_EVENT(ath6kl_sdio,
  62. TP_PROTO(unsigned int addr, int flags,
  63. void *buf, size_t buf_len),
  64. TP_ARGS(addr, flags, buf, buf_len),
  65. TP_STRUCT__entry(
  66. __field(unsigned int, tx)
  67. __field(unsigned int, addr)
  68. __field(int, flags)
  69. __field(size_t, buf_len)
  70. __dynamic_array(u8, buf, buf_len)
  71. ),
  72. TP_fast_assign(
  73. __entry->addr = addr;
  74. __entry->flags = flags;
  75. __entry->buf_len = buf_len;
  76. memcpy(__get_dynamic_array(buf), buf, buf_len);
  77. if (flags & HIF_WRITE)
  78. __entry->tx = 1;
  79. else
  80. __entry->tx = 0;
  81. ),
  82. TP_printk(
  83. "%s addr 0x%x flags 0x%x len %d\n",
  84. __entry->tx ? "tx" : "rx",
  85. __entry->addr,
  86. __entry->flags,
  87. __entry->buf_len
  88. )
  89. );
  90. TRACE_EVENT(ath6kl_sdio_scat,
  91. TP_PROTO(unsigned int addr, int flags, unsigned int total_len,
  92. unsigned int entries, struct hif_scatter_item *list),
  93. TP_ARGS(addr, flags, total_len, entries, list),
  94. TP_STRUCT__entry(
  95. __field(unsigned int, tx)
  96. __field(unsigned int, addr)
  97. __field(int, flags)
  98. __field(unsigned int, entries)
  99. __field(size_t, total_len)
  100. __dynamic_array(unsigned int, len_array, entries)
  101. __dynamic_array(u8, data, total_len)
  102. ),
  103. TP_fast_assign(
  104. unsigned int *len_array;
  105. int i, offset = 0;
  106. size_t len;
  107. __entry->addr = addr;
  108. __entry->flags = flags;
  109. __entry->entries = entries;
  110. __entry->total_len = total_len;
  111. if (flags & HIF_WRITE)
  112. __entry->tx = 1;
  113. else
  114. __entry->tx = 0;
  115. len_array = __get_dynamic_array(len_array);
  116. for (i = 0; i < entries; i++) {
  117. len = list[i].len;
  118. memcpy((u8 *) __get_dynamic_array(data) + offset,
  119. list[i].buf, len);
  120. len_array[i] = len;
  121. offset += len;
  122. }
  123. ),
  124. TP_printk(
  125. "%s addr 0x%x flags 0x%x entries %d total_len %d\n",
  126. __entry->tx ? "tx" : "rx",
  127. __entry->addr,
  128. __entry->flags,
  129. __entry->entries,
  130. __entry->total_len
  131. )
  132. );
  133. #endif /* _ ATH6KL_TRACE_H || TRACE_HEADER_MULTI_READ*/
  134. /* we don't want to use include/trace/events */
  135. #undef TRACE_INCLUDE_PATH
  136. #define TRACE_INCLUDE_PATH .
  137. #undef TRACE_INCLUDE_FILE
  138. #define TRACE_INCLUDE_FILE trace
  139. /* This part must be outside protection */
  140. #include <trace/define_trace.h>