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