From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Fri, 2 Oct 2009 22:02:37 +0000 (+0000)
Subject: ath: add a compile time option that gives the user full control over regulatory setti... 
X-Git-Url: https://git.rohieb.name/openwrt.git/commitdiff_plain/d4b7776c0ddb50d940c04e3ac8cbacb001d1f6aa

ath: add a compile time option that gives the user full control over regulatory settings (disabled by default for now)

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@17828 3c298f89-4303-0410-b956-a3cf2f4a3e73
---

diff --git a/package/mac80211/Makefile b/package/mac80211/Makefile
index 1ca2314d6..fe7c191e2 100644
--- a/package/mac80211/Makefile
+++ b/package/mac80211/Makefile
@@ -270,6 +270,19 @@ define KernelPackage/zd1211rw
   AUTOLOAD:=$(call AutoLoad,60,zd1211rw)
 endef
 
+define KernelPackage/ath/config
+
+config ATH_USER_REGD
+	bool "Force Atheros drivers to respect the user's regdomain settings"
+	depends on PACKAGE_kmod-ath
+	help
+		Atheros' idea of regulatory handling is that the EEPROM of the card defines
+		the regulatory limits and the user is only allowed to restrict the settings
+		even further, even if the country allows frequencies or power levels that 
+		are forbidden by the EEPROM settings.
+		Select this option if you want the driver to respect the user's decision about
+		regulatory settings.
+endef
 
 define KernelPackage/ath
   $(call KernelPackage/mac80211/Default)
@@ -455,6 +468,7 @@ BUILDFLAGS:= \
 	$(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),-DCONFIG_MAC80211_DEBUGFS) \
 	$(if $(CONFIG_PACKAGE_ATH9K_DEBUG),-DCONFIG_ATH9K_DEBUG) \
 	-D__CONFIG_MAC80211_RC_DEFAULT=minstrel \
+	$(if $(CONFIG_ATH_USER_REGD),-DATH_USER_REGD=1)
 
 MAKE_OPTS:= \
 	CROSS_COMPILE="$(KERNEL_CROSS)" \
diff --git a/package/mac80211/patches/404-ath_regd_optional.patch b/package/mac80211/patches/404-ath_regd_optional.patch
new file mode 100644
index 000000000..eb6743152
--- /dev/null
+++ b/package/mac80211/patches/404-ath_regd_optional.patch
@@ -0,0 +1,68 @@
+--- a/drivers/net/wireless/ath/regd.c
++++ b/drivers/net/wireless/ath/regd.c
+@@ -19,6 +19,9 @@
+ #include <net/cfg80211.h>
+ #include <net/mac80211.h>
+ #include "regd.h"
++
++#ifndef ATH_USER_REGD
++
+ #include "regd_common.h"
+ 
+ /*
+@@ -588,3 +591,5 @@ u32 ath_regd_get_band_ctl(struct ath_reg
+ 	}
+ }
+ EXPORT_SYMBOL(ath_regd_get_band_ctl);
++
++#endif
+--- a/drivers/net/wireless/ath/regd.h
++++ b/drivers/net/wireless/ath/regd.h
+@@ -236,6 +236,41 @@ enum CountryCode {
+ 	CTRY_BELGIUM2 = 5002
+ };
+ 
++#ifdef ATH_USER_REGD
++
++static inline bool
++ath_is_world_regd(struct ath_regulatory *reg)
++{
++	return true;
++}
++
++static inline int
++ath_regd_init(struct ath_regulatory *reg, struct wiphy *wiphy,
++	      int (*reg_notifier)(struct wiphy *wiphy,
++	      struct regulatory_request *request))
++{
++	return 0;
++}
++
++
++static inline u32
++ath_regd_get_band_ctl(struct ath_regulatory *reg,
++		      enum ieee80211_band band)
++{
++	return SD_NO_CTL;
++}
++
++static inline int
++ath_reg_notifier_apply(struct wiphy *wiphy,
++		       struct regulatory_request *request,
++		       struct ath_regulatory *reg)
++{
++	return 0;
++}
++
++
++#else
++
+ bool ath_is_world_regd(struct ath_regulatory *reg);
+ int ath_regd_init(struct ath_regulatory *reg, struct wiphy *wiphy,
+ 		  int (*reg_notifier)(struct wiphy *wiphy,
+@@ -247,3 +282,5 @@ int ath_reg_notifier_apply(struct wiphy 
+ 			   struct ath_regulatory *reg);
+ 
+ #endif
++
++#endif