瀏覽代碼

mac80211: update to wireless-testing 2010-10-06

SVN-Revision: 23294
Felix Fietkau 15 年之前
父節點
當前提交
726123e2e1
共有 27 個文件被更改,包括 245 次插入1476 次删除
  1. 3 3
      package/mac80211/Makefile
  2. 4 4
      package/mac80211/patches/008-led_default.patch
  3. 190 0
      package/mac80211/patches/020-nl80211_backport.patch
  4. 33 0
      package/mac80211/patches/310-mac80211_sw_scan_fix.patch
  5. 1 1
      package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch
  6. 3 3
      package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch
  7. 1 1
      package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch
  8. 1 1
      package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch
  9. 4 4
      package/mac80211/patches/409-ath9k-add-wndr3700-antenna-initialization.patch
  10. 1 1
      package/mac80211/patches/410-ath9k-wndr3700-led-pin-fix.patch
  11. 2 2
      package/mac80211/patches/500-ath9k_eeprom_debugfs.patch
  12. 0 27
      package/mac80211/patches/510-ath9k_htc_remove_ani_nf.patch
  13. 0 97
      package/mac80211/patches/511-ath9k_per_chan_nf.patch
  14. 0 23
      package/mac80211/patches/512-ath9k_survey_no_bogus_nf.patch
  15. 0 39
      package/mac80211/patches/513-ath9k_remove_ani_nf.patch
  16. 0 46
      package/mac80211/patches/514-mac80211_survey_chan_in_use.patch
  17. 0 40
      package/mac80211/patches/515-ath9k_multi_channel_nf.patch
  18. 0 91
      package/mac80211/patches/520-ath9k_multiple_cards_fix.patch
  19. 0 75
      package/mac80211/patches/530-ath9k_remove_calinitdata.patch
  20. 0 248
      package/mac80211/patches/531-ath9k_cal_cleanup.patch
  21. 0 282
      package/mac80211/patches/540-ath9k_cycle_counters_cleanup.patch
  22. 0 410
      package/mac80211/patches/550-ath9k_cleanup_regwrite_buffer.patch
  23. 0 32
      package/mac80211/patches/551-ath9k_ani_helper.patch
  24. 0 11
      package/mac80211/patches/552-ath9k_fix_ani_listen_time.patch
  25. 0 33
      package/mac80211/patches/560-ath9k-get-ath9k-get-correct-tx-gain-type.patch
  26. 1 1
      package/mac80211/patches/601-rt2x00-fix-hang-on-ifdown.patch
  27. 1 1
      package/mac80211/patches/800-b43-gpio-mask-module-option.patch

+ 3 - 3
package/mac80211/Makefile

@@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
 
 
 PKG_NAME:=mac80211
 PKG_NAME:=mac80211
 
 
-PKG_VERSION:=2010-09-28
-PKG_RELEASE:=2
+PKG_VERSION:=2010-10-06
+PKG_RELEASE:=1
 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
 #	http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \
 #	http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \
 #	http://wireless.kernel.org/download/compat-wireless-2.6
 #	http://wireless.kernel.org/download/compat-wireless-2.6
-PKG_MD5SUM:=c1b4ebcb61a59824493ec35f799f8393
+PKG_MD5SUM:=fb1c0c0417173b781937faee6ac2978f
 
 
 PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
 PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)

+ 4 - 4
package/mac80211/patches/008-led_default.patch

@@ -81,7 +81,7 @@
  void ath_deinit_leds(struct ath_softc *sc)
  void ath_deinit_leds(struct ath_softc *sc)
 --- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
 --- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
 +++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
 +++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
-@@ -871,6 +871,7 @@ static void ath9k_led_brightness_work(st
+@@ -860,6 +860,7 @@ static void ath9k_led_brightness_work(st
  	}
  	}
  }
  }
  
  
@@ -89,7 +89,7 @@
  static void ath9k_led_brightness(struct led_classdev *led_cdev,
  static void ath9k_led_brightness(struct led_classdev *led_cdev,
  				 enum led_brightness brightness)
  				 enum led_brightness brightness)
  {
  {
-@@ -882,6 +883,7 @@ static void ath9k_led_brightness(struct 
+@@ -871,6 +872,7 @@ static void ath9k_led_brightness(struct 
  		ieee80211_queue_delayed_work(priv->hw,
  		ieee80211_queue_delayed_work(priv->hw,
  					     &led->brightness_work, 0);
  					     &led->brightness_work, 0);
  }
  }
@@ -97,7 +97,7 @@
  
  
  static void ath9k_led_stop_brightness(struct ath9k_htc_priv *priv)
  static void ath9k_led_stop_brightness(struct ath9k_htc_priv *priv)
  {
  {
-@@ -894,6 +896,7 @@ static void ath9k_led_stop_brightness(st
+@@ -883,6 +885,7 @@ static void ath9k_led_stop_brightness(st
  static int ath9k_register_led(struct ath9k_htc_priv *priv, struct ath_led *led,
  static int ath9k_register_led(struct ath9k_htc_priv *priv, struct ath_led *led,
  			      char *trigger)
  			      char *trigger)
  {
  {
@@ -105,7 +105,7 @@
  	int ret;
  	int ret;
  
  
  	led->priv = priv;
  	led->priv = priv;
-@@ -911,14 +914,19 @@ static int ath9k_register_led(struct ath
+@@ -900,14 +903,19 @@ static int ath9k_register_led(struct ath
  	INIT_DELAYED_WORK(&led->brightness_work, ath9k_led_brightness_work);
  	INIT_DELAYED_WORK(&led->brightness_work, ath9k_led_brightness_work);
  
  
  	return ret;
  	return ret;

+ 190 - 0
package/mac80211/patches/020-nl80211_backport.patch

@@ -0,0 +1,190 @@
+--- a/include/linux/compat-2.6.37.h
++++ b/include/linux/compat-2.6.37.h
+@@ -45,6 +45,68 @@ static inline void skb_checksum_none_ass
+ 
+ #define pcmcia_enable_device(link)	pcmcia_request_configuration(link, &link->conf)
+ 
++#include <net/genetlink.h>
++
++struct compat_genl_info {
++	struct genl_info *info;
++
++	u32 snd_seq;
++	u32 snd_pid;
++	struct genlmsghdr *genlhdr;
++	struct nlattr **attrs;
++	void *user_ptr[2];
++};
++#define genl_info compat_genl_info
++
++struct compat_genl_ops {
++	struct genl_ops ops;
++
++	u8 cmd;
++	u8 internal_flags;
++	unsigned int flags;
++	const struct nla_policy *policy;
++
++	int (*doit)(struct sk_buff *skb, struct genl_info *info);
++	int (*dumpit)(struct sk_buff *skb, struct netlink_callback *cb);
++	int (*done)(struct netlink_callback *cb);
++};
++#define genl_ops compat_genl_ops
++
++struct compat_genl_family {
++	struct genl_family family;
++
++	struct list_head list;
++
++	unsigned int id, hdrsize, version, maxattr;
++	const char *name;
++	bool netnsok;
++
++	struct nlattr **attrbuf;
++
++	int (*pre_doit)(struct genl_ops *ops, struct sk_buff *skb,
++			struct genl_info *info);
++
++	void (*post_doit)(struct genl_ops *ops, struct sk_buff *skb,
++			  struct genl_info *info);
++};
++
++#define genl_family compat_genl_family
++
++#define genl_register_family_with_ops compat_genl_register_family_with_ops
++
++int genl_register_family_with_ops(struct genl_family *family,
++				  struct genl_ops *ops, size_t n_ops);
++
++#define genl_unregister_family compat_genl_unregister_family
++
++int genl_unregister_family(struct genl_family *family);
++
++#define genl_info_net(_info) genl_info_net((_info)->info)
++#define genlmsg_reply(_msg, _info) genlmsg_reply(_msg, (_info)->info)
++#define genlmsg_put(_skb, _pid, _seq, _fam, _flags, _cmd) genlmsg_put(_skb, _pid, _seq, &(_fam)->family, _flags, _cmd)
++#define genl_register_mc_group(_fam, _grp) genl_register_mc_group(&(_fam)->family, _grp)
++#define genl_unregister_mc_group(_fam, _grp) genl_unregister_mc_group(&(_fam)->family, _grp)
++
+ #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) */
+ 
+ #endif /* LINUX_26_37_COMPAT_H */
+--- a/compat/compat-2.6.37.c
++++ b/compat/compat-2.6.37.c
+@@ -42,4 +42,116 @@ EXPORT_SYMBOL_GPL(net_ns_type_operations
+ 
+ #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)*/ 
+ 
++#undef genl_info
++#undef genl_unregister_family
++
++static LIST_HEAD(compat_nl_fam);
++
++static struct genl_ops *genl_get_cmd(u8 cmd, struct genl_family *family)
++{
++	struct genl_ops *ops;
++
++	list_for_each_entry(ops, &family->family.ops_list, ops.ops_list)
++		if (ops->cmd == cmd)
++			return ops;
++
++	return NULL;
++}
++
++
++static int nl_doit_wrapper(struct sk_buff *skb, struct genl_info *info)
++{
++	struct compat_genl_info compat_info;
++	struct genl_family *family;
++	struct genl_ops *ops;
++	int err;
++
++	list_for_each_entry(family, &compat_nl_fam, list) {
++		if (family->id == info->nlhdr->nlmsg_type)
++			goto found;
++	}
++	return -ENOENT;
++
++found:
++	ops = genl_get_cmd(info->genlhdr->cmd, family);
++	if (!ops)
++		return -ENOENT;
++
++	memset(&compat_info.user_ptr, 0, sizeof(compat_info.user_ptr));
++	compat_info.info = info;
++#define __copy(_field) compat_info._field = info->_field
++	__copy(snd_seq);
++	__copy(snd_pid);
++	__copy(genlhdr);
++	__copy(attrs);
++#undef __copy
++	if (family->pre_doit) {
++		err = family->pre_doit(ops, skb, &compat_info);
++		if (err)
++			return err;
++	}
++
++	err = ops->doit(skb, &compat_info);
++
++	if (family->post_doit)
++		family->post_doit(ops, skb, &compat_info);
++
++	return err;
++}
++
++int compat_genl_register_family_with_ops(struct genl_family *family,
++					 struct genl_ops *ops, size_t n_ops)
++{
++	int i, ret;
++
++#define __copy(_field) family->family._field = family->_field
++	__copy(id);
++	__copy(hdrsize);
++	__copy(version);
++	__copy(maxattr);
++	strncpy(family->family.name, family->name, sizeof(family->family.name));
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32))
++	__copy(netnsok);
++#endif
++#undef __copy
++
++	ret = genl_register_family(&family->family);
++	if (ret < 0)
++		return ret;
++
++	family->attrbuf = family->family.attrbuf;
++	family->id = family->family.id;
++
++	for (i = 0; i < n_ops; i++) {
++#define __copy(_field) ops[i].ops._field = ops[i]._field
++		__copy(cmd);
++		__copy(flags);
++		__copy(policy);
++		__copy(dumpit);
++		__copy(done);
++#undef __copy
++		ops[i].ops.doit = nl_doit_wrapper;
++		ret = genl_register_ops(&family->family, &ops[i].ops);
++		if (ret < 0)
++			goto error_ops;
++	}
++	list_add(&family->list, &compat_nl_fam);
++
++	return ret;
++
++error_ops:
++	compat_genl_unregister_family(family);
++	return ret;
++}
++EXPORT_SYMBOL(compat_genl_register_family_with_ops);
++
++int compat_genl_unregister_family(struct genl_family *family)
++{
++	int err;
++	err = genl_unregister_family(&family->family);
++	list_del(&family->list);
++	return err;
++}
++EXPORT_SYMBOL(compat_genl_unregister_family);
++
+ #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) */

+ 33 - 0
package/mac80211/patches/310-mac80211_sw_scan_fix.patch

@@ -0,0 +1,33 @@
+From: Johannes Berg <[email protected]>
+
+The recent scan overhaul broke locking
+because now we can jump to code that
+attempts to unlock, while we don't have
+the mutex held. Fix this by holding the
+mutex around all the relevant code.
+
+Reported-by: Ben Greear <[email protected]>
+Signed-off-by: Johannes Berg <[email protected]>
+---
+ net/mac80211/scan.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/net/mac80211/scan.c
++++ b/net/mac80211/scan.c
+@@ -686,8 +686,6 @@ void ieee80211_scan_work(struct work_str
+ 		goto out_complete;
+ 	}
+ 
+-	mutex_unlock(&local->mtx);
+-
+ 	/*
+ 	 * as long as no delay is required advance immediately
+ 	 * without scheduling a new work
+@@ -718,6 +716,7 @@ void ieee80211_scan_work(struct work_str
+ 	} while (next_delay == 0);
+ 
+ 	ieee80211_queue_delayed_work(&local->hw, &local->scan_work, next_delay);
++	mutex_unlock(&local->mtx);
+ 	return;
+ 
+ out_complete:

+ 1 - 1
package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch

@@ -8,7 +8,7 @@
  #include <asm/unaligned.h>
  #include <asm/unaligned.h>
  
  
  #include "hw.h"
  #include "hw.h"
-@@ -451,8 +452,16 @@ static int ath9k_hw_init_macaddr(struct 
+@@ -446,8 +447,16 @@ static int ath9k_hw_init_macaddr(struct 
  		common->macaddr[2 * i] = eeval >> 8;
  		common->macaddr[2 * i] = eeval >> 8;
  		common->macaddr[2 * i + 1] = eeval & 0xff;
  		common->macaddr[2 * i + 1] = eeval & 0xff;
  	}
  	}

+ 3 - 3
package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch

@@ -10,7 +10,7 @@
  
  
 --- a/drivers/net/wireless/ath/ath9k/init.c
 --- a/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
 +++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -540,6 +540,7 @@ static int ath9k_init_softc(u16 devid, s
+@@ -555,6 +555,7 @@ static int ath9k_init_softc(u16 devid, s
  {
  {
  	struct ath_hw *ah = NULL;
  	struct ath_hw *ah = NULL;
  	struct ath_common *common;
  	struct ath_common *common;
@@ -18,7 +18,7 @@
  	int ret = 0, i;
  	int ret = 0, i;
  	int csz = 0;
  	int csz = 0;
  
  
-@@ -551,6 +552,10 @@ static int ath9k_init_softc(u16 devid, s
+@@ -566,6 +567,10 @@ static int ath9k_init_softc(u16 devid, s
  	ah->hw_version.subsysid = subsysid;
  	ah->hw_version.subsysid = subsysid;
  	sc->sc_ah = ah;
  	sc->sc_ah = ah;
  
  
@@ -31,7 +31,7 @@
  	common->bus_ops = bus_ops;
  	common->bus_ops = bus_ops;
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -422,10 +422,6 @@ static void ath9k_hw_init_defaults(struc
+@@ -417,10 +417,6 @@ static void ath9k_hw_init_defaults(struc
  	ah->hw_version.magic = AR5416_MAGIC;
  	ah->hw_version.magic = AR5416_MAGIC;
  	ah->hw_version.subvendorid = 0;
  	ah->hw_version.subvendorid = 0;
  
  

+ 1 - 1
package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch

@@ -11,7 +11,7 @@
  #include "hw.h"
  #include "hw.h"
  #include "hw-ops.h"
  #include "hw-ops.h"
  #include "rc.h"
  #include "rc.h"
-@@ -436,18 +438,23 @@ static void ath9k_hw_init_defaults(struc
+@@ -431,18 +433,23 @@ static void ath9k_hw_init_defaults(struc
  static int ath9k_hw_init_macaddr(struct ath_hw *ah)
  static int ath9k_hw_init_macaddr(struct ath_hw *ah)
  {
  {
  	struct ath_common *common = ath9k_hw_common(ah);
  	struct ath_common *common = ath9k_hw_common(ah);

+ 1 - 1
package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 --- a/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
 +++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1427,7 +1427,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1414,7 +1414,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
  
  
  	if (ah->config.rx_intr_mitigation) {
  	if (ah->config.rx_intr_mitigation) {
  		REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500);
  		REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500);

+ 4 - 4
package/mac80211/patches/409-ath9k-add-wndr3700-antenna-initialization.patch

@@ -8,7 +8,7 @@
  #include "ath9k.h"
  #include "ath9k.h"
  
  
  static char *dev_info = "ath9k";
  static char *dev_info = "ath9k";
-@@ -555,6 +556,8 @@ static int ath9k_init_softc(u16 devid, s
+@@ -570,6 +571,8 @@ static int ath9k_init_softc(u16 devid, s
  	pdata = (struct ath9k_platform_data *) sc->dev->platform_data;
  	pdata = (struct ath9k_platform_data *) sc->dev->platform_data;
  	if (!pdata)
  	if (!pdata)
  		ah->ah_flags |= AH_USE_EEPROM;
  		ah->ah_flags |= AH_USE_EEPROM;
@@ -17,7 +17,7 @@
  
  
  	common = ath9k_hw_common(ah);
  	common = ath9k_hw_common(ah);
  	common->ops = &ath9k_common_ops;
  	common->ops = &ath9k_common_ops;
-@@ -680,6 +683,24 @@ void ath9k_set_hw_capab(struct ath_softc
+@@ -699,6 +702,24 @@ void ath9k_set_hw_capab(struct ath_softc
  	SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
  	SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
  }
  }
  
  
@@ -42,7 +42,7 @@
  int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid,
  int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid,
  		    const struct ath_bus_ops *bus_ops)
  		    const struct ath_bus_ops *bus_ops)
  {
  {
-@@ -698,6 +719,9 @@ int ath9k_init_device(u16 devid, struct 
+@@ -717,6 +738,9 @@ int ath9k_init_device(u16 devid, struct 
  	common = ath9k_hw_common(ah);
  	common = ath9k_hw_common(ah);
  	ath9k_set_hw_capab(sc, hw);
  	ath9k_set_hw_capab(sc, hw);
  
  
@@ -54,7 +54,7 @@
  			      ath9k_reg_notifier);
  			      ath9k_reg_notifier);
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -641,6 +641,8 @@ struct ath_softc {
+@@ -637,6 +637,8 @@ struct ath_softc {
  
  
  	int beacon_interval;
  	int beacon_interval;
  
  

+ 1 - 1
package/mac80211/patches/410-ath9k-wndr3700-led-pin-fix.patch

@@ -13,7 +13,7 @@
  		sc->sc_ah->led_pin = ATH_LED_PIN_DEF;
  		sc->sc_ah->led_pin = ATH_LED_PIN_DEF;
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -459,6 +459,7 @@ void ath9k_btcoex_timer_pause(struct ath
+@@ -457,6 +457,7 @@ void ath9k_btcoex_timer_pause(struct ath
  
  
  #define ATH_LED_PIN_DEF 		1
  #define ATH_LED_PIN_DEF 		1
  #define ATH_LED_PIN_9287		8
  #define ATH_LED_PIN_9287		8

+ 2 - 2
package/mac80211/patches/500-ath9k_eeprom_debugfs.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 --- a/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
 +++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -930,6 +930,53 @@ static const struct file_operations fops
+@@ -950,6 +950,53 @@ static const struct file_operations fops
  	.owner = THIS_MODULE
  	.owner = THIS_MODULE
  };
  };
  
  
@@ -54,7 +54,7 @@
  int ath9k_init_debug(struct ath_hw *ah)
  int ath9k_init_debug(struct ath_hw *ah)
  {
  {
  	struct ath_common *common = ath9k_hw_common(ah);
  	struct ath_common *common = ath9k_hw_common(ah);
-@@ -993,6 +1040,10 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1013,6 +1060,10 @@ int ath9k_init_debug(struct ath_hw *ah)
  			sc->debug.debugfs_phy, &ah->config.cwm_ignore_extcca))
  			sc->debug.debugfs_phy, &ah->config.cwm_ignore_extcca))
  		goto err;
  		goto err;
  
  

+ 0 - 27
package/mac80211/patches/510-ath9k_htc_remove_ani_nf.patch

@@ -1,27 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
-+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
-@@ -760,23 +760,12 @@ void ath9k_ani_work(struct work_struct *
- 			ath9k_hw_ani_monitor(ah, ah->curchan);
- 
- 		/* Perform calibration if necessary */
--		if (longcal || shortcal) {
-+		if (longcal || shortcal)
- 			common->ani.caldone =
- 				ath9k_hw_calibrate(ah, ah->curchan,
- 						   common->rx_chainmask,
- 						   longcal);
- 
--			if (longcal)
--				common->ani.noise_floor =
--					ath9k_hw_getchan_noise(ah, ah->curchan);
--
--			ath_print(common, ATH_DBG_ANI,
--				  " calibrate chan %u/%x nf: %d\n",
--				  ah->curchan->channel,
--				  ah->curchan->channelFlags,
--				  common->ani.noise_floor);
--		}
--
- 		ath9k_htc_ps_restore(priv);
- 	}
- 

+ 0 - 97
package/mac80211/patches/511-ath9k_per_chan_nf.patch

@@ -1,97 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -342,7 +342,6 @@ struct ath9k_hw_cal_data {
- 	int32_t CalValid;
- 	int8_t iCoff;
- 	int8_t qCoff;
--	int16_t rawNoiseFloor;
- 	bool paprd_done;
- 	bool nfcal_pending;
- 	bool nfcal_interference;
-@@ -356,6 +355,7 @@ struct ath9k_channel {
- 	u16 channel;
- 	u32 channelFlags;
- 	u32 chanmode;
-+	s16 noisefloor;
- };
- 
- #define IS_CHAN_G(_c) ((((_c)->channelFlags & (CHANNEL_G)) == CHANNEL_G) || \
---- a/drivers/net/wireless/ath/ath9k/calib.c
-+++ b/drivers/net/wireless/ath/ath9k/calib.c
-@@ -346,34 +346,34 @@ bool ath9k_hw_getnf(struct ath_hw *ah, s
- 	struct ieee80211_channel *c = chan->chan;
- 	struct ath9k_hw_cal_data *caldata = ah->caldata;
- 
--	if (!caldata)
--		return false;
--
- 	chan->channelFlags &= (~CHANNEL_CW_INT);
- 	if (REG_READ(ah, AR_PHY_AGC_CONTROL) & AR_PHY_AGC_CONTROL_NF) {
- 		ath_print(common, ATH_DBG_CALIBRATE,
- 			  "NF did not complete in calibration window\n");
--		nf = 0;
--		caldata->rawNoiseFloor = nf;
- 		return false;
--	} else {
--		ath9k_hw_do_getnf(ah, nfarray);
--		ath9k_hw_nf_sanitize(ah, nfarray);
--		nf = nfarray[0];
--		if (ath9k_hw_get_nf_thresh(ah, c->band, &nfThresh)
--		    && nf > nfThresh) {
--			ath_print(common, ATH_DBG_CALIBRATE,
--				  "noise floor failed detected; "
--				  "detected %d, threshold %d\n",
--				  nf, nfThresh);
--			chan->channelFlags |= CHANNEL_CW_INT;
--		}
-+	}
-+
-+	ath9k_hw_do_getnf(ah, nfarray);
-+	ath9k_hw_nf_sanitize(ah, nfarray);
-+	nf = nfarray[0];
-+	if (ath9k_hw_get_nf_thresh(ah, c->band, &nfThresh)
-+	    && nf > nfThresh) {
-+		ath_print(common, ATH_DBG_CALIBRATE,
-+			  "noise floor failed detected; "
-+			  "detected %d, threshold %d\n",
-+			  nf, nfThresh);
-+		chan->channelFlags |= CHANNEL_CW_INT;
-+	}
-+
-+	if (!caldata) {
-+		chan->noisefloor = nf;
-+		return false;
- 	}
- 
- 	h = caldata->nfCalHist;
- 	caldata->nfcal_pending = false;
- 	ath9k_hw_update_nfcal_hist_buffer(ah, caldata, nfarray);
--	caldata->rawNoiseFloor = h[0].privNF;
-+	chan->noisefloor = h[0].privNF;
- 	return true;
- }
- 
-@@ -401,10 +401,10 @@ void ath9k_init_nfcal_hist_buffer(struct
- 
- s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan)
- {
--	if (!ah->caldata || !ah->caldata->rawNoiseFloor)
-+	if (!ah->curchan || !ah->curchan->noisefloor)
- 		return ath9k_hw_get_default_nf(ah, chan);
- 
--	return ah->caldata->rawNoiseFloor;
-+	return ah->curchan->noisefloor;
- }
- EXPORT_SYMBOL(ath9k_hw_getchan_noise);
- 
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1251,7 +1251,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- 	if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE))
- 		return -EIO;
- 
--	if (curchan && !ah->chip_fullsleep && ah->caldata)
-+	if (curchan && !ah->chip_fullsleep)
- 		ath9k_hw_getnf(ah, curchan);
- 
- 	ah->caldata = caldata;

+ 0 - 23
package/mac80211/patches/512-ath9k_survey_no_bogus_nf.patch

@@ -1,23 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -2005,15 +2005,17 @@ static int ath9k_get_survey(struct ieee8
- 	struct ath_wiphy *aphy = hw->priv;
- 	struct ath_softc *sc = aphy->sc;
- 	struct ath_hw *ah = sc->sc_ah;
--	struct ath_common *common = ath9k_hw_common(ah);
- 	struct ieee80211_conf *conf = &hw->conf;
- 
- 	 if (idx != 0)
- 		return -ENOENT;
- 
- 	survey->channel = conf->channel;
--	survey->filled = SURVEY_INFO_NOISE_DBM;
--	survey->noise = common->ani.noise_floor;
-+	survey->filled = 0;
-+	if (ah->curchan && ah->curchan->noisefloor) {
-+		survey->filled |= SURVEY_INFO_NOISE_DBM;
-+		survey->noise = ah->curchan->noisefloor;
-+	}
- 
- 	return 0;
- }

+ 0 - 39
package/mac80211/patches/513-ath9k_remove_ani_nf.patch

@@ -1,39 +0,0 @@
---- a/drivers/net/wireless/ath/ath.h
-+++ b/drivers/net/wireless/ath/ath.h
-@@ -35,7 +35,6 @@ static const u8 ath_bcast_mac[ETH_ALEN] 
- 
- struct ath_ani {
- 	bool caldone;
--	int16_t noise_floor;
- 	unsigned int longcal_timer;
- 	unsigned int shortcal_timer;
- 	unsigned int resetcal_timer;
---- a/drivers/net/wireless/ath/ath9k/init.c
-+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -507,7 +507,6 @@ static void ath9k_init_misc(struct ath_s
- 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
- 	int i = 0;
- 
--	common->ani.noise_floor = ATH_DEFAULT_NOISE_FLOOR;
- 	setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc);
- 
- 	sc->config.txpowlimit = ATH_TXPOWER_MAX;
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -460,16 +460,6 @@ void ath_ani_calibrate(unsigned long dat
- 						   ah->curchan,
- 						   common->rx_chainmask,
- 						   longcal);
--
--			if (longcal)
--				common->ani.noise_floor = ath9k_hw_getchan_noise(ah,
--								     ah->curchan);
--
--			ath_print(common, ATH_DBG_ANI,
--				  " calibrate chan %u/%x nf: %d\n",
--				  ah->curchan->channel,
--				  ah->curchan->channelFlags,
--				  common->ani.noise_floor);
- 		}
- 	}
- 

+ 0 - 46
package/mac80211/patches/514-mac80211_survey_chan_in_use.patch

@@ -1,46 +0,0 @@
---- a/include/net/cfg80211.h
-+++ b/include/net/cfg80211.h
-@@ -294,12 +294,14 @@ struct key_params {
-  * enum survey_info_flags - survey information flags
-  *
-  * @SURVEY_INFO_NOISE_DBM: noise (in dBm) was filled in
-+ * @SURVEY_INFO_IN_USE: channel is currently being used
-  *
-  * Used by the driver to indicate which info in &struct survey_info
-  * it has filled in during the get_survey().
-  */
- enum survey_info_flags {
- 	SURVEY_INFO_NOISE_DBM = 1<<0,
-+	SURVEY_INFO_IN_USE = 1<<1,
- };
- 
- /**
---- a/include/linux/nl80211.h
-+++ b/include/linux/nl80211.h
-@@ -1400,6 +1400,7 @@ enum nl80211_reg_rule_flags {
-  * @__NL80211_SURVEY_INFO_INVALID: attribute number 0 is reserved
-  * @NL80211_SURVEY_INFO_FREQUENCY: center frequency of channel
-  * @NL80211_SURVEY_INFO_NOISE: noise level of channel (u8, dBm)
-+ * @NL80211_SURVEY_INFO_IN_USE: channel is currently being used
-  * @NL80211_SURVEY_INFO_MAX: highest survey info attribute number
-  *	currently defined
-  * @__NL80211_SURVEY_INFO_AFTER_LAST: internal use
-@@ -1408,6 +1409,7 @@ enum nl80211_survey_info {
- 	__NL80211_SURVEY_INFO_INVALID,
- 	NL80211_SURVEY_INFO_FREQUENCY,
- 	NL80211_SURVEY_INFO_NOISE,
-+	NL80211_SURVEY_INFO_IN_USE,
- 
- 	/* keep last */
- 	__NL80211_SURVEY_INFO_AFTER_LAST,
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -3491,6 +3491,8 @@ static int nl80211_send_survey(struct sk
- 	if (survey->filled & SURVEY_INFO_NOISE_DBM)
- 		NLA_PUT_U8(msg, NL80211_SURVEY_INFO_NOISE,
- 			    survey->noise);
-+	if (survey->filled & SURVEY_INFO_IN_USE)
-+		NLA_PUT_FLAG(msg, NL80211_SURVEY_INFO_IN_USE);
- 
- 	nla_nest_end(msg, infoattr);
- 

+ 0 - 40
package/mac80211/patches/515-ath9k_multi_channel_nf.patch

@@ -1,40 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1995,16 +1995,31 @@ static int ath9k_get_survey(struct ieee8
- 	struct ath_wiphy *aphy = hw->priv;
- 	struct ath_softc *sc = aphy->sc;
- 	struct ath_hw *ah = sc->sc_ah;
--	struct ieee80211_conf *conf = &hw->conf;
-+	struct ieee80211_supported_band *sband;
-+	struct ath9k_channel *chan;
- 
--	 if (idx != 0)
--		return -ENOENT;
-+	sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
-+	if (sband && idx >= sband->n_channels) {
-+		idx -= sband->n_channels;
-+		sband = NULL;
-+	}
-+
-+	if (!sband)
-+		sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
-+
-+	if (idx >= sband->n_channels)
-+	    return -ENOENT;
- 
--	survey->channel = conf->channel;
-+	survey->channel = &sband->channels[idx];
-+	chan = &ah->channels[survey->channel->hw_value];
- 	survey->filled = 0;
--	if (ah->curchan && ah->curchan->noisefloor) {
-+
-+	if (chan == ah->curchan)
-+		survey->filled |= SURVEY_INFO_IN_USE;
-+
-+	if (chan->noisefloor) {
- 		survey->filled |= SURVEY_INFO_NOISE_DBM;
--		survey->noise = ah->curchan->noisefloor;
-+		survey->noise = chan->noisefloor;
- 	}
- 
- 	return 0;

+ 0 - 91
package/mac80211/patches/520-ath9k_multiple_cards_fix.patch

@@ -1,91 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/init.c
-+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -57,7 +57,7 @@ MODULE_PARM_DESC(blink, "Enable LED blin
-  * on 5 MHz steps, we support the channels which we know
-  * we have calibration data for all cards though to make
-  * this static */
--static struct ieee80211_channel ath9k_2ghz_chantable[] = {
-+static const struct ieee80211_channel ath9k_2ghz_chantable[] = {
- 	CHAN2G(2412, 0), /* Channel 1 */
- 	CHAN2G(2417, 1), /* Channel 2 */
- 	CHAN2G(2422, 2), /* Channel 3 */
-@@ -78,7 +78,7 @@ static struct ieee80211_channel ath9k_2g
-  * on 5 MHz steps, we support the channels which we know
-  * we have calibration data for all cards though to make
-  * this static */
--static struct ieee80211_channel ath9k_5ghz_chantable[] = {
-+static const struct ieee80211_channel ath9k_5ghz_chantable[] = {
- 	/* _We_ call this UNII 1 */
- 	CHAN5G(5180, 14), /* Channel 36 */
- 	CHAN5G(5200, 15), /* Channel 40 */
-@@ -478,10 +478,17 @@ err:
- 	return -EIO;
- }
- 
--static void ath9k_init_channels_rates(struct ath_softc *sc)
-+static int ath9k_init_channels_rates(struct ath_softc *sc)
- {
-+	void *channels;
-+
- 	if (test_bit(ATH9K_MODE_11G, sc->sc_ah->caps.wireless_modes)) {
--		sc->sbands[IEEE80211_BAND_2GHZ].channels = ath9k_2ghz_chantable;
-+		channels = kmemdup(ath9k_2ghz_chantable,
-+			sizeof(ath9k_2ghz_chantable), GFP_KERNEL);
-+		if (!channels)
-+		    return -ENOMEM;
-+
-+		sc->sbands[IEEE80211_BAND_2GHZ].channels = channels;
- 		sc->sbands[IEEE80211_BAND_2GHZ].band = IEEE80211_BAND_2GHZ;
- 		sc->sbands[IEEE80211_BAND_2GHZ].n_channels =
- 			ARRAY_SIZE(ath9k_2ghz_chantable);
-@@ -491,7 +498,15 @@ static void ath9k_init_channels_rates(st
- 	}
- 
- 	if (test_bit(ATH9K_MODE_11A, sc->sc_ah->caps.wireless_modes)) {
--		sc->sbands[IEEE80211_BAND_5GHZ].channels = ath9k_5ghz_chantable;
-+		channels = kmemdup(ath9k_5ghz_chantable,
-+			sizeof(ath9k_5ghz_chantable), GFP_KERNEL);
-+		if (!channels) {
-+			if (sc->sbands[IEEE80211_BAND_2GHZ].channels)
-+				kfree(sc->sbands[IEEE80211_BAND_2GHZ].channels);
-+			return -ENOMEM;
-+		}
-+
-+		sc->sbands[IEEE80211_BAND_5GHZ].channels = channels;
- 		sc->sbands[IEEE80211_BAND_5GHZ].band = IEEE80211_BAND_5GHZ;
- 		sc->sbands[IEEE80211_BAND_5GHZ].n_channels =
- 			ARRAY_SIZE(ath9k_5ghz_chantable);
-@@ -500,6 +515,7 @@ static void ath9k_init_channels_rates(st
- 		sc->sbands[IEEE80211_BAND_5GHZ].n_bitrates =
- 			ARRAY_SIZE(ath9k_legacy_rates) - 4;
- 	}
-+	return 0;
- }
- 
- static void ath9k_init_misc(struct ath_softc *sc)
-@@ -602,8 +618,11 @@ static int ath9k_init_softc(u16 devid, s
- 	if (ret)
- 		goto err_btcoex;
- 
-+	ret = ath9k_init_channels_rates(sc);
-+	if (ret)
-+		goto err_btcoex;
-+
- 	ath9k_init_crypto(sc);
--	ath9k_init_channels_rates(sc);
- 	ath9k_init_misc(sc);
- 
- 	return 0;
-@@ -784,6 +803,12 @@ static void ath9k_deinit_softc(struct at
- {
- 	int i = 0;
- 
-+	if (sc->sbands[IEEE80211_BAND_2GHZ].channels)
-+		kfree(sc->sbands[IEEE80211_BAND_2GHZ].channels);
-+
-+	if (sc->sbands[IEEE80211_BAND_5GHZ].channels)
-+		kfree(sc->sbands[IEEE80211_BAND_5GHZ].channels);
-+
-         if ((sc->btcoex.no_stomp_timer) &&
- 	    sc->sc_ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE)
- 		ath_gen_timer_free(sc->sc_ah, sc->btcoex.no_stomp_timer);

+ 0 - 75
package/mac80211/patches/530-ath9k_remove_calinitdata.patch

@@ -1,75 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ar9002_calib.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
-@@ -45,11 +45,6 @@ static void ar9002_hw_setup_calibration(
- 		ath_print(common, ATH_DBG_CALIBRATE,
- 			  "starting ADC DC Calibration\n");
- 		break;
--	case ADC_DC_INIT_CAL:
--		REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_INIT);
--		ath_print(common, ATH_DBG_CALIBRATE,
--			  "starting Init ADC DC Calibration\n");
--		break;
- 	case TEMP_COMP_CAL:
- 		break; /* Not supported */
- 	}
-@@ -950,13 +945,6 @@ static const struct ath9k_percal_data ad
- 	ar9002_hw_adc_dccal_collect,
- 	ar9002_hw_adc_dccal_calibrate
- };
--static const struct ath9k_percal_data adc_init_dc_cal = {
--	ADC_DC_INIT_CAL,
--	MIN_CAL_SAMPLES,
--	INIT_LOG_COUNT,
--	ar9002_hw_adc_dccal_collect,
--	ar9002_hw_adc_dccal_calibrate
--};
- 
- static void ar9002_hw_init_cal_settings(struct ath_hw *ah)
- {
-@@ -973,16 +961,12 @@ static void ar9002_hw_init_cal_settings(
- 				&adc_gain_cal_single_sample;
- 			ah->adcdc_caldata.calData =
- 				&adc_dc_cal_single_sample;
--			ah->adcdc_calinitdata.calData =
--				&adc_init_dc_cal;
- 		} else {
- 			ah->iq_caldata.calData = &iq_cal_multi_sample;
- 			ah->adcgain_caldata.calData =
- 				&adc_gain_cal_multi_sample;
- 			ah->adcdc_caldata.calData =
- 				&adc_dc_cal_multi_sample;
--			ah->adcdc_calinitdata.calData =
--				&adc_init_dc_cal;
- 		}
- 		ah->supp_cals = ADC_GAIN_CAL | ADC_DC_CAL | IQ_MISMATCH_CAL;
- 	}
---- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
-@@ -50,7 +50,6 @@ static void ar9003_hw_setup_calibration(
- 		ath_print(common, ATH_DBG_CALIBRATE,
- 			  "starting Temperature Compensation Calibration\n");
- 		break;
--	case ADC_DC_INIT_CAL:
- 	case ADC_GAIN_CAL:
- 	case ADC_DC_CAL:
- 		/* Not yet */
---- a/drivers/net/wireless/ath/ath9k/calib.h
-+++ b/drivers/net/wireless/ath/ath9k/calib.h
-@@ -59,7 +59,6 @@ struct ar5416IniArray {
- 	} while (0)
- 
- enum ath9k_cal_types {
--	ADC_DC_INIT_CAL = 0x1,
- 	ADC_GAIN_CAL = 0x2,
- 	ADC_DC_CAL = 0x4,
- 	IQ_MISMATCH_CAL = 0x8,
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -692,7 +692,6 @@ struct ath_hw {
- 	enum ath9k_cal_types supp_cals;
- 	struct ath9k_cal_list iq_caldata;
- 	struct ath9k_cal_list adcgain_caldata;
--	struct ath9k_cal_list adcdc_calinitdata;
- 	struct ath9k_cal_list adcdc_caldata;
- 	struct ath9k_cal_list tempCompCalData;
- 	struct ath9k_cal_list *cal_list;

+ 0 - 248
package/mac80211/patches/531-ath9k_cal_cleanup.patch

@@ -1,248 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -535,8 +535,6 @@ struct ath_hw_private_ops {
- 	bool (*macversion_supported)(u32 macversion);
- 	void (*setup_calibration)(struct ath_hw *ah,
- 				  struct ath9k_cal_list *currCal);
--	bool (*iscal_supported)(struct ath_hw *ah,
--				enum ath9k_cal_types calType);
- 
- 	/* PHY ops */
- 	int (*rf_set_freq)(struct ath_hw *ah,
-@@ -689,7 +687,7 @@ struct ath_hw {
- 	u32 atim_window;
- 
- 	/* Calibration */
--	enum ath9k_cal_types supp_cals;
-+	u32 supp_cals;
- 	struct ath9k_cal_list iq_caldata;
- 	struct ath9k_cal_list adcgain_caldata;
- 	struct ath9k_cal_list adcdc_caldata;
---- a/drivers/net/wireless/ath/ath9k/ar9002_calib.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
-@@ -20,6 +20,13 @@
- 
- #define AR9285_CLCAL_REDO_THRESH    1
- 
-+enum ar9002_cal_types {
-+	ADC_GAIN_CAL = BIT(0),
-+	ADC_DC_CAL = BIT(1),
-+	IQ_MISMATCH_CAL = BIT(2),
-+};
-+
-+
- static void ar9002_hw_setup_calibration(struct ath_hw *ah,
- 					struct ath9k_cal_list *currCal)
- {
-@@ -45,8 +52,6 @@ static void ar9002_hw_setup_calibration(
- 		ath_print(common, ATH_DBG_CALIBRATE,
- 			  "starting ADC DC Calibration\n");
- 		break;
--	case TEMP_COMP_CAL:
--		break; /* Not supported */
- 	}
- 
- 	REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
-@@ -91,25 +96,6 @@ static bool ar9002_hw_per_calibration(st
- 	return iscaldone;
- }
- 
--/* Assumes you are talking about the currently configured channel */
--static bool ar9002_hw_iscal_supported(struct ath_hw *ah,
--				      enum ath9k_cal_types calType)
--{
--	struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
--
--	switch (calType & ah->supp_cals) {
--	case IQ_MISMATCH_CAL: /* Both 2 GHz and 5 GHz support OFDM */
--		return true;
--	case ADC_GAIN_CAL:
--	case ADC_DC_CAL:
--		if (!(conf->channel->band == IEEE80211_BAND_2GHZ &&
--		      conf_is_ht20(conf)))
--			return true;
--		break;
--	}
--	return false;
--}
--
- static void ar9002_hw_iqcal_collect(struct ath_hw *ah)
- {
- 	int i;
-@@ -872,24 +858,28 @@ static bool ar9002_hw_init_cal(struct at
- 
- 	/* Enable IQ, ADC Gain and ADC DC offset CALs */
- 	if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah)) {
--		if (ar9002_hw_iscal_supported(ah, ADC_GAIN_CAL)) {
-+		ah->supp_cals = IQ_MISMATCH_CAL;
-+
-+		if (AR_SREV_9160_10_OR_LATER(ah) &&
-+		    !(IS_CHAN_2GHZ(chan) && IS_CHAN_HT20(chan))) {
-+			ah->supp_cals |= ADC_GAIN_CAL | ADC_DC_CAL;
-+
-+
- 			INIT_CAL(&ah->adcgain_caldata);
- 			INSERT_CAL(ah, &ah->adcgain_caldata);
- 			ath_print(common, ATH_DBG_CALIBRATE,
- 				  "enabling ADC Gain Calibration.\n");
--		}
--		if (ar9002_hw_iscal_supported(ah, ADC_DC_CAL)) {
-+
- 			INIT_CAL(&ah->adcdc_caldata);
- 			INSERT_CAL(ah, &ah->adcdc_caldata);
- 			ath_print(common, ATH_DBG_CALIBRATE,
- 				  "enabling ADC DC Calibration.\n");
- 		}
--		if (ar9002_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
--			INIT_CAL(&ah->iq_caldata);
--			INSERT_CAL(ah, &ah->iq_caldata);
--			ath_print(common, ATH_DBG_CALIBRATE,
--				  "enabling IQ Calibration.\n");
--		}
-+
-+		INIT_CAL(&ah->iq_caldata);
-+		INSERT_CAL(ah, &ah->iq_caldata);
-+		ath_print(common, ATH_DBG_CALIBRATE,
-+			  "enabling IQ Calibration.\n");
- 
- 		ah->cal_list_curr = ah->cal_list;
- 
-@@ -980,7 +970,6 @@ void ar9002_hw_attach_calib_ops(struct a
- 	priv_ops->init_cal_settings = ar9002_hw_init_cal_settings;
- 	priv_ops->init_cal = ar9002_hw_init_cal;
- 	priv_ops->setup_calibration = ar9002_hw_setup_calibration;
--	priv_ops->iscal_supported = ar9002_hw_iscal_supported;
- 
- 	ops->calibrate = ar9002_hw_calibrate;
- }
---- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
-@@ -18,6 +18,11 @@
- #include "hw-ops.h"
- #include "ar9003_phy.h"
- 
-+enum ar9003_cal_types {
-+	IQ_MISMATCH_CAL = BIT(0),
-+	TEMP_COMP_CAL = BIT(1),
-+};
-+
- static void ar9003_hw_setup_calibration(struct ath_hw *ah,
- 					struct ath9k_cal_list *currCal)
- {
-@@ -50,10 +55,6 @@ static void ar9003_hw_setup_calibration(
- 		ath_print(common, ATH_DBG_CALIBRATE,
- 			  "starting Temperature Compensation Calibration\n");
- 		break;
--	case ADC_GAIN_CAL:
--	case ADC_DC_CAL:
--		/* Not yet */
--		break;
- 	}
- }
- 
-@@ -313,27 +314,6 @@ static const struct ath9k_percal_data iq
- static void ar9003_hw_init_cal_settings(struct ath_hw *ah)
- {
- 	ah->iq_caldata.calData = &iq_cal_single_sample;
--	ah->supp_cals = IQ_MISMATCH_CAL;
--}
--
--static bool ar9003_hw_iscal_supported(struct ath_hw *ah,
--				      enum ath9k_cal_types calType)
--{
--	switch (calType & ah->supp_cals) {
--	case IQ_MISMATCH_CAL:
--		/*
--		 * XXX: Run IQ Mismatch for non-CCK only
--		 * Note that CHANNEL_B is never set though.
--		 */
--		return true;
--	case ADC_GAIN_CAL:
--	case ADC_DC_CAL:
--		return false;
--	case TEMP_COMP_CAL:
--		return true;
--	}
--
--	return false;
- }
- 
- /*
-@@ -772,15 +752,16 @@ static bool ar9003_hw_init_cal(struct at
- 
- 	/* Initialize list pointers */
- 	ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
-+	ah->supp_cals = IQ_MISMATCH_CAL;
- 
--	if (ar9003_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
-+	if (ah->supp_cals & IQ_MISMATCH_CAL) {
- 		INIT_CAL(&ah->iq_caldata);
- 		INSERT_CAL(ah, &ah->iq_caldata);
- 		ath_print(common, ATH_DBG_CALIBRATE,
- 			  "enabling IQ Calibration.\n");
- 	}
- 
--	if (ar9003_hw_iscal_supported(ah, TEMP_COMP_CAL)) {
-+	if (ah->supp_cals & TEMP_COMP_CAL) {
- 		INIT_CAL(&ah->tempCompCalData);
- 		INSERT_CAL(ah, &ah->tempCompCalData);
- 		ath_print(common, ATH_DBG_CALIBRATE,
-@@ -807,7 +788,6 @@ void ar9003_hw_attach_calib_ops(struct a
- 	priv_ops->init_cal_settings = ar9003_hw_init_cal_settings;
- 	priv_ops->init_cal = ar9003_hw_init_cal;
- 	priv_ops->setup_calibration = ar9003_hw_setup_calibration;
--	priv_ops->iscal_supported = ar9003_hw_iscal_supported;
- 
- 	ops->calibrate = ar9003_hw_calibrate;
- }
---- a/drivers/net/wireless/ath/ath9k/calib.h
-+++ b/drivers/net/wireless/ath/ath9k/calib.h
-@@ -58,13 +58,6 @@ struct ar5416IniArray {
- 		}							\
- 	} while (0)
- 
--enum ath9k_cal_types {
--	ADC_GAIN_CAL = 0x2,
--	ADC_DC_CAL = 0x4,
--	IQ_MISMATCH_CAL = 0x8,
--	TEMP_COMP_CAL = 0x10,
--};
--
- enum ath9k_cal_state {
- 	CAL_INACTIVE,
- 	CAL_WAITING,
-@@ -79,7 +72,7 @@ enum ath9k_cal_state {
- #define PER_MAX_LOG_COUNT  10
- 
- struct ath9k_percal_data {
--	enum ath9k_cal_types calType;
-+	u32 calType;
- 	u32 calNumSamples;
- 	u32 calCountMax;
- 	void (*calCollect) (struct ath_hw *);
---- a/drivers/net/wireless/ath/ath9k/hw-ops.h
-+++ b/drivers/net/wireless/ath/ath9k/hw-ops.h
-@@ -276,12 +276,6 @@ static inline void ath9k_hw_setup_calibr
- 	ath9k_hw_private_ops(ah)->setup_calibration(ah, currCal);
- }
- 
--static inline bool ath9k_hw_iscal_supported(struct ath_hw *ah,
--					    enum ath9k_cal_types calType)
--{
--	return ath9k_hw_private_ops(ah)->iscal_supported(ah, calType);
--}
--
- static inline void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning)
- {
- 	ath9k_hw_private_ops(ah)->ani_reset(ah, is_scanning);
---- a/drivers/net/wireless/ath/ath9k/calib.c
-+++ b/drivers/net/wireless/ath/ath9k/calib.c
-@@ -186,7 +186,7 @@ bool ath9k_hw_reset_calvalid(struct ath_
- 		return true;
- 	}
- 
--	if (!ath9k_hw_iscal_supported(ah, currCal->calData->calType))
-+	if (!(ah->supp_cals & currCal->calData->calType))
- 		return true;
- 
- 	ath_print(common, ATH_DBG_CALIBRATE,

+ 0 - 282
package/mac80211/patches/540-ath9k_cycle_counters_cleanup.patch

@@ -1,282 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -765,6 +765,8 @@ struct ath_hw {
- 	int coarse_low[5];
- 	int firpwr[5];
- 	enum ath9k_ani_cmd ani_function;
-+	struct ath_cycle_counters cc, cc_delta;
-+	int32_t listen_time;
- 
- 	/* Bluetooth coexistance */
- 	struct ath_btcoex_hw btcoex_hw;
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -549,47 +549,15 @@ static u8 ath9k_hw_chan_2_clockrate_mhz(
- 
- static int32_t ath9k_hw_ani_get_listen_time(struct ath_hw *ah)
- {
--	struct ar5416AniState *aniState;
--	struct ath_common *common = ath9k_hw_common(ah);
--	u32 txFrameCount, rxFrameCount, cycleCount;
--	int32_t listenTime;
--
--	txFrameCount = REG_READ(ah, AR_TFCNT);
--	rxFrameCount = REG_READ(ah, AR_RFCNT);
--	cycleCount = REG_READ(ah, AR_CCCNT);
--
--	aniState = ah->curani;
--	if (aniState->cycleCount == 0 || aniState->cycleCount > cycleCount) {
--		listenTime = 0;
--		ah->stats.ast_ani_lzero++;
--		ath_print(common, ATH_DBG_ANI,
--			  "1st call: aniState->cycleCount=%d\n",
--			  aniState->cycleCount);
--	} else {
--		int32_t ccdelta = cycleCount - aniState->cycleCount;
--		int32_t rfdelta = rxFrameCount - aniState->rxFrameCount;
--		int32_t tfdelta = txFrameCount - aniState->txFrameCount;
--		int32_t clock_rate;
--
--		/*
--		 * convert HW counter values to ms using mode
--		 * specifix clock rate
--		 */
--		clock_rate = ath9k_hw_chan_2_clockrate_mhz(ah) * 1000;;
-+	int32_t listen_time;
-+	int32_t clock_rate;
- 
--		listenTime = (ccdelta - rfdelta - tfdelta) / clock_rate;
-+	ath9k_hw_update_cycle_counters(ah);
-+	clock_rate = ath9k_hw_chan_2_clockrate_mhz(ah) * 1000;
-+	listen_time = ah->listen_time / clock_rate;
-+	ah->listen_time = 0;
- 
--		ath_print(common, ATH_DBG_ANI,
--			  "cyclecount=%d, rfcount=%d, "
--			  "tfcount=%d, listenTime=%d CLOCK_RATE=%d\n",
--			  ccdelta, rfdelta, tfdelta, listenTime, clock_rate);
--	}
--
--	aniState->cycleCount = cycleCount;
--	aniState->txFrameCount = txFrameCount;
--	aniState->rxFrameCount = rxFrameCount;
--
--	return listenTime;
-+	return listen_time;
- }
- 
- static void ath9k_ani_reset_old(struct ath_hw *ah, bool is_scanning)
-@@ -1041,45 +1009,52 @@ void ath9k_hw_disable_mib_counters(struc
- }
- EXPORT_SYMBOL(ath9k_hw_disable_mib_counters);
- 
--u32 ath9k_hw_GetMibCycleCountsPct(struct ath_hw *ah,
--				  u32 *rxc_pcnt,
--				  u32 *rxf_pcnt,
--				  u32 *txf_pcnt)
-+void ath9k_hw_update_cycle_counters(struct ath_hw *ah)
- {
--	struct ath_common *common = ath9k_hw_common(ah);
--	static u32 cycles, rx_clear, rx_frame, tx_frame;
--	u32 good = 1;
-+	struct ath_cycle_counters cc;
-+	bool clear;
- 
--	u32 rc = REG_READ(ah, AR_RCCNT);
--	u32 rf = REG_READ(ah, AR_RFCNT);
--	u32 tf = REG_READ(ah, AR_TFCNT);
--	u32 cc = REG_READ(ah, AR_CCCNT);
-+	memcpy(&cc, &ah->cc, sizeof(cc));
- 
--	if (cycles == 0 || cycles > cc) {
--		ath_print(common, ATH_DBG_ANI,
--			  "cycle counter wrap. ExtBusy = 0\n");
--		good = 0;
--	} else {
--		u32 cc_d = cc - cycles;
--		u32 rc_d = rc - rx_clear;
--		u32 rf_d = rf - rx_frame;
--		u32 tf_d = tf - tx_frame;
--
--		if (cc_d != 0) {
--			*rxc_pcnt = rc_d * 100 / cc_d;
--			*rxf_pcnt = rf_d * 100 / cc_d;
--			*txf_pcnt = tf_d * 100 / cc_d;
--		} else {
--			good = 0;
--		}
--	}
-+	/* freeze counters */
-+	REG_WRITE(ah, AR_MIBC, AR_MIBC_FMC);
- 
--	cycles = cc;
--	rx_frame = rf;
--	rx_clear = rc;
--	tx_frame = tf;
-+	ah->cc.cycles = REG_READ(ah, AR_CCCNT);
-+	if (ah->cc.cycles < cc.cycles) {
-+		clear = true;
-+		goto skip;
-+	}
-+
-+	ah->cc.rx_clear = REG_READ(ah, AR_RCCNT);
-+	ah->cc.rx_frame = REG_READ(ah, AR_RFCNT);
-+	ah->cc.tx_frame = REG_READ(ah, AR_TFCNT);
-+
-+	/* prevent wraparound */
-+	if (ah->cc.cycles & BIT(31))
-+		clear = true;
-+
-+#define CC_DELTA(_field, _reg) ah->cc_delta._field += ah->cc._field - cc._field
-+	CC_DELTA(cycles, AR_CCCNT);
-+	CC_DELTA(rx_frame, AR_RFCNT);
-+	CC_DELTA(rx_clear, AR_RCCNT);
-+	CC_DELTA(tx_frame, AR_TFCNT);
-+#undef CC_DELTA
-+
-+	ah->listen_time += (ah->cc.cycles - cc.cycles) -
-+		 ((ah->cc.rx_frame - cc.rx_frame) +
-+		  (ah->cc.tx_frame - cc.tx_frame));
-+
-+skip:
-+	if (clear) {
-+		REG_WRITE(ah, AR_CCCNT, 0);
-+		REG_WRITE(ah, AR_RFCNT, 0);
-+		REG_WRITE(ah, AR_RCCNT, 0);
-+		REG_WRITE(ah, AR_TFCNT, 0);
-+		memset(&ah->cc, 0, sizeof(ah->cc));
-+	}
- 
--	return good;
-+	/* unfreeze counters */
-+	REG_WRITE(ah, AR_MIBC, 0);
- }
- 
- /*
---- a/drivers/net/wireless/ath/ath9k/ani.h
-+++ b/drivers/net/wireless/ath/ath9k/ani.h
-@@ -93,6 +93,13 @@ struct ath9k_mib_stats {
- 	u32 beacons;
- };
- 
-+struct ath_cycle_counters {
-+	u32 cycles;
-+	u32 rx_frame;
-+	u32 rx_clear;
-+	u32 tx_frame;
-+};
-+
- /* INI default values for ANI registers */
- struct ath9k_ani_default {
- 	u16 m1ThreshLow;
-@@ -130,9 +137,6 @@ struct ar5416AniState {
- 	int32_t rssiThrLow;
- 	int32_t rssiThrHigh;
- 	u32 noiseFloor;
--	u32 txFrameCount;
--	u32 rxFrameCount;
--	u32 cycleCount;
- 	u32 ofdmPhyErrCount;
- 	u32 cckPhyErrCount;
- 	u32 ofdmPhyErrBase;
-@@ -166,8 +170,7 @@ struct ar5416Stats {
- 
- void ath9k_enable_mib_counters(struct ath_hw *ah);
- void ath9k_hw_disable_mib_counters(struct ath_hw *ah);
--u32 ath9k_hw_GetMibCycleCountsPct(struct ath_hw *ah, u32 *rxc_pcnt,
--				  u32 *rxf_pcnt, u32 *txf_pcnt);
-+void ath9k_hw_update_cycle_counters(struct ath_hw *ah);
- void ath9k_hw_ani_setup(struct ath_hw *ah);
- void ath9k_hw_ani_init(struct ath_hw *ah);
- int ath9k_hw_get_ani_channel_idx(struct ath_hw *ah,
---- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -1227,8 +1227,7 @@ static bool ar5008_hw_ani_control_old(st
- 		  aniState->firstepLevel,
- 		  aniState->listenTime);
- 	ath_print(common, ATH_DBG_ANI,
--		"cycleCount=%d, ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
--		aniState->cycleCount,
-+		"ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
- 		aniState->ofdmPhyErrCount,
- 		aniState->cckPhyErrCount);
- 
-@@ -1480,15 +1479,13 @@ static bool ar5008_hw_ani_control_new(st
- 
- 	ath_print(common, ATH_DBG_ANI,
- 		  "ANI parameters: SI=%d, ofdmWS=%s FS=%d "
--		  "MRCcck=%s listenTime=%d CC=%d listen=%d "
-+		  "MRCcck=%s listenTime=%d "
- 		  "ofdmErrs=%d cckErrs=%d\n",
- 		  aniState->spurImmunityLevel,
- 		  !aniState->ofdmWeakSigDetectOff ? "on" : "off",
- 		  aniState->firstepLevel,
- 		  !aniState->mrcCCKOff ? "on" : "off",
- 		  aniState->listenTime,
--		  aniState->cycleCount,
--		  aniState->listenTime,
- 		  aniState->ofdmPhyErrCount,
- 		  aniState->cckPhyErrCount);
- 	return true;
-@@ -1581,8 +1578,6 @@ static void ar5008_hw_ani_cache_ini_regs
- 	aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
- 	aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG;
- 	aniState->mrcCCKOff = true; /* not available on pre AR9003 */
--
--	aniState->cycleCount = 0;
- }
- 
- static void ar5008_hw_set_nf_limits(struct ath_hw *ah)
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -1005,15 +1005,13 @@ static bool ar9003_hw_ani_control(struct
- 
- 	ath_print(common, ATH_DBG_ANI,
- 		  "ANI parameters: SI=%d, ofdmWS=%s FS=%d "
--		  "MRCcck=%s listenTime=%d CC=%d listen=%d "
-+		  "MRCcck=%s listenTime=%d "
- 		  "ofdmErrs=%d cckErrs=%d\n",
- 		  aniState->spurImmunityLevel,
- 		  !aniState->ofdmWeakSigDetectOff ? "on" : "off",
- 		  aniState->firstepLevel,
- 		  !aniState->mrcCCKOff ? "on" : "off",
- 		  aniState->listenTime,
--		  aniState->cycleCount,
--		  aniState->listenTime,
- 		  aniState->ofdmPhyErrCount,
- 		  aniState->cckPhyErrCount);
- 	return true;
-@@ -1116,8 +1114,6 @@ static void ar9003_hw_ani_cache_ini_regs
- 	aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
- 	aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG;
- 	aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK;
--
--	aniState->cycleCount = 0;
- }
- 
- void ar9003_hw_attach_phy_ops(struct ath_hw *ah)
-@@ -1232,7 +1228,7 @@ void ar9003_hw_bb_watchdog_read(struct a
- void ar9003_hw_bb_watchdog_dbg_info(struct ath_hw *ah)
- {
- 	struct ath_common *common = ath9k_hw_common(ah);
--	u32 rxc_pcnt = 0, rxf_pcnt = 0, txf_pcnt = 0, status;
-+	u32 status;
- 
- 	if (likely(!(common->debug_mask & ATH_DBG_RESET)))
- 		return;
-@@ -1261,11 +1257,13 @@ void ar9003_hw_bb_watchdog_dbg_info(stru
- 		  "** BB mode: BB_gen_controls=0x%08x **\n",
- 		  REG_READ(ah, AR_PHY_GEN_CTRL));
- 
--	if (ath9k_hw_GetMibCycleCountsPct(ah, &rxc_pcnt, &rxf_pcnt, &txf_pcnt))
-+	ath9k_hw_update_cycle_counters(ah);
-+#define PCT(_field) (ah->cc_delta._field * 100 / ah->cc_delta.cycles)
-+	if (ah->cc_delta.cycles)
- 		ath_print(common, ATH_DBG_RESET,
- 			  "** BB busy times: rx_clear=%d%%, "
- 			  "rx_frame=%d%%, tx_frame=%d%% **\n",
--			  rxc_pcnt, rxf_pcnt, txf_pcnt);
-+			  PCT(rx_clear), PCT(rx_frame), PCT(tx_frame));
- 
- 	ath_print(common, ATH_DBG_RESET,
- 		  "==== BB update: done ====\n\n");

+ 0 - 410
package/mac80211/patches/550-ath9k_cleanup_regwrite_buffer.patch

@@ -1,410 +0,0 @@
---- a/drivers/net/wireless/ath/ath.h
-+++ b/drivers/net/wireless/ath/ath.h
-@@ -102,14 +102,12 @@ enum ath_cipher {
-  * @read: Register read
-  * @write: Register write
-  * @enable_write_buffer: Enable multiple register writes
-- * @disable_write_buffer: Disable multiple register writes
-- * @write_flush: Flush buffered register writes
-+ * @write_flush: flush buffered register writes and disable buffering
-  */
- struct ath_ops {
- 	unsigned int (*read)(void *, u32 reg_offset);
- 	void (*write)(void *, u32 val, u32 reg_offset);
- 	void (*enable_write_buffer)(void *);
--	void (*disable_write_buffer)(void *);
- 	void (*write_flush) (void *);
- };
- 
---- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
-+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
-@@ -380,15 +380,6 @@ static void ath9k_enable_regwrite_buffer
- 	atomic_inc(&priv->wmi->mwrite_cnt);
- }
- 
--static void ath9k_disable_regwrite_buffer(void *hw_priv)
--{
--	struct ath_hw *ah = (struct ath_hw *) hw_priv;
--	struct ath_common *common = ath9k_hw_common(ah);
--	struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
--
--	atomic_dec(&priv->wmi->mwrite_cnt);
--}
--
- static void ath9k_regwrite_flush(void *hw_priv)
- {
- 	struct ath_hw *ah = (struct ath_hw *) hw_priv;
-@@ -397,6 +388,9 @@ static void ath9k_regwrite_flush(void *h
- 	u32 rsp_status;
- 	int r;
- 
-+	if (!atomic_dec_and_test(&priv->wmi->mwrite_cnt))
-+		return;
-+
- 	mutex_lock(&priv->wmi->multi_write_mutex);
- 
- 	if (priv->wmi->multi_write_idx) {
-@@ -420,7 +414,6 @@ static const struct ath_ops ath9k_common
- 	.read = ath9k_regread,
- 	.write = ath9k_regwrite,
- 	.enable_write_buffer = ath9k_enable_regwrite_buffer,
--	.disable_write_buffer = ath9k_disable_regwrite_buffer,
- 	.write_flush = ath9k_regwrite_flush,
- };
- 
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -70,19 +70,13 @@
- 
- #define ENABLE_REGWRITE_BUFFER(_ah)					\
- 	do {								\
--		if (AR_SREV_9271(_ah))					\
-+		if (ath9k_hw_common(_ah)->ops->enable_write_buffer)	\
- 			ath9k_hw_common(_ah)->ops->enable_write_buffer((_ah)); \
- 	} while (0)
- 
--#define DISABLE_REGWRITE_BUFFER(_ah)					\
--	do {								\
--		if (AR_SREV_9271(_ah))					\
--			ath9k_hw_common(_ah)->ops->disable_write_buffer((_ah)); \
--	} while (0)
--
- #define REGWRITE_BUFFER_FLUSH(_ah)					\
- 	do {								\
--		if (AR_SREV_9271(_ah))					\
-+		if (ath9k_hw_common(_ah)->ops->write_flush)		\
- 			ath9k_hw_common(_ah)->ops->write_flush((_ah));	\
- 	} while (0)
- 
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -180,7 +180,6 @@ static void ath9k_ani_restart_old(struct
- 	REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
- 
-@@ -215,7 +214,6 @@ static void ath9k_ani_restart_new(struct
- 	REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
- 
-@@ -643,7 +641,6 @@ static void ath9k_ani_reset_old(struct a
- 	REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- /*
-@@ -737,7 +734,6 @@ static void ath9k_ani_reset_new(struct a
- 	REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- static void ath9k_hw_ani_monitor_old(struct ath_hw *ah,
-@@ -991,7 +987,6 @@ void ath9k_enable_mib_counters(struct at
- 	REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- /* Freeze the MIB counters, get the stats and then clear them */
-@@ -1261,7 +1256,6 @@ void ath9k_hw_ani_init(struct ath_hw *ah
- 	REG_WRITE(ah, AR_PHY_ERR_2, ah->ani[0].cckPhyErrBase);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	ath9k_enable_mib_counters(ah);
- 
---- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -615,14 +615,11 @@ static void ar5008_hw_init_chain_masks(s
- 	rx_chainmask = ah->rxchainmask;
- 	tx_chainmask = ah->txchainmask;
- 
--	ENABLE_REGWRITE_BUFFER(ah);
- 
- 	switch (rx_chainmask) {
- 	case 0x5:
--		DISABLE_REGWRITE_BUFFER(ah);
- 		REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
- 			    AR_PHY_SWAP_ALT_CHAIN);
--		ENABLE_REGWRITE_BUFFER(ah);
- 	case 0x3:
- 		if (ah->hw_version.macVersion == AR_SREV_REVISION_5416_10) {
- 			REG_WRITE(ah, AR_PHY_RX_CHAINMASK, 0x7);
-@@ -632,17 +629,18 @@ static void ar5008_hw_init_chain_masks(s
- 	case 0x1:
- 	case 0x2:
- 	case 0x7:
-+		ENABLE_REGWRITE_BUFFER(ah);
- 		REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
- 		REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
- 		break;
- 	default:
-+		ENABLE_REGWRITE_BUFFER(ah);
- 		break;
- 	}
- 
- 	REG_WRITE(ah, AR_SELFGEN_MASK, tx_chainmask);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	if (tx_chainmask == 0x5) {
- 		REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
-@@ -728,7 +726,6 @@ static void ar5008_hw_set_channel_regs(s
- 	REG_WRITE(ah, AR_CST, 0xF << AR_CST_TIMEOUT_LIMIT_S);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- 
-@@ -820,7 +817,6 @@ static int ar5008_hw_process_ini(struct 
- 	}
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	if (AR_SREV_9280(ah) || AR_SREV_9287_11_OR_LATER(ah))
- 		REG_WRITE_ARRAY(&ah->iniModesRxGain, modesIndex, regWrites);
-@@ -851,7 +847,6 @@ static int ar5008_hw_process_ini(struct 
- 	}
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	if (AR_SREV_9271(ah)) {
- 		if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) == 1)
---- a/drivers/net/wireless/ath/ath9k/ar9002_calib.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
-@@ -522,7 +522,6 @@ static void ar9271_hw_pa_cal(struct ath_
- 		REG_WRITE(ah, regList[i][0], regList[i][1]);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- static inline void ar9285_hw_pa_cal(struct ath_hw *ah, bool is_reset)
---- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
-@@ -371,7 +371,6 @@ static void ar9002_hw_configpcipowersave
- 			REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
- 
- 			REGWRITE_BUFFER_FLUSH(ah);
--			DISABLE_REGWRITE_BUFFER(ah);
- 		}
- 
- 		udelay(1000);
-@@ -468,7 +467,6 @@ static int ar9002_hw_get_radiorev(struct
- 		REG_WRITE(ah, AR_PHY(0x20), 0x00010000);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	val = (REG_READ(ah, AR_PHY(256)) >> 24) & 0xff;
- 	val = ((val & 0xf0) >> 4) | ((val & 0x0f) << 4);
-@@ -627,6 +625,4 @@ void ar9002_hw_load_ani_reg(struct ath_h
- 	}
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
--
- }
---- a/drivers/net/wireless/ath/ath9k/ar9002_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
-@@ -415,7 +415,6 @@ static void ar9002_hw_spur_mitigate(stru
- 	REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- static void ar9002_olc_init(struct ath_hw *ah)
---- a/drivers/net/wireless/ath/ath9k/calib.c
-+++ b/drivers/net/wireless/ath/ath9k/calib.c
-@@ -300,7 +300,6 @@ void ath9k_hw_loadnf(struct ath_hw *ah, 
- 		}
- 	}
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- 
---- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c
-+++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
-@@ -500,7 +500,6 @@ static void ath9k_hw_set_4k_power_cal_ta
- 			}
- 
- 			REGWRITE_BUFFER_FLUSH(ah);
--			DISABLE_REGWRITE_BUFFER(ah);
- 		}
- 	}
- 
-@@ -832,7 +831,6 @@ static void ath9k_hw_4k_set_txpower(stru
- 	}
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- static void ath9k_hw_4k_set_addac(struct ath_hw *ah,
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -302,7 +302,6 @@ static void ath9k_hw_disablepcie(struct 
- 	REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- /* This should work for all families including legacy */
-@@ -688,7 +687,6 @@ static void ath9k_hw_init_qos(struct ath
- 	REG_WRITE(ah, AR_TXOP_12_15, 0xFFFFFFFF);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- static void ath9k_hw_init_pll(struct ath_hw *ah,
-@@ -753,7 +751,6 @@ static void ath9k_hw_init_interrupt_mask
- 	}
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	if (AR_SREV_9300_20_OR_LATER(ah)) {
- 		REG_WRITE(ah, AR_INTR_PRIO_ASYNC_ENABLE, 0);
-@@ -897,7 +894,6 @@ static inline void ath9k_hw_set_dma(stru
- 	REG_WRITE(ah, AR_TXCFG, regval | AR_TXCFG_DMASZ_128B);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	/*
- 	 * Restore TX Trigger Level to its pre-reset value.
-@@ -945,7 +941,6 @@ static inline void ath9k_hw_set_dma(stru
- 	}
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	if (AR_SREV_9300_20_OR_LATER(ah))
- 		ath9k_hw_reset_txstatus_ring(ah);
-@@ -1043,7 +1038,6 @@ static bool ath9k_hw_set_reset(struct at
- 	REG_WRITE(ah, AR_RTC_RC, rst_flags);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	udelay(50);
- 
-@@ -1082,7 +1076,6 @@ static bool ath9k_hw_set_reset_power_on(
- 	udelay(2);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	if (!AR_SREV_9300_20_OR_LATER(ah))
- 		udelay(2);
-@@ -1386,7 +1379,6 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- 	REG_WRITE(ah, AR_RSSI_THR, INIT_RSSI_THR);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	r = ath9k_hw_rf_set_freq(ah, chan);
- 	if (r)
-@@ -1398,7 +1390,6 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- 		REG_WRITE(ah, AR_DQCUMASK(i), 1 << i);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	ah->intr_txqs = 0;
- 	for (i = 0; i < ah->caps.total_queues; i++)
-@@ -1446,7 +1437,6 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- 	REG_WRITE(ah, AR_CFG_LED, saveLedState | AR_CFG_SCLK_32KHZ);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	/*
- 	 * For big endian systems turn on swapping for descriptors
-@@ -1696,7 +1686,6 @@ void ath9k_hw_beaconinit(struct ath_hw *
- 	REG_WRITE(ah, AR_NDP_PERIOD, TU_TO_USEC(beacon_period));
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	beacon_period &= ~ATH9K_BEACON_ENA;
- 	if (beacon_period & ATH9K_BEACON_RESET_TSF) {
-@@ -1724,7 +1713,6 @@ void ath9k_hw_set_sta_beacon_timers(stru
- 		  TU_TO_USEC(bs->bs_intval & ATH9K_BEACON_PERIOD));
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	REG_RMW_FIELD(ah, AR_RSSI_THR,
- 		      AR_RSSI_THR_BM_THR, bs->bs_bmissthreshold);
-@@ -1770,7 +1758,6 @@ void ath9k_hw_set_sta_beacon_timers(stru
- 	REG_WRITE(ah, AR_DTIM_PERIOD, TU_TO_USEC(dtimperiod));
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	REG_SET_BIT(ah, AR_TIMER_MODE,
- 		    AR_TBTT_TIMER_EN | AR_TIM_TIMER_EN |
-@@ -2188,7 +2175,6 @@ void ath9k_hw_setrxfilter(struct ath_hw 
- 			  REG_READ(ah, AR_RXCFG) & ~AR_RXCFG_ZLFDMA);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- EXPORT_SYMBOL(ath9k_hw_setrxfilter);
- 
---- a/drivers/net/wireless/ath/ath9k/mac.c
-+++ b/drivers/net/wireless/ath/ath9k/mac.c
-@@ -40,7 +40,6 @@ static void ath9k_hw_set_txq_interrupts(
- 	REG_WRITE(ah, AR_IMR_S2, ah->imrs2_reg);
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- }
- 
- u32 ath9k_hw_gettxbuf(struct ath_hw *ah, u32 q)
-@@ -530,7 +529,6 @@ bool ath9k_hw_resettxqueue(struct ath_hw
- 	}
- 
- 	REGWRITE_BUFFER_FLUSH(ah);
--	DISABLE_REGWRITE_BUFFER(ah);
- 
- 	if (qi->tqi_qflags & TXQ_FLAG_FRAG_BURST_BACKOFF_ENABLE) {
- 		REG_WRITE(ah, AR_DMISC(q),
-@@ -553,7 +551,6 @@ bool ath9k_hw_resettxqueue(struct ath_hw
- 			  | AR_D_MISC_POST_FR_BKOFF_DIS);
- 
- 		REGWRITE_BUFFER_FLUSH(ah);
--		DISABLE_REGWRITE_BUFFER(ah);
- 
- 		/*
- 		 * cwmin and cwmax should be 0 for beacon queue
-@@ -585,7 +582,6 @@ bool ath9k_hw_resettxqueue(struct ath_hw
- 			     AR_D_MISC_ARB_LOCKOUT_CNTRL_S));
- 
- 		REGWRITE_BUFFER_FLUSH(ah);
--		DISABLE_REGWRITE_BUFFER(ah);
- 
- 		break;
- 	case ATH9K_TX_QUEUE_PSPOLL:

+ 0 - 32
package/mac80211/patches/551-ath9k_ani_helper.patch

@@ -1,32 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -109,6 +109,11 @@ static void ath9k_hw_ani_lower_immunity(
- 	ath9k_hw_private_ops(ah)->ani_lower_immunity(ah);
- }
- 
-+static bool use_new_ani(struct ath_hw *ah)
-+{
-+	return AR_SREV_9300_20_OR_LATER(ah) || modparam_force_new_ani;
-+}
-+
- int ath9k_hw_get_ani_channel_idx(struct ath_hw *ah,
- 				 struct ath9k_channel *chan)
- {
-@@ -1178,7 +1183,7 @@ void ath9k_hw_ani_init(struct ath_hw *ah
- 
- 	memset(ah->ani, 0, sizeof(ah->ani));
- 	for (i = 0; i < ARRAY_SIZE(ah->ani); i++) {
--		if (AR_SREV_9300_20_OR_LATER(ah) || modparam_force_new_ani) {
-+		if (use_new_ani(ah)) {
- 			ah->ani[i].ofdmTrigHigh = ATH9K_ANI_OFDM_TRIG_HIGH_NEW;
- 			ah->ani[i].ofdmTrigLow = ATH9K_ANI_OFDM_TRIG_LOW_NEW;
- 
-@@ -1230,7 +1235,7 @@ void ath9k_hw_ani_init(struct ath_hw *ah
- 	 * since we expect some ongoing maintenance on the tables, let's sanity
- 	 * check here default level should not modify INI setting.
- 	 */
--	if (AR_SREV_9300_20_OR_LATER(ah) || modparam_force_new_ani) {
-+	if (use_new_ani(ah)) {
- 		const struct ani_ofdm_level_entry *entry_ofdm;
- 		const struct ani_cck_level_entry *entry_cck;
- 

+ 0 - 11
package/mac80211/patches/552-ath9k_fix_ani_listen_time.patch

@@ -1,11 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -547,7 +547,7 @@ static u8 ath9k_hw_chan_2_clockrate_mhz(
- 	if (conf_is_ht40(conf))
- 		return clockrate * 2;
- 
--	return clockrate * 2;
-+	return clockrate;
- }
- 
- static int32_t ath9k_hw_ani_get_listen_time(struct ath_hw *ah)

+ 0 - 33
package/mac80211/patches/560-ath9k-get-ath9k-get-correct-tx-gain-type.patch

@@ -1,33 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c
-+++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c
-@@ -179,6 +179,9 @@ static u32 ath9k_hw_4k_get_eeprom(struct
- 	struct ar5416_eeprom_4k *eep = &ah->eeprom.map4k;
- 	struct modal_eep_4k_header *pModal = &eep->modalHeader;
- 	struct base_eep_header_4k *pBase = &eep->baseEepHeader;
-+	u16 ver_minor;
-+
-+	ver_minor = pBase->version & AR5416_EEP_VER_MINOR_MASK;
- 
- 	switch (param) {
- 	case EEP_NFTHRESH_2:
-@@ -204,7 +207,7 @@ static u32 ath9k_hw_4k_get_eeprom(struct
- 	case EEP_DB_2:
- 		return pModal->db1_1;
- 	case EEP_MINOR_REV:
--		return pBase->version & AR5416_EEP_VER_MINOR_MASK;
-+		return ver_minor;
- 	case EEP_TX_MASK:
- 		return pBase->txMask;
- 	case EEP_RX_MASK:
-@@ -217,6 +220,11 @@ static u32 ath9k_hw_4k_get_eeprom(struct
- 		return pModal->version;
- 	case EEP_ANT_DIV_CTL1:
- 		return pModal->antdiv_ctl1;
-+	case EEP_TXGAIN_TYPE:
-+		if (ver_minor >= AR5416_EEP_MINOR_VER_19)
-+			return pBase->txGainType;
-+		else
-+			return AR5416_EEP_TXGAIN_ORIGINAL;
- 	default:
- 		return 0;
- 	}

+ 1 - 1
package/mac80211/patches/601-rt2x00-fix-hang-on-ifdown.patch

@@ -16,7 +16,7 @@ Signed-off-by: Helmut Schaa <[email protected]>
 
 
 --- a/drivers/net/wireless/rt2x00/rt2800pci.c
 --- a/drivers/net/wireless/rt2x00/rt2800pci.c
 +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
 +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
-@@ -585,6 +585,10 @@ static void rt2800pci_kill_tx_queue(stru
+@@ -593,6 +593,10 @@ static void rt2800pci_kill_tx_queue(stru
  		return;
  		return;
  	}
  	}
  
  

+ 1 - 1
package/mac80211/patches/800-b43-gpio-mask-module-option.patch

@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/b43/b43.h
 --- a/drivers/net/wireless/b43/b43.h
 +++ b/drivers/net/wireless/b43/b43.h
 +++ b/drivers/net/wireless/b43/b43.h
-@@ -704,6 +704,7 @@ struct b43_wldev {
+@@ -705,6 +705,7 @@ struct b43_wldev {
  	bool qos_enabled;		/* TRUE, if QoS is used. */
  	bool qos_enabled;		/* TRUE, if QoS is used. */
  	bool hwcrypto_enabled;		/* TRUE, if HW crypto acceleration is enabled. */
  	bool hwcrypto_enabled;		/* TRUE, if HW crypto acceleration is enabled. */
  	bool use_pio;			/* TRUE if next init should use PIO */
  	bool use_pio;			/* TRUE if next init should use PIO */