Changeset 31322


Ignore:
Timestamp:
2012-04-16T23:08:41+02:00 (6 years ago)
Author:
nbd
Message:

mac80211: update to wireless-testing 2012-04-13

Location:
trunk/package/mac80211
Files:
2 added
10 deleted
40 edited
22 moved

Legend:

Unmodified
Added
Removed
  • trunk/package/mac80211/Makefile

    r31277 r31322  
    1111PKG_NAME:=mac80211 
    1212 
    13 PKG_VERSION:=2012-02-27 
     13PKG_VERSION:=2012-04-13 
    1414PKG_RELEASE:=1 
    1515PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources 
    16 PKG_MD5SUM:=ccd51c46813c25090ce657c8b7c67615 
     16PKG_MD5SUM:=0f6d364e5261fd3d26291b45f0363fd1 
    1717 
    1818PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2 
     
    12491249        CONFIG_USB_USBNET= \ 
    12501250        CONFIG_AT76C50X_USB= \ 
     1251        CONFIG_WL_TI=$(if $(CONFIG_PACKAGE_kmod-wl12xx),m) \ 
     1252        CONFIG_WLCORE=$(if $(CONFIG_PACKAGE_kmod-wl12xx),m) \ 
    12511253        CONFIG_WL12XX=$(if $(CONFIG_PACKAGE_kmod-wl12xx),m) \ 
    1252         CONFIG_COMPAT_WL12XX_SDIO=$(if $(CONFIG_PACKAGE_kmod-wl12xx),m) \ 
     1254        CONFIG_WLCORE_SDIO=$(if $(CONFIG_PACKAGE_kmod-wl12xx),m) \ 
    12531255        CONFIG_EEPROM_93CX6= \ 
    12541256        CONFIG_HERMES=$(if $(CONFIG_PACKAGE_kmod-net-hermes),m) \ 
  • trunk/package/mac80211/patches/000-disable_ethernet.patch

    r30742 r31322  
    11--- a/Makefile 
    22+++ b/Makefile 
    3 @@ -26,9 +26,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) += 
     3@@ -29,9 +29,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) += 
    44  
    55 obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/ 
  • trunk/package/mac80211/patches/001-disable_b44.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -368,8 +368,8 @@ CONFIG_B43_BCMA_EXTRA=y 
     3@@ -362,8 +362,8 @@ export CONFIG_B43_BCMA_EXTRA=y 
    44  
    5  CONFIG_P54_PCI=m 
     5 export CONFIG_P54_PCI=m 
    66  
    7 -CONFIG_B44=m 
    8 -CONFIG_B44_PCI=y 
    9 +# CONFIG_B44=m 
    10 +# CONFIG_B44_PCI=y 
     7-export CONFIG_B44=m 
     8-export CONFIG_B44_PCI=y 
     9+# export CONFIG_B44=m 
     10+# export CONFIG_B44_PCI=y 
    1111  
    12  CONFIG_RTL8180=m 
     12 export CONFIG_RTL8180=m 
    1313  
  • trunk/package/mac80211/patches/002-disable_rfkill.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -83,7 +83,7 @@ endif # build check 
     3@@ -77,7 +77,7 @@ endif # build check 
    44 endif # kernel Makefile check 
    55  
    66 # These both are needed by compat-wireless || compat-bluetooth so enable them 
    7 - CONFIG_COMPAT_RFKILL=y 
    8 +# CONFIG_COMPAT_RFKILL=y 
     7- export CONFIG_COMPAT_RFKILL=y 
     8+# export CONFIG_COMPAT_RFKILL=y 
    99  
    1010 ifeq ($(CONFIG_MAC80211),y) 
    1111 $(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") 
    12 @@ -674,10 +674,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27 
     12@@ -668,10 +668,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27 
    1313 # We need the backported rfkill module on kernel < 2.6.31. 
    1414 # In more recent kernel versions use the in kernel rfkill module. 
    1515 ifdef CONFIG_COMPAT_KERNEL_2_6_31 
    16 -CONFIG_RFKILL_BACKPORT=m 
    17 +# CONFIG_RFKILL_BACKPORT=m 
     16-export CONFIG_RFKILL_BACKPORT=m 
     17+#export CONFIG_RFKILL_BACKPORT=m 
    1818 ifdef CONFIG_LEDS_TRIGGERS 
    19 -CONFIG_RFKILL_BACKPORT_LEDS=y 
    20 +# CONFIG_RFKILL_BACKPORT_LEDS=y 
     19-export CONFIG_RFKILL_BACKPORT_LEDS=y 
     20+#export CONFIG_RFKILL_BACKPORT_LEDS=y 
    2121 endif #CONFIG_LEDS_TRIGGERS 
    22 -CONFIG_RFKILL_BACKPORT_INPUT=y 
    23 +# CONFIG_RFKILL_BACKPORT_INPUT=y 
     22-export CONFIG_RFKILL_BACKPORT_INPUT=y 
     23+#export CONFIG_RFKILL_BACKPORT_INPUT=y 
    2424 endif #CONFIG_COMPAT_KERNEL_2_6_31 
    2525  
  • trunk/package/mac80211/patches/003-disable_bt.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -105,8 +105,8 @@ ifndef CONFIG_COMPAT_KERNEL_2_6_27 
     3@@ -99,8 +99,8 @@ ifndef CONFIG_COMPAT_KERNEL_2_6_27 
    44 ifeq ($(CONFIG_BT),y) 
    55 # we'll ignore compiling bluetooth 
    66 else 
    7 - CONFIG_COMPAT_BLUETOOTH=y 
    8 - CONFIG_COMPAT_BLUETOOTH_MODULES=m 
    9 +# CONFIG_COMPAT_BLUETOOTH=y 
    10 +# CONFIG_COMPAT_BLUETOOTH_MODULES=m 
     7- export CONFIG_COMPAT_BLUETOOTH=y 
     8- export CONFIG_COMPAT_BLUETOOTH_MODULES=m 
     9+# export CONFIG_COMPAT_BLUETOOTH=y 
     10+# export CONFIG_COMPAT_BLUETOOTH_MODULES=m 
    1111 endif 
    1212 endif #CONFIG_COMPAT_KERNEL_2_6_27 
  • trunk/package/mac80211/patches/005-disable_ssb_build.patch

    r30742 r31322  
    11--- a/Makefile 
    22+++ b/Makefile 
    3 @@ -26,7 +26,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) += 
     3@@ -29,7 +29,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) += 
    44  
    55 obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/ 
     
    1111--- a/config.mk 
    1212+++ b/config.mk 
    13 @@ -9,7 +9,6 @@ ifeq ($(wildcard $(KLIB_BUILD)/.config), 
    14   CONFIG_PCI=y 
    15   CONFIG_USB=y 
    16   CONFIG_PCMCIA=y 
    17 - CONFIG_SSB=m 
     13@@ -3,7 +3,7 @@ ifeq ($(wildcard $(KLIB_BUILD)/.config), 
     14  export CONFIG_PCI=y 
     15  export CONFIG_USB=y 
     16  export CONFIG_PCMCIA=y 
     17- export CONFIG_SSB=m 
     18+# export CONFIG_SSB=m 
    1819 else 
    1920 include $(KLIB_BUILD)/.config 
    2021 endif 
    21 @@ -344,7 +343,8 @@ CONFIG_IPW2200_QOS=y 
     22@@ -338,7 +338,8 @@ export CONFIG_IPW2200_QOS=y 
    2223 # % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface 
    2324 endif #CONFIG_WIRELESS_EXT 
     
    2728+ifdef __CONFIG_SSB 
    2829 # Sonics Silicon Backplane 
    29  CONFIG_SSB_SPROM=y 
     30 export CONFIG_SSB_SPROM=y 
    3031  
    31 @@ -357,7 +357,7 @@ endif #CONFIG_PCMCIA 
     32@@ -351,7 +352,7 @@ endif #CONFIG_PCMCIA 
    3233 # CONFIG_SSB_DEBUG=y 
    33  CONFIG_SSB_DRIVER_PCICORE=y 
    34  CONFIG_B43_SSB=y 
     34 export CONFIG_SSB_DRIVER_PCICORE=y 
     35 export CONFIG_B43_SSB=y 
    3536-endif #CONFIG_SSB 
    3637+endif #__CONFIG_SSB 
    3738  
    38  CONFIG_BCMA=m 
    39  CONFIG_BCMA_BLOCKIO=y 
    40 @@ -568,7 +568,6 @@ endif #CONFIG_SPI_MASTER end of SPI driv 
     39 export CONFIG_BCMA=m 
     40 export CONFIG_BCMA_BLOCKIO=y 
     41@@ -562,7 +563,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv 
    4142  
    4243 ifdef CONFIG_MMC 
    4344  
    44 -CONFIG_SSB_SDIOHOST=y 
    45  CONFIG_B43_SDIO=y 
     45-export CONFIG_SSB_SDIOHOST=y 
     46+# export CONFIG_SSB_SDIOHOST=y 
     47 export CONFIG_B43_SDIO=y 
    4648  
    4749 ifdef CONFIG_CRC7 
  • trunk/package/mac80211/patches/006-disable_bcma_build.patch

    r30742 r31322  
    11--- a/Makefile 
    22+++ b/Makefile 
    3 @@ -26,7 +26,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) += 
     3@@ -29,7 +29,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) += 
    44  
    55 obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/ 
     
    1111--- a/config.mk 
    1212+++ b/config.mk 
    13 @@ -359,12 +359,12 @@ CONFIG_SSB_DRIVER_PCICORE=y 
    14  CONFIG_B43_SSB=y 
     13@@ -354,12 +354,12 @@ export CONFIG_SSB_DRIVER_PCICORE=y 
     14 export CONFIG_B43_SSB=y 
    1515 endif #__CONFIG_SSB 
    1616  
    17 -CONFIG_BCMA=m 
    18 -CONFIG_BCMA_BLOCKIO=y 
    19 -CONFIG_BCMA_HOST_PCI=y 
    20 +# CONFIG_BCMA=m 
    21 +# CONFIG_BCMA_BLOCKIO=y 
    22 +# CONFIG_BCMA_HOST_PCI=y 
     17-export CONFIG_BCMA=m 
     18-export CONFIG_BCMA_BLOCKIO=y 
     19-export CONFIG_BCMA_HOST_PCI=y 
     20+# export CONFIG_BCMA=m 
     21+# export CONFIG_BCMA_BLOCKIO=y 
     22+# export CONFIG_BCMA_HOST_PCI=y 
    2323 # CONFIG_BCMA_DEBUG=y 
    24 -CONFIG_B43_BCMA=y 
    25 -CONFIG_B43_BCMA_EXTRA=y 
    26 +# CONFIG_B43_BCMA=y 
    27 +# CONFIG_B43_BCMA_EXTRA=y 
     24-export CONFIG_B43_BCMA=y 
     25-export CONFIG_B43_BCMA_EXTRA=y 
     26+# export CONFIG_B43_BCMA=y 
     27+# export CONFIG_B43_BCMA_EXTRA=y 
    2828  
    29  CONFIG_P54_PCI=m 
     29 export CONFIG_P54_PCI=m 
    3030  
  • trunk/package/mac80211/patches/007-remove_misc_drivers.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -242,7 +242,7 @@ $(warning "WARNING: CONFIG_CFG80211_WEXT 
     3@@ -237,7 +237,7 @@ $(warning "WARNING: CONFIG_CFG80211_WEXT 
    44 endif #CONFIG_WIRELESS_EXT 
    55  
    66 ifdef CONFIG_STAGING 
    7 -CONFIG_COMPAT_STAGING=m 
    8 +# CONFIG_COMPAT_STAGING=m 
     7-export CONFIG_COMPAT_STAGING=m 
     8+# export CONFIG_COMPAT_STAGING=m 
    99 endif #CONFIG_STAGING 
    1010  
    1111 # mac80211 test driver 
    12 @@ -396,15 +396,15 @@ endif #CONFIG_CRC_ITU_T 
    13  CONFIG_MWL8K=m 
     12@@ -391,15 +391,15 @@ endif #CONFIG_CRC_ITU_T 
     13 export CONFIG_MWL8K=m 
    1414  
    1515 # Ethernet drivers go here 
    16 -CONFIG_ATL1=m 
    17 -CONFIG_ATL2=m 
    18 -CONFIG_ATL1E=m 
    19 +# CONFIG_ATL1=m 
    20 +# CONFIG_ATL2=m 
    21 +# CONFIG_ATL1E=m 
     16-export CONFIG_ATL1=m 
     17-export CONFIG_ATL2=m 
     18-export CONFIG_ATL1E=m 
     19+# export CONFIG_ATL1=m 
     20+# export CONFIG_ATL2=m 
     21+# export CONFIG_ATL1E=m 
    2222 ifdef CONFIG_COMPAT_KERNEL_2_6_27 
    23 -CONFIG_ATL1C=n 
    24 -CONFIG_ALX=m 
    25 +# CONFIG_ATL1C=n 
    26 +# CONFIG_ALX=m 
     23-export CONFIG_ATL1C=n 
     24-export CONFIG_ALX=m 
     25+# export CONFIG_ATL1C=n 
     26+# export CONFIG_ALX=m 
    2727 else #CONFIG_COMPAT_KERNEL_2_6_27 
    28 -CONFIG_ATL1C=n 
    29 -CONFIG_ALX=m 
    30 +# CONFIG_ATL1C=n 
    31 +# CONFIG_ALX=m 
     28-export CONFIG_ATL1C=n 
     29-export CONFIG_ALX=m 
     30+# export CONFIG_ATL1C=n 
     31+# export CONFIG_ALX=m 
    3232 endif #CONFIG_COMPAT_KERNEL_2_6_27 
    3333  
    3434 ifdef CONFIG_WIRELESS_EXT 
    35 @@ -465,21 +465,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29 
     35@@ -460,21 +460,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29 
    3636 # Note: this depends on CONFIG_USB_NET_RNDIS_HOST and CONFIG_USB_NET_CDCETHER 
    3737 # it also requires new RNDIS_HOST and CDC_ETHER modules which we add 
    3838 ifdef CONFIG_COMPAT_KERNEL_2_6_29 
    39 -CONFIG_USB_COMPAT_USBNET=n 
    40 -CONFIG_USB_NET_COMPAT_RNDIS_HOST=n 
    41 -CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n 
    42 -CONFIG_USB_NET_COMPAT_CDCETHER=n 
    43 +# CONFIG_USB_COMPAT_USBNET=n 
    44 +# CONFIG_USB_NET_COMPAT_RNDIS_HOST=n 
    45 +# CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n 
    46 +# CONFIG_USB_NET_COMPAT_CDCETHER=n 
     39-export CONFIG_USB_COMPAT_USBNET=n 
     40-export CONFIG_USB_NET_COMPAT_RNDIS_HOST=n 
     41-export CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n 
     42-export CONFIG_USB_NET_COMPAT_CDCETHER=n 
     43+# export CONFIG_USB_COMPAT_USBNET=n 
     44+# export CONFIG_USB_NET_COMPAT_RNDIS_HOST=n 
     45+# export CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n 
     46+# export CONFIG_USB_NET_COMPAT_CDCETHER=n 
    4747 else #CONFIG_COMPAT_KERNEL_2_6_29 
    48 -CONFIG_USB_COMPAT_USBNET=m 
    49 +# CONFIG_USB_COMPAT_USBNET=m 
     48-export CONFIG_USB_COMPAT_USBNET=m 
     49+# export CONFIG_USB_COMPAT_USBNET=m 
    5050 ifdef CONFIG_USB_NET_CDCETHER 
    51 -CONFIG_USB_NET_COMPAT_RNDIS_HOST=m 
    52 -CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m 
    53 +# CONFIG_USB_NET_COMPAT_RNDIS_HOST=m 
    54 +# CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m 
     51-export CONFIG_USB_NET_COMPAT_RNDIS_HOST=m 
     52-export CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m 
     53+# export CONFIG_USB_NET_COMPAT_RNDIS_HOST=m 
     54+# export CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m 
    5555 endif #CONFIG_USB_NET_CDCETHER 
    5656 ifdef CONFIG_USB_NET_CDCETHER_MODULE 
    57 -CONFIG_USB_NET_COMPAT_RNDIS_HOST=m 
    58 -CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m 
    59 +# CONFIG_USB_NET_COMPAT_RNDIS_HOST=m 
    60 +# CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m 
     57-export CONFIG_USB_NET_COMPAT_RNDIS_HOST=m 
     58-export CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m 
     59+# export CONFIG_USB_NET_COMPAT_RNDIS_HOST=m 
     60+# export CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m 
    6161 endif #CONFIG_USB_NET_CDCETHER 
    62 -CONFIG_USB_NET_COMPAT_CDCETHER=m 
    63 +# CONFIG_USB_NET_COMPAT_CDCETHER=m 
     62-export CONFIG_USB_NET_COMPAT_CDCETHER=m 
     63+# export CONFIG_USB_NET_COMPAT_CDCETHER=m 
    6464 endif #CONFIG_COMPAT_KERNEL_2_6_29 
    6565  
  • trunk/package/mac80211/patches/008-disable_mesh.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -180,7 +180,7 @@ CONFIG_MAC80211_LEDS=y 
     3@@ -175,7 +175,7 @@ export CONFIG_MAC80211_LEDS=y 
    44 endif #CONFIG_LEDS_TRIGGERS 
    55  
    66 # enable mesh networking too 
    7 -CONFIG_MAC80211_MESH=y 
    8 +# CONFIG_MAC80211_MESH=y 
     7-export CONFIG_MAC80211_MESH=y 
     8+# export CONFIG_MAC80211_MESH=y 
    99  
    10  CONFIG_CFG80211=m 
    11  CONFIG_CFG80211_DEFAULT_PS=y 
     10 export CONFIG_CFG80211=m 
     11 export CONFIG_CFG80211_DEFAULT_PS=y 
  • trunk/package/mac80211/patches/009-remove_mac80211_module_dependence.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -58,7 +58,7 @@ endif 
     3@@ -53,7 +53,7 @@ endif 
    44 ifeq ($(KERNEL_VERSION),2) 
    55 ifeq ($(shell test $(KERNEL_VERSION) -eq 2 -a $(KERNEL_26SUBLEVEL) -ge 27 -a $(KERNEL_26SUBLEVEL) -le 31 && echo yes),yes) 
  • trunk/package/mac80211/patches/010-no_pcmcia.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -8,7 +8,7 @@ ifeq ($(wildcard $(KLIB_BUILD)/.config), 
     3@@ -2,7 +2,7 @@ ifeq ($(wildcard $(KLIB_BUILD)/.config), 
    44 # These will be ignored by compat autoconf 
    5   CONFIG_PCI=y 
    6   CONFIG_USB=y 
    7 - CONFIG_PCMCIA=y 
    8 +# CONFIG_PCMCIA=y 
     5  export CONFIG_PCI=y 
     6  export CONFIG_USB=y 
     7- export CONFIG_PCMCIA=y 
     8+# export CONFIG_PCMCIA=y 
     9 # export CONFIG_SSB=m 
    910 else 
    1011 include $(KLIB_BUILD)/.config 
    11  endif 
    12 @@ -294,7 +294,7 @@ CONFIG_B43=m 
    13  CONFIG_B43_HWRNG=y 
    14  CONFIG_B43_PCI_AUTOSELECT=y 
     12@@ -289,7 +289,7 @@ export CONFIG_B43=m 
     13 export CONFIG_B43_HWRNG=y 
     14 export CONFIG_B43_PCI_AUTOSELECT=y 
    1515 ifdef CONFIG_PCMCIA 
    16 -CONFIG_B43_PCMCIA=y 
    17 +# CONFIG_B43_PCMCIA=y 
     16-export CONFIG_B43_PCMCIA=y 
     17+# export CONFIG_B43_PCMCIA=y 
    1818 endif #CONFIG_PCMCIA 
    1919 ifdef CONFIG_MAC80211_LEDS 
    20  CONFIG_B43_LEDS=y 
     20 export CONFIG_B43_LEDS=y 
  • trunk/package/mac80211/patches/011-no_sdio.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -568,7 +568,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv 
    4   
     3@@ -564,7 +564,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv 
    54 ifdef CONFIG_MMC 
    65  
    7 -CONFIG_B43_SDIO=y 
    8 +# CONFIG_B43_SDIO=y 
     6 # export CONFIG_SSB_SDIOHOST=y 
     7-export CONFIG_B43_SDIO=y 
     8+# export CONFIG_B43_SDIO=y 
    99  
    1010 ifdef CONFIG_CRC7 
  • trunk/package/mac80211/patches/013-disable_b43_nphy.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -300,8 +300,8 @@ ifdef CONFIG_MAC80211_LEDS 
    4  CONFIG_B43_LEDS=y 
     3@@ -295,8 +295,8 @@ ifdef CONFIG_MAC80211_LEDS 
     4 export CONFIG_B43_LEDS=y 
    55 endif #CONFIG_MAC80211_LEDS 
    6  CONFIG_B43_PHY_LP=y 
    7 -CONFIG_B43_PHY_N=y 
    8 -CONFIG_B43_PHY_HT=y 
    9 +# CONFIG_B43_PHY_N=y 
    10 +# CONFIG_B43_PHY_HT=y 
     6 export CONFIG_B43_PHY_LP=y 
     7-export CONFIG_B43_PHY_N=y 
     8-export CONFIG_B43_PHY_HT=y 
     9+# export CONFIG_B43_PHY_N=y 
     10+# export CONFIG_B43_PHY_HT=y 
    1111 # CONFIG_B43_PHY_LCN=y 
    1212 # CONFIG_B43_DEBUG=y 
  • trunk/package/mac80211/patches/015-remove-rt2x00-options.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -375,7 +375,7 @@ CONFIG_RTL8180=m 
     3@@ -370,7 +370,7 @@ export CONFIG_RTL8180=m 
    44  
    5  CONFIG_ADM8211=m 
     5 export CONFIG_ADM8211=m 
    66  
    7 -CONFIG_RT2X00_LIB_PCI=m 
    8 +# CONFIG_RT2X00_LIB_PCI=m 
    9  CONFIG_RT2400PCI=m 
    10  CONFIG_RT2500PCI=m 
     7-export CONFIG_RT2X00_LIB_PCI=m 
     8+# export CONFIG_RT2X00_LIB_PCI=m 
     9 export CONFIG_RT2400PCI=m 
     10 export CONFIG_RT2500PCI=m 
    1111 ifdef CONFIG_CRC_CCITT 
    12 @@ -517,7 +517,7 @@ CONFIG_RT2800USB_RT35XX=y 
    13  CONFIG_RT2800USB_RT53XX=y 
    14  CONFIG_RT2800USB_UNKNOWN=y 
     12@@ -512,7 +512,7 @@ export CONFIG_RT2800USB_RT35XX=y 
     13 export CONFIG_RT2800USB_RT53XX=y 
     14 export CONFIG_RT2800USB_UNKNOWN=y 
    1515 endif #CONFIG_CRC_CCITT 
    16 -CONFIG_RT2X00_LIB_USB=m 
    17 +# CONFIG_RT2X00_LIB_USB=m 
     16-export CONFIG_RT2X00_LIB_USB=m 
     17+# export CONFIG_RT2X00_LIB_USB=m 
    1818 NEED_RT2X00=y 
    1919 # RT73USB requires firmware 
  • trunk/package/mac80211/patches/016-remove_pid_algo.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -172,7 +172,7 @@ CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y 
     3@@ -167,7 +167,7 @@ export CONFIG_MAC80211_RC_DEFAULT_MINSTR 
    44 # This is the one used by our compat-wireless net/mac80211/rate.c 
    55 # in case you have and old kernel which is overriding this to pid. 
    6  CONFIG_COMPAT_MAC80211_RC_DEFAULT=minstrel_ht 
    7 -CONFIG_MAC80211_RC_PID=y 
    8 +# CONFIG_MAC80211_RC_PID=y 
    9  CONFIG_MAC80211_RC_MINSTREL=y 
    10  CONFIG_MAC80211_RC_MINSTREL_HT=y 
     6 export CONFIG_COMPAT_MAC80211_RC_DEFAULT=minstrel_ht 
     7-export CONFIG_MAC80211_RC_PID=y 
     8+# export CONFIG_MAC80211_RC_PID=y 
     9 export CONFIG_MAC80211_RC_MINSTREL=y 
     10 export CONFIG_MAC80211_RC_MINSTREL_HT=y 
    1111 ifdef CONFIG_LEDS_TRIGGERS 
  • trunk/package/mac80211/patches/017-remove_ath9k_rc.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -266,7 +266,7 @@ CONFIG_ATH9K_COMMON=m 
     3@@ -261,7 +261,7 @@ export CONFIG_ATH9K_COMMON=m 
    44 # as default once we get minstrel properly tested and blessed by 
    55 # our systems engineering team. CCK rates also need to be used 
    66 # for long range considerations. 
    7 -CONFIG_ATH9K_RATE_CONTROL=y 
    8 +# CONFIG_ATH9K_RATE_CONTROL=y 
     7-export CONFIG_COMPAT_ATH9K_RATE_CONTROL=y 
     8+# export CONFIG_COMPAT_ATH9K_RATE_CONTROL=y 
    99  
    10  CONFIG_ATH9K_BTCOEX_SUPPORT=y 
     10 export CONFIG_ATH9K_BTCOEX_SUPPORT=y 
    1111  
  • trunk/package/mac80211/patches/019-remove_ath5k_pci_option.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -273,7 +273,7 @@ CONFIG_ATH9K_BTCOEX_SUPPORT=y 
     3@@ -268,7 +268,7 @@ export CONFIG_ATH9K_BTCOEX_SUPPORT=y 
    44 # PCI Drivers 
    55 ifdef CONFIG_PCI 
    66  
    7 -CONFIG_ATH5K_PCI=y 
    8 +# CONFIG_ATH5K_PCI=y 
    9  CONFIG_ATH9K_PCI=y 
     7-export CONFIG_ATH5K_PCI=y 
     8+# export CONFIG_ATH5K_PCI=y 
     9 export CONFIG_ATH9K_PCI=y 
    1010  
    11  CONFIG_IWLWIFI=m 
     11 export CONFIG_IWLWIFI=m 
  • trunk/package/mac80211/patches/022-remove_crc8_and_cordic.patch

    r30643 r31322  
    11--- a/compat/Makefile 
    22+++ b/compat/Makefile 
    3 @@ -36,8 +36,6 @@ compat-$(CONFIG_COMPAT_KERNEL_2_6_39) += 
    4  compat-$(CONFIG_COMPAT_KERNEL_3_0) += compat-3.0.o 
    5  compat-$(CONFIG_COMPAT_KERNEL_3_2) += compat-3.2.o 
     3@@ -38,8 +38,6 @@ compat-$(CONFIG_COMPAT_KERNEL_3_2) += co 
     4 compat-$(CONFIG_COMPAT_KERNEL_3_3) += compat-3.3.o 
     5 compat-$(CONFIG_COMPAT_KERNEL_3_5) += compat-3.5.o 
    66  
    77-compat-$(CONFIG_COMPAT_CORDIC) += cordic.o 
  • trunk/package/mac80211/patches/023-ath9k_disable_btcoex.patch

    r30765 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -268,7 +268,7 @@ CONFIG_ATH9K_COMMON=m 
     3@@ -263,7 +263,7 @@ export CONFIG_ATH9K_COMMON=m 
    44 # for long range considerations. 
    5  # CONFIG_ATH9K_RATE_CONTROL=y 
     5 # export CONFIG_COMPAT_ATH9K_RATE_CONTROL=y 
    66  
    7 -CONFIG_ATH9K_BTCOEX_SUPPORT=y 
    8 +# CONFIG_ATH9K_BTCOEX_SUPPORT=y 
     7-export CONFIG_ATH9K_BTCOEX_SUPPORT=y 
     8+# export CONFIG_ATH9K_BTCOEX_SUPPORT=y 
    99  
    1010 # PCI Drivers 
  • trunk/package/mac80211/patches/050-compat_firmware.patch

    r29436 r31322  
    1818--- a/compat/compat_firmware_class.c 
    1919+++ b/compat/compat_firmware_class.c 
    20 @@ -741,19 +741,16 @@ request_firmware_nowait( 
     20@@ -741,19 +741,16 @@ compat_request_firmware_nowait( 
    2121        return 0; 
    2222 } 
     
    3737-module_exit(firmware_class_exit); 
    3838- 
    39  EXPORT_SYMBOL(release_firmware); 
    40  EXPORT_SYMBOL(request_firmware); 
    41  EXPORT_SYMBOL(request_firmware_nowait); 
     39 EXPORT_SYMBOL_GPL(release_firmware); 
     40 EXPORT_SYMBOL_GPL(request_firmware); 
     41 EXPORT_SYMBOL_GPL(request_firmware_nowait); 
    4242--- a/compat/main.c 
    4343+++ b/compat/main.c 
    44 @@ -32,6 +32,17 @@ module_param(compat_version, charp, 0400 
    45  MODULE_PARM_DESC(compat_version, 
    46                  "Version of the kernel compat backport work"); 
     44@@ -37,6 +37,17 @@ void compat_dependency_symbol(void) 
     45 } 
     46 EXPORT_SYMBOL_GPL(compat_dependency_symbol); 
    4747  
    4848+#if defined(CONFIG_FW_LOADER) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) 
     
    6060 { 
    6161        /* pm-qos for kernels <= 2.6.24, this is a no-op on newer kernels */ 
    62 @@ -46,7 +57,8 @@ static int __init compat_init(void) 
     62@@ -51,7 +62,8 @@ static int __init compat_init(void) 
    6363               COMPAT_BASE_TREE " " COMPAT_BASE_TREE_VERSION 
    6464               "\n"); 
     
    7070 module_init(compat_init); 
    7171  
    72 @@ -55,7 +67,8 @@ static void __exit compat_exit(void) 
     72@@ -60,7 +72,8 @@ static void __exit compat_exit(void) 
    7373        compat_pm_qos_power_deinit(); 
    7474        compat_system_workqueue_destroy(); 
  • trunk/package/mac80211/patches/100-disable_pcmcia_compat.patch

    r30742 r31322  
    2222  * pccard_loop_tuple() - loop over tuples in the CIS 
    2323@@ -73,7 +73,7 @@ next_entry: 
    24  EXPORT_SYMBOL(pccard_loop_tuple); 
     24 EXPORT_SYMBOL_GPL(pccard_loop_tuple); 
    2525 /* Source: drivers/pcmcia/cistpl.c */ 
    2626  
     
    3232--- a/include/linux/compat-2.6.28.h 
    3333+++ b/include/linux/compat-2.6.28.h 
    34 @@ -44,7 +44,7 @@ typedef u32 phys_addr_t; 
     34@@ -48,7 +48,7 @@ typedef u32 phys_addr_t; 
    3535 }) 
    3636 #endif /* From include/asm-generic/bug.h */ 
  • trunk/package/mac80211/patches/110-disable_usb_compat.patch

    r30742 r31322  
    11--- a/compat/compat-2.6.28.c 
    22+++ b/compat/compat-2.6.28.c 
    3 @@ -165,7 +165,7 @@ EXPORT_SYMBOL(pcmcia_loop_config); 
     3@@ -165,7 +165,7 @@ EXPORT_SYMBOL_GPL(pcmcia_loop_config); 
    44  
    55 #endif /* CONFIG_PCMCIA */ 
     
    1313+++ b/compat/compat-2.6.29.c 
    1414@@ -49,7 +49,7 @@ void netdev_attach_ops(struct net_device 
    15  EXPORT_SYMBOL(netdev_attach_ops); 
     15 EXPORT_SYMBOL_GPL(netdev_attach_ops); 
    1616  
    1717 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) 
     
    2323--- a/include/linux/compat-2.6.28.h 
    2424+++ b/include/linux/compat-2.6.28.h 
    25 @@ -69,7 +69,7 @@ int pcmcia_loop_config(struct pcmcia_dev 
     25@@ -73,7 +73,7 @@ int pcmcia_loop_config(struct pcmcia_dev 
    2626 /* USB anchors were added as of 2.6.23 */ 
    2727 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) 
     
    3434--- a/config.mk 
    3535+++ b/config.mk 
    36 @@ -503,7 +503,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29 
     36@@ -498,7 +498,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29 
    3737 # This activates a threading fix for usb urb. 
    3838 # this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351 
    3939 # This fix will be included in some stable releases. 
    40 -CONFIG_COMPAT_USB_URB_THREAD_FIX=y 
    41 +# CONFIG_COMPAT_USB_URB_THREAD_FIX=y 
     40-export CONFIG_COMPAT_USB_URB_THREAD_FIX=y 
     41+# export CONFIG_COMPAT_USB_URB_THREAD_FIX=y 
    4242  
    43  CONFIG_ATH9K_HTC=m 
     43 export CONFIG_ATH9K_HTC=m 
    4444 # CONFIG_ATH9K_HTC_DEBUGFS=y 
  • trunk/package/mac80211/patches/120-pr_fmt_warnings.patch

    r30643 r31322  
    166166  
    167167 #include <linux/etherdevice.h> 
    168 --- a/compat/crc8.c 
    169 +++ b/compat/crc8.c 
    170 @@ -14,6 +14,7 @@ 
    171   * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
    172   */ 
    173   
    174 +#undef pr_fmt 
    175  #define pr_fmt(fmt)            KBUILD_MODNAME ": " fmt 
    176   
    177  #include <linux/module.h> 
    178168--- a/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 
    179169+++ b/drivers/net/wireless/brcm80211/brcmsmac/aiutils.c 
     
    236226  
    237227 #include <linux/pci_ids.h> 
     228--- a/drivers/net/wireless/ath/ath5k/ani.c 
     229+++ b/drivers/net/wireless/ath/ath5k/ani.c 
     230@@ -14,6 +14,7 @@ 
     231  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     232  */ 
     233  
     234+#undef pr_fmt 
     235 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     236  
     237 #include "ath5k.h" 
     238--- a/drivers/net/wireless/ath/ath5k/attach.c 
     239+++ b/drivers/net/wireless/ath/ath5k/attach.c 
     240@@ -20,6 +20,7 @@ 
     241 * Attach/Detach Functions and helpers * 
     242 \*************************************/ 
     243  
     244+#undef pr_fmt 
     245 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     246  
     247 #include <linux/pci.h> 
     248--- a/drivers/net/wireless/ath/ath5k/base.c 
     249+++ b/drivers/net/wireless/ath/ath5k/base.c 
     250@@ -40,6 +40,7 @@ 
     251  * 
     252  */ 
     253  
     254+#undef pr_fmt 
     255 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     256  
     257 #include <linux/module.h> 
     258--- a/drivers/net/wireless/ath/ath5k/debug.c 
     259+++ b/drivers/net/wireless/ath/ath5k/debug.c 
     260@@ -58,6 +58,7 @@ 
     261  * THE POSSIBILITY OF SUCH DAMAGES. 
     262  */ 
     263  
     264+#undef pr_fmt 
     265 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     266  
     267 #include <linux/export.h> 
     268--- a/drivers/net/wireless/ath/ath5k/desc.c 
     269+++ b/drivers/net/wireless/ath/ath5k/desc.c 
     270@@ -21,6 +21,7 @@ 
     271  Hardware Descriptor Functions 
     272 \******************************/ 
     273  
     274+#undef pr_fmt 
     275 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     276  
     277 #include "ath5k.h" 
     278--- a/drivers/net/wireless/ath/ath5k/dma.c 
     279+++ b/drivers/net/wireless/ath/ath5k/dma.c 
     280@@ -29,6 +29,7 @@ 
     281  * status registers (ISR). 
     282  */ 
     283  
     284+#undef pr_fmt 
     285 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     286  
     287 #include "ath5k.h" 
     288--- a/drivers/net/wireless/ath/ath5k/eeprom.c 
     289+++ b/drivers/net/wireless/ath/ath5k/eeprom.c 
     290@@ -21,6 +21,7 @@ 
     291 * EEPROM access functions and helpers * 
     292 \*************************************/ 
     293  
     294+#undef pr_fmt 
     295 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     296  
     297 #include <linux/slab.h> 
     298--- a/drivers/net/wireless/ath/ath5k/initvals.c 
     299+++ b/drivers/net/wireless/ath/ath5k/initvals.c 
     300@@ -19,6 +19,7 @@ 
     301  * 
     302  */ 
     303  
     304+#undef pr_fmt 
     305 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     306  
     307 #include "ath5k.h" 
     308--- a/drivers/net/wireless/ath/ath5k/led.c 
     309+++ b/drivers/net/wireless/ath/ath5k/led.c 
     310@@ -39,6 +39,7 @@ 
     311  * 
     312  */ 
     313  
     314+#undef pr_fmt 
     315 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     316  
     317 #include <linux/pci.h> 
     318--- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c 
     319+++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c 
     320@@ -41,6 +41,7 @@ 
     321  * 
     322  */ 
     323  
     324+#undef pr_fmt 
     325 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     326  
     327 #include <net/mac80211.h> 
     328--- a/drivers/net/wireless/ath/ath5k/pci.c 
     329+++ b/drivers/net/wireless/ath/ath5k/pci.c 
     330@@ -14,6 +14,7 @@ 
     331  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     332  */ 
     333  
     334+#undef pr_fmt 
     335 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     336  
     337 #include <linux/nl80211.h> 
     338--- a/drivers/net/wireless/ath/ath5k/phy.c 
     339+++ b/drivers/net/wireless/ath/ath5k/phy.c 
     340@@ -22,6 +22,7 @@ 
     341 * PHY related functions * 
     342 \***********************/ 
     343  
     344+#undef pr_fmt 
     345 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     346  
     347 #include <linux/delay.h> 
     348--- a/drivers/net/wireless/ath/ath5k/qcu.c 
     349+++ b/drivers/net/wireless/ath/ath5k/qcu.c 
     350@@ -20,6 +20,7 @@ 
     351 Queue Control Unit, DCF Control Unit Functions 
     352 \********************************************/ 
     353  
     354+#undef pr_fmt 
     355 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     356  
     357 #include "ath5k.h" 
     358--- a/drivers/net/wireless/ath/ath5k/reset.c 
     359+++ b/drivers/net/wireless/ath/ath5k/reset.c 
     360@@ -23,6 +23,7 @@ 
     361   Reset function and helpers 
     362 \****************************/ 
     363  
     364+#undef pr_fmt 
     365 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     366  
     367 #include <asm/unaligned.h> 
     368--- a/drivers/net/wireless/ath/ath5k/sysfs.c 
     369+++ b/drivers/net/wireless/ath/ath5k/sysfs.c 
     370@@ -1,3 +1,4 @@ 
     371+#undef pr_fmt 
     372 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     373  
     374 #include <linux/device.h> 
     375--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c 
     376+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c 
     377@@ -15,6 +15,7 @@ 
     378  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     379  */ 
     380  
     381+#undef pr_fmt 
     382 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     383  
     384 #include <linux/moduleparam.h> 
     385--- a/drivers/net/wireless/ath/ath6kl/init.c 
     386+++ b/drivers/net/wireless/ath/ath6kl/init.c 
     387@@ -16,6 +16,7 @@ 
     388  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     389  */ 
     390  
     391+#undef pr_fmt 
     392 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     393  
     394 #include <linux/moduleparam.h> 
     395--- a/drivers/net/wireless/ath/ath6kl/main.c 
     396+++ b/drivers/net/wireless/ath/ath6kl/main.c 
     397@@ -15,6 +15,7 @@ 
     398  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     399  */ 
     400  
     401+#undef pr_fmt 
     402 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     403  
     404 #include "core.h" 
     405--- a/drivers/net/wireless/ath/ath6kl/txrx.c 
     406+++ b/drivers/net/wireless/ath/ath6kl/txrx.c 
     407@@ -15,6 +15,7 @@ 
     408  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     409  */ 
     410  
     411+#undef pr_fmt 
     412 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     413  
     414 #include "core.h" 
     415--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c 
     416+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c 
     417@@ -14,6 +14,7 @@ 
     418  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     419  */ 
     420  
     421+#undef pr_fmt 
     422 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     423  
     424 #include "htc.h" 
     425--- a/drivers/net/wireless/ath/ath9k/htc_hst.c 
     426+++ b/drivers/net/wireless/ath/ath9k/htc_hst.c 
     427@@ -14,6 +14,7 @@ 
     428  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     429  */ 
     430  
     431+#undef pr_fmt 
     432 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     433  
     434 #include "htc.h" 
     435--- a/drivers/net/wireless/ath/ath9k/init.c 
     436+++ b/drivers/net/wireless/ath/ath9k/init.c 
     437@@ -14,6 +14,7 @@ 
     438  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     439  */ 
     440  
     441+#undef pr_fmt 
     442 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     443  
     444 #include <linux/dma-mapping.h> 
     445--- a/drivers/net/wireless/ath/ath9k/pci.c 
     446+++ b/drivers/net/wireless/ath/ath9k/pci.c 
     447@@ -14,6 +14,7 @@ 
     448  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     449  */ 
     450  
     451+#undef pr_fmt 
     452 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     453  
     454 #include <linux/nl80211.h> 
     455--- a/drivers/net/wireless/ath/main.c 
     456+++ b/drivers/net/wireless/ath/main.c 
     457@@ -14,6 +14,7 @@ 
     458  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     459  */ 
     460  
     461+#undef pr_fmt 
     462 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     463  
     464 #include <linux/kernel.h> 
     465--- a/drivers/net/wireless/ath/regd.c 
     466+++ b/drivers/net/wireless/ath/regd.c 
     467@@ -14,6 +14,7 @@ 
     468  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     469  */ 
     470  
     471+#undef pr_fmt 
     472 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     473  
     474 #include <linux/kernel.h> 
     475--- a/drivers/net/wireless/iwlwifi/iwl-agn.c 
     476+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c 
     477@@ -27,6 +27,7 @@ 
     478  * 
     479  *****************************************************************************/ 
     480  
     481+#undef pr_fmt 
     482 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     483  
     484 #include <linux/kernel.h> 
     485--- a/drivers/net/wireless/iwlwifi/iwl-pci.c 
     486+++ b/drivers/net/wireless/iwlwifi/iwl-pci.c 
     487@@ -61,6 +61,7 @@ 
     488  * 
     489  *****************************************************************************/ 
     490  
     491+#undef pr_fmt 
     492 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 
     493  
     494 #include <linux/module.h> 
  • trunk/package/mac80211/patches/130-mesh_pathtbl_backport.patch

    r30742 r31322  
    11--- a/net/mac80211/mesh_pathtbl.c 
    22+++ b/net/mac80211/mesh_pathtbl.c 
    3 @@ -828,7 +828,6 @@ static void table_flush_by_iface(struct  
     3@@ -826,7 +826,6 @@ static void table_flush_by_iface(struct  
    44        struct hlist_node *p; 
    55        int i; 
  • trunk/package/mac80211/patches/201-ath5k-WAR-for-AR71xx-PCI-bug.patch

    r30413 r31322  
    11--- a/drivers/net/wireless/ath/ath5k/initvals.c 
    22+++ b/drivers/net/wireless/ath/ath5k/initvals.c 
    3 @@ -60,8 +60,14 @@ static const struct ath5k_ini ar5210_ini 
     3@@ -63,8 +63,14 @@ static const struct ath5k_ini ar5210_ini 
    44        { AR5K_IMR,             0 }, 
    55        { AR5K_IER,             AR5K_IER_DISABLE }, 
     
    1818--- a/drivers/net/wireless/ath/ath5k/dma.c 
    1919+++ b/drivers/net/wireless/ath/ath5k/dma.c 
    20 @@ -858,10 +858,18 @@ ath5k_hw_dma_init(struct ath5k_hw *ah) 
     20@@ -861,10 +861,18 @@ ath5k_hw_dma_init(struct ath5k_hw *ah) 
    2121         * guess we can tweak it and see how it goes ;-) 
    2222         */ 
  • trunk/package/mac80211/patches/300-pending_work.patch

    r31265 r31322  
    1 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c 
    2 +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c 
    3 @@ -326,7 +326,6 @@ static bool ar9003_hw_get_isr(struct ath 
    4  static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds, 
    5                                  struct ath_tx_status *ts) 
    6  { 
    7 -       struct ar9003_txc *txc = (struct ar9003_txc *) ds; 
    8         struct ar9003_txs *ads; 
    9         u32 status; 
    10   
    11 @@ -336,11 +335,7 @@ static int ar9003_hw_proc_txdesc(struct  
    12         if ((status & AR_TxDone) == 0) 
    13                 return -EINPROGRESS; 
    14   
    15 -       ts->qid = MS(ads->ds_info, AR_TxQcuNum); 
    16 -       if (!txc || (MS(txc->info, AR_TxQcuNum) == ts->qid)) 
    17 -               ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size; 
     1--- a/drivers/net/wireless/ath/ath5k/base.c 
     2+++ b/drivers/net/wireless/ath/ath5k/base.c 
     3@@ -1171,7 +1171,7 @@ ath5k_check_ibss_tsf(struct ath5k_hw *ah 
     4  
     5        if (ieee80211_is_beacon(mgmt->frame_control) && 
     6            le16_to_cpu(mgmt->u.beacon.capab_info) & WLAN_CAPABILITY_IBSS && 
     7-           memcmp(mgmt->bssid, common->curbssid, ETH_ALEN) == 0) { 
     8+           compare_ether_addr(mgmt->bssid, common->curbssid) == 0) { 
     9                /* 
     10                 * Received an IBSS beacon with the same BSSID. Hardware *must* 
     11                 * have updated the local TSF. We have to work around various 
     12@@ -1235,7 +1235,7 @@ ath5k_update_beacon_rssi(struct ath5k_hw 
     13  
     14        /* only beacons from our BSSID */ 
     15        if (!ieee80211_is_beacon(mgmt->frame_control) || 
     16-           memcmp(mgmt->bssid, common->curbssid, ETH_ALEN) != 0) 
     17+           compare_ether_addr(mgmt->bssid, common->curbssid) != 0) 
     18                return; 
     19  
     20        ewma_add(&ah->ah_beacon_rssi_avg, rssi); 
     21@@ -2416,6 +2416,19 @@ ath5k_tx_complete_poll_work(struct work_ 
     22 * Initialization routines * 
     23 \*************************/ 
     24  
     25+static const struct ieee80211_iface_limit if_limits[] = { 
     26+       { .max = 256,   .types = BIT(NL80211_IFTYPE_STATION) }, 
     27+       { .max = 4,     .types = BIT(NL80211_IFTYPE_AP) | 
     28+                                BIT(NL80211_IFTYPE_MESH_POINT) }, 
     29+}; 
     30+ 
     31+static const struct ieee80211_iface_combination if_comb = { 
     32+       .limits = if_limits, 
     33+       .n_limits = ARRAY_SIZE(if_limits), 
     34+       .max_interfaces = 256, 
     35+       .num_different_channels = 1, 
     36+}; 
     37+ 
     38 int __devinit 
     39 ath5k_init_ah(struct ath5k_hw *ah, const struct ath_bus_ops *bus_ops) 
     40 { 
     41@@ -2437,6 +2450,9 @@ ath5k_init_ah(struct ath5k_hw *ah, const 
     42                BIT(NL80211_IFTYPE_ADHOC) | 
     43                BIT(NL80211_IFTYPE_MESH_POINT); 
     44  
     45+       hw->wiphy->iface_combinations = &if_comb; 
     46+       hw->wiphy->n_iface_combinations = 1; 
     47+ 
     48        /* SW support for IBSS_RSN is provided by mac80211 */ 
     49        hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; 
     50  
     51--- a/drivers/net/wireless/ath/ath9k/ani.c 
     52+++ b/drivers/net/wireless/ath/ath9k/ani.c 
     53@@ -274,7 +274,9 @@ static void ath9k_hw_set_ofdm_nil(struct 
     54                aniState->rssiThrLow, aniState->rssiThrHigh); 
     55  
     56        if (aniState->update_ani) 
     57-               aniState->ofdmNoiseImmunityLevel = immunityLevel; 
     58+               aniState->ofdmNoiseImmunityLevel = 
     59+                       (immunityLevel > ATH9K_ANI_OFDM_DEF_LEVEL) ? 
     60+                       immunityLevel : ATH9K_ANI_OFDM_DEF_LEVEL; 
     61  
     62        entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel]; 
     63        entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel]; 
     64@@ -340,7 +342,9 @@ static void ath9k_hw_set_cck_nil(struct  
     65                immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI; 
     66  
     67        if (aniState->update_ani) 
     68-               aniState->cckNoiseImmunityLevel = immunityLevel; 
     69+               aniState->cckNoiseImmunityLevel = 
     70+                       (immunityLevel > ATH9K_ANI_CCK_DEF_LEVEL) ? 
     71+                       immunityLevel : ATH9K_ANI_CCK_DEF_LEVEL; 
     72  
     73        entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel]; 
     74        entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel]; 
     75--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c 
     76+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c 
     77@@ -618,19 +618,10 @@ static void ar5008_hw_init_bb(struct ath 
     78        u32 synthDelay; 
     79  
     80        synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY; 
     81-       if (IS_CHAN_B(chan)) 
     82-               synthDelay = (4 * synthDelay) / 22; 
    1883-       else 
    19 -               return -ENOENT; 
    20 +       ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size; 
    21   
    22         if ((MS(ads->ds_info, AR_DescId) != ATHEROS_VENDOR_ID) || 
    23             (MS(ads->ds_info, AR_TxRxDesc) != 1)) { 
    24 @@ -354,6 +349,7 @@ static int ar9003_hw_proc_txdesc(struct  
    25         ts->ts_seqnum = MS(status, AR_SeqNum); 
    26         ts->tid = MS(status, AR_TxTid); 
    27   
    28 +       ts->qid = MS(ads->ds_info, AR_TxQcuNum); 
    29         ts->desc_id = MS(ads->status1, AR_TxDescId); 
    30         ts->ts_tstamp = ads->status4; 
    31         ts->ts_status = 0; 
    32 @@ -440,20 +436,14 @@ int ath9k_hw_process_rxdesc_edma(struct  
    33         struct ar9003_rxs *rxsp = (struct ar9003_rxs *) buf_addr; 
    34         unsigned int phyerr; 
    35   
    36 -       /* TODO: byte swap on big endian for ar9300_10 */ 
     84-               synthDelay /= 10; 
    3785- 
    38 -       if (!rxs) { 
    39 -               if ((rxsp->status11 & AR_RxDone) == 0) 
    40 -                       return -EINPROGRESS; 
     86-       if (IS_CHAN_HALF_RATE(chan)) 
     87-               synthDelay *= 2; 
     88-       else if (IS_CHAN_QUARTER_RATE(chan)) 
     89-               synthDelay *= 4; 
     90  
     91        REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN); 
     92  
     93-       udelay(synthDelay + BASE_ACTIVATE_DELAY); 
     94+       ath9k_hw_synth_delay(ah, chan, synthDelay); 
     95 } 
     96  
     97 static void ar5008_hw_init_chain_masks(struct ath_hw *ah) 
     98@@ -868,7 +859,7 @@ static int ar5008_hw_process_ini(struct  
     99        ar5008_hw_set_channel_regs(ah, chan); 
     100        ar5008_hw_init_chain_masks(ah); 
     101        ath9k_olc_init(ah); 
     102-       ath9k_hw_apply_txpower(ah, chan); 
     103+       ath9k_hw_apply_txpower(ah, chan, false); 
     104  
     105        /* Write analog registers */ 
     106        if (!ath9k_hw_set_rf_regs(ah, chan, freqIndex)) { 
     107@@ -948,12 +939,8 @@ static bool ar5008_hw_rfbus_req(struct a 
     108 static void ar5008_hw_rfbus_done(struct ath_hw *ah) 
     109 { 
     110        u32 synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY; 
     111-       if (IS_CHAN_B(ah->curchan)) 
     112-               synthDelay = (4 * synthDelay) / 22; 
     113-       else 
     114-               synthDelay /= 10; 
     115  
     116-       udelay(synthDelay + BASE_ACTIVATE_DELAY); 
     117+       ath9k_hw_synth_delay(ah, ah->curchan, synthDelay); 
     118  
     119        REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0); 
     120 } 
     121--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c 
     122+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c 
     123@@ -1000,10 +1000,12 @@ static bool ar9003_hw_init_cal(struct at 
     124        if (mci && IS_CHAN_2GHZ(chan) && run_agc_cal) 
     125                ar9003_mci_init_cal_req(ah, &is_reusable); 
     126  
     127-       txiqcal_done = ar9003_hw_tx_iq_cal_run(ah); 
     128-       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS); 
     129-       udelay(5); 
     130-       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN); 
     131+       if (!(IS_CHAN_HALF_RATE(chan) || IS_CHAN_QUARTER_RATE(chan))) { 
     132+               txiqcal_done = ar9003_hw_tx_iq_cal_run(ah); 
     133+               REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS); 
     134+               udelay(5); 
     135+               REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN); 
     136+       } 
     137  
     138 skip_tx_iqcal: 
     139        if (run_agc_cal || !(ah->ah_flags & AH_FASTCC)) { 
     140--- a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c 
     141+++ b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c 
     142@@ -54,7 +54,7 @@ void ar9003_paprd_enable(struct ath_hw * 
     143  
     144        if (val) { 
     145                ah->paprd_table_write_done = true; 
     146-               ath9k_hw_apply_txpower(ah, chan); 
     147+               ath9k_hw_apply_txpower(ah, chan, false); 
     148        } 
     149  
     150        REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B0, 
     151--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c 
     152+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c 
     153@@ -524,22 +524,10 @@ static void ar9003_hw_init_bb(struct ath 
     154         * Value is in 100ns increments. 
     155         */ 
     156        synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY; 
     157-       if (IS_CHAN_B(chan)) 
     158-               synthDelay = (4 * synthDelay) / 22; 
     159-       else 
     160-               synthDelay /= 10; 
     161  
     162        /* Activate the PHY (includes baseband activate + synthesizer on) */ 
     163        REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN); 
    41164- 
    42 -               if (MS(rxsp->ds_info, AR_DescId) != 0x168c) 
    43 -                       return -EINVAL; 
    44 +       if ((rxsp->status11 & AR_RxDone) == 0) 
    45 +               return -EINPROGRESS; 
    46   
    47 -               if ((rxsp->ds_info & (AR_TxRxDesc | AR_CtrlStat)) != 0) 
    48 -                       return -EINPROGRESS; 
    49 +       if (MS(rxsp->ds_info, AR_DescId) != 0x168c) 
    50 +               return -EINVAL; 
    51   
    52 -               return 0; 
    53 -       } 
    54 +       if ((rxsp->ds_info & (AR_TxRxDesc | AR_CtrlStat)) != 0) 
    55 +               return -EINPROGRESS; 
    56   
    57         rxs->rs_status = 0; 
    58         rxs->rs_flags =  0; 
    59 @@ -510,7 +500,11 @@ int ath9k_hw_process_rxdesc_edma(struct  
    60                  */ 
    61                 if (rxsp->status11 & AR_CRCErr) 
    62                         rxs->rs_status |= ATH9K_RXERR_CRC; 
    63 -               else if (rxsp->status11 & AR_PHYErr) { 
    64 +               else if (rxsp->status11 & AR_DecryptCRCErr) 
    65 +                       rxs->rs_status |= ATH9K_RXERR_DECRYPT; 
    66 +               else if (rxsp->status11 & AR_MichaelErr) 
    67 +                       rxs->rs_status |= ATH9K_RXERR_MIC; 
    68 +               if (rxsp->status11 & AR_PHYErr) { 
    69                         phyerr = MS(rxsp->status11, AR_PHYErrCode); 
    70                         /* 
    71                          * If we reach a point here where AR_PostDelimCRCErr is 
    72 @@ -532,11 +526,7 @@ int ath9k_hw_process_rxdesc_edma(struct  
    73                                 rxs->rs_status |= ATH9K_RXERR_PHY; 
    74                                 rxs->rs_phyerr = phyerr; 
    75                         } 
     165-       /* 
     166-        * There is an issue if the AP starts the calibration before 
     167-        * the base band timeout completes.  This could result in the 
     168-        * rx_clear false triggering.  As a workaround we add delay an 
     169-        * extra BASE_ACTIVATE_DELAY usecs to ensure this condition 
     170-        * does not happen. 
     171-        */ 
     172-       udelay(synthDelay + BASE_ACTIVATE_DELAY); 
     173+       ath9k_hw_synth_delay(ah, chan, synthDelay); 
     174 } 
     175  
     176 static void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx) 
     177@@ -690,7 +678,7 @@ static int ar9003_hw_process_ini(struct  
     178        ar9003_hw_override_ini(ah); 
     179        ar9003_hw_set_channel_regs(ah, chan); 
     180        ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask); 
     181-       ath9k_hw_apply_txpower(ah, chan); 
     182+       ath9k_hw_apply_txpower(ah, chan, false); 
     183  
     184        if (AR_SREV_9462(ah)) { 
     185                if (REG_READ_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_0, 
     186@@ -721,6 +709,14 @@ static void ar9003_hw_set_rfmode(struct  
     187  
     188        if (IS_CHAN_A_FAST_CLOCK(ah, chan)) 
     189                rfMode |= (AR_PHY_MODE_DYNAMIC | AR_PHY_MODE_DYN_CCK_DISABLE); 
     190+       if (IS_CHAN_QUARTER_RATE(chan)) 
     191+               rfMode |= AR_PHY_MODE_QUARTER; 
     192+       if (IS_CHAN_HALF_RATE(chan)) 
     193+               rfMode |= AR_PHY_MODE_HALF; 
     194+ 
     195+       if (rfMode & (AR_PHY_MODE_QUARTER | AR_PHY_MODE_HALF)) 
     196+               REG_RMW_FIELD(ah, AR_PHY_FRAME_CTL, 
     197+                             AR_PHY_FRAME_CTL_CF_OVERLAP_WINDOW, 3); 
     198  
     199        REG_WRITE(ah, AR_PHY_MODE, rfMode); 
     200 } 
     201@@ -791,12 +787,8 @@ static bool ar9003_hw_rfbus_req(struct a 
     202 static void ar9003_hw_rfbus_done(struct ath_hw *ah) 
     203 { 
     204        u32 synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY; 
     205-       if (IS_CHAN_B(ah->curchan)) 
     206-               synthDelay = (4 * synthDelay) / 22; 
     207-       else 
     208-               synthDelay /= 10; 
     209  
     210-       udelay(synthDelay + BASE_ACTIVATE_DELAY); 
     211+       ath9k_hw_synth_delay(ah, ah->curchan, synthDelay); 
     212  
     213        REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0); 
     214 } 
     215--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h 
     216+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h 
     217@@ -468,6 +468,9 @@ 
     218 #define AR_PHY_ADDAC_PARA_CTL    (AR_SM_BASE + 0x150) 
     219 #define AR_PHY_XPA_CFG           (AR_SM_BASE + 0x158) 
     220  
     221+#define AR_PHY_FRAME_CTL_CF_OVERLAP_WINDOW  3 
     222+#define AR_PHY_FRAME_CTL_CF_OVERLAP_WINDOW_S    0 
     223+ 
     224 #define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A           0x0001FC00 
     225 #define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A_S         10 
     226 #define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A                       0x3FF 
     227--- a/drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h 
     228+++ b/drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h 
     229@@ -1115,9 +1115,9 @@ static const u32 ar9462_2p0_mac_core[][2 
     230        {0x000081f8, 0x00000000}, 
     231        {0x000081fc, 0x00000000}, 
     232        {0x00008240, 0x00100000}, 
     233-       {0x00008244, 0x0010f400}, 
     234+       {0x00008244, 0x0010f424}, 
     235        {0x00008248, 0x00000800}, 
     236-       {0x0000824c, 0x0001e800}, 
     237+       {0x0000824c, 0x0001e848}, 
     238        {0x00008250, 0x00000000}, 
     239        {0x00008254, 0x00000000}, 
     240        {0x00008258, 0x00000000}, 
     241--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
     242+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
     243@@ -370,7 +370,7 @@ struct ath_vif { 
     244  * number of beacon intervals, the game's up. 
     245  */ 
     246 #define BSTUCK_THRESH                  9 
     247-#define        ATH_BCBUF                       4 
     248+#define        ATH_BCBUF                       8 
     249 #define ATH_DEFAULT_BINTVAL            100 /* TU */ 
     250 #define ATH_DEFAULT_BMISS_LIMIT        10 
     251 #define IEEE80211_MS_TO_TU(x)           (((x) * 1000) / 1024) 
     252--- a/drivers/net/wireless/ath/ath9k/beacon.c 
     253+++ b/drivers/net/wireless/ath/ath9k/beacon.c 
     254@@ -91,7 +91,7 @@ static void ath_beacon_setup(struct ath_ 
     255        info.txpower = MAX_RATE_POWER; 
     256        info.keyix = ATH9K_TXKEYIX_INVALID; 
     257        info.keytype = ATH9K_KEY_TYPE_CLEAR; 
     258-       info.flags = ATH9K_TXDESC_NOACK | ATH9K_TXDESC_INTREQ; 
     259+       info.flags = ATH9K_TXDESC_NOACK | ATH9K_TXDESC_CLRDMASK; 
     260  
     261        info.buf_addr[0] = bf->bf_buf_addr; 
     262        info.buf_len[0] = roundup(skb->len, 4); 
     263@@ -359,6 +359,11 @@ void ath_beacon_tasklet(unsigned long da 
     264        int slot; 
     265        u32 bfaddr, bc = 0; 
     266  
     267+       if (work_pending(&sc->hw_reset_work)) { 
     268+               ath_dbg(common, RESET, 
     269+                       "reset work is pending, skip beaconing now\n"); 
     270+               return; 
     271+       } 
     272        /* 
     273         * Check if the previous beacon has gone out.  If 
     274         * not don't try to post another, skip this period 
     275@@ -369,6 +374,9 @@ void ath_beacon_tasklet(unsigned long da 
     276        if (ath9k_hw_numtxpending(ah, sc->beacon.beaconq) != 0) { 
     277                sc->beacon.bmisscnt++; 
     278  
     279+               if (!ath9k_hw_check_alive(ah)) 
     280+                       ieee80211_queue_work(sc->hw, &sc->hw_check_work); 
     281+ 
     282                if (sc->beacon.bmisscnt < BSTUCK_THRESH * sc->nbcnvifs) { 
     283                        ath_dbg(common, BSTUCK, 
     284                                "missed %u consecutive beacons\n", 
     285@@ -378,6 +386,7 @@ void ath_beacon_tasklet(unsigned long da 
     286                                ath9k_hw_bstuck_nfcal(ah); 
     287                } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) { 
     288                        ath_dbg(common, BSTUCK, "beacon is officially stuck\n"); 
     289+                       sc->beacon.bmisscnt = 0; 
     290                        sc->sc_flags |= SC_OP_TSF_RESET; 
     291                        ieee80211_queue_work(sc->hw, &sc->hw_reset_work); 
     292                } 
     293@@ -650,6 +659,8 @@ static void ath_beacon_config_adhoc(stru 
     294        u32 tsf, intval, nexttbtt; 
     295  
     296        ath9k_reset_beacon_status(sc); 
     297+       if (!(sc->sc_flags & SC_OP_BEACONS)) 
     298+               ath9k_hw_settsf64(ah, sc->beacon.bc_tstamp); 
     299  
     300        intval = TU_TO_USEC(conf->beacon_interval); 
     301        tsf = roundup(ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE), intval); 
     302--- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c 
     303+++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c 
     304@@ -824,6 +824,8 @@ static void ath9k_hw_ar9287_set_txpower( 
     305                        regulatory->max_power_level = ratesArray[i]; 
     306        } 
     307  
     308+       ath9k_hw_update_regulatory_maxpower(ah); 
     309+ 
     310        if (test) 
     311                return; 
     312  
     313--- a/drivers/net/wireless/ath/ath9k/gpio.c 
     314+++ b/drivers/net/wireless/ath/ath9k/gpio.c 
     315@@ -41,6 +41,9 @@ void ath_init_leds(struct ath_softc *sc) 
     316 { 
     317        int ret; 
     318  
     319+       if (AR_SREV_9100(sc->sc_ah)) 
     320+               return; 
     321+ 
     322        if (sc->sc_ah->led_pin < 0) { 
     323                if (AR_SREV_9287(sc->sc_ah)) 
     324                        sc->sc_ah->led_pin = ATH_LED_PIN_9287; 
     325--- a/drivers/net/wireless/ath/ath9k/hw.c 
     326+++ b/drivers/net/wireless/ath/ath9k/hw.c 
     327@@ -142,6 +142,22 @@ bool ath9k_hw_wait(struct ath_hw *ah, u3 
     328 } 
     329 EXPORT_SYMBOL(ath9k_hw_wait); 
     330  
     331+void ath9k_hw_synth_delay(struct ath_hw *ah, struct ath9k_channel *chan, 
     332+                         int hw_delay) 
     333+{ 
     334+       if (IS_CHAN_B(chan)) 
     335+               hw_delay = (4 * hw_delay) / 22; 
     336+       else 
     337+               hw_delay /= 10; 
     338+ 
     339+       if (IS_CHAN_HALF_RATE(chan)) 
     340+               hw_delay *= 2; 
     341+       else if (IS_CHAN_QUARTER_RATE(chan)) 
     342+               hw_delay *= 4; 
     343+ 
     344+       udelay(hw_delay + BASE_ACTIVATE_DELAY); 
     345+} 
     346+ 
     347 void ath9k_hw_write_array(struct ath_hw *ah, struct ar5416IniArray *array, 
     348                          int column, unsigned int *writecnt) 
     349 { 
     350@@ -388,8 +404,8 @@ static void ath9k_hw_init_config(struct  
     351 { 
     352        int i; 
     353  
     354-       ah->config.dma_beacon_response_time = 2; 
     355-       ah->config.sw_beacon_response_time = 10; 
     356+       ah->config.dma_beacon_response_time = 1; 
     357+       ah->config.sw_beacon_response_time = 6; 
     358        ah->config.additional_swba_backoff = 0; 
     359        ah->config.ack_6mb = 0x0; 
     360        ah->config.cwm_ignore_extcca = 0; 
     361@@ -971,7 +987,7 @@ void ath9k_hw_init_global_settings(struc 
     362        struct ath_common *common = ath9k_hw_common(ah); 
     363        struct ieee80211_conf *conf = &common->hw->conf; 
     364        const struct ath9k_channel *chan = ah->curchan; 
     365-       int acktimeout, ctstimeout; 
     366+       int acktimeout, ctstimeout, ack_offset = 0; 
     367        int slottime; 
     368        int sifstime; 
     369        int rx_lat = 0, tx_lat = 0, eifs = 0; 
     370@@ -992,6 +1008,11 @@ void ath9k_hw_init_global_settings(struc 
     371                rx_lat = 37; 
     372        tx_lat = 54; 
     373  
     374+       if (IS_CHAN_5GHZ(chan)) 
     375+               sifstime = 16; 
     376+       else 
     377+               sifstime = 10; 
     378+ 
     379        if (IS_CHAN_HALF_RATE(chan)) { 
     380                eifs = 175; 
     381                rx_lat *= 2; 
     382@@ -999,8 +1020,9 @@ void ath9k_hw_init_global_settings(struc 
     383                if (IS_CHAN_A_FAST_CLOCK(ah, chan)) 
     384                    tx_lat += 11; 
     385  
     386+               sifstime *= 2; 
     387+               ack_offset = 16; 
     388                slottime = 13; 
     389-               sifstime = 32; 
     390        } else if (IS_CHAN_QUARTER_RATE(chan)) { 
     391                eifs = 340; 
     392                rx_lat = (rx_lat * 4) - 1; 
     393@@ -1008,8 +1030,9 @@ void ath9k_hw_init_global_settings(struc 
     394                if (IS_CHAN_A_FAST_CLOCK(ah, chan)) 
     395                    tx_lat += 22; 
     396  
     397+               sifstime *= 4; 
     398+               ack_offset = 32; 
     399                slottime = 21; 
     400-               sifstime = 64; 
     401        } else { 
     402                if (AR_SREV_9287(ah) && AR_SREV_9287_13_OR_LATER(ah)) { 
     403                        eifs = AR_D_GBL_IFS_EIFS_ASYNC_FIFO; 
     404@@ -1023,14 +1046,10 @@ void ath9k_hw_init_global_settings(struc 
     405                tx_lat = MS(reg, AR_USEC_TX_LAT); 
     406  
     407                slottime = ah->slottime; 
     408-               if (IS_CHAN_5GHZ(chan)) 
     409-                       sifstime = 16; 
     410-               else 
     411-                       sifstime = 10; 
     412        } 
     413  
     414        /* As defined by IEEE 802.11-2007 17.3.8.6 */ 
     415-       acktimeout = slottime + sifstime + 3 * ah->coverage_class; 
     416+       acktimeout = slottime + sifstime + 3 * ah->coverage_class + ack_offset; 
     417        ctstimeout = acktimeout; 
     418  
     419        /* 
     420@@ -1040,7 +1059,8 @@ void ath9k_hw_init_global_settings(struc 
     421         * BA frames in some implementations, but it has been found to fix ACK 
     422         * timeout issues in other cases as well. 
     423         */ 
     424-       if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ) { 
     425+       if (conf->channel && conf->channel->band == IEEE80211_BAND_2GHZ && 
     426+           !IS_CHAN_HALF_RATE(chan) && !IS_CHAN_QUARTER_RATE(chan)) { 
     427                acktimeout += 64 - sifstime - ah->slottime; 
     428                ctstimeout += 48 - sifstime - ah->slottime; 
     429        } 
     430@@ -1420,6 +1440,10 @@ static bool ath9k_hw_channel_change(stru 
     431                                                    CHANNEL_5GHZ)); 
     432        mode_diff = (chan->chanmode != ah->curchan->chanmode); 
     433  
     434+       if ((ah->curchan->channelFlags | chan->channelFlags) & 
     435+           (CHANNEL_HALF | CHANNEL_QUARTER)) 
     436+               return false; 
     437+ 
     438        for (qnum = 0; qnum < AR_NUM_QCU; qnum++) { 
     439                if (ath9k_hw_numtxpending(ah, qnum)) { 
     440                        ath_dbg(common, QUEUE, 
     441@@ -1453,7 +1477,7 @@ static bool ath9k_hw_channel_change(stru 
     442                return false; 
     443        } 
     444        ath9k_hw_set_clockrate(ah); 
     445-       ath9k_hw_apply_txpower(ah, chan); 
     446+       ath9k_hw_apply_txpower(ah, chan, false); 
     447        ath9k_hw_rfbus_done(ah); 
     448  
     449        if (IS_CHAN_OFDM(chan) || IS_CHAN_HT(chan)) 
     450@@ -2724,7 +2748,8 @@ static int get_antenna_gain(struct ath_h 
     451        return ah->eep_ops->get_eeprom(ah, gain_param); 
     452 } 
     453  
     454-void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan) 
     455+void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan, 
     456+                           bool test) 
     457 { 
     458        struct ath_regulatory *reg = ath9k_hw_regulatory(ah); 
     459        struct ieee80211_channel *channel; 
     460@@ -2745,7 +2770,7 @@ void ath9k_hw_apply_txpower(struct ath_h 
     461  
     462        ah->eep_ops->set_txpower(ah, chan, 
     463                                 ath9k_regd_get_ctl(reg, chan), 
     464-                                ant_reduction, new_pwr, false); 
     465+                                ant_reduction, new_pwr, test); 
     466 } 
     467  
     468 void ath9k_hw_set_txpowerlimit(struct ath_hw *ah, u32 limit, bool test) 
     469@@ -2758,7 +2783,7 @@ void ath9k_hw_set_txpowerlimit(struct at 
     470        if (test) 
     471                channel->max_power = MAX_RATE_POWER / 2; 
     472  
     473-       ath9k_hw_apply_txpower(ah, chan); 
     474+       ath9k_hw_apply_txpower(ah, chan, test); 
     475  
     476        if (test) 
     477                channel->max_power = DIV_ROUND_UP(reg->max_power_level, 2); 
     478--- a/drivers/net/wireless/ath/ath9k/hw.h 
     479+++ b/drivers/net/wireless/ath/ath9k/hw.h 
     480@@ -923,6 +923,8 @@ void ath9k_hw_set_gpio(struct ath_hw *ah 
     481 void ath9k_hw_setantenna(struct ath_hw *ah, u32 antenna); 
     482  
     483 /* General Operation */ 
     484+void ath9k_hw_synth_delay(struct ath_hw *ah, struct ath9k_channel *chan, 
     485+                         int hw_delay); 
     486 bool ath9k_hw_wait(struct ath_hw *ah, u32 reg, u32 mask, u32 val, u32 timeout); 
     487 void ath9k_hw_write_array(struct ath_hw *ah, struct ar5416IniArray *array, 
     488                          int column, unsigned int *writecnt); 
     489@@ -976,7 +978,8 @@ void ath9k_hw_name(struct ath_hw *ah, ch 
     490 /* PHY */ 
     491 void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled, 
     492                                   u32 *coef_mantissa, u32 *coef_exponent); 
     493-void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan); 
     494+void ath9k_hw_apply_txpower(struct ath_hw *ah, struct ath9k_channel *chan, 
     495+                           bool test); 
     496  
     497 /* 
     498  * Code Specific to AR5008, AR9001 or AR9002, 
     499--- a/drivers/net/wireless/ath/ath9k/mac.c 
     500+++ b/drivers/net/wireless/ath/ath9k/mac.c 
     501@@ -133,8 +133,16 @@ EXPORT_SYMBOL(ath9k_hw_updatetxtriglevel 
     502  
     503 void ath9k_hw_abort_tx_dma(struct ath_hw *ah) 
     504 { 
     505+       int maxdelay = 1000; 
     506        int i, q; 
     507  
     508+       if (ah->curchan) { 
     509+               if (IS_CHAN_HALF_RATE(ah->curchan)) 
     510+                       maxdelay *= 2; 
     511+               else if (IS_CHAN_QUARTER_RATE(ah->curchan)) 
     512+                       maxdelay *= 4; 
     513+       } 
     514+ 
     515        REG_WRITE(ah, AR_Q_TXD, AR_Q_TXD_M); 
     516  
     517        REG_SET_BIT(ah, AR_PCU_MISC, AR_PCU_FORCE_QUIET_COLL | AR_PCU_CLEAR_VMF); 
     518@@ -142,7 +150,7 @@ void ath9k_hw_abort_tx_dma(struct ath_hw 
     519        REG_SET_BIT(ah, AR_D_GBL_IFS_MISC, AR_D_GBL_IFS_MISC_IGNORE_BACKOFF); 
     520  
     521        for (q = 0; q < AR_NUM_QCU; q++) { 
     522-               for (i = 0; i < 1000; i++) { 
     523+               for (i = 0; i < maxdelay; i++) { 
     524                        if (i) 
     525                                udelay(5); 
     526  
     527--- a/drivers/net/wireless/ath/ath9k/main.c 
     528+++ b/drivers/net/wireless/ath/ath9k/main.c 
     529@@ -692,17 +692,6 @@ void ath9k_tasklet(unsigned long data) 
     530                goto out; 
     531        } 
     532  
     533-       /* 
     534-        * Only run the baseband hang check if beacons stop working in AP or 
     535-        * IBSS mode, because it has a high false positive rate. For station 
     536-        * mode it should not be necessary, since the upper layers will detect 
     537-        * this through a beacon miss automatically and the following channel 
     538-        * change will trigger a hardware reset anyway 
     539-        */ 
     540-       if (ath9k_hw_numtxpending(ah, sc->beacon.beaconq) != 0 && 
     541-           !ath9k_hw_check_alive(ah)) 
     542-               ieee80211_queue_work(sc->hw, &sc->hw_check_work); 
    76543- 
    77 -               } else if (rxsp->status11 & AR_DecryptCRCErr) 
    78 -                       rxs->rs_status |= ATH9K_RXERR_DECRYPT; 
    79 -               else if (rxsp->status11 & AR_MichaelErr) 
    80 -                       rxs->rs_status |= ATH9K_RXERR_MIC; 
    81 +               }; 
    82         } 
    83   
    84         if (rxsp->status11 & AR_KeyMiss) 
    85 --- a/drivers/net/wireless/ath/carl9170/tx.c 
    86 +++ b/drivers/net/wireless/ath/carl9170/tx.c 
    87 @@ -1236,6 +1236,7 @@ static bool carl9170_tx_ps_drop(struct a 
    88  { 
    89         struct ieee80211_sta *sta; 
    90         struct carl9170_sta_info *sta_info; 
    91 +       struct ieee80211_tx_info *tx_info; 
    92   
    93         rcu_read_lock(); 
    94         sta = __carl9170_get_tx_sta(ar, skb); 
    95 @@ -1243,12 +1244,13 @@ static bool carl9170_tx_ps_drop(struct a 
    96                 goto out_rcu; 
    97   
    98         sta_info = (void *) sta->drv_priv; 
    99 -       if (unlikely(sta_info->sleeping)) { 
    100 -               struct ieee80211_tx_info *tx_info; 
    101 +       tx_info = IEEE80211_SKB_CB(skb); 
    102   
    103 +       if (unlikely(sta_info->sleeping) && 
    104 +           !(tx_info->flags & (IEEE80211_TX_CTL_NO_PS_BUFFER | 
    105 +                               IEEE80211_TX_CTL_CLEAR_PS_FILT))) { 
    106                 rcu_read_unlock(); 
    107   
    108 -               tx_info = IEEE80211_SKB_CB(skb); 
    109                 if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) 
    110                         atomic_dec(&ar->tx_ampdu_upload); 
    111   
    112 --- a/drivers/net/wireless/iwlegacy/4965-mac.c 
    113 +++ b/drivers/net/wireless/iwlegacy/4965-mac.c 
    114 @@ -1694,7 +1694,7 @@ il4965_tx_skb(struct il_priv *il, struct 
    115                 sta_priv = (void *)sta->drv_priv; 
    116   
    117         if (sta_priv && sta_priv->asleep && 
    118 -           (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE)) { 
    119 +           (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) { 
     544        if ((status & ATH9K_INT_TSFOOR) && sc->ps_enabled) { 
    120545                /* 
    121                  * This sends an asynchronous command to the device, 
    122                  * but we can rely on it being processed before the 
    123 --- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c 
    124 +++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c 
    125 @@ -322,7 +322,7 @@ int iwlagn_tx_skb(struct iwl_priv *priv, 
    126                 sta_priv = (void *)info->control.sta->drv_priv; 
    127   
    128         if (sta_priv && sta_priv->asleep && 
    129 -           (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE)) { 
    130 +           (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) { 
    131                 /* 
    132                  * This sends an asynchronous command to the device, 
    133                  * but we can rely on it being processed before the 
    134 @@ -331,6 +331,10 @@ int iwlagn_tx_skb(struct iwl_priv *priv, 
    135                  * counter. 
    136                  * For now set the counter to just 1 since we do not 
    137                  * support uAPSD yet. 
    138 +                * 
    139 +                * FIXME: If we get two non-bufferable frames one 
    140 +                * after the other, we might only send out one of 
    141 +                * them because this is racy. 
    142                  */ 
    143                 iwl_sta_modify_sleep_tx_count(priv, sta_id, 1); 
    144         } 
    145 --- a/drivers/net/wireless/p54/txrx.c 
    146 +++ b/drivers/net/wireless/p54/txrx.c 
    147 @@ -690,7 +690,7 @@ static void p54_tx_80211_header(struct p 
    148         if (!(info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)) 
    149                 *flags |= P54_HDR_FLAG_DATA_OUT_SEQNR; 
    150   
    151 -       if (info->flags & IEEE80211_TX_CTL_POLL_RESPONSE) 
    152 +       if (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER) 
    153                 *flags |= P54_HDR_FLAG_DATA_OUT_NOCANCEL; 
    154   
    155         if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT) 
    156 --- a/include/net/mac80211.h 
    157 +++ b/include/net/mac80211.h 
    158 @@ -341,9 +341,9 @@ struct ieee80211_bss_conf { 
    159   *     used to indicate that a frame was already retried due to PS 
    160   * @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211, 
    161   *     used to indicate frame should not be encrypted 
    162 - * @IEEE80211_TX_CTL_POLL_RESPONSE: This frame is a response to a poll 
    163 - *     frame (PS-Poll or uAPSD) and should be sent although the station 
    164 - *     is in powersave mode. 
    165 + * @IEEE80211_TX_CTL_NO_PS_BUFFER: This frame is a response to a poll 
    166 + *     frame (PS-Poll or uAPSD) or a non-bufferable MMPDU and must 
    167 + *     be sent although the station is in powersave mode. 
    168   * @IEEE80211_TX_CTL_MORE_FRAMES: More frames will be passed to the 
    169   *     transmit function after the current frame, this can be used 
    170   *     by drivers to kick the DMA queue only if unset or when the 
    171 @@ -399,7 +399,7 @@ enum mac80211_tx_control_flags { 
    172         IEEE80211_TX_INTFL_NEED_TXPROCESSING    = BIT(14), 
    173         IEEE80211_TX_INTFL_RETRIED              = BIT(15), 
    174         IEEE80211_TX_INTFL_DONT_ENCRYPT         = BIT(16), 
    175 -       IEEE80211_TX_CTL_POLL_RESPONSE          = BIT(17), 
    176 +       IEEE80211_TX_CTL_NO_PS_BUFFER           = BIT(17), 
    177         IEEE80211_TX_CTL_MORE_FRAMES            = BIT(18), 
    178         IEEE80211_TX_INTFL_RETRANSMISSION       = BIT(19), 
    179         /* hole at 20, use later */ 
    180 @@ -425,7 +425,7 @@ enum mac80211_tx_control_flags { 
    181         IEEE80211_TX_CTL_SEND_AFTER_DTIM | IEEE80211_TX_CTL_AMPDU |           \ 
    182         IEEE80211_TX_STAT_TX_FILTERED | IEEE80211_TX_STAT_ACK |               \ 
    183         IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_STAT_AMPDU_NO_BACK |           \ 
    184 -       IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_POLL_RESPONSE |   \ 
    185 +       IEEE80211_TX_CTL_RATE_CTRL_PROBE | IEEE80211_TX_CTL_NO_PS_BUFFER |    \ 
    186         IEEE80211_TX_CTL_MORE_FRAMES | IEEE80211_TX_CTL_LDPC |                \ 
    187         IEEE80211_TX_CTL_STBC | IEEE80211_TX_STATUS_EOSP) 
    188   
    189 @@ -659,6 +659,8 @@ ieee80211_tx_info_clear_status(struct ie 
    190   * @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index 
    191   * @RX_FLAG_40MHZ: HT40 (40 MHz) was used 
    192   * @RX_FLAG_SHORT_GI: Short guard interval was used 
    193 + * @RX_FLAG_NO_SIGNAL_VAL: The signal strength value is not present. 
    194 + *     Valid only for data frames (mainly A-MPDU) 
    195   */ 
    196  enum mac80211_rx_flags { 
    197         RX_FLAG_MMIC_ERROR      = 1<<0, 
    198 @@ -672,6 +674,7 @@ enum mac80211_rx_flags { 
    199         RX_FLAG_HT              = 1<<9, 
    200         RX_FLAG_40MHZ           = 1<<10, 
    201         RX_FLAG_SHORT_GI        = 1<<11, 
    202 +       RX_FLAG_NO_SIGNAL_VAL   = 1<<12, 
    203  }; 
    204   
    205  /** 
    206 @@ -1634,7 +1637,7 @@ void ieee80211_free_txskb(struct ieee802 
    207   * the station sends a PS-Poll or a uAPSD trigger frame, mac80211 
    208   * will inform the driver of this with the @allow_buffered_frames 
    209   * callback; this callback is optional. mac80211 will then transmit 
    210 - * the frames as usual and set the %IEEE80211_TX_CTL_POLL_RESPONSE 
    211 + * the frames as usual and set the %IEEE80211_TX_CTL_NO_PS_BUFFER 
    212   * on each frame. The last frame in the service period (or the only 
    213   * response to a PS-Poll) also has %IEEE80211_TX_STATUS_EOSP set to 
    214   * indicate that it ends the service period; as this frame must have 
    215 @@ -1642,6 +1645,9 @@ void ieee80211_free_txskb(struct ieee802 
    216   * When TX status is reported for this frame, the service period is 
    217   * marked has having ended and a new one can be started by the peer. 
    218   * 
    219 + * Additionally, non-bufferable MMPDUs can also be transmitted by 
    220 + * mac80211 with the %IEEE80211_TX_CTL_NO_PS_BUFFER set in them. 
    221 + * 
    222   * Another race condition can happen on some devices like iwlwifi 
    223   * when there are frames queued for the station and it wakes up 
    224   * or polls; the frames that are already queued could end up being 
    225 @@ -2140,7 +2146,7 @@ enum ieee80211_frame_release_type { 
    226   * @allow_buffered_frames: Prepare device to allow the given number of frames 
    227   *     to go out to the given station. The frames will be sent by mac80211 
    228   *     via the usual TX path after this call. The TX information for frames 
    229 - *     released will also have the %IEEE80211_TX_CTL_POLL_RESPONSE flag set 
    230 + *     released will also have the %IEEE80211_TX_CTL_NO_PS_BUFFER flag set 
    231   *     and the last one will also have %IEEE80211_TX_STATUS_EOSP set. In case 
    232   *     frames from multiple TIDs are released and the driver might reorder 
    233   *     them between the TIDs, it must set the %IEEE80211_TX_STATUS_EOSP flag 
     546                 * TSF sync does not look correct; remain awake to sync with 
    234547--- a/net/mac80211/agg-rx.c 
    235548+++ b/net/mac80211/agg-rx.c 
    236 @@ -187,6 +187,8 @@ static void ieee80211_send_addba_resp(st 
     549@@ -200,6 +200,8 @@ static void ieee80211_send_addba_resp(st 
    237550                memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); 
    238551        else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) 
     
    255568        else if (sdata->vif.type == NL80211_IFTYPE_STATION) 
    256569                memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); 
    257 @@ -471,6 +472,7 @@ int ieee80211_start_tx_ba_session(struct 
     570@@ -484,6 +485,7 @@ int ieee80211_start_tx_ba_session(struct 
    258571            sdata->vif.type != NL80211_IFTYPE_MESH_POINT && 
    259572            sdata->vif.type != NL80211_IFTYPE_AP_VLAN && 
     
    269582  
    270583        int res = scnprintf(buf, sizeof(buf), 
    271 -                           "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", 
    272 +                           "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", 
     584-                           "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", 
     585+                           "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", 
    273586                            TEST(AUTH), TEST(ASSOC), TEST(PS_STA), 
    274587                            TEST(PS_DRIVER), TEST(AUTHORIZED), 
     
    281594--- a/net/mac80211/iface.c 
    282595+++ b/net/mac80211/iface.c 
    283 @@ -178,7 +178,6 @@ static int ieee80211_do_open(struct net_ 
     596@@ -163,7 +163,8 @@ static int ieee80211_check_queues(struct 
     597                        return -EINVAL; 
     598        } 
     599  
     600-       if (sdata->vif.type != NL80211_IFTYPE_AP) { 
     601+       if ((sdata->vif.type != NL80211_IFTYPE_AP) || 
     602+           !(sdata->local->hw.flags & IEEE80211_HW_QUEUE_CONTROL)) { 
     603                sdata->vif.cab_queue = IEEE80211_INVAL_HW_QUEUE; 
     604                return 0; 
     605        } 
     606@@ -281,7 +282,6 @@ static int ieee80211_do_open(struct net_ 
    284607 { 
    285608        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); 
     
    289612        int res; 
    290613        u32 hw_reconf_flags = 0; 
    291 @@ -309,28 +308,6 @@ static int ieee80211_do_open(struct net_ 
     614@@ -427,28 +427,6 @@ static int ieee80211_do_open(struct net_ 
    292615  
    293616        set_bit(SDATA_STATE_RUNNING, &sdata->state); 
     
    318641         * set_multicast_list will be invoked by the networking core 
    319642         * which will check whether any increments here were done in 
    320 @@ -357,8 +334,7 @@ static int ieee80211_do_open(struct net_ 
    321         netif_tx_start_all_queues(dev); 
    322   
    323         return 0; 
    324 - err_del_interface: 
    325 -       drv_remove_interface(local, sdata); 
    326 + 
    327   err_stop: 
    328         if (!local->open_count) 
    329                 drv_stop(local); 
    330 @@ -722,6 +698,70 @@ static void ieee80211_if_setup(struct ne 
     643@@ -845,6 +823,70 @@ static void ieee80211_if_setup(struct ne 
    331644        dev->destructor = free_netdev; 
    332645 } 
     
    361674+                              skb->len - baselen, &elems); 
    362675+ 
    363 +       rates = ieee80211_sta_get_rates(local, &elems, band); 
     676+       rates = ieee80211_sta_get_rates(local, &elems, band, NULL); 
    364677+ 
    365678+       rcu_read_lock(); 
     
    399712 { 
    400713        struct ieee80211_sub_if_data *sdata = 
    401 @@ -826,6 +866,9 @@ static void ieee80211_iface_work(struct  
     714@@ -949,6 +991,9 @@ static void ieee80211_iface_work(struct  
    402715                                break; 
    403716                        ieee80211_mesh_rx_queued_mgmt(sdata, skb); 
     
    411724--- a/net/mac80211/rx.c 
    412725+++ b/net/mac80211/rx.c 
    413 @@ -177,7 +177,8 @@ ieee80211_add_rx_radiotap_header(struct  
    414         pos += 2; 
    415   
    416         /* IEEE80211_RADIOTAP_DBM_ANTSIGNAL */ 
    417 -       if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM) { 
    418 +       if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM && 
    419 +           !(status->flag & RX_FLAG_NO_SIGNAL_VAL)) { 
    420                 *pos = status->signal; 
    421                 rthdr->it_present |= 
    422                         cpu_to_le32(1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL); 
    423 @@ -489,12 +490,12 @@ ieee80211_rx_mesh_check(struct ieee80211 
    424                         if (ieee80211_has_tods(hdr->frame_control) || 
    425                                 !ieee80211_has_fromds(hdr->frame_control)) 
    426                                 return RX_DROP_MONITOR; 
    427 -                       if (memcmp(hdr->addr3, dev_addr, ETH_ALEN) == 0) 
    428 +                       if (compare_ether_addr(hdr->addr3, dev_addr) == 0) 
    429                                 return RX_DROP_MONITOR; 
    430                 } else { 
    431                         if (!ieee80211_has_a4(hdr->frame_control)) 
    432                                 return RX_DROP_MONITOR; 
    433 -                       if (memcmp(hdr->addr4, dev_addr, ETH_ALEN) == 0) 
    434 +                       if (compare_ether_addr(hdr->addr4, dev_addr) == 0) 
    435                                 return RX_DROP_MONITOR; 
    436                 } 
    437         } 
    438 @@ -1309,8 +1310,10 @@ ieee80211_rx_h_sta_process(struct ieee80 
    439   
    440         sta->rx_fragments++; 
    441         sta->rx_bytes += rx->skb->len; 
    442 -       sta->last_signal = status->signal; 
    443 -       ewma_add(&sta->avg_signal, -status->signal); 
    444 +       if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) { 
    445 +               sta->last_signal = status->signal; 
    446 +               ewma_add(&sta->avg_signal, -status->signal); 
    447 +       } 
    448   
    449         /* 
    450          * Change STA power saving mode only at the end of a frame 
    451 @@ -2282,6 +2285,7 @@ ieee80211_rx_h_action(struct ieee80211_r 
     726@@ -103,7 +103,7 @@ static void 
     727 ieee80211_add_rx_radiotap_header(struct ieee80211_local *local, 
     728                                 struct sk_buff *skb, 
     729                                 struct ieee80211_rate *rate, 
     730-                                int rtap_len) 
     731+                                int rtap_len, bool has_fcs) 
     732 { 
     733        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); 
     734        struct ieee80211_radiotap_header *rthdr; 
     735@@ -134,7 +134,7 @@ ieee80211_add_rx_radiotap_header(struct  
     736        } 
     737  
     738        /* IEEE80211_RADIOTAP_FLAGS */ 
     739-       if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS) 
     740+       if (has_fcs && (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS)) 
     741                *pos |= IEEE80211_RADIOTAP_F_FCS; 
     742        if (status->flag & (RX_FLAG_FAILED_FCS_CRC | RX_FLAG_FAILED_PLCP_CRC)) 
     743                *pos |= IEEE80211_RADIOTAP_F_BADFCS; 
     744@@ -294,7 +294,8 @@ ieee80211_rx_monitor(struct ieee80211_lo 
     745        } 
     746  
     747        /* prepend radiotap information */ 
     748-       ieee80211_add_rx_radiotap_header(local, skb, rate, needed_headroom); 
     749+       ieee80211_add_rx_radiotap_header(local, skb, rate, needed_headroom, 
     750+                                        true); 
     751  
     752        skb_reset_mac_header(skb); 
     753        skb->ip_summed = CHECKSUM_UNNECESSARY; 
     754@@ -2282,6 +2283,7 @@ ieee80211_rx_h_action(struct ieee80211_r 
    452755                    sdata->vif.type != NL80211_IFTYPE_MESH_POINT && 
    453756                    sdata->vif.type != NL80211_IFTYPE_AP_VLAN && 
     
    457760                        break; 
    458761  
    459 @@ -2336,7 +2340,7 @@ ieee80211_rx_h_action(struct ieee80211_r 
    460                         if (sdata->vif.type != NL80211_IFTYPE_STATION) 
    461                                 break; 
    462   
    463 -                       if (memcmp(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN)) 
    464 +                       if (compare_ether_addr(mgmt->bssid, sdata->u.mgd.bssid)) 
    465                                 break; 
    466   
    467                         goto queue; 
    468 @@ -2492,14 +2496,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ 
     762@@ -2496,14 +2498,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ 
    469763  
    470764        if (!ieee80211_vif_is_mesh(&sdata->vif) && 
     
    484778        case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP): 
    485779        case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP): 
    486 @@ -2853,10 +2858,16 @@ static int prepare_for_handlers(struct i 
     780@@ -2567,7 +2570,8 @@ static void ieee80211_rx_cooked_monitor( 
     781                goto out_free_skb; 
     782  
     783        /* prepend radiotap information */ 
     784-       ieee80211_add_rx_radiotap_header(local, skb, rate, needed_headroom); 
     785+       ieee80211_add_rx_radiotap_header(local, skb, rate, needed_headroom, 
     786+                                        false); 
     787  
     788        skb_set_mac_header(skb, 0); 
     789        skb->ip_summed = CHECKSUM_UNNECESSARY; 
     790@@ -2836,10 +2840,16 @@ static int prepare_for_handlers(struct i 
    487791                } 
    488792                break; 
     
    503807        default: 
    504808                /* should never get here */ 
    505 --- a/net/mac80211/sta_info.c 
    506 +++ b/net/mac80211/sta_info.c 
    507 @@ -9,6 +9,7 @@ 
    508   
    509  #include <linux/module.h> 
    510  #include <linux/init.h> 
    511 +#include <linux/etherdevice.h> 
    512  #include <linux/netdevice.h> 
    513  #include <linux/types.h> 
    514  #include <linux/slab.h> 
    515 @@ -101,7 +102,7 @@ struct sta_info *sta_info_get(struct iee 
    516                                     lockdep_is_held(&local->sta_mtx)); 
    517         while (sta) { 
    518                 if (sta->sdata == sdata && 
    519 -                   memcmp(sta->sta.addr, addr, ETH_ALEN) == 0) 
    520 +                   compare_ether_addr(sta->sta.addr, addr) == 0) 
    521                         break; 
    522                 sta = rcu_dereference_check(sta->hnext, 
    523                                             lockdep_is_held(&local->sta_mtx)); 
    524 @@ -124,7 +125,7 @@ struct sta_info *sta_info_get_bss(struct 
    525         while (sta) { 
    526                 if ((sta->sdata == sdata || 
    527                      (sta->sdata->bss && sta->sdata->bss == sdata->bss)) && 
    528 -                   memcmp(sta->sta.addr, addr, ETH_ALEN) == 0) 
    529 +                   compare_ether_addr(sta->sta.addr, addr) == 0) 
    530                         break; 
    531                 sta = rcu_dereference_check(sta->hnext, 
    532                                             lockdep_is_held(&local->sta_mtx)); 
    533 @@ -1050,7 +1051,7 @@ static void ieee80211_send_null_response 
    534          * exchange. Also set EOSP to indicate this packet 
    535          * ends the poll/service period. 
    536          */ 
    537 -       info->flags |= IEEE80211_TX_CTL_POLL_RESPONSE | 
    538 +       info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER | 
    539                        IEEE80211_TX_STATUS_EOSP | 
    540                        IEEE80211_TX_CTL_REQ_TX_STATUS; 
    541   
    542 @@ -1177,7 +1178,7 @@ ieee80211_sta_ps_deliver_response(struct 
    543                          * STA may still remain is PS mode after this frame 
    544                          * exchange. 
    545                          */ 
    546 -                       info->flags |= IEEE80211_TX_CTL_POLL_RESPONSE; 
    547 +                       info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; 
    548   
    549                         /* 
    550                          * Use MoreData flag to indicate whether there are 
    551809--- a/net/mac80211/sta_info.h 
    552810+++ b/net/mac80211/sta_info.h 
    553 @@ -14,6 +14,7 @@ 
    554  #include <linux/if_ether.h> 
    555  #include <linux/workqueue.h> 
    556  #include <linux/average.h> 
    557 +#include <linux/etherdevice.h> 
    558  #include "key.h" 
    559   
    560  /** 
    561 @@ -31,7 +32,6 @@ 
     811@@ -32,7 +32,6 @@ 
    562812  * @WLAN_STA_SHORT_PREAMBLE: Station is capable of receiving short-preamble 
    563813  *     frames. 
     
    567817  *     IEEE80211_TX_CTL_CLEAR_PS_FILT control flag) when the next 
    568818  *     frame to this station is transmitted. 
    569 @@ -62,7 +62,6 @@ enum ieee80211_sta_info_flags { 
     819@@ -64,7 +63,6 @@ enum ieee80211_sta_info_flags { 
    570820        WLAN_STA_AUTHORIZED, 
    571821        WLAN_STA_SHORT_PREAMBLE, 
     
    575825        WLAN_STA_MFP, 
    576826        WLAN_STA_BLOCK_BA, 
    577 @@ -489,7 +488,7 @@ void for_each_sta_info_type_check(struct 
    578                 nxt = _sta ? rcu_dereference(_sta->hnext) : NULL        \ 
    579              )                                                          \ 
    580         /* compare address and run code only if it matches */           \ 
    581 -       if (memcmp(_sta->sta.addr, (_addr), ETH_ALEN) == 0) 
    582 +       if (compare_ether_addr(_sta->sta.addr, (_addr)) == 0) 
    583   
    584  /* 
    585   * Get STA info by index, BROKEN! 
    586 --- a/net/mac80211/tx.c 
    587 +++ b/net/mac80211/tx.c 
    588 @@ -448,18 +448,23 @@ ieee80211_tx_h_unicast_ps_buf(struct iee 
    589         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; 
    590         struct ieee80211_local *local = tx->local; 
    591   
    592 -       if (unlikely(!sta || 
    593 -                    ieee80211_is_probe_resp(hdr->frame_control) || 
    594 -                    ieee80211_is_auth(hdr->frame_control) || 
    595 -                    ieee80211_is_assoc_resp(hdr->frame_control) || 
    596 -                    ieee80211_is_reassoc_resp(hdr->frame_control))) 
    597 +       if (unlikely(!sta)) 
    598                 return TX_CONTINUE; 
    599   
    600         if (unlikely((test_sta_flag(sta, WLAN_STA_PS_STA) || 
    601                       test_sta_flag(sta, WLAN_STA_PS_DRIVER)) && 
    602 -                    !(info->flags & IEEE80211_TX_CTL_POLL_RESPONSE))) { 
    603 +                    !(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) { 
    604                 int ac = skb_get_queue_mapping(tx->skb); 
    605   
    606 +               /* only deauth, disassoc and action are bufferable MMPDUs */ 
    607 +               if (ieee80211_is_mgmt(hdr->frame_control) && 
    608 +                   !ieee80211_is_deauth(hdr->frame_control) && 
    609 +                   !ieee80211_is_disassoc(hdr->frame_control) && 
    610 +                   !ieee80211_is_action(hdr->frame_control)) { 
    611 +                       info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; 
    612 +                       return TX_CONTINUE; 
    613 +               } 
    614 + 
    615  #ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG 
    616                 printk(KERN_DEBUG "STA %pM aid %d: PS buffer for AC %d\n", 
    617                        sta->sta.addr, sta->sta.aid, ac); 
    618 @@ -1060,6 +1065,7 @@ static bool ieee80211_tx_prep_agg(struct 
    619  { 
    620         bool queued = false; 
    621         bool reset_agg_timer = false; 
    622 +       struct sk_buff *purge_skb = NULL; 
    623   
    624         if (test_bit(HT_AGG_STATE_OPERATIONAL, &tid_tx->state)) { 
    625                 info->flags |= IEEE80211_TX_CTL_AMPDU; 
    626 @@ -1101,8 +1107,13 @@ static bool ieee80211_tx_prep_agg(struct 
    627                         info->control.vif = &tx->sdata->vif; 
    628                         info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; 
    629                         __skb_queue_tail(&tid_tx->pending, skb); 
    630 +                       if (skb_queue_len(&tid_tx->pending) > STA_MAX_TX_BUFFER) 
    631 +                               purge_skb = __skb_dequeue(&tid_tx->pending); 
    632                 } 
    633                 spin_unlock(&tx->sta->lock); 
    634 + 
    635 +               if (purge_skb) 
    636 +                       dev_kfree_skb(purge_skb); 
    637         } 
    638   
    639         /* reset session timer */ 
    640 --- a/net/mac80211/ieee80211_i.h 
    641 +++ b/net/mac80211/ieee80211_i.h 
    642 @@ -480,7 +480,7 @@ struct ieee80211_if_ibss { 
    643   
    644         bool control_port; 
    645   
    646 -       u8 bssid[ETH_ALEN]; 
    647 +       u8 bssid[ETH_ALEN] __aligned(2); 
    648         u8 ssid[IEEE80211_MAX_SSID_LEN]; 
    649         u8 ssid_len, ie_len; 
    650         u8 *ie; 
     827--- a/drivers/net/wireless/ath/ath9k/init.c 
     828+++ b/drivers/net/wireless/ath/ath9k/init.c 
     829@@ -647,6 +647,21 @@ void ath9k_reload_chainmask_settings(str 
     830                setup_ht_cap(sc, &sc->sbands[IEEE80211_BAND_5GHZ].ht_cap); 
     831 } 
     832  
     833+static const struct ieee80211_iface_limit if_limits[] = { 
     834+       { .max = 256,   .types = BIT(NL80211_IFTYPE_STATION) | 
     835+                                BIT(NL80211_IFTYPE_P2P_CLIENT) | 
     836+                                BIT(NL80211_IFTYPE_WDS) }, 
     837+       { .max = 8,     .types = BIT(NL80211_IFTYPE_AP) | 
     838+                                BIT(NL80211_IFTYPE_P2P_GO) | 
     839+                                BIT(NL80211_IFTYPE_MESH_POINT) }, 
     840+}; 
     841+ 
     842+static const struct ieee80211_iface_combination if_comb = { 
     843+       .limits = if_limits, 
     844+       .n_limits = ARRAY_SIZE(if_limits), 
     845+       .max_interfaces = 256, 
     846+       .num_different_channels = 1, 
     847+}; 
     848  
     849 void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) 
     850 { 
     851@@ -676,6 +691,9 @@ void ath9k_set_hw_capab(struct ath_softc 
     852                BIT(NL80211_IFTYPE_ADHOC) | 
     853                BIT(NL80211_IFTYPE_MESH_POINT); 
     854  
     855+       hw->wiphy->iface_combinations = &if_comb; 
     856+       hw->wiphy->n_iface_combinations = 1; 
     857+ 
     858        if (AR_SREV_5416(sc->sc_ah)) 
     859                hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; 
     860  
    651861--- a/net/mac80211/ibss.c 
    652862+++ b/net/mac80211/ibss.c 
    653 @@ -66,7 +66,7 @@ static void __ieee80211_sta_join_ibss(st 
    654         skb_reset_tail_pointer(skb); 
    655         skb_reserve(skb, sdata->local->hw.extra_tx_headroom); 
    656   
    657 -       if (memcmp(ifibss->bssid, bssid, ETH_ALEN)) 
    658 +       if (compare_ether_addr(ifibss->bssid, bssid)) 
    659                 sta_info_flush(sdata->local, sdata); 
    660   
    661         /* if merging, indicate to driver that we leave the old IBSS */ 
    662 @@ -403,7 +403,7 @@ static void ieee80211_rx_bss_info(struct 
    663                 return; 
    664   
    665         if (sdata->vif.type == NL80211_IFTYPE_ADHOC && 
    666 -           memcmp(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN) == 0) { 
    667 +           compare_ether_addr(mgmt->bssid, sdata->u.ibss.bssid) == 0) { 
    668   
    669                 rcu_read_lock(); 
    670                 sta = sta_info_get(sdata, mgmt->sa); 
    671 @@ -508,7 +508,7 @@ static void ieee80211_rx_bss_info(struct 
    672                 goto put_bss; 
    673   
    674         /* same BSSID */ 
    675 -       if (memcmp(cbss->bssid, sdata->u.ibss.bssid, ETH_ALEN) == 0) 
    676 +       if (compare_ether_addr(cbss->bssid, sdata->u.ibss.bssid) == 0) 
    677                 goto put_bss; 
    678   
    679         if (rx_status->flag & RX_FLAG_MACTIME_MPDU) { 
    680 @@ -831,8 +831,8 @@ static void ieee80211_rx_mgmt_probe_req( 
    681         if (!tx_last_beacon && is_multicast_ether_addr(mgmt->da)) 
    682                 return; 
    683   
    684 -       if (memcmp(mgmt->bssid, ifibss->bssid, ETH_ALEN) != 0 && 
    685 -           memcmp(mgmt->bssid, "\xff\xff\xff\xff\xff\xff", ETH_ALEN) != 0) 
    686 +       if (compare_ether_addr(mgmt->bssid, ifibss->bssid) != 0 && 
    687 +           !is_broadcast_ether_addr(mgmt->bssid)) 
    688                 return; 
    689   
    690         end = ((u8 *) mgmt) + len; 
    691 --- a/net/mac80211/mesh.c 
    692 +++ b/net/mac80211/mesh.c 
    693 @@ -204,7 +204,7 @@ int mesh_rmc_check(u8 *sa, struct ieee80 
    694                         kmem_cache_free(rm_cache, p); 
    695                         --entries; 
    696                 } else if ((seqnum == p->seqnum) && 
    697 -                          (memcmp(sa, p->sa, ETH_ALEN) == 0)) 
    698 +                          (compare_ether_addr(sa, p->sa) == 0)) 
    699                         return -1; 
    700         } 
    701   
    702 --- a/net/mac80211/mesh_hwmp.c 
    703 +++ b/net/mac80211/mesh_hwmp.c 
    704 @@ -8,6 +8,7 @@ 
    705   */ 
    706   
    707  #include <linux/slab.h> 
    708 +#include <linux/etherdevice.h> 
    709  #include <asm/unaligned.h> 
    710  #include "wme.h" 
    711  #include "mesh.h" 
    712 @@ -419,7 +420,7 @@ static u32 hwmp_route_info_get(struct ie 
    713                 new_metric = MAX_METRIC; 
    714         exp_time = TU_TO_EXP_TIME(orig_lifetime); 
    715   
    716 -       if (memcmp(orig_addr, sdata->vif.addr, ETH_ALEN) == 0) { 
    717 +       if (compare_ether_addr(orig_addr, sdata->vif.addr) == 0) { 
    718                 /* This MP is the originator, we are not interested in this 
    719                  * frame, except for updating transmitter's path info. 
    720                  */ 
    721 @@ -469,7 +470,7 @@ static u32 hwmp_route_info_get(struct ie 
    722   
    723         /* Update and check transmitter routing info */ 
    724         ta = mgmt->sa; 
    725 -       if (memcmp(orig_addr, ta, ETH_ALEN) == 0) 
    726 +       if (compare_ether_addr(orig_addr, ta) == 0) 
    727                 fresh_info = false; 
    728         else { 
    729                 fresh_info = true; 
    730 @@ -529,7 +530,7 @@ static void hwmp_preq_frame_process(stru 
    731   
    732         mhwmp_dbg("received PREQ from %pM", orig_addr); 
    733   
    734 -       if (memcmp(target_addr, sdata->vif.addr, ETH_ALEN) == 0) { 
    735 +       if (compare_ether_addr(target_addr, sdata->vif.addr) == 0) { 
    736                 mhwmp_dbg("PREQ is for us"); 
    737                 forward = false; 
    738                 reply = true; 
    739 @@ -624,7 +625,7 @@ static void hwmp_prep_frame_process(stru 
    740         mhwmp_dbg("received PREP from %pM", PREP_IE_ORIG_ADDR(prep_elem)); 
    741   
    742         orig_addr = PREP_IE_ORIG_ADDR(prep_elem); 
    743 -       if (memcmp(orig_addr, sdata->vif.addr, ETH_ALEN) == 0) 
    744 +       if (compare_ether_addr(orig_addr, sdata->vif.addr) == 0) 
    745                 /* destination, no forwarding required */ 
    746                 return; 
    747   
    748 @@ -694,10 +695,12 @@ static void hwmp_perr_frame_process(stru 
    749         rcu_read_lock(); 
    750         mpath = mesh_path_lookup(target_addr, sdata); 
    751         if (mpath) { 
    752 +               struct sta_info *sta; 
    753 + 
    754                 spin_lock_bh(&mpath->state_lock); 
    755 +               sta = next_hop_deref_protected(mpath); 
    756                 if (mpath->flags & MESH_PATH_ACTIVE && 
    757 -                   memcmp(ta, next_hop_deref_protected(mpath)->sta.addr, 
    758 -                                                       ETH_ALEN) == 0 && 
    759 +                   compare_ether_addr(ta, sta->sta.addr) == 0 && 
    760                     (!(mpath->flags & MESH_PATH_SN_VALID) || 
    761                     SN_GT(target_sn, mpath->sn))) { 
    762                         mpath->flags &= ~MESH_PATH_ACTIVE; 
    763 @@ -739,7 +742,7 @@ static void hwmp_rann_frame_process(stru 
    764         metric = rann->rann_metric; 
    765   
    766         /*  Ignore our own RANNs */ 
    767 -       if (memcmp(orig_addr, sdata->vif.addr, ETH_ALEN) == 0) 
    768 +       if (compare_ether_addr(orig_addr, sdata->vif.addr) == 0) 
    769                 return; 
    770   
    771         mhwmp_dbg("received RANN from %pM (is_gate=%d)", orig_addr, 
    772 @@ -1064,7 +1067,7 @@ int mesh_nexthop_lookup(struct sk_buff * 
    773         if (time_after(jiffies, 
    774                        mpath->exp_time - 
    775                        msecs_to_jiffies(sdata->u.mesh.mshcfg.path_refresh_time)) && 
    776 -           !memcmp(sdata->vif.addr, hdr->addr4, ETH_ALEN) && 
    777 +           !compare_ether_addr(sdata->vif.addr, hdr->addr4) && 
    778             !(mpath->flags & MESH_PATH_RESOLVING) && 
    779             !(mpath->flags & MESH_PATH_FIXED)) 
    780                 mesh_queue_preq(mpath, PREQ_Q_F_START | PREQ_Q_F_REFRESH); 
    781 --- a/net/mac80211/mesh_pathtbl.c 
    782 +++ b/net/mac80211/mesh_pathtbl.c 
    783 @@ -350,7 +350,7 @@ static struct mesh_path *mpath_lookup(st 
    784         hlist_for_each_entry_rcu(node, n, bucket, list) { 
    785                 mpath = node->mpath; 
    786                 if (mpath->sdata == sdata && 
    787 -                               memcmp(dst, mpath->dst, ETH_ALEN) == 0) { 
    788 +                               compare_ether_addr(dst, mpath->dst) == 0) { 
    789                         if (MPATH_EXPIRED(mpath)) { 
    790                                 spin_lock_bh(&mpath->state_lock); 
    791                                 mpath->flags &= ~MESH_PATH_ACTIVE; 
    792 @@ -525,7 +525,7 @@ int mesh_path_add(u8 *dst, struct ieee80 
    793         int err = 0; 
    794         u32 hash_idx; 
    795   
    796 -       if (memcmp(dst, sdata->vif.addr, ETH_ALEN) == 0) 
    797 +       if (compare_ether_addr(dst, sdata->vif.addr) == 0) 
    798                 /* never add ourselves as neighbours */ 
    799                 return -ENOTSUPP; 
    800   
    801 @@ -566,7 +566,8 @@ int mesh_path_add(u8 *dst, struct ieee80 
    802         err = -EEXIST; 
    803         hlist_for_each_entry(node, n, bucket, list) { 
    804                 mpath = node->mpath; 
    805 -               if (mpath->sdata == sdata && memcmp(dst, mpath->dst, ETH_ALEN) == 0) 
    806 +               if (mpath->sdata == sdata && 
    807 +                   compare_ether_addr(dst, mpath->dst) == 0) 
    808                         goto err_exists; 
    809         } 
    810   
    811 @@ -657,7 +658,7 @@ int mpp_path_add(u8 *dst, u8 *mpp, struc 
    812         int err = 0; 
    813         u32 hash_idx; 
    814   
    815 -       if (memcmp(dst, sdata->vif.addr, ETH_ALEN) == 0) 
    816 +       if (compare_ether_addr(dst, sdata->vif.addr) == 0) 
    817                 /* never add ourselves as neighbours */ 
    818                 return -ENOTSUPP; 
    819   
    820 @@ -694,7 +695,8 @@ int mpp_path_add(u8 *dst, u8 *mpp, struc 
    821         err = -EEXIST; 
    822         hlist_for_each_entry(node, n, bucket, list) { 
    823                 mpath = node->mpath; 
    824 -               if (mpath->sdata == sdata && memcmp(dst, mpath->dst, ETH_ALEN) == 0) 
    825 +               if (mpath->sdata == sdata && 
    826 +                   compare_ether_addr(dst, mpath->dst) == 0) 
    827                         goto err_exists; 
    828         } 
    829   
    830 @@ -887,7 +889,7 @@ int mesh_path_del(u8 *addr, struct ieee8 
    831         hlist_for_each_entry(node, n, bucket, list) { 
    832                 mpath = node->mpath; 
    833                 if (mpath->sdata == sdata && 
    834 -                   memcmp(addr, mpath->dst, ETH_ALEN) == 0) { 
    835 +                   compare_ether_addr(addr, mpath->dst) == 0) { 
    836                         __mesh_path_del(tbl, node); 
    837                         goto enddel; 
    838                 } 
    839 --- a/net/mac80211/mlme.c 
    840 +++ b/net/mac80211/mlme.c 
    841 @@ -1812,7 +1812,7 @@ ieee80211_rx_mgmt_auth(struct ieee80211_ 
    842   
    843         memcpy(bssid, ifmgd->auth_data->bss->bssid, ETH_ALEN); 
    844   
    845 -       if (memcmp(bssid, mgmt->bssid, ETH_ALEN)) 
    846 +       if (compare_ether_addr(bssid, mgmt->bssid)) 
    847                 return RX_MGMT_NONE; 
    848   
    849         auth_alg = le16_to_cpu(mgmt->u.auth.auth_alg); 
    850 @@ -1893,7 +1893,7 @@ ieee80211_rx_mgmt_deauth(struct ieee8021 
    851                 return RX_MGMT_NONE; 
    852   
    853         if (!ifmgd->associated || 
    854 -           memcmp(mgmt->bssid, ifmgd->associated->bssid, ETH_ALEN)) 
    855 +           compare_ether_addr(mgmt->bssid, ifmgd->associated->bssid)) 
    856                 return RX_MGMT_NONE; 
    857   
    858         bssid = ifmgd->associated->bssid; 
    859 @@ -1925,7 +1925,7 @@ ieee80211_rx_mgmt_disassoc(struct ieee80 
    860                 return RX_MGMT_NONE; 
    861   
    862         if (!ifmgd->associated || 
    863 -           memcmp(mgmt->bssid, ifmgd->associated->bssid, ETH_ALEN)) 
    864 +           compare_ether_addr(mgmt->bssid, ifmgd->associated->bssid)) 
    865                 return RX_MGMT_NONE; 
    866   
    867         reason_code = le16_to_cpu(mgmt->u.disassoc.reason_code); 
    868 @@ -2190,7 +2190,7 @@ ieee80211_rx_mgmt_assoc_resp(struct ieee 
    869   
    870         if (!assoc_data) 
    871                 return RX_MGMT_NONE; 
    872 -       if (memcmp(assoc_data->bss->bssid, mgmt->bssid, ETH_ALEN)) 
    873 +       if (compare_ether_addr(assoc_data->bss->bssid, mgmt->bssid)) 
    874                 return RX_MGMT_NONE; 
    875   
    876         /* 
    877 @@ -2278,8 +2278,8 @@ static void ieee80211_rx_bss_info(struct 
    878         bool need_ps = false; 
    879   
    880         if (sdata->u.mgd.associated && 
    881 -           memcmp(mgmt->bssid, sdata->u.mgd.associated->bssid, 
    882 -                  ETH_ALEN) == 0) { 
    883 +           compare_ether_addr(mgmt->bssid, sdata->u.mgd.associated->bssid) 
    884 +           == 0) { 
    885                 bss = (void *)sdata->u.mgd.associated->priv; 
    886                 /* not previously set so we may need to recalc */ 
    887                 need_ps = !bss->dtim_period; 
    888 @@ -2334,7 +2334,7 @@ static void ieee80211_rx_mgmt_probe_resp 
    889   
    890         ASSERT_MGD_MTX(ifmgd); 
    891   
    892 -       if (memcmp(mgmt->da, sdata->vif.addr, ETH_ALEN)) 
    893 +       if (compare_ether_addr(mgmt->da, sdata->vif.addr)) 
    894                 return; /* ignore ProbeResp to foreign address */ 
    895   
    896         baselen = (u8 *) mgmt->u.probe_resp.variable - (u8 *) mgmt; 
    897 @@ -2347,11 +2347,12 @@ static void ieee80211_rx_mgmt_probe_resp 
    898         ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, false); 
    899   
    900         if (ifmgd->associated && 
    901 -           memcmp(mgmt->bssid, ifmgd->associated->bssid, ETH_ALEN) == 0) 
    902 +           compare_ether_addr(mgmt->bssid, ifmgd->associated->bssid) == 0) 
    903                 ieee80211_reset_ap_probe(sdata); 
    904   
    905         if (ifmgd->auth_data && !ifmgd->auth_data->bss->proberesp_ies && 
    906 -           memcmp(mgmt->bssid, ifmgd->auth_data->bss->bssid, ETH_ALEN) == 0) { 
    907 +           compare_ether_addr(mgmt->bssid, ifmgd->auth_data->bss->bssid) 
    908 +           == 0) { 
    909                 /* got probe response, continue with auth */ 
    910                 printk(KERN_DEBUG "%s: direct probe responded\n", sdata->name); 
    911                 ifmgd->auth_data->tries = 0; 
    912 @@ -2408,7 +2409,8 @@ static void ieee80211_rx_mgmt_beacon(str 
    913                 return; 
    914   
    915         if (ifmgd->assoc_data && !ifmgd->assoc_data->have_beacon && 
    916 -           memcmp(mgmt->bssid, ifmgd->assoc_data->bss->bssid, ETH_ALEN) == 0) { 
    917 +           compare_ether_addr(mgmt->bssid, ifmgd->assoc_data->bss->bssid) 
    918 +           == 0) { 
    919                 ieee802_11_parse_elems(mgmt->u.beacon.variable, 
    920                                        len - baselen, &elems); 
    921   
    922 @@ -2423,7 +2425,7 @@ static void ieee80211_rx_mgmt_beacon(str 
    923         } 
    924   
    925         if (!ifmgd->associated || 
    926 -           memcmp(mgmt->bssid, ifmgd->associated->bssid, ETH_ALEN)) 
    927 +           compare_ether_addr(mgmt->bssid, ifmgd->associated->bssid)) 
    928                 return; 
    929         bssid = ifmgd->associated->bssid; 
    930   
    931 @@ -3285,7 +3287,7 @@ int ieee80211_mgd_assoc(struct ieee80211 
    932                 bool match; 
    933   
    934                 /* keep sta info, bssid if matching */ 
    935 -               match = memcmp(ifmgd->bssid, req->bss->bssid, ETH_ALEN) == 0; 
    936 +               match = compare_ether_addr(ifmgd->bssid, req->bss->bssid) == 0; 
    937                 ieee80211_destroy_auth_data(sdata, match); 
    938         } 
    939   
    940 @@ -3407,7 +3409,7 @@ int ieee80211_mgd_assoc(struct ieee80211 
    941                         goto err_clear; 
    942                 } 
    943         } else 
    944 -               WARN_ON_ONCE(memcmp(ifmgd->bssid, req->bss->bssid, ETH_ALEN)); 
    945 +               WARN_ON_ONCE(compare_ether_addr(ifmgd->bssid, req->bss->bssid)); 
    946   
    947         if (!bss->dtim_period && 
    948             sdata->local->hw.flags & IEEE80211_HW_NEED_DTIM_PERIOD) { 
    949 @@ -3448,7 +3450,7 @@ int ieee80211_mgd_deauth(struct ieee8021 
    950         mutex_lock(&ifmgd->mtx); 
    951   
    952         if (ifmgd->associated && 
    953 -           memcmp(ifmgd->associated->bssid, req->bssid, ETH_ALEN) == 0) { 
    954 +           compare_ether_addr(ifmgd->associated->bssid, req->bssid) == 0) { 
    955                 ieee80211_set_disassoc(sdata, false, true); 
    956                 assoc_bss = true; 
    957         } else if (ifmgd->auth_data) { 
    958 --- a/net/mac80211/status.c 
    959 +++ b/net/mac80211/status.c 
    960 @@ -10,6 +10,7 @@ 
    961   */ 
    962   
    963  #include <linux/export.h> 
    964 +#include <linux/etherdevice.h> 
    965  #include <net/mac80211.h> 
    966  #include <asm/unaligned.h> 
    967  #include "ieee80211_i.h" 
    968 @@ -377,7 +378,7 @@ void ieee80211_tx_status(struct ieee8021 
    969   
    970         for_each_sta_info(local, hdr->addr1, sta, tmp) { 
    971                 /* skip wrong virtual interface */ 
    972 -               if (memcmp(hdr->addr2, sta->sdata->vif.addr, ETH_ALEN)) 
    973 +               if (compare_ether_addr(hdr->addr2, sta->sdata->vif.addr)) 
    974                         continue; 
    975   
    976                 if (info->flags & IEEE80211_TX_STATUS_EOSP) 
    977 --- a/net/wireless/mlme.c 
    978 +++ b/net/wireless/mlme.c 
    979 @@ -6,6 +6,7 @@ 
    980   
    981  #include <linux/kernel.h> 
    982  #include <linux/module.h> 
    983 +#include <linux/etherdevice.h> 
    984  #include <linux/netdevice.h> 
    985  #include <linux/nl80211.h> 
    986  #include <linux/slab.h> 
    987 @@ -100,7 +101,7 @@ void __cfg80211_send_deauth(struct net_d 
    988         ASSERT_WDEV_LOCK(wdev); 
    989   
    990         if (wdev->current_bss && 
    991 -           memcmp(wdev->current_bss->pub.bssid, bssid, ETH_ALEN) == 0) { 
    992 +           compare_ether_addr(wdev->current_bss->pub.bssid, bssid) == 0) { 
    993                 cfg80211_unhold_bss(wdev->current_bss); 
    994                 cfg80211_put_bss(&wdev->current_bss->pub); 
    995                 wdev->current_bss = NULL; 
    996 @@ -115,7 +116,7 @@ void __cfg80211_send_deauth(struct net_d 
    997   
    998                 reason_code = le16_to_cpu(mgmt->u.deauth.reason_code); 
    999   
    1000 -               from_ap = memcmp(mgmt->sa, dev->dev_addr, ETH_ALEN) != 0; 
    1001 +               from_ap = compare_ether_addr(mgmt->sa, dev->dev_addr) != 0; 
    1002                 __cfg80211_disconnected(dev, NULL, 0, reason_code, from_ap); 
    1003         } else if (wdev->sme_state == CFG80211_SME_CONNECTING) { 
    1004                 __cfg80211_connect_result(dev, mgmt->bssid, NULL, 0, NULL, 0, 
    1005 @@ -154,7 +155,7 @@ void __cfg80211_send_disassoc(struct net 
    1006                 return; 
    1007   
    1008         if (wdev->current_bss && 
    1009 -           memcmp(wdev->current_bss->pub.bssid, bssid, ETH_ALEN) == 0) { 
    1010 +           compare_ether_addr(wdev->current_bss->pub.bssid, bssid) == 0) { 
    1011                 cfg80211_sme_disassoc(dev, wdev->current_bss); 
    1012                 cfg80211_unhold_bss(wdev->current_bss); 
    1013                 cfg80211_put_bss(&wdev->current_bss->pub); 
    1014 @@ -165,7 +166,7 @@ void __cfg80211_send_disassoc(struct net 
    1015   
    1016         reason_code = le16_to_cpu(mgmt->u.disassoc.reason_code); 
    1017   
    1018 -       from_ap = memcmp(mgmt->sa, dev->dev_addr, ETH_ALEN) != 0; 
    1019 +       from_ap = compare_ether_addr(mgmt->sa, dev->dev_addr) != 0; 
    1020         __cfg80211_disconnected(dev, NULL, 0, reason_code, from_ap); 
    1021  } 
    1022  EXPORT_SYMBOL(__cfg80211_send_disassoc); 
    1023 @@ -285,7 +286,7 @@ int __cfg80211_mlme_auth(struct cfg80211 
    1024                         return -EINVAL; 
    1025   
    1026         if (wdev->current_bss && 
    1027 -           memcmp(bssid, wdev->current_bss->pub.bssid, ETH_ALEN) == 0) 
    1028 +           compare_ether_addr(bssid, wdev->current_bss->pub.bssid) == 0) 
    1029                 return -EALREADY; 
    1030   
    1031         memset(&req, 0, sizeof(req)); 
    1032 @@ -362,7 +363,7 @@ int __cfg80211_mlme_assoc(struct cfg8021 
    1033         memset(&req, 0, sizeof(req)); 
    1034   
    1035         if (wdev->current_bss && prev_bssid && 
    1036 -           memcmp(wdev->current_bss->pub.bssid, prev_bssid, ETH_ALEN) == 0) { 
    1037 +           compare_ether_addr(wdev->current_bss->pub.bssid, prev_bssid) == 0) { 
    1038                 /* 
    1039                  * Trying to reassociate: Allow this to proceed and let the old 
    1040                  * association to be dropped when the new one is completed. 
    1041 @@ -446,7 +447,8 @@ int __cfg80211_mlme_deauth(struct cfg802 
    1042   
    1043         if (local_state_change) { 
    1044                 if (wdev->current_bss && 
    1045 -                   memcmp(wdev->current_bss->pub.bssid, bssid, ETH_ALEN) == 0) { 
    1046 +                   compare_ether_addr(wdev->current_bss->pub.bssid, bssid) 
    1047 +                   == 0) { 
    1048                         cfg80211_unhold_bss(wdev->current_bss); 
    1049                         cfg80211_put_bss(&wdev->current_bss->pub); 
    1050                         wdev->current_bss = NULL; 
    1051 @@ -495,7 +497,7 @@ static int __cfg80211_mlme_disassoc(stru 
    1052         req.local_state_change = local_state_change; 
    1053         req.ie = ie; 
    1054         req.ie_len = ie_len; 
    1055 -       if (memcmp(wdev->current_bss->pub.bssid, bssid, ETH_ALEN) == 0) 
    1056 +       if (compare_ether_addr(wdev->current_bss->pub.bssid, bssid) == 0) 
    1057                 req.bss = &wdev->current_bss->pub; 
    1058         else 
    1059                 return -ENOTCONN; 
    1060 @@ -758,8 +760,8 @@ int cfg80211_mlme_mgmt_tx(struct cfg8021 
    1061                                 break; 
    1062                         } 
    1063   
    1064 -                       if (memcmp(wdev->current_bss->pub.bssid, 
    1065 -                                  mgmt->bssid, ETH_ALEN)) { 
    1066 +                       if (compare_ether_addr(wdev->current_bss->pub.bssid, 
    1067 +                                              mgmt->bssid)) { 
    1068                                 err = -ENOTCONN; 
    1069                                 break; 
    1070                         } 
    1071 @@ -772,8 +774,8 @@ int cfg80211_mlme_mgmt_tx(struct cfg8021 
    1072                                 break; 
    1073   
    1074                         /* for station, check that DA is the AP */ 
    1075 -                       if (memcmp(wdev->current_bss->pub.bssid, 
    1076 -                                  mgmt->da, ETH_ALEN)) { 
    1077 +                       if (compare_ether_addr(wdev->current_bss->pub.bssid, 
    1078 +                                              mgmt->da)) { 
    1079                                 err = -ENOTCONN; 
    1080                                 break; 
    1081                         } 
    1082 @@ -781,11 +783,11 @@ int cfg80211_mlme_mgmt_tx(struct cfg8021 
    1083                 case NL80211_IFTYPE_AP: 
    1084                 case NL80211_IFTYPE_P2P_GO: 
    1085                 case NL80211_IFTYPE_AP_VLAN: 
    1086 -                       if (memcmp(mgmt->bssid, dev->dev_addr, ETH_ALEN)) 
    1087 +                       if (compare_ether_addr(mgmt->bssid, dev->dev_addr)) 
    1088                                 err = -EINVAL; 
    1089                         break; 
    1090                 case NL80211_IFTYPE_MESH_POINT: 
    1091 -                       if (memcmp(mgmt->sa, mgmt->bssid, ETH_ALEN)) { 
    1092 +                       if (compare_ether_addr(mgmt->sa, mgmt->bssid)) { 
    1093                                 err = -EINVAL; 
    1094                                 break; 
    1095                         } 
    1096 @@ -804,7 +806,7 @@ int cfg80211_mlme_mgmt_tx(struct cfg8021 
    1097                         return err; 
    1098         } 
    1099   
    1100 -       if (memcmp(mgmt->sa, dev->dev_addr, ETH_ALEN) != 0) 
    1101 +       if (compare_ether_addr(mgmt->sa, dev->dev_addr) != 0) 
    1102                 return -EINVAL; 
    1103   
    1104         /* Transmit the Action frame as requested by user space */ 
    1105 --- a/net/wireless/scan.c 
    1106 +++ b/net/wireless/scan.c 
    1107 @@ -378,7 +378,7 @@ static int cmp_bss_core(struct cfg80211_ 
    1108                                b->len_information_elements); 
    1109         } 
    1110   
    1111 -       return memcmp(a->bssid, b->bssid, ETH_ALEN); 
    1112 +       return compare_ether_addr(a->bssid, b->bssid); 
    1113  } 
    1114   
    1115  static int cmp_bss(struct cfg80211_bss *a, 
    1116 --- a/drivers/net/wireless/ath/ath9k/Kconfig 
    1117 +++ b/drivers/net/wireless/ath/ath9k/Kconfig 
    1118 @@ -81,6 +81,14 @@ config ATH9K_DFS_CERTIFIED 
    1119           developed. At this point enabling this option won't do anything 
    1120           except increase code size. 
    1121   
    1122 +config ATH9K_MAC_DEBUG 
    1123 +       bool "Atheros MAC statistics" 
    1124 +       depends on ATH9K_DEBUGFS 
    1125 +       default y 
    1126 +       ---help--- 
    1127 +         This option enables collection of statistics for Rx/Tx status 
    1128 +         data and some other MAC related statistics 
    1129 + 
    1130  config ATH9K_RATE_CONTROL 
    1131         bool "Atheros ath9k rate control" 
    1132         depends on ATH9K 
    1133 --- a/drivers/net/wireless/ath/ath9k/debug.c 
    1134 +++ b/drivers/net/wireless/ath/ath9k/debug.c 
    1135 @@ -818,6 +818,7 @@ void ath_debug_stat_tx(struct ath_softc  
    1136         if (ts->ts_flags & ATH9K_TX_DELIM_UNDERRUN) 
    1137                 TX_STAT_INC(qnum, delim_underrun); 
    1138   
    1139 +#ifdef CONFIG_ATH9K_MAC_DEBUG 
    1140         spin_lock(&sc->debug.samp_lock); 
    1141         TX_SAMP_DBG(jiffies) = jiffies; 
    1142         TX_SAMP_DBG(rssi_ctl0) = ts->ts_rssi_ctl0; 
    1143 @@ -844,6 +845,7 @@ void ath_debug_stat_tx(struct ath_softc  
    1144   
    1145         sc->debug.tsidx = (sc->debug.tsidx + 1) % ATH_DBG_MAX_SAMPLES; 
    1146         spin_unlock(&sc->debug.samp_lock); 
    1147 +#endif 
    1148   
    1149  #undef TX_SAMP_DBG 
    1150  } 
    1151 @@ -942,27 +944,6 @@ static ssize_t read_file_recv(struct fil 
    1152         PHY_ERR("HT-RATE ERR", ATH9K_PHYERR_HT_RATE_ILLEGAL); 
    1153   
    1154         len += snprintf(buf + len, size - len, 
    1155 -                       "%22s : %10d\n", "RSSI-CTL0", 
    1156 -                       sc->debug.stats.rxstats.rs_rssi_ctl0); 
    1157 -       len += snprintf(buf + len, size - len, 
    1158 -                       "%22s : %10d\n", "RSSI-CTL1", 
    1159 -                       sc->debug.stats.rxstats.rs_rssi_ctl1); 
    1160 -       len += snprintf(buf + len, size - len, 
    1161 -                       "%22s : %10d\n", "RSSI-CTL2", 
    1162 -                       sc->debug.stats.rxstats.rs_rssi_ctl2); 
    1163 -       len += snprintf(buf + len, size - len, 
    1164 -                       "%22s : %10d\n", "RSSI-EXT0", 
    1165 -                       sc->debug.stats.rxstats.rs_rssi_ext0); 
    1166 -       len += snprintf(buf + len, size - len, 
    1167 -                       "%22s : %10d\n", "RSSI-EXT1", 
    1168 -                       sc->debug.stats.rxstats.rs_rssi_ext1); 
    1169 -       len += snprintf(buf + len, size - len, 
    1170 -                       "%22s : %10d\n", "RSSI-EXT2", 
    1171 -                       sc->debug.stats.rxstats.rs_rssi_ext2); 
    1172 -       len += snprintf(buf + len, size - len, 
    1173 -                       "%22s : %10d\n", "Rx Antenna", 
    1174 -                       sc->debug.stats.rxstats.rs_antenna); 
    1175 -       len += snprintf(buf + len, size - len, 
    1176                         "%22s : %10u\n", "RX-Pkts-All", 
    1177                         sc->debug.stats.rxstats.rx_pkts_all); 
    1178         len += snprintf(buf + len, size - len, 
    1179 @@ -1009,16 +990,7 @@ void ath_debug_stat_rx(struct ath_softc  
    1180                         RX_PHY_ERR_INC(rs->rs_phyerr); 
    1181         } 
    1182   
    1183 -       sc->debug.stats.rxstats.rs_rssi_ctl0 = rs->rs_rssi_ctl0; 
    1184 -       sc->debug.stats.rxstats.rs_rssi_ctl1 = rs->rs_rssi_ctl1; 
    1185 -       sc->debug.stats.rxstats.rs_rssi_ctl2 = rs->rs_rssi_ctl2; 
    1186 - 
    1187 -       sc->debug.stats.rxstats.rs_rssi_ext0 = rs->rs_rssi_ext0; 
    1188 -       sc->debug.stats.rxstats.rs_rssi_ext1 = rs->rs_rssi_ext1; 
    1189 -       sc->debug.stats.rxstats.rs_rssi_ext2 = rs->rs_rssi_ext2; 
    1190 - 
    1191 -       sc->debug.stats.rxstats.rs_antenna = rs->rs_antenna; 
    1192 - 
    1193 +#ifdef CONFIG_ATH9K_MAC_DEBUG 
    1194         spin_lock(&sc->debug.samp_lock); 
    1195         RX_SAMP_DBG(jiffies) = jiffies; 
    1196         RX_SAMP_DBG(rssi_ctl0) = rs->rs_rssi_ctl0; 
    1197 @@ -1035,6 +1007,8 @@ void ath_debug_stat_rx(struct ath_softc  
    1198         sc->debug.rsidx = (sc->debug.rsidx + 1) % ATH_DBG_MAX_SAMPLES; 
    1199         spin_unlock(&sc->debug.samp_lock); 
    1200   
    1201 +#endif 
    1202 + 
    1203  #undef RX_STAT_INC 
    1204  #undef RX_PHY_ERR_INC 
    1205  #undef RX_SAMP_DBG 
    1206 @@ -1278,6 +1252,8 @@ static const struct file_operations fops 
    1207         .llseek = default_llseek, 
    1208  }; 
    1209   
    1210 +#ifdef CONFIG_ATH9K_MAC_DEBUG 
    1211 + 
    1212  void ath9k_debug_samp_bb_mac(struct ath_softc *sc) 
    1213  { 
    1214  #define ATH_SAMP_DBG(c) (sc->debug.bb_mac_samp[sc->debug.sampidx].c) 
    1215 @@ -1551,6 +1527,7 @@ static const struct file_operations fops 
    1216         .llseek = default_llseek, 
    1217  }; 
    1218   
    1219 +#endif 
    1220   
    1221  int ath9k_init_debug(struct ath_hw *ah) 
    1222  { 
    1223 @@ -1604,8 +1581,10 @@ int ath9k_init_debug(struct ath_hw *ah) 
    1224                             &fops_base_eeprom); 
    1225         debugfs_create_file("modal_eeprom", S_IRUSR, sc->debug.debugfs_phy, sc, 
    1226                             &fops_modal_eeprom); 
    1227 +#ifdef CONFIG_ATH9K_MAC_DEBUG 
    1228         debugfs_create_file("samples", S_IRUSR, sc->debug.debugfs_phy, sc, 
    1229                             &fops_samps); 
    1230 +#endif 
    1231   
    1232         debugfs_create_u32("gpio_mask", S_IRUSR | S_IWUSR, 
    1233                            sc->debug.debugfs_phy, &sc->sc_ah->gpio_mask); 
    1234 --- a/drivers/net/wireless/ath/ath9k/debug.h 
    1235 +++ b/drivers/net/wireless/ath/ath9k/debug.h 
    1236 @@ -165,13 +165,6 @@ struct ath_rx_stats { 
    1237         u32 post_delim_crc_err; 
    1238         u32 decrypt_busy_err; 
    1239         u32 phy_err_stats[ATH9K_PHYERR_MAX]; 
    1240 -       int8_t rs_rssi_ctl0; 
    1241 -       int8_t rs_rssi_ctl1; 
    1242 -       int8_t rs_rssi_ctl2; 
    1243 -       int8_t rs_rssi_ext0; 
    1244 -       int8_t rs_rssi_ext1; 
    1245 -       int8_t rs_rssi_ext2; 
    1246 -       u8 rs_antenna; 
    1247  }; 
    1248   
    1249  enum ath_reset_type { 
    1250 @@ -235,16 +228,17 @@ struct ath9k_debug { 
    1251         struct dentry *debugfs_phy; 
    1252         u32 regidx; 
    1253         struct ath_stats stats; 
    1254 +#ifdef CONFIG_ATH9K_MAC_DEBUG 
    1255         spinlock_t samp_lock; 
    1256         struct ath_dbg_bb_mac_samp bb_mac_samp[ATH_DBG_MAX_SAMPLES]; 
    1257         u8 sampidx; 
    1258         u8 tsidx; 
    1259         u8 rsidx; 
    1260 +#endif 
    1261  }; 
    1262   
    1263  int ath9k_init_debug(struct ath_hw *ah); 
    1264   
    1265 -void ath9k_debug_samp_bb_mac(struct ath_softc *sc); 
    1266  void ath_debug_stat_interrupt(struct ath_softc *sc, enum ath9k_int status); 
    1267  void ath_debug_stat_tx(struct ath_softc *sc, struct ath_buf *bf, 
    1268                        struct ath_tx_status *ts, struct ath_txq *txq, 
    1269 @@ -258,10 +252,6 @@ static inline int ath9k_init_debug(struc 
    1270         return 0; 
    1271  } 
    1272   
    1273 -static inline void ath9k_debug_samp_bb_mac(struct ath_softc *sc) 
    1274 -{ 
    1275 -} 
    1276 - 
    1277  static inline void ath_debug_stat_interrupt(struct ath_softc *sc, 
    1278                                             enum ath9k_int status) 
    1279  { 
    1280 @@ -282,4 +272,17 @@ static inline void ath_debug_stat_rx(str 
    1281   
    1282  #endif /* CONFIG_ATH9K_DEBUGFS */ 
    1283   
    1284 +#ifdef CONFIG_ATH9K_MAC_DEBUG 
    1285 + 
    1286 +void ath9k_debug_samp_bb_mac(struct ath_softc *sc); 
    1287 + 
    1288 +#else 
    1289 + 
    1290 +static inline void ath9k_debug_samp_bb_mac(struct ath_softc *sc) 
    1291 +{ 
    1292 +} 
    1293 + 
    1294 +#endif 
    1295 + 
    1296 + 
    1297  #endif /* DEBUG_H */ 
    1298 --- a/drivers/net/wireless/ath/ath9k/init.c 
    1299 +++ b/drivers/net/wireless/ath/ath9k/init.c 
    1300 @@ -555,9 +555,11 @@ static int ath9k_init_softc(u16 devid, s 
    1301         mutex_init(&sc->mutex); 
    1302  #ifdef CONFIG_ATH9K_DEBUGFS 
    1303         spin_lock_init(&sc->nodes_lock); 
    1304 -       spin_lock_init(&sc->debug.samp_lock); 
    1305         INIT_LIST_HEAD(&sc->nodes); 
    1306  #endif 
    1307 +#ifdef CONFIG_ATH9K_MAC_DEBUG 
    1308 +       spin_lock_init(&sc->debug.samp_lock); 
    1309 +#endif 
    1310         tasklet_init(&sc->intr_tq, ath9k_tasklet, (unsigned long)sc); 
    1311         tasklet_init(&sc->bcon_tasklet, ath_beacon_tasklet, 
    1312                      (unsigned long)sc); 
    1313 --- a/drivers/net/wireless/ath/ath9k/hw.c 
    1314 +++ b/drivers/net/wireless/ath/ath9k/hw.c 
    1315 @@ -1386,10 +1386,16 @@ static bool ath9k_hw_set_reset_reg(struc 
    1316  static bool ath9k_hw_chip_reset(struct ath_hw *ah, 
    1317                                 struct ath9k_channel *chan) 
    1318  { 
    1319 -       if (AR_SREV_9280(ah) && ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL)) { 
    1320 -               if (!ath9k_hw_set_reset_reg(ah, ATH9K_RESET_POWER_ON)) 
    1321 -                       return false; 
    1322 -       } else if (!ath9k_hw_set_reset_reg(ah, ATH9K_RESET_WARM)) 
    1323 +       int reset_type = ATH9K_RESET_WARM; 
    1324 + 
    1325 +       if (AR_SREV_9280(ah)) { 
    1326 +               if (ah->eep_ops->get_eeprom(ah, EEP_OL_PWRCTRL)) 
    1327 +                       reset_type = ATH9K_RESET_POWER_ON; 
    1328 +               else 
    1329 +                       reset_type = ATH9K_RESET_COLD; 
    1330 +       } 
    1331 + 
    1332 +       if (!ath9k_hw_set_reset_reg(ah, reset_type)) 
    1333                 return false; 
    1334   
    1335         if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) 
    1336 --- a/drivers/net/wireless/ath/ath5k/base.c 
    1337 +++ b/drivers/net/wireless/ath/ath5k/base.c 
    1338 @@ -2330,15 +2330,6 @@ ath5k_calibrate_work(struct work_struct  
    1339                                         "got new rfgain, resetting\n"); 
    1340                         ieee80211_queue_work(ah->hw, &ah->reset_work); 
    1341                 } 
    1342 - 
    1343 -               /* TODO: On full calibration we should stop TX here, 
    1344 -                * so that it doesn't interfere (mostly due to gain_f 
    1345 -                * calibration that messes with tx packets -see phy.c). 
    1346 -                * 
    1347 -                * NOTE: Stopping the queues from above is not enough 
    1348 -                * to stop TX but saves us from disconecting (at least 
    1349 -                * we don't lose packets). */ 
    1350 -               ieee80211_stop_queues(ah->hw); 
    1351         } else 
    1352                 ah->ah_cal_mask |= AR5K_CALIBRATION_SHORT; 
    1353   
    1354 @@ -2353,10 +2344,9 @@ ath5k_calibrate_work(struct work_struct  
    1355                                 ah->curchan->center_freq)); 
    1356   
    1357         /* Clear calibration flags */ 
    1358 -       if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) { 
    1359 -               ieee80211_wake_queues(ah->hw); 
    1360 +       if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) 
    1361                 ah->ah_cal_mask &= ~AR5K_CALIBRATION_FULL; 
    1362 -       } else if (ah->ah_cal_mask & AR5K_CALIBRATION_SHORT) 
    1363 +       else if (ah->ah_cal_mask & AR5K_CALIBRATION_SHORT) 
    1364                 ah->ah_cal_mask &= ~AR5K_CALIBRATION_SHORT; 
    1365  } 
    1366   
    1367 --- a/drivers/net/wireless/ath/ath5k/phy.c 
    1368 +++ b/drivers/net/wireless/ath/ath5k/phy.c 
    1369 @@ -1871,31 +1871,15 @@ ath5k_hw_phy_calibrate(struct ath5k_hw * 
    1370                 ret = 0; 
    1371         } 
    1372   
    1373 -       /* On full calibration do an AGC calibration and 
    1374 -        * request a PAPD probe for gainf calibration if 
    1375 -        * needed */ 
    1376 -       if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) { 
    1377 +       /* On full calibration request a PAPD probe for 
    1378 +        * gainf calibration if needed */ 
    1379 +       if ((ah->ah_cal_mask & AR5K_CALIBRATION_FULL) && 
    1380 +           (ah->ah_radio == AR5K_RF5111 || 
    1381 +            ah->ah_radio == AR5K_RF5112) && 
    1382 +           channel->hw_value != AR5K_MODE_11B) 
    1383 +               ath5k_hw_request_rfgain_probe(ah); 
    1384   
    1385 -               AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL, 
    1386 -                                       AR5K_PHY_AGCCTL_CAL); 
    1387 - 
    1388 -               ret = ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL, 
    1389 -                       AR5K_PHY_AGCCTL_CAL | AR5K_PHY_AGCCTL_NF, 
    1390 -                       0, false); 
    1391 -               if (ret) { 
    1392 -                       ATH5K_ERR(ah, 
    1393 -                               "gain calibration timeout (%uMHz)\n", 
    1394 -                               channel->center_freq); 
    1395 -               } 
    1396 - 
    1397 -               if ((ah->ah_radio == AR5K_RF5111 || 
    1398 -                       ah->ah_radio == AR5K_RF5112) 
    1399 -                       && (channel->hw_value != AR5K_MODE_11B)) 
    1400 -                       ath5k_hw_request_rfgain_probe(ah); 
    1401 -       } 
    1402 - 
    1403 -       /* Update noise floor 
    1404 -        * XXX: Only do this after AGC calibration */ 
    1405 +       /* Update noise floor */ 
    1406         if (!(ah->ah_cal_mask & AR5K_CALIBRATION_NF)) 
    1407                 ath5k_hw_update_noise_floor(ah); 
    1408   
    1409 --- a/drivers/net/wireless/ath/ath9k/recv.c 
    1410 +++ b/drivers/net/wireless/ath/ath9k/recv.c 
    1411 @@ -232,7 +232,6 @@ static void ath_rx_edma_cleanup(struct a 
    1412  static void ath_rx_edma_init_queue(struct ath_rx_edma *rx_edma, int size) 
    1413  { 
    1414         skb_queue_head_init(&rx_edma->rx_fifo); 
    1415 -       skb_queue_head_init(&rx_edma->rx_buffers); 
    1416         rx_edma->rx_fifo_hwsize = size; 
    1417  } 
    1418   
    1419 @@ -658,7 +657,9 @@ static void ath_rx_ps(struct ath_softc * 
    1420  } 
    1421   
    1422  static bool ath_edma_get_buffers(struct ath_softc *sc, 
    1423 -                                enum ath9k_rx_qtype qtype) 
    1424 +                                enum ath9k_rx_qtype qtype, 
    1425 +                                struct ath_rx_status *rs, 
    1426 +                                struct ath_buf **dest) 
    1427  { 
    1428         struct ath_rx_edma *rx_edma = &sc->rx.rx_edma[qtype]; 
    1429         struct ath_hw *ah = sc->sc_ah; 
    1430 @@ -677,7 +678,7 @@ static bool ath_edma_get_buffers(struct  
    1431         dma_sync_single_for_cpu(sc->dev, bf->bf_buf_addr, 
    1432                                 common->rx_bufsize, DMA_FROM_DEVICE); 
    1433   
    1434 -       ret = ath9k_hw_process_rxdesc_edma(ah, NULL, skb->data); 
    1435 +       ret = ath9k_hw_process_rxdesc_edma(ah, rs, skb->data); 
    1436         if (ret == -EINPROGRESS) { 
    1437                 /*let device gain the buffer again*/ 
    1438                 dma_sync_single_for_device(sc->dev, bf->bf_buf_addr, 
    1439 @@ -690,20 +691,21 @@ static bool ath_edma_get_buffers(struct  
    1440                 /* corrupt descriptor, skip this one and the following one */ 
    1441                 list_add_tail(&bf->list, &sc->rx.rxbuf); 
    1442                 ath_rx_edma_buf_link(sc, qtype); 
    1443 -               skb = skb_peek(&rx_edma->rx_fifo); 
    1444 -               if (!skb) 
    1445 -                       return true; 
    1446   
    1447 -               bf = SKB_CB_ATHBUF(skb); 
    1448 -               BUG_ON(!bf); 
    1449 +               skb = skb_peek(&rx_edma->rx_fifo); 
    1450 +               if (skb) { 
    1451 +                       bf = SKB_CB_ATHBUF(skb); 
    1452 +                       BUG_ON(!bf); 
    1453   
    1454 -               __skb_unlink(skb, &rx_edma->rx_fifo); 
    1455 -               list_add_tail(&bf->list, &sc->rx.rxbuf); 
    1456 -               ath_rx_edma_buf_link(sc, qtype); 
    1457 -               return true; 
    1458 +                       __skb_unlink(skb, &rx_edma->rx_fifo); 
    1459 +                       list_add_tail(&bf->list, &sc->rx.rxbuf); 
    1460 +                       ath_rx_edma_buf_link(sc, qtype); 
    1461 +               } else { 
    1462 +                       bf = NULL; 
    1463 +               } 
    1464         } 
    1465 -       skb_queue_tail(&rx_edma->rx_buffers, skb); 
    1466   
    1467 +       *dest = bf; 
    1468         return true; 
    1469  } 
    1470   
    1471 @@ -711,18 +713,15 @@ static struct ath_buf *ath_edma_get_next 
    1472                                                 struct ath_rx_status *rs, 
    1473                                                 enum ath9k_rx_qtype qtype) 
    1474  { 
    1475 -       struct ath_rx_edma *rx_edma = &sc->rx.rx_edma[qtype]; 
    1476 -       struct sk_buff *skb; 
    1477 -       struct ath_buf *bf; 
    1478 +       struct ath_buf *bf = NULL; 
    1479   
    1480 -       while (ath_edma_get_buffers(sc, qtype)); 
    1481 -       skb = __skb_dequeue(&rx_edma->rx_buffers); 
    1482 -       if (!skb) 
    1483 -               return NULL; 
    1484 +       while (ath_edma_get_buffers(sc, qtype, rs, &bf)) { 
    1485 +               if (!bf) 
    1486 +                       continue; 
    1487   
    1488 -       bf = SKB_CB_ATHBUF(skb); 
    1489 -       ath9k_hw_process_rxdesc_edma(sc->sc_ah, rs, skb->data); 
    1490 -       return bf; 
    1491 +               return bf; 
    1492 +       } 
    1493 +       return NULL; 
    1494  } 
    1495   
    1496  static struct ath_buf *ath_get_next_rx_buf(struct ath_softc *sc, 
    1497 @@ -954,6 +953,7 @@ static void ath9k_process_rssi(struct at 
    1498         struct ath_softc *sc = hw->priv; 
    1499         struct ath_hw *ah = common->ah; 
    1500         int last_rssi; 
    1501 +       int rssi = rx_stats->rs_rssi; 
    1502   
    1503         if (!rx_stats->is_mybeacon || 
    1504             ((ah->opmode != NL80211_IFTYPE_STATION) && 
    1505 @@ -965,13 +965,12 @@ static void ath9k_process_rssi(struct at 
    1506   
    1507         last_rssi = sc->last_rssi; 
    1508         if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER)) 
    1509 -               rx_stats->rs_rssi = ATH_EP_RND(last_rssi, 
    1510 -                                             ATH_RSSI_EP_MULTIPLIER); 
    1511 -       if (rx_stats->rs_rssi < 0) 
    1512 -               rx_stats->rs_rssi = 0; 
    1513 +               rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER); 
    1514 +       if (rssi < 0) 
    1515 +               rssi = 0; 
    1516   
    1517         /* Update Beacon RSSI, this is used by ANI. */ 
    1518 -       ah->stats.avgbrssi = rx_stats->rs_rssi; 
    1519 +       ah->stats.avgbrssi = rssi; 
    1520  } 
    1521   
    1522  /* 
    1523 @@ -988,8 +987,6 @@ static int ath9k_rx_skb_preprocess(struc 
    1524  { 
    1525         struct ath_hw *ah = common->ah; 
    1526   
    1527 -       memset(rx_status, 0, sizeof(struct ieee80211_rx_status)); 
    1528 - 
    1529         /* 
    1530          * everything but the rate is checked here, the rate check is done 
    1531          * separately to avoid doing two lookups for a rate for each frame. 
    1532 @@ -1011,6 +1008,8 @@ static int ath9k_rx_skb_preprocess(struc 
    1533         rx_status->signal = ah->noise + rx_stats->rs_rssi; 
    1534         rx_status->antenna = rx_stats->rs_antenna; 
    1535         rx_status->flag |= RX_FLAG_MACTIME_MPDU; 
    1536 +       if (rx_stats->rs_moreaggr) 
    1537 +               rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL; 
    1538   
    1539         return 0; 
    1540  } 
    1541 @@ -1845,6 +1844,8 @@ int ath_rx_tasklet(struct ath_softc *sc, 
    1542                 if (sc->sc_flags & SC_OP_RXFLUSH) 
    1543                         goto requeue_drop_frag; 
    1544   
    1545 +               memset(rxs, 0, sizeof(struct ieee80211_rx_status)); 
    1546 + 
    1547                 rxs->mactime = (tsf & ~0xffffffffULL) | rs.rs_tstamp; 
    1548                 if (rs.rs_tstamp > tsf_lower && 
    1549                     unlikely(rs.rs_tstamp - tsf_lower > 0x10000000)) 
    1550 --- a/drivers/net/wireless/ath/ath9k/beacon.c 
    1551 +++ b/drivers/net/wireless/ath/ath9k/beacon.c 
    1552 @@ -91,7 +91,7 @@ static void ath_beacon_setup(struct ath_ 
    1553         info.txpower = MAX_RATE_POWER; 
    1554         info.keyix = ATH9K_TXKEYIX_INVALID; 
    1555         info.keytype = ATH9K_KEY_TYPE_CLEAR; 
    1556 -       info.flags = ATH9K_TXDESC_NOACK; 
    1557 +       info.flags = ATH9K_TXDESC_NOACK | ATH9K_TXDESC_INTREQ; 
    1558   
    1559         info.buf_addr[0] = bf->bf_buf_addr; 
    1560         info.buf_len[0] = roundup(skb->len, 4); 
    1561 @@ -355,7 +355,6 @@ void ath_beacon_tasklet(unsigned long da 
    1562         struct ath_common *common = ath9k_hw_common(ah); 
    1563         struct ath_buf *bf = NULL; 
    1564         struct ieee80211_vif *vif; 
    1565 -       struct ath_tx_status ts; 
    1566         bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA); 
    1567         int slot; 
    1568         u32 bfaddr, bc = 0; 
    1569 @@ -462,11 +461,6 @@ void ath_beacon_tasklet(unsigned long da 
    1570                         ath9k_hw_txstart(ah, sc->beacon.beaconq); 
    1571   
    1572                 sc->beacon.ast_be_xmit += bc;     /* XXX per-vif? */ 
    1573 -               if (edma) { 
    1574 -                       spin_lock_bh(&sc->sc_pcu_lock); 
    1575 -                       ath9k_hw_txprocdesc(ah, bf->bf_desc, (void *)&ts); 
    1576 -                       spin_unlock_bh(&sc->sc_pcu_lock); 
    1577 -               } 
    1578         } 
    1579  } 
    1580   
    1581 --- a/drivers/net/wireless/ath/ath9k/mac.c 
    1582 +++ b/drivers/net/wireless/ath/ath9k/mac.c 
    1583 @@ -745,7 +745,11 @@ int ath9k_hw_beaconq_setup(struct ath_hw 
    1584         qi.tqi_aifs = 1; 
    1585         qi.tqi_cwmin = 0; 
    1586         qi.tqi_cwmax = 0; 
    1587 -       /* NB: don't enable any interrupts */ 
    1588 + 
    1589 +       if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) 
    1590 +               qi.tqi_qflags = TXQ_FLAG_TXOKINT_ENABLE | 
    1591 +                               TXQ_FLAG_TXERRINT_ENABLE; 
    1592 + 
    1593         return ath9k_hw_setuptxqueue(ah, ATH9K_TX_QUEUE_BEACON, &qi); 
    1594  } 
    1595  EXPORT_SYMBOL(ath9k_hw_beaconq_setup); 
    1596 --- a/drivers/net/wireless/ath/ath9k/main.c 
    1597 +++ b/drivers/net/wireless/ath/ath9k/main.c 
    1598 @@ -118,13 +118,15 @@ void ath9k_ps_restore(struct ath_softc * 
    1599         if (--sc->ps_usecount != 0) 
    1600                 goto unlock; 
    1601   
    1602 -       if (sc->ps_idle && (sc->ps_flags & PS_WAIT_FOR_TX_ACK)) 
    1603 +       if (sc->ps_flags & PS_WAIT_FOR_TX_ACK) 
    1604 +               goto unlock; 
    1605 + 
    1606 +       if (sc->ps_idle) 
    1607                 mode = ATH9K_PM_FULL_SLEEP; 
    1608         else if (sc->ps_enabled && 
    1609                  !(sc->ps_flags & (PS_WAIT_FOR_BEACON | 
    1610                               PS_WAIT_FOR_CAB | 
    1611 -                             PS_WAIT_FOR_PSPOLL_DATA | 
    1612 -                             PS_WAIT_FOR_TX_ACK))) 
    1613 +                             PS_WAIT_FOR_PSPOLL_DATA))) 
    1614                 mode = ATH9K_PM_NETWORK_SLEEP; 
    1615         else 
    1616                 goto unlock; 
    1617 @@ -1559,6 +1561,7 @@ static int ath9k_config(struct ieee80211 
    1618         struct ath_hw *ah = sc->sc_ah; 
    1619         struct ath_common *common = ath9k_hw_common(ah); 
    1620         struct ieee80211_conf *conf = &hw->conf; 
    1621 +       bool reset_channel = false; 
    1622   
    1623         ath9k_ps_wakeup(sc); 
    1624         mutex_lock(&sc->mutex); 
    1625 @@ -1567,6 +1570,12 @@ static int ath9k_config(struct ieee80211 
    1626                 sc->ps_idle = !!(conf->flags & IEEE80211_CONF_IDLE); 
    1627                 if (sc->ps_idle) 
    1628                         ath_cancel_work(sc); 
    1629 +               else 
    1630 +                       /* 
    1631 +                        * The chip needs a reset to properly wake up from 
    1632 +                        * full sleep 
    1633 +                        */ 
    1634 +                       reset_channel = ah->chip_fullsleep; 
    1635         } 
    1636   
    1637         /* 
    1638 @@ -1595,7 +1604,7 @@ static int ath9k_config(struct ieee80211 
    1639                 } 
    1640         } 
    1641   
    1642 -       if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { 
    1643 +       if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) { 
    1644                 struct ieee80211_channel *curchan = hw->conf.channel; 
    1645                 int pos = curchan->hw_value; 
    1646                 int old_pos = -1; 
    1647 @@ -1955,6 +1964,7 @@ static void ath9k_config_bss(struct ath_ 
    1648                 sc->sc_flags &= ~SC_OP_ANI_RUN; 
    1649                 del_timer_sync(&common->ani.timer); 
    1650                 memset(&sc->caldata, 0, sizeof(sc->caldata)); 
    1651 +               ath9k_hw_ani_init(sc->sc_ah); 
    1652         } 
    1653  } 
    1654   
    1655 @@ -2300,6 +2310,7 @@ static int ath9k_tx_last_beacon(struct i 
    1656         struct ath_vif *avp; 
    1657         struct ath_buf *bf; 
    1658         struct ath_tx_status ts; 
    1659 +       bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA); 
    1660         int status; 
    1661   
    1662         vif = sc->beacon.bslot[0]; 
    1663 @@ -2310,7 +2321,7 @@ static int ath9k_tx_last_beacon(struct i 
    1664         if (!avp->is_bslot_active) 
    1665                 return 0; 
    1666   
    1667 -       if (!sc->beacon.tx_processed) { 
    1668 +       if (!sc->beacon.tx_processed && !edma) { 
    1669                 tasklet_disable(&sc->bcon_tasklet); 
    1670   
    1671                 bf = avp->av_bcbuf; 
    1672 --- a/drivers/net/wireless/ath/ath9k/xmit.c 
    1673 +++ b/drivers/net/wireless/ath/ath9k/xmit.c 
    1674 @@ -2296,9 +2296,12 @@ void ath_tx_edma_tasklet(struct ath_soft 
    1675                         break; 
    1676                 } 
    1677   
    1678 -               /* Skip beacon completions */ 
    1679 -               if (ts.qid == sc->beacon.beaconq) 
    1680 +               /* Process beacon completions separately */ 
    1681 +               if (ts.qid == sc->beacon.beaconq) { 
    1682 +                       sc->beacon.tx_processed = true; 
    1683 +                       sc->beacon.tx_last = !(ts.ts_status & ATH9K_TXERR_MASK); 
    1684                         continue; 
    1685 +               } 
    1686   
    1687                 txq = &sc->tx.txq[ts.qid]; 
    1688   
    1689 --- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    1690 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    1691 @@ -299,7 +299,6 @@ struct ath_tx { 
    1692   
    1693  struct ath_rx_edma { 
    1694         struct sk_buff_head rx_fifo; 
    1695 -       struct sk_buff_head rx_buffers; 
    1696         u32 rx_fifo_hwsize; 
    1697  }; 
    1698   
    1699 --- a/drivers/net/wireless/ath/ath9k/ani.c 
    1700 +++ b/drivers/net/wireless/ath/ath9k/ani.c 
    1701 @@ -46,8 +46,8 @@ static const struct ani_ofdm_level_entry 
    1702         {  5,  4,  1  }, /* lvl 5 */ 
    1703         {  6,  5,  1  }, /* lvl 6 */ 
    1704         {  7,  6,  1  }, /* lvl 7 */ 
    1705 -       {  7,  7,  1  }, /* lvl 8 */ 
    1706 -       {  7,  8,  0  }  /* lvl 9 */ 
    1707 +       {  7,  6,  0  }, /* lvl 8 */ 
    1708 +       {  7,  7,  0  }  /* lvl 9 */ 
    1709  }; 
    1710  #define ATH9K_ANI_OFDM_NUM_LEVEL \ 
    1711         ARRAY_SIZE(ofdm_level_table) 
    1712 @@ -91,8 +91,8 @@ static const struct ani_cck_level_entry  
    1713         {  4,  0  }, /* lvl 4 */ 
    1714         {  5,  0  }, /* lvl 5 */ 
    1715         {  6,  0  }, /* lvl 6 */ 
    1716 -       {  7,  0  }, /* lvl 7 (only for high rssi) */ 
    1717 -       {  8,  0  }  /* lvl 8 (only for high rssi) */ 
    1718 +       {  6,  0  }, /* lvl 7 (only for high rssi) */ 
    1719 +       {  7,  0  }  /* lvl 8 (only for high rssi) */ 
    1720  }; 
    1721   
    1722  #define ATH9K_ANI_CCK_NUM_LEVEL \ 
    1723 @@ -290,16 +290,9 @@ static void ath9k_hw_set_ofdm_nil(struct 
    1724                                      ATH9K_ANI_FIRSTEP_LEVEL, 
    1725                                      entry_ofdm->fir_step_level); 
    1726   
    1727 -       if ((ah->opmode != NL80211_IFTYPE_STATION && 
    1728 -            ah->opmode != NL80211_IFTYPE_ADHOC) || 
    1729 -           aniState->noiseFloor <= aniState->rssiThrHigh) { 
    1730 -               if (aniState->ofdmWeakSigDetectOff) 
    1731 -                       /* force on ofdm weak sig detect */ 
    1732 -                       ath9k_hw_ani_control(ah, 
    1733 -                               ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, 
    1734 -                                            true); 
    1735 -               else if (aniState->ofdmWeakSigDetectOff == 
    1736 -                        entry_ofdm->ofdm_weak_signal_on) 
    1737 +       if ((aniState->noiseFloor >= aniState->rssiThrHigh) && 
    1738 +           (aniState->ofdmWeakSigDetectOff != 
    1739 +            entry_ofdm->ofdm_weak_signal_on)) { 
    1740                         ath9k_hw_ani_control(ah, 
    1741                                 ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, 
    1742                                 entry_ofdm->ofdm_weak_signal_on); 
    1743 @@ -717,26 +710,30 @@ void ath9k_hw_ani_monitor(struct ath_hw  
    1744                 ofdmPhyErrRate, aniState->cckNoiseImmunityLevel, 
    1745                 cckPhyErrRate, aniState->ofdmsTurn); 
    1746   
    1747 -       if (aniState->listenTime > 5 * ah->aniperiod) { 
    1748 -               if (ofdmPhyErrRate <= ah->config.ofdm_trig_low && 
    1749 -                   cckPhyErrRate <= ah->config.cck_trig_low) { 
    1750 +       if (aniState->listenTime > ah->aniperiod) { 
    1751 +               if (cckPhyErrRate < ah->config.cck_trig_low && 
    1752 +                   ((ofdmPhyErrRate < ah->config.ofdm_trig_low && 
    1753 +                     aniState->ofdmNoiseImmunityLevel < 
    1754 +                     ATH9K_ANI_OFDM_DEF_LEVEL) || 
    1755 +                    (ofdmPhyErrRate < ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI && 
    1756 +                     aniState->ofdmNoiseImmunityLevel >= 
    1757 +                     ATH9K_ANI_OFDM_DEF_LEVEL))) { 
    1758                         ath9k_hw_ani_lower_immunity(ah); 
    1759                         aniState->ofdmsTurn = !aniState->ofdmsTurn; 
    1760 -               } 
    1761 -               ath9k_ani_restart(ah); 
    1762 -       } else if (aniState->listenTime > ah->aniperiod) { 
    1763 -               /* check to see if need to raise immunity */ 
    1764 -               if (ofdmPhyErrRate > ah->config.ofdm_trig_high && 
    1765 -                   (cckPhyErrRate <= ah->config.cck_trig_high || 
    1766 -                    aniState->ofdmsTurn)) { 
    1767 +               } else if ((ofdmPhyErrRate > ah->config.ofdm_trig_high && 
    1768 +                           aniState->ofdmNoiseImmunityLevel >= 
    1769 +                           ATH9K_ANI_OFDM_DEF_LEVEL) || 
    1770 +                          (ofdmPhyErrRate > 
    1771 +                           ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI && 
    1772 +                           aniState->ofdmNoiseImmunityLevel < 
    1773 +                           ATH9K_ANI_OFDM_DEF_LEVEL)) { 
    1774                         ath9k_hw_ani_ofdm_err_trigger(ah); 
    1775 -                       ath9k_ani_restart(ah); 
    1776                         aniState->ofdmsTurn = false; 
    1777                 } else if (cckPhyErrRate > ah->config.cck_trig_high) { 
    1778                         ath9k_hw_ani_cck_err_trigger(ah); 
    1779 -                       ath9k_ani_restart(ah); 
    1780                         aniState->ofdmsTurn = true; 
    1781                 } 
    1782 +               ath9k_ani_restart(ah); 
    1783         } 
    1784  } 
    1785  EXPORT_SYMBOL(ath9k_hw_ani_monitor); 
    1786 @@ -911,3 +908,4 @@ void ath9k_hw_ani_init(struct ath_hw *ah 
    1787         ath9k_ani_restart(ah); 
    1788         ath9k_enable_mib_counters(ah); 
    1789  } 
    1790 +EXPORT_SYMBOL(ath9k_hw_ani_init); 
    1791 --- a/drivers/net/wireless/ath/ath9k/ani.h 
    1792 +++ b/drivers/net/wireless/ath/ath9k/ani.h 
    1793 @@ -25,11 +25,13 @@ 
    1794   
    1795  /* units are errors per second */ 
    1796  #define ATH9K_ANI_OFDM_TRIG_HIGH_OLD      500 
    1797 -#define ATH9K_ANI_OFDM_TRIG_HIGH_NEW      1000 
    1798 +#define ATH9K_ANI_OFDM_TRIG_HIGH_NEW      3500 
    1799 +#define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000 
    1800   
    1801  /* units are errors per second */ 
    1802  #define ATH9K_ANI_OFDM_TRIG_LOW_OLD       200 
    1803  #define ATH9K_ANI_OFDM_TRIG_LOW_NEW       400 
    1804 +#define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900 
    1805   
    1806  /* units are errors per second */ 
    1807  #define ATH9K_ANI_CCK_TRIG_HIGH_OLD       200 
    1808 @@ -53,7 +55,7 @@ 
    1809  #define ATH9K_ANI_RSSI_THR_LOW            7 
    1810   
    1811  #define ATH9K_ANI_PERIOD_OLD              100 
    1812 -#define ATH9K_ANI_PERIOD_NEW              1000 
    1813 +#define ATH9K_ANI_PERIOD_NEW              300 
    1814   
    1815  /* in ms */ 
    1816  #define ATH9K_ANI_POLLINTERVAL_OLD        100 
    1817 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c 
    1818 +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c 
    1819 @@ -1056,46 +1056,8 @@ static bool ar5008_hw_ani_control_old(st 
    1820                 break; 
    1821         } 
    1822         case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{ 
    1823 -               static const int m1ThreshLow[] = { 127, 50 }; 
    1824 -               static const int m2ThreshLow[] = { 127, 40 }; 
    1825 -               static const int m1Thresh[] = { 127, 0x4d }; 
    1826 -               static const int m2Thresh[] = { 127, 0x40 }; 
    1827 -               static const int m2CountThr[] = { 31, 16 }; 
    1828 -               static const int m2CountThrLow[] = { 63, 48 }; 
    1829                 u32 on = param ? 1 : 0; 
    1830   
    1831 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
    1832 -                             AR_PHY_SFCORR_LOW_M1_THRESH_LOW, 
    1833 -                             m1ThreshLow[on]); 
    1834 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
    1835 -                             AR_PHY_SFCORR_LOW_M2_THRESH_LOW, 
    1836 -                             m2ThreshLow[on]); 
    1837 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
    1838 -                             AR_PHY_SFCORR_M1_THRESH, 
    1839 -                             m1Thresh[on]); 
    1840 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
    1841 -                             AR_PHY_SFCORR_M2_THRESH, 
    1842 -                             m2Thresh[on]); 
    1843 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
    1844 -                             AR_PHY_SFCORR_M2COUNT_THR, 
    1845 -                             m2CountThr[on]); 
    1846 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
    1847 -                             AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW, 
    1848 -                             m2CountThrLow[on]); 
    1849 - 
    1850 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
    1851 -                             AR_PHY_SFCORR_EXT_M1_THRESH_LOW, 
    1852 -                             m1ThreshLow[on]); 
    1853 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
    1854 -                             AR_PHY_SFCORR_EXT_M2_THRESH_LOW, 
    1855 -                             m2ThreshLow[on]); 
    1856 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
    1857 -                             AR_PHY_SFCORR_EXT_M1_THRESH, 
    1858 -                             m1Thresh[on]); 
    1859 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
    1860 -                             AR_PHY_SFCORR_EXT_M2_THRESH, 
    1861 -                             m2Thresh[on]); 
    1862 - 
    1863                 if (on) 
    1864                         REG_SET_BIT(ah, AR_PHY_SFCORR_LOW, 
    1865                                     AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW); 
    1866 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c 
    1867 +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c 
    1868 @@ -824,55 +824,6 @@ static bool ar9003_hw_ani_control(struct 
    1869                  * on == 0 means more noise imm 
    1870                  */ 
    1871                 u32 on = param ? 1 : 0; 
    1872 -               /* 
    1873 -                * make register setting for default 
    1874 -                * (weak sig detect ON) come from INI file 
    1875 -                */ 
    1876 -               int m1ThreshLow = on ? 
    1877 -                       aniState->iniDef.m1ThreshLow : m1ThreshLow_off; 
    1878 -               int m2ThreshLow = on ? 
    1879 -                       aniState->iniDef.m2ThreshLow : m2ThreshLow_off; 
    1880 -               int m1Thresh = on ? 
    1881 -                       aniState->iniDef.m1Thresh : m1Thresh_off; 
    1882 -               int m2Thresh = on ? 
    1883 -                       aniState->iniDef.m2Thresh : m2Thresh_off; 
    1884 -               int m2CountThr = on ? 
    1885 -                       aniState->iniDef.m2CountThr : m2CountThr_off; 
    1886 -               int m2CountThrLow = on ? 
    1887 -                       aniState->iniDef.m2CountThrLow : m2CountThrLow_off; 
    1888 -               int m1ThreshLowExt = on ? 
    1889 -                       aniState->iniDef.m1ThreshLowExt : m1ThreshLowExt_off; 
    1890 -               int m2ThreshLowExt = on ? 
    1891 -                       aniState->iniDef.m2ThreshLowExt : m2ThreshLowExt_off; 
    1892 -               int m1ThreshExt = on ? 
    1893 -                       aniState->iniDef.m1ThreshExt : m1ThreshExt_off; 
    1894 -               int m2ThreshExt = on ? 
    1895 -                       aniState->iniDef.m2ThreshExt : m2ThreshExt_off; 
    1896 - 
    1897 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
    1898 -                             AR_PHY_SFCORR_LOW_M1_THRESH_LOW, 
    1899 -                             m1ThreshLow); 
    1900 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
    1901 -                             AR_PHY_SFCORR_LOW_M2_THRESH_LOW, 
    1902 -                             m2ThreshLow); 
    1903 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
    1904 -                             AR_PHY_SFCORR_M1_THRESH, m1Thresh); 
    1905 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
    1906 -                             AR_PHY_SFCORR_M2_THRESH, m2Thresh); 
    1907 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR, 
    1908 -                             AR_PHY_SFCORR_M2COUNT_THR, m2CountThr); 
    1909 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW, 
    1910 -                             AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW, 
    1911 -                             m2CountThrLow); 
    1912 - 
    1913 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
    1914 -                             AR_PHY_SFCORR_EXT_M1_THRESH_LOW, m1ThreshLowExt); 
    1915 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
    1916 -                             AR_PHY_SFCORR_EXT_M2_THRESH_LOW, m2ThreshLowExt); 
    1917 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
    1918 -                             AR_PHY_SFCORR_EXT_M1_THRESH, m1ThreshExt); 
    1919 -               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT, 
    1920 -                             AR_PHY_SFCORR_EXT_M2_THRESH, m2ThreshExt); 
    1921   
    1922                 if (on) 
    1923                         REG_SET_BIT(ah, AR_PHY_SFCORR_LOW, 
    1924 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c 
    1925 +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c 
    1926 @@ -430,10 +430,14 @@ void rt2x00lib_txdone(struct queue_entry 
    1927         /* 
    1928          * If the data queue was below the threshold before the txdone 
    1929          * handler we must make sure the packet queue in the mac80211 stack 
    1930 -        * is reenabled when the txdone handler has finished. 
    1931 +        * is reenabled when the txdone handler has finished. This has to be 
    1932 +        * serialized with rt2x00mac_tx(), otherwise we can wake up queue 
    1933 +        * before it was stopped. 
    1934          */ 
    1935 +       spin_lock_bh(&entry->queue->tx_lock); 
    1936         if (!rt2x00queue_threshold(entry->queue)) 
    1937                 rt2x00queue_unpause_queue(entry->queue); 
    1938 +       spin_unlock_bh(&entry->queue->tx_lock); 
    1939  } 
    1940  EXPORT_SYMBOL_GPL(rt2x00lib_txdone); 
    1941   
    1942 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c 
    1943 +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c 
    1944 @@ -152,13 +152,22 @@ void rt2x00mac_tx(struct ieee80211_hw *h 
    1945         if (unlikely(rt2x00queue_write_tx_frame(queue, skb, false))) 
    1946                 goto exit_fail; 
    1947   
    1948 +       /* 
    1949 +        * Pausing queue has to be serialized with rt2x00lib_txdone(). Note 
    1950 +        * we should not use spin_lock_bh variant as bottom halve was already 
    1951 +        * disabled before ieee80211_xmit() call. 
    1952 +        */ 
    1953 +       spin_lock(&queue->tx_lock); 
    1954         if (rt2x00queue_threshold(queue)) 
    1955                 rt2x00queue_pause_queue(queue); 
    1956 +       spin_unlock(&queue->tx_lock); 
    1957   
    1958         return; 
    1959   
    1960   exit_fail: 
    1961 +       spin_lock(&queue->tx_lock); 
    1962         rt2x00queue_pause_queue(queue); 
    1963 +       spin_unlock(&queue->tx_lock); 
    1964   exit_free_skb: 
    1965         ieee80211_free_txskb(hw, skb); 
    1966  } 
    1967 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c 
    1968 +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c 
    1969 @@ -619,6 +619,9 @@ int rt2x00queue_write_tx_frame(struct da 
    1970         else if (test_bit(REQUIRE_DMA, &queue->rt2x00dev->cap_flags)) 
    1971                 rt2x00queue_align_frame(skb); 
    1972   
    1973 +       /* 
    1974 +        * That function must be called with bh disabled. 
    1975 +        */ 
    1976         spin_lock(&queue->tx_lock); 
    1977   
    1978         if (unlikely(rt2x00queue_full(queue))) { 
     863@@ -455,8 +455,8 @@ static void ieee80211_rx_bss_info(struct 
     864                         * fall back to HT20 if we don't use or use 
     865                         * the other extension channel 
     866                         */ 
     867-                       if ((channel_type == NL80211_CHAN_HT40MINUS || 
     868-                            channel_type == NL80211_CHAN_HT40PLUS) && 
     869+                       if (!(channel_type == NL80211_CHAN_HT40MINUS || 
     870+                             channel_type == NL80211_CHAN_HT40PLUS) || 
     871                            channel_type != sdata->u.ibss.channel_type) 
     872                                sta_ht_cap_new.cap &= 
     873                                        ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; 
  • trunk/package/mac80211/patches/400-ath_move_debug_code.patch

    r30346 r31322  
    1313--- a/drivers/net/wireless/ath/ath.h 
    1414+++ b/drivers/net/wireless/ath/ath.h 
    15 @@ -281,13 +281,6 @@ void _ath_dbg(struct ath_common *common, 
     15@@ -277,13 +277,6 @@ void _ath_dbg(struct ath_common *common, 
    1616 #endif /* CONFIG_ATH_DEBUG */ 
    1717  
  • trunk/package/mac80211/patches/401-ath9k_blink_default.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/ath9k/init.c 
    22+++ b/drivers/net/wireless/ath/ath9k/init.c 
    3 @@ -36,7 +36,7 @@ int ath9k_modparam_nohwcrypt; 
     3@@ -39,7 +39,7 @@ int ath9k_modparam_nohwcrypt; 
    44 module_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444); 
    55 MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption"); 
  • trunk/package/mac80211/patches/402-ath9k-fix-invalid-mac-address-handling.patch

    r31316 r31322  
    99  
    1010 #include "hw.h" 
    11 @@ -466,8 +467,16 @@ static int ath9k_hw_init_macaddr(struct  
     11@@ -482,8 +483,16 @@ static int ath9k_hw_init_macaddr(struct  
    1212                common->macaddr[2 * i] = eeval >> 8; 
    1313                common->macaddr[2 * i + 1] = eeval & 0xff; 
  • trunk/package/mac80211/patches/403-ath_regd_optional.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/regd.c 
    22+++ b/drivers/net/wireless/ath/regd.c 
    3 @@ -196,6 +196,10 @@ ath_reg_apply_beaconing_flags(struct wip 
     3@@ -199,6 +199,10 @@ ath_reg_apply_beaconing_flags(struct wip 
    44        u32 bandwidth = 0; 
    55        int r; 
     
    1212  
    1313                if (!wiphy->bands[band]) 
    14 @@ -255,6 +259,10 @@ ath_reg_apply_active_scan_flags(struct w 
     14@@ -258,6 +262,10 @@ ath_reg_apply_active_scan_flags(struct w 
    1515        u32 bandwidth = 0; 
    1616        int r; 
     
    2323        if (!sband) 
    2424                return; 
    25 @@ -304,6 +312,10 @@ static void ath_reg_apply_radar_flags(st 
     25@@ -307,6 +315,10 @@ static void ath_reg_apply_radar_flags(st 
    2626        struct ieee80211_channel *ch; 
    2727        unsigned int i; 
     
    3434                return; 
    3535  
    36 @@ -510,6 +522,10 @@ ath_regd_init_wiphy(struct ath_regulator 
     36@@ -513,6 +525,10 @@ ath_regd_init_wiphy(struct ath_regulator 
    3737 { 
    3838        const struct ieee80211_regdomain *regd; 
  • trunk/package/mac80211/patches/404-world_regd_fixup.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/regd.c 
    22+++ b/drivers/net/wireless/ath/regd.c 
    3 @@ -40,7 +40,8 @@ static int __ath_regd_init(struct ath_re 
     3@@ -43,7 +43,8 @@ static int __ath_regd_init(struct ath_re 
    44                                NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_OFDM) 
    55  
     
    1111 #define ATH9K_5GHZ_5470_5850   REG_RULE(5470-10, 5850+10, 40, 0, 30,\ 
    1212                                NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) 
    13 @@ -58,57 +59,56 @@ static int __ath_regd_init(struct ath_re 
     13@@ -61,57 +62,56 @@ static int __ath_regd_init(struct ath_re 
    1414 #define ATH9K_5GHZ_NO_MIDBAND  ATH9K_5GHZ_5150_5350, \ 
    1515                                ATH9K_5GHZ_5725_5850 
  • trunk/package/mac80211/patches/405-regd_no_assoc_hints.patch

    r31316 r31322  
    11--- a/net/wireless/reg.c 
    22+++ b/net/wireless/reg.c 
    3 @@ -1690,6 +1690,8 @@ void regulatory_hint_11d(struct wiphy *w 
     3@@ -1698,6 +1698,8 @@ void regulatory_hint_11d(struct wiphy *w 
    44        enum environment_cap env = ENVIRON_ANY; 
    55        struct regulatory_request *request; 
     
    1010  
    1111        if (unlikely(!last_request)) 
    12 @@ -1925,6 +1927,8 @@ static void restore_regulatory_settings( 
     12@@ -1933,6 +1935,8 @@ static void restore_regulatory_settings( 
    1313  
    1414 void regulatory_hint_disconnect(void) 
  • trunk/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch

    r30864 r31322  
    11--- a/drivers/net/wireless/ath/ath9k/main.c 
    22+++ b/drivers/net/wireless/ath/ath9k/main.c 
    3 @@ -1432,15 +1432,6 @@ static int ath9k_add_interface(struct ie 
     3@@ -1445,15 +1445,6 @@ static int ath9k_add_interface(struct ie 
    44                } 
    55        } 
     
    1717  
    1818        sc->nvifs++; 
    19 @@ -1465,15 +1456,6 @@ static int ath9k_change_interface(struct 
     19@@ -1478,15 +1469,6 @@ static int ath9k_change_interface(struct 
    2020        mutex_lock(&sc->mutex); 
    2121        ath9k_ps_wakeup(sc); 
     
    3333            !ath9k_uses_beacons(vif->type)) { 
    3434                if (sc->nbcnvifs >= ATH_BCBUF) { 
     35--- a/drivers/net/wireless/ath/ath9k/init.c 
     36+++ b/drivers/net/wireless/ath/ath9k/init.c 
     37@@ -653,6 +653,7 @@ static const struct ieee80211_iface_limi 
     38                                 BIT(NL80211_IFTYPE_WDS) }, 
     39        { .max = 8,     .types = BIT(NL80211_IFTYPE_AP) | 
     40                                 BIT(NL80211_IFTYPE_P2P_GO) | 
     41+                                BIT(NL80211_IFTYPE_ADHOC) | 
     42                                 BIT(NL80211_IFTYPE_MESH_POINT) }, 
     43 }; 
     44  
  • trunk/package/mac80211/patches/411-ath5k_allow_adhoc_and_ap.patch

    r29436 r31322  
    11--- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c 
    22+++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c 
    3 @@ -83,13 +83,8 @@ ath5k_add_interface(struct ieee80211_hw  
     3@@ -86,13 +86,8 @@ ath5k_add_interface(struct ieee80211_hw  
    44                goto end; 
    55        } 
     
    1919--- a/drivers/net/wireless/ath/ath5k/base.c 
    2020+++ b/drivers/net/wireless/ath/ath5k/base.c 
    21 @@ -1867,7 +1867,7 @@ ath5k_beacon_send(struct ath5k_hw *ah) 
    22                 ah->bmisscount = 0; 
     21@@ -1871,7 +1871,7 @@ ath5k_beacon_send(struct ath5k_hw *ah) 
    2322        } 
    2423  
    25 -       if ((ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs > 1) || 
    26 +       if ((ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs + ah->num_adhoc_vifs > 1) || 
     24        if ((ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs + 
     25-                       ah->num_mesh_vifs > 1) || 
     26+                       ah->num_adhoc_vifs + ah->num_mesh_vifs > 1) || 
    2727                        ah->opmode == NL80211_IFTYPE_MESH_POINT) { 
    2828                u64 tsf = ath5k_hw_get_tsf64(ah); 
    2929                u32 tsftu = TSF_TO_TU(tsf); 
    30 @@ -1952,7 +1952,7 @@ ath5k_beacon_update_timers(struct ath5k_ 
    31         u64 hw_tsf; 
     30@@ -1957,7 +1957,7 @@ ath5k_beacon_update_timers(struct ath5k_ 
    3231  
    3332        intval = ah->bintval & AR5K_BEACON_PERIOD; 
    34 -       if (ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs > 1) { 
    35 +       if (ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs + ah->num_adhoc_vifs > 1) { 
     33        if (ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs 
     34-               + ah->num_mesh_vifs > 1) { 
     35+               + ah->num_adhoc_vifs + ah->num_mesh_vifs > 1) { 
    3636                intval /= ATH_BCBUF;    /* staggered multi-bss beacons */ 
    3737                if (intval < 15) 
    3838                        ATH5K_WARN(ah, "intval %u is too low, min 15\n", 
     39@@ -2419,6 +2419,7 @@ ath5k_tx_complete_poll_work(struct work_ 
     40 static const struct ieee80211_iface_limit if_limits[] = { 
     41        { .max = 256,   .types = BIT(NL80211_IFTYPE_STATION) }, 
     42        { .max = 4,     .types = BIT(NL80211_IFTYPE_AP) | 
     43+                                BIT(NL80211_IFTYPE_ADHOC) | 
     44                                 BIT(NL80211_IFTYPE_MESH_POINT) }, 
     45 }; 
     46  
  • trunk/package/mac80211/patches/420-ath5k_disable_fast_cc.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/ath5k/reset.c 
    22+++ b/drivers/net/wireless/ath/ath5k/reset.c 
    3 @@ -1152,6 +1152,7 @@ ath5k_hw_reset(struct ath5k_hw *ah, enum 
     3@@ -1155,6 +1155,7 @@ ath5k_hw_reset(struct ath5k_hw *ah, enum 
    44        tsf_lo = 0; 
    55        mode = 0; 
     
    99         * Sanity check for fast flag 
    1010         * Fast channel change only available 
    11 @@ -1159,6 +1160,7 @@ ath5k_hw_reset(struct ath5k_hw *ah, enum 
     11@@ -1162,6 +1163,7 @@ ath5k_hw_reset(struct ath5k_hw *ah, enum 
    1212         */ 
    1313        if (fast && (ah->ah_radio != AR5K_RF2413) && 
  • trunk/package/mac80211/patches/431-add_platform_eeprom_support_to_ath5k.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/ath5k/pci.c 
    22+++ b/drivers/net/wireless/ath/ath5k/pci.c 
    3 @@ -19,6 +19,7 @@ 
     3@@ -22,6 +22,7 @@ 
    44 #include <linux/pci-aspm.h> 
    55 #include <linux/etherdevice.h> 
     
    99 #include "ath5k.h" 
    1010 #include "debug.h" 
    11 @@ -69,7 +70,7 @@ static void ath5k_pci_read_cachesize(str 
     11@@ -72,7 +73,7 @@ static void ath5k_pci_read_cachesize(str 
    1212 } 
    1313  
     
    1818 static bool 
    1919 ath5k_pci_eeprom_read(struct ath_common *common, u32 offset, u16 *data) 
    20 @@ -77,6 +78,19 @@ ath5k_pci_eeprom_read(struct ath_common 
     20@@ -80,6 +81,19 @@ ath5k_pci_eeprom_read(struct ath_common  
    2121        struct ath5k_hw *ah = (struct ath5k_hw *) common->ah; 
    2222        u32 status, timeout; 
     
    3838         * Initialize EEPROM access 
    3939         */ 
    40 @@ -120,6 +134,16 @@ static int ath5k_pci_eeprom_read_mac(str 
     40@@ -123,6 +137,16 @@ static int ath5k_pci_eeprom_read_mac(str 
    4141        u16 data; 
    4242        int octet; 
  • trunk/package/mac80211/patches/432-ath5k_add_pciids.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/ath5k/pci.c 
    22+++ b/drivers/net/wireless/ath/ath5k/pci.c 
    3 @@ -46,6 +46,8 @@ static DEFINE_PCI_DEVICE_TABLE(ath5k_pci 
     3@@ -49,6 +49,8 @@ static DEFINE_PCI_DEVICE_TABLE(ath5k_pci 
    44        { PCI_VDEVICE(ATHEROS, 0x001b) }, /* 5413 Eagle */ 
    55        { PCI_VDEVICE(ATHEROS, 0x001c) }, /* PCI-E cards */ 
  • trunk/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch

    r30865 r31322  
    11--- a/drivers/net/wireless/ath/ath9k/debug.c 
    22+++ b/drivers/net/wireless/ath/ath9k/debug.c 
    3 @@ -1529,6 +1529,53 @@ static const struct file_operations fops 
     3@@ -1544,6 +1544,53 @@ static const struct file_operations fops 
    44  
    55 #endif 
     
    4848+static const struct file_operations fops_eeprom = { 
    4949+       .read = read_file_eeprom, 
    50 +       .open = ath9k_debugfs_open, 
     50+       .open = simple_open, 
    5151+       .owner = THIS_MODULE 
    5252+}; 
     
    5555 { 
    5656        struct ath_common *common = ath9k_hw_common(ah); 
    57 @@ -1592,5 +1639,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
     57@@ -1607,5 +1654,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
    5858        debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR, 
    5959                           sc->debug.debugfs_phy, &sc->sc_ah->gpio_val); 
  • trunk/package/mac80211/patches/501-ath9k-eeprom_endianess.patch

    r31084 r31322  
    8282--- a/drivers/net/wireless/ath/ath9k/init.c 
    8383+++ b/drivers/net/wireless/ath/ath9k/init.c 
    84 @@ -537,6 +537,8 @@ static int ath9k_init_softc(u16 devid, s 
     84@@ -534,6 +534,8 @@ static int ath9k_init_softc(u16 devid, s 
    8585                ah->is_clk_25mhz = pdata->is_clk_25mhz; 
    8686                ah->get_mac_revision = pdata->get_mac_revision; 
  • trunk/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch

    r30863 r31322  
    11--- a/drivers/net/wireless/ath/ath9k/hw.c 
    22+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    3 @@ -1751,8 +1751,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     3@@ -1887,8 +1887,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    44        REG_WRITE(ah, AR_OBS, 8); 
    55  
  • trunk/package/mac80211/patches/511-ath9k_reduce_rxbuf.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -121,7 +121,7 @@ void ath_descdma_cleanup(struct ath_soft 
     3@@ -122,7 +122,7 @@ void ath_descdma_cleanup(struct ath_soft 
    44 /* RX / TX */ 
    55 /***********/ 
  • trunk/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -624,6 +624,7 @@ struct ath_softc { 
     3@@ -620,6 +620,7 @@ struct ath_softc { 
    44        struct ieee80211_hw *hw; 
    55        struct device *dev; 
    66  
    77+       u32 chan_bw; 
    8         int chan_idx; 
    9         int chan_is_ht; 
    108        struct survey_info *cur_survey; 
    11 @@ -691,6 +692,7 @@ struct ath_softc { 
    12         u8 ant_tx, ant_rx; 
     9        struct survey_info survey[ATH9K_NUM_CHANNELS]; 
     10  
     11@@ -687,6 +688,7 @@ struct ath_softc { 
     12        struct dfs_pattern_detector *dfs_detector; 
    1313 }; 
    1414  
     
    1919--- a/drivers/net/wireless/ath/ath9k/debug.c 
    2020+++ b/drivers/net/wireless/ath/ath9k/debug.c 
    21 @@ -1576,6 +1576,50 @@ static const struct file_operations fops 
     21@@ -1591,6 +1591,50 @@ static const struct file_operations fops 
    2222        .owner = THIS_MODULE 
    2323 }; 
     
    6161+       .read = read_file_chan_bw, 
    6262+       .write = write_file_chan_bw, 
    63 +       .open = ath9k_debugfs_open, 
     63+       .open = simple_open, 
    6464+       .owner = THIS_MODULE, 
    6565+       .llseek = default_llseek, 
     
    7070 { 
    7171        struct ath_common *common = ath9k_hw_common(ah); 
    72 @@ -1642,5 +1686,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
     72@@ -1657,5 +1701,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
    7373        debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc, 
    7474                            &fops_eeprom); 
     
    8181--- a/drivers/net/wireless/ath/ath9k/main.c 
    8282+++ b/drivers/net/wireless/ath/ath9k/main.c 
    83 @@ -1537,7 +1537,7 @@ static void ath9k_disable_ps(struct ath_ 
     83@@ -1550,7 +1550,7 @@ static void ath9k_disable_ps(struct ath_ 
    8484  
    8585 } 
     
    9090        struct ath_softc *sc = hw->priv; 
    9191        struct ath_hw *ah = sc->sc_ah; 
    92 @@ -1588,9 +1588,11 @@ static int ath9k_config(struct ieee80211 
     92@@ -1601,9 +1601,11 @@ static int ath9k_config(struct ieee80211 
    9393  
    9494        if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) { 
     
    102102                if (ah->curchan) 
    103103                        old_pos = ah->curchan - &ah->channels[0]; 
    104 @@ -1638,7 +1640,23 @@ static int ath9k_config(struct ieee80211 
     104@@ -1651,7 +1653,23 @@ static int ath9k_config(struct ieee80211 
    105105                        memset(&sc->survey[pos], 0, sizeof(struct survey_info)); 
    106106                } 
     
    127127                        mutex_unlock(&sc->mutex); 
    128128                        return -EINVAL; 
    129 --- a/drivers/net/wireless/ath/ath9k/hw.c 
    130 +++ b/drivers/net/wireless/ath/ath9k/hw.c 
    131 @@ -1576,6 +1576,10 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    132             caldata->rtt_hist.num_readings) 
    133                 allow_fbs = true; 
    134   
    135 +       if (!ah->curchan || ((ah->curchan->channelFlags ^ chan->channelFlags) & 
    136 +           (CHANNEL_HALF | CHANNEL_QUARTER))) 
    137 +               bChannelChange = false; 
    138 + 
    139         if (bChannelChange && 
    140             (ah->chip_fullsleep != true) && 
    141             (ah->curchan != NULL) && 
  • trunk/package/mac80211/patches/513-mac80211_reduce_txqueuelen.patch

    r31316 r31322  
    11--- a/net/mac80211/iface.c 
    22+++ b/net/mac80211/iface.c 
    3 @@ -688,6 +688,7 @@ static const struct net_device_ops ieee8 
     3@@ -813,6 +813,7 @@ static const struct net_device_ops ieee8 
    44 static void ieee80211_if_setup(struct net_device *dev) 
    55 { 
  • trunk/package/mac80211/patches/520-mac80211_cur_txpower.patch

    r31316 r31322  
    11--- a/include/net/mac80211.h 
    22+++ b/include/net/mac80211.h 
    3 @@ -819,7 +819,7 @@ enum ieee80211_smps_mode { 
     3@@ -825,7 +825,7 @@ enum ieee80211_smps_mode { 
    44  */ 
    55 struct ieee80211_conf { 
     
    1212--- a/net/mac80211/cfg.c 
    1313+++ b/net/mac80211/cfg.c 
    14 @@ -1711,7 +1711,7 @@ static int ieee80211_get_tx_power(struct 
     14@@ -1738,7 +1738,7 @@ static int ieee80211_get_tx_power(struct 
    1515 { 
    1616        struct ieee80211_local *local = wiphy_priv(wiphy); 
     
    2323--- a/net/mac80211/main.c 
    2424+++ b/net/mac80211/main.c 
    25 @@ -168,6 +168,7 @@ int ieee80211_hw_config(struct ieee80211 
     25@@ -165,6 +165,7 @@ int ieee80211_hw_config(struct ieee80211 
    2626  
    2727        if (local->hw.conf.power_level != power) { 
  • trunk/package/mac80211/patches/521-ath9k_cur_txpower.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/ath9k/main.c 
    22+++ b/drivers/net/wireless/ath/ath9k/main.c 
    3 @@ -1662,6 +1662,8 @@ int ath9k_config(struct ieee80211_hw *hw 
     3@@ -1675,6 +1675,8 @@ int ath9k_config(struct ieee80211_hw *hw 
    44                        return -EINVAL; 
    55                } 
     
    1010                 * The most recent snapshot of channel->noisefloor for the old 
    1111                 * channel is only available after the hardware reset. Copy it to 
    12 @@ -1676,6 +1678,7 @@ int ath9k_config(struct ieee80211_hw *hw 
     12@@ -1689,6 +1691,7 @@ int ath9k_config(struct ieee80211_hw *hw 
    1313                sc->config.txpowlimit = 2 * conf->power_level; 
    1414                ath9k_cmn_update_txpow(ah, sc->curtxpow, 
  • trunk/package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch

    r31316 r31322  
    11--- a/include/net/mac80211.h 
    22+++ b/include/net/mac80211.h 
    3 @@ -687,6 +687,9 @@ enum mac80211_rx_flags { 
     3@@ -693,6 +693,9 @@ enum mac80211_rx_flags { 
    44  * @mactime: value in microseconds of the 64-bit Time Synchronization Function 
    55  *     (TSF) timer when the first data symbol (MPDU) arrived at the hardware. 
     
    1111  * @signal: signal strength when receiving this frame, either in dBm, in dB or 
    1212  *     unspecified depending on the hardware capabilities flags 
    13 @@ -700,6 +703,10 @@ enum mac80211_rx_flags { 
     13@@ -706,6 +709,10 @@ enum mac80211_rx_flags { 
    1414 struct ieee80211_rx_status { 
    1515        u64 mactime; 
     
    2424--- a/net/mac80211/sta_info.h 
    2525+++ b/net/mac80211/sta_info.h 
    26 @@ -313,6 +313,11 @@ struct sta_info { 
     26@@ -320,6 +320,11 @@ struct sta_info { 
    2727        unsigned long rx_dropped; 
    2828        int last_signal; 
     
    3838--- a/net/mac80211/rx.c 
    3939+++ b/net/mac80211/rx.c 
    40 @@ -1271,6 +1271,7 @@ ieee80211_rx_h_sta_process(struct ieee80 
     40@@ -1262,6 +1262,7 @@ ieee80211_rx_h_sta_process(struct ieee80 
    4141        struct sk_buff *skb = rx->skb; 
    4242        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); 
     
    4646        if (!sta) 
    4747                return RX_CONTINUE; 
    48 @@ -1315,6 +1316,19 @@ ieee80211_rx_h_sta_process(struct ieee80 
     48@@ -1306,6 +1307,19 @@ ieee80211_rx_h_sta_process(struct ieee80 
    4949                ewma_add(&sta->avg_signal, -status->signal); 
    5050        } 
     
    7979--- a/include/net/cfg80211.h 
    8080+++ b/include/net/cfg80211.h 
    81 @@ -518,6 +518,8 @@ struct station_parameters { 
    82   * @STATION_INFO_ASSOC_REQ_IES: @assoc_req_ies filled 
     81@@ -522,6 +522,8 @@ struct station_parameters { 
    8382  * @STATION_INFO_STA_FLAGS: @sta_flags filled 
    8483  * @STATION_INFO_BEACON_LOSS_COUNT: @beacon_loss_count filled 
     84  * @STATION_INFO_T_OFFSET: @t_offset filled 
    8585+ * @STATION_INFO_CHAIN_SIGNAL: @chain_signal filled 
    8686+ * @STATION_INFO_CHAIN_SIGNAL_AVG: @chain_signal_avg filled 
     
    8888 enum station_info_flags { 
    8989        STATION_INFO_INACTIVE_TIME      = 1<<0, 
    90 @@ -539,7 +541,9 @@ enum station_info_flags { 
    91         STATION_INFO_CONNECTED_TIME     = 1<<16, 
    92         STATION_INFO_ASSOC_REQ_IES      = 1<<17, 
     90@@ -545,6 +547,8 @@ enum station_info_flags { 
    9391        STATION_INFO_STA_FLAGS          = 1<<18, 
    94 -       STATION_INFO_BEACON_LOSS_COUNT  = 1<<19 
    95 +       STATION_INFO_BEACON_LOSS_COUNT  = 1<<19, 
    96 +       STATION_INFO_CHAIN_SIGNAL       = 1<<20, 
    97 +       STATION_INFO_CHAIN_SIGNAL_AVG   = 1<<21, 
     92        STATION_INFO_BEACON_LOSS_COUNT  = 1<<19, 
     93        STATION_INFO_T_OFFSET           = 1<<20, 
     94+       STATION_INFO_CHAIN_SIGNAL       = 1<<21, 
     95+       STATION_INFO_CHAIN_SIGNAL_AVG   = 1<<22, 
    9896 }; 
    9997  
    10098 /** 
    101 @@ -619,6 +623,9 @@ struct sta_bss_parameters { 
    102   * @plink_state: mesh peer link state 
    103   * @signal: signal strength of last received packet in dBm 
    104   * @signal_avg: signal strength average in dBm 
     99@@ -626,6 +630,9 @@ struct sta_bss_parameters { 
     100        NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. 
     101  * @signal_avg: avg signal strength, type depends on the wiphy's signal_type 
     102        NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. 
    105103+ * @chains: bitmask for filled values in @chain_signal, @chain_signal_avg 
    106104+ * @chain_signal: per-chain signal strength of last received packet in dBm 
     
    109107  * @rxrate: current unicast bitrate to this station 
    110108  * @rx_packets: packets received from this station 
    111 @@ -650,6 +657,11 @@ struct station_info { 
     109@@ -658,6 +665,11 @@ struct station_info { 
    112110        u8 plink_state; 
    113111        s8 signal; 
     
    140138--- a/drivers/net/wireless/ath/ath9k/recv.c 
    141139+++ b/drivers/net/wireless/ath/ath9k/recv.c 
    142 @@ -986,6 +986,7 @@ static int ath9k_rx_skb_preprocess(struc 
     140@@ -987,6 +987,7 @@ static int ath9k_rx_skb_preprocess(struc 
    143141                                   bool *decrypt_error) 
    144142 { 
     
    148146        /* 
    149147         * everything but the rate is checked here, the rate check is done 
    150 @@ -1011,6 +1012,20 @@ static int ath9k_rx_skb_preprocess(struc 
     148@@ -1012,6 +1013,20 @@ static int ath9k_rx_skb_preprocess(struc 
    151149        if (rx_stats->rs_moreaggr) 
    152150                rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL; 
     
    169167 } 
    170168  
    171 @@ -1541,14 +1556,14 @@ static void ath_ant_comb_scan(struct ath 
     169@@ -1542,14 +1557,14 @@ static void ath_ant_comb_scan(struct ath 
    172170        struct ath_ant_comb *antcomb = &sc->ant_comb; 
    173171        int alt_ratio = 0, alt_rssi_avg = 0, main_rssi_avg = 0, curr_alt_set; 
     
    211209--- a/drivers/net/wireless/ath/ath9k/mac.c 
    212210+++ b/drivers/net/wireless/ath/ath9k/mac.c 
    213 @@ -556,25 +556,25 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a 
     211@@ -553,25 +553,25 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a 
    214212  
    215213        if (ads.ds_rxstatus8 & AR_PostDelimCRCErr) { 
     
    251249--- a/drivers/net/wireless/ath/ath9k/debug.c 
    252250+++ b/drivers/net/wireless/ath/ath9k/debug.c 
    253 @@ -993,12 +993,12 @@ void ath_debug_stat_rx(struct ath_softc  
     251@@ -1009,12 +1009,12 @@ void ath_debug_stat_rx(struct ath_softc  
    254252 #ifdef CONFIG_ATH9K_MAC_DEBUG 
    255253        spin_lock(&sc->debug.samp_lock); 
     
    272270--- a/include/linux/nl80211.h 
    273271+++ b/include/linux/nl80211.h 
    274 @@ -1661,6 +1661,8 @@ enum nl80211_sta_bss_param { 
    275   * @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected 
     272@@ -1693,6 +1693,8 @@ enum nl80211_sta_bss_param { 
    276273  * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update. 
    277274  * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32) 
     275  * @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64) 
    278276+ * @NL80211_STA_INFO_CHAIN_SIGNAL: per-chain signal strength of last PPDU 
    279277+ * @NL80211_STA_INFO_CHAIN_SIGNAL_AVG: per-chain signal strength average 
     
    281279  * @NL80211_STA_INFO_MAX: highest possible station info attribute 
    282280  */ 
    283 @@ -1684,6 +1686,8 @@ enum nl80211_sta_info { 
    284         NL80211_STA_INFO_CONNECTED_TIME, 
     281@@ -1717,6 +1719,8 @@ enum nl80211_sta_info { 
    285282        NL80211_STA_INFO_STA_FLAGS, 
    286283        NL80211_STA_INFO_BEACON_LOSS, 
     284        NL80211_STA_INFO_T_OFFSET, 
    287285+       NL80211_STA_INFO_CHAIN_SIGNAL, 
    288286+       NL80211_STA_INFO_CHAIN_SIGNAL_AVG, 
     
    292290--- a/net/wireless/nl80211.c 
    293291+++ b/net/wireless/nl80211.c 
    294 @@ -2376,6 +2376,33 @@ nla_put_failure: 
     292@@ -2406,6 +2406,33 @@ nla_put_failure: 
    295293        return false; 
    296294 } 
     
    324322+ 
    325323 static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq, 
    326                                 int flags, struct net_device *dev, 
    327                                 const u8 *mac_addr, struct station_info *sinfo) 
    328 @@ -2422,6 +2449,18 @@ static int nl80211_send_station(struct s 
    329         if (sinfo->filled & STATION_INFO_SIGNAL_AVG) 
    330                 NLA_PUT_U8(msg, NL80211_STA_INFO_SIGNAL_AVG, 
    331                            sinfo->signal_avg); 
     324                                int flags, 
     325                                struct cfg80211_registered_device *rdev, 
     326@@ -2460,6 +2487,18 @@ static int nl80211_send_station(struct s 
     327        default: 
     328                break; 
     329        } 
    332330+       if (sinfo->filled & STATION_INFO_CHAIN_SIGNAL) { 
    333331+               if (!nl80211_put_signal(msg, sinfo->chains, 
     
    347345--- a/net/mac80211/cfg.c 
    348346+++ b/net/mac80211/cfg.c 
    349 @@ -340,6 +340,7 @@ static void sta_set_sinfo(struct sta_inf 
     347@@ -354,6 +354,7 @@ static void sta_set_sinfo(struct sta_inf 
    350348 { 
    351349        struct ieee80211_sub_if_data *sdata = sta->sdata; 
     
    355353        sinfo->generation = sdata->local->sta_generation; 
    356354  
    357 @@ -377,6 +378,17 @@ static void sta_set_sinfo(struct sta_inf 
     355@@ -391,6 +392,17 @@ static void sta_set_sinfo(struct sta_inf 
    358356                sinfo->signal = (s8)sta->last_signal; 
    359357                sinfo->signal_avg = (s8) -ewma_read(&sta->avg_signal); 
     
    371369+       } 
    372370  
    373         sinfo->txrate.flags = 0; 
    374         if (sta->last_tx_rate.flags & IEEE80211_TX_RC_MCS) 
     371        sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate); 
     372  
  • trunk/package/mac80211/patches/530-ath9k_limit_qlen.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -242,6 +242,7 @@ struct ath_atx_tid { 
     3@@ -243,6 +243,7 @@ struct ath_atx_tid { 
    44        struct ath_node *an; 
    55        struct ath_atx_ac *ac; 
     
    99        u16 seq_start; 
    1010        u16 seq_next; 
    11 @@ -288,6 +289,9 @@ struct ath_tx_control { 
     11@@ -289,6 +290,9 @@ struct ath_tx_control { 
    1212  *  (axq_qnum). 
    1313  */ 
     
    2121--- a/drivers/net/wireless/ath/ath9k/debug.c 
    2222+++ b/drivers/net/wireless/ath/ath9k/debug.c 
    23 @@ -1643,6 +1643,10 @@ int ath9k_init_debug(struct ath_hw *ah) 
     23@@ -1658,6 +1658,10 @@ int ath9k_init_debug(struct ath_hw *ah) 
    2424                            &fops_interrupt); 
    2525        debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc, 
     
    6666                list_add_tail(&bf->list, bf_q); 
    6767                if (bf_prev) 
    68 @@ -1739,6 +1750,8 @@ static void ath_tx_send_ampdu(struct ath 
     68@@ -1737,6 +1748,8 @@ static void ath_tx_send_ampdu(struct ath 
    6969        /* Add sub-frame to BAW */ 
    7070        ath_tx_addto_baw(sc, tid, bf->bf_state.seqno); 
     
    7575        TX_STAT_INC(txctl->txq->axq_qnum, a_queued_hw); 
    7676        bf->bf_lastbf = bf; 
    77 @@ -1863,22 +1876,11 @@ error: 
     77@@ -1861,22 +1874,11 @@ error: 
    7878  
    7979 /* FIXME: tx power */ 
     
    8989-       u8 tidno; 
    9090- 
    91 -       if ((sc->sc_flags & SC_OP_TXAGGR) && txctl->an && 
     91-       if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) && txctl->an && 
    9292-               ieee80211_is_data_qos(hdr->frame_control)) { 
    9393-               tidno = ieee80211_get_qos_ctl(hdr)[0] & 
     
    100100        if ((tx_info->flags & IEEE80211_TX_CTL_AMPDU) && tid) { 
    101101                /* 
    102 @@ -1910,6 +1912,7 @@ int ath_tx_start(struct ieee80211_hw *hw 
     102@@ -1908,6 +1910,7 @@ int ath_tx_start(struct ieee80211_hw *hw 
    103103        struct ieee80211_vif *vif = info->control.vif; 
    104104        struct ath_softc *sc = hw->priv; 
     
    108108        int frmlen = skb->len + FCS_LEN; 
    109109        int q; 
    110 @@ -1952,6 +1955,24 @@ int ath_tx_start(struct ieee80211_hw *hw 
     110@@ -1950,6 +1953,24 @@ int ath_tx_start(struct ieee80211_hw *hw 
    111111  
    112112        setup_frame_info(hw, skb, frmlen); 
    113113  
    114 +       if ((sc->sc_flags & SC_OP_TXAGGR) && txctl->an && 
     114+       if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) && txctl->an && 
    115115+           ieee80211_is_data_qos(hdr->frame_control)) { 
    116116+               tid = ath_get_tid(txctl->an, skb); 
     
    133133         * At this point, the vif, hw_key and sta pointers in the tx control 
    134134         * info are no longer valid (overwritten by the ath_frame_info data. 
    135 @@ -1966,7 +1987,7 @@ int ath_tx_start(struct ieee80211_hw *hw 
     135@@ -1964,7 +1985,7 @@ int ath_tx_start(struct ieee80211_hw *hw 
    136136                txq->stopped = true; 
    137137        } 
  • trunk/package/mac80211/patches/531-ath9k_fix_initvals.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h 
    3 @@ -835,108 +835,108 @@ static const u32 ar9300_2p2_baseband_cor 
     3@@ -533,108 +533,108 @@ static const u32 ar9300_2p2_baseband_cor 
    44  
    55 static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = { 
  • trunk/package/mac80211/patches/540-ath9k_extra_leds.patch

    r31316 r31322  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -504,6 +504,9 @@ static inline u16 ath9k_btcoex_aggr_limi 
     3@@ -507,6 +507,9 @@ static inline u16 ath9k_btcoex_aggr_limi 
    44 #ifdef CONFIG_MAC80211_LEDS 
    55 void ath_init_leds(struct ath_softc *sc); 
     
    1111 static inline void ath_init_leds(struct ath_softc *sc) 
    1212 { 
    13 @@ -624,6 +627,13 @@ struct ath9k_vif_iter_data { 
    14         int nothers;   /* number of vifs not specified above. */ 
     13@@ -620,6 +623,13 @@ struct ath9k_vif_iter_data { 
     14        int nadhocs;   /* number of adhoc vifs */ 
    1515 }; 
    1616  
     
    2525        struct ieee80211_hw *hw; 
    2626        struct device *dev; 
    27 @@ -667,9 +677,8 @@ struct ath_softc { 
     27@@ -661,9 +671,8 @@ struct ath_softc { 
    2828        struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS]; 
    2929  
     
    172172--- a/drivers/net/wireless/ath/ath9k/init.c 
    173173+++ b/drivers/net/wireless/ath/ath9k/init.c 
    174 @@ -761,7 +761,7 @@ int ath9k_init_device(u16 devid, struct  
     174@@ -778,7 +778,7 @@ int ath9k_init_device(u16 devid, struct  
    175175  
    176176 #ifdef CONFIG_MAC80211_LEDS 
     
    183183--- a/drivers/net/wireless/ath/ath9k/debug.c 
    184184+++ b/drivers/net/wireless/ath/ath9k/debug.c 
    185 @@ -1252,6 +1252,61 @@ static const struct file_operations fops 
     185@@ -1267,6 +1267,61 @@ static const struct file_operations fops 
    186186        .llseek = default_llseek, 
    187187 }; 
     
    235235+static const struct file_operations fops_gpio_led = { 
    236236+       .write = write_file_gpio_led, 
    237 +       .open = ath9k_debugfs_open, 
     237+       .open = simple_open, 
    238238+       .owner = THIS_MODULE, 
    239239+       .llseek = default_llseek, 
     
    245245  
    246246 void ath9k_debug_samp_bb_mac(struct ath_softc *sc) 
    247 @@ -1681,6 +1736,11 @@ int ath9k_init_debug(struct ath_hw *ah) 
     247@@ -1696,6 +1751,11 @@ int ath9k_init_debug(struct ath_hw *ah) 
    248248                            &fops_samps); 
    249249 #endif 
  • trunk/package/mac80211/patches/550-mac80211_optimize_mcs_rate_mask.patch

    r31316 r31322  
    11--- a/net/mac80211/ieee80211_i.h 
    22+++ b/net/mac80211/ieee80211_i.h 
    3 @@ -656,6 +656,8 @@ struct ieee80211_sub_if_data { 
     3@@ -726,6 +726,8 @@ struct ieee80211_sub_if_data { 
    44  
    55        /* bitmap of allowed (non-MCS) rate indexes for rate control */ 
     
    1212--- a/net/mac80211/cfg.c 
    1313+++ b/net/mac80211/cfg.c 
    14 @@ -1887,9 +1887,20 @@ static int ieee80211_set_bitrate_mask(st 
     14@@ -1914,9 +1914,20 @@ static int ieee80211_set_bitrate_mask(st 
    1515        } 
    1616  
     
    3535--- a/include/net/mac80211.h 
    3636+++ b/include/net/mac80211.h 
    37 @@ -3590,6 +3590,7 @@ enum rate_control_changed { 
     37@@ -3645,7 +3645,7 @@ void ieee80211_send_bar(struct ieee80211 
    3838  *     (deprecated; this will be removed once drivers get updated to use 
    3939  *     rate_idx_mask) 
    40   * @rate_idx_mask: user-requested rate mask (not MCS for now) 
     40  * @rate_idx_mask: user-requested (legacy) rate mask 
     41- * @rate_idx_mcs_mask: user-requested MCS rate mask 
    4142+ * @rate_idx_mcs_mask: user-requested MCS rate mask (NULL if not in use) 
    42   * @skb: the skb that will be transmitted, the control information in it needs 
    43   *     to be filled in 
    4443  * @bss: whether this frame is sent out in AP or IBSS mode 
    45 @@ -3603,7 +3604,7 @@ struct ieee80211_tx_rate_control { 
     44  */ 
     45 struct ieee80211_tx_rate_control { 
     46@@ -3657,7 +3657,7 @@ struct ieee80211_tx_rate_control { 
    4647        bool rts, short_preamble; 
    4748        u8 max_rate_idx; 
     
    5455--- a/net/mac80211/tx.c 
    5556+++ b/net/mac80211/tx.c 
    56 @@ -640,9 +640,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021 
     57@@ -642,9 +642,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021 
    5758                txrc.max_rate_idx = -1; 
    5859        else 
     
    6970                    tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT || 
    7071                    tx->sdata->vif.type == NL80211_IFTYPE_ADHOC); 
    71 @@ -2461,8 +2463,6 @@ struct sk_buff *ieee80211_beacon_get_tim 
     72@@ -2479,8 +2481,6 @@ struct sk_buff *ieee80211_beacon_get_tim 
    7273                txrc.max_rate_idx = -1; 
    7374        else 
  • trunk/package/mac80211/patches/602-rt2x00-introduce-rt2x00_platform_h.patch

    r27958 r31322  
    2626 #include <linux/input-polldev.h> 
    2727 #include <linux/kfifo.h> 
    28  #include <linux/timer.h> 
     28 #include <linux/hrtimer.h> 
    2929+#include <linux/rt2x00_platform.h> 
    3030  
  • trunk/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch

    r30871 r31322  
    110110        /* 
    111111         * Device initialization/deinitialization handlers. 
    112 @@ -713,6 +714,7 @@ enum rt2x00_capability_flags { 
     112@@ -721,6 +722,7 @@ enum rt2x00_capability_flags { 
    113113        REQUIRE_SW_SEQNO, 
    114114        REQUIRE_HT_TX_DESC, 
     
    118118        /* 
    119119         * Capabilities 
    120 @@ -968,6 +970,11 @@ struct rt2x00_dev { 
     120@@ -976,6 +978,11 @@ struct rt2x00_dev { 
    121121        const struct firmware *fw; 
    122122  
     
    230230  */ 
    231231 static bool rt2800pci_get_entry_state(struct queue_entry *entry) 
    232 @@ -1052,6 +1056,7 @@ static const struct rt2x00lib_ops rt2800 
     232@@ -1082,6 +1086,7 @@ static const struct rt2x00lib_ops rt2800 
    233233        .get_firmware_name      = rt2800pci_get_firmware_name, 
    234234        .check_firmware         = rt2800_check_firmware, 
     
    240240--- a/drivers/net/wireless/rt2x00/rt2x00dev.c 
    241241+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c 
    242 @@ -1165,6 +1165,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de 
     242@@ -1160,6 +1160,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de 
    243243                    BIT(NL80211_IFTYPE_MESH_POINT) | 
    244244                    BIT(NL80211_IFTYPE_WDS); 
     
    251251         * Initialize work. 
    252252         */ 
    253 @@ -1288,6 +1292,11 @@ void rt2x00lib_remove_dev(struct rt2x00_ 
     253@@ -1284,6 +1288,11 @@ void rt2x00lib_remove_dev(struct rt2x00_ 
    254254         */ 
    255255        if (rt2x00dev->drv_data) 
  • trunk/package/mac80211/patches/604-rt2x00-add-CONFIG_RT2X00_LIB_EEPROM-option.patch

    r30742 r31322  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -618,6 +618,7 @@ CONFIG_RT2X00=y 
    4  CONFIG_RT2X00_LIB=m 
    5  CONFIG_RT2800_LIB=m 
    6  CONFIG_RT2X00_LIB_FIRMWARE=y 
    7 +CONFIG_RT2X00_LIB_EEPROM=y 
    8  CONFIG_RT2X00_LIB_CRYPTO=y 
     3@@ -614,6 +614,7 @@ export CONFIG_RT2X00=y 
     4 export CONFIG_RT2X00_LIB=m 
     5 export CONFIG_RT2800_LIB=m 
     6 export CONFIG_RT2X00_LIB_FIRMWARE=y 
     7+export CONFIG_RT2X00_LIB_EEPROM=y 
     8 export CONFIG_RT2X00_LIB_CRYPTO=y 
    99 # CONFIG_RT2X00_LIB_SOC=y 
    1010 ifdef CONFIG_COMPAT_KERNEL_2_6_25 
  • trunk/package/mac80211/patches/605-rt2x00-pci-eeprom.patch

    r30746 r31322  
    1010        memcpy(rt2x00dev->eeprom, rt2x00dev->eeprom_file->data, EEPROM_SIZE); 
    1111 } 
    12 @@ -938,8 +938,9 @@ static int rt2800pci_validate_eeprom(str 
     12@@ -968,8 +968,9 @@ static int rt2800pci_validate_eeprom(str 
    1313        /* 
    1414         * Read EEPROM into buffer 
  • trunk/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch

    r30346 r31322  
    11--- a/drivers/net/wireless/mwl8k.c 
    22+++ b/drivers/net/wireless/mwl8k.c 
    3 @@ -5297,6 +5297,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw") 
     3@@ -5296,6 +5296,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw") 
    44 MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API)); 
    55  
  • trunk/package/mac80211/patches/800-b43-gpio-mask-module-option.patch

    r30346 r31322  
    2323 module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444); 
    2424 MODULE_PARM_DESC(bad_frames_preempt, 
    25 @@ -2674,10 +2679,10 @@ static int b43_gpio_init(struct b43_wlde 
     25@@ -2689,10 +2694,10 @@ static int b43_gpio_init(struct b43_wlde 
    2626        u32 mask, set; 
    2727  
  • trunk/package/mac80211/patches/820-b43-add-antenna-control.patch

    r30742 r31322  
    1010        ctl = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_BEACPHYCTL); 
    1111        /* We can't send beacons with short preamble. Would get PHY errors. */ 
    12 @@ -3033,8 +3033,8 @@ static int b43_chip_init(struct b43_wlde 
     12@@ -3045,8 +3045,8 @@ static int b43_chip_init(struct b43_wlde 
    1313  
    1414        /* Select the antennae */ 
     
    2121        if (phy->type == B43_PHYTYPE_B) { 
    2222                value16 = b43_read16(dev, 0x005E); 
    23 @@ -3777,7 +3777,6 @@ static int b43_op_config(struct ieee8021 
     23@@ -3789,7 +3789,6 @@ static int b43_op_config(struct ieee8021 
    2424        struct b43_wldev *dev; 
    2525        struct b43_phy *phy; 
     
    2929        bool reload_bss = false; 
    3030  
    31 @@ -3831,11 +3830,9 @@ static int b43_op_config(struct ieee8021 
     31@@ -3843,11 +3842,9 @@ static int b43_op_config(struct ieee8021 
    3232        } 
    3333  
     
    4343        if (wl->radio_enabled != phy->radio_on) { 
    4444                if (wl->radio_enabled) { 
    45 @@ -4907,6 +4904,47 @@ static int b43_op_get_survey(struct ieee 
     45@@ -4934,6 +4931,47 @@ static int b43_op_get_survey(struct ieee 
    4646        return 0; 
    4747 } 
     
    9191        .tx                     = b43_op_tx, 
    9292        .conf_tx                = b43_op_conf_tx, 
    93 @@ -4928,6 +4966,8 @@ static const struct ieee80211_ops b43_hw 
     93@@ -4955,6 +4993,8 @@ static const struct ieee80211_ops b43_hw 
    9494        .sw_scan_complete       = b43_op_sw_scan_complete_notifier, 
    9595        .get_survey             = b43_op_get_survey, 
     
    100100  
    101101 /* Hard-reset the chip. Do not call this directly. 
    102 @@ -5174,6 +5214,8 @@ static int b43_one_core_attach(struct b4 
     102@@ -5201,6 +5241,8 @@ static int b43_one_core_attach(struct b4 
    103103        if (!wldev) 
    104104                goto out; 
     
    109109        wldev->dev = dev; 
    110110        wldev->wl = wl; 
    111 @@ -5262,6 +5304,9 @@ static struct b43_wl *b43_wireless_init( 
    112                 BIT(NL80211_IFTYPE_WDS) | 
    113                 BIT(NL80211_IFTYPE_ADHOC); 
     111@@ -5291,6 +5333,9 @@ static struct b43_wl *b43_wireless_init( 
     112  
     113        hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; 
    114114  
    115115+       hw->wiphy->available_antennas_rx = 0x3; 
  • trunk/package/mac80211/patches/830-b43-workaround-pcie-bcm4716.patch

    r30346 r31322  
    2020--- a/drivers/net/wireless/b43/b43.h 
    2121+++ b/drivers/net/wireless/b43/b43.h 
    22 @@ -1044,6 +1044,32 @@ static inline bool b43_using_pio_transfe 
     22@@ -1047,6 +1047,32 @@ static inline bool b43_using_pio_transfe 
    2323        return dev->__using_pio_transfers; 
    2424 } 
Note: See TracChangeset for help on using the changeset viewer.