Lines Matching refs:sdata
33 struct ieee80211_sub_if_data *sdata; in ieee80211_add_iface() local
41 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_add_iface()
42 sdata->u.mntr_flags = *flags; in ieee80211_add_iface()
60 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_iface() local
63 ret = ieee80211_if_change_type(sdata, type); in ieee80211_change_iface()
69 RCU_INIT_POINTER(sdata->u.vlan.sta, NULL); in ieee80211_change_iface()
72 sdata->u.mgd.use_4addr = params->use_4addr; in ieee80211_change_iface()
74 if (sdata->vif.type == NL80211_IFTYPE_MONITOR && flags) { in ieee80211_change_iface()
75 struct ieee80211_local *local = sdata->local; in ieee80211_change_iface()
77 if (ieee80211_sdata_running(sdata)) { in ieee80211_change_iface()
90 if ((*flags & mask) != (sdata->u.mntr_flags & mask)) in ieee80211_change_iface()
93 ieee80211_adjust_monitor_flags(sdata, -1); in ieee80211_change_iface()
94 sdata->u.mntr_flags = *flags; in ieee80211_change_iface()
95 ieee80211_adjust_monitor_flags(sdata, 1); in ieee80211_change_iface()
104 sdata->u.mntr_flags = *flags; in ieee80211_change_iface()
114 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_start_p2p_device() local
117 mutex_lock(&sdata->local->chanctx_mtx); in ieee80211_start_p2p_device()
118 ret = ieee80211_check_combinations(sdata, NULL, 0, 0); in ieee80211_start_p2p_device()
119 mutex_unlock(&sdata->local->chanctx_mtx); in ieee80211_start_p2p_device()
136 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_noack_map() local
138 sdata->noack_map = noack_map; in ieee80211_set_noack_map()
140 ieee80211_check_fast_xmit_iface(sdata); in ieee80211_set_noack_map()
149 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_key() local
150 struct ieee80211_local *local = sdata->local; in ieee80211_add_key()
156 if (!ieee80211_sdata_running(sdata)) in ieee80211_add_key()
177 cs = ieee80211_cs_get(local, params->cipher, sdata->vif.type); in ieee80211_add_key()
193 if (ieee80211_vif_is_mesh(&sdata->vif)) in ieee80211_add_key()
194 sta = sta_info_get(sdata, mac_addr); in ieee80211_add_key()
196 sta = sta_info_get_bss(sdata, mac_addr); in ieee80211_add_key()
214 switch (sdata->vif.type) { in ieee80211_add_key()
216 if (sdata->u.mgd.mfp != IEEE80211_MFP_DISABLED) in ieee80211_add_key()
230 if (sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE) in ieee80211_add_key()
250 err = ieee80211_key_link(key, sdata, sta); in ieee80211_add_key()
261 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_key() local
262 struct ieee80211_local *local = sdata->local; in ieee80211_del_key()
273 sta = sta_info_get_bss(sdata, mac_addr); in ieee80211_del_key()
282 key = key_mtx_dereference(local, sdata->keys[key_idx]); in ieee80211_del_key()
305 struct ieee80211_sub_if_data *sdata; in ieee80211_get_key() local
316 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_key()
321 sta = sta_info_get_bss(sdata, mac_addr); in ieee80211_get_key()
331 key = rcu_dereference(sdata->keys[key_idx]); in ieee80211_get_key()
347 drv_get_key_seq(sdata->local, key, &kseq); in ieee80211_get_key()
378 drv_get_key_seq(sdata->local, key, &kseq); in ieee80211_get_key()
397 drv_get_key_seq(sdata->local, key, &kseq); in ieee80211_get_key()
419 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_config_default_key() local
421 ieee80211_set_default_key(sdata, key_idx, uni, multi); in ieee80211_config_default_key()
430 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_config_default_mgmt_key() local
432 ieee80211_set_default_mgmt_key(sdata, key_idx); in ieee80211_config_default_mgmt_key()
451 int shift = ieee80211_vif_get_shift(&sta->sdata->vif); in sta_set_rate_info_tx()
455 ieee80211_get_sdata_band(sta->sdata)]; in sta_set_rate_info_tx()
474 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_dump_station() local
475 struct ieee80211_local *local = sdata->local; in ieee80211_dump_station()
481 sta = sta_info_get_by_idx(sdata, idx); in ieee80211_dump_station()
504 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_station() local
505 struct ieee80211_local *local = sdata->local; in ieee80211_get_station()
511 sta = sta_info_get_bss(sdata, mac); in ieee80211_get_station()
526 struct ieee80211_sub_if_data *sdata; in ieee80211_set_monitor_channel() local
535 sdata = rcu_dereference_protected( in ieee80211_set_monitor_channel()
538 if (sdata) { in ieee80211_set_monitor_channel()
539 ieee80211_vif_release_channel(sdata); in ieee80211_set_monitor_channel()
540 ret = ieee80211_vif_use_channel(sdata, chandef, in ieee80211_set_monitor_channel()
556 static int ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata, in ieee80211_set_probe_resp() argument
565 old = sdata_dereference(sdata->u.ap.probe_resp, sdata); in ieee80211_set_probe_resp()
579 rcu_assign_pointer(sdata->u.ap.probe_resp, new); in ieee80211_set_probe_resp()
586 static int ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_assign_beacon() argument
595 old = sdata_dereference(sdata->u.ap.beacon, sdata); in ieee80211_assign_beacon()
652 err = ieee80211_set_probe_resp(sdata, params->probe_resp, in ieee80211_assign_beacon()
659 rcu_assign_pointer(sdata->u.ap.beacon, new); in ieee80211_assign_beacon()
670 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_start_ap() local
671 struct ieee80211_local *local = sdata->local; in ieee80211_start_ap()
682 old = sdata_dereference(sdata->u.ap.beacon, sdata); in ieee80211_start_ap()
688 sdata->smps_mode = IEEE80211_SMPS_OFF; in ieee80211_start_ap()
691 sdata->smps_mode = IEEE80211_SMPS_STATIC; in ieee80211_start_ap()
694 sdata->smps_mode = IEEE80211_SMPS_DYNAMIC; in ieee80211_start_ap()
699 sdata->needed_rx_chains = sdata->local->rx_chains; in ieee80211_start_ap()
702 err = ieee80211_vif_use_channel(sdata, ¶ms->chandef, in ieee80211_start_ap()
705 ieee80211_vif_copy_chanctx_to_vlans(sdata, false); in ieee80211_start_ap()
714 sdata->control_port_protocol = params->crypto.control_port_ethertype; in ieee80211_start_ap()
715 sdata->control_port_no_encrypt = params->crypto.control_port_no_encrypt; in ieee80211_start_ap()
716 sdata->encrypt_headroom = ieee80211_cs_headroom(sdata->local, in ieee80211_start_ap()
718 sdata->vif.type); in ieee80211_start_ap()
720 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) { in ieee80211_start_ap()
726 ieee80211_cs_headroom(sdata->local, in ieee80211_start_ap()
731 sdata->vif.bss_conf.beacon_int = params->beacon_interval; in ieee80211_start_ap()
732 sdata->vif.bss_conf.dtim_period = params->dtim_period; in ieee80211_start_ap()
733 sdata->vif.bss_conf.enable_beacon = true; in ieee80211_start_ap()
735 sdata->vif.bss_conf.ssid_len = params->ssid_len; in ieee80211_start_ap()
737 memcpy(sdata->vif.bss_conf.ssid, params->ssid, in ieee80211_start_ap()
739 sdata->vif.bss_conf.hidden_ssid = in ieee80211_start_ap()
742 memset(&sdata->vif.bss_conf.p2p_noa_attr, 0, in ieee80211_start_ap()
743 sizeof(sdata->vif.bss_conf.p2p_noa_attr)); in ieee80211_start_ap()
744 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow = in ieee80211_start_ap()
747 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |= in ieee80211_start_ap()
750 err = ieee80211_assign_beacon(sdata, ¶ms->beacon, NULL); in ieee80211_start_ap()
752 ieee80211_vif_release_channel(sdata); in ieee80211_start_ap()
757 err = drv_start_ap(sdata->local, sdata); in ieee80211_start_ap()
759 old = sdata_dereference(sdata->u.ap.beacon, sdata); in ieee80211_start_ap()
763 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL); in ieee80211_start_ap()
764 ieee80211_vif_release_channel(sdata); in ieee80211_start_ap()
768 ieee80211_recalc_dtim(local, sdata); in ieee80211_start_ap()
769 ieee80211_bss_info_change_notify(sdata, changed); in ieee80211_start_ap()
772 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) in ieee80211_start_ap()
781 struct ieee80211_sub_if_data *sdata; in ieee80211_change_beacon() local
785 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_beacon()
786 sdata_assert_lock(sdata); in ieee80211_change_beacon()
791 if (sdata->vif.csa_active) in ieee80211_change_beacon()
794 old = sdata_dereference(sdata->u.ap.beacon, sdata); in ieee80211_change_beacon()
798 err = ieee80211_assign_beacon(sdata, params, NULL); in ieee80211_change_beacon()
801 ieee80211_bss_info_change_notify(sdata, err); in ieee80211_change_beacon()
807 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_stop_ap() local
809 struct ieee80211_local *local = sdata->local; in ieee80211_stop_ap()
814 sdata_assert_lock(sdata); in ieee80211_stop_ap()
816 old_beacon = sdata_dereference(sdata->u.ap.beacon, sdata); in ieee80211_stop_ap()
819 old_probe_resp = sdata_dereference(sdata->u.ap.probe_resp, sdata); in ieee80211_stop_ap()
823 sdata->vif.csa_active = false; in ieee80211_stop_ap()
824 if (sdata->csa_block_tx) { in ieee80211_stop_ap()
825 ieee80211_wake_vif_queues(local, sdata, in ieee80211_stop_ap()
827 sdata->csa_block_tx = false; in ieee80211_stop_ap()
832 kfree(sdata->u.ap.next_beacon); in ieee80211_stop_ap()
833 sdata->u.ap.next_beacon = NULL; in ieee80211_stop_ap()
836 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) in ieee80211_stop_ap()
841 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL); in ieee80211_stop_ap()
842 RCU_INIT_POINTER(sdata->u.ap.probe_resp, NULL); in ieee80211_stop_ap()
846 sdata->u.ap.driver_smps_mode = IEEE80211_SMPS_OFF; in ieee80211_stop_ap()
848 __sta_info_flush(sdata, true); in ieee80211_stop_ap()
849 ieee80211_free_keys(sdata, true); in ieee80211_stop_ap()
851 sdata->vif.bss_conf.enable_beacon = false; in ieee80211_stop_ap()
852 sdata->vif.bss_conf.ssid_len = 0; in ieee80211_stop_ap()
853 clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); in ieee80211_stop_ap()
854 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED); in ieee80211_stop_ap()
856 if (sdata->wdev.cac_started) { in ieee80211_stop_ap()
857 chandef = sdata->vif.bss_conf.chandef; in ieee80211_stop_ap()
858 cancel_delayed_work_sync(&sdata->dfs_cac_timer_work); in ieee80211_stop_ap()
859 cfg80211_cac_event(sdata->dev, &chandef, in ieee80211_stop_ap()
864 drv_stop_ap(sdata->local, sdata); in ieee80211_stop_ap()
867 local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps.bc_buf); in ieee80211_stop_ap()
868 skb_queue_purge(&sdata->u.ap.ps.bc_buf); in ieee80211_stop_ap()
871 ieee80211_vif_copy_chanctx_to_vlans(sdata, true); in ieee80211_stop_ap()
872 ieee80211_vif_release_channel(sdata); in ieee80211_stop_ap()
916 skb->dev = sta->sdata->dev; in ieee80211_send_layer2_update()
917 skb->protocol = eth_type_trans(skb, sta->sdata->dev); in ieee80211_send_layer2_update()
987 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_apply_mesh_params() local
994 changed = mesh_plink_inc_estab_count(sdata); in sta_apply_mesh_params()
999 sdata->u.mesh.mshcfg.power_mode); in sta_apply_mesh_params()
1008 changed = mesh_plink_dec_estab_count(sdata); in sta_apply_mesh_params()
1037 ieee80211_mbss_info_change_notify(sdata, changed); in sta_apply_mesh_params()
1047 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_apply_parameters() local
1048 enum ieee80211_band band = ieee80211_get_sdata_band(sdata); in sta_apply_parameters()
1056 if (ieee80211_vif_is_mesh(&sdata->vif)) { in sta_apply_parameters()
1117 !sdata->u.mgd.tdls_chan_switch_prohibited && in sta_apply_parameters()
1123 !sdata->u.mgd.tdls_wider_bw_prohibited && in sta_apply_parameters()
1153 ieee80211_parse_bitrates(&sdata->vif.bss_conf.chandef, in sta_apply_parameters()
1160 ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, in sta_apply_parameters()
1164 ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband, in sta_apply_parameters()
1171 __ieee80211_vht_handle_opmode(sdata, sta, in sta_apply_parameters()
1175 if (ieee80211_vif_is_mesh(&sdata->vif)) in sta_apply_parameters()
1195 struct ieee80211_sub_if_data *sdata; in ieee80211_add_station() local
1200 sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); in ieee80211_add_station()
1202 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && in ieee80211_add_station()
1203 sdata->vif.type != NL80211_IFTYPE_AP) in ieee80211_add_station()
1206 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_station()
1208 if (ether_addr_equal(mac, sdata->vif.addr)) in ieee80211_add_station()
1214 sta = sta_info_alloc(sdata, mac, GFP_KERNEL); in ieee80211_add_station()
1246 layer2_update = sdata->vif.type == NL80211_IFTYPE_AP_VLAN || in ieee80211_add_station()
1247 sdata->vif.type == NL80211_IFTYPE_AP; in ieee80211_add_station()
1266 struct ieee80211_sub_if_data *sdata; in ieee80211_del_station() local
1268 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_station()
1271 return sta_info_destroy_addr_bss(sdata, params->mac); in ieee80211_del_station()
1273 sta_info_flush(sdata); in ieee80211_del_station()
1281 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_station() local
1290 sta = sta_info_get_bss(sdata, mac); in ieee80211_change_station()
1296 switch (sdata->vif.type) { in ieee80211_change_station()
1298 if (sdata->u.mesh.user_mpm) in ieee80211_change_station()
1332 if (params->vlan && params->vlan != sta->sdata->dev) { in ieee80211_change_station()
1348 if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_change_station()
1349 sta->sdata->u.vlan.sta) { in ieee80211_change_station()
1350 RCU_INIT_POINTER(sta->sdata->u.vlan.sta, NULL); in ieee80211_change_station()
1354 sta->sdata = vlansdata; in ieee80211_change_station()
1360 atomic_dec(&sta->sdata->bss->num_mcast_sta); in ieee80211_change_station()
1362 atomic_inc(&sta->sdata->bss->num_mcast_sta); in ieee80211_change_station()
1374 if ((sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_change_station()
1375 sdata->vif.type == NL80211_IFTYPE_AP_VLAN) && in ieee80211_change_station()
1376 sta->known_smps_mode != sta->sdata->bss->req_smps && in ieee80211_change_station()
1379 ht_dbg(sta->sdata, in ieee80211_change_station()
1382 ieee80211_send_smps_action(sta->sdata, in ieee80211_change_station()
1383 sta->sdata->bss->req_smps, in ieee80211_change_station()
1385 sta->sdata->vif.bss_conf.bssid); in ieee80211_change_station()
1388 if (sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_change_station()
1391 ieee80211_recalc_ps_vif(sdata); in ieee80211_change_station()
1404 struct ieee80211_sub_if_data *sdata; in ieee80211_add_mpath() local
1408 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_mpath()
1411 sta = sta_info_get(sdata, next_hop); in ieee80211_add_mpath()
1417 mpath = mesh_path_add(sdata, dst); in ieee80211_add_mpath()
1432 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_mpath() local
1435 return mesh_path_del(sdata, dst); in ieee80211_del_mpath()
1437 mesh_path_flush_by_iface(sdata); in ieee80211_del_mpath()
1444 struct ieee80211_sub_if_data *sdata; in ieee80211_change_mpath() local
1448 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_mpath()
1452 sta = sta_info_get(sdata, next_hop); in ieee80211_change_mpath()
1458 mpath = mesh_path_lookup(sdata, dst); in ieee80211_change_mpath()
1516 struct ieee80211_sub_if_data *sdata; in ieee80211_get_mpath() local
1519 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_mpath()
1522 mpath = mesh_path_lookup(sdata, dst); in ieee80211_get_mpath()
1537 struct ieee80211_sub_if_data *sdata; in ieee80211_dump_mpath() local
1540 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_dump_mpath()
1543 mpath = mesh_path_lookup_by_idx(sdata, idx); in ieee80211_dump_mpath()
1567 struct ieee80211_sub_if_data *sdata; in ieee80211_get_mpp() local
1570 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_mpp()
1573 mpath = mpp_path_lookup(sdata, dst); in ieee80211_get_mpp()
1588 struct ieee80211_sub_if_data *sdata; in ieee80211_dump_mpp() local
1591 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_dump_mpp()
1594 mpath = mpp_path_lookup_by_idx(sdata, idx); in ieee80211_dump_mpp()
1609 struct ieee80211_sub_if_data *sdata; in ieee80211_get_mesh_config() local
1610 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_mesh_config()
1612 memcpy(conf, &(sdata->u.mesh.mshcfg), sizeof(struct mesh_config)); in ieee80211_get_mesh_config()
1626 struct ieee80211_sub_if_data *sdata = container_of(ifmsh, in copy_mesh_setup() local
1658 memcpy(sdata->vif.bss_conf.mcast_rate, setup->mcast_rate, in copy_mesh_setup()
1660 sdata->vif.bss_conf.basic_rates = setup->basic_rates; in copy_mesh_setup()
1662 sdata->vif.bss_conf.beacon_int = setup->beacon_interval; in copy_mesh_setup()
1663 sdata->vif.bss_conf.dtim_period = setup->dtim_period; in copy_mesh_setup()
1673 struct ieee80211_sub_if_data *sdata; in ieee80211_update_mesh_config() local
1676 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_update_mesh_config()
1677 ifmsh = &sdata->u.mesh; in ieee80211_update_mesh_config()
1680 conf = &(sdata->u.mesh.mshcfg); in ieee80211_update_mesh_config()
1748 if (!ieee80211_hw_check(&sdata->local->hw, SIGNAL_DBM)) in ieee80211_update_mesh_config()
1754 sdata->vif.bss_conf.ht_operation_mode = nconf->ht_opmode; in ieee80211_update_mesh_config()
1755 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_HT); in ieee80211_update_mesh_config()
1768 ieee80211_mps_local_status_update(sdata); in ieee80211_update_mesh_config()
1775 ieee80211_mbss_info_change_notify(sdata, BSS_CHANGED_BEACON); in ieee80211_update_mesh_config()
1783 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_join_mesh() local
1784 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_join_mesh()
1793 sdata->smps_mode = IEEE80211_SMPS_OFF; in ieee80211_join_mesh()
1794 sdata->needed_rx_chains = sdata->local->rx_chains; in ieee80211_join_mesh()
1796 mutex_lock(&sdata->local->mtx); in ieee80211_join_mesh()
1797 err = ieee80211_vif_use_channel(sdata, &setup->chandef, in ieee80211_join_mesh()
1799 mutex_unlock(&sdata->local->mtx); in ieee80211_join_mesh()
1803 return ieee80211_start_mesh(sdata); in ieee80211_join_mesh()
1808 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_leave_mesh() local
1810 ieee80211_stop_mesh(sdata); in ieee80211_leave_mesh()
1811 mutex_lock(&sdata->local->mtx); in ieee80211_leave_mesh()
1812 ieee80211_vif_release_channel(sdata); in ieee80211_leave_mesh()
1813 mutex_unlock(&sdata->local->mtx); in ieee80211_leave_mesh()
1823 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_bss() local
1827 if (!sdata_dereference(sdata->u.ap.beacon, sdata)) in ieee80211_change_bss()
1830 band = ieee80211_get_sdata_band(sdata); in ieee80211_change_bss()
1833 sdata->vif.bss_conf.use_cts_prot = params->use_cts_prot; in ieee80211_change_bss()
1837 sdata->vif.bss_conf.use_short_preamble = in ieee80211_change_bss()
1842 if (!sdata->vif.bss_conf.use_short_slot && in ieee80211_change_bss()
1844 sdata->vif.bss_conf.use_short_slot = true; in ieee80211_change_bss()
1849 sdata->vif.bss_conf.use_short_slot = in ieee80211_change_bss()
1855 ieee80211_parse_bitrates(&sdata->vif.bss_conf.chandef, in ieee80211_change_bss()
1859 &sdata->vif.bss_conf.basic_rates); in ieee80211_change_bss()
1865 sdata->flags |= IEEE80211_SDATA_DONT_BRIDGE_PACKETS; in ieee80211_change_bss()
1867 sdata->flags &= ~IEEE80211_SDATA_DONT_BRIDGE_PACKETS; in ieee80211_change_bss()
1871 sdata->vif.bss_conf.ht_operation_mode = in ieee80211_change_bss()
1877 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow &= in ieee80211_change_bss()
1879 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |= in ieee80211_change_bss()
1885 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |= in ieee80211_change_bss()
1889 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow &= in ieee80211_change_bss()
1894 ieee80211_bss_info_change_notify(sdata, changed); in ieee80211_change_bss()
1904 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_txq_params() local
1925 sdata->tx_conf[params->ac] = p; in ieee80211_set_txq_params()
1926 if (drv_conf_tx(local, sdata, params->ac, &p)) { in ieee80211_set_txq_params()
1933 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_QOS); in ieee80211_set_txq_params()
1957 struct ieee80211_sub_if_data *sdata; in ieee80211_scan() local
1959 sdata = IEEE80211_WDEV_TO_SUB_IF(req->wdev); in ieee80211_scan()
1961 switch (ieee80211_vif_type_p2p(&sdata->vif)) { in ieee80211_scan()
1969 if (sdata->local->ops->hw_scan) in ieee80211_scan()
1984 if (sdata->u.ap.beacon && in ieee80211_scan()
1993 return ieee80211_request_scan(sdata, req); in ieee80211_scan()
2001 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_sched_scan_start() local
2003 if (!sdata->local->ops->sched_scan_start) in ieee80211_sched_scan_start()
2006 return ieee80211_request_sched_scan_start(sdata, req); in ieee80211_sched_scan_start()
2069 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_mcast_rate() local
2071 memcpy(sdata->vif.bss_conf.mcast_rate, rate, in ieee80211_set_mcast_rate()
2134 struct ieee80211_sub_if_data *sdata; in ieee80211_set_tx_power() local
2139 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_set_tx_power()
2143 sdata->user_power_level = IEEE80211_UNSET_POWER_LEVEL; in ieee80211_set_tx_power()
2150 sdata->user_power_level = MBM_TO_DBM(mbm); in ieee80211_set_tx_power()
2154 if (txp_type != sdata->vif.bss_conf.txpower_type) { in ieee80211_set_tx_power()
2156 sdata->vif.bss_conf.txpower_type = txp_type; in ieee80211_set_tx_power()
2159 ieee80211_recalc_txpower(sdata, update_txp_type); in ieee80211_set_tx_power()
2178 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_set_tx_power()
2179 sdata->user_power_level = local->user_power_level; in ieee80211_set_tx_power()
2180 if (txp_type != sdata->vif.bss_conf.txpower_type) in ieee80211_set_tx_power()
2182 sdata->vif.bss_conf.txpower_type = txp_type; in ieee80211_set_tx_power()
2184 list_for_each_entry(sdata, &local->interfaces, list) in ieee80211_set_tx_power()
2185 ieee80211_recalc_txpower(sdata, update_txp_type); in ieee80211_set_tx_power()
2196 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_get_tx_power() local
2199 return drv_get_txpower(local, sdata, dbm); in ieee80211_get_tx_power()
2204 *dbm = sdata->vif.bss_conf.txpower; in ieee80211_get_tx_power()
2212 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_wds_peer() local
2214 memcpy(&sdata->u.wds.remote_addr, addr, ETH_ALEN); in ieee80211_set_wds_peer()
2238 struct ieee80211_sub_if_data *sdata; in ieee80211_testmode_cmd() local
2240 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_testmode_cmd()
2241 if (sdata->flags & IEEE80211_SDATA_IN_DRIVER) in ieee80211_testmode_cmd()
2242 vif = &sdata->vif; in ieee80211_testmode_cmd()
2262 int __ieee80211_request_smps_ap(struct ieee80211_sub_if_data *sdata, in __ieee80211_request_smps_ap() argument
2268 if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_AP)) in __ieee80211_request_smps_ap()
2271 if (sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT) in __ieee80211_request_smps_ap()
2274 old_req = sdata->u.ap.req_smps; in __ieee80211_request_smps_ap()
2275 sdata->u.ap.req_smps = smps_mode; in __ieee80211_request_smps_ap()
2283 if (!atomic_read(&sdata->u.ap.num_mcast_sta)) { in __ieee80211_request_smps_ap()
2284 sdata->smps_mode = smps_mode; in __ieee80211_request_smps_ap()
2285 ieee80211_queue_work(&sdata->local->hw, &sdata->recalc_smps); in __ieee80211_request_smps_ap()
2289 ht_dbg(sdata, in __ieee80211_request_smps_ap()
2291 smps_mode, atomic_read(&sdata->u.ap.num_mcast_sta)); in __ieee80211_request_smps_ap()
2293 mutex_lock(&sdata->local->sta_mtx); in __ieee80211_request_smps_ap()
2294 list_for_each_entry(sta, &sdata->local->sta_list, list) { in __ieee80211_request_smps_ap()
2299 if (sta->sdata->bss != &sdata->u.ap) in __ieee80211_request_smps_ap()
2313 ht_dbg(sdata, "Won't send SMPS to sleeping STA %pM\n", in __ieee80211_request_smps_ap()
2325 ht_dbg(sdata, "Sending SMPS to %pM\n", sta->sta.addr); in __ieee80211_request_smps_ap()
2326 ieee80211_send_smps_action(sdata, smps_mode, sta->sta.addr, in __ieee80211_request_smps_ap()
2327 sdata->vif.bss_conf.bssid); in __ieee80211_request_smps_ap()
2329 mutex_unlock(&sdata->local->sta_mtx); in __ieee80211_request_smps_ap()
2331 sdata->smps_mode = smps_mode; in __ieee80211_request_smps_ap()
2332 ieee80211_queue_work(&sdata->local->hw, &sdata->recalc_smps); in __ieee80211_request_smps_ap()
2337 int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, in __ieee80211_request_smps_mgd() argument
2346 lockdep_assert_held(&sdata->wdev.mtx); in __ieee80211_request_smps_mgd()
2348 if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION)) in __ieee80211_request_smps_mgd()
2351 old_req = sdata->u.mgd.req_smps; in __ieee80211_request_smps_mgd()
2352 sdata->u.mgd.req_smps = smps_mode; in __ieee80211_request_smps_mgd()
2363 if (!sdata->u.mgd.associated || in __ieee80211_request_smps_mgd()
2364 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT) in __ieee80211_request_smps_mgd()
2367 ap = sdata->u.mgd.associated->bssid; in __ieee80211_request_smps_mgd()
2370 list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) { in __ieee80211_request_smps_mgd()
2371 if (!sta->sta.tdls || sta->sdata != sdata || !sta->uploaded || in __ieee80211_request_smps_mgd()
2381 if (tdls_peer_found || !sdata->u.mgd.powersave) in __ieee80211_request_smps_mgd()
2388 err = ieee80211_send_smps_action(sdata, smps_mode, in __ieee80211_request_smps_mgd()
2391 sdata->u.mgd.req_smps = old_req; in __ieee80211_request_smps_mgd()
2393 ieee80211_teardown_tdls_peers(sdata); in __ieee80211_request_smps_mgd()
2401 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_power_mgmt() local
2404 if (sdata->vif.type != NL80211_IFTYPE_STATION) in ieee80211_set_power_mgmt()
2410 if (enabled == sdata->u.mgd.powersave && in ieee80211_set_power_mgmt()
2414 sdata->u.mgd.powersave = enabled; in ieee80211_set_power_mgmt()
2418 sdata_lock(sdata); in ieee80211_set_power_mgmt()
2419 __ieee80211_request_smps_mgd(sdata, sdata->u.mgd.req_smps); in ieee80211_set_power_mgmt()
2420 sdata_unlock(sdata); in ieee80211_set_power_mgmt()
2426 ieee80211_recalc_ps_vif(sdata); in ieee80211_set_power_mgmt()
2435 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_cqm_rssi_config() local
2436 struct ieee80211_vif *vif = &sdata->vif; in ieee80211_set_cqm_rssi_config()
2443 if (sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER && in ieee80211_set_cqm_rssi_config()
2444 !(sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)) in ieee80211_set_cqm_rssi_config()
2449 sdata->u.mgd.last_cqm_event_signal = 0; in ieee80211_set_cqm_rssi_config()
2452 if (sdata->u.mgd.associated && in ieee80211_set_cqm_rssi_config()
2453 sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI) in ieee80211_set_cqm_rssi_config()
2454 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_CQM); in ieee80211_set_cqm_rssi_config()
2464 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_bitrate_mask() local
2468 if (!ieee80211_sdata_running(sdata)) in ieee80211_set_bitrate_mask()
2472 ret = drv_set_bitrate_mask(local, sdata, mask); in ieee80211_set_bitrate_mask()
2481 sdata->rc_rateidx_mask[i] = mask->control[i].legacy; in ieee80211_set_bitrate_mask()
2482 memcpy(sdata->rc_rateidx_mcs_mask[i], mask->control[i].ht_mcs, in ieee80211_set_bitrate_mask()
2484 memcpy(sdata->rc_rateidx_vht_mcs_mask[i], in ieee80211_set_bitrate_mask()
2488 sdata->rc_has_mcs_mask[i] = false; in ieee80211_set_bitrate_mask()
2489 sdata->rc_has_vht_mcs_mask[i] = false; in ieee80211_set_bitrate_mask()
2494 if (~sdata->rc_rateidx_mcs_mask[i][j]) { in ieee80211_set_bitrate_mask()
2495 sdata->rc_has_mcs_mask[i] = true; in ieee80211_set_bitrate_mask()
2501 if (~sdata->rc_rateidx_vht_mcs_mask[i][j]) { in ieee80211_set_bitrate_mask()
2502 sdata->rc_has_vht_mcs_mask[i] = true; in ieee80211_set_bitrate_mask()
2548 struct ieee80211_sub_if_data *sdata, in ieee80211_start_roc_work() argument
2584 roc->sdata = sdata; in ieee80211_start_roc_work()
2612 ret = drv_remain_on_channel(local, sdata, channel, duration, type); in ieee80211_start_roc_work()
2623 if (tmp->chan != channel || tmp->sdata != sdata) in ieee80211_start_roc_work()
2700 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_remain_on_channel() local
2701 struct ieee80211_local *local = sdata->local; in ieee80211_remain_on_channel()
2705 ret = ieee80211_start_roc_work(local, sdata, chan, in ieee80211_remain_on_channel()
2793 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_cancel_remain_on_channel() local
2794 struct ieee80211_local *local = sdata->local; in ieee80211_cancel_remain_on_channel()
2804 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_start_radar_detection() local
2805 struct ieee80211_local *local = sdata->local; in ieee80211_start_radar_detection()
2815 sdata->smps_mode = IEEE80211_SMPS_OFF; in ieee80211_start_radar_detection()
2816 sdata->needed_rx_chains = local->rx_chains; in ieee80211_start_radar_detection()
2818 err = ieee80211_vif_use_channel(sdata, chandef, in ieee80211_start_radar_detection()
2823 ieee80211_queue_delayed_work(&sdata->local->hw, in ieee80211_start_radar_detection()
2824 &sdata->dfs_cac_timer_work, in ieee80211_start_radar_detection()
2890 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_csa_finish() local
2892 ieee80211_queue_work(&sdata->local->hw, in ieee80211_csa_finish()
2893 &sdata->csa_finalize_work); in ieee80211_csa_finish()
2897 static int ieee80211_set_after_csa_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_set_after_csa_beacon() argument
2902 switch (sdata->vif.type) { in ieee80211_set_after_csa_beacon()
2904 err = ieee80211_assign_beacon(sdata, sdata->u.ap.next_beacon, in ieee80211_set_after_csa_beacon()
2906 kfree(sdata->u.ap.next_beacon); in ieee80211_set_after_csa_beacon()
2907 sdata->u.ap.next_beacon = NULL; in ieee80211_set_after_csa_beacon()
2914 err = ieee80211_ibss_finish_csa(sdata); in ieee80211_set_after_csa_beacon()
2921 err = ieee80211_mesh_finish_csa(sdata); in ieee80211_set_after_csa_beacon()
2935 static int __ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata) in __ieee80211_csa_finalize() argument
2937 struct ieee80211_local *local = sdata->local; in __ieee80211_csa_finalize()
2941 sdata_assert_lock(sdata); in __ieee80211_csa_finalize()
2952 if (sdata->reserved_chanctx) { in __ieee80211_csa_finalize()
2958 if (sdata->reserved_ready) in __ieee80211_csa_finalize()
2961 return ieee80211_vif_use_reserved_context(sdata); in __ieee80211_csa_finalize()
2964 if (!cfg80211_chandef_identical(&sdata->vif.bss_conf.chandef, in __ieee80211_csa_finalize()
2965 &sdata->csa_chandef)) in __ieee80211_csa_finalize()
2968 sdata->vif.csa_active = false; in __ieee80211_csa_finalize()
2970 err = ieee80211_set_after_csa_beacon(sdata, &changed); in __ieee80211_csa_finalize()
2974 ieee80211_bss_info_change_notify(sdata, changed); in __ieee80211_csa_finalize()
2976 if (sdata->csa_block_tx) { in __ieee80211_csa_finalize()
2977 ieee80211_wake_vif_queues(local, sdata, in __ieee80211_csa_finalize()
2979 sdata->csa_block_tx = false; in __ieee80211_csa_finalize()
2982 err = drv_post_channel_switch(sdata); in __ieee80211_csa_finalize()
2986 cfg80211_ch_switch_notify(sdata->dev, &sdata->csa_chandef); in __ieee80211_csa_finalize()
2991 static void ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata) in ieee80211_csa_finalize() argument
2993 if (__ieee80211_csa_finalize(sdata)) { in ieee80211_csa_finalize()
2994 sdata_info(sdata, "failed to finalize CSA, disconnecting\n"); in ieee80211_csa_finalize()
2995 cfg80211_stop_iface(sdata->local->hw.wiphy, &sdata->wdev, in ieee80211_csa_finalize()
3002 struct ieee80211_sub_if_data *sdata = in ieee80211_csa_finalize_work() local
3005 struct ieee80211_local *local = sdata->local; in ieee80211_csa_finalize_work()
3007 sdata_lock(sdata); in ieee80211_csa_finalize_work()
3012 if (!sdata->vif.csa_active) in ieee80211_csa_finalize_work()
3015 if (!ieee80211_sdata_running(sdata)) in ieee80211_csa_finalize_work()
3018 ieee80211_csa_finalize(sdata); in ieee80211_csa_finalize_work()
3023 sdata_unlock(sdata); in ieee80211_csa_finalize_work()
3026 static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_set_csa_beacon() argument
3033 switch (sdata->vif.type) { in ieee80211_set_csa_beacon()
3035 sdata->u.ap.next_beacon = in ieee80211_set_csa_beacon()
3037 if (!sdata->u.ap.next_beacon) in ieee80211_set_csa_beacon()
3071 err = ieee80211_assign_beacon(sdata, ¶ms->beacon_csa, &csa); in ieee80211_set_csa_beacon()
3073 kfree(sdata->u.ap.next_beacon); in ieee80211_set_csa_beacon()
3080 if (!sdata->vif.bss_conf.ibss_joined) in ieee80211_set_csa_beacon()
3083 if (params->chandef.width != sdata->u.ibss.chandef.width) in ieee80211_set_csa_beacon()
3089 cfg80211_get_chandef_type(&sdata->u.ibss.chandef)) in ieee80211_set_csa_beacon()
3101 if (sdata->u.ibss.chandef.chan->band != in ieee80211_set_csa_beacon()
3107 err = ieee80211_ibss_csa_beacon(sdata, params); in ieee80211_set_csa_beacon()
3113 ieee80211_send_action_csa(sdata, params); in ieee80211_set_csa_beacon()
3118 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_set_csa_beacon()
3120 if (params->chandef.width != sdata->vif.bss_conf.chandef.width) in ieee80211_set_csa_beacon()
3124 if (sdata->vif.bss_conf.chandef.chan->band != in ieee80211_set_csa_beacon()
3138 err = ieee80211_mesh_csa_beacon(sdata, params); in ieee80211_set_csa_beacon()
3147 ieee80211_send_action_csa(sdata, params); in ieee80211_set_csa_beacon()
3163 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in __ieee80211_channel_switch() local
3164 struct ieee80211_local *local = sdata->local; in __ieee80211_channel_switch()
3171 sdata_assert_lock(sdata); in __ieee80211_channel_switch()
3177 if (sdata->wdev.cac_started) in __ieee80211_channel_switch()
3181 &sdata->vif.bss_conf.chandef)) in __ieee80211_channel_switch()
3185 if (sdata->vif.csa_active) in __ieee80211_channel_switch()
3189 conf = rcu_dereference_protected(sdata->vif.chanctx_conf, in __ieee80211_channel_switch()
3208 err = drv_pre_channel_switch(sdata, &ch_switch); in __ieee80211_channel_switch()
3212 err = ieee80211_vif_reserve_chanctx(sdata, ¶ms->chandef, in __ieee80211_channel_switch()
3219 err = ieee80211_check_combinations(sdata, NULL, chanctx->mode, 0); in __ieee80211_channel_switch()
3221 ieee80211_vif_unreserve_chanctx(sdata); in __ieee80211_channel_switch()
3225 err = ieee80211_set_csa_beacon(sdata, params, &changed); in __ieee80211_channel_switch()
3227 ieee80211_vif_unreserve_chanctx(sdata); in __ieee80211_channel_switch()
3231 sdata->csa_chandef = params->chandef; in __ieee80211_channel_switch()
3232 sdata->csa_block_tx = params->block_tx; in __ieee80211_channel_switch()
3233 sdata->vif.csa_active = true; in __ieee80211_channel_switch()
3235 if (sdata->csa_block_tx) in __ieee80211_channel_switch()
3236 ieee80211_stop_vif_queues(local, sdata, in __ieee80211_channel_switch()
3239 cfg80211_ch_switch_started_notify(sdata->dev, &sdata->csa_chandef, in __ieee80211_channel_switch()
3243 ieee80211_bss_info_change_notify(sdata, changed); in __ieee80211_channel_switch()
3244 drv_channel_switch_beacon(sdata, ¶ms->chandef); in __ieee80211_channel_switch()
3247 ieee80211_csa_finalize(sdata); in __ieee80211_channel_switch()
3258 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_channel_switch() local
3259 struct ieee80211_local *local = sdata->local; in ieee80211_channel_switch()
3303 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_mgmt_tx() local
3304 struct ieee80211_local *local = sdata->local; in ieee80211_mgmt_tx()
3322 switch (sdata->vif.type) { in ieee80211_mgmt_tx()
3324 if (!sdata->vif.bss_conf.ibss_joined) in ieee80211_mgmt_tx()
3329 if (ieee80211_vif_is_mesh(&sdata->vif) && in ieee80211_mgmt_tx()
3330 !sdata->u.mesh.mesh_id_len) in ieee80211_mgmt_tx()
3337 if (sdata->vif.type != NL80211_IFTYPE_ADHOC && in ieee80211_mgmt_tx()
3338 !ieee80211_vif_is_mesh(&sdata->vif) && in ieee80211_mgmt_tx()
3339 !rcu_access_pointer(sdata->bss->beacon)) in ieee80211_mgmt_tx()
3347 sta = sta_info_get(sdata, mgmt->da); in ieee80211_mgmt_tx()
3354 sdata_lock(sdata); in ieee80211_mgmt_tx()
3355 if (!sdata->u.mgd.associated || in ieee80211_mgmt_tx()
3358 memcmp(sdata->u.mgd.associated->bssid, in ieee80211_mgmt_tx()
3361 sdata_unlock(sdata); in ieee80211_mgmt_tx()
3383 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in ieee80211_mgmt_tx()
3415 if (sdata->vif.csa_active && in ieee80211_mgmt_tx()
3416 (sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_mgmt_tx()
3417 sdata->vif.type == NL80211_IFTYPE_MESH_POINT || in ieee80211_mgmt_tx()
3418 sdata->vif.type == NL80211_IFTYPE_ADHOC) && in ieee80211_mgmt_tx()
3425 if (sdata->vif.type == NL80211_IFTYPE_AP) in ieee80211_mgmt_tx()
3426 beacon = rcu_dereference(sdata->u.ap.beacon); in ieee80211_mgmt_tx()
3427 else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) in ieee80211_mgmt_tx()
3428 beacon = rcu_dereference(sdata->u.ibss.presp); in ieee80211_mgmt_tx()
3429 else if (ieee80211_vif_is_mesh(&sdata->vif)) in ieee80211_mgmt_tx()
3430 beacon = rcu_dereference(sdata->u.mesh.beacon); in ieee80211_mgmt_tx()
3442 skb->dev = sdata->dev; in ieee80211_mgmt_tx()
3465 ieee80211_tx_skb(sdata, skb); in ieee80211_mgmt_tx()
3477 ret = ieee80211_start_roc_work(local, sdata, params->chan, in ieee80211_mgmt_tx()
3501 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_mgmt_frame_register() local
3507 sdata->vif.probe_req_reg++; in ieee80211_mgmt_frame_register()
3512 if (sdata->vif.probe_req_reg) in ieee80211_mgmt_frame_register()
3513 sdata->vif.probe_req_reg--; in ieee80211_mgmt_frame_register()
3519 if (sdata->vif.probe_req_reg == 1) in ieee80211_mgmt_frame_register()
3520 drv_config_iface_filter(local, sdata, FIF_PROBE_REQ, in ieee80211_mgmt_frame_register()
3522 else if (sdata->vif.probe_req_reg == 0) in ieee80211_mgmt_frame_register()
3523 drv_config_iface_filter(local, sdata, 0, in ieee80211_mgmt_frame_register()
3555 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_rekey_data() local
3560 drv_set_rekey_data(local, sdata, data); in ieee80211_set_rekey_data()
3568 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_probe_client() local
3569 struct ieee80211_local *local = sdata->local; in ieee80211_probe_client()
3585 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in ieee80211_probe_client()
3591 sta = sta_info_get_bss(sdata, peer); in ieee80211_probe_client()
3624 memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN); in ieee80211_probe_client()
3625 memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN); in ieee80211_probe_client()
3647 ieee80211_xmit(sdata, sta, skb); in ieee80211_probe_client()
3662 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_cfg_get_channel() local
3668 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in ieee80211_cfg_get_channel()
3670 *chandef = sdata->vif.bss_conf.chandef; in ieee80211_cfg_get_channel()
3674 sdata->vif.type == NL80211_IFTYPE_MONITOR) { in ieee80211_cfg_get_channel()
3697 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_qos_map() local
3710 old_qos_map = sdata_dereference(sdata->qos_map, sdata); in ieee80211_set_qos_map()
3711 rcu_assign_pointer(sdata->qos_map, new_qos_map); in ieee80211_set_qos_map()
3722 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_ap_chanwidth() local
3726 ret = ieee80211_vif_change_bandwidth(sdata, chandef, &changed); in ieee80211_set_ap_chanwidth()
3728 ieee80211_bss_info_change_notify(sdata, changed); in ieee80211_set_ap_chanwidth()
3737 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_tx_ts() local
3738 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_add_tx_ts()
3741 if (sdata->vif.type != NL80211_IFTYPE_STATION) in ieee80211_add_tx_ts()
3744 if (!(sdata->wmm_acm & BIT(up))) in ieee80211_add_tx_ts()
3762 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_tx_ts() local
3763 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_del_tx_ts()
3785 ieee80211_flush_queues(local, sdata, false); in ieee80211_del_tx_ts()
3792 ieee80211_sta_handle_tspec_ac_params(sdata); in ieee80211_del_tx_ts()