12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
- Date: Fri, 6 Jan 2017 13:29:56 +0100
- Subject: mac80211: Allow switching of the ath regulatory domain
- ath10k has to switch the regulatory domain when switching the default
- country when ATH_USER_REGD is enabled. This is for example important when
- switching from country US (FCC) to DE (ETSI). The ath implementation will
- use ath_reg_dyn_country_user_allow to check if this is allowed.
- Unfortunately, this function always seems to return false to
- ath_reg_notifier_apply even when ATH_USER_REGD is enabled. But it must
- actually always accept the requests from the user (when ATH_USER_REGD is
- enabled) to correctly set the conformance test limits in the ath10k binary
- blob.
- Not doing it will sometimes allow too high transmit powers on edge channels
- for correctly calibrated devices outside their default regulatory domain.
- Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
- Forwarded: https://github.com/openwrt/openwrt/pull/306
- diff --git a/package/kernel/mac80211/patches/402-ath_regd_optional.patch b/package/kernel/mac80211/patches/402-ath_regd_optional.patch
- index 463428371b4c96ee63b6eba1477023ff739c6129..a3572a297718f883f6126fc33aff5e14a046b9a0 100644
- --- a/package/kernel/mac80211/patches/402-ath_regd_optional.patch
- +++ b/package/kernel/mac80211/patches/402-ath_regd_optional.patch
- @@ -1,6 +1,15 @@
- --- a/drivers/net/wireless/ath/regd.c
- +++ b/drivers/net/wireless/ath/regd.c
- -@@ -341,6 +341,10 @@ ath_reg_apply_beaconing_flags(struct wip
- +@@ -188,6 +188,8 @@ static bool dynamic_country_user_possibl
- +
- + static bool ath_reg_dyn_country_user_allow(struct ath_regulatory *reg)
- + {
- ++ if (config_enabled(CPTCFG_ATH_USER_REGD))
- ++ return true;
- + if (!config_enabled(CPTCFG_ATH_REG_DYNAMIC_USER_REG_HINTS))
- + return false;
- + if (!dynamic_country_user_possible(reg))
- +@@ -341,6 +343,10 @@ ath_reg_apply_beaconing_flags(struct wip
- struct ieee80211_channel *ch;
- unsigned int i;
-
- @@ -11,7 +20,7 @@
- for (band = 0; band < NUM_NL80211_BANDS; band++) {
- if (!wiphy->bands[band])
- continue;
- -@@ -374,6 +378,10 @@ ath_reg_apply_ir_flags(struct wiphy *wip
- +@@ -374,6 +380,10 @@ ath_reg_apply_ir_flags(struct wiphy *wip
- {
- struct ieee80211_supported_band *sband;
-
- @@ -22,7 +31,7 @@
- sband = wiphy->bands[NL80211_BAND_2GHZ];
- if (!sband)
- return;
- -@@ -402,6 +410,10 @@ static void ath_reg_apply_radar_flags(st
- +@@ -402,6 +412,10 @@ static void ath_reg_apply_radar_flags(st
- struct ieee80211_channel *ch;
- unsigned int i;
-
- @@ -33,7 +42,7 @@
- if (!wiphy->bands[NL80211_BAND_5GHZ])
- return;
-
- -@@ -633,6 +645,11 @@ ath_regd_init_wiphy(struct ath_regulator
- +@@ -633,6 +647,11 @@ ath_regd_init_wiphy(struct ath_regulator
- const struct ieee80211_regdomain *regd;
-
- wiphy->reg_notifier = reg_notifier;
|