trace.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #undef TRACE_SYSTEM
  3. #define TRACE_SYSTEM intel_avs
  4. #if !defined(_TRACE_INTEL_AVS_H) || defined(TRACE_HEADER_MULTI_READ)
  5. #define _TRACE_INTEL_AVS_H
  6. #include <linux/types.h>
  7. #include <linux/tracepoint.h>
  8. TRACE_EVENT(avs_dsp_core_op,
  9. TP_PROTO(unsigned int reg, unsigned int mask, const char *op, bool flag),
  10. TP_ARGS(reg, mask, op, flag),
  11. TP_STRUCT__entry(
  12. __field(unsigned int, reg )
  13. __field(unsigned int, mask )
  14. __string(op, op )
  15. __field(bool, flag )
  16. ),
  17. TP_fast_assign(
  18. __entry->reg = reg;
  19. __entry->mask = mask;
  20. __assign_str(op, op);
  21. __entry->flag = flag;
  22. ),
  23. TP_printk("%s: %d, core mask: 0x%X, prev state: 0x%08X",
  24. __get_str(op), __entry->flag, __entry->mask, __entry->reg)
  25. );
  26. #ifndef __TRACE_INTEL_AVS_TRACE_HELPER
  27. #define __TRACE_INTEL_AVS_TRACE_HELPER
  28. void trace_avs_msg_payload(const void *data, size_t size);
  29. #define trace_avs_request(msg, fwregs) \
  30. ({ \
  31. trace_avs_ipc_request_msg((msg)->header, fwregs); \
  32. trace_avs_msg_payload((msg)->data, (msg)->size); \
  33. })
  34. #define trace_avs_reply(msg, fwregs) \
  35. ({ \
  36. trace_avs_ipc_reply_msg((msg)->header, fwregs); \
  37. trace_avs_msg_payload((msg)->data, (msg)->size); \
  38. })
  39. #define trace_avs_notify(msg, fwregs) \
  40. ({ \
  41. trace_avs_ipc_notify_msg((msg)->header, fwregs); \
  42. trace_avs_msg_payload((msg)->data, (msg)->size); \
  43. })
  44. #endif
  45. DECLARE_EVENT_CLASS(avs_ipc_msg_hdr,
  46. TP_PROTO(u64 header, u64 fwregs),
  47. TP_ARGS(header, fwregs),
  48. TP_STRUCT__entry(
  49. __field(u64, header)
  50. __field(u64, fwregs)
  51. ),
  52. TP_fast_assign(
  53. __entry->header = header;
  54. __entry->fwregs = fwregs;
  55. ),
  56. TP_printk("primary: 0x%08X, extension: 0x%08X,\n"
  57. "fwstatus: 0x%08X, fwerror: 0x%08X",
  58. lower_32_bits(__entry->header), upper_32_bits(__entry->header),
  59. lower_32_bits(__entry->fwregs), upper_32_bits(__entry->fwregs))
  60. );
  61. DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_request_msg,
  62. TP_PROTO(u64 header, u64 fwregs),
  63. TP_ARGS(header, fwregs)
  64. );
  65. DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_reply_msg,
  66. TP_PROTO(u64 header, u64 fwregs),
  67. TP_ARGS(header, fwregs)
  68. );
  69. DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_notify_msg,
  70. TP_PROTO(u64 header, u64 fwregs),
  71. TP_ARGS(header, fwregs)
  72. );
  73. TRACE_EVENT_CONDITION(avs_ipc_msg_payload,
  74. TP_PROTO(const u8 *data, size_t size, size_t offset, size_t total),
  75. TP_ARGS(data, size, offset, total),
  76. TP_CONDITION(data && size),
  77. TP_STRUCT__entry(
  78. __dynamic_array(u8, buf, size )
  79. __field(size_t, offset )
  80. __field(size_t, pos )
  81. __field(size_t, total )
  82. ),
  83. TP_fast_assign(
  84. memcpy(__get_dynamic_array(buf), data + offset, size);
  85. __entry->offset = offset;
  86. __entry->pos = offset + size;
  87. __entry->total = total;
  88. ),
  89. TP_printk("range %zu-%zu out of %zu bytes%s",
  90. __entry->offset, __entry->pos, __entry->total,
  91. __print_hex_dump("", DUMP_PREFIX_NONE, 16, 4,
  92. __get_dynamic_array(buf),
  93. __get_dynamic_array_len(buf), false))
  94. );
  95. TRACE_EVENT(avs_d0ix,
  96. TP_PROTO(const char *op, bool proceed, u64 header),
  97. TP_ARGS(op, proceed, header),
  98. TP_STRUCT__entry(
  99. __string(op, op )
  100. __field(bool, proceed )
  101. __field(u64, header )
  102. ),
  103. TP_fast_assign(
  104. __assign_str(op, op);
  105. __entry->proceed = proceed;
  106. __entry->header = header;
  107. ),
  108. TP_printk("%s%s for request: 0x%08X 0x%08X",
  109. __entry->proceed ? "" : "ignore ", __get_str(op),
  110. lower_32_bits(__entry->header), upper_32_bits(__entry->header))
  111. );
  112. #endif /* _TRACE_INTEL_AVS_H */
  113. /* This part must be outside protection */
  114. #undef TRACE_INCLUDE_PATH
  115. #define TRACE_INCLUDE_PATH .
  116. #define TRACE_INCLUDE_FILE trace
  117. #include <trace/define_trace.h>