Lines Matching refs:sdata

134 		if (tx->sdata->vif.bss_conf.basic_rates & BIT(i))  in ieee80211_duration()
140 if (tx->sdata->deflink.operating_11g_mode) in ieee80211_duration()
173 tx->sdata->vif.bss_conf.use_short_preamble); in ieee80211_duration()
182 tx->sdata->vif.bss_conf.use_short_preamble); in ieee80211_duration()
220 if (tx->sdata->vif.type != NL80211_IFTYPE_STATION) in ieee80211_tx_h_dynamic_ps()
226 ifmgd = &tx->sdata->u.mgd; in ieee80211_tx_h_dynamic_ps()
278 test_bit(SDATA_STATE_OFFCHANNEL, &tx->sdata->state) && in ieee80211_tx_h_check_assoc()
294 if (tx->sdata->vif.type == NL80211_IFTYPE_OCB) in ieee80211_tx_h_check_assoc()
307 sdata_info(tx->sdata, in ieee80211_tx_h_check_assoc()
315 ieee80211_vif_get_num_mcast_if(tx->sdata) == 0)) { in ieee80211_tx_h_check_assoc()
334 struct ieee80211_sub_if_data *sdata; in purge_old_ps_buffers() local
337 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in purge_old_ps_buffers()
340 if (sdata->vif.type == NL80211_IFTYPE_AP) in purge_old_ps_buffers()
341 ps = &sdata->u.ap.ps; in purge_old_ps_buffers()
342 else if (ieee80211_vif_is_mesh(&sdata->vif)) in purge_old_ps_buffers()
343 ps = &sdata->u.mesh.ps; in purge_old_ps_buffers()
393 if (tx->sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_tx_h_multicast_ps_buf()
394 tx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { in ieee80211_tx_h_multicast_ps_buf()
395 if (!tx->sdata->bss) in ieee80211_tx_h_multicast_ps_buf()
398 ps = &tx->sdata->bss->ps; in ieee80211_tx_h_multicast_ps_buf()
399 } else if (ieee80211_vif_is_mesh(&tx->sdata->vif)) { in ieee80211_tx_h_multicast_ps_buf()
400 ps = &tx->sdata->u.mesh.ps; in ieee80211_tx_h_multicast_ps_buf()
414 info->hw_queue = tx->sdata->vif.cab_queue; in ieee80211_tx_h_multicast_ps_buf()
431 ps_dbg(tx->sdata, in ieee80211_tx_h_multicast_ps_buf()
480 ps_dbg(sta->sdata, "STA %pM aid %d: PS buffer for AC %d\n", in ieee80211_tx_h_unicast_ps_buf()
501 ps_dbg(tx->sdata, in ieee80211_tx_h_unicast_ps_buf()
509 info->control.vif = &tx->sdata->vif; in ieee80211_tx_h_unicast_ps_buf()
528 ps_dbg(tx->sdata, in ieee80211_tx_h_unicast_ps_buf()
553 if (unlikely(tx->sdata->control_port_protocol == tx->skb->protocol)) { in ieee80211_tx_h_check_control_port_protocol()
554 if (tx->sdata->control_port_no_encrypt) in ieee80211_tx_h_check_control_port_protocol()
573 link = &tx->sdata->deflink; in ieee80211_select_link_key()
575 link = rcu_dereference(tx->sdata->link[link_id]); in ieee80211_select_link_key()
610 (key = rcu_dereference(tx->sdata->default_unicast_key))) in ieee80211_tx_h_select_key()
658 tx->skb->protocol != tx->sdata->control_port_protocol) in ieee80211_tx_h_select_key()
694 txrc.bss_conf = &tx->sdata->vif.bss_conf; in ieee80211_tx_h_rate_ctrl()
701 txrc.rate_idx_mask = tx->sdata->rc_rateidx_mask[info->band]; in ieee80211_tx_h_rate_ctrl()
703 if (tx->sdata->rc_has_mcs_mask[info->band]) in ieee80211_tx_h_rate_ctrl()
705 tx->sdata->rc_rateidx_mcs_mask[info->band]; in ieee80211_tx_h_rate_ctrl()
708 txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP || in ieee80211_tx_h_rate_ctrl()
709 tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT || in ieee80211_tx_h_rate_ctrl()
710 tx->sdata->vif.type == NL80211_IFTYPE_ADHOC || in ieee80211_tx_h_rate_ctrl()
711 tx->sdata->vif.type == NL80211_IFTYPE_OCB); in ieee80211_tx_h_rate_ctrl()
719 info->control.use_cts_prot = tx->sdata->vif.bss_conf.use_cts_prot; in ieee80211_tx_h_rate_ctrl()
727 if (tx->sdata->vif.bss_conf.use_short_preamble && in ieee80211_tx_h_rate_ctrl()
750 tx->sdata->name, in ieee80211_tx_h_rate_ctrl()
759 rate_control_get_rate(tx->sdata, tx->sta, &txrc); in ieee80211_tx_h_rate_ctrl()
846 tx->sdata->mld_mcast_seq += 0x10; in ieee80211_tx_h_sequence()
847 hdr->seq_ctrl = cpu_to_le16(tx->sdata->mld_mcast_seq); in ieee80211_tx_h_sequence()
862 hdr->seq_ctrl = cpu_to_le16(tx->sdata->sequence_number); in ieee80211_tx_h_sequence()
863 tx->sdata->sequence_number += 0x10; in ieee80211_tx_h_sequence()
1148 ps_dbg(tx->sta->sdata, in ieee80211_tx_prep_agg()
1152 info->control.vif = &tx->sdata->vif; in ieee80211_tx_prep_agg()
1172 void ieee80211_aggr_check(struct ieee80211_sub_if_data *sdata, in ieee80211_aggr_check() argument
1175 struct rate_control_ref *ref = sdata->local->rate_ctrl; in ieee80211_aggr_check()
1185 skb->protocol == sdata->control_port_protocol) in ieee80211_aggr_check()
1201 ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata, in ieee80211_tx_prepare() argument
1205 struct ieee80211_local *local = sdata->local; in ieee80211_tx_prepare()
1214 tx->sdata = sdata; in ieee80211_tx_prepare()
1230 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) { in ieee80211_tx_prepare()
1231 tx->sta = rcu_dereference(sdata->u.vlan.sta); in ieee80211_tx_prepare()
1232 if (!tx->sta && sdata->wdev.use_4addr) in ieee80211_tx_prepare()
1234 } else if (tx->sdata->control_port_protocol == tx->skb->protocol) { in ieee80211_tx_prepare()
1235 tx->sta = sta_info_get_bss(sdata, hdr->addr1); in ieee80211_tx_prepare()
1238 tx->sta = sta_info_get(sdata, hdr->addr1); in ieee80211_tx_prepare()
1252 ieee80211_aggr_check(sdata, tx->sta, skb); in ieee80211_tx_prepare()
1471 struct ieee80211_sub_if_data *sdata) in ieee80211_txq_remove_vlan() argument
1478 if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_AP_VLAN)) in ieee80211_txq_remove_vlan()
1481 ap = container_of(sdata->bss, struct ieee80211_sub_if_data, u.ap); in ieee80211_txq_remove_vlan()
1490 fq_tin_filter(fq, tin, fq_vlan_filter_func, &sdata->vif, in ieee80211_txq_remove_vlan()
1495 void ieee80211_txq_init(struct ieee80211_sub_if_data *sdata, in ieee80211_txq_init() argument
1505 txqi->txq.vif = &sdata->vif; in ieee80211_txq_init()
1508 sdata->vif.txq = &txqi->txq; in ieee80211_txq_init()
1516 if (sdata->vif.type == NL80211_IFTYPE_STATION) { in ieee80211_txq_init()
1518 if (!ieee80211_hw_check(&sdata->local->hw, in ieee80211_txq_init()
1521 } else if (!ieee80211_hw_check(&sdata->local->hw, in ieee80211_txq_init()
1634 struct ieee80211_sub_if_data *sdata, in ieee80211_queue_skb() argument
1641 if (sdata->vif.type == NL80211_IFTYPE_MONITOR) in ieee80211_queue_skb()
1644 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) in ieee80211_queue_skb()
1645 sdata = container_of(sdata->bss, in ieee80211_queue_skb()
1648 vif = &sdata->vif; in ieee80211_queue_skb()
1742 struct ieee80211_sub_if_data *sdata; in __ieee80211_tx() local
1752 sdata = vif_to_sdata(info->control.vif); in __ieee80211_tx()
1756 switch (sdata->vif.type) { in __ieee80211_tx()
1758 if ((sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE) || in __ieee80211_tx()
1760 vif = &sdata->vif; in __ieee80211_tx()
1763 sdata = rcu_dereference(local->monitor_sdata); in __ieee80211_tx()
1764 if (sdata && ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) { in __ieee80211_tx()
1765 vif = &sdata->vif; in __ieee80211_tx()
1775 sdata = container_of(sdata->bss, in __ieee80211_tx()
1779 vif = &sdata->vif; in __ieee80211_tx()
1888 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_tx_prepare_skb() local
1893 if (ieee80211_tx_prepare(sdata, &tx, NULL, skb) == TX_DROP) in ieee80211_tx_prepare_skb()
1925 static bool ieee80211_tx(struct ieee80211_sub_if_data *sdata, in ieee80211_tx() argument
1929 struct ieee80211_local *local = sdata->local; in ieee80211_tx()
1941 res_prepare = ieee80211_tx_prepare(sdata, &tx, sta, skb); in ieee80211_tx()
1954 sdata->vif.hw_queue[skb_get_queue_mapping(skb)]; in ieee80211_tx()
1959 if (ieee80211_queue_skb(local, sdata, tx.sta, tx.skb)) in ieee80211_tx()
1976 static int ieee80211_skb_resize(struct ieee80211_sub_if_data *sdata, in ieee80211_skb_resize() argument
1981 struct ieee80211_local *local = sdata->local; in ieee80211_skb_resize()
1987 sdata->crypto_tx_tailroom_needed_cnt); in ieee80211_skb_resize()
2013 void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, in ieee80211_xmit() argument
2016 struct ieee80211_local *local = sdata->local; in ieee80211_xmit()
2035 if (ieee80211_skb_resize(sdata, skb, headroom, encrypt)) { in ieee80211_xmit()
2042 info->control.vif = &sdata->vif; in ieee80211_xmit()
2044 if (ieee80211_vif_is_mesh(&sdata->vif)) { in ieee80211_xmit()
2047 if (mesh_nexthop_resolve(sdata, skb)) in ieee80211_xmit()
2050 ieee80211_mps_set_frame_flags(sdata, NULL, hdr); in ieee80211_xmit()
2054 ieee80211_set_qos_hdr(sdata, skb); in ieee80211_xmit()
2055 ieee80211_tx(sdata, sta, skb, false); in ieee80211_xmit()
2301 struct ieee80211_sub_if_data *tmp_sdata, *sdata; in ieee80211_monitor_start_xmit() local
2306 sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_monitor_start_xmit()
2307 if (unlikely(!ieee80211_sdata_running(sdata))) in ieee80211_monitor_start_xmit()
2376 sdata = tmp_sdata; in ieee80211_monitor_start_xmit()
2381 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_monitor_start_xmit()
2419 sdata->vif.type)) in ieee80211_monitor_start_xmit()
2430 ieee80211_select_queue_80211(sdata, skb, hdr); in ieee80211_monitor_start_xmit()
2444 ieee80211_xmit(sdata, NULL, skb); in ieee80211_monitor_start_xmit()
2465 int ieee80211_lookup_ra_sta(struct ieee80211_sub_if_data *sdata, in ieee80211_lookup_ra_sta() argument
2471 switch (sdata->vif.type) { in ieee80211_lookup_ra_sta()
2473 sta = rcu_dereference(sdata->u.vlan.sta); in ieee80211_lookup_ra_sta()
2477 } else if (sdata->wdev.use_4addr) { in ieee80211_lookup_ra_sta()
2488 sta = sta_info_get_bss(sdata, skb->data); in ieee80211_lookup_ra_sta()
2497 if (sdata->wdev.wiphy->flags & WIPHY_FLAG_SUPPORTS_TDLS) { in ieee80211_lookup_ra_sta()
2498 sta = sta_info_get(sdata, skb->data); in ieee80211_lookup_ra_sta()
2519 sta = sta_info_get(sdata, sdata->vif.cfg.ap_addr); in ieee80211_lookup_ra_sta()
2589 static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata, in ieee80211_build_hdr() argument
2594 struct ieee80211_local *local = sdata->local; in ieee80211_build_hdr()
2626 if (!ieee80211_vif_is_mld(&sdata->vif)) in ieee80211_build_hdr()
2628 rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_build_hdr()
2630 switch (sdata->vif.type) { in ieee80211_build_hdr()
2632 if (sdata->wdev.use_4addr) { in ieee80211_build_hdr()
2636 memcpy(hdr.addr2, sdata->vif.addr, ETH_ALEN); in ieee80211_build_hdr()
2643 if (!ieee80211_vif_is_mld(&sdata->vif)) { in ieee80211_build_hdr()
2647 ap_sdata = container_of(sdata->bss, in ieee80211_build_hdr()
2653 if (sdata->wdev.use_4addr) in ieee80211_build_hdr()
2661 if (ieee80211_vif_is_mld(&sdata->vif) && sta && !sta->sta.mlo) { in ieee80211_build_hdr()
2665 link = rcu_dereference(sdata->link[link_id]); in ieee80211_build_hdr()
2673 memcpy(hdr.addr2, sdata->vif.addr, ETH_ALEN); in ieee80211_build_hdr()
2677 conf = rcu_dereference(sdata->vif.link_conf[link_id]); in ieee80211_build_hdr()
2695 mpath = mesh_path_lookup(sdata, skb->data); in ieee80211_build_hdr()
2706 mppath = mpp_path_lookup(sdata, skb->data); in ieee80211_build_hdr()
2712 mesh_path_del(sdata, mpath->dst); in ieee80211_build_hdr()
2721 if (ether_addr_equal(sdata->vif.addr, skb->data + ETH_ALEN) && in ieee80211_build_hdr()
2725 meshhdrlen = ieee80211_new_mesh_header(sdata, &mesh_hdr, in ieee80211_build_hdr()
2742 mesh_da, sdata->vif.addr); in ieee80211_build_hdr()
2746 sdata, &mesh_hdr, in ieee80211_build_hdr()
2751 sdata, &mesh_hdr, skb->data, in ieee80211_build_hdr()
2776 link = rcu_dereference(sdata->link[tdls_link_id]); in ieee80211_build_hdr()
2783 } else if (sdata->u.mgd.use_4addr && in ieee80211_build_hdr()
2784 cpu_to_be16(ethertype) != sdata->control_port_protocol) { in ieee80211_build_hdr()
2788 memcpy(hdr.addr1, sdata->deflink.u.mgd.bssid, ETH_ALEN); in ieee80211_build_hdr()
2789 memcpy(hdr.addr2, sdata->vif.addr, ETH_ALEN); in ieee80211_build_hdr()
2796 memcpy(hdr.addr1, sdata->vif.cfg.ap_addr, ETH_ALEN); in ieee80211_build_hdr()
2813 memcpy(hdr.addr3, sdata->u.ibss.bssid, ETH_ALEN); in ieee80211_build_hdr()
2822 if (!ieee80211_vif_is_mld(&sdata->vif)) { in ieee80211_build_hdr()
2838 } else if (ieee80211_vif_is_mesh(&sdata->vif)) { in ieee80211_build_hdr()
2853 if (unlikely(!ieee80211_vif_is_mesh(&sdata->vif) && in ieee80211_build_hdr()
2854 (sdata->vif.type != NL80211_IFTYPE_OCB) && in ieee80211_build_hdr()
2856 (cpu_to_be16(ethertype) != sdata->control_port_protocol || in ieee80211_build_hdr()
2857 !ieee80211_is_our_addr(sdata, skb->data + ETH_ALEN, NULL)))) { in ieee80211_build_hdr()
2860 sdata->name, hdr.addr1); in ieee80211_build_hdr()
2921 if (ieee80211_skb_resize(sdata, skb, head_need, ENCRYPT_DATA)) { in ieee80211_build_hdr()
2980 sdata->name, hdr.addr1, in ieee80211_build_hdr()
3021 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_check_fast_xmit() local
3029 if (ieee80211_vif_is_mesh(&sdata->vif)) in ieee80211_check_fast_xmit()
3030 mesh_fast_tx_flush_sta(sdata, sta); in ieee80211_check_fast_xmit()
3047 sdata->vif.type == NL80211_IFTYPE_STATION) in ieee80211_check_fast_xmit()
3059 if (sdata->noack_map) in ieee80211_check_fast_xmit()
3067 if (!ieee80211_vif_is_mld(&sdata->vif)) { in ieee80211_check_fast_xmit()
3070 rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_check_fast_xmit()
3084 switch (sdata->vif.type) { in ieee80211_check_fast_xmit()
3089 memcpy(hdr->addr3, sdata->u.ibss.bssid, ETH_ALEN); in ieee80211_check_fast_xmit()
3102 link = rcu_dereference(sdata->link[tdls_link_id]); in ieee80211_check_fast_xmit()
3110 if (sdata->u.mgd.use_4addr) { in ieee80211_check_fast_xmit()
3115 memcpy(hdr->addr1, sdata->deflink.u.mgd.bssid, ETH_ALEN); in ieee80211_check_fast_xmit()
3116 memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN); in ieee80211_check_fast_xmit()
3124 memcpy(hdr->addr1, sdata->vif.cfg.ap_addr, ETH_ALEN); in ieee80211_check_fast_xmit()
3130 if (sdata->wdev.use_4addr) { in ieee80211_check_fast_xmit()
3135 memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN); in ieee80211_check_fast_xmit()
3146 if (sta->sta.mlo || !ieee80211_vif_is_mld(&sdata->vif)) { in ieee80211_check_fast_xmit()
3147 memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN); in ieee80211_check_fast_xmit()
3153 link = rcu_dereference(sdata->link[link_id]); in ieee80211_check_fast_xmit()
3181 build.key = rcu_access_pointer(sdata->default_unicast_key); in ieee80211_check_fast_xmit()
3275 void ieee80211_check_fast_xmit_iface(struct ieee80211_sub_if_data *sdata) in ieee80211_check_fast_xmit_iface() argument
3277 struct ieee80211_local *local = sdata->local; in ieee80211_check_fast_xmit_iface()
3283 if (sdata != sta->sdata && in ieee80211_check_fast_xmit_iface()
3284 (!sta->sdata->bss || sta->sdata->bss != sdata->bss)) in ieee80211_check_fast_xmit_iface()
3322 static bool ieee80211_amsdu_prepare_head(struct ieee80211_sub_if_data *sdata, in ieee80211_amsdu_prepare_head() argument
3326 struct ieee80211_local *local = sdata->local; in ieee80211_amsdu_prepare_head()
3363 switch (sdata->vif.type) { in ieee80211_amsdu_prepare_head()
3365 bssid = sdata->vif.cfg.ap_addr; in ieee80211_amsdu_prepare_head()
3369 bssid = sdata->vif.addr; in ieee80211_amsdu_prepare_head()
3389 static bool ieee80211_amsdu_aggregate(struct ieee80211_sub_if_data *sdata, in ieee80211_amsdu_aggregate() argument
3395 struct ieee80211_local *local = sdata->local; in ieee80211_amsdu_aggregate()
3419 if (sdata->vif.offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED) in ieee80211_amsdu_aggregate()
3422 if (ieee80211_vif_is_mesh(&sdata->vif)) in ieee80211_amsdu_aggregate()
3481 if (!ieee80211_amsdu_prepare_head(sdata, fast_tx, head)) in ieee80211_amsdu_aggregate()
3540 ieee80211_xmit_fast_finish(struct ieee80211_sub_if_data *sdata, in ieee80211_xmit_fast_finish() argument
3564 hdr->seq_ctrl = cpu_to_le16(sdata->sequence_number); in ieee80211_xmit_fast_finish()
3565 sdata->sequence_number += 0x10; in ieee80211_xmit_fast_finish()
3574 info->hw_queue = sdata->vif.hw_queue[skb_get_queue_mapping(skb)]; in ieee80211_xmit_fast_finish()
3607 ieee80211_sdata_netdev_features(struct ieee80211_sub_if_data *sdata) in ieee80211_sdata_netdev_features() argument
3609 if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN) in ieee80211_sdata_netdev_features()
3610 return sdata->vif.netdev_features; in ieee80211_sdata_netdev_features()
3612 if (!sdata->bss) in ieee80211_sdata_netdev_features()
3615 sdata = container_of(sdata->bss, struct ieee80211_sub_if_data, u.ap); in ieee80211_sdata_netdev_features()
3616 return sdata->vif.netdev_features; in ieee80211_sdata_netdev_features()
3658 void __ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata, in __ieee80211_xmit_fast() argument
3664 struct ieee80211_local *local = sdata->local; in __ieee80211_xmit_fast()
3669 int hw_headroom = sdata->local->hw.extra_tx_headroom; in __ieee80211_xmit_fast()
3677 ieee80211_amsdu_aggregate(sdata, sta, fast_tx, skb, da, sa)) in __ieee80211_xmit_fast()
3684 if (unlikely(ieee80211_skb_resize(sdata, skb, in __ieee80211_xmit_fast()
3698 info->control.vif = &sdata->vif; in __ieee80211_xmit_fast()
3720 tx.sdata = sdata; in __ieee80211_xmit_fast()
3724 if (ieee80211_queue_skb(local, sdata, sta, skb)) in __ieee80211_xmit_fast()
3728 r = ieee80211_xmit_fast_finish(sdata, sta, fast_tx->pn_offs, in __ieee80211_xmit_fast()
3734 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) in __ieee80211_xmit_fast()
3735 sdata = container_of(sdata->bss, in __ieee80211_xmit_fast()
3739 ieee80211_tx_frags(local, &sdata->vif, sta, &tx.skbs, false); in __ieee80211_xmit_fast()
3746 static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata, in ieee80211_xmit_fast() argument
3759 if (cpu_to_be16(ethertype) == sdata->control_port_protocol) in ieee80211_xmit_fast()
3784 skb = ieee80211_tx_skb_fixup(skb, ieee80211_sdata_netdev_features(sdata)); in ieee80211_xmit_fast()
3790 __ieee80211_xmit_fast(sdata, sta, fast_tx, skb, tid_tx, in ieee80211_xmit_fast()
3859 tx.sdata = vif_to_sdata(info->control.vif); in ieee80211_tx_dequeue()
3869 !ieee80211_vif_is_mesh(&tx.sdata->vif) && in ieee80211_tx_dequeue()
3870 tx.sdata->vif.type != NL80211_IFTYPE_OCB && in ieee80211_tx_dequeue()
3875 !ieee80211_is_our_addr(tx.sdata, hdr->addr2, in ieee80211_tx_dequeue()
3918 r = ieee80211_xmit_fast_finish(sta->sdata, sta, pn_offs, in ieee80211_tx_dequeue()
3946 switch (tx.sdata->vif.type) { in ieee80211_tx_dequeue()
3948 if ((tx.sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE) || in ieee80211_tx_dequeue()
3950 vif = &tx.sdata->vif; in ieee80211_tx_dequeue()
3953 tx.sdata = rcu_dereference(local->monitor_sdata); in ieee80211_tx_dequeue()
3954 if (tx.sdata && in ieee80211_tx_dequeue()
3956 vif = &tx.sdata->vif; in ieee80211_tx_dequeue()
3968 tx.sdata = container_of(tx.sdata->bss, in ieee80211_tx_dequeue()
3972 vif = &tx.sdata->vif; in ieee80211_tx_dequeue()
4269 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in __ieee80211_subif_start_xmit() local
4270 struct ieee80211_local *local = sdata->local; in __ieee80211_subif_start_xmit()
4275 if (unlikely(!ieee80211_sdata_running(sdata) || skb->len < ETH_HLEN)) { in __ieee80211_subif_start_xmit()
4280 sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift); in __ieee80211_subif_start_xmit()
4284 if (ieee80211_vif_is_mesh(&sdata->vif) && in __ieee80211_subif_start_xmit()
4286 ieee80211_mesh_xmit_fast(sdata, skb, ctrl_flags)) in __ieee80211_subif_start_xmit()
4289 if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) in __ieee80211_subif_start_xmit()
4295 skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, sta, skb)); in __ieee80211_subif_start_xmit()
4296 ieee80211_aggr_check(sdata, sta, skb); in __ieee80211_subif_start_xmit()
4304 ieee80211_xmit_fast(sdata, sta, fast_tx, skb)) in __ieee80211_subif_start_xmit()
4321 if (skb->protocol == sdata->control_port_protocol) in __ieee80211_subif_start_xmit()
4324 skb = ieee80211_build_hdr(sdata, skb, info_flags, in __ieee80211_subif_start_xmit()
4333 ieee80211_xmit(sdata, sta, skb); in __ieee80211_subif_start_xmit()
4363 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_multicast_to_unicast() local
4368 switch (sdata->vif.type) { in ieee80211_multicast_to_unicast()
4370 if (sdata->u.vlan.sta) in ieee80211_multicast_to_unicast()
4372 if (sdata->wdev.use_4addr) in ieee80211_multicast_to_unicast()
4377 if (!sdata->bss->multicast_to_unicast) in ieee80211_multicast_to_unicast()
4404 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_convert_to_unicast() local
4405 struct ieee80211_local *local = sdata->local; in ieee80211_convert_to_unicast()
4413 if (sdata != sta->sdata) in ieee80211_convert_to_unicast()
4451 static void ieee80211_mlo_multicast_tx_one(struct ieee80211_sub_if_data *sdata, in ieee80211_mlo_multicast_tx_one() argument
4462 __ieee80211_subif_start_xmit(out, sdata->dev, 0, ctrl_flags, NULL); in ieee80211_mlo_multicast_tx_one()
4468 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_mlo_multicast_tx() local
4469 unsigned long links = sdata->vif.active_links; in ieee80211_mlo_multicast_tx()
4477 __ieee80211_subif_start_xmit(skb, sdata->dev, 0, ctrl_flags, in ieee80211_mlo_multicast_tx()
4483 ieee80211_mlo_multicast_tx_one(sdata, skb, ctrl_flags, link); in ieee80211_mlo_multicast_tx()
4501 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_subif_start_xmit() local
4507 if (unlikely(!ieee80211_sdata_running(sdata))) { in ieee80211_subif_start_xmit()
4521 } else if (ieee80211_vif_is_mld(&sdata->vif) && in ieee80211_subif_start_xmit()
4522 ((sdata->vif.type == NL80211_IFTYPE_AP && in ieee80211_subif_start_xmit()
4523 !ieee80211_hw_check(&sdata->local->hw, MLO_MCAST_MULTI_LINK_TX)) || in ieee80211_subif_start_xmit()
4524 (sdata->vif.type == NL80211_IFTYPE_AP_VLAN && in ieee80211_subif_start_xmit()
4525 !sdata->wdev.use_4addr))) { in ieee80211_subif_start_xmit()
4539 static bool __ieee80211_tx_8023(struct ieee80211_sub_if_data *sdata, in __ieee80211_tx_8023() argument
4543 struct ieee80211_local *local = sdata->local; in __ieee80211_tx_8023()
4576 static bool ieee80211_tx_8023(struct ieee80211_sub_if_data *sdata, in ieee80211_tx_8023() argument
4580 struct ieee80211_local *local = sdata->local; in ieee80211_tx_8023()
4584 if (ieee80211_queue_skb(local, sdata, sta, skb)) in ieee80211_tx_8023()
4589 if (!__ieee80211_tx_8023(sdata, skb, sta, txpending)) in ieee80211_tx_8023()
4596 static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata, in ieee80211_8023_xmit() argument
4601 struct ieee80211_local *local = sdata->local; in ieee80211_8023_xmit()
4608 queue = ieee80211_select_queue(sdata, sta, skb); in ieee80211_8023_xmit()
4612 test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) in ieee80211_8023_xmit()
4619 ieee80211_aggr_check(sdata, sta, skb); in ieee80211_8023_xmit()
4636 skb = ieee80211_tx_skb_fixup(skb, ieee80211_sdata_netdev_features(sdata)); in ieee80211_8023_xmit()
4643 info->hw_queue = sdata->vif.hw_queue[queue]; in ieee80211_8023_xmit()
4645 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) in ieee80211_8023_xmit()
4646 sdata = container_of(sdata->bss, in ieee80211_8023_xmit()
4650 info->control.vif = &sdata->vif; in ieee80211_8023_xmit()
4675 ieee80211_tx_8023(sdata, skb, sta, false); in ieee80211_8023_xmit()
4686 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_subif_start_xmit_8023() local
4691 if (unlikely(!ieee80211_sdata_running(sdata) || skb->len < ETH_HLEN)) { in ieee80211_subif_start_xmit_8023()
4698 if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) { in ieee80211_subif_start_xmit_8023()
4705 sdata->control_port_protocol == ehdr->h_proto)) in ieee80211_subif_start_xmit_8023()
4710 key = rcu_dereference(sdata->default_unicast_key); in ieee80211_subif_start_xmit_8023()
4716 sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift); in ieee80211_subif_start_xmit_8023()
4717 ieee80211_8023_xmit(sdata, dev, sta, key, skb); in ieee80211_subif_start_xmit_8023()
4729 ieee80211_build_data_template(struct ieee80211_sub_if_data *sdata, in ieee80211_build_data_template() argument
4734 .local = sdata->local, in ieee80211_build_data_template()
4735 .sdata = sdata, in ieee80211_build_data_template()
4741 if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) { in ieee80211_build_data_template()
4747 skb = ieee80211_build_hdr(sdata, skb, info_flags, sta, in ieee80211_build_data_template()
4753 tx.sta = sta_info_get(sdata, hdr->addr1); in ieee80211_build_data_template()
4791 struct ieee80211_sub_if_data *sdata; in ieee80211_tx_pending_skb() local
4797 sdata = vif_to_sdata(info->control.vif); in ieee80211_tx_pending_skb()
4801 if (!ieee80211_vif_is_mld(&sdata->vif)) { in ieee80211_tx_pending_skb()
4803 rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_tx_pending_skb()
4810 result = ieee80211_tx(sdata, NULL, skb, true); in ieee80211_tx_pending_skb()
4812 if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) { in ieee80211_tx_pending_skb()
4820 result = ieee80211_tx_8023(sdata, skb, sta, true); in ieee80211_tx_pending_skb()
4828 sta = sta_info_get(sdata, hdr->addr1); in ieee80211_tx_pending_skb()
4885 static void __ieee80211_beacon_add_tim(struct ieee80211_sub_if_data *sdata, in __ieee80211_beacon_add_tim() argument
4956 static int ieee80211_beacon_add_tim(struct ieee80211_sub_if_data *sdata, in ieee80211_beacon_add_tim() argument
4961 struct ieee80211_local *local = sdata->local; in ieee80211_beacon_add_tim()
4971 __ieee80211_beacon_add_tim(sdata, link, ps, skb, is_template); in ieee80211_beacon_add_tim()
4974 __ieee80211_beacon_add_tim(sdata, link, ps, skb, is_template); in ieee80211_beacon_add_tim()
4981 static void ieee80211_set_beacon_cntdwn(struct ieee80211_sub_if_data *sdata, in ieee80211_set_beacon_cntdwn() argument
4991 switch (sdata->vif.type) { in ieee80211_set_beacon_cntdwn()
5022 if (sdata->vif.type == NL80211_IFTYPE_AP && resp) { in ieee80211_set_beacon_cntdwn()
5055 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_beacon_update_cntdwn() local
5065 link = rcu_dereference(sdata->link[link_id]); in ieee80211_beacon_update_cntdwn()
5069 if (sdata->vif.type == NL80211_IFTYPE_AP) in ieee80211_beacon_update_cntdwn()
5071 else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) in ieee80211_beacon_update_cntdwn()
5072 beacon = rcu_dereference(sdata->u.ibss.presp); in ieee80211_beacon_update_cntdwn()
5073 else if (ieee80211_vif_is_mesh(&sdata->vif)) in ieee80211_beacon_update_cntdwn()
5074 beacon = rcu_dereference(sdata->u.mesh.beacon); in ieee80211_beacon_update_cntdwn()
5089 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_beacon_set_cntdwn() local
5094 if (sdata->vif.type == NL80211_IFTYPE_AP) in ieee80211_beacon_set_cntdwn()
5095 beacon = rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_beacon_set_cntdwn()
5096 else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) in ieee80211_beacon_set_cntdwn()
5097 beacon = rcu_dereference(sdata->u.ibss.presp); in ieee80211_beacon_set_cntdwn()
5098 else if (ieee80211_vif_is_mesh(&sdata->vif)) in ieee80211_beacon_set_cntdwn()
5099 beacon = rcu_dereference(sdata->u.mesh.beacon); in ieee80211_beacon_set_cntdwn()
5115 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_beacon_cntdwn_is_complete() local
5122 if (!ieee80211_sdata_running(sdata)) in ieee80211_beacon_cntdwn_is_complete()
5130 link = rcu_dereference(sdata->link[link_id]); in ieee80211_beacon_cntdwn_is_complete()
5141 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_beacon_cntdwn_is_complete()
5150 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in ieee80211_beacon_cntdwn_is_complete()
5181 struct ieee80211_sub_if_data *sdata, in ieee80211_beacon_protect() argument
5203 tx.sdata = sdata; in ieee80211_beacon_protect()
5227 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_beacon_get_finish() local
5258 if (sdata->beacon_rate_set && sdata->beacon_rateidx_mask[band]) in ieee80211_beacon_get_finish()
5259 txrc.rate_idx_mask = sdata->beacon_rateidx_mask[band]; in ieee80211_beacon_get_finish()
5261 txrc.rate_idx_mask = sdata->rc_rateidx_mask[band]; in ieee80211_beacon_get_finish()
5263 rate_control_get_rate(sdata, NULL, &txrc); in ieee80211_beacon_get_finish()
5313 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in __ieee80211_beacon_get_ap() local
5314 struct ieee80211_if_ap *ap = &sdata->u.ap; in __ieee80211_beacon_get_ap()
5323 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in __ieee80211_beacon_get_ap()
5342 ieee80211_beacon_add_tim(sdata, link, &ap->ps, skb, is_template); in __ieee80211_beacon_get_ap()
5361 if (ieee80211_beacon_protect(skb, local, sdata, link) < 0) { in __ieee80211_beacon_get_ap()
5371 static bool ieee80211_s1g_need_long_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_s1g_need_long_beacon() argument
5374 struct ps_data *ps = &sdata->u.ap.ps; in ieee80211_s1g_need_long_beacon()
5393 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_s1g_short_beacon_get() local
5394 struct ieee80211_if_ap *ap = &sdata->u.ap; in ieee80211_s1g_short_beacon_get()
5406 ieee80211_beacon_add_tim(sdata, link, &ap->ps, skb, is_template); in ieee80211_s1g_short_beacon_get()
5424 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_beacon_get_ap() local
5426 if (!sdata->vif.cfg.s1g || !s1g_sb || in ieee80211_beacon_get_ap()
5427 ieee80211_s1g_need_long_beacon(sdata, link)) in ieee80211_beacon_get_ap()
5485 struct ieee80211_sub_if_data *sdata = NULL; in __ieee80211_beacon_get() local
5492 sdata = vif_to_sdata(vif); in __ieee80211_beacon_get()
5493 link = rcu_dereference(sdata->link[link_id]); in __ieee80211_beacon_get()
5499 if (!ieee80211_sdata_running(sdata) || !chanctx_conf) in __ieee80211_beacon_get()
5505 if (sdata->vif.type == NL80211_IFTYPE_AP) { in __ieee80211_beacon_get()
5540 } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { in __ieee80211_beacon_get()
5541 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in __ieee80211_beacon_get()
5552 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in __ieee80211_beacon_get()
5568 } else if (ieee80211_vif_is_mesh(&sdata->vif)) { in __ieee80211_beacon_get()
5569 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in __ieee80211_beacon_get()
5584 ieee80211_set_beacon_cntdwn(sdata, beacon, link); in __ieee80211_beacon_get()
5588 ifmsh->sync_ops->adjust_tsf(sdata, beacon); in __ieee80211_beacon_get()
5599 ieee80211_beacon_add_tim(sdata, link, &ifmsh->ps, skb, in __ieee80211_beacon_get()
5713 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_proberesp_get() local
5715 if (sdata->vif.type != NL80211_IFTYPE_AP) in ieee80211_proberesp_get()
5719 presp = rcu_dereference(sdata->deflink.u.ap.probe_resp); in ieee80211_proberesp_get()
5743 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_get_fils_discovery_tmpl() local
5745 if (sdata->vif.type != NL80211_IFTYPE_AP) in ieee80211_get_fils_discovery_tmpl()
5749 tmpl = rcu_dereference(sdata->deflink.u.ap.fils_discovery); in ieee80211_get_fils_discovery_tmpl()
5755 skb = dev_alloc_skb(sdata->local->hw.extra_tx_headroom + tmpl->len); in ieee80211_get_fils_discovery_tmpl()
5757 skb_reserve(skb, sdata->local->hw.extra_tx_headroom); in ieee80211_get_fils_discovery_tmpl()
5772 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_get_unsol_bcast_probe_resp_tmpl() local
5774 if (sdata->vif.type != NL80211_IFTYPE_AP) in ieee80211_get_unsol_bcast_probe_resp_tmpl()
5778 tmpl = rcu_dereference(sdata->deflink.u.ap.unsol_bcast_probe_resp); in ieee80211_get_unsol_bcast_probe_resp_tmpl()
5784 skb = dev_alloc_skb(sdata->local->hw.extra_tx_headroom + tmpl->len); in ieee80211_get_unsol_bcast_probe_resp_tmpl()
5786 skb_reserve(skb, sdata->local->hw.extra_tx_headroom); in ieee80211_get_unsol_bcast_probe_resp_tmpl()
5798 struct ieee80211_sub_if_data *sdata; in ieee80211_pspoll_get() local
5806 sdata = vif_to_sdata(vif); in ieee80211_pspoll_get()
5807 local = sdata->local; in ieee80211_pspoll_get()
5818 pspoll->aid = cpu_to_le16(sdata->vif.cfg.aid); in ieee80211_pspoll_get()
5823 memcpy(pspoll->bssid, sdata->deflink.u.mgd.bssid, ETH_ALEN); in ieee80211_pspoll_get()
5834 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_nullfunc_get() local
5835 struct ieee80211_local *local = sdata->local; in ieee80211_nullfunc_get()
5853 sta = sta_info_get(sdata, vif->cfg.ap_addr); in ieee80211_nullfunc_get()
5858 link = rcu_dereference(sdata->link[link_id]); in ieee80211_nullfunc_get()
5976 struct ieee80211_sub_if_data *sdata; in ieee80211_get_buffered_bc() local
5981 sdata = vif_to_sdata(vif); in ieee80211_get_buffered_bc()
5984 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_get_buffered_bc()
5989 if (sdata->vif.type == NL80211_IFTYPE_AP) { in ieee80211_get_buffered_bc()
5991 rcu_dereference(sdata->deflink.u.ap.beacon); in ieee80211_get_buffered_bc()
5996 ps = &sdata->u.ap.ps; in ieee80211_get_buffered_bc()
5997 } else if (ieee80211_vif_is_mesh(&sdata->vif)) { in ieee80211_get_buffered_bc()
5998 ps = &sdata->u.mesh.ps; in ieee80211_get_buffered_bc()
6022 if (sdata->vif.type == NL80211_IFTYPE_AP) in ieee80211_get_buffered_bc()
6023 sdata = IEEE80211_DEV_TO_SUB_IF(skb->dev); in ieee80211_get_buffered_bc()
6024 if (!ieee80211_tx_prepare(sdata, &tx, NULL, skb)) in ieee80211_get_buffered_bc()
6046 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_reserve_tid() local
6047 struct ieee80211_local *local = sdata->local; in ieee80211_reserve_tid()
6054 switch (sdata->vif.type) { in ieee80211_reserve_tid()
6073 sdata_err(sdata, "TID reservation already active\n"); in ieee80211_reserve_tid()
6078 ieee80211_stop_vif_queues(sdata->local, sdata, in ieee80211_reserve_tid()
6090 queues = BIT(sdata->vif.hw_queue[ieee802_1d_to_ac[tid]]); in ieee80211_reserve_tid()
6091 __ieee80211_flush_queues(local, sdata, queues, false); in ieee80211_reserve_tid()
6095 ieee80211_wake_vif_queues(local, sdata, in ieee80211_reserve_tid()
6110 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_unreserve_tid() local
6112 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_unreserve_tid()
6115 switch (sdata->vif.type) { in ieee80211_unreserve_tid()
6126 sdata_err(sdata, "TID to unreserve (%d) isn't reserved\n", tid); in ieee80211_unreserve_tid()
6134 void __ieee80211_tx_skb_tid_band(struct ieee80211_sub_if_data *sdata, in __ieee80211_tx_skb_tid_band() argument
6146 skb->dev = sdata->dev; in __ieee80211_tx_skb_tid_band()
6152 if (!ieee80211_vif_is_mld(&sdata->vif)) { in __ieee80211_tx_skb_tid_band()
6156 } else if (memcmp(sdata->vif.addr, hdr->addr2, ETH_ALEN) == 0) { in __ieee80211_tx_skb_tid_band()
6162 for (link = 0; link < ARRAY_SIZE(sdata->vif.link_conf); link++) { in __ieee80211_tx_skb_tid_band()
6165 link_conf = rcu_dereference(sdata->vif.link_conf[link]); in __ieee80211_tx_skb_tid_band()
6173 if (WARN_ON_ONCE(link == ARRAY_SIZE(sdata->vif.link_conf))) in __ieee80211_tx_skb_tid_band()
6174 link = ffs(sdata->vif.active_links) - 1; in __ieee80211_tx_skb_tid_band()
6187 ieee80211_xmit(sdata, NULL, skb); in __ieee80211_tx_skb_tid_band()
6191 void ieee80211_tx_skb_tid(struct ieee80211_sub_if_data *sdata, in ieee80211_tx_skb_tid() argument
6198 if (!ieee80211_vif_is_mld(&sdata->vif)) { in ieee80211_tx_skb_tid()
6201 rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_tx_skb_tid()
6210 !(sdata->vif.active_links & BIT(link_id))); in ieee80211_tx_skb_tid()
6215 __ieee80211_tx_skb_tid_band(sdata, skb, tid, link_id, band); in ieee80211_tx_skb_tid()
6224 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tx_control_port() local
6225 struct ieee80211_local *local = sdata->local; in ieee80211_tx_control_port()
6239 if (proto != sdata->control_port_protocol && in ieee80211_tx_control_port()
6243 if (proto == sdata->control_port_protocol) in ieee80211_tx_control_port()
6271 memcpy(ehdr->h_source, sdata->vif.addr, ETH_ALEN); in ieee80211_tx_control_port()
6279 link_conf = rcu_dereference(sdata->vif.link_conf[link_id]); in ieee80211_tx_control_port()
6304 err = ieee80211_lookup_ra_sta(sdata, skb, &sta); in ieee80211_tx_control_port()
6312 u16 queue = ieee80211_select_queue(sdata, sta, skb); in ieee80211_tx_control_port()
6321 memcpy(ehdr->h_source, sdata->vif.addr, ETH_ALEN); in ieee80211_tx_control_port()
6336 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_probe_mesh_link() local
6337 struct ieee80211_local *local = sdata->local; in ieee80211_probe_mesh_link()