Lines Matching defs:sdata
26 static void ieee80211_set_mu_mimo_follow(struct ieee80211_sub_if_data *sdata,
37 memcpy(sdata->vif.bss_conf.mu_group.membership,
39 memcpy(sdata->vif.bss_conf.mu_group.position,
42 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_MU_GROUPS);
52 ether_addr_copy(sdata->u.mntr.mu_follow_addr,
56 sdata->vif.mu_mimo_owner = mu_mimo_groups || mu_mimo_follow;
59 static int ieee80211_set_mon_options(struct ieee80211_sub_if_data *sdata,
62 struct ieee80211_local *local = sdata->local;
66 if (params->flags && ieee80211_sdata_running(sdata)) {
78 if ((params->flags & mask) != (sdata->u.mntr.flags & mask))
95 if (ieee80211_sdata_running(sdata)) {
96 ieee80211_adjust_monitor_flags(sdata, -1);
97 sdata->u.mntr.flags = params->flags;
98 ieee80211_adjust_monitor_flags(sdata, 1);
107 sdata->u.mntr.flags = params->flags;
122 struct ieee80211_sub_if_data *sdata;
129 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
132 err = ieee80211_set_mon_options(sdata, params);
134 ieee80211_if_remove(sdata);
154 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
155 struct ieee80211_local *local = sdata->local;
159 ret = ieee80211_if_change_type(sdata, type);
164 RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
165 ieee80211_check_fast_rx_iface(sdata);
167 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
172 sdata->u.mgd.use_4addr = params->use_4addr;
177 sta = sta_info_get(sdata, ifmgd->bssid);
179 drv_sta_set_4addr(local, sdata, &sta->sta,
184 ieee80211_send_4addr_nullfunc(local, sdata);
187 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
188 ret = ieee80211_set_mon_options(sdata, params);
199 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
202 mutex_lock(&sdata->local->chanctx_mtx);
203 ret = ieee80211_check_combinations(sdata, NULL, 0, 0);
204 mutex_unlock(&sdata->local->chanctx_mtx);
221 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
224 mutex_lock(&sdata->local->chanctx_mtx);
225 ret = ieee80211_check_combinations(sdata, NULL, 0, 0);
226 mutex_unlock(&sdata->local->chanctx_mtx);
234 ret = drv_start_nan(sdata->local, sdata, conf);
236 ieee80211_sdata_stop(sdata);
238 sdata->u.nan.conf = *conf;
246 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
248 drv_stop_nan(sdata->local, sdata);
249 ieee80211_sdata_stop(sdata);
257 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
261 if (sdata->vif.type != NL80211_IFTYPE_NAN)
264 if (!ieee80211_sdata_running(sdata))
267 new_conf = sdata->u.nan.conf;
275 ret = drv_nan_change_conf(sdata->local, sdata, &new_conf, changes);
277 sdata->u.nan.conf = new_conf;
286 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
289 if (sdata->vif.type != NL80211_IFTYPE_NAN)
292 if (!ieee80211_sdata_running(sdata))
295 spin_lock_bh(&sdata->u.nan.func_lock);
297 ret = idr_alloc(&sdata->u.nan.function_inst_ids,
298 nan_func, 1, sdata->local->hw.max_nan_de_entries + 1,
300 spin_unlock_bh(&sdata->u.nan.func_lock);
309 ret = drv_add_nan_func(sdata->local, sdata, nan_func);
311 spin_lock_bh(&sdata->u.nan.func_lock);
312 idr_remove(&sdata->u.nan.function_inst_ids,
314 spin_unlock_bh(&sdata->u.nan.func_lock);
321 ieee80211_find_nan_func_by_cookie(struct ieee80211_sub_if_data *sdata,
327 lockdep_assert_held(&sdata->u.nan.func_lock);
329 idr_for_each_entry(&sdata->u.nan.function_inst_ids, func, id) {
340 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
344 if (sdata->vif.type != NL80211_IFTYPE_NAN ||
345 !ieee80211_sdata_running(sdata))
348 spin_lock_bh(&sdata->u.nan.func_lock);
350 func = ieee80211_find_nan_func_by_cookie(sdata, cookie);
354 spin_unlock_bh(&sdata->u.nan.func_lock);
357 drv_del_nan_func(sdata->local, sdata, instance_id);
364 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
366 sdata->noack_map = noack_map;
368 ieee80211_check_fast_xmit_iface(sdata);
373 static int ieee80211_set_tx(struct ieee80211_sub_if_data *sdata,
376 struct ieee80211_local *local = sdata->local;
385 sta = sta_info_get_bss(sdata, mac_addr);
407 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
408 struct ieee80211_local *local = sdata->local;
414 if (!ieee80211_sdata_running(sdata))
418 return ieee80211_set_tx(sdata, mac_addr, key_idx);
437 cs = ieee80211_cs_get(local, params->cipher, sdata->vif.type);
456 sta = sta_info_get_bss(sdata, mac_addr);
474 switch (sdata->vif.type) {
476 if (sdata->u.mgd.mfp != IEEE80211_MFP_DISABLED)
490 if (sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE)
511 err = ieee80211_key_link(key, sdata, sta);
525 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
526 struct ieee80211_local *local = sdata->local;
537 sta = sta_info_get_bss(sdata, mac_addr);
546 key = key_mtx_dereference(local, sdata->keys[key_idx]);
553 ieee80211_key_free(key, sdata->vif.type == NL80211_IFTYPE_STATION);
569 struct ieee80211_sub_if_data *sdata;
580 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
585 sta = sta_info_get_bss(sdata, mac_addr);
596 key = rcu_dereference(sdata->keys[key_idx]);
613 drv_get_key_seq(sdata->local, key, &kseq);
646 drv_get_key_seq(sdata->local, key, &kseq);
665 drv_get_key_seq(sdata->local, key, &kseq);
687 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
689 ieee80211_set_default_key(sdata, key_idx, uni, multi);
698 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
700 ieee80211_set_default_mgmt_key(sdata, key_idx);
709 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
711 ieee80211_set_default_beacon_key(sdata, key_idx);
730 int shift = ieee80211_vif_get_shift(&sta->sdata->vif);
733 sband = ieee80211_get_sband(sta->sdata);
755 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
756 struct ieee80211_local *local = sdata->local;
762 sta = sta_info_get_by_idx(sdata, idx);
785 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
786 struct ieee80211_local *local = sdata->local;
792 sta = sta_info_get_bss(sdata, mac);
807 struct ieee80211_sub_if_data *sdata;
815 sdata = rtnl_dereference(local->monitor_sdata);
816 if (sdata) {
817 ieee80211_vif_release_channel(sdata);
818 ret = ieee80211_vif_use_channel(sdata, chandef,
833 static int ieee80211_set_probe_resp(struct ieee80211_sub_if_data *sdata,
842 old = sdata_dereference(sdata->u.ap.probe_resp, sdata);
856 rcu_assign_pointer(sdata->u.ap.probe_resp, new);
863 static int ieee80211_set_fils_discovery(struct ieee80211_sub_if_data *sdata,
872 fd = &sdata->vif.bss_conf.fils_discovery;
876 old = sdata_dereference(sdata->u.ap.fils_discovery, sdata);
882 rcu_assign_pointer(sdata->u.ap.fils_discovery, new);
891 ieee80211_set_unsol_bcast_probe_resp(struct ieee80211_sub_if_data *sdata,
899 old = sdata_dereference(sdata->u.ap.unsol_bcast_probe_resp, sdata);
905 rcu_assign_pointer(sdata->u.ap.unsol_bcast_probe_resp, new);
910 sdata->vif.bss_conf.unsol_bcast_probe_resp_interval =
917 struct ieee80211_sub_if_data *sdata,
929 bss_conf = &sdata->vif.bss_conf;
958 static int ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata,
967 old = sdata_dereference(sdata->u.ap.beacon, sdata);
1024 err = ieee80211_set_probe_resp(sdata, params->probe_resp,
1034 sdata->vif.bss_conf.ftm_responder = params->ftm_responder;
1035 err = ieee80211_set_ftm_responder_params(sdata,
1049 rcu_assign_pointer(sdata->u.ap.beacon, new);
1060 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1061 struct ieee80211_local *local = sdata->local;
1074 old = sdata_dereference(sdata->u.ap.beacon, sdata);
1081 sdata->smps_mode = IEEE80211_SMPS_OFF;
1083 sdata->needed_rx_chains = sdata->local->rx_chains;
1085 prev_beacon_int = sdata->vif.bss_conf.beacon_int;
1086 sdata->vif.bss_conf.beacon_int = params->beacon_interval;
1089 sdata->vif.bss_conf.he_support = true;
1090 sdata->vif.bss_conf.htc_trig_based_pkt_ext =
1093 sdata->vif.bss_conf.frame_time_rts_th =
1103 err = ieee80211_vif_use_channel(sdata, ¶ms->chandef,
1106 ieee80211_vif_copy_chanctx_to_vlans(sdata, false);
1109 sdata->vif.bss_conf.beacon_int = prev_beacon_int;
1117 sdata->control_port_protocol = params->crypto.control_port_ethertype;
1118 sdata->control_port_no_encrypt = params->crypto.control_port_no_encrypt;
1119 sdata->control_port_over_nl80211 =
1121 sdata->control_port_no_preauth =
1123 sdata->encrypt_headroom = ieee80211_cs_headroom(sdata->local,
1125 sdata->vif.type);
1127 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) {
1137 ieee80211_cs_headroom(sdata->local,
1142 sdata->vif.bss_conf.dtim_period = params->dtim_period;
1143 sdata->vif.bss_conf.enable_beacon = true;
1144 sdata->vif.bss_conf.allow_p2p_go_ps = sdata->vif.p2p;
1145 sdata->vif.bss_conf.twt_responder = params->twt_responder;
1146 memcpy(&sdata->vif.bss_conf.he_obss_pd, ¶ms->he_obss_pd,
1148 memcpy(&sdata->vif.bss_conf.he_bss_color, ¶ms->he_bss_color,
1150 sdata->vif.bss_conf.s1g = params->chandef.chan->band ==
1153 sdata->vif.bss_conf.ssid_len = params->ssid_len;
1155 memcpy(sdata->vif.bss_conf.ssid, params->ssid,
1157 sdata->vif.bss_conf.hidden_ssid =
1160 memset(&sdata->vif.bss_conf.p2p_noa_attr, 0,
1161 sizeof(sdata->vif.bss_conf.p2p_noa_attr));
1162 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow =
1165 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |=
1168 sdata->beacon_rate_set = false;
1172 sdata->beacon_rateidx_mask[i] =
1174 if (sdata->beacon_rateidx_mask[i])
1175 sdata->beacon_rate_set = true;
1180 sdata->vif.bss_conf.beacon_tx_rate = params->beacon_rate;
1182 err = ieee80211_assign_beacon(sdata, ¶ms->beacon, NULL);
1188 err = ieee80211_set_fils_discovery(sdata,
1196 err = ieee80211_set_unsol_bcast_probe_resp(sdata,
1203 err = drv_start_ap(sdata->local, sdata);
1205 old = sdata_dereference(sdata->u.ap.beacon, sdata);
1209 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
1213 ieee80211_recalc_dtim(local, sdata);
1214 ieee80211_bss_info_change_notify(sdata, changed);
1217 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
1224 ieee80211_vif_release_channel(sdata);
1233 struct ieee80211_sub_if_data *sdata;
1237 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1238 sdata_assert_lock(sdata);
1243 if (sdata->vif.csa_active)
1246 old = sdata_dereference(sdata->u.ap.beacon, sdata);
1250 err = ieee80211_assign_beacon(sdata, params, NULL);
1253 ieee80211_bss_info_change_notify(sdata, err);
1259 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1261 struct ieee80211_local *local = sdata->local;
1268 sdata_assert_lock(sdata);
1270 old_beacon = sdata_dereference(sdata->u.ap.beacon, sdata);
1273 old_probe_resp = sdata_dereference(sdata->u.ap.probe_resp, sdata);
1274 old_fils_discovery = sdata_dereference(sdata->u.ap.fils_discovery,
1275 sdata);
1277 sdata_dereference(sdata->u.ap.unsol_bcast_probe_resp,
1278 sdata);
1282 sdata->vif.csa_active = false;
1283 if (sdata->csa_block_tx) {
1284 ieee80211_wake_vif_queues(local, sdata,
1286 sdata->csa_block_tx = false;
1291 kfree(sdata->u.ap.next_beacon);
1292 sdata->u.ap.next_beacon = NULL;
1295 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list)
1300 RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
1301 RCU_INIT_POINTER(sdata->u.ap.probe_resp, NULL);
1302 RCU_INIT_POINTER(sdata->u.ap.fils_discovery, NULL);
1303 RCU_INIT_POINTER(sdata->u.ap.unsol_bcast_probe_resp, NULL);
1312 kfree(sdata->vif.bss_conf.ftmr_params);
1313 sdata->vif.bss_conf.ftmr_params = NULL;
1315 __sta_info_flush(sdata, true);
1316 ieee80211_free_keys(sdata, true);
1318 sdata->vif.bss_conf.enable_beacon = false;
1319 sdata->beacon_rate_set = false;
1320 sdata->vif.bss_conf.ssid_len = 0;
1321 clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state);
1322 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED);
1324 if (sdata->wdev.cac_started) {
1325 chandef = sdata->vif.bss_conf.chandef;
1326 cancel_delayed_work_sync(&sdata->dfs_cac_timer_work);
1327 cfg80211_cac_event(sdata->dev, &chandef,
1332 drv_stop_ap(sdata->local, sdata);
1335 local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps.bc_buf);
1336 ieee80211_purge_tx_queue(&local->hw, &sdata->u.ap.ps.bc_buf);
1339 ieee80211_vif_copy_chanctx_to_vlans(sdata, true);
1340 ieee80211_vif_release_channel(sdata);
1411 struct ieee80211_sub_if_data *sdata = sta->sdata;
1418 changed = mesh_plink_inc_estab_count(sdata);
1424 sdata->u.mesh.mshcfg.power_mode);
1438 changed = mesh_plink_dec_estab_count(sdata);
1467 ieee80211_mbss_info_change_notify(sdata, changed);
1477 struct ieee80211_sub_if_data *sdata = sta->sdata;
1480 sband = ieee80211_get_sband(sdata);
1487 if (ieee80211_vif_is_mesh(&sdata->vif)) {
1548 !sdata->u.mgd.tdls_chan_switch_prohibited &&
1554 !sdata->u.mgd.tdls_wider_bw_prohibited &&
1615 ret = drv_sta_set_txpwr(local, sdata, sta);
1621 ieee80211_parse_bitrates(&sdata->vif.bss_conf.chandef,
1628 ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
1633 ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband,
1637 ieee80211_he_cap_ie_to_sta_he_cap(sdata, sband,
1647 __ieee80211_vht_handle_opmode(sdata, sta, params->opmode_notif,
1654 if (ieee80211_vif_is_mesh(&sdata->vif))
1677 struct ieee80211_sub_if_data *sdata;
1681 sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
1683 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
1684 sdata->vif.type != NL80211_IFTYPE_AP)
1687 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1689 if (ether_addr_equal(mac, sdata->vif.addr))
1696 sdata->vif.type == NL80211_IFTYPE_STATION &&
1697 !sdata->u.mgd.associated)
1700 sta = sta_info_alloc(sdata, mac, GFP_KERNEL);
1736 struct ieee80211_sub_if_data *sdata;
1738 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1741 return sta_info_destroy_addr_bss(sdata, params->mac);
1743 sta_info_flush(sdata);
1751 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1760 sta = sta_info_get_bss(sdata, mac);
1766 switch (sdata->vif.type) {
1768 if (sdata->u.mesh.user_mpm)
1802 if (params->vlan && params->vlan != sta->sdata->dev) {
1813 drv_sta_set_4addr(local, sta->sdata, &sta->sta, true);
1816 if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
1817 sta->sdata->u.vlan.sta)
1818 RCU_INIT_POINTER(sta->sdata->u.vlan.sta, NULL);
1821 ieee80211_vif_dec_num_mcast(sta->sdata);
1823 sta->sdata = vlansdata;
1828 ieee80211_vif_inc_num_mcast(sta->sdata);
1829 cfg80211_send_layer2_update(sta->sdata->dev,
1840 if (sdata->vif.type == NL80211_IFTYPE_STATION &&
1843 ieee80211_recalc_ps_vif(sdata);
1856 struct ieee80211_sub_if_data *sdata;
1860 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1863 sta = sta_info_get(sdata, next_hop);
1869 mpath = mesh_path_add(sdata, dst);
1884 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1887 return mesh_path_del(sdata, dst);
1889 mesh_path_flush_by_iface(sdata);
1896 struct ieee80211_sub_if_data *sdata;
1900 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1904 sta = sta_info_get(sdata, next_hop);
1910 mpath = mesh_path_lookup(sdata, dst);
1934 pinfo->generation = mpath->sdata->u.mesh.mesh_paths_generation;
1972 struct ieee80211_sub_if_data *sdata;
1975 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1978 mpath = mesh_path_lookup(sdata, dst);
1993 struct ieee80211_sub_if_data *sdata;
1996 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
1999 mpath = mesh_path_lookup_by_idx(sdata, idx);
2016 pinfo->generation = mpath->sdata->u.mesh.mpp_paths_generation;
2023 struct ieee80211_sub_if_data *sdata;
2026 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2029 mpath = mpp_path_lookup(sdata, dst);
2044 struct ieee80211_sub_if_data *sdata;
2047 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2050 mpath = mpp_path_lookup_by_idx(sdata, idx);
2065 struct ieee80211_sub_if_data *sdata;
2066 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2068 memcpy(conf, &(sdata->u.mesh.mshcfg), sizeof(struct mesh_config));
2081 struct ieee80211_sub_if_data *sdata = container_of(ifmsh,
2113 memcpy(sdata->vif.bss_conf.mcast_rate, setup->mcast_rate,
2115 sdata->vif.bss_conf.basic_rates = setup->basic_rates;
2117 sdata->vif.bss_conf.beacon_int = setup->beacon_interval;
2118 sdata->vif.bss_conf.dtim_period = setup->dtim_period;
2120 sdata->beacon_rate_set = false;
2121 if (wiphy_ext_feature_isset(sdata->local->hw.wiphy,
2124 sdata->beacon_rateidx_mask[i] =
2126 if (sdata->beacon_rateidx_mask[i])
2127 sdata->beacon_rate_set = true;
2139 struct ieee80211_sub_if_data *sdata;
2142 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2143 ifmsh = &sdata->u.mesh;
2146 conf = &(sdata->u.mesh.mshcfg);
2214 if (!ieee80211_hw_check(&sdata->local->hw, SIGNAL_DBM))
2220 sdata->vif.bss_conf.ht_operation_mode = nconf->ht_opmode;
2221 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_HT);
2234 ieee80211_mps_local_status_update(sdata);
2249 ieee80211_mbss_info_change_notify(sdata, BSS_CHANGED_BEACON);
2257 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2258 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
2266 sdata->control_port_over_nl80211 = setup->control_port_over_nl80211;
2269 sdata->smps_mode = IEEE80211_SMPS_OFF;
2270 sdata->needed_rx_chains = sdata->local->rx_chains;
2272 mutex_lock(&sdata->local->mtx);
2273 err = ieee80211_vif_use_channel(sdata, &setup->chandef,
2275 mutex_unlock(&sdata->local->mtx);
2279 return ieee80211_start_mesh(sdata);
2284 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2286 ieee80211_stop_mesh(sdata);
2287 mutex_lock(&sdata->local->mtx);
2288 ieee80211_vif_release_channel(sdata);
2289 kfree(sdata->u.mesh.ie);
2290 mutex_unlock(&sdata->local->mtx);
2300 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2304 if (!sdata_dereference(sdata->u.ap.beacon, sdata))
2307 sband = ieee80211_get_sband(sdata);
2312 sdata->vif.bss_conf.use_cts_prot = params->use_cts_prot;
2316 sdata->vif.bss_conf.use_short_preamble =
2321 if (!sdata->vif.bss_conf.use_short_slot &&
2324 sdata->vif.bss_conf.use_short_slot = true;
2329 sdata->vif.bss_conf.use_short_slot =
2335 ieee80211_parse_bitrates(&sdata->vif.bss_conf.chandef,
2339 &sdata->vif.bss_conf.basic_rates);
2341 ieee80211_check_rate_mask(sdata);
2346 sdata->flags |= IEEE80211_SDATA_DONT_BRIDGE_PACKETS;
2348 sdata->flags &= ~IEEE80211_SDATA_DONT_BRIDGE_PACKETS;
2349 ieee80211_check_fast_rx_iface(sdata);
2353 sdata->vif.bss_conf.ht_operation_mode =
2359 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow &=
2361 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |=
2367 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow |=
2371 sdata->vif.bss_conf.p2p_noa_attr.oppps_ctwindow &=
2376 ieee80211_bss_info_change_notify(sdata, changed);
2386 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2407 ieee80211_regulatory_limit_wmm_params(sdata, &p, params->ac);
2409 sdata->tx_conf[params->ac] = p;
2410 if (drv_conf_tx(local, sdata, params->ac, &p)) {
2417 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_QOS);
2441 struct ieee80211_sub_if_data *sdata;
2443 sdata = IEEE80211_WDEV_TO_SUB_IF(req->wdev);
2445 switch (ieee80211_vif_type_p2p(&sdata->vif)) {
2453 if (sdata->local->ops->hw_scan)
2469 if (sdata->u.ap.beacon &&
2479 return ieee80211_request_scan(sdata, req);
2492 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2494 if (!sdata->local->ops->sched_scan_start)
2497 return ieee80211_request_sched_scan_start(sdata, req);
2561 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2563 memcpy(sdata->vif.bss_conf.mcast_rate, rate,
2566 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_MCAST_RATE);
2633 struct ieee80211_sub_if_data *sdata;
2639 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
2641 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
2642 sdata = rtnl_dereference(local->monitor_sdata);
2643 if (!sdata)
2649 sdata->user_power_level = IEEE80211_UNSET_POWER_LEVEL;
2656 sdata->user_power_level = MBM_TO_DBM(mbm);
2660 if (txp_type != sdata->vif.bss_conf.txpower_type) {
2662 sdata->vif.bss_conf.txpower_type = txp_type;
2665 ieee80211_recalc_txpower(sdata, update_txp_type);
2684 list_for_each_entry(sdata, &local->interfaces, list) {
2685 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) {
2689 sdata->user_power_level = local->user_power_level;
2690 if (txp_type != sdata->vif.bss_conf.txpower_type)
2692 sdata->vif.bss_conf.txpower_type = txp_type;
2694 list_for_each_entry(sdata, &local->interfaces, list) {
2695 if (sdata->vif.type == NL80211_IFTYPE_MONITOR)
2697 ieee80211_recalc_txpower(sdata, update_txp_type);
2702 sdata = rtnl_dereference(local->monitor_sdata);
2703 if (sdata) {
2704 sdata->user_power_level = local->user_power_level;
2705 if (txp_type != sdata->vif.bss_conf.txpower_type)
2707 sdata->vif.bss_conf.txpower_type = txp_type;
2709 ieee80211_recalc_txpower(sdata, update_txp_type);
2721 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
2724 return drv_get_txpower(local, sdata, dbm);
2729 *dbm = sdata->vif.bss_conf.txpower;
2741 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2743 memcpy(&sdata->u.wds.remote_addr, addr, ETH_ALEN);
2767 struct ieee80211_sub_if_data *sdata;
2769 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
2770 if (sdata->flags & IEEE80211_SDATA_IN_DRIVER)
2771 vif = &sdata->vif;
2791 int __ieee80211_request_smps_mgd(struct ieee80211_sub_if_data *sdata,
2800 lockdep_assert_held(&sdata->wdev.mtx);
2802 if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION))
2805 old_req = sdata->u.mgd.req_smps;
2806 sdata->u.mgd.req_smps = smps_mode;
2817 if (!sdata->u.mgd.associated ||
2818 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT)
2821 ap = sdata->u.mgd.associated->bssid;
2824 list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) {
2825 if (!sta->sta.tdls || sta->sdata != sdata || !sta->uploaded ||
2835 if (tdls_peer_found || !sdata->u.mgd.powersave)
2842 err = ieee80211_send_smps_action(sdata, smps_mode,
2845 sdata->u.mgd.req_smps = old_req;
2847 ieee80211_teardown_tdls_peers(sdata);
2855 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2858 if (sdata->vif.type != NL80211_IFTYPE_STATION)
2864 if (enabled == sdata->u.mgd.powersave &&
2868 sdata->u.mgd.powersave = enabled;
2872 sdata_lock(sdata);
2873 __ieee80211_request_smps_mgd(sdata, sdata->u.mgd.req_smps);
2874 sdata_unlock(sdata);
2880 ieee80211_recalc_ps_vif(sdata);
2881 ieee80211_check_fast_rx_iface(sdata);
2890 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2891 struct ieee80211_vif *vif = &sdata->vif;
2898 if (sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER &&
2899 !(sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI))
2906 sdata->u.mgd.last_cqm_event_signal = 0;
2909 if (sdata->u.mgd.associated &&
2910 sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)
2911 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_CQM);
2920 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2921 struct ieee80211_vif *vif = &sdata->vif;
2924 if (sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER)
2931 sdata->u.mgd.last_cqm_event_signal = 0;
2934 if (sdata->u.mgd.associated &&
2935 sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)
2936 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_CQM);
2946 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
2950 if (!ieee80211_sdata_running(sdata))
2959 if (rcu_access_pointer(sdata->vif.chanctx_conf) &&
2960 sdata->vif.bss_conf.chandef.chan) {
2961 u32 basic_rates = sdata->vif.bss_conf.basic_rates;
2962 enum nl80211_band band = sdata->vif.bss_conf.chandef.chan->band;
2969 ret = drv_set_bitrate_mask(local, sdata, mask);
2978 sdata->rc_rateidx_mask[i] = mask->control[i].legacy;
2979 memcpy(sdata->rc_rateidx_mcs_mask[i], mask->control[i].ht_mcs,
2981 memcpy(sdata->rc_rateidx_vht_mcs_mask[i],
2985 sdata->rc_has_mcs_mask[i] = false;
2986 sdata->rc_has_vht_mcs_mask[i] = false;
2991 if (sdata->rc_rateidx_mcs_mask[i][j] != 0xff) {
2992 sdata->rc_has_mcs_mask[i] = true;
2998 if (sdata->rc_rateidx_vht_mcs_mask[i][j] != 0xffff) {
2999 sdata->rc_has_vht_mcs_mask[i] = true;
3013 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3014 struct ieee80211_local *local = sdata->local;
3024 sdata->smps_mode = IEEE80211_SMPS_OFF;
3025 sdata->needed_rx_chains = local->rx_chains;
3027 err = ieee80211_vif_use_channel(sdata, chandef,
3032 ieee80211_queue_delayed_work(&sdata->local->hw,
3033 &sdata->dfs_cac_timer_work,
3044 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3045 struct ieee80211_local *local = sdata->local;
3048 list_for_each_entry(sdata, &local->interfaces, list) {
3050 * by the time it gets it, sdata->wdev.cac_started
3053 cancel_delayed_work(&sdata->dfs_cac_timer_work);
3055 if (sdata->wdev.cac_started) {
3056 ieee80211_vif_release_channel(sdata);
3057 sdata->wdev.cac_started = false;
3136 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
3138 ieee80211_queue_work(&sdata->local->hw,
3139 &sdata->csa_finalize_work);
3143 static int ieee80211_set_after_csa_beacon(struct ieee80211_sub_if_data *sdata,
3148 switch (sdata->vif.type) {
3150 err = ieee80211_assign_beacon(sdata, sdata->u.ap.next_beacon,
3152 kfree(sdata->u.ap.next_beacon);
3153 sdata->u.ap.next_beacon = NULL;
3160 err = ieee80211_ibss_finish_csa(sdata);
3167 err = ieee80211_mesh_finish_csa(sdata);
3181 static int __ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata)
3183 struct ieee80211_local *local = sdata->local;
3187 sdata_assert_lock(sdata);
3198 if (sdata->reserved_chanctx) {
3204 if (sdata->reserved_ready)
3207 return ieee80211_vif_use_reserved_context(sdata);
3210 if (!cfg80211_chandef_identical(&sdata->vif.bss_conf.chandef,
3211 &sdata->csa_chandef))
3214 sdata->vif.csa_active = false;
3216 err = ieee80211_set_after_csa_beacon(sdata, &changed);
3220 ieee80211_bss_info_change_notify(sdata, changed);
3222 if (sdata->csa_block_tx) {
3223 ieee80211_wake_vif_queues(local, sdata,
3225 sdata->csa_block_tx = false;
3228 err = drv_post_channel_switch(sdata);
3232 cfg80211_ch_switch_notify(sdata->dev, &sdata->csa_chandef);
3237 static void ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata)
3239 if (__ieee80211_csa_finalize(sdata)) {
3240 sdata_info(sdata, "failed to finalize CSA, disconnecting\n");
3241 cfg80211_stop_iface(sdata->local->hw.wiphy, &sdata->wdev,
3248 struct ieee80211_sub_if_data *sdata =
3251 struct ieee80211_local *local = sdata->local;
3253 sdata_lock(sdata);
3258 if (!sdata->vif.csa_active)
3261 if (!ieee80211_sdata_running(sdata))
3264 ieee80211_csa_finalize(sdata);
3269 sdata_unlock(sdata);
3272 static int ieee80211_set_csa_beacon(struct ieee80211_sub_if_data *sdata,
3279 switch (sdata->vif.type) {
3281 sdata->u.ap.next_beacon =
3283 if (!sdata->u.ap.next_beacon)
3317 err = ieee80211_assign_beacon(sdata, ¶ms->beacon_csa, &csa);
3319 kfree(sdata->u.ap.next_beacon);
3326 if (!sdata->vif.bss_conf.ibss_joined)
3329 if (params->chandef.width != sdata->u.ibss.chandef.width)
3335 cfg80211_get_chandef_type(&sdata->u.ibss.chandef))
3347 if (sdata->u.ibss.chandef.chan->band !=
3353 err = ieee80211_ibss_csa_beacon(sdata, params);
3359 ieee80211_send_action_csa(sdata, params);
3364 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
3367 if (sdata->vif.bss_conf.chandef.chan->band !=
3381 err = ieee80211_mesh_csa_beacon(sdata, params);
3390 ieee80211_send_action_csa(sdata, params);
3406 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3407 struct ieee80211_local *local = sdata->local;
3414 sdata_assert_lock(sdata);
3420 if (sdata->wdev.cac_started)
3424 &sdata->vif.bss_conf.chandef))
3428 if (sdata->vif.csa_active)
3432 conf = rcu_dereference_protected(sdata->vif.chanctx_conf,
3453 err = drv_pre_channel_switch(sdata, &ch_switch);
3457 err = ieee80211_vif_reserve_chanctx(sdata, ¶ms->chandef,
3464 err = ieee80211_check_combinations(sdata, NULL, chanctx->mode, 0);
3466 ieee80211_vif_unreserve_chanctx(sdata);
3470 err = ieee80211_set_csa_beacon(sdata, params, &changed);
3472 ieee80211_vif_unreserve_chanctx(sdata);
3476 sdata->csa_chandef = params->chandef;
3477 sdata->csa_block_tx = params->block_tx;
3478 sdata->vif.csa_active = true;
3480 if (sdata->csa_block_tx)
3481 ieee80211_stop_vif_queues(local, sdata,
3484 cfg80211_ch_switch_started_notify(sdata->dev, &sdata->csa_chandef,
3488 ieee80211_bss_info_change_notify(sdata, changed);
3489 drv_channel_switch_beacon(sdata, ¶ms->chandef);
3492 ieee80211_csa_finalize(sdata);
3503 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3504 struct ieee80211_local *local = sdata->local;
3562 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
3574 intf_change = (sdata->vif.probe_req_reg !=
3576 (sdata->vif.rx_mcast_action_reg !=
3578 sdata->vif.probe_req_reg = upd->interface_stypes & preq_mask;
3579 sdata->vif.rx_mcast_action_reg =
3585 if (intf_change && ieee80211_sdata_running(sdata))
3586 drv_config_iface_filter(local, sdata,
3587 sdata->vif.probe_req_reg ?
3617 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3622 drv_set_rekey_data(local, sdata, data);
3630 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3631 struct ieee80211_local *local = sdata->local;
3647 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
3653 sta = sta_info_get_bss(sdata, peer);
3686 memcpy(nullfunc->addr2, sdata->vif.addr, ETH_ALEN);
3687 memcpy(nullfunc->addr3, sdata->vif.addr, ETH_ALEN);
3708 ieee80211_xmit(sdata, sta, skb);
3723 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
3729 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
3731 *chandef = sdata->vif.bss_conf.chandef;
3735 sdata->vif.type == NL80211_IFTYPE_MONITOR) {
3758 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3771 old_qos_map = sdata_dereference(sdata->qos_map, sdata);
3772 rcu_assign_pointer(sdata->qos_map, new_qos_map);
3783 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3787 ret = ieee80211_vif_change_bandwidth(sdata, chandef, &changed);
3789 ieee80211_bss_info_change_notify(sdata, changed);
3798 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3799 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
3802 if (sdata->vif.type != NL80211_IFTYPE_STATION)
3805 if (!(sdata->wmm_acm & BIT(up)))
3823 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3824 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
3846 ieee80211_flush_queues(local, sdata, false);
3853 ieee80211_sta_handle_tspec_ac_params(sdata);
3869 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
3876 spin_lock_bh(&sdata->u.nan.func_lock);
3878 func = idr_find(&sdata->u.nan.function_inst_ids, inst_id);
3880 spin_unlock_bh(&sdata->u.nan.func_lock);
3885 idr_remove(&sdata->u.nan.function_inst_ids, inst_id);
3887 spin_unlock_bh(&sdata->u.nan.func_lock);
3900 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
3906 spin_lock_bh(&sdata->u.nan.func_lock);
3908 func = idr_find(&sdata->u.nan.function_inst_ids, match->inst_id);
3910 spin_unlock_bh(&sdata->u.nan.func_lock);
3915 spin_unlock_bh(&sdata->u.nan.func_lock);
3925 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
3927 sdata->u.ap.multicast_to_unicast = enabled;
3986 struct ieee80211_sub_if_data *sdata;
3996 sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
3997 if (!sdata->vif.txq) {
4001 ieee80211_fill_txq_stats(txqstats, to_txq_info(sdata->vif.txq));
4031 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4033 return drv_get_ftm_responder_stats(local, sdata, ftm_stats);
4041 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(dev);
4043 return drv_start_pmsr(local, sdata, request);
4051 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(dev);
4053 return drv_abort_pmsr(local, sdata, request);
4060 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4064 if (!sdata->local->ops->set_tid_config)
4068 return drv_set_tid_config(sdata->local, sdata, NULL, tid_conf);
4070 mutex_lock(&sdata->local->sta_mtx);
4071 sta = sta_info_get_bss(sdata, tid_conf->peer);
4073 mutex_unlock(&sdata->local->sta_mtx);
4077 ret = drv_set_tid_config(sdata->local, sdata, &sta->sta, tid_conf);
4078 mutex_unlock(&sdata->local->sta_mtx);
4087 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
4091 if (!sdata->local->ops->reset_tid_config)
4095 return drv_reset_tid_config(sdata->local, sdata, NULL, tids);
4097 mutex_lock(&sdata->local->sta_mtx);
4098 sta = sta_info_get_bss(sdata, peer);
4100 mutex_unlock(&sdata->local->sta_mtx);
4104 ret = drv_reset_tid_config(sdata->local, sdata, &sta->sta, tids);
4105 mutex_unlock(&sdata->local->sta_mtx);