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