Lines Matching refs:sdata
27 ieee80211_link_or_deflink(struct ieee80211_sub_if_data *sdata, int link_id, in ieee80211_link_or_deflink() argument
38 if (require_valid && ieee80211_vif_is_mld(&sdata->vif)) in ieee80211_link_or_deflink()
41 return &sdata->deflink; in ieee80211_link_or_deflink()
44 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_link_or_deflink()
50 static void ieee80211_set_mu_mimo_follow(struct ieee80211_sub_if_data *sdata, in ieee80211_set_mu_mimo_follow() argument
61 memcpy(sdata->vif.bss_conf.mu_group.membership, in ieee80211_set_mu_mimo_follow()
63 memcpy(sdata->vif.bss_conf.mu_group.position, in ieee80211_set_mu_mimo_follow()
66 ieee80211_link_info_change_notify(sdata, &sdata->deflink, in ieee80211_set_mu_mimo_follow()
77 ether_addr_copy(sdata->u.mntr.mu_follow_addr, in ieee80211_set_mu_mimo_follow()
81 sdata->vif.bss_conf.mu_mimo_owner = mu_mimo_groups || mu_mimo_follow; in ieee80211_set_mu_mimo_follow()
84 static int ieee80211_set_mon_options(struct ieee80211_sub_if_data *sdata, in ieee80211_set_mon_options() argument
87 struct ieee80211_local *local = sdata->local; in ieee80211_set_mon_options()
91 if (params->flags && ieee80211_sdata_running(sdata)) { in ieee80211_set_mon_options()
102 if ((params->flags & mask) != (sdata->u.mntr.flags & mask)) in ieee80211_set_mon_options()
108 monitor_sdata = sdata; in ieee80211_set_mon_options()
125 if (ieee80211_sdata_running(sdata)) { in ieee80211_set_mon_options()
126 ieee80211_adjust_monitor_flags(sdata, -1); in ieee80211_set_mon_options()
127 sdata->u.mntr.flags = params->flags; in ieee80211_set_mon_options()
128 ieee80211_adjust_monitor_flags(sdata, 1); in ieee80211_set_mon_options()
137 sdata->u.mntr.flags = params->flags; in ieee80211_set_mon_options()
144 static int ieee80211_set_ap_mbssid_options(struct ieee80211_sub_if_data *sdata, in ieee80211_set_ap_mbssid_options() argument
156 if (sdata->vif.type != NL80211_IFTYPE_AP || !params->tx_wdev) in ieee80211_set_ap_mbssid_options()
159 old = sdata_dereference(link_conf->tx_bss_conf, sdata); in ieee80211_set_ap_mbssid_options()
167 if (tx_sdata == sdata) { in ieee80211_set_ap_mbssid_options()
173 sdata); in ieee80211_set_ap_mbssid_options()
197 struct ieee80211_sub_if_data *sdata; in ieee80211_add_iface() local
204 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_add_iface()
207 err = ieee80211_set_mon_options(sdata, params); in ieee80211_add_iface()
209 ieee80211_if_remove(sdata); in ieee80211_add_iface()
228 ieee80211_vif_type_p2p(&sdata->vif)); in ieee80211_add_iface()
247 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_iface() local
248 struct ieee80211_local *local = sdata->local; in ieee80211_change_iface()
254 ret = ieee80211_if_change_type(sdata, type); in ieee80211_change_iface()
259 RCU_INIT_POINTER(sdata->u.vlan.sta, NULL); in ieee80211_change_iface()
260 ieee80211_check_fast_rx_iface(sdata); in ieee80211_change_iface()
262 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_change_iface()
268 if (ieee80211_vif_is_mld(&sdata->vif)) in ieee80211_change_iface()
271 sdata->u.mgd.use_4addr = params->use_4addr; in ieee80211_change_iface()
275 sta = sta_info_get(sdata, sdata->deflink.u.mgd.bssid); in ieee80211_change_iface()
277 drv_sta_set_4addr(local, sdata, &sta->sta, in ieee80211_change_iface()
281 ieee80211_send_4addr_nullfunc(local, sdata); in ieee80211_change_iface()
284 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) { in ieee80211_change_iface()
285 ret = ieee80211_set_mon_options(sdata, params); in ieee80211_change_iface()
296 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_start_p2p_device() local
299 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_start_p2p_device()
301 ret = ieee80211_check_combinations(sdata, NULL, 0, 0, -1); in ieee80211_start_p2p_device()
318 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_start_nan() local
321 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_start_nan()
323 ret = ieee80211_check_combinations(sdata, NULL, 0, 0, -1); in ieee80211_start_nan()
331 ret = drv_start_nan(sdata->local, sdata, conf); in ieee80211_start_nan()
333 ieee80211_sdata_stop(sdata); in ieee80211_start_nan()
335 sdata->u.nan.conf = *conf; in ieee80211_start_nan()
343 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_stop_nan() local
345 drv_stop_nan(sdata->local, sdata); in ieee80211_stop_nan()
346 ieee80211_sdata_stop(sdata); in ieee80211_stop_nan()
354 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_nan_change_conf() local
358 if (sdata->vif.type != NL80211_IFTYPE_NAN) in ieee80211_nan_change_conf()
361 if (!ieee80211_sdata_running(sdata)) in ieee80211_nan_change_conf()
364 new_conf = sdata->u.nan.conf; in ieee80211_nan_change_conf()
372 ret = drv_nan_change_conf(sdata->local, sdata, &new_conf, changes); in ieee80211_nan_change_conf()
374 sdata->u.nan.conf = new_conf; in ieee80211_nan_change_conf()
383 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_add_nan_func() local
386 if (sdata->vif.type != NL80211_IFTYPE_NAN) in ieee80211_add_nan_func()
389 if (!ieee80211_sdata_running(sdata)) in ieee80211_add_nan_func()
392 spin_lock_bh(&sdata->u.nan.func_lock); in ieee80211_add_nan_func()
394 ret = idr_alloc(&sdata->u.nan.function_inst_ids, in ieee80211_add_nan_func()
395 nan_func, 1, sdata->local->hw.max_nan_de_entries + 1, in ieee80211_add_nan_func()
397 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_add_nan_func()
406 ret = drv_add_nan_func(sdata->local, sdata, nan_func); in ieee80211_add_nan_func()
408 spin_lock_bh(&sdata->u.nan.func_lock); in ieee80211_add_nan_func()
409 idr_remove(&sdata->u.nan.function_inst_ids, in ieee80211_add_nan_func()
411 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_add_nan_func()
418 ieee80211_find_nan_func_by_cookie(struct ieee80211_sub_if_data *sdata, in ieee80211_find_nan_func_by_cookie() argument
424 lockdep_assert_held(&sdata->u.nan.func_lock); in ieee80211_find_nan_func_by_cookie()
426 idr_for_each_entry(&sdata->u.nan.function_inst_ids, func, id) { in ieee80211_find_nan_func_by_cookie()
437 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_del_nan_func() local
441 if (sdata->vif.type != NL80211_IFTYPE_NAN || in ieee80211_del_nan_func()
442 !ieee80211_sdata_running(sdata)) in ieee80211_del_nan_func()
445 spin_lock_bh(&sdata->u.nan.func_lock); in ieee80211_del_nan_func()
447 func = ieee80211_find_nan_func_by_cookie(sdata, cookie); in ieee80211_del_nan_func()
451 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_del_nan_func()
454 drv_del_nan_func(sdata->local, sdata, instance_id); in ieee80211_del_nan_func()
461 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_noack_map() local
463 sdata->noack_map = noack_map; in ieee80211_set_noack_map()
465 ieee80211_check_fast_xmit_iface(sdata); in ieee80211_set_noack_map()
470 static int ieee80211_set_tx(struct ieee80211_sub_if_data *sdata, in ieee80211_set_tx() argument
473 struct ieee80211_local *local = sdata->local; in ieee80211_set_tx()
482 sta = sta_info_get_bss(sdata, mac_addr); in ieee80211_set_tx()
502 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_key() local
504 ieee80211_link_or_deflink(sdata, link_id, false); in ieee80211_add_key()
505 struct ieee80211_local *local = sdata->local; in ieee80211_add_key()
512 if (!ieee80211_sdata_running(sdata)) in ieee80211_add_key()
522 return ieee80211_set_tx(sdata, mac_addr, key_idx); in ieee80211_add_key()
554 sta = sta_info_get_bss(sdata, mac_addr); in ieee80211_add_key()
571 switch (sdata->vif.type) { in ieee80211_add_key()
573 if (sdata->u.mgd.mfp != IEEE80211_MFP_DISABLED) in ieee80211_add_key()
587 if (sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE) in ieee80211_add_key()
614 ieee80211_lookup_key(struct ieee80211_sub_if_data *sdata, int link_id, in ieee80211_lookup_key() argument
617 struct ieee80211_local *local __maybe_unused = sdata->local; in ieee80211_lookup_key()
618 struct ieee80211_link_data *link = &sdata->deflink; in ieee80211_lookup_key()
622 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_lookup_key()
631 sta = sta_info_get_bss(sdata, mac_addr); in ieee80211_lookup_key()
659 return wiphy_dereference(local->hw.wiphy, sdata->keys[key_idx]); in ieee80211_lookup_key()
667 return wiphy_dereference(local->hw.wiphy, sdata->keys[key_idx]); in ieee80211_lookup_key()
676 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_key() local
677 struct ieee80211_local *local = sdata->local; in ieee80211_del_key()
682 key = ieee80211_lookup_key(sdata, link_id, key_idx, pairwise, mac_addr); in ieee80211_del_key()
686 ieee80211_key_free(key, sdata->vif.type == NL80211_IFTYPE_STATION); in ieee80211_del_key()
697 struct ieee80211_sub_if_data *sdata; in ieee80211_get_key() local
707 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_key()
711 key = ieee80211_lookup_key(sdata, link_id, key_idx, pairwise, mac_addr); in ieee80211_get_key()
727 drv_get_key_seq(sdata->local, key, &kseq); in ieee80211_get_key()
760 drv_get_key_seq(sdata->local, key, &kseq); in ieee80211_get_key()
779 drv_get_key_seq(sdata->local, key, &kseq); in ieee80211_get_key()
798 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_config_default_key() local
800 ieee80211_link_or_deflink(sdata, link_id, false); in ieee80211_config_default_key()
814 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_config_default_mgmt_key() local
816 ieee80211_link_or_deflink(sdata, link_id, true); in ieee80211_config_default_mgmt_key()
830 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_config_default_beacon_key() local
832 ieee80211_link_or_deflink(sdata, link_id, true); in ieee80211_config_default_beacon_key()
857 sband = ieee80211_get_sband(sta->sdata); in sta_set_rate_info_tx()
877 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_dump_station() local
878 struct ieee80211_local *local = sdata->local; in ieee80211_dump_station()
884 sta = sta_info_get_by_idx(sdata, idx); in ieee80211_dump_station()
912 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_station() local
913 struct ieee80211_local *local = sdata->local; in ieee80211_get_station()
919 sta = sta_info_get_bss(sdata, mac); in ieee80211_get_station()
939 struct ieee80211_sub_if_data *sdata; in ieee80211_set_monitor_channel() local
945 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_monitor_channel()
951 sdata = wiphy_dereference(wiphy, local->monitor_sdata); in ieee80211_set_monitor_channel()
952 if (!sdata) in ieee80211_set_monitor_channel()
956 if (rcu_access_pointer(sdata->deflink.conf->chanctx_conf) && in ieee80211_set_monitor_channel()
957 cfg80211_chandef_identical(&sdata->vif.bss_conf.chanreq.oper, in ieee80211_set_monitor_channel()
961 ieee80211_link_release_channel(&sdata->deflink); in ieee80211_set_monitor_channel()
962 ret = ieee80211_link_use_channel(&sdata->deflink, &chanreq, in ieee80211_set_monitor_channel()
972 ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata, in ieee80211_set_probe_resp() argument
983 old = sdata_dereference(link->u.ap.probe_resp, sdata); in ieee80211_set_probe_resp()
1006 static int ieee80211_set_fils_discovery(struct ieee80211_sub_if_data *sdata, in ieee80211_set_fils_discovery() argument
1022 old = sdata_dereference(link->u.ap.fils_discovery, sdata); in ieee80211_set_fils_discovery()
1042 ieee80211_set_unsol_bcast_probe_resp(struct ieee80211_sub_if_data *sdata, in ieee80211_set_unsol_bcast_probe_resp() argument
1055 old = sdata_dereference(link->u.ap.unsol_bcast_probe_resp, sdata); in ieee80211_set_unsol_bcast_probe_resp()
1075 ieee80211_set_s1g_short_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_set_s1g_short_beacon() argument
1081 sdata_dereference(link->u.ap.s1g_short_beacon, sdata); in ieee80211_set_s1g_short_beacon()
1116 struct ieee80211_sub_if_data *sdata, in ieee80211_set_ftm_responder_params() argument
1191 ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_assign_beacon() argument
1206 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_assign_beacon()
1306 err = ieee80211_set_probe_resp(sdata, params->probe_resp, in ieee80211_assign_beacon()
1317 err = ieee80211_set_ftm_responder_params(sdata, in ieee80211_assign_beacon()
1333 sdata->u.ap.active = true; in ieee80211_assign_beacon()
1342 static u8 ieee80211_num_beaconing_links(struct ieee80211_sub_if_data *sdata) in ieee80211_num_beaconing_links() argument
1347 if (sdata->vif.type != NL80211_IFTYPE_AP && in ieee80211_num_beaconing_links()
1348 sdata->vif.type != NL80211_IFTYPE_P2P_GO) in ieee80211_num_beaconing_links()
1355 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_num_beaconing_links()
1359 if (sdata_dereference(link->u.ap.beacon, sdata)) in ieee80211_num_beaconing_links()
1369 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_start_ap() local
1370 struct ieee80211_local *local = sdata->local; in ieee80211_start_ap()
1389 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_start_ap()
1395 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_start_ap()
1401 link->needed_rx_chains = sdata->local->rx_chains; in ieee80211_start_ap()
1492 if (sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_start_ap()
1494 err = ieee80211_set_ap_mbssid_options(sdata, in ieee80211_start_ap()
1514 sdata->control_port_protocol = params->crypto.control_port_ethertype; in ieee80211_start_ap()
1515 sdata->control_port_no_encrypt = params->crypto.control_port_no_encrypt; in ieee80211_start_ap()
1516 sdata->control_port_over_nl80211 = in ieee80211_start_ap()
1518 sdata->control_port_no_preauth = in ieee80211_start_ap()
1521 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) { in ieee80211_start_ap()
1534 link_conf->allow_p2p_go_ps = sdata->vif.p2p; in ieee80211_start_ap()
1539 sdata->vif.cfg.s1g = params->chandef.chan->band == NL80211_BAND_S1GHZ; in ieee80211_start_ap()
1541 sdata->vif.cfg.ssid_len = params->ssid_len; in ieee80211_start_ap()
1543 memcpy(sdata->vif.cfg.ssid, params->ssid, in ieee80211_start_ap()
1556 sdata->beacon_rate_set = false; in ieee80211_start_ap()
1560 sdata->beacon_rateidx_mask[i] = in ieee80211_start_ap()
1562 if (sdata->beacon_rateidx_mask[i]) in ieee80211_start_ap()
1563 sdata->beacon_rate_set = true; in ieee80211_start_ap()
1570 err = ieee80211_assign_beacon(sdata, link, ¶ms->beacon, NULL, NULL, in ieee80211_start_ap()
1575 err = ieee80211_set_fils_discovery(sdata, ¶ms->fils_discovery, in ieee80211_start_ap()
1580 err = ieee80211_set_unsol_bcast_probe_resp(sdata, in ieee80211_start_ap()
1586 if (sdata->vif.cfg.s1g) { in ieee80211_start_ap()
1587 err = ieee80211_set_s1g_short_beacon(sdata, link, in ieee80211_start_ap()
1593 err = drv_start_ap(sdata->local, sdata, link_conf); in ieee80211_start_ap()
1595 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_start_ap()
1601 if (ieee80211_num_beaconing_links(sdata) == 0) in ieee80211_start_ap()
1602 sdata->u.ap.active = false; in ieee80211_start_ap()
1607 tsf = drv_get_tsf(local, sdata); in ieee80211_start_ap()
1608 ieee80211_recalc_dtim(sdata, tsf); in ieee80211_start_ap()
1611 ieee80211_recalc_sb_count(sdata, tsf); in ieee80211_start_ap()
1613 ieee80211_vif_cfg_change_notify(sdata, BSS_CHANGED_SSID); in ieee80211_start_ap()
1614 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_start_ap()
1616 if (ieee80211_num_beaconing_links(sdata) <= 1) in ieee80211_start_ap()
1619 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) in ieee80211_start_ap()
1634 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_beacon() local
1644 link = sdata_dereference(sdata->link[beacon->link_id], sdata); in ieee80211_change_beacon()
1656 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_change_beacon()
1660 err = ieee80211_assign_beacon(sdata, link, beacon, NULL, NULL, in ieee80211_change_beacon()
1665 err = ieee80211_set_fils_discovery(sdata, ¶ms->fils_discovery, in ieee80211_change_beacon()
1670 err = ieee80211_set_unsol_bcast_probe_resp(sdata, in ieee80211_change_beacon()
1677 err = ieee80211_set_s1g_short_beacon(sdata, link, in ieee80211_change_beacon()
1689 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_change_beacon()
1707 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_stop_ap() local
1709 struct ieee80211_local *local = sdata->local; in ieee80211_stop_ap()
1717 sdata_dereference(sdata->link[link_id], sdata); in ieee80211_stop_ap()
1723 old_beacon = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_stop_ap()
1727 sdata); in ieee80211_stop_ap()
1729 sdata); in ieee80211_stop_ap()
1732 sdata); in ieee80211_stop_ap()
1734 sdata_dereference(link->u.ap.s1g_short_beacon, sdata); in ieee80211_stop_ap()
1739 ieee80211_vif_unblock_queues_csa(sdata); in ieee80211_stop_ap()
1744 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) in ieee80211_stop_ap()
1747 if (ieee80211_num_beaconing_links(sdata) <= 1) { in ieee80211_stop_ap()
1749 sdata->u.ap.active = false; in ieee80211_stop_ap()
1776 __sta_info_flush(sdata, true, link_id, NULL); in ieee80211_stop_ap()
1784 ieee80211_stop_mbssid(sdata); in ieee80211_stop_ap()
1788 sdata->beacon_rate_set = false; in ieee80211_stop_ap()
1789 sdata->vif.cfg.ssid_len = 0; in ieee80211_stop_ap()
1790 sdata->vif.cfg.s1g = false; in ieee80211_stop_ap()
1791 clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); in ieee80211_stop_ap()
1792 ieee80211_link_info_change_notify(sdata, link, in ieee80211_stop_ap()
1795 if (sdata->wdev.links[link_id].cac_started) { in ieee80211_stop_ap()
1798 cfg80211_cac_event(sdata->dev, &chandef, in ieee80211_stop_ap()
1803 drv_stop_ap(sdata->local, sdata, link_conf); in ieee80211_stop_ap()
1806 local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps.bc_buf); in ieee80211_stop_ap()
1807 ieee80211_purge_tx_queue(&local->hw, &sdata->u.ap.ps.bc_buf); in ieee80211_stop_ap()
1880 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_apply_mesh_params() local
1887 changed = mesh_plink_inc_estab_count(sdata); in sta_apply_mesh_params()
1893 sdata->u.mesh.mshcfg.power_mode); in sta_apply_mesh_params()
1907 changed = mesh_plink_dec_estab_count(sdata); in sta_apply_mesh_params()
1936 ieee80211_mbss_info_change_notify(sdata, changed); in sta_apply_mesh_params()
1952 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_link_apply_parameters() local
1955 sdata_dereference(sdata->link[link_id], sdata); in sta_link_apply_parameters()
2007 ret = drv_sta_set_txpwr(local, sdata, sta); in sta_link_apply_parameters()
2021 ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, in sta_link_apply_parameters()
2026 ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband, in sta_link_apply_parameters()
2031 ieee80211_he_cap_ie_to_sta_he_cap(sdata, sband, in sta_link_apply_parameters()
2038 ieee80211_eht_cap_ie_to_sta_eht_cap(sdata, sband, in sta_link_apply_parameters()
2046 ieee80211_s1g_cap_to_sta_s1g_cap(sdata, params->s1g_capa, in sta_link_apply_parameters()
2069 __ieee80211_vht_handle_opmode(sdata, link_sta, in sta_link_apply_parameters()
2081 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_apply_parameters() local
2088 if (ieee80211_vif_is_mesh(&sdata->vif)) { in sta_apply_parameters()
2152 !sdata->deflink.u.mgd.tdls_chan_switch_prohibited && in sta_apply_parameters()
2158 !sdata->u.mgd.tdls_wider_bw_prohibited && in sta_apply_parameters()
2201 if (ieee80211_vif_is_mesh(&sdata->vif)) in sta_apply_parameters()
2228 struct ieee80211_sub_if_data *sdata; in ieee80211_add_station() local
2234 sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); in ieee80211_add_station()
2236 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && in ieee80211_add_station()
2237 sdata->vif.type != NL80211_IFTYPE_AP) in ieee80211_add_station()
2240 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_station()
2242 if (ether_addr_equal(mac, sdata->vif.addr)) in ieee80211_add_station()
2249 sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_add_station()
2250 !sdata->u.mgd.associated) in ieee80211_add_station()
2259 sta = sta_info_alloc_with_link(sdata, mac, in ieee80211_add_station()
2264 sta = sta_info_alloc(sdata, mac, GFP_KERNEL); in ieee80211_add_station()
2297 struct ieee80211_sub_if_data *sdata; in ieee80211_del_station() local
2299 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_station()
2302 return sta_info_destroy_addr_bss(sdata, params->mac); in ieee80211_del_station()
2304 sta_info_flush(sdata, params->link_id); in ieee80211_del_station()
2312 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_station() local
2321 sta = sta_info_get_bss(sdata, mac); in ieee80211_change_station()
2325 switch (sdata->vif.type) { in ieee80211_change_station()
2327 if (sdata->u.mesh.user_mpm) in ieee80211_change_station()
2360 if (params->vlan && params->vlan != sta->sdata->dev) { in ieee80211_change_station()
2369 drv_sta_set_4addr(local, sta->sdata, &sta->sta, true); in ieee80211_change_station()
2372 if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_change_station()
2373 sta->sdata->u.vlan.sta) in ieee80211_change_station()
2374 RCU_INIT_POINTER(sta->sdata->u.vlan.sta, NULL); in ieee80211_change_station()
2377 ieee80211_vif_dec_num_mcast(sta->sdata); in ieee80211_change_station()
2379 sta->sdata = vlansdata; in ieee80211_change_station()
2384 ieee80211_vif_inc_num_mcast(sta->sdata); in ieee80211_change_station()
2385 cfg80211_send_layer2_update(sta->sdata->dev, in ieee80211_change_station()
2394 if (sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_change_station()
2397 ieee80211_recalc_ps_vif(sdata); in ieee80211_change_station()
2407 struct ieee80211_sub_if_data *sdata; in ieee80211_add_mpath() local
2411 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_mpath()
2414 sta = sta_info_get(sdata, next_hop); in ieee80211_add_mpath()
2420 mpath = mesh_path_add(sdata, dst); in ieee80211_add_mpath()
2435 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_mpath() local
2438 return mesh_path_del(sdata, dst); in ieee80211_del_mpath()
2440 mesh_path_flush_by_iface(sdata); in ieee80211_del_mpath()
2447 struct ieee80211_sub_if_data *sdata; in ieee80211_change_mpath() local
2451 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_mpath()
2455 sta = sta_info_get(sdata, next_hop); in ieee80211_change_mpath()
2461 mpath = mesh_path_lookup(sdata, dst); in ieee80211_change_mpath()
2485 pinfo->generation = mpath->sdata->u.mesh.mesh_paths_generation; in mpath_set_pinfo()
2523 struct ieee80211_sub_if_data *sdata; in ieee80211_get_mpath() local
2526 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_mpath()
2529 mpath = mesh_path_lookup(sdata, dst); in ieee80211_get_mpath()
2544 struct ieee80211_sub_if_data *sdata; in ieee80211_dump_mpath() local
2547 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_dump_mpath()
2550 mpath = mesh_path_lookup_by_idx(sdata, idx); in ieee80211_dump_mpath()
2567 pinfo->generation = mpath->sdata->u.mesh.mpp_paths_generation; in mpp_set_pinfo()
2574 struct ieee80211_sub_if_data *sdata; in ieee80211_get_mpp() local
2577 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_mpp()
2580 mpath = mpp_path_lookup(sdata, dst); in ieee80211_get_mpp()
2595 struct ieee80211_sub_if_data *sdata; in ieee80211_dump_mpp() local
2598 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_dump_mpp()
2601 mpath = mpp_path_lookup_by_idx(sdata, idx); in ieee80211_dump_mpp()
2616 struct ieee80211_sub_if_data *sdata; in ieee80211_get_mesh_config() local
2617 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_mesh_config()
2619 memcpy(conf, &(sdata->u.mesh.mshcfg), sizeof(struct mesh_config)); in ieee80211_get_mesh_config()
2632 struct ieee80211_sub_if_data *sdata = container_of(ifmsh, in copy_mesh_setup() local
2664 memcpy(sdata->vif.bss_conf.mcast_rate, setup->mcast_rate, in copy_mesh_setup()
2666 sdata->vif.bss_conf.basic_rates = setup->basic_rates; in copy_mesh_setup()
2668 sdata->vif.bss_conf.beacon_int = setup->beacon_interval; in copy_mesh_setup()
2669 sdata->vif.bss_conf.dtim_period = setup->dtim_period; in copy_mesh_setup()
2671 sdata->beacon_rate_set = false; in copy_mesh_setup()
2672 if (wiphy_ext_feature_isset(sdata->local->hw.wiphy, in copy_mesh_setup()
2675 sdata->beacon_rateidx_mask[i] = in copy_mesh_setup()
2677 if (sdata->beacon_rateidx_mask[i]) in copy_mesh_setup()
2678 sdata->beacon_rate_set = true; in copy_mesh_setup()
2690 struct ieee80211_sub_if_data *sdata; in ieee80211_update_mesh_config() local
2693 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_update_mesh_config()
2694 ifmsh = &sdata->u.mesh; in ieee80211_update_mesh_config()
2697 conf = &(sdata->u.mesh.mshcfg); in ieee80211_update_mesh_config()
2765 if (!ieee80211_hw_check(&sdata->local->hw, SIGNAL_DBM)) in ieee80211_update_mesh_config()
2771 sdata->vif.bss_conf.ht_operation_mode = nconf->ht_opmode; in ieee80211_update_mesh_config()
2772 ieee80211_link_info_change_notify(sdata, &sdata->deflink, in ieee80211_update_mesh_config()
2786 ieee80211_mps_local_status_update(sdata); in ieee80211_update_mesh_config()
2801 ieee80211_mbss_info_change_notify(sdata, BSS_CHANGED_BEACON); in ieee80211_update_mesh_config()
2809 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_join_mesh() local
2811 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_join_mesh()
2814 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_join_mesh()
2821 sdata->control_port_over_nl80211 = setup->control_port_over_nl80211; in ieee80211_join_mesh()
2824 sdata->deflink.smps_mode = IEEE80211_SMPS_OFF; in ieee80211_join_mesh()
2825 sdata->deflink.needed_rx_chains = sdata->local->rx_chains; in ieee80211_join_mesh()
2827 err = ieee80211_link_use_channel(&sdata->deflink, &chanreq, in ieee80211_join_mesh()
2832 return ieee80211_start_mesh(sdata); in ieee80211_join_mesh()
2837 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_leave_mesh() local
2839 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_leave_mesh()
2841 ieee80211_stop_mesh(sdata); in ieee80211_leave_mesh()
2842 ieee80211_link_release_channel(&sdata->deflink); in ieee80211_leave_mesh()
2843 kfree(sdata->u.mesh.ie); in ieee80211_leave_mesh()
2853 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_bss() local
2858 link = ieee80211_link_or_deflink(sdata, params->link_id, true); in ieee80211_change_bss()
2862 if (!sdata_dereference(link->u.ap.beacon, sdata)) in ieee80211_change_bss()
2903 sdata->flags |= IEEE80211_SDATA_DONT_BRIDGE_PACKETS; in ieee80211_change_bss()
2905 sdata->flags &= ~IEEE80211_SDATA_DONT_BRIDGE_PACKETS; in ieee80211_change_bss()
2906 ieee80211_check_fast_rx_iface(sdata); in ieee80211_change_bss()
2932 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_change_bss()
2942 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_txq_params() local
2944 ieee80211_link_or_deflink(sdata, params->link_id, true); in ieee80211_set_txq_params()
2968 ieee80211_regulatory_limit_wmm_params(sdata, &p, params->ac); in ieee80211_set_txq_params()
2978 ieee80211_link_info_change_notify(sdata, link, in ieee80211_set_txq_params()
3003 struct ieee80211_sub_if_data *sdata; in ieee80211_scan() local
3005 sdata = IEEE80211_WDEV_TO_SUB_IF(req->wdev); in ieee80211_scan()
3007 switch (ieee80211_vif_type_p2p(&sdata->vif)) { in ieee80211_scan()
3015 if (sdata->local->ops->hw_scan) in ieee80211_scan()
3031 if (ieee80211_num_beaconing_links(sdata) && in ieee80211_scan()
3041 return ieee80211_request_scan(sdata, req); in ieee80211_scan()
3054 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_sched_scan_start() local
3056 if (!sdata->local->ops->sched_scan_start) in ieee80211_sched_scan_start()
3059 return ieee80211_request_sched_scan_start(sdata, req); in ieee80211_sched_scan_start()
3123 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_mcast_rate() local
3125 memcpy(sdata->vif.bss_conf.mcast_rate, rate, in ieee80211_set_mcast_rate()
3128 if (ieee80211_sdata_running(sdata)) in ieee80211_set_mcast_rate()
3129 ieee80211_link_info_change_notify(sdata, &sdata->deflink, in ieee80211_set_mcast_rate()
3209 struct ieee80211_sub_if_data *sdata; in ieee80211_set_tx_power() local
3234 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_set_tx_power()
3236 if (sdata->vif.type == NL80211_IFTYPE_MONITOR && in ieee80211_set_tx_power()
3241 sdata = wiphy_dereference(local->hw.wiphy, in ieee80211_set_tx_power()
3243 if (!sdata) in ieee80211_set_tx_power()
3248 link_id < ARRAY_SIZE(sdata->link); in ieee80211_set_tx_power()
3251 wiphy_dereference(wiphy, sdata->link[link_id]); in ieee80211_set_tx_power()
3270 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_set_tx_power()
3271 if (sdata->vif.type == NL80211_IFTYPE_MONITOR && in ieee80211_set_tx_power()
3278 link_id < ARRAY_SIZE(sdata->link); in ieee80211_set_tx_power()
3281 wiphy_dereference(wiphy, sdata->link[link_id]); in ieee80211_set_tx_power()
3292 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_set_tx_power()
3293 if (sdata->vif.type == NL80211_IFTYPE_MONITOR && in ieee80211_set_tx_power()
3298 link_id < ARRAY_SIZE(sdata->link); in ieee80211_set_tx_power()
3301 wiphy_dereference(wiphy, sdata->link[link_id]); in ieee80211_set_tx_power()
3311 sdata = wiphy_dereference(local->hw.wiphy, in ieee80211_set_tx_power()
3313 if (sdata && ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) { in ieee80211_set_tx_power()
3314 sdata->deflink.user_power_level = local->user_power_level; in ieee80211_set_tx_power()
3315 if (txp_type != sdata->vif.bss_conf.txpower_type) in ieee80211_set_tx_power()
3317 sdata->vif.bss_conf.txpower_type = txp_type; in ieee80211_set_tx_power()
3319 ieee80211_recalc_txpower(&sdata->deflink, in ieee80211_set_tx_power()
3338 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_get_tx_power() local
3342 (sdata->flags & IEEE80211_SDATA_IN_DRIVER)) in ieee80211_get_tx_power()
3343 return drv_get_txpower(local, sdata, link_id, dbm); in ieee80211_get_tx_power()
3348 link_data = wiphy_dereference(wiphy, sdata->link[link_id]); in ieee80211_get_tx_power()
3382 struct ieee80211_sub_if_data *sdata; in ieee80211_testmode_cmd() local
3384 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_testmode_cmd()
3385 if (sdata->flags & IEEE80211_SDATA_IN_DRIVER) in ieee80211_testmode_cmd()
3386 vif = &sdata->vif; in ieee80211_testmode_cmd()
3406 int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, in __ieee80211_request_smps_mgd() argument
3416 lockdep_assert_wiphy(sdata->local->hw.wiphy); in __ieee80211_request_smps_mgd()
3418 if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION)) in __ieee80211_request_smps_mgd()
3421 if (!ieee80211_vif_link_active(&sdata->vif, link->link_id)) in __ieee80211_request_smps_mgd()
3430 if (sdata->vif.driver_flags & IEEE80211_VIF_EML_ACTIVE) in __ieee80211_request_smps_mgd()
3442 if (!sdata->u.mgd.associated || in __ieee80211_request_smps_mgd()
3446 ap = sdata->vif.cfg.ap_addr; in __ieee80211_request_smps_mgd()
3449 list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) { in __ieee80211_request_smps_mgd()
3450 if (!sta->sta.tdls || sta->sdata != sdata || !sta->uploaded || in __ieee80211_request_smps_mgd()
3460 if (tdls_peer_found || !sdata->u.mgd.powersave) in __ieee80211_request_smps_mgd()
3467 err = ieee80211_send_smps_action(sdata, smps_mode, in __ieee80211_request_smps_mgd()
3469 ieee80211_vif_is_mld(&sdata->vif) ? in __ieee80211_request_smps_mgd()
3482 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_power_mgmt() local
3486 if (sdata->vif.type != NL80211_IFTYPE_STATION) in ieee80211_set_power_mgmt()
3492 if (enabled == sdata->u.mgd.powersave && in ieee80211_set_power_mgmt()
3496 sdata->u.mgd.powersave = enabled; in ieee80211_set_power_mgmt()
3500 for (link_id = 0; link_id < ARRAY_SIZE(sdata->link); link_id++) { in ieee80211_set_power_mgmt()
3503 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_set_power_mgmt()
3507 __ieee80211_request_smps_mgd(sdata, link, in ieee80211_set_power_mgmt()
3515 ieee80211_recalc_ps_vif(sdata); in ieee80211_set_power_mgmt()
3516 ieee80211_check_fast_rx_iface(sdata); in ieee80211_set_power_mgmt()
3521 static void ieee80211_set_cqm_rssi_link(struct ieee80211_sub_if_data *sdata, in ieee80211_set_cqm_rssi_link() argument
3544 if (!ieee80211_vif_link_active(&sdata->vif, link->link_id)) in ieee80211_set_cqm_rssi_link()
3547 if (sdata->u.mgd.associated && in ieee80211_set_cqm_rssi_link()
3548 (sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)) in ieee80211_set_cqm_rssi_link()
3549 ieee80211_link_info_change_notify(sdata, link, BSS_CHANGED_CQM); in ieee80211_set_cqm_rssi_link()
3556 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_cqm_rssi_config() local
3557 struct ieee80211_vif *vif = &sdata->vif; in ieee80211_set_cqm_rssi_config()
3567 sdata_dereference(sdata->link[link_id], sdata); in ieee80211_set_cqm_rssi_config()
3569 ieee80211_set_cqm_rssi_link(sdata, link, rssi_thold, rssi_hyst, in ieee80211_set_cqm_rssi_config()
3580 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_cqm_rssi_range_config() local
3581 struct ieee80211_vif *vif = &sdata->vif; in ieee80211_set_cqm_rssi_range_config()
3590 sdata_dereference(sdata->link[link_id], sdata); in ieee80211_set_cqm_rssi_range_config()
3592 ieee80211_set_cqm_rssi_link(sdata, link, 0, 0, in ieee80211_set_cqm_rssi_range_config()
3605 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_bitrate_mask() local
3609 if (!ieee80211_sdata_running(sdata)) in ieee80211_set_bitrate_mask()
3618 if (rcu_access_pointer(sdata->vif.bss_conf.chanctx_conf) && in ieee80211_set_bitrate_mask()
3619 sdata->vif.bss_conf.chanreq.oper.chan) { in ieee80211_set_bitrate_mask()
3620 u32 basic_rates = sdata->vif.bss_conf.basic_rates; in ieee80211_set_bitrate_mask()
3623 band = sdata->vif.bss_conf.chanreq.oper.chan->band; in ieee80211_set_bitrate_mask()
3630 ret = drv_set_bitrate_mask(local, sdata, mask); in ieee80211_set_bitrate_mask()
3639 sdata->rc_rateidx_mask[i] = mask->control[i].legacy; in ieee80211_set_bitrate_mask()
3640 memcpy(sdata->rc_rateidx_mcs_mask[i], mask->control[i].ht_mcs, in ieee80211_set_bitrate_mask()
3642 memcpy(sdata->rc_rateidx_vht_mcs_mask[i], in ieee80211_set_bitrate_mask()
3646 sdata->rc_has_mcs_mask[i] = false; in ieee80211_set_bitrate_mask()
3647 sdata->rc_has_vht_mcs_mask[i] = false; in ieee80211_set_bitrate_mask()
3652 if (sdata->rc_rateidx_mcs_mask[i][j] != 0xff) { in ieee80211_set_bitrate_mask()
3653 sdata->rc_has_mcs_mask[i] = true; in ieee80211_set_bitrate_mask()
3659 if (sdata->rc_rateidx_vht_mcs_mask[i][j] != 0xffff) { in ieee80211_set_bitrate_mask()
3660 sdata->rc_has_vht_mcs_mask[i] = true; in ieee80211_set_bitrate_mask()
3724 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_start_radar_detection() local
3726 struct ieee80211_local *local = sdata->local; in ieee80211_start_radar_detection()
3735 link_data = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_start_radar_detection()
3757 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_end_cac() local
3758 struct ieee80211_local *local = sdata->local; in ieee80211_end_cac()
3763 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_end_cac()
3764 link_data = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_end_cac()
3771 if (sdata->wdev.links[link_id].cac_started) { in ieee80211_end_cac()
3773 sdata->wdev.links[link_id].cac_started = false; in ieee80211_end_cac()
3888 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_csa_finish() local
3889 struct ieee80211_local *local = sdata->local; in ieee80211_csa_finish()
3898 link_data = rcu_dereference(sdata->link[link_id]); in ieee80211_csa_finish()
3913 if (iter->sdata == sdata || in ieee80211_csa_finish()
3917 wiphy_work_queue(iter->sdata->local->hw.wiphy, in ieee80211_csa_finish()
3930 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_channel_switch_disconnect() local
3931 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_channel_switch_disconnect()
3932 struct ieee80211_local *local = sdata->local; in ieee80211_channel_switch_disconnect()
3934 sdata_info(sdata, "channel switch failed, disconnecting\n"); in ieee80211_channel_switch_disconnect()
3942 struct ieee80211_sub_if_data *sdata = link_data->sdata; in ieee80211_set_after_csa_beacon() local
3945 switch (sdata->vif.type) { in ieee80211_set_after_csa_beacon()
3950 err = ieee80211_assign_beacon(sdata, link_data, in ieee80211_set_after_csa_beacon()
3959 err = ieee80211_ibss_finish_csa(sdata, changed); in ieee80211_set_after_csa_beacon()
3965 err = ieee80211_mesh_finish_csa(sdata, changed); in ieee80211_set_after_csa_beacon()
3980 struct ieee80211_sub_if_data *sdata = link_data->sdata; in __ieee80211_csa_finalize() local
3981 struct ieee80211_local *local = sdata->local; in __ieee80211_csa_finalize()
4017 ieee80211_link_info_change_notify(sdata, link_data, changed); in __ieee80211_csa_finalize()
4019 ieee80211_vif_unblock_queues_csa(sdata); in __ieee80211_csa_finalize()
4025 cfg80211_ch_switch_notify(sdata->dev, &link_data->csa.chanreq.oper, in __ieee80211_csa_finalize()
4033 struct ieee80211_sub_if_data *sdata = link_data->sdata; in ieee80211_csa_finalize() local
4036 sdata_info(sdata, "failed to finalize CSA on link %d, disconnecting\n", in ieee80211_csa_finalize()
4038 cfg80211_stop_iface(sdata->local->hw.wiphy, &sdata->wdev, in ieee80211_csa_finalize()
4047 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_csa_finalize_work() local
4048 struct ieee80211_local *local = sdata->local; in ieee80211_csa_finalize_work()
4056 if (!ieee80211_sdata_running(sdata)) in ieee80211_csa_finalize_work()
4066 struct ieee80211_sub_if_data *sdata = link_data->sdata; in ieee80211_set_csa_beacon() local
4070 switch (sdata->vif.type) { in ieee80211_set_csa_beacon()
4110 err = ieee80211_assign_beacon(sdata, link_data, in ieee80211_set_csa_beacon()
4120 if (!sdata->vif.cfg.ibss_joined) in ieee80211_set_csa_beacon()
4123 if (params->chandef.width != sdata->u.ibss.chandef.width) in ieee80211_set_csa_beacon()
4129 cfg80211_get_chandef_type(&sdata->u.ibss.chandef)) in ieee80211_set_csa_beacon()
4142 if (sdata->u.ibss.chandef.chan->band != in ieee80211_set_csa_beacon()
4148 err = ieee80211_ibss_csa_beacon(sdata, params, changed); in ieee80211_set_csa_beacon()
4153 ieee80211_send_action_csa(sdata, params); in ieee80211_set_csa_beacon()
4158 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_set_csa_beacon()
4161 if (sdata->vif.bss_conf.chanreq.oper.chan->band != in ieee80211_set_csa_beacon()
4175 err = ieee80211_mesh_csa_beacon(sdata, params, changed); in ieee80211_set_csa_beacon()
4183 ieee80211_send_action_csa(sdata, params); in ieee80211_set_csa_beacon()
4201 cfg80211_color_change_aborted_notify(link->sdata->dev, link->link_id); in ieee80211_color_change_abort()
4208 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in __ieee80211_channel_switch() local
4210 struct ieee80211_local *local = sdata->local; in __ieee80211_channel_switch()
4227 if (sdata->wdev.links[link_id].cac_started) in __ieee80211_channel_switch()
4233 link_data = wiphy_dereference(wiphy, sdata->link[link_id]); in __ieee80211_channel_switch()
4258 err = ieee80211_set_unsol_bcast_probe_resp(sdata, in __ieee80211_channel_switch()
4272 err = drv_pre_channel_switch(sdata, &ch_switch); in __ieee80211_channel_switch()
4283 err = ieee80211_check_combinations(sdata, NULL, chanctx->mode, 0, -1); in __ieee80211_channel_switch()
4303 ieee80211_vif_block_queues_csa(sdata); in __ieee80211_channel_switch()
4305 cfg80211_ch_switch_started_notify(sdata->dev, in __ieee80211_channel_switch()
4310 ieee80211_link_info_change_notify(sdata, link_data, changed); in __ieee80211_channel_switch()
4311 drv_channel_switch_beacon(sdata, &link_data->csa.chanreq.oper); in __ieee80211_channel_switch()
4324 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_channel_switch() local
4325 struct ieee80211_local *local = sdata->local; in ieee80211_channel_switch()
4381 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_update_mgmt_frame_registrations() local
4393 intf_change = (sdata->vif.probe_req_reg != in ieee80211_update_mgmt_frame_registrations()
4395 (sdata->vif.rx_mcast_action_reg != in ieee80211_update_mgmt_frame_registrations()
4397 sdata->vif.probe_req_reg = upd->interface_stypes & preq_mask; in ieee80211_update_mgmt_frame_registrations()
4398 sdata->vif.rx_mcast_action_reg = in ieee80211_update_mgmt_frame_registrations()
4404 if (intf_change && ieee80211_sdata_running(sdata)) in ieee80211_update_mgmt_frame_registrations()
4405 drv_config_iface_filter(local, sdata, in ieee80211_update_mgmt_frame_registrations()
4406 sdata->vif.probe_req_reg ? in ieee80211_update_mgmt_frame_registrations()
4444 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_rekey_data() local
4449 drv_set_rekey_data(local, sdata, data); in ieee80211_set_rekey_data()
4457 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_probe_client() local
4458 struct ieee80211_local *local = sdata->local; in ieee80211_probe_client()
4474 sta = sta_info_get_bss(sdata, peer); in ieee80211_probe_client()
4482 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_probe_client()
4514 memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN); in ieee80211_probe_client()
4515 memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN); in ieee80211_probe_client()
4536 ieee80211_xmit(sdata, sta, skb); in ieee80211_probe_client()
4551 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_cfg_get_channel() local
4558 link = rcu_dereference(sdata->link[link_id]); in ieee80211_cfg_get_channel()
4570 sdata->vif.type == NL80211_IFTYPE_MONITOR) { in ieee80211_cfg_get_channel()
4591 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_qos_map() local
4604 old_qos_map = sdata_dereference(sdata->qos_map, sdata); in ieee80211_set_qos_map()
4605 rcu_assign_pointer(sdata->qos_map, new_qos_map); in ieee80211_set_qos_map()
4617 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_ap_chanwidth() local
4623 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_set_ap_chanwidth()
4627 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_set_ap_chanwidth()
4636 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_tx_ts() local
4637 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_add_tx_ts()
4640 if (sdata->vif.type != NL80211_IFTYPE_STATION) in ieee80211_add_tx_ts()
4643 if (!(sdata->wmm_acm & BIT(up))) in ieee80211_add_tx_ts()
4661 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_tx_ts() local
4662 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_del_tx_ts()
4684 ieee80211_flush_queues(local, sdata, false); in ieee80211_del_tx_ts()
4691 ieee80211_sta_handle_tspec_ac_params(sdata); in ieee80211_del_tx_ts()
4707 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_nan_func_terminated() local
4714 spin_lock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_terminated()
4716 func = idr_find(&sdata->u.nan.function_inst_ids, inst_id); in ieee80211_nan_func_terminated()
4718 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_terminated()
4723 idr_remove(&sdata->u.nan.function_inst_ids, inst_id); in ieee80211_nan_func_terminated()
4725 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_terminated()
4738 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_nan_func_match() local
4744 spin_lock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_match()
4746 func = idr_find(&sdata->u.nan.function_inst_ids, match->inst_id); in ieee80211_nan_func_match()
4748 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_match()
4753 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_match()
4763 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_multicast_to_unicast() local
4765 sdata->u.ap.multicast_to_unicast = enabled; in ieee80211_set_multicast_to_unicast()
4824 struct ieee80211_sub_if_data *sdata; in ieee80211_get_txq_stats() local
4831 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_get_txq_stats()
4832 if (!sdata->vif.txq) { in ieee80211_get_txq_stats()
4836 ieee80211_fill_txq_stats(txqstats, to_txq_info(sdata->vif.txq)); in ieee80211_get_txq_stats()
4866 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_ftm_responder_stats() local
4868 return drv_get_ftm_responder_stats(local, sdata, ftm_stats); in ieee80211_get_ftm_responder_stats()
4876 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(dev); in ieee80211_start_pmsr() local
4878 return drv_start_pmsr(local, sdata, request); in ieee80211_start_pmsr()
4886 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(dev); in ieee80211_abort_pmsr() local
4888 return drv_abort_pmsr(local, sdata, request); in ieee80211_abort_pmsr()
4895 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_tid_config() local
4898 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_set_tid_config()
4900 if (!sdata->local->ops->set_tid_config) in ieee80211_set_tid_config()
4904 return drv_set_tid_config(sdata->local, sdata, NULL, tid_conf); in ieee80211_set_tid_config()
4906 sta = sta_info_get_bss(sdata, tid_conf->peer); in ieee80211_set_tid_config()
4910 return drv_set_tid_config(sdata->local, sdata, &sta->sta, tid_conf); in ieee80211_set_tid_config()
4917 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_reset_tid_config() local
4920 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_reset_tid_config()
4922 if (!sdata->local->ops->reset_tid_config) in ieee80211_reset_tid_config()
4926 return drv_reset_tid_config(sdata->local, sdata, NULL, tids); in ieee80211_reset_tid_config()
4928 sta = sta_info_get_bss(sdata, peer); in ieee80211_reset_tid_config()
4932 return drv_reset_tid_config(sdata->local, sdata, &sta->sta, tids); in ieee80211_reset_tid_config()
4950 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_set_after_color_change_beacon() local
4952 switch (sdata->vif.type) { in ieee80211_set_after_color_change_beacon()
4959 ret = ieee80211_assign_beacon(sdata, link, in ieee80211_set_after_color_change_beacon()
4982 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_set_color_change_beacon() local
4986 switch (sdata->vif.type) { in ieee80211_set_color_change_beacon()
5002 err = ieee80211_assign_beacon(sdata, link, in ieee80211_set_color_change_beacon()
5021 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_color_change_bss_config_notify() local
5023 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_color_change_bss_config_notify()
5029 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_color_change_bss_config_notify()
5035 for_each_sdata_link(sdata->local, tmp) { in ieee80211_color_change_bss_config_notify()
5036 if (tmp->sdata == sdata || in ieee80211_color_change_bss_config_notify()
5042 ieee80211_link_info_change_notify(tmp->sdata, tmp, in ieee80211_color_change_bss_config_notify()
5050 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_color_change_finalize() local
5051 struct ieee80211_local *local = sdata->local; in ieee80211_color_change_finalize()
5061 cfg80211_color_change_aborted_notify(sdata->dev, link->link_id); in ieee80211_color_change_finalize()
5068 cfg80211_color_change_notify(sdata->dev, link->link_id); in ieee80211_color_change_finalize()
5079 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_color_change_finalize_work() local
5081 struct ieee80211_local *local = sdata->local; in ieee80211_color_change_finalize_work()
5089 if (!ieee80211_sdata_running(sdata)) in ieee80211_color_change_finalize_work()
5101 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_color_collision_detection_work() local
5103 cfg80211_obss_color_collision_notify(sdata->dev, link->color_bitmap, in ieee80211_color_collision_detection_work()
5109 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_color_change_finish() local
5117 link = rcu_dereference(sdata->link[link_id]); in ieee80211_color_change_finish()
5123 wiphy_work_queue(sdata->local->hw.wiphy, in ieee80211_color_change_finish()
5134 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_obss_color_collision_notify() local
5142 link = rcu_dereference(sdata->link[link_id]); in ieee80211_obss_color_collision_notify()
5153 if (wiphy_delayed_work_pending(sdata->local->hw.wiphy, in ieee80211_obss_color_collision_notify()
5163 wiphy_delayed_work_queue(sdata->local->hw.wiphy, in ieee80211_obss_color_collision_notify()
5175 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_color_change() local
5176 struct ieee80211_local *local = sdata->local; in ieee80211_color_change()
5188 link = wiphy_dereference(wiphy, sdata->link[link_id]); in ieee80211_color_change()
5205 err = ieee80211_set_unsol_bcast_probe_resp(sdata, in ieee80211_color_change()
5218 cfg80211_color_change_started_notify(sdata->dev, params->count, link_id); in ieee80211_color_change()
5247 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_add_intf_link() local
5249 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_add_intf_link()
5254 return ieee80211_vif_set_links(sdata, wdev->valid_links, 0); in ieee80211_add_intf_link()
5261 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_del_intf_link() local
5264 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_del_intf_link()
5271 ieee80211_vif_set_links(sdata, new_links, 0); in ieee80211_del_intf_link()
5278 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_link_station() local
5285 sta = sta_info_get_bss(sdata, params->mld_mac); in ieee80211_add_link_station()
5308 link_sta = sdata_dereference(sta->link[params->link_id], sdata); in ieee80211_add_link_station()
5320 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_mod_link_station() local
5326 sta = sta_info_get_bss(sdata, params->mld_mac); in ieee80211_mod_link_station()
5341 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_link_station() local
5344 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_del_link_station()
5346 sta = sta_info_get_bss(sdata, params->mld_mac); in ieee80211_del_link_station()
5366 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_hw_timestamp() local
5367 struct ieee80211_local *local = sdata->local; in ieee80211_set_hw_timestamp()
5372 if (!check_sdata_in_driver(sdata)) in ieee80211_set_hw_timestamp()
5375 return local->ops->set_hw_timestamp(&local->hw, &sdata->vif, hwts); in ieee80211_set_hw_timestamp()
5382 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_ttlm() local
5384 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_set_ttlm()
5386 return ieee80211_req_neg_ttlm(sdata, params); in ieee80211_set_ttlm()
5393 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_assoc_ml_reconf() local
5395 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_assoc_ml_reconf()
5397 return ieee80211_mgd_assoc_ml_reconf(sdata, req); in ieee80211_assoc_ml_reconf()
5403 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_epcs() local
5405 return ieee80211_mgd_set_epcs(sdata, enable); in ieee80211_set_epcs()