Loading drivers/net/wireless/intel/iwlwifi/dvm/lib.c +2 −2 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /****************************************************************************** * * Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2008 - 2014, 2022 Intel Corporation. All rights reserved. *****************************************************************************/ #include <linux/etherdevice.h> #include <linux/kernel.h> Loading Loading @@ -441,7 +441,7 @@ static void iwlagn_bt_traffic_change_work(struct work_struct *work) priv->current_ht_config.smps = smps_request; for_each_context(priv, ctx) { if (ctx->vif && ctx->vif->type == NL80211_IFTYPE_STATION) ieee80211_request_smps(ctx->vif, smps_request); ieee80211_request_smps(ctx->vif, 0, smps_request); } } Loading drivers/net/wireless/intel/iwlwifi/mvm/utils.c +1 −1 Original line number Diff line number Diff line Loading @@ -304,7 +304,7 @@ void iwl_mvm_update_smps(struct iwl_mvm *mvm, struct ieee80211_vif *vif, smps_mode = IEEE80211_SMPS_DYNAMIC; } ieee80211_request_smps(vif, smps_mode); ieee80211_request_smps(vif, 0, smps_mode); } static bool iwl_wait_stats_complete(struct iwl_notif_wait_data *notif_wait, Loading drivers/net/wireless/realtek/rtw88/main.c +2 −2 Original line number Diff line number Diff line Loading @@ -1600,9 +1600,9 @@ static void rtw_vif_smps_iter(void *data, u8 *mac, return; if (rtwdev->hal.txrx_1ss) ieee80211_request_smps(vif, IEEE80211_SMPS_STATIC); ieee80211_request_smps(vif, 0, IEEE80211_SMPS_STATIC); else ieee80211_request_smps(vif, IEEE80211_SMPS_OFF); ieee80211_request_smps(vif, 0, IEEE80211_SMPS_OFF); } void rtw_set_txrx_1ss(struct rtw_dev *rtwdev, bool txrx_1ss) Loading include/net/mac80211.h +2 −1 Original line number Diff line number Diff line Loading @@ -6210,13 +6210,14 @@ void ieee80211_channel_switch_disconnect(struct ieee80211_vif *vif, /** * ieee80211_request_smps - request SM PS transition * @vif: &struct ieee80211_vif pointer from the add_interface callback. * @link_id: link ID for MLO, or 0 * @smps_mode: new SM PS mode * * This allows the driver to request an SM PS transition in managed * mode. This is useful when the driver has more information than * the stack about possible interference, for example by bluetooth. */ void ieee80211_request_smps(struct ieee80211_vif *vif, void ieee80211_request_smps(struct ieee80211_vif *vif, unsigned int link_id, enum ieee80211_smps_mode smps_mode); /** Loading net/mac80211/cfg.c +13 −6 Original line number Diff line number Diff line Loading @@ -2913,6 +2913,7 @@ static int ieee80211_testmode_dump(struct wiphy *wiphy, #endif int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, unsigned int link_id, enum ieee80211_smps_mode smps_mode) { const u8 *ap; Loading @@ -2926,8 +2927,8 @@ int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION)) return -EINVAL; old_req = sdata->deflink.u.mgd.req_smps; sdata->deflink.u.mgd.req_smps = smps_mode; old_req = sdata->link[link_id]->u.mgd.req_smps; sdata->link[link_id]->u.mgd.req_smps = smps_mode; if (old_req == smps_mode && smps_mode != IEEE80211_SMPS_AUTOMATIC) Loading @@ -2939,10 +2940,10 @@ int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, * the new value until we associate. */ if (!sdata->u.mgd.associated || sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT) sdata->vif.link_conf[link_id]->chandef.width == NL80211_CHAN_WIDTH_20_NOHT) return 0; ap = sdata->deflink.u.mgd.bssid; ap = sdata->link[link_id]->u.mgd.bssid; rcu_read_lock(); list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) { Loading @@ -2966,7 +2967,7 @@ int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, err = ieee80211_send_smps_action(sdata, smps_mode, ap, ap); if (err) sdata->deflink.u.mgd.req_smps = old_req; sdata->link[link_id]->u.mgd.req_smps = old_req; else if (smps_mode != IEEE80211_SMPS_OFF && tdls_peer_found) ieee80211_teardown_tdls_peers(sdata); Loading @@ -2978,6 +2979,7 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev, { struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); unsigned int link_id; if (sdata->vif.type != NL80211_IFTYPE_STATION) return -EOPNOTSUPP; Loading @@ -2994,7 +2996,12 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev, /* no change, but if automatic follow powersave */ sdata_lock(sdata); __ieee80211_request_smps_mgd(sdata, sdata->deflink.u.mgd.req_smps); for (link_id = 0; link_id < ARRAY_SIZE(sdata->link); link_id++) { if (!sdata->link[link_id]) continue; __ieee80211_request_smps_mgd(sdata, link_id, sdata->link[link_id]->u.mgd.req_smps); } sdata_unlock(sdata); if (ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS)) Loading Loading
drivers/net/wireless/intel/iwlwifi/dvm/lib.c +2 −2 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /****************************************************************************** * * Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2008 - 2014, 2022 Intel Corporation. All rights reserved. *****************************************************************************/ #include <linux/etherdevice.h> #include <linux/kernel.h> Loading Loading @@ -441,7 +441,7 @@ static void iwlagn_bt_traffic_change_work(struct work_struct *work) priv->current_ht_config.smps = smps_request; for_each_context(priv, ctx) { if (ctx->vif && ctx->vif->type == NL80211_IFTYPE_STATION) ieee80211_request_smps(ctx->vif, smps_request); ieee80211_request_smps(ctx->vif, 0, smps_request); } } Loading
drivers/net/wireless/intel/iwlwifi/mvm/utils.c +1 −1 Original line number Diff line number Diff line Loading @@ -304,7 +304,7 @@ void iwl_mvm_update_smps(struct iwl_mvm *mvm, struct ieee80211_vif *vif, smps_mode = IEEE80211_SMPS_DYNAMIC; } ieee80211_request_smps(vif, smps_mode); ieee80211_request_smps(vif, 0, smps_mode); } static bool iwl_wait_stats_complete(struct iwl_notif_wait_data *notif_wait, Loading
drivers/net/wireless/realtek/rtw88/main.c +2 −2 Original line number Diff line number Diff line Loading @@ -1600,9 +1600,9 @@ static void rtw_vif_smps_iter(void *data, u8 *mac, return; if (rtwdev->hal.txrx_1ss) ieee80211_request_smps(vif, IEEE80211_SMPS_STATIC); ieee80211_request_smps(vif, 0, IEEE80211_SMPS_STATIC); else ieee80211_request_smps(vif, IEEE80211_SMPS_OFF); ieee80211_request_smps(vif, 0, IEEE80211_SMPS_OFF); } void rtw_set_txrx_1ss(struct rtw_dev *rtwdev, bool txrx_1ss) Loading
include/net/mac80211.h +2 −1 Original line number Diff line number Diff line Loading @@ -6210,13 +6210,14 @@ void ieee80211_channel_switch_disconnect(struct ieee80211_vif *vif, /** * ieee80211_request_smps - request SM PS transition * @vif: &struct ieee80211_vif pointer from the add_interface callback. * @link_id: link ID for MLO, or 0 * @smps_mode: new SM PS mode * * This allows the driver to request an SM PS transition in managed * mode. This is useful when the driver has more information than * the stack about possible interference, for example by bluetooth. */ void ieee80211_request_smps(struct ieee80211_vif *vif, void ieee80211_request_smps(struct ieee80211_vif *vif, unsigned int link_id, enum ieee80211_smps_mode smps_mode); /** Loading
net/mac80211/cfg.c +13 −6 Original line number Diff line number Diff line Loading @@ -2913,6 +2913,7 @@ static int ieee80211_testmode_dump(struct wiphy *wiphy, #endif int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, unsigned int link_id, enum ieee80211_smps_mode smps_mode) { const u8 *ap; Loading @@ -2926,8 +2927,8 @@ int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION)) return -EINVAL; old_req = sdata->deflink.u.mgd.req_smps; sdata->deflink.u.mgd.req_smps = smps_mode; old_req = sdata->link[link_id]->u.mgd.req_smps; sdata->link[link_id]->u.mgd.req_smps = smps_mode; if (old_req == smps_mode && smps_mode != IEEE80211_SMPS_AUTOMATIC) Loading @@ -2939,10 +2940,10 @@ int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, * the new value until we associate. */ if (!sdata->u.mgd.associated || sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT) sdata->vif.link_conf[link_id]->chandef.width == NL80211_CHAN_WIDTH_20_NOHT) return 0; ap = sdata->deflink.u.mgd.bssid; ap = sdata->link[link_id]->u.mgd.bssid; rcu_read_lock(); list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) { Loading @@ -2966,7 +2967,7 @@ int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, err = ieee80211_send_smps_action(sdata, smps_mode, ap, ap); if (err) sdata->deflink.u.mgd.req_smps = old_req; sdata->link[link_id]->u.mgd.req_smps = old_req; else if (smps_mode != IEEE80211_SMPS_OFF && tdls_peer_found) ieee80211_teardown_tdls_peers(sdata); Loading @@ -2978,6 +2979,7 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev, { struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); unsigned int link_id; if (sdata->vif.type != NL80211_IFTYPE_STATION) return -EOPNOTSUPP; Loading @@ -2994,7 +2996,12 @@ static int ieee80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev, /* no change, but if automatic follow powersave */ sdata_lock(sdata); __ieee80211_request_smps_mgd(sdata, sdata->deflink.u.mgd.req_smps); for (link_id = 0; link_id < ARRAY_SIZE(sdata->link); link_id++) { if (!sdata->link[link_id]) continue; __ieee80211_request_smps_mgd(sdata, link_id, sdata->link[link_id]->u.mgd.req_smps); } sdata_unlock(sdata); if (ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS)) Loading