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