From: Felix Fietkau <nbd@openwrt.org>
Date: Sat, 18 Dec 2010 02:21:21 +0000 (+0000)
Subject: mac80211: merge pending regulatory fixes
X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=180012a2e00b294e06f03bf0e68c080555671a8d;p=openwrt%2Fsvn-archive%2Farchive.git

mac80211: merge pending regulatory fixes

SVN-Revision: 24658
---

diff --git a/package/mac80211/patches/340-pending_regulatory_fixes.patch b/package/mac80211/patches/340-pending_regulatory_fixes.patch
new file mode 100644
index 0000000000..4fdb2067ce
--- /dev/null
+++ b/package/mac80211/patches/340-pending_regulatory_fixes.patch
@@ -0,0 +1,42 @@
+--- a/drivers/net/wireless/ath/regd.c
++++ b/drivers/net/wireless/ath/regd.c
+@@ -342,6 +342,14 @@ int ath_reg_notifier_apply(struct wiphy 
+ 	/* We always apply this */
+ 	ath_reg_apply_radar_flags(wiphy);
+ 
++	/*
++	 * This would happen when we have sent a custom regulatory request
++	 * a world regulatory domain and the scheduler hasn't yet processed
++	 * any pending requests in the queue.
++	 */
++	if (!request)
++		return 0;
++
+ 	switch (request->initiator) {
+ 	case NL80211_REGDOM_SET_BY_DRIVER:
+ 	case NL80211_REGDOM_SET_BY_CORE:
+--- a/include/net/cfg80211.h
++++ b/include/net/cfg80211.h
+@@ -1417,7 +1417,9 @@ struct ieee80211_txrx_stypes {
+ 
+ /**
+  * struct wiphy - wireless hardware description
+- * @reg_notifier: the driver's regulatory notification callback
++ * @reg_notifier: the driver's regulatory notification callback,
++ *	note that if your driver uses wiphy_apply_custom_regulatory()
++ *	the reg_notifier's request can be passed as NULL
+  * @regd: the driver's regulatory domain, if one was requested via
+  * 	the regulatory_hint() API. This can be used by the driver
+  *	on the reg_notifier() if it chooses to ignore future
+--- a/net/wireless/reg.c
++++ b/net/wireless/reg.c
+@@ -662,7 +662,8 @@ static int freq_reg_info_regd(struct wip
+ 	 * Follow the driver's regulatory domain, if present, unless a country
+ 	 * IE has been processed or a user wants to help complaince further
+ 	 */
+-	if (last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE &&
++	if (!custom_regd &&
++	    last_request->initiator != NL80211_REGDOM_SET_BY_COUNTRY_IE &&
+ 	    last_request->initiator != NL80211_REGDOM_SET_BY_USER &&
+ 	    wiphy->regd)
+ 		regd = wiphy->regd;
diff --git a/package/mac80211/patches/404-ath_regd_optional.patch b/package/mac80211/patches/404-ath_regd_optional.patch
index 9bda94b037..9e44359a11 100644
--- a/package/mac80211/patches/404-ath_regd_optional.patch
+++ b/package/mac80211/patches/404-ath_regd_optional.patch
@@ -33,7 +33,7 @@
  	if (!wiphy->bands[IEEE80211_BAND_5GHZ])
  		return;
  
-@@ -449,6 +461,10 @@ ath_regd_init_wiphy(struct ath_regulator
+@@ -457,6 +469,10 @@ ath_regd_init_wiphy(struct ath_regulator
  {
  	const struct ieee80211_regdomain *regd;
  
diff --git a/package/mac80211/patches/540-ath9k_disable_hw_rfkill.patch b/package/mac80211/patches/540-ath9k_disable_hw_rfkill.patch
index 83cd9a1ce4..a74ea0da97 100644
--- a/package/mac80211/patches/540-ath9k_disable_hw_rfkill.patch
+++ b/package/mac80211/patches/540-ath9k_disable_hw_rfkill.patch
@@ -82,7 +82,7 @@
  	if (!ath9k_hw_private_ops(ah)->restore_chainmask)
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1406,7 +1406,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1402,7 +1402,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
  	ath9k_hw_init_qos(ah);
  
  	if (ah->caps.hw_caps & ATH9K_HW_CAP_RFSILENT)
@@ -93,7 +93,7 @@
  
 --- a/drivers/net/wireless/ath/ath9k/hw.h
 +++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -576,7 +576,6 @@ struct ath_hw_private_ops {
+@@ -581,7 +581,6 @@ struct ath_hw_private_ops {
  	void (*set_delta_slope)(struct ath_hw *ah, struct ath9k_channel *chan);
  	bool (*rfbus_req)(struct ath_hw *ah);
  	void (*rfbus_done)(struct ath_hw *ah);