Lines Matching refs:chandef

23 void cfg80211_chandef_create(struct cfg80211_chan_def *chandef,  in cfg80211_chandef_create()  argument
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()
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()
59 static bool cfg80211_edmg_chandef_valid(const struct cfg80211_chan_def *chandef) in cfg80211_edmg_chandef_valid() argument
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()
199 bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef) in cfg80211_chandef_valid() argument
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()
217 if (ieee80211_chandef_to_khz(chandef) != 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()
232 oper_freq = ieee80211_chandef_to_khz(chandef); in cfg80211_chandef_valid()
235 chandef->chan)); in cfg80211_chandef_valid()
236 oper_width = cfg80211_chandef_get_width(chandef); in cfg80211_chandef_valid()
240 if (chandef->center_freq2) in cfg80211_chandef_valid()
252 if (!chandef->center_freq2) 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()
315 if (cfg80211_chandef_is_edmg(chandef) && in cfg80211_chandef_valid()
316 !cfg80211_edmg_chandef_valid(chandef)) in cfg80211_chandef_valid()
468 const struct cfg80211_chan_def *chandef, in cfg80211_set_dfs_state() argument
473 if (WARN_ON(!cfg80211_chandef_valid(chandef))) in cfg80211_set_dfs_state()
476 width = cfg80211_chandef_get_width(chandef); in cfg80211_set_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()
540 const struct cfg80211_chan_def *chandef, in cfg80211_chandef_dfs_required() argument
546 if (WARN_ON(!cfg80211_chandef_valid(chandef))) in cfg80211_chandef_dfs_required()
554 width = cfg80211_chandef_get_width(chandef); in cfg80211_chandef_dfs_required()
559 ieee80211_chandef_to_khz(chandef), 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()
634 const struct cfg80211_chan_def *chandef) in cfg80211_chandef_dfs_usable() argument
639 if (WARN_ON(!cfg80211_chandef_valid(chandef))) in cfg80211_chandef_dfs_usable()
642 width = cfg80211_chandef_get_width(chandef); in cfg80211_chandef_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()
674 bool cfg80211_is_sub_chan(struct cfg80211_chan_def *chandef, in cfg80211_is_sub_chan() argument
681 if (!chandef->chan) in cfg80211_is_sub_chan()
684 if (chandef->chan->center_freq == chan->center_freq) in cfg80211_is_sub_chan()
690 width = cfg80211_chandef_get_width(chandef); 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()
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()
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()
877 const struct cfg80211_chan_def *chandef) in cfg80211_chandef_dfs_available() argument
882 if (WARN_ON(!cfg80211_chandef_valid(chandef))) in cfg80211_chandef_dfs_available()
885 width = cfg80211_chandef_get_width(chandef); in cfg80211_chandef_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()
943 const struct cfg80211_chan_def *chandef) in cfg80211_chandef_dfs_cac_time() argument
948 if (WARN_ON(!cfg80211_chandef_valid(chandef))) in cfg80211_chandef_dfs_cac_time()
951 width = cfg80211_chandef_get_width(chandef); in cfg80211_chandef_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()
1042 const struct cfg80211_chan_def *chandef, in cfg80211_chandef_usable() argument
1054 if (WARN_ON(!cfg80211_chandef_valid(chandef))) in cfg80211_chandef_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()
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()
1098 chandef->chan->band != NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1107 if (chandef->chan->band == NL80211_BAND_6GHZ) 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()
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()
1143 if (chandef->chan->band == NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1158 if (chandef->chan->band != NL80211_BAND_6GHZ) in cfg80211_chandef_usable()
1205 ieee80211_chandef_to_khz(chandef), in cfg80211_chandef_usable()
1209 if (!chandef->center_freq2) in cfg80211_chandef_usable()
1212 MHZ_TO_KHZ(chandef->center_freq2), in cfg80211_chandef_usable()
1241 other_chan = wdev->links[link_id].ap.chandef.chan; in cfg80211_ir_permissive_check_wdev()
1336 struct cfg80211_chan_def *chandef, in _cfg80211_reg_can_beacon() argument
1344 trace_cfg80211_reg_can_beacon(wiphy, chandef, iftype, check_no_ir); in _cfg80211_reg_can_beacon()
1349 if (cfg80211_chandef_dfs_required(wiphy, chandef, iftype) > 0 && in _cfg80211_reg_can_beacon()
1350 cfg80211_chandef_dfs_available(wiphy, chandef)) { in _cfg80211_reg_can_beacon()
1355 res = cfg80211_chandef_usable(wiphy, chandef, prohibited_flags); in _cfg80211_reg_can_beacon()
1362 struct cfg80211_chan_def *chandef, in cfg80211_reg_can_beacon() argument
1365 return _cfg80211_reg_can_beacon(wiphy, chandef, iftype, true); in cfg80211_reg_can_beacon()
1370 struct cfg80211_chan_def *chandef, in cfg80211_reg_can_beacon_relax() argument
1385 chandef->chan); in cfg80211_reg_can_beacon_relax()
1387 return _cfg80211_reg_can_beacon(wiphy, chandef, iftype, check_no_ir); in cfg80211_reg_can_beacon_relax()
1392 struct cfg80211_chan_def *chandef) in cfg80211_set_monitor_channel() argument
1399 return rdev_set_monitor_channel(rdev, chandef); in cfg80211_set_monitor_channel()
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()
1496 const struct cfg80211_chan_def *chandef) in cfg80211_valid_disable_subchannel_bitmap() argument
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()