cfg80211: make regulatory_hint() remove REGULATORY_CUSTOM_REG
authorLuis R. Rodriguez <mcgrof@do-not-panic.com>
Sat, 14 Dec 2013 19:09:06 +0000 (20:09 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 13 Jan 2014 19:46:58 +0000 (14:46 -0500)
The REGULATORY_CUSTOM_REG can be used during early init with
the goal of overriding the wiphy's default regulatory settings
in case the alpha2 of the device is not known. In the case that
the alpha2 becomes known lets avoid having drivers having to
clear the REGULATORY_CUSTOM_REG flag by doing it for them
when regulatory_hint() is used.

Cc: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/regd.c
include/net/regulatory.h
net/wireless/reg.c

index 56c3d05c6224ec711f9c571f807d7681a4e2f364..e5e905910db49c569c8287de38141fc4a4b3d244 100644 (file)
@@ -652,8 +652,6 @@ ath_regd_init_wiphy(struct ath_regulatory *reg,
        }
 
        wiphy_apply_custom_regulatory(wiphy, regd);
-       if (!ath_is_world_regd(reg))
-               wiphy->regulatory_flags &= ~REGULATORY_CUSTOM_REG;
        ath_reg_apply_radar_flags(wiphy);
        ath_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg);
        return 0;
index c96a0b86f342cc1093dee253f070f9ff225b0ba6..b07cdc9fa454a57fe43d1eea0235522c26d0c1a6 100644 (file)
@@ -96,6 +96,10 @@ struct regulatory_request {
  *     initiator is %REGDOM_SET_BY_CORE). Drivers that use
  *     wiphy_apply_custom_regulatory() should have this flag set
  *     or the regulatory core will set it for the wiphy.
+ *     If you use regulatory_hint() *after* using
+ *     wiphy_apply_custom_regulatory() the wireless core will
+ *     clear the REGULATORY_CUSTOM_REG for your wiphy as it would be
+ *     implied that the device somehow gained knowledge of its region.
  * @REGULATORY_STRICT_REG: tells us that the wiphy for this device
  *     has regulatory domain that it wishes to be considered as the
  *     superset for regulatory rules. After this device gets its regulatory
index 7d20d844ca60e47e09bfea602a6bdca659d01ce6..9b897fca7487dd4fe8d8364368e8516ab8f369c0 100644 (file)
@@ -1853,6 +1853,8 @@ int regulatory_hint(struct wiphy *wiphy, const char *alpha2)
        if (WARN_ON(!alpha2 || !wiphy))
                return -EINVAL;
 
+       wiphy->regulatory_flags &= ~REGULATORY_CUSTOM_REG;
+
        request = kzalloc(sizeof(struct regulatory_request), GFP_KERNEL);
        if (!request)
                return -ENOMEM;