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