Skip to content

Commit 8eca1fb

Browse files
lisovyjmberg-intel
authored andcommitted
cfg80211: Use 5MHz bandwidth by default when checking usable channels
Current code checks if the 20MHz bandwidth is allowed for particular channel -- if it is not, the channel is disabled. Since we need to use 5/10 MHz channels, this code is modified in the way that the default bandwidth to check is 5MHz. If the maximum bandwidth allowed by the channel is smaller than 5MHz, the channel is disabled. Otherwise the channel is used and the flags are set according to the bandwidth allowed by the channel. Signed-off-by: Rostislav Lisovy <rostislav.lisovy@fel.cvut.cz> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
1 parent ea077c1 commit 8eca1fb

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

net/wireless/reg.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -935,7 +935,7 @@ freq_reg_info_regd(struct wiphy *wiphy, u32 center_freq,
935935
if (!band_rule_found)
936936
band_rule_found = freq_in_rule_band(fr, center_freq);
937937

938-
bw_fits = reg_does_bw_fit(fr, center_freq, MHZ_TO_KHZ(20));
938+
bw_fits = reg_does_bw_fit(fr, center_freq, MHZ_TO_KHZ(5));
939939

940940
if (band_rule_found && bw_fits)
941941
return rr;
@@ -1019,10 +1019,10 @@ static void chan_reg_rule_print_dbg(const struct ieee80211_regdomain *regd,
10191019
}
10201020
#endif
10211021

1022-
/*
1023-
* Note that right now we assume the desired channel bandwidth
1024-
* is always 20 MHz for each individual channel (HT40 uses 20 MHz
1025-
* per channel, the primary and the extension channel).
1022+
/* Find an ieee80211_reg_rule such that a 5MHz channel with frequency
1023+
* chan->center_freq fits there.
1024+
* If there is no such reg_rule, disable the channel, otherwise set the
1025+
* flags corresponding to the bandwidths allowed in the particular reg_rule
10261026
*/
10271027
static void handle_channel(struct wiphy *wiphy,
10281028
enum nl80211_reg_initiator initiator,
@@ -1083,8 +1083,12 @@ static void handle_channel(struct wiphy *wiphy,
10831083
if (reg_rule->flags & NL80211_RRF_AUTO_BW)
10841084
max_bandwidth_khz = reg_get_max_bandwidth(regd, reg_rule);
10851085

1086+
if (max_bandwidth_khz < MHZ_TO_KHZ(10))
1087+
bw_flags = IEEE80211_CHAN_NO_10MHZ;
1088+
if (max_bandwidth_khz < MHZ_TO_KHZ(20))
1089+
bw_flags |= IEEE80211_CHAN_NO_20MHZ;
10861090
if (max_bandwidth_khz < MHZ_TO_KHZ(40))
1087-
bw_flags = IEEE80211_CHAN_NO_HT40;
1091+
bw_flags |= IEEE80211_CHAN_NO_HT40;
10881092
if (max_bandwidth_khz < MHZ_TO_KHZ(80))
10891093
bw_flags |= IEEE80211_CHAN_NO_80MHZ;
10901094
if (max_bandwidth_khz < MHZ_TO_KHZ(160))
@@ -1518,8 +1522,12 @@ static void handle_channel_custom(struct wiphy *wiphy,
15181522
if (reg_rule->flags & NL80211_RRF_AUTO_BW)
15191523
max_bandwidth_khz = reg_get_max_bandwidth(regd, reg_rule);
15201524

1525+
if (max_bandwidth_khz < MHZ_TO_KHZ(10))
1526+
bw_flags = IEEE80211_CHAN_NO_10MHZ;
1527+
if (max_bandwidth_khz < MHZ_TO_KHZ(20))
1528+
bw_flags |= IEEE80211_CHAN_NO_20MHZ;
15211529
if (max_bandwidth_khz < MHZ_TO_KHZ(40))
1522-
bw_flags = IEEE80211_CHAN_NO_HT40;
1530+
bw_flags |= IEEE80211_CHAN_NO_HT40;
15231531
if (max_bandwidth_khz < MHZ_TO_KHZ(80))
15241532
bw_flags |= IEEE80211_CHAN_NO_80MHZ;
15251533
if (max_bandwidth_khz < MHZ_TO_KHZ(160))

0 commit comments

Comments
 (0)