mt76: add multiple wiphy support to mt76_get_min_avg_rssi
authorFelix Fietkau <nbd@nbd.name>
Wed, 16 Oct 2019 14:14:12 +0000 (16:14 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 14 Feb 2020 09:03:09 +0000 (10:03 +0100)
Allow tracking clients of both wiphys separately

Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt7603/mac.c
drivers/net/wireless/mediatek/mt76/mt7615/mac.c
drivers/net/wireless/mediatek/mt76/mt76x0/phy.c
drivers/net/wireless/mediatek/mt76/mt76x2/phy.c
drivers/net/wireless/mediatek/mt76/util.c

index 73a27fe..49289b5 100644 (file)
@@ -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);
index 8cf6c43..ab9ac6e 100644 (file)
@@ -1737,7 +1737,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;
index 581cbf5..38abb3d 100644 (file)
@@ -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;
index cc28ad0..b56397c 100644 (file)
@@ -1069,7 +1069,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;
 
index 91ab25c..ed2dcb0 100644 (file)
@@ -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;
 
index 23d1e1d..8c60c45 100644 (file)
@@ -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;