Lines Matching refs:sdata
136 struct ieee80211_sub_if_data *sdata; in ieee80211_generic_frame_duration() local
143 sdata = vif_to_sdata(vif); in ieee80211_generic_frame_duration()
144 short_preamble = sdata->vif.bss_conf.use_short_preamble; in ieee80211_generic_frame_duration()
145 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) in ieee80211_generic_frame_duration()
163 struct ieee80211_sub_if_data *sdata; in ieee80211_rts_duration() local
177 sdata = vif_to_sdata(vif); in ieee80211_rts_duration()
178 short_preamble = sdata->vif.bss_conf.use_short_preamble; in ieee80211_rts_duration()
179 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) in ieee80211_rts_duration()
207 struct ieee80211_sub_if_data *sdata; in ieee80211_ctstoself_duration() local
220 sdata = vif_to_sdata(vif); in ieee80211_ctstoself_duration()
221 short_preamble = sdata->vif.bss_conf.use_short_preamble; in ieee80211_ctstoself_duration()
222 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) in ieee80211_ctstoself_duration()
244 struct ieee80211_sub_if_data *sdata; in ieee80211_propagate_queue_wake() local
250 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in ieee80211_propagate_queue_wake()
253 if (!sdata->dev) in ieee80211_propagate_queue_wake()
256 if (sdata->vif.cab_queue != IEEE80211_INVAL_HW_QUEUE && in ieee80211_propagate_queue_wake()
257 local->queue_stop_reasons[sdata->vif.cab_queue] != 0) in ieee80211_propagate_queue_wake()
261 int ac_queue = sdata->vif.hw_queue[ac]; in ieee80211_propagate_queue_wake()
264 (atomic_read(&sdata->txqs_len[ac]) > in ieee80211_propagate_queue_wake()
269 (sdata->vif.cab_queue == queue && in ieee80211_propagate_queue_wake()
272 netif_wake_subqueue(sdata->dev, ac); in ieee80211_propagate_queue_wake()
336 struct ieee80211_sub_if_data *sdata; in __ieee80211_stop_queue() local
356 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in __ieee80211_stop_queue()
359 if (!sdata->dev) in __ieee80211_stop_queue()
363 if (sdata->vif.hw_queue[ac] == queue || in __ieee80211_stop_queue()
364 sdata->vif.cab_queue == queue) in __ieee80211_stop_queue()
365 netif_stop_subqueue(sdata->dev, ac); in __ieee80211_stop_queue()
515 struct ieee80211_sub_if_data *sdata) in ieee80211_get_vif_queues() argument
519 if (sdata && ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) { in ieee80211_get_vif_queues()
525 queues |= BIT(sdata->vif.hw_queue[ac]); in ieee80211_get_vif_queues()
526 if (sdata->vif.cab_queue != IEEE80211_INVAL_HW_QUEUE) in ieee80211_get_vif_queues()
527 queues |= BIT(sdata->vif.cab_queue); in ieee80211_get_vif_queues()
537 struct ieee80211_sub_if_data *sdata, in __ieee80211_flush_queues() argument
548 queues = ieee80211_get_vif_queues(local, sdata); in __ieee80211_flush_queues()
554 drv_flush(local, sdata, queues, drop); in __ieee80211_flush_queues()
562 struct ieee80211_sub_if_data *sdata, bool drop) in ieee80211_flush_queues() argument
564 __ieee80211_flush_queues(local, sdata, 0, drop); in ieee80211_flush_queues()
568 struct ieee80211_sub_if_data *sdata, in ieee80211_stop_vif_queues() argument
572 ieee80211_get_vif_queues(local, sdata), in ieee80211_stop_vif_queues()
577 struct ieee80211_sub_if_data *sdata, in ieee80211_wake_vif_queues() argument
581 ieee80211_get_vif_queues(local, sdata), in ieee80211_wake_vif_queues()
591 struct ieee80211_sub_if_data *sdata; in __iterate_interfaces() local
594 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in __iterate_interfaces()
595 switch (sdata->vif.type) { in __iterate_interfaces()
597 if (!(sdata->u.mntr_flags & MONITOR_FLAG_ACTIVE)) in __iterate_interfaces()
606 active_only && !(sdata->flags & IEEE80211_SDATA_IN_DRIVER)) in __iterate_interfaces()
608 if (ieee80211_sdata_running(sdata) || !active_only) in __iterate_interfaces()
609 iterator(data, sdata->vif.addr, in __iterate_interfaces()
610 &sdata->vif); in __iterate_interfaces()
613 sdata = rcu_dereference_check(local->monitor_sdata, in __iterate_interfaces()
616 if (sdata && in __iterate_interfaces()
618 sdata->flags & IEEE80211_SDATA_IN_DRIVER)) in __iterate_interfaces()
619 iterator(data, sdata->vif.addr, &sdata->vif); in __iterate_interfaces()
696 struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); in wdev_to_ieee80211_vif() local
698 if (!ieee80211_sdata_running(sdata) || in wdev_to_ieee80211_vif()
699 !(sdata->flags & IEEE80211_SDATA_IN_DRIVER)) in wdev_to_ieee80211_vif()
701 return &sdata->vif; in wdev_to_ieee80211_vif()
707 struct ieee80211_sub_if_data *sdata; in ieee80211_vif_to_wdev() local
712 sdata = vif_to_sdata(vif); in ieee80211_vif_to_wdev()
714 if (!ieee80211_sdata_running(sdata) || in ieee80211_vif_to_wdev()
715 !(sdata->flags & IEEE80211_SDATA_IN_DRIVER)) in ieee80211_vif_to_wdev()
718 return &sdata->wdev; in ieee80211_vif_to_wdev()
1107 void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata, in ieee80211_set_wmm_default() argument
1110 struct ieee80211_local *local = sdata->local; in ieee80211_set_wmm_default()
1127 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in ieee80211_set_wmm_default()
1130 !(sdata->flags & IEEE80211_SDATA_OPERATING_GMODE); in ieee80211_set_wmm_default()
1133 is_ocb = (sdata->vif.type == NL80211_IFTYPE_OCB); in ieee80211_set_wmm_default()
1203 sdata->tx_conf[ac] = qparam; in ieee80211_set_wmm_default()
1204 drv_conf_tx(local, sdata, ac, &qparam); in ieee80211_set_wmm_default()
1207 if (sdata->vif.type != NL80211_IFTYPE_MONITOR && in ieee80211_set_wmm_default()
1208 sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE) { in ieee80211_set_wmm_default()
1209 sdata->vif.bss_conf.qos = enable_qos; in ieee80211_set_wmm_default()
1211 ieee80211_bss_info_change_notify(sdata, in ieee80211_set_wmm_default()
1216 void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, in ieee80211_send_auth() argument
1222 struct ieee80211_local *local = sdata->local; in ieee80211_send_auth()
1240 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_send_auth()
1256 ieee80211_tx_skb(sdata, skb); in ieee80211_send_auth()
1259 void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata, in ieee80211_send_deauth_disassoc() argument
1263 struct ieee80211_local *local = sdata->local; in ieee80211_send_deauth_disassoc()
1272 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_send_deauth_disassoc()
1289 if (sdata->vif.type != NL80211_IFTYPE_STATION || in ieee80211_send_deauth_disassoc()
1290 !(sdata->u.mgd.flags & IEEE80211_STA_MFP_ENABLED)) in ieee80211_send_deauth_disassoc()
1294 ieee80211_tx_skb(sdata, skb); in ieee80211_send_deauth_disassoc()
1509 struct sk_buff *ieee80211_build_probe_req(struct ieee80211_sub_if_data *sdata, in ieee80211_build_probe_req() argument
1517 struct ieee80211_local *local = sdata->local; in ieee80211_build_probe_req()
1530 chandef.width = sdata->vif.bss_conf.chandef.width; in ieee80211_build_probe_req()
1559 void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, in ieee80211_send_probe_req() argument
1568 skb = ieee80211_build_probe_req(sdata, src, dst, ratemask, channel, in ieee80211_send_probe_req()
1574 ieee80211_tx_skb_tid_band(sdata, skb, 7, channel->band); in ieee80211_send_probe_req()
1576 ieee80211_tx_skb(sdata, skb); in ieee80211_send_probe_req()
1580 u32 ieee80211_sta_get_rates(struct ieee80211_sub_if_data *sdata, in ieee80211_sta_get_rates() argument
1588 sband = sdata->local->hw.wiphy->bands[band]; in ieee80211_sta_get_rates()
1590 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef); in ieee80211_sta_get_rates()
1591 shift = ieee80211_vif_get_shift(&sdata->vif); in ieee80211_sta_get_rates()
1669 struct ieee80211_sub_if_data *sdata; in ieee80211_handle_reconfig_failure() local
1693 list_for_each_entry(sdata, &local->interfaces, list) in ieee80211_handle_reconfig_failure()
1694 sdata->flags &= ~IEEE80211_SDATA_IN_DRIVER; in ieee80211_handle_reconfig_failure()
1708 struct ieee80211_sub_if_data *sdata) in ieee80211_assign_chanctx() argument
1717 conf = rcu_dereference_protected(sdata->vif.chanctx_conf, in ieee80211_assign_chanctx()
1721 drv_assign_vif_chanctx(local, sdata, ctx); in ieee80211_assign_chanctx()
1726 static void ieee80211_reconfig_stations(struct ieee80211_sub_if_data *sdata) in ieee80211_reconfig_stations() argument
1728 struct ieee80211_local *local = sdata->local; in ieee80211_reconfig_stations()
1736 if (!sta->uploaded || sta->sdata != sdata) in ieee80211_reconfig_stations()
1741 WARN_ON(drv_sta_state(local, sta->sdata, sta, state, in ieee80211_reconfig_stations()
1750 struct ieee80211_sub_if_data *sdata; in ieee80211_reconfig() local
1837 sdata = rtnl_dereference(local->monitor_sdata); in ieee80211_reconfig()
1838 if (sdata) { in ieee80211_reconfig()
1841 res = drv_add_interface(local, sdata); in ieee80211_reconfig()
1845 kfree(sdata); in ieee80211_reconfig()
1849 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
1850 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && in ieee80211_reconfig()
1851 sdata->vif.type != NL80211_IFTYPE_MONITOR && in ieee80211_reconfig()
1852 ieee80211_sdata_running(sdata)) { in ieee80211_reconfig()
1853 res = drv_add_interface(local, sdata); in ieee80211_reconfig()
1863 list_for_each_entry_continue_reverse(sdata, &local->interfaces, in ieee80211_reconfig()
1865 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && in ieee80211_reconfig()
1866 sdata->vif.type != NL80211_IFTYPE_MONITOR && in ieee80211_reconfig()
1867 ieee80211_sdata_running(sdata)) in ieee80211_reconfig()
1868 drv_remove_interface(local, sdata); in ieee80211_reconfig()
1882 sdata = rtnl_dereference(local->monitor_sdata); in ieee80211_reconfig()
1883 if (sdata && ieee80211_sdata_running(sdata)) in ieee80211_reconfig()
1884 ieee80211_assign_chanctx(local, sdata); in ieee80211_reconfig()
1893 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
1896 if (!ieee80211_sdata_running(sdata)) in ieee80211_reconfig()
1899 ieee80211_assign_chanctx(local, sdata); in ieee80211_reconfig()
1901 switch (sdata->vif.type) { in ieee80211_reconfig()
1906 ieee80211_reconfig_stations(sdata); in ieee80211_reconfig()
1910 drv_conf_tx(local, sdata, i, in ieee80211_reconfig()
1911 &sdata->tx_conf[i]); in ieee80211_reconfig()
1928 switch (sdata->vif.type) { in ieee80211_reconfig()
1935 if (sdata->u.mgd.have_beacon) in ieee80211_reconfig()
1938 sdata_lock(sdata); in ieee80211_reconfig()
1939 ieee80211_bss_info_change_notify(sdata, changed); in ieee80211_reconfig()
1940 sdata_unlock(sdata); in ieee80211_reconfig()
1944 ieee80211_bss_info_change_notify(sdata, changed); in ieee80211_reconfig()
1952 if (sdata->vif.type == NL80211_IFTYPE_AP) { in ieee80211_reconfig()
1955 if (rcu_access_pointer(sdata->u.ap.beacon)) in ieee80211_reconfig()
1956 drv_start_ap(local, sdata); in ieee80211_reconfig()
1961 if (sdata->vif.bss_conf.enable_beacon) { in ieee80211_reconfig()
1964 ieee80211_bss_info_change_notify(sdata, changed); in ieee80211_reconfig()
1991 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
1992 if (sdata->vif.type != NL80211_IFTYPE_STATION) in ieee80211_reconfig()
1994 if (!sdata->u.mgd.associated) in ieee80211_reconfig()
1997 ieee80211_send_nullfunc(local, sdata, false); in ieee80211_reconfig()
2009 if (sta->sdata->vif.type != NL80211_IFTYPE_AP) in ieee80211_reconfig()
2014 WARN_ON(drv_sta_state(local, sta->sdata, sta, state, in ieee80211_reconfig()
2020 list_for_each_entry(sdata, &local->interfaces, list) in ieee80211_reconfig()
2021 ieee80211_reset_crypto_tx_tailroom(sdata); in ieee80211_reconfig()
2023 list_for_each_entry(sdata, &local->interfaces, list) in ieee80211_reconfig()
2024 if (ieee80211_sdata_running(sdata)) in ieee80211_reconfig()
2025 ieee80211_enable_keys(sdata); in ieee80211_reconfig()
2105 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
2106 if (!ieee80211_sdata_running(sdata)) in ieee80211_reconfig()
2108 if (sdata->vif.type == NL80211_IFTYPE_STATION) in ieee80211_reconfig()
2109 ieee80211_sta_restart(sdata); in ieee80211_reconfig()
2122 struct ieee80211_sub_if_data *sdata; in ieee80211_resume_disconnect() local
2129 sdata = vif_to_sdata(vif); in ieee80211_resume_disconnect()
2130 local = sdata->local; in ieee80211_resume_disconnect()
2138 sdata->flags |= IEEE80211_SDATA_DISCONNECT_RESUME; in ieee80211_resume_disconnect()
2141 list_for_each_entry(key, &sdata->key_list, list) in ieee80211_resume_disconnect()
2147 void ieee80211_recalc_smps(struct ieee80211_sub_if_data *sdata) in ieee80211_recalc_smps() argument
2149 struct ieee80211_local *local = sdata->local; in ieee80211_recalc_smps()
2155 chanctx_conf = rcu_dereference_protected(sdata->vif.chanctx_conf, in ieee80211_recalc_smps()
2173 void ieee80211_recalc_min_chandef(struct ieee80211_sub_if_data *sdata) in ieee80211_recalc_min_chandef() argument
2175 struct ieee80211_local *local = sdata->local; in ieee80211_recalc_min_chandef()
2181 chanctx_conf = rcu_dereference_protected(sdata->vif.chanctx_conf, in ieee80211_recalc_min_chandef()
2203 static void _ieee80211_enable_rssi_reports(struct ieee80211_sub_if_data *sdata, in _ieee80211_enable_rssi_reports() argument
2207 trace_api_enable_rssi_reports(sdata, rssi_min_thold, rssi_max_thold); in _ieee80211_enable_rssi_reports()
2209 if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION)) in _ieee80211_enable_rssi_reports()
2217 sdata->u.mgd.rssi_min_thold = rssi_min_thold*16; in _ieee80211_enable_rssi_reports()
2218 sdata->u.mgd.rssi_max_thold = rssi_max_thold*16; in _ieee80211_enable_rssi_reports()
2225 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_enable_rssi_reports() local
2230 _ieee80211_enable_rssi_reports(sdata, rssi_min_thold, in ieee80211_enable_rssi_reports()
2237 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_disable_rssi_reports() local
2239 _ieee80211_enable_rssi_reports(sdata, 0, 0); in ieee80211_disable_rssi_reports()
2472 int ieee80211_add_srates_ie(struct ieee80211_sub_if_data *sdata, in ieee80211_add_srates_ie() argument
2476 struct ieee80211_local *local = sdata->local; in ieee80211_add_srates_ie()
2480 u32 basic_rates = sdata->vif.bss_conf.basic_rates; in ieee80211_add_srates_ie()
2483 shift = ieee80211_vif_get_shift(&sdata->vif); in ieee80211_add_srates_ie()
2484 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef); in ieee80211_add_srates_ie()
2517 int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata, in ieee80211_add_ext_srates_ie() argument
2521 struct ieee80211_local *local = sdata->local; in ieee80211_add_ext_srates_ie()
2525 u32 basic_rates = sdata->vif.bss_conf.basic_rates; in ieee80211_add_ext_srates_ie()
2528 rate_flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef); in ieee80211_add_ext_srates_ie()
2529 shift = ieee80211_vif_get_shift(&sdata->vif); in ieee80211_add_ext_srates_ie()
2568 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_ave_rssi() local
2569 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_ave_rssi()
2571 if (WARN_ON_ONCE(sdata->vif.type != NL80211_IFTYPE_STATION)) { in ieee80211_ave_rssi()
2681 struct ieee80211_sub_if_data *sdata; in ieee80211_dfs_cac_cancel() local
2686 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_dfs_cac_cancel()
2691 cancel_delayed_work(&sdata->dfs_cac_timer_work); in ieee80211_dfs_cac_cancel()
2693 if (sdata->wdev.cac_started) { in ieee80211_dfs_cac_cancel()
2694 chandef = sdata->vif.bss_conf.chandef; in ieee80211_dfs_cac_cancel()
2695 ieee80211_vif_release_channel(sdata); in ieee80211_dfs_cac_cancel()
2696 cfg80211_cac_event(sdata->dev, in ieee80211_dfs_cac_cancel()
2828 int ieee80211_send_action_csa(struct ieee80211_sub_if_data *sdata, in ieee80211_send_action_csa() argument
2833 struct ieee80211_local *local = sdata->local; in ieee80211_send_action_csa()
2839 if (sdata->vif.type != NL80211_IFTYPE_ADHOC && in ieee80211_send_action_csa()
2840 sdata->vif.type != NL80211_IFTYPE_MESH_POINT) in ieee80211_send_action_csa()
2857 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_send_action_csa()
2858 if (ieee80211_vif_is_mesh(&sdata->vif)) { in ieee80211_send_action_csa()
2859 memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); in ieee80211_send_action_csa()
2861 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_send_action_csa()
2887 if (ieee80211_vif_is_mesh(&sdata->vif)) { in ieee80211_send_action_csa()
2888 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_send_action_csa()
2893 *pos++ = sdata->u.mesh.mshcfg.dot11MeshTTL; /* Mesh TTL */ in ieee80211_send_action_csa()
2904 ieee80211_tx_skb(sdata, skb); in ieee80211_send_action_csa()
3124 struct ieee80211_sub_if_data *sdata) in ieee80211_recalc_dtim() argument
3126 u64 tsf = drv_get_tsf(local, sdata); in ieee80211_recalc_dtim()
3128 u16 beacon_int = sdata->vif.bss_conf.beacon_int * 1024; in ieee80211_recalc_dtim()
3129 u8 dtim_period = sdata->vif.bss_conf.dtim_period; in ieee80211_recalc_dtim()
3136 if (sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_recalc_dtim()
3137 sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { in ieee80211_recalc_dtim()
3138 if (!sdata->bss) in ieee80211_recalc_dtim()
3141 ps = &sdata->bss->ps; in ieee80211_recalc_dtim()
3142 } else if (ieee80211_vif_is_mesh(&sdata->vif)) { in ieee80211_recalc_dtim()
3143 ps = &sdata->u.mesh.ps; in ieee80211_recalc_dtim()
3167 struct ieee80211_sub_if_data *sdata; in ieee80211_chanctx_radar_detect() local
3175 list_for_each_entry(sdata, &ctx->reserved_vifs, reserved_chanctx_list) in ieee80211_chanctx_radar_detect()
3176 if (sdata->reserved_radar_required) in ieee80211_chanctx_radar_detect()
3177 radar_detect |= BIT(sdata->reserved_chandef.width); in ieee80211_chanctx_radar_detect()
3186 list_for_each_entry(sdata, &ctx->assigned_vifs, assigned_chanctx_list) in ieee80211_chanctx_radar_detect()
3187 if (sdata->radar_required) in ieee80211_chanctx_radar_detect()
3188 radar_detect |= BIT(sdata->vif.bss_conf.chandef.width); in ieee80211_chanctx_radar_detect()
3193 int ieee80211_check_combinations(struct ieee80211_sub_if_data *sdata, in ieee80211_check_combinations() argument
3198 struct ieee80211_local *local = sdata->local; in ieee80211_check_combinations()
3200 enum nl80211_iftype iftype = sdata->wdev.iftype; in ieee80211_check_combinations()
3253 if (sdata_iter == sdata || in ieee80211_check_combinations()
3282 struct ieee80211_sub_if_data *sdata; in ieee80211_max_num_channels() local
3301 list_for_each_entry_rcu(sdata, &local->interfaces, list) in ieee80211_max_num_channels()
3302 num[sdata->wdev.iftype]++; in ieee80211_max_num_channels()
3329 void ieee80211_init_tx_queue(struct ieee80211_sub_if_data *sdata, in ieee80211_init_tx_queue() argument
3334 txqi->txq.vif = &sdata->vif; in ieee80211_init_tx_queue()
3342 sdata->vif.txq = &txqi->txq; in ieee80211_init_tx_queue()