linux/net/mac80211/driver-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#if !defined(CONFIG_MAC80211_DRIVER_API_TRACER) || defined(__CHECKER__)
   9#undef TRACE_EVENT
  10#define TRACE_EVENT(name, proto, ...) \
  11static inline void trace_ ## name(proto) {}
  12#endif
  13
  14#undef TRACE_SYSTEM
  15#define TRACE_SYSTEM mac80211
  16
  17#define MAXNAME         32
  18#define LOCAL_ENTRY     __array(char, wiphy_name, 32)
  19#define LOCAL_ASSIGN    strlcpy(__entry->wiphy_name, wiphy_name(local->hw.wiphy), MAXNAME)
  20#define LOCAL_PR_FMT    "%s"
  21#define LOCAL_PR_ARG    __entry->wiphy_name
  22
  23#define STA_ENTRY       __array(char, sta_addr, ETH_ALEN)
  24#define STA_ASSIGN      (sta ? memcpy(__entry->sta_addr, sta->addr, ETH_ALEN) : memset(__entry->sta_addr, 0, ETH_ALEN))
  25#define STA_PR_FMT      " sta:%pM"
  26#define STA_PR_ARG      __entry->sta_addr
  27
  28#define VIF_ENTRY       __field(enum nl80211_iftype, vif_type) __field(void *, sdata)   \
  29                        __field(bool, p2p)                                              \
  30                        __string(vif_name, sdata->dev ? sdata->dev->name : "<nodev>")
  31#define VIF_ASSIGN      __entry->vif_type = sdata->vif.type; __entry->sdata = sdata;    \
  32                        __entry->p2p = sdata->vif.p2p;                                  \
  33                        __assign_str(vif_name, sdata->dev ? sdata->dev->name : "<nodev>")
  34#define VIF_PR_FMT      " vif:%s(%d%s)"
  35#define VIF_PR_ARG      __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : ""
  36
  37/*
  38 * Tracing for driver callbacks.
  39 */
  40
  41TRACE_EVENT(drv_return_void,
  42        TP_PROTO(struct ieee80211_local *local),
  43        TP_ARGS(local),
  44        TP_STRUCT__entry(
  45                LOCAL_ENTRY
  46        ),
  47        TP_fast_assign(
  48                LOCAL_ASSIGN;
  49        ),
  50        TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG)
  51);
  52
  53TRACE_EVENT(drv_return_int,
  54        TP_PROTO(struct ieee80211_local *local, int ret),
  55        TP_ARGS(local, ret),
  56        TP_STRUCT__entry(
  57                LOCAL_ENTRY
  58                __field(int, ret)
  59        ),
  60        TP_fast_assign(
  61                LOCAL_ASSIGN;
  62                __entry->ret = ret;
  63        ),
  64        TP_printk(LOCAL_PR_FMT " - %d", LOCAL_PR_ARG, __entry->ret)
  65);
  66
  67TRACE_EVENT(drv_return_u64,
  68        TP_PROTO(struct ieee80211_local *local, u64 ret),
  69        TP_ARGS(local, ret),
  70        TP_STRUCT__entry(
  71                LOCAL_ENTRY
  72                __field(u64, ret)
  73        ),
  74        TP_fast_assign(
  75                LOCAL_ASSIGN;
  76                __entry->ret = ret;
  77        ),
  78        TP_printk(LOCAL_PR_FMT " - %llu", LOCAL_PR_ARG, __entry->ret)
  79);
  80
  81TRACE_EVENT(drv_start,
  82        TP_PROTO(struct ieee80211_local *local),
  83
  84        TP_ARGS(local),
  85
  86        TP_STRUCT__entry(
  87                LOCAL_ENTRY
  88        ),
  89
  90        TP_fast_assign(
  91                LOCAL_ASSIGN;
  92        ),
  93
  94        TP_printk(
  95                LOCAL_PR_FMT, LOCAL_PR_ARG
  96        )
  97);
  98
  99TRACE_EVENT(drv_stop,
 100        TP_PROTO(struct ieee80211_local *local),
 101
 102        TP_ARGS(local),
 103
 104        TP_STRUCT__entry(
 105                LOCAL_ENTRY
 106        ),
 107
 108        TP_fast_assign(
 109                LOCAL_ASSIGN;
 110        ),
 111
 112        TP_printk(
 113                LOCAL_PR_FMT, LOCAL_PR_ARG
 114        )
 115);
 116
 117TRACE_EVENT(drv_add_interface,
 118        TP_PROTO(struct ieee80211_local *local,
 119                 struct ieee80211_sub_if_data *sdata),
 120
 121        TP_ARGS(local, sdata),
 122
 123        TP_STRUCT__entry(
 124                LOCAL_ENTRY
 125                VIF_ENTRY
 126                __array(char, addr, 6)
 127        ),
 128
 129        TP_fast_assign(
 130                LOCAL_ASSIGN;
 131                VIF_ASSIGN;
 132                memcpy(__entry->addr, sdata->vif.addr, 6);
 133        ),
 134
 135        TP_printk(
 136                LOCAL_PR_FMT  VIF_PR_FMT " addr:%pM",
 137                LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr
 138        )
 139);
 140
 141TRACE_EVENT(drv_change_interface,
 142        TP_PROTO(struct ieee80211_local *local,
 143                 struct ieee80211_sub_if_data *sdata,
 144                 enum nl80211_iftype type, bool p2p),
 145
 146        TP_ARGS(local, sdata, type, p2p),
 147
 148        TP_STRUCT__entry(
 149                LOCAL_ENTRY
 150                VIF_ENTRY
 151                __field(u32, new_type)
 152                __field(bool, new_p2p)
 153        ),
 154
 155        TP_fast_assign(
 156                LOCAL_ASSIGN;
 157                VIF_ASSIGN;
 158                __entry->new_type = type;
 159                __entry->new_p2p = p2p;
 160        ),
 161
 162        TP_printk(
 163                LOCAL_PR_FMT  VIF_PR_FMT " new type:%d%s",
 164                LOCAL_PR_ARG, VIF_PR_ARG, __entry->new_type,
 165                __entry->new_p2p ? "/p2p" : ""
 166        )
 167);
 168
 169TRACE_EVENT(drv_remove_interface,
 170        TP_PROTO(struct ieee80211_local *local, struct ieee80211_sub_if_data *sdata),
 171
 172        TP_ARGS(local, sdata),
 173
 174        TP_STRUCT__entry(
 175                LOCAL_ENTRY
 176                VIF_ENTRY
 177                __array(char, addr, 6)
 178        ),
 179
 180        TP_fast_assign(
 181                LOCAL_ASSIGN;
 182                VIF_ASSIGN;
 183                memcpy(__entry->addr, sdata->vif.addr, 6);
 184        ),
 185
 186        TP_printk(
 187                LOCAL_PR_FMT  VIF_PR_FMT " addr:%pM",
 188                LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr
 189        )
 190);
 191
 192TRACE_EVENT(drv_config,
 193        TP_PROTO(struct ieee80211_local *local,
 194                 u32 changed),
 195
 196        TP_ARGS(local, changed),
 197
 198        TP_STRUCT__entry(
 199                LOCAL_ENTRY
 200                __field(u32, changed)
 201                __field(u32, flags)
 202                __field(int, power_level)
 203                __field(int, dynamic_ps_timeout)
 204                __field(int, max_sleep_period)
 205                __field(u16, listen_interval)
 206                __field(u8, long_frame_max_tx_count)
 207                __field(u8, short_frame_max_tx_count)
 208                __field(int, center_freq)
 209                __field(int, channel_type)
 210                __field(int, smps)
 211        ),
 212
 213        TP_fast_assign(
 214                LOCAL_ASSIGN;
 215                __entry->changed = changed;
 216                __entry->flags = local->hw.conf.flags;
 217                __entry->power_level = local->hw.conf.power_level;
 218                __entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout;
 219                __entry->max_sleep_period = local->hw.conf.max_sleep_period;
 220                __entry->listen_interval = local->hw.conf.listen_interval;
 221                __entry->long_frame_max_tx_count = local->hw.conf.long_frame_max_tx_count;
 222                __entry->short_frame_max_tx_count = local->hw.conf.short_frame_max_tx_count;
 223                __entry->center_freq = local->hw.conf.channel->center_freq;
 224                __entry->channel_type = local->hw.conf.channel_type;
 225                __entry->smps = local->hw.conf.smps_mode;
 226        ),
 227
 228        TP_printk(
 229                LOCAL_PR_FMT " ch:%#x freq:%d",
 230                LOCAL_PR_ARG, __entry->changed, __entry->center_freq
 231        )
 232);
 233
 234TRACE_EVENT(drv_bss_info_changed,
 235        TP_PROTO(struct ieee80211_local *local,
 236                 struct ieee80211_sub_if_data *sdata,
 237                 struct ieee80211_bss_conf *info,
 238                 u32 changed),
 239
 240        TP_ARGS(local, sdata, info, changed),
 241
 242        TP_STRUCT__entry(
 243                LOCAL_ENTRY
 244                VIF_ENTRY
 245                __field(bool, assoc)
 246                __field(u16, aid)
 247                __field(bool, cts)
 248                __field(bool, shortpre)
 249                __field(bool, shortslot)
 250                __field(u8, dtimper)
 251                __field(u16, bcnint)
 252                __field(u16, assoc_cap)
 253                __field(u64, timestamp)
 254                __field(u32, basic_rates)
 255                __field(u32, changed)
 256                __field(bool, enable_beacon)
 257                __field(u16, ht_operation_mode)
 258        ),
 259
 260        TP_fast_assign(
 261                LOCAL_ASSIGN;
 262                VIF_ASSIGN;
 263                __entry->changed = changed;
 264                __entry->aid = info->aid;
 265                __entry->assoc = info->assoc;
 266                __entry->shortpre = info->use_short_preamble;
 267                __entry->cts = info->use_cts_prot;
 268                __entry->shortslot = info->use_short_slot;
 269                __entry->dtimper = info->dtim_period;
 270                __entry->bcnint = info->beacon_int;
 271                __entry->assoc_cap = info->assoc_capability;
 272                __entry->timestamp = info->timestamp;
 273                __entry->basic_rates = info->basic_rates;
 274                __entry->enable_beacon = info->enable_beacon;
 275                __entry->ht_operation_mode = info->ht_operation_mode;
 276        ),
 277
 278        TP_printk(
 279                LOCAL_PR_FMT  VIF_PR_FMT " changed:%#x",
 280                LOCAL_PR_ARG, VIF_PR_ARG, __entry->changed
 281        )
 282);
 283
 284TRACE_EVENT(drv_prepare_multicast,
 285        TP_PROTO(struct ieee80211_local *local, int mc_count),
 286
 287        TP_ARGS(local, mc_count),
 288
 289        TP_STRUCT__entry(
 290                LOCAL_ENTRY
 291                __field(int, mc_count)
 292        ),
 293
 294        TP_fast_assign(
 295                LOCAL_ASSIGN;
 296                __entry->mc_count = mc_count;
 297        ),
 298
 299        TP_printk(
 300                LOCAL_PR_FMT " prepare mc (%d)",
 301                LOCAL_PR_ARG, __entry->mc_count
 302        )
 303);
 304
 305TRACE_EVENT(drv_configure_filter,
 306        TP_PROTO(struct ieee80211_local *local,
 307                 unsigned int changed_flags,
 308                 unsigned int *total_flags,
 309                 u64 multicast),
 310
 311        TP_ARGS(local, changed_flags, total_flags, multicast),
 312
 313        TP_STRUCT__entry(
 314                LOCAL_ENTRY
 315                __field(unsigned int, changed)
 316                __field(unsigned int, total)
 317                __field(u64, multicast)
 318        ),
 319
 320        TP_fast_assign(
 321                LOCAL_ASSIGN;
 322                __entry->changed = changed_flags;
 323                __entry->total = *total_flags;
 324                __entry->multicast = multicast;
 325        ),
 326
 327        TP_printk(
 328                LOCAL_PR_FMT " changed:%#x total:%#x",
 329                LOCAL_PR_ARG, __entry->changed, __entry->total
 330        )
 331);
 332
 333TRACE_EVENT(drv_set_tim,
 334        TP_PROTO(struct ieee80211_local *local,
 335                 struct ieee80211_sta *sta, bool set),
 336
 337        TP_ARGS(local, sta, set),
 338
 339        TP_STRUCT__entry(
 340                LOCAL_ENTRY
 341                STA_ENTRY
 342                __field(bool, set)
 343        ),
 344
 345        TP_fast_assign(
 346                LOCAL_ASSIGN;
 347                STA_ASSIGN;
 348                __entry->set = set;
 349        ),
 350
 351        TP_printk(
 352                LOCAL_PR_FMT STA_PR_FMT " set:%d",
 353                LOCAL_PR_ARG, STA_PR_FMT, __entry->set
 354        )
 355);
 356
 357TRACE_EVENT(drv_set_key,
 358        TP_PROTO(struct ieee80211_local *local,
 359                 enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata,
 360                 struct ieee80211_sta *sta,
 361                 struct ieee80211_key_conf *key),
 362
 363        TP_ARGS(local, cmd, sdata, sta, key),
 364
 365        TP_STRUCT__entry(
 366                LOCAL_ENTRY
 367                VIF_ENTRY
 368                STA_ENTRY
 369                __field(u32, cipher)
 370                __field(u8, hw_key_idx)
 371                __field(u8, flags)
 372                __field(s8, keyidx)
 373        ),
 374
 375        TP_fast_assign(
 376                LOCAL_ASSIGN;
 377                VIF_ASSIGN;
 378                STA_ASSIGN;
 379                __entry->cipher = key->cipher;
 380                __entry->flags = key->flags;
 381                __entry->keyidx = key->keyidx;
 382                __entry->hw_key_idx = key->hw_key_idx;
 383        ),
 384
 385        TP_printk(
 386                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
 387                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
 388        )
 389);
 390
 391TRACE_EVENT(drv_update_tkip_key,
 392        TP_PROTO(struct ieee80211_local *local,
 393                 struct ieee80211_sub_if_data *sdata,
 394                 struct ieee80211_key_conf *conf,
 395                 struct ieee80211_sta *sta, u32 iv32),
 396
 397        TP_ARGS(local, sdata, conf, sta, iv32),
 398
 399        TP_STRUCT__entry(
 400                LOCAL_ENTRY
 401                VIF_ENTRY
 402                STA_ENTRY
 403                __field(u32, iv32)
 404        ),
 405
 406        TP_fast_assign(
 407                LOCAL_ASSIGN;
 408                VIF_ASSIGN;
 409                STA_ASSIGN;
 410                __entry->iv32 = iv32;
 411        ),
 412
 413        TP_printk(
 414                LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x",
 415                LOCAL_PR_ARG,VIF_PR_ARG,STA_PR_ARG, __entry->iv32
 416        )
 417);
 418
 419TRACE_EVENT(drv_hw_scan,
 420        TP_PROTO(struct ieee80211_local *local,
 421                 struct ieee80211_sub_if_data *sdata,
 422                 struct cfg80211_scan_request *req),
 423
 424        TP_ARGS(local, sdata, req),
 425
 426        TP_STRUCT__entry(
 427                LOCAL_ENTRY
 428                VIF_ENTRY
 429        ),
 430
 431        TP_fast_assign(
 432                LOCAL_ASSIGN;
 433                VIF_ASSIGN;
 434        ),
 435
 436        TP_printk(
 437                LOCAL_PR_FMT VIF_PR_FMT,
 438                LOCAL_PR_ARG,VIF_PR_ARG
 439        )
 440);
 441
 442TRACE_EVENT(drv_sw_scan_start,
 443        TP_PROTO(struct ieee80211_local *local),
 444
 445        TP_ARGS(local),
 446
 447        TP_STRUCT__entry(
 448                LOCAL_ENTRY
 449        ),
 450
 451        TP_fast_assign(
 452                LOCAL_ASSIGN;
 453        ),
 454
 455        TP_printk(
 456                LOCAL_PR_FMT, LOCAL_PR_ARG
 457        )
 458);
 459
 460TRACE_EVENT(drv_sw_scan_complete,
 461        TP_PROTO(struct ieee80211_local *local),
 462
 463        TP_ARGS(local),
 464
 465        TP_STRUCT__entry(
 466                LOCAL_ENTRY
 467        ),
 468
 469        TP_fast_assign(
 470                LOCAL_ASSIGN;
 471        ),
 472
 473        TP_printk(
 474                LOCAL_PR_FMT, LOCAL_PR_ARG
 475        )
 476);
 477
 478TRACE_EVENT(drv_get_stats,
 479        TP_PROTO(struct ieee80211_local *local,
 480                 struct ieee80211_low_level_stats *stats,
 481                 int ret),
 482
 483        TP_ARGS(local, stats, ret),
 484
 485        TP_STRUCT__entry(
 486                LOCAL_ENTRY
 487                __field(int, ret)
 488                __field(unsigned int, ackfail)
 489                __field(unsigned int, rtsfail)
 490                __field(unsigned int, fcserr)
 491                __field(unsigned int, rtssucc)
 492        ),
 493
 494        TP_fast_assign(
 495                LOCAL_ASSIGN;
 496                __entry->ret = ret;
 497                __entry->ackfail = stats->dot11ACKFailureCount;
 498                __entry->rtsfail = stats->dot11RTSFailureCount;
 499                __entry->fcserr = stats->dot11FCSErrorCount;
 500                __entry->rtssucc = stats->dot11RTSSuccessCount;
 501        ),
 502
 503        TP_printk(
 504                LOCAL_PR_FMT " ret:%d",
 505                LOCAL_PR_ARG, __entry->ret
 506        )
 507);
 508
 509TRACE_EVENT(drv_get_tkip_seq,
 510        TP_PROTO(struct ieee80211_local *local,
 511                 u8 hw_key_idx, u32 *iv32, u16 *iv16),
 512
 513        TP_ARGS(local, hw_key_idx, iv32, iv16),
 514
 515        TP_STRUCT__entry(
 516                LOCAL_ENTRY
 517                __field(u8, hw_key_idx)
 518                __field(u32, iv32)
 519                __field(u16, iv16)
 520        ),
 521
 522        TP_fast_assign(
 523                LOCAL_ASSIGN;
 524                __entry->hw_key_idx = hw_key_idx;
 525                __entry->iv32 = *iv32;
 526                __entry->iv16 = *iv16;
 527        ),
 528
 529        TP_printk(
 530                LOCAL_PR_FMT, LOCAL_PR_ARG
 531        )
 532);
 533
 534TRACE_EVENT(drv_set_frag_threshold,
 535        TP_PROTO(struct ieee80211_local *local, u32 value),
 536
 537        TP_ARGS(local, value),
 538
 539        TP_STRUCT__entry(
 540                LOCAL_ENTRY
 541                __field(u32, value)
 542        ),
 543
 544        TP_fast_assign(
 545                LOCAL_ASSIGN;
 546                __entry->value = value;
 547        ),
 548
 549        TP_printk(
 550                LOCAL_PR_FMT " value:%d",
 551                LOCAL_PR_ARG, __entry->value
 552        )
 553);
 554
 555TRACE_EVENT(drv_set_rts_threshold,
 556        TP_PROTO(struct ieee80211_local *local, u32 value),
 557
 558        TP_ARGS(local, value),
 559
 560        TP_STRUCT__entry(
 561                LOCAL_ENTRY
 562                __field(u32, value)
 563        ),
 564
 565        TP_fast_assign(
 566                LOCAL_ASSIGN;
 567                __entry->value = value;
 568        ),
 569
 570        TP_printk(
 571                LOCAL_PR_FMT " value:%d",
 572                LOCAL_PR_ARG, __entry->value
 573        )
 574);
 575
 576TRACE_EVENT(drv_set_coverage_class,
 577        TP_PROTO(struct ieee80211_local *local, u8 value),
 578
 579        TP_ARGS(local, value),
 580
 581        TP_STRUCT__entry(
 582                LOCAL_ENTRY
 583                __field(u8, value)
 584        ),
 585
 586        TP_fast_assign(
 587                LOCAL_ASSIGN;
 588                __entry->value = value;
 589        ),
 590
 591        TP_printk(
 592                LOCAL_PR_FMT " value:%d",
 593                LOCAL_PR_ARG, __entry->value
 594        )
 595);
 596
 597TRACE_EVENT(drv_sta_notify,
 598        TP_PROTO(struct ieee80211_local *local,
 599                 struct ieee80211_sub_if_data *sdata,
 600                 enum sta_notify_cmd cmd,
 601                 struct ieee80211_sta *sta),
 602
 603        TP_ARGS(local, sdata, cmd, sta),
 604
 605        TP_STRUCT__entry(
 606                LOCAL_ENTRY
 607                VIF_ENTRY
 608                STA_ENTRY
 609                __field(u32, cmd)
 610        ),
 611
 612        TP_fast_assign(
 613                LOCAL_ASSIGN;
 614                VIF_ASSIGN;
 615                STA_ASSIGN;
 616                __entry->cmd = cmd;
 617        ),
 618
 619        TP_printk(
 620                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT " cmd:%d",
 621                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd
 622        )
 623);
 624
 625TRACE_EVENT(drv_sta_add,
 626        TP_PROTO(struct ieee80211_local *local,
 627                 struct ieee80211_sub_if_data *sdata,
 628                 struct ieee80211_sta *sta),
 629
 630        TP_ARGS(local, sdata, sta),
 631
 632        TP_STRUCT__entry(
 633                LOCAL_ENTRY
 634                VIF_ENTRY
 635                STA_ENTRY
 636        ),
 637
 638        TP_fast_assign(
 639                LOCAL_ASSIGN;
 640                VIF_ASSIGN;
 641                STA_ASSIGN;
 642        ),
 643
 644        TP_printk(
 645                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
 646                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
 647        )
 648);
 649
 650TRACE_EVENT(drv_sta_remove,
 651        TP_PROTO(struct ieee80211_local *local,
 652                 struct ieee80211_sub_if_data *sdata,
 653                 struct ieee80211_sta *sta),
 654
 655        TP_ARGS(local, sdata, sta),
 656
 657        TP_STRUCT__entry(
 658                LOCAL_ENTRY
 659                VIF_ENTRY
 660                STA_ENTRY
 661        ),
 662
 663        TP_fast_assign(
 664                LOCAL_ASSIGN;
 665                VIF_ASSIGN;
 666                STA_ASSIGN;
 667        ),
 668
 669        TP_printk(
 670                LOCAL_PR_FMT  VIF_PR_FMT  STA_PR_FMT,
 671                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG
 672        )
 673);
 674
 675TRACE_EVENT(drv_conf_tx,
 676        TP_PROTO(struct ieee80211_local *local, u16 queue,
 677                 const struct ieee80211_tx_queue_params *params),
 678
 679        TP_ARGS(local, queue, params),
 680
 681        TP_STRUCT__entry(
 682                LOCAL_ENTRY
 683                __field(u16, queue)
 684                __field(u16, txop)
 685                __field(u16, cw_min)
 686                __field(u16, cw_max)
 687                __field(u8, aifs)
 688        ),
 689
 690        TP_fast_assign(
 691                LOCAL_ASSIGN;
 692                __entry->queue = queue;
 693                __entry->txop = params->txop;
 694                __entry->cw_max = params->cw_max;
 695                __entry->cw_min = params->cw_min;
 696                __entry->aifs = params->aifs;
 697        ),
 698
 699        TP_printk(
 700                LOCAL_PR_FMT " queue:%d",
 701                LOCAL_PR_ARG, __entry->queue
 702        )
 703);
 704
 705TRACE_EVENT(drv_get_tsf,
 706        TP_PROTO(struct ieee80211_local *local),
 707
 708        TP_ARGS(local),
 709
 710        TP_STRUCT__entry(
 711                LOCAL_ENTRY
 712        ),
 713
 714        TP_fast_assign(
 715                LOCAL_ASSIGN;
 716        ),
 717
 718        TP_printk(
 719                LOCAL_PR_FMT,
 720                LOCAL_PR_ARG
 721        )
 722);
 723
 724TRACE_EVENT(drv_set_tsf,
 725        TP_PROTO(struct ieee80211_local *local, u64 tsf),
 726
 727        TP_ARGS(local, tsf),
 728
 729        TP_STRUCT__entry(
 730                LOCAL_ENTRY
 731                __field(u64, tsf)
 732        ),
 733
 734        TP_fast_assign(
 735                LOCAL_ASSIGN;
 736                __entry->tsf = tsf;
 737        ),
 738
 739        TP_printk(
 740                LOCAL_PR_FMT " tsf:%llu",
 741                LOCAL_PR_ARG, (unsigned long long)__entry->tsf
 742        )
 743);
 744
 745TRACE_EVENT(drv_reset_tsf,
 746        TP_PROTO(struct ieee80211_local *local),
 747
 748        TP_ARGS(local),
 749
 750        TP_STRUCT__entry(
 751                LOCAL_ENTRY
 752        ),
 753
 754        TP_fast_assign(
 755                LOCAL_ASSIGN;
 756        ),
 757
 758        TP_printk(
 759                LOCAL_PR_FMT, LOCAL_PR_ARG
 760        )
 761);
 762
 763TRACE_EVENT(drv_tx_last_beacon,
 764        TP_PROTO(struct ieee80211_local *local),
 765
 766        TP_ARGS(local),
 767
 768        TP_STRUCT__entry(
 769                LOCAL_ENTRY
 770        ),
 771
 772        TP_fast_assign(
 773                LOCAL_ASSIGN;
 774        ),
 775
 776        TP_printk(
 777                LOCAL_PR_FMT,
 778                LOCAL_PR_ARG
 779        )
 780);
 781
 782TRACE_EVENT(drv_ampdu_action,
 783        TP_PROTO(struct ieee80211_local *local,
 784                 struct ieee80211_sub_if_data *sdata,
 785                 enum ieee80211_ampdu_mlme_action action,
 786                 struct ieee80211_sta *sta, u16 tid,
 787                 u16 *ssn),
 788
 789        TP_ARGS(local, sdata, action, sta, tid, ssn),
 790
 791        TP_STRUCT__entry(
 792                LOCAL_ENTRY
 793                STA_ENTRY
 794                __field(u32, action)
 795                __field(u16, tid)
 796                __field(u16, ssn)
 797                VIF_ENTRY
 798        ),
 799
 800        TP_fast_assign(
 801                LOCAL_ASSIGN;
 802                VIF_ASSIGN;
 803                STA_ASSIGN;
 804                __entry->action = action;
 805                __entry->tid = tid;
 806                __entry->ssn = ssn ? *ssn : 0;
 807        ),
 808
 809        TP_printk(
 810                LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " action:%d tid:%d",
 811                LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->action, __entry->tid
 812        )
 813);
 814
 815TRACE_EVENT(drv_get_survey,
 816        TP_PROTO(struct ieee80211_local *local, int idx,
 817                 struct survey_info *survey),
 818
 819        TP_ARGS(local, idx, survey),
 820
 821        TP_STRUCT__entry(
 822                LOCAL_ENTRY
 823                __field(int, idx)
 824        ),
 825
 826        TP_fast_assign(
 827                LOCAL_ASSIGN;
 828                __entry->idx = idx;
 829        ),
 830
 831        TP_printk(
 832                LOCAL_PR_FMT " idx:%d",
 833                LOCAL_PR_ARG, __entry->idx
 834        )
 835);
 836
 837TRACE_EVENT(drv_flush,
 838        TP_PROTO(struct ieee80211_local *local, bool drop),
 839
 840        TP_ARGS(local, drop),
 841
 842        TP_STRUCT__entry(
 843                LOCAL_ENTRY
 844                __field(bool, drop)
 845        ),
 846
 847        TP_fast_assign(
 848                LOCAL_ASSIGN;
 849                __entry->drop = drop;
 850        ),
 851
 852        TP_printk(
 853                LOCAL_PR_FMT " drop:%d",
 854                LOCAL_PR_ARG, __entry->drop
 855        )
 856);
 857
 858TRACE_EVENT(drv_channel_switch,
 859        TP_PROTO(struct ieee80211_local *local,
 860                 struct ieee80211_channel_switch *ch_switch),
 861
 862        TP_ARGS(local, ch_switch),
 863
 864        TP_STRUCT__entry(
 865                LOCAL_ENTRY
 866                __field(u64, timestamp)
 867                __field(bool, block_tx)
 868                __field(u16, freq)
 869                __field(u8, count)
 870        ),
 871
 872        TP_fast_assign(
 873                LOCAL_ASSIGN;
 874                __entry->timestamp = ch_switch->timestamp;
 875                __entry->block_tx = ch_switch->block_tx;
 876                __entry->freq = ch_switch->channel->center_freq;
 877                __entry->count = ch_switch->count;
 878        ),
 879
 880        TP_printk(
 881                LOCAL_PR_FMT " new freq:%u count:%d",
 882                LOCAL_PR_ARG, __entry->freq, __entry->count
 883        )
 884);
 885
 886TRACE_EVENT(drv_set_antenna,
 887        TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
 888
 889        TP_ARGS(local, tx_ant, rx_ant, ret),
 890
 891        TP_STRUCT__entry(
 892                LOCAL_ENTRY
 893                __field(u32, tx_ant)
 894                __field(u32, rx_ant)
 895                __field(int, ret)
 896        ),
 897
 898        TP_fast_assign(
 899                LOCAL_ASSIGN;
 900                __entry->tx_ant = tx_ant;
 901                __entry->rx_ant = rx_ant;
 902                __entry->ret = ret;
 903        ),
 904
 905        TP_printk(
 906                LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
 907                LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
 908        )
 909);
 910
 911TRACE_EVENT(drv_get_antenna,
 912        TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret),
 913
 914        TP_ARGS(local, tx_ant, rx_ant, ret),
 915
 916        TP_STRUCT__entry(
 917                LOCAL_ENTRY
 918                __field(u32, tx_ant)
 919                __field(u32, rx_ant)
 920                __field(int, ret)
 921        ),
 922
 923        TP_fast_assign(
 924                LOCAL_ASSIGN;
 925                __entry->tx_ant = tx_ant;
 926                __entry->rx_ant = rx_ant;
 927                __entry->ret = ret;
 928        ),
 929
 930        TP_printk(
 931                LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d",
 932                LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret
 933        )
 934);
 935
 936TRACE_EVENT(drv_remain_on_channel,
 937        TP_PROTO(struct ieee80211_local *local, struct ieee80211_channel *chan,
 938                 enum nl80211_channel_type chantype, unsigned int duration),
 939
 940        TP_ARGS(local, chan, chantype, duration),
 941
 942        TP_STRUCT__entry(
 943                LOCAL_ENTRY
 944                __field(int, center_freq)
 945                __field(int, channel_type)
 946                __field(unsigned int, duration)
 947        ),
 948
 949        TP_fast_assign(
 950                LOCAL_ASSIGN;
 951                __entry->center_freq = chan->center_freq;
 952                __entry->channel_type = chantype;
 953                __entry->duration = duration;
 954        ),
 955
 956        TP_printk(
 957                LOCAL_PR_FMT " freq:%dMHz duration:%dms",
 958                LOCAL_PR_ARG, __entry->center_freq, __entry->duration
 959        )
 960);
 961
 962TRACE_EVENT(drv_cancel_remain_on_channel,
 963        TP_PROTO(struct ieee80211_local *local),
 964
 965        TP_ARGS(local),
 966
 967        TP_STRUCT__entry(
 968                LOCAL_ENTRY
 969        ),
 970
 971        TP_fast_assign(
 972                LOCAL_ASSIGN;
 973        ),
 974
 975        TP_printk(
 976                LOCAL_PR_FMT, LOCAL_PR_ARG
 977        )
 978);
 979
 980/*
 981 * Tracing for API calls that drivers call.
 982 */
 983
 984TRACE_EVENT(api_start_tx_ba_session,
 985        TP_PROTO(struct ieee80211_sta *sta, u16 tid),
 986
 987        TP_ARGS(sta, tid),
 988
 989        TP_STRUCT__entry(
 990                STA_ENTRY
 991                __field(u16, tid)
 992        ),
 993
 994        TP_fast_assign(
 995                STA_ASSIGN;
 996                __entry->tid = tid;
 997        ),
 998
 999        TP_printk(
1000                STA_PR_FMT " tid:%d",
1001                STA_PR_ARG, __entry->tid
1002        )
1003);
1004
1005TRACE_EVENT(api_start_tx_ba_cb,
1006        TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
1007
1008        TP_ARGS(sdata, ra, tid),
1009
1010        TP_STRUCT__entry(
1011                VIF_ENTRY
1012                __array(u8, ra, ETH_ALEN)
1013                __field(u16, tid)
1014        ),
1015
1016        TP_fast_assign(
1017                VIF_ASSIGN;
1018                memcpy(__entry->ra, ra, ETH_ALEN);
1019                __entry->tid = tid;
1020        ),
1021
1022        TP_printk(
1023                VIF_PR_FMT " ra:%pM tid:%d",
1024                VIF_PR_ARG, __entry->ra, __entry->tid
1025        )
1026);
1027
1028TRACE_EVENT(api_stop_tx_ba_session,
1029        TP_PROTO(struct ieee80211_sta *sta, u16 tid),
1030
1031        TP_ARGS(sta, tid),
1032
1033        TP_STRUCT__entry(
1034                STA_ENTRY
1035                __field(u16, tid)
1036        ),
1037
1038        TP_fast_assign(
1039                STA_ASSIGN;
1040                __entry->tid = tid;
1041        ),
1042
1043        TP_printk(
1044                STA_PR_FMT " tid:%d",
1045                STA_PR_ARG, __entry->tid
1046        )
1047);
1048
1049TRACE_EVENT(api_stop_tx_ba_cb,
1050        TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid),
1051
1052        TP_ARGS(sdata, ra, tid),
1053
1054        TP_STRUCT__entry(
1055                VIF_ENTRY
1056                __array(u8, ra, ETH_ALEN)
1057                __field(u16, tid)
1058        ),
1059
1060        TP_fast_assign(
1061                VIF_ASSIGN;
1062                memcpy(__entry->ra, ra, ETH_ALEN);
1063                __entry->tid = tid;
1064        ),
1065
1066        TP_printk(
1067                VIF_PR_FMT " ra:%pM tid:%d",
1068                VIF_PR_ARG, __entry->ra, __entry->tid
1069        )
1070);
1071
1072TRACE_EVENT(api_restart_hw,
1073        TP_PROTO(struct ieee80211_local *local),
1074
1075        TP_ARGS(local),
1076
1077        TP_STRUCT__entry(
1078                LOCAL_ENTRY
1079        ),
1080
1081        TP_fast_assign(
1082                LOCAL_ASSIGN;
1083        ),
1084
1085        TP_printk(
1086                LOCAL_PR_FMT,
1087                LOCAL_PR_ARG
1088        )
1089);
1090
1091TRACE_EVENT(api_beacon_loss,
1092        TP_PROTO(struct ieee80211_sub_if_data *sdata),
1093
1094        TP_ARGS(sdata),
1095
1096        TP_STRUCT__entry(
1097                VIF_ENTRY
1098        ),
1099
1100        TP_fast_assign(
1101                VIF_ASSIGN;
1102        ),
1103
1104        TP_printk(
1105                VIF_PR_FMT,
1106                VIF_PR_ARG
1107        )
1108);
1109
1110TRACE_EVENT(api_connection_loss,
1111        TP_PROTO(struct ieee80211_sub_if_data *sdata),
1112
1113        TP_ARGS(sdata),
1114
1115        TP_STRUCT__entry(
1116                VIF_ENTRY
1117        ),
1118
1119        TP_fast_assign(
1120                VIF_ASSIGN;
1121        ),
1122
1123        TP_printk(
1124                VIF_PR_FMT,
1125                VIF_PR_ARG
1126        )
1127);
1128
1129TRACE_EVENT(api_cqm_rssi_notify,
1130        TP_PROTO(struct ieee80211_sub_if_data *sdata,
1131                 enum nl80211_cqm_rssi_threshold_event rssi_event),
1132
1133        TP_ARGS(sdata, rssi_event),
1134
1135        TP_STRUCT__entry(
1136                VIF_ENTRY
1137                __field(u32, rssi_event)
1138        ),
1139
1140        TP_fast_assign(
1141                VIF_ASSIGN;
1142                __entry->rssi_event = rssi_event;
1143        ),
1144
1145        TP_printk(
1146                VIF_PR_FMT " event:%d",
1147                VIF_PR_ARG, __entry->rssi_event
1148        )
1149);
1150
1151TRACE_EVENT(api_scan_completed,
1152        TP_PROTO(struct ieee80211_local *local, bool aborted),
1153
1154        TP_ARGS(local, aborted),
1155
1156        TP_STRUCT__entry(
1157                LOCAL_ENTRY
1158                __field(bool, aborted)
1159        ),
1160
1161        TP_fast_assign(
1162                LOCAL_ASSIGN;
1163                __entry->aborted = aborted;
1164        ),
1165
1166        TP_printk(
1167                LOCAL_PR_FMT " aborted:%d",
1168                LOCAL_PR_ARG, __entry->aborted
1169        )
1170);
1171
1172TRACE_EVENT(api_sta_block_awake,
1173        TP_PROTO(struct ieee80211_local *local,
1174                 struct ieee80211_sta *sta, bool block),
1175
1176        TP_ARGS(local, sta, block),
1177
1178        TP_STRUCT__entry(
1179                LOCAL_ENTRY
1180                STA_ENTRY
1181                __field(bool, block)
1182        ),
1183
1184        TP_fast_assign(
1185                LOCAL_ASSIGN;
1186                STA_ASSIGN;
1187                __entry->block = block;
1188        ),
1189
1190        TP_printk(
1191                LOCAL_PR_FMT STA_PR_FMT " block:%d",
1192                LOCAL_PR_ARG, STA_PR_FMT, __entry->block
1193        )
1194);
1195
1196TRACE_EVENT(api_chswitch_done,
1197        TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success),
1198
1199        TP_ARGS(sdata, success),
1200
1201        TP_STRUCT__entry(
1202                VIF_ENTRY
1203                __field(bool, success)
1204        ),
1205
1206        TP_fast_assign(
1207                VIF_ASSIGN;
1208                __entry->success = success;
1209        ),
1210
1211        TP_printk(
1212                VIF_PR_FMT " success=%d",
1213                VIF_PR_ARG, __entry->success
1214        )
1215);
1216
1217TRACE_EVENT(api_ready_on_channel,
1218        TP_PROTO(struct ieee80211_local *local),
1219
1220        TP_ARGS(local),
1221
1222        TP_STRUCT__entry(
1223                LOCAL_ENTRY
1224        ),
1225
1226        TP_fast_assign(
1227                LOCAL_ASSIGN;
1228        ),
1229
1230        TP_printk(
1231                LOCAL_PR_FMT, LOCAL_PR_ARG
1232        )
1233);
1234
1235TRACE_EVENT(api_remain_on_channel_expired,
1236        TP_PROTO(struct ieee80211_local *local),
1237
1238        TP_ARGS(local),
1239
1240        TP_STRUCT__entry(
1241                LOCAL_ENTRY
1242        ),
1243
1244        TP_fast_assign(
1245                LOCAL_ASSIGN;
1246        ),
1247
1248        TP_printk(
1249                LOCAL_PR_FMT, LOCAL_PR_ARG
1250        )
1251);
1252
1253/*
1254 * Tracing for internal functions
1255 * (which may also be called in response to driver calls)
1256 */
1257
1258TRACE_EVENT(wake_queue,
1259        TP_PROTO(struct ieee80211_local *local, u16 queue,
1260                 enum queue_stop_reason reason),
1261
1262        TP_ARGS(local, queue, reason),
1263
1264        TP_STRUCT__entry(
1265                LOCAL_ENTRY
1266                __field(u16, queue)
1267                __field(u32, reason)
1268        ),
1269
1270        TP_fast_assign(
1271                LOCAL_ASSIGN;
1272                __entry->queue = queue;
1273                __entry->reason = reason;
1274        ),
1275
1276        TP_printk(
1277                LOCAL_PR_FMT " queue:%d, reason:%d",
1278                LOCAL_PR_ARG, __entry->queue, __entry->reason
1279        )
1280);
1281
1282TRACE_EVENT(stop_queue,
1283        TP_PROTO(struct ieee80211_local *local, u16 queue,
1284                 enum queue_stop_reason reason),
1285
1286        TP_ARGS(local, queue, reason),
1287
1288        TP_STRUCT__entry(
1289                LOCAL_ENTRY
1290                __field(u16, queue)
1291                __field(u32, reason)
1292        ),
1293
1294        TP_fast_assign(
1295                LOCAL_ASSIGN;
1296                __entry->queue = queue;
1297                __entry->reason = reason;
1298        ),
1299
1300        TP_printk(
1301                LOCAL_PR_FMT " queue:%d, reason:%d",
1302                LOCAL_PR_ARG, __entry->queue, __entry->reason
1303        )
1304);
1305#endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
1306
1307#undef TRACE_INCLUDE_PATH
1308#define TRACE_INCLUDE_PATH .
1309#undef TRACE_INCLUDE_FILE
1310#define TRACE_INCLUDE_FILE driver-trace
1311#include <trace/define_trace.h>
1312