2024-05-10 14:08:33

by Miri Korenblit

[permalink] [raw]
Subject: [PATCH 04/14] iwlwifi: mvm: allow UAPSD when in SCM

From: Avraham Stern <[email protected]>

Allow UAPSD when P2P and BSS interfaces share the same channel.

Signed-off-by: Avraham Stern <[email protected]>
Reviewed-by: Coelho, Luciano <[email protected]>
Signed-off-by: Miri Korenblit <[email protected]>
---
drivers/net/wireless/intel/iwlwifi/mvm/power.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/power.c b/drivers/net/wireless/intel/iwlwifi/mvm/power.c
index 72f4480ae7f5..cc7176b0be4f 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/power.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/power.c
@@ -212,7 +212,7 @@ static void iwl_mvm_power_configure_uapsd(struct iwl_mvm *mvm,
}

struct iwl_allow_uapsd_iface_iterator_data {
- struct ieee80211_vif *exclude_vif;
+ struct ieee80211_vif *current_vif;
bool allow_uapsd;
};

@@ -220,9 +220,12 @@ static void iwl_mvm_allow_uapsd_iterator(void *_data, u8 *mac,
struct ieee80211_vif *vif)
{
struct iwl_allow_uapsd_iface_iterator_data *data = _data;
+ struct iwl_mvm_vif *other_mvmvif = iwl_mvm_vif_from_mac80211(vif);
+ struct iwl_mvm_vif *curr_mvmvif =
+ iwl_mvm_vif_from_mac80211(data->current_vif);

/* exclude the given vif */
- if (vif == data->exclude_vif)
+ if (vif == data->current_vif)
return;

switch (vif->type) {
@@ -232,7 +235,12 @@ static void iwl_mvm_allow_uapsd_iterator(void *_data, u8 *mac,
data->allow_uapsd = false;
break;
case NL80211_IFTYPE_STATION:
- if (vif->cfg.assoc)
+ /* allow UAPSD if P2P interface and BSS station interface share
+ * the same channel.
+ */
+ if (vif->cfg.assoc && other_mvmvif->deflink.phy_ctxt &&
+ curr_mvmvif->deflink.phy_ctxt &&
+ other_mvmvif->deflink.phy_ctxt->id != curr_mvmvif->deflink.phy_ctxt->id)
data->allow_uapsd = false;
break;

@@ -246,7 +254,7 @@ static bool iwl_mvm_power_allow_uapsd(struct iwl_mvm *mvm,
{
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
struct iwl_allow_uapsd_iface_iterator_data data = {
- .exclude_vif = vif,
+ .current_vif = vif,
.allow_uapsd = true,
};

--
2.34.1