Lines Matching refs:sdata

15 	struct ieee80211_sub_if_data *sdata;  in ieee80211_chanctx_num_assigned()  local
20 list_for_each_entry(sdata, &ctx->assigned_vifs, assigned_chanctx_list) in ieee80211_chanctx_num_assigned()
29 struct ieee80211_sub_if_data *sdata; in ieee80211_chanctx_num_reserved() local
34 list_for_each_entry(sdata, &ctx->reserved_vifs, reserved_chanctx_list) in ieee80211_chanctx_num_reserved()
67 ieee80211_vif_get_chanctx(struct ieee80211_sub_if_data *sdata) in ieee80211_vif_get_chanctx() argument
69 struct ieee80211_local *local __maybe_unused = sdata->local; in ieee80211_vif_get_chanctx()
72 conf = rcu_dereference_protected(sdata->vif.chanctx_conf, in ieee80211_vif_get_chanctx()
85 struct ieee80211_sub_if_data *sdata; in ieee80211_chanctx_reserved_chandef() local
89 list_for_each_entry(sdata, &ctx->reserved_vifs, in ieee80211_chanctx_reserved_chandef()
92 compat = &sdata->reserved_chandef; in ieee80211_chanctx_reserved_chandef()
94 compat = cfg80211_chandef_compatible(&sdata->reserved_chandef, in ieee80211_chanctx_reserved_chandef()
108 struct ieee80211_sub_if_data *sdata; in ieee80211_chanctx_non_reserved_chandef() local
112 list_for_each_entry(sdata, &ctx->assigned_vifs, in ieee80211_chanctx_non_reserved_chandef()
114 if (sdata->reserved_chanctx != NULL) in ieee80211_chanctx_non_reserved_chandef()
118 compat = &sdata->vif.bss_conf.chandef; in ieee80211_chanctx_non_reserved_chandef()
121 &sdata->vif.bss_conf.chandef, compat); in ieee80211_chanctx_non_reserved_chandef()
223 ieee80211_get_max_required_bw(struct ieee80211_sub_if_data *sdata) in ieee80211_get_max_required_bw() argument
229 list_for_each_entry_rcu(sta, &sdata->local->sta_list, list) { in ieee80211_get_max_required_bw()
230 if (sdata != sta->sdata && in ieee80211_get_max_required_bw()
231 !(sta->sdata->bss && sta->sdata->bss == sdata->bss)) in ieee80211_get_max_required_bw()
248 struct ieee80211_sub_if_data *sdata; in ieee80211_get_chanctx_max_required_bw() local
252 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in ieee80211_get_chanctx_max_required_bw()
253 struct ieee80211_vif *vif = &sdata->vif; in ieee80211_get_chanctx_max_required_bw()
256 if (!ieee80211_sdata_running(sdata)) in ieee80211_get_chanctx_max_required_bw()
259 if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf) in ieee80211_get_chanctx_max_required_bw()
265 width = ieee80211_get_max_required_bw(sdata); in ieee80211_get_chanctx_max_required_bw()
274 ieee80211_get_max_required_bw(sdata)); in ieee80211_get_chanctx_max_required_bw()
295 sdata = rcu_dereference(local->monitor_sdata); in ieee80211_get_chanctx_max_required_bw()
296 if (sdata && rcu_access_pointer(sdata->vif.chanctx_conf) == conf) in ieee80211_get_chanctx_max_required_bw()
401 struct ieee80211_sub_if_data *sdata; in ieee80211_is_radar_required() local
406 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in ieee80211_is_radar_required()
407 if (sdata->radar_required) { in ieee80211_is_radar_required()
422 struct ieee80211_sub_if_data *sdata; in ieee80211_chanctx_radar_required() local
429 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in ieee80211_chanctx_radar_required()
430 if (!ieee80211_sdata_running(sdata)) in ieee80211_chanctx_radar_required()
432 if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf) in ieee80211_chanctx_radar_required()
434 if (!sdata->radar_required) in ieee80211_chanctx_radar_required()
569 struct ieee80211_sub_if_data *sdata; in ieee80211_recalc_chanctx_chantype() local
576 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in ieee80211_recalc_chanctx_chantype()
578 if (!ieee80211_sdata_running(sdata)) in ieee80211_recalc_chanctx_chantype()
580 if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf) in ieee80211_recalc_chanctx_chantype()
582 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) in ieee80211_recalc_chanctx_chantype()
586 compat = &sdata->vif.bss_conf.chandef; in ieee80211_recalc_chanctx_chantype()
589 &sdata->vif.bss_conf.chandef, compat); in ieee80211_recalc_chanctx_chantype()
639 static int ieee80211_assign_vif_chanctx(struct ieee80211_sub_if_data *sdata, in ieee80211_assign_vif_chanctx() argument
642 struct ieee80211_local *local = sdata->local; in ieee80211_assign_vif_chanctx()
647 conf = rcu_dereference_protected(sdata->vif.chanctx_conf, in ieee80211_assign_vif_chanctx()
653 drv_unassign_vif_chanctx(local, sdata, curr_ctx); in ieee80211_assign_vif_chanctx()
655 list_del(&sdata->assigned_chanctx_list); in ieee80211_assign_vif_chanctx()
659 ret = drv_assign_vif_chanctx(local, sdata, new_ctx); in ieee80211_assign_vif_chanctx()
664 list_add(&sdata->assigned_chanctx_list, in ieee80211_assign_vif_chanctx()
669 rcu_assign_pointer(sdata->vif.chanctx_conf, conf); in ieee80211_assign_vif_chanctx()
671 sdata->vif.bss_conf.idle = !conf; in ieee80211_assign_vif_chanctx()
681 ieee80211_recalc_txpower(sdata, false); in ieee80211_assign_vif_chanctx()
685 if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE && in ieee80211_assign_vif_chanctx()
686 sdata->vif.type != NL80211_IFTYPE_MONITOR) in ieee80211_assign_vif_chanctx()
687 ieee80211_bss_info_change_notify(sdata, in ieee80211_assign_vif_chanctx()
690 ieee80211_check_fast_xmit_iface(sdata); in ieee80211_assign_vif_chanctx()
698 struct ieee80211_sub_if_data *sdata; in ieee80211_recalc_smps_chanctx() local
707 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in ieee80211_recalc_smps_chanctx()
710 if (!ieee80211_sdata_running(sdata)) in ieee80211_recalc_smps_chanctx()
713 if (rcu_access_pointer(sdata->vif.chanctx_conf) != in ieee80211_recalc_smps_chanctx()
717 switch (sdata->vif.type) { in ieee80211_recalc_smps_chanctx()
721 if (!sdata->u.mgd.associated) in ieee80211_recalc_smps_chanctx()
736 switch (sdata->smps_mode) { in ieee80211_recalc_smps_chanctx()
739 sdata->smps_mode); in ieee80211_recalc_smps_chanctx()
742 needed_static = sdata->needed_rx_chains; in ieee80211_recalc_smps_chanctx()
743 needed_dynamic = sdata->needed_rx_chains; in ieee80211_recalc_smps_chanctx()
747 needed_dynamic = sdata->needed_rx_chains; in ieee80211_recalc_smps_chanctx()
760 sdata = rcu_dereference(local->monitor_sdata); in ieee80211_recalc_smps_chanctx()
761 if (sdata && in ieee80211_recalc_smps_chanctx()
762 rcu_access_pointer(sdata->vif.chanctx_conf) == &chanctx->conf) in ieee80211_recalc_smps_chanctx()
787 __ieee80211_vif_copy_chanctx_to_vlans(struct ieee80211_sub_if_data *sdata, in __ieee80211_vif_copy_chanctx_to_vlans() argument
790 struct ieee80211_local *local __maybe_unused = sdata->local; in __ieee80211_vif_copy_chanctx_to_vlans()
794 if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_AP)) in __ieee80211_vif_copy_chanctx_to_vlans()
805 conf = rcu_dereference_protected(sdata->vif.chanctx_conf, in __ieee80211_vif_copy_chanctx_to_vlans()
812 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) in __ieee80211_vif_copy_chanctx_to_vlans()
816 void ieee80211_vif_copy_chanctx_to_vlans(struct ieee80211_sub_if_data *sdata, in ieee80211_vif_copy_chanctx_to_vlans() argument
819 struct ieee80211_local *local = sdata->local; in ieee80211_vif_copy_chanctx_to_vlans()
823 __ieee80211_vif_copy_chanctx_to_vlans(sdata, clear); in ieee80211_vif_copy_chanctx_to_vlans()
828 int ieee80211_vif_unreserve_chanctx(struct ieee80211_sub_if_data *sdata) in ieee80211_vif_unreserve_chanctx() argument
830 struct ieee80211_chanctx *ctx = sdata->reserved_chanctx; in ieee80211_vif_unreserve_chanctx()
832 lockdep_assert_held(&sdata->local->chanctx_mtx); in ieee80211_vif_unreserve_chanctx()
837 list_del(&sdata->reserved_chanctx_list); in ieee80211_vif_unreserve_chanctx()
838 sdata->reserved_chanctx = NULL; in ieee80211_vif_unreserve_chanctx()
840 if (ieee80211_chanctx_refcount(sdata->local, ctx) == 0) { in ieee80211_vif_unreserve_chanctx()
856 ieee80211_free_chanctx(sdata->local, ctx); in ieee80211_vif_unreserve_chanctx()
863 int ieee80211_vif_reserve_chanctx(struct ieee80211_sub_if_data *sdata, in ieee80211_vif_reserve_chanctx() argument
868 struct ieee80211_local *local = sdata->local; in ieee80211_vif_reserve_chanctx()
873 curr_ctx = ieee80211_vif_get_chanctx(sdata); in ieee80211_vif_reserve_chanctx()
950 list_add(&sdata->reserved_chanctx_list, &new_ctx->reserved_vifs); in ieee80211_vif_reserve_chanctx()
951 sdata->reserved_chanctx = new_ctx; in ieee80211_vif_reserve_chanctx()
952 sdata->reserved_chandef = *chandef; in ieee80211_vif_reserve_chanctx()
953 sdata->reserved_radar_required = radar_required; in ieee80211_vif_reserve_chanctx()
954 sdata->reserved_ready = false; in ieee80211_vif_reserve_chanctx()
960 ieee80211_vif_chanctx_reservation_complete(struct ieee80211_sub_if_data *sdata) in ieee80211_vif_chanctx_reservation_complete() argument
962 switch (sdata->vif.type) { in ieee80211_vif_chanctx_reservation_complete()
967 ieee80211_queue_work(&sdata->local->hw, in ieee80211_vif_chanctx_reservation_complete()
968 &sdata->csa_finalize_work); in ieee80211_vif_chanctx_reservation_complete()
971 ieee80211_queue_work(&sdata->local->hw, in ieee80211_vif_chanctx_reservation_complete()
972 &sdata->u.mgd.chswitch_work); in ieee80211_vif_chanctx_reservation_complete()
988 ieee80211_vif_update_chandef(struct ieee80211_sub_if_data *sdata, in ieee80211_vif_update_chandef() argument
993 sdata->vif.bss_conf.chandef = *chandef; in ieee80211_vif_update_chandef()
995 if (sdata->vif.type != NL80211_IFTYPE_AP) in ieee80211_vif_update_chandef()
998 list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) in ieee80211_vif_update_chandef()
1003 ieee80211_vif_use_reserved_reassign(struct ieee80211_sub_if_data *sdata) in ieee80211_vif_use_reserved_reassign() argument
1005 struct ieee80211_local *local = sdata->local; in ieee80211_vif_use_reserved_reassign()
1015 new_ctx = sdata->reserved_chanctx; in ieee80211_vif_use_reserved_reassign()
1016 old_ctx = ieee80211_vif_get_chanctx(sdata); in ieee80211_vif_use_reserved_reassign()
1018 if (WARN_ON(!sdata->reserved_ready)) in ieee80211_vif_use_reserved_reassign()
1032 &sdata->reserved_chandef); in ieee80211_vif_use_reserved_reassign()
1038 vif_chsw[0].vif = &sdata->vif; in ieee80211_vif_use_reserved_reassign()
1042 list_del(&sdata->reserved_chanctx_list); in ieee80211_vif_use_reserved_reassign()
1043 sdata->reserved_chanctx = NULL; in ieee80211_vif_use_reserved_reassign()
1054 list_move(&sdata->assigned_chanctx_list, &new_ctx->assigned_vifs); in ieee80211_vif_use_reserved_reassign()
1055 rcu_assign_pointer(sdata->vif.chanctx_conf, &new_ctx->conf); in ieee80211_vif_use_reserved_reassign()
1057 if (sdata->vif.type == NL80211_IFTYPE_AP) in ieee80211_vif_use_reserved_reassign()
1058 __ieee80211_vif_copy_chanctx_to_vlans(sdata, false); in ieee80211_vif_use_reserved_reassign()
1060 ieee80211_check_fast_xmit_iface(sdata); in ieee80211_vif_use_reserved_reassign()
1065 if (sdata->vif.bss_conf.chandef.width != sdata->reserved_chandef.width) in ieee80211_vif_use_reserved_reassign()
1068 ieee80211_vif_update_chandef(sdata, &sdata->reserved_chandef); in ieee80211_vif_use_reserved_reassign()
1075 ieee80211_bss_info_change_notify(sdata, changed); in ieee80211_vif_use_reserved_reassign()
1078 ieee80211_vif_chanctx_reservation_complete(sdata); in ieee80211_vif_use_reserved_reassign()
1083 ieee80211_vif_use_reserved_assign(struct ieee80211_sub_if_data *sdata) in ieee80211_vif_use_reserved_assign() argument
1085 struct ieee80211_local *local = sdata->local; in ieee80211_vif_use_reserved_assign()
1090 old_ctx = ieee80211_vif_get_chanctx(sdata); in ieee80211_vif_use_reserved_assign()
1091 new_ctx = sdata->reserved_chanctx; in ieee80211_vif_use_reserved_assign()
1093 if (WARN_ON(!sdata->reserved_ready)) in ieee80211_vif_use_reserved_assign()
1107 &sdata->reserved_chandef); in ieee80211_vif_use_reserved_assign()
1113 list_del(&sdata->reserved_chanctx_list); in ieee80211_vif_use_reserved_assign()
1114 sdata->reserved_chanctx = NULL; in ieee80211_vif_use_reserved_assign()
1116 err = ieee80211_assign_vif_chanctx(sdata, new_ctx); in ieee80211_vif_use_reserved_assign()
1125 ieee80211_vif_chanctx_reservation_complete(sdata); in ieee80211_vif_use_reserved_assign()
1130 ieee80211_vif_has_in_place_reservation(struct ieee80211_sub_if_data *sdata) in ieee80211_vif_has_in_place_reservation() argument
1134 lockdep_assert_held(&sdata->local->chanctx_mtx); in ieee80211_vif_has_in_place_reservation()
1136 new_ctx = sdata->reserved_chanctx; in ieee80211_vif_has_in_place_reservation()
1137 old_ctx = ieee80211_vif_get_chanctx(sdata); in ieee80211_vif_has_in_place_reservation()
1177 struct ieee80211_sub_if_data *sdata; in ieee80211_chsw_switch_vifs() local
1198 list_for_each_entry(sdata, &ctx->reserved_vifs, in ieee80211_chsw_switch_vifs()
1201 sdata)) in ieee80211_chsw_switch_vifs()
1204 old_ctx = ieee80211_vif_get_chanctx(sdata); in ieee80211_chsw_switch_vifs()
1205 vif_chsw[i].vif = &sdata->vif; in ieee80211_chsw_switch_vifs()
1262 struct ieee80211_sub_if_data *sdata, *sdata_tmp; in ieee80211_vif_use_reserved_switch() local
1305 list_for_each_entry(sdata, &ctx->replace_ctx->assigned_vifs, in ieee80211_vif_use_reserved_switch()
1308 if (sdata->reserved_chanctx) { in ieee80211_vif_use_reserved_switch()
1310 if (sdata->reserved_ready) in ieee80211_vif_use_reserved_switch()
1327 list_for_each_entry(sdata, &ctx->reserved_vifs, in ieee80211_vif_use_reserved_switch()
1329 if (ieee80211_vif_has_in_place_reservation(sdata) && in ieee80211_vif_use_reserved_switch()
1330 !sdata->reserved_ready) in ieee80211_vif_use_reserved_switch()
1333 old_ctx = ieee80211_vif_get_chanctx(sdata); in ieee80211_vif_use_reserved_switch()
1344 if (sdata->reserved_radar_required) in ieee80211_vif_use_reserved_switch()
1397 list_for_each_entry(sdata, &ctx->reserved_vifs, in ieee80211_vif_use_reserved_switch()
1401 if (!ieee80211_vif_has_in_place_reservation(sdata)) in ieee80211_vif_use_reserved_switch()
1404 rcu_assign_pointer(sdata->vif.chanctx_conf, &ctx->conf); in ieee80211_vif_use_reserved_switch()
1406 if (sdata->vif.type == NL80211_IFTYPE_AP) in ieee80211_vif_use_reserved_switch()
1407 __ieee80211_vif_copy_chanctx_to_vlans(sdata, in ieee80211_vif_use_reserved_switch()
1410 ieee80211_check_fast_xmit_iface(sdata); in ieee80211_vif_use_reserved_switch()
1412 sdata->radar_required = sdata->reserved_radar_required; in ieee80211_vif_use_reserved_switch()
1414 if (sdata->vif.bss_conf.chandef.width != in ieee80211_vif_use_reserved_switch()
1415 sdata->reserved_chandef.width) in ieee80211_vif_use_reserved_switch()
1418 ieee80211_vif_update_chandef(sdata, &sdata->reserved_chandef); in ieee80211_vif_use_reserved_switch()
1420 ieee80211_bss_info_change_notify(sdata, in ieee80211_vif_use_reserved_switch()
1423 ieee80211_recalc_txpower(sdata, false); in ieee80211_vif_use_reserved_switch()
1431 list_for_each_entry_safe(sdata, sdata_tmp, &ctx->reserved_vifs, in ieee80211_vif_use_reserved_switch()
1433 if (ieee80211_vif_get_chanctx(sdata) != ctx) in ieee80211_vif_use_reserved_switch()
1436 list_del(&sdata->reserved_chanctx_list); in ieee80211_vif_use_reserved_switch()
1437 list_move(&sdata->assigned_chanctx_list, in ieee80211_vif_use_reserved_switch()
1439 sdata->reserved_chanctx = NULL; in ieee80211_vif_use_reserved_switch()
1441 ieee80211_vif_chanctx_reservation_complete(sdata); in ieee80211_vif_use_reserved_switch()
1451 list_for_each_entry_safe(sdata, sdata_tmp, &ctx->reserved_vifs, in ieee80211_vif_use_reserved_switch()
1454 sdata))) in ieee80211_vif_use_reserved_switch()
1457 if (WARN_ON(sdata->reserved_chanctx != ctx)) in ieee80211_vif_use_reserved_switch()
1460 if (!sdata->reserved_ready) in ieee80211_vif_use_reserved_switch()
1463 if (ieee80211_vif_get_chanctx(sdata)) in ieee80211_vif_use_reserved_switch()
1465 sdata); in ieee80211_vif_use_reserved_switch()
1467 err = ieee80211_vif_use_reserved_assign(sdata); in ieee80211_vif_use_reserved_switch()
1470 sdata_info(sdata, in ieee80211_vif_use_reserved_switch()
1473 ieee80211_vif_unreserve_chanctx(sdata); in ieee80211_vif_use_reserved_switch()
1475 &sdata->wdev, in ieee80211_vif_use_reserved_switch()
1504 list_for_each_entry_safe(sdata, sdata_tmp, &ctx->reserved_vifs, in ieee80211_vif_use_reserved_switch()
1506 ieee80211_vif_unreserve_chanctx(sdata); in ieee80211_vif_use_reserved_switch()
1507 ieee80211_vif_chanctx_reservation_complete(sdata); in ieee80211_vif_use_reserved_switch()
1514 static void __ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata) in __ieee80211_vif_release_channel() argument
1516 struct ieee80211_local *local = sdata->local; in __ieee80211_vif_release_channel()
1523 conf = rcu_dereference_protected(sdata->vif.chanctx_conf, in __ieee80211_vif_release_channel()
1530 if (sdata->reserved_chanctx) { in __ieee80211_vif_release_channel()
1531 if (sdata->reserved_chanctx->replace_state == in __ieee80211_vif_release_channel()
1534 sdata->reserved_chanctx) > 1) in __ieee80211_vif_release_channel()
1537 ieee80211_vif_unreserve_chanctx(sdata); in __ieee80211_vif_release_channel()
1540 ieee80211_assign_vif_chanctx(sdata, NULL); in __ieee80211_vif_release_channel()
1544 sdata->radar_required = false; in __ieee80211_vif_release_channel()
1551 int ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata, in ieee80211_vif_use_channel() argument
1555 struct ieee80211_local *local = sdata->local; in ieee80211_vif_use_channel()
1562 WARN_ON(sdata->dev && netif_carrier_ok(sdata->dev)); in ieee80211_vif_use_channel()
1568 sdata->wdev.iftype); in ieee80211_vif_use_channel()
1574 sdata->radar_required = ret; in ieee80211_vif_use_channel()
1576 ret = ieee80211_check_combinations(sdata, chandef, mode, in ieee80211_vif_use_channel()
1581 __ieee80211_vif_release_channel(sdata); in ieee80211_vif_use_channel()
1591 ieee80211_vif_update_chandef(sdata, chandef); in ieee80211_vif_use_channel()
1593 ret = ieee80211_assign_vif_chanctx(sdata, ctx); in ieee80211_vif_use_channel()
1605 sdata->radar_required = false; in ieee80211_vif_use_channel()
1611 int ieee80211_vif_use_reserved_context(struct ieee80211_sub_if_data *sdata) in ieee80211_vif_use_reserved_context() argument
1613 struct ieee80211_local *local = sdata->local; in ieee80211_vif_use_reserved_context()
1621 new_ctx = sdata->reserved_chanctx; in ieee80211_vif_use_reserved_context()
1622 old_ctx = ieee80211_vif_get_chanctx(sdata); in ieee80211_vif_use_reserved_context()
1631 if (WARN_ON(sdata->reserved_ready)) in ieee80211_vif_use_reserved_context()
1634 sdata->reserved_ready = true; in ieee80211_vif_use_reserved_context()
1638 err = ieee80211_vif_use_reserved_reassign(sdata); in ieee80211_vif_use_reserved_context()
1640 err = ieee80211_vif_use_reserved_assign(sdata); in ieee80211_vif_use_reserved_context()
1675 int ieee80211_vif_change_bandwidth(struct ieee80211_sub_if_data *sdata, in ieee80211_vif_change_bandwidth() argument
1679 struct ieee80211_local *local = sdata->local; in ieee80211_vif_change_bandwidth()
1685 if (!cfg80211_chandef_usable(sdata->local->hw.wiphy, chandef, in ieee80211_vif_change_bandwidth()
1690 if (cfg80211_chandef_identical(chandef, &sdata->vif.bss_conf.chandef)) { in ieee80211_vif_change_bandwidth()
1696 sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20_NOHT) { in ieee80211_vif_change_bandwidth()
1701 conf = rcu_dereference_protected(sdata->vif.chanctx_conf, in ieee80211_vif_change_bandwidth()
1736 ieee80211_vif_update_chandef(sdata, chandef); in ieee80211_vif_change_bandwidth()
1747 void ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata) in ieee80211_vif_release_channel() argument
1749 WARN_ON(sdata->dev && netif_carrier_ok(sdata->dev)); in ieee80211_vif_release_channel()
1751 lockdep_assert_held(&sdata->local->mtx); in ieee80211_vif_release_channel()
1753 mutex_lock(&sdata->local->chanctx_mtx); in ieee80211_vif_release_channel()
1754 __ieee80211_vif_release_channel(sdata); in ieee80211_vif_release_channel()
1755 mutex_unlock(&sdata->local->chanctx_mtx); in ieee80211_vif_release_channel()
1758 void ieee80211_vif_vlan_copy_chanctx(struct ieee80211_sub_if_data *sdata) in ieee80211_vif_vlan_copy_chanctx() argument
1760 struct ieee80211_local *local = sdata->local; in ieee80211_vif_vlan_copy_chanctx()
1764 if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_AP_VLAN || !sdata->bss)) in ieee80211_vif_vlan_copy_chanctx()
1767 ap = container_of(sdata->bss, struct ieee80211_sub_if_data, u.ap); in ieee80211_vif_vlan_copy_chanctx()
1773 rcu_assign_pointer(sdata->vif.chanctx_conf, conf); in ieee80211_vif_vlan_copy_chanctx()