]> Git Repo - J-linux.git/commitdiff
wifi: iwlwifi: implement can_activate_links callback
authorMiri Korenblit <[email protected]>
Tue, 23 Jan 2024 18:08:22 +0000 (20:08 +0200)
committerJohannes Berg <[email protected]>
Fri, 26 Jan 2024 08:48:54 +0000 (09:48 +0100)
This callback checks if a given bitmap of active_links
will be supported by the driver or not.

Signed-off-by: Miri Korenblit <[email protected]>
Reviewed-by: Gregory Greenman <[email protected]>
Reviewed-by: Johannes Berg <[email protected]>
Link: https://msgid.link/20240123200528.a26fd48bfe3d.I03ae6b4c7fd24e8701660a68cec9403dc3469a0e@changeid
Signed-off-by: Johannes Berg <[email protected]>
drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c

index 61170173f917a00707fc63956b8d7f252737c809..449229ced3bb188010ff2a83f241ab40e17c7514 100644 (file)
@@ -253,9 +253,6 @@ __iwl_mvm_mld_assign_vif_chanctx(struct iwl_mvm *mvm,
        if (!rcu_access_pointer(link_conf->chanctx_conf))
                n_active++;
 
-       if (n_active > iwl_mvm_max_active_links(mvm, vif))
-               return -EOPNOTSUPP;
-
        if (WARN_ON_ONCE(!mvmvif->link[link_id]))
                return -EINVAL;
 
@@ -1121,17 +1118,12 @@ iwl_mvm_mld_change_vif_links(struct ieee80211_hw *hw,
                             struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
 {
        struct iwl_mvm_vif_link_info *new_link[IEEE80211_MLD_MAX_NUM_LINKS] = {};
-       unsigned int n_active = iwl_mvm_mld_count_active_links(vif);
        struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
        struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
        u16 removed = old_links & ~new_links;
        u16 added = new_links & ~old_links;
        int err, i;
 
-       if (hweight16(new_links) > 1 &&
-           n_active > iwl_mvm_max_active_links(mvm, vif))
-               return -EOPNOTSUPP;
-
        for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
                int r;
 
@@ -1223,6 +1215,15 @@ iwl_mvm_mld_change_sta_links(struct ieee80211_hw *hw,
        return ret;
 }
 
+static bool iwl_mvm_mld_can_activate_links(struct ieee80211_hw *hw,
+                                          struct ieee80211_vif *vif,
+                                          u16 desired_links)
+{
+       struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
+
+       return hweight16(desired_links) <= iwl_mvm_max_active_links(mvm, vif);
+}
+
 const struct ieee80211_ops iwl_mvm_mld_hw_ops = {
        .tx = iwl_mvm_mac_tx,
        .wake_tx_queue = iwl_mvm_mac_wake_tx_queue,
@@ -1317,4 +1318,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,
 };
This page took 0.068961 seconds and 4 git commands to generate.