Lines Matching +full:tcm +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
3 * Copyright (C) 2012-2014, 2018-2024 Intel Corporation
4 * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
5 * Copyright (C) 2016-2017 Intel Deutschland GmbH
18 struct iwl_dbgfs_pm *dbgfs_pm = &mvmvif->dbgfs_pm; in iwl_dbgfs_update_pm()
20 dbgfs_pm->mask |= param; in iwl_dbgfs_update_pm()
24 int dtimper = vif->bss_conf.dtim_period ?: 1; in iwl_dbgfs_update_pm()
25 int dtimper_msec = dtimper * vif->bss_conf.beacon_int; in iwl_dbgfs_update_pm()
32 dbgfs_pm->keep_alive_seconds = val; in iwl_dbgfs_update_pm()
38 dbgfs_pm->skip_over_dtim = val; in iwl_dbgfs_update_pm()
42 dbgfs_pm->skip_dtim_periods = val; in iwl_dbgfs_update_pm()
46 dbgfs_pm->rx_data_timeout = val; in iwl_dbgfs_update_pm()
50 dbgfs_pm->tx_data_timeout = val; in iwl_dbgfs_update_pm()
54 dbgfs_pm->lprx_ena = val; in iwl_dbgfs_update_pm()
58 dbgfs_pm->lprx_rssi_threshold = val; in iwl_dbgfs_update_pm()
62 dbgfs_pm->snooze_ena = val; in iwl_dbgfs_update_pm()
66 dbgfs_pm->uapsd_misbehaving = val; in iwl_dbgfs_update_pm()
70 dbgfs_pm->use_ps_poll = val; in iwl_dbgfs_update_pm()
79 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_pm_params_write()
85 return -EINVAL; in iwl_dbgfs_pm_params_write()
89 return -EINVAL; in iwl_dbgfs_pm_params_write()
93 return -EINVAL; in iwl_dbgfs_pm_params_write()
97 return -EINVAL; in iwl_dbgfs_pm_params_write()
101 return -EINVAL; in iwl_dbgfs_pm_params_write()
105 return -EINVAL; in iwl_dbgfs_pm_params_write()
109 return -EINVAL; in iwl_dbgfs_pm_params_write()
112 return -EINVAL; in iwl_dbgfs_pm_params_write()
116 return -EINVAL; in iwl_dbgfs_pm_params_write()
120 return -EINVAL; in iwl_dbgfs_pm_params_write()
124 return -EINVAL; in iwl_dbgfs_pm_params_write()
127 return -EINVAL; in iwl_dbgfs_pm_params_write()
130 mutex_lock(&mvm->mutex); in iwl_dbgfs_pm_params_write()
133 mutex_unlock(&mvm->mutex); in iwl_dbgfs_pm_params_write()
142 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_tx_pwr_lmt_read()
148 vif->bss_conf.txpower); in iwl_dbgfs_tx_pwr_lmt_read()
157 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_pm_params_read()
159 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_pm_params_read()
173 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_mac_params_read()
175 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_mac_params_read()
183 mutex_lock(&mvm->mutex); in iwl_dbgfs_mac_params_read()
185 ap_sta_id = mvmvif->deflink.ap_sta_id; in iwl_dbgfs_mac_params_read()
189 pos += scnprintf(buf+pos, bufsz-pos, "type: ibss\n"); in iwl_dbgfs_mac_params_read()
192 pos += scnprintf(buf+pos, bufsz-pos, "type: bss\n"); in iwl_dbgfs_mac_params_read()
195 pos += scnprintf(buf+pos, bufsz-pos, "type: ap\n"); in iwl_dbgfs_mac_params_read()
198 pos += scnprintf(buf+pos, bufsz-pos, "type: p2p client\n"); in iwl_dbgfs_mac_params_read()
201 pos += scnprintf(buf+pos, bufsz-pos, "type: p2p go\n"); in iwl_dbgfs_mac_params_read()
204 pos += scnprintf(buf+pos, bufsz-pos, "type: p2p dev\n"); in iwl_dbgfs_mac_params_read()
210 pos += scnprintf(buf+pos, bufsz-pos, "mac id/color: %d / %d\n", in iwl_dbgfs_mac_params_read()
211 mvmvif->id, mvmvif->color); in iwl_dbgfs_mac_params_read()
212 pos += scnprintf(buf+pos, bufsz-pos, "bssid: %pM\n", in iwl_dbgfs_mac_params_read()
213 vif->bss_conf.bssid); in iwl_dbgfs_mac_params_read()
214 pos += scnprintf(buf+pos, bufsz-pos, "Load: %d\n", in iwl_dbgfs_mac_params_read()
215 mvm->tcm.result.load[mvmvif->id]); in iwl_dbgfs_mac_params_read()
216 pos += scnprintf(buf+pos, bufsz-pos, "QoS:\n"); in iwl_dbgfs_mac_params_read()
217 for (i = 0; i < ARRAY_SIZE(mvmvif->deflink.queue_params); i++) in iwl_dbgfs_mac_params_read()
218 pos += scnprintf(buf+pos, bufsz-pos, in iwl_dbgfs_mac_params_read()
219 "\t%d: txop:%d - cw_min:%d - cw_max = %d - aifs = %d upasd = %d\n", in iwl_dbgfs_mac_params_read()
220 i, mvmvif->deflink.queue_params[i].txop, in iwl_dbgfs_mac_params_read()
221 mvmvif->deflink.queue_params[i].cw_min, in iwl_dbgfs_mac_params_read()
222 mvmvif->deflink.queue_params[i].cw_max, in iwl_dbgfs_mac_params_read()
223 mvmvif->deflink.queue_params[i].aifs, in iwl_dbgfs_mac_params_read()
224 mvmvif->deflink.queue_params[i].uapsd); in iwl_dbgfs_mac_params_read()
226 if (vif->type == NL80211_IFTYPE_STATION && in iwl_dbgfs_mac_params_read()
232 pos += scnprintf(buf+pos, bufsz-pos, in iwl_dbgfs_mac_params_read()
233 "ap_sta_id %d - reduced Tx power %d\n", in iwl_dbgfs_mac_params_read()
235 mvm_sta->bt_reduced_txpower); in iwl_dbgfs_mac_params_read()
240 chanctx_conf = rcu_dereference(vif->bss_conf.chanctx_conf); in iwl_dbgfs_mac_params_read()
242 pos += scnprintf(buf+pos, bufsz-pos, in iwl_dbgfs_mac_params_read()
244 chanctx_conf->rx_chains_static, in iwl_dbgfs_mac_params_read()
245 chanctx_conf->rx_chains_dynamic); in iwl_dbgfs_mac_params_read()
248 mutex_unlock(&mvm->mutex); in iwl_dbgfs_mac_params_read()
257 struct iwl_dbgfs_bf *dbgfs_bf = &mvmvif->dbgfs_bf; in iwl_dbgfs_update_bf()
259 dbgfs_bf->mask |= param; in iwl_dbgfs_update_bf()
263 dbgfs_bf->bf_energy_delta = value; in iwl_dbgfs_update_bf()
266 dbgfs_bf->bf_roaming_energy_delta = value; in iwl_dbgfs_update_bf()
269 dbgfs_bf->bf_roaming_state = value; in iwl_dbgfs_update_bf()
272 dbgfs_bf->bf_temp_threshold = value; in iwl_dbgfs_update_bf()
275 dbgfs_bf->bf_temp_fast_filter = value; in iwl_dbgfs_update_bf()
278 dbgfs_bf->bf_temp_slow_filter = value; in iwl_dbgfs_update_bf()
281 dbgfs_bf->bf_enable_beacon_filter = value; in iwl_dbgfs_update_bf()
284 dbgfs_bf->bf_debug_flag = value; in iwl_dbgfs_update_bf()
287 dbgfs_bf->bf_escape_timer = value; in iwl_dbgfs_update_bf()
290 dbgfs_bf->ba_enable_beacon_abort = value; in iwl_dbgfs_update_bf()
293 dbgfs_bf->ba_escape_timer = value; in iwl_dbgfs_update_bf()
302 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_bf_params_write()
308 return -EINVAL; in iwl_dbgfs_bf_params_write()
311 return -EINVAL; in iwl_dbgfs_bf_params_write()
315 return -EINVAL; in iwl_dbgfs_bf_params_write()
318 return -EINVAL; in iwl_dbgfs_bf_params_write()
322 return -EINVAL; in iwl_dbgfs_bf_params_write()
325 return -EINVAL; in iwl_dbgfs_bf_params_write()
329 return -EINVAL; in iwl_dbgfs_bf_params_write()
332 return -EINVAL; in iwl_dbgfs_bf_params_write()
336 return -EINVAL; in iwl_dbgfs_bf_params_write()
339 return -EINVAL; in iwl_dbgfs_bf_params_write()
343 return -EINVAL; in iwl_dbgfs_bf_params_write()
346 return -EINVAL; in iwl_dbgfs_bf_params_write()
350 return -EINVAL; in iwl_dbgfs_bf_params_write()
352 return -EINVAL; in iwl_dbgfs_bf_params_write()
356 return -EINVAL; in iwl_dbgfs_bf_params_write()
358 return -EINVAL; in iwl_dbgfs_bf_params_write()
362 return -EINVAL; in iwl_dbgfs_bf_params_write()
365 return -EINVAL; in iwl_dbgfs_bf_params_write()
369 return -EINVAL; in iwl_dbgfs_bf_params_write()
372 return -EINVAL; in iwl_dbgfs_bf_params_write()
376 return -EINVAL; in iwl_dbgfs_bf_params_write()
378 return -EINVAL; in iwl_dbgfs_bf_params_write()
381 return -EINVAL; in iwl_dbgfs_bf_params_write()
384 mutex_lock(&mvm->mutex); in iwl_dbgfs_bf_params_write()
390 mutex_unlock(&mvm->mutex); in iwl_dbgfs_bf_params_write()
399 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_bf_params_read()
413 if (mvmvif->bf_enabled) in iwl_dbgfs_bf_params_read()
418 pos += scnprintf(buf+pos, bufsz-pos, "bf_energy_delta = %d\n", in iwl_dbgfs_bf_params_read()
420 pos += scnprintf(buf+pos, bufsz-pos, "bf_roaming_energy_delta = %d\n", in iwl_dbgfs_bf_params_read()
422 pos += scnprintf(buf+pos, bufsz-pos, "bf_roaming_state = %d\n", in iwl_dbgfs_bf_params_read()
424 pos += scnprintf(buf+pos, bufsz-pos, "bf_temp_threshold = %d\n", in iwl_dbgfs_bf_params_read()
426 pos += scnprintf(buf+pos, bufsz-pos, "bf_temp_fast_filter = %d\n", in iwl_dbgfs_bf_params_read()
428 pos += scnprintf(buf+pos, bufsz-pos, "bf_temp_slow_filter = %d\n", in iwl_dbgfs_bf_params_read()
430 pos += scnprintf(buf+pos, bufsz-pos, "bf_enable_beacon_filter = %d\n", in iwl_dbgfs_bf_params_read()
432 pos += scnprintf(buf+pos, bufsz-pos, "bf_debug_flag = %d\n", in iwl_dbgfs_bf_params_read()
434 pos += scnprintf(buf+pos, bufsz-pos, "bf_escape_timer = %d\n", in iwl_dbgfs_bf_params_read()
436 pos += scnprintf(buf+pos, bufsz-pos, "ba_escape_timer = %d\n", in iwl_dbgfs_bf_params_read()
438 pos += scnprintf(buf+pos, bufsz-pos, "ba_enable_beacon_abort = %d\n", in iwl_dbgfs_bf_params_read()
448 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_os_device_timediff_read()
450 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_os_device_timediff_read()
458 mutex_lock(&mvm->mutex); in iwl_dbgfs_os_device_timediff_read()
460 mutex_unlock(&mvm->mutex); in iwl_dbgfs_os_device_timediff_read()
463 diff = curr_os - curr_gp2; in iwl_dbgfs_os_device_timediff_read()
464 pos += scnprintf(buf + pos, bufsz - pos, "diff=%lld\n", diff); in iwl_dbgfs_os_device_timediff_read()
473 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_low_latency_write()
481 return -EINVAL; in iwl_dbgfs_low_latency_write()
483 mutex_lock(&mvm->mutex); in iwl_dbgfs_low_latency_write()
485 mutex_unlock(&mvm->mutex); in iwl_dbgfs_low_latency_write()
495 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_low_latency_force_write()
504 return -EINVAL; in iwl_dbgfs_low_latency_force_write()
506 mutex_lock(&mvm->mutex); in iwl_dbgfs_low_latency_force_write()
519 mutex_unlock(&mvm->mutex); in iwl_dbgfs_low_latency_force_write()
527 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_low_latency_read()
539 len = scnprintf(buf, sizeof(buf) - 1, format, in iwl_dbgfs_low_latency_read()
540 !!(mvmvif->low_latency & LOW_LATENCY_TRAFFIC), in iwl_dbgfs_low_latency_read()
541 !!(mvmvif->low_latency & LOW_LATENCY_DEBUGFS), in iwl_dbgfs_low_latency_read()
542 !!(mvmvif->low_latency & LOW_LATENCY_VCMD), in iwl_dbgfs_low_latency_read()
543 !!(mvmvif->low_latency & LOW_LATENCY_VIF_TYPE), in iwl_dbgfs_low_latency_read()
544 !!(mvmvif->low_latency & in iwl_dbgfs_low_latency_read()
546 !!(mvmvif->low_latency & LOW_LATENCY_DEBUGFS_FORCE), in iwl_dbgfs_low_latency_read()
547 !!(mvmvif->low_latency_actual)); in iwl_dbgfs_low_latency_read()
555 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_uapsd_misbehaving_read()
561 len = sprintf(buf, "%pM\n", mvmvif->uapsd_misbehaving_ap_addr); in iwl_dbgfs_uapsd_misbehaving_read()
563 len = sprintf(buf, "%6D\n", mvmvif->uapsd_misbehaving_ap_addr, ":"); in iwl_dbgfs_uapsd_misbehaving_read()
573 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_uapsd_misbehaving_write()
576 mutex_lock(&mvm->mutex); in iwl_dbgfs_uapsd_misbehaving_write()
577 ret = mac_pton(buf, mvmvif->uapsd_misbehaving_ap_addr); in iwl_dbgfs_uapsd_misbehaving_write()
578 mutex_unlock(&mvm->mutex); in iwl_dbgfs_uapsd_misbehaving_write()
580 return ret ? count : -EINVAL; in iwl_dbgfs_uapsd_misbehaving_write()
587 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_rx_phyinfo_write()
590 int link_id, ret = -EINVAL; in iwl_dbgfs_rx_phyinfo_write()
596 mutex_lock(&mvm->mutex); in iwl_dbgfs_rx_phyinfo_write()
598 mvm->dbgfs_rx_phyinfo = value; in iwl_dbgfs_rx_phyinfo_write()
607 chanctx_conf = rcu_dereference(link_conf->chanctx_conf); in iwl_dbgfs_rx_phyinfo_write()
615 min_def = chanctx_conf->min_def; in iwl_dbgfs_rx_phyinfo_write()
616 ap_def = chanctx_conf->ap; in iwl_dbgfs_rx_phyinfo_write()
617 chains_static = chanctx_conf->rx_chains_static; in iwl_dbgfs_rx_phyinfo_write()
618 chains_dynamic = chanctx_conf->rx_chains_dynamic; in iwl_dbgfs_rx_phyinfo_write()
621 phy_ctxt = mvmvif->link[link_id]->phy_ctxt; in iwl_dbgfs_rx_phyinfo_write()
629 mutex_unlock(&mvm->mutex); in iwl_dbgfs_rx_phyinfo_write()
638 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_rx_phyinfo_read()
644 mvmvif->mvm->dbgfs_rx_phyinfo); in iwl_dbgfs_rx_phyinfo_read()
655 if (mvmvif->dbgfs_quota_min) in iwl_dbgfs_quota_check()
656 *ret = -EINVAL; in iwl_dbgfs_quota_check()
663 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_quota_min_write()
672 return -EINVAL; in iwl_dbgfs_quota_min_write()
674 mutex_lock(&mvm->mutex); in iwl_dbgfs_quota_min_write()
676 mvmvif->dbgfs_quota_min = 0; in iwl_dbgfs_quota_min_write()
677 ieee80211_iterate_interfaces(mvm->hw, IEEE80211_IFACE_ITER_NORMAL, in iwl_dbgfs_quota_min_write()
680 mvmvif->dbgfs_quota_min = value; in iwl_dbgfs_quota_min_write()
683 mutex_unlock(&mvm->mutex); in iwl_dbgfs_quota_min_write()
692 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_quota_min_read()
697 len = scnprintf(buf, sizeof(buf), "%d\n", mvmvif->dbgfs_quota_min); in iwl_dbgfs_quota_min_read()
706 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_max_tx_op_write()
714 mutex_lock(&mvm->mutex); in iwl_dbgfs_max_tx_op_write()
715 mvmvif->max_tx_op = value; in iwl_dbgfs_max_tx_op_write()
716 mutex_unlock(&mvm->mutex); in iwl_dbgfs_max_tx_op_write()
725 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_max_tx_op_read()
727 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_max_tx_op_read()
731 mutex_lock(&mvm->mutex); in iwl_dbgfs_max_tx_op_read()
732 len = scnprintf(buf, sizeof(buf), "%hu\n", mvmvif->max_tx_op); in iwl_dbgfs_max_tx_op_read()
733 mutex_unlock(&mvm->mutex); in iwl_dbgfs_max_tx_op_read()
743 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_int_mlo_scan_write()
747 if (!vif->cfg.assoc || !ieee80211_vif_is_mld(vif)) in iwl_dbgfs_int_mlo_scan_write()
748 return -EINVAL; in iwl_dbgfs_int_mlo_scan_write()
751 return -EINVAL; in iwl_dbgfs_int_mlo_scan_write()
753 mutex_lock(&mvm->mutex); in iwl_dbgfs_int_mlo_scan_write()
760 ret = -EINVAL; in iwl_dbgfs_int_mlo_scan_write()
763 mutex_unlock(&mvm->mutex); in iwl_dbgfs_int_mlo_scan_write()
772 struct ieee80211_vif *vif = file->private_data; in iwl_dbgfs_esr_disable_reason_read()
774 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_esr_disable_reason_read()
780 mutex_lock(&mvm->mutex); in iwl_dbgfs_esr_disable_reason_read()
781 esr_mask = mvmvif->esr_disable_reason; in iwl_dbgfs_esr_disable_reason_read()
782 mutex_unlock(&mvm->mutex); in iwl_dbgfs_esr_disable_reason_read()
787 return -ENOMEM; in iwl_dbgfs_esr_disable_reason_read()
792 pos += scnprintf(buf + pos, bufsz - pos, " - %s\n", in iwl_dbgfs_esr_disable_reason_read()
805 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_dbgfs_esr_disable_reason_write()
815 return -EINVAL; in iwl_dbgfs_esr_disable_reason_write()
817 mutex_lock(&mvm->mutex); in iwl_dbgfs_esr_disable_reason_write()
823 mutex_unlock(&mvm->mutex); in iwl_dbgfs_esr_disable_reason_write()
832 #define MVM_DEBUGFS_ADD_FILE_VIF(name, parent, mode) do { \ argument
833 debugfs_create_file(#name, mode, parent, vif, \
854 struct dentry *dbgfs_dir = vif->debugfs_dir; in iwl_mvm_vif_add_debugfs()
857 mvmvif->dbgfs_dir = debugfs_create_dir("iwlmvm", dbgfs_dir); in iwl_mvm_vif_add_debugfs()
858 if (IS_ERR_OR_NULL(mvmvif->dbgfs_dir)) { in iwl_mvm_vif_add_debugfs()
865 ((vif->type == NL80211_IFTYPE_STATION && !vif->p2p) || in iwl_mvm_vif_add_debugfs()
866 (vif->type == NL80211_IFTYPE_STATION && vif->p2p))) in iwl_mvm_vif_add_debugfs()
867 MVM_DEBUGFS_ADD_FILE_VIF(pm_params, mvmvif->dbgfs_dir, 0600); in iwl_mvm_vif_add_debugfs()
869 MVM_DEBUGFS_ADD_FILE_VIF(tx_pwr_lmt, mvmvif->dbgfs_dir, 0400); in iwl_mvm_vif_add_debugfs()
870 MVM_DEBUGFS_ADD_FILE_VIF(mac_params, mvmvif->dbgfs_dir, 0400); in iwl_mvm_vif_add_debugfs()
871 MVM_DEBUGFS_ADD_FILE_VIF(low_latency, mvmvif->dbgfs_dir, 0600); in iwl_mvm_vif_add_debugfs()
872 MVM_DEBUGFS_ADD_FILE_VIF(low_latency_force, mvmvif->dbgfs_dir, 0600); in iwl_mvm_vif_add_debugfs()
873 MVM_DEBUGFS_ADD_FILE_VIF(uapsd_misbehaving, mvmvif->dbgfs_dir, 0600); in iwl_mvm_vif_add_debugfs()
874 MVM_DEBUGFS_ADD_FILE_VIF(rx_phyinfo, mvmvif->dbgfs_dir, 0600); in iwl_mvm_vif_add_debugfs()
875 MVM_DEBUGFS_ADD_FILE_VIF(quota_min, mvmvif->dbgfs_dir, 0600); in iwl_mvm_vif_add_debugfs()
876 MVM_DEBUGFS_ADD_FILE_VIF(os_device_timediff, mvmvif->dbgfs_dir, 0400); in iwl_mvm_vif_add_debugfs()
877 MVM_DEBUGFS_ADD_FILE_VIF(max_tx_op, mvmvif->dbgfs_dir, 0600); in iwl_mvm_vif_add_debugfs()
878 debugfs_create_bool("ftm_unprotected", 0200, mvmvif->dbgfs_dir, in iwl_mvm_vif_add_debugfs()
879 &mvmvif->ftm_unprotected); in iwl_mvm_vif_add_debugfs()
880 MVM_DEBUGFS_ADD_FILE_VIF(int_mlo_scan, mvmvif->dbgfs_dir, 0200); in iwl_mvm_vif_add_debugfs()
881 MVM_DEBUGFS_ADD_FILE_VIF(esr_disable_reason, mvmvif->dbgfs_dir, 0600); in iwl_mvm_vif_add_debugfs()
883 if (vif->type == NL80211_IFTYPE_STATION && !vif->p2p && in iwl_mvm_vif_add_debugfs()
884 mvmvif == mvm->bf_allowed_vif) in iwl_mvm_vif_add_debugfs()
885 MVM_DEBUGFS_ADD_FILE_VIF(bf_params, mvmvif->dbgfs_dir, 0600); in iwl_mvm_vif_add_debugfs()
890 struct dentry *dbgfs_dir = vif->debugfs_dir; in iwl_mvm_vif_dbgfs_add_link()
898 /* this will happen in monitor mode */ in iwl_mvm_vif_dbgfs_add_link()
908 * netdev:wlan0 -> ../../../ieee80211/phy0/netdev:wlan0/iwlmvm/ in iwl_mvm_vif_dbgfs_add_link()
913 mvmvif->dbgfs_slink = in iwl_mvm_vif_dbgfs_add_link()
914 debugfs_create_symlink(name, mvm->debugfs_dir, buf); in iwl_mvm_vif_dbgfs_add_link()
922 debugfs_remove(mvmvif->dbgfs_slink); in iwl_mvm_vif_dbgfs_rm_link()
923 mvmvif->dbgfs_slink = NULL; in iwl_mvm_vif_dbgfs_rm_link()
932 #define MVM_DEBUGFS_ADD_LINK_FILE(name, parent, mode) \ argument
933 debugfs_create_file(#name, mode, parent, link_conf, \
940 /* Add per-link files here*/ in iwl_mvm_debugfs_add_link_files()
949 struct iwl_mvm *mvm = mvmvif->mvm; in iwl_mvm_link_add_debugfs()
950 unsigned int link_id = link_conf->link_id; in iwl_mvm_link_add_debugfs()
951 struct iwl_mvm_vif_link_info *link_info = mvmvif->link[link_id]; in iwl_mvm_link_add_debugfs()
957 if (dir == vif->debugfs_dir) { in iwl_mvm_link_add_debugfs()
958 WARN_ON(!mvmvif->dbgfs_dir); in iwl_mvm_link_add_debugfs()
959 mvm_dir = mvmvif->dbgfs_dir; in iwl_mvm_link_add_debugfs()