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