Skip to content

Commit

Permalink
wifi: mac80211: Rename and update IEEE80211_VIF_DISABLE_SMPS_OVERRIDE
Browse files Browse the repository at this point in the history
EMLSR operation and SMPS operation cannot coexist. Thus, when EMLSR is
enabled, all SMPS signaling towards the AP should be stopped (it is
expected that the AP will consider SMPS to be off).

Rename IEEE80211_VIF_DISABLE_SMPS_OVERRIDE to IEEE80211_VIF_EML_ACTIVE
and use the flag as an indication from the driver that EMLSR is enabled.
When EMLSR is enabled SMPS flows towards the AP MLD should be stopped.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230928172905.fb2c2f9a0645.If6df5357568abd623a081f0f33b07e63fb8bba99@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
ilanpeer2 authored and jmberg-intel committed Oct 23, 2023
1 parent c942398 commit 00f823b
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 7 deletions.
6 changes: 3 additions & 3 deletions drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,8 @@ static int iwl_mvm_esr_mode_active(struct iwl_mvm *mvm,

mvmvif->esr_active = true;

/* Disable SMPS overrideing by user */
vif->driver_flags |= IEEE80211_VIF_DISABLE_SMPS_OVERRIDE;
/* Indicate to mac80211 that EML is enabled */
vif->driver_flags |= IEEE80211_VIF_EML_ACTIVE;

iwl_mvm_update_smps_on_active_links(mvm, vif, IWL_MVM_SMPS_REQ_FW,
IEEE80211_SMPS_OFF);
Expand Down Expand Up @@ -399,7 +399,7 @@ static int iwl_mvm_esr_mode_inactive(struct iwl_mvm *mvm,

mvmvif->esr_active = false;

vif->driver_flags &= ~IEEE80211_VIF_DISABLE_SMPS_OVERRIDE;
vif->driver_flags &= ~IEEE80211_VIF_EML_ACTIVE;

iwl_mvm_update_smps_on_active_links(mvm, vif, IWL_MVM_SMPS_REQ_FW,
IEEE80211_SMPS_AUTOMATIC);
Expand Down
6 changes: 3 additions & 3 deletions include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -1767,15 +1767,15 @@ struct ieee80211_channel_switch {
* @IEEE80211_VIF_GET_NOA_UPDATE: request to handle NOA attributes
* and send P2P_PS notification to the driver if NOA changed, even
* this is not pure P2P vif.
* @IEEE80211_VIF_DISABLE_SMPS_OVERRIDE: disable user configuration of
* SMPS mode via debugfs.
* @IEEE80211_VIF_EML_ACTIVE: The driver indicates that EML operation is
* enabled for the interface.
*/
enum ieee80211_vif_flags {
IEEE80211_VIF_BEACON_FILTER = BIT(0),
IEEE80211_VIF_SUPPORTS_CQM_RSSI = BIT(1),
IEEE80211_VIF_SUPPORTS_UAPSD = BIT(2),
IEEE80211_VIF_GET_NOA_UPDATE = BIT(3),
IEEE80211_VIF_DISABLE_SMPS_OVERRIDE = BIT(4),
IEEE80211_VIF_EML_ACTIVE = BIT(4),
};


Expand Down
6 changes: 6 additions & 0 deletions net/mac80211/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -3158,6 +3158,12 @@ int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata,
old_req = link->u.mgd.req_smps;
link->u.mgd.req_smps = smps_mode;

/* The driver indicated that EML is enabled for the interface, which
* implies that SMPS flows towards the AP should be stopped.
*/
if (sdata->vif.driver_flags & IEEE80211_VIF_EML_ACTIVE)
return 0;

if (old_req == smps_mode &&
smps_mode != IEEE80211_SMPS_AUTOMATIC)
return 0;
Expand Down
5 changes: 4 additions & 1 deletion net/mac80211/debugfs_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,10 @@ static int ieee80211_set_smps(struct ieee80211_link_data *link,
struct ieee80211_sub_if_data *sdata = link->sdata;
struct ieee80211_local *local = sdata->local;

if (sdata->vif.driver_flags & IEEE80211_VIF_DISABLE_SMPS_OVERRIDE)
/* The driver indicated that EML is enabled for the interface, thus do
* not allow to override the SMPS state.
*/
if (sdata->vif.driver_flags & IEEE80211_VIF_EML_ACTIVE)
return -EOPNOTSUPP;

if (!(local->hw.wiphy->features & NL80211_FEATURE_STATIC_SMPS) &&
Expand Down

0 comments on commit 00f823b

Please sign in to comment.