File Index
Files and directories
Sign in
FILE

trace.h

File preview with syntax highlighting.

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