aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/patches
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-02-27 16:23:43 +0000
committerFelix Fietkau <nbd@openwrt.org>2012-02-27 16:23:43 +0000
commite3ec30cad1a857b0aa20122187eb0788c8cfe50c (patch)
tree16c52de3fb93e328610483a43b8aa40f5c916383 /package/mac80211/patches
parent8ad6213f599436363534327a005eaac024bc08db (diff)
downloadupstream-e3ec30cad1a857b0aa20122187eb0788c8cfe50c.tar.gz
upstream-e3ec30cad1a857b0aa20122187eb0788c8cfe50c.tar.bz2
upstream-e3ec30cad1a857b0aa20122187eb0788c8cfe50c.zip
mac80211: update to wireless-testing 2012-02-23
SVN-Revision: 30742
Diffstat (limited to 'package/mac80211/patches')
-rw-r--r--package/mac80211/patches/000-disable_ethernet.patch2
-rw-r--r--package/mac80211/patches/001-disable_b44.patch2
-rw-r--r--package/mac80211/patches/002-disable_rfkill.patch4
-rw-r--r--package/mac80211/patches/003-disable_bt.patch2
-rw-r--r--package/mac80211/patches/005-disable_ssb_build.patch8
-rw-r--r--package/mac80211/patches/006-disable_bcma_build.patch4
-rw-r--r--package/mac80211/patches/007-remove_misc_drivers.patch14
-rw-r--r--package/mac80211/patches/008-disable_mesh.patch2
-rw-r--r--package/mac80211/patches/009-remove_mac80211_module_dependence.patch29
-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/016-remove_pid_algo.patch2
-rw-r--r--package/mac80211/patches/017-remove_ath9k_rc.patch2
-rw-r--r--package/mac80211/patches/019-remove_ath5k_pci_option.patch2
-rw-r--r--package/mac80211/patches/100-disable_pcmcia_compat.patch2
-rw-r--r--package/mac80211/patches/110-disable_usb_compat.patch4
-rw-r--r--package/mac80211/patches/130-fix_sublevel_check.patch22
-rw-r--r--package/mac80211/patches/130-mesh_pathtbl_backport.patch (renamed from package/mac80211/patches/140-mesh_pathtbl_backport.patch)0
-rw-r--r--package/mac80211/patches/300-pending_work.patch969
-rw-r--r--package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch4
-rw-r--r--package/mac80211/patches/513-ath9k_channelbw_debugfs.patch6
-rw-r--r--package/mac80211/patches/521-mac80211_reduce_txqueuelen.patch2
-rw-r--r--package/mac80211/patches/530-mac80211_cur_txpower.patch2
-rw-r--r--package/mac80211/patches/531-ath9k_cur_txpower.patch4
-rw-r--r--package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch16
-rw-r--r--package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch12
-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.patch (renamed from package/mac80211/patches/608-rt2x00-allow_disabling_bands_through_platform_data.patch)2
-rw-r--r--package/mac80211/patches/607-rt2x00-dont-try-to-destroy-unallocated-workqueue.patch12
-rw-r--r--package/mac80211/patches/820-b43-add-antenna-control.patch14
-rw-r--r--package/mac80211/patches/900-bash-location.patch61
33 files changed, 920 insertions, 297 deletions
diff --git a/package/mac80211/patches/000-disable_ethernet.patch b/package/mac80211/patches/000-disable_ethernet.patch
index be1f4bdb4d..a6d708ec5a 100644
--- a/package/mac80211/patches/000-disable_ethernet.patch
+++ b/package/mac80211/patches/000-disable_ethernet.patch
@@ -1,6 +1,6 @@
--- a/Makefile
+++ b/Makefile
-@@ -32,9 +32,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
+@@ -26,9 +26,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
diff --git a/package/mac80211/patches/001-disable_b44.patch b/package/mac80211/patches/001-disable_b44.patch
index d6242587f0..8b5f3e60c7 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
-@@ -380,8 +380,8 @@ CONFIG_B43_BCMA_EXTRA=y
+@@ -368,8 +368,8 @@ CONFIG_B43_BCMA_EXTRA=y
CONFIG_P54_PCI=m
diff --git a/package/mac80211/patches/002-disable_rfkill.patch b/package/mac80211/patches/002-disable_rfkill.patch
index 4380d93910..94249413ba 100644
--- a/package/mac80211/patches/002-disable_rfkill.patch
+++ b/package/mac80211/patches/002-disable_rfkill.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -95,7 +95,7 @@ endif # build check
+@@ -83,7 +83,7 @@ endif # build check
endif # kernel Makefile check
# These both are needed by compat-wireless || compat-bluetooth so enable them
@@ -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")
-@@ -684,10 +684,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
+@@ -674,10 +674,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/003-disable_bt.patch b/package/mac80211/patches/003-disable_bt.patch
index d93b0cd2c0..fc433d1c0f 100644
--- a/package/mac80211/patches/003-disable_bt.patch
+++ b/package/mac80211/patches/003-disable_bt.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -117,8 +117,8 @@ ifndef CONFIG_COMPAT_KERNEL_2_6_27
+@@ -105,8 +105,8 @@ ifndef CONFIG_COMPAT_KERNEL_2_6_27
ifeq ($(CONFIG_BT),y)
# we'll ignore compiling bluetooth
else
diff --git a/package/mac80211/patches/005-disable_ssb_build.patch b/package/mac80211/patches/005-disable_ssb_build.patch
index a67168af64..9b39e76be1 100644
--- a/package/mac80211/patches/005-disable_ssb_build.patch
+++ b/package/mac80211/patches/005-disable_ssb_build.patch
@@ -1,6 +1,6 @@
--- a/Makefile
+++ b/Makefile
-@@ -32,7 +32,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
+@@ -26,7 +26,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
@@ -18,7 +18,7 @@
else
include $(KLIB_BUILD)/.config
endif
-@@ -356,7 +355,8 @@ CONFIG_IPW2200_QOS=y
+@@ -344,7 +343,8 @@ CONFIG_IPW2200_QOS=y
# % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
endif #CONFIG_WIRELESS_EXT
@@ -28,7 +28,7 @@
# Sonics Silicon Backplane
CONFIG_SSB_SPROM=y
-@@ -369,7 +369,7 @@ endif #CONFIG_PCMCIA
+@@ -357,7 +357,7 @@ endif #CONFIG_PCMCIA
# CONFIG_SSB_DEBUG=y
CONFIG_SSB_DRIVER_PCICORE=y
CONFIG_B43_SSB=y
@@ -37,7 +37,7 @@
CONFIG_BCMA=m
CONFIG_BCMA_BLOCKIO=y
-@@ -578,7 +578,6 @@ endif #CONFIG_SPI_MASTER end of SPI driv
+@@ -568,7 +568,6 @@ 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 9ac0f0e92b..f79cbcbe19 100644
--- a/package/mac80211/patches/006-disable_bcma_build.patch
+++ b/package/mac80211/patches/006-disable_bcma_build.patch
@@ -1,6 +1,6 @@
--- a/Makefile
+++ b/Makefile
-@@ -32,7 +32,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
+@@ -26,7 +26,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
@@ -10,7 +10,7 @@
ifeq ($(CONFIG_STAGING_EXCLUDE_BUILD),)
--- a/config.mk
+++ b/config.mk
-@@ -371,12 +371,12 @@ CONFIG_SSB_DRIVER_PCICORE=y
+@@ -359,12 +359,12 @@ CONFIG_SSB_DRIVER_PCICORE=y
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 b8c785388b..750b95d2d2 100644
--- a/package/mac80211/patches/007-remove_misc_drivers.patch
+++ b/package/mac80211/patches/007-remove_misc_drivers.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -254,7 +254,7 @@ $(warning "WARNING: CONFIG_CFG80211_WEXT
+@@ -242,7 +242,7 @@ $(warning "WARNING: CONFIG_CFG80211_WEXT
endif #CONFIG_WIRELESS_EXT
ifdef CONFIG_STAGING
@@ -9,7 +9,7 @@
endif #CONFIG_STAGING
# mac80211 test driver
-@@ -408,13 +408,13 @@ endif #CONFIG_CRC_ITU_T
+@@ -396,15 +396,15 @@ endif #CONFIG_CRC_ITU_T
CONFIG_MWL8K=m
# Ethernet drivers go here
@@ -21,14 +21,18 @@
+# CONFIG_ATL1E=m
ifdef CONFIG_COMPAT_KERNEL_2_6_27
-CONFIG_ATL1C=n
+-CONFIG_ALX=m
+# CONFIG_ATL1C=n
++# CONFIG_ALX=m
else #CONFIG_COMPAT_KERNEL_2_6_27
--CONFIG_ATL1C=m
-+# CONFIG_ATL1C=m
+-CONFIG_ATL1C=n
+-CONFIG_ALX=m
++# CONFIG_ATL1C=n
++# CONFIG_ALX=m
endif #CONFIG_COMPAT_KERNEL_2_6_27
ifdef CONFIG_WIRELESS_EXT
-@@ -475,21 +475,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
+@@ -465,21 +465,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/008-disable_mesh.patch b/package/mac80211/patches/008-disable_mesh.patch
index bdefe20df6..aaa27d00f8 100644
--- a/package/mac80211/patches/008-disable_mesh.patch
+++ b/package/mac80211/patches/008-disable_mesh.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -192,7 +192,7 @@ CONFIG_MAC80211_LEDS=y
+@@ -180,7 +180,7 @@ CONFIG_MAC80211_LEDS=y
endif #CONFIG_LEDS_TRIGGERS
# enable mesh networking too
diff --git a/package/mac80211/patches/009-remove_mac80211_module_dependence.patch b/package/mac80211/patches/009-remove_mac80211_module_dependence.patch
index 2e3753e13c..4fe13d45c6 100644
--- a/package/mac80211/patches/009-remove_mac80211_module_dependence.patch
+++ b/package/mac80211/patches/009-remove_mac80211_module_dependence.patch
@@ -1,26 +1,11 @@
--- a/config.mk
+++ b/config.mk
-@@ -58,23 +58,6 @@ $(error "ERROR: Your 2.6.27 kernel has C
+@@ -58,7 +58,7 @@ endif
+ ifeq ($(KERNEL_VERSION),2)
+ ifeq ($(shell test $(KERNEL_VERSION) -eq 2 -a $(KERNEL_26SUBLEVEL) -ge 27 -a $(KERNEL_26SUBLEVEL) -le 31 && echo yes),yes)
+ ifeq ($(CONFIG_MAC80211),)
+-$(error "ERROR: Your >=2.6.27 and <= 2.6.31 kernel has CONFIG_MAC80211 disabled, you should have it CONFIG_MAC80211=m if you want to use this thing.")
++# $(error "ERROR: Your >=2.6.27 and <= 2.6.31 kernel has CONFIG_MAC80211 disabled, you should have it CONFIG_MAC80211=m if you want to use this thing.")
+ endif
endif
endif
-
--# This is because with CONFIG_MAC80211 include/linux/skbuff.h will
--# enable on 2.6.27 a new attribute:
--#
--# skb->do_not_encrypt
--#
--# and on 2.6.28 another new attribute:
--#
--# skb->requeue
--#
--# In kernel 2.6.32 both attributes were removed.
--#
--ifeq ($(shell test $(KERNEL_VERSION) -eq 2 -a $(KERNEL_SUBLEVEL) -ge 27 -a $(KERNEL_SUBLEVEL) -le 31 && echo yes),yes)
--ifeq ($(CONFIG_MAC80211),)
--$(error "ERROR: Your >=2.6.27 and <= 2.6.31 kernel has CONFIG_MAC80211 disabled, you should have it CONFIG_MAC80211=m if you want to use this thing.")
--endif
--endif
--
- ifneq ($(KERNELRELEASE),) # This prevents a warning
-
- # We will warn when you don't have MQ support or NET_SCHED enabled.
diff --git a/package/mac80211/patches/010-no_pcmcia.patch b/package/mac80211/patches/010-no_pcmcia.patch
index ce833cff6d..3a1f912f14 100644
--- a/package/mac80211/patches/010-no_pcmcia.patch
+++ b/package/mac80211/patches/010-no_pcmcia.patch
@@ -9,7 +9,7 @@
else
include $(KLIB_BUILD)/.config
endif
-@@ -289,7 +289,7 @@ CONFIG_B43=m
+@@ -294,7 +294,7 @@ CONFIG_B43=m
CONFIG_B43_HWRNG=y
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 b1ee2cba2c..b724d98aeb 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
-@@ -561,7 +561,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
+@@ -568,7 +568,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
ifdef CONFIG_MMC
diff --git a/package/mac80211/patches/013-disable_b43_nphy.patch b/package/mac80211/patches/013-disable_b43_nphy.patch
index 0ff2992907..4340dcc1e3 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
-@@ -295,8 +295,8 @@ ifdef CONFIG_MAC80211_LEDS
+@@ -300,8 +300,8 @@ ifdef CONFIG_MAC80211_LEDS
CONFIG_B43_LEDS=y
endif #CONFIG_MAC80211_LEDS
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 ecad73168e..259fe7fed6 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
-@@ -370,7 +370,7 @@ CONFIG_RTL8180=m
+@@ -375,7 +375,7 @@ CONFIG_RTL8180=m
CONFIG_ADM8211=m
@@ -9,7 +9,7 @@
CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m
ifdef CONFIG_CRC_CCITT
-@@ -510,7 +510,7 @@ CONFIG_RT2800USB_RT35XX=y
+@@ -517,7 +517,7 @@ CONFIG_RT2800USB_RT35XX=y
CONFIG_RT2800USB_RT53XX=y
CONFIG_RT2800USB_UNKNOWN=y
endif #CONFIG_CRC_CCITT
diff --git a/package/mac80211/patches/016-remove_pid_algo.patch b/package/mac80211/patches/016-remove_pid_algo.patch
index 2035d60f09..d356651a90 100644
--- a/package/mac80211/patches/016-remove_pid_algo.patch
+++ b/package/mac80211/patches/016-remove_pid_algo.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -167,7 +167,7 @@ CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+@@ -172,7 +172,7 @@ CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
# This is the one used by our compat-wireless net/mac80211/rate.c
# in case you have and old kernel which is overriding this to pid.
CONFIG_COMPAT_MAC80211_RC_DEFAULT=minstrel_ht
diff --git a/package/mac80211/patches/017-remove_ath9k_rc.patch b/package/mac80211/patches/017-remove_ath9k_rc.patch
index 7fef47f889..fd818adf1a 100644
--- a/package/mac80211/patches/017-remove_ath9k_rc.patch
+++ b/package/mac80211/patches/017-remove_ath9k_rc.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -261,7 +261,7 @@ CONFIG_ATH9K_COMMON=m
+@@ -266,7 +266,7 @@ CONFIG_ATH9K_COMMON=m
# as default once we get minstrel properly tested and blessed by
# our systems engineering team. CCK rates also need to be used
# for long range considerations.
diff --git a/package/mac80211/patches/019-remove_ath5k_pci_option.patch b/package/mac80211/patches/019-remove_ath5k_pci_option.patch
index a11d625715..40a5cfc2d2 100644
--- a/package/mac80211/patches/019-remove_ath5k_pci_option.patch
+++ b/package/mac80211/patches/019-remove_ath5k_pci_option.patch
@@ -1,6 +1,6 @@
--- a/config.mk
+++ b/config.mk
-@@ -268,7 +268,7 @@ CONFIG_ATH9K_BTCOEX_SUPPORT=y
+@@ -273,7 +273,7 @@ CONFIG_ATH9K_BTCOEX_SUPPORT=y
# PCI Drivers
ifdef CONFIG_PCI
diff --git a/package/mac80211/patches/100-disable_pcmcia_compat.patch b/package/mac80211/patches/100-disable_pcmcia_compat.patch
index fb5ae7d628..39478ee8c0 100644
--- a/package/mac80211/patches/100-disable_pcmcia_compat.patch
+++ b/package/mac80211/patches/100-disable_pcmcia_compat.patch
@@ -31,7 +31,7 @@
struct pcmcia_device *p_dev;
--- a/include/linux/compat-2.6.28.h
+++ b/include/linux/compat-2.6.28.h
-@@ -27,7 +27,7 @@
+@@ -44,7 +44,7 @@ typedef u32 phys_addr_t;
})
#endif /* From include/asm-generic/bug.h */
diff --git a/package/mac80211/patches/110-disable_usb_compat.patch b/package/mac80211/patches/110-disable_usb_compat.patch
index 9700fb320e..c605801485 100644
--- a/package/mac80211/patches/110-disable_usb_compat.patch
+++ b/package/mac80211/patches/110-disable_usb_compat.patch
@@ -22,7 +22,7 @@
* @anchor: anchor the requests are bound to
--- a/include/linux/compat-2.6.28.h
+++ b/include/linux/compat-2.6.28.h
-@@ -52,7 +52,7 @@ int pcmcia_loop_config(struct pcmcia_dev
+@@ -69,7 +69,7 @@ int pcmcia_loop_config(struct pcmcia_dev
/* USB anchors were added as of 2.6.23 */
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23))
@@ -33,7 +33,7 @@
#endif
--- a/config.mk
+++ b/config.mk
-@@ -496,7 +496,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
+@@ -503,7 +503,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/130-fix_sublevel_check.patch b/package/mac80211/patches/130-fix_sublevel_check.patch
deleted file mode 100644
index 9dfa90af32..0000000000
--- a/package/mac80211/patches/130-fix_sublevel_check.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/config.mk
-+++ b/config.mk
-@@ -20,16 +20,16 @@ COMPAT_LATEST_VERSION = 3
- KERNEL_VERSION := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^\([0-9]\)\..*/\1/p')
-
- ifneq ($(KERNEL_VERSION),2)
--KERNEL_SUBLEVEL := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^3\.\([0-9]\+\).*/\1/p')
-+COMPAT_KERNEL_SUBLEVEL := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^3\.\([0-9]\+\).*/\1/p')
- else
- COMPAT_26LATEST_VERSION = 39
- KERNEL_26SUBLEVEL := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^2\.6\.\([0-9]\+\).*/\1/p')
- COMPAT_26VERSIONS := $(shell I=$(COMPAT_26LATEST_VERSION); while [ "$$I" -gt $(KERNEL_26SUBLEVEL) ]; do echo $$I; I=$$(($$I - 1)); done)
- $(foreach ver,$(COMPAT_26VERSIONS),$(eval CONFIG_COMPAT_KERNEL_2_6_$(ver)=y))
--KERNEL_SUBLEVEL := -1
-+COMPAT_KERNEL_SUBLEVEL := -1
- endif
-
--COMPAT_VERSIONS := $(shell I=$(COMPAT_LATEST_VERSION); while [ "$$I" -gt $(KERNEL_SUBLEVEL) ]; do echo $$I; I=$$(($$I - 1)); done)
-+COMPAT_VERSIONS := $(shell I=$(COMPAT_LATEST_VERSION); while [ "$$I" -gt $(COMPAT_KERNEL_SUBLEVEL) ]; do echo $$I; I=$$(($$I - 1)); done)
- $(foreach ver,$(COMPAT_VERSIONS),$(eval CONFIG_COMPAT_KERNEL_3_$(ver)=y))
-
- RHEL_MAJOR := $(shell grep ^RHEL_MAJOR $(KLIB_BUILD)/Makefile | sed -n 's/.*= *\(.*\)/\1/p')
diff --git a/package/mac80211/patches/140-mesh_pathtbl_backport.patch b/package/mac80211/patches/130-mesh_pathtbl_backport.patch
index bc4b40a52e..bc4b40a52e 100644
--- a/package/mac80211/patches/140-mesh_pathtbl_backport.patch
+++ b/package/mac80211/patches/130-mesh_pathtbl_backport.patch
diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch
index 93773d7eba..219db50c23 100644
--- a/package/mac80211/patches/300-pending_work.patch
+++ b/package/mac80211/patches/300-pending_work.patch
@@ -1,3 +1,597 @@
+--- a/drivers/net/wireless/ath/ath9k/ar9001_initvals.h
++++ b/drivers/net/wireless/ath/ath9k/ar9001_initvals.h
+@@ -459,97 +459,6 @@ static const u32 ar5416Common_9100[][2]
+ {0x0000a3e0, 0x000001ce},
+ };
+
+-static const u32 ar5416Bank0_9100[][2] = {
+- /* Addr allmodes */
+- {0x000098b0, 0x1e5795e5},
+- {0x000098e0, 0x02008020},
+-};
+-
+-static const u32 ar5416BB_RfGain_9100[][3] = {
+- /* Addr 5G_HT20 5G_HT40 */
+- {0x00009a00, 0x00000000, 0x00000000},
+- {0x00009a04, 0x00000040, 0x00000040},
+- {0x00009a08, 0x00000080, 0x00000080},
+- {0x00009a0c, 0x000001a1, 0x00000141},
+- {0x00009a10, 0x000001e1, 0x00000181},
+- {0x00009a14, 0x00000021, 0x000001c1},
+- {0x00009a18, 0x00000061, 0x00000001},
+- {0x00009a1c, 0x00000168, 0x00000041},
+- {0x00009a20, 0x000001a8, 0x000001a8},
+- {0x00009a24, 0x000001e8, 0x000001e8},
+- {0x00009a28, 0x00000028, 0x00000028},
+- {0x00009a2c, 0x00000068, 0x00000068},
+- {0x00009a30, 0x00000189, 0x000000a8},
+- {0x00009a34, 0x000001c9, 0x00000169},
+- {0x00009a38, 0x00000009, 0x000001a9},
+- {0x00009a3c, 0x00000049, 0x000001e9},
+- {0x00009a40, 0x00000089, 0x00000029},
+- {0x00009a44, 0x00000170, 0x00000069},
+- {0x00009a48, 0x000001b0, 0x00000190},
+- {0x00009a4c, 0x000001f0, 0x000001d0},
+- {0x00009a50, 0x00000030, 0x00000010},
+- {0x00009a54, 0x00000070, 0x00000050},
+- {0x00009a58, 0x00000191, 0x00000090},
+- {0x00009a5c, 0x000001d1, 0x00000151},
+- {0x00009a60, 0x00000011, 0x00000191},
+- {0x00009a64, 0x00000051, 0x000001d1},
+- {0x00009a68, 0x00000091, 0x00000011},
+- {0x00009a6c, 0x000001b8, 0x00000051},
+- {0x00009a70, 0x000001f8, 0x00000198},
+- {0x00009a74, 0x00000038, 0x000001d8},
+- {0x00009a78, 0x00000078, 0x00000018},
+- {0x00009a7c, 0x00000199, 0x00000058},
+- {0x00009a80, 0x000001d9, 0x00000098},
+- {0x00009a84, 0x00000019, 0x00000159},
+- {0x00009a88, 0x00000059, 0x00000199},
+- {0x00009a8c, 0x00000099, 0x000001d9},
+- {0x00009a90, 0x000000d9, 0x00000019},
+- {0x00009a94, 0x000000f9, 0x00000059},
+- {0x00009a98, 0x000000f9, 0x00000099},
+- {0x00009a9c, 0x000000f9, 0x000000d9},
+- {0x00009aa0, 0x000000f9, 0x000000f9},
+- {0x00009aa4, 0x000000f9, 0x000000f9},
+- {0x00009aa8, 0x000000f9, 0x000000f9},
+- {0x00009aac, 0x000000f9, 0x000000f9},
+- {0x00009ab0, 0x000000f9, 0x000000f9},
+- {0x00009ab4, 0x000000f9, 0x000000f9},
+- {0x00009ab8, 0x000000f9, 0x000000f9},
+- {0x00009abc, 0x000000f9, 0x000000f9},
+- {0x00009ac0, 0x000000f9, 0x000000f9},
+- {0x00009ac4, 0x000000f9, 0x000000f9},
+- {0x00009ac8, 0x000000f9, 0x000000f9},
+- {0x00009acc, 0x000000f9, 0x000000f9},
+- {0x00009ad0, 0x000000f9, 0x000000f9},
+- {0x00009ad4, 0x000000f9, 0x000000f9},
+- {0x00009ad8, 0x000000f9, 0x000000f9},
+- {0x00009adc, 0x000000f9, 0x000000f9},
+- {0x00009ae0, 0x000000f9, 0x000000f9},
+- {0x00009ae4, 0x000000f9, 0x000000f9},
+- {0x00009ae8, 0x000000f9, 0x000000f9},
+- {0x00009aec, 0x000000f9, 0x000000f9},
+- {0x00009af0, 0x000000f9, 0x000000f9},
+- {0x00009af4, 0x000000f9, 0x000000f9},
+- {0x00009af8, 0x000000f9, 0x000000f9},
+- {0x00009afc, 0x000000f9, 0x000000f9},
+-};
+-
+-static const u32 ar5416Bank1_9100[][2] = {
+- /* Addr allmodes */
+- {0x000098b0, 0x02108421},
+- {0x000098ec, 0x00000008},
+-};
+-
+-static const u32 ar5416Bank2_9100[][2] = {
+- /* Addr allmodes */
+- {0x000098b0, 0x0e73ff17},
+- {0x000098e0, 0x00000420},
+-};
+-
+-static const u32 ar5416Bank3_9100[][3] = {
+- /* Addr 5G_HT20 5G_HT40 */
+- {0x000098f0, 0x01400018, 0x01c00018},
+-};
+-
+ static const u32 ar5416Bank6_9100[][3] = {
+ /* Addr 5G_HT20 5G_HT40 */
+ {0x0000989c, 0x00000000, 0x00000000},
+@@ -624,13 +533,6 @@ static const u32 ar5416Bank6TPC_9100[][3
+ {0x000098d0, 0x0000000f, 0x0010000f},
+ };
+
+-static const u32 ar5416Bank7_9100[][2] = {
+- /* Addr allmodes */
+- {0x0000989c, 0x00000500},
+- {0x0000989c, 0x00000800},
+- {0x000098cc, 0x0000000e},
+-};
+-
+ static const u32 ar5416Addac_9100[][2] = {
+ /* Addr allmodes */
+ {0x0000989c, 0x00000000},
+@@ -1113,178 +1015,6 @@ static const u32 ar5416Common_9160[][2]
+ {0x0000a3e0, 0x000001ce},
+ };
+
+-static const u32 ar5416Bank0_9160[][2] = {
+- /* Addr allmodes */
+- {0x000098b0, 0x1e5795e5},
+- {0x000098e0, 0x02008020},
+-};
+-
+-static const u32 ar5416BB_RfGain_9160[][3] = {
+- /* Addr 5G_HT20 5G_HT40 */
+- {0x00009a00, 0x00000000, 0x00000000},
+- {0x00009a04, 0x00000040, 0x00000040},
+- {0x00009a08, 0x00000080, 0x00000080},
+- {0x00009a0c, 0x000001a1, 0x00000141},
+- {0x00009a10, 0x000001e1, 0x00000181},
+- {0x00009a14, 0x00000021, 0x000001c1},
+- {0x00009a18, 0x00000061, 0x00000001},
+- {0x00009a1c, 0x00000168, 0x00000041},
+- {0x00009a20, 0x000001a8, 0x000001a8},
+- {0x00009a24, 0x000001e8, 0x000001e8},
+- {0x00009a28, 0x00000028, 0x00000028},
+- {0x00009a2c, 0x00000068, 0x00000068},
+- {0x00009a30, 0x00000189, 0x000000a8},
+- {0x00009a34, 0x000001c9, 0x00000169},
+- {0x00009a38, 0x00000009, 0x000001a9},
+- {0x00009a3c, 0x00000049, 0x000001e9},
+- {0x00009a40, 0x00000089, 0x00000029},
+- {0x00009a44, 0x00000170, 0x00000069},
+- {0x00009a48, 0x000001b0, 0x00000190},
+- {0x00009a4c, 0x000001f0, 0x000001d0},
+- {0x00009a50, 0x00000030, 0x00000010},
+- {0x00009a54, 0x00000070, 0x00000050},
+- {0x00009a58, 0x00000191, 0x00000090},
+- {0x00009a5c, 0x000001d1, 0x00000151},
+- {0x00009a60, 0x00000011, 0x00000191},
+- {0x00009a64, 0x00000051, 0x000001d1},
+- {0x00009a68, 0x00000091, 0x00000011},
+- {0x00009a6c, 0x000001b8, 0x00000051},
+- {0x00009a70, 0x000001f8, 0x00000198},
+- {0x00009a74, 0x00000038, 0x000001d8},
+- {0x00009a78, 0x00000078, 0x00000018},
+- {0x00009a7c, 0x00000199, 0x00000058},
+- {0x00009a80, 0x000001d9, 0x00000098},
+- {0x00009a84, 0x00000019, 0x00000159},
+- {0x00009a88, 0x00000059, 0x00000199},
+- {0x00009a8c, 0x00000099, 0x000001d9},
+- {0x00009a90, 0x000000d9, 0x00000019},
+- {0x00009a94, 0x000000f9, 0x00000059},
+- {0x00009a98, 0x000000f9, 0x00000099},
+- {0x00009a9c, 0x000000f9, 0x000000d9},
+- {0x00009aa0, 0x000000f9, 0x000000f9},
+- {0x00009aa4, 0x000000f9, 0x000000f9},
+- {0x00009aa8, 0x000000f9, 0x000000f9},
+- {0x00009aac, 0x000000f9, 0x000000f9},
+- {0x00009ab0, 0x000000f9, 0x000000f9},
+- {0x00009ab4, 0x000000f9, 0x000000f9},
+- {0x00009ab8, 0x000000f9, 0x000000f9},
+- {0x00009abc, 0x000000f9, 0x000000f9},
+- {0x00009ac0, 0x000000f9, 0x000000f9},
+- {0x00009ac4, 0x000000f9, 0x000000f9},
+- {0x00009ac8, 0x000000f9, 0x000000f9},
+- {0x00009acc, 0x000000f9, 0x000000f9},
+- {0x00009ad0, 0x000000f9, 0x000000f9},
+- {0x00009ad4, 0x000000f9, 0x000000f9},
+- {0x00009ad8, 0x000000f9, 0x000000f9},
+- {0x00009adc, 0x000000f9, 0x000000f9},
+- {0x00009ae0, 0x000000f9, 0x000000f9},
+- {0x00009ae4, 0x000000f9, 0x000000f9},
+- {0x00009ae8, 0x000000f9, 0x000000f9},
+- {0x00009aec, 0x000000f9, 0x000000f9},
+- {0x00009af0, 0x000000f9, 0x000000f9},
+- {0x00009af4, 0x000000f9, 0x000000f9},
+- {0x00009af8, 0x000000f9, 0x000000f9},
+- {0x00009afc, 0x000000f9, 0x000000f9},
+-};
+-
+-static const u32 ar5416Bank1_9160[][2] = {
+- /* Addr allmodes */
+- {0x000098b0, 0x02108421},
+- {0x000098ec, 0x00000008},
+-};
+-
+-static const u32 ar5416Bank2_9160[][2] = {
+- /* Addr allmodes */
+- {0x000098b0, 0x0e73ff17},
+- {0x000098e0, 0x00000420},
+-};
+-
+-static const u32 ar5416Bank3_9160[][3] = {
+- /* Addr 5G_HT20 5G_HT40 */
+- {0x000098f0, 0x01400018, 0x01c00018},
+-};
+-
+-static const u32 ar5416Bank6_9160[][3] = {
+- /* Addr 5G_HT20 5G_HT40 */
+- {0x0000989c, 0x00000000, 0x00000000},
+- {0x0000989c, 0x00000000, 0x00000000},
+- {0x0000989c, 0x00000000, 0x00000000},
+- {0x0000989c, 0x00e00000, 0x00e00000},
+- {0x0000989c, 0x005e0000, 0x005e0000},
+- {0x0000989c, 0x00120000, 0x00120000},
+- {0x0000989c, 0x00620000, 0x00620000},
+- {0x0000989c, 0x00020000, 0x00020000},
+- {0x0000989c, 0x00ff0000, 0x00ff0000},
+- {0x0000989c, 0x00ff0000, 0x00ff0000},
+- {0x0000989c, 0x00ff0000, 0x00ff0000},
+- {0x0000989c, 0x40ff0000, 0x40ff0000},
+- {0x0000989c, 0x005f0000, 0x005f0000},
+- {0x0000989c, 0x00870000, 0x00870000},
+- {0x0000989c, 0x00f90000, 0x00f90000},
+- {0x0000989c, 0x007b0000, 0x007b0000},
+- {0x0000989c, 0x00ff0000, 0x00ff0000},
+- {0x0000989c, 0x00f50000, 0x00f50000},
+- {0x0000989c, 0x00dc0000, 0x00dc0000},
+- {0x0000989c, 0x00110000, 0x00110000},
+- {0x0000989c, 0x006100a8, 0x006100a8},
+- {0x0000989c, 0x004210a2, 0x004210a2},
+- {0x0000989c, 0x0014008f, 0x0014008f},
+- {0x0000989c, 0x00c40003, 0x00c40003},
+- {0x0000989c, 0x003000f2, 0x003000f2},
+- {0x0000989c, 0x00440016, 0x00440016},
+- {0x0000989c, 0x00410040, 0x00410040},
+- {0x0000989c, 0x0001805e, 0x0001805e},
+- {0x0000989c, 0x0000c0ab, 0x0000c0ab},
+- {0x0000989c, 0x000000f1, 0x000000f1},
+- {0x0000989c, 0x00002081, 0x00002081},
+- {0x0000989c, 0x000000d4, 0x000000d4},
+- {0x000098d0, 0x0000000f, 0x0010000f},
+-};
+-
+-static const u32 ar5416Bank6TPC_9160[][3] = {
+- /* Addr 5G_HT20 5G_HT40 */
+- {0x0000989c, 0x00000000, 0x00000000},
+- {0x0000989c, 0x00000000, 0x00000000},
+- {0x0000989c, 0x00000000, 0x00000000},
+- {0x0000989c, 0x00e00000, 0x00e00000},
+- {0x0000989c, 0x005e0000, 0x005e0000},
+- {0x0000989c, 0x00120000, 0x00120000},
+- {0x0000989c, 0x00620000, 0x00620000},
+- {0x0000989c, 0x00020000, 0x00020000},
+- {0x0000989c, 0x00ff0000, 0x00ff0000},
+- {0x0000989c, 0x00ff0000, 0x00ff0000},
+- {0x0000989c, 0x00ff0000, 0x00ff0000},
+- {0x0000989c, 0x40ff0000, 0x40ff0000},
+- {0x0000989c, 0x005f0000, 0x005f0000},
+- {0x0000989c, 0x00870000, 0x00870000},
+- {0x0000989c, 0x00f90000, 0x00f90000},
+- {0x0000989c, 0x007b0000, 0x007b0000},
+- {0x0000989c, 0x00ff0000, 0x00ff0000},
+- {0x0000989c, 0x00f50000, 0x00f50000},
+- {0x0000989c, 0x00dc0000, 0x00dc0000},
+- {0x0000989c, 0x00110000, 0x00110000},
+- {0x0000989c, 0x006100a8, 0x006100a8},
+- {0x0000989c, 0x00423022, 0x00423022},
+- {0x0000989c, 0x2014008f, 0x2014008f},
+- {0x0000989c, 0x00c40002, 0x00c40002},
+- {0x0000989c, 0x003000f2, 0x003000f2},
+- {0x0000989c, 0x00440016, 0x00440016},
+- {0x0000989c, 0x00410040, 0x00410040},
+- {0x0000989c, 0x0001805e, 0x0001805e},
+- {0x0000989c, 0x0000c0ab, 0x0000c0ab},
+- {0x0000989c, 0x000000e1, 0x000000e1},
+- {0x0000989c, 0x00007080, 0x00007080},
+- {0x0000989c, 0x000000d4, 0x000000d4},
+- {0x000098d0, 0x0000000f, 0x0010000f},
+-};
+-
+-static const u32 ar5416Bank7_9160[][2] = {
+- /* Addr allmodes */
+- {0x0000989c, 0x00000500},
+- {0x0000989c, 0x00000800},
+- {0x000098cc, 0x0000000e},
+-};
+-
+ static const u32 ar5416Addac_9160[][2] = {
+ /* Addr allmodes */
+ {0x0000989c, 0x00000000},
+--- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
++++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
+@@ -35,11 +35,11 @@ static void ar9002_hw_init_mode_regs(str
+ INIT_INI_ARRAY(&ah->iniCommon, ar9271Common_9271,
+ ARRAY_SIZE(ar9271Common_9271), 2);
+ INIT_INI_ARRAY(&ah->iniCommon_normal_cck_fir_coeff_9271,
+- ar9271Common_normal_cck_fir_coeff_9271,
+- ARRAY_SIZE(ar9271Common_normal_cck_fir_coeff_9271), 2);
++ ar9287Common_normal_cck_fir_coeff_9287_1_1,
++ ARRAY_SIZE(ar9287Common_normal_cck_fir_coeff_9287_1_1), 2);
+ INIT_INI_ARRAY(&ah->iniCommon_japan_2484_cck_fir_coeff_9271,
+- ar9271Common_japan_2484_cck_fir_coeff_9271,
+- ARRAY_SIZE(ar9271Common_japan_2484_cck_fir_coeff_9271), 2);
++ ar9287Common_japan_2484_cck_fir_coeff_9287_1_1,
++ ARRAY_SIZE(ar9287Common_japan_2484_cck_fir_coeff_9287_1_1), 2);
+ INIT_INI_ARRAY(&ah->iniModes_9271_1_0_only,
+ ar9271Modes_9271_1_0_only,
+ ARRAY_SIZE(ar9271Modes_9271_1_0_only), 5);
+@@ -54,53 +54,31 @@ static void ar9002_hw_init_mode_regs(str
+ return;
+ }
+
++ if (ah->config.pcie_clock_req)
++ INIT_INI_ARRAY(&ah->iniPcieSerdes,
++ ar9280PciePhy_clkreq_off_L1_9280,
++ ARRAY_SIZE(ar9280PciePhy_clkreq_off_L1_9280), 2);
++ else
++ INIT_INI_ARRAY(&ah->iniPcieSerdes,
++ ar9280PciePhy_clkreq_always_on_L1_9280,
++ ARRAY_SIZE(ar9280PciePhy_clkreq_always_on_L1_9280), 2);
++
+ if (AR_SREV_9287_11_OR_LATER(ah)) {
+ INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_1,
+ ARRAY_SIZE(ar9287Modes_9287_1_1), 5);
+ INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_1,
+ ARRAY_SIZE(ar9287Common_9287_1_1), 2);
+- if (ah->config.pcie_clock_req)
+- INIT_INI_ARRAY(&ah->iniPcieSerdes,
+- ar9287PciePhy_clkreq_off_L1_9287_1_1,
+- ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_1), 2);
+- else
+- INIT_INI_ARRAY(&ah->iniPcieSerdes,
+- ar9287PciePhy_clkreq_always_on_L1_9287_1_1,
+- ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_1),
+- 2);
+ } else if (AR_SREV_9285_12_OR_LATER(ah)) {
+-
+-
+ INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285_1_2,
+ ARRAY_SIZE(ar9285Modes_9285_1_2), 5);
+ INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285_1_2,
+ ARRAY_SIZE(ar9285Common_9285_1_2), 2);
+-
+- if (ah->config.pcie_clock_req) {
+- INIT_INI_ARRAY(&ah->iniPcieSerdes,
+- ar9285PciePhy_clkreq_off_L1_9285_1_2,
+- ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285_1_2), 2);
+- } else {
+- INIT_INI_ARRAY(&ah->iniPcieSerdes,
+- ar9285PciePhy_clkreq_always_on_L1_9285_1_2,
+- ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285_1_2),
+- 2);
+- }
+ } else if (AR_SREV_9280_20_OR_LATER(ah)) {
+ INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2,
+ ARRAY_SIZE(ar9280Modes_9280_2), 5);
+ INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280_2,
+ ARRAY_SIZE(ar9280Common_9280_2), 2);
+
+- if (ah->config.pcie_clock_req) {
+- INIT_INI_ARRAY(&ah->iniPcieSerdes,
+- ar9280PciePhy_clkreq_off_L1_9280,
+- ARRAY_SIZE(ar9280PciePhy_clkreq_off_L1_9280), 2);
+- } else {
+- INIT_INI_ARRAY(&ah->iniPcieSerdes,
+- ar9280PciePhy_clkreq_always_on_L1_9280,
+- ARRAY_SIZE(ar9280PciePhy_clkreq_always_on_L1_9280), 2);
+- }
+ INIT_INI_ARRAY(&ah->iniModesAdditional,
+ ar9280Modes_fast_clock_9280_2,
+ ARRAY_SIZE(ar9280Modes_fast_clock_9280_2), 3);
+@@ -109,22 +87,6 @@ static void ar9002_hw_init_mode_regs(str
+ ARRAY_SIZE(ar5416Modes_9160), 5);
+ INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9160,
+ ARRAY_SIZE(ar5416Common_9160), 2);
+- INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9160,
+- ARRAY_SIZE(ar5416Bank0_9160), 2);
+- INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9160,
+- ARRAY_SIZE(ar5416BB_RfGain_9160), 3);
+- INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9160,
+- ARRAY_SIZE(ar5416Bank1_9160), 2);
+- INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9160,
+- ARRAY_SIZE(ar5416Bank2_9160), 2);
+- INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9160,
+- ARRAY_SIZE(ar5416Bank3_9160), 3);
+- INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9160,
+- ARRAY_SIZE(ar5416Bank6_9160), 3);
+- INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9160,
+- ARRAY_SIZE(ar5416Bank6TPC_9160), 3);
+- INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9160,
+- ARRAY_SIZE(ar5416Bank7_9160), 2);
+ if (AR_SREV_9160_11(ah)) {
+ INIT_INI_ARRAY(&ah->iniAddac,
+ ar5416Addac_9160_1_1,
+@@ -138,22 +100,8 @@ static void ar9002_hw_init_mode_regs(str
+ ARRAY_SIZE(ar5416Modes_9100), 5);
+ INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9100,
+ ARRAY_SIZE(ar5416Common_9100), 2);
+- INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9100,
+- ARRAY_SIZE(ar5416Bank0_9100), 2);
+- INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9100,
+- ARRAY_SIZE(ar5416BB_RfGain_9100), 3);
+- INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9100,
+- ARRAY_SIZE(ar5416Bank1_9100), 2);
+- INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9100,
+- ARRAY_SIZE(ar5416Bank2_9100), 2);
+- INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9100,
+- ARRAY_SIZE(ar5416Bank3_9100), 3);
+ INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9100,
+ ARRAY_SIZE(ar5416Bank6_9100), 3);
+- INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100,
+- ARRAY_SIZE(ar5416Bank6TPC_9100), 3);
+- INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9100,
+- ARRAY_SIZE(ar5416Bank7_9100), 2);
+ INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9100,
+ ARRAY_SIZE(ar5416Addac_9100), 2);
+ } else {
+@@ -161,24 +109,37 @@ static void ar9002_hw_init_mode_regs(str
+ ARRAY_SIZE(ar5416Modes), 5);
+ INIT_INI_ARRAY(&ah->iniCommon, ar5416Common,
+ ARRAY_SIZE(ar5416Common), 2);
+- INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0,
+- ARRAY_SIZE(ar5416Bank0), 2);
++ INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC,
++ ARRAY_SIZE(ar5416Bank6TPC), 3);
++ INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac,
++ ARRAY_SIZE(ar5416Addac), 2);
++ }
++
++ if (!AR_SREV_9280_20_OR_LATER(ah)) {
++ /* Common for AR5416, AR913x, AR9160 */
+ INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain,
+ ARRAY_SIZE(ar5416BB_RfGain), 3);
++
++ INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0,
++ ARRAY_SIZE(ar5416Bank0), 2);
+ INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1,
+ ARRAY_SIZE(ar5416Bank1), 2);
+ INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2,
+ ARRAY_SIZE(ar5416Bank2), 2);
+ INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3,
+ ARRAY_SIZE(ar5416Bank3), 3);
+- INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6,
+- ARRAY_SIZE(ar5416Bank6), 3);
+- INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC,
+- ARRAY_SIZE(ar5416Bank6TPC), 3);
+ INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7,
+ ARRAY_SIZE(ar5416Bank7), 2);
+- INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac,
+- ARRAY_SIZE(ar5416Addac), 2);
++
++ /* Common for AR5416, AR9160 */
++ if (!AR_SREV_9100(ah))
++ INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6,
++ ARRAY_SIZE(ar5416Bank6), 3);
++
++ /* Common for AR913x, AR9160 */
++ if (!AR_SREV_5416(ah))
++ INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100,
++ ARRAY_SIZE(ar5416Bank6TPC_9100), 3);
+ }
+
+ /* iniAddac needs to be modified for these chips */
+--- a/drivers/net/wireless/ath/ath9k/ar9002_initvals.h
++++ b/drivers/net/wireless/ath/ath9k/ar9002_initvals.h
+@@ -925,34 +925,6 @@ static const u32 ar9280PciePhy_clkreq_al
+ {0x00004044, 0x00000000},
+ };
+
+-static const u32 ar9285PciePhy_clkreq_always_on_L1_9285[][2] = {
+- /* Addr allmodes */
+- {0x00004040, 0x9248fd00},
+- {0x00004040, 0x24924924},
+- {0x00004040, 0xa8000019},
+- {0x00004040, 0x13160820},
+- {0x00004040, 0xe5980560},
+- {0x00004040, 0xc01dcffd},
+- {0x00004040, 0x1aaabe41},
+- {0x00004040, 0xbe105554},
+- {0x00004040, 0x00043007},
+- {0x00004044, 0x00000000},
+-};
+-
+-static const u32 ar9285PciePhy_clkreq_off_L1_9285[][2] = {
+- /* Addr allmodes */
+- {0x00004040, 0x9248fd00},
+- {0x00004040, 0x24924924},
+- {0x00004040, 0xa8000019},
+- {0x00004040, 0x13160820},
+- {0x00004040, 0xe5980560},
+- {0x00004040, 0xc01dcffc},
+- {0x00004040, 0x1aaabe41},
+- {0x00004040, 0xbe105554},
+- {0x00004040, 0x00043007},
+- {0x00004044, 0x00000000},
+-};
+-
+ static const u32 ar9285Modes_9285_1_2[][5] = {
+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
+ {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
+@@ -1743,34 +1715,6 @@ static const u32 ar9285Modes_XE2_0_high_
+ {0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7},
+ };
+
+-static const u32 ar9285PciePhy_clkreq_always_on_L1_9285_1_2[][2] = {
+- /* Addr allmodes */
+- {0x00004040, 0x9248fd00},
+- {0x00004040, 0x24924924},
+- {0x00004040, 0xa8000019},
+- {0x00004040, 0x13160820},
+- {0x00004040, 0xe5980560},
+- {0x00004040, 0xc01dcffd},
+- {0x00004040, 0x1aaabe41},
+- {0x00004040, 0xbe105554},
+- {0x00004040, 0x00043007},
+- {0x00004044, 0x00000000},
+-};
+-
+-static const u32 ar9285PciePhy_clkreq_off_L1_9285_1_2[][2] = {
+- /* Addr allmodes */
+- {0x00004040, 0x9248fd00},
+- {0x00004040, 0x24924924},
+- {0x00004040, 0xa8000019},
+- {0x00004040, 0x13160820},
+- {0x00004040, 0xe5980560},
+- {0x00004040, 0xc01dcffc},
+- {0x00004040, 0x1aaabe41},
+- {0x00004040, 0xbe105554},
+- {0x00004040, 0x00043007},
+- {0x00004044, 0x00000000},
+-};
+-
+ static const u32 ar9287Modes_9287_1_1[][5] = {
+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
+ {0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160},
+@@ -2512,34 +2456,6 @@ static const u32 ar9287Modes_rx_gain_928
+ {0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067},
+ };
+
+-static const u32 ar9287PciePhy_clkreq_always_on_L1_9287_1_1[][2] = {
+- /* Addr allmodes */
+- {0x00004040, 0x9248fd00},
+- {0x00004040, 0x24924924},
+- {0x00004040, 0xa8000019},
+- {0x00004040, 0x13160820},
+- {0x00004040, 0xe5980560},
+- {0x00004040, 0xc01dcffd},
+- {0x00004040, 0x1aaabe41},
+- {0x00004040, 0xbe105554},
+- {0x00004040, 0x00043007},
+- {0x00004044, 0x00000000},
+-};
+-
+-static const u32 ar9287PciePhy_clkreq_off_L1_9287_1_1[][2] = {
+- /* Addr allmodes */
+- {0x00004040, 0x9248fd00},
+- {0x00004040, 0x24924924},
+- {0x00004040, 0xa8000019},
+- {0x00004040, 0x13160820},
+- {0x00004040, 0xe5980560},
+- {0x00004040, 0xc01dcffc},
+- {0x00004040, 0x1aaabe41},
+- {0x00004040, 0xbe105554},
+- {0x00004040, 0x00043007},
+- {0x00004044, 0x00000000},
+-};
+-
+ static const u32 ar9271Modes_9271[][5] = {
+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
+ {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
+@@ -3176,20 +3092,6 @@ static const u32 ar9271Common_9271[][2]
+ {0x0000d384, 0xf3307ff0},
+ };
+
+-static const u32 ar9271Common_normal_cck_fir_coeff_9271[][2] = {
+- /* Addr allmodes */
+- {0x0000a1f4, 0x00fffeff},
+- {0x0000a1f8, 0x00f5f9ff},
+- {0x0000a1fc, 0xb79f6427},
+-};
+-
+-static const u32 ar9271Common_japan_2484_cck_fir_coeff_9271[][2] = {
+- /* Addr allmodes */
+- {0x0000a1f4, 0x00000000},
+- {0x0000a1f8, 0xefff0301},
+- {0x0000a1fc, 0xca9228ee},
+-};
+-
+ static const u32 ar9271Modes_9271_1_0_only[][5] = {
+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
+ {0x00009910, 0x30002311, 0x30002311, 0x30002311, 0x30002311},
--- a/net/mac80211/agg-rx.c
+++ b/net/mac80211/agg-rx.c
@@ -187,6 +187,8 @@ static void ieee80211_send_addba_resp(st
@@ -94,7 +688,16 @@
err_stop:
if (!local->open_count)
drv_stop(local);
-@@ -720,6 +696,70 @@ static void ieee80211_if_setup(struct ne
+@@ -654,6 +630,8 @@ static void ieee80211_teardown_sdata(str
+
+ if (ieee80211_vif_is_mesh(&sdata->vif))
+ mesh_rmc_free(sdata);
++ else if (sdata->vif.type == NL80211_IFTYPE_STATION)
++ ieee80211_mgd_teardown(sdata);
+
+ flushed = sta_info_flush(local, sdata);
+ WARN_ON(flushed);
+@@ -720,6 +698,70 @@ static void ieee80211_if_setup(struct ne
dev->destructor = free_netdev;
}
@@ -165,7 +768,7 @@
static void ieee80211_iface_work(struct work_struct *work)
{
struct ieee80211_sub_if_data *sdata =
-@@ -824,6 +864,9 @@ static void ieee80211_iface_work(struct
+@@ -824,6 +866,9 @@ static void ieee80211_iface_work(struct
break;
ieee80211_mesh_rx_queued_mgmt(sdata, skb);
break;
@@ -222,19 +825,6 @@
break;
default:
/* should never get here */
---- a/net/mac80211/sta_info.c
-+++ b/net/mac80211/sta_info.c
-@@ -1379,8 +1379,10 @@ int sta_info_move_state(struct sta_info
- return -EINVAL;
- }
-
-+#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
- printk(KERN_DEBUG "%s: moving STA %pM to state %d\n",
- sta->sdata->name, sta->sta.addr, new_state);
-+#endif
-
- /*
- * notify the driver before the actual changes so it can
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -31,7 +31,6 @@
@@ -253,120 +843,259 @@
WLAN_STA_CLEAR_PS_FILT,
WLAN_STA_MFP,
WLAN_STA_BLOCK_BA,
---- a/net/mac80211/rate.h
-+++ b/net/mac80211/rate.h
-@@ -37,7 +37,7 @@ static inline void rate_control_tx_statu
- struct ieee80211_sta *ista = &sta->sta;
- void *priv_sta = sta->rate_ctrl_priv;
-
-- if (!ref)
-+ if (!ref || !test_sta_flag(sta, WLAN_STA_RATE_CONTROL))
- return;
+--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
+@@ -530,7 +530,11 @@ int ath9k_hw_process_rxdesc_edma(struct
+ */
+ if (rxsp->status11 & AR_CRCErr)
+ rxs->rs_status |= ATH9K_RXERR_CRC;
+- else if (rxsp->status11 & AR_PHYErr) {
++ else if (rxsp->status11 & AR_DecryptCRCErr)
++ rxs->rs_status |= ATH9K_RXERR_DECRYPT;
++ else if (rxsp->status11 & AR_MichaelErr)
++ rxs->rs_status |= ATH9K_RXERR_MIC;
++ if (rxsp->status11 & AR_PHYErr) {
+ phyerr = MS(rxsp->status11, AR_PHYErrCode);
+ /*
+ * If we reach a point here where AR_PostDelimCRCErr is
+@@ -552,11 +556,7 @@ int ath9k_hw_process_rxdesc_edma(struct
+ rxs->rs_status |= ATH9K_RXERR_PHY;
+ rxs->rs_phyerr = phyerr;
+ }
+-
+- } else if (rxsp->status11 & AR_DecryptCRCErr)
+- rxs->rs_status |= ATH9K_RXERR_DECRYPT;
+- else if (rxsp->status11 & AR_MichaelErr)
+- rxs->rs_status |= ATH9K_RXERR_MIC;
++ };
+ }
+
+ if (rxsp->status11 & AR_KeyMiss)
+--- a/drivers/net/wireless/ath/carl9170/tx.c
++++ b/drivers/net/wireless/ath/carl9170/tx.c
+@@ -1236,6 +1236,7 @@ static bool carl9170_tx_ps_drop(struct a
+ {
+ struct ieee80211_sta *sta;
+ struct carl9170_sta_info *sta_info;
++ struct ieee80211_tx_info *tx_info;
- ref->ops->tx_status(ref->priv, sband, ista, priv_sta, skb);
---- a/net/mac80211/main.c
-+++ b/net/mac80211/main.c
-@@ -915,6 +915,8 @@ int ieee80211_register_hw(struct ieee802
- wiphy_debug(local->hw.wiphy, "Failed to initialize wep: %d\n",
- result);
+ rcu_read_lock();
+ sta = __carl9170_get_tx_sta(ar, skb);
+@@ -1243,12 +1244,13 @@ static bool carl9170_tx_ps_drop(struct a
+ goto out_rcu;
-+ ieee80211_led_init(local);
-+
- rtnl_lock();
+ sta_info = (void *) sta->drv_priv;
+- if (unlikely(sta_info->sleeping)) {
+- struct ieee80211_tx_info *tx_info;
++ tx_info = IEEE80211_SKB_CB(skb);
- result = ieee80211_init_rate_ctrl_alg(local,
-@@ -936,8 +938,6 @@ int ieee80211_register_hw(struct ieee802
++ if (unlikely(sta_info->sleeping) &&
++ !(tx_info->flags & (IEEE80211_TX_CTL_NO_PS_BUFFER |
++ IEEE80211_TX_CTL_CLEAR_PS_FILT))) {
+ rcu_read_unlock();
- rtnl_unlock();
+- tx_info = IEEE80211_SKB_CB(skb);
+ if (tx_info->flags & IEEE80211_TX_CTL_AMPDU)
+ atomic_dec(&ar->tx_ampdu_upload);
-- ieee80211_led_init(local);
--
- local->network_latency_notifier.notifier_call =
- ieee80211_max_network_latency;
- result = pm_qos_add_notifier(PM_QOS_NETWORK_LATENCY,
---- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -489,8 +489,6 @@ static int ar5008_hw_rf_alloc_ext_banks(
- ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
- ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows);
- ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
-- ATH_ALLOC_BANK(ah->addac5416_21,
-- ah->iniAddac.ia_rows * ah->iniAddac.ia_columns);
- ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows);
+--- a/drivers/net/wireless/iwlegacy/4965-mac.c
++++ b/drivers/net/wireless/iwlegacy/4965-mac.c
+@@ -1694,7 +1694,7 @@ il4965_tx_skb(struct il_priv *il, struct
+ sta_priv = (void *)sta->drv_priv;
- return 0;
-@@ -519,7 +517,6 @@ static void ar5008_hw_rf_free_ext_banks(
- ATH_FREE_BANK(ah->analogBank6Data);
- ATH_FREE_BANK(ah->analogBank6TPCData);
- ATH_FREE_BANK(ah->analogBank7Data);
-- ATH_FREE_BANK(ah->addac5416_21);
- ATH_FREE_BANK(ah->bank6Temp);
-
- #undef ATH_FREE_BANK
-@@ -805,27 +802,7 @@ static int ar5008_hw_process_ini(struct
- if (ah->eep_ops->set_addac)
- ah->eep_ops->set_addac(ah, chan);
-
-- if (AR_SREV_5416_22_OR_LATER(ah)) {
-- REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
-- } else {
-- struct ar5416IniArray temp;
-- u32 addacSize =
-- sizeof(u32) * ah->iniAddac.ia_rows *
-- ah->iniAddac.ia_columns;
--
-- /* For AR5416 2.0/2.1 */
-- memcpy(ah->addac5416_21,
-- ah->iniAddac.ia_array, addacSize);
--
-- /* override CLKDRV value at [row, column] = [31, 1] */
-- (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0;
--
-- temp.ia_array = ah->addac5416_21;
-- temp.ia_columns = ah->iniAddac.ia_columns;
-- temp.ia_rows = ah->iniAddac.ia_rows;
-- REG_WRITE_ARRAY(&temp, 1, regWrites);
-- }
--
-+ REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
- REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC);
+ if (sta_priv && sta_priv->asleep &&
+- (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE)) {
++ (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) {
+ /*
+ * This sends an asynchronous command to the device,
+ * but we can rely on it being processed before the
+--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
++++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+@@ -322,7 +322,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
+ sta_priv = (void *)info->control.sta->drv_priv;
- ENABLE_REGWRITE_BUFFER(ah);
---- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
-@@ -180,6 +180,25 @@ static void ar9002_hw_init_mode_regs(str
- INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac,
- ARRAY_SIZE(ar5416Addac), 2);
+ if (sta_priv && sta_priv->asleep &&
+- (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE)) {
++ (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) {
+ /*
+ * This sends an asynchronous command to the device,
+ * but we can rely on it being processed before the
+@@ -331,6 +331,10 @@ int iwlagn_tx_skb(struct iwl_priv *priv,
+ * counter.
+ * For now set the counter to just 1 since we do not
+ * support uAPSD yet.
++ *
++ * FIXME: If we get two non-bufferable frames one
++ * after the other, we might only send out one of
++ * them because this is racy.
+ */
+ iwl_sta_modify_sleep_tx_count(priv, sta_id, 1);
}
+--- a/drivers/net/wireless/p54/txrx.c
++++ b/drivers/net/wireless/p54/txrx.c
+@@ -690,7 +690,7 @@ static void p54_tx_80211_header(struct p
+ if (!(info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ))
+ *flags |= P54_HDR_FLAG_DATA_OUT_SEQNR;
+
+- if (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE)
++ if (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)
+ *flags |= P54_HDR_FLAG_DATA_OUT_NOCANCEL;
+
+ if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT)
+--- a/include/net/mac80211.h
++++ b/include/net/mac80211.h
+@@ -341,9 +341,9 @@ struct ieee80211_bss_conf {
+ * used to indicate that a frame was already retried due to PS
+ * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211,
+ * used to indicate frame should not be encrypted
+- * @IEEE80211_TX_CTL_POLL_RESPONSE: This frame is a response to a poll
+- * frame (PS-Poll or uAPSD) and should be sent although the station
+- * is in powersave mode.
++ * @IEEE80211_TX_CTL_NO_PS_BUFFER: This frame is a response to a poll
++ * frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must
++ * be sent although the station is in powersave mode.
+ * @IEEE80211_TX_CTL_MORE_FRAMES: More frames will be passed to the
+ * transmit function after the current frame, this can be used
+ * by drivers to kick the DMA queue only if unset or when the
+@@ -399,7 +399,7 @@ enum mac80211_tx_control_flags {
+ IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14),
+ IEEE80211_TX_INTFL_RETRIED = BIT(15),
+ IEEE80211_TX_INTFL_DONT_ENCRYPT = BIT(16),
+- IEEE80211_TX_CTL_POLL_RESPONSE = BIT(17),
++ IEEE80211_TX_CTL_NO_PS_BUFFER = BIT(17),
+ IEEE80211_TX_CTL_MORE_FRAMES = BIT(18),
+ IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19),
+ /* hole at 20, use later */
+@@ -425,7 +425,7 @@ enum mac80211_tx_control_flags {
+ IEEE80211_TX_CTL_SEND_AFTER_DTIM | IEEE80211_TX_CTL_AMPDU | \
+ IEEE80211_TX_STAT_TX_FILTERED | IEEE80211_TX_STAT_ACK | \
+ IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_STAT_AMPDU_NO_BACK | \
+- IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_POLL_RESPONSE | \
++ IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_NO_PS_BUFFER | \
+ IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC | \
+ IEEE80211_TX_CTL_STBC | IEEE80211_TX_STATUS_EOSP)
+
+@@ -1634,7 +1634,7 @@ void ieee80211_free_txskb(struct ieee802
+ * the station sends a PS-Poll or a uAPSD trigger frame, mac80211
+ * will inform the driver of this with the @allow_buffered_frames
+ * callback; this callback is optional. mac80211 will then transmit
+- * the frames as usual and set the %IEEE80211_TX_CTL_POLL_RESPONSE
++ * the frames as usual and set the %IEEE80211_TX_CTL_NO_PS_BUFFER
+ * on each frame. The last frame in the service period (or the only
+ * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to
+ * indicate that it ends the service period; as this frame must have
+@@ -1642,6 +1642,9 @@ void ieee80211_free_txskb(struct ieee802
+ * When TX status is reported for this frame, the service period is
+ * marked has having ended and a new one can be started by the peer.
+ *
++ * Additionally, non-bufferable MMPDUs can also be transmitted by
++ * mac80211 with the %IEEE80211_TX_CTL_NO_PS_BUFFER set in them.
++ *
+ * Another race condition can happen on some devices like iwlwifi
+ * when there are frames queued for the station and it wakes up
+ * or polls; the frames that are already queued could end up being
+@@ -2140,7 +2143,7 @@ enum ieee80211_frame_release_type {
+ * @allow_buffered_frames: Prepare device to allow the given number of frames
+ * to go out to the given station. The frames will be sent by mac80211
+ * via the usual TX path after this call. The TX information for frames
+- * released will also have the %IEEE80211_TX_CTL_POLL_RESPONSE flag set
++ * released will also have the %IEEE80211_TX_CTL_NO_PS_BUFFER flag set
+ * and the last one will also have %IEEE80211_TX_STATUS_EOSP set. In case
+ * frames from multiple TIDs are released and the driver might reorder
+ * them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -1183,6 +1183,7 @@ void ieee80211_sta_rx_queued_mgmt(struct
+ struct sk_buff *skb);
+ void ieee80211_sta_reset_beacon_monitor(struct ieee80211_sub_if_data *sdata);
+ void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata);
++void ieee80211_mgd_teardown(struct ieee80211_sub_if_data *sdata);
+
+ /* IBSS code */
+ void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local);
+--- a/net/mac80211/mlme.c
++++ b/net/mac80211/mlme.c
+@@ -3496,6 +3496,19 @@ int ieee80211_mgd_disassoc(struct ieee80
+ return 0;
+ }
+
++void ieee80211_mgd_teardown(struct ieee80211_sub_if_data *sdata)
++{
++ struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
+
-+ /* iniAddac needs to be modified for these chips */
-+ if (AR_SREV_9160(ah) || !AR_SREV_5416_22_OR_LATER(ah)) {
-+ struct ar5416IniArray *addac = &ah->iniAddac;
-+ u32 size = sizeof(u32) * addac->ia_rows * addac->ia_columns;
-+ u32 *data;
-+
-+ data = kmalloc(size, GFP_KERNEL);
-+ if (!data)
-+ return;
-+
-+ memcpy(data, addac->ia_array, size);
-+ addac->ia_array = data;
++ mutex_lock(&ifmgd->mtx);
++ if (ifmgd->assoc_data)
++ ieee80211_destroy_assoc_data(sdata, false);
++ if (ifmgd->auth_data)
++ ieee80211_destroy_auth_data(sdata, false);
++ del_timer_sync(&ifmgd->timer);
++ mutex_unlock(&ifmgd->mtx);
++}
+
-+ if (!AR_SREV_5416_22_OR_LATER(ah)) {
-+ /* override CLKDRV value */
-+ INI_RA(addac, 31,1) = 0;
+ void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif,
+ enum nl80211_cqm_rssi_threshold_event rssi_event,
+ gfp_t gfp)
+--- a/net/mac80211/sta_info.c
++++ b/net/mac80211/sta_info.c
+@@ -865,8 +865,10 @@ int sta_info_flush(struct ieee80211_loca
+
+ mutex_lock(&local->sta_mtx);
+ list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
+- if (!sdata || sdata == sta->sdata)
++ if (!sdata || sdata == sta->sdata) {
+ WARN_ON(__sta_info_destroy(sta));
++ ret++;
+ }
-+ }
- }
+ }
+ mutex_unlock(&local->sta_mtx);
+
+@@ -1048,7 +1050,7 @@ static void ieee80211_send_null_response
+ * exchange. Also set EOSP to indicate this packet
+ * ends the poll/service period.
+ */
+- info->flags |= IEEE80211_TX_CTL_POLL_RESPONSE |
++ info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER |
+ IEEE80211_TX_STATUS_EOSP |
+ IEEE80211_TX_CTL_REQ_TX_STATUS;
- /* Support for Japan ch.14 (2484) spread */
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -940,7 +940,6 @@ struct ath_hw {
- u32 *analogBank6Data;
- u32 *analogBank6TPCData;
- u32 *analogBank7Data;
-- u32 *addac5416_21;
- u32 *bank6Temp;
-
- u8 txpower_limit;
+@@ -1175,7 +1177,7 @@ ieee80211_sta_ps_deliver_response(struct
+ * STA may still remain is PS mode after this frame
+ * exchange.
+ */
+- info->flags |= IEEE80211_TX_CTL_POLL_RESPONSE;
++ info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER;
+
+ /*
+ * Use MoreData flag to indicate whether there are
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -448,18 +448,23 @@ ieee80211_tx_h_unicast_ps_buf(struct iee
+ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
+ struct ieee80211_local *local = tx->local;
+
+- if (unlikely(!sta ||
+- ieee80211_is_probe_resp(hdr->frame_control) ||
+- ieee80211_is_auth(hdr->frame_control) ||
+- ieee80211_is_assoc_resp(hdr->frame_control) ||
+- ieee80211_is_reassoc_resp(hdr->frame_control)))
++ if (unlikely(!sta))
+ return TX_CONTINUE;
+
+ if (unlikely((test_sta_flag(sta, WLAN_STA_PS_STA) ||
+ test_sta_flag(sta, WLAN_STA_PS_DRIVER)) &&
+- !(info->flags & IEEE80211_TX_CTL_POLL_RESPONSE))) {
++ !(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) {
+ int ac = skb_get_queue_mapping(tx->skb);
+
++ /* only deauth, disassoc and action are bufferable MMPDUs */
++ if (ieee80211_is_mgmt(hdr->frame_control) &&
++ !ieee80211_is_deauth(hdr->frame_control) &&
++ !ieee80211_is_disassoc(hdr->frame_control) &&
++ !ieee80211_is_action(hdr->frame_control)) {
++ info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER;
++ return TX_CONTINUE;
++ }
++
+ #ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG
+ printk(KERN_DEBUG "STA %pM aid %d: PS buffer for AC %d\n",
+ sta->sta.addr, sta->sta.aid, ac);
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 242c40e05a..afe7841156 100644
--- a/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch
+++ b/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1454,15 +1454,6 @@ static int ath9k_add_interface(struct ie
+@@ -1450,15 +1450,6 @@ static int ath9k_add_interface(struct ie
}
}
@@ -16,7 +16,7 @@
ath_dbg(common, CONFIG, "Attach a VIF of type: %d\n", vif->type);
sc->nvifs++;
-@@ -1487,15 +1478,6 @@ static int ath9k_change_interface(struct
+@@ -1483,15 +1474,6 @@ static int ath9k_change_interface(struct
mutex_lock(&sc->mutex);
ath9k_ps_wakeup(sc);
diff --git a/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch b/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch
index fe225cd5a8..1dcb9b2448 100644
--- a/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch
+++ b/package/mac80211/patches/513-ath9k_channelbw_debugfs.patch
@@ -81,7 +81,7 @@
sc->debug.sampidx = 0;
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1559,7 +1559,7 @@ static void ath9k_disable_ps(struct ath_
+@@ -1555,7 +1555,7 @@ static void ath9k_disable_ps(struct ath_
}
@@ -90,7 +90,7 @@
{
struct ath_softc *sc = hw->priv;
struct ath_hw *ah = sc->sc_ah;
-@@ -1609,9 +1609,11 @@ static int ath9k_config(struct ieee80211
+@@ -1599,9 +1599,11 @@ static int ath9k_config(struct ieee80211
if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
struct ieee80211_channel *curchan = hw->conf.channel;
@@ -102,7 +102,7 @@
if (ah->curchan)
old_pos = ah->curchan - &ah->channels[0];
-@@ -1659,7 +1661,23 @@ static int ath9k_config(struct ieee80211
+@@ -1649,7 +1651,23 @@ static int ath9k_config(struct ieee80211
memset(&sc->survey[pos], 0, sizeof(struct survey_info));
}
diff --git a/package/mac80211/patches/521-mac80211_reduce_txqueuelen.patch b/package/mac80211/patches/521-mac80211_reduce_txqueuelen.patch
index 4e4dcb8d4e..bf3f89b5a2 100644
--- a/package/mac80211/patches/521-mac80211_reduce_txqueuelen.patch
+++ b/package/mac80211/patches/521-mac80211_reduce_txqueuelen.patch
@@ -1,6 +1,6 @@
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -686,6 +686,7 @@ static const struct net_device_ops ieee8
+@@ -688,6 +688,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/530-mac80211_cur_txpower.patch b/package/mac80211/patches/530-mac80211_cur_txpower.patch
index f34267421d..c7f901bfa2 100644
--- a/package/mac80211/patches/530-mac80211_cur_txpower.patch
+++ b/package/mac80211/patches/530-mac80211_cur_txpower.patch
@@ -11,7 +11,7 @@
u16 listen_interval;
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
-@@ -1739,7 +1739,7 @@ static int ieee80211_get_tx_power(struct
+@@ -1711,7 +1711,7 @@ static int ieee80211_get_tx_power(struct
{
struct ieee80211_local *local = wiphy_priv(wiphy);
diff --git a/package/mac80211/patches/531-ath9k_cur_txpower.patch b/package/mac80211/patches/531-ath9k_cur_txpower.patch
index 8fdd436cd9..35de441036 100644
--- a/package/mac80211/patches/531-ath9k_cur_txpower.patch
+++ b/package/mac80211/patches/531-ath9k_cur_txpower.patch
@@ -1,6 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1683,6 +1683,8 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1673,6 +1673,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
-@@ -1697,6 +1699,7 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1687,6 +1689,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/551-ath9k_per_chain_signal_strength.patch b/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch
index fd607dd385..f5ec64a52f 100644
--- a/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch
+++ b/package/mac80211/patches/551-ath9k_per_chain_signal_strength.patch
@@ -78,7 +78,7 @@
kfree(sta);
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
-@@ -508,6 +508,8 @@ struct station_parameters {
+@@ -518,6 +518,8 @@ struct station_parameters {
* @STATION_INFO_ASSOC_REQ_IES: @assoc_req_ies filled
* @STATION_INFO_STA_FLAGS: @sta_flags filled
* @STATION_INFO_BEACON_LOSS_COUNT: @beacon_loss_count filled
@@ -87,7 +87,7 @@
*/
enum station_info_flags {
STATION_INFO_INACTIVE_TIME = 1<<0,
-@@ -529,7 +531,9 @@ enum station_info_flags {
+@@ -539,7 +541,9 @@ enum station_info_flags {
STATION_INFO_CONNECTED_TIME = 1<<16,
STATION_INFO_ASSOC_REQ_IES = 1<<17,
STATION_INFO_STA_FLAGS = 1<<18,
@@ -98,7 +98,7 @@
};
/**
-@@ -609,6 +613,9 @@ struct sta_bss_parameters {
+@@ -619,6 +623,9 @@ struct sta_bss_parameters {
* @plink_state: mesh peer link state
* @signal: signal strength of last received packet in dBm
* @signal_avg: signal strength average in dBm
@@ -108,7 +108,7 @@
* @txrate: current unicast bitrate from this station
* @rxrate: current unicast bitrate to this station
* @rx_packets: packets received from this station
-@@ -640,6 +647,11 @@ struct station_info {
+@@ -650,6 +657,11 @@ struct station_info {
u8 plink_state;
s8 signal;
s8 signal_avg;
@@ -271,7 +271,7 @@
RX_SAMP_DBG(rate) = rs->rs_rate;
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
-@@ -1657,6 +1657,8 @@ enum nl80211_sta_bss_param {
+@@ -1661,6 +1661,8 @@ enum nl80211_sta_bss_param {
* @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected
* @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)
@@ -280,7 +280,7 @@
* @__NL80211_STA_INFO_AFTER_LAST: internal
* @NL80211_STA_INFO_MAX: highest possible station info attribute
*/
-@@ -1680,6 +1682,8 @@ enum nl80211_sta_info {
+@@ -1684,6 +1686,8 @@ enum nl80211_sta_info {
NL80211_STA_INFO_CONNECTED_TIME,
NL80211_STA_INFO_STA_FLAGS,
NL80211_STA_INFO_BEACON_LOSS,
@@ -291,7 +291,7 @@
__NL80211_STA_INFO_AFTER_LAST,
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
-@@ -2347,6 +2347,33 @@ nla_put_failure:
+@@ -2376,6 +2376,33 @@ nla_put_failure:
return false;
}
@@ -325,7 +325,7 @@
static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
int flags, struct net_device *dev,
const u8 *mac_addr, struct station_info *sinfo)
-@@ -2393,6 +2420,18 @@ static int nl80211_send_station(struct s
+@@ -2422,6 +2449,18 @@ static int nl80211_send_station(struct s
if (sinfo->filled & STATION_INFO_SIGNAL_AVG)
NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL_AVG,
sinfo->signal_avg);
diff --git a/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch b/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch
index d15b07da5c..801d53adc9 100644
--- a/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch
+++ b/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch
@@ -109,7 +109,7 @@
/*
* Device initialization/deinitialization handlers.
-@@ -705,6 +706,7 @@ enum rt2x00_capability_flags {
+@@ -706,6 +707,7 @@ enum rt2x00_capability_flags {
REQUIRE_SW_SEQNO,
REQUIRE_HT_TX_DESC,
REQUIRE_PS_AUTOWAKE,
@@ -117,7 +117,7 @@
/*
* Capabilities
-@@ -961,6 +963,11 @@ struct rt2x00_dev {
+@@ -960,6 +962,11 @@ struct rt2x00_dev {
const struct firmware *fw;
/*
@@ -239,7 +239,7 @@
.get_entry_state = rt2800pci_get_entry_state,
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
-@@ -1145,6 +1145,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
+@@ -1157,6 +1157,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
BIT(NL80211_IFTYPE_MESH_POINT) |
BIT(NL80211_IFTYPE_WDS);
@@ -250,10 +250,10 @@
/*
* Initialize work.
*/
-@@ -1261,6 +1265,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
- * Free queue structures.
+@@ -1280,6 +1284,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
*/
- rt2x00queue_free(rt2x00dev);
+ if (rt2x00dev->drv_data)
+ kfree(rt2x00dev->drv_data);
+
+ /*
+ * Free EEPROM image.
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 7d4e4fe803..5a373a7a7d 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
-@@ -611,6 +611,7 @@ CONFIG_RT2X00=y
+@@ -618,6 +618,7 @@ CONFIG_RT2X00=y
CONFIG_RT2X00_LIB=m
CONFIG_RT2800_LIB=m
CONFIG_RT2X00_LIB_FIRMWARE=y
diff --git a/package/mac80211/patches/608-rt2x00-allow_disabling_bands_through_platform_data.patch b/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch
index df8f44509e..9243c8be6d 100644
--- a/package/mac80211/patches/608-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
-@@ -420,6 +420,7 @@ struct hw_mode_spec {
+@@ -419,6 +419,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/607-rt2x00-dont-try-to-destroy-unallocated-workqueue.patch b/package/mac80211/patches/607-rt2x00-dont-try-to-destroy-unallocated-workqueue.patch
deleted file mode 100644
index f9d3ca1ad1..0000000000
--- a/package/mac80211/patches/607-rt2x00-dont-try-to-destroy-unallocated-workqueue.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/drivers/net/wireless/rt2x00/rt2x00dev.c
-+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
-@@ -1224,7 +1224,8 @@ void rt2x00lib_remove_dev(struct rt2x00_
- cancel_work_sync(&rt2x00dev->rxdone_work);
- cancel_work_sync(&rt2x00dev->txdone_work);
- }
-- destroy_workqueue(rt2x00dev->workqueue);
-+ if (rt2x00dev->workqueue)
-+ destroy_workqueue(rt2x00dev->workqueue);
-
- /*
- * Free the tx status fifo.
diff --git a/package/mac80211/patches/820-b43-add-antenna-control.patch b/package/mac80211/patches/820-b43-add-antenna-control.patch
index c1f7a6f137..7b08ded566 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. */
-@@ -3031,8 +3031,8 @@ static int b43_chip_init(struct b43_wlde
+@@ -3033,8 +3033,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);
-@@ -3775,7 +3775,6 @@ static int b43_op_config(struct ieee8021
+@@ -3777,7 +3777,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;
-@@ -3829,11 +3828,9 @@ static int b43_op_config(struct ieee8021
+@@ -3831,11 +3830,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) {
-@@ -4905,6 +4902,47 @@ static int b43_op_get_survey(struct ieee
+@@ -4907,6 +4904,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,
-@@ -4926,6 +4964,8 @@ static const struct ieee80211_ops b43_hw
+@@ -4928,6 +4966,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.
-@@ -5172,6 +5212,8 @@ static int b43_one_core_attach(struct b4
+@@ -5174,6 +5214,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;
-@@ -5260,6 +5302,9 @@ static struct b43_wl *b43_wireless_init(
+@@ -5262,6 +5304,9 @@ static struct b43_wl *b43_wireless_init(
BIT(NL80211_IFTYPE_WDS) |
BIT(NL80211_IFTYPE_ADHOC);
diff --git a/package/mac80211/patches/900-bash-location.patch b/package/mac80211/patches/900-bash-location.patch
deleted file mode 100644
index e8cab3337e..0000000000
--- a/package/mac80211/patches/900-bash-location.patch
+++ /dev/null
@@ -1,61 +0,0 @@
---- a/scripts/admin-clean.sh
-+++ b/scripts/admin-clean.sh
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/usr/bin/env bash
- if [ -d net ] ; then
- make clean
- fi
---- a/scripts/admin-refresh.sh
-+++ b/scripts/admin-refresh.sh
-@@ -1,3 +1,3 @@
--#!/bin/bash
-+#!/usr/bin/env bash
- ./scripts/admin-clean.sh $@
- ./scripts/admin-update.sh $@
---- a/scripts/admin-update.sh
-+++ b/scripts/admin-update.sh
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/usr/bin/env bash
- #
- # Copyright 2007, 2008, 2010 Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
- #
---- a/scripts/check_config.sh
-+++ b/scripts/check_config.sh
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/usr/bin/env bash
- # This script checks the compat-wireless configuration file and if changes were made
- # regenerates the compat_autoconf header.
-
---- a/scripts/driver-select
-+++ b/scripts/driver-select
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/usr/bin/env bash
- # Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
- #
- # This script allows you to select your compat-wireless driver and
---- a/scripts/gen-compat-autoconf.sh
-+++ b/scripts/gen-compat-autoconf.sh
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/usr/bin/env bash
- #
- # Copyright 2007 Luis R. Rodriguez <mcgrof@winlab.rutgers.edu>
- #
---- a/scripts/gen-stable-release.sh
-+++ b/scripts/gen-stable-release.sh
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/usr/bin/env bash
- # Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
- #
- # You can use this to make stable compat-wireless releases
---- a/scripts/skip-colors
-+++ b/scripts/skip-colors
-@@ -1,2 +1,2 @@
--#!/bin/bash
-+#!/usr/bin/env bash
- perl -pe 's|(\e)\[(\d+)(;*)(\d*)(\w)||g'