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 strncpy(local_vifs[i].vif.vif_name, 1782 sdata->name, 1783 sizeof(local_vifs[i].vif.vif_name)); 1784 SWITCH_ENTRY_ASSIGN(old_chandef.control_freq, 1785 old_ctx->def.chan->center_freq); 1786 SWITCH_ENTRY_ASSIGN(old_chandef.freq_offset, 1787 old_ctx->def.chan->freq_offset); 1788 SWITCH_ENTRY_ASSIGN(old_chandef.chan_width, 1789 old_ctx->def.width); 1790 SWITCH_ENTRY_ASSIGN(old_chandef.center_freq1, 1791 old_ctx->def.center_freq1); 1792 SWITCH_ENTRY_ASSIGN(old_chandef.freq1_offset, 1793 old_ctx->def.freq1_offset); 1794 SWITCH_ENTRY_ASSIGN(old_chandef.center_freq2, 1795 old_ctx->def.center_freq2); 1796 SWITCH_ENTRY_ASSIGN(new_chandef.control_freq, 1797 new_ctx->def.chan->center_freq); 1798 SWITCH_ENTRY_ASSIGN(new_chandef.freq_offset, 1799 new_ctx->def.chan->freq_offset); 1800 SWITCH_ENTRY_ASSIGN(new_chandef.chan_width, 1801 new_ctx->def.width); 1802 SWITCH_ENTRY_ASSIGN(new_chandef.center_freq1, 1803 new_ctx->def.center_freq1); 1804 SWITCH_ENTRY_ASSIGN(new_chandef.freq1_offset, 1805 new_ctx->def.freq1_offset); 1806 SWITCH_ENTRY_ASSIGN(new_chandef.center_freq2, 1807 new_ctx->def.center_freq2); 1808 } 1809 } 1810 ), 1811 1812 TP_printk( 1813 LOCAL_PR_FMT " n_vifs:%d mode:%d", 1814 LOCAL_PR_ARG, __entry->n_vifs, __entry->mode 1815 ) 1816 ); 1817 1818 DECLARE_EVENT_CLASS(local_sdata_chanctx, 1819 TP_PROTO(struct ieee80211_local *local, 1820 struct ieee80211_sub_if_data *sdata, 1821 struct ieee80211_bss_conf *link_conf, 1822 struct ieee80211_chanctx *ctx), 1823 1824 TP_ARGS(local, sdata, link_conf, ctx), 1825 1826 TP_STRUCT__entry( 1827 LOCAL_ENTRY 1828 VIF_ENTRY 1829 CHANCTX_ENTRY 1830 __field(unsigned int, link_id) 1831 ), 1832 1833 TP_fast_assign( 1834 LOCAL_ASSIGN; 1835 VIF_ASSIGN; 1836 CHANCTX_ASSIGN; 1837 __entry->link_id = link_conf->link_id; 1838 ), 1839 1840 TP_printk( 1841 LOCAL_PR_FMT VIF_PR_FMT " link_id:%d" CHANCTX_PR_FMT, 1842 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, CHANCTX_PR_ARG 1843 ) 1844 ); 1845 1846 DEFINE_EVENT(local_sdata_chanctx, drv_assign_vif_chanctx, 1847 TP_PROTO(struct ieee80211_local *local, 1848 struct ieee80211_sub_if_data *sdata, 1849 struct ieee80211_bss_conf *link_conf, 1850 struct ieee80211_chanctx *ctx), 1851 TP_ARGS(local, sdata, link_conf, ctx) 1852 ); 1853 1854 DEFINE_EVENT(local_sdata_chanctx, drv_unassign_vif_chanctx, 1855 TP_PROTO(struct ieee80211_local *local, 1856 struct ieee80211_sub_if_data *sdata, 1857 struct ieee80211_bss_conf *link_conf, 1858 struct ieee80211_chanctx *ctx), 1859 TP_ARGS(local, sdata, link_conf, ctx) 1860 ); 1861 1862 TRACE_EVENT(drv_start_ap, 1863 TP_PROTO(struct ieee80211_local *local, 1864 struct ieee80211_sub_if_data *sdata, 1865 struct ieee80211_bss_conf *link_conf), 1866 1867 TP_ARGS(local, sdata, link_conf), 1868 1869 TP_STRUCT__entry( 1870 LOCAL_ENTRY 1871 VIF_ENTRY 1872 __field(u32, link_id) 1873 __field(u8, dtimper) 1874 __field(u16, bcnint) 1875 __dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len) 1876 __field(bool, hidden_ssid) 1877 ), 1878 1879 TP_fast_assign( 1880 LOCAL_ASSIGN; 1881 VIF_ASSIGN; 1882 __entry->link_id = link_conf->link_id; 1883 __entry->dtimper = link_conf->dtim_period; 1884 __entry->bcnint = link_conf->beacon_int; 1885 __entry->hidden_ssid = link_conf->hidden_ssid; 1886 memcpy(__get_dynamic_array(ssid), 1887 sdata->vif.cfg.ssid, 1888 sdata->vif.cfg.ssid_len); 1889 ), 1890 1891 TP_printk( 1892 LOCAL_PR_FMT VIF_PR_FMT " link id %u", 1893 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id 1894 ) 1895 ); 1896 1897 TRACE_EVENT(drv_stop_ap, 1898 TP_PROTO(struct ieee80211_local *local, 1899 struct ieee80211_sub_if_data *sdata, 1900 struct ieee80211_bss_conf *link_conf), 1901 1902 TP_ARGS(local, sdata, link_conf), 1903 1904 TP_STRUCT__entry( 1905 LOCAL_ENTRY 1906 VIF_ENTRY 1907 __field(u32, link_id) 1908 ), 1909 1910 TP_fast_assign( 1911 LOCAL_ASSIGN; 1912 VIF_ASSIGN; 1913 __entry->link_id = link_conf->link_id; 1914 ), 1915 1916 TP_printk( 1917 LOCAL_PR_FMT VIF_PR_FMT " link id %u", 1918 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id 1919 ) 1920 ); 1921 1922 TRACE_EVENT(drv_reconfig_complete, 1923 TP_PROTO(struct ieee80211_local *local, 1924 enum ieee80211_reconfig_type reconfig_type), 1925 TP_ARGS(local, reconfig_type), 1926 1927 TP_STRUCT__entry( 1928 LOCAL_ENTRY 1929 __field(u8, reconfig_type) 1930 ), 1931 1932 TP_fast_assign( 1933 LOCAL_ASSIGN; 1934 __entry->reconfig_type = reconfig_type; 1935 ), 1936 1937 TP_printk( 1938 LOCAL_PR_FMT " reconfig_type:%d", 1939 LOCAL_PR_ARG, __entry->reconfig_type 1940 ) 1941 1942 ); 1943 1944 #if IS_ENABLED(CONFIG_IPV6) 1945 DEFINE_EVENT(local_sdata_evt, drv_ipv6_addr_change, 1946 TP_PROTO(struct ieee80211_local *local, 1947 struct ieee80211_sub_if_data *sdata), 1948 TP_ARGS(local, sdata) 1949 ); 1950 #endif 1951 1952 TRACE_EVENT(drv_join_ibss, 1953 TP_PROTO(struct ieee80211_local *local, 1954 struct ieee80211_sub_if_data *sdata, 1955 struct ieee80211_bss_conf *info), 1956 1957 TP_ARGS(local, sdata, info), 1958 1959 TP_STRUCT__entry( 1960 LOCAL_ENTRY 1961 VIF_ENTRY 1962 __field(u8, dtimper) 1963 __field(u16, bcnint) 1964 __dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len) 1965 ), 1966 1967 TP_fast_assign( 1968 LOCAL_ASSIGN; 1969 VIF_ASSIGN; 1970 __entry->dtimper = info->dtim_period; 1971 __entry->bcnint = info->beacon_int; 1972 memcpy(__get_dynamic_array(ssid), 1973 sdata->vif.cfg.ssid, 1974 sdata->vif.cfg.ssid_len); 1975 ), 1976 1977 TP_printk( 1978 LOCAL_PR_FMT VIF_PR_FMT, 1979 LOCAL_PR_ARG, VIF_PR_ARG 1980 ) 1981 ); 1982 1983 DEFINE_EVENT(local_sdata_evt, drv_leave_ibss, 1984 TP_PROTO(struct ieee80211_local *local, 1985 struct ieee80211_sub_if_data *sdata), 1986 TP_ARGS(local, sdata) 1987 ); 1988 1989 TRACE_EVENT(drv_get_expected_throughput, 1990 TP_PROTO(struct ieee80211_sta *sta), 1991 1992 TP_ARGS(sta), 1993 1994 TP_STRUCT__entry( 1995 STA_ENTRY 1996 ), 1997 1998 TP_fast_assign( 1999 STA_ASSIGN; 2000 ), 2001 2002 TP_printk( 2003 STA_PR_FMT, STA_PR_ARG 2004 ) 2005 ); 2006 2007 TRACE_EVENT(drv_start_nan, 2008 TP_PROTO(struct ieee80211_local *local, 2009 struct ieee80211_sub_if_data *sdata, 2010 struct cfg80211_nan_conf *conf), 2011 2012 TP_ARGS(local, sdata, conf), 2013 TP_STRUCT__entry( 2014 LOCAL_ENTRY 2015 VIF_ENTRY 2016 __field(u8, master_pref) 2017 __field(u8, bands) 2018 ), 2019 2020 TP_fast_assign( 2021 LOCAL_ASSIGN; 2022 VIF_ASSIGN; 2023 __entry->master_pref = conf->master_pref; 2024 __entry->bands = conf->bands; 2025 ), 2026 2027 TP_printk( 2028 LOCAL_PR_FMT VIF_PR_FMT 2029 ", master preference: %u, bands: 0x%0x", 2030 LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref, 2031 __entry->bands 2032 ) 2033 ); 2034 2035 TRACE_EVENT(drv_stop_nan, 2036 TP_PROTO(struct ieee80211_local *local, 2037 struct ieee80211_sub_if_data *sdata), 2038 2039 TP_ARGS(local, sdata), 2040 2041 TP_STRUCT__entry( 2042 LOCAL_ENTRY 2043 VIF_ENTRY 2044 ), 2045 2046 TP_fast_assign( 2047 LOCAL_ASSIGN; 2048 VIF_ASSIGN; 2049 ), 2050 2051 TP_printk( 2052 LOCAL_PR_FMT VIF_PR_FMT, 2053 LOCAL_PR_ARG, VIF_PR_ARG 2054 ) 2055 ); 2056 2057 TRACE_EVENT(drv_nan_change_conf, 2058 TP_PROTO(struct ieee80211_local *local, 2059 struct ieee80211_sub_if_data *sdata, 2060 struct cfg80211_nan_conf *conf, 2061 u32 changes), 2062 2063 TP_ARGS(local, sdata, conf, changes), 2064 TP_STRUCT__entry( 2065 LOCAL_ENTRY 2066 VIF_ENTRY 2067 __field(u8, master_pref) 2068 __field(u8, bands) 2069 __field(u32, changes) 2070 ), 2071 2072 TP_fast_assign( 2073 LOCAL_ASSIGN; 2074 VIF_ASSIGN; 2075 __entry->master_pref = conf->master_pref; 2076 __entry->bands = conf->bands; 2077 __entry->changes = changes; 2078 ), 2079 2080 TP_printk( 2081 LOCAL_PR_FMT VIF_PR_FMT 2082 ", master preference: %u, bands: 0x%0x, changes: 0x%x", 2083 LOCAL_PR_ARG, VIF_PR_ARG, __entry->master_pref, 2084 __entry->bands, __entry->changes 2085 ) 2086 ); 2087 2088 TRACE_EVENT(drv_add_nan_func, 2089 TP_PROTO(struct ieee80211_local *local, 2090 struct ieee80211_sub_if_data *sdata, 2091 const struct cfg80211_nan_func *func), 2092 2093 TP_ARGS(local, sdata, func), 2094 TP_STRUCT__entry( 2095 LOCAL_ENTRY 2096 VIF_ENTRY 2097 __field(u8, type) 2098 __field(u8, inst_id) 2099 ), 2100 2101 TP_fast_assign( 2102 LOCAL_ASSIGN; 2103 VIF_ASSIGN; 2104 __entry->type = func->type; 2105 __entry->inst_id = func->instance_id; 2106 ), 2107 2108 TP_printk( 2109 LOCAL_PR_FMT VIF_PR_FMT 2110 ", type: %u, inst_id: %u", 2111 LOCAL_PR_ARG, VIF_PR_ARG, __entry->type, __entry->inst_id 2112 ) 2113 ); 2114 2115 TRACE_EVENT(drv_del_nan_func, 2116 TP_PROTO(struct ieee80211_local *local, 2117 struct ieee80211_sub_if_data *sdata, 2118 u8 instance_id), 2119 2120 TP_ARGS(local, sdata, instance_id), 2121 TP_STRUCT__entry( 2122 LOCAL_ENTRY 2123 VIF_ENTRY 2124 __field(u8, instance_id) 2125 ), 2126 2127 TP_fast_assign( 2128 LOCAL_ASSIGN; 2129 VIF_ASSIGN; 2130 __entry->instance_id = instance_id; 2131 ), 2132 2133 TP_printk( 2134 LOCAL_PR_FMT VIF_PR_FMT 2135 ", instance_id: %u", 2136 LOCAL_PR_ARG, VIF_PR_ARG, __entry->instance_id 2137 ) 2138 ); 2139 2140 DEFINE_EVENT(local_sdata_evt, drv_start_pmsr, 2141 TP_PROTO(struct ieee80211_local *local, 2142 struct ieee80211_sub_if_data *sdata), 2143 TP_ARGS(local, sdata) 2144 ); 2145 2146 DEFINE_EVENT(local_sdata_evt, drv_abort_pmsr, 2147 TP_PROTO(struct ieee80211_local *local, 2148 struct ieee80211_sub_if_data *sdata), 2149 TP_ARGS(local, sdata) 2150 ); 2151 2152 TRACE_EVENT(drv_set_default_unicast_key, 2153 TP_PROTO(struct ieee80211_local *local, 2154 struct ieee80211_sub_if_data *sdata, 2155 int key_idx), 2156 2157 TP_ARGS(local, sdata, key_idx), 2158 2159 TP_STRUCT__entry( 2160 LOCAL_ENTRY 2161 VIF_ENTRY 2162 __field(int, key_idx) 2163 ), 2164 2165 TP_fast_assign( 2166 LOCAL_ASSIGN; 2167 VIF_ASSIGN; 2168 __entry->key_idx = key_idx; 2169 ), 2170 2171 TP_printk(LOCAL_PR_FMT VIF_PR_FMT " key_idx:%d", 2172 LOCAL_PR_ARG, VIF_PR_ARG, __entry->key_idx) 2173 ); 2174 2175 TRACE_EVENT(drv_channel_switch_beacon, 2176 TP_PROTO(struct ieee80211_local *local, 2177 struct ieee80211_sub_if_data *sdata, 2178 struct cfg80211_chan_def *chandef), 2179 2180 TP_ARGS(local, sdata, chandef), 2181 2182 TP_STRUCT__entry( 2183 LOCAL_ENTRY 2184 VIF_ENTRY 2185 CHANDEF_ENTRY 2186 ), 2187 2188 TP_fast_assign( 2189 LOCAL_ASSIGN; 2190 VIF_ASSIGN; 2191 CHANDEF_ASSIGN(chandef); 2192 ), 2193 2194 TP_printk( 2195 LOCAL_PR_FMT VIF_PR_FMT " channel switch to " CHANDEF_PR_FMT, 2196 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG 2197 ) 2198 ); 2199 2200 DEFINE_EVENT(chanswitch_evt, drv_pre_channel_switch, 2201 TP_PROTO(struct ieee80211_local *local, 2202 struct ieee80211_sub_if_data *sdata, 2203 struct ieee80211_channel_switch *ch_switch), 2204 TP_ARGS(local, sdata, ch_switch) 2205 ); 2206 2207 DEFINE_EVENT(local_sdata_evt, drv_post_channel_switch, 2208 TP_PROTO(struct ieee80211_local *local, 2209 struct ieee80211_sub_if_data *sdata), 2210 TP_ARGS(local, sdata) 2211 ); 2212 2213 DEFINE_EVENT(local_sdata_evt, drv_abort_channel_switch, 2214 TP_PROTO(struct ieee80211_local *local, 2215 struct ieee80211_sub_if_data *sdata), 2216 TP_ARGS(local, sdata) 2217 ); 2218 2219 DEFINE_EVENT(chanswitch_evt, drv_channel_switch_rx_beacon, 2220 TP_PROTO(struct ieee80211_local *local, 2221 struct ieee80211_sub_if_data *sdata, 2222 struct ieee80211_channel_switch *ch_switch), 2223 TP_ARGS(local, sdata, ch_switch) 2224 ); 2225 2226 TRACE_EVENT(drv_get_txpower, 2227 TP_PROTO(struct ieee80211_local *local, 2228 struct ieee80211_sub_if_data *sdata, 2229 unsigned int link_id, int dbm, int ret), 2230 2231 TP_ARGS(local, sdata, link_id, dbm, ret), 2232 2233 TP_STRUCT__entry( 2234 LOCAL_ENTRY 2235 VIF_ENTRY 2236 __field(unsigned int, link_id) 2237 __field(int, dbm) 2238 __field(int, ret) 2239 ), 2240 2241 TP_fast_assign( 2242 LOCAL_ASSIGN; 2243 VIF_ASSIGN; 2244 __entry->link_id = link_id; 2245 __entry->dbm = dbm; 2246 __entry->ret = ret; 2247 ), 2248 2249 TP_printk( 2250 LOCAL_PR_FMT VIF_PR_FMT " link_id:%d dbm:%d ret:%d", 2251 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, __entry->dbm, __entry->ret 2252 ) 2253 ); 2254 2255 TRACE_EVENT(drv_tdls_channel_switch, 2256 TP_PROTO(struct ieee80211_local *local, 2257 struct ieee80211_sub_if_data *sdata, 2258 struct ieee80211_sta *sta, u8 oper_class, 2259 struct cfg80211_chan_def *chandef), 2260 2261 TP_ARGS(local, sdata, sta, oper_class, chandef), 2262 2263 TP_STRUCT__entry( 2264 LOCAL_ENTRY 2265 VIF_ENTRY 2266 STA_ENTRY 2267 __field(u8, oper_class) 2268 CHANDEF_ENTRY 2269 ), 2270 2271 TP_fast_assign( 2272 LOCAL_ASSIGN; 2273 VIF_ASSIGN; 2274 STA_ASSIGN; 2275 __entry->oper_class = oper_class; 2276 CHANDEF_ASSIGN(chandef) 2277 ), 2278 2279 TP_printk( 2280 LOCAL_PR_FMT VIF_PR_FMT " tdls channel switch to" 2281 CHANDEF_PR_FMT " oper_class:%d " STA_PR_FMT, 2282 LOCAL_PR_ARG, VIF_PR_ARG, CHANDEF_PR_ARG, __entry->oper_class, 2283 STA_PR_ARG 2284 ) 2285 ); 2286 2287 TRACE_EVENT(drv_tdls_cancel_channel_switch, 2288 TP_PROTO(struct ieee80211_local *local, 2289 struct ieee80211_sub_if_data *sdata, 2290 struct ieee80211_sta *sta), 2291 2292 TP_ARGS(local, sdata, sta), 2293 2294 TP_STRUCT__entry( 2295 LOCAL_ENTRY 2296 VIF_ENTRY 2297 STA_ENTRY 2298 ), 2299 2300 TP_fast_assign( 2301 LOCAL_ASSIGN; 2302 VIF_ASSIGN; 2303 STA_ASSIGN; 2304 ), 2305 2306 TP_printk( 2307 LOCAL_PR_FMT VIF_PR_FMT 2308 " tdls cancel channel switch with " STA_PR_FMT, 2309 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG 2310 ) 2311 ); 2312 2313 TRACE_EVENT(drv_tdls_recv_channel_switch, 2314 TP_PROTO(struct ieee80211_local *local, 2315 struct ieee80211_sub_if_data *sdata, 2316 struct ieee80211_tdls_ch_sw_params *params), 2317 2318 TP_ARGS(local, sdata, params), 2319 2320 TP_STRUCT__entry( 2321 LOCAL_ENTRY 2322 VIF_ENTRY 2323 __field(u8, action_code) 2324 STA_ENTRY 2325 CHANDEF_ENTRY 2326 __field(u32, status) 2327 __field(bool, peer_initiator) 2328 __field(u32, timestamp) 2329 __field(u16, switch_time) 2330 __field(u16, switch_timeout) 2331 ), 2332 2333 TP_fast_assign( 2334 LOCAL_ASSIGN; 2335 VIF_ASSIGN; 2336 STA_NAMED_ASSIGN(params->sta); 2337 CHANDEF_ASSIGN(params->chandef) 2338 __entry->peer_initiator = params->sta->tdls_initiator; 2339 __entry->action_code = params->action_code; 2340 __entry->status = params->status; 2341 __entry->timestamp = params->timestamp; 2342 __entry->switch_time = params->switch_time; 2343 __entry->switch_timeout = params->switch_timeout; 2344 ), 2345 2346 TP_printk( 2347 LOCAL_PR_FMT VIF_PR_FMT " received tdls channel switch packet" 2348 " action:%d status:%d time:%d switch time:%d switch" 2349 " timeout:%d initiator: %d chan:" CHANDEF_PR_FMT STA_PR_FMT, 2350 LOCAL_PR_ARG, VIF_PR_ARG, __entry->action_code, __entry->status, 2351 __entry->timestamp, __entry->switch_time, 2352 __entry->switch_timeout, __entry->peer_initiator, 2353 CHANDEF_PR_ARG, STA_PR_ARG 2354 ) 2355 ); 2356 2357 TRACE_EVENT(drv_wake_tx_queue, 2358 TP_PROTO(struct ieee80211_local *local, 2359 struct ieee80211_sub_if_data *sdata, 2360 struct txq_info *txq), 2361 2362 TP_ARGS(local, sdata, txq), 2363 2364 TP_STRUCT__entry( 2365 LOCAL_ENTRY 2366 VIF_ENTRY 2367 STA_ENTRY 2368 __field(u8, ac) 2369 __field(u8, tid) 2370 ), 2371 2372 TP_fast_assign( 2373 struct ieee80211_sta *sta = txq->txq.sta; 2374 2375 LOCAL_ASSIGN; 2376 VIF_ASSIGN; 2377 STA_ASSIGN; 2378 __entry->ac = txq->txq.ac; 2379 __entry->tid = txq->txq.tid; 2380 ), 2381 2382 TP_printk( 2383 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " ac:%d tid:%d", 2384 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->ac, __entry->tid 2385 ) 2386 ); 2387 2388 TRACE_EVENT(drv_get_ftm_responder_stats, 2389 TP_PROTO(struct ieee80211_local *local, 2390 struct ieee80211_sub_if_data *sdata, 2391 struct cfg80211_ftm_responder_stats *ftm_stats), 2392 2393 TP_ARGS(local, sdata, ftm_stats), 2394 2395 TP_STRUCT__entry( 2396 LOCAL_ENTRY 2397 VIF_ENTRY 2398 ), 2399 2400 TP_fast_assign( 2401 LOCAL_ASSIGN; 2402 VIF_ASSIGN; 2403 ), 2404 2405 TP_printk( 2406 LOCAL_PR_FMT VIF_PR_FMT, 2407 LOCAL_PR_ARG, VIF_PR_ARG 2408 ) 2409 ); 2410 2411 DEFINE_EVENT(local_sdata_addr_evt, drv_update_vif_offload, 2412 TP_PROTO(struct ieee80211_local *local, 2413 struct ieee80211_sub_if_data *sdata), 2414 TP_ARGS(local, sdata) 2415 ); 2416 2417 DECLARE_EVENT_CLASS(sta_flag_evt, 2418 TP_PROTO(struct ieee80211_local *local, 2419 struct ieee80211_sub_if_data *sdata, 2420 struct ieee80211_sta *sta, bool enabled), 2421 2422 TP_ARGS(local, sdata, sta, enabled), 2423 2424 TP_STRUCT__entry( 2425 LOCAL_ENTRY 2426 VIF_ENTRY 2427 STA_ENTRY 2428 __field(bool, enabled) 2429 ), 2430 2431 TP_fast_assign( 2432 LOCAL_ASSIGN; 2433 VIF_ASSIGN; 2434 STA_ASSIGN; 2435 __entry->enabled = enabled; 2436 ), 2437 2438 TP_printk( 2439 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " enabled:%d", 2440 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->enabled 2441 ) 2442 ); 2443 2444 DEFINE_EVENT(sta_flag_evt, drv_sta_set_4addr, 2445 TP_PROTO(struct ieee80211_local *local, 2446 struct ieee80211_sub_if_data *sdata, 2447 struct ieee80211_sta *sta, bool enabled), 2448 2449 TP_ARGS(local, sdata, sta, enabled) 2450 ); 2451 2452 DEFINE_EVENT(sta_flag_evt, drv_sta_set_decap_offload, 2453 TP_PROTO(struct ieee80211_local *local, 2454 struct ieee80211_sub_if_data *sdata, 2455 struct ieee80211_sta *sta, bool enabled), 2456 2457 TP_ARGS(local, sdata, sta, enabled) 2458 ); 2459 2460 TRACE_EVENT(drv_add_twt_setup, 2461 TP_PROTO(struct ieee80211_local *local, 2462 struct ieee80211_sta *sta, 2463 struct ieee80211_twt_setup *twt, 2464 struct ieee80211_twt_params *twt_agrt), 2465 2466 TP_ARGS(local, sta, twt, twt_agrt), 2467 2468 TP_STRUCT__entry( 2469 LOCAL_ENTRY 2470 STA_ENTRY 2471 __field(u8, dialog_token) 2472 __field(u8, control) 2473 __field(__le16, req_type) 2474 __field(__le64, twt) 2475 __field(u8, duration) 2476 __field(__le16, mantissa) 2477 __field(u8, channel) 2478 ), 2479 2480 TP_fast_assign( 2481 LOCAL_ASSIGN; 2482 STA_ASSIGN; 2483 __entry->dialog_token = twt->dialog_token; 2484 __entry->control = twt->control; 2485 __entry->req_type = twt_agrt->req_type; 2486 __entry->twt = twt_agrt->twt; 2487 __entry->duration = twt_agrt->min_twt_dur; 2488 __entry->mantissa = twt_agrt->mantissa; 2489 __entry->channel = twt_agrt->channel; 2490 ), 2491 2492 TP_printk( 2493 LOCAL_PR_FMT STA_PR_FMT 2494 " token:%d control:0x%02x req_type:0x%04x" 2495 " twt:%llu duration:%d mantissa:%d channel:%d", 2496 LOCAL_PR_ARG, STA_PR_ARG, __entry->dialog_token, 2497 __entry->control, le16_to_cpu(__entry->req_type), 2498 le64_to_cpu(__entry->twt), __entry->duration, 2499 le16_to_cpu(__entry->mantissa), __entry->channel 2500 ) 2501 ); 2502 2503 TRACE_EVENT(drv_twt_teardown_request, 2504 TP_PROTO(struct ieee80211_local *local, 2505 struct ieee80211_sta *sta, u8 flowid), 2506 2507 TP_ARGS(local, sta, flowid), 2508 2509 TP_STRUCT__entry( 2510 LOCAL_ENTRY 2511 STA_ENTRY 2512 __field(u8, flowid) 2513 ), 2514 2515 TP_fast_assign( 2516 LOCAL_ASSIGN; 2517 STA_ASSIGN; 2518 __entry->flowid = flowid; 2519 ), 2520 2521 TP_printk( 2522 LOCAL_PR_FMT STA_PR_FMT " flowid:%d", 2523 LOCAL_PR_ARG, STA_PR_ARG, __entry->flowid 2524 ) 2525 ); 2526 2527 DEFINE_EVENT(sta_event, drv_net_fill_forward_path, 2528 TP_PROTO(struct ieee80211_local *local, 2529 struct ieee80211_sub_if_data *sdata, 2530 struct ieee80211_sta *sta), 2531 TP_ARGS(local, sdata, sta) 2532 ); 2533 2534 TRACE_EVENT(drv_net_setup_tc, 2535 TP_PROTO(struct ieee80211_local *local, 2536 struct ieee80211_sub_if_data *sdata, 2537 u8 type), 2538 2539 TP_ARGS(local, sdata, type), 2540 2541 TP_STRUCT__entry( 2542 LOCAL_ENTRY 2543 VIF_ENTRY 2544 __field(u8, type) 2545 ), 2546 2547 TP_fast_assign( 2548 LOCAL_ASSIGN; 2549 VIF_ASSIGN; 2550 __entry->type = type; 2551 ), 2552 2553 TP_printk( 2554 LOCAL_PR_FMT VIF_PR_FMT " type:%d\n", 2555 LOCAL_PR_ARG, VIF_PR_ARG, __entry->type 2556 ) 2557 ); 2558 2559 TRACE_EVENT(drv_can_activate_links, 2560 TP_PROTO(struct ieee80211_local *local, 2561 struct ieee80211_sub_if_data *sdata, 2562 u16 active_links), 2563 2564 TP_ARGS(local, sdata, active_links), 2565 2566 TP_STRUCT__entry( 2567 LOCAL_ENTRY 2568 VIF_ENTRY 2569 __field(u16, active_links) 2570 ), 2571 2572 TP_fast_assign( 2573 LOCAL_ASSIGN; 2574 VIF_ASSIGN; 2575 __entry->active_links = active_links; 2576 ), 2577 2578 TP_printk( 2579 LOCAL_PR_FMT VIF_PR_FMT " requested active_links:0x%04x\n", 2580 LOCAL_PR_ARG, VIF_PR_ARG, __entry->active_links 2581 ) 2582 ); 2583 2584 TRACE_EVENT(drv_change_vif_links, 2585 TP_PROTO(struct ieee80211_local *local, 2586 struct ieee80211_sub_if_data *sdata, 2587 u16 old_links, u16 new_links), 2588 2589 TP_ARGS(local, sdata, old_links, new_links), 2590 2591 TP_STRUCT__entry( 2592 LOCAL_ENTRY 2593 VIF_ENTRY 2594 __field(u16, old_links) 2595 __field(u16, new_links) 2596 ), 2597 2598 TP_fast_assign( 2599 LOCAL_ASSIGN; 2600 VIF_ASSIGN; 2601 __entry->old_links = old_links; 2602 __entry->new_links = new_links; 2603 ), 2604 2605 TP_printk( 2606 LOCAL_PR_FMT VIF_PR_FMT " old_links:0x%04x, new_links:0x%04x\n", 2607 LOCAL_PR_ARG, VIF_PR_ARG, __entry->old_links, __entry->new_links 2608 ) 2609 ); 2610 2611 TRACE_EVENT(drv_change_sta_links, 2612 TP_PROTO(struct ieee80211_local *local, 2613 struct ieee80211_sub_if_data *sdata, 2614 struct ieee80211_sta *sta, 2615 u16 old_links, u16 new_links), 2616 2617 TP_ARGS(local, sdata, sta, old_links, new_links), 2618 2619 TP_STRUCT__entry( 2620 LOCAL_ENTRY 2621 VIF_ENTRY 2622 STA_ENTRY 2623 __field(u16, old_links) 2624 __field(u16, new_links) 2625 ), 2626 2627 TP_fast_assign( 2628 LOCAL_ASSIGN; 2629 VIF_ASSIGN; 2630 STA_ASSIGN; 2631 __entry->old_links = old_links; 2632 __entry->new_links = new_links; 2633 ), 2634 2635 TP_printk( 2636 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " old_links:0x%04x, new_links:0x%04x\n", 2637 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, 2638 __entry->old_links, __entry->new_links 2639 ) 2640 ); 2641 2642 /* 2643 * Tracing for API calls that drivers call. 2644 */ 2645 2646 TRACE_EVENT(api_return_bool, 2647 TP_PROTO(struct ieee80211_local *local, bool result), 2648 2649 TP_ARGS(local, result), 2650 2651 TP_STRUCT__entry( 2652 LOCAL_ENTRY 2653 __field(bool, result) 2654 ), 2655 2656 TP_fast_assign( 2657 LOCAL_ASSIGN; 2658 __entry->result = result; 2659 ), 2660 2661 TP_printk( 2662 LOCAL_PR_FMT " result=%d", 2663 LOCAL_PR_ARG, __entry->result 2664 ) 2665 ); 2666 2667 TRACE_EVENT(api_return_void, 2668 TP_PROTO(struct ieee80211_local *local), 2669 2670 TP_ARGS(local), 2671 2672 TP_STRUCT__entry( 2673 LOCAL_ENTRY 2674 ), 2675 2676 TP_fast_assign( 2677 LOCAL_ASSIGN; 2678 ), 2679 2680 TP_printk( 2681 LOCAL_PR_FMT, LOCAL_PR_ARG 2682 ) 2683 ); 2684 2685 TRACE_EVENT(api_start_tx_ba_session, 2686 TP_PROTO(struct ieee80211_sta *sta, u16 tid), 2687 2688 TP_ARGS(sta, tid), 2689 2690 TP_STRUCT__entry( 2691 STA_ENTRY 2692 __field(u16, tid) 2693 ), 2694 2695 TP_fast_assign( 2696 STA_ASSIGN; 2697 __entry->tid = tid; 2698 ), 2699 2700 TP_printk( 2701 STA_PR_FMT " tid:%d", 2702 STA_PR_ARG, __entry->tid 2703 ) 2704 ); 2705 2706 TRACE_EVENT(api_start_tx_ba_cb, 2707 TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid), 2708 2709 TP_ARGS(sdata, ra, tid), 2710 2711 TP_STRUCT__entry( 2712 VIF_ENTRY 2713 __array(u8, ra, ETH_ALEN) 2714 __field(u16, tid) 2715 ), 2716 2717 TP_fast_assign( 2718 VIF_ASSIGN; 2719 memcpy(__entry->ra, ra, ETH_ALEN); 2720 __entry->tid = tid; 2721 ), 2722 2723 TP_printk( 2724 VIF_PR_FMT " ra:%pM tid:%d", 2725 VIF_PR_ARG, __entry->ra, __entry->tid 2726 ) 2727 ); 2728 2729 TRACE_EVENT(api_stop_tx_ba_session, 2730 TP_PROTO(struct ieee80211_sta *sta, u16 tid), 2731 2732 TP_ARGS(sta, tid), 2733 2734 TP_STRUCT__entry( 2735 STA_ENTRY 2736 __field(u16, tid) 2737 ), 2738 2739 TP_fast_assign( 2740 STA_ASSIGN; 2741 __entry->tid = tid; 2742 ), 2743 2744 TP_printk( 2745 STA_PR_FMT " tid:%d", 2746 STA_PR_ARG, __entry->tid 2747 ) 2748 ); 2749 2750 TRACE_EVENT(api_stop_tx_ba_cb, 2751 TP_PROTO(struct ieee80211_sub_if_data *sdata, const u8 *ra, u16 tid), 2752 2753 TP_ARGS(sdata, ra, tid), 2754 2755 TP_STRUCT__entry( 2756 VIF_ENTRY 2757 __array(u8, ra, ETH_ALEN) 2758 __field(u16, tid) 2759 ), 2760 2761 TP_fast_assign( 2762 VIF_ASSIGN; 2763 memcpy(__entry->ra, ra, ETH_ALEN); 2764 __entry->tid = tid; 2765 ), 2766 2767 TP_printk( 2768 VIF_PR_FMT " ra:%pM tid:%d", 2769 VIF_PR_ARG, __entry->ra, __entry->tid 2770 ) 2771 ); 2772 2773 DEFINE_EVENT(local_only_evt, api_restart_hw, 2774 TP_PROTO(struct ieee80211_local *local), 2775 TP_ARGS(local) 2776 ); 2777 2778 TRACE_EVENT(api_beacon_loss, 2779 TP_PROTO(struct ieee80211_sub_if_data *sdata), 2780 2781 TP_ARGS(sdata), 2782 2783 TP_STRUCT__entry( 2784 VIF_ENTRY 2785 ), 2786 2787 TP_fast_assign( 2788 VIF_ASSIGN; 2789 ), 2790 2791 TP_printk( 2792 VIF_PR_FMT, 2793 VIF_PR_ARG 2794 ) 2795 ); 2796 2797 TRACE_EVENT(api_connection_loss, 2798 TP_PROTO(struct ieee80211_sub_if_data *sdata), 2799 2800 TP_ARGS(sdata), 2801 2802 TP_STRUCT__entry( 2803 VIF_ENTRY 2804 ), 2805 2806 TP_fast_assign( 2807 VIF_ASSIGN; 2808 ), 2809 2810 TP_printk( 2811 VIF_PR_FMT, 2812 VIF_PR_ARG 2813 ) 2814 ); 2815 2816 TRACE_EVENT(api_disconnect, 2817 TP_PROTO(struct ieee80211_sub_if_data *sdata, bool reconnect), 2818 2819 TP_ARGS(sdata, reconnect), 2820 2821 TP_STRUCT__entry( 2822 VIF_ENTRY 2823 __field(int, reconnect) 2824 ), 2825 2826 TP_fast_assign( 2827 VIF_ASSIGN; 2828 __entry->reconnect = reconnect; 2829 ), 2830 2831 TP_printk( 2832 VIF_PR_FMT " reconnect:%d", 2833 VIF_PR_ARG, __entry->reconnect 2834 ) 2835 ); 2836 2837 TRACE_EVENT(api_cqm_rssi_notify, 2838 TP_PROTO(struct ieee80211_sub_if_data *sdata, 2839 enum nl80211_cqm_rssi_threshold_event rssi_event, 2840 s32 rssi_level), 2841 2842 TP_ARGS(sdata, rssi_event, rssi_level), 2843 2844 TP_STRUCT__entry( 2845 VIF_ENTRY 2846 __field(u32, rssi_event) 2847 __field(s32, rssi_level) 2848 ), 2849 2850 TP_fast_assign( 2851 VIF_ASSIGN; 2852 __entry->rssi_event = rssi_event; 2853 __entry->rssi_level = rssi_level; 2854 ), 2855 2856 TP_printk( 2857 VIF_PR_FMT " event:%d rssi:%d", 2858 VIF_PR_ARG, __entry->rssi_event, __entry->rssi_level 2859 ) 2860 ); 2861 2862 DEFINE_EVENT(local_sdata_evt, api_cqm_beacon_loss_notify, 2863 TP_PROTO(struct ieee80211_local *local, 2864 struct ieee80211_sub_if_data *sdata), 2865 TP_ARGS(local, sdata) 2866 ); 2867 2868 TRACE_EVENT(api_scan_completed, 2869 TP_PROTO(struct ieee80211_local *local, bool aborted), 2870 2871 TP_ARGS(local, aborted), 2872 2873 TP_STRUCT__entry( 2874 LOCAL_ENTRY 2875 __field(bool, aborted) 2876 ), 2877 2878 TP_fast_assign( 2879 LOCAL_ASSIGN; 2880 __entry->aborted = aborted; 2881 ), 2882 2883 TP_printk( 2884 LOCAL_PR_FMT " aborted:%d", 2885 LOCAL_PR_ARG, __entry->aborted 2886 ) 2887 ); 2888 2889 TRACE_EVENT(api_sched_scan_results, 2890 TP_PROTO(struct ieee80211_local *local), 2891 2892 TP_ARGS(local), 2893 2894 TP_STRUCT__entry( 2895 LOCAL_ENTRY 2896 ), 2897 2898 TP_fast_assign( 2899 LOCAL_ASSIGN; 2900 ), 2901 2902 TP_printk( 2903 LOCAL_PR_FMT, LOCAL_PR_ARG 2904 ) 2905 ); 2906 2907 TRACE_EVENT(api_sched_scan_stopped, 2908 TP_PROTO(struct ieee80211_local *local), 2909 2910 TP_ARGS(local), 2911 2912 TP_STRUCT__entry( 2913 LOCAL_ENTRY 2914 ), 2915 2916 TP_fast_assign( 2917 LOCAL_ASSIGN; 2918 ), 2919 2920 TP_printk( 2921 LOCAL_PR_FMT, LOCAL_PR_ARG 2922 ) 2923 ); 2924 2925 TRACE_EVENT(api_sta_block_awake, 2926 TP_PROTO(struct ieee80211_local *local, 2927 struct ieee80211_sta *sta, bool block), 2928 2929 TP_ARGS(local, sta, block), 2930 2931 TP_STRUCT__entry( 2932 LOCAL_ENTRY 2933 STA_ENTRY 2934 __field(bool, block) 2935 ), 2936 2937 TP_fast_assign( 2938 LOCAL_ASSIGN; 2939 STA_ASSIGN; 2940 __entry->block = block; 2941 ), 2942 2943 TP_printk( 2944 LOCAL_PR_FMT STA_PR_FMT " block:%d", 2945 LOCAL_PR_ARG, STA_PR_ARG, __entry->block 2946 ) 2947 ); 2948 2949 TRACE_EVENT(api_chswitch_done, 2950 TP_PROTO(struct ieee80211_sub_if_data *sdata, bool success, 2951 unsigned int link_id), 2952 2953 TP_ARGS(sdata, success, link_id), 2954 2955 TP_STRUCT__entry( 2956 VIF_ENTRY 2957 __field(bool, success) 2958 __field(unsigned int, link_id) 2959 ), 2960 2961 TP_fast_assign( 2962 VIF_ASSIGN; 2963 __entry->success = success; 2964 __entry->link_id = link_id; 2965 ), 2966 2967 TP_printk( 2968 VIF_PR_FMT " success=%d link_id=%d", 2969 VIF_PR_ARG, __entry->success, __entry->link_id 2970 ) 2971 ); 2972 2973 DEFINE_EVENT(local_only_evt, api_ready_on_channel, 2974 TP_PROTO(struct ieee80211_local *local), 2975 TP_ARGS(local) 2976 ); 2977 2978 DEFINE_EVENT(local_only_evt, api_remain_on_channel_expired, 2979 TP_PROTO(struct ieee80211_local *local), 2980 TP_ARGS(local) 2981 ); 2982 2983 TRACE_EVENT(api_gtk_rekey_notify, 2984 TP_PROTO(struct ieee80211_sub_if_data *sdata, 2985 const u8 *bssid, const u8 *replay_ctr), 2986 2987 TP_ARGS(sdata, bssid, replay_ctr), 2988 2989 TP_STRUCT__entry( 2990 VIF_ENTRY 2991 __array(u8, bssid, ETH_ALEN) 2992 __array(u8, replay_ctr, NL80211_REPLAY_CTR_LEN) 2993 ), 2994 2995 TP_fast_assign( 2996 VIF_ASSIGN; 2997 memcpy(__entry->bssid, bssid, ETH_ALEN); 2998 memcpy(__entry->replay_ctr, replay_ctr, NL80211_REPLAY_CTR_LEN); 2999 ), 3000 3001 TP_printk(VIF_PR_FMT, VIF_PR_ARG) 3002 ); 3003 3004 TRACE_EVENT(api_enable_rssi_reports, 3005 TP_PROTO(struct ieee80211_sub_if_data *sdata, 3006 int rssi_min_thold, int rssi_max_thold), 3007 3008 TP_ARGS(sdata, rssi_min_thold, rssi_max_thold), 3009 3010 TP_STRUCT__entry( 3011 VIF_ENTRY 3012 __field(int, rssi_min_thold) 3013 __field(int, rssi_max_thold) 3014 ), 3015 3016 TP_fast_assign( 3017 VIF_ASSIGN; 3018 __entry->rssi_min_thold = rssi_min_thold; 3019 __entry->rssi_max_thold = rssi_max_thold; 3020 ), 3021 3022 TP_printk( 3023 VIF_PR_FMT " rssi_min_thold =%d, rssi_max_thold = %d", 3024 VIF_PR_ARG, __entry->rssi_min_thold, __entry->rssi_max_thold 3025 ) 3026 ); 3027 3028 TRACE_EVENT(api_eosp, 3029 TP_PROTO(struct ieee80211_local *local, 3030 struct ieee80211_sta *sta), 3031 3032 TP_ARGS(local, sta), 3033 3034 TP_STRUCT__entry( 3035 LOCAL_ENTRY 3036 STA_ENTRY 3037 ), 3038 3039 TP_fast_assign( 3040 LOCAL_ASSIGN; 3041 STA_ASSIGN; 3042 ), 3043 3044 TP_printk( 3045 LOCAL_PR_FMT STA_PR_FMT, 3046 LOCAL_PR_ARG, STA_PR_ARG 3047 ) 3048 ); 3049 3050 TRACE_EVENT(api_send_eosp_nullfunc, 3051 TP_PROTO(struct ieee80211_local *local, 3052 struct ieee80211_sta *sta, 3053 u8 tid), 3054 3055 TP_ARGS(local, sta, tid), 3056 3057 TP_STRUCT__entry( 3058 LOCAL_ENTRY 3059 STA_ENTRY 3060 __field(u8, tid) 3061 ), 3062 3063 TP_fast_assign( 3064 LOCAL_ASSIGN; 3065 STA_ASSIGN; 3066 __entry->tid = tid; 3067 ), 3068 3069 TP_printk( 3070 LOCAL_PR_FMT STA_PR_FMT " tid:%d", 3071 LOCAL_PR_ARG, STA_PR_ARG, __entry->tid 3072 ) 3073 ); 3074 3075 TRACE_EVENT(api_sta_set_buffered, 3076 TP_PROTO(struct ieee80211_local *local, 3077 struct ieee80211_sta *sta, 3078 u8 tid, bool buffered), 3079 3080 TP_ARGS(local, sta, tid, buffered), 3081 3082 TP_STRUCT__entry( 3083 LOCAL_ENTRY 3084 STA_ENTRY 3085 __field(u8, tid) 3086 __field(bool, buffered) 3087 ), 3088 3089 TP_fast_assign( 3090 LOCAL_ASSIGN; 3091 STA_ASSIGN; 3092 __entry->tid = tid; 3093 __entry->buffered = buffered; 3094 ), 3095 3096 TP_printk( 3097 LOCAL_PR_FMT STA_PR_FMT " tid:%d buffered:%d", 3098 LOCAL_PR_ARG, STA_PR_ARG, __entry->tid, __entry->buffered 3099 ) 3100 ); 3101 3102 TRACE_EVENT(api_radar_detected, 3103 TP_PROTO(struct ieee80211_local *local), 3104 3105 TP_ARGS(local), 3106 3107 TP_STRUCT__entry( 3108 LOCAL_ENTRY 3109 ), 3110 3111 TP_fast_assign( 3112 LOCAL_ASSIGN; 3113 ), 3114 3115 TP_printk( 3116 LOCAL_PR_FMT " radar detected", 3117 LOCAL_PR_ARG 3118 ) 3119 ); 3120 3121 TRACE_EVENT(api_request_smps, 3122 TP_PROTO(struct ieee80211_local *local, 3123 struct ieee80211_sub_if_data *sdata, 3124 struct ieee80211_link_data *link, 3125 enum ieee80211_smps_mode smps_mode), 3126 3127 TP_ARGS(local, sdata, link, smps_mode), 3128 3129 TP_STRUCT__entry( 3130 LOCAL_ENTRY 3131 VIF_ENTRY 3132 __field(int, link_id) 3133 __field(u32, smps_mode) 3134 ), 3135 3136 TP_fast_assign( 3137 LOCAL_ASSIGN; 3138 VIF_ASSIGN; 3139 __entry->link_id = link->link_id, 3140 __entry->smps_mode = smps_mode; 3141 ), 3142 3143 TP_printk( 3144 LOCAL_PR_FMT " " VIF_PR_FMT " link:%d, smps_mode:%d", 3145 LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, __entry->smps_mode 3146 ) 3147 ); 3148 3149 TRACE_EVENT(api_prepare_rx_omi_bw, 3150 TP_PROTO(struct ieee80211_local *local, 3151 struct ieee80211_sub_if_data *sdata, 3152 struct link_sta_info *link_sta, 3153 enum ieee80211_sta_rx_bandwidth bw), 3154 3155 TP_ARGS(local, sdata, link_sta, bw), 3156 3157 TP_STRUCT__entry( 3158 LOCAL_ENTRY 3159 VIF_ENTRY 3160 STA_ENTRY 3161 __field(int, link_id) 3162 __field(u32, bw) 3163 __field(bool, result) 3164 ), 3165 3166 TP_fast_assign( 3167 LOCAL_ASSIGN; 3168 VIF_ASSIGN; 3169 STA_NAMED_ASSIGN(link_sta->sta); 3170 __entry->link_id = link_sta->link_id; 3171 __entry->bw = bw; 3172 ), 3173 3174 TP_printk( 3175 LOCAL_PR_FMT " " VIF_PR_FMT " " STA_PR_FMT " link:%d, bw:%d", 3176 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, 3177 __entry->link_id, __entry->bw 3178 ) 3179 ); 3180 3181 TRACE_EVENT(api_finalize_rx_omi_bw, 3182 TP_PROTO(struct ieee80211_local *local, 3183 struct ieee80211_sub_if_data *sdata, 3184 struct link_sta_info *link_sta), 3185 3186 TP_ARGS(local, sdata, link_sta), 3187 3188 TP_STRUCT__entry( 3189 LOCAL_ENTRY 3190 VIF_ENTRY 3191 STA_ENTRY 3192 __field(int, link_id) 3193 ), 3194 3195 TP_fast_assign( 3196 LOCAL_ASSIGN; 3197 VIF_ASSIGN; 3198 STA_NAMED_ASSIGN(link_sta->sta); 3199 __entry->link_id = link_sta->link_id; 3200 ), 3201 3202 TP_printk( 3203 LOCAL_PR_FMT " " VIF_PR_FMT " " STA_PR_FMT " link:%d", 3204 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->link_id 3205 ) 3206 ); 3207 3208 /* 3209 * Tracing for internal functions 3210 * (which may also be called in response to driver calls) 3211 */ 3212 3213 TRACE_EVENT(wake_queue, 3214 TP_PROTO(struct ieee80211_local *local, u16 queue, 3215 enum queue_stop_reason reason, int refcount), 3216 3217 TP_ARGS(local, queue, reason, refcount), 3218 3219 TP_STRUCT__entry( 3220 LOCAL_ENTRY 3221 __field(u16, queue) 3222 __field(u32, reason) 3223 __field(int, refcount) 3224 ), 3225 3226 TP_fast_assign( 3227 LOCAL_ASSIGN; 3228 __entry->queue = queue; 3229 __entry->reason = reason; 3230 __entry->refcount = refcount; 3231 ), 3232 3233 TP_printk( 3234 LOCAL_PR_FMT " queue:%d, reason:%d, refcount: %d", 3235 LOCAL_PR_ARG, __entry->queue, __entry->reason, 3236 __entry->refcount 3237 ) 3238 ); 3239 3240 TRACE_EVENT(stop_queue, 3241 TP_PROTO(struct ieee80211_local *local, u16 queue, 3242 enum queue_stop_reason reason, int refcount), 3243 3244 TP_ARGS(local, queue, reason, refcount), 3245 3246 TP_STRUCT__entry( 3247 LOCAL_ENTRY 3248 __field(u16, queue) 3249 __field(u32, reason) 3250 __field(int, refcount) 3251 ), 3252 3253 TP_fast_assign( 3254 LOCAL_ASSIGN; 3255 __entry->queue = queue; 3256 __entry->reason = reason; 3257 __entry->refcount = refcount; 3258 ), 3259 3260 TP_printk( 3261 LOCAL_PR_FMT " queue:%d, reason:%d, refcount: %d", 3262 LOCAL_PR_ARG, __entry->queue, __entry->reason, 3263 __entry->refcount 3264 ) 3265 ); 3266 3267 TRACE_EVENT(drv_can_neg_ttlm, 3268 TP_PROTO(struct ieee80211_local *local, 3269 struct ieee80211_sub_if_data *sdata, 3270 struct ieee80211_neg_ttlm *neg_ttlm), 3271 3272 TP_ARGS(local, sdata, neg_ttlm), 3273 3274 TP_STRUCT__entry(LOCAL_ENTRY 3275 VIF_ENTRY 3276 __array(u16, downlink, sizeof(u16) * 8) 3277 __array(u16, uplink, sizeof(u16) * 8) 3278 ), 3279 3280 TP_fast_assign(LOCAL_ASSIGN; 3281 VIF_ASSIGN; 3282 memcpy(__entry->downlink, neg_ttlm->downlink, 3283 sizeof(neg_ttlm->downlink)); 3284 memcpy(__entry->uplink, neg_ttlm->uplink, 3285 sizeof(neg_ttlm->uplink)); 3286 ), 3287 3288 TP_printk(LOCAL_PR_FMT ", " VIF_PR_FMT, LOCAL_PR_ARG, VIF_PR_ARG) 3289 ); 3290 3291 TRACE_EVENT(drv_neg_ttlm_res, 3292 TP_PROTO(struct ieee80211_local *local, 3293 struct ieee80211_sub_if_data *sdata, 3294 enum ieee80211_neg_ttlm_res res, 3295 struct ieee80211_neg_ttlm *neg_ttlm), 3296 3297 TP_ARGS(local, sdata, res, neg_ttlm), 3298 3299 TP_STRUCT__entry(LOCAL_ENTRY 3300 VIF_ENTRY 3301 __field(u32, res) 3302 __array(u16, downlink, sizeof(u16) * 8) 3303 __array(u16, uplink, sizeof(u16) * 8) 3304 ), 3305 3306 TP_fast_assign(LOCAL_ASSIGN; 3307 VIF_ASSIGN; 3308 __entry->res = res; 3309 memcpy(__entry->downlink, neg_ttlm->downlink, 3310 sizeof(neg_ttlm->downlink)); 3311 memcpy(__entry->uplink, neg_ttlm->uplink, 3312 sizeof(neg_ttlm->uplink)); 3313 ), 3314 3315 TP_printk(LOCAL_PR_FMT VIF_PR_FMT " response: %d\n ", 3316 LOCAL_PR_ARG, VIF_PR_ARG, __entry->res 3317 ) 3318 ); 3319 3320 TRACE_EVENT(drv_prep_add_interface, 3321 TP_PROTO(struct ieee80211_local *local, 3322 enum nl80211_iftype type), 3323 3324 TP_ARGS(local, type), 3325 TP_STRUCT__entry(LOCAL_ENTRY 3326 __field(u32, type) 3327 ), 3328 3329 TP_fast_assign(LOCAL_ASSIGN; 3330 __entry->type = type; 3331 ), 3332 3333 TP_printk(LOCAL_PR_FMT " type: %u\n ", 3334 LOCAL_PR_ARG, __entry->type 3335 ) 3336 ); 3337 3338 TRACE_EVENT(drv_set_eml_op_mode, 3339 TP_PROTO(struct ieee80211_local *local, 3340 struct ieee80211_sub_if_data *sdata, 3341 struct ieee80211_sta *sta, 3342 unsigned int link_id, 3343 u8 control, u16 link_bitmap), 3344 3345 TP_ARGS(local, sdata, sta, link_id, control, link_bitmap), 3346 3347 TP_STRUCT__entry(LOCAL_ENTRY 3348 VIF_ENTRY 3349 STA_ENTRY 3350 __field(u32, link_id) 3351 __field(u8, control) 3352 __field(u16, link_bitmap)), 3353 3354 TP_fast_assign(LOCAL_ASSIGN; 3355 VIF_ASSIGN; 3356 STA_NAMED_ASSIGN(sta); 3357 __entry->link_id = link_id; 3358 __entry->control = control; 3359 __entry->link_bitmap = link_bitmap; 3360 ), 3361 3362 TP_printk( 3363 LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT 3364 " (link:%d control:%02x link_bitmap:%04x)", 3365 LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->link_id, 3366 __entry->control, __entry->link_bitmap 3367 ) 3368 ); 3369 3370 #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ 3371 3372 #undef TRACE_INCLUDE_PATH 3373 #define TRACE_INCLUDE_PATH . 3374 #undef TRACE_INCLUDE_FILE 3375 #define TRACE_INCLUDE_FILE trace 3376 #include <trace/define_trace.h> 3377