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