Lines Matching refs:sdata
24 struct ieee80211_sub_if_data *sdata; in ieee80211_tdls_peer_del_work() local
27 sdata = container_of(wk, struct ieee80211_sub_if_data, in ieee80211_tdls_peer_del_work()
29 local = sdata->local; in ieee80211_tdls_peer_del_work()
32 if (!is_zero_ether_addr(sdata->u.mgd.tdls_peer)) { in ieee80211_tdls_peer_del_work()
33 tdls_dbg(sdata, "TDLS del peer %pM\n", sdata->u.mgd.tdls_peer); in ieee80211_tdls_peer_del_work()
34 sta_info_destroy_addr(sdata, sdata->u.mgd.tdls_peer); in ieee80211_tdls_peer_del_work()
35 eth_zero_addr(sdata->u.mgd.tdls_peer); in ieee80211_tdls_peer_del_work()
40 static void ieee80211_tdls_add_ext_capab(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_ext_capab() argument
43 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_add_ext_capab()
44 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_tdls_add_ext_capab()
49 enum ieee80211_band band = ieee80211_get_sdata_band(sdata); in ieee80211_tdls_add_ext_capab()
67 ieee80211_tdls_add_subband(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_subband() argument
75 struct wiphy *wiphy = sdata->local->hw.wiphy; in ieee80211_tdls_add_subband()
81 ch = ieee80211_get_channel(sdata->local->hw.wiphy, i); in ieee80211_tdls_add_subband()
87 sdata->wdev.iftype)) { in ieee80211_tdls_add_subband()
124 ieee80211_tdls_add_supp_channels(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_supp_channels() argument
142 subband_cnt = ieee80211_tdls_add_subband(sdata, skb, 2412, 2472, 5); in ieee80211_tdls_add_supp_channels()
145 subband_cnt += ieee80211_tdls_add_subband(sdata, skb, 5000, 5825, 20); in ieee80211_tdls_add_supp_channels()
151 static void ieee80211_tdls_add_oper_classes(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_oper_classes() argument
157 if (!ieee80211_chandef_to_operating_class(&sdata->vif.bss_conf.chandef, in ieee80211_tdls_add_oper_classes()
179 static u16 ieee80211_get_tdls_sta_capab(struct ieee80211_sub_if_data *sdata, in ieee80211_get_tdls_sta_capab() argument
186 if (ieee80211_get_sdata_band(sdata) == IEEE80211_BAND_2GHZ) { in ieee80211_get_tdls_sta_capab()
194 static void ieee80211_tdls_add_link_ie(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_link_ie() argument
202 init_addr = sdata->vif.addr; in ieee80211_tdls_add_link_ie()
206 rsp_addr = sdata->vif.addr; in ieee80211_tdls_add_link_ie()
214 memcpy(lnkid->bssid, sdata->u.mgd.bssid, ETH_ALEN); in ieee80211_tdls_add_link_ie()
220 ieee80211_tdls_add_aid(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) in ieee80211_tdls_add_aid() argument
222 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_tdls_add_aid()
264 static void ieee80211_tdls_add_wmm_param_ie(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_wmm_param_ie() argument
290 txq = &sdata->tx_conf[ieee80211_ac_from_wmm(i)]; in ieee80211_tdls_add_wmm_param_ie()
299 ieee80211_tdls_chandef_vht_upgrade(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_chandef_vht_upgrade() argument
336 !cfg80211_reg_can_beacon_relax(sdata->local->hw.wiphy, &uc, in ieee80211_tdls_chandef_vht_upgrade()
337 sdata->wdev.iftype)) in ieee80211_tdls_chandef_vht_upgrade()
341 tdls_dbg(sdata, "TDLS ch width upgraded %d -> %d\n", in ieee80211_tdls_chandef_vht_upgrade()
353 ieee80211_tdls_add_setup_start_ies(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_setup_start_ies() argument
358 enum ieee80211_band band = ieee80211_get_sdata_band(sdata); in ieee80211_tdls_add_setup_start_ies()
359 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_add_setup_start_ies()
367 ieee80211_add_srates_ie(sdata, skb, false, band); in ieee80211_tdls_add_setup_start_ies()
368 ieee80211_add_ext_srates_ie(sdata, skb, false, band); in ieee80211_tdls_add_setup_start_ies()
369 ieee80211_tdls_add_supp_channels(sdata, skb); in ieee80211_tdls_add_setup_start_ies()
389 ieee80211_tdls_add_ext_capab(sdata, skb); in ieee80211_tdls_add_setup_start_ies()
423 sta = sta_info_get(sdata, peer); in ieee80211_tdls_add_setup_start_ies()
429 sta->tdls_chandef = sdata->vif.bss_conf.chandef; in ieee80211_tdls_add_setup_start_ies()
432 ieee80211_tdls_add_oper_classes(sdata, skb); in ieee80211_tdls_add_setup_start_ies()
445 ieee80211_apply_htcap_overrides(sdata, &ht_cap); in ieee80211_tdls_add_setup_start_ies()
466 ieee80211_tdls_add_link_ie(sdata, skb, peer, initiator); in ieee80211_tdls_add_setup_start_ies()
497 ieee80211_apply_vhtcap_overrides(sdata, &vht_cap); in ieee80211_tdls_add_setup_start_ies()
501 ieee80211_tdls_add_aid(sdata, skb); in ieee80211_tdls_add_setup_start_ies()
511 ieee80211_tdls_add_aid(sdata, skb); in ieee80211_tdls_add_setup_start_ies()
521 ieee80211_tdls_chandef_vht_upgrade(sdata, sta); in ieee80211_tdls_add_setup_start_ies()
536 ieee80211_tdls_add_setup_cfm_ies(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_setup_cfm_ies() argument
541 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_add_setup_cfm_ies()
542 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_tdls_add_setup_cfm_ies()
545 enum ieee80211_band band = ieee80211_get_sdata_band(sdata); in ieee80211_tdls_add_setup_cfm_ies()
550 sta = sta_info_get(sdata, peer); in ieee80211_tdls_add_setup_cfm_ies()
551 ap_sta = sta_info_get(sdata, ifmgd->bssid); in ieee80211_tdls_add_setup_cfm_ies()
557 sta->tdls_chandef = sdata->vif.bss_conf.chandef; in ieee80211_tdls_add_setup_cfm_ies()
575 ieee80211_tdls_add_wmm_param_ie(sdata, skb); in ieee80211_tdls_add_setup_cfm_ies()
605 &sdata->vif.bss_conf.chandef, prot, in ieee80211_tdls_add_setup_cfm_ies()
609 ieee80211_tdls_add_link_ie(sdata, skb, peer, initiator); in ieee80211_tdls_add_setup_cfm_ies()
618 ieee80211_tdls_chandef_vht_upgrade(sdata, sta); in ieee80211_tdls_add_setup_cfm_ies()
636 ieee80211_tdls_add_chan_switch_req_ies(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_chan_switch_req_ies() argument
667 ieee80211_tdls_add_link_ie(sdata, skb, peer, initiator); in ieee80211_tdls_add_chan_switch_req_ies()
678 ieee80211_tdls_add_chan_switch_resp_ies(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_chan_switch_resp_ies() argument
685 ieee80211_tdls_add_link_ie(sdata, skb, peer, initiator); in ieee80211_tdls_add_chan_switch_resp_ies()
691 static void ieee80211_tdls_add_ies(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_ies() argument
703 ieee80211_tdls_add_setup_start_ies(sdata, skb, peer, in ieee80211_tdls_add_ies()
711 ieee80211_tdls_add_setup_cfm_ies(sdata, skb, peer, in ieee80211_tdls_add_ies()
721 ieee80211_tdls_add_link_ie(sdata, skb, peer, initiator); in ieee80211_tdls_add_ies()
724 ieee80211_tdls_add_chan_switch_req_ies(sdata, skb, peer, in ieee80211_tdls_add_ies()
730 ieee80211_tdls_add_chan_switch_resp_ies(sdata, skb, peer, in ieee80211_tdls_add_ies()
744 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_prep_tdls_encap_data() local
750 memcpy(tf->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_prep_tdls_encap_data()
765 cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata, in ieee80211_prep_tdls_encap_data()
776 cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata, in ieee80211_prep_tdls_encap_data()
826 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_prep_tdls_direct() local
832 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_prep_tdls_direct()
833 memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); in ieee80211_prep_tdls_direct()
847 cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata, in ieee80211_prep_tdls_direct()
858 ieee80211_tdls_build_mgmt_packet_data(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_build_mgmt_packet_data() argument
865 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_build_mgmt_packet_data()
869 skb = netdev_alloc_skb(sdata->dev, in ieee80211_tdls_build_mgmt_packet_data()
900 sdata->dev, peer, in ieee80211_tdls_build_mgmt_packet_data()
905 ret = ieee80211_prep_tdls_direct(local->hw.wiphy, sdata->dev, in ieee80211_tdls_build_mgmt_packet_data()
918 ieee80211_tdls_add_ies(sdata, skb, peer, action_code, status_code, in ieee80211_tdls_build_mgmt_packet_data()
936 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_prep_mgmt_packet() local
943 sta = sta_info_get(sdata, peer); in ieee80211_tdls_prep_mgmt_packet()
988 skb = ieee80211_tdls_build_mgmt_packet_data(sdata, peer, action_code, in ieee80211_tdls_prep_mgmt_packet()
999 ieee80211_tx_skb(sdata, skb); in ieee80211_tdls_prep_mgmt_packet()
1025 ieee80211_hw_check(&sdata->local->hw, REPORTS_TX_ACK_STATUS)) { in ieee80211_tdls_prep_mgmt_packet()
1030 sta = sta_info_get(sdata, peer); in ieee80211_tdls_prep_mgmt_packet()
1034 spin_lock_bh(&sdata->u.mgd.teardown_lock); in ieee80211_tdls_prep_mgmt_packet()
1035 if (try_resend && !sdata->u.mgd.teardown_skb) { in ieee80211_tdls_prep_mgmt_packet()
1047 sdata->u.mgd.teardown_skb = skb_copy(skb, GFP_ATOMIC); in ieee80211_tdls_prep_mgmt_packet()
1048 sdata->u.mgd.orig_teardown_skb = skb; in ieee80211_tdls_prep_mgmt_packet()
1050 spin_unlock_bh(&sdata->u.mgd.teardown_lock); in ieee80211_tdls_prep_mgmt_packet()
1071 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_mgmt_setup() local
1072 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_mgmt_setup()
1073 enum ieee80211_smps_mode smps_mode = sdata->u.mgd.driver_smps_mode; in ieee80211_tdls_mgmt_setup()
1079 tdls_dbg(sdata, "Aborting TDLS setup due to SMPS mode %d\n", in ieee80211_tdls_mgmt_setup()
1087 if (!is_zero_ether_addr(sdata->u.mgd.tdls_peer) && in ieee80211_tdls_mgmt_setup()
1088 !ether_addr_equal(sdata->u.mgd.tdls_peer, peer)) { in ieee80211_tdls_mgmt_setup()
1102 if (!sta_info_get(sdata, peer)) { in ieee80211_tdls_mgmt_setup()
1110 ieee80211_flush_queues(local, sdata, false); in ieee80211_tdls_mgmt_setup()
1111 memcpy(sdata->u.mgd.tdls_peer, peer, ETH_ALEN); in ieee80211_tdls_mgmt_setup()
1122 eth_zero_addr(sdata->u.mgd.tdls_peer); in ieee80211_tdls_mgmt_setup()
1127 ieee80211_queue_delayed_work(&sdata->local->hw, in ieee80211_tdls_mgmt_setup()
1128 &sdata->u.mgd.tdls_peer_del_work, in ieee80211_tdls_mgmt_setup()
1144 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_mgmt_teardown() local
1145 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_mgmt_teardown()
1155 ieee80211_stop_vif_queues(local, sdata, in ieee80211_tdls_mgmt_teardown()
1157 ieee80211_flush_queues(local, sdata, false); in ieee80211_tdls_mgmt_teardown()
1165 sdata_err(sdata, "Failed sending TDLS teardown packet %d\n", in ieee80211_tdls_mgmt_teardown()
1173 sta = sta_info_get(sdata, peer); in ieee80211_tdls_mgmt_teardown()
1178 ieee80211_wake_vif_queues(local, sdata, in ieee80211_tdls_mgmt_teardown()
1190 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_mgmt() local
1197 if (sdata->vif.type != NL80211_IFTYPE_STATION || in ieee80211_tdls_mgmt()
1198 !sdata->u.mgd.associated) in ieee80211_tdls_mgmt()
1222 drv_mgd_protect_tdls_discover(sdata->local, sdata); in ieee80211_tdls_mgmt()
1240 tdls_dbg(sdata, "TDLS mgmt action %d peer %pM status %d\n", in ieee80211_tdls_mgmt()
1245 static void iee80211_tdls_recalc_chanctx(struct ieee80211_sub_if_data *sdata) in iee80211_tdls_recalc_chanctx() argument
1247 struct ieee80211_local *local = sdata->local; in iee80211_tdls_recalc_chanctx()
1252 conf = rcu_dereference_protected(sdata->vif.chanctx_conf, in iee80211_tdls_recalc_chanctx()
1261 static int iee80211_tdls_have_ht_peers(struct ieee80211_sub_if_data *sdata) in iee80211_tdls_have_ht_peers() argument
1267 list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) { in iee80211_tdls_have_ht_peers()
1268 if (!sta->sta.tdls || sta->sdata != sdata || !sta->uploaded || in iee80211_tdls_have_ht_peers()
1282 iee80211_tdls_recalc_ht_protection(struct ieee80211_sub_if_data *sdata, in iee80211_tdls_recalc_ht_protection() argument
1285 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in iee80211_tdls_recalc_ht_protection()
1297 iee80211_tdls_have_ht_peers(sdata); in iee80211_tdls_recalc_ht_protection()
1299 opmode = sdata->vif.bss_conf.ht_operation_mode; in iee80211_tdls_recalc_ht_protection()
1306 if (opmode == sdata->vif.bss_conf.ht_operation_mode) in iee80211_tdls_recalc_ht_protection()
1309 sdata->vif.bss_conf.ht_operation_mode = opmode; in iee80211_tdls_recalc_ht_protection()
1310 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_HT); in iee80211_tdls_recalc_ht_protection()
1317 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_oper() local
1318 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_oper()
1324 if (sdata->vif.type != NL80211_IFTYPE_STATION) in ieee80211_tdls_oper()
1341 sdata_lock(sdata); in ieee80211_tdls_oper()
1343 tdls_dbg(sdata, "TDLS oper %d peer %pM\n", oper, peer); in ieee80211_tdls_oper()
1347 if (sdata->vif.csa_active) { in ieee80211_tdls_oper()
1348 tdls_dbg(sdata, "TDLS: disallow link during CSA\n"); in ieee80211_tdls_oper()
1353 iee80211_tdls_recalc_chanctx(sdata); in ieee80211_tdls_oper()
1356 sta = sta_info_get(sdata, peer); in ieee80211_tdls_oper()
1363 iee80211_tdls_recalc_ht_protection(sdata, sta); in ieee80211_tdls_oper()
1368 WARN_ON_ONCE(is_zero_ether_addr(sdata->u.mgd.tdls_peer) || in ieee80211_tdls_oper()
1369 !ether_addr_equal(sdata->u.mgd.tdls_peer, peer)); in ieee80211_tdls_oper()
1385 ieee80211_flush_queues(local, sdata, false); in ieee80211_tdls_oper()
1387 ret = sta_info_destroy_addr(sdata, peer); in ieee80211_tdls_oper()
1390 iee80211_tdls_recalc_ht_protection(sdata, NULL); in ieee80211_tdls_oper()
1393 iee80211_tdls_recalc_chanctx(sdata); in ieee80211_tdls_oper()
1400 if (ret == 0 && ether_addr_equal(sdata->u.mgd.tdls_peer, peer)) { in ieee80211_tdls_oper()
1401 cancel_delayed_work(&sdata->u.mgd.tdls_peer_del_work); in ieee80211_tdls_oper()
1402 eth_zero_addr(sdata->u.mgd.tdls_peer); in ieee80211_tdls_oper()
1406 ieee80211_queue_work(&sdata->local->hw, in ieee80211_tdls_oper()
1407 &sdata->u.mgd.request_smps_work); in ieee80211_tdls_oper()
1410 sdata_unlock(sdata); in ieee80211_tdls_oper()
1418 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_tdls_oper_request() local
1421 sdata_err(sdata, "Discarding TDLS oper %d - not STA or disconnected\n", in ieee80211_tdls_oper_request()
1426 cfg80211_tdls_oper_request(sdata->dev, peer, oper, reason_code, gfp); in ieee80211_tdls_oper_request()
1466 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_tdls_ch_sw_tmpl_get() local
1498 skb = ieee80211_tdls_build_mgmt_packet_data(sdata, sta->sta.addr, in ieee80211_tdls_ch_sw_tmpl_get()
1506 skb = ieee80211_build_data_template(sdata, skb, 0); in ieee80211_tdls_ch_sw_tmpl_get()
1508 tdls_dbg(sdata, "Failed building TDLS channel switch frame\n"); in ieee80211_tdls_ch_sw_tmpl_get()
1516 tdls_dbg(sdata, "No switch timing IE in TDLS switch\n"); in ieee80211_tdls_ch_sw_tmpl_get()
1524 tdls_dbg(sdata, in ieee80211_tdls_ch_sw_tmpl_get()
1535 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_channel_switch() local
1536 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_channel_switch()
1543 sta = sta_info_get(sdata, addr); in ieee80211_tdls_channel_switch()
1545 tdls_dbg(sdata, in ieee80211_tdls_channel_switch()
1553 tdls_dbg(sdata, "TDLS channel switch unsupported by %pM\n", in ieee80211_tdls_channel_switch()
1566 ret = drv_tdls_channel_switch(local, sdata, &sta->sta, oper_class, in ieee80211_tdls_channel_switch()
1582 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_cancel_channel_switch() local
1583 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_cancel_channel_switch()
1587 sta = sta_info_get(sdata, addr); in ieee80211_tdls_cancel_channel_switch()
1589 tdls_dbg(sdata, in ieee80211_tdls_cancel_channel_switch()
1596 tdls_dbg(sdata, "TDLS channel switch not initiated by %pM\n", in ieee80211_tdls_cancel_channel_switch()
1601 drv_tdls_cancel_channel_switch(local, sdata, &sta->sta); in ieee80211_tdls_cancel_channel_switch()
1612 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_tdls_ch_sw_resp_tmpl_get() local
1619 skb = ieee80211_tdls_build_mgmt_packet_data(sdata, sta->sta.addr, in ieee80211_tdls_ch_sw_resp_tmpl_get()
1626 skb = ieee80211_build_data_template(sdata, skb, 0); in ieee80211_tdls_ch_sw_resp_tmpl_get()
1628 tdls_dbg(sdata, in ieee80211_tdls_ch_sw_resp_tmpl_get()
1637 tdls_dbg(sdata, in ieee80211_tdls_ch_sw_resp_tmpl_get()
1646 tdls_dbg(sdata, "TDLS get channel switch response template for %pM\n", in ieee80211_tdls_ch_sw_resp_tmpl_get()
1652 ieee80211_process_tdls_channel_switch_resp(struct ieee80211_sub_if_data *sdata, in ieee80211_process_tdls_channel_switch_resp() argument
1655 struct ieee80211_local *local = sdata->local; in ieee80211_process_tdls_channel_switch_resp()
1669 tdls_dbg(sdata, "TDLS channel switch resp too short: %d\n", in ieee80211_process_tdls_channel_switch_resp()
1675 sta = sta_info_get(sdata, tf->sa); in ieee80211_process_tdls_channel_switch_resp()
1677 tdls_dbg(sdata, "TDLS chan switch from non-peer sta %pM\n", in ieee80211_process_tdls_channel_switch_resp()
1693 tdls_dbg(sdata, "Invalid IEs in TDLS channel switch resp\n"); in ieee80211_process_tdls_channel_switch_resp()
1699 tdls_dbg(sdata, "TDLS channel switch resp - missing IEs\n"); in ieee80211_process_tdls_channel_switch_resp()
1706 !memcmp(elems.lnk_id->init_sta, sdata->vif.addr, ETH_ALEN); in ieee80211_process_tdls_channel_switch_resp()
1708 tdls_dbg(sdata, "TDLS chan switch invalid lnk-id initiator\n"); in ieee80211_process_tdls_channel_switch_resp()
1724 drv_tdls_recv_channel_switch(sdata->local, sdata, ¶ms); in ieee80211_process_tdls_channel_switch_resp()
1726 tdls_dbg(sdata, in ieee80211_process_tdls_channel_switch_resp()
1737 ieee80211_process_tdls_channel_switch_req(struct ieee80211_sub_if_data *sdata, in ieee80211_process_tdls_channel_switch_req() argument
1740 struct ieee80211_local *local = sdata->local; in ieee80211_process_tdls_channel_switch_req()
1760 tdls_dbg(sdata, "TDLS channel switch req too short: %d\n", in ieee80211_process_tdls_channel_switch_req()
1788 tdls_dbg(sdata, "Invalid channel in TDLS chan switch: %d\n", in ieee80211_process_tdls_channel_switch_req()
1793 chan = ieee80211_get_channel(sdata->local->hw.wiphy, freq); in ieee80211_process_tdls_channel_switch_req()
1795 tdls_dbg(sdata, in ieee80211_process_tdls_channel_switch_req()
1804 tdls_dbg(sdata, "Invalid IEs in TDLS channel switch req\n"); in ieee80211_process_tdls_channel_switch_req()
1809 tdls_dbg(sdata, "TDLS channel switch req - missing IEs\n"); in ieee80211_process_tdls_channel_switch_req()
1832 if (!cfg80211_reg_can_beacon_relax(sdata->local->hw.wiphy, &chandef, in ieee80211_process_tdls_channel_switch_req()
1833 sdata->wdev.iftype)) { in ieee80211_process_tdls_channel_switch_req()
1834 tdls_dbg(sdata, "TDLS chan switch to forbidden channel\n"); in ieee80211_process_tdls_channel_switch_req()
1839 sta = sta_info_get(sdata, tf->sa); in ieee80211_process_tdls_channel_switch_req()
1841 tdls_dbg(sdata, "TDLS chan switch from non-peer sta %pM\n", in ieee80211_process_tdls_channel_switch_req()
1851 !memcmp(elems.lnk_id->init_sta, sdata->vif.addr, ETH_ALEN); in ieee80211_process_tdls_channel_switch_req()
1853 tdls_dbg(sdata, "TDLS chan switch invalid lnk-id initiator\n"); in ieee80211_process_tdls_channel_switch_req()
1861 tdls_dbg(sdata, "TDLS chan switch - wide chan unsupported\n"); in ieee80211_process_tdls_channel_switch_req()
1878 drv_tdls_recv_channel_switch(sdata->local, sdata, ¶ms); in ieee80211_process_tdls_channel_switch_req()
1880 tdls_dbg(sdata, in ieee80211_process_tdls_channel_switch_req()
1891 ieee80211_process_tdls_channel_switch(struct ieee80211_sub_if_data *sdata, in ieee80211_process_tdls_channel_switch() argument
1895 struct wiphy *wiphy = sdata->local->hw.wiphy; in ieee80211_process_tdls_channel_switch()
1912 ieee80211_process_tdls_channel_switch_req(sdata, skb); in ieee80211_process_tdls_channel_switch()
1915 ieee80211_process_tdls_channel_switch_resp(sdata, skb); in ieee80211_process_tdls_channel_switch()
1923 void ieee80211_teardown_tdls_peers(struct ieee80211_sub_if_data *sdata) in ieee80211_teardown_tdls_peers() argument
1929 list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) { in ieee80211_teardown_tdls_peers()
1930 if (!sta->sta.tdls || sta->sdata != sdata || !sta->uploaded || in ieee80211_teardown_tdls_peers()
1934 ieee80211_tdls_oper_request(&sdata->vif, sta->sta.addr, in ieee80211_teardown_tdls_peers()
1945 struct ieee80211_sub_if_data *sdata; in ieee80211_tdls_chsw_work() local
1952 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_tdls_chsw_work()
1953 if (!ieee80211_sdata_running(sdata) || in ieee80211_tdls_chsw_work()
1954 sdata->vif.type != NL80211_IFTYPE_STATION || in ieee80211_tdls_chsw_work()
1955 !ether_addr_equal(tf->da, sdata->vif.addr)) in ieee80211_tdls_chsw_work()
1958 ieee80211_process_tdls_channel_switch(sdata, skb); in ieee80211_tdls_chsw_work()