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