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