linux/net/mac80211/trace.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3* Portions of this file
   4* Copyright(c) 2016 Intel Deutschland GmbH
   5* Copyright (C) 2018 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(u8, 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
 115DECLARE_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
 127DECLARE_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
 150DECLARE_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
 170DECLARE_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
 191DEFINE_EVENT(local_only_evt, drv_return_void,
 192        TP_PROTO(struct ieee80211_local *local),
 193        TP_ARGS(local)
 194);
 195
 196TRACE_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
 210TRACE_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
 225TRACE_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
 239TRACE_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
 253DEFINE_EVENT(local_only_evt, drv_start,
 254        TP_PROTO(struct ieee80211_local *local),
 255        TP_ARGS(local)
 256);
 257
 258DEFINE_EVENT(local_u32_evt, drv_get_et_strings,
 259             TP_PROTO(struct ieee80211_local *local, u32 sset),
 260             TP_ARGS(local, sset)
 261);
 262
 263DEFINE_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
 268DEFINE_EVENT(local_only_evt, drv_get_et_stats,
 269             TP_PROTO(struct ieee80211_local *local),
 270             TP_ARGS(local)
 271);
 272
 273DEFINE_EVENT(local_only_evt, drv_suspend,
 274        TP_PROTO(struct ieee80211_local *local),
 275        TP_ARGS(local)
 276);
 277
 278DEFINE_EVENT(local_only_evt, drv_resume,
 279        TP_PROTO(struct ieee80211_local *local),
 280        TP_ARGS(local)
 281);
 282
 283TRACE_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
 297DEFINE_EVENT(local_only_evt, drv_stop,
 298        TP_PROTO(struct ieee80211_local *local),
 299        TP_ARGS(local)
 300);
 301
 302DEFINE_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
 308TRACE_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
 336DEFINE_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
 342TRACE_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
 382TRACE_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
 475TRACE_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
 496TRACE_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
 524TRACE_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
 554TRACE_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
 578TRACE_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
 606TRACE_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
 634DEFINE_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
 640DEFINE_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
 646DEFINE_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
 652DEFINE_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
 658TRACE_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
 681DEFINE_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
 687TRACE_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
 718TRACE_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
 740DEFINE_EVENT(local_u32_evt, drv_set_frag_threshold,
 741        TP_PROTO(struct ieee80211_local *local, u32 value),
 742        TP_ARGS(local, value)
 743);
 744
 745DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold,
 746        TP_PROTO(struct ieee80211_local *local, u32 value),
 747        TP_ARGS(local, value)
 748);
 749
 750TRACE_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
 771TRACE_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
 799TRACE_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
 831TRACE_EVENT(drv_sta_rc_update,
 832        TP_PROTO(struct ieee80211_local *local,
 833                 struct ieee80211_sub_if_data *sdata,
 834                 struct ieee80211_sta *sta,
 835                 u32 changed),
 836
 837        TP_ARGS(local, sdata, sta, changed),
 838
 839        TP_STRUCT__entry(
 840                LOCAL_ENTRY
 841                VIF_ENTRY
 842                STA_ENTRY
 843                __field(u32, changed)
 844        ),
 845
 846        TP_fast_assign(
 847                LOCAL_ASSIGN;
 848                VIF_ASSIGN;
 849                STA_ASSIGN;
 850                __entry->changed = changed;
 851        ),
 852
 853        TP_printk(
 854                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " changed: 0x%x",
 855                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->changed
 856        )
 857);
 858
 859DECLARE_EVENT_CLASS(sta_event,
 860        TP_PROTO(struct ieee80211_local *local,
 861                 struct ieee80211_sub_if_data *sdata,
 862                 struct ieee80211_sta *sta),
 863
 864        TP_ARGS(local, sdata, sta),
 865
 866        TP_STRUCT__entry(
 867                LOCAL_ENTRY
 868                VIF_ENTRY
 869                STA_ENTRY
 870        ),
 871
 872        TP_fast_assign(
 873                LOCAL_ASSIGN;
 874                VIF_ASSIGN;
 875                STA_ASSIGN;
 876        ),
 877
 878        TP_printk(
 879                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
 880                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
 881        )
 882);
 883
 884DEFINE_EVENT(sta_event, drv_sta_statistics,
 885        TP_PROTO(struct ieee80211_local *local,
 886                 struct ieee80211_sub_if_data *sdata,
 887                 struct ieee80211_sta *sta),
 888        TP_ARGS(local, sdata, sta)
 889);
 890
 891DEFINE_EVENT(sta_event, drv_sta_add,
 892        TP_PROTO(struct ieee80211_local *local,
 893                 struct ieee80211_sub_if_data *sdata,
 894                 struct ieee80211_sta *sta),
 895        TP_ARGS(local, sdata, sta)
 896);
 897
 898DEFINE_EVENT(sta_event, drv_sta_remove,
 899        TP_PROTO(struct ieee80211_local *local,
 900                 struct ieee80211_sub_if_data *sdata,
 901                 struct ieee80211_sta *sta),
 902        TP_ARGS(local, sdata, sta)
 903);
 904
 905DEFINE_EVENT(sta_event, drv_sta_pre_rcu_remove,
 906        TP_PROTO(struct ieee80211_local *local,
 907                 struct ieee80211_sub_if_data *sdata,
 908                 struct ieee80211_sta *sta),
 909        TP_ARGS(local, sdata, sta)
 910);
 911
 912DEFINE_EVENT(sta_event, drv_sync_rx_queues,
 913        TP_PROTO(struct ieee80211_local *local,
 914                 struct ieee80211_sub_if_data *sdata,
 915                 struct ieee80211_sta *sta),
 916        TP_ARGS(local, sdata, sta)
 917);
 918
 919DEFINE_EVENT(sta_event, drv_sta_rate_tbl_update,
 920        TP_PROTO(struct ieee80211_local *local,
 921                 struct ieee80211_sub_if_data *sdata,
 922                 struct ieee80211_sta *sta),
 923        TP_ARGS(local, sdata, sta)
 924);
 925
 926TRACE_EVENT(drv_conf_tx,
 927        TP_PROTO(struct ieee80211_local *local,
 928                 struct ieee80211_sub_if_data *sdata,
 929                 u16 ac, const struct ieee80211_tx_queue_params *params),
 930
 931        TP_ARGS(local, sdata, ac, params),
 932
 933        TP_STRUCT__entry(
 934                LOCAL_ENTRY
 935                VIF_ENTRY
 936                __field(u16, ac)
 937                __field(u16, txop)
 938                __field(u16, cw_min)
 939                __field(u16, cw_max)
 940                __field(u8, aifs)
 941                __field(bool, uapsd)
 942        ),
 943
 944        TP_fast_assign(
 945                LOCAL_ASSIGN;
 946                VIF_ASSIGN;
 947                __entry->ac = ac;
 948                __entry->txop = params->txop;
 949                __entry->cw_max = params->cw_max;
 950                __entry->cw_min = params->cw_min;
 951                __entry->aifs = params->aifs;
 952                __entry->uapsd = params->uapsd;
 953        ),
 954
 955        TP_printk(
 956                LOCAL_PR_FMT  VIF_PR_FMT  " AC:%d",
 957                LOCAL_PR_ARG, VIF_PR_ARG, __entry->ac
 958        )
 959);
 960
 961DEFINE_EVENT(local_sdata_evt, drv_get_tsf,
 962        TP_PROTO(struct ieee80211_local *local,
 963                 struct ieee80211_sub_if_data *sdata),
 964        TP_ARGS(local, sdata)
 965);
 966
 967TRACE_EVENT(drv_set_tsf,
 968        TP_PROTO(struct ieee80211_local *local,
 969                 struct ieee80211_sub_if_data *sdata,
 970                 u64 tsf),
 971
 972        TP_ARGS(local, sdata, tsf),
 973
 974        TP_STRUCT__entry(
 975                LOCAL_ENTRY
 976                VIF_ENTRY
 977                __field(u64, tsf)
 978        ),
 979
 980        TP_fast_assign(
 981                LOCAL_ASSIGN;
 982                VIF_ASSIGN;
 983                __entry->tsf = tsf;
 984        ),
 985
 986        TP_printk(
 987                LOCAL_PR_FMT  VIF_PR_FMT  " tsf:%llu",
 988                LOCAL_PR_ARG, VIF_PR_ARG, (unsigned long long)__entry->tsf
 989        )
 990);
 991
 992TRACE_EVENT(drv_offset_tsf,
 993        TP_PROTO(struct ieee80211_local *local,
 994                 struct ieee80211_sub_if_data *sdata,
 995                 s64 offset),
 996
 997        TP_ARGS(local, sdata, offset),
 998
 999        TP_STRUCT__entry(
1000                LOCAL_ENTRY
1001                VIF_ENTRY
1002                __field(s64, tsf_offset)
1003        ),
1004
1005        TP_fast_assign(
1006                LOCAL_ASSIGN;
1007                VIF_ASSIGN;
1008                __entry->tsf_offset = offset;
1009        ),
1010
1011        TP_printk(
1012                LOCAL_PR_FMT  VIF_PR_FMT  " tsf offset:%lld",
1013                LOCAL_PR_ARG, VIF_PR_ARG,
1014                (unsigned long long)__entry->tsf_offset
1015        )
1016);
1017
1018DEFINE_EVENT(local_sdata_evt, drv_reset_tsf,
1019        TP_PROTO(struct ieee80211_local *local,
1020                 struct ieee80211_sub_if_data *sdata),
1021        TP_ARGS(local, sdata)
1022);
1023
1024DEFINE_EVENT(local_only_evt, drv_tx_last_beacon,
1025        TP_PROTO(struct ieee80211_local *local),
1026        TP_ARGS(local)
1027);
1028
1029TRACE_EVENT(drv_ampdu_action,
1030        TP_PROTO(struct ieee80211_local *local,
1031                 struct ieee80211_sub_if_data *sdata,
1032                 struct ieee80211_ampdu_params *params),
1033
1034        TP_ARGS(local, sdata, params),
1035
1036        TP_STRUCT__entry(
1037                LOCAL_ENTRY
1038                VIF_ENTRY
1039                AMPDU_ACTION_ENTRY
1040        ),
1041
1042        TP_fast_assign(
1043                LOCAL_ASSIGN;
1044                VIF_ASSIGN;
1045                AMPDU_ACTION_ASSIGN;
1046        ),
1047
1048        TP_printk(
1049                LOCAL_PR_FMT VIF_PR_FMT AMPDU_ACTION_PR_FMT,
1050                LOCAL_PR_ARG, VIF_PR_ARG, AMPDU_ACTION_PR_ARG
1051        )
1052);
1053
1054TRACE_EVENT(drv_get_survey,
1055        TP_PROTO(struct ieee80211_local *local, int idx,
1056                 struct survey_info *survey),
1057
1058        TP_ARGS(local, idx, survey),
1059
1060        TP_STRUCT__entry(
1061                LOCAL_ENTRY
1062                __field(int, idx)
1063        ),
1064
1065        TP_fast_assign(
1066                LOCAL_ASSIGN;
1067                __entry->idx = idx;
1068        ),
1069
1070        TP_printk(
1071                LOCAL_PR_FMT " idx:%d",
1072                LOCAL_PR_ARG, __entry->idx
1073        )
1074);
1075
1076TRACE_EVENT(drv_flush,
1077        TP_PROTO(struct ieee80211_local *local,
1078                 u32 queues, bool drop),
1079
1080        TP_ARGS(local, queues, drop),
1081
1082        TP_STRUCT__entry(
1083                LOCAL_ENTRY
1084                __field(bool, drop)
1085                __field(u32, queues)
1086        ),
1087
1088        TP_fast_assign(
1089                LOCAL_ASSIGN;
1090                __entry->drop = drop;
1091                __entry->queues = queues;
1092        ),
1093
1094        TP_printk(
1095                LOCAL_PR_FMT " queues:0x%x drop:%d",
1096                LOCAL_PR_ARG, __entry->queues, __entry->drop
1097        )
1098);
1099
1100TRACE_EVENT(drv_channel_switch,
1101        TP_PROTO(struct ieee80211_local *local,
1102                 struct ieee80211_sub_if_data *sdata,
1103                 struct ieee80211_channel_switch *ch_switch),
1104
1105        TP_ARGS(local, sdata, ch_switch),
1106
1107        TP_STRUCT__entry(
1108                LOCAL_ENTRY
1109                VIF_ENTRY
1110                CHANDEF_ENTRY
1111                __field(u64, timestamp)
1112                __field(u32, device_timestamp)
1113                __field(bool, block_tx)
1114                __field(u8, count)
1115        ),
1116
1117        TP_fast_assign(
1118                LOCAL_ASSIGN;
1119                VIF_ASSIGN;
1120                CHANDEF_ASSIGN(&ch_switch->chandef)
1121                __entry->timestamp = ch_switch->timestamp;
1122                __entry->device_timestamp = ch_switch->device_timestamp;
1123                __entry->block_tx = ch_switch->block_tx;
1124                __entry->count = ch_switch->count;
1125        ),
1126
1127        TP_printk(
1128                LOCAL_PR_FMT VIF_PR_FMT " new " CHANDEF_PR_FMT " count:%d",
1129                LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count
1130        )
1131);
1132
1133TRACE_EVENT(drv_set_antenna,
1134        TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
1135
1136        TP_ARGS(local, tx_ant, rx_ant, ret),
1137
1138        TP_STRUCT__entry(
1139                LOCAL_ENTRY
1140                __field(u32, tx_ant)
1141                __field(u32, rx_ant)
1142                __field(int, ret)
1143        ),
1144
1145        TP_fast_assign(
1146                LOCAL_ASSIGN;
1147                __entry->tx_ant = tx_ant;
1148                __entry->rx_ant = rx_ant;
1149                __entry->ret = ret;
1150        ),
1151
1152        TP_printk(
1153                LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
1154                LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
1155        )
1156);
1157
1158TRACE_EVENT(drv_get_antenna,
1159        TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
1160
1161        TP_ARGS(local, tx_ant, rx_ant, ret),
1162
1163        TP_STRUCT__entry(
1164                LOCAL_ENTRY
1165                __field(u32, tx_ant)
1166                __field(u32, rx_ant)
1167                __field(int, ret)
1168        ),
1169
1170        TP_fast_assign(
1171                LOCAL_ASSIGN;
1172                __entry->tx_ant = tx_ant;
1173                __entry->rx_ant = rx_ant;
1174                __entry->ret = ret;
1175        ),
1176
1177        TP_printk(
1178                LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
1179                LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
1180        )
1181);
1182
1183TRACE_EVENT(drv_remain_on_channel,
1184        TP_PROTO(struct ieee80211_local *local,
1185                 struct ieee80211_sub_if_data *sdata,
1186                 struct ieee80211_channel *chan,
1187                 unsigned int duration,
1188                 enum ieee80211_roc_type type),
1189
1190        TP_ARGS(local, sdata, chan, duration, type),
1191
1192        TP_STRUCT__entry(
1193                LOCAL_ENTRY
1194                VIF_ENTRY
1195                __field(int, center_freq)
1196                __field(unsigned int, duration)
1197                __field(u32, type)
1198        ),
1199
1200        TP_fast_assign(
1201                LOCAL_ASSIGN;
1202                VIF_ASSIGN;
1203                __entry->center_freq = chan->center_freq;
1204                __entry->duration = duration;
1205                __entry->type = type;
1206        ),
1207
1208        TP_printk(
1209                LOCAL_PR_FMT  VIF_PR_FMT " freq:%dMHz duration:%dms type=%d",
1210                LOCAL_PR_ARG, VIF_PR_ARG,
1211                __entry->center_freq, __entry->duration, __entry->type
1212        )
1213);
1214
1215DEFINE_EVENT(local_only_evt, drv_cancel_remain_on_channel,
1216        TP_PROTO(struct ieee80211_local *local),
1217        TP_ARGS(local)
1218);
1219
1220TRACE_EVENT(drv_set_ringparam,
1221        TP_PROTO(struct ieee80211_local *local, u32 tx, u32 rx),
1222
1223        TP_ARGS(local, tx, rx),
1224
1225        TP_STRUCT__entry(
1226                LOCAL_ENTRY
1227                __field(u32, tx)
1228                __field(u32, rx)
1229        ),
1230
1231        TP_fast_assign(
1232                LOCAL_ASSIGN;
1233                __entry->tx = tx;
1234                __entry->rx = rx;
1235        ),
1236
1237        TP_printk(
1238                LOCAL_PR_FMT " tx:%d rx %d",
1239                LOCAL_PR_ARG, __entry->tx, __entry->rx
1240        )
1241);
1242
1243TRACE_EVENT(drv_get_ringparam,
1244        TP_PROTO(struct ieee80211_local *local, u32 *tx, u32 *tx_max,
1245                 u32 *rx, u32 *rx_max),
1246
1247        TP_ARGS(local, tx, tx_max, rx, rx_max),
1248
1249        TP_STRUCT__entry(
1250                LOCAL_ENTRY
1251                __field(u32, tx)
1252                __field(u32, tx_max)
1253                __field(u32, rx)
1254                __field(u32, rx_max)
1255        ),
1256
1257        TP_fast_assign(
1258                LOCAL_ASSIGN;
1259                __entry->tx = *tx;
1260                __entry->tx_max = *tx_max;
1261                __entry->rx = *rx;
1262                __entry->rx_max = *rx_max;
1263        ),
1264
1265        TP_printk(
1266                LOCAL_PR_FMT " tx:%d tx_max %d rx %d rx_max %d",
1267                LOCAL_PR_ARG,
1268                __entry->tx, __entry->tx_max, __entry->rx, __entry->rx_max
1269        )
1270);
1271
1272DEFINE_EVENT(local_only_evt, drv_tx_frames_pending,
1273        TP_PROTO(struct ieee80211_local *local),
1274        TP_ARGS(local)
1275);
1276
1277DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait,
1278        TP_PROTO(struct ieee80211_local *local),
1279        TP_ARGS(local)
1280);
1281
1282TRACE_EVENT(drv_set_bitrate_mask,
1283        TP_PROTO(struct ieee80211_local *local,
1284                 struct ieee80211_sub_if_data *sdata,
1285                 const struct cfg80211_bitrate_mask *mask),
1286
1287        TP_ARGS(local, sdata, mask),
1288
1289        TP_STRUCT__entry(
1290                LOCAL_ENTRY
1291                VIF_ENTRY
1292                __field(u32, legacy_2g)
1293                __field(u32, legacy_5g)
1294        ),
1295
1296        TP_fast_assign(
1297                LOCAL_ASSIGN;
1298                VIF_ASSIGN;
1299                __entry->legacy_2g = mask->control[NL80211_BAND_2GHZ].legacy;
1300                __entry->legacy_5g = mask->control[NL80211_BAND_5GHZ].legacy;
1301        ),
1302
1303        TP_printk(
1304                LOCAL_PR_FMT  VIF_PR_FMT " 2G Mask:0x%x 5G Mask:0x%x",
1305                LOCAL_PR_ARG, VIF_PR_ARG, __entry->legacy_2g, __entry->legacy_5g
1306        )
1307);
1308
1309TRACE_EVENT(drv_set_rekey_data,
1310        TP_PROTO(struct ieee80211_local *local,
1311                 struct ieee80211_sub_if_data *sdata,
1312                 struct cfg80211_gtk_rekey_data *data),
1313
1314        TP_ARGS(local, sdata, data),
1315
1316        TP_STRUCT__entry(
1317                LOCAL_ENTRY
1318                VIF_ENTRY
1319                __array(u8, kek, NL80211_KEK_LEN)
1320                __array(u8, kck, NL80211_KCK_LEN)
1321                __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
1322        ),
1323
1324        TP_fast_assign(
1325                LOCAL_ASSIGN;
1326                VIF_ASSIGN;
1327                memcpy(__entry->kek, data->kek, NL80211_KEK_LEN);
1328                memcpy(__entry->kck, data->kck, NL80211_KCK_LEN);
1329                memcpy(__entry->replay_ctr, data->replay_ctr,
1330                       NL80211_REPLAY_CTR_LEN);
1331        ),
1332
1333        TP_printk(LOCAL_PR_FMT VIF_PR_FMT,
1334                  LOCAL_PR_ARG, VIF_PR_ARG)
1335);
1336
1337TRACE_EVENT(drv_event_callback,
1338        TP_PROTO(struct ieee80211_local *local,
1339                 struct ieee80211_sub_if_data *sdata,
1340                 const struct ieee80211_event *_event),
1341
1342        TP_ARGS(local, sdata, _event),
1343
1344        TP_STRUCT__entry(
1345                LOCAL_ENTRY
1346                VIF_ENTRY
1347                __field(u32, type)
1348        ),
1349
1350        TP_fast_assign(
1351                LOCAL_ASSIGN;
1352                VIF_ASSIGN;
1353                __entry->type = _event->type;
1354        ),
1355
1356        TP_printk(
1357                LOCAL_PR_FMT VIF_PR_FMT " event:%d",
1358                LOCAL_PR_ARG, VIF_PR_ARG, __entry->type
1359        )
1360);
1361
1362DECLARE_EVENT_CLASS(release_evt,
1363        TP_PROTO(struct ieee80211_local *local,
1364                 struct ieee80211_sta *sta,
1365                 u16 tids, int num_frames,
1366                 enum ieee80211_frame_release_type reason,
1367                 bool more_data),
1368
1369        TP_ARGS(local, sta, tids, num_frames, reason, more_data),
1370
1371        TP_STRUCT__entry(
1372                LOCAL_ENTRY
1373                STA_ENTRY
1374                __field(u16, tids)
1375                __field(int, num_frames)
1376                __field(int, reason)
1377                __field(bool, more_data)
1378        ),
1379
1380        TP_fast_assign(
1381                LOCAL_ASSIGN;
1382                STA_ASSIGN;
1383                __entry->tids = tids;
1384                __entry->num_frames = num_frames;
1385                __entry->reason = reason;
1386                __entry->more_data = more_data;
1387        ),
1388
1389        TP_printk(
1390                LOCAL_PR_FMT STA_PR_FMT
1391                " TIDs:0x%.4x frames:%d reason:%d more:%d",
1392                LOCAL_PR_ARG, STA_PR_ARG, __entry->tids, __entry->num_frames,
1393                __entry->reason, __entry->more_data
1394        )
1395);
1396
1397DEFINE_EVENT(release_evt, drv_release_buffered_frames,
1398        TP_PROTO(struct ieee80211_local *local,
1399                 struct ieee80211_sta *sta,
1400                 u16 tids, int num_frames,
1401                 enum ieee80211_frame_release_type reason,
1402                 bool more_data),
1403
1404        TP_ARGS(local, sta, tids, num_frames, reason, more_data)
1405);
1406
1407DEFINE_EVENT(release_evt, drv_allow_buffered_frames,
1408        TP_PROTO(struct ieee80211_local *local,
1409                 struct ieee80211_sta *sta,
1410                 u16 tids, int num_frames,
1411                 enum ieee80211_frame_release_type reason,
1412                 bool more_data),
1413
1414        TP_ARGS(local, sta, tids, num_frames, reason, more_data)
1415);
1416
1417TRACE_EVENT(drv_mgd_prepare_tx,
1418        TP_PROTO(struct ieee80211_local *local,
1419                 struct ieee80211_sub_if_data *sdata,
1420                 u16 duration),
1421
1422        TP_ARGS(local, sdata, duration),
1423
1424        TP_STRUCT__entry(
1425                LOCAL_ENTRY
1426                VIF_ENTRY
1427                __field(u32, duration)
1428        ),
1429
1430        TP_fast_assign(
1431                LOCAL_ASSIGN;
1432                VIF_ASSIGN;
1433                __entry->duration = duration;
1434        ),
1435
1436        TP_printk(
1437                LOCAL_PR_FMT VIF_PR_FMT " duration: %u",
1438                LOCAL_PR_ARG, VIF_PR_ARG, __entry->duration
1439        )
1440);
1441
1442DEFINE_EVENT(local_sdata_evt, drv_mgd_protect_tdls_discover,
1443        TP_PROTO(struct ieee80211_local *local,
1444                 struct ieee80211_sub_if_data *sdata),
1445
1446        TP_ARGS(local, sdata)
1447);
1448
1449DECLARE_EVENT_CLASS(local_chanctx,
1450        TP_PROTO(struct ieee80211_local *local,
1451                 struct ieee80211_chanctx *ctx),
1452
1453        TP_ARGS(local, ctx),
1454
1455        TP_STRUCT__entry(
1456                LOCAL_ENTRY
1457                CHANCTX_ENTRY
1458        ),
1459
1460        TP_fast_assign(
1461                LOCAL_ASSIGN;
1462                CHANCTX_ASSIGN;
1463        ),
1464
1465        TP_printk(
1466                LOCAL_PR_FMT CHANCTX_PR_FMT,
1467                LOCAL_PR_ARG, CHANCTX_PR_ARG
1468        )
1469);
1470
1471DEFINE_EVENT(local_chanctx, drv_add_chanctx,
1472        TP_PROTO(struct ieee80211_local *local,
1473                 struct ieee80211_chanctx *ctx),
1474        TP_ARGS(local, ctx)
1475);
1476
1477DEFINE_EVENT(local_chanctx, drv_remove_chanctx,
1478        TP_PROTO(struct ieee80211_local *local,
1479                 struct ieee80211_chanctx *ctx),
1480        TP_ARGS(local, ctx)
1481);
1482
1483TRACE_EVENT(drv_change_chanctx,
1484        TP_PROTO(struct ieee80211_local *local,
1485                 struct ieee80211_chanctx *ctx,
1486                 u32 changed),
1487
1488        TP_ARGS(local, ctx, changed),
1489
1490        TP_STRUCT__entry(
1491                LOCAL_ENTRY
1492                CHANCTX_ENTRY
1493                __field(u32, changed)
1494        ),
1495
1496        TP_fast_assign(
1497                LOCAL_ASSIGN;
1498                CHANCTX_ASSIGN;
1499                __entry->changed = changed;
1500        ),
1501
1502        TP_printk(
1503                LOCAL_PR_FMT CHANCTX_PR_FMT " changed:%#x",
1504                LOCAL_PR_ARG, CHANCTX_PR_ARG, __entry->changed
1505        )
1506);
1507
1508#if !defined(__TRACE_VIF_ENTRY)
1509#define __TRACE_VIF_ENTRY
1510struct trace_vif_entry {
1511        enum nl80211_iftype vif_type;
1512        bool p2p;
1513        char vif_name[IFNAMSIZ];
1514} __packed;
1515
1516struct trace_chandef_entry {
1517        u32 control_freq;
1518        u32 chan_width;
1519        u32 center_freq1;
1520        u32 center_freq2;
1521} __packed;
1522
1523struct trace_switch_entry {
1524        struct trace_vif_entry vif;
1525        struct trace_chandef_entry old_chandef;
1526        struct trace_chandef_entry new_chandef;
1527} __packed;
1528
1529#define SWITCH_ENTRY_ASSIGN(to, from) local_vifs[i].to = vifs[i].from
1530#endif
1531
1532TRACE_EVENT(drv_switch_vif_chanctx,
1533        TP_PROTO(struct ieee80211_local *local,
1534                 struct ieee80211_vif_chanctx_switch *vifs,
1535                 int n_vifs, enum ieee80211_chanctx_switch_mode mode),
1536            TP_ARGS(local, vifs, n_vifs, mode),
1537
1538        TP_STRUCT__entry(
1539                LOCAL_ENTRY
1540                __field(int, n_vifs)
1541                __field(u32, mode)
1542                __dynamic_array(u8, vifs,
1543                                sizeof(struct trace_switch_entry) * n_vifs)
1544        ),
1545
1546        TP_fast_assign(
1547                LOCAL_ASSIGN;
1548                __entry->n_vifs = n_vifs;
1549                __entry->mode = mode;
1550                {
1551                        struct trace_switch_entry *local_vifs =
1552                                __get_dynamic_array(vifs);
1553                        int i;
1554
1555                        for (i = 0; i < n_vifs; i++) {
1556                                struct ieee80211_sub_if_data *sdata;
1557
1558                                sdata = container_of(vifs[i].vif,
1559                                                struct ieee80211_sub_if_data,
1560                                                vif);
1561
1562                                SWITCH_ENTRY_ASSIGN(vif.vif_type, vif->type);
1563                                SWITCH_ENTRY_ASSIGN(vif.p2p, vif->p2p);
1564                                strncpy(local_vifs[i].vif.vif_name,
1565                                        sdata->name,
1566                                        sizeof(local_vifs[i].vif.vif_name));
1567                                SWITCH_ENTRY_ASSIGN(old_chandef.control_freq,
1568                                                old_ctx->def.chan->center_freq);
1569                                SWITCH_ENTRY_ASSIGN(old_chandef.chan_width,
1570                                                    old_ctx->def.width);
1571                                SWITCH_ENTRY_ASSIGN(old_chandef.center_freq1,
1572                                                    old_ctx->def.center_freq1);
1573                                SWITCH_ENTRY_ASSIGN(old_chandef.center_freq2,
1574                                                    old_ctx->def.center_freq2);
1575                                SWITCH_ENTRY_ASSIGN(new_chandef.control_freq,
1576                                                new_ctx->def.chan->center_freq);
1577                                SWITCH_ENTRY_ASSIGN(new_chandef.chan_width,
1578                                                    new_ctx->def.width);
1579                                SWITCH_ENTRY_ASSIGN(new_chandef.center_freq1,
1580                                                    new_ctx->def.center_freq1);
1581                                SWITCH_ENTRY_ASSIGN(new_chandef.center_freq2,
1582                                                    new_ctx->def.center_freq2);
1583                        }
1584                }
1585        ),
1586
1587        TP_printk(
1588                LOCAL_PR_FMT " n_vifs:%d mode:%d",
1589                LOCAL_PR_ARG, __entry->n_vifs, __entry->mode
1590        )
1591);
1592
1593DECLARE_EVENT_CLASS(local_sdata_chanctx,
1594        TP_PROTO(struct ieee80211_local *local,
1595                 struct ieee80211_sub_if_data *sdata,
1596                 struct ieee80211_chanctx *ctx),
1597
1598        TP_ARGS(local, sdata, ctx),
1599
1600        TP_STRUCT__entry(
1601                LOCAL_ENTRY
1602                VIF_ENTRY
1603                CHANCTX_ENTRY
1604        ),
1605
1606        TP_fast_assign(
1607                LOCAL_ASSIGN;
1608                VIF_ASSIGN;
1609                CHANCTX_ASSIGN;
1610        ),
1611
1612        TP_printk(
1613                LOCAL_PR_FMT VIF_PR_FMT CHANCTX_PR_FMT,
1614                LOCAL_PR_ARG, VIF_PR_ARG, CHANCTX_PR_ARG
1615        )
1616);
1617
1618DEFINE_EVENT(local_sdata_chanctx, drv_assign_vif_chanctx,
1619        TP_PROTO(struct ieee80211_local *local,
1620                 struct ieee80211_sub_if_data *sdata,
1621                 struct ieee80211_chanctx *ctx),
1622        TP_ARGS(local, sdata, ctx)
1623);
1624
1625DEFINE_EVENT(local_sdata_chanctx, drv_unassign_vif_chanctx,
1626        TP_PROTO(struct ieee80211_local *local,
1627                 struct ieee80211_sub_if_data *sdata,
1628                 struct ieee80211_chanctx *ctx),
1629        TP_ARGS(local, sdata, ctx)
1630);
1631
1632TRACE_EVENT(drv_start_ap,
1633        TP_PROTO(struct ieee80211_local *local,
1634                 struct ieee80211_sub_if_data *sdata,
1635                 struct ieee80211_bss_conf *info),
1636
1637        TP_ARGS(local, sdata, info),
1638
1639        TP_STRUCT__entry(
1640                LOCAL_ENTRY
1641                VIF_ENTRY
1642                __field(u8, dtimper)
1643                __field(u16, bcnint)
1644                __dynamic_array(u8, ssid, info->ssid_len);
1645                __field(bool, hidden_ssid);
1646        ),
1647
1648        TP_fast_assign(
1649                LOCAL_ASSIGN;
1650                VIF_ASSIGN;
1651                __entry->dtimper = info->dtim_period;
1652                __entry->bcnint = info->beacon_int;
1653                memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len);
1654                __entry->hidden_ssid = info->hidden_ssid;
1655        ),
1656
1657        TP_printk(
1658                LOCAL_PR_FMT  VIF_PR_FMT,
1659                LOCAL_PR_ARG, VIF_PR_ARG
1660        )
1661);
1662
1663DEFINE_EVENT(local_sdata_evt, drv_stop_ap,
1664        TP_PROTO(struct ieee80211_local *local,
1665                 struct ieee80211_sub_if_data *sdata),
1666        TP_ARGS(local, sdata)
1667);
1668
1669TRACE_EVENT(drv_reconfig_complete,
1670        TP_PROTO(struct ieee80211_local *local,
1671                 enum ieee80211_reconfig_type reconfig_type),
1672        TP_ARGS(local, reconfig_type),
1673
1674        TP_STRUCT__entry(
1675                LOCAL_ENTRY
1676                __field(u8, reconfig_type)
1677        ),
1678
1679        TP_fast_assign(
1680                LOCAL_ASSIGN;
1681                __entry->reconfig_type = reconfig_type;
1682        ),
1683
1684        TP_printk(
1685                LOCAL_PR_FMT  " reconfig_type:%d",
1686                LOCAL_PR_ARG, __entry->reconfig_type
1687        )
1688
1689);
1690
1691#if IS_ENABLED(CONFIG_IPV6)
1692DEFINE_EVENT(local_sdata_evt, drv_ipv6_addr_change,
1693        TP_PROTO(struct ieee80211_local *local,
1694                 struct ieee80211_sub_if_data *sdata),
1695        TP_ARGS(local, sdata)
1696);
1697#endif
1698
1699TRACE_EVENT(drv_join_ibss,
1700        TP_PROTO(struct ieee80211_local *local,
1701                 struct ieee80211_sub_if_data *sdata,
1702                 struct ieee80211_bss_conf *info),
1703
1704        TP_ARGS(local, sdata, info),
1705
1706        TP_STRUCT__entry(
1707                LOCAL_ENTRY
1708                VIF_ENTRY
1709                __field(u8, dtimper)
1710                __field(u16, bcnint)
1711                __dynamic_array(u8, ssid, info->ssid_len);
1712        ),
1713
1714        TP_fast_assign(
1715                LOCAL_ASSIGN;
1716                VIF_ASSIGN;
1717                __entry->dtimper = info->dtim_period;
1718                __entry->bcnint = info->beacon_int;
1719                memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len);
1720        ),
1721
1722        TP_printk(
1723                LOCAL_PR_FMT  VIF_PR_FMT,
1724                LOCAL_PR_ARG, VIF_PR_ARG
1725        )
1726);
1727
1728DEFINE_EVENT(local_sdata_evt, drv_leave_ibss,
1729        TP_PROTO(struct ieee80211_local *local,
1730                 struct ieee80211_sub_if_data *sdata),
1731        TP_ARGS(local, sdata)
1732);
1733
1734TRACE_EVENT(drv_get_expected_throughput,
1735        TP_PROTO(struct ieee80211_sta *sta),
1736
1737        TP_ARGS(sta),
1738
1739        TP_STRUCT__entry(
1740                STA_ENTRY
1741        ),
1742
1743        TP_fast_assign(
1744                STA_ASSIGN;
1745        ),
1746
1747        TP_printk(
1748                STA_PR_FMT, STA_PR_ARG
1749        )
1750);
1751
1752TRACE_EVENT(drv_start_nan,
1753        TP_PROTO(struct ieee80211_local *local,
1754                 struct ieee80211_sub_if_data *sdata,
1755                 struct cfg80211_nan_conf *conf),
1756
1757        TP_ARGS(local, sdata, conf),
1758        TP_STRUCT__entry(
1759                LOCAL_ENTRY
1760                VIF_ENTRY
1761                __field(u8, master_pref)
1762                __field(u8, bands)
1763        ),
1764
1765        TP_fast_assign(
1766                LOCAL_ASSIGN;
1767                VIF_ASSIGN;
1768                __entry->master_pref = conf->master_pref;
1769                __entry->bands = conf->bands;
1770        ),
1771
1772        TP_printk(
1773                LOCAL_PR_FMT  VIF_PR_FMT
1774                ", master preference: %u, bands: 0x%0x",
1775                LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref,
1776                __entry->bands
1777        )
1778);
1779
1780TRACE_EVENT(drv_stop_nan,
1781        TP_PROTO(struct ieee80211_local *local,
1782                 struct ieee80211_sub_if_data *sdata),
1783
1784        TP_ARGS(local, sdata),
1785
1786        TP_STRUCT__entry(
1787                LOCAL_ENTRY
1788                VIF_ENTRY
1789        ),
1790
1791        TP_fast_assign(
1792                LOCAL_ASSIGN;
1793                VIF_ASSIGN;
1794        ),
1795
1796        TP_printk(
1797                LOCAL_PR_FMT  VIF_PR_FMT,
1798                LOCAL_PR_ARG, VIF_PR_ARG
1799        )
1800);
1801
1802TRACE_EVENT(drv_nan_change_conf,
1803        TP_PROTO(struct ieee80211_local *local,
1804                 struct ieee80211_sub_if_data *sdata,
1805                 struct cfg80211_nan_conf *conf,
1806                 u32 changes),
1807
1808        TP_ARGS(local, sdata, conf, changes),
1809        TP_STRUCT__entry(
1810                LOCAL_ENTRY
1811                VIF_ENTRY
1812                __field(u8, master_pref)
1813                __field(u8, bands)
1814                __field(u32, changes)
1815        ),
1816
1817        TP_fast_assign(
1818                LOCAL_ASSIGN;
1819                VIF_ASSIGN;
1820                __entry->master_pref = conf->master_pref;
1821                __entry->bands = conf->bands;
1822                __entry->changes = changes;
1823        ),
1824
1825        TP_printk(
1826                LOCAL_PR_FMT  VIF_PR_FMT
1827                ", master preference: %u, bands: 0x%0x, changes: 0x%x",
1828                LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref,
1829                __entry->bands, __entry->changes
1830        )
1831);
1832
1833TRACE_EVENT(drv_add_nan_func,
1834        TP_PROTO(struct ieee80211_local *local,
1835                 struct ieee80211_sub_if_data *sdata,
1836                 const struct cfg80211_nan_func *func),
1837
1838        TP_ARGS(local, sdata, func),
1839        TP_STRUCT__entry(
1840                LOCAL_ENTRY
1841                VIF_ENTRY
1842                __field(u8, type)
1843                __field(u8, inst_id)
1844        ),
1845
1846        TP_fast_assign(
1847                LOCAL_ASSIGN;
1848                VIF_ASSIGN;
1849                __entry->type = func->type;
1850                __entry->inst_id = func->instance_id;
1851        ),
1852
1853        TP_printk(
1854                LOCAL_PR_FMT  VIF_PR_FMT
1855                ", type: %u, inst_id: %u",
1856                LOCAL_PR_ARG, VIF_PR_ARG, __entry->type, __entry->inst_id
1857        )
1858);
1859
1860TRACE_EVENT(drv_del_nan_func,
1861        TP_PROTO(struct ieee80211_local *local,
1862                 struct ieee80211_sub_if_data *sdata,
1863                 u8 instance_id),
1864
1865        TP_ARGS(local, sdata, instance_id),
1866        TP_STRUCT__entry(
1867                LOCAL_ENTRY
1868                VIF_ENTRY
1869                __field(u8, instance_id)
1870        ),
1871
1872        TP_fast_assign(
1873                LOCAL_ASSIGN;
1874                VIF_ASSIGN;
1875                __entry->instance_id = instance_id;
1876        ),
1877
1878        TP_printk(
1879                LOCAL_PR_FMT  VIF_PR_FMT
1880                ", instance_id: %u",
1881                LOCAL_PR_ARG, VIF_PR_ARG, __entry->instance_id
1882        )
1883);
1884
1885/*
1886 * Tracing for API calls that drivers call.
1887 */
1888
1889TRACE_EVENT(api_start_tx_ba_session,
1890        TP_PROTO(struct ieee80211_sta *sta, u16 tid),
1891
1892        TP_ARGS(sta, tid),
1893
1894        TP_STRUCT__entry(
1895                STA_ENTRY
1896                __field(u16, tid)
1897        ),
1898
1899        TP_fast_assign(
1900                STA_ASSIGN;
1901                __entry->tid = tid;
1902        ),
1903
1904        TP_printk(
1905                STA_PR_FMT " tid:%d",
1906                STA_PR_ARG, __entry->tid
1907        )
1908);
1909
1910TRACE_EVENT(api_start_tx_ba_cb,
1911        TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
1912
1913        TP_ARGS(sdata, ra, tid),
1914
1915        TP_STRUCT__entry(
1916                VIF_ENTRY
1917                __array(u8, ra, ETH_ALEN)
1918                __field(u16, tid)
1919        ),
1920
1921        TP_fast_assign(
1922                VIF_ASSIGN;
1923                memcpy(__entry->ra, ra, ETH_ALEN);
1924                __entry->tid = tid;
1925        ),
1926
1927        TP_printk(
1928                VIF_PR_FMT " ra:%pM tid:%d",
1929                VIF_PR_ARG, __entry->ra, __entry->tid
1930        )
1931);
1932
1933TRACE_EVENT(api_stop_tx_ba_session,
1934        TP_PROTO(struct ieee80211_sta *sta, u16 tid),
1935
1936        TP_ARGS(sta, tid),
1937
1938        TP_STRUCT__entry(
1939                STA_ENTRY
1940                __field(u16, tid)
1941        ),
1942
1943        TP_fast_assign(
1944                STA_ASSIGN;
1945                __entry->tid = tid;
1946        ),
1947
1948        TP_printk(
1949                STA_PR_FMT " tid:%d",
1950                STA_PR_ARG, __entry->tid
1951        )
1952);
1953
1954TRACE_EVENT(api_stop_tx_ba_cb,
1955        TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
1956
1957        TP_ARGS(sdata, ra, tid),
1958
1959        TP_STRUCT__entry(
1960                VIF_ENTRY
1961                __array(u8, ra, ETH_ALEN)
1962                __field(u16, tid)
1963        ),
1964
1965        TP_fast_assign(
1966                VIF_ASSIGN;
1967                memcpy(__entry->ra, ra, ETH_ALEN);
1968                __entry->tid = tid;
1969        ),
1970
1971        TP_printk(
1972                VIF_PR_FMT " ra:%pM tid:%d",
1973                VIF_PR_ARG, __entry->ra, __entry->tid
1974        )
1975);
1976
1977DEFINE_EVENT(local_only_evt, api_restart_hw,
1978        TP_PROTO(struct ieee80211_local *local),
1979        TP_ARGS(local)
1980);
1981
1982TRACE_EVENT(api_beacon_loss,
1983        TP_PROTO(struct ieee80211_sub_if_data *sdata),
1984
1985        TP_ARGS(sdata),
1986
1987        TP_STRUCT__entry(
1988                VIF_ENTRY
1989        ),
1990
1991        TP_fast_assign(
1992                VIF_ASSIGN;
1993        ),
1994
1995        TP_printk(
1996                VIF_PR_FMT,
1997                VIF_PR_ARG
1998        )
1999);
2000
2001TRACE_EVENT(api_connection_loss,
2002        TP_PROTO(struct ieee80211_sub_if_data *sdata),
2003
2004        TP_ARGS(sdata),
2005
2006        TP_STRUCT__entry(
2007                VIF_ENTRY
2008        ),
2009
2010        TP_fast_assign(
2011                VIF_ASSIGN;
2012        ),
2013
2014        TP_printk(
2015                VIF_PR_FMT,
2016                VIF_PR_ARG
2017        )
2018);
2019
2020TRACE_EVENT(api_cqm_rssi_notify,
2021        TP_PROTO(struct ieee80211_sub_if_data *sdata,
2022                 enum nl80211_cqm_rssi_threshold_event rssi_event,
2023                 s32 rssi_level),
2024
2025        TP_ARGS(sdata, rssi_event, rssi_level),
2026
2027        TP_STRUCT__entry(
2028                VIF_ENTRY
2029                __field(u32, rssi_event)
2030                __field(s32, rssi_level)
2031        ),
2032
2033        TP_fast_assign(
2034                VIF_ASSIGN;
2035                __entry->rssi_event = rssi_event;
2036                __entry->rssi_level = rssi_level;
2037        ),
2038
2039        TP_printk(
2040                VIF_PR_FMT " event:%d rssi:%d",
2041                VIF_PR_ARG, __entry->rssi_event, __entry->rssi_level
2042        )
2043);
2044
2045DEFINE_EVENT(local_sdata_evt, api_cqm_beacon_loss_notify,
2046        TP_PROTO(struct ieee80211_local *local,
2047                 struct ieee80211_sub_if_data *sdata),
2048        TP_ARGS(local, sdata)
2049);
2050
2051TRACE_EVENT(api_scan_completed,
2052        TP_PROTO(struct ieee80211_local *local, bool aborted),
2053
2054        TP_ARGS(local, aborted),
2055
2056        TP_STRUCT__entry(
2057                LOCAL_ENTRY
2058                __field(bool, aborted)
2059        ),
2060
2061        TP_fast_assign(
2062                LOCAL_ASSIGN;
2063                __entry->aborted = aborted;
2064        ),
2065
2066        TP_printk(
2067                LOCAL_PR_FMT " aborted:%d",
2068                LOCAL_PR_ARG, __entry->aborted
2069        )
2070);
2071
2072TRACE_EVENT(api_sched_scan_results,
2073        TP_PROTO(struct ieee80211_local *local),
2074
2075        TP_ARGS(local),
2076
2077        TP_STRUCT__entry(
2078                LOCAL_ENTRY
2079        ),
2080
2081        TP_fast_assign(
2082                LOCAL_ASSIGN;
2083        ),
2084
2085        TP_printk(
2086                LOCAL_PR_FMT, LOCAL_PR_ARG
2087        )
2088);
2089
2090TRACE_EVENT(api_sched_scan_stopped,
2091        TP_PROTO(struct ieee80211_local *local),
2092
2093        TP_ARGS(local),
2094
2095        TP_STRUCT__entry(
2096                LOCAL_ENTRY
2097        ),
2098
2099        TP_fast_assign(
2100                LOCAL_ASSIGN;
2101        ),
2102
2103        TP_printk(
2104                LOCAL_PR_FMT, LOCAL_PR_ARG
2105        )
2106);
2107
2108TRACE_EVENT(api_sta_block_awake,
2109        TP_PROTO(struct ieee80211_local *local,
2110                 struct ieee80211_sta *sta, bool block),
2111
2112        TP_ARGS(local, sta, block),
2113
2114        TP_STRUCT__entry(
2115                LOCAL_ENTRY
2116                STA_ENTRY
2117                __field(bool, block)
2118        ),
2119
2120        TP_fast_assign(
2121                LOCAL_ASSIGN;
2122                STA_ASSIGN;
2123                __entry->block = block;
2124        ),
2125
2126        TP_printk(
2127                LOCAL_PR_FMT STA_PR_FMT " block:%d",
2128                LOCAL_PR_ARG, STA_PR_ARG, __entry->block
2129        )
2130);
2131
2132TRACE_EVENT(api_chswitch_done,
2133        TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success),
2134
2135        TP_ARGS(sdata, success),
2136
2137        TP_STRUCT__entry(
2138                VIF_ENTRY
2139                __field(bool, success)
2140        ),
2141
2142        TP_fast_assign(
2143                VIF_ASSIGN;
2144                __entry->success = success;
2145        ),
2146
2147        TP_printk(
2148                VIF_PR_FMT " success=%d",
2149                VIF_PR_ARG, __entry->success
2150        )
2151);
2152
2153DEFINE_EVENT(local_only_evt, api_ready_on_channel,
2154        TP_PROTO(struct ieee80211_local *local),
2155        TP_ARGS(local)
2156);
2157
2158DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired,
2159        TP_PROTO(struct ieee80211_local *local),
2160        TP_ARGS(local)
2161);
2162
2163TRACE_EVENT(api_gtk_rekey_notify,
2164        TP_PROTO(struct ieee80211_sub_if_data *sdata,
2165                 const u8 *bssid, const u8 *replay_ctr),
2166
2167        TP_ARGS(sdata, bssid, replay_ctr),
2168
2169        TP_STRUCT__entry(
2170                VIF_ENTRY
2171                __array(u8, bssid, ETH_ALEN)
2172                __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
2173        ),
2174
2175        TP_fast_assign(
2176                VIF_ASSIGN;
2177                memcpy(__entry->bssid, bssid, ETH_ALEN);
2178                memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN);
2179        ),
2180
2181        TP_printk(VIF_PR_FMT, VIF_PR_ARG)
2182);
2183
2184TRACE_EVENT(api_enable_rssi_reports,
2185        TP_PROTO(struct ieee80211_sub_if_data *sdata,
2186                 int rssi_min_thold, int rssi_max_thold),
2187
2188        TP_ARGS(sdata, rssi_min_thold, rssi_max_thold),
2189
2190        TP_STRUCT__entry(
2191                VIF_ENTRY
2192                __field(int, rssi_min_thold)
2193                __field(int, rssi_max_thold)
2194        ),
2195
2196        TP_fast_assign(
2197                VIF_ASSIGN;
2198                __entry->rssi_min_thold = rssi_min_thold;
2199                __entry->rssi_max_thold = rssi_max_thold;
2200        ),
2201
2202        TP_printk(
2203                VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d",
2204                VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold
2205        )
2206);
2207
2208TRACE_EVENT(api_eosp,
2209        TP_PROTO(struct ieee80211_local *local,
2210                 struct ieee80211_sta *sta),
2211
2212        TP_ARGS(local, sta),
2213
2214        TP_STRUCT__entry(
2215                LOCAL_ENTRY
2216                STA_ENTRY
2217        ),
2218
2219        TP_fast_assign(
2220                LOCAL_ASSIGN;
2221                STA_ASSIGN;
2222        ),
2223
2224        TP_printk(
2225                LOCAL_PR_FMT STA_PR_FMT,
2226                LOCAL_PR_ARG, STA_PR_ARG
2227        )
2228);
2229
2230TRACE_EVENT(api_send_eosp_nullfunc,
2231        TP_PROTO(struct ieee80211_local *local,
2232                 struct ieee80211_sta *sta,
2233                 u8 tid),
2234
2235        TP_ARGS(local, sta, tid),
2236
2237        TP_STRUCT__entry(
2238                LOCAL_ENTRY
2239                STA_ENTRY
2240                __field(u8, tid)
2241        ),
2242
2243        TP_fast_assign(
2244                LOCAL_ASSIGN;
2245                STA_ASSIGN;
2246                __entry->tid = tid;
2247        ),
2248
2249        TP_printk(
2250                LOCAL_PR_FMT STA_PR_FMT " tid:%d",
2251                LOCAL_PR_ARG, STA_PR_ARG, __entry->tid
2252        )
2253);
2254
2255TRACE_EVENT(api_sta_set_buffered,
2256        TP_PROTO(struct ieee80211_local *local,
2257                 struct ieee80211_sta *sta,
2258                 u8 tid, bool buffered),
2259
2260        TP_ARGS(local, sta, tid, buffered),
2261
2262        TP_STRUCT__entry(
2263                LOCAL_ENTRY
2264                STA_ENTRY
2265                __field(u8, tid)
2266                __field(bool, buffered)
2267        ),
2268
2269        TP_fast_assign(
2270                LOCAL_ASSIGN;
2271                STA_ASSIGN;
2272                __entry->tid = tid;
2273                __entry->buffered = buffered;
2274        ),
2275
2276        TP_printk(
2277                LOCAL_PR_FMT STA_PR_FMT " tid:%d buffered:%d",
2278                LOCAL_PR_ARG, STA_PR_ARG, __entry->tid, __entry->buffered
2279        )
2280);
2281
2282/*
2283 * Tracing for internal functions
2284 * (which may also be called in response to driver calls)
2285 */
2286
2287TRACE_EVENT(wake_queue,
2288        TP_PROTO(struct ieee80211_local *local, u16 queue,
2289                 enum queue_stop_reason reason),
2290
2291        TP_ARGS(local, queue, reason),
2292
2293        TP_STRUCT__entry(
2294                LOCAL_ENTRY
2295                __field(u16, queue)
2296                __field(u32, reason)
2297        ),
2298
2299        TP_fast_assign(
2300                LOCAL_ASSIGN;
2301                __entry->queue = queue;
2302                __entry->reason = reason;
2303        ),
2304
2305        TP_printk(
2306                LOCAL_PR_FMT " queue:%d, reason:%d",
2307                LOCAL_PR_ARG, __entry->queue, __entry->reason
2308        )
2309);
2310
2311TRACE_EVENT(stop_queue,
2312        TP_PROTO(struct ieee80211_local *local, u16 queue,
2313                 enum queue_stop_reason reason),
2314
2315        TP_ARGS(local, queue, reason),
2316
2317        TP_STRUCT__entry(
2318                LOCAL_ENTRY
2319                __field(u16, queue)
2320                __field(u32, reason)
2321        ),
2322
2323        TP_fast_assign(
2324                LOCAL_ASSIGN;
2325                __entry->queue = queue;
2326                __entry->reason = reason;
2327        ),
2328
2329        TP_printk(
2330                LOCAL_PR_FMT " queue:%d, reason:%d",
2331                LOCAL_PR_ARG, __entry->queue, __entry->reason
2332        )
2333);
2334
2335TRACE_EVENT(drv_set_default_unicast_key,
2336        TP_PROTO(struct ieee80211_local *local,
2337                 struct ieee80211_sub_if_data *sdata,
2338                 int key_idx),
2339
2340        TP_ARGS(local, sdata, key_idx),
2341
2342        TP_STRUCT__entry(
2343                LOCAL_ENTRY
2344                VIF_ENTRY
2345                __field(int, key_idx)
2346        ),
2347
2348        TP_fast_assign(
2349                LOCAL_ASSIGN;
2350                VIF_ASSIGN;
2351                __entry->key_idx = key_idx;
2352        ),
2353
2354        TP_printk(LOCAL_PR_FMT VIF_PR_FMT " key_idx:%d",
2355                  LOCAL_PR_ARG, VIF_PR_ARG, __entry->key_idx)
2356);
2357
2358TRACE_EVENT(api_radar_detected,
2359        TP_PROTO(struct ieee80211_local *local),
2360
2361        TP_ARGS(local),
2362
2363        TP_STRUCT__entry(
2364                LOCAL_ENTRY
2365        ),
2366
2367        TP_fast_assign(
2368                LOCAL_ASSIGN;
2369        ),
2370
2371        TP_printk(
2372                LOCAL_PR_FMT " radar detected",
2373                LOCAL_PR_ARG
2374        )
2375);
2376
2377TRACE_EVENT(drv_channel_switch_beacon,
2378        TP_PROTO(struct ieee80211_local *local,
2379                 struct ieee80211_sub_if_data *sdata,
2380                 struct cfg80211_chan_def *chandef),
2381
2382        TP_ARGS(local, sdata, chandef),
2383
2384        TP_STRUCT__entry(
2385                LOCAL_ENTRY
2386                VIF_ENTRY
2387                CHANDEF_ENTRY
2388        ),
2389
2390        TP_fast_assign(
2391                LOCAL_ASSIGN;
2392                VIF_ASSIGN;
2393                CHANDEF_ASSIGN(chandef);
2394        ),
2395
2396        TP_printk(
2397                LOCAL_PR_FMT VIF_PR_FMT " channel switch to " CHANDEF_PR_FMT,
2398                LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG
2399        )
2400);
2401
2402TRACE_EVENT(drv_pre_channel_switch,
2403        TP_PROTO(struct ieee80211_local *local,
2404                 struct ieee80211_sub_if_data *sdata,
2405                 struct ieee80211_channel_switch *ch_switch),
2406
2407        TP_ARGS(local, sdata, ch_switch),
2408
2409        TP_STRUCT__entry(
2410                LOCAL_ENTRY
2411                VIF_ENTRY
2412                CHANDEF_ENTRY
2413                __field(u64, timestamp)
2414                __field(u32, device_timestamp)
2415                __field(bool, block_tx)
2416                __field(u8, count)
2417        ),
2418
2419        TP_fast_assign(
2420                LOCAL_ASSIGN;
2421                VIF_ASSIGN;
2422                CHANDEF_ASSIGN(&ch_switch->chandef)
2423                __entry->timestamp = ch_switch->timestamp;
2424                __entry->device_timestamp = ch_switch->device_timestamp;
2425                __entry->block_tx = ch_switch->block_tx;
2426                __entry->count = ch_switch->count;
2427        ),
2428
2429        TP_printk(
2430                LOCAL_PR_FMT VIF_PR_FMT " prepare channel switch to "
2431                CHANDEF_PR_FMT  " count:%d block_tx:%d timestamp:%llu",
2432                LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count,
2433                __entry->block_tx, __entry->timestamp
2434        )
2435);
2436
2437DEFINE_EVENT(local_sdata_evt, drv_post_channel_switch,
2438             TP_PROTO(struct ieee80211_local *local,
2439                      struct ieee80211_sub_if_data *sdata),
2440             TP_ARGS(local, sdata)
2441);
2442
2443TRACE_EVENT(drv_get_txpower,
2444        TP_PROTO(struct ieee80211_local *local,
2445                 struct ieee80211_sub_if_data *sdata,
2446                 int dbm, int ret),
2447
2448        TP_ARGS(local, sdata, dbm, ret),
2449
2450        TP_STRUCT__entry(
2451                LOCAL_ENTRY
2452                VIF_ENTRY
2453                __field(int, dbm)
2454                __field(int, ret)
2455        ),
2456
2457        TP_fast_assign(
2458                LOCAL_ASSIGN;
2459                VIF_ASSIGN;
2460                __entry->dbm = dbm;
2461                __entry->ret = ret;
2462        ),
2463
2464        TP_printk(
2465                LOCAL_PR_FMT VIF_PR_FMT " dbm:%d ret:%d",
2466                LOCAL_PR_ARG, VIF_PR_ARG, __entry->dbm, __entry->ret
2467        )
2468);
2469
2470TRACE_EVENT(drv_tdls_channel_switch,
2471        TP_PROTO(struct ieee80211_local *local,
2472                 struct ieee80211_sub_if_data *sdata,
2473                 struct ieee80211_sta *sta, u8 oper_class,
2474                 struct cfg80211_chan_def *chandef),
2475
2476        TP_ARGS(local, sdata, sta, oper_class, chandef),
2477
2478        TP_STRUCT__entry(
2479                LOCAL_ENTRY
2480                VIF_ENTRY
2481                STA_ENTRY
2482                __field(u8, oper_class)
2483                CHANDEF_ENTRY
2484        ),
2485
2486        TP_fast_assign(
2487                LOCAL_ASSIGN;
2488                VIF_ASSIGN;
2489                STA_ASSIGN;
2490                __entry->oper_class = oper_class;
2491                CHANDEF_ASSIGN(chandef)
2492        ),
2493
2494        TP_printk(
2495                LOCAL_PR_FMT VIF_PR_FMT " tdls channel switch to"
2496                CHANDEF_PR_FMT  " oper_class:%d " STA_PR_FMT,
2497                LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->oper_class,
2498                STA_PR_ARG
2499        )
2500);
2501
2502TRACE_EVENT(drv_tdls_cancel_channel_switch,
2503        TP_PROTO(struct ieee80211_local *local,
2504                 struct ieee80211_sub_if_data *sdata,
2505                 struct ieee80211_sta *sta),
2506
2507        TP_ARGS(local, sdata, sta),
2508
2509        TP_STRUCT__entry(
2510                LOCAL_ENTRY
2511                VIF_ENTRY
2512                STA_ENTRY
2513        ),
2514
2515        TP_fast_assign(
2516                LOCAL_ASSIGN;
2517                VIF_ASSIGN;
2518                STA_ASSIGN;
2519        ),
2520
2521        TP_printk(
2522                LOCAL_PR_FMT VIF_PR_FMT
2523                " tdls cancel channel switch with " STA_PR_FMT,
2524                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
2525        )
2526);
2527
2528TRACE_EVENT(drv_tdls_recv_channel_switch,
2529        TP_PROTO(struct ieee80211_local *local,
2530                 struct ieee80211_sub_if_data *sdata,
2531                 struct ieee80211_tdls_ch_sw_params *params),
2532
2533        TP_ARGS(local, sdata, params),
2534
2535        TP_STRUCT__entry(
2536                LOCAL_ENTRY
2537                VIF_ENTRY
2538                __field(u8, action_code)
2539                STA_ENTRY
2540                CHANDEF_ENTRY
2541                __field(u32, status)
2542                __field(bool, peer_initiator)
2543                __field(u32, timestamp)
2544                __field(u16, switch_time)
2545                __field(u16, switch_timeout)
2546        ),
2547
2548        TP_fast_assign(
2549                LOCAL_ASSIGN;
2550                VIF_ASSIGN;
2551                STA_NAMED_ASSIGN(params->sta);
2552                CHANDEF_ASSIGN(params->chandef)
2553                __entry->peer_initiator = params->sta->tdls_initiator;
2554                __entry->action_code = params->action_code;
2555                __entry->status = params->status;
2556                __entry->timestamp = params->timestamp;
2557                __entry->switch_time = params->switch_time;
2558                __entry->switch_timeout = params->switch_timeout;
2559        ),
2560
2561        TP_printk(
2562                LOCAL_PR_FMT VIF_PR_FMT " received tdls channel switch packet"
2563                " action:%d status:%d time:%d switch time:%d switch"
2564                " timeout:%d initiator: %d chan:" CHANDEF_PR_FMT STA_PR_FMT,
2565                LOCAL_PR_ARG, VIF_PR_ARG, __entry->action_code, __entry->status,
2566                __entry->timestamp, __entry->switch_time,
2567                __entry->switch_timeout, __entry->peer_initiator,
2568                CHANDEF_PR_ARG, STA_PR_ARG
2569        )
2570);
2571
2572TRACE_EVENT(drv_wake_tx_queue,
2573        TP_PROTO(struct ieee80211_local *local,
2574                 struct ieee80211_sub_if_data *sdata,
2575                 struct txq_info *txq),
2576
2577        TP_ARGS(local, sdata, txq),
2578
2579        TP_STRUCT__entry(
2580                LOCAL_ENTRY
2581                VIF_ENTRY
2582                STA_ENTRY
2583                __field(u8, ac)
2584                __field(u8, tid)
2585        ),
2586
2587        TP_fast_assign(
2588                struct ieee80211_sta *sta = txq->txq.sta;
2589
2590                LOCAL_ASSIGN;
2591                VIF_ASSIGN;
2592                STA_ASSIGN;
2593                __entry->ac = txq->txq.ac;
2594                __entry->tid = txq->txq.tid;
2595        ),
2596
2597        TP_printk(
2598                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " ac:%d tid:%d",
2599                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->ac, __entry->tid
2600        )
2601);
2602
2603#endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
2604
2605#undef TRACE_INCLUDE_PATH
2606#define TRACE_INCLUDE_PATH .
2607#undef TRACE_INCLUDE_FILE
2608#define TRACE_INCLUDE_FILE trace
2609#include <trace/define_trace.h>
2610