• Home
  • Raw
  • Download

Lines Matching +full:switch +full:- +full:freq

1 // SPDX-License-Identifier: GPL-2.0
8 * Copyright 2013-2014 Intel Mobile Communications GmbH
9 * Copyright 2018-2020 Intel Corporation
16 #include "rdev-ops.h"
18 static bool cfg80211_valid_60g_freq(u32 freq) in cfg80211_valid_60g_freq() argument
20 return freq >= 58320 && freq <= 70200; in cfg80211_valid_60g_freq()
30 chandef->chan = chan; in cfg80211_chandef_create()
31 chandef->freq1_offset = chan->freq_offset; in cfg80211_chandef_create()
32 chandef->center_freq2 = 0; in cfg80211_chandef_create()
33 chandef->edmg.bw_config = 0; in cfg80211_chandef_create()
34 chandef->edmg.channels = 0; in cfg80211_chandef_create()
36 switch (chan_type) { in cfg80211_chandef_create()
38 chandef->width = NL80211_CHAN_WIDTH_20_NOHT; in cfg80211_chandef_create()
39 chandef->center_freq1 = chan->center_freq; in cfg80211_chandef_create()
42 chandef->width = NL80211_CHAN_WIDTH_20; in cfg80211_chandef_create()
43 chandef->center_freq1 = chan->center_freq; in cfg80211_chandef_create()
46 chandef->width = NL80211_CHAN_WIDTH_40; in cfg80211_chandef_create()
47 chandef->center_freq1 = chan->center_freq + 10; in cfg80211_chandef_create()
50 chandef->width = NL80211_CHAN_WIDTH_40; in cfg80211_chandef_create()
51 chandef->center_freq1 = chan->center_freq - 10; in cfg80211_chandef_create()
66 if (!chandef->edmg.channels || !chandef->edmg.bw_config) in cfg80211_edmg_chandef_valid()
69 if (!cfg80211_valid_60g_freq(chandef->chan->center_freq)) in cfg80211_edmg_chandef_valid()
73 if (chandef->edmg.channels & BIT(i)) { in cfg80211_edmg_chandef_valid()
86 switch (chandef->edmg.bw_config) { in cfg80211_edmg_chandef_valid()
117 switch (chandef->edmg.bw_config) { in cfg80211_edmg_chandef_valid()
148 switch (chan_width) { in nl80211_chan_width_to_mhz()
186 return -1; in nl80211_chan_width_to_mhz()
193 return nl80211_chan_width_to_mhz(c->width); in cfg80211_chandef_get_width()
201 if (!chandef->chan) in cfg80211_chandef_valid()
204 if (chandef->freq1_offset >= 1000) in cfg80211_chandef_valid()
207 control_freq = chandef->chan->center_freq; in cfg80211_chandef_valid()
209 switch (chandef->width) { in cfg80211_chandef_valid()
215 ieee80211_channel_to_khz(chandef->chan)) in cfg80211_chandef_valid()
217 if (chandef->center_freq2) in cfg80211_chandef_valid()
225 if (chandef->chan->band != NL80211_BAND_S1GHZ) in cfg80211_chandef_valid()
228 control_freq = ieee80211_channel_to_khz(chandef->chan); in cfg80211_chandef_valid()
232 chandef->chan)); in cfg80211_chandef_valid()
237 if (chandef->center_freq2) in cfg80211_chandef_valid()
244 if (control_freq - MHZ_TO_KHZ(control_width) / 2 < in cfg80211_chandef_valid()
245 oper_freq - MHZ_TO_KHZ(oper_width) / 2) in cfg80211_chandef_valid()
249 if (chandef->center_freq1 != control_freq + 10 && in cfg80211_chandef_valid()
250 chandef->center_freq1 != control_freq - 10) in cfg80211_chandef_valid()
252 if (chandef->center_freq2) in cfg80211_chandef_valid()
256 if (chandef->center_freq1 != control_freq + 30 && in cfg80211_chandef_valid()
257 chandef->center_freq1 != control_freq + 10 && in cfg80211_chandef_valid()
258 chandef->center_freq1 != control_freq - 10 && in cfg80211_chandef_valid()
259 chandef->center_freq1 != control_freq - 30) in cfg80211_chandef_valid()
261 if (!chandef->center_freq2) in cfg80211_chandef_valid()
263 /* adjacent is not allowed -- that's a 160 MHz channel */ in cfg80211_chandef_valid()
264 if (chandef->center_freq1 - chandef->center_freq2 == 80 || in cfg80211_chandef_valid()
265 chandef->center_freq2 - chandef->center_freq1 == 80) in cfg80211_chandef_valid()
269 if (chandef->center_freq1 != control_freq + 30 && in cfg80211_chandef_valid()
270 chandef->center_freq1 != control_freq + 10 && in cfg80211_chandef_valid()
271 chandef->center_freq1 != control_freq - 10 && in cfg80211_chandef_valid()
272 chandef->center_freq1 != control_freq - 30) in cfg80211_chandef_valid()
274 if (chandef->center_freq2) in cfg80211_chandef_valid()
278 if (chandef->center_freq1 != control_freq + 70 && in cfg80211_chandef_valid()
279 chandef->center_freq1 != control_freq + 50 && in cfg80211_chandef_valid()
280 chandef->center_freq1 != control_freq + 30 && in cfg80211_chandef_valid()
281 chandef->center_freq1 != control_freq + 10 && in cfg80211_chandef_valid()
282 chandef->center_freq1 != control_freq - 10 && in cfg80211_chandef_valid()
283 chandef->center_freq1 != control_freq - 30 && in cfg80211_chandef_valid()
284 chandef->center_freq1 != control_freq - 50 && in cfg80211_chandef_valid()
285 chandef->center_freq1 != control_freq - 70) in cfg80211_chandef_valid()
287 if (chandef->center_freq2) in cfg80211_chandef_valid()
295 if (chandef->center_freq1 == 2484 && in cfg80211_chandef_valid()
296 chandef->width != NL80211_CHAN_WIDTH_20_NOHT) in cfg80211_chandef_valid()
312 switch (c->width) { in chandef_primary_freqs()
314 *pri40 = c->center_freq1; in chandef_primary_freqs()
319 *pri80 = c->center_freq1; in chandef_primary_freqs()
321 tmp = (30 + c->chan->center_freq - c->center_freq1)/20; in chandef_primary_freqs()
325 *pri40 = c->center_freq1 - 20 + 40 * tmp; in chandef_primary_freqs()
329 tmp = (70 + c->chan->center_freq - c->center_freq1)/20; in chandef_primary_freqs()
333 *pri40 = c->center_freq1 - 60 + 40 * tmp; in chandef_primary_freqs()
336 *pri80 = c->center_freq1 - 40 + 80 * tmp; in chandef_primary_freqs()
354 if (c1->chan != c2->chan) in cfg80211_chandef_compatible()
361 if (c1->width == c2->width) in cfg80211_chandef_compatible()
368 if (c1->width == NL80211_CHAN_WIDTH_5 || in cfg80211_chandef_compatible()
369 c1->width == NL80211_CHAN_WIDTH_10 || in cfg80211_chandef_compatible()
370 c2->width == NL80211_CHAN_WIDTH_5 || in cfg80211_chandef_compatible()
371 c2->width == NL80211_CHAN_WIDTH_10) in cfg80211_chandef_compatible()
374 if (c1->width == NL80211_CHAN_WIDTH_20_NOHT || in cfg80211_chandef_compatible()
375 c1->width == NL80211_CHAN_WIDTH_20) in cfg80211_chandef_compatible()
378 if (c2->width == NL80211_CHAN_WIDTH_20_NOHT || in cfg80211_chandef_compatible()
379 c2->width == NL80211_CHAN_WIDTH_20) in cfg80211_chandef_compatible()
392 if (c1->width > c2->width) in cfg80211_chandef_compatible()
403 u32 freq; in cfg80211_set_chans_dfs_state() local
405 for (freq = center_freq - bandwidth/2 + 10; in cfg80211_set_chans_dfs_state()
406 freq <= center_freq + bandwidth/2 - 10; in cfg80211_set_chans_dfs_state()
407 freq += 20) { in cfg80211_set_chans_dfs_state()
408 c = ieee80211_get_channel(wiphy, freq); in cfg80211_set_chans_dfs_state()
409 if (!c || !(c->flags & IEEE80211_CHAN_RADAR)) in cfg80211_set_chans_dfs_state()
412 c->dfs_state = dfs_state; in cfg80211_set_chans_dfs_state()
413 c->dfs_state_entered = jiffies; in cfg80211_set_chans_dfs_state()
430 cfg80211_set_chans_dfs_state(wiphy, chandef->center_freq1, in cfg80211_set_dfs_state()
433 if (!chandef->center_freq2) in cfg80211_set_dfs_state()
435 cfg80211_set_chans_dfs_state(wiphy, chandef->center_freq2, in cfg80211_set_dfs_state()
448 start_freq = center_freq - bandwidth / 2 + MHZ_TO_KHZ(10); in cfg80211_get_start_freq()
462 end_freq = center_freq + bandwidth / 2 - MHZ_TO_KHZ(10); in cfg80211_get_end_freq()
472 u32 freq, start_freq, end_freq; in cfg80211_get_chans_dfs_required() local
477 for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { in cfg80211_get_chans_dfs_required()
478 c = ieee80211_get_channel_khz(wiphy, freq); in cfg80211_get_chans_dfs_required()
480 return -EINVAL; in cfg80211_get_chans_dfs_required()
482 if (c->flags & IEEE80211_CHAN_RADAR) in cfg80211_get_chans_dfs_required()
497 return -EINVAL; in cfg80211_chandef_dfs_required()
499 switch (iftype) { in cfg80211_chandef_dfs_required()
506 return -EINVAL; in cfg80211_chandef_dfs_required()
514 return BIT(chandef->width); in cfg80211_chandef_dfs_required()
516 if (!chandef->center_freq2) in cfg80211_chandef_dfs_required()
520 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_dfs_required()
525 return BIT(chandef->width); in cfg80211_chandef_dfs_required()
551 u32 freq, start_freq, end_freq; in cfg80211_get_chans_dfs_usable() local
561 * (require CAC). Allow DFS and non-DFS channel mix. in cfg80211_get_chans_dfs_usable()
563 for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { in cfg80211_get_chans_dfs_usable()
564 c = ieee80211_get_channel_khz(wiphy, freq); in cfg80211_get_chans_dfs_usable()
566 return -EINVAL; in cfg80211_get_chans_dfs_usable()
568 if (c->flags & IEEE80211_CHAN_DISABLED) in cfg80211_get_chans_dfs_usable()
569 return -EINVAL; in cfg80211_get_chans_dfs_usable()
571 if (c->flags & IEEE80211_CHAN_RADAR) { in cfg80211_get_chans_dfs_usable()
572 if (c->dfs_state == NL80211_DFS_UNAVAILABLE) in cfg80211_get_chans_dfs_usable()
573 return -EINVAL; in cfg80211_get_chans_dfs_usable()
575 if (c->dfs_state == NL80211_DFS_USABLE) in cfg80211_get_chans_dfs_usable()
597 MHZ_TO_KHZ(chandef->center_freq1), in cfg80211_chandef_dfs_usable()
603 switch (chandef->width) { in cfg80211_chandef_dfs_usable()
605 WARN_ON(!chandef->center_freq2); in cfg80211_chandef_dfs_usable()
607 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_dfs_usable()
613 WARN_ON(chandef->center_freq2); in cfg80211_chandef_dfs_usable()
628 u32 freq; in cfg80211_is_sub_chan() local
630 if (chandef->chan->center_freq == chan->center_freq) in cfg80211_is_sub_chan()
637 for (freq = chandef->center_freq1 - width / 2 + 10; in cfg80211_is_sub_chan()
638 freq <= chandef->center_freq1 + width / 2 - 10; freq += 20) { in cfg80211_is_sub_chan()
639 if (chan->center_freq == freq) in cfg80211_is_sub_chan()
643 if (!chandef->center_freq2) in cfg80211_is_sub_chan()
646 for (freq = chandef->center_freq2 - width / 2 + 10; in cfg80211_is_sub_chan()
647 freq <= chandef->center_freq2 + width / 2 - 10; freq += 20) { in cfg80211_is_sub_chan()
648 if (chan->center_freq == freq) in cfg80211_is_sub_chan()
661 if (!wdev->chandef.chan) in cfg80211_beaconing_iface_active()
664 switch (wdev->iftype) { in cfg80211_beaconing_iface_active()
667 active = wdev->beacon_interval != 0; in cfg80211_beaconing_iface_active()
670 active = wdev->ssid_len != 0; in cfg80211_beaconing_iface_active()
673 active = wdev->mesh_id_len != 0; in cfg80211_beaconing_iface_active()
698 list_for_each_entry(wdev, &wiphy->wdev_list, list) { in cfg80211_is_wiphy_oper_chan()
705 if (cfg80211_is_sub_chan(&wdev->chandef, chan)) { in cfg80211_is_wiphy_oper_chan()
722 if (!(chan->flags & IEEE80211_CHAN_RADAR)) in cfg80211_any_wiphy_oper_chan()
726 if (!reg_dfs_domain_same(wiphy, &rdev->wiphy)) in cfg80211_any_wiphy_oper_chan()
729 if (cfg80211_is_wiphy_oper_chan(&rdev->wiphy, chan)) in cfg80211_any_wiphy_oper_chan()
741 u32 freq, start_freq, end_freq; in cfg80211_get_chans_dfs_available() local
755 for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { in cfg80211_get_chans_dfs_available()
756 c = ieee80211_get_channel_khz(wiphy, freq); in cfg80211_get_chans_dfs_available()
760 if (c->flags & IEEE80211_CHAN_DISABLED) in cfg80211_get_chans_dfs_available()
763 if ((c->flags & IEEE80211_CHAN_RADAR) && in cfg80211_get_chans_dfs_available()
764 (c->dfs_state != NL80211_DFS_AVAILABLE) && in cfg80211_get_chans_dfs_available()
765 !(c->dfs_state == NL80211_DFS_USABLE && dfs_offload)) in cfg80211_get_chans_dfs_available()
786 MHZ_TO_KHZ(chandef->center_freq1), in cfg80211_chandef_dfs_available()
793 switch (chandef->width) { in cfg80211_chandef_dfs_available()
795 WARN_ON(!chandef->center_freq2); in cfg80211_chandef_dfs_available()
797 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_dfs_available()
801 WARN_ON(chandef->center_freq2); in cfg80211_chandef_dfs_available()
813 u32 start_freq, end_freq, freq; in cfg80211_get_chans_dfs_cac_time() local
819 for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { in cfg80211_get_chans_dfs_cac_time()
820 c = ieee80211_get_channel_khz(wiphy, freq); in cfg80211_get_chans_dfs_cac_time()
824 if (c->flags & IEEE80211_CHAN_DISABLED) in cfg80211_get_chans_dfs_cac_time()
827 if (!(c->flags & IEEE80211_CHAN_RADAR)) in cfg80211_get_chans_dfs_cac_time()
830 if (c->dfs_cac_ms > dfs_cac_ms) in cfg80211_get_chans_dfs_cac_time()
831 dfs_cac_ms = c->dfs_cac_ms; in cfg80211_get_chans_dfs_cac_time()
852 MHZ_TO_KHZ(chandef->center_freq1), in cfg80211_chandef_dfs_cac_time()
855 if (!chandef->center_freq2) in cfg80211_chandef_dfs_cac_time()
859 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_dfs_cac_time()
870 u32 freq, start_freq, end_freq; in cfg80211_secondary_chans_ok() local
875 for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { in cfg80211_secondary_chans_ok()
876 c = ieee80211_get_channel_khz(wiphy, freq); in cfg80211_secondary_chans_ok()
877 if (!c || c->flags & prohibited_flags) in cfg80211_secondary_chans_ok()
891 int i, freq; in cfg80211_edmg_usable() local
901 if (!(edmg_channels & BIT(primary_channel - 1))) in cfg80211_edmg_usable()
909 if (!(edmg_cap->channels & BIT(i))) in cfg80211_edmg_usable()
914 freq = ieee80211_channel_to_frequency(i + 1, in cfg80211_edmg_usable()
916 chan = ieee80211_get_channel(wiphy, freq); in cfg80211_edmg_usable()
917 if (!chan || chan->flags & IEEE80211_CHAN_DISABLED) in cfg80211_edmg_usable()
928 if ((edmg_bw_config % 4) > (edmg_cap->bw_config % 4)) in cfg80211_edmg_usable()
931 if (edmg_bw_config > edmg_cap->bw_config) in cfg80211_edmg_usable()
950 ht_cap = &wiphy->bands[chandef->chan->band]->ht_cap; in cfg80211_chandef_usable()
951 vht_cap = &wiphy->bands[chandef->chan->band]->vht_cap; in cfg80211_chandef_usable()
952 edmg_cap = &wiphy->bands[chandef->chan->band]->edmg_cap; in cfg80211_chandef_usable()
954 if (edmg_cap->channels && in cfg80211_chandef_usable()
956 chandef->edmg.channels, in cfg80211_chandef_usable()
957 chandef->edmg.bw_config, in cfg80211_chandef_usable()
958 chandef->chan->hw_value, in cfg80211_chandef_usable()
962 control_freq = chandef->chan->center_freq; in cfg80211_chandef_usable()
964 switch (chandef->width) { in cfg80211_chandef_usable()
988 if (!ht_cap->ht_supported && in cfg80211_chandef_usable()
989 chandef->chan->band != NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
998 if (chandef->chan->band == NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1000 if (!ht_cap->ht_supported) in cfg80211_chandef_usable()
1002 if (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) || in cfg80211_chandef_usable()
1003 ht_cap->cap & IEEE80211_HT_CAP_40MHZ_INTOLERANT) in cfg80211_chandef_usable()
1005 if (chandef->center_freq1 < control_freq && in cfg80211_chandef_usable()
1006 chandef->chan->flags & IEEE80211_CHAN_NO_HT40MINUS) in cfg80211_chandef_usable()
1008 if (chandef->center_freq1 > control_freq && in cfg80211_chandef_usable()
1009 chandef->chan->flags & IEEE80211_CHAN_NO_HT40PLUS) in cfg80211_chandef_usable()
1013 cap = vht_cap->cap; in cfg80211_chandef_usable()
1019 if (chandef->chan->band != NL80211_BAND_6GHZ && !support_80_80) in cfg80211_chandef_usable()
1025 if (chandef->chan->band == NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1027 if (!vht_cap->vht_supported) in cfg80211_chandef_usable()
1033 if (chandef->chan->band == NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1035 if (!vht_cap->vht_supported) in cfg80211_chandef_usable()
1037 cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK; in cfg80211_chandef_usable()
1040 !(vht_cap->cap & IEEE80211_VHT_CAP_EXT_NSS_BW_MASK)) in cfg80211_chandef_usable()
1072 if (!chandef->center_freq2) in cfg80211_chandef_usable()
1075 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_usable()
1099 !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR)) in cfg80211_ir_permissive_chan()
1102 /* only valid for GO and TDLS off-channel (station/p2p-CL) */ in cfg80211_ir_permissive_chan()
1109 (chan->flags & IEEE80211_CHAN_INDOOR_ONLY)) in cfg80211_ir_permissive_chan()
1112 if (!(chan->flags & IEEE80211_CHAN_IR_CONCURRENT)) in cfg80211_ir_permissive_chan()
1122 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_ir_permissive_chan()
1127 if (wdev->iftype == NL80211_IFTYPE_STATION && in cfg80211_ir_permissive_chan()
1128 wdev->current_bss) in cfg80211_ir_permissive_chan()
1129 other_chan = wdev->current_bss->pub.channel; in cfg80211_ir_permissive_chan()
1136 * we're not outdoor on an indoor-only channel. in cfg80211_ir_permissive_chan()
1139 wdev->iftype == NL80211_IFTYPE_P2P_GO && in cfg80211_ir_permissive_chan()
1140 wdev->beacon_interval && in cfg80211_ir_permissive_chan()
1141 !(chan->flags & IEEE80211_CHAN_INDOOR_ONLY)) in cfg80211_ir_permissive_chan()
1142 other_chan = wdev->chandef.chan; in cfg80211_ir_permissive_chan()
1151 if (chan->band != NL80211_BAND_5GHZ && in cfg80211_ir_permissive_chan()
1152 chan->band != NL80211_BAND_6GHZ) in cfg80211_ir_permissive_chan()
1155 r1 = cfg80211_get_unii(chan->center_freq); in cfg80211_ir_permissive_chan()
1156 r2 = cfg80211_get_unii(other_chan->center_freq); in cfg80211_ir_permissive_chan()
1158 if (r1 != -EINVAL && r1 == r2) { in cfg80211_ir_permissive_chan()
1160 * At some locations channels 149-165 are considered a in cfg80211_ir_permissive_chan()
1162 * channels 149-161 are considered a bundle while in cfg80211_ir_permissive_chan()
1166 * it is assumed that channels 149-161 are allowed for in cfg80211_ir_permissive_chan()
1168 * connected to an AP on channels 149-161, does not in cfg80211_ir_permissive_chan()
1171 if (chan->center_freq == 5825 && in cfg80211_ir_permissive_chan()
1172 other_chan->center_freq != 5825) in cfg80211_ir_permissive_chan()
1230 chandef->chan); in cfg80211_reg_can_beacon_relax()
1239 if (!rdev->ops->set_monitor_channel) in cfg80211_set_monitor_channel()
1240 return -EOPNOTSUPP; in cfg80211_set_monitor_channel()
1242 return -EBUSY; in cfg80211_set_monitor_channel()
1260 if (wdev->netdev && !netif_running(wdev->netdev)) in cfg80211_get_chan_state()
1263 switch (wdev->iftype) { in cfg80211_get_chan_state()
1265 if (wdev->current_bss) { in cfg80211_get_chan_state()
1266 *chan = wdev->current_bss->pub.channel; in cfg80211_get_chan_state()
1267 *chanmode = (wdev->ibss_fixed && in cfg80211_get_chan_state()
1268 !wdev->ibss_dfs_possible) in cfg80211_get_chan_state()
1272 /* consider worst-case - IBSS can try to return to the in cfg80211_get_chan_state()
1273 * original user-specified channel as creator */ in cfg80211_get_chan_state()
1274 if (wdev->ibss_dfs_possible) in cfg80211_get_chan_state()
1275 *radar_detect |= BIT(wdev->chandef.width); in cfg80211_get_chan_state()
1281 if (wdev->current_bss) { in cfg80211_get_chan_state()
1282 *chan = wdev->current_bss->pub.channel; in cfg80211_get_chan_state()
1289 if (wdev->cac_started) { in cfg80211_get_chan_state()
1290 *chan = wdev->chandef.chan; in cfg80211_get_chan_state()
1292 *radar_detect |= BIT(wdev->chandef.width); in cfg80211_get_chan_state()
1293 } else if (wdev->beacon_interval) { in cfg80211_get_chan_state()
1294 *chan = wdev->chandef.chan; in cfg80211_get_chan_state()
1297 ret = cfg80211_chandef_dfs_required(wdev->wiphy, in cfg80211_get_chan_state()
1298 &wdev->chandef, in cfg80211_get_chan_state()
1299 wdev->iftype); in cfg80211_get_chan_state()
1302 *radar_detect |= BIT(wdev->chandef.width); in cfg80211_get_chan_state()
1306 if (wdev->mesh_id_len) { in cfg80211_get_chan_state()
1307 *chan = wdev->chandef.chan; in cfg80211_get_chan_state()
1310 ret = cfg80211_chandef_dfs_required(wdev->wiphy, in cfg80211_get_chan_state()
1311 &wdev->chandef, in cfg80211_get_chan_state()
1312 wdev->iftype); in cfg80211_get_chan_state()
1315 *radar_detect |= BIT(wdev->chandef.width); in cfg80211_get_chan_state()
1319 if (wdev->chandef.chan) { in cfg80211_get_chan_state()
1320 *chan = wdev->chandef.chan; in cfg80211_get_chan_state()