Lines Matching defs:sdata

185 	struct ieee80211_sub_if_data *sdata;
192 sdata = vif_to_sdata(vif);
193 short_preamble = sdata->vif.bss_conf.use_short_preamble;
194 if (sdata->deflink.operating_11g_mode)
212 struct ieee80211_sub_if_data *sdata;
226 sdata = vif_to_sdata(vif);
227 short_preamble = sdata->vif.bss_conf.use_short_preamble;
228 if (sdata->deflink.operating_11g_mode)
256 struct ieee80211_sub_if_data *sdata;
269 sdata = vif_to_sdata(vif);
270 short_preamble = sdata->vif.bss_conf.use_short_preamble;
271 if (sdata->deflink.operating_11g_mode)
292 struct ieee80211_sub_if_data *sdata,
314 struct ieee80211_sub_if_data *sdata = vif_to_sdata(txq->vif);
322 wake_tx_push_queue(local, sdata, queue);
330 static void __ieee80211_wake_txqs(struct ieee80211_sub_if_data *sdata, int ac)
332 struct ieee80211_local *local = sdata->local;
333 struct ieee80211_vif *vif = &sdata->vif;
343 if (!test_bit(SDATA_STATE_RUNNING, &sdata->state))
346 if (sdata->vif.type == NL80211_IFTYPE_AP)
347 ps = &sdata->bss->ps;
350 if (sdata != sta->sdata)
398 struct ieee80211_sub_if_data *sdata;
412 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
416 int ac_queue = sdata->vif.hw_queue[ac];
419 sdata->vif.cab_queue == i)
420 __ieee80211_wake_txqs(sdata, ac);
669 struct ieee80211_sub_if_data *sdata)
673 if (sdata && ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) {
679 queues |= BIT(sdata->vif.hw_queue[ac]);
680 if (sdata->vif.cab_queue != IEEE80211_INVAL_HW_QUEUE)
681 queues |= BIT(sdata->vif.cab_queue);
691 struct ieee80211_sub_if_data *sdata,
702 queues = ieee80211_get_vif_queues(local, sdata);
708 drv_flush(local, sdata, queues, drop);
716 struct ieee80211_sub_if_data *sdata, bool drop)
718 __ieee80211_flush_queues(local, sdata, 0, drop);
722 struct ieee80211_sub_if_data *sdata,
726 ieee80211_get_vif_queues(local, sdata),
731 struct ieee80211_sub_if_data *sdata,
735 ieee80211_get_vif_queues(local, sdata),
745 struct ieee80211_sub_if_data *sdata;
748 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
749 switch (sdata->vif.type) {
751 if (!(sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE))
760 active_only && !(sdata->flags & IEEE80211_SDATA_IN_DRIVER))
763 !(sdata->flags & IEEE80211_SDATA_IN_DRIVER))
765 if (ieee80211_sdata_running(sdata) || !active_only)
766 iterator(data, sdata->vif.addr,
767 &sdata->vif);
770 sdata = rcu_dereference_check(local->monitor_sdata,
773 if (sdata &&
775 sdata->flags & IEEE80211_SDATA_IN_DRIVER))
776 iterator(data, sdata->vif.addr, &sdata->vif);
853 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
855 if (!ieee80211_sdata_running(sdata) ||
856 !(sdata->flags & IEEE80211_SDATA_IN_DRIVER))
858 return &sdata->vif;
1658 void ieee80211_regulatory_limit_wmm_params(struct ieee80211_sub_if_data *sdata,
1667 if (sdata->vif.type != NL80211_IFTYPE_AP &&
1668 sdata->vif.type != NL80211_IFTYPE_STATION)
1672 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf);
1681 rrule = freq_reg_info(sdata->wdev.wiphy, MHZ_TO_KHZ(center_freq));
1688 if (sdata->vif.type == NL80211_IFTYPE_AP)
1702 struct ieee80211_sub_if_data *sdata = link->sdata;
1703 struct ieee80211_local *local = sdata->local;
1726 is_ocb = (sdata->vif.type == NL80211_IFTYPE_OCB);
1793 ieee80211_regulatory_limit_wmm_params(sdata, &qparam, ac);
1801 if (sdata->vif.type != NL80211_IFTYPE_MONITOR &&
1802 sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE &&
1803 sdata->vif.type != NL80211_IFTYPE_NAN) {
1806 ieee80211_link_info_change_notify(sdata, link,
1811 void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata,
1817 struct ieee80211_local *local = sdata->local;
1820 bool multi_link = ieee80211_vif_is_mld(&sdata->vif);
1836 memcpy(mle.basic.mld_mac_addr, sdata->vif.addr, ETH_ALEN);
1851 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN);
1872 ieee80211_tx_skb(sdata, skb);
1875 void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
1880 struct ieee80211_local *local = sdata->local;
1889 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN);
1905 if (sdata->vif.type != NL80211_IFTYPE_STATION ||
1906 !(sdata->u.mgd.flags & IEEE80211_STA_MFP_ENABLED))
1910 ieee80211_tx_skb(sdata, skb);
1927 static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata,
1935 struct ieee80211_local *local = sdata->local;
2117 he_cap = ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif);
2126 eht_cap = ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif);
2133 sdata->vif.type == NL80211_IFTYPE_AP);
2144 he_cap = ieee80211_get_he_iftype_cap_vif(sband6, &sdata->vif);
2148 ieee80211_vif_type_p2p(&sdata->vif);
2167 int ieee80211_build_preq_ies(struct ieee80211_sub_if_data *sdata, u8 *buffer,
2182 pos += ieee80211_build_preq_ies_band(sdata,
2211 struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata,
2219 struct ieee80211_local *local = sdata->local;
2232 chandef.width = sdata->vif.bss_conf.chandef.width;
2244 ies_len = ieee80211_build_preq_ies(sdata, skb_tail_pointer(skb),
2261 u32 ieee80211_sta_get_rates(struct ieee80211_sub_if_data *sdata,
2270 sband = sdata->local->hw.wiphy->bands[band];
2274 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef);
2275 shift = ieee80211_vif_get_shift(&sdata->vif);
2350 struct ieee80211_sub_if_data *sdata;
2375 list_for_each_entry(sdata, &local->interfaces, list)
2376 sdata->flags &= ~IEEE80211_SDATA_IN_DRIVER;
2388 struct ieee80211_sub_if_data *sdata,
2402 drv_assign_vif_chanctx(local, sdata, link->conf, ctx);
2407 static void ieee80211_reconfig_stations(struct ieee80211_sub_if_data *sdata)
2409 struct ieee80211_local *local = sdata->local;
2417 if (!sta->uploaded || sta->sdata != sdata)
2422 WARN_ON(drv_sta_state(local, sta->sdata, sta, state,
2428 static int ieee80211_reconfig_nan(struct ieee80211_sub_if_data *sdata)
2433 res = drv_start_nan(sdata->local, sdata,
2434 &sdata->u.nan.conf);
2438 funcs = kcalloc(sdata->local->hw.max_nan_de_entries + 1,
2448 spin_lock_bh(&sdata->u.nan.func_lock);
2450 idr_for_each_entry(&sdata->u.nan.function_inst_ids, func, id)
2453 spin_unlock_bh(&sdata->u.nan.func_lock);
2456 res = drv_add_nan_func(sdata->local, sdata, funcs[i]);
2458 ieee80211_nan_func_terminated(&sdata->vif,
2470 struct ieee80211_sub_if_data *sdata,
2475 for (link_id = 0; link_id < ARRAY_SIZE(sdata->link); link_id++) {
2478 if (!(sdata->vif.active_links & BIT(link_id)))
2481 link = sdata_dereference(sdata->link[link_id], sdata);
2486 drv_start_ap(local, sdata, link->conf);
2494 ieee80211_link_info_change_notify(sdata, link, changed);
2501 struct ieee80211_sub_if_data *sdata;
2589 sdata = wiphy_dereference(local->hw.wiphy, local->monitor_sdata);
2590 if (sdata) {
2593 res = drv_add_interface(local, sdata);
2597 kfree(sdata);
2601 list_for_each_entry(sdata, &local->interfaces, list) {
2602 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
2603 sdata->vif.type != NL80211_IFTYPE_MONITOR &&
2604 ieee80211_sdata_running(sdata)) {
2605 res = drv_add_interface(local, sdata);
2615 list_for_each_entry_continue_reverse(sdata, &local->interfaces,
2617 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
2618 sdata->vif.type != NL80211_IFTYPE_MONITOR &&
2619 ieee80211_sdata_running(sdata))
2620 drv_remove_interface(local, sdata);
2634 sdata = wiphy_dereference(local->hw.wiphy,
2636 if (sdata && ieee80211_sdata_running(sdata))
2637 ieee80211_assign_chanctx(local, sdata, &sdata->deflink);
2646 list_for_each_entry(sdata, &local->interfaces, list) {
2663 if (!ieee80211_sdata_running(sdata))
2666 sdata_lock(sdata);
2667 if (ieee80211_vif_is_mld(&sdata->vif)) {
2669 [0] = &sdata->vif.bss_conf,
2672 if (sdata->vif.type == NL80211_IFTYPE_STATION) {
2674 active_links = sdata->vif.active_links;
2676 sdata->vif.active_links = BIT(link_id);
2679 drv_change_vif_links(local, sdata, 0,
2680 sdata->vif.active_links,
2685 link_id < ARRAY_SIZE(sdata->vif.link_conf);
2687 if (ieee80211_vif_is_mld(&sdata->vif) &&
2688 !(sdata->vif.active_links & BIT(link_id)))
2691 link = sdata_dereference(sdata->link[link_id], sdata);
2695 ieee80211_assign_chanctx(local, sdata, link);
2698 switch (sdata->vif.type) {
2703 if (sdata->vif.cfg.ibss_joined)
2704 WARN_ON(drv_join_ibss(local, sdata));
2707 ieee80211_reconfig_stations(sdata);
2711 drv_conf_tx(local, &sdata->deflink, i,
2712 &sdata->deflink.tx_conf[i]);
2716 if (sdata->vif.bss_conf.mu_mimo_owner)
2719 if (!ieee80211_vif_is_mld(&sdata->vif))
2722 switch (sdata->vif.type) {
2724 if (!ieee80211_vif_is_mld(&sdata->vif)) {
2730 if (sdata->deflink.u.mgd.have_beacon)
2733 if (sdata->vif.bss_conf.max_idle_period ||
2734 sdata->vif.bss_conf.protected_keep_alive)
2737 if (sdata->vif.bss_conf.eht_puncturing)
2740 ieee80211_bss_info_change_notify(sdata,
2743 ieee80211_link_info_change_notify(sdata, link,
2749 ieee80211_vif_cfg_change_notify(sdata, changed);
2754 ieee80211_bss_info_change_notify(sdata, changed);
2762 if (ieee80211_vif_is_mld(&sdata->vif))
2763 ieee80211_vif_cfg_change_notify(sdata,
2768 if (sdata->vif.bss_conf.ftm_responder == 1 &&
2769 wiphy_ext_feature_isset(sdata->local->hw.wiphy,
2773 if (sdata->vif.type == NL80211_IFTYPE_AP) {
2776 if (ieee80211_vif_is_mld(&sdata->vif)) {
2778 sdata,
2783 if (rcu_access_pointer(sdata->deflink.u.ap.beacon))
2784 drv_start_ap(local, sdata,
2785 sdata->deflink.conf);
2789 if (sdata->vif.bss_conf.enable_beacon) {
2792 ieee80211_bss_info_change_notify(sdata, changed);
2796 res = ieee80211_reconfig_nan(sdata);
2798 sdata_unlock(sdata);
2816 sdata_unlock(sdata);
2819 ieee80211_set_active_links(&sdata->vif, active_links);
2831 list_for_each_entry(sdata, &local->interfaces, list) {
2832 if (sdata->vif.type != NL80211_IFTYPE_STATION)
2834 if (!sdata->u.mgd.associated)
2837 ieee80211_send_nullfunc(local, sdata, false);
2842 list_for_each_entry(sdata, &local->interfaces, list) {
2843 if (!ieee80211_sdata_running(sdata))
2846 sdata_lock(sdata);
2847 switch (sdata->vif.type) {
2850 ieee80211_reconfig_stations(sdata);
2855 sdata_unlock(sdata);
2859 list_for_each_entry(sdata, &local->interfaces, list)
2860 ieee80211_reenable_keys(sdata);
2934 list_for_each_entry(sdata, &local->interfaces, list)
2935 wiphy_work_queue(local->hw.wiphy, &sdata->work);
2943 list_for_each_entry(sdata, &local->interfaces, list) {
2944 if (!ieee80211_sdata_running(sdata))
2946 if (sdata->vif.type == NL80211_IFTYPE_STATION)
2947 ieee80211_sta_restart(sdata);
2965 list_for_each_entry(sdata, &local->interfaces, list) {
2966 if (!ieee80211_sdata_running(sdata))
2968 if (sdata->vif.type == NL80211_IFTYPE_STATION)
2969 ieee80211_sta_restart(sdata);
2982 struct ieee80211_sub_if_data *sdata;
2989 sdata = vif_to_sdata(vif);
2990 local = sdata->local;
3003 sdata->flags |= flag;
3006 list_for_each_entry(key, &sdata->key_list, list)
3023 void ieee80211_recalc_smps(struct ieee80211_sub_if_data *sdata,
3026 struct ieee80211_local *local = sdata->local;
3050 void ieee80211_recalc_min_chandef(struct ieee80211_sub_if_data *sdata,
3053 struct ieee80211_local *local = sdata->local;
3060 for (i = 0; i < ARRAY_SIZE(sdata->vif.link_conf); i++) {
3067 bss_conf = rcu_dereference(sdata->vif.link_conf[i]);
3177 u8 ieee80211_ie_len_he_cap(struct ieee80211_sub_if_data *sdata, u8 iftype)
3183 sband = ieee80211_get_sband(sdata);
3281 void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
3287 enum nl80211_iftype iftype = ieee80211_vif_type_p2p(&sdata->vif);
3291 if (!cfg80211_any_usable_channels(sdata->local->hw.wiphy,
3296 sband = sdata->local->hw.wiphy->bands[NL80211_BAND_6GHZ];
3832 bool ieee80211_chandef_he_6ghz_oper(struct ieee80211_sub_if_data *sdata,
3837 struct ieee80211_local *local = sdata->local;
3839 enum nl80211_iftype iftype = ieee80211_vif_type_p2p(&sdata->vif);
3844 struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
3856 sdata_info(sdata, "Missing iftype sband data/HE cap");
3869 sdata_info(sdata,
3882 sdata_info(sdata,
3895 he_chandef.chan = ieee80211_get_channel(sdata->local->hw.wiphy, freq);
3960 sdata_info(sdata,
4040 int ieee80211_add_srates_ie(struct ieee80211_sub_if_data *sdata,
4044 struct ieee80211_local *local = sdata->local;
4048 u32 basic_rates = sdata->vif.bss_conf.basic_rates;
4051 shift = ieee80211_vif_get_shift(&sdata->vif);
4052 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef);
4084 int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata,
4088 struct ieee80211_local *local = sdata->local;
4092 u32 basic_rates = sdata->vif.bss_conf.basic_rates;
4095 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef);
4096 shift = ieee80211_vif_get_shift(&sdata->vif);
4135 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
4137 if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION))
4140 return -ewma_beacon_signal_read(&sdata->deflink.u.mgd.ave_beacon_signal);
4333 struct ieee80211_sub_if_data *sdata;
4340 list_for_each_entry(sdata, &local->interfaces, list) {
4342 * by the time it gets it, sdata->wdev.cac_started
4345 cancel_delayed_work(&sdata->deflink.dfs_cac_timer_work);
4347 if (sdata->wdev.cac_started) {
4348 chandef = sdata->vif.bss_conf.chandef;
4349 ieee80211_link_release_channel(&sdata->deflink);
4350 cfg80211_cac_event(sdata->dev,
4496 int ieee80211_send_action_csa(struct ieee80211_sub_if_data *sdata,
4501 struct ieee80211_local *local = sdata->local;
4507 if (sdata->vif.type != NL80211_IFTYPE_ADHOC &&
4508 sdata->vif.type != NL80211_IFTYPE_MESH_POINT)
4525 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN);
4526 if (ieee80211_vif_is_mesh(&sdata->vif)) {
4527 memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN);
4529 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
4555 if (ieee80211_vif_is_mesh(&sdata->vif)) {
4556 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
4561 *pos++ = sdata->u.mesh.mshcfg.dot11MeshTTL; /* Mesh TTL */
4579 ieee80211_tx_skb(sdata, skb);
4731 struct ieee80211_sub_if_data *sdata)
4733 u64 tsf = drv_get_tsf(local, sdata);
4735 u16 beacon_int = sdata->vif.bss_conf.beacon_int * 1024;
4736 u8 dtim_period = sdata->vif.bss_conf.dtim_period;
4743 if (sdata->vif.type == NL80211_IFTYPE_AP ||
4744 sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
4745 if (!sdata->bss)
4748 ps = &sdata->bss->ps;
4749 } else if (ieee80211_vif_is_mesh(&sdata->vif)) {
4750 ps = &sdata->u.mesh.ps;
4804 int ieee80211_check_combinations(struct ieee80211_sub_if_data *sdata,
4809 struct ieee80211_local *local = sdata->local;
4811 enum nl80211_iftype iftype = sdata->wdev.iftype;
4830 if (sdata->vif.type == NL80211_IFTYPE_AP ||
4831 sdata->vif.type == NL80211_IFTYPE_MESH_POINT) {
4837 params.new_beacon_int = sdata->vif.bss_conf.beacon_int;
4874 if (sdata_iter == sdata ||
4902 struct ieee80211_sub_if_data *sdata;
4920 list_for_each_entry_rcu(sdata, &local->interfaces, list)
4921 params.iftype_num[sdata->wdev.iftype]++;
4932 void ieee80211_add_s1g_capab_ie(struct ieee80211_sub_if_data *sdata,
4936 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
4941 if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION))
4974 void ieee80211_add_aid_request_ie(struct ieee80211_sub_if_data *sdata,
5048 u8 ieee80211_ie_len_eht_cap(struct ieee80211_sub_if_data *sdata, u8 iftype)
5056 sband = ieee80211_get_sband(sdata);