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