mt76: mt7915: fix CSA notification for DBDC
authorRyder Lee <ryder.lee@mediatek.com>
Sat, 27 Feb 2021 07:39:44 +0000 (15:39 +0800)
committerFelix Fietkau <nbd@nbd.name>
Sun, 11 Apr 2021 22:01:23 +0000 (00:01 +0200)
Add CSA notification for second phy.

Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
drivers/net/wireless/mediatek/mt76/mt7915/mcu.h

index 6c429a2..4abe323 100644 (file)
@@ -337,6 +337,22 @@ mt7915_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
 }
 
 static void
+mt7915_mcu_rx_csa_notify(struct mt7915_dev *dev, struct sk_buff *skb)
+{
+       struct mt76_phy *mphy = &dev->mt76.phy;
+       struct mt7915_mcu_csa_notify *c;
+
+       c = (struct mt7915_mcu_csa_notify *)skb->data;
+
+       if (c->band_idx && dev->mt76.phy2)
+               mphy = dev->mt76.phy2;
+
+       ieee80211_iterate_active_interfaces_atomic(mphy->hw,
+                       IEEE80211_IFACE_ITER_RESUME_ALL,
+                       mt7915_mcu_csa_finish, mphy->hw);
+}
+
+static void
 mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb)
 {
        struct mt76_phy *mphy = &dev->mt76.phy;
@@ -344,7 +360,7 @@ mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb)
 
        r = (struct mt7915_mcu_rdd_report *)skb->data;
 
-       if (r->idx && dev->mt76.phy2)
+       if (r->band_idx && dev->mt76.phy2)
                mphy = dev->mt76.phy2;
 
        ieee80211_radar_detected(mphy->hw);
@@ -511,9 +527,7 @@ mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
                mt7915_mcu_rx_radar_detected(dev, skb);
                break;
        case MCU_EXT_EVENT_CSA_NOTIFY:
-               ieee80211_iterate_active_interfaces_atomic(dev->mt76.hw,
-                               IEEE80211_IFACE_ITER_RESUME_ALL,
-                               mt7915_mcu_csa_finish, dev);
+               mt7915_mcu_rx_csa_notify(dev, skb);
                break;
        case MCU_EXT_EVENT_RATE_REPORT:
                mt7915_mcu_tx_rate_report(dev, skb);
@@ -3219,7 +3233,7 @@ int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd)
        }
 #endif
 
-       if (dev->mt76.hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)
+       if (phy->mt76->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)
                req.switch_reason = CH_SWITCH_SCAN_BYPASS_DPD;
        else if ((chandef->chan->flags & IEEE80211_CHAN_RADAR) &&
                 chandef->chan->dfs_state != NL80211_DFS_AVAILABLE)
index 2a2f7bf..4a93214 100644 (file)
@@ -68,10 +68,19 @@ struct mt7915_mcu_rxd {
        u8 s2d_index;
 };
 
+struct mt7915_mcu_csa_notify {
+       struct mt7915_mcu_rxd rxd;
+
+       u8 omac_idx;
+       u8 csa_count;
+       u8 band_idx;
+       u8 rsv;
+} __packed;
+
 struct mt7915_mcu_rdd_report {
        struct mt7915_mcu_rxd rxd;
 
-       u8 idx;
+       u8 band_idx;
        u8 long_detected;
        u8 constant_prf_detected;
        u8 staggered_prf_detected;