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