summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2023-03-29 10:05:35 +0300
committerJohannes Berg <johannes.berg@intel.com>2023-03-30 13:08:43 +0300
commit164a52d45e4aac669be811d7a345856cccd8cc8e (patch)
treec56fe414cf159edb31bb63d91c7ad65b59d715b2 /drivers
parent9deccfcd48b7c358245ed05c11b142cc945daf5e (diff)
downloadlinux-164a52d45e4aac669be811d7a345856cccd8cc8e.tar.xz
wifi: iwlwifi: mvm: send full STA during HW restart
By using the internal station add the station is installed in firmware with zeroed MAC addresses, which is wrong. Use the full installation function instead, to fill all data. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Gregory Greenman <gregory.greenman@intel.com> Link: https://lore.kernel.org/r/20230329100040.62d5371bb3c7.Ie25b62125a3a022f76a36bae5fed9796c18698aa@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
index 4d713c78b508..26686cc7ff4c 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mld-sta.c
@@ -572,10 +572,9 @@ static int iwl_mvm_alloc_sta_after_restart(struct iwl_mvm *mvm,
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
struct ieee80211_link_sta *link_sta;
unsigned int link_id;
- struct iwl_mvm_int_sta tmp_sta = {
- .type = mvm_sta->sta_type,
- };
- int sta_id, ret;
+ /* no active link found */
+ int ret = -EINVAL;
+ int sta_id;
/* First add an empty station since allocating a queue requires
* a valid station. Since we need a link_id to allocate a station,
@@ -598,23 +597,19 @@ static int iwl_mvm_alloc_sta_after_restart(struct iwl_mvm *mvm,
continue;
sta_id = mvm_link_sta->sta_id;
- tmp_sta.sta_id = sta_id;
- ret = iwl_mvm_mld_add_int_sta_to_fw(mvm, &tmp_sta,
- vif->bss_conf.bssid,
- mvm_link->fw_link_id);
+ ret = iwl_mvm_mld_cfg_sta(mvm, sta, vif, link_sta,
+ link_conf, mvm_link_sta);
if (ret)
return ret;
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);
- iwl_mvm_realloc_queues_after_restart(mvm, sta);
-
- /* since we need only one station, no need to continue */
- return 0;
+ ret = 0;
}
- /* no active link found */
- return -EINVAL;
+ iwl_mvm_realloc_queues_after_restart(mvm, sta);
+
+ return ret;
}
int iwl_mvm_mld_add_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif,