wifi: mac80211: mlme: refactor QoS settings code
authorJohannes Berg <johannes.berg@intel.com>
Fri, 2 Sep 2022 14:12:46 +0000 (16:12 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Sat, 3 Sep 2022 15:04:15 +0000 (17:04 +0200)
Refactor the code to apply QoS settings to the driver so
we can call it on link switch.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/ieee80211_i.h
net/mac80211/mlme.c

index b41c49338cd37ddeef22796b093fea860c1d0fbc..977aea4467e04c5c45c8cc280a8713bc35e52eb9 100644 (file)
@@ -1811,6 +1811,7 @@ void ieee80211_sta_connection_lost(struct ieee80211_sub_if_data *sdata,
                                   u8 reason, bool tx);
 void ieee80211_mgd_setup_link(struct ieee80211_link_data *link);
 void ieee80211_mgd_stop_link(struct ieee80211_link_data *link);
+void ieee80211_mgd_set_link_qos_params(struct ieee80211_link_data *link);
 
 /* IBSS code */
 void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local);
index 20d123a1385ecae603adc21fc1e63044d2047b68..84a3e08a7e848efbb1ecfd362fb3a74929c02ab4 100644 (file)
@@ -2445,6 +2445,29 @@ static void ieee80211_sta_handle_tspec_ac_params_wk(struct work_struct *work)
        ieee80211_sta_handle_tspec_ac_params(sdata);
 }
 
+void ieee80211_mgd_set_link_qos_params(struct ieee80211_link_data *link)
+{
+       struct ieee80211_sub_if_data *sdata = link->sdata;
+       struct ieee80211_local *local = sdata->local;
+       struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
+       struct ieee80211_tx_queue_params *params = link->tx_conf;
+       u8 ac;
+
+       for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
+               mlme_dbg(sdata,
+                        "WMM AC=%d acm=%d aifs=%d cWmin=%d cWmax=%d txop=%d uapsd=%d, downgraded=%d\n",
+                        ac, params[ac].acm,
+                        params[ac].aifs, params[ac].cw_min, params[ac].cw_max,
+                        params[ac].txop, params[ac].uapsd,
+                        ifmgd->tx_tspec[ac].downgraded);
+               if (!ifmgd->tx_tspec[ac].downgraded &&
+                   drv_conf_tx(local, link, ac, &params[ac]))
+                       link_err(link,
+                                "failed to set TX queue parameters for AC %d\n",
+                                ac);
+       }
+}
+
 /* MLME */
 static bool
 ieee80211_sta_wmm_params(struct ieee80211_local *local,
@@ -2576,20 +2599,10 @@ ieee80211_sta_wmm_params(struct ieee80211_local *local,
                }
        }
 
-       for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
-               mlme_dbg(sdata,
-                        "WMM AC=%d acm=%d aifs=%d cWmin=%d cWmax=%d txop=%d uapsd=%d, downgraded=%d\n",
-                        ac, params[ac].acm,
-                        params[ac].aifs, params[ac].cw_min, params[ac].cw_max,
-                        params[ac].txop, params[ac].uapsd,
-                        ifmgd->tx_tspec[ac].downgraded);
+       for (ac = 0; ac < IEEE80211_NUM_ACS; ac++)
                link->tx_conf[ac] = params[ac];
-               if (!ifmgd->tx_tspec[ac].downgraded &&
-                   drv_conf_tx(local, link, ac, &params[ac]))
-                       link_err(link,
-                                "failed to set TX queue parameters for AC %d\n",
-                                ac);
-       }
+
+       ieee80211_mgd_set_link_qos_params(link);
 
        /* enable WMM or activate new settings */
        link->conf->qos = true;