root/net/mac80211/trace.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */