]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mt76: mt7996: prepare mt7996_mcu_update_bss_color for MLO support
authorFelix Fietkau <nbd@nbd.name>
Thu, 2 Jan 2025 16:35:04 +0000 (17:35 +0100)
committerFelix Fietkau <nbd@nbd.name>
Tue, 14 Jan 2025 12:42:29 +0000 (13:42 +0100)
Pass in struct mt76_vif_link in order to update the correct link.

Link: https://patch.msgid.link/20250102163508.52945-20-nbd@nbd.name
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7996/main.c
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h

index 95d915045cf730f51cf77c3d3e679e8cb2ae2c3c..ab875abfbd0ac31c148d9f0fdae754a20a53445d 100644 (file)
@@ -540,29 +540,6 @@ static void mt7996_configure_filter(struct ieee80211_hw *hw,
        mutex_unlock(&dev->mt76.mutex);
 }
 
-static void
-mt7996_update_bss_color(struct ieee80211_hw *hw,
-                       struct ieee80211_vif *vif,
-                       struct cfg80211_he_bss_color *bss_color)
-{
-       struct mt7996_dev *dev = mt7996_hw_dev(hw);
-
-       switch (vif->type) {
-       case NL80211_IFTYPE_AP: {
-               struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-
-               if (mvif->deflink.mt76.omac_idx > HW_BSSID_MAX)
-                       return;
-               fallthrough;
-       }
-       case NL80211_IFTYPE_STATION:
-               mt7996_mcu_update_bss_color(dev, vif, bss_color);
-               break;
-       default:
-               break;
-       }
-}
-
 static u8
 mt7996_get_rates_table(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                       bool beacon, bool mcast)
@@ -618,9 +595,9 @@ static void mt7996_bss_info_changed(struct ieee80211_hw *hw,
                                    struct ieee80211_bss_conf *info,
                                    u64 changed)
 {
-       struct mt76_vif_link *mvif = (struct mt76_vif_link *)vif->drv_priv;
        struct mt7996_phy *phy = mt7996_hw_phy(hw);
        struct mt7996_dev *dev = mt7996_hw_dev(hw);
+       struct mt76_vif_link *mvif = mt76_vif_conf_link(&dev->mt76, vif, info);
 
        mutex_lock(&dev->mt76.mutex);
 
@@ -662,8 +639,13 @@ static void mt7996_bss_info_changed(struct ieee80211_hw *hw,
        if (changed & BSS_CHANGED_HE_OBSS_PD)
                mt7996_mcu_add_obss_spr(phy, vif, &info->he_obss_pd);
 
-       if (changed & BSS_CHANGED_HE_BSS_COLOR)
-               mt7996_update_bss_color(hw, vif, &info->he_bss_color);
+       if (changed & BSS_CHANGED_HE_BSS_COLOR) {
+               if ((vif->type == NL80211_IFTYPE_AP &&
+                   mvif->omac_idx <= HW_BSSID_MAX) ||
+                  vif->type == NL80211_IFTYPE_STATION)
+                       mt7996_mcu_update_bss_color(dev, mvif,
+                                                   &info->he_bss_color);
+       }
 
        if (changed & (BSS_CHANGED_BEACON |
                       BSS_CHANGED_BEACON_ENABLED)) {
index 8ae98b724668457e4c295651735b8ffb58a4a208..83c079debf9a7391c3a6d9db819d0b2b84fc7f8f 100644 (file)
@@ -4143,16 +4143,16 @@ int mt7996_mcu_add_obss_spr(struct mt7996_phy *phy, struct ieee80211_vif *vif,
        return mt7996_mcu_set_obss_spr_bitmap(phy, he_obss_pd);
 }
 
-int mt7996_mcu_update_bss_color(struct mt7996_dev *dev, struct ieee80211_vif *vif,
+int mt7996_mcu_update_bss_color(struct mt7996_dev *dev,
+                               struct mt76_vif_link *mlink,
                                struct cfg80211_he_bss_color *he_bss_color)
 {
        int len = sizeof(struct bss_req_hdr) + sizeof(struct bss_color_tlv);
-       struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
        struct bss_color_tlv *bss_color;
        struct sk_buff *skb;
        struct tlv *tlv;
 
-       skb = __mt7996_mcu_alloc_bss_req(&dev->mt76, &mvif->deflink.mt76, len);
+       skb = __mt7996_mcu_alloc_bss_req(&dev->mt76, mlink, len);
        if (IS_ERR(skb))
                return PTR_ERR(skb);
 
index 604b67ea12e4487b631bcdc6191e20989275281f..0774ffdde65daeaf479c6f92510eed624a47a891 100644 (file)
@@ -531,7 +531,8 @@ int mt7996_mcu_add_tx_ba(struct mt7996_dev *dev,
 int mt7996_mcu_add_rx_ba(struct mt7996_dev *dev,
                         struct ieee80211_ampdu_params *params,
                         bool add);
-int mt7996_mcu_update_bss_color(struct mt7996_dev *dev, struct ieee80211_vif *vif,
+int mt7996_mcu_update_bss_color(struct mt7996_dev *dev,
+                               struct mt76_vif_link *mlink,
                                struct cfg80211_he_bss_color *he_bss_color);
 int mt7996_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                          struct ieee80211_bss_conf *link_conf);