aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath9k/regd.c
diff options
context:
space:
mode:
authorLuis R. Rodriguez <lrodriguez@atheros.com>2009-01-28 15:17:49 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-02-09 15:03:38 -0500
commit7519a8f0778bdb14f07cf685fa5fee6ab07e734c (patch)
tree6892ab013e4ff9a55d366cf6b9c5ca139d89ebd2 /drivers/net/wireless/ath9k/regd.c
parent547e4c2e64d0be5e8491abb49ee6b0f0f8272de1 (diff)
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/regd.c')
-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 cccec40139c2..dfcc3b5274cb 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)
160 return (center_freq >= 5260 && center_freq <= 5700); 160 return (center_freq >= 5260 && center_freq <= 5700);
161} 161}
162 162
163/* Enable adhoc on 5 GHz if allowed by 11d */ 163/*
164static void ath9k_reg_apply_5ghz_adhoc_flags(struct wiphy *wiphy, 164 * Enable adhoc on 5 GHz if allowed by 11d.
165 * Remove passive scan if channel is allowed by 11d,
166 * except when on radar frequencies.
167 */
168static void ath9k_reg_apply_5ghz_beaconing_flags(struct wiphy *wiphy,
165 enum reg_set_by setby) 169 enum reg_set_by setby)
166{ 170{
167 struct ieee80211_supported_band *sband; 171 struct ieee80211_supported_band *sband;
@@ -189,6 +193,10 @@ static void ath9k_reg_apply_5ghz_adhoc_flags(struct wiphy *wiphy,
189 * probe */ 193 * probe */
190 if (!(reg_rule->flags & NL80211_RRF_NO_IBSS)) 194 if (!(reg_rule->flags & NL80211_RRF_NO_IBSS))
191 ch->flags &= ~NL80211_RRF_NO_IBSS; 195 ch->flags &= ~NL80211_RRF_NO_IBSS;
196 if (!ath9k_is_radar_freq(ch->center_freq))
197 continue;
198 if (!(reg_rule->flags & NL80211_RRF_PASSIVE_SCAN))
199 ch->flags &= ~NL80211_RRF_PASSIVE_SCAN;
192 } 200 }
193} 201}
194 202
@@ -283,10 +291,10 @@ void ath9k_reg_apply_world_flags(struct wiphy *wiphy, enum reg_set_by setby)
283 case 0x63: 291 case 0x63:
284 case 0x66: 292 case 0x66:
285 case 0x67: 293 case 0x67:
286 ath9k_reg_apply_5ghz_adhoc_flags(wiphy, setby); 294 ath9k_reg_apply_5ghz_beaconing_flags(wiphy, setby);
287 break; 295 break;
288 case 0x68: 296 case 0x68:
289 ath9k_reg_apply_5ghz_adhoc_flags(wiphy, setby); 297 ath9k_reg_apply_5ghz_beaconing_flags(wiphy, setby);
290 ath9k_reg_apply_active_scan_flags(wiphy, setby); 298 ath9k_reg_apply_active_scan_flags(wiphy, setby);
291 break; 299 break;
292 } 300 }