Lines Matching defs:mvm

5 #include "mvm.h"
38 static void iwl_mvm_print_esr_state(struct iwl_mvm *mvm, u32 mask)
42 IWL_DEBUG_INFO(mvm,
51 static u32 iwl_mvm_get_free_fw_link_id(struct iwl_mvm *mvm,
56 lockdep_assert_held(&mvm->mutex);
58 for (i = 0; i < ARRAY_SIZE(mvm->link_id_to_link_conf); i++)
59 if (!rcu_access_pointer(mvm->link_id_to_link_conf[i]))
65 static int iwl_mvm_link_cmd_send(struct iwl_mvm *mvm,
72 ret = iwl_mvm_send_cmd_pdu(mvm,
76 IWL_ERR(mvm, "Failed to send LINK_CONFIG_CMD (action:%d): %d\n",
81 int iwl_mvm_set_link_mapping(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
89 link_info->fw_link_id = iwl_mvm_get_free_fw_link_id(mvm,
92 ARRAY_SIZE(mvm->link_id_to_link_conf))
95 rcu_assign_pointer(mvm->link_id_to_link_conf[link_info->fw_link_id],
102 int iwl_mvm_add_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
110 u8 cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw, cmd_id, 1);
116 ret = iwl_mvm_set_link_mapping(mvm, vif, link_conf);
123 if (iwl_mvm_sf_update(mvm, vif, false))
140 return iwl_mvm_link_cmd_send(mvm, &cmd, FW_CTXT_ACTION_ADD);
169 int iwl_mvm_esr_non_bss_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
176 struct ieee80211_vif *bss_vif = iwl_mvm_get_bss_vif(mvm);
187 return iwl_mvm_block_esr_sync(mvm, bss_vif,
190 ieee80211_iterate_active_interfaces(mvm->hw,
194 mutex_lock(&mvm->mutex);
195 iwl_mvm_unblock_esr(mvm, bss_vif, IWL_MVM_ESR_BLOCKED_NON_BSS);
196 mutex_unlock(&mvm->mutex);
202 int iwl_mvm_link_changed(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
214 u8 cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw, cmd_id, 1);
239 iwl_mvm_stop_session_protection(mvm, vif);
261 iwl_mvm_set_fw_basic_rates(mvm, vif, link_conf,
269 iwl_mvm_set_fw_protection_flags(mvm, vif, link_conf,
273 iwl_mvm_set_fw_qos_params(mvm, vif, link_conf, cmd.ac,
298 if (iwl_mvm_set_fw_mu_edca_params(mvm, mvmvif->link[link_id],
311 def = iwl_mvm_chanctx_def(mvm, ctx);
315 iwl_fw_lookup_cmd_ver(mvm->fw, PHY_CONTEXT_CMD, 1) >= 6)
351 ret = iwl_mvm_link_cmd_send(mvm, &cmd, FW_CTXT_ACTION_MODIFY);
358 int iwl_mvm_unset_link_mapping(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
368 ARRAY_SIZE(mvm->link_id_to_link_conf)))
371 RCU_INIT_POINTER(mvm->link_id_to_link_conf[link_info->fw_link_id],
376 int iwl_mvm_remove_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
385 ret = iwl_mvm_unset_link_mapping(mvm, vif, link_conf);
394 ret = iwl_mvm_link_cmd_send(mvm, &cmd, FW_CTXT_ACTION_REMOVE);
397 if (iwl_mvm_sf_update(mvm, vif, true))
398 IWL_ERR(mvm, "Failed to update SF state\n");
406 int iwl_mvm_disable_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
411 ret = iwl_mvm_link_changed(mvm, vif, link_conf,
416 ret = iwl_mvm_remove_link(mvm, vif, link_conf);
665 s8 iwl_mvm_get_esr_rssi_thresh(struct iwl_mvm *mvm,
694 iwl_mvm_esr_disallowed_with_link(struct iwl_mvm *mvm,
699 struct wiphy *wiphy = mvm->hw->wiphy;
710 (!iwl_mvm_bt_coex_calculate_esr_mode(mvm, vif, link->signal,
714 thresh = iwl_mvm_get_esr_rssi_thresh(mvm, link->chandef,
724 IWL_DEBUG_INFO(mvm,
727 iwl_mvm_print_esr_state(mvm, ret);
738 struct iwl_mvm *mvm = mvmvif->mvm;
742 if (iwl_mvm_esr_disallowed_with_link(mvm, vif, a, true) ||
743 iwl_mvm_esr_disallowed_with_link(mvm, vif, b, false))
752 IWL_DEBUG_INFO(mvm,
755 iwl_mvm_print_esr_state(mvm, ret);
800 void iwl_mvm_select_links(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
805 u32 max_active_links = iwl_mvm_max_active_links(mvm, vif);
810 lockdep_assert_wiphy(mvm->hw->wiphy);
834 if (max_active_links == 1 || !iwl_mvm_vif_has_esr_cap(mvm, vif) ||
863 IWL_DEBUG_INFO(mvm, "Link selection result: 0x%x. Primary = %d\n",
875 lockdep_assert(lockdep_is_held(&mvmvif->mvm->mutex) ||
876 lockdep_is_held(&mvmvif->mvm->hw->wiphy->mtx));
917 static bool iwl_mvm_check_esr_prevention(struct iwl_mvm *mvm,
926 lockdep_assert_held(&mvm->mutex);
957 IWL_DEBUG_INFO(mvm,
962 wiphy_delayed_work_queue(mvm->hw->wiphy,
970 void iwl_mvm_exit_esr(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
978 lockdep_assert_held(&mvm->mutex);
994 IWL_DEBUG_INFO(mvm,
1002 prevented = iwl_mvm_check_esr_prevention(mvm, mvmvif, reason);
1017 wiphy_delayed_work_queue(mvm->hw->wiphy,
1022 void iwl_mvm_block_esr(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1028 lockdep_assert_held(&mvm->mutex);
1040 IWL_DEBUG_INFO(mvm,
1046 iwl_mvm_print_esr_state(mvm, mvmvif->esr_disable_reason);
1048 iwl_mvm_exit_esr(mvm, vif, reason, link_to_keep);
1051 int iwl_mvm_block_esr_sync(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1069 mutex_lock(&mvm->mutex);
1071 iwl_mvm_block_esr(mvm, vif, reason, primary_link);
1072 mutex_unlock(&mvm->mutex);
1077 static void iwl_mvm_esr_unblocked(struct iwl_mvm *mvm,
1084 lockdep_assert_held(&mvm->mutex);
1090 IWL_DEBUG_INFO(mvm, "EMLSR is unblocked\n");
1097 IWL_DEBUG_INFO(mvm, "Wait for MLO scan\n");
1106 IWL_DEBUG_INFO(mvm, "Trigger MLO scan\n");
1107 wiphy_delayed_work_queue(mvm->hw->wiphy,
1115 IWL_DEBUG_INFO(mvm,
1123 void iwl_mvm_unblock_esr(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1128 lockdep_assert_held(&mvm->mutex);
1143 IWL_DEBUG_INFO(mvm,
1146 iwl_mvm_print_esr_state(mvm, mvmvif->esr_disable_reason);
1149 iwl_mvm_esr_unblocked(mvm, vif);