]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: iwlwifi: mvm: add support for TID to link mapping neg request
authorAyala Beker <ayala.beker@intel.com>
Mon, 29 Jan 2024 19:21:50 +0000 (21:21 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 2 Feb 2024 13:04:42 +0000 (14:04 +0100)
Add support for handling TID to link mapping negotiation
request and decide whether to accept it or not.
Accept the request if all TIDs are mapped to the same link set,
otherwise reject it.

Signed-off-by: Ayala Beker <ayala.beker@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Reviewed-by: Gregory Greenman <gregory.greenman@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240129211905.aab9819c378d.Icf6b79a362763e2e8b85959471f303b586617242@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c

index 40b8f5a5ccf1fcdaba4b49514375d15e9f05d793..fa8d14421999ae63490ec9fa77452542609ed703 100644 (file)
@@ -263,6 +263,9 @@ static const u8 tm_if_types_ext_capa_sta[] = {
                                        __bf_shf(IEEE80211_EML_CAP_EMLSR_PADDING_DELAY) | \
                                 IEEE80211_EML_CAP_EMLSR_TRANSITION_DELAY_64US << \
                                        __bf_shf(IEEE80211_EML_CAP_EMLSR_TRANSITION_DELAY))
+#define IWL_MVM_MLD_CAPA_OPS FIELD_PREP_CONST( \
+                       IEEE80211_MLD_CAP_OP_TID_TO_LINK_MAP_NEG_SUPP, \
+                       IEEE80211_MLD_CAP_OP_TID_TO_LINK_MAP_NEG_SUPP_SAME)
 
 static const struct wiphy_iftype_ext_capab add_iftypes_ext_capa[] = {
        {
@@ -272,6 +275,7 @@ static const struct wiphy_iftype_ext_capab add_iftypes_ext_capa[] = {
                .extended_capabilities_len = sizeof(he_if_types_ext_capa_sta),
                /* relevant only if EHT is supported */
                .eml_capabilities = IWL_MVM_EMLSR_CAPA,
+               .mld_capa_and_ops = IWL_MVM_MLD_CAPA_OPS,
        },
        {
                .iftype = NL80211_IFTYPE_STATION,
@@ -280,6 +284,7 @@ static const struct wiphy_iftype_ext_capab add_iftypes_ext_capa[] = {
                .extended_capabilities_len = sizeof(tm_if_types_ext_capa_sta),
                /* relevant only if EHT is supported */
                .eml_capabilities = IWL_MVM_EMLSR_CAPA,
+               .mld_capa_and_ops = IWL_MVM_MLD_CAPA_OPS,
        },
 };
 
index 2b879eeecc8ca6fab0600c3e2ea74db24ec2e3f1..5bac39b75e6c1c2813e7f3fb255b07447672bc04 100644 (file)
@@ -1329,6 +1329,24 @@ unlock:
        return ret;
 }
 
+static enum ieee80211_neg_ttlm_res
+iwl_mvm_mld_can_neg_ttlm(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+                        struct ieee80211_neg_ttlm *neg_ttlm)
+{
+       u16 map;
+       u8 i;
+
+       /* Verify all TIDs are mapped to the same links set */
+       map = neg_ttlm->downlink[0];
+       for (i = 0; i < IEEE80211_TTLM_NUM_TIDS; i++) {
+               if (neg_ttlm->downlink[i] != neg_ttlm->uplink[i] ||
+                   neg_ttlm->uplink[i] != map)
+                       return NEG_TTLM_RES_REJECT;
+       }
+
+       return NEG_TTLM_RES_ACCEPT;
+}
+
 const struct ieee80211_ops iwl_mvm_mld_hw_ops = {
        .tx = iwl_mvm_mac_tx,
        .wake_tx_queue = iwl_mvm_mac_wake_tx_queue,
@@ -1424,4 +1442,5 @@ const struct ieee80211_ops iwl_mvm_mld_hw_ops = {
        .change_vif_links = iwl_mvm_mld_change_vif_links,
        .change_sta_links = iwl_mvm_mld_change_sta_links,
        .can_activate_links = iwl_mvm_mld_can_activate_links,
+       .can_neg_ttlm = iwl_mvm_mld_can_neg_ttlm,
 };