brcms_trace_events.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. /*
  2. * Copyright (c) 2011 Broadcom Corporation
  3. *
  4. * Permission to use, copy, modify, and/or distribute this software for any
  5. * purpose with or without fee is hereby granted, provided that the above
  6. * copyright notice and this permission notice appear in all copies.
  7. *
  8. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  9. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
  11. * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  13. * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  14. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #if !defined(__TRACE_BRCMSMAC_H) || defined(TRACE_HEADER_MULTI_READ)
  17. #define __TRACE_BRCMSMAC_H
  18. #include <linux/types.h>
  19. #include <linux/device.h>
  20. #include <linux/tracepoint.h>
  21. #include "mac80211_if.h"
  22. #ifndef CONFIG_BRCM_TRACING
  23. #undef TRACE_EVENT
  24. #define TRACE_EVENT(name, proto, ...) \
  25. static inline void trace_ ## name(proto) {}
  26. #undef DECLARE_EVENT_CLASS
  27. #define DECLARE_EVENT_CLASS(...)
  28. #undef DEFINE_EVENT
  29. #define DEFINE_EVENT(evt_class, name, proto, ...) \
  30. static inline void trace_ ## name(proto) {}
  31. #endif
  32. #undef TRACE_SYSTEM
  33. #define TRACE_SYSTEM brcmsmac
  34. /*
  35. * We define a tracepoint, its arguments, its printk format and its
  36. * 'fast binary record' layout.
  37. */
  38. TRACE_EVENT(brcms_timer,
  39. /* TPPROTO is the prototype of the function called by this tracepoint */
  40. TP_PROTO(struct brcms_timer *t),
  41. /*
  42. * TPARGS(firstarg, p) are the parameters names, same as found in the
  43. * prototype.
  44. */
  45. TP_ARGS(t),
  46. /*
  47. * Fast binary tracing: define the trace record via TP_STRUCT__entry().
  48. * You can think about it like a regular C structure local variable
  49. * definition.
  50. */
  51. TP_STRUCT__entry(
  52. __field(uint, ms)
  53. __field(uint, set)
  54. __field(uint, periodic)
  55. ),
  56. TP_fast_assign(
  57. __entry->ms = t->ms;
  58. __entry->set = t->set;
  59. __entry->periodic = t->periodic;
  60. ),
  61. TP_printk(
  62. "ms=%u set=%u periodic=%u",
  63. __entry->ms, __entry->set, __entry->periodic
  64. )
  65. );
  66. TRACE_EVENT(brcms_dpc,
  67. TP_PROTO(unsigned long data),
  68. TP_ARGS(data),
  69. TP_STRUCT__entry(
  70. __field(unsigned long, data)
  71. ),
  72. TP_fast_assign(
  73. __entry->data = data;
  74. ),
  75. TP_printk(
  76. "data=%p",
  77. (void *)__entry->data
  78. )
  79. );
  80. TRACE_EVENT(brcms_macintstatus,
  81. TP_PROTO(const struct device *dev, int in_isr, u32 macintstatus,
  82. u32 mask),
  83. TP_ARGS(dev, in_isr, macintstatus, mask),
  84. TP_STRUCT__entry(
  85. __string(dev, dev_name(dev))
  86. __field(int, in_isr)
  87. __field(u32, macintstatus)
  88. __field(u32, mask)
  89. ),
  90. TP_fast_assign(
  91. __assign_str(dev, dev_name(dev));
  92. __entry->in_isr = in_isr;
  93. __entry->macintstatus = macintstatus;
  94. __entry->mask = mask;
  95. ),
  96. TP_printk("[%s] in_isr=%d macintstatus=%#x mask=%#x", __get_str(dev),
  97. __entry->in_isr, __entry->macintstatus, __entry->mask)
  98. );
  99. #undef TRACE_SYSTEM
  100. #define TRACE_SYSTEM brcmsmac_tx
  101. TRACE_EVENT(brcms_txdesc,
  102. TP_PROTO(const struct device *dev,
  103. void *txh, size_t txh_len),
  104. TP_ARGS(dev, txh, txh_len),
  105. TP_STRUCT__entry(
  106. __string(dev, dev_name(dev))
  107. __dynamic_array(u8, txh, txh_len)
  108. ),
  109. TP_fast_assign(
  110. __assign_str(dev, dev_name(dev));
  111. memcpy(__get_dynamic_array(txh), txh, txh_len);
  112. ),
  113. TP_printk("[%s] txdesc", __get_str(dev))
  114. );
  115. TRACE_EVENT(brcms_txstatus,
  116. TP_PROTO(const struct device *dev, u16 framelen, u16 frameid,
  117. u16 status, u16 lasttxtime, u16 sequence, u16 phyerr,
  118. u16 ackphyrxsh),
  119. TP_ARGS(dev, framelen, frameid, status, lasttxtime, sequence, phyerr,
  120. ackphyrxsh),
  121. TP_STRUCT__entry(
  122. __string(dev, dev_name(dev))
  123. __field(u16, framelen)
  124. __field(u16, frameid)
  125. __field(u16, status)
  126. __field(u16, lasttxtime)
  127. __field(u16, sequence)
  128. __field(u16, phyerr)
  129. __field(u16, ackphyrxsh)
  130. ),
  131. TP_fast_assign(
  132. __assign_str(dev, dev_name(dev));
  133. __entry->framelen = framelen;
  134. __entry->frameid = frameid;
  135. __entry->status = status;
  136. __entry->lasttxtime = lasttxtime;
  137. __entry->sequence = sequence;
  138. __entry->phyerr = phyerr;
  139. __entry->ackphyrxsh = ackphyrxsh;
  140. ),
  141. TP_printk("[%s] FrameId %#04x TxStatus %#04x LastTxTime %#04x "
  142. "Seq %#04x PHYTxStatus %#04x RxAck %#04x",
  143. __get_str(dev), __entry->frameid, __entry->status,
  144. __entry->lasttxtime, __entry->sequence, __entry->phyerr,
  145. __entry->ackphyrxsh)
  146. );
  147. TRACE_EVENT(brcms_ampdu_session,
  148. TP_PROTO(const struct device *dev, unsigned max_ampdu_len,
  149. u16 max_ampdu_frames, u16 ampdu_len, u16 ampdu_frames,
  150. u16 dma_len),
  151. TP_ARGS(dev, max_ampdu_len, max_ampdu_frames, ampdu_len, ampdu_frames,
  152. dma_len),
  153. TP_STRUCT__entry(
  154. __string(dev, dev_name(dev))
  155. __field(unsigned, max_ampdu_len)
  156. __field(u16, max_ampdu_frames)
  157. __field(u16, ampdu_len)
  158. __field(u16, ampdu_frames)
  159. __field(u16, dma_len)
  160. ),
  161. TP_fast_assign(
  162. __assign_str(dev, dev_name(dev));
  163. __entry->max_ampdu_len = max_ampdu_len;
  164. __entry->max_ampdu_frames = max_ampdu_frames;
  165. __entry->ampdu_len = ampdu_len;
  166. __entry->ampdu_frames = ampdu_frames;
  167. __entry->dma_len = dma_len;
  168. ),
  169. TP_printk("[%s] ampdu session max_len=%u max_frames=%u len=%u frames=%u dma_len=%u",
  170. __get_str(dev), __entry->max_ampdu_len,
  171. __entry->max_ampdu_frames, __entry->ampdu_len,
  172. __entry->ampdu_frames, __entry->dma_len)
  173. );
  174. #undef TRACE_SYSTEM
  175. #define TRACE_SYSTEM brcmsmac_msg
  176. #define MAX_MSG_LEN 100
  177. DECLARE_EVENT_CLASS(brcms_msg_event,
  178. TP_PROTO(struct va_format *vaf),
  179. TP_ARGS(vaf),
  180. TP_STRUCT__entry(
  181. __dynamic_array(char, msg, MAX_MSG_LEN)
  182. ),
  183. TP_fast_assign(
  184. WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
  185. MAX_MSG_LEN, vaf->fmt,
  186. *vaf->va) >= MAX_MSG_LEN);
  187. ),
  188. TP_printk("%s", __get_str(msg))
  189. );
  190. DEFINE_EVENT(brcms_msg_event, brcms_info,
  191. TP_PROTO(struct va_format *vaf),
  192. TP_ARGS(vaf)
  193. );
  194. DEFINE_EVENT(brcms_msg_event, brcms_warn,
  195. TP_PROTO(struct va_format *vaf),
  196. TP_ARGS(vaf)
  197. );
  198. DEFINE_EVENT(brcms_msg_event, brcms_err,
  199. TP_PROTO(struct va_format *vaf),
  200. TP_ARGS(vaf)
  201. );
  202. DEFINE_EVENT(brcms_msg_event, brcms_crit,
  203. TP_PROTO(struct va_format *vaf),
  204. TP_ARGS(vaf)
  205. );
  206. TRACE_EVENT(brcms_dbg,
  207. TP_PROTO(u32 level, const char *func, struct va_format *vaf),
  208. TP_ARGS(level, func, vaf),
  209. TP_STRUCT__entry(
  210. __field(u32, level)
  211. __string(func, func)
  212. __dynamic_array(char, msg, MAX_MSG_LEN)
  213. ),
  214. TP_fast_assign(
  215. __entry->level = level;
  216. __assign_str(func, func);
  217. WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
  218. MAX_MSG_LEN, vaf->fmt,
  219. *vaf->va) >= MAX_MSG_LEN);
  220. ),
  221. TP_printk("%s: %s", __get_str(func), __get_str(msg))
  222. );
  223. #endif /* __TRACE_BRCMSMAC_H */
  224. #ifdef CONFIG_BRCM_TRACING
  225. #undef TRACE_INCLUDE_PATH
  226. #define TRACE_INCLUDE_PATH .
  227. #undef TRACE_INCLUDE_FILE
  228. #define TRACE_INCLUDE_FILE brcms_trace_events
  229. #include <trace/define_trace.h>
  230. #endif /* CONFIG_BRCM_TRACING */