0001
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM intel_avs
0004
0005 #if !defined(_TRACE_INTEL_AVS_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_INTEL_AVS_H
0007
0008 #include <linux/types.h>
0009 #include <linux/tracepoint.h>
0010
0011 TRACE_EVENT(avs_dsp_core_op,
0012
0013 TP_PROTO(unsigned int reg, unsigned int mask, const char *op, bool flag),
0014
0015 TP_ARGS(reg, mask, op, flag),
0016
0017 TP_STRUCT__entry(
0018 __field(unsigned int, reg )
0019 __field(unsigned int, mask )
0020 __string(op, op )
0021 __field(bool, flag )
0022 ),
0023
0024 TP_fast_assign(
0025 __entry->reg = reg;
0026 __entry->mask = mask;
0027 __assign_str(op, op);
0028 __entry->flag = flag;
0029 ),
0030
0031 TP_printk("%s: %d, core mask: 0x%X, prev state: 0x%08X",
0032 __get_str(op), __entry->flag, __entry->mask, __entry->reg)
0033 );
0034
0035 #ifndef __TRACE_INTEL_AVS_TRACE_HELPER
0036 #define __TRACE_INTEL_AVS_TRACE_HELPER
0037
0038 void trace_avs_msg_payload(const void *data, size_t size);
0039
0040 #define trace_avs_request(msg, fwregs) \
0041 ({ \
0042 trace_avs_ipc_request_msg((msg)->header, fwregs); \
0043 trace_avs_msg_payload((msg)->data, (msg)->size); \
0044 })
0045
0046 #define trace_avs_reply(msg, fwregs) \
0047 ({ \
0048 trace_avs_ipc_reply_msg((msg)->header, fwregs); \
0049 trace_avs_msg_payload((msg)->data, (msg)->size); \
0050 })
0051
0052 #define trace_avs_notify(msg, fwregs) \
0053 ({ \
0054 trace_avs_ipc_notify_msg((msg)->header, fwregs); \
0055 trace_avs_msg_payload((msg)->data, (msg)->size); \
0056 })
0057 #endif
0058
0059 DECLARE_EVENT_CLASS(avs_ipc_msg_hdr,
0060
0061 TP_PROTO(u64 header, u64 fwregs),
0062
0063 TP_ARGS(header, fwregs),
0064
0065 TP_STRUCT__entry(
0066 __field(u64, header)
0067 __field(u64, fwregs)
0068 ),
0069
0070 TP_fast_assign(
0071 __entry->header = header;
0072 __entry->fwregs = fwregs;
0073 ),
0074
0075 TP_printk("primary: 0x%08X, extension: 0x%08X,\n"
0076 "fwstatus: 0x%08X, fwerror: 0x%08X",
0077 lower_32_bits(__entry->header), upper_32_bits(__entry->header),
0078 lower_32_bits(__entry->fwregs), upper_32_bits(__entry->fwregs))
0079 );
0080
0081 DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_request_msg,
0082 TP_PROTO(u64 header, u64 fwregs),
0083 TP_ARGS(header, fwregs)
0084 );
0085
0086 DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_reply_msg,
0087 TP_PROTO(u64 header, u64 fwregs),
0088 TP_ARGS(header, fwregs)
0089 );
0090
0091 DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_notify_msg,
0092 TP_PROTO(u64 header, u64 fwregs),
0093 TP_ARGS(header, fwregs)
0094 );
0095
0096 TRACE_EVENT_CONDITION(avs_ipc_msg_payload,
0097
0098 TP_PROTO(const u8 *data, size_t size, size_t offset, size_t total),
0099
0100 TP_ARGS(data, size, offset, total),
0101
0102 TP_CONDITION(data && size),
0103
0104 TP_STRUCT__entry(
0105 __dynamic_array(u8, buf, size )
0106 __field(size_t, offset )
0107 __field(size_t, pos )
0108 __field(size_t, total )
0109 ),
0110
0111 TP_fast_assign(
0112 memcpy(__get_dynamic_array(buf), data + offset, size);
0113 __entry->offset = offset;
0114 __entry->pos = offset + size;
0115 __entry->total = total;
0116 ),
0117
0118 TP_printk("range %zu-%zu out of %zu bytes%s",
0119 __entry->offset, __entry->pos, __entry->total,
0120 __print_hex_dump("", DUMP_PREFIX_NONE, 16, 4,
0121 __get_dynamic_array(buf),
0122 __get_dynamic_array_len(buf), false))
0123 );
0124
0125 TRACE_EVENT(avs_d0ix,
0126
0127 TP_PROTO(const char *op, bool proceed, u64 header),
0128
0129 TP_ARGS(op, proceed, header),
0130
0131 TP_STRUCT__entry(
0132 __string(op, op )
0133 __field(bool, proceed )
0134 __field(u64, header )
0135 ),
0136
0137 TP_fast_assign(
0138 __assign_str(op, op);
0139 __entry->proceed = proceed;
0140 __entry->header = header;
0141 ),
0142
0143 TP_printk("%s%s for request: 0x%08X 0x%08X",
0144 __entry->proceed ? "" : "ignore ", __get_str(op),
0145 lower_32_bits(__entry->header), upper_32_bits(__entry->header))
0146 );
0147
0148 #endif
0149
0150
0151 #undef TRACE_INCLUDE_PATH
0152 #define TRACE_INCLUDE_PATH .
0153 #define TRACE_INCLUDE_FILE trace
0154 #include <trace/define_trace.h>