mt76: mt76x02: add channel switch support for usb interfaces
authorMarkus Theil <markus.theil@tu-ilmenau.de>
Wed, 18 Dec 2019 16:07:54 +0000 (17:07 +0100)
committerFelix Fietkau <nbd@nbd.name>
Fri, 14 Feb 2020 09:06:01 +0000 (10:06 +0100)
This patch enables channel switch support on mt76 usb interfaces.

Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76x02_usb_core.c
drivers/net/wireless/mediatek/mt76/mt76x02_util.c

index 30f119ba61c31fb1cd9bfcc6be48556dbab0bb06..324872d9640d584966f9c39b87fcaed65f8d95f0 100644 (file)
@@ -216,6 +216,13 @@ static void mt76x02u_pre_tbtt_work(struct work_struct *work)
                IEEE80211_IFACE_ITER_RESUME_ALL,
                mt76x02_update_beacon_iter, dev);
 
+       mt76_csa_check(&dev->mt76);
+
+       if (dev->mt76.csa_complete) {
+               mt76_csa_finish(&dev->mt76);
+               goto out;
+       }
+
        nbeacons = hweight8(dev->mt76.beacon_mask);
        mt76x02_enqueue_buffered_bc(dev, &data, N_BCN_SLOTS - nbeacons);
 
@@ -224,6 +231,7 @@ static void mt76x02u_pre_tbtt_work(struct work_struct *work)
                mt76x02_mac_set_beacon(dev, skb);
        }
 
+out:
        mt76_wr(dev, MT_BCN_BYPASS_MASK,
                0xff00 | ~(0xff00 >> dev->beacon_data_count));
 
index cb798191ac409774e8a4753e1935b2ab886746d2..15a24e04a1947582f7011e32a4be19b255df1c90 100644 (file)
@@ -166,7 +166,6 @@ void mt76x02_init_device(struct mt76x02_dev *dev)
                wiphy->reg_notifier = mt76x02_regd_notifier;
                wiphy->iface_combinations = mt76x02_if_comb;
                wiphy->n_iface_combinations = ARRAY_SIZE(mt76x02_if_comb);
-               wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
 
                /* init led callbacks */
                if (IS_ENABLED(CONFIG_MT76_LEDS)) {
@@ -176,6 +175,7 @@ void mt76x02_init_device(struct mt76x02_dev *dev)
                }
        }
 
+       wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
        wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
 
        hw->sta_data_size = sizeof(struct mt76x02_sta);