71 lines
2.7 KiB
Diff
71 lines
2.7 KiB
Diff
|
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;
|