]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - net/mac80211/trace.h
Merge branch 'pm-pci'
[mirror_ubuntu-artful-kernel.git] / net / mac80211 / trace.h
1 /*
2 * Portions of this file
3 * Copyright(c) 2016 Intel Deutschland GmbH
4 */
5
6 #if !defined(__MAC80211_DRIVER_TRACE) || defined(TRACE_HEADER_MULTI_READ)
7 #define __MAC80211_DRIVER_TRACE
8
9 #include <linux/tracepoint.h>
10 #include <net/mac80211.h>
11 #include "ieee80211_i.h"
12
13 #undef TRACE_SYSTEM
14 #define TRACE_SYSTEM mac80211
15
16 #define MAXNAME 32
17 #define LOCAL_ENTRY __array(char, wiphy_name, 32)
18 #define LOCAL_ASSIGN strlcpy(__entry->wiphy_name, wiphy_name(local->hw.wiphy), MAXNAME)
19 #define LOCAL_PR_FMT "%s"
20 #define LOCAL_PR_ARG __entry->wiphy_name
21
22 #define STA_ENTRY __array(char, sta_addr, ETH_ALEN)
23 #define STA_ASSIGN (sta ? memcpy(__entry->sta_addr, sta->addr, ETH_ALEN) : memset(__entry->sta_addr, 0, ETH_ALEN))
24 #define STA_NAMED_ASSIGN(s) memcpy(__entry->sta_addr, (s)->addr, ETH_ALEN)
25 #define STA_PR_FMT " sta:%pM"
26 #define STA_PR_ARG __entry->sta_addr
27
28 #define VIF_ENTRY __field(enum nl80211_iftype, vif_type) __field(void *, sdata) \
29 __field(bool, p2p) \
30 __string(vif_name, sdata->name)
31 #define VIF_ASSIGN __entry->vif_type = sdata->vif.type; __entry->sdata = sdata; \
32 __entry->p2p = sdata->vif.p2p; \
33 __assign_str(vif_name, sdata->name)
34 #define VIF_PR_FMT " vif:%s(%d%s)"
35 #define VIF_PR_ARG __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : ""
36
37 #define CHANDEF_ENTRY __field(u32, control_freq) \
38 __field(u32, chan_width) \
39 __field(u32, center_freq1) \
40 __field(u32, center_freq2)
41 #define CHANDEF_ASSIGN(c) \
42 __entry->control_freq = (c) ? ((c)->chan ? (c)->chan->center_freq : 0) : 0; \
43 __entry->chan_width = (c) ? (c)->width : 0; \
44 __entry->center_freq1 = (c) ? (c)->center_freq1 : 0; \
45 __entry->center_freq2 = (c) ? (c)->center_freq2 : 0;
46 #define CHANDEF_PR_FMT " control:%d MHz width:%d center: %d/%d MHz"
47 #define CHANDEF_PR_ARG __entry->control_freq, __entry->chan_width, \
48 __entry->center_freq1, __entry->center_freq2
49
50 #define MIN_CHANDEF_ENTRY \
51 __field(u32, min_control_freq) \
52 __field(u32, min_chan_width) \
53 __field(u32, min_center_freq1) \
54 __field(u32, min_center_freq2)
55
56 #define MIN_CHANDEF_ASSIGN(c) \
57 __entry->min_control_freq = (c)->chan ? (c)->chan->center_freq : 0; \
58 __entry->min_chan_width = (c)->width; \
59 __entry->min_center_freq1 = (c)->center_freq1; \
60 __entry->min_center_freq2 = (c)->center_freq2;
61 #define MIN_CHANDEF_PR_FMT " min_control:%d MHz min_width:%d min_center: %d/%d MHz"
62 #define MIN_CHANDEF_PR_ARG __entry->min_control_freq, __entry->min_chan_width, \
63 __entry->min_center_freq1, __entry->min_center_freq2
64
65 #define CHANCTX_ENTRY CHANDEF_ENTRY \
66 MIN_CHANDEF_ENTRY \
67 __field(u8, rx_chains_static) \
68 __field(u8, rx_chains_dynamic)
69 #define CHANCTX_ASSIGN CHANDEF_ASSIGN(&ctx->conf.def) \
70 MIN_CHANDEF_ASSIGN(&ctx->conf.min_def) \
71 __entry->rx_chains_static = ctx->conf.rx_chains_static; \
72 __entry->rx_chains_dynamic = ctx->conf.rx_chains_dynamic
73 #define CHANCTX_PR_FMT CHANDEF_PR_FMT MIN_CHANDEF_PR_FMT " chains:%d/%d"
74 #define CHANCTX_PR_ARG CHANDEF_PR_ARG, MIN_CHANDEF_PR_ARG, \
75 __entry->rx_chains_static, __entry->rx_chains_dynamic
76
77 #define KEY_ENTRY __field(u32, cipher) \
78 __field(u8, hw_key_idx) \
79 __field(u8, flags) \
80 __field(s8, keyidx)
81 #define KEY_ASSIGN(k) __entry->cipher = (k)->cipher; \
82 __entry->flags = (k)->flags; \
83 __entry->keyidx = (k)->keyidx; \
84 __entry->hw_key_idx = (k)->hw_key_idx;
85 #define KEY_PR_FMT " cipher:0x%x, flags=%#x, keyidx=%d, hw_key_idx=%d"
86 #define KEY_PR_ARG __entry->cipher, __entry->flags, __entry->keyidx, __entry->hw_key_idx
87
88 #define AMPDU_ACTION_ENTRY __field(enum ieee80211_ampdu_mlme_action, \
89 ieee80211_ampdu_mlme_action) \
90 STA_ENTRY \
91 __field(u16, tid) \
92 __field(u16, ssn) \
93 __field(u8, buf_size) \
94 __field(bool, amsdu) \
95 __field(u16, timeout) \
96 __field(u16, action)
97 #define AMPDU_ACTION_ASSIGN STA_NAMED_ASSIGN(params->sta); \
98 __entry->tid = params->tid; \
99 __entry->ssn = params->ssn; \
100 __entry->buf_size = params->buf_size; \
101 __entry->amsdu = params->amsdu; \
102 __entry->timeout = params->timeout; \
103 __entry->action = params->action;
104 #define AMPDU_ACTION_PR_FMT STA_PR_FMT " tid %d, ssn %d, buf_size %u, amsdu %d, timeout %d action %d"
105 #define AMPDU_ACTION_PR_ARG STA_PR_ARG, __entry->tid, __entry->ssn, \
106 __entry->buf_size, __entry->amsdu, __entry->timeout, \
107 __entry->action
108
109 /*
110 * Tracing for driver callbacks.
111 */
112
113 DECLARE_EVENT_CLASS(local_only_evt,
114 TP_PROTO(struct ieee80211_local *local),
115 TP_ARGS(local),
116 TP_STRUCT__entry(
117 LOCAL_ENTRY
118 ),
119 TP_fast_assign(
120 LOCAL_ASSIGN;
121 ),
122 TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG)
123 );
124
125 DECLARE_EVENT_CLASS(local_sdata_addr_evt,
126 TP_PROTO(struct ieee80211_local *local,
127 struct ieee80211_sub_if_data *sdata),
128 TP_ARGS(local, sdata),
129
130 TP_STRUCT__entry(
131 LOCAL_ENTRY
132 VIF_ENTRY
133 __array(char, addr, ETH_ALEN)
134 ),
135
136 TP_fast_assign(
137 LOCAL_ASSIGN;
138 VIF_ASSIGN;
139 memcpy(__entry->addr, sdata->vif.addr, ETH_ALEN);
140 ),
141
142 TP_printk(
143 LOCAL_PR_FMT VIF_PR_FMT " addr:%pM",
144 LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr
145 )
146 );
147
148 DECLARE_EVENT_CLASS(local_u32_evt,
149 TP_PROTO(struct ieee80211_local *local, u32 value),
150 TP_ARGS(local, value),
151
152 TP_STRUCT__entry(
153 LOCAL_ENTRY
154 __field(u32, value)
155 ),
156
157 TP_fast_assign(
158 LOCAL_ASSIGN;
159 __entry->value = value;
160 ),
161
162 TP_printk(
163 LOCAL_PR_FMT " value:%d",
164 LOCAL_PR_ARG, __entry->value
165 )
166 );
167
168 DECLARE_EVENT_CLASS(local_sdata_evt,
169 TP_PROTO(struct ieee80211_local *local,
170 struct ieee80211_sub_if_data *sdata),
171 TP_ARGS(local, sdata),
172
173 TP_STRUCT__entry(
174 LOCAL_ENTRY
175 VIF_ENTRY
176 ),
177
178 TP_fast_assign(
179 LOCAL_ASSIGN;
180 VIF_ASSIGN;
181 ),
182
183 TP_printk(
184 LOCAL_PR_FMT VIF_PR_FMT,
185 LOCAL_PR_ARG, VIF_PR_ARG
186 )
187 );
188
189 DEFINE_EVENT(local_only_evt, drv_return_void,
190 TP_PROTO(struct ieee80211_local *local),
191 TP_ARGS(local)
192 );
193
194 TRACE_EVENT(drv_return_int,
195 TP_PROTO(struct ieee80211_local *local, int ret),
196 TP_ARGS(local, ret),
197 TP_STRUCT__entry(
198 LOCAL_ENTRY
199 __field(int, ret)
200 ),
201 TP_fast_assign(
202 LOCAL_ASSIGN;
203 __entry->ret = ret;
204 ),
205 TP_printk(LOCAL_PR_FMT " - %d", LOCAL_PR_ARG, __entry->ret)
206 );
207
208 TRACE_EVENT(drv_return_bool,
209 TP_PROTO(struct ieee80211_local *local, bool ret),
210 TP_ARGS(local, ret),
211 TP_STRUCT__entry(
212 LOCAL_ENTRY
213 __field(bool, ret)
214 ),
215 TP_fast_assign(
216 LOCAL_ASSIGN;
217 __entry->ret = ret;
218 ),
219 TP_printk(LOCAL_PR_FMT " - %s", LOCAL_PR_ARG, (__entry->ret) ?
220 "true" : "false")
221 );
222
223 TRACE_EVENT(drv_return_u32,
224 TP_PROTO(struct ieee80211_local *local, u32 ret),
225 TP_ARGS(local, ret),
226 TP_STRUCT__entry(
227 LOCAL_ENTRY
228 __field(u32, ret)
229 ),
230 TP_fast_assign(
231 LOCAL_ASSIGN;
232 __entry->ret = ret;
233 ),
234 TP_printk(LOCAL_PR_FMT " - %u", LOCAL_PR_ARG, __entry->ret)
235 );
236
237 TRACE_EVENT(drv_return_u64,
238 TP_PROTO(struct ieee80211_local *local, u64 ret),
239 TP_ARGS(local, ret),
240 TP_STRUCT__entry(
241 LOCAL_ENTRY
242 __field(u64, ret)
243 ),
244 TP_fast_assign(
245 LOCAL_ASSIGN;
246 __entry->ret = ret;
247 ),
248 TP_printk(LOCAL_PR_FMT " - %llu", LOCAL_PR_ARG, __entry->ret)
249 );
250
251 DEFINE_EVENT(local_only_evt, drv_start,
252 TP_PROTO(struct ieee80211_local *local),
253 TP_ARGS(local)
254 );
255
256 DEFINE_EVENT(local_u32_evt, drv_get_et_strings,
257 TP_PROTO(struct ieee80211_local *local, u32 sset),
258 TP_ARGS(local, sset)
259 );
260
261 DEFINE_EVENT(local_u32_evt, drv_get_et_sset_count,
262 TP_PROTO(struct ieee80211_local *local, u32 sset),
263 TP_ARGS(local, sset)
264 );
265
266 DEFINE_EVENT(local_only_evt, drv_get_et_stats,
267 TP_PROTO(struct ieee80211_local *local),
268 TP_ARGS(local)
269 );
270
271 DEFINE_EVENT(local_only_evt, drv_suspend,
272 TP_PROTO(struct ieee80211_local *local),
273 TP_ARGS(local)
274 );
275
276 DEFINE_EVENT(local_only_evt, drv_resume,
277 TP_PROTO(struct ieee80211_local *local),
278 TP_ARGS(local)
279 );
280
281 TRACE_EVENT(drv_set_wakeup,
282 TP_PROTO(struct ieee80211_local *local, bool enabled),
283 TP_ARGS(local, enabled),
284 TP_STRUCT__entry(
285 LOCAL_ENTRY
286 __field(bool, enabled)
287 ),
288 TP_fast_assign(
289 LOCAL_ASSIGN;
290 __entry->enabled = enabled;
291 ),
292 TP_printk(LOCAL_PR_FMT " enabled:%d", LOCAL_PR_ARG, __entry->enabled)
293 );
294
295 DEFINE_EVENT(local_only_evt, drv_stop,
296 TP_PROTO(struct ieee80211_local *local),
297 TP_ARGS(local)
298 );
299
300 DEFINE_EVENT(local_sdata_addr_evt, drv_add_interface,
301 TP_PROTO(struct ieee80211_local *local,
302 struct ieee80211_sub_if_data *sdata),
303 TP_ARGS(local, sdata)
304 );
305
306 TRACE_EVENT(drv_change_interface,
307 TP_PROTO(struct ieee80211_local *local,
308 struct ieee80211_sub_if_data *sdata,
309 enum nl80211_iftype type, bool p2p),
310
311 TP_ARGS(local, sdata, type, p2p),
312
313 TP_STRUCT__entry(
314 LOCAL_ENTRY
315 VIF_ENTRY
316 __field(u32, new_type)
317 __field(bool, new_p2p)
318 ),
319
320 TP_fast_assign(
321 LOCAL_ASSIGN;
322 VIF_ASSIGN;
323 __entry->new_type = type;
324 __entry->new_p2p = p2p;
325 ),
326
327 TP_printk(
328 LOCAL_PR_FMT VIF_PR_FMT " new type:%d%s",
329 LOCAL_PR_ARG, VIF_PR_ARG, __entry->new_type,
330 __entry->new_p2p ? "/p2p" : ""
331 )
332 );
333
334 DEFINE_EVENT(local_sdata_addr_evt, drv_remove_interface,
335 TP_PROTO(struct ieee80211_local *local,
336 struct ieee80211_sub_if_data *sdata),
337 TP_ARGS(local, sdata)
338 );
339
340 TRACE_EVENT(drv_config,
341 TP_PROTO(struct ieee80211_local *local,
342 u32 changed),
343
344 TP_ARGS(local, changed),
345
346 TP_STRUCT__entry(
347 LOCAL_ENTRY
348 __field(u32, changed)
349 __field(u32, flags)
350 __field(int, power_level)
351 __field(int, dynamic_ps_timeout)
352 __field(u16, listen_interval)
353 __field(u8, long_frame_max_tx_count)
354 __field(u8, short_frame_max_tx_count)
355 CHANDEF_ENTRY
356 __field(int, smps)
357 ),
358
359 TP_fast_assign(
360 LOCAL_ASSIGN;
361 __entry->changed = changed;
362 __entry->flags = local->hw.conf.flags;
363 __entry->power_level = local->hw.conf.power_level;
364 __entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout;
365 __entry->listen_interval = local->hw.conf.listen_interval;
366 __entry->long_frame_max_tx_count =
367 local->hw.conf.long_frame_max_tx_count;
368 __entry->short_frame_max_tx_count =
369 local->hw.conf.short_frame_max_tx_count;
370 CHANDEF_ASSIGN(&local->hw.conf.chandef)
371 __entry->smps = local->hw.conf.smps_mode;
372 ),
373
374 TP_printk(
375 LOCAL_PR_FMT " ch:%#x" CHANDEF_PR_FMT,
376 LOCAL_PR_ARG, __entry->changed, CHANDEF_PR_ARG
377 )
378 );
379
380 TRACE_EVENT(drv_bss_info_changed,
381 TP_PROTO(struct ieee80211_local *local,
382 struct ieee80211_sub_if_data *sdata,
383 struct ieee80211_bss_conf *info,
384 u32 changed),
385
386 TP_ARGS(local, sdata, info, changed),
387
388 TP_STRUCT__entry(
389 LOCAL_ENTRY
390 VIF_ENTRY
391 __field(u32, changed)
392 __field(bool, assoc)
393 __field(bool, ibss_joined)
394 __field(bool, ibss_creator)
395 __field(u16, aid)
396 __field(bool, cts)
397 __field(bool, shortpre)
398 __field(bool, shortslot)
399 __field(bool, enable_beacon)
400 __field(u8, dtimper)
401 __field(u16, bcnint)
402 __field(u16, assoc_cap)
403 __field(u64, sync_tsf)
404 __field(u32, sync_device_ts)
405 __field(u8, sync_dtim_count)
406 __field(u32, basic_rates)
407 __array(int, mcast_rate, NUM_NL80211_BANDS)
408 __field(u16, ht_operation_mode)
409 __field(s32, cqm_rssi_thold);
410 __field(s32, cqm_rssi_hyst);
411 __field(u32, channel_width);
412 __field(u32, channel_cfreq1);
413 __dynamic_array(u32, arp_addr_list,
414 info->arp_addr_cnt > IEEE80211_BSS_ARP_ADDR_LIST_LEN ?
415 IEEE80211_BSS_ARP_ADDR_LIST_LEN :
416 info->arp_addr_cnt);
417 __field(int, arp_addr_cnt);
418 __field(bool, qos);
419 __field(bool, idle);
420 __field(bool, ps);
421 __dynamic_array(u8, ssid, info->ssid_len);
422 __field(bool, hidden_ssid);
423 __field(int, txpower)
424 __field(u8, p2p_oppps_ctwindow)
425 ),
426
427 TP_fast_assign(
428 LOCAL_ASSIGN;
429 VIF_ASSIGN;
430 __entry->changed = changed;
431 __entry->aid = info->aid;
432 __entry->assoc = info->assoc;
433 __entry->ibss_joined = info->ibss_joined;
434 __entry->ibss_creator = info->ibss_creator;
435 __entry->shortpre = info->use_short_preamble;
436 __entry->cts = info->use_cts_prot;
437 __entry->shortslot = info->use_short_slot;
438 __entry->enable_beacon = info->enable_beacon;
439 __entry->dtimper = info->dtim_period;
440 __entry->bcnint = info->beacon_int;
441 __entry->assoc_cap = info->assoc_capability;
442 __entry->sync_tsf = info->sync_tsf;
443 __entry->sync_device_ts = info->sync_device_ts;
444 __entry->sync_dtim_count = info->sync_dtim_count;
445 __entry->basic_rates = info->basic_rates;
446 memcpy(__entry->mcast_rate, info->mcast_rate,
447 sizeof(__entry->mcast_rate));
448 __entry->ht_operation_mode = info->ht_operation_mode;
449 __entry->cqm_rssi_thold = info->cqm_rssi_thold;
450 __entry->cqm_rssi_hyst = info->cqm_rssi_hyst;
451 __entry->channel_width = info->chandef.width;
452 __entry->channel_cfreq1 = info->chandef.center_freq1;
453 __entry->arp_addr_cnt = info->arp_addr_cnt;
454 memcpy(__get_dynamic_array(arp_addr_list), info->arp_addr_list,
455 sizeof(u32) * (info->arp_addr_cnt > IEEE80211_BSS_ARP_ADDR_LIST_LEN ?
456 IEEE80211_BSS_ARP_ADDR_LIST_LEN :
457 info->arp_addr_cnt));
458 __entry->qos = info->qos;
459 __entry->idle = info->idle;
460 __entry->ps = info->ps;
461 memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len);
462 __entry->hidden_ssid = info->hidden_ssid;
463 __entry->txpower = info->txpower;
464 __entry->p2p_oppps_ctwindow = info->p2p_noa_attr.oppps_ctwindow;
465 ),
466
467 TP_printk(
468 LOCAL_PR_FMT VIF_PR_FMT " changed:%#x",
469 LOCAL_PR_ARG, VIF_PR_ARG, __entry->changed
470 )
471 );
472
473 TRACE_EVENT(drv_prepare_multicast,
474 TP_PROTO(struct ieee80211_local *local, int mc_count),
475
476 TP_ARGS(local, mc_count),
477
478 TP_STRUCT__entry(
479 LOCAL_ENTRY
480 __field(int, mc_count)
481 ),
482
483 TP_fast_assign(
484 LOCAL_ASSIGN;
485 __entry->mc_count = mc_count;
486 ),
487
488 TP_printk(
489 LOCAL_PR_FMT " prepare mc (%d)",
490 LOCAL_PR_ARG, __entry->mc_count
491 )
492 );
493
494 TRACE_EVENT(drv_configure_filter,
495 TP_PROTO(struct ieee80211_local *local,
496 unsigned int changed_flags,
497 unsigned int *total_flags,
498 u64 multicast),
499
500 TP_ARGS(local, changed_flags, total_flags, multicast),
501
502 TP_STRUCT__entry(
503 LOCAL_ENTRY
504 __field(unsigned int, changed)
505 __field(unsigned int, total)
506 __field(u64, multicast)
507 ),
508
509 TP_fast_assign(
510 LOCAL_ASSIGN;
511 __entry->changed = changed_flags;
512 __entry->total = *total_flags;
513 __entry->multicast = multicast;
514 ),
515
516 TP_printk(
517 LOCAL_PR_FMT " changed:%#x total:%#x",
518 LOCAL_PR_ARG, __entry->changed, __entry->total
519 )
520 );
521
522 TRACE_EVENT(drv_config_iface_filter,
523 TP_PROTO(struct ieee80211_local *local,
524 struct ieee80211_sub_if_data *sdata,
525 unsigned int filter_flags,
526 unsigned int changed_flags),
527
528 TP_ARGS(local, sdata, filter_flags, changed_flags),
529
530 TP_STRUCT__entry(
531 LOCAL_ENTRY
532 VIF_ENTRY
533 __field(unsigned int, filter_flags)
534 __field(unsigned int, changed_flags)
535 ),
536
537 TP_fast_assign(
538 LOCAL_ASSIGN;
539 VIF_ASSIGN;
540 __entry->filter_flags = filter_flags;
541 __entry->changed_flags = changed_flags;
542 ),
543
544 TP_printk(
545 LOCAL_PR_FMT VIF_PR_FMT
546 " filter_flags: %#x changed_flags: %#x",
547 LOCAL_PR_ARG, VIF_PR_ARG, __entry->filter_flags,
548 __entry->changed_flags
549 )
550 );
551
552 TRACE_EVENT(drv_set_tim,
553 TP_PROTO(struct ieee80211_local *local,
554 struct ieee80211_sta *sta, bool set),
555
556 TP_ARGS(local, sta, set),
557
558 TP_STRUCT__entry(
559 LOCAL_ENTRY
560 STA_ENTRY
561 __field(bool, set)
562 ),
563
564 TP_fast_assign(
565 LOCAL_ASSIGN;
566 STA_ASSIGN;
567 __entry->set = set;
568 ),
569
570 TP_printk(
571 LOCAL_PR_FMT STA_PR_FMT " set:%d",
572 LOCAL_PR_ARG, STA_PR_ARG, __entry->set
573 )
574 );
575
576 TRACE_EVENT(drv_set_key,
577 TP_PROTO(struct ieee80211_local *local,
578 enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata,
579 struct ieee80211_sta *sta,
580 struct ieee80211_key_conf *key),
581
582 TP_ARGS(local, cmd, sdata, sta, key),
583
584 TP_STRUCT__entry(
585 LOCAL_ENTRY
586 VIF_ENTRY
587 STA_ENTRY
588 KEY_ENTRY
589 ),
590
591 TP_fast_assign(
592 LOCAL_ASSIGN;
593 VIF_ASSIGN;
594 STA_ASSIGN;
595 KEY_ASSIGN(key);
596 ),
597
598 TP_printk(
599 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT KEY_PR_FMT,
600 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, KEY_PR_ARG
601 )
602 );
603
604 TRACE_EVENT(drv_update_tkip_key,
605 TP_PROTO(struct ieee80211_local *local,
606 struct ieee80211_sub_if_data *sdata,
607 struct ieee80211_key_conf *conf,
608 struct ieee80211_sta *sta, u32 iv32),
609
610 TP_ARGS(local, sdata, conf, sta, iv32),
611
612 TP_STRUCT__entry(
613 LOCAL_ENTRY
614 VIF_ENTRY
615 STA_ENTRY
616 __field(u32, iv32)
617 ),
618
619 TP_fast_assign(
620 LOCAL_ASSIGN;
621 VIF_ASSIGN;
622 STA_ASSIGN;
623 __entry->iv32 = iv32;
624 ),
625
626 TP_printk(
627 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x",
628 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->iv32
629 )
630 );
631
632 DEFINE_EVENT(local_sdata_evt, drv_hw_scan,
633 TP_PROTO(struct ieee80211_local *local,
634 struct ieee80211_sub_if_data *sdata),
635 TP_ARGS(local, sdata)
636 );
637
638 DEFINE_EVENT(local_sdata_evt, drv_cancel_hw_scan,
639 TP_PROTO(struct ieee80211_local *local,
640 struct ieee80211_sub_if_data *sdata),
641 TP_ARGS(local, sdata)
642 );
643
644 DEFINE_EVENT(local_sdata_evt, drv_sched_scan_start,
645 TP_PROTO(struct ieee80211_local *local,
646 struct ieee80211_sub_if_data *sdata),
647 TP_ARGS(local, sdata)
648 );
649
650 DEFINE_EVENT(local_sdata_evt, drv_sched_scan_stop,
651 TP_PROTO(struct ieee80211_local *local,
652 struct ieee80211_sub_if_data *sdata),
653 TP_ARGS(local, sdata)
654 );
655
656 TRACE_EVENT(drv_sw_scan_start,
657 TP_PROTO(struct ieee80211_local *local,
658 struct ieee80211_sub_if_data *sdata,
659 const u8 *mac_addr),
660
661 TP_ARGS(local, sdata, mac_addr),
662
663 TP_STRUCT__entry(
664 LOCAL_ENTRY
665 VIF_ENTRY
666 __array(char, mac_addr, ETH_ALEN)
667 ),
668
669 TP_fast_assign(
670 LOCAL_ASSIGN;
671 VIF_ASSIGN;
672 memcpy(__entry->mac_addr, mac_addr, ETH_ALEN);
673 ),
674
675 TP_printk(LOCAL_PR_FMT ", " VIF_PR_FMT ", addr:%pM",
676 LOCAL_PR_ARG, VIF_PR_ARG, __entry->mac_addr)
677 );
678
679 DEFINE_EVENT(local_sdata_evt, drv_sw_scan_complete,
680 TP_PROTO(struct ieee80211_local *local,
681 struct ieee80211_sub_if_data *sdata),
682 TP_ARGS(local, sdata)
683 );
684
685 TRACE_EVENT(drv_get_stats,
686 TP_PROTO(struct ieee80211_local *local,
687 struct ieee80211_low_level_stats *stats,
688 int ret),
689
690 TP_ARGS(local, stats, ret),
691
692 TP_STRUCT__entry(
693 LOCAL_ENTRY
694 __field(int, ret)
695 __field(unsigned int, ackfail)
696 __field(unsigned int, rtsfail)
697 __field(unsigned int, fcserr)
698 __field(unsigned int, rtssucc)
699 ),
700
701 TP_fast_assign(
702 LOCAL_ASSIGN;
703 __entry->ret = ret;
704 __entry->ackfail = stats->dot11ACKFailureCount;
705 __entry->rtsfail = stats->dot11RTSFailureCount;
706 __entry->fcserr = stats->dot11FCSErrorCount;
707 __entry->rtssucc = stats->dot11RTSSuccessCount;
708 ),
709
710 TP_printk(
711 LOCAL_PR_FMT " ret:%d",
712 LOCAL_PR_ARG, __entry->ret
713 )
714 );
715
716 TRACE_EVENT(drv_get_key_seq,
717 TP_PROTO(struct ieee80211_local *local,
718 struct ieee80211_key_conf *key),
719
720 TP_ARGS(local, key),
721
722 TP_STRUCT__entry(
723 LOCAL_ENTRY
724 KEY_ENTRY
725 ),
726
727 TP_fast_assign(
728 LOCAL_ASSIGN;
729 KEY_ASSIGN(key);
730 ),
731
732 TP_printk(
733 LOCAL_PR_FMT KEY_PR_FMT,
734 LOCAL_PR_ARG, KEY_PR_ARG
735 )
736 );
737
738 DEFINE_EVENT(local_u32_evt, drv_set_frag_threshold,
739 TP_PROTO(struct ieee80211_local *local, u32 value),
740 TP_ARGS(local, value)
741 );
742
743 DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold,
744 TP_PROTO(struct ieee80211_local *local, u32 value),
745 TP_ARGS(local, value)
746 );
747
748 TRACE_EVENT(drv_set_coverage_class,
749 TP_PROTO(struct ieee80211_local *local, s16 value),
750
751 TP_ARGS(local, value),
752
753 TP_STRUCT__entry(
754 LOCAL_ENTRY
755 __field(s16, value)
756 ),
757
758 TP_fast_assign(
759 LOCAL_ASSIGN;
760 __entry->value = value;
761 ),
762
763 TP_printk(
764 LOCAL_PR_FMT " value:%d",
765 LOCAL_PR_ARG, __entry->value
766 )
767 );
768
769 TRACE_EVENT(drv_sta_notify,
770 TP_PROTO(struct ieee80211_local *local,
771 struct ieee80211_sub_if_data *sdata,
772 enum sta_notify_cmd cmd,
773 struct ieee80211_sta *sta),
774
775 TP_ARGS(local, sdata, cmd, sta),
776
777 TP_STRUCT__entry(
778 LOCAL_ENTRY
779 VIF_ENTRY
780 STA_ENTRY
781 __field(u32, cmd)
782 ),
783
784 TP_fast_assign(
785 LOCAL_ASSIGN;
786 VIF_ASSIGN;
787 STA_ASSIGN;
788 __entry->cmd = cmd;
789 ),
790
791 TP_printk(
792 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " cmd:%d",
793 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd
794 )
795 );
796
797 TRACE_EVENT(drv_sta_state,
798 TP_PROTO(struct ieee80211_local *local,
799 struct ieee80211_sub_if_data *sdata,
800 struct ieee80211_sta *sta,
801 enum ieee80211_sta_state old_state,
802 enum ieee80211_sta_state new_state),
803
804 TP_ARGS(local, sdata, sta, old_state, new_state),
805
806 TP_STRUCT__entry(
807 LOCAL_ENTRY
808 VIF_ENTRY
809 STA_ENTRY
810 __field(u32, old_state)
811 __field(u32, new_state)
812 ),
813
814 TP_fast_assign(
815 LOCAL_ASSIGN;
816 VIF_ASSIGN;
817 STA_ASSIGN;
818 __entry->old_state = old_state;
819 __entry->new_state = new_state;
820 ),
821
822 TP_printk(
823 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " state: %d->%d",
824 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG,
825 __entry->old_state, __entry->new_state
826 )
827 );
828
829 TRACE_EVENT(drv_sta_rc_update,
830 TP_PROTO(struct ieee80211_local *local,
831 struct ieee80211_sub_if_data *sdata,
832 struct ieee80211_sta *sta,
833 u32 changed),
834
835 TP_ARGS(local, sdata, sta, changed),
836
837 TP_STRUCT__entry(
838 LOCAL_ENTRY
839 VIF_ENTRY
840 STA_ENTRY
841 __field(u32, changed)
842 ),
843
844 TP_fast_assign(
845 LOCAL_ASSIGN;
846 VIF_ASSIGN;
847 STA_ASSIGN;
848 __entry->changed = changed;
849 ),
850
851 TP_printk(
852 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " changed: 0x%x",
853 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->changed
854 )
855 );
856
857 DECLARE_EVENT_CLASS(sta_event,
858 TP_PROTO(struct ieee80211_local *local,
859 struct ieee80211_sub_if_data *sdata,
860 struct ieee80211_sta *sta),
861
862 TP_ARGS(local, sdata, sta),
863
864 TP_STRUCT__entry(
865 LOCAL_ENTRY
866 VIF_ENTRY
867 STA_ENTRY
868 ),
869
870 TP_fast_assign(
871 LOCAL_ASSIGN;
872 VIF_ASSIGN;
873 STA_ASSIGN;
874 ),
875
876 TP_printk(
877 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT,
878 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
879 )
880 );
881
882 DEFINE_EVENT(sta_event, drv_sta_statistics,
883 TP_PROTO(struct ieee80211_local *local,
884 struct ieee80211_sub_if_data *sdata,
885 struct ieee80211_sta *sta),
886 TP_ARGS(local, sdata, sta)
887 );
888
889 DEFINE_EVENT(sta_event, drv_sta_add,
890 TP_PROTO(struct ieee80211_local *local,
891 struct ieee80211_sub_if_data *sdata,
892 struct ieee80211_sta *sta),
893 TP_ARGS(local, sdata, sta)
894 );
895
896 DEFINE_EVENT(sta_event, drv_sta_remove,
897 TP_PROTO(struct ieee80211_local *local,
898 struct ieee80211_sub_if_data *sdata,
899 struct ieee80211_sta *sta),
900 TP_ARGS(local, sdata, sta)
901 );
902
903 DEFINE_EVENT(sta_event, drv_sta_pre_rcu_remove,
904 TP_PROTO(struct ieee80211_local *local,
905 struct ieee80211_sub_if_data *sdata,
906 struct ieee80211_sta *sta),
907 TP_ARGS(local, sdata, sta)
908 );
909
910 DEFINE_EVENT(sta_event, drv_sync_rx_queues,
911 TP_PROTO(struct ieee80211_local *local,
912 struct ieee80211_sub_if_data *sdata,
913 struct ieee80211_sta *sta),
914 TP_ARGS(local, sdata, sta)
915 );
916
917 DEFINE_EVENT(sta_event, drv_sta_rate_tbl_update,
918 TP_PROTO(struct ieee80211_local *local,
919 struct ieee80211_sub_if_data *sdata,
920 struct ieee80211_sta *sta),
921 TP_ARGS(local, sdata, sta)
922 );
923
924 TRACE_EVENT(drv_conf_tx,
925 TP_PROTO(struct ieee80211_local *local,
926 struct ieee80211_sub_if_data *sdata,
927 u16 ac, const struct ieee80211_tx_queue_params *params),
928
929 TP_ARGS(local, sdata, ac, params),
930
931 TP_STRUCT__entry(
932 LOCAL_ENTRY
933 VIF_ENTRY
934 __field(u16, ac)
935 __field(u16, txop)
936 __field(u16, cw_min)
937 __field(u16, cw_max)
938 __field(u8, aifs)
939 __field(bool, uapsd)
940 ),
941
942 TP_fast_assign(
943 LOCAL_ASSIGN;
944 VIF_ASSIGN;
945 __entry->ac = ac;
946 __entry->txop = params->txop;
947 __entry->cw_max = params->cw_max;
948 __entry->cw_min = params->cw_min;
949 __entry->aifs = params->aifs;
950 __entry->uapsd = params->uapsd;
951 ),
952
953 TP_printk(
954 LOCAL_PR_FMT VIF_PR_FMT " AC:%d",
955 LOCAL_PR_ARG, VIF_PR_ARG, __entry->ac
956 )
957 );
958
959 DEFINE_EVENT(local_sdata_evt, drv_get_tsf,
960 TP_PROTO(struct ieee80211_local *local,
961 struct ieee80211_sub_if_data *sdata),
962 TP_ARGS(local, sdata)
963 );
964
965 TRACE_EVENT(drv_set_tsf,
966 TP_PROTO(struct ieee80211_local *local,
967 struct ieee80211_sub_if_data *sdata,
968 u64 tsf),
969
970 TP_ARGS(local, sdata, tsf),
971
972 TP_STRUCT__entry(
973 LOCAL_ENTRY
974 VIF_ENTRY
975 __field(u64, tsf)
976 ),
977
978 TP_fast_assign(
979 LOCAL_ASSIGN;
980 VIF_ASSIGN;
981 __entry->tsf = tsf;
982 ),
983
984 TP_printk(
985 LOCAL_PR_FMT VIF_PR_FMT " tsf:%llu",
986 LOCAL_PR_ARG, VIF_PR_ARG, (unsigned long long)__entry->tsf
987 )
988 );
989
990 TRACE_EVENT(drv_offset_tsf,
991 TP_PROTO(struct ieee80211_local *local,
992 struct ieee80211_sub_if_data *sdata,
993 s64 offset),
994
995 TP_ARGS(local, sdata, offset),
996
997 TP_STRUCT__entry(
998 LOCAL_ENTRY
999 VIF_ENTRY
1000 __field(s64, tsf_offset)
1001 ),
1002
1003 TP_fast_assign(
1004 LOCAL_ASSIGN;
1005 VIF_ASSIGN;
1006 __entry->tsf_offset = offset;
1007 ),
1008
1009 TP_printk(
1010 LOCAL_PR_FMT VIF_PR_FMT " tsf offset:%lld",
1011 LOCAL_PR_ARG, VIF_PR_ARG,
1012 (unsigned long long)__entry->tsf_offset
1013 )
1014 );
1015
1016 DEFINE_EVENT(local_sdata_evt, drv_reset_tsf,
1017 TP_PROTO(struct ieee80211_local *local,
1018 struct ieee80211_sub_if_data *sdata),
1019 TP_ARGS(local, sdata)
1020 );
1021
1022 DEFINE_EVENT(local_only_evt, drv_tx_last_beacon,
1023 TP_PROTO(struct ieee80211_local *local),
1024 TP_ARGS(local)
1025 );
1026
1027 TRACE_EVENT(drv_ampdu_action,
1028 TP_PROTO(struct ieee80211_local *local,
1029 struct ieee80211_sub_if_data *sdata,
1030 struct ieee80211_ampdu_params *params),
1031
1032 TP_ARGS(local, sdata, params),
1033
1034 TP_STRUCT__entry(
1035 LOCAL_ENTRY
1036 VIF_ENTRY
1037 AMPDU_ACTION_ENTRY
1038 ),
1039
1040 TP_fast_assign(
1041 LOCAL_ASSIGN;
1042 VIF_ASSIGN;
1043 AMPDU_ACTION_ASSIGN;
1044 ),
1045
1046 TP_printk(
1047 LOCAL_PR_FMT VIF_PR_FMT AMPDU_ACTION_PR_FMT,
1048 LOCAL_PR_ARG, VIF_PR_ARG, AMPDU_ACTION_PR_ARG
1049 )
1050 );
1051
1052 TRACE_EVENT(drv_get_survey,
1053 TP_PROTO(struct ieee80211_local *local, int idx,
1054 struct survey_info *survey),
1055
1056 TP_ARGS(local, idx, survey),
1057
1058 TP_STRUCT__entry(
1059 LOCAL_ENTRY
1060 __field(int, idx)
1061 ),
1062
1063 TP_fast_assign(
1064 LOCAL_ASSIGN;
1065 __entry->idx = idx;
1066 ),
1067
1068 TP_printk(
1069 LOCAL_PR_FMT " idx:%d",
1070 LOCAL_PR_ARG, __entry->idx
1071 )
1072 );
1073
1074 TRACE_EVENT(drv_flush,
1075 TP_PROTO(struct ieee80211_local *local,
1076 u32 queues, bool drop),
1077
1078 TP_ARGS(local, queues, drop),
1079
1080 TP_STRUCT__entry(
1081 LOCAL_ENTRY
1082 __field(bool, drop)
1083 __field(u32, queues)
1084 ),
1085
1086 TP_fast_assign(
1087 LOCAL_ASSIGN;
1088 __entry->drop = drop;
1089 __entry->queues = queues;
1090 ),
1091
1092 TP_printk(
1093 LOCAL_PR_FMT " queues:0x%x drop:%d",
1094 LOCAL_PR_ARG, __entry->queues, __entry->drop
1095 )
1096 );
1097
1098 TRACE_EVENT(drv_channel_switch,
1099 TP_PROTO(struct ieee80211_local *local,
1100 struct ieee80211_sub_if_data *sdata,
1101 struct ieee80211_channel_switch *ch_switch),
1102
1103 TP_ARGS(local, sdata, ch_switch),
1104
1105 TP_STRUCT__entry(
1106 LOCAL_ENTRY
1107 VIF_ENTRY
1108 CHANDEF_ENTRY
1109 __field(u64, timestamp)
1110 __field(u32, device_timestamp)
1111 __field(bool, block_tx)
1112 __field(u8, count)
1113 ),
1114
1115 TP_fast_assign(
1116 LOCAL_ASSIGN;
1117 VIF_ASSIGN;
1118 CHANDEF_ASSIGN(&ch_switch->chandef)
1119 __entry->timestamp = ch_switch->timestamp;
1120 __entry->device_timestamp = ch_switch->device_timestamp;
1121 __entry->block_tx = ch_switch->block_tx;
1122 __entry->count = ch_switch->count;
1123 ),
1124
1125 TP_printk(
1126 LOCAL_PR_FMT VIF_PR_FMT " new " CHANDEF_PR_FMT " count:%d",
1127 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count
1128 )
1129 );
1130
1131 TRACE_EVENT(drv_set_antenna,
1132 TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
1133
1134 TP_ARGS(local, tx_ant, rx_ant, ret),
1135
1136 TP_STRUCT__entry(
1137 LOCAL_ENTRY
1138 __field(u32, tx_ant)
1139 __field(u32, rx_ant)
1140 __field(int, ret)
1141 ),
1142
1143 TP_fast_assign(
1144 LOCAL_ASSIGN;
1145 __entry->tx_ant = tx_ant;
1146 __entry->rx_ant = rx_ant;
1147 __entry->ret = ret;
1148 ),
1149
1150 TP_printk(
1151 LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
1152 LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
1153 )
1154 );
1155
1156 TRACE_EVENT(drv_get_antenna,
1157 TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
1158
1159 TP_ARGS(local, tx_ant, rx_ant, ret),
1160
1161 TP_STRUCT__entry(
1162 LOCAL_ENTRY
1163 __field(u32, tx_ant)
1164 __field(u32, rx_ant)
1165 __field(int, ret)
1166 ),
1167
1168 TP_fast_assign(
1169 LOCAL_ASSIGN;
1170 __entry->tx_ant = tx_ant;
1171 __entry->rx_ant = rx_ant;
1172 __entry->ret = ret;
1173 ),
1174
1175 TP_printk(
1176 LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
1177 LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
1178 )
1179 );
1180
1181 TRACE_EVENT(drv_remain_on_channel,
1182 TP_PROTO(struct ieee80211_local *local,
1183 struct ieee80211_sub_if_data *sdata,
1184 struct ieee80211_channel *chan,
1185 unsigned int duration,
1186 enum ieee80211_roc_type type),
1187
1188 TP_ARGS(local, sdata, chan, duration, type),
1189
1190 TP_STRUCT__entry(
1191 LOCAL_ENTRY
1192 VIF_ENTRY
1193 __field(int, center_freq)
1194 __field(unsigned int, duration)
1195 __field(u32, type)
1196 ),
1197
1198 TP_fast_assign(
1199 LOCAL_ASSIGN;
1200 VIF_ASSIGN;
1201 __entry->center_freq = chan->center_freq;
1202 __entry->duration = duration;
1203 __entry->type = type;
1204 ),
1205
1206 TP_printk(
1207 LOCAL_PR_FMT VIF_PR_FMT " freq:%dMHz duration:%dms type=%d",
1208 LOCAL_PR_ARG, VIF_PR_ARG,
1209 __entry->center_freq, __entry->duration, __entry->type
1210 )
1211 );
1212
1213 DEFINE_EVENT(local_only_evt, drv_cancel_remain_on_channel,
1214 TP_PROTO(struct ieee80211_local *local),
1215 TP_ARGS(local)
1216 );
1217
1218 TRACE_EVENT(drv_set_ringparam,
1219 TP_PROTO(struct ieee80211_local *local, u32 tx, u32 rx),
1220
1221 TP_ARGS(local, tx, rx),
1222
1223 TP_STRUCT__entry(
1224 LOCAL_ENTRY
1225 __field(u32, tx)
1226 __field(u32, rx)
1227 ),
1228
1229 TP_fast_assign(
1230 LOCAL_ASSIGN;
1231 __entry->tx = tx;
1232 __entry->rx = rx;
1233 ),
1234
1235 TP_printk(
1236 LOCAL_PR_FMT " tx:%d rx %d",
1237 LOCAL_PR_ARG, __entry->tx, __entry->rx
1238 )
1239 );
1240
1241 TRACE_EVENT(drv_get_ringparam,
1242 TP_PROTO(struct ieee80211_local *local, u32 *tx, u32 *tx_max,
1243 u32 *rx, u32 *rx_max),
1244
1245 TP_ARGS(local, tx, tx_max, rx, rx_max),
1246
1247 TP_STRUCT__entry(
1248 LOCAL_ENTRY
1249 __field(u32, tx)
1250 __field(u32, tx_max)
1251 __field(u32, rx)
1252 __field(u32, rx_max)
1253 ),
1254
1255 TP_fast_assign(
1256 LOCAL_ASSIGN;
1257 __entry->tx = *tx;
1258 __entry->tx_max = *tx_max;
1259 __entry->rx = *rx;
1260 __entry->rx_max = *rx_max;
1261 ),
1262
1263 TP_printk(
1264 LOCAL_PR_FMT " tx:%d tx_max %d rx %d rx_max %d",
1265 LOCAL_PR_ARG,
1266 __entry->tx, __entry->tx_max, __entry->rx, __entry->rx_max
1267 )
1268 );
1269
1270 DEFINE_EVENT(local_only_evt, drv_tx_frames_pending,
1271 TP_PROTO(struct ieee80211_local *local),
1272 TP_ARGS(local)
1273 );
1274
1275 DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait,
1276 TP_PROTO(struct ieee80211_local *local),
1277 TP_ARGS(local)
1278 );
1279
1280 TRACE_EVENT(drv_set_bitrate_mask,
1281 TP_PROTO(struct ieee80211_local *local,
1282 struct ieee80211_sub_if_data *sdata,
1283 const struct cfg80211_bitrate_mask *mask),
1284
1285 TP_ARGS(local, sdata, mask),
1286
1287 TP_STRUCT__entry(
1288 LOCAL_ENTRY
1289 VIF_ENTRY
1290 __field(u32, legacy_2g)
1291 __field(u32, legacy_5g)
1292 ),
1293
1294 TP_fast_assign(
1295 LOCAL_ASSIGN;
1296 VIF_ASSIGN;
1297 __entry->legacy_2g = mask->control[NL80211_BAND_2GHZ].legacy;
1298 __entry->legacy_5g = mask->control[NL80211_BAND_5GHZ].legacy;
1299 ),
1300
1301 TP_printk(
1302 LOCAL_PR_FMT VIF_PR_FMT " 2G Mask:0x%x 5G Mask:0x%x",
1303 LOCAL_PR_ARG, VIF_PR_ARG, __entry->legacy_2g, __entry->legacy_5g
1304 )
1305 );
1306
1307 TRACE_EVENT(drv_set_rekey_data,
1308 TP_PROTO(struct ieee80211_local *local,
1309 struct ieee80211_sub_if_data *sdata,
1310 struct cfg80211_gtk_rekey_data *data),
1311
1312 TP_ARGS(local, sdata, data),
1313
1314 TP_STRUCT__entry(
1315 LOCAL_ENTRY
1316 VIF_ENTRY
1317 __array(u8, kek, NL80211_KEK_LEN)
1318 __array(u8, kck, NL80211_KCK_LEN)
1319 __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
1320 ),
1321
1322 TP_fast_assign(
1323 LOCAL_ASSIGN;
1324 VIF_ASSIGN;
1325 memcpy(__entry->kek, data->kek, NL80211_KEK_LEN);
1326 memcpy(__entry->kck, data->kck, NL80211_KCK_LEN);
1327 memcpy(__entry->replay_ctr, data->replay_ctr,
1328 NL80211_REPLAY_CTR_LEN);
1329 ),
1330
1331 TP_printk(LOCAL_PR_FMT VIF_PR_FMT,
1332 LOCAL_PR_ARG, VIF_PR_ARG)
1333 );
1334
1335 TRACE_EVENT(drv_event_callback,
1336 TP_PROTO(struct ieee80211_local *local,
1337 struct ieee80211_sub_if_data *sdata,
1338 const struct ieee80211_event *_event),
1339
1340 TP_ARGS(local, sdata, _event),
1341
1342 TP_STRUCT__entry(
1343 LOCAL_ENTRY
1344 VIF_ENTRY
1345 __field(u32, type)
1346 ),
1347
1348 TP_fast_assign(
1349 LOCAL_ASSIGN;
1350 VIF_ASSIGN;
1351 __entry->type = _event->type;
1352 ),
1353
1354 TP_printk(
1355 LOCAL_PR_FMT VIF_PR_FMT " event:%d",
1356 LOCAL_PR_ARG, VIF_PR_ARG, __entry->type
1357 )
1358 );
1359
1360 DECLARE_EVENT_CLASS(release_evt,
1361 TP_PROTO(struct ieee80211_local *local,
1362 struct ieee80211_sta *sta,
1363 u16 tids, int num_frames,
1364 enum ieee80211_frame_release_type reason,
1365 bool more_data),
1366
1367 TP_ARGS(local, sta, tids, num_frames, reason, more_data),
1368
1369 TP_STRUCT__entry(
1370 LOCAL_ENTRY
1371 STA_ENTRY
1372 __field(u16, tids)
1373 __field(int, num_frames)
1374 __field(int, reason)
1375 __field(bool, more_data)
1376 ),
1377
1378 TP_fast_assign(
1379 LOCAL_ASSIGN;
1380 STA_ASSIGN;
1381 __entry->tids = tids;
1382 __entry->num_frames = num_frames;
1383 __entry->reason = reason;
1384 __entry->more_data = more_data;
1385 ),
1386
1387 TP_printk(
1388 LOCAL_PR_FMT STA_PR_FMT
1389 " TIDs:0x%.4x frames:%d reason:%d more:%d",
1390 LOCAL_PR_ARG, STA_PR_ARG, __entry->tids, __entry->num_frames,
1391 __entry->reason, __entry->more_data
1392 )
1393 );
1394
1395 DEFINE_EVENT(release_evt, drv_release_buffered_frames,
1396 TP_PROTO(struct ieee80211_local *local,
1397 struct ieee80211_sta *sta,
1398 u16 tids, int num_frames,
1399 enum ieee80211_frame_release_type reason,
1400 bool more_data),
1401
1402 TP_ARGS(local, sta, tids, num_frames, reason, more_data)
1403 );
1404
1405 DEFINE_EVENT(release_evt, drv_allow_buffered_frames,
1406 TP_PROTO(struct ieee80211_local *local,
1407 struct ieee80211_sta *sta,
1408 u16 tids, int num_frames,
1409 enum ieee80211_frame_release_type reason,
1410 bool more_data),
1411
1412 TP_ARGS(local, sta, tids, num_frames, reason, more_data)
1413 );
1414
1415 DEFINE_EVENT(local_sdata_evt, drv_mgd_prepare_tx,
1416 TP_PROTO(struct ieee80211_local *local,
1417 struct ieee80211_sub_if_data *sdata),
1418
1419 TP_ARGS(local, sdata)
1420 );
1421
1422 DEFINE_EVENT(local_sdata_evt, drv_mgd_protect_tdls_discover,
1423 TP_PROTO(struct ieee80211_local *local,
1424 struct ieee80211_sub_if_data *sdata),
1425
1426 TP_ARGS(local, sdata)
1427 );
1428
1429 DECLARE_EVENT_CLASS(local_chanctx,
1430 TP_PROTO(struct ieee80211_local *local,
1431 struct ieee80211_chanctx *ctx),
1432
1433 TP_ARGS(local, ctx),
1434
1435 TP_STRUCT__entry(
1436 LOCAL_ENTRY
1437 CHANCTX_ENTRY
1438 ),
1439
1440 TP_fast_assign(
1441 LOCAL_ASSIGN;
1442 CHANCTX_ASSIGN;
1443 ),
1444
1445 TP_printk(
1446 LOCAL_PR_FMT CHANCTX_PR_FMT,
1447 LOCAL_PR_ARG, CHANCTX_PR_ARG
1448 )
1449 );
1450
1451 DEFINE_EVENT(local_chanctx, drv_add_chanctx,
1452 TP_PROTO(struct ieee80211_local *local,
1453 struct ieee80211_chanctx *ctx),
1454 TP_ARGS(local, ctx)
1455 );
1456
1457 DEFINE_EVENT(local_chanctx, drv_remove_chanctx,
1458 TP_PROTO(struct ieee80211_local *local,
1459 struct ieee80211_chanctx *ctx),
1460 TP_ARGS(local, ctx)
1461 );
1462
1463 TRACE_EVENT(drv_change_chanctx,
1464 TP_PROTO(struct ieee80211_local *local,
1465 struct ieee80211_chanctx *ctx,
1466 u32 changed),
1467
1468 TP_ARGS(local, ctx, changed),
1469
1470 TP_STRUCT__entry(
1471 LOCAL_ENTRY
1472 CHANCTX_ENTRY
1473 __field(u32, changed)
1474 ),
1475
1476 TP_fast_assign(
1477 LOCAL_ASSIGN;
1478 CHANCTX_ASSIGN;
1479 __entry->changed = changed;
1480 ),
1481
1482 TP_printk(
1483 LOCAL_PR_FMT CHANCTX_PR_FMT " changed:%#x",
1484 LOCAL_PR_ARG, CHANCTX_PR_ARG, __entry->changed
1485 )
1486 );
1487
1488 #if !defined(__TRACE_VIF_ENTRY)
1489 #define __TRACE_VIF_ENTRY
1490 struct trace_vif_entry {
1491 enum nl80211_iftype vif_type;
1492 bool p2p;
1493 char vif_name[IFNAMSIZ];
1494 } __packed;
1495
1496 struct trace_chandef_entry {
1497 u32 control_freq;
1498 u32 chan_width;
1499 u32 center_freq1;
1500 u32 center_freq2;
1501 } __packed;
1502
1503 struct trace_switch_entry {
1504 struct trace_vif_entry vif;
1505 struct trace_chandef_entry old_chandef;
1506 struct trace_chandef_entry new_chandef;
1507 } __packed;
1508
1509 #define SWITCH_ENTRY_ASSIGN(to, from) local_vifs[i].to = vifs[i].from
1510 #endif
1511
1512 TRACE_EVENT(drv_switch_vif_chanctx,
1513 TP_PROTO(struct ieee80211_local *local,
1514 struct ieee80211_vif_chanctx_switch *vifs,
1515 int n_vifs, enum ieee80211_chanctx_switch_mode mode),
1516 TP_ARGS(local, vifs, n_vifs, mode),
1517
1518 TP_STRUCT__entry(
1519 LOCAL_ENTRY
1520 __field(int, n_vifs)
1521 __field(u32, mode)
1522 __dynamic_array(u8, vifs,
1523 sizeof(struct trace_switch_entry) * n_vifs)
1524 ),
1525
1526 TP_fast_assign(
1527 LOCAL_ASSIGN;
1528 __entry->n_vifs = n_vifs;
1529 __entry->mode = mode;
1530 {
1531 struct trace_switch_entry *local_vifs =
1532 __get_dynamic_array(vifs);
1533 int i;
1534
1535 for (i = 0; i < n_vifs; i++) {
1536 struct ieee80211_sub_if_data *sdata;
1537
1538 sdata = container_of(vifs[i].vif,
1539 struct ieee80211_sub_if_data,
1540 vif);
1541
1542 SWITCH_ENTRY_ASSIGN(vif.vif_type, vif->type);
1543 SWITCH_ENTRY_ASSIGN(vif.p2p, vif->p2p);
1544 strncpy(local_vifs[i].vif.vif_name,
1545 sdata->name,
1546 sizeof(local_vifs[i].vif.vif_name));
1547 SWITCH_ENTRY_ASSIGN(old_chandef.control_freq,
1548 old_ctx->def.chan->center_freq);
1549 SWITCH_ENTRY_ASSIGN(old_chandef.chan_width,
1550 old_ctx->def.width);
1551 SWITCH_ENTRY_ASSIGN(old_chandef.center_freq1,
1552 old_ctx->def.center_freq1);
1553 SWITCH_ENTRY_ASSIGN(old_chandef.center_freq2,
1554 old_ctx->def.center_freq2);
1555 SWITCH_ENTRY_ASSIGN(new_chandef.control_freq,
1556 new_ctx->def.chan->center_freq);
1557 SWITCH_ENTRY_ASSIGN(new_chandef.chan_width,
1558 new_ctx->def.width);
1559 SWITCH_ENTRY_ASSIGN(new_chandef.center_freq1,
1560 new_ctx->def.center_freq1);
1561 SWITCH_ENTRY_ASSIGN(new_chandef.center_freq2,
1562 new_ctx->def.center_freq2);
1563 }
1564 }
1565 ),
1566
1567 TP_printk(
1568 LOCAL_PR_FMT " n_vifs:%d mode:%d",
1569 LOCAL_PR_ARG, __entry->n_vifs, __entry->mode
1570 )
1571 );
1572
1573 DECLARE_EVENT_CLASS(local_sdata_chanctx,
1574 TP_PROTO(struct ieee80211_local *local,
1575 struct ieee80211_sub_if_data *sdata,
1576 struct ieee80211_chanctx *ctx),
1577
1578 TP_ARGS(local, sdata, ctx),
1579
1580 TP_STRUCT__entry(
1581 LOCAL_ENTRY
1582 VIF_ENTRY
1583 CHANCTX_ENTRY
1584 ),
1585
1586 TP_fast_assign(
1587 LOCAL_ASSIGN;
1588 VIF_ASSIGN;
1589 CHANCTX_ASSIGN;
1590 ),
1591
1592 TP_printk(
1593 LOCAL_PR_FMT VIF_PR_FMT CHANCTX_PR_FMT,
1594 LOCAL_PR_ARG, VIF_PR_ARG, CHANCTX_PR_ARG
1595 )
1596 );
1597
1598 DEFINE_EVENT(local_sdata_chanctx, drv_assign_vif_chanctx,
1599 TP_PROTO(struct ieee80211_local *local,
1600 struct ieee80211_sub_if_data *sdata,
1601 struct ieee80211_chanctx *ctx),
1602 TP_ARGS(local, sdata, ctx)
1603 );
1604
1605 DEFINE_EVENT(local_sdata_chanctx, drv_unassign_vif_chanctx,
1606 TP_PROTO(struct ieee80211_local *local,
1607 struct ieee80211_sub_if_data *sdata,
1608 struct ieee80211_chanctx *ctx),
1609 TP_ARGS(local, sdata, ctx)
1610 );
1611
1612 TRACE_EVENT(drv_start_ap,
1613 TP_PROTO(struct ieee80211_local *local,
1614 struct ieee80211_sub_if_data *sdata,
1615 struct ieee80211_bss_conf *info),
1616
1617 TP_ARGS(local, sdata, info),
1618
1619 TP_STRUCT__entry(
1620 LOCAL_ENTRY
1621 VIF_ENTRY
1622 __field(u8, dtimper)
1623 __field(u16, bcnint)
1624 __dynamic_array(u8, ssid, info->ssid_len);
1625 __field(bool, hidden_ssid);
1626 ),
1627
1628 TP_fast_assign(
1629 LOCAL_ASSIGN;
1630 VIF_ASSIGN;
1631 __entry->dtimper = info->dtim_period;
1632 __entry->bcnint = info->beacon_int;
1633 memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len);
1634 __entry->hidden_ssid = info->hidden_ssid;
1635 ),
1636
1637 TP_printk(
1638 LOCAL_PR_FMT VIF_PR_FMT,
1639 LOCAL_PR_ARG, VIF_PR_ARG
1640 )
1641 );
1642
1643 DEFINE_EVENT(local_sdata_evt, drv_stop_ap,
1644 TP_PROTO(struct ieee80211_local *local,
1645 struct ieee80211_sub_if_data *sdata),
1646 TP_ARGS(local, sdata)
1647 );
1648
1649 TRACE_EVENT(drv_reconfig_complete,
1650 TP_PROTO(struct ieee80211_local *local,
1651 enum ieee80211_reconfig_type reconfig_type),
1652 TP_ARGS(local, reconfig_type),
1653
1654 TP_STRUCT__entry(
1655 LOCAL_ENTRY
1656 __field(u8, reconfig_type)
1657 ),
1658
1659 TP_fast_assign(
1660 LOCAL_ASSIGN;
1661 __entry->reconfig_type = reconfig_type;
1662 ),
1663
1664 TP_printk(
1665 LOCAL_PR_FMT " reconfig_type:%d",
1666 LOCAL_PR_ARG, __entry->reconfig_type
1667 )
1668
1669 );
1670
1671 #if IS_ENABLED(CONFIG_IPV6)
1672 DEFINE_EVENT(local_sdata_evt, drv_ipv6_addr_change,
1673 TP_PROTO(struct ieee80211_local *local,
1674 struct ieee80211_sub_if_data *sdata),
1675 TP_ARGS(local, sdata)
1676 );
1677 #endif
1678
1679 TRACE_EVENT(drv_join_ibss,
1680 TP_PROTO(struct ieee80211_local *local,
1681 struct ieee80211_sub_if_data *sdata,
1682 struct ieee80211_bss_conf *info),
1683
1684 TP_ARGS(local, sdata, info),
1685
1686 TP_STRUCT__entry(
1687 LOCAL_ENTRY
1688 VIF_ENTRY
1689 __field(u8, dtimper)
1690 __field(u16, bcnint)
1691 __dynamic_array(u8, ssid, info->ssid_len);
1692 ),
1693
1694 TP_fast_assign(
1695 LOCAL_ASSIGN;
1696 VIF_ASSIGN;
1697 __entry->dtimper = info->dtim_period;
1698 __entry->bcnint = info->beacon_int;
1699 memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len);
1700 ),
1701
1702 TP_printk(
1703 LOCAL_PR_FMT VIF_PR_FMT,
1704 LOCAL_PR_ARG, VIF_PR_ARG
1705 )
1706 );
1707
1708 DEFINE_EVENT(local_sdata_evt, drv_leave_ibss,
1709 TP_PROTO(struct ieee80211_local *local,
1710 struct ieee80211_sub_if_data *sdata),
1711 TP_ARGS(local, sdata)
1712 );
1713
1714 TRACE_EVENT(drv_get_expected_throughput,
1715 TP_PROTO(struct ieee80211_sta *sta),
1716
1717 TP_ARGS(sta),
1718
1719 TP_STRUCT__entry(
1720 STA_ENTRY
1721 ),
1722
1723 TP_fast_assign(
1724 STA_ASSIGN;
1725 ),
1726
1727 TP_printk(
1728 STA_PR_FMT, STA_PR_ARG
1729 )
1730 );
1731
1732 TRACE_EVENT(drv_start_nan,
1733 TP_PROTO(struct ieee80211_local *local,
1734 struct ieee80211_sub_if_data *sdata,
1735 struct cfg80211_nan_conf *conf),
1736
1737 TP_ARGS(local, sdata, conf),
1738 TP_STRUCT__entry(
1739 LOCAL_ENTRY
1740 VIF_ENTRY
1741 __field(u8, master_pref)
1742 __field(u8, bands)
1743 ),
1744
1745 TP_fast_assign(
1746 LOCAL_ASSIGN;
1747 VIF_ASSIGN;
1748 __entry->master_pref = conf->master_pref;
1749 __entry->bands = conf->bands;
1750 ),
1751
1752 TP_printk(
1753 LOCAL_PR_FMT VIF_PR_FMT
1754 ", master preference: %u, bands: 0x%0x",
1755 LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref,
1756 __entry->bands
1757 )
1758 );
1759
1760 TRACE_EVENT(drv_stop_nan,
1761 TP_PROTO(struct ieee80211_local *local,
1762 struct ieee80211_sub_if_data *sdata),
1763
1764 TP_ARGS(local, sdata),
1765
1766 TP_STRUCT__entry(
1767 LOCAL_ENTRY
1768 VIF_ENTRY
1769 ),
1770
1771 TP_fast_assign(
1772 LOCAL_ASSIGN;
1773 VIF_ASSIGN;
1774 ),
1775
1776 TP_printk(
1777 LOCAL_PR_FMT VIF_PR_FMT,
1778 LOCAL_PR_ARG, VIF_PR_ARG
1779 )
1780 );
1781
1782 TRACE_EVENT(drv_nan_change_conf,
1783 TP_PROTO(struct ieee80211_local *local,
1784 struct ieee80211_sub_if_data *sdata,
1785 struct cfg80211_nan_conf *conf,
1786 u32 changes),
1787
1788 TP_ARGS(local, sdata, conf, changes),
1789 TP_STRUCT__entry(
1790 LOCAL_ENTRY
1791 VIF_ENTRY
1792 __field(u8, master_pref)
1793 __field(u8, bands)
1794 __field(u32, changes)
1795 ),
1796
1797 TP_fast_assign(
1798 LOCAL_ASSIGN;
1799 VIF_ASSIGN;
1800 __entry->master_pref = conf->master_pref;
1801 __entry->bands = conf->bands;
1802 __entry->changes = changes;
1803 ),
1804
1805 TP_printk(
1806 LOCAL_PR_FMT VIF_PR_FMT
1807 ", master preference: %u, bands: 0x%0x, changes: 0x%x",
1808 LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref,
1809 __entry->bands, __entry->changes
1810 )
1811 );
1812
1813 TRACE_EVENT(drv_add_nan_func,
1814 TP_PROTO(struct ieee80211_local *local,
1815 struct ieee80211_sub_if_data *sdata,
1816 const struct cfg80211_nan_func *func),
1817
1818 TP_ARGS(local, sdata, func),
1819 TP_STRUCT__entry(
1820 LOCAL_ENTRY
1821 VIF_ENTRY
1822 __field(u8, type)
1823 __field(u8, inst_id)
1824 ),
1825
1826 TP_fast_assign(
1827 LOCAL_ASSIGN;
1828 VIF_ASSIGN;
1829 __entry->type = func->type;
1830 __entry->inst_id = func->instance_id;
1831 ),
1832
1833 TP_printk(
1834 LOCAL_PR_FMT VIF_PR_FMT
1835 ", type: %u, inst_id: %u",
1836 LOCAL_PR_ARG, VIF_PR_ARG, __entry->type, __entry->inst_id
1837 )
1838 );
1839
1840 TRACE_EVENT(drv_del_nan_func,
1841 TP_PROTO(struct ieee80211_local *local,
1842 struct ieee80211_sub_if_data *sdata,
1843 u8 instance_id),
1844
1845 TP_ARGS(local, sdata, instance_id),
1846 TP_STRUCT__entry(
1847 LOCAL_ENTRY
1848 VIF_ENTRY
1849 __field(u8, instance_id)
1850 ),
1851
1852 TP_fast_assign(
1853 LOCAL_ASSIGN;
1854 VIF_ASSIGN;
1855 __entry->instance_id = instance_id;
1856 ),
1857
1858 TP_printk(
1859 LOCAL_PR_FMT VIF_PR_FMT
1860 ", instance_id: %u",
1861 LOCAL_PR_ARG, VIF_PR_ARG, __entry->instance_id
1862 )
1863 );
1864
1865 /*
1866 * Tracing for API calls that drivers call.
1867 */
1868
1869 TRACE_EVENT(api_start_tx_ba_session,
1870 TP_PROTO(struct ieee80211_sta *sta, u16 tid),
1871
1872 TP_ARGS(sta, tid),
1873
1874 TP_STRUCT__entry(
1875 STA_ENTRY
1876 __field(u16, tid)
1877 ),
1878
1879 TP_fast_assign(
1880 STA_ASSIGN;
1881 __entry->tid = tid;
1882 ),
1883
1884 TP_printk(
1885 STA_PR_FMT " tid:%d",
1886 STA_PR_ARG, __entry->tid
1887 )
1888 );
1889
1890 TRACE_EVENT(api_start_tx_ba_cb,
1891 TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
1892
1893 TP_ARGS(sdata, ra, tid),
1894
1895 TP_STRUCT__entry(
1896 VIF_ENTRY
1897 __array(u8, ra, ETH_ALEN)
1898 __field(u16, tid)
1899 ),
1900
1901 TP_fast_assign(
1902 VIF_ASSIGN;
1903 memcpy(__entry->ra, ra, ETH_ALEN);
1904 __entry->tid = tid;
1905 ),
1906
1907 TP_printk(
1908 VIF_PR_FMT " ra:%pM tid:%d",
1909 VIF_PR_ARG, __entry->ra, __entry->tid
1910 )
1911 );
1912
1913 TRACE_EVENT(api_stop_tx_ba_session,
1914 TP_PROTO(struct ieee80211_sta *sta, u16 tid),
1915
1916 TP_ARGS(sta, tid),
1917
1918 TP_STRUCT__entry(
1919 STA_ENTRY
1920 __field(u16, tid)
1921 ),
1922
1923 TP_fast_assign(
1924 STA_ASSIGN;
1925 __entry->tid = tid;
1926 ),
1927
1928 TP_printk(
1929 STA_PR_FMT " tid:%d",
1930 STA_PR_ARG, __entry->tid
1931 )
1932 );
1933
1934 TRACE_EVENT(api_stop_tx_ba_cb,
1935 TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
1936
1937 TP_ARGS(sdata, ra, tid),
1938
1939 TP_STRUCT__entry(
1940 VIF_ENTRY
1941 __array(u8, ra, ETH_ALEN)
1942 __field(u16, tid)
1943 ),
1944
1945 TP_fast_assign(
1946 VIF_ASSIGN;
1947 memcpy(__entry->ra, ra, ETH_ALEN);
1948 __entry->tid = tid;
1949 ),
1950
1951 TP_printk(
1952 VIF_PR_FMT " ra:%pM tid:%d",
1953 VIF_PR_ARG, __entry->ra, __entry->tid
1954 )
1955 );
1956
1957 DEFINE_EVENT(local_only_evt, api_restart_hw,
1958 TP_PROTO(struct ieee80211_local *local),
1959 TP_ARGS(local)
1960 );
1961
1962 TRACE_EVENT(api_beacon_loss,
1963 TP_PROTO(struct ieee80211_sub_if_data *sdata),
1964
1965 TP_ARGS(sdata),
1966
1967 TP_STRUCT__entry(
1968 VIF_ENTRY
1969 ),
1970
1971 TP_fast_assign(
1972 VIF_ASSIGN;
1973 ),
1974
1975 TP_printk(
1976 VIF_PR_FMT,
1977 VIF_PR_ARG
1978 )
1979 );
1980
1981 TRACE_EVENT(api_connection_loss,
1982 TP_PROTO(struct ieee80211_sub_if_data *sdata),
1983
1984 TP_ARGS(sdata),
1985
1986 TP_STRUCT__entry(
1987 VIF_ENTRY
1988 ),
1989
1990 TP_fast_assign(
1991 VIF_ASSIGN;
1992 ),
1993
1994 TP_printk(
1995 VIF_PR_FMT,
1996 VIF_PR_ARG
1997 )
1998 );
1999
2000 TRACE_EVENT(api_cqm_rssi_notify,
2001 TP_PROTO(struct ieee80211_sub_if_data *sdata,
2002 enum nl80211_cqm_rssi_threshold_event rssi_event,
2003 s32 rssi_level),
2004
2005 TP_ARGS(sdata, rssi_event, rssi_level),
2006
2007 TP_STRUCT__entry(
2008 VIF_ENTRY
2009 __field(u32, rssi_event)
2010 __field(s32, rssi_level)
2011 ),
2012
2013 TP_fast_assign(
2014 VIF_ASSIGN;
2015 __entry->rssi_event = rssi_event;
2016 __entry->rssi_level = rssi_level;
2017 ),
2018
2019 TP_printk(
2020 VIF_PR_FMT " event:%d rssi:%d",
2021 VIF_PR_ARG, __entry->rssi_event, __entry->rssi_level
2022 )
2023 );
2024
2025 DEFINE_EVENT(local_sdata_evt, api_cqm_beacon_loss_notify,
2026 TP_PROTO(struct ieee80211_local *local,
2027 struct ieee80211_sub_if_data *sdata),
2028 TP_ARGS(local, sdata)
2029 );
2030
2031 TRACE_EVENT(api_scan_completed,
2032 TP_PROTO(struct ieee80211_local *local, bool aborted),
2033
2034 TP_ARGS(local, aborted),
2035
2036 TP_STRUCT__entry(
2037 LOCAL_ENTRY
2038 __field(bool, aborted)
2039 ),
2040
2041 TP_fast_assign(
2042 LOCAL_ASSIGN;
2043 __entry->aborted = aborted;
2044 ),
2045
2046 TP_printk(
2047 LOCAL_PR_FMT " aborted:%d",
2048 LOCAL_PR_ARG, __entry->aborted
2049 )
2050 );
2051
2052 TRACE_EVENT(api_sched_scan_results,
2053 TP_PROTO(struct ieee80211_local *local),
2054
2055 TP_ARGS(local),
2056
2057 TP_STRUCT__entry(
2058 LOCAL_ENTRY
2059 ),
2060
2061 TP_fast_assign(
2062 LOCAL_ASSIGN;
2063 ),
2064
2065 TP_printk(
2066 LOCAL_PR_FMT, LOCAL_PR_ARG
2067 )
2068 );
2069
2070 TRACE_EVENT(api_sched_scan_stopped,
2071 TP_PROTO(struct ieee80211_local *local),
2072
2073 TP_ARGS(local),
2074
2075 TP_STRUCT__entry(
2076 LOCAL_ENTRY
2077 ),
2078
2079 TP_fast_assign(
2080 LOCAL_ASSIGN;
2081 ),
2082
2083 TP_printk(
2084 LOCAL_PR_FMT, LOCAL_PR_ARG
2085 )
2086 );
2087
2088 TRACE_EVENT(api_sta_block_awake,
2089 TP_PROTO(struct ieee80211_local *local,
2090 struct ieee80211_sta *sta, bool block),
2091
2092 TP_ARGS(local, sta, block),
2093
2094 TP_STRUCT__entry(
2095 LOCAL_ENTRY
2096 STA_ENTRY
2097 __field(bool, block)
2098 ),
2099
2100 TP_fast_assign(
2101 LOCAL_ASSIGN;
2102 STA_ASSIGN;
2103 __entry->block = block;
2104 ),
2105
2106 TP_printk(
2107 LOCAL_PR_FMT STA_PR_FMT " block:%d",
2108 LOCAL_PR_ARG, STA_PR_ARG, __entry->block
2109 )
2110 );
2111
2112 TRACE_EVENT(api_chswitch_done,
2113 TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success),
2114
2115 TP_ARGS(sdata, success),
2116
2117 TP_STRUCT__entry(
2118 VIF_ENTRY
2119 __field(bool, success)
2120 ),
2121
2122 TP_fast_assign(
2123 VIF_ASSIGN;
2124 __entry->success = success;
2125 ),
2126
2127 TP_printk(
2128 VIF_PR_FMT " success=%d",
2129 VIF_PR_ARG, __entry->success
2130 )
2131 );
2132
2133 DEFINE_EVENT(local_only_evt, api_ready_on_channel,
2134 TP_PROTO(struct ieee80211_local *local),
2135 TP_ARGS(local)
2136 );
2137
2138 DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired,
2139 TP_PROTO(struct ieee80211_local *local),
2140 TP_ARGS(local)
2141 );
2142
2143 TRACE_EVENT(api_gtk_rekey_notify,
2144 TP_PROTO(struct ieee80211_sub_if_data *sdata,
2145 const u8 *bssid, const u8 *replay_ctr),
2146
2147 TP_ARGS(sdata, bssid, replay_ctr),
2148
2149 TP_STRUCT__entry(
2150 VIF_ENTRY
2151 __array(u8, bssid, ETH_ALEN)
2152 __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
2153 ),
2154
2155 TP_fast_assign(
2156 VIF_ASSIGN;
2157 memcpy(__entry->bssid, bssid, ETH_ALEN);
2158 memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN);
2159 ),
2160
2161 TP_printk(VIF_PR_FMT, VIF_PR_ARG)
2162 );
2163
2164 TRACE_EVENT(api_enable_rssi_reports,
2165 TP_PROTO(struct ieee80211_sub_if_data *sdata,
2166 int rssi_min_thold, int rssi_max_thold),
2167
2168 TP_ARGS(sdata, rssi_min_thold, rssi_max_thold),
2169
2170 TP_STRUCT__entry(
2171 VIF_ENTRY
2172 __field(int, rssi_min_thold)
2173 __field(int, rssi_max_thold)
2174 ),
2175
2176 TP_fast_assign(
2177 VIF_ASSIGN;
2178 __entry->rssi_min_thold = rssi_min_thold;
2179 __entry->rssi_max_thold = rssi_max_thold;
2180 ),
2181
2182 TP_printk(
2183 VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d",
2184 VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold
2185 )
2186 );
2187
2188 TRACE_EVENT(api_eosp,
2189 TP_PROTO(struct ieee80211_local *local,
2190 struct ieee80211_sta *sta),
2191
2192 TP_ARGS(local, sta),
2193
2194 TP_STRUCT__entry(
2195 LOCAL_ENTRY
2196 STA_ENTRY
2197 ),
2198
2199 TP_fast_assign(
2200 LOCAL_ASSIGN;
2201 STA_ASSIGN;
2202 ),
2203
2204 TP_printk(
2205 LOCAL_PR_FMT STA_PR_FMT,
2206 LOCAL_PR_ARG, STA_PR_ARG
2207 )
2208 );
2209
2210 TRACE_EVENT(api_send_eosp_nullfunc,
2211 TP_PROTO(struct ieee80211_local *local,
2212 struct ieee80211_sta *sta,
2213 u8 tid),
2214
2215 TP_ARGS(local, sta, tid),
2216
2217 TP_STRUCT__entry(
2218 LOCAL_ENTRY
2219 STA_ENTRY
2220 __field(u8, tid)
2221 ),
2222
2223 TP_fast_assign(
2224 LOCAL_ASSIGN;
2225 STA_ASSIGN;
2226 __entry->tid = tid;
2227 ),
2228
2229 TP_printk(
2230 LOCAL_PR_FMT STA_PR_FMT " tid:%d",
2231 LOCAL_PR_ARG, STA_PR_ARG, __entry->tid
2232 )
2233 );
2234
2235 TRACE_EVENT(api_sta_set_buffered,
2236 TP_PROTO(struct ieee80211_local *local,
2237 struct ieee80211_sta *sta,
2238 u8 tid, bool buffered),
2239
2240 TP_ARGS(local, sta, tid, buffered),
2241
2242 TP_STRUCT__entry(
2243 LOCAL_ENTRY
2244 STA_ENTRY
2245 __field(u8, tid)
2246 __field(bool, buffered)
2247 ),
2248
2249 TP_fast_assign(
2250 LOCAL_ASSIGN;
2251 STA_ASSIGN;
2252 __entry->tid = tid;
2253 __entry->buffered = buffered;
2254 ),
2255
2256 TP_printk(
2257 LOCAL_PR_FMT STA_PR_FMT " tid:%d buffered:%d",
2258 LOCAL_PR_ARG, STA_PR_ARG, __entry->tid, __entry->buffered
2259 )
2260 );
2261
2262 /*
2263 * Tracing for internal functions
2264 * (which may also be called in response to driver calls)
2265 */
2266
2267 TRACE_EVENT(wake_queue,
2268 TP_PROTO(struct ieee80211_local *local, u16 queue,
2269 enum queue_stop_reason reason),
2270
2271 TP_ARGS(local, queue, reason),
2272
2273 TP_STRUCT__entry(
2274 LOCAL_ENTRY
2275 __field(u16, queue)
2276 __field(u32, reason)
2277 ),
2278
2279 TP_fast_assign(
2280 LOCAL_ASSIGN;
2281 __entry->queue = queue;
2282 __entry->reason = reason;
2283 ),
2284
2285 TP_printk(
2286 LOCAL_PR_FMT " queue:%d, reason:%d",
2287 LOCAL_PR_ARG, __entry->queue, __entry->reason
2288 )
2289 );
2290
2291 TRACE_EVENT(stop_queue,
2292 TP_PROTO(struct ieee80211_local *local, u16 queue,
2293 enum queue_stop_reason reason),
2294
2295 TP_ARGS(local, queue, reason),
2296
2297 TP_STRUCT__entry(
2298 LOCAL_ENTRY
2299 __field(u16, queue)
2300 __field(u32, reason)
2301 ),
2302
2303 TP_fast_assign(
2304 LOCAL_ASSIGN;
2305 __entry->queue = queue;
2306 __entry->reason = reason;
2307 ),
2308
2309 TP_printk(
2310 LOCAL_PR_FMT " queue:%d, reason:%d",
2311 LOCAL_PR_ARG, __entry->queue, __entry->reason
2312 )
2313 );
2314
2315 TRACE_EVENT(drv_set_default_unicast_key,
2316 TP_PROTO(struct ieee80211_local *local,
2317 struct ieee80211_sub_if_data *sdata,
2318 int key_idx),
2319
2320 TP_ARGS(local, sdata, key_idx),
2321
2322 TP_STRUCT__entry(
2323 LOCAL_ENTRY
2324 VIF_ENTRY
2325 __field(int, key_idx)
2326 ),
2327
2328 TP_fast_assign(
2329 LOCAL_ASSIGN;
2330 VIF_ASSIGN;
2331 __entry->key_idx = key_idx;
2332 ),
2333
2334 TP_printk(LOCAL_PR_FMT VIF_PR_FMT " key_idx:%d",
2335 LOCAL_PR_ARG, VIF_PR_ARG, __entry->key_idx)
2336 );
2337
2338 TRACE_EVENT(api_radar_detected,
2339 TP_PROTO(struct ieee80211_local *local),
2340
2341 TP_ARGS(local),
2342
2343 TP_STRUCT__entry(
2344 LOCAL_ENTRY
2345 ),
2346
2347 TP_fast_assign(
2348 LOCAL_ASSIGN;
2349 ),
2350
2351 TP_printk(
2352 LOCAL_PR_FMT " radar detected",
2353 LOCAL_PR_ARG
2354 )
2355 );
2356
2357 TRACE_EVENT(drv_channel_switch_beacon,
2358 TP_PROTO(struct ieee80211_local *local,
2359 struct ieee80211_sub_if_data *sdata,
2360 struct cfg80211_chan_def *chandef),
2361
2362 TP_ARGS(local, sdata, chandef),
2363
2364 TP_STRUCT__entry(
2365 LOCAL_ENTRY
2366 VIF_ENTRY
2367 CHANDEF_ENTRY
2368 ),
2369
2370 TP_fast_assign(
2371 LOCAL_ASSIGN;
2372 VIF_ASSIGN;
2373 CHANDEF_ASSIGN(chandef);
2374 ),
2375
2376 TP_printk(
2377 LOCAL_PR_FMT VIF_PR_FMT " channel switch to " CHANDEF_PR_FMT,
2378 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG
2379 )
2380 );
2381
2382 TRACE_EVENT(drv_pre_channel_switch,
2383 TP_PROTO(struct ieee80211_local *local,
2384 struct ieee80211_sub_if_data *sdata,
2385 struct ieee80211_channel_switch *ch_switch),
2386
2387 TP_ARGS(local, sdata, ch_switch),
2388
2389 TP_STRUCT__entry(
2390 LOCAL_ENTRY
2391 VIF_ENTRY
2392 CHANDEF_ENTRY
2393 __field(u64, timestamp)
2394 __field(u32, device_timestamp)
2395 __field(bool, block_tx)
2396 __field(u8, count)
2397 ),
2398
2399 TP_fast_assign(
2400 LOCAL_ASSIGN;
2401 VIF_ASSIGN;
2402 CHANDEF_ASSIGN(&ch_switch->chandef)
2403 __entry->timestamp = ch_switch->timestamp;
2404 __entry->device_timestamp = ch_switch->device_timestamp;
2405 __entry->block_tx = ch_switch->block_tx;
2406 __entry->count = ch_switch->count;
2407 ),
2408
2409 TP_printk(
2410 LOCAL_PR_FMT VIF_PR_FMT " prepare channel switch to "
2411 CHANDEF_PR_FMT " count:%d block_tx:%d timestamp:%llu",
2412 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count,
2413 __entry->block_tx, __entry->timestamp
2414 )
2415 );
2416
2417 DEFINE_EVENT(local_sdata_evt, drv_post_channel_switch,
2418 TP_PROTO(struct ieee80211_local *local,
2419 struct ieee80211_sub_if_data *sdata),
2420 TP_ARGS(local, sdata)
2421 );
2422
2423 TRACE_EVENT(drv_get_txpower,
2424 TP_PROTO(struct ieee80211_local *local,
2425 struct ieee80211_sub_if_data *sdata,
2426 int dbm, int ret),
2427
2428 TP_ARGS(local, sdata, dbm, ret),
2429
2430 TP_STRUCT__entry(
2431 LOCAL_ENTRY
2432 VIF_ENTRY
2433 __field(int, dbm)
2434 __field(int, ret)
2435 ),
2436
2437 TP_fast_assign(
2438 LOCAL_ASSIGN;
2439 VIF_ASSIGN;
2440 __entry->dbm = dbm;
2441 __entry->ret = ret;
2442 ),
2443
2444 TP_printk(
2445 LOCAL_PR_FMT VIF_PR_FMT " dbm:%d ret:%d",
2446 LOCAL_PR_ARG, VIF_PR_ARG, __entry->dbm, __entry->ret
2447 )
2448 );
2449
2450 TRACE_EVENT(drv_tdls_channel_switch,
2451 TP_PROTO(struct ieee80211_local *local,
2452 struct ieee80211_sub_if_data *sdata,
2453 struct ieee80211_sta *sta, u8 oper_class,
2454 struct cfg80211_chan_def *chandef),
2455
2456 TP_ARGS(local, sdata, sta, oper_class, chandef),
2457
2458 TP_STRUCT__entry(
2459 LOCAL_ENTRY
2460 VIF_ENTRY
2461 STA_ENTRY
2462 __field(u8, oper_class)
2463 CHANDEF_ENTRY
2464 ),
2465
2466 TP_fast_assign(
2467 LOCAL_ASSIGN;
2468 VIF_ASSIGN;
2469 STA_ASSIGN;
2470 __entry->oper_class = oper_class;
2471 CHANDEF_ASSIGN(chandef)
2472 ),
2473
2474 TP_printk(
2475 LOCAL_PR_FMT VIF_PR_FMT " tdls channel switch to"
2476 CHANDEF_PR_FMT " oper_class:%d " STA_PR_FMT,
2477 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->oper_class,
2478 STA_PR_ARG
2479 )
2480 );
2481
2482 TRACE_EVENT(drv_tdls_cancel_channel_switch,
2483 TP_PROTO(struct ieee80211_local *local,
2484 struct ieee80211_sub_if_data *sdata,
2485 struct ieee80211_sta *sta),
2486
2487 TP_ARGS(local, sdata, sta),
2488
2489 TP_STRUCT__entry(
2490 LOCAL_ENTRY
2491 VIF_ENTRY
2492 STA_ENTRY
2493 ),
2494
2495 TP_fast_assign(
2496 LOCAL_ASSIGN;
2497 VIF_ASSIGN;
2498 STA_ASSIGN;
2499 ),
2500
2501 TP_printk(
2502 LOCAL_PR_FMT VIF_PR_FMT
2503 " tdls cancel channel switch with " STA_PR_FMT,
2504 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
2505 )
2506 );
2507
2508 TRACE_EVENT(drv_tdls_recv_channel_switch,
2509 TP_PROTO(struct ieee80211_local *local,
2510 struct ieee80211_sub_if_data *sdata,
2511 struct ieee80211_tdls_ch_sw_params *params),
2512
2513 TP_ARGS(local, sdata, params),
2514
2515 TP_STRUCT__entry(
2516 LOCAL_ENTRY
2517 VIF_ENTRY
2518 __field(u8, action_code)
2519 STA_ENTRY
2520 CHANDEF_ENTRY
2521 __field(u32, status)
2522 __field(bool, peer_initiator)
2523 __field(u32, timestamp)
2524 __field(u16, switch_time)
2525 __field(u16, switch_timeout)
2526 ),
2527
2528 TP_fast_assign(
2529 LOCAL_ASSIGN;
2530 VIF_ASSIGN;
2531 STA_NAMED_ASSIGN(params->sta);
2532 CHANDEF_ASSIGN(params->chandef)
2533 __entry->peer_initiator = params->sta->tdls_initiator;
2534 __entry->action_code = params->action_code;
2535 __entry->status = params->status;
2536 __entry->timestamp = params->timestamp;
2537 __entry->switch_time = params->switch_time;
2538 __entry->switch_timeout = params->switch_timeout;
2539 ),
2540
2541 TP_printk(
2542 LOCAL_PR_FMT VIF_PR_FMT " received tdls channel switch packet"
2543 " action:%d status:%d time:%d switch time:%d switch"
2544 " timeout:%d initiator: %d chan:" CHANDEF_PR_FMT STA_PR_FMT,
2545 LOCAL_PR_ARG, VIF_PR_ARG, __entry->action_code, __entry->status,
2546 __entry->timestamp, __entry->switch_time,
2547 __entry->switch_timeout, __entry->peer_initiator,
2548 CHANDEF_PR_ARG, STA_PR_ARG
2549 )
2550 );
2551
2552 TRACE_EVENT(drv_wake_tx_queue,
2553 TP_PROTO(struct ieee80211_local *local,
2554 struct ieee80211_sub_if_data *sdata,
2555 struct txq_info *txq),
2556
2557 TP_ARGS(local, sdata, txq),
2558
2559 TP_STRUCT__entry(
2560 LOCAL_ENTRY
2561 VIF_ENTRY
2562 STA_ENTRY
2563 __field(u8, ac)
2564 __field(u8, tid)
2565 ),
2566
2567 TP_fast_assign(
2568 struct ieee80211_sta *sta = txq->txq.sta;
2569
2570 LOCAL_ASSIGN;
2571 VIF_ASSIGN;
2572 STA_ASSIGN;
2573 __entry->ac = txq->txq.ac;
2574 __entry->tid = txq->txq.tid;
2575 ),
2576
2577 TP_printk(
2578 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " ac:%d tid:%d",
2579 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->ac, __entry->tid
2580 )
2581 );
2582
2583 #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
2584
2585 #undef TRACE_INCLUDE_PATH
2586 #define TRACE_INCLUDE_PATH .
2587 #undef TRACE_INCLUDE_FILE
2588 #define TRACE_INCLUDE_FILE trace
2589 #include <trace/define_trace.h>