diff --git a/package/mac80211/Makefile b/package/mac80211/Makefile index b6448402b..52f415730 100644 --- a/package/mac80211/Makefile +++ b/package/mac80211/Makefile @@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk 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 # http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \ # http://wireless.kernel.org/download/compat-wireless-2.6 -PKG_MD5SUM:=c1b4ebcb61a59824493ec35f799f8393 +PKG_MD5SUM:=fb1c0c0417173b781937faee6ac2978f PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION) diff --git a/package/mac80211/patches/008-led_default.patch b/package/mac80211/patches/008-led_default.patch index 79868f7a7..5a2105bbd 100644 --- a/package/mac80211/patches/008-led_default.patch +++ b/package/mac80211/patches/008-led_default.patch @@ -81,7 +81,7 @@ void ath_deinit_leds(struct ath_softc *sc) --- a/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, 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, &led->brightness_work, 0); } @@ -97,7 +97,7 @@ 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, char *trigger) { @@ -105,7 +105,7 @@ int ret; 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); return ret; diff --git a/package/mac80211/patches/020-nl80211_backport.patch b/package/mac80211/patches/020-nl80211_backport.patch new file mode 100644 index 000000000..5d6fbc405 --- /dev/null +++ b/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 ++ ++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) */ diff --git a/package/mac80211/patches/310-mac80211_sw_scan_fix.patch b/package/mac80211/patches/310-mac80211_sw_scan_fix.patch new file mode 100644 index 000000000..0375780da --- /dev/null +++ b/package/mac80211/patches/310-mac80211_sw_scan_fix.patch @@ -0,0 +1,33 @@ +From: Johannes Berg + +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 +Signed-off-by: Johannes Berg +--- + 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: diff --git a/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch b/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch index 23631dcac..7dd3584d6 100644 --- a/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch +++ b/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch @@ -8,7 +8,7 @@ #include #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 + 1] = eeval & 0xff; } diff --git a/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch b/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch index 5048194cb..1d90d6c14 100644 --- a/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch +++ b/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 +++ 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_common *common; @@ -18,7 +18,7 @@ int ret = 0, i; 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; sc->sc_ah = ah; @@ -31,7 +31,7 @@ common->bus_ops = bus_ops; --- a/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.subvendorid = 0; diff --git a/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch b/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch index 72f7751fc..1a5ff02bb 100644 --- a/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch +++ b/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch @@ -11,7 +11,7 @@ #include "hw.h" #include "hw-ops.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) { struct ath_common *common = ath9k_hw_common(ah); diff --git a/package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch b/package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch index 64481fcc3..c2bf8187a 100644 --- a/package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch +++ b/package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch @@ -1,6 +1,6 @@ --- a/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) { REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500); diff --git a/package/mac80211/patches/409-ath9k-add-wndr3700-antenna-initialization.patch b/package/mac80211/patches/409-ath9k-add-wndr3700-antenna-initialization.patch index 7f491f31b..b79dd51a2 100644 --- a/package/mac80211/patches/409-ath9k-add-wndr3700-antenna-initialization.patch +++ b/package/mac80211/patches/409-ath9k-add-wndr3700-antenna-initialization.patch @@ -8,7 +8,7 @@ #include "ath9k.h" 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; if (!pdata) ah->ah_flags |= AH_USE_EEPROM; @@ -17,7 +17,7 @@ common = ath9k_hw_common(ah); 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); } @@ -42,7 +42,7 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid, 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); ath9k_set_hw_capab(sc, hw); @@ -54,7 +54,7 @@ ath9k_reg_notifier); --- a/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; diff --git a/package/mac80211/patches/410-ath9k-wndr3700-led-pin-fix.patch b/package/mac80211/patches/410-ath9k-wndr3700-led-pin-fix.patch index 02481aba2..d9de21fb7 100644 --- a/package/mac80211/patches/410-ath9k-wndr3700-led-pin-fix.patch +++ b/package/mac80211/patches/410-ath9k-wndr3700-led-pin-fix.patch @@ -13,7 +13,7 @@ sc->sc_ah->led_pin = ATH_LED_PIN_DEF; --- a/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_9287 8 diff --git a/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch b/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch index cbe2d7366..2e0e692b9 100644 --- a/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch +++ b/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch @@ -1,6 +1,6 @@ --- a/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 }; @@ -54,7 +54,7 @@ int ath9k_init_debug(struct ath_hw *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)) goto err; diff --git a/package/mac80211/patches/510-ath9k_htc_remove_ani_nf.patch b/package/mac80211/patches/510-ath9k_htc_remove_ani_nf.patch deleted file mode 100644 index 4ef621853..000000000 --- a/package/mac80211/patches/510-ath9k_htc_remove_ani_nf.patch +++ /dev/null @@ -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); - } - diff --git a/package/mac80211/patches/511-ath9k_per_chan_nf.patch b/package/mac80211/patches/511-ath9k_per_chan_nf.patch deleted file mode 100644 index cbf44e640..000000000 --- a/package/mac80211/patches/511-ath9k_per_chan_nf.patch +++ /dev/null @@ -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; diff --git a/package/mac80211/patches/512-ath9k_survey_no_bogus_nf.patch b/package/mac80211/patches/512-ath9k_survey_no_bogus_nf.patch deleted file mode 100644 index 798e59c3a..000000000 --- a/package/mac80211/patches/512-ath9k_survey_no_bogus_nf.patch +++ /dev/null @@ -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; - } diff --git a/package/mac80211/patches/513-ath9k_remove_ani_nf.patch b/package/mac80211/patches/513-ath9k_remove_ani_nf.patch deleted file mode 100644 index 0f1fb2197..000000000 --- a/package/mac80211/patches/513-ath9k_remove_ani_nf.patch +++ /dev/null @@ -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); - } - } - diff --git a/package/mac80211/patches/514-mac80211_survey_chan_in_use.patch b/package/mac80211/patches/514-mac80211_survey_chan_in_use.patch deleted file mode 100644 index 1f9d4462e..000000000 --- a/package/mac80211/patches/514-mac80211_survey_chan_in_use.patch +++ /dev/null @@ -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); - diff --git a/package/mac80211/patches/515-ath9k_multi_channel_nf.patch b/package/mac80211/patches/515-ath9k_multi_channel_nf.patch deleted file mode 100644 index 468da97ef..000000000 --- a/package/mac80211/patches/515-ath9k_multi_channel_nf.patch +++ /dev/null @@ -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; diff --git a/package/mac80211/patches/520-ath9k_multiple_cards_fix.patch b/package/mac80211/patches/520-ath9k_multiple_cards_fix.patch deleted file mode 100644 index 349807b21..000000000 --- a/package/mac80211/patches/520-ath9k_multiple_cards_fix.patch +++ /dev/null @@ -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); diff --git a/package/mac80211/patches/530-ath9k_remove_calinitdata.patch b/package/mac80211/patches/530-ath9k_remove_calinitdata.patch deleted file mode 100644 index 78425e1dc..000000000 --- a/package/mac80211/patches/530-ath9k_remove_calinitdata.patch +++ /dev/null @@ -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; diff --git a/package/mac80211/patches/531-ath9k_cal_cleanup.patch b/package/mac80211/patches/531-ath9k_cal_cleanup.patch deleted file mode 100644 index 3a14d5289..000000000 --- a/package/mac80211/patches/531-ath9k_cal_cleanup.patch +++ /dev/null @@ -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, diff --git a/package/mac80211/patches/540-ath9k_cycle_counters_cleanup.patch b/package/mac80211/patches/540-ath9k_cycle_counters_cleanup.patch deleted file mode 100644 index 89af14691..000000000 --- a/package/mac80211/patches/540-ath9k_cycle_counters_cleanup.patch +++ /dev/null @@ -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"); diff --git a/package/mac80211/patches/550-ath9k_cleanup_regwrite_buffer.patch b/package/mac80211/patches/550-ath9k_cleanup_regwrite_buffer.patch deleted file mode 100644 index a0ef55562..000000000 --- a/package/mac80211/patches/550-ath9k_cleanup_regwrite_buffer.patch +++ /dev/null @@ -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: diff --git a/package/mac80211/patches/551-ath9k_ani_helper.patch b/package/mac80211/patches/551-ath9k_ani_helper.patch deleted file mode 100644 index dfd85f237..000000000 --- a/package/mac80211/patches/551-ath9k_ani_helper.patch +++ /dev/null @@ -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; - diff --git a/package/mac80211/patches/552-ath9k_fix_ani_listen_time.patch b/package/mac80211/patches/552-ath9k_fix_ani_listen_time.patch deleted file mode 100644 index 9d83a0226..000000000 --- a/package/mac80211/patches/552-ath9k_fix_ani_listen_time.patch +++ /dev/null @@ -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) diff --git a/package/mac80211/patches/560-ath9k-get-ath9k-get-correct-tx-gain-type.patch b/package/mac80211/patches/560-ath9k-get-ath9k-get-correct-tx-gain-type.patch deleted file mode 100644 index d9262cf65..000000000 --- a/package/mac80211/patches/560-ath9k-get-ath9k-get-correct-tx-gain-type.patch +++ /dev/null @@ -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; - } diff --git a/package/mac80211/patches/601-rt2x00-fix-hang-on-ifdown.patch b/package/mac80211/patches/601-rt2x00-fix-hang-on-ifdown.patch index 2f9b5d6f7..3bee27105 100644 --- a/package/mac80211/patches/601-rt2x00-fix-hang-on-ifdown.patch +++ b/package/mac80211/patches/601-rt2x00-fix-hang-on-ifdown.patch @@ -16,7 +16,7 @@ Signed-off-by: Helmut Schaa --- a/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; } diff --git a/package/mac80211/patches/800-b43-gpio-mask-module-option.patch b/package/mac80211/patches/800-b43-gpio-mask-module-option.patch index 35bea59cc..bef3b58c3 100644 --- a/package/mac80211/patches/800-b43-gpio-mask-module-option.patch +++ b/package/mac80211/patches/800-b43-gpio-mask-module-option.patch @@ -1,6 +1,6 @@ --- a/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 hwcrypto_enabled; /* TRUE, if HW crypto acceleration is enabled. */ bool use_pio; /* TRUE if next init should use PIO */