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