1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org> |
4 | * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl> |
5 | */ |
6 | |
7 | #if !defined(__MT7601U_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) |
8 | #define __MT7601U_TRACE_H |
9 | |
10 | #include <linux/tracepoint.h> |
11 | #include "mt7601u.h" |
12 | #include "mac.h" |
13 | |
14 | #undef TRACE_SYSTEM |
15 | #define TRACE_SYSTEM mt7601u |
16 | |
17 | #define MAXNAME 32 |
18 | #define DEV_ENTRY __array(char, wiphy_name, 32) |
19 | #define DEV_ASSIGN strscpy(__entry->wiphy_name, \ |
20 | wiphy_name(dev->hw->wiphy), MAXNAME) |
21 | #define DEV_PR_FMT "%s " |
22 | #define DEV_PR_ARG __entry->wiphy_name |
23 | |
24 | #define REG_ENTRY __field(u32, reg) __field(u32, val) |
25 | #define REG_ASSIGN __entry->reg = reg; __entry->val = val |
26 | #define REG_PR_FMT "%04x=%08x" |
27 | #define REG_PR_ARG __entry->reg, __entry->val |
28 | |
29 | DECLARE_EVENT_CLASS(dev_reg_evtu, |
30 | TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val), |
31 | TP_ARGS(dev, reg, val), |
32 | TP_STRUCT__entry( |
33 | DEV_ENTRY |
34 | REG_ENTRY |
35 | ), |
36 | TP_fast_assign( |
37 | DEV_ASSIGN; |
38 | REG_ASSIGN; |
39 | ), |
40 | TP_printk( |
41 | DEV_PR_FMT REG_PR_FMT, |
42 | DEV_PR_ARG, REG_PR_ARG |
43 | ) |
44 | ); |
45 | |
46 | DEFINE_EVENT(dev_reg_evtu, reg_read, |
47 | TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val), |
48 | TP_ARGS(dev, reg, val) |
49 | ); |
50 | |
51 | DEFINE_EVENT(dev_reg_evtu, reg_write, |
52 | TP_PROTO(struct mt7601u_dev *dev, u32 reg, u32 val), |
53 | TP_ARGS(dev, reg, val) |
54 | ); |
55 | |
56 | TRACE_EVENT(mt_submit_urb, |
57 | TP_PROTO(struct mt7601u_dev *dev, struct urb *u), |
58 | TP_ARGS(dev, u), |
59 | TP_STRUCT__entry( |
60 | DEV_ENTRY __field(unsigned, pipe) __field(u32, len) |
61 | ), |
62 | TP_fast_assign( |
63 | DEV_ASSIGN; |
64 | __entry->pipe = u->pipe; |
65 | __entry->len = u->transfer_buffer_length; |
66 | ), |
67 | TP_printk(DEV_PR_FMT "p:%08x len:%u" , |
68 | DEV_PR_ARG, __entry->pipe, __entry->len) |
69 | ); |
70 | |
71 | #define trace_mt_submit_urb_sync(__dev, __pipe, __len) ({ \ |
72 | struct urb u; \ |
73 | u.pipe = __pipe; \ |
74 | u.transfer_buffer_length = __len; \ |
75 | trace_mt_submit_urb(__dev, &u); \ |
76 | }) |
77 | |
78 | TRACE_EVENT(mt_mcu_msg_send, |
79 | TP_PROTO(struct mt7601u_dev *dev, |
80 | struct sk_buff *skb, u32 csum, bool resp), |
81 | TP_ARGS(dev, skb, csum, resp), |
82 | TP_STRUCT__entry( |
83 | DEV_ENTRY |
84 | __field(u32, info) |
85 | __field(u32, csum) |
86 | __field(bool, resp) |
87 | ), |
88 | TP_fast_assign( |
89 | DEV_ASSIGN; |
90 | __entry->info = *(u32 *)skb->data; |
91 | __entry->csum = csum; |
92 | __entry->resp = resp; |
93 | ), |
94 | TP_printk(DEV_PR_FMT "i:%08x c:%08x r:%d" , |
95 | DEV_PR_ARG, __entry->info, __entry->csum, __entry->resp) |
96 | ); |
97 | |
98 | TRACE_EVENT(mt_vend_req, |
99 | TP_PROTO(struct mt7601u_dev *dev, unsigned pipe, u8 req, u8 req_type, |
100 | u16 val, u16 offset, void *buf, size_t buflen, int ret), |
101 | TP_ARGS(dev, pipe, req, req_type, val, offset, buf, buflen, ret), |
102 | TP_STRUCT__entry( |
103 | DEV_ENTRY |
104 | __field(unsigned, pipe) __field(u8, req) __field(u8, req_type) |
105 | __field(u16, val) __field(u16, offset) __field(void*, buf) |
106 | __field(int, buflen) __field(int, ret) |
107 | ), |
108 | TP_fast_assign( |
109 | DEV_ASSIGN; |
110 | __entry->pipe = pipe; |
111 | __entry->req = req; |
112 | __entry->req_type = req_type; |
113 | __entry->val = val; |
114 | __entry->offset = offset; |
115 | __entry->buf = buf; |
116 | __entry->buflen = buflen; |
117 | __entry->ret = ret; |
118 | ), |
119 | TP_printk(DEV_PR_FMT |
120 | "%d p:%08x req:%02hhx %02hhx val:%04hx %04hx buf:%d %d" , |
121 | DEV_PR_ARG, __entry->ret, __entry->pipe, __entry->req, |
122 | __entry->req_type, __entry->val, __entry->offset, |
123 | !!__entry->buf, __entry->buflen) |
124 | ); |
125 | |
126 | TRACE_EVENT(ee_read, |
127 | TP_PROTO(struct mt7601u_dev *dev, int offset, u16 val), |
128 | TP_ARGS(dev, offset, val), |
129 | TP_STRUCT__entry( |
130 | DEV_ENTRY |
131 | __field(int, o) __field(u16, v) |
132 | ), |
133 | TP_fast_assign( |
134 | DEV_ASSIGN; |
135 | __entry->o = offset; |
136 | __entry->v = val; |
137 | ), |
138 | TP_printk(DEV_PR_FMT "%04x=%04x" , DEV_PR_ARG, __entry->o, __entry->v) |
139 | ); |
140 | |
141 | DECLARE_EVENT_CLASS(dev_rf_reg_evt, |
142 | TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val), |
143 | TP_ARGS(dev, bank, reg, val), |
144 | TP_STRUCT__entry( |
145 | DEV_ENTRY |
146 | __field(u8, bank) |
147 | __field(u8, reg) |
148 | __field(u8, val) |
149 | ), |
150 | TP_fast_assign( |
151 | DEV_ASSIGN; |
152 | REG_ASSIGN; |
153 | __entry->bank = bank; |
154 | ), |
155 | TP_printk( |
156 | DEV_PR_FMT "%02hhx:%02hhx=%02hhx" , |
157 | DEV_PR_ARG, __entry->bank, __entry->reg, __entry->val |
158 | ) |
159 | ); |
160 | |
161 | DEFINE_EVENT(dev_rf_reg_evt, rf_read, |
162 | TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val), |
163 | TP_ARGS(dev, bank, reg, val) |
164 | ); |
165 | |
166 | DEFINE_EVENT(dev_rf_reg_evt, rf_write, |
167 | TP_PROTO(struct mt7601u_dev *dev, u8 bank, u8 reg, u8 val), |
168 | TP_ARGS(dev, bank, reg, val) |
169 | ); |
170 | |
171 | DECLARE_EVENT_CLASS(dev_bbp_reg_evt, |
172 | TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val), |
173 | TP_ARGS(dev, reg, val), |
174 | TP_STRUCT__entry( |
175 | DEV_ENTRY |
176 | __field(u8, reg) |
177 | __field(u8, val) |
178 | ), |
179 | TP_fast_assign( |
180 | DEV_ASSIGN; |
181 | REG_ASSIGN; |
182 | ), |
183 | TP_printk( |
184 | DEV_PR_FMT "%02hhx=%02hhx" , |
185 | DEV_PR_ARG, __entry->reg, __entry->val |
186 | ) |
187 | ); |
188 | |
189 | DEFINE_EVENT(dev_bbp_reg_evt, bbp_read, |
190 | TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val), |
191 | TP_ARGS(dev, reg, val) |
192 | ); |
193 | |
194 | DEFINE_EVENT(dev_bbp_reg_evt, bbp_write, |
195 | TP_PROTO(struct mt7601u_dev *dev, u8 reg, u8 val), |
196 | TP_ARGS(dev, reg, val) |
197 | ); |
198 | |
199 | DECLARE_EVENT_CLASS(dev_simple_evt, |
200 | TP_PROTO(struct mt7601u_dev *dev, u8 val), |
201 | TP_ARGS(dev, val), |
202 | TP_STRUCT__entry( |
203 | DEV_ENTRY |
204 | __field(u8, val) |
205 | ), |
206 | TP_fast_assign( |
207 | DEV_ASSIGN; |
208 | __entry->val = val; |
209 | ), |
210 | TP_printk( |
211 | DEV_PR_FMT "%02hhx" , DEV_PR_ARG, __entry->val |
212 | ) |
213 | ); |
214 | |
215 | DEFINE_EVENT(dev_simple_evt, temp_mode, |
216 | TP_PROTO(struct mt7601u_dev *dev, u8 val), |
217 | TP_ARGS(dev, val) |
218 | ); |
219 | |
220 | DEFINE_EVENT(dev_simple_evt, read_temp, |
221 | TP_PROTO(struct mt7601u_dev *dev, u8 val), |
222 | TP_ARGS(dev, val) |
223 | ); |
224 | |
225 | DEFINE_EVENT(dev_simple_evt, freq_cal_adjust, |
226 | TP_PROTO(struct mt7601u_dev *dev, u8 val), |
227 | TP_ARGS(dev, val) |
228 | ); |
229 | |
230 | TRACE_EVENT(freq_cal_offset, |
231 | TP_PROTO(struct mt7601u_dev *dev, u8 phy_mode, s8 freq_off), |
232 | TP_ARGS(dev, phy_mode, freq_off), |
233 | TP_STRUCT__entry( |
234 | DEV_ENTRY |
235 | __field(u8, phy_mode) |
236 | __field(s8, freq_off) |
237 | ), |
238 | TP_fast_assign( |
239 | DEV_ASSIGN; |
240 | __entry->phy_mode = phy_mode; |
241 | __entry->freq_off = freq_off; |
242 | ), |
243 | TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx" , |
244 | DEV_PR_ARG, __entry->phy_mode, __entry->freq_off) |
245 | ); |
246 | |
247 | TRACE_EVENT(mt_rx, |
248 | TP_PROTO(struct mt7601u_dev *dev, struct mt7601u_rxwi *rxwi, u32 f), |
249 | TP_ARGS(dev, rxwi, f), |
250 | TP_STRUCT__entry( |
251 | DEV_ENTRY |
252 | __field_struct(struct mt7601u_rxwi, rxwi) |
253 | __field(u32, fce_info) |
254 | ), |
255 | TP_fast_assign( |
256 | DEV_ASSIGN; |
257 | __entry->rxwi = *rxwi; |
258 | __entry->fce_info = f; |
259 | ), |
260 | TP_printk(DEV_PR_FMT "rxi:%08x ctl:%08x frag_sn:%04hx rate:%04hx " |
261 | "uknw:%02hhx z:%02hhx%02hhx%02hhx snr:%02hhx " |
262 | "ant:%02hhx gain:%02hhx freq_o:%02hhx " |
263 | "r:%08x ea:%08x fce:%08x" , DEV_PR_ARG, |
264 | le32_to_cpu(__entry->rxwi.rxinfo), |
265 | le32_to_cpu(__entry->rxwi.ctl), |
266 | le16_to_cpu(__entry->rxwi.frag_sn), |
267 | le16_to_cpu(__entry->rxwi.rate), |
268 | __entry->rxwi.unknown, |
269 | __entry->rxwi.zero[0], __entry->rxwi.zero[1], |
270 | __entry->rxwi.zero[2], |
271 | __entry->rxwi.snr, __entry->rxwi.ant, |
272 | __entry->rxwi.gain, __entry->rxwi.freq_off, |
273 | __entry->rxwi.resv2, __entry->rxwi.expert_ant, |
274 | __entry->fce_info) |
275 | ); |
276 | |
277 | TRACE_EVENT(mt_tx, |
278 | TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb, |
279 | struct mt76_sta *sta, struct mt76_txwi *h), |
280 | TP_ARGS(dev, skb, sta, h), |
281 | TP_STRUCT__entry( |
282 | DEV_ENTRY |
283 | __field_struct(struct mt76_txwi, h) |
284 | __field(struct sk_buff *, skb) |
285 | __field(struct mt76_sta *, sta) |
286 | ), |
287 | TP_fast_assign( |
288 | DEV_ASSIGN; |
289 | __entry->h = *h; |
290 | __entry->skb = skb; |
291 | __entry->sta = sta; |
292 | ), |
293 | TP_printk(DEV_PR_FMT "skb:%p sta:%p flg:%04hx rate_ctl:%04hx " |
294 | "ack:%02hhx wcid:%02hhx len_ctl:%05hx" , DEV_PR_ARG, |
295 | __entry->skb, __entry->sta, |
296 | le16_to_cpu(__entry->h.flags), |
297 | le16_to_cpu(__entry->h.rate_ctl), |
298 | __entry->h.ack_ctl, __entry->h.wcid, |
299 | le16_to_cpu(__entry->h.len_ctl)) |
300 | ); |
301 | |
302 | TRACE_EVENT(mt_tx_dma_done, |
303 | TP_PROTO(struct mt7601u_dev *dev, struct sk_buff *skb), |
304 | TP_ARGS(dev, skb), |
305 | TP_STRUCT__entry( |
306 | DEV_ENTRY |
307 | __field(struct sk_buff *, skb) |
308 | ), |
309 | TP_fast_assign( |
310 | DEV_ASSIGN; |
311 | __entry->skb = skb; |
312 | ), |
313 | TP_printk(DEV_PR_FMT "%p" , DEV_PR_ARG, __entry->skb) |
314 | ); |
315 | |
316 | TRACE_EVENT(mt_tx_status_cleaned, |
317 | TP_PROTO(struct mt7601u_dev *dev, int cleaned), |
318 | TP_ARGS(dev, cleaned), |
319 | TP_STRUCT__entry( |
320 | DEV_ENTRY |
321 | __field(int, cleaned) |
322 | ), |
323 | TP_fast_assign( |
324 | DEV_ASSIGN; |
325 | __entry->cleaned = cleaned; |
326 | ), |
327 | TP_printk(DEV_PR_FMT "%d" , DEV_PR_ARG, __entry->cleaned) |
328 | ); |
329 | |
330 | TRACE_EVENT(mt_tx_status, |
331 | TP_PROTO(struct mt7601u_dev *dev, u32 stat1, u32 stat2), |
332 | TP_ARGS(dev, stat1, stat2), |
333 | TP_STRUCT__entry( |
334 | DEV_ENTRY |
335 | __field(u32, stat1) __field(u32, stat2) |
336 | ), |
337 | TP_fast_assign( |
338 | DEV_ASSIGN; |
339 | __entry->stat1 = stat1; |
340 | __entry->stat2 = stat2; |
341 | ), |
342 | TP_printk(DEV_PR_FMT "%08x %08x" , |
343 | DEV_PR_ARG, __entry->stat1, __entry->stat2) |
344 | ); |
345 | |
346 | TRACE_EVENT(mt_rx_dma_aggr, |
347 | TP_PROTO(struct mt7601u_dev *dev, int cnt, bool paged), |
348 | TP_ARGS(dev, cnt, paged), |
349 | TP_STRUCT__entry( |
350 | DEV_ENTRY |
351 | __field(u8, cnt) |
352 | __field(bool, paged) |
353 | ), |
354 | TP_fast_assign( |
355 | DEV_ASSIGN; |
356 | __entry->cnt = cnt; |
357 | __entry->paged = paged; |
358 | ), |
359 | TP_printk(DEV_PR_FMT "cnt:%d paged:%d" , |
360 | DEV_PR_ARG, __entry->cnt, __entry->paged) |
361 | ); |
362 | |
363 | DEFINE_EVENT(dev_simple_evt, set_key, |
364 | TP_PROTO(struct mt7601u_dev *dev, u8 val), |
365 | TP_ARGS(dev, val) |
366 | ); |
367 | |
368 | TRACE_EVENT(set_shared_key, |
369 | TP_PROTO(struct mt7601u_dev *dev, u8 vid, u8 key), |
370 | TP_ARGS(dev, vid, key), |
371 | TP_STRUCT__entry( |
372 | DEV_ENTRY |
373 | __field(u8, vid) |
374 | __field(u8, key) |
375 | ), |
376 | TP_fast_assign( |
377 | DEV_ASSIGN; |
378 | __entry->vid = vid; |
379 | __entry->key = key; |
380 | ), |
381 | TP_printk(DEV_PR_FMT "phy:%02hhx off:%02hhx" , |
382 | DEV_PR_ARG, __entry->vid, __entry->key) |
383 | ); |
384 | |
385 | #endif |
386 | |
387 | #undef TRACE_INCLUDE_PATH |
388 | #define TRACE_INCLUDE_PATH . |
389 | #undef TRACE_INCLUDE_FILE |
390 | #define TRACE_INCLUDE_FILE trace |
391 | |
392 | #include <trace/define_trace.h> |
393 | |