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