Commit 1258c156 authored by Ryder Lee's avatar Ryder Lee Committed by Felix Fietkau

wifi: mt76: mt7915: accumulate mu-mimo ofdma muru stats

The stats are clear-on-read, which makes it very difficult for tools
to adequately deal with wrapped stats and with keeping good totals.

So, accumulate these values when they are read from the firmware/radio
and present totals to user-space.
Signed-off-by: default avatarBen Greear <greearb@candelatech.com>
Signed-off-by: default avatarRyder Lee <ryder.lee@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 749c2c2b
...@@ -918,6 +918,38 @@ struct mt76_mib_stats { ...@@ -918,6 +918,38 @@ struct mt76_mib_stats {
u32 tx_amsdu[8]; u32 tx_amsdu[8];
u32 tx_amsdu_cnt; u32 tx_amsdu_cnt;
/* mcu_muru_stats */
u32 dl_cck_cnt;
u32 dl_ofdm_cnt;
u32 dl_htmix_cnt;
u32 dl_htgf_cnt;
u32 dl_vht_su_cnt;
u32 dl_vht_2mu_cnt;
u32 dl_vht_3mu_cnt;
u32 dl_vht_4mu_cnt;
u32 dl_he_su_cnt;
u32 dl_he_ext_su_cnt;
u32 dl_he_2ru_cnt;
u32 dl_he_2mu_cnt;
u32 dl_he_3ru_cnt;
u32 dl_he_3mu_cnt;
u32 dl_he_4ru_cnt;
u32 dl_he_4mu_cnt;
u32 dl_he_5to8ru_cnt;
u32 dl_he_9to16ru_cnt;
u32 dl_he_gtr16ru_cnt;
u32 ul_hetrig_su_cnt;
u32 ul_hetrig_2ru_cnt;
u32 ul_hetrig_3ru_cnt;
u32 ul_hetrig_4ru_cnt;
u32 ul_hetrig_5to8ru_cnt;
u32 ul_hetrig_9to16ru_cnt;
u32 ul_hetrig_gtr16ru_cnt;
u32 ul_hetrig_2mu_cnt;
u32 ul_hetrig_3mu_cnt;
u32 ul_hetrig_4mu_cnt;
}; };
struct mt76_power_limits { struct mt76_power_limits {
......
...@@ -251,7 +251,6 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data) ...@@ -251,7 +251,6 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data)
{ {
struct mt7915_phy *phy = file->private; struct mt7915_phy *phy = file->private;
struct mt7915_dev *dev = phy->dev; struct mt7915_dev *dev = phy->dev;
struct mt7915_mcu_muru_stats mu_stats = {};
static const char * const dl_non_he_type[] = { static const char * const dl_non_he_type[] = {
"CCK", "OFDM", "HT MIX", "HT GF", "CCK", "OFDM", "HT MIX", "HT GF",
"VHT SU", "VHT 2MU", "VHT 3MU", "VHT 4MU" "VHT SU", "VHT 2MU", "VHT 3MU", "VHT 4MU"
...@@ -275,7 +274,7 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data) ...@@ -275,7 +274,7 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data)
mutex_lock(&dev->mt76.mutex); mutex_lock(&dev->mt76.mutex);
ret = mt7915_mcu_muru_debug_get(phy, &mu_stats); ret = mt7915_mcu_muru_debug_get(phy);
if (ret) if (ret)
goto exit; goto exit;
...@@ -285,14 +284,13 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data) ...@@ -285,14 +284,13 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data)
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
seq_printf(file, "%8s | ", dl_non_he_type[i]); seq_printf(file, "%8s | ", dl_non_he_type[i]);
#define __dl_u32(s) le32_to_cpu(mu_stats.dl.s)
seq_puts(file, "\nTotal Count:"); seq_puts(file, "\nTotal Count:");
seq_printf(file, "%8u | %8u | %8u | %8u | %8u | ", seq_printf(file, "%8u | %8u | %8u | %8u | %8u | ",
__dl_u32(cck_cnt), phy->mib.dl_cck_cnt,
__dl_u32(ofdm_cnt), phy->mib.dl_ofdm_cnt,
__dl_u32(htmix_cnt), phy->mib.dl_htmix_cnt,
__dl_u32(htgf_cnt), phy->mib.dl_htgf_cnt,
__dl_u32(vht_su_cnt)); phy->mib.dl_vht_su_cnt);
seq_puts(file, "\nDownlink MU-MIMO\nData Type: "); seq_puts(file, "\nDownlink MU-MIMO\nData Type: ");
...@@ -301,23 +299,23 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data) ...@@ -301,23 +299,23 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data)
seq_puts(file, "\nTotal Count:"); seq_puts(file, "\nTotal Count:");
seq_printf(file, "%8u | %8u | %8u | ", seq_printf(file, "%8u | %8u | %8u | ",
__dl_u32(vht_2mu_cnt), phy->mib.dl_vht_2mu_cnt,
__dl_u32(vht_3mu_cnt), phy->mib.dl_vht_3mu_cnt,
__dl_u32(vht_4mu_cnt)); phy->mib.dl_vht_4mu_cnt);
sub_total_cnt = __dl_u32(vht_2mu_cnt) + sub_total_cnt = phy->mib.dl_vht_2mu_cnt +
__dl_u32(vht_3mu_cnt) + phy->mib.dl_vht_3mu_cnt +
__dl_u32(vht_4mu_cnt); phy->mib.dl_vht_4mu_cnt;
seq_printf(file, "\nTotal non-HE MU-MIMO DL PPDU count: %lld", seq_printf(file, "\nTotal non-HE MU-MIMO DL PPDU count: %lld",
sub_total_cnt); sub_total_cnt);
total_ppdu_cnt = sub_total_cnt + total_ppdu_cnt = sub_total_cnt +
__dl_u32(cck_cnt) + phy->mib.dl_cck_cnt +
__dl_u32(ofdm_cnt) + phy->mib.dl_ofdm_cnt +
__dl_u32(htmix_cnt) + phy->mib.dl_htmix_cnt +
__dl_u32(htgf_cnt) + phy->mib.dl_htgf_cnt +
__dl_u32(vht_su_cnt); phy->mib.dl_vht_su_cnt;
seq_printf(file, "\nAll non-HE DL PPDU count: %lld", total_ppdu_cnt); seq_printf(file, "\nAll non-HE DL PPDU count: %lld", total_ppdu_cnt);
...@@ -329,8 +327,7 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data) ...@@ -329,8 +327,7 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data)
seq_puts(file, "\nTotal Count:"); seq_puts(file, "\nTotal Count:");
seq_printf(file, "%8u | %8u | ", seq_printf(file, "%8u | %8u | ",
__dl_u32(he_su_cnt), phy->mib.dl_he_su_cnt, phy->mib.dl_he_ext_su_cnt);
__dl_u32(he_ext_su_cnt));
seq_puts(file, "\nDownlink MU-MIMO\nData Type: "); seq_puts(file, "\nDownlink MU-MIMO\nData Type: ");
...@@ -339,9 +336,8 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data) ...@@ -339,9 +336,8 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data)
seq_puts(file, "\nTotal Count:"); seq_puts(file, "\nTotal Count:");
seq_printf(file, "%8u | %8u | %8u | ", seq_printf(file, "%8u | %8u | %8u | ",
__dl_u32(he_2mu_cnt), phy->mib.dl_he_2mu_cnt, phy->mib.dl_he_3mu_cnt,
__dl_u32(he_3mu_cnt), phy->mib.dl_he_4mu_cnt);
__dl_u32(he_4mu_cnt));
seq_puts(file, "\nDownlink OFDMA\nData Type: "); seq_puts(file, "\nDownlink OFDMA\nData Type: ");
...@@ -350,37 +346,35 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data) ...@@ -350,37 +346,35 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data)
seq_puts(file, "\nTotal Count:"); seq_puts(file, "\nTotal Count:");
seq_printf(file, "%8u | %8u | %8u | %8u | %9u | %8u | ", seq_printf(file, "%8u | %8u | %8u | %8u | %9u | %8u | ",
__dl_u32(he_2ru_cnt), phy->mib.dl_he_2ru_cnt,
__dl_u32(he_3ru_cnt), phy->mib.dl_he_3ru_cnt,
__dl_u32(he_4ru_cnt), phy->mib.dl_he_4ru_cnt,
__dl_u32(he_5to8ru_cnt), phy->mib.dl_he_5to8ru_cnt,
__dl_u32(he_9to16ru_cnt), phy->mib.dl_he_9to16ru_cnt,
__dl_u32(he_gtr16ru_cnt)); phy->mib.dl_he_gtr16ru_cnt);
sub_total_cnt = __dl_u32(he_2mu_cnt) + sub_total_cnt = phy->mib.dl_he_2mu_cnt +
__dl_u32(he_3mu_cnt) + phy->mib.dl_he_3mu_cnt +
__dl_u32(he_4mu_cnt); phy->mib.dl_he_4mu_cnt;
total_ppdu_cnt = sub_total_cnt; total_ppdu_cnt = sub_total_cnt;
seq_printf(file, "\nTotal HE MU-MIMO DL PPDU count: %lld", seq_printf(file, "\nTotal HE MU-MIMO DL PPDU count: %lld",
sub_total_cnt); sub_total_cnt);
sub_total_cnt = __dl_u32(he_2ru_cnt) + sub_total_cnt = phy->mib.dl_he_2ru_cnt +
__dl_u32(he_3ru_cnt) + phy->mib.dl_he_3ru_cnt +
__dl_u32(he_4ru_cnt) + phy->mib.dl_he_4ru_cnt +
__dl_u32(he_5to8ru_cnt) + phy->mib.dl_he_5to8ru_cnt +
__dl_u32(he_9to16ru_cnt) + phy->mib.dl_he_9to16ru_cnt +
__dl_u32(he_gtr16ru_cnt); phy->mib.dl_he_gtr16ru_cnt;
total_ppdu_cnt += sub_total_cnt; total_ppdu_cnt += sub_total_cnt;
seq_printf(file, "\nTotal HE OFDMA DL PPDU count: %lld", seq_printf(file, "\nTotal HE OFDMA DL PPDU count: %lld",
sub_total_cnt); sub_total_cnt);
total_ppdu_cnt += __dl_u32(he_su_cnt) + total_ppdu_cnt += phy->mib.dl_he_su_cnt + phy->mib.dl_he_ext_su_cnt;
__dl_u32(he_ext_su_cnt);
seq_printf(file, "\nAll HE DL PPDU count: %lld", total_ppdu_cnt); seq_printf(file, "\nAll HE DL PPDU count: %lld", total_ppdu_cnt);
#undef __dl_u32
/* HE Uplink */ /* HE Uplink */
seq_puts(file, "\n\nUplink"); seq_puts(file, "\n\nUplink");
...@@ -389,12 +383,11 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data) ...@@ -389,12 +383,11 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data)
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
seq_printf(file, "%8s | ", ul_he_type[i]); seq_printf(file, "%8s | ", ul_he_type[i]);
#define __ul_u32(s) le32_to_cpu(mu_stats.ul.s)
seq_puts(file, "\nTotal Count:"); seq_puts(file, "\nTotal Count:");
seq_printf(file, "%8u | %8u | %8u | ", seq_printf(file, "%8u | %8u | %8u | ",
__ul_u32(hetrig_2mu_cnt), phy->mib.ul_hetrig_2mu_cnt,
__ul_u32(hetrig_3mu_cnt), phy->mib.ul_hetrig_3mu_cnt,
__ul_u32(hetrig_4mu_cnt)); phy->mib.ul_hetrig_4mu_cnt);
seq_puts(file, "\nTrigger-based Uplink OFDMA\nData Type: "); seq_puts(file, "\nTrigger-based Uplink OFDMA\nData Type: ");
...@@ -403,37 +396,36 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data) ...@@ -403,37 +396,36 @@ static int mt7915_muru_stats_show(struct seq_file *file, void *data)
seq_puts(file, "\nTotal Count:"); seq_puts(file, "\nTotal Count:");
seq_printf(file, "%8u | %8u | %8u | %8u | %8u | %9u | %7u | ", seq_printf(file, "%8u | %8u | %8u | %8u | %8u | %9u | %7u | ",
__ul_u32(hetrig_su_cnt), phy->mib.ul_hetrig_su_cnt,
__ul_u32(hetrig_2ru_cnt), phy->mib.ul_hetrig_2ru_cnt,
__ul_u32(hetrig_3ru_cnt), phy->mib.ul_hetrig_3ru_cnt,
__ul_u32(hetrig_4ru_cnt), phy->mib.ul_hetrig_4ru_cnt,
__ul_u32(hetrig_5to8ru_cnt), phy->mib.ul_hetrig_5to8ru_cnt,
__ul_u32(hetrig_9to16ru_cnt), phy->mib.ul_hetrig_9to16ru_cnt,
__ul_u32(hetrig_gtr16ru_cnt)); phy->mib.ul_hetrig_gtr16ru_cnt);
sub_total_cnt = __ul_u32(hetrig_2mu_cnt) + sub_total_cnt = phy->mib.ul_hetrig_2mu_cnt +
__ul_u32(hetrig_3mu_cnt) + phy->mib.ul_hetrig_3mu_cnt +
__ul_u32(hetrig_4mu_cnt); phy->mib.ul_hetrig_4mu_cnt;
total_ppdu_cnt = sub_total_cnt; total_ppdu_cnt = sub_total_cnt;
seq_printf(file, "\nTotal HE MU-MIMO UL TB PPDU count: %lld", seq_printf(file, "\nTotal HE MU-MIMO UL TB PPDU count: %lld",
sub_total_cnt); sub_total_cnt);
sub_total_cnt = __ul_u32(hetrig_2ru_cnt) + sub_total_cnt = phy->mib.ul_hetrig_2ru_cnt +
__ul_u32(hetrig_3ru_cnt) + phy->mib.ul_hetrig_3ru_cnt +
__ul_u32(hetrig_4ru_cnt) + phy->mib.ul_hetrig_4ru_cnt +
__ul_u32(hetrig_5to8ru_cnt) + phy->mib.ul_hetrig_5to8ru_cnt +
__ul_u32(hetrig_9to16ru_cnt) + phy->mib.ul_hetrig_9to16ru_cnt +
__ul_u32(hetrig_gtr16ru_cnt); phy->mib.ul_hetrig_gtr16ru_cnt;
total_ppdu_cnt += sub_total_cnt; total_ppdu_cnt += sub_total_cnt;
seq_printf(file, "\nTotal HE OFDMA UL TB PPDU count: %lld", seq_printf(file, "\nTotal HE OFDMA UL TB PPDU count: %lld",
sub_total_cnt); sub_total_cnt);
total_ppdu_cnt += __ul_u32(hetrig_su_cnt); total_ppdu_cnt += phy->mib.ul_hetrig_su_cnt;
seq_printf(file, "\nAll HE UL TB PPDU count: %lld\n", total_ppdu_cnt); seq_printf(file, "\nAll HE UL TB PPDU count: %lld\n", total_ppdu_cnt);
#undef __ul_u32
exit: exit:
mutex_unlock(&dev->mt76.mutex); mutex_unlock(&dev->mt76.mutex);
......
...@@ -2072,6 +2072,9 @@ void mt7915_mac_work(struct work_struct *work) ...@@ -2072,6 +2072,9 @@ void mt7915_mac_work(struct work_struct *work)
mt7915_mac_update_stats(phy); mt7915_mac_update_stats(phy);
mt7915_mac_severe_check(phy); mt7915_mac_severe_check(phy);
if (phy->dev->muru_debug)
mt7915_mcu_muru_debug_get(phy);
} }
mutex_unlock(&mphy->dev->mutex); mutex_unlock(&mphy->dev->mutex);
......
...@@ -1254,6 +1254,38 @@ static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = { ...@@ -1254,6 +1254,38 @@ static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = {
"rx_vec_queue_overflow_drop_cnt", "rx_vec_queue_overflow_drop_cnt",
"rx_ba_cnt", "rx_ba_cnt",
/* muru mu-mimo and ofdma related stats */
"dl_cck_cnt",
"dl_ofdm_cnt",
"dl_htmix_cnt",
"dl_htgf_cnt",
"dl_vht_su_cnt",
"dl_vht_2mu_cnt",
"dl_vht_3mu_cnt",
"dl_vht_4mu_cnt",
"dl_he_su_cnt",
"dl_he_ext_su_cnt",
"dl_he_2ru_cnt",
"dl_he_2mu_cnt",
"dl_he_3ru_cnt",
"dl_he_3mu_cnt",
"dl_he_4ru_cnt",
"dl_he_4mu_cnt",
"dl_he_5to8ru_cnt",
"dl_he_9to16ru_cnt",
"dl_he_gtr16ru_cnt",
"ul_hetrig_su_cnt",
"ul_hetrig_2ru_cnt",
"ul_hetrig_3ru_cnt",
"ul_hetrig_4ru_cnt",
"ul_hetrig_5to8ru_cnt",
"ul_hetrig_9to16ru_cnt",
"ul_hetrig_gtr16ru_cnt",
"ul_hetrig_2mu_cnt",
"ul_hetrig_3mu_cnt",
"ul_hetrig_4mu_cnt",
/* per vif counters */ /* per vif counters */
"v_tx_mode_cck", "v_tx_mode_cck",
"v_tx_mode_ofdm", "v_tx_mode_ofdm",
...@@ -1408,6 +1440,37 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw, ...@@ -1408,6 +1440,37 @@ void mt7915_get_et_stats(struct ieee80211_hw *hw,
data[ei++] = mib->rx_vec_queue_overflow_drop_cnt; data[ei++] = mib->rx_vec_queue_overflow_drop_cnt;
data[ei++] = mib->rx_ba_cnt; data[ei++] = mib->rx_ba_cnt;
data[ei++] = mib->dl_cck_cnt;
data[ei++] = mib->dl_ofdm_cnt;
data[ei++] = mib->dl_htmix_cnt;
data[ei++] = mib->dl_htgf_cnt;
data[ei++] = mib->dl_vht_su_cnt;
data[ei++] = mib->dl_vht_2mu_cnt;
data[ei++] = mib->dl_vht_3mu_cnt;
data[ei++] = mib->dl_vht_4mu_cnt;
data[ei++] = mib->dl_he_su_cnt;
data[ei++] = mib->dl_he_ext_su_cnt;
data[ei++] = mib->dl_he_2ru_cnt;
data[ei++] = mib->dl_he_2mu_cnt;
data[ei++] = mib->dl_he_3ru_cnt;
data[ei++] = mib->dl_he_3mu_cnt;
data[ei++] = mib->dl_he_4ru_cnt;
data[ei++] = mib->dl_he_4mu_cnt;
data[ei++] = mib->dl_he_5to8ru_cnt;
data[ei++] = mib->dl_he_9to16ru_cnt;
data[ei++] = mib->dl_he_gtr16ru_cnt;
data[ei++] = mib->ul_hetrig_su_cnt;
data[ei++] = mib->ul_hetrig_2ru_cnt;
data[ei++] = mib->ul_hetrig_3ru_cnt;
data[ei++] = mib->ul_hetrig_4ru_cnt;
data[ei++] = mib->ul_hetrig_5to8ru_cnt;
data[ei++] = mib->ul_hetrig_9to16ru_cnt;
data[ei++] = mib->ul_hetrig_gtr16ru_cnt;
data[ei++] = mib->ul_hetrig_2mu_cnt;
data[ei++] = mib->ul_hetrig_3mu_cnt;
data[ei++] = mib->ul_hetrig_4mu_cnt;
/* Add values for all stations owned by this vif */ /* Add values for all stations owned by this vif */
wi.initial_stat_idx = ei; wi.initial_stat_idx = ei;
ieee80211_iterate_stations_atomic(hw, mt7915_ethtool_worker, &wi); ieee80211_iterate_stations_atomic(hw, mt7915_ethtool_worker, &wi);
......
...@@ -2119,12 +2119,11 @@ int mt7915_mcu_muru_debug_set(struct mt7915_dev *dev, bool enabled) ...@@ -2119,12 +2119,11 @@ int mt7915_mcu_muru_debug_set(struct mt7915_dev *dev, bool enabled)
sizeof(data), false); sizeof(data), false);
} }
int mt7915_mcu_muru_debug_get(struct mt7915_phy *phy, void *ms) int mt7915_mcu_muru_debug_get(struct mt7915_phy *phy)
{ {
struct mt7915_dev *dev = phy->dev; struct mt7915_dev *dev = phy->dev;
struct sk_buff *skb; struct sk_buff *skb;
struct mt7915_mcu_muru_stats *mu_stats = struct mt7915_mcu_muru_stats *mu_stats;
(struct mt7915_mcu_muru_stats *)ms;
int ret; int ret;
struct { struct {
...@@ -2140,7 +2139,43 @@ int mt7915_mcu_muru_debug_get(struct mt7915_phy *phy, void *ms) ...@@ -2140,7 +2139,43 @@ int mt7915_mcu_muru_debug_get(struct mt7915_phy *phy, void *ms)
if (ret) if (ret)
return ret; return ret;
memcpy(mu_stats, skb->data, sizeof(struct mt7915_mcu_muru_stats)); mu_stats = (struct mt7915_mcu_muru_stats *)(skb->data);
/* accumulate stats, these are clear-on-read */
#define __dl_u32(s) phy->mib.dl_##s += le32_to_cpu(mu_stats->dl.s)
#define __ul_u32(s) phy->mib.ul_##s += le32_to_cpu(mu_stats->ul.s)
__dl_u32(cck_cnt);
__dl_u32(ofdm_cnt);
__dl_u32(htmix_cnt);
__dl_u32(htgf_cnt);
__dl_u32(vht_su_cnt);
__dl_u32(vht_2mu_cnt);
__dl_u32(vht_3mu_cnt);
__dl_u32(vht_4mu_cnt);
__dl_u32(he_su_cnt);
__dl_u32(he_2ru_cnt);
__dl_u32(he_2mu_cnt);
__dl_u32(he_3ru_cnt);
__dl_u32(he_3mu_cnt);
__dl_u32(he_4ru_cnt);
__dl_u32(he_4mu_cnt);
__dl_u32(he_5to8ru_cnt);
__dl_u32(he_9to16ru_cnt);
__dl_u32(he_gtr16ru_cnt);
__ul_u32(hetrig_su_cnt);
__ul_u32(hetrig_2ru_cnt);
__ul_u32(hetrig_3ru_cnt);
__ul_u32(hetrig_4ru_cnt);
__ul_u32(hetrig_5to8ru_cnt);
__ul_u32(hetrig_9to16ru_cnt);
__ul_u32(hetrig_gtr16ru_cnt);
__ul_u32(hetrig_2mu_cnt);
__ul_u32(hetrig_3mu_cnt);
__ul_u32(hetrig_4mu_cnt);
#undef __dl_u32
#undef __ul_u32
dev_kfree_skb(skb); dev_kfree_skb(skb);
return 0; return 0;
......
...@@ -569,7 +569,7 @@ void mt7915_set_stream_he_caps(struct mt7915_phy *phy); ...@@ -569,7 +569,7 @@ void mt7915_set_stream_he_caps(struct mt7915_phy *phy);
void mt7915_set_stream_vht_txbf_caps(struct mt7915_phy *phy); void mt7915_set_stream_vht_txbf_caps(struct mt7915_phy *phy);
void mt7915_update_channel(struct mt76_phy *mphy); void mt7915_update_channel(struct mt76_phy *mphy);
int mt7915_mcu_muru_debug_set(struct mt7915_dev *dev, bool enable); int mt7915_mcu_muru_debug_set(struct mt7915_dev *dev, bool enable);
int mt7915_mcu_muru_debug_get(struct mt7915_phy *phy, void *ms); int mt7915_mcu_muru_debug_get(struct mt7915_phy *phy);
int mt7915_mcu_wed_enable_rx_stats(struct mt7915_dev *dev); int mt7915_mcu_wed_enable_rx_stats(struct mt7915_dev *dev);
int mt7915_init_debugfs(struct mt7915_phy *phy); int mt7915_init_debugfs(struct mt7915_phy *phy);
void mt7915_debugfs_rx_fw_monitor(struct mt7915_dev *dev, const void *data, int len); void mt7915_debugfs_rx_fw_monitor(struct mt7915_dev *dev, const void *data, int len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment