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