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