Changeset 26763


Ignore:
Timestamp:
2011-04-26T20:58:52+02:00 (7 years ago)
Author:
nbd
Message:

mac80211: update to the latest version from trunk

Location:
branches/backfire/package/mac80211
Files:
1 added
24 deleted
27 edited
5 moved

Legend:

Unmodified
Added
Removed
  • branches/backfire/package/mac80211/Makefile

    r26536 r26763  
    1111PKG_NAME:=mac80211 
    1212 
    13 PKG_VERSION:=2011-04-06 
    14 PKG_RELEASE:=2 
     13PKG_VERSION:=2011-04-19 
     14PKG_RELEASE:=3 
    1515PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources 
    16 PKG_MD5SUM:=7ef8c2d9ee25af7ed33cf339f2484249 
     16PKG_MD5SUM:=7b789b726927bcc8e3b06c7df40214d9 
    1717 
    1818PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2 
     
    2626        rtl8180 rtl8187 zd1211rw mac80211-hwsim carl9170 b43 b43legacy \ 
    2727        ath9k-common ath9k ath9k-htc ath net-libipw net-ipw2100 net-ipw2200 \ 
    28         mwl8k net-hermes net-hermes-pci net-hermes-plx net-hermes-pcmcia 
     28        mwl8k net-hermes net-hermes-pci net-hermes-plx net-hermes-pcmcia \ 
     29        iwl-legacy iwl3945 iwl4965 iwlagn 
    2930 
    3031PKG_CONFIG_DEPENDS:= \ 
     
    3334        CONFIG_PACKAGE_MAC80211_DEBUGFS \ 
    3435        CONFIG_PACKAGE_ATH_DEBUG \ 
     36        CONFIG_PACKAGE_B43_DEBUG \ 
     37        CONFIG_PACKAGE_B43_PIO \ 
     38        CONFIG_PACKAGE_B43_N_PHY \ 
    3539        CONFIG_ATH_USER_REGD \ 
    3640 
     
    563567        $(PKG_BUILD_DIR)/drivers/net/wireless/libertas/libertas.ko \ 
    564568        $(PKG_BUILD_DIR)/drivers/net/wireless/libertas/libertas_sdio.ko 
    565   AUTOLOAD:=$(call AutoLoad,27,libertas libertas_sdio) 
     569  AUTOLOAD:=$(call AutoLoad,91,libertas libertas_sdio) 
    566570endef 
    567571 
     
    791795define KernelPackage/iwlagn 
    792796  $(call KernelPackage/mac80211/Default) 
    793   DEPENDS:= +kmod-mac80211 
     797  DEPENDS:= +kmod-mac80211 @PCI_SUPPORT 
    794798  TITLE:=Intel AGN Wireless support 
    795799  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/iwlwifi/iwlagn.$(LINUX_KMOD_SUFFIX) 
     
    867871define KernelPackage/iwl-legacy 
    868872  $(call KernelPackage/mac80211/Default) 
    869   DEPENDS:= +kmod-mac80211 
     873  DEPENDS:= +kmod-mac80211 @PCI_SUPPORT 
    870874  TITLE:=Intel legacy Wireless support 
    871875  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/iwlegacy/iwl-legacy.$(LINUX_KMOD_SUFFIX) 
     
    916920 
    917921#Broadcom firmware 
    918 ifneq ($(CONFIG_B43_EXPERIMENTAL),) 
     922ifneq ($(CONFIG_B43_FW_5_10),) 
     923  PKG_B43_FWV4_NAME:=broadcom-wl 
     924  PKG_B43_FWV4_VERSION:=5.10.56.27.3 
     925  PKG_B43_FWV4_OBJECT:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)/driver/wl_apsta/wl_prebuilt.o 
     926  PKG_B43_FWV4_SOURCE:=$(PKG_B43_FWV4_NAME)-$(PKG_B43_FWV4_VERSION)_mipsel.tar.bz2 
     927  PKG_B43_FWV4_SOURCE_URL:=http://mirror2.openwrt.org/sources/ 
     928  PKG_B43_FWV4_MD5SUM:=3363e3a6b3d9d73c49dea870c7834eac 
     929else 
     930ifneq ($(CONFIG_B43_FW_4_178),) 
    919931  PKG_B43_FWV4_NAME:=broadcom-wl 
    920932  PKG_B43_FWV4_VERSION:=4.178.10.4 
     
    931943  PKG_B43_FWV4_MD5SUM:=0c6ba9687114c6b598e8019e262d9a60 
    932944endif 
     945endif 
    933946ifneq ($(CONFIG_B43_OPENFIRMWARE),) 
    934947  PKG_B43_FWV4_NAME:=broadcom-wl 
     
    957970else 
    958971  PKG_B43_FWCUTTER_NAME:=b43-fwcutter 
    959   PKG_B43_FWCUTTER_VERSION:=013 
     972  PKG_B43_FWCUTTER_VERSION:=014 
    960973  PKG_B43_FWCUTTER_SOURCE:=$(PKG_B43_FWCUTTER_NAME)-$(PKG_B43_FWCUTTER_VERSION).tar.bz2 
    961974  PKG_B43_FWCUTTER_PROTO:=default 
    962975  PKG_B43_FWCUTTER_SOURCE_URL:=http://bu3sch.de/b43/fwcutter/ 
    963   PKG_B43_FWCUTTER_MD5SUM:=3547ec6c474ac1bc2c4a5bb765b791a4 
     976  PKG_B43_FWCUTTER_MD5SUM:=dd63f9149510bd6e01b89314e955083b 
    964977  PKG_B43_FWCUTTER_SUBDIR:=b43-fwcutter-$(PKG_B43_FWCUTTER_VERSION) 
    965978  PKG_B43_FWCUTTER_OBJECT:=$(PKG_B43_FWCUTTER_NAME)-$(PKG_B43_FWCUTTER_VERSION)/ 
     
    10131026        choice 
    10141027                prompt "b43 firmware version" 
    1015                 default B43_STABLE 
     1028                default B43_FW_4_150 
    10161029                help 
    10171030                  This option allows you to select the version of the b43 firmware. 
    10181031 
    1019         config B43_STABLE 
    1020                 bool "4.150.10.5 (stable)" 
     1032        config B43_FW_4_150 
     1033                bool "Firmware 410.2160 from driver 4.150.10.5 (stable)" 
    10211034                help 
    10221035                  Stable firmware for BCM43xx devices. 
     
    10241037                  If unsure, select this. 
    10251038 
    1026         config B43_EXPERIMENTAL 
    1027                 bool "4.178.10.4 (experimental)" 
     1039        config B43_FW_4_178 
     1040                bool "Firmware 478.104 from driver 4.178.10.4" 
    10281041                help 
    10291042                  Experimental firmware for BCM43xx devices. 
    10301043 
    10311044                  This firmware is not tested as much as the "stable" firmware. 
     1045 
     1046                  If unsure, select the "stable" firmware. 
     1047 
     1048        config B43_FW_5_10 
     1049                bool "Firmware 508.1084 from driver 5.10.56.27" 
     1050                help 
     1051                  Newer experimental firmware for BCM43xx devices. 
     1052 
     1053                  This firmware is mostly untested. It is needed for some N-PHY devices. 
    10321054 
    10331055                  If unsure, select the "stable" firmware. 
     
    10621084                string "Core revisions to include" 
    10631085                depends on B43_FW_SQUASH 
    1064                 default "5,6,7,8,9,10,13,14,15" 
     1086                default "5,6,7,8,9,10,11,13,14,15,16" if PACKAGE_B43_PHY_N 
     1087                default "5,6,7,8,9,10,13,14,15" if !PACKAGE_B43_PHY_N 
    10651088                help 
    10661089                  This is a comma seperated list of core revision numbers. 
     
    10751098                string "PHY types to include" 
    10761099                depends on B43_FW_SQUASH 
    1077                 default "G,LP" 
     1100                default "G,LP,N" if PACKAGE_B43_PHY_N 
     1101                default "G,LP" if !PACKAGE_B43_PHY_N 
    10781102                help 
    10791103                  This is a comma seperated list of PHY types: 
     
    10901114                    G,N 
    10911115 
     1116        config PACKAGE_B43_DEBUG 
     1117                bool "Enable debug output and debugfs for b43" 
     1118                default n 
     1119                help 
     1120                  Enable additional debug output and runtime sanity checks for b43 
     1121                  and enables the debugfs interface. 
     1122 
     1123                  If unsure, say N. 
     1124 
     1125        config PACKAGE_B43_PIO 
     1126                bool "Enable support for PIO transfer mode" 
     1127                depends BROKEN 
     1128                default n 
     1129                help 
     1130                  Enable support for using PIO instead of DMA. Unless you have DMA 
     1131                  transfer problems you don't need this. 
     1132 
     1133                  If unsure, say N. 
     1134 
     1135        config PACKAGE_B43_PHY_N 
     1136                bool "Enable support for N-PHYs" 
     1137                select B43_FW_5_10 
     1138                depends BROKEN 
     1139                default n 
     1140                help 
     1141                  Enable support for BCM4321 and BCM4322. 
     1142 
     1143                  Currently only 11g speed is available. 
     1144 
     1145                  If unsure, say N. 
     1146 
    10921147        endmenu 
    10931148endef 
     
    11451200        $(if $(CONFIG_LEDS_TRIGGERS), -DCONFIG_MAC80211_LEDS -DCONFIG_LEDS_TRIGGERS -DCONFIG_B43_LEDS -DCONFIG_B43LEGACY_LEDS -DCONFIG_AR9170_LEDS) \ 
    11461201        -DCONFIG_B43_HWRNG -DCONFIG_B43LEGACY_HWRNG \ 
    1147         $(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),-DCONFIG_MAC80211_DEBUGFS -DCONFIG_ATH9K_DEBUGFS -DCONFIG_CARL9170_DEBUGFS -DCONFIG_ATH9K_HTC_DEBUGFS) \ 
    1148         $(if $(CONFIG_PACKAGE_ATH_DEBUG),-DCONFIG_ATH_DEBUG -DCONFIG_ATH9K_PKTLOG -DCONFIG_ATH5K_DEBUG) \ 
     1202        -DCONFIG_ATH9K_PCI $(if $(CONFIG_TARGET_ar71xx),-DCONFIG_ATH9K_AHB) \ 
     1203        $(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),-DCONFIG_MAC80211_DEBUGFS -DCONFIG_ATH9K_DEBUGFS -DCONFIG_CARL9170_DEBUGFS -DCONFIG_ATH9K_HTC_DEBUGFS -DCONFIG_ATH5K_DEBUG) \ 
     1204        $(if $(CONFIG_PACKAGE_ATH_DEBUG),-DCONFIG_ATH_DEBUG -DCONFIG_ATH9K_PKTLOG) \ 
    11491205        -D__CONFIG_MAC80211_RC_DEFAULT=minstrel \ 
    11501206        -DCONFIG_MAC80211_RC_MINSTREL_HT \ 
    11511207        $(if $(CONFIG_ATH_USER_REGD),-DATH_USER_REGD=1) \ 
     1208        $(if $(CONFIG_PACKAGE_B43_DEBUG),-DCONFIG_B43_DEBUG) \ 
     1209        $(if $(CONFIG_PACKAGE_B43_PIO),-DCONFIG_B43_PIO) \ 
     1210        $(if $(CONFIG_PACKAGE_B43_PHY_N),-DCONFIG_B43_PHY_N) \ 
    11521211        $(if $(CONFIG_PACKAGE_RT2X00_LIB_DEBUGFS),-DCONFIG_RT2X00_LIB_DEBUGFS) \ 
    11531212        $(if $(CONFIG_PACKAGE_RT2X00_DEBUG),-DCONFIG_RT2X00_DEBUG) \ 
     
    11601219        $(if $(CONFIG_PACKAGE_kmod-rt2x00-soc),-DCONFIG_RT2X00_LIB_SOC) \ 
    11611220        $(if $(CONFIG_TARGET_atheros),-DCONFIG_ATH5K_AHB,-DCONFIG_ATH5K_PCI) \ 
    1162         $(if $(CONFIG_PACKAGE_kmod-iwl3945),-DCONFIG_COMPAT_IWL3945) \ 
     1221        $(if $(CONFIG_PACKAGE_kmod-iwl3945),-DCONFIG_IWL3945) \ 
    11631222        $(if $(CONFIG_PACKAGE_kmod-iwl4965),-DCONFIG_COMPAT_IWL4965) 
    11641223 
     
    11811240        CONFIG_B43=$(if $(CONFIG_PACKAGE_kmod-b43),m) \ 
    11821241        CONFIG_B43LEGACY=$(if $(CONFIG_PACKAGE_kmod-b43legacy),m) \ 
     1242        CONFIG_B43_DEBUG=$(if $(CONFIG_PACKAGE_B43_DEBUG),y) \ 
     1243        CONFIG_B43_PIO=$(if $(CONFIG_PACKAGE_B43_PIO),y) \ 
     1244        CONFIG_B43_PHY_N=$(if $(CONFIG_PACKAGE_B43_PHY_N),y) \ 
    11831245        CONFIG_ATH_COMMON=$(if $(CONFIG_PACKAGE_kmod-ath),m) \ 
    11841246        CONFIG_ATH_DEBUG=$(if $(CONFIG_PACKAGE_ATH_DEBUG),y) \ 
     
    11881250        CONFIG_ATH5K_PCI=$(if $(CONFIG_TARGET_atheros),,y) \ 
    11891251        CONFIG_ATH5K_AHB=$(if $(CONFIG_TARGET_atheros),y) \ 
     1252        CONFIG_ATH5K_DEBUG=$(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),y) \ 
    11901253        CONFIG_ATH9K=$(if $(CONFIG_PACKAGE_kmod-ath9k),m) \ 
     1254        CONFIG_ATH9K_PCI=y \ 
     1255        CONFIG_ATH9K_AHB=$(if $(CONFIG_TARGET_ar71xx),y) \ 
    11911256        CONFIG_ATH9K_HTC=$(if $(CONFIG_PACKAGE_kmod-ath9k-htc),m) \ 
    11921257        CONFIG_ATH9K_HW=$(if $(CONFIG_PACKAGE_kmod-ath9k-common),m) \ 
  • branches/backfire/package/mac80211/files/host_bin/b43-fwsquash.py

    r19307 r26763  
    7070        "ucode14.fw"            : (14,), 
    7171        "ucode15.fw"            : (15,), 
     72        "ucode16_mimo.fw"       : (16,), 
    7273        "pcm4.fw"               : (1,2,3,4,), 
    7374        "pcm5.fw"               : (5,6,7,8,9,10,), 
     
    8182        "b0g0initvals13.fw"     : ( (13,),              ("G",), ), 
    8283        "n0initvals11.fw"       : ( (11,12,),           ("N",), ), 
     84        "n0initvals16.fw"       : ( (16,),              ("N",), ), 
    8385        "lp0initvals13.fw"      : ( (13,),              ("LP",), ), 
    8486        "lp0initvals14.fw"      : ( (14,),              ("LP",), ), 
     
    8890        "b0g0bsinitvals5.fw"    : ( (5,6,7,8,9,10,),    ("G",), ), 
    8991        "n0bsinitvals11.fw"     : ( (11,12,),           ("N",), ), 
     92        "n0bsinitvals16.fw"     : ( (16,),              ("N",), ), 
    9093        "lp0bsinitvals13.fw"    : ( (13,),              ("LP",), ), 
    9194        "lp0bsinitvals14.fw"    : ( (14,),              ("LP",), ), 
  • branches/backfire/package/mac80211/patches/001-disable_b44.patch

    r25966 r26763  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -316,8 +316,8 @@ endif #CONFIG_SSB 
     3@@ -311,8 +311,8 @@ endif #CONFIG_SSB 
    44  
    55 CONFIG_P54_PCI=m 
  • branches/backfire/package/mac80211/patches/002-disable_rfkill.patch

    r26536 r26763  
    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 @@ -626,10 +626,10 @@ endif #CONFIG_COMPAT_KERNEL_27 
     12@@ -614,10 +614,10 @@ endif #CONFIG_COMPAT_KERNEL_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. 
  • branches/backfire/package/mac80211/patches/005-disable_ssb_build.patch

    r25966 r26763  
    2020 include $(KLIB_BUILD)/.config 
    2121 endif 
    22 @@ -300,19 +299,18 @@ CONFIG_IPW2200_QOS=y 
     22@@ -295,19 +294,18 @@ CONFIG_IPW2200_QOS=y 
    2323 # % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface 
    2424 endif #CONFIG_WIRELESS_EXT 
     
    5252 CONFIG_P54_PCI=m 
    5353  
    54 @@ -514,7 +512,6 @@ endif #CONFIG_SPI_MASTER end of SPI driv 
     54@@ -502,7 +500,6 @@ endif #CONFIG_SPI_MASTER end of SPI driv 
    5555  
    5656 ifdef CONFIG_MMC 
  • branches/backfire/package/mac80211/patches/007-remove_misc_drivers.patch

    r26536 r26763  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -204,7 +204,7 @@ $(warning "WARNING: CONFIG_CFG80211_WEXT 
     3@@ -199,7 +199,7 @@ $(warning "WARNING: CONFIG_CFG80211_WEXT 
    44 endif #CONFIG_WIRELESS_EXT 
    55  
     
    1010  
    1111 # mac80211 test driver 
    12 @@ -342,13 +342,13 @@ endif #CONFIG_CRC_ITU_T 
     12@@ -337,13 +337,13 @@ endif #CONFIG_CRC_ITU_T 
    1313 CONFIG_MWL8K=m 
    1414  
     
    2929  
    3030 ifdef CONFIG_WIRELESS_EXT 
    31 @@ -403,21 +403,21 @@ endif #CONFIG_COMPAT_KERNEL_29 
     31@@ -398,21 +398,21 @@ endif #CONFIG_COMPAT_KERNEL_29 
    3232 # Note: this depends on CONFIG_USB_NET_RNDIS_HOST and CONFIG_USB_NET_CDCETHER 
    3333 # it also requires new RNDIS_HOST and CDC_ETHER modules which we add 
  • branches/backfire/package/mac80211/patches/010-no_pcmcia.patch

    r25966 r26763  
    1010 include $(KLIB_BUILD)/.config 
    1111 endif 
    12 @@ -234,7 +234,7 @@ CONFIG_B43=m 
     12@@ -229,7 +229,7 @@ CONFIG_B43=m 
    1313 CONFIG_B43_HWRNG=y 
    1414 CONFIG_B43_PCI_AUTOSELECT=y 
  • branches/backfire/package/mac80211/patches/011-no_sdio.patch

    r25966 r26763  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -495,7 +495,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv 
     3@@ -483,7 +483,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv 
    44  
    55 ifdef CONFIG_MMC 
  • branches/backfire/package/mac80211/patches/013-disable_b43_nphy.patch

    r25966 r26763  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -240,7 +240,7 @@ ifdef CONFIG_MAC80211_LEDS 
     3@@ -235,7 +235,7 @@ ifdef CONFIG_MAC80211_LEDS 
    44 CONFIG_B43_LEDS=y 
    55 endif #CONFIG_MAC80211_LEDS 
  • branches/backfire/package/mac80211/patches/015-remove-rt2x00-options.patch

    r25966 r26763  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -304,7 +304,7 @@ CONFIG_RTL8180=m 
     3@@ -299,7 +299,7 @@ CONFIG_RTL8180=m 
    44  
    55 CONFIG_ADM8211=m 
     
    1010 CONFIG_RT2500PCI=m 
    1111 ifdef CONFIG_CRC_CCITT 
    12 @@ -444,7 +444,7 @@ CONFIG_RT2800USB=m 
     12@@ -432,7 +432,7 @@ CONFIG_RT2800USB=m 
    1313 # CONFIG_RT2800USB_RT35XX=y 
    1414 CONFIG_RT2800USB_UNKNOWN=y 
  • branches/backfire/package/mac80211/patches/016-remove_pid_algo.patch

    r24962 r26763  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -116,7 +116,7 @@ CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y 
     3@@ -111,7 +111,7 @@ CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y 
    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. 
  • branches/backfire/package/mac80211/patches/017-remove_ath9k_rc.patch

    r25966 r26763  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -207,7 +207,7 @@ CONFIG_ATH9K_COMMON=m 
     3@@ -202,7 +202,7 @@ 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 
  • branches/backfire/package/mac80211/patches/019-remove_ath5k_pci_option.patch

    r25966 r26763  
    11--- a/config.mk 
    22+++ b/config.mk 
    3 @@ -212,7 +212,7 @@ CONFIG_ATH9K_COMMON=m 
     3@@ -207,7 +207,7 @@ CONFIG_ATH9K_COMMON=m 
    44 # PCI Drivers 
    55 ifdef CONFIG_PCI 
  • branches/backfire/package/mac80211/patches/110-disable_usb_compat.patch

    r25966 r26763  
    3434--- a/config.mk 
    3535+++ b/config.mk 
    36 @@ -431,7 +431,7 @@ endif #CONFIG_COMPAT_KERNEL_29 
     36@@ -419,7 +419,7 @@ endif #CONFIG_COMPAT_KERNEL_29 
    3737 # This activates a threading fix for usb urb. 
    3838 # this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351 
  • branches/backfire/package/mac80211/patches/300-pending_work.patch

    r26666 r26763  
    1 --- a/drivers/net/wireless/ath/ath9k/main.c 
    2 +++ b/drivers/net/wireless/ath/ath9k/main.c 
    3 @@ -324,7 +324,6 @@ static void ath_paprd_activate(struct at 
    4         if (!caldata || !caldata->paprd_done) 
    5                 return; 
    6   
    7 -       ath9k_ps_wakeup(sc); 
    8         ar9003_paprd_enable(ah, false); 
    9         for (chain = 0; chain < AR9300_MAX_CHAINS; chain++) { 
    10                 if (!(common->tx_chainmask & BIT(chain))) 
    11 @@ -334,7 +333,6 @@ static void ath_paprd_activate(struct at 
     1--- a/net/wireless/reg.c 
     2+++ b/net/wireless/reg.c 
     3@@ -1456,7 +1456,8 @@ static void reg_process_hint(struct regu 
     4         * We only time out user hints, given that they should be the only 
     5         * source of bogus requests. 
     6         */ 
     7-       if (reg_request->initiator == NL80211_REGDOM_SET_BY_USER) 
     8+       if (r != -EALREADY && 
     9+           reg_request->initiator == NL80211_REGDOM_SET_BY_USER) 
     10                schedule_delayed_work(&reg_timeout, msecs_to_jiffies(3142)); 
     11 } 
     12  
     13--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c 
     14+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c 
     15@@ -18,13 +18,13 @@ 
     16 #include "hw-ops.h" 
     17 #include "ar9003_phy.h" 
     18  
     19-#define MPASS  3 
     20 #define MAX_MEASUREMENT        8 
     21-#define MAX_DIFFERENCE 10 
     22+#define MAX_MAG_DELTA  11 
     23+#define MAX_PHS_DELTA  10 
     24  
     25 struct coeff { 
     26-       int mag_coeff[AR9300_MAX_CHAINS][MAX_MEASUREMENT][MPASS]; 
     27-       int phs_coeff[AR9300_MAX_CHAINS][MAX_MEASUREMENT][MPASS]; 
     28+       int mag_coeff[AR9300_MAX_CHAINS][MAX_MEASUREMENT]; 
     29+       int phs_coeff[AR9300_MAX_CHAINS][MAX_MEASUREMENT]; 
     30        int iqc_coeff[2]; 
     31 }; 
     32  
     33@@ -608,36 +608,48 @@ static bool ar9003_hw_calc_iq_corr(struc 
     34        return true; 
     35 } 
     36  
     37-static bool ar9003_hw_compute_closest_pass_and_avg(int *mp_coeff, int *mp_avg) 
     38+static void ar9003_hw_detect_outlier(int *mp_coeff, int nmeasurement, 
     39+                                    int max_delta) 
     40 { 
     41-       int diff[MPASS]; 
     42- 
     43-       diff[0] = abs(mp_coeff[0] - mp_coeff[1]); 
     44-       diff[1] = abs(mp_coeff[1] - mp_coeff[2]); 
     45-       diff[2] = abs(mp_coeff[2] - mp_coeff[0]); 
     46- 
     47-       if (diff[0] > MAX_DIFFERENCE && 
     48-           diff[1] > MAX_DIFFERENCE && 
     49-           diff[2] > MAX_DIFFERENCE) 
     50-               return false; 
     51- 
     52-       if (diff[0] <= diff[1] && diff[0] <= diff[2]) 
     53-               *mp_avg = (mp_coeff[0] + mp_coeff[1]) / 2; 
     54-       else if (diff[1] <= diff[2]) 
     55-               *mp_avg = (mp_coeff[1] + mp_coeff[2]) / 2; 
     56-       else 
     57-               *mp_avg = (mp_coeff[2] + mp_coeff[0]) / 2; 
     58+       int mp_max = -64, max_idx = 0; 
     59+       int mp_min = 63, min_idx = 0; 
     60+       int mp_avg = 0, i, outlier_idx = 0; 
     61+ 
     62+       /* find min/max mismatch across all calibrated gains */ 
     63+       for (i = 0; i < nmeasurement; i++) { 
     64+               mp_avg += mp_coeff[i]; 
     65+               if (mp_coeff[i] > mp_max) { 
     66+                       mp_max = mp_coeff[i]; 
     67+                       max_idx = i; 
     68+               } else if (mp_coeff[i] < mp_min) { 
     69+                       mp_min = mp_coeff[i]; 
     70+                       min_idx = i; 
     71+               } 
     72+       } 
     73  
     74-       return true; 
     75+       /* find average (exclude max abs value) */ 
     76+       for (i = 0; i < nmeasurement; i++) { 
     77+               if ((abs(mp_coeff[i]) < abs(mp_max)) || 
     78+                   (abs(mp_coeff[i]) < abs(mp_min))) 
     79+                       mp_avg += mp_coeff[i]; 
     80+       } 
     81+       mp_avg /= (nmeasurement - 1); 
     82+ 
     83+       /* detect outlier */ 
     84+       if (abs(mp_max - mp_min) > max_delta) { 
     85+               if (abs(mp_max - mp_avg) > abs(mp_min - mp_avg)) 
     86+                       outlier_idx = max_idx; 
     87+               else 
     88+                       outlier_idx = min_idx; 
     89+       } 
     90+       mp_coeff[outlier_idx] = mp_avg; 
     91 } 
     92  
     93 static void ar9003_hw_tx_iqcal_load_avg_2_passes(struct ath_hw *ah, 
     94                                                 u8 num_chains, 
     95                                                 struct coeff *coeff) 
     96 { 
     97-       struct ath_common *common = ath9k_hw_common(ah); 
     98        int i, im, nmeasurement; 
     99-       int magnitude, phase; 
     100        u32 tx_corr_coeff[MAX_MEASUREMENT][AR9300_MAX_CHAINS]; 
     101  
     102        memset(tx_corr_coeff, 0, sizeof(tx_corr_coeff)); 
     103@@ -657,37 +669,28 @@ static void ar9003_hw_tx_iqcal_load_avg_ 
     104  
     105        /* Load the average of 2 passes */ 
     106        for (i = 0; i < num_chains; i++) { 
     107-               if (AR_SREV_9485(ah)) 
     108-                       nmeasurement = REG_READ_FIELD(ah, 
     109-                                       AR_PHY_TX_IQCAL_STATUS_B0_9485, 
     110-                                       AR_PHY_CALIBRATED_GAINS_0); 
     111-               else 
     112-                       nmeasurement = REG_READ_FIELD(ah, 
     113-                                       AR_PHY_TX_IQCAL_STATUS_B0, 
     114-                                       AR_PHY_CALIBRATED_GAINS_0); 
     115+               nmeasurement = REG_READ_FIELD(ah, 
     116+                               AR_PHY_TX_IQCAL_STATUS_B0, 
     117+                               AR_PHY_CALIBRATED_GAINS_0); 
     118  
     119                if (nmeasurement > MAX_MEASUREMENT) 
     120                        nmeasurement = MAX_MEASUREMENT; 
     121  
     122-               for (im = 0; im < nmeasurement; im++) { 
     123-                       /* 
     124-                        * Determine which 2 passes are closest and compute avg 
     125-                        * magnitude 
     126-                        */ 
     127-                       if (!ar9003_hw_compute_closest_pass_and_avg(coeff->mag_coeff[i][im], 
     128-                                                                   &magnitude)) 
     129-                               goto disable_txiqcal; 
     130+               /* detect outlier only if nmeasurement > 1 */ 
     131+               if (nmeasurement > 1) { 
     132+                       /* Detect magnitude outlier */ 
     133+                       ar9003_hw_detect_outlier(coeff->mag_coeff[i], 
     134+                                       nmeasurement, MAX_MAG_DELTA); 
     135+ 
     136+                       /* Detect phase outlier */ 
     137+                       ar9003_hw_detect_outlier(coeff->phs_coeff[i], 
     138+                                       nmeasurement, MAX_PHS_DELTA); 
     139+               } 
     140  
     141-                       /* 
     142-                        * Determine which 2 passes are closest and compute avg 
     143-                        * phase 
     144-                        */ 
     145-                       if (!ar9003_hw_compute_closest_pass_and_avg(coeff->phs_coeff[i][im], 
     146-                                                                   &phase)) 
     147-                               goto disable_txiqcal; 
     148+               for (im = 0; im < nmeasurement; im++) { 
     149  
     150-                       coeff->iqc_coeff[0] = (magnitude & 0x7f) | 
     151-                                             ((phase & 0x7f) << 7); 
     152+                       coeff->iqc_coeff[0] = (coeff->mag_coeff[i][im] & 0x7f) | 
     153+                               ((coeff->phs_coeff[i][im] & 0x7f) << 7); 
     154  
     155                        if ((im % 2) == 0) 
     156                                REG_RMW_FIELD(ah, tx_corr_coeff[im][i], 
     157@@ -707,141 +710,37 @@ static void ar9003_hw_tx_iqcal_load_avg_ 
     158  
     159        return; 
     160  
     161-disable_txiqcal: 
     162-       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_3, 
     163-                     AR_PHY_TX_IQCAL_CONTROL_3_IQCORR_EN, 0x0); 
     164-       REG_RMW_FIELD(ah, AR_PHY_RX_IQCAL_CORR_B0, 
     165-                     AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN, 0x0); 
     166- 
     167-       ath_dbg(common, ATH_DBG_CALIBRATE, "TX IQ Cal disabled\n"); 
     168 } 
     169  
     170-static void ar9003_hw_tx_iq_cal(struct ath_hw *ah) 
     171+static bool ar9003_hw_tx_iq_cal_run(struct ath_hw *ah) 
     172 { 
     173        struct ath_common *common = ath9k_hw_common(ah); 
     174-       static const u32 txiqcal_status[AR9300_MAX_CHAINS] = { 
     175-               AR_PHY_TX_IQCAL_STATUS_B0, 
     176-               AR_PHY_TX_IQCAL_STATUS_B1, 
     177-               AR_PHY_TX_IQCAL_STATUS_B2, 
     178-       }; 
     179-       static const u32 chan_info_tab[] = { 
     180-               AR_PHY_CHAN_INFO_TAB_0, 
     181-               AR_PHY_CHAN_INFO_TAB_1, 
     182-               AR_PHY_CHAN_INFO_TAB_2, 
     183-       }; 
     184-       struct coeff coeff; 
     185-       s32 iq_res[6]; 
     186-       s32 i, j, ip, im, nmeasurement; 
     187-       u8 nchains = get_streams(common->tx_chainmask); 
     188- 
     189-       for (ip = 0; ip < MPASS; ip++) { 
     190-               REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_1, 
     191-                             AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT, 
     192-                             DELPT); 
     193-               REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_START, 
     194-                             AR_PHY_TX_IQCAL_START_DO_CAL, 
     195-                             AR_PHY_TX_IQCAL_START_DO_CAL); 
     196- 
     197-               if (!ath9k_hw_wait(ah, AR_PHY_TX_IQCAL_START, 
     198-                                  AR_PHY_TX_IQCAL_START_DO_CAL, 
     199-                                  0, AH_WAIT_TIMEOUT)) { 
     200-                       ath_dbg(common, ATH_DBG_CALIBRATE, 
     201-                               "Tx IQ Cal not complete.\n"); 
     202-                       goto TX_IQ_CAL_FAILED; 
     203-               } 
     204- 
     205-               nmeasurement = REG_READ_FIELD(ah, AR_PHY_TX_IQCAL_STATUS_B0, 
     206-                                             AR_PHY_CALIBRATED_GAINS_0); 
     207-                       if (nmeasurement > MAX_MEASUREMENT) 
     208-                               nmeasurement = MAX_MEASUREMENT; 
     209- 
     210-               for (i = 0; i < nchains; i++) { 
     211-                       ath_dbg(common, ATH_DBG_CALIBRATE, 
     212-                               "Doing Tx IQ Cal for chain %d.\n", i); 
     213-                       for (im = 0; im < nmeasurement; im++) { 
     214-                               if (REG_READ(ah, txiqcal_status[i]) & 
     215-                                            AR_PHY_TX_IQCAL_STATUS_FAILED) { 
     216-                                       ath_dbg(common, ATH_DBG_CALIBRATE, 
     217-                                               "Tx IQ Cal failed for chain %d.\n", i); 
     218-                                       goto TX_IQ_CAL_FAILED; 
     219-                               } 
     220- 
     221-                               for (j = 0; j < 3; j++) { 
     222-                                       u8 idx = 2 * j, 
     223-                                          offset = 4 * (3 * im + j); 
     224- 
     225-                                       REG_RMW_FIELD(ah, AR_PHY_CHAN_INFO_MEMORY, 
     226-                                                     AR_PHY_CHAN_INFO_TAB_S2_READ, 
     227-                                                     0); 
     228- 
     229-                                       /* 32 bits */ 
     230-                                       iq_res[idx] = REG_READ(ah, 
     231-                                                       chan_info_tab[i] + 
     232-                                                       offset); 
     233- 
     234-                                       REG_RMW_FIELD(ah, AR_PHY_CHAN_INFO_MEMORY, 
     235-                                                     AR_PHY_CHAN_INFO_TAB_S2_READ, 
     236-                                                     1); 
     237- 
     238-                                       /* 16 bits */ 
     239-                                       iq_res[idx+1] = 0xffff & REG_READ(ah, 
     240-                                                               chan_info_tab[i] + 
     241-                                                               offset); 
     242- 
     243-                                       ath_dbg(common, ATH_DBG_CALIBRATE, 
     244-                                               "IQ RES[%d]=0x%x IQ_RES[%d]=0x%x\n", 
     245-                                               idx, iq_res[idx], idx+1, iq_res[idx+1]); 
     246-                               } 
     247- 
     248-                               if (!ar9003_hw_calc_iq_corr(ah, i, iq_res, 
     249-                                                           coeff.iqc_coeff)) { 
     250-                                       ath_dbg(common, ATH_DBG_CALIBRATE, 
     251-                                               "Failed in calculation of IQ correction.\n"); 
     252-                                       goto TX_IQ_CAL_FAILED; 
     253-                               } 
     254-                               coeff.mag_coeff[i][im][ip] = 
     255-                                               coeff.iqc_coeff[0] & 0x7f; 
     256-                               coeff.phs_coeff[i][im][ip] = 
     257-                                               (coeff.iqc_coeff[0] >> 7) & 0x7f; 
     258- 
     259-                               if (coeff.mag_coeff[i][im][ip] > 63) 
     260-                                       coeff.mag_coeff[i][im][ip] -= 128; 
     261-                               if (coeff.phs_coeff[i][im][ip] > 63) 
     262-                                       coeff.phs_coeff[i][im][ip] -= 128; 
     263- 
     264-                       } 
     265-               } 
     266-       } 
     267- 
     268-       ar9003_hw_tx_iqcal_load_avg_2_passes(ah, nchains, &coeff); 
     269- 
     270-       return; 
     271- 
     272-TX_IQ_CAL_FAILED: 
     273-       ath_dbg(common, ATH_DBG_CALIBRATE, "Tx IQ Cal failed\n"); 
     274-} 
     275- 
     276-static void ar9003_hw_tx_iq_cal_run(struct ath_hw *ah) 
     277-{ 
     278        u8 tx_gain_forced; 
     279  
     280-       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_1_9485, 
     281-                     AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT, DELPT); 
     282        tx_gain_forced = REG_READ_FIELD(ah, AR_PHY_TX_FORCED_GAIN, 
     283                                        AR_PHY_TXGAIN_FORCE); 
     284        if (tx_gain_forced) 
     285                REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN, 
     286                              AR_PHY_TXGAIN_FORCE, 0); 
     287  
     288-       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_START_9485, 
     289-                     AR_PHY_TX_IQCAL_START_DO_CAL_9485, 1); 
     290+       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_START, 
     291+                     AR_PHY_TX_IQCAL_START_DO_CAL, 1); 
     292+ 
     293+       if (!ath9k_hw_wait(ah, AR_PHY_TX_IQCAL_START, 
     294+                       AR_PHY_TX_IQCAL_START_DO_CAL, 0, 
     295+                       AH_WAIT_TIMEOUT)) { 
     296+               ath_dbg(common, ATH_DBG_CALIBRATE, 
     297+                       "Tx IQ Cal is not completed.\n"); 
     298+               return false; 
     299+       } 
     300+       return true; 
     301 } 
     302  
     303 static void ar9003_hw_tx_iq_cal_post_proc(struct ath_hw *ah) 
     304 { 
     305        struct ath_common *common = ath9k_hw_common(ah); 
     306        const u32 txiqcal_status[AR9300_MAX_CHAINS] = { 
     307-               AR_PHY_TX_IQCAL_STATUS_B0_9485, 
     308+               AR_PHY_TX_IQCAL_STATUS_B0, 
     309                AR_PHY_TX_IQCAL_STATUS_B1, 
     310                AR_PHY_TX_IQCAL_STATUS_B2, 
     311        }; 
     312@@ -853,7 +752,7 @@ static void ar9003_hw_tx_iq_cal_post_pro 
     313        struct coeff coeff; 
     314        s32 iq_res[6]; 
     315        u8 num_chains = 0; 
     316-       int i, ip, im, j; 
     317+       int i, im, j; 
     318        int nmeasurement; 
     319  
     320        for (i = 0; i < AR9300_MAX_CHAINS; i++) { 
     321@@ -861,71 +760,69 @@ static void ar9003_hw_tx_iq_cal_post_pro 
     322                        num_chains++; 
    12323        } 
    13324  
    14         ar9003_paprd_enable(ah, true); 
    15 -       ath9k_ps_restore(sc); 
    16  } 
    17   
    18  static bool ath_paprd_send_frame(struct ath_softc *sc, struct sk_buff *skb, int chain) 
    19 @@ -554,8 +552,11 @@ set_timer: 
    20         if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_PAPRD) && ah->caldata) { 
    21                 if (!ah->caldata->paprd_done) 
    22                         ieee80211_queue_work(sc->hw, &sc->paprd_work); 
    23 -               else if (!ah->paprd_table_write_done) 
    24 +               else if (!ah->paprd_table_write_done) { 
    25 +                       ath9k_ps_wakeup(sc); 
    26                         ath_paprd_activate(sc); 
    27 +                       ath9k_ps_restore(sc); 
    28 +               } 
     325-       for (ip = 0; ip < MPASS; ip++) { 
     326-               for (i = 0; i < num_chains; i++) { 
     327-                       nmeasurement = REG_READ_FIELD(ah, 
     328-                                       AR_PHY_TX_IQCAL_STATUS_B0_9485, 
     329-                                       AR_PHY_CALIBRATED_GAINS_0); 
     330-                       if (nmeasurement > MAX_MEASUREMENT) 
     331-                               nmeasurement = MAX_MEASUREMENT; 
     332+       for (i = 0; i < num_chains; i++) { 
     333+               nmeasurement = REG_READ_FIELD(ah, 
     334+                               AR_PHY_TX_IQCAL_STATUS_B0, 
     335+                               AR_PHY_CALIBRATED_GAINS_0); 
     336+               if (nmeasurement > MAX_MEASUREMENT) 
     337+                       nmeasurement = MAX_MEASUREMENT; 
     338+ 
     339+               for (im = 0; im < nmeasurement; im++) { 
     340+                       ath_dbg(common, ATH_DBG_CALIBRATE, 
     341+                               "Doing Tx IQ Cal for chain %d.\n", i); 
     342  
     343-                       for (im = 0; im < nmeasurement; im++) { 
     344+                       if (REG_READ(ah, txiqcal_status[i]) & 
     345+                                       AR_PHY_TX_IQCAL_STATUS_FAILED) { 
     346                                ath_dbg(common, ATH_DBG_CALIBRATE, 
     347-                                       "Doing Tx IQ Cal for chain %d.\n", i); 
     348- 
     349-                               if (REG_READ(ah, txiqcal_status[i]) & 
     350-                                   AR_PHY_TX_IQCAL_STATUS_FAILED) { 
     351-                                       ath_dbg(common, ATH_DBG_CALIBRATE, 
     352                                        "Tx IQ Cal failed for chain %d.\n", i); 
     353-                                       goto tx_iqcal_fail; 
     354-                               } 
     355+                               goto tx_iqcal_fail; 
     356+                       } 
     357  
     358-                               for (j = 0; j < 3; j++) { 
     359-                                       u32 idx = 2 * j, offset = 4 * (3 * im + j); 
     360+                       for (j = 0; j < 3; j++) { 
     361+                               u32 idx = 2 * j, offset = 4 * (3 * im + j); 
     362  
     363-                                       REG_RMW_FIELD(ah, 
     364+                               REG_RMW_FIELD(ah, 
     365                                                AR_PHY_CHAN_INFO_MEMORY, 
     366                                                AR_PHY_CHAN_INFO_TAB_S2_READ, 
     367                                                0); 
     368  
     369-                                       /* 32 bits */ 
     370-                                       iq_res[idx] = REG_READ(ah, 
     371-                                                       chan_info_tab[i] + 
     372-                                                       offset); 
     373+                               /* 32 bits */ 
     374+                               iq_res[idx] = REG_READ(ah, 
     375+                                               chan_info_tab[i] + 
     376+                                               offset); 
     377  
     378-                                       REG_RMW_FIELD(ah, 
     379+                               REG_RMW_FIELD(ah, 
     380                                                AR_PHY_CHAN_INFO_MEMORY, 
     381                                                AR_PHY_CHAN_INFO_TAB_S2_READ, 
     382                                                1); 
     383  
     384-                                       /* 16 bits */ 
     385-                                       iq_res[idx + 1] = 0xffff & REG_READ(ah, 
     386-                                                         chan_info_tab[i] + offset); 
     387- 
     388-                                       ath_dbg(common, ATH_DBG_CALIBRATE, 
     389-                                               "IQ RES[%d]=0x%x" 
     390-                                               "IQ_RES[%d]=0x%x\n", 
     391-                                               idx, iq_res[idx], idx + 1, 
     392-                                               iq_res[idx + 1]); 
     393-                               } 
     394+                               /* 16 bits */ 
     395+                               iq_res[idx + 1] = 0xffff & REG_READ(ah, 
     396+                                               chan_info_tab[i] + offset); 
     397  
     398-                               if (!ar9003_hw_calc_iq_corr(ah, i, iq_res, 
     399-                                                           coeff.iqc_coeff)) { 
     400-                                       ath_dbg(common, ATH_DBG_CALIBRATE, 
     401-                                        "Failed in calculation of IQ correction.\n"); 
     402-                                       goto tx_iqcal_fail; 
     403-                               } 
     404+                               ath_dbg(common, ATH_DBG_CALIBRATE, 
     405+                                       "IQ RES[%d]=0x%x" 
     406+                                       "IQ_RES[%d]=0x%x\n", 
     407+                                       idx, iq_res[idx], idx + 1, 
     408+                                       iq_res[idx + 1]); 
     409+                       } 
     410  
     411-                               coeff.mag_coeff[i][im][ip] = 
     412-                                               coeff.iqc_coeff[0] & 0x7f; 
     413-                               coeff.phs_coeff[i][im][ip] = 
     414-                                               (coeff.iqc_coeff[0] >> 7) & 0x7f; 
     415- 
     416-                               if (coeff.mag_coeff[i][im][ip] > 63) 
     417-                                       coeff.mag_coeff[i][im][ip] -= 128; 
     418-                               if (coeff.phs_coeff[i][im][ip] > 63) 
     419-                                       coeff.phs_coeff[i][im][ip] -= 128; 
     420+                       if (!ar9003_hw_calc_iq_corr(ah, i, iq_res, 
     421+                                               coeff.iqc_coeff)) { 
     422+                               ath_dbg(common, ATH_DBG_CALIBRATE, 
     423+                                       "Failed in calculation of \ 
     424+                                       IQ correction.\n"); 
     425+                               goto tx_iqcal_fail; 
     426                        } 
     427+ 
     428+                       coeff.mag_coeff[i][im] = coeff.iqc_coeff[0] & 0x7f; 
     429+                       coeff.phs_coeff[i][im] = 
     430+                               (coeff.iqc_coeff[0] >> 7) & 0x7f; 
     431+ 
     432+                       if (coeff.mag_coeff[i][im] > 63) 
     433+                               coeff.mag_coeff[i][im] -= 128; 
     434+                       if (coeff.phs_coeff[i][im] > 63) 
     435+                               coeff.phs_coeff[i][im] -= 128; 
     436                } 
    29437        } 
    30  } 
    31   
    32 @@ -1376,7 +1377,6 @@ static void ath9k_calculate_summary_stat 
    33   
    34         ath9k_calculate_iter_data(hw, vif, &iter_data); 
    35   
    36 -       ath9k_ps_wakeup(sc); 
    37         /* Set BSSID mask. */ 
    38         memcpy(common->bssidmask, iter_data.mask, ETH_ALEN); 
    39         ath_hw_setbssidmask(common); 
    40 @@ -1411,7 +1411,6 @@ static void ath9k_calculate_summary_stat 
     438        ar9003_hw_tx_iqcal_load_avg_2_passes(ah, num_chains, &coeff); 
     439@@ -941,6 +838,7 @@ static bool ar9003_hw_init_cal(struct at 
     440 { 
     441        struct ath_common *common = ath9k_hw_common(ah); 
     442        int val; 
     443+       bool txiqcal_done = false; 
     444  
     445        val = REG_READ(ah, AR_ENT_OTP); 
     446        ath_dbg(common, ATH_DBG_CALIBRATE, "ath9k: AR_ENT_OTP 0x%x\n", val); 
     447@@ -957,14 +855,22 @@ static bool ar9003_hw_init_cal(struct at 
     448                ar9003_hw_set_chain_masks(ah, 0x7, 0x7); 
     449  
     450        /* Do Tx IQ Calibration */ 
     451-       if (AR_SREV_9485(ah)) 
     452-               ar9003_hw_tx_iq_cal_run(ah); 
     453-       else 
     454-               ar9003_hw_tx_iq_cal(ah); 
     455+       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_1, 
     456+                     AR_PHY_TX_IQCAL_CONTROL_1_IQCORR_I_Q_COFF_DELPT, 
     457+                     DELPT); 
     458  
     459-       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS); 
     460-       udelay(5); 
     461-       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN); 
     462+       /* 
     463+        * For AR9485 or later chips, TxIQ cal runs as part of 
     464+        * AGC calibration 
     465+        */ 
     466+       if (AR_SREV_9485_OR_LATER(ah)) 
     467+               txiqcal_done = true; 
     468+       else { 
     469+               txiqcal_done = ar9003_hw_tx_iq_cal_run(ah); 
     470+               REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS); 
     471+               udelay(5); 
     472+               REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN); 
     473+       } 
     474  
     475        /* Calibrate the AGC */ 
     476        REG_WRITE(ah, AR_PHY_AGC_CONTROL, 
     477@@ -979,7 +885,7 @@ static bool ar9003_hw_init_cal(struct at 
     478                return false; 
    41479        } 
    42480  
    43         ath9k_hw_set_interrupts(ah, ah->imask); 
    44 -       ath9k_ps_restore(sc); 
    45   
    46         /* Set up ANI */ 
    47         if ((iter_data.naps + iter_data.nadhocs) > 0) { 
    48 @@ -1457,6 +1456,7 @@ static int ath9k_add_interface(struct ie 
    49         struct ath_vif *avp = (void *)vif->drv_priv; 
    50         int ret = 0; 
    51   
    52 +       ath9k_ps_wakeup(sc); 
    53         mutex_lock(&sc->mutex); 
    54   
    55         switch (vif->type) { 
    56 @@ -1503,6 +1503,7 @@ static int ath9k_add_interface(struct ie 
    57         ath9k_do_vif_add_setup(hw, vif); 
    58  out: 
    59         mutex_unlock(&sc->mutex); 
    60 +       ath9k_ps_restore(sc); 
    61         return ret; 
    62  } 
    63   
    64 @@ -1517,6 +1518,7 @@ static int ath9k_change_interface(struct 
    65   
    66         ath_dbg(common, ATH_DBG_CONFIG, "Change Interface\n"); 
    67         mutex_lock(&sc->mutex); 
    68 +       ath9k_ps_wakeup(sc); 
    69   
    70         /* See if new interface type is valid. */ 
    71         if ((new_type == NL80211_IFTYPE_ADHOC) && 
    72 @@ -1546,6 +1548,7 @@ static int ath9k_change_interface(struct 
    73   
    74         ath9k_do_vif_add_setup(hw, vif); 
    75  out: 
    76 +       ath9k_ps_restore(sc); 
    77         mutex_unlock(&sc->mutex); 
    78         return ret; 
    79  } 
    80 @@ -1558,6 +1561,7 @@ static void ath9k_remove_interface(struc 
    81   
    82         ath_dbg(common, ATH_DBG_CONFIG, "Detach Interface\n"); 
    83   
    84 +       ath9k_ps_wakeup(sc); 
    85         mutex_lock(&sc->mutex); 
    86   
    87         sc->nvifs--; 
    88 @@ -1569,6 +1573,7 @@ static void ath9k_remove_interface(struc 
    89         ath9k_calculate_summary_state(hw, NULL); 
    90   
    91         mutex_unlock(&sc->mutex); 
    92 +       ath9k_ps_restore(sc); 
    93  } 
    94   
    95  static void ath9k_enable_ps(struct ath_softc *sc) 
    96 @@ -1809,6 +1814,7 @@ static int ath9k_conf_tx(struct ieee8021 
    97   
    98         txq = sc->tx.txq_map[queue]; 
    99   
    100 +       ath9k_ps_wakeup(sc); 
    101         mutex_lock(&sc->mutex); 
    102   
    103         memset(&qi, 0, sizeof(struct ath9k_tx_queue_info)); 
    104 @@ -1832,6 +1838,7 @@ static int ath9k_conf_tx(struct ieee8021 
    105                         ath_beaconq_config(sc); 
    106   
    107         mutex_unlock(&sc->mutex); 
    108 +       ath9k_ps_restore(sc); 
    109   
    110         return ret; 
    111  } 
    112 @@ -1908,6 +1915,7 @@ static void ath9k_bss_info_changed(struc 
    113         int slottime; 
    114         int error; 
    115   
    116 +       ath9k_ps_wakeup(sc); 
    117         mutex_lock(&sc->mutex); 
    118   
    119         if (changed & BSS_CHANGED_BSSID) { 
    120 @@ -2008,6 +2016,7 @@ static void ath9k_bss_info_changed(struc 
     481-       if (AR_SREV_9485(ah)) 
     482+       if (txiqcal_done) 
     483                ar9003_hw_tx_iq_cal_post_proc(ah); 
     484  
     485        /* Revert chainmasks to their original values before NF cal */ 
     486--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h 
     487+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h 
     488@@ -548,15 +548,12 @@ 
     489  
     490 #define AR_PHY_TXGAIN_TABLE      (AR_SM_BASE + 0x300) 
     491  
     492-#define AR_PHY_TX_IQCAL_START_9485             (AR_SM_BASE + 0x3c4) 
     493-#define AR_PHY_TX_IQCAL_START_DO_CAL_9485      0x80000000 
     494-#define AR_PHY_TX_IQCAL_START_DO_CAL_9485_S    31 
     495-#define AR_PHY_TX_IQCAL_CONTROL_1_9485         (AR_SM_BASE + 0x3c8) 
     496-#define AR_PHY_TX_IQCAL_STATUS_B0_9485         (AR_SM_BASE + 0x3f0) 
     497- 
     498-#define AR_PHY_TX_IQCAL_CONTROL_1   (AR_SM_BASE + 0x448) 
     499-#define AR_PHY_TX_IQCAL_START       (AR_SM_BASE + 0x440) 
     500-#define AR_PHY_TX_IQCAL_STATUS_B0   (AR_SM_BASE + 0x48c) 
     501+#define AR_PHY_TX_IQCAL_CONTROL_1   (AR_SM_BASE + AR_SREV_9485(ah) ? \ 
     502+                                                0x3c8 : 0x448) 
     503+#define AR_PHY_TX_IQCAL_START       (AR_SM_BASE + AR_SREV_9485(ah) ? \ 
     504+                                                0x3c4 : 0x440) 
     505+#define AR_PHY_TX_IQCAL_STATUS_B0   (AR_SM_BASE + AR_SREV_9485(ah) ? \ 
     506+                                                0x3f0 : 0x48c) 
     507 #define AR_PHY_TX_IQCAL_CORR_COEFF_B0(_i)    (AR_SM_BASE + \ 
     508                                             (AR_SREV_9485(ah) ? \ 
     509                                              0x3d0 : 0x450) + ((_i) << 2)) 
     510@@ -758,10 +755,10 @@ 
     511 #define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT   0x01000000 
     512 #define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT_S 24 
     513 #define AR_PHY_CHANNEL_STATUS_RX_CLEAR      0x00000004 
     514-#define AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT             0x01fc0000 
     515-#define AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT_S                   18 
     516-#define AR_PHY_TX_IQCAL_START_DO_CAL        0x00000001 
     517-#define AR_PHY_TX_IQCAL_START_DO_CAL_S      0 
     518+#define AR_PHY_TX_IQCAL_CONTROL_1_IQCORR_I_Q_COFF_DELPT             0x01fc0000 
     519+#define AR_PHY_TX_IQCAL_CONTROL_1_IQCORR_I_Q_COFF_DELPT_S                   18 
     520+#define AR_PHY_TX_IQCAL_START_DO_CAL       0x00000001 
     521+#define AR_PHY_TX_IQCAL_START_DO_CAL_S     0 
     522  
     523 #define AR_PHY_TX_IQCAL_STATUS_FAILED    0x00000001 
     524 #define AR_PHY_CALIBRATED_GAINS_0       0x3e 
     525--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
     526+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
     527@@ -453,6 +453,7 @@ void ath9k_btcoex_timer_pause(struct ath 
     528  
     529 #define ATH_LED_PIN_DEF                1 
     530 #define ATH_LED_PIN_9287               8 
     531+#define ATH_LED_PIN_9300               10 
     532 #define ATH_LED_PIN_9485               6 
     533  
     534 #ifdef CONFIG_MAC80211_LEDS 
     535--- a/drivers/net/wireless/ath/ath9k/gpio.c 
     536+++ b/drivers/net/wireless/ath/ath9k/gpio.c 
     537@@ -46,6 +46,8 @@ void ath_init_leds(struct ath_softc *sc) 
     538                        sc->sc_ah->led_pin = ATH_LED_PIN_9287; 
     539                else if (AR_SREV_9485(sc->sc_ah)) 
     540                        sc->sc_ah->led_pin = ATH_LED_PIN_9485; 
     541+               else if (AR_SREV_9300(sc->sc_ah)) 
     542+                       sc->sc_ah->led_pin = ATH_LED_PIN_9300; 
     543                else 
     544                        sc->sc_ah->led_pin = ATH_LED_PIN_DEF; 
    121545        } 
    122   
    123         mutex_unlock(&sc->mutex); 
    124 +       ath9k_ps_restore(sc); 
    125  } 
    126   
    127  static u64 ath9k_get_tsf(struct ieee80211_hw *hw) 
    128 --- a/drivers/net/wireless/ath/ath9k/beacon.c 
    129 +++ b/drivers/net/wireless/ath/ath9k/beacon.c 
    130 @@ -392,14 +392,6 @@ void ath_beacon_tasklet(unsigned long da 
    131         tsf += TU_TO_USEC(ah->config.sw_beacon_response_time); 
    132         tsftu = TSF_TO_TU((tsf * ATH_BCBUF) >>32, tsf * ATH_BCBUF); 
    133         slot = (tsftu % (intval * ATH_BCBUF)) / intval; 
    134 -       /* 
    135 -        * Reverse the slot order to get slot 0 on the TBTT offset that does 
    136 -        * not require TSF adjustment and other slots adding 
    137 -        * slot/ATH_BCBUF * beacon_int to timestamp. For example, with 
    138 -        * ATH_BCBUF = 4, we process beacon slots as follows: 3 2 1 0 3 2 1 .. 
    139 -        * and slot 0 is at correct offset to TBTT. 
    140 -        */ 
    141 -       slot = ATH_BCBUF - slot - 1; 
    142         vif = sc->beacon.bslot[slot]; 
    143   
    144         ath_dbg(common, ATH_DBG_BEACON, 
    145 @@ -708,7 +700,7 @@ void ath_beacon_config(struct ath_softc  
    146         if (cur_conf->dtim_period == 0) 
    147                 cur_conf->dtim_period = 1; 
    148   
    149 -       switch (iftype) { 
    150 +       switch (sc->sc_ah->opmode) { 
    151         case NL80211_IFTYPE_AP: 
    152                 ath_beacon_config_ap(sc, cur_conf); 
    153                 break; 
     546--- a/drivers/net/wireless/ath/ath9k/reg.h 
     547+++ b/drivers/net/wireless/ath/ath9k/reg.h 
     548@@ -868,6 +868,8 @@ 
     549 #define AR_SREV_9485_11(_ah) \ 
     550        (AR_SREV_9485(_ah) && \ 
     551         ((_ah)->hw_version.macRev == AR_SREV_REVISION_9485_11)) 
     552+#define AR_SREV_9485_OR_LATER(_ah) \ 
     553+       (((_ah)->hw_version.macVersion >= AR_SREV_VERSION_9485)) 
     554  
     555 #define AR_SREV_9285E_20(_ah) \ 
     556     (AR_SREV_9285_12_OR_LATER(_ah) && \ 
    154557--- a/net/mac80211/rx.c 
    155558+++ b/net/mac80211/rx.c 
    156 @@ -1585,7 +1585,7 @@ ieee80211_drop_unencrypted_mgmt(struct i 
    157  } 
    158   
    159  static int 
    160 -__ieee80211_data_to_8023(struct ieee80211_rx_data *rx) 
    161 +__ieee80211_data_to_8023(struct ieee80211_rx_data *rx, bool *port_control) 
    162  { 
    163         struct ieee80211_sub_if_data *sdata = rx->sdata; 
    164         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; 
    165 @@ -1593,6 +1593,7 @@ __ieee80211_data_to_8023(struct ieee8021 
    166         struct ethhdr *ehdr; 
    167         int ret; 
    168   
    169 +       *port_control = false; 
    170         if (ieee80211_has_a4(hdr->frame_control) && 
    171             sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta) 
    172                 return -1; 
    173 @@ -1611,11 +1612,13 @@ __ieee80211_data_to_8023(struct ieee8021 
    174                 return -1; 
    175   
    176         ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type); 
    177 -       if (ret < 0 || !check_port_control) 
    178 +       if (ret < 0) 
    179                 return ret; 
    180   
    181         ehdr = (struct ethhdr *) rx->skb->data; 
    182 -       if (ehdr->h_proto != rx->sdata->control_port_protocol) 
    183 +       if (ehdr->h_proto == rx->sdata->control_port_protocol) 
    184 +               *port_control = true; 
    185 +       else if (check_port_control) 
    186                 return -1; 
    187   
    188         return 0; 
    189 @@ -1916,6 +1919,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_ 
    190         struct net_device *dev = sdata->dev; 
    191         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; 
    192         __le16 fc = hdr->frame_control; 
    193 +       bool port_control; 
    194         int err; 
    195   
    196         if (unlikely(!ieee80211_is_data(hdr->frame_control))) 
    197 @@ -1932,13 +1936,21 @@ ieee80211_rx_h_data(struct ieee80211_rx_ 
    198             sdata->vif.type == NL80211_IFTYPE_AP) 
    199                 return RX_DROP_MONITOR; 
    200   
    201 -       err = __ieee80211_data_to_8023(rx); 
    202 +       err = __ieee80211_data_to_8023(rx, &port_control); 
    203         if (unlikely(err)) 
    204                 return RX_DROP_UNUSABLE; 
    205   
    206         if (!ieee80211_frame_allowed(rx, fc)) 
    207                 return RX_DROP_MONITOR; 
    208   
    209 +       if (rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && 
    210 +           unlikely(port_control) && sdata->bss) { 
    211 +               sdata = container_of(sdata->bss, struct ieee80211_sub_if_data, 
    212 +                                    u.ap); 
    213 +               dev = sdata->dev; 
    214 +               rx->sdata = sdata; 
    215 +       } 
    216 + 
    217         rx->skb->dev = dev; 
    218   
    219         dev->stats.rx_packets++; 
    220 --- a/drivers/net/wireless/ath/ath9k/recv.c 
    221 +++ b/drivers/net/wireless/ath/ath9k/recv.c 
    222 @@ -75,7 +75,6 @@ static void ath_rx_buf_link(struct ath_s 
    223                 *sc->rx.rxlink = bf->bf_daddr; 
    224   
    225         sc->rx.rxlink = &ds->ds_link; 
    226 -       ath9k_hw_rxena(ah); 
    227  } 
    228   
    229  static void ath_setdefantenna(struct ath_softc *sc, u32 antenna) 
    230 @@ -426,9 +425,7 @@ u32 ath_calcrxfilter(struct ath_softc *s 
    231         else 
    232                 rfilt |= ATH9K_RX_FILTER_BEACON; 
    233   
    234 -       if ((AR_SREV_9280_20_OR_LATER(sc->sc_ah) || 
    235 -           AR_SREV_9285_12_OR_LATER(sc->sc_ah)) && 
    236 -           (sc->sc_ah->opmode == NL80211_IFTYPE_AP) && 
    237 +       if ((sc->sc_ah->opmode == NL80211_IFTYPE_AP) || 
    238             (sc->rx.rxfilter & FIF_PSPOLL)) 
    239                 rfilt |= ATH9K_RX_FILTER_PSPOLL; 
    240   
    241 @@ -486,12 +483,12 @@ start_recv: 
    242  bool ath_stoprecv(struct ath_softc *sc) 
    243  { 
    244         struct ath_hw *ah = sc->sc_ah; 
    245 -       bool stopped; 
    246 +       bool stopped, reset = false; 
    247   
    248         spin_lock_bh(&sc->rx.rxbuflock); 
    249         ath9k_hw_abortpcurecv(ah); 
    250         ath9k_hw_setrxfilter(ah, 0); 
    251 -       stopped = ath9k_hw_stopdmarecv(ah); 
    252 +       stopped = ath9k_hw_stopdmarecv(ah, &reset); 
    253   
    254         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) 
    255                 ath_edma_stop_recv(sc); 
    256 @@ -506,7 +503,7 @@ bool ath_stoprecv(struct ath_softc *sc) 
    257                         "confusing the DMA engine when we start RX up\n"); 
    258                 ATH_DBG_WARN_ON_ONCE(!stopped); 
    259         } 
    260 -       return stopped; 
    261 +       return stopped && !reset; 
    262  } 
    263   
    264  void ath_flushrecv(struct ath_softc *sc) 
    265 @@ -1767,6 +1764,7 @@ requeue: 
    266                 } else { 
    267                         list_move_tail(&bf->list, &sc->rx.rxbuf); 
    268                         ath_rx_buf_link(sc, bf); 
    269 +                       ath9k_hw_rxena(ah); 
    270                 } 
    271         } while (1); 
    272   
    273 --- a/drivers/net/wireless/ath/ath9k/hw.c 
    274 +++ b/drivers/net/wireless/ath/ath9k/hw.c 
    275 @@ -1249,15 +1249,6 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    276         ah->txchainmask = common->tx_chainmask; 
    277         ah->rxchainmask = common->rx_chainmask; 
    278   
    279 -       if ((common->bus_ops->ath_bus_type != ATH_USB) && !ah->chip_fullsleep) { 
    280 -               ath9k_hw_abortpcurecv(ah); 
    281 -               if (!ath9k_hw_stopdmarecv(ah)) { 
    282 -                       ath_dbg(common, ATH_DBG_XMIT, 
    283 -                               "Failed to stop receive dma\n"); 
    284 -                       bChannelChange = false; 
    285 -               } 
    286 -       } 
    287 - 
    288         if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) 
    289                 return -EIO; 
    290   
    291 --- a/drivers/net/wireless/ath/ath9k/mac.c 
    292 +++ b/drivers/net/wireless/ath/ath9k/mac.c 
    293 @@ -710,27 +710,46 @@ void ath9k_hw_abortpcurecv(struct ath_hw 
    294  } 
    295  EXPORT_SYMBOL(ath9k_hw_abortpcurecv); 
    296   
    297 -bool ath9k_hw_stopdmarecv(struct ath_hw *ah) 
    298 +bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset) 
    299  { 
    300  #define AH_RX_STOP_DMA_TIMEOUT 10000   /* usec */ 
    301         struct ath_common *common = ath9k_hw_common(ah); 
    302 +       u32 mac_status, last_mac_status = 0; 
    303         int i; 
    304   
    305 +       /* Enable access to the DMA observation bus */ 
    306 +       REG_WRITE(ah, AR_MACMISC, 
    307 +                 ((AR_MACMISC_DMA_OBS_LINE_8 << AR_MACMISC_DMA_OBS_S) | 
    308 +                  (AR_MACMISC_MISC_OBS_BUS_1 << 
    309 +                   AR_MACMISC_MISC_OBS_BUS_MSB_S))); 
    310 + 
    311         REG_WRITE(ah, AR_CR, AR_CR_RXD); 
    312   
    313         /* Wait for rx enable bit to go low */ 
    314         for (i = AH_RX_STOP_DMA_TIMEOUT / AH_TIME_QUANTUM; i != 0; i--) { 
    315                 if ((REG_READ(ah, AR_CR) & AR_CR_RXE) == 0) 
    316                         break; 
    317 + 
    318 +               if (!AR_SREV_9300_20_OR_LATER(ah)) { 
    319 +                       mac_status = REG_READ(ah, AR_DMADBG_7) & 0x7f0; 
    320 +                       if (mac_status == 0x1c0 && mac_status == last_mac_status) { 
    321 +                               *reset = true; 
    322 +                               break; 
    323 +                       } 
    324 + 
    325 +                       last_mac_status = mac_status; 
    326 +               } 
    327 + 
    328                 udelay(AH_TIME_QUANTUM); 
    329         } 
    330   
    331         if (i == 0) { 
    332                 ath_err(common, 
    333 -                       "DMA failed to stop in %d ms AR_CR=0x%08x AR_DIAG_SW=0x%08x\n", 
    334 +                       "DMA failed to stop in %d ms AR_CR=0x%08x AR_DIAG_SW=0x%08x DMADBG_7=0x%08x\n", 
    335                         AH_RX_STOP_DMA_TIMEOUT / 1000, 
    336                         REG_READ(ah, AR_CR), 
    337 -                       REG_READ(ah, AR_DIAG_SW)); 
    338 +                       REG_READ(ah, AR_DIAG_SW), 
    339 +                       REG_READ(ah, AR_DMADBG_7)); 
    340                 return false; 
     559@@ -652,7 +652,7 @@ static void ieee80211_sta_reorder_releas 
     560  set_release_timer: 
     561  
     562                mod_timer(&tid_agg_rx->reorder_timer, 
     563-                         tid_agg_rx->reorder_time[j] + 
     564+                         tid_agg_rx->reorder_time[j] + 1 + 
     565                          HT_RX_REORDER_BUF_TIMEOUT); 
    341566        } else { 
    342                 return true; 
    343 --- a/drivers/net/wireless/ath/ath9k/mac.h 
    344 +++ b/drivers/net/wireless/ath/ath9k/mac.h 
    345 @@ -695,7 +695,7 @@ bool ath9k_hw_setrxabort(struct ath_hw * 
    346  void ath9k_hw_putrxbuf(struct ath_hw *ah, u32 rxdp); 
    347  void ath9k_hw_startpcureceive(struct ath_hw *ah, bool is_scanning); 
    348  void ath9k_hw_abortpcurecv(struct ath_hw *ah); 
    349 -bool ath9k_hw_stopdmarecv(struct ath_hw *ah); 
    350 +bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset); 
    351  int ath9k_hw_beaconq_setup(struct ath_hw *ah); 
    352   
    353  /* Interrupt Handling */ 
     567                del_timer(&tid_agg_rx->reorder_timer); 
  • branches/backfire/package/mac80211/patches/404-ath_regd_optional.patch

    r25693 r26763  
    11--- a/drivers/net/wireless/ath/regd.c 
    22+++ b/drivers/net/wireless/ath/regd.c 
    3 @@ -192,6 +192,10 @@ ath_reg_apply_beaconing_flags(struct wip 
     3@@ -193,6 +193,10 @@ ath_reg_apply_beaconing_flags(struct wip 
    44        u32 bandwidth = 0; 
    55        int r; 
     
    1212  
    1313                if (!wiphy->bands[band]) 
    14 @@ -251,6 +255,10 @@ ath_reg_apply_active_scan_flags(struct w 
     14@@ -252,6 +256,10 @@ ath_reg_apply_active_scan_flags(struct w 
    1515        u32 bandwidth = 0; 
    1616        int r; 
     
    2323  
    2424        /* 
    25 @@ -298,6 +306,10 @@ static void ath_reg_apply_radar_flags(st 
     25@@ -299,6 +307,10 @@ static void ath_reg_apply_radar_flags(st 
    2626        struct ieee80211_channel *ch; 
    2727        unsigned int i; 
     
    3434                return; 
    3535  
    36 @@ -464,6 +476,10 @@ ath_regd_init_wiphy(struct ath_regulator 
     36@@ -466,6 +478,10 @@ ath_regd_init_wiphy(struct ath_regulator 
    3737 { 
    3838        const struct ieee80211_regdomain *regd; 
  • branches/backfire/package/mac80211/patches/405-world_regd_fixup.patch

    r25419 r26763  
    6969 }; 
    7070  
    71  /* Can be used by 0x67, 0x6A and 0x68 */ 
    72  static const struct ieee80211_regdomain ath_world_regdom_67_68_6A = { 
     71 /* Can be used by 0x67, 0x68, 0x6A and 0x6C */ 
     72 static const struct ieee80211_regdomain ath_world_regdom_67_68_6A_6C = { 
    7373-       .n_reg_rules = 4, 
    7474        .alpha2 =  "99", 
  • branches/backfire/package/mac80211/patches/406-regd_no_assoc_hints.patch

    r26725 r26763  
    1010  
    1111        if (unlikely(!last_request)) 
    12 @@ -1791,6 +1793,8 @@ static void restore_regulatory_settings( 
     12@@ -1835,6 +1837,8 @@ static void restore_regulatory_settings( 
    1313  
    1414 void regulatory_hint_disconnect(void) 
  • branches/backfire/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch

    r26669 r26763  
    11--- a/drivers/net/wireless/ath/ath9k/main.c 
    22+++ b/drivers/net/wireless/ath/ath9k/main.c 
    3 @@ -1483,14 +1483,6 @@ static int ath9k_add_interface(struct ie 
     3@@ -1439,15 +1439,6 @@ static int ath9k_add_interface(struct ie 
    44                } 
    55        } 
    66  
    7 -       if ((vif->type == NL80211_IFTYPE_ADHOC) && 
    8 -           sc->nvifs > 0) { 
     7-       if ((ah->opmode == NL80211_IFTYPE_ADHOC) || 
     8-           ((vif->type == NL80211_IFTYPE_ADHOC) && 
     9-            sc->nvifs > 0)) { 
    910-               ath_err(common, "Cannot create ADHOC interface when other" 
    1011-                       " interfaces already exist.\n"); 
     
    1617                "Attach a VIF of type: %d\n", vif->type); 
    1718  
     19@@ -1473,15 +1464,6 @@ static int ath9k_change_interface(struct 
     20        mutex_lock(&sc->mutex); 
     21        ath9k_ps_wakeup(sc); 
     22  
     23-       /* See if new interface type is valid. */ 
     24-       if ((new_type == NL80211_IFTYPE_ADHOC) && 
     25-           (sc->nvifs > 1)) { 
     26-               ath_err(common, "When using ADHOC, it must be the only" 
     27-                       " interface.\n"); 
     28-               ret = -EINVAL; 
     29-               goto out; 
     30-       } 
     31- 
     32        if (ath9k_uses_beacons(new_type) && 
     33            !ath9k_uses_beacons(vif->type)) { 
     34                if (sc->nbcnvifs >= ATH_BCBUF) { 
  • branches/backfire/package/mac80211/patches/411-ath5k_allow_adhoc_and_ap.patch

    r26686 r26763  
    1919--- a/drivers/net/wireless/ath/ath5k/base.c 
    2020+++ b/drivers/net/wireless/ath/ath5k/base.c 
    21 @@ -1857,7 +1857,7 @@ ath5k_beacon_send(struct ath5k_softc *sc 
     21@@ -1880,7 +1880,7 @@ ath5k_beacon_send(struct ath5k_softc *sc 
    2222                sc->bmisscount = 0; 
    2323        } 
     
    2828                u64 tsf = ath5k_hw_get_tsf64(ah); 
    2929                u32 tsftu = TSF_TO_TU(tsf); 
    30 @@ -1935,7 +1935,7 @@ ath5k_beacon_update_timers(struct ath5k_ 
     30@@ -1958,7 +1958,7 @@ ath5k_beacon_update_timers(struct ath5k_ 
    3131        u64 hw_tsf; 
    3232  
  • branches/backfire/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch

    r26370 r26763  
    11--- a/drivers/net/wireless/ath/ath9k/debug.c 
    22+++ b/drivers/net/wireless/ath/ath9k/debug.c 
    3 @@ -1077,6 +1077,53 @@ static const struct file_operations fops 
     3@@ -1115,6 +1115,53 @@ static const struct file_operations fops 
    44        .llseek = default_llseek,/* read accesses f_pos */ 
    55 }; 
     
    5555 { 
    5656        struct ath_common *common = ath9k_hw_common(ah); 
    57 @@ -1125,6 +1172,9 @@ int ath9k_init_debug(struct ath_hw *ah) 
     57@@ -1163,6 +1210,9 @@ 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); 
  • branches/backfire/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch

    r26536 r26763  
    11--- a/drivers/net/wireless/ath/ath9k/hw.c 
    22+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    3 @@ -1437,8 +1437,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     3@@ -1450,8 +1450,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    44        REG_WRITE(ah, AR_OBS, 8); 
    55  
  • branches/backfire/package/mac80211/patches/511-ath9k_increase_bcbuf.patch

    r26536 r26763  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -361,7 +361,7 @@ struct ath_vif { 
     3@@ -367,7 +367,7 @@ struct ath_vif { 
    44  * number of beacon intervals, the game's up. 
    55  */ 
  • branches/backfire/package/mac80211/patches/541-mac80211_fix_iftype_wds.patch

    r26741 r26763  
    11--- a/net/mac80211/rx.c 
    22+++ b/net/mac80211/rx.c 
    3 @@ -2328,13 +2328,14 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ 
     3@@ -2330,13 +2330,14 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ 
    44  
    55        if (!ieee80211_vif_is_mesh(&sdata->vif) && 
     
    1818        case cpu_to_le16(IEEE80211_STYPE_DEAUTH): 
    1919        case cpu_to_le16(IEEE80211_STYPE_DISASSOC): 
    20 @@ -2714,7 +2715,10 @@ static int prepare_for_handlers(struct i 
     20@@ -2716,7 +2717,10 @@ static int prepare_for_handlers(struct i 
    2121                } 
    2222                break; 
  • branches/backfire/package/mac80211/patches/542-mac80211_enable_iftype_wds_aggregation.patch

    r26741 r26763  
    3434--- a/net/mac80211/rx.c 
    3535+++ b/net/mac80211/rx.c 
    36 @@ -2130,7 +2130,8 @@ ieee80211_rx_h_action(struct ieee80211_r 
     36@@ -2132,7 +2132,8 @@ ieee80211_rx_h_action(struct ieee80211_r 
    3737                 */ 
    3838                if (sdata->vif.type != NL80211_IFTYPE_STATION && 
     
    4444  
    4545                /* verify action_code is present */ 
    46 @@ -2715,13 +2716,16 @@ static int prepare_for_handlers(struct i 
     46@@ -2717,13 +2718,16 @@ static int prepare_for_handlers(struct i 
    4747                } 
    4848                break; 
  • branches/backfire/package/mac80211/patches/600-rt2x00-disable-pci-code-if-CONFIG_PCI-not-defined.patch

    r26536 r26763  
    11--- a/drivers/net/wireless/rt2x00/rt2x00pci.c 
    22+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c 
    3 @@ -199,6 +199,7 @@ void rt2x00pci_uninitialize(struct rt2x0 
     3@@ -208,6 +208,7 @@ void rt2x00pci_uninitialize(struct rt2x0 
    44 } 
    55 EXPORT_SYMBOL_GPL(rt2x00pci_uninitialize); 
     
    99  * PCI driver handlers. 
    1010  */ 
    11 @@ -375,6 +376,7 @@ int rt2x00pci_resume(struct pci_dev *pci 
     11@@ -383,6 +384,7 @@ int rt2x00pci_resume(struct pci_dev *pci 
    1212 } 
    1313 EXPORT_SYMBOL_GPL(rt2x00pci_resume); 
  • branches/backfire/package/mac80211/patches/610-set_pci_mwi.patch

    r26536 r26763  
    11--- a/drivers/net/wireless/rt2x00/rt2x00pci.c 
    22+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c 
    3 @@ -264,8 +264,10 @@ int rt2x00pci_probe(struct pci_dev *pci_ 
     3@@ -272,8 +272,10 @@ int rt2x00pci_probe(struct pci_dev *pci_ 
    44  
    55        pci_set_master(pci_dev); 
  • branches/backfire/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch

    r26370 r26763  
    11--- a/drivers/net/wireless/mwl8k.c 
    22+++ b/drivers/net/wireless/mwl8k.c 
    3 @@ -5111,6 +5111,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw") 
     3@@ -5165,6 +5165,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw") 
    44 MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API)); 
    55  
  • branches/backfire/package/mac80211/patches/810-b43_no_pio.patch

    r24678 r26763  
    66 b43-y                          += dma.o 
    77-b43-y                          += pio.o 
    8 +# b43-y                                += pio.o 
     8+b43-$(CONFIG_B43_PIO)          += pio.o 
    99 b43-y                          += rfkill.o 
    1010 b43-$(CONFIG_B43_LEDS)         += leds.o 
     
    1616                        b43err(dev->wl, "This device does not support DMA " 
    1717                               "on your system. It will now be switched to PIO.\n"); 
    18 +#if 0 
     18+#ifdef CONFIG_B43_PIO 
    1919                        /* Fall back to PIO transfers if we get fatal DMA errors! */ 
    2020                        dev->use_pio = 1; 
     
    2626--- a/drivers/net/wireless/b43/pio.h 
    2727+++ b/drivers/net/wireless/b43/pio.h 
    28 @@ -151,15 +151,34 @@ static inline void b43_piorx_write32(str 
     28@@ -150,7 +150,7 @@ static inline void b43_piorx_write32(str 
     29        b43_write32(q->dev, q->mmio_base + offset, value); 
    2930 } 
    3031  
     32- 
     33+#ifdef CONFIG_B43_PIO 
     34 int b43_pio_init(struct b43_wldev *dev); 
     35 void b43_pio_free(struct b43_wldev *dev); 
    3136  
    32 -int b43_pio_init(struct b43_wldev *dev); 
    33 -void b43_pio_free(struct b43_wldev *dev); 
     37@@ -161,5 +161,37 @@ void b43_pio_rx(struct b43_pio_rxqueue * 
     38  
     39 void b43_pio_tx_suspend(struct b43_wldev *dev); 
     40 void b43_pio_tx_resume(struct b43_wldev *dev); 
     41+#else 
    3442+static inline int b43_pio_init(struct b43_wldev *dev) 
    3543+{ 
     
    4553+       return 0; 
    4654+} 
    47   
    48 -int b43_pio_tx(struct b43_wldev *dev, struct sk_buff *skb); 
    49 -void b43_pio_handle_txstatus(struct b43_wldev *dev, 
    50 -                            const struct b43_txstatus *status); 
    51 -void b43_pio_rx(struct b43_pio_rxqueue *q); 
     55+ 
    5256+static inline void b43_pio_handle_txstatus(struct b43_wldev *dev, 
    5357+                                          const struct b43_txstatus *status) 
     
    5862+{ 
    5963+} 
    60   
    61 -void b43_pio_tx_suspend(struct b43_wldev *dev); 
    62 -void b43_pio_tx_resume(struct b43_wldev *dev); 
     64+ 
    6365+static inline void b43_pio_tx_suspend(struct b43_wldev *dev) 
    6466+{ 
    6567+} 
     68+ 
    6669+static inline void b43_pio_tx_resume(struct b43_wldev *dev) 
    6770+{ 
    6871+} 
     72+#endif /* CONFIG_B43_PIO */ 
    6973  
    7074 #endif /* B43_PIO_H_ */ 
Note: See TracChangeset for help on using the changeset viewer.