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-2022 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()
189 return -1; in nl80211_chan_width_to_mhz()
196 return nl80211_chan_width_to_mhz(c->width); in cfg80211_chandef_get_width()
204 if (!chandef->chan) in cfg80211_chandef_valid()
207 if (chandef->freq1_offset >= 1000) in cfg80211_chandef_valid()
210 control_freq = chandef->chan->center_freq; in cfg80211_chandef_valid()
212 switch (chandef->width) { in cfg80211_chandef_valid()
218 ieee80211_channel_to_khz(chandef->chan)) in cfg80211_chandef_valid()
220 if (chandef->center_freq2) in cfg80211_chandef_valid()
228 if (chandef->chan->band != NL80211_BAND_S1GHZ) in cfg80211_chandef_valid()
231 control_freq = ieee80211_channel_to_khz(chandef->chan); in cfg80211_chandef_valid()
235 chandef->chan)); in cfg80211_chandef_valid()
240 if (chandef->center_freq2) in cfg80211_chandef_valid()
247 if (control_freq - MHZ_TO_KHZ(control_width) / 2 < in cfg80211_chandef_valid()
248 oper_freq - MHZ_TO_KHZ(oper_width) / 2) in cfg80211_chandef_valid()
252 if (!chandef->center_freq2) in cfg80211_chandef_valid()
254 /* adjacent is not allowed -- that's a 160 MHz channel */ in cfg80211_chandef_valid()
255 if (chandef->center_freq1 - chandef->center_freq2 == 80 || in cfg80211_chandef_valid()
256 chandef->center_freq2 - chandef->center_freq1 == 80) in cfg80211_chandef_valid()
260 if (chandef->center_freq2) in cfg80211_chandef_valid()
265 switch (chandef->width) { in cfg80211_chandef_valid()
278 if (chandef->center_freq1 == control_freq + 150 || in cfg80211_chandef_valid()
279 chandef->center_freq1 == control_freq + 130 || in cfg80211_chandef_valid()
280 chandef->center_freq1 == control_freq + 110 || in cfg80211_chandef_valid()
281 chandef->center_freq1 == control_freq + 90 || in cfg80211_chandef_valid()
282 chandef->center_freq1 == control_freq - 90 || in cfg80211_chandef_valid()
283 chandef->center_freq1 == control_freq - 110 || in cfg80211_chandef_valid()
284 chandef->center_freq1 == control_freq - 130 || in cfg80211_chandef_valid()
285 chandef->center_freq1 == control_freq - 150) in cfg80211_chandef_valid()
289 if (chandef->center_freq1 == control_freq + 70 || in cfg80211_chandef_valid()
290 chandef->center_freq1 == control_freq + 50 || in cfg80211_chandef_valid()
291 chandef->center_freq1 == control_freq - 50 || in cfg80211_chandef_valid()
292 chandef->center_freq1 == control_freq - 70) in cfg80211_chandef_valid()
297 if (chandef->center_freq1 == control_freq + 30 || in cfg80211_chandef_valid()
298 chandef->center_freq1 == control_freq - 30) in cfg80211_chandef_valid()
302 if (chandef->center_freq1 == control_freq + 10 || in cfg80211_chandef_valid()
303 chandef->center_freq1 == control_freq - 10) in cfg80211_chandef_valid()
311 if (chandef->center_freq1 == 2484 && in cfg80211_chandef_valid()
312 chandef->width != NL80211_CHAN_WIDTH_20_NOHT) in cfg80211_chandef_valid()
328 switch (c->width) { in chandef_primary_freqs()
330 *pri40 = c->center_freq1; in chandef_primary_freqs()
337 *pri80 = c->center_freq1; in chandef_primary_freqs()
339 tmp = (30 + c->chan->center_freq - c->center_freq1)/20; in chandef_primary_freqs()
343 *pri40 = c->center_freq1 - 20 + 40 * tmp; in chandef_primary_freqs()
346 *pri160 = c->center_freq1; in chandef_primary_freqs()
348 tmp = (70 + c->chan->center_freq - c->center_freq1)/20; in chandef_primary_freqs()
352 *pri40 = c->center_freq1 - 60 + 40 * tmp; in chandef_primary_freqs()
355 *pri80 = c->center_freq1 - 40 + 80 * tmp; in chandef_primary_freqs()
359 tmp = (150 + c->chan->center_freq - c->center_freq1) / 20; in chandef_primary_freqs()
363 *pri40 = c->center_freq1 - 140 + 40 * tmp; in chandef_primary_freqs()
366 *pri80 = c->center_freq1 - 120 + 80 * tmp; in chandef_primary_freqs()
369 *pri160 = c->center_freq1 - 80 + 160 * tmp; in chandef_primary_freqs()
387 if (c1->chan != c2->chan) in cfg80211_chandef_compatible()
394 if (c1->width == c2->width) in cfg80211_chandef_compatible()
401 if (c1->width == NL80211_CHAN_WIDTH_5 || in cfg80211_chandef_compatible()
402 c1->width == NL80211_CHAN_WIDTH_10 || in cfg80211_chandef_compatible()
403 c2->width == NL80211_CHAN_WIDTH_5 || in cfg80211_chandef_compatible()
404 c2->width == NL80211_CHAN_WIDTH_10) in cfg80211_chandef_compatible()
407 if (c1->width == NL80211_CHAN_WIDTH_20_NOHT || in cfg80211_chandef_compatible()
408 c1->width == NL80211_CHAN_WIDTH_20) in cfg80211_chandef_compatible()
411 if (c2->width == NL80211_CHAN_WIDTH_20_NOHT || in cfg80211_chandef_compatible()
412 c2->width == NL80211_CHAN_WIDTH_20) in cfg80211_chandef_compatible()
421 if (c1->width == NL80211_CHAN_WIDTH_40) in cfg80211_chandef_compatible()
424 if (c2->width == NL80211_CHAN_WIDTH_40) in cfg80211_chandef_compatible()
430 if (c1->width == NL80211_CHAN_WIDTH_80 && in cfg80211_chandef_compatible()
431 c2->width > NL80211_CHAN_WIDTH_80) in cfg80211_chandef_compatible()
434 if (c2->width == NL80211_CHAN_WIDTH_80 && in cfg80211_chandef_compatible()
435 c1->width > NL80211_CHAN_WIDTH_80) in cfg80211_chandef_compatible()
442 if (c1->width > c2->width) in cfg80211_chandef_compatible()
453 u32 freq; in cfg80211_set_chans_dfs_state() local
455 for (freq = center_freq - bandwidth/2 + 10; in cfg80211_set_chans_dfs_state()
456 freq <= center_freq + bandwidth/2 - 10; in cfg80211_set_chans_dfs_state()
457 freq += 20) { in cfg80211_set_chans_dfs_state()
458 c = ieee80211_get_channel(wiphy, freq); in cfg80211_set_chans_dfs_state()
459 if (!c || !(c->flags & IEEE80211_CHAN_RADAR)) in cfg80211_set_chans_dfs_state()
462 c->dfs_state = dfs_state; in cfg80211_set_chans_dfs_state()
463 c->dfs_state_entered = jiffies; in cfg80211_set_chans_dfs_state()
480 cfg80211_set_chans_dfs_state(wiphy, chandef->center_freq1, in cfg80211_set_dfs_state()
483 if (!chandef->center_freq2) in cfg80211_set_dfs_state()
485 cfg80211_set_chans_dfs_state(wiphy, chandef->center_freq2, in cfg80211_set_dfs_state()
498 start_freq = center_freq - bandwidth / 2 + MHZ_TO_KHZ(10); in cfg80211_get_start_freq()
512 end_freq = center_freq + bandwidth / 2 - MHZ_TO_KHZ(10); in cfg80211_get_end_freq()
522 u32 freq, start_freq, end_freq; in cfg80211_get_chans_dfs_required() local
527 for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { in cfg80211_get_chans_dfs_required()
528 c = ieee80211_get_channel_khz(wiphy, freq); in cfg80211_get_chans_dfs_required()
530 return -EINVAL; in cfg80211_get_chans_dfs_required()
532 if (c->flags & IEEE80211_CHAN_RADAR) in cfg80211_get_chans_dfs_required()
547 return -EINVAL; in cfg80211_chandef_dfs_required()
549 switch (iftype) { in cfg80211_chandef_dfs_required()
556 return -EINVAL; in cfg80211_chandef_dfs_required()
564 return BIT(chandef->width); in cfg80211_chandef_dfs_required()
566 if (!chandef->center_freq2) in cfg80211_chandef_dfs_required()
570 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_dfs_required()
575 return BIT(chandef->width); in cfg80211_chandef_dfs_required()
601 u32 freq, start_freq, end_freq; in cfg80211_get_chans_dfs_usable() local
611 * (require CAC). Allow DFS and non-DFS channel mix. in cfg80211_get_chans_dfs_usable()
613 for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { in cfg80211_get_chans_dfs_usable()
614 c = ieee80211_get_channel_khz(wiphy, freq); in cfg80211_get_chans_dfs_usable()
616 return -EINVAL; in cfg80211_get_chans_dfs_usable()
618 if (c->flags & IEEE80211_CHAN_DISABLED) in cfg80211_get_chans_dfs_usable()
619 return -EINVAL; in cfg80211_get_chans_dfs_usable()
621 if (c->flags & IEEE80211_CHAN_RADAR) { in cfg80211_get_chans_dfs_usable()
622 if (c->dfs_state == NL80211_DFS_UNAVAILABLE) in cfg80211_get_chans_dfs_usable()
623 return -EINVAL; in cfg80211_get_chans_dfs_usable()
625 if (c->dfs_state == NL80211_DFS_USABLE) in cfg80211_get_chans_dfs_usable()
647 MHZ_TO_KHZ(chandef->center_freq1), in cfg80211_chandef_dfs_usable()
653 switch (chandef->width) { in cfg80211_chandef_dfs_usable()
655 WARN_ON(!chandef->center_freq2); in cfg80211_chandef_dfs_usable()
657 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_dfs_usable()
663 WARN_ON(chandef->center_freq2); in cfg80211_chandef_dfs_usable()
679 u32 freq; in cfg80211_is_sub_chan() local
681 if (!chandef->chan) in cfg80211_is_sub_chan()
684 if (chandef->chan->center_freq == chan->center_freq) in cfg80211_is_sub_chan()
694 for (freq = chandef->center_freq1 - width / 2 + 10; in cfg80211_is_sub_chan()
695 freq <= chandef->center_freq1 + width / 2 - 10; freq += 20) { in cfg80211_is_sub_chan()
696 if (chan->center_freq == freq) in cfg80211_is_sub_chan()
700 if (!chandef->center_freq2) in cfg80211_is_sub_chan()
703 for (freq = chandef->center_freq2 - width / 2 + 10; in cfg80211_is_sub_chan()
704 freq <= chandef->center_freq2 + width / 2 - 10; freq += 20) { in cfg80211_is_sub_chan()
705 if (chan->center_freq == freq) in cfg80211_is_sub_chan()
718 switch (wdev->iftype) { in cfg80211_beaconing_iface_active()
722 if (wdev->links[link].ap.beacon_interval) in cfg80211_beaconing_iface_active()
727 if (wdev->u.ibss.ssid_len) in cfg80211_beaconing_iface_active()
731 if (wdev->u.mesh.id_len) in cfg80211_beaconing_iface_active()
758 switch (wdev->iftype) { in cfg80211_wdev_on_sub_chan()
762 if (cfg80211_is_sub_chan(&wdev->links[link].ap.chandef, in cfg80211_wdev_on_sub_chan()
768 return cfg80211_is_sub_chan(&wdev->u.ibss.chandef, chan, in cfg80211_wdev_on_sub_chan()
771 return cfg80211_is_sub_chan(&wdev->u.mesh.chandef, chan, in cfg80211_wdev_on_sub_chan()
785 list_for_each_entry(wdev, &wiphy->wdev_list, list) { in cfg80211_is_wiphy_oper_chan()
806 if (!rdev->background_radar_wdev) in cfg80211_offchan_chain_is_active()
809 if (!cfg80211_chandef_valid(&rdev->background_radar_chandef)) in cfg80211_offchan_chain_is_active()
812 return cfg80211_is_sub_chan(&rdev->background_radar_chandef, channel, in cfg80211_offchan_chain_is_active()
823 if (!(chan->flags & IEEE80211_CHAN_RADAR)) in cfg80211_any_wiphy_oper_chan()
827 if (!reg_dfs_domain_same(wiphy, &rdev->wiphy)) in cfg80211_any_wiphy_oper_chan()
830 if (cfg80211_is_wiphy_oper_chan(&rdev->wiphy, chan)) in cfg80211_any_wiphy_oper_chan()
845 u32 freq, start_freq, end_freq; in cfg80211_get_chans_dfs_available() local
859 for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { in cfg80211_get_chans_dfs_available()
860 c = ieee80211_get_channel_khz(wiphy, freq); in cfg80211_get_chans_dfs_available()
864 if (c->flags & IEEE80211_CHAN_DISABLED) in cfg80211_get_chans_dfs_available()
867 if ((c->flags & IEEE80211_CHAN_RADAR) && in cfg80211_get_chans_dfs_available()
868 (c->dfs_state != NL80211_DFS_AVAILABLE) && in cfg80211_get_chans_dfs_available()
869 !(c->dfs_state == NL80211_DFS_USABLE && dfs_offload)) in cfg80211_get_chans_dfs_available()
890 MHZ_TO_KHZ(chandef->center_freq1), in cfg80211_chandef_dfs_available()
897 switch (chandef->width) { in cfg80211_chandef_dfs_available()
899 WARN_ON(!chandef->center_freq2); in cfg80211_chandef_dfs_available()
901 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_dfs_available()
905 WARN_ON(chandef->center_freq2); in cfg80211_chandef_dfs_available()
917 u32 start_freq, end_freq, freq; in cfg80211_get_chans_dfs_cac_time() local
923 for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { in cfg80211_get_chans_dfs_cac_time()
924 c = ieee80211_get_channel_khz(wiphy, freq); in cfg80211_get_chans_dfs_cac_time()
928 if (c->flags & IEEE80211_CHAN_DISABLED) in cfg80211_get_chans_dfs_cac_time()
931 if (!(c->flags & IEEE80211_CHAN_RADAR)) in cfg80211_get_chans_dfs_cac_time()
934 if (c->dfs_cac_ms > dfs_cac_ms) in cfg80211_get_chans_dfs_cac_time()
935 dfs_cac_ms = c->dfs_cac_ms; in cfg80211_get_chans_dfs_cac_time()
956 MHZ_TO_KHZ(chandef->center_freq1), in cfg80211_chandef_dfs_cac_time()
959 if (!chandef->center_freq2) in cfg80211_chandef_dfs_cac_time()
963 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_dfs_cac_time()
974 u32 freq, start_freq, end_freq; in cfg80211_secondary_chans_ok() local
979 for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) { in cfg80211_secondary_chans_ok()
980 c = ieee80211_get_channel_khz(wiphy, freq); in cfg80211_secondary_chans_ok()
981 if (!c || c->flags & prohibited_flags) in cfg80211_secondary_chans_ok()
995 int i, freq; in cfg80211_edmg_usable() local
1005 if (!(edmg_channels & BIT(primary_channel - 1))) in cfg80211_edmg_usable()
1013 if (!(edmg_cap->channels & BIT(i))) in cfg80211_edmg_usable()
1018 freq = ieee80211_channel_to_frequency(i + 1, in cfg80211_edmg_usable()
1020 chan = ieee80211_get_channel(wiphy, freq); in cfg80211_edmg_usable()
1021 if (!chan || chan->flags & IEEE80211_CHAN_DISABLED) in cfg80211_edmg_usable()
1032 if ((edmg_bw_config % 4) > (edmg_cap->bw_config % 4)) in cfg80211_edmg_usable()
1035 if (edmg_bw_config > edmg_cap->bw_config) in cfg80211_edmg_usable()
1057 ht_cap = &wiphy->bands[chandef->chan->band]->ht_cap; in cfg80211_chandef_usable()
1058 vht_cap = &wiphy->bands[chandef->chan->band]->vht_cap; in cfg80211_chandef_usable()
1059 edmg_cap = &wiphy->bands[chandef->chan->band]->edmg_cap; in cfg80211_chandef_usable()
1060 ext_nss_cap = __le16_to_cpu(vht_cap->vht_mcs.tx_highest) & in cfg80211_chandef_usable()
1063 if (edmg_cap->channels && in cfg80211_chandef_usable()
1065 chandef->edmg.channels, in cfg80211_chandef_usable()
1066 chandef->edmg.bw_config, in cfg80211_chandef_usable()
1067 chandef->chan->hw_value, in cfg80211_chandef_usable()
1071 control_freq = chandef->chan->center_freq; in cfg80211_chandef_usable()
1073 switch (chandef->width) { in cfg80211_chandef_usable()
1097 if (!ht_cap->ht_supported && in cfg80211_chandef_usable()
1098 chandef->chan->band != NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1107 if (chandef->chan->band == NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1109 if (!ht_cap->ht_supported) in cfg80211_chandef_usable()
1111 if (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) || in cfg80211_chandef_usable()
1112 ht_cap->cap & IEEE80211_HT_CAP_40MHZ_INTOLERANT) in cfg80211_chandef_usable()
1114 if (chandef->center_freq1 < control_freq && in cfg80211_chandef_usable()
1115 chandef->chan->flags & IEEE80211_CHAN_NO_HT40MINUS) in cfg80211_chandef_usable()
1117 if (chandef->center_freq1 > control_freq && in cfg80211_chandef_usable()
1118 chandef->chan->flags & IEEE80211_CHAN_NO_HT40PLUS) in cfg80211_chandef_usable()
1122 cap = vht_cap->cap; in cfg80211_chandef_usable()
1129 if (chandef->chan->band != NL80211_BAND_6GHZ && !support_80_80) in cfg80211_chandef_usable()
1135 if (chandef->chan->band == NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1137 if (!vht_cap->vht_supported) in cfg80211_chandef_usable()
1143 if (chandef->chan->band == NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1145 if (!vht_cap->vht_supported) in cfg80211_chandef_usable()
1147 cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK; in cfg80211_chandef_usable()
1151 (vht_cap->cap & IEEE80211_VHT_CAP_EXT_NSS_BW_MASK))) in cfg80211_chandef_usable()
1158 if (chandef->chan->band != NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1161 sband = wiphy->bands[NL80211_BAND_6GHZ]; in cfg80211_chandef_usable()
1165 for (i = 0; i < sband->n_iftype_data; i++) { in cfg80211_chandef_usable()
1166 iftd = &sband->iftype_data[i]; in cfg80211_chandef_usable()
1167 if (!iftd->eht_cap.has_eht) in cfg80211_chandef_usable()
1170 if (iftd->eht_cap.eht_cap_elem.phy_cap_info[0] & in cfg80211_chandef_usable()
1209 if (!chandef->center_freq2) in cfg80211_chandef_usable()
1212 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_usable()
1226 if (wdev->iftype == NL80211_IFTYPE_STATION && in cfg80211_ir_permissive_check_wdev()
1227 wdev->links[link_id].client.current_bss) in cfg80211_ir_permissive_check_wdev()
1228 other_chan = wdev->links[link_id].client.current_bss->pub.channel; in cfg80211_ir_permissive_check_wdev()
1235 * we're not outdoor on an indoor-only channel. in cfg80211_ir_permissive_check_wdev()
1238 wdev->iftype == NL80211_IFTYPE_P2P_GO && in cfg80211_ir_permissive_check_wdev()
1239 wdev->links[link_id].ap.beacon_interval && in cfg80211_ir_permissive_check_wdev()
1240 !(chan->flags & IEEE80211_CHAN_INDOOR_ONLY)) in cfg80211_ir_permissive_check_wdev()
1241 other_chan = wdev->links[link_id].ap.chandef.chan; in cfg80211_ir_permissive_check_wdev()
1249 if (chan->band != NL80211_BAND_5GHZ && in cfg80211_ir_permissive_check_wdev()
1250 chan->band != NL80211_BAND_6GHZ) in cfg80211_ir_permissive_check_wdev()
1253 r1 = cfg80211_get_unii(chan->center_freq); in cfg80211_ir_permissive_check_wdev()
1254 r2 = cfg80211_get_unii(other_chan->center_freq); in cfg80211_ir_permissive_check_wdev()
1256 if (r1 != -EINVAL && r1 == r2) { in cfg80211_ir_permissive_check_wdev()
1258 * At some locations channels 149-165 are considered a in cfg80211_ir_permissive_check_wdev()
1260 * channels 149-161 are considered a bundle while in cfg80211_ir_permissive_check_wdev()
1264 * it is assumed that channels 149-161 are allowed for in cfg80211_ir_permissive_check_wdev()
1266 * connected to an AP on channels 149-161, does not in cfg80211_ir_permissive_check_wdev()
1269 if (chan->center_freq == 5825 && in cfg80211_ir_permissive_check_wdev()
1270 other_chan->center_freq != 5825) in cfg80211_ir_permissive_check_wdev()
1295 lockdep_assert_held(&rdev->wiphy.mtx); in cfg80211_ir_permissive_chan()
1298 !(wiphy->regulatory_flags & REGULATORY_ENABLE_RELAX_NO_IR)) in cfg80211_ir_permissive_chan()
1301 /* only valid for GO and TDLS off-channel (station/p2p-CL) */ in cfg80211_ir_permissive_chan()
1308 (chan->flags & IEEE80211_CHAN_INDOOR_ONLY)) in cfg80211_ir_permissive_chan()
1311 if (!(chan->flags & IEEE80211_CHAN_IR_CONCURRENT)) in cfg80211_ir_permissive_chan()
1321 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_ir_permissive_chan()
1376 lockdep_assert_held(&rdev->wiphy.mtx); in cfg80211_reg_can_beacon_relax()
1385 chandef->chan); in cfg80211_reg_can_beacon_relax()
1394 if (!rdev->ops->set_monitor_channel) in cfg80211_set_monitor_channel()
1395 return -EOPNOTSUPP; in cfg80211_set_monitor_channel()
1397 return -EBUSY; in cfg80211_set_monitor_channel()
1411 struct ieee80211_supported_band *sband = wiphy->bands[idx]; in cfg80211_any_usable_channels()
1417 for (chanidx = 0; chanidx < sband->n_channels; chanidx++) { in cfg80211_any_usable_channels()
1420 chan = &sband->channels[chanidx]; in cfg80211_any_usable_channels()
1422 if (chan->flags & prohibited_flags) in cfg80211_any_usable_channels()
1437 * We need to sort out the locking here - in some cases in wdev_chandef()
1443 if (link_id || wdev->valid_links & BIT(0)) { in wdev_chandef()
1445 WARN_ON(!(wdev->valid_links & BIT(link_id))); in wdev_chandef()
1448 switch (wdev->iftype) { in wdev_chandef()
1450 return &wdev->u.mesh.chandef; in wdev_chandef()
1452 return &wdev->u.ibss.chandef; in wdev_chandef()
1454 return &wdev->u.ocb.chandef; in wdev_chandef()
1457 return &wdev->links[link_id].ap.chandef; in wdev_chandef()
1500 switch (chandef->width) { in cfg80211_valid_disable_subchannel_bitmap()
1503 start_freq = chandef->center_freq1 - 40; in cfg80211_valid_disable_subchannel_bitmap()
1507 start_freq = chandef->center_freq1 - 80; in cfg80211_valid_disable_subchannel_bitmap()
1511 start_freq = chandef->center_freq1 - 160; in cfg80211_valid_disable_subchannel_bitmap()
1522 if (*bitmap & (u16)BIT((chandef->chan->center_freq - start_freq) / 20)) in cfg80211_valid_disable_subchannel_bitmap()