trace.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /*
  2. * Copyright (c) 2005-2011 Atheros Communications Inc.
  3. * Copyright (c) 2011-2013 Qualcomm Atheros, Inc.
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any
  6. * purpose with or without fee is hereby granted, provided that the above
  7. * copyright notice and this permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  10. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  11. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  12. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  13. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  14. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  15. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  16. */
  17. #if !defined(_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
  18. #include <linux/tracepoint.h>
  19. #define _TRACE_H_
  20. /* create empty functions when tracing is disabled */
  21. #if !defined(CONFIG_ATH10K_TRACING)
  22. #undef TRACE_EVENT
  23. #define TRACE_EVENT(name, proto, ...) \
  24. static inline void trace_ ## name(proto) {}
  25. #undef DECLARE_EVENT_CLASS
  26. #define DECLARE_EVENT_CLASS(...)
  27. #undef DEFINE_EVENT
  28. #define DEFINE_EVENT(evt_class, name, proto, ...) \
  29. static inline void trace_ ## name(proto) {}
  30. #endif /* !CONFIG_ATH10K_TRACING || __CHECKER__ */
  31. #undef TRACE_SYSTEM
  32. #define TRACE_SYSTEM ath10k
  33. #define ATH10K_MSG_MAX 200
  34. DECLARE_EVENT_CLASS(ath10k_log_event,
  35. TP_PROTO(struct va_format *vaf),
  36. TP_ARGS(vaf),
  37. TP_STRUCT__entry(
  38. __dynamic_array(char, msg, ATH10K_MSG_MAX)
  39. ),
  40. TP_fast_assign(
  41. WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
  42. ATH10K_MSG_MAX,
  43. vaf->fmt,
  44. *vaf->va) >= ATH10K_MSG_MAX);
  45. ),
  46. TP_printk("%s", __get_str(msg))
  47. );
  48. DEFINE_EVENT(ath10k_log_event, ath10k_log_err,
  49. TP_PROTO(struct va_format *vaf),
  50. TP_ARGS(vaf)
  51. );
  52. DEFINE_EVENT(ath10k_log_event, ath10k_log_warn,
  53. TP_PROTO(struct va_format *vaf),
  54. TP_ARGS(vaf)
  55. );
  56. DEFINE_EVENT(ath10k_log_event, ath10k_log_info,
  57. TP_PROTO(struct va_format *vaf),
  58. TP_ARGS(vaf)
  59. );
  60. TRACE_EVENT(ath10k_log_dbg,
  61. TP_PROTO(unsigned int level, struct va_format *vaf),
  62. TP_ARGS(level, vaf),
  63. TP_STRUCT__entry(
  64. __field(unsigned int, level)
  65. __dynamic_array(char, msg, ATH10K_MSG_MAX)
  66. ),
  67. TP_fast_assign(
  68. __entry->level = level;
  69. WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
  70. ATH10K_MSG_MAX,
  71. vaf->fmt,
  72. *vaf->va) >= ATH10K_MSG_MAX);
  73. ),
  74. TP_printk("%s", __get_str(msg))
  75. );
  76. TRACE_EVENT(ath10k_log_dbg_dump,
  77. TP_PROTO(const char *msg, const char *prefix,
  78. const void *buf, size_t buf_len),
  79. TP_ARGS(msg, prefix, buf, buf_len),
  80. TP_STRUCT__entry(
  81. __string(msg, msg)
  82. __string(prefix, prefix)
  83. __field(size_t, buf_len)
  84. __dynamic_array(u8, buf, buf_len)
  85. ),
  86. TP_fast_assign(
  87. __assign_str(msg, msg);
  88. __assign_str(prefix, prefix);
  89. __entry->buf_len = buf_len;
  90. memcpy(__get_dynamic_array(buf), buf, buf_len);
  91. ),
  92. TP_printk(
  93. "%s/%s\n", __get_str(prefix), __get_str(msg)
  94. )
  95. );
  96. TRACE_EVENT(ath10k_wmi_cmd,
  97. TP_PROTO(int id, void *buf, size_t buf_len),
  98. TP_ARGS(id, buf, buf_len),
  99. TP_STRUCT__entry(
  100. __field(unsigned int, id)
  101. __field(size_t, buf_len)
  102. __dynamic_array(u8, buf, buf_len)
  103. ),
  104. TP_fast_assign(
  105. __entry->id = id;
  106. __entry->buf_len = buf_len;
  107. memcpy(__get_dynamic_array(buf), buf, buf_len);
  108. ),
  109. TP_printk(
  110. "id %d len %zu",
  111. __entry->id,
  112. __entry->buf_len
  113. )
  114. );
  115. TRACE_EVENT(ath10k_wmi_event,
  116. TP_PROTO(int id, void *buf, size_t buf_len),
  117. TP_ARGS(id, buf, buf_len),
  118. TP_STRUCT__entry(
  119. __field(unsigned int, id)
  120. __field(size_t, buf_len)
  121. __dynamic_array(u8, buf, buf_len)
  122. ),
  123. TP_fast_assign(
  124. __entry->id = id;
  125. __entry->buf_len = buf_len;
  126. memcpy(__get_dynamic_array(buf), buf, buf_len);
  127. ),
  128. TP_printk(
  129. "id %d len %zu",
  130. __entry->id,
  131. __entry->buf_len
  132. )
  133. );
  134. #endif /* _TRACE_H_ || TRACE_HEADER_MULTI_READ*/
  135. /* we don't want to use include/trace/events */
  136. #undef TRACE_INCLUDE_PATH
  137. #define TRACE_INCLUDE_PATH .
  138. #undef TRACE_INCLUDE_FILE
  139. #define TRACE_INCLUDE_FILE trace
  140. /* This part must be outside protection */
  141. #include <trace/define_trace.h>