| From foo@baz Thu Mar 22 14:57:32 CET 2018 |
| From: Mohammed Shafi Shajakhan <mohammed@qti.qualcomm.com> |
| Date: Wed, 12 Apr 2017 23:19:37 +0530 |
| Subject: ath: Fix updating radar flags for coutry code India |
| |
| From: Mohammed Shafi Shajakhan <mohammed@qti.qualcomm.com> |
| |
| |
| [ Upstream commit c0c345d4cacc6a1f39d4856f37dcf6e34f51a5e4 ] |
| |
| As per latest regulatory update for India, channel 52, 56, 60, 64 |
| is no longer restricted to DFS. Enabling DFS/no infra flags in driver |
| results in applying all DFS related restrictions (like doing CAC etc |
| before this channel moves to 'available state') for these channels |
| even though the country code is programmed as 'India' in he hardware, |
| fix this by relaxing the frequency range while applying RADAR flags |
| only if the country code is programmed to India. If the frequency range |
| needs to modified based on different country code, ath_is_radar_freq |
| can be extended/modified dynamically. |
| |
| Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qti.qualcomm.com> |
| Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/wireless/ath/regd.c | 19 ++++++++++++------- |
| 1 file changed, 12 insertions(+), 7 deletions(-) |
| |
| --- a/drivers/net/wireless/ath/regd.c |
| +++ b/drivers/net/wireless/ath/regd.c |
| @@ -254,8 +254,12 @@ bool ath_is_49ghz_allowed(u16 regdomain) |
| EXPORT_SYMBOL(ath_is_49ghz_allowed); |
| |
| /* Frequency is one where radar detection is required */ |
| -static bool ath_is_radar_freq(u16 center_freq) |
| +static bool ath_is_radar_freq(u16 center_freq, |
| + struct ath_regulatory *reg) |
| + |
| { |
| + if (reg->country_code == CTRY_INDIA) |
| + return (center_freq >= 5500 && center_freq <= 5700); |
| return (center_freq >= 5260 && center_freq <= 5700); |
| } |
| |
| @@ -306,7 +310,7 @@ __ath_reg_apply_beaconing_flags(struct w |
| enum nl80211_reg_initiator initiator, |
| struct ieee80211_channel *ch) |
| { |
| - if (ath_is_radar_freq(ch->center_freq) || |
| + if (ath_is_radar_freq(ch->center_freq, reg) || |
| (ch->flags & IEEE80211_CHAN_RADAR)) |
| return; |
| |
| @@ -395,8 +399,9 @@ ath_reg_apply_ir_flags(struct wiphy *wip |
| } |
| } |
| |
| -/* Always apply Radar/DFS rules on freq range 5260 MHz - 5700 MHz */ |
| -static void ath_reg_apply_radar_flags(struct wiphy *wiphy) |
| +/* Always apply Radar/DFS rules on freq range 5500 MHz - 5700 MHz */ |
| +static void ath_reg_apply_radar_flags(struct wiphy *wiphy, |
| + struct ath_regulatory *reg) |
| { |
| struct ieee80211_supported_band *sband; |
| struct ieee80211_channel *ch; |
| @@ -409,7 +414,7 @@ static void ath_reg_apply_radar_flags(st |
| |
| for (i = 0; i < sband->n_channels; i++) { |
| ch = &sband->channels[i]; |
| - if (!ath_is_radar_freq(ch->center_freq)) |
| + if (!ath_is_radar_freq(ch->center_freq, reg)) |
| continue; |
| /* We always enable radar detection/DFS on this |
| * frequency range. Additionally we also apply on |
| @@ -505,7 +510,7 @@ void ath_reg_notifier_apply(struct wiphy |
| struct ath_common *common = container_of(reg, struct ath_common, |
| regulatory); |
| /* We always apply this */ |
| - ath_reg_apply_radar_flags(wiphy); |
| + ath_reg_apply_radar_flags(wiphy, reg); |
| |
| /* |
| * This would happen when we have sent a custom regulatory request |
| @@ -653,7 +658,7 @@ ath_regd_init_wiphy(struct ath_regulator |
| } |
| |
| wiphy_apply_custom_regulatory(wiphy, regd); |
| - ath_reg_apply_radar_flags(wiphy); |
| + ath_reg_apply_radar_flags(wiphy, reg); |
| ath_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg); |
| return 0; |
| } |