• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/net/mac80211/
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, ...) \
11static inline void trace_ ## name(proto) {}
12#endif
13
14#undef TRACE_SYSTEM
15#define TRACE_SYSTEM mac80211
16
17#define MAXNAME		32
18#define LOCAL_ENTRY	__array(char, wiphy_name, 32)
19#define LOCAL_ASSIGN	strlcpy(__entry->wiphy_name, wiphy_name(local->hw.wiphy), MAXNAME)
20#define LOCAL_PR_FMT	"%s"
21#define LOCAL_PR_ARG	__entry->wiphy_name
22
23#define STA_ENTRY	__array(char, sta_addr, ETH_ALEN)
24#define STA_ASSIGN	(sta ? memcpy(__entry->sta_addr, sta->addr, ETH_ALEN) : memset(__entry->sta_addr, 0, ETH_ALEN))
25#define STA_PR_FMT	" sta:%pM"
26#define STA_PR_ARG	__entry->sta_addr
27
28#define VIF_ENTRY	__field(enum nl80211_iftype, vif_type) __field(void *, sdata) \
29			__string(vif_name, sdata->dev ? sdata->dev->name : "<nodev>")
30#define VIF_ASSIGN	__entry->vif_type = sdata->vif.type; __entry->sdata = sdata; \
31			__assign_str(vif_name, sdata->dev ? sdata->dev->name : "<nodev>")
32#define VIF_PR_FMT	" vif:%s(%d)"
33#define VIF_PR_ARG	__get_str(vif_name), __entry->vif_type
34
35/*
36 * Tracing for driver callbacks.
37 */
38
39TRACE_EVENT(drv_return_void,
40	TP_PROTO(struct ieee80211_local *local),
41	TP_ARGS(local),
42	TP_STRUCT__entry(
43		LOCAL_ENTRY
44	),
45	TP_fast_assign(
46		LOCAL_ASSIGN;
47	),
48	TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG)
49);
50
51TRACE_EVENT(drv_return_int,
52	TP_PROTO(struct ieee80211_local *local, int ret),
53	TP_ARGS(local, ret),
54	TP_STRUCT__entry(
55		LOCAL_ENTRY
56		__field(int, ret)
57	),
58	TP_fast_assign(
59		LOCAL_ASSIGN;
60		__entry->ret = ret;
61	),
62	TP_printk(LOCAL_PR_FMT " - %d", LOCAL_PR_ARG, __entry->ret)
63);
64
65TRACE_EVENT(drv_return_u64,
66	TP_PROTO(struct ieee80211_local *local, u64 ret),
67	TP_ARGS(local, ret),
68	TP_STRUCT__entry(
69		LOCAL_ENTRY
70		__field(u64, ret)
71	),
72	TP_fast_assign(
73		LOCAL_ASSIGN;
74		__entry->ret = ret;
75	),
76	TP_printk(LOCAL_PR_FMT " - %llu", LOCAL_PR_ARG, __entry->ret)
77);
78
79TRACE_EVENT(drv_start,
80	TP_PROTO(struct ieee80211_local *local),
81
82	TP_ARGS(local),
83
84	TP_STRUCT__entry(
85		LOCAL_ENTRY
86	),
87
88	TP_fast_assign(
89		LOCAL_ASSIGN;
90	),
91
92	TP_printk(
93		LOCAL_PR_FMT, LOCAL_PR_ARG
94	)
95);
96
97TRACE_EVENT(drv_stop,
98	TP_PROTO(struct ieee80211_local *local),
99
100	TP_ARGS(local),
101
102	TP_STRUCT__entry(
103		LOCAL_ENTRY
104	),
105
106	TP_fast_assign(
107		LOCAL_ASSIGN;
108	),
109
110	TP_printk(
111		LOCAL_PR_FMT, LOCAL_PR_ARG
112	)
113);
114
115TRACE_EVENT(drv_add_interface,
116	TP_PROTO(struct ieee80211_local *local,
117		 struct ieee80211_sub_if_data *sdata),
118
119	TP_ARGS(local, sdata),
120
121	TP_STRUCT__entry(
122		LOCAL_ENTRY
123		VIF_ENTRY
124		__array(char, addr, 6)
125	),
126
127	TP_fast_assign(
128		LOCAL_ASSIGN;
129		VIF_ASSIGN;
130		memcpy(__entry->addr, sdata->vif.addr, 6);
131	),
132
133	TP_printk(
134		LOCAL_PR_FMT  VIF_PR_FMT " addr:%pM",
135		LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr
136	)
137);
138
139TRACE_EVENT(drv_remove_interface,
140	TP_PROTO(struct ieee80211_local *local, struct ieee80211_sub_if_data *sdata),
141
142	TP_ARGS(local, sdata),
143
144	TP_STRUCT__entry(
145		LOCAL_ENTRY
146		VIF_ENTRY
147		__array(char, addr, 6)
148	),
149
150	TP_fast_assign(
151		LOCAL_ASSIGN;
152		VIF_ASSIGN;
153		memcpy(__entry->addr, sdata->vif.addr, 6);
154	),
155
156	TP_printk(
157		LOCAL_PR_FMT  VIF_PR_FMT " addr:%pM",
158		LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr
159	)
160);
161
162TRACE_EVENT(drv_config,
163	TP_PROTO(struct ieee80211_local *local,
164		 u32 changed),
165
166	TP_ARGS(local, changed),
167
168	TP_STRUCT__entry(
169		LOCAL_ENTRY
170		__field(u32, changed)
171		__field(u32, flags)
172		__field(int, power_level)
173		__field(int, dynamic_ps_timeout)
174		__field(int, max_sleep_period)
175		__field(u16, listen_interval)
176		__field(u8, long_frame_max_tx_count)
177		__field(u8, short_frame_max_tx_count)
178		__field(int, center_freq)
179		__field(int, channel_type)
180		__field(int, smps)
181	),
182
183	TP_fast_assign(
184		LOCAL_ASSIGN;
185		__entry->changed = changed;
186		__entry->flags = local->hw.conf.flags;
187		__entry->power_level = local->hw.conf.power_level;
188		__entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout;
189		__entry->max_sleep_period = local->hw.conf.max_sleep_period;
190		__entry->listen_interval = local->hw.conf.listen_interval;
191		__entry->long_frame_max_tx_count = local->hw.conf.long_frame_max_tx_count;
192		__entry->short_frame_max_tx_count = local->hw.conf.short_frame_max_tx_count;
193		__entry->center_freq = local->hw.conf.channel->center_freq;
194		__entry->channel_type = local->hw.conf.channel_type;
195		__entry->smps = local->hw.conf.smps_mode;
196	),
197
198	TP_printk(
199		LOCAL_PR_FMT " ch:%#x freq:%d",
200		LOCAL_PR_ARG, __entry->changed, __entry->center_freq
201	)
202);
203
204TRACE_EVENT(drv_bss_info_changed,
205	TP_PROTO(struct ieee80211_local *local,
206		 struct ieee80211_sub_if_data *sdata,
207		 struct ieee80211_bss_conf *info,
208		 u32 changed),
209
210	TP_ARGS(local, sdata, info, changed),
211
212	TP_STRUCT__entry(
213		LOCAL_ENTRY
214		VIF_ENTRY
215		__field(bool, assoc)
216		__field(u16, aid)
217		__field(bool, cts)
218		__field(bool, shortpre)
219		__field(bool, shortslot)
220		__field(u8, dtimper)
221		__field(u16, bcnint)
222		__field(u16, assoc_cap)
223		__field(u64, timestamp)
224		__field(u32, basic_rates)
225		__field(u32, changed)
226		__field(bool, enable_beacon)
227		__field(u16, ht_operation_mode)
228	),
229
230	TP_fast_assign(
231		LOCAL_ASSIGN;
232		VIF_ASSIGN;
233		__entry->changed = changed;
234		__entry->aid = info->aid;
235		__entry->assoc = info->assoc;
236		__entry->shortpre = info->use_short_preamble;
237		__entry->cts = info->use_cts_prot;
238		__entry->shortslot = info->use_short_slot;
239		__entry->dtimper = info->dtim_period;
240		__entry->bcnint = info->beacon_int;
241		__entry->assoc_cap = info->assoc_capability;
242		__entry->timestamp = info->timestamp;
243		__entry->basic_rates = info->basic_rates;
244		__entry->enable_beacon = info->enable_beacon;
245		__entry->ht_operation_mode = info->ht_operation_mode;
246	),
247
248	TP_printk(
249		LOCAL_PR_FMT  VIF_PR_FMT " changed:%#x",
250		LOCAL_PR_ARG, VIF_PR_ARG, __entry->changed
251	)
252);
253
254TRACE_EVENT(drv_prepare_multicast,
255	TP_PROTO(struct ieee80211_local *local, int mc_count),
256
257	TP_ARGS(local, mc_count),
258
259	TP_STRUCT__entry(
260		LOCAL_ENTRY
261		__field(int, mc_count)
262	),
263
264	TP_fast_assign(
265		LOCAL_ASSIGN;
266		__entry->mc_count = mc_count;
267	),
268
269	TP_printk(
270		LOCAL_PR_FMT " prepare mc (%d)",
271		LOCAL_PR_ARG, __entry->mc_count
272	)
273);
274
275TRACE_EVENT(drv_configure_filter,
276	TP_PROTO(struct ieee80211_local *local,
277		 unsigned int changed_flags,
278		 unsigned int *total_flags,
279		 u64 multicast),
280
281	TP_ARGS(local, changed_flags, total_flags, multicast),
282
283	TP_STRUCT__entry(
284		LOCAL_ENTRY
285		__field(unsigned int, changed)
286		__field(unsigned int, total)
287		__field(u64, multicast)
288	),
289
290	TP_fast_assign(
291		LOCAL_ASSIGN;
292		__entry->changed = changed_flags;
293		__entry->total = *total_flags;
294		__entry->multicast = multicast;
295	),
296
297	TP_printk(
298		LOCAL_PR_FMT " changed:%#x total:%#x",
299		LOCAL_PR_ARG, __entry->changed, __entry->total
300	)
301);
302
303TRACE_EVENT(drv_set_tim,
304	TP_PROTO(struct ieee80211_local *local,
305		 struct ieee80211_sta *sta, bool set),
306
307	TP_ARGS(local, sta, set),
308
309	TP_STRUCT__entry(
310		LOCAL_ENTRY
311		STA_ENTRY
312		__field(bool, set)
313	),
314
315	TP_fast_assign(
316		LOCAL_ASSIGN;
317		STA_ASSIGN;
318		__entry->set = set;
319	),
320
321	TP_printk(
322		LOCAL_PR_FMT STA_PR_FMT " set:%d",
323		LOCAL_PR_ARG, STA_PR_FMT, __entry->set
324	)
325);
326
327TRACE_EVENT(drv_set_key,
328	TP_PROTO(struct ieee80211_local *local,
329		 enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata,
330		 struct ieee80211_sta *sta,
331		 struct ieee80211_key_conf *key),
332
333	TP_ARGS(local, cmd, sdata, sta, key),
334
335	TP_STRUCT__entry(
336		LOCAL_ENTRY
337		VIF_ENTRY
338		STA_ENTRY
339		__field(enum ieee80211_key_alg, alg)
340		__field(u8, hw_key_idx)
341		__field(u8, flags)
342		__field(s8, keyidx)
343	),
344
345	TP_fast_assign(
346		LOCAL_ASSIGN;
347		VIF_ASSIGN;
348		STA_ASSIGN;
349		__entry->alg = key->alg;
350		__entry->flags = key->flags;
351		__entry->keyidx = key->keyidx;
352		__entry->hw_key_idx = key->hw_key_idx;
353	),
354
355	TP_printk(
356		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
357		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
358	)
359);
360
361TRACE_EVENT(drv_update_tkip_key,
362	TP_PROTO(struct ieee80211_local *local,
363		 struct ieee80211_sub_if_data *sdata,
364		 struct ieee80211_key_conf *conf,
365		 struct ieee80211_sta *sta, u32 iv32),
366
367	TP_ARGS(local, sdata, conf, sta, iv32),
368
369	TP_STRUCT__entry(
370		LOCAL_ENTRY
371		VIF_ENTRY
372		STA_ENTRY
373		__field(u32, iv32)
374	),
375
376	TP_fast_assign(
377		LOCAL_ASSIGN;
378		VIF_ASSIGN;
379		STA_ASSIGN;
380		__entry->iv32 = iv32;
381	),
382
383	TP_printk(
384		LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x",
385		LOCAL_PR_ARG,VIF_PR_ARG,STA_PR_ARG, __entry->iv32
386	)
387);
388
389TRACE_EVENT(drv_hw_scan,
390	TP_PROTO(struct ieee80211_local *local,
391		 struct ieee80211_sub_if_data *sdata,
392		 struct cfg80211_scan_request *req),
393
394	TP_ARGS(local, sdata, req),
395
396	TP_STRUCT__entry(
397		LOCAL_ENTRY
398		VIF_ENTRY
399	),
400
401	TP_fast_assign(
402		LOCAL_ASSIGN;
403		VIF_ASSIGN;
404	),
405
406	TP_printk(
407		LOCAL_PR_FMT VIF_PR_FMT,
408		LOCAL_PR_ARG,VIF_PR_ARG
409	)
410);
411
412TRACE_EVENT(drv_sw_scan_start,
413	TP_PROTO(struct ieee80211_local *local),
414
415	TP_ARGS(local),
416
417	TP_STRUCT__entry(
418		LOCAL_ENTRY
419	),
420
421	TP_fast_assign(
422		LOCAL_ASSIGN;
423	),
424
425	TP_printk(
426		LOCAL_PR_FMT, LOCAL_PR_ARG
427	)
428);
429
430TRACE_EVENT(drv_sw_scan_complete,
431	TP_PROTO(struct ieee80211_local *local),
432
433	TP_ARGS(local),
434
435	TP_STRUCT__entry(
436		LOCAL_ENTRY
437	),
438
439	TP_fast_assign(
440		LOCAL_ASSIGN;
441	),
442
443	TP_printk(
444		LOCAL_PR_FMT, LOCAL_PR_ARG
445	)
446);
447
448TRACE_EVENT(drv_get_stats,
449	TP_PROTO(struct ieee80211_local *local,
450		 struct ieee80211_low_level_stats *stats,
451		 int ret),
452
453	TP_ARGS(local, stats, ret),
454
455	TP_STRUCT__entry(
456		LOCAL_ENTRY
457		__field(int, ret)
458		__field(unsigned int, ackfail)
459		__field(unsigned int, rtsfail)
460		__field(unsigned int, fcserr)
461		__field(unsigned int, rtssucc)
462	),
463
464	TP_fast_assign(
465		LOCAL_ASSIGN;
466		__entry->ret = ret;
467		__entry->ackfail = stats->dot11ACKFailureCount;
468		__entry->rtsfail = stats->dot11RTSFailureCount;
469		__entry->fcserr = stats->dot11FCSErrorCount;
470		__entry->rtssucc = stats->dot11RTSSuccessCount;
471	),
472
473	TP_printk(
474		LOCAL_PR_FMT " ret:%d",
475		LOCAL_PR_ARG, __entry->ret
476	)
477);
478
479TRACE_EVENT(drv_get_tkip_seq,
480	TP_PROTO(struct ieee80211_local *local,
481		 u8 hw_key_idx, u32 *iv32, u16 *iv16),
482
483	TP_ARGS(local, hw_key_idx, iv32, iv16),
484
485	TP_STRUCT__entry(
486		LOCAL_ENTRY
487		__field(u8, hw_key_idx)
488		__field(u32, iv32)
489		__field(u16, iv16)
490	),
491
492	TP_fast_assign(
493		LOCAL_ASSIGN;
494		__entry->hw_key_idx = hw_key_idx;
495		__entry->iv32 = *iv32;
496		__entry->iv16 = *iv16;
497	),
498
499	TP_printk(
500		LOCAL_PR_FMT, LOCAL_PR_ARG
501	)
502);
503
504TRACE_EVENT(drv_set_rts_threshold,
505	TP_PROTO(struct ieee80211_local *local, u32 value),
506
507	TP_ARGS(local, value),
508
509	TP_STRUCT__entry(
510		LOCAL_ENTRY
511		__field(u32, value)
512	),
513
514	TP_fast_assign(
515		LOCAL_ASSIGN;
516		__entry->value = value;
517	),
518
519	TP_printk(
520		LOCAL_PR_FMT " value:%d",
521		LOCAL_PR_ARG, __entry->value
522	)
523);
524
525TRACE_EVENT(drv_set_coverage_class,
526	TP_PROTO(struct ieee80211_local *local, u8 value),
527
528	TP_ARGS(local, value),
529
530	TP_STRUCT__entry(
531		LOCAL_ENTRY
532		__field(u8, value)
533	),
534
535	TP_fast_assign(
536		LOCAL_ASSIGN;
537		__entry->value = value;
538	),
539
540	TP_printk(
541		LOCAL_PR_FMT " value:%d",
542		LOCAL_PR_ARG, __entry->value
543	)
544);
545
546TRACE_EVENT(drv_sta_notify,
547	TP_PROTO(struct ieee80211_local *local,
548		 struct ieee80211_sub_if_data *sdata,
549		 enum sta_notify_cmd cmd,
550		 struct ieee80211_sta *sta),
551
552	TP_ARGS(local, sdata, cmd, sta),
553
554	TP_STRUCT__entry(
555		LOCAL_ENTRY
556		VIF_ENTRY
557		STA_ENTRY
558		__field(u32, cmd)
559	),
560
561	TP_fast_assign(
562		LOCAL_ASSIGN;
563		VIF_ASSIGN;
564		STA_ASSIGN;
565		__entry->cmd = cmd;
566	),
567
568	TP_printk(
569		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " cmd:%d",
570		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd
571	)
572);
573
574TRACE_EVENT(drv_sta_add,
575	TP_PROTO(struct ieee80211_local *local,
576		 struct ieee80211_sub_if_data *sdata,
577		 struct ieee80211_sta *sta),
578
579	TP_ARGS(local, sdata, sta),
580
581	TP_STRUCT__entry(
582		LOCAL_ENTRY
583		VIF_ENTRY
584		STA_ENTRY
585	),
586
587	TP_fast_assign(
588		LOCAL_ASSIGN;
589		VIF_ASSIGN;
590		STA_ASSIGN;
591	),
592
593	TP_printk(
594		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
595		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
596	)
597);
598
599TRACE_EVENT(drv_sta_remove,
600	TP_PROTO(struct ieee80211_local *local,
601		 struct ieee80211_sub_if_data *sdata,
602		 struct ieee80211_sta *sta),
603
604	TP_ARGS(local, sdata, sta),
605
606	TP_STRUCT__entry(
607		LOCAL_ENTRY
608		VIF_ENTRY
609		STA_ENTRY
610	),
611
612	TP_fast_assign(
613		LOCAL_ASSIGN;
614		VIF_ASSIGN;
615		STA_ASSIGN;
616	),
617
618	TP_printk(
619		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
620		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
621	)
622);
623
624TRACE_EVENT(drv_conf_tx,
625	TP_PROTO(struct ieee80211_local *local, u16 queue,
626		 const struct ieee80211_tx_queue_params *params),
627
628	TP_ARGS(local, queue, params),
629
630	TP_STRUCT__entry(
631		LOCAL_ENTRY
632		__field(u16, queue)
633		__field(u16, txop)
634		__field(u16, cw_min)
635		__field(u16, cw_max)
636		__field(u8, aifs)
637	),
638
639	TP_fast_assign(
640		LOCAL_ASSIGN;
641		__entry->queue = queue;
642		__entry->txop = params->txop;
643		__entry->cw_max = params->cw_max;
644		__entry->cw_min = params->cw_min;
645		__entry->aifs = params->aifs;
646	),
647
648	TP_printk(
649		LOCAL_PR_FMT " queue:%d",
650		LOCAL_PR_ARG, __entry->queue
651	)
652);
653
654TRACE_EVENT(drv_get_tsf,
655	TP_PROTO(struct ieee80211_local *local),
656
657	TP_ARGS(local),
658
659	TP_STRUCT__entry(
660		LOCAL_ENTRY
661	),
662
663	TP_fast_assign(
664		LOCAL_ASSIGN;
665	),
666
667	TP_printk(
668		LOCAL_PR_FMT,
669		LOCAL_PR_ARG
670	)
671);
672
673TRACE_EVENT(drv_set_tsf,
674	TP_PROTO(struct ieee80211_local *local, u64 tsf),
675
676	TP_ARGS(local, tsf),
677
678	TP_STRUCT__entry(
679		LOCAL_ENTRY
680		__field(u64, tsf)
681	),
682
683	TP_fast_assign(
684		LOCAL_ASSIGN;
685		__entry->tsf = tsf;
686	),
687
688	TP_printk(
689		LOCAL_PR_FMT " tsf:%llu",
690		LOCAL_PR_ARG, (unsigned long long)__entry->tsf
691	)
692);
693
694TRACE_EVENT(drv_reset_tsf,
695	TP_PROTO(struct ieee80211_local *local),
696
697	TP_ARGS(local),
698
699	TP_STRUCT__entry(
700		LOCAL_ENTRY
701	),
702
703	TP_fast_assign(
704		LOCAL_ASSIGN;
705	),
706
707	TP_printk(
708		LOCAL_PR_FMT, LOCAL_PR_ARG
709	)
710);
711
712TRACE_EVENT(drv_tx_last_beacon,
713	TP_PROTO(struct ieee80211_local *local),
714
715	TP_ARGS(local),
716
717	TP_STRUCT__entry(
718		LOCAL_ENTRY
719	),
720
721	TP_fast_assign(
722		LOCAL_ASSIGN;
723	),
724
725	TP_printk(
726		LOCAL_PR_FMT,
727		LOCAL_PR_ARG
728	)
729);
730
731TRACE_EVENT(drv_ampdu_action,
732	TP_PROTO(struct ieee80211_local *local,
733		 struct ieee80211_sub_if_data *sdata,
734		 enum ieee80211_ampdu_mlme_action action,
735		 struct ieee80211_sta *sta, u16 tid,
736		 u16 *ssn),
737
738	TP_ARGS(local, sdata, action, sta, tid, ssn),
739
740	TP_STRUCT__entry(
741		LOCAL_ENTRY
742		STA_ENTRY
743		__field(u32, action)
744		__field(u16, tid)
745		__field(u16, ssn)
746		VIF_ENTRY
747	),
748
749	TP_fast_assign(
750		LOCAL_ASSIGN;
751		VIF_ASSIGN;
752		STA_ASSIGN;
753		__entry->action = action;
754		__entry->tid = tid;
755		__entry->ssn = ssn ? *ssn : 0;
756	),
757
758	TP_printk(
759		LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " action:%d tid:%d",
760		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->action, __entry->tid
761	)
762);
763
764TRACE_EVENT(drv_get_survey,
765	TP_PROTO(struct ieee80211_local *local, int idx,
766		 struct survey_info *survey),
767
768	TP_ARGS(local, idx, survey),
769
770	TP_STRUCT__entry(
771		LOCAL_ENTRY
772		__field(int, idx)
773	),
774
775	TP_fast_assign(
776		LOCAL_ASSIGN;
777		__entry->idx = idx;
778	),
779
780	TP_printk(
781		LOCAL_PR_FMT " idx:%d",
782		LOCAL_PR_ARG, __entry->idx
783	)
784);
785
786TRACE_EVENT(drv_flush,
787	TP_PROTO(struct ieee80211_local *local, bool drop),
788
789	TP_ARGS(local, drop),
790
791	TP_STRUCT__entry(
792		LOCAL_ENTRY
793		__field(bool, drop)
794	),
795
796	TP_fast_assign(
797		LOCAL_ASSIGN;
798		__entry->drop = drop;
799	),
800
801	TP_printk(
802		LOCAL_PR_FMT " drop:%d",
803		LOCAL_PR_ARG, __entry->drop
804	)
805);
806
807TRACE_EVENT(drv_channel_switch,
808	TP_PROTO(struct ieee80211_local *local,
809		 struct ieee80211_channel_switch *ch_switch),
810
811	TP_ARGS(local, ch_switch),
812
813	TP_STRUCT__entry(
814		LOCAL_ENTRY
815		__field(u64, timestamp)
816		__field(bool, block_tx)
817		__field(u16, freq)
818		__field(u8, count)
819	),
820
821	TP_fast_assign(
822		LOCAL_ASSIGN;
823		__entry->timestamp = ch_switch->timestamp;
824		__entry->block_tx = ch_switch->block_tx;
825		__entry->freq = ch_switch->channel->center_freq;
826		__entry->count = ch_switch->count;
827	),
828
829	TP_printk(
830		LOCAL_PR_FMT " new freq:%u count:%d",
831		LOCAL_PR_ARG, __entry->freq, __entry->count
832	)
833);
834
835/*
836 * Tracing for API calls that drivers call.
837 */
838
839TRACE_EVENT(api_start_tx_ba_session,
840	TP_PROTO(struct ieee80211_sta *sta, u16 tid),
841
842	TP_ARGS(sta, tid),
843
844	TP_STRUCT__entry(
845		STA_ENTRY
846		__field(u16, tid)
847	),
848
849	TP_fast_assign(
850		STA_ASSIGN;
851		__entry->tid = tid;
852	),
853
854	TP_printk(
855		STA_PR_FMT " tid:%d",
856		STA_PR_ARG, __entry->tid
857	)
858);
859
860TRACE_EVENT(api_start_tx_ba_cb,
861	TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
862
863	TP_ARGS(sdata, ra, tid),
864
865	TP_STRUCT__entry(
866		VIF_ENTRY
867		__array(u8, ra, ETH_ALEN)
868		__field(u16, tid)
869	),
870
871	TP_fast_assign(
872		VIF_ASSIGN;
873		memcpy(__entry->ra, ra, ETH_ALEN);
874		__entry->tid = tid;
875	),
876
877	TP_printk(
878		VIF_PR_FMT " ra:%pM tid:%d",
879		VIF_PR_ARG, __entry->ra, __entry->tid
880	)
881);
882
883TRACE_EVENT(api_stop_tx_ba_session,
884	TP_PROTO(struct ieee80211_sta *sta, u16 tid),
885
886	TP_ARGS(sta, tid),
887
888	TP_STRUCT__entry(
889		STA_ENTRY
890		__field(u16, tid)
891	),
892
893	TP_fast_assign(
894		STA_ASSIGN;
895		__entry->tid = tid;
896	),
897
898	TP_printk(
899		STA_PR_FMT " tid:%d",
900		STA_PR_ARG, __entry->tid
901	)
902);
903
904TRACE_EVENT(api_stop_tx_ba_cb,
905	TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
906
907	TP_ARGS(sdata, ra, tid),
908
909	TP_STRUCT__entry(
910		VIF_ENTRY
911		__array(u8, ra, ETH_ALEN)
912		__field(u16, tid)
913	),
914
915	TP_fast_assign(
916		VIF_ASSIGN;
917		memcpy(__entry->ra, ra, ETH_ALEN);
918		__entry->tid = tid;
919	),
920
921	TP_printk(
922		VIF_PR_FMT " ra:%pM tid:%d",
923		VIF_PR_ARG, __entry->ra, __entry->tid
924	)
925);
926
927TRACE_EVENT(api_restart_hw,
928	TP_PROTO(struct ieee80211_local *local),
929
930	TP_ARGS(local),
931
932	TP_STRUCT__entry(
933		LOCAL_ENTRY
934	),
935
936	TP_fast_assign(
937		LOCAL_ASSIGN;
938	),
939
940	TP_printk(
941		LOCAL_PR_FMT,
942		LOCAL_PR_ARG
943	)
944);
945
946TRACE_EVENT(api_beacon_loss,
947	TP_PROTO(struct ieee80211_sub_if_data *sdata),
948
949	TP_ARGS(sdata),
950
951	TP_STRUCT__entry(
952		VIF_ENTRY
953	),
954
955	TP_fast_assign(
956		VIF_ASSIGN;
957	),
958
959	TP_printk(
960		VIF_PR_FMT,
961		VIF_PR_ARG
962	)
963);
964
965TRACE_EVENT(api_connection_loss,
966	TP_PROTO(struct ieee80211_sub_if_data *sdata),
967
968	TP_ARGS(sdata),
969
970	TP_STRUCT__entry(
971		VIF_ENTRY
972	),
973
974	TP_fast_assign(
975		VIF_ASSIGN;
976	),
977
978	TP_printk(
979		VIF_PR_FMT,
980		VIF_PR_ARG
981	)
982);
983
984TRACE_EVENT(api_cqm_rssi_notify,
985	TP_PROTO(struct ieee80211_sub_if_data *sdata,
986		 enum nl80211_cqm_rssi_threshold_event rssi_event),
987
988	TP_ARGS(sdata, rssi_event),
989
990	TP_STRUCT__entry(
991		VIF_ENTRY
992		__field(u32, rssi_event)
993	),
994
995	TP_fast_assign(
996		VIF_ASSIGN;
997		__entry->rssi_event = rssi_event;
998	),
999
1000	TP_printk(
1001		VIF_PR_FMT " event:%d",
1002		VIF_PR_ARG, __entry->rssi_event
1003	)
1004);
1005
1006TRACE_EVENT(api_scan_completed,
1007	TP_PROTO(struct ieee80211_local *local, bool aborted),
1008
1009	TP_ARGS(local, aborted),
1010
1011	TP_STRUCT__entry(
1012		LOCAL_ENTRY
1013		__field(bool, aborted)
1014	),
1015
1016	TP_fast_assign(
1017		LOCAL_ASSIGN;
1018		__entry->aborted = aborted;
1019	),
1020
1021	TP_printk(
1022		LOCAL_PR_FMT " aborted:%d",
1023		LOCAL_PR_ARG, __entry->aborted
1024	)
1025);
1026
1027TRACE_EVENT(api_sta_block_awake,
1028	TP_PROTO(struct ieee80211_local *local,
1029		 struct ieee80211_sta *sta, bool block),
1030
1031	TP_ARGS(local, sta, block),
1032
1033	TP_STRUCT__entry(
1034		LOCAL_ENTRY
1035		STA_ENTRY
1036		__field(bool, block)
1037	),
1038
1039	TP_fast_assign(
1040		LOCAL_ASSIGN;
1041		STA_ASSIGN;
1042		__entry->block = block;
1043	),
1044
1045	TP_printk(
1046		LOCAL_PR_FMT STA_PR_FMT " block:%d",
1047		LOCAL_PR_ARG, STA_PR_FMT, __entry->block
1048	)
1049);
1050
1051TRACE_EVENT(api_chswitch_done,
1052	TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success),
1053
1054	TP_ARGS(sdata, success),
1055
1056	TP_STRUCT__entry(
1057		VIF_ENTRY
1058		__field(bool, success)
1059	),
1060
1061	TP_fast_assign(
1062		VIF_ASSIGN;
1063		__entry->success = success;
1064	),
1065
1066	TP_printk(
1067		VIF_PR_FMT " success=%d",
1068		VIF_PR_ARG, __entry->success
1069	)
1070);
1071
1072/*
1073 * Tracing for internal functions
1074 * (which may also be called in response to driver calls)
1075 */
1076
1077TRACE_EVENT(wake_queue,
1078	TP_PROTO(struct ieee80211_local *local, u16 queue,
1079		 enum queue_stop_reason reason),
1080
1081	TP_ARGS(local, queue, reason),
1082
1083	TP_STRUCT__entry(
1084		LOCAL_ENTRY
1085		__field(u16, queue)
1086		__field(u32, reason)
1087	),
1088
1089	TP_fast_assign(
1090		LOCAL_ASSIGN;
1091		__entry->queue = queue;
1092		__entry->reason = reason;
1093	),
1094
1095	TP_printk(
1096		LOCAL_PR_FMT " queue:%d, reason:%d",
1097		LOCAL_PR_ARG, __entry->queue, __entry->reason
1098	)
1099);
1100
1101TRACE_EVENT(stop_queue,
1102	TP_PROTO(struct ieee80211_local *local, u16 queue,
1103		 enum queue_stop_reason reason),
1104
1105	TP_ARGS(local, queue, reason),
1106
1107	TP_STRUCT__entry(
1108		LOCAL_ENTRY
1109		__field(u16, queue)
1110		__field(u32, reason)
1111	),
1112
1113	TP_fast_assign(
1114		LOCAL_ASSIGN;
1115		__entry->queue = queue;
1116		__entry->reason = reason;
1117	),
1118
1119	TP_printk(
1120		LOCAL_PR_FMT " queue:%d, reason:%d",
1121		LOCAL_PR_ARG, __entry->queue, __entry->reason
1122	)
1123);
1124#endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
1125
1126#undef TRACE_INCLUDE_PATH
1127#define TRACE_INCLUDE_PATH .
1128#undef TRACE_INCLUDE_FILE
1129#define TRACE_INCLUDE_FILE driver-trace
1130#include <trace/define_trace.h>
1131