Lines Matching full:vif
88 struct ieee80211_vif *vif = in iwl_mld_emlsr_prevent_done_wk() local
95 iwl_mld_unblock_emlsr(mld_vif->mld, vif, in iwl_mld_emlsr_prevent_done_wk()
104 struct ieee80211_vif *vif = in iwl_mld_emlsr_tmp_non_bss_done_wk() local
111 iwl_mld_unblock_emlsr(mld_vif->mld, vif, in iwl_mld_emlsr_tmp_non_bss_done_wk()
189 * belong to the EMLSR vif) since EMLSR is not allowed if there is in iwl_mld_clear_avg_chan_load_iter()
190 * another vif. in iwl_mld_clear_avg_chan_load_iter()
195 static int _iwl_mld_exit_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif, in _iwl_mld_exit_emlsr() argument
199 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in _iwl_mld_exit_emlsr()
210 if (!iwl_mld_emlsr_active(vif)) in _iwl_mld_exit_emlsr()
213 if (WARN_ON(!ieee80211_vif_is_mld(vif) || !mld_vif->authorized)) in _iwl_mld_exit_emlsr()
216 if (WARN_ON(!(vif->active_links & BIT(link_to_keep)))) in _iwl_mld_exit_emlsr()
217 link_to_keep = __ffs(vif->active_links); in _iwl_mld_exit_emlsr()
223 vif->active_links, new_active_links); in _iwl_mld_exit_emlsr()
226 ret = ieee80211_set_active_links(vif, new_active_links); in _iwl_mld_exit_emlsr()
228 ieee80211_set_active_links_async(vif, new_active_links); in _iwl_mld_exit_emlsr()
243 void iwl_mld_exit_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif, in iwl_mld_exit_emlsr() argument
246 _iwl_mld_exit_emlsr(mld, vif, exit, link_to_keep, false); in iwl_mld_exit_emlsr()
249 static int _iwl_mld_emlsr_block(struct iwl_mld *mld, struct ieee80211_vif *vif, in _iwl_mld_emlsr_block() argument
253 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in _iwl_mld_emlsr_block()
257 if (!IWL_MLD_AUTO_EML_ENABLE || !iwl_mld_vif_has_emlsr_cap(vif)) in _iwl_mld_emlsr_block()
274 return _iwl_mld_exit_emlsr(mld, vif, IWL_MLD_EMLSR_EXIT_BLOCK, in _iwl_mld_emlsr_block()
278 void iwl_mld_block_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif, in iwl_mld_block_emlsr() argument
281 _iwl_mld_emlsr_block(mld, vif, reason, link_to_keep, false); in iwl_mld_block_emlsr()
284 int iwl_mld_block_emlsr_sync(struct iwl_mld *mld, struct ieee80211_vif *vif, in iwl_mld_block_emlsr_sync() argument
287 return _iwl_mld_emlsr_block(mld, vif, reason, link_to_keep, true); in iwl_mld_block_emlsr_sync()
293 struct ieee80211_vif *vif) in iwl_mld_vif_iter_emlsr_block_tmp_non_bss() argument
295 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_vif_iter_emlsr_block_tmp_non_bss()
298 if (!iwl_mld_vif_has_emlsr_cap(vif)) in iwl_mld_vif_iter_emlsr_block_tmp_non_bss()
301 ret = iwl_mld_block_emlsr_sync(mld_vif->mld, vif, in iwl_mld_vif_iter_emlsr_block_tmp_non_bss()
303 iwl_mld_get_primary_link(vif)); in iwl_mld_vif_iter_emlsr_block_tmp_non_bss()
321 struct ieee80211_vif *vif);
323 void iwl_mld_unblock_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif, in iwl_mld_unblock_emlsr() argument
326 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_unblock_emlsr()
330 if (!IWL_MLD_AUTO_EML_ENABLE || !iwl_mld_vif_has_emlsr_cap(vif)) in iwl_mld_unblock_emlsr()
352 iwl_mld_int_mlo_scan(mld, vif); in iwl_mld_unblock_emlsr()
357 struct ieee80211_vif *vif) in iwl_mld_vif_iter_emlsr_mode_notif() argument
359 const struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_vif_iter_emlsr_mode_notif()
373 if (!iwl_mld_vif_has_emlsr_cap(vif)) in iwl_mld_vif_iter_emlsr_mode_notif()
383 iwl_mld_exit_emlsr(mld_vif->mld, vif, in iwl_mld_vif_iter_emlsr_mode_notif()
385 iwl_mld_get_primary_link(vif)); in iwl_mld_vif_iter_emlsr_mode_notif()
411 struct ieee80211_vif *vif) in iwl_mld_vif_iter_disconnect_emlsr() argument
413 if (!iwl_mld_vif_has_emlsr_cap(vif)) in iwl_mld_vif_iter_disconnect_emlsr()
416 ieee80211_connection_loss(vif); in iwl_mld_vif_iter_disconnect_emlsr()
445 ieee80211_connection_loss(bss_conf->vif); in iwl_mld_handle_emlsr_trans_fail_notif()
453 iwl_mld_exit_emlsr(mld, bss_conf->vif, IWL_MLD_EMLSR_EXIT_FAIL_ENTRY, in iwl_mld_handle_emlsr_trans_fail_notif()
459 struct ieee80211_vif *vif) in iwl_mld_count_non_bss_links() argument
461 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_count_non_bss_links()
464 if (ieee80211_vif_type_p2p(vif) == NL80211_IFTYPE_STATION) in iwl_mld_count_non_bss_links()
467 *count += iwl_mld_count_active_links(mld_vif->mld, vif); in iwl_mld_count_non_bss_links()
477 struct ieee80211_vif *vif) in iwl_mld_vif_iter_update_emlsr_non_bss_block() argument
480 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_vif_iter_update_emlsr_non_bss_block()
484 ret = iwl_mld_block_emlsr_sync(mld_vif->mld, vif, in iwl_mld_vif_iter_update_emlsr_non_bss_block()
486 iwl_mld_get_primary_link(vif)); in iwl_mld_vif_iter_update_emlsr_non_bss_block()
490 iwl_mld_unblock_emlsr(mld_vif->mld, vif, in iwl_mld_vif_iter_update_emlsr_non_bss_block()
498 /* An active link of a non-station vif blocks EMLSR. Upon activation in iwl_mld_emlsr_check_non_bss_block()
499 * block EMLSR on the bss vif. Upon deactivation, check if this link in iwl_mld_emlsr_check_non_bss_block()
500 * was the last non-station link active, and if so unblock the bss vif in iwl_mld_emlsr_check_non_bss_block()
534 struct ieee80211_vif *vif = in iwl_mld_emlsr_check_tpt() local
544 if (!iwl_mld_vif_has_emlsr_cap(vif) || !mld_vif->ap_sta) in iwl_mld_emlsr_check_tpt()
566 if (iwl_mld_emlsr_active(vif) && in iwl_mld_emlsr_check_tpt()
569 sec_link_id = iwl_mld_get_other_link(vif, iwl_mld_get_primary_link(vif)); in iwl_mld_emlsr_check_tpt()
611 iwl_mld_block_emlsr(mld, vif, IWL_MLD_EMLSR_BLOCKED_TPT, in iwl_mld_emlsr_check_tpt()
612 iwl_mld_get_primary_link(vif)); in iwl_mld_emlsr_check_tpt()
635 iwl_mld_exit_emlsr(mld, vif, IWL_MLD_EMLSR_EXIT_LINK_USAGE, in iwl_mld_emlsr_check_tpt()
636 iwl_mld_get_primary_link(vif)); in iwl_mld_emlsr_check_tpt()
650 struct ieee80211_vif *vif = in iwl_mld_emlsr_unblock_tpt_wk() local
653 iwl_mld_unblock_emlsr(mld_vif->mld, vif, IWL_MLD_EMLSR_BLOCKED_TPT); in iwl_mld_emlsr_unblock_tpt_wk()
694 struct ieee80211_vif *vif, in iwl_mld_emlsr_disallowed_with_link() argument
702 conf = wiphy_dereference(wiphy, vif->link_conf[link->link_id]); in iwl_mld_emlsr_disallowed_with_link()
729 struct ieee80211_vif *vif, in iwl_mld_set_link_sel_data() argument
746 link_conf_dereference_protected(vif, link_id); in iwl_mld_set_link_sel_data()
790 struct ieee80211_vif *vif, in iwl_mld_channel_load_allows_emlsr() argument
794 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_channel_load_allows_emlsr()
822 IWL_DEBUG_EHT(mld, "Low latency vif, EMLSR is allowed\n"); in iwl_mld_channel_load_allows_emlsr()
847 iwl_mld_emlsr_pair_state(struct ieee80211_vif *vif, in iwl_mld_emlsr_pair_state() argument
851 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_emlsr_pair_state()
856 reason_mask = iwl_mld_emlsr_disallowed_with_link(mld, vif, a, true); in iwl_mld_emlsr_pair_state()
860 reason_mask = iwl_mld_emlsr_disallowed_with_link(mld, vif, b, false); in iwl_mld_emlsr_pair_state()
886 if (!iwl_mld_channel_load_allows_emlsr(mld, vif, a, b)) in iwl_mld_emlsr_pair_state()
913 struct ieee80211_vif *vif, in iwl_mld_get_emlsr_grade() argument
919 struct wiphy *wiphy = ieee80211_vif_to_wdev(vif)->wiphy; in iwl_mld_get_emlsr_grade()
930 if (iwl_mld_emlsr_pair_state(vif, a, b)) in iwl_mld_get_emlsr_grade()
933 primary_conf = wiphy_dereference(wiphy, vif->link_conf[*primary_id]); in iwl_mld_get_emlsr_grade()
945 struct ieee80211_vif *vif) in _iwl_mld_select_links() argument
949 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in _iwl_mld_select_links()
950 int max_active_links = iwl_mld_max_active_links(mld, vif); in _iwl_mld_select_links()
951 u16 new_active, usable_links = ieee80211_vif_usable_links(vif); in _iwl_mld_select_links()
969 n_data = iwl_mld_set_link_sel_data(mld, vif, data, usable_links, in _iwl_mld_select_links()
986 !iwl_mld_vif_has_emlsr_cap(vif) || !IWL_MLD_AUTO_EML_ENABLE || in _iwl_mld_select_links()
995 iwl_mld_get_emlsr_grade(mld, vif, in _iwl_mld_select_links()
1020 ieee80211_set_active_links_async(vif, new_active); in _iwl_mld_select_links()
1024 struct ieee80211_vif *vif) in iwl_mld_vif_iter_select_links() argument
1026 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_vif_iter_select_links()
1029 _iwl_mld_select_links(mld, vif); in iwl_mld_vif_iter_select_links()
1041 struct ieee80211_vif *vif) in iwl_mld_emlsr_check_bt_iter() argument
1043 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_emlsr_check_bt_iter()
1048 if (!iwl_mld_vif_has_emlsr_cap(vif)) in iwl_mld_emlsr_check_bt_iter()
1052 iwl_mld_retry_emlsr(mld, vif); in iwl_mld_emlsr_check_bt_iter()
1057 if (!iwl_mld_emlsr_active(vif)) in iwl_mld_emlsr_check_bt_iter()
1062 for_each_vif_active_link(vif, link, link_id) { in iwl_mld_emlsr_check_bt_iter()
1067 iwl_mld_exit_emlsr(mld, vif, IWL_MLD_EMLSR_EXIT_BT_COEX, in iwl_mld_emlsr_check_bt_iter()
1068 iwl_mld_get_primary_link(vif)); in iwl_mld_emlsr_check_bt_iter()
1088 struct ieee80211_vif *vif) in iwl_mld_chan_load_update_iter() argument
1095 struct iwl_mld *mld = iwl_mld_vif_from_mac80211(vif)->mld; in iwl_mld_chan_load_update_iter()
1099 prim_link_id = iwl_mld_get_primary_link(vif); in iwl_mld_chan_load_update_iter()
1100 prim_link = link_conf_dereference_protected(vif, prim_link_id); in iwl_mld_chan_load_update_iter()
1108 if (iwl_mld_emlsr_active(vif)) { in iwl_mld_chan_load_update_iter()
1117 iwl_mld_exit_emlsr(mld, vif, in iwl_mld_chan_load_update_iter()
1130 iwl_mld_retry_emlsr(mld, vif); in iwl_mld_chan_load_update_iter()
1150 void iwl_mld_retry_emlsr(struct iwl_mld *mld, struct ieee80211_vif *vif) in iwl_mld_retry_emlsr() argument
1152 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_retry_emlsr()
1154 if (!IWL_MLD_AUTO_EML_ENABLE || !iwl_mld_vif_has_emlsr_cap(vif) || in iwl_mld_retry_emlsr()
1155 iwl_mld_emlsr_active(vif) || mld_vif->emlsr.blocked_reasons) in iwl_mld_retry_emlsr()
1158 iwl_mld_int_mlo_scan(mld, vif); in iwl_mld_retry_emlsr()
1162 struct ieee80211_vif *vif) in iwl_mld_ignore_tpt_iter() argument
1164 struct iwl_mld_vif *mld_vif = iwl_mld_vif_from_mac80211(vif); in iwl_mld_ignore_tpt_iter()