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