]> Pileus Git - ~andy/linux/blob - net/mac80211/trace.h
e9ccf22f6dd972c8b0517c5d35a345085eb45ec6
[~andy/linux] / net / mac80211 / trace.h
1 #if !defined(__MAC80211_DRIVER_TRACE) || defined(TRACE_HEADER_MULTI_READ)
2 #define __MAC80211_DRIVER_TRACE
3
4 #include <linux/tracepoint.h>
5 #include <net/mac80211.h>
6 #include "ieee80211_i.h"
7
8 #undef TRACE_SYSTEM
9 #define TRACE_SYSTEM mac80211
10
11 #define MAXNAME         32
12 #define LOCAL_ENTRY     __array(char, wiphy_name, 32)
13 #define LOCAL_ASSIGN    strlcpy(__entry->wiphy_name, wiphy_name(local->hw.wiphy), MAXNAME)
14 #define LOCAL_PR_FMT    "%s"
15 #define LOCAL_PR_ARG    __entry->wiphy_name
16
17 #define STA_ENTRY       __array(char, sta_addr, ETH_ALEN)
18 #define STA_ASSIGN      (sta ? memcpy(__entry->sta_addr, sta->addr, ETH_ALEN) : memset(__entry->sta_addr, 0, ETH_ALEN))
19 #define STA_PR_FMT      " sta:%pM"
20 #define STA_PR_ARG      __entry->sta_addr
21
22 #define VIF_ENTRY       __field(enum nl80211_iftype, vif_type) __field(void *, sdata)   \
23                         __field(bool, p2p)                                              \
24                         __string(vif_name, sdata->dev ? sdata->dev->name : "<nodev>")
25 #define VIF_ASSIGN      __entry->vif_type = sdata->vif.type; __entry->sdata = sdata;    \
26                         __entry->p2p = sdata->vif.p2p;                                  \
27                         __assign_str(vif_name, sdata->dev ? sdata->dev->name : sdata->name)
28 #define VIF_PR_FMT      " vif:%s(%d%s)"
29 #define VIF_PR_ARG      __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : ""
30
31 #define CHANDEF_ENTRY   __field(u32, control_freq)                                      \
32                         __field(u32, chan_width)                                        \
33                         __field(u32, center_freq1)                                      \
34                         __field(u32, center_freq2)
35 #define CHANDEF_ASSIGN(c)                                                               \
36                         __entry->control_freq = (c)->chan ? (c)->chan->center_freq : 0; \
37                         __entry->chan_width = (c)->width;                               \
38                         __entry->center_freq1 = (c)->center_freq1;                      \
39                         __entry->center_freq2 = (c)->center_freq2;
40 #define CHANDEF_PR_FMT  " control:%d MHz width:%d center: %d/%d MHz"
41 #define CHANDEF_PR_ARG  __entry->control_freq, __entry->chan_width,                     \
42                         __entry->center_freq1, __entry->center_freq2
43
44 #define MIN_CHANDEF_ENTRY                                                               \
45                         __field(u32, min_control_freq)                                  \
46                         __field(u32, min_chan_width)                                    \
47                         __field(u32, min_center_freq1)                                  \
48                         __field(u32, min_center_freq2)
49
50 #define MIN_CHANDEF_ASSIGN(c)                                                           \
51                         __entry->min_control_freq = (c)->chan ? (c)->chan->center_freq : 0;     \
52                         __entry->min_chan_width = (c)->width;                           \
53                         __entry->min_center_freq1 = (c)->center_freq1;                  \
54                         __entry->min_center_freq2 = (c)->center_freq2;
55 #define MIN_CHANDEF_PR_FMT      " min_control:%d MHz min_width:%d min_center: %d/%d MHz"
56 #define MIN_CHANDEF_PR_ARG      __entry->min_control_freq, __entry->min_chan_width,     \
57                         __entry->min_center_freq1, __entry->min_center_freq2
58
59 #define CHANCTX_ENTRY   CHANDEF_ENTRY                                                   \
60                         MIN_CHANDEF_ENTRY                                               \
61                         __field(u8, rx_chains_static)                                   \
62                         __field(u8, rx_chains_dynamic)
63 #define CHANCTX_ASSIGN  CHANDEF_ASSIGN(&ctx->conf.def)                                  \
64                         MIN_CHANDEF_ASSIGN(&ctx->conf.min_def)                          \
65                         __entry->rx_chains_static = ctx->conf.rx_chains_static;         \
66                         __entry->rx_chains_dynamic = ctx->conf.rx_chains_dynamic
67 #define CHANCTX_PR_FMT  CHANDEF_PR_FMT MIN_CHANDEF_PR_FMT " chains:%d/%d"
68 #define CHANCTX_PR_ARG  CHANDEF_PR_ARG, MIN_CHANDEF_PR_ARG,                             \
69                         __entry->rx_chains_static, __entry->rx_chains_dynamic
70
71
72
73 /*
74  * Tracing for driver callbacks.
75  */
76
77 DECLARE_EVENT_CLASS(local_only_evt,
78         TP_PROTO(struct ieee80211_local *local),
79         TP_ARGS(local),
80         TP_STRUCT__entry(
81                 LOCAL_ENTRY
82         ),
83         TP_fast_assign(
84                 LOCAL_ASSIGN;
85         ),
86         TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG)
87 );
88
89 DECLARE_EVENT_CLASS(local_sdata_addr_evt,
90         TP_PROTO(struct ieee80211_local *local,
91                  struct ieee80211_sub_if_data *sdata),
92         TP_ARGS(local, sdata),
93
94         TP_STRUCT__entry(
95                 LOCAL_ENTRY
96                 VIF_ENTRY
97                 __array(char, addr, ETH_ALEN)
98         ),
99
100         TP_fast_assign(
101                 LOCAL_ASSIGN;
102                 VIF_ASSIGN;
103                 memcpy(__entry->addr, sdata->vif.addr, ETH_ALEN);
104         ),
105
106         TP_printk(
107                 LOCAL_PR_FMT  VIF_PR_FMT " addr:%pM",
108                 LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr
109         )
110 );
111
112 DECLARE_EVENT_CLASS(local_u32_evt,
113         TP_PROTO(struct ieee80211_local *local, u32 value),
114         TP_ARGS(local, value),
115
116         TP_STRUCT__entry(
117                 LOCAL_ENTRY
118                 __field(u32, value)
119         ),
120
121         TP_fast_assign(
122                 LOCAL_ASSIGN;
123                 __entry->value = value;
124         ),
125
126         TP_printk(
127                 LOCAL_PR_FMT " value:%d",
128                 LOCAL_PR_ARG, __entry->value
129         )
130 );
131
132 DECLARE_EVENT_CLASS(local_sdata_evt,
133         TP_PROTO(struct ieee80211_local *local,
134                  struct ieee80211_sub_if_data *sdata),
135         TP_ARGS(local, sdata),
136
137         TP_STRUCT__entry(
138                 LOCAL_ENTRY
139                 VIF_ENTRY
140         ),
141
142         TP_fast_assign(
143                 LOCAL_ASSIGN;
144                 VIF_ASSIGN;
145         ),
146
147         TP_printk(
148                 LOCAL_PR_FMT VIF_PR_FMT,
149                 LOCAL_PR_ARG, VIF_PR_ARG
150         )
151 );
152
153 DEFINE_EVENT(local_only_evt, drv_return_void,
154         TP_PROTO(struct ieee80211_local *local),
155         TP_ARGS(local)
156 );
157
158 TRACE_EVENT(drv_return_int,
159         TP_PROTO(struct ieee80211_local *local, int ret),
160         TP_ARGS(local, ret),
161         TP_STRUCT__entry(
162                 LOCAL_ENTRY
163                 __field(int, ret)
164         ),
165         TP_fast_assign(
166                 LOCAL_ASSIGN;
167                 __entry->ret = ret;
168         ),
169         TP_printk(LOCAL_PR_FMT " - %d", LOCAL_PR_ARG, __entry->ret)
170 );
171
172 TRACE_EVENT(drv_return_bool,
173         TP_PROTO(struct ieee80211_local *local, bool ret),
174         TP_ARGS(local, ret),
175         TP_STRUCT__entry(
176                 LOCAL_ENTRY
177                 __field(bool, ret)
178         ),
179         TP_fast_assign(
180                 LOCAL_ASSIGN;
181                 __entry->ret = ret;
182         ),
183         TP_printk(LOCAL_PR_FMT " - %s", LOCAL_PR_ARG, (__entry->ret) ?
184                   "true" : "false")
185 );
186
187 TRACE_EVENT(drv_return_u64,
188         TP_PROTO(struct ieee80211_local *local, u64 ret),
189         TP_ARGS(local, ret),
190         TP_STRUCT__entry(
191                 LOCAL_ENTRY
192                 __field(u64, ret)
193         ),
194         TP_fast_assign(
195                 LOCAL_ASSIGN;
196                 __entry->ret = ret;
197         ),
198         TP_printk(LOCAL_PR_FMT " - %llu", LOCAL_PR_ARG, __entry->ret)
199 );
200
201 DEFINE_EVENT(local_only_evt, drv_start,
202         TP_PROTO(struct ieee80211_local *local),
203         TP_ARGS(local)
204 );
205
206 DEFINE_EVENT(local_u32_evt, drv_get_et_strings,
207              TP_PROTO(struct ieee80211_local *local, u32 sset),
208              TP_ARGS(local, sset)
209 );
210
211 DEFINE_EVENT(local_u32_evt, drv_get_et_sset_count,
212              TP_PROTO(struct ieee80211_local *local, u32 sset),
213              TP_ARGS(local, sset)
214 );
215
216 DEFINE_EVENT(local_only_evt, drv_get_et_stats,
217              TP_PROTO(struct ieee80211_local *local),
218              TP_ARGS(local)
219 );
220
221 DEFINE_EVENT(local_only_evt, drv_suspend,
222         TP_PROTO(struct ieee80211_local *local),
223         TP_ARGS(local)
224 );
225
226 DEFINE_EVENT(local_only_evt, drv_resume,
227         TP_PROTO(struct ieee80211_local *local),
228         TP_ARGS(local)
229 );
230
231 TRACE_EVENT(drv_set_wakeup,
232         TP_PROTO(struct ieee80211_local *local, bool enabled),
233         TP_ARGS(local, enabled),
234         TP_STRUCT__entry(
235                 LOCAL_ENTRY
236                 __field(bool, enabled)
237         ),
238         TP_fast_assign(
239                 LOCAL_ASSIGN;
240                 __entry->enabled = enabled;
241         ),
242         TP_printk(LOCAL_PR_FMT " enabled:%d", LOCAL_PR_ARG, __entry->enabled)
243 );
244
245 DEFINE_EVENT(local_only_evt, drv_stop,
246         TP_PROTO(struct ieee80211_local *local),
247         TP_ARGS(local)
248 );
249
250 DEFINE_EVENT(local_sdata_addr_evt, drv_add_interface,
251         TP_PROTO(struct ieee80211_local *local,
252                  struct ieee80211_sub_if_data *sdata),
253         TP_ARGS(local, sdata)
254 );
255
256 TRACE_EVENT(drv_change_interface,
257         TP_PROTO(struct ieee80211_local *local,
258                  struct ieee80211_sub_if_data *sdata,
259                  enum nl80211_iftype type, bool p2p),
260
261         TP_ARGS(local, sdata, type, p2p),
262
263         TP_STRUCT__entry(
264                 LOCAL_ENTRY
265                 VIF_ENTRY
266                 __field(u32, new_type)
267                 __field(bool, new_p2p)
268         ),
269
270         TP_fast_assign(
271                 LOCAL_ASSIGN;
272                 VIF_ASSIGN;
273                 __entry->new_type = type;
274                 __entry->new_p2p = p2p;
275         ),
276
277         TP_printk(
278                 LOCAL_PR_FMT  VIF_PR_FMT " new type:%d%s",
279                 LOCAL_PR_ARG, VIF_PR_ARG, __entry->new_type,
280                 __entry->new_p2p ? "/p2p" : ""
281         )
282 );
283
284 DEFINE_EVENT(local_sdata_addr_evt, drv_remove_interface,
285         TP_PROTO(struct ieee80211_local *local,
286                  struct ieee80211_sub_if_data *sdata),
287         TP_ARGS(local, sdata)
288 );
289
290 TRACE_EVENT(drv_config,
291         TP_PROTO(struct ieee80211_local *local,
292                  u32 changed),
293
294         TP_ARGS(local, changed),
295
296         TP_STRUCT__entry(
297                 LOCAL_ENTRY
298                 __field(u32, changed)
299                 __field(u32, flags)
300                 __field(int, power_level)
301                 __field(int, dynamic_ps_timeout)
302                 __field(int, max_sleep_period)
303                 __field(u16, listen_interval)
304                 __field(u8, long_frame_max_tx_count)
305                 __field(u8, short_frame_max_tx_count)
306                 CHANDEF_ENTRY
307                 __field(int, smps)
308         ),
309
310         TP_fast_assign(
311                 LOCAL_ASSIGN;
312                 __entry->changed = changed;
313                 __entry->flags = local->hw.conf.flags;
314                 __entry->power_level = local->hw.conf.power_level;
315                 __entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout;
316                 __entry->max_sleep_period = local->hw.conf.max_sleep_period;
317                 __entry->listen_interval = local->hw.conf.listen_interval;
318                 __entry->long_frame_max_tx_count =
319                         local->hw.conf.long_frame_max_tx_count;
320                 __entry->short_frame_max_tx_count =
321                         local->hw.conf.short_frame_max_tx_count;
322                 CHANDEF_ASSIGN(&local->hw.conf.chandef)
323                 __entry->smps = local->hw.conf.smps_mode;
324         ),
325
326         TP_printk(
327                 LOCAL_PR_FMT " ch:%#x" CHANDEF_PR_FMT,
328                 LOCAL_PR_ARG, __entry->changed, CHANDEF_PR_ARG
329         )
330 );
331
332 TRACE_EVENT(drv_bss_info_changed,
333         TP_PROTO(struct ieee80211_local *local,
334                  struct ieee80211_sub_if_data *sdata,
335                  struct ieee80211_bss_conf *info,
336                  u32 changed),
337
338         TP_ARGS(local, sdata, info, changed),
339
340         TP_STRUCT__entry(
341                 LOCAL_ENTRY
342                 VIF_ENTRY
343                 __field(u32, changed)
344                 __field(bool, assoc)
345                 __field(bool, ibss_joined)
346                 __field(bool, ibss_creator)
347                 __field(u16, aid)
348                 __field(bool, cts)
349                 __field(bool, shortpre)
350                 __field(bool, shortslot)
351                 __field(bool, enable_beacon)
352                 __field(u8, dtimper)
353                 __field(u16, bcnint)
354                 __field(u16, assoc_cap)
355                 __field(u64, sync_tsf)
356                 __field(u32, sync_device_ts)
357                 __field(u8, sync_dtim_count)
358                 __field(u32, basic_rates)
359                 __array(int, mcast_rate, IEEE80211_NUM_BANDS)
360                 __field(u16, ht_operation_mode)
361                 __field(s32, cqm_rssi_thold);
362                 __field(s32, cqm_rssi_hyst);
363                 __field(u32, channel_width);
364                 __field(u32, channel_cfreq1);
365                 __dynamic_array(u32, arp_addr_list,
366                                 info->arp_addr_cnt > IEEE80211_BSS_ARP_ADDR_LIST_LEN ?
367                                         IEEE80211_BSS_ARP_ADDR_LIST_LEN :
368                                         info->arp_addr_cnt);
369                 __field(int, arp_addr_cnt);
370                 __field(bool, qos);
371                 __field(bool, idle);
372                 __field(bool, ps);
373                 __dynamic_array(u8, ssid, info->ssid_len);
374                 __field(bool, hidden_ssid);
375                 __field(int, txpower)
376                 __field(u8, p2p_oppps_ctwindow)
377         ),
378
379         TP_fast_assign(
380                 LOCAL_ASSIGN;
381                 VIF_ASSIGN;
382                 __entry->changed = changed;
383                 __entry->aid = info->aid;
384                 __entry->assoc = info->assoc;
385                 __entry->ibss_joined = info->ibss_joined;
386                 __entry->ibss_creator = info->ibss_creator;
387                 __entry->shortpre = info->use_short_preamble;
388                 __entry->cts = info->use_cts_prot;
389                 __entry->shortslot = info->use_short_slot;
390                 __entry->enable_beacon = info->enable_beacon;
391                 __entry->dtimper = info->dtim_period;
392                 __entry->bcnint = info->beacon_int;
393                 __entry->assoc_cap = info->assoc_capability;
394                 __entry->sync_tsf = info->sync_tsf;
395                 __entry->sync_device_ts = info->sync_device_ts;
396                 __entry->sync_dtim_count = info->sync_dtim_count;
397                 __entry->basic_rates = info->basic_rates;
398                 memcpy(__entry->mcast_rate, info->mcast_rate,
399                        sizeof(__entry->mcast_rate));
400                 __entry->ht_operation_mode = info->ht_operation_mode;
401                 __entry->cqm_rssi_thold = info->cqm_rssi_thold;
402                 __entry->cqm_rssi_hyst = info->cqm_rssi_hyst;
403                 __entry->channel_width = info->chandef.width;
404                 __entry->channel_cfreq1 = info->chandef.center_freq1;
405                 __entry->arp_addr_cnt = info->arp_addr_cnt;
406                 memcpy(__get_dynamic_array(arp_addr_list), info->arp_addr_list,
407                        sizeof(u32) * (info->arp_addr_cnt > IEEE80211_BSS_ARP_ADDR_LIST_LEN ?
408                                         IEEE80211_BSS_ARP_ADDR_LIST_LEN :
409                                         info->arp_addr_cnt));
410                 __entry->qos = info->qos;
411                 __entry->idle = info->idle;
412                 __entry->ps = info->ps;
413                 memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len);
414                 __entry->hidden_ssid = info->hidden_ssid;
415                 __entry->txpower = info->txpower;
416                 __entry->p2p_oppps_ctwindow = info->p2p_noa_attr.oppps_ctwindow;
417         ),
418
419         TP_printk(
420                 LOCAL_PR_FMT  VIF_PR_FMT " changed:%#x",
421                 LOCAL_PR_ARG, VIF_PR_ARG, __entry->changed
422         )
423 );
424
425 TRACE_EVENT(drv_prepare_multicast,
426         TP_PROTO(struct ieee80211_local *local, int mc_count),
427
428         TP_ARGS(local, mc_count),
429
430         TP_STRUCT__entry(
431                 LOCAL_ENTRY
432                 __field(int, mc_count)
433         ),
434
435         TP_fast_assign(
436                 LOCAL_ASSIGN;
437                 __entry->mc_count = mc_count;
438         ),
439
440         TP_printk(
441                 LOCAL_PR_FMT " prepare mc (%d)",
442                 LOCAL_PR_ARG, __entry->mc_count
443         )
444 );
445
446 TRACE_EVENT(drv_set_multicast_list,
447         TP_PROTO(struct ieee80211_local *local,
448                  struct ieee80211_sub_if_data *sdata, int mc_count),
449
450         TP_ARGS(local, sdata, mc_count),
451
452         TP_STRUCT__entry(
453                 LOCAL_ENTRY
454                 __field(bool, allmulti)
455                 __field(int, mc_count)
456         ),
457
458         TP_fast_assign(
459                 LOCAL_ASSIGN;
460                 __entry->allmulti = sdata->flags & IEEE80211_SDATA_ALLMULTI;
461                 __entry->mc_count = mc_count;
462         ),
463
464         TP_printk(
465                 LOCAL_PR_FMT " configure mc filter, count=%d, allmulti=%d",
466                 LOCAL_PR_ARG, __entry->mc_count, __entry->allmulti
467         )
468 );
469
470 TRACE_EVENT(drv_configure_filter,
471         TP_PROTO(struct ieee80211_local *local,
472                  unsigned int changed_flags,
473                  unsigned int *total_flags,
474                  u64 multicast),
475
476         TP_ARGS(local, changed_flags, total_flags, multicast),
477
478         TP_STRUCT__entry(
479                 LOCAL_ENTRY
480                 __field(unsigned int, changed)
481                 __field(unsigned int, total)
482                 __field(u64, multicast)
483         ),
484
485         TP_fast_assign(
486                 LOCAL_ASSIGN;
487                 __entry->changed = changed_flags;
488                 __entry->total = *total_flags;
489                 __entry->multicast = multicast;
490         ),
491
492         TP_printk(
493                 LOCAL_PR_FMT " changed:%#x total:%#x",
494                 LOCAL_PR_ARG, __entry->changed, __entry->total
495         )
496 );
497
498 TRACE_EVENT(drv_set_tim,
499         TP_PROTO(struct ieee80211_local *local,
500                  struct ieee80211_sta *sta, bool set),
501
502         TP_ARGS(local, sta, set),
503
504         TP_STRUCT__entry(
505                 LOCAL_ENTRY
506                 STA_ENTRY
507                 __field(bool, set)
508         ),
509
510         TP_fast_assign(
511                 LOCAL_ASSIGN;
512                 STA_ASSIGN;
513                 __entry->set = set;
514         ),
515
516         TP_printk(
517                 LOCAL_PR_FMT STA_PR_FMT " set:%d",
518                 LOCAL_PR_ARG, STA_PR_ARG, __entry->set
519         )
520 );
521
522 TRACE_EVENT(drv_set_key,
523         TP_PROTO(struct ieee80211_local *local,
524                  enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata,
525                  struct ieee80211_sta *sta,
526                  struct ieee80211_key_conf *key),
527
528         TP_ARGS(local, cmd, sdata, sta, key),
529
530         TP_STRUCT__entry(
531                 LOCAL_ENTRY
532                 VIF_ENTRY
533                 STA_ENTRY
534                 __field(u32, cipher)
535                 __field(u8, hw_key_idx)
536                 __field(u8, flags)
537                 __field(s8, keyidx)
538         ),
539
540         TP_fast_assign(
541                 LOCAL_ASSIGN;
542                 VIF_ASSIGN;
543                 STA_ASSIGN;
544                 __entry->cipher = key->cipher;
545                 __entry->flags = key->flags;
546                 __entry->keyidx = key->keyidx;
547                 __entry->hw_key_idx = key->hw_key_idx;
548         ),
549
550         TP_printk(
551                 LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
552                 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
553         )
554 );
555
556 TRACE_EVENT(drv_update_tkip_key,
557         TP_PROTO(struct ieee80211_local *local,
558                  struct ieee80211_sub_if_data *sdata,
559                  struct ieee80211_key_conf *conf,
560                  struct ieee80211_sta *sta, u32 iv32),
561
562         TP_ARGS(local, sdata, conf, sta, iv32),
563
564         TP_STRUCT__entry(
565                 LOCAL_ENTRY
566                 VIF_ENTRY
567                 STA_ENTRY
568                 __field(u32, iv32)
569         ),
570
571         TP_fast_assign(
572                 LOCAL_ASSIGN;
573                 VIF_ASSIGN;
574                 STA_ASSIGN;
575                 __entry->iv32 = iv32;
576         ),
577
578         TP_printk(
579                 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x",
580                 LOCAL_PR_ARG,VIF_PR_ARG,STA_PR_ARG, __entry->iv32
581         )
582 );
583
584 DEFINE_EVENT(local_sdata_evt, drv_hw_scan,
585         TP_PROTO(struct ieee80211_local *local,
586                  struct ieee80211_sub_if_data *sdata),
587         TP_ARGS(local, sdata)
588 );
589
590 DEFINE_EVENT(local_sdata_evt, drv_cancel_hw_scan,
591         TP_PROTO(struct ieee80211_local *local,
592                  struct ieee80211_sub_if_data *sdata),
593         TP_ARGS(local, sdata)
594 );
595
596 DEFINE_EVENT(local_sdata_evt, drv_sched_scan_start,
597         TP_PROTO(struct ieee80211_local *local,
598                  struct ieee80211_sub_if_data *sdata),
599         TP_ARGS(local, sdata)
600 );
601
602 DEFINE_EVENT(local_sdata_evt, drv_sched_scan_stop,
603         TP_PROTO(struct ieee80211_local *local,
604                  struct ieee80211_sub_if_data *sdata),
605         TP_ARGS(local, sdata)
606 );
607
608 DEFINE_EVENT(local_only_evt, drv_sw_scan_start,
609         TP_PROTO(struct ieee80211_local *local),
610         TP_ARGS(local)
611 );
612
613 DEFINE_EVENT(local_only_evt, drv_sw_scan_complete,
614         TP_PROTO(struct ieee80211_local *local),
615         TP_ARGS(local)
616 );
617
618 TRACE_EVENT(drv_get_stats,
619         TP_PROTO(struct ieee80211_local *local,
620                  struct ieee80211_low_level_stats *stats,
621                  int ret),
622
623         TP_ARGS(local, stats, ret),
624
625         TP_STRUCT__entry(
626                 LOCAL_ENTRY
627                 __field(int, ret)
628                 __field(unsigned int, ackfail)
629                 __field(unsigned int, rtsfail)
630                 __field(unsigned int, fcserr)
631                 __field(unsigned int, rtssucc)
632         ),
633
634         TP_fast_assign(
635                 LOCAL_ASSIGN;
636                 __entry->ret = ret;
637                 __entry->ackfail = stats->dot11ACKFailureCount;
638                 __entry->rtsfail = stats->dot11RTSFailureCount;
639                 __entry->fcserr = stats->dot11FCSErrorCount;
640                 __entry->rtssucc = stats->dot11RTSSuccessCount;
641         ),
642
643         TP_printk(
644                 LOCAL_PR_FMT " ret:%d",
645                 LOCAL_PR_ARG, __entry->ret
646         )
647 );
648
649 TRACE_EVENT(drv_get_tkip_seq,
650         TP_PROTO(struct ieee80211_local *local,
651                  u8 hw_key_idx, u32 *iv32, u16 *iv16),
652
653         TP_ARGS(local, hw_key_idx, iv32, iv16),
654
655         TP_STRUCT__entry(
656                 LOCAL_ENTRY
657                 __field(u8, hw_key_idx)
658                 __field(u32, iv32)
659                 __field(u16, iv16)
660         ),
661
662         TP_fast_assign(
663                 LOCAL_ASSIGN;
664                 __entry->hw_key_idx = hw_key_idx;
665                 __entry->iv32 = *iv32;
666                 __entry->iv16 = *iv16;
667         ),
668
669         TP_printk(
670                 LOCAL_PR_FMT, LOCAL_PR_ARG
671         )
672 );
673
674 DEFINE_EVENT(local_u32_evt, drv_set_frag_threshold,
675         TP_PROTO(struct ieee80211_local *local, u32 value),
676         TP_ARGS(local, value)
677 );
678
679 DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold,
680         TP_PROTO(struct ieee80211_local *local, u32 value),
681         TP_ARGS(local, value)
682 );
683
684 TRACE_EVENT(drv_set_coverage_class,
685         TP_PROTO(struct ieee80211_local *local, u8 value),
686
687         TP_ARGS(local, value),
688
689         TP_STRUCT__entry(
690                 LOCAL_ENTRY
691                 __field(u8, value)
692         ),
693
694         TP_fast_assign(
695                 LOCAL_ASSIGN;
696                 __entry->value = value;
697         ),
698
699         TP_printk(
700                 LOCAL_PR_FMT " value:%d",
701                 LOCAL_PR_ARG, __entry->value
702         )
703 );
704
705 TRACE_EVENT(drv_sta_notify,
706         TP_PROTO(struct ieee80211_local *local,
707                  struct ieee80211_sub_if_data *sdata,
708                  enum sta_notify_cmd cmd,
709                  struct ieee80211_sta *sta),
710
711         TP_ARGS(local, sdata, cmd, sta),
712
713         TP_STRUCT__entry(
714                 LOCAL_ENTRY
715                 VIF_ENTRY
716                 STA_ENTRY
717                 __field(u32, cmd)
718         ),
719
720         TP_fast_assign(
721                 LOCAL_ASSIGN;
722                 VIF_ASSIGN;
723                 STA_ASSIGN;
724                 __entry->cmd = cmd;
725         ),
726
727         TP_printk(
728                 LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " cmd:%d",
729                 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd
730         )
731 );
732
733 TRACE_EVENT(drv_sta_state,
734         TP_PROTO(struct ieee80211_local *local,
735                  struct ieee80211_sub_if_data *sdata,
736                  struct ieee80211_sta *sta,
737                  enum ieee80211_sta_state old_state,
738                  enum ieee80211_sta_state new_state),
739
740         TP_ARGS(local, sdata, sta, old_state, new_state),
741
742         TP_STRUCT__entry(
743                 LOCAL_ENTRY
744                 VIF_ENTRY
745                 STA_ENTRY
746                 __field(u32, old_state)
747                 __field(u32, new_state)
748         ),
749
750         TP_fast_assign(
751                 LOCAL_ASSIGN;
752                 VIF_ASSIGN;
753                 STA_ASSIGN;
754                 __entry->old_state = old_state;
755                 __entry->new_state = new_state;
756         ),
757
758         TP_printk(
759                 LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " state: %d->%d",
760                 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG,
761                 __entry->old_state, __entry->new_state
762         )
763 );
764
765 TRACE_EVENT(drv_sta_rc_update,
766         TP_PROTO(struct ieee80211_local *local,
767                  struct ieee80211_sub_if_data *sdata,
768                  struct ieee80211_sta *sta,
769                  u32 changed),
770
771         TP_ARGS(local, sdata, sta, changed),
772
773         TP_STRUCT__entry(
774                 LOCAL_ENTRY
775                 VIF_ENTRY
776                 STA_ENTRY
777                 __field(u32, changed)
778         ),
779
780         TP_fast_assign(
781                 LOCAL_ASSIGN;
782                 VIF_ASSIGN;
783                 STA_ASSIGN;
784                 __entry->changed = changed;
785         ),
786
787         TP_printk(
788                 LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " changed: 0x%x",
789                 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->changed
790         )
791 );
792
793 TRACE_EVENT(drv_sta_add,
794         TP_PROTO(struct ieee80211_local *local,
795                  struct ieee80211_sub_if_data *sdata,
796                  struct ieee80211_sta *sta),
797
798         TP_ARGS(local, sdata, sta),
799
800         TP_STRUCT__entry(
801                 LOCAL_ENTRY
802                 VIF_ENTRY
803                 STA_ENTRY
804         ),
805
806         TP_fast_assign(
807                 LOCAL_ASSIGN;
808                 VIF_ASSIGN;
809                 STA_ASSIGN;
810         ),
811
812         TP_printk(
813                 LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
814                 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
815         )
816 );
817
818 TRACE_EVENT(drv_sta_remove,
819         TP_PROTO(struct ieee80211_local *local,
820                  struct ieee80211_sub_if_data *sdata,
821                  struct ieee80211_sta *sta),
822
823         TP_ARGS(local, sdata, sta),
824
825         TP_STRUCT__entry(
826                 LOCAL_ENTRY
827                 VIF_ENTRY
828                 STA_ENTRY
829         ),
830
831         TP_fast_assign(
832                 LOCAL_ASSIGN;
833                 VIF_ASSIGN;
834                 STA_ASSIGN;
835         ),
836
837         TP_printk(
838                 LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
839                 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
840         )
841 );
842
843 TRACE_EVENT(drv_conf_tx,
844         TP_PROTO(struct ieee80211_local *local,
845                  struct ieee80211_sub_if_data *sdata,
846                  u16 ac, const struct ieee80211_tx_queue_params *params),
847
848         TP_ARGS(local, sdata, ac, params),
849
850         TP_STRUCT__entry(
851                 LOCAL_ENTRY
852                 VIF_ENTRY
853                 __field(u16, ac)
854                 __field(u16, txop)
855                 __field(u16, cw_min)
856                 __field(u16, cw_max)
857                 __field(u8, aifs)
858                 __field(bool, uapsd)
859         ),
860
861         TP_fast_assign(
862                 LOCAL_ASSIGN;
863                 VIF_ASSIGN;
864                 __entry->ac = ac;
865                 __entry->txop = params->txop;
866                 __entry->cw_max = params->cw_max;
867                 __entry->cw_min = params->cw_min;
868                 __entry->aifs = params->aifs;
869                 __entry->uapsd = params->uapsd;
870         ),
871
872         TP_printk(
873                 LOCAL_PR_FMT  VIF_PR_FMT  " AC:%d",
874                 LOCAL_PR_ARG, VIF_PR_ARG, __entry->ac
875         )
876 );
877
878 DEFINE_EVENT(local_sdata_evt, drv_get_tsf,
879         TP_PROTO(struct ieee80211_local *local,
880                  struct ieee80211_sub_if_data *sdata),
881         TP_ARGS(local, sdata)
882 );
883
884 TRACE_EVENT(drv_set_tsf,
885         TP_PROTO(struct ieee80211_local *local,
886                  struct ieee80211_sub_if_data *sdata,
887                  u64 tsf),
888
889         TP_ARGS(local, sdata, tsf),
890
891         TP_STRUCT__entry(
892                 LOCAL_ENTRY
893                 VIF_ENTRY
894                 __field(u64, tsf)
895         ),
896
897         TP_fast_assign(
898                 LOCAL_ASSIGN;
899                 VIF_ASSIGN;
900                 __entry->tsf = tsf;
901         ),
902
903         TP_printk(
904                 LOCAL_PR_FMT  VIF_PR_FMT  " tsf:%llu",
905                 LOCAL_PR_ARG, VIF_PR_ARG, (unsigned long long)__entry->tsf
906         )
907 );
908
909 DEFINE_EVENT(local_sdata_evt, drv_reset_tsf,
910         TP_PROTO(struct ieee80211_local *local,
911                  struct ieee80211_sub_if_data *sdata),
912         TP_ARGS(local, sdata)
913 );
914
915 DEFINE_EVENT(local_only_evt, drv_tx_last_beacon,
916         TP_PROTO(struct ieee80211_local *local),
917         TP_ARGS(local)
918 );
919
920 TRACE_EVENT(drv_ampdu_action,
921         TP_PROTO(struct ieee80211_local *local,
922                  struct ieee80211_sub_if_data *sdata,
923                  enum ieee80211_ampdu_mlme_action action,
924                  struct ieee80211_sta *sta, u16 tid,
925                  u16 *ssn, u8 buf_size),
926
927         TP_ARGS(local, sdata, action, sta, tid, ssn, buf_size),
928
929         TP_STRUCT__entry(
930                 LOCAL_ENTRY
931                 STA_ENTRY
932                 __field(u32, action)
933                 __field(u16, tid)
934                 __field(u16, ssn)
935                 __field(u8, buf_size)
936                 VIF_ENTRY
937         ),
938
939         TP_fast_assign(
940                 LOCAL_ASSIGN;
941                 VIF_ASSIGN;
942                 STA_ASSIGN;
943                 __entry->action = action;
944                 __entry->tid = tid;
945                 __entry->ssn = ssn ? *ssn : 0;
946                 __entry->buf_size = buf_size;
947         ),
948
949         TP_printk(
950                 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " action:%d tid:%d buf:%d",
951                 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->action,
952                 __entry->tid, __entry->buf_size
953         )
954 );
955
956 TRACE_EVENT(drv_get_survey,
957         TP_PROTO(struct ieee80211_local *local, int idx,
958                  struct survey_info *survey),
959
960         TP_ARGS(local, idx, survey),
961
962         TP_STRUCT__entry(
963                 LOCAL_ENTRY
964                 __field(int, idx)
965         ),
966
967         TP_fast_assign(
968                 LOCAL_ASSIGN;
969                 __entry->idx = idx;
970         ),
971
972         TP_printk(
973                 LOCAL_PR_FMT " idx:%d",
974                 LOCAL_PR_ARG, __entry->idx
975         )
976 );
977
978 TRACE_EVENT(drv_flush,
979         TP_PROTO(struct ieee80211_local *local,
980                  u32 queues, bool drop),
981
982         TP_ARGS(local, queues, drop),
983
984         TP_STRUCT__entry(
985                 LOCAL_ENTRY
986                 __field(bool, drop)
987                 __field(u32, queues)
988         ),
989
990         TP_fast_assign(
991                 LOCAL_ASSIGN;
992                 __entry->drop = drop;
993                 __entry->queues = queues;
994         ),
995
996         TP_printk(
997                 LOCAL_PR_FMT " queues:0x%x drop:%d",
998                 LOCAL_PR_ARG, __entry->queues, __entry->drop
999         )
1000 );
1001
1002 TRACE_EVENT(drv_channel_switch,
1003         TP_PROTO(struct ieee80211_local *local,
1004                  struct ieee80211_channel_switch *ch_switch),
1005
1006         TP_ARGS(local, ch_switch),
1007
1008         TP_STRUCT__entry(
1009                 LOCAL_ENTRY
1010                 CHANDEF_ENTRY
1011                 __field(u64, timestamp)
1012                 __field(bool, block_tx)
1013                 __field(u8, count)
1014         ),
1015
1016         TP_fast_assign(
1017                 LOCAL_ASSIGN;
1018                 CHANDEF_ASSIGN(&ch_switch->chandef)
1019                 __entry->timestamp = ch_switch->timestamp;
1020                 __entry->block_tx = ch_switch->block_tx;
1021                 __entry->count = ch_switch->count;
1022         ),
1023
1024         TP_printk(
1025                 LOCAL_PR_FMT " new " CHANDEF_PR_FMT " count:%d",
1026                 LOCAL_PR_ARG, CHANDEF_PR_ARG, __entry->count
1027         )
1028 );
1029
1030 TRACE_EVENT(drv_set_antenna,
1031         TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
1032
1033         TP_ARGS(local, tx_ant, rx_ant, ret),
1034
1035         TP_STRUCT__entry(
1036                 LOCAL_ENTRY
1037                 __field(u32, tx_ant)
1038                 __field(u32, rx_ant)
1039                 __field(int, ret)
1040         ),
1041
1042         TP_fast_assign(
1043                 LOCAL_ASSIGN;
1044                 __entry->tx_ant = tx_ant;
1045                 __entry->rx_ant = rx_ant;
1046                 __entry->ret = ret;
1047         ),
1048
1049         TP_printk(
1050                 LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
1051                 LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
1052         )
1053 );
1054
1055 TRACE_EVENT(drv_get_antenna,
1056         TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
1057
1058         TP_ARGS(local, tx_ant, rx_ant, ret),
1059
1060         TP_STRUCT__entry(
1061                 LOCAL_ENTRY
1062                 __field(u32, tx_ant)
1063                 __field(u32, rx_ant)
1064                 __field(int, ret)
1065         ),
1066
1067         TP_fast_assign(
1068                 LOCAL_ASSIGN;
1069                 __entry->tx_ant = tx_ant;
1070                 __entry->rx_ant = rx_ant;
1071                 __entry->ret = ret;
1072         ),
1073
1074         TP_printk(
1075                 LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
1076                 LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
1077         )
1078 );
1079
1080 TRACE_EVENT(drv_remain_on_channel,
1081         TP_PROTO(struct ieee80211_local *local,
1082                  struct ieee80211_sub_if_data *sdata,
1083                  struct ieee80211_channel *chan,
1084                  unsigned int duration,
1085                  enum ieee80211_roc_type type),
1086
1087         TP_ARGS(local, sdata, chan, duration, type),
1088
1089         TP_STRUCT__entry(
1090                 LOCAL_ENTRY
1091                 VIF_ENTRY
1092                 __field(int, center_freq)
1093                 __field(unsigned int, duration)
1094                 __field(u32, type)
1095         ),
1096
1097         TP_fast_assign(
1098                 LOCAL_ASSIGN;
1099                 VIF_ASSIGN;
1100                 __entry->center_freq = chan->center_freq;
1101                 __entry->duration = duration;
1102                 __entry->type = type;
1103         ),
1104
1105         TP_printk(
1106                 LOCAL_PR_FMT  VIF_PR_FMT " freq:%dMHz duration:%dms type=%d",
1107                 LOCAL_PR_ARG, VIF_PR_ARG,
1108                 __entry->center_freq, __entry->duration, __entry->type
1109         )
1110 );
1111
1112 DEFINE_EVENT(local_only_evt, drv_cancel_remain_on_channel,
1113         TP_PROTO(struct ieee80211_local *local),
1114         TP_ARGS(local)
1115 );
1116
1117 TRACE_EVENT(drv_set_ringparam,
1118         TP_PROTO(struct ieee80211_local *local, u32 tx, u32 rx),
1119
1120         TP_ARGS(local, tx, rx),
1121
1122         TP_STRUCT__entry(
1123                 LOCAL_ENTRY
1124                 __field(u32, tx)
1125                 __field(u32, rx)
1126         ),
1127
1128         TP_fast_assign(
1129                 LOCAL_ASSIGN;
1130                 __entry->tx = tx;
1131                 __entry->rx = rx;
1132         ),
1133
1134         TP_printk(
1135                 LOCAL_PR_FMT " tx:%d rx %d",
1136                 LOCAL_PR_ARG, __entry->tx, __entry->rx
1137         )
1138 );
1139
1140 TRACE_EVENT(drv_get_ringparam,
1141         TP_PROTO(struct ieee80211_local *local, u32 *tx, u32 *tx_max,
1142                  u32 *rx, u32 *rx_max),
1143
1144         TP_ARGS(local, tx, tx_max, rx, rx_max),
1145
1146         TP_STRUCT__entry(
1147                 LOCAL_ENTRY
1148                 __field(u32, tx)
1149                 __field(u32, tx_max)
1150                 __field(u32, rx)
1151                 __field(u32, rx_max)
1152         ),
1153
1154         TP_fast_assign(
1155                 LOCAL_ASSIGN;
1156                 __entry->tx = *tx;
1157                 __entry->tx_max = *tx_max;
1158                 __entry->rx = *rx;
1159                 __entry->rx_max = *rx_max;
1160         ),
1161
1162         TP_printk(
1163                 LOCAL_PR_FMT " tx:%d tx_max %d rx %d rx_max %d",
1164                 LOCAL_PR_ARG,
1165                 __entry->tx, __entry->tx_max, __entry->rx, __entry->rx_max
1166         )
1167 );
1168
1169 DEFINE_EVENT(local_only_evt, drv_tx_frames_pending,
1170         TP_PROTO(struct ieee80211_local *local),
1171         TP_ARGS(local)
1172 );
1173
1174 DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait,
1175         TP_PROTO(struct ieee80211_local *local),
1176         TP_ARGS(local)
1177 );
1178
1179 TRACE_EVENT(drv_set_bitrate_mask,
1180         TP_PROTO(struct ieee80211_local *local,
1181                  struct ieee80211_sub_if_data *sdata,
1182                  const struct cfg80211_bitrate_mask *mask),
1183
1184         TP_ARGS(local, sdata, mask),
1185
1186         TP_STRUCT__entry(
1187                 LOCAL_ENTRY
1188                 VIF_ENTRY
1189                 __field(u32, legacy_2g)
1190                 __field(u32, legacy_5g)
1191         ),
1192
1193         TP_fast_assign(
1194                 LOCAL_ASSIGN;
1195                 VIF_ASSIGN;
1196                 __entry->legacy_2g = mask->control[IEEE80211_BAND_2GHZ].legacy;
1197                 __entry->legacy_5g = mask->control[IEEE80211_BAND_5GHZ].legacy;
1198         ),
1199
1200         TP_printk(
1201                 LOCAL_PR_FMT  VIF_PR_FMT " 2G Mask:0x%x 5G Mask:0x%x",
1202                 LOCAL_PR_ARG, VIF_PR_ARG, __entry->legacy_2g, __entry->legacy_5g
1203         )
1204 );
1205
1206 TRACE_EVENT(drv_set_rekey_data,
1207         TP_PROTO(struct ieee80211_local *local,
1208                  struct ieee80211_sub_if_data *sdata,
1209                  struct cfg80211_gtk_rekey_data *data),
1210
1211         TP_ARGS(local, sdata, data),
1212
1213         TP_STRUCT__entry(
1214                 LOCAL_ENTRY
1215                 VIF_ENTRY
1216                 __array(u8, kek, NL80211_KEK_LEN)
1217                 __array(u8, kck, NL80211_KCK_LEN)
1218                 __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
1219         ),
1220
1221         TP_fast_assign(
1222                 LOCAL_ASSIGN;
1223                 VIF_ASSIGN;
1224                 memcpy(__entry->kek, data->kek, NL80211_KEK_LEN);
1225                 memcpy(__entry->kck, data->kck, NL80211_KCK_LEN);
1226                 memcpy(__entry->replay_ctr, data->replay_ctr,
1227                        NL80211_REPLAY_CTR_LEN);
1228         ),
1229
1230         TP_printk(LOCAL_PR_FMT VIF_PR_FMT,
1231                   LOCAL_PR_ARG, VIF_PR_ARG)
1232 );
1233
1234 TRACE_EVENT(drv_rssi_callback,
1235         TP_PROTO(struct ieee80211_local *local,
1236                  struct ieee80211_sub_if_data *sdata,
1237                  enum ieee80211_rssi_event rssi_event),
1238
1239         TP_ARGS(local, sdata, rssi_event),
1240
1241         TP_STRUCT__entry(
1242                 LOCAL_ENTRY
1243                 VIF_ENTRY
1244                 __field(u32, rssi_event)
1245         ),
1246
1247         TP_fast_assign(
1248                 LOCAL_ASSIGN;
1249                 VIF_ASSIGN;
1250                 __entry->rssi_event = rssi_event;
1251         ),
1252
1253         TP_printk(
1254                 LOCAL_PR_FMT VIF_PR_FMT " rssi_event:%d",
1255                 LOCAL_PR_ARG, VIF_PR_ARG, __entry->rssi_event
1256         )
1257 );
1258
1259 DECLARE_EVENT_CLASS(release_evt,
1260         TP_PROTO(struct ieee80211_local *local,
1261                  struct ieee80211_sta *sta,
1262                  u16 tids, int num_frames,
1263                  enum ieee80211_frame_release_type reason,
1264                  bool more_data),
1265
1266         TP_ARGS(local, sta, tids, num_frames, reason, more_data),
1267
1268         TP_STRUCT__entry(
1269                 LOCAL_ENTRY
1270                 STA_ENTRY
1271                 __field(u16, tids)
1272                 __field(int, num_frames)
1273                 __field(int, reason)
1274                 __field(bool, more_data)
1275         ),
1276
1277         TP_fast_assign(
1278                 LOCAL_ASSIGN;
1279                 STA_ASSIGN;
1280                 __entry->tids = tids;
1281                 __entry->num_frames = num_frames;
1282                 __entry->reason = reason;
1283                 __entry->more_data = more_data;
1284         ),
1285
1286         TP_printk(
1287                 LOCAL_PR_FMT STA_PR_FMT
1288                 " TIDs:0x%.4x frames:%d reason:%d more:%d",
1289                 LOCAL_PR_ARG, STA_PR_ARG, __entry->tids, __entry->num_frames,
1290                 __entry->reason, __entry->more_data
1291         )
1292 );
1293
1294 DEFINE_EVENT(release_evt, drv_release_buffered_frames,
1295         TP_PROTO(struct ieee80211_local *local,
1296                  struct ieee80211_sta *sta,
1297                  u16 tids, int num_frames,
1298                  enum ieee80211_frame_release_type reason,
1299                  bool more_data),
1300
1301         TP_ARGS(local, sta, tids, num_frames, reason, more_data)
1302 );
1303
1304 DEFINE_EVENT(release_evt, drv_allow_buffered_frames,
1305         TP_PROTO(struct ieee80211_local *local,
1306                  struct ieee80211_sta *sta,
1307                  u16 tids, int num_frames,
1308                  enum ieee80211_frame_release_type reason,
1309                  bool more_data),
1310
1311         TP_ARGS(local, sta, tids, num_frames, reason, more_data)
1312 );
1313
1314 TRACE_EVENT(drv_get_rssi,
1315         TP_PROTO(struct ieee80211_local *local, struct ieee80211_sta *sta,
1316                  s8 rssi, int ret),
1317
1318         TP_ARGS(local, sta, rssi, ret),
1319
1320         TP_STRUCT__entry(
1321                 LOCAL_ENTRY
1322                 STA_ENTRY
1323                 __field(s8, rssi)
1324                 __field(int, ret)
1325         ),
1326
1327         TP_fast_assign(
1328                 LOCAL_ASSIGN;
1329                 STA_ASSIGN;
1330                 __entry->rssi = rssi;
1331                 __entry->ret = ret;
1332         ),
1333
1334         TP_printk(
1335                 LOCAL_PR_FMT STA_PR_FMT " rssi:%d ret:%d",
1336                 LOCAL_PR_ARG, STA_PR_ARG, __entry->rssi, __entry->ret
1337         )
1338 );
1339
1340 DEFINE_EVENT(local_sdata_evt, drv_mgd_prepare_tx,
1341         TP_PROTO(struct ieee80211_local *local,
1342                  struct ieee80211_sub_if_data *sdata),
1343
1344         TP_ARGS(local, sdata)
1345 );
1346
1347 DECLARE_EVENT_CLASS(local_chanctx,
1348         TP_PROTO(struct ieee80211_local *local,
1349                  struct ieee80211_chanctx *ctx),
1350
1351         TP_ARGS(local, ctx),
1352
1353         TP_STRUCT__entry(
1354                 LOCAL_ENTRY
1355                 CHANCTX_ENTRY
1356         ),
1357
1358         TP_fast_assign(
1359                 LOCAL_ASSIGN;
1360                 CHANCTX_ASSIGN;
1361         ),
1362
1363         TP_printk(
1364                 LOCAL_PR_FMT CHANCTX_PR_FMT,
1365                 LOCAL_PR_ARG, CHANCTX_PR_ARG
1366         )
1367 );
1368
1369 DEFINE_EVENT(local_chanctx, drv_add_chanctx,
1370         TP_PROTO(struct ieee80211_local *local,
1371                  struct ieee80211_chanctx *ctx),
1372         TP_ARGS(local, ctx)
1373 );
1374
1375 DEFINE_EVENT(local_chanctx, drv_remove_chanctx,
1376         TP_PROTO(struct ieee80211_local *local,
1377                  struct ieee80211_chanctx *ctx),
1378         TP_ARGS(local, ctx)
1379 );
1380
1381 TRACE_EVENT(drv_change_chanctx,
1382         TP_PROTO(struct ieee80211_local *local,
1383                  struct ieee80211_chanctx *ctx,
1384                  u32 changed),
1385
1386         TP_ARGS(local, ctx, changed),
1387
1388         TP_STRUCT__entry(
1389                 LOCAL_ENTRY
1390                 CHANCTX_ENTRY
1391                 __field(u32, changed)
1392         ),
1393
1394         TP_fast_assign(
1395                 LOCAL_ASSIGN;
1396                 CHANCTX_ASSIGN;
1397                 __entry->changed = changed;
1398         ),
1399
1400         TP_printk(
1401                 LOCAL_PR_FMT CHANCTX_PR_FMT " changed:%#x",
1402                 LOCAL_PR_ARG, CHANCTX_PR_ARG, __entry->changed
1403         )
1404 );
1405
1406 DECLARE_EVENT_CLASS(local_sdata_chanctx,
1407         TP_PROTO(struct ieee80211_local *local,
1408                  struct ieee80211_sub_if_data *sdata,
1409                  struct ieee80211_chanctx *ctx),
1410
1411         TP_ARGS(local, sdata, ctx),
1412
1413         TP_STRUCT__entry(
1414                 LOCAL_ENTRY
1415                 VIF_ENTRY
1416                 CHANCTX_ENTRY
1417         ),
1418
1419         TP_fast_assign(
1420                 LOCAL_ASSIGN;
1421                 VIF_ASSIGN;
1422                 CHANCTX_ASSIGN;
1423         ),
1424
1425         TP_printk(
1426                 LOCAL_PR_FMT VIF_PR_FMT CHANCTX_PR_FMT,
1427                 LOCAL_PR_ARG, VIF_PR_ARG, CHANCTX_PR_ARG
1428         )
1429 );
1430
1431 DEFINE_EVENT(local_sdata_chanctx, drv_assign_vif_chanctx,
1432         TP_PROTO(struct ieee80211_local *local,
1433                  struct ieee80211_sub_if_data *sdata,
1434                  struct ieee80211_chanctx *ctx),
1435         TP_ARGS(local, sdata, ctx)
1436 );
1437
1438 DEFINE_EVENT(local_sdata_chanctx, drv_unassign_vif_chanctx,
1439         TP_PROTO(struct ieee80211_local *local,
1440                  struct ieee80211_sub_if_data *sdata,
1441                  struct ieee80211_chanctx *ctx),
1442         TP_ARGS(local, sdata, ctx)
1443 );
1444
1445 TRACE_EVENT(drv_start_ap,
1446         TP_PROTO(struct ieee80211_local *local,
1447                  struct ieee80211_sub_if_data *sdata,
1448                  struct ieee80211_bss_conf *info),
1449
1450         TP_ARGS(local, sdata, info),
1451
1452         TP_STRUCT__entry(
1453                 LOCAL_ENTRY
1454                 VIF_ENTRY
1455                 __field(u8, dtimper)
1456                 __field(u16, bcnint)
1457                 __dynamic_array(u8, ssid, info->ssid_len);
1458                 __field(bool, hidden_ssid);
1459         ),
1460
1461         TP_fast_assign(
1462                 LOCAL_ASSIGN;
1463                 VIF_ASSIGN;
1464                 __entry->dtimper = info->dtim_period;
1465                 __entry->bcnint = info->beacon_int;
1466                 memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len);
1467                 __entry->hidden_ssid = info->hidden_ssid;
1468         ),
1469
1470         TP_printk(
1471                 LOCAL_PR_FMT  VIF_PR_FMT,
1472                 LOCAL_PR_ARG, VIF_PR_ARG
1473         )
1474 );
1475
1476 DEFINE_EVENT(local_sdata_evt, drv_stop_ap,
1477         TP_PROTO(struct ieee80211_local *local,
1478                  struct ieee80211_sub_if_data *sdata),
1479         TP_ARGS(local, sdata)
1480 );
1481
1482 DEFINE_EVENT(local_only_evt, drv_restart_complete,
1483         TP_PROTO(struct ieee80211_local *local),
1484         TP_ARGS(local)
1485 );
1486
1487 #if IS_ENABLED(CONFIG_IPV6)
1488 DEFINE_EVENT(local_sdata_evt, drv_ipv6_addr_change,
1489         TP_PROTO(struct ieee80211_local *local,
1490                  struct ieee80211_sub_if_data *sdata),
1491         TP_ARGS(local, sdata)
1492 );
1493 #endif
1494
1495 TRACE_EVENT(drv_join_ibss,
1496         TP_PROTO(struct ieee80211_local *local,
1497                  struct ieee80211_sub_if_data *sdata,
1498                  struct ieee80211_bss_conf *info),
1499
1500         TP_ARGS(local, sdata, info),
1501
1502         TP_STRUCT__entry(
1503                 LOCAL_ENTRY
1504                 VIF_ENTRY
1505                 __field(u8, dtimper)
1506                 __field(u16, bcnint)
1507                 __dynamic_array(u8, ssid, info->ssid_len);
1508         ),
1509
1510         TP_fast_assign(
1511                 LOCAL_ASSIGN;
1512                 VIF_ASSIGN;
1513                 __entry->dtimper = info->dtim_period;
1514                 __entry->bcnint = info->beacon_int;
1515                 memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len);
1516         ),
1517
1518         TP_printk(
1519                 LOCAL_PR_FMT  VIF_PR_FMT,
1520                 LOCAL_PR_ARG, VIF_PR_ARG
1521         )
1522 );
1523
1524 DEFINE_EVENT(local_sdata_evt, drv_leave_ibss,
1525         TP_PROTO(struct ieee80211_local *local,
1526                  struct ieee80211_sub_if_data *sdata),
1527         TP_ARGS(local, sdata)
1528 );
1529
1530 /*
1531  * Tracing for API calls that drivers call.
1532  */
1533
1534 TRACE_EVENT(api_start_tx_ba_session,
1535         TP_PROTO(struct ieee80211_sta *sta, u16 tid),
1536
1537         TP_ARGS(sta, tid),
1538
1539         TP_STRUCT__entry(
1540                 STA_ENTRY
1541                 __field(u16, tid)
1542         ),
1543
1544         TP_fast_assign(
1545                 STA_ASSIGN;
1546                 __entry->tid = tid;
1547         ),
1548
1549         TP_printk(
1550                 STA_PR_FMT " tid:%d",
1551                 STA_PR_ARG, __entry->tid
1552         )
1553 );
1554
1555 TRACE_EVENT(api_start_tx_ba_cb,
1556         TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
1557
1558         TP_ARGS(sdata, ra, tid),
1559
1560         TP_STRUCT__entry(
1561                 VIF_ENTRY
1562                 __array(u8, ra, ETH_ALEN)
1563                 __field(u16, tid)
1564         ),
1565
1566         TP_fast_assign(
1567                 VIF_ASSIGN;
1568                 memcpy(__entry->ra, ra, ETH_ALEN);
1569                 __entry->tid = tid;
1570         ),
1571
1572         TP_printk(
1573                 VIF_PR_FMT " ra:%pM tid:%d",
1574                 VIF_PR_ARG, __entry->ra, __entry->tid
1575         )
1576 );
1577
1578 TRACE_EVENT(api_stop_tx_ba_session,
1579         TP_PROTO(struct ieee80211_sta *sta, u16 tid),
1580
1581         TP_ARGS(sta, tid),
1582
1583         TP_STRUCT__entry(
1584                 STA_ENTRY
1585                 __field(u16, tid)
1586         ),
1587
1588         TP_fast_assign(
1589                 STA_ASSIGN;
1590                 __entry->tid = tid;
1591         ),
1592
1593         TP_printk(
1594                 STA_PR_FMT " tid:%d",
1595                 STA_PR_ARG, __entry->tid
1596         )
1597 );
1598
1599 TRACE_EVENT(api_stop_tx_ba_cb,
1600         TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
1601
1602         TP_ARGS(sdata, ra, tid),
1603
1604         TP_STRUCT__entry(
1605                 VIF_ENTRY
1606                 __array(u8, ra, ETH_ALEN)
1607                 __field(u16, tid)
1608         ),
1609
1610         TP_fast_assign(
1611                 VIF_ASSIGN;
1612                 memcpy(__entry->ra, ra, ETH_ALEN);
1613                 __entry->tid = tid;
1614         ),
1615
1616         TP_printk(
1617                 VIF_PR_FMT " ra:%pM tid:%d",
1618                 VIF_PR_ARG, __entry->ra, __entry->tid
1619         )
1620 );
1621
1622 DEFINE_EVENT(local_only_evt, api_restart_hw,
1623         TP_PROTO(struct ieee80211_local *local),
1624         TP_ARGS(local)
1625 );
1626
1627 TRACE_EVENT(api_beacon_loss,
1628         TP_PROTO(struct ieee80211_sub_if_data *sdata),
1629
1630         TP_ARGS(sdata),
1631
1632         TP_STRUCT__entry(
1633                 VIF_ENTRY
1634         ),
1635
1636         TP_fast_assign(
1637                 VIF_ASSIGN;
1638         ),
1639
1640         TP_printk(
1641                 VIF_PR_FMT,
1642                 VIF_PR_ARG
1643         )
1644 );
1645
1646 TRACE_EVENT(api_connection_loss,
1647         TP_PROTO(struct ieee80211_sub_if_data *sdata),
1648
1649         TP_ARGS(sdata),
1650
1651         TP_STRUCT__entry(
1652                 VIF_ENTRY
1653         ),
1654
1655         TP_fast_assign(
1656                 VIF_ASSIGN;
1657         ),
1658
1659         TP_printk(
1660                 VIF_PR_FMT,
1661                 VIF_PR_ARG
1662         )
1663 );
1664
1665 TRACE_EVENT(api_cqm_rssi_notify,
1666         TP_PROTO(struct ieee80211_sub_if_data *sdata,
1667                  enum nl80211_cqm_rssi_threshold_event rssi_event),
1668
1669         TP_ARGS(sdata, rssi_event),
1670
1671         TP_STRUCT__entry(
1672                 VIF_ENTRY
1673                 __field(u32, rssi_event)
1674         ),
1675
1676         TP_fast_assign(
1677                 VIF_ASSIGN;
1678                 __entry->rssi_event = rssi_event;
1679         ),
1680
1681         TP_printk(
1682                 VIF_PR_FMT " event:%d",
1683                 VIF_PR_ARG, __entry->rssi_event
1684         )
1685 );
1686
1687 TRACE_EVENT(api_scan_completed,
1688         TP_PROTO(struct ieee80211_local *local, bool aborted),
1689
1690         TP_ARGS(local, aborted),
1691
1692         TP_STRUCT__entry(
1693                 LOCAL_ENTRY
1694                 __field(bool, aborted)
1695         ),
1696
1697         TP_fast_assign(
1698                 LOCAL_ASSIGN;
1699                 __entry->aborted = aborted;
1700         ),
1701
1702         TP_printk(
1703                 LOCAL_PR_FMT " aborted:%d",
1704                 LOCAL_PR_ARG, __entry->aborted
1705         )
1706 );
1707
1708 TRACE_EVENT(api_sched_scan_results,
1709         TP_PROTO(struct ieee80211_local *local),
1710
1711         TP_ARGS(local),
1712
1713         TP_STRUCT__entry(
1714                 LOCAL_ENTRY
1715         ),
1716
1717         TP_fast_assign(
1718                 LOCAL_ASSIGN;
1719         ),
1720
1721         TP_printk(
1722                 LOCAL_PR_FMT, LOCAL_PR_ARG
1723         )
1724 );
1725
1726 TRACE_EVENT(api_sched_scan_stopped,
1727         TP_PROTO(struct ieee80211_local *local),
1728
1729         TP_ARGS(local),
1730
1731         TP_STRUCT__entry(
1732                 LOCAL_ENTRY
1733         ),
1734
1735         TP_fast_assign(
1736                 LOCAL_ASSIGN;
1737         ),
1738
1739         TP_printk(
1740                 LOCAL_PR_FMT, LOCAL_PR_ARG
1741         )
1742 );
1743
1744 TRACE_EVENT(api_sta_block_awake,
1745         TP_PROTO(struct ieee80211_local *local,
1746                  struct ieee80211_sta *sta, bool block),
1747
1748         TP_ARGS(local, sta, block),
1749
1750         TP_STRUCT__entry(
1751                 LOCAL_ENTRY
1752                 STA_ENTRY
1753                 __field(bool, block)
1754         ),
1755
1756         TP_fast_assign(
1757                 LOCAL_ASSIGN;
1758                 STA_ASSIGN;
1759                 __entry->block = block;
1760         ),
1761
1762         TP_printk(
1763                 LOCAL_PR_FMT STA_PR_FMT " block:%d",
1764                 LOCAL_PR_ARG, STA_PR_ARG, __entry->block
1765         )
1766 );
1767
1768 TRACE_EVENT(api_chswitch_done,
1769         TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success),
1770
1771         TP_ARGS(sdata, success),
1772
1773         TP_STRUCT__entry(
1774                 VIF_ENTRY
1775                 __field(bool, success)
1776         ),
1777
1778         TP_fast_assign(
1779                 VIF_ASSIGN;
1780                 __entry->success = success;
1781         ),
1782
1783         TP_printk(
1784                 VIF_PR_FMT " success=%d",
1785                 VIF_PR_ARG, __entry->success
1786         )
1787 );
1788
1789 DEFINE_EVENT(local_only_evt, api_ready_on_channel,
1790         TP_PROTO(struct ieee80211_local *local),
1791         TP_ARGS(local)
1792 );
1793
1794 DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired,
1795         TP_PROTO(struct ieee80211_local *local),
1796         TP_ARGS(local)
1797 );
1798
1799 TRACE_EVENT(api_gtk_rekey_notify,
1800         TP_PROTO(struct ieee80211_sub_if_data *sdata,
1801                  const u8 *bssid, const u8 *replay_ctr),
1802
1803         TP_ARGS(sdata, bssid, replay_ctr),
1804
1805         TP_STRUCT__entry(
1806                 VIF_ENTRY
1807                 __array(u8, bssid, ETH_ALEN)
1808                 __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
1809         ),
1810
1811         TP_fast_assign(
1812                 VIF_ASSIGN;
1813                 memcpy(__entry->bssid, bssid, ETH_ALEN);
1814                 memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN);
1815         ),
1816
1817         TP_printk(VIF_PR_FMT, VIF_PR_ARG)
1818 );
1819
1820 TRACE_EVENT(api_enable_rssi_reports,
1821         TP_PROTO(struct ieee80211_sub_if_data *sdata,
1822                  int rssi_min_thold, int rssi_max_thold),
1823
1824         TP_ARGS(sdata, rssi_min_thold, rssi_max_thold),
1825
1826         TP_STRUCT__entry(
1827                 VIF_ENTRY
1828                 __field(int, rssi_min_thold)
1829                 __field(int, rssi_max_thold)
1830         ),
1831
1832         TP_fast_assign(
1833                 VIF_ASSIGN;
1834                 __entry->rssi_min_thold = rssi_min_thold;
1835                 __entry->rssi_max_thold = rssi_max_thold;
1836         ),
1837
1838         TP_printk(
1839                 VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d",
1840                 VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold
1841         )
1842 );
1843
1844 TRACE_EVENT(api_eosp,
1845         TP_PROTO(struct ieee80211_local *local,
1846                  struct ieee80211_sta *sta),
1847
1848         TP_ARGS(local, sta),
1849
1850         TP_STRUCT__entry(
1851                 LOCAL_ENTRY
1852                 STA_ENTRY
1853         ),
1854
1855         TP_fast_assign(
1856                 LOCAL_ASSIGN;
1857                 STA_ASSIGN;
1858         ),
1859
1860         TP_printk(
1861                 LOCAL_PR_FMT STA_PR_FMT,
1862                 LOCAL_PR_ARG, STA_PR_ARG
1863         )
1864 );
1865
1866 /*
1867  * Tracing for internal functions
1868  * (which may also be called in response to driver calls)
1869  */
1870
1871 TRACE_EVENT(wake_queue,
1872         TP_PROTO(struct ieee80211_local *local, u16 queue,
1873                  enum queue_stop_reason reason),
1874
1875         TP_ARGS(local, queue, reason),
1876
1877         TP_STRUCT__entry(
1878                 LOCAL_ENTRY
1879                 __field(u16, queue)
1880                 __field(u32, reason)
1881         ),
1882
1883         TP_fast_assign(
1884                 LOCAL_ASSIGN;
1885                 __entry->queue = queue;
1886                 __entry->reason = reason;
1887         ),
1888
1889         TP_printk(
1890                 LOCAL_PR_FMT " queue:%d, reason:%d",
1891                 LOCAL_PR_ARG, __entry->queue, __entry->reason
1892         )
1893 );
1894
1895 TRACE_EVENT(stop_queue,
1896         TP_PROTO(struct ieee80211_local *local, u16 queue,
1897                  enum queue_stop_reason reason),
1898
1899         TP_ARGS(local, queue, reason),
1900
1901         TP_STRUCT__entry(
1902                 LOCAL_ENTRY
1903                 __field(u16, queue)
1904                 __field(u32, reason)
1905         ),
1906
1907         TP_fast_assign(
1908                 LOCAL_ASSIGN;
1909                 __entry->queue = queue;
1910                 __entry->reason = reason;
1911         ),
1912
1913         TP_printk(
1914                 LOCAL_PR_FMT " queue:%d, reason:%d",
1915                 LOCAL_PR_ARG, __entry->queue, __entry->reason
1916         )
1917 );
1918
1919 TRACE_EVENT(drv_set_default_unicast_key,
1920         TP_PROTO(struct ieee80211_local *local,
1921                  struct ieee80211_sub_if_data *sdata,
1922                  int key_idx),
1923
1924         TP_ARGS(local, sdata, key_idx),
1925
1926         TP_STRUCT__entry(
1927                 LOCAL_ENTRY
1928                 VIF_ENTRY
1929                 __field(int, key_idx)
1930         ),
1931
1932         TP_fast_assign(
1933                 LOCAL_ASSIGN;
1934                 VIF_ASSIGN;
1935                 __entry->key_idx = key_idx;
1936         ),
1937
1938         TP_printk(LOCAL_PR_FMT VIF_PR_FMT " key_idx:%d",
1939                   LOCAL_PR_ARG, VIF_PR_ARG, __entry->key_idx)
1940 );
1941
1942 TRACE_EVENT(api_radar_detected,
1943         TP_PROTO(struct ieee80211_local *local),
1944
1945         TP_ARGS(local),
1946
1947         TP_STRUCT__entry(
1948                 LOCAL_ENTRY
1949         ),
1950
1951         TP_fast_assign(
1952                 LOCAL_ASSIGN;
1953         ),
1954
1955         TP_printk(
1956                 LOCAL_PR_FMT " radar detected",
1957                 LOCAL_PR_ARG
1958         )
1959 );
1960
1961 TRACE_EVENT(drv_channel_switch_beacon,
1962         TP_PROTO(struct ieee80211_local *local,
1963                  struct ieee80211_sub_if_data *sdata,
1964                  struct cfg80211_chan_def *chandef),
1965
1966         TP_ARGS(local, sdata, chandef),
1967
1968         TP_STRUCT__entry(
1969                 LOCAL_ENTRY
1970                 VIF_ENTRY
1971                 CHANDEF_ENTRY
1972         ),
1973
1974         TP_fast_assign(
1975                 LOCAL_ASSIGN;
1976                 VIF_ASSIGN;
1977                 CHANDEF_ASSIGN(chandef);
1978         ),
1979
1980         TP_printk(
1981                 LOCAL_PR_FMT VIF_PR_FMT " channel switch to " CHANDEF_PR_FMT,
1982                 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG
1983         )
1984 );
1985
1986
1987 #ifdef CONFIG_MAC80211_MESSAGE_TRACING
1988 #undef TRACE_SYSTEM
1989 #define TRACE_SYSTEM mac80211_msg
1990
1991 #define MAX_MSG_LEN     100
1992
1993 DECLARE_EVENT_CLASS(mac80211_msg_event,
1994         TP_PROTO(struct va_format *vaf),
1995
1996         TP_ARGS(vaf),
1997
1998         TP_STRUCT__entry(
1999                 __dynamic_array(char, msg, MAX_MSG_LEN)
2000         ),
2001
2002         TP_fast_assign(
2003                 WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
2004                                        MAX_MSG_LEN, vaf->fmt,
2005                                        *vaf->va) >= MAX_MSG_LEN);
2006         ),
2007
2008         TP_printk("%s", __get_str(msg))
2009 );
2010
2011 DEFINE_EVENT(mac80211_msg_event, mac80211_info,
2012         TP_PROTO(struct va_format *vaf),
2013         TP_ARGS(vaf)
2014 );
2015 DEFINE_EVENT(mac80211_msg_event, mac80211_dbg,
2016         TP_PROTO(struct va_format *vaf),
2017         TP_ARGS(vaf)
2018 );
2019 DEFINE_EVENT(mac80211_msg_event, mac80211_err,
2020         TP_PROTO(struct va_format *vaf),
2021         TP_ARGS(vaf)
2022 );
2023 #endif
2024
2025 #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
2026
2027 #undef TRACE_INCLUDE_PATH
2028 #define TRACE_INCLUDE_PATH .
2029 #undef TRACE_INCLUDE_FILE
2030 #define TRACE_INCLUDE_FILE trace
2031 #include <trace/define_trace.h>