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()
103 if ((params->flags & mask) != (sdata->u.mntr.flags & mask)) in ieee80211_set_mon_options()
121 if (ieee80211_sdata_running(sdata)) { in ieee80211_set_mon_options()
122 ieee80211_adjust_monitor_flags(sdata, -1); in ieee80211_set_mon_options()
123 sdata->u.mntr.flags = params->flags; in ieee80211_set_mon_options()
124 ieee80211_adjust_monitor_flags(sdata, 1); in ieee80211_set_mon_options()
133 sdata->u.mntr.flags = params->flags; in ieee80211_set_mon_options()
140 static int ieee80211_set_ap_mbssid_options(struct ieee80211_sub_if_data *sdata, in ieee80211_set_ap_mbssid_options() argument
146 sdata->vif.mbssid_tx_vif = NULL; in ieee80211_set_ap_mbssid_options()
152 if (sdata->vif.type != NL80211_IFTYPE_AP || !params.tx_wdev) in ieee80211_set_ap_mbssid_options()
159 if (tx_sdata == sdata) { in ieee80211_set_ap_mbssid_options()
160 sdata->vif.mbssid_tx_vif = &sdata->vif; in ieee80211_set_ap_mbssid_options()
162 sdata->vif.mbssid_tx_vif = &tx_sdata->vif; in ieee80211_set_ap_mbssid_options()
180 struct ieee80211_sub_if_data *sdata; in ieee80211_add_iface() local
187 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_add_iface()
190 err = ieee80211_set_mon_options(sdata, params); in ieee80211_add_iface()
192 ieee80211_if_remove(sdata); in ieee80211_add_iface()
212 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_iface() local
213 struct ieee80211_local *local = sdata->local; in ieee80211_change_iface()
217 ret = ieee80211_if_change_type(sdata, type); in ieee80211_change_iface()
222 RCU_INIT_POINTER(sdata->u.vlan.sta, NULL); in ieee80211_change_iface()
223 ieee80211_check_fast_rx_iface(sdata); in ieee80211_change_iface()
225 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_change_iface()
231 if (ieee80211_vif_is_mld(&sdata->vif)) in ieee80211_change_iface()
234 sdata->u.mgd.use_4addr = params->use_4addr; in ieee80211_change_iface()
239 sta = sta_info_get(sdata, sdata->deflink.u.mgd.bssid); in ieee80211_change_iface()
241 drv_sta_set_4addr(local, sdata, &sta->sta, in ieee80211_change_iface()
246 ieee80211_send_4addr_nullfunc(local, sdata); in ieee80211_change_iface()
249 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) { in ieee80211_change_iface()
250 ret = ieee80211_set_mon_options(sdata, params); in ieee80211_change_iface()
261 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_start_p2p_device() local
264 mutex_lock(&sdata->local->chanctx_mtx); in ieee80211_start_p2p_device()
265 ret = ieee80211_check_combinations(sdata, NULL, 0, 0); in ieee80211_start_p2p_device()
266 mutex_unlock(&sdata->local->chanctx_mtx); in ieee80211_start_p2p_device()
283 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_start_nan() local
286 mutex_lock(&sdata->local->chanctx_mtx); in ieee80211_start_nan()
287 ret = ieee80211_check_combinations(sdata, NULL, 0, 0); in ieee80211_start_nan()
288 mutex_unlock(&sdata->local->chanctx_mtx); in ieee80211_start_nan()
296 ret = drv_start_nan(sdata->local, sdata, conf); in ieee80211_start_nan()
298 ieee80211_sdata_stop(sdata); in ieee80211_start_nan()
300 sdata->u.nan.conf = *conf; in ieee80211_start_nan()
308 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_stop_nan() local
310 drv_stop_nan(sdata->local, sdata); in ieee80211_stop_nan()
311 ieee80211_sdata_stop(sdata); in ieee80211_stop_nan()
319 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_nan_change_conf() local
323 if (sdata->vif.type != NL80211_IFTYPE_NAN) in ieee80211_nan_change_conf()
326 if (!ieee80211_sdata_running(sdata)) in ieee80211_nan_change_conf()
329 new_conf = sdata->u.nan.conf; in ieee80211_nan_change_conf()
337 ret = drv_nan_change_conf(sdata->local, sdata, &new_conf, changes); in ieee80211_nan_change_conf()
339 sdata->u.nan.conf = new_conf; in ieee80211_nan_change_conf()
348 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_add_nan_func() local
351 if (sdata->vif.type != NL80211_IFTYPE_NAN) in ieee80211_add_nan_func()
354 if (!ieee80211_sdata_running(sdata)) in ieee80211_add_nan_func()
357 spin_lock_bh(&sdata->u.nan.func_lock); in ieee80211_add_nan_func()
359 ret = idr_alloc(&sdata->u.nan.function_inst_ids, in ieee80211_add_nan_func()
360 nan_func, 1, sdata->local->hw.max_nan_de_entries + 1, in ieee80211_add_nan_func()
362 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_add_nan_func()
371 ret = drv_add_nan_func(sdata->local, sdata, nan_func); in ieee80211_add_nan_func()
373 spin_lock_bh(&sdata->u.nan.func_lock); in ieee80211_add_nan_func()
374 idr_remove(&sdata->u.nan.function_inst_ids, in ieee80211_add_nan_func()
376 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_add_nan_func()
383 ieee80211_find_nan_func_by_cookie(struct ieee80211_sub_if_data *sdata, in ieee80211_find_nan_func_by_cookie() argument
389 lockdep_assert_held(&sdata->u.nan.func_lock); in ieee80211_find_nan_func_by_cookie()
391 idr_for_each_entry(&sdata->u.nan.function_inst_ids, func, id) { in ieee80211_find_nan_func_by_cookie()
402 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_del_nan_func() local
406 if (sdata->vif.type != NL80211_IFTYPE_NAN || in ieee80211_del_nan_func()
407 !ieee80211_sdata_running(sdata)) in ieee80211_del_nan_func()
410 spin_lock_bh(&sdata->u.nan.func_lock); in ieee80211_del_nan_func()
412 func = ieee80211_find_nan_func_by_cookie(sdata, cookie); in ieee80211_del_nan_func()
416 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_del_nan_func()
419 drv_del_nan_func(sdata->local, sdata, instance_id); in ieee80211_del_nan_func()
426 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_noack_map() local
428 sdata->noack_map = noack_map; in ieee80211_set_noack_map()
430 ieee80211_check_fast_xmit_iface(sdata); in ieee80211_set_noack_map()
435 static int ieee80211_set_tx(struct ieee80211_sub_if_data *sdata, in ieee80211_set_tx() argument
438 struct ieee80211_local *local = sdata->local; in ieee80211_set_tx()
447 sta = sta_info_get_bss(sdata, mac_addr); in ieee80211_set_tx()
469 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_key() local
471 ieee80211_link_or_deflink(sdata, link_id, false); in ieee80211_add_key()
472 struct ieee80211_local *local = sdata->local; in ieee80211_add_key()
477 if (!ieee80211_sdata_running(sdata)) in ieee80211_add_key()
484 return ieee80211_set_tx(sdata, mac_addr, key_idx); in ieee80211_add_key()
516 sta = sta_info_get_bss(sdata, mac_addr); in ieee80211_add_key()
534 switch (sdata->vif.type) { in ieee80211_add_key()
536 if (sdata->u.mgd.mfp != IEEE80211_MFP_DISABLED) in ieee80211_add_key()
550 if (sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE) in ieee80211_add_key()
580 ieee80211_lookup_key(struct ieee80211_sub_if_data *sdata, int link_id, in ieee80211_lookup_key() argument
583 struct ieee80211_local *local __maybe_unused = sdata->local; in ieee80211_lookup_key()
584 struct ieee80211_link_data *link = &sdata->deflink; in ieee80211_lookup_key()
588 link = rcu_dereference_check(sdata->link[link_id], in ieee80211_lookup_key()
589 lockdep_is_held(&sdata->wdev.mtx)); in ieee80211_lookup_key()
598 sta = sta_info_get_bss(sdata, mac_addr); in ieee80211_lookup_key()
627 sdata->keys[key_idx]); in ieee80211_lookup_key()
635 return rcu_dereference_check_key_mtx(local, sdata->keys[key_idx]); in ieee80211_lookup_key()
644 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_key() local
645 struct ieee80211_local *local = sdata->local; in ieee80211_del_key()
652 key = ieee80211_lookup_key(sdata, link_id, key_idx, pairwise, mac_addr); in ieee80211_del_key()
658 ieee80211_key_free(key, sdata->vif.type == NL80211_IFTYPE_STATION); in ieee80211_del_key()
674 struct ieee80211_sub_if_data *sdata; in ieee80211_get_key() local
684 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_key()
688 key = ieee80211_lookup_key(sdata, link_id, key_idx, pairwise, mac_addr); in ieee80211_get_key()
704 drv_get_key_seq(sdata->local, key, &kseq); in ieee80211_get_key()
737 drv_get_key_seq(sdata->local, key, &kseq); in ieee80211_get_key()
756 drv_get_key_seq(sdata->local, key, &kseq); in ieee80211_get_key()
778 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_config_default_key() local
780 ieee80211_link_or_deflink(sdata, link_id, false); in ieee80211_config_default_key()
794 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_config_default_mgmt_key() local
796 ieee80211_link_or_deflink(sdata, link_id, true); in ieee80211_config_default_mgmt_key()
810 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_config_default_beacon_key() local
812 ieee80211_link_or_deflink(sdata, link_id, true); in ieee80211_config_default_beacon_key()
836 int shift = ieee80211_vif_get_shift(&sta->sdata->vif); in sta_set_rate_info_tx()
839 sband = ieee80211_get_sband(sta->sdata); in sta_set_rate_info_tx()
861 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_dump_station() local
862 struct ieee80211_local *local = sdata->local; in ieee80211_dump_station()
868 sta = sta_info_get_by_idx(sdata, idx); in ieee80211_dump_station()
891 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_station() local
892 struct ieee80211_local *local = sdata->local; in ieee80211_get_station()
898 sta = sta_info_get_bss(sdata, mac); in ieee80211_get_station()
913 struct ieee80211_sub_if_data *sdata; in ieee80211_set_monitor_channel() local
920 sdata = wiphy_dereference(local->hw.wiphy, in ieee80211_set_monitor_channel()
922 if (sdata) { in ieee80211_set_monitor_channel()
923 sdata_lock(sdata); in ieee80211_set_monitor_channel()
925 ieee80211_link_release_channel(&sdata->deflink); in ieee80211_set_monitor_channel()
926 ret = ieee80211_link_use_channel(&sdata->deflink, in ieee80211_set_monitor_channel()
930 sdata_unlock(sdata); in ieee80211_set_monitor_channel()
948 ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata, in ieee80211_set_probe_resp() argument
959 old = sdata_dereference(link->u.ap.probe_resp, sdata); in ieee80211_set_probe_resp()
982 static int ieee80211_set_fils_discovery(struct ieee80211_sub_if_data *sdata, in ieee80211_set_fils_discovery() argument
997 old = sdata_dereference(link->u.ap.fils_discovery, sdata); in ieee80211_set_fils_discovery()
1012 ieee80211_set_unsol_bcast_probe_resp(struct ieee80211_sub_if_data *sdata, in ieee80211_set_unsol_bcast_probe_resp() argument
1022 old = sdata_dereference(link->u.ap.unsol_bcast_probe_resp, sdata); in ieee80211_set_unsol_bcast_probe_resp()
1039 struct ieee80211_sub_if_data *sdata, in ieee80211_set_ftm_responder_params() argument
1114 ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_assign_beacon() argument
1129 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_assign_beacon()
1226 err = ieee80211_set_probe_resp(sdata, params->probe_resp, in ieee80211_assign_beacon()
1237 err = ieee80211_set_ftm_responder_params(sdata, in ieee80211_assign_beacon()
1253 sdata->u.ap.active = true; in ieee80211_assign_beacon()
1265 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_start_ap() local
1266 struct ieee80211_local *local = sdata->local; in ieee80211_start_ap()
1281 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_start_ap()
1287 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_start_ap()
1296 link->needed_rx_chains = sdata->local->rx_chains; in ieee80211_start_ap()
1381 if (sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_start_ap()
1383 err = ieee80211_set_ap_mbssid_options(sdata, in ieee80211_start_ap()
1405 sdata->control_port_protocol = params->crypto.control_port_ethertype; in ieee80211_start_ap()
1406 sdata->control_port_no_encrypt = params->crypto.control_port_no_encrypt; in ieee80211_start_ap()
1407 sdata->control_port_over_nl80211 = in ieee80211_start_ap()
1409 sdata->control_port_no_preauth = in ieee80211_start_ap()
1412 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) { in ieee80211_start_ap()
1425 link_conf->allow_p2p_go_ps = sdata->vif.p2p; in ieee80211_start_ap()
1429 sdata->vif.cfg.s1g = params->chandef.chan->band == in ieee80211_start_ap()
1432 sdata->vif.cfg.ssid_len = params->ssid_len; in ieee80211_start_ap()
1434 memcpy(sdata->vif.cfg.ssid, params->ssid, in ieee80211_start_ap()
1447 sdata->beacon_rate_set = false; in ieee80211_start_ap()
1451 sdata->beacon_rateidx_mask[i] = in ieee80211_start_ap()
1453 if (sdata->beacon_rateidx_mask[i]) in ieee80211_start_ap()
1454 sdata->beacon_rate_set = true; in ieee80211_start_ap()
1461 err = ieee80211_assign_beacon(sdata, link, ¶ms->beacon, NULL, NULL, in ieee80211_start_ap()
1467 err = ieee80211_set_fils_discovery(sdata, in ieee80211_start_ap()
1476 err = ieee80211_set_unsol_bcast_probe_resp(sdata, in ieee80211_start_ap()
1484 err = drv_start_ap(sdata->local, sdata, link_conf); in ieee80211_start_ap()
1486 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_start_ap()
1491 sdata->u.ap.active = false; in ieee80211_start_ap()
1495 ieee80211_recalc_dtim(local, sdata); in ieee80211_start_ap()
1496 ieee80211_vif_cfg_change_notify(sdata, BSS_CHANGED_SSID); in ieee80211_start_ap()
1497 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_start_ap()
1500 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) in ieee80211_start_ap()
1516 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_beacon() local
1523 sdata_assert_lock(sdata); in ieee80211_change_beacon()
1525 link = sdata_dereference(sdata->link[params->link_id], sdata); in ieee80211_change_beacon()
1537 old = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_change_beacon()
1541 err = ieee80211_assign_beacon(sdata, link, params, NULL, NULL, in ieee80211_change_beacon()
1552 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_change_beacon()
1570 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_stop_ap() local
1572 struct ieee80211_local *local = sdata->local; in ieee80211_stop_ap()
1579 sdata_dereference(sdata->link[link_id], sdata); in ieee80211_stop_ap()
1582 sdata_assert_lock(sdata); in ieee80211_stop_ap()
1584 old_beacon = sdata_dereference(link->u.ap.beacon, sdata); in ieee80211_stop_ap()
1588 sdata); in ieee80211_stop_ap()
1590 sdata); in ieee80211_stop_ap()
1593 sdata); in ieee80211_stop_ap()
1600 ieee80211_wake_vif_queues(local, sdata, in ieee80211_stop_ap()
1610 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) in ieee80211_stop_ap()
1615 sdata->u.ap.active = false; in ieee80211_stop_ap()
1631 sdata->vif.mbssid_tx_vif = NULL; in ieee80211_stop_ap()
1637 __sta_info_flush(sdata, true); in ieee80211_stop_ap()
1638 ieee80211_free_keys(sdata, true); in ieee80211_stop_ap()
1641 sdata->beacon_rate_set = false; in ieee80211_stop_ap()
1642 sdata->vif.cfg.ssid_len = 0; in ieee80211_stop_ap()
1643 clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); in ieee80211_stop_ap()
1644 ieee80211_link_info_change_notify(sdata, link, in ieee80211_stop_ap()
1647 if (sdata->wdev.cac_started) { in ieee80211_stop_ap()
1650 cfg80211_cac_event(sdata->dev, &chandef, in ieee80211_stop_ap()
1655 drv_stop_ap(sdata->local, sdata, link_conf); in ieee80211_stop_ap()
1658 local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps.bc_buf); in ieee80211_stop_ap()
1659 ieee80211_purge_tx_queue(&local->hw, &sdata->u.ap.ps.bc_buf); in ieee80211_stop_ap()
1734 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_apply_mesh_params() local
1741 changed = mesh_plink_inc_estab_count(sdata); in sta_apply_mesh_params()
1747 sdata->u.mesh.mshcfg.power_mode); in sta_apply_mesh_params()
1761 changed = mesh_plink_dec_estab_count(sdata); in sta_apply_mesh_params()
1790 ieee80211_mbss_info_change_notify(sdata, changed); in sta_apply_mesh_params()
1800 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_link_apply_parameters() local
1803 sdata_dereference(sdata->link[link_id], sdata); in sta_link_apply_parameters()
1843 ret = drv_sta_set_txpwr(local, sdata, sta); in sta_link_apply_parameters()
1857 ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, in sta_link_apply_parameters()
1862 ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband, in sta_link_apply_parameters()
1867 ieee80211_he_cap_ie_to_sta_he_cap(sdata, sband, in sta_link_apply_parameters()
1874 ieee80211_eht_cap_ie_to_sta_eht_cap(sdata, sband, in sta_link_apply_parameters()
1885 __ieee80211_vht_handle_opmode(sdata, link_sta, in sta_link_apply_parameters()
1899 struct ieee80211_sub_if_data *sdata = sta->sdata; in sta_apply_parameters() local
1906 if (ieee80211_vif_is_mesh(&sdata->vif)) { in sta_apply_parameters()
1967 !sdata->deflink.u.mgd.tdls_chan_switch_prohibited && in sta_apply_parameters()
1973 !sdata->u.mgd.tdls_wider_bw_prohibited && in sta_apply_parameters()
2013 if (ieee80211_vif_is_mesh(&sdata->vif)) in sta_apply_parameters()
2040 struct ieee80211_sub_if_data *sdata; in ieee80211_add_station() local
2044 sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); in ieee80211_add_station()
2046 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && in ieee80211_add_station()
2047 sdata->vif.type != NL80211_IFTYPE_AP) in ieee80211_add_station()
2050 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_station()
2052 if (ether_addr_equal(mac, sdata->vif.addr)) in ieee80211_add_station()
2059 sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_add_station()
2060 !sdata->u.mgd.associated) in ieee80211_add_station()
2069 sta = sta_info_alloc_with_link(sdata, mac, in ieee80211_add_station()
2074 sta = sta_info_alloc(sdata, mac, GFP_KERNEL); in ieee80211_add_station()
2109 struct ieee80211_sub_if_data *sdata; in ieee80211_del_station() local
2111 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_station()
2114 return sta_info_destroy_addr_bss(sdata, params->mac); in ieee80211_del_station()
2116 sta_info_flush(sdata); in ieee80211_del_station()
2124 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_station() local
2133 sta = sta_info_get_bss(sdata, mac); in ieee80211_change_station()
2139 switch (sdata->vif.type) { in ieee80211_change_station()
2141 if (sdata->u.mesh.user_mpm) in ieee80211_change_station()
2175 if (params->vlan && params->vlan != sta->sdata->dev) { in ieee80211_change_station()
2186 drv_sta_set_4addr(local, sta->sdata, &sta->sta, true); in ieee80211_change_station()
2189 if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_change_station()
2190 sta->sdata->u.vlan.sta) in ieee80211_change_station()
2191 RCU_INIT_POINTER(sta->sdata->u.vlan.sta, NULL); in ieee80211_change_station()
2194 ieee80211_vif_dec_num_mcast(sta->sdata); in ieee80211_change_station()
2196 sta->sdata = vlansdata; in ieee80211_change_station()
2201 ieee80211_vif_inc_num_mcast(sta->sdata); in ieee80211_change_station()
2202 cfg80211_send_layer2_update(sta->sdata->dev, in ieee80211_change_station()
2208 if (sdata != sta->sdata) { in ieee80211_change_station()
2209 mutex_lock_nested(&sta->sdata->wdev.mtx, 1); in ieee80211_change_station()
2211 mutex_unlock(&sta->sdata->wdev.mtx); in ieee80211_change_station()
2220 if (sdata->vif.type == NL80211_IFTYPE_STATION && in ieee80211_change_station()
2223 ieee80211_recalc_ps_vif(sdata); in ieee80211_change_station()
2236 struct ieee80211_sub_if_data *sdata; in ieee80211_add_mpath() local
2240 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_mpath()
2243 sta = sta_info_get(sdata, next_hop); in ieee80211_add_mpath()
2249 mpath = mesh_path_add(sdata, dst); in ieee80211_add_mpath()
2264 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_mpath() local
2267 return mesh_path_del(sdata, dst); in ieee80211_del_mpath()
2269 mesh_path_flush_by_iface(sdata); in ieee80211_del_mpath()
2276 struct ieee80211_sub_if_data *sdata; in ieee80211_change_mpath() local
2280 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_mpath()
2284 sta = sta_info_get(sdata, next_hop); in ieee80211_change_mpath()
2290 mpath = mesh_path_lookup(sdata, dst); in ieee80211_change_mpath()
2314 pinfo->generation = mpath->sdata->u.mesh.mesh_paths_generation; in mpath_set_pinfo()
2352 struct ieee80211_sub_if_data *sdata; in ieee80211_get_mpath() local
2355 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_mpath()
2358 mpath = mesh_path_lookup(sdata, dst); in ieee80211_get_mpath()
2373 struct ieee80211_sub_if_data *sdata; in ieee80211_dump_mpath() local
2376 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_dump_mpath()
2379 mpath = mesh_path_lookup_by_idx(sdata, idx); in ieee80211_dump_mpath()
2396 pinfo->generation = mpath->sdata->u.mesh.mpp_paths_generation; in mpp_set_pinfo()
2403 struct ieee80211_sub_if_data *sdata; in ieee80211_get_mpp() local
2406 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_mpp()
2409 mpath = mpp_path_lookup(sdata, dst); in ieee80211_get_mpp()
2424 struct ieee80211_sub_if_data *sdata; in ieee80211_dump_mpp() local
2427 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_dump_mpp()
2430 mpath = mpp_path_lookup_by_idx(sdata, idx); in ieee80211_dump_mpp()
2445 struct ieee80211_sub_if_data *sdata; in ieee80211_get_mesh_config() local
2446 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_mesh_config()
2448 memcpy(conf, &(sdata->u.mesh.mshcfg), sizeof(struct mesh_config)); in ieee80211_get_mesh_config()
2461 struct ieee80211_sub_if_data *sdata = container_of(ifmsh, in copy_mesh_setup() local
2493 memcpy(sdata->vif.bss_conf.mcast_rate, setup->mcast_rate, in copy_mesh_setup()
2495 sdata->vif.bss_conf.basic_rates = setup->basic_rates; in copy_mesh_setup()
2497 sdata->vif.bss_conf.beacon_int = setup->beacon_interval; in copy_mesh_setup()
2498 sdata->vif.bss_conf.dtim_period = setup->dtim_period; in copy_mesh_setup()
2500 sdata->beacon_rate_set = false; in copy_mesh_setup()
2501 if (wiphy_ext_feature_isset(sdata->local->hw.wiphy, in copy_mesh_setup()
2504 sdata->beacon_rateidx_mask[i] = in copy_mesh_setup()
2506 if (sdata->beacon_rateidx_mask[i]) in copy_mesh_setup()
2507 sdata->beacon_rate_set = true; in copy_mesh_setup()
2519 struct ieee80211_sub_if_data *sdata; in ieee80211_update_mesh_config() local
2522 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_update_mesh_config()
2523 ifmsh = &sdata->u.mesh; in ieee80211_update_mesh_config()
2526 conf = &(sdata->u.mesh.mshcfg); in ieee80211_update_mesh_config()
2594 if (!ieee80211_hw_check(&sdata->local->hw, SIGNAL_DBM)) in ieee80211_update_mesh_config()
2600 sdata->vif.bss_conf.ht_operation_mode = nconf->ht_opmode; in ieee80211_update_mesh_config()
2601 ieee80211_link_info_change_notify(sdata, &sdata->deflink, in ieee80211_update_mesh_config()
2615 ieee80211_mps_local_status_update(sdata); in ieee80211_update_mesh_config()
2630 ieee80211_mbss_info_change_notify(sdata, BSS_CHANGED_BEACON); in ieee80211_update_mesh_config()
2638 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_join_mesh() local
2639 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_join_mesh()
2647 sdata->control_port_over_nl80211 = setup->control_port_over_nl80211; in ieee80211_join_mesh()
2650 sdata->deflink.smps_mode = IEEE80211_SMPS_OFF; in ieee80211_join_mesh()
2651 sdata->deflink.needed_rx_chains = sdata->local->rx_chains; in ieee80211_join_mesh()
2653 mutex_lock(&sdata->local->mtx); in ieee80211_join_mesh()
2654 err = ieee80211_link_use_channel(&sdata->deflink, &setup->chandef, in ieee80211_join_mesh()
2656 mutex_unlock(&sdata->local->mtx); in ieee80211_join_mesh()
2660 return ieee80211_start_mesh(sdata); in ieee80211_join_mesh()
2665 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_leave_mesh() local
2667 ieee80211_stop_mesh(sdata); in ieee80211_leave_mesh()
2668 mutex_lock(&sdata->local->mtx); in ieee80211_leave_mesh()
2669 ieee80211_link_release_channel(&sdata->deflink); in ieee80211_leave_mesh()
2670 kfree(sdata->u.mesh.ie); in ieee80211_leave_mesh()
2671 mutex_unlock(&sdata->local->mtx); in ieee80211_leave_mesh()
2681 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_change_bss() local
2686 link = ieee80211_link_or_deflink(sdata, params->link_id, true); in ieee80211_change_bss()
2690 if (!sdata_dereference(link->u.ap.beacon, sdata)) in ieee80211_change_bss()
2731 sdata->flags |= IEEE80211_SDATA_DONT_BRIDGE_PACKETS; in ieee80211_change_bss()
2733 sdata->flags &= ~IEEE80211_SDATA_DONT_BRIDGE_PACKETS; in ieee80211_change_bss()
2734 ieee80211_check_fast_rx_iface(sdata); in ieee80211_change_bss()
2760 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_change_bss()
2770 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_txq_params() local
2772 ieee80211_link_or_deflink(sdata, params->link_id, true); in ieee80211_set_txq_params()
2796 ieee80211_regulatory_limit_wmm_params(sdata, &p, params->ac); in ieee80211_set_txq_params()
2806 ieee80211_link_info_change_notify(sdata, link, in ieee80211_set_txq_params()
2831 struct ieee80211_sub_if_data *sdata; in ieee80211_scan() local
2833 sdata = IEEE80211_WDEV_TO_SUB_IF(req->wdev); in ieee80211_scan()
2835 switch (ieee80211_vif_type_p2p(&sdata->vif)) { in ieee80211_scan()
2843 if (sdata->local->ops->hw_scan) in ieee80211_scan()
2859 if (sdata->deflink.u.ap.beacon && in ieee80211_scan()
2869 return ieee80211_request_scan(sdata, req); in ieee80211_scan()
2882 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_sched_scan_start() local
2884 if (!sdata->local->ops->sched_scan_start) in ieee80211_sched_scan_start()
2887 return ieee80211_request_sched_scan_start(sdata, req); in ieee80211_sched_scan_start()
2951 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_mcast_rate() local
2953 memcpy(sdata->vif.bss_conf.mcast_rate, rate, in ieee80211_set_mcast_rate()
2956 if (ieee80211_sdata_running(sdata)) in ieee80211_set_mcast_rate()
2957 ieee80211_link_info_change_notify(sdata, &sdata->deflink, in ieee80211_set_mcast_rate()
3025 struct ieee80211_sub_if_data *sdata; in ieee80211_set_tx_power() local
3031 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_set_tx_power()
3033 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) { in ieee80211_set_tx_power()
3034 sdata = wiphy_dereference(local->hw.wiphy, in ieee80211_set_tx_power()
3036 if (!sdata) in ieee80211_set_tx_power()
3042 sdata->deflink.user_power_level = in ieee80211_set_tx_power()
3050 sdata->deflink.user_power_level = MBM_TO_DBM(mbm); in ieee80211_set_tx_power()
3054 if (txp_type != sdata->vif.bss_conf.txpower_type) { in ieee80211_set_tx_power()
3056 sdata->vif.bss_conf.txpower_type = txp_type; in ieee80211_set_tx_power()
3059 ieee80211_recalc_txpower(sdata, update_txp_type); in ieee80211_set_tx_power()
3078 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_set_tx_power()
3079 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) { in ieee80211_set_tx_power()
3083 sdata->deflink.user_power_level = local->user_power_level; in ieee80211_set_tx_power()
3084 if (txp_type != sdata->vif.bss_conf.txpower_type) in ieee80211_set_tx_power()
3086 sdata->vif.bss_conf.txpower_type = txp_type; in ieee80211_set_tx_power()
3088 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_set_tx_power()
3089 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) in ieee80211_set_tx_power()
3091 ieee80211_recalc_txpower(sdata, update_txp_type); in ieee80211_set_tx_power()
3096 sdata = wiphy_dereference(local->hw.wiphy, in ieee80211_set_tx_power()
3098 if (sdata) { in ieee80211_set_tx_power()
3099 sdata->deflink.user_power_level = local->user_power_level; in ieee80211_set_tx_power()
3100 if (txp_type != sdata->vif.bss_conf.txpower_type) in ieee80211_set_tx_power()
3102 sdata->vif.bss_conf.txpower_type = txp_type; in ieee80211_set_tx_power()
3104 ieee80211_recalc_txpower(sdata, update_txp_type); in ieee80211_set_tx_power()
3116 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_get_tx_power() local
3119 return drv_get_txpower(local, sdata, dbm); in ieee80211_get_tx_power()
3124 *dbm = sdata->vif.bss_conf.txpower; in ieee80211_get_tx_power()
3152 struct ieee80211_sub_if_data *sdata; in ieee80211_testmode_cmd() local
3154 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_testmode_cmd()
3155 if (sdata->flags & IEEE80211_SDATA_IN_DRIVER) in ieee80211_testmode_cmd()
3156 vif = &sdata->vif; in ieee80211_testmode_cmd()
3176 int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata, in __ieee80211_request_smps_mgd() argument
3186 lockdep_assert_held(&sdata->wdev.mtx); in __ieee80211_request_smps_mgd()
3188 if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION)) in __ieee80211_request_smps_mgd()
3203 if (!sdata->u.mgd.associated || in __ieee80211_request_smps_mgd()
3210 list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) { in __ieee80211_request_smps_mgd()
3211 if (!sta->sta.tdls || sta->sdata != sdata || !sta->uploaded || in __ieee80211_request_smps_mgd()
3221 if (tdls_peer_found || !sdata->u.mgd.powersave) in __ieee80211_request_smps_mgd()
3228 err = ieee80211_send_smps_action(sdata, smps_mode, in __ieee80211_request_smps_mgd()
3233 ieee80211_teardown_tdls_peers(sdata); in __ieee80211_request_smps_mgd()
3241 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_power_mgmt() local
3245 if (sdata->vif.type != NL80211_IFTYPE_STATION) in ieee80211_set_power_mgmt()
3251 if (enabled == sdata->u.mgd.powersave && in ieee80211_set_power_mgmt()
3255 sdata->u.mgd.powersave = enabled; in ieee80211_set_power_mgmt()
3259 sdata_lock(sdata); in ieee80211_set_power_mgmt()
3260 for (link_id = 0; link_id < ARRAY_SIZE(sdata->link); link_id++) { in ieee80211_set_power_mgmt()
3263 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_set_power_mgmt()
3267 __ieee80211_request_smps_mgd(sdata, link, in ieee80211_set_power_mgmt()
3270 sdata_unlock(sdata); in ieee80211_set_power_mgmt()
3276 ieee80211_recalc_ps_vif(sdata); in ieee80211_set_power_mgmt()
3277 ieee80211_check_fast_rx_iface(sdata); in ieee80211_set_power_mgmt()
3286 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_cqm_rssi_config() local
3287 struct ieee80211_vif *vif = &sdata->vif; in ieee80211_set_cqm_rssi_config()
3294 if (sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER && in ieee80211_set_cqm_rssi_config()
3295 !(sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)) in ieee80211_set_cqm_rssi_config()
3302 sdata->deflink.u.mgd.last_cqm_event_signal = 0; in ieee80211_set_cqm_rssi_config()
3305 if (sdata->u.mgd.associated && in ieee80211_set_cqm_rssi_config()
3306 sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI) in ieee80211_set_cqm_rssi_config()
3307 ieee80211_link_info_change_notify(sdata, &sdata->deflink, in ieee80211_set_cqm_rssi_config()
3317 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_cqm_rssi_range_config() local
3318 struct ieee80211_vif *vif = &sdata->vif; in ieee80211_set_cqm_rssi_range_config()
3321 if (sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER) in ieee80211_set_cqm_rssi_range_config()
3328 sdata->deflink.u.mgd.last_cqm_event_signal = 0; in ieee80211_set_cqm_rssi_range_config()
3331 if (sdata->u.mgd.associated && in ieee80211_set_cqm_rssi_range_config()
3332 sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI) in ieee80211_set_cqm_rssi_range_config()
3333 ieee80211_link_info_change_notify(sdata, &sdata->deflink, in ieee80211_set_cqm_rssi_range_config()
3345 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_bitrate_mask() local
3349 if (!ieee80211_sdata_running(sdata)) in ieee80211_set_bitrate_mask()
3358 if (rcu_access_pointer(sdata->vif.bss_conf.chanctx_conf) && in ieee80211_set_bitrate_mask()
3359 sdata->vif.bss_conf.chandef.chan) { in ieee80211_set_bitrate_mask()
3360 u32 basic_rates = sdata->vif.bss_conf.basic_rates; in ieee80211_set_bitrate_mask()
3361 enum nl80211_band band = sdata->vif.bss_conf.chandef.chan->band; in ieee80211_set_bitrate_mask()
3368 ret = drv_set_bitrate_mask(local, sdata, mask); in ieee80211_set_bitrate_mask()
3377 sdata->rc_rateidx_mask[i] = mask->control[i].legacy; in ieee80211_set_bitrate_mask()
3378 memcpy(sdata->rc_rateidx_mcs_mask[i], mask->control[i].ht_mcs, in ieee80211_set_bitrate_mask()
3380 memcpy(sdata->rc_rateidx_vht_mcs_mask[i], in ieee80211_set_bitrate_mask()
3384 sdata->rc_has_mcs_mask[i] = false; in ieee80211_set_bitrate_mask()
3385 sdata->rc_has_vht_mcs_mask[i] = false; in ieee80211_set_bitrate_mask()
3390 if (sdata->rc_rateidx_mcs_mask[i][j] != 0xff) { in ieee80211_set_bitrate_mask()
3391 sdata->rc_has_mcs_mask[i] = true; in ieee80211_set_bitrate_mask()
3397 if (sdata->rc_rateidx_vht_mcs_mask[i][j] != 0xffff) { in ieee80211_set_bitrate_mask()
3398 sdata->rc_has_vht_mcs_mask[i] = true; in ieee80211_set_bitrate_mask()
3412 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_start_radar_detection() local
3413 struct ieee80211_local *local = sdata->local; in ieee80211_start_radar_detection()
3423 sdata->deflink.smps_mode = IEEE80211_SMPS_OFF; in ieee80211_start_radar_detection()
3424 sdata->deflink.needed_rx_chains = local->rx_chains; in ieee80211_start_radar_detection()
3426 err = ieee80211_link_use_channel(&sdata->deflink, chandef, in ieee80211_start_radar_detection()
3431 ieee80211_queue_delayed_work(&sdata->local->hw, in ieee80211_start_radar_detection()
3432 &sdata->deflink.dfs_cac_timer_work, in ieee80211_start_radar_detection()
3443 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_end_cac() local
3444 struct ieee80211_local *local = sdata->local; in ieee80211_end_cac()
3447 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_end_cac()
3452 cancel_delayed_work(&sdata->deflink.dfs_cac_timer_work); in ieee80211_end_cac()
3454 if (sdata->wdev.cac_started) { in ieee80211_end_cac()
3455 ieee80211_link_release_channel(&sdata->deflink); in ieee80211_end_cac()
3456 sdata->wdev.cac_started = false; in ieee80211_end_cac()
3572 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_csa_finish() local
3573 struct ieee80211_local *local = sdata->local; in ieee80211_csa_finish()
3588 if (iter == sdata || iter->vif.mbssid_tx_vif != vif) in ieee80211_csa_finish()
3595 ieee80211_queue_work(&local->hw, &sdata->deflink.csa_finalize_work); in ieee80211_csa_finish()
3603 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_channel_switch_disconnect() local
3604 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_channel_switch_disconnect()
3605 struct ieee80211_local *local = sdata->local; in ieee80211_channel_switch_disconnect()
3607 sdata->deflink.csa_block_tx = block_tx; in ieee80211_channel_switch_disconnect()
3608 sdata_info(sdata, "channel switch failed, disconnecting\n"); in ieee80211_channel_switch_disconnect()
3613 static int ieee80211_set_after_csa_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_set_after_csa_beacon() argument
3618 switch (sdata->vif.type) { in ieee80211_set_after_csa_beacon()
3620 if (!sdata->deflink.u.ap.next_beacon) in ieee80211_set_after_csa_beacon()
3623 err = ieee80211_assign_beacon(sdata, &sdata->deflink, in ieee80211_set_after_csa_beacon()
3624 sdata->deflink.u.ap.next_beacon, in ieee80211_set_after_csa_beacon()
3626 ieee80211_free_next_beacon(&sdata->deflink); in ieee80211_set_after_csa_beacon()
3632 err = ieee80211_ibss_finish_csa(sdata, changed); in ieee80211_set_after_csa_beacon()
3638 err = ieee80211_mesh_finish_csa(sdata, changed); in ieee80211_set_after_csa_beacon()
3651 static int __ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata) in __ieee80211_csa_finalize() argument
3653 struct ieee80211_local *local = sdata->local; in __ieee80211_csa_finalize()
3657 sdata_assert_lock(sdata); in __ieee80211_csa_finalize()
3668 if (sdata->deflink.reserved_chanctx) { in __ieee80211_csa_finalize()
3674 if (sdata->deflink.reserved_ready) in __ieee80211_csa_finalize()
3677 return ieee80211_link_use_reserved_context(&sdata->deflink); in __ieee80211_csa_finalize()
3680 if (!cfg80211_chandef_identical(&sdata->vif.bss_conf.chandef, in __ieee80211_csa_finalize()
3681 &sdata->deflink.csa_chandef)) in __ieee80211_csa_finalize()
3684 sdata->vif.bss_conf.csa_active = false; in __ieee80211_csa_finalize()
3686 err = ieee80211_set_after_csa_beacon(sdata, &changed); in __ieee80211_csa_finalize()
3690 if (sdata->vif.bss_conf.eht_puncturing != sdata->vif.bss_conf.csa_punct_bitmap) { in __ieee80211_csa_finalize()
3691 sdata->vif.bss_conf.eht_puncturing = in __ieee80211_csa_finalize()
3692 sdata->vif.bss_conf.csa_punct_bitmap; in __ieee80211_csa_finalize()
3696 ieee80211_link_info_change_notify(sdata, &sdata->deflink, changed); in __ieee80211_csa_finalize()
3698 if (sdata->deflink.csa_block_tx) { in __ieee80211_csa_finalize()
3699 ieee80211_wake_vif_queues(local, sdata, in __ieee80211_csa_finalize()
3701 sdata->deflink.csa_block_tx = false; in __ieee80211_csa_finalize()
3704 err = drv_post_channel_switch(sdata); in __ieee80211_csa_finalize()
3708 cfg80211_ch_switch_notify(sdata->dev, &sdata->deflink.csa_chandef, 0, in __ieee80211_csa_finalize()
3709 sdata->vif.bss_conf.eht_puncturing); in __ieee80211_csa_finalize()
3714 static void ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata) in ieee80211_csa_finalize() argument
3716 if (__ieee80211_csa_finalize(sdata)) { in ieee80211_csa_finalize()
3717 sdata_info(sdata, "failed to finalize CSA, disconnecting\n"); in ieee80211_csa_finalize()
3718 cfg80211_stop_iface(sdata->local->hw.wiphy, &sdata->wdev, in ieee80211_csa_finalize()
3725 struct ieee80211_sub_if_data *sdata = in ieee80211_csa_finalize_work() local
3728 struct ieee80211_local *local = sdata->local; in ieee80211_csa_finalize_work()
3730 sdata_lock(sdata); in ieee80211_csa_finalize_work()
3735 if (!sdata->vif.bss_conf.csa_active) in ieee80211_csa_finalize_work()
3738 if (!ieee80211_sdata_running(sdata)) in ieee80211_csa_finalize_work()
3741 ieee80211_csa_finalize(sdata); in ieee80211_csa_finalize_work()
3746 sdata_unlock(sdata); in ieee80211_csa_finalize_work()
3749 static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_set_csa_beacon() argument
3756 switch (sdata->vif.type) { in ieee80211_set_csa_beacon()
3758 sdata->deflink.u.ap.next_beacon = in ieee80211_set_csa_beacon()
3760 if (!sdata->deflink.u.ap.next_beacon) in ieee80211_set_csa_beacon()
3786 ieee80211_free_next_beacon(&sdata->deflink); in ieee80211_set_csa_beacon()
3796 err = ieee80211_assign_beacon(sdata, &sdata->deflink, in ieee80211_set_csa_beacon()
3800 ieee80211_free_next_beacon(&sdata->deflink); in ieee80211_set_csa_beacon()
3806 if (!sdata->vif.cfg.ibss_joined) in ieee80211_set_csa_beacon()
3809 if (params->chandef.width != sdata->u.ibss.chandef.width) in ieee80211_set_csa_beacon()
3815 cfg80211_get_chandef_type(&sdata->u.ibss.chandef)) in ieee80211_set_csa_beacon()
3828 if (sdata->u.ibss.chandef.chan->band != in ieee80211_set_csa_beacon()
3834 err = ieee80211_ibss_csa_beacon(sdata, params, changed); in ieee80211_set_csa_beacon()
3839 ieee80211_send_action_csa(sdata, params); in ieee80211_set_csa_beacon()
3844 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_set_csa_beacon()
3847 if (sdata->vif.bss_conf.chandef.chan->band != in ieee80211_set_csa_beacon()
3861 err = ieee80211_mesh_csa_beacon(sdata, params, changed); in ieee80211_set_csa_beacon()
3869 ieee80211_send_action_csa(sdata, params); in ieee80211_set_csa_beacon()
3881 static void ieee80211_color_change_abort(struct ieee80211_sub_if_data *sdata) in ieee80211_color_change_abort() argument
3883 sdata->vif.bss_conf.color_change_active = false; in ieee80211_color_change_abort()
3885 ieee80211_free_next_beacon(&sdata->deflink); in ieee80211_color_change_abort()
3887 cfg80211_color_change_aborted_notify(sdata->dev); in ieee80211_color_change_abort()
3894 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in __ieee80211_channel_switch() local
3895 struct ieee80211_local *local = sdata->local; in __ieee80211_channel_switch()
3902 sdata_assert_lock(sdata); in __ieee80211_channel_switch()
3908 if (sdata->wdev.cac_started) in __ieee80211_channel_switch()
3912 &sdata->vif.bss_conf.chandef)) in __ieee80211_channel_switch()
3916 if (sdata->vif.bss_conf.csa_active) in __ieee80211_channel_switch()
3920 conf = rcu_dereference_protected(sdata->vif.bss_conf.chanctx_conf, in __ieee80211_channel_switch()
3941 err = drv_pre_channel_switch(sdata, &ch_switch); in __ieee80211_channel_switch()
3945 err = ieee80211_link_reserve_chanctx(&sdata->deflink, ¶ms->chandef, in __ieee80211_channel_switch()
3952 err = ieee80211_check_combinations(sdata, NULL, chanctx->mode, 0); in __ieee80211_channel_switch()
3954 ieee80211_link_unreserve_chanctx(&sdata->deflink); in __ieee80211_channel_switch()
3959 if (sdata->vif.bss_conf.color_change_active) in __ieee80211_channel_switch()
3960 ieee80211_color_change_abort(sdata); in __ieee80211_channel_switch()
3962 err = ieee80211_set_csa_beacon(sdata, params, &changed); in __ieee80211_channel_switch()
3964 ieee80211_link_unreserve_chanctx(&sdata->deflink); in __ieee80211_channel_switch()
3968 if (params->punct_bitmap && !sdata->vif.bss_conf.eht_support) in __ieee80211_channel_switch()
3971 sdata->deflink.csa_chandef = params->chandef; in __ieee80211_channel_switch()
3972 sdata->deflink.csa_block_tx = params->block_tx; in __ieee80211_channel_switch()
3973 sdata->vif.bss_conf.csa_active = true; in __ieee80211_channel_switch()
3974 sdata->vif.bss_conf.csa_punct_bitmap = params->punct_bitmap; in __ieee80211_channel_switch()
3976 if (sdata->deflink.csa_block_tx) in __ieee80211_channel_switch()
3977 ieee80211_stop_vif_queues(local, sdata, in __ieee80211_channel_switch()
3980 cfg80211_ch_switch_started_notify(sdata->dev, in __ieee80211_channel_switch()
3981 &sdata->deflink.csa_chandef, 0, in __ieee80211_channel_switch()
3983 sdata->vif.bss_conf.csa_punct_bitmap); in __ieee80211_channel_switch()
3986 ieee80211_link_info_change_notify(sdata, &sdata->deflink, in __ieee80211_channel_switch()
3988 drv_channel_switch_beacon(sdata, ¶ms->chandef); in __ieee80211_channel_switch()
3991 ieee80211_csa_finalize(sdata); in __ieee80211_channel_switch()
4002 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_channel_switch() local
4003 struct ieee80211_local *local = sdata->local; in ieee80211_channel_switch()
4061 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_update_mgmt_frame_registrations() local
4073 intf_change = (sdata->vif.probe_req_reg != in ieee80211_update_mgmt_frame_registrations()
4075 (sdata->vif.rx_mcast_action_reg != in ieee80211_update_mgmt_frame_registrations()
4077 sdata->vif.probe_req_reg = upd->interface_stypes & preq_mask; in ieee80211_update_mgmt_frame_registrations()
4078 sdata->vif.rx_mcast_action_reg = in ieee80211_update_mgmt_frame_registrations()
4084 if (intf_change && ieee80211_sdata_running(sdata)) in ieee80211_update_mgmt_frame_registrations()
4085 drv_config_iface_filter(local, sdata, in ieee80211_update_mgmt_frame_registrations()
4086 sdata->vif.probe_req_reg ? in ieee80211_update_mgmt_frame_registrations()
4116 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_rekey_data() local
4121 drv_set_rekey_data(local, sdata, data); in ieee80211_set_rekey_data()
4129 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_probe_client() local
4130 struct ieee80211_local *local = sdata->local; in ieee80211_probe_client()
4146 sta = sta_info_get_bss(sdata, peer); in ieee80211_probe_client()
4154 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_probe_client()
4186 memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN); in ieee80211_probe_client()
4187 memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN); in ieee80211_probe_client()
4208 ieee80211_xmit(sdata, sta, skb); in ieee80211_probe_client()
4224 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_cfg_get_channel() local
4231 link = rcu_dereference(sdata->link[link_id]); in ieee80211_cfg_get_channel()
4243 sdata->vif.type == NL80211_IFTYPE_MONITOR) { in ieee80211_cfg_get_channel()
4267 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_qos_map() local
4280 old_qos_map = sdata_dereference(sdata->qos_map, sdata); in ieee80211_set_qos_map()
4281 rcu_assign_pointer(sdata->qos_map, new_qos_map); in ieee80211_set_qos_map()
4293 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_ap_chanwidth() local
4298 link = sdata_dereference(sdata->link[link_id], sdata); in ieee80211_set_ap_chanwidth()
4302 ieee80211_link_info_change_notify(sdata, link, changed); in ieee80211_set_ap_chanwidth()
4311 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_tx_ts() local
4312 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_add_tx_ts()
4315 if (sdata->vif.type != NL80211_IFTYPE_STATION) in ieee80211_add_tx_ts()
4318 if (!(sdata->wmm_acm & BIT(up))) in ieee80211_add_tx_ts()
4336 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_tx_ts() local
4337 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_del_tx_ts()
4359 ieee80211_flush_queues(local, sdata, false); in ieee80211_del_tx_ts()
4366 ieee80211_sta_handle_tspec_ac_params(sdata); in ieee80211_del_tx_ts()
4382 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_nan_func_terminated() local
4389 spin_lock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_terminated()
4391 func = idr_find(&sdata->u.nan.function_inst_ids, inst_id); in ieee80211_nan_func_terminated()
4393 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_terminated()
4398 idr_remove(&sdata->u.nan.function_inst_ids, inst_id); in ieee80211_nan_func_terminated()
4400 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_terminated()
4413 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_nan_func_match() local
4419 spin_lock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_match()
4421 func = idr_find(&sdata->u.nan.function_inst_ids, match->inst_id); in ieee80211_nan_func_match()
4423 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_match()
4428 spin_unlock_bh(&sdata->u.nan.func_lock); in ieee80211_nan_func_match()
4438 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_multicast_to_unicast() local
4440 sdata->u.ap.multicast_to_unicast = enabled; in ieee80211_set_multicast_to_unicast()
4499 struct ieee80211_sub_if_data *sdata; in ieee80211_get_txq_stats() local
4506 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_get_txq_stats()
4507 if (!sdata->vif.txq) { in ieee80211_get_txq_stats()
4511 ieee80211_fill_txq_stats(txqstats, to_txq_info(sdata->vif.txq)); in ieee80211_get_txq_stats()
4541 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_get_ftm_responder_stats() local
4543 return drv_get_ftm_responder_stats(local, sdata, ftm_stats); in ieee80211_get_ftm_responder_stats()
4551 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(dev); in ieee80211_start_pmsr() local
4553 return drv_start_pmsr(local, sdata, request); in ieee80211_start_pmsr()
4561 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(dev); in ieee80211_abort_pmsr() local
4563 return drv_abort_pmsr(local, sdata, request); in ieee80211_abort_pmsr()
4570 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_tid_config() local
4574 if (!sdata->local->ops->set_tid_config) in ieee80211_set_tid_config()
4578 return drv_set_tid_config(sdata->local, sdata, NULL, tid_conf); in ieee80211_set_tid_config()
4580 mutex_lock(&sdata->local->sta_mtx); in ieee80211_set_tid_config()
4581 sta = sta_info_get_bss(sdata, tid_conf->peer); in ieee80211_set_tid_config()
4583 mutex_unlock(&sdata->local->sta_mtx); in ieee80211_set_tid_config()
4587 ret = drv_set_tid_config(sdata->local, sdata, &sta->sta, tid_conf); in ieee80211_set_tid_config()
4588 mutex_unlock(&sdata->local->sta_mtx); in ieee80211_set_tid_config()
4597 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_reset_tid_config() local
4601 if (!sdata->local->ops->reset_tid_config) in ieee80211_reset_tid_config()
4605 return drv_reset_tid_config(sdata->local, sdata, NULL, tids); in ieee80211_reset_tid_config()
4607 mutex_lock(&sdata->local->sta_mtx); in ieee80211_reset_tid_config()
4608 sta = sta_info_get_bss(sdata, peer); in ieee80211_reset_tid_config()
4610 mutex_unlock(&sdata->local->sta_mtx); in ieee80211_reset_tid_config()
4614 ret = drv_reset_tid_config(sdata->local, sdata, &sta->sta, tids); in ieee80211_reset_tid_config()
4615 mutex_unlock(&sdata->local->sta_mtx); in ieee80211_reset_tid_config()
4632 ieee80211_set_after_color_change_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_set_after_color_change_beacon() argument
4635 switch (sdata->vif.type) { in ieee80211_set_after_color_change_beacon()
4639 if (!sdata->deflink.u.ap.next_beacon) in ieee80211_set_after_color_change_beacon()
4642 ret = ieee80211_assign_beacon(sdata, &sdata->deflink, in ieee80211_set_after_color_change_beacon()
4643 sdata->deflink.u.ap.next_beacon, in ieee80211_set_after_color_change_beacon()
4645 ieee80211_free_next_beacon(&sdata->deflink); in ieee80211_set_after_color_change_beacon()
4661 ieee80211_set_color_change_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_set_color_change_beacon() argument
4668 switch (sdata->vif.type) { in ieee80211_set_color_change_beacon()
4670 sdata->deflink.u.ap.next_beacon = in ieee80211_set_color_change_beacon()
4672 if (!sdata->deflink.u.ap.next_beacon) in ieee80211_set_color_change_beacon()
4684 err = ieee80211_assign_beacon(sdata, &sdata->deflink, in ieee80211_set_color_change_beacon()
4688 ieee80211_free_next_beacon(&sdata->deflink); in ieee80211_set_color_change_beacon()
4700 ieee80211_color_change_bss_config_notify(struct ieee80211_sub_if_data *sdata, in ieee80211_color_change_bss_config_notify() argument
4703 sdata->vif.bss_conf.he_bss_color.color = color; in ieee80211_color_change_bss_config_notify()
4704 sdata->vif.bss_conf.he_bss_color.enabled = enable; in ieee80211_color_change_bss_config_notify()
4707 ieee80211_link_info_change_notify(sdata, &sdata->deflink, changed); in ieee80211_color_change_bss_config_notify()
4709 if (!sdata->vif.bss_conf.nontransmitted && sdata->vif.mbssid_tx_vif) { in ieee80211_color_change_bss_config_notify()
4712 mutex_lock(&sdata->local->iflist_mtx); in ieee80211_color_change_bss_config_notify()
4713 list_for_each_entry(child, &sdata->local->interfaces, list) { in ieee80211_color_change_bss_config_notify()
4714 if (child != sdata && child->vif.mbssid_tx_vif == &sdata->vif) { in ieee80211_color_change_bss_config_notify()
4722 mutex_unlock(&sdata->local->iflist_mtx); in ieee80211_color_change_bss_config_notify()
4726 static int ieee80211_color_change_finalize(struct ieee80211_sub_if_data *sdata) in ieee80211_color_change_finalize() argument
4728 struct ieee80211_local *local = sdata->local; in ieee80211_color_change_finalize()
4732 sdata_assert_lock(sdata); in ieee80211_color_change_finalize()
4735 sdata->vif.bss_conf.color_change_active = false; in ieee80211_color_change_finalize()
4737 err = ieee80211_set_after_color_change_beacon(sdata, &changed); in ieee80211_color_change_finalize()
4739 cfg80211_color_change_aborted_notify(sdata->dev); in ieee80211_color_change_finalize()
4743 ieee80211_color_change_bss_config_notify(sdata, in ieee80211_color_change_finalize()
4744 sdata->vif.bss_conf.color_change_color, in ieee80211_color_change_finalize()
4746 cfg80211_color_change_notify(sdata->dev); in ieee80211_color_change_finalize()
4753 struct ieee80211_sub_if_data *sdata = in ieee80211_color_change_finalize_work() local
4756 struct ieee80211_local *local = sdata->local; in ieee80211_color_change_finalize_work()
4758 sdata_lock(sdata); in ieee80211_color_change_finalize_work()
4762 if (!sdata->vif.bss_conf.color_change_active) in ieee80211_color_change_finalize_work()
4765 if (!ieee80211_sdata_running(sdata)) in ieee80211_color_change_finalize_work()
4768 ieee80211_color_change_finalize(sdata); in ieee80211_color_change_finalize_work()
4772 sdata_unlock(sdata); in ieee80211_color_change_finalize_work()
4781 struct ieee80211_sub_if_data *sdata = link->sdata; in ieee80211_color_collision_detection_work() local
4783 sdata_lock(sdata); in ieee80211_color_collision_detection_work()
4784 cfg80211_obss_color_collision_notify(sdata->dev, link->color_bitmap); in ieee80211_color_collision_detection_work()
4785 sdata_unlock(sdata); in ieee80211_color_collision_detection_work()
4790 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_color_change_finish() local
4792 ieee80211_queue_work(&sdata->local->hw, in ieee80211_color_change_finish()
4793 &sdata->deflink.color_change_finalize_work); in ieee80211_color_change_finish()
4801 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_obss_color_collision_notify() local
4802 struct ieee80211_link_data *link = &sdata->deflink; in ieee80211_obss_color_collision_notify()
4804 if (sdata->vif.bss_conf.color_change_active || sdata->vif.bss_conf.csa_active) in ieee80211_obss_color_collision_notify()
4814 ieee80211_queue_delayed_work(&sdata->local->hw, in ieee80211_obss_color_collision_notify()
4824 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_color_change() local
4825 struct ieee80211_local *local = sdata->local; in ieee80211_color_change()
4829 sdata_assert_lock(sdata); in ieee80211_color_change()
4831 if (sdata->vif.bss_conf.nontransmitted) in ieee80211_color_change()
4839 if (sdata->vif.bss_conf.color_change_active || sdata->vif.bss_conf.csa_active) { in ieee80211_color_change()
4844 err = ieee80211_set_color_change_beacon(sdata, params, &changed); in ieee80211_color_change()
4848 sdata->vif.bss_conf.color_change_active = true; in ieee80211_color_change()
4849 sdata->vif.bss_conf.color_change_color = params->color; in ieee80211_color_change()
4851 cfg80211_color_change_started_notify(sdata->dev, params->count); in ieee80211_color_change()
4854 ieee80211_color_change_bss_config_notify(sdata, 0, 0, changed); in ieee80211_color_change()
4857 ieee80211_color_change_finalize(sdata); in ieee80211_color_change()
4881 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_add_intf_link() local
4887 mutex_lock(&sdata->local->mtx); in ieee80211_add_intf_link()
4888 res = ieee80211_vif_set_links(sdata, wdev->valid_links, 0); in ieee80211_add_intf_link()
4889 mutex_unlock(&sdata->local->mtx); in ieee80211_add_intf_link()
4898 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in ieee80211_del_intf_link() local
4900 mutex_lock(&sdata->local->mtx); in ieee80211_del_intf_link()
4901 ieee80211_vif_set_links(sdata, wdev->valid_links, 0); in ieee80211_del_intf_link()
4902 mutex_unlock(&sdata->local->mtx); in ieee80211_del_intf_link()
4906 struct ieee80211_sub_if_data *sdata, in sta_add_link_station() argument
4912 sta = sta_info_get_bss(sdata, params->mld_mac); in sta_add_link_station()
4940 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_add_link_station() local
4944 mutex_lock(&sdata->local->sta_mtx); in ieee80211_add_link_station()
4945 ret = sta_add_link_station(local, sdata, params); in ieee80211_add_link_station()
4946 mutex_unlock(&sdata->local->sta_mtx); in ieee80211_add_link_station()
4952 struct ieee80211_sub_if_data *sdata, in sta_mod_link_station() argument
4957 sta = sta_info_get_bss(sdata, params->mld_mac); in sta_mod_link_station()
4971 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_mod_link_station() local
4975 mutex_lock(&sdata->local->sta_mtx); in ieee80211_mod_link_station()
4976 ret = sta_mod_link_station(local, sdata, params); in ieee80211_mod_link_station()
4977 mutex_unlock(&sdata->local->sta_mtx); in ieee80211_mod_link_station()
4982 static int sta_del_link_station(struct ieee80211_sub_if_data *sdata, in sta_del_link_station() argument
4987 sta = sta_info_get_bss(sdata, params->mld_mac); in sta_del_link_station()
5007 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_del_link_station() local
5010 mutex_lock(&sdata->local->sta_mtx); in ieee80211_del_link_station()
5011 ret = sta_del_link_station(sdata, params); in ieee80211_del_link_station()
5012 mutex_unlock(&sdata->local->sta_mtx); in ieee80211_del_link_station()
5021 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_set_hw_timestamp() local
5022 struct ieee80211_local *local = sdata->local; in ieee80211_set_hw_timestamp()
5027 if (!check_sdata_in_driver(sdata)) in ieee80211_set_hw_timestamp()
5030 return local->ops->set_hw_timestamp(&local->hw, &sdata->vif, hwts); in ieee80211_set_hw_timestamp()