diff options
Diffstat (limited to 'package')
34 files changed, 924 insertions, 301 deletions
diff --git a/package/mac80211/Makefile b/package/mac80211/Makefile index a1edc717f..6b0e9c855 100644 --- a/package/mac80211/Makefile +++ b/package/mac80211/Makefile @@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk  PKG_NAME:=mac80211 -PKG_VERSION:=2012-02-06 -PKG_RELEASE:=4 +PKG_VERSION:=2012-02-23 +PKG_RELEASE:=1  PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources -PKG_MD5SUM:=fae71c35ee3f3de6329f2db7aed6d265 +PKG_MD5SUM:=dc01b316954e7c9f2ea50c09bb68138e  PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2  PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION) @@ -1303,7 +1303,7 @@ endef  ifneq ($(CONFIG_PACKAGE_kmod-cfg80211)$(CONFIG_PACKAGE_kmod-lib80211),)   define Build/Compile/kmod  	rm -rf $(PKG_BUILD_DIR)/modules -	$(MAKE) $(PKG_JOBS) -C "$(PKG_BUILD_DIR)" $(MAKE_OPTS) all +	$(MAKE) $(PKG_JOBS) -C "$(PKG_BUILD_DIR)" $(MAKE_OPTS) modules   endef  endif diff --git a/package/mac80211/patches/000-disable_ethernet.patch b/package/mac80211/patches/000-disable_ethernet.patch index be1f4bdb4..a6d708ec5 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 d6242587f..8b5f3e60c 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 4380d9391..94249413b 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 d93b0cd2c..fc433d1c0 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 a67168af6..9b39e76be 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 9ac0f0e92..f79cbcbe1 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 b8c785388..750b95d2d 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 bdefe20df..aaa27d00f 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 2e3753e13..4fe13d45c 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 ce833cff6..3a1f912f1 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 b1ee2cba2..b724d98ae 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 0ff299290..4340dcc1e 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 ecad73168..259fe7fed 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 2035d60f0..d356651a9 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 7fef47f88..fd818adf1 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 a11d62571..40a5cfc2d 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 fb5ae7d62..39478ee8c 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 9700fb320..c60580148 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 9dfa90af3..000000000 --- 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 bc4b40a52..bc4b40a52 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 93773d7eb..219db50c2 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 242c40e05..afe784115 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 fe225cd5a..1dcb9b244 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 4e4dcb8d4..bf3f89b5a 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 f34267421..c7f901bfa 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 8fdd436cd..35de44103 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 fd607dd38..f5ec64a52 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 d15b07da5..801d53adc 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 7d4e4fe80..5a373a7a7 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 df8f44509..9243c8be6 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 f9d3ca1ad..000000000 --- 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 c1f7a6f13..7b08ded56 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 e8cab3337..000000000 --- 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'  | 
