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