xref: /openbmc/linux/net/mac80211/trace.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2f59374ebSSara Sharon /*
3f59374ebSSara Sharon  * Portions of this file
4fafd2bceSSara Sharon  * Copyright(c) 2016-2017 Intel Deutschland GmbH
5f276e20bSJohannes Berg  * Copyright (C) 2018 - 2023 Intel Corporation
6f59374ebSSara Sharon  */
7f59374ebSSara Sharon 
8011ad0e9SJohannes Berg #if !defined(__MAC80211_DRIVER_TRACE) || defined(TRACE_HEADER_MULTI_READ)
9011ad0e9SJohannes Berg #define __MAC80211_DRIVER_TRACE
10011ad0e9SJohannes Berg 
11011ad0e9SJohannes Berg #include <linux/tracepoint.h>
12011ad0e9SJohannes Berg #include <net/mac80211.h>
13011ad0e9SJohannes Berg #include "ieee80211_i.h"
14011ad0e9SJohannes Berg 
15011ad0e9SJohannes Berg #undef TRACE_SYSTEM
16011ad0e9SJohannes Berg #define TRACE_SYSTEM mac80211
17011ad0e9SJohannes Berg 
18011ad0e9SJohannes Berg #define MAXNAME		32
19011ad0e9SJohannes Berg #define LOCAL_ENTRY	__array(char, wiphy_name, 32)
20011ad0e9SJohannes Berg #define LOCAL_ASSIGN	strscpy(__entry->wiphy_name, wiphy_name(local->hw.wiphy), MAXNAME)
21011ad0e9SJohannes Berg #define LOCAL_PR_FMT	"%s"
22011ad0e9SJohannes Berg #define LOCAL_PR_ARG	__entry->wiphy_name
23011ad0e9SJohannes Berg 
24011ad0e9SJohannes Berg #define STA_ENTRY	__array(char, sta_addr, ETH_ALEN)
2547d76e31SMiaohe Lin #define STA_ASSIGN	(sta ? memcpy(__entry->sta_addr, sta->addr, ETH_ALEN) : \
2647d76e31SMiaohe Lin 				eth_zero_addr(__entry->sta_addr))
278a4d32f3SArik Nemtsov #define STA_NAMED_ASSIGN(s)	memcpy(__entry->sta_addr, (s)->addr, ETH_ALEN)
28011ad0e9SJohannes Berg #define STA_PR_FMT	" sta:%pM"
29011ad0e9SJohannes Berg #define STA_PR_ARG	__entry->sta_addr
30011ad0e9SJohannes Berg 
31011ad0e9SJohannes Berg #define VIF_ENTRY	__field(enum nl80211_iftype, vif_type) __field(void *, sdata)	\
32011ad0e9SJohannes Berg 			__field(bool, p2p)						\
33f9ac71bfSEliad Peller 			__string(vif_name, sdata->name)
34011ad0e9SJohannes Berg #define VIF_ASSIGN	__entry->vif_type = sdata->vif.type; __entry->sdata = sdata;	\
35011ad0e9SJohannes Berg 			__entry->p2p = sdata->vif.p2p;					\
36f9ac71bfSEliad Peller 			__assign_str(vif_name, sdata->name)
37011ad0e9SJohannes Berg #define VIF_PR_FMT	" vif:%s(%d%s)"
38011ad0e9SJohannes Berg #define VIF_PR_ARG	__get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : ""
39011ad0e9SJohannes Berg 
405a32aff3SJohannes Berg #define CHANDEF_ENTRY	__field(u32, control_freq)					\
41b6011960SThomas Pedersen 			__field(u32, freq_offset)					\
424bf88530SJohannes Berg 			__field(u32, chan_width)					\
434bf88530SJohannes Berg 			__field(u32, center_freq1)					\
44b6011960SThomas Pedersen 			__field(u32, freq1_offset)					\
455a32aff3SJohannes Berg 			__field(u32, center_freq2)
465a32aff3SJohannes Berg #define CHANDEF_ASSIGN(c)							\
47254d3dfeSArik Nemtsov 			__entry->control_freq = (c) ? ((c)->chan ? (c)->chan->center_freq : 0) : 0;	\
48b6011960SThomas Pedersen 			__entry->freq_offset = (c) ? ((c)->chan ? (c)->chan->freq_offset : 0) : 0;	\
49254d3dfeSArik Nemtsov 			__entry->chan_width = (c) ? (c)->width : 0;			\
50254d3dfeSArik Nemtsov 			__entry->center_freq1 = (c) ? (c)->center_freq1 : 0;		\
51b6011960SThomas Pedersen 			__entry->freq1_offset = (c) ? (c)->freq1_offset : 0;		\
52254d3dfeSArik Nemtsov 			__entry->center_freq2 = (c) ? (c)->center_freq2 : 0;
53b6011960SThomas Pedersen #define CHANDEF_PR_FMT	" control:%d.%03d MHz width:%d center: %d.%03d/%d MHz"
54b6011960SThomas Pedersen #define CHANDEF_PR_ARG	__entry->control_freq, __entry->freq_offset, __entry->chan_width, \
55b6011960SThomas Pedersen 			__entry->center_freq1, __entry->freq1_offset, __entry->center_freq2
565a32aff3SJohannes Berg 
5721f659bfSEliad Peller #define MIN_CHANDEF_ENTRY								\
5821f659bfSEliad Peller 			__field(u32, min_control_freq)					\
59b6011960SThomas Pedersen 			__field(u32, min_freq_offset)					\
6021f659bfSEliad Peller 			__field(u32, min_chan_width)					\
6121f659bfSEliad Peller 			__field(u32, min_center_freq1)					\
62b6011960SThomas Pedersen 			__field(u32, min_freq1_offset)					\
6321f659bfSEliad Peller 			__field(u32, min_center_freq2)
6421f659bfSEliad Peller 
6521f659bfSEliad Peller #define MIN_CHANDEF_ASSIGN(c)								\
6621f659bfSEliad Peller 			__entry->min_control_freq = (c)->chan ? (c)->chan->center_freq : 0;	\
67b6011960SThomas Pedersen 			__entry->min_freq_offset = (c)->chan ? (c)->chan->freq_offset : 0;	\
6821f659bfSEliad Peller 			__entry->min_chan_width = (c)->width;				\
6921f659bfSEliad Peller 			__entry->min_center_freq1 = (c)->center_freq1;			\
70*248e4776SJohannes Berg 			__entry->min_freq1_offset = (c)->freq1_offset;			\
7121f659bfSEliad Peller 			__entry->min_center_freq2 = (c)->center_freq2;
72b6011960SThomas Pedersen #define MIN_CHANDEF_PR_FMT	" min_control:%d.%03d MHz min_width:%d min_center: %d.%03d/%d MHz"
73b6011960SThomas Pedersen #define MIN_CHANDEF_PR_ARG	__entry->min_control_freq, __entry->min_freq_offset,	\
74b6011960SThomas Pedersen 			__entry->min_chan_width,					\
75b6011960SThomas Pedersen 			__entry->min_center_freq1, __entry->min_freq1_offset,		\
76b6011960SThomas Pedersen 			__entry->min_center_freq2
7721f659bfSEliad Peller 
785a32aff3SJohannes Berg #define CHANCTX_ENTRY	CHANDEF_ENTRY							\
7921f659bfSEliad Peller 			MIN_CHANDEF_ENTRY						\
8004ecd257SJohannes Berg 			__field(u8, rx_chains_static)					\
8104ecd257SJohannes Berg 			__field(u8, rx_chains_dynamic)
825a32aff3SJohannes Berg #define CHANCTX_ASSIGN	CHANDEF_ASSIGN(&ctx->conf.def)					\
8321f659bfSEliad Peller 			MIN_CHANDEF_ASSIGN(&ctx->conf.min_def)				\
8404ecd257SJohannes Berg 			__entry->rx_chains_static = ctx->conf.rx_chains_static;		\
8504ecd257SJohannes Berg 			__entry->rx_chains_dynamic = ctx->conf.rx_chains_dynamic
8621f659bfSEliad Peller #define CHANCTX_PR_FMT	CHANDEF_PR_FMT MIN_CHANDEF_PR_FMT " chains:%d/%d"
8721f659bfSEliad Peller #define CHANCTX_PR_ARG	CHANDEF_PR_ARG,	MIN_CHANDEF_PR_ARG,				\
8804ecd257SJohannes Berg 			__entry->rx_chains_static, __entry->rx_chains_dynamic
89c3645eacSMichal Kazior 
909352c19fSJohannes Berg #define KEY_ENTRY	__field(u32, cipher)						\
919352c19fSJohannes Berg 			__field(u8, hw_key_idx)						\
929352c19fSJohannes Berg 			__field(u8, flags)						\
939352c19fSJohannes Berg 			__field(s8, keyidx)
949352c19fSJohannes Berg #define KEY_ASSIGN(k)	__entry->cipher = (k)->cipher;					\
959352c19fSJohannes Berg 			__entry->flags = (k)->flags;					\
969352c19fSJohannes Berg 			__entry->keyidx = (k)->keyidx;					\
979352c19fSJohannes Berg 			__entry->hw_key_idx = (k)->hw_key_idx;
989352c19fSJohannes Berg #define KEY_PR_FMT	" cipher:0x%x, flags=%#x, keyidx=%d, hw_key_idx=%d"
999352c19fSJohannes Berg #define KEY_PR_ARG	__entry->cipher, __entry->flags, __entry->keyidx, __entry->hw_key_idx
1009352c19fSJohannes Berg 
10150ea05efSSara Sharon #define AMPDU_ACTION_ENTRY	__field(enum ieee80211_ampdu_mlme_action,		\
10250ea05efSSara Sharon 					ieee80211_ampdu_mlme_action)			\
10350ea05efSSara Sharon 				STA_ENTRY						\
10450ea05efSSara Sharon 				__field(u16, tid)					\
10550ea05efSSara Sharon 				__field(u16, ssn)					\
10641cbb0f5SLuca Coelho 				__field(u16, buf_size)					\
10750ea05efSSara Sharon 				__field(bool, amsdu)					\
1086dad28aeSEmmanuel Grumbach 				__field(u16, timeout)					\
1096dad28aeSEmmanuel Grumbach 				__field(u16, action)
11050ea05efSSara Sharon #define AMPDU_ACTION_ASSIGN	STA_NAMED_ASSIGN(params->sta);				\
11150ea05efSSara Sharon 				__entry->tid = params->tid;				\
11250ea05efSSara Sharon 				__entry->ssn = params->ssn;				\
11350ea05efSSara Sharon 				__entry->buf_size = params->buf_size;			\
11450ea05efSSara Sharon 				__entry->amsdu = params->amsdu;				\
1156dad28aeSEmmanuel Grumbach 				__entry->timeout = params->timeout;			\
1166dad28aeSEmmanuel Grumbach 				__entry->action = params->action;
1176dad28aeSEmmanuel Grumbach #define AMPDU_ACTION_PR_FMT	STA_PR_FMT " tid %d, ssn %d, buf_size %u, amsdu %d, timeout %d action %d"
11850ea05efSSara Sharon #define AMPDU_ACTION_PR_ARG	STA_PR_ARG, __entry->tid, __entry->ssn,			\
1196dad28aeSEmmanuel Grumbach 				__entry->buf_size, __entry->amsdu, __entry->timeout,	\
1206dad28aeSEmmanuel Grumbach 				__entry->action
121c3645eacSMichal Kazior 
122011ad0e9SJohannes Berg /*
123011ad0e9SJohannes Berg  * Tracing for driver callbacks.
124011ad0e9SJohannes Berg  */
125011ad0e9SJohannes Berg 
126011ad0e9SJohannes Berg DECLARE_EVENT_CLASS(local_only_evt,
127011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
128011ad0e9SJohannes Berg 	TP_ARGS(local),
129011ad0e9SJohannes Berg 	TP_STRUCT__entry(
130011ad0e9SJohannes Berg 		LOCAL_ENTRY
131011ad0e9SJohannes Berg 	),
132011ad0e9SJohannes Berg 	TP_fast_assign(
133011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
134011ad0e9SJohannes Berg 	),
135011ad0e9SJohannes Berg 	TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG)
136011ad0e9SJohannes Berg );
137011ad0e9SJohannes Berg 
138011ad0e9SJohannes Berg DECLARE_EVENT_CLASS(local_sdata_addr_evt,
139011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
140011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
141011ad0e9SJohannes Berg 	TP_ARGS(local, sdata),
142011ad0e9SJohannes Berg 
143011ad0e9SJohannes Berg 	TP_STRUCT__entry(
144011ad0e9SJohannes Berg 		LOCAL_ENTRY
145011ad0e9SJohannes Berg 		VIF_ENTRY
146d458cdf7SJoe Perches 		__array(char, addr, ETH_ALEN)
147011ad0e9SJohannes Berg 	),
148011ad0e9SJohannes Berg 
149011ad0e9SJohannes Berg 	TP_fast_assign(
150011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
151011ad0e9SJohannes Berg 		VIF_ASSIGN;
152d458cdf7SJoe Perches 		memcpy(__entry->addr, sdata->vif.addr, ETH_ALEN);
153011ad0e9SJohannes Berg 	),
154011ad0e9SJohannes Berg 
155011ad0e9SJohannes Berg 	TP_printk(
156011ad0e9SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT " addr:%pM",
157011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr
158011ad0e9SJohannes Berg 	)
159011ad0e9SJohannes Berg );
160011ad0e9SJohannes Berg 
161011ad0e9SJohannes Berg DECLARE_EVENT_CLASS(local_u32_evt,
162011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, u32 value),
163011ad0e9SJohannes Berg 	TP_ARGS(local, value),
164011ad0e9SJohannes Berg 
165011ad0e9SJohannes Berg 	TP_STRUCT__entry(
166011ad0e9SJohannes Berg 		LOCAL_ENTRY
167011ad0e9SJohannes Berg 		__field(u32, value)
168011ad0e9SJohannes Berg 	),
169011ad0e9SJohannes Berg 
170011ad0e9SJohannes Berg 	TP_fast_assign(
171011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
172011ad0e9SJohannes Berg 		__entry->value = value;
173011ad0e9SJohannes Berg 	),
174011ad0e9SJohannes Berg 
175011ad0e9SJohannes Berg 	TP_printk(
176011ad0e9SJohannes Berg 		LOCAL_PR_FMT " value:%d",
177011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->value
178011ad0e9SJohannes Berg 	)
179011ad0e9SJohannes Berg );
180011ad0e9SJohannes Berg 
181011ad0e9SJohannes Berg DECLARE_EVENT_CLASS(local_sdata_evt,
182011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
183011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
184011ad0e9SJohannes Berg 	TP_ARGS(local, sdata),
185011ad0e9SJohannes Berg 
186011ad0e9SJohannes Berg 	TP_STRUCT__entry(
187011ad0e9SJohannes Berg 		LOCAL_ENTRY
188011ad0e9SJohannes Berg 		VIF_ENTRY
189011ad0e9SJohannes Berg 	),
190011ad0e9SJohannes Berg 
191011ad0e9SJohannes Berg 	TP_fast_assign(
192011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
193011ad0e9SJohannes Berg 		VIF_ASSIGN;
194011ad0e9SJohannes Berg 	),
195011ad0e9SJohannes Berg 
196011ad0e9SJohannes Berg 	TP_printk(
197011ad0e9SJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT,
198011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG
199011ad0e9SJohannes Berg 	)
200011ad0e9SJohannes Berg );
201011ad0e9SJohannes Berg 
202011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, drv_return_void,
203011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
204011ad0e9SJohannes Berg 	TP_ARGS(local)
205011ad0e9SJohannes Berg );
206011ad0e9SJohannes Berg 
207011ad0e9SJohannes Berg TRACE_EVENT(drv_return_int,
208011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, int ret),
209011ad0e9SJohannes Berg 	TP_ARGS(local, ret),
210011ad0e9SJohannes Berg 	TP_STRUCT__entry(
211011ad0e9SJohannes Berg 		LOCAL_ENTRY
212011ad0e9SJohannes Berg 		__field(int, ret)
213011ad0e9SJohannes Berg 	),
214011ad0e9SJohannes Berg 	TP_fast_assign(
215011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
216011ad0e9SJohannes Berg 		__entry->ret = ret;
217011ad0e9SJohannes Berg 	),
218011ad0e9SJohannes Berg 	TP_printk(LOCAL_PR_FMT " - %d", LOCAL_PR_ARG, __entry->ret)
219011ad0e9SJohannes Berg );
220011ad0e9SJohannes Berg 
221011ad0e9SJohannes Berg TRACE_EVENT(drv_return_bool,
222011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, bool ret),
223011ad0e9SJohannes Berg 	TP_ARGS(local, ret),
224011ad0e9SJohannes Berg 	TP_STRUCT__entry(
225011ad0e9SJohannes Berg 		LOCAL_ENTRY
226011ad0e9SJohannes Berg 		__field(bool, ret)
227011ad0e9SJohannes Berg 	),
228011ad0e9SJohannes Berg 	TP_fast_assign(
229011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
230011ad0e9SJohannes Berg 		__entry->ret = ret;
231011ad0e9SJohannes Berg 	),
232011ad0e9SJohannes Berg 	TP_printk(LOCAL_PR_FMT " - %s", LOCAL_PR_ARG, (__entry->ret) ?
233011ad0e9SJohannes Berg 		  "true" : "false")
234011ad0e9SJohannes Berg );
235011ad0e9SJohannes Berg 
236cca674d4SAntonio Quartulli TRACE_EVENT(drv_return_u32,
237cca674d4SAntonio Quartulli 	TP_PROTO(struct ieee80211_local *local, u32 ret),
238cca674d4SAntonio Quartulli 	TP_ARGS(local, ret),
239cca674d4SAntonio Quartulli 	TP_STRUCT__entry(
240cca674d4SAntonio Quartulli 		LOCAL_ENTRY
241cca674d4SAntonio Quartulli 		__field(u32, ret)
242cca674d4SAntonio Quartulli 	),
243cca674d4SAntonio Quartulli 	TP_fast_assign(
244cca674d4SAntonio Quartulli 		LOCAL_ASSIGN;
245cca674d4SAntonio Quartulli 		__entry->ret = ret;
246cca674d4SAntonio Quartulli 	),
247cca674d4SAntonio Quartulli 	TP_printk(LOCAL_PR_FMT " - %u", LOCAL_PR_ARG, __entry->ret)
248cca674d4SAntonio Quartulli );
249cca674d4SAntonio Quartulli 
250011ad0e9SJohannes Berg TRACE_EVENT(drv_return_u64,
251011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, u64 ret),
252011ad0e9SJohannes Berg 	TP_ARGS(local, ret),
253011ad0e9SJohannes Berg 	TP_STRUCT__entry(
254011ad0e9SJohannes Berg 		LOCAL_ENTRY
255011ad0e9SJohannes Berg 		__field(u64, ret)
256011ad0e9SJohannes Berg 	),
257011ad0e9SJohannes Berg 	TP_fast_assign(
258011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
259011ad0e9SJohannes Berg 		__entry->ret = ret;
260011ad0e9SJohannes Berg 	),
261011ad0e9SJohannes Berg 	TP_printk(LOCAL_PR_FMT " - %llu", LOCAL_PR_ARG, __entry->ret)
262011ad0e9SJohannes Berg );
263011ad0e9SJohannes Berg 
264011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, drv_start,
265011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
266011ad0e9SJohannes Berg 	TP_ARGS(local)
267011ad0e9SJohannes Berg );
268011ad0e9SJohannes Berg 
269011ad0e9SJohannes Berg DEFINE_EVENT(local_u32_evt, drv_get_et_strings,
270011ad0e9SJohannes Berg 	     TP_PROTO(struct ieee80211_local *local, u32 sset),
271011ad0e9SJohannes Berg 	     TP_ARGS(local, sset)
272011ad0e9SJohannes Berg );
273011ad0e9SJohannes Berg 
274011ad0e9SJohannes Berg DEFINE_EVENT(local_u32_evt, drv_get_et_sset_count,
275011ad0e9SJohannes Berg 	     TP_PROTO(struct ieee80211_local *local, u32 sset),
276011ad0e9SJohannes Berg 	     TP_ARGS(local, sset)
277011ad0e9SJohannes Berg );
278011ad0e9SJohannes Berg 
279011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, drv_get_et_stats,
280011ad0e9SJohannes Berg 	     TP_PROTO(struct ieee80211_local *local),
281011ad0e9SJohannes Berg 	     TP_ARGS(local)
282011ad0e9SJohannes Berg );
283011ad0e9SJohannes Berg 
284011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, drv_suspend,
285011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
286011ad0e9SJohannes Berg 	TP_ARGS(local)
287011ad0e9SJohannes Berg );
288011ad0e9SJohannes Berg 
289011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, drv_resume,
290011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
291011ad0e9SJohannes Berg 	TP_ARGS(local)
292011ad0e9SJohannes Berg );
293011ad0e9SJohannes Berg 
294011ad0e9SJohannes Berg TRACE_EVENT(drv_set_wakeup,
295011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, bool enabled),
296011ad0e9SJohannes Berg 	TP_ARGS(local, enabled),
297011ad0e9SJohannes Berg 	TP_STRUCT__entry(
298011ad0e9SJohannes Berg 		LOCAL_ENTRY
299011ad0e9SJohannes Berg 		__field(bool, enabled)
300011ad0e9SJohannes Berg 	),
301011ad0e9SJohannes Berg 	TP_fast_assign(
302011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
303011ad0e9SJohannes Berg 		__entry->enabled = enabled;
304011ad0e9SJohannes Berg 	),
305011ad0e9SJohannes Berg 	TP_printk(LOCAL_PR_FMT " enabled:%d", LOCAL_PR_ARG, __entry->enabled)
306011ad0e9SJohannes Berg );
307011ad0e9SJohannes Berg 
308011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, drv_stop,
309011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
310011ad0e9SJohannes Berg 	TP_ARGS(local)
311011ad0e9SJohannes Berg );
312011ad0e9SJohannes Berg 
313011ad0e9SJohannes Berg DEFINE_EVENT(local_sdata_addr_evt, drv_add_interface,
314011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
315011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
316011ad0e9SJohannes Berg 	TP_ARGS(local, sdata)
317011ad0e9SJohannes Berg );
318011ad0e9SJohannes Berg 
319011ad0e9SJohannes Berg TRACE_EVENT(drv_change_interface,
320011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
321011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
322011ad0e9SJohannes Berg 		 enum nl80211_iftype type, bool p2p),
323011ad0e9SJohannes Berg 
324011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, type, p2p),
325011ad0e9SJohannes Berg 
326011ad0e9SJohannes Berg 	TP_STRUCT__entry(
327011ad0e9SJohannes Berg 		LOCAL_ENTRY
328011ad0e9SJohannes Berg 		VIF_ENTRY
329011ad0e9SJohannes Berg 		__field(u32, new_type)
330011ad0e9SJohannes Berg 		__field(bool, new_p2p)
331011ad0e9SJohannes Berg 	),
332011ad0e9SJohannes Berg 
333011ad0e9SJohannes Berg 	TP_fast_assign(
334011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
335011ad0e9SJohannes Berg 		VIF_ASSIGN;
336011ad0e9SJohannes Berg 		__entry->new_type = type;
337011ad0e9SJohannes Berg 		__entry->new_p2p = p2p;
338011ad0e9SJohannes Berg 	),
339011ad0e9SJohannes Berg 
340011ad0e9SJohannes Berg 	TP_printk(
341011ad0e9SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT " new type:%d%s",
342011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->new_type,
343011ad0e9SJohannes Berg 		__entry->new_p2p ? "/p2p" : ""
344011ad0e9SJohannes Berg 	)
345011ad0e9SJohannes Berg );
346011ad0e9SJohannes Berg 
347011ad0e9SJohannes Berg DEFINE_EVENT(local_sdata_addr_evt, drv_remove_interface,
348011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
349011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
350011ad0e9SJohannes Berg 	TP_ARGS(local, sdata)
351011ad0e9SJohannes Berg );
352011ad0e9SJohannes Berg 
353011ad0e9SJohannes Berg TRACE_EVENT(drv_config,
354011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
355011ad0e9SJohannes Berg 		 u32 changed),
356011ad0e9SJohannes Berg 
357011ad0e9SJohannes Berg 	TP_ARGS(local, changed),
358011ad0e9SJohannes Berg 
359011ad0e9SJohannes Berg 	TP_STRUCT__entry(
360011ad0e9SJohannes Berg 		LOCAL_ENTRY
361011ad0e9SJohannes Berg 		__field(u32, changed)
362011ad0e9SJohannes Berg 		__field(u32, flags)
363011ad0e9SJohannes Berg 		__field(int, power_level)
364011ad0e9SJohannes Berg 		__field(int, dynamic_ps_timeout)
365011ad0e9SJohannes Berg 		__field(u16, listen_interval)
366011ad0e9SJohannes Berg 		__field(u8, long_frame_max_tx_count)
367011ad0e9SJohannes Berg 		__field(u8, short_frame_max_tx_count)
368675a0b04SKarl Beldan 		CHANDEF_ENTRY
369011ad0e9SJohannes Berg 		__field(int, smps)
370011ad0e9SJohannes Berg 	),
371011ad0e9SJohannes Berg 
372011ad0e9SJohannes Berg 	TP_fast_assign(
373011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
374011ad0e9SJohannes Berg 		__entry->changed = changed;
375011ad0e9SJohannes Berg 		__entry->flags = local->hw.conf.flags;
376011ad0e9SJohannes Berg 		__entry->power_level = local->hw.conf.power_level;
377011ad0e9SJohannes Berg 		__entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout;
378011ad0e9SJohannes Berg 		__entry->listen_interval = local->hw.conf.listen_interval;
3793d01be72SJohannes Berg 		__entry->long_frame_max_tx_count =
3803d01be72SJohannes Berg 			local->hw.conf.long_frame_max_tx_count;
3813d01be72SJohannes Berg 		__entry->short_frame_max_tx_count =
3823d01be72SJohannes Berg 			local->hw.conf.short_frame_max_tx_count;
383675a0b04SKarl Beldan 		CHANDEF_ASSIGN(&local->hw.conf.chandef)
384011ad0e9SJohannes Berg 		__entry->smps = local->hw.conf.smps_mode;
385011ad0e9SJohannes Berg 	),
386011ad0e9SJohannes Berg 
387011ad0e9SJohannes Berg 	TP_printk(
388675a0b04SKarl Beldan 		LOCAL_PR_FMT " ch:%#x" CHANDEF_PR_FMT,
389675a0b04SKarl Beldan 		LOCAL_PR_ARG, __entry->changed, CHANDEF_PR_ARG
390011ad0e9SJohannes Berg 	)
391011ad0e9SJohannes Berg );
392011ad0e9SJohannes Berg 
3937b7090b4SJohannes Berg TRACE_EVENT(drv_vif_cfg_changed,
394011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
395011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
3967b7090b4SJohannes Berg 		 u64 changed),
397011ad0e9SJohannes Berg 
3987b7090b4SJohannes Berg 	TP_ARGS(local, sdata, changed),
399011ad0e9SJohannes Berg 
400011ad0e9SJohannes Berg 	TP_STRUCT__entry(
401011ad0e9SJohannes Berg 		LOCAL_ENTRY
402011ad0e9SJohannes Berg 		VIF_ENTRY
4037b7090b4SJohannes Berg 		__field(u64, changed)
404011ad0e9SJohannes Berg 		__field(bool, assoc)
4051724ffbcSJohannes Berg 		__field(bool, ibss_joined)
4061724ffbcSJohannes Berg 		__field(bool, ibss_creator)
407011ad0e9SJohannes Berg 		__field(u16, aid)
4087b7090b4SJohannes Berg 		__dynamic_array(u32, arp_addr_list,
4097b7090b4SJohannes Berg 				sdata->vif.cfg.arp_addr_cnt > IEEE80211_BSS_ARP_ADDR_LIST_LEN ?
4107b7090b4SJohannes Berg 					IEEE80211_BSS_ARP_ADDR_LIST_LEN :
4117b7090b4SJohannes Berg 					sdata->vif.cfg.arp_addr_cnt)
4127b7090b4SJohannes Berg 		__field(int, arp_addr_cnt)
4137b7090b4SJohannes Berg 		__dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len)
4147b7090b4SJohannes Berg 		__field(int, s1g)
4157b7090b4SJohannes Berg 		__field(bool, idle)
416a3b8008dSJohannes Berg 		__field(bool, ps)
4177b7090b4SJohannes Berg 	),
4187b7090b4SJohannes Berg 
4197b7090b4SJohannes Berg 	TP_fast_assign(
4207b7090b4SJohannes Berg 		LOCAL_ASSIGN;
4217b7090b4SJohannes Berg 		VIF_ASSIGN;
4227b7090b4SJohannes Berg 		__entry->changed = changed;
4237b7090b4SJohannes Berg 		__entry->aid = sdata->vif.cfg.aid;
4247b7090b4SJohannes Berg 		__entry->assoc = sdata->vif.cfg.assoc;
4257b7090b4SJohannes Berg 		__entry->ibss_joined = sdata->vif.cfg.ibss_joined;
4267b7090b4SJohannes Berg 		__entry->ibss_creator = sdata->vif.cfg.ibss_creator;
427a3b8008dSJohannes Berg 		__entry->ps = sdata->vif.cfg.ps;
4287b7090b4SJohannes Berg 
4297b7090b4SJohannes Berg 		__entry->arp_addr_cnt = sdata->vif.cfg.arp_addr_cnt;
4307b7090b4SJohannes Berg 		memcpy(__get_dynamic_array(arp_addr_list),
4317b7090b4SJohannes Berg 		       sdata->vif.cfg.arp_addr_list,
4327b7090b4SJohannes Berg 		       sizeof(u32) * (sdata->vif.cfg.arp_addr_cnt > IEEE80211_BSS_ARP_ADDR_LIST_LEN ?
4337b7090b4SJohannes Berg 					IEEE80211_BSS_ARP_ADDR_LIST_LEN :
4347b7090b4SJohannes Berg 					sdata->vif.cfg.arp_addr_cnt));
4357b7090b4SJohannes Berg 		memcpy(__get_dynamic_array(ssid),
4367b7090b4SJohannes Berg 		       sdata->vif.cfg.ssid,
4377b7090b4SJohannes Berg 		       sdata->vif.cfg.ssid_len);
4387b7090b4SJohannes Berg 		__entry->s1g = sdata->vif.cfg.s1g;
4397b7090b4SJohannes Berg 		__entry->idle = sdata->vif.cfg.idle;
4407b7090b4SJohannes Berg 	),
4417b7090b4SJohannes Berg 
4427b7090b4SJohannes Berg 	TP_printk(
4437b7090b4SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT " changed:%#llx",
4447b7090b4SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->changed
4457b7090b4SJohannes Berg 	)
4467b7090b4SJohannes Berg );
4477b7090b4SJohannes Berg 
4487b7090b4SJohannes Berg TRACE_EVENT(drv_link_info_changed,
4497b7090b4SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
4507b7090b4SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
451d8675a63SJohannes Berg 		 struct ieee80211_bss_conf *link_conf,
4527840bd46SGregory Greenman 		 u64 changed),
4537b7090b4SJohannes Berg 
4547840bd46SGregory Greenman 	TP_ARGS(local, sdata, link_conf, changed),
4557b7090b4SJohannes Berg 
4567b7090b4SJohannes Berg 	TP_STRUCT__entry(
4577b7090b4SJohannes Berg 		LOCAL_ENTRY
4587b7090b4SJohannes Berg 		VIF_ENTRY
4597b7090b4SJohannes Berg 		__field(u64, changed)
4607b7090b4SJohannes Berg 		__field(int, link_id)
461011ad0e9SJohannes Berg 		__field(bool, cts)
462011ad0e9SJohannes Berg 		__field(bool, shortpre)
463011ad0e9SJohannes Berg 		__field(bool, shortslot)
4641724ffbcSJohannes Berg 		__field(bool, enable_beacon)
465011ad0e9SJohannes Berg 		__field(u8, dtimper)
466011ad0e9SJohannes Berg 		__field(u16, bcnint)
467011ad0e9SJohannes Berg 		__field(u16, assoc_cap)
4688c358bcdSJohannes Berg 		__field(u64, sync_tsf)
4698c358bcdSJohannes Berg 		__field(u32, sync_device_ts)
470ef429dadSJohannes Berg 		__field(u8, sync_dtim_count)
471011ad0e9SJohannes Berg 		__field(u32, basic_rates)
47257fbcce3SJohannes Berg 		__array(int, mcast_rate, NUM_NL80211_BANDS)
473011ad0e9SJohannes Berg 		__field(u16, ht_operation_mode)
47404ae87a5SPeter Zijlstra 		__field(s32, cqm_rssi_thold)
47504ae87a5SPeter Zijlstra 		__field(s32, cqm_rssi_hyst)
47604ae87a5SPeter Zijlstra 		__field(u32, channel_width)
47704ae87a5SPeter Zijlstra 		__field(u32, channel_cfreq1)
478b6011960SThomas Pedersen 		__field(u32, channel_cfreq1_offset)
47904ae87a5SPeter Zijlstra 		__field(bool, qos)
48004ae87a5SPeter Zijlstra 		__field(bool, hidden_ssid)
4811ea6f9c0SJohannes Berg 		__field(int, txpower)
48267baf663SJanusz Dziedzic 		__field(u8, p2p_oppps_ctwindow)
483011ad0e9SJohannes Berg 	),
484011ad0e9SJohannes Berg 
485011ad0e9SJohannes Berg 	TP_fast_assign(
486011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
487011ad0e9SJohannes Berg 		VIF_ASSIGN;
488011ad0e9SJohannes Berg 		__entry->changed = changed;
4897840bd46SGregory Greenman 		__entry->link_id = link_conf->link_id;
4907ffc4b29SJohannes Berg 		__entry->shortpre = link_conf->use_short_preamble;
4917ffc4b29SJohannes Berg 		__entry->cts = link_conf->use_cts_prot;
4927ffc4b29SJohannes Berg 		__entry->shortslot = link_conf->use_short_slot;
4937ffc4b29SJohannes Berg 		__entry->enable_beacon = link_conf->enable_beacon;
4947ffc4b29SJohannes Berg 		__entry->dtimper = link_conf->dtim_period;
4957ffc4b29SJohannes Berg 		__entry->bcnint = link_conf->beacon_int;
4967ffc4b29SJohannes Berg 		__entry->assoc_cap = link_conf->assoc_capability;
4977ffc4b29SJohannes Berg 		__entry->sync_tsf = link_conf->sync_tsf;
4987ffc4b29SJohannes Berg 		__entry->sync_device_ts = link_conf->sync_device_ts;
4997ffc4b29SJohannes Berg 		__entry->sync_dtim_count = link_conf->sync_dtim_count;
5007ffc4b29SJohannes Berg 		__entry->basic_rates = link_conf->basic_rates;
5017ffc4b29SJohannes Berg 		memcpy(__entry->mcast_rate, link_conf->mcast_rate,
5021724ffbcSJohannes Berg 		       sizeof(__entry->mcast_rate));
5037ffc4b29SJohannes Berg 		__entry->ht_operation_mode = link_conf->ht_operation_mode;
5047ffc4b29SJohannes Berg 		__entry->cqm_rssi_thold = link_conf->cqm_rssi_thold;
5057ffc4b29SJohannes Berg 		__entry->cqm_rssi_hyst = link_conf->cqm_rssi_hyst;
5067ffc4b29SJohannes Berg 		__entry->channel_width = link_conf->chandef.width;
5077ffc4b29SJohannes Berg 		__entry->channel_cfreq1 = link_conf->chandef.center_freq1;
5087ffc4b29SJohannes Berg 		__entry->channel_cfreq1_offset = link_conf->chandef.freq1_offset;
5097ffc4b29SJohannes Berg 		__entry->qos = link_conf->qos;
5107ffc4b29SJohannes Berg 		__entry->hidden_ssid = link_conf->hidden_ssid;
5117ffc4b29SJohannes Berg 		__entry->txpower = link_conf->txpower;
5127ffc4b29SJohannes Berg 		__entry->p2p_oppps_ctwindow = link_conf->p2p_noa_attr.oppps_ctwindow;
513011ad0e9SJohannes Berg 	),
514011ad0e9SJohannes Berg 
515011ad0e9SJohannes Berg 	TP_printk(
5167b7090b4SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT " link_id:%d, changed:%#llx",
5177b7090b4SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id,
5187b7090b4SJohannes Berg 		__entry->changed
519011ad0e9SJohannes Berg 	)
520011ad0e9SJohannes Berg );
521011ad0e9SJohannes Berg 
522011ad0e9SJohannes Berg TRACE_EVENT(drv_prepare_multicast,
523011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, int mc_count),
524011ad0e9SJohannes Berg 
525011ad0e9SJohannes Berg 	TP_ARGS(local, mc_count),
526011ad0e9SJohannes Berg 
527011ad0e9SJohannes Berg 	TP_STRUCT__entry(
528011ad0e9SJohannes Berg 		LOCAL_ENTRY
529011ad0e9SJohannes Berg 		__field(int, mc_count)
530011ad0e9SJohannes Berg 	),
531011ad0e9SJohannes Berg 
532011ad0e9SJohannes Berg 	TP_fast_assign(
533011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
534011ad0e9SJohannes Berg 		__entry->mc_count = mc_count;
535011ad0e9SJohannes Berg 	),
536011ad0e9SJohannes Berg 
537011ad0e9SJohannes Berg 	TP_printk(
538011ad0e9SJohannes Berg 		LOCAL_PR_FMT " prepare mc (%d)",
539011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->mc_count
540011ad0e9SJohannes Berg 	)
541011ad0e9SJohannes Berg );
542011ad0e9SJohannes Berg 
543011ad0e9SJohannes Berg TRACE_EVENT(drv_configure_filter,
544011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
545011ad0e9SJohannes Berg 		 unsigned int changed_flags,
546011ad0e9SJohannes Berg 		 unsigned int *total_flags,
547011ad0e9SJohannes Berg 		 u64 multicast),
548011ad0e9SJohannes Berg 
549011ad0e9SJohannes Berg 	TP_ARGS(local, changed_flags, total_flags, multicast),
550011ad0e9SJohannes Berg 
551011ad0e9SJohannes Berg 	TP_STRUCT__entry(
552011ad0e9SJohannes Berg 		LOCAL_ENTRY
553011ad0e9SJohannes Berg 		__field(unsigned int, changed)
554011ad0e9SJohannes Berg 		__field(unsigned int, total)
555011ad0e9SJohannes Berg 		__field(u64, multicast)
556011ad0e9SJohannes Berg 	),
557011ad0e9SJohannes Berg 
558011ad0e9SJohannes Berg 	TP_fast_assign(
559011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
560011ad0e9SJohannes Berg 		__entry->changed = changed_flags;
561011ad0e9SJohannes Berg 		__entry->total = *total_flags;
562011ad0e9SJohannes Berg 		__entry->multicast = multicast;
563011ad0e9SJohannes Berg 	),
564011ad0e9SJohannes Berg 
565011ad0e9SJohannes Berg 	TP_printk(
566011ad0e9SJohannes Berg 		LOCAL_PR_FMT " changed:%#x total:%#x",
567011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->changed, __entry->total
568011ad0e9SJohannes Berg 	)
569011ad0e9SJohannes Berg );
570011ad0e9SJohannes Berg 
5711b09b556SAndrei Otcheretianski TRACE_EVENT(drv_config_iface_filter,
5721b09b556SAndrei Otcheretianski 	TP_PROTO(struct ieee80211_local *local,
5731b09b556SAndrei Otcheretianski 		 struct ieee80211_sub_if_data *sdata,
5741b09b556SAndrei Otcheretianski 		 unsigned int filter_flags,
5751b09b556SAndrei Otcheretianski 		 unsigned int changed_flags),
5761b09b556SAndrei Otcheretianski 
5771b09b556SAndrei Otcheretianski 	TP_ARGS(local, sdata, filter_flags, changed_flags),
5781b09b556SAndrei Otcheretianski 
5791b09b556SAndrei Otcheretianski 	TP_STRUCT__entry(
5801b09b556SAndrei Otcheretianski 		LOCAL_ENTRY
5811b09b556SAndrei Otcheretianski 		VIF_ENTRY
5821b09b556SAndrei Otcheretianski 		__field(unsigned int, filter_flags)
5831b09b556SAndrei Otcheretianski 		__field(unsigned int, changed_flags)
5841b09b556SAndrei Otcheretianski 	),
5851b09b556SAndrei Otcheretianski 
5861b09b556SAndrei Otcheretianski 	TP_fast_assign(
5871b09b556SAndrei Otcheretianski 		LOCAL_ASSIGN;
5881b09b556SAndrei Otcheretianski 		VIF_ASSIGN;
5891b09b556SAndrei Otcheretianski 		__entry->filter_flags = filter_flags;
5901b09b556SAndrei Otcheretianski 		__entry->changed_flags = changed_flags;
5911b09b556SAndrei Otcheretianski 	),
5921b09b556SAndrei Otcheretianski 
5931b09b556SAndrei Otcheretianski 	TP_printk(
5941b09b556SAndrei Otcheretianski 		LOCAL_PR_FMT VIF_PR_FMT
5951b09b556SAndrei Otcheretianski 		" filter_flags: %#x changed_flags: %#x",
5961b09b556SAndrei Otcheretianski 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->filter_flags,
5971b09b556SAndrei Otcheretianski 		__entry->changed_flags
5981b09b556SAndrei Otcheretianski 	)
5991b09b556SAndrei Otcheretianski );
6001b09b556SAndrei Otcheretianski 
601011ad0e9SJohannes Berg TRACE_EVENT(drv_set_tim,
602011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
603011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta, bool set),
604011ad0e9SJohannes Berg 
605011ad0e9SJohannes Berg 	TP_ARGS(local, sta, set),
606011ad0e9SJohannes Berg 
607011ad0e9SJohannes Berg 	TP_STRUCT__entry(
608011ad0e9SJohannes Berg 		LOCAL_ENTRY
609011ad0e9SJohannes Berg 		STA_ENTRY
610011ad0e9SJohannes Berg 		__field(bool, set)
611011ad0e9SJohannes Berg 	),
612011ad0e9SJohannes Berg 
613011ad0e9SJohannes Berg 	TP_fast_assign(
614011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
615011ad0e9SJohannes Berg 		STA_ASSIGN;
616011ad0e9SJohannes Berg 		__entry->set = set;
617011ad0e9SJohannes Berg 	),
618011ad0e9SJohannes Berg 
619011ad0e9SJohannes Berg 	TP_printk(
620011ad0e9SJohannes Berg 		LOCAL_PR_FMT STA_PR_FMT " set:%d",
62115ac7c47SSeth Forshee 		LOCAL_PR_ARG, STA_PR_ARG, __entry->set
622011ad0e9SJohannes Berg 	)
623011ad0e9SJohannes Berg );
624011ad0e9SJohannes Berg 
625011ad0e9SJohannes Berg TRACE_EVENT(drv_set_key,
626011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
627011ad0e9SJohannes Berg 		 enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata,
628011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta,
629011ad0e9SJohannes Berg 		 struct ieee80211_key_conf *key),
630011ad0e9SJohannes Berg 
631011ad0e9SJohannes Berg 	TP_ARGS(local, cmd, sdata, sta, key),
632011ad0e9SJohannes Berg 
633011ad0e9SJohannes Berg 	TP_STRUCT__entry(
634011ad0e9SJohannes Berg 		LOCAL_ENTRY
635011ad0e9SJohannes Berg 		VIF_ENTRY
636011ad0e9SJohannes Berg 		STA_ENTRY
6379352c19fSJohannes Berg 		__field(u32, cmd)
638011ad0e9SJohannes Berg 		KEY_ENTRY
639011ad0e9SJohannes Berg 	),
640011ad0e9SJohannes Berg 
641011ad0e9SJohannes Berg 	TP_fast_assign(
642011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
643011ad0e9SJohannes Berg 		VIF_ASSIGN;
6449352c19fSJohannes Berg 		STA_ASSIGN;
645011ad0e9SJohannes Berg 		__entry->cmd = cmd;
646011ad0e9SJohannes Berg 		KEY_ASSIGN(key);
647011ad0e9SJohannes Berg 	),
6489352c19fSJohannes Berg 
6499352c19fSJohannes Berg 	TP_printk(
650011ad0e9SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " cmd: %d" KEY_PR_FMT,
651011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd, KEY_PR_ARG
652011ad0e9SJohannes Berg 	)
653011ad0e9SJohannes Berg );
654011ad0e9SJohannes Berg 
655011ad0e9SJohannes Berg TRACE_EVENT(drv_update_tkip_key,
656011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
657011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
658011ad0e9SJohannes Berg 		 struct ieee80211_key_conf *conf,
659011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta, u32 iv32),
660011ad0e9SJohannes Berg 
661011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, conf, sta, iv32),
662011ad0e9SJohannes Berg 
663011ad0e9SJohannes Berg 	TP_STRUCT__entry(
664011ad0e9SJohannes Berg 		LOCAL_ENTRY
665011ad0e9SJohannes Berg 		VIF_ENTRY
666011ad0e9SJohannes Berg 		STA_ENTRY
667011ad0e9SJohannes Berg 		__field(u32, iv32)
668011ad0e9SJohannes Berg 	),
669011ad0e9SJohannes Berg 
670011ad0e9SJohannes Berg 	TP_fast_assign(
671011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
672011ad0e9SJohannes Berg 		VIF_ASSIGN;
673011ad0e9SJohannes Berg 		STA_ASSIGN;
674011ad0e9SJohannes Berg 		__entry->iv32 = iv32;
675011ad0e9SJohannes Berg 	),
676011ad0e9SJohannes Berg 
677011ad0e9SJohannes Berg 	TP_printk(
678011ad0e9SJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x",
679011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->iv32
680011ad0e9SJohannes Berg 	)
681011ad0e9SJohannes Berg );
682011ad0e9SJohannes Berg 
683011ad0e9SJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_hw_scan,
684011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
685011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
686011ad0e9SJohannes Berg 	TP_ARGS(local, sdata)
687011ad0e9SJohannes Berg );
688011ad0e9SJohannes Berg 
689011ad0e9SJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_cancel_hw_scan,
690011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
691011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
692011ad0e9SJohannes Berg 	TP_ARGS(local, sdata)
693011ad0e9SJohannes Berg );
694011ad0e9SJohannes Berg 
695011ad0e9SJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_sched_scan_start,
696011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
697011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
698011ad0e9SJohannes Berg 	TP_ARGS(local, sdata)
699011ad0e9SJohannes Berg );
700011ad0e9SJohannes Berg 
701011ad0e9SJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_sched_scan_stop,
702011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
703011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
704011ad0e9SJohannes Berg 	TP_ARGS(local, sdata)
705a344d677SJohannes Berg );
706a344d677SJohannes Berg 
707a344d677SJohannes Berg TRACE_EVENT(drv_sw_scan_start,
708a344d677SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
709a344d677SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
710a344d677SJohannes Berg 		 const u8 *mac_addr),
711a344d677SJohannes Berg 
712a344d677SJohannes Berg 	TP_ARGS(local, sdata, mac_addr),
713a344d677SJohannes Berg 
714a344d677SJohannes Berg 	TP_STRUCT__entry(
715a344d677SJohannes Berg 		LOCAL_ENTRY
716a344d677SJohannes Berg 		VIF_ENTRY
717a344d677SJohannes Berg 		__array(char, mac_addr, ETH_ALEN)
718a344d677SJohannes Berg 	),
719a344d677SJohannes Berg 
720a344d677SJohannes Berg 	TP_fast_assign(
721a344d677SJohannes Berg 		LOCAL_ASSIGN;
722a344d677SJohannes Berg 		VIF_ASSIGN;
723a344d677SJohannes Berg 		memcpy(__entry->mac_addr, mac_addr, ETH_ALEN);
724a344d677SJohannes Berg 	),
725a344d677SJohannes Berg 
726011ad0e9SJohannes Berg 	TP_printk(LOCAL_PR_FMT ", " VIF_PR_FMT ", addr:%pM",
727011ad0e9SJohannes Berg 		  LOCAL_PR_ARG, VIF_PR_ARG, __entry->mac_addr)
728a344d677SJohannes Berg );
729a344d677SJohannes Berg 
730a344d677SJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_sw_scan_complete,
731a344d677SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
732011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
733011ad0e9SJohannes Berg 	TP_ARGS(local, sdata)
734011ad0e9SJohannes Berg );
735011ad0e9SJohannes Berg 
736011ad0e9SJohannes Berg TRACE_EVENT(drv_get_stats,
737011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
738011ad0e9SJohannes Berg 		 struct ieee80211_low_level_stats *stats,
739011ad0e9SJohannes Berg 		 int ret),
740011ad0e9SJohannes Berg 
741011ad0e9SJohannes Berg 	TP_ARGS(local, stats, ret),
742011ad0e9SJohannes Berg 
743011ad0e9SJohannes Berg 	TP_STRUCT__entry(
744011ad0e9SJohannes Berg 		LOCAL_ENTRY
745011ad0e9SJohannes Berg 		__field(int, ret)
746011ad0e9SJohannes Berg 		__field(unsigned int, ackfail)
747011ad0e9SJohannes Berg 		__field(unsigned int, rtsfail)
748011ad0e9SJohannes Berg 		__field(unsigned int, fcserr)
749011ad0e9SJohannes Berg 		__field(unsigned int, rtssucc)
750011ad0e9SJohannes Berg 	),
751011ad0e9SJohannes Berg 
752011ad0e9SJohannes Berg 	TP_fast_assign(
753011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
754011ad0e9SJohannes Berg 		__entry->ret = ret;
755011ad0e9SJohannes Berg 		__entry->ackfail = stats->dot11ACKFailureCount;
756011ad0e9SJohannes Berg 		__entry->rtsfail = stats->dot11RTSFailureCount;
757011ad0e9SJohannes Berg 		__entry->fcserr = stats->dot11FCSErrorCount;
758011ad0e9SJohannes Berg 		__entry->rtssucc = stats->dot11RTSSuccessCount;
759011ad0e9SJohannes Berg 	),
760011ad0e9SJohannes Berg 
761011ad0e9SJohannes Berg 	TP_printk(
762011ad0e9SJohannes Berg 		LOCAL_PR_FMT " ret:%d",
763011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->ret
764011ad0e9SJohannes Berg 	)
7659352c19fSJohannes Berg );
766011ad0e9SJohannes Berg 
7679352c19fSJohannes Berg TRACE_EVENT(drv_get_key_seq,
768011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
7699352c19fSJohannes Berg 		 struct ieee80211_key_conf *key),
770011ad0e9SJohannes Berg 
771011ad0e9SJohannes Berg 	TP_ARGS(local, key),
772011ad0e9SJohannes Berg 
7739352c19fSJohannes Berg 	TP_STRUCT__entry(
774011ad0e9SJohannes Berg 		LOCAL_ENTRY
775011ad0e9SJohannes Berg 		KEY_ENTRY
776011ad0e9SJohannes Berg 	),
777011ad0e9SJohannes Berg 
7789352c19fSJohannes Berg 	TP_fast_assign(
779011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
780011ad0e9SJohannes Berg 		KEY_ASSIGN(key);
781011ad0e9SJohannes Berg 	),
7829352c19fSJohannes Berg 
7839352c19fSJohannes Berg 	TP_printk(
784011ad0e9SJohannes Berg 		LOCAL_PR_FMT KEY_PR_FMT,
785011ad0e9SJohannes Berg 		LOCAL_PR_ARG, KEY_PR_ARG
786011ad0e9SJohannes Berg 	)
787011ad0e9SJohannes Berg );
788011ad0e9SJohannes Berg 
789011ad0e9SJohannes Berg DEFINE_EVENT(local_u32_evt, drv_set_frag_threshold,
790011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, u32 value),
791011ad0e9SJohannes Berg 	TP_ARGS(local, value)
792011ad0e9SJohannes Berg );
793011ad0e9SJohannes Berg 
794011ad0e9SJohannes Berg DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold,
795011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, u32 value),
796011ad0e9SJohannes Berg 	TP_ARGS(local, value)
797011ad0e9SJohannes Berg );
798a4bcaf55SLorenzo Bianconi 
799011ad0e9SJohannes Berg TRACE_EVENT(drv_set_coverage_class,
800011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, s16 value),
801011ad0e9SJohannes Berg 
802011ad0e9SJohannes Berg 	TP_ARGS(local, value),
803011ad0e9SJohannes Berg 
804a4bcaf55SLorenzo Bianconi 	TP_STRUCT__entry(
805011ad0e9SJohannes Berg 		LOCAL_ENTRY
806011ad0e9SJohannes Berg 		__field(s16, value)
807011ad0e9SJohannes Berg 	),
808011ad0e9SJohannes Berg 
809011ad0e9SJohannes Berg 	TP_fast_assign(
810011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
811011ad0e9SJohannes Berg 		__entry->value = value;
812011ad0e9SJohannes Berg 	),
813011ad0e9SJohannes Berg 
814011ad0e9SJohannes Berg 	TP_printk(
815011ad0e9SJohannes Berg 		LOCAL_PR_FMT " value:%d",
816011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->value
817011ad0e9SJohannes Berg 	)
818011ad0e9SJohannes Berg );
819011ad0e9SJohannes Berg 
820011ad0e9SJohannes Berg TRACE_EVENT(drv_sta_notify,
821011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
822011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
823011ad0e9SJohannes Berg 		 enum sta_notify_cmd cmd,
824011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta),
825011ad0e9SJohannes Berg 
826011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, cmd, sta),
827011ad0e9SJohannes Berg 
828011ad0e9SJohannes Berg 	TP_STRUCT__entry(
829011ad0e9SJohannes Berg 		LOCAL_ENTRY
830011ad0e9SJohannes Berg 		VIF_ENTRY
831011ad0e9SJohannes Berg 		STA_ENTRY
832011ad0e9SJohannes Berg 		__field(u32, cmd)
833011ad0e9SJohannes Berg 	),
834011ad0e9SJohannes Berg 
835011ad0e9SJohannes Berg 	TP_fast_assign(
836011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
837011ad0e9SJohannes Berg 		VIF_ASSIGN;
838011ad0e9SJohannes Berg 		STA_ASSIGN;
839011ad0e9SJohannes Berg 		__entry->cmd = cmd;
840011ad0e9SJohannes Berg 	),
841011ad0e9SJohannes Berg 
842011ad0e9SJohannes Berg 	TP_printk(
843011ad0e9SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " cmd:%d",
844011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd
845011ad0e9SJohannes Berg 	)
846011ad0e9SJohannes Berg );
847011ad0e9SJohannes Berg 
848011ad0e9SJohannes Berg TRACE_EVENT(drv_sta_state,
849011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
850011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
851011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta,
852011ad0e9SJohannes Berg 		 enum ieee80211_sta_state old_state,
853011ad0e9SJohannes Berg 		 enum ieee80211_sta_state new_state),
854011ad0e9SJohannes Berg 
855011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, sta, old_state, new_state),
856011ad0e9SJohannes Berg 
857011ad0e9SJohannes Berg 	TP_STRUCT__entry(
858011ad0e9SJohannes Berg 		LOCAL_ENTRY
859011ad0e9SJohannes Berg 		VIF_ENTRY
860011ad0e9SJohannes Berg 		STA_ENTRY
861011ad0e9SJohannes Berg 		__field(u32, old_state)
862011ad0e9SJohannes Berg 		__field(u32, new_state)
863011ad0e9SJohannes Berg 	),
864011ad0e9SJohannes Berg 
865011ad0e9SJohannes Berg 	TP_fast_assign(
866011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
867011ad0e9SJohannes Berg 		VIF_ASSIGN;
868011ad0e9SJohannes Berg 		STA_ASSIGN;
869011ad0e9SJohannes Berg 		__entry->old_state = old_state;
870011ad0e9SJohannes Berg 		__entry->new_state = new_state;
871011ad0e9SJohannes Berg 	),
872011ad0e9SJohannes Berg 
873011ad0e9SJohannes Berg 	TP_printk(
874011ad0e9SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " state: %d->%d",
875011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG,
876011ad0e9SJohannes Berg 		__entry->old_state, __entry->new_state
877011ad0e9SJohannes Berg 	)
878ba905bf4SAshok Raj Nagarajan );
879ba905bf4SAshok Raj Nagarajan 
880ba905bf4SAshok Raj Nagarajan TRACE_EVENT(drv_sta_set_txpwr,
881ba905bf4SAshok Raj Nagarajan 	TP_PROTO(struct ieee80211_local *local,
882ba905bf4SAshok Raj Nagarajan 		 struct ieee80211_sub_if_data *sdata,
883ba905bf4SAshok Raj Nagarajan 		 struct ieee80211_sta *sta),
884ba905bf4SAshok Raj Nagarajan 
885ba905bf4SAshok Raj Nagarajan 	TP_ARGS(local, sdata, sta),
886ba905bf4SAshok Raj Nagarajan 
887ba905bf4SAshok Raj Nagarajan 	TP_STRUCT__entry(
888ba905bf4SAshok Raj Nagarajan 		LOCAL_ENTRY
889ba905bf4SAshok Raj Nagarajan 		VIF_ENTRY
890ba905bf4SAshok Raj Nagarajan 		STA_ENTRY
891ba905bf4SAshok Raj Nagarajan 		__field(s16, txpwr)
892ba905bf4SAshok Raj Nagarajan 		__field(u8, type)
893ba905bf4SAshok Raj Nagarajan 	),
894ba905bf4SAshok Raj Nagarajan 
895ba905bf4SAshok Raj Nagarajan 	TP_fast_assign(
896ba905bf4SAshok Raj Nagarajan 		LOCAL_ASSIGN;
897046d2e7cSSriram R 		VIF_ASSIGN;
898046d2e7cSSriram R 		STA_ASSIGN;
899ba905bf4SAshok Raj Nagarajan 		__entry->txpwr = sta->deflink.txpwr.power;
900ba905bf4SAshok Raj Nagarajan 		__entry->type = sta->deflink.txpwr.type;
901ba905bf4SAshok Raj Nagarajan 	),
902ba905bf4SAshok Raj Nagarajan 
903ba905bf4SAshok Raj Nagarajan 	TP_printk(
904ba905bf4SAshok Raj Nagarajan 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " txpwr: %d type %d",
905ba905bf4SAshok Raj Nagarajan 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG,
906ba905bf4SAshok Raj Nagarajan 		__entry->txpwr,  __entry->type
907ba905bf4SAshok Raj Nagarajan 	)
908011ad0e9SJohannes Berg );
909011ad0e9SJohannes Berg 
910011ad0e9SJohannes Berg TRACE_EVENT(drv_sta_rc_update,
911011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
912011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
913011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta,
914011ad0e9SJohannes Berg 		 u32 changed),
915011ad0e9SJohannes Berg 
916011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, sta, changed),
917011ad0e9SJohannes Berg 
918011ad0e9SJohannes Berg 	TP_STRUCT__entry(
919011ad0e9SJohannes Berg 		LOCAL_ENTRY
920011ad0e9SJohannes Berg 		VIF_ENTRY
921011ad0e9SJohannes Berg 		STA_ENTRY
922011ad0e9SJohannes Berg 		__field(u32, changed)
923011ad0e9SJohannes Berg 	),
924011ad0e9SJohannes Berg 
925011ad0e9SJohannes Berg 	TP_fast_assign(
926011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
927011ad0e9SJohannes Berg 		VIF_ASSIGN;
928011ad0e9SJohannes Berg 		STA_ASSIGN;
929011ad0e9SJohannes Berg 		__entry->changed = changed;
930011ad0e9SJohannes Berg 	),
931011ad0e9SJohannes Berg 
932011ad0e9SJohannes Berg 	TP_printk(
933011ad0e9SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " changed: 0x%x",
934011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->changed
935011ad0e9SJohannes Berg 	)
9366a9d1b91SJohannes Berg );
937011ad0e9SJohannes Berg 
938011ad0e9SJohannes Berg DECLARE_EVENT_CLASS(sta_event,
939011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
940011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
941011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta),
942011ad0e9SJohannes Berg 
943011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, sta),
944011ad0e9SJohannes Berg 
945011ad0e9SJohannes Berg 	TP_STRUCT__entry(
946011ad0e9SJohannes Berg 		LOCAL_ENTRY
947011ad0e9SJohannes Berg 		VIF_ENTRY
948011ad0e9SJohannes Berg 		STA_ENTRY
949011ad0e9SJohannes Berg 	),
950011ad0e9SJohannes Berg 
951011ad0e9SJohannes Berg 	TP_fast_assign(
952011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
953011ad0e9SJohannes Berg 		VIF_ASSIGN;
954011ad0e9SJohannes Berg 		STA_ASSIGN;
955011ad0e9SJohannes Berg 	),
956011ad0e9SJohannes Berg 
957011ad0e9SJohannes Berg 	TP_printk(
958011ad0e9SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
959011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
960011ad0e9SJohannes Berg 	)
9612b9a7e1bSJohannes Berg );
9622b9a7e1bSJohannes Berg 
9632b9a7e1bSJohannes Berg DEFINE_EVENT(sta_event, drv_sta_statistics,
9642b9a7e1bSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
9652b9a7e1bSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
9662b9a7e1bSJohannes Berg 		 struct ieee80211_sta *sta),
9672b9a7e1bSJohannes Berg 	TP_ARGS(local, sdata, sta)
9686a9d1b91SJohannes Berg );
969011ad0e9SJohannes Berg 
970011ad0e9SJohannes Berg DEFINE_EVENT(sta_event, drv_sta_add,
971011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
9726a9d1b91SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
9736a9d1b91SJohannes Berg 		 struct ieee80211_sta *sta),
974011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, sta)
9756a9d1b91SJohannes Berg );
9766a9d1b91SJohannes Berg 
9776a9d1b91SJohannes Berg DEFINE_EVENT(sta_event, drv_sta_remove,
9786a9d1b91SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
9796a9d1b91SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
9806a9d1b91SJohannes Berg 		 struct ieee80211_sta *sta),
981011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, sta)
9826a9d1b91SJohannes Berg );
9836a9d1b91SJohannes Berg 
9846a9d1b91SJohannes Berg DEFINE_EVENT(sta_event, drv_sta_pre_rcu_remove,
9856a9d1b91SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
9866a9d1b91SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
987011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta),
988011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, sta)
989f59374ebSSara Sharon );
990f59374ebSSara Sharon 
991f59374ebSSara Sharon DEFINE_EVENT(sta_event, drv_sync_rx_queues,
992f59374ebSSara Sharon 	TP_PROTO(struct ieee80211_local *local,
993f59374ebSSara Sharon 		 struct ieee80211_sub_if_data *sdata,
994f59374ebSSara Sharon 		 struct ieee80211_sta *sta),
995f59374ebSSara Sharon 	TP_ARGS(local, sdata, sta)
996f815e2b3SJohannes Berg );
997f815e2b3SJohannes Berg 
998f815e2b3SJohannes Berg DEFINE_EVENT(sta_event, drv_sta_rate_tbl_update,
999f815e2b3SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1000f815e2b3SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
1001f815e2b3SJohannes Berg 		 struct ieee80211_sta *sta),
1002f815e2b3SJohannes Berg 	TP_ARGS(local, sdata, sta)
1003011ad0e9SJohannes Berg );
1004011ad0e9SJohannes Berg 
1005011ad0e9SJohannes Berg TRACE_EVENT(drv_conf_tx,
1006b3e2130bSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1007011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
1008011ad0e9SJohannes Berg 		 unsigned int link_id,
1009b3e2130bSJohannes Berg 		 u16 ac, const struct ieee80211_tx_queue_params *params),
1010011ad0e9SJohannes Berg 
1011011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, link_id, ac, params),
1012011ad0e9SJohannes Berg 
1013011ad0e9SJohannes Berg 	TP_STRUCT__entry(
1014b3e2130bSJohannes Berg 		LOCAL_ENTRY
1015011ad0e9SJohannes Berg 		VIF_ENTRY
1016011ad0e9SJohannes Berg 		__field(unsigned int, link_id)
1017011ad0e9SJohannes Berg 		__field(u16, ac)
1018011ad0e9SJohannes Berg 		__field(u16, txop)
1019011ad0e9SJohannes Berg 		__field(u16, cw_min)
1020011ad0e9SJohannes Berg 		__field(u16, cw_max)
1021011ad0e9SJohannes Berg 		__field(u8, aifs)
1022011ad0e9SJohannes Berg 		__field(bool, uapsd)
1023011ad0e9SJohannes Berg 	),
1024011ad0e9SJohannes Berg 
1025011ad0e9SJohannes Berg 	TP_fast_assign(
1026b3e2130bSJohannes Berg 		LOCAL_ASSIGN;
1027011ad0e9SJohannes Berg 		VIF_ASSIGN;
1028011ad0e9SJohannes Berg 		__entry->link_id = link_id;
1029011ad0e9SJohannes Berg 		__entry->ac = ac;
1030011ad0e9SJohannes Berg 		__entry->txop = params->txop;
1031011ad0e9SJohannes Berg 		__entry->cw_max = params->cw_max;
1032011ad0e9SJohannes Berg 		__entry->cw_min = params->cw_min;
1033011ad0e9SJohannes Berg 		__entry->aifs = params->aifs;
1034011ad0e9SJohannes Berg 		__entry->uapsd = params->uapsd;
1035011ad0e9SJohannes Berg 	),
1036b3e2130bSJohannes Berg 
1037b3e2130bSJohannes Berg 	TP_printk(
1038011ad0e9SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT  " link_id: %d, AC:%d",
1039011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, __entry->ac
1040011ad0e9SJohannes Berg 	)
1041011ad0e9SJohannes Berg );
1042011ad0e9SJohannes Berg 
1043011ad0e9SJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_get_tsf,
1044011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1045011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
1046011ad0e9SJohannes Berg 	TP_ARGS(local, sdata)
1047011ad0e9SJohannes Berg );
1048011ad0e9SJohannes Berg 
1049011ad0e9SJohannes Berg TRACE_EVENT(drv_set_tsf,
1050011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1051011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
1052011ad0e9SJohannes Berg 		 u64 tsf),
1053011ad0e9SJohannes Berg 
1054011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, tsf),
1055011ad0e9SJohannes Berg 
1056011ad0e9SJohannes Berg 	TP_STRUCT__entry(
1057011ad0e9SJohannes Berg 		LOCAL_ENTRY
1058011ad0e9SJohannes Berg 		VIF_ENTRY
1059011ad0e9SJohannes Berg 		__field(u64, tsf)
1060011ad0e9SJohannes Berg 	),
1061011ad0e9SJohannes Berg 
1062011ad0e9SJohannes Berg 	TP_fast_assign(
1063011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
1064011ad0e9SJohannes Berg 		VIF_ASSIGN;
1065011ad0e9SJohannes Berg 		__entry->tsf = tsf;
1066011ad0e9SJohannes Berg 	),
1067011ad0e9SJohannes Berg 
1068011ad0e9SJohannes Berg 	TP_printk(
1069011ad0e9SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT  " tsf:%llu",
1070011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, (unsigned long long)__entry->tsf
1071011ad0e9SJohannes Berg 	)
1072354d381bSPedersen, Thomas );
1073354d381bSPedersen, Thomas 
1074354d381bSPedersen, Thomas TRACE_EVENT(drv_offset_tsf,
1075354d381bSPedersen, Thomas 	TP_PROTO(struct ieee80211_local *local,
1076354d381bSPedersen, Thomas 		 struct ieee80211_sub_if_data *sdata,
1077354d381bSPedersen, Thomas 		 s64 offset),
1078354d381bSPedersen, Thomas 
1079354d381bSPedersen, Thomas 	TP_ARGS(local, sdata, offset),
1080354d381bSPedersen, Thomas 
1081354d381bSPedersen, Thomas 	TP_STRUCT__entry(
1082354d381bSPedersen, Thomas 		LOCAL_ENTRY
1083354d381bSPedersen, Thomas 		VIF_ENTRY
1084354d381bSPedersen, Thomas 		__field(s64, tsf_offset)
1085354d381bSPedersen, Thomas 	),
1086354d381bSPedersen, Thomas 
1087354d381bSPedersen, Thomas 	TP_fast_assign(
1088354d381bSPedersen, Thomas 		LOCAL_ASSIGN;
1089354d381bSPedersen, Thomas 		VIF_ASSIGN;
1090354d381bSPedersen, Thomas 		__entry->tsf_offset = offset;
1091354d381bSPedersen, Thomas 	),
1092354d381bSPedersen, Thomas 
1093354d381bSPedersen, Thomas 	TP_printk(
1094354d381bSPedersen, Thomas 		LOCAL_PR_FMT  VIF_PR_FMT  " tsf offset:%lld",
1095354d381bSPedersen, Thomas 		LOCAL_PR_ARG, VIF_PR_ARG,
1096354d381bSPedersen, Thomas 		(unsigned long long)__entry->tsf_offset
1097354d381bSPedersen, Thomas 	)
1098011ad0e9SJohannes Berg );
1099011ad0e9SJohannes Berg 
1100011ad0e9SJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_reset_tsf,
1101011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1102011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
1103011ad0e9SJohannes Berg 	TP_ARGS(local, sdata)
1104011ad0e9SJohannes Berg );
1105011ad0e9SJohannes Berg 
1106011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, drv_tx_last_beacon,
1107011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
1108011ad0e9SJohannes Berg 	TP_ARGS(local)
1109011ad0e9SJohannes Berg );
1110011ad0e9SJohannes Berg 
1111011ad0e9SJohannes Berg TRACE_EVENT(drv_ampdu_action,
111250ea05efSSara Sharon 	TP_PROTO(struct ieee80211_local *local,
1113011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
111450ea05efSSara Sharon 		 struct ieee80211_ampdu_params *params),
1115011ad0e9SJohannes Berg 
1116011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, params),
1117011ad0e9SJohannes Berg 
1118011ad0e9SJohannes Berg 	TP_STRUCT__entry(
111950ea05efSSara Sharon 		LOCAL_ENTRY
1120011ad0e9SJohannes Berg 		VIF_ENTRY
1121011ad0e9SJohannes Berg 		AMPDU_ACTION_ENTRY
1122011ad0e9SJohannes Berg 	),
1123011ad0e9SJohannes Berg 
1124011ad0e9SJohannes Berg 	TP_fast_assign(
112550ea05efSSara Sharon 		LOCAL_ASSIGN;
1126011ad0e9SJohannes Berg 		VIF_ASSIGN;
1127011ad0e9SJohannes Berg 		AMPDU_ACTION_ASSIGN;
1128011ad0e9SJohannes Berg 	),
112950ea05efSSara Sharon 
113050ea05efSSara Sharon 	TP_printk(
1131011ad0e9SJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT AMPDU_ACTION_PR_FMT,
1132011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, AMPDU_ACTION_PR_ARG
1133011ad0e9SJohannes Berg 	)
1134011ad0e9SJohannes Berg );
1135140d905bSJohannes Berg 
1136011ad0e9SJohannes Berg TRACE_EVENT(drv_get_survey,
1137011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, int _idx,
1138140d905bSJohannes Berg 		 struct survey_info *survey),
1139011ad0e9SJohannes Berg 
1140011ad0e9SJohannes Berg 	TP_ARGS(local, _idx, survey),
1141011ad0e9SJohannes Berg 
1142011ad0e9SJohannes Berg 	TP_STRUCT__entry(
1143011ad0e9SJohannes Berg 		LOCAL_ENTRY
1144011ad0e9SJohannes Berg 		__field(int, idx)
1145011ad0e9SJohannes Berg 	),
1146011ad0e9SJohannes Berg 
1147140d905bSJohannes Berg 	TP_fast_assign(
1148011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
1149011ad0e9SJohannes Berg 		__entry->idx = _idx;
1150011ad0e9SJohannes Berg 	),
1151011ad0e9SJohannes Berg 
1152011ad0e9SJohannes Berg 	TP_printk(
1153011ad0e9SJohannes Berg 		LOCAL_PR_FMT " idx:%d",
1154011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->idx
1155011ad0e9SJohannes Berg 	)
1156011ad0e9SJohannes Berg );
115739ecc01dSJohannes Berg 
115839ecc01dSJohannes Berg TRACE_EVENT(drv_flush,
1159011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
116039ecc01dSJohannes Berg 		 u32 queues, bool drop),
1161011ad0e9SJohannes Berg 
1162011ad0e9SJohannes Berg 	TP_ARGS(local, queues, drop),
1163011ad0e9SJohannes Berg 
1164011ad0e9SJohannes Berg 	TP_STRUCT__entry(
116539ecc01dSJohannes Berg 		LOCAL_ENTRY
1166011ad0e9SJohannes Berg 		__field(bool, drop)
1167011ad0e9SJohannes Berg 		__field(u32, queues)
1168011ad0e9SJohannes Berg 	),
1169011ad0e9SJohannes Berg 
1170011ad0e9SJohannes Berg 	TP_fast_assign(
117139ecc01dSJohannes Berg 		LOCAL_ASSIGN;
1172011ad0e9SJohannes Berg 		__entry->drop = drop;
1173011ad0e9SJohannes Berg 		__entry->queues = queues;
1174011ad0e9SJohannes Berg 	),
117539ecc01dSJohannes Berg 
117639ecc01dSJohannes Berg 	TP_printk(
1177011ad0e9SJohannes Berg 		LOCAL_PR_FMT " queues:0x%x drop:%d",
1178011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->queues, __entry->drop
1179011ad0e9SJohannes Berg 	)
1180d00800a2SJohannes Berg );
1181d00800a2SJohannes Berg 
1182d00800a2SJohannes Berg DEFINE_EVENT(sta_event, drv_flush_sta,
1183d00800a2SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1184d00800a2SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
1185d00800a2SJohannes Berg 		 struct ieee80211_sta *sta),
1186d00800a2SJohannes Berg 	TP_ARGS(local, sdata, sta)
1187011ad0e9SJohannes Berg );
1188011ad0e9SJohannes Berg 
11890f791eb4SLuciano Coelho TRACE_EVENT(drv_channel_switch,
1190011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1191011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
11920f791eb4SLuciano Coelho 		 struct ieee80211_channel_switch *ch_switch),
1193011ad0e9SJohannes Berg 
1194011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, ch_switch),
1195011ad0e9SJohannes Berg 
11960f791eb4SLuciano Coelho 	TP_STRUCT__entry(
119785220d71SJohannes Berg 		LOCAL_ENTRY
1198011ad0e9SJohannes Berg 		VIF_ENTRY
11992ba45384SLuciano Coelho 		CHANDEF_ENTRY
1200011ad0e9SJohannes Berg 		__field(u64, timestamp)
1201011ad0e9SJohannes Berg 		__field(u32, device_timestamp)
1202011ad0e9SJohannes Berg 		__field(bool, block_tx)
1203011ad0e9SJohannes Berg 		__field(u8, count)
1204011ad0e9SJohannes Berg 	),
1205011ad0e9SJohannes Berg 
12060f791eb4SLuciano Coelho 	TP_fast_assign(
120785220d71SJohannes Berg 		LOCAL_ASSIGN;
1208011ad0e9SJohannes Berg 		VIF_ASSIGN;
12092ba45384SLuciano Coelho 		CHANDEF_ASSIGN(&ch_switch->chandef)
1210011ad0e9SJohannes Berg 		__entry->timestamp = ch_switch->timestamp;
1211011ad0e9SJohannes Berg 		__entry->device_timestamp = ch_switch->device_timestamp;
1212011ad0e9SJohannes Berg 		__entry->block_tx = ch_switch->block_tx;
1213011ad0e9SJohannes Berg 		__entry->count = ch_switch->count;
1214011ad0e9SJohannes Berg 	),
12150f791eb4SLuciano Coelho 
12160f791eb4SLuciano Coelho 	TP_printk(
1217011ad0e9SJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT " new " CHANDEF_PR_FMT " count:%d",
1218011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count
1219011ad0e9SJohannes Berg 	)
1220011ad0e9SJohannes Berg );
1221011ad0e9SJohannes Berg 
1222011ad0e9SJohannes Berg TRACE_EVENT(drv_set_antenna,
1223011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
1224011ad0e9SJohannes Berg 
1225011ad0e9SJohannes Berg 	TP_ARGS(local, tx_ant, rx_ant, ret),
1226011ad0e9SJohannes Berg 
1227011ad0e9SJohannes Berg 	TP_STRUCT__entry(
1228011ad0e9SJohannes Berg 		LOCAL_ENTRY
1229011ad0e9SJohannes Berg 		__field(u32, tx_ant)
1230011ad0e9SJohannes Berg 		__field(u32, rx_ant)
1231011ad0e9SJohannes Berg 		__field(int, ret)
1232011ad0e9SJohannes Berg 	),
1233011ad0e9SJohannes Berg 
1234011ad0e9SJohannes Berg 	TP_fast_assign(
1235011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
1236011ad0e9SJohannes Berg 		__entry->tx_ant = tx_ant;
1237011ad0e9SJohannes Berg 		__entry->rx_ant = rx_ant;
1238011ad0e9SJohannes Berg 		__entry->ret = ret;
1239011ad0e9SJohannes Berg 	),
1240011ad0e9SJohannes Berg 
1241011ad0e9SJohannes Berg 	TP_printk(
1242011ad0e9SJohannes Berg 		LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
1243011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
1244011ad0e9SJohannes Berg 	)
1245011ad0e9SJohannes Berg );
1246011ad0e9SJohannes Berg 
1247011ad0e9SJohannes Berg TRACE_EVENT(drv_get_antenna,
1248011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
1249011ad0e9SJohannes Berg 
1250011ad0e9SJohannes Berg 	TP_ARGS(local, tx_ant, rx_ant, ret),
1251011ad0e9SJohannes Berg 
1252011ad0e9SJohannes Berg 	TP_STRUCT__entry(
1253011ad0e9SJohannes Berg 		LOCAL_ENTRY
1254011ad0e9SJohannes Berg 		__field(u32, tx_ant)
1255011ad0e9SJohannes Berg 		__field(u32, rx_ant)
1256011ad0e9SJohannes Berg 		__field(int, ret)
1257011ad0e9SJohannes Berg 	),
1258011ad0e9SJohannes Berg 
1259011ad0e9SJohannes Berg 	TP_fast_assign(
1260011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
1261011ad0e9SJohannes Berg 		__entry->tx_ant = tx_ant;
1262011ad0e9SJohannes Berg 		__entry->rx_ant = rx_ant;
1263011ad0e9SJohannes Berg 		__entry->ret = ret;
1264011ad0e9SJohannes Berg 	),
1265011ad0e9SJohannes Berg 
1266011ad0e9SJohannes Berg 	TP_printk(
1267011ad0e9SJohannes Berg 		LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
1268011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
1269011ad0e9SJohannes Berg 	)
1270011ad0e9SJohannes Berg );
127149884568SEliad Peller 
127249884568SEliad Peller TRACE_EVENT(drv_remain_on_channel,
127349884568SEliad Peller 	TP_PROTO(struct ieee80211_local *local,
1274d339d5caSIlan Peer 		 struct ieee80211_sub_if_data *sdata,
1275d339d5caSIlan Peer 		 struct ieee80211_channel *chan,
1276011ad0e9SJohannes Berg 		 unsigned int duration,
1277d339d5caSIlan Peer 		 enum ieee80211_roc_type type),
1278011ad0e9SJohannes Berg 
1279011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, chan, duration, type),
1280011ad0e9SJohannes Berg 
128149884568SEliad Peller 	TP_STRUCT__entry(
1282011ad0e9SJohannes Berg 		LOCAL_ENTRY
1283b6011960SThomas Pedersen 		VIF_ENTRY
1284011ad0e9SJohannes Berg 		__field(int, center_freq)
1285d339d5caSIlan Peer 		__field(int, freq_offset)
1286011ad0e9SJohannes Berg 		__field(unsigned int, duration)
1287011ad0e9SJohannes Berg 		__field(u32, type)
1288011ad0e9SJohannes Berg 	),
1289011ad0e9SJohannes Berg 
129049884568SEliad Peller 	TP_fast_assign(
1291011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
1292b6011960SThomas Pedersen 		VIF_ASSIGN;
1293011ad0e9SJohannes Berg 		__entry->center_freq = chan->center_freq;
1294d339d5caSIlan Peer 		__entry->freq_offset = chan->freq_offset;
1295011ad0e9SJohannes Berg 		__entry->duration = duration;
1296011ad0e9SJohannes Berg 		__entry->type = type;
1297011ad0e9SJohannes Berg 	),
1298b6011960SThomas Pedersen 
129949884568SEliad Peller 	TP_printk(
1300b6011960SThomas Pedersen 		LOCAL_PR_FMT  VIF_PR_FMT " freq:%d.%03dMHz duration:%dms type=%d",
1301b6011960SThomas Pedersen 		LOCAL_PR_ARG, VIF_PR_ARG,
1302011ad0e9SJohannes Berg 		__entry->center_freq, __entry->freq_offset,
1303011ad0e9SJohannes Berg 		__entry->duration, __entry->type
1304011ad0e9SJohannes Berg 	)
13055db4c4b9SEmmanuel Grumbach );
13065db4c4b9SEmmanuel Grumbach 
13075db4c4b9SEmmanuel Grumbach DEFINE_EVENT(local_sdata_evt, drv_cancel_remain_on_channel,
13085db4c4b9SEmmanuel Grumbach 	TP_PROTO(struct ieee80211_local *local,
1309011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
1310011ad0e9SJohannes Berg 	TP_ARGS(local, sdata)
1311011ad0e9SJohannes Berg );
1312011ad0e9SJohannes Berg 
1313011ad0e9SJohannes Berg TRACE_EVENT(drv_set_ringparam,
1314011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, u32 tx, u32 rx),
1315011ad0e9SJohannes Berg 
1316011ad0e9SJohannes Berg 	TP_ARGS(local, tx, rx),
1317011ad0e9SJohannes Berg 
1318011ad0e9SJohannes Berg 	TP_STRUCT__entry(
1319011ad0e9SJohannes Berg 		LOCAL_ENTRY
1320011ad0e9SJohannes Berg 		__field(u32, tx)
1321011ad0e9SJohannes Berg 		__field(u32, rx)
1322011ad0e9SJohannes Berg 	),
1323011ad0e9SJohannes Berg 
1324011ad0e9SJohannes Berg 	TP_fast_assign(
1325011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
1326011ad0e9SJohannes Berg 		__entry->tx = tx;
1327011ad0e9SJohannes Berg 		__entry->rx = rx;
1328011ad0e9SJohannes Berg 	),
1329011ad0e9SJohannes Berg 
1330011ad0e9SJohannes Berg 	TP_printk(
1331011ad0e9SJohannes Berg 		LOCAL_PR_FMT " tx:%d rx %d",
1332011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->tx, __entry->rx
1333011ad0e9SJohannes Berg 	)
1334011ad0e9SJohannes Berg );
1335011ad0e9SJohannes Berg 
1336011ad0e9SJohannes Berg TRACE_EVENT(drv_get_ringparam,
1337011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, u32 *tx, u32 *tx_max,
1338011ad0e9SJohannes Berg 		 u32 *rx, u32 *rx_max),
1339011ad0e9SJohannes Berg 
1340011ad0e9SJohannes Berg 	TP_ARGS(local, tx, tx_max, rx, rx_max),
1341011ad0e9SJohannes Berg 
1342011ad0e9SJohannes Berg 	TP_STRUCT__entry(
1343011ad0e9SJohannes Berg 		LOCAL_ENTRY
1344011ad0e9SJohannes Berg 		__field(u32, tx)
1345011ad0e9SJohannes Berg 		__field(u32, tx_max)
1346011ad0e9SJohannes Berg 		__field(u32, rx)
1347011ad0e9SJohannes Berg 		__field(u32, rx_max)
1348011ad0e9SJohannes Berg 	),
1349011ad0e9SJohannes Berg 
1350011ad0e9SJohannes Berg 	TP_fast_assign(
1351011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
1352011ad0e9SJohannes Berg 		__entry->tx = *tx;
1353011ad0e9SJohannes Berg 		__entry->tx_max = *tx_max;
1354011ad0e9SJohannes Berg 		__entry->rx = *rx;
1355011ad0e9SJohannes Berg 		__entry->rx_max = *rx_max;
1356011ad0e9SJohannes Berg 	),
1357011ad0e9SJohannes Berg 
1358011ad0e9SJohannes Berg 	TP_printk(
1359011ad0e9SJohannes Berg 		LOCAL_PR_FMT " tx:%d tx_max %d rx %d rx_max %d",
1360011ad0e9SJohannes Berg 		LOCAL_PR_ARG,
1361011ad0e9SJohannes Berg 		__entry->tx, __entry->tx_max, __entry->rx, __entry->rx_max
1362011ad0e9SJohannes Berg 	)
1363011ad0e9SJohannes Berg );
1364011ad0e9SJohannes Berg 
1365011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, drv_tx_frames_pending,
1366011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
1367011ad0e9SJohannes Berg 	TP_ARGS(local)
1368011ad0e9SJohannes Berg );
1369011ad0e9SJohannes Berg 
1370011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait,
1371011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
1372011ad0e9SJohannes Berg 	TP_ARGS(local)
1373011ad0e9SJohannes Berg );
1374011ad0e9SJohannes Berg 
1375011ad0e9SJohannes Berg TRACE_EVENT(drv_set_bitrate_mask,
1376011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1377011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
1378011ad0e9SJohannes Berg 		 const struct cfg80211_bitrate_mask *mask),
1379011ad0e9SJohannes Berg 
1380011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, mask),
1381011ad0e9SJohannes Berg 
1382011ad0e9SJohannes Berg 	TP_STRUCT__entry(
1383011ad0e9SJohannes Berg 		LOCAL_ENTRY
1384011ad0e9SJohannes Berg 		VIF_ENTRY
1385011ad0e9SJohannes Berg 		__field(u32, legacy_2g)
1386011ad0e9SJohannes Berg 		__field(u32, legacy_5g)
1387011ad0e9SJohannes Berg 	),
1388011ad0e9SJohannes Berg 
1389011ad0e9SJohannes Berg 	TP_fast_assign(
139057fbcce3SJohannes Berg 		LOCAL_ASSIGN;
139157fbcce3SJohannes Berg 		VIF_ASSIGN;
1392011ad0e9SJohannes Berg 		__entry->legacy_2g = mask->control[NL80211_BAND_2GHZ].legacy;
1393011ad0e9SJohannes Berg 		__entry->legacy_5g = mask->control[NL80211_BAND_5GHZ].legacy;
1394011ad0e9SJohannes Berg 	),
1395011ad0e9SJohannes Berg 
1396011ad0e9SJohannes Berg 	TP_printk(
1397011ad0e9SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT " 2G Mask:0x%x 5G Mask:0x%x",
1398011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->legacy_2g, __entry->legacy_5g
1399011ad0e9SJohannes Berg 	)
1400011ad0e9SJohannes Berg );
1401011ad0e9SJohannes Berg 
1402011ad0e9SJohannes Berg TRACE_EVENT(drv_set_rekey_data,
1403011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1404011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
1405011ad0e9SJohannes Berg 		 struct cfg80211_gtk_rekey_data *data),
1406011ad0e9SJohannes Berg 
1407011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, data),
1408011ad0e9SJohannes Berg 
1409011ad0e9SJohannes Berg 	TP_STRUCT__entry(
1410011ad0e9SJohannes Berg 		LOCAL_ENTRY
1411011ad0e9SJohannes Berg 		VIF_ENTRY
1412011ad0e9SJohannes Berg 		__array(u8, kek, NL80211_KEK_LEN)
1413011ad0e9SJohannes Berg 		__array(u8, kck, NL80211_KCK_LEN)
1414011ad0e9SJohannes Berg 		__array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
1415011ad0e9SJohannes Berg 	),
1416011ad0e9SJohannes Berg 
1417011ad0e9SJohannes Berg 	TP_fast_assign(
1418011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
1419011ad0e9SJohannes Berg 		VIF_ASSIGN;
1420011ad0e9SJohannes Berg 		memcpy(__entry->kek, data->kek, NL80211_KEK_LEN);
1421011ad0e9SJohannes Berg 		memcpy(__entry->kck, data->kck, NL80211_KCK_LEN);
1422011ad0e9SJohannes Berg 		memcpy(__entry->replay_ctr, data->replay_ctr,
1423011ad0e9SJohannes Berg 		       NL80211_REPLAY_CTR_LEN);
1424011ad0e9SJohannes Berg 	),
1425011ad0e9SJohannes Berg 
1426011ad0e9SJohannes Berg 	TP_printk(LOCAL_PR_FMT VIF_PR_FMT,
1427011ad0e9SJohannes Berg 		  LOCAL_PR_ARG, VIF_PR_ARG)
1428a8182929SEmmanuel Grumbach );
1429011ad0e9SJohannes Berg 
1430887da917SEmmanuel Grumbach TRACE_EVENT(drv_event_callback,
1431a8182929SEmmanuel Grumbach 	TP_PROTO(struct ieee80211_local *local,
1432011ad0e9SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
1433a8182929SEmmanuel Grumbach 		 const struct ieee80211_event *_event),
1434011ad0e9SJohannes Berg 
1435011ad0e9SJohannes Berg 	TP_ARGS(local, sdata, _event),
1436011ad0e9SJohannes Berg 
1437887da917SEmmanuel Grumbach 	TP_STRUCT__entry(
1438a8182929SEmmanuel Grumbach 		LOCAL_ENTRY
1439011ad0e9SJohannes Berg 		VIF_ENTRY
1440011ad0e9SJohannes Berg 		__field(u32, type)
1441011ad0e9SJohannes Berg 	),
1442011ad0e9SJohannes Berg 
1443887da917SEmmanuel Grumbach 	TP_fast_assign(
1444a8182929SEmmanuel Grumbach 		LOCAL_ASSIGN;
1445011ad0e9SJohannes Berg 		VIF_ASSIGN;
1446011ad0e9SJohannes Berg 		__entry->type = _event->type;
1447011ad0e9SJohannes Berg 	),
1448a8182929SEmmanuel Grumbach 
1449a8182929SEmmanuel Grumbach 	TP_printk(
1450011ad0e9SJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT " event:%d",
1451011ad0e9SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->type
1452011ad0e9SJohannes Berg 	)
1453011ad0e9SJohannes Berg );
1454011ad0e9SJohannes Berg 
1455011ad0e9SJohannes Berg DECLARE_EVENT_CLASS(release_evt,
1456011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1457011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta,
1458011ad0e9SJohannes Berg 		 u16 tids, int num_frames,
1459011ad0e9SJohannes Berg 		 enum ieee80211_frame_release_type reason,
1460011ad0e9SJohannes Berg 		 bool more_data),
1461011ad0e9SJohannes Berg 
1462011ad0e9SJohannes Berg 	TP_ARGS(local, sta, tids, num_frames, reason, more_data),
1463011ad0e9SJohannes Berg 
1464011ad0e9SJohannes Berg 	TP_STRUCT__entry(
1465011ad0e9SJohannes Berg 		LOCAL_ENTRY
1466011ad0e9SJohannes Berg 		STA_ENTRY
1467011ad0e9SJohannes Berg 		__field(u16, tids)
1468011ad0e9SJohannes Berg 		__field(int, num_frames)
1469011ad0e9SJohannes Berg 		__field(int, reason)
1470011ad0e9SJohannes Berg 		__field(bool, more_data)
1471011ad0e9SJohannes Berg 	),
1472011ad0e9SJohannes Berg 
1473011ad0e9SJohannes Berg 	TP_fast_assign(
1474011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
1475011ad0e9SJohannes Berg 		STA_ASSIGN;
1476011ad0e9SJohannes Berg 		__entry->tids = tids;
1477011ad0e9SJohannes Berg 		__entry->num_frames = num_frames;
1478011ad0e9SJohannes Berg 		__entry->reason = reason;
1479011ad0e9SJohannes Berg 		__entry->more_data = more_data;
1480011ad0e9SJohannes Berg 	),
1481011ad0e9SJohannes Berg 
1482011ad0e9SJohannes Berg 	TP_printk(
1483011ad0e9SJohannes Berg 		LOCAL_PR_FMT STA_PR_FMT
1484011ad0e9SJohannes Berg 		" TIDs:0x%.4x frames:%d reason:%d more:%d",
1485011ad0e9SJohannes Berg 		LOCAL_PR_ARG, STA_PR_ARG, __entry->tids, __entry->num_frames,
1486011ad0e9SJohannes Berg 		__entry->reason, __entry->more_data
1487011ad0e9SJohannes Berg 	)
1488011ad0e9SJohannes Berg );
1489011ad0e9SJohannes Berg 
1490011ad0e9SJohannes Berg DEFINE_EVENT(release_evt, drv_release_buffered_frames,
1491011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1492011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta,
1493011ad0e9SJohannes Berg 		 u16 tids, int num_frames,
1494011ad0e9SJohannes Berg 		 enum ieee80211_frame_release_type reason,
1495011ad0e9SJohannes Berg 		 bool more_data),
1496011ad0e9SJohannes Berg 
1497011ad0e9SJohannes Berg 	TP_ARGS(local, sta, tids, num_frames, reason, more_data)
1498011ad0e9SJohannes Berg );
1499011ad0e9SJohannes Berg 
1500011ad0e9SJohannes Berg DEFINE_EVENT(release_evt, drv_allow_buffered_frames,
1501011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1502011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta,
1503011ad0e9SJohannes Berg 		 u16 tids, int num_frames,
1504011ad0e9SJohannes Berg 		 enum ieee80211_frame_release_type reason,
1505011ad0e9SJohannes Berg 		 bool more_data),
1506011ad0e9SJohannes Berg 
1507011ad0e9SJohannes Berg 	TP_ARGS(local, sta, tids, num_frames, reason, more_data)
150815fae341SJohannes Berg );
1509a1845fc7SJohannes Berg 
1510d4e36e55SIlan Peer DECLARE_EVENT_CLASS(mgd_prepare_complete_tx_evt,
151115fae341SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1512a1845fc7SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
151315fae341SJohannes Berg 		 u16 duration, u16 subtype, bool success),
1514d4e36e55SIlan Peer 
1515d4e36e55SIlan Peer 	TP_ARGS(local, sdata, duration, subtype, success),
1516d4e36e55SIlan Peer 
1517d4e36e55SIlan Peer 	TP_STRUCT__entry(
1518d4e36e55SIlan Peer 		LOCAL_ENTRY
151915fae341SJohannes Berg 		VIF_ENTRY
152015fae341SJohannes Berg 		__field(u32, duration)
1521d4e36e55SIlan Peer 		__field(u16, subtype)
1522d4e36e55SIlan Peer 		__field(u8, success)
1523d4e36e55SIlan Peer 	),
1524d4e36e55SIlan Peer 
1525d4e36e55SIlan Peer 	TP_fast_assign(
1526d4e36e55SIlan Peer 		LOCAL_ASSIGN;
152715fae341SJohannes Berg 		VIF_ASSIGN;
152815fae341SJohannes Berg 		__entry->duration = duration;
1529d4e36e55SIlan Peer 		__entry->subtype = subtype;
1530d4e36e55SIlan Peer 		__entry->success = success;
1531d4e36e55SIlan Peer 	),
153215fae341SJohannes Berg 
153315fae341SJohannes Berg 	TP_printk(
153415fae341SJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT " duration: %u, subtype:0x%x, success:%d",
1535d4e36e55SIlan Peer 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->duration,
1536a1845fc7SJohannes Berg 		__entry->subtype, __entry->success
1537a1845fc7SJohannes Berg 	)
153815fae341SJohannes Berg );
153915fae341SJohannes Berg 
154015fae341SJohannes Berg DEFINE_EVENT(mgd_prepare_complete_tx_evt, drv_mgd_prepare_tx,
154115fae341SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
154215fae341SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
154315fae341SJohannes Berg 		 u16 duration, u16 subtype, bool success),
154415fae341SJohannes Berg 
154515fae341SJohannes Berg 	TP_ARGS(local, sdata, duration, subtype, success)
154615fae341SJohannes Berg );
154715fae341SJohannes Berg 
154815fae341SJohannes Berg DEFINE_EVENT(mgd_prepare_complete_tx_evt, drv_mgd_complete_tx,
154915fae341SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
155015fae341SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
155115fae341SJohannes Berg 		 u16 duration, u16 subtype, bool success),
155215fae341SJohannes Berg 
155315fae341SJohannes Berg 	TP_ARGS(local, sdata, duration, subtype, success)
1554ee10f2c7SArik Nemtsov );
1555ee10f2c7SArik Nemtsov 
1556ee10f2c7SArik Nemtsov DEFINE_EVENT(local_sdata_evt, drv_mgd_protect_tdls_discover,
1557ee10f2c7SArik Nemtsov 	TP_PROTO(struct ieee80211_local *local,
1558ee10f2c7SArik Nemtsov 		 struct ieee80211_sub_if_data *sdata),
1559ee10f2c7SArik Nemtsov 
1560ee10f2c7SArik Nemtsov 	TP_ARGS(local, sdata)
1561c3645eacSMichal Kazior );
1562c3645eacSMichal Kazior 
1563c3645eacSMichal Kazior DECLARE_EVENT_CLASS(local_chanctx,
1564c3645eacSMichal Kazior 	TP_PROTO(struct ieee80211_local *local,
1565c3645eacSMichal Kazior 		 struct ieee80211_chanctx *ctx),
1566c3645eacSMichal Kazior 
1567c3645eacSMichal Kazior 	TP_ARGS(local, ctx),
1568c3645eacSMichal Kazior 
1569c3645eacSMichal Kazior 	TP_STRUCT__entry(
1570c3645eacSMichal Kazior 		LOCAL_ENTRY
1571c3645eacSMichal Kazior 		CHANCTX_ENTRY
1572c3645eacSMichal Kazior 	),
1573c3645eacSMichal Kazior 
1574c3645eacSMichal Kazior 	TP_fast_assign(
1575c3645eacSMichal Kazior 		LOCAL_ASSIGN;
1576c3645eacSMichal Kazior 		CHANCTX_ASSIGN;
1577c3645eacSMichal Kazior 	),
1578c3645eacSMichal Kazior 
1579c3645eacSMichal Kazior 	TP_printk(
1580c3645eacSMichal Kazior 		LOCAL_PR_FMT CHANCTX_PR_FMT,
1581c3645eacSMichal Kazior 		LOCAL_PR_ARG, CHANCTX_PR_ARG
1582c3645eacSMichal Kazior 	)
1583c3645eacSMichal Kazior );
1584c3645eacSMichal Kazior 
1585c3645eacSMichal Kazior DEFINE_EVENT(local_chanctx, drv_add_chanctx,
1586c3645eacSMichal Kazior 	TP_PROTO(struct ieee80211_local *local,
1587c3645eacSMichal Kazior 		 struct ieee80211_chanctx *ctx),
1588c3645eacSMichal Kazior 	TP_ARGS(local, ctx)
1589c3645eacSMichal Kazior );
1590c3645eacSMichal Kazior 
1591c3645eacSMichal Kazior DEFINE_EVENT(local_chanctx, drv_remove_chanctx,
1592c3645eacSMichal Kazior 	TP_PROTO(struct ieee80211_local *local,
1593c3645eacSMichal Kazior 		 struct ieee80211_chanctx *ctx),
1594c3645eacSMichal Kazior 	TP_ARGS(local, ctx)
1595c3645eacSMichal Kazior );
1596c3645eacSMichal Kazior 
1597c3645eacSMichal Kazior TRACE_EVENT(drv_change_chanctx,
1598c3645eacSMichal Kazior 	TP_PROTO(struct ieee80211_local *local,
1599c3645eacSMichal Kazior 		 struct ieee80211_chanctx *ctx,
1600c3645eacSMichal Kazior 		 u32 changed),
1601c3645eacSMichal Kazior 
1602c3645eacSMichal Kazior 	TP_ARGS(local, ctx, changed),
1603c3645eacSMichal Kazior 
1604c3645eacSMichal Kazior 	TP_STRUCT__entry(
1605c3645eacSMichal Kazior 		LOCAL_ENTRY
1606c3645eacSMichal Kazior 		CHANCTX_ENTRY
1607c3645eacSMichal Kazior 		__field(u32, changed)
1608c3645eacSMichal Kazior 	),
1609c3645eacSMichal Kazior 
1610c3645eacSMichal Kazior 	TP_fast_assign(
1611c3645eacSMichal Kazior 		LOCAL_ASSIGN;
1612c3645eacSMichal Kazior 		CHANCTX_ASSIGN;
1613c3645eacSMichal Kazior 		__entry->changed = changed;
1614c3645eacSMichal Kazior 	),
1615c3645eacSMichal Kazior 
1616c3645eacSMichal Kazior 	TP_printk(
1617c3645eacSMichal Kazior 		LOCAL_PR_FMT CHANCTX_PR_FMT " changed:%#x",
1618c3645eacSMichal Kazior 		LOCAL_PR_ARG, CHANCTX_PR_ARG, __entry->changed
1619c3645eacSMichal Kazior 	)
16201a5f0c13SLuciano Coelho );
16211a5f0c13SLuciano Coelho 
16221a5f0c13SLuciano Coelho #if !defined(__TRACE_VIF_ENTRY)
16231a5f0c13SLuciano Coelho #define __TRACE_VIF_ENTRY
16241a5f0c13SLuciano Coelho struct trace_vif_entry {
16251a5f0c13SLuciano Coelho 	enum nl80211_iftype vif_type;
16261a5f0c13SLuciano Coelho 	bool p2p;
16271a5f0c13SLuciano Coelho 	char vif_name[IFNAMSIZ];
16281a5f0c13SLuciano Coelho } __packed;
16291a5f0c13SLuciano Coelho 
1630b6011960SThomas Pedersen struct trace_chandef_entry {
16311a5f0c13SLuciano Coelho 	u32 control_freq;
16321a5f0c13SLuciano Coelho 	u32 freq_offset;
1633b6011960SThomas Pedersen 	u32 chan_width;
16341a5f0c13SLuciano Coelho 	u32 center_freq1;
16351a5f0c13SLuciano Coelho 	u32 freq1_offset;
16361a5f0c13SLuciano Coelho 	u32 center_freq2;
16371a5f0c13SLuciano Coelho } __packed;
16381a5f0c13SLuciano Coelho 
1639b4f85443SJohannes Berg struct trace_switch_entry {
16401a5f0c13SLuciano Coelho 	struct trace_vif_entry vif;
16411a5f0c13SLuciano Coelho 	unsigned int link_id;
16421a5f0c13SLuciano Coelho 	struct trace_chandef_entry old_chandef;
16431a5f0c13SLuciano Coelho 	struct trace_chandef_entry new_chandef;
16441a5f0c13SLuciano Coelho } __packed;
16451a5f0c13SLuciano Coelho 
16461a5f0c13SLuciano Coelho #define SWITCH_ENTRY_ASSIGN(to, from) local_vifs[i].to = vifs[i].from
16471a5f0c13SLuciano Coelho #endif
16481a5f0c13SLuciano Coelho 
16491a5f0c13SLuciano Coelho TRACE_EVENT(drv_switch_vif_chanctx,
16501a5f0c13SLuciano Coelho 	TP_PROTO(struct ieee80211_local *local,
16511a5f0c13SLuciano Coelho 		 struct ieee80211_vif_chanctx_switch *vifs,
16521a5f0c13SLuciano Coelho 		 int n_vifs, enum ieee80211_chanctx_switch_mode mode),
16531a5f0c13SLuciano Coelho 	    TP_ARGS(local, vifs, n_vifs, mode),
16541a5f0c13SLuciano Coelho 
16551a5f0c13SLuciano Coelho 	TP_STRUCT__entry(
16561a5f0c13SLuciano Coelho 		LOCAL_ENTRY
16571a5f0c13SLuciano Coelho 		__field(int, n_vifs)
16581a5f0c13SLuciano Coelho 		__field(u32, mode)
16591a5f0c13SLuciano Coelho 		__dynamic_array(u8, vifs,
16601a5f0c13SLuciano Coelho 				sizeof(struct trace_switch_entry) * n_vifs)
16611a5f0c13SLuciano Coelho 	),
16621a5f0c13SLuciano Coelho 
16631a5f0c13SLuciano Coelho 	TP_fast_assign(
16641a5f0c13SLuciano Coelho 		LOCAL_ASSIGN;
16651a5f0c13SLuciano Coelho 		__entry->n_vifs = n_vifs;
16661a5f0c13SLuciano Coelho 		__entry->mode = mode;
16671a5f0c13SLuciano Coelho 		{
16681a5f0c13SLuciano Coelho 			struct trace_switch_entry *local_vifs =
16691a5f0c13SLuciano Coelho 				__get_dynamic_array(vifs);
16701a5f0c13SLuciano Coelho 			int i;
16711a5f0c13SLuciano Coelho 
16721a5f0c13SLuciano Coelho 			for (i = 0; i < n_vifs; i++) {
16731a5f0c13SLuciano Coelho 				struct ieee80211_sub_if_data *sdata;
16741a5f0c13SLuciano Coelho 
16751a5f0c13SLuciano Coelho 				sdata = container_of(vifs[i].vif,
16761a5f0c13SLuciano Coelho 						struct ieee80211_sub_if_data,
16771a5f0c13SLuciano Coelho 						vif);
16781a5f0c13SLuciano Coelho 
1679727eff4dSGregory Greenman 				SWITCH_ENTRY_ASSIGN(vif.vif_type, vif->type);
16801a5f0c13SLuciano Coelho 				SWITCH_ENTRY_ASSIGN(vif.p2p, vif->p2p);
16811a5f0c13SLuciano Coelho 				SWITCH_ENTRY_ASSIGN(link_id, link_conf->link_id);
16821a5f0c13SLuciano Coelho 				strncpy(local_vifs[i].vif.vif_name,
16831a5f0c13SLuciano Coelho 					sdata->name,
16841a5f0c13SLuciano Coelho 					sizeof(local_vifs[i].vif.vif_name));
1685b6011960SThomas Pedersen 				SWITCH_ENTRY_ASSIGN(old_chandef.control_freq,
1686b6011960SThomas Pedersen 						old_ctx->def.chan->center_freq);
16871a5f0c13SLuciano Coelho 				SWITCH_ENTRY_ASSIGN(old_chandef.freq_offset,
16881a5f0c13SLuciano Coelho 						old_ctx->def.chan->freq_offset);
16891a5f0c13SLuciano Coelho 				SWITCH_ENTRY_ASSIGN(old_chandef.chan_width,
16901a5f0c13SLuciano Coelho 						    old_ctx->def.width);
1691b6011960SThomas Pedersen 				SWITCH_ENTRY_ASSIGN(old_chandef.center_freq1,
1692b6011960SThomas Pedersen 						    old_ctx->def.center_freq1);
16931a5f0c13SLuciano Coelho 				SWITCH_ENTRY_ASSIGN(old_chandef.freq1_offset,
16941a5f0c13SLuciano Coelho 						    old_ctx->def.freq1_offset);
16951a5f0c13SLuciano Coelho 				SWITCH_ENTRY_ASSIGN(old_chandef.center_freq2,
16961a5f0c13SLuciano Coelho 						    old_ctx->def.center_freq2);
1697b6011960SThomas Pedersen 				SWITCH_ENTRY_ASSIGN(new_chandef.control_freq,
1698b6011960SThomas Pedersen 						new_ctx->def.chan->center_freq);
16991a5f0c13SLuciano Coelho 				SWITCH_ENTRY_ASSIGN(new_chandef.freq_offset,
17001a5f0c13SLuciano Coelho 						new_ctx->def.chan->freq_offset);
17011a5f0c13SLuciano Coelho 				SWITCH_ENTRY_ASSIGN(new_chandef.chan_width,
17021a5f0c13SLuciano Coelho 						    new_ctx->def.width);
1703b6011960SThomas Pedersen 				SWITCH_ENTRY_ASSIGN(new_chandef.center_freq1,
1704b6011960SThomas Pedersen 						    new_ctx->def.center_freq1);
17051a5f0c13SLuciano Coelho 				SWITCH_ENTRY_ASSIGN(new_chandef.freq1_offset,
17061a5f0c13SLuciano Coelho 						    new_ctx->def.freq1_offset);
17071a5f0c13SLuciano Coelho 				SWITCH_ENTRY_ASSIGN(new_chandef.center_freq2,
17081a5f0c13SLuciano Coelho 						    new_ctx->def.center_freq2);
17091a5f0c13SLuciano Coelho 			}
17101a5f0c13SLuciano Coelho 		}
17111a5f0c13SLuciano Coelho 	),
17121a5f0c13SLuciano Coelho 
17131a5f0c13SLuciano Coelho 	TP_printk(
17141a5f0c13SLuciano Coelho 		LOCAL_PR_FMT " n_vifs:%d mode:%d",
17151a5f0c13SLuciano Coelho 		LOCAL_PR_ARG, __entry->n_vifs, __entry->mode
17161a5f0c13SLuciano Coelho 	)
1717c3645eacSMichal Kazior );
1718c3645eacSMichal Kazior 
1719c3645eacSMichal Kazior DECLARE_EVENT_CLASS(local_sdata_chanctx,
1720727eff4dSGregory Greenman 	TP_PROTO(struct ieee80211_local *local,
1721c3645eacSMichal Kazior 		 struct ieee80211_sub_if_data *sdata,
1722c3645eacSMichal Kazior 		 struct ieee80211_bss_conf *link_conf,
1723727eff4dSGregory Greenman 		 struct ieee80211_chanctx *ctx),
1724c3645eacSMichal Kazior 
1725c3645eacSMichal Kazior 	TP_ARGS(local, sdata, link_conf, ctx),
1726c3645eacSMichal Kazior 
1727c3645eacSMichal Kazior 	TP_STRUCT__entry(
1728c3645eacSMichal Kazior 		LOCAL_ENTRY
1729b4f85443SJohannes Berg 		VIF_ENTRY
1730c3645eacSMichal Kazior 		CHANCTX_ENTRY
1731c3645eacSMichal Kazior 		__field(unsigned int, link_id)
1732c3645eacSMichal Kazior 	),
1733c3645eacSMichal Kazior 
1734c3645eacSMichal Kazior 	TP_fast_assign(
1735c3645eacSMichal Kazior 		LOCAL_ASSIGN;
1736727eff4dSGregory Greenman 		VIF_ASSIGN;
1737c3645eacSMichal Kazior 		CHANCTX_ASSIGN;
1738c3645eacSMichal Kazior 		__entry->link_id = link_conf->link_id;
1739c3645eacSMichal Kazior 	),
1740b4f85443SJohannes Berg 
1741b4f85443SJohannes Berg 	TP_printk(
1742c3645eacSMichal Kazior 		LOCAL_PR_FMT VIF_PR_FMT " link_id:%d" CHANCTX_PR_FMT,
1743c3645eacSMichal Kazior 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, CHANCTX_PR_ARG
1744c3645eacSMichal Kazior 	)
1745c3645eacSMichal Kazior );
1746c3645eacSMichal Kazior 
1747c3645eacSMichal Kazior DEFINE_EVENT(local_sdata_chanctx, drv_assign_vif_chanctx,
1748727eff4dSGregory Greenman 	TP_PROTO(struct ieee80211_local *local,
1749c3645eacSMichal Kazior 		 struct ieee80211_sub_if_data *sdata,
1750727eff4dSGregory Greenman 		 struct ieee80211_bss_conf *link_conf,
1751c3645eacSMichal Kazior 		 struct ieee80211_chanctx *ctx),
1752c3645eacSMichal Kazior 	TP_ARGS(local, sdata, link_conf, ctx)
1753c3645eacSMichal Kazior );
1754c3645eacSMichal Kazior 
1755c3645eacSMichal Kazior DEFINE_EVENT(local_sdata_chanctx, drv_unassign_vif_chanctx,
1756727eff4dSGregory Greenman 	TP_PROTO(struct ieee80211_local *local,
1757c3645eacSMichal Kazior 		 struct ieee80211_sub_if_data *sdata,
1758727eff4dSGregory Greenman 		 struct ieee80211_bss_conf *link_conf,
1759c3645eacSMichal Kazior 		 struct ieee80211_chanctx *ctx),
1760c3645eacSMichal Kazior 	TP_ARGS(local, sdata, link_conf, ctx)
17611041638fSJohannes Berg );
17621041638fSJohannes Berg 
17631041638fSJohannes Berg TRACE_EVENT(drv_start_ap,
1764b327c84cSGregory Greenman 	TP_PROTO(struct ieee80211_local *local,
17651041638fSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
1766b327c84cSGregory Greenman 		 struct ieee80211_bss_conf *link_conf),
17671041638fSJohannes Berg 
17681041638fSJohannes Berg 	TP_ARGS(local, sdata, link_conf),
17691041638fSJohannes Berg 
17701041638fSJohannes Berg 	TP_STRUCT__entry(
1771ae7ba17bSShaul Triebitz 		LOCAL_ENTRY
17721041638fSJohannes Berg 		VIF_ENTRY
17731041638fSJohannes Berg 		__field(u32, link_id)
1774f276e20bSJohannes Berg 		__field(u8, dtimper)
177504ae87a5SPeter Zijlstra 		__field(u16, bcnint)
17761041638fSJohannes Berg 		__dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len)
17771041638fSJohannes Berg 		__field(bool, hidden_ssid)
17781041638fSJohannes Berg 	),
17791041638fSJohannes Berg 
17801041638fSJohannes Berg 	TP_fast_assign(
1781b327c84cSGregory Greenman 		LOCAL_ASSIGN;
1782b327c84cSGregory Greenman 		VIF_ASSIGN;
1783b327c84cSGregory Greenman 		__entry->link_id = link_conf->link_id;
1784b327c84cSGregory Greenman 		__entry->dtimper = link_conf->dtim_period;
1785f276e20bSJohannes Berg 		__entry->bcnint = link_conf->beacon_int;
1786f276e20bSJohannes Berg 		__entry->hidden_ssid = link_conf->hidden_ssid;
1787f276e20bSJohannes Berg 		memcpy(__get_dynamic_array(ssid),
17881041638fSJohannes Berg 		       sdata->vif.cfg.ssid,
17891041638fSJohannes Berg 		       sdata->vif.cfg.ssid_len);
17901041638fSJohannes Berg 	),
1791ae7ba17bSShaul Triebitz 
1792ae7ba17bSShaul Triebitz 	TP_printk(
17931041638fSJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT " link id %u",
17941041638fSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id
17951041638fSJohannes Berg 	)
1796ae7ba17bSShaul Triebitz );
17971041638fSJohannes Berg 
1798ae7ba17bSShaul Triebitz TRACE_EVENT(drv_stop_ap,
1799b327c84cSGregory Greenman 	TP_PROTO(struct ieee80211_local *local,
1800ae7ba17bSShaul Triebitz 		 struct ieee80211_sub_if_data *sdata,
1801b327c84cSGregory Greenman 		 struct ieee80211_bss_conf *link_conf),
1802ae7ba17bSShaul Triebitz 
1803ae7ba17bSShaul Triebitz 	TP_ARGS(local, sdata, link_conf),
1804ae7ba17bSShaul Triebitz 
1805ae7ba17bSShaul Triebitz 	TP_STRUCT__entry(
1806ae7ba17bSShaul Triebitz 		LOCAL_ENTRY
1807ae7ba17bSShaul Triebitz 		VIF_ENTRY
1808ae7ba17bSShaul Triebitz 		__field(u32, link_id)
1809ae7ba17bSShaul Triebitz 	),
1810ae7ba17bSShaul Triebitz 
1811ae7ba17bSShaul Triebitz 	TP_fast_assign(
1812b327c84cSGregory Greenman 		LOCAL_ASSIGN;
1813ae7ba17bSShaul Triebitz 		VIF_ASSIGN;
1814ae7ba17bSShaul Triebitz 		__entry->link_id = link_conf->link_id;
1815ae7ba17bSShaul Triebitz 	),
1816ae7ba17bSShaul Triebitz 
1817ae7ba17bSShaul Triebitz 	TP_printk(
1818ae7ba17bSShaul Triebitz 		LOCAL_PR_FMT  VIF_PR_FMT " link id %u",
18191041638fSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id
18201041638fSJohannes Berg 	)
1821cf2c92d8SEliad Peller );
1822cf2c92d8SEliad Peller 
1823cf2c92d8SEliad Peller TRACE_EVENT(drv_reconfig_complete,
1824cf2c92d8SEliad Peller 	TP_PROTO(struct ieee80211_local *local,
1825cf2c92d8SEliad Peller 		 enum ieee80211_reconfig_type reconfig_type),
1826cf2c92d8SEliad Peller 	TP_ARGS(local, reconfig_type),
1827cf2c92d8SEliad Peller 
1828cf2c92d8SEliad Peller 	TP_STRUCT__entry(
1829cf2c92d8SEliad Peller 		LOCAL_ENTRY
1830cf2c92d8SEliad Peller 		__field(u8, reconfig_type)
1831cf2c92d8SEliad Peller 	),
1832cf2c92d8SEliad Peller 
1833cf2c92d8SEliad Peller 	TP_fast_assign(
1834cf2c92d8SEliad Peller 		LOCAL_ASSIGN;
1835cf2c92d8SEliad Peller 		__entry->reconfig_type = reconfig_type;
1836cf2c92d8SEliad Peller 	),
1837cf2c92d8SEliad Peller 
1838cf2c92d8SEliad Peller 	TP_printk(
1839cf2c92d8SEliad Peller 		LOCAL_PR_FMT  " reconfig_type:%d",
1840cf2c92d8SEliad Peller 		LOCAL_PR_ARG, __entry->reconfig_type
18419214ad7fSJohannes Berg 	)
18429214ad7fSJohannes Berg 
1843a65240c1SJohannes Berg );
1844a65240c1SJohannes Berg 
1845a65240c1SJohannes Berg #if IS_ENABLED(CONFIG_IPV6)
1846a65240c1SJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_ipv6_addr_change,
1847a65240c1SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
1848a65240c1SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
1849a65240c1SJohannes Berg 	TP_ARGS(local, sdata)
1850a65240c1SJohannes Berg );
185155fff501SJohannes Berg #endif
185255fff501SJohannes Berg 
185355fff501SJohannes Berg TRACE_EVENT(drv_join_ibss,
185455fff501SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
185555fff501SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
185655fff501SJohannes Berg 		 struct ieee80211_bss_conf *info),
185755fff501SJohannes Berg 
185855fff501SJohannes Berg 	TP_ARGS(local, sdata, info),
185955fff501SJohannes Berg 
186055fff501SJohannes Berg 	TP_STRUCT__entry(
186155fff501SJohannes Berg 		LOCAL_ENTRY
186255fff501SJohannes Berg 		VIF_ENTRY
1863f276e20bSJohannes Berg 		__field(u8, dtimper)
186455fff501SJohannes Berg 		__field(u16, bcnint)
186555fff501SJohannes Berg 		__dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len)
186655fff501SJohannes Berg 	),
186755fff501SJohannes Berg 
186855fff501SJohannes Berg 	TP_fast_assign(
186955fff501SJohannes Berg 		LOCAL_ASSIGN;
187055fff501SJohannes Berg 		VIF_ASSIGN;
1871f276e20bSJohannes Berg 		__entry->dtimper = info->dtim_period;
1872f276e20bSJohannes Berg 		__entry->bcnint = info->beacon_int;
1873f276e20bSJohannes Berg 		memcpy(__get_dynamic_array(ssid),
187455fff501SJohannes Berg 		       sdata->vif.cfg.ssid,
187555fff501SJohannes Berg 		       sdata->vif.cfg.ssid_len);
187655fff501SJohannes Berg 	),
187755fff501SJohannes Berg 
187855fff501SJohannes Berg 	TP_printk(
187955fff501SJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT,
188055fff501SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG
188155fff501SJohannes Berg 	)
188255fff501SJohannes Berg );
188355fff501SJohannes Berg 
188455fff501SJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_leave_ibss,
188555fff501SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
188655fff501SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
188755fff501SJohannes Berg 	TP_ARGS(local, sdata)
1888cca674d4SAntonio Quartulli );
1889cca674d4SAntonio Quartulli 
1890cca674d4SAntonio Quartulli TRACE_EVENT(drv_get_expected_throughput,
1891cca674d4SAntonio Quartulli 	TP_PROTO(struct ieee80211_sta *sta),
1892cca674d4SAntonio Quartulli 
1893cca674d4SAntonio Quartulli 	TP_ARGS(sta),
1894cca674d4SAntonio Quartulli 
1895cca674d4SAntonio Quartulli 	TP_STRUCT__entry(
1896cca674d4SAntonio Quartulli 		STA_ENTRY
1897cca674d4SAntonio Quartulli 	),
1898cca674d4SAntonio Quartulli 
1899cca674d4SAntonio Quartulli 	TP_fast_assign(
1900cca674d4SAntonio Quartulli 		STA_ASSIGN;
1901cca674d4SAntonio Quartulli 	),
1902cca674d4SAntonio Quartulli 
1903cca674d4SAntonio Quartulli 	TP_printk(
1904cca674d4SAntonio Quartulli 		STA_PR_FMT, STA_PR_ARG
1905cca674d4SAntonio Quartulli 	)
1906708d50edSAyala Beker );
1907708d50edSAyala Beker 
1908708d50edSAyala Beker TRACE_EVENT(drv_start_nan,
1909708d50edSAyala Beker 	TP_PROTO(struct ieee80211_local *local,
1910708d50edSAyala Beker 		 struct ieee80211_sub_if_data *sdata,
1911708d50edSAyala Beker 		 struct cfg80211_nan_conf *conf),
1912708d50edSAyala Beker 
1913708d50edSAyala Beker 	TP_ARGS(local, sdata, conf),
1914708d50edSAyala Beker 	TP_STRUCT__entry(
1915708d50edSAyala Beker 		LOCAL_ENTRY
19168585989dSLuca Coelho 		VIF_ENTRY
1917708d50edSAyala Beker 		__field(u8, master_pref)
1918708d50edSAyala Beker 		__field(u8, bands)
1919708d50edSAyala Beker 	),
1920708d50edSAyala Beker 
1921708d50edSAyala Beker 	TP_fast_assign(
1922708d50edSAyala Beker 		LOCAL_ASSIGN;
19238585989dSLuca Coelho 		VIF_ASSIGN;
1924708d50edSAyala Beker 		__entry->master_pref = conf->master_pref;
1925708d50edSAyala Beker 		__entry->bands = conf->bands;
1926708d50edSAyala Beker 	),
1927708d50edSAyala Beker 
19288585989dSLuca Coelho 	TP_printk(
1929708d50edSAyala Beker 		LOCAL_PR_FMT  VIF_PR_FMT
19308585989dSLuca Coelho 		", master preference: %u, bands: 0x%0x",
1931708d50edSAyala Beker 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref,
1932708d50edSAyala Beker 		__entry->bands
1933708d50edSAyala Beker 	)
1934708d50edSAyala Beker );
1935708d50edSAyala Beker 
1936708d50edSAyala Beker TRACE_EVENT(drv_stop_nan,
1937708d50edSAyala Beker 	TP_PROTO(struct ieee80211_local *local,
1938708d50edSAyala Beker 		 struct ieee80211_sub_if_data *sdata),
1939708d50edSAyala Beker 
1940708d50edSAyala Beker 	TP_ARGS(local, sdata),
1941708d50edSAyala Beker 
1942708d50edSAyala Beker 	TP_STRUCT__entry(
1943708d50edSAyala Beker 		LOCAL_ENTRY
1944708d50edSAyala Beker 		VIF_ENTRY
1945708d50edSAyala Beker 	),
1946708d50edSAyala Beker 
1947708d50edSAyala Beker 	TP_fast_assign(
1948708d50edSAyala Beker 		LOCAL_ASSIGN;
1949708d50edSAyala Beker 		VIF_ASSIGN;
1950708d50edSAyala Beker 	),
1951708d50edSAyala Beker 
1952708d50edSAyala Beker 	TP_printk(
1953708d50edSAyala Beker 		LOCAL_PR_FMT  VIF_PR_FMT,
1954708d50edSAyala Beker 		LOCAL_PR_ARG, VIF_PR_ARG
1955708d50edSAyala Beker 	)
19565953ff6dSAyala Beker );
19575953ff6dSAyala Beker 
19585953ff6dSAyala Beker TRACE_EVENT(drv_nan_change_conf,
19595953ff6dSAyala Beker 	TP_PROTO(struct ieee80211_local *local,
19605953ff6dSAyala Beker 		 struct ieee80211_sub_if_data *sdata,
19615953ff6dSAyala Beker 		 struct cfg80211_nan_conf *conf,
19625953ff6dSAyala Beker 		 u32 changes),
19635953ff6dSAyala Beker 
19645953ff6dSAyala Beker 	TP_ARGS(local, sdata, conf, changes),
19655953ff6dSAyala Beker 	TP_STRUCT__entry(
19665953ff6dSAyala Beker 		LOCAL_ENTRY
19678585989dSLuca Coelho 		VIF_ENTRY
19685953ff6dSAyala Beker 		__field(u8, master_pref)
19695953ff6dSAyala Beker 		__field(u8, bands)
19705953ff6dSAyala Beker 		__field(u32, changes)
19715953ff6dSAyala Beker 	),
19725953ff6dSAyala Beker 
19735953ff6dSAyala Beker 	TP_fast_assign(
19745953ff6dSAyala Beker 		LOCAL_ASSIGN;
19758585989dSLuca Coelho 		VIF_ASSIGN;
19765953ff6dSAyala Beker 		__entry->master_pref = conf->master_pref;
19775953ff6dSAyala Beker 		__entry->bands = conf->bands;
19785953ff6dSAyala Beker 		__entry->changes = changes;
19795953ff6dSAyala Beker 	),
19805953ff6dSAyala Beker 
19818585989dSLuca Coelho 	TP_printk(
19825953ff6dSAyala Beker 		LOCAL_PR_FMT  VIF_PR_FMT
19838585989dSLuca Coelho 		", master preference: %u, bands: 0x%0x, changes: 0x%x",
19845953ff6dSAyala Beker 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref,
19855953ff6dSAyala Beker 		__entry->bands, __entry->changes
19865953ff6dSAyala Beker 	)
1987167e33f4SAyala Beker );
1988167e33f4SAyala Beker 
1989167e33f4SAyala Beker TRACE_EVENT(drv_add_nan_func,
1990167e33f4SAyala Beker 	TP_PROTO(struct ieee80211_local *local,
1991167e33f4SAyala Beker 		 struct ieee80211_sub_if_data *sdata,
1992167e33f4SAyala Beker 		 const struct cfg80211_nan_func *func),
1993167e33f4SAyala Beker 
1994167e33f4SAyala Beker 	TP_ARGS(local, sdata, func),
1995167e33f4SAyala Beker 	TP_STRUCT__entry(
1996167e33f4SAyala Beker 		LOCAL_ENTRY
1997167e33f4SAyala Beker 		VIF_ENTRY
1998167e33f4SAyala Beker 		__field(u8, type)
1999167e33f4SAyala Beker 		__field(u8, inst_id)
2000167e33f4SAyala Beker 	),
2001167e33f4SAyala Beker 
2002167e33f4SAyala Beker 	TP_fast_assign(
2003167e33f4SAyala Beker 		LOCAL_ASSIGN;
2004167e33f4SAyala Beker 		VIF_ASSIGN;
2005167e33f4SAyala Beker 		__entry->type = func->type;
2006167e33f4SAyala Beker 		__entry->inst_id = func->instance_id;
2007167e33f4SAyala Beker 	),
2008167e33f4SAyala Beker 
2009167e33f4SAyala Beker 	TP_printk(
2010167e33f4SAyala Beker 		LOCAL_PR_FMT  VIF_PR_FMT
2011167e33f4SAyala Beker 		", type: %u, inst_id: %u",
2012167e33f4SAyala Beker 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->type, __entry->inst_id
2013167e33f4SAyala Beker 	)
2014167e33f4SAyala Beker );
2015167e33f4SAyala Beker 
2016167e33f4SAyala Beker TRACE_EVENT(drv_del_nan_func,
2017167e33f4SAyala Beker 	TP_PROTO(struct ieee80211_local *local,
2018167e33f4SAyala Beker 		 struct ieee80211_sub_if_data *sdata,
2019167e33f4SAyala Beker 		 u8 instance_id),
2020167e33f4SAyala Beker 
2021167e33f4SAyala Beker 	TP_ARGS(local, sdata, instance_id),
2022167e33f4SAyala Beker 	TP_STRUCT__entry(
2023167e33f4SAyala Beker 		LOCAL_ENTRY
2024167e33f4SAyala Beker 		VIF_ENTRY
2025167e33f4SAyala Beker 		__field(u8, instance_id)
2026167e33f4SAyala Beker 	),
2027167e33f4SAyala Beker 
2028167e33f4SAyala Beker 	TP_fast_assign(
2029167e33f4SAyala Beker 		LOCAL_ASSIGN;
2030167e33f4SAyala Beker 		VIF_ASSIGN;
2031167e33f4SAyala Beker 		__entry->instance_id = instance_id;
2032167e33f4SAyala Beker 	),
2033167e33f4SAyala Beker 
2034167e33f4SAyala Beker 	TP_printk(
2035167e33f4SAyala Beker 		LOCAL_PR_FMT  VIF_PR_FMT
2036167e33f4SAyala Beker 		", instance_id: %u",
2037167e33f4SAyala Beker 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->instance_id
2038167e33f4SAyala Beker 	)
2039cee7013bSJohannes Berg );
2040cee7013bSJohannes Berg 
2041cee7013bSJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_start_pmsr,
2042cee7013bSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
2043cee7013bSJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
2044cee7013bSJohannes Berg 	TP_ARGS(local, sdata)
2045cee7013bSJohannes Berg );
2046cee7013bSJohannes Berg 
2047cee7013bSJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_abort_pmsr,
2048cee7013bSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
2049cee7013bSJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
2050cee7013bSJohannes Berg 	TP_ARGS(local, sdata)
205137a7d0daSJohannes Berg );
205237a7d0daSJohannes Berg 
205337a7d0daSJohannes Berg TRACE_EVENT(drv_set_default_unicast_key,
205437a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
205537a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
205637a7d0daSJohannes Berg 		 int key_idx),
205737a7d0daSJohannes Berg 
205837a7d0daSJohannes Berg 	TP_ARGS(local, sdata, key_idx),
205937a7d0daSJohannes Berg 
206037a7d0daSJohannes Berg 	TP_STRUCT__entry(
206137a7d0daSJohannes Berg 		LOCAL_ENTRY
206237a7d0daSJohannes Berg 		VIF_ENTRY
206337a7d0daSJohannes Berg 		__field(int, key_idx)
206437a7d0daSJohannes Berg 	),
206537a7d0daSJohannes Berg 
206637a7d0daSJohannes Berg 	TP_fast_assign(
206737a7d0daSJohannes Berg 		LOCAL_ASSIGN;
206837a7d0daSJohannes Berg 		VIF_ASSIGN;
206937a7d0daSJohannes Berg 		__entry->key_idx = key_idx;
207037a7d0daSJohannes Berg 	),
207137a7d0daSJohannes Berg 
207237a7d0daSJohannes Berg 	TP_printk(LOCAL_PR_FMT VIF_PR_FMT " key_idx:%d",
207337a7d0daSJohannes Berg 		  LOCAL_PR_ARG, VIF_PR_ARG, __entry->key_idx)
207437a7d0daSJohannes Berg );
207537a7d0daSJohannes Berg 
207637a7d0daSJohannes Berg TRACE_EVENT(drv_channel_switch_beacon,
207737a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
207837a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
207937a7d0daSJohannes Berg 		 struct cfg80211_chan_def *chandef),
208037a7d0daSJohannes Berg 
208137a7d0daSJohannes Berg 	TP_ARGS(local, sdata, chandef),
208237a7d0daSJohannes Berg 
208337a7d0daSJohannes Berg 	TP_STRUCT__entry(
208437a7d0daSJohannes Berg 		LOCAL_ENTRY
208537a7d0daSJohannes Berg 		VIF_ENTRY
208637a7d0daSJohannes Berg 		CHANDEF_ENTRY
208737a7d0daSJohannes Berg 	),
208837a7d0daSJohannes Berg 
208937a7d0daSJohannes Berg 	TP_fast_assign(
209037a7d0daSJohannes Berg 		LOCAL_ASSIGN;
209137a7d0daSJohannes Berg 		VIF_ASSIGN;
209237a7d0daSJohannes Berg 		CHANDEF_ASSIGN(chandef);
209337a7d0daSJohannes Berg 	),
209437a7d0daSJohannes Berg 
209537a7d0daSJohannes Berg 	TP_printk(
209637a7d0daSJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT " channel switch to " CHANDEF_PR_FMT,
209737a7d0daSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG
209837a7d0daSJohannes Berg 	)
209937a7d0daSJohannes Berg );
210037a7d0daSJohannes Berg 
210137a7d0daSJohannes Berg TRACE_EVENT(drv_pre_channel_switch,
210237a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
210337a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
210437a7d0daSJohannes Berg 		 struct ieee80211_channel_switch *ch_switch),
210537a7d0daSJohannes Berg 
210637a7d0daSJohannes Berg 	TP_ARGS(local, sdata, ch_switch),
210737a7d0daSJohannes Berg 
210837a7d0daSJohannes Berg 	TP_STRUCT__entry(
210937a7d0daSJohannes Berg 		LOCAL_ENTRY
211037a7d0daSJohannes Berg 		VIF_ENTRY
211137a7d0daSJohannes Berg 		CHANDEF_ENTRY
211237a7d0daSJohannes Berg 		__field(u64, timestamp)
211337a7d0daSJohannes Berg 		__field(u32, device_timestamp)
211437a7d0daSJohannes Berg 		__field(bool, block_tx)
211537a7d0daSJohannes Berg 		__field(u8, count)
211637a7d0daSJohannes Berg 	),
211737a7d0daSJohannes Berg 
211837a7d0daSJohannes Berg 	TP_fast_assign(
211937a7d0daSJohannes Berg 		LOCAL_ASSIGN;
212037a7d0daSJohannes Berg 		VIF_ASSIGN;
212137a7d0daSJohannes Berg 		CHANDEF_ASSIGN(&ch_switch->chandef)
212237a7d0daSJohannes Berg 		__entry->timestamp = ch_switch->timestamp;
212337a7d0daSJohannes Berg 		__entry->device_timestamp = ch_switch->device_timestamp;
212437a7d0daSJohannes Berg 		__entry->block_tx = ch_switch->block_tx;
212537a7d0daSJohannes Berg 		__entry->count = ch_switch->count;
212637a7d0daSJohannes Berg 	),
212737a7d0daSJohannes Berg 
212837a7d0daSJohannes Berg 	TP_printk(
212937a7d0daSJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT " prepare channel switch to "
213037a7d0daSJohannes Berg 		CHANDEF_PR_FMT  " count:%d block_tx:%d timestamp:%llu",
213137a7d0daSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count,
213237a7d0daSJohannes Berg 		__entry->block_tx, __entry->timestamp
213337a7d0daSJohannes Berg 	)
213437a7d0daSJohannes Berg );
213537a7d0daSJohannes Berg 
213637a7d0daSJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_post_channel_switch,
213737a7d0daSJohannes Berg 	     TP_PROTO(struct ieee80211_local *local,
213837a7d0daSJohannes Berg 		      struct ieee80211_sub_if_data *sdata),
213937a7d0daSJohannes Berg 	     TP_ARGS(local, sdata)
214037a7d0daSJohannes Berg );
214137a7d0daSJohannes Berg 
214237a7d0daSJohannes Berg DEFINE_EVENT(local_sdata_evt, drv_abort_channel_switch,
214337a7d0daSJohannes Berg 	     TP_PROTO(struct ieee80211_local *local,
214437a7d0daSJohannes Berg 		      struct ieee80211_sub_if_data *sdata),
214537a7d0daSJohannes Berg 	     TP_ARGS(local, sdata)
214637a7d0daSJohannes Berg );
214737a7d0daSJohannes Berg 
214837a7d0daSJohannes Berg TRACE_EVENT(drv_channel_switch_rx_beacon,
214937a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
215037a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
215137a7d0daSJohannes Berg 		 struct ieee80211_channel_switch *ch_switch),
215237a7d0daSJohannes Berg 
215337a7d0daSJohannes Berg 	TP_ARGS(local, sdata, ch_switch),
215437a7d0daSJohannes Berg 
215537a7d0daSJohannes Berg 	TP_STRUCT__entry(
215637a7d0daSJohannes Berg 		LOCAL_ENTRY
215737a7d0daSJohannes Berg 		VIF_ENTRY
215837a7d0daSJohannes Berg 		CHANDEF_ENTRY
215937a7d0daSJohannes Berg 		__field(u64, timestamp)
216037a7d0daSJohannes Berg 		__field(u32, device_timestamp)
216137a7d0daSJohannes Berg 		__field(bool, block_tx)
216237a7d0daSJohannes Berg 		__field(u8, count)
216337a7d0daSJohannes Berg 	),
216437a7d0daSJohannes Berg 
216537a7d0daSJohannes Berg 	TP_fast_assign(
216637a7d0daSJohannes Berg 		LOCAL_ASSIGN;
216737a7d0daSJohannes Berg 		VIF_ASSIGN;
216837a7d0daSJohannes Berg 		CHANDEF_ASSIGN(&ch_switch->chandef)
216937a7d0daSJohannes Berg 		__entry->timestamp = ch_switch->timestamp;
217037a7d0daSJohannes Berg 		__entry->device_timestamp = ch_switch->device_timestamp;
217137a7d0daSJohannes Berg 		__entry->block_tx = ch_switch->block_tx;
217237a7d0daSJohannes Berg 		__entry->count = ch_switch->count;
217337a7d0daSJohannes Berg 	),
217437a7d0daSJohannes Berg 
217537a7d0daSJohannes Berg 	TP_printk(
217637a7d0daSJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT
217737a7d0daSJohannes Berg 		" received a channel switch beacon to "
217837a7d0daSJohannes Berg 		CHANDEF_PR_FMT  " count:%d block_tx:%d timestamp:%llu",
217937a7d0daSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count,
218037a7d0daSJohannes Berg 		__entry->block_tx, __entry->timestamp
218137a7d0daSJohannes Berg 	)
218237a7d0daSJohannes Berg );
218337a7d0daSJohannes Berg 
218437a7d0daSJohannes Berg TRACE_EVENT(drv_get_txpower,
218537a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
218637a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
218737a7d0daSJohannes Berg 		 int dbm, int ret),
218837a7d0daSJohannes Berg 
218937a7d0daSJohannes Berg 	TP_ARGS(local, sdata, dbm, ret),
219037a7d0daSJohannes Berg 
219137a7d0daSJohannes Berg 	TP_STRUCT__entry(
219237a7d0daSJohannes Berg 		LOCAL_ENTRY
219337a7d0daSJohannes Berg 		VIF_ENTRY
219437a7d0daSJohannes Berg 		__field(int, dbm)
219537a7d0daSJohannes Berg 		__field(int, ret)
219637a7d0daSJohannes Berg 	),
219737a7d0daSJohannes Berg 
219837a7d0daSJohannes Berg 	TP_fast_assign(
219937a7d0daSJohannes Berg 		LOCAL_ASSIGN;
220037a7d0daSJohannes Berg 		VIF_ASSIGN;
220137a7d0daSJohannes Berg 		__entry->dbm = dbm;
220237a7d0daSJohannes Berg 		__entry->ret = ret;
220337a7d0daSJohannes Berg 	),
220437a7d0daSJohannes Berg 
220537a7d0daSJohannes Berg 	TP_printk(
220637a7d0daSJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT " dbm:%d ret:%d",
220737a7d0daSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->dbm, __entry->ret
220837a7d0daSJohannes Berg 	)
220937a7d0daSJohannes Berg );
221037a7d0daSJohannes Berg 
221137a7d0daSJohannes Berg TRACE_EVENT(drv_tdls_channel_switch,
221237a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
221337a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
221437a7d0daSJohannes Berg 		 struct ieee80211_sta *sta, u8 oper_class,
221537a7d0daSJohannes Berg 		 struct cfg80211_chan_def *chandef),
221637a7d0daSJohannes Berg 
221737a7d0daSJohannes Berg 	TP_ARGS(local, sdata, sta, oper_class, chandef),
221837a7d0daSJohannes Berg 
221937a7d0daSJohannes Berg 	TP_STRUCT__entry(
222037a7d0daSJohannes Berg 		LOCAL_ENTRY
222137a7d0daSJohannes Berg 		VIF_ENTRY
222237a7d0daSJohannes Berg 		STA_ENTRY
222337a7d0daSJohannes Berg 		__field(u8, oper_class)
222437a7d0daSJohannes Berg 		CHANDEF_ENTRY
222537a7d0daSJohannes Berg 	),
222637a7d0daSJohannes Berg 
222737a7d0daSJohannes Berg 	TP_fast_assign(
222837a7d0daSJohannes Berg 		LOCAL_ASSIGN;
222937a7d0daSJohannes Berg 		VIF_ASSIGN;
223037a7d0daSJohannes Berg 		STA_ASSIGN;
223137a7d0daSJohannes Berg 		__entry->oper_class = oper_class;
223237a7d0daSJohannes Berg 		CHANDEF_ASSIGN(chandef)
223337a7d0daSJohannes Berg 	),
223437a7d0daSJohannes Berg 
223537a7d0daSJohannes Berg 	TP_printk(
223637a7d0daSJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT " tdls channel switch to"
223737a7d0daSJohannes Berg 		CHANDEF_PR_FMT  " oper_class:%d " STA_PR_FMT,
223837a7d0daSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->oper_class,
223937a7d0daSJohannes Berg 		STA_PR_ARG
224037a7d0daSJohannes Berg 	)
224137a7d0daSJohannes Berg );
224237a7d0daSJohannes Berg 
224337a7d0daSJohannes Berg TRACE_EVENT(drv_tdls_cancel_channel_switch,
224437a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
224537a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
224637a7d0daSJohannes Berg 		 struct ieee80211_sta *sta),
224737a7d0daSJohannes Berg 
224837a7d0daSJohannes Berg 	TP_ARGS(local, sdata, sta),
224937a7d0daSJohannes Berg 
225037a7d0daSJohannes Berg 	TP_STRUCT__entry(
225137a7d0daSJohannes Berg 		LOCAL_ENTRY
225237a7d0daSJohannes Berg 		VIF_ENTRY
225337a7d0daSJohannes Berg 		STA_ENTRY
225437a7d0daSJohannes Berg 	),
225537a7d0daSJohannes Berg 
225637a7d0daSJohannes Berg 	TP_fast_assign(
225737a7d0daSJohannes Berg 		LOCAL_ASSIGN;
225837a7d0daSJohannes Berg 		VIF_ASSIGN;
225937a7d0daSJohannes Berg 		STA_ASSIGN;
226037a7d0daSJohannes Berg 	),
226137a7d0daSJohannes Berg 
226237a7d0daSJohannes Berg 	TP_printk(
226337a7d0daSJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT
226437a7d0daSJohannes Berg 		" tdls cancel channel switch with " STA_PR_FMT,
226537a7d0daSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
226637a7d0daSJohannes Berg 	)
226737a7d0daSJohannes Berg );
226837a7d0daSJohannes Berg 
226937a7d0daSJohannes Berg TRACE_EVENT(drv_tdls_recv_channel_switch,
227037a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
227137a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
227237a7d0daSJohannes Berg 		 struct ieee80211_tdls_ch_sw_params *params),
227337a7d0daSJohannes Berg 
227437a7d0daSJohannes Berg 	TP_ARGS(local, sdata, params),
227537a7d0daSJohannes Berg 
227637a7d0daSJohannes Berg 	TP_STRUCT__entry(
227737a7d0daSJohannes Berg 		LOCAL_ENTRY
227837a7d0daSJohannes Berg 		VIF_ENTRY
227937a7d0daSJohannes Berg 		__field(u8, action_code)
228037a7d0daSJohannes Berg 		STA_ENTRY
228137a7d0daSJohannes Berg 		CHANDEF_ENTRY
228237a7d0daSJohannes Berg 		__field(u32, status)
228337a7d0daSJohannes Berg 		__field(bool, peer_initiator)
228437a7d0daSJohannes Berg 		__field(u32, timestamp)
228537a7d0daSJohannes Berg 		__field(u16, switch_time)
228637a7d0daSJohannes Berg 		__field(u16, switch_timeout)
228737a7d0daSJohannes Berg 	),
228837a7d0daSJohannes Berg 
228937a7d0daSJohannes Berg 	TP_fast_assign(
229037a7d0daSJohannes Berg 		LOCAL_ASSIGN;
229137a7d0daSJohannes Berg 		VIF_ASSIGN;
229237a7d0daSJohannes Berg 		STA_NAMED_ASSIGN(params->sta);
229337a7d0daSJohannes Berg 		CHANDEF_ASSIGN(params->chandef)
229437a7d0daSJohannes Berg 		__entry->peer_initiator = params->sta->tdls_initiator;
229537a7d0daSJohannes Berg 		__entry->action_code = params->action_code;
229637a7d0daSJohannes Berg 		__entry->status = params->status;
229737a7d0daSJohannes Berg 		__entry->timestamp = params->timestamp;
229837a7d0daSJohannes Berg 		__entry->switch_time = params->switch_time;
229937a7d0daSJohannes Berg 		__entry->switch_timeout = params->switch_timeout;
230037a7d0daSJohannes Berg 	),
230137a7d0daSJohannes Berg 
230237a7d0daSJohannes Berg 	TP_printk(
230337a7d0daSJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT " received tdls channel switch packet"
230437a7d0daSJohannes Berg 		" action:%d status:%d time:%d switch time:%d switch"
230537a7d0daSJohannes Berg 		" timeout:%d initiator: %d chan:" CHANDEF_PR_FMT STA_PR_FMT,
230637a7d0daSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->action_code, __entry->status,
230737a7d0daSJohannes Berg 		__entry->timestamp, __entry->switch_time,
230837a7d0daSJohannes Berg 		__entry->switch_timeout, __entry->peer_initiator,
230937a7d0daSJohannes Berg 		CHANDEF_PR_ARG, STA_PR_ARG
231037a7d0daSJohannes Berg 	)
231137a7d0daSJohannes Berg );
231237a7d0daSJohannes Berg 
231337a7d0daSJohannes Berg TRACE_EVENT(drv_wake_tx_queue,
231437a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
231537a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
231637a7d0daSJohannes Berg 		 struct txq_info *txq),
231737a7d0daSJohannes Berg 
231837a7d0daSJohannes Berg 	TP_ARGS(local, sdata, txq),
231937a7d0daSJohannes Berg 
232037a7d0daSJohannes Berg 	TP_STRUCT__entry(
232137a7d0daSJohannes Berg 		LOCAL_ENTRY
232237a7d0daSJohannes Berg 		VIF_ENTRY
232337a7d0daSJohannes Berg 		STA_ENTRY
232437a7d0daSJohannes Berg 		__field(u8, ac)
232537a7d0daSJohannes Berg 		__field(u8, tid)
232637a7d0daSJohannes Berg 	),
232737a7d0daSJohannes Berg 
232837a7d0daSJohannes Berg 	TP_fast_assign(
232937a7d0daSJohannes Berg 		struct ieee80211_sta *sta = txq->txq.sta;
233037a7d0daSJohannes Berg 
233137a7d0daSJohannes Berg 		LOCAL_ASSIGN;
233237a7d0daSJohannes Berg 		VIF_ASSIGN;
233337a7d0daSJohannes Berg 		STA_ASSIGN;
233437a7d0daSJohannes Berg 		__entry->ac = txq->txq.ac;
233537a7d0daSJohannes Berg 		__entry->tid = txq->txq.tid;
233637a7d0daSJohannes Berg 	),
233737a7d0daSJohannes Berg 
233837a7d0daSJohannes Berg 	TP_printk(
233937a7d0daSJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " ac:%d tid:%d",
234037a7d0daSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->ac, __entry->tid
234137a7d0daSJohannes Berg 	)
234237a7d0daSJohannes Berg );
234337a7d0daSJohannes Berg 
234437a7d0daSJohannes Berg TRACE_EVENT(drv_get_ftm_responder_stats,
234537a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
234637a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
234737a7d0daSJohannes Berg 		 struct cfg80211_ftm_responder_stats *ftm_stats),
234837a7d0daSJohannes Berg 
234937a7d0daSJohannes Berg 	TP_ARGS(local, sdata, ftm_stats),
235037a7d0daSJohannes Berg 
235137a7d0daSJohannes Berg 	TP_STRUCT__entry(
235237a7d0daSJohannes Berg 		LOCAL_ENTRY
235337a7d0daSJohannes Berg 		VIF_ENTRY
235437a7d0daSJohannes Berg 	),
235537a7d0daSJohannes Berg 
235637a7d0daSJohannes Berg 	TP_fast_assign(
235737a7d0daSJohannes Berg 		LOCAL_ASSIGN;
235837a7d0daSJohannes Berg 		VIF_ASSIGN;
235937a7d0daSJohannes Berg 	),
236037a7d0daSJohannes Berg 
236137a7d0daSJohannes Berg 	TP_printk(
236237a7d0daSJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT,
236337a7d0daSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG
236437a7d0daSJohannes Berg 	)
236537a7d0daSJohannes Berg );
236637a7d0daSJohannes Berg 
236737a7d0daSJohannes Berg DEFINE_EVENT(local_sdata_addr_evt, drv_update_vif_offload,
236837a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
236937a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
237037a7d0daSJohannes Berg 	TP_ARGS(local, sdata)
237137a7d0daSJohannes Berg );
237237a7d0daSJohannes Berg 
237337a7d0daSJohannes Berg DECLARE_EVENT_CLASS(sta_flag_evt,
237437a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
237537a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
237637a7d0daSJohannes Berg 		 struct ieee80211_sta *sta, bool enabled),
237737a7d0daSJohannes Berg 
237837a7d0daSJohannes Berg 	TP_ARGS(local, sdata, sta, enabled),
237937a7d0daSJohannes Berg 
238037a7d0daSJohannes Berg 	TP_STRUCT__entry(
238137a7d0daSJohannes Berg 		LOCAL_ENTRY
238237a7d0daSJohannes Berg 		VIF_ENTRY
238337a7d0daSJohannes Berg 		STA_ENTRY
238437a7d0daSJohannes Berg 		__field(bool, enabled)
238537a7d0daSJohannes Berg 	),
238637a7d0daSJohannes Berg 
238737a7d0daSJohannes Berg 	TP_fast_assign(
238837a7d0daSJohannes Berg 		LOCAL_ASSIGN;
238937a7d0daSJohannes Berg 		VIF_ASSIGN;
239037a7d0daSJohannes Berg 		STA_ASSIGN;
239137a7d0daSJohannes Berg 		__entry->enabled = enabled;
239237a7d0daSJohannes Berg 	),
239337a7d0daSJohannes Berg 
239437a7d0daSJohannes Berg 	TP_printk(
239537a7d0daSJohannes Berg 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " enabled:%d",
239637a7d0daSJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->enabled
239737a7d0daSJohannes Berg 	)
239837a7d0daSJohannes Berg );
239937a7d0daSJohannes Berg 
240037a7d0daSJohannes Berg DEFINE_EVENT(sta_flag_evt, drv_sta_set_4addr,
240137a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
240237a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
240337a7d0daSJohannes Berg 		 struct ieee80211_sta *sta, bool enabled),
240437a7d0daSJohannes Berg 
240537a7d0daSJohannes Berg 	TP_ARGS(local, sdata, sta, enabled)
240637a7d0daSJohannes Berg );
240737a7d0daSJohannes Berg 
240837a7d0daSJohannes Berg DEFINE_EVENT(sta_flag_evt, drv_sta_set_decap_offload,
240937a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
241037a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
241137a7d0daSJohannes Berg 		 struct ieee80211_sta *sta, bool enabled),
241237a7d0daSJohannes Berg 
241337a7d0daSJohannes Berg 	TP_ARGS(local, sdata, sta, enabled)
241437a7d0daSJohannes Berg );
241537a7d0daSJohannes Berg 
241637a7d0daSJohannes Berg TRACE_EVENT(drv_add_twt_setup,
241737a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
241837a7d0daSJohannes Berg 		 struct ieee80211_sta *sta,
241937a7d0daSJohannes Berg 		 struct ieee80211_twt_setup *twt,
242037a7d0daSJohannes Berg 		 struct ieee80211_twt_params *twt_agrt),
242137a7d0daSJohannes Berg 
242237a7d0daSJohannes Berg 	TP_ARGS(local, sta, twt, twt_agrt),
242337a7d0daSJohannes Berg 
242437a7d0daSJohannes Berg 	TP_STRUCT__entry(
242537a7d0daSJohannes Berg 		LOCAL_ENTRY
242637a7d0daSJohannes Berg 		STA_ENTRY
242737a7d0daSJohannes Berg 		__field(u8, dialog_token)
242837a7d0daSJohannes Berg 		__field(u8, control)
242937a7d0daSJohannes Berg 		__field(__le16, req_type)
243037a7d0daSJohannes Berg 		__field(__le64, twt)
243137a7d0daSJohannes Berg 		__field(u8, duration)
243237a7d0daSJohannes Berg 		__field(__le16, mantissa)
243337a7d0daSJohannes Berg 		__field(u8, channel)
243437a7d0daSJohannes Berg 	),
243537a7d0daSJohannes Berg 
243637a7d0daSJohannes Berg 	TP_fast_assign(
243737a7d0daSJohannes Berg 		LOCAL_ASSIGN;
243837a7d0daSJohannes Berg 		STA_ASSIGN;
243937a7d0daSJohannes Berg 		__entry->dialog_token = twt->dialog_token;
244037a7d0daSJohannes Berg 		__entry->control = twt->control;
244137a7d0daSJohannes Berg 		__entry->req_type = twt_agrt->req_type;
244237a7d0daSJohannes Berg 		__entry->twt = twt_agrt->twt;
244337a7d0daSJohannes Berg 		__entry->duration = twt_agrt->min_twt_dur;
244437a7d0daSJohannes Berg 		__entry->mantissa = twt_agrt->mantissa;
244537a7d0daSJohannes Berg 		__entry->channel = twt_agrt->channel;
244637a7d0daSJohannes Berg 	),
244737a7d0daSJohannes Berg 
244837a7d0daSJohannes Berg 	TP_printk(
244937a7d0daSJohannes Berg 		LOCAL_PR_FMT STA_PR_FMT
245037a7d0daSJohannes Berg 		" token:%d control:0x%02x req_type:0x%04x"
245137a7d0daSJohannes Berg 		" twt:%llu duration:%d mantissa:%d channel:%d",
245237a7d0daSJohannes Berg 		LOCAL_PR_ARG, STA_PR_ARG, __entry->dialog_token,
245337a7d0daSJohannes Berg 		__entry->control, le16_to_cpu(__entry->req_type),
245437a7d0daSJohannes Berg 		le64_to_cpu(__entry->twt), __entry->duration,
245537a7d0daSJohannes Berg 		le16_to_cpu(__entry->mantissa), __entry->channel
245637a7d0daSJohannes Berg 	)
245737a7d0daSJohannes Berg );
245837a7d0daSJohannes Berg 
245937a7d0daSJohannes Berg TRACE_EVENT(drv_twt_teardown_request,
246037a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
246137a7d0daSJohannes Berg 		 struct ieee80211_sta *sta, u8 flowid),
246237a7d0daSJohannes Berg 
246337a7d0daSJohannes Berg 	TP_ARGS(local, sta, flowid),
246437a7d0daSJohannes Berg 
246537a7d0daSJohannes Berg 	TP_STRUCT__entry(
246637a7d0daSJohannes Berg 		LOCAL_ENTRY
246737a7d0daSJohannes Berg 		STA_ENTRY
246837a7d0daSJohannes Berg 		__field(u8, flowid)
246937a7d0daSJohannes Berg 	),
247037a7d0daSJohannes Berg 
247137a7d0daSJohannes Berg 	TP_fast_assign(
247237a7d0daSJohannes Berg 		LOCAL_ASSIGN;
247337a7d0daSJohannes Berg 		STA_ASSIGN;
247437a7d0daSJohannes Berg 		__entry->flowid = flowid;
247537a7d0daSJohannes Berg 	),
247637a7d0daSJohannes Berg 
247737a7d0daSJohannes Berg 	TP_printk(
247837a7d0daSJohannes Berg 		LOCAL_PR_FMT STA_PR_FMT " flowid:%d",
247937a7d0daSJohannes Berg 		LOCAL_PR_ARG, STA_PR_ARG, __entry->flowid
248037a7d0daSJohannes Berg 	)
248137a7d0daSJohannes Berg );
248237a7d0daSJohannes Berg 
248337a7d0daSJohannes Berg DEFINE_EVENT(sta_event, drv_net_fill_forward_path,
248437a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
248537a7d0daSJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
248637a7d0daSJohannes Berg 		 struct ieee80211_sta *sta),
248737a7d0daSJohannes Berg 	TP_ARGS(local, sdata, sta)
248861587f15SFelix Fietkau );
248961587f15SFelix Fietkau 
249061587f15SFelix Fietkau TRACE_EVENT(drv_net_setup_tc,
249161587f15SFelix Fietkau 	TP_PROTO(struct ieee80211_local *local,
249261587f15SFelix Fietkau 		 struct ieee80211_sub_if_data *sdata,
249361587f15SFelix Fietkau 		 u8 type),
249461587f15SFelix Fietkau 
249561587f15SFelix Fietkau 	TP_ARGS(local, sdata, type),
249661587f15SFelix Fietkau 
249761587f15SFelix Fietkau 	TP_STRUCT__entry(
249861587f15SFelix Fietkau 		LOCAL_ENTRY
249961587f15SFelix Fietkau 		VIF_ENTRY
250061587f15SFelix Fietkau 		__field(u8, type)
250161587f15SFelix Fietkau 	),
250261587f15SFelix Fietkau 
250361587f15SFelix Fietkau 	TP_fast_assign(
250461587f15SFelix Fietkau 		LOCAL_ASSIGN;
250561587f15SFelix Fietkau 		VIF_ASSIGN;
250661587f15SFelix Fietkau 		__entry->type = type;
250761587f15SFelix Fietkau 	),
250861587f15SFelix Fietkau 
250961587f15SFelix Fietkau 	TP_printk(
251061587f15SFelix Fietkau 		LOCAL_PR_FMT VIF_PR_FMT " type:%d\n",
251161587f15SFelix Fietkau 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->type
251261587f15SFelix Fietkau 	)
2513d8787ec6SJohannes Berg );
2514d8787ec6SJohannes Berg 
2515d8787ec6SJohannes Berg TRACE_EVENT(drv_change_vif_links,
2516d8787ec6SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
2517d8787ec6SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
2518d8787ec6SJohannes Berg 		 u16 old_links, u16 new_links),
2519d8787ec6SJohannes Berg 
2520d8787ec6SJohannes Berg 	TP_ARGS(local, sdata, old_links, new_links),
2521d8787ec6SJohannes Berg 
2522d8787ec6SJohannes Berg 	TP_STRUCT__entry(
2523d8787ec6SJohannes Berg 		LOCAL_ENTRY
2524d8787ec6SJohannes Berg 		VIF_ENTRY
2525d8787ec6SJohannes Berg 		__field(u16, old_links)
2526d8787ec6SJohannes Berg 		__field(u16, new_links)
2527d8787ec6SJohannes Berg 	),
2528d8787ec6SJohannes Berg 
2529d8787ec6SJohannes Berg 	TP_fast_assign(
2530d8787ec6SJohannes Berg 		LOCAL_ASSIGN;
2531d8787ec6SJohannes Berg 		VIF_ASSIGN;
2532d8787ec6SJohannes Berg 		__entry->old_links = old_links;
2533d8787ec6SJohannes Berg 		__entry->new_links = new_links;
2534d8787ec6SJohannes Berg 	),
2535d8787ec6SJohannes Berg 
2536d8787ec6SJohannes Berg 	TP_printk(
2537d8787ec6SJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT " old_links:0x%04x, new_links:0x%04x\n",
2538d8787ec6SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->old_links, __entry->new_links
2539d8787ec6SJohannes Berg 	)
2540cb71f1d1SJohannes Berg );
2541cb71f1d1SJohannes Berg 
2542cb71f1d1SJohannes Berg TRACE_EVENT(drv_change_sta_links,
2543cb71f1d1SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
2544cb71f1d1SJohannes Berg 		 struct ieee80211_sub_if_data *sdata,
2545cb71f1d1SJohannes Berg 		 struct ieee80211_sta *sta,
2546cb71f1d1SJohannes Berg 		 u16 old_links, u16 new_links),
2547cb71f1d1SJohannes Berg 
2548cb71f1d1SJohannes Berg 	TP_ARGS(local, sdata, sta, old_links, new_links),
2549cb71f1d1SJohannes Berg 
2550cb71f1d1SJohannes Berg 	TP_STRUCT__entry(
2551cb71f1d1SJohannes Berg 		LOCAL_ENTRY
2552cb71f1d1SJohannes Berg 		VIF_ENTRY
2553cb71f1d1SJohannes Berg 		STA_ENTRY
2554cb71f1d1SJohannes Berg 		__field(u16, old_links)
2555cb71f1d1SJohannes Berg 		__field(u16, new_links)
2556cb71f1d1SJohannes Berg 	),
2557cb71f1d1SJohannes Berg 
2558cb71f1d1SJohannes Berg 	TP_fast_assign(
2559cb71f1d1SJohannes Berg 		LOCAL_ASSIGN;
2560cb71f1d1SJohannes Berg 		VIF_ASSIGN;
2561cb71f1d1SJohannes Berg 		STA_ASSIGN;
2562cb71f1d1SJohannes Berg 		__entry->old_links = old_links;
2563cb71f1d1SJohannes Berg 		__entry->new_links = new_links;
2564cb71f1d1SJohannes Berg 	),
2565cb71f1d1SJohannes Berg 
2566cb71f1d1SJohannes Berg 	TP_printk(
2567cb71f1d1SJohannes Berg 		LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " old_links:0x%04x, new_links:0x%04x\n",
2568cb71f1d1SJohannes Berg 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG,
2569cb71f1d1SJohannes Berg 		__entry->old_links, __entry->new_links
2570cb71f1d1SJohannes Berg 	)
2571011ad0e9SJohannes Berg );
2572011ad0e9SJohannes Berg 
2573011ad0e9SJohannes Berg /*
2574011ad0e9SJohannes Berg  * Tracing for API calls that drivers call.
2575011ad0e9SJohannes Berg  */
2576011ad0e9SJohannes Berg 
2577011ad0e9SJohannes Berg TRACE_EVENT(api_start_tx_ba_session,
2578011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_sta *sta, u16 tid),
2579011ad0e9SJohannes Berg 
2580011ad0e9SJohannes Berg 	TP_ARGS(sta, tid),
2581011ad0e9SJohannes Berg 
2582011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2583011ad0e9SJohannes Berg 		STA_ENTRY
2584011ad0e9SJohannes Berg 		__field(u16, tid)
2585011ad0e9SJohannes Berg 	),
2586011ad0e9SJohannes Berg 
2587011ad0e9SJohannes Berg 	TP_fast_assign(
2588011ad0e9SJohannes Berg 		STA_ASSIGN;
2589011ad0e9SJohannes Berg 		__entry->tid = tid;
2590011ad0e9SJohannes Berg 	),
2591011ad0e9SJohannes Berg 
2592011ad0e9SJohannes Berg 	TP_printk(
2593011ad0e9SJohannes Berg 		STA_PR_FMT " tid:%d",
2594011ad0e9SJohannes Berg 		STA_PR_ARG, __entry->tid
2595011ad0e9SJohannes Berg 	)
2596011ad0e9SJohannes Berg );
2597011ad0e9SJohannes Berg 
2598011ad0e9SJohannes Berg TRACE_EVENT(api_start_tx_ba_cb,
2599011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
2600011ad0e9SJohannes Berg 
2601011ad0e9SJohannes Berg 	TP_ARGS(sdata, ra, tid),
2602011ad0e9SJohannes Berg 
2603011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2604011ad0e9SJohannes Berg 		VIF_ENTRY
2605011ad0e9SJohannes Berg 		__array(u8, ra, ETH_ALEN)
2606011ad0e9SJohannes Berg 		__field(u16, tid)
2607011ad0e9SJohannes Berg 	),
2608011ad0e9SJohannes Berg 
2609011ad0e9SJohannes Berg 	TP_fast_assign(
2610011ad0e9SJohannes Berg 		VIF_ASSIGN;
2611011ad0e9SJohannes Berg 		memcpy(__entry->ra, ra, ETH_ALEN);
2612011ad0e9SJohannes Berg 		__entry->tid = tid;
2613011ad0e9SJohannes Berg 	),
2614011ad0e9SJohannes Berg 
2615011ad0e9SJohannes Berg 	TP_printk(
2616011ad0e9SJohannes Berg 		VIF_PR_FMT " ra:%pM tid:%d",
2617011ad0e9SJohannes Berg 		VIF_PR_ARG, __entry->ra, __entry->tid
2618011ad0e9SJohannes Berg 	)
2619011ad0e9SJohannes Berg );
2620011ad0e9SJohannes Berg 
2621011ad0e9SJohannes Berg TRACE_EVENT(api_stop_tx_ba_session,
2622011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_sta *sta, u16 tid),
2623011ad0e9SJohannes Berg 
2624011ad0e9SJohannes Berg 	TP_ARGS(sta, tid),
2625011ad0e9SJohannes Berg 
2626011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2627011ad0e9SJohannes Berg 		STA_ENTRY
2628011ad0e9SJohannes Berg 		__field(u16, tid)
2629011ad0e9SJohannes Berg 	),
2630011ad0e9SJohannes Berg 
2631011ad0e9SJohannes Berg 	TP_fast_assign(
2632011ad0e9SJohannes Berg 		STA_ASSIGN;
2633011ad0e9SJohannes Berg 		__entry->tid = tid;
2634011ad0e9SJohannes Berg 	),
2635011ad0e9SJohannes Berg 
2636011ad0e9SJohannes Berg 	TP_printk(
2637011ad0e9SJohannes Berg 		STA_PR_FMT " tid:%d",
2638011ad0e9SJohannes Berg 		STA_PR_ARG, __entry->tid
2639011ad0e9SJohannes Berg 	)
2640011ad0e9SJohannes Berg );
2641011ad0e9SJohannes Berg 
2642011ad0e9SJohannes Berg TRACE_EVENT(api_stop_tx_ba_cb,
2643011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
2644011ad0e9SJohannes Berg 
2645011ad0e9SJohannes Berg 	TP_ARGS(sdata, ra, tid),
2646011ad0e9SJohannes Berg 
2647011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2648011ad0e9SJohannes Berg 		VIF_ENTRY
2649011ad0e9SJohannes Berg 		__array(u8, ra, ETH_ALEN)
2650011ad0e9SJohannes Berg 		__field(u16, tid)
2651011ad0e9SJohannes Berg 	),
2652011ad0e9SJohannes Berg 
2653011ad0e9SJohannes Berg 	TP_fast_assign(
2654011ad0e9SJohannes Berg 		VIF_ASSIGN;
2655011ad0e9SJohannes Berg 		memcpy(__entry->ra, ra, ETH_ALEN);
2656011ad0e9SJohannes Berg 		__entry->tid = tid;
2657011ad0e9SJohannes Berg 	),
2658011ad0e9SJohannes Berg 
2659011ad0e9SJohannes Berg 	TP_printk(
2660011ad0e9SJohannes Berg 		VIF_PR_FMT " ra:%pM tid:%d",
2661011ad0e9SJohannes Berg 		VIF_PR_ARG, __entry->ra, __entry->tid
2662011ad0e9SJohannes Berg 	)
2663011ad0e9SJohannes Berg );
2664011ad0e9SJohannes Berg 
2665011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, api_restart_hw,
2666011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
2667011ad0e9SJohannes Berg 	TP_ARGS(local)
2668011ad0e9SJohannes Berg );
2669011ad0e9SJohannes Berg 
2670011ad0e9SJohannes Berg TRACE_EVENT(api_beacon_loss,
2671011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_sub_if_data *sdata),
2672011ad0e9SJohannes Berg 
2673011ad0e9SJohannes Berg 	TP_ARGS(sdata),
2674011ad0e9SJohannes Berg 
2675011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2676011ad0e9SJohannes Berg 		VIF_ENTRY
2677011ad0e9SJohannes Berg 	),
2678011ad0e9SJohannes Berg 
2679011ad0e9SJohannes Berg 	TP_fast_assign(
2680011ad0e9SJohannes Berg 		VIF_ASSIGN;
2681011ad0e9SJohannes Berg 	),
2682011ad0e9SJohannes Berg 
2683011ad0e9SJohannes Berg 	TP_printk(
2684011ad0e9SJohannes Berg 		VIF_PR_FMT,
2685011ad0e9SJohannes Berg 		VIF_PR_ARG
2686011ad0e9SJohannes Berg 	)
2687011ad0e9SJohannes Berg );
2688011ad0e9SJohannes Berg 
2689011ad0e9SJohannes Berg TRACE_EVENT(api_connection_loss,
2690011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_sub_if_data *sdata),
2691011ad0e9SJohannes Berg 
2692011ad0e9SJohannes Berg 	TP_ARGS(sdata),
2693011ad0e9SJohannes Berg 
2694011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2695011ad0e9SJohannes Berg 		VIF_ENTRY
2696011ad0e9SJohannes Berg 	),
2697011ad0e9SJohannes Berg 
2698011ad0e9SJohannes Berg 	TP_fast_assign(
2699011ad0e9SJohannes Berg 		VIF_ASSIGN;
2700011ad0e9SJohannes Berg 	),
2701011ad0e9SJohannes Berg 
2702011ad0e9SJohannes Berg 	TP_printk(
2703011ad0e9SJohannes Berg 		VIF_PR_FMT,
2704011ad0e9SJohannes Berg 		VIF_PR_ARG
2705011ad0e9SJohannes Berg 	)
27063f8a39ffSJohannes Berg );
27073f8a39ffSJohannes Berg 
27083f8a39ffSJohannes Berg TRACE_EVENT(api_disconnect,
27093f8a39ffSJohannes Berg 	TP_PROTO(struct ieee80211_sub_if_data *sdata, bool reconnect),
27103f8a39ffSJohannes Berg 
27113f8a39ffSJohannes Berg 	TP_ARGS(sdata, reconnect),
27123f8a39ffSJohannes Berg 
27133f8a39ffSJohannes Berg 	TP_STRUCT__entry(
27143f8a39ffSJohannes Berg 		VIF_ENTRY
27153f8a39ffSJohannes Berg 		__field(int, reconnect)
27163f8a39ffSJohannes Berg 	),
27173f8a39ffSJohannes Berg 
27183f8a39ffSJohannes Berg 	TP_fast_assign(
27193f8a39ffSJohannes Berg 		VIF_ASSIGN;
27203f8a39ffSJohannes Berg 		__entry->reconnect = reconnect;
27213f8a39ffSJohannes Berg 	),
27223f8a39ffSJohannes Berg 
27233f8a39ffSJohannes Berg 	TP_printk(
27243f8a39ffSJohannes Berg 		VIF_PR_FMT " reconnect:%d",
27253f8a39ffSJohannes Berg 		VIF_PR_ARG, __entry->reconnect
27263f8a39ffSJohannes Berg 	)
2727011ad0e9SJohannes Berg );
2728011ad0e9SJohannes Berg 
2729769f07d8SAndrzej Zaborowski TRACE_EVENT(api_cqm_rssi_notify,
2730769f07d8SAndrzej Zaborowski 	TP_PROTO(struct ieee80211_sub_if_data *sdata,
2731011ad0e9SJohannes Berg 		 enum nl80211_cqm_rssi_threshold_event rssi_event,
2732769f07d8SAndrzej Zaborowski 		 s32 rssi_level),
2733011ad0e9SJohannes Berg 
2734011ad0e9SJohannes Berg 	TP_ARGS(sdata, rssi_event, rssi_level),
2735011ad0e9SJohannes Berg 
2736011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2737769f07d8SAndrzej Zaborowski 		VIF_ENTRY
2738011ad0e9SJohannes Berg 		__field(u32, rssi_event)
2739011ad0e9SJohannes Berg 		__field(s32, rssi_level)
2740011ad0e9SJohannes Berg 	),
2741011ad0e9SJohannes Berg 
2742011ad0e9SJohannes Berg 	TP_fast_assign(
2743769f07d8SAndrzej Zaborowski 		VIF_ASSIGN;
2744011ad0e9SJohannes Berg 		__entry->rssi_event = rssi_event;
2745011ad0e9SJohannes Berg 		__entry->rssi_level = rssi_level;
2746011ad0e9SJohannes Berg 	),
2747769f07d8SAndrzej Zaborowski 
2748769f07d8SAndrzej Zaborowski 	TP_printk(
2749011ad0e9SJohannes Berg 		VIF_PR_FMT " event:%d rssi:%d",
2750011ad0e9SJohannes Berg 		VIF_PR_ARG, __entry->rssi_event, __entry->rssi_level
2751011ad0e9SJohannes Berg 	)
275298f03342SJohannes Berg );
275398f03342SJohannes Berg 
275498f03342SJohannes Berg DEFINE_EVENT(local_sdata_evt, api_cqm_beacon_loss_notify,
275598f03342SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
275698f03342SJohannes Berg 		 struct ieee80211_sub_if_data *sdata),
275798f03342SJohannes Berg 	TP_ARGS(local, sdata)
2758011ad0e9SJohannes Berg );
2759011ad0e9SJohannes Berg 
2760011ad0e9SJohannes Berg TRACE_EVENT(api_scan_completed,
2761011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, bool aborted),
2762011ad0e9SJohannes Berg 
2763011ad0e9SJohannes Berg 	TP_ARGS(local, aborted),
2764011ad0e9SJohannes Berg 
2765011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2766011ad0e9SJohannes Berg 		LOCAL_ENTRY
2767011ad0e9SJohannes Berg 		__field(bool, aborted)
2768011ad0e9SJohannes Berg 	),
2769011ad0e9SJohannes Berg 
2770011ad0e9SJohannes Berg 	TP_fast_assign(
2771011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
2772011ad0e9SJohannes Berg 		__entry->aborted = aborted;
2773011ad0e9SJohannes Berg 	),
2774011ad0e9SJohannes Berg 
2775011ad0e9SJohannes Berg 	TP_printk(
2776011ad0e9SJohannes Berg 		LOCAL_PR_FMT " aborted:%d",
2777011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->aborted
2778011ad0e9SJohannes Berg 	)
2779011ad0e9SJohannes Berg );
2780011ad0e9SJohannes Berg 
2781011ad0e9SJohannes Berg TRACE_EVENT(api_sched_scan_results,
2782011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
2783011ad0e9SJohannes Berg 
2784011ad0e9SJohannes Berg 	TP_ARGS(local),
2785011ad0e9SJohannes Berg 
2786011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2787011ad0e9SJohannes Berg 		LOCAL_ENTRY
2788011ad0e9SJohannes Berg 	),
2789011ad0e9SJohannes Berg 
2790011ad0e9SJohannes Berg 	TP_fast_assign(
2791011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
2792011ad0e9SJohannes Berg 	),
2793011ad0e9SJohannes Berg 
2794011ad0e9SJohannes Berg 	TP_printk(
2795011ad0e9SJohannes Berg 		LOCAL_PR_FMT, LOCAL_PR_ARG
2796011ad0e9SJohannes Berg 	)
2797011ad0e9SJohannes Berg );
2798011ad0e9SJohannes Berg 
2799011ad0e9SJohannes Berg TRACE_EVENT(api_sched_scan_stopped,
2800011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
2801011ad0e9SJohannes Berg 
2802011ad0e9SJohannes Berg 	TP_ARGS(local),
2803011ad0e9SJohannes Berg 
2804011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2805011ad0e9SJohannes Berg 		LOCAL_ENTRY
2806011ad0e9SJohannes Berg 	),
2807011ad0e9SJohannes Berg 
2808011ad0e9SJohannes Berg 	TP_fast_assign(
2809011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
2810011ad0e9SJohannes Berg 	),
2811011ad0e9SJohannes Berg 
2812011ad0e9SJohannes Berg 	TP_printk(
2813011ad0e9SJohannes Berg 		LOCAL_PR_FMT, LOCAL_PR_ARG
2814011ad0e9SJohannes Berg 	)
2815011ad0e9SJohannes Berg );
2816011ad0e9SJohannes Berg 
2817011ad0e9SJohannes Berg TRACE_EVENT(api_sta_block_awake,
2818011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
2819011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta, bool block),
2820011ad0e9SJohannes Berg 
2821011ad0e9SJohannes Berg 	TP_ARGS(local, sta, block),
2822011ad0e9SJohannes Berg 
2823011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2824011ad0e9SJohannes Berg 		LOCAL_ENTRY
2825011ad0e9SJohannes Berg 		STA_ENTRY
2826011ad0e9SJohannes Berg 		__field(bool, block)
2827011ad0e9SJohannes Berg 	),
2828011ad0e9SJohannes Berg 
2829011ad0e9SJohannes Berg 	TP_fast_assign(
2830011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
2831011ad0e9SJohannes Berg 		STA_ASSIGN;
2832011ad0e9SJohannes Berg 		__entry->block = block;
2833011ad0e9SJohannes Berg 	),
2834011ad0e9SJohannes Berg 
283515ac7c47SSeth Forshee 	TP_printk(
2836011ad0e9SJohannes Berg 		LOCAL_PR_FMT STA_PR_FMT " block:%d",
2837011ad0e9SJohannes Berg 		LOCAL_PR_ARG, STA_PR_ARG, __entry->block
2838011ad0e9SJohannes Berg 	)
2839011ad0e9SJohannes Berg );
2840011ad0e9SJohannes Berg 
2841011ad0e9SJohannes Berg TRACE_EVENT(api_chswitch_done,
2842011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success),
2843011ad0e9SJohannes Berg 
2844011ad0e9SJohannes Berg 	TP_ARGS(sdata, success),
2845011ad0e9SJohannes Berg 
2846011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2847011ad0e9SJohannes Berg 		VIF_ENTRY
2848011ad0e9SJohannes Berg 		__field(bool, success)
2849011ad0e9SJohannes Berg 	),
2850011ad0e9SJohannes Berg 
2851011ad0e9SJohannes Berg 	TP_fast_assign(
2852011ad0e9SJohannes Berg 		VIF_ASSIGN;
2853011ad0e9SJohannes Berg 		__entry->success = success;
2854011ad0e9SJohannes Berg 	),
2855011ad0e9SJohannes Berg 
2856011ad0e9SJohannes Berg 	TP_printk(
2857011ad0e9SJohannes Berg 		VIF_PR_FMT " success=%d",
2858011ad0e9SJohannes Berg 		VIF_PR_ARG, __entry->success
2859011ad0e9SJohannes Berg 	)
2860011ad0e9SJohannes Berg );
2861011ad0e9SJohannes Berg 
2862011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, api_ready_on_channel,
2863011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
2864011ad0e9SJohannes Berg 	TP_ARGS(local)
2865011ad0e9SJohannes Berg );
2866011ad0e9SJohannes Berg 
2867011ad0e9SJohannes Berg DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired,
2868011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
2869011ad0e9SJohannes Berg 	TP_ARGS(local)
2870011ad0e9SJohannes Berg );
2871011ad0e9SJohannes Berg 
2872011ad0e9SJohannes Berg TRACE_EVENT(api_gtk_rekey_notify,
2873011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_sub_if_data *sdata,
2874011ad0e9SJohannes Berg 		 const u8 *bssid, const u8 *replay_ctr),
2875011ad0e9SJohannes Berg 
2876011ad0e9SJohannes Berg 	TP_ARGS(sdata, bssid, replay_ctr),
2877011ad0e9SJohannes Berg 
2878011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2879011ad0e9SJohannes Berg 		VIF_ENTRY
2880011ad0e9SJohannes Berg 		__array(u8, bssid, ETH_ALEN)
2881011ad0e9SJohannes Berg 		__array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
2882011ad0e9SJohannes Berg 	),
2883011ad0e9SJohannes Berg 
2884011ad0e9SJohannes Berg 	TP_fast_assign(
2885011ad0e9SJohannes Berg 		VIF_ASSIGN;
2886011ad0e9SJohannes Berg 		memcpy(__entry->bssid, bssid, ETH_ALEN);
2887011ad0e9SJohannes Berg 		memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN);
2888011ad0e9SJohannes Berg 	),
2889011ad0e9SJohannes Berg 
2890011ad0e9SJohannes Berg 	TP_printk(VIF_PR_FMT, VIF_PR_ARG)
2891011ad0e9SJohannes Berg );
2892011ad0e9SJohannes Berg 
2893011ad0e9SJohannes Berg TRACE_EVENT(api_enable_rssi_reports,
2894011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_sub_if_data *sdata,
2895011ad0e9SJohannes Berg 		 int rssi_min_thold, int rssi_max_thold),
2896011ad0e9SJohannes Berg 
2897011ad0e9SJohannes Berg 	TP_ARGS(sdata, rssi_min_thold, rssi_max_thold),
2898011ad0e9SJohannes Berg 
2899011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2900011ad0e9SJohannes Berg 		VIF_ENTRY
2901011ad0e9SJohannes Berg 		__field(int, rssi_min_thold)
2902011ad0e9SJohannes Berg 		__field(int, rssi_max_thold)
2903011ad0e9SJohannes Berg 	),
2904011ad0e9SJohannes Berg 
2905011ad0e9SJohannes Berg 	TP_fast_assign(
2906011ad0e9SJohannes Berg 		VIF_ASSIGN;
2907011ad0e9SJohannes Berg 		__entry->rssi_min_thold = rssi_min_thold;
2908011ad0e9SJohannes Berg 		__entry->rssi_max_thold = rssi_max_thold;
2909011ad0e9SJohannes Berg 	),
2910011ad0e9SJohannes Berg 
2911011ad0e9SJohannes Berg 	TP_printk(
2912011ad0e9SJohannes Berg 		VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d",
2913011ad0e9SJohannes Berg 		VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold
2914011ad0e9SJohannes Berg 	)
2915011ad0e9SJohannes Berg );
2916011ad0e9SJohannes Berg 
2917011ad0e9SJohannes Berg TRACE_EVENT(api_eosp,
2918011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
2919011ad0e9SJohannes Berg 		 struct ieee80211_sta *sta),
2920011ad0e9SJohannes Berg 
2921011ad0e9SJohannes Berg 	TP_ARGS(local, sta),
2922011ad0e9SJohannes Berg 
2923011ad0e9SJohannes Berg 	TP_STRUCT__entry(
2924011ad0e9SJohannes Berg 		LOCAL_ENTRY
2925011ad0e9SJohannes Berg 		STA_ENTRY
2926011ad0e9SJohannes Berg 	),
2927011ad0e9SJohannes Berg 
2928011ad0e9SJohannes Berg 	TP_fast_assign(
2929011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
2930011ad0e9SJohannes Berg 		STA_ASSIGN;
2931011ad0e9SJohannes Berg 	),
2932011ad0e9SJohannes Berg 
293315ac7c47SSeth Forshee 	TP_printk(
2934011ad0e9SJohannes Berg 		LOCAL_PR_FMT STA_PR_FMT,
2935011ad0e9SJohannes Berg 		LOCAL_PR_ARG, STA_PR_ARG
2936011ad0e9SJohannes Berg 	)
29370ead2510SEmmanuel Grumbach );
29380ead2510SEmmanuel Grumbach 
29390ead2510SEmmanuel Grumbach TRACE_EVENT(api_send_eosp_nullfunc,
29400ead2510SEmmanuel Grumbach 	TP_PROTO(struct ieee80211_local *local,
29410ead2510SEmmanuel Grumbach 		 struct ieee80211_sta *sta,
29420ead2510SEmmanuel Grumbach 		 u8 tid),
29430ead2510SEmmanuel Grumbach 
29440ead2510SEmmanuel Grumbach 	TP_ARGS(local, sta, tid),
29450ead2510SEmmanuel Grumbach 
29460ead2510SEmmanuel Grumbach 	TP_STRUCT__entry(
29470ead2510SEmmanuel Grumbach 		LOCAL_ENTRY
29480ead2510SEmmanuel Grumbach 		STA_ENTRY
29490ead2510SEmmanuel Grumbach 		__field(u8, tid)
29500ead2510SEmmanuel Grumbach 	),
29510ead2510SEmmanuel Grumbach 
29520ead2510SEmmanuel Grumbach 	TP_fast_assign(
29530ead2510SEmmanuel Grumbach 		LOCAL_ASSIGN;
29540ead2510SEmmanuel Grumbach 		STA_ASSIGN;
29550ead2510SEmmanuel Grumbach 		__entry->tid = tid;
29560ead2510SEmmanuel Grumbach 	),
29570ead2510SEmmanuel Grumbach 
29580ead2510SEmmanuel Grumbach 	TP_printk(
29590ead2510SEmmanuel Grumbach 		LOCAL_PR_FMT STA_PR_FMT " tid:%d",
29600ead2510SEmmanuel Grumbach 		LOCAL_PR_ARG, STA_PR_ARG, __entry->tid
29610ead2510SEmmanuel Grumbach 	)
29621b000789SJohannes Berg );
29631b000789SJohannes Berg 
29641b000789SJohannes Berg TRACE_EVENT(api_sta_set_buffered,
29651b000789SJohannes Berg 	TP_PROTO(struct ieee80211_local *local,
29661b000789SJohannes Berg 		 struct ieee80211_sta *sta,
29671b000789SJohannes Berg 		 u8 tid, bool buffered),
29681b000789SJohannes Berg 
29691b000789SJohannes Berg 	TP_ARGS(local, sta, tid, buffered),
29701b000789SJohannes Berg 
29711b000789SJohannes Berg 	TP_STRUCT__entry(
29721b000789SJohannes Berg 		LOCAL_ENTRY
29731b000789SJohannes Berg 		STA_ENTRY
29741b000789SJohannes Berg 		__field(u8, tid)
29751b000789SJohannes Berg 		__field(bool, buffered)
29761b000789SJohannes Berg 	),
29771b000789SJohannes Berg 
29781b000789SJohannes Berg 	TP_fast_assign(
29791b000789SJohannes Berg 		LOCAL_ASSIGN;
29801b000789SJohannes Berg 		STA_ASSIGN;
29811b000789SJohannes Berg 		__entry->tid = tid;
29821b000789SJohannes Berg 		__entry->buffered = buffered;
29831b000789SJohannes Berg 	),
29841b000789SJohannes Berg 
29851b000789SJohannes Berg 	TP_printk(
29861b000789SJohannes Berg 		LOCAL_PR_FMT STA_PR_FMT " tid:%d buffered:%d",
29871b000789SJohannes Berg 		LOCAL_PR_ARG, STA_PR_ARG, __entry->tid, __entry->buffered
29881b000789SJohannes Berg 	)
298937a7d0daSJohannes Berg );
299037a7d0daSJohannes Berg 
299137a7d0daSJohannes Berg TRACE_EVENT(api_radar_detected,
299237a7d0daSJohannes Berg 	TP_PROTO(struct ieee80211_local *local),
299337a7d0daSJohannes Berg 
299437a7d0daSJohannes Berg 	TP_ARGS(local),
299537a7d0daSJohannes Berg 
299637a7d0daSJohannes Berg 	TP_STRUCT__entry(
299737a7d0daSJohannes Berg 		LOCAL_ENTRY
299837a7d0daSJohannes Berg 	),
299937a7d0daSJohannes Berg 
300037a7d0daSJohannes Berg 	TP_fast_assign(
300137a7d0daSJohannes Berg 		LOCAL_ASSIGN;
300237a7d0daSJohannes Berg 	),
300337a7d0daSJohannes Berg 
300437a7d0daSJohannes Berg 	TP_printk(
300537a7d0daSJohannes Berg 		LOCAL_PR_FMT " radar detected",
300637a7d0daSJohannes Berg 		LOCAL_PR_ARG
300737a7d0daSJohannes Berg 	)
3008011ad0e9SJohannes Berg );
3009011ad0e9SJohannes Berg 
3010011ad0e9SJohannes Berg /*
3011011ad0e9SJohannes Berg  * Tracing for internal functions
3012011ad0e9SJohannes Berg  * (which may also be called in response to driver calls)
3013011ad0e9SJohannes Berg  */
3014011ad0e9SJohannes Berg 
3015011ad0e9SJohannes Berg TRACE_EVENT(wake_queue,
3016011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, u16 queue,
3017011ad0e9SJohannes Berg 		 enum queue_stop_reason reason),
3018011ad0e9SJohannes Berg 
3019011ad0e9SJohannes Berg 	TP_ARGS(local, queue, reason),
3020011ad0e9SJohannes Berg 
3021011ad0e9SJohannes Berg 	TP_STRUCT__entry(
3022011ad0e9SJohannes Berg 		LOCAL_ENTRY
3023011ad0e9SJohannes Berg 		__field(u16, queue)
3024011ad0e9SJohannes Berg 		__field(u32, reason)
3025011ad0e9SJohannes Berg 	),
3026011ad0e9SJohannes Berg 
3027011ad0e9SJohannes Berg 	TP_fast_assign(
3028011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
3029011ad0e9SJohannes Berg 		__entry->queue = queue;
3030011ad0e9SJohannes Berg 		__entry->reason = reason;
3031011ad0e9SJohannes Berg 	),
3032011ad0e9SJohannes Berg 
3033011ad0e9SJohannes Berg 	TP_printk(
3034011ad0e9SJohannes Berg 		LOCAL_PR_FMT " queue:%d, reason:%d",
3035011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->queue, __entry->reason
3036011ad0e9SJohannes Berg 	)
3037011ad0e9SJohannes Berg );
3038011ad0e9SJohannes Berg 
3039011ad0e9SJohannes Berg TRACE_EVENT(stop_queue,
3040011ad0e9SJohannes Berg 	TP_PROTO(struct ieee80211_local *local, u16 queue,
3041011ad0e9SJohannes Berg 		 enum queue_stop_reason reason),
3042011ad0e9SJohannes Berg 
3043011ad0e9SJohannes Berg 	TP_ARGS(local, queue, reason),
3044011ad0e9SJohannes Berg 
3045011ad0e9SJohannes Berg 	TP_STRUCT__entry(
3046011ad0e9SJohannes Berg 		LOCAL_ENTRY
3047011ad0e9SJohannes Berg 		__field(u16, queue)
3048011ad0e9SJohannes Berg 		__field(u32, reason)
3049011ad0e9SJohannes Berg 	),
3050011ad0e9SJohannes Berg 
3051011ad0e9SJohannes Berg 	TP_fast_assign(
3052011ad0e9SJohannes Berg 		LOCAL_ASSIGN;
3053011ad0e9SJohannes Berg 		__entry->queue = queue;
3054011ad0e9SJohannes Berg 		__entry->reason = reason;
3055011ad0e9SJohannes Berg 	),
3056011ad0e9SJohannes Berg 
3057011ad0e9SJohannes Berg 	TP_printk(
3058011ad0e9SJohannes Berg 		LOCAL_PR_FMT " queue:%d, reason:%d",
3059011ad0e9SJohannes Berg 		LOCAL_PR_ARG, __entry->queue, __entry->reason
30603fae0273SJohannes Berg 	)
3061011ad0e9SJohannes Berg );
3062011ad0e9SJohannes Berg 
3063011ad0e9SJohannes Berg #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
3064011ad0e9SJohannes Berg 
3065011ad0e9SJohannes Berg #undef TRACE_INCLUDE_PATH
3066011ad0e9SJohannes Berg #define TRACE_INCLUDE_PATH .
3067011ad0e9SJohannes Berg #undef TRACE_INCLUDE_FILE
3068 #define TRACE_INCLUDE_FILE trace
3069 #include <trace/define_trace.h>
3070