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