linux/net/mac80211/trace.h
<<
>>
Prefs
   1#if !defined(__MAC80211_DRIVER_TRACE) || defined(TRACE_HEADER_MULTI_READ)
   2#define __MAC80211_DRIVER_TRACE
   3
   4#include <linux/tracepoint.h>
   5#include <net/mac80211.h>
   6#include "ieee80211_i.h"
   7
   8#undef TRACE_SYSTEM
   9#define TRACE_SYSTEM mac80211
  10
  11#define MAXNAME         32
  12#define LOCAL_ENTRY     __array(char, wiphy_name, 32)
  13#define LOCAL_ASSIGN    strlcpy(__entry->wiphy_name, wiphy_name(local->hw.wiphy), MAXNAME)
  14#define LOCAL_PR_FMT    "%s"
  15#define LOCAL_PR_ARG    __entry->wiphy_name
  16
  17#define STA_ENTRY       __array(char, sta_addr, ETH_ALEN)
  18#define STA_ASSIGN      (sta ? memcpy(__entry->sta_addr, sta->addr, ETH_ALEN) : memset(__entry->sta_addr, 0, ETH_ALEN))
  19#define STA_PR_FMT      " sta:%pM"
  20#define STA_PR_ARG      __entry->sta_addr
  21
  22#define VIF_ENTRY       __field(enum nl80211_iftype, vif_type) __field(void *, sdata)   \
  23                        __field(bool, p2p)                                              \
  24                        __string(vif_name, sdata->dev ? sdata->dev->name : "<nodev>")
  25#define VIF_ASSIGN      __entry->vif_type = sdata->vif.type; __entry->sdata = sdata;    \
  26                        __entry->p2p = sdata->vif.p2p;                                  \
  27                        __assign_str(vif_name, sdata->dev ? sdata->dev->name : "<nodev>")
  28#define VIF_PR_FMT      " vif:%s(%d%s)"
  29#define VIF_PR_ARG      __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : ""
  30
  31/*
  32 * Tracing for driver callbacks.
  33 */
  34
  35DECLARE_EVENT_CLASS(local_only_evt,
  36        TP_PROTO(struct ieee80211_local *local),
  37        TP_ARGS(local),
  38        TP_STRUCT__entry(
  39                LOCAL_ENTRY
  40        ),
  41        TP_fast_assign(
  42                LOCAL_ASSIGN;
  43        ),
  44        TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG)
  45);
  46
  47DECLARE_EVENT_CLASS(local_sdata_addr_evt,
  48        TP_PROTO(struct ieee80211_local *local,
  49                 struct ieee80211_sub_if_data *sdata),
  50        TP_ARGS(local, sdata),
  51
  52        TP_STRUCT__entry(
  53                LOCAL_ENTRY
  54                VIF_ENTRY
  55                __array(char, addr, 6)
  56        ),
  57
  58        TP_fast_assign(
  59                LOCAL_ASSIGN;
  60                VIF_ASSIGN;
  61                memcpy(__entry->addr, sdata->vif.addr, 6);
  62        ),
  63
  64        TP_printk(
  65                LOCAL_PR_FMT  VIF_PR_FMT " addr:%pM",
  66                LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr
  67        )
  68);
  69
  70DECLARE_EVENT_CLASS(local_u32_evt,
  71        TP_PROTO(struct ieee80211_local *local, u32 value),
  72        TP_ARGS(local, value),
  73
  74        TP_STRUCT__entry(
  75                LOCAL_ENTRY
  76                __field(u32, value)
  77        ),
  78
  79        TP_fast_assign(
  80                LOCAL_ASSIGN;
  81                __entry->value = value;
  82        ),
  83
  84        TP_printk(
  85                LOCAL_PR_FMT " value:%d",
  86                LOCAL_PR_ARG, __entry->value
  87        )
  88);
  89
  90DECLARE_EVENT_CLASS(local_sdata_evt,
  91        TP_PROTO(struct ieee80211_local *local,
  92                 struct ieee80211_sub_if_data *sdata),
  93        TP_ARGS(local, sdata),
  94
  95        TP_STRUCT__entry(
  96                LOCAL_ENTRY
  97                VIF_ENTRY
  98        ),
  99
 100        TP_fast_assign(
 101                LOCAL_ASSIGN;
 102                VIF_ASSIGN;
 103        ),
 104
 105        TP_printk(
 106                LOCAL_PR_FMT VIF_PR_FMT,
 107                LOCAL_PR_ARG, VIF_PR_ARG
 108        )
 109);
 110
 111DEFINE_EVENT(local_only_evt, drv_return_void,
 112        TP_PROTO(struct ieee80211_local *local),
 113        TP_ARGS(local)
 114);
 115
 116TRACE_EVENT(drv_return_int,
 117        TP_PROTO(struct ieee80211_local *local, int ret),
 118        TP_ARGS(local, ret),
 119        TP_STRUCT__entry(
 120                LOCAL_ENTRY
 121                __field(int, ret)
 122        ),
 123        TP_fast_assign(
 124                LOCAL_ASSIGN;
 125                __entry->ret = ret;
 126        ),
 127        TP_printk(LOCAL_PR_FMT " - %d", LOCAL_PR_ARG, __entry->ret)
 128);
 129
 130TRACE_EVENT(drv_return_bool,
 131        TP_PROTO(struct ieee80211_local *local, bool ret),
 132        TP_ARGS(local, ret),
 133        TP_STRUCT__entry(
 134                LOCAL_ENTRY
 135                __field(bool, ret)
 136        ),
 137        TP_fast_assign(
 138                LOCAL_ASSIGN;
 139                __entry->ret = ret;
 140        ),
 141        TP_printk(LOCAL_PR_FMT " - %s", LOCAL_PR_ARG, (__entry->ret) ?
 142                  "true" : "false")
 143);
 144
 145TRACE_EVENT(drv_return_u64,
 146        TP_PROTO(struct ieee80211_local *local, u64 ret),
 147        TP_ARGS(local, ret),
 148        TP_STRUCT__entry(
 149                LOCAL_ENTRY
 150                __field(u64, ret)
 151        ),
 152        TP_fast_assign(
 153                LOCAL_ASSIGN;
 154                __entry->ret = ret;
 155        ),
 156        TP_printk(LOCAL_PR_FMT " - %llu", LOCAL_PR_ARG, __entry->ret)
 157);
 158
 159DEFINE_EVENT(local_only_evt, drv_start,
 160        TP_PROTO(struct ieee80211_local *local),
 161        TP_ARGS(local)
 162);
 163
 164DEFINE_EVENT(local_u32_evt, drv_get_et_strings,
 165             TP_PROTO(struct ieee80211_local *local, u32 sset),
 166             TP_ARGS(local, sset)
 167);
 168
 169DEFINE_EVENT(local_u32_evt, drv_get_et_sset_count,
 170             TP_PROTO(struct ieee80211_local *local, u32 sset),
 171             TP_ARGS(local, sset)
 172);
 173
 174DEFINE_EVENT(local_only_evt, drv_get_et_stats,
 175             TP_PROTO(struct ieee80211_local *local),
 176             TP_ARGS(local)
 177);
 178
 179DEFINE_EVENT(local_only_evt, drv_suspend,
 180        TP_PROTO(struct ieee80211_local *local),
 181        TP_ARGS(local)
 182);
 183
 184DEFINE_EVENT(local_only_evt, drv_resume,
 185        TP_PROTO(struct ieee80211_local *local),
 186        TP_ARGS(local)
 187);
 188
 189TRACE_EVENT(drv_set_wakeup,
 190        TP_PROTO(struct ieee80211_local *local, bool enabled),
 191        TP_ARGS(local, enabled),
 192        TP_STRUCT__entry(
 193                LOCAL_ENTRY
 194                __field(bool, enabled)
 195        ),
 196        TP_fast_assign(
 197                LOCAL_ASSIGN;
 198                __entry->enabled = enabled;
 199        ),
 200        TP_printk(LOCAL_PR_FMT " enabled:%d", LOCAL_PR_ARG, __entry->enabled)
 201);
 202
 203DEFINE_EVENT(local_only_evt, drv_stop,
 204        TP_PROTO(struct ieee80211_local *local),
 205        TP_ARGS(local)
 206);
 207
 208DEFINE_EVENT(local_sdata_addr_evt, drv_add_interface,
 209        TP_PROTO(struct ieee80211_local *local,
 210                 struct ieee80211_sub_if_data *sdata),
 211        TP_ARGS(local, sdata)
 212);
 213
 214TRACE_EVENT(drv_change_interface,
 215        TP_PROTO(struct ieee80211_local *local,
 216                 struct ieee80211_sub_if_data *sdata,
 217                 enum nl80211_iftype type, bool p2p),
 218
 219        TP_ARGS(local, sdata, type, p2p),
 220
 221        TP_STRUCT__entry(
 222                LOCAL_ENTRY
 223                VIF_ENTRY
 224                __field(u32, new_type)
 225                __field(bool, new_p2p)
 226        ),
 227
 228        TP_fast_assign(
 229                LOCAL_ASSIGN;
 230                VIF_ASSIGN;
 231                __entry->new_type = type;
 232                __entry->new_p2p = p2p;
 233        ),
 234
 235        TP_printk(
 236                LOCAL_PR_FMT  VIF_PR_FMT " new type:%d%s",
 237                LOCAL_PR_ARG, VIF_PR_ARG, __entry->new_type,
 238                __entry->new_p2p ? "/p2p" : ""
 239        )
 240);
 241
 242DEFINE_EVENT(local_sdata_addr_evt, drv_remove_interface,
 243        TP_PROTO(struct ieee80211_local *local,
 244                 struct ieee80211_sub_if_data *sdata),
 245        TP_ARGS(local, sdata)
 246);
 247
 248TRACE_EVENT(drv_config,
 249        TP_PROTO(struct ieee80211_local *local,
 250                 u32 changed),
 251
 252        TP_ARGS(local, changed),
 253
 254        TP_STRUCT__entry(
 255                LOCAL_ENTRY
 256                __field(u32, changed)
 257                __field(u32, flags)
 258                __field(int, power_level)
 259                __field(int, dynamic_ps_timeout)
 260                __field(int, max_sleep_period)
 261                __field(u16, listen_interval)
 262                __field(u8, long_frame_max_tx_count)
 263                __field(u8, short_frame_max_tx_count)
 264                __field(int, center_freq)
 265                __field(int, channel_type)
 266                __field(int, smps)
 267        ),
 268
 269        TP_fast_assign(
 270                LOCAL_ASSIGN;
 271                __entry->changed = changed;
 272                __entry->flags = local->hw.conf.flags;
 273                __entry->power_level = local->hw.conf.power_level;
 274                __entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout;
 275                __entry->max_sleep_period = local->hw.conf.max_sleep_period;
 276                __entry->listen_interval = local->hw.conf.listen_interval;
 277                __entry->long_frame_max_tx_count = local->hw.conf.long_frame_max_tx_count;
 278                __entry->short_frame_max_tx_count = local->hw.conf.short_frame_max_tx_count;
 279                __entry->center_freq = local->hw.conf.channel->center_freq;
 280                __entry->channel_type = local->hw.conf.channel_type;
 281                __entry->smps = local->hw.conf.smps_mode;
 282        ),
 283
 284        TP_printk(
 285                LOCAL_PR_FMT " ch:%#x freq:%d",
 286                LOCAL_PR_ARG, __entry->changed, __entry->center_freq
 287        )
 288);
 289
 290TRACE_EVENT(drv_bss_info_changed,
 291        TP_PROTO(struct ieee80211_local *local,
 292                 struct ieee80211_sub_if_data *sdata,
 293                 struct ieee80211_bss_conf *info,
 294                 u32 changed),
 295
 296        TP_ARGS(local, sdata, info, changed),
 297
 298        TP_STRUCT__entry(
 299                LOCAL_ENTRY
 300                VIF_ENTRY
 301                __field(bool, assoc)
 302                __field(u16, aid)
 303                __field(bool, cts)
 304                __field(bool, shortpre)
 305                __field(bool, shortslot)
 306                __field(u8, dtimper)
 307                __field(u16, bcnint)
 308                __field(u16, assoc_cap)
 309                __field(u64, sync_tsf)
 310                __field(u32, sync_device_ts)
 311                __field(u32, basic_rates)
 312                __field(u32, changed)
 313                __field(bool, enable_beacon)
 314                __field(u16, ht_operation_mode)
 315        ),
 316
 317        TP_fast_assign(
 318                LOCAL_ASSIGN;
 319                VIF_ASSIGN;
 320                __entry->changed = changed;
 321                __entry->aid = info->aid;
 322                __entry->assoc = info->assoc;
 323                __entry->shortpre = info->use_short_preamble;
 324                __entry->cts = info->use_cts_prot;
 325                __entry->shortslot = info->use_short_slot;
 326                __entry->dtimper = info->dtim_period;
 327                __entry->bcnint = info->beacon_int;
 328                __entry->assoc_cap = info->assoc_capability;
 329                __entry->sync_tsf = info->sync_tsf;
 330                __entry->sync_device_ts = info->sync_device_ts;
 331                __entry->basic_rates = info->basic_rates;
 332                __entry->enable_beacon = info->enable_beacon;
 333                __entry->ht_operation_mode = info->ht_operation_mode;
 334        ),
 335
 336        TP_printk(
 337                LOCAL_PR_FMT  VIF_PR_FMT " changed:%#x",
 338                LOCAL_PR_ARG, VIF_PR_ARG, __entry->changed
 339        )
 340);
 341
 342TRACE_EVENT(drv_prepare_multicast,
 343        TP_PROTO(struct ieee80211_local *local, int mc_count),
 344
 345        TP_ARGS(local, mc_count),
 346
 347        TP_STRUCT__entry(
 348                LOCAL_ENTRY
 349                __field(int, mc_count)
 350        ),
 351
 352        TP_fast_assign(
 353                LOCAL_ASSIGN;
 354                __entry->mc_count = mc_count;
 355        ),
 356
 357        TP_printk(
 358                LOCAL_PR_FMT " prepare mc (%d)",
 359                LOCAL_PR_ARG, __entry->mc_count
 360        )
 361);
 362
 363TRACE_EVENT(drv_configure_filter,
 364        TP_PROTO(struct ieee80211_local *local,
 365                 unsigned int changed_flags,
 366                 unsigned int *total_flags,
 367                 u64 multicast),
 368
 369        TP_ARGS(local, changed_flags, total_flags, multicast),
 370
 371        TP_STRUCT__entry(
 372                LOCAL_ENTRY
 373                __field(unsigned int, changed)
 374                __field(unsigned int, total)
 375                __field(u64, multicast)
 376        ),
 377
 378        TP_fast_assign(
 379                LOCAL_ASSIGN;
 380                __entry->changed = changed_flags;
 381                __entry->total = *total_flags;
 382                __entry->multicast = multicast;
 383        ),
 384
 385        TP_printk(
 386                LOCAL_PR_FMT " changed:%#x total:%#x",
 387                LOCAL_PR_ARG, __entry->changed, __entry->total
 388        )
 389);
 390
 391TRACE_EVENT(drv_set_tim,
 392        TP_PROTO(struct ieee80211_local *local,
 393                 struct ieee80211_sta *sta, bool set),
 394
 395        TP_ARGS(local, sta, set),
 396
 397        TP_STRUCT__entry(
 398                LOCAL_ENTRY
 399                STA_ENTRY
 400                __field(bool, set)
 401        ),
 402
 403        TP_fast_assign(
 404                LOCAL_ASSIGN;
 405                STA_ASSIGN;
 406                __entry->set = set;
 407        ),
 408
 409        TP_printk(
 410                LOCAL_PR_FMT STA_PR_FMT " set:%d",
 411                LOCAL_PR_ARG, STA_PR_FMT, __entry->set
 412        )
 413);
 414
 415TRACE_EVENT(drv_set_key,
 416        TP_PROTO(struct ieee80211_local *local,
 417                 enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata,
 418                 struct ieee80211_sta *sta,
 419                 struct ieee80211_key_conf *key),
 420
 421        TP_ARGS(local, cmd, sdata, sta, key),
 422
 423        TP_STRUCT__entry(
 424                LOCAL_ENTRY
 425                VIF_ENTRY
 426                STA_ENTRY
 427                __field(u32, cipher)
 428                __field(u8, hw_key_idx)
 429                __field(u8, flags)
 430                __field(s8, keyidx)
 431        ),
 432
 433        TP_fast_assign(
 434                LOCAL_ASSIGN;
 435                VIF_ASSIGN;
 436                STA_ASSIGN;
 437                __entry->cipher = key->cipher;
 438                __entry->flags = key->flags;
 439                __entry->keyidx = key->keyidx;
 440                __entry->hw_key_idx = key->hw_key_idx;
 441        ),
 442
 443        TP_printk(
 444                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
 445                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
 446        )
 447);
 448
 449TRACE_EVENT(drv_update_tkip_key,
 450        TP_PROTO(struct ieee80211_local *local,
 451                 struct ieee80211_sub_if_data *sdata,
 452                 struct ieee80211_key_conf *conf,
 453                 struct ieee80211_sta *sta, u32 iv32),
 454
 455        TP_ARGS(local, sdata, conf, sta, iv32),
 456
 457        TP_STRUCT__entry(
 458                LOCAL_ENTRY
 459                VIF_ENTRY
 460                STA_ENTRY
 461                __field(u32, iv32)
 462        ),
 463
 464        TP_fast_assign(
 465                LOCAL_ASSIGN;
 466                VIF_ASSIGN;
 467                STA_ASSIGN;
 468                __entry->iv32 = iv32;
 469        ),
 470
 471        TP_printk(
 472                LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x",
 473                LOCAL_PR_ARG,VIF_PR_ARG,STA_PR_ARG, __entry->iv32
 474        )
 475);
 476
 477DEFINE_EVENT(local_sdata_evt, drv_hw_scan,
 478        TP_PROTO(struct ieee80211_local *local,
 479                 struct ieee80211_sub_if_data *sdata),
 480        TP_ARGS(local, sdata)
 481);
 482
 483DEFINE_EVENT(local_sdata_evt, drv_cancel_hw_scan,
 484        TP_PROTO(struct ieee80211_local *local,
 485                 struct ieee80211_sub_if_data *sdata),
 486        TP_ARGS(local, sdata)
 487);
 488
 489DEFINE_EVENT(local_sdata_evt, drv_sched_scan_start,
 490        TP_PROTO(struct ieee80211_local *local,
 491                 struct ieee80211_sub_if_data *sdata),
 492        TP_ARGS(local, sdata)
 493);
 494
 495DEFINE_EVENT(local_sdata_evt, drv_sched_scan_stop,
 496        TP_PROTO(struct ieee80211_local *local,
 497                 struct ieee80211_sub_if_data *sdata),
 498        TP_ARGS(local, sdata)
 499);
 500
 501DEFINE_EVENT(local_only_evt, drv_sw_scan_start,
 502        TP_PROTO(struct ieee80211_local *local),
 503        TP_ARGS(local)
 504);
 505
 506DEFINE_EVENT(local_only_evt, drv_sw_scan_complete,
 507        TP_PROTO(struct ieee80211_local *local),
 508        TP_ARGS(local)
 509);
 510
 511TRACE_EVENT(drv_get_stats,
 512        TP_PROTO(struct ieee80211_local *local,
 513                 struct ieee80211_low_level_stats *stats,
 514                 int ret),
 515
 516        TP_ARGS(local, stats, ret),
 517
 518        TP_STRUCT__entry(
 519                LOCAL_ENTRY
 520                __field(int, ret)
 521                __field(unsigned int, ackfail)
 522                __field(unsigned int, rtsfail)
 523                __field(unsigned int, fcserr)
 524                __field(unsigned int, rtssucc)
 525        ),
 526
 527        TP_fast_assign(
 528                LOCAL_ASSIGN;
 529                __entry->ret = ret;
 530                __entry->ackfail = stats->dot11ACKFailureCount;
 531                __entry->rtsfail = stats->dot11RTSFailureCount;
 532                __entry->fcserr = stats->dot11FCSErrorCount;
 533                __entry->rtssucc = stats->dot11RTSSuccessCount;
 534        ),
 535
 536        TP_printk(
 537                LOCAL_PR_FMT " ret:%d",
 538                LOCAL_PR_ARG, __entry->ret
 539        )
 540);
 541
 542TRACE_EVENT(drv_get_tkip_seq,
 543        TP_PROTO(struct ieee80211_local *local,
 544                 u8 hw_key_idx, u32 *iv32, u16 *iv16),
 545
 546        TP_ARGS(local, hw_key_idx, iv32, iv16),
 547
 548        TP_STRUCT__entry(
 549                LOCAL_ENTRY
 550                __field(u8, hw_key_idx)
 551                __field(u32, iv32)
 552                __field(u16, iv16)
 553        ),
 554
 555        TP_fast_assign(
 556                LOCAL_ASSIGN;
 557                __entry->hw_key_idx = hw_key_idx;
 558                __entry->iv32 = *iv32;
 559                __entry->iv16 = *iv16;
 560        ),
 561
 562        TP_printk(
 563                LOCAL_PR_FMT, LOCAL_PR_ARG
 564        )
 565);
 566
 567DEFINE_EVENT(local_u32_evt, drv_set_frag_threshold,
 568        TP_PROTO(struct ieee80211_local *local, u32 value),
 569        TP_ARGS(local, value)
 570);
 571
 572DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold,
 573        TP_PROTO(struct ieee80211_local *local, u32 value),
 574        TP_ARGS(local, value)
 575);
 576
 577TRACE_EVENT(drv_set_coverage_class,
 578        TP_PROTO(struct ieee80211_local *local, u8 value),
 579
 580        TP_ARGS(local, value),
 581
 582        TP_STRUCT__entry(
 583                LOCAL_ENTRY
 584                __field(u8, value)
 585        ),
 586
 587        TP_fast_assign(
 588                LOCAL_ASSIGN;
 589                __entry->value = value;
 590        ),
 591
 592        TP_printk(
 593                LOCAL_PR_FMT " value:%d",
 594                LOCAL_PR_ARG, __entry->value
 595        )
 596);
 597
 598TRACE_EVENT(drv_sta_notify,
 599        TP_PROTO(struct ieee80211_local *local,
 600                 struct ieee80211_sub_if_data *sdata,
 601                 enum sta_notify_cmd cmd,
 602                 struct ieee80211_sta *sta),
 603
 604        TP_ARGS(local, sdata, cmd, sta),
 605
 606        TP_STRUCT__entry(
 607                LOCAL_ENTRY
 608                VIF_ENTRY
 609                STA_ENTRY
 610                __field(u32, cmd)
 611        ),
 612
 613        TP_fast_assign(
 614                LOCAL_ASSIGN;
 615                VIF_ASSIGN;
 616                STA_ASSIGN;
 617                __entry->cmd = cmd;
 618        ),
 619
 620        TP_printk(
 621                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " cmd:%d",
 622                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd
 623        )
 624);
 625
 626TRACE_EVENT(drv_sta_state,
 627        TP_PROTO(struct ieee80211_local *local,
 628                 struct ieee80211_sub_if_data *sdata,
 629                 struct ieee80211_sta *sta,
 630                 enum ieee80211_sta_state old_state,
 631                 enum ieee80211_sta_state new_state),
 632
 633        TP_ARGS(local, sdata, sta, old_state, new_state),
 634
 635        TP_STRUCT__entry(
 636                LOCAL_ENTRY
 637                VIF_ENTRY
 638                STA_ENTRY
 639                __field(u32, old_state)
 640                __field(u32, new_state)
 641        ),
 642
 643        TP_fast_assign(
 644                LOCAL_ASSIGN;
 645                VIF_ASSIGN;
 646                STA_ASSIGN;
 647                __entry->old_state = old_state;
 648                __entry->new_state = new_state;
 649        ),
 650
 651        TP_printk(
 652                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " state: %d->%d",
 653                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG,
 654                __entry->old_state, __entry->new_state
 655        )
 656);
 657
 658TRACE_EVENT(drv_sta_rc_update,
 659        TP_PROTO(struct ieee80211_local *local,
 660                 struct ieee80211_sub_if_data *sdata,
 661                 struct ieee80211_sta *sta,
 662                 u32 changed),
 663
 664        TP_ARGS(local, sdata, sta, changed),
 665
 666        TP_STRUCT__entry(
 667                LOCAL_ENTRY
 668                VIF_ENTRY
 669                STA_ENTRY
 670                __field(u32, changed)
 671        ),
 672
 673        TP_fast_assign(
 674                LOCAL_ASSIGN;
 675                VIF_ASSIGN;
 676                STA_ASSIGN;
 677                __entry->changed = changed;
 678        ),
 679
 680        TP_printk(
 681                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " changed: 0x%x",
 682                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->changed
 683        )
 684);
 685
 686TRACE_EVENT(drv_sta_add,
 687        TP_PROTO(struct ieee80211_local *local,
 688                 struct ieee80211_sub_if_data *sdata,
 689                 struct ieee80211_sta *sta),
 690
 691        TP_ARGS(local, sdata, sta),
 692
 693        TP_STRUCT__entry(
 694                LOCAL_ENTRY
 695                VIF_ENTRY
 696                STA_ENTRY
 697        ),
 698
 699        TP_fast_assign(
 700                LOCAL_ASSIGN;
 701                VIF_ASSIGN;
 702                STA_ASSIGN;
 703        ),
 704
 705        TP_printk(
 706                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
 707                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
 708        )
 709);
 710
 711TRACE_EVENT(drv_sta_remove,
 712        TP_PROTO(struct ieee80211_local *local,
 713                 struct ieee80211_sub_if_data *sdata,
 714                 struct ieee80211_sta *sta),
 715
 716        TP_ARGS(local, sdata, sta),
 717
 718        TP_STRUCT__entry(
 719                LOCAL_ENTRY
 720                VIF_ENTRY
 721                STA_ENTRY
 722        ),
 723
 724        TP_fast_assign(
 725                LOCAL_ASSIGN;
 726                VIF_ASSIGN;
 727                STA_ASSIGN;
 728        ),
 729
 730        TP_printk(
 731                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
 732                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
 733        )
 734);
 735
 736TRACE_EVENT(drv_conf_tx,
 737        TP_PROTO(struct ieee80211_local *local,
 738                 struct ieee80211_sub_if_data *sdata,
 739                 u16 ac, const struct ieee80211_tx_queue_params *params),
 740
 741        TP_ARGS(local, sdata, ac, params),
 742
 743        TP_STRUCT__entry(
 744                LOCAL_ENTRY
 745                VIF_ENTRY
 746                __field(u16, ac)
 747                __field(u16, txop)
 748                __field(u16, cw_min)
 749                __field(u16, cw_max)
 750                __field(u8, aifs)
 751                __field(bool, uapsd)
 752        ),
 753
 754        TP_fast_assign(
 755                LOCAL_ASSIGN;
 756                VIF_ASSIGN;
 757                __entry->ac = ac;
 758                __entry->txop = params->txop;
 759                __entry->cw_max = params->cw_max;
 760                __entry->cw_min = params->cw_min;
 761                __entry->aifs = params->aifs;
 762                __entry->uapsd = params->uapsd;
 763        ),
 764
 765        TP_printk(
 766                LOCAL_PR_FMT  VIF_PR_FMT  " AC:%d",
 767                LOCAL_PR_ARG, VIF_PR_ARG, __entry->ac
 768        )
 769);
 770
 771DEFINE_EVENT(local_sdata_evt, drv_get_tsf,
 772        TP_PROTO(struct ieee80211_local *local,
 773                 struct ieee80211_sub_if_data *sdata),
 774        TP_ARGS(local, sdata)
 775);
 776
 777TRACE_EVENT(drv_set_tsf,
 778        TP_PROTO(struct ieee80211_local *local,
 779                 struct ieee80211_sub_if_data *sdata,
 780                 u64 tsf),
 781
 782        TP_ARGS(local, sdata, tsf),
 783
 784        TP_STRUCT__entry(
 785                LOCAL_ENTRY
 786                VIF_ENTRY
 787                __field(u64, tsf)
 788        ),
 789
 790        TP_fast_assign(
 791                LOCAL_ASSIGN;
 792                VIF_ASSIGN;
 793                __entry->tsf = tsf;
 794        ),
 795
 796        TP_printk(
 797                LOCAL_PR_FMT  VIF_PR_FMT  " tsf:%llu",
 798                LOCAL_PR_ARG, VIF_PR_ARG, (unsigned long long)__entry->tsf
 799        )
 800);
 801
 802DEFINE_EVENT(local_sdata_evt, drv_reset_tsf,
 803        TP_PROTO(struct ieee80211_local *local,
 804                 struct ieee80211_sub_if_data *sdata),
 805        TP_ARGS(local, sdata)
 806);
 807
 808DEFINE_EVENT(local_only_evt, drv_tx_last_beacon,
 809        TP_PROTO(struct ieee80211_local *local),
 810        TP_ARGS(local)
 811);
 812
 813TRACE_EVENT(drv_ampdu_action,
 814        TP_PROTO(struct ieee80211_local *local,
 815                 struct ieee80211_sub_if_data *sdata,
 816                 enum ieee80211_ampdu_mlme_action action,
 817                 struct ieee80211_sta *sta, u16 tid,
 818                 u16 *ssn, u8 buf_size),
 819
 820        TP_ARGS(local, sdata, action, sta, tid, ssn, buf_size),
 821
 822        TP_STRUCT__entry(
 823                LOCAL_ENTRY
 824                STA_ENTRY
 825                __field(u32, action)
 826                __field(u16, tid)
 827                __field(u16, ssn)
 828                __field(u8, buf_size)
 829                VIF_ENTRY
 830        ),
 831
 832        TP_fast_assign(
 833                LOCAL_ASSIGN;
 834                VIF_ASSIGN;
 835                STA_ASSIGN;
 836                __entry->action = action;
 837                __entry->tid = tid;
 838                __entry->ssn = ssn ? *ssn : 0;
 839                __entry->buf_size = buf_size;
 840        ),
 841
 842        TP_printk(
 843                LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " action:%d tid:%d buf:%d",
 844                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->action,
 845                __entry->tid, __entry->buf_size
 846        )
 847);
 848
 849TRACE_EVENT(drv_get_survey,
 850        TP_PROTO(struct ieee80211_local *local, int idx,
 851                 struct survey_info *survey),
 852
 853        TP_ARGS(local, idx, survey),
 854
 855        TP_STRUCT__entry(
 856                LOCAL_ENTRY
 857                __field(int, idx)
 858        ),
 859
 860        TP_fast_assign(
 861                LOCAL_ASSIGN;
 862                __entry->idx = idx;
 863        ),
 864
 865        TP_printk(
 866                LOCAL_PR_FMT " idx:%d",
 867                LOCAL_PR_ARG, __entry->idx
 868        )
 869);
 870
 871TRACE_EVENT(drv_flush,
 872        TP_PROTO(struct ieee80211_local *local, bool drop),
 873
 874        TP_ARGS(local, drop),
 875
 876        TP_STRUCT__entry(
 877                LOCAL_ENTRY
 878                __field(bool, drop)
 879        ),
 880
 881        TP_fast_assign(
 882                LOCAL_ASSIGN;
 883                __entry->drop = drop;
 884        ),
 885
 886        TP_printk(
 887                LOCAL_PR_FMT " drop:%d",
 888                LOCAL_PR_ARG, __entry->drop
 889        )
 890);
 891
 892TRACE_EVENT(drv_channel_switch,
 893        TP_PROTO(struct ieee80211_local *local,
 894                 struct ieee80211_channel_switch *ch_switch),
 895
 896        TP_ARGS(local, ch_switch),
 897
 898        TP_STRUCT__entry(
 899                LOCAL_ENTRY
 900                __field(u64, timestamp)
 901                __field(bool, block_tx)
 902                __field(u16, freq)
 903                __field(u8, count)
 904        ),
 905
 906        TP_fast_assign(
 907                LOCAL_ASSIGN;
 908                __entry->timestamp = ch_switch->timestamp;
 909                __entry->block_tx = ch_switch->block_tx;
 910                __entry->freq = ch_switch->channel->center_freq;
 911                __entry->count = ch_switch->count;
 912        ),
 913
 914        TP_printk(
 915                LOCAL_PR_FMT " new freq:%u count:%d",
 916                LOCAL_PR_ARG, __entry->freq, __entry->count
 917        )
 918);
 919
 920TRACE_EVENT(drv_set_antenna,
 921        TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
 922
 923        TP_ARGS(local, tx_ant, rx_ant, ret),
 924
 925        TP_STRUCT__entry(
 926                LOCAL_ENTRY
 927                __field(u32, tx_ant)
 928                __field(u32, rx_ant)
 929                __field(int, ret)
 930        ),
 931
 932        TP_fast_assign(
 933                LOCAL_ASSIGN;
 934                __entry->tx_ant = tx_ant;
 935                __entry->rx_ant = rx_ant;
 936                __entry->ret = ret;
 937        ),
 938
 939        TP_printk(
 940                LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
 941                LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
 942        )
 943);
 944
 945TRACE_EVENT(drv_get_antenna,
 946        TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
 947
 948        TP_ARGS(local, tx_ant, rx_ant, ret),
 949
 950        TP_STRUCT__entry(
 951                LOCAL_ENTRY
 952                __field(u32, tx_ant)
 953                __field(u32, rx_ant)
 954                __field(int, ret)
 955        ),
 956
 957        TP_fast_assign(
 958                LOCAL_ASSIGN;
 959                __entry->tx_ant = tx_ant;
 960                __entry->rx_ant = rx_ant;
 961                __entry->ret = ret;
 962        ),
 963
 964        TP_printk(
 965                LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
 966                LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
 967        )
 968);
 969
 970TRACE_EVENT(drv_remain_on_channel,
 971        TP_PROTO(struct ieee80211_local *local, struct ieee80211_channel *chan,
 972                 enum nl80211_channel_type chantype, unsigned int duration),
 973
 974        TP_ARGS(local, chan, chantype, duration),
 975
 976        TP_STRUCT__entry(
 977                LOCAL_ENTRY
 978                __field(int, center_freq)
 979                __field(int, channel_type)
 980                __field(unsigned int, duration)
 981        ),
 982
 983        TP_fast_assign(
 984                LOCAL_ASSIGN;
 985                __entry->center_freq = chan->center_freq;
 986                __entry->channel_type = chantype;
 987                __entry->duration = duration;
 988        ),
 989
 990        TP_printk(
 991                LOCAL_PR_FMT " freq:%dMHz duration:%dms",
 992                LOCAL_PR_ARG, __entry->center_freq, __entry->duration
 993        )
 994);
 995
 996DEFINE_EVENT(local_only_evt, drv_cancel_remain_on_channel,
 997        TP_PROTO(struct ieee80211_local *local),
 998        TP_ARGS(local)
 999);
1000
1001TRACE_EVENT(drv_offchannel_tx,
1002        TP_PROTO(struct ieee80211_local *local, struct sk_buff *skb,
1003                 struct ieee80211_channel *chan,
1004                 enum nl80211_channel_type channel_type,
1005                 unsigned int wait),
1006
1007        TP_ARGS(local, skb, chan, channel_type, wait),
1008
1009        TP_STRUCT__entry(
1010                LOCAL_ENTRY
1011                __field(int, center_freq)
1012                __field(int, channel_type)
1013                __field(unsigned int, wait)
1014        ),
1015
1016        TP_fast_assign(
1017                LOCAL_ASSIGN;
1018                __entry->center_freq = chan->center_freq;
1019                __entry->channel_type = channel_type;
1020                __entry->wait = wait;
1021        ),
1022
1023        TP_printk(
1024                LOCAL_PR_FMT " freq:%dMHz, wait:%dms",
1025                LOCAL_PR_ARG, __entry->center_freq, __entry->wait
1026        )
1027);
1028
1029TRACE_EVENT(drv_set_ringparam,
1030        TP_PROTO(struct ieee80211_local *local, u32 tx, u32 rx),
1031
1032        TP_ARGS(local, tx, rx),
1033
1034        TP_STRUCT__entry(
1035                LOCAL_ENTRY
1036                __field(u32, tx)
1037                __field(u32, rx)
1038        ),
1039
1040        TP_fast_assign(
1041                LOCAL_ASSIGN;
1042                __entry->tx = tx;
1043                __entry->rx = rx;
1044        ),
1045
1046        TP_printk(
1047                LOCAL_PR_FMT " tx:%d rx %d",
1048                LOCAL_PR_ARG, __entry->tx, __entry->rx
1049        )
1050);
1051
1052TRACE_EVENT(drv_get_ringparam,
1053        TP_PROTO(struct ieee80211_local *local, u32 *tx, u32 *tx_max,
1054                 u32 *rx, u32 *rx_max),
1055
1056        TP_ARGS(local, tx, tx_max, rx, rx_max),
1057
1058        TP_STRUCT__entry(
1059                LOCAL_ENTRY
1060                __field(u32, tx)
1061                __field(u32, tx_max)
1062                __field(u32, rx)
1063                __field(u32, rx_max)
1064        ),
1065
1066        TP_fast_assign(
1067                LOCAL_ASSIGN;
1068                __entry->tx = *tx;
1069                __entry->tx_max = *tx_max;
1070                __entry->rx = *rx;
1071                __entry->rx_max = *rx_max;
1072        ),
1073
1074        TP_printk(
1075                LOCAL_PR_FMT " tx:%d tx_max %d rx %d rx_max %d",
1076                LOCAL_PR_ARG,
1077                __entry->tx, __entry->tx_max, __entry->rx, __entry->rx_max
1078        )
1079);
1080
1081DEFINE_EVENT(local_only_evt, drv_tx_frames_pending,
1082        TP_PROTO(struct ieee80211_local *local),
1083        TP_ARGS(local)
1084);
1085
1086DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait,
1087        TP_PROTO(struct ieee80211_local *local),
1088        TP_ARGS(local)
1089);
1090
1091TRACE_EVENT(drv_set_bitrate_mask,
1092        TP_PROTO(struct ieee80211_local *local,
1093                 struct ieee80211_sub_if_data *sdata,
1094                 const struct cfg80211_bitrate_mask *mask),
1095
1096        TP_ARGS(local, sdata, mask),
1097
1098        TP_STRUCT__entry(
1099                LOCAL_ENTRY
1100                VIF_ENTRY
1101                __field(u32, legacy_2g)
1102                __field(u32, legacy_5g)
1103        ),
1104
1105        TP_fast_assign(
1106                LOCAL_ASSIGN;
1107                VIF_ASSIGN;
1108                __entry->legacy_2g = mask->control[IEEE80211_BAND_2GHZ].legacy;
1109                __entry->legacy_5g = mask->control[IEEE80211_BAND_5GHZ].legacy;
1110        ),
1111
1112        TP_printk(
1113                LOCAL_PR_FMT  VIF_PR_FMT " 2G Mask:0x%x 5G Mask:0x%x",
1114                LOCAL_PR_ARG, VIF_PR_ARG, __entry->legacy_2g, __entry->legacy_5g
1115        )
1116);
1117
1118TRACE_EVENT(drv_set_rekey_data,
1119        TP_PROTO(struct ieee80211_local *local,
1120                 struct ieee80211_sub_if_data *sdata,
1121                 struct cfg80211_gtk_rekey_data *data),
1122
1123        TP_ARGS(local, sdata, data),
1124
1125        TP_STRUCT__entry(
1126                LOCAL_ENTRY
1127                VIF_ENTRY
1128                __array(u8, kek, NL80211_KEK_LEN)
1129                __array(u8, kck, NL80211_KCK_LEN)
1130                __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
1131        ),
1132
1133        TP_fast_assign(
1134                LOCAL_ASSIGN;
1135                VIF_ASSIGN;
1136                memcpy(__entry->kek, data->kek, NL80211_KEK_LEN);
1137                memcpy(__entry->kck, data->kck, NL80211_KCK_LEN);
1138                memcpy(__entry->replay_ctr, data->replay_ctr,
1139                       NL80211_REPLAY_CTR_LEN);
1140        ),
1141
1142        TP_printk(LOCAL_PR_FMT VIF_PR_FMT,
1143                  LOCAL_PR_ARG, VIF_PR_ARG)
1144);
1145
1146TRACE_EVENT(drv_rssi_callback,
1147        TP_PROTO(struct ieee80211_local *local,
1148                 enum ieee80211_rssi_event rssi_event),
1149
1150        TP_ARGS(local, rssi_event),
1151
1152        TP_STRUCT__entry(
1153                LOCAL_ENTRY
1154                __field(u32, rssi_event)
1155        ),
1156
1157        TP_fast_assign(
1158                LOCAL_ASSIGN;
1159                __entry->rssi_event = rssi_event;
1160        ),
1161
1162        TP_printk(
1163                LOCAL_PR_FMT " rssi_event:%d",
1164                LOCAL_PR_ARG, __entry->rssi_event
1165        )
1166);
1167
1168DECLARE_EVENT_CLASS(release_evt,
1169        TP_PROTO(struct ieee80211_local *local,
1170                 struct ieee80211_sta *sta,
1171                 u16 tids, int num_frames,
1172                 enum ieee80211_frame_release_type reason,
1173                 bool more_data),
1174
1175        TP_ARGS(local, sta, tids, num_frames, reason, more_data),
1176
1177        TP_STRUCT__entry(
1178                LOCAL_ENTRY
1179                STA_ENTRY
1180                __field(u16, tids)
1181                __field(int, num_frames)
1182                __field(int, reason)
1183                __field(bool, more_data)
1184        ),
1185
1186        TP_fast_assign(
1187                LOCAL_ASSIGN;
1188                STA_ASSIGN;
1189                __entry->tids = tids;
1190                __entry->num_frames = num_frames;
1191                __entry->reason = reason;
1192                __entry->more_data = more_data;
1193        ),
1194
1195        TP_printk(
1196                LOCAL_PR_FMT STA_PR_FMT
1197                " TIDs:0x%.4x frames:%d reason:%d more:%d",
1198                LOCAL_PR_ARG, STA_PR_ARG, __entry->tids, __entry->num_frames,
1199                __entry->reason, __entry->more_data
1200        )
1201);
1202
1203DEFINE_EVENT(release_evt, drv_release_buffered_frames,
1204        TP_PROTO(struct ieee80211_local *local,
1205                 struct ieee80211_sta *sta,
1206                 u16 tids, int num_frames,
1207                 enum ieee80211_frame_release_type reason,
1208                 bool more_data),
1209
1210        TP_ARGS(local, sta, tids, num_frames, reason, more_data)
1211);
1212
1213DEFINE_EVENT(release_evt, drv_allow_buffered_frames,
1214        TP_PROTO(struct ieee80211_local *local,
1215                 struct ieee80211_sta *sta,
1216                 u16 tids, int num_frames,
1217                 enum ieee80211_frame_release_type reason,
1218                 bool more_data),
1219
1220        TP_ARGS(local, sta, tids, num_frames, reason, more_data)
1221);
1222
1223TRACE_EVENT(drv_get_rssi,
1224        TP_PROTO(struct ieee80211_local *local, struct ieee80211_sta *sta,
1225                 s8 rssi, int ret),
1226
1227        TP_ARGS(local, sta, rssi, ret),
1228
1229        TP_STRUCT__entry(
1230                LOCAL_ENTRY
1231                STA_ENTRY
1232                __field(s8, rssi)
1233                __field(int, ret)
1234        ),
1235
1236        TP_fast_assign(
1237                LOCAL_ASSIGN;
1238                STA_ASSIGN;
1239                __entry->rssi = rssi;
1240                __entry->ret = ret;
1241        ),
1242
1243        TP_printk(
1244                LOCAL_PR_FMT STA_PR_FMT " rssi:%d ret:%d",
1245                LOCAL_PR_ARG, STA_PR_ARG, __entry->rssi, __entry->ret
1246        )
1247);
1248
1249DEFINE_EVENT(local_sdata_evt, drv_mgd_prepare_tx,
1250        TP_PROTO(struct ieee80211_local *local,
1251                 struct ieee80211_sub_if_data *sdata),
1252
1253        TP_ARGS(local, sdata)
1254);
1255
1256/*
1257 * Tracing for API calls that drivers call.
1258 */
1259
1260TRACE_EVENT(api_start_tx_ba_session,
1261        TP_PROTO(struct ieee80211_sta *sta, u16 tid),
1262
1263        TP_ARGS(sta, tid),
1264
1265        TP_STRUCT__entry(
1266                STA_ENTRY
1267                __field(u16, tid)
1268        ),
1269
1270        TP_fast_assign(
1271                STA_ASSIGN;
1272                __entry->tid = tid;
1273        ),
1274
1275        TP_printk(
1276                STA_PR_FMT " tid:%d",
1277                STA_PR_ARG, __entry->tid
1278        )
1279);
1280
1281TRACE_EVENT(api_start_tx_ba_cb,
1282        TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
1283
1284        TP_ARGS(sdata, ra, tid),
1285
1286        TP_STRUCT__entry(
1287                VIF_ENTRY
1288                __array(u8, ra, ETH_ALEN)
1289                __field(u16, tid)
1290        ),
1291
1292        TP_fast_assign(
1293                VIF_ASSIGN;
1294                memcpy(__entry->ra, ra, ETH_ALEN);
1295                __entry->tid = tid;
1296        ),
1297
1298        TP_printk(
1299                VIF_PR_FMT " ra:%pM tid:%d",
1300                VIF_PR_ARG, __entry->ra, __entry->tid
1301        )
1302);
1303
1304TRACE_EVENT(api_stop_tx_ba_session,
1305        TP_PROTO(struct ieee80211_sta *sta, u16 tid),
1306
1307        TP_ARGS(sta, tid),
1308
1309        TP_STRUCT__entry(
1310                STA_ENTRY
1311                __field(u16, tid)
1312        ),
1313
1314        TP_fast_assign(
1315                STA_ASSIGN;
1316                __entry->tid = tid;
1317        ),
1318
1319        TP_printk(
1320                STA_PR_FMT " tid:%d",
1321                STA_PR_ARG, __entry->tid
1322        )
1323);
1324
1325TRACE_EVENT(api_stop_tx_ba_cb,
1326        TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
1327
1328        TP_ARGS(sdata, ra, tid),
1329
1330        TP_STRUCT__entry(
1331                VIF_ENTRY
1332                __array(u8, ra, ETH_ALEN)
1333                __field(u16, tid)
1334        ),
1335
1336        TP_fast_assign(
1337                VIF_ASSIGN;
1338                memcpy(__entry->ra, ra, ETH_ALEN);
1339                __entry->tid = tid;
1340        ),
1341
1342        TP_printk(
1343                VIF_PR_FMT " ra:%pM tid:%d",
1344                VIF_PR_ARG, __entry->ra, __entry->tid
1345        )
1346);
1347
1348DEFINE_EVENT(local_only_evt, api_restart_hw,
1349        TP_PROTO(struct ieee80211_local *local),
1350        TP_ARGS(local)
1351);
1352
1353TRACE_EVENT(api_beacon_loss,
1354        TP_PROTO(struct ieee80211_sub_if_data *sdata),
1355
1356        TP_ARGS(sdata),
1357
1358        TP_STRUCT__entry(
1359                VIF_ENTRY
1360        ),
1361
1362        TP_fast_assign(
1363                VIF_ASSIGN;
1364        ),
1365
1366        TP_printk(
1367                VIF_PR_FMT,
1368                VIF_PR_ARG
1369        )
1370);
1371
1372TRACE_EVENT(api_connection_loss,
1373        TP_PROTO(struct ieee80211_sub_if_data *sdata),
1374
1375        TP_ARGS(sdata),
1376
1377        TP_STRUCT__entry(
1378                VIF_ENTRY
1379        ),
1380
1381        TP_fast_assign(
1382                VIF_ASSIGN;
1383        ),
1384
1385        TP_printk(
1386                VIF_PR_FMT,
1387                VIF_PR_ARG
1388        )
1389);
1390
1391TRACE_EVENT(api_cqm_rssi_notify,
1392        TP_PROTO(struct ieee80211_sub_if_data *sdata,
1393                 enum nl80211_cqm_rssi_threshold_event rssi_event),
1394
1395        TP_ARGS(sdata, rssi_event),
1396
1397        TP_STRUCT__entry(
1398                VIF_ENTRY
1399                __field(u32, rssi_event)
1400        ),
1401
1402        TP_fast_assign(
1403                VIF_ASSIGN;
1404                __entry->rssi_event = rssi_event;
1405        ),
1406
1407        TP_printk(
1408                VIF_PR_FMT " event:%d",
1409                VIF_PR_ARG, __entry->rssi_event
1410        )
1411);
1412
1413TRACE_EVENT(api_scan_completed,
1414        TP_PROTO(struct ieee80211_local *local, bool aborted),
1415
1416        TP_ARGS(local, aborted),
1417
1418        TP_STRUCT__entry(
1419                LOCAL_ENTRY
1420                __field(bool, aborted)
1421        ),
1422
1423        TP_fast_assign(
1424                LOCAL_ASSIGN;
1425                __entry->aborted = aborted;
1426        ),
1427
1428        TP_printk(
1429                LOCAL_PR_FMT " aborted:%d",
1430                LOCAL_PR_ARG, __entry->aborted
1431        )
1432);
1433
1434TRACE_EVENT(api_sched_scan_results,
1435        TP_PROTO(struct ieee80211_local *local),
1436
1437        TP_ARGS(local),
1438
1439        TP_STRUCT__entry(
1440                LOCAL_ENTRY
1441        ),
1442
1443        TP_fast_assign(
1444                LOCAL_ASSIGN;
1445        ),
1446
1447        TP_printk(
1448                LOCAL_PR_FMT, LOCAL_PR_ARG
1449        )
1450);
1451
1452TRACE_EVENT(api_sched_scan_stopped,
1453        TP_PROTO(struct ieee80211_local *local),
1454
1455        TP_ARGS(local),
1456
1457        TP_STRUCT__entry(
1458                LOCAL_ENTRY
1459        ),
1460
1461        TP_fast_assign(
1462                LOCAL_ASSIGN;
1463        ),
1464
1465        TP_printk(
1466                LOCAL_PR_FMT, LOCAL_PR_ARG
1467        )
1468);
1469
1470TRACE_EVENT(api_sta_block_awake,
1471        TP_PROTO(struct ieee80211_local *local,
1472                 struct ieee80211_sta *sta, bool block),
1473
1474        TP_ARGS(local, sta, block),
1475
1476        TP_STRUCT__entry(
1477                LOCAL_ENTRY
1478                STA_ENTRY
1479                __field(bool, block)
1480        ),
1481
1482        TP_fast_assign(
1483                LOCAL_ASSIGN;
1484                STA_ASSIGN;
1485                __entry->block = block;
1486        ),
1487
1488        TP_printk(
1489                LOCAL_PR_FMT STA_PR_FMT " block:%d",
1490                LOCAL_PR_ARG, STA_PR_FMT, __entry->block
1491        )
1492);
1493
1494TRACE_EVENT(api_chswitch_done,
1495        TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success),
1496
1497        TP_ARGS(sdata, success),
1498
1499        TP_STRUCT__entry(
1500                VIF_ENTRY
1501                __field(bool, success)
1502        ),
1503
1504        TP_fast_assign(
1505                VIF_ASSIGN;
1506                __entry->success = success;
1507        ),
1508
1509        TP_printk(
1510                VIF_PR_FMT " success=%d",
1511                VIF_PR_ARG, __entry->success
1512        )
1513);
1514
1515DEFINE_EVENT(local_only_evt, api_ready_on_channel,
1516        TP_PROTO(struct ieee80211_local *local),
1517        TP_ARGS(local)
1518);
1519
1520DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired,
1521        TP_PROTO(struct ieee80211_local *local),
1522        TP_ARGS(local)
1523);
1524
1525TRACE_EVENT(api_gtk_rekey_notify,
1526        TP_PROTO(struct ieee80211_sub_if_data *sdata,
1527                 const u8 *bssid, const u8 *replay_ctr),
1528
1529        TP_ARGS(sdata, bssid, replay_ctr),
1530
1531        TP_STRUCT__entry(
1532                VIF_ENTRY
1533                __array(u8, bssid, ETH_ALEN)
1534                __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN)
1535        ),
1536
1537        TP_fast_assign(
1538                VIF_ASSIGN;
1539                memcpy(__entry->bssid, bssid, ETH_ALEN);
1540                memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN);
1541        ),
1542
1543        TP_printk(VIF_PR_FMT, VIF_PR_ARG)
1544);
1545
1546TRACE_EVENT(api_enable_rssi_reports,
1547        TP_PROTO(struct ieee80211_sub_if_data *sdata,
1548                 int rssi_min_thold, int rssi_max_thold),
1549
1550        TP_ARGS(sdata, rssi_min_thold, rssi_max_thold),
1551
1552        TP_STRUCT__entry(
1553                VIF_ENTRY
1554                __field(int, rssi_min_thold)
1555                __field(int, rssi_max_thold)
1556        ),
1557
1558        TP_fast_assign(
1559                VIF_ASSIGN;
1560                __entry->rssi_min_thold = rssi_min_thold;
1561                __entry->rssi_max_thold = rssi_max_thold;
1562        ),
1563
1564        TP_printk(
1565                VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d",
1566                VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold
1567        )
1568);
1569
1570TRACE_EVENT(api_eosp,
1571        TP_PROTO(struct ieee80211_local *local,
1572                 struct ieee80211_sta *sta),
1573
1574        TP_ARGS(local, sta),
1575
1576        TP_STRUCT__entry(
1577                LOCAL_ENTRY
1578                STA_ENTRY
1579        ),
1580
1581        TP_fast_assign(
1582                LOCAL_ASSIGN;
1583                STA_ASSIGN;
1584        ),
1585
1586        TP_printk(
1587                LOCAL_PR_FMT STA_PR_FMT,
1588                LOCAL_PR_ARG, STA_PR_FMT
1589        )
1590);
1591
1592/*
1593 * Tracing for internal functions
1594 * (which may also be called in response to driver calls)
1595 */
1596
1597TRACE_EVENT(wake_queue,
1598        TP_PROTO(struct ieee80211_local *local, u16 queue,
1599                 enum queue_stop_reason reason),
1600
1601        TP_ARGS(local, queue, reason),
1602
1603        TP_STRUCT__entry(
1604                LOCAL_ENTRY
1605                __field(u16, queue)
1606                __field(u32, reason)
1607        ),
1608
1609        TP_fast_assign(
1610                LOCAL_ASSIGN;
1611                __entry->queue = queue;
1612                __entry->reason = reason;
1613        ),
1614
1615        TP_printk(
1616                LOCAL_PR_FMT " queue:%d, reason:%d",
1617                LOCAL_PR_ARG, __entry->queue, __entry->reason
1618        )
1619);
1620
1621TRACE_EVENT(stop_queue,
1622        TP_PROTO(struct ieee80211_local *local, u16 queue,
1623                 enum queue_stop_reason reason),
1624
1625        TP_ARGS(local, queue, reason),
1626
1627        TP_STRUCT__entry(
1628                LOCAL_ENTRY
1629                __field(u16, queue)
1630                __field(u32, reason)
1631        ),
1632
1633        TP_fast_assign(
1634                LOCAL_ASSIGN;
1635                __entry->queue = queue;
1636                __entry->reason = reason;
1637        ),
1638
1639        TP_printk(
1640                LOCAL_PR_FMT " queue:%d, reason:%d",
1641                LOCAL_PR_ARG, __entry->queue, __entry->reason
1642        )
1643);
1644
1645#ifdef CONFIG_MAC80211_MESSAGE_TRACING
1646#undef TRACE_SYSTEM
1647#define TRACE_SYSTEM mac80211_msg
1648
1649#define MAX_MSG_LEN     100
1650
1651DECLARE_EVENT_CLASS(mac80211_msg_event,
1652        TP_PROTO(struct va_format *vaf),
1653
1654        TP_ARGS(vaf),
1655
1656        TP_STRUCT__entry(
1657                __dynamic_array(char, msg, MAX_MSG_LEN)
1658        ),
1659
1660        TP_fast_assign(
1661                WARN_ON_ONCE(vsnprintf(__get_dynamic_array(msg),
1662                                       MAX_MSG_LEN, vaf->fmt,
1663                                       *vaf->va) >= MAX_MSG_LEN);
1664        ),
1665
1666        TP_printk("%s", __get_str(msg))
1667);
1668
1669DEFINE_EVENT(mac80211_msg_event, mac80211_info,
1670        TP_PROTO(struct va_format *vaf),
1671        TP_ARGS(vaf)
1672);
1673DEFINE_EVENT(mac80211_msg_event, mac80211_dbg,
1674        TP_PROTO(struct va_format *vaf),
1675        TP_ARGS(vaf)
1676);
1677DEFINE_EVENT(mac80211_msg_event, mac80211_err,
1678        TP_PROTO(struct va_format *vaf),
1679        TP_ARGS(vaf)
1680);
1681#endif
1682
1683#endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
1684
1685#undef TRACE_INCLUDE_PATH
1686#define TRACE_INCLUDE_PATH .
1687#undef TRACE_INCLUDE_FILE
1688#define TRACE_INCLUDE_FILE trace
1689#include <trace/define_trace.h>
1690
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.