mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 13:44:15 +08:00
wifi: mac80211: change QoS settings API to take link into account
Take the link into account in the QoS settings (EDCA parameters) APIs. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
8c7c6b5819
commit
b3e2130bf5
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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",
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
/*
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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, ¶ms[ac]))
|
||||
sdata_err(sdata,
|
||||
"failed to set TX queue parameters for AC %d\n",
|
||||
ac);
|
||||
drv_conf_tx(local, link, ac, ¶ms[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;
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user