提交 81e88006 编写于 作者: L Larry Finger 提交者: John W. Linville

[PATCH] bcm43xx: Fix 802.11b/g scan limits to match regulatory reqs

In 802.11b/g mode, bcm43xx actively scans channels 1-14 no matter what
locale has been set, either in the sprom or by the locale option. This
behaviorviolates regulatory rules everywhere in the world except
Japan. This patch changes the default range to the correct value if the
locale has been set, and to channels 1-13 if no locale has been set.
Signed-off-by: NLarry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 92b3e2e9
...@@ -946,6 +946,7 @@ static int bcm43xx_geo_init(struct bcm43xx_private *bcm) ...@@ -946,6 +946,7 @@ static int bcm43xx_geo_init(struct bcm43xx_private *bcm)
u8 channel; u8 channel;
struct bcm43xx_phyinfo *phy; struct bcm43xx_phyinfo *phy;
const char *iso_country; const char *iso_country;
u8 max_bg_channel;
geo = kzalloc(sizeof(*geo), GFP_KERNEL); geo = kzalloc(sizeof(*geo), GFP_KERNEL);
if (!geo) if (!geo)
...@@ -967,6 +968,23 @@ static int bcm43xx_geo_init(struct bcm43xx_private *bcm) ...@@ -967,6 +968,23 @@ static int bcm43xx_geo_init(struct bcm43xx_private *bcm)
} }
iso_country = bcm43xx_locale_iso(bcm->sprom.locale); iso_country = bcm43xx_locale_iso(bcm->sprom.locale);
/* set the maximum channel based on locale set in sprom or witle locale option */
switch (bcm->sprom.locale) {
case BCM43xx_LOCALE_THAILAND:
case BCM43xx_LOCALE_ISRAEL:
case BCM43xx_LOCALE_JORDAN:
case BCM43xx_LOCALE_USA_CANADA_ANZ:
case BCM43xx_LOCALE_USA_LOW:
max_bg_channel = 11;
break;
case BCM43xx_LOCALE_JAPAN:
case BCM43xx_LOCALE_JAPAN_HIGH:
max_bg_channel = 14;
break;
default:
max_bg_channel = 13;
}
if (have_a) { if (have_a) {
for (i = 0, channel = IEEE80211_52GHZ_MIN_CHANNEL; for (i = 0, channel = IEEE80211_52GHZ_MIN_CHANNEL;
channel <= IEEE80211_52GHZ_MAX_CHANNEL; channel++) { channel <= IEEE80211_52GHZ_MAX_CHANNEL; channel++) {
...@@ -978,7 +996,7 @@ static int bcm43xx_geo_init(struct bcm43xx_private *bcm) ...@@ -978,7 +996,7 @@ static int bcm43xx_geo_init(struct bcm43xx_private *bcm)
} }
if (have_bg) { if (have_bg) {
for (i = 0, channel = IEEE80211_24GHZ_MIN_CHANNEL; for (i = 0, channel = IEEE80211_24GHZ_MIN_CHANNEL;
channel <= IEEE80211_24GHZ_MAX_CHANNEL; channel++) { channel <= max_bg_channel; channel++) {
chan = &geo->bg[i++]; chan = &geo->bg[i++];
chan->freq = bcm43xx_channel_to_freq_bg(channel); chan->freq = bcm43xx_channel_to_freq_bg(channel);
chan->channel = channel; chan->channel = channel;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册