aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath9k
diff options
context:
space:
mode:
authorLuis R. Rodriguez <lrodriguez@atheros.com>2009-01-28 12:17:49 -0800
committerJohn W. Linville <linville@tuxdriver.com>2009-02-09 15:03:38 -0500
commit7519a8f0778bdb14f07cf685fa5fee6ab07e734c (patch)
tree6892ab013e4ff9a55d366cf6b9c5ca139d89ebd2 /drivers/net/wireless/ath9k
parent547e4c2e64d0be5e8491abb49ee6b0f0f8272de1 (diff)
downloadkernel_samsung_smdk4412-7519a8f0778bdb14f07cf685fa5fee6ab07e734c.zip
kernel_samsung_smdk4412-7519a8f0778bdb14f07cf685fa5fee6ab07e734c.tar.gz
kernel_samsung_smdk4412-7519a8f0778bdb14f07cf685fa5fee6ab07e734c.tar.bz2
ath9k: remove passive scan on 5 GHz if country IE knows better
If we have new found information about our location and the current country regulatory domain does not have passive scan flag requirements we should be able to actively scan now on those channels. Since AP functionality is not allowed where passive scan flags are set this means if you have a world regulatory domain and you get a country IE that allows that channel (with active scan) then we lift the passive-scan requirement so you can then use AP mode. Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath9k')
-rw-r--r--drivers/net/wireless/ath9k/regd.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath9k/regd.c b/drivers/net/wireless/ath9k/regd.c
index cccec40..dfcc3b5 100644
--- a/drivers/net/wireless/ath9k/regd.c
+++ b/drivers/net/wireless/ath9k/regd.c
@@ -160,8 +160,12 @@ static bool ath9k_is_radar_freq(u16 center_freq)
return (center_freq >= 5260 && center_freq <= 5700);
}
-/* Enable adhoc on 5 GHz if allowed by 11d */
-static void ath9k_reg_apply_5ghz_adhoc_flags(struct wiphy *wiphy,
+/*
+ * Enable adhoc on 5 GHz if allowed by 11d.
+ * Remove passive scan if channel is allowed by 11d,
+ * except when on radar frequencies.
+ */
+static void ath9k_reg_apply_5ghz_beaconing_flags(struct wiphy *wiphy,
enum reg_set_by setby)
{
struct ieee80211_supported_band *sband;
@@ -189,6 +193,10 @@ static void ath9k_reg_apply_5ghz_adhoc_flags(struct wiphy *wiphy,
* probe */
if (!(reg_rule->flags & NL80211_RRF_NO_IBSS))
ch->flags &= ~NL80211_RRF_NO_IBSS;
+ if (!ath9k_is_radar_freq(ch->center_freq))
+ continue;
+ if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
+ ch->flags &= ~NL80211_RRF_PASSIVE_SCAN;
}
}
@@ -283,10 +291,10 @@ void ath9k_reg_apply_world_flags(struct wiphy *wiphy, enum reg_set_by setby)
case 0x63:
case 0x66:
case 0x67:
- ath9k_reg_apply_5ghz_adhoc_flags(wiphy, setby);
+ ath9k_reg_apply_5ghz_beaconing_flags(wiphy, setby);
break;
case 0x68:
- ath9k_reg_apply_5ghz_adhoc_flags(wiphy, setby);
+ ath9k_reg_apply_5ghz_beaconing_flags(wiphy, setby);
ath9k_reg_apply_active_scan_flags(wiphy, setby);
break;
}