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