1 | /* SPDX-License-Identifier: ISC */ |
2 | /* |
3 | * Copyright (c) 2013-2016 Qualcomm Atheros, Inc. |
4 | * Copyright (c) 2019, The Linux Foundation. All rights reserved. |
5 | */ |
6 | |
7 | #undef TRACE_SYSTEM |
8 | #define TRACE_SYSTEM wil6210 |
9 | #if !defined(WIL6210_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) |
10 | #define WIL6210_TRACE_H |
11 | |
12 | #include <linux/tracepoint.h> |
13 | #include "wil6210.h" |
14 | #include "txrx.h" |
15 | |
16 | /* create empty functions when tracing is disabled */ |
17 | #if !defined(CONFIG_WIL6210_TRACING) || defined(__CHECKER__) |
18 | |
19 | #undef TRACE_EVENT |
20 | #define TRACE_EVENT(name, proto, ...) \ |
21 | static inline void trace_ ## name(proto) {} |
22 | #undef DECLARE_EVENT_CLASS |
23 | #define DECLARE_EVENT_CLASS(...) |
24 | #undef DEFINE_EVENT |
25 | #define DEFINE_EVENT(evt_class, name, proto, ...) \ |
26 | static inline void trace_ ## name(proto) {} |
27 | #endif /* !CONFIG_WIL6210_TRACING || defined(__CHECKER__) */ |
28 | |
29 | DECLARE_EVENT_CLASS(wil6210_wmi, |
30 | TP_PROTO(struct wmi_cmd_hdr *wmi, void *buf, u16 buf_len), |
31 | |
32 | TP_ARGS(wmi, buf, buf_len), |
33 | |
34 | TP_STRUCT__entry( |
35 | __field(u8, mid) |
36 | __field(u16, command_id) |
37 | __field(u32, fw_timestamp) |
38 | __field(u16, buf_len) |
39 | __dynamic_array(u8, buf, buf_len) |
40 | ), |
41 | |
42 | TP_fast_assign( |
43 | __entry->mid = wmi->mid; |
44 | __entry->command_id = le16_to_cpu(wmi->command_id); |
45 | __entry->fw_timestamp = le32_to_cpu(wmi->fw_timestamp); |
46 | __entry->buf_len = buf_len; |
47 | memcpy(__get_dynamic_array(buf), buf, buf_len); |
48 | ), |
49 | |
50 | TP_printk( |
51 | "MID %d id 0x%04x len %d timestamp %d" , |
52 | __entry->mid, __entry->command_id, __entry->buf_len, |
53 | __entry->fw_timestamp |
54 | ) |
55 | ); |
56 | |
57 | DEFINE_EVENT(wil6210_wmi, wil6210_wmi_cmd, |
58 | TP_PROTO(struct wmi_cmd_hdr *wmi, void *buf, u16 buf_len), |
59 | TP_ARGS(wmi, buf, buf_len) |
60 | ); |
61 | |
62 | DEFINE_EVENT(wil6210_wmi, wil6210_wmi_event, |
63 | TP_PROTO(struct wmi_cmd_hdr *wmi, void *buf, u16 buf_len), |
64 | TP_ARGS(wmi, buf, buf_len) |
65 | ); |
66 | |
67 | #define WIL6210_MSG_MAX (200) |
68 | |
69 | DECLARE_EVENT_CLASS(wil6210_log_event, |
70 | TP_PROTO(struct va_format *vaf), |
71 | TP_ARGS(vaf), |
72 | TP_STRUCT__entry( |
73 | __vstring(msg, vaf->fmt, vaf->va) |
74 | ), |
75 | TP_fast_assign( |
76 | __assign_vstr(msg, vaf->fmt, vaf->va); |
77 | ), |
78 | TP_printk("%s" , __get_str(msg)) |
79 | ); |
80 | |
81 | DEFINE_EVENT(wil6210_log_event, wil6210_log_err, |
82 | TP_PROTO(struct va_format *vaf), |
83 | TP_ARGS(vaf) |
84 | ); |
85 | |
86 | DEFINE_EVENT(wil6210_log_event, wil6210_log_info, |
87 | TP_PROTO(struct va_format *vaf), |
88 | TP_ARGS(vaf) |
89 | ); |
90 | |
91 | DEFINE_EVENT(wil6210_log_event, wil6210_log_dbg, |
92 | TP_PROTO(struct va_format *vaf), |
93 | TP_ARGS(vaf) |
94 | ); |
95 | |
96 | #define wil_pseudo_irq_cause(x) __print_flags(x, "|", \ |
97 | {BIT_DMA_PSEUDO_CAUSE_RX, "Rx" }, \ |
98 | {BIT_DMA_PSEUDO_CAUSE_TX, "Tx" }, \ |
99 | {BIT_DMA_PSEUDO_CAUSE_MISC, "Misc" }) |
100 | |
101 | TRACE_EVENT(wil6210_irq_pseudo, |
102 | TP_PROTO(u32 x), |
103 | TP_ARGS(x), |
104 | TP_STRUCT__entry( |
105 | __field(u32, x) |
106 | ), |
107 | TP_fast_assign( |
108 | __entry->x = x; |
109 | ), |
110 | TP_printk("cause 0x%08x : %s" , __entry->x, |
111 | wil_pseudo_irq_cause(__entry->x)) |
112 | ); |
113 | |
114 | DECLARE_EVENT_CLASS(wil6210_irq, |
115 | TP_PROTO(u32 x), |
116 | TP_ARGS(x), |
117 | TP_STRUCT__entry( |
118 | __field(u32, x) |
119 | ), |
120 | TP_fast_assign( |
121 | __entry->x = x; |
122 | ), |
123 | TP_printk("cause 0x%08x" , __entry->x) |
124 | ); |
125 | |
126 | DEFINE_EVENT(wil6210_irq, wil6210_irq_rx, |
127 | TP_PROTO(u32 x), |
128 | TP_ARGS(x) |
129 | ); |
130 | |
131 | DEFINE_EVENT(wil6210_irq, wil6210_irq_tx, |
132 | TP_PROTO(u32 x), |
133 | TP_ARGS(x) |
134 | ); |
135 | |
136 | DEFINE_EVENT(wil6210_irq, wil6210_irq_misc, |
137 | TP_PROTO(u32 x), |
138 | TP_ARGS(x) |
139 | ); |
140 | |
141 | DEFINE_EVENT(wil6210_irq, wil6210_irq_misc_thread, |
142 | TP_PROTO(u32 x), |
143 | TP_ARGS(x) |
144 | ); |
145 | |
146 | TRACE_EVENT(wil6210_rx, |
147 | TP_PROTO(u16 index, struct vring_rx_desc *d), |
148 | TP_ARGS(index, d), |
149 | TP_STRUCT__entry( |
150 | __field(u16, index) |
151 | __field(unsigned int, len) |
152 | __field(u8, mid) |
153 | __field(u8, cid) |
154 | __field(u8, tid) |
155 | __field(u8, type) |
156 | __field(u8, subtype) |
157 | __field(u16, seq) |
158 | __field(u8, mcs) |
159 | ), |
160 | TP_fast_assign( |
161 | __entry->index = index; |
162 | __entry->len = d->dma.length; |
163 | __entry->mid = wil_rxdesc_mid(d); |
164 | __entry->cid = wil_rxdesc_cid(d); |
165 | __entry->tid = wil_rxdesc_tid(d); |
166 | __entry->type = wil_rxdesc_ftype(d); |
167 | __entry->subtype = wil_rxdesc_subtype(d); |
168 | __entry->seq = wil_rxdesc_seq(d); |
169 | __entry->mcs = wil_rxdesc_mcs(d); |
170 | ), |
171 | TP_printk("index %d len %d mid %d cid (%%8) %d tid %d mcs %d seq 0x%03x" |
172 | " type 0x%1x subtype 0x%1x" , __entry->index, __entry->len, |
173 | __entry->mid, __entry->cid, __entry->tid, __entry->mcs, |
174 | __entry->seq, __entry->type, __entry->subtype) |
175 | ); |
176 | |
177 | TRACE_EVENT(wil6210_rx_status, |
178 | TP_PROTO(struct wil6210_priv *wil, u8 use_compressed, u16 buff_id, |
179 | void *msg), |
180 | TP_ARGS(wil, use_compressed, buff_id, msg), |
181 | TP_STRUCT__entry(__field(u8, use_compressed) |
182 | __field(u16, buff_id) |
183 | __field(unsigned int, len) |
184 | __field(u8, mid) |
185 | __field(u8, cid) |
186 | __field(u8, tid) |
187 | __field(u8, type) |
188 | __field(u8, subtype) |
189 | __field(u16, seq) |
190 | __field(u8, mcs) |
191 | ), |
192 | TP_fast_assign(__entry->use_compressed = use_compressed; |
193 | __entry->buff_id = buff_id; |
194 | __entry->len = wil_rx_status_get_length(msg); |
195 | __entry->mid = wil_rx_status_get_mid(msg); |
196 | __entry->cid = wil_rx_status_get_cid(msg); |
197 | __entry->tid = wil_rx_status_get_tid(msg); |
198 | __entry->type = wil_rx_status_get_frame_type(wil, |
199 | msg); |
200 | __entry->subtype = wil_rx_status_get_fc1(wil, msg); |
201 | __entry->seq = wil_rx_status_get_seq(wil, msg); |
202 | __entry->mcs = wil_rx_status_get_mcs(msg); |
203 | ), |
204 | TP_printk( |
205 | "compressed %d buff_id %d len %d mid %d cid %d tid %d mcs %d seq 0x%03x type 0x%1x subtype 0x%1x" , |
206 | __entry->use_compressed, __entry->buff_id, __entry->len, |
207 | __entry->mid, __entry->cid, __entry->tid, __entry->mcs, |
208 | __entry->seq, __entry->type, __entry->subtype) |
209 | ); |
210 | |
211 | TRACE_EVENT(wil6210_tx, |
212 | TP_PROTO(u8 vring, u16 index, unsigned int len, u8 frags), |
213 | TP_ARGS(vring, index, len, frags), |
214 | TP_STRUCT__entry( |
215 | __field(u8, vring) |
216 | __field(u8, frags) |
217 | __field(u16, index) |
218 | __field(unsigned int, len) |
219 | ), |
220 | TP_fast_assign( |
221 | __entry->vring = vring; |
222 | __entry->frags = frags; |
223 | __entry->index = index; |
224 | __entry->len = len; |
225 | ), |
226 | TP_printk("vring %d index %d len %d frags %d" , |
227 | __entry->vring, __entry->index, __entry->len, __entry->frags) |
228 | ); |
229 | |
230 | TRACE_EVENT(wil6210_tx_done, |
231 | TP_PROTO(u8 vring, u16 index, unsigned int len, u8 err), |
232 | TP_ARGS(vring, index, len, err), |
233 | TP_STRUCT__entry( |
234 | __field(u8, vring) |
235 | __field(u8, err) |
236 | __field(u16, index) |
237 | __field(unsigned int, len) |
238 | ), |
239 | TP_fast_assign( |
240 | __entry->vring = vring; |
241 | __entry->index = index; |
242 | __entry->len = len; |
243 | __entry->err = err; |
244 | ), |
245 | TP_printk("vring %d index %d len %d err 0x%02x" , |
246 | __entry->vring, __entry->index, __entry->len, |
247 | __entry->err) |
248 | ); |
249 | |
250 | TRACE_EVENT(wil6210_tx_status, |
251 | TP_PROTO(struct wil_ring_tx_status *msg, u16 index, |
252 | unsigned int len), |
253 | TP_ARGS(msg, index, len), |
254 | TP_STRUCT__entry(__field(u16, index) |
255 | __field(unsigned int, len) |
256 | __field(u8, num_descs) |
257 | __field(u8, ring_id) |
258 | __field(u8, status) |
259 | __field(u8, mcs) |
260 | |
261 | ), |
262 | TP_fast_assign(__entry->index = index; |
263 | __entry->len = len; |
264 | __entry->num_descs = msg->num_descriptors; |
265 | __entry->ring_id = msg->ring_id; |
266 | __entry->status = msg->status; |
267 | __entry->mcs = wil_tx_status_get_mcs(msg); |
268 | ), |
269 | TP_printk( |
270 | "ring_id %d swtail 0x%x len %d num_descs %d status 0x%x mcs %d" , |
271 | __entry->ring_id, __entry->index, __entry->len, |
272 | __entry->num_descs, __entry->status, __entry->mcs) |
273 | ); |
274 | |
275 | #endif /* WIL6210_TRACE_H || TRACE_HEADER_MULTI_READ*/ |
276 | |
277 | #if defined(CONFIG_WIL6210_TRACING) && !defined(__CHECKER__) |
278 | /* we don't want to use include/trace/events */ |
279 | #undef TRACE_INCLUDE_PATH |
280 | #define TRACE_INCLUDE_PATH . |
281 | #undef TRACE_INCLUDE_FILE |
282 | #define TRACE_INCLUDE_FILE trace |
283 | |
284 | /* This part must be outside protection */ |
285 | #include <trace/define_trace.h> |
286 | #endif /* defined(CONFIG_WIL6210_TRACING) && !defined(__CHECKER__) */ |
287 | |