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-2024, 2026 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 strscpy(__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) : \ 26 eth_zero_addr(__entry->sta_addr)) 27 #define STA_NAMED_ASSIGN(s) memcpy(__entry->sta_addr, (s)->addr, ETH_ALEN) 28 #define STA_PR_FMT " sta:%pM" 29 #define STA_PR_ARG __entry->sta_addr 30 31 #define VIF_ENTRY __field(enum nl80211_iftype, vif_type) __field(void *, sdata) \ 32 __field(bool, p2p) \ 33 __string(vif_name, sdata->name) 34 #define VIF_ASSIGN __entry->vif_type = sdata->vif.type; __entry->sdata = sdata; \ 35 __entry->p2p = sdata->vif.p2p; \ 36 __assign_str(vif_name) 37 #define VIF_PR_FMT " vif:%s(%d%s)" 38 #define VIF_PR_ARG __get_str(vif_name), __entry->vif_type, __entry->p2p ? "/p2p" : "" 39 40 #define __CHANDEF_ENTRY(n) \ 41 __field(u32, n##control_freq) \ 42 __field(u32, n##freq_offset) \ 43 __field(u32, n##chan_width) \ 44 __field(u32, n##center_freq1) \ 45 __field(u32, n##freq1_offset) \ 46 __field(u32, n##center_freq2) \ 47 __field(u16, n##punctured) 48 #define __CHANDEF_ASSIGN(n, c) \ 49 __entry->n##control_freq = (c) && (c)->chan ? \ 50 (c)->chan->center_freq : 0; \ 51 __entry->n##freq_offset = (c) && (c)->chan ? \ 52 (c)->chan->freq_offset : 0; \ 53 __entry->n##chan_width = (c) ? (c)->width : 0; \ 54 __entry->n##center_freq1 = (c) ? (c)->center_freq1 : 0; \ 55 __entry->n##freq1_offset = (c) ? (c)->freq1_offset : 0; \ 56 __entry->n##center_freq2 = (c) ? (c)->center_freq2 : 0; \ 57 __entry->n##punctured = (c) ? (c)->punctured : 0; 58 #define __CHANDEF_PR_FMT(n) \ 59 " " #n "(%d.%03d MHz,width:%d,center: %d.%03d/%d MHz, punct:0x%x)" 60 #define __CHANDEF_PR_ARG(n) \ 61 __entry->n##control_freq, __entry->n##freq_offset, \ 62 __entry->n##chan_width, __entry->n##center_freq1, \ 63 __entry->n##freq1_offset, __entry->n##center_freq2, \ 64 __entry->n##punctured 65 66 #define CHANDEF_ENTRY __CHANDEF_ENTRY() 67 #define CHANDEF_ASSIGN(c) __CHANDEF_ASSIGN(, c) 68 #define CHANDEF_PR_FMT __CHANDEF_PR_FMT(chandef) 69 #define CHANDEF_PR_ARG __CHANDEF_PR_ARG() 70 71 #define MIN_CHANDEF_ENTRY __CHANDEF_ENTRY(min) 72 #define MIN_CHANDEF_ASSIGN(c) __CHANDEF_ASSIGN(min, c) 73 #define MIN_CHANDEF_PR_FMT __CHANDEF_PR_FMT(mindef) 74 #define MIN_CHANDEF_PR_ARG __CHANDEF_PR_ARG(min) 75 76 #define AP_CHANDEF_ENTRY __CHANDEF_ENTRY(ap) 77 #define AP_CHANDEF_ASSIGN(c) __CHANDEF_ASSIGN(ap, c) 78 #define AP_CHANDEF_PR_FMT __CHANDEF_PR_FMT(ap) 79 #define AP_CHANDEF_PR_ARG __CHANDEF_PR_ARG(ap) 80 81 #define CHANCTX_ENTRY CHANDEF_ENTRY \ 82 MIN_CHANDEF_ENTRY \ 83 AP_CHANDEF_ENTRY \ 84 __field(u8, rx_chains_static) \ 85 __field(u8, rx_chains_dynamic) 86 #define CHANCTX_ASSIGN CHANDEF_ASSIGN(&ctx->conf.def) \ 87 MIN_CHANDEF_ASSIGN(&ctx->conf.min_def) \ 88 AP_CHANDEF_ASSIGN(&ctx->conf.ap) \ 89 __entry->rx_chains_static = ctx->conf.rx_chains_static; \ 90 __entry->rx_chains_dynamic = ctx->conf.rx_chains_dynamic 91 #define CHANCTX_PR_FMT CHANDEF_PR_FMT MIN_CHANDEF_PR_FMT AP_CHANDEF_PR_FMT " chains:%d/%d" 92 #define CHANCTX_PR_ARG CHANDEF_PR_ARG, MIN_CHANDEF_PR_ARG, AP_CHANDEF_PR_ARG, \ 93 __entry->rx_chains_static, __entry->rx_chains_dynamic 94 95 #define KEY_ENTRY __field(u32, cipher) \ 96 __field(u8, hw_key_idx) \ 97 __field(u8, flags) \ 98 __field(s8, keyidx) 99 #define KEY_ASSIGN(k) __entry->cipher = (k)->cipher; \ 100 __entry->flags = (k)->flags; \ 101 __entry->keyidx = (k)->keyidx; \ 102 __entry->hw_key_idx = (k)->hw_key_idx; 103 #define KEY_PR_FMT " cipher:0x%x, flags=%#x, keyidx=%d, hw_key_idx=%d" 104 #define KEY_PR_ARG __entry->cipher, __entry->flags, __entry->keyidx, __entry->hw_key_idx 105 106 #define AMPDU_ACTION_ENTRY __field(enum ieee80211_ampdu_mlme_action, \ 107 ieee80211_ampdu_mlme_action) \ 108 STA_ENTRY \ 109 __field(u16, tid) \ 110 __field(u16, ssn) \ 111 __field(u16, buf_size) \ 112 __field(bool, amsdu) \ 113 __field(u16, timeout) \ 114 __field(u16, action) 115 #define AMPDU_ACTION_ASSIGN STA_NAMED_ASSIGN(params->sta); \ 116 __entry->tid = params->tid; \ 117 __entry->ssn = params->ssn; \ 118 __entry->buf_size = params->buf_size; \ 119 __entry->amsdu = params->amsdu; \ 120 __entry->timeout = params->timeout; \ 121 __entry->action = params->action; 122 #define AMPDU_ACTION_PR_FMT STA_PR_FMT " tid %d, ssn %d, buf_size %u, amsdu %d, timeout %d action %d" 123 #define AMPDU_ACTION_PR_ARG STA_PR_ARG, __entry->tid, __entry->ssn, \ 124 __entry->buf_size, __entry->amsdu, __entry->timeout, \ 125 __entry->action 126 127 /* 128 * Tracing for driver callbacks. 129 */ 130 131 DECLARE_EVENT_CLASS(local_only_evt, 132 TP_PROTO(struct ieee80211_local *local), 133 TP_ARGS(local), 134 TP_STRUCT__entry( 135 LOCAL_ENTRY 136 ), 137 TP_fast_assign( 138 LOCAL_ASSIGN; 139 ), 140 TP_printk(LOCAL_PR_FMT, LOCAL_PR_ARG) 141 ); 142 143 DECLARE_EVENT_CLASS(local_sdata_addr_evt, 144 TP_PROTO(struct ieee80211_local *local, 145 struct ieee80211_sub_if_data *sdata), 146 TP_ARGS(local, sdata), 147 148 TP_STRUCT__entry( 149 LOCAL_ENTRY 150 VIF_ENTRY 151 __array(char, addr, ETH_ALEN) 152 ), 153 154 TP_fast_assign( 155 LOCAL_ASSIGN; 156 VIF_ASSIGN; 157 memcpy(__entry->addr, sdata->vif.addr, ETH_ALEN); 158 ), 159 160 TP_printk( 161 LOCAL_PR_FMT VIF_PR_FMT " addr:%pM", 162 LOCAL_PR_ARG, VIF_PR_ARG, __entry->addr 163 ) 164 ); 165 166 DECLARE_EVENT_CLASS(local_u32_evt, 167 TP_PROTO(struct ieee80211_local *local, u32 value), 168 TP_ARGS(local, value), 169 170 TP_STRUCT__entry( 171 LOCAL_ENTRY 172 __field(u32, value) 173 ), 174 175 TP_fast_assign( 176 LOCAL_ASSIGN; 177 __entry->value = value; 178 ), 179 180 TP_printk( 181 LOCAL_PR_FMT " value:%d", 182 LOCAL_PR_ARG, __entry->value 183 ) 184 ); 185 186 DECLARE_EVENT_CLASS(local_sdata_evt, 187 TP_PROTO(struct ieee80211_local *local, 188 struct ieee80211_sub_if_data *sdata), 189 TP_ARGS(local, sdata), 190 191 TP_STRUCT__entry( 192 LOCAL_ENTRY 193 VIF_ENTRY 194 ), 195 196 TP_fast_assign( 197 LOCAL_ASSIGN; 198 VIF_ASSIGN; 199 ), 200 201 TP_printk( 202 LOCAL_PR_FMT VIF_PR_FMT, 203 LOCAL_PR_ARG, VIF_PR_ARG 204 ) 205 ); 206 207 DEFINE_EVENT(local_only_evt, drv_return_void, 208 TP_PROTO(struct ieee80211_local *local), 209 TP_ARGS(local) 210 ); 211 212 TRACE_EVENT(drv_return_int, 213 TP_PROTO(struct ieee80211_local *local, int ret), 214 TP_ARGS(local, ret), 215 TP_STRUCT__entry( 216 LOCAL_ENTRY 217 __field(int, ret) 218 ), 219 TP_fast_assign( 220 LOCAL_ASSIGN; 221 __entry->ret = ret; 222 ), 223 TP_printk(LOCAL_PR_FMT " - %d", LOCAL_PR_ARG, __entry->ret) 224 ); 225 226 TRACE_EVENT(drv_return_bool, 227 TP_PROTO(struct ieee80211_local *local, bool ret), 228 TP_ARGS(local, ret), 229 TP_STRUCT__entry( 230 LOCAL_ENTRY 231 __field(bool, ret) 232 ), 233 TP_fast_assign( 234 LOCAL_ASSIGN; 235 __entry->ret = ret; 236 ), 237 TP_printk(LOCAL_PR_FMT " - %s", LOCAL_PR_ARG, (__entry->ret) ? 238 "true" : "false") 239 ); 240 241 TRACE_EVENT(drv_return_u32, 242 TP_PROTO(struct ieee80211_local *local, u32 ret), 243 TP_ARGS(local, ret), 244 TP_STRUCT__entry( 245 LOCAL_ENTRY 246 __field(u32, ret) 247 ), 248 TP_fast_assign( 249 LOCAL_ASSIGN; 250 __entry->ret = ret; 251 ), 252 TP_printk(LOCAL_PR_FMT " - %u", LOCAL_PR_ARG, __entry->ret) 253 ); 254 255 TRACE_EVENT(drv_return_u64, 256 TP_PROTO(struct ieee80211_local *local, u64 ret), 257 TP_ARGS(local, ret), 258 TP_STRUCT__entry( 259 LOCAL_ENTRY 260 __field(u64, ret) 261 ), 262 TP_fast_assign( 263 LOCAL_ASSIGN; 264 __entry->ret = ret; 265 ), 266 TP_printk(LOCAL_PR_FMT " - %llu", LOCAL_PR_ARG, __entry->ret) 267 ); 268 269 DEFINE_EVENT(local_only_evt, drv_start, 270 TP_PROTO(struct ieee80211_local *local), 271 TP_ARGS(local) 272 ); 273 274 DEFINE_EVENT(local_u32_evt, drv_get_et_strings, 275 TP_PROTO(struct ieee80211_local *local, u32 sset), 276 TP_ARGS(local, sset) 277 ); 278 279 DEFINE_EVENT(local_u32_evt, drv_get_et_sset_count, 280 TP_PROTO(struct ieee80211_local *local, u32 sset), 281 TP_ARGS(local, sset) 282 ); 283 284 DEFINE_EVENT(local_only_evt, drv_get_et_stats, 285 TP_PROTO(struct ieee80211_local *local), 286 TP_ARGS(local) 287 ); 288 289 DEFINE_EVENT(local_only_evt, drv_suspend, 290 TP_PROTO(struct ieee80211_local *local), 291 TP_ARGS(local) 292 ); 293 294 DEFINE_EVENT(local_only_evt, drv_resume, 295 TP_PROTO(struct ieee80211_local *local), 296 TP_ARGS(local) 297 ); 298 299 TRACE_EVENT(drv_set_wakeup, 300 TP_PROTO(struct ieee80211_local *local, bool enabled), 301 TP_ARGS(local, enabled), 302 TP_STRUCT__entry( 303 LOCAL_ENTRY 304 __field(bool, enabled) 305 ), 306 TP_fast_assign( 307 LOCAL_ASSIGN; 308 __entry->enabled = enabled; 309 ), 310 TP_printk(LOCAL_PR_FMT " enabled:%d", LOCAL_PR_ARG, __entry->enabled) 311 ); 312 313 TRACE_EVENT(drv_stop, 314 TP_PROTO(struct ieee80211_local *local, bool suspend), 315 TP_ARGS(local, suspend), 316 TP_STRUCT__entry( 317 LOCAL_ENTRY 318 __field(bool, suspend) 319 ), 320 TP_fast_assign( 321 LOCAL_ASSIGN; 322 __entry->suspend = suspend; 323 ), 324 TP_printk(LOCAL_PR_FMT " suspend:%d", LOCAL_PR_ARG, __entry->suspend) 325 ); 326 327 DEFINE_EVENT(local_sdata_addr_evt, drv_add_interface, 328 TP_PROTO(struct ieee80211_local *local, 329 struct ieee80211_sub_if_data *sdata), 330 TP_ARGS(local, sdata) 331 ); 332 333 TRACE_EVENT(drv_change_interface, 334 TP_PROTO(struct ieee80211_local *local, 335 struct ieee80211_sub_if_data *sdata, 336 enum nl80211_iftype type, bool p2p), 337 338 TP_ARGS(local, sdata, type, p2p), 339 340 TP_STRUCT__entry( 341 LOCAL_ENTRY 342 VIF_ENTRY 343 __field(u32, new_type) 344 __field(bool, new_p2p) 345 ), 346 347 TP_fast_assign( 348 LOCAL_ASSIGN; 349 VIF_ASSIGN; 350 __entry->new_type = type; 351 __entry->new_p2p = p2p; 352 ), 353 354 TP_printk( 355 LOCAL_PR_FMT VIF_PR_FMT " new type:%d%s", 356 LOCAL_PR_ARG, VIF_PR_ARG, __entry->new_type, 357 __entry->new_p2p ? "/p2p" : "" 358 ) 359 ); 360 361 DEFINE_EVENT(local_sdata_addr_evt, drv_remove_interface, 362 TP_PROTO(struct ieee80211_local *local, 363 struct ieee80211_sub_if_data *sdata), 364 TP_ARGS(local, sdata) 365 ); 366 367 TRACE_EVENT(drv_config, 368 TP_PROTO(struct ieee80211_local *local, 369 int radio_idx, 370 u32 changed), 371 372 TP_ARGS(local, radio_idx, changed), 373 374 TP_STRUCT__entry( 375 LOCAL_ENTRY 376 __field(int, radio_idx) 377 __field(u32, changed) 378 __field(u32, flags) 379 __field(int, power_level) 380 __field(int, dynamic_ps_timeout) 381 __field(u16, listen_interval) 382 __field(u8, long_frame_max_tx_count) 383 __field(u8, short_frame_max_tx_count) 384 CHANDEF_ENTRY 385 __field(int, smps) 386 ), 387 388 TP_fast_assign( 389 LOCAL_ASSIGN; 390 __entry->radio_idx = radio_idx; 391 __entry->changed = changed; 392 __entry->flags = local->hw.conf.flags; 393 __entry->power_level = local->hw.conf.power_level; 394 __entry->dynamic_ps_timeout = local->hw.conf.dynamic_ps_timeout; 395 __entry->listen_interval = local->hw.conf.listen_interval; 396 __entry->long_frame_max_tx_count = 397 local->hw.conf.long_frame_max_tx_count; 398 __entry->short_frame_max_tx_count = 399 local->hw.conf.short_frame_max_tx_count; 400 CHANDEF_ASSIGN(&local->hw.conf.chandef) 401 __entry->smps = local->hw.conf.smps_mode; 402 ), 403 404 TP_printk( 405 LOCAL_PR_FMT " radio_idx:%d ch:%#x" CHANDEF_PR_FMT, 406 LOCAL_PR_ARG, __entry->radio_idx, __entry->changed, CHANDEF_PR_ARG 407 ) 408 ); 409 410 TRACE_EVENT(drv_vif_cfg_changed, 411 TP_PROTO(struct ieee80211_local *local, 412 struct ieee80211_sub_if_data *sdata, 413 u64 changed), 414 415 TP_ARGS(local, sdata, changed), 416 417 TP_STRUCT__entry( 418 LOCAL_ENTRY 419 VIF_ENTRY 420 __field(u64, changed) 421 __field(bool, assoc) 422 __field(bool, ibss_joined) 423 __field(bool, ibss_creator) 424 __field(u16, aid) 425 __dynamic_array(u32, arp_addr_list, 426 sdata->vif.cfg.arp_addr_cnt > IEEE80211_BSS_ARP_ADDR_LIST_LEN ? 427 IEEE80211_BSS_ARP_ADDR_LIST_LEN : 428 sdata->vif.cfg.arp_addr_cnt) 429 __field(int, arp_addr_cnt) 430 __dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len) 431 __field(int, s1g) 432 __field(bool, idle) 433 __field(bool, ps) 434 ), 435 436 TP_fast_assign( 437 LOCAL_ASSIGN; 438 VIF_ASSIGN; 439 __entry->changed = changed; 440 __entry->aid = sdata->vif.cfg.aid; 441 __entry->assoc = sdata->vif.cfg.assoc; 442 __entry->ibss_joined = sdata->vif.cfg.ibss_joined; 443 __entry->ibss_creator = sdata->vif.cfg.ibss_creator; 444 __entry->ps = sdata->vif.cfg.ps; 445 446 __entry->arp_addr_cnt = sdata->vif.cfg.arp_addr_cnt; 447 memcpy(__get_dynamic_array(arp_addr_list), 448 sdata->vif.cfg.arp_addr_list, 449 sizeof(u32) * (sdata->vif.cfg.arp_addr_cnt > IEEE80211_BSS_ARP_ADDR_LIST_LEN ? 450 IEEE80211_BSS_ARP_ADDR_LIST_LEN : 451 sdata->vif.cfg.arp_addr_cnt)); 452 memcpy(__get_dynamic_array(ssid), 453 sdata->vif.cfg.ssid, 454 sdata->vif.cfg.ssid_len); 455 __entry->s1g = sdata->vif.cfg.s1g; 456 __entry->idle = sdata->vif.cfg.idle; 457 ), 458 459 TP_printk( 460 LOCAL_PR_FMT VIF_PR_FMT " changed:%#llx", 461 LOCAL_PR_ARG, VIF_PR_ARG, __entry->changed 462 ) 463 ); 464 465 TRACE_EVENT(drv_link_info_changed, 466 TP_PROTO(struct ieee80211_local *local, 467 struct ieee80211_sub_if_data *sdata, 468 struct ieee80211_bss_conf *link_conf, 469 u64 changed), 470 471 TP_ARGS(local, sdata, link_conf, changed), 472 473 TP_STRUCT__entry( 474 LOCAL_ENTRY 475 VIF_ENTRY 476 __field(u64, changed) 477 __field(int, link_id) 478 __field(bool, cts) 479 __field(bool, shortpre) 480 __field(bool, shortslot) 481 __field(bool, enable_beacon) 482 __field(u8, dtimper) 483 __field(u16, bcnint) 484 __field(u16, assoc_cap) 485 __field(u64, sync_tsf) 486 __field(u32, sync_device_ts) 487 __field(u8, sync_dtim_count) 488 __field(u32, basic_rates) 489 __array(int, mcast_rate, NUM_NL80211_BANDS) 490 __field(u16, ht_operation_mode) 491 __field(s32, cqm_rssi_thold) 492 __field(s32, cqm_rssi_hyst) 493 __field(u32, channel_width) 494 __field(u32, channel_cfreq1) 495 __field(u32, channel_cfreq1_offset) 496 __field(bool, qos) 497 __field(bool, hidden_ssid) 498 __field(int, txpower) 499 __field(u8, p2p_oppps_ctwindow) 500 ), 501 502 TP_fast_assign( 503 LOCAL_ASSIGN; 504 VIF_ASSIGN; 505 __entry->changed = changed; 506 __entry->link_id = link_conf->link_id; 507 __entry->shortpre = link_conf->use_short_preamble; 508 __entry->cts = link_conf->use_cts_prot; 509 __entry->shortslot = link_conf->use_short_slot; 510 __entry->enable_beacon = link_conf->enable_beacon; 511 __entry->dtimper = link_conf->dtim_period; 512 __entry->bcnint = link_conf->beacon_int; 513 __entry->assoc_cap = link_conf->assoc_capability; 514 __entry->sync_tsf = link_conf->sync_tsf; 515 __entry->sync_device_ts = link_conf->sync_device_ts; 516 __entry->sync_dtim_count = link_conf->sync_dtim_count; 517 __entry->basic_rates = link_conf->basic_rates; 518 memcpy(__entry->mcast_rate, link_conf->mcast_rate, 519 sizeof(__entry->mcast_rate)); 520 __entry->ht_operation_mode = link_conf->ht_operation_mode; 521 __entry->cqm_rssi_thold = link_conf->cqm_rssi_thold; 522 __entry->cqm_rssi_hyst = link_conf->cqm_rssi_hyst; 523 __entry->channel_width = link_conf->chanreq.oper.width; 524 __entry->channel_cfreq1 = link_conf->chanreq.oper.center_freq1; 525 __entry->channel_cfreq1_offset = link_conf->chanreq.oper.freq1_offset; 526 __entry->qos = link_conf->qos; 527 __entry->hidden_ssid = link_conf->hidden_ssid; 528 __entry->txpower = link_conf->txpower; 529 __entry->p2p_oppps_ctwindow = link_conf->p2p_noa_attr.oppps_ctwindow; 530 ), 531 532 TP_printk( 533 LOCAL_PR_FMT VIF_PR_FMT " link_id:%d, changed:%#llx", 534 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, 535 __entry->changed 536 ) 537 ); 538 539 TRACE_EVENT(drv_prepare_multicast, 540 TP_PROTO(struct ieee80211_local *local, int mc_count), 541 542 TP_ARGS(local, mc_count), 543 544 TP_STRUCT__entry( 545 LOCAL_ENTRY 546 __field(int, mc_count) 547 ), 548 549 TP_fast_assign( 550 LOCAL_ASSIGN; 551 __entry->mc_count = mc_count; 552 ), 553 554 TP_printk( 555 LOCAL_PR_FMT " prepare mc (%d)", 556 LOCAL_PR_ARG, __entry->mc_count 557 ) 558 ); 559 560 TRACE_EVENT(drv_configure_filter, 561 TP_PROTO(struct ieee80211_local *local, 562 unsigned int changed_flags, 563 unsigned int *total_flags, 564 u64 multicast), 565 566 TP_ARGS(local, changed_flags, total_flags, multicast), 567 568 TP_STRUCT__entry( 569 LOCAL_ENTRY 570 __field(unsigned int, changed) 571 __field(unsigned int, total) 572 __field(u64, multicast) 573 ), 574 575 TP_fast_assign( 576 LOCAL_ASSIGN; 577 __entry->changed = changed_flags; 578 __entry->total = *total_flags; 579 __entry->multicast = multicast; 580 ), 581 582 TP_printk( 583 LOCAL_PR_FMT " changed:%#x total:%#x", 584 LOCAL_PR_ARG, __entry->changed, __entry->total 585 ) 586 ); 587 588 TRACE_EVENT(drv_config_iface_filter, 589 TP_PROTO(struct ieee80211_local *local, 590 struct ieee80211_sub_if_data *sdata, 591 unsigned int filter_flags, 592 unsigned int changed_flags), 593 594 TP_ARGS(local, sdata, filter_flags, changed_flags), 595 596 TP_STRUCT__entry( 597 LOCAL_ENTRY 598 VIF_ENTRY 599 __field(unsigned int, filter_flags) 600 __field(unsigned int, changed_flags) 601 ), 602 603 TP_fast_assign( 604 LOCAL_ASSIGN; 605 VIF_ASSIGN; 606 __entry->filter_flags = filter_flags; 607 __entry->changed_flags = changed_flags; 608 ), 609 610 TP_printk( 611 LOCAL_PR_FMT VIF_PR_FMT 612 " filter_flags: %#x changed_flags: %#x", 613 LOCAL_PR_ARG, VIF_PR_ARG, __entry->filter_flags, 614 __entry->changed_flags 615 ) 616 ); 617 618 TRACE_EVENT(drv_set_tim, 619 TP_PROTO(struct ieee80211_local *local, 620 struct ieee80211_sta *sta, bool set), 621 622 TP_ARGS(local, sta, set), 623 624 TP_STRUCT__entry( 625 LOCAL_ENTRY 626 STA_ENTRY 627 __field(bool, set) 628 ), 629 630 TP_fast_assign( 631 LOCAL_ASSIGN; 632 STA_ASSIGN; 633 __entry->set = set; 634 ), 635 636 TP_printk( 637 LOCAL_PR_FMT STA_PR_FMT " set:%d", 638 LOCAL_PR_ARG, STA_PR_ARG, __entry->set 639 ) 640 ); 641 642 TRACE_EVENT(drv_set_key, 643 TP_PROTO(struct ieee80211_local *local, 644 enum set_key_cmd cmd, struct ieee80211_sub_if_data *sdata, 645 struct ieee80211_sta *sta, 646 struct ieee80211_key_conf *key), 647 648 TP_ARGS(local, cmd, sdata, sta, key), 649 650 TP_STRUCT__entry( 651 LOCAL_ENTRY 652 VIF_ENTRY 653 STA_ENTRY 654 __field(u32, cmd) 655 KEY_ENTRY 656 ), 657 658 TP_fast_assign( 659 LOCAL_ASSIGN; 660 VIF_ASSIGN; 661 STA_ASSIGN; 662 __entry->cmd = cmd; 663 KEY_ASSIGN(key); 664 ), 665 666 TP_printk( 667 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " cmd: %d" KEY_PR_FMT, 668 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd, KEY_PR_ARG 669 ) 670 ); 671 672 TRACE_EVENT(drv_update_tkip_key, 673 TP_PROTO(struct ieee80211_local *local, 674 struct ieee80211_sub_if_data *sdata, 675 struct ieee80211_key_conf *conf, 676 struct ieee80211_sta *sta, u32 iv32), 677 678 TP_ARGS(local, sdata, conf, sta, iv32), 679 680 TP_STRUCT__entry( 681 LOCAL_ENTRY 682 VIF_ENTRY 683 STA_ENTRY 684 __field(u32, iv32) 685 ), 686 687 TP_fast_assign( 688 LOCAL_ASSIGN; 689 VIF_ASSIGN; 690 STA_ASSIGN; 691 __entry->iv32 = iv32; 692 ), 693 694 TP_printk( 695 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " iv32:%#x", 696 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->iv32 697 ) 698 ); 699 700 DEFINE_EVENT(local_sdata_evt, drv_hw_scan, 701 TP_PROTO(struct ieee80211_local *local, 702 struct ieee80211_sub_if_data *sdata), 703 TP_ARGS(local, sdata) 704 ); 705 706 DEFINE_EVENT(local_sdata_evt, drv_cancel_hw_scan, 707 TP_PROTO(struct ieee80211_local *local, 708 struct ieee80211_sub_if_data *sdata), 709 TP_ARGS(local, sdata) 710 ); 711 712 DEFINE_EVENT(local_sdata_evt, drv_sched_scan_start, 713 TP_PROTO(struct ieee80211_local *local, 714 struct ieee80211_sub_if_data *sdata), 715 TP_ARGS(local, sdata) 716 ); 717 718 DEFINE_EVENT(local_sdata_evt, drv_sched_scan_stop, 719 TP_PROTO(struct ieee80211_local *local, 720 struct ieee80211_sub_if_data *sdata), 721 TP_ARGS(local, sdata) 722 ); 723 724 TRACE_EVENT(drv_sw_scan_start, 725 TP_PROTO(struct ieee80211_local *local, 726 struct ieee80211_sub_if_data *sdata, 727 const u8 *mac_addr), 728 729 TP_ARGS(local, sdata, mac_addr), 730 731 TP_STRUCT__entry( 732 LOCAL_ENTRY 733 VIF_ENTRY 734 __array(char, mac_addr, ETH_ALEN) 735 ), 736 737 TP_fast_assign( 738 LOCAL_ASSIGN; 739 VIF_ASSIGN; 740 memcpy(__entry->mac_addr, mac_addr, ETH_ALEN); 741 ), 742 743 TP_printk(LOCAL_PR_FMT ", " VIF_PR_FMT ", addr:%pM", 744 LOCAL_PR_ARG, VIF_PR_ARG, __entry->mac_addr) 745 ); 746 747 DEFINE_EVENT(local_sdata_evt, drv_sw_scan_complete, 748 TP_PROTO(struct ieee80211_local *local, 749 struct ieee80211_sub_if_data *sdata), 750 TP_ARGS(local, sdata) 751 ); 752 753 TRACE_EVENT(drv_get_stats, 754 TP_PROTO(struct ieee80211_local *local, 755 struct ieee80211_low_level_stats *stats, 756 int ret), 757 758 TP_ARGS(local, stats, ret), 759 760 TP_STRUCT__entry( 761 LOCAL_ENTRY 762 __field(int, ret) 763 __field(unsigned int, ackfail) 764 __field(unsigned int, rtsfail) 765 __field(unsigned int, fcserr) 766 __field(unsigned int, rtssucc) 767 ), 768 769 TP_fast_assign( 770 LOCAL_ASSIGN; 771 __entry->ret = ret; 772 __entry->ackfail = stats->dot11ACKFailureCount; 773 __entry->rtsfail = stats->dot11RTSFailureCount; 774 __entry->fcserr = stats->dot11FCSErrorCount; 775 __entry->rtssucc = stats->dot11RTSSuccessCount; 776 ), 777 778 TP_printk( 779 LOCAL_PR_FMT " ret:%d", 780 LOCAL_PR_ARG, __entry->ret 781 ) 782 ); 783 784 TRACE_EVENT(drv_get_key_seq, 785 TP_PROTO(struct ieee80211_local *local, 786 struct ieee80211_key_conf *key), 787 788 TP_ARGS(local, key), 789 790 TP_STRUCT__entry( 791 LOCAL_ENTRY 792 KEY_ENTRY 793 ), 794 795 TP_fast_assign( 796 LOCAL_ASSIGN; 797 KEY_ASSIGN(key); 798 ), 799 800 TP_printk( 801 LOCAL_PR_FMT KEY_PR_FMT, 802 LOCAL_PR_ARG, KEY_PR_ARG 803 ) 804 ); 805 806 TRACE_EVENT(drv_set_frag_threshold, 807 TP_PROTO(struct ieee80211_local *local, int radio_idx, u32 value), 808 809 TP_ARGS(local, radio_idx, value), 810 811 TP_STRUCT__entry( 812 LOCAL_ENTRY 813 __field(int, radio_idx) 814 __field(u32, value) 815 ), 816 817 TP_fast_assign( 818 LOCAL_ASSIGN; 819 __entry->radio_idx = radio_idx; 820 __entry->value = value; 821 ), 822 823 TP_printk( 824 LOCAL_PR_FMT " radio_id:%d value:%u", 825 LOCAL_PR_ARG, __entry->radio_idx, __entry->value 826 ) 827 ); 828 829 TRACE_EVENT(drv_set_rts_threshold, 830 TP_PROTO(struct ieee80211_local *local, int radio_idx, u32 value), 831 832 TP_ARGS(local, radio_idx, value), 833 834 TP_STRUCT__entry( 835 LOCAL_ENTRY 836 __field(int, radio_idx) 837 __field(u32, value) 838 ), 839 TP_fast_assign( 840 LOCAL_ASSIGN; 841 __entry->radio_idx = radio_idx; 842 __entry->value = value; 843 ), 844 845 TP_printk( 846 LOCAL_PR_FMT " radio_id:%d value:%u", 847 LOCAL_PR_ARG, __entry->radio_idx, __entry->value 848 ) 849 ); 850 851 TRACE_EVENT(drv_set_coverage_class, 852 TP_PROTO(struct ieee80211_local *local, int radio_idx, s16 value), 853 854 TP_ARGS(local, radio_idx, value), 855 856 TP_STRUCT__entry( 857 LOCAL_ENTRY 858 __field(int, radio_idx) 859 __field(s16, value) 860 ), 861 862 TP_fast_assign( 863 LOCAL_ASSIGN; 864 __entry->radio_idx = radio_idx; 865 __entry->value = value; 866 ), 867 868 TP_printk( 869 LOCAL_PR_FMT " radio_id:%d value:%d", 870 LOCAL_PR_ARG, __entry->radio_idx, __entry->value 871 ) 872 ); 873 874 TRACE_EVENT(drv_sta_notify, 875 TP_PROTO(struct ieee80211_local *local, 876 struct ieee80211_sub_if_data *sdata, 877 enum sta_notify_cmd cmd, 878 struct ieee80211_sta *sta), 879 880 TP_ARGS(local, sdata, cmd, sta), 881 882 TP_STRUCT__entry( 883 LOCAL_ENTRY 884 VIF_ENTRY 885 STA_ENTRY 886 __field(u32, cmd) 887 ), 888 889 TP_fast_assign( 890 LOCAL_ASSIGN; 891 VIF_ASSIGN; 892 STA_ASSIGN; 893 __entry->cmd = cmd; 894 ), 895 896 TP_printk( 897 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " cmd:%d", 898 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->cmd 899 ) 900 ); 901 902 TRACE_EVENT(drv_sta_state, 903 TP_PROTO(struct ieee80211_local *local, 904 struct ieee80211_sub_if_data *sdata, 905 struct ieee80211_sta *sta, 906 enum ieee80211_sta_state old_state, 907 enum ieee80211_sta_state new_state), 908 909 TP_ARGS(local, sdata, sta, old_state, new_state), 910 911 TP_STRUCT__entry( 912 LOCAL_ENTRY 913 VIF_ENTRY 914 STA_ENTRY 915 __field(u32, old_state) 916 __field(u32, new_state) 917 ), 918 919 TP_fast_assign( 920 LOCAL_ASSIGN; 921 VIF_ASSIGN; 922 STA_ASSIGN; 923 __entry->old_state = old_state; 924 __entry->new_state = new_state; 925 ), 926 927 TP_printk( 928 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " state: %d->%d", 929 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, 930 __entry->old_state, __entry->new_state 931 ) 932 ); 933 934 TRACE_EVENT(drv_sta_set_txpwr, 935 TP_PROTO(struct ieee80211_local *local, 936 struct ieee80211_sub_if_data *sdata, 937 struct ieee80211_sta *sta), 938 939 TP_ARGS(local, sdata, sta), 940 941 TP_STRUCT__entry( 942 LOCAL_ENTRY 943 VIF_ENTRY 944 STA_ENTRY 945 __field(s16, txpwr) 946 __field(u8, type) 947 ), 948 949 TP_fast_assign( 950 LOCAL_ASSIGN; 951 VIF_ASSIGN; 952 STA_ASSIGN; 953 __entry->txpwr = sta->deflink.txpwr.power; 954 __entry->type = sta->deflink.txpwr.type; 955 ), 956 957 TP_printk( 958 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " txpwr: %d type %d", 959 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, 960 __entry->txpwr, __entry->type 961 ) 962 ); 963 964 TRACE_EVENT(drv_link_sta_rc_update, 965 TP_PROTO(struct ieee80211_local *local, 966 struct ieee80211_sub_if_data *sdata, 967 struct ieee80211_link_sta *link_sta, 968 u32 changed), 969 970 TP_ARGS(local, sdata, link_sta, changed), 971 972 TP_STRUCT__entry( 973 LOCAL_ENTRY 974 VIF_ENTRY 975 STA_ENTRY 976 __field(u32, changed) 977 __field(u32, link_id) 978 ), 979 980 TP_fast_assign( 981 LOCAL_ASSIGN; 982 VIF_ASSIGN; 983 STA_NAMED_ASSIGN(link_sta->sta); 984 __entry->changed = changed; 985 __entry->link_id = link_sta->link_id; 986 ), 987 988 TP_printk( 989 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " (link %d) changed: 0x%x", 990 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->link_id, 991 __entry->changed 992 ) 993 ); 994 995 DECLARE_EVENT_CLASS(sta_event, 996 TP_PROTO(struct ieee80211_local *local, 997 struct ieee80211_sub_if_data *sdata, 998 struct ieee80211_sta *sta), 999 1000 TP_ARGS(local, sdata, sta), 1001 1002 TP_STRUCT__entry( 1003 LOCAL_ENTRY 1004 VIF_ENTRY 1005 STA_ENTRY 1006 ), 1007 1008 TP_fast_assign( 1009 LOCAL_ASSIGN; 1010 VIF_ASSIGN; 1011 STA_ASSIGN; 1012 ), 1013 1014 TP_printk( 1015 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT, 1016 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG 1017 ) 1018 ); 1019 1020 DEFINE_EVENT(sta_event, drv_sta_statistics, 1021 TP_PROTO(struct ieee80211_local *local, 1022 struct ieee80211_sub_if_data *sdata, 1023 struct ieee80211_sta *sta), 1024 TP_ARGS(local, sdata, sta) 1025 ); 1026 1027 TRACE_EVENT(drv_link_sta_statistics, 1028 TP_PROTO(struct ieee80211_local *local, 1029 struct ieee80211_sub_if_data *sdata, 1030 struct ieee80211_link_sta *link_sta), 1031 1032 TP_ARGS(local, sdata, link_sta), 1033 1034 TP_STRUCT__entry( 1035 LOCAL_ENTRY 1036 VIF_ENTRY 1037 STA_ENTRY 1038 __field(u32, link_id) 1039 ), 1040 1041 TP_fast_assign( 1042 LOCAL_ASSIGN; 1043 VIF_ASSIGN; 1044 STA_NAMED_ASSIGN(link_sta->sta); 1045 __entry->link_id = link_sta->link_id; 1046 ), 1047 1048 TP_printk( 1049 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " (link %d)", 1050 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->link_id 1051 ) 1052 ); 1053 1054 DEFINE_EVENT(sta_event, drv_sta_add, 1055 TP_PROTO(struct ieee80211_local *local, 1056 struct ieee80211_sub_if_data *sdata, 1057 struct ieee80211_sta *sta), 1058 TP_ARGS(local, sdata, sta) 1059 ); 1060 1061 DEFINE_EVENT(sta_event, drv_sta_remove, 1062 TP_PROTO(struct ieee80211_local *local, 1063 struct ieee80211_sub_if_data *sdata, 1064 struct ieee80211_sta *sta), 1065 TP_ARGS(local, sdata, sta) 1066 ); 1067 1068 DEFINE_EVENT(sta_event, drv_sta_pre_rcu_remove, 1069 TP_PROTO(struct ieee80211_local *local, 1070 struct ieee80211_sub_if_data *sdata, 1071 struct ieee80211_sta *sta), 1072 TP_ARGS(local, sdata, sta) 1073 ); 1074 1075 DEFINE_EVENT(sta_event, drv_sync_rx_queues, 1076 TP_PROTO(struct ieee80211_local *local, 1077 struct ieee80211_sub_if_data *sdata, 1078 struct ieee80211_sta *sta), 1079 TP_ARGS(local, sdata, sta) 1080 ); 1081 1082 DEFINE_EVENT(sta_event, drv_sta_rate_tbl_update, 1083 TP_PROTO(struct ieee80211_local *local, 1084 struct ieee80211_sub_if_data *sdata, 1085 struct ieee80211_sta *sta), 1086 TP_ARGS(local, sdata, sta) 1087 ); 1088 1089 TRACE_EVENT(drv_conf_tx, 1090 TP_PROTO(struct ieee80211_local *local, 1091 struct ieee80211_sub_if_data *sdata, 1092 unsigned int link_id, 1093 u16 ac, const struct ieee80211_tx_queue_params *params), 1094 1095 TP_ARGS(local, sdata, link_id, ac, params), 1096 1097 TP_STRUCT__entry( 1098 LOCAL_ENTRY 1099 VIF_ENTRY 1100 __field(unsigned int, link_id) 1101 __field(u16, ac) 1102 __field(u16, txop) 1103 __field(u16, cw_min) 1104 __field(u16, cw_max) 1105 __field(u8, aifs) 1106 __field(bool, uapsd) 1107 ), 1108 1109 TP_fast_assign( 1110 LOCAL_ASSIGN; 1111 VIF_ASSIGN; 1112 __entry->link_id = link_id; 1113 __entry->ac = ac; 1114 __entry->txop = params->txop; 1115 __entry->cw_max = params->cw_max; 1116 __entry->cw_min = params->cw_min; 1117 __entry->aifs = params->aifs; 1118 __entry->uapsd = params->uapsd; 1119 ), 1120 1121 TP_printk( 1122 LOCAL_PR_FMT VIF_PR_FMT " link_id: %d, AC:%d", 1123 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, __entry->ac 1124 ) 1125 ); 1126 1127 DEFINE_EVENT(local_sdata_evt, drv_get_tsf, 1128 TP_PROTO(struct ieee80211_local *local, 1129 struct ieee80211_sub_if_data *sdata), 1130 TP_ARGS(local, sdata) 1131 ); 1132 1133 TRACE_EVENT(drv_set_tsf, 1134 TP_PROTO(struct ieee80211_local *local, 1135 struct ieee80211_sub_if_data *sdata, 1136 u64 tsf), 1137 1138 TP_ARGS(local, sdata, tsf), 1139 1140 TP_STRUCT__entry( 1141 LOCAL_ENTRY 1142 VIF_ENTRY 1143 __field(u64, tsf) 1144 ), 1145 1146 TP_fast_assign( 1147 LOCAL_ASSIGN; 1148 VIF_ASSIGN; 1149 __entry->tsf = tsf; 1150 ), 1151 1152 TP_printk( 1153 LOCAL_PR_FMT VIF_PR_FMT " tsf:%llu", 1154 LOCAL_PR_ARG, VIF_PR_ARG, (unsigned long long)__entry->tsf 1155 ) 1156 ); 1157 1158 TRACE_EVENT(drv_offset_tsf, 1159 TP_PROTO(struct ieee80211_local *local, 1160 struct ieee80211_sub_if_data *sdata, 1161 s64 offset), 1162 1163 TP_ARGS(local, sdata, offset), 1164 1165 TP_STRUCT__entry( 1166 LOCAL_ENTRY 1167 VIF_ENTRY 1168 __field(s64, tsf_offset) 1169 ), 1170 1171 TP_fast_assign( 1172 LOCAL_ASSIGN; 1173 VIF_ASSIGN; 1174 __entry->tsf_offset = offset; 1175 ), 1176 1177 TP_printk( 1178 LOCAL_PR_FMT VIF_PR_FMT " tsf offset:%lld", 1179 LOCAL_PR_ARG, VIF_PR_ARG, 1180 (unsigned long long)__entry->tsf_offset 1181 ) 1182 ); 1183 1184 DEFINE_EVENT(local_sdata_evt, drv_reset_tsf, 1185 TP_PROTO(struct ieee80211_local *local, 1186 struct ieee80211_sub_if_data *sdata), 1187 TP_ARGS(local, sdata) 1188 ); 1189 1190 DEFINE_EVENT(local_only_evt, drv_tx_last_beacon, 1191 TP_PROTO(struct ieee80211_local *local), 1192 TP_ARGS(local) 1193 ); 1194 1195 TRACE_EVENT(drv_ampdu_action, 1196 TP_PROTO(struct ieee80211_local *local, 1197 struct ieee80211_sub_if_data *sdata, 1198 struct ieee80211_ampdu_params *params), 1199 1200 TP_ARGS(local, sdata, params), 1201 1202 TP_STRUCT__entry( 1203 LOCAL_ENTRY 1204 VIF_ENTRY 1205 AMPDU_ACTION_ENTRY 1206 ), 1207 1208 TP_fast_assign( 1209 LOCAL_ASSIGN; 1210 VIF_ASSIGN; 1211 AMPDU_ACTION_ASSIGN; 1212 ), 1213 1214 TP_printk( 1215 LOCAL_PR_FMT VIF_PR_FMT AMPDU_ACTION_PR_FMT, 1216 LOCAL_PR_ARG, VIF_PR_ARG, AMPDU_ACTION_PR_ARG 1217 ) 1218 ); 1219 1220 TRACE_EVENT(drv_get_survey, 1221 TP_PROTO(struct ieee80211_local *local, int _idx, 1222 struct survey_info *survey), 1223 1224 TP_ARGS(local, _idx, survey), 1225 1226 TP_STRUCT__entry( 1227 LOCAL_ENTRY 1228 __field(int, idx) 1229 ), 1230 1231 TP_fast_assign( 1232 LOCAL_ASSIGN; 1233 __entry->idx = _idx; 1234 ), 1235 1236 TP_printk( 1237 LOCAL_PR_FMT " idx:%d", 1238 LOCAL_PR_ARG, __entry->idx 1239 ) 1240 ); 1241 1242 TRACE_EVENT(drv_flush, 1243 TP_PROTO(struct ieee80211_local *local, 1244 u32 queues, bool drop), 1245 1246 TP_ARGS(local, queues, drop), 1247 1248 TP_STRUCT__entry( 1249 LOCAL_ENTRY 1250 __field(bool, drop) 1251 __field(u32, queues) 1252 ), 1253 1254 TP_fast_assign( 1255 LOCAL_ASSIGN; 1256 __entry->drop = drop; 1257 __entry->queues = queues; 1258 ), 1259 1260 TP_printk( 1261 LOCAL_PR_FMT " queues:0x%x drop:%d", 1262 LOCAL_PR_ARG, __entry->queues, __entry->drop 1263 ) 1264 ); 1265 1266 DEFINE_EVENT(sta_event, drv_flush_sta, 1267 TP_PROTO(struct ieee80211_local *local, 1268 struct ieee80211_sub_if_data *sdata, 1269 struct ieee80211_sta *sta), 1270 TP_ARGS(local, sdata, sta) 1271 ); 1272 1273 DECLARE_EVENT_CLASS(chanswitch_evt, 1274 TP_PROTO(struct ieee80211_local *local, 1275 struct ieee80211_sub_if_data *sdata, 1276 struct ieee80211_channel_switch *ch_switch), 1277 1278 TP_ARGS(local, sdata, ch_switch), 1279 1280 TP_STRUCT__entry( 1281 LOCAL_ENTRY 1282 VIF_ENTRY 1283 CHANDEF_ENTRY 1284 __field(u64, timestamp) 1285 __field(u32, device_timestamp) 1286 __field(bool, block_tx) 1287 __field(u8, count) 1288 __field(u8, link_id) 1289 ), 1290 1291 TP_fast_assign( 1292 LOCAL_ASSIGN; 1293 VIF_ASSIGN; 1294 CHANDEF_ASSIGN(&ch_switch->chandef) 1295 __entry->timestamp = ch_switch->timestamp; 1296 __entry->device_timestamp = ch_switch->device_timestamp; 1297 __entry->block_tx = ch_switch->block_tx; 1298 __entry->count = ch_switch->count; 1299 __entry->link_id = ch_switch->link_id; 1300 ), 1301 1302 TP_printk( 1303 LOCAL_PR_FMT VIF_PR_FMT CHANDEF_PR_FMT " count:%d block_tx:%d timestamp:%llu device_ts:%u link_id:%d", 1304 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->count, 1305 __entry->block_tx, __entry->timestamp, 1306 __entry->device_timestamp, __entry->link_id 1307 ) 1308 ); 1309 1310 DEFINE_EVENT(chanswitch_evt, drv_channel_switch, 1311 TP_PROTO(struct ieee80211_local *local, 1312 struct ieee80211_sub_if_data *sdata, 1313 struct ieee80211_channel_switch *ch_switch), 1314 TP_ARGS(local, sdata, ch_switch) 1315 ); 1316 1317 TRACE_EVENT(drv_set_antenna, 1318 TP_PROTO(struct ieee80211_local *local, u32 tx_ant, u32 rx_ant, int ret), 1319 1320 TP_ARGS(local, tx_ant, rx_ant, ret), 1321 1322 TP_STRUCT__entry( 1323 LOCAL_ENTRY 1324 __field(u32, tx_ant) 1325 __field(u32, rx_ant) 1326 __field(int, ret) 1327 ), 1328 1329 TP_fast_assign( 1330 LOCAL_ASSIGN; 1331 __entry->tx_ant = tx_ant; 1332 __entry->rx_ant = rx_ant; 1333 __entry->ret = ret; 1334 ), 1335 1336 TP_printk( 1337 LOCAL_PR_FMT " tx_ant:%d rx_ant:%d ret:%d", 1338 LOCAL_PR_ARG, __entry->tx_ant, __entry->rx_ant, __entry->ret 1339 ) 1340 ); 1341 1342 TRACE_EVENT(drv_get_antenna, 1343 TP_PROTO(struct ieee80211_local *local, int radio_idx, u32 tx_ant, 1344 u32 rx_ant, int ret), 1345 1346 TP_ARGS(local, radio_idx, tx_ant, rx_ant, ret), 1347 1348 TP_STRUCT__entry( 1349 LOCAL_ENTRY 1350 __field(int, radio_idx) 1351 __field(u32, tx_ant) 1352 __field(u32, rx_ant) 1353 __field(int, ret) 1354 ), 1355 1356 TP_fast_assign( 1357 LOCAL_ASSIGN; 1358 __entry->radio_idx = radio_idx; 1359 __entry->tx_ant = tx_ant; 1360 __entry->rx_ant = rx_ant; 1361 __entry->ret = ret; 1362 ), 1363 1364 TP_printk( 1365 LOCAL_PR_FMT " radio_idx:%d tx_ant:%d rx_ant:%d ret:%d", 1366 LOCAL_PR_ARG, __entry->radio_idx, __entry->tx_ant, 1367 __entry->rx_ant, __entry->ret 1368 ) 1369 ); 1370 1371 TRACE_EVENT(drv_remain_on_channel, 1372 TP_PROTO(struct ieee80211_local *local, 1373 struct ieee80211_sub_if_data *sdata, 1374 struct ieee80211_channel *chan, 1375 unsigned int duration, 1376 enum ieee80211_roc_type type), 1377 1378 TP_ARGS(local, sdata, chan, duration, type), 1379 1380 TP_STRUCT__entry( 1381 LOCAL_ENTRY 1382 VIF_ENTRY 1383 __field(int, center_freq) 1384 __field(int, freq_offset) 1385 __field(unsigned int, duration) 1386 __field(u32, type) 1387 ), 1388 1389 TP_fast_assign( 1390 LOCAL_ASSIGN; 1391 VIF_ASSIGN; 1392 __entry->center_freq = chan->center_freq; 1393 __entry->freq_offset = chan->freq_offset; 1394 __entry->duration = duration; 1395 __entry->type = type; 1396 ), 1397 1398 TP_printk( 1399 LOCAL_PR_FMT VIF_PR_FMT " freq:%d.%03dMHz duration:%dms type=%d", 1400 LOCAL_PR_ARG, VIF_PR_ARG, 1401 __entry->center_freq, __entry->freq_offset, 1402 __entry->duration, __entry->type 1403 ) 1404 ); 1405 1406 DEFINE_EVENT(local_sdata_evt, drv_cancel_remain_on_channel, 1407 TP_PROTO(struct ieee80211_local *local, 1408 struct ieee80211_sub_if_data *sdata), 1409 TP_ARGS(local, sdata) 1410 ); 1411 1412 TRACE_EVENT(drv_set_ringparam, 1413 TP_PROTO(struct ieee80211_local *local, u32 tx, u32 rx), 1414 1415 TP_ARGS(local, tx, rx), 1416 1417 TP_STRUCT__entry( 1418 LOCAL_ENTRY 1419 __field(u32, tx) 1420 __field(u32, rx) 1421 ), 1422 1423 TP_fast_assign( 1424 LOCAL_ASSIGN; 1425 __entry->tx = tx; 1426 __entry->rx = rx; 1427 ), 1428 1429 TP_printk( 1430 LOCAL_PR_FMT " tx:%d rx %d", 1431 LOCAL_PR_ARG, __entry->tx, __entry->rx 1432 ) 1433 ); 1434 1435 TRACE_EVENT(drv_get_ringparam, 1436 TP_PROTO(struct ieee80211_local *local, u32 *tx, u32 *tx_max, 1437 u32 *rx, u32 *rx_max), 1438 1439 TP_ARGS(local, tx, tx_max, rx, rx_max), 1440 1441 TP_STRUCT__entry( 1442 LOCAL_ENTRY 1443 __field(u32, tx) 1444 __field(u32, tx_max) 1445 __field(u32, rx) 1446 __field(u32, rx_max) 1447 ), 1448 1449 TP_fast_assign( 1450 LOCAL_ASSIGN; 1451 __entry->tx = *tx; 1452 __entry->tx_max = *tx_max; 1453 __entry->rx = *rx; 1454 __entry->rx_max = *rx_max; 1455 ), 1456 1457 TP_printk( 1458 LOCAL_PR_FMT " tx:%d tx_max %d rx %d rx_max %d", 1459 LOCAL_PR_ARG, 1460 __entry->tx, __entry->tx_max, __entry->rx, __entry->rx_max 1461 ) 1462 ); 1463 1464 DEFINE_EVENT(local_only_evt, drv_tx_frames_pending, 1465 TP_PROTO(struct ieee80211_local *local), 1466 TP_ARGS(local) 1467 ); 1468 1469 DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait, 1470 TP_PROTO(struct ieee80211_local *local), 1471 TP_ARGS(local) 1472 ); 1473 1474 TRACE_EVENT(drv_set_bitrate_mask, 1475 TP_PROTO(struct ieee80211_local *local, 1476 struct ieee80211_sub_if_data *sdata, 1477 const struct cfg80211_bitrate_mask *mask), 1478 1479 TP_ARGS(local, sdata, mask), 1480 1481 TP_STRUCT__entry( 1482 LOCAL_ENTRY 1483 VIF_ENTRY 1484 __field(u32, legacy_2g) 1485 __field(u32, legacy_5g) 1486 ), 1487 1488 TP_fast_assign( 1489 LOCAL_ASSIGN; 1490 VIF_ASSIGN; 1491 __entry->legacy_2g = mask->control[NL80211_BAND_2GHZ].legacy; 1492 __entry->legacy_5g = mask->control[NL80211_BAND_5GHZ].legacy; 1493 ), 1494 1495 TP_printk( 1496 LOCAL_PR_FMT VIF_PR_FMT " 2G Mask:0x%x 5G Mask:0x%x", 1497 LOCAL_PR_ARG, VIF_PR_ARG, __entry->legacy_2g, __entry->legacy_5g 1498 ) 1499 ); 1500 1501 TRACE_EVENT(drv_set_rekey_data, 1502 TP_PROTO(struct ieee80211_local *local, 1503 struct ieee80211_sub_if_data *sdata, 1504 struct cfg80211_gtk_rekey_data *data), 1505 1506 TP_ARGS(local, sdata, data), 1507 1508 TP_STRUCT__entry( 1509 LOCAL_ENTRY 1510 VIF_ENTRY 1511 __array(u8, kek, NL80211_KEK_LEN) 1512 __array(u8, kck, NL80211_KCK_LEN) 1513 __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN) 1514 ), 1515 1516 TP_fast_assign( 1517 LOCAL_ASSIGN; 1518 VIF_ASSIGN; 1519 memcpy(__entry->kek, data->kek, NL80211_KEK_LEN); 1520 memcpy(__entry->kck, data->kck, NL80211_KCK_LEN); 1521 memcpy(__entry->replay_ctr, data->replay_ctr, 1522 NL80211_REPLAY_CTR_LEN); 1523 ), 1524 1525 TP_printk(LOCAL_PR_FMT VIF_PR_FMT, 1526 LOCAL_PR_ARG, VIF_PR_ARG) 1527 ); 1528 1529 TRACE_EVENT(drv_event_callback, 1530 TP_PROTO(struct ieee80211_local *local, 1531 struct ieee80211_sub_if_data *sdata, 1532 const struct ieee80211_event *_event), 1533 1534 TP_ARGS(local, sdata, _event), 1535 1536 TP_STRUCT__entry( 1537 LOCAL_ENTRY 1538 VIF_ENTRY 1539 __field(u32, type) 1540 ), 1541 1542 TP_fast_assign( 1543 LOCAL_ASSIGN; 1544 VIF_ASSIGN; 1545 __entry->type = _event->type; 1546 ), 1547 1548 TP_printk( 1549 LOCAL_PR_FMT VIF_PR_FMT " event:%d", 1550 LOCAL_PR_ARG, VIF_PR_ARG, __entry->type 1551 ) 1552 ); 1553 1554 DECLARE_EVENT_CLASS(release_evt, 1555 TP_PROTO(struct ieee80211_local *local, 1556 struct ieee80211_sta *sta, 1557 u16 tids, int num_frames, 1558 enum ieee80211_frame_release_type reason, 1559 bool more_data), 1560 1561 TP_ARGS(local, sta, tids, num_frames, reason, more_data), 1562 1563 TP_STRUCT__entry( 1564 LOCAL_ENTRY 1565 STA_ENTRY 1566 __field(u16, tids) 1567 __field(int, num_frames) 1568 __field(int, reason) 1569 __field(bool, more_data) 1570 ), 1571 1572 TP_fast_assign( 1573 LOCAL_ASSIGN; 1574 STA_ASSIGN; 1575 __entry->tids = tids; 1576 __entry->num_frames = num_frames; 1577 __entry->reason = reason; 1578 __entry->more_data = more_data; 1579 ), 1580 1581 TP_printk( 1582 LOCAL_PR_FMT STA_PR_FMT 1583 " TIDs:0x%.4x frames:%d reason:%d more:%d", 1584 LOCAL_PR_ARG, STA_PR_ARG, __entry->tids, __entry->num_frames, 1585 __entry->reason, __entry->more_data 1586 ) 1587 ); 1588 1589 DEFINE_EVENT(release_evt, drv_release_buffered_frames, 1590 TP_PROTO(struct ieee80211_local *local, 1591 struct ieee80211_sta *sta, 1592 u16 tids, int num_frames, 1593 enum ieee80211_frame_release_type reason, 1594 bool more_data), 1595 1596 TP_ARGS(local, sta, tids, num_frames, reason, more_data) 1597 ); 1598 1599 DEFINE_EVENT(release_evt, drv_allow_buffered_frames, 1600 TP_PROTO(struct ieee80211_local *local, 1601 struct ieee80211_sta *sta, 1602 u16 tids, int num_frames, 1603 enum ieee80211_frame_release_type reason, 1604 bool more_data), 1605 1606 TP_ARGS(local, sta, tids, num_frames, reason, more_data) 1607 ); 1608 1609 DECLARE_EVENT_CLASS(mgd_prepare_complete_tx_evt, 1610 TP_PROTO(struct ieee80211_local *local, 1611 struct ieee80211_sub_if_data *sdata, 1612 u16 duration, u16 subtype, bool success), 1613 1614 TP_ARGS(local, sdata, duration, subtype, success), 1615 1616 TP_STRUCT__entry( 1617 LOCAL_ENTRY 1618 VIF_ENTRY 1619 __field(u32, duration) 1620 __field(u16, subtype) 1621 __field(u8, success) 1622 ), 1623 1624 TP_fast_assign( 1625 LOCAL_ASSIGN; 1626 VIF_ASSIGN; 1627 __entry->duration = duration; 1628 __entry->subtype = subtype; 1629 __entry->success = success; 1630 ), 1631 1632 TP_printk( 1633 LOCAL_PR_FMT VIF_PR_FMT " duration: %u, subtype:0x%x, success:%d", 1634 LOCAL_PR_ARG, VIF_PR_ARG, __entry->duration, 1635 __entry->subtype, __entry->success 1636 ) 1637 ); 1638 1639 DEFINE_EVENT(mgd_prepare_complete_tx_evt, drv_mgd_prepare_tx, 1640 TP_PROTO(struct ieee80211_local *local, 1641 struct ieee80211_sub_if_data *sdata, 1642 u16 duration, u16 subtype, bool success), 1643 1644 TP_ARGS(local, sdata, duration, subtype, success) 1645 ); 1646 1647 DEFINE_EVENT(mgd_prepare_complete_tx_evt, drv_mgd_complete_tx, 1648 TP_PROTO(struct ieee80211_local *local, 1649 struct ieee80211_sub_if_data *sdata, 1650 u16 duration, u16 subtype, bool success), 1651 1652 TP_ARGS(local, sdata, duration, subtype, success) 1653 ); 1654 1655 DEFINE_EVENT(local_sdata_evt, drv_mgd_protect_tdls_discover, 1656 TP_PROTO(struct ieee80211_local *local, 1657 struct ieee80211_sub_if_data *sdata), 1658 1659 TP_ARGS(local, sdata) 1660 ); 1661 1662 DECLARE_EVENT_CLASS(local_chanctx, 1663 TP_PROTO(struct ieee80211_local *local, 1664 struct ieee80211_chanctx *ctx), 1665 1666 TP_ARGS(local, ctx), 1667 1668 TP_STRUCT__entry( 1669 LOCAL_ENTRY 1670 CHANCTX_ENTRY 1671 ), 1672 1673 TP_fast_assign( 1674 LOCAL_ASSIGN; 1675 CHANCTX_ASSIGN; 1676 ), 1677 1678 TP_printk( 1679 LOCAL_PR_FMT CHANCTX_PR_FMT, 1680 LOCAL_PR_ARG, CHANCTX_PR_ARG 1681 ) 1682 ); 1683 1684 DEFINE_EVENT(local_chanctx, drv_add_chanctx, 1685 TP_PROTO(struct ieee80211_local *local, 1686 struct ieee80211_chanctx *ctx), 1687 TP_ARGS(local, ctx) 1688 ); 1689 1690 DEFINE_EVENT(local_chanctx, drv_remove_chanctx, 1691 TP_PROTO(struct ieee80211_local *local, 1692 struct ieee80211_chanctx *ctx), 1693 TP_ARGS(local, ctx) 1694 ); 1695 1696 TRACE_EVENT(drv_change_chanctx, 1697 TP_PROTO(struct ieee80211_local *local, 1698 struct ieee80211_chanctx *ctx, 1699 u32 changed), 1700 1701 TP_ARGS(local, ctx, changed), 1702 1703 TP_STRUCT__entry( 1704 LOCAL_ENTRY 1705 CHANCTX_ENTRY 1706 __field(u32, changed) 1707 ), 1708 1709 TP_fast_assign( 1710 LOCAL_ASSIGN; 1711 CHANCTX_ASSIGN; 1712 __entry->changed = changed; 1713 ), 1714 1715 TP_printk( 1716 LOCAL_PR_FMT CHANCTX_PR_FMT " changed:%#x", 1717 LOCAL_PR_ARG, CHANCTX_PR_ARG, __entry->changed 1718 ) 1719 ); 1720 1721 #if !defined(__TRACE_VIF_ENTRY) 1722 #define __TRACE_VIF_ENTRY 1723 struct trace_vif_entry { 1724 enum nl80211_iftype vif_type; 1725 bool p2p; 1726 char vif_name[IFNAMSIZ]; 1727 } __packed; 1728 1729 struct trace_chandef_entry { 1730 u32 control_freq; 1731 u32 freq_offset; 1732 u32 chan_width; 1733 u32 center_freq1; 1734 u32 freq1_offset; 1735 u32 center_freq2; 1736 } __packed; 1737 1738 struct trace_switch_entry { 1739 struct trace_vif_entry vif; 1740 unsigned int link_id; 1741 struct trace_chandef_entry old_chandef; 1742 struct trace_chandef_entry new_chandef; 1743 } __packed; 1744 1745 #define SWITCH_ENTRY_ASSIGN(to, from) local_vifs[i].to = vifs[i].from 1746 #endif 1747 1748 TRACE_EVENT(drv_switch_vif_chanctx, 1749 TP_PROTO(struct ieee80211_local *local, 1750 struct ieee80211_vif_chanctx_switch *vifs, 1751 int n_vifs, enum ieee80211_chanctx_switch_mode mode), 1752 TP_ARGS(local, vifs, n_vifs, mode), 1753 1754 TP_STRUCT__entry( 1755 LOCAL_ENTRY 1756 __field(int, n_vifs) 1757 __field(u32, mode) 1758 __dynamic_array(u8, vifs, 1759 sizeof(struct trace_switch_entry) * n_vifs) 1760 ), 1761 1762 TP_fast_assign( 1763 LOCAL_ASSIGN; 1764 __entry->n_vifs = n_vifs; 1765 __entry->mode = mode; 1766 { 1767 struct trace_switch_entry *local_vifs = 1768 __get_dynamic_array(vifs); 1769 int i; 1770 1771 for (i = 0; i < n_vifs; i++) { 1772 struct ieee80211_sub_if_data *sdata; 1773 1774 sdata = container_of(vifs[i].vif, 1775 struct ieee80211_sub_if_data, 1776 vif); 1777 1778 SWITCH_ENTRY_ASSIGN(vif.vif_type, vif->type); 1779 SWITCH_ENTRY_ASSIGN(vif.p2p, vif->p2p); 1780 SWITCH_ENTRY_ASSIGN(link_id, link_conf->link_id); 1781 strscpy_pad(local_vifs[i].vif.vif_name, 1782 sdata->name); 1783 SWITCH_ENTRY_ASSIGN(old_chandef.control_freq, 1784 old_ctx->def.chan->center_freq); 1785 SWITCH_ENTRY_ASSIGN(old_chandef.freq_offset, 1786 old_ctx->def.chan->freq_offset); 1787 SWITCH_ENTRY_ASSIGN(old_chandef.chan_width, 1788 old_ctx->def.width); 1789 SWITCH_ENTRY_ASSIGN(old_chandef.center_freq1, 1790 old_ctx->def.center_freq1); 1791 SWITCH_ENTRY_ASSIGN(old_chandef.freq1_offset, 1792 old_ctx->def.freq1_offset); 1793 SWITCH_ENTRY_ASSIGN(old_chandef.center_freq2, 1794 old_ctx->def.center_freq2); 1795 SWITCH_ENTRY_ASSIGN(new_chandef.control_freq, 1796 new_ctx->def.chan->center_freq); 1797 SWITCH_ENTRY_ASSIGN(new_chandef.freq_offset, 1798 new_ctx->def.chan->freq_offset); 1799 SWITCH_ENTRY_ASSIGN(new_chandef.chan_width, 1800 new_ctx->def.width); 1801 SWITCH_ENTRY_ASSIGN(new_chandef.center_freq1, 1802 new_ctx->def.center_freq1); 1803 SWITCH_ENTRY_ASSIGN(new_chandef.freq1_offset, 1804 new_ctx->def.freq1_offset); 1805 SWITCH_ENTRY_ASSIGN(new_chandef.center_freq2, 1806 new_ctx->def.center_freq2); 1807 } 1808 } 1809 ), 1810 1811 TP_printk( 1812 LOCAL_PR_FMT " n_vifs:%d mode:%d", 1813 LOCAL_PR_ARG, __entry->n_vifs, __entry->mode 1814 ) 1815 ); 1816 1817 DECLARE_EVENT_CLASS(local_sdata_chanctx, 1818 TP_PROTO(struct ieee80211_local *local, 1819 struct ieee80211_sub_if_data *sdata, 1820 struct ieee80211_bss_conf *link_conf, 1821 struct ieee80211_chanctx *ctx), 1822 1823 TP_ARGS(local, sdata, link_conf, ctx), 1824 1825 TP_STRUCT__entry( 1826 LOCAL_ENTRY 1827 VIF_ENTRY 1828 CHANCTX_ENTRY 1829 __field(unsigned int, link_id) 1830 ), 1831 1832 TP_fast_assign( 1833 LOCAL_ASSIGN; 1834 VIF_ASSIGN; 1835 CHANCTX_ASSIGN; 1836 __entry->link_id = link_conf->link_id; 1837 ), 1838 1839 TP_printk( 1840 LOCAL_PR_FMT VIF_PR_FMT " link_id:%d" CHANCTX_PR_FMT, 1841 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, CHANCTX_PR_ARG 1842 ) 1843 ); 1844 1845 DEFINE_EVENT(local_sdata_chanctx, drv_assign_vif_chanctx, 1846 TP_PROTO(struct ieee80211_local *local, 1847 struct ieee80211_sub_if_data *sdata, 1848 struct ieee80211_bss_conf *link_conf, 1849 struct ieee80211_chanctx *ctx), 1850 TP_ARGS(local, sdata, link_conf, ctx) 1851 ); 1852 1853 DEFINE_EVENT(local_sdata_chanctx, drv_unassign_vif_chanctx, 1854 TP_PROTO(struct ieee80211_local *local, 1855 struct ieee80211_sub_if_data *sdata, 1856 struct ieee80211_bss_conf *link_conf, 1857 struct ieee80211_chanctx *ctx), 1858 TP_ARGS(local, sdata, link_conf, ctx) 1859 ); 1860 1861 TRACE_EVENT(drv_start_ap, 1862 TP_PROTO(struct ieee80211_local *local, 1863 struct ieee80211_sub_if_data *sdata, 1864 struct ieee80211_bss_conf *link_conf), 1865 1866 TP_ARGS(local, sdata, link_conf), 1867 1868 TP_STRUCT__entry( 1869 LOCAL_ENTRY 1870 VIF_ENTRY 1871 __field(u32, link_id) 1872 __field(u8, dtimper) 1873 __field(u16, bcnint) 1874 __dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len) 1875 __field(bool, hidden_ssid) 1876 ), 1877 1878 TP_fast_assign( 1879 LOCAL_ASSIGN; 1880 VIF_ASSIGN; 1881 __entry->link_id = link_conf->link_id; 1882 __entry->dtimper = link_conf->dtim_period; 1883 __entry->bcnint = link_conf->beacon_int; 1884 __entry->hidden_ssid = link_conf->hidden_ssid; 1885 memcpy(__get_dynamic_array(ssid), 1886 sdata->vif.cfg.ssid, 1887 sdata->vif.cfg.ssid_len); 1888 ), 1889 1890 TP_printk( 1891 LOCAL_PR_FMT VIF_PR_FMT " link id %u", 1892 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id 1893 ) 1894 ); 1895 1896 TRACE_EVENT(drv_stop_ap, 1897 TP_PROTO(struct ieee80211_local *local, 1898 struct ieee80211_sub_if_data *sdata, 1899 struct ieee80211_bss_conf *link_conf), 1900 1901 TP_ARGS(local, sdata, link_conf), 1902 1903 TP_STRUCT__entry( 1904 LOCAL_ENTRY 1905 VIF_ENTRY 1906 __field(u32, link_id) 1907 ), 1908 1909 TP_fast_assign( 1910 LOCAL_ASSIGN; 1911 VIF_ASSIGN; 1912 __entry->link_id = link_conf->link_id; 1913 ), 1914 1915 TP_printk( 1916 LOCAL_PR_FMT VIF_PR_FMT " link id %u", 1917 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id 1918 ) 1919 ); 1920 1921 TRACE_EVENT(drv_reconfig_complete, 1922 TP_PROTO(struct ieee80211_local *local, 1923 enum ieee80211_reconfig_type reconfig_type), 1924 TP_ARGS(local, reconfig_type), 1925 1926 TP_STRUCT__entry( 1927 LOCAL_ENTRY 1928 __field(u8, reconfig_type) 1929 ), 1930 1931 TP_fast_assign( 1932 LOCAL_ASSIGN; 1933 __entry->reconfig_type = reconfig_type; 1934 ), 1935 1936 TP_printk( 1937 LOCAL_PR_FMT " reconfig_type:%d", 1938 LOCAL_PR_ARG, __entry->reconfig_type 1939 ) 1940 1941 ); 1942 1943 #if IS_ENABLED(CONFIG_IPV6) 1944 DEFINE_EVENT(local_sdata_evt, drv_ipv6_addr_change, 1945 TP_PROTO(struct ieee80211_local *local, 1946 struct ieee80211_sub_if_data *sdata), 1947 TP_ARGS(local, sdata) 1948 ); 1949 #endif 1950 1951 TRACE_EVENT(drv_join_ibss, 1952 TP_PROTO(struct ieee80211_local *local, 1953 struct ieee80211_sub_if_data *sdata, 1954 struct ieee80211_bss_conf *info), 1955 1956 TP_ARGS(local, sdata, info), 1957 1958 TP_STRUCT__entry( 1959 LOCAL_ENTRY 1960 VIF_ENTRY 1961 __field(u8, dtimper) 1962 __field(u16, bcnint) 1963 __dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len) 1964 ), 1965 1966 TP_fast_assign( 1967 LOCAL_ASSIGN; 1968 VIF_ASSIGN; 1969 __entry->dtimper = info->dtim_period; 1970 __entry->bcnint = info->beacon_int; 1971 memcpy(__get_dynamic_array(ssid), 1972 sdata->vif.cfg.ssid, 1973 sdata->vif.cfg.ssid_len); 1974 ), 1975 1976 TP_printk( 1977 LOCAL_PR_FMT VIF_PR_FMT, 1978 LOCAL_PR_ARG, VIF_PR_ARG 1979 ) 1980 ); 1981 1982 DEFINE_EVENT(local_sdata_evt, drv_leave_ibss, 1983 TP_PROTO(struct ieee80211_local *local, 1984 struct ieee80211_sub_if_data *sdata), 1985 TP_ARGS(local, sdata) 1986 ); 1987 1988 TRACE_EVENT(drv_get_expected_throughput, 1989 TP_PROTO(struct ieee80211_sta *sta), 1990 1991 TP_ARGS(sta), 1992 1993 TP_STRUCT__entry( 1994 STA_ENTRY 1995 ), 1996 1997 TP_fast_assign( 1998 STA_ASSIGN; 1999 ), 2000 2001 TP_printk( 2002 STA_PR_FMT, STA_PR_ARG 2003 ) 2004 ); 2005 2006 TRACE_EVENT(drv_start_nan, 2007 TP_PROTO(struct ieee80211_local *local, 2008 struct ieee80211_sub_if_data *sdata, 2009 struct cfg80211_nan_conf *conf), 2010 2011 TP_ARGS(local, sdata, conf), 2012 TP_STRUCT__entry( 2013 LOCAL_ENTRY 2014 VIF_ENTRY 2015 __field(u8, master_pref) 2016 __field(u8, bands) 2017 ), 2018 2019 TP_fast_assign( 2020 LOCAL_ASSIGN; 2021 VIF_ASSIGN; 2022 __entry->master_pref = conf->master_pref; 2023 __entry->bands = conf->bands; 2024 ), 2025 2026 TP_printk( 2027 LOCAL_PR_FMT VIF_PR_FMT 2028 ", master preference: %u, bands: 0x%0x", 2029 LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref, 2030 __entry->bands 2031 ) 2032 ); 2033 2034 TRACE_EVENT(drv_stop_nan, 2035 TP_PROTO(struct ieee80211_local *local, 2036 struct ieee80211_sub_if_data *sdata), 2037 2038 TP_ARGS(local, sdata), 2039 2040 TP_STRUCT__entry( 2041 LOCAL_ENTRY 2042 VIF_ENTRY 2043 ), 2044 2045 TP_fast_assign( 2046 LOCAL_ASSIGN; 2047 VIF_ASSIGN; 2048 ), 2049 2050 TP_printk( 2051 LOCAL_PR_FMT VIF_PR_FMT, 2052 LOCAL_PR_ARG, VIF_PR_ARG 2053 ) 2054 ); 2055 2056 TRACE_EVENT(drv_nan_change_conf, 2057 TP_PROTO(struct ieee80211_local *local, 2058 struct ieee80211_sub_if_data *sdata, 2059 struct cfg80211_nan_conf *conf, 2060 u32 changes), 2061 2062 TP_ARGS(local, sdata, conf, changes), 2063 TP_STRUCT__entry( 2064 LOCAL_ENTRY 2065 VIF_ENTRY 2066 __field(u8, master_pref) 2067 __field(u8, bands) 2068 __field(u32, changes) 2069 ), 2070 2071 TP_fast_assign( 2072 LOCAL_ASSIGN; 2073 VIF_ASSIGN; 2074 __entry->master_pref = conf->master_pref; 2075 __entry->bands = conf->bands; 2076 __entry->changes = changes; 2077 ), 2078 2079 TP_printk( 2080 LOCAL_PR_FMT VIF_PR_FMT 2081 ", master preference: %u, bands: 0x%0x, changes: 0x%x", 2082 LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref, 2083 __entry->bands, __entry->changes 2084 ) 2085 ); 2086 2087 TRACE_EVENT(drv_add_nan_func, 2088 TP_PROTO(struct ieee80211_local *local, 2089 struct ieee80211_sub_if_data *sdata, 2090 const struct cfg80211_nan_func *func), 2091 2092 TP_ARGS(local, sdata, func), 2093 TP_STRUCT__entry( 2094 LOCAL_ENTRY 2095 VIF_ENTRY 2096 __field(u8, type) 2097 __field(u8, inst_id) 2098 ), 2099 2100 TP_fast_assign( 2101 LOCAL_ASSIGN; 2102 VIF_ASSIGN; 2103 __entry->type = func->type; 2104 __entry->inst_id = func->instance_id; 2105 ), 2106 2107 TP_printk( 2108 LOCAL_PR_FMT VIF_PR_FMT 2109 ", type: %u, inst_id: %u", 2110 LOCAL_PR_ARG, VIF_PR_ARG, __entry->type, __entry->inst_id 2111 ) 2112 ); 2113 2114 TRACE_EVENT(drv_del_nan_func, 2115 TP_PROTO(struct ieee80211_local *local, 2116 struct ieee80211_sub_if_data *sdata, 2117 u8 instance_id), 2118 2119 TP_ARGS(local, sdata, instance_id), 2120 TP_STRUCT__entry( 2121 LOCAL_ENTRY 2122 VIF_ENTRY 2123 __field(u8, instance_id) 2124 ), 2125 2126 TP_fast_assign( 2127 LOCAL_ASSIGN; 2128 VIF_ASSIGN; 2129 __entry->instance_id = instance_id; 2130 ), 2131 2132 TP_printk( 2133 LOCAL_PR_FMT VIF_PR_FMT 2134 ", instance_id: %u", 2135 LOCAL_PR_ARG, VIF_PR_ARG, __entry->instance_id 2136 ) 2137 ); 2138 2139 DEFINE_EVENT(local_sdata_evt, drv_start_pmsr, 2140 TP_PROTO(struct ieee80211_local *local, 2141 struct ieee80211_sub_if_data *sdata), 2142 TP_ARGS(local, sdata) 2143 ); 2144 2145 DEFINE_EVENT(local_sdata_evt, drv_abort_pmsr, 2146 TP_PROTO(struct ieee80211_local *local, 2147 struct ieee80211_sub_if_data *sdata), 2148 TP_ARGS(local, sdata) 2149 ); 2150 2151 TRACE_EVENT(drv_set_default_unicast_key, 2152 TP_PROTO(struct ieee80211_local *local, 2153 struct ieee80211_sub_if_data *sdata, 2154 int key_idx), 2155 2156 TP_ARGS(local, sdata, key_idx), 2157 2158 TP_STRUCT__entry( 2159 LOCAL_ENTRY 2160 VIF_ENTRY 2161 __field(int, key_idx) 2162 ), 2163 2164 TP_fast_assign( 2165 LOCAL_ASSIGN; 2166 VIF_ASSIGN; 2167 __entry->key_idx = key_idx; 2168 ), 2169 2170 TP_printk(LOCAL_PR_FMT VIF_PR_FMT " key_idx:%d", 2171 LOCAL_PR_ARG, VIF_PR_ARG, __entry->key_idx) 2172 ); 2173 2174 TRACE_EVENT(drv_channel_switch_beacon, 2175 TP_PROTO(struct ieee80211_local *local, 2176 struct ieee80211_sub_if_data *sdata, 2177 struct cfg80211_chan_def *chandef), 2178 2179 TP_ARGS(local, sdata, chandef), 2180 2181 TP_STRUCT__entry( 2182 LOCAL_ENTRY 2183 VIF_ENTRY 2184 CHANDEF_ENTRY 2185 ), 2186 2187 TP_fast_assign( 2188 LOCAL_ASSIGN; 2189 VIF_ASSIGN; 2190 CHANDEF_ASSIGN(chandef); 2191 ), 2192 2193 TP_printk( 2194 LOCAL_PR_FMT VIF_PR_FMT " channel switch to " CHANDEF_PR_FMT, 2195 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG 2196 ) 2197 ); 2198 2199 DEFINE_EVENT(chanswitch_evt, drv_pre_channel_switch, 2200 TP_PROTO(struct ieee80211_local *local, 2201 struct ieee80211_sub_if_data *sdata, 2202 struct ieee80211_channel_switch *ch_switch), 2203 TP_ARGS(local, sdata, ch_switch) 2204 ); 2205 2206 DEFINE_EVENT(local_sdata_evt, drv_post_channel_switch, 2207 TP_PROTO(struct ieee80211_local *local, 2208 struct ieee80211_sub_if_data *sdata), 2209 TP_ARGS(local, sdata) 2210 ); 2211 2212 DEFINE_EVENT(local_sdata_evt, drv_abort_channel_switch, 2213 TP_PROTO(struct ieee80211_local *local, 2214 struct ieee80211_sub_if_data *sdata), 2215 TP_ARGS(local, sdata) 2216 ); 2217 2218 DEFINE_EVENT(chanswitch_evt, drv_channel_switch_rx_beacon, 2219 TP_PROTO(struct ieee80211_local *local, 2220 struct ieee80211_sub_if_data *sdata, 2221 struct ieee80211_channel_switch *ch_switch), 2222 TP_ARGS(local, sdata, ch_switch) 2223 ); 2224 2225 TRACE_EVENT(drv_get_txpower, 2226 TP_PROTO(struct ieee80211_local *local, 2227 struct ieee80211_sub_if_data *sdata, 2228 unsigned int link_id, int dbm, int ret), 2229 2230 TP_ARGS(local, sdata, link_id, dbm, ret), 2231 2232 TP_STRUCT__entry( 2233 LOCAL_ENTRY 2234 VIF_ENTRY 2235 __field(unsigned int, link_id) 2236 __field(int, dbm) 2237 __field(int, ret) 2238 ), 2239 2240 TP_fast_assign( 2241 LOCAL_ASSIGN; 2242 VIF_ASSIGN; 2243 __entry->link_id = link_id; 2244 __entry->dbm = dbm; 2245 __entry->ret = ret; 2246 ), 2247 2248 TP_printk( 2249 LOCAL_PR_FMT VIF_PR_FMT " link_id:%d dbm:%d ret:%d", 2250 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, __entry->dbm, __entry->ret 2251 ) 2252 ); 2253 2254 TRACE_EVENT(drv_tdls_channel_switch, 2255 TP_PROTO(struct ieee80211_local *local, 2256 struct ieee80211_sub_if_data *sdata, 2257 struct ieee80211_sta *sta, u8 oper_class, 2258 struct cfg80211_chan_def *chandef), 2259 2260 TP_ARGS(local, sdata, sta, oper_class, chandef), 2261 2262 TP_STRUCT__entry( 2263 LOCAL_ENTRY 2264 VIF_ENTRY 2265 STA_ENTRY 2266 __field(u8, oper_class) 2267 CHANDEF_ENTRY 2268 ), 2269 2270 TP_fast_assign( 2271 LOCAL_ASSIGN; 2272 VIF_ASSIGN; 2273 STA_ASSIGN; 2274 __entry->oper_class = oper_class; 2275 CHANDEF_ASSIGN(chandef) 2276 ), 2277 2278 TP_printk( 2279 LOCAL_PR_FMT VIF_PR_FMT " tdls channel switch to" 2280 CHANDEF_PR_FMT " oper_class:%d " STA_PR_FMT, 2281 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->oper_class, 2282 STA_PR_ARG 2283 ) 2284 ); 2285 2286 TRACE_EVENT(drv_tdls_cancel_channel_switch, 2287 TP_PROTO(struct ieee80211_local *local, 2288 struct ieee80211_sub_if_data *sdata, 2289 struct ieee80211_sta *sta), 2290 2291 TP_ARGS(local, sdata, sta), 2292 2293 TP_STRUCT__entry( 2294 LOCAL_ENTRY 2295 VIF_ENTRY 2296 STA_ENTRY 2297 ), 2298 2299 TP_fast_assign( 2300 LOCAL_ASSIGN; 2301 VIF_ASSIGN; 2302 STA_ASSIGN; 2303 ), 2304 2305 TP_printk( 2306 LOCAL_PR_FMT VIF_PR_FMT 2307 " tdls cancel channel switch with " STA_PR_FMT, 2308 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG 2309 ) 2310 ); 2311 2312 TRACE_EVENT(drv_tdls_recv_channel_switch, 2313 TP_PROTO(struct ieee80211_local *local, 2314 struct ieee80211_sub_if_data *sdata, 2315 struct ieee80211_tdls_ch_sw_params *params), 2316 2317 TP_ARGS(local, sdata, params), 2318 2319 TP_STRUCT__entry( 2320 LOCAL_ENTRY 2321 VIF_ENTRY 2322 __field(u8, action_code) 2323 STA_ENTRY 2324 CHANDEF_ENTRY 2325 __field(u32, status) 2326 __field(bool, peer_initiator) 2327 __field(u32, timestamp) 2328 __field(u16, switch_time) 2329 __field(u16, switch_timeout) 2330 ), 2331 2332 TP_fast_assign( 2333 LOCAL_ASSIGN; 2334 VIF_ASSIGN; 2335 STA_NAMED_ASSIGN(params->sta); 2336 CHANDEF_ASSIGN(params->chandef) 2337 __entry->peer_initiator = params->sta->tdls_initiator; 2338 __entry->action_code = params->action_code; 2339 __entry->status = params->status; 2340 __entry->timestamp = params->timestamp; 2341 __entry->switch_time = params->switch_time; 2342 __entry->switch_timeout = params->switch_timeout; 2343 ), 2344 2345 TP_printk( 2346 LOCAL_PR_FMT VIF_PR_FMT " received tdls channel switch packet" 2347 " action:%d status:%d time:%d switch time:%d switch" 2348 " timeout:%d initiator: %d chan:" CHANDEF_PR_FMT STA_PR_FMT, 2349 LOCAL_PR_ARG, VIF_PR_ARG, __entry->action_code, __entry->status, 2350 __entry->timestamp, __entry->switch_time, 2351 __entry->switch_timeout, __entry->peer_initiator, 2352 CHANDEF_PR_ARG, STA_PR_ARG 2353 ) 2354 ); 2355 2356 TRACE_EVENT(drv_wake_tx_queue, 2357 TP_PROTO(struct ieee80211_local *local, 2358 struct ieee80211_sub_if_data *sdata, 2359 struct txq_info *txq), 2360 2361 TP_ARGS(local, sdata, txq), 2362 2363 TP_STRUCT__entry( 2364 LOCAL_ENTRY 2365 VIF_ENTRY 2366 STA_ENTRY 2367 __field(u8, ac) 2368 __field(u8, tid) 2369 ), 2370 2371 TP_fast_assign( 2372 struct ieee80211_sta *sta = txq->txq.sta; 2373 2374 LOCAL_ASSIGN; 2375 VIF_ASSIGN; 2376 STA_ASSIGN; 2377 __entry->ac = txq->txq.ac; 2378 __entry->tid = txq->txq.tid; 2379 ), 2380 2381 TP_printk( 2382 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " ac:%d tid:%d", 2383 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->ac, __entry->tid 2384 ) 2385 ); 2386 2387 TRACE_EVENT(drv_get_ftm_responder_stats, 2388 TP_PROTO(struct ieee80211_local *local, 2389 struct ieee80211_sub_if_data *sdata, 2390 struct cfg80211_ftm_responder_stats *ftm_stats), 2391 2392 TP_ARGS(local, sdata, ftm_stats), 2393 2394 TP_STRUCT__entry( 2395 LOCAL_ENTRY 2396 VIF_ENTRY 2397 ), 2398 2399 TP_fast_assign( 2400 LOCAL_ASSIGN; 2401 VIF_ASSIGN; 2402 ), 2403 2404 TP_printk( 2405 LOCAL_PR_FMT VIF_PR_FMT, 2406 LOCAL_PR_ARG, VIF_PR_ARG 2407 ) 2408 ); 2409 2410 DEFINE_EVENT(local_sdata_addr_evt, drv_update_vif_offload, 2411 TP_PROTO(struct ieee80211_local *local, 2412 struct ieee80211_sub_if_data *sdata), 2413 TP_ARGS(local, sdata) 2414 ); 2415 2416 DECLARE_EVENT_CLASS(sta_flag_evt, 2417 TP_PROTO(struct ieee80211_local *local, 2418 struct ieee80211_sub_if_data *sdata, 2419 struct ieee80211_sta *sta, bool enabled), 2420 2421 TP_ARGS(local, sdata, sta, enabled), 2422 2423 TP_STRUCT__entry( 2424 LOCAL_ENTRY 2425 VIF_ENTRY 2426 STA_ENTRY 2427 __field(bool, enabled) 2428 ), 2429 2430 TP_fast_assign( 2431 LOCAL_ASSIGN; 2432 VIF_ASSIGN; 2433 STA_ASSIGN; 2434 __entry->enabled = enabled; 2435 ), 2436 2437 TP_printk( 2438 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " enabled:%d", 2439 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->enabled 2440 ) 2441 ); 2442 2443 DEFINE_EVENT(sta_flag_evt, drv_sta_set_4addr, 2444 TP_PROTO(struct ieee80211_local *local, 2445 struct ieee80211_sub_if_data *sdata, 2446 struct ieee80211_sta *sta, bool enabled), 2447 2448 TP_ARGS(local, sdata, sta, enabled) 2449 ); 2450 2451 DEFINE_EVENT(sta_flag_evt, drv_sta_set_decap_offload, 2452 TP_PROTO(struct ieee80211_local *local, 2453 struct ieee80211_sub_if_data *sdata, 2454 struct ieee80211_sta *sta, bool enabled), 2455 2456 TP_ARGS(local, sdata, sta, enabled) 2457 ); 2458 2459 TRACE_EVENT(drv_add_twt_setup, 2460 TP_PROTO(struct ieee80211_local *local, 2461 struct ieee80211_sta *sta, 2462 struct ieee80211_twt_setup *twt, 2463 struct ieee80211_twt_params *twt_agrt), 2464 2465 TP_ARGS(local, sta, twt, twt_agrt), 2466 2467 TP_STRUCT__entry( 2468 LOCAL_ENTRY 2469 STA_ENTRY 2470 __field(u8, dialog_token) 2471 __field(u8, control) 2472 __field(__le16, req_type) 2473 __field(__le64, twt) 2474 __field(u8, duration) 2475 __field(__le16, mantissa) 2476 __field(u8, channel) 2477 ), 2478 2479 TP_fast_assign( 2480 LOCAL_ASSIGN; 2481 STA_ASSIGN; 2482 __entry->dialog_token = twt->dialog_token; 2483 __entry->control = twt->control; 2484 __entry->req_type = twt_agrt->req_type; 2485 __entry->twt = twt_agrt->twt; 2486 __entry->duration = twt_agrt->min_twt_dur; 2487 __entry->mantissa = twt_agrt->mantissa; 2488 __entry->channel = twt_agrt->channel; 2489 ), 2490 2491 TP_printk( 2492 LOCAL_PR_FMT STA_PR_FMT 2493 " token:%d control:0x%02x req_type:0x%04x" 2494 " twt:%llu duration:%d mantissa:%d channel:%d", 2495 LOCAL_PR_ARG, STA_PR_ARG, __entry->dialog_token, 2496 __entry->control, le16_to_cpu(__entry->req_type), 2497 le64_to_cpu(__entry->twt), __entry->duration, 2498 le16_to_cpu(__entry->mantissa), __entry->channel 2499 ) 2500 ); 2501 2502 TRACE_EVENT(drv_twt_teardown_request, 2503 TP_PROTO(struct ieee80211_local *local, 2504 struct ieee80211_sta *sta, u8 flowid), 2505 2506 TP_ARGS(local, sta, flowid), 2507 2508 TP_STRUCT__entry( 2509 LOCAL_ENTRY 2510 STA_ENTRY 2511 __field(u8, flowid) 2512 ), 2513 2514 TP_fast_assign( 2515 LOCAL_ASSIGN; 2516 STA_ASSIGN; 2517 __entry->flowid = flowid; 2518 ), 2519 2520 TP_printk( 2521 LOCAL_PR_FMT STA_PR_FMT " flowid:%d", 2522 LOCAL_PR_ARG, STA_PR_ARG, __entry->flowid 2523 ) 2524 ); 2525 2526 DEFINE_EVENT(sta_event, drv_net_fill_forward_path, 2527 TP_PROTO(struct ieee80211_local *local, 2528 struct ieee80211_sub_if_data *sdata, 2529 struct ieee80211_sta *sta), 2530 TP_ARGS(local, sdata, sta) 2531 ); 2532 2533 TRACE_EVENT(drv_net_setup_tc, 2534 TP_PROTO(struct ieee80211_local *local, 2535 struct ieee80211_sub_if_data *sdata, 2536 u8 type), 2537 2538 TP_ARGS(local, sdata, type), 2539 2540 TP_STRUCT__entry( 2541 LOCAL_ENTRY 2542 VIF_ENTRY 2543 __field(u8, type) 2544 ), 2545 2546 TP_fast_assign( 2547 LOCAL_ASSIGN; 2548 VIF_ASSIGN; 2549 __entry->type = type; 2550 ), 2551 2552 TP_printk( 2553 LOCAL_PR_FMT VIF_PR_FMT " type:%d\n", 2554 LOCAL_PR_ARG, VIF_PR_ARG, __entry->type 2555 ) 2556 ); 2557 2558 TRACE_EVENT(drv_can_activate_links, 2559 TP_PROTO(struct ieee80211_local *local, 2560 struct ieee80211_sub_if_data *sdata, 2561 u16 active_links), 2562 2563 TP_ARGS(local, sdata, active_links), 2564 2565 TP_STRUCT__entry( 2566 LOCAL_ENTRY 2567 VIF_ENTRY 2568 __field(u16, active_links) 2569 ), 2570 2571 TP_fast_assign( 2572 LOCAL_ASSIGN; 2573 VIF_ASSIGN; 2574 __entry->active_links = active_links; 2575 ), 2576 2577 TP_printk( 2578 LOCAL_PR_FMT VIF_PR_FMT " requested active_links:0x%04x\n", 2579 LOCAL_PR_ARG, VIF_PR_ARG, __entry->active_links 2580 ) 2581 ); 2582 2583 TRACE_EVENT(drv_change_vif_links, 2584 TP_PROTO(struct ieee80211_local *local, 2585 struct ieee80211_sub_if_data *sdata, 2586 u16 old_links, u16 new_links), 2587 2588 TP_ARGS(local, sdata, old_links, new_links), 2589 2590 TP_STRUCT__entry( 2591 LOCAL_ENTRY 2592 VIF_ENTRY 2593 __field(u16, old_links) 2594 __field(u16, new_links) 2595 ), 2596 2597 TP_fast_assign( 2598 LOCAL_ASSIGN; 2599 VIF_ASSIGN; 2600 __entry->old_links = old_links; 2601 __entry->new_links = new_links; 2602 ), 2603 2604 TP_printk( 2605 LOCAL_PR_FMT VIF_PR_FMT " old_links:0x%04x, new_links:0x%04x\n", 2606 LOCAL_PR_ARG, VIF_PR_ARG, __entry->old_links, __entry->new_links 2607 ) 2608 ); 2609 2610 TRACE_EVENT(drv_change_sta_links, 2611 TP_PROTO(struct ieee80211_local *local, 2612 struct ieee80211_sub_if_data *sdata, 2613 struct ieee80211_sta *sta, 2614 u16 old_links, u16 new_links), 2615 2616 TP_ARGS(local, sdata, sta, old_links, new_links), 2617 2618 TP_STRUCT__entry( 2619 LOCAL_ENTRY 2620 VIF_ENTRY 2621 STA_ENTRY 2622 __field(u16, old_links) 2623 __field(u16, new_links) 2624 ), 2625 2626 TP_fast_assign( 2627 LOCAL_ASSIGN; 2628 VIF_ASSIGN; 2629 STA_ASSIGN; 2630 __entry->old_links = old_links; 2631 __entry->new_links = new_links; 2632 ), 2633 2634 TP_printk( 2635 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " old_links:0x%04x, new_links:0x%04x\n", 2636 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, 2637 __entry->old_links, __entry->new_links 2638 ) 2639 ); 2640 2641 /* 2642 * Tracing for API calls that drivers call. 2643 */ 2644 2645 TRACE_EVENT(api_return_bool, 2646 TP_PROTO(struct ieee80211_local *local, bool result), 2647 2648 TP_ARGS(local, result), 2649 2650 TP_STRUCT__entry( 2651 LOCAL_ENTRY 2652 __field(bool, result) 2653 ), 2654 2655 TP_fast_assign( 2656 LOCAL_ASSIGN; 2657 __entry->result = result; 2658 ), 2659 2660 TP_printk( 2661 LOCAL_PR_FMT " result=%d", 2662 LOCAL_PR_ARG, __entry->result 2663 ) 2664 ); 2665 2666 TRACE_EVENT(api_return_void, 2667 TP_PROTO(struct ieee80211_local *local), 2668 2669 TP_ARGS(local), 2670 2671 TP_STRUCT__entry( 2672 LOCAL_ENTRY 2673 ), 2674 2675 TP_fast_assign( 2676 LOCAL_ASSIGN; 2677 ), 2678 2679 TP_printk( 2680 LOCAL_PR_FMT, LOCAL_PR_ARG 2681 ) 2682 ); 2683 2684 TRACE_EVENT(api_start_tx_ba_session, 2685 TP_PROTO(struct ieee80211_sta *sta, u16 tid), 2686 2687 TP_ARGS(sta, tid), 2688 2689 TP_STRUCT__entry( 2690 STA_ENTRY 2691 __field(u16, tid) 2692 ), 2693 2694 TP_fast_assign( 2695 STA_ASSIGN; 2696 __entry->tid = tid; 2697 ), 2698 2699 TP_printk( 2700 STA_PR_FMT " tid:%d", 2701 STA_PR_ARG, __entry->tid 2702 ) 2703 ); 2704 2705 TRACE_EVENT(api_start_tx_ba_cb, 2706 TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid), 2707 2708 TP_ARGS(sdata, ra, tid), 2709 2710 TP_STRUCT__entry( 2711 VIF_ENTRY 2712 __array(u8, ra, ETH_ALEN) 2713 __field(u16, tid) 2714 ), 2715 2716 TP_fast_assign( 2717 VIF_ASSIGN; 2718 memcpy(__entry->ra, ra, ETH_ALEN); 2719 __entry->tid = tid; 2720 ), 2721 2722 TP_printk( 2723 VIF_PR_FMT " ra:%pM tid:%d", 2724 VIF_PR_ARG, __entry->ra, __entry->tid 2725 ) 2726 ); 2727 2728 TRACE_EVENT(api_stop_tx_ba_session, 2729 TP_PROTO(struct ieee80211_sta *sta, u16 tid), 2730 2731 TP_ARGS(sta, tid), 2732 2733 TP_STRUCT__entry( 2734 STA_ENTRY 2735 __field(u16, tid) 2736 ), 2737 2738 TP_fast_assign( 2739 STA_ASSIGN; 2740 __entry->tid = tid; 2741 ), 2742 2743 TP_printk( 2744 STA_PR_FMT " tid:%d", 2745 STA_PR_ARG, __entry->tid 2746 ) 2747 ); 2748 2749 TRACE_EVENT(api_stop_tx_ba_cb, 2750 TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid), 2751 2752 TP_ARGS(sdata, ra, tid), 2753 2754 TP_STRUCT__entry( 2755 VIF_ENTRY 2756 __array(u8, ra, ETH_ALEN) 2757 __field(u16, tid) 2758 ), 2759 2760 TP_fast_assign( 2761 VIF_ASSIGN; 2762 memcpy(__entry->ra, ra, ETH_ALEN); 2763 __entry->tid = tid; 2764 ), 2765 2766 TP_printk( 2767 VIF_PR_FMT " ra:%pM tid:%d", 2768 VIF_PR_ARG, __entry->ra, __entry->tid 2769 ) 2770 ); 2771 2772 DEFINE_EVENT(local_only_evt, api_restart_hw, 2773 TP_PROTO(struct ieee80211_local *local), 2774 TP_ARGS(local) 2775 ); 2776 2777 TRACE_EVENT(api_beacon_loss, 2778 TP_PROTO(struct ieee80211_sub_if_data *sdata), 2779 2780 TP_ARGS(sdata), 2781 2782 TP_STRUCT__entry( 2783 VIF_ENTRY 2784 ), 2785 2786 TP_fast_assign( 2787 VIF_ASSIGN; 2788 ), 2789 2790 TP_printk( 2791 VIF_PR_FMT, 2792 VIF_PR_ARG 2793 ) 2794 ); 2795 2796 TRACE_EVENT(api_connection_loss, 2797 TP_PROTO(struct ieee80211_sub_if_data *sdata), 2798 2799 TP_ARGS(sdata), 2800 2801 TP_STRUCT__entry( 2802 VIF_ENTRY 2803 ), 2804 2805 TP_fast_assign( 2806 VIF_ASSIGN; 2807 ), 2808 2809 TP_printk( 2810 VIF_PR_FMT, 2811 VIF_PR_ARG 2812 ) 2813 ); 2814 2815 TRACE_EVENT(api_disconnect, 2816 TP_PROTO(struct ieee80211_sub_if_data *sdata, bool reconnect), 2817 2818 TP_ARGS(sdata, reconnect), 2819 2820 TP_STRUCT__entry( 2821 VIF_ENTRY 2822 __field(int, reconnect) 2823 ), 2824 2825 TP_fast_assign( 2826 VIF_ASSIGN; 2827 __entry->reconnect = reconnect; 2828 ), 2829 2830 TP_printk( 2831 VIF_PR_FMT " reconnect:%d", 2832 VIF_PR_ARG, __entry->reconnect 2833 ) 2834 ); 2835 2836 TRACE_EVENT(api_cqm_rssi_notify, 2837 TP_PROTO(struct ieee80211_sub_if_data *sdata, 2838 enum nl80211_cqm_rssi_threshold_event rssi_event, 2839 s32 rssi_level), 2840 2841 TP_ARGS(sdata, rssi_event, rssi_level), 2842 2843 TP_STRUCT__entry( 2844 VIF_ENTRY 2845 __field(u32, rssi_event) 2846 __field(s32, rssi_level) 2847 ), 2848 2849 TP_fast_assign( 2850 VIF_ASSIGN; 2851 __entry->rssi_event = rssi_event; 2852 __entry->rssi_level = rssi_level; 2853 ), 2854 2855 TP_printk( 2856 VIF_PR_FMT " event:%d rssi:%d", 2857 VIF_PR_ARG, __entry->rssi_event, __entry->rssi_level 2858 ) 2859 ); 2860 2861 DEFINE_EVENT(local_sdata_evt, api_cqm_beacon_loss_notify, 2862 TP_PROTO(struct ieee80211_local *local, 2863 struct ieee80211_sub_if_data *sdata), 2864 TP_ARGS(local, sdata) 2865 ); 2866 2867 TRACE_EVENT(api_scan_completed, 2868 TP_PROTO(struct ieee80211_local *local, bool aborted), 2869 2870 TP_ARGS(local, aborted), 2871 2872 TP_STRUCT__entry( 2873 LOCAL_ENTRY 2874 __field(bool, aborted) 2875 ), 2876 2877 TP_fast_assign( 2878 LOCAL_ASSIGN; 2879 __entry->aborted = aborted; 2880 ), 2881 2882 TP_printk( 2883 LOCAL_PR_FMT " aborted:%d", 2884 LOCAL_PR_ARG, __entry->aborted 2885 ) 2886 ); 2887 2888 TRACE_EVENT(api_sched_scan_results, 2889 TP_PROTO(struct ieee80211_local *local), 2890 2891 TP_ARGS(local), 2892 2893 TP_STRUCT__entry( 2894 LOCAL_ENTRY 2895 ), 2896 2897 TP_fast_assign( 2898 LOCAL_ASSIGN; 2899 ), 2900 2901 TP_printk( 2902 LOCAL_PR_FMT, LOCAL_PR_ARG 2903 ) 2904 ); 2905 2906 TRACE_EVENT(api_sched_scan_stopped, 2907 TP_PROTO(struct ieee80211_local *local), 2908 2909 TP_ARGS(local), 2910 2911 TP_STRUCT__entry( 2912 LOCAL_ENTRY 2913 ), 2914 2915 TP_fast_assign( 2916 LOCAL_ASSIGN; 2917 ), 2918 2919 TP_printk( 2920 LOCAL_PR_FMT, LOCAL_PR_ARG 2921 ) 2922 ); 2923 2924 TRACE_EVENT(api_sta_block_awake, 2925 TP_PROTO(struct ieee80211_local *local, 2926 struct ieee80211_sta *sta, bool block), 2927 2928 TP_ARGS(local, sta, block), 2929 2930 TP_STRUCT__entry( 2931 LOCAL_ENTRY 2932 STA_ENTRY 2933 __field(bool, block) 2934 ), 2935 2936 TP_fast_assign( 2937 LOCAL_ASSIGN; 2938 STA_ASSIGN; 2939 __entry->block = block; 2940 ), 2941 2942 TP_printk( 2943 LOCAL_PR_FMT STA_PR_FMT " block:%d", 2944 LOCAL_PR_ARG, STA_PR_ARG, __entry->block 2945 ) 2946 ); 2947 2948 TRACE_EVENT(api_chswitch_done, 2949 TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success, 2950 unsigned int link_id), 2951 2952 TP_ARGS(sdata, success, link_id), 2953 2954 TP_STRUCT__entry( 2955 VIF_ENTRY 2956 __field(bool, success) 2957 __field(unsigned int, link_id) 2958 ), 2959 2960 TP_fast_assign( 2961 VIF_ASSIGN; 2962 __entry->success = success; 2963 __entry->link_id = link_id; 2964 ), 2965 2966 TP_printk( 2967 VIF_PR_FMT " success=%d link_id=%d", 2968 VIF_PR_ARG, __entry->success, __entry->link_id 2969 ) 2970 ); 2971 2972 DEFINE_EVENT(local_only_evt, api_ready_on_channel, 2973 TP_PROTO(struct ieee80211_local *local), 2974 TP_ARGS(local) 2975 ); 2976 2977 DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired, 2978 TP_PROTO(struct ieee80211_local *local), 2979 TP_ARGS(local) 2980 ); 2981 2982 TRACE_EVENT(api_gtk_rekey_notify, 2983 TP_PROTO(struct ieee80211_sub_if_data *sdata, 2984 const u8 *bssid, const u8 *replay_ctr), 2985 2986 TP_ARGS(sdata, bssid, replay_ctr), 2987 2988 TP_STRUCT__entry( 2989 VIF_ENTRY 2990 __array(u8, bssid, ETH_ALEN) 2991 __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN) 2992 ), 2993 2994 TP_fast_assign( 2995 VIF_ASSIGN; 2996 memcpy(__entry->bssid, bssid, ETH_ALEN); 2997 memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN); 2998 ), 2999 3000 TP_printk(VIF_PR_FMT, VIF_PR_ARG) 3001 ); 3002 3003 TRACE_EVENT(api_enable_rssi_reports, 3004 TP_PROTO(struct ieee80211_sub_if_data *sdata, 3005 int rssi_min_thold, int rssi_max_thold), 3006 3007 TP_ARGS(sdata, rssi_min_thold, rssi_max_thold), 3008 3009 TP_STRUCT__entry( 3010 VIF_ENTRY 3011 __field(int, rssi_min_thold) 3012 __field(int, rssi_max_thold) 3013 ), 3014 3015 TP_fast_assign( 3016 VIF_ASSIGN; 3017 __entry->rssi_min_thold = rssi_min_thold; 3018 __entry->rssi_max_thold = rssi_max_thold; 3019 ), 3020 3021 TP_printk( 3022 VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d", 3023 VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold 3024 ) 3025 ); 3026 3027 TRACE_EVENT(api_eosp, 3028 TP_PROTO(struct ieee80211_local *local, 3029 struct ieee80211_sta *sta), 3030 3031 TP_ARGS(local, sta), 3032 3033 TP_STRUCT__entry( 3034 LOCAL_ENTRY 3035 STA_ENTRY 3036 ), 3037 3038 TP_fast_assign( 3039 LOCAL_ASSIGN; 3040 STA_ASSIGN; 3041 ), 3042 3043 TP_printk( 3044 LOCAL_PR_FMT STA_PR_FMT, 3045 LOCAL_PR_ARG, STA_PR_ARG 3046 ) 3047 ); 3048 3049 TRACE_EVENT(api_send_eosp_nullfunc, 3050 TP_PROTO(struct ieee80211_local *local, 3051 struct ieee80211_sta *sta, 3052 u8 tid), 3053 3054 TP_ARGS(local, sta, tid), 3055 3056 TP_STRUCT__entry( 3057 LOCAL_ENTRY 3058 STA_ENTRY 3059 __field(u8, tid) 3060 ), 3061 3062 TP_fast_assign( 3063 LOCAL_ASSIGN; 3064 STA_ASSIGN; 3065 __entry->tid = tid; 3066 ), 3067 3068 TP_printk( 3069 LOCAL_PR_FMT STA_PR_FMT " tid:%d", 3070 LOCAL_PR_ARG, STA_PR_ARG, __entry->tid 3071 ) 3072 ); 3073 3074 TRACE_EVENT(api_sta_set_buffered, 3075 TP_PROTO(struct ieee80211_local *local, 3076 struct ieee80211_sta *sta, 3077 u8 tid, bool buffered), 3078 3079 TP_ARGS(local, sta, tid, buffered), 3080 3081 TP_STRUCT__entry( 3082 LOCAL_ENTRY 3083 STA_ENTRY 3084 __field(u8, tid) 3085 __field(bool, buffered) 3086 ), 3087 3088 TP_fast_assign( 3089 LOCAL_ASSIGN; 3090 STA_ASSIGN; 3091 __entry->tid = tid; 3092 __entry->buffered = buffered; 3093 ), 3094 3095 TP_printk( 3096 LOCAL_PR_FMT STA_PR_FMT " tid:%d buffered:%d", 3097 LOCAL_PR_ARG, STA_PR_ARG, __entry->tid, __entry->buffered 3098 ) 3099 ); 3100 3101 TRACE_EVENT(api_radar_detected, 3102 TP_PROTO(struct ieee80211_local *local), 3103 3104 TP_ARGS(local), 3105 3106 TP_STRUCT__entry( 3107 LOCAL_ENTRY 3108 ), 3109 3110 TP_fast_assign( 3111 LOCAL_ASSIGN; 3112 ), 3113 3114 TP_printk( 3115 LOCAL_PR_FMT " radar detected", 3116 LOCAL_PR_ARG 3117 ) 3118 ); 3119 3120 TRACE_EVENT(api_request_smps, 3121 TP_PROTO(struct ieee80211_local *local, 3122 struct ieee80211_sub_if_data *sdata, 3123 struct ieee80211_link_data *link, 3124 enum ieee80211_smps_mode smps_mode), 3125 3126 TP_ARGS(local, sdata, link, smps_mode), 3127 3128 TP_STRUCT__entry( 3129 LOCAL_ENTRY 3130 VIF_ENTRY 3131 __field(int, link_id) 3132 __field(u32, smps_mode) 3133 ), 3134 3135 TP_fast_assign( 3136 LOCAL_ASSIGN; 3137 VIF_ASSIGN; 3138 __entry->link_id = link->link_id, 3139 __entry->smps_mode = smps_mode; 3140 ), 3141 3142 TP_printk( 3143 LOCAL_PR_FMT " " VIF_PR_FMT " link:%d, smps_mode:%d", 3144 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, __entry->smps_mode 3145 ) 3146 ); 3147 3148 TRACE_EVENT(api_prepare_rx_omi_bw, 3149 TP_PROTO(struct ieee80211_local *local, 3150 struct ieee80211_sub_if_data *sdata, 3151 struct link_sta_info *link_sta, 3152 enum ieee80211_sta_rx_bandwidth bw), 3153 3154 TP_ARGS(local, sdata, link_sta, bw), 3155 3156 TP_STRUCT__entry( 3157 LOCAL_ENTRY 3158 VIF_ENTRY 3159 STA_ENTRY 3160 __field(int, link_id) 3161 __field(u32, bw) 3162 __field(bool, result) 3163 ), 3164 3165 TP_fast_assign( 3166 LOCAL_ASSIGN; 3167 VIF_ASSIGN; 3168 STA_NAMED_ASSIGN(link_sta->sta); 3169 __entry->link_id = link_sta->link_id; 3170 __entry->bw = bw; 3171 ), 3172 3173 TP_printk( 3174 LOCAL_PR_FMT " " VIF_PR_FMT " " STA_PR_FMT " link:%d, bw:%d", 3175 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, 3176 __entry->link_id, __entry->bw 3177 ) 3178 ); 3179 3180 TRACE_EVENT(api_finalize_rx_omi_bw, 3181 TP_PROTO(struct ieee80211_local *local, 3182 struct ieee80211_sub_if_data *sdata, 3183 struct link_sta_info *link_sta), 3184 3185 TP_ARGS(local, sdata, link_sta), 3186 3187 TP_STRUCT__entry( 3188 LOCAL_ENTRY 3189 VIF_ENTRY 3190 STA_ENTRY 3191 __field(int, link_id) 3192 ), 3193 3194 TP_fast_assign( 3195 LOCAL_ASSIGN; 3196 VIF_ASSIGN; 3197 STA_NAMED_ASSIGN(link_sta->sta); 3198 __entry->link_id = link_sta->link_id; 3199 ), 3200 3201 TP_printk( 3202 LOCAL_PR_FMT " " VIF_PR_FMT " " STA_PR_FMT " link:%d", 3203 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->link_id 3204 ) 3205 ); 3206 3207 /* 3208 * Tracing for internal functions 3209 * (which may also be called in response to driver calls) 3210 */ 3211 3212 TRACE_EVENT(wake_queue, 3213 TP_PROTO(struct ieee80211_local *local, u16 queue, 3214 enum queue_stop_reason reason, int refcount), 3215 3216 TP_ARGS(local, queue, reason, refcount), 3217 3218 TP_STRUCT__entry( 3219 LOCAL_ENTRY 3220 __field(u16, queue) 3221 __field(u32, reason) 3222 __field(int, refcount) 3223 ), 3224 3225 TP_fast_assign( 3226 LOCAL_ASSIGN; 3227 __entry->queue = queue; 3228 __entry->reason = reason; 3229 __entry->refcount = refcount; 3230 ), 3231 3232 TP_printk( 3233 LOCAL_PR_FMT " queue:%d, reason:%d, refcount: %d", 3234 LOCAL_PR_ARG, __entry->queue, __entry->reason, 3235 __entry->refcount 3236 ) 3237 ); 3238 3239 TRACE_EVENT(stop_queue, 3240 TP_PROTO(struct ieee80211_local *local, u16 queue, 3241 enum queue_stop_reason reason, int refcount), 3242 3243 TP_ARGS(local, queue, reason, refcount), 3244 3245 TP_STRUCT__entry( 3246 LOCAL_ENTRY 3247 __field(u16, queue) 3248 __field(u32, reason) 3249 __field(int, refcount) 3250 ), 3251 3252 TP_fast_assign( 3253 LOCAL_ASSIGN; 3254 __entry->queue = queue; 3255 __entry->reason = reason; 3256 __entry->refcount = refcount; 3257 ), 3258 3259 TP_printk( 3260 LOCAL_PR_FMT " queue:%d, reason:%d, refcount: %d", 3261 LOCAL_PR_ARG, __entry->queue, __entry->reason, 3262 __entry->refcount 3263 ) 3264 ); 3265 3266 TRACE_EVENT(drv_can_neg_ttlm, 3267 TP_PROTO(struct ieee80211_local *local, 3268 struct ieee80211_sub_if_data *sdata, 3269 struct ieee80211_neg_ttlm *neg_ttlm), 3270 3271 TP_ARGS(local, sdata, neg_ttlm), 3272 3273 TP_STRUCT__entry(LOCAL_ENTRY 3274 VIF_ENTRY 3275 __array(u16, downlink, sizeof(u16) * 8) 3276 __array(u16, uplink, sizeof(u16) * 8) 3277 ), 3278 3279 TP_fast_assign(LOCAL_ASSIGN; 3280 VIF_ASSIGN; 3281 memcpy(__entry->downlink, neg_ttlm->downlink, 3282 sizeof(neg_ttlm->downlink)); 3283 memcpy(__entry->uplink, neg_ttlm->uplink, 3284 sizeof(neg_ttlm->uplink)); 3285 ), 3286 3287 TP_printk(LOCAL_PR_FMT ", " VIF_PR_FMT, LOCAL_PR_ARG, VIF_PR_ARG) 3288 ); 3289 3290 TRACE_EVENT(drv_neg_ttlm_res, 3291 TP_PROTO(struct ieee80211_local *local, 3292 struct ieee80211_sub_if_data *sdata, 3293 enum ieee80211_neg_ttlm_res res, 3294 struct ieee80211_neg_ttlm *neg_ttlm), 3295 3296 TP_ARGS(local, sdata, res, neg_ttlm), 3297 3298 TP_STRUCT__entry(LOCAL_ENTRY 3299 VIF_ENTRY 3300 __field(u32, res) 3301 __array(u16, downlink, sizeof(u16) * 8) 3302 __array(u16, uplink, sizeof(u16) * 8) 3303 ), 3304 3305 TP_fast_assign(LOCAL_ASSIGN; 3306 VIF_ASSIGN; 3307 __entry->res = res; 3308 memcpy(__entry->downlink, neg_ttlm->downlink, 3309 sizeof(neg_ttlm->downlink)); 3310 memcpy(__entry->uplink, neg_ttlm->uplink, 3311 sizeof(neg_ttlm->uplink)); 3312 ), 3313 3314 TP_printk(LOCAL_PR_FMT VIF_PR_FMT " response: %d\n ", 3315 LOCAL_PR_ARG, VIF_PR_ARG, __entry->res 3316 ) 3317 ); 3318 3319 TRACE_EVENT(drv_prep_add_interface, 3320 TP_PROTO(struct ieee80211_local *local, 3321 enum nl80211_iftype type), 3322 3323 TP_ARGS(local, type), 3324 TP_STRUCT__entry(LOCAL_ENTRY 3325 __field(u32, type) 3326 ), 3327 3328 TP_fast_assign(LOCAL_ASSIGN; 3329 __entry->type = type; 3330 ), 3331 3332 TP_printk(LOCAL_PR_FMT " type: %u\n ", 3333 LOCAL_PR_ARG, __entry->type 3334 ) 3335 ); 3336 3337 TRACE_EVENT(drv_set_eml_op_mode, 3338 TP_PROTO(struct ieee80211_local *local, 3339 struct ieee80211_sub_if_data *sdata, 3340 struct ieee80211_sta *sta, 3341 unsigned int link_id, 3342 u8 control, u16 link_bitmap), 3343 3344 TP_ARGS(local, sdata, sta, link_id, control, link_bitmap), 3345 3346 TP_STRUCT__entry(LOCAL_ENTRY 3347 VIF_ENTRY 3348 STA_ENTRY 3349 __field(u32, link_id) 3350 __field(u8, control) 3351 __field(u16, link_bitmap)), 3352 3353 TP_fast_assign(LOCAL_ASSIGN; 3354 VIF_ASSIGN; 3355 STA_NAMED_ASSIGN(sta); 3356 __entry->link_id = link_id; 3357 __entry->control = control; 3358 __entry->link_bitmap = link_bitmap; 3359 ), 3360 3361 TP_printk( 3362 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT 3363 " (link:%d control:%02x link_bitmap:%04x)", 3364 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->link_id, 3365 __entry->control, __entry->link_bitmap 3366 ) 3367 ); 3368 3369 #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ 3370 3371 #undef TRACE_INCLUDE_PATH 3372 #define TRACE_INCLUDE_PATH . 3373 #undef TRACE_INCLUDE_FILE 3374 #define TRACE_INCLUDE_FILE trace 3375 #include <trace/define_trace.h> 3376