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, 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, fwregs) \ |
41 | ({ \ |
42 | trace_avs_ipc_request_msg((msg)->header, fwregs); \ |
43 | trace_avs_msg_payload((msg)->data, (msg)->size); \ |
44 | }) |
45 | |
46 | #define trace_avs_reply(msg, fwregs) \ |
47 | ({ \ |
48 | trace_avs_ipc_reply_msg((msg)->header, fwregs); \ |
49 | trace_avs_msg_payload((msg)->data, (msg)->size); \ |
50 | }) |
51 | |
52 | #define trace_avs_notify(msg, fwregs) \ |
53 | ({ \ |
54 | trace_avs_ipc_notify_msg((msg)->header, fwregs); \ |
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, u64 fwregs), |
62 | |
63 | TP_ARGS(header, fwregs), |
64 | |
65 | TP_STRUCT__entry( |
66 | __field(u64, header) |
67 | __field(u64, fwregs) |
68 | ), |
69 | |
70 | TP_fast_assign( |
71 | __entry->header = header; |
72 | __entry->fwregs = fwregs; |
73 | ), |
74 | |
75 | TP_printk("primary: 0x%08X, extension: 0x%08X,\n" |
76 | "fwstatus: 0x%08X, fwerror: 0x%08X" , |
77 | lower_32_bits(__entry->header), upper_32_bits(__entry->header), |
78 | lower_32_bits(__entry->fwregs), upper_32_bits(__entry->fwregs)) |
79 | ); |
80 | |
81 | DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_request_msg, |
82 | TP_PROTO(u64 , u64 fwregs), |
83 | TP_ARGS(header, fwregs) |
84 | ); |
85 | |
86 | DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_reply_msg, |
87 | TP_PROTO(u64 , u64 fwregs), |
88 | TP_ARGS(header, fwregs) |
89 | ); |
90 | |
91 | DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_notify_msg, |
92 | TP_PROTO(u64 , u64 fwregs), |
93 | TP_ARGS(header, fwregs) |
94 | ); |
95 | |
96 | TRACE_EVENT_CONDITION(avs_ipc_msg_payload, |
97 | |
98 | TP_PROTO(const u8 *data, size_t size, size_t offset, size_t total), |
99 | |
100 | TP_ARGS(data, size, offset, total), |
101 | |
102 | TP_CONDITION(data && size), |
103 | |
104 | TP_STRUCT__entry( |
105 | __dynamic_array(u8, buf, size ) |
106 | __field(size_t, offset ) |
107 | __field(size_t, pos ) |
108 | __field(size_t, total ) |
109 | ), |
110 | |
111 | TP_fast_assign( |
112 | memcpy(__get_dynamic_array(buf), data + offset, size); |
113 | __entry->offset = offset; |
114 | __entry->pos = offset + size; |
115 | __entry->total = total; |
116 | ), |
117 | |
118 | TP_printk("range %zu-%zu out of %zu bytes%s" , |
119 | __entry->offset, __entry->pos, __entry->total, |
120 | __print_hex_dump("" , DUMP_PREFIX_NONE, 16, 4, |
121 | __get_dynamic_array(buf), |
122 | __get_dynamic_array_len(buf), false)) |
123 | ); |
124 | |
125 | TRACE_EVENT(avs_d0ix, |
126 | |
127 | TP_PROTO(const char *op, bool proceed, u64 ), |
128 | |
129 | TP_ARGS(op, proceed, header), |
130 | |
131 | TP_STRUCT__entry( |
132 | __string(op, op ) |
133 | __field(bool, proceed ) |
134 | __field(u64, header ) |
135 | ), |
136 | |
137 | TP_fast_assign( |
138 | __assign_str(op, op); |
139 | __entry->proceed = proceed; |
140 | __entry->header = header; |
141 | ), |
142 | |
143 | TP_printk("%s%s for request: 0x%08X 0x%08X" , |
144 | __entry->proceed ? "" : "ignore " , __get_str(op), |
145 | lower_32_bits(__entry->header), upper_32_bits(__entry->header)) |
146 | ); |
147 | |
148 | #endif /* _TRACE_INTEL_AVS_H */ |
149 | |
150 | /* This part must be outside protection */ |
151 | #undef TRACE_INCLUDE_PATH |
152 | #define TRACE_INCLUDE_PATH . |
153 | #define TRACE_INCLUDE_FILE trace |
154 | #include <trace/define_trace.h> |
155 | |