aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-06-18 01:26:36 +0000
committerFelix Fietkau <nbd@openwrt.org>2012-06-18 01:26:36 +0000
commit33600679329458db7a0d258f3985daa52d98bf75 (patch)
tree9c5f6766d736f534cb39faa25b00a9b126d26f94 /package/mac80211
parentc73b39fd302245a47813d1a41a082df7b82c45fb (diff)
downloadupstream-33600679329458db7a0d258f3985daa52d98bf75.tar.gz
upstream-33600679329458db7a0d258f3985daa52d98bf75.tar.bz2
upstream-33600679329458db7a0d258f3985daa52d98bf75.zip
mac80211: update to wireless-testing 2012-06-14
SVN-Revision: 32420
Diffstat (limited to 'package/mac80211')
-rw-r--r--package/mac80211/Makefile4
-rw-r--r--package/mac80211/patches/001-disable_b44.patch2
-rw-r--r--package/mac80211/patches/002-disable_rfkill.patch2
-rw-r--r--package/mac80211/patches/005-disable_ssb_build.patch6
-rw-r--r--package/mac80211/patches/006-disable_bcma_build.patch2
-rw-r--r--package/mac80211/patches/007-remove_misc_drivers.patch4
-rw-r--r--package/mac80211/patches/010-no_pcmcia.patch2
-rw-r--r--package/mac80211/patches/011-no_sdio.patch2
-rw-r--r--package/mac80211/patches/013-disable_b43_nphy.patch2
-rw-r--r--package/mac80211/patches/015-remove-rt2x00-options.patch4
-rw-r--r--package/mac80211/patches/022-remove_crc8_and_cordic.patch2
-rw-r--r--package/mac80211/patches/071-add_codel_ifdef.patch14
-rw-r--r--package/mac80211/patches/110-disable_usb_compat.patch2
-rw-r--r--package/mac80211/patches/300-pending_work.patch1555
-rw-r--r--package/mac80211/patches/402-ath9k-fix-invalid-mac-address-handling.patch2
-rw-r--r--package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch36
-rw-r--r--package/mac80211/patches/412-mac80211_allow_adhoc_and_ap.patch2
-rw-r--r--package/mac80211/patches/500-ath9k_eeprom_debugfs.patch4
-rw-r--r--package/mac80211/patches/501-ath9k-eeprom_endianess.patch2
-rw-r--r--package/mac80211/patches/502-ath9k_ahb_init.patch2
-rw-r--r--package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch4
-rw-r--r--package/mac80211/patches/512-ath9k_channelbw_debugfs.patch16
-rw-r--r--package/mac80211/patches/513-mac80211_reduce_txqueuelen.patch2
-rw-r--r--package/mac80211/patches/520-mac80211_cur_txpower.patch2
-rw-r--r--package/mac80211/patches/521-ath9k_cur_txpower.patch4
-rw-r--r--package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch79
-rw-r--r--package/mac80211/patches/530-ath9k_limit_qlen.patch12
-rw-r--r--package/mac80211/patches/540-ath9k_extra_leds.patch12
-rw-r--r--package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch12
-rw-r--r--package/mac80211/patches/551-ath9k_optimize_interrupt_mitigation.patch2
-rw-r--r--package/mac80211/patches/570-ath9k_remove_noiseFloor.patch52
-rw-r--r--package/mac80211/patches/571-ath9k_ani_fix_weak_sig.patch30
-rw-r--r--package/mac80211/patches/572-ath9k_ani_cleanup_weak_signal_detect.patch192
-rw-r--r--package/mac80211/patches/573-ath9k_ani_fix_mode_checks.patch49
-rw-r--r--package/mac80211/patches/574-ath9k_remove_old_ani.patch627
-rw-r--r--package/mac80211/patches/575-ath9k_ani_cleanup.patch320
-rw-r--r--package/mac80211/patches/576-ath9k_ani_remove_mib_int.patch114
-rw-r--r--package/mac80211/patches/577-ath9k_fix_noise_immunity.patch69
-rw-r--r--package/mac80211/patches/578-ath9k_cleanup_ani_ofdm_trig.patch41
-rw-r--r--package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch14
-rw-r--r--package/mac80211/patches/604-rt2x00-add-CONFIG_RT2X00_LIB_EEPROM-option.patch2
-rw-r--r--package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch2
-rw-r--r--package/mac80211/patches/608-add_platform_data_mac_addr.patch2
-rw-r--r--package/mac80211/patches/800-b43-gpio-mask-module-option.patch2
-rw-r--r--package/mac80211/patches/820-b43-add-antenna-control.patch16
-rw-r--r--package/mac80211/patches/830-b43-workaround-pcie-bcm4716.patch2
-rw-r--r--package/mac80211/patches/840-brcmsmac-remove-PCIE.patch4
-rw-r--r--package/mac80211/patches/841-brcmsmac-remove-PCI_FORCEHT.patch6
-rw-r--r--package/mac80211/patches/842-brcmsmac-remove-ai_get_buscoretype-and-ai_get_buscor.patch2
-rw-r--r--package/mac80211/patches/843-brcmsmac-use-container_of-instead-of-cast.patch12
-rw-r--r--package/mac80211/patches/844-brcmsmac-remove-ai_findcore.patch10
-rw-r--r--package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch6
-rw-r--r--package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch4
-rw-r--r--package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch4
54 files changed, 1418 insertions, 1960 deletions
diff --git a/package/mac80211/Makefile b/package/mac80211/Makefile
index 8ad134fa10..5d40e7e335 100644
--- a/package/mac80211/Makefile
+++ b/package/mac80211/Makefile
@@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=mac80211
-PKG_VERSION:=2012-05-29
+PKG_VERSION:=2012-06-14
PKG_RELEASE:=1
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
-PKG_MD5SUM:=a98eedfcb1690405626217e040deec1a
+PKG_MD5SUM:=009fd7aa420693e30df9090cee9ea189
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
diff --git a/package/mac80211/patches/001-disable_b44.patch b/package/mac80211/patches/001-disable_b44.patch
index aaebab1aff..aae8ef956a 100644
--- a/package/mac80211/patches/001-disable_b44.patch
+++ b/package/mac80211/patches/001-disable_b44.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -370,8 +370,8 @@ export CONFIG_B43_BCMA_EXTRA=y
+@@ -371,8 +371,8 @@ export CONFIG_B43_BCMA_EXTRA=y
export CONFIG_P54_PCI=m
diff --git a/package/mac80211/patches/002-disable_rfkill.patch b/package/mac80211/patches/002-disable_rfkill.patch
index 1bd9fc3fe1..4660909b24 100644
--- a/package/mac80211/patches/002-disable_rfkill.patch
+++ b/package/mac80211/patches/002-disable_rfkill.patch
@@ -9,7 +9,7 @@
ifeq ($(CONFIG_MAC80211),y)
$(error "ERROR: you have MAC80211 compiled into the kernel, CONFIG_MAC80211=y, as such you cannot replace its mac80211 driver. You need this set to CONFIG_MAC80211=m. If you are using Fedora upgrade your kernel as later version should this set as modular. For further information on Fedora see https://bugzilla.redhat.com/show_bug.cgi?id=470143. If you are using your own kernel recompile it and make mac80211 modular")
-@@ -675,10 +675,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
+@@ -683,10 +683,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
# We need the backported rfkill module on kernel < 2.6.31.
# In more recent kernel versions use the in kernel rfkill module.
ifdef CONFIG_COMPAT_KERNEL_2_6_31
diff --git a/package/mac80211/patches/005-disable_ssb_build.patch b/package/mac80211/patches/005-disable_ssb_build.patch
index 996d7b14a9..23ce92440d 100644
--- a/package/mac80211/patches/005-disable_ssb_build.patch
+++ b/package/mac80211/patches/005-disable_ssb_build.patch
@@ -19,7 +19,7 @@
else
include $(KLIB_BUILD)/.config
endif
-@@ -346,7 +346,8 @@ export CONFIG_IPW2200_QOS=y
+@@ -347,7 +347,8 @@ export CONFIG_IPW2200_QOS=y
# % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
endif #CONFIG_WIRELESS_EXT
@@ -29,7 +29,7 @@
# Sonics Silicon Backplane
export CONFIG_SSB_SPROM=y
-@@ -359,7 +360,7 @@ endif #CONFIG_PCMCIA
+@@ -360,7 +361,7 @@ endif #CONFIG_PCMCIA
# export CONFIG_SSB_DEBUG=y
export CONFIG_SSB_DRIVER_PCICORE=y
export CONFIG_B43_SSB=y
@@ -38,7 +38,7 @@
export CONFIG_BCMA=m
export CONFIG_BCMA_BLOCKIO=y
-@@ -574,7 +575,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
+@@ -577,7 +578,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
ifdef CONFIG_MMC
diff --git a/package/mac80211/patches/006-disable_bcma_build.patch b/package/mac80211/patches/006-disable_bcma_build.patch
index fd05385f01..a0265ac797 100644
--- a/package/mac80211/patches/006-disable_bcma_build.patch
+++ b/package/mac80211/patches/006-disable_bcma_build.patch
@@ -10,7 +10,7 @@
ifeq ($(CONFIG_STAGING_EXCLUDE_BUILD),)
--- a/config.mk
+++ b/config.mk
-@@ -362,12 +362,12 @@ export CONFIG_SSB_DRIVER_PCICORE=y
+@@ -363,12 +363,12 @@ export CONFIG_SSB_DRIVER_PCICORE=y
export CONFIG_B43_SSB=y
endif #__CONFIG_SSB
diff --git a/package/mac80211/patches/007-remove_misc_drivers.patch b/package/mac80211/patches/007-remove_misc_drivers.patch
index f5bd351a40..b89089d982 100644
--- a/package/mac80211/patches/007-remove_misc_drivers.patch
+++ b/package/mac80211/patches/007-remove_misc_drivers.patch
@@ -9,7 +9,7 @@
endif #CONFIG_STAGING
# mac80211 test driver
-@@ -399,15 +399,15 @@ endif #CONFIG_CRC_ITU_T
+@@ -400,15 +400,15 @@ endif #CONFIG_CRC_ITU_T
export CONFIG_MWL8K=m
# Ethernet drivers go here
@@ -32,7 +32,7 @@
endif #CONFIG_COMPAT_KERNEL_2_6_28
ifdef CONFIG_WIRELESS_EXT
-@@ -468,21 +468,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
+@@ -469,21 +469,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
# Note: this depends on CONFIG_USB_NET_RNDIS_HOST and CONFIG_USB_NET_CDCETHER
# it also requires new RNDIS_HOST and CDC_ETHER modules which we add
ifdef CONFIG_COMPAT_KERNEL_2_6_29
diff --git a/package/mac80211/patches/010-no_pcmcia.patch b/package/mac80211/patches/010-no_pcmcia.patch
index 9d94b8dbf3..e9b5ab7346 100644
--- a/package/mac80211/patches/010-no_pcmcia.patch
+++ b/package/mac80211/patches/010-no_pcmcia.patch
@@ -9,7 +9,7 @@
# export CONFIG_SSB=m
else
include $(KLIB_BUILD)/.config
-@@ -297,7 +297,7 @@ export CONFIG_B43=m
+@@ -298,7 +298,7 @@ export CONFIG_B43=m
export CONFIG_B43_HWRNG=y
export CONFIG_B43_PCI_AUTOSELECT=y
ifdef CONFIG_PCMCIA
diff --git a/package/mac80211/patches/011-no_sdio.patch b/package/mac80211/patches/011-no_sdio.patch
index 58c3ba96bf..380074754e 100644
--- a/package/mac80211/patches/011-no_sdio.patch
+++ b/package/mac80211/patches/011-no_sdio.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -576,7 +576,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
+@@ -579,7 +579,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
ifdef CONFIG_MMC
# export CONFIG_SSB_SDIOHOST=y
diff --git a/package/mac80211/patches/013-disable_b43_nphy.patch b/package/mac80211/patches/013-disable_b43_nphy.patch
index 10ee794059..ae5be9ff65 100644
--- a/package/mac80211/patches/013-disable_b43_nphy.patch
+++ b/package/mac80211/patches/013-disable_b43_nphy.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -303,8 +303,8 @@ ifdef CONFIG_MAC80211_LEDS
+@@ -304,8 +304,8 @@ ifdef CONFIG_MAC80211_LEDS
export CONFIG_B43_LEDS=y
endif #CONFIG_MAC80211_LEDS
export CONFIG_B43_PHY_LP=y
diff --git a/package/mac80211/patches/015-remove-rt2x00-options.patch b/package/mac80211/patches/015-remove-rt2x00-options.patch
index bd27913393..5b029c41db 100644
--- a/package/mac80211/patches/015-remove-rt2x00-options.patch
+++ b/package/mac80211/patches/015-remove-rt2x00-options.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -378,7 +378,7 @@ export CONFIG_RTL8180=m
+@@ -379,7 +379,7 @@ export CONFIG_RTL8180=m
export CONFIG_ADM8211=m
@@ -9,7 +9,7 @@
export CONFIG_RT2400PCI=m
export CONFIG_RT2500PCI=m
ifdef CONFIG_CRC_CCITT
-@@ -524,7 +524,7 @@ export CONFIG_RT2800USB_RT35XX=y
+@@ -525,7 +525,7 @@ export CONFIG_RT2800USB_RT35XX=y
export CONFIG_RT2800USB_RT53XX=y
export CONFIG_RT2800USB_UNKNOWN=y
endif #CONFIG_CRC_CCITT
diff --git a/package/mac80211/patches/022-remove_crc8_and_cordic.patch b/package/mac80211/patches/022-remove_crc8_and_cordic.patch
index 56721f3c16..86bbfe67a0 100644
--- a/package/mac80211/patches/022-remove_crc8_and_cordic.patch
+++ b/package/mac80211/patches/022-remove_crc8_and_cordic.patch
@@ -1,6 +1,6 @@
--- a/compat/Makefile
+++ b/compat/Makefile
-@@ -43,8 +43,6 @@ compat-$(CONFIG_COMPAT_KERNEL_3_3) += \
+@@ -44,8 +44,6 @@ compat-$(CONFIG_COMPAT_KERNEL_3_3) += \
flow_dissector.o
compat-$(CONFIG_COMPAT_KERNEL_3_4) += compat-3.4.o
diff --git a/package/mac80211/patches/071-add_codel_ifdef.patch b/package/mac80211/patches/071-add_codel_ifdef.patch
index b69fdd78b4..45a599c4f6 100644
--- a/package/mac80211/patches/071-add_codel_ifdef.patch
+++ b/package/mac80211/patches/071-add_codel_ifdef.patch
@@ -1,19 +1,19 @@
--- a/include/linux/compat-3.5.h
+++ b/include/linux/compat-3.5.h
-@@ -10,6 +10,8 @@
+@@ -8,6 +8,8 @@
- #include <linux/pkt_sched.h>
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0))
+#ifndef TCA_CODEL_MAX
+
/*
* This backports:
*
-@@ -107,6 +109,7 @@ struct tc_fq_codel_xstats {
- };
- };
+@@ -106,6 +108,7 @@ struct vga_switcheroo_client_ops {
+
+ #define SIZE_MAX (~(size_t)0)
+#endif /* TCA_CODEL_MAX */
- /* Backports tty_lock: Localise the lock */
- #define tty_lock(__tty) tty_lock()
+ #include <linux/pkt_sched.h>
+
diff --git a/package/mac80211/patches/110-disable_usb_compat.patch b/package/mac80211/patches/110-disable_usb_compat.patch
index 6108989622..6f674008f9 100644
--- a/package/mac80211/patches/110-disable_usb_compat.patch
+++ b/package/mac80211/patches/110-disable_usb_compat.patch
@@ -33,7 +33,7 @@
#endif
--- a/config.mk
+++ b/config.mk
-@@ -506,7 +506,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
+@@ -507,7 +507,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
# This activates a threading fix for usb urb.
# this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351
# This fix will be included in some stable releases.
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index 9044396dc8..cb219c9147 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -1,63 +1,1221 @@
---- a/drivers/net/wireless/ath/ath5k/base.c
-+++ b/drivers/net/wireless/ath/ath5k/base.c
-@@ -2417,6 +2417,22 @@ ath5k_tx_complete_poll_work(struct work_
- * Initialization routines *
- \*************************/
-
-+static const struct ieee80211_iface_limit if_limits[] = {
-+ { .max = 2048, .types = BIT(NL80211_IFTYPE_STATION) },
-+ { .max = 4, .types =
-+#ifdef CONFIG_MAC80211_MESH
-+ BIT(NL80211_IFTYPE_MESH_POINT) |
-+#endif
-+ BIT(NL80211_IFTYPE_AP) },
-+};
-+
-+static const struct ieee80211_iface_combination if_comb = {
-+ .limits = if_limits,
-+ .n_limits = ARRAY_SIZE(if_limits),
-+ .max_interfaces = 2048,
-+ .num_different_channels = 1,
-+};
-+
- int __devinit
- ath5k_init_ah(struct ath5k_hw *ah, const struct ath_bus_ops *bus_ops)
+--- a/drivers/net/wireless/ath/ath9k/ani.c
++++ b/drivers/net/wireless/ath/ath9k/ani.c
+@@ -104,11 +104,6 @@ static const struct ani_cck_level_entry
+ #define ATH9K_ANI_CCK_DEF_LEVEL \
+ 2 /* default level - matches the INI settings */
+
+-static bool use_new_ani(struct ath_hw *ah)
+-{
+- return AR_SREV_9300_20_OR_LATER(ah) || modparam_force_new_ani;
+-}
+-
+ static void ath9k_hw_update_mibstats(struct ath_hw *ah,
+ struct ath9k_mib_stats *stats)
+ {
+@@ -122,8 +117,6 @@ static void ath9k_hw_update_mibstats(str
+ static void ath9k_ani_restart(struct ath_hw *ah)
+ {
+ struct ar5416AniState *aniState;
+- struct ath_common *common = ath9k_hw_common(ah);
+- u32 ofdm_base = 0, cck_base = 0;
+
+ if (!DO_ANI(ah))
+ return;
+@@ -131,18 +124,10 @@ static void ath9k_ani_restart(struct ath
+ aniState = &ah->curchan->ani;
+ aniState->listenTime = 0;
+
+- if (!use_new_ani(ah)) {
+- ofdm_base = AR_PHY_COUNTMAX - ah->config.ofdm_trig_high;
+- cck_base = AR_PHY_COUNTMAX - ah->config.cck_trig_high;
+- }
+-
+- ath_dbg(common, ANI, "Writing ofdmbase=%u cckbase=%u\n",
+- ofdm_base, cck_base);
+-
+ ENABLE_REGWRITE_BUFFER(ah);
+
+- REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base);
+- REG_WRITE(ah, AR_PHY_ERR_2, cck_base);
++ REG_WRITE(ah, AR_PHY_ERR_1, 0);
++ REG_WRITE(ah, AR_PHY_ERR_2, 0);
+ REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
+ REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
+
+@@ -154,110 +139,6 @@ static void ath9k_ani_restart(struct ath
+ aniState->cckPhyErrCount = 0;
+ }
+
+-static void ath9k_hw_ani_ofdm_err_trigger_old(struct ath_hw *ah)
+-{
+- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
+- struct ar5416AniState *aniState;
+- int32_t rssi;
+-
+- aniState = &ah->curchan->ani;
+-
+- if (aniState->noiseImmunityLevel < HAL_NOISE_IMMUNE_MAX) {
+- if (ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
+- aniState->noiseImmunityLevel + 1)) {
+- return;
+- }
+- }
+-
+- if (aniState->spurImmunityLevel < HAL_SPUR_IMMUNE_MAX) {
+- if (ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
+- aniState->spurImmunityLevel + 1)) {
+- return;
+- }
+- }
+-
+- if (ah->opmode == NL80211_IFTYPE_AP) {
+- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
+- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
+- aniState->firstepLevel + 1);
+- }
+- return;
+- }
+- rssi = BEACON_RSSI(ah);
+- if (rssi > aniState->rssiThrHigh) {
+- if (!aniState->ofdmWeakSigDetectOff) {
+- if (ath9k_hw_ani_control(ah,
+- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
+- false)) {
+- ath9k_hw_ani_control(ah,
+- ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0);
+- return;
+- }
+- }
+- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
+- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
+- aniState->firstepLevel + 1);
+- return;
+- }
+- } else if (rssi > aniState->rssiThrLow) {
+- if (aniState->ofdmWeakSigDetectOff)
+- ath9k_hw_ani_control(ah,
+- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
+- true);
+- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX)
+- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
+- aniState->firstepLevel + 1);
+- return;
+- } else {
+- if ((conf->channel->band == IEEE80211_BAND_2GHZ) &&
+- !conf_is_ht(conf)) {
+- if (!aniState->ofdmWeakSigDetectOff)
+- ath9k_hw_ani_control(ah,
+- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
+- false);
+- if (aniState->firstepLevel > 0)
+- ath9k_hw_ani_control(ah,
+- ATH9K_ANI_FIRSTEP_LEVEL, 0);
+- return;
+- }
+- }
+-}
+-
+-static void ath9k_hw_ani_cck_err_trigger_old(struct ath_hw *ah)
+-{
+- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
+- struct ar5416AniState *aniState;
+- int32_t rssi;
+-
+- aniState = &ah->curchan->ani;
+- if (aniState->noiseImmunityLevel < HAL_NOISE_IMMUNE_MAX) {
+- if (ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
+- aniState->noiseImmunityLevel + 1)) {
+- return;
+- }
+- }
+- if (ah->opmode == NL80211_IFTYPE_AP) {
+- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
+- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
+- aniState->firstepLevel + 1);
+- }
+- return;
+- }
+- rssi = BEACON_RSSI(ah);
+- if (rssi > aniState->rssiThrLow) {
+- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX)
+- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
+- aniState->firstepLevel + 1);
+- } else {
+- if ((conf->channel->band == IEEE80211_BAND_2GHZ) &&
+- !conf_is_ht(conf)) {
+- if (aniState->firstepLevel > 0)
+- ath9k_hw_ani_control(ah,
+- ATH9K_ANI_FIRSTEP_LEVEL, 0);
+- }
+- }
+-}
+-
+ /* Adjust the OFDM Noise Immunity Level */
+ static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel)
{
-@@ -2438,6 +2454,9 @@ ath5k_init_ah(struct ath5k_hw *ah, const
- BIT(NL80211_IFTYPE_ADHOC) |
- BIT(NL80211_IFTYPE_MESH_POINT);
+@@ -265,18 +146,15 @@ static void ath9k_hw_set_ofdm_nil(struct
+ struct ath_common *common = ath9k_hw_common(ah);
+ const struct ani_ofdm_level_entry *entry_ofdm;
+ const struct ani_cck_level_entry *entry_cck;
+-
+- aniState->noiseFloor = BEACON_RSSI(ah);
++ bool weak_sig;
+
+ ath_dbg(common, ANI, "**** ofdmlevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
+ aniState->ofdmNoiseImmunityLevel,
+- immunityLevel, aniState->noiseFloor,
++ immunityLevel, BEACON_RSSI(ah),
+ aniState->rssiThrLow, aniState->rssiThrHigh);
+
+ if (aniState->update_ani)
+- aniState->ofdmNoiseImmunityLevel =
+- (immunityLevel > ATH9K_ANI_OFDM_DEF_LEVEL) ?
+- immunityLevel : ATH9K_ANI_OFDM_DEF_LEVEL;
++ aniState->ofdmNoiseImmunityLevel = immunityLevel;
+
+ entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
+ entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel];
+@@ -292,12 +170,22 @@ static void ath9k_hw_set_ofdm_nil(struct
+ ATH9K_ANI_FIRSTEP_LEVEL,
+ entry_ofdm->fir_step_level);
-+ hw->wiphy->iface_combinations = &if_comb;
-+ hw->wiphy->n_iface_combinations = 1;
+- if ((aniState->noiseFloor >= aniState->rssiThrHigh) &&
+- (!aniState->ofdmWeakSigDetectOff !=
+- entry_ofdm->ofdm_weak_signal_on)) {
++ weak_sig = entry_ofdm->ofdm_weak_signal_on;
++ if (ah->opmode == NL80211_IFTYPE_STATION &&
++ BEACON_RSSI(ah) <= aniState->rssiThrHigh)
++ weak_sig = true;
+
- /* SW support for IBSS_RSN is provided by mac80211 */
- hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
++ if (aniState->ofdmWeakSigDetect != weak_sig)
+ ath9k_hw_ani_control(ah,
+ ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
+ entry_ofdm->ofdm_weak_signal_on);
++
++ if (aniState->ofdmNoiseImmunityLevel >= ATH9K_ANI_OFDM_DEF_LEVEL) {
++ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
++ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI;
++ } else {
++ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI;
++ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
+ }
+ }
---- a/net/mac80211/agg-rx.c
-+++ b/net/mac80211/agg-rx.c
-@@ -145,15 +145,20 @@ static void sta_rx_agg_session_timer_exp
- struct tid_ampdu_rx *tid_rx;
- unsigned long timeout;
+@@ -308,11 +196,6 @@ static void ath9k_hw_ani_ofdm_err_trigge
+ if (!DO_ANI(ah))
+ return;
-+ rcu_read_lock();
- tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[*ptid]);
-- if (!tid_rx)
-+ if (!tid_rx) {
-+ rcu_read_unlock();
+- if (!use_new_ani(ah)) {
+- ath9k_hw_ani_ofdm_err_trigger_old(ah);
+- return;
+- }
+-
+ aniState = &ah->curchan->ani;
+
+ if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL)
+@@ -329,22 +212,18 @@ static void ath9k_hw_set_cck_nil(struct
+ const struct ani_ofdm_level_entry *entry_ofdm;
+ const struct ani_cck_level_entry *entry_cck;
+
+- aniState->noiseFloor = BEACON_RSSI(ah);
+ ath_dbg(common, ANI, "**** ccklevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
+ aniState->cckNoiseImmunityLevel, immunityLevel,
+- aniState->noiseFloor, aniState->rssiThrLow,
++ BEACON_RSSI(ah), aniState->rssiThrLow,
+ aniState->rssiThrHigh);
+
+- if ((ah->opmode == NL80211_IFTYPE_STATION ||
+- ah->opmode == NL80211_IFTYPE_ADHOC) &&
+- aniState->noiseFloor <= aniState->rssiThrLow &&
++ if (ah->opmode == NL80211_IFTYPE_STATION &&
++ BEACON_RSSI(ah) <= aniState->rssiThrLow &&
+ immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
+ immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
+
+ if (aniState->update_ani)
+- aniState->cckNoiseImmunityLevel =
+- (immunityLevel > ATH9K_ANI_CCK_DEF_LEVEL) ?
+- immunityLevel : ATH9K_ANI_CCK_DEF_LEVEL;
++ aniState->cckNoiseImmunityLevel = immunityLevel;
+
+ entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
+ entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel];
+@@ -372,70 +251,12 @@ static void ath9k_hw_ani_cck_err_trigger
+ if (!DO_ANI(ah))
return;
-+ }
- timeout = tid_rx->last_rx + TU_TO_JIFFIES(tid_rx->timeout);
- if (time_is_after_jiffies(timeout)) {
- mod_timer(&tid_rx->session_timer, timeout);
-+ rcu_read_unlock();
+- if (!use_new_ani(ah)) {
+- ath9k_hw_ani_cck_err_trigger_old(ah);
+- return;
+- }
+-
+ aniState = &ah->curchan->ani;
+
+ if (aniState->cckNoiseImmunityLevel < ATH9K_ANI_CCK_MAX_LEVEL)
+ ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1);
+ }
+
+-static void ath9k_hw_ani_lower_immunity_old(struct ath_hw *ah)
+-{
+- struct ar5416AniState *aniState;
+- int32_t rssi;
+-
+- aniState = &ah->curchan->ani;
+-
+- if (ah->opmode == NL80211_IFTYPE_AP) {
+- if (aniState->firstepLevel > 0) {
+- if (ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
+- aniState->firstepLevel - 1))
+- return;
+- }
+- } else {
+- rssi = BEACON_RSSI(ah);
+- if (rssi > aniState->rssiThrHigh) {
+- /* XXX: Handle me */
+- } else if (rssi > aniState->rssiThrLow) {
+- if (aniState->ofdmWeakSigDetectOff) {
+- if (ath9k_hw_ani_control(ah,
+- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
+- true))
+- return;
+- }
+- if (aniState->firstepLevel > 0) {
+- if (ath9k_hw_ani_control(ah,
+- ATH9K_ANI_FIRSTEP_LEVEL,
+- aniState->firstepLevel - 1))
+- return;
+- }
+- } else {
+- if (aniState->firstepLevel > 0) {
+- if (ath9k_hw_ani_control(ah,
+- ATH9K_ANI_FIRSTEP_LEVEL,
+- aniState->firstepLevel - 1))
+- return;
+- }
+- }
+- }
+-
+- if (aniState->spurImmunityLevel > 0) {
+- if (ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
+- aniState->spurImmunityLevel - 1))
+- return;
+- }
+-
+- if (aniState->noiseImmunityLevel > 0) {
+- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
+- aniState->noiseImmunityLevel - 1);
+- return;
+- }
+-}
+-
+ /*
+ * only lower either OFDM or CCK errors per turn
+ * we lower the other one next time
+@@ -446,11 +267,6 @@ static void ath9k_hw_ani_lower_immunity(
+
+ aniState = &ah->curchan->ani;
+
+- if (!use_new_ani(ah)) {
+- ath9k_hw_ani_lower_immunity_old(ah);
+- return;
+- }
+-
+ /* lower OFDM noise immunity */
+ if (aniState->ofdmNoiseImmunityLevel > 0 &&
+ (aniState->ofdmsTurn || aniState->cckNoiseImmunityLevel == 0)) {
+@@ -463,72 +279,6 @@ static void ath9k_hw_ani_lower_immunity(
+ ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1);
+ }
+
+-static void ath9k_ani_reset_old(struct ath_hw *ah, bool is_scanning)
+-{
+- struct ar5416AniState *aniState;
+- struct ath9k_channel *chan = ah->curchan;
+- struct ath_common *common = ath9k_hw_common(ah);
+-
+- if (!DO_ANI(ah))
+- return;
+-
+- aniState = &ah->curchan->ani;
+-
+- if (ah->opmode != NL80211_IFTYPE_STATION
+- && ah->opmode != NL80211_IFTYPE_ADHOC) {
+- ath_dbg(common, ANI, "Reset ANI state opmode %u\n", ah->opmode);
+- ah->stats.ast_ani_reset++;
+-
+- if (ah->opmode == NL80211_IFTYPE_AP) {
+- /*
+- * ath9k_hw_ani_control() will only process items set on
+- * ah->ani_function
+- */
+- if (IS_CHAN_2GHZ(chan))
+- ah->ani_function = (ATH9K_ANI_SPUR_IMMUNITY_LEVEL |
+- ATH9K_ANI_FIRSTEP_LEVEL);
+- else
+- ah->ani_function = 0;
+- }
+-
+- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, 0);
+- ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0);
+- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, 0);
+- ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
+- !ATH9K_ANI_USE_OFDM_WEAK_SIG);
+- ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR,
+- ATH9K_ANI_CCK_WEAK_SIG_THR);
+-
+- ath9k_ani_restart(ah);
+- return;
+- }
+-
+- if (aniState->noiseImmunityLevel != 0)
+- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
+- aniState->noiseImmunityLevel);
+- if (aniState->spurImmunityLevel != 0)
+- ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
+- aniState->spurImmunityLevel);
+- if (aniState->ofdmWeakSigDetectOff)
+- ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
+- !aniState->ofdmWeakSigDetectOff);
+- if (aniState->cckWeakSigThreshold)
+- ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR,
+- aniState->cckWeakSigThreshold);
+- if (aniState->firstepLevel != 0)
+- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
+- aniState->firstepLevel);
+-
+- ath9k_ani_restart(ah);
+-
+- ENABLE_REGWRITE_BUFFER(ah);
+-
+- REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
+- REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
+-
+- REGWRITE_BUFFER_FLUSH(ah);
+-}
+-
+ /*
+ * Restore the ANI parameters in the HAL and reset the statistics.
+ * This routine should be called for every hardware reset and for
+@@ -539,13 +289,11 @@ void ath9k_ani_reset(struct ath_hw *ah,
+ struct ar5416AniState *aniState = &ah->curchan->ani;
+ struct ath9k_channel *chan = ah->curchan;
+ struct ath_common *common = ath9k_hw_common(ah);
++ int ofdm_nil, cck_nil;
+
+ if (!DO_ANI(ah))
return;
+
+- if (!use_new_ani(ah))
+- return ath9k_ani_reset_old(ah, is_scanning);
+-
+ BUG_ON(aniState == NULL);
+ ah->stats.ast_ani_reset++;
+
+@@ -563,6 +311,11 @@ void ath9k_ani_reset(struct ath_hw *ah,
+ /* always allow mode (on/off) to be controlled */
+ ah->ani_function |= ATH9K_ANI_MODE;
+
++ ofdm_nil = max_t(int, ATH9K_ANI_OFDM_DEF_LEVEL,
++ aniState->ofdmNoiseImmunityLevel);
++ cck_nil = max_t(int, ATH9K_ANI_CCK_DEF_LEVEL,
++ aniState->cckNoiseImmunityLevel);
++
+ if (is_scanning ||
+ (ah->opmode != NL80211_IFTYPE_STATION &&
+ ah->opmode != NL80211_IFTYPE_ADHOC)) {
+@@ -586,8 +339,8 @@ void ath9k_ani_reset(struct ath_hw *ah,
+ aniState->cckNoiseImmunityLevel);
+
+ aniState->update_ani = false;
+- ath9k_hw_set_ofdm_nil(ah, ATH9K_ANI_OFDM_DEF_LEVEL);
+- ath9k_hw_set_cck_nil(ah, ATH9K_ANI_CCK_DEF_LEVEL);
++ ofdm_nil = ATH9K_ANI_OFDM_DEF_LEVEL;
++ cck_nil = ATH9K_ANI_CCK_DEF_LEVEL;
+ }
+ } else {
+ /*
+@@ -603,11 +356,9 @@ void ath9k_ani_reset(struct ath_hw *ah,
+ aniState->cckNoiseImmunityLevel);
+
+ aniState->update_ani = true;
+- ath9k_hw_set_ofdm_nil(ah,
+- aniState->ofdmNoiseImmunityLevel);
+- ath9k_hw_set_cck_nil(ah,
+- aniState->cckNoiseImmunityLevel);
}
-+ rcu_read_unlock();
++ ath9k_hw_set_ofdm_nil(ah, ofdm_nil);
++ ath9k_hw_set_cck_nil(ah, cck_nil);
+
+ /*
+ * enable phy counters if hw supports or if not, enable phy
+@@ -627,9 +378,6 @@ static bool ath9k_hw_ani_read_counters(s
+ {
+ struct ath_common *common = ath9k_hw_common(ah);
+ struct ar5416AniState *aniState = &ah->curchan->ani;
+- u32 ofdm_base = 0;
+- u32 cck_base = 0;
+- u32 ofdmPhyErrCnt, cckPhyErrCnt;
+ u32 phyCnt1, phyCnt2;
+ int32_t listenTime;
+
+@@ -642,11 +390,6 @@ static bool ath9k_hw_ani_read_counters(s
+ return false;
+ }
+
+- if (!use_new_ani(ah)) {
+- ofdm_base = AR_PHY_COUNTMAX - ah->config.ofdm_trig_high;
+- cck_base = AR_PHY_COUNTMAX - ah->config.cck_trig_high;
+- }
+-
+ aniState->listenTime += listenTime;
+
+ ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
+@@ -654,35 +397,12 @@ static bool ath9k_hw_ani_read_counters(s
+ phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
+ phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
+
+- if (!use_new_ani(ah) && (phyCnt1 < ofdm_base || phyCnt2 < cck_base)) {
+- if (phyCnt1 < ofdm_base) {
+- ath_dbg(common, ANI,
+- "phyCnt1 0x%x, resetting counter value to 0x%x\n",
+- phyCnt1, ofdm_base);
+- REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base);
+- REG_WRITE(ah, AR_PHY_ERR_MASK_1,
+- AR_PHY_ERR_OFDM_TIMING);
+- }
+- if (phyCnt2 < cck_base) {
+- ath_dbg(common, ANI,
+- "phyCnt2 0x%x, resetting counter value to 0x%x\n",
+- phyCnt2, cck_base);
+- REG_WRITE(ah, AR_PHY_ERR_2, cck_base);
+- REG_WRITE(ah, AR_PHY_ERR_MASK_2,
+- AR_PHY_ERR_CCK_TIMING);
+- }
+- return false;
+- }
++ ah->stats.ast_ani_ofdmerrs += phyCnt1 - aniState->ofdmPhyErrCount;
++ aniState->ofdmPhyErrCount = phyCnt1;
++
++ ah->stats.ast_ani_cckerrs += phyCnt2 - aniState->cckPhyErrCount;
++ aniState->cckPhyErrCount = phyCnt2;
+
+- ofdmPhyErrCnt = phyCnt1 - ofdm_base;
+- ah->stats.ast_ani_ofdmerrs +=
+- ofdmPhyErrCnt - aniState->ofdmPhyErrCount;
+- aniState->ofdmPhyErrCount = ofdmPhyErrCnt;
+-
+- cckPhyErrCnt = phyCnt2 - cck_base;
+- ah->stats.ast_ani_cckerrs +=
+- cckPhyErrCnt - aniState->cckPhyErrCount;
+- aniState->cckPhyErrCount = cckPhyErrCnt;
+ return true;
+ }
+
+@@ -716,21 +436,10 @@ void ath9k_hw_ani_monitor(struct ath_hw
+
+ if (aniState->listenTime > ah->aniperiod) {
+ if (cckPhyErrRate < ah->config.cck_trig_low &&
+- ((ofdmPhyErrRate < ah->config.ofdm_trig_low &&
+- aniState->ofdmNoiseImmunityLevel <
+- ATH9K_ANI_OFDM_DEF_LEVEL) ||
+- (ofdmPhyErrRate < ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI &&
+- aniState->ofdmNoiseImmunityLevel >=
+- ATH9K_ANI_OFDM_DEF_LEVEL))) {
++ ofdmPhyErrRate < ah->config.ofdm_trig_low) {
+ ath9k_hw_ani_lower_immunity(ah);
+ aniState->ofdmsTurn = !aniState->ofdmsTurn;
+- } else if ((ofdmPhyErrRate > ah->config.ofdm_trig_high &&
+- aniState->ofdmNoiseImmunityLevel >=
+- ATH9K_ANI_OFDM_DEF_LEVEL) ||
+- (ofdmPhyErrRate >
+- ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI &&
+- aniState->ofdmNoiseImmunityLevel <
+- ATH9K_ANI_OFDM_DEF_LEVEL)) {
++ } else if (ofdmPhyErrRate > ah->config.ofdm_trig_high) {
+ ath9k_hw_ani_ofdm_err_trigger(ah);
+ aniState->ofdmsTurn = false;
+ } else if (cckPhyErrRate > ah->config.cck_trig_high) {
+@@ -778,49 +487,6 @@ void ath9k_hw_disable_mib_counters(struc
+ }
+ EXPORT_SYMBOL(ath9k_hw_disable_mib_counters);
+
+-/*
+- * Process a MIB interrupt. We may potentially be invoked because
+- * any of the MIB counters overflow/trigger so don't assume we're
+- * here because a PHY error counter triggered.
+- */
+-void ath9k_hw_proc_mib_event(struct ath_hw *ah)
+-{
+- u32 phyCnt1, phyCnt2;
+-
+- /* Reset these counters regardless */
+- REG_WRITE(ah, AR_FILT_OFDM, 0);
+- REG_WRITE(ah, AR_FILT_CCK, 0);
+- if (!(REG_READ(ah, AR_SLP_MIB_CTRL) & AR_SLP_MIB_PENDING))
+- REG_WRITE(ah, AR_SLP_MIB_CTRL, AR_SLP_MIB_CLEAR);
+-
+- /* Clear the mib counters and save them in the stats */
+- ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
+-
+- if (!DO_ANI(ah)) {
+- /*
+- * We must always clear the interrupt cause by
+- * resetting the phy error regs.
+- */
+- REG_WRITE(ah, AR_PHY_ERR_1, 0);
+- REG_WRITE(ah, AR_PHY_ERR_2, 0);
+- return;
+- }
+-
+- /* NB: these are not reset-on-read */
+- phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
+- phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
+- if (((phyCnt1 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK) ||
+- ((phyCnt2 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK)) {
+-
+- if (!use_new_ani(ah))
+- ath9k_hw_ani_read_counters(ah);
+-
+- /* NB: always restart to insure the h/w counters are reset */
+- ath9k_ani_restart(ah);
+- }
+-}
+-EXPORT_SYMBOL(ath9k_hw_proc_mib_event);
+-
+ void ath9k_hw_ani_setup(struct ath_hw *ah)
+ {
+ int i;
+@@ -845,50 +511,31 @@ void ath9k_hw_ani_init(struct ath_hw *ah
+
+ ath_dbg(common, ANI, "Initialize ANI\n");
+
+- if (use_new_ani(ah)) {
+- ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_NEW;
+- ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_NEW;
++ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
++ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
+
+- ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_NEW;
+- ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_NEW;
+- } else {
+- ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_OLD;
+- ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_OLD;
+-
+- ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_OLD;
+- ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_OLD;
+- }
++ ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH;
++ ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW;
+
+ for (i = 0; i < ARRAY_SIZE(ah->channels); i++) {
+ struct ath9k_channel *chan = &ah->channels[i];
+ struct ar5416AniState *ani = &chan->ani;
+
+- if (use_new_ani(ah)) {
+- ani->spurImmunityLevel =
+- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
++ ani->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
+
+- ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
++ ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
+
+- if (AR_SREV_9300_20_OR_LATER(ah))
+- ani->mrcCCKOff =
+- !ATH9K_ANI_ENABLE_MRC_CCK;
+- else
+- ani->mrcCCKOff = true;
+-
+- ani->ofdmsTurn = true;
+- } else {
+- ani->spurImmunityLevel =
+- ATH9K_ANI_SPUR_IMMUNE_LVL_OLD;
+- ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_OLD;
++ if (AR_SREV_9300_20_OR_LATER(ah))
++ ani->mrcCCKOff =
++ !ATH9K_ANI_ENABLE_MRC_CCK;
++ else
++ ani->mrcCCKOff = true;
+
+- ani->cckWeakSigThreshold =
+- ATH9K_ANI_CCK_WEAK_SIG_THR;
+- }
++ ani->ofdmsTurn = true;
+
+ ani->rssiThrHigh = ATH9K_ANI_RSSI_THR_HIGH;
+ ani->rssiThrLow = ATH9K_ANI_RSSI_THR_LOW;
+- ani->ofdmWeakSigDetectOff =
+- !ATH9K_ANI_USE_OFDM_WEAK_SIG;
++ ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
+ ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
+ ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
+ ani->update_ani = false;
+@@ -898,13 +545,8 @@ 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 (use_new_ani(ah)) {
+- ah->aniperiod = ATH9K_ANI_PERIOD_NEW;
+- ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_NEW;
+- } else {
+- ah->aniperiod = ATH9K_ANI_PERIOD_OLD;
+- ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_OLD;
+- }
++ ah->aniperiod = ATH9K_ANI_PERIOD;
++ ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL;
+
+ if (ah->config.enable_ani)
+ ah->proc_phyerr |= HAL_PROCESS_ANI;
+--- a/drivers/net/wireless/ath/ath9k/ani.h
++++ b/drivers/net/wireless/ath/ath9k/ani.h
+@@ -24,42 +24,34 @@
+ #define BEACON_RSSI(ahp) (ahp->stats.avgbrssi)
+
+ /* units are errors per second */
+-#define ATH9K_ANI_OFDM_TRIG_HIGH_OLD 500
+-#define ATH9K_ANI_OFDM_TRIG_HIGH_NEW 3500
++#define ATH9K_ANI_OFDM_TRIG_HIGH 3500
+ #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000
+
+ /* units are errors per second */
+-#define ATH9K_ANI_OFDM_TRIG_LOW_OLD 200
+-#define ATH9K_ANI_OFDM_TRIG_LOW_NEW 400
++#define ATH9K_ANI_OFDM_TRIG_LOW 400
+ #define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900
+
+ /* units are errors per second */
+-#define ATH9K_ANI_CCK_TRIG_HIGH_OLD 200
+-#define ATH9K_ANI_CCK_TRIG_HIGH_NEW 600
++#define ATH9K_ANI_CCK_TRIG_HIGH 600
+
+ /* units are errors per second */
+-#define ATH9K_ANI_CCK_TRIG_LOW_OLD 100
+-#define ATH9K_ANI_CCK_TRIG_LOW_NEW 300
++#define ATH9K_ANI_CCK_TRIG_LOW 300
+
+ #define ATH9K_ANI_NOISE_IMMUNE_LVL 4
+ #define ATH9K_ANI_USE_OFDM_WEAK_SIG true
+ #define ATH9K_ANI_CCK_WEAK_SIG_THR false
+
+-#define ATH9K_ANI_SPUR_IMMUNE_LVL_OLD 7
+-#define ATH9K_ANI_SPUR_IMMUNE_LVL_NEW 3
++#define ATH9K_ANI_SPUR_IMMUNE_LVL 3
+
+-#define ATH9K_ANI_FIRSTEP_LVL_OLD 0
+-#define ATH9K_ANI_FIRSTEP_LVL_NEW 2
++#define ATH9K_ANI_FIRSTEP_LVL 2
+
+ #define ATH9K_ANI_RSSI_THR_HIGH 40
+ #define ATH9K_ANI_RSSI_THR_LOW 7
+
+-#define ATH9K_ANI_PERIOD_OLD 100
+-#define ATH9K_ANI_PERIOD_NEW 300
++#define ATH9K_ANI_PERIOD 300
+
+ /* in ms */
+-#define ATH9K_ANI_POLLINTERVAL_OLD 100
+-#define ATH9K_ANI_POLLINTERVAL_NEW 1000
++#define ATH9K_ANI_POLLINTERVAL 1000
+
+ #define HAL_NOISE_IMMUNE_MAX 4
+ #define HAL_SPUR_IMMUNE_MAX 7
+@@ -122,13 +114,12 @@ struct ar5416AniState {
+ u8 mrcCCKOff;
+ u8 spurImmunityLevel;
+ u8 firstepLevel;
+- u8 ofdmWeakSigDetectOff;
++ u8 ofdmWeakSigDetect;
+ u8 cckWeakSigThreshold;
+ bool update_ani;
+ u32 listenTime;
+ int32_t rssiThrLow;
+ int32_t rssiThrHigh;
+- u32 noiseFloor;
+ u32 ofdmPhyErrCount;
+ u32 cckPhyErrCount;
+ int16_t pktRssi[2];
+--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
++++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
+@@ -995,141 +995,6 @@ static u32 ar5008_hw_compute_pll_control
+ return pll;
+ }
+
+-static bool ar5008_hw_ani_control_old(struct ath_hw *ah,
+- enum ath9k_ani_cmd cmd,
+- int param)
+-{
+- struct ar5416AniState *aniState = &ah->curchan->ani;
+- struct ath_common *common = ath9k_hw_common(ah);
+-
+- switch (cmd & ah->ani_function) {
+- case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{
+- u32 level = param;
+-
+- if (level >= ARRAY_SIZE(ah->totalSizeDesired)) {
+- ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
+- level, ARRAY_SIZE(ah->totalSizeDesired));
+- return false;
+- }
+-
+- REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ,
+- AR_PHY_DESIRED_SZ_TOT_DES,
+- ah->totalSizeDesired[level]);
+- REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
+- AR_PHY_AGC_CTL1_COARSE_LOW,
+- ah->coarse_low[level]);
+- REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
+- AR_PHY_AGC_CTL1_COARSE_HIGH,
+- ah->coarse_high[level]);
+- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
+- AR_PHY_FIND_SIG_FIRPWR,
+- ah->firpwr[level]);
+-
+- if (level > aniState->noiseImmunityLevel)
+- ah->stats.ast_ani_niup++;
+- else if (level < aniState->noiseImmunityLevel)
+- ah->stats.ast_ani_nidown++;
+- aniState->noiseImmunityLevel = level;
+- break;
+- }
+- case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
+- u32 on = param ? 1 : 0;
+-
+- if (on)
+- REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
+- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
+- else
+- REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
+- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
+-
+- if (!on != aniState->ofdmWeakSigDetectOff) {
+- if (on)
+- ah->stats.ast_ani_ofdmon++;
+- else
+- ah->stats.ast_ani_ofdmoff++;
+- aniState->ofdmWeakSigDetectOff = !on;
+- }
+- break;
+- }
+- case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{
+- static const int weakSigThrCck[] = { 8, 6 };
+- u32 high = param ? 1 : 0;
+-
+- REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT,
+- AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK,
+- weakSigThrCck[high]);
+- if (high != aniState->cckWeakSigThreshold) {
+- if (high)
+- ah->stats.ast_ani_cckhigh++;
+- else
+- ah->stats.ast_ani_ccklow++;
+- aniState->cckWeakSigThreshold = high;
+- }
+- break;
+- }
+- case ATH9K_ANI_FIRSTEP_LEVEL:{
+- static const int firstep[] = { 0, 4, 8 };
+- u32 level = param;
+-
+- if (level >= ARRAY_SIZE(firstep)) {
+- ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
+- level, ARRAY_SIZE(firstep));
+- return false;
+- }
+- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
+- AR_PHY_FIND_SIG_FIRSTEP,
+- firstep[level]);
+- if (level > aniState->firstepLevel)
+- ah->stats.ast_ani_stepup++;
+- else if (level < aniState->firstepLevel)
+- ah->stats.ast_ani_stepdown++;
+- aniState->firstepLevel = level;
+- break;
+- }
+- case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
+- static const int cycpwrThr1[] = { 2, 4, 6, 8, 10, 12, 14, 16 };
+- u32 level = param;
+-
+- if (level >= ARRAY_SIZE(cycpwrThr1)) {
+- ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
+- level, ARRAY_SIZE(cycpwrThr1));
+- return false;
+- }
+- REG_RMW_FIELD(ah, AR_PHY_TIMING5,
+- AR_PHY_TIMING5_CYCPWR_THR1,
+- cycpwrThr1[level]);
+- if (level > aniState->spurImmunityLevel)
+- ah->stats.ast_ani_spurup++;
+- else if (level < aniState->spurImmunityLevel)
+- ah->stats.ast_ani_spurdown++;
+- aniState->spurImmunityLevel = level;
+- break;
+- }
+- case ATH9K_ANI_PRESENT:
+- break;
+- default:
+- ath_dbg(common, ANI, "invalid cmd %u\n", cmd);
+- return false;
+- }
+-
+- ath_dbg(common, ANI, "ANI parameters:\n");
+- ath_dbg(common, ANI,
+- "noiseImmunityLevel=%d, spurImmunityLevel=%d, ofdmWeakSigDetectOff=%d\n",
+- aniState->noiseImmunityLevel,
+- aniState->spurImmunityLevel,
+- !aniState->ofdmWeakSigDetectOff);
+- ath_dbg(common, ANI,
+- "cckWeakSigThreshold=%d, firstepLevel=%d, listenTime=%d\n",
+- aniState->cckWeakSigThreshold,
+- aniState->firstepLevel,
+- aniState->listenTime);
+- ath_dbg(common, ANI, "ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
+- aniState->ofdmPhyErrCount,
+- aniState->cckPhyErrCount);
+-
+- return true;
+-}
+-
+ static bool ar5008_hw_ani_control_new(struct ath_hw *ah,
+ enum ath9k_ani_cmd cmd,
+ int param)
+@@ -1206,18 +1071,18 @@ static bool ar5008_hw_ani_control_new(st
+ REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
+ AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
+
+- if (!on != aniState->ofdmWeakSigDetectOff) {
++ if (on != aniState->ofdmWeakSigDetect) {
+ ath_dbg(common, ANI,
+ "** ch %d: ofdm weak signal: %s=>%s\n",
+ chan->channel,
+- !aniState->ofdmWeakSigDetectOff ?
++ aniState->ofdmWeakSigDetect ?
+ "on" : "off",
+ on ? "on" : "off");
+ if (on)
+ ah->stats.ast_ani_ofdmon++;
+ else
+ ah->stats.ast_ani_ofdmoff++;
+- aniState->ofdmWeakSigDetectOff = !on;
++ aniState->ofdmWeakSigDetect = on;
+ }
+ break;
+ }
+@@ -1236,7 +1101,7 @@ static bool ar5008_hw_ani_control_new(st
+ * from INI file & cap value
+ */
+ value = firstep_table[level] -
+- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
++ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
+ aniState->iniDef.firstep;
+ if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
+ value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
+@@ -1251,7 +1116,7 @@ static bool ar5008_hw_ani_control_new(st
+ * from INI file & cap value
+ */
+ value2 = firstep_table[level] -
+- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
++ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
+ aniState->iniDef.firstepLow;
+ if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
+ value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
+@@ -1267,7 +1132,7 @@ static bool ar5008_hw_ani_control_new(st
+ chan->channel,
+ aniState->firstepLevel,
+ level,
+- ATH9K_ANI_FIRSTEP_LVL_NEW,
++ ATH9K_ANI_FIRSTEP_LVL,
+ value,
+ aniState->iniDef.firstep);
+ ath_dbg(common, ANI,
+@@ -1275,7 +1140,7 @@ static bool ar5008_hw_ani_control_new(st
+ chan->channel,
+ aniState->firstepLevel,
+ level,
+- ATH9K_ANI_FIRSTEP_LVL_NEW,
++ ATH9K_ANI_FIRSTEP_LVL,
+ value2,
+ aniState->iniDef.firstepLow);
+ if (level > aniState->firstepLevel)
+@@ -1300,7 +1165,7 @@ static bool ar5008_hw_ani_control_new(st
+ * from INI file & cap value
+ */
+ value = cycpwrThr1_table[level] -
+- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
++ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
+ aniState->iniDef.cycpwrThr1;
+ if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
+ value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
+@@ -1316,7 +1181,7 @@ static bool ar5008_hw_ani_control_new(st
+ * from INI file & cap value
+ */
+ value2 = cycpwrThr1_table[level] -
+- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
++ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
+ aniState->iniDef.cycpwrThr1Ext;
+ if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
+ value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
+@@ -1331,7 +1196,7 @@ static bool ar5008_hw_ani_control_new(st
+ chan->channel,
+ aniState->spurImmunityLevel,
+ level,
+- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
++ ATH9K_ANI_SPUR_IMMUNE_LVL,
+ value,
+ aniState->iniDef.cycpwrThr1);
+ ath_dbg(common, ANI,
+@@ -1339,7 +1204,7 @@ static bool ar5008_hw_ani_control_new(st
+ chan->channel,
+ aniState->spurImmunityLevel,
+ level,
+- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
++ ATH9K_ANI_SPUR_IMMUNE_LVL,
+ value2,
+ aniState->iniDef.cycpwrThr1Ext);
+ if (level > aniState->spurImmunityLevel)
+@@ -1367,7 +1232,7 @@ static bool ar5008_hw_ani_control_new(st
+ ath_dbg(common, ANI,
+ "ANI parameters: SI=%d, ofdmWS=%s FS=%d MRCcck=%s listenTime=%d ofdmErrs=%d cckErrs=%d\n",
+ aniState->spurImmunityLevel,
+- !aniState->ofdmWeakSigDetectOff ? "on" : "off",
++ aniState->ofdmWeakSigDetect ? "on" : "off",
+ aniState->firstepLevel,
+ !aniState->mrcCCKOff ? "on" : "off",
+ aniState->listenTime,
+@@ -1454,9 +1319,9 @@ static void ar5008_hw_ani_cache_ini_regs
+ AR_PHY_EXT_TIMING5_CYCPWR_THR1);
+
+ /* these levels just got reset to defaults by the INI */
+- aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
+- aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
+- aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG;
++ aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
++ aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
++ aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
+ aniState->mrcCCKOff = true; /* not available on pre AR9003 */
+ }
+
+@@ -1545,11 +1410,8 @@ void ar5008_hw_attach_phy_ops(struct ath
+ priv_ops->do_getnf = ar5008_hw_do_getnf;
+ priv_ops->set_radar_params = ar5008_hw_set_radar_params;
+
+- if (modparam_force_new_ani) {
+- priv_ops->ani_control = ar5008_hw_ani_control_new;
+- priv_ops->ani_cache_ini_regs = ar5008_hw_ani_cache_ini_regs;
+- } else
+- priv_ops->ani_control = ar5008_hw_ani_control_old;
++ priv_ops->ani_control = ar5008_hw_ani_control_new;
++ priv_ops->ani_cache_ini_regs = ar5008_hw_ani_cache_ini_regs;
+
+ if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah))
+ priv_ops->compute_pll_control = ar9160_hw_compute_pll_control;
+--- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
++++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
+@@ -21,10 +21,6 @@
+ #include "ar9002_initvals.h"
+ #include "ar9002_phy.h"
+
+-int modparam_force_new_ani;
+-module_param_named(force_new_ani, modparam_force_new_ani, int, 0444);
+-MODULE_PARM_DESC(force_new_ani, "Force new ANI for AR5008, AR9001, AR9002");
+-
+ /* General hardware code for the A5008/AR9001/AR9002 hadware families */
+
+ static void ar9002_hw_init_mode_regs(struct ath_hw *ah)
+--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
+@@ -825,18 +825,18 @@ static bool ar9003_hw_ani_control(struct
+ REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
+ AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
+
+- if (!on != aniState->ofdmWeakSigDetectOff) {
++ if (on != aniState->ofdmWeakSigDetect) {
+ ath_dbg(common, ANI,
+ "** ch %d: ofdm weak signal: %s=>%s\n",
+ chan->channel,
+- !aniState->ofdmWeakSigDetectOff ?
++ aniState->ofdmWeakSigDetect ?
+ "on" : "off",
+ on ? "on" : "off");
+ if (on)
+ ah->stats.ast_ani_ofdmon++;
+ else
+ ah->stats.ast_ani_ofdmoff++;
+- aniState->ofdmWeakSigDetectOff = !on;
++ aniState->ofdmWeakSigDetect = on;
+ }
+ break;
+ }
+@@ -855,7 +855,7 @@ static bool ar9003_hw_ani_control(struct
+ * from INI file & cap value
+ */
+ value = firstep_table[level] -
+- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
++ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
+ aniState->iniDef.firstep;
+ if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
+ value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
+@@ -870,7 +870,7 @@ static bool ar9003_hw_ani_control(struct
+ * from INI file & cap value
+ */
+ value2 = firstep_table[level] -
+- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
++ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
+ aniState->iniDef.firstepLow;
+ if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
+ value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
+@@ -886,7 +886,7 @@ static bool ar9003_hw_ani_control(struct
+ chan->channel,
+ aniState->firstepLevel,
+ level,
+- ATH9K_ANI_FIRSTEP_LVL_NEW,
++ ATH9K_ANI_FIRSTEP_LVL,
+ value,
+ aniState->iniDef.firstep);
+ ath_dbg(common, ANI,
+@@ -894,7 +894,7 @@ static bool ar9003_hw_ani_control(struct
+ chan->channel,
+ aniState->firstepLevel,
+ level,
+- ATH9K_ANI_FIRSTEP_LVL_NEW,
++ ATH9K_ANI_FIRSTEP_LVL,
+ value2,
+ aniState->iniDef.firstepLow);
+ if (level > aniState->firstepLevel)
+@@ -919,7 +919,7 @@ static bool ar9003_hw_ani_control(struct
+ * from INI file & cap value
+ */
+ value = cycpwrThr1_table[level] -
+- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
++ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
+ aniState->iniDef.cycpwrThr1;
+ if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
+ value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
+@@ -935,7 +935,7 @@ static bool ar9003_hw_ani_control(struct
+ * from INI file & cap value
+ */
+ value2 = cycpwrThr1_table[level] -
+- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
++ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
+ aniState->iniDef.cycpwrThr1Ext;
+ if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
+ value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
+@@ -950,7 +950,7 @@ static bool ar9003_hw_ani_control(struct
+ chan->channel,
+ aniState->spurImmunityLevel,
+ level,
+- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
++ ATH9K_ANI_SPUR_IMMUNE_LVL,
+ value,
+ aniState->iniDef.cycpwrThr1);
+ ath_dbg(common, ANI,
+@@ -958,7 +958,7 @@ static bool ar9003_hw_ani_control(struct
+ chan->channel,
+ aniState->spurImmunityLevel,
+ level,
+- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
++ ATH9K_ANI_SPUR_IMMUNE_LVL,
+ value2,
+ aniState->iniDef.cycpwrThr1Ext);
+ if (level > aniState->spurImmunityLevel)
+@@ -1002,7 +1002,7 @@ static bool ar9003_hw_ani_control(struct
+ ath_dbg(common, ANI,
+ "ANI parameters: SI=%d, ofdmWS=%s FS=%d MRCcck=%s listenTime=%d ofdmErrs=%d cckErrs=%d\n",
+ aniState->spurImmunityLevel,
+- !aniState->ofdmWeakSigDetectOff ? "on" : "off",
++ aniState->ofdmWeakSigDetect ? "on" : "off",
+ aniState->firstepLevel,
+ !aniState->mrcCCKOff ? "on" : "off",
+ aniState->listenTime,
+@@ -1111,9 +1111,9 @@ static void ar9003_hw_ani_cache_ini_regs
+ AR_PHY_EXT_CYCPWR_THR1);
+
+ /* these levels just got reset to defaults by the INI */
+- aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
+- aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
+- aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG;
++ aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
++ aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
++ aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
+ aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK;
+ }
+
+--- a/drivers/net/wireless/ath/ath9k/debug.c
++++ b/drivers/net/wireless/ath/ath9k/debug.c
+@@ -348,8 +348,6 @@ void ath_debug_stat_interrupt(struct ath
+ sc->debug.stats.istats.txok++;
+ if (status & ATH9K_INT_TXURN)
+ sc->debug.stats.istats.txurn++;
+- if (status & ATH9K_INT_MIB)
+- sc->debug.stats.istats.mib++;
+ if (status & ATH9K_INT_RXPHY)
+ sc->debug.stats.istats.rxphyerr++;
+ if (status & ATH9K_INT_RXKCM)
+--- a/drivers/net/wireless/ath/ath9k/hw.h
++++ b/drivers/net/wireless/ath/ath9k/hw.h
+@@ -1019,16 +1019,8 @@ void ar9002_hw_attach_ops(struct ath_hw
+ void ar9003_hw_attach_ops(struct ath_hw *ah);
+
+ void ar9002_hw_load_ani_reg(struct ath_hw *ah, struct ath9k_channel *chan);
+-/*
+- * ANI work can be shared between all families but a next
+- * generation implementation of ANI will be used only for AR9003 only
+- * for now as the other families still need to be tested with the same
+- * next generation ANI. Feel free to start testing it though for the
+- * older families (AR5008, AR9001, AR9002) by using modparam_force_new_ani.
+- */
+-extern int modparam_force_new_ani;
++
+ void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning);
+-void ath9k_hw_proc_mib_event(struct ath_hw *ah);
+ void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan);
+
+ #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -516,24 +516,6 @@ irqreturn_t ath_isr(int irq, void *dev)
+ ath9k_hw_set_interrupts(ah);
+ }
+
+- if (status & ATH9K_INT_MIB) {
+- /*
+- * Disable interrupts until we service the MIB
+- * interrupt; otherwise it will continue to
+- * fire.
+- */
+- ath9k_hw_disable_interrupts(ah);
+- /*
+- * Let the hal handle the event. We assume
+- * it will clear whatever condition caused
+- * the interrupt.
+- */
+- spin_lock(&common->cc_lock);
+- ath9k_hw_proc_mib_event(ah);
+- spin_unlock(&common->cc_lock);
+- ath9k_hw_enable_interrupts(ah);
+- }
+-
+ if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
+ if (status & ATH9K_INT_TIM_TIMER) {
+ if (ATH_DBG_WARN_ON_ONCE(sc->ps_idle))
+@@ -959,14 +941,10 @@ static void ath9k_calculate_summary_stat
+ /*
+ * Enable MIB interrupts when there are hardware phy counters.
+ */
+- if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0) {
+- if (ah->config.enable_ani)
+- ah->imask |= ATH9K_INT_MIB;
++ if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0)
+ ah->imask |= ATH9K_INT_TSFOOR;
+- } else {
+- ah->imask &= ~ATH9K_INT_MIB;
++ else
+ ah->imask &= ~ATH9K_INT_TSFOOR;
+- }
+
+ ath9k_hw_set_interrupts(ah);
- #ifdef CONFIG_MAC80211_HT_DEBUG
- printk(KERN_DEBUG "rx session timer expired on tid %d\n", (u16)*ptid);
-@@ -200,6 +205,8 @@ static void ieee80211_send_addba_resp(st
+--- a/net/mac80211/agg-rx.c
++++ b/net/mac80211/agg-rx.c
+@@ -201,6 +201,8 @@ static void ieee80211_send_addba_resp(st
memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN);
else if (sdata->vif.type == NL80211_IFTYPE_ADHOC)
memcpy(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN);
@@ -78,7 +1236,7 @@
memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN);
else if (sdata->vif.type == NL80211_IFTYPE_STATION)
memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN);
-@@ -490,6 +491,7 @@ int ieee80211_start_tx_ba_session(struct
+@@ -456,6 +457,7 @@ int ieee80211_start_tx_ba_session(struct
sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
sdata->vif.type != NL80211_IFTYPE_AP &&
@@ -141,7 +1299,7 @@
/*
* set_multicast_list will be invoked by the networking core
* which will check whether any increments here were done in
-@@ -642,6 +619,8 @@ static void ieee80211_do_stop(struct iee
+@@ -639,6 +616,8 @@ static void ieee80211_do_stop(struct iee
ieee80211_configure_filter(local);
break;
default:
@@ -150,7 +1308,7 @@
flush_work(&sdata->work);
/*
* When we get here, the interface is marked down.
-@@ -848,6 +827,72 @@ static void ieee80211_if_setup(struct ne
+@@ -845,6 +824,72 @@ static void ieee80211_if_setup(struct ne
dev->destructor = free_netdev;
}
@@ -223,7 +1381,7 @@
static void ieee80211_iface_work(struct work_struct *work)
{
struct ieee80211_sub_if_data *sdata =
-@@ -952,6 +997,9 @@ static void ieee80211_iface_work(struct
+@@ -949,6 +994,9 @@ static void ieee80211_iface_work(struct
break;
ieee80211_mesh_rx_queued_mgmt(sdata, skb);
break;
@@ -235,7 +1393,7 @@
break;
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
-@@ -2284,6 +2284,7 @@ ieee80211_rx_h_action(struct ieee80211_r
+@@ -2281,6 +2281,7 @@ ieee80211_rx_h_action(struct ieee80211_r
sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
sdata->vif.type != NL80211_IFTYPE_AP &&
@@ -243,7 +1401,7 @@
sdata->vif.type != NL80211_IFTYPE_ADHOC)
break;
-@@ -2498,14 +2499,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_
+@@ -2495,14 +2496,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_
if (!ieee80211_vif_is_mesh(&sdata->vif) &&
sdata->vif.type != NL80211_IFTYPE_ADHOC &&
@@ -261,13 +1419,13 @@
break;
case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP):
case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP):
-@@ -2839,10 +2841,16 @@ static int prepare_for_handlers(struct i
+@@ -2833,10 +2835,16 @@ static int prepare_for_handlers(struct i
}
break;
case NL80211_IFTYPE_WDS:
- if (bssid || !ieee80211_is_data(hdr->frame_control))
- return 0;
- if (compare_ether_addr(sdata->u.wds.remote_addr, hdr->addr2))
+ if (!ether_addr_equal(sdata->u.wds.remote_addr, hdr->addr2))
return 0;
+
+ if (ieee80211_is_data(hdr->frame_control) ||
@@ -298,238 +1456,13 @@
WLAN_STA_CLEAR_PS_FILT,
WLAN_STA_MFP,
WLAN_STA_BLOCK_BA,
---- a/net/mac80211/util.c
-+++ b/net/mac80211/util.c
-@@ -804,7 +804,7 @@ void ieee80211_set_wmm_default(struct ie
- struct ieee80211_local *local = sdata->local;
- struct ieee80211_tx_queue_params qparam;
- int ac;
-- bool use_11b;
-+ bool use_11b, enable_qos;
- int aCWmin, aCWmax;
-
- if (!local->ops->conf_tx)
-@@ -818,6 +818,13 @@ void ieee80211_set_wmm_default(struct ie
- use_11b = (local->hw.conf.channel->band == IEEE80211_BAND_2GHZ) &&
- !(sdata->flags & IEEE80211_SDATA_OPERATING_GMODE);
-
-+ /*
-+ * By default disable QoS in STA mode for old access points, which do
-+ * not support 802.11e. New APs will provide proper queue parameters,
-+ * that we will configure later.
-+ */
-+ enable_qos = (sdata->vif.type != NL80211_IFTYPE_STATION);
-+
- for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
- /* Set defaults according to 802.11-2007 Table 7-37 */
- aCWmax = 1023;
-@@ -826,38 +833,47 @@ void ieee80211_set_wmm_default(struct ie
- else
- aCWmin = 15;
-
-- switch (ac) {
-- case IEEE80211_AC_BK:
-- qparam.cw_max = aCWmax;
-- qparam.cw_min = aCWmin;
-- qparam.txop = 0;
-- qparam.aifs = 7;
-- break;
-- default: /* never happens but let's not leave undefined */
-- case IEEE80211_AC_BE:
-+ if (enable_qos) {
-+ switch (ac) {
-+ case IEEE80211_AC_BK:
-+ qparam.cw_max = aCWmax;
-+ qparam.cw_min = aCWmin;
-+ qparam.txop = 0;
-+ qparam.aifs = 7;
-+ break;
-+ /* never happens but let's not leave undefined */
-+ default:
-+ case IEEE80211_AC_BE:
-+ qparam.cw_max = aCWmax;
-+ qparam.cw_min = aCWmin;
-+ qparam.txop = 0;
-+ qparam.aifs = 3;
-+ break;
-+ case IEEE80211_AC_VI:
-+ qparam.cw_max = aCWmin;
-+ qparam.cw_min = (aCWmin + 1) / 2 - 1;
-+ if (use_11b)
-+ qparam.txop = 6016/32;
-+ else
-+ qparam.txop = 3008/32;
-+ qparam.aifs = 2;
-+ break;
-+ case IEEE80211_AC_VO:
-+ qparam.cw_max = (aCWmin + 1) / 2 - 1;
-+ qparam.cw_min = (aCWmin + 1) / 4 - 1;
-+ if (use_11b)
-+ qparam.txop = 3264/32;
-+ else
-+ qparam.txop = 1504/32;
-+ qparam.aifs = 2;
-+ break;
-+ }
-+ } else {
-+ /* Confiure old 802.11b/g medium access rules. */
- qparam.cw_max = aCWmax;
- qparam.cw_min = aCWmin;
- qparam.txop = 0;
-- qparam.aifs = 3;
-- break;
-- case IEEE80211_AC_VI:
-- qparam.cw_max = aCWmin;
-- qparam.cw_min = (aCWmin + 1) / 2 - 1;
-- if (use_11b)
-- qparam.txop = 6016/32;
-- else
-- qparam.txop = 3008/32;
- qparam.aifs = 2;
-- break;
-- case IEEE80211_AC_VO:
-- qparam.cw_max = (aCWmin + 1) / 2 - 1;
-- qparam.cw_min = (aCWmin + 1) / 4 - 1;
-- if (use_11b)
-- qparam.txop = 3264/32;
-- else
-- qparam.txop = 1504/32;
-- qparam.aifs = 2;
-- break;
- }
-
- qparam.uapsd = false;
-@@ -866,12 +882,8 @@ void ieee80211_set_wmm_default(struct ie
- drv_conf_tx(local, sdata, ac, &qparam);
- }
-
-- /* after reinitialize QoS TX queues setting to default,
-- * disable QoS at all */
--
- if (sdata->vif.type != NL80211_IFTYPE_MONITOR) {
-- sdata->vif.bss_conf.qos =
-- sdata->vif.type != NL80211_IFTYPE_STATION;
-+ sdata->vif.bss_conf.qos = enable_qos;
- if (bss_notify)
- ieee80211_bss_info_change_notify(sdata,
- BSS_CHANGED_QOS);
---- a/drivers/net/wireless/ath/ath9k/beacon.c
-+++ b/drivers/net/wireless/ath/ath9k/beacon.c
-@@ -48,7 +48,10 @@ int ath_beaconq_config(struct ath_softc
- txq = sc->tx.txq_map[WME_AC_BE];
- ath9k_hw_get_txq_props(ah, txq->axq_qnum, &qi_be);
- qi.tqi_aifs = qi_be.tqi_aifs;
-- qi.tqi_cwmin = 4*qi_be.tqi_cwmin;
-+ if (ah->slottime == ATH9K_SLOT_TIME_20)
-+ qi.tqi_cwmin = 2*qi_be.tqi_cwmin;
-+ else
-+ qi.tqi_cwmin = 4*qi_be.tqi_cwmin;
- qi.tqi_cwmax = qi_be.tqi_cwmax;
- }
-
---- a/net/mac80211/mlme.c
-+++ b/net/mac80211/mlme.c
-@@ -1220,6 +1220,22 @@ static void ieee80211_sta_wmm_params(str
- sdata->vif.bss_conf.qos = true;
- }
-
-+static void __ieee80211_stop_poll(struct ieee80211_sub_if_data *sdata)
-+{
-+ lockdep_assert_held(&sdata->local->mtx);
-+
-+ sdata->u.mgd.flags &= ~(IEEE80211_STA_CONNECTION_POLL |
-+ IEEE80211_STA_BEACON_POLL);
-+ ieee80211_run_deferred_scan(sdata->local);
-+}
-+
-+static void ieee80211_stop_poll(struct ieee80211_sub_if_data *sdata)
-+{
-+ mutex_lock(&sdata->local->mtx);
-+ __ieee80211_stop_poll(sdata);
-+ mutex_unlock(&sdata->local->mtx);
-+}
-+
- static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata,
- u16 capab, bool erp_valid, u8 erp)
- {
-@@ -1285,8 +1301,7 @@ static void ieee80211_set_associated(str
- sdata->u.mgd.flags |= IEEE80211_STA_RESET_SIGNAL_AVE;
-
- /* just to be sure */
-- sdata->u.mgd.flags &= ~(IEEE80211_STA_CONNECTION_POLL |
-- IEEE80211_STA_BEACON_POLL);
-+ ieee80211_stop_poll(sdata);
-
- ieee80211_led_assoc(local, 1);
-
-@@ -1456,8 +1471,7 @@ static void ieee80211_reset_ap_probe(str
- return;
- }
-
-- ifmgd->flags &= ~(IEEE80211_STA_CONNECTION_POLL |
-- IEEE80211_STA_BEACON_POLL);
-+ __ieee80211_stop_poll(sdata);
-
- mutex_lock(&local->iflist_mtx);
- ieee80211_recalc_ps(local, -1);
-@@ -1477,7 +1491,6 @@ static void ieee80211_reset_ap_probe(str
- round_jiffies_up(jiffies +
- IEEE80211_CONNECTION_IDLE_TIME));
- out:
-- ieee80211_run_deferred_scan(local);
- mutex_unlock(&local->mtx);
- }
-
-@@ -2413,7 +2426,11 @@ static void ieee80211_rx_mgmt_beacon(str
- "to a received beacon\n", sdata->name);
- }
- #endif
-+ mutex_lock(&local->mtx);
- ifmgd->flags &= ~IEEE80211_STA_BEACON_POLL;
-+ ieee80211_run_deferred_scan(local);
-+ mutex_unlock(&local->mtx);
-+
- mutex_lock(&local->iflist_mtx);
- ieee80211_recalc_ps(local, -1);
- mutex_unlock(&local->iflist_mtx);
-@@ -2600,8 +2617,7 @@ static void ieee80211_sta_connection_los
- struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
- u8 frame_buf[DEAUTH_DISASSOC_LEN];
-
-- ifmgd->flags &= ~(IEEE80211_STA_CONNECTION_POLL |
-- IEEE80211_STA_BEACON_POLL);
-+ ieee80211_stop_poll(sdata);
-
- ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH, reason,
- false, frame_buf);
-@@ -2879,8 +2895,7 @@ static void ieee80211_restart_sta_timer(
- u32 flags;
-
- if (sdata->vif.type == NL80211_IFTYPE_STATION) {
-- sdata->u.mgd.flags &= ~(IEEE80211_STA_BEACON_POLL |
-- IEEE80211_STA_CONNECTION_POLL);
-+ __ieee80211_stop_poll(sdata);
-
- /* let's probe the connection once */
- flags = sdata->local->hw.flags;
-@@ -2949,7 +2964,10 @@ void ieee80211_sta_restart(struct ieee80
- if (test_and_clear_bit(TMR_RUNNING_CHANSW, &ifmgd->timers_running))
- add_timer(&ifmgd->chswitch_timer);
- ieee80211_sta_reset_beacon_monitor(sdata);
-+
-+ mutex_lock(&sdata->local->mtx);
- ieee80211_restart_sta_timer(sdata);
-+ mutex_unlock(&sdata->local->mtx);
- }
- #endif
-
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
@@ -214,6 +214,7 @@ struct ath_frame_info {
enum ath9k_key_type keytype;
u8 keyix;
u8 retries;
-+ bool short_preamble;
++ u8 rtscts_rate;
};
struct ath_buf_state {
@@ -543,33 +1476,71 @@
int i;
u8 rix = 0;
-@@ -957,8 +958,7 @@ static void ath_buf_set_rate(struct ath_
- rate = ieee80211_get_rts_cts_rate(sc->hw, tx_info);
- info->rtscts_rate = rate->hw_value;
+@@ -948,18 +949,7 @@ static void ath_buf_set_rate(struct ath_
+ /* set dur_update_en for l-sig computation except for PS-Poll frames */
+ info->dur_update = !ieee80211_is_pspoll(hdr->frame_control);
+-
+- /*
+- * We check if Short Preamble is needed for the CTS rate by
+- * checking the BSS's global flag.
+- * But for the rate series, IEEE80211_TX_RC_USE_SHORT_PREAMBLE is used.
+- */
+- rate = ieee80211_get_rts_cts_rate(sc->hw, tx_info);
+- info->rtscts_rate = rate->hw_value;
+-
- if (tx_info->control.vif &&
- tx_info->control.vif->bss_conf.use_short_preamble)
-+ if (fi->short_preamble)
- info->rtscts_rate |= rate->hw_value_short;
+- info->rtscts_rate |= rate->hw_value_short;
++ info->rtscts_rate = fi->rtscts_rate;
for (i = 0; i < 4; i++) {
-@@ -1779,6 +1779,11 @@ static void setup_frame_info(struct ieee
+ bool is_40, is_sgi, is_sp;
+@@ -1001,13 +991,13 @@ static void ath_buf_set_rate(struct ath_
+ }
+
+ /* legacy rates */
++ rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx];
+ if ((tx_info->band == IEEE80211_BAND_2GHZ) &&
+ !(rate->flags & IEEE80211_RATE_ERP_G))
+ phy = WLAN_RC_PHY_CCK;
+ else
+ phy = WLAN_RC_PHY_OFDM;
+
+- rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx];
+ info->rates[i].Rate = rate->hw_value;
+ if (rate->hw_value_short) {
+ if (rates[i].flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
+@@ -1776,10 +1766,22 @@ static void setup_frame_info(struct ieee
+ struct ieee80211_sta *sta = tx_info->control.sta;
+ struct ieee80211_key_conf *hw_key = tx_info->control.hw_key;
+ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
++ const struct ieee80211_rate *rate;
struct ath_frame_info *fi = get_frame_info(skb);
struct ath_node *an = NULL;
enum ath9k_key_type keytype;
+ bool short_preamble = false;
+
++ /*
++ * We check if Short Preamble is needed for the CTS rate by
++ * checking the BSS's global flag.
++ * But for the rate series, IEEE80211_TX_RC_USE_SHORT_PREAMBLE is used.
++ */
+ if (tx_info->control.vif &&
+ tx_info->control.vif->bss_conf.use_short_preamble)
+ short_preamble = true;
++ rate = ieee80211_get_rts_cts_rate(hw, tx_info);
keytype = ath9k_cmn_get_hw_crypto_keytype(skb);
-@@ -1794,6 +1799,7 @@ static void setup_frame_info(struct ieee
+ if (sta)
+@@ -1794,6 +1796,9 @@ static void setup_frame_info(struct ieee
fi->keyix = ATH9K_TXKEYIX_INVALID;
fi->keytype = keytype;
fi->framelen = framelen;
-+ fi->short_preamble = short_preamble;
++ fi->rtscts_rate = rate->hw_value;
++ if (short_preamble)
++ fi->rtscts_rate |= rate->hw_value_short;
}
u8 ath_txchainmask_reduction(struct ath_softc *sc, u8 chainmask, u32 rate)
diff --git a/package/mac80211/patches/402-ath9k-fix-invalid-mac-address-handling.patch b/package/mac80211/patches/402-ath9k-fix-invalid-mac-address-handling.patch
index c78b51a257..7c59e1f109 100644
--- a/package/mac80211/patches/402-ath9k-fix-invalid-mac-address-handling.patch
+++ b/package/mac80211/patches/402-ath9k-fix-invalid-mac-address-handling.patch
@@ -8,7 +8,7 @@
#include <asm/unaligned.h>
#include "hw.h"
-@@ -531,8 +532,16 @@ static int ath9k_hw_init_macaddr(struct
+@@ -523,8 +524,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/410-ath9k_allow_adhoc_and_ap.patch b/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch
index 0a5f6944f9..9834f1e541 100644
--- a/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch
+++ b/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch
@@ -1,40 +1,6 @@
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1443,15 +1443,6 @@ static int ath9k_add_interface(struct ie
- }
- }
-
-- if ((ah->opmode == NL80211_IFTYPE_ADHOC) ||
-- ((vif->type == NL80211_IFTYPE_ADHOC) &&
-- sc->nvifs > 0)) {
-- ath_err(common, "Cannot create ADHOC interface when other"
-- " interfaces already exist.\n");
-- ret = -EINVAL;
-- goto out;
-- }
--
- ath_dbg(common, CONFIG, "Attach a VIF of type: %d\n", vif->type);
-
- sc->nvifs++;
-@@ -1476,15 +1467,6 @@ static int ath9k_change_interface(struct
- mutex_lock(&sc->mutex);
- ath9k_ps_wakeup(sc);
-
-- /* See if new interface type is valid. */
-- if ((new_type == NL80211_IFTYPE_ADHOC) &&
-- (sc->nvifs > 1)) {
-- ath_err(common, "When using ADHOC, it must be the only"
-- " interface.\n");
-- ret = -EINVAL;
-- goto out;
-- }
--
- if (ath9k_uses_beacons(new_type) &&
- !ath9k_uses_beacons(vif->type)) {
- if (sc->nbcnvifs >= ATH_BCBUF) {
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -656,6 +656,7 @@ static const struct ieee80211_iface_limi
+@@ -666,6 +666,7 @@ static const struct ieee80211_iface_limi
#ifdef CONFIG_MAC80211_MESH
BIT(NL80211_IFTYPE_MESH_POINT) |
#endif
diff --git a/package/mac80211/patches/412-mac80211_allow_adhoc_and_ap.patch b/package/mac80211/patches/412-mac80211_allow_adhoc_and_ap.patch
index 6f30be5b91..2f23096c63 100644
--- a/package/mac80211/patches/412-mac80211_allow_adhoc_and_ap.patch
+++ b/package/mac80211/patches/412-mac80211_allow_adhoc_and_ap.patch
@@ -1,6 +1,6 @@
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
-@@ -771,17 +771,11 @@ int ieee80211_register_hw(struct ieee802
+@@ -776,17 +776,11 @@ int ieee80211_register_hw(struct ieee802
*/
for (i = 0; i < hw->wiphy->n_iface_combinations; i++) {
const struct ieee80211_iface_combination *c;
diff --git a/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch b/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch
index 49e80ca3e6..ed50ea4e15 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
-@@ -1532,6 +1532,53 @@ static const struct file_operations fops
+@@ -1533,6 +1533,53 @@ static const struct file_operations fops
#endif
@@ -54,7 +54,7 @@
int ath9k_init_debug(struct ath_hw *ah)
{
struct ath_common *common = ath9k_hw_common(ah);
-@@ -1595,5 +1642,8 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1596,5 +1643,8 @@ int ath9k_init_debug(struct ath_hw *ah)
debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
diff --git a/package/mac80211/patches/501-ath9k-eeprom_endianess.patch b/package/mac80211/patches/501-ath9k-eeprom_endianess.patch
index 4571fe2611..710ca7bad9 100644
--- a/package/mac80211/patches/501-ath9k-eeprom_endianess.patch
+++ b/package/mac80211/patches/501-ath9k-eeprom_endianess.patch
@@ -81,7 +81,7 @@
struct ath_ops reg_ops;
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -535,6 +535,8 @@ static int ath9k_init_softc(u16 devid, s
+@@ -536,6 +536,8 @@ static int ath9k_init_softc(u16 devid, s
ah->is_clk_25mhz = pdata->is_clk_25mhz;
ah->get_mac_revision = pdata->get_mac_revision;
ah->external_reset = pdata->external_reset;
diff --git a/package/mac80211/patches/502-ath9k_ahb_init.patch b/package/mac80211/patches/502-ath9k_ahb_init.patch
index d2e7331a0a..e819d52138 100644
--- a/package/mac80211/patches/502-ath9k_ahb_init.patch
+++ b/package/mac80211/patches/502-ath9k_ahb_init.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -905,23 +905,23 @@ static int __init ath9k_init(void)
+@@ -907,23 +907,23 @@ static int __init ath9k_init(void)
goto err_out;
}
diff --git a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
index 429d443187..9ff77812e4 100644
--- a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
+++ b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch
@@ -1,7 +1,7 @@
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1939,8 +1939,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- REG_WRITE(ah, AR_OBS, 8);
+@@ -1928,8 +1928,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+ REG_WRITE(ah, AR_OBS, 8);
if (ah->config.rx_intr_mitigation) {
- REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500);
diff --git a/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch b/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
index 6410a6e2b0..7feed482bf 100644
--- a/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
+++ b/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -621,6 +621,7 @@ struct ath_softc {
+@@ -641,6 +641,7 @@ struct ath_softc {
struct ieee80211_hw *hw;
struct device *dev;
@@ -8,7 +8,7 @@
struct survey_info *cur_survey;
struct survey_info survey[ATH9K_NUM_CHANNELS];
-@@ -688,6 +689,7 @@ struct ath_softc {
+@@ -709,6 +710,7 @@ struct ath_softc {
struct dfs_pattern_detector *dfs_detector;
};
@@ -18,7 +18,7 @@
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1579,6 +1579,50 @@ static const struct file_operations fops
+@@ -1580,6 +1580,50 @@ static const struct file_operations fops
.owner = THIS_MODULE
};
@@ -69,7 +69,7 @@
int ath9k_init_debug(struct ath_hw *ah)
{
struct ath_common *common = ath9k_hw_common(ah);
-@@ -1645,5 +1689,8 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1646,5 +1690,8 @@ int ath9k_init_debug(struct ath_hw *ah)
debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
&fops_eeprom);
@@ -80,7 +80,7 @@
}
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1551,7 +1551,7 @@ static void ath9k_disable_ps(struct ath_
+@@ -1122,7 +1122,7 @@ static void ath9k_disable_ps(struct ath_
ath_dbg(common, PS, "PowerSave disabled\n");
}
@@ -89,7 +89,7 @@
{
struct ath_softc *sc = hw->priv;
struct ath_hw *ah = sc->sc_ah;
-@@ -1602,9 +1602,11 @@ static int ath9k_config(struct ieee80211
+@@ -1173,9 +1173,11 @@ static int ath9k_config(struct ieee80211
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
struct ieee80211_channel *curchan = hw->conf.channel;
@@ -101,7 +101,7 @@
if (ah->curchan)
old_pos = ah->curchan - &ah->channels[0];
-@@ -1652,7 +1654,23 @@ static int ath9k_config(struct ieee80211
+@@ -1218,7 +1220,23 @@ static int ath9k_config(struct ieee80211
memset(&sc->survey[pos], 0, sizeof(struct survey_info));
}
@@ -125,4 +125,4 @@
+ if (ath_set_channel(sc, hw, hchan) < 0) {
ath_err(common, "Unable to set channel\n");
mutex_unlock(&sc->mutex);
- return -EINVAL;
+ ath9k_ps_restore(sc);
diff --git a/package/mac80211/patches/513-mac80211_reduce_txqueuelen.patch b/package/mac80211/patches/513-mac80211_reduce_txqueuelen.patch
index c18a146c34..11f0215f8c 100644
--- a/package/mac80211/patches/513-mac80211_reduce_txqueuelen.patch
+++ b/package/mac80211/patches/513-mac80211_reduce_txqueuelen.patch
@@ -1,6 +1,6 @@
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -817,6 +817,7 @@ static const struct net_device_ops ieee8
+@@ -814,6 +814,7 @@ static const struct net_device_ops ieee8
static void ieee80211_if_setup(struct net_device *dev)
{
ether_setup(dev);
diff --git a/package/mac80211/patches/520-mac80211_cur_txpower.patch b/package/mac80211/patches/520-mac80211_cur_txpower.patch
index e8893fb509..9bb2ce8ae9 100644
--- a/package/mac80211/patches/520-mac80211_cur_txpower.patch
+++ b/package/mac80211/patches/520-mac80211_cur_txpower.patch
@@ -11,7 +11,7 @@
u16 listen_interval;
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
-@@ -1936,7 +1936,7 @@ static int ieee80211_get_tx_power(struct
+@@ -1940,7 +1940,7 @@ static int ieee80211_get_tx_power(struct
{
struct ieee80211_local *local = wiphy_priv(wiphy);
diff --git a/package/mac80211/patches/521-ath9k_cur_txpower.patch b/package/mac80211/patches/521-ath9k_cur_txpower.patch
index 24437accda..f5d359bb2f 100644
--- a/package/mac80211/patches/521-ath9k_cur_txpower.patch
+++ b/package/mac80211/patches/521-ath9k_cur_txpower.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1676,6 +1676,8 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1243,6 +1243,8 @@ int ath9k_config(struct ieee80211_hw *hw
return -EINVAL;
}
@@ -9,7 +9,7 @@
/*
* The most recent snapshot of channel->noisefloor for the old
* channel is only available after the hardware reset. Copy it to
-@@ -1690,6 +1692,7 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1257,6 +1259,7 @@ int ath9k_config(struct ieee80211_hw *hw
sc->config.txpowlimit = 2 * conf->power_level;
ath9k_cmn_update_txpow(ah, sc->curtxpow,
sc->config.txpowlimit, &sc->curtxpow);
diff --git a/package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch b/package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch
index 7aa72ab580..40f4e62c7e 100644
--- a/package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch
+++ b/package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch
@@ -23,7 +23,7 @@
int antenna;
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
-@@ -320,6 +320,11 @@ struct sta_info {
+@@ -325,6 +325,11 @@ struct sta_info {
unsigned long rx_dropped;
int last_signal;
struct ewma avg_signal;
@@ -78,7 +78,7 @@
kfree(sta);
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
-@@ -522,6 +522,8 @@ struct station_parameters {
+@@ -527,6 +527,8 @@ struct station_parameters {
* @STATION_INFO_STA_FLAGS: @sta_flags filled
* @STATION_INFO_BEACON_LOSS_COUNT: @beacon_loss_count filled
* @STATION_INFO_T_OFFSET: @t_offset filled
@@ -87,7 +87,7 @@
*/
enum station_info_flags {
STATION_INFO_INACTIVE_TIME = 1<<0,
-@@ -545,6 +547,8 @@ enum station_info_flags {
+@@ -550,6 +552,8 @@ enum station_info_flags {
STATION_INFO_STA_FLAGS = 1<<18,
STATION_INFO_BEACON_LOSS_COUNT = 1<<19,
STATION_INFO_T_OFFSET = 1<<20,
@@ -96,7 +96,7 @@
};
/**
-@@ -626,6 +630,9 @@ struct sta_bss_parameters {
+@@ -631,6 +635,9 @@ struct sta_bss_parameters {
NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
* @signal_avg: avg signal strength, type depends on the wiphy's signal_type
NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
@@ -106,7 +106,7 @@
* @txrate: current unicast bitrate from this station
* @rxrate: current unicast bitrate to this station
* @rx_packets: packets received from this station
-@@ -658,6 +665,11 @@ struct station_info {
+@@ -663,6 +670,11 @@ struct station_info {
u8 plink_state;
s8 signal;
s8 signal_avg;
@@ -137,7 +137,7 @@
u8 rs_num_delims;
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -988,6 +988,7 @@ static int ath9k_rx_skb_preprocess(struc
+@@ -951,6 +951,7 @@ static int ath9k_rx_skb_preprocess(struc
bool *decrypt_error)
{
struct ath_hw *ah = common->ah;
@@ -145,7 +145,7 @@
/*
* everything but the rate is checked here, the rate check is done
-@@ -1013,6 +1014,20 @@ static int ath9k_rx_skb_preprocess(struc
+@@ -976,6 +977,20 @@ static int ath9k_rx_skb_preprocess(struc
if (rx_stats->rs_moreaggr)
rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
@@ -166,28 +166,9 @@
return 0;
}
-@@ -1543,14 +1558,14 @@ static void ath_ant_comb_scan(struct ath
- struct ath_ant_comb *antcomb = &sc->ant_comb;
- int alt_ratio = 0, alt_rssi_avg = 0, main_rssi_avg = 0, curr_alt_set;
- int curr_main_set;
-- int main_rssi = rs->rs_rssi_ctl0;
-- int alt_rssi = rs->rs_rssi_ctl1;
-+ int main_rssi = rs->rs_rssi_ctl[0];
-+ int alt_rssi = rs->rs_rssi_ctl[1];
- int rx_ant_conf, main_ant_conf;
- bool short_scan = false;
-
-- rx_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_CURRENT_SHIFT) &
-+ rx_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_CURRENT_SHIFT) &
- ATH_ANT_RX_MASK;
-- main_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_MAIN_SHIFT) &
-+ main_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_MAIN_SHIFT) &
- ATH_ANT_RX_MASK;
-
- /* Record packet only when both main_rssi and alt_rssi is positive */
--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
-@@ -455,12 +455,12 @@ int ath9k_hw_process_rxdesc_edma(struct
+@@ -458,12 +458,12 @@ int ath9k_hw_process_rxdesc_edma(struct
/* XXX: Keycache */
rxs->rs_rssi = MS(rxsp->status5, AR_RxRSSICombined);
@@ -248,7 +229,7 @@
if (ads.ds_rxstatus8 & AR_RxKeyIdxValid)
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -997,12 +997,12 @@ void ath_debug_stat_rx(struct ath_softc
+@@ -998,12 +998,12 @@ void ath_debug_stat_rx(struct ath_softc
#ifdef CONFIG_ATH9K_MAC_DEBUG
spin_lock(&sc->debug.samp_lock);
RX_SAMP_DBG(jiffies) = jiffies;
@@ -269,7 +250,7 @@
RX_SAMP_DBG(rate) = rs->rs_rate;
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
-@@ -1695,6 +1695,8 @@ enum nl80211_sta_bss_param {
+@@ -1699,6 +1699,8 @@ enum nl80211_sta_bss_param {
* @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update.
* @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32)
* @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64)
@@ -278,7 +259,7 @@
* @__NL80211_STA_INFO_AFTER_LAST: internal
* @NL80211_STA_INFO_MAX: highest possible station info attribute
*/
-@@ -1719,6 +1721,8 @@ enum nl80211_sta_info {
+@@ -1723,6 +1725,8 @@ enum nl80211_sta_info {
NL80211_STA_INFO_STA_FLAGS,
NL80211_STA_INFO_BEACON_LOSS,
NL80211_STA_INFO_T_OFFSET,
@@ -289,7 +270,7 @@
__NL80211_STA_INFO_AFTER_LAST,
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
-@@ -2467,6 +2467,33 @@ nla_put_failure:
+@@ -2523,6 +2523,33 @@ nla_put_failure:
return false;
}
@@ -323,7 +304,7 @@
static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
int flags,
struct cfg80211_registered_device *rdev,
-@@ -2528,6 +2555,18 @@ static int nl80211_send_station(struct s
+@@ -2584,6 +2611,18 @@ static int nl80211_send_station(struct s
default:
break;
}
@@ -370,3 +351,37 @@
sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate);
+--- a/drivers/net/wireless/ath/ath9k/dfs.c
++++ b/drivers/net/wireless/ath/ath9k/dfs.c
+@@ -164,8 +164,8 @@ void ath9k_dfs_process_phyerr(struct ath
+ return;
+ }
+
+- ard.rssi = rs->rs_rssi_ctl0;
+- ard.ext_rssi = rs->rs_rssi_ext0;
++ ard.rssi = rs->rs_rssi_ctl[0];
++ ard.ext_rssi = rs->rs_rssi_ext[0];
+
+ /*
+ * hardware stores this as 8 bit signed value.
+--- a/drivers/net/wireless/ath/ath9k/antenna.c
++++ b/drivers/net/wireless/ath/ath9k/antenna.c
+@@ -529,14 +529,14 @@ void ath_ant_comb_scan(struct ath_softc
+ struct ath_ant_comb *antcomb = &sc->ant_comb;
+ int alt_ratio = 0, alt_rssi_avg = 0, main_rssi_avg = 0, curr_alt_set;
+ int curr_main_set;
+- int main_rssi = rs->rs_rssi_ctl0;
+- int alt_rssi = rs->rs_rssi_ctl1;
++ int main_rssi = rs->rs_rssi_ctl[0];
++ int alt_rssi = rs->rs_rssi_ctl[1];
+ int rx_ant_conf, main_ant_conf;
+ bool short_scan = false;
+
+- rx_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_CURRENT_SHIFT) &
++ rx_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_CURRENT_SHIFT) &
+ ATH_ANT_RX_MASK;
+- main_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_MAIN_SHIFT) &
++ main_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_MAIN_SHIFT) &
+ ATH_ANT_RX_MASK;
+
+ /* Record packet only when both main_rssi and alt_rssi is positive */
diff --git a/package/mac80211/patches/530-ath9k_limit_qlen.patch b/package/mac80211/patches/530-ath9k_limit_qlen.patch
index f4eb51e973..b66289bda1 100644
--- a/package/mac80211/patches/530-ath9k_limit_qlen.patch
+++ b/package/mac80211/patches/530-ath9k_limit_qlen.patch
@@ -20,7 +20,7 @@
spinlock_t txbuflock;
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1646,6 +1646,10 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1647,6 +1647,10 @@ int ath9k_init_debug(struct ath_hw *ah)
&fops_interrupt);
debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc,
&fops_xmit);
@@ -65,7 +65,7 @@
__skb_unlink(skb, &tid->buf_q);
list_add_tail(&bf->list, bf_q);
if (bf_prev)
-@@ -1738,6 +1749,8 @@ static void ath_tx_send_ampdu(struct ath
+@@ -1728,6 +1739,8 @@ static void ath_tx_send_ampdu(struct ath
/* Add sub-frame to BAW */
ath_tx_addto_baw(sc, tid, bf->bf_state.seqno);
@@ -74,7 +74,7 @@
/* Queue to h/w without aggregation */
TX_STAT_INC(txctl->txq->axq_qnum, a_queued_hw);
bf->bf_lastbf = bf;
-@@ -1879,22 +1892,11 @@ error:
+@@ -1878,22 +1891,11 @@ error:
/* FIXME: tx power */
static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb,
@@ -99,7 +99,7 @@
if ((tx_info->flags & IEEE80211_TX_CTL_AMPDU) && tid) {
/*
-@@ -1926,6 +1928,7 @@ int ath_tx_start(struct ieee80211_hw *hw
+@@ -1925,6 +1927,7 @@ int ath_tx_start(struct ieee80211_hw *hw
struct ieee80211_vif *vif = info->control.vif;
struct ath_softc *sc = hw->priv;
struct ath_txq *txq = txctl->txq;
@@ -107,7 +107,7 @@
int padpos, padsize;
int frmlen = skb->len + FCS_LEN;
int q;
-@@ -1968,6 +1971,24 @@ int ath_tx_start(struct ieee80211_hw *hw
+@@ -1967,6 +1970,24 @@ int ath_tx_start(struct ieee80211_hw *hw
setup_frame_info(hw, skb, frmlen);
@@ -132,7 +132,7 @@
/*
* At this point, the vif, hw_key and sta pointers in the tx control
* info are no longer valid (overwritten by the ath_frame_info data.
-@@ -1982,7 +2003,7 @@ int ath_tx_start(struct ieee80211_hw *hw
+@@ -1981,7 +2002,7 @@ int ath_tx_start(struct ieee80211_hw *hw
txq->stopped = true;
}
diff --git a/package/mac80211/patches/540-ath9k_extra_leds.patch b/package/mac80211/patches/540-ath9k_extra_leds.patch
index 250e9cf312..c0a7317164 100644
--- a/package/mac80211/patches/540-ath9k_extra_leds.patch
+++ b/package/mac80211/patches/540-ath9k_extra_leds.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -508,6 +508,9 @@ static inline u16 ath9k_btcoex_aggr_limi
+@@ -523,6 +523,9 @@ static inline u16 ath9k_btcoex_aggr_limi
#ifdef CONFIG_MAC80211_LEDS
void ath_init_leds(struct ath_softc *sc);
void ath_deinit_leds(struct ath_softc *sc);
@@ -10,7 +10,7 @@
#else
static inline void ath_init_leds(struct ath_softc *sc)
{
-@@ -621,6 +624,13 @@ struct ath9k_vif_iter_data {
+@@ -641,6 +644,13 @@ struct ath9k_vif_iter_data {
int nadhocs; /* number of adhoc vifs */
};
@@ -24,7 +24,7 @@
struct ath_softc {
struct ieee80211_hw *hw;
struct device *dev;
-@@ -662,9 +672,8 @@ struct ath_softc {
+@@ -682,9 +692,8 @@ struct ath_softc {
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
#ifdef CONFIG_MAC80211_LEDS
@@ -171,7 +171,7 @@
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
-@@ -782,7 +782,7 @@ int ath9k_init_device(u16 devid, struct
+@@ -792,7 +792,7 @@ int ath9k_init_device(u16 devid, struct
#ifdef CONFIG_MAC80211_LEDS
/* must be initialized before ieee80211_register_hw */
@@ -182,7 +182,7 @@
#endif
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1255,6 +1255,61 @@ static const struct file_operations fops
+@@ -1256,6 +1256,61 @@ static const struct file_operations fops
.llseek = default_llseek,
};
@@ -244,7 +244,7 @@
#ifdef CONFIG_ATH9K_MAC_DEBUG
void ath9k_debug_samp_bb_mac(struct ath_softc *sc)
-@@ -1684,6 +1739,11 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1685,6 +1740,11 @@ int ath9k_init_debug(struct ath_hw *ah)
&fops_samps);
#endif
diff --git a/package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch b/package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch
index f7f66be0eb..ea066a843c 100644
--- a/package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch
+++ b/package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch
@@ -1,6 +1,6 @@
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -726,6 +726,8 @@ struct ieee80211_sub_if_data {
+@@ -702,6 +702,8 @@ struct ieee80211_sub_if_data {
/* bitmap of allowed (non-MCS) rate indexes for rate control */
u32 rc_rateidx_mask[IEEE80211_NUM_BANDS];
@@ -11,7 +11,7 @@
union {
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
-@@ -2112,9 +2112,20 @@ static int ieee80211_set_bitrate_mask(st
+@@ -2119,9 +2119,20 @@ static int ieee80211_set_bitrate_mask(st
}
for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
@@ -34,7 +34,7 @@
return 0;
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -3672,7 +3672,7 @@ void ieee80211_send_bar(struct ieee80211
+@@ -3676,7 +3676,7 @@ void ieee80211_send_bar(struct ieee80211
* (deprecated; this will be removed once drivers get updated to use
* rate_idx_mask)
* @rate_idx_mask: user-requested (legacy) rate mask
@@ -43,7 +43,7 @@
* @bss: whether this frame is sent out in AP or IBSS mode
*/
struct ieee80211_tx_rate_control {
-@@ -3684,7 +3684,7 @@ struct ieee80211_tx_rate_control {
+@@ -3688,7 +3688,7 @@ struct ieee80211_tx_rate_control {
bool rts, short_preamble;
u8 max_rate_idx;
u32 rate_idx_mask;
@@ -54,7 +54,7 @@
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
-@@ -642,9 +642,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+@@ -637,9 +637,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
txrc.max_rate_idx = -1;
else
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
@@ -69,7 +69,7 @@
txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP ||
tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
tx->sdata->vif.type == NL80211_IFTYPE_ADHOC);
-@@ -2480,8 +2482,6 @@ struct sk_buff *ieee80211_beacon_get_tim
+@@ -2475,8 +2477,6 @@ struct sk_buff *ieee80211_beacon_get_tim
txrc.max_rate_idx = -1;
else
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
diff --git a/package/mac80211/patches/551-ath9k_optimize_interrupt_mitigation.patch b/package/mac80211/patches/551-ath9k_optimize_interrupt_mitigation.patch
index 5674fbb9d3..2afc4deb43 100644
--- a/package/mac80211/patches/551-ath9k_optimize_interrupt_mitigation.patch
+++ b/package/mac80211/patches/551-ath9k_optimize_interrupt_mitigation.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
-@@ -237,21 +237,19 @@ static bool ar9003_hw_get_isr(struct ath
+@@ -240,21 +240,19 @@ static bool ar9003_hw_get_isr(struct ath
*masked = isr & ATH9K_INT_COMMON;
diff --git a/package/mac80211/patches/570-ath9k_remove_noiseFloor.patch b/package/mac80211/patches/570-ath9k_remove_noiseFloor.patch
deleted file mode 100644
index fb17dc566a..0000000000
--- a/package/mac80211/patches/570-ath9k_remove_noiseFloor.patch
+++ /dev/null
@@ -1,52 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.h
-+++ b/drivers/net/wireless/ath/ath9k/ani.h
-@@ -128,7 +128,6 @@ struct ar5416AniState {
- u32 listenTime;
- int32_t rssiThrLow;
- int32_t rssiThrHigh;
-- u32 noiseFloor;
- u32 ofdmPhyErrCount;
- u32 cckPhyErrCount;
- int16_t pktRssi[2];
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -266,11 +266,9 @@ static void ath9k_hw_set_ofdm_nil(struct
- const struct ani_ofdm_level_entry *entry_ofdm;
- const struct ani_cck_level_entry *entry_cck;
-
-- aniState->noiseFloor = BEACON_RSSI(ah);
--
- ath_dbg(common, ANI, "**** ofdmlevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
- aniState->ofdmNoiseImmunityLevel,
-- immunityLevel, aniState->noiseFloor,
-+ immunityLevel, BEACON_RSSI(ah),
- aniState->rssiThrLow, aniState->rssiThrHigh);
-
- if (aniState->update_ani)
-@@ -292,7 +290,7 @@ static void ath9k_hw_set_ofdm_nil(struct
- ATH9K_ANI_FIRSTEP_LEVEL,
- entry_ofdm->fir_step_level);
-
-- if ((aniState->noiseFloor >= aniState->rssiThrHigh) &&
-+ if (BEACON_RSSI(ah) >= aniState->rssiThrHigh &&
- (!aniState->ofdmWeakSigDetectOff !=
- entry_ofdm->ofdm_weak_signal_on)) {
- ath9k_hw_ani_control(ah,
-@@ -329,15 +327,14 @@ static void ath9k_hw_set_cck_nil(struct
- const struct ani_ofdm_level_entry *entry_ofdm;
- const struct ani_cck_level_entry *entry_cck;
-
-- aniState->noiseFloor = BEACON_RSSI(ah);
- ath_dbg(common, ANI, "**** ccklevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
- aniState->cckNoiseImmunityLevel, immunityLevel,
-- aniState->noiseFloor, aniState->rssiThrLow,
-+ BEACON_RSSI(ah), aniState->rssiThrLow,
- aniState->rssiThrHigh);
-
- if ((ah->opmode == NL80211_IFTYPE_STATION ||
- ah->opmode == NL80211_IFTYPE_ADHOC) &&
-- aniState->noiseFloor <= aniState->rssiThrLow &&
-+ BEACON_RSSI(ah) <= aniState->rssiThrLow &&
- immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
- immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
-
diff --git a/package/mac80211/patches/571-ath9k_ani_fix_weak_sig.patch b/package/mac80211/patches/571-ath9k_ani_fix_weak_sig.patch
deleted file mode 100644
index 12d7cda59a..0000000000
--- a/package/mac80211/patches/571-ath9k_ani_fix_weak_sig.patch
+++ /dev/null
@@ -1,30 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -265,6 +265,7 @@ static void ath9k_hw_set_ofdm_nil(struct
- struct ath_common *common = ath9k_hw_common(ah);
- const struct ani_ofdm_level_entry *entry_ofdm;
- const struct ani_cck_level_entry *entry_cck;
-+ bool weak_sig;
-
- ath_dbg(common, ANI, "**** ofdmlevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
- aniState->ofdmNoiseImmunityLevel,
-@@ -290,13 +291,15 @@ static void ath9k_hw_set_ofdm_nil(struct
- ATH9K_ANI_FIRSTEP_LEVEL,
- entry_ofdm->fir_step_level);
-
-- if (BEACON_RSSI(ah) >= aniState->rssiThrHigh &&
-- (!aniState->ofdmWeakSigDetectOff !=
-- entry_ofdm->ofdm_weak_signal_on)) {
-+ weak_sig = entry_ofdm->ofdm_weak_signal_on;
-+ if (ah->opmode == NL80211_IFTYPE_STATION &&
-+ BEACON_RSSI(ah) <= aniState->rssiThrHigh)
-+ weak_sig = true;
-+
-+ if (!aniState->ofdmWeakSigDetectOff != weak_sig)
- ath9k_hw_ani_control(ah,
- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
- entry_ofdm->ofdm_weak_signal_on);
-- }
- }
-
- static void ath9k_hw_ani_ofdm_err_trigger(struct ath_hw *ah)
diff --git a/package/mac80211/patches/572-ath9k_ani_cleanup_weak_signal_detect.patch b/package/mac80211/patches/572-ath9k_ani_cleanup_weak_signal_detect.patch
deleted file mode 100644
index 2e071817f7..0000000000
--- a/package/mac80211/patches/572-ath9k_ani_cleanup_weak_signal_detect.patch
+++ /dev/null
@@ -1,192 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -185,7 +185,7 @@ static void ath9k_hw_ani_ofdm_err_trigge
- }
- rssi = BEACON_RSSI(ah);
- if (rssi > aniState->rssiThrHigh) {
-- if (!aniState->ofdmWeakSigDetectOff) {
-+ if (aniState->ofdmWeakSigDetect) {
- if (ath9k_hw_ani_control(ah,
- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
- false)) {
-@@ -200,7 +200,7 @@ static void ath9k_hw_ani_ofdm_err_trigge
- return;
- }
- } else if (rssi > aniState->rssiThrLow) {
-- if (aniState->ofdmWeakSigDetectOff)
-+ if (!aniState->ofdmWeakSigDetect)
- ath9k_hw_ani_control(ah,
- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
- true);
-@@ -211,7 +211,7 @@ static void ath9k_hw_ani_ofdm_err_trigge
- } else {
- if ((conf->channel->band == IEEE80211_BAND_2GHZ) &&
- !conf_is_ht(conf)) {
-- if (!aniState->ofdmWeakSigDetectOff)
-+ if (aniState->ofdmWeakSigDetect)
- ath9k_hw_ani_control(ah,
- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
- false);
-@@ -296,7 +296,7 @@ static void ath9k_hw_set_ofdm_nil(struct
- BEACON_RSSI(ah) <= aniState->rssiThrHigh)
- weak_sig = true;
-
-- if (!aniState->ofdmWeakSigDetectOff != weak_sig)
-+ if (aniState->ofdmWeakSigDetect != weak_sig)
- ath9k_hw_ani_control(ah,
- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
- entry_ofdm->ofdm_weak_signal_on);
-@@ -401,7 +401,7 @@ static void ath9k_hw_ani_lower_immunity_
- if (rssi > aniState->rssiThrHigh) {
- /* XXX: Handle me */
- } else if (rssi > aniState->rssiThrLow) {
-- if (aniState->ofdmWeakSigDetectOff) {
-+ if (!aniState->ofdmWeakSigDetect) {
- if (ath9k_hw_ani_control(ah,
- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
- true))
-@@ -509,9 +509,9 @@ static void ath9k_ani_reset_old(struct a
- if (aniState->spurImmunityLevel != 0)
- ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
- aniState->spurImmunityLevel);
-- if (aniState->ofdmWeakSigDetectOff)
-+ if (!aniState->ofdmWeakSigDetect)
- ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- !aniState->ofdmWeakSigDetectOff);
-+ aniState->ofdmWeakSigDetect);
- if (aniState->cckWeakSigThreshold)
- ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR,
- aniState->cckWeakSigThreshold);
-@@ -887,8 +887,7 @@ void ath9k_hw_ani_init(struct ath_hw *ah
-
- ani->rssiThrHigh = ATH9K_ANI_RSSI_THR_HIGH;
- ani->rssiThrLow = ATH9K_ANI_RSSI_THR_LOW;
-- ani->ofdmWeakSigDetectOff =
-- !ATH9K_ANI_USE_OFDM_WEAK_SIG;
-+ ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
- ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
- ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
- ani->update_ani = false;
---- a/drivers/net/wireless/ath/ath9k/ani.h
-+++ b/drivers/net/wireless/ath/ath9k/ani.h
-@@ -122,7 +122,7 @@ struct ar5416AniState {
- u8 mrcCCKOff;
- u8 spurImmunityLevel;
- u8 firstepLevel;
-- u8 ofdmWeakSigDetectOff;
-+ u8 ofdmWeakSigDetect;
- u8 cckWeakSigThreshold;
- bool update_ani;
- u32 listenTime;
---- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -1042,12 +1042,12 @@ static bool ar5008_hw_ani_control_old(st
- REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-
-- if (!on != aniState->ofdmWeakSigDetectOff) {
-+ if (on != aniState->ofdmWeakSigDetect) {
- if (on)
- ah->stats.ast_ani_ofdmon++;
- else
- ah->stats.ast_ani_ofdmoff++;
-- aniState->ofdmWeakSigDetectOff = !on;
-+ aniState->ofdmWeakSigDetect = on;
- }
- break;
- }
-@@ -1114,10 +1114,10 @@ static bool ar5008_hw_ani_control_old(st
-
- ath_dbg(common, ANI, "ANI parameters:\n");
- ath_dbg(common, ANI,
-- "noiseImmunityLevel=%d, spurImmunityLevel=%d, ofdmWeakSigDetectOff=%d\n",
-+ "noiseImmunityLevel=%d, spurImmunityLevel=%d, ofdmWeakSigDetect=%d\n",
- aniState->noiseImmunityLevel,
- aniState->spurImmunityLevel,
-- !aniState->ofdmWeakSigDetectOff);
-+ aniState->ofdmWeakSigDetect);
- ath_dbg(common, ANI,
- "cckWeakSigThreshold=%d, firstepLevel=%d, listenTime=%d\n",
- aniState->cckWeakSigThreshold,
-@@ -1206,18 +1206,18 @@ static bool ar5008_hw_ani_control_new(st
- REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-
-- if (!on != aniState->ofdmWeakSigDetectOff) {
-+ if (on != aniState->ofdmWeakSigDetect) {
- ath_dbg(common, ANI,
- "** ch %d: ofdm weak signal: %s=>%s\n",
- chan->channel,
-- !aniState->ofdmWeakSigDetectOff ?
-+ aniState->ofdmWeakSigDetect ?
- "on" : "off",
- on ? "on" : "off");
- if (on)
- ah->stats.ast_ani_ofdmon++;
- else
- ah->stats.ast_ani_ofdmoff++;
-- aniState->ofdmWeakSigDetectOff = !on;
-+ aniState->ofdmWeakSigDetect = on;
- }
- break;
- }
-@@ -1367,7 +1367,7 @@ static bool ar5008_hw_ani_control_new(st
- ath_dbg(common, ANI,
- "ANI parameters: SI=%d, ofdmWS=%s FS=%d MRCcck=%s listenTime=%d ofdmErrs=%d cckErrs=%d\n",
- aniState->spurImmunityLevel,
-- !aniState->ofdmWeakSigDetectOff ? "on" : "off",
-+ aniState->ofdmWeakSigDetect ? "on" : "off",
- aniState->firstepLevel,
- !aniState->mrcCCKOff ? "on" : "off",
- aniState->listenTime,
-@@ -1456,7 +1456,7 @@ static void ar5008_hw_ani_cache_ini_regs
- /* these levels just got reset to defaults by the INI */
- aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
- aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-- aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG;
-+ aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
- aniState->mrcCCKOff = true; /* not available on pre AR9003 */
- }
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -821,18 +821,18 @@ static bool ar9003_hw_ani_control(struct
- REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-
-- if (!on != aniState->ofdmWeakSigDetectOff) {
-+ if (on != aniState->ofdmWeakSigDetect) {
- ath_dbg(common, ANI,
- "** ch %d: ofdm weak signal: %s=>%s\n",
- chan->channel,
-- !aniState->ofdmWeakSigDetectOff ?
-+ aniState->ofdmWeakSigDetect ?
- "on" : "off",
- on ? "on" : "off");
- if (on)
- ah->stats.ast_ani_ofdmon++;
- else
- ah->stats.ast_ani_ofdmoff++;
-- aniState->ofdmWeakSigDetectOff = !on;
-+ aniState->ofdmWeakSigDetect = on;
- }
- break;
- }
-@@ -998,7 +998,7 @@ static bool ar9003_hw_ani_control(struct
- ath_dbg(common, ANI,
- "ANI parameters: SI=%d, ofdmWS=%s FS=%d MRCcck=%s listenTime=%d ofdmErrs=%d cckErrs=%d\n",
- aniState->spurImmunityLevel,
-- !aniState->ofdmWeakSigDetectOff ? "on" : "off",
-+ aniState->ofdmWeakSigDetect ? "on" : "off",
- aniState->firstepLevel,
- !aniState->mrcCCKOff ? "on" : "off",
- aniState->listenTime,
-@@ -1109,7 +1109,7 @@ static void ar9003_hw_ani_cache_ini_regs
- /* these levels just got reset to defaults by the INI */
- aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
- aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-- aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG;
-+ aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
- aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK;
- }
-
diff --git a/package/mac80211/patches/573-ath9k_ani_fix_mode_checks.patch b/package/mac80211/patches/573-ath9k_ani_fix_mode_checks.patch
deleted file mode 100644
index 7596996141..0000000000
--- a/package/mac80211/patches/573-ath9k_ani_fix_mode_checks.patch
+++ /dev/null
@@ -1,49 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -176,7 +176,7 @@ static void ath9k_hw_ani_ofdm_err_trigge
- }
- }
-
-- if (ah->opmode == NL80211_IFTYPE_AP) {
-+ if (ah->opmode != NL80211_IFTYPE_STATION) {
- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
- aniState->firstepLevel + 1);
-@@ -236,7 +236,7 @@ static void ath9k_hw_ani_cck_err_trigger
- return;
- }
- }
-- if (ah->opmode == NL80211_IFTYPE_AP) {
-+ if (ah->opmode != NL80211_IFTYPE_STATION) {
- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
- aniState->firstepLevel + 1);
-@@ -335,8 +335,7 @@ static void ath9k_hw_set_cck_nil(struct
- BEACON_RSSI(ah), aniState->rssiThrLow,
- aniState->rssiThrHigh);
-
-- if ((ah->opmode == NL80211_IFTYPE_STATION ||
-- ah->opmode == NL80211_IFTYPE_ADHOC) &&
-+ if (ah->opmode == NL80211_IFTYPE_STATION &&
- BEACON_RSSI(ah) <= aniState->rssiThrLow &&
- immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
- immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
-@@ -390,7 +389,7 @@ static void ath9k_hw_ani_lower_immunity_
-
- aniState = &ah->curchan->ani;
-
-- if (ah->opmode == NL80211_IFTYPE_AP) {
-+ if (ah->opmode != NL80211_IFTYPE_STATION) {
- if (aniState->firstepLevel > 0) {
- if (ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
- aniState->firstepLevel - 1))
-@@ -474,8 +473,7 @@ static void ath9k_ani_reset_old(struct a
-
- aniState = &ah->curchan->ani;
-
-- if (ah->opmode != NL80211_IFTYPE_STATION
-- && ah->opmode != NL80211_IFTYPE_ADHOC) {
-+ if (ah->opmode != NL80211_IFTYPE_STATION) {
- ath_dbg(common, ANI, "Reset ANI state opmode %u\n", ah->opmode);
- ah->stats.ast_ani_reset++;
-
diff --git a/package/mac80211/patches/574-ath9k_remove_old_ani.patch b/package/mac80211/patches/574-ath9k_remove_old_ani.patch
deleted file mode 100644
index e90e48c7d2..0000000000
--- a/package/mac80211/patches/574-ath9k_remove_old_ani.patch
+++ /dev/null
@@ -1,627 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -104,11 +104,6 @@ static const struct ani_cck_level_entry
- #define ATH9K_ANI_CCK_DEF_LEVEL \
- 2 /* default level - matches the INI settings */
-
--static bool use_new_ani(struct ath_hw *ah)
--{
-- return AR_SREV_9300_20_OR_LATER(ah) || modparam_force_new_ani;
--}
--
- static void ath9k_hw_update_mibstats(struct ath_hw *ah,
- struct ath9k_mib_stats *stats)
- {
-@@ -131,11 +126,6 @@ static void ath9k_ani_restart(struct ath
- aniState = &ah->curchan->ani;
- aniState->listenTime = 0;
-
-- if (!use_new_ani(ah)) {
-- ofdm_base = AR_PHY_COUNTMAX - ah->config.ofdm_trig_high;
-- cck_base = AR_PHY_COUNTMAX - ah->config.cck_trig_high;
-- }
--
- ath_dbg(common, ANI, "Writing ofdmbase=%u cckbase=%u\n",
- ofdm_base, cck_base);
-
-@@ -154,110 +144,6 @@ static void ath9k_ani_restart(struct ath
- aniState->cckPhyErrCount = 0;
- }
-
--static void ath9k_hw_ani_ofdm_err_trigger_old(struct ath_hw *ah)
--{
-- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
-- struct ar5416AniState *aniState;
-- int32_t rssi;
--
-- aniState = &ah->curchan->ani;
--
-- if (aniState->noiseImmunityLevel < HAL_NOISE_IMMUNE_MAX) {
-- if (ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
-- aniState->noiseImmunityLevel + 1)) {
-- return;
-- }
-- }
--
-- if (aniState->spurImmunityLevel < HAL_SPUR_IMMUNE_MAX) {
-- if (ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
-- aniState->spurImmunityLevel + 1)) {
-- return;
-- }
-- }
--
-- if (ah->opmode != NL80211_IFTYPE_STATION) {
-- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel + 1);
-- }
-- return;
-- }
-- rssi = BEACON_RSSI(ah);
-- if (rssi > aniState->rssiThrHigh) {
-- if (aniState->ofdmWeakSigDetect) {
-- if (ath9k_hw_ani_control(ah,
-- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- false)) {
-- ath9k_hw_ani_control(ah,
-- ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0);
-- return;
-- }
-- }
-- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel + 1);
-- return;
-- }
-- } else if (rssi > aniState->rssiThrLow) {
-- if (!aniState->ofdmWeakSigDetect)
-- ath9k_hw_ani_control(ah,
-- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- true);
-- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel + 1);
-- return;
-- } else {
-- if ((conf->channel->band == IEEE80211_BAND_2GHZ) &&
-- !conf_is_ht(conf)) {
-- if (aniState->ofdmWeakSigDetect)
-- ath9k_hw_ani_control(ah,
-- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- false);
-- if (aniState->firstepLevel > 0)
-- ath9k_hw_ani_control(ah,
-- ATH9K_ANI_FIRSTEP_LEVEL, 0);
-- return;
-- }
-- }
--}
--
--static void ath9k_hw_ani_cck_err_trigger_old(struct ath_hw *ah)
--{
-- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
-- struct ar5416AniState *aniState;
-- int32_t rssi;
--
-- aniState = &ah->curchan->ani;
-- if (aniState->noiseImmunityLevel < HAL_NOISE_IMMUNE_MAX) {
-- if (ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
-- aniState->noiseImmunityLevel + 1)) {
-- return;
-- }
-- }
-- if (ah->opmode != NL80211_IFTYPE_STATION) {
-- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel + 1);
-- }
-- return;
-- }
-- rssi = BEACON_RSSI(ah);
-- if (rssi > aniState->rssiThrLow) {
-- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel + 1);
-- } else {
-- if ((conf->channel->band == IEEE80211_BAND_2GHZ) &&
-- !conf_is_ht(conf)) {
-- if (aniState->firstepLevel > 0)
-- ath9k_hw_ani_control(ah,
-- ATH9K_ANI_FIRSTEP_LEVEL, 0);
-- }
-- }
--}
--
- /* Adjust the OFDM Noise Immunity Level */
- static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel)
- {
-@@ -309,11 +195,6 @@ static void ath9k_hw_ani_ofdm_err_trigge
- if (!DO_ANI(ah))
- return;
-
-- if (!use_new_ani(ah)) {
-- ath9k_hw_ani_ofdm_err_trigger_old(ah);
-- return;
-- }
--
- aniState = &ah->curchan->ani;
-
- if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL)
-@@ -371,70 +252,12 @@ static void ath9k_hw_ani_cck_err_trigger
- if (!DO_ANI(ah))
- return;
-
-- if (!use_new_ani(ah)) {
-- ath9k_hw_ani_cck_err_trigger_old(ah);
-- return;
-- }
--
- aniState = &ah->curchan->ani;
-
- if (aniState->cckNoiseImmunityLevel < ATH9K_ANI_CCK_MAX_LEVEL)
- ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1);
- }
-
--static void ath9k_hw_ani_lower_immunity_old(struct ath_hw *ah)
--{
-- struct ar5416AniState *aniState;
-- int32_t rssi;
--
-- aniState = &ah->curchan->ani;
--
-- if (ah->opmode != NL80211_IFTYPE_STATION) {
-- if (aniState->firstepLevel > 0) {
-- if (ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel - 1))
-- return;
-- }
-- } else {
-- rssi = BEACON_RSSI(ah);
-- if (rssi > aniState->rssiThrHigh) {
-- /* XXX: Handle me */
-- } else if (rssi > aniState->rssiThrLow) {
-- if (!aniState->ofdmWeakSigDetect) {
-- if (ath9k_hw_ani_control(ah,
-- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- true))
-- return;
-- }
-- if (aniState->firstepLevel > 0) {
-- if (ath9k_hw_ani_control(ah,
-- ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel - 1))
-- return;
-- }
-- } else {
-- if (aniState->firstepLevel > 0) {
-- if (ath9k_hw_ani_control(ah,
-- ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel - 1))
-- return;
-- }
-- }
-- }
--
-- if (aniState->spurImmunityLevel > 0) {
-- if (ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
-- aniState->spurImmunityLevel - 1))
-- return;
-- }
--
-- if (aniState->noiseImmunityLevel > 0) {
-- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
-- aniState->noiseImmunityLevel - 1);
-- return;
-- }
--}
--
- /*
- * only lower either OFDM or CCK errors per turn
- * we lower the other one next time
-@@ -445,11 +268,6 @@ static void ath9k_hw_ani_lower_immunity(
-
- aniState = &ah->curchan->ani;
-
-- if (!use_new_ani(ah)) {
-- ath9k_hw_ani_lower_immunity_old(ah);
-- return;
-- }
--
- /* lower OFDM noise immunity */
- if (aniState->ofdmNoiseImmunityLevel > 0 &&
- (aniState->ofdmsTurn || aniState->cckNoiseImmunityLevel == 0)) {
-@@ -462,71 +280,6 @@ static void ath9k_hw_ani_lower_immunity(
- ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1);
- }
-
--static void ath9k_ani_reset_old(struct ath_hw *ah, bool is_scanning)
--{
-- struct ar5416AniState *aniState;
-- struct ath9k_channel *chan = ah->curchan;
-- struct ath_common *common = ath9k_hw_common(ah);
--
-- if (!DO_ANI(ah))
-- return;
--
-- aniState = &ah->curchan->ani;
--
-- if (ah->opmode != NL80211_IFTYPE_STATION) {
-- ath_dbg(common, ANI, "Reset ANI state opmode %u\n", ah->opmode);
-- ah->stats.ast_ani_reset++;
--
-- if (ah->opmode == NL80211_IFTYPE_AP) {
-- /*
-- * ath9k_hw_ani_control() will only process items set on
-- * ah->ani_function
-- */
-- if (IS_CHAN_2GHZ(chan))
-- ah->ani_function = (ATH9K_ANI_SPUR_IMMUNITY_LEVEL |
-- ATH9K_ANI_FIRSTEP_LEVEL);
-- else
-- ah->ani_function = 0;
-- }
--
-- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, 0);
-- ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0);
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, 0);
-- ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- !ATH9K_ANI_USE_OFDM_WEAK_SIG);
-- ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR,
-- ATH9K_ANI_CCK_WEAK_SIG_THR);
--
-- ath9k_ani_restart(ah);
-- return;
-- }
--
-- if (aniState->noiseImmunityLevel != 0)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
-- aniState->noiseImmunityLevel);
-- if (aniState->spurImmunityLevel != 0)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
-- aniState->spurImmunityLevel);
-- if (!aniState->ofdmWeakSigDetect)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- aniState->ofdmWeakSigDetect);
-- if (aniState->cckWeakSigThreshold)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR,
-- aniState->cckWeakSigThreshold);
-- if (aniState->firstepLevel != 0)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel);
--
-- ath9k_ani_restart(ah);
--
-- ENABLE_REGWRITE_BUFFER(ah);
--
-- REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
-- REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
--
-- REGWRITE_BUFFER_FLUSH(ah);
--}
--
- /*
- * Restore the ANI parameters in the HAL and reset the statistics.
- * This routine should be called for every hardware reset and for
-@@ -541,9 +294,6 @@ void ath9k_ani_reset(struct ath_hw *ah,
- if (!DO_ANI(ah))
- return;
-
-- if (!use_new_ani(ah))
-- return ath9k_ani_reset_old(ah, is_scanning);
--
- BUG_ON(aniState == NULL);
- ah->stats.ast_ani_reset++;
-
-@@ -640,11 +390,6 @@ static bool ath9k_hw_ani_read_counters(s
- return false;
- }
-
-- if (!use_new_ani(ah)) {
-- ofdm_base = AR_PHY_COUNTMAX - ah->config.ofdm_trig_high;
-- cck_base = AR_PHY_COUNTMAX - ah->config.cck_trig_high;
-- }
--
- aniState->listenTime += listenTime;
-
- ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
-@@ -652,26 +397,6 @@ static bool ath9k_hw_ani_read_counters(s
- phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
- phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
-
-- if (!use_new_ani(ah) && (phyCnt1 < ofdm_base || phyCnt2 < cck_base)) {
-- if (phyCnt1 < ofdm_base) {
-- ath_dbg(common, ANI,
-- "phyCnt1 0x%x, resetting counter value to 0x%x\n",
-- phyCnt1, ofdm_base);
-- REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base);
-- REG_WRITE(ah, AR_PHY_ERR_MASK_1,
-- AR_PHY_ERR_OFDM_TIMING);
-- }
-- if (phyCnt2 < cck_base) {
-- ath_dbg(common, ANI,
-- "phyCnt2 0x%x, resetting counter value to 0x%x\n",
-- phyCnt2, cck_base);
-- REG_WRITE(ah, AR_PHY_ERR_2, cck_base);
-- REG_WRITE(ah, AR_PHY_ERR_MASK_2,
-- AR_PHY_ERR_CCK_TIMING);
-- }
-- return false;
-- }
--
- ofdmPhyErrCnt = phyCnt1 - ofdm_base;
- ah->stats.ast_ani_ofdmerrs +=
- ofdmPhyErrCnt - aniState->ofdmPhyErrCount;
-@@ -810,9 +535,6 @@ void ath9k_hw_proc_mib_event(struct ath_
- if (((phyCnt1 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK) ||
- ((phyCnt2 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK)) {
-
-- if (!use_new_ani(ah))
-- ath9k_hw_ani_read_counters(ah);
--
- /* NB: always restart to insure the h/w counters are reset */
- ath9k_ani_restart(ah);
- }
-@@ -843,45 +565,28 @@ void ath9k_hw_ani_init(struct ath_hw *ah
-
- ath_dbg(common, ANI, "Initialize ANI\n");
-
-- if (use_new_ani(ah)) {
-- ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_NEW;
-- ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_NEW;
-+ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_NEW;
-+ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_NEW;
-
-- ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_NEW;
-- ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_NEW;
-- } else {
-- ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_OLD;
-- ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_OLD;
--
-- ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_OLD;
-- ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_OLD;
-- }
-+ ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_NEW;
-+ ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_NEW;
-
- for (i = 0; i < ARRAY_SIZE(ah->channels); i++) {
- struct ath9k_channel *chan = &ah->channels[i];
- struct ar5416AniState *ani = &chan->ani;
-
-- if (use_new_ani(ah)) {
-- ani->spurImmunityLevel =
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
-+ ani->spurImmunityLevel =
-+ ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
-
-- ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-+ ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-
-- if (AR_SREV_9300_20_OR_LATER(ah))
-- ani->mrcCCKOff =
-- !ATH9K_ANI_ENABLE_MRC_CCK;
-- else
-- ani->mrcCCKOff = true;
--
-- ani->ofdmsTurn = true;
-- } else {
-- ani->spurImmunityLevel =
-- ATH9K_ANI_SPUR_IMMUNE_LVL_OLD;
-- ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_OLD;
-+ if (AR_SREV_9300_20_OR_LATER(ah))
-+ ani->mrcCCKOff =
-+ !ATH9K_ANI_ENABLE_MRC_CCK;
-+ else
-+ ani->mrcCCKOff = true;
-
-- ani->cckWeakSigThreshold =
-- ATH9K_ANI_CCK_WEAK_SIG_THR;
-- }
-+ ani->ofdmsTurn = true;
-
- ani->rssiThrHigh = ATH9K_ANI_RSSI_THR_HIGH;
- ani->rssiThrLow = ATH9K_ANI_RSSI_THR_LOW;
-@@ -895,13 +600,8 @@ 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 (use_new_ani(ah)) {
-- ah->aniperiod = ATH9K_ANI_PERIOD_NEW;
-- ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_NEW;
-- } else {
-- ah->aniperiod = ATH9K_ANI_PERIOD_OLD;
-- ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_OLD;
-- }
-+ ah->aniperiod = ATH9K_ANI_PERIOD_NEW;
-+ ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_NEW;
-
- if (ah->config.enable_ani)
- ah->proc_phyerr |= HAL_PROCESS_ANI;
---- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -995,141 +995,6 @@ static u32 ar5008_hw_compute_pll_control
- return pll;
- }
-
--static bool ar5008_hw_ani_control_old(struct ath_hw *ah,
-- enum ath9k_ani_cmd cmd,
-- int param)
--{
-- struct ar5416AniState *aniState = &ah->curchan->ani;
-- struct ath_common *common = ath9k_hw_common(ah);
--
-- switch (cmd & ah->ani_function) {
-- case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{
-- u32 level = param;
--
-- if (level >= ARRAY_SIZE(ah->totalSizeDesired)) {
-- ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
-- level, ARRAY_SIZE(ah->totalSizeDesired));
-- return false;
-- }
--
-- REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ,
-- AR_PHY_DESIRED_SZ_TOT_DES,
-- ah->totalSizeDesired[level]);
-- REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
-- AR_PHY_AGC_CTL1_COARSE_LOW,
-- ah->coarse_low[level]);
-- REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
-- AR_PHY_AGC_CTL1_COARSE_HIGH,
-- ah->coarse_high[level]);
-- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
-- AR_PHY_FIND_SIG_FIRPWR,
-- ah->firpwr[level]);
--
-- if (level > aniState->noiseImmunityLevel)
-- ah->stats.ast_ani_niup++;
-- else if (level < aniState->noiseImmunityLevel)
-- ah->stats.ast_ani_nidown++;
-- aniState->noiseImmunityLevel = level;
-- break;
-- }
-- case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
-- u32 on = param ? 1 : 0;
--
-- if (on)
-- REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
-- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-- else
-- REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
-- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
--
-- if (on != aniState->ofdmWeakSigDetect) {
-- if (on)
-- ah->stats.ast_ani_ofdmon++;
-- else
-- ah->stats.ast_ani_ofdmoff++;
-- aniState->ofdmWeakSigDetect = on;
-- }
-- break;
-- }
-- case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{
-- static const int weakSigThrCck[] = { 8, 6 };
-- u32 high = param ? 1 : 0;
--
-- REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT,
-- AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK,
-- weakSigThrCck[high]);
-- if (high != aniState->cckWeakSigThreshold) {
-- if (high)
-- ah->stats.ast_ani_cckhigh++;
-- else
-- ah->stats.ast_ani_ccklow++;
-- aniState->cckWeakSigThreshold = high;
-- }
-- break;
-- }
-- case ATH9K_ANI_FIRSTEP_LEVEL:{
-- static const int firstep[] = { 0, 4, 8 };
-- u32 level = param;
--
-- if (level >= ARRAY_SIZE(firstep)) {
-- ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
-- level, ARRAY_SIZE(firstep));
-- return false;
-- }
-- REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
-- AR_PHY_FIND_SIG_FIRSTEP,
-- firstep[level]);
-- if (level > aniState->firstepLevel)
-- ah->stats.ast_ani_stepup++;
-- else if (level < aniState->firstepLevel)
-- ah->stats.ast_ani_stepdown++;
-- aniState->firstepLevel = level;
-- break;
-- }
-- case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
-- static const int cycpwrThr1[] = { 2, 4, 6, 8, 10, 12, 14, 16 };
-- u32 level = param;
--
-- if (level >= ARRAY_SIZE(cycpwrThr1)) {
-- ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
-- level, ARRAY_SIZE(cycpwrThr1));
-- return false;
-- }
-- REG_RMW_FIELD(ah, AR_PHY_TIMING5,
-- AR_PHY_TIMING5_CYCPWR_THR1,
-- cycpwrThr1[level]);
-- if (level > aniState->spurImmunityLevel)
-- ah->stats.ast_ani_spurup++;
-- else if (level < aniState->spurImmunityLevel)
-- ah->stats.ast_ani_spurdown++;
-- aniState->spurImmunityLevel = level;
-- break;
-- }
-- case ATH9K_ANI_PRESENT:
-- break;
-- default:
-- ath_dbg(common, ANI, "invalid cmd %u\n", cmd);
-- return false;
-- }
--
-- ath_dbg(common, ANI, "ANI parameters:\n");
-- ath_dbg(common, ANI,
-- "noiseImmunityLevel=%d, spurImmunityLevel=%d, ofdmWeakSigDetect=%d\n",
-- aniState->noiseImmunityLevel,
-- aniState->spurImmunityLevel,
-- aniState->ofdmWeakSigDetect);
-- ath_dbg(common, ANI,
-- "cckWeakSigThreshold=%d, firstepLevel=%d, listenTime=%d\n",
-- aniState->cckWeakSigThreshold,
-- aniState->firstepLevel,
-- aniState->listenTime);
-- ath_dbg(common, ANI, "ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
-- aniState->ofdmPhyErrCount,
-- aniState->cckPhyErrCount);
--
-- return true;
--}
--
- static bool ar5008_hw_ani_control_new(struct ath_hw *ah,
- enum ath9k_ani_cmd cmd,
- int param)
-@@ -1545,11 +1410,8 @@ void ar5008_hw_attach_phy_ops(struct ath
- priv_ops->do_getnf = ar5008_hw_do_getnf;
- priv_ops->set_radar_params = ar5008_hw_set_radar_params;
-
-- if (modparam_force_new_ani) {
-- priv_ops->ani_control = ar5008_hw_ani_control_new;
-- priv_ops->ani_cache_ini_regs = ar5008_hw_ani_cache_ini_regs;
-- } else
-- priv_ops->ani_control = ar5008_hw_ani_control_old;
-+ priv_ops->ani_control = ar5008_hw_ani_control_new;
-+ priv_ops->ani_cache_ini_regs = ar5008_hw_ani_cache_ini_regs;
-
- if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah))
- priv_ops->compute_pll_control = ar9160_hw_compute_pll_control;
---- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
-@@ -21,10 +21,6 @@
- #include "ar9002_initvals.h"
- #include "ar9002_phy.h"
-
--int modparam_force_new_ani;
--module_param_named(force_new_ani, modparam_force_new_ani, int, 0444);
--MODULE_PARM_DESC(force_new_ani, "Force new ANI for AR5008, AR9001, AR9002");
--
- /* General hardware code for the A5008/AR9001/AR9002 hadware families */
-
- static void ar9002_hw_init_mode_regs(struct ath_hw *ah)
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -1021,14 +1021,7 @@ void ar9002_hw_attach_ops(struct ath_hw
- void ar9003_hw_attach_ops(struct ath_hw *ah);
-
- void ar9002_hw_load_ani_reg(struct ath_hw *ah, struct ath9k_channel *chan);
--/*
-- * ANI work can be shared between all families but a next
-- * generation implementation of ANI will be used only for AR9003 only
-- * for now as the other families still need to be tested with the same
-- * next generation ANI. Feel free to start testing it though for the
-- * older families (AR5008, AR9001, AR9002) by using modparam_force_new_ani.
-- */
--extern int modparam_force_new_ani;
-+
- void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning);
- void ath9k_hw_proc_mib_event(struct ath_hw *ah);
- void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan);
diff --git a/package/mac80211/patches/575-ath9k_ani_cleanup.patch b/package/mac80211/patches/575-ath9k_ani_cleanup.patch
deleted file mode 100644
index 1cd85b3d3f..0000000000
--- a/package/mac80211/patches/575-ath9k_ani_cleanup.patch
+++ /dev/null
@@ -1,320 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -117,8 +117,6 @@ static void ath9k_hw_update_mibstats(str
- static void ath9k_ani_restart(struct ath_hw *ah)
- {
- struct ar5416AniState *aniState;
-- struct ath_common *common = ath9k_hw_common(ah);
-- u32 ofdm_base = 0, cck_base = 0;
-
- if (!DO_ANI(ah))
- return;
-@@ -126,13 +124,10 @@ static void ath9k_ani_restart(struct ath
- aniState = &ah->curchan->ani;
- aniState->listenTime = 0;
-
-- ath_dbg(common, ANI, "Writing ofdmbase=%u cckbase=%u\n",
-- ofdm_base, cck_base);
--
- ENABLE_REGWRITE_BUFFER(ah);
-
-- REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base);
-- REG_WRITE(ah, AR_PHY_ERR_2, cck_base);
-+ REG_WRITE(ah, AR_PHY_ERR_1, 0);
-+ REG_WRITE(ah, AR_PHY_ERR_2, 0);
- REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
- REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
-
-@@ -375,9 +370,6 @@ static bool ath9k_hw_ani_read_counters(s
- {
- struct ath_common *common = ath9k_hw_common(ah);
- struct ar5416AniState *aniState = &ah->curchan->ani;
-- u32 ofdm_base = 0;
-- u32 cck_base = 0;
-- u32 ofdmPhyErrCnt, cckPhyErrCnt;
- u32 phyCnt1, phyCnt2;
- int32_t listenTime;
-
-@@ -397,15 +389,12 @@ static bool ath9k_hw_ani_read_counters(s
- phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
- phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
-
-- ofdmPhyErrCnt = phyCnt1 - ofdm_base;
-- ah->stats.ast_ani_ofdmerrs +=
-- ofdmPhyErrCnt - aniState->ofdmPhyErrCount;
-- aniState->ofdmPhyErrCount = ofdmPhyErrCnt;
--
-- cckPhyErrCnt = phyCnt2 - cck_base;
-- ah->stats.ast_ani_cckerrs +=
-- cckPhyErrCnt - aniState->cckPhyErrCount;
-- aniState->cckPhyErrCount = cckPhyErrCnt;
-+ ah->stats.ast_ani_ofdmerrs += phyCnt1 - aniState->ofdmPhyErrCount;
-+ aniState->ofdmPhyErrCount = phyCnt1;
-+
-+ ah->stats.ast_ani_cckerrs += phyCnt2 - aniState->cckPhyErrCount;
-+ aniState->cckPhyErrCount = phyCnt2;
-+
- return true;
- }
-
-@@ -565,20 +554,19 @@ void ath9k_hw_ani_init(struct ath_hw *ah
-
- ath_dbg(common, ANI, "Initialize ANI\n");
-
-- ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_NEW;
-- ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_NEW;
-+ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
-+ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
-
-- ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_NEW;
-- ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_NEW;
-+ ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH;
-+ ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW;
-
- for (i = 0; i < ARRAY_SIZE(ah->channels); i++) {
- struct ath9k_channel *chan = &ah->channels[i];
- struct ar5416AniState *ani = &chan->ani;
-
-- ani->spurImmunityLevel =
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
-+ ani->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
-
-- ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-+ ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
-
- if (AR_SREV_9300_20_OR_LATER(ah))
- ani->mrcCCKOff =
-@@ -600,8 +588,8 @@ 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.
- */
-- ah->aniperiod = ATH9K_ANI_PERIOD_NEW;
-- ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_NEW;
-+ ah->aniperiod = ATH9K_ANI_PERIOD;
-+ ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL;
-
- if (ah->config.enable_ani)
- ah->proc_phyerr |= HAL_PROCESS_ANI;
---- a/drivers/net/wireless/ath/ath9k/ani.h
-+++ b/drivers/net/wireless/ath/ath9k/ani.h
-@@ -24,42 +24,34 @@
- #define BEACON_RSSI(ahp) (ahp->stats.avgbrssi)
-
- /* units are errors per second */
--#define ATH9K_ANI_OFDM_TRIG_HIGH_OLD 500
--#define ATH9K_ANI_OFDM_TRIG_HIGH_NEW 3500
-+#define ATH9K_ANI_OFDM_TRIG_HIGH 3500
- #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000
-
- /* units are errors per second */
--#define ATH9K_ANI_OFDM_TRIG_LOW_OLD 200
--#define ATH9K_ANI_OFDM_TRIG_LOW_NEW 400
-+#define ATH9K_ANI_OFDM_TRIG_LOW 400
- #define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900
-
- /* units are errors per second */
--#define ATH9K_ANI_CCK_TRIG_HIGH_OLD 200
--#define ATH9K_ANI_CCK_TRIG_HIGH_NEW 600
-+#define ATH9K_ANI_CCK_TRIG_HIGH 600
-
- /* units are errors per second */
--#define ATH9K_ANI_CCK_TRIG_LOW_OLD 100
--#define ATH9K_ANI_CCK_TRIG_LOW_NEW 300
-+#define ATH9K_ANI_CCK_TRIG_LOW 300
-
- #define ATH9K_ANI_NOISE_IMMUNE_LVL 4
- #define ATH9K_ANI_USE_OFDM_WEAK_SIG true
- #define ATH9K_ANI_CCK_WEAK_SIG_THR false
-
--#define ATH9K_ANI_SPUR_IMMUNE_LVL_OLD 7
--#define ATH9K_ANI_SPUR_IMMUNE_LVL_NEW 3
-+#define ATH9K_ANI_SPUR_IMMUNE_LVL 3
-
--#define ATH9K_ANI_FIRSTEP_LVL_OLD 0
--#define ATH9K_ANI_FIRSTEP_LVL_NEW 2
-+#define ATH9K_ANI_FIRSTEP_LVL 2
-
- #define ATH9K_ANI_RSSI_THR_HIGH 40
- #define ATH9K_ANI_RSSI_THR_LOW 7
-
--#define ATH9K_ANI_PERIOD_OLD 100
--#define ATH9K_ANI_PERIOD_NEW 300
-+#define ATH9K_ANI_PERIOD 300
-
- /* in ms */
--#define ATH9K_ANI_POLLINTERVAL_OLD 100
--#define ATH9K_ANI_POLLINTERVAL_NEW 1000
-+#define ATH9K_ANI_POLLINTERVAL 1000
-
- #define HAL_NOISE_IMMUNE_MAX 4
- #define HAL_SPUR_IMMUNE_MAX 7
---- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -1101,7 +1101,7 @@ static bool ar5008_hw_ani_control_new(st
- * from INI file & cap value
- */
- value = firstep_table[level] -
-- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
- aniState->iniDef.firstep;
- if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
- value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -1116,7 +1116,7 @@ static bool ar5008_hw_ani_control_new(st
- * from INI file & cap value
- */
- value2 = firstep_table[level] -
-- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
- aniState->iniDef.firstepLow;
- if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
- value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -1132,7 +1132,7 @@ static bool ar5008_hw_ani_control_new(st
- chan->channel,
- aniState->firstepLevel,
- level,
-- ATH9K_ANI_FIRSTEP_LVL_NEW,
-+ ATH9K_ANI_FIRSTEP_LVL,
- value,
- aniState->iniDef.firstep);
- ath_dbg(common, ANI,
-@@ -1140,7 +1140,7 @@ static bool ar5008_hw_ani_control_new(st
- chan->channel,
- aniState->firstepLevel,
- level,
-- ATH9K_ANI_FIRSTEP_LVL_NEW,
-+ ATH9K_ANI_FIRSTEP_LVL,
- value2,
- aniState->iniDef.firstepLow);
- if (level > aniState->firstepLevel)
-@@ -1165,7 +1165,7 @@ static bool ar5008_hw_ani_control_new(st
- * from INI file & cap value
- */
- value = cycpwrThr1_table[level] -
-- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
- aniState->iniDef.cycpwrThr1;
- if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
- value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -1181,7 +1181,7 @@ static bool ar5008_hw_ani_control_new(st
- * from INI file & cap value
- */
- value2 = cycpwrThr1_table[level] -
-- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
- aniState->iniDef.cycpwrThr1Ext;
- if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
- value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -1196,7 +1196,7 @@ static bool ar5008_hw_ani_control_new(st
- chan->channel,
- aniState->spurImmunityLevel,
- level,
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+ ATH9K_ANI_SPUR_IMMUNE_LVL,
- value,
- aniState->iniDef.cycpwrThr1);
- ath_dbg(common, ANI,
-@@ -1204,7 +1204,7 @@ static bool ar5008_hw_ani_control_new(st
- chan->channel,
- aniState->spurImmunityLevel,
- level,
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+ ATH9K_ANI_SPUR_IMMUNE_LVL,
- value2,
- aniState->iniDef.cycpwrThr1Ext);
- if (level > aniState->spurImmunityLevel)
-@@ -1319,8 +1319,8 @@ static void ar5008_hw_ani_cache_ini_regs
- AR_PHY_EXT_TIMING5_CYCPWR_THR1);
-
- /* these levels just got reset to defaults by the INI */
-- aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
-- aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-+ aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
-+ aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
- aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
- aniState->mrcCCKOff = true; /* not available on pre AR9003 */
- }
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -851,7 +851,7 @@ static bool ar9003_hw_ani_control(struct
- * from INI file & cap value
- */
- value = firstep_table[level] -
-- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
- aniState->iniDef.firstep;
- if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
- value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -866,7 +866,7 @@ static bool ar9003_hw_ani_control(struct
- * from INI file & cap value
- */
- value2 = firstep_table[level] -
-- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
- aniState->iniDef.firstepLow;
- if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
- value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -882,7 +882,7 @@ static bool ar9003_hw_ani_control(struct
- chan->channel,
- aniState->firstepLevel,
- level,
-- ATH9K_ANI_FIRSTEP_LVL_NEW,
-+ ATH9K_ANI_FIRSTEP_LVL,
- value,
- aniState->iniDef.firstep);
- ath_dbg(common, ANI,
-@@ -890,7 +890,7 @@ static bool ar9003_hw_ani_control(struct
- chan->channel,
- aniState->firstepLevel,
- level,
-- ATH9K_ANI_FIRSTEP_LVL_NEW,
-+ ATH9K_ANI_FIRSTEP_LVL,
- value2,
- aniState->iniDef.firstepLow);
- if (level > aniState->firstepLevel)
-@@ -915,7 +915,7 @@ static bool ar9003_hw_ani_control(struct
- * from INI file & cap value
- */
- value = cycpwrThr1_table[level] -
-- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
- aniState->iniDef.cycpwrThr1;
- if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
- value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -931,7 +931,7 @@ static bool ar9003_hw_ani_control(struct
- * from INI file & cap value
- */
- value2 = cycpwrThr1_table[level] -
-- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
- aniState->iniDef.cycpwrThr1Ext;
- if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
- value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -946,7 +946,7 @@ static bool ar9003_hw_ani_control(struct
- chan->channel,
- aniState->spurImmunityLevel,
- level,
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+ ATH9K_ANI_SPUR_IMMUNE_LVL,
- value,
- aniState->iniDef.cycpwrThr1);
- ath_dbg(common, ANI,
-@@ -954,7 +954,7 @@ static bool ar9003_hw_ani_control(struct
- chan->channel,
- aniState->spurImmunityLevel,
- level,
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+ ATH9K_ANI_SPUR_IMMUNE_LVL,
- value2,
- aniState->iniDef.cycpwrThr1Ext);
- if (level > aniState->spurImmunityLevel)
-@@ -1107,8 +1107,8 @@ static void ar9003_hw_ani_cache_ini_regs
- AR_PHY_EXT_CYCPWR_THR1);
-
- /* these levels just got reset to defaults by the INI */
-- aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
-- aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-+ aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
-+ aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
- aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
- aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK;
- }
diff --git a/package/mac80211/patches/576-ath9k_ani_remove_mib_int.patch b/package/mac80211/patches/576-ath9k_ani_remove_mib_int.patch
deleted file mode 100644
index d071e0ca57..0000000000
--- a/package/mac80211/patches/576-ath9k_ani_remove_mib_int.patch
+++ /dev/null
@@ -1,114 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -490,46 +490,6 @@ void ath9k_hw_disable_mib_counters(struc
- }
- EXPORT_SYMBOL(ath9k_hw_disable_mib_counters);
-
--/*
-- * Process a MIB interrupt. We may potentially be invoked because
-- * any of the MIB counters overflow/trigger so don't assume we're
-- * here because a PHY error counter triggered.
-- */
--void ath9k_hw_proc_mib_event(struct ath_hw *ah)
--{
-- u32 phyCnt1, phyCnt2;
--
-- /* Reset these counters regardless */
-- REG_WRITE(ah, AR_FILT_OFDM, 0);
-- REG_WRITE(ah, AR_FILT_CCK, 0);
-- if (!(REG_READ(ah, AR_SLP_MIB_CTRL) & AR_SLP_MIB_PENDING))
-- REG_WRITE(ah, AR_SLP_MIB_CTRL, AR_SLP_MIB_CLEAR);
--
-- /* Clear the mib counters and save them in the stats */
-- ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
--
-- if (!DO_ANI(ah)) {
-- /*
-- * We must always clear the interrupt cause by
-- * resetting the phy error regs.
-- */
-- REG_WRITE(ah, AR_PHY_ERR_1, 0);
-- REG_WRITE(ah, AR_PHY_ERR_2, 0);
-- return;
-- }
--
-- /* NB: these are not reset-on-read */
-- phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
-- phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
-- if (((phyCnt1 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK) ||
-- ((phyCnt2 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK)) {
--
-- /* NB: always restart to insure the h/w counters are reset */
-- ath9k_ani_restart(ah);
-- }
--}
--EXPORT_SYMBOL(ath9k_hw_proc_mib_event);
--
- void ath9k_hw_ani_setup(struct ath_hw *ah)
- {
- int i;
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -1023,7 +1023,6 @@ void ar9003_hw_attach_ops(struct ath_hw
- void ar9002_hw_load_ani_reg(struct ath_hw *ah, struct ath9k_channel *chan);
-
- void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning);
--void ath9k_hw_proc_mib_event(struct ath_hw *ah);
- void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan);
-
- #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -827,24 +827,6 @@ irqreturn_t ath_isr(int irq, void *dev)
- ath9k_hw_set_interrupts(ah);
- }
-
-- if (status & ATH9K_INT_MIB) {
-- /*
-- * Disable interrupts until we service the MIB
-- * interrupt; otherwise it will continue to
-- * fire.
-- */
-- ath9k_hw_disable_interrupts(ah);
-- /*
-- * Let the hal handle the event. We assume
-- * it will clear whatever condition caused
-- * the interrupt.
-- */
-- spin_lock(&common->cc_lock);
-- ath9k_hw_proc_mib_event(ah);
-- spin_unlock(&common->cc_lock);
-- ath9k_hw_enable_interrupts(ah);
-- }
--
- if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
- if (status & ATH9K_INT_TIM_TIMER) {
- if (ATH_DBG_WARN_ON_ONCE(sc->ps_idle))
-@@ -1347,14 +1329,10 @@ static void ath9k_calculate_summary_stat
- /*
- * Enable MIB interrupts when there are hardware phy counters.
- */
-- if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0) {
-- if (ah->config.enable_ani)
-- ah->imask |= ATH9K_INT_MIB;
-+ if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0)
- ah->imask |= ATH9K_INT_TSFOOR;
-- } else {
-- ah->imask &= ~ATH9K_INT_MIB;
-+ else
- ah->imask &= ~ATH9K_INT_TSFOOR;
-- }
-
- ath9k_hw_set_interrupts(ah);
-
---- a/drivers/net/wireless/ath/ath9k/debug.c
-+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -348,8 +348,6 @@ void ath_debug_stat_interrupt(struct ath
- sc->debug.stats.istats.txok++;
- if (status & ATH9K_INT_TXURN)
- sc->debug.stats.istats.txurn++;
-- if (status & ATH9K_INT_MIB)
-- sc->debug.stats.istats.mib++;
- if (status & ATH9K_INT_RXPHY)
- sc->debug.stats.istats.rxphyerr++;
- if (status & ATH9K_INT_RXKCM)
diff --git a/package/mac80211/patches/577-ath9k_fix_noise_immunity.patch b/package/mac80211/patches/577-ath9k_fix_noise_immunity.patch
deleted file mode 100644
index d6ef678261..0000000000
--- a/package/mac80211/patches/577-ath9k_fix_noise_immunity.patch
+++ /dev/null
@@ -1,69 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -154,9 +154,7 @@ static void ath9k_hw_set_ofdm_nil(struct
- aniState->rssiThrLow, aniState->rssiThrHigh);
-
- if (aniState->update_ani)
-- aniState->ofdmNoiseImmunityLevel =
-- (immunityLevel > ATH9K_ANI_OFDM_DEF_LEVEL) ?
-- immunityLevel : ATH9K_ANI_OFDM_DEF_LEVEL;
-+ aniState->ofdmNoiseImmunityLevel = immunityLevel;
-
- entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
- entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel];
-@@ -217,9 +215,7 @@ static void ath9k_hw_set_cck_nil(struct
- immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
-
- if (aniState->update_ani)
-- aniState->cckNoiseImmunityLevel =
-- (immunityLevel > ATH9K_ANI_CCK_DEF_LEVEL) ?
-- immunityLevel : ATH9K_ANI_CCK_DEF_LEVEL;
-+ aniState->cckNoiseImmunityLevel = immunityLevel;
-
- entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
- entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel];
-@@ -285,6 +281,7 @@ void ath9k_ani_reset(struct ath_hw *ah,
- struct ar5416AniState *aniState = &ah->curchan->ani;
- struct ath9k_channel *chan = ah->curchan;
- struct ath_common *common = ath9k_hw_common(ah);
-+ int ofdm_nil, cck_nil;
-
- if (!DO_ANI(ah))
- return;
-@@ -306,6 +303,11 @@ void ath9k_ani_reset(struct ath_hw *ah,
- /* always allow mode (on/off) to be controlled */
- ah->ani_function |= ATH9K_ANI_MODE;
-
-+ ofdm_nil = max_t(int, ATH9K_ANI_OFDM_DEF_LEVEL,
-+ aniState->ofdmNoiseImmunityLevel);
-+ cck_nil = max_t(int, ATH9K_ANI_CCK_DEF_LEVEL,
-+ aniState->cckNoiseImmunityLevel);
-+
- if (is_scanning ||
- (ah->opmode != NL80211_IFTYPE_STATION &&
- ah->opmode != NL80211_IFTYPE_ADHOC)) {
-@@ -329,8 +331,8 @@ void ath9k_ani_reset(struct ath_hw *ah,
- aniState->cckNoiseImmunityLevel);
-
- aniState->update_ani = false;
-- ath9k_hw_set_ofdm_nil(ah, ATH9K_ANI_OFDM_DEF_LEVEL);
-- ath9k_hw_set_cck_nil(ah, ATH9K_ANI_CCK_DEF_LEVEL);
-+ ofdm_nil = ATH9K_ANI_OFDM_DEF_LEVEL;
-+ cck_nil = ATH9K_ANI_CCK_DEF_LEVEL;
- }
- } else {
- /*
-@@ -346,11 +348,9 @@ void ath9k_ani_reset(struct ath_hw *ah,
- aniState->cckNoiseImmunityLevel);
-
- aniState->update_ani = true;
-- ath9k_hw_set_ofdm_nil(ah,
-- aniState->ofdmNoiseImmunityLevel);
-- ath9k_hw_set_cck_nil(ah,
-- aniState->cckNoiseImmunityLevel);
- }
-+ ath9k_hw_set_ofdm_nil(ah, ofdm_nil);
-+ ath9k_hw_set_cck_nil(ah, cck_nil);
-
- /*
- * enable phy counters if hw supports or if not, enable phy
diff --git a/package/mac80211/patches/578-ath9k_cleanup_ani_ofdm_trig.patch b/package/mac80211/patches/578-ath9k_cleanup_ani_ofdm_trig.patch
deleted file mode 100644
index 9b4b9910fa..0000000000
--- a/package/mac80211/patches/578-ath9k_cleanup_ani_ofdm_trig.patch
+++ /dev/null
@@ -1,41 +0,0 @@
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -179,6 +179,14 @@ static void ath9k_hw_set_ofdm_nil(struct
- ath9k_hw_ani_control(ah,
- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
- entry_ofdm->ofdm_weak_signal_on);
-+
-+ if (aniState->ofdmNoiseImmunityLevel >= ATH9K_ANI_OFDM_DEF_LEVEL) {
-+ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
-+ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI;
-+ } else {
-+ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI;
-+ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
-+ }
- }
-
- static void ath9k_hw_ani_ofdm_err_trigger(struct ath_hw *ah)
-@@ -428,21 +436,10 @@ void ath9k_hw_ani_monitor(struct ath_hw
-
- if (aniState->listenTime > ah->aniperiod) {
- if (cckPhyErrRate < ah->config.cck_trig_low &&
-- ((ofdmPhyErrRate < ah->config.ofdm_trig_low &&
-- aniState->ofdmNoiseImmunityLevel <
-- ATH9K_ANI_OFDM_DEF_LEVEL) ||
-- (ofdmPhyErrRate < ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI &&
-- aniState->ofdmNoiseImmunityLevel >=
-- ATH9K_ANI_OFDM_DEF_LEVEL))) {
-+ ofdmPhyErrRate < ah->config.ofdm_trig_low) {
- ath9k_hw_ani_lower_immunity(ah);
- aniState->ofdmsTurn = !aniState->ofdmsTurn;
-- } else if ((ofdmPhyErrRate > ah->config.ofdm_trig_high &&
-- aniState->ofdmNoiseImmunityLevel >=
-- ATH9K_ANI_OFDM_DEF_LEVEL) ||
-- (ofdmPhyErrRate >
-- ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI &&
-- aniState->ofdmNoiseImmunityLevel <
-- ATH9K_ANI_OFDM_DEF_LEVEL)) {
-+ } else if (ofdmPhyErrRate > ah->config.ofdm_trig_high) {
- ath9k_hw_ani_ofdm_err_trigger(ah);
- aniState->ofdmsTurn = false;
- } else if (cckPhyErrRate > ah->config.cck_trig_high) {
diff --git a/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch b/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch
index eca2edfd92..abfd41b640 100644
--- a/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch
+++ b/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch
@@ -101,7 +101,7 @@
+}
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
-@@ -560,6 +560,7 @@ struct rt2x00lib_ops {
+@@ -559,6 +559,7 @@ struct rt2x00lib_ops {
const u8 *data, const size_t len);
int (*load_firmware) (struct rt2x00_dev *rt2x00dev,
const u8 *data, const size_t len);
@@ -109,7 +109,7 @@
/*
* Device initialization/deinitialization handlers.
-@@ -721,6 +722,7 @@ enum rt2x00_capability_flags {
+@@ -720,6 +721,7 @@ enum rt2x00_capability_flags {
REQUIRE_SW_SEQNO,
REQUIRE_HT_TX_DESC,
REQUIRE_PS_AUTOWAKE,
@@ -117,7 +117,7 @@
/*
* Capabilities
-@@ -976,6 +978,11 @@ struct rt2x00_dev {
+@@ -975,6 +977,11 @@ struct rt2x00_dev {
const struct firmware *fw;
/*
@@ -239,9 +239,9 @@
.get_entry_state = rt2800pci_get_entry_state,
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
-@@ -1161,6 +1161,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
- BIT(NL80211_IFTYPE_MESH_POINT) |
- BIT(NL80211_IFTYPE_WDS);
+@@ -1163,6 +1163,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
+
+ rt2x00dev->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
+ retval = rt2x00lib_load_eeprom_file(rt2x00dev);
+ if (retval)
@@ -250,7 +250,7 @@
/*
* Initialize work.
*/
-@@ -1285,6 +1289,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
+@@ -1287,6 +1291,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
*/
if (rt2x00dev->drv_data)
kfree(rt2x00dev->drv_data);
diff --git a/package/mac80211/patches/604-rt2x00-add-CONFIG_RT2X00_LIB_EEPROM-option.patch b/package/mac80211/patches/604-rt2x00-add-CONFIG_RT2X00_LIB_EEPROM-option.patch
index d76651038d..d310f33bc8 100644
--- a/package/mac80211/patches/604-rt2x00-add-CONFIG_RT2X00_LIB_EEPROM-option.patch
+++ b/package/mac80211/patches/604-rt2x00-add-CONFIG_RT2X00_LIB_EEPROM-option.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -614,6 +614,7 @@ export CONFIG_RT2X00=y
+@@ -619,6 +619,7 @@ export CONFIG_RT2X00=y
export CONFIG_RT2X00_LIB=m
export CONFIG_RT2800_LIB=m
export CONFIG_RT2X00_LIB_FIRMWARE=y
diff --git a/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch b/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch
index 57abb07ab6..3fc1b3f097 100644
--- a/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch
+++ b/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch
@@ -37,7 +37,7 @@
num_rates += 4;
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
-@@ -425,6 +425,7 @@ struct hw_mode_spec {
+@@ -424,6 +424,7 @@ struct hw_mode_spec {
unsigned int supported_bands;
#define SUPPORT_BAND_2GHZ 0x00000001
#define SUPPORT_BAND_5GHZ 0x00000002
diff --git a/package/mac80211/patches/608-add_platform_data_mac_addr.patch b/package/mac80211/patches/608-add_platform_data_mac_addr.patch
index 5008180f7d..17ca7381cc 100644
--- a/package/mac80211/patches/608-add_platform_data_mac_addr.patch
+++ b/package/mac80211/patches/608-add_platform_data_mac_addr.patch
@@ -31,7 +31,7 @@
{
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
-@@ -1280,6 +1280,7 @@ static inline void rt2x00debug_dump_fram
+@@ -1279,6 +1279,7 @@ static inline void rt2x00debug_dump_fram
*/
u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev,
struct ieee80211_vif *vif);
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 f746cc9e1a..01f270ff83 100644
--- a/package/mac80211/patches/800-b43-gpio-mask-module-option.patch
+++ b/package/mac80211/patches/800-b43-gpio-mask-module-option.patch
@@ -22,7 +22,7 @@
static int modparam_bad_frames_preempt;
module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444);
MODULE_PARM_DESC(bad_frames_preempt,
-@@ -2689,10 +2694,10 @@ static int b43_gpio_init(struct b43_wlde
+@@ -2690,10 +2695,10 @@ static int b43_gpio_init(struct b43_wlde
u32 mask, set;
b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_GPOUTSMSK, 0);
diff --git a/package/mac80211/patches/820-b43-add-antenna-control.patch b/package/mac80211/patches/820-b43-add-antenna-control.patch
index be6b68391f..1cd2171db0 100644
--- a/package/mac80211/patches/820-b43-add-antenna-control.patch
+++ b/package/mac80211/patches/820-b43-add-antenna-control.patch
@@ -9,7 +9,7 @@
antenna = b43_antenna_to_phyctl(antenna);
ctl = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_BEACPHYCTL);
/* We can't send beacons with short preamble. Would get PHY errors. */
-@@ -3045,8 +3045,8 @@ static int b43_chip_init(struct b43_wlde
+@@ -3046,8 +3046,8 @@ static int b43_chip_init(struct b43_wlde
/* Select the antennae */
if (phy->ops->set_rx_antenna)
@@ -20,7 +20,7 @@
if (phy->type == B43_PHYTYPE_B) {
value16 = b43_read16(dev, 0x005E);
-@@ -3789,7 +3789,6 @@ static int b43_op_config(struct ieee8021
+@@ -3790,7 +3790,6 @@ static int b43_op_config(struct ieee8021
struct b43_wldev *dev;
struct b43_phy *phy;
struct ieee80211_conf *conf = &hw->conf;
@@ -28,7 +28,7 @@
int err = 0;
bool reload_bss = false;
-@@ -3843,11 +3842,9 @@ static int b43_op_config(struct ieee8021
+@@ -3844,11 +3843,9 @@ static int b43_op_config(struct ieee8021
}
/* Antennas for RX and management frame TX. */
@@ -42,7 +42,7 @@
if (wl->radio_enabled != phy->radio_on) {
if (wl->radio_enabled) {
-@@ -4940,6 +4937,47 @@ static int b43_op_get_survey(struct ieee
+@@ -4941,6 +4938,47 @@ static int b43_op_get_survey(struct ieee
return 0;
}
@@ -90,7 +90,7 @@
static const struct ieee80211_ops b43_hw_ops = {
.tx = b43_op_tx,
.conf_tx = b43_op_conf_tx,
-@@ -4961,6 +4999,8 @@ static const struct ieee80211_ops b43_hw
+@@ -4962,6 +5000,8 @@ static const struct ieee80211_ops b43_hw
.sw_scan_complete = b43_op_sw_scan_complete_notifier,
.get_survey = b43_op_get_survey,
.rfkill_poll = b43_rfkill_poll,
@@ -99,7 +99,7 @@
};
/* Hard-reset the chip. Do not call this directly.
-@@ -5207,6 +5247,8 @@ static int b43_one_core_attach(struct b4
+@@ -5208,6 +5248,8 @@ static int b43_one_core_attach(struct b4
if (!wldev)
goto out;
@@ -108,7 +108,7 @@
wldev->use_pio = b43_modparam_pio;
wldev->dev = dev;
wldev->wl = wl;
-@@ -5297,6 +5339,9 @@ static struct b43_wl *b43_wireless_init(
+@@ -5298,6 +5340,9 @@ static struct b43_wl *b43_wireless_init(
hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
@@ -117,7 +117,7 @@
+
hw->queues = modparam_qos ? B43_QOS_QUEUE_NUM : 1;
wl->mac80211_initially_registered_queues = hw->queues;
- hw->max_rates = 2;
+ wl->hw_registred = false;
--- a/drivers/net/wireless/b43/b43.h
+++ b/drivers/net/wireless/b43/b43.h
@@ -804,6 +804,8 @@ struct b43_wldev {
diff --git a/package/mac80211/patches/830-b43-workaround-pcie-bcm4716.patch b/package/mac80211/patches/830-b43-workaround-pcie-bcm4716.patch
index 287be25422..d3131d4076 100644
--- a/package/mac80211/patches/830-b43-workaround-pcie-bcm4716.patch
+++ b/package/mac80211/patches/830-b43-workaround-pcie-bcm4716.patch
@@ -19,7 +19,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
--- a/drivers/net/wireless/b43/b43.h
+++ b/drivers/net/wireless/b43/b43.h
-@@ -1047,6 +1047,32 @@ static inline bool b43_using_pio_transfe
+@@ -1051,6 +1051,32 @@ static inline bool b43_using_pio_transfe
return dev->__using_pio_transfers;
}
diff --git a/package/mac80211/patches/840-brcmsmac-remove-PCIE.patch b/package/mac80211/patches/840-brcmsmac-remove-PCIE.patch
index de8b46c942..ccb6fd09b7 100644
--- a/package/mac80211/patches/840-brcmsmac-remove-PCIE.patch
+++ b/package/mac80211/patches/840-brcmsmac-remove-PCIE.patch
@@ -11,7 +11,7 @@
#ifdef DEBUG
#define SI_MSG(fmt, ...) pr_debug(fmt, ##__VA_ARGS__)
-@@ -777,7 +775,7 @@ void ai_pci_up(struct si_pub *sih)
+@@ -776,7 +774,7 @@ void ai_pci_up(struct si_pub *sih)
bcma_core_set_clockmode(cc, BCMA_CLKMODE_FAST);
}
@@ -20,7 +20,7 @@
bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, true);
}
-@@ -795,7 +793,7 @@ void ai_pci_down(struct si_pub *sih)
+@@ -794,7 +792,7 @@ void ai_pci_down(struct si_pub *sih)
bcma_core_set_clockmode(cc, BCMA_CLKMODE_DYNAMIC);
}
diff --git a/package/mac80211/patches/841-brcmsmac-remove-PCI_FORCEHT.patch b/package/mac80211/patches/841-brcmsmac-remove-PCI_FORCEHT.patch
index 04d74d73f0..0777a7822a 100644
--- a/package/mac80211/patches/841-brcmsmac-remove-PCI_FORCEHT.patch
+++ b/package/mac80211/patches/841-brcmsmac-remove-PCI_FORCEHT.patch
@@ -9,7 +9,7 @@
#ifdef DEBUG
#define SI_MSG(fmt, ...) pr_debug(fmt, ##__VA_ARGS__)
#else
-@@ -755,9 +753,6 @@ bool ai_clkctl_cc(struct si_pub *sih, en
+@@ -754,9 +752,6 @@ bool ai_clkctl_cc(struct si_pub *sih, en
sii = (struct si_info *)sih;
@@ -19,7 +19,7 @@
cc = ai_findcore(&sii->pub, BCMA_CORE_CHIPCOMMON, 0);
bcma_core_set_clockmode(cc, mode);
return mode == BCMA_CLKMODE_FAST;
-@@ -766,15 +761,9 @@ bool ai_clkctl_cc(struct si_pub *sih, en
+@@ -765,15 +760,9 @@ bool ai_clkctl_cc(struct si_pub *sih, en
void ai_pci_up(struct si_pub *sih)
{
struct si_info *sii;
@@ -35,7 +35,7 @@
if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI)
bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, true);
}
-@@ -783,16 +772,9 @@ void ai_pci_up(struct si_pub *sih)
+@@ -782,16 +771,9 @@ void ai_pci_up(struct si_pub *sih)
void ai_pci_down(struct si_pub *sih)
{
struct si_info *sii;
diff --git a/package/mac80211/patches/842-brcmsmac-remove-ai_get_buscoretype-and-ai_get_buscor.patch b/package/mac80211/patches/842-brcmsmac-remove-ai_get_buscoretype-and-ai_get_buscor.patch
index 80c6fc966b..6d98defdde 100644
--- a/package/mac80211/patches/842-brcmsmac-remove-ai_get_buscoretype-and-ai_get_buscor.patch
+++ b/package/mac80211/patches/842-brcmsmac-remove-ai_get_buscoretype-and-ai_get_buscor.patch
@@ -10,7 +10,7 @@
return true;
}
-@@ -807,15 +804,3 @@ bool ai_deviceremoved(struct si_pub *sih
+@@ -806,15 +803,3 @@ bool ai_deviceremoved(struct si_pub *sih
return false;
}
diff --git a/package/mac80211/patches/843-brcmsmac-use-container_of-instead-of-cast.patch b/package/mac80211/patches/843-brcmsmac-use-container_of-instead-of-cast.patch
index ba12eda125..a90f7043b8 100644
--- a/package/mac80211/patches/843-brcmsmac-use-container_of-instead-of-cast.patch
+++ b/package/mac80211/patches/843-brcmsmac-use-container_of-instead-of-cast.patch
@@ -18,7 +18,7 @@
found = 0;
-@@ -622,7 +622,7 @@ uint ai_cc_reg(struct si_pub *sih, uint
+@@ -622,7 +622,7 @@ uint ai_cc_reg(struct si_pub *sih, uint
u32 w;
struct si_info *sii;
@@ -27,7 +27,7 @@
cc = sii->icbus->drv_cc.core;
/* mask and set */
-@@ -716,7 +716,7 @@ u16 ai_clkctl_fast_pwrup_delay(struct si
+@@ -715,7 +715,7 @@ u16 ai_clkctl_fast_pwrup_delay(struct si
uint slowminfreq;
u16 fpdelay;
@@ -36,7 +36,7 @@
if (ai_get_cccaps(sih) & CC_CAP_PMU) {
fpdelay = si_pmu_fast_pwrup_delay(sih);
return fpdelay;
-@@ -748,7 +748,7 @@ bool ai_clkctl_cc(struct si_pub *sih, en
+@@ -747,7 +747,7 @@ bool ai_clkctl_cc(struct si_pub *sih, en
struct si_info *sii;
struct bcma_device *cc;
@@ -45,7 +45,7 @@
cc = ai_findcore(&sii->pub, BCMA_CORE_CHIPCOMMON, 0);
bcma_core_set_clockmode(cc, mode);
-@@ -759,7 +759,7 @@ void ai_pci_up(struct si_pub *sih)
+@@ -758,7 +758,7 @@ void ai_pci_up(struct si_pub *sih)
{
struct si_info *sii;
@@ -54,7 +54,7 @@
if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI)
bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, true);
-@@ -770,7 +770,7 @@ void ai_pci_down(struct si_pub *sih)
+@@ -769,7 +769,7 @@ void ai_pci_down(struct si_pub *sih)
{
struct si_info *sii;
@@ -63,7 +63,7 @@
if (sii->icbus->hosttype == BCMA_HOSTTYPE_PCI)
bcma_core_pci_extend_L1timer(&sii->icbus->drv_pci, false);
-@@ -793,7 +793,7 @@ bool ai_deviceremoved(struct si_pub *sih
+@@ -792,7 +792,7 @@ bool ai_deviceremoved(struct si_pub *sih
u32 w;
struct si_info *sii;
diff --git a/package/mac80211/patches/844-brcmsmac-remove-ai_findcore.patch b/package/mac80211/patches/844-brcmsmac-remove-ai_findcore.patch
index 3fc914f90e..0e8750de47 100644
--- a/package/mac80211/patches/844-brcmsmac-remove-ai_findcore.patch
+++ b/package/mac80211/patches/844-brcmsmac-remove-ai_findcore.patch
@@ -28,7 +28,7 @@
/*
* read/modify chipcommon core register.
*/
-@@ -689,12 +668,13 @@ ai_clkctl_setdelay(struct si_pub *sih, s
+@@ -688,12 +667,13 @@ ai_clkctl_setdelay(struct si_pub *sih, s
/* initialize power control delay registers */
void ai_clkctl_init(struct si_pub *sih)
{
@@ -43,7 +43,7 @@
if (cc == NULL)
return;
-@@ -726,7 +706,7 @@ u16 ai_clkctl_fast_pwrup_delay(struct si
+@@ -725,7 +705,7 @@ u16 ai_clkctl_fast_pwrup_delay(struct si
return 0;
fpdelay = 0;
@@ -52,7 +52,7 @@
if (cc) {
slowminfreq = ai_slowclk_freq(sih, false, cc);
fpdelay = (((bcma_read32(cc, CHIPCREGOFFS(pll_on_delay)) + 2)
-@@ -750,7 +730,7 @@ bool ai_clkctl_cc(struct si_pub *sih, en
+@@ -749,7 +729,7 @@ bool ai_clkctl_cc(struct si_pub *sih, en
sii = container_of(sih, struct si_info, pub);
@@ -61,7 +61,7 @@
bcma_core_set_clockmode(cc, mode);
return mode == BCMA_CLKMODE_FAST;
}
-@@ -779,9 +759,10 @@ void ai_pci_down(struct si_pub *sih)
+@@ -778,9 +758,10 @@ void ai_pci_down(struct si_pub *sih)
/* Enable BT-COEX & Ex-PA for 4313 */
void ai_epa_4313war(struct si_pub *sih)
{
@@ -134,7 +134,7 @@
struct bcma_device *core;
u32 alp_khz;
-@@ -335,7 +339,7 @@ u32 si_pmu_measure_alpclk(struct si_pub
+@@ -335,7 +339,7 @@ u32 si_pmu_measure_alpclk(struct si_pub
return 0;
/* Remember original core before switch to chipc */
diff --git a/package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch b/package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch
index ecf41b5598..40ccde90b5 100644
--- a/package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch
+++ b/package/mac80211/patches/847-brcmsmac-add-suome-conditions-for-the-bcm4716-again.patch
@@ -32,7 +32,7 @@
} else if (NREV_IS(pi->pubpi.phy_rev, 5)) {
tx_pwrctrl_tbl = nphy_tpc_txgain_ipa_rev5;
} else {
-@@ -19256,8 +19259,14 @@ static void wlc_phy_spurwar_nphy(struct
+@@ -19256,8 +19259,14 @@ static void wlc_phy_spurwar_nphy(struct
case 38:
case 102:
case 118:
@@ -49,7 +49,7 @@
break;
case 134:
nphy_adj_tone_id_buf[0] = 32;
-@@ -20697,12 +20706,22 @@ wlc_phy_chanspec_radio2056_setup(struct
+@@ -20697,12 +20706,22 @@ wlc_phy_chanspec_radio2056_setup(struct
write_radio_reg(pi, RADIO_2056_SYN_PLL_LOOPFILTER2 |
RADIO_2056_SYN, 0x1f);
@@ -78,7 +78,7 @@
}
}
-@@ -20749,24 +20768,33 @@ wlc_phy_chanspec_radio2056_setup(struct
+@@ -20749,24 +20768,33 @@ wlc_phy_chanspec_radio2056_setup(struct
WRITE_RADIO_REG2(pi, RADIO_2056, TX, core,
PADG_IDAC, 0xcc);
diff --git a/package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch b/package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch
index 9cef6975a5..2d09dff1cf 100644
--- a/package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch
+++ b/package/mac80211/patches/849-brcmsmac-add-device-found-on-some-SoCs-like-the-bcm4.patch
@@ -10,7 +10,7 @@
BCMA_CORETABLE_END
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -751,7 +751,7 @@ static void brcms_c_ucode_bsinit(struct
+@@ -751,7 +751,7 @@ static void brcms_c_ucode_bsinit(struct
brcms_c_write_mhf(wlc_hw, wlc_hw->band->mhfs);
/* do band-specific ucode IHR, SHM, and SCR inits */
@@ -19,7 +19,7 @@
if (BRCMS_ISNPHY(wlc_hw->band))
brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16);
else
-@@ -2276,7 +2276,7 @@ static void brcms_ucode_download(struct
+@@ -2276,7 +2276,7 @@ static void brcms_ucode_download(struct
if (wlc_hw->ucode_loaded)
return;
diff --git a/package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch b/package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch
index 1b64f56ccc..dd50eb2941 100644
--- a/package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch
+++ b/package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch
@@ -10,7 +10,7 @@
MODULE_DEVICE_TABLE(bcma, brcms_coreid_table);
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -751,7 +751,7 @@ static void brcms_c_ucode_bsinit(struct
+@@ -751,7 +751,7 @@ static void brcms_c_ucode_bsinit(struct
brcms_c_write_mhf(wlc_hw, wlc_hw->band->mhfs);
/* do band-specific ucode IHR, SHM, and SCR inits */
@@ -19,7 +19,7 @@
if (BRCMS_ISNPHY(wlc_hw->band))
brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16);
else
-@@ -2276,7 +2276,7 @@ static void brcms_ucode_download(struct
+@@ -2276,7 +2276,7 @@ static void brcms_ucode_download(struct
if (wlc_hw->ucode_loaded)
return;