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