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