From 502d09a6e806cd3d005085fa8cef0873547afbce Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 16 Oct 2019 16:14:12 +0200 Subject: [PATCH] mt76: add multiple wiphy support to mt76_get_min_avg_rssi Allow tracking clients of both wiphys separately Signed-off-by: Felix Fietkau --- mt76.h | 2 +- mt7603/mac.c | 2 +- mt7615/mac.c | 2 +- mt76x0/phy.c | 2 +- mt76x2/phy.c | 2 +- util.c | 8 ++++++-- 6 files changed, 11 insertions(+), 7 deletions(-) diff --git a/mt76.h b/mt76.h index f35dffb6..a5ed2bbd 100644 --- a/mt76.h +++ b/mt76.h @@ -793,7 +793,7 @@ int mt76_sta_state(struct ieee80211_hw *hw, struct ieee80211_vif *vif, void __mt76_sta_remove(struct mt76_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta); -int mt76_get_min_avg_rssi(struct mt76_dev *dev); +int mt76_get_min_avg_rssi(struct mt76_dev *dev, bool ext_phy); int mt76_get_txpower(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int *dbm); diff --git a/mt7603/mac.c b/mt7603/mac.c index 1d6aa5d7..de7779f7 100644 --- a/mt7603/mac.c +++ b/mt7603/mac.c @@ -1740,7 +1740,7 @@ mt7603_false_cca_check(struct mt7603_dev *dev) mt7603_cca_stats_reset(dev); - min_signal = mt76_get_min_avg_rssi(&dev->mt76); + min_signal = mt76_get_min_avg_rssi(&dev->mt76, false); if (!min_signal) { dev->sensitivity = 0; dev->last_cca_adj = jiffies; diff --git a/mt7615/mac.c b/mt7615/mac.c index 581cbf52..38abb3da 100644 --- a/mt7615/mac.c +++ b/mt7615/mac.c @@ -1266,7 +1266,7 @@ mt7615_mac_adjust_sensitivity(struct mt7615_dev *dev, int signal; sensitivity = ofdm ? &dev->ofdm_sensitivity : &dev->cck_sensitivity; - signal = mt76_get_min_avg_rssi(&dev->mt76); + signal = mt76_get_min_avg_rssi(&dev->mt76, false); if (!signal) { mt7615_mac_set_default_sensitivity(dev); return; diff --git a/mt76x0/phy.c b/mt76x0/phy.c index 941a76db..40e296e1 100644 --- a/mt76x0/phy.c +++ b/mt76x0/phy.c @@ -1077,7 +1077,7 @@ mt76x0_phy_update_channel_gain(struct mt76x02_dev *dev) u8 gain_delta; int low_gain; - dev->cal.avg_rssi_all = mt76_get_min_avg_rssi(&dev->mt76); + dev->cal.avg_rssi_all = mt76_get_min_avg_rssi(&dev->mt76, false); if (!dev->cal.avg_rssi_all) dev->cal.avg_rssi_all = -75; diff --git a/mt76x2/phy.c b/mt76x2/phy.c index 91ab25c7..ed2dcb05 100644 --- a/mt76x2/phy.c +++ b/mt76x2/phy.c @@ -280,7 +280,7 @@ void mt76x2_phy_update_channel_gain(struct mt76x02_dev *dev) int low_gain; u32 val; - dev->cal.avg_rssi_all = mt76_get_min_avg_rssi(&dev->mt76); + dev->cal.avg_rssi_all = mt76_get_min_avg_rssi(&dev->mt76, false); if (!dev->cal.avg_rssi_all) dev->cal.avg_rssi_all = -75; diff --git a/util.c b/util.c index 23d1e1da..8c60c450 100644 --- a/util.c +++ b/util.c @@ -64,7 +64,7 @@ int mt76_wcid_alloc(unsigned long *mask, int size) } EXPORT_SYMBOL_GPL(mt76_wcid_alloc); -int mt76_get_min_avg_rssi(struct mt76_dev *dev) +int mt76_get_min_avg_rssi(struct mt76_dev *dev, bool ext_phy) { struct mt76_wcid *wcid; int i, j, min_rssi = 0; @@ -75,14 +75,18 @@ int mt76_get_min_avg_rssi(struct mt76_dev *dev) for (i = 0; i < ARRAY_SIZE(dev->wcid_mask); i++) { unsigned long mask = dev->wcid_mask[i]; + unsigned long phy_mask = dev->wcid_phy_mask[i]; if (!mask) continue; - for (j = i * BITS_PER_LONG; mask; j++, mask >>= 1) { + for (j = i * BITS_PER_LONG; mask; j++, mask >>= 1, phy_mask >>= 1) { if (!(mask & 1)) continue; + if (!!(phy_mask & 1) != ext_phy) + continue; + wcid = rcu_dereference(dev->wcid[j]); if (!wcid) continue;