compat-wireless: remove cfg80211 certification onus pending patches
authorLuis R. Rodriguez <mcgrof@frijolero.org>
Mon, 9 Jul 2012 23:59:12 +0000 (16:59 -0700)
committerLuis R. Rodriguez <mcgrof@frijolero.org>
Mon, 9 Jul 2012 23:59:12 +0000 (16:59 -0700)
A new iteration was sent, I'll update that next.

Signed-off-by: Luis R. Rodriguez <mcgrof@frijolero.org>
linux-next-pending/0023-cfg80211-add-CONFIG_CFG80211_CERTIFICATION_ONUS.patch [deleted file]
linux-next-pending/0024-ath5k-replace-modparam_all_channels-with-CONFIG_ATH5.patch [deleted file]
linux-next-pending/0025-ath9k-make-CONFIG_ATH9K_DFS_CERTIFIED-depend-on-CFG8.patch [deleted file]
linux-next-pending/0026-cfg80211-add-cellular-base-station-regulatory-hint-s.patch [deleted file]

diff --git a/linux-next-pending/0023-cfg80211-add-CONFIG_CFG80211_CERTIFICATION_ONUS.patch b/linux-next-pending/0023-cfg80211-add-CONFIG_CFG80211_CERTIFICATION_ONUS.patch
deleted file mode 100644 (file)
index 4ddf557..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-From 4bd24626dcaefa8708144b446ca8cd41118ac595 Mon Sep 17 00:00:00 2001
-From: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
-Subject: [PATCH 1/4] cfg80211: add CONFIG_CFG80211_CERTIFICATION_ONUS
-
-This adds CONFIG_CFG80211_CERTIFICATION_ONUS which is to
-be used for features / code which require a bit of work on
-the system integrator's part to ensure that the system will
-still pass 802.11 regulatory certification. This option is
-also usable for researchers and experimenters looking to add
-code in the kernel without impacting compliant code.
-
-We'd use CONFIG_EXPERT alone but it seems that most standard
-Linux distributions are enabling CONFIG_EXPERT already. This
-allows us to define 802.11 specific kernel features under a
-flag that is intended by design to be disabled by standard
-Linux distributions, and only enabled by system integrators
-or distributions that have done work to ensure regulatory
-certification on the system with the enabled features.
-
-Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- net/wireless/Kconfig |   21 +++++++++++++++++++++
- 1 file changed, 21 insertions(+)
-
-diff --git a/net/wireless/Kconfig b/net/wireless/Kconfig
-index 4d2b1ec..fe4adb1 100644
---- a/net/wireless/Kconfig
-+++ b/net/wireless/Kconfig
-@@ -74,6 +74,27 @@ config CFG80211_REG_DEBUG
-         If unsure, say N.
-+config CFG80211_CERTIFICATION_ONUS
-+      bool "cfg80211 certification onus"
-+      depends on CFG80211 && EXPERT
-+      default n
-+      ---help---
-+        You should disable this option unless you are both capable
-+        and willing to ensure your system will remain regulatory
-+        compliant with the features available under this option.
-+        Some options may still be under heavy development and
-+        for whatever reason regulatory compliance has not or
-+        cannot yet be verified. Regulatory verification may at
-+        times only be possible until you have the final system
-+        in place.
-+
-+        This option should only be enabled by system integrators
-+        or distributions that have done work necessary to ensure
-+        regulatory certification on the system with the enabled
-+        features. Alternatively you can enable this option if
-+        you are a wireless researcher and are working in a controlled
-+        and approved environment by your local regulatory agency.
-+
- config CFG80211_DEFAULT_PS
-       bool "enable powersave by default"
-       depends on CFG80211
--- 
-1.7.10.rc1.22.gf5241
-
diff --git a/linux-next-pending/0024-ath5k-replace-modparam_all_channels-with-CONFIG_ATH5.patch b/linux-next-pending/0024-ath5k-replace-modparam_all_channels-with-CONFIG_ATH5.patch
deleted file mode 100644 (file)
index b36a9f2..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-From 2ec8798bb160064ac5a4d8080d04cd6be618d86a Mon Sep 17 00:00:00 2001
-From: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
-Date: Wed, 20 Jun 2012 07:57:40 -0700
-Subject: [PATCH 24/26] ath5k: replace modparam_all_channels with
- CONFIG_ATH5K_TEST_CHANNELS
-
-This stashes away this feature from standard kernel builds.
-
-Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath5k/Kconfig |    8 ++++++++
- drivers/net/wireless/ath/ath5k/base.c  |   17 ++++++++++-------
- 2 files changed, 18 insertions(+), 7 deletions(-)
-
-diff --git a/drivers/net/wireless/ath/ath5k/Kconfig b/drivers/net/wireless/ath/ath5k/Kconfig
-index e18a9aa..338c5c4 100644
---- a/drivers/net/wireless/ath/ath5k/Kconfig
-+++ b/drivers/net/wireless/ath/ath5k/Kconfig
-@@ -64,3 +64,11 @@ config ATH5K_PCI
-       ---help---
-         This adds support for PCI type chipsets of the 5xxx Atheros
-         family.
-+
-+config ATH5K_TEST_CHANNELS
-+      bool "Enables testing channels on ath5k"
-+      depends on ATH5K && CFG80211_CERTIFICATION_ONUS
-+      ---help---
-+        This enables non-standard IEEE 802.11 channels on ath5k, which
-+        can be used for research purposes. This option should be disabled
-+        unless doing research.
-diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
-index 44ad6fe..8c4c040 100644
---- a/drivers/net/wireless/ath/ath5k/base.c
-+++ b/drivers/net/wireless/ath/ath5k/base.c
-@@ -74,10 +74,6 @@ bool ath5k_modparam_nohwcrypt;
- module_param_named(nohwcrypt, ath5k_modparam_nohwcrypt, bool, S_IRUGO);
- MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
--static bool modparam_all_channels;
--module_param_named(all_channels, modparam_all_channels, bool, S_IRUGO);
--MODULE_PARM_DESC(all_channels, "Expose all channels the device can use.");
--
- static bool modparam_fastchanswitch;
- module_param_named(fastchanswitch, modparam_fastchanswitch, bool, S_IRUGO);
- MODULE_PARM_DESC(fastchanswitch, "Enable fast channel switching for AR2413/AR5413 radios.");
-@@ -258,8 +254,15 @@ static int ath5k_reg_notifier(struct wiphy *wiphy, struct regulatory_request *re
- \********************/
- /*
-- * Returns true for the channel numbers used without all_channels modparam.
-+ * Returns true for the channel numbers used.
-  */
-+#ifdef CONFIG_ATH5K_TEST_CHANNELS
-+static bool ath5k_is_standard_channel(short chan, enum ieee80211_band band)
-+{
-+      return true;
-+}
-+
-+#else
- static bool ath5k_is_standard_channel(short chan, enum ieee80211_band band)
- {
-       if (band == IEEE80211_BAND_2GHZ && chan <= 14)
-@@ -276,6 +279,7 @@ static bool ath5k_is_standard_channel(short chan, enum ieee80211_band band)
-               /* 802.11j 4.9GHz (20MHz) */
-               (chan == 184 || chan == 188 || chan == 192 || chan == 196));
- }
-+#endif
- static unsigned int
- ath5k_setup_channels(struct ath5k_hw *ah, struct ieee80211_channel *channels,
-@@ -316,8 +320,7 @@ ath5k_setup_channels(struct ath5k_hw *ah, struct ieee80211_channel *channels,
-               if (!ath5k_channel_ok(ah, &channels[count]))
-                       continue;
--              if (!modparam_all_channels &&
--                  !ath5k_is_standard_channel(ch, band))
-+              if (!ath5k_is_standard_channel(ch, band))
-                       continue;
-               count++;
--- 
-1.7.10.rc1.22.gf5241
-
diff --git a/linux-next-pending/0025-ath9k-make-CONFIG_ATH9K_DFS_CERTIFIED-depend-on-CFG8.patch b/linux-next-pending/0025-ath9k-make-CONFIG_ATH9K_DFS_CERTIFIED-depend-on-CFG8.patch
deleted file mode 100644 (file)
index b13c219..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-From 7d2977915bf300ffcbf55b51d3e37e80944906ae Mon Sep 17 00:00:00 2001
-From: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
-Date: Wed, 20 Jun 2012 07:57:41 -0700
-Subject: [PATCH 25/26] ath9k: make CONFIG_ATH9K_DFS_CERTIFIED depend on
- CFG80211_CERTIFICATION_ONUS
-
-Turns out every most standard Linux distributions enable
-CONFIG_EXPERT, so use the shiny new CFG80211_CERTIFICATION_ONUS
-which is meant by design to not be enabled by all Linux
-distributions.
-
-Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/Kconfig |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/net/wireless/ath/ath9k/Kconfig b/drivers/net/wireless/ath/ath9k/Kconfig
-index e507e78..c7aa664 100644
---- a/drivers/net/wireless/ath/ath9k/Kconfig
-+++ b/drivers/net/wireless/ath/ath9k/Kconfig
-@@ -64,7 +64,7 @@ config ATH9K_DEBUGFS
- config ATH9K_DFS_CERTIFIED
-       bool "Atheros DFS support for certified platforms"
--      depends on ATH9K && EXPERT
-+      depends on ATH9K && CFG80211_CERTIFICATION_ONUS
-       default n
-       ---help---
-         This option enables DFS support for initiating radiation on
--- 
-1.7.10.rc1.22.gf5241
-
diff --git a/linux-next-pending/0026-cfg80211-add-cellular-base-station-regulatory-hint-s.patch b/linux-next-pending/0026-cfg80211-add-cellular-base-station-regulatory-hint-s.patch
deleted file mode 100644 (file)
index 62e5882..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-From 9a5d96a9c10bf3717fe105309503ee146b5defdb Mon Sep 17 00:00:00 2001
-From: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
-Date: Wed, 20 Jun 2012 16:30:42 -0700
-Subject: [PATCH 26/26] cfg80211: add cellular base station regulatory hint
- support
-
-Cellular base stations can provide hints to cfg80211 about
-where they think we are. This can be done for example by on
-a cell phone. To enable these hints we simply allow them
-through as user regulatory hints but we allow userspace
-to clasify the hint. This option is only available for
-system integrators which are willing to enable
-CONFIG_CFG80211_CERTIFICATION_ONUS.
-
-Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- include/linux/nl80211.h  |   28 +++++++++++++++
- include/net/regulatory.h |    4 +++
- net/wireless/nl80211.c   |   15 +++++++-
- net/wireless/reg.c       |   88 ++++++++++++++++++++++++++++++++++++++++++----
- net/wireless/reg.h       |    4 ++-
- 5 files changed, 131 insertions(+), 8 deletions(-)
-
-diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
-index 74cc55c..2235533 100644
---- a/include/linux/nl80211.h
-+++ b/include/linux/nl80211.h
-@@ -1242,6 +1242,12 @@ enum nl80211_commands {
-  * @NL80211_ATTR_BG_SCAN_PERIOD: Background scan period in seconds
-  *      or 0 to disable background scan.
-  *
-+ * @NL80211_ATTR_USER_REG_HINT_TYPE: type of regulatory hint passed from
-+ *    userspace. If unset it is assumed the hint comes directly from
-+ *    a user. If set code could specify exactly what type of source
-+ *    was used to provide the hint. For the different types of
-+ *    allowed user regulatory hints see nl80211_user_reg_hint_type.
-+ *
-  * @NL80211_ATTR_MAX: highest attribute number currently defined
-  * @__NL80211_ATTR_AFTER_LAST: internal use
-  */
-@@ -1493,6 +1499,8 @@ enum nl80211_attrs {
-       NL80211_ATTR_BG_SCAN_PERIOD,
-+      NL80211_ATTR_USER_REG_HINT_TYPE,
-+
-       /* add attributes here, update the policy in nl80211.c */
-       __NL80211_ATTR_AFTER_LAST,
-@@ -2045,6 +2053,22 @@ enum nl80211_dfs_regions {
- };
- /**
-+ * enum nl80211_user_reg_hint_type - type of user regulatory hint
-+ *
-+ * @NL80211_USER_REG_HINT_USER: a user sent the hint. This is always
-+ *    assumed if the attribute is not set.
-+ * @NL80211_USER_REG_HINT_CELL_BASE: the hint comes from a cellular
-+ *    base station. Device drivers that have been tested to work
-+ *    properly to support this type of hint can enable these hints
-+ *    by setting the NL80211_FEATURE_CELL_BASE_REG_HINTS feature
-+ *    capability on the struct wiphy.
-+ */
-+enum nl80211_user_reg_hint_type {
-+      NL80211_USER_REG_HINT_USER      = 0,
-+      NL80211_USER_REG_HINT_CELL_BASE = 1,
-+};
-+
-+/**
-  * enum nl80211_survey_info - survey information
-  *
-  * These attribute types are used with %NL80211_ATTR_SURVEY_INFO
-@@ -2933,11 +2957,15 @@ enum nl80211_ap_sme_features {
-  * @NL80211_FEATURE_HT_IBSS: This driver supports IBSS with HT datarates.
-  * @NL80211_FEATURE_INACTIVITY_TIMER: This driver takes care of freeing up
-  *    the connected inactive stations in AP mode.
-+ * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested
-+ *    to work properly to suppport receiving regulatory hints from
-+ *    cellular base stations.
-  */
- enum nl80211_feature_flags {
-       NL80211_FEATURE_SK_TX_STATUS    = 1 << 0,
-       NL80211_FEATURE_HT_IBSS         = 1 << 1,
-       NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2,
-+      NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3,
- };
- /**
-diff --git a/include/net/regulatory.h b/include/net/regulatory.h
-index a5f7993..61c394a 100644
---- a/include/net/regulatory.h
-+++ b/include/net/regulatory.h
-@@ -52,6 +52,9 @@ enum environment_cap {
-  *    DFS master operation on a known DFS region (NL80211_DFS_*),
-  *    dfs_region represents that region. Drivers can use this and the
-  *    @alpha2 to adjust their device's DFS parameters as required.
-+ * @user_reg_hint_type: if the @initiator was of type
-+ *    %NL80211_REGDOM_SET_BY_USER, this clasifies the type
-+ *    of hint passed. This could be any of the %NL80211_USER_REG_HINT_*
-  * @intersect: indicates whether the wireless core should intersect
-  *    the requested regulatory domain with the presently set regulatory
-  *    domain.
-@@ -70,6 +73,7 @@ enum environment_cap {
- struct regulatory_request {
-       int wiphy_idx;
-       enum nl80211_reg_initiator initiator;
-+      enum nl80211_user_reg_hint_type user_reg_hint_type;
-       char alpha2[2];
-       u8 dfs_region;
-       bool intersect;
-diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
-index 77102e6..037cc57a 100644
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -294,6 +294,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
-       [NL80211_ATTR_NOACK_MAP] = { .type = NLA_U16 },
-       [NL80211_ATTR_INACTIVITY_TIMEOUT] = { .type = NLA_U16 },
-       [NL80211_ATTR_BG_SCAN_PERIOD] = { .type = NLA_U16 },
-+      [NL80211_ATTR_USER_REG_HINT_TYPE] = { .type = NLA_U8 },
- };
- /* policy for the key attributes */
-@@ -3480,6 +3481,7 @@ static int nl80211_req_set_reg(struct sk_buff *skb, struct genl_info *info)
- {
-       int r;
-       char *data = NULL;
-+      enum nl80211_user_reg_hint_type user_reg_hint_type;
-       /*
-        * You should only get this when cfg80211 hasn't yet initialized
-@@ -3499,7 +3501,13 @@ static int nl80211_req_set_reg(struct sk_buff *skb, struct genl_info *info)
-       data = nla_data(info->attrs[NL80211_ATTR_REG_ALPHA2]);
--      r = regulatory_hint_user(data);
-+      if (info->attrs[NL80211_ATTR_USER_REG_HINT_TYPE])
-+              user_reg_hint_type =
-+                nla_get_u8(info->attrs[NL80211_ATTR_USER_REG_HINT_TYPE]);
-+      else
-+              user_reg_hint_type = NL80211_USER_REG_HINT_USER;
-+
-+      r = regulatory_hint_user(data, user_reg_hint_type);
-       return r;
- }
-@@ -3869,6 +3877,11 @@ static int nl80211_get_reg(struct sk_buff *skb, struct genl_info *info)
-                       cfg80211_regdomain->dfs_region)))
-               goto nla_put_failure;
-+      if (reg_last_request_cell_base() &&
-+          nla_put_u8(msg, NL80211_ATTR_USER_REG_HINT_TYPE,
-+                     NL80211_USER_REG_HINT_CELL_BASE))
-+              goto nla_put_failure;
-+
-       nl_reg_rules = nla_nest_start(msg, NL80211_ATTR_REG_RULES);
-       if (!nl_reg_rules)
-               goto nla_put_failure;
-diff --git a/net/wireless/reg.c b/net/wireless/reg.c
-index b2b3222..3644159 100644
---- a/net/wireless/reg.c
-+++ b/net/wireless/reg.c
-@@ -911,6 +911,56 @@ static void handle_band(struct wiphy *wiphy,
-               handle_channel(wiphy, initiator, band, i);
- }
-+static bool reg_request_cell_base(struct regulatory_request *request)
-+{
-+      if (request->initiator != NL80211_REGDOM_SET_BY_USER)
-+              return false;
-+      if (request->user_reg_hint_type != NL80211_USER_REG_HINT_CELL_BASE)
-+              return false;
-+      return true;
-+}
-+
-+bool reg_last_request_cell_base(void)
-+{
-+      assert_cfg80211_lock();
-+
-+      mutex_lock(&reg_mutex);
-+      return reg_request_cell_base(last_request);
-+      mutex_unlock(&reg_mutex);
-+}
-+
-+#ifdef CONFIG_CFG80211_CERTIFICATION_ONUS
-+
-+/* Core specific check */
-+static int reg_ignore_cell_hint(struct regulatory_request *pending_request)
-+{
-+      if (reg_request_cell_base(last_request)) {
-+              if (!regdom_changes(pending_request->alpha2))
-+                      return -EALREADY;
-+              return 0;
-+      }
-+      return 0;
-+}
-+
-+/* Device specific check */
-+static bool reg_dev_ignore_cell_hint(struct wiphy *wiphy)
-+{
-+      if (!(wiphy->features & NL80211_FEATURE_CELL_BASE_REG_HINTS))
-+              return true;
-+      return false;
-+}
-+#else
-+static int reg_ignore_cell_hint(struct regulatory_request *pending_request)
-+{
-+      return -EOPNOTSUPP;
-+}
-+static int reg_dev_ignore_cell_hint(struct wiphy *wiphy)
-+{
-+      return true;
-+}
-+#endif
-+
-+
- static bool ignore_reg_update(struct wiphy *wiphy,
-                             enum nl80211_reg_initiator initiator)
- {
-@@ -944,6 +994,9 @@ static bool ignore_reg_update(struct wiphy *wiphy,
-               return true;
-       }
-+      if (reg_request_cell_base(last_request))
-+              return reg_dev_ignore_cell_hint(wiphy);
-+
-       return false;
- }
-@@ -1307,6 +1360,13 @@ static int ignore_request(struct wiphy *wiphy,
-               return 0;
-       case NL80211_REGDOM_SET_BY_COUNTRY_IE:
-+              if (reg_request_cell_base(last_request)) {
-+                      /* Trust a Cell base station over the AP's country IE */
-+                      if (regdom_changes(pending_request->alpha2))
-+                              return -EOPNOTSUPP;
-+                      return -EALREADY;
-+              }
-+
-               last_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx);
-               if (unlikely(!is_an_alpha2(pending_request->alpha2)))
-@@ -1351,6 +1411,12 @@ static int ignore_request(struct wiphy *wiphy,
-               return REG_INTERSECT;
-       case NL80211_REGDOM_SET_BY_USER:
-+              if (reg_request_cell_base(pending_request))
-+                      return reg_ignore_cell_hint(pending_request);
-+
-+              if (reg_request_cell_base(last_request))
-+                      return -EOPNOTSUPP;
-+
-               if (last_request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE)
-                       return REG_INTERSECT;
-               /*
-@@ -1640,7 +1706,8 @@ static int regulatory_hint_core(const char *alpha2)
- }
- /* User hints */
--int regulatory_hint_user(const char *alpha2)
-+int regulatory_hint_user(const char *alpha2,
-+                       enum nl80211_user_reg_hint_type user_reg_hint_type)
- {
-       struct regulatory_request *request;
-@@ -1654,6 +1721,7 @@ int regulatory_hint_user(const char *alpha2)
-       request->alpha2[0] = alpha2[0];
-       request->alpha2[1] = alpha2[1];
-       request->initiator = NL80211_REGDOM_SET_BY_USER;
-+      request->user_reg_hint_type = user_reg_hint_type;
-       queue_regulatory_request(request);
-@@ -1906,7 +1974,7 @@ static void restore_regulatory_settings(bool reset_user)
-        * settings, user regulatory settings takes precedence.
-        */
-       if (is_an_alpha2(alpha2))
--              regulatory_hint_user(user_alpha2);
-+              regulatory_hint_user(user_alpha2, NL80211_USER_REG_HINT_USER);
-       if (list_empty(&tmp_reg_req_list))
-               return;
-@@ -2081,9 +2149,16 @@ static void print_regdomain(const struct ieee80211_regdomain *rd)
-       else {
-               if (is_unknown_alpha2(rd->alpha2))
-                       pr_info("Regulatory domain changed to driver built-in settings (unknown country)\n");
--              else
--                      pr_info("Regulatory domain changed to country: %c%c\n",
--                              rd->alpha2[0], rd->alpha2[1]);
-+              else {
-+                      if (reg_request_cell_base(last_request))
-+                              pr_info("Regulatory domain changed "
-+                                      "to country: %c%c by Cell Station\n",
-+                                      rd->alpha2[0], rd->alpha2[1]);
-+                      else
-+                              pr_info("Regulatory domain changed "
-+                                      "to country: %c%c\n",
-+                                      rd->alpha2[0], rd->alpha2[1]);
-+              }
-       }
-       print_dfs_region(rd->dfs_region);
-       print_rd_rules(rd);
-@@ -2364,7 +2439,8 @@ int __init regulatory_init(void)
-        * as a user hint.
-        */
-       if (!is_world_regdom(ieee80211_regdom))
--              regulatory_hint_user(ieee80211_regdom);
-+              regulatory_hint_user(ieee80211_regdom,
-+                                   NL80211_USER_REG_HINT_USER);
-       return 0;
- }
-diff --git a/net/wireless/reg.h b/net/wireless/reg.h
-index e2aaaf5..ba1097e 100644
---- a/net/wireless/reg.h
-+++ b/net/wireless/reg.h
-@@ -22,7 +22,8 @@ bool is_world_regdom(const char *alpha2);
- bool reg_is_valid_request(const char *alpha2);
- bool reg_supported_dfs_region(u8 dfs_region);
--int regulatory_hint_user(const char *alpha2);
-+int regulatory_hint_user(const char *alpha2,
-+                       enum nl80211_user_reg_hint_type user_reg_hint_type);
- int reg_device_uevent(struct device *dev, struct kobj_uevent_env *env);
- void reg_device_remove(struct wiphy *wiphy);
-@@ -33,6 +34,7 @@ void regulatory_exit(void);
- int set_regdom(const struct ieee80211_regdomain *rd);
- void regulatory_update(struct wiphy *wiphy, enum nl80211_reg_initiator setby);
-+bool reg_last_request_cell_base(void);
- /**
-  * regulatory_hint_found_beacon - hints a beacon was found on a channel
--- 
-1.7.10.rc1.22.gf5241
-