Lines Matching +full:phy +full:- +full:s
1 // SPDX-License-Identifier: ISC
31 dev->ibf = !!val; in mt7996_implicit_txbf_set()
41 *val = dev->ibf; in mt7996_implicit_txbf_get()
54 struct mt7996_dev *dev = file->private_data; in mt7996_sys_recovery_set()
60 return -EINVAL; in mt7996_sys_recovery_set()
63 return -EFAULT; in mt7996_sys_recovery_set()
65 if (count && buf[count - 1] == '\n') in mt7996_sys_recovery_set()
66 buf[count - 1] = '\0'; in mt7996_sys_recovery_set()
72 return -EINVAL; in mt7996_sys_recovery_set()
76 return -EINVAL; in mt7996_sys_recovery_set()
111 dev->recovery.state |= MT_MCU_CMD_WDT_MASK; in mt7996_sys_recovery_set()
132 struct mt7996_dev *dev = file->private_data; in mt7996_sys_recovery_get()
140 return -ENOMEM; in mt7996_sys_recovery_get()
143 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
145 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
147 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
149 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
151 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
153 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
155 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
157 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
159 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
161 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
163 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
167 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
168 "\nlet's dump firmware SER statistics...\n"); in mt7996_sys_recovery_get()
169 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
172 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
175 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
178 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
181 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
184 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
187 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
190 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
193 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
196 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
199 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
202 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
205 desc += scnprintf(buff + desc, bufsz - desc, in mt7996_sys_recovery_get()
207 dev->recovery.wm_reset_count, in mt7996_sys_recovery_get()
208 dev->recovery.wa_reset_count); in mt7996_sys_recovery_get()
228 return -EINVAL; in mt7996_radar_trigger()
230 if (val == MT_RX_SEL2 && !dev->rdd2_phy) { in mt7996_radar_trigger()
231 dev_err(dev->mt76.dev, "Background radar is not enabled\n"); in mt7996_radar_trigger()
232 return -EINVAL; in mt7996_radar_trigger()
243 mt7996_rdd_monitor(struct seq_file *s, void *data) in mt7996_rdd_monitor() argument
245 struct mt7996_dev *dev = dev_get_drvdata(s->private); in mt7996_rdd_monitor()
246 struct cfg80211_chan_def *chandef = &dev->rdd2_chandef; in mt7996_rdd_monitor()
250 mutex_lock(&dev->mt76.mutex); in mt7996_rdd_monitor()
253 ret = -EINVAL; in mt7996_rdd_monitor()
257 if (!dev->rdd2_phy) { in mt7996_rdd_monitor()
258 seq_puts(s, "not running\n"); in mt7996_rdd_monitor()
262 switch (chandef->width) { in mt7996_rdd_monitor()
280 seq_printf(s, "channel %d (%d MHz) width %s MHz center1: %d MHz\n", in mt7996_rdd_monitor()
281 chandef->chan->hw_value, chandef->chan->center_freq, in mt7996_rdd_monitor()
282 bw, chandef->center_freq1); in mt7996_rdd_monitor()
284 mutex_unlock(&dev->mt76.mutex); in mt7996_rdd_monitor()
304 dev->fw_debug_wm = val ? MCU_FW_LOG_TO_HOST : 0; in mt7996_fw_debug_wm_set()
306 if (dev->fw_debug_bin) in mt7996_fw_debug_wm_set()
309 val = dev->fw_debug_wm; in mt7996_fw_debug_wm_set()
311 tx = dev->fw_debug_wm || (dev->fw_debug_bin & BIT(1)); in mt7996_fw_debug_wm_set()
312 rx = dev->fw_debug_wm || (dev->fw_debug_bin & BIT(2)); in mt7996_fw_debug_wm_set()
313 en = dev->fw_debug_wm || (dev->fw_debug_bin & BIT(0)); in mt7996_fw_debug_wm_set()
341 *val = dev->fw_debug_wm; in mt7996_fw_debug_wm_get()
355 dev->fw_debug_wa = val ? MCU_FW_LOG_TO_HOST : 0; in mt7996_fw_debug_wa_set()
357 ret = mt7996_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev->fw_debug_wa); in mt7996_fw_debug_wa_set()
362 !!dev->fw_debug_wa, 0); in mt7996_fw_debug_wa_set()
370 *val = dev->fw_debug_wa; in mt7996_fw_debug_wa_get()
411 if (!dev->relay_fwlog) in mt7996_fw_debug_bin_set()
412 dev->relay_fwlog = relay_open("fwlog_data", dev->debugfs_dir, in mt7996_fw_debug_bin_set()
414 if (!dev->relay_fwlog) in mt7996_fw_debug_bin_set()
415 return -ENOMEM; in mt7996_fw_debug_bin_set()
417 dev->fw_debug_bin = val; in mt7996_fw_debug_bin_set()
419 relay_reset(dev->relay_fwlog); in mt7996_fw_debug_bin_set()
421 return mt7996_fw_debug_wm_set(dev, dev->fw_debug_wm); in mt7996_fw_debug_bin_set()
429 *val = dev->fw_debug_bin; in mt7996_fw_debug_bin_get()
440 struct mt7996_dev *dev = file->private; in mt7996_fw_util_wa_show()
442 if (dev->fw_debug_wa) in mt7996_fw_util_wa_show()
452 mt7996_ampdu_stat_read_phy(struct mt7996_phy *phy, struct seq_file *file) in mt7996_ampdu_stat_read_phy() argument
454 struct mt7996_dev *dev = phy->dev; in mt7996_ampdu_stat_read_phy()
456 u8 band_idx = phy->mt76->band_idx; in mt7996_ampdu_stat_read_phy()
465 seq_printf(file, "\nPhy %s, Phy band %d\n", in mt7996_ampdu_stat_read_phy()
466 wiphy_name(phy->mt76->hw->wiphy), band_idx); in mt7996_ampdu_stat_read_phy()
469 for (i = 0; i < ARRAY_SIZE(bound) - 1; i++) in mt7996_ampdu_stat_read_phy()
470 seq_printf(file, "%3d -%3d | ", in mt7996_ampdu_stat_read_phy()
475 seq_printf(file, "%8d | ", phy->mt76->aggr_stats[i]); in mt7996_ampdu_stat_read_phy()
478 seq_printf(file, "BA miss count: %d\n", phy->mib.ba_miss_cnt); in mt7996_ampdu_stat_read_phy()
482 mt7996_txbf_stat_read_phy(struct mt7996_phy *phy, struct seq_file *s) in mt7996_txbf_stat_read_phy() argument
484 struct mt76_mib_stats *mib = &phy->mib; in mt7996_txbf_stat_read_phy()
490 seq_puts(s, "\nTx Beamformer applied PPDU counts: "); in mt7996_txbf_stat_read_phy()
492 seq_printf(s, "iBF: %d, eBF: %d\n", in mt7996_txbf_stat_read_phy()
493 mib->tx_bf_ibf_ppdu_cnt, in mt7996_txbf_stat_read_phy()
494 mib->tx_bf_ebf_ppdu_cnt); in mt7996_txbf_stat_read_phy()
497 seq_puts(s, "Tx Beamformer Rx feedback statistics: "); in mt7996_txbf_stat_read_phy()
499 seq_printf(s, "All: %d, EHT: %d, HE: %d, VHT: %d, HT: %d, ", in mt7996_txbf_stat_read_phy()
500 mib->tx_bf_rx_fb_all_cnt, in mt7996_txbf_stat_read_phy()
501 mib->tx_bf_rx_fb_eht_cnt, in mt7996_txbf_stat_read_phy()
502 mib->tx_bf_rx_fb_he_cnt, in mt7996_txbf_stat_read_phy()
503 mib->tx_bf_rx_fb_vht_cnt, in mt7996_txbf_stat_read_phy()
504 mib->tx_bf_rx_fb_ht_cnt); in mt7996_txbf_stat_read_phy()
506 seq_printf(s, "%s, NC: %d, NR: %d\n", in mt7996_txbf_stat_read_phy()
507 bw[mib->tx_bf_rx_fb_bw], in mt7996_txbf_stat_read_phy()
508 mib->tx_bf_rx_fb_nc_cnt, in mt7996_txbf_stat_read_phy()
509 mib->tx_bf_rx_fb_nr_cnt); in mt7996_txbf_stat_read_phy()
512 seq_printf(s, "Tx Beamformee successful feedback frames: %d\n", in mt7996_txbf_stat_read_phy()
513 mib->tx_bf_fb_cpl_cnt); in mt7996_txbf_stat_read_phy()
514 seq_printf(s, "Tx Beamformee feedback triggered counts: %d\n", in mt7996_txbf_stat_read_phy()
515 mib->tx_bf_fb_trig_cnt); in mt7996_txbf_stat_read_phy()
518 seq_printf(s, "Tx multi-user Beamforming counts: %d\n", in mt7996_txbf_stat_read_phy()
519 mib->tx_mu_bf_cnt); in mt7996_txbf_stat_read_phy()
520 seq_printf(s, "Tx multi-user MPDU counts: %d\n", mib->tx_mu_mpdu_cnt); in mt7996_txbf_stat_read_phy()
521 seq_printf(s, "Tx multi-user successful MPDU counts: %d\n", in mt7996_txbf_stat_read_phy()
522 mib->tx_mu_acked_mpdu_cnt); in mt7996_txbf_stat_read_phy()
523 seq_printf(s, "Tx single-user successful MPDU counts: %d\n", in mt7996_txbf_stat_read_phy()
524 mib->tx_su_acked_mpdu_cnt); in mt7996_txbf_stat_read_phy()
526 seq_puts(s, "\n"); in mt7996_txbf_stat_read_phy()
530 mt7996_tx_stats_show_phy(struct seq_file *file, struct mt7996_phy *phy) in mt7996_tx_stats_show_phy() argument
532 struct mt76_mib_stats *mib = &phy->mib; in mt7996_tx_stats_show_phy()
536 mt7996_mac_update_stats(phy); in mt7996_tx_stats_show_phy()
537 mt7996_ampdu_stat_read_phy(phy, file); in mt7996_tx_stats_show_phy()
539 attempts = mib->tx_mpdu_attempts_cnt; in mt7996_tx_stats_show_phy()
540 success = mib->tx_mpdu_success_cnt; in mt7996_tx_stats_show_phy()
541 per = attempts ? 100 - success * 100 / attempts : 100; in mt7996_tx_stats_show_phy()
546 mt7996_txbf_stat_read_phy(phy, file); in mt7996_tx_stats_show_phy()
550 for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++) { in mt7996_tx_stats_show_phy()
552 i + 1, mib->tx_amsdu[i]); in mt7996_tx_stats_show_phy()
553 if (mib->tx_amsdu_cnt) in mt7996_tx_stats_show_phy()
555 mib->tx_amsdu[i] * 100 / mib->tx_amsdu_cnt); in mt7996_tx_stats_show_phy()
564 struct mt7996_dev *dev = file->private; in mt7996_tx_stats_show()
565 struct mt7996_phy *phy = &dev->phy; in mt7996_tx_stats_show() local
567 mutex_lock(&dev->mt76.mutex); in mt7996_tx_stats_show()
569 mt7996_tx_stats_show_phy(file, phy); in mt7996_tx_stats_show()
570 phy = mt7996_phy2(dev); in mt7996_tx_stats_show()
571 if (phy) in mt7996_tx_stats_show()
572 mt7996_tx_stats_show_phy(file, phy); in mt7996_tx_stats_show()
573 phy = mt7996_phy3(dev); in mt7996_tx_stats_show()
574 if (phy) in mt7996_tx_stats_show()
575 mt7996_tx_stats_show_phy(file, phy); in mt7996_tx_stats_show()
577 mutex_unlock(&dev->mt76.mutex); in mt7996_tx_stats_show()
585 mt7996_hw_queue_read(struct seq_file *s, u32 size, in mt7996_hw_queue_read() argument
588 struct mt7996_phy *phy = s->private; in mt7996_hw_queue_read() local
589 struct mt7996_dev *dev = phy->dev; in mt7996_hw_queue_read()
609 seq_printf(s, "\t%s: ", map[i].name); in mt7996_hw_queue_read()
610 seq_printf(s, "queued:0x%03x head:0x%03x tail:0x%03x\n", in mt7996_hw_queue_read()
618 struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv; in mt7996_sta_hw_queue_read()
619 struct mt7996_dev *dev = msta->vif->deflink.phy->dev; in mt7996_sta_hw_queue_read()
620 struct seq_file *s = data; in mt7996_sta_hw_queue_read() local
625 u32 idx = msta->wcid.idx >> 5; in mt7996_sta_hw_queue_read()
626 u8 offs = msta->wcid.idx & GENMASK(4, 0); in mt7996_sta_hw_queue_read()
634 mt76_wr(dev, MT_FL_Q0_CTRL, ctrl | msta->wcid.idx); in mt7996_sta_hw_queue_read()
637 seq_printf(s, "\tSTA %pM wcid %d: AC%d%d queued:%d\n", in mt7996_sta_hw_queue_read()
638 sta->addr, msta->wcid.idx, in mt7996_sta_hw_queue_read()
639 msta->vif->deflink.mt76.wmm_idx, ac, qlen); in mt7996_sta_hw_queue_read()
646 struct mt7996_dev *dev = file->private; in mt7996_hw_queues_show()
647 struct mt7996_phy *phy = &dev->phy; in mt7996_hw_queues_show() local
696 seq_puts(file, "PLE non-empty queue info:\n"); in mt7996_hw_queues_show()
700 /* iterate per-sta ple queue */ in mt7996_hw_queues_show()
701 ieee80211_iterate_stations_atomic(phy->mt76->hw, in mt7996_hw_queues_show()
703 phy = mt7996_phy2(dev); in mt7996_hw_queues_show()
704 if (phy) in mt7996_hw_queues_show()
705 ieee80211_iterate_stations_atomic(phy->mt76->hw, in mt7996_hw_queues_show()
707 phy = mt7996_phy3(dev); in mt7996_hw_queues_show()
708 if (phy) in mt7996_hw_queues_show()
709 ieee80211_iterate_stations_atomic(phy->mt76->hw, in mt7996_hw_queues_show()
713 seq_puts(file, "PSE non-empty queue info:\n"); in mt7996_hw_queues_show()
725 struct mt7996_dev *dev = file->private; in mt7996_xmit_queues_show()
726 struct mt7996_phy *phy; in mt7996_xmit_queues_show() local
731 { dev->mphy.q_tx[MT_TXQ_BE], " MAIN0" }, in mt7996_xmit_queues_show()
734 { dev->mt76.q_mcu[MT_MCUQ_WM], " MCUWM" }, in mt7996_xmit_queues_show()
735 { dev->mt76.q_mcu[MT_MCUQ_WA], " MCUWA" }, in mt7996_xmit_queues_show()
736 { dev->mt76.q_mcu[MT_MCUQ_FWDL], "MCUFWDL" }, in mt7996_xmit_queues_show()
740 phy = mt7996_phy2(dev); in mt7996_xmit_queues_show()
741 if (phy) in mt7996_xmit_queues_show()
742 queue_map[1].q = phy->mt76->q_tx[MT_TXQ_BE]; in mt7996_xmit_queues_show()
744 phy = mt7996_phy3(dev); in mt7996_xmit_queues_show()
745 if (phy) in mt7996_xmit_queues_show()
746 queue_map[2].q = phy->mt76->q_tx[MT_TXQ_BE]; in mt7996_xmit_queues_show()
748 seq_puts(file, " queue | hw-queued | head | tail |\n"); in mt7996_xmit_queues_show()
755 seq_printf(file, " %s | %9d | %9d | %9d |\n", in mt7996_xmit_queues_show()
756 queue_map[i].queue, q->queued, q->head, in mt7996_xmit_queues_show()
757 q->tail); in mt7996_xmit_queues_show()
766 mt7996_twt_stats(struct seq_file *s, void *data) in mt7996_twt_stats() argument
768 struct mt7996_dev *dev = dev_get_drvdata(s->private); in mt7996_twt_stats()
773 seq_puts(s, " wcid | id | flags | exp | mantissa"); in mt7996_twt_stats()
774 seq_puts(s, " | duration | tsf |\n"); in mt7996_twt_stats()
775 list_for_each_entry_rcu(iter, &dev->twt_list, list) in mt7996_twt_stats()
776 seq_printf(s, in mt7996_twt_stats()
778 iter->wcid, iter->id, in mt7996_twt_stats()
779 iter->sched ? 's' : 'u', in mt7996_twt_stats()
780 iter->protection ? 'p' : '-', in mt7996_twt_stats()
781 iter->trigger ? 't' : '-', in mt7996_twt_stats()
782 iter->flowtype ? '-' : 'a', in mt7996_twt_stats()
783 iter->exp, iter->mantissa, in mt7996_twt_stats()
784 iter->duration, iter->tsf); in mt7996_twt_stats()
801 ret = mt7996_mcu_rf_regval(dev, dev->mt76.debugfs_reg, ®val, false); in mt7996_rf_regval_get()
816 return mt7996_mcu_rf_regval(dev, dev->mt76.debugfs_reg, &val32, true); in mt7996_rf_regval_set()
826 dir = mt76_register_debugfs_fops(&dev->mphy, NULL); in mt7996_init_debugfs()
828 return -ENOMEM; in mt7996_init_debugfs()
830 debugfs_create_file("hw-queues", 0400, dir, dev, in mt7996_init_debugfs()
832 debugfs_create_file("xmit-queues", 0400, dir, dev, in mt7996_init_debugfs()
845 debugfs_create_devm_seqfile(dev->mt76.dev, "twt_stats", dir, in mt7996_init_debugfs()
849 debugfs_create_u32("dfs_hw_pattern", 0400, dir, &dev->hw_pattern); in mt7996_init_debugfs()
852 debugfs_create_devm_seqfile(dev->mt76.dev, "rdd_monitor", dir, in mt7996_init_debugfs()
855 dev->debugfs_dir = dir; in mt7996_init_debugfs()
869 dest = relay_reserve(dev->relay_fwlog, hdrlen + len + 4); in mt7996_debugfs_write_fwlog()
880 relay_flush(dev->relay_fwlog); in mt7996_debugfs_write_fwlog()
901 if (!dev->relay_fwlog) in mt7996_debugfs_rx_fw_monitor()
904 hdr.serial_id = cpu_to_le16(dev->fw_debug_seq++); in mt7996_debugfs_rx_fw_monitor()
915 if (dev->relay_fwlog) in mt7996_debugfs_rx_log()
922 /** per-station debugfs **/
930 struct ieee80211_sta *sta = file->private_data; in mt7996_sta_fixed_rate_set()
931 struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv; in mt7996_sta_fixed_rate_set()
932 struct mt7996_dev *dev = msta->vif->deflink.phy->dev; in mt7996_sta_fixed_rate_set()
933 struct ra_rate phy = {}; in mt7996_sta_fixed_rate_set() local
939 return -EINVAL; in mt7996_sta_fixed_rate_set()
942 return -EFAULT; in mt7996_sta_fixed_rate_set()
944 if (count && buf[count - 1] == '\n') in mt7996_sta_fixed_rate_set()
945 buf[count - 1] = '\0'; in mt7996_sta_fixed_rate_set()
949 /* mode - cck: 0, ofdm: 1, ht: 2, gf: 3, vht: 4, he_su: 8, he_er: 9 EHT: 15 in mt7996_sta_fixed_rate_set()
950 * bw - bw20: 0, bw40: 1, bw80: 2, bw160: 3, BW320: 4 in mt7996_sta_fixed_rate_set()
951 * nss - vht: 1~4, he: 1~4, eht: 1~4, others: ignore in mt7996_sta_fixed_rate_set()
952 * mcs - cck: 0~4, ofdm: 0~7, ht: 0~32, vht: 0~9, he_su: 0~11, he_er: 0~2, eht: 0~13 in mt7996_sta_fixed_rate_set()
953 * gi - (ht/vht) lgi: 0, sgi: 1; (he) 0.8us: 0, 1.6us: 1, 3.2us: 2 in mt7996_sta_fixed_rate_set()
954 * preamble - short: 1, long: 0 in mt7996_sta_fixed_rate_set()
955 * ldpc - off: 0, on: 1 in mt7996_sta_fixed_rate_set()
956 * stbc - off: 0, on: 1 in mt7996_sta_fixed_rate_set()
957 * ltf - 1xltf: 0, 2xltf: 1, 4xltf: 2 in mt7996_sta_fixed_rate_set()
960 &phy.mode, &phy.bw, &phy.mcs, &phy.nss, &gi, in mt7996_sta_fixed_rate_set()
961 &phy.preamble, &phy.stbc, &phy.ldpc, &phy.spe, <f) != 10) { in mt7996_sta_fixed_rate_set()
962 dev_warn(dev->mt76.dev, in mt7996_sta_fixed_rate_set()
967 phy.wlan_idx = cpu_to_le16(msta->wcid.idx); in mt7996_sta_fixed_rate_set()
968 phy.gi = cpu_to_le16(gi); in mt7996_sta_fixed_rate_set()
969 phy.ltf = cpu_to_le16(ltf); in mt7996_sta_fixed_rate_set()
970 phy.ldpc = phy.ldpc ? 7 : 0; in mt7996_sta_fixed_rate_set()
971 phy.preamble = phy.preamble ? SHORT_PREAMBLE : LONG_PREAMBLE; in mt7996_sta_fixed_rate_set()
973 ret = mt7996_mcu_set_fixed_rate_ctrl(dev, &phy, 0); in mt7996_sta_fixed_rate_set()
975 return -EFAULT; in mt7996_sta_fixed_rate_set()
989 mt7996_queues_show(struct seq_file *s, void *data) in mt7996_queues_show() argument
991 struct ieee80211_sta *sta = s->private; in mt7996_queues_show()
993 mt7996_sta_hw_queue_read(s, sta); in mt7996_queues_show()
1004 debugfs_create_file("hw-queues", 0400, dir, sta, &mt7996_queues_fops); in mt7996_sta_add_debugfs()