Lines Matching defs:sdata
27 ieee80211_link_or_deflink(struct ieee80211_sub_if_data *sdata, int link_id,
34 * For keys, if sdata is not an MLD, we might not use
38 if (require_valid && ieee80211_vif_is_mld(&sdata->vif))
41 return &sdata->deflink;
44 link = sdata_dereference(sdata->link[link_id], sdata);
50 static void ieee80211_set_mu_mimo_follow(struct ieee80211_sub_if_data *sdata,
61 memcpy(sdata->vif.bss_conf.mu_group.membership,
63 memcpy(sdata->vif.bss_conf.mu_group.position,
66 ieee80211_link_info_change_notify(sdata, &sdata->deflink,
77 ether_addr_copy(sdata->u.mntr.mu_follow_addr,
81 sdata->vif.bss_conf.mu_mimo_owner = mu_mimo_groups || mu_mimo_follow;
84 static int ieee80211_set_mon_options(struct ieee80211_sub_if_data *sdata,
87 struct ieee80211_local *local = sdata->local;
91 if (params->flags && ieee80211_sdata_running(sdata)) {
103 if ((params->flags & mask) != (sdata->u.mntr.flags & mask))
121 if (ieee80211_sdata_running(sdata)) {
122 ieee80211_adjust_monitor_flags(sdata, -1);
123 sdata->u.mntr.flags = params->flags;
124 ieee80211_adjust_monitor_flags(sdata, 1);
133 sdata->u.mntr.flags = params->flags;
140 static int ieee80211_set_ap_mbssid_options(struct ieee80211_sub_if_data *sdata,
146 sdata->vif.mbssid_tx_vif = NULL;
152 if (sdata->vif.type != NL80211_IFTYPE_AP || !params.tx_wdev)
159 if (tx_sdata == sdata) {
160 sdata->vif.mbssid_tx_vif = &sdata->vif;
162 sdata->vif.mbssid_tx_vif = &tx_sdata->vif;
180 struct ieee80211_sub_if_data *sdata;
187 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
190 err = ieee80211_set_mon_options(sdata, params);
192 ieee80211_if_remove(sdata);
212 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
213 struct ieee80211_local *local = sdata->local;
217 ret = ieee80211_if_change_type(sdata, type);
222 RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
223 ieee80211_check_fast_rx_iface(sdata);
225 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
231 if (ieee80211_vif_is_mld(&sdata->vif))
234 sdata->u.mgd.use_4addr = params->use_4addr;
239 sta = sta_info_get(sdata, sdata->deflink.u.mgd.bssid);
241 drv_sta_set_4addr(local, sdata, &sta->sta,
246 ieee80211_send_4addr_nullfunc(local, sdata);
249 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
250 ret = ieee80211_set_mon_options(sdata, params);
261 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
264 mutex_lock(&sdata->local->chanctx_mtx);
265 ret = ieee80211_check_combinations(sdata, NULL, 0, 0);
266 mutex_unlock(&sdata->local->chanctx_mtx);
283 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
286 mutex_lock(&sdata->local->chanctx_mtx);
287 ret = ieee80211_check_combinations(sdata, NULL, 0, 0);
288 mutex_unlock(&sdata->local->chanctx_mtx);
296 ret = drv_start_nan(sdata->local, sdata, conf);
298 ieee80211_sdata_stop(sdata);
300 sdata->u.nan.conf = *conf;
308 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
310 drv_stop_nan(sdata->local, sdata);
311 ieee80211_sdata_stop(sdata);
319 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
323 if (sdata->vif.type != NL80211_IFTYPE_NAN)
326 if (!ieee80211_sdata_running(sdata))
329 new_conf = sdata->u.nan.conf;
337 ret = drv_nan_change_conf(sdata->local, sdata, &new_conf, changes);
339 sdata->u.nan.conf = new_conf;
348 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
351 if (sdata->vif.type != NL80211_IFTYPE_NAN)
354 if (!ieee80211_sdata_running(sdata))
357 spin_lock_bh(&sdata->u.nan.func_lock);
359 ret = idr_alloc(&sdata->u.nan.function_inst_ids,
360 nan_func, 1, sdata->local->hw.max_nan_de_entries + 1,
362 spin_unlock_bh(&sdata->u.nan.func_lock);
371 ret = drv_add_nan_func(sdata->local, sdata, nan_func);
373 spin_lock_bh(&sdata->u.nan.func_lock);
374 idr_remove(&sdata->u.nan.function_inst_ids,
376 spin_unlock_bh(&sdata->u.nan.func_lock);
383 ieee80211_find_nan_func_by_cookie(struct ieee80211_sub_if_data *sdata,
389 lockdep_assert_held(&sdata->u.nan.func_lock);
391 idr_for_each_entry(&sdata->u.nan.function_inst_ids, func, id) {
402 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
406 if (sdata->vif.type != NL80211_IFTYPE_NAN ||
407 !ieee80211_sdata_running(sdata))
410 spin_lock_bh(&sdata->u.nan.func_lock);
412 func = ieee80211_find_nan_func_by_cookie(sdata, cookie);
416 spin_unlock_bh(&sdata->u.nan.func_lock);
419 drv_del_nan_func(sdata->local, sdata, instance_id);
426 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
428 sdata->noack_map = noack_map;
430 ieee80211_check_fast_xmit_iface(sdata);
435 static int ieee80211_set_tx(struct ieee80211_sub_if_data *sdata,
438 struct ieee80211_local *local = sdata->local;
447 sta = sta_info_get_bss(sdata, mac_addr);
469 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
471 ieee80211_link_or_deflink(sdata, link_id, false);
472 struct ieee80211_local *local = sdata->local;
477 if (!ieee80211_sdata_running(sdata))
484 return ieee80211_set_tx(sdata, mac_addr, key_idx);
516 sta = sta_info_get_bss(sdata, mac_addr);
534 switch (sdata->vif.type) {
536 if (sdata->u.mgd.mfp != IEEE80211_MFP_DISABLED)
550 if (sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE)
580 ieee80211_lookup_key(struct ieee80211_sub_if_data *sdata, int link_id,
583 struct ieee80211_local *local __maybe_unused = sdata->local;
584 struct ieee80211_link_data *link = &sdata->deflink;
588 link = rcu_dereference_check(sdata->link[link_id],
589 lockdep_is_held(&sdata->wdev.mtx));
598 sta = sta_info_get_bss(sdata, mac_addr);
627 sdata->keys[key_idx]);
635 return rcu_dereference_check_key_mtx(local, sdata->keys[key_idx]);
644 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
645 struct ieee80211_local *local = sdata->local;
652 key = ieee80211_lookup_key(sdata, link_id, key_idx, pairwise, mac_addr);
658 ieee80211_key_free(key, sdata->vif.type == NL80211_IFTYPE_STATION);
674 struct ieee80211_sub_if_data *sdata;
684 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
688 key = ieee80211_lookup_key(sdata, link_id, key_idx, pairwise, mac_addr);
704 drv_get_key_seq(sdata->local, key, &kseq);
737 drv_get_key_seq(sdata->local, key, &kseq);
756 drv_get_key_seq(sdata->local, key, &kseq);
778 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
780 ieee80211_link_or_deflink(sdata, link_id, false);
794 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
796 ieee80211_link_or_deflink(sdata, link_id, true);
810 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
812 ieee80211_link_or_deflink(sdata, link_id, true);
836 int shift = ieee80211_vif_get_shift(&sta->sdata->vif);
839 sband = ieee80211_get_sband(sta->sdata);
861 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
862 struct ieee80211_local *local = sdata->local;
868 sta = sta_info_get_by_idx(sdata, idx);
891 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
892 struct ieee80211_local *local = sdata->local;
898 sta = sta_info_get_bss(sdata, mac);
913 struct ieee80211_sub_if_data *sdata;
920 sdata = wiphy_dereference(local->hw.wiphy,
922 if (sdata) {
923 sdata_lock(sdata);
925 ieee80211_link_release_channel(&sdata->deflink);
926 ret = ieee80211_link_use_channel(&sdata->deflink,
930 sdata_unlock(sdata);
948 ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata,
959 old = sdata_dereference(link->u.ap.probe_resp, sdata);
982 static int ieee80211_set_fils_discovery(struct ieee80211_sub_if_data *sdata,
997 old = sdata_dereference(link->u.ap.fils_discovery, sdata);
1012 ieee80211_set_unsol_bcast_probe_resp(struct ieee80211_sub_if_data *sdata,
1022 old = sdata_dereference(link->u.ap.unsol_bcast_probe_resp, sdata);
1039 struct ieee80211_sub_if_data *sdata,
1114 ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata,
1129 old = sdata_dereference(link->u.ap.beacon, sdata);
1226 err = ieee80211_set_probe_resp(sdata, params->probe_resp,
1237 err = ieee80211_set_ftm_responder_params(sdata,
1253 sdata->u.ap.active = true;
1265 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1266 struct ieee80211_local *local = sdata->local;
1281 link = sdata_dereference(sdata->link[link_id], sdata);
1287 old = sdata_dereference(link->u.ap.beacon, sdata);
1296 link->needed_rx_chains = sdata->local->rx_chains;
1381 if (sdata->vif.type == NL80211_IFTYPE_AP &&
1383 err = ieee80211_set_ap_mbssid_options(sdata,
1405 sdata->control_port_protocol = params->crypto.control_port_ethertype;
1406 sdata->control_port_no_encrypt = params->crypto.control_port_no_encrypt;
1407 sdata->control_port_over_nl80211 =
1409 sdata->control_port_no_preauth =
1412 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) {
1425 link_conf->allow_p2p_go_ps = sdata->vif.p2p;
1429 sdata->vif.cfg.s1g = params->chandef.chan->band ==
1432 sdata->vif.cfg.ssid_len = params->ssid_len;
1434 memcpy(sdata->vif.cfg.ssid, params->ssid,
1447 sdata->beacon_rate_set = false;
1451 sdata->beacon_rateidx_mask[i] =
1453 if (sdata->beacon_rateidx_mask[i])
1454 sdata->beacon_rate_set = true;
1461 err = ieee80211_assign_beacon(sdata, link, ¶ms->beacon, NULL, NULL,
1467 err = ieee80211_set_fils_discovery(sdata,
1476 err = ieee80211_set_unsol_bcast_probe_resp(sdata,
1484 err = drv_start_ap(sdata->local, sdata, link_conf);
1486 old = sdata_dereference(link->u.ap.beacon, sdata);
1491 sdata->u.ap.active = false;
1495 ieee80211_recalc_dtim(local, sdata);
1496 ieee80211_vif_cfg_change_notify(sdata, BSS_CHANGED_SSID);
1497 ieee80211_link_info_change_notify(sdata, link, changed);
1500 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
1516 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1523 sdata_assert_lock(sdata);
1525 link = sdata_dereference(sdata->link[params->link_id], sdata);
1537 old = sdata_dereference(link->u.ap.beacon, sdata);
1541 err = ieee80211_assign_beacon(sdata, link, params, NULL, NULL,
1552 ieee80211_link_info_change_notify(sdata, link, changed);
1570 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1572 struct ieee80211_local *local = sdata->local;
1579 sdata_dereference(sdata->link[link_id], sdata);
1582 sdata_assert_lock(sdata);
1584 old_beacon = sdata_dereference(link->u.ap.beacon, sdata);
1588 sdata);
1590 sdata);
1593 sdata);
1600 ieee80211_wake_vif_queues(local, sdata,
1610 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
1615 sdata->u.ap.active = false;
1631 sdata->vif.mbssid_tx_vif = NULL;
1637 __sta_info_flush(sdata, true);
1638 ieee80211_free_keys(sdata, true);
1641 sdata->beacon_rate_set = false;
1642 sdata->vif.cfg.ssid_len = 0;
1643 clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state);
1644 ieee80211_link_info_change_notify(sdata, link,
1647 if (sdata->wdev.cac_started) {
1650 cfg80211_cac_event(sdata->dev, &chandef,
1655 drv_stop_ap(sdata->local, sdata, link_conf);
1658 local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps.bc_buf);
1659 ieee80211_purge_tx_queue(&local->hw, &sdata->u.ap.ps.bc_buf);
1734 struct ieee80211_sub_if_data *sdata = sta->sdata;
1741 changed = mesh_plink_inc_estab_count(sdata);
1747 sdata->u.mesh.mshcfg.power_mode);
1761 changed = mesh_plink_dec_estab_count(sdata);
1790 ieee80211_mbss_info_change_notify(sdata, changed);
1800 struct ieee80211_sub_if_data *sdata = sta->sdata;
1803 sdata_dereference(sdata->link[link_id], sdata);
1843 ret = drv_sta_set_txpwr(local, sdata, sta);
1857 ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
1862 ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband,
1867 ieee80211_he_cap_ie_to_sta_he_cap(sdata, sband,
1874 ieee80211_eht_cap_ie_to_sta_eht_cap(sdata, sband,
1885 __ieee80211_vht_handle_opmode(sdata, link_sta,
1899 struct ieee80211_sub_if_data *sdata = sta->sdata;
1906 if (ieee80211_vif_is_mesh(&sdata->vif)) {
1967 !sdata->deflink.u.mgd.tdls_chan_switch_prohibited &&
1973 !sdata->u.mgd.tdls_wider_bw_prohibited &&
2013 if (ieee80211_vif_is_mesh(&sdata->vif))
2040 struct ieee80211_sub_if_data *sdata;
2044 sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
2046 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
2047 sdata->vif.type != NL80211_IFTYPE_AP)
2050 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2052 if (ether_addr_equal(mac, sdata->vif.addr))
2059 sdata->vif.type == NL80211_IFTYPE_STATION &&
2060 !sdata->u.mgd.associated)
2069 sta = sta_info_alloc_with_link(sdata, mac,
2074 sta = sta_info_alloc(sdata, mac, GFP_KERNEL);
2109 struct ieee80211_sub_if_data *sdata;
2111 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2114 return sta_info_destroy_addr_bss(sdata, params->mac);
2116 sta_info_flush(sdata);
2124 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2133 sta = sta_info_get_bss(sdata, mac);
2139 switch (sdata->vif.type) {
2141 if (sdata->u.mesh.user_mpm)
2175 if (params->vlan && params->vlan != sta->sdata->dev) {
2186 drv_sta_set_4addr(local, sta->sdata, &sta->sta, true);
2189 if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
2190 sta->sdata->u.vlan.sta) {
2192 RCU_INIT_POINTER(sta->sdata->u.vlan.sta, NULL);
2196 ieee80211_vif_dec_num_mcast(sta->sdata);
2198 sta->sdata = vlansdata;
2202 ieee80211_vif_inc_num_mcast(sta->sdata);
2203 cfg80211_send_layer2_update(sta->sdata->dev,
2209 if (sdata != sta->sdata) {
2210 mutex_lock_nested(&sta->sdata->wdev.mtx, 1);
2212 mutex_unlock(&sta->sdata->wdev.mtx);
2221 if (sdata->vif.type == NL80211_IFTYPE_STATION &&
2224 ieee80211_recalc_ps_vif(sdata);
2237 struct ieee80211_sub_if_data *sdata;
2241 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2244 sta = sta_info_get(sdata, next_hop);
2250 mpath = mesh_path_add(sdata, dst);
2265 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2268 return mesh_path_del(sdata, dst);
2270 mesh_path_flush_by_iface(sdata);
2277 struct ieee80211_sub_if_data *sdata;
2281 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2285 sta = sta_info_get(sdata, next_hop);
2291 mpath = mesh_path_lookup(sdata, dst);
2315 pinfo->generation = mpath->sdata->u.mesh.mesh_paths_generation;
2353 struct ieee80211_sub_if_data *sdata;
2356 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2359 mpath = mesh_path_lookup(sdata, dst);
2374 struct ieee80211_sub_if_data *sdata;
2377 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2380 mpath = mesh_path_lookup_by_idx(sdata, idx);
2397 pinfo->generation = mpath->sdata->u.mesh.mpp_paths_generation;
2404 struct ieee80211_sub_if_data *sdata;
2407 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2410 mpath = mpp_path_lookup(sdata, dst);
2425 struct ieee80211_sub_if_data *sdata;
2428 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2431 mpath = mpp_path_lookup_by_idx(sdata, idx);
2446 struct ieee80211_sub_if_data *sdata;
2447 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2449 memcpy(conf, &(sdata->u.mesh.mshcfg), sizeof(struct mesh_config));
2462 struct ieee80211_sub_if_data *sdata = container_of(ifmsh,
2494 memcpy(sdata->vif.bss_conf.mcast_rate, setup->mcast_rate,
2496 sdata->vif.bss_conf.basic_rates = setup->basic_rates;
2498 sdata->vif.bss_conf.beacon_int = setup->beacon_interval;
2499 sdata->vif.bss_conf.dtim_period = setup->dtim_period;
2501 sdata->beacon_rate_set = false;
2502 if (wiphy_ext_feature_isset(sdata->local->hw.wiphy,
2505 sdata->beacon_rateidx_mask[i] =
2507 if (sdata->beacon_rateidx_mask[i])
2508 sdata->beacon_rate_set = true;
2520 struct ieee80211_sub_if_data *sdata;
2523 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2524 ifmsh = &sdata->u.mesh;
2527 conf = &(sdata->u.mesh.mshcfg);
2595 if (!ieee80211_hw_check(&sdata->local->hw, SIGNAL_DBM))
2601 sdata->vif.bss_conf.ht_operation_mode = nconf->ht_opmode;
2602 ieee80211_link_info_change_notify(sdata, &sdata->deflink,
2616 ieee80211_mps_local_status_update(sdata);
2631 ieee80211_mbss_info_change_notify(sdata, BSS_CHANGED_BEACON);
2639 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2640 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
2648 sdata->control_port_over_nl80211 = setup->control_port_over_nl80211;
2651 sdata->deflink.smps_mode = IEEE80211_SMPS_OFF;
2652 sdata->deflink.needed_rx_chains = sdata->local->rx_chains;
2654 mutex_lock(&sdata->local->mtx);
2655 err = ieee80211_link_use_channel(&sdata->deflink, &setup->chandef,
2657 mutex_unlock(&sdata->local->mtx);
2661 return ieee80211_start_mesh(sdata);
2666 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2668 ieee80211_stop_mesh(sdata);
2669 mutex_lock(&sdata->local->mtx);
2670 ieee80211_link_release_channel(&sdata->deflink);
2671 kfree(sdata->u.mesh.ie);
2672 mutex_unlock(&sdata->local->mtx);
2682 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2687 link = ieee80211_link_or_deflink(sdata, params->link_id, true);
2691 if (!sdata_dereference(link->u.ap.beacon, sdata))
2732 sdata->flags |= IEEE80211_SDATA_DONT_BRIDGE_PACKETS;
2734 sdata->flags &= ~IEEE80211_SDATA_DONT_BRIDGE_PACKETS;
2735 ieee80211_check_fast_rx_iface(sdata);
2761 ieee80211_link_info_change_notify(sdata, link, changed);
2771 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2773 ieee80211_link_or_deflink(sdata, params->link_id, true);
2797 ieee80211_regulatory_limit_wmm_params(sdata, &p, params->ac);
2807 ieee80211_link_info_change_notify(sdata, link,
2832 struct ieee80211_sub_if_data *sdata;
2834 sdata = IEEE80211_WDEV_TO_SUB_IF(req->wdev);
2836 switch (ieee80211_vif_type_p2p(&sdata->vif)) {
2844 if (sdata->local->ops->hw_scan)
2860 if (sdata->deflink.u.ap.beacon &&
2870 return ieee80211_request_scan(sdata, req);
2883 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2885 if (!sdata->local->ops->sched_scan_start)
2888 return ieee80211_request_sched_scan_start(sdata, req);
2952 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2954 memcpy(sdata->vif.bss_conf.mcast_rate, rate,
2957 ieee80211_link_info_change_notify(sdata, &sdata->deflink,
3025 struct ieee80211_sub_if_data *sdata;
3031 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
3033 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
3034 sdata = wiphy_dereference(local->hw.wiphy,
3036 if (!sdata)
3042 sdata->deflink.user_power_level =
3050 sdata->deflink.user_power_level = MBM_TO_DBM(mbm);
3054 if (txp_type != sdata->vif.bss_conf.txpower_type) {
3056 sdata->vif.bss_conf.txpower_type = txp_type;
3059 ieee80211_recalc_txpower(sdata, update_txp_type);
3078 list_for_each_entry(sdata, &local->interfaces, list) {
3079 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
3083 sdata->deflink.user_power_level = local->user_power_level;
3084 if (txp_type != sdata->vif.bss_conf.txpower_type)
3086 sdata->vif.bss_conf.txpower_type = txp_type;
3088 list_for_each_entry(sdata, &local->interfaces, list) {
3089 if (sdata->vif.type == NL80211_IFTYPE_MONITOR)
3091 ieee80211_recalc_txpower(sdata, update_txp_type);
3096 sdata = wiphy_dereference(local->hw.wiphy,
3098 if (sdata) {
3099 sdata->deflink.user_power_level = local->user_power_level;
3100 if (txp_type != sdata->vif.bss_conf.txpower_type)
3102 sdata->vif.bss_conf.txpower_type = txp_type;
3104 ieee80211_recalc_txpower(sdata, update_txp_type);
3116 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
3119 return drv_get_txpower(local, sdata, dbm);
3124 *dbm = sdata->vif.bss_conf.txpower;
3152 struct ieee80211_sub_if_data *sdata;
3154 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
3155 if (sdata->flags & IEEE80211_SDATA_IN_DRIVER)
3156 vif = &sdata->vif;
3176 int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata,
3186 lockdep_assert_held(&sdata->wdev.mtx);
3188 if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION))
3203 if (!sdata->u.mgd.associated ||
3210 list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) {
3211 if (!sta->sta.tdls || sta->sdata != sdata || !sta->uploaded ||
3221 if (tdls_peer_found || !sdata->u.mgd.powersave)
3228 err = ieee80211_send_smps_action(sdata, smps_mode,
3233 ieee80211_teardown_tdls_peers(sdata);
3241 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3245 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3251 if (enabled == sdata->u.mgd.powersave &&
3255 sdata->u.mgd.powersave = enabled;
3259 sdata_lock(sdata);
3260 for (link_id = 0; link_id < ARRAY_SIZE(sdata->link); link_id++) {
3263 link = sdata_dereference(sdata->link[link_id], sdata);
3267 __ieee80211_request_smps_mgd(sdata, link,
3270 sdata_unlock(sdata);
3276 ieee80211_recalc_ps_vif(sdata);
3277 ieee80211_check_fast_rx_iface(sdata);
3286 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3287 struct ieee80211_vif *vif = &sdata->vif;
3294 if (sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER &&
3295 !(sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI))
3302 sdata->deflink.u.mgd.last_cqm_event_signal = 0;
3305 if (sdata->u.mgd.associated &&
3306 sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)
3307 ieee80211_link_info_change_notify(sdata, &sdata->deflink,
3317 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3318 struct ieee80211_vif *vif = &sdata->vif;
3321 if (sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER)
3328 sdata->deflink.u.mgd.last_cqm_event_signal = 0;
3331 if (sdata->u.mgd.associated &&
3332 sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)
3333 ieee80211_link_info_change_notify(sdata, &sdata->deflink,
3345 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3349 if (!ieee80211_sdata_running(sdata))
3358 if (rcu_access_pointer(sdata->vif.bss_conf.chanctx_conf) &&
3359 sdata->vif.bss_conf.chandef.chan) {
3360 u32 basic_rates = sdata->vif.bss_conf.basic_rates;
3361 enum nl80211_band band = sdata->vif.bss_conf.chandef.chan->band;
3368 ret = drv_set_bitrate_mask(local, sdata, mask);
3377 sdata->rc_rateidx_mask[i] = mask->control[i].legacy;
3378 memcpy(sdata->rc_rateidx_mcs_mask[i], mask->control[i].ht_mcs,
3380 memcpy(sdata->rc_rateidx_vht_mcs_mask[i],
3384 sdata->rc_has_mcs_mask[i] = false;
3385 sdata->rc_has_vht_mcs_mask[i] = false;
3390 if (sdata->rc_rateidx_mcs_mask[i][j] != 0xff) {
3391 sdata->rc_has_mcs_mask[i] = true;
3397 if (sdata->rc_rateidx_vht_mcs_mask[i][j] != 0xffff) {
3398 sdata->rc_has_vht_mcs_mask[i] = true;
3412 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3413 struct ieee80211_local *local = sdata->local;
3423 sdata->deflink.smps_mode = IEEE80211_SMPS_OFF;
3424 sdata->deflink.needed_rx_chains = local->rx_chains;
3426 err = ieee80211_link_use_channel(&sdata->deflink, chandef,
3431 ieee80211_queue_delayed_work(&sdata->local->hw,
3432 &sdata->deflink.dfs_cac_timer_work,
3443 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3444 struct ieee80211_local *local = sdata->local;
3447 list_for_each_entry(sdata, &local->interfaces, list) {
3449 * by the time it gets it, sdata->wdev.cac_started
3452 cancel_delayed_work(&sdata->deflink.dfs_cac_timer_work);
3454 if (sdata->wdev.cac_started) {
3455 ieee80211_link_release_channel(&sdata->deflink);
3456 sdata->wdev.cac_started = false;
3572 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
3573 struct ieee80211_local *local = sdata->local;
3588 if (iter == sdata || iter->vif.mbssid_tx_vif != vif)
3595 ieee80211_queue_work(&local->hw, &sdata->deflink.csa_finalize_work);
3603 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
3604 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
3605 struct ieee80211_local *local = sdata->local;
3607 sdata->deflink.csa_block_tx = block_tx;
3608 sdata_info(sdata, "channel switch failed, disconnecting\n");
3613 static int ieee80211_set_after_csa_beacon(struct ieee80211_sub_if_data *sdata,
3618 switch (sdata->vif.type) {
3620 if (!sdata->deflink.u.ap.next_beacon)
3623 err = ieee80211_assign_beacon(sdata, &sdata->deflink,
3624 sdata->deflink.u.ap.next_beacon,
3626 ieee80211_free_next_beacon(&sdata->deflink);
3632 err = ieee80211_ibss_finish_csa(sdata, changed);
3638 err = ieee80211_mesh_finish_csa(sdata, changed);
3651 static int __ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata)
3653 struct ieee80211_local *local = sdata->local;
3657 sdata_assert_lock(sdata);
3668 if (sdata->deflink.reserved_chanctx) {
3674 if (sdata->deflink.reserved_ready)
3677 return ieee80211_link_use_reserved_context(&sdata->deflink);
3680 if (!cfg80211_chandef_identical(&sdata->vif.bss_conf.chandef,
3681 &sdata->deflink.csa_chandef))
3684 sdata->vif.bss_conf.csa_active = false;
3686 err = ieee80211_set_after_csa_beacon(sdata, &changed);
3690 if (sdata->vif.bss_conf.eht_puncturing != sdata->vif.bss_conf.csa_punct_bitmap) {
3691 sdata->vif.bss_conf.eht_puncturing =
3692 sdata->vif.bss_conf.csa_punct_bitmap;
3696 ieee80211_link_info_change_notify(sdata, &sdata->deflink, changed);
3698 if (sdata->deflink.csa_block_tx) {
3699 ieee80211_wake_vif_queues(local, sdata,
3701 sdata->deflink.csa_block_tx = false;
3704 err = drv_post_channel_switch(sdata);
3708 cfg80211_ch_switch_notify(sdata->dev, &sdata->deflink.csa_chandef, 0,
3709 sdata->vif.bss_conf.eht_puncturing);
3714 static void ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata)
3716 if (__ieee80211_csa_finalize(sdata)) {
3717 sdata_info(sdata, "failed to finalize CSA, disconnecting\n");
3718 cfg80211_stop_iface(sdata->local->hw.wiphy, &sdata->wdev,
3725 struct ieee80211_sub_if_data *sdata =
3728 struct ieee80211_local *local = sdata->local;
3730 sdata_lock(sdata);
3735 if (!sdata->vif.bss_conf.csa_active)
3738 if (!ieee80211_sdata_running(sdata))
3741 ieee80211_csa_finalize(sdata);
3746 sdata_unlock(sdata);
3749 static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata,
3756 switch (sdata->vif.type) {
3758 sdata->deflink.u.ap.next_beacon =
3760 if (!sdata->deflink.u.ap.next_beacon)
3786 ieee80211_free_next_beacon(&sdata->deflink);
3796 err = ieee80211_assign_beacon(sdata, &sdata->deflink,
3800 ieee80211_free_next_beacon(&sdata->deflink);
3806 if (!sdata->vif.cfg.ibss_joined)
3809 if (params->chandef.width != sdata->u.ibss.chandef.width)
3815 cfg80211_get_chandef_type(&sdata->u.ibss.chandef))
3828 if (sdata->u.ibss.chandef.chan->band !=
3834 err = ieee80211_ibss_csa_beacon(sdata, params, changed);
3839 ieee80211_send_action_csa(sdata, params);
3844 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
3847 if (sdata->vif.bss_conf.chandef.chan->band !=
3861 err = ieee80211_mesh_csa_beacon(sdata, params, changed);
3869 ieee80211_send_action_csa(sdata, params);
3881 static void ieee80211_color_change_abort(struct ieee80211_sub_if_data *sdata)
3883 sdata->vif.bss_conf.color_change_active = false;
3885 ieee80211_free_next_beacon(&sdata->deflink);
3887 cfg80211_color_change_aborted_notify(sdata->dev);
3894 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3895 struct ieee80211_local *local = sdata->local;
3902 sdata_assert_lock(sdata);
3908 if (sdata->wdev.cac_started)
3912 &sdata->vif.bss_conf.chandef))
3916 if (sdata->vif.bss_conf.csa_active)
3920 conf = rcu_dereference_protected(sdata->vif.bss_conf.chanctx_conf,
3941 err = drv_pre_channel_switch(sdata, &ch_switch);
3945 err = ieee80211_link_reserve_chanctx(&sdata->deflink, ¶ms->chandef,
3952 err = ieee80211_check_combinations(sdata, NULL, chanctx->mode, 0);
3954 ieee80211_link_unreserve_chanctx(&sdata->deflink);
3959 if (sdata->vif.bss_conf.color_change_active)
3960 ieee80211_color_change_abort(sdata);
3962 err = ieee80211_set_csa_beacon(sdata, params, &changed);
3964 ieee80211_link_unreserve_chanctx(&sdata->deflink);
3968 if (params->punct_bitmap && !sdata->vif.bss_conf.eht_support)
3971 sdata->deflink.csa_chandef = params->chandef;
3972 sdata->deflink.csa_block_tx = params->block_tx;
3973 sdata->vif.bss_conf.csa_active = true;
3974 sdata->vif.bss_conf.csa_punct_bitmap = params->punct_bitmap;
3976 if (sdata->deflink.csa_block_tx)
3977 ieee80211_stop_vif_queues(local, sdata,
3980 cfg80211_ch_switch_started_notify(sdata->dev,
3981 &sdata->deflink.csa_chandef, 0,
3983 sdata->vif.bss_conf.csa_punct_bitmap);
3986 ieee80211_link_info_change_notify(sdata, &sdata->deflink,
3988 drv_channel_switch_beacon(sdata, ¶ms->chandef);
3991 ieee80211_csa_finalize(sdata);
4002 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4003 struct ieee80211_local *local = sdata->local;
4061 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
4073 intf_change = (sdata->vif.probe_req_reg !=
4075 (sdata->vif.rx_mcast_action_reg !=
4077 sdata->vif.probe_req_reg = upd->interface_stypes & preq_mask;
4078 sdata->vif.rx_mcast_action_reg =
4084 if (intf_change && ieee80211_sdata_running(sdata))
4085 drv_config_iface_filter(local, sdata,
4086 sdata->vif.probe_req_reg ?
4116 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4121 drv_set_rekey_data(local, sdata, data);
4129 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4130 struct ieee80211_local *local = sdata->local;
4146 sta = sta_info_get_bss(sdata, peer);
4154 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf);
4186 memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN);
4187 memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN);
4208 ieee80211_xmit(sdata, sta, skb);
4224 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
4231 link = rcu_dereference(sdata->link[link_id]);
4243 sdata->vif.type == NL80211_IFTYPE_MONITOR) {
4267 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4280 old_qos_map = sdata_dereference(sdata->qos_map, sdata);
4281 rcu_assign_pointer(sdata->qos_map, new_qos_map);
4293 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4298 link = sdata_dereference(sdata->link[link_id], sdata);
4302 ieee80211_link_info_change_notify(sdata, link, changed);
4311 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4312 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
4315 if (sdata->vif.type != NL80211_IFTYPE_STATION)
4318 if (!(sdata->wmm_acm & BIT(up)))
4336 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4337 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
4359 ieee80211_flush_queues(local, sdata, false);
4366 ieee80211_sta_handle_tspec_ac_params(sdata);
4382 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
4389 spin_lock_bh(&sdata->u.nan.func_lock);
4391 func = idr_find(&sdata->u.nan.function_inst_ids, inst_id);
4393 spin_unlock_bh(&sdata->u.nan.func_lock);
4398 idr_remove(&sdata->u.nan.function_inst_ids, inst_id);
4400 spin_unlock_bh(&sdata->u.nan.func_lock);
4413 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
4419 spin_lock_bh(&sdata->u.nan.func_lock);
4421 func = idr_find(&sdata->u.nan.function_inst_ids, match->inst_id);
4423 spin_unlock_bh(&sdata->u.nan.func_lock);
4428 spin_unlock_bh(&sdata->u.nan.func_lock);
4438 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4440 sdata->u.ap.multicast_to_unicast = enabled;
4499 struct ieee80211_sub_if_data *sdata;
4506 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
4507 if (!sdata->vif.txq) {
4511 ieee80211_fill_txq_stats(txqstats, to_txq_info(sdata->vif.txq));
4541 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4543 return drv_get_ftm_responder_stats(local, sdata, ftm_stats);
4551 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(dev);
4553 return drv_start_pmsr(local, sdata, request);
4561 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(dev);
4563 return drv_abort_pmsr(local, sdata, request);
4570 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4574 if (!sdata->local->ops->set_tid_config)
4578 return drv_set_tid_config(sdata->local, sdata, NULL, tid_conf);
4580 mutex_lock(&sdata->local->sta_mtx);
4581 sta = sta_info_get_bss(sdata, tid_conf->peer);
4583 mutex_unlock(&sdata->local->sta_mtx);
4587 ret = drv_set_tid_config(sdata->local, sdata, &sta->sta, tid_conf);
4588 mutex_unlock(&sdata->local->sta_mtx);
4597 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4601 if (!sdata->local->ops->reset_tid_config)
4605 return drv_reset_tid_config(sdata->local, sdata, NULL, tids);
4607 mutex_lock(&sdata->local->sta_mtx);
4608 sta = sta_info_get_bss(sdata, peer);
4610 mutex_unlock(&sdata->local->sta_mtx);
4614 ret = drv_reset_tid_config(sdata->local, sdata, &sta->sta, tids);
4615 mutex_unlock(&sdata->local->sta_mtx);
4632 ieee80211_set_after_color_change_beacon(struct ieee80211_sub_if_data *sdata,
4635 switch (sdata->vif.type) {
4639 if (!sdata->deflink.u.ap.next_beacon)
4642 ret = ieee80211_assign_beacon(sdata, &sdata->deflink,
4643 sdata->deflink.u.ap.next_beacon,
4645 ieee80211_free_next_beacon(&sdata->deflink);
4661 ieee80211_set_color_change_beacon(struct ieee80211_sub_if_data *sdata,
4668 switch (sdata->vif.type) {
4670 sdata->deflink.u.ap.next_beacon =
4672 if (!sdata->deflink.u.ap.next_beacon)
4684 err = ieee80211_assign_beacon(sdata, &sdata->deflink,
4688 ieee80211_free_next_beacon(&sdata->deflink);
4700 ieee80211_color_change_bss_config_notify(struct ieee80211_sub_if_data *sdata,
4703 sdata->vif.bss_conf.he_bss_color.color = color;
4704 sdata->vif.bss_conf.he_bss_color.enabled = enable;
4707 ieee80211_link_info_change_notify(sdata, &sdata->deflink, changed);
4709 if (!sdata->vif.bss_conf.nontransmitted && sdata->vif.mbssid_tx_vif) {
4712 mutex_lock(&sdata->local->iflist_mtx);
4713 list_for_each_entry(child, &sdata->local->interfaces, list) {
4714 if (child != sdata && child->vif.mbssid_tx_vif == &sdata->vif) {
4722 mutex_unlock(&sdata->local->iflist_mtx);
4726 static int ieee80211_color_change_finalize(struct ieee80211_sub_if_data *sdata)
4728 struct ieee80211_local *local = sdata->local;
4732 sdata_assert_lock(sdata);
4735 sdata->vif.bss_conf.color_change_active = false;
4737 err = ieee80211_set_after_color_change_beacon(sdata, &changed);
4739 cfg80211_color_change_aborted_notify(sdata->dev);
4743 ieee80211_color_change_bss_config_notify(sdata,
4744 sdata->vif.bss_conf.color_change_color,
4746 cfg80211_color_change_notify(sdata->dev);
4753 struct ieee80211_sub_if_data *sdata =
4756 struct ieee80211_local *local = sdata->local;
4758 sdata_lock(sdata);
4762 if (!sdata->vif.bss_conf.color_change_active)
4765 if (!ieee80211_sdata_running(sdata))
4768 ieee80211_color_change_finalize(sdata);
4772 sdata_unlock(sdata);
4781 struct ieee80211_sub_if_data *sdata = link->sdata;
4783 sdata_lock(sdata);
4784 cfg80211_obss_color_collision_notify(sdata->dev, link->color_bitmap);
4785 sdata_unlock(sdata);
4790 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
4792 ieee80211_queue_work(&sdata->local->hw,
4793 &sdata->deflink.color_change_finalize_work);
4801 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
4802 struct ieee80211_link_data *link = &sdata->deflink;
4804 if (sdata->vif.bss_conf.color_change_active || sdata->vif.bss_conf.csa_active)
4814 ieee80211_queue_delayed_work(&sdata->local->hw,
4824 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4825 struct ieee80211_local *local = sdata->local;
4829 sdata_assert_lock(sdata);
4831 if (sdata->vif.bss_conf.nontransmitted)
4839 if (sdata->vif.bss_conf.color_change_active || sdata->vif.bss_conf.csa_active) {
4844 err = ieee80211_set_color_change_beacon(sdata, params, &changed);
4848 sdata->vif.bss_conf.color_change_active = true;
4849 sdata->vif.bss_conf.color_change_color = params->color;
4851 cfg80211_color_change_started_notify(sdata->dev, params->count);
4854 ieee80211_color_change_bss_config_notify(sdata, 0, 0, changed);
4857 ieee80211_color_change_finalize(sdata);
4881 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
4887 mutex_lock(&sdata->local->mtx);
4888 res = ieee80211_vif_set_links(sdata, wdev->valid_links, 0);
4889 mutex_unlock(&sdata->local->mtx);
4898 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
4900 mutex_lock(&sdata->local->mtx);
4901 ieee80211_vif_set_links(sdata, wdev->valid_links, 0);
4902 mutex_unlock(&sdata->local->mtx);
4906 struct ieee80211_sub_if_data *sdata,
4912 sta = sta_info_get_bss(sdata, params->mld_mac);
4940 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4944 mutex_lock(&sdata->local->sta_mtx);
4945 ret = sta_add_link_station(local, sdata, params);
4946 mutex_unlock(&sdata->local->sta_mtx);
4952 struct ieee80211_sub_if_data *sdata,
4957 sta = sta_info_get_bss(sdata, params->mld_mac);
4971 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4975 mutex_lock(&sdata->local->sta_mtx);
4976 ret = sta_mod_link_station(local, sdata, params);
4977 mutex_unlock(&sdata->local->sta_mtx);
4982 static int sta_del_link_station(struct ieee80211_sub_if_data *sdata,
4987 sta = sta_info_get_bss(sdata, params->mld_mac);
5007 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
5010 mutex_lock(&sdata->local->sta_mtx);
5011 ret = sta_del_link_station(sdata, params);
5012 mutex_unlock(&sdata->local->sta_mtx);
5021 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
5022 struct ieee80211_local *local = sdata->local;
5027 if (!check_sdata_in_driver(sdata))
5030 return local->ops->set_hw_timestamp(&local->hw, &sdata->vif, hwts);