Lines Matching full:vif

8 					 struct ieee80211_vif *vif)  in iwl_mvm_mld_mac_add_interface()  argument
11 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_mld_mac_add_interface()
31 ret = iwl_mvm_mac_ctxt_init(mvm, vif); in iwl_mvm_mld_mac_add_interface()
35 rcu_assign_pointer(mvm->vif_id_to_mac[mvmvif->id], vif); in iwl_mvm_mld_mac_add_interface()
45 ret = iwl_mvm_mld_mac_ctxt_add(mvm, vif); in iwl_mvm_mld_mac_add_interface()
50 ret = iwl_mvm_disable_beacon_filter(mvm, vif, 0); in iwl_mvm_mld_mac_add_interface()
55 vif->type == NL80211_IFTYPE_STATION && !vif->p2p) { in iwl_mvm_mld_mac_add_interface()
57 vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER | in iwl_mvm_mld_mac_add_interface()
61 ret = iwl_mvm_add_link(mvm, vif, &vif->bss_conf); in iwl_mvm_mld_mac_add_interface()
65 /* Save a pointer to p2p device vif, so it can later be used to in iwl_mvm_mld_mac_add_interface()
68 if (vif->type == NL80211_IFTYPE_P2P_DEVICE) in iwl_mvm_mld_mac_add_interface()
69 mvm->p2p_device_vif = vif; in iwl_mvm_mld_mac_add_interface()
75 iwl_mvm_tcm_add_vif(mvm, vif); in iwl_mvm_mld_mac_add_interface()
79 if (vif->type == NL80211_IFTYPE_MONITOR) { in iwl_mvm_mld_mac_add_interface()
85 iwl_mvm_vif_dbgfs_add_link(mvm, vif); in iwl_mvm_mld_mac_add_interface()
88 vif->type == NL80211_IFTYPE_STATION && !vif->p2p && in iwl_mvm_mld_mac_add_interface()
90 iwl_mei_set_nic_info(vif->addr, mvm->nvm_data->hw_addr); in iwl_mvm_mld_mac_add_interface()
91 iwl_mei_set_netdev(ieee80211_vif_to_wdev(vif)->netdev); in iwl_mvm_mld_mac_add_interface()
92 mvm->csme_vif = vif; in iwl_mvm_mld_mac_add_interface()
100 vif->driver_flags &= ~(IEEE80211_VIF_BEACON_FILTER | in iwl_mvm_mld_mac_add_interface()
105 iwl_mvm_mld_mac_ctxt_remove(mvm, vif); in iwl_mvm_mld_mac_add_interface()
113 struct ieee80211_vif *vif) in iwl_mvm_mld_mac_remove_interface() argument
116 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_mld_mac_remove_interface()
119 iwl_mvm_prepare_mac_removal(mvm, vif); in iwl_mvm_mld_mac_remove_interface()
121 if (!(vif->type == NL80211_IFTYPE_AP || in iwl_mvm_mld_mac_remove_interface()
122 vif->type == NL80211_IFTYPE_ADHOC)) in iwl_mvm_mld_mac_remove_interface()
123 iwl_mvm_tcm_rm_vif(mvm, vif); in iwl_mvm_mld_mac_remove_interface()
127 if (vif == mvm->csme_vif) { in iwl_mvm_mld_mac_remove_interface()
134 vif->driver_flags &= ~(IEEE80211_VIF_BEACON_FILTER | in iwl_mvm_mld_mac_remove_interface()
138 if (vif->bss_conf.ftm_responder) in iwl_mvm_mld_mac_remove_interface()
141 iwl_mvm_vif_dbgfs_rm_link(mvm, vif); in iwl_mvm_mld_mac_remove_interface()
146 if (vif->type == NL80211_IFTYPE_AP || in iwl_mvm_mld_mac_remove_interface()
147 vif->type == NL80211_IFTYPE_ADHOC) { in iwl_mvm_mld_mac_remove_interface()
149 if (vif == mvm->noa_vif) { in iwl_mvm_mld_mac_remove_interface()
163 if (vif->type == NL80211_IFTYPE_P2P_DEVICE) { in iwl_mvm_mld_mac_remove_interface()
169 iwl_mvm_remove_link(mvm, vif, &vif->bss_conf); in iwl_mvm_mld_mac_remove_interface()
171 iwl_mvm_disable_link(mvm, vif, &vif->bss_conf); in iwl_mvm_mld_mac_remove_interface()
174 iwl_mvm_mld_mac_ctxt_remove(mvm, vif); in iwl_mvm_mld_mac_remove_interface()
184 if (vif->type == NL80211_IFTYPE_MONITOR) { in iwl_mvm_mld_mac_remove_interface()
192 static unsigned int iwl_mvm_mld_count_active_links(struct ieee80211_vif *vif) in iwl_mvm_mld_count_active_links() argument
200 link_conf = link_conf_dereference_protected(vif, i); in iwl_mvm_mld_count_active_links()
210 struct ieee80211_vif *vif) in iwl_mvm_esr_mode_active() argument
212 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_esr_mode_active()
218 vif->driver_flags |= IEEE80211_VIF_EML_ACTIVE; in iwl_mvm_esr_mode_active()
220 iwl_mvm_update_smps_on_active_links(mvm, vif, IWL_MVM_SMPS_REQ_FW, in iwl_mvm_esr_mode_active()
241 struct ieee80211_vif *vif, in __iwl_mvm_mld_assign_vif_chanctx() argument
248 unsigned int n_active = iwl_mvm_mld_count_active_links(vif); in __iwl_mvm_mld_assign_vif_chanctx()
249 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in __iwl_mvm_mld_assign_vif_chanctx()
257 if (n_active > iwl_mvm_max_active_links(mvm, vif)) in __iwl_mvm_mld_assign_vif_chanctx()
267 if (vif->type == NL80211_IFTYPE_AP) { in __iwl_mvm_mld_assign_vif_chanctx()
268 ret = iwl_mvm_mld_mac_ctxt_changed(mvm, vif, false); in __iwl_mvm_mld_assign_vif_chanctx()
270 IWL_ERR(mvm, "failed to update MAC %pM\n", vif->addr); in __iwl_mvm_mld_assign_vif_chanctx()
279 ret = iwl_mvm_esr_mode_active(mvm, vif); in __iwl_mvm_mld_assign_vif_chanctx()
288 if (vif->type == NL80211_IFTYPE_AP) in __iwl_mvm_mld_assign_vif_chanctx()
293 ret = iwl_mvm_link_changed(mvm, vif, link_conf, 0, false); in __iwl_mvm_mld_assign_vif_chanctx()
315 iwl_mvm_rs_rate_init(mvm, vif, mvmvif->ap_sta, in __iwl_mvm_mld_assign_vif_chanctx()
322 ret = iwl_mvm_link_changed(mvm, vif, link_conf, in __iwl_mvm_mld_assign_vif_chanctx()
335 if (vif->type == NL80211_IFTYPE_MONITOR) { in __iwl_mvm_mld_assign_vif_chanctx()
336 ret = iwl_mvm_mld_add_snif_sta(mvm, vif, link_conf); in __iwl_mvm_mld_assign_vif_chanctx()
344 iwl_mvm_link_changed(mvm, vif, link_conf, LINK_CONTEXT_MODIFY_ACTIVE, in __iwl_mvm_mld_assign_vif_chanctx()
353 struct ieee80211_vif *vif, in iwl_mvm_mld_assign_vif_chanctx() argument
361 ret = __iwl_mvm_mld_assign_vif_chanctx(mvm, vif, link_conf, ctx, false); in iwl_mvm_mld_assign_vif_chanctx()
368 struct ieee80211_vif *vif) in iwl_mvm_esr_mode_inactive() argument
370 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_esr_mode_inactive()
376 vif->driver_flags &= ~IEEE80211_VIF_EML_ACTIVE; in iwl_mvm_esr_mode_inactive()
378 iwl_mvm_update_smps_on_active_links(mvm, vif, IWL_MVM_SMPS_REQ_FW, in iwl_mvm_esr_mode_inactive()
381 for_each_vif_active_link(vif, link_conf, link_id) { in iwl_mvm_esr_mode_inactive()
415 struct ieee80211_vif *vif, in __iwl_mvm_mld_unassign_vif_chanctx() argument
421 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in __iwl_mvm_mld_unassign_vif_chanctx()
422 unsigned int n_active = iwl_mvm_mld_count_active_links(vif); in __iwl_mvm_mld_unassign_vif_chanctx()
429 if (vif->type == NL80211_IFTYPE_AP && switching_chanctx) { in __iwl_mvm_mld_unassign_vif_chanctx()
436 rcu_assign_pointer(mvm->csa_tx_blocked_vif, vif); in __iwl_mvm_mld_unassign_vif_chanctx()
441 iwl_mvm_link_changed(mvm, vif, link_conf, in __iwl_mvm_mld_unassign_vif_chanctx()
445 int ret = iwl_mvm_esr_mode_inactive(mvm, vif); in __iwl_mvm_mld_unassign_vif_chanctx()
452 if (vif->type == NL80211_IFTYPE_MONITOR) in __iwl_mvm_mld_unassign_vif_chanctx()
453 iwl_mvm_mld_rm_snif_sta(mvm, vif); in __iwl_mvm_mld_unassign_vif_chanctx()
462 struct ieee80211_vif *vif, in iwl_mvm_mld_unassign_vif_chanctx() argument
466 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_mld_unassign_vif_chanctx()
470 __iwl_mvm_mld_unassign_vif_chanctx(mvm, vif, link_conf, ctx, false); in iwl_mvm_mld_unassign_vif_chanctx()
472 if (!ieee80211_vif_is_mld(vif) && !mvmvif->ap_sta && in iwl_mvm_mld_unassign_vif_chanctx()
473 !WARN_ON_ONCE(vif->cfg.assoc)) { in iwl_mvm_mld_unassign_vif_chanctx()
474 iwl_mvm_remove_link(mvm, vif, link_conf); in iwl_mvm_mld_unassign_vif_chanctx()
475 iwl_mvm_add_link(mvm, vif, link_conf); in iwl_mvm_mld_unassign_vif_chanctx()
481 struct ieee80211_vif *vif, in iwl_mvm_mld_start_ap_ibss() argument
485 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_mld_start_ap_ibss()
490 ret = iwl_mvm_mac_ctxt_beacon_changed(mvm, vif, link_conf); in iwl_mvm_mld_start_ap_ibss()
495 ret = iwl_mvm_link_changed(mvm, vif, link_conf, in iwl_mvm_mld_start_ap_ibss()
502 ret = iwl_mvm_mld_add_mcast_sta(mvm, vif, link_conf); in iwl_mvm_mld_start_ap_ibss()
509 ret = iwl_mvm_mld_add_bcast_sta(mvm, vif, link_conf); in iwl_mvm_mld_start_ap_ibss()
513 if (iwl_mvm_start_ap_ibss_common(hw, vif, &ret)) in iwl_mvm_mld_start_ap_ibss()
516 /* Need to update the P2P Device MAC (only GO, IBSS is single vif) */ in iwl_mvm_mld_start_ap_ibss()
517 if (vif->p2p && mvm->p2p_device_vif) in iwl_mvm_mld_start_ap_ibss()
526 iwl_mvm_ftm_restart_responder(mvm, vif, link_conf); in iwl_mvm_mld_start_ap_ibss()
533 iwl_mvm_mld_rm_bcast_sta(mvm, vif, link_conf); in iwl_mvm_mld_start_ap_ibss()
535 iwl_mvm_mld_rm_mcast_sta(mvm, vif, link_conf); in iwl_mvm_mld_start_ap_ibss()
542 struct ieee80211_vif *vif, in iwl_mvm_mld_start_ap() argument
545 return iwl_mvm_mld_start_ap_ibss(hw, vif, link_conf); in iwl_mvm_mld_start_ap()
549 struct ieee80211_vif *vif) in iwl_mvm_mld_start_ibss() argument
551 return iwl_mvm_mld_start_ap_ibss(hw, vif, &vif->bss_conf); in iwl_mvm_mld_start_ibss()
555 struct ieee80211_vif *vif, in iwl_mvm_mld_stop_ap_ibss() argument
562 iwl_mvm_stop_ap_ibss_common(mvm, vif); in iwl_mvm_mld_stop_ap_ibss()
564 /* Need to update the P2P Device MAC (only GO, IBSS is single vif) */ in iwl_mvm_mld_stop_ap_ibss()
565 if (vif->p2p && mvm->p2p_device_vif) in iwl_mvm_mld_stop_ap_ibss()
568 iwl_mvm_ftm_responder_clear(mvm, vif); in iwl_mvm_mld_stop_ap_ibss()
570 iwl_mvm_mld_rm_bcast_sta(mvm, vif, link_conf); in iwl_mvm_mld_stop_ap_ibss()
571 iwl_mvm_mld_rm_mcast_sta(mvm, vif, link_conf); in iwl_mvm_mld_stop_ap_ibss()
578 struct ieee80211_vif *vif, in iwl_mvm_mld_stop_ap() argument
581 iwl_mvm_mld_stop_ap_ibss(hw, vif, link_conf); in iwl_mvm_mld_stop_ap()
585 struct ieee80211_vif *vif) in iwl_mvm_mld_stop_ibss() argument
587 iwl_mvm_mld_stop_ap_ibss(hw, vif, &vif->bss_conf); in iwl_mvm_mld_stop_ibss()
591 struct ieee80211_vif *vif, in iwl_mvm_mld_mac_sta_state() argument
603 return iwl_mvm_mac_sta_state_common(hw, vif, sta, old_state, new_state, in iwl_mvm_mld_mac_sta_state()
619 void iwl_mvm_mld_select_links(struct iwl_mvm *mvm, struct ieee80211_vif *vif, in iwl_mvm_mld_select_links() argument
623 unsigned long usable_links = ieee80211_vif_usable_links(vif); in iwl_mvm_mld_select_links()
624 u32 max_active_links = iwl_mvm_max_active_links(mvm, vif); in iwl_mvm_mld_select_links()
631 if (!ieee80211_vif_is_mld(vif) || usable_links == 1) in iwl_mvm_mld_select_links()
648 if (hweight16(vif->active_links) == max_active_links) in iwl_mvm_mld_select_links()
655 rcu_dereference(vif->link_conf[link_id]); in iwl_mvm_mld_select_links()
662 data[n_data].active = vif->active_links & BIT(link_id); in iwl_mvm_mld_select_links()
723 if (vif->active_links != new_active_links) in iwl_mvm_mld_select_links()
724 ieee80211_set_active_links_async(vif, new_active_links); in iwl_mvm_mld_select_links()
729 struct ieee80211_vif *vif, in iwl_mvm_mld_link_info_changed_station() argument
733 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_mld_link_info_changed_station()
745 if (changes & BSS_CHANGED_QOS && vif->cfg.assoc && link_conf->qos) in iwl_mvm_mld_link_info_changed_station()
751 if (vif->cfg.assoc && (has_he || has_eht)) { in iwl_mvm_mld_link_info_changed_station()
757 if (changes & BSS_CHANGED_EHT_PUNCTURING && vif->cfg.assoc) in iwl_mvm_mld_link_info_changed_station()
761 ret = iwl_mvm_link_changed(mvm, vif, link_conf, link_changes, in iwl_mvm_mld_link_info_changed_station()
767 ret = iwl_mvm_mld_mac_ctxt_changed(mvm, vif, false); in iwl_mvm_mld_link_info_changed_station()
769 IWL_ERR(mvm, "failed to update MAC %pM\n", vif->addr); in iwl_mvm_mld_link_info_changed_station()
772 iwl_mvm_mld_select_links(mvm, vif, true); in iwl_mvm_mld_link_info_changed_station()
777 iwl_mvm_bss_info_changed_station_common(mvm, vif, link_conf, changes); in iwl_mvm_mld_link_info_changed_station()
793 struct ieee80211_vif *vif) in iwl_mvm_mld_vif_delete_all_stas() argument
795 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_mld_vif_delete_all_stas()
807 iwl_mvm_sec_key_remove_ap(mvm, vif, link, i); in iwl_mvm_mld_vif_delete_all_stas()
817 struct ieee80211_vif *vif, in iwl_mvm_mld_vif_cfg_changed_station() argument
820 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_mld_vif_cfg_changed_station()
832 ret = iwl_mvm_mld_mac_ctxt_changed(mvm, vif, false); in iwl_mvm_mld_vif_cfg_changed_station()
834 IWL_ERR(mvm, "failed to update MAC %pM\n", vif->addr); in iwl_mvm_mld_vif_cfg_changed_station()
836 mvmvif->associated = vif->cfg.assoc; in iwl_mvm_mld_vif_cfg_changed_station()
839 if (vif->cfg.assoc) { in iwl_mvm_mld_vif_cfg_changed_station()
842 iwl_mvm_sf_update(mvm, vif, false); in iwl_mvm_mld_vif_cfg_changed_station()
843 iwl_mvm_power_vif_assoc(mvm, vif); in iwl_mvm_mld_vif_cfg_changed_station()
849 if (vif->p2p) { in iwl_mvm_mld_vif_cfg_changed_station()
850 iwl_mvm_update_smps(mvm, vif, in iwl_mvm_mld_vif_cfg_changed_station()
856 link_conf = rcu_dereference(vif->link_conf[i]); in iwl_mvm_mld_vif_cfg_changed_station()
868 ffs(vif->active_links) - 1; in iwl_mvm_mld_vif_cfg_changed_station()
879 iwl_mvm_protect_assoc(mvm, vif, 0, link_id); in iwl_mvm_mld_vif_cfg_changed_station()
882 iwl_mvm_sf_update(mvm, vif, false); in iwl_mvm_mld_vif_cfg_changed_station()
885 iwl_mvm_power_vif_assoc(mvm, vif); in iwl_mvm_mld_vif_cfg_changed_station()
892 ret = iwl_mvm_sf_update(mvm, vif, false); in iwl_mvm_mld_vif_cfg_changed_station()
899 * station has been added, but before the vif is set in iwl_mvm_mld_vif_cfg_changed_station()
901 * then configure the vif. Since the vif is not in iwl_mvm_mld_vif_cfg_changed_station()
905 iwl_mvm_mld_vif_delete_all_stas(mvm, vif); in iwl_mvm_mld_vif_cfg_changed_station()
908 iwl_mvm_bss_info_changed_station_assoc(mvm, vif, changes); in iwl_mvm_mld_vif_cfg_changed_station()
920 struct ieee80211_vif *vif, in iwl_mvm_mld_link_info_changed_ap_ibss() argument
924 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_mld_link_info_changed_ap_ibss()
942 iwl_mvm_link_changed(mvm, vif, link_conf, in iwl_mvm_mld_link_info_changed_ap_ibss()
944 IWL_ERR(mvm, "failed to update MAC %pM\n", vif->addr); in iwl_mvm_mld_link_info_changed_ap_ibss()
948 iwl_mvm_mac_ctxt_beacon_changed(mvm, vif, link_conf)) in iwl_mvm_mld_link_info_changed_ap_ibss()
953 int ret = iwl_mvm_ftm_start_responder(mvm, vif, link_conf); in iwl_mvm_mld_link_info_changed_ap_ibss()
962 struct ieee80211_vif *vif, in iwl_mvm_mld_link_info_changed() argument
970 switch (vif->type) { in iwl_mvm_mld_link_info_changed()
972 iwl_mvm_mld_link_info_changed_station(mvm, vif, link_conf, in iwl_mvm_mld_link_info_changed()
977 iwl_mvm_mld_link_info_changed_ap_ibss(mvm, vif, link_conf, in iwl_mvm_mld_link_info_changed()
982 iwl_mvm_update_mu_groups(mvm, vif); in iwl_mvm_mld_link_info_changed()
992 iwl_mvm_set_tx_power(mvm, vif, link_conf->txpower); in iwl_mvm_mld_link_info_changed()
999 struct ieee80211_vif *vif, in iwl_mvm_mld_vif_cfg_changed() argument
1006 if (changes & BSS_CHANGED_IDLE && !vif->cfg.idle) in iwl_mvm_mld_vif_cfg_changed()
1009 if (vif->type == NL80211_IFTYPE_STATION) in iwl_mvm_mld_vif_cfg_changed()
1010 iwl_mvm_mld_vif_cfg_changed_station(mvm, vif, changes); in iwl_mvm_mld_vif_cfg_changed()
1030 struct ieee80211_vif *vif, in iwl_mvm_mld_config_iface_filter() argument
1041 if (vif->type != NL80211_IFTYPE_STATION || !vif->cfg.assoc || in iwl_mvm_mld_config_iface_filter()
1042 !vif->p2p) in iwl_mvm_mld_config_iface_filter()
1046 iwl_mvm_mld_mac_ctxt_changed(mvm, vif, false); in iwl_mvm_mld_config_iface_filter()
1052 struct ieee80211_vif *vif, in iwl_mvm_mld_mac_conf_tx() argument
1057 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_mld_mac_conf_tx()
1068 if (vif->type == NL80211_IFTYPE_P2P_DEVICE) { in iwl_mvm_mld_mac_conf_tx()
1072 ret = iwl_mvm_link_changed(mvm, vif, &vif->bss_conf, in iwl_mvm_mld_mac_conf_tx()
1081 static int iwl_mvm_mld_roc_link(struct iwl_mvm *mvm, struct ieee80211_vif *vif) in iwl_mvm_mld_roc_link() argument
1088 ret = iwl_mvm_link_changed(mvm, vif, &vif->bss_conf, 0, false); in iwl_mvm_mld_roc_link()
1092 ret = iwl_mvm_link_changed(mvm, vif, &vif->bss_conf, in iwl_mvm_mld_roc_link()
1103 return iwl_mvm_mld_add_bcast_sta(mvm, vif, &vif->bss_conf); in iwl_mvm_mld_roc_link()
1106 static int iwl_mvm_mld_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif, in iwl_mvm_mld_roc() argument
1115 return iwl_mvm_roc_common(hw, vif, channel, duration, type, &ops); in iwl_mvm_mld_roc()
1120 struct ieee80211_vif *vif, in iwl_mvm_mld_change_vif_links() argument
1125 unsigned int n_active = iwl_mvm_mld_count_active_links(vif); in iwl_mvm_mld_change_vif_links()
1126 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); in iwl_mvm_mld_change_vif_links()
1133 n_active > iwl_mvm_max_active_links(mvm, vif)) in iwl_mvm_mld_change_vif_links()
1163 err = iwl_mvm_disable_link(mvm, vif, &vif->bss_conf); in iwl_mvm_mld_change_vif_links()
1173 err = iwl_mvm_disable_link(mvm, vif, link_conf); in iwl_mvm_mld_change_vif_links()
1181 link_conf = link_conf_dereference_protected(vif, i); in iwl_mvm_mld_change_vif_links()
1189 err = iwl_mvm_add_link(mvm, vif, link_conf); in iwl_mvm_mld_change_vif_links()
1198 err = iwl_mvm_add_link(mvm, vif, &vif->bss_conf); in iwl_mvm_mld_change_vif_links()
1213 struct ieee80211_vif *vif, in iwl_mvm_mld_change_sta_links() argument
1221 ret = iwl_mvm_mld_update_sta_links(mvm, vif, sta, old_links, new_links); in iwl_mvm_mld_change_sta_links()