xref: /linux/net/mac80211/trace.h (revision 0f5d68004780effdacf14b7346f235e212cf8ba6)
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 				strncpy(local_vifs[i].vif.vif_name,
1782 					sdata->name,
1783 					sizeof(local_vifs[i].vif.vif_name));
1784 				SWITCH_ENTRY_ASSIGN(old_chandef.control_freq,
1785 						old_ctx->def.chan->center_freq);
1786 				SWITCH_ENTRY_ASSIGN(old_chandef.freq_offset,
1787 						old_ctx->def.chan->freq_offset);
1788 				SWITCH_ENTRY_ASSIGN(old_chandef.chan_width,
1789 						    old_ctx->def.width);
1790 				SWITCH_ENTRY_ASSIGN(old_chandef.center_freq1,
1791 						    old_ctx->def.center_freq1);
1792 				SWITCH_ENTRY_ASSIGN(old_chandef.freq1_offset,
1793 						    old_ctx->def.freq1_offset);
1794 				SWITCH_ENTRY_ASSIGN(old_chandef.center_freq2,
1795 						    old_ctx->def.center_freq2);
1796 				SWITCH_ENTRY_ASSIGN(new_chandef.control_freq,
1797 						new_ctx->def.chan->center_freq);
1798 				SWITCH_ENTRY_ASSIGN(new_chandef.freq_offset,
1799 						new_ctx->def.chan->freq_offset);
1800 				SWITCH_ENTRY_ASSIGN(new_chandef.chan_width,
1801 						    new_ctx->def.width);
1802 				SWITCH_ENTRY_ASSIGN(new_chandef.center_freq1,
1803 						    new_ctx->def.center_freq1);
1804 				SWITCH_ENTRY_ASSIGN(new_chandef.freq1_offset,
1805 						    new_ctx->def.freq1_offset);
1806 				SWITCH_ENTRY_ASSIGN(new_chandef.center_freq2,
1807 						    new_ctx->def.center_freq2);
1808 			}
1809 		}
1810 	),
1811 
1812 	TP_printk(
1813 		LOCAL_PR_FMT " n_vifs:%d mode:%d",
1814 		LOCAL_PR_ARG, __entry->n_vifs, __entry->mode
1815 	)
1816 );
1817 
1818 DECLARE_EVENT_CLASS(local_sdata_chanctx,
1819 	TP_PROTO(struct ieee80211_local *local,
1820 		 struct ieee80211_sub_if_data *sdata,
1821 		 struct ieee80211_bss_conf *link_conf,
1822 		 struct ieee80211_chanctx *ctx),
1823 
1824 	TP_ARGS(local, sdata, link_conf, ctx),
1825 
1826 	TP_STRUCT__entry(
1827 		LOCAL_ENTRY
1828 		VIF_ENTRY
1829 		CHANCTX_ENTRY
1830 		__field(unsigned int, link_id)
1831 	),
1832 
1833 	TP_fast_assign(
1834 		LOCAL_ASSIGN;
1835 		VIF_ASSIGN;
1836 		CHANCTX_ASSIGN;
1837 		__entry->link_id = link_conf->link_id;
1838 	),
1839 
1840 	TP_printk(
1841 		LOCAL_PR_FMT VIF_PR_FMT " link_id:%d" CHANCTX_PR_FMT,
1842 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, CHANCTX_PR_ARG
1843 	)
1844 );
1845 
1846 DEFINE_EVENT(local_sdata_chanctx, drv_assign_vif_chanctx,
1847 	TP_PROTO(struct ieee80211_local *local,
1848 		 struct ieee80211_sub_if_data *sdata,
1849 		 struct ieee80211_bss_conf *link_conf,
1850 		 struct ieee80211_chanctx *ctx),
1851 	TP_ARGS(local, sdata, link_conf, ctx)
1852 );
1853 
1854 DEFINE_EVENT(local_sdata_chanctx, drv_unassign_vif_chanctx,
1855 	TP_PROTO(struct ieee80211_local *local,
1856 		 struct ieee80211_sub_if_data *sdata,
1857 		 struct ieee80211_bss_conf *link_conf,
1858 		 struct ieee80211_chanctx *ctx),
1859 	TP_ARGS(local, sdata, link_conf, ctx)
1860 );
1861 
1862 TRACE_EVENT(drv_start_ap,
1863 	TP_PROTO(struct ieee80211_local *local,
1864 		 struct ieee80211_sub_if_data *sdata,
1865 		 struct ieee80211_bss_conf *link_conf),
1866 
1867 	TP_ARGS(local, sdata, link_conf),
1868 
1869 	TP_STRUCT__entry(
1870 		LOCAL_ENTRY
1871 		VIF_ENTRY
1872 		__field(u32, link_id)
1873 		__field(u8, dtimper)
1874 		__field(u16, bcnint)
1875 		__dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len)
1876 		__field(bool, hidden_ssid)
1877 	),
1878 
1879 	TP_fast_assign(
1880 		LOCAL_ASSIGN;
1881 		VIF_ASSIGN;
1882 		__entry->link_id = link_conf->link_id;
1883 		__entry->dtimper = link_conf->dtim_period;
1884 		__entry->bcnint = link_conf->beacon_int;
1885 		__entry->hidden_ssid = link_conf->hidden_ssid;
1886 		memcpy(__get_dynamic_array(ssid),
1887 		       sdata->vif.cfg.ssid,
1888 		       sdata->vif.cfg.ssid_len);
1889 	),
1890 
1891 	TP_printk(
1892 		LOCAL_PR_FMT  VIF_PR_FMT " link id %u",
1893 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id
1894 	)
1895 );
1896 
1897 TRACE_EVENT(drv_stop_ap,
1898 	TP_PROTO(struct ieee80211_local *local,
1899 		 struct ieee80211_sub_if_data *sdata,
1900 		 struct ieee80211_bss_conf *link_conf),
1901 
1902 	TP_ARGS(local, sdata, link_conf),
1903 
1904 	TP_STRUCT__entry(
1905 		LOCAL_ENTRY
1906 		VIF_ENTRY
1907 		__field(u32, link_id)
1908 	),
1909 
1910 	TP_fast_assign(
1911 		LOCAL_ASSIGN;
1912 		VIF_ASSIGN;
1913 		__entry->link_id = link_conf->link_id;
1914 	),
1915 
1916 	TP_printk(
1917 		LOCAL_PR_FMT  VIF_PR_FMT " link id %u",
1918 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id
1919 	)
1920 );
1921 
1922 TRACE_EVENT(drv_reconfig_complete,
1923 	TP_PROTO(struct ieee80211_local *local,
1924 		 enum ieee80211_reconfig_type reconfig_type),
1925 	TP_ARGS(local, reconfig_type),
1926 
1927 	TP_STRUCT__entry(
1928 		LOCAL_ENTRY
1929 		__field(u8, reconfig_type)
1930 	),
1931 
1932 	TP_fast_assign(
1933 		LOCAL_ASSIGN;
1934 		__entry->reconfig_type = reconfig_type;
1935 	),
1936 
1937 	TP_printk(
1938 		LOCAL_PR_FMT  " reconfig_type:%d",
1939 		LOCAL_PR_ARG, __entry->reconfig_type
1940 	)
1941 
1942 );
1943 
1944 #if IS_ENABLED(CONFIG_IPV6)
1945 DEFINE_EVENT(local_sdata_evt, drv_ipv6_addr_change,
1946 	TP_PROTO(struct ieee80211_local *local,
1947 		 struct ieee80211_sub_if_data *sdata),
1948 	TP_ARGS(local, sdata)
1949 );
1950 #endif
1951 
1952 TRACE_EVENT(drv_join_ibss,
1953 	TP_PROTO(struct ieee80211_local *local,
1954 		 struct ieee80211_sub_if_data *sdata,
1955 		 struct ieee80211_bss_conf *info),
1956 
1957 	TP_ARGS(local, sdata, info),
1958 
1959 	TP_STRUCT__entry(
1960 		LOCAL_ENTRY
1961 		VIF_ENTRY
1962 		__field(u8, dtimper)
1963 		__field(u16, bcnint)
1964 		__dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len)
1965 	),
1966 
1967 	TP_fast_assign(
1968 		LOCAL_ASSIGN;
1969 		VIF_ASSIGN;
1970 		__entry->dtimper = info->dtim_period;
1971 		__entry->bcnint = info->beacon_int;
1972 		memcpy(__get_dynamic_array(ssid),
1973 		       sdata->vif.cfg.ssid,
1974 		       sdata->vif.cfg.ssid_len);
1975 	),
1976 
1977 	TP_printk(
1978 		LOCAL_PR_FMT  VIF_PR_FMT,
1979 		LOCAL_PR_ARG, VIF_PR_ARG
1980 	)
1981 );
1982 
1983 DEFINE_EVENT(local_sdata_evt, drv_leave_ibss,
1984 	TP_PROTO(struct ieee80211_local *local,
1985 		 struct ieee80211_sub_if_data *sdata),
1986 	TP_ARGS(local, sdata)
1987 );
1988 
1989 TRACE_EVENT(drv_get_expected_throughput,
1990 	TP_PROTO(struct ieee80211_sta *sta),
1991 
1992 	TP_ARGS(sta),
1993 
1994 	TP_STRUCT__entry(
1995 		STA_ENTRY
1996 	),
1997 
1998 	TP_fast_assign(
1999 		STA_ASSIGN;
2000 	),
2001 
2002 	TP_printk(
2003 		STA_PR_FMT, STA_PR_ARG
2004 	)
2005 );
2006 
2007 TRACE_EVENT(drv_start_nan,
2008 	TP_PROTO(struct ieee80211_local *local,
2009 		 struct ieee80211_sub_if_data *sdata,
2010 		 struct cfg80211_nan_conf *conf),
2011 
2012 	TP_ARGS(local, sdata, conf),
2013 	TP_STRUCT__entry(
2014 		LOCAL_ENTRY
2015 		VIF_ENTRY
2016 		__field(u8, master_pref)
2017 		__field(u8, bands)
2018 	),
2019 
2020 	TP_fast_assign(
2021 		LOCAL_ASSIGN;
2022 		VIF_ASSIGN;
2023 		__entry->master_pref = conf->master_pref;
2024 		__entry->bands = conf->bands;
2025 	),
2026 
2027 	TP_printk(
2028 		LOCAL_PR_FMT  VIF_PR_FMT
2029 		", master preference: %u, bands: 0x%0x",
2030 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref,
2031 		__entry->bands
2032 	)
2033 );
2034 
2035 TRACE_EVENT(drv_stop_nan,
2036 	TP_PROTO(struct ieee80211_local *local,
2037 		 struct ieee80211_sub_if_data *sdata),
2038 
2039 	TP_ARGS(local, sdata),
2040 
2041 	TP_STRUCT__entry(
2042 		LOCAL_ENTRY
2043 		VIF_ENTRY
2044 	),
2045 
2046 	TP_fast_assign(
2047 		LOCAL_ASSIGN;
2048 		VIF_ASSIGN;
2049 	),
2050 
2051 	TP_printk(
2052 		LOCAL_PR_FMT  VIF_PR_FMT,
2053 		LOCAL_PR_ARG, VIF_PR_ARG
2054 	)
2055 );
2056 
2057 TRACE_EVENT(drv_nan_change_conf,
2058 	TP_PROTO(struct ieee80211_local *local,
2059 		 struct ieee80211_sub_if_data *sdata,
2060 		 struct cfg80211_nan_conf *conf,
2061 		 u32 changes),
2062 
2063 	TP_ARGS(local, sdata, conf, changes),
2064 	TP_STRUCT__entry(
2065 		LOCAL_ENTRY
2066 		VIF_ENTRY
2067 		__field(u8, master_pref)
2068 		__field(u8, bands)
2069 		__field(u32, changes)
2070 	),
2071 
2072 	TP_fast_assign(
2073 		LOCAL_ASSIGN;
2074 		VIF_ASSIGN;
2075 		__entry->master_pref = conf->master_pref;
2076 		__entry->bands = conf->bands;
2077 		__entry->changes = changes;
2078 	),
2079 
2080 	TP_printk(
2081 		LOCAL_PR_FMT  VIF_PR_FMT
2082 		", master preference: %u, bands: 0x%0x, changes: 0x%x",
2083 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref,
2084 		__entry->bands, __entry->changes
2085 	)
2086 );
2087 
2088 TRACE_EVENT(drv_add_nan_func,
2089 	TP_PROTO(struct ieee80211_local *local,
2090 		 struct ieee80211_sub_if_data *sdata,
2091 		 const struct cfg80211_nan_func *func),
2092 
2093 	TP_ARGS(local, sdata, func),
2094 	TP_STRUCT__entry(
2095 		LOCAL_ENTRY
2096 		VIF_ENTRY
2097 		__field(u8, type)
2098 		__field(u8, inst_id)
2099 	),
2100 
2101 	TP_fast_assign(
2102 		LOCAL_ASSIGN;
2103 		VIF_ASSIGN;
2104 		__entry->type = func->type;
2105 		__entry->inst_id = func->instance_id;
2106 	),
2107 
2108 	TP_printk(
2109 		LOCAL_PR_FMT  VIF_PR_FMT
2110 		", type: %u, inst_id: %u",
2111 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->type, __entry->inst_id
2112 	)
2113 );
2114 
2115 TRACE_EVENT(drv_del_nan_func,
2116 	TP_PROTO(struct ieee80211_local *local,
2117 		 struct ieee80211_sub_if_data *sdata,
2118 		 u8 instance_id),
2119 
2120 	TP_ARGS(local, sdata, instance_id),
2121 	TP_STRUCT__entry(
2122 		LOCAL_ENTRY
2123 		VIF_ENTRY
2124 		__field(u8, instance_id)
2125 	),
2126 
2127 	TP_fast_assign(
2128 		LOCAL_ASSIGN;
2129 		VIF_ASSIGN;
2130 		__entry->instance_id = instance_id;
2131 	),
2132 
2133 	TP_printk(
2134 		LOCAL_PR_FMT  VIF_PR_FMT
2135 		", instance_id: %u",
2136 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->instance_id
2137 	)
2138 );
2139 
2140 DEFINE_EVENT(local_sdata_evt, drv_start_pmsr,
2141 	TP_PROTO(struct ieee80211_local *local,
2142 		 struct ieee80211_sub_if_data *sdata),
2143 	TP_ARGS(local, sdata)
2144 );
2145 
2146 DEFINE_EVENT(local_sdata_evt, drv_abort_pmsr,
2147 	TP_PROTO(struct ieee80211_local *local,
2148 		 struct ieee80211_sub_if_data *sdata),
2149 	TP_ARGS(local, sdata)
2150 );
2151 
2152 TRACE_EVENT(drv_set_default_unicast_key,
2153 	TP_PROTO(struct ieee80211_local *local,
2154 		 struct ieee80211_sub_if_data *sdata,
2155 		 int key_idx),
2156 
2157 	TP_ARGS(local, sdata, key_idx),
2158 
2159 	TP_STRUCT__entry(
2160 		LOCAL_ENTRY
2161 		VIF_ENTRY
2162 		__field(int, key_idx)
2163 	),
2164 
2165 	TP_fast_assign(
2166 		LOCAL_ASSIGN;
2167 		VIF_ASSIGN;
2168 		__entry->key_idx = key_idx;
2169 	),
2170 
2171 	TP_printk(LOCAL_PR_FMT VIF_PR_FMT " key_idx:%d",
2172 		  LOCAL_PR_ARG, VIF_PR_ARG, __entry->key_idx)
2173 );
2174 
2175 TRACE_EVENT(drv_channel_switch_beacon,
2176 	TP_PROTO(struct ieee80211_local *local,
2177 		 struct ieee80211_sub_if_data *sdata,
2178 		 struct cfg80211_chan_def *chandef),
2179 
2180 	TP_ARGS(local, sdata, chandef),
2181 
2182 	TP_STRUCT__entry(
2183 		LOCAL_ENTRY
2184 		VIF_ENTRY
2185 		CHANDEF_ENTRY
2186 	),
2187 
2188 	TP_fast_assign(
2189 		LOCAL_ASSIGN;
2190 		VIF_ASSIGN;
2191 		CHANDEF_ASSIGN(chandef);
2192 	),
2193 
2194 	TP_printk(
2195 		LOCAL_PR_FMT VIF_PR_FMT " channel switch to " CHANDEF_PR_FMT,
2196 		LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG
2197 	)
2198 );
2199 
2200 DEFINE_EVENT(chanswitch_evt, drv_pre_channel_switch,
2201 	TP_PROTO(struct ieee80211_local *local,
2202 		 struct ieee80211_sub_if_data *sdata,
2203 		 struct ieee80211_channel_switch *ch_switch),
2204 	TP_ARGS(local, sdata, ch_switch)
2205 );
2206 
2207 DEFINE_EVENT(local_sdata_evt, drv_post_channel_switch,
2208 	     TP_PROTO(struct ieee80211_local *local,
2209 		      struct ieee80211_sub_if_data *sdata),
2210 	     TP_ARGS(local, sdata)
2211 );
2212 
2213 DEFINE_EVENT(local_sdata_evt, drv_abort_channel_switch,
2214 	     TP_PROTO(struct ieee80211_local *local,
2215 		      struct ieee80211_sub_if_data *sdata),
2216 	     TP_ARGS(local, sdata)
2217 );
2218 
2219 DEFINE_EVENT(chanswitch_evt, drv_channel_switch_rx_beacon,
2220 	TP_PROTO(struct ieee80211_local *local,
2221 		 struct ieee80211_sub_if_data *sdata,
2222 		 struct ieee80211_channel_switch *ch_switch),
2223 	TP_ARGS(local, sdata, ch_switch)
2224 );
2225 
2226 TRACE_EVENT(drv_get_txpower,
2227 	TP_PROTO(struct ieee80211_local *local,
2228 		 struct ieee80211_sub_if_data *sdata,
2229 		 unsigned int link_id, int dbm, int ret),
2230 
2231 	TP_ARGS(local, sdata, link_id, dbm, ret),
2232 
2233 	TP_STRUCT__entry(
2234 		LOCAL_ENTRY
2235 		VIF_ENTRY
2236 		__field(unsigned int, link_id)
2237 		__field(int, dbm)
2238 		__field(int, ret)
2239 	),
2240 
2241 	TP_fast_assign(
2242 		LOCAL_ASSIGN;
2243 		VIF_ASSIGN;
2244 		__entry->link_id = link_id;
2245 		__entry->dbm = dbm;
2246 		__entry->ret = ret;
2247 	),
2248 
2249 	TP_printk(
2250 		LOCAL_PR_FMT VIF_PR_FMT " link_id:%d dbm:%d ret:%d",
2251 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, __entry->dbm, __entry->ret
2252 	)
2253 );
2254 
2255 TRACE_EVENT(drv_tdls_channel_switch,
2256 	TP_PROTO(struct ieee80211_local *local,
2257 		 struct ieee80211_sub_if_data *sdata,
2258 		 struct ieee80211_sta *sta, u8 oper_class,
2259 		 struct cfg80211_chan_def *chandef),
2260 
2261 	TP_ARGS(local, sdata, sta, oper_class, chandef),
2262 
2263 	TP_STRUCT__entry(
2264 		LOCAL_ENTRY
2265 		VIF_ENTRY
2266 		STA_ENTRY
2267 		__field(u8, oper_class)
2268 		CHANDEF_ENTRY
2269 	),
2270 
2271 	TP_fast_assign(
2272 		LOCAL_ASSIGN;
2273 		VIF_ASSIGN;
2274 		STA_ASSIGN;
2275 		__entry->oper_class = oper_class;
2276 		CHANDEF_ASSIGN(chandef)
2277 	),
2278 
2279 	TP_printk(
2280 		LOCAL_PR_FMT VIF_PR_FMT " tdls channel switch to"
2281 		CHANDEF_PR_FMT  " oper_class:%d " STA_PR_FMT,
2282 		LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->oper_class,
2283 		STA_PR_ARG
2284 	)
2285 );
2286 
2287 TRACE_EVENT(drv_tdls_cancel_channel_switch,
2288 	TP_PROTO(struct ieee80211_local *local,
2289 		 struct ieee80211_sub_if_data *sdata,
2290 		 struct ieee80211_sta *sta),
2291 
2292 	TP_ARGS(local, sdata, sta),
2293 
2294 	TP_STRUCT__entry(
2295 		LOCAL_ENTRY
2296 		VIF_ENTRY
2297 		STA_ENTRY
2298 	),
2299 
2300 	TP_fast_assign(
2301 		LOCAL_ASSIGN;
2302 		VIF_ASSIGN;
2303 		STA_ASSIGN;
2304 	),
2305 
2306 	TP_printk(
2307 		LOCAL_PR_FMT VIF_PR_FMT
2308 		" tdls cancel channel switch with " STA_PR_FMT,
2309 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
2310 	)
2311 );
2312 
2313 TRACE_EVENT(drv_tdls_recv_channel_switch,
2314 	TP_PROTO(struct ieee80211_local *local,
2315 		 struct ieee80211_sub_if_data *sdata,
2316 		 struct ieee80211_tdls_ch_sw_params *params),
2317 
2318 	TP_ARGS(local, sdata, params),
2319 
2320 	TP_STRUCT__entry(
2321 		LOCAL_ENTRY
2322 		VIF_ENTRY
2323 		__field(u8, action_code)
2324 		STA_ENTRY
2325 		CHANDEF_ENTRY
2326 		__field(u32, status)
2327 		__field(bool, peer_initiator)
2328 		__field(u32, timestamp)
2329 		__field(u16, switch_time)
2330 		__field(u16, switch_timeout)
2331 	),
2332 
2333 	TP_fast_assign(
2334 		LOCAL_ASSIGN;
2335 		VIF_ASSIGN;
2336 		STA_NAMED_ASSIGN(params->sta);
2337 		CHANDEF_ASSIGN(params->chandef)
2338 		__entry->peer_initiator = params->sta->tdls_initiator;
2339 		__entry->action_code = params->action_code;
2340 		__entry->status = params->status;
2341 		__entry->timestamp = params->timestamp;
2342 		__entry->switch_time = params->switch_time;
2343 		__entry->switch_timeout = params->switch_timeout;
2344 	),
2345 
2346 	TP_printk(
2347 		LOCAL_PR_FMT VIF_PR_FMT " received tdls channel switch packet"
2348 		" action:%d status:%d time:%d switch time:%d switch"
2349 		" timeout:%d initiator: %d chan:" CHANDEF_PR_FMT STA_PR_FMT,
2350 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->action_code, __entry->status,
2351 		__entry->timestamp, __entry->switch_time,
2352 		__entry->switch_timeout, __entry->peer_initiator,
2353 		CHANDEF_PR_ARG, STA_PR_ARG
2354 	)
2355 );
2356 
2357 TRACE_EVENT(drv_wake_tx_queue,
2358 	TP_PROTO(struct ieee80211_local *local,
2359 		 struct ieee80211_sub_if_data *sdata,
2360 		 struct txq_info *txq),
2361 
2362 	TP_ARGS(local, sdata, txq),
2363 
2364 	TP_STRUCT__entry(
2365 		LOCAL_ENTRY
2366 		VIF_ENTRY
2367 		STA_ENTRY
2368 		__field(u8, ac)
2369 		__field(u8, tid)
2370 	),
2371 
2372 	TP_fast_assign(
2373 		struct ieee80211_sta *sta = txq->txq.sta;
2374 
2375 		LOCAL_ASSIGN;
2376 		VIF_ASSIGN;
2377 		STA_ASSIGN;
2378 		__entry->ac = txq->txq.ac;
2379 		__entry->tid = txq->txq.tid;
2380 	),
2381 
2382 	TP_printk(
2383 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " ac:%d tid:%d",
2384 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->ac, __entry->tid
2385 	)
2386 );
2387 
2388 TRACE_EVENT(drv_get_ftm_responder_stats,
2389 	TP_PROTO(struct ieee80211_local *local,
2390 		 struct ieee80211_sub_if_data *sdata,
2391 		 struct cfg80211_ftm_responder_stats *ftm_stats),
2392 
2393 	TP_ARGS(local, sdata, ftm_stats),
2394 
2395 	TP_STRUCT__entry(
2396 		LOCAL_ENTRY
2397 		VIF_ENTRY
2398 	),
2399 
2400 	TP_fast_assign(
2401 		LOCAL_ASSIGN;
2402 		VIF_ASSIGN;
2403 	),
2404 
2405 	TP_printk(
2406 		LOCAL_PR_FMT VIF_PR_FMT,
2407 		LOCAL_PR_ARG, VIF_PR_ARG
2408 	)
2409 );
2410 
2411 DEFINE_EVENT(local_sdata_addr_evt, drv_update_vif_offload,
2412 	TP_PROTO(struct ieee80211_local *local,
2413 		 struct ieee80211_sub_if_data *sdata),
2414 	TP_ARGS(local, sdata)
2415 );
2416 
2417 DECLARE_EVENT_CLASS(sta_flag_evt,
2418 	TP_PROTO(struct ieee80211_local *local,
2419 		 struct ieee80211_sub_if_data *sdata,
2420 		 struct ieee80211_sta *sta, bool enabled),
2421 
2422 	TP_ARGS(local, sdata, sta, enabled),
2423 
2424 	TP_STRUCT__entry(
2425 		LOCAL_ENTRY
2426 		VIF_ENTRY
2427 		STA_ENTRY
2428 		__field(bool, enabled)
2429 	),
2430 
2431 	TP_fast_assign(
2432 		LOCAL_ASSIGN;
2433 		VIF_ASSIGN;
2434 		STA_ASSIGN;
2435 		__entry->enabled = enabled;
2436 	),
2437 
2438 	TP_printk(
2439 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " enabled:%d",
2440 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->enabled
2441 	)
2442 );
2443 
2444 DEFINE_EVENT(sta_flag_evt, drv_sta_set_4addr,
2445 	TP_PROTO(struct ieee80211_local *local,
2446 		 struct ieee80211_sub_if_data *sdata,
2447 		 struct ieee80211_sta *sta, bool enabled),
2448 
2449 	TP_ARGS(local, sdata, sta, enabled)
2450 );
2451 
2452 DEFINE_EVENT(sta_flag_evt, drv_sta_set_decap_offload,
2453 	TP_PROTO(struct ieee80211_local *local,
2454 		 struct ieee80211_sub_if_data *sdata,
2455 		 struct ieee80211_sta *sta, bool enabled),
2456 
2457 	TP_ARGS(local, sdata, sta, enabled)
2458 );
2459 
2460 TRACE_EVENT(drv_add_twt_setup,
2461 	TP_PROTO(struct ieee80211_local *local,
2462 		 struct ieee80211_sta *sta,
2463 		 struct ieee80211_twt_setup *twt,
2464 		 struct ieee80211_twt_params *twt_agrt),
2465 
2466 	TP_ARGS(local, sta, twt, twt_agrt),
2467 
2468 	TP_STRUCT__entry(
2469 		LOCAL_ENTRY
2470 		STA_ENTRY
2471 		__field(u8, dialog_token)
2472 		__field(u8, control)
2473 		__field(__le16, req_type)
2474 		__field(__le64, twt)
2475 		__field(u8, duration)
2476 		__field(__le16, mantissa)
2477 		__field(u8, channel)
2478 	),
2479 
2480 	TP_fast_assign(
2481 		LOCAL_ASSIGN;
2482 		STA_ASSIGN;
2483 		__entry->dialog_token = twt->dialog_token;
2484 		__entry->control = twt->control;
2485 		__entry->req_type = twt_agrt->req_type;
2486 		__entry->twt = twt_agrt->twt;
2487 		__entry->duration = twt_agrt->min_twt_dur;
2488 		__entry->mantissa = twt_agrt->mantissa;
2489 		__entry->channel = twt_agrt->channel;
2490 	),
2491 
2492 	TP_printk(
2493 		LOCAL_PR_FMT STA_PR_FMT
2494 		" token:%d control:0x%02x req_type:0x%04x"
2495 		" twt:%llu duration:%d mantissa:%d channel:%d",
2496 		LOCAL_PR_ARG, STA_PR_ARG, __entry->dialog_token,
2497 		__entry->control, le16_to_cpu(__entry->req_type),
2498 		le64_to_cpu(__entry->twt), __entry->duration,
2499 		le16_to_cpu(__entry->mantissa), __entry->channel
2500 	)
2501 );
2502 
2503 TRACE_EVENT(drv_twt_teardown_request,
2504 	TP_PROTO(struct ieee80211_local *local,
2505 		 struct ieee80211_sta *sta, u8 flowid),
2506 
2507 	TP_ARGS(local, sta, flowid),
2508 
2509 	TP_STRUCT__entry(
2510 		LOCAL_ENTRY
2511 		STA_ENTRY
2512 		__field(u8, flowid)
2513 	),
2514 
2515 	TP_fast_assign(
2516 		LOCAL_ASSIGN;
2517 		STA_ASSIGN;
2518 		__entry->flowid = flowid;
2519 	),
2520 
2521 	TP_printk(
2522 		LOCAL_PR_FMT STA_PR_FMT " flowid:%d",
2523 		LOCAL_PR_ARG, STA_PR_ARG, __entry->flowid
2524 	)
2525 );
2526 
2527 DEFINE_EVENT(sta_event, drv_net_fill_forward_path,
2528 	TP_PROTO(struct ieee80211_local *local,
2529 		 struct ieee80211_sub_if_data *sdata,
2530 		 struct ieee80211_sta *sta),
2531 	TP_ARGS(local, sdata, sta)
2532 );
2533 
2534 TRACE_EVENT(drv_net_setup_tc,
2535 	TP_PROTO(struct ieee80211_local *local,
2536 		 struct ieee80211_sub_if_data *sdata,
2537 		 u8 type),
2538 
2539 	TP_ARGS(local, sdata, type),
2540 
2541 	TP_STRUCT__entry(
2542 		LOCAL_ENTRY
2543 		VIF_ENTRY
2544 		__field(u8, type)
2545 	),
2546 
2547 	TP_fast_assign(
2548 		LOCAL_ASSIGN;
2549 		VIF_ASSIGN;
2550 		__entry->type = type;
2551 	),
2552 
2553 	TP_printk(
2554 		LOCAL_PR_FMT VIF_PR_FMT " type:%d\n",
2555 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->type
2556 	)
2557 );
2558 
2559 TRACE_EVENT(drv_can_activate_links,
2560 	TP_PROTO(struct ieee80211_local *local,
2561 		 struct ieee80211_sub_if_data *sdata,
2562 		 u16 active_links),
2563 
2564 	TP_ARGS(local, sdata, active_links),
2565 
2566 	TP_STRUCT__entry(
2567 		LOCAL_ENTRY
2568 		VIF_ENTRY
2569 		__field(u16, active_links)
2570 	),
2571 
2572 	TP_fast_assign(
2573 		LOCAL_ASSIGN;
2574 		VIF_ASSIGN;
2575 		__entry->active_links = active_links;
2576 	),
2577 
2578 	TP_printk(
2579 		LOCAL_PR_FMT VIF_PR_FMT " requested active_links:0x%04x\n",
2580 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->active_links
2581 	)
2582 );
2583 
2584 TRACE_EVENT(drv_change_vif_links,
2585 	TP_PROTO(struct ieee80211_local *local,
2586 		 struct ieee80211_sub_if_data *sdata,
2587 		 u16 old_links, u16 new_links),
2588 
2589 	TP_ARGS(local, sdata, old_links, new_links),
2590 
2591 	TP_STRUCT__entry(
2592 		LOCAL_ENTRY
2593 		VIF_ENTRY
2594 		__field(u16, old_links)
2595 		__field(u16, new_links)
2596 	),
2597 
2598 	TP_fast_assign(
2599 		LOCAL_ASSIGN;
2600 		VIF_ASSIGN;
2601 		__entry->old_links = old_links;
2602 		__entry->new_links = new_links;
2603 	),
2604 
2605 	TP_printk(
2606 		LOCAL_PR_FMT VIF_PR_FMT " old_links:0x%04x, new_links:0x%04x\n",
2607 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->old_links, __entry->new_links
2608 	)
2609 );
2610 
2611 TRACE_EVENT(drv_change_sta_links,
2612 	TP_PROTO(struct ieee80211_local *local,
2613 		 struct ieee80211_sub_if_data *sdata,
2614 		 struct ieee80211_sta *sta,
2615 		 u16 old_links, u16 new_links),
2616 
2617 	TP_ARGS(local, sdata, sta, old_links, new_links),
2618 
2619 	TP_STRUCT__entry(
2620 		LOCAL_ENTRY
2621 		VIF_ENTRY
2622 		STA_ENTRY
2623 		__field(u16, old_links)
2624 		__field(u16, new_links)
2625 	),
2626 
2627 	TP_fast_assign(
2628 		LOCAL_ASSIGN;
2629 		VIF_ASSIGN;
2630 		STA_ASSIGN;
2631 		__entry->old_links = old_links;
2632 		__entry->new_links = new_links;
2633 	),
2634 
2635 	TP_printk(
2636 		LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " old_links:0x%04x, new_links:0x%04x\n",
2637 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG,
2638 		__entry->old_links, __entry->new_links
2639 	)
2640 );
2641 
2642 /*
2643  * Tracing for API calls that drivers call.
2644  */
2645 
2646 TRACE_EVENT(api_return_bool,
2647 	TP_PROTO(struct ieee80211_local *local, bool result),
2648 
2649 	TP_ARGS(local, result),
2650 
2651 	TP_STRUCT__entry(
2652 		LOCAL_ENTRY
2653 		__field(bool, result)
2654 	),
2655 
2656 	TP_fast_assign(
2657 		LOCAL_ASSIGN;
2658 		__entry->result = result;
2659 	),
2660 
2661 	TP_printk(
2662 		LOCAL_PR_FMT " result=%d",
2663 		LOCAL_PR_ARG, __entry->result
2664 	)
2665 );
2666 
2667 TRACE_EVENT(api_return_void,
2668 	TP_PROTO(struct ieee80211_local *local),
2669 
2670 	TP_ARGS(local),
2671 
2672 	TP_STRUCT__entry(
2673 		LOCAL_ENTRY
2674 	),
2675 
2676 	TP_fast_assign(
2677 		LOCAL_ASSIGN;
2678 	),
2679 
2680 	TP_printk(
2681 		LOCAL_PR_FMT, LOCAL_PR_ARG
2682 	)
2683 );
2684 
2685 TRACE_EVENT(api_start_tx_ba_session,
2686 	TP_PROTO(struct ieee80211_sta *sta, u16 tid),
2687 
2688 	TP_ARGS(sta, tid),
2689 
2690 	TP_STRUCT__entry(
2691 		STA_ENTRY
2692 		__field(u16, tid)
2693 	),
2694 
2695 	TP_fast_assign(
2696 		STA_ASSIGN;
2697 		__entry->tid = tid;
2698 	),
2699 
2700 	TP_printk(
2701 		STA_PR_FMT " tid:%d",
2702 		STA_PR_ARG, __entry->tid
2703 	)
2704 );
2705 
2706 TRACE_EVENT(api_start_tx_ba_cb,
2707 	TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
2708 
2709 	TP_ARGS(sdata, ra, tid),
2710 
2711 	TP_STRUCT__entry(
2712 		VIF_ENTRY
2713 		__array(u8, ra, ETH_ALEN)
2714 		__field(u16, tid)
2715 	),
2716 
2717 	TP_fast_assign(
2718 		VIF_ASSIGN;
2719 		memcpy(__entry->ra, ra, ETH_ALEN);
2720 		__entry->tid = tid;
2721 	),
2722 
2723 	TP_printk(
2724 		VIF_PR_FMT " ra:%pM tid:%d",
2725 		VIF_PR_ARG, __entry->ra, __entry->tid
2726 	)
2727 );
2728 
2729 TRACE_EVENT(api_stop_tx_ba_session,
2730 	TP_PROTO(struct ieee80211_sta *sta, u16 tid),
2731 
2732 	TP_ARGS(sta, tid),
2733 
2734 	TP_STRUCT__entry(
2735 		STA_ENTRY
2736 		__field(u16, tid)
2737 	),
2738 
2739 	TP_fast_assign(
2740 		STA_ASSIGN;
2741 		__entry->tid = tid;
2742 	),
2743 
2744 	TP_printk(
2745 		STA_PR_FMT " tid:%d",
2746 		STA_PR_ARG, __entry->tid
2747 	)
2748 );
2749 
2750 TRACE_EVENT(api_stop_tx_ba_cb,
2751 	TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
2752 
2753 	TP_ARGS(sdata, ra, tid),
2754 
2755 	TP_STRUCT__entry(
2756 		VIF_ENTRY
2757 		__array(u8, ra, ETH_ALEN)
2758 		__field(u16, tid)
2759 	),
2760 
2761 	TP_fast_assign(
2762 		VIF_ASSIGN;
2763 		memcpy(__entry->ra, ra, ETH_ALEN);
2764 		__entry->tid = tid;
2765 	),
2766 
2767 	TP_printk(
2768 		VIF_PR_FMT " ra:%pM tid:%d",
2769 		VIF_PR_ARG, __entry->ra, __entry->tid
2770 	)
2771 );
2772 
2773 DEFINE_EVENT(local_only_evt, api_restart_hw,
2774 	TP_PROTO(struct ieee80211_local *local),
2775 	TP_ARGS(local)
2776 );
2777 
2778 TRACE_EVENT(api_beacon_loss,
2779 	TP_PROTO(struct ieee80211_sub_if_data *sdata),
2780 
2781 	TP_ARGS(sdata),
2782 
2783 	TP_STRUCT__entry(
2784 		VIF_ENTRY
2785 	),
2786 
2787 	TP_fast_assign(
2788 		VIF_ASSIGN;
2789 	),
2790 
2791 	TP_printk(
2792 		VIF_PR_FMT,
2793 		VIF_PR_ARG
2794 	)
2795 );
2796 
2797 TRACE_EVENT(api_connection_loss,
2798 	TP_PROTO(struct ieee80211_sub_if_data *sdata),
2799 
2800 	TP_ARGS(sdata),
2801 
2802 	TP_STRUCT__entry(
2803 		VIF_ENTRY
2804 	),
2805 
2806 	TP_fast_assign(
2807 		VIF_ASSIGN;
2808 	),
2809 
2810 	TP_printk(
2811 		VIF_PR_FMT,
2812 		VIF_PR_ARG
2813 	)
2814 );
2815 
2816 TRACE_EVENT(api_disconnect,
2817 	TP_PROTO(struct ieee80211_sub_if_data *sdata, bool reconnect),
2818 
2819 	TP_ARGS(sdata, reconnect),
2820 
2821 	TP_STRUCT__entry(
2822 		VIF_ENTRY
2823 		__field(int, reconnect)
2824 	),
2825 
2826 	TP_fast_assign(
2827 		VIF_ASSIGN;
2828 		__entry->reconnect = reconnect;
2829 	),
2830 
2831 	TP_printk(
2832 		VIF_PR_FMT " reconnect:%d",
2833 		VIF_PR_ARG, __entry->reconnect
2834 	)
2835 );
2836 
2837 TRACE_EVENT(api_cqm_rssi_notify,
2838 	TP_PROTO(struct ieee80211_sub_if_data *sdata,
2839 		 enum nl80211_cqm_rssi_threshold_event rssi_event,
2840 		 s32 rssi_level),
2841 
2842 	TP_ARGS(sdata, rssi_event, rssi_level),
2843 
2844 	TP_STRUCT__entry(
2845 		VIF_ENTRY
2846 		__field(u32, rssi_event)
2847 		__field(s32, rssi_level)
2848 	),
2849 
2850 	TP_fast_assign(
2851 		VIF_ASSIGN;
2852 		__entry->rssi_event = rssi_event;
2853 		__entry->rssi_level = rssi_level;
2854 	),
2855 
2856 	TP_printk(
2857 		VIF_PR_FMT " event:%d rssi:%d",
2858 		VIF_PR_ARG, __entry->rssi_event, __entry->rssi_level
2859 	)
2860 );
2861 
2862 DEFINE_EVENT(local_sdata_evt, api_cqm_beacon_loss_notify,
2863 	TP_PROTO(struct ieee80211_local *local,
2864 		 struct ieee80211_sub_if_data *sdata),
2865 	TP_ARGS(local, sdata)
2866 );
2867 
2868 TRACE_EVENT(api_scan_completed,
2869 	TP_PROTO(struct ieee80211_local *local, bool aborted),
2870 
2871 	TP_ARGS(local, aborted),
2872 
2873 	TP_STRUCT__entry(
2874 		LOCAL_ENTRY
2875 		__field(bool, aborted)
2876 	),
2877 
2878 	TP_fast_assign(
2879 		LOCAL_ASSIGN;
2880 		__entry->aborted = aborted;
2881 	),
2882 
2883 	TP_printk(
2884 		LOCAL_PR_FMT " aborted:%d",
2885 		LOCAL_PR_ARG, __entry->aborted
2886 	)
2887 );
2888 
2889 TRACE_EVENT(api_sched_scan_results,
2890 	TP_PROTO(struct ieee80211_local *local),
2891 
2892 	TP_ARGS(local),
2893 
2894 	TP_STRUCT__entry(
2895 		LOCAL_ENTRY
2896 	),
2897 
2898 	TP_fast_assign(
2899 		LOCAL_ASSIGN;
2900 	),
2901 
2902 	TP_printk(
2903 		LOCAL_PR_FMT, LOCAL_PR_ARG
2904 	)
2905 );
2906 
2907 TRACE_EVENT(api_sched_scan_stopped,
2908 	TP_PROTO(struct ieee80211_local *local),
2909 
2910 	TP_ARGS(local),
2911 
2912 	TP_STRUCT__entry(
2913 		LOCAL_ENTRY
2914 	),
2915 
2916 	TP_fast_assign(
2917 		LOCAL_ASSIGN;
2918 	),
2919 
2920 	TP_printk(
2921 		LOCAL_PR_FMT, LOCAL_PR_ARG
2922 	)
2923 );
2924 
2925 TRACE_EVENT(api_sta_block_awake,
2926 	TP_PROTO(struct ieee80211_local *local,
2927 		 struct ieee80211_sta *sta, bool block),
2928 
2929 	TP_ARGS(local, sta, block),
2930 
2931 	TP_STRUCT__entry(
2932 		LOCAL_ENTRY
2933 		STA_ENTRY
2934 		__field(bool, block)
2935 	),
2936 
2937 	TP_fast_assign(
2938 		LOCAL_ASSIGN;
2939 		STA_ASSIGN;
2940 		__entry->block = block;
2941 	),
2942 
2943 	TP_printk(
2944 		LOCAL_PR_FMT STA_PR_FMT " block:%d",
2945 		LOCAL_PR_ARG, STA_PR_ARG, __entry->block
2946 	)
2947 );
2948 
2949 TRACE_EVENT(api_chswitch_done,
2950 	TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success,
2951 		 unsigned int link_id),
2952 
2953 	TP_ARGS(sdata, success, link_id),
2954 
2955 	TP_STRUCT__entry(
2956 		VIF_ENTRY
2957 		__field(bool, success)
2958 		__field(unsigned int, link_id)
2959 	),
2960 
2961 	TP_fast_assign(
2962 		VIF_ASSIGN;
2963 		__entry->success = success;
2964 		__entry->link_id = link_id;
2965 	),
2966 
2967 	TP_printk(
2968 		VIF_PR_FMT " success=%d link_id=%d",
2969 		VIF_PR_ARG, __entry->success, __entry->link_id
2970 	)
2971 );
2972 
2973 DEFINE_EVENT(local_only_evt, api_ready_on_channel,
2974 	TP_PROTO(struct ieee80211_local *local),
2975 	TP_ARGS(local)
2976 );
2977 
2978 DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired,
2979 	TP_PROTO(struct ieee80211_local *local),
2980 	TP_ARGS(local)
2981 );
2982 
2983 TRACE_EVENT(api_gtk_rekey_notify,
2984 	TP_PROTO(struct ieee80211_sub_if_data *sdata,
2985 		 const u8 *bssid, const u8 *replay_ctr),
2986 
2987 	TP_ARGS(sdata, bssid, replay_ctr),
2988 
2989 	TP_STRUCT__entry(
2990 		VIF_ENTRY
2991 		__array(u8, bssid, ETH_ALEN)
2992 		__array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
2993 	),
2994 
2995 	TP_fast_assign(
2996 		VIF_ASSIGN;
2997 		memcpy(__entry->bssid, bssid, ETH_ALEN);
2998 		memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN);
2999 	),
3000 
3001 	TP_printk(VIF_PR_FMT, VIF_PR_ARG)
3002 );
3003 
3004 TRACE_EVENT(api_enable_rssi_reports,
3005 	TP_PROTO(struct ieee80211_sub_if_data *sdata,
3006 		 int rssi_min_thold, int rssi_max_thold),
3007 
3008 	TP_ARGS(sdata, rssi_min_thold, rssi_max_thold),
3009 
3010 	TP_STRUCT__entry(
3011 		VIF_ENTRY
3012 		__field(int, rssi_min_thold)
3013 		__field(int, rssi_max_thold)
3014 	),
3015 
3016 	TP_fast_assign(
3017 		VIF_ASSIGN;
3018 		__entry->rssi_min_thold = rssi_min_thold;
3019 		__entry->rssi_max_thold = rssi_max_thold;
3020 	),
3021 
3022 	TP_printk(
3023 		VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d",
3024 		VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold
3025 	)
3026 );
3027 
3028 TRACE_EVENT(api_eosp,
3029 	TP_PROTO(struct ieee80211_local *local,
3030 		 struct ieee80211_sta *sta),
3031 
3032 	TP_ARGS(local, sta),
3033 
3034 	TP_STRUCT__entry(
3035 		LOCAL_ENTRY
3036 		STA_ENTRY
3037 	),
3038 
3039 	TP_fast_assign(
3040 		LOCAL_ASSIGN;
3041 		STA_ASSIGN;
3042 	),
3043 
3044 	TP_printk(
3045 		LOCAL_PR_FMT STA_PR_FMT,
3046 		LOCAL_PR_ARG, STA_PR_ARG
3047 	)
3048 );
3049 
3050 TRACE_EVENT(api_send_eosp_nullfunc,
3051 	TP_PROTO(struct ieee80211_local *local,
3052 		 struct ieee80211_sta *sta,
3053 		 u8 tid),
3054 
3055 	TP_ARGS(local, sta, tid),
3056 
3057 	TP_STRUCT__entry(
3058 		LOCAL_ENTRY
3059 		STA_ENTRY
3060 		__field(u8, tid)
3061 	),
3062 
3063 	TP_fast_assign(
3064 		LOCAL_ASSIGN;
3065 		STA_ASSIGN;
3066 		__entry->tid = tid;
3067 	),
3068 
3069 	TP_printk(
3070 		LOCAL_PR_FMT STA_PR_FMT " tid:%d",
3071 		LOCAL_PR_ARG, STA_PR_ARG, __entry->tid
3072 	)
3073 );
3074 
3075 TRACE_EVENT(api_sta_set_buffered,
3076 	TP_PROTO(struct ieee80211_local *local,
3077 		 struct ieee80211_sta *sta,
3078 		 u8 tid, bool buffered),
3079 
3080 	TP_ARGS(local, sta, tid, buffered),
3081 
3082 	TP_STRUCT__entry(
3083 		LOCAL_ENTRY
3084 		STA_ENTRY
3085 		__field(u8, tid)
3086 		__field(bool, buffered)
3087 	),
3088 
3089 	TP_fast_assign(
3090 		LOCAL_ASSIGN;
3091 		STA_ASSIGN;
3092 		__entry->tid = tid;
3093 		__entry->buffered = buffered;
3094 	),
3095 
3096 	TP_printk(
3097 		LOCAL_PR_FMT STA_PR_FMT " tid:%d buffered:%d",
3098 		LOCAL_PR_ARG, STA_PR_ARG, __entry->tid, __entry->buffered
3099 	)
3100 );
3101 
3102 TRACE_EVENT(api_radar_detected,
3103 	TP_PROTO(struct ieee80211_local *local),
3104 
3105 	TP_ARGS(local),
3106 
3107 	TP_STRUCT__entry(
3108 		LOCAL_ENTRY
3109 	),
3110 
3111 	TP_fast_assign(
3112 		LOCAL_ASSIGN;
3113 	),
3114 
3115 	TP_printk(
3116 		LOCAL_PR_FMT " radar detected",
3117 		LOCAL_PR_ARG
3118 	)
3119 );
3120 
3121 TRACE_EVENT(api_request_smps,
3122 	TP_PROTO(struct ieee80211_local *local,
3123 		 struct ieee80211_sub_if_data *sdata,
3124 		 struct ieee80211_link_data *link,
3125 		 enum ieee80211_smps_mode smps_mode),
3126 
3127 	TP_ARGS(local, sdata, link, smps_mode),
3128 
3129 	TP_STRUCT__entry(
3130 		LOCAL_ENTRY
3131 		VIF_ENTRY
3132 		__field(int, link_id)
3133 		__field(u32, smps_mode)
3134 	),
3135 
3136 	TP_fast_assign(
3137 		LOCAL_ASSIGN;
3138 		VIF_ASSIGN;
3139 		__entry->link_id = link->link_id,
3140 		__entry->smps_mode = smps_mode;
3141 	),
3142 
3143 	TP_printk(
3144 		LOCAL_PR_FMT " " VIF_PR_FMT " link:%d, smps_mode:%d",
3145 		LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, __entry->smps_mode
3146 	)
3147 );
3148 
3149 TRACE_EVENT(api_prepare_rx_omi_bw,
3150 	TP_PROTO(struct ieee80211_local *local,
3151 		 struct ieee80211_sub_if_data *sdata,
3152 		 struct link_sta_info *link_sta,
3153 		 enum ieee80211_sta_rx_bandwidth bw),
3154 
3155 	TP_ARGS(local, sdata, link_sta, bw),
3156 
3157 	TP_STRUCT__entry(
3158 		LOCAL_ENTRY
3159 		VIF_ENTRY
3160 		STA_ENTRY
3161 		__field(int, link_id)
3162 		__field(u32, bw)
3163 		__field(bool, result)
3164 	),
3165 
3166 	TP_fast_assign(
3167 		LOCAL_ASSIGN;
3168 		VIF_ASSIGN;
3169 		STA_NAMED_ASSIGN(link_sta->sta);
3170 		__entry->link_id = link_sta->link_id;
3171 		__entry->bw = bw;
3172 	),
3173 
3174 	TP_printk(
3175 		LOCAL_PR_FMT " " VIF_PR_FMT " " STA_PR_FMT " link:%d, bw:%d",
3176 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG,
3177 		__entry->link_id, __entry->bw
3178 	)
3179 );
3180 
3181 TRACE_EVENT(api_finalize_rx_omi_bw,
3182 	TP_PROTO(struct ieee80211_local *local,
3183 		 struct ieee80211_sub_if_data *sdata,
3184 		 struct link_sta_info *link_sta),
3185 
3186 	TP_ARGS(local, sdata, link_sta),
3187 
3188 	TP_STRUCT__entry(
3189 		LOCAL_ENTRY
3190 		VIF_ENTRY
3191 		STA_ENTRY
3192 		__field(int, link_id)
3193 	),
3194 
3195 	TP_fast_assign(
3196 		LOCAL_ASSIGN;
3197 		VIF_ASSIGN;
3198 		STA_NAMED_ASSIGN(link_sta->sta);
3199 		__entry->link_id = link_sta->link_id;
3200 	),
3201 
3202 	TP_printk(
3203 		LOCAL_PR_FMT " " VIF_PR_FMT " " STA_PR_FMT " link:%d",
3204 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->link_id
3205 	)
3206 );
3207 
3208 /*
3209  * Tracing for internal functions
3210  * (which may also be called in response to driver calls)
3211  */
3212 
3213 TRACE_EVENT(wake_queue,
3214 	TP_PROTO(struct ieee80211_local *local, u16 queue,
3215 		 enum queue_stop_reason reason, int refcount),
3216 
3217 	TP_ARGS(local, queue, reason, refcount),
3218 
3219 	TP_STRUCT__entry(
3220 		LOCAL_ENTRY
3221 		__field(u16, queue)
3222 		__field(u32, reason)
3223 		__field(int, refcount)
3224 	),
3225 
3226 	TP_fast_assign(
3227 		LOCAL_ASSIGN;
3228 		__entry->queue = queue;
3229 		__entry->reason = reason;
3230 		__entry->refcount = refcount;
3231 	),
3232 
3233 	TP_printk(
3234 		LOCAL_PR_FMT " queue:%d, reason:%d, refcount: %d",
3235 		LOCAL_PR_ARG, __entry->queue, __entry->reason,
3236 		__entry->refcount
3237 	)
3238 );
3239 
3240 TRACE_EVENT(stop_queue,
3241 	TP_PROTO(struct ieee80211_local *local, u16 queue,
3242 		 enum queue_stop_reason reason, int refcount),
3243 
3244 	TP_ARGS(local, queue, reason, refcount),
3245 
3246 	TP_STRUCT__entry(
3247 		LOCAL_ENTRY
3248 		__field(u16, queue)
3249 		__field(u32, reason)
3250 		__field(int, refcount)
3251 	),
3252 
3253 	TP_fast_assign(
3254 		LOCAL_ASSIGN;
3255 		__entry->queue = queue;
3256 		__entry->reason = reason;
3257 		__entry->refcount = refcount;
3258 	),
3259 
3260 	TP_printk(
3261 		LOCAL_PR_FMT " queue:%d, reason:%d, refcount: %d",
3262 		LOCAL_PR_ARG, __entry->queue, __entry->reason,
3263 		__entry->refcount
3264 	)
3265 );
3266 
3267 TRACE_EVENT(drv_can_neg_ttlm,
3268 	    TP_PROTO(struct ieee80211_local *local,
3269 		     struct ieee80211_sub_if_data *sdata,
3270 		     struct ieee80211_neg_ttlm *neg_ttlm),
3271 
3272 	TP_ARGS(local, sdata, neg_ttlm),
3273 
3274 	TP_STRUCT__entry(LOCAL_ENTRY
3275 			 VIF_ENTRY
3276 			 __array(u16, downlink, sizeof(u16) * 8)
3277 			 __array(u16, uplink, sizeof(u16) * 8)
3278 	),
3279 
3280 	TP_fast_assign(LOCAL_ASSIGN;
3281 		       VIF_ASSIGN;
3282 		       memcpy(__entry->downlink, neg_ttlm->downlink,
3283 			      sizeof(neg_ttlm->downlink));
3284 		       memcpy(__entry->uplink, neg_ttlm->uplink,
3285 			      sizeof(neg_ttlm->uplink));
3286 	),
3287 
3288 	TP_printk(LOCAL_PR_FMT ", " VIF_PR_FMT, LOCAL_PR_ARG, VIF_PR_ARG)
3289 );
3290 
3291 TRACE_EVENT(drv_neg_ttlm_res,
3292 	    TP_PROTO(struct ieee80211_local *local,
3293 		     struct ieee80211_sub_if_data *sdata,
3294 		     enum ieee80211_neg_ttlm_res res,
3295 		     struct ieee80211_neg_ttlm *neg_ttlm),
3296 
3297 	TP_ARGS(local, sdata, res, neg_ttlm),
3298 
3299 	TP_STRUCT__entry(LOCAL_ENTRY
3300 			 VIF_ENTRY
3301 			 __field(u32, res)
3302 			 __array(u16, downlink, sizeof(u16) * 8)
3303 			 __array(u16, uplink, sizeof(u16) * 8)
3304 	),
3305 
3306 	TP_fast_assign(LOCAL_ASSIGN;
3307 		       VIF_ASSIGN;
3308 		       __entry->res = res;
3309 		       memcpy(__entry->downlink, neg_ttlm->downlink,
3310 			      sizeof(neg_ttlm->downlink));
3311 		       memcpy(__entry->uplink, neg_ttlm->uplink,
3312 			      sizeof(neg_ttlm->uplink));
3313 	),
3314 
3315 	TP_printk(LOCAL_PR_FMT  VIF_PR_FMT " response: %d\n ",
3316 		  LOCAL_PR_ARG, VIF_PR_ARG, __entry->res
3317 	)
3318 );
3319 
3320 TRACE_EVENT(drv_prep_add_interface,
3321 	    TP_PROTO(struct ieee80211_local *local,
3322 		     enum nl80211_iftype type),
3323 
3324 	TP_ARGS(local, type),
3325 	TP_STRUCT__entry(LOCAL_ENTRY
3326 			 __field(u32, type)
3327 	),
3328 
3329 	TP_fast_assign(LOCAL_ASSIGN;
3330 		       __entry->type = type;
3331 	),
3332 
3333 	TP_printk(LOCAL_PR_FMT  " type: %u\n ",
3334 		  LOCAL_PR_ARG, __entry->type
3335 	)
3336 );
3337 
3338 TRACE_EVENT(drv_set_eml_op_mode,
3339 	    TP_PROTO(struct ieee80211_local *local,
3340 		     struct ieee80211_sub_if_data *sdata,
3341 		     struct ieee80211_sta *sta,
3342 		     unsigned int link_id,
3343 		     u8 control, u16 link_bitmap),
3344 
3345 	TP_ARGS(local, sdata, sta, link_id, control, link_bitmap),
3346 
3347 	TP_STRUCT__entry(LOCAL_ENTRY
3348 			 VIF_ENTRY
3349 			 STA_ENTRY
3350 			 __field(u32, link_id)
3351 			 __field(u8, control)
3352 			 __field(u16, link_bitmap)),
3353 
3354 	TP_fast_assign(LOCAL_ASSIGN;
3355 		       VIF_ASSIGN;
3356 		       STA_NAMED_ASSIGN(sta);
3357 		       __entry->link_id = link_id;
3358 		       __entry->control = control;
3359 		       __entry->link_bitmap = link_bitmap;
3360 	),
3361 
3362 	TP_printk(
3363 		LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT
3364 		" (link:%d control:%02x link_bitmap:%04x)",
3365 		LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->link_id,
3366 		__entry->control, __entry->link_bitmap
3367 	)
3368 );
3369 
3370 #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
3371 
3372 #undef TRACE_INCLUDE_PATH
3373 #define TRACE_INCLUDE_PATH .
3374 #undef TRACE_INCLUDE_FILE
3375 #define TRACE_INCLUDE_FILE trace
3376 #include <trace/define_trace.h>
3377