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