wifi: mac80211: change QoS settings API to take link into account
authorJohannes Berg <johannes.berg@intel.com>
Fri, 24 Jun 2022 13:40:11 +0000 (15:40 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 15 Jul 2022 09:43:15 +0000 (11:43 +0200)
Take the link into account in the QoS settings (EDCA parameters)
APIs.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
55 files changed:
drivers/net/wireless/ath/ath10k/mac.c
drivers/net/wireless/ath/ath11k/mac.c
drivers/net/wireless/ath/ath5k/mac80211-ops.c
drivers/net/wireless/ath/ath9k/htc_drv_main.c
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/carl9170/main.c
drivers/net/wireless/broadcom/b43/main.c
drivers/net/wireless/broadcom/b43legacy/main.c
drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
drivers/net/wireless/intel/iwlegacy/common.c
drivers/net/wireless/intel/iwlegacy/common.h
drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
drivers/net/wireless/intersil/p54/main.c
drivers/net/wireless/mac80211_hwsim.c
drivers/net/wireless/marvell/mwl8k.c
drivers/net/wireless/mediatek/mt76/mt7603/main.c
drivers/net/wireless/mediatek/mt76/mt7615/main.c
drivers/net/wireless/mediatek/mt76/mt76x02.h
drivers/net/wireless/mediatek/mt76/mt76x02_util.c
drivers/net/wireless/mediatek/mt76/mt7915/main.c
drivers/net/wireless/mediatek/mt76/mt7921/main.c
drivers/net/wireless/mediatek/mt7601u/mt7601u.h
drivers/net/wireless/mediatek/mt7601u/tx.c
drivers/net/wireless/ralink/rt2x00/rt2400pci.c
drivers/net/wireless/ralink/rt2x00/rt2800lib.c
drivers/net/wireless/ralink/rt2x00/rt2800lib.h
drivers/net/wireless/ralink/rt2x00/rt2x00.h
drivers/net/wireless/ralink/rt2x00/rt2x00mac.c
drivers/net/wireless/ralink/rt2x00/rt61pci.c
drivers/net/wireless/ralink/rt2x00/rt73usb.c
drivers/net/wireless/realtek/rtl818x/rtl8180/dev.c
drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
drivers/net/wireless/realtek/rtlwifi/core.c
drivers/net/wireless/realtek/rtw88/mac80211.c
drivers/net/wireless/realtek/rtw89/mac80211.c
drivers/net/wireless/rsi/rsi_91x_mac80211.c
drivers/net/wireless/silabs/wfx/sta.c
drivers/net/wireless/silabs/wfx/sta.h
drivers/net/wireless/st/cw1200/sta.c
drivers/net/wireless/st/cw1200/sta.h
drivers/net/wireless/ti/wl1251/main.c
drivers/net/wireless/ti/wlcore/main.c
include/net/mac80211.h
net/mac80211/cfg.c
net/mac80211/driver-ops.c
net/mac80211/driver-ops.h
net/mac80211/ibss.c
net/mac80211/ieee80211_i.h
net/mac80211/iface.c
net/mac80211/mlme.c
net/mac80211/tdls.c
net/mac80211/trace.h
net/mac80211/util.c

index b18f32261d15914b797af133cbeb310be814ad51..ac54396418c91ff9a091bfce0752175d01056b5d 100644 (file)
@@ -7814,7 +7814,8 @@ exit:
 }
 
 static int ath10k_conf_tx(struct ieee80211_hw *hw,
-                         struct ieee80211_vif *vif, u16 ac,
+                         struct ieee80211_vif *vif,
+                         unsigned int link_id, u16 ac,
                          const struct ieee80211_tx_queue_params *params)
 {
        struct ath10k *ar = hw->priv;
index 1cf1e1f18dba0b22b75b64c956ad2ce91549e465..ec7b3a3629f3d28a69db4e46d17a7251bb6385c1 100644 (file)
@@ -4822,7 +4822,8 @@ exit:
 }
 
 static int ath11k_mac_op_conf_tx(struct ieee80211_hw *hw,
-                                struct ieee80211_vif *vif, u16 ac,
+                                struct ieee80211_vif *vif,
+                                unsigned int link_id, u16 ac,
                                 const struct ieee80211_tx_queue_params *params)
 {
        struct ath11k *ar = hw->priv;
index 8da232e8151871265f57d73107ec7373acbd7c3d..acd0e1dafb7f8d8de0747fa0fa868429e1e2ab72 100644 (file)
@@ -572,7 +572,8 @@ ath5k_get_stats(struct ieee80211_hw *hw,
 
 
 static int
-ath5k_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
+ath5k_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+             unsigned int link_id, u16 queue,
              const struct ieee80211_tx_queue_params *params)
 {
        struct ath5k_hw *ah = hw->priv;
index 14d713e03872586c5e9bc856f419a8de71724e48..61875c45366b74ff4c40ef9a4b7e2d23ab1f43bc 100644 (file)
@@ -1369,7 +1369,8 @@ static void ath9k_htc_sta_rc_update(struct ieee80211_hw *hw,
 }
 
 static int ath9k_htc_conf_tx(struct ieee80211_hw *hw,
-                            struct ieee80211_vif *vif, u16 queue,
+                            struct ieee80211_vif *vif,
+                            unsigned int link_id, u16 queue,
                             const struct ieee80211_tx_queue_params *params)
 {
        struct ath9k_htc_priv *priv = hw->priv;
index c3d5d9795424b7168db040b23b632bb0427e6436..d2c20c332c7a33c74ceec7bfcadc517ef9aaa0e7 100644 (file)
@@ -1712,7 +1712,8 @@ static void ath9k_sta_notify(struct ieee80211_hw *hw,
 }
 
 static int ath9k_conf_tx(struct ieee80211_hw *hw,
-                        struct ieee80211_vif *vif, u16 queue,
+                        struct ieee80211_vif *vif,
+                        unsigned int link_id, u16 queue,
                         const struct ieee80211_tx_queue_params *params)
 {
        struct ath_softc *sc = hw->priv;
index 3d881028bd00258a3554a384bdc3d1db2c7eb351..1540e9827f483f066f42dcf9c77bd9ec98c836c3 100644 (file)
@@ -1365,7 +1365,8 @@ static int carl9170_op_sta_remove(struct ieee80211_hw *hw,
 }
 
 static int carl9170_op_conf_tx(struct ieee80211_hw *hw,
-                              struct ieee80211_vif *vif, u16 queue,
+                              struct ieee80211_vif *vif,
+                              unsigned int link_id, u16 queue,
                               const struct ieee80211_tx_queue_params *param)
 {
        struct ar9170 *ar = hw->priv;
index 6b4188066f0be33b7dfb5d9dbb45ead6619bc113..008ee1f98af4496ac431a7524370d30bd4f8f802 100644 (file)
@@ -3783,7 +3783,8 @@ static void b43_qos_init(struct b43_wldev *dev)
 }
 
 static int b43_op_conf_tx(struct ieee80211_hw *hw,
-                         struct ieee80211_vif *vif, u16 _queue,
+                         struct ieee80211_vif *vif,
+                         unsigned int link_id, u16 _queue,
                          const struct ieee80211_tx_queue_params *params)
 {
        struct b43_wl *wl = hw_to_b43_wl(hw);
index 53201318438936e8666916282bebf07926b03f1e..cbc21c7c31382ad7a5208ae3cd4e8a866cf12bcc 100644 (file)
@@ -2505,7 +2505,8 @@ static void b43legacy_op_tx(struct ieee80211_hw *hw,
 }
 
 static int b43legacy_op_conf_tx(struct ieee80211_hw *hw,
-                               struct ieee80211_vif *vif, u16 queue,
+                               struct ieee80211_vif *vif,
+                               unsigned int link_id, u16 queue,
                                const struct ieee80211_tx_queue_params *params)
 {
        return 0;
index 61d7404aded4c0e76efa1f3c2c8786ea4beff4f2..a4034d44609b27c94e16f0d7d95501a076f104af 100644 (file)
@@ -787,7 +787,8 @@ static void brcms_ops_sw_scan_complete(struct ieee80211_hw *hw,
 }
 
 static int
-brcms_ops_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
+brcms_ops_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+                 unsigned int link_id, u16 queue,
                  const struct ieee80211_tx_queue_params *params)
 {
        struct brcms_info *wl = hw->priv;
index 6f007e63f0c2340358d27f2f267e93342432130d..9aa3359a9adc5620d0e9b995cfdffc2a61509e5a 100644 (file)
@@ -4480,7 +4480,8 @@ il_clear_isr_stats(struct il_priv *il)
 }
 
 int
-il_mac_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
+il_mac_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+              unsigned int link_id, u16 queue,
               const struct ieee80211_tx_queue_params *params)
 {
        struct il_priv *il = hw->priv;
index d1383b4f0f0554437886b7f4a1edbb88971e9ec3..69687fcf963fc1e6bfdb69a314eb4fcb9ecb6f61 100644 (file)
@@ -1683,7 +1683,8 @@ struct il_cfg {
  ***************************/
 
 int il_mac_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                  u16 queue, const struct ieee80211_tx_queue_params *params);
+                  unsigned int link_id, u16 queue,
+                  const struct ieee80211_tx_queue_params *params);
 int il_mac_tx_last_beacon(struct ieee80211_hw *hw);
 
 void il_set_rxon_hwcrypto(struct il_priv *il, int hw_decrypt);
index e8bd4f0e3d2dc7ab8a058c1cfa3de04b5124fadf..f4070fddc8c739e37fd157ac6a70bd661ed3260f 100644 (file)
@@ -2,7 +2,7 @@
 /******************************************************************************
  *
  * Copyright(c) 2003 - 2014 Intel Corporation. All rights reserved.
- * Copyright (C) 2018 - 2019 Intel Corporation
+ * Copyright (C) 2018 - 2019, 2022 Intel Corporation
  *
  * Portions of this file are derived from the ipw3945 project, as well
  * as portions of the ieee80211 subsystem header files.
@@ -1153,7 +1153,8 @@ static int iwlagn_mac_set_tim(struct ieee80211_hw *hw,
 }
 
 static int iwlagn_mac_conf_tx(struct ieee80211_hw *hw,
-                             struct ieee80211_vif *vif, u16 queue,
+                             struct ieee80211_vif *vif,
+                             unsigned int link_id, u16 queue,
                              const struct ieee80211_tx_queue_params *params)
 {
        struct iwl_priv *priv = IWL_MAC80211_GET_DVM(hw);
index eaffc3163bd13410fd4f441a1698429feda88285..3de558f286a1849d50c3979c739fa99b3069e7e8 100644 (file)
@@ -3349,7 +3349,8 @@ static void iwl_mvm_sta_rc_update(struct ieee80211_hw *hw,
 }
 
 static int iwl_mvm_mac_conf_tx(struct ieee80211_hw *hw,
-                              struct ieee80211_vif *vif, u16 ac,
+                              struct ieee80211_vif *vif,
+                              unsigned int link_id, u16 ac,
                               const struct ieee80211_tx_queue_params *params)
 {
        struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
index 115be1f3f33d1fe8e0c0cb3cfd06e59c956a2b83..0f76d43fda3307d7e92833daabfbe2b367741d78 100644 (file)
@@ -404,7 +404,8 @@ static void p54_configure_filter(struct ieee80211_hw *dev,
 }
 
 static int p54_conf_tx(struct ieee80211_hw *dev,
-                      struct ieee80211_vif *vif, u16 queue,
+                      struct ieee80211_vif *vif,
+                      unsigned int link_id, u16 queue,
                       const struct ieee80211_tx_queue_params *params)
 {
        struct p54_common *priv = dev->priv;
index f437d8a65268268626a4dfcbb27e98d551e899df..5da7a097d518d9a75efd344fdf305f3293fbef35 100644 (file)
@@ -2340,10 +2340,10 @@ static int mac80211_hwsim_set_tim(struct ieee80211_hw *hw,
        return 0;
 }
 
-static int mac80211_hwsim_conf_tx(
-       struct ieee80211_hw *hw,
-       struct ieee80211_vif *vif, u16 queue,
-       const struct ieee80211_tx_queue_params *params)
+static int mac80211_hwsim_conf_tx(struct ieee80211_hw *hw,
+                                 struct ieee80211_vif *vif,
+                                 unsigned int link_id, u16 queue,
+                                 const struct ieee80211_tx_queue_params *params)
 {
        wiphy_dbg(hw->wiphy,
                  "%s (queue=%d txop=%d cw_min=%d cw_max=%d aifs=%d)\n",
index 293bec9bb8ddd79be9916e81e698261f055658ec..c1bf8998109ccdd42e06bb00ec95dde0f4b5cf9f 100644 (file)
@@ -5365,7 +5365,8 @@ static int mwl8k_sta_add(struct ieee80211_hw *hw,
 }
 
 static int mwl8k_conf_tx(struct ieee80211_hw *hw,
-                        struct ieee80211_vif *vif, u16 queue,
+                        struct ieee80211_vif *vif,
+                        unsigned int link_id, u16 queue,
                         const struct ieee80211_tx_queue_params *params)
 {
        struct mwl8k_priv *priv = hw->priv;
@@ -6050,7 +6051,7 @@ static int mwl8k_reload_firmware(struct ieee80211_hw *hw, char *fw_image)
                goto fail;
 
        for (i = 0; i < MWL8K_TX_WMM_QUEUES; i++) {
-               rc = mwl8k_conf_tx(hw, NULL, i, &priv->wmm_params[i]);
+               rc = mwl8k_conf_tx(hw, NULL, 0, i, &priv->wmm_params[i]);
                if (rc)
                        goto fail;
        }
index 088c0a4cf774ff7d45095524af5787c20685bc61..051715ed90ddd203874020207d83773cb73ed34f 100644 (file)
@@ -527,7 +527,8 @@ mt7603_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
 }
 
 static int
-mt7603_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
+mt7603_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+              unsigned int link_id, u16 queue,
               const struct ieee80211_tx_queue_params *params)
 {
        struct mt7603_dev *dev = hw->priv;
index 277c22a4d04977242c739da610bb4537db30018c..bf1696eb568aad4170715b30d48a3107bfba1b1d 100644 (file)
@@ -494,7 +494,8 @@ static int mt7615_config(struct ieee80211_hw *hw, u32 changed)
 }
 
 static int
-mt7615_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
+mt7615_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+              unsigned int link_id, u16 queue,
               const struct ieee80211_tx_queue_params *params)
 {
        struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
index 74ad418f5a700f8d8ef3174295038c608b7ee290..50eaeff11af3cb56f136e8cac031c46febf7f35a 100644 (file)
@@ -156,7 +156,8 @@ int mt76x02_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
                    struct ieee80211_vif *vif, struct ieee80211_sta *sta,
                    struct ieee80211_key_conf *key);
 int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                   u16 queue, const struct ieee80211_tx_queue_params *params);
+                   unsigned int link_id, u16 queue,
+                   const struct ieee80211_tx_queue_params *params);
 void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
                                 struct ieee80211_vif *vif,
                                 struct ieee80211_sta *sta);
index a0e2d042751b9182807a0e5a951ba44868a55124..604ddcc2112315aeaa2bb198a5692804ec67ee87 100644 (file)
@@ -487,7 +487,8 @@ int mt76x02_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
 EXPORT_SYMBOL_GPL(mt76x02_set_key);
 
 int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                   u16 queue, const struct ieee80211_tx_queue_params *params)
+                   unsigned int link_id, u16 queue,
+                   const struct ieee80211_tx_queue_params *params)
 {
        struct mt76x02_dev *dev = hw->priv;
        u8 cw_min = 5, cw_max = 10, qid;
index fbeac9aa2af6dfd7bb3f6df738cfc1874647c8b4..25323a155a88644da5e87a6338258aca0fe58b88 100644 (file)
@@ -478,7 +478,8 @@ static int mt7915_config(struct ieee80211_hw *hw, u32 changed)
 }
 
 static int
-mt7915_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
+mt7915_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+              unsigned int link_id, u16 queue,
               const struct ieee80211_tx_queue_params *params)
 {
        struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
index 63583605d1cdf37b463be9daa60a296e8be917ee..1d0daa0c90bef72b1132f6f66c0a902580f2f589 100644 (file)
@@ -567,7 +567,8 @@ out:
 }
 
 static int
-mt7921_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
+mt7921_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+              unsigned int link_id, u16 queue,
               const struct ieee80211_tx_queue_params *params)
 {
        struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
index a122f1dd38f644e4d0ec62b773e8beccbd29389f..118d437078537c0a8954b32ed75aab81d313cfe7 100644 (file)
@@ -368,7 +368,8 @@ void mt7601u_mac_set_ampdu_factor(struct mt7601u_dev *dev);
 void mt7601u_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
                struct sk_buff *skb);
 int mt7601u_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                   u16 queue, const struct ieee80211_tx_queue_params *params);
+                   unsigned int link_id, u16 queue,
+                   const struct ieee80211_tx_queue_params *params);
 void mt7601u_tx_status(struct mt7601u_dev *dev, struct sk_buff *skb);
 void mt7601u_tx_stat(struct work_struct *work);
 
index f1fa0442a57f110eb0719f09ddbbfa6e72f21991..51d977ffc52f3ddf8f098ef4f17b0a304fc9ae76 100644 (file)
@@ -258,7 +258,8 @@ void mt7601u_tx_stat(struct work_struct *work)
 }
 
 int mt7601u_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                   u16 queue, const struct ieee80211_tx_queue_params *params)
+                   unsigned int link_id, u16 queue,
+                   const struct ieee80211_tx_queue_params *params)
 {
        struct mt7601u_dev *dev = hw->priv;
        u8 cw_min = 5, cw_max = 10, hw_q = q2hwq(queue);
index dec6ffdf07c42a3471bcfe14ca6eccabc6f13172..273c5eac336203edccbf39cf1808f070d134716c 100644 (file)
@@ -1654,7 +1654,8 @@ static int rt2400pci_probe_hw(struct rt2x00_dev *rt2x00dev)
  * IEEE80211 stack callback functions.
  */
 static int rt2400pci_conf_tx(struct ieee80211_hw *hw,
-                            struct ieee80211_vif *vif, u16 queue,
+                            struct ieee80211_vif *vif,
+                            unsigned int link_id, u16 queue,
                             const struct ieee80211_tx_queue_params *params)
 {
        struct rt2x00_dev *rt2x00dev = hw->priv;
@@ -1667,7 +1668,7 @@ static int rt2400pci_conf_tx(struct ieee80211_hw *hw,
        if (queue != 0)
                return -EINVAL;
 
-       if (rt2x00mac_conf_tx(hw, vif, queue, params))
+       if (rt2x00mac_conf_tx(hw, vif, link_id, queue, params))
                return -EINVAL;
 
        /*
index cbdaf7992f98aaa9cfd219cce10aa3696238db08..18102fbe36d6cc507bb69508154f14d2fc760b54 100644 (file)
@@ -10395,7 +10395,8 @@ int rt2800_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
 EXPORT_SYMBOL_GPL(rt2800_set_rts_threshold);
 
 int rt2800_conf_tx(struct ieee80211_hw *hw,
-                  struct ieee80211_vif *vif, u16 queue_idx,
+                  struct ieee80211_vif *vif,
+                  unsigned int link_id, u16 queue_idx,
                   const struct ieee80211_tx_queue_params *params)
 {
        struct rt2x00_dev *rt2x00dev = hw->priv;
@@ -10411,7 +10412,7 @@ int rt2800_conf_tx(struct ieee80211_hw *hw,
         * we are free to update the registers based on the value
         * in the queue parameter.
         */
-       retval = rt2x00mac_conf_tx(hw, vif, queue_idx, params);
+       retval = rt2x00mac_conf_tx(hw, vif, link_id, queue_idx, params);
        if (retval)
                return retval;
 
index 1139405c0ebbe844a41c8a452da4ae2bac11b32a..e1761f467b9465df799e06e67b23d4f7f14ad69c 100644 (file)
@@ -245,7 +245,8 @@ void rt2800_get_key_seq(struct ieee80211_hw *hw,
                        struct ieee80211_key_seq *seq);
 int rt2800_set_rts_threshold(struct ieee80211_hw *hw, u32 value);
 int rt2800_conf_tx(struct ieee80211_hw *hw,
-                  struct ieee80211_vif *vif, u16 queue_idx,
+                  struct ieee80211_vif *vif,
+                  unsigned int link_id, u16 queue_idx,
                   const struct ieee80211_tx_queue_params *params);
 u64 rt2800_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
 int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
index 918e0477bb7d7f3b204649d03bf2c67f0a33c60d..f7ef2ca387947eac7eb723911c82bb99ace6787b 100644 (file)
@@ -1481,7 +1481,8 @@ void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
                                struct ieee80211_bss_conf *bss_conf,
                                u64 changes);
 int rt2x00mac_conf_tx(struct ieee80211_hw *hw,
-                     struct ieee80211_vif *vif, u16 queue,
+                     struct ieee80211_vif *vif,
+                     unsigned int link_id, u16 queue,
                      const struct ieee80211_tx_queue_params *params);
 void rt2x00mac_rfkill_poll(struct ieee80211_hw *hw);
 void rt2x00mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
index 6205d22765c77282fe41016f1a7a63557432986d..c0ab2e6a29ad7b63541ec97f931f35037b60eb20 100644 (file)
@@ -665,7 +665,8 @@ void rt2x00mac_bss_info_changed(struct ieee80211_hw *hw,
 EXPORT_SYMBOL_GPL(rt2x00mac_bss_info_changed);
 
 int rt2x00mac_conf_tx(struct ieee80211_hw *hw,
-                     struct ieee80211_vif *vif, u16 queue_idx,
+                     struct ieee80211_vif *vif,
+                     unsigned int link_id, u16 queue_idx,
                      const struct ieee80211_tx_queue_params *params)
 {
        struct rt2x00_dev *rt2x00dev = hw->priv;
index 82cfc2aadc2b3182a01338d47b1aba68799300ba..d92f9eb07dc99b8aabcddb97f28bb54766930dfd 100644 (file)
@@ -2799,7 +2799,8 @@ static int rt61pci_probe_hw(struct rt2x00_dev *rt2x00dev)
  * IEEE80211 stack callback functions.
  */
 static int rt61pci_conf_tx(struct ieee80211_hw *hw,
-                          struct ieee80211_vif *vif, u16 queue_idx,
+                          struct ieee80211_vif *vif,
+                          unsigned int link_id, u16 queue_idx,
                           const struct ieee80211_tx_queue_params *params)
 {
        struct rt2x00_dev *rt2x00dev = hw->priv;
@@ -2815,7 +2816,7 @@ static int rt61pci_conf_tx(struct ieee80211_hw *hw,
         * we are free to update the registers based on the value
         * in the queue parameter.
         */
-       retval = rt2x00mac_conf_tx(hw, vif, queue_idx, params);
+       retval = rt2x00mac_conf_tx(hw, vif, link_id, queue_idx, params);
        if (retval)
                return retval;
 
index 5ff2c740c3ea0a673c269dd398cec28779406a51..e3269fd7c59e3ddd0faa96bf647044e4c2366271 100644 (file)
@@ -2218,7 +2218,8 @@ static int rt73usb_probe_hw(struct rt2x00_dev *rt2x00dev)
  * IEEE80211 stack callback functions.
  */
 static int rt73usb_conf_tx(struct ieee80211_hw *hw,
-                          struct ieee80211_vif *vif, u16 queue_idx,
+                          struct ieee80211_vif *vif,
+                          unsigned int link_id, u16 queue_idx,
                           const struct ieee80211_tx_queue_params *params)
 {
        struct rt2x00_dev *rt2x00dev = hw->priv;
@@ -2234,7 +2235,7 @@ static int rt73usb_conf_tx(struct ieee80211_hw *hw,
         * we are free to update the registers based on the value
         * in the queue parameter.
         */
-       retval = rt2x00mac_conf_tx(hw, vif, queue_idx, params);
+       retval = rt2x00mac_conf_tx(hw, vif, link_id, queue_idx, params);
        if (retval)
                return retval;
 
index f66cc9083972d37497dd872413a250d3a8d3de59..cdfe08078c57536ead87a8c2bc6ce997ef2f1923 100644 (file)
@@ -1424,7 +1424,8 @@ static void rtl8187se_conf_ac_parm(struct ieee80211_hw *dev, u8 queue)
 }
 
 static int rtl8180_conf_tx(struct ieee80211_hw *dev,
-                           struct ieee80211_vif *vif, u16 queue,
+                           struct ieee80211_vif *vif,
+                           unsigned int link_id, u16 queue,
                            const struct ieee80211_tx_queue_params *params)
 {
        struct rtl8180_priv *priv = dev->priv;
index edc84f9dc9849b2f0817bb166fbdc615912a80c4..c0f6e9c6d03e8a126959ef4913c09f9bf9639fc7 100644 (file)
@@ -1338,7 +1338,8 @@ static void rtl8187_configure_filter(struct ieee80211_hw *dev,
 }
 
 static int rtl8187_conf_tx(struct ieee80211_hw *dev,
-                          struct ieee80211_vif *vif, u16 queue,
+                          struct ieee80211_vif *vif,
+                          unsigned int link_id, u16 queue,
                           const struct ieee80211_tx_queue_params *params)
 {
        struct rtl8187_priv *priv = dev->priv;
index 65c4cb1e030c1c0464cc4a0ac29f5c8843ebdb76..33a1d9143038f005cb9a132e6f726d71a7c5ac76 100644 (file)
@@ -5957,7 +5957,8 @@ exit:
 }
 
 static int rtl8xxxu_conf_tx(struct ieee80211_hw *hw,
-                           struct ieee80211_vif *vif, u16 queue,
+                           struct ieee80211_vif *vif,
+                           unsigned int link_id, u16 queue,
                            const struct ieee80211_tx_queue_params *param)
 {
        struct rtl8xxxu_priv *priv = hw->priv;
index 8537cc6d7a89edcce268cbd4ed292e9360deb510..519b2643f9f4e836c555b1dd4a7038cce4e23922 100644 (file)
@@ -982,7 +982,8 @@ static int _rtl_get_hal_qnum(u16 queue)
  *for rtl819x  BE = 0, BK = 1, VI = 2, VO = 3
  */
 static int rtl_op_conf_tx(struct ieee80211_hw *hw,
-                         struct ieee80211_vif *vif, u16 queue,
+                         struct ieee80211_vif *vif,
+                         unsigned int link_id, u16 queue,
                          const struct ieee80211_tx_queue_params *param)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
index ba60ca7ecdbfc8cb0e15ce4ad69d99c8d0875372..bb7291665d371aa7ba1a04ef5855b9468c9317fb 100644 (file)
@@ -443,7 +443,8 @@ static int rtw_ops_start_ap(struct ieee80211_hw *hw,
 }
 
 static int rtw_ops_conf_tx(struct ieee80211_hw *hw,
-                          struct ieee80211_vif *vif, u16 ac,
+                          struct ieee80211_vif *vif,
+                          unsigned int link_id, u16 ac,
                           const struct ieee80211_tx_queue_params *params)
 {
        struct rtw_dev *rtwdev = hw->priv;
index 20fb4c5500104f584380dc8d11909f0365d68da2..f40569c8575cec54d90ceaf791bfe3809b8014ce 100644 (file)
@@ -427,7 +427,8 @@ static int rtw89_ops_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
 }
 
 static int rtw89_ops_conf_tx(struct ieee80211_hw *hw,
-                            struct ieee80211_vif *vif, u16 ac,
+                            struct ieee80211_vif *vif,
+                            unsigned int link_id, u16 ac,
                             const struct ieee80211_tx_queue_params *params)
 {
        struct rtw89_dev *rtwdev = hw->priv;
index 1dff3d263382d9d0ed00f86f31b57ce73d35ba9a..bf39c4bda26f82aff8fd1addfca6690643b8b46a 100644 (file)
@@ -895,7 +895,8 @@ static void rsi_mac80211_conf_filter(struct ieee80211_hw *hw,
  * Return: 0 on success, negative error code on failure.
  */
 static int rsi_mac80211_conf_tx(struct ieee80211_hw *hw,
-                               struct ieee80211_vif *vif, u16 queue,
+                               struct ieee80211_vif *vif,
+                               unsigned int link_id, u16 queue,
                                const struct ieee80211_tx_queue_params *params)
 {
        struct rsi_hw *adapter = hw->priv;
index 47fd887ce6fec76d4c69134826d8f0a38dcda789..89402afe4fe6a65ed52f2deba137cd758005bc07 100644 (file)
@@ -216,7 +216,8 @@ int wfx_update_pm(struct wfx_vif *wvif)
 }
 
 int wfx_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-               u16 queue, const struct ieee80211_tx_queue_params *params)
+               unsigned int link_id, u16 queue,
+               const struct ieee80211_tx_queue_params *params)
 {
        struct wfx_dev *wdev = hw->priv;
        struct wfx_vif *wvif = (struct wfx_vif *)vif->drv_priv;
index 93ea992de1d75973fdbbec75f515e9846f26fa02..6558c5698cc81ff693a4b5cdf429fe838d55cac4 100644 (file)
@@ -36,7 +36,8 @@ void wfx_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 int wfx_join_ibss(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
 void wfx_leave_ibss(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
 int wfx_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-               u16 queue, const struct ieee80211_tx_queue_params *params);
+               unsigned int link_id, u16 queue,
+               const struct ieee80211_tx_queue_params *params);
 void wfx_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                          struct ieee80211_bss_conf *info, u64 changed);
 int wfx_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta);
index a3f6942df0c104f9f34e262dbf81c85670f340c3..26d3614519b1f3c1ed892d49902266ef8bab7f03 100644 (file)
@@ -606,7 +606,8 @@ void cw1200_configure_filter(struct ieee80211_hw *dev,
 }
 
 int cw1200_conf_tx(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
-                  u16 queue, const struct ieee80211_tx_queue_params *params)
+                  unsigned int link_id, u16 queue,
+                  const struct ieee80211_tx_queue_params *params)
 {
        struct cw1200_common *priv = dev->priv;
        int ret = 0;
index 05e3ab7ccef1749591fea288f7f4374062fb589d..a49f187c7049e85e92a5f101f9c72aa6c881fa16 100644 (file)
@@ -28,7 +28,8 @@ void cw1200_configure_filter(struct ieee80211_hw *dev,
                             unsigned int *total_flags,
                             u64 multicast);
 int cw1200_conf_tx(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
-                  u16 queue, const struct ieee80211_tx_queue_params *params);
+                  unsigned int link_id, u16 queue,
+                  const struct ieee80211_tx_queue_params *params);
 int cw1200_get_stats(struct ieee80211_hw *dev,
                     struct ieee80211_low_level_stats *stats);
 int cw1200_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd,
index d765589644205006a3037f3d364645e7534ac319..9144ef5538a8e249a42c2b5074f88c50a5285658 100644 (file)
@@ -1282,7 +1282,8 @@ static struct ieee80211_channel wl1251_channels[] = {
 };
 
 static int wl1251_op_conf_tx(struct ieee80211_hw *hw,
-                            struct ieee80211_vif *vif, u16 queue,
+                            struct ieee80211_vif *vif,
+                            unsigned int link_id, u16 queue,
                             const struct ieee80211_tx_queue_params *params)
 {
        enum wl1251_acx_ps_scheme ps_scheme;
index d1200080f165e5e99edf984b32f3bc1a7aa0e2f8..1edec9f3c0d80ea22519a44ca0197e2d86cfa901 100644 (file)
@@ -4864,7 +4864,8 @@ out:
 }
 
 static int wl1271_op_conf_tx(struct ieee80211_hw *hw,
-                            struct ieee80211_vif *vif, u16 queue,
+                            struct ieee80211_vif *vif,
+                            unsigned int link_id, u16 queue,
                             const struct ieee80211_tx_queue_params *params)
 {
        struct wl1271 *wl = hw->priv;
index fba06d7bc7ebe9bec0dced66ca3dd8ee0e4908b9..7cf8d58eb5f0eec483a2c3536e699029b201da63 100644 (file)
@@ -4174,7 +4174,8 @@ struct ieee80211_ops {
                               struct ieee80211_sta *sta,
                               struct station_info *sinfo);
        int (*conf_tx)(struct ieee80211_hw *hw,
-                      struct ieee80211_vif *vif, u16 ac,
+                      struct ieee80211_vif *vif,
+                      unsigned int link_id, u16 ac,
                       const struct ieee80211_tx_queue_params *params);
        u64 (*get_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
        void (*set_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
index aa3a1568c7fc5cc42797f05fbececfeb90fd34ea..fa3b6cc2cafaeb285b2a254dccbfe6f38e5c68c9 100644 (file)
@@ -2570,6 +2570,7 @@ static int ieee80211_set_txq_params(struct wiphy *wiphy,
 {
        struct ieee80211_local *local = wiphy_priv(wiphy);
        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+       struct ieee80211_link_data *link = &sdata->deflink;
        struct ieee80211_tx_queue_params p;
 
        if (!local->ops->conf_tx)
@@ -2592,15 +2593,15 @@ static int ieee80211_set_txq_params(struct wiphy *wiphy,
 
        ieee80211_regulatory_limit_wmm_params(sdata, &p, params->ac);
 
-       sdata->tx_conf[params->ac] = p;
-       if (drv_conf_tx(local, sdata, params->ac, &p)) {
+       link->tx_conf[params->ac] = p;
+       if (drv_conf_tx(local, link, params->ac, &p)) {
                wiphy_debug(local->hw.wiphy,
                            "failed to set TX queue parameters for AC %d\n",
                            params->ac);
                return -EINVAL;
        }
 
-       ieee80211_link_info_change_notify(sdata, &sdata->deflink,
+       ieee80211_link_info_change_notify(sdata, link,
                                          BSS_CHANGED_QOS);
 
        return 0;
index 48322e45e7ddb56f82a6c762fed757368cbdeb91..9b61dc7889c2577fb028d41aeebf7eb28b7a08ac 100644 (file)
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright 2015 Intel Deutschland GmbH
+ * Copyright (C) 2022 Intel Corporation
  */
 #include <net/mac80211.h>
 #include "ieee80211_i.h"
@@ -180,9 +181,10 @@ void drv_sta_rc_update(struct ieee80211_local *local,
 }
 
 int drv_conf_tx(struct ieee80211_local *local,
-               struct ieee80211_sub_if_data *sdata, u16 ac,
+               struct ieee80211_link_data *link, u16 ac,
                const struct ieee80211_tx_queue_params *params)
 {
+       struct ieee80211_sub_if_data *sdata = link->sdata;
        int ret = -EOPNOTSUPP;
 
        might_sleep();
@@ -201,10 +203,10 @@ int drv_conf_tx(struct ieee80211_local *local,
                return -EINVAL;
        }
 
-       trace_drv_conf_tx(local, sdata, ac, params);
+       trace_drv_conf_tx(local, sdata, link->link_id, ac, params);
        if (local->ops->conf_tx)
                ret = local->ops->conf_tx(&local->hw, &sdata->vif,
-                                         ac, params);
+                                         link->link_id, ac, params);
        trace_drv_return_int(local, ret);
        return ret;
 }
index ee3ac1a01bb01a0795fe0eecdcf5eb3c69a82339..eb16a354338c3879c00d2bdab6435ee98e55ec8b 100644 (file)
@@ -590,7 +590,7 @@ static inline void drv_sta_statistics(struct ieee80211_local *local,
 }
 
 int drv_conf_tx(struct ieee80211_local *local,
-               struct ieee80211_sub_if_data *sdata, u16 ac,
+               struct ieee80211_link_data *link, u16 ac,
                const struct ieee80211_tx_queue_params *params);
 
 u64 drv_get_tsf(struct ieee80211_local *local,
index 561abcf4def92618f70de810914a3318603cf65f..0a1d51c60530ef2a0d32fd1c984bd4b0a3df961f 100644 (file)
@@ -356,7 +356,7 @@ static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
        else
                sdata->flags &= ~IEEE80211_SDATA_OPERATING_GMODE;
 
-       ieee80211_set_wmm_default(sdata, true, false);
+       ieee80211_set_wmm_default(&sdata->deflink, true, false);
 
        sdata->vif.cfg.ibss_joined = true;
        sdata->vif.cfg.ibss_creator = creator;
index 05996df627eaf6efea6b95213c0421b4ef2b11ff..699dabaa9f0d0185c7e79a7e6ca9eb0baabcacbb 100644 (file)
@@ -969,6 +969,8 @@ struct ieee80211_link_data {
                struct ieee80211_link_data_ap ap;
        } u;
 
+       struct ieee80211_tx_queue_params tx_conf[IEEE80211_NUM_ACS];
+
        struct ieee80211_bss_conf *conf;
 };
 
@@ -1012,7 +1014,6 @@ struct ieee80211_sub_if_data {
        bool control_port_over_nl80211;
 
        atomic_t num_tx_queued;
-       struct ieee80211_tx_queue_params tx_conf[IEEE80211_NUM_ACS];
        struct mac80211_qos_map __rcu *qos_map;
 
        /* used to reconfigure hardware SM PS */
@@ -2101,7 +2102,7 @@ int ieee80211_frame_duration(enum nl80211_band band, size_t len,
 void ieee80211_regulatory_limit_wmm_params(struct ieee80211_sub_if_data *sdata,
                                           struct ieee80211_tx_queue_params *qparam,
                                           int ac);
-void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata,
+void ieee80211_set_wmm_default(struct ieee80211_link_data *link,
                               bool bss_notify, bool enable_qos);
 void ieee80211_xmit(struct ieee80211_sub_if_data *sdata,
                    struct sta_info *sta, struct sk_buff *skb);
index 312a812bec84d6a069c31e8a74afb739ea619eae..f29764936c99be4702367f2bf6e36d5ce9f92ad6 100644 (file)
@@ -1539,7 +1539,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
                 * doesn't start up with sane defaults.
                 * Enable QoS for anything but station interfaces.
                 */
-               ieee80211_set_wmm_default(sdata, true,
+               ieee80211_set_wmm_default(&sdata->deflink, true,
                        sdata->vif.type != NL80211_IFTYPE_STATION);
        }
 
index 5400b3e567fa59c0f555ea63037c8d8110181ae0..44f76a8fa80b5be8b5bc2e1221527d68269038d0 100644 (file)
@@ -2018,10 +2018,11 @@ __ieee80211_sta_handle_tspec_ac_params(struct ieee80211_sub_if_data *sdata)
                switch (tx_tspec->action) {
                case TX_TSPEC_ACTION_STOP_DOWNGRADE:
                        /* take the original parameters */
-                       if (drv_conf_tx(local, sdata, ac, &sdata->tx_conf[ac]))
-                               sdata_err(sdata,
-                                         "failed to set TX queue parameters for queue %d\n",
-                                         ac);
+                       if (drv_conf_tx(local, &sdata->deflink, ac,
+                                       &sdata->deflink.tx_conf[ac]))
+                               link_err(&sdata->deflink,
+                                        "failed to set TX queue parameters for queue %d\n",
+                                        ac);
                        tx_tspec->action = TX_TSPEC_ACTION_NONE;
                        tx_tspec->downgraded = false;
                        ret = true;
@@ -2047,11 +2048,11 @@ __ieee80211_sta_handle_tspec_ac_params(struct ieee80211_sub_if_data *sdata)
                         */
                        if (non_acm_ac >= IEEE80211_NUM_ACS)
                                non_acm_ac = IEEE80211_AC_BK;
-                       if (drv_conf_tx(local, sdata, ac,
-                                       &sdata->tx_conf[non_acm_ac]))
-                               sdata_err(sdata,
-                                         "failed to set TX queue parameters for queue %d\n",
-                                         ac);
+                       if (drv_conf_tx(local, &sdata->deflink, ac,
+                                       &sdata->deflink.tx_conf[non_acm_ac]))
+                               link_err(&sdata->deflink,
+                                        "failed to set TX queue parameters for queue %d\n",
+                                        ac);
                        tx_tspec->action = TX_TSPEC_ACTION_NONE;
                        ret = true;
                        schedule_delayed_work(&ifmgd->tx_tspec_wk,
@@ -2085,10 +2086,11 @@ static void ieee80211_sta_handle_tspec_ac_params_wk(struct work_struct *work)
 /* MLME */
 static bool
 ieee80211_sta_wmm_params(struct ieee80211_local *local,
-                        struct ieee80211_sub_if_data *sdata,
+                        struct ieee80211_link_data *link,
                         const u8 *wmm_param, size_t wmm_param_len,
                         const struct ieee80211_mu_edca_param_set *mu_edca)
 {
+       struct ieee80211_sub_if_data *sdata = link->sdata;
        struct ieee80211_tx_queue_params params[IEEE80211_NUM_ACS];
        struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
        size_t left;
@@ -2117,11 +2119,11 @@ ieee80211_sta_wmm_params(struct ieee80211_local *local,
         * the driver about it.
         */
        mu_edca_count = mu_edca ? mu_edca->mu_qos_info & 0x0f : -1;
-       if (count == sdata->deflink.u.mgd.wmm_last_param_set &&
-           mu_edca_count == sdata->deflink.u.mgd.mu_edca_last_param_set)
+       if (count == link->u.mgd.wmm_last_param_set &&
+           mu_edca_count == link->u.mgd.mu_edca_last_param_set)
                return false;
-       sdata->deflink.u.mgd.wmm_last_param_set = count;
-       sdata->deflink.u.mgd.mu_edca_last_param_set = mu_edca_count;
+       link->u.mgd.wmm_last_param_set = count;
+       link->u.mgd.mu_edca_last_param_set = mu_edca_count;
 
        pos = wmm_param + 8;
        left = wmm_param_len - 8;
@@ -2219,16 +2221,16 @@ ieee80211_sta_wmm_params(struct ieee80211_local *local,
                         params[ac].aifs, params[ac].cw_min, params[ac].cw_max,
                         params[ac].txop, params[ac].uapsd,
                         ifmgd->tx_tspec[ac].downgraded);
-               sdata->tx_conf[ac] = params[ac];
+               link->tx_conf[ac] = params[ac];
                if (!ifmgd->tx_tspec[ac].downgraded &&
-                   drv_conf_tx(local, sdata, ac, &params[ac]))
-                       sdata_err(sdata,
-                                 "failed to set TX queue parameters for AC %d\n",
-                                 ac);
+                   drv_conf_tx(local, link, ac, &params[ac]))
+                       link_err(link,
+                                "failed to set TX queue parameters for AC %d\n",
+                                ac);
        }
 
        /* enable WMM or activate new settings */
-       sdata->vif.bss_conf.qos = true;
+       link->conf->qos = true;
        return true;
 }
 
@@ -2508,7 +2510,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
        ieee80211_bss_info_change_notify(sdata, changed);
 
        /* disassociated - set to defaults now */
-       ieee80211_set_wmm_default(sdata, false, false);
+       ieee80211_set_wmm_default(&sdata->deflink, false, false);
 
        del_timer_sync(&sdata->u.mgd.conn_mon_timer);
        del_timer_sync(&sdata->u.mgd.bcn_mon_timer);
@@ -3766,12 +3768,13 @@ static bool ieee80211_assoc_success(struct ieee80211_sub_if_data *sdata,
        sdata->deflink.u.mgd.mu_edca_last_param_set = -1;
 
        if (ifmgd->flags & IEEE80211_STA_DISABLE_WMM) {
-               ieee80211_set_wmm_default(sdata, false, false);
-       } else if (!ieee80211_sta_wmm_params(local, sdata, elems->wmm_param,
+               ieee80211_set_wmm_default(&sdata->deflink, false, false);
+       } else if (!ieee80211_sta_wmm_params(local, &sdata->deflink,
+                                            elems->wmm_param,
                                             elems->wmm_param_len,
                                             elems->mu_edca_param_set)) {
                /* still enable QoS since we might have HT/VHT */
-               ieee80211_set_wmm_default(sdata, false, true);
+               ieee80211_set_wmm_default(&sdata->deflink, false, true);
                /* set the disable-WMM flag in this case to disable
                 * tracking WMM parameter changes in the beacon if
                 * the parameters weren't actually valid. Doing so
@@ -3938,7 +3941,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
                /* get uapsd queues configuration */
                uapsd_queues = 0;
                for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
-                       if (sdata->tx_conf[ac].uapsd)
+                       if (sdata->deflink.tx_conf[ac].uapsd)
                                uapsd_queues |= ieee80211_ac_to_qos_mask[ac];
 
                info.success = 1;
@@ -4363,7 +4366,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
                                         elems, true);
 
        if (!(ifmgd->flags & IEEE80211_STA_DISABLE_WMM) &&
-           ieee80211_sta_wmm_params(local, sdata, elems->wmm_param,
+           ieee80211_sta_wmm_params(local, &sdata->deflink, elems->wmm_param,
                                     elems->wmm_param_len,
                                     elems->mu_edca_param_set))
                changed |= BSS_CHANGED_QOS;
index 30f2b340017c06cbbc3c44166620b8d445a1359f..e7bdcdb488e233a6f84d5c761b8f6899c7d7dbc2 100644 (file)
@@ -293,7 +293,7 @@ static void ieee80211_tdls_add_wmm_param_ie(struct ieee80211_sub_if_data *sdata,
         * doesn't support it, as mandated by 802.11-2012 section 10.22.4
         */
        for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-               txq = &sdata->tx_conf[ieee80211_ac_from_wmm(i)];
+               txq = &sdata->deflink.tx_conf[ieee80211_ac_from_wmm(i)];
                wmm->ac[i].aci_aifsn = ieee80211_wmm_aci_aifsn(txq->aifs,
                                                               txq->acm, i);
                wmm->ac[i].cw = ieee80211_wmm_ecw(txq->cw_min, txq->cw_max);
index 751f08b47d0c0bf1dda145d7acb32ed7b7ccbc58..b6f12ac91849413fe2f66f5133adf0dd3feab606 100644 (file)
@@ -1003,13 +1003,15 @@ DEFINE_EVENT(sta_event, drv_sta_rate_tbl_update,
 TRACE_EVENT(drv_conf_tx,
        TP_PROTO(struct ieee80211_local *local,
                 struct ieee80211_sub_if_data *sdata,
+                unsigned int link_id,
                 u16 ac, const struct ieee80211_tx_queue_params *params),
 
-       TP_ARGS(local, sdata, ac, params),
+       TP_ARGS(local, sdata, link_id, ac, params),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
                VIF_ENTRY
+               __field(unsigned int, link_id)
                __field(u16, ac)
                __field(u16, txop)
                __field(u16, cw_min)
@@ -1021,6 +1023,7 @@ TRACE_EVENT(drv_conf_tx,
        TP_fast_assign(
                LOCAL_ASSIGN;
                VIF_ASSIGN;
+               __entry->link_id = link_id;
                __entry->ac = ac;
                __entry->txop = params->txop;
                __entry->cw_max = params->cw_max;
@@ -1030,8 +1033,8 @@ TRACE_EVENT(drv_conf_tx,
        ),
 
        TP_printk(
-               LOCAL_PR_FMT  VIF_PR_FMT  " AC:%d",
-               LOCAL_PR_ARG, VIF_PR_ARG, __entry->ac
+               LOCAL_PR_FMT  VIF_PR_FMT  " link_id: %d, AC:%d",
+               LOCAL_PR_ARG, VIF_PR_ARG, __entry->link_id, __entry->ac
        )
 );
 
index f065140875117e97d6d07673b9daff9648a17996..2b2c8e1472f3c5600bde4207e5845031a3afea94 100644 (file)
@@ -1596,9 +1596,10 @@ void ieee80211_regulatory_limit_wmm_params(struct ieee80211_sub_if_data *sdata,
        rcu_read_unlock();
 }
 
-void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata,
+void ieee80211_set_wmm_default(struct ieee80211_link_data *link,
                               bool bss_notify, bool enable_qos)
 {
+       struct ieee80211_sub_if_data *sdata = link->sdata;
        struct ieee80211_local *local = sdata->local;
        struct ieee80211_tx_queue_params qparam;
        struct ieee80211_chanctx_conf *chanctx_conf;
@@ -1616,7 +1617,7 @@ void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata,
        memset(&qparam, 0, sizeof(qparam));
 
        rcu_read_lock();
-       chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf);
+       chanctx_conf = rcu_dereference(link->conf->chanctx_conf);
        use_11b = (chanctx_conf &&
                   chanctx_conf->def.chan->band == NL80211_BAND_2GHZ) &&
                 !(sdata->flags & IEEE80211_SDATA_OPERATING_GMODE);
@@ -1693,17 +1694,16 @@ void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata,
 
                qparam.uapsd = false;
 
-               sdata->tx_conf[ac] = qparam;
-               drv_conf_tx(local, sdata, ac, &qparam);
+               link->tx_conf[ac] = qparam;
+               drv_conf_tx(local, link, ac, &qparam);
        }
 
        if (sdata->vif.type != NL80211_IFTYPE_MONITOR &&
            sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE &&
            sdata->vif.type != NL80211_IFTYPE_NAN) {
-               sdata->vif.bss_conf.qos = enable_qos;
+               link->conf->qos = enable_qos;
                if (bss_notify)
-                       ieee80211_link_info_change_notify(sdata,
-                                                         &sdata->deflink,
+                       ieee80211_link_info_change_notify(sdata, link,
                                                          BSS_CHANGED_QOS);
        }
 }
@@ -2520,8 +2520,8 @@ int ieee80211_reconfig(struct ieee80211_local *local)
                        fallthrough;
                case NL80211_IFTYPE_AP: /* AP stations are handled later */
                        for (i = 0; i < IEEE80211_NUM_ACS; i++)
-                               drv_conf_tx(local, sdata, i,
-                                           &sdata->tx_conf[i]);
+                               drv_conf_tx(local, &sdata->deflink, i,
+                                           &sdata->deflink.tx_conf[i]);
                        break;
                }