]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: iwlwifi: mvm: cleanup some more MLO code
authorNidhish A N <nidhish.a.n@intel.com>
Thu, 19 Mar 2026 09:09:17 +0000 (11:09 +0200)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 25 Mar 2026 09:31:55 +0000 (11:31 +0200)
iwlmld is now the op mode that is used  for EHT devices,
so iwlmvm code can never run in MLO.
Clean up some more MLO code.

Signed-off-by: Nidhish A N <nidhish.a.n@intel.com>
Reviewed-by: Pagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20260319110722.8efcec472e91.Icaf4f4d6b9008e12310f408cfef7f35643f27ca5@changeid
drivers/net/wireless/intel/iwlwifi/mvm/mld-key.c
drivers/net/wireless/intel/iwlwifi/mvm/mld-mac80211.c
drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
drivers/net/wireless/intel/iwlwifi/mvm/sta.h

index 9bb253dcf4a76063bcc242ed24bab127cbf838f3..4869a5fa8abca39796d12b62dc789ae5a7dbeef2 100644 (file)
@@ -121,52 +121,6 @@ struct iwl_mvm_sta_key_update_data {
        int err;
 };
 
-static void iwl_mvm_mld_update_sta_key(struct ieee80211_hw *hw,
-                                      struct ieee80211_vif *vif,
-                                      struct ieee80211_sta *sta,
-                                      struct ieee80211_key_conf *key,
-                                      void *_data)
-{
-       u32 cmd_id = WIDE_ID(DATA_PATH_GROUP, SEC_KEY_CMD);
-       struct iwl_mvm_sta_key_update_data *data = _data;
-       struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
-       struct iwl_sec_key_cmd cmd = {
-               .action = cpu_to_le32(FW_CTXT_ACTION_MODIFY),
-               .u.modify.old_sta_mask = cpu_to_le32(data->old_sta_mask),
-               .u.modify.new_sta_mask = cpu_to_le32(data->new_sta_mask),
-               .u.modify.key_id = cpu_to_le32(key->keyidx),
-               .u.modify.key_flags =
-                       cpu_to_le32(iwl_mvm_get_sec_flags(mvm, vif, sta, key)),
-       };
-       int err;
-
-       /* only need to do this for pairwise keys (link_id == -1) */
-       if (sta != data->sta || key->link_id >= 0)
-               return;
-
-       err = iwl_mvm_send_cmd_pdu(mvm, cmd_id, 0, sizeof(cmd), &cmd);
-
-       if (err)
-               data->err = err;
-}
-
-int iwl_mvm_mld_update_sta_keys(struct iwl_mvm *mvm,
-                               struct ieee80211_vif *vif,
-                               struct ieee80211_sta *sta,
-                               u32 old_sta_mask,
-                               u32 new_sta_mask)
-{
-       struct iwl_mvm_sta_key_update_data data = {
-               .sta = sta,
-               .old_sta_mask = old_sta_mask,
-               .new_sta_mask = new_sta_mask,
-       };
-
-       ieee80211_iter_keys(mvm->hw, vif, iwl_mvm_mld_update_sta_key,
-                           &data);
-       return data.err;
-}
-
 static int __iwl_mvm_sec_key_del(struct iwl_mvm *mvm, u32 sta_mask,
                                 u32 key_flags, u32 keyidx, u32 flags)
 {
index 896ed982302148ea7ace84b0446c29b30f72696a..f1dbfeae20bc098b0a5c4b35e09d3d8409d60cf5 100644 (file)
@@ -886,133 +886,6 @@ static int iwl_mvm_mld_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
        return iwl_mvm_roc_common(hw, vif, channel, duration, type, &ops);
 }
 
-static int
-iwl_mvm_mld_change_vif_links(struct ieee80211_hw *hw,
-                            struct ieee80211_vif *vif,
-                            u16 old_links, u16 new_links,
-                            struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS])
-{
-       struct iwl_mvm_vif_link_info *new_link[IEEE80211_MLD_MAX_NUM_LINKS] = {};
-       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;
-
-       for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
-               if (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status))
-                       break;
-
-               if (!(added & BIT(i)))
-                       continue;
-               new_link[i] = kzalloc_obj(*new_link[i]);
-               if (!new_link[i]) {
-                       err = -ENOMEM;
-                       goto free;
-               }
-
-               new_link[i]->fw_link_id = IWL_MVM_FW_LINK_ID_INVALID;
-               iwl_mvm_init_link(new_link[i]);
-       }
-
-       mutex_lock(&mvm->mutex);
-
-       /* If we're in RESTART flow, the default link wasn't added in
-         * drv_add_interface(), and link[0] doesn't point to it.
-        */
-       if (old_links == 0 && !test_bit(IWL_MVM_STATUS_IN_HW_RESTART,
-                                       &mvm->status)) {
-               err = iwl_mvm_disable_link(mvm, vif, &vif->bss_conf);
-               if (err)
-                       goto out_err;
-               mvmvif->link[0] = NULL;
-       }
-
-       for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++) {
-               if (removed & BIT(i)) {
-                       struct ieee80211_bss_conf *link_conf = old[i];
-
-                       err = iwl_mvm_disable_link(mvm, vif, link_conf);
-                       if (err)
-                               goto out_err;
-                       kfree(mvmvif->link[i]);
-                       mvmvif->link[i] = NULL;
-               } else if (added & BIT(i)) {
-                       struct ieee80211_bss_conf *link_conf;
-
-                       link_conf = link_conf_dereference_protected(vif, i);
-                       if (WARN_ON(!link_conf))
-                               continue;
-
-                       if (!test_bit(IWL_MVM_STATUS_IN_HW_RESTART,
-                                     &mvm->status))
-                               mvmvif->link[i] = new_link[i];
-                       new_link[i] = NULL;
-                       err = iwl_mvm_add_link(mvm, vif, link_conf);
-                       if (err)
-                               goto out_err;
-               }
-       }
-
-       err = 0;
-       if (new_links == 0) {
-               mvmvif->link[0] = &mvmvif->deflink;
-               err = iwl_mvm_add_link(mvm, vif, &vif->bss_conf);
-       }
-
-out_err:
-       /* we really don't have a good way to roll back here ... */
-       mutex_unlock(&mvm->mutex);
-
-free:
-       for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++)
-               kfree(new_link[i]);
-       return err;
-}
-
-static int
-iwl_mvm_mld_change_sta_links(struct ieee80211_hw *hw,
-                            struct ieee80211_vif *vif,
-                            struct ieee80211_sta *sta,
-                            u16 old_links, u16 new_links)
-{
-       struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
-
-       guard(mvm)(mvm);
-       return iwl_mvm_mld_update_sta_links(mvm, vif, sta, old_links, new_links);
-}
-
-static bool iwl_mvm_mld_can_activate_links(struct ieee80211_hw *hw,
-                                          struct ieee80211_vif *vif,
-                                          u16 desired_links)
-{
-       int n_links = hweight16(desired_links);
-
-       if (n_links <= 1)
-               return true;
-
-       WARN_ON(1);
-       return false;
-}
-
-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,
@@ -1102,9 +975,4 @@ const struct ieee80211_ops iwl_mvm_mld_hw_ops = {
        .link_sta_add_debugfs = iwl_mvm_link_sta_add_debugfs,
 #endif
        .set_hw_timestamp = iwl_mvm_set_hw_timestamp,
-
-       .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,
 };
index 3359e02e151ff6990eadc59a9472610fd4afc481..44e16ee9514ee4aeeb6bf9abfdab7645b02f0e2d 100644 (file)
@@ -913,288 +913,3 @@ void iwl_mvm_mld_modify_all_sta_disable_tx(struct iwl_mvm *mvm,
 
        rcu_read_unlock();
 }
-
-static int iwl_mvm_mld_update_sta_queues(struct iwl_mvm *mvm,
-                                        struct ieee80211_sta *sta,
-                                        u32 old_sta_mask,
-                                        u32 new_sta_mask)
-{
-       struct iwl_mvm_sta *mvm_sta = iwl_mvm_sta_from_mac80211(sta);
-       struct iwl_scd_queue_cfg_cmd cmd = {
-               .operation = cpu_to_le32(IWL_SCD_QUEUE_MODIFY),
-               .u.modify.old_sta_mask = cpu_to_le32(old_sta_mask),
-               .u.modify.new_sta_mask = cpu_to_le32(new_sta_mask),
-       };
-       struct iwl_host_cmd hcmd = {
-               .id = WIDE_ID(DATA_PATH_GROUP, SCD_QUEUE_CONFIG_CMD),
-               .len[0] = sizeof(cmd),
-               .data[0] = &cmd
-       };
-       int tid;
-       int ret;
-
-       lockdep_assert_held(&mvm->mutex);
-
-       for (tid = 0; tid <= IWL_MAX_TID_COUNT; tid++) {
-               struct iwl_mvm_tid_data *tid_data = &mvm_sta->tid_data[tid];
-               int txq_id = tid_data->txq_id;
-
-               if (txq_id == IWL_MVM_INVALID_QUEUE)
-                       continue;
-
-               if (tid == IWL_MAX_TID_COUNT)
-                       cmd.u.modify.tid = cpu_to_le32(IWL_MGMT_TID);
-               else
-                       cmd.u.modify.tid = cpu_to_le32(tid);
-
-               ret = iwl_mvm_send_cmd(mvm, &hcmd);
-               if (ret)
-                       return ret;
-       }
-
-       return 0;
-}
-
-static int iwl_mvm_mld_update_sta_baids(struct iwl_mvm *mvm,
-                                       u32 old_sta_mask,
-                                       u32 new_sta_mask)
-{
-       struct iwl_rx_baid_cfg_cmd cmd = {
-               .action = cpu_to_le32(IWL_RX_BAID_ACTION_MODIFY),
-               .modify.old_sta_id_mask = cpu_to_le32(old_sta_mask),
-               .modify.new_sta_id_mask = cpu_to_le32(new_sta_mask),
-       };
-       u32 cmd_id = WIDE_ID(DATA_PATH_GROUP, RX_BAID_ALLOCATION_CONFIG_CMD);
-       int baid;
-
-       /* mac80211 will remove sessions later, but we ignore all that */
-       if (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status))
-               return 0;
-
-       BUILD_BUG_ON(sizeof(struct iwl_rx_baid_cfg_resp) != sizeof(baid));
-
-       for (baid = 0; baid < ARRAY_SIZE(mvm->baid_map); baid++) {
-               struct iwl_mvm_baid_data *data;
-               int ret;
-
-               data = rcu_dereference_protected(mvm->baid_map[baid],
-                                                lockdep_is_held(&mvm->mutex));
-               if (!data)
-                       continue;
-
-               if (!(data->sta_mask & old_sta_mask))
-                       continue;
-
-               WARN_ONCE(data->sta_mask != old_sta_mask,
-                         "BAID data for %d corrupted - expected 0x%x found 0x%x\n",
-                         baid, old_sta_mask, data->sta_mask);
-
-               cmd.modify.tid = cpu_to_le32(data->tid);
-
-               ret = iwl_mvm_send_cmd_pdu(mvm, cmd_id, CMD_SEND_IN_RFKILL,
-                                          sizeof(cmd), &cmd);
-               data->sta_mask = new_sta_mask;
-               if (ret)
-                       return ret;
-       }
-
-       return 0;
-}
-
-static int iwl_mvm_mld_update_sta_resources(struct iwl_mvm *mvm,
-                                           struct ieee80211_vif *vif,
-                                           struct ieee80211_sta *sta,
-                                           u32 old_sta_mask,
-                                           u32 new_sta_mask)
-{
-       int ret;
-
-       ret = iwl_mvm_mld_update_sta_queues(mvm, sta,
-                                           old_sta_mask,
-                                           new_sta_mask);
-       if (ret)
-               return ret;
-
-       ret = iwl_mvm_mld_update_sta_keys(mvm, vif, sta,
-                                         old_sta_mask,
-                                         new_sta_mask);
-       if (ret)
-               return ret;
-
-       return iwl_mvm_mld_update_sta_baids(mvm, old_sta_mask, new_sta_mask);
-}
-
-int iwl_mvm_mld_update_sta_links(struct iwl_mvm *mvm,
-                                struct ieee80211_vif *vif,
-                                struct ieee80211_sta *sta,
-                                u16 old_links, u16 new_links)
-{
-       struct iwl_mvm_sta *mvm_sta = iwl_mvm_sta_from_mac80211(sta);
-       struct iwl_mvm_vif *mvm_vif = iwl_mvm_vif_from_mac80211(vif);
-       struct iwl_mvm_link_sta *mvm_sta_link;
-       struct iwl_mvm_vif_link_info *mvm_vif_link;
-       unsigned long links_to_add = ~old_links & new_links;
-       unsigned long links_to_rem = old_links & ~new_links;
-       unsigned long old_links_long = old_links;
-       u32 current_sta_mask = 0, sta_mask_added = 0, sta_mask_to_rem = 0;
-       unsigned long link_sta_added_to_fw = 0, link_sta_allocated = 0;
-       unsigned int link_id;
-       int ret;
-
-       lockdep_assert_wiphy(mvm->hw->wiphy);
-       lockdep_assert_held(&mvm->mutex);
-
-       for_each_set_bit(link_id, &old_links_long,
-                        IEEE80211_MLD_MAX_NUM_LINKS) {
-               mvm_sta_link =
-                       rcu_dereference_protected(mvm_sta->link[link_id],
-                                                 lockdep_is_held(&mvm->mutex));
-
-               if (WARN_ON(!mvm_sta_link)) {
-                       ret = -EINVAL;
-                       goto err;
-               }
-
-               current_sta_mask |= BIT(mvm_sta_link->sta_id);
-               if (links_to_rem & BIT(link_id))
-                       sta_mask_to_rem |= BIT(mvm_sta_link->sta_id);
-       }
-
-       if (sta_mask_to_rem) {
-               ret = iwl_mvm_mld_update_sta_resources(mvm, vif, sta,
-                                                      current_sta_mask,
-                                                      current_sta_mask &
-                                                       ~sta_mask_to_rem);
-               if (WARN_ON(ret))
-                       goto err;
-
-               current_sta_mask &= ~sta_mask_to_rem;
-       }
-
-       for_each_set_bit(link_id, &links_to_rem, IEEE80211_MLD_MAX_NUM_LINKS) {
-               mvm_sta_link =
-                       rcu_dereference_protected(mvm_sta->link[link_id],
-                                                 lockdep_is_held(&mvm->mutex));
-               mvm_vif_link = mvm_vif->link[link_id];
-
-               if (WARN_ON(!mvm_sta_link || !mvm_vif_link)) {
-                       ret = -EINVAL;
-                       goto err;
-               }
-
-               ret = iwl_mvm_mld_rm_sta_from_fw(mvm, mvm_sta_link->sta_id);
-               if (WARN_ON(ret))
-                       goto err;
-
-               if (vif->type == NL80211_IFTYPE_STATION)
-                       mvm_vif_link->ap_sta_id = IWL_INVALID_STA;
-
-               iwl_mvm_mld_free_sta_link(mvm, mvm_sta, mvm_sta_link, link_id);
-       }
-
-       for_each_set_bit(link_id, &links_to_add, IEEE80211_MLD_MAX_NUM_LINKS) {
-               struct ieee80211_bss_conf *link_conf =
-                       link_conf_dereference_protected(vif, link_id);
-               struct ieee80211_link_sta *link_sta =
-                       link_sta_dereference_protected(sta, link_id);
-               mvm_vif_link = mvm_vif->link[link_id];
-
-               if (WARN_ON(!mvm_vif_link || !link_conf || !link_sta)) {
-                       ret = -EINVAL;
-                       goto err;
-               }
-
-               if (test_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status)) {
-                       struct iwl_mvm_link_sta *mvm_link_sta =
-                               rcu_dereference_protected(mvm_sta->link[link_id],
-                                                         lockdep_is_held(&mvm->mutex));
-                       u32 sta_id;
-
-                       if (WARN_ON(!mvm_link_sta)) {
-                               ret = -EINVAL;
-                               goto err;
-                       }
-
-                       sta_id = mvm_link_sta->sta_id;
-
-                       rcu_assign_pointer(mvm->fw_id_to_mac_id[sta_id], sta);
-                       rcu_assign_pointer(mvm->fw_id_to_link_sta[sta_id],
-                                          link_sta);
-               } else {
-                       if (WARN_ON(mvm_sta->link[link_id])) {
-                               ret = -EINVAL;
-                               goto err;
-                       }
-                       ret = iwl_mvm_mld_alloc_sta_link(mvm, vif, sta,
-                                                        link_id);
-                       if (WARN_ON(ret))
-                               goto err;
-               }
-
-               link_sta->agg.max_rc_amsdu_len = 1;
-               ieee80211_sta_recalc_aggregates(sta);
-
-               mvm_sta_link =
-                       rcu_dereference_protected(mvm_sta->link[link_id],
-                                                 lockdep_is_held(&mvm->mutex));
-
-               if (WARN_ON(!mvm_sta_link)) {
-                       ret = -EINVAL;
-                       goto err;
-               }
-
-               if (vif->type == NL80211_IFTYPE_STATION)
-                       iwl_mvm_mld_set_ap_sta_id(sta, mvm_vif_link,
-                                                 mvm_sta_link);
-
-               link_sta_allocated |= BIT(link_id);
-
-               sta_mask_added |= BIT(mvm_sta_link->sta_id);
-
-               ret = iwl_mvm_mld_cfg_sta(mvm, sta, vif, link_sta, link_conf,
-                                         mvm_sta_link);
-               if (WARN_ON(ret))
-                       goto err;
-
-               link_sta_added_to_fw |= BIT(link_id);
-
-               iwl_mvm_rs_add_sta_link(mvm, mvm_sta_link);
-
-               iwl_mvm_rs_rate_init(mvm, vif, sta, link_conf, link_sta,
-                                    link_conf->chanreq.oper.chan->band);
-       }
-
-       if (sta_mask_added) {
-               ret = iwl_mvm_mld_update_sta_resources(mvm, vif, sta,
-                                                      current_sta_mask,
-                                                      current_sta_mask |
-                                                       sta_mask_added);
-               if (WARN_ON(ret))
-                       goto err;
-       }
-
-       return 0;
-
-err:
-       /* remove all already allocated stations in FW */
-       for_each_set_bit(link_id, &link_sta_added_to_fw,
-                        IEEE80211_MLD_MAX_NUM_LINKS) {
-               mvm_sta_link =
-                       rcu_dereference_protected(mvm_sta->link[link_id],
-                                                 lockdep_is_held(&mvm->mutex));
-
-               iwl_mvm_mld_rm_sta_from_fw(mvm, mvm_sta_link->sta_id);
-       }
-
-       /* remove all already allocated station links in driver */
-       for_each_set_bit(link_id, &link_sta_allocated,
-                        IEEE80211_MLD_MAX_NUM_LINKS) {
-               mvm_sta_link =
-                       rcu_dereference_protected(mvm_sta->link[link_id],
-                                                 lockdep_is_held(&mvm->mutex));
-
-               iwl_mvm_mld_free_sta_link(mvm, mvm_sta, mvm_sta_link, link_id);
-       }
-
-       return ret;
-}
index 46a9dfa58a53936c319b29ace5ca956ed978aa4b..402ba5dee8b2c438450651166568968fbfa31cf8 100644 (file)
@@ -2450,11 +2450,6 @@ void iwl_mvm_sec_key_remove_ap(struct iwl_mvm *mvm,
                               struct ieee80211_vif *vif,
                               struct iwl_mvm_vif_link_info *link,
                               unsigned int link_id);
-int iwl_mvm_mld_update_sta_keys(struct iwl_mvm *mvm,
-                               struct ieee80211_vif *vif,
-                               struct ieee80211_sta *sta,
-                               u32 old_sta_mask,
-                               u32 new_sta_mask);
 int iwl_mvm_mld_send_key(struct iwl_mvm *mvm, u32 sta_mask, u32 key_flags,
                         struct ieee80211_key_conf *keyconf);
 u32 iwl_mvm_get_sec_flags(struct iwl_mvm *mvm,
index c25edc7c1813351b2e46dbc0041ea6ee0b8bcdf6..ff099aec78867e89a9fc6c0a9a22e31073a5933d 100644 (file)
@@ -637,10 +637,6 @@ void iwl_mvm_mld_free_sta_link(struct iwl_mvm *mvm,
                               struct iwl_mvm_link_sta *mvm_sta_link,
                               unsigned int link_id);
 int iwl_mvm_mld_rm_sta_id(struct iwl_mvm *mvm, u8 sta_id);
-int iwl_mvm_mld_update_sta_links(struct iwl_mvm *mvm,
-                                struct ieee80211_vif *vif,
-                                struct ieee80211_sta *sta,
-                                u16 old_links, u16 new_links);
 u32 iwl_mvm_sta_fw_id_mask(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
                           int filter_link_id);
 int iwl_mvm_mld_add_int_sta_with_queue(struct iwl_mvm *mvm,