Lines Matching +full:phy +full:- +full:s
1 // SPDX-License-Identifier: ISC
29 dev->ibf = !!val; in mt7915_implicit_txbf_set()
39 *val = dev->ibf; in mt7915_implicit_txbf_get()
52 struct mt7915_phy *phy = file->private_data; in mt7915_sys_recovery_set() local
53 struct mt7915_dev *dev = phy->dev; in mt7915_sys_recovery_set()
54 bool band = phy->mt76->band_idx; in mt7915_sys_recovery_set()
60 return -EINVAL; in mt7915_sys_recovery_set()
63 return -EFAULT; in mt7915_sys_recovery_set()
65 if (count && buf[count - 1] == '\n') in mt7915_sys_recovery_set()
66 buf[count - 1] = '\0'; in mt7915_sys_recovery_set()
71 return -EINVAL; in mt7915_sys_recovery_set()
108 dev->recovery.state |= MT_MCU_CMD_WDT_MASK; in mt7915_sys_recovery_set()
128 struct mt7915_phy *phy = file->private_data; in mt7915_sys_recovery_get() local
129 struct mt7915_dev *dev = phy->dev; in mt7915_sys_recovery_get()
137 return -ENOMEM; in mt7915_sys_recovery_get()
140 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
142 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
144 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
146 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
148 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
150 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
152 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
154 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
156 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
158 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
162 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
163 "\nlet's dump firmware SER statistics...\n"); in mt7915_sys_recovery_get()
164 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
167 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
170 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
173 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
176 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
179 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
182 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
185 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
188 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
191 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
194 desc += scnprintf(buff + desc, bufsz - desc, in mt7915_sys_recovery_get()
196 dev->recovery.wm_reset_count, in mt7915_sys_recovery_get()
197 dev->recovery.wa_reset_count); in mt7915_sys_recovery_get()
216 struct mt7915_phy *phy = data; in mt7915_radar_trigger() local
217 struct mt7915_dev *dev = phy->dev; in mt7915_radar_trigger()
221 return -EINVAL; in mt7915_radar_trigger()
223 if (val == RADAR_BACKGROUND && !dev->rdd2_phy) { in mt7915_radar_trigger()
224 dev_err(dev->mt76.dev, "Background radar is not enabled\n"); in mt7915_radar_trigger()
225 return -EINVAL; in mt7915_radar_trigger()
228 rdd_idx = mt7915_get_rdd_idx(phy, val == RADAR_BACKGROUND); in mt7915_radar_trigger()
230 dev_err(dev->mt76.dev, "No RDD found\n"); in mt7915_radar_trigger()
231 return -EINVAL; in mt7915_radar_trigger()
234 return mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_RADAR_EMULATE, in mt7915_radar_trigger()
246 dev->muru_debug = val; in mt7915_muru_debug_set()
247 mt7915_mcu_muru_debug_set(dev, dev->muru_debug); in mt7915_muru_debug_set()
257 *val = dev->muru_debug; in mt7915_muru_debug_get()
267 struct mt7915_phy *phy = file->private; in mt7915_muru_stats_show() local
268 struct mt7915_dev *dev = phy->dev; in mt7915_muru_stats_show()
275 "HE 2RU", "HE 3RU", "HE 4RU", "HE 5-8RU", "HE 9-16RU", in mt7915_muru_stats_show()
280 "HE 3RU", "HE 4RU", "HE 5-8RU", "HE 9-16RU", "HE >16RU" in mt7915_muru_stats_show()
285 if (!dev->muru_debug) { in mt7915_muru_stats_show()
290 mutex_lock(&dev->mt76.mutex); in mt7915_muru_stats_show()
292 ret = mt7915_mcu_muru_debug_get(phy); in mt7915_muru_stats_show()
296 /* Non-HE Downlink*/ in mt7915_muru_stats_show()
297 seq_puts(file, "[Non-HE]\nDownlink\nData Type: "); in mt7915_muru_stats_show()
300 seq_printf(file, "%8s | ", dl_non_he_type[i]); in mt7915_muru_stats_show()
304 phy->mib.dl_cck_cnt, in mt7915_muru_stats_show()
305 phy->mib.dl_ofdm_cnt, in mt7915_muru_stats_show()
306 phy->mib.dl_htmix_cnt, in mt7915_muru_stats_show()
307 phy->mib.dl_htgf_cnt, in mt7915_muru_stats_show()
308 phy->mib.dl_vht_su_cnt); in mt7915_muru_stats_show()
310 seq_puts(file, "\nDownlink MU-MIMO\nData Type: "); in mt7915_muru_stats_show()
313 seq_printf(file, "%8s | ", dl_non_he_type[i]); in mt7915_muru_stats_show()
317 phy->mib.dl_vht_2mu_cnt, in mt7915_muru_stats_show()
318 phy->mib.dl_vht_3mu_cnt, in mt7915_muru_stats_show()
319 phy->mib.dl_vht_4mu_cnt); in mt7915_muru_stats_show()
321 sub_total_cnt = (u64)phy->mib.dl_vht_2mu_cnt + in mt7915_muru_stats_show()
322 phy->mib.dl_vht_3mu_cnt + in mt7915_muru_stats_show()
323 phy->mib.dl_vht_4mu_cnt; in mt7915_muru_stats_show()
325 seq_printf(file, "\nTotal non-HE MU-MIMO DL PPDU count: %lld", in mt7915_muru_stats_show()
329 phy->mib.dl_cck_cnt + in mt7915_muru_stats_show()
330 phy->mib.dl_ofdm_cnt + in mt7915_muru_stats_show()
331 phy->mib.dl_htmix_cnt + in mt7915_muru_stats_show()
332 phy->mib.dl_htgf_cnt + in mt7915_muru_stats_show()
333 phy->mib.dl_vht_su_cnt; in mt7915_muru_stats_show()
335 seq_printf(file, "\nAll non-HE DL PPDU count: %lld", total_ppdu_cnt); in mt7915_muru_stats_show()
341 seq_printf(file, "%8s | ", dl_he_type[i]); in mt7915_muru_stats_show()
345 phy->mib.dl_he_su_cnt, phy->mib.dl_he_ext_su_cnt); in mt7915_muru_stats_show()
347 seq_puts(file, "\nDownlink MU-MIMO\nData Type: "); in mt7915_muru_stats_show()
350 seq_printf(file, "%8s | ", dl_he_type[i]); in mt7915_muru_stats_show()
354 phy->mib.dl_he_2mu_cnt, phy->mib.dl_he_3mu_cnt, in mt7915_muru_stats_show()
355 phy->mib.dl_he_4mu_cnt); in mt7915_muru_stats_show()
360 seq_printf(file, "%8s | ", dl_he_type[i]); in mt7915_muru_stats_show()
364 phy->mib.dl_he_2ru_cnt, in mt7915_muru_stats_show()
365 phy->mib.dl_he_3ru_cnt, in mt7915_muru_stats_show()
366 phy->mib.dl_he_4ru_cnt, in mt7915_muru_stats_show()
367 phy->mib.dl_he_5to8ru_cnt, in mt7915_muru_stats_show()
368 phy->mib.dl_he_9to16ru_cnt, in mt7915_muru_stats_show()
369 phy->mib.dl_he_gtr16ru_cnt); in mt7915_muru_stats_show()
371 sub_total_cnt = (u64)phy->mib.dl_he_2mu_cnt + in mt7915_muru_stats_show()
372 phy->mib.dl_he_3mu_cnt + in mt7915_muru_stats_show()
373 phy->mib.dl_he_4mu_cnt; in mt7915_muru_stats_show()
376 seq_printf(file, "\nTotal HE MU-MIMO DL PPDU count: %lld", in mt7915_muru_stats_show()
379 sub_total_cnt = (u64)phy->mib.dl_he_2ru_cnt + in mt7915_muru_stats_show()
380 phy->mib.dl_he_3ru_cnt + in mt7915_muru_stats_show()
381 phy->mib.dl_he_4ru_cnt + in mt7915_muru_stats_show()
382 phy->mib.dl_he_5to8ru_cnt + in mt7915_muru_stats_show()
383 phy->mib.dl_he_9to16ru_cnt + in mt7915_muru_stats_show()
384 phy->mib.dl_he_gtr16ru_cnt; in mt7915_muru_stats_show()
390 total_ppdu_cnt += (u64)phy->mib.dl_he_su_cnt + in mt7915_muru_stats_show()
391 phy->mib.dl_he_ext_su_cnt; in mt7915_muru_stats_show()
397 seq_puts(file, "\nTrigger-based Uplink MU-MIMO\nData Type: "); in mt7915_muru_stats_show()
400 seq_printf(file, "%8s | ", ul_he_type[i]); in mt7915_muru_stats_show()
404 phy->mib.ul_hetrig_2mu_cnt, in mt7915_muru_stats_show()
405 phy->mib.ul_hetrig_3mu_cnt, in mt7915_muru_stats_show()
406 phy->mib.ul_hetrig_4mu_cnt); in mt7915_muru_stats_show()
408 seq_puts(file, "\nTrigger-based Uplink OFDMA\nData Type: "); in mt7915_muru_stats_show()
411 seq_printf(file, "%8s | ", ul_he_type[i]); in mt7915_muru_stats_show()
415 phy->mib.ul_hetrig_su_cnt, in mt7915_muru_stats_show()
416 phy->mib.ul_hetrig_2ru_cnt, in mt7915_muru_stats_show()
417 phy->mib.ul_hetrig_3ru_cnt, in mt7915_muru_stats_show()
418 phy->mib.ul_hetrig_4ru_cnt, in mt7915_muru_stats_show()
419 phy->mib.ul_hetrig_5to8ru_cnt, in mt7915_muru_stats_show()
420 phy->mib.ul_hetrig_9to16ru_cnt, in mt7915_muru_stats_show()
421 phy->mib.ul_hetrig_gtr16ru_cnt); in mt7915_muru_stats_show()
423 sub_total_cnt = (u64)phy->mib.ul_hetrig_2mu_cnt + in mt7915_muru_stats_show()
424 phy->mib.ul_hetrig_3mu_cnt + in mt7915_muru_stats_show()
425 phy->mib.ul_hetrig_4mu_cnt; in mt7915_muru_stats_show()
428 seq_printf(file, "\nTotal HE MU-MIMO UL TB PPDU count: %lld", in mt7915_muru_stats_show()
431 sub_total_cnt = (u64)phy->mib.ul_hetrig_2ru_cnt + in mt7915_muru_stats_show()
432 phy->mib.ul_hetrig_3ru_cnt + in mt7915_muru_stats_show()
433 phy->mib.ul_hetrig_4ru_cnt + in mt7915_muru_stats_show()
434 phy->mib.ul_hetrig_5to8ru_cnt + in mt7915_muru_stats_show()
435 phy->mib.ul_hetrig_9to16ru_cnt + in mt7915_muru_stats_show()
436 phy->mib.ul_hetrig_gtr16ru_cnt; in mt7915_muru_stats_show()
442 total_ppdu_cnt += phy->mib.ul_hetrig_su_cnt; in mt7915_muru_stats_show()
447 mutex_unlock(&dev->mt76.mutex); in mt7915_muru_stats_show()
454 mt7915_rdd_monitor(struct seq_file *s, void *data) in mt7915_rdd_monitor() argument
456 struct mt7915_dev *dev = dev_get_drvdata(s->private); in mt7915_rdd_monitor()
457 struct cfg80211_chan_def *chandef = &dev->rdd2_chandef; in mt7915_rdd_monitor()
461 mutex_lock(&dev->mt76.mutex); in mt7915_rdd_monitor()
464 seq_puts(s, "no background radar capability\n"); in mt7915_rdd_monitor()
469 ret = -EINVAL; in mt7915_rdd_monitor()
473 if (!dev->rdd2_phy) { in mt7915_rdd_monitor()
474 seq_puts(s, "not running\n"); in mt7915_rdd_monitor()
478 switch (chandef->width) { in mt7915_rdd_monitor()
496 seq_printf(s, "channel %d (%d MHz) width %s MHz center1: %d MHz\n", in mt7915_rdd_monitor()
497 chandef->chan->hw_value, chandef->chan->center_freq, in mt7915_rdd_monitor()
498 bw, chandef->center_freq1); in mt7915_rdd_monitor()
500 mutex_unlock(&dev->mt76.mutex); in mt7915_rdd_monitor()
519 dev->fw.debug_wm = val ? MCU_FW_LOG_TO_HOST : 0; in mt7915_fw_debug_wm_set()
521 if (dev->fw.debug_bin) in mt7915_fw_debug_wm_set()
524 val = dev->fw.debug_wm; in mt7915_fw_debug_wm_set()
526 tx = dev->fw.debug_wm || (dev->fw.debug_bin & BIT(1)); in mt7915_fw_debug_wm_set()
527 rx = dev->fw.debug_wm || (dev->fw.debug_bin & BIT(2)); in mt7915_fw_debug_wm_set()
528 en = dev->fw.debug_wm || (dev->fw.debug_bin & BIT(0)); in mt7915_fw_debug_wm_set()
548 (dev->fw.debug_wm ? 0 : BIT(0))); in mt7915_fw_debug_wm_set()
554 dev->fw.debug_wm = 0; in mt7915_fw_debug_wm_set()
564 *val = dev->fw.debug_wm; in mt7915_fw_debug_wm_get()
578 dev->fw.debug_wa = val ? MCU_FW_LOG_TO_HOST : 0; in mt7915_fw_debug_wa_set()
580 ret = mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev->fw.debug_wa); in mt7915_fw_debug_wa_set()
585 MCU_WA_PARAM_PDMA_RX, !!dev->fw.debug_wa, 0); in mt7915_fw_debug_wa_set()
588 dev->fw.debug_wa = 0; in mt7915_fw_debug_wa_set()
598 *val = dev->fw.debug_wa; in mt7915_fw_debug_wa_get()
639 if (!dev->relay_fwlog) in mt7915_fw_debug_bin_set()
640 dev->relay_fwlog = relay_open("fwlog_data", dev->debugfs_dir, in mt7915_fw_debug_bin_set()
642 if (!dev->relay_fwlog) in mt7915_fw_debug_bin_set()
643 return -ENOMEM; in mt7915_fw_debug_bin_set()
645 dev->fw.debug_bin = val; in mt7915_fw_debug_bin_set()
647 relay_reset(dev->relay_fwlog); in mt7915_fw_debug_bin_set()
649 return mt7915_fw_debug_wm_set(dev, dev->fw.debug_wm); in mt7915_fw_debug_bin_set()
657 *val = dev->fw.debug_bin; in mt7915_fw_debug_bin_get()
668 struct mt7915_dev *dev = file->private; in mt7915_fw_util_wm_show()
672 if (dev->fw.debug_wm) { in mt7915_fw_util_wm_show()
689 struct mt7915_dev *dev = file->private; in mt7915_fw_util_wa_show()
693 if (dev->fw.debug_wa) in mt7915_fw_util_wa_show()
703 mt7915_ampdu_stat_read_phy(struct mt7915_phy *phy, in mt7915_ampdu_stat_read_phy() argument
706 struct mt7915_dev *dev = phy->dev; in mt7915_ampdu_stat_read_phy()
707 bool ext_phy = phy != &dev->phy; in mt7915_ampdu_stat_read_phy()
709 u8 band = phy->mt76->band_idx; in mt7915_ampdu_stat_read_phy()
718 seq_printf(file, "\nPhy %d, Phy band %d\n", ext_phy, band); in mt7915_ampdu_stat_read_phy()
721 for (i = 0; i < ARRAY_SIZE(bound) - 1; i++) in mt7915_ampdu_stat_read_phy()
722 seq_printf(file, "%3d -%3d | ", in mt7915_ampdu_stat_read_phy()
727 seq_printf(file, "%8d | ", phy->mt76->aggr_stats[i]); in mt7915_ampdu_stat_read_phy()
730 seq_printf(file, "BA miss count: %d\n", phy->mib.ba_miss_cnt); in mt7915_ampdu_stat_read_phy()
734 mt7915_txbf_stat_read_phy(struct mt7915_phy *phy, struct seq_file *s) in mt7915_txbf_stat_read_phy() argument
736 struct mt76_mib_stats *mib = &phy->mib; in mt7915_txbf_stat_read_phy()
742 seq_puts(s, "\nTx Beamformer applied PPDU counts: "); in mt7915_txbf_stat_read_phy()
744 seq_printf(s, "iBF: %d, eBF: %d\n", in mt7915_txbf_stat_read_phy()
745 mib->tx_bf_ibf_ppdu_cnt, in mt7915_txbf_stat_read_phy()
746 mib->tx_bf_ebf_ppdu_cnt); in mt7915_txbf_stat_read_phy()
749 seq_puts(s, "Tx Beamformer Rx feedback statistics: "); in mt7915_txbf_stat_read_phy()
751 seq_printf(s, "All: %d, HE: %d, VHT: %d, HT: %d, ", in mt7915_txbf_stat_read_phy()
752 mib->tx_bf_rx_fb_all_cnt, in mt7915_txbf_stat_read_phy()
753 mib->tx_bf_rx_fb_he_cnt, in mt7915_txbf_stat_read_phy()
754 mib->tx_bf_rx_fb_vht_cnt, in mt7915_txbf_stat_read_phy()
755 mib->tx_bf_rx_fb_ht_cnt); in mt7915_txbf_stat_read_phy()
757 seq_printf(s, "%s, NC: %d, NR: %d\n", in mt7915_txbf_stat_read_phy()
758 bw[mib->tx_bf_rx_fb_bw], in mt7915_txbf_stat_read_phy()
759 mib->tx_bf_rx_fb_nc_cnt, in mt7915_txbf_stat_read_phy()
760 mib->tx_bf_rx_fb_nr_cnt); in mt7915_txbf_stat_read_phy()
763 seq_printf(s, "Tx Beamformee successful feedback frames: %d\n", in mt7915_txbf_stat_read_phy()
764 mib->tx_bf_fb_cpl_cnt); in mt7915_txbf_stat_read_phy()
765 seq_printf(s, "Tx Beamformee feedback triggered counts: %d\n", in mt7915_txbf_stat_read_phy()
766 mib->tx_bf_fb_trig_cnt); in mt7915_txbf_stat_read_phy()
769 seq_printf(s, "Tx multi-user Beamforming counts: %d\n", in mt7915_txbf_stat_read_phy()
770 mib->tx_bf_cnt); in mt7915_txbf_stat_read_phy()
771 seq_printf(s, "Tx multi-user MPDU counts: %d\n", mib->tx_mu_mpdu_cnt); in mt7915_txbf_stat_read_phy()
772 seq_printf(s, "Tx multi-user successful MPDU counts: %d\n", in mt7915_txbf_stat_read_phy()
773 mib->tx_mu_acked_mpdu_cnt); in mt7915_txbf_stat_read_phy()
774 seq_printf(s, "Tx single-user successful MPDU counts: %d\n", in mt7915_txbf_stat_read_phy()
775 mib->tx_su_acked_mpdu_cnt); in mt7915_txbf_stat_read_phy()
777 seq_puts(s, "\n"); in mt7915_txbf_stat_read_phy()
783 struct mt7915_phy *phy = file->private; in mt7915_tx_stats_show() local
784 struct mt7915_dev *dev = phy->dev; in mt7915_tx_stats_show()
785 struct mt76_mib_stats *mib = &phy->mib; in mt7915_tx_stats_show()
788 mutex_lock(&dev->mt76.mutex); in mt7915_tx_stats_show()
790 mt7915_ampdu_stat_read_phy(phy, file); in mt7915_tx_stats_show()
791 mt7915_mac_update_stats(phy); in mt7915_tx_stats_show()
792 mt7915_txbf_stat_read_phy(phy, file); in mt7915_tx_stats_show()
796 for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++) { in mt7915_tx_stats_show()
798 i + 1, mib->tx_amsdu[i]); in mt7915_tx_stats_show()
799 if (mib->tx_amsdu_cnt) in mt7915_tx_stats_show()
801 mib->tx_amsdu[i] * 100 / mib->tx_amsdu_cnt); in mt7915_tx_stats_show()
806 mutex_unlock(&dev->mt76.mutex); in mt7915_tx_stats_show()
814 mt7915_hw_queue_read(struct seq_file *s, u32 size, in mt7915_hw_queue_read() argument
817 struct mt7915_phy *phy = s->private; in mt7915_hw_queue_read() local
818 struct mt7915_dev *dev = phy->dev; in mt7915_hw_queue_read()
838 seq_printf(s, "\t%s: ", map[i].name); in mt7915_hw_queue_read()
839 seq_printf(s, "queued:0x%03x head:0x%03x tail:0x%03x\n", in mt7915_hw_queue_read()
847 struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv; in mt7915_sta_hw_queue_read()
848 struct mt7915_dev *dev = msta->vif->phy->dev; in mt7915_sta_hw_queue_read()
849 struct seq_file *s = data; in mt7915_sta_hw_queue_read() local
854 u32 idx = msta->wcid.idx >> 5; in mt7915_sta_hw_queue_read()
855 u8 offs = msta->wcid.idx & GENMASK(4, 0); in mt7915_sta_hw_queue_read()
863 mt76_wr(dev, MT_FL_Q0_CTRL, ctrl | msta->wcid.idx); in mt7915_sta_hw_queue_read()
866 seq_printf(s, "\tSTA %pM wcid %d: AC%d%d queued:%d\n", in mt7915_sta_hw_queue_read()
867 sta->addr, msta->wcid.idx, in mt7915_sta_hw_queue_read()
868 msta->vif->mt76.wmm_idx, ac, qlen); in mt7915_sta_hw_queue_read()
875 struct mt7915_phy *phy = file->private; in mt7915_hw_queues_show() local
876 struct mt7915_dev *dev = phy->dev; in mt7915_hw_queues_show()
925 seq_puts(file, "PLE non-empty queue info:\n"); in mt7915_hw_queues_show()
929 /* iterate per-sta ple queue */ in mt7915_hw_queues_show()
930 ieee80211_iterate_stations_atomic(phy->mt76->hw, in mt7915_hw_queues_show()
933 seq_puts(file, "PSE non-empty queue info:\n"); in mt7915_hw_queues_show()
945 struct mt7915_phy *phy = file->private; in mt7915_xmit_queues_show() local
946 struct mt7915_dev *dev = phy->dev; in mt7915_xmit_queues_show()
951 { phy->mt76->q_tx[MT_TXQ_BE], " MAIN" }, in mt7915_xmit_queues_show()
952 { dev->mt76.q_mcu[MT_MCUQ_WM], " MCUWM" }, in mt7915_xmit_queues_show()
953 { dev->mt76.q_mcu[MT_MCUQ_WA], " MCUWA" }, in mt7915_xmit_queues_show()
954 { dev->mt76.q_mcu[MT_MCUQ_FWDL], "MCUFWDL" }, in mt7915_xmit_queues_show()
958 seq_puts(file, " queue | hw-queued | head | tail |\n"); in mt7915_xmit_queues_show()
965 seq_printf(file, " %s | %9d | %9d | %9d |\n", in mt7915_xmit_queues_show()
966 queue_map[i].queue, q->queued, q->head, in mt7915_xmit_queues_show()
967 q->tail); in mt7915_xmit_queues_show()
977 len += scnprintf(buf + len, sz - len, "%-16s:", #rate " (TMAC)"); \
979 len += scnprintf(buf + len, sz - len, " %6d", txpwr[offs]); \
980 len += scnprintf(buf + len, sz - len, "\n"); \
997 struct mt7915_phy *phy = file->private_data; in mt7915_rate_txpower_get() local
998 struct mt7915_dev *dev = phy->dev; in mt7915_rate_txpower_get()
1001 u8 band = phy->mt76->band_idx; in mt7915_rate_txpower_get()
1009 return -ENOMEM; in mt7915_rate_txpower_get()
1011 ret = mt7915_mcu_get_txpower_sku(phy, txpwr, sizeof(txpwr)); in mt7915_rate_txpower_get()
1015 /* Txpower propagation path: TMAC -> TXV -> BBP */ in mt7915_rate_txpower_get()
1016 len += scnprintf(buf + len, sz - len, in mt7915_rate_txpower_get()
1018 phy != &dev->phy, phy->mt76->chandef.chan->hw_value); in mt7915_rate_txpower_get()
1019 len += scnprintf(buf + len, sz - len, "%-16s %6s %6s %6s %6s\n", in mt7915_rate_txpower_get()
1023 len += scnprintf(buf + len, sz - len, in mt7915_rate_txpower_get()
1024 "%-16s %6s %6s %6s %6s %6s %6s %6s %6s\n", in mt7915_rate_txpower_get()
1029 len += scnprintf(buf + len, sz - len, in mt7915_rate_txpower_get()
1030 "%-16s %6s %6s %6s %6s %6s %6s %6s %6s\n", in mt7915_rate_txpower_get()
1035 len += scnprintf(buf + len, sz - len, in mt7915_rate_txpower_get()
1036 "%-16s %6s %6s %6s %6s %6s %6s %6s %6s %6s\n", in mt7915_rate_txpower_get()
1041 len += scnprintf(buf + len, sz - len, in mt7915_rate_txpower_get()
1042 "%-16s %6s %6s %6s %6s %6s %6s %6s %6s %6s %6s %6s %6s\n", in mt7915_rate_txpower_get()
1057 reg = is_mt7915(&dev->mt76) ? MT_WF_PHY_TPC_CTRL_STAT(band) : in mt7915_rate_txpower_get()
1060 len += scnprintf(buf + len, sz - len, "\nTx power (bbp) : %6ld\n", in mt7915_rate_txpower_get()
1075 struct mt7915_phy *phy = file->private_data; in mt7915_rate_txpower_set() local
1076 struct mt7915_dev *dev = phy->dev; in mt7915_rate_txpower_set()
1077 struct mt76_phy *mphy = phy->mt76; in mt7915_rate_txpower_set()
1080 .band_idx = phy->mt76->band_idx, in mt7915_rate_txpower_set()
1087 return -EINVAL; in mt7915_rate_txpower_set()
1090 return -EFAULT; in mt7915_rate_txpower_set()
1092 if (count && buf[count - 1] == '\n') in mt7915_rate_txpower_set()
1093 buf[count - 1] = '\0'; in mt7915_rate_txpower_set()
1099 dev_warn(dev->mt76.dev, in mt7915_rate_txpower_set()
1101 return -EINVAL; in mt7915_rate_txpower_set()
1105 return -EINVAL; in mt7915_rate_txpower_set()
1117 return -EINVAL; in mt7915_rate_txpower_set()
1119 mutex_lock(&dev->mt76.mutex); in mt7915_rate_txpower_set()
1120 ret = mt7915_mcu_get_txpower_sku(phy, req.txpower_sku, in mt7915_rate_txpower_set()
1150 ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(TX_POWER_FEATURE_CTRL), in mt7915_rate_txpower_set()
1156 mphy->txpower_cur = max3(mphy->txpower_cur, pwr160, pwr); in mt7915_rate_txpower_set()
1158 mutex_unlock(&dev->mt76.mutex); in mt7915_rate_txpower_set()
1172 mt7915_twt_stats(struct seq_file *s, void *data) in mt7915_twt_stats() argument
1174 struct mt7915_dev *dev = dev_get_drvdata(s->private); in mt7915_twt_stats()
1179 seq_puts(s, " wcid | id | flags | exp | mantissa"); in mt7915_twt_stats()
1180 seq_puts(s, " | duration | tsf |\n"); in mt7915_twt_stats()
1181 list_for_each_entry_rcu(iter, &dev->twt_list, list) in mt7915_twt_stats()
1182 seq_printf(s, in mt7915_twt_stats()
1184 iter->wcid, iter->id, in mt7915_twt_stats()
1185 iter->sched ? 's' : 'u', in mt7915_twt_stats()
1186 iter->protection ? 'p' : '-', in mt7915_twt_stats()
1187 iter->trigger ? 't' : '-', in mt7915_twt_stats()
1188 iter->flowtype ? '-' : 'a', in mt7915_twt_stats()
1189 iter->exp, iter->mantissa, in mt7915_twt_stats()
1190 iter->duration, iter->tsf); in mt7915_twt_stats()
1207 ret = mt7915_mcu_rf_regval(dev, dev->mt76.debugfs_reg, ®val, false); in mt7915_rf_regval_get()
1222 return mt7915_mcu_rf_regval(dev, dev->mt76.debugfs_reg, &val32, true); in mt7915_rf_regval_set()
1228 int mt7915_init_debugfs(struct mt7915_phy *phy) in mt7915_init_debugfs() argument
1230 struct mt7915_dev *dev = phy->dev; in mt7915_init_debugfs()
1231 bool ext_phy = phy != &dev->phy; in mt7915_init_debugfs()
1234 dir = mt76_register_debugfs_fops(phy->mt76, NULL); in mt7915_init_debugfs()
1236 return -ENOMEM; in mt7915_init_debugfs()
1238 debugfs_create_file("muru_stats", 0400, dir, phy, in mt7915_init_debugfs()
1240 debugfs_create_file("hw-queues", 0400, dir, phy, in mt7915_init_debugfs()
1242 debugfs_create_file("xmit-queues", 0400, dir, phy, in mt7915_init_debugfs()
1244 debugfs_create_file("tx_stats", 0400, dir, phy, &mt7915_tx_stats_fops); in mt7915_init_debugfs()
1245 debugfs_create_file("sys_recovery", 0600, dir, phy, in mt7915_init_debugfs()
1256 debugfs_create_file("txpower_sku", 0400, dir, phy, in mt7915_init_debugfs()
1258 debugfs_create_devm_seqfile(dev->mt76.dev, "twt_stats", dir, in mt7915_init_debugfs()
1262 if (!dev->dbdc_support || phy->mt76->band_idx) { in mt7915_init_debugfs()
1264 &dev->hw_pattern); in mt7915_init_debugfs()
1265 debugfs_create_file("radar_trigger", 0200, dir, phy, in mt7915_init_debugfs()
1267 debugfs_create_devm_seqfile(dev->mt76.dev, "rdd_monitor", dir, in mt7915_init_debugfs()
1272 dev->debugfs_dir = dir; in mt7915_init_debugfs()
1286 dest = relay_reserve(dev->relay_fwlog, hdrlen + len + 4); in mt7915_debugfs_write_fwlog()
1297 relay_flush(dev->relay_fwlog); in mt7915_debugfs_write_fwlog()
1314 if (!dev->relay_fwlog) in mt7915_debugfs_rx_fw_monitor()
1327 if (dev->relay_fwlog) in mt7915_debugfs_rx_log()
1334 /** per-station debugfs **/
1340 struct ieee80211_sta *sta = file->private_data; in mt7915_sta_fixed_rate_set()
1341 struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv; in mt7915_sta_fixed_rate_set()
1342 struct mt7915_dev *dev = msta->vif->phy->dev; in mt7915_sta_fixed_rate_set()
1344 struct sta_phy phy = {}; in mt7915_sta_fixed_rate_set() local
1351 return -EINVAL; in mt7915_sta_fixed_rate_set()
1354 return -EFAULT; in mt7915_sta_fixed_rate_set()
1356 if (count && buf[count - 1] == '\n') in mt7915_sta_fixed_rate_set()
1357 buf[count - 1] = '\0'; in mt7915_sta_fixed_rate_set()
1361 /* mode - cck: 0, ofdm: 1, ht: 2, gf: 3, vht: 4, he_su: 8, he_er: 9 in mt7915_sta_fixed_rate_set()
1362 * bw - bw20: 0, bw40: 1, bw80: 2, bw160: 3 in mt7915_sta_fixed_rate_set()
1363 * nss - vht: 1~4, he: 1~4, others: ignore in mt7915_sta_fixed_rate_set()
1364 * mcs - cck: 0~4, ofdm: 0~7, ht: 0~32, vht: 0~9, he_su: 0~11, he_er: 0~2 in mt7915_sta_fixed_rate_set()
1365 * gi - (ht/vht) lgi: 0, sgi: 1; (he) 0.8us: 0, 1.6us: 1, 3.2us: 2 in mt7915_sta_fixed_rate_set()
1366 * ldpc - off: 0, on: 1 in mt7915_sta_fixed_rate_set()
1367 * stbc - off: 0, on: 1 in mt7915_sta_fixed_rate_set()
1368 * he_ltf - 1xltf: 0, 2xltf: 1, 4xltf: 2 in mt7915_sta_fixed_rate_set()
1371 &phy.type, &phy.bw, &phy.nss, &phy.mcs, &gi, in mt7915_sta_fixed_rate_set()
1372 &phy.ldpc, &phy.stbc, &he_ltf) != 8) { in mt7915_sta_fixed_rate_set()
1373 dev_warn(dev->mt76.dev, in mt7915_sta_fixed_rate_set()
1379 phy.ldpc = (phy.bw || phy.ldpc) * GENMASK(2, 0); in mt7915_sta_fixed_rate_set()
1380 for (i = 0; i <= phy.bw; i++) { in mt7915_sta_fixed_rate_set()
1381 phy.sgi |= gi << (i << sta->deflink.he_cap.has_he); in mt7915_sta_fixed_rate_set()
1382 phy.he_ltf |= he_ltf << (i << sta->deflink.he_cap.has_he); in mt7915_sta_fixed_rate_set()
1387 vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv); in mt7915_sta_fixed_rate_set()
1388 ret = mt7915_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy, field); in mt7915_sta_fixed_rate_set()
1390 return -EFAULT; in mt7915_sta_fixed_rate_set()
1403 mt7915_queues_show(struct seq_file *s, void *data) in mt7915_queues_show() argument
1405 struct ieee80211_sta *sta = s->private; in mt7915_queues_show()
1407 mt7915_sta_hw_queue_read(s, sta); in mt7915_queues_show()
1418 debugfs_create_file("hw-queues", 0400, dir, sta, &mt7915_queues_fops); in mt7915_sta_add_debugfs()