summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis R. Rodriguez <mcgrof@do-not-panic.com>2013-11-05 09:18:00 -0800
committerJohannes Berg <johannes.berg@intel.com>2013-11-25 20:49:45 +0100
commit222ea5819901ed174db4df2e26aa5e982f857845 (patch)
tree1552374c866b454e657ca9978b4ac994e86966dc
parentfe7c3a1f20a419d86d3f90316d8efc2d04f3f0ed (diff)
cfg80211: force WIPHY_FLAG_CUSTOM_REGULATORY on wiphy_apply_custom_regulatory()
wiphy_apply_custom_regulatory() implies WIPHY_FLAG_CUSTOM_REGULATORY but we never enforced it, do that now and warn if the driver didn't set it. All drivers should be following this today already. Having WIPHY_FLAG_CUSTOM_REGULATORY does not however mean you will use wiphy_apply_custom_regulatory() though, you may have your own _orig value set up tools / helpers. The intel drivers are examples of this type of driver. Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--include/net/cfg80211.h7
-rw-r--r--net/wireless/reg.c4
2 files changed, 10 insertions, 1 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index c1b887413234..b7a825ecff56 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -2441,7 +2441,9 @@ struct cfg80211_ops {
* has its own custom regulatory domain and cannot identify the
* ISO / IEC 3166 alpha2 it belongs to. When this is enabled
* we will disregard the first regulatory hint (when the
- * initiator is %REGDOM_SET_BY_CORE).
+ * 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 wiphy.
* @WIPHY_FLAG_STRICT_REGULATORY: tells us the driver for this device will
* ignore regulatory domain settings until it gets its own regulatory
* domain via its regulatory_hint() unless the regulatory hint is
@@ -3471,6 +3473,9 @@ int regulatory_hint(struct wiphy *wiphy, const char *alpha2);
* custom regulatory domain will be trusted completely and as such previous
* default channel settings will be disregarded. If no rule is found for a
* channel on the regulatory domain the channel will be disabled.
+ * Drivers using this for a wiphy should also set the wiphy flag
+ * WIPHY_FLAG_CUSTOM_REGULATORY or cfg80211 will set it for the wiphy
+ * that called this helper.
*/
void wiphy_apply_custom_regulatory(struct wiphy *wiphy,
const struct ieee80211_regdomain *regd);
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index e4e3337ba296..04b6fe4b7653 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1292,6 +1292,10 @@ void wiphy_apply_custom_regulatory(struct wiphy *wiphy,
enum ieee80211_band band;
unsigned int bands_set = 0;
+ WARN(!(wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY),
+ "wiphy should have WIPHY_FLAG_CUSTOM_REGULATORY\n");
+ wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
+
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
if (!wiphy->bands[band])
continue;