1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Portions of this file 4 * Copyright(c) 2016-2017 Intel Deutschland GmbH 5 * Copyright (C) 2018 - 2019 Intel Corporation 6 */ 7 8 #if !defined(__MAC80211_DRIVER_TRACE) || defined(TRACE_HEADER_MULTI_READ) 9 #define __MAC80211_DRIVER_TRACE 10 11 #include <linux/tracepoint.h> 12 #include <net/mac80211.h> 13 #include "ieee80211_i.h" 14 15 #undef TRACE_SYSTEM 16 #define TRACE_SYSTEM mac80211 17 18 #define MAXNAME 32 19 #define LOCAL_ENTRY __array(char, wiphy_name, 32) 20 #define LOCAL_ASSIGN strlcpy(__entry->wiphy_name, wiphy_name(local->hw.wiphy), MAXNAME) 21 #define LOCAL_PR_FMT "%s" 22 #define LOCAL_PR_ARG __entry->wiphy_name 23 24 #define STA_ENTRY __array(char, sta_addr, ETH_ALEN) 25 #define STA_ASSIGN (sta ? memcpy(__entry->sta_addr, sta->addr, ETH_ALEN) : memset(__entry->sta_addr, 0, ETH_ALEN)) 26 #define STA_NAMED_ASSIGN(s) memcpy(__entry->sta_addr, (s)->addr, ETH_ALEN) 27 #define STA_PR_FMT " sta:%pM" 28 #define STA_PR_ARG __entry->sta_addr 29 30 #define VIF_ENTRY __field(enum nl80211_iftype, vif_type) __field(void *, sdata) \ 31 __field(bool, p2p) \ 32 __string(vif_name, sdata->name) 33 #define VIF_ASSIGN __entry->vif_type = sdata->vif.type; __entry->sdata = sdata; \ 34 __entry->p2p = sdata->vif.p2p; \ 35 __assign_str(vif_name, sdata->name) 36 #define VIF_PR_FMT " vif:%s(%d%s)" 37 #define VIF_PR_ARG __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : "" 38 39 #define CHANDEF_ENTRY __field(u32, control_freq) \ 40 __field(u32, chan_width) \ 41 __field(u32, center_freq1) \ 42 __field(u32, center_freq2) 43 #define CHANDEF_ASSIGN(c) \ 44 __entry->control_freq = (c) ? ((c)->chan ? (c)->chan->center_freq : 0) : 0; \ 45 __entry->chan_width = (c) ? (c)->width : 0; \ 46 __entry->center_freq1 = (c) ? (c)->center_freq1 : 0; \ 47 __entry->center_freq2 = (c) ? (c)->center_freq2 : 0; 48 #define CHANDEF_PR_FMT " control:%d MHz width:%d center: %d/%d MHz" 49 #define CHANDEF_PR_ARG __entry->control_freq, __entry->chan_width, \ 50 __entry->center_freq1, __entry->center_freq2 51 52 #define MIN_CHANDEF_ENTRY \ 53 __field(u32, min_control_freq) \ 54 __field(u32, min_chan_width) \ 55 __field(u32, min_center_freq1) \ 56 __field(u32, min_center_freq2) 57 58 #define MIN_CHANDEF_ASSIGN(c) \ 59 __entry->min_control_freq = (c)->chan ? (c)->chan->center_freq : 0; \ 60 __entry->min_chan_width = (c)->width; \ 61 __entry->min_center_freq1 = (c)->center_freq1; \ 62 __entry->min_center_freq2 = (c)->center_freq2; 63 #define MIN_CHANDEF_PR_FMT " min_control:%d MHz min_width:%d min_center: %d/%d MHz" 64 #define MIN_CHANDEF_PR_ARG __entry->min_control_freq, __entry->min_chan_width, \ 65 __entry->min_center_freq1, __entry->min_center_freq2 66 67 #define CHANCTX_ENTRY CHANDEF_ENTRY \ 68 MIN_CHANDEF_ENTRY \ 69 __field(u8, rx_chains_static) \ 70 __field(u8, rx_chains_dynamic) 71 #define CHANCTX_ASSIGN CHANDEF_ASSIGN(&ctx->conf.def) \ 72 MIN_CHANDEF_ASSIGN(&ctx->conf.min_def) \ 73 __entry->rx_chains_static = ctx->conf.rx_chains_static; \ 74 __entry->rx_chains_dynamic = ctx->conf.rx_chains_dynamic 75 #define CHANCTX_PR_FMT CHANDEF_PR_FMT MIN_CHANDEF_PR_FMT " chains:%d/%d" 76 #define CHANCTX_PR_ARG CHANDEF_PR_ARG, MIN_CHANDEF_PR_ARG, \ 77 __entry->rx_chains_static, __entry->rx_chains_dynamic 78 79 #define KEY_ENTRY __field(u32, cipher) \ 80 __field(u8, hw_key_idx) \ 81 __field(u8, flags) \ 82 __field(s8, keyidx) 83 #define KEY_ASSIGN(k) __entry->cipher = (k)->cipher; \ 84 __entry->flags = (k)->flags; \ 85 __entry->keyidx = (k)->keyidx; \ 86 __entry->hw_key_idx = (k)->hw_key_idx; 87 #define KEY_PR_FMT " cipher:0x%x, flags=%#x, keyidx=%d, hw_key_idx=%d" 88 #define KEY_PR_ARG __entry->cipher, __entry->flags, __entry->keyidx, __entry->hw_key_idx 89 90 #define AMPDU_ACTION_ENTRY __field(enum ieee80211_ampdu_mlme_action, \ 91 ieee80211_ampdu_mlme_action) \ 92 STA_ENTRY \ 93 __field(u16, tid) \ 94 __field(u16, ssn) \ 95 __field(u16, buf_size) \ 96 __field(bool, amsdu) \ 97 __field(u16, timeout) \ 98 __field(u16, action) 99 #define AMPDU_ACTION_ASSIGN STA_NAMED_ASSIGN(params->sta); \ 100 __entry->tid = params->tid; \ 101 __entry->ssn = params->ssn; \ 102 __entry->buf_size = params->buf_size; \ 103 __entry->amsdu = params->amsdu; \ 104 __entry->timeout = params->timeout; \ 105 __entry->action = params->action; 106 #define AMPDU_ACTION_PR_FMT STA_PR_FMT " tid %d, ssn %d, buf_size %u, amsdu %d, timeout %d action %d" 107 #define AMPDU_ACTION_PR_ARG STA_PR_ARG, __entry->tid, __entry->ssn, \ 108 __entry->buf_size, __entry->amsdu, __entry->timeout, \ 109 __entry->action 110 111 /* 112 * Tracing for driver callbacks. 113 */ 114 115 DECLARE_EVENT_CLASS(local_only_evt, 116 TP_PROTO(struct ieee80211_local *local), 117 TP_ARGS(local), 118 TP_STRUCT__entry( 119 LOCAL_ENTRY 120 ), 121 TP_fast_assign( 122 LOCAL_ASSIGN; 123 ), 124 TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG) 125 ); 126 127 DECLARE_EVENT_CLASS(local_sdata_addr_evt, 128 TP_PROTO(struct ieee80211_local *local, 129 struct ieee80211_sub_if_data *sdata), 130 TP_ARGS(local, sdata), 131 132 TP_STRUCT__entry( 133 LOCAL_ENTRY 134 VIF_ENTRY 135 __array(char, addr, ETH_ALEN) 136 ), 137 138 TP_fast_assign( 139 LOCAL_ASSIGN; 140 VIF_ASSIGN; 141 memcpy(__entry->addr, sdata->vif.addr, ETH_ALEN); 142 ), 143 144 TP_printk( 145 LOCAL_PR_FMT VIF_PR_FMT " addr:%pM", 146 LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr 147 ) 148 ); 149 150 DECLARE_EVENT_CLASS(local_u32_evt, 151 TP_PROTO(struct ieee80211_local *local, u32 value), 152 TP_ARGS(local, value), 153 154 TP_STRUCT__entry( 155 LOCAL_ENTRY 156 __field(u32, value) 157 ), 158 159 TP_fast_assign( 160 LOCAL_ASSIGN; 161 __entry->value = value; 162 ), 163 164 TP_printk( 165 LOCAL_PR_FMT " value:%d", 166 LOCAL_PR_ARG, __entry->value 167 ) 168 ); 169 170 DECLARE_EVENT_CLASS(local_sdata_evt, 171 TP_PROTO(struct ieee80211_local *local, 172 struct ieee80211_sub_if_data *sdata), 173 TP_ARGS(local, sdata), 174 175 TP_STRUCT__entry( 176 LOCAL_ENTRY 177 VIF_ENTRY 178 ), 179 180 TP_fast_assign( 181 LOCAL_ASSIGN; 182 VIF_ASSIGN; 183 ), 184 185 TP_printk( 186 LOCAL_PR_FMT VIF_PR_FMT, 187 LOCAL_PR_ARG, VIF_PR_ARG 188 ) 189 ); 190 191 DEFINE_EVENT(local_only_evt, drv_return_void, 192 TP_PROTO(struct ieee80211_local *local), 193 TP_ARGS(local) 194 ); 195 196 TRACE_EVENT(drv_return_int, 197 TP_PROTO(struct ieee80211_local *local, int ret), 198 TP_ARGS(local, ret), 199 TP_STRUCT__entry( 200 LOCAL_ENTRY 201 __field(int, ret) 202 ), 203 TP_fast_assign( 204 LOCAL_ASSIGN; 205 __entry->ret = ret; 206 ), 207 TP_printk(LOCAL_PR_FMT " - %d", LOCAL_PR_ARG, __entry->ret) 208 ); 209 210 TRACE_EVENT(drv_return_bool, 211 TP_PROTO(struct ieee80211_local *local, bool ret), 212 TP_ARGS(local, ret), 213 TP_STRUCT__entry( 214 LOCAL_ENTRY 215 __field(bool, ret) 216 ), 217 TP_fast_assign( 218 LOCAL_ASSIGN; 219 __entry->ret = ret; 220 ), 221 TP_printk(LOCAL_PR_FMT " - %s", LOCAL_PR_ARG, (__entry->ret) ? 222 "true" : "false") 223 ); 224 225 TRACE_EVENT(drv_return_u32, 226 TP_PROTO(struct ieee80211_local *local, u32 ret), 227 TP_ARGS(local, ret), 228 TP_STRUCT__entry( 229 LOCAL_ENTRY 230 __field(u32, ret) 231 ), 232 TP_fast_assign( 233 LOCAL_ASSIGN; 234 __entry->ret = ret; 235 ), 236 TP_printk(LOCAL_PR_FMT " - %u", LOCAL_PR_ARG, __entry->ret) 237 ); 238 239 TRACE_EVENT(drv_return_u64, 240 TP_PROTO(struct ieee80211_local *local, u64 ret), 241 TP_ARGS(local, ret), 242 TP_STRUCT__entry( 243 LOCAL_ENTRY 244 __field(u64, ret) 245 ), 246 TP_fast_assign( 247 LOCAL_ASSIGN; 248 __entry->ret = ret; 249 ), 250 TP_printk(LOCAL_PR_FMT " - %llu", LOCAL_PR_ARG, __entry->ret) 251 ); 252 253 DEFINE_EVENT(local_only_evt, drv_start, 254 TP_PROTO(struct ieee80211_local *local), 255 TP_ARGS(local) 256 ); 257 258 DEFINE_EVENT(local_u32_evt, drv_get_et_strings, 259 TP_PROTO(struct ieee80211_local *local, u32 sset), 260 TP_ARGS(local, sset) 261 ); 262 263 DEFINE_EVENT(local_u32_evt, drv_get_et_sset_count, 264 TP_PROTO(struct ieee80211_local *local, u32 sset), 265 TP_ARGS(local, sset) 266 ); 267 268 DEFINE_EVENT(local_only_evt, drv_get_et_stats, 269 TP_PROTO(struct ieee80211_local *local), 270 TP_ARGS(local) 271 ); 272 273 DEFINE_EVENT(local_only_evt, drv_suspend, 274 TP_PROTO(struct ieee80211_local *local), 275 TP_ARGS(local) 276 ); 277 278 DEFINE_EVENT(local_only_evt, drv_resume, 279 TP_PROTO(struct ieee80211_local *local), 280 TP_ARGS(local) 281 ); 282 283 TRACE_EVENT(drv_set_wakeup, 284 TP_PROTO(struct ieee80211_local *local, bool enabled), 285 TP_ARGS(local, enabled), 286 TP_STRUCT__entry( 287 LOCAL_ENTRY 288 __field(bool, enabled) 289 ), 290 TP_fast_assign( 291 LOCAL_ASSIGN; 292 __entry->enabled = enabled; 293 ), 294 TP_printk(LOCAL_PR_FMT " enabled:%d", LOCAL_PR_ARG, __entry->enabled) 295 ); 296 297 DEFINE_EVENT(local_only_evt, drv_stop, 298 TP_PROTO(struct ieee80211_local *local), 299 TP_ARGS(local) 300 ); 301 302 DEFINE_EVENT(local_sdata_addr_evt, drv_add_interface, 303 TP_PROTO(struct ieee80211_local *local, 304 struct ieee80211_sub_if_data *sdata), 305 TP_ARGS(local, sdata) 306 ); 307 308 TRACE_EVENT(drv_change_interface, 309 TP_PROTO(struct ieee80211_local *local, 310 struct ieee80211_sub_if_data *sdata, 311 enum nl80211_iftype type, bool p2p), 312 313 TP_ARGS(local, sdata, type, p2p), 314 315 TP_STRUCT__entry( 316 LOCAL_ENTRY 317 VIF_ENTRY 318 __field(u32, new_type) 319 __field(bool, new_p2p) 320 ), 321 322 TP_fast_assign( 323 LOCAL_ASSIGN; 324 VIF_ASSIGN; 325 __entry->new_type = type; 326 __entry->new_p2p = p2p; 327 ), 328 329 TP_printk( 330 LOCAL_PR_FMT VIF_PR_FMT " new type:%d%s", 331 LOCAL_PR_ARG, VIF_PR_ARG, __entry->new_type, 332 __entry->new_p2p ? "/p2p" : "" 333 ) 334 ); 335 336 DEFINE_EVENT(local_sdata_addr_evt, drv_remove_interface, 337 TP_PROTO(struct ieee80211_local *local, 338 struct ieee80211_sub_if_data *sdata), 339 TP_ARGS(local, sdata) 340 ); 341 342 TRACE_EVENT(drv_config, 343 TP_PROTO(struct ieee80211_local *local, 344 u32 changed), 345 346 TP_ARGS(local, changed), 347 348 TP_STRUCT__entry( 349 LOCAL_ENTRY 350 __field(u32, changed) 351 __field(u32, flags) 352 __field(int, power_level) 353 __field(int, dynamic_ps_timeout) 354 __field(u16, listen_interval) 355 __field(u8, long_frame_max_tx_count) 356 __field(u8, short_frame_max_tx_count) 357 CHANDEF_ENTRY 358 __field(int, smps) 359 ), 360 361 TP_fast_assign( 362 LOCAL_ASSIGN; 363 __entry->changed = changed; 364 __entry->flags = local->hw.conf.flags; 365 __entry->power_level = local->hw.conf.power_level; 366 __entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout; 367 __entry->listen_interval = local->hw.conf.listen_interval; 368 __entry->long_frame_max_tx_count = 369 local->hw.conf.long_frame_max_tx_count; 370 __entry->short_frame_max_tx_count = 371 local->hw.conf.short_frame_max_tx_count; 372 CHANDEF_ASSIGN(&local->hw.conf.chandef) 373 __entry->smps = local->hw.conf.smps_mode; 374 ), 375 376 TP_printk( 377 LOCAL_PR_FMT " ch:%#x" CHANDEF_PR_FMT, 378 LOCAL_PR_ARG, __entry->changed, CHANDEF_PR_ARG 379 ) 380 ); 381 382 TRACE_EVENT(drv_bss_info_changed, 383 TP_PROTO(struct ieee80211_local *local, 384 struct ieee80211_sub_if_data *sdata, 385 struct ieee80211_bss_conf *info, 386 u32 changed), 387 388 TP_ARGS(local, sdata, info, changed), 389 390 TP_STRUCT__entry( 391 LOCAL_ENTRY 392 VIF_ENTRY 393 __field(u32, changed) 394 __field(bool, assoc) 395 __field(bool, ibss_joined) 396 __field(bool, ibss_creator) 397 __field(u16, aid) 398 __field(bool, cts) 399 __field(bool, shortpre) 400 __field(bool, shortslot) 401 __field(bool, enable_beacon) 402 __field(u8, dtimper) 403 __field(u16, bcnint) 404 __field(u16, assoc_cap) 405 __field(u64, sync_tsf) 406 __field(u32, sync_device_ts) 407 __field(u8, sync_dtim_count) 408 __field(u32, basic_rates) 409 __array(int, mcast_rate, NUM_NL80211_BANDS) 410 __field(u16, ht_operation_mode) 411 __field(s32, cqm_rssi_thold); 412 __field(s32, cqm_rssi_hyst); 413 __field(u32, channel_width); 414 __field(u32, channel_cfreq1); 415 __dynamic_array(u32, arp_addr_list, 416 info->arp_addr_cnt > IEEE80211_BSS_ARP_ADDR_LIST_LEN ? 417 IEEE80211_BSS_ARP_ADDR_LIST_LEN : 418 info->arp_addr_cnt); 419 __field(int, arp_addr_cnt); 420 __field(bool, qos); 421 __field(bool, idle); 422 __field(bool, ps); 423 __dynamic_array(u8, ssid, info->ssid_len); 424 __field(bool, hidden_ssid); 425 __field(int, txpower) 426 __field(u8, p2p_oppps_ctwindow) 427 ), 428 429 TP_fast_assign( 430 LOCAL_ASSIGN; 431 VIF_ASSIGN; 432 __entry->changed = changed; 433 __entry->aid = info->aid; 434 __entry->assoc = info->assoc; 435 __entry->ibss_joined = info->ibss_joined; 436 __entry->ibss_creator = info->ibss_creator; 437 __entry->shortpre = info->use_short_preamble; 438 __entry->cts = info->use_cts_prot; 439 __entry->shortslot = info->use_short_slot; 440 __entry->enable_beacon = info->enable_beacon; 441 __entry->dtimper = info->dtim_period; 442 __entry->bcnint = info->beacon_int; 443 __entry->assoc_cap = info->assoc_capability; 444 __entry->sync_tsf = info->sync_tsf; 445 __entry->sync_device_ts = info->sync_device_ts; 446 __entry->sync_dtim_count = info->sync_dtim_count; 447 __entry->basic_rates = info->basic_rates; 448 memcpy(__entry->mcast_rate, info->mcast_rate, 449 sizeof(__entry->mcast_rate)); 450 __entry->ht_operation_mode = info->ht_operation_mode; 451 __entry->cqm_rssi_thold = info->cqm_rssi_thold; 452 __entry->cqm_rssi_hyst = info->cqm_rssi_hyst; 453 __entry->channel_width = info->chandef.width; 454 __entry->channel_cfreq1 = info->chandef.center_freq1; 455 __entry->arp_addr_cnt = info->arp_addr_cnt; 456 memcpy(__get_dynamic_array(arp_addr_list), info->arp_addr_list, 457 sizeof(u32) * (info->arp_addr_cnt > IEEE80211_BSS_ARP_ADDR_LIST_LEN ? 458 IEEE80211_BSS_ARP_ADDR_LIST_LEN : 459 info->arp_addr_cnt)); 460 __entry->qos = info->qos; 461 __entry->idle = info->idle; 462 __entry->ps = info->ps; 463 memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len); 464 __entry->hidden_ssid = info->hidden_ssid; 465 __entry->txpower = info->txpower; 466 __entry->p2p_oppps_ctwindow = info->p2p_noa_attr.oppps_ctwindow; 467 ), 468 469 TP_printk( 470 LOCAL_PR_FMT VIF_PR_FMT " changed:%#x", 471 LOCAL_PR_ARG, VIF_PR_ARG, __entry->changed 472 ) 473 ); 474 475 TRACE_EVENT(drv_prepare_multicast, 476 TP_PROTO(struct ieee80211_local *local, int mc_count), 477 478 TP_ARGS(local, mc_count), 479 480 TP_STRUCT__entry( 481 LOCAL_ENTRY 482 __field(int, mc_count) 483 ), 484 485 TP_fast_assign( 486 LOCAL_ASSIGN; 487 __entry->mc_count = mc_count; 488 ), 489 490 TP_printk( 491 LOCAL_PR_FMT " prepare mc (%d)", 492 LOCAL_PR_ARG, __entry->mc_count 493 ) 494 ); 495 496 TRACE_EVENT(drv_configure_filter, 497 TP_PROTO(struct ieee80211_local *local, 498 unsigned int changed_flags, 499 unsigned int *total_flags, 500 u64 multicast), 501 502 TP_ARGS(local, changed_flags, total_flags, multicast), 503 504 TP_STRUCT__entry( 505 LOCAL_ENTRY 506 __field(unsigned int, changed) 507 __field(unsigned int, total) 508 __field(u64, multicast) 509 ), 510 511 TP_fast_assign( 512 LOCAL_ASSIGN; 513 __entry->changed = changed_flags; 514 __entry->total = *total_flags; 515 __entry->multicast = multicast; 516 ), 517 518 TP_printk( 519 LOCAL_PR_FMT " changed:%#x total:%#x", 520 LOCAL_PR_ARG, __entry->changed, __entry->total 521 ) 522 ); 523 524 TRACE_EVENT(drv_config_iface_filter, 525 TP_PROTO(struct ieee80211_local *local, 526 struct ieee80211_sub_if_data *sdata, 527 unsigned int filter_flags, 528 unsigned int changed_flags), 529 530 TP_ARGS(local, sdata, filter_flags, changed_flags), 531 532 TP_STRUCT__entry( 533 LOCAL_ENTRY 534 VIF_ENTRY 535 __field(unsigned int, filter_flags) 536 __field(unsigned int, changed_flags) 537 ), 538 539 TP_fast_assign( 540 LOCAL_ASSIGN; 541 VIF_ASSIGN; 542 __entry->filter_flags = filter_flags; 543 __entry->changed_flags = changed_flags; 544 ), 545 546 TP_printk( 547 LOCAL_PR_FMT VIF_PR_FMT 548 " filter_flags: %#x changed_flags: %#x", 549 LOCAL_PR_ARG, VIF_PR_ARG, __entry->filter_flags, 550 __entry->changed_flags 551 ) 552 ); 553 554 TRACE_EVENT(drv_set_tim, 555 TP_PROTO(struct ieee80211_local *local, 556 struct ieee80211_sta *sta, bool set), 557 558 TP_ARGS(local, sta, set), 559 560 TP_STRUCT__entry( 561 LOCAL_ENTRY 562 STA_ENTRY 563 __field(bool, set) 564 ), 565 566 TP_fast_assign( 567 LOCAL_ASSIGN; 568 STA_ASSIGN; 569 __entry->set = set; 570 ), 571 572 TP_printk( 573 LOCAL_PR_FMT STA_PR_FMT " set:%d", 574 LOCAL_PR_ARG, STA_PR_ARG, __entry->set 575 ) 576 ); 577 578 TRACE_EVENT(drv_set_key, 579 TP_PROTO(struct ieee80211_local *local, 580 enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata, 581 struct ieee80211_sta *sta, 582 struct ieee80211_key_conf *key), 583 584 TP_ARGS(local, cmd, sdata, sta, key), 585 586 TP_STRUCT__entry( 587 LOCAL_ENTRY 588 VIF_ENTRY 589 STA_ENTRY 590 KEY_ENTRY 591 ), 592 593 TP_fast_assign( 594 LOCAL_ASSIGN; 595 VIF_ASSIGN; 596 STA_ASSIGN; 597 KEY_ASSIGN(key); 598 ), 599 600 TP_printk( 601 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT KEY_PR_FMT, 602 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, KEY_PR_ARG 603 ) 604 ); 605 606 TRACE_EVENT(drv_update_tkip_key, 607 TP_PROTO(struct ieee80211_local *local, 608 struct ieee80211_sub_if_data *sdata, 609 struct ieee80211_key_conf *conf, 610 struct ieee80211_sta *sta, u32 iv32), 611 612 TP_ARGS(local, sdata, conf, sta, iv32), 613 614 TP_STRUCT__entry( 615 LOCAL_ENTRY 616 VIF_ENTRY 617 STA_ENTRY 618 __field(u32, iv32) 619 ), 620 621 TP_fast_assign( 622 LOCAL_ASSIGN; 623 VIF_ASSIGN; 624 STA_ASSIGN; 625 __entry->iv32 = iv32; 626 ), 627 628 TP_printk( 629 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x", 630 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->iv32 631 ) 632 ); 633 634 DEFINE_EVENT(local_sdata_evt, drv_hw_scan, 635 TP_PROTO(struct ieee80211_local *local, 636 struct ieee80211_sub_if_data *sdata), 637 TP_ARGS(local, sdata) 638 ); 639 640 DEFINE_EVENT(local_sdata_evt, drv_cancel_hw_scan, 641 TP_PROTO(struct ieee80211_local *local, 642 struct ieee80211_sub_if_data *sdata), 643 TP_ARGS(local, sdata) 644 ); 645 646 DEFINE_EVENT(local_sdata_evt, drv_sched_scan_start, 647 TP_PROTO(struct ieee80211_local *local, 648 struct ieee80211_sub_if_data *sdata), 649 TP_ARGS(local, sdata) 650 ); 651 652 DEFINE_EVENT(local_sdata_evt, drv_sched_scan_stop, 653 TP_PROTO(struct ieee80211_local *local, 654 struct ieee80211_sub_if_data *sdata), 655 TP_ARGS(local, sdata) 656 ); 657 658 TRACE_EVENT(drv_sw_scan_start, 659 TP_PROTO(struct ieee80211_local *local, 660 struct ieee80211_sub_if_data *sdata, 661 const u8 *mac_addr), 662 663 TP_ARGS(local, sdata, mac_addr), 664 665 TP_STRUCT__entry( 666 LOCAL_ENTRY 667 VIF_ENTRY 668 __array(char, mac_addr, ETH_ALEN) 669 ), 670 671 TP_fast_assign( 672 LOCAL_ASSIGN; 673 VIF_ASSIGN; 674 memcpy(__entry->mac_addr, mac_addr, ETH_ALEN); 675 ), 676 677 TP_printk(LOCAL_PR_FMT ", " VIF_PR_FMT ", addr:%pM", 678 LOCAL_PR_ARG, VIF_PR_ARG, __entry->mac_addr) 679 ); 680 681 DEFINE_EVENT(local_sdata_evt, drv_sw_scan_complete, 682 TP_PROTO(struct ieee80211_local *local, 683 struct ieee80211_sub_if_data *sdata), 684 TP_ARGS(local, sdata) 685 ); 686 687 TRACE_EVENT(drv_get_stats, 688 TP_PROTO(struct ieee80211_local *local, 689 struct ieee80211_low_level_stats *stats, 690 int ret), 691 692 TP_ARGS(local, stats, ret), 693 694 TP_STRUCT__entry( 695 LOCAL_ENTRY 696 __field(int, ret) 697 __field(unsigned int, ackfail) 698 __field(unsigned int, rtsfail) 699 __field(unsigned int, fcserr) 700 __field(unsigned int, rtssucc) 701 ), 702 703 TP_fast_assign( 704 LOCAL_ASSIGN; 705 __entry->ret = ret; 706 __entry->ackfail = stats->dot11ACKFailureCount; 707 __entry->rtsfail = stats->dot11RTSFailureCount; 708 __entry->fcserr = stats->dot11FCSErrorCount; 709 __entry->rtssucc = stats->dot11RTSSuccessCount; 710 ), 711 712 TP_printk( 713 LOCAL_PR_FMT " ret:%d", 714 LOCAL_PR_ARG, __entry->ret 715 ) 716 ); 717 718 TRACE_EVENT(drv_get_key_seq, 719 TP_PROTO(struct ieee80211_local *local, 720 struct ieee80211_key_conf *key), 721 722 TP_ARGS(local, key), 723 724 TP_STRUCT__entry( 725 LOCAL_ENTRY 726 KEY_ENTRY 727 ), 728 729 TP_fast_assign( 730 LOCAL_ASSIGN; 731 KEY_ASSIGN(key); 732 ), 733 734 TP_printk( 735 LOCAL_PR_FMT KEY_PR_FMT, 736 LOCAL_PR_ARG, KEY_PR_ARG 737 ) 738 ); 739 740 DEFINE_EVENT(local_u32_evt, drv_set_frag_threshold, 741 TP_PROTO(struct ieee80211_local *local, u32 value), 742 TP_ARGS(local, value) 743 ); 744 745 DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold, 746 TP_PROTO(struct ieee80211_local *local, u32 value), 747 TP_ARGS(local, value) 748 ); 749 750 TRACE_EVENT(drv_set_coverage_class, 751 TP_PROTO(struct ieee80211_local *local, s16 value), 752 753 TP_ARGS(local, value), 754 755 TP_STRUCT__entry( 756 LOCAL_ENTRY 757 __field(s16, value) 758 ), 759 760 TP_fast_assign( 761 LOCAL_ASSIGN; 762 __entry->value = value; 763 ), 764 765 TP_printk( 766 LOCAL_PR_FMT " value:%d", 767 LOCAL_PR_ARG, __entry->value 768 ) 769 ); 770 771 TRACE_EVENT(drv_sta_notify, 772 TP_PROTO(struct ieee80211_local *local, 773 struct ieee80211_sub_if_data *sdata, 774 enum sta_notify_cmd cmd, 775 struct ieee80211_sta *sta), 776 777 TP_ARGS(local, sdata, cmd, sta), 778 779 TP_STRUCT__entry( 780 LOCAL_ENTRY 781 VIF_ENTRY 782 STA_ENTRY 783 __field(u32, cmd) 784 ), 785 786 TP_fast_assign( 787 LOCAL_ASSIGN; 788 VIF_ASSIGN; 789 STA_ASSIGN; 790 __entry->cmd = cmd; 791 ), 792 793 TP_printk( 794 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " cmd:%d", 795 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd 796 ) 797 ); 798 799 TRACE_EVENT(drv_sta_state, 800 TP_PROTO(struct ieee80211_local *local, 801 struct ieee80211_sub_if_data *sdata, 802 struct ieee80211_sta *sta, 803 enum ieee80211_sta_state old_state, 804 enum ieee80211_sta_state new_state), 805 806 TP_ARGS(local, sdata, sta, old_state, new_state), 807 808 TP_STRUCT__entry( 809 LOCAL_ENTRY 810 VIF_ENTRY 811 STA_ENTRY 812 __field(u32, old_state) 813 __field(u32, new_state) 814 ), 815 816 TP_fast_assign( 817 LOCAL_ASSIGN; 818 VIF_ASSIGN; 819 STA_ASSIGN; 820 __entry->old_state = old_state; 821 __entry->new_state = new_state; 822 ), 823 824 TP_printk( 825 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " state: %d->%d", 826 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, 827 __entry->old_state, __entry->new_state 828 ) 829 ); 830 831 TRACE_EVENT(drv_sta_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 859 DECLARE_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 884 DEFINE_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 891 DEFINE_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 898 DEFINE_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 905 DEFINE_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 912 DEFINE_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 919 DEFINE_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 926 TRACE_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 961 DEFINE_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 967 TRACE_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 992 TRACE_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 1018 DEFINE_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 1024 DEFINE_EVENT(local_only_evt, drv_tx_last_beacon, 1025 TP_PROTO(struct ieee80211_local *local), 1026 TP_ARGS(local) 1027 ); 1028 1029 TRACE_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 1054 TRACE_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 1076 TRACE_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 1100 TRACE_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 1133 TRACE_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 1158 TRACE_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 1183 TRACE_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 1215 DEFINE_EVENT(local_only_evt, drv_cancel_remain_on_channel, 1216 TP_PROTO(struct ieee80211_local *local), 1217 TP_ARGS(local) 1218 ); 1219 1220 TRACE_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 1243 TRACE_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 1272 DEFINE_EVENT(local_only_evt, drv_tx_frames_pending, 1273 TP_PROTO(struct ieee80211_local *local), 1274 TP_ARGS(local) 1275 ); 1276 1277 DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait, 1278 TP_PROTO(struct ieee80211_local *local), 1279 TP_ARGS(local) 1280 ); 1281 1282 TRACE_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 1309 TRACE_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 1337 TRACE_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 1362 DECLARE_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 1397 DEFINE_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 1407 DEFINE_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 1417 TRACE_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 1442 DEFINE_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 1449 DECLARE_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 1471 DEFINE_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 1477 DEFINE_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 1483 TRACE_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 1510 struct trace_vif_entry { 1511 enum nl80211_iftype vif_type; 1512 bool p2p; 1513 char vif_name[IFNAMSIZ]; 1514 } __packed; 1515 1516 struct trace_chandef_entry { 1517 u32 control_freq; 1518 u32 chan_width; 1519 u32 center_freq1; 1520 u32 center_freq2; 1521 } __packed; 1522 1523 struct 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 1532 TRACE_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 1593 DECLARE_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 1618 DEFINE_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 1625 DEFINE_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 1632 TRACE_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 1663 DEFINE_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 1669 TRACE_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) 1692 DEFINE_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 1699 TRACE_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 1728 DEFINE_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 1734 TRACE_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 1752 TRACE_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 1780 TRACE_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 1802 TRACE_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 1833 TRACE_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 1860 TRACE_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 DEFINE_EVENT(local_sdata_evt, drv_start_pmsr, 1886 TP_PROTO(struct ieee80211_local *local, 1887 struct ieee80211_sub_if_data *sdata), 1888 TP_ARGS(local, sdata) 1889 ); 1890 1891 DEFINE_EVENT(local_sdata_evt, drv_abort_pmsr, 1892 TP_PROTO(struct ieee80211_local *local, 1893 struct ieee80211_sub_if_data *sdata), 1894 TP_ARGS(local, sdata) 1895 ); 1896 1897 /* 1898 * Tracing for API calls that drivers call. 1899 */ 1900 1901 TRACE_EVENT(api_start_tx_ba_session, 1902 TP_PROTO(struct ieee80211_sta *sta, u16 tid), 1903 1904 TP_ARGS(sta, tid), 1905 1906 TP_STRUCT__entry( 1907 STA_ENTRY 1908 __field(u16, tid) 1909 ), 1910 1911 TP_fast_assign( 1912 STA_ASSIGN; 1913 __entry->tid = tid; 1914 ), 1915 1916 TP_printk( 1917 STA_PR_FMT " tid:%d", 1918 STA_PR_ARG, __entry->tid 1919 ) 1920 ); 1921 1922 TRACE_EVENT(api_start_tx_ba_cb, 1923 TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid), 1924 1925 TP_ARGS(sdata, ra, tid), 1926 1927 TP_STRUCT__entry( 1928 VIF_ENTRY 1929 __array(u8, ra, ETH_ALEN) 1930 __field(u16, tid) 1931 ), 1932 1933 TP_fast_assign( 1934 VIF_ASSIGN; 1935 memcpy(__entry->ra, ra, ETH_ALEN); 1936 __entry->tid = tid; 1937 ), 1938 1939 TP_printk( 1940 VIF_PR_FMT " ra:%pM tid:%d", 1941 VIF_PR_ARG, __entry->ra, __entry->tid 1942 ) 1943 ); 1944 1945 TRACE_EVENT(api_stop_tx_ba_session, 1946 TP_PROTO(struct ieee80211_sta *sta, u16 tid), 1947 1948 TP_ARGS(sta, tid), 1949 1950 TP_STRUCT__entry( 1951 STA_ENTRY 1952 __field(u16, tid) 1953 ), 1954 1955 TP_fast_assign( 1956 STA_ASSIGN; 1957 __entry->tid = tid; 1958 ), 1959 1960 TP_printk( 1961 STA_PR_FMT " tid:%d", 1962 STA_PR_ARG, __entry->tid 1963 ) 1964 ); 1965 1966 TRACE_EVENT(api_stop_tx_ba_cb, 1967 TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid), 1968 1969 TP_ARGS(sdata, ra, tid), 1970 1971 TP_STRUCT__entry( 1972 VIF_ENTRY 1973 __array(u8, ra, ETH_ALEN) 1974 __field(u16, tid) 1975 ), 1976 1977 TP_fast_assign( 1978 VIF_ASSIGN; 1979 memcpy(__entry->ra, ra, ETH_ALEN); 1980 __entry->tid = tid; 1981 ), 1982 1983 TP_printk( 1984 VIF_PR_FMT " ra:%pM tid:%d", 1985 VIF_PR_ARG, __entry->ra, __entry->tid 1986 ) 1987 ); 1988 1989 DEFINE_EVENT(local_only_evt, api_restart_hw, 1990 TP_PROTO(struct ieee80211_local *local), 1991 TP_ARGS(local) 1992 ); 1993 1994 TRACE_EVENT(api_beacon_loss, 1995 TP_PROTO(struct ieee80211_sub_if_data *sdata), 1996 1997 TP_ARGS(sdata), 1998 1999 TP_STRUCT__entry( 2000 VIF_ENTRY 2001 ), 2002 2003 TP_fast_assign( 2004 VIF_ASSIGN; 2005 ), 2006 2007 TP_printk( 2008 VIF_PR_FMT, 2009 VIF_PR_ARG 2010 ) 2011 ); 2012 2013 TRACE_EVENT(api_connection_loss, 2014 TP_PROTO(struct ieee80211_sub_if_data *sdata), 2015 2016 TP_ARGS(sdata), 2017 2018 TP_STRUCT__entry( 2019 VIF_ENTRY 2020 ), 2021 2022 TP_fast_assign( 2023 VIF_ASSIGN; 2024 ), 2025 2026 TP_printk( 2027 VIF_PR_FMT, 2028 VIF_PR_ARG 2029 ) 2030 ); 2031 2032 TRACE_EVENT(api_cqm_rssi_notify, 2033 TP_PROTO(struct ieee80211_sub_if_data *sdata, 2034 enum nl80211_cqm_rssi_threshold_event rssi_event, 2035 s32 rssi_level), 2036 2037 TP_ARGS(sdata, rssi_event, rssi_level), 2038 2039 TP_STRUCT__entry( 2040 VIF_ENTRY 2041 __field(u32, rssi_event) 2042 __field(s32, rssi_level) 2043 ), 2044 2045 TP_fast_assign( 2046 VIF_ASSIGN; 2047 __entry->rssi_event = rssi_event; 2048 __entry->rssi_level = rssi_level; 2049 ), 2050 2051 TP_printk( 2052 VIF_PR_FMT " event:%d rssi:%d", 2053 VIF_PR_ARG, __entry->rssi_event, __entry->rssi_level 2054 ) 2055 ); 2056 2057 DEFINE_EVENT(local_sdata_evt, api_cqm_beacon_loss_notify, 2058 TP_PROTO(struct ieee80211_local *local, 2059 struct ieee80211_sub_if_data *sdata), 2060 TP_ARGS(local, sdata) 2061 ); 2062 2063 TRACE_EVENT(api_scan_completed, 2064 TP_PROTO(struct ieee80211_local *local, bool aborted), 2065 2066 TP_ARGS(local, aborted), 2067 2068 TP_STRUCT__entry( 2069 LOCAL_ENTRY 2070 __field(bool, aborted) 2071 ), 2072 2073 TP_fast_assign( 2074 LOCAL_ASSIGN; 2075 __entry->aborted = aborted; 2076 ), 2077 2078 TP_printk( 2079 LOCAL_PR_FMT " aborted:%d", 2080 LOCAL_PR_ARG, __entry->aborted 2081 ) 2082 ); 2083 2084 TRACE_EVENT(api_sched_scan_results, 2085 TP_PROTO(struct ieee80211_local *local), 2086 2087 TP_ARGS(local), 2088 2089 TP_STRUCT__entry( 2090 LOCAL_ENTRY 2091 ), 2092 2093 TP_fast_assign( 2094 LOCAL_ASSIGN; 2095 ), 2096 2097 TP_printk( 2098 LOCAL_PR_FMT, LOCAL_PR_ARG 2099 ) 2100 ); 2101 2102 TRACE_EVENT(api_sched_scan_stopped, 2103 TP_PROTO(struct ieee80211_local *local), 2104 2105 TP_ARGS(local), 2106 2107 TP_STRUCT__entry( 2108 LOCAL_ENTRY 2109 ), 2110 2111 TP_fast_assign( 2112 LOCAL_ASSIGN; 2113 ), 2114 2115 TP_printk( 2116 LOCAL_PR_FMT, LOCAL_PR_ARG 2117 ) 2118 ); 2119 2120 TRACE_EVENT(api_sta_block_awake, 2121 TP_PROTO(struct ieee80211_local *local, 2122 struct ieee80211_sta *sta, bool block), 2123 2124 TP_ARGS(local, sta, block), 2125 2126 TP_STRUCT__entry( 2127 LOCAL_ENTRY 2128 STA_ENTRY 2129 __field(bool, block) 2130 ), 2131 2132 TP_fast_assign( 2133 LOCAL_ASSIGN; 2134 STA_ASSIGN; 2135 __entry->block = block; 2136 ), 2137 2138 TP_printk( 2139 LOCAL_PR_FMT STA_PR_FMT " block:%d", 2140 LOCAL_PR_ARG, STA_PR_ARG, __entry->block 2141 ) 2142 ); 2143 2144 TRACE_EVENT(api_chswitch_done, 2145 TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success), 2146 2147 TP_ARGS(sdata, success), 2148 2149 TP_STRUCT__entry( 2150 VIF_ENTRY 2151 __field(bool, success) 2152 ), 2153 2154 TP_fast_assign( 2155 VIF_ASSIGN; 2156 __entry->success = success; 2157 ), 2158 2159 TP_printk( 2160 VIF_PR_FMT " success=%d", 2161 VIF_PR_ARG, __entry->success 2162 ) 2163 ); 2164 2165 DEFINE_EVENT(local_only_evt, api_ready_on_channel, 2166 TP_PROTO(struct ieee80211_local *local), 2167 TP_ARGS(local) 2168 ); 2169 2170 DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired, 2171 TP_PROTO(struct ieee80211_local *local), 2172 TP_ARGS(local) 2173 ); 2174 2175 TRACE_EVENT(api_gtk_rekey_notify, 2176 TP_PROTO(struct ieee80211_sub_if_data *sdata, 2177 const u8 *bssid, const u8 *replay_ctr), 2178 2179 TP_ARGS(sdata, bssid, replay_ctr), 2180 2181 TP_STRUCT__entry( 2182 VIF_ENTRY 2183 __array(u8, bssid, ETH_ALEN) 2184 __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN) 2185 ), 2186 2187 TP_fast_assign( 2188 VIF_ASSIGN; 2189 memcpy(__entry->bssid, bssid, ETH_ALEN); 2190 memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN); 2191 ), 2192 2193 TP_printk(VIF_PR_FMT, VIF_PR_ARG) 2194 ); 2195 2196 TRACE_EVENT(api_enable_rssi_reports, 2197 TP_PROTO(struct ieee80211_sub_if_data *sdata, 2198 int rssi_min_thold, int rssi_max_thold), 2199 2200 TP_ARGS(sdata, rssi_min_thold, rssi_max_thold), 2201 2202 TP_STRUCT__entry( 2203 VIF_ENTRY 2204 __field(int, rssi_min_thold) 2205 __field(int, rssi_max_thold) 2206 ), 2207 2208 TP_fast_assign( 2209 VIF_ASSIGN; 2210 __entry->rssi_min_thold = rssi_min_thold; 2211 __entry->rssi_max_thold = rssi_max_thold; 2212 ), 2213 2214 TP_printk( 2215 VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d", 2216 VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold 2217 ) 2218 ); 2219 2220 TRACE_EVENT(api_eosp, 2221 TP_PROTO(struct ieee80211_local *local, 2222 struct ieee80211_sta *sta), 2223 2224 TP_ARGS(local, sta), 2225 2226 TP_STRUCT__entry( 2227 LOCAL_ENTRY 2228 STA_ENTRY 2229 ), 2230 2231 TP_fast_assign( 2232 LOCAL_ASSIGN; 2233 STA_ASSIGN; 2234 ), 2235 2236 TP_printk( 2237 LOCAL_PR_FMT STA_PR_FMT, 2238 LOCAL_PR_ARG, STA_PR_ARG 2239 ) 2240 ); 2241 2242 TRACE_EVENT(api_send_eosp_nullfunc, 2243 TP_PROTO(struct ieee80211_local *local, 2244 struct ieee80211_sta *sta, 2245 u8 tid), 2246 2247 TP_ARGS(local, sta, tid), 2248 2249 TP_STRUCT__entry( 2250 LOCAL_ENTRY 2251 STA_ENTRY 2252 __field(u8, tid) 2253 ), 2254 2255 TP_fast_assign( 2256 LOCAL_ASSIGN; 2257 STA_ASSIGN; 2258 __entry->tid = tid; 2259 ), 2260 2261 TP_printk( 2262 LOCAL_PR_FMT STA_PR_FMT " tid:%d", 2263 LOCAL_PR_ARG, STA_PR_ARG, __entry->tid 2264 ) 2265 ); 2266 2267 TRACE_EVENT(api_sta_set_buffered, 2268 TP_PROTO(struct ieee80211_local *local, 2269 struct ieee80211_sta *sta, 2270 u8 tid, bool buffered), 2271 2272 TP_ARGS(local, sta, tid, buffered), 2273 2274 TP_STRUCT__entry( 2275 LOCAL_ENTRY 2276 STA_ENTRY 2277 __field(u8, tid) 2278 __field(bool, buffered) 2279 ), 2280 2281 TP_fast_assign( 2282 LOCAL_ASSIGN; 2283 STA_ASSIGN; 2284 __entry->tid = tid; 2285 __entry->buffered = buffered; 2286 ), 2287 2288 TP_printk( 2289 LOCAL_PR_FMT STA_PR_FMT " tid:%d buffered:%d", 2290 LOCAL_PR_ARG, STA_PR_ARG, __entry->tid, __entry->buffered 2291 ) 2292 ); 2293 2294 /* 2295 * Tracing for internal functions 2296 * (which may also be called in response to driver calls) 2297 */ 2298 2299 TRACE_EVENT(wake_queue, 2300 TP_PROTO(struct ieee80211_local *local, u16 queue, 2301 enum queue_stop_reason reason), 2302 2303 TP_ARGS(local, queue, reason), 2304 2305 TP_STRUCT__entry( 2306 LOCAL_ENTRY 2307 __field(u16, queue) 2308 __field(u32, reason) 2309 ), 2310 2311 TP_fast_assign( 2312 LOCAL_ASSIGN; 2313 __entry->queue = queue; 2314 __entry->reason = reason; 2315 ), 2316 2317 TP_printk( 2318 LOCAL_PR_FMT " queue:%d, reason:%d", 2319 LOCAL_PR_ARG, __entry->queue, __entry->reason 2320 ) 2321 ); 2322 2323 TRACE_EVENT(stop_queue, 2324 TP_PROTO(struct ieee80211_local *local, u16 queue, 2325 enum queue_stop_reason reason), 2326 2327 TP_ARGS(local, queue, reason), 2328 2329 TP_STRUCT__entry( 2330 LOCAL_ENTRY 2331 __field(u16, queue) 2332 __field(u32, reason) 2333 ), 2334 2335 TP_fast_assign( 2336 LOCAL_ASSIGN; 2337 __entry->queue = queue; 2338 __entry->reason = reason; 2339 ), 2340 2341 TP_printk( 2342 LOCAL_PR_FMT " queue:%d, reason:%d", 2343 LOCAL_PR_ARG, __entry->queue, __entry->reason 2344 ) 2345 ); 2346 2347 TRACE_EVENT(drv_set_default_unicast_key, 2348 TP_PROTO(struct ieee80211_local *local, 2349 struct ieee80211_sub_if_data *sdata, 2350 int key_idx), 2351 2352 TP_ARGS(local, sdata, key_idx), 2353 2354 TP_STRUCT__entry( 2355 LOCAL_ENTRY 2356 VIF_ENTRY 2357 __field(int, key_idx) 2358 ), 2359 2360 TP_fast_assign( 2361 LOCAL_ASSIGN; 2362 VIF_ASSIGN; 2363 __entry->key_idx = key_idx; 2364 ), 2365 2366 TP_printk(LOCAL_PR_FMT VIF_PR_FMT " key_idx:%d", 2367 LOCAL_PR_ARG, VIF_PR_ARG, __entry->key_idx) 2368 ); 2369 2370 TRACE_EVENT(api_radar_detected, 2371 TP_PROTO(struct ieee80211_local *local), 2372 2373 TP_ARGS(local), 2374 2375 TP_STRUCT__entry( 2376 LOCAL_ENTRY 2377 ), 2378 2379 TP_fast_assign( 2380 LOCAL_ASSIGN; 2381 ), 2382 2383 TP_printk( 2384 LOCAL_PR_FMT " radar detected", 2385 LOCAL_PR_ARG 2386 ) 2387 ); 2388 2389 TRACE_EVENT(drv_channel_switch_beacon, 2390 TP_PROTO(struct ieee80211_local *local, 2391 struct ieee80211_sub_if_data *sdata, 2392 struct cfg80211_chan_def *chandef), 2393 2394 TP_ARGS(local, sdata, chandef), 2395 2396 TP_STRUCT__entry( 2397 LOCAL_ENTRY 2398 VIF_ENTRY 2399 CHANDEF_ENTRY 2400 ), 2401 2402 TP_fast_assign( 2403 LOCAL_ASSIGN; 2404 VIF_ASSIGN; 2405 CHANDEF_ASSIGN(chandef); 2406 ), 2407 2408 TP_printk( 2409 LOCAL_PR_FMT VIF_PR_FMT " channel switch to " CHANDEF_PR_FMT, 2410 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG 2411 ) 2412 ); 2413 2414 TRACE_EVENT(drv_pre_channel_switch, 2415 TP_PROTO(struct ieee80211_local *local, 2416 struct ieee80211_sub_if_data *sdata, 2417 struct ieee80211_channel_switch *ch_switch), 2418 2419 TP_ARGS(local, sdata, ch_switch), 2420 2421 TP_STRUCT__entry( 2422 LOCAL_ENTRY 2423 VIF_ENTRY 2424 CHANDEF_ENTRY 2425 __field(u64, timestamp) 2426 __field(u32, device_timestamp) 2427 __field(bool, block_tx) 2428 __field(u8, count) 2429 ), 2430 2431 TP_fast_assign( 2432 LOCAL_ASSIGN; 2433 VIF_ASSIGN; 2434 CHANDEF_ASSIGN(&ch_switch->chandef) 2435 __entry->timestamp = ch_switch->timestamp; 2436 __entry->device_timestamp = ch_switch->device_timestamp; 2437 __entry->block_tx = ch_switch->block_tx; 2438 __entry->count = ch_switch->count; 2439 ), 2440 2441 TP_printk( 2442 LOCAL_PR_FMT VIF_PR_FMT " prepare channel switch to " 2443 CHANDEF_PR_FMT " count:%d block_tx:%d timestamp:%llu", 2444 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count, 2445 __entry->block_tx, __entry->timestamp 2446 ) 2447 ); 2448 2449 DEFINE_EVENT(local_sdata_evt, drv_post_channel_switch, 2450 TP_PROTO(struct ieee80211_local *local, 2451 struct ieee80211_sub_if_data *sdata), 2452 TP_ARGS(local, sdata) 2453 ); 2454 2455 DEFINE_EVENT(local_sdata_evt, drv_abort_channel_switch, 2456 TP_PROTO(struct ieee80211_local *local, 2457 struct ieee80211_sub_if_data *sdata), 2458 TP_ARGS(local, sdata) 2459 ); 2460 2461 TRACE_EVENT(drv_channel_switch_rx_beacon, 2462 TP_PROTO(struct ieee80211_local *local, 2463 struct ieee80211_sub_if_data *sdata, 2464 struct ieee80211_channel_switch *ch_switch), 2465 2466 TP_ARGS(local, sdata, ch_switch), 2467 2468 TP_STRUCT__entry( 2469 LOCAL_ENTRY 2470 VIF_ENTRY 2471 CHANDEF_ENTRY 2472 __field(u64, timestamp) 2473 __field(u32, device_timestamp) 2474 __field(bool, block_tx) 2475 __field(u8, count) 2476 ), 2477 2478 TP_fast_assign( 2479 LOCAL_ASSIGN; 2480 VIF_ASSIGN; 2481 CHANDEF_ASSIGN(&ch_switch->chandef) 2482 __entry->timestamp = ch_switch->timestamp; 2483 __entry->device_timestamp = ch_switch->device_timestamp; 2484 __entry->block_tx = ch_switch->block_tx; 2485 __entry->count = ch_switch->count; 2486 ), 2487 2488 TP_printk( 2489 LOCAL_PR_FMT VIF_PR_FMT 2490 " received a channel switch beacon to " 2491 CHANDEF_PR_FMT " count:%d block_tx:%d timestamp:%llu", 2492 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count, 2493 __entry->block_tx, __entry->timestamp 2494 ) 2495 ); 2496 2497 TRACE_EVENT(drv_get_txpower, 2498 TP_PROTO(struct ieee80211_local *local, 2499 struct ieee80211_sub_if_data *sdata, 2500 int dbm, int ret), 2501 2502 TP_ARGS(local, sdata, dbm, ret), 2503 2504 TP_STRUCT__entry( 2505 LOCAL_ENTRY 2506 VIF_ENTRY 2507 __field(int, dbm) 2508 __field(int, ret) 2509 ), 2510 2511 TP_fast_assign( 2512 LOCAL_ASSIGN; 2513 VIF_ASSIGN; 2514 __entry->dbm = dbm; 2515 __entry->ret = ret; 2516 ), 2517 2518 TP_printk( 2519 LOCAL_PR_FMT VIF_PR_FMT " dbm:%d ret:%d", 2520 LOCAL_PR_ARG, VIF_PR_ARG, __entry->dbm, __entry->ret 2521 ) 2522 ); 2523 2524 TRACE_EVENT(drv_tdls_channel_switch, 2525 TP_PROTO(struct ieee80211_local *local, 2526 struct ieee80211_sub_if_data *sdata, 2527 struct ieee80211_sta *sta, u8 oper_class, 2528 struct cfg80211_chan_def *chandef), 2529 2530 TP_ARGS(local, sdata, sta, oper_class, chandef), 2531 2532 TP_STRUCT__entry( 2533 LOCAL_ENTRY 2534 VIF_ENTRY 2535 STA_ENTRY 2536 __field(u8, oper_class) 2537 CHANDEF_ENTRY 2538 ), 2539 2540 TP_fast_assign( 2541 LOCAL_ASSIGN; 2542 VIF_ASSIGN; 2543 STA_ASSIGN; 2544 __entry->oper_class = oper_class; 2545 CHANDEF_ASSIGN(chandef) 2546 ), 2547 2548 TP_printk( 2549 LOCAL_PR_FMT VIF_PR_FMT " tdls channel switch to" 2550 CHANDEF_PR_FMT " oper_class:%d " STA_PR_FMT, 2551 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->oper_class, 2552 STA_PR_ARG 2553 ) 2554 ); 2555 2556 TRACE_EVENT(drv_tdls_cancel_channel_switch, 2557 TP_PROTO(struct ieee80211_local *local, 2558 struct ieee80211_sub_if_data *sdata, 2559 struct ieee80211_sta *sta), 2560 2561 TP_ARGS(local, sdata, sta), 2562 2563 TP_STRUCT__entry( 2564 LOCAL_ENTRY 2565 VIF_ENTRY 2566 STA_ENTRY 2567 ), 2568 2569 TP_fast_assign( 2570 LOCAL_ASSIGN; 2571 VIF_ASSIGN; 2572 STA_ASSIGN; 2573 ), 2574 2575 TP_printk( 2576 LOCAL_PR_FMT VIF_PR_FMT 2577 " tdls cancel channel switch with " STA_PR_FMT, 2578 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG 2579 ) 2580 ); 2581 2582 TRACE_EVENT(drv_tdls_recv_channel_switch, 2583 TP_PROTO(struct ieee80211_local *local, 2584 struct ieee80211_sub_if_data *sdata, 2585 struct ieee80211_tdls_ch_sw_params *params), 2586 2587 TP_ARGS(local, sdata, params), 2588 2589 TP_STRUCT__entry( 2590 LOCAL_ENTRY 2591 VIF_ENTRY 2592 __field(u8, action_code) 2593 STA_ENTRY 2594 CHANDEF_ENTRY 2595 __field(u32, status) 2596 __field(bool, peer_initiator) 2597 __field(u32, timestamp) 2598 __field(u16, switch_time) 2599 __field(u16, switch_timeout) 2600 ), 2601 2602 TP_fast_assign( 2603 LOCAL_ASSIGN; 2604 VIF_ASSIGN; 2605 STA_NAMED_ASSIGN(params->sta); 2606 CHANDEF_ASSIGN(params->chandef) 2607 __entry->peer_initiator = params->sta->tdls_initiator; 2608 __entry->action_code = params->action_code; 2609 __entry->status = params->status; 2610 __entry->timestamp = params->timestamp; 2611 __entry->switch_time = params->switch_time; 2612 __entry->switch_timeout = params->switch_timeout; 2613 ), 2614 2615 TP_printk( 2616 LOCAL_PR_FMT VIF_PR_FMT " received tdls channel switch packet" 2617 " action:%d status:%d time:%d switch time:%d switch" 2618 " timeout:%d initiator: %d chan:" CHANDEF_PR_FMT STA_PR_FMT, 2619 LOCAL_PR_ARG, VIF_PR_ARG, __entry->action_code, __entry->status, 2620 __entry->timestamp, __entry->switch_time, 2621 __entry->switch_timeout, __entry->peer_initiator, 2622 CHANDEF_PR_ARG, STA_PR_ARG 2623 ) 2624 ); 2625 2626 TRACE_EVENT(drv_wake_tx_queue, 2627 TP_PROTO(struct ieee80211_local *local, 2628 struct ieee80211_sub_if_data *sdata, 2629 struct txq_info *txq), 2630 2631 TP_ARGS(local, sdata, txq), 2632 2633 TP_STRUCT__entry( 2634 LOCAL_ENTRY 2635 VIF_ENTRY 2636 STA_ENTRY 2637 __field(u8, ac) 2638 __field(u8, tid) 2639 ), 2640 2641 TP_fast_assign( 2642 struct ieee80211_sta *sta = txq->txq.sta; 2643 2644 LOCAL_ASSIGN; 2645 VIF_ASSIGN; 2646 STA_ASSIGN; 2647 __entry->ac = txq->txq.ac; 2648 __entry->tid = txq->txq.tid; 2649 ), 2650 2651 TP_printk( 2652 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " ac:%d tid:%d", 2653 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->ac, __entry->tid 2654 ) 2655 ); 2656 2657 TRACE_EVENT(drv_get_ftm_responder_stats, 2658 TP_PROTO(struct ieee80211_local *local, 2659 struct ieee80211_sub_if_data *sdata, 2660 struct cfg80211_ftm_responder_stats *ftm_stats), 2661 2662 TP_ARGS(local, sdata, ftm_stats), 2663 2664 TP_STRUCT__entry( 2665 LOCAL_ENTRY 2666 VIF_ENTRY 2667 ), 2668 2669 TP_fast_assign( 2670 LOCAL_ASSIGN; 2671 VIF_ASSIGN; 2672 ), 2673 2674 TP_printk( 2675 LOCAL_PR_FMT VIF_PR_FMT, 2676 LOCAL_PR_ARG, VIF_PR_ARG 2677 ) 2678 ); 2679 2680 #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ 2681 2682 #undef TRACE_INCLUDE_PATH 2683 #define TRACE_INCLUDE_PATH . 2684 #undef TRACE_INCLUDE_FILE 2685 #define TRACE_INCLUDE_FILE trace 2686 #include <trace/define_trace.h> 2687