mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-24 07:46:48 +00:00
79a768a90f
If a device uses the default EEPROM code, typically only the main CTLs are valid, and they do not apply properly when switching to a different regulatory domain. If the regdomain deviates from the EEPROM one, force the world roaming regdomain to ensure that power limits are sane Signed-off-by: Felix Fietkau <nbd@nbd.name>
85 lines
2.1 KiB
Diff
85 lines
2.1 KiB
Diff
--- a/drivers/net/wireless/ath/regd.c
|
|
+++ b/drivers/net/wireless/ath/regd.c
|
|
@@ -44,7 +44,8 @@ static struct reg_dmn_pair_mapping *ath_
|
|
NL80211_RRF_NO_OFDM)
|
|
|
|
/* We allow IBSS on these on a case by case basis by regulatory domain */
|
|
-#define ATH9K_5GHZ_5150_5350 REG_RULE(5150-10, 5350+10, 80, 0, 30,\
|
|
+#define ATH9K_5GHZ_5150_5350 REG_RULE(5150-10, 5240+10, 80, 0, 30, 0),\
|
|
+ REG_RULE(5260-10, 5350+10, 80, 0, 30,\
|
|
NL80211_RRF_NO_IR)
|
|
#define ATH9K_5GHZ_5470_5850 REG_RULE(5470-10, 5850+10, 80, 0, 30,\
|
|
NL80211_RRF_NO_IR)
|
|
@@ -62,57 +63,56 @@ static struct reg_dmn_pair_mapping *ath_
|
|
#define ATH9K_5GHZ_NO_MIDBAND ATH9K_5GHZ_5150_5350, \
|
|
ATH9K_5GHZ_5725_5850
|
|
|
|
+#define REGD_RULES(...) \
|
|
+ .reg_rules = { __VA_ARGS__ }, \
|
|
+ .n_reg_rules = ARRAY_SIZE(((struct ieee80211_reg_rule[]) { __VA_ARGS__ }))
|
|
+
|
|
/* Can be used for:
|
|
* 0x60, 0x61, 0x62 */
|
|
static const struct ieee80211_regdomain ath_world_regdom_60_61_62 = {
|
|
- .n_reg_rules = 5,
|
|
.alpha2 = "99",
|
|
- .reg_rules = {
|
|
+ REGD_RULES(
|
|
ATH9K_2GHZ_ALL,
|
|
ATH9K_5GHZ_ALL,
|
|
- }
|
|
+ )
|
|
};
|
|
|
|
/* Can be used by 0x63 and 0x65 */
|
|
static const struct ieee80211_regdomain ath_world_regdom_63_65 = {
|
|
- .n_reg_rules = 4,
|
|
.alpha2 = "99",
|
|
- .reg_rules = {
|
|
+ REGD_RULES(
|
|
ATH9K_2GHZ_CH01_11,
|
|
ATH9K_2GHZ_CH12_13,
|
|
ATH9K_5GHZ_NO_MIDBAND,
|
|
- }
|
|
+ )
|
|
};
|
|
|
|
/* Can be used by 0x64 only */
|
|
static const struct ieee80211_regdomain ath_world_regdom_64 = {
|
|
- .n_reg_rules = 3,
|
|
.alpha2 = "99",
|
|
- .reg_rules = {
|
|
+ REGD_RULES(
|
|
ATH9K_2GHZ_CH01_11,
|
|
ATH9K_5GHZ_NO_MIDBAND,
|
|
- }
|
|
+ )
|
|
};
|
|
|
|
/* Can be used by 0x66 and 0x69 */
|
|
static const struct ieee80211_regdomain ath_world_regdom_66_69 = {
|
|
- .n_reg_rules = 3,
|
|
.alpha2 = "99",
|
|
- .reg_rules = {
|
|
+ REGD_RULES(
|
|
ATH9K_2GHZ_CH01_11,
|
|
ATH9K_5GHZ_ALL,
|
|
- }
|
|
+ )
|
|
};
|
|
|
|
/* Can be used by 0x67, 0x68, 0x6A and 0x6C */
|
|
static const struct ieee80211_regdomain ath_world_regdom_67_68_6A_6C = {
|
|
- .n_reg_rules = 4,
|
|
.alpha2 = "99",
|
|
- .reg_rules = {
|
|
+ REGD_RULES(
|
|
ATH9K_2GHZ_CH01_11,
|
|
ATH9K_2GHZ_CH12_13,
|
|
ATH9K_5GHZ_ALL,
|
|
- }
|
|
+ )
|
|
};
|
|
|
|
static bool dynamic_country_user_possible(struct ath_regulatory *reg)
|