Changeset 37266


Ignore:
Timestamp:
2013-07-12T10:19:04+02:00 (5 years ago)
Author:
nbd
Message:

mac80211: backport latest version from trunk (as of r37265)

Signed-off-by: Felix Fietkau <nbd@…>

Location:
branches/attitude_adjustment
Files:
12 added
37 deleted
54 edited
2 moved

Legend:

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

    r36470 r37266  
    1111PKG_NAME:=mac80211 
    1212 
    13 PKG_VERSION:=2013-02-22 
     13PKG_VERSION:=2013-06-27 
    1414PKG_RELEASE:=1 
    1515PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources 
    16 PKG_MD5SUM:=de1a03ca1f72748d4523672c8facbf7e 
    17  
    18 PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2 
     16PKG_BACKPORT_VERSION:=.1 
     17PKG_MD5SUM:=73bd220c64c5c6fdc22b3bb7f180644f 
     18 
     19PKG_SOURCE:=compat-wireless-$(PKG_VERSION)$(PKG_BACKPORT_VERSION).tar.bz2 
    1920PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION) 
    2021PKG_BUILD_PARALLEL:=1 
     
    197198endef 
    198199 
    199 NEED_RT2X00_LIB_CRYPTO:=y 
    200 NEED_RT2X00_LIB_FIRMWARE:=y 
    201 NEED_RT2X00_LIB_EEPROM:=y 
    202 NEED_RT2X00_LIB_HT:=y 
    203 NEED_RT2X00_LIB_LEDS:=y 
    204  
    205200define KernelPackage/rt2x00/Default 
    206201  $(call KernelPackage/mac80211/Default) 
     
    213208  TITLE+= (LIB) 
    214209  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rt2x00/rt2x00lib.ko 
    215   AUTOLOAD:=$(call AutoLoad,25,rt2x00lib) 
     210  AUTOLOAD:=$(call AutoLoad,24,rt2x00lib) 
    216211  MENU:=1 
    217212endef 
     
    236231endef 
    237232 
     233define KernelPackage/rt2x00-mmio 
     234$(call KernelPackage/rt2x00/Default) 
     235  DEPENDS+= @(PCI_SUPPORT||TARGET_ramips) +kmod-rt2x00-lib +kmod-eeprom-93cx6 
     236  TITLE+= (MMIO) 
     237  FILES:= $(PKG_BUILD_DIR)/drivers/net/wireless/rt2x00/rt2x00mmio.ko 
     238  AUTOLOAD:=$(call AutoLoad,25,rt2x00mmio) 
     239endef 
     240 
    238241define KernelPackage/rt2x00-pci 
    239242$(call KernelPackage/rt2x00/Default) 
    240   DEPENDS+= @(PCI_SUPPORT||TARGET_ramips) +kmod-rt2x00-lib +kmod-eeprom-93cx6 
     243  DEPENDS+= @PCI_SUPPORT +kmod-rt2x00-mmio +kmod-rt2x00-lib 
    241244  TITLE+= (PCI) 
    242   FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rt2x00/rt2x00pci.ko 
     245  FILES:= $(PKG_BUILD_DIR)/drivers/net/wireless/rt2x00/rt2x00pci.ko 
    243246  AUTOLOAD:=$(call AutoLoad,26,rt2x00pci) 
    244247endef 
     
    254257define KernelPackage/rt2x00-soc 
    255258$(call KernelPackage/rt2x00/Default) 
    256   DEPENDS+= @TARGET_ramips +kmod-rt2x00-lib 
     259  DEPENDS+= @TARGET_ramips @!TARGET_ramips_mt7620a @!TARGET_ramips_rt3883 +kmod-rt2x00-mmio +kmod-rt2x00-lib 
    257260  TITLE+= (SoC) 
    258261  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rt2x00/rt2x00soc.ko 
     
    310313define KernelPackage/rt2800-pci 
    311314$(call KernelPackage/rt2x00/Default) 
    312   DEPENDS+= @(PCI_SUPPORT||TARGET_ramips) +kmod-rt2x00-pci +kmod-rt2800-lib +kmod-lib-crc-ccitt +TARGET_ramips:kmod-rt2x00-soc 
     315  DEPENDS+= @(PCI_SUPPORT||TARGET_ramips) +PCI_SUPPORT:kmod-rt2x00-pci +kmod-rt2800-lib +kmod-lib-crc-ccitt +TARGET_ramips:kmod-rt2x00-soc 
    313316  TITLE+= (RT2860 PCI) 
    314317  FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/rt2x00/rt2800pci.ko 
     
    511514define KernelPackage/libertas-sd 
    512515  $(call KernelPackage/mac80211/Default) 
    513   DEPENDS+= +kmod-cfg80211 +kmod-lib80211 +@DRIVER_WEXT_SUPPORT 
     516  DEPENDS+= +kmod-cfg80211 +kmod-lib80211 +kmod-mmc +@DRIVER_WEXT_SUPPORT 
    514517  TITLE:=Marvell 88W8686 Wireless Driver 
    515518  FILES:= \ 
     
    11711174endef 
    11721175 
    1173 BUILDFLAGS:= \ 
    1174         -I$(PKG_BUILD_DIR)/include \ 
    1175         -DCONFIG_CFG80211_INTERNAL_REGDB=y \ 
    1176         $(foreach opt,$(CONFOPTS),-DCONFIG_$(opt)) \ 
    1177         $(if $(CONFIG_PCI),-DCONFIG_B43_PCI_AUTOSELECT -DCONFIG_B43_PCICORE_AUTOSELECT) \ 
    1178         $(if $(CONFIG_LEDS_TRIGGERS), -DCONFIG_MAC80211_LEDS -DCONFIG_LEDS_TRIGGERS -DCONFIG_B43_LEDS -DCONFIG_B43LEGACY_LEDS) \ 
    1179         -DCONFIG_B43_HWRNG -DCONFIG_B43LEGACY_HWRNG \ 
    1180         $(if $(CONFIG_PCI),-DCONFIG_ATH9K_PCI) \ 
    1181         $(if $(CONFIG_TARGET_ar71xx),-DCONFIG_ATH9K_AHB) \ 
    1182         $(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS), -DCONFIG_CFG80211_DEBUGFS -DCONFIG_MAC80211_DEBUGFS -DCONFIG_ATH9K_DEBUGFS -DCONFIG_CARL9170_DEBUGFS -DCONFIG_ATH9K_HTC_DEBUGFS -DCONFIG_ATH5K_DEBUG) \ 
    1183         $(if $(CONFIG_PACKAGE_MAC80211_MESH),-DCONFIG_MAC80211_MESH) \ 
    1184         $(if $(CONFIG_PACKAGE_ATH_DEBUG),-DCONFIG_ATH_DEBUG -DCONFIG_ATH9K_PKTLOG) \ 
    1185         -D__CONFIG_MAC80211_RC_DEFAULT=minstrel \ 
    1186         -DCONFIG_MAC80211_RC_MINSTREL_HT \ 
    1187         $(if $(CONFIG_ATH_USER_REGD),-DATH_USER_REGD=1) \ 
    1188         $(if $(CONFIG_PACKAGE_B43_DEBUG),-DCONFIG_B43_DEBUG) \ 
    1189         $(if $(CONFIG_PACKAGE_B43_PIO),-DCONFIG_B43_PIO) \ 
    1190         $(if $(CONFIG_PACKAGE_B43_PIO),-DCONFIG_B43_BCMA_PIO) \ 
    1191         $(if $(CONFIG_PACKAGE_B43_PHY_N),-DCONFIG_B43_PHY_N) \ 
    1192         $(if $(CONFIG_PACKAGE_B43_PHY_HT),-DCONFIG_B43_PHY_HT) \ 
    1193         $(if $(CONFIG_PACKAGE_B43_PHY_LCN),-DCONFIG_B43_PHY_LCN) \ 
    1194         -DCONFIG_B43_BCMA -DCONFIG_B43_BCMA_EXTRA \ 
    1195         -DCONFIG_B43_SSB \ 
    1196         $(if $(CONFIG_PACKAGE_RT2X00_LIB_DEBUGFS),-DCONFIG_RT2X00_LIB_DEBUGFS) \ 
    1197         $(if $(CONFIG_PACKAGE_RT2X00_DEBUG),-DCONFIG_RT2X00_DEBUG) \ 
    1198         $(if $(NEED_RT2X00_LIB_HT),-DCONFIG_RT2X00_LIB_HT) \ 
    1199         $(if $(NEED_RT2X00_LIB_CRYPTO),-DCONFIG_RT2X00_LIB_CRYPTO) \ 
    1200         $(if $(NEED_RT2X00_LIB_FIRMWARE),-DCONFIG_RT2X00_LIB_FIRMWARE) \ 
    1201         $(if $(NEED_RT2X00_LIB_EEPROM),-DCONFIG_RT2X00_LIB_EEPROM) \ 
    1202         $(if $(NEED_RT2X00_LIB_LEDS),-DCONFIG_RT2X00_LIB_LEDS) \ 
    1203         $(if $(CONFIG_PACKAGE_kmod-rt2x00-pci),-DCONFIG_RT2X00_LIB_PCI) \ 
    1204         $(if $(CONFIG_PACKAGE_kmod-rt2x00-usb),-DCONFIG_RT2X00_LIB_USB) \ 
    1205         $(if $(CONFIG_PACKAGE_kmod-rt2x00-usb),-DCONFIG_RT2800USB_RT53XX) \ 
    1206         $(if $(CONFIG_PACKAGE_kmod-rt2x00-soc),-DCONFIG_RT2X00_LIB_SOC) \ 
    1207         $(if $(CONFIG_TARGET_atheros),-DCONFIG_ATH5K_AHB,-DCONFIG_ATH5K_PCI) \ 
    1208         $(if $(CONFIG_PACKAGE_kmod-iwl3945),-DCONFIG_IWL3945) \ 
    1209         $(if $(CONFIG_PACKAGE_kmod-iwl4965),-DCONFIG_COMPAT_IWL4965) \ 
    1210         $(if $(CONFIG_PACKAGE_kmod-wl12xx),-DCONFIG_WL12XX -DCONFIG_COMPAT_WL12XX_SDIO) \ 
    1211         $(if $(CONFIG_PACKAGE_BRCM80211_DEBUG),-DCONFIG_BRCMDBG) \ 
    1212         $(if $(CONFIG_PACKAGE_kmod-brcmfmac),-DCONFIG_BRCMFMAC_USB) 
    1213  
    1214 MAKE_OPTS:= \ 
     1176config_package=$(if $(CONFIG_PACKAGE_kmod-$(1)),m) 
     1177 
     1178config-y:= \ 
     1179        WLAN \ 
     1180        NL80211_TESTMODE \ 
     1181        CFG80211_WEXT \ 
     1182        CFG80211_INTERNAL_REGDB \ 
     1183        MAC80211_RC_MINSTREL \ 
     1184        MAC80211_RC_MINSTREL_HT \ 
     1185        MAC80211_RC_DEFAULT_MINSTREL \ 
     1186 
     1187config-$(call config_package,cfg80211) += CFG80211 
     1188 
     1189config-$(call config_package,mac80211) += MAC80211 
     1190config-$(CONFIG_PACKAGE_MAC80211_MESH) += MAC80211_MESH 
     1191ifdef CONFIG_PACKAGE_MAC80211_DEBUGFS 
     1192  config-y += \ 
     1193        CFG80211_DEBUGFS \ 
     1194        MAC80211_DEBUGFS \ 
     1195        ATH9K_DEBUGFS \ 
     1196        ATH9K_HTC_DEBUGFS \ 
     1197        CARL9170_DEBUGFS \ 
     1198        ATH5K_DEBUG 
     1199endif 
     1200 
     1201config-$(call config_package,lib80211) += LIB80211 LIB80211_CRYPT_WEP LIB80211_CRYPT_CCMP LIB80211_CRYPT_TKIP 
     1202 
     1203config-$(call config_package,ath) += ATH_CARDS ATH_COMMON 
     1204config-$(CONFIG_PACKAGE_ATH_DEBUG) += ATH_DEBUG 
     1205 
     1206config-$(call config_package,ath9k) += ATH9K 
     1207config-$(call config_package,ath9k-common) += ATH9K_COMMON 
     1208config-$(CONFIG_TARGET_ar71xx) += ATH9K_AHB 
     1209config-$(CONFIG_PCI) += ATH9K_PCI 
     1210config-$(CONFIG_ATH_USER_REGD) += ATH_USER_REGD 
     1211 
     1212config-$(call config_package,ath9k-htc) += ATH9K_HTC 
     1213 
     1214config-$(call config_package,ath5k) += ATH5K 
     1215ifdef CONFIG_TARGET_atheros 
     1216  config-y += ATH5K_AHB 
     1217else 
     1218  config-y += ATH5K_PCI 
     1219endif 
     1220 
     1221config-$(call config_package,carl9170) += CARL9170 
     1222 
     1223config-$(call config_package,b43) += B43 
     1224config-y += B43_SSB B43_BCMA B43_BCMA_EXTRA 
     1225config-$(CONFIG_PACKAGE_B43_PHY_N) += B43_PHY_N 
     1226config-$(CONFIG_PACKAGE_B43_PHY_LP) += B43_PHY_LP 
     1227config-$(CONFIG_PACKAGE_B43_PHY_HT) += B43_PHY_HT 
     1228config-$(CONFIG_PACKAGE_B43_PIO) += B43_PIO 
     1229config-$(CONFIG_PACKAGE_B43_DEBUG) += B43_DEBUG 
     1230 
     1231config-$(call config_package,b43legacy) += B43LEGACY 
     1232config-y += B43LEGACY_DMA_MODE 
     1233 
     1234config-$(call config_package,brcmutil) += BRCMUTIL 
     1235config-$(call config_package,brcmsmac) += BRCMSMAC 
     1236config-$(call config_package,brcmfmac) += BRCMFMAC BRCMFMAC_USB 
     1237config-$(CONFIG_PACKAGE_BRCM80211_DEBUG) += BRCMDBG 
     1238 
     1239config-$(call config_package,mac80211-hwsim) += MAC80211_HWSIM 
     1240 
     1241config-$(call config_package,rt2x00-lib) += RT2X00 RT2X00_LIB 
     1242config-$(call config_package,rt2x00-pci) += RT2X00_LIB_PCI 
     1243config-$(call config_package,rt2x00-mmio) += RT2X00_LIB_MMIO 
     1244config-$(call config_package,rt2x00-usb) += RT2X00_LIB_USB 
     1245config-$(call config_package,rt2x00-soc) += RT2X00_LIB_SOC 
     1246config-$(CONFIG_PACKAGE_RT2X00_LIB_DEBUGFS) += RT2X00_LIB_DEBUGFS 
     1247config-$(CONFIG_PACKAGE_RT2X00_DEBUG) += RT2X00_DEBUG 
     1248 
     1249config-$(call config_package,rt2400-pci) += RT2400PCI 
     1250config-$(call config_package,rt2500-pci) += RT2500PCI 
     1251config-$(call config_package,rt2500-usb) += RT2500USB 
     1252config-$(call config_package,rt61-pci) += RT61PCI 
     1253config-$(call config_package,rt73-usb) += RT73USB 
     1254 
     1255config-$(call config_package,rt2800-lib) += RT2800_LIB 
     1256config-y += RT2800PCI_RT33XX RT2800PCI_RT35XX RT2800PCI_RT53XX RT2800PCI_RT3290 
     1257 
     1258config-$(call config_package,rt2800-pci) += RT2800PCI 
     1259config-$(call config_package,rt2800-usb) += RT2800USB 
     1260 
     1261config-$(call config_package,iwl-legacy) += IWLEGACY 
     1262config-$(call config_package,iwl3945) += IWL3945 
     1263config-$(call config_package,iwl4965) += IWL4965 
     1264config-$(call config_package,iwlagn) += IWLWIFI 
     1265 
     1266config-$(call config_package,net-libipw) += LIBIPW 
     1267config-$(call config_package,net-ipw2100) += IPW2100 
     1268config-$(call config_package,net-ipw2200) += IPW2200 
     1269 
     1270config-$(call config_package,p54-common) += P54_COMMON 
     1271config-$(call config_package,p54-pci) += P54_PCI 
     1272config-$(call config_package,p54-usb) += P54_USB 
     1273config-$(call config_package,p54-spi) += P54_SPI 
     1274 
     1275config-$(call config_package,net-hermes) += HERMES 
     1276config-$(call config_package,net-hermes-pci) += PCI_HERMES 
     1277config-$(call config_package,net-hermes-plx) += PLX_HERMES 
     1278config-$(call config_package,net-hermes-pcmcia) += PCMCIA_HERMES 
     1279config-y += HERMES_PRISM 
     1280 
     1281config-$(call config_package,adm8211) += ADM8211 
     1282config-$(call config_package,libertas-sd) += LIBERTAS LIBERTAS_SDIO 
     1283config-$(call config_package,libertas-usb) += LIBERTAS LIBERTAS_USB 
     1284config-$(call config_package,mwl8k) += MWL8K 
     1285config-$(call config_package,rtl8180) += RTL8180 
     1286config-$(call config_package,rtl8187) += RTL8187 
     1287config-$(call config_package,wl12xx) += WL_TI WLCORE WLCORE_SDIO WL12XX 
     1288config-$(call config_package,zd1211rw) += ZD1211RW 
     1289 
     1290config-$(CONFIG_LEDS_TRIGGERS) += MAC80211_LEDS B43_LEDS B43LEGACY_LEDS 
     1291 
     1292MAKE_OPTS:= -C "$(PKG_BUILD_DIR)" \ 
    12151293        CROSS_COMPILE="$(KERNEL_CROSS)" \ 
    12161294        ARCH="$(LINUX_KARCH)" \ 
    1217         EXTRA_CFLAGS="$(BUILDFLAGS) -Wno-undef" \ 
    1218         $(foreach opt,$(CONFOPTS),CONFIG_$(opt)=m) \ 
    1219         CONFIG_CFG80211_INTERNAL_REGDB=y \ 
    1220         CONFIG_CFG80211=$(if $(CONFIG_PACKAGE_kmod-cfg80211),m) \ 
    1221         CONFIG_MAC80211=$(if $(CONFIG_PACKAGE_kmod-mac80211),m) \ 
    1222         CONFIG_MAC80211_RC_MINSTREL=y \ 
    1223         CONFIG_MAC80211_MESH=$(CONFIG_PACKAGE_MAC80211_MESH) \ 
    1224         CONFIG_MAC80211_LEDS=$(CONFIG_LEDS_TRIGGERS) \ 
    1225         CONFIG_CFG80211_DEBUGFS=$(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),y) \ 
    1226         CONFIG_MAC80211_DEBUGFS=$(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),y) \ 
    1227         CONFIG_B43_PCMCIA=n CONFIG_B43_PIO=n \ 
    1228         CONFIG_B43_PCI_AUTOSELECT=$(if $(CONFIG_PCI),y) \ 
    1229         CONFIG_B43_PCICORE_AUTOSELECT=$(if $(CONFIG_PCI),y) \ 
    1230         CONFIG_B43LEGACY_LEDS=$(CONFIG_LEDS_TRIGGERS) \ 
    1231         CONFIG_B43_LEDS=$(CONFIG_LEDS_TRIGGERS) \ 
    1232         CONFIG_B43_HWRNG=$(if $(CONFIG_HW_RANDOM),y) \ 
    1233         CONFIG_B43LEGACY_HWRNG=$(if $(CONFIG_HW_RANDOM),y) \ 
    1234         CONFIG_B43=$(if $(CONFIG_PACKAGE_kmod-b43),m) \ 
    1235         CONFIG_B43LEGACY=$(if $(CONFIG_PACKAGE_kmod-b43legacy),m) \ 
    1236         CONFIG_B43_DEBUG=$(if $(CONFIG_PACKAGE_B43_DEBUG),y) \ 
    1237         CONFIG_B43_PIO=$(if $(CONFIG_PACKAGE_B43_PIO),y) \ 
    1238         CONFIG_B43_BCMA_PIO=$(if $(CONFIG_PACKAGE_B43_PIO),y) \ 
    1239         CONFIG_B43_PHY_N=$(if $(CONFIG_PACKAGE_B43_PHY_N),y) \ 
    1240         CONFIG_B43_PHY_HT=$(if $(CONFIG_PACKAGE_B43_PHY_HT),y) \ 
    1241         CONFIG_B43_PHY_LCN=$(if $(CONFIG_PACKAGE_B43_PHY_LCN),y) \ 
    1242         CONFIG_B43_BCMA=y \ 
    1243         CONFIG_B43_SSB=y \ 
    1244         CONFIG_ATH_CARDS=$(if $(CONFIG_PACKAGE_kmod-ath),m) \ 
    1245         CONFIG_ATH_COMMON=$(if $(CONFIG_PACKAGE_kmod-ath),m) \ 
    1246         CONFIG_ATH_DEBUG=$(if $(CONFIG_PACKAGE_ATH_DEBUG),y) \ 
    1247         CONFIG_ATH9K_PKTLOG=$(if $(CONFIG_PACKAGE_ATH_DEBUG),y) \ 
    1248         CONFIG_ATH5K=$(if $(CONFIG_PACKAGE_kmod-ath5k),m) \ 
    1249         CONFIG_ATH5K_PCI=$(if $(CONFIG_TARGET_atheros),,y) \ 
    1250         CONFIG_ATH5K_AHB=$(if $(CONFIG_TARGET_atheros),y) \ 
    1251         CONFIG_ATH5K_DEBUG=$(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),y) \ 
    1252         CONFIG_ATH9K=$(if $(CONFIG_PACKAGE_kmod-ath9k),m) \ 
    1253         CONFIG_ATH9K_PCI=$(CONFIG_PCI) \ 
    1254         CONFIG_ATH9K_AHB=$(if $(CONFIG_TARGET_ar71xx),y) \ 
    1255         CONFIG_ATH9K_HTC=$(if $(CONFIG_PACKAGE_kmod-ath9k-htc),m) \ 
    1256         CONFIG_ATH9K_HTC_DEBUGFS=$(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),y) \ 
    1257         CONFIG_ATH9K_HW=$(if $(CONFIG_PACKAGE_kmod-ath9k-common),m) \ 
    1258         CONFIG_ATH9K_COMMON=$(if $(CONFIG_PACKAGE_kmod-ath9k-common),m) \ 
    1259         CONFIG_ATH9K_DEBUGFS=$(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),y) \ 
    1260         CONFIG_AR5523= \ 
    1261         CONFIG_WIL6210= \ 
    1262         CONFIG_CARL9170=$(if $(CONFIG_PACKAGE_kmod-carl9170),m) \ 
    1263         CONFIG_CARL9170_DEBUGFS=$(if $(CONFIG_PACKAGE_MAC80211_DEBUGFS),y) \ 
    1264         CONFIG_COMPAT_ZD1211RW=$(if $(CONFIG_PACKAGE_kmod-zd1211rw),m) \ 
    1265         CONFIG_P54_COMMON=$(if $(CONFIG_PACKAGE_kmod-p54-common),m) \ 
    1266         CONFIG_P54_PCI=$(if $(CONFIG_PACKAGE_kmod-p54-pci),m) \ 
    1267         CONFIG_P54_USB=$(if $(CONFIG_PACKAGE_kmod-p54-usb),m) \ 
    1268         CONFIG_P54_SPI=$(if $(CONFIG_PACKAGE_kmod-p54-spi),m) \ 
    1269         CONFIG_P54_SPI_DEFAULT_EEPROM=n \ 
    1270         CONFIG_RT2X00=$(if $(CONFIG_PACKAGE_kmod-rt2x00-lib),m) \ 
    1271         CONFIG_RT2X00_LIB=$(if $(CONFIG_PACKAGE_kmod-rt2x00-lib),m) \ 
    1272         CONFIG_RT2X00_LIB_PCI=$(if $(CONFIG_PACKAGE_kmod-rt2x00-pci),m) \ 
    1273         CONFIG_RT2X00_LIB_USB=$(if $(CONFIG_PACKAGE_kmod-rt2x00-usb),m) \ 
    1274         CONFIG_RT2X00_LIB_SOC=$(if $(CONFIG_PACKAGE_kmod-rt2x00-soc),m) \ 
    1275         CONFIG_RT2X00_LIB_DEBUGFS=$(CONFIG_PACKAGE_RT2X00_LIB_DEBUGFS) \ 
    1276         CONFIG_RT2X00_LIB_CRYPTO=$(NEED_RT2X00_LIB_CRYPTO) \ 
    1277         CONFIG_RT2X00_LIB_FIRMWARE=$(NEED_RT2X00_LIB_FIRMWARE) \ 
    1278         CONFIG_RT2X00_LIB_EEPROM=$(NEED_RT2X00_LIB_EEPROM) \ 
    1279         CONFIG_RT2X00_LIB_HT=$(NEED_RT2X00_LIB_HT) \ 
    1280         CONFIG_RT2X00_LIB_LEDS=$(NEED_RT2X00_LIB_LEDS) \ 
    1281         CONFIG_RT2400PCI=$(if $(CONFIG_PACKAGE_kmod-rt2400-pci),m) \ 
    1282         CONFIG_RT2500PCI=$(if $(CONFIG_PACKAGE_kmod-rt2500-pci),m) \ 
    1283         CONFIG_RT2500USB=$(if $(CONFIG_PACKAGE_kmod-rt2500-usb),m) \ 
    1284         CONFIG_RT61PCI=$(if $(CONFIG_PACKAGE_kmod-rt61-pci),m) \ 
    1285         CONFIG_RT73USB=$(if $(CONFIG_PACKAGE_kmod-rt73-usb),m) \ 
    1286         CONFIG_RT2800_LIB=$(if $(CONFIG_PACKAGE_kmod-rt2800-lib),m) \ 
    1287         CONFIG_RT2800PCI=$(if $(CONFIG_PACKAGE_kmod-rt2800-pci),m) \ 
    1288         CONFIG_RT2800USB=$(if $(CONFIG_PACKAGE_kmod-rt2800-usb),m) \ 
    1289         CONFIG_RTL8180=$(if $(CONFIG_PACKAGE_kmod-rtl8180),m) \ 
    1290         CONFIG_RTL8187=$(if $(CONFIG_PACKAGE_kmod-rtl8187),m) \ 
    1291         CONFIG_RTL8192CE= \ 
    1292         CONFIG_RTLWIFI= \ 
    1293         CONFIG_MAC80211_HWSIM=$(if $(CONFIG_PACKAGE_kmod-mac80211-hwsim),m) \ 
    1294         CONFIG_PCMCIA= \ 
    1295         CONFIG_LIBIPW=$(if $(CONFIG_PACKAGE_kmod-net-libipw),m) \ 
    1296         CONFIG_LIBERTAS=$(if $(CONFIG_PACKAGE_kmod-libertas-sd)$(CONFIG_PACKAGE_kmod-libertas-usb),m) \ 
    1297         CONFIG_LIBERTAS_CS= \ 
    1298         CONFIG_LIBERTAS_SPI= \ 
    1299         CONFIG_COMPAT_LIBERTAS_SDIO=$(if $(CONFIG_PACKAGE_kmod-libertas-sd),m) \ 
    1300         CONFIG_LIBERTAS_THINFIRM= \ 
    1301         CONFIG_LIBERTAS_USB=$(if $(CONFIG_PACKAGE_kmod-libertas-usb),m) \ 
    1302         CONFIG_IPW2100=$(if $(CONFIG_PACKAGE_kmod-net-ipw2100),m) \ 
    1303         CONFIG_IPW2200=$(if $(CONFIG_PACKAGE_kmod-net-ipw2200),m) \ 
    1304         CONFIG_NL80211=y \ 
    1305         CONFIG_LIB80211=$(if $(CONFIG_PACKAGE_kmod-lib80211),m) \ 
    1306         CONFIG_LIB80211_CRYPT_WEP=$(if $(CONFIG_PACKAGE_kmod-lib80211),m) \ 
    1307         CONFIG_LIB80211_CRYPT_CCMP=$(if $(CONFIG_PACKAGE_kmod-lib80211),m) \ 
    1308         CONFIG_LIB80211_CRYPT_TKIP=$(if $(CONFIG_PACKAGE_kmod-lib80211),m) \ 
    1309         CONFIG_IWLWIFI=$(if $(CONFIG_PACKAGE_kmod-iwlagn),m) \ 
    1310         CONFIG_IWLEGACY=$(if $(CONFIG_PACKAGE_kmod-iwl-legacy),m) \ 
    1311         CONFIG_COMPAT_IWL4965=$(if $(CONFIG_PACKAGE_kmod-iwl4965),m) \ 
    1312         CONFIG_IWL3945=$(if $(CONFIG_PACKAGE_kmod-iwl3945),m) \ 
    1313         CONFIG_MWL8K=$(if $(CONFIG_PACKAGE_kmod-mwl8k),m) \ 
    1314         CONFIG_ATMEL= \ 
    1315         CONFIG_PCMCIA_ATMEL= \ 
    1316         CONFIG_ADM8211=$(if $(CONFIG_PACKAGE_kmod-adm8211),m) \ 
    1317         CONFIG_USB_NET_RNDIS_HOST= \ 
    1318         CONFIG_USB_NET_RNDIS_WLAN= \ 
    1319         CONFIG_USB_NET_CDCETHER= \ 
    1320         CONFIG_USB_USBNET= \ 
    1321         CONFIG_AT76C50X_USB= \ 
    1322         CONFIG_WL_TI=$(if $(CONFIG_PACKAGE_kmod-wl12xx),m) \ 
    1323         CONFIG_WLCORE=$(if $(CONFIG_PACKAGE_kmod-wl12xx),m) \ 
    1324         CONFIG_WL12XX=$(if $(CONFIG_PACKAGE_kmod-wl12xx),m) \ 
    1325         CONFIG_WLCORE_SDIO=$(if $(CONFIG_PACKAGE_kmod-wl12xx),m) \ 
    1326         CONFIG_EEPROM_93CX6= \ 
    1327         CONFIG_HERMES=$(if $(CONFIG_PACKAGE_kmod-net-hermes),m) \ 
    1328         CONFIG_HERMES_CACHE_FW_ON_INIT= \ 
    1329         CONFIG_PCI_HERMES=$(if $(CONFIG_PACKAGE_kmod-net-hermes-pci),m) \ 
    1330         CONFIG_PLX_HERMES=$(if $(CONFIG_PACKAGE_kmod-net-hermes-plx),m) \ 
    1331         CONFIG_PCMCIA_HERMES=$(if $(CONFIG_PACKAGE_kmod-net-hermes-pcmcia),m) \ 
    1332         CONFIG_HERMES_PRISM= \ 
    1333         CONFIG_APPLE_AIRPORT= \ 
    1334         CONFIG_TMD_HERMES= \ 
    1335         CONFIG_NORTEL_HERMES= \ 
    1336         CONFIG_PCMCIA_SPECTRUM= \ 
    1337         CONFIG_ORINOCO_USB= \ 
    1338         CONFIG_IWM= \ 
    1339         CONFIG_MWIFIEX= \ 
    1340         CONFIG_ATH6KL= \ 
    1341         CONFIG_MAC80211_RC_MINSTREL_HT=y \ 
    1342         MADWIFI= \ 
    1343         CONFIG_BRCMUTIL=$(if $(CONFIG_PACKAGE_kmod-brcmutil),m) \ 
    1344         CONFIG_BRCMSMAC=$(if $(CONFIG_PACKAGE_kmod-brcmsmac),m) \ 
    1345         CONFIG_BRCMFMAC=$(if $(CONFIG_PACKAGE_kmod-brcmfmac),m) \ 
    1346         CONFIG_BRCMFMAC_USB=$(if $(CONFIG_PACKAGE_kmod-brcmfmac),y) \ 
    1347         CONFIG_BRCMDBG=$(if $(CONFIG_PACKAGE_BRCM80211_DEBUG),y) \ 
     1295        EXTRA_CFLAGS="-I$(PKG_BUILD_DIR)/include" \ 
    13481296        KLIB_BUILD="$(LINUX_DIR)" \ 
    13491297        MODPROBE=true \ 
     
    13521300        KBUILD_LDFLAGS_MODULE_PREREQ= 
    13531301 
    1354 ifeq ($(CONFIG_PACKAGE_kmod-libertas-sd)$(CONFIG_PACKAGE_kmod-libertas-usb)$(CONFIG_PACKAGE_kmod-rt2x00-lib),) 
    1355   MAKE_OPTS += CONFIG_COMPAT_KFIFO= 
    1356 endif 
    1357  
    1358 DISABLE_CONFIG = \ 
    1359         COMPAT_BLUETOOTH.* \ 
    1360         COMPAT_CORDIC \ 
    1361         COMPAT_CRC8 \ 
    1362         COMPAT_MDIO \ 
    1363         COMPAT_NETWORK_MODULES \ 
    1364         COMPAT_NET_USB_MODULES \ 
    1365         COMPAT_VAR_MODULES \ 
    1366         COMPAT_RFKILL \ 
    1367         COMPAT_RFKILL_.* \ 
    1368         COMPAT_STAGING \ 
    1369         \ 
    1370         B43_PCMCIA \ 
    1371         B43_SDIO \ 
    1372         BCMA.* \ 
    1373         COMPAT_ATH9K_RATE_CONTROL \ 
    1374         HID_GENERIC \ 
    1375         MAC80211_RC_PID \ 
    1376         PCMCIA \ 
    1377         RFKILL_BACKPORT.* \ 
    1378         SSB \ 
    1379         SSB_SDIOHOST \ 
    1380         \ 
    1381         ATH5K_PCI \ 
    1382         ATH9K_BTCOEX_SUPPORT \ 
    1383         B43_PHY_N \ 
    1384         B43_PHY_HT \ 
    1385         B43_BCMA.* \ 
    1386         MAC80211_MESH \ 
    1387         RT2X00_LIB_PCI \ 
    1388         RT2X00_LIB_USB \ 
    1389         COMPAT_MWIFIEX 
    1390  
     1302define ConfigVars 
     1303$(subst $(space),,$(foreach opt,$(config-$(1)),CPTCFG_$(opt)=$(1) 
     1304)) 
     1305endef 
     1306 
     1307define mac80211_config 
     1308$(call ConfigVars,m)$(call ConfigVars,y) 
     1309endef 
     1310$(eval $(call shexport,mac80211_config)) 
    13911311 
    13921312define Build/Prepare 
     
    14141334        echo 'compat-wireless-$(PKG_VERSION)-$(PKG_RELEASE)-$(REVISION)' > $(PKG_BUILD_DIR)/compat_version 
    14151335        $(CP) ./files/regdb.txt $(PKG_BUILD_DIR)/net/wireless/db.txt 
    1416  
    1417         sed -i $(foreach config,$(DISABLE_CONFIG),-e 's,^\([    ]*export *CONFIG_$(config)=\),# \1,') $(PKG_BUILD_DIR)/config.mk 
    14181336endef 
    14191337 
     
    14211339 define Build/Compile/kmod 
    14221340        rm -rf $(PKG_BUILD_DIR)/modules 
    1423         +$(MAKE) $(PKG_JOBS) -C "$(PKG_BUILD_DIR)" $(MAKE_OPTS) modules 
     1341        +$(MAKE) $(PKG_JOBS) $(MAKE_OPTS) modules 
    14241342 endef 
    14251343endif 
     
    14321350 
    14331351define Build/Compile 
     1352        $(SH_FUNC) var2file "$(call shvar,mac80211_config)" $(PKG_BUILD_DIR)/.config 
     1353        $(MAKE) $(MAKE_OPTS) allnoconfig 
    14341354        $(call Build/Compile/kmod) 
    14351355endef 
     
    14381358        mkdir -p \ 
    14391359                $(1)/usr/include/mac80211 \ 
     1360                $(1)/usr/include/mac80211-backport \ 
    14401361                $(1)/usr/include/mac80211/ath \ 
    14411362                $(1)/usr/include/net/mac80211 
    14421363        $(CP) $(PKG_BUILD_DIR)/net/mac80211/*.h $(PKG_BUILD_DIR)/include/* $(1)/usr/include/mac80211/ 
     1364        $(CP) $(PKG_BUILD_DIR)/backport-include/* $(1)/usr/include/mac80211-backport/ 
    14431365        $(CP) $(PKG_BUILD_DIR)/net/mac80211/rate.h $(1)/usr/include/net/mac80211/ 
    14441366        $(CP) $(PKG_BUILD_DIR)/drivers/net/wireless/ath/*.h $(1)/usr/include/mac80211/ath/ 
     
    16691591$(eval $(call KernelPackage,p54-spi)) 
    16701592$(eval $(call KernelPackage,rt2x00-lib)) 
     1593$(eval $(call KernelPackage,rt2x00-mmio)) 
    16711594$(eval $(call KernelPackage,rt2x00-pci)) 
    16721595$(eval $(call KernelPackage,rt2x00-usb)) 
  • branches/attitude_adjustment/package/mac80211/files/lib/wifi/mac80211.sh

    r36470 r37266  
    412412                        # mac80211 may not support it or the driver might not yet 
    413413                        # for ap mode this is handled by hostapd 
    414                         [ -n "$fixed" -a -n "$channel" ] && iw dev "$ifname" set channel "$channel" 
     414                        config_get htmode "$device" htmode 
     415                        case "$htmode" in 
     416                                HT20|HT40+|HT40-) ;; 
     417                                *) htmode= ;; 
     418                        esac 
     419                        [ -n "$fixed" -a -n "$channel" ] && iw dev "$ifname" set channel "$channel" $htmode 
    415420                fi 
    416421 
     
    527532                                        ${keyspec:+keys $keyspec} 
    528533                        ;; 
     534                        mesh) 
     535                                mp_list="mesh_retry_timeout mesh_confirm_timeout mesh_holding_timeout mesh_max_peer_links 
     536                                        mesh_max_retries mesh_ttl mesh_element_ttl mesh_auto_open_plinks mesh_hwmp_max_preq_retries 
     537                                        mesh_path_refresh_time mesh_min_discovery_timeout mesh_hwmp_active_path_timeout 
     538                                        mesh_hwmp_preq_min_interval mesh_hwmp_net_diameter_traversal_time mesh_hwmp_rootmode 
     539                                        mesh_hwmp_rann_interval mesh_gate_announcements mesh_fwding mesh_sync_offset_max_neighor 
     540                                        mesh_rssi_threshold mesh_hwmp_active_path_to_root_timeout mesh_hwmp_root_interval 
     541                                        mesh_hwmp_confirmation_interval mesh_power_mode mesh_awake_window" 
     542                                for mp in $mp_list 
     543                                do 
     544                                        config_get mp_val "$vif" "$mp" "" 
     545                                        [ -n "$mp_val" ] && iw dev "$ifname" set mesh_param "$mp" "$mp_val" 
     546                                done 
     547                        ;; 
    529548                        sta) 
    530549                                if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then 
  • branches/attitude_adjustment/package/mac80211/patches/020-disable_tty_set_termios.patch

    r36470 r37266  
    11--- a/compat/compat-2.6.39.c 
    22+++ b/compat/compat-2.6.39.c 
    3 @@ -12,6 +12,7 @@ 
    4  #include <linux/tty.h> 
     3@@ -13,6 +13,7 @@ 
    54 #include <linux/sched.h> 
     5 #include <linux/module.h> 
    66  
    77+#ifdef CONFIG_COMPAT_BLUETOOTH 
     
    99 /* 
    1010  *             Termios Helper Methods 
    11 @@ -111,4 +112,4 @@ int tty_set_termios(struct tty_struct *t 
     11@@ -112,4 +113,4 @@ int tty_set_termios(struct tty_struct *t 
    1212 } 
    1313 EXPORT_SYMBOL_GPL(tty_set_termios); 
  • branches/attitude_adjustment/package/mac80211/patches/150-disable_addr_notifier.patch

    r36470 r37266  
    11--- a/net/mac80211/main.c 
    22+++ b/net/mac80211/main.c 
    3 @@ -313,7 +313,7 @@ void ieee80211_restart_hw(struct ieee802 
     3@@ -300,7 +300,7 @@ void ieee80211_restart_hw(struct ieee802 
    44 } 
    55 EXPORT_SYMBOL(ieee80211_restart_hw); 
     
    1010                                 unsigned long data, void *arg) 
    1111 { 
    12 @@ -372,7 +372,7 @@ static int ieee80211_ifa_changed(struct 
     12@@ -359,7 +359,7 @@ static int ieee80211_ifa_changed(struct  
    1313 } 
    1414 #endif 
     
    1919                                  unsigned long data, void *arg) 
    2020 { 
    21 @@ -1015,14 +1015,14 @@ int ieee80211_register_hw(struct ieee802 
     21@@ -990,14 +990,14 @@ int ieee80211_register_hw(struct ieee802 
    2222                goto fail_pm_qos; 
    2323        } 
     
    3636        result = register_inet6addr_notifier(&local->ifa6_notifier); 
    3737        if (result) 
    38 @@ -1034,13 +1034,13 @@ int ieee80211_register_hw(struct ieee802 
     38@@ -1006,13 +1006,13 @@ int ieee80211_register_hw(struct ieee802 
    3939  
    4040        return 0; 
     
    5353        pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY, 
    5454                               &local->network_latency_notifier); 
    55 @@ -1073,10 +1073,10 @@ void ieee80211_unregister_hw(struct ieee 
     55@@ -1045,10 +1045,10 @@ void ieee80211_unregister_hw(struct ieee 
    5656  
    5757        pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY, 
  • branches/attitude_adjustment/package/mac80211/patches/201-ath5k-WAR-for-AR71xx-PCI-bug.patch

    r32002 r37266  
    11--- a/drivers/net/wireless/ath/ath5k/initvals.c 
    22+++ b/drivers/net/wireless/ath/ath5k/initvals.c 
    3 @@ -65,8 +65,14 @@ static const struct ath5k_ini ar5210_ini 
     3@@ -62,8 +62,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 @@ -863,10 +863,18 @@ ath5k_hw_dma_init(struct ath5k_hw *ah) 
     20@@ -860,10 +860,18 @@ ath5k_hw_dma_init(struct ath5k_hw *ah) 
    2121         * guess we can tweak it and see how it goes ;-) 
    2222         */ 
  • branches/attitude_adjustment/package/mac80211/patches/300-pending_work.patch

    r36470 r37266  
    1 --- a/drivers/net/wireless/ath/ath9k/common.h 
    2 +++ b/drivers/net/wireless/ath/ath9k/common.h 
    3 @@ -27,7 +27,7 @@ 
    4  #define WME_MAX_BA              WME_BA_BMP_SIZE 
    5  #define ATH_TID_MAX_BUFS        (2 * WME_MAX_BA) 
    6   
    7 -#define ATH_RSSI_DUMMY_MARKER   0x127 
    8 +#define ATH_RSSI_DUMMY_MARKER   127 
    9  #define ATH_RSSI_LPF_LEN               10 
    10  #define RSSI_LPF_THRESHOLD             -20 
    11  #define ATH_RSSI_EP_MULTIPLIER     (1<<7) 
    12 --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c 
    13 +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c 
    14 @@ -1067,15 +1067,19 @@ static bool ath9k_rx_prepare(struct ath9 
    15   
    16         last_rssi = priv->rx.last_rssi; 
    17   
    18 -       if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER)) 
    19 -               rxbuf->rxstatus.rs_rssi = ATH_EP_RND(last_rssi, 
    20 -                                                    ATH_RSSI_EP_MULTIPLIER); 
    21 +       if (ieee80211_is_beacon(hdr->frame_control) && 
    22 +           !is_zero_ether_addr(common->curbssid) && 
    23 +           ether_addr_equal(hdr->addr3, common->curbssid)) { 
    24 +               s8 rssi = rxbuf->rxstatus.rs_rssi; 
    25   
    26 -       if (rxbuf->rxstatus.rs_rssi < 0) 
    27 -               rxbuf->rxstatus.rs_rssi = 0; 
    28 +               if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER)) 
    29 +                       rssi = ATH_EP_RND(last_rssi, ATH_RSSI_EP_MULTIPLIER); 
    30   
    31 -       if (ieee80211_is_beacon(fc)) 
    32 -               priv->ah->stats.avgbrssi = rxbuf->rxstatus.rs_rssi; 
    33 +               if (rssi < 0) 
    34 +                       rssi = 0; 
    35 + 
    36 +               priv->ah->stats.avgbrssi = rssi; 
    37 +       } 
    38   
    39         rx_status->mactime = be64_to_cpu(rxbuf->rxstatus.rs_tstamp); 
    40         rx_status->band = hw->conf.channel->band; 
    41 --- a/include/linux/ieee80211.h 
    42 +++ b/include/linux/ieee80211.h 
    43 @@ -185,7 +185,7 @@ struct ieee80211_hdr { 
    44         u8 addr3[6]; 
    45         __le16 seq_ctrl; 
    46         u8 addr4[6]; 
    47 -} __packed; 
    48 +} __packed __aligned(2); 
    49   
    50  struct ieee80211_hdr_3addr { 
    51         __le16 frame_control; 
    52 @@ -194,7 +194,7 @@ struct ieee80211_hdr_3addr { 
    53         u8 addr2[6]; 
    54         u8 addr3[6]; 
    55         __le16 seq_ctrl; 
    56 -} __packed; 
    57 +} __packed __aligned(2); 
    58   
    59  struct ieee80211_qos_hdr { 
    60         __le16 frame_control; 
    61 @@ -204,7 +204,7 @@ struct ieee80211_qos_hdr { 
    62         u8 addr3[6]; 
    63         __le16 seq_ctrl; 
    64         __le16 qos_ctrl; 
    65 -} __packed; 
    66 +} __packed __aligned(2); 
    67   
    68  /** 
    69   * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set 
    70 @@ -581,7 +581,7 @@ struct ieee80211s_hdr { 
    71         __le32 seqnum; 
    72         u8 eaddr1[6]; 
    73         u8 eaddr2[6]; 
    74 -} __packed; 
    75 +} __packed __aligned(2); 
    76   
    77  /* Mesh flags */ 
    78  #define MESH_FLAGS_AE_A4       0x1 
    79 @@ -875,7 +875,7 @@ struct ieee80211_mgmt { 
    80                         } u; 
    81                 } __packed action; 
    82         } u; 
    83 -} __packed; 
    84 +} __packed __aligned(2); 
    85   
    86  /* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */ 
    87  #define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127 
    88 @@ -906,20 +906,20 @@ struct ieee80211_rts { 
    89         __le16 duration; 
    90         u8 ra[6]; 
    91         u8 ta[6]; 
    92 -} __packed; 
    93 +} __packed __aligned(2); 
    94   
    95  struct ieee80211_cts { 
    96         __le16 frame_control; 
    97         __le16 duration; 
    98         u8 ra[6]; 
    99 -} __packed; 
    100 +} __packed __aligned(2); 
    101   
    102  struct ieee80211_pspoll { 
    103         __le16 frame_control; 
    104         __le16 aid; 
    105         u8 bssid[6]; 
    106         u8 ta[6]; 
    107 -} __packed; 
    108 +} __packed __aligned(2); 
    109   
    110  /* TDLS */ 
    111   
    1121--- a/net/mac80211/agg-rx.c 
    1132+++ b/net/mac80211/agg-rx.c 
     
    14332--- a/net/mac80211/debugfs_sta.c 
    14433+++ b/net/mac80211/debugfs_sta.c 
    145 @@ -65,11 +65,11 @@ static ssize_t sta_flags_read(struct fil 
     34@@ -66,11 +66,11 @@ static ssize_t sta_flags_read(struct fil 
    14635        test_sta_flag(sta, WLAN_STA_##flg) ? #flg "\n" : "" 
    14736  
     
    15948--- a/net/mac80211/iface.c 
    16049+++ b/net/mac80211/iface.c 
    161 @@ -78,7 +78,7 @@ void ieee80211_recalc_txpower(struct iee 
    162                 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_TXPOWER); 
    163  } 
    164   
    165 -static u32 ieee80211_idle_off(struct ieee80211_local *local) 
    166 +u32 ieee80211_idle_off(struct ieee80211_local *local) 
    167  { 
    168         if (!(local->hw.conf.flags & IEEE80211_CONF_IDLE)) 
    169                 return 0; 
    170 @@ -107,7 +107,7 @@ void ieee80211_recalc_idle(struct ieee80 
    171   
    172         lockdep_assert_held(&local->mtx); 
    173   
    174 -       active = !list_empty(&local->chanctx_list); 
    175 +       active = !list_empty(&local->chanctx_list) || local->monitors; 
    176   
    177         if (!local->ops->remain_on_channel) { 
    178                 list_for_each_entry(roc, &local->roc_list, list) { 
    179 @@ -436,7 +436,6 @@ int ieee80211_do_open(struct wireless_de 
     50@@ -463,7 +463,6 @@ int ieee80211_do_open(struct wireless_de 
    18051        struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); 
    18152        struct net_device *dev = wdev->netdev; 
     
    18556        int res; 
    18657        u32 hw_reconf_flags = 0; 
    187 @@ -541,6 +540,9 @@ int ieee80211_do_open(struct wireless_de 
    188   
    189                 ieee80211_adjust_monitor_flags(sdata, 1); 
    190                 ieee80211_configure_filter(local); 
    191 +               mutex_lock(&local->mtx); 
    192 +               ieee80211_recalc_idle(local); 
    193 +               mutex_unlock(&local->mtx); 
    194   
    195                 netif_carrier_on(dev); 
    196                 break; 
    197 @@ -595,30 +597,8 @@ int ieee80211_do_open(struct wireless_de 
     58@@ -629,30 +628,8 @@ int ieee80211_do_open(struct wireless_de 
    19859  
    19960        set_bit(SDATA_STATE_RUNNING, &sdata->state); 
     
    22788        /* 
    22889         * set_multicast_list will be invoked by the networking core 
    229 @@ -817,6 +797,9 @@ static void ieee80211_do_stop(struct iee 
    230   
    231                 ieee80211_adjust_monitor_flags(sdata, -1); 
    232                 ieee80211_configure_filter(local); 
    233 +               mutex_lock(&local->mtx); 
    234 +               ieee80211_recalc_idle(local); 
    235 +               mutex_unlock(&local->mtx); 
    236                 break; 
    237         case NL80211_IFTYPE_P2P_DEVICE: 
    238                 /* relies on synchronize_rcu() below */ 
    239 @@ -1022,6 +1005,72 @@ static void ieee80211_if_setup(struct ne 
     90@@ -1116,6 +1093,74 @@ static void ieee80211_if_setup(struct ne 
    24091        dev->destructor = free_netdev; 
    24192 } 
     
    253104+       u16 stype; 
    254105+       bool new = false; 
    255 +       enum ieee80211_band band = local->hw.conf.channel->band; 
    256 +       struct ieee80211_supported_band *sband = local->hw.wiphy->bands[band]; 
     106+       enum ieee80211_band band; 
     107+       struct ieee80211_supported_band *sband; 
    257108+ 
    258109+       rx_status = IEEE80211_SKB_RXCB(skb); 
     110+       band = rx_status->band; 
     111+       sband = local->hw.wiphy->bands[band]; 
    259112+       mgmt = (struct ieee80211_mgmt *) skb->data; 
    260113+       stype = le16_to_cpu(mgmt->frame_control) & IEEE80211_FCTL_STYPE; 
     
    268121+ 
    269122+       ieee802_11_parse_elems(mgmt->u.probe_resp.variable, 
    270 +                              skb->len - baselen, &elems); 
     123+                              skb->len - baselen, false, &elems); 
    271124+ 
    272125+       rates = ieee80211_sta_get_rates(local, &elems, band, NULL); 
     
    287140+ 
    288141+       sta->last_rx = jiffies; 
    289 +       sta->sta.supp_rates[local->hw.conf.channel->band] = rates; 
     142+       sta->sta.supp_rates[band] = rates; 
    290143+ 
    291144+       if (elems.ht_cap_elem) 
     
    310163 { 
    311164        struct ieee80211_sub_if_data *sdata = 
    312 @@ -1126,6 +1175,9 @@ static void ieee80211_iface_work(struct  
     165@@ -1220,6 +1265,9 @@ static void ieee80211_iface_work(struct  
    313166                                break; 
    314167                        ieee80211_mesh_rx_queued_mgmt(sdata, skb); 
     
    320173                        WARN(1, "frame for unexpected interface type"); 
    321174                        break; 
     175--- a/net/mac80211/rc80211_minstrel_ht.c 
     176+++ b/net/mac80211/rc80211_minstrel_ht.c 
     177@@ -804,10 +804,18 @@ minstrel_ht_get_rate(void *priv, struct  
     178  
     179        sample_group = &minstrel_mcs_groups[sample_idx / MCS_GROUP_RATES]; 
     180        info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; 
     181+       rate->count = 1; 
     182+ 
     183+       if (sample_idx / MCS_GROUP_RATES == MINSTREL_CCK_GROUP) { 
     184+               int idx = sample_idx % ARRAY_SIZE(mp->cck_rates); 
     185+               rate->idx = mp->cck_rates[idx]; 
     186+               rate->flags = 0; 
     187+               return; 
     188+       } 
     189+ 
     190        rate->idx = sample_idx % MCS_GROUP_RATES + 
     191                    (sample_group->streams - 1) * MCS_GROUP_RATES; 
     192        rate->flags = IEEE80211_TX_RC_MCS | sample_group->flags; 
     193-       rate->count = 1; 
     194 } 
     195  
     196 static void 
    322197--- a/net/mac80211/rx.c 
    323198+++ b/net/mac80211/rx.c 
    324 @@ -2365,6 +2365,7 @@ ieee80211_rx_h_action(struct ieee80211_r 
     199@@ -936,8 +936,14 @@ ieee80211_rx_h_check(struct ieee80211_rx 
     200        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; 
     201        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb); 
     202  
     203-       /* Drop duplicate 802.11 retransmissions (IEEE 802.11 Chap. 9.2.9) */ 
     204-       if (rx->sta && !is_multicast_ether_addr(hdr->addr1)) { 
     205+       /* 
     206+        * Drop duplicate 802.11 retransmissions 
     207+        * (IEEE 802.11-2012: 9.3.2.10 "Duplicate detection and recovery") 
     208+        */ 
     209+       if (rx->skb->len >= 24 && rx->sta && 
     210+           !ieee80211_is_ctl(hdr->frame_control) && 
     211+           !ieee80211_is_qos_nullfunc(hdr->frame_control) && 
     212+           !is_multicast_ether_addr(hdr->addr1)) { 
     213                if (unlikely(ieee80211_has_retry(hdr->frame_control) && 
     214                             rx->sta->last_seq_ctrl[rx->seqno_idx] == 
     215                             hdr->seq_ctrl)) { 
     216@@ -2369,6 +2375,7 @@ ieee80211_rx_h_action(struct ieee80211_r 
    325217                    sdata->vif.type != NL80211_IFTYPE_MESH_POINT && 
    326218                    sdata->vif.type != NL80211_IFTYPE_AP_VLAN && 
     
    330222                        break; 
    331223  
    332 @@ -2692,14 +2693,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ 
     224@@ -2720,14 +2727,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ 
    333225  
    334226        if (!ieee80211_vif_is_mesh(&sdata->vif) && 
     
    348240        case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP): 
    349241        case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP): 
    350 @@ -3028,10 +3030,16 @@ static int prepare_for_handlers(struct i 
     242@@ -3059,10 +3067,16 @@ static int prepare_for_handlers(struct i 
    351243                } 
    352244                break; 
     
    385277        WLAN_STA_MFP, 
    386278        WLAN_STA_BLOCK_BA, 
    387 --- a/net/mac80211/tx.c 
    388 +++ b/net/mac80211/tx.c 
    389 @@ -1231,34 +1231,40 @@ static bool ieee80211_tx_frags(struct ie 
    390                 if (local->queue_stop_reasons[q] || 
    391                     (!txpending && !skb_queue_empty(&local->pending[q]))) { 
    392                         if (unlikely(info->flags & 
    393 -                                       IEEE80211_TX_INTFL_OFFCHAN_TX_OK && 
    394 -                                    local->queue_stop_reasons[q] & 
    395 -                                       ~BIT(IEEE80211_QUEUE_STOP_REASON_OFFCHANNEL))) { 
    396 +                                    IEEE80211_TX_INTFL_OFFCHAN_TX_OK)) { 
    397 +                               if (local->queue_stop_reasons[q] & 
    398 +                                   ~BIT(IEEE80211_QUEUE_STOP_REASON_OFFCHANNEL)) { 
    399 +                                       /* 
    400 +                                        * Drop off-channel frames if queues 
    401 +                                        * are stopped for any reason other 
    402 +                                        * than off-channel operation. Never 
    403 +                                        * queue them. 
    404 +                                        */ 
    405 +                                       spin_unlock_irqrestore( 
    406 +                                               &local->queue_stop_reason_lock, 
    407 +                                               flags); 
    408 +                                       ieee80211_purge_tx_queue(&local->hw, 
    409 +                                                                skbs); 
    410 +                                       return true; 
    411 +                               } 
    412 +                       } else { 
    413 + 
    414                                 /* 
    415 -                                * Drop off-channel frames if queues are stopped 
    416 -                                * for any reason other than off-channel 
    417 -                                * operation. Never queue them. 
    418 +                                * Since queue is stopped, queue up frames for 
    419 +                                * later transmission from the tx-pending 
    420 +                                * tasklet when the queue is woken again. 
    421                                  */ 
    422 -                               spin_unlock_irqrestore( 
    423 -                                       &local->queue_stop_reason_lock, flags); 
    424 -                               ieee80211_purge_tx_queue(&local->hw, skbs); 
    425 -                               return true; 
    426 +                               if (txpending) 
    427 +                                       skb_queue_splice_init(skbs, 
    428 +                                                             &local->pending[q]); 
    429 +                               else 
    430 +                                       skb_queue_splice_tail_init(skbs, 
    431 +                                                                  &local->pending[q]); 
    432 + 
    433 +                               spin_unlock_irqrestore(&local->queue_stop_reason_lock, 
    434 +                                                      flags); 
    435 +                               return false; 
     279--- a/drivers/net/wireless/ath/ath9k/xmit.c 
     280+++ b/drivers/net/wireless/ath/ath9k/xmit.c 
     281@@ -146,6 +146,28 @@ static void ath_set_rates(struct ieee802 
     282                               ARRAY_SIZE(bf->rates)); 
     283 } 
     284  
     285+static void ath_txq_skb_done(struct ath_softc *sc, struct ath_txq *txq, 
     286+                            struct sk_buff *skb) 
     287+{ 
     288+       int q; 
     289+ 
     290+       q = skb_get_queue_mapping(skb); 
     291+       if (txq == sc->tx.uapsdq) 
     292+               txq = sc->tx.txq_map[q]; 
     293+ 
     294+       if (txq != sc->tx.txq_map[q]) 
     295+               return; 
     296+ 
     297+       if (WARN_ON(--txq->pending_frames < 0)) 
     298+               txq->pending_frames = 0; 
     299+ 
     300+       if (txq->stopped && 
     301+           txq->pending_frames < sc->tx.txq_max_pending[q]) { 
     302+               ieee80211_wake_queue(sc->hw, q); 
     303+               txq->stopped = false; 
     304+       } 
     305+} 
     306+ 
     307 static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid) 
     308 { 
     309        struct ath_txq *txq = tid->ac->txq; 
     310@@ -167,6 +189,7 @@ static void ath_tx_flush_tid(struct ath_ 
     311                if (!bf) { 
     312                        bf = ath_tx_setup_buffer(sc, txq, tid, skb); 
     313                        if (!bf) { 
     314+                               ath_txq_skb_done(sc, txq, skb); 
     315                                ieee80211_free_txskb(sc->hw, skb); 
     316                                continue; 
    436317                        } 
     318@@ -811,6 +834,7 @@ ath_tx_get_tid_subframe(struct ath_softc 
     319  
     320                if (!bf) { 
     321                        __skb_unlink(skb, &tid->buf_q); 
     322+                       ath_txq_skb_done(sc, txq, skb); 
     323                        ieee80211_free_txskb(sc->hw, skb); 
     324                        continue; 
     325                } 
     326@@ -1824,6 +1848,7 @@ static void ath_tx_send_ampdu(struct ath 
     327  
     328        bf = ath_tx_setup_buffer(sc, txq, tid, skb); 
     329        if (!bf) { 
     330+               ath_txq_skb_done(sc, txq, skb); 
     331                ieee80211_free_txskb(sc->hw, skb); 
     332                return; 
     333        } 
     334@@ -2090,6 +2115,7 @@ int ath_tx_start(struct ieee80211_hw *hw 
     335  
     336        bf = ath_tx_setup_buffer(sc, txq, tid, skb); 
     337        if (!bf) { 
     338+               ath_txq_skb_done(sc, txq, skb); 
     339                if (txctl->paprd) 
     340                        dev_kfree_skb_any(skb); 
     341                else 
     342@@ -2189,7 +2215,7 @@ static void ath_tx_complete(struct ath_s 
     343        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb); 
     344        struct ath_common *common = ath9k_hw_common(sc->sc_ah); 
     345        struct ieee80211_hdr * hdr = (struct ieee80211_hdr *)skb->data; 
     346-       int q, padpos, padsize; 
     347+       int padpos, padsize; 
     348        unsigned long flags; 
     349  
     350        ath_dbg(common, XMIT, "TX complete: skb: %p\n", skb); 
     351@@ -2225,21 +2251,7 @@ static void ath_tx_complete(struct ath_s 
     352        spin_unlock_irqrestore(&sc->sc_pm_lock, flags); 
     353  
     354        __skb_queue_tail(&txq->complete_q, skb); 
    437355- 
    438 -                       /* 
    439 -                        * Since queue is stopped, queue up frames for later 
    440 -                        * transmission from the tx-pending tasklet when the 
    441 -                        * queue is woken again. 
    442 -                        */ 
    443 -                       if (txpending) 
    444 -                               skb_queue_splice_init(skbs, &local->pending[q]); 
    445 -                       else 
    446 -                               skb_queue_splice_tail_init(skbs, 
    447 -                                                          &local->pending[q]); 
     356-       q = skb_get_queue_mapping(skb); 
     357-       if (txq == sc->tx.uapsdq) 
     358-               txq = sc->tx.txq_map[q]; 
    448359- 
    449 -                       spin_unlock_irqrestore(&local->queue_stop_reason_lock, 
    450 -                                              flags); 
    451 -                       return false; 
    452                 } 
    453                 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); 
    454   
    455 @@ -1848,9 +1854,24 @@ netdev_tx_t ieee80211_subif_start_xmit(s 
    456                 } 
    457   
    458                 if (!is_multicast_ether_addr(skb->data)) { 
    459 +                       struct sta_info *next_hop; 
    460 +                       bool mpp_lookup = true; 
    461 + 
    462                         mpath = mesh_path_lookup(sdata, skb->data); 
    463 -                       if (!mpath) 
    464 +                       if (mpath) { 
    465 +                               mpp_lookup = false; 
    466 +                               next_hop = rcu_dereference(mpath->next_hop); 
    467 +                               if (!next_hop || 
    468 +                                   !(mpath->flags & (MESH_PATH_ACTIVE | 
    469 +                                                     MESH_PATH_RESOLVING))) 
    470 +                                       mpp_lookup = true; 
    471 +                       } 
    472 + 
    473 +                       if (mpp_lookup) 
    474                                 mppath = mpp_path_lookup(sdata, skb->data); 
    475 + 
    476 +                       if (mppath && mpath) 
    477 +                               mesh_path_del(mpath->sdata, mpath->dst); 
    478                 } 
    479   
    480                 /* 
     360-       if (txq == sc->tx.txq_map[q]) { 
     361-               if (WARN_ON(--txq->pending_frames < 0)) 
     362-                       txq->pending_frames = 0; 
     363- 
     364-               if (txq->stopped && 
     365-                   txq->pending_frames < sc->tx.txq_max_pending[q]) { 
     366-                       ieee80211_wake_queue(sc->hw, q); 
     367-                       txq->stopped = false; 
     368-               } 
     369-       } 
     370+       ath_txq_skb_done(sc, txq, skb); 
     371 } 
     372  
     373 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf, 
     374--- a/drivers/net/wireless/ath/ath9k/main.c 
     375+++ b/drivers/net/wireless/ath/ath9k/main.c 
     376@@ -2094,7 +2094,7 @@ static void ath9k_wow_add_pattern(struct 
     377 { 
     378        struct ath_hw *ah = sc->sc_ah; 
     379        struct ath9k_wow_pattern *wow_pattern = NULL; 
     380-       struct cfg80211_wowlan_trig_pkt_pattern *patterns = wowlan->patterns; 
     381+       struct cfg80211_pkt_pattern *patterns = wowlan->patterns; 
     382        int mask_len; 
     383        s8 i = 0; 
     384  
     385--- a/drivers/net/wireless/mwifiex/cfg80211.c 
     386+++ b/drivers/net/wireless/mwifiex/cfg80211.c 
     387@@ -2298,8 +2298,7 @@ EXPORT_SYMBOL_GPL(mwifiex_del_virtual_in 
     388  
     389 #ifdef CONFIG_PM 
     390 static bool 
     391-mwifiex_is_pattern_supported(struct cfg80211_wowlan_trig_pkt_pattern *pat, 
     392-                            s8 *byte_seq) 
     393+mwifiex_is_pattern_supported(struct cfg80211_pkt_pattern *pat, s8 *byte_seq) 
     394 { 
     395        int j, k, valid_byte_cnt = 0; 
     396        bool dont_care_byte = false; 
     397--- a/drivers/net/wireless/ti/wlcore/main.c 
     398+++ b/drivers/net/wireless/ti/wlcore/main.c 
     399@@ -1315,7 +1315,7 @@ static struct sk_buff *wl12xx_alloc_dumm 
     400  
     401 #ifdef CONFIG_PM 
     402 static int 
     403-wl1271_validate_wowlan_pattern(struct cfg80211_wowlan_trig_pkt_pattern *p) 
     404+wl1271_validate_wowlan_pattern(struct cfg80211_pkt_pattern *p) 
     405 { 
     406        int num_fields = 0, in_field = 0, fields_size = 0; 
     407        int i, pattern_len = 0; 
     408@@ -1458,9 +1458,9 @@ void wl1271_rx_filter_flatten_fields(str 
     409  * Allocates an RX filter returned through f 
     410  * which needs to be freed using rx_filter_free() 
     411  */ 
     412-static int wl1271_convert_wowlan_pattern_to_rx_filter( 
     413-       struct cfg80211_wowlan_trig_pkt_pattern *p, 
     414-       struct wl12xx_rx_filter **f) 
     415+static int 
     416+wl1271_convert_wowlan_pattern_to_rx_filter(struct cfg80211_pkt_pattern *p, 
     417+                                          struct wl12xx_rx_filter **f) 
     418 { 
     419        int i, j, ret = 0; 
     420        struct wl12xx_rx_filter *filter; 
     421@@ -1562,7 +1562,7 @@ static int wl1271_configure_wowlan(struc 
     422  
     423        /* Translate WoWLAN patterns into filters */ 
     424        for (i = 0; i < wow->n_patterns; i++) { 
     425-               struct cfg80211_wowlan_trig_pkt_pattern *p; 
     426+               struct cfg80211_pkt_pattern *p; 
     427                struct wl12xx_rx_filter *filter = NULL; 
     428  
     429                p = &wow->patterns[i]; 
     430--- a/include/net/cfg80211.h 
     431+++ b/include/net/cfg80211.h 
     432@@ -1698,7 +1698,7 @@ struct cfg80211_pmksa { 
     433 }; 
     434  
     435 /** 
     436- * struct cfg80211_wowlan_trig_pkt_pattern - packet pattern 
     437+ * struct cfg80211_pkt_pattern - packet pattern 
     438  * @mask: bitmask where to match pattern and where to ignore bytes, 
     439  *     one bit per byte, in same format as nl80211 
     440  * @pattern: bytes to match where bitmask is 1 
     441@@ -1708,7 +1708,7 @@ struct cfg80211_pmksa { 
     442  * Internal note: @mask and @pattern are allocated in one chunk of 
     443  * memory, free @mask only! 
     444  */ 
     445-struct cfg80211_wowlan_trig_pkt_pattern { 
     446+struct cfg80211_pkt_pattern { 
     447        u8 *mask, *pattern; 
     448        int pattern_len; 
     449        int pkt_offset; 
     450@@ -1770,7 +1770,7 @@ struct cfg80211_wowlan { 
     451        bool any, disconnect, magic_pkt, gtk_rekey_failure, 
     452             eap_identity_req, four_way_handshake, 
     453             rfkill_release; 
     454-       struct cfg80211_wowlan_trig_pkt_pattern *patterns; 
     455+       struct cfg80211_pkt_pattern *patterns; 
     456        struct cfg80211_wowlan_tcp *tcp; 
     457        int n_patterns; 
     458 }; 
     459--- a/include/uapi/linux/nl80211.h 
     460+++ b/include/uapi/linux/nl80211.h 
     461@@ -3060,11 +3060,11 @@ enum nl80211_tx_power_setting { 
     462 }; 
     463  
     464 /** 
     465- * enum nl80211_wowlan_packet_pattern_attr - WoWLAN packet pattern attribute 
     466- * @__NL80211_WOWLAN_PKTPAT_INVALID: invalid number for nested attribute 
     467- * @NL80211_WOWLAN_PKTPAT_PATTERN: the pattern, values where the mask has 
     468+ * enum nl80211_packet_pattern_attr - packet pattern attribute 
     469+ * @__NL80211_PKTPAT_INVALID: invalid number for nested attribute 
     470+ * @NL80211_PKTPAT_PATTERN: the pattern, values where the mask has 
     471  *     a zero bit are ignored 
     472- * @NL80211_WOWLAN_PKTPAT_MASK: pattern mask, must be long enough to have 
     473+ * @NL80211_PKTPAT_MASK: pattern mask, must be long enough to have 
     474  *     a bit for each byte in the pattern. The lowest-order bit corresponds 
     475  *     to the first byte of the pattern, but the bytes of the pattern are 
     476  *     in a little-endian-like format, i.e. the 9th byte of the pattern 
     477@@ -3075,23 +3075,23 @@ enum nl80211_tx_power_setting { 
     478  *     Note that the pattern matching is done as though frames were not 
     479  *     802.11 frames but 802.3 frames, i.e. the frame is fully unpacked 
     480  *     first (including SNAP header unpacking) and then matched. 
     481- * @NL80211_WOWLAN_PKTPAT_OFFSET: packet offset, pattern is matched after 
     482+ * @NL80211_PKTPAT_OFFSET: packet offset, pattern is matched after 
     483  *     these fixed number of bytes of received packet 
     484- * @NUM_NL80211_WOWLAN_PKTPAT: number of attributes 
     485- * @MAX_NL80211_WOWLAN_PKTPAT: max attribute number 
     486+ * @NUM_NL80211_PKTPAT: number of attributes 
     487+ * @MAX_NL80211_PKTPAT: max attribute number 
     488  */ 
     489-enum nl80211_wowlan_packet_pattern_attr { 
     490-       __NL80211_WOWLAN_PKTPAT_INVALID, 
     491-       NL80211_WOWLAN_PKTPAT_MASK, 
     492-       NL80211_WOWLAN_PKTPAT_PATTERN, 
     493-       NL80211_WOWLAN_PKTPAT_OFFSET, 
     494+enum nl80211_packet_pattern_attr { 
     495+       __NL80211_PKTPAT_INVALID, 
     496+       NL80211_PKTPAT_MASK, 
     497+       NL80211_PKTPAT_PATTERN, 
     498+       NL80211_PKTPAT_OFFSET, 
     499  
     500-       NUM_NL80211_WOWLAN_PKTPAT, 
     501-       MAX_NL80211_WOWLAN_PKTPAT = NUM_NL80211_WOWLAN_PKTPAT - 1, 
     502+       NUM_NL80211_PKTPAT, 
     503+       MAX_NL80211_PKTPAT = NUM_NL80211_PKTPAT - 1, 
     504 }; 
     505  
     506 /** 
     507- * struct nl80211_wowlan_pattern_support - pattern support information 
     508+ * struct nl80211_pattern_support - packet pattern support information 
     509  * @max_patterns: maximum number of patterns supported 
     510  * @min_pattern_len: minimum length of each pattern 
     511  * @max_pattern_len: maximum length of each pattern 
     512@@ -3101,13 +3101,22 @@ enum nl80211_wowlan_packet_pattern_attr  
     513  * that is part of %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED in the 
     514  * capability information given by the kernel to userspace. 
     515  */ 
     516-struct nl80211_wowlan_pattern_support { 
     517+struct nl80211_pattern_support { 
     518        __u32 max_patterns; 
     519        __u32 min_pattern_len; 
     520        __u32 max_pattern_len; 
     521        __u32 max_pkt_offset; 
     522 } __attribute__((packed)); 
     523  
     524+/* only for backward compatibility */ 
     525+#define __NL80211_WOWLAN_PKTPAT_INVALID __NL80211_PKTPAT_INVALID 
     526+#define NL80211_WOWLAN_PKTPAT_MASK NL80211_PKTPAT_MASK 
     527+#define NL80211_WOWLAN_PKTPAT_PATTERN NL80211_PKTPAT_PATTERN 
     528+#define NL80211_WOWLAN_PKTPAT_OFFSET NL80211_PKTPAT_OFFSET 
     529+#define NUM_NL80211_WOWLAN_PKTPAT NUM_NL80211_PKTPAT 
     530+#define MAX_NL80211_WOWLAN_PKTPAT MAX_NL80211_PKTPAT 
     531+#define nl80211_wowlan_pattern_support nl80211_pattern_support 
     532+ 
     533 /** 
     534  * enum nl80211_wowlan_triggers - WoWLAN trigger definitions 
     535  * @__NL80211_WOWLAN_TRIG_INVALID: invalid number for nested attributes 
     536@@ -3127,7 +3136,7 @@ struct nl80211_wowlan_pattern_support { 
     537  *     pattern matching is done after the packet is converted to the MSDU. 
     538  * 
     539  *     In %NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED, it is a binary attribute 
     540- *     carrying a &struct nl80211_wowlan_pattern_support. 
     541+ *     carrying a &struct nl80211_pattern_support. 
     542  * 
     543  *     When reporting wakeup. it is a u32 attribute containing the 0-based 
     544  *     index of the pattern that caused the wakeup, in the patterns passed 
     545@@ -3284,7 +3293,7 @@ struct nl80211_wowlan_tcp_data_token_fea 
     546  * @NL80211_WOWLAN_TCP_WAKE_PAYLOAD: wake packet payload, for advertising a 
     547  *     u32 attribute holding the maximum length 
     548  * @NL80211_WOWLAN_TCP_WAKE_MASK: Wake packet payload mask, not used for 
     549- *     feature advertising. The mask works like @NL80211_WOWLAN_PKTPAT_MASK 
     550+ *     feature advertising. The mask works like @NL80211_PKTPAT_MASK 
     551  *     but on the TCP payload only. 
     552  * @NUM_NL80211_WOWLAN_TCP: number of TCP attributes 
     553  * @MAX_NL80211_WOWLAN_TCP: highest attribute number 
     554--- a/net/mac80211/mesh_ps.c 
     555+++ b/net/mac80211/mesh_ps.c 
     556@@ -229,6 +229,10 @@ void ieee80211_mps_sta_status_update(str 
     557        enum nl80211_mesh_power_mode pm; 
     558        bool do_buffer; 
     559  
     560+       /* For non-assoc STA, prevent buffering or frame transmission */ 
     561+       if (sta->sta_state < IEEE80211_STA_ASSOC) 
     562+               return; 
     563+ 
     564        /* 
     565         * use peer-specific power mode if peering is established and the 
     566         * peer's power mode is known 
    481567--- a/net/wireless/nl80211.c 
    482568+++ b/net/wireless/nl80211.c 
    483 @@ -554,16 +554,9 @@ static int nl80211_msg_put_channel(struc 
    484         if ((chan->flags & IEEE80211_CHAN_NO_IBSS) && 
    485             nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_IBSS)) 
    486                 goto nla_put_failure; 
    487 -       if (chan->flags & IEEE80211_CHAN_RADAR) { 
    488 -               u32 time = elapsed_jiffies_msecs(chan->dfs_state_entered); 
    489 -               if (nla_put_flag(msg, NL80211_FREQUENCY_ATTR_RADAR)) 
    490 -                       goto nla_put_failure; 
    491 -               if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_DFS_STATE, 
    492 -                               chan->dfs_state)) 
    493 -                       goto nla_put_failure; 
    494 -               if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_DFS_TIME, time)) 
    495 -                       goto nla_put_failure; 
    496 -       } 
    497 +       if ((chan->flags & IEEE80211_CHAN_RADAR) && 
    498 +           nla_put_flag(msg, NL80211_FREQUENCY_ATTR_RADAR)) 
    499 +               goto nla_put_failure; 
    500         if ((chan->flags & IEEE80211_CHAN_NO_HT40MINUS) && 
    501             nla_put_flag(msg, NL80211_FREQUENCY_ATTR_NO_HT40_MINUS)) 
    502                 goto nla_put_failure; 
    503 @@ -900,9 +893,6 @@ static int nl80211_put_iface_combination 
    504                     nla_put_u32(msg, NL80211_IFACE_COMB_MAXNUM, 
    505                                 c->max_interfaces)) 
    506                         goto nla_put_failure; 
    507 -               if (nla_put_u32(msg, NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS, 
    508 -                               c->radar_detect_widths)) 
    509 -                       goto nla_put_failure; 
    510   
    511                 nla_nest_end(msg, nl_combi); 
     569@@ -974,7 +974,7 @@ static int nl80211_send_wowlan(struct sk 
     570                return -ENOBUFS; 
     571  
     572        if (dev->wiphy.wowlan->n_patterns) { 
     573-               struct nl80211_wowlan_pattern_support pat = { 
     574+               struct nl80211_pattern_support pat = { 
     575                        .max_patterns = dev->wiphy.wowlan->n_patterns, 
     576                        .min_pattern_len = dev->wiphy.wowlan->pattern_min_len, 
     577                        .max_pattern_len = dev->wiphy.wowlan->pattern_max_len, 
     578@@ -1568,8 +1568,10 @@ static int nl80211_dump_wiphy(struct sk_ 
     579        rtnl_lock(); 
     580        if (!state) { 
     581                state = kzalloc(sizeof(*state), GFP_KERNEL); 
     582-               if (!state) 
     583+               if (!state) { 
     584+                       rtnl_unlock(); 
     585                        return -ENOMEM; 
     586+               } 
     587                state->filter_wiphy = -1; 
     588                ret = nl80211_dump_wiphy_parse(skb, cb, state); 
     589                if (ret) { 
     590@@ -6615,12 +6617,14 @@ EXPORT_SYMBOL(cfg80211_testmode_alloc_ev 
     591  
     592 void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp) 
     593 { 
     594+       struct cfg80211_registered_device *rdev = ((void **)skb->cb)[0]; 
     595        void *hdr = ((void **)skb->cb)[1]; 
     596        struct nlattr *data = ((void **)skb->cb)[2]; 
     597  
     598        nla_nest_end(skb, data); 
     599        genlmsg_end(skb, hdr); 
     600-       genlmsg_multicast(skb, 0, nl80211_testmode_mcgrp.id, gfp); 
     601+       genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), skb, 0, 
     602+                               nl80211_testmode_mcgrp.id, gfp); 
     603 } 
     604 EXPORT_SYMBOL(cfg80211_testmode_event); 
     605 #endif 
     606@@ -7593,12 +7597,11 @@ static int nl80211_send_wowlan_patterns( 
     607                if (!nl_pat) 
     608                        return -ENOBUFS; 
     609                pat_len = wowlan->patterns[i].pattern_len; 
     610-               if (nla_put(msg, NL80211_WOWLAN_PKTPAT_MASK, 
     611-                           DIV_ROUND_UP(pat_len, 8), 
     612+               if (nla_put(msg, NL80211_PKTPAT_MASK, DIV_ROUND_UP(pat_len, 8), 
     613                            wowlan->patterns[i].mask) || 
     614-                   nla_put(msg, NL80211_WOWLAN_PKTPAT_PATTERN, 
     615-                           pat_len, wowlan->patterns[i].pattern) || 
     616-                   nla_put_u32(msg, NL80211_WOWLAN_PKTPAT_OFFSET, 
     617+                   nla_put(msg, NL80211_PKTPAT_PATTERN, pat_len, 
     618+                           wowlan->patterns[i].pattern) || 
     619+                   nla_put_u32(msg, NL80211_PKTPAT_OFFSET, 
     620                                wowlan->patterns[i].pkt_offset)) 
     621                        return -ENOBUFS; 
     622                nla_nest_end(msg, nl_pat); 
     623@@ -7939,7 +7942,7 @@ static int nl80211_set_wowlan(struct sk_ 
     624                struct nlattr *pat; 
     625                int n_patterns = 0; 
     626                int rem, pat_len, mask_len, pkt_offset; 
     627-               struct nlattr *pat_tb[NUM_NL80211_WOWLAN_PKTPAT]; 
     628+               struct nlattr *pat_tb[NUM_NL80211_PKTPAT]; 
     629  
     630                nla_for_each_nested(pat, tb[NL80211_WOWLAN_TRIG_PKT_PATTERN], 
     631                                    rem) 
     632@@ -7958,26 +7961,25 @@ static int nl80211_set_wowlan(struct sk_ 
     633  
     634                nla_for_each_nested(pat, tb[NL80211_WOWLAN_TRIG_PKT_PATTERN], 
     635                                    rem) { 
     636-                       nla_parse(pat_tb, MAX_NL80211_WOWLAN_PKTPAT, 
     637-                                 nla_data(pat), nla_len(pat), NULL); 
     638+                       nla_parse(pat_tb, MAX_NL80211_PKTPAT, nla_data(pat), 
     639+                                 nla_len(pat), NULL); 
     640                        err = -EINVAL; 
     641-                       if (!pat_tb[NL80211_WOWLAN_PKTPAT_MASK] || 
     642-                           !pat_tb[NL80211_WOWLAN_PKTPAT_PATTERN]) 
     643+                       if (!pat_tb[NL80211_PKTPAT_MASK] || 
     644+                           !pat_tb[NL80211_PKTPAT_PATTERN]) 
     645                                goto error; 
     646-                       pat_len = nla_len(pat_tb[NL80211_WOWLAN_PKTPAT_PATTERN]); 
     647+                       pat_len = nla_len(pat_tb[NL80211_PKTPAT_PATTERN]); 
     648                        mask_len = DIV_ROUND_UP(pat_len, 8); 
     649-                       if (nla_len(pat_tb[NL80211_WOWLAN_PKTPAT_MASK]) != 
     650-                           mask_len) 
     651+                       if (nla_len(pat_tb[NL80211_PKTPAT_MASK]) != mask_len) 
     652                                goto error; 
     653                        if (pat_len > wowlan->pattern_max_len || 
     654                            pat_len < wowlan->pattern_min_len) 
     655                                goto error; 
     656  
     657-                       if (!pat_tb[NL80211_WOWLAN_PKTPAT_OFFSET]) 
     658+                       if (!pat_tb[NL80211_PKTPAT_OFFSET]) 
     659                                pkt_offset = 0; 
     660                        else 
     661                                pkt_offset = nla_get_u32( 
     662-                                       pat_tb[NL80211_WOWLAN_PKTPAT_OFFSET]); 
     663+                                       pat_tb[NL80211_PKTPAT_OFFSET]); 
     664                        if (pkt_offset > wowlan->max_pkt_offset) 
     665                                goto error; 
     666                        new_triggers.patterns[i].pkt_offset = pkt_offset; 
     667@@ -7991,11 +7993,11 @@ static int nl80211_set_wowlan(struct sk_ 
     668                        new_triggers.patterns[i].pattern = 
     669                                new_triggers.patterns[i].mask + mask_len; 
     670                        memcpy(new_triggers.patterns[i].mask, 
     671-                              nla_data(pat_tb[NL80211_WOWLAN_PKTPAT_MASK]), 
     672+                              nla_data(pat_tb[NL80211_PKTPAT_MASK]), 
     673                               mask_len); 
     674                        new_triggers.patterns[i].pattern_len = pat_len; 
     675                        memcpy(new_triggers.patterns[i].pattern, 
     676-                              nla_data(pat_tb[NL80211_WOWLAN_PKTPAT_PATTERN]), 
     677+                              nla_data(pat_tb[NL80211_PKTPAT_PATTERN]), 
     678                               pat_len); 
     679                        i++; 
     680                } 
     681@@ -10066,7 +10068,8 @@ void cfg80211_mgmt_tx_status(struct wire 
     682  
     683        genlmsg_end(msg, hdr); 
     684  
     685-       genlmsg_multicast(msg, 0, nl80211_mlme_mcgrp.id, gfp); 
     686+       genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), msg, 0, 
     687+                               nl80211_mlme_mcgrp.id, gfp); 
     688        return; 
     689  
     690  nla_put_failure: 
     691--- a/net/wireless/reg.c 
     692+++ b/net/wireless/reg.c 
     693@@ -2279,7 +2279,9 @@ void wiphy_regulatory_deregister(struct  
     694 static void reg_timeout_work(struct work_struct *work) 
     695 { 
     696        REG_DBG_PRINT("Timeout while waiting for CRDA to reply, restoring regulatory settings\n"); 
     697+       rtnl_lock(); 
     698        restore_regulatory_settings(true); 
     699+       rtnl_unlock(); 
     700 } 
     701  
     702 int __init regulatory_init(void) 
     703--- a/net/wireless/sme.c 
     704+++ b/net/wireless/sme.c 
     705@@ -34,8 +34,10 @@ struct cfg80211_conn { 
     706                CFG80211_CONN_SCAN_AGAIN, 
     707                CFG80211_CONN_AUTHENTICATE_NEXT, 
     708                CFG80211_CONN_AUTHENTICATING, 
     709+               CFG80211_CONN_AUTH_FAILED, 
     710                CFG80211_CONN_ASSOCIATE_NEXT, 
     711                CFG80211_CONN_ASSOCIATING, 
     712+               CFG80211_CONN_ASSOC_FAILED, 
     713                CFG80211_CONN_DEAUTH, 
     714                CFG80211_CONN_CONNECTED, 
     715        } state; 
     716@@ -164,6 +166,8 @@ static int cfg80211_conn_do_work(struct  
     717                                          NULL, 0, 
     718                                          params->key, params->key_len, 
     719                                          params->key_idx, NULL, 0); 
     720+       case CFG80211_CONN_AUTH_FAILED: 
     721+               return -ENOTCONN; 
     722        case CFG80211_CONN_ASSOCIATE_NEXT: 
     723                BUG_ON(!rdev->ops->assoc); 
     724                wdev->conn->state = CFG80211_CONN_ASSOCIATING; 
     725@@ -188,10 +192,17 @@ static int cfg80211_conn_do_work(struct  
     726                                             WLAN_REASON_DEAUTH_LEAVING, 
     727                                             false); 
     728                return err; 
     729+       case CFG80211_CONN_ASSOC_FAILED: 
     730+               cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, 
     731+                                    NULL, 0, 
     732+                                    WLAN_REASON_DEAUTH_LEAVING, false); 
     733+               return -ENOTCONN; 
     734        case CFG80211_CONN_DEAUTH: 
     735                cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, 
     736                                     NULL, 0, 
     737                                     WLAN_REASON_DEAUTH_LEAVING, false); 
     738+               /* free directly, disconnected event already sent */ 
     739+               cfg80211_sme_free(wdev); 
     740                return 0; 
     741        default: 
     742                return 0; 
     743@@ -371,7 +382,7 @@ bool cfg80211_sme_rx_assoc_resp(struct w 
     744                return true; 
    512745        } 
    513 @@ -914,48 +904,6 @@ nla_put_failure: 
    514         return -ENOBUFS; 
    515  } 
    516   
    517 -#ifdef CONFIG_PM 
    518 -static int nl80211_send_wowlan_tcp_caps(struct cfg80211_registered_device *rdev, 
    519 -                                       struct sk_buff *msg) 
    520 -{ 
    521 -       const struct wiphy_wowlan_tcp_support *tcp = rdev->wiphy.wowlan.tcp; 
    522 -       struct nlattr *nl_tcp; 
    523 - 
    524 -       if (!tcp) 
    525 -               return 0; 
    526 - 
    527 -       nl_tcp = nla_nest_start(msg, NL80211_WOWLAN_TRIG_TCP_CONNECTION); 
    528 -       if (!nl_tcp) 
    529 -               return -ENOBUFS; 
    530 - 
    531 -       if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, 
    532 -                       tcp->data_payload_max)) 
    533 -               return -ENOBUFS; 
    534 - 
    535 -       if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, 
    536 -                       tcp->data_payload_max)) 
    537 -               return -ENOBUFS; 
    538 - 
    539 -       if (tcp->seq && nla_put_flag(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ)) 
    540 -               return -ENOBUFS; 
    541 - 
    542 -       if (tcp->tok && nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN, 
    543 -                               sizeof(*tcp->tok), tcp->tok)) 
    544 -               return -ENOBUFS; 
    545 - 
    546 -       if (nla_put_u32(msg, NL80211_WOWLAN_TCP_DATA_INTERVAL, 
    547 -                       tcp->data_interval_max)) 
    548 -               return -ENOBUFS; 
    549 - 
    550 -       if (nla_put_u32(msg, NL80211_WOWLAN_TCP_WAKE_PAYLOAD, 
    551 -                       tcp->wake_payload_max)) 
    552 -               return -ENOBUFS; 
    553 - 
    554 -       nla_nest_end(msg, nl_tcp); 
    555 -       return 0; 
    556 -} 
    557 -#endif 
    558 - 
    559  static int nl80211_send_wiphy(struct sk_buff *msg, u32 portid, u32 seq, int flags, 
    560                               struct cfg80211_registered_device *dev) 
    561  { 
    562 @@ -1330,9 +1278,6 @@ static int nl80211_send_wiphy(struct sk_ 
    563                                 goto nla_put_failure; 
    564                 } 
    565   
    566 -               if (nl80211_send_wowlan_tcp_caps(dev, msg)) 
    567 -                       goto nla_put_failure; 
    568 - 
    569                 nla_nest_end(msg, nl_wowlan); 
    570         } 
    571  #endif 
    572 --- a/net/mac80211/cfg.c 
    573 +++ b/net/mac80211/cfg.c 
    574 @@ -3285,13 +3285,19 @@ static int ieee80211_cfg_get_channel(str 
    575                                      struct cfg80211_chan_def *chandef) 
    576  { 
    577         struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); 
    578 +       struct ieee80211_local *local = wiphy_priv(wiphy); 
    579         struct ieee80211_chanctx_conf *chanctx_conf; 
    580         int ret = -ENODATA; 
    581   
    582         rcu_read_lock(); 
    583 -       chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); 
    584 -       if (chanctx_conf) { 
    585 -               *chandef = chanctx_conf->def; 
    586 +       if (local->use_chanctx) { 
    587 +               chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); 
    588 +               if (chanctx_conf) { 
    589 +                       *chandef = chanctx_conf->def; 
    590 +                       ret = 0; 
    591 +               } 
    592 +       } else if (local->open_count == local->monitors) { 
    593 +               *chandef = local->monitor_chandef; 
    594                 ret = 0; 
    595         } 
    596         rcu_read_unlock(); 
    597 --- a/drivers/net/wireless/ath/ath9k/hw.c 
    598 +++ b/drivers/net/wireless/ath/ath9k/hw.c 
    599 @@ -1463,7 +1463,9 @@ static bool ath9k_hw_chip_reset(struct a 
    600                         reset_type = ATH9K_RESET_POWER_ON; 
    601                 else 
    602                         reset_type = ATH9K_RESET_COLD; 
    603 -       } 
    604 +       } else if (ah->chip_fullsleep || REG_READ(ah, AR_Q_TXE) || 
    605 +                  (REG_READ(ah, AR_CR) & AR_CR_RXE)) 
    606 +               reset_type = ATH9K_RESET_COLD; 
    607   
    608         if (!ath9k_hw_set_reset_reg(ah, reset_type)) 
    609                 return false; 
    610 @@ -1876,13 +1878,12 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    611   
    612         ENABLE_REGWRITE_BUFFER(ah); 
    613   
    614 -       REG_WRITE(ah, AR_STA_ID0, get_unaligned_le32(common->macaddr)); 
    615 -       REG_WRITE(ah, AR_STA_ID1, get_unaligned_le16(common->macaddr + 4) 
    616 -                 | macStaId1 
    617 +       REG_RMW(ah, AR_STA_ID1, macStaId1 
    618                   | AR_STA_ID1_RTS_USE_DEF 
    619                   | (ah->config. 
    620                      ack_6mb ? AR_STA_ID1_ACKCTS_6MB : 0) 
    621 -                 | ah->sta_id1_defaults); 
    622 +                 | ah->sta_id1_defaults, 
    623 +                 ~AR_STA_ID1_SADH_MASK); 
    624         ath_hw_setbssidmask(common); 
    625         REG_WRITE(ah, AR_DEF_ANTENNA, saveDefAntenna); 
    626         ath9k_hw_write_associd(ah); 
    627 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c 
    628 +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c 
    629 @@ -1236,8 +1236,10 @@ static inline void rt2x00lib_set_if_comb 
    630          */ 
    631         if_limit = &rt2x00dev->if_limits_ap; 
    632         if_limit->max = rt2x00dev->ops->max_ap_intf; 
    633 -       if_limit->types = BIT(NL80211_IFTYPE_AP) | 
    634 -                       BIT(NL80211_IFTYPE_MESH_POINT); 
    635 +       if_limit->types = BIT(NL80211_IFTYPE_AP); 
    636 +#ifdef CONFIG_MAC80211_MESH 
    637 +       if_limit->types |= BIT(NL80211_IFTYPE_MESH_POINT); 
    638 +#endif 
    639   
    640         /* 
    641          * Build up AP interface combinations structure. 
    642 @@ -1309,7 +1311,9 @@ int rt2x00lib_probe_dev(struct rt2x00_de 
    643                 rt2x00dev->hw->wiphy->interface_modes |= 
    644                     BIT(NL80211_IFTYPE_ADHOC) | 
    645                     BIT(NL80211_IFTYPE_AP) | 
    646 +#ifdef CONFIG_MAC80211_MESH 
    647                     BIT(NL80211_IFTYPE_MESH_POINT) | 
    648 +#endif 
    649                     BIT(NL80211_IFTYPE_WDS); 
    650   
    651         rt2x00dev->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; 
    652 --- a/net/mac80211/rc80211_minstrel_ht.c 
    653 +++ b/net/mac80211/rc80211_minstrel_ht.c 
    654 @@ -17,8 +17,6 @@ 
    655  #include "rc80211_minstrel_ht.h" 
    656   
    657  #define AVG_PKT_SIZE   1200 
    658 -#define SAMPLE_COLUMNS 10 
    659 -#define EWMA_LEVEL             75 
    660   
    661  /* Number of bits for an average sized packet */ 
    662  #define MCS_NBITS (AVG_PKT_SIZE << 3) 
    663 @@ -26,11 +24,11 @@ 
    664  /* Number of symbols for a packet with (bps) bits per symbol */ 
    665  #define MCS_NSYMS(bps) ((MCS_NBITS + (bps) - 1) / (bps)) 
    666   
    667 -/* Transmission time for a packet containing (syms) symbols */ 
    668 +/* Transmission time (nanoseconds) for a packet containing (syms) symbols */ 
    669  #define MCS_SYMBOL_TIME(sgi, syms)                                     \ 
    670         (sgi ?                                                          \ 
    671 -         ((syms) * 18 + 4) / 5 :       /* syms * 3.6 us */             \ 
    672 -         (syms) << 2                   /* syms * 4 us */               \ 
    673 +         ((syms) * 18000 + 4000) / 5 : /* syms * 3.6 us */             \ 
    674 +         ((syms) * 1000) << 2          /* syms * 4 us */               \ 
    675         ) 
    676   
    677  /* Transmit duration for the raw data part of an average sized packet */ 
    678 @@ -64,9 +62,9 @@ 
    679  } 
    680   
    681  #define CCK_DURATION(_bitrate, _short, _len)           \ 
    682 -       (10 /* SIFS */ +                                \ 
    683 +       (1000 * (10 /* SIFS */ +                        \ 
    684          (_short ? 72 + 24 : 144 + 48 ) +               \ 
    685 -        (8 * (_len + 4) * 10) / (_bitrate)) 
    686 +        (8 * (_len + 4) * 10) / (_bitrate))) 
    687   
    688  #define CCK_ACK_DURATION(_bitrate, _short)                     \ 
    689         (CCK_DURATION((_bitrate > 10 ? 20 : 10), false, 60) +   \ 
    690 @@ -129,15 +127,6 @@ const struct mcs_group minstrel_mcs_grou 
    691  static u8 sample_table[SAMPLE_COLUMNS][MCS_GROUP_RATES]; 
    692   
    693  /* 
    694 - * Perform EWMA (Exponentially Weighted Moving Average) calculation 
    695 - */ 
    696 -static int 
    697 -minstrel_ewma(int old, int new, int weight) 
    698 -{ 
    699 -       return (new * (100 - weight) + old * weight) / 100; 
    700 -} 
    701 - 
    702 -/* 
    703   * Look up an MCS group index based on mac80211 rate information 
    704   */ 
    705  static int 
    706 @@ -211,20 +200,32 @@ static void 
    707  minstrel_ht_calc_tp(struct minstrel_ht_sta *mi, int group, int rate) 
    708  { 
    709         struct minstrel_rate_stats *mr; 
    710 -       unsigned int usecs = 0; 
    711 +       unsigned int nsecs = 0; 
    712 +       unsigned int tp; 
    713 +       unsigned int prob; 
    714   
    715         mr = &mi->groups[group].rates[rate]; 
    716 +       prob = mr->probability; 
    717   
    718 -       if (mr->probability < MINSTREL_FRAC(1, 10)) { 
    719 +       if (prob < MINSTREL_FRAC(1, 10)) { 
    720                 mr->cur_tp = 0; 
    721                 return; 
    722         } 
    723   
    724 +       /* 
    725 +        * For the throughput calculation, limit the probability value to 90% to 
    726 +        * account for collision related packet error rate fluctuation 
    727 +        */ 
    728 +       if (prob > MINSTREL_FRAC(9, 10)) 
    729 +               prob = MINSTREL_FRAC(9, 10); 
    730 + 
    731         if (group != MINSTREL_CCK_GROUP) 
    732 -               usecs = mi->overhead / MINSTREL_TRUNC(mi->avg_ampdu_len); 
    733 +               nsecs = 1000 * mi->overhead / MINSTREL_TRUNC(mi->avg_ampdu_len); 
    734 + 
    735 +       nsecs += minstrel_mcs_groups[group].duration[rate]; 
    736 +       tp = 1000000 * ((mr->probability * 1000) / nsecs); 
    737   
    738 -       usecs += minstrel_mcs_groups[group].duration[rate]; 
    739 -       mr->cur_tp = MINSTREL_TRUNC((1000000 / usecs) * mr->probability); 
    740 +       mr->cur_tp = MINSTREL_TRUNC(tp); 
    741  } 
    742   
    743  /* 
    744 @@ -308,8 +309,8 @@ minstrel_ht_update_stats(struct minstrel 
    745                 } 
    746         } 
    747   
    748 -       /* try to sample up to half of the available rates during each interval */ 
    749 -       mi->sample_count *= 4; 
    750 +       /* try to sample all available rates during each interval */ 
    751 +       mi->sample_count *= 8; 
    752   
    753         cur_prob = 0; 
    754         cur_prob_tp = 0; 
    755 @@ -320,20 +321,13 @@ minstrel_ht_update_stats(struct minstrel 
    756                 if (!mg->supported) 
    757                         continue; 
    758   
    759 -               mr = minstrel_get_ratestats(mi, mg->max_prob_rate); 
    760 -               if (cur_prob_tp < mr->cur_tp && 
    761 -                   minstrel_mcs_groups[group].streams == 1) { 
    762 -                       mi->max_prob_rate = mg->max_prob_rate; 
    763 -                       cur_prob = mr->cur_prob; 
    764 -                       cur_prob_tp = mr->cur_tp; 
    765 -               } 
    766 - 
    767                 mr = minstrel_get_ratestats(mi, mg->max_tp_rate); 
    768                 if (cur_tp < mr->cur_tp) { 
    769                         mi->max_tp_rate2 = mi->max_tp_rate; 
    770                         cur_tp2 = cur_tp; 
    771                         mi->max_tp_rate = mg->max_tp_rate; 
    772                         cur_tp = mr->cur_tp; 
    773 +                       mi->max_prob_streams = minstrel_mcs_groups[group].streams - 1; 
    774                 } 
    775   
    776                 mr = minstrel_get_ratestats(mi, mg->max_tp_rate2); 
    777 @@ -343,6 +337,23 @@ minstrel_ht_update_stats(struct minstrel 
    778                 } 
    779         } 
    780   
    781 +       if (mi->max_prob_streams < 1) 
    782 +               mi->max_prob_streams = 1; 
    783 + 
    784 +       for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) { 
    785 +               mg = &mi->groups[group]; 
    786 +               if (!mg->supported) 
    787 +                       continue; 
    788 +               mr = minstrel_get_ratestats(mi, mg->max_prob_rate); 
    789 +               if (cur_prob_tp < mr->cur_tp && 
    790 +                   minstrel_mcs_groups[group].streams <= mi->max_prob_streams) { 
    791 +                       mi->max_prob_rate = mg->max_prob_rate; 
    792 +                       cur_prob = mr->cur_prob; 
    793 +                       cur_prob_tp = mr->cur_tp; 
    794 +               } 
    795 +       } 
    796 + 
    797 + 
    798         mi->stats_update = jiffies; 
    799  } 
    800   
    801 @@ -467,7 +478,7 @@ minstrel_ht_tx_status(void *priv, struct 
    802   
    803         if (!mi->sample_wait && !mi->sample_tries && mi->sample_count > 0) { 
    804                 mi->sample_wait = 16 + 2 * MINSTREL_TRUNC(mi->avg_ampdu_len); 
    805 -               mi->sample_tries = 2; 
    806 +               mi->sample_tries = 1; 
    807                 mi->sample_count--; 
    808         } 
    809   
    810 @@ -536,7 +547,7 @@ minstrel_calc_retransmit(struct minstrel 
    811         mr->retry_updated = true; 
    812   
    813         group = &minstrel_mcs_groups[index / MCS_GROUP_RATES]; 
    814 -       tx_time_data = group->duration[index % MCS_GROUP_RATES] * ampdu_len; 
    815 +       tx_time_data = group->duration[index % MCS_GROUP_RATES] * ampdu_len / 1000; 
    816   
    817         /* Contention time for first 2 tries */ 
    818         ctime = (t_slot * cw) >> 1; 
    819 @@ -616,6 +627,7 @@ minstrel_get_sample_rate(struct minstrel 
    820  { 
    821         struct minstrel_rate_stats *mr; 
    822         struct minstrel_mcs_group_data *mg; 
    823 +       unsigned int sample_dur, sample_group; 
    824         int sample_idx = 0; 
    825   
    826         if (mi->sample_wait > 0) { 
    827 @@ -626,39 +638,46 @@ minstrel_get_sample_rate(struct minstrel 
    828         if (!mi->sample_tries) 
    829                 return -1; 
    830   
    831 -       mi->sample_tries--; 
    832         mg = &mi->groups[mi->sample_group]; 
    833         sample_idx = sample_table[mg->column][mg->index]; 
    834         mr = &mg->rates[sample_idx]; 
    835 -       sample_idx += mi->sample_group * MCS_GROUP_RATES; 
    836 +       sample_group = mi->sample_group; 
    837 +       sample_idx += sample_group * MCS_GROUP_RATES; 
    838         minstrel_next_sample_idx(mi); 
    839   
    840         /* 
    841          * Sampling might add some overhead (RTS, no aggregation) 
    842          * to the frame. Hence, don't use sampling for the currently 
    843 -        * used max TP rate. 
    844 +        * used rates. 
    845          */ 
    846 -       if (sample_idx == mi->max_tp_rate) 
    847 +       if (sample_idx == mi->max_tp_rate || 
    848 +           sample_idx == mi->max_tp_rate2 || 
    849 +           sample_idx == mi->max_prob_rate) 
    850                 return -1; 
    851 + 
    852         /* 
    853 -        * When not using MRR, do not sample if the probability is already 
    854 -        * higher than 95% to avoid wasting airtime 
    855 +        * Do not sample if the probability is already higher than 95% 
    856 +        * to avoid wasting airtime. 
    857          */ 
    858 -       if (!mp->has_mrr && (mr->probability > MINSTREL_FRAC(95, 100))) 
    859 +       if (mr->probability > MINSTREL_FRAC(95, 100)) 
    860                 return -1; 
    861   
    862         /* 
    863          * Make sure that lower rates get sampled only occasionally, 
    864          * if the link is working perfectly. 
    865          */ 
    866 -       if (minstrel_get_duration(sample_idx) > 
    867 -           minstrel_get_duration(mi->max_tp_rate)) { 
    868 +       sample_dur = minstrel_get_duration(sample_idx); 
    869 +       if (sample_dur >= minstrel_get_duration(mi->max_tp_rate2) && 
    870 +           (mi->max_prob_streams < 
    871 +            minstrel_mcs_groups[sample_group].streams || 
    872 +            sample_dur >= minstrel_get_duration(mi->max_prob_rate))) { 
    873                 if (mr->sample_skipped < 20) 
    874                         return -1; 
    875   
    876                 if (mi->sample_slow++ > 2) 
    877                         return -1; 
    878         } 
    879 +       mi->sample_tries--; 
    880   
    881         return sample_idx; 
    882  } 
    883 --- a/net/mac80211/rc80211_minstrel_ht.h 
    884 +++ b/net/mac80211/rc80211_minstrel_ht.h 
    885 @@ -16,11 +16,6 @@ 
    886  #define MINSTREL_MAX_STREAMS   3 
    887  #define MINSTREL_STREAM_GROUPS 4 
    888   
    889 -/* scaled fraction values */ 
    890 -#define MINSTREL_SCALE 16 
    891 -#define MINSTREL_FRAC(val, div) (((val) << MINSTREL_SCALE) / div) 
    892 -#define MINSTREL_TRUNC(val) ((val) >> MINSTREL_SCALE) 
    893 - 
    894  #define MCS_GROUP_RATES        8 
    895   
    896  struct mcs_group { 
    897 @@ -85,6 +80,7 @@ struct minstrel_ht_sta { 
    898   
    899         /* best probability rate */ 
    900         unsigned int max_prob_rate; 
    901 +       unsigned int max_prob_streams; 
    902   
    903         /* time of last status update */ 
    904         unsigned long stats_update; 
    905 --- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c 
    906 +++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c 
    907 @@ -1023,6 +1023,7 @@ static bool ar9003_hw_init_cal(struct at 
    908                                           AR_PHY_AGC_CONTROL_FLTR_CAL   | 
    909                                           AR_PHY_AGC_CONTROL_PKDET_CAL; 
    910   
    911 +       /* Use chip chainmask only for calibration */ 
    912         ar9003_hw_set_chain_masks(ah, ah->caps.rx_chainmask, ah->caps.tx_chainmask); 
    913   
    914         if (rtt) { 
    915 @@ -1150,6 +1151,9 @@ skip_tx_iqcal: 
    916                 ar9003_hw_rtt_disable(ah); 
    917         } 
    918   
    919 +       /* Revert chainmask to runtime parameters */ 
    920 +       ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask); 
    921 + 
    922         /* Initialize list pointers */ 
    923         ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL; 
    924   
    925 --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c 
    926 +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c 
    927 @@ -3606,6 +3606,12 @@ static void ar9003_hw_ant_ctrl_apply(str 
    928         value = ar9003_hw_ant_ctrl_common_2_get(ah, is2ghz); 
    929         REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM_2, AR_SWITCH_TABLE_COM2_ALL, value); 
    930   
    931 +       if ((AR_SREV_9462(ah)) && (ah->rxchainmask == 0x2)) { 
    932 +               value = ar9003_hw_ant_ctrl_chain_get(ah, 1, is2ghz); 
    933 +               REG_RMW_FIELD(ah, switch_chain_reg[0], 
    934 +                             AR_SWITCH_TABLE_ALL, value); 
    935 +       } 
    936 + 
    937         for (chain = 0; chain < AR9300_MAX_CHAINS; chain++) { 
    938                 if ((ah->rxchainmask & BIT(chain)) || 
    939                     (ah->txchainmask & BIT(chain))) { 
    940 @@ -3772,6 +3778,17 @@ static void ar9003_hw_atten_apply(struct 
    941                                           AR_PHY_EXT_ATTEN_CTL_2, 
    942                                          }; 
    943   
    944 +       if ((AR_SREV_9462(ah)) && (ah->rxchainmask == 0x2)) { 
    945 +               value = ar9003_hw_atten_chain_get(ah, 1, chan); 
    946 +               REG_RMW_FIELD(ah, ext_atten_reg[0], 
    947 +                             AR_PHY_EXT_ATTEN_CTL_XATTEN1_DB, value); 
    948 + 
    949 +               value = ar9003_hw_atten_chain_get_margin(ah, 1, chan); 
    950 +               REG_RMW_FIELD(ah, ext_atten_reg[0], 
    951 +                             AR_PHY_EXT_ATTEN_CTL_XATTEN1_MARGIN, 
    952 +                             value); 
    953 +       } 
    954 + 
    955         /* Test value. if 0 then attenuation is unused. Don't load anything. */ 
    956         for (i = 0; i < 3; i++) { 
    957                 if (ah->txchainmask & BIT(i)) { 
    958 --- a/drivers/net/wireless/ath/ath9k/link.c 
    959 +++ b/drivers/net/wireless/ath/ath9k/link.c 
    960 @@ -28,21 +28,21 @@ void ath_tx_complete_poll_work(struct wo 
    961         int i; 
    962         bool needreset = false; 
    963   
    964 -       for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) 
    965 -               if (ATH_TXQ_SETUP(sc, i)) { 
    966 -                       txq = &sc->tx.txq[i]; 
    967 -                       ath_txq_lock(sc, txq); 
    968 -                       if (txq->axq_depth) { 
    969 -                               if (txq->axq_tx_inprogress) { 
    970 -                                       needreset = true; 
    971 -                                       ath_txq_unlock(sc, txq); 
    972 -                                       break; 
    973 -                               } else { 
    974 -                                       txq->axq_tx_inprogress = true; 
    975 -                               } 
    976 +       for (i = 0; i < IEEE80211_NUM_ACS; i++) { 
    977 +               txq = sc->tx.txq_map[i]; 
    978 + 
    979 +               ath_txq_lock(sc, txq); 
    980 +               if (txq->axq_depth) { 
    981 +                       if (txq->axq_tx_inprogress) { 
    982 +                               needreset = true; 
    983 +                               ath_txq_unlock(sc, txq); 
    984 +                               break; 
    985 +                       } else { 
    986 +                               txq->axq_tx_inprogress = true; 
    987                         } 
    988 -                       ath_txq_unlock_complete(sc, txq); 
    989                 } 
    990 +               ath_txq_unlock_complete(sc, txq); 
    991 +       } 
    992   
    993         if (needreset) { 
    994                 ath_dbg(ath9k_hw_common(sc->sc_ah), RESET, 
    995 --- a/net/mac80211/sta_info.c 
    996 +++ b/net/mac80211/sta_info.c 
    997 @@ -766,6 +766,7 @@ int __must_check __sta_info_destroy(stru 
    998         struct ieee80211_local *local; 
    999         struct ieee80211_sub_if_data *sdata; 
    1000         int ret, i; 
    1001 +       bool have_key = false; 
    1002   
    1003         might_sleep(); 
    1004   
    1005 @@ -793,12 +794,19 @@ int __must_check __sta_info_destroy(stru 
    1006         list_del_rcu(&sta->list); 
    1007   
    1008         mutex_lock(&local->key_mtx); 
    1009 -       for (i = 0; i < NUM_DEFAULT_KEYS; i++) 
    1010 +       for (i = 0; i < NUM_DEFAULT_KEYS; i++) { 
    1011                 __ieee80211_key_free(key_mtx_dereference(local, sta->gtk[i])); 
    1012 -       if (sta->ptk) 
    1013 +               have_key = true; 
    1014 +       } 
    1015 +       if (sta->ptk) { 
    1016                 __ieee80211_key_free(key_mtx_dereference(local, sta->ptk)); 
    1017 +               have_key = true; 
    1018 +       } 
    1019         mutex_unlock(&local->key_mtx); 
    1020   
    1021 +       if (!have_key) 
    1022 +               synchronize_net(); 
    1023 + 
    1024         sta->dead = true; 
    1025   
    1026         local->num_sta--; 
    1027 --- a/net/mac80211/chan.c 
    1028 +++ b/net/mac80211/chan.c 
    1029 @@ -63,6 +63,7 @@ ieee80211_new_chanctx(struct ieee80211_l 
    1030                       enum ieee80211_chanctx_mode mode) 
    1031  { 
    1032         struct ieee80211_chanctx *ctx; 
    1033 +       u32 changed; 
    1034         int err; 
    1035   
    1036         lockdep_assert_held(&local->chanctx_mtx); 
    1037 @@ -76,6 +77,13 @@ ieee80211_new_chanctx(struct ieee80211_l 
    1038         ctx->conf.rx_chains_dynamic = 1; 
    1039         ctx->mode = mode; 
    1040   
    1041 +       /* acquire mutex to prevent idle from changing */ 
    1042 +       mutex_lock(&local->mtx); 
    1043 +       /* turn idle off *before* setting channel -- some drivers need that */ 
    1044 +       changed = ieee80211_idle_off(local); 
    1045 +       if (changed) 
    1046 +               ieee80211_hw_config(local, changed); 
    1047 + 
    1048         if (!local->use_chanctx) { 
    1049                 local->_oper_channel_type = 
    1050                         cfg80211_get_chandef_type(chandef); 
    1051 @@ -85,14 +93,17 @@ ieee80211_new_chanctx(struct ieee80211_l 
    1052                 err = drv_add_chanctx(local, ctx); 
    1053                 if (err) { 
    1054                         kfree(ctx); 
    1055 -                       return ERR_PTR(err); 
    1056 +                       ctx = ERR_PTR(err); 
    1057 + 
    1058 +                       ieee80211_recalc_idle(local); 
    1059 +                       goto out; 
    1060                 } 
    1061         } 
    1062   
    1063 +       /* and keep the mutex held until the new chanctx is on the list */ 
    1064         list_add_rcu(&ctx->list, &local->chanctx_list); 
    1065   
    1066 -       mutex_lock(&local->mtx); 
    1067 -       ieee80211_recalc_idle(local); 
    1068 + out: 
    1069         mutex_unlock(&local->mtx); 
    1070   
    1071         return ctx; 
    1072 --- a/net/mac80211/ieee80211_i.h 
    1073 +++ b/net/mac80211/ieee80211_i.h 
    1074 @@ -1366,6 +1366,7 @@ int ieee80211_if_change_type(struct ieee 
    1075                              enum nl80211_iftype type); 
    1076  void ieee80211_if_remove(struct ieee80211_sub_if_data *sdata); 
    1077  void ieee80211_remove_interfaces(struct ieee80211_local *local); 
    1078 +u32 ieee80211_idle_off(struct ieee80211_local *local); 
    1079  void ieee80211_recalc_idle(struct ieee80211_local *local); 
    1080  void ieee80211_adjust_monitor_flags(struct ieee80211_sub_if_data *sdata, 
    1081                                     const int offset); 
    1082 --- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c 
    1083 +++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c 
    1084 @@ -799,7 +799,7 @@ static int ath9k_init_firmware_version(s 
    1085          * required version. 
    1086          */ 
    1087         if (priv->fw_version_major != MAJOR_VERSION_REQ || 
    1088 -           priv->fw_version_minor != MINOR_VERSION_REQ) { 
    1089 +           priv->fw_version_minor < MINOR_VERSION_REQ) { 
    1090                 dev_err(priv->dev, "ath9k_htc: Please upgrade to FW version %d.%d\n", 
    1091                         MAJOR_VERSION_REQ, MINOR_VERSION_REQ); 
    1092                 return -EINVAL; 
    1093 --- a/drivers/net/wireless/ath/ath9k/xmit.c 
    1094 +++ b/drivers/net/wireless/ath/ath9k/xmit.c 
    1095 @@ -516,8 +516,7 @@ static void ath_tx_complete_aggr(struct  
    1096                  * not a holding desc. 
    1097                  */ 
    1098                 INIT_LIST_HEAD(&bf_head); 
    1099 -               if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) || 
    1100 -                   bf_next != NULL || !bf_last->bf_stale) 
    1101 +               if (bf_next != NULL || !bf_last->bf_stale) 
    1102                         list_move_tail(&bf->list, &bf_head); 
    1103   
    1104                 if (!txpending || (tid->state & AGGR_CLEANUP)) { 
    1105 @@ -537,8 +536,7 @@ static void ath_tx_complete_aggr(struct  
    1106                                 !txfail); 
    1107                 } else { 
    1108                         /* retry the un-acked ones */ 
    1109 -                       if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) && 
    1110 -                           bf->bf_next == NULL && bf_last->bf_stale) { 
    1111 +                       if (bf->bf_next == NULL && bf_last->bf_stale) { 
    1112                                 struct ath_buf *tbf; 
    1113   
    1114                                 tbf = ath_clone_txbuf(sc, bf_last); 
    1115 @@ -2264,6 +2262,7 @@ void ath_tx_edma_tasklet(struct ath_soft 
    1116         struct ath_txq *txq; 
    1117         struct ath_buf *bf, *lastbf; 
    1118         struct list_head bf_head; 
    1119 +       struct list_head *fifo_list; 
    1120         int status; 
    1121   
    1122         for (;;) { 
    1123 @@ -2291,20 +2290,24 @@ void ath_tx_edma_tasklet(struct ath_soft 
    1124   
    1125                 TX_STAT_INC(txq->axq_qnum, txprocdesc); 
    1126   
    1127 -               if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) { 
    1128 +               fifo_list = &txq->txq_fifo[txq->txq_tailidx]; 
    1129 +               if (list_empty(fifo_list)) { 
    1130                         ath_txq_unlock(sc, txq); 
    1131                         return; 
    1132                 } 
    1133   
    1134 -               bf = list_first_entry(&txq->txq_fifo[txq->txq_tailidx], 
    1135 -                                     struct ath_buf, list); 
    1136 +               bf = list_first_entry(fifo_list, struct ath_buf, list); 
    1137 +               if (bf->bf_stale) { 
    1138 +                       list_del(&bf->list); 
    1139 +                       ath_tx_return_buffer(sc, bf); 
    1140 +                       bf = list_first_entry(fifo_list, struct ath_buf, list); 
    1141 +               } 
    1142 + 
    1143                 lastbf = bf->bf_lastbf; 
    1144   
    1145                 INIT_LIST_HEAD(&bf_head); 
    1146 -               list_cut_position(&bf_head, &txq->txq_fifo[txq->txq_tailidx], 
    1147 -                                 &lastbf->list); 
    1148 - 
    1149 -               if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) { 
    1150 +               if (list_is_last(&lastbf->list, fifo_list)) { 
    1151 +                       list_splice_tail_init(fifo_list, &bf_head); 
    1152                         INCR(txq->txq_tailidx, ATH_TXFIFO_DEPTH); 
    1153   
    1154                         if (!list_empty(&txq->axq_q)) { 
    1155 @@ -2315,6 +2318,11 @@ void ath_tx_edma_tasklet(struct ath_soft 
    1156                                 list_splice_tail_init(&txq->axq_q, &bf_q); 
    1157                                 ath_tx_txqaddbuf(sc, txq, &bf_q, true); 
    1158                         } 
    1159 +               } else { 
    1160 +                       lastbf->bf_stale = true; 
    1161 +                       if (bf != lastbf) 
    1162 +                               list_cut_position(&bf_head, fifo_list, 
    1163 +                                                 lastbf->list.prev); 
    1164                 } 
    1165   
    1166                 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head); 
    1167 --- a/drivers/net/wireless/ath/ath9k/ar9580_1p0_initvals.h 
    1168 +++ b/drivers/net/wireless/ath/ath9k/ar9580_1p0_initvals.h 
    1169 @@ -519,7 +519,7 @@ static const u32 ar9580_1p0_mac_core[][2 
    1170         {0x00008258, 0x00000000}, 
    1171         {0x0000825c, 0x40000000}, 
    1172         {0x00008260, 0x00080922}, 
    1173 -       {0x00008264, 0x9bc00010}, 
    1174 +       {0x00008264, 0x9d400010}, 
    1175         {0x00008268, 0xffffffff}, 
    1176         {0x0000826c, 0x0000ffff}, 
    1177         {0x00008270, 0x00000000}, 
    1178 --- a/net/mac80211/mlme.c 
    1179 +++ b/net/mac80211/mlme.c 
    1180 @@ -3955,8 +3955,16 @@ int ieee80211_mgd_auth(struct ieee80211_ 
    1181         /* prep auth_data so we don't go into idle on disassoc */ 
    1182         ifmgd->auth_data = auth_data; 
    1183   
    1184 -       if (ifmgd->associated) 
    1185 -               ieee80211_set_disassoc(sdata, 0, 0, false, NULL); 
    1186 +       if (ifmgd->associated) { 
    1187 +               u8 frame_buf[IEEE80211_DEAUTH_FRAME_LEN]; 
    1188 + 
    1189 +               ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH, 
    1190 +                                      WLAN_REASON_UNSPECIFIED, 
    1191 +                                      false, frame_buf); 
    1192 + 
    1193 +               __cfg80211_send_deauth(sdata->dev, frame_buf, 
    1194 +                                      sizeof(frame_buf)); 
    1195 +       } 
    1196   
    1197         sdata_info(sdata, "authenticate with %pM\n", req->bss->bssid); 
    1198   
    1199 @@ -4016,8 +4024,16 @@ int ieee80211_mgd_assoc(struct ieee80211 
    1200   
    1201         mutex_lock(&ifmgd->mtx); 
    1202   
    1203 -       if (ifmgd->associated) 
    1204 -               ieee80211_set_disassoc(sdata, 0, 0, false, NULL); 
    1205 +       if (ifmgd->associated) { 
    1206 +               u8 frame_buf[IEEE80211_DEAUTH_FRAME_LEN]; 
    1207 + 
    1208 +               ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH, 
    1209 +                                      WLAN_REASON_UNSPECIFIED, 
    1210 +                                      false, frame_buf); 
    1211 + 
    1212 +               __cfg80211_send_deauth(sdata->dev, frame_buf, 
    1213 +                                      sizeof(frame_buf)); 
    1214 +       } 
    1215   
    1216         if (ifmgd->auth_data && !ifmgd->auth_data->done) { 
    1217                 err = -EBUSY; 
    1218 --- a/net/mac80211/rc80211_minstrel.c 
    1219 +++ b/net/mac80211/rc80211_minstrel.c 
    1220 @@ -55,7 +55,6 @@ 
    1221  #include "rate.h" 
    1222  #include "rc80211_minstrel.h" 
    1223   
    1224 -#define SAMPLE_COLUMNS 10 
    1225  #define SAMPLE_TBL(_mi, _idx, _col) \ 
    1226                 _mi->sample_table[(_idx * SAMPLE_COLUMNS) + _col] 
    1227   
    1228 @@ -70,16 +69,31 @@ rix_to_ndx(struct minstrel_sta_info *mi, 
    1229         return i; 
    1230  } 
    1231   
    1232 +/* find & sort topmost throughput rates */ 
    1233 +static inline void 
    1234 +minstrel_sort_best_tp_rates(struct minstrel_sta_info *mi, int i, u8 *tp_list) 
    1235 +{ 
    1236 +       int j = MAX_THR_RATES; 
    1237 + 
    1238 +       while (j > 0 && mi->r[i].cur_tp > mi->r[tp_list[j - 1]].cur_tp) 
    1239 +               j--; 
    1240 +       if (j < MAX_THR_RATES - 1) 
    1241 +               memmove(&tp_list[j + 1], &tp_list[j], MAX_THR_RATES - (j + 1)); 
    1242 +       if (j < MAX_THR_RATES) 
    1243 +               tp_list[j] = i; 
    1244 +} 
    1245 + 
    1246  static void 
    1247  minstrel_update_stats(struct minstrel_priv *mp, struct minstrel_sta_info *mi) 
    1248  { 
    1249 -       u32 max_tp = 0, index_max_tp = 0, index_max_tp2 = 0; 
    1250 -       u32 max_prob = 0, index_max_prob = 0; 
    1251 +       u8 tmp_tp_rate[MAX_THR_RATES]; 
    1252 +       u8 tmp_prob_rate = 0; 
    1253         u32 usecs; 
    1254 -       u32 p; 
    1255         int i; 
    1256   
    1257 -       mi->stats_update = jiffies; 
    1258 +       for (i=0; i < MAX_THR_RATES; i++) 
    1259 +           tmp_tp_rate[i] = 0; 
    1260 + 
    1261         for (i = 0; i < mi->n_rates; i++) { 
    1262                 struct minstrel_rate *mr = &mi->r[i]; 
    1263   
    1264 @@ -87,27 +101,32 @@ minstrel_update_stats(struct minstrel_pr 
    1265                 if (!usecs) 
    1266                         usecs = 1000000; 
    1267   
    1268 -               /* To avoid rounding issues, probabilities scale from 0 (0%) 
    1269 -                * to 18000 (100%) */ 
    1270 -               if (mr->attempts) { 
    1271 -                       p = (mr->success * 18000) / mr->attempts; 
    1272 +               if (unlikely(mr->attempts > 0)) { 
    1273 +                       mr->sample_skipped = 0; 
    1274 +                       mr->cur_prob = MINSTREL_FRAC(mr->success, mr->attempts); 
    1275                         mr->succ_hist += mr->success; 
    1276                         mr->att_hist += mr->attempts; 
    1277 -                       mr->cur_prob = p; 
    1278 -                       p = ((p * (100 - mp->ewma_level)) + (mr->probability * 
    1279 -                               mp->ewma_level)) / 100; 
    1280 -                       mr->probability = p; 
    1281 -                       mr->cur_tp = p * (1000000 / usecs); 
    1282 -               } 
    1283 +                       mr->probability = minstrel_ewma(mr->probability, 
    1284 +                                                       mr->cur_prob, 
    1285 +                                                       EWMA_LEVEL); 
    1286 +               } else 
    1287 +                       mr->sample_skipped++; 
    1288   
    1289                 mr->last_success = mr->success; 
    1290                 mr->last_attempts = mr->attempts; 
    1291                 mr->success = 0; 
    1292                 mr->attempts = 0; 
    1293   
    1294 +               /* Update throughput per rate, reset thr. below 10% success */ 
    1295 +               if (mr->probability < MINSTREL_FRAC(10, 100)) 
    1296 +                       mr->cur_tp = 0; 
    1297 +               else 
    1298 +                       mr->cur_tp = mr->probability * (1000000 / usecs); 
    1299 + 
    1300                 /* Sample less often below the 10% chance of success. 
    1301                  * Sample less often above the 95% chance of success. */ 
    1302 -               if ((mr->probability > 17100) || (mr->probability < 1800)) { 
    1303 +               if (mr->probability > MINSTREL_FRAC(95, 100) || 
    1304 +                   mr->probability < MINSTREL_FRAC(10, 100)) { 
    1305                         mr->adjusted_retry_count = mr->retry_count >> 1; 
    1306                         if (mr->adjusted_retry_count > 2) 
    1307                                 mr->adjusted_retry_count = 2; 
    1308 @@ -118,35 +137,30 @@ minstrel_update_stats(struct minstrel_pr 
    1309                 } 
    1310                 if (!mr->adjusted_retry_count) 
    1311                         mr->adjusted_retry_count = 2; 
    1312 -       } 
    1313   
    1314 -       for (i = 0; i < mi->n_rates; i++) { 
    1315 -               struct minstrel_rate *mr = &mi->r[i]; 
    1316 -               if (max_tp < mr->cur_tp) { 
    1317 -                       index_max_tp = i; 
    1318 -                       max_tp = mr->cur_tp; 
    1319 -               } 
    1320 -               if (max_prob < mr->probability) { 
    1321 -                       index_max_prob = i; 
    1322 -                       max_prob = mr->probability; 
    1323 +               minstrel_sort_best_tp_rates(mi, i, tmp_tp_rate); 
    1324 + 
    1325 +               /* To determine the most robust rate (max_prob_rate) used at 
    1326 +                * 3rd mmr stage we distinct between two cases: 
    1327 +                * (1) if any success probabilitiy >= 95%, out of those rates 
    1328 +                * choose the maximum throughput rate as max_prob_rate 
    1329 +                * (2) if all success probabilities < 95%, the rate with 
    1330 +                * highest success probability is choosen as max_prob_rate */ 
    1331 +               if (mr->probability >= MINSTREL_FRAC(95,100)) { 
    1332 +                       if (mr->cur_tp >= mi->r[tmp_prob_rate].cur_tp) 
    1333 +                               tmp_prob_rate = i; 
    1334 +               } else { 
    1335 +                       if (mr->probability >= mi->r[tmp_prob_rate].probability) 
    1336 +                               tmp_prob_rate = i; 
    1337                 } 
    1338         } 
    1339   
    1340 -       max_tp = 0; 
    1341 -       for (i = 0; i < mi->n_rates; i++) { 
    1342 -               struct minstrel_rate *mr = &mi->r[i]; 
    1343 - 
    1344 -               if (i == index_max_tp) 
    1345 -                       continue; 
    1346 +       /* Assign the new rate set */ 
    1347 +       memcpy(mi->max_tp_rate, tmp_tp_rate, sizeof(mi->max_tp_rate)); 
    1348 +       mi->max_prob_rate = tmp_prob_rate; 
    1349   
    1350 -               if (max_tp < mr->cur_tp) { 
    1351 -                       index_max_tp2 = i; 
    1352 -                       max_tp = mr->cur_tp; 
    1353 -               } 
    1354 -       } 
    1355 -       mi->max_tp_rate = index_max_tp; 
    1356 -       mi->max_tp_rate2 = index_max_tp2; 
    1357 -       mi->max_prob_rate = index_max_prob; 
    1358 +       /* Reset update timer */ 
    1359 +       mi->stats_update = jiffies; 
    1360  } 
    1361   
    1362  static void 
    1363 @@ -207,10 +221,10 @@ static int 
    1364  minstrel_get_next_sample(struct minstrel_sta_info *mi) 
    1365  { 
    1366         unsigned int sample_ndx; 
    1367 -       sample_ndx = SAMPLE_TBL(mi, mi->sample_idx, mi->sample_column); 
    1368 -       mi->sample_idx++; 
    1369 -       if ((int) mi->sample_idx > (mi->n_rates - 2)) { 
    1370 -               mi->sample_idx = 0; 
    1371 +       sample_ndx = SAMPLE_TBL(mi, mi->sample_row, mi->sample_column); 
    1372 +       mi->sample_row++; 
    1373 +       if ((int) mi->sample_row >= mi->n_rates) { 
    1374 +               mi->sample_row = 0; 
    1375                 mi->sample_column++; 
    1376                 if (mi->sample_column >= SAMPLE_COLUMNS) 
    1377                         mi->sample_column = 0; 
    1378 @@ -228,31 +242,37 @@ minstrel_get_rate(void *priv, struct iee 
    1379         struct minstrel_priv *mp = priv; 
    1380         struct ieee80211_tx_rate *ar = info->control.rates; 
    1381         unsigned int ndx, sample_ndx = 0; 
    1382 -       bool mrr; 
    1383 -       bool sample_slower = false; 
    1384 -       bool sample = false; 
    1385 +       bool mrr_capable; 
    1386 +       bool indirect_rate_sampling = false; 
    1387 +       bool rate_sampling = false; 
    1388         int i, delta; 
    1389         int mrr_ndx[3]; 
    1390 -       int sample_rate; 
    1391 +       int sampling_ratio; 
    1392   
    1393 +       /* management/no-ack frames do not use rate control */ 
    1394         if (rate_control_send_low(sta, priv_sta, txrc)) 
    1395                 return; 
    1396   
    1397 -       mrr = mp->has_mrr && !txrc->rts && !txrc->bss_conf->use_cts_prot; 
    1398 - 
    1399 -       ndx = mi->max_tp_rate; 
    1400 - 
    1401 -       if (mrr) 
    1402 -               sample_rate = mp->lookaround_rate_mrr; 
    1403 +       /* check multi-rate-retry capabilities & adjust lookaround_rate */ 
    1404 +       mrr_capable = mp->has_mrr && 
    1405 +                     !txrc->rts && 
    1406 +                     !txrc->bss_conf->use_cts_prot; 
    1407 +       if (mrr_capable) 
    1408 +               sampling_ratio = mp->lookaround_rate_mrr; 
    1409         else 
    1410 -               sample_rate = mp->lookaround_rate; 
    1411 +               sampling_ratio = mp->lookaround_rate; 
    1412 + 
    1413 +       /* init rateindex [ndx] with max throughput rate */ 
    1414 +       ndx = mi->max_tp_rate[0]; 
    1415   
    1416 +       /* increase sum packet counter */ 
    1417         mi->packet_count++; 
    1418 -       delta = (mi->packet_count * sample_rate / 100) - 
    1419 + 
    1420 +       delta = (mi->packet_count * sampling_ratio / 100) - 
    1421                         (mi->sample_count + mi->sample_deferred / 2); 
    1422   
    1423         /* delta > 0: sampling required */ 
    1424 -       if ((delta > 0) && (mrr || !mi->prev_sample)) { 
    1425 +       if ((delta > 0) && (mrr_capable || !mi->prev_sample)) { 
    1426                 struct minstrel_rate *msr; 
    1427                 if (mi->packet_count >= 10000) { 
    1428                         mi->sample_deferred = 0; 
    1429 @@ -271,21 +291,28 @@ minstrel_get_rate(void *priv, struct iee 
    1430                         mi->sample_count += (delta - mi->n_rates * 2); 
    1431                 } 
    1432   
    1433 +               /* get next random rate sample */ 
    1434                 sample_ndx = minstrel_get_next_sample(mi); 
    1435                 msr = &mi->r[sample_ndx]; 
    1436 -               sample = true; 
    1437 -               sample_slower = mrr && (msr->perfect_tx_time > 
    1438 -                       mi->r[ndx].perfect_tx_time); 
    1439 +               rate_sampling = true; 
    1440   
    1441 -               if (!sample_slower) { 
    1442 +               /* Decide if direct ( 1st mrr stage) or indirect (2nd mrr stage) 
    1443 +                * rate sampling method should be used. 
    1444 +                * Respect such rates that are not sampled for 20 interations. 
    1445 +                */ 
    1446 +               if (mrr_capable && 
    1447 +                   msr->perfect_tx_time > mi->r[ndx].perfect_tx_time && 
    1448 +                   msr->sample_skipped < 20) 
    1449 +                               indirect_rate_sampling = true; 
    1450 + 
    1451 +               if (!indirect_rate_sampling) { 
    1452                         if (msr->sample_limit != 0) { 
    1453                                 ndx = sample_ndx; 
    1454                                 mi->sample_count++; 
    1455                                 if (msr->sample_limit > 0) 
    1456                                         msr->sample_limit--; 
    1457 -                       } else { 
    1458 -                               sample = false; 
    1459 -                       } 
    1460 +                       } else 
    1461 +                               rate_sampling = false; 
    1462                 } else { 
    1463                         /* Only use IEEE80211_TX_CTL_RATE_CTRL_PROBE to mark 
    1464                          * packets that have the sampling rate deferred to the 
    1465 @@ -297,34 +324,39 @@ minstrel_get_rate(void *priv, struct iee 
    1466                         mi->sample_deferred++; 
    1467                 } 
    1468         } 
    1469 -       mi->prev_sample = sample; 
    1470 +       mi->prev_sample = rate_sampling; 
    1471   
    1472         /* If we're not using MRR and the sampling rate already 
    1473          * has a probability of >95%, we shouldn't be attempting 
    1474          * to use it, as this only wastes precious airtime */ 
    1475 -       if (!mrr && sample && (mi->r[ndx].probability > 17100)) 
    1476 -               ndx = mi->max_tp_rate; 
    1477 +       if (!mrr_capable && rate_sampling && 
    1478 +          (mi->r[ndx].probability > MINSTREL_FRAC(95, 100))) 
    1479 +               ndx = mi->max_tp_rate[0]; 
    1480   
    1481 +       /* mrr setup for 1st stage */ 
    1482         ar[0].idx = mi->r[ndx].rix; 
    1483         ar[0].count = minstrel_get_retry_count(&mi->r[ndx], info); 
    1484   
    1485 -       if (!mrr) { 
    1486 -               if (!sample) 
    1487 +       /* non mrr setup for 2nd stage */ 
    1488 +       if (!mrr_capable) { 
    1489 +               if (!rate_sampling) 
    1490                         ar[0].count = mp->max_retry; 
    1491                 ar[1].idx = mi->lowest_rix; 
    1492                 ar[1].count = mp->max_retry; 
    1493                 return; 
    1494         } 
    1495   
    1496 -       /* MRR setup */ 
    1497 -       if (sample) { 
    1498 -               if (sample_slower) 
    1499 +       /* mrr setup for 2nd stage */ 
    1500 +       if (rate_sampling) { 
    1501 +               if (indirect_rate_sampling) 
    1502                         mrr_ndx[0] = sample_ndx; 
    1503                 else 
    1504 -                       mrr_ndx[0] = mi->max_tp_rate; 
    1505 +                       mrr_ndx[0] = mi->max_tp_rate[0]; 
    1506         } else { 
    1507 -               mrr_ndx[0] = mi->max_tp_rate2; 
    1508 +               mrr_ndx[0] = mi->max_tp_rate[1]; 
    1509         } 
    1510 + 
    1511 +       /* mrr setup for 3rd & 4th stage */ 
    1512         mrr_ndx[1] = mi->max_prob_rate; 
    1513         mrr_ndx[2] = 0; 
    1514         for (i = 1; i < 4; i++) { 
    1515 @@ -351,26 +383,21 @@ static void 
    1516  init_sample_table(struct minstrel_sta_info *mi) 
    1517  { 
    1518         unsigned int i, col, new_idx; 
    1519 -       unsigned int n_srates = mi->n_rates - 1; 
    1520         u8 rnd[8]; 
    1521   
    1522         mi->sample_column = 0; 
    1523 -       mi->sample_idx = 0; 
    1524 -       memset(mi->sample_table, 0, SAMPLE_COLUMNS * mi->n_rates); 
    1525 +       mi->sample_row = 0; 
    1526 +       memset(mi->sample_table, 0xff, SAMPLE_COLUMNS * mi->n_rates); 
    1527   
    1528         for (col = 0; col < SAMPLE_COLUMNS; col++) { 
    1529 -               for (i = 0; i < n_srates; i++) { 
    1530 +               for (i = 0; i < mi->n_rates; i++) { 
    1531                         get_random_bytes(rnd, sizeof(rnd)); 
    1532 -                       new_idx = (i + rnd[i & 7]) % n_srates; 
    1533 +                       new_idx = (i + rnd[i & 7]) % mi->n_rates; 
    1534   
    1535 -                       while (SAMPLE_TBL(mi, new_idx, col) != 0) 
    1536 -                               new_idx = (new_idx + 1) % n_srates; 
    1537 +                       while (SAMPLE_TBL(mi, new_idx, col) != 0xff) 
    1538 +                               new_idx = (new_idx + 1) % mi->n_rates; 
    1539   
    1540 -                       /* Don't sample the slowest rate (i.e. slowest base 
    1541 -                        * rate). We must presume that the slowest rate works 
    1542 -                        * fine, or else other management frames will also be 
    1543 -                        * failing and the link will break */ 
    1544 -                       SAMPLE_TBL(mi, new_idx, col) = i + 1; 
    1545 +                       SAMPLE_TBL(mi, new_idx, col) = i; 
    1546                 } 
    1547         } 
    1548  } 
    1549 @@ -542,9 +569,6 @@ minstrel_alloc(struct ieee80211_hw *hw,  
    1550         mp->lookaround_rate = 5; 
    1551         mp->lookaround_rate_mrr = 10; 
    1552   
    1553 -       /* moving average weight for EWMA */ 
    1554 -       mp->ewma_level = 75; 
    1555 - 
    1556         /* maximum time that the hw is allowed to stay in one MRR segment */ 
    1557         mp->segment_size = 6000; 
    1558   
    1559 --- a/net/mac80211/rc80211_minstrel.h 
    1560 +++ b/net/mac80211/rc80211_minstrel.h 
    1561 @@ -9,6 +9,28 @@ 
    1562  #ifndef __RC_MINSTREL_H 
    1563  #define __RC_MINSTREL_H 
    1564   
    1565 +#define EWMA_LEVEL     75      /* ewma weighting factor [%] */ 
    1566 +#define SAMPLE_COLUMNS 10      /* number of columns in sample table */ 
    1567 + 
    1568 + 
    1569 +/* scaled fraction values */ 
    1570 +#define MINSTREL_SCALE  16 
    1571 +#define MINSTREL_FRAC(val, div) (((val) << MINSTREL_SCALE) / div) 
    1572 +#define MINSTREL_TRUNC(val) ((val) >> MINSTREL_SCALE) 
    1573 + 
    1574 +/* number of highest throughput rates to consider*/ 
    1575 +#define MAX_THR_RATES 4 
    1576 + 
    1577 +/* 
    1578 + * Perform EWMA (Exponentially Weighted Moving Average) calculation 
    1579 +  */ 
    1580 +static inline int 
    1581 +minstrel_ewma(int old, int new, int weight) 
    1582 +{ 
    1583 +       return (new * (100 - weight) + old * weight) / 100; 
    1584 +} 
    1585 + 
    1586 + 
    1587  struct minstrel_rate { 
    1588         int bitrate; 
    1589         int rix; 
    1590 @@ -26,6 +48,7 @@ struct minstrel_rate { 
    1591         u32 attempts; 
    1592         u32 last_attempts; 
    1593         u32 last_success; 
    1594 +       u8 sample_skipped; 
    1595   
    1596         /* parts per thousand */ 
    1597         u32 cur_prob; 
    1598 @@ -45,14 +68,13 @@ struct minstrel_sta_info { 
    1599   
    1600         unsigned int lowest_rix; 
    1601   
    1602 -       unsigned int max_tp_rate; 
    1603 -       unsigned int max_tp_rate2; 
    1604 -       unsigned int max_prob_rate; 
    1605 +       u8 max_tp_rate[MAX_THR_RATES]; 
    1606 +       u8 max_prob_rate; 
    1607         unsigned int packet_count; 
    1608         unsigned int sample_count; 
    1609         int sample_deferred; 
    1610   
    1611 -       unsigned int sample_idx; 
    1612 +       unsigned int sample_row; 
    1613         unsigned int sample_column; 
    1614   
    1615         int n_rates; 
    1616 @@ -73,7 +95,6 @@ struct minstrel_priv { 
    1617         unsigned int cw_min; 
    1618         unsigned int cw_max; 
    1619         unsigned int max_retry; 
    1620 -       unsigned int ewma_level; 
    1621         unsigned int segment_size; 
    1622         unsigned int update_interval; 
    1623         unsigned int lookaround_rate; 
    1624 --- a/net/mac80211/rc80211_minstrel_debugfs.c 
    1625 +++ b/net/mac80211/rc80211_minstrel_debugfs.c 
    1626 @@ -73,15 +73,17 @@ minstrel_stats_open(struct inode *inode, 
    1627         for (i = 0; i < mi->n_rates; i++) { 
    1628                 struct minstrel_rate *mr = &mi->r[i]; 
    1629   
    1630 -               *(p++) = (i == mi->max_tp_rate) ? 'T' : ' '; 
    1631 -               *(p++) = (i == mi->max_tp_rate2) ? 't' : ' '; 
    1632 +               *(p++) = (i == mi->max_tp_rate[0]) ? 'A' : ' '; 
    1633 +               *(p++) = (i == mi->max_tp_rate[1]) ? 'B' : ' '; 
    1634 +               *(p++) = (i == mi->max_tp_rate[2]) ? 'C' : ' '; 
    1635 +               *(p++) = (i == mi->max_tp_rate[3]) ? 'D' : ' '; 
    1636                 *(p++) = (i == mi->max_prob_rate) ? 'P' : ' '; 
    1637                 p += sprintf(p, "%3u%s", mr->bitrate / 2, 
    1638                                 (mr->bitrate & 1 ? ".5" : "  ")); 
    1639   
    1640 -               tp = mr->cur_tp / ((18000 << 10) / 96); 
    1641 -               prob = mr->cur_prob / 18; 
    1642 -               eprob = mr->probability / 18; 
    1643 +               tp = MINSTREL_TRUNC(mr->cur_tp / 10); 
    1644 +               prob = MINSTREL_TRUNC(mr->cur_prob * 1000); 
    1645 +               eprob = MINSTREL_TRUNC(mr->probability * 1000); 
    1646   
    1647                 p += sprintf(p, "  %6u.%1u   %6u.%1u   %6u.%1u        " 
    1648                                 "%3u(%3u)   %8llu    %8llu\n", 
    1649 --- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    1650 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    1651 @@ -657,11 +657,10 @@ enum sc_op_flags { 
    1652  struct ath_rate_table; 
    1653   
    1654  struct ath9k_vif_iter_data { 
    1655 -       const u8 *hw_macaddr; /* phy's hardware address, set 
    1656 -                              * before starting iteration for 
    1657 -                              * valid bssid mask. 
    1658 -                              */ 
    1659 +       u8 hw_macaddr[ETH_ALEN]; /* address of the first vif */ 
    1660         u8 mask[ETH_ALEN]; /* bssid mask */ 
    1661 +       bool has_hw_macaddr; 
    1662 + 
    1663         int naps;      /* number of AP vifs */ 
    1664         int nmeshes;   /* number of mesh vifs */ 
    1665         int nstations; /* number of station vifs */ 
    1666 --- a/drivers/net/wireless/ath/ath9k/main.c 
    1667 +++ b/drivers/net/wireless/ath/ath9k/main.c 
    1668 @@ -835,10 +835,14 @@ static void ath9k_vif_iter(void *data, u 
    1669         struct ath9k_vif_iter_data *iter_data = data; 
    1670         int i; 
    1671   
    1672 -       if (iter_data->hw_macaddr) 
    1673 +       if (iter_data->has_hw_macaddr) { 
    1674                 for (i = 0; i < ETH_ALEN; i++) 
    1675                         iter_data->mask[i] &= 
    1676                                 ~(iter_data->hw_macaddr[i] ^ mac[i]); 
    1677 +       } else { 
    1678 +               memcpy(iter_data->hw_macaddr, mac, ETH_ALEN); 
    1679 +               iter_data->has_hw_macaddr = true; 
    1680 +       } 
    1681   
    1682         switch (vif->type) { 
    1683         case NL80211_IFTYPE_AP: 
    1684 @@ -887,7 +891,6 @@ void ath9k_calculate_iter_data(struct ie 
    1685          * together with the BSSID mask when matching addresses. 
    1686          */ 
    1687         memset(iter_data, 0, sizeof(*iter_data)); 
    1688 -       iter_data->hw_macaddr = common->macaddr; 
    1689         memset(&iter_data->mask, 0xff, ETH_ALEN); 
    1690   
    1691         if (vif) 
    1692 @@ -897,6 +900,8 @@ void ath9k_calculate_iter_data(struct ie 
    1693         ieee80211_iterate_active_interfaces_atomic( 
    1694                 sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL, 
    1695                 ath9k_vif_iter, iter_data); 
    1696 + 
    1697 +       memcpy(common->macaddr, iter_data->hw_macaddr, ETH_ALEN); 
    1698  } 
    1699   
    1700  /* Called with sc->mutex held. */ 
    1701 @@ -1304,6 +1309,7 @@ static int ath9k_sta_add(struct ieee8021 
    1702         struct ath_common *common = ath9k_hw_common(sc->sc_ah); 
    1703         struct ath_node *an = (struct ath_node *) sta->drv_priv; 
    1704         struct ieee80211_key_conf ps_key = { }; 
    1705 +       int key; 
    1706   
    1707         ath_node_attach(sc, sta, vif); 
    1708   
    1709 @@ -1311,7 +1317,9 @@ static int ath9k_sta_add(struct ieee8021 
    1710             vif->type != NL80211_IFTYPE_AP_VLAN) 
    1711                 return 0; 
    1712   
    1713 -       an->ps_key = ath_key_config(common, vif, sta, &ps_key); 
    1714 +       key = ath_key_config(common, vif, sta, &ps_key); 
    1715 +       if (key > 0) 
    1716 +               an->ps_key = key; 
    1717   
    1718         return 0; 
    1719  } 
    1720 @@ -1328,6 +1336,7 @@ static void ath9k_del_ps_key(struct ath_ 
    1721             return; 
    1722   
    1723         ath_key_delete(common, &ps_key); 
    1724 +       an->ps_key = 0; 
    1725  } 
    1726   
    1727  static int ath9k_sta_remove(struct ieee80211_hw *hw, 
    1728 --- a/drivers/net/wireless/ath/ath9k/reg.h 
    1729 +++ b/drivers/net/wireless/ath/ath9k/reg.h 
    1730 @@ -1493,9 +1493,6 @@ enum { 
    1731  #define AR9271_RADIO_RF_RST                    0x20 
    1732  #define AR9271_GATE_MAC_CTL                    0x4000 
    1733   
    1734 -#define AR_STA_ID0                 0x8000 
    1735 -#define AR_STA_ID1                 0x8004 
    1736 -#define AR_STA_ID1_SADH_MASK       0x0000FFFF 
    1737  #define AR_STA_ID1_STA_AP          0x00010000 
    1738  #define AR_STA_ID1_ADHOC           0x00020000 
    1739  #define AR_STA_ID1_PWR_SAV         0x00040000 
    1740 --- a/drivers/net/wireless/ath/hw.c 
    1741 +++ b/drivers/net/wireless/ath/hw.c 
    1742 @@ -118,6 +118,12 @@ 
    1743  void ath_hw_setbssidmask(struct ath_common *common) 
    1744  { 
    1745         void *ah = common->ah; 
    1746 +       u32 id1; 
    1747 + 
    1748 +       REG_WRITE(ah, AR_STA_ID0, get_unaligned_le32(common->macaddr)); 
    1749 +       id1 = REG_READ(ah, AR_STA_ID1) & ~AR_STA_ID1_SADH_MASK; 
    1750 +       id1 |= get_unaligned_le16(common->macaddr + 4); 
    1751 +       REG_WRITE(ah, AR_STA_ID1, id1); 
    1752   
    1753         REG_WRITE(ah, AR_BSSMSKL, get_unaligned_le32(common->bssidmask)); 
    1754         REG_WRITE(ah, AR_BSSMSKU, get_unaligned_le16(common->bssidmask + 4)); 
    1755 --- a/drivers/net/wireless/ath/reg.h 
    1756 +++ b/drivers/net/wireless/ath/reg.h 
    1757 @@ -23,6 +23,10 @@ 
    1758  #define AR_MIBC_CMC            0x00000004 
    1759  #define AR_MIBC_MCS            0x00000008 
    1760   
    1761 +#define AR_STA_ID0             0x8000 
    1762 +#define AR_STA_ID1             0x8004 
    1763 +#define AR_STA_ID1_SADH_MASK   0x0000ffff 
    1764 + 
    1765  /* 
    1766   * BSSID mask registers. See ath_hw_set_bssid_mask() 
    1767   * for detailed documentation about these registers. 
     746  
     747-       wdev->conn->state = CFG80211_CONN_DEAUTH; 
     748+       wdev->conn->state = CFG80211_CONN_ASSOC_FAILED; 
     749        schedule_work(&rdev->conn_work); 
     750        return false; 
     751 } 
     752@@ -383,7 +394,13 @@ void cfg80211_sme_deauth(struct wireless 
     753  
     754 void cfg80211_sme_auth_timeout(struct wireless_dev *wdev) 
     755 { 
     756-       cfg80211_sme_free(wdev); 
     757+       struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); 
     758+ 
     759+       if (!wdev->conn) 
     760+               return; 
     761+ 
     762+       wdev->conn->state = CFG80211_CONN_AUTH_FAILED; 
     763+       schedule_work(&rdev->conn_work); 
     764 } 
     765  
     766 void cfg80211_sme_disassoc(struct wireless_dev *wdev) 
     767@@ -399,7 +416,13 @@ void cfg80211_sme_disassoc(struct wirele 
     768  
     769 void cfg80211_sme_assoc_timeout(struct wireless_dev *wdev) 
     770 { 
     771-       cfg80211_sme_disassoc(wdev); 
     772+       struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); 
     773+ 
     774+       if (!wdev->conn) 
     775+               return; 
     776+ 
     777+       wdev->conn->state = CFG80211_CONN_ASSOC_FAILED; 
     778+       schedule_work(&rdev->conn_work); 
     779 } 
     780  
     781 static int cfg80211_sme_connect(struct wireless_dev *wdev, 
  • branches/attitude_adjustment/package/mac80211/patches/310-ap_scan.patch

    r36470 r37266  
    11--- a/net/mac80211/cfg.c 
    22+++ b/net/mac80211/cfg.c 
    3 @@ -2009,7 +2009,7 @@ static int ieee80211_scan(struct wiphy * 
     3@@ -2092,7 +2092,7 @@ static int ieee80211_scan(struct wiphy * 
    44                 * the  frames sent while scanning on other channel will be 
    55                 * lost) 
  • branches/attitude_adjustment/package/mac80211/patches/400-ath_move_debug_code.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/Makefile 
    22+++ b/drivers/net/wireless/ath/Makefile 
    3 @@ -10,7 +10,7 @@ obj-$(CONFIG_ATH_COMMON)      += ath.o 
     3@@ -11,7 +11,7 @@ obj-$(CPTCFG_ATH_COMMON)      += ath.o 
    44 ath-objs :=    main.o \ 
    55                regd.o \ 
     
    99+               debug.o 
    1010  
    11 -ath-$(CONFIG_ATH_DEBUG) += debug.o 
     11-ath-$(CPTCFG_ATH_DEBUG) += debug.o 
    1212 ccflags-y += -D__CHECK_ENDIAN__ 
    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, 
    16  #endif /* CONFIG_ATH_DEBUG */ 
     15@@ -280,13 +280,6 @@ void _ath_dbg(struct ath_common *common, 
     16 #endif /* CPTCFG_ATH_DEBUG */ 
    1717  
    1818 /** Returns string describing opmode, or NULL if unknown mode. */ 
    19 -#ifdef CONFIG_ATH_DEBUG 
     19-#ifdef CPTCFG_ATH_DEBUG 
    2020 const char *ath_opmode_to_string(enum nl80211_iftype opmode); 
    2121-#else 
  • branches/attitude_adjustment/package/mac80211/patches/401-ath9k_blink_default.patch

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

    r36470 r37266  
    99  
    1010 #include "hw.h" 
    11 @@ -519,8 +520,16 @@ static int ath9k_hw_init_macaddr(struct  
     11@@ -518,8 +519,16 @@ static int ath9k_hw_init_macaddr(struct  
    1212                common->macaddr[2 * i] = eeval >> 8; 
    1313                common->macaddr[2 * i + 1] = eeval & 0xff; 
  • branches/attitude_adjustment/package/mac80211/patches/403-ath_regd_optional.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/regd.c 
    22+++ b/drivers/net/wireless/ath/regd.c 
    3 @@ -198,6 +198,10 @@ ath_reg_apply_beaconing_flags(struct wip 
     3@@ -196,6 +196,10 @@ ath_reg_apply_beaconing_flags(struct wip 
    44        struct ieee80211_channel *ch; 
    55        unsigned int i; 
    66  
    7 +#ifdef ATH_USER_REGD 
     7+#ifdef CPTCFG_ATH_USER_REGD 
    88+       return; 
    99+#endif 
     
    1212  
    1313                if (!wiphy->bands[band]) 
    14 @@ -252,6 +256,10 @@ ath_reg_apply_active_scan_flags(struct w 
     14@@ -250,6 +254,10 @@ ath_reg_apply_active_scan_flags(struct w 
    1515        struct ieee80211_channel *ch; 
    1616        const struct ieee80211_reg_rule *reg_rule; 
    1717  
    18 +#ifdef ATH_USER_REGD 
     18+#ifdef CPTCFG_ATH_USER_REGD 
    1919+       return; 
    2020+#endif 
     
    2323        if (!sband) 
    2424                return; 
    25 @@ -301,6 +309,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; 
    2828  
    29 +#ifdef ATH_USER_REGD 
     29+#ifdef CPTCFG_ATH_USER_REGD 
    3030+       return; 
    3131+#endif 
     
    3434                return; 
    3535  
    36 @@ -505,6 +517,10 @@ ath_regd_init_wiphy(struct ath_regulator 
     36@@ -503,6 +515,10 @@ ath_regd_init_wiphy(struct ath_regulator 
    3737 { 
    3838        const struct ieee80211_regdomain *regd; 
    3939  
    40 +#ifdef ATH_USER_REGD 
     40+#ifdef CPTCFG_ATH_USER_REGD 
    4141+       return 0; 
    4242+#endif 
     
    4545        wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY; 
    4646  
     47--- a/drivers/net/wireless/ath/Kconfig 
     48+++ b/drivers/net/wireless/ath/Kconfig 
     49@@ -21,6 +21,9 @@ menuconfig ATH_CARDS 
     50  
     51 if ATH_CARDS 
     52  
     53+config ATH_USER_REGD 
     54+       bool "Do not enforce EEPROM regulatory restrictions" 
     55+ 
     56 config ATH_DEBUG 
     57        bool "Atheros wireless debugging" 
     58        ---help--- 
     59--- a/.local-symbols 
     60+++ b/.local-symbols 
     61@@ -123,6 +123,7 @@ RTL8187_LEDS= 
     62 ATH_COMMON= 
     63 ATH_CARDS= 
     64 ATH_DEBUG= 
     65+ATH_USER_REGD= 
     66 ATH5K= 
     67 ATH5K_DEBUG= 
     68 ATH5K_TRACER= 
  • branches/attitude_adjustment/package/mac80211/patches/404-world_regd_fixup.patch

    r32002 r37266  
    11--- a/drivers/net/wireless/ath/regd.c 
    22+++ b/drivers/net/wireless/ath/regd.c 
    3 @@ -44,7 +44,8 @@ static int __ath_regd_init(struct ath_re 
     3@@ -42,7 +42,8 @@ static int __ath_regd_init(struct ath_re 
    44                                NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_OFDM) 
    55  
    66 /* We allow IBSS on these on a case by case basis by regulatory domain */ 
    7 -#define ATH9K_5GHZ_5150_5350   REG_RULE(5150-10, 5350+10, 40, 0, 30,\ 
    8 +#define ATH9K_5GHZ_5150_5350   REG_RULE(5150-10, 5250, 40, 0, 30, 0), \ 
    9 +                               REG_RULE(5250, 5350+10, 40, 0, 30,\ 
     7-#define ATH9K_5GHZ_5150_5350   REG_RULE(5150-10, 5350+10, 80, 0, 30,\ 
     8+#define ATH9K_5GHZ_5150_5350   REG_RULE(5150-10, 5250, 80, 0, 30, 0), \ 
     9+                               REG_RULE(5250, 5350+10, 80, 0, 30,\ 
    1010                                NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) 
    11  #define ATH9K_5GHZ_5470_5850   REG_RULE(5470-10, 5850+10, 40, 0, 30,\ 
     11 #define ATH9K_5GHZ_5470_5850   REG_RULE(5470-10, 5850+10, 80, 0, 30,\ 
    1212                                NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) 
    13 @@ -62,57 +63,56 @@ static int __ath_regd_init(struct ath_re 
     13@@ -60,57 +61,56 @@ static int __ath_regd_init(struct ath_re 
    1414 #define ATH9K_5GHZ_NO_MIDBAND  ATH9K_5GHZ_5150_5350, \ 
    1515                                ATH9K_5GHZ_5725_5850 
  • branches/attitude_adjustment/package/mac80211/patches/405-regd_no_assoc_hints.patch

    r36470 r37266  
    11--- a/net/wireless/reg.c 
    22+++ b/net/wireless/reg.c 
    3 @@ -1730,6 +1730,8 @@ void regulatory_hint_11d(struct wiphy *w 
     3@@ -1696,6 +1696,8 @@ void regulatory_hint_11d(struct wiphy *w 
    44        enum environment_cap env = ENVIRON_ANY; 
    5         struct regulatory_request *request, *lr; 
     5        struct regulatory_request *request = NULL, *lr; 
    66  
    77+       return; 
    88+ 
    9         mutex_lock(&reg_mutex); 
    10         lr = get_last_request(); 
    11   
    12 @@ -1926,6 +1928,7 @@ static void restore_regulatory_settings( 
     9        /* IE len must be evenly divisible by 2 */ 
     10        if (country_ie_len & 0x01) 
     11                return; 
     12@@ -1890,6 +1892,7 @@ static void restore_regulatory_settings( 
    1313  
    1414 void regulatory_hint_disconnect(void) 
  • branches/attitude_adjustment/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/init.c 
    22+++ b/drivers/net/wireless/ath/ath9k/init.c 
    3 @@ -727,6 +727,7 @@ static const struct ieee80211_iface_limi 
     3@@ -755,6 +755,7 @@ static const struct ieee80211_iface_limi 
    44 #endif 
    55                                 BIT(NL80211_IFTYPE_AP) | 
     
    88 }; 
    99  
    10  static const struct ieee80211_iface_combination if_comb = { 
     10  
  • branches/attitude_adjustment/package/mac80211/patches/411-ath5k_allow_adhoc_and_ap.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c 
    22+++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c 
    3 @@ -89,13 +89,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 @@ -1868,7 +1868,7 @@ ath5k_beacon_send(struct ath5k_hw *ah) 
     21@@ -1916,7 +1916,7 @@ ath5k_beacon_send(struct ath5k_hw *ah) 
    2222        } 
    2323  
     
    2828                u64 tsf = ath5k_hw_get_tsf64(ah); 
    2929                u32 tsftu = TSF_TO_TU(tsf); 
    30 @@ -1954,7 +1954,7 @@ ath5k_beacon_update_timers(struct ath5k_ 
     30@@ -2002,7 +2002,7 @@ ath5k_beacon_update_timers(struct ath5k_ 
    3131  
    3232        intval = ah->bintval & AR5K_BEACON_PERIOD; 
     
    3737                if (intval < 15) 
    3838                        ATH5K_WARN(ah, "intval %u is too low, min 15\n", 
    39 @@ -2418,6 +2418,7 @@ static const struct ieee80211_iface_limi 
     39@@ -2469,6 +2469,7 @@ static const struct ieee80211_iface_limi 
    4040                                 BIT(NL80211_IFTYPE_MESH_POINT) | 
    4141 #endif 
  • branches/attitude_adjustment/package/mac80211/patches/420-ath5k_disable_fast_cc.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath5k/reset.c 
    22+++ b/drivers/net/wireless/ath/ath5k/reset.c 
    3 @@ -1158,6 +1158,7 @@ ath5k_hw_reset(struct ath5k_hw *ah, enum 
     3@@ -1154,6 +1154,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 @@ -1165,6 +1166,7 @@ ath5k_hw_reset(struct ath5k_hw *ah, enum 
     11@@ -1161,6 +1162,7 @@ ath5k_hw_reset(struct ath5k_hw *ah, enum 
    1212         */ 
    1313        if (fast && (ah->ah_radio != AR5K_RF2413) && 
  • branches/attitude_adjustment/package/mac80211/patches/431-add_platform_eeprom_support_to_ath5k.patch

    r33583 r37266  
    11--- a/drivers/net/wireless/ath/ath5k/pci.c 
    22+++ b/drivers/net/wireless/ath/ath5k/pci.c 
    3 @@ -23,6 +23,7 @@ 
     3@@ -21,6 +21,7 @@ 
    44 #include <linux/pci-aspm.h> 
    55 #include <linux/etherdevice.h> 
     
    99 #include "ath5k.h" 
    1010 #include "debug.h" 
    11 @@ -74,7 +75,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 @@ -82,6 +83,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 @@ -125,6 +139,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; 
  • branches/attitude_adjustment/package/mac80211/patches/432-ath5k_add_pciids.patch

    r32002 r37266  
    11--- a/drivers/net/wireless/ath/ath5k/pci.c 
    22+++ b/drivers/net/wireless/ath/ath5k/pci.c 
    3 @@ -50,6 +50,8 @@ static DEFINE_PCI_DEVICE_TABLE(ath5k_pci 
     3@@ -48,6 +48,8 @@ static DEFINE_PCI_DEVICE_TABLE(ath5k_pci 
    44        { PCI_VDEVICE(ATHEROS, 0x001b) }, /* 5413 Eagle */ 
    55        { PCI_VDEVICE(ATHEROS, 0x001c) }, /* PCI-E cards */ 
  • branches/attitude_adjustment/package/mac80211/patches/440-ath5k_channel_bw_debugfs.patch

    r33583 r37266  
    1212--- a/drivers/net/wireless/ath/ath5k/debug.c 
    1313+++ b/drivers/net/wireless/ath/ath5k/debug.c 
    14 @@ -813,6 +813,89 @@ static const struct file_operations fops 
     14@@ -811,6 +811,89 @@ static const struct file_operations fops 
    1515        .llseek = default_llseek, 
    1616 }; 
     
    102102 /* debugfs: queues etc */ 
    103103  
    104 @@ -904,6 +987,9 @@ ath5k_debug_init_device(struct ath5k_hw  
     104@@ -902,6 +985,9 @@ ath5k_debug_init_device(struct ath5k_hw  
    105105        debugfs_create_file("beacon", S_IWUSR | S_IRUSR, phydir, ah, 
    106106                            &fops_beacon); 
  • branches/attitude_adjustment/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/debug.c 
    22+++ b/drivers/net/wireless/ath/ath9k/debug.c 
    3 @@ -2003,6 +2003,53 @@ void ath9k_get_et_stats(struct ieee80211 
    4         WARN_ON(i != ATH9K_SSTATS_LEN); 
     3@@ -1735,6 +1735,53 @@ void ath9k_deinit_debug(struct ath_softc 
     4        } 
    55 } 
    66  
     
    5555 { 
    5656        struct ath_common *common = ath9k_hw_common(ah); 
    57 @@ -2020,6 +2067,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
     57@@ -1752,6 +1799,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
    5858  
    5959        ath9k_dfs_init_debug(sc); 
  • branches/attitude_adjustment/package/mac80211/patches/501-ath9k-eeprom_endianess.patch

    r36470 r37266  
    7272--- a/drivers/net/wireless/ath/ath9k/hw.h 
    7373+++ b/drivers/net/wireless/ath/ath9k/hw.h 
    74 @@ -740,6 +740,7 @@ enum ath_cal_list { 
     74@@ -739,6 +739,7 @@ enum ath_cal_list { 
    7575 #define AH_USE_EEPROM   0x1 
    7676 #define AH_UNPLUGGED    0x2 /* The card has been physically removed. */ 
     
    8282--- a/drivers/net/wireless/ath/ath9k/init.c 
    8383+++ b/drivers/net/wireless/ath/ath9k/init.c 
    84 @@ -587,6 +587,8 @@ static int ath9k_init_softc(u16 devid, s 
     84@@ -613,6 +613,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; 
     
    9393--- a/include/linux/ath9k_platform.h 
    9494+++ b/include/linux/ath9k_platform.h 
    95 @@ -29,6 +29,7 @@ struct ath9k_platform_data { 
     95@@ -31,6 +31,7 @@ struct ath9k_platform_data { 
    9696        u32 gpio_mask; 
    9797        u32 gpio_val; 
  • branches/attitude_adjustment/package/mac80211/patches/502-ath9k_ahb_init.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/init.c 
    22+++ b/drivers/net/wireless/ath/ath9k/init.c 
    3 @@ -965,23 +965,23 @@ static int __init ath9k_init(void) 
     3@@ -1011,23 +1011,23 @@ static int __init ath9k_init(void) 
    44                goto err_out; 
    55        } 
  • branches/attitude_adjustment/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/hw.c 
    22+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    3 @@ -1946,8 +1946,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     3@@ -2010,8 +2010,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    44                REG_WRITE(ah, AR_OBS, 8); 
    55  
  • branches/attitude_adjustment/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -689,6 +689,7 @@ struct ath_softc { 
     3@@ -701,6 +701,7 @@ struct ath_softc { 
    44        struct ieee80211_hw *hw; 
    55        struct device *dev; 
     
    99        struct survey_info survey[ATH9K_NUM_CHANNELS]; 
    1010  
    11 @@ -893,6 +894,7 @@ struct fft_sample_ht20 { 
     11@@ -905,6 +906,7 @@ struct fft_sample_ht20 { 
    1212        u8 data[SPECTRAL_HT20_NUM_BINS]; 
    1313 } __packed; 
     
    1919--- a/drivers/net/wireless/ath/ath9k/debug.c 
    2020+++ b/drivers/net/wireless/ath/ath9k/debug.c 
    21 @@ -2050,6 +2050,50 @@ static const struct file_operations fops 
     21@@ -1782,6 +1782,50 @@ static const struct file_operations fops 
    2222        .owner = THIS_MODULE 
    2323 }; 
     
    7070 { 
    7171        struct ath_common *common = ath9k_hw_common(ah); 
    72 @@ -2069,6 +2113,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
     72@@ -1801,6 +1845,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
    7373  
    7474        debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc, 
     
    8181--- a/drivers/net/wireless/ath/ath9k/main.c 
    8282+++ b/drivers/net/wireless/ath/ath9k/main.c 
    83 @@ -1136,7 +1136,7 @@ int ath9k_spectral_scan_config(struct ie 
     83@@ -1139,7 +1139,7 @@ int ath9k_spectral_scan_config(struct ie 
    8484        return 0; 
    8585 } 
     
    9090        struct ath_softc *sc = hw->priv; 
    9191        struct ath_hw *ah = sc->sc_ah; 
    92 @@ -1190,9 +1190,11 @@ static int ath9k_config(struct ieee80211 
    93   
    94         if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) { 
    95                 struct ieee80211_channel *curchan = hw->conf.channel; 
     92@@ -1195,9 +1195,11 @@ static int ath9k_config(struct ieee80211 
     93                struct ieee80211_channel *curchan = hw->conf.chandef.chan; 
     94                enum nl80211_channel_type channel_type = 
     95                        cfg80211_get_chandef_type(&conf->chandef); 
    9696+               struct ath9k_channel *hchan; 
    9797                int pos = curchan->hw_value; 
     
    102102                if (ah->curchan) 
    103103                        old_pos = ah->curchan - &ah->channels[0]; 
    104 @@ -1235,7 +1237,23 @@ static int ath9k_config(struct ieee80211 
     104@@ -1233,7 +1235,23 @@ static int ath9k_config(struct ieee80211 
    105105                        memset(&sc->survey[pos], 0, sizeof(struct survey_info)); 
    106106                } 
  • branches/attitude_adjustment/package/mac80211/patches/520-mac80211_cur_txpower.patch

    r36470 r37266  
    11--- a/include/net/mac80211.h 
    22+++ b/include/net/mac80211.h 
    3 @@ -1554,6 +1554,7 @@ struct ieee80211_hw { 
     3@@ -1616,6 +1616,7 @@ struct ieee80211_hw { 
    44        u8 max_tx_aggregation_subframes; 
    55        u8 offchannel_tx_hw_queue; 
     
    88        u16 radiotap_vht_details; 
    99        netdev_features_t netdev_features; 
    10  }; 
     10        u8 uapsd_queues; 
    1111--- a/net/mac80211/cfg.c 
    1212+++ b/net/mac80211/cfg.c 
    13 @@ -2190,7 +2190,9 @@ static int ieee80211_get_tx_power(struct 
     13@@ -2273,7 +2273,9 @@ static int ieee80211_get_tx_power(struct 
    1414        struct ieee80211_local *local = wiphy_priv(wiphy); 
    1515        struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); 
     
    2424--- a/net/mac80211/main.c 
    2525+++ b/net/mac80211/main.c 
    26 @@ -166,6 +166,7 @@ static u32 ieee80211_hw_conf_chan(struct 
     26@@ -167,6 +167,7 @@ static u32 ieee80211_hw_conf_chan(struct 
    2727  
    2828        if (local->hw.conf.power_level != power) { 
  • branches/attitude_adjustment/package/mac80211/patches/521-ath9k_cur_txpower.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/main.c 
    22+++ b/drivers/net/wireless/ath/ath9k/main.c 
    3 @@ -1260,6 +1260,8 @@ int ath9k_config(struct ieee80211_hw *hw 
     3@@ -1258,6 +1258,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 @@ -1279,6 +1281,7 @@ int ath9k_config(struct ieee80211_hw *hw 
     12@@ -1294,6 +1296,7 @@ int ath9k_config(struct ieee80211_hw *hw 
    1313                sc->config.txpowlimit = 2 * conf->power_level; 
    1414                ath9k_cmn_update_txpow(ah, sc->curtxpow, 
  • branches/attitude_adjustment/package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch

    r36470 r37266  
    1 --- a/include/net/mac80211.h 
    2 +++ b/include/net/mac80211.h 
    3 @@ -839,6 +839,9 @@ enum mac80211_rx_flags { 
    4   * @signal: signal strength when receiving this frame, either in dBm, in dB or 
    5   *     unspecified depending on the hardware capabilities flags 
    6   *     @IEEE80211_HW_SIGNAL_* 
    7 + * @chains: bitmask of receive chains for which separate signal strength 
    8 + *     values were filled. 
    9 + * @chain_signal: per-chain signal strength, same format as @signal 
    10   * @antenna: antenna used 
    11   * @rate_idx: index of data rate into band's supported rates or MCS index if 
    12   *     HT or VHT is used (%RX_FLAG_HT/%RX_FLAG_VHT) 
    13 @@ -870,6 +873,8 @@ struct ieee80211_rx_status { 
    14         u8 band; 
    15         u8 antenna; 
    16         s8 signal; 
    17 +       u8 chains; 
    18 +       s8 chain_signal[4]; 
    19         u8 ampdu_delimiter_crc; 
    20         u8 vendor_radiotap_align; 
    21         u8 vendor_radiotap_oui[3]; 
    22 --- a/net/mac80211/sta_info.h 
    23 +++ b/net/mac80211/sta_info.h 
    24 @@ -342,6 +342,11 @@ struct sta_info { 
    25         int last_signal; 
    26         struct ewma avg_signal; 
    27         int last_ack_signal; 
    28 + 
    29 +       u8 chains; 
    30 +       s8 chain_signal_last[4]; 
    31 +       struct ewma chain_signal_avg[4]; 
    32 + 
    33         /* Plus 1 for non-QoS frames */ 
    34         __le16 last_seq_ctrl[IEEE80211_NUM_TIDS + 1]; 
    35   
    36 --- a/net/mac80211/rx.c 
    37 +++ b/net/mac80211/rx.c 
    38 @@ -1383,6 +1383,7 @@ ieee80211_rx_h_sta_process(struct ieee80 
    39         struct sk_buff *skb = rx->skb; 
    40         struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); 
    41         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; 
    42 +       int i; 
    43   
    44         if (!sta) 
    45                 return RX_CONTINUE; 
    46 @@ -1433,6 +1434,19 @@ ieee80211_rx_h_sta_process(struct ieee80 
    47                 ewma_add(&sta->avg_signal, -status->signal); 
    48         } 
    49   
    50 +       if (status->chains) { 
    51 +               sta->chains = status->chains; 
    52 +               for (i = 0; i < 4; i++) { 
    53 +                       int signal = status->chain_signal[i]; 
    54 + 
    55 +                       if (!(status->chains & BIT(i))) 
    56 +                               continue; 
    57 + 
    58 +                       sta->chain_signal_last[i] = signal; 
    59 +                       ewma_add(&sta->chain_signal_avg[i], -signal); 
    60 +               } 
    61 +       } 
    62 + 
    63         /* 
    64          * Change STA power saving mode only at the end of a frame 
    65          * exchange sequence. 
    66 --- a/net/mac80211/sta_info.c 
    67 +++ b/net/mac80211/sta_info.c 
    68 @@ -353,6 +353,8 @@ struct sta_info *sta_info_alloc(struct i 
    69         do_posix_clock_monotonic_gettime(&uptime); 
    70         sta->last_connected = uptime.tv_sec; 
    71         ewma_init(&sta->avg_signal, 1024, 8); 
    72 +       for (i = 0; i < ARRAY_SIZE(sta->chain_signal_avg); i++) 
    73 +               ewma_init(&sta->chain_signal_avg[i], 1024, 8); 
    74   
    75         if (sta_prepare_rate_control(local, sta, gfp)) { 
    76                 kfree(sta); 
    77 --- a/include/net/cfg80211.h 
    78 +++ b/include/net/cfg80211.h 
    79 @@ -721,6 +721,8 @@ struct station_parameters { 
    80   * @STATION_INFO_LOCAL_PM: @local_pm filled 
    81   * @STATION_INFO_PEER_PM: @peer_pm filled 
    82   * @STATION_INFO_NONPEER_PM: @nonpeer_pm filled 
    83 + * @STATION_INFO_CHAIN_SIGNAL: @chain_signal filled 
    84 + * @STATION_INFO_CHAIN_SIGNAL_AVG: @chain_signal_avg filled 
    85   */ 
    86  enum station_info_flags { 
    87         STATION_INFO_INACTIVE_TIME      = 1<<0, 
    88 @@ -749,6 +751,8 @@ enum station_info_flags { 
    89         STATION_INFO_NONPEER_PM         = 1<<23, 
    90         STATION_INFO_RX_BYTES64         = 1<<24, 
    91         STATION_INFO_TX_BYTES64         = 1<<25, 
    92 +       STATION_INFO_CHAIN_SIGNAL       = 1<<26, 
    93 +       STATION_INFO_CHAIN_SIGNAL_AVG   = 1<<27, 
    94  }; 
    95   
    96  /** 
    97 @@ -842,6 +846,9 @@ struct sta_bss_parameters { 
    98   *     For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. 
    99   * @signal_avg: Average signal strength, type depends on the wiphy's signal_type. 
    100   *     For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_. 
    101 + * @chains: bitmask for filled values in @chain_signal, @chain_signal_avg 
    102 + * @chain_signal: per-chain signal strength of last received packet in dBm 
    103 + * @chain_signal_avg: per-chain signal strength average in dBm 
    104   * @txrate: current unicast bitrate from this station 
    105   * @rxrate: current unicast bitrate to this station 
    106   * @rx_packets: packets received from this station 
    107 @@ -877,6 +884,11 @@ struct station_info { 
    108         u8 plink_state; 
    109         s8 signal; 
    110         s8 signal_avg; 
    111 + 
    112 +       u8 chains; 
    113 +       s8 chain_signal[4]; 
    114 +       s8 chain_signal_avg[4]; 
    115 + 
    116         struct rate_info txrate; 
    117         struct rate_info rxrate; 
    118         u32 rx_packets; 
    1191--- a/drivers/net/wireless/ath/ath9k/mac.h 
    1202+++ b/drivers/net/wireless/ath/ath9k/mac.h 
     
    13618--- a/drivers/net/wireless/ath/ath9k/recv.c 
    13719+++ b/drivers/net/wireless/ath/ath9k/recv.c 
    138 @@ -937,6 +937,7 @@ static int ath9k_rx_skb_preprocess(struc 
    139                                    bool *decrypt_error) 
    140  { 
    141         struct ath_hw *ah = common->ah; 
     20@@ -939,6 +939,7 @@ static int ath9k_rx_skb_preprocess(struc 
     21        struct ath_hw *ah = sc->sc_ah; 
     22        struct ath_common *common = ath9k_hw_common(ah); 
     23        bool discard_current = sc->rx.discard_next; 
    14224+       int i, j; 
    14325  
    144         /* 
    145          * everything but the rate is checked here, the rate check is done 
    146 @@ -962,6 +963,20 @@ static int ath9k_rx_skb_preprocess(struc 
     26        sc->rx.discard_next = rx_stats->rs_more; 
     27        if (discard_current) 
     28@@ -968,6 +969,21 @@ static int ath9k_rx_skb_preprocess(struc 
    14729        if (rx_stats->rs_moreaggr) 
    14830                rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL; 
     
    16244+       } 
    16345+ 
     46+ 
     47        sc->rx.discard_next = false; 
    16448        return 0; 
    16549 } 
    166   
    167 @@ -1070,7 +1085,7 @@ static int ath_process_fft(struct ath_so 
     50@@ -1077,7 +1093,7 @@ static int ath_process_fft(struct ath_so 
    16851        fft_sample.tlv.length = __cpu_to_be16(length); 
    16952  
     
    17659--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c 
    17760+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c 
    178 @@ -475,12 +475,12 @@ int ath9k_hw_process_rxdesc_edma(struct  
     61@@ -476,12 +476,12 @@ int ath9k_hw_process_rxdesc_edma(struct  
    17962  
    18063        /* XXX: Keycache */ 
     
    19780--- a/drivers/net/wireless/ath/ath9k/mac.c 
    19881+++ b/drivers/net/wireless/ath/ath9k/mac.c 
    199 @@ -553,25 +553,25 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a 
     82@@ -554,25 +554,25 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a 
    20083  
    20184        if (ads.ds_rxstatus8 & AR_PostDelimCRCErr) { 
     
    235118        } 
    236119        if (ads.ds_rxstatus8 & AR_RxKeyIdxValid) 
    237 --- a/drivers/net/wireless/ath/ath9k/debug.c 
    238 +++ b/drivers/net/wireless/ath/ath9k/debug.c 
    239 @@ -940,12 +940,12 @@ void ath_debug_stat_rx(struct ath_softc  
    240  #ifdef CONFIG_ATH9K_MAC_DEBUG 
    241         spin_lock(&sc->debug.samp_lock); 
    242         RX_SAMP_DBG(jiffies) = jiffies; 
    243 -       RX_SAMP_DBG(rssi_ctl0) = rs->rs_rssi_ctl0; 
    244 -       RX_SAMP_DBG(rssi_ctl1) = rs->rs_rssi_ctl1; 
    245 -       RX_SAMP_DBG(rssi_ctl2) = rs->rs_rssi_ctl2; 
    246 -       RX_SAMP_DBG(rssi_ext0) = rs->rs_rssi_ext0; 
    247 -       RX_SAMP_DBG(rssi_ext1) = rs->rs_rssi_ext1; 
    248 -       RX_SAMP_DBG(rssi_ext2) = rs->rs_rssi_ext2; 
    249 +       RX_SAMP_DBG(rssi_ctl0) = rs->rs_rssi_ctl[0]; 
    250 +       RX_SAMP_DBG(rssi_ctl1) = rs->rs_rssi_ctl[1]; 
    251 +       RX_SAMP_DBG(rssi_ctl2) = rs->rs_rssi_ctl[2]; 
    252 +       RX_SAMP_DBG(rssi_ext0) = rs->rs_rssi_ext[0]; 
    253 +       RX_SAMP_DBG(rssi_ext1) = rs->rs_rssi_ext[1]; 
    254 +       RX_SAMP_DBG(rssi_ext2) = rs->rs_rssi_ext[2]; 
    255         RX_SAMP_DBG(antenna) = rs->rs_antenna; 
    256         RX_SAMP_DBG(rssi) = rs->rs_rssi; 
    257         RX_SAMP_DBG(rate) = rs->rs_rate; 
    258 --- a/include/uapi/linux/nl80211.h 
    259 +++ b/include/uapi/linux/nl80211.h 
    260 @@ -1918,6 +1918,8 @@ enum nl80211_sta_bss_param { 
    261   * @NL80211_STA_INFO_PEER_PM: peer mesh STA link-specific power mode 
    262   * @NL80211_STA_INFO_NONPEER_PM: neighbor mesh STA power save mode towards 
    263   *     non-peer STA 
    264 + * @NL80211_STA_INFO_CHAIN_SIGNAL: per-chain signal strength of last PPDU 
    265 + * @NL80211_STA_INFO_CHAIN_SIGNAL_AVG: per-chain signal strength average 
    266   * @__NL80211_STA_INFO_AFTER_LAST: internal 
    267   * @NL80211_STA_INFO_MAX: highest possible station info attribute 
    268   */ 
    269 @@ -1947,6 +1949,8 @@ enum nl80211_sta_info { 
    270         NL80211_STA_INFO_NONPEER_PM, 
    271         NL80211_STA_INFO_RX_BYTES64, 
    272         NL80211_STA_INFO_TX_BYTES64, 
    273 +       NL80211_STA_INFO_CHAIN_SIGNAL, 
    274 +       NL80211_STA_INFO_CHAIN_SIGNAL_AVG, 
    275   
    276         /* keep last */ 
    277         __NL80211_STA_INFO_AFTER_LAST, 
    278 --- a/net/wireless/nl80211.c 
    279 +++ b/net/wireless/nl80211.c 
    280 @@ -3082,6 +3082,32 @@ static bool nl80211_put_sta_rate(struct  
    281         return true; 
    282  } 
    283   
    284 +static bool nl80211_put_signal(struct sk_buff *msg, u8 mask, s8 *signal, 
    285 +                              int id) 
    286 +{ 
    287 +       void *attr; 
    288 +       int i = 0; 
    289 + 
    290 +       if (!mask) 
    291 +               return true; 
    292 + 
    293 +       attr = nla_nest_start(msg, id); 
    294 +       if (!attr) 
    295 +               return false; 
    296 + 
    297 +       for (i = 0; i < 4; i++) { 
    298 +               if (!(mask & BIT(i))) 
    299 +                       continue; 
    300 + 
    301 +               if (nla_put_u8(msg, i, signal[i])) 
    302 +                       return false; 
    303 +       } 
    304 + 
    305 +       nla_nest_end(msg, attr); 
    306 + 
    307 +       return true; 
    308 +} 
    309 + 
    310  static int nl80211_send_station(struct sk_buff *msg, u32 portid, u32 seq, 
    311                                 int flags, 
    312                                 struct cfg80211_registered_device *rdev, 
    313 @@ -3153,6 +3179,18 @@ static int nl80211_send_station(struct s 
    314         default: 
    315                 break; 
    316         } 
    317 +       if (sinfo->filled & STATION_INFO_CHAIN_SIGNAL) { 
    318 +               if (!nl80211_put_signal(msg, sinfo->chains, 
    319 +                                       sinfo->chain_signal, 
    320 +                                       NL80211_STA_INFO_CHAIN_SIGNAL)) 
    321 +                       goto nla_put_failure; 
    322 +       } 
    323 +       if (sinfo->filled & STATION_INFO_CHAIN_SIGNAL_AVG) { 
    324 +               if (!nl80211_put_signal(msg, sinfo->chains, 
    325 +                                       sinfo->chain_signal_avg, 
    326 +                                       NL80211_STA_INFO_CHAIN_SIGNAL_AVG)) 
    327 +                       goto nla_put_failure; 
    328 +       } 
    329         if (sinfo->filled & STATION_INFO_TX_BITRATE) { 
    330                 if (!nl80211_put_sta_rate(msg, &sinfo->txrate, 
    331                                           NL80211_STA_INFO_TX_BITRATE)) 
    332 --- a/net/mac80211/cfg.c 
    333 +++ b/net/mac80211/cfg.c 
    334 @@ -445,6 +445,7 @@ static void sta_set_sinfo(struct sta_inf 
    335         struct ieee80211_sub_if_data *sdata = sta->sdata; 
    336         struct ieee80211_local *local = sdata->local; 
    337         struct timespec uptime; 
    338 +       int i; 
    339   
    340         sinfo->generation = sdata->local->sta_generation; 
    341   
    342 @@ -484,6 +485,17 @@ static void sta_set_sinfo(struct sta_inf 
    343                         sinfo->signal = (s8)sta->last_signal; 
    344                 sinfo->signal_avg = (s8) -ewma_read(&sta->avg_signal); 
    345         } 
    346 +       if (sta->chains) { 
    347 +               sinfo->filled |= STATION_INFO_CHAIN_SIGNAL | 
    348 +                                STATION_INFO_CHAIN_SIGNAL_AVG; 
    349 + 
    350 +               sinfo->chains = sta->chains; 
    351 +               for (i = 0; i < ARRAY_SIZE(sinfo->chain_signal); i++) { 
    352 +                       sinfo->chain_signal[i] = sta->chain_signal_last[i]; 
    353 +                       sinfo->chain_signal_avg[i] = 
    354 +                               (s8) -ewma_read(&sta->chain_signal_avg[i]); 
    355 +               } 
    356 +       } 
    357   
    358         sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate); 
    359         sta_set_rate_info_rx(sta, &sinfo->rxrate); 
    360120--- a/drivers/net/wireless/ath/ath9k/dfs.c 
    361121+++ b/drivers/net/wireless/ath/ath9k/dfs.c 
    362 @@ -164,8 +164,8 @@ void ath9k_dfs_process_phyerr(struct ath 
     122@@ -158,8 +158,8 @@ void ath9k_dfs_process_phyerr(struct ath 
    363123                return; 
    364124        } 
  • branches/attitude_adjustment/package/mac80211/patches/523-mac80211_configure_antenna_gain.patch

    r36470 r37266  
    11--- a/include/net/mac80211.h 
    22+++ b/include/net/mac80211.h 
    3 @@ -978,6 +978,7 @@ enum ieee80211_smps_mode { 
     3@@ -999,6 +999,7 @@ enum ieee80211_smps_mode { 
    44  * 
    55  * @power_level: requested transmit power (in dBm), backward compatibility 
     
    77+ * @max_antenna_gain: maximum antenna gain adjusted by user config (in dBi) 
    88  * 
    9   * @channel: the channel to tune to 
    10   * @channel_type: the channel (HT) type 
    11 @@ -1000,6 +1001,7 @@ struct ieee80211_conf { 
     9  * @chandef: the channel definition to tune to 
     10  * @radar_enabled: whether radar detection is enabled 
     11@@ -1020,6 +1021,7 @@ struct ieee80211_conf { 
    1212        u32 flags; 
    1313        int power_level, dynamic_ps_timeout; 
     
    1919--- a/net/mac80211/ieee80211_i.h 
    2020+++ b/net/mac80211/ieee80211_i.h 
    21 @@ -1116,6 +1116,7 @@ struct ieee80211_local { 
     21@@ -1126,6 +1126,7 @@ struct ieee80211_local { 
    2222        int dynamic_ps_forced_timeout; 
    2323  
     
    2929--- a/include/uapi/linux/nl80211.h 
    3030+++ b/include/uapi/linux/nl80211.h 
    31 @@ -1654,6 +1654,8 @@ enum nl80211_attrs { 
    32         NL80211_ATTR_STA_CAPABILITY, 
    33         NL80211_ATTR_STA_EXT_CAPABILITY, 
     31@@ -1736,6 +1736,8 @@ enum nl80211_attrs { 
     32  
     33        NL80211_ATTR_PEER_AID, 
    3434  
    3535+       NL80211_ATTR_WIPHY_ANTENNA_GAIN, 
     
    4040--- a/net/wireless/nl80211.c 
    4141+++ b/net/wireless/nl80211.c 
    42 @@ -370,6 +370,7 @@ static const struct nla_policy nl80211_p 
    43         [NL80211_ATTR_MAC_ADDRS] = { .type = NLA_NESTED }, 
    44         [NL80211_ATTR_STA_CAPABILITY] = { .type = NLA_U16 }, 
    45         [NL80211_ATTR_STA_EXT_CAPABILITY] = { .type = NLA_BINARY, }, 
     42@@ -349,6 +349,7 @@ static const struct nla_policy nl80211_p 
     43        [NL80211_ATTR_IE_RIC] = { .type = NLA_BINARY, 
     44                                  .len = IEEE80211_MAX_DATA_LEN }, 
     45        [NL80211_ATTR_PEER_AID] = { .type = NLA_U16 }, 
    4646+       [NL80211_ATTR_WIPHY_ANTENNA_GAIN] = { .type = NLA_U32 }, 
    4747 }; 
    4848  
    4949 /* policy for the key attributes */ 
    50 @@ -1706,6 +1707,22 @@ static int nl80211_set_wiphy(struct sk_b 
     50@@ -1991,6 +1992,22 @@ static int nl80211_set_wiphy(struct sk_b 
    5151                        goto bad_res; 
    5252        } 
     
    7373--- a/net/mac80211/cfg.c 
    7474+++ b/net/mac80211/cfg.c 
    75 @@ -2212,6 +2212,19 @@ static int ieee80211_get_tx_power(struct 
     75@@ -2283,6 +2283,19 @@ static int ieee80211_get_tx_power(struct 
    7676        return 0; 
    7777 } 
     
    9393                                  const u8 *addr) 
    9494 { 
    95 @@ -3375,6 +3388,7 @@ struct cfg80211_ops mac80211_config_ops  
     95@@ -3474,6 +3487,7 @@ struct cfg80211_ops mac80211_config_ops  
    9696        .set_wiphy_params = ieee80211_set_wiphy_params, 
    9797        .set_tx_power = ieee80211_set_tx_power, 
     
    103103--- a/include/net/cfg80211.h 
    104104+++ b/include/net/cfg80211.h 
    105 @@ -1862,6 +1862,7 @@ struct cfg80211_gtk_rekey_data { 
     105@@ -1970,6 +1970,7 @@ struct cfg80211_update_ft_ies_params { 
    106106  *     (as advertised by the nl80211 feature flag.) 
    107107  * @get_tx_power: store the current TX power into the dbm variable; 
     
    111111  * @set_wds_peer: set the WDS peer for a WDS interface 
    112112  * 
    113 @@ -2071,6 +2072,7 @@ struct cfg80211_ops { 
     113@@ -2189,6 +2190,7 @@ struct cfg80211_ops { 
    114114                                enum nl80211_tx_power_setting type, int mbm); 
    115115        int     (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, 
     
    123123@@ -101,7 +101,7 @@ static u32 ieee80211_hw_conf_chan(struct 
    124124        struct ieee80211_sub_if_data *sdata; 
    125         struct ieee80211_channel *chan; 
     125        struct cfg80211_chan_def chandef = {}; 
    126126        u32 changed = 0; 
    127127-       int power; 
    128128+       int power, ant_gain, max_power; 
    129         enum nl80211_channel_type channel_type; 
    130129        u32 offchannel_flag; 
    131         bool scanning = false; 
    132 @@ -164,8 +164,21 @@ static u32 ieee80211_hw_conf_chan(struct 
     130  
     131        offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL; 
     132@@ -165,8 +165,21 @@ static u32 ieee80211_hw_conf_chan(struct 
    133133        } 
    134134        rcu_read_unlock(); 
    135135  
    136136-       if (local->hw.conf.power_level != power) { 
    137 +       max_power = chan->max_reg_power; 
    138 +       ant_gain = chan->max_antenna_gain; 
     137+       max_power = chandef.chan->max_reg_power; 
     138+       ant_gain = chandef.chan->max_antenna_gain; 
    139139+       if (local->user_antenna_gain > 0) { 
    140140+               if (local->user_antenna_gain > ant_gain) { 
     
    153153                local->hw.conf.power_level = power; 
    154154        } 
    155 @@ -612,6 +625,7 @@ struct ieee80211_hw *ieee80211_alloc_hw( 
     155@@ -597,6 +610,7 @@ struct ieee80211_hw *ieee80211_alloc_hw( 
    156156                                         IEEE80211_RADIOTAP_MCS_HAVE_BW; 
    157157        local->hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI | 
    158158                                         IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH; 
    159159+       local->user_antenna_gain = 0; 
     160        local->hw.uapsd_queues = IEEE80211_DEFAULT_UAPSD_QUEUES; 
     161        local->hw.uapsd_max_sp_len = IEEE80211_DEFAULT_MAX_SP_LEN; 
    160162        local->user_power_level = IEEE80211_UNSET_POWER_LEVEL; 
    161         wiphy->ht_capa_mod_mask = &mac80211_ht_capa_mod_mask; 
    162   
  • branches/attitude_adjustment/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch

    r36470 r37266  
    1111--- a/drivers/net/wireless/ath/ath9k/hw.c 
    1212+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    13 @@ -2817,7 +2817,7 @@ void ath9k_hw_apply_txpower(struct ath_h 
     13@@ -2847,7 +2847,7 @@ void ath9k_hw_apply_txpower(struct ath_h 
    1414        channel = chan->chan; 
    1515        chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER); 
     
    2222--- a/drivers/net/wireless/ath/ath9k/main.c 
    2323+++ b/drivers/net/wireless/ath/ath9k/main.c 
    24 @@ -1277,7 +1277,10 @@ int ath9k_config(struct ieee80211_hw *hw 
     24@@ -1292,7 +1292,10 @@ int ath9k_config(struct ieee80211_hw *hw 
    2525        } 
    2626  
  • branches/attitude_adjustment/package/mac80211/patches/530-ath9k_extra_leds.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/ath9k.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ath9k.h 
    3 @@ -551,6 +551,9 @@ struct ath9k_wow_pattern { 
     3@@ -557,6 +557,9 @@ struct ath9k_wow_pattern { 
    44 void ath_init_leds(struct ath_softc *sc); 
    55 void ath_deinit_leds(struct ath_softc *sc); 
     
    1111 static inline void ath_init_leds(struct ath_softc *sc) 
    1212 { 
    13 @@ -685,6 +688,13 @@ enum spectral_mode { 
     13@@ -697,6 +700,13 @@ enum spectral_mode { 
    1414        SPECTRAL_CHANSCAN, 
    1515 }; 
     
    2525        struct ieee80211_hw *hw; 
    2626        struct device *dev; 
    27 @@ -726,9 +736,8 @@ struct ath_softc { 
     27@@ -739,9 +749,8 @@ struct ath_softc { 
    2828        struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS]; 
    2929  
    30  #ifdef CONFIG_MAC80211_LEDS 
     30 #ifdef CPTCFG_MAC80211_LEDS 
    3131-       bool led_registered; 
    3232-       char led_name[32]; 
     
    163163--- a/drivers/net/wireless/ath/ath9k/init.c 
    164164+++ b/drivers/net/wireless/ath/ath9k/init.c 
    165 @@ -870,7 +870,7 @@ int ath9k_init_device(u16 devid, struct  
    166   
    167  #ifdef CONFIG_MAC80211_LEDS 
     165@@ -918,7 +918,7 @@ int ath9k_init_device(u16 devid, struct  
     166  
     167 #ifdef CPTCFG_MAC80211_LEDS 
    168168        /* must be initialized before ieee80211_register_hw */ 
    169169-       sc->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(sc->hw, 
     
    174174--- a/drivers/net/wireless/ath/ath9k/debug.c 
    175175+++ b/drivers/net/wireless/ath/ath9k/debug.c 
    176 @@ -1482,6 +1482,61 @@ static const struct file_operations fops 
     176@@ -1825,6 +1825,61 @@ static const struct file_operations fops 
    177177        .llseek = default_llseek, 
    178178 }; 
     
    233233+#endif 
    234234+ 
    235  #ifdef CONFIG_ATH9K_MAC_DEBUG 
    236   
    237  void ath9k_debug_samp_bb_mac(struct ath_softc *sc) 
    238 @@ -2115,6 +2170,10 @@ int ath9k_init_debug(struct ath_hw *ah) 
     235  
     236 int ath9k_init_debug(struct ath_hw *ah) 
     237 { 
     238@@ -1847,6 +1902,10 @@ int ath9k_init_debug(struct ath_hw *ah) 
    239239                            &fops_eeprom); 
    240240        debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 
  • branches/attitude_adjustment/package/mac80211/patches/531-ath9k_extra_platform_leds.patch

    r36470 r37266  
    11--- a/include/linux/ath9k_platform.h 
    22+++ b/include/linux/ath9k_platform.h 
    3 @@ -33,6 +33,9 @@ struct ath9k_platform_data { 
     3@@ -35,6 +35,9 @@ struct ath9k_platform_data { 
    44        bool is_clk_25mhz; 
    55        int (*get_mac_revision)(void); 
     
    1313--- a/drivers/net/wireless/ath/ath9k/gpio.c 
    1414+++ b/drivers/net/wireless/ath/ath9k/gpio.c 
    15 @@ -14,6 +14,7 @@ 
    16   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 
     15@@ -15,6 +15,7 @@ 
    1716  */ 
    1817  
     18 #include "ath9k.h" 
    1919+#include <linux/ath9k_platform.h> 
    20  #include "ath9k.h" 
    2120  
    2221 /********************************/ 
     22 /*      LED functions          */ 
    2323@@ -88,6 +89,24 @@ int ath_create_gpio_led(struct ath_softc 
    2424        return ret; 
  • branches/attitude_adjustment/package/mac80211/patches/550-ath9k_reduce_ani_interval.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/ani.h 
    22+++ b/drivers/net/wireless/ath/ath9k/ani.h 
    3 @@ -51,7 +51,7 @@ 
     3@@ -38,7 +38,7 @@ 
    44 #define ATH9K_ANI_PERIOD                  300 
    55  
    66 /* in ms */ 
    77-#define ATH9K_ANI_POLLINTERVAL            1000 
    8 +#define ATH9K_ANI_POLLINTERVAL            100 
     8+#define ATH9K_ANI_POLLINTERVAL            300 
    99  
    10  #define HAL_NOISE_IMMUNE_MAX              4 
    11  #define HAL_SPUR_IMMUNE_MAX               7 
     10 #define ATH9K_SIG_FIRSTEP_SETTING_MIN     0 
     11 #define ATH9K_SIG_FIRSTEP_SETTING_MAX     20 
  • branches/attitude_adjustment/package/mac80211/patches/552-ath9k_rx_dma_stop_check.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/mac.c 
    22+++ b/drivers/net/wireless/ath/ath9k/mac.c 
    3 @@ -689,7 +689,7 @@ bool ath9k_hw_stopdmarecv(struct ath_hw  
     3@@ -705,7 +705,7 @@ bool ath9k_hw_stopdmarecv(struct ath_hw  
    44 { 
    55 #define AH_RX_STOP_DMA_TIMEOUT 10000   /* usec */ 
     
    1010  
    1111        /* Enable access to the DMA observation bus */ 
    12 @@ -719,6 +719,16 @@ bool ath9k_hw_stopdmarecv(struct ath_hw  
     12@@ -735,6 +735,16 @@ bool ath9k_hw_stopdmarecv(struct ath_hw  
    1313        } 
    1414  
  • branches/attitude_adjustment/package/mac80211/patches/553-ath9k_debugfs_diag.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/debug.c 
    22+++ b/drivers/net/wireless/ath/ath9k/debug.c 
    3 @@ -2149,6 +2149,50 @@ static const struct file_operations fops 
    4  }; 
     3@@ -1881,6 +1881,50 @@ static const struct file_operations fops 
     4 #endif 
    55  
    66  
     
    5252 { 
    5353        struct ath_common *common = ath9k_hw_common(ah); 
    54 @@ -2174,6 +2218,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
     54@@ -1906,6 +1950,8 @@ int ath9k_init_debug(struct ath_hw *ah) 
    5555        debugfs_create_file("gpio_led", S_IWUSR, 
    5656                           sc->debug.debugfs_phy, sc, &fops_gpio_led); 
     
    6363--- a/drivers/net/wireless/ath/ath9k/hw.h 
    6464+++ b/drivers/net/wireless/ath/ath9k/hw.h 
    65 @@ -500,6 +500,12 @@ enum { 
     65@@ -499,6 +499,12 @@ enum { 
    6666        ATH9K_RESET_COLD, 
    6767 }; 
     
    7676        u32 magic; 
    7777        u16 devid; 
    78 @@ -778,6 +784,8 @@ struct ath_hw { 
     78@@ -777,6 +783,8 @@ struct ath_hw { 
    7979        u32 rfkill_polarity; 
    8080        u32 ah_flags; 
     
    8585        bool htc_reset_init; 
    8686  
    87 @@ -1041,6 +1049,7 @@ void ath9k_hw_set_sta_beacon_timers(stru 
     87@@ -1027,6 +1035,7 @@ void ath9k_hw_set_sta_beacon_timers(stru 
    8888 bool ath9k_hw_check_alive(struct ath_hw *ah); 
    8989  
     
    9191+void ath9k_hw_update_diag(struct ath_hw *ah); 
    9292  
    93  #ifdef CONFIG_ATH9K_DEBUGFS 
     93 #ifdef CPTCFG_ATH9K_DEBUGFS 
    9494 void ath9k_debug_sync_cause(struct ath_common *common, u32 sync_cause); 
    9595--- a/drivers/net/wireless/ath/ath9k/hw.c 
    9696+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    97 @@ -1747,6 +1747,20 @@ fail: 
     97@@ -1853,6 +1853,20 @@ fail: 
    9898        return -EINVAL; 
    9999 } 
     
    116116                   struct ath9k_hw_cal_data *caldata, bool fastcc) 
    117117 { 
    118 @@ -2023,6 +2037,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
     118@@ -2055,6 +2069,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st 
    119119        } 
    120120  
     
    126126--- a/drivers/net/wireless/ath/ath9k/main.c 
    127127+++ b/drivers/net/wireless/ath/ath9k/main.c 
    128 @@ -459,6 +459,11 @@ irqreturn_t ath_isr(int irq, void *dev) 
     128@@ -462,6 +462,11 @@ irqreturn_t ath_isr(int irq, void *dev) 
    129129        ath9k_hw_getisr(ah, &status);   /* NB: clears ISR too */ 
    130130        status &= ah->imask;    /* discard unasked-for bits */ 
  • branches/attitude_adjustment/package/mac80211/patches/554-ath9k_ani_mrc_fix.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c 
    22+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c 
    3 @@ -1075,6 +1075,10 @@ static bool ar9003_hw_ani_control(struct 
     3@@ -1173,6 +1173,10 @@ skip_ws_det: 
    44                 * is_on == 0 means MRC CCK is OFF (more noise imm) 
    55                 */ 
  • branches/attitude_adjustment/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch

    r36470 r37266  
    11--- a/include/linux/ath9k_platform.h 
    22+++ b/include/linux/ath9k_platform.h 
    3 @@ -31,6 +31,9 @@ struct ath9k_platform_data { 
     3@@ -33,6 +33,9 @@ struct ath9k_platform_data { 
    44  
    55        bool endian_check; 
     
    1313--- a/drivers/net/wireless/ath/ath9k/hw.c 
    1414+++ b/drivers/net/wireless/ath/ath9k/hw.c 
    15 @@ -2413,17 +2413,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw 
     15@@ -2448,17 +2448,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw 
    1616        } 
    1717  
     
    4949--- a/drivers/net/wireless/ath/ath9k/hw.h 
    5050+++ b/drivers/net/wireless/ath/ath9k/hw.h 
    51 @@ -961,6 +961,8 @@ struct ath_hw { 
     51@@ -947,6 +947,8 @@ struct ath_hw { 
    5252        bool is_clk_25mhz; 
    5353        int (*get_mac_revision)(void); 
     
    6060--- a/drivers/net/wireless/ath/ath9k/init.c 
    6161+++ b/drivers/net/wireless/ath/ath9k/init.c 
    62 @@ -587,6 +587,8 @@ static int ath9k_init_softc(u16 devid, s 
     62@@ -613,6 +613,8 @@ static int ath9k_init_softc(u16 devid, s 
    6363                ah->is_clk_25mhz = pdata->is_clk_25mhz; 
    6464                ah->get_mac_revision = pdata->get_mac_revision; 
  • branches/attitude_adjustment/package/mac80211/patches/601-rt2x00-set_pci_mwi.patch

    r32655 r37266  
    11--- a/drivers/net/wireless/rt2x00/rt2x00pci.c 
    22+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c 
    3 @@ -273,8 +273,10 @@ int rt2x00pci_probe(struct pci_dev *pci_ 
     3@@ -96,8 +96,10 @@ int rt2x00pci_probe(struct pci_dev *pci_ 
    44  
    55        pci_set_master(pci_dev); 
     
    77+#ifdef CONFIG_PCI_SET_MWI 
    88        if (pci_set_mwi(pci_dev)) 
    9                 ERROR_PROBE("MWI not available.\n"); 
     9                rt2x00_probe_err("MWI not available\n"); 
    1010+#endif 
    1111  
    1212        if (dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32))) { 
    13                 ERROR_PROBE("PCI DMA not supported.\n"); 
     13                rt2x00_probe_err("PCI DMA not supported\n"); 
  • branches/attitude_adjustment/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch

    r36470 r37266  
    4242+       ee_name = rt2x00dev->ops->lib->get_eeprom_file_name(rt2x00dev); 
    4343+       if (!ee_name) { 
    44 +               ERROR(rt2x00dev, 
    45 +                     "Invalid EEPROM filename.\n" 
    46 +                     "Please file bug report to %s.\n", DRV_PROJECT); 
     44+               rt2x00_err(rt2x00dev, 
     45+                          "Invalid EEPROM filename.\n" 
     46+                          "Please file bug report to %s.\n", DRV_PROJECT); 
    4747+               return -EINVAL; 
    4848+       } 
    4949+ 
    50 +       INFO(rt2x00dev, "Loading EEPROM data from '%s'.\n", ee_name); 
     50+       rt2x00_info(rt2x00dev, "Loading EEPROM data from '%s'.\n", ee_name); 
    5151+ 
    5252+       retval = request_firmware(&ee, ee_name, rt2x00dev->dev); 
    5353+       if (retval) { 
    54 +               ERROR(rt2x00dev, "Failed to request EEPROM.\n"); 
     54+               rt2x00_err(rt2x00dev, "Failed to request EEPROM.\n"); 
    5555+               return retval; 
    5656+       } 
    5757+ 
    5858+       if (!ee || !ee->size || !ee->data) { 
    59 +               ERROR(rt2x00dev, "Failed to read EEPROM file.\n"); 
     59+               rt2x00_err(rt2x00dev, "Failed to read EEPROM file.\n"); 
    6060+               retval = -ENOENT; 
    6161+               goto err_exit; 
     
    6363+ 
    6464+       if (ee->size != rt2x00dev->ops->eeprom_size) { 
    65 +               ERROR(rt2x00dev, 
    66 +                     "EEPROM file size is invalid, it should be %d bytes\n", 
    67 +                     rt2x00dev->ops->eeprom_size); 
     65+               rt2x00_err(rt2x00dev, 
     66+                          "EEPROM file size is invalid, it should be %d bytes\n", 
     67+                          rt2x00dev->ops->eeprom_size); 
    6868+               retval = -EINVAL; 
    6969+               goto err_release_ee; 
     
    102102--- a/drivers/net/wireless/rt2x00/rt2x00.h 
    103103+++ b/drivers/net/wireless/rt2x00/rt2x00.h 
    104 @@ -559,6 +559,7 @@ struct rt2x00lib_ops { 
     104@@ -549,6 +549,7 @@ struct rt2x00lib_ops { 
    105105                               const u8 *data, const size_t len); 
    106106        int (*load_firmware) (struct rt2x00_dev *rt2x00dev, 
     
    110110        /* 
    111111         * Device initialization/deinitialization handlers. 
    112 @@ -719,6 +720,7 @@ enum rt2x00_capability_flags { 
     112@@ -705,6 +706,7 @@ enum rt2x00_capability_flags { 
    113113        REQUIRE_SW_SEQNO, 
    114114        REQUIRE_HT_TX_DESC, 
     
    118118        /* 
    119119         * Capabilities 
    120 @@ -988,6 +990,11 @@ struct rt2x00_dev { 
     120@@ -974,6 +976,11 @@ struct rt2x00_dev { 
    121121        const struct firmware *fw; 
    122122  
     
    133133+++ b/drivers/net/wireless/rt2x00/rt2x00lib.h 
    134134@@ -322,6 +322,22 @@ static inline void rt2x00lib_free_firmwa 
    135  #endif /* CONFIG_RT2X00_LIB_FIRMWARE */ 
     135 #endif /* CPTCFG_RT2X00_LIB_FIRMWARE */ 
    136136  
    137137 /* 
    138138+ * EEPROM file handlers. 
    139139+ */ 
    140 +#ifdef CONFIG_RT2X00_LIB_EEPROM 
     140+#ifdef CPTCFG_RT2X00_LIB_EEPROM 
    141141+int rt2x00lib_load_eeprom_file(struct rt2x00_dev *rt2x00dev); 
    142142+void rt2x00lib_free_eeprom_file(struct rt2x00_dev *rt2x00dev); 
     
    149149+{ 
    150150+} 
    151 +#endif /* CONFIG_RT2X00_LIB_EEPROM_FILE */ 
     151+#endif /* CPTCFG_RT2X00_LIB_EEPROM */ 
    152152+ 
    153153+/* 
    154154  * Debugfs handlers. 
    155155  */ 
    156  #ifdef CONFIG_RT2X00_LIB_DEBUGFS 
     156 #ifdef CPTCFG_RT2X00_LIB_DEBUGFS 
    157157--- a/drivers/net/wireless/rt2x00/Kconfig 
    158158+++ b/drivers/net/wireless/rt2x00/Kconfig 
    159 @@ -60,6 +60,7 @@ config RT2800PCI 
     159@@ -69,6 +69,7 @@ config RT2800PCI 
    160160        select RT2X00_LIB_PCI if PCI 
    161         select RT2X00_LIB_SOC if RALINK_RT288X || RALINK_RT305X 
     161        select RT2X00_LIB_SOC if SOC_RT288X || SOC_RT305X 
    162162        select RT2X00_LIB_FIRMWARE 
    163163+       select RT2X00_LIB_EEPROM 
    164164        select RT2X00_LIB_CRYPTO 
    165         select CRC_CCITT 
    166         select EEPROM_93CX6 
    167 @@ -212,6 +213,9 @@ config RT2X00_LIB_FIRMWARE 
     165        depends on CRC_CCITT 
     166        depends on EEPROM_93CX6 
     167@@ -238,6 +239,9 @@ config RT2X00_LIB_FIRMWARE 
    168168 config RT2X00_LIB_CRYPTO 
    169169        boolean 
     
    173173+ 
    174174 config RT2X00_LIB_LEDS 
     175        depends on !BACKPORT_KERNEL_2_6_25 
    175176        boolean 
    176         default y if (RT2X00_LIB=y && LEDS_CLASS=y) || (RT2X00_LIB=m && LEDS_CLASS!=n) 
    177177--- a/drivers/net/wireless/rt2x00/Makefile 
    178178+++ b/drivers/net/wireless/rt2x00/Makefile 
    179 @@ -7,6 +7,7 @@ rt2x00lib-$(CONFIG_RT2X00_LIB_DEBUGFS)  + 
    180  rt2x00lib-$(CONFIG_RT2X00_LIB_CRYPTO)  += rt2x00crypto.o 
    181  rt2x00lib-$(CONFIG_RT2X00_LIB_FIRMWARE)        += rt2x00firmware.o 
    182  rt2x00lib-$(CONFIG_RT2X00_LIB_LEDS)    += rt2x00leds.o 
    183 +rt2x00lib-$(CONFIG_RT2X00_LIB_EEPROM)  += rt2x00eeprom.o 
    184   
    185  obj-$(CONFIG_RT2X00_LIB)               += rt2x00lib.o 
    186  obj-$(CONFIG_RT2X00_LIB_PCI)           += rt2x00pci.o 
     179@@ -7,6 +7,7 @@ rt2x00lib-$(CPTCFG_RT2X00_LIB_DEBUGFS)  + 
     180 rt2x00lib-$(CPTCFG_RT2X00_LIB_CRYPTO)  += rt2x00crypto.o 
     181 rt2x00lib-$(CPTCFG_RT2X00_LIB_FIRMWARE)        += rt2x00firmware.o 
     182 rt2x00lib-$(CPTCFG_RT2X00_LIB_LEDS)    += rt2x00leds.o 
     183+rt2x00lib-$(CPTCFG_RT2X00_LIB_EEPROM)  += rt2x00eeprom.o 
     184  
     185 obj-$(CPTCFG_RT2X00_LIB)               += rt2x00lib.o 
     186 obj-$(CPTCFG_RT2X00_LIB_MMIO)          += rt2x00mmio.o 
    187187--- a/drivers/net/wireless/rt2x00/rt2800pci.c 
    188188+++ b/drivers/net/wireless/rt2x00/rt2800pci.c 
    189 @@ -89,25 +89,11 @@ static void rt2800pci_mcu_status(struct  
    190         rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); 
    191  } 
    192   
    193 -#if defined(CONFIG_RALINK_RT288X) || defined(CONFIG_RALINK_RT305X) 
     189@@ -90,25 +90,11 @@ static void rt2800pci_mcu_status(struct  
     190        rt2x00mmio_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); 
     191 } 
     192  
     193-#if defined(CONFIG_SOC_RT288X) || defined(CONFIG_SOC_RT305X) 
    194194 static int rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) 
    195195 { 
     
    210210-       return -ENOMEM; 
    211211-} 
    212 -#endif /* CONFIG_RALINK_RT288X || CONFIG_RALINK_RT305X */ 
     212-#endif /* CONFIG_SOC_RT288X || CONFIG_SOC_RT305X */ 
    213213  
    214214 #ifdef CONFIG_PCI 
    215215 static void rt2800pci_eepromregister_read(struct eeprom_93cx6 *eeprom) 
    216 @@ -331,6 +317,20 @@ static int rt2800pci_write_firmware(stru 
     216@@ -332,6 +318,20 @@ static int rt2800pci_write_firmware(stru 
    217217 } 
    218218  
     
    235235  */ 
    236236 static bool rt2800pci_get_entry_state(struct queue_entry *entry) 
    237 @@ -1046,6 +1046,7 @@ static const struct rt2x00lib_ops rt2800 
     237@@ -1156,6 +1156,7 @@ static const struct rt2x00lib_ops rt2800 
    238238        .get_firmware_name      = rt2800pci_get_firmware_name, 
    239239        .check_firmware         = rt2800_check_firmware, 
    240240        .load_firmware          = rt2800_load_firmware, 
    241 +       .get_eeprom_file_name   = rt2800pci_get_eeprom_file_name, 
    242         .initialize             = rt2x00pci_initialize, 
    243         .uninitialize           = rt2x00pci_uninitialize, 
     241+       .get_eeprom_file_name   = rt2800pci_get_eeprom_file_name, 
     242        .initialize             = rt2x00mmio_initialize, 
     243        .uninitialize           = rt2x00mmio_uninitialize, 
    244244        .get_entry_state        = rt2800pci_get_entry_state, 
    245245--- a/drivers/net/wireless/rt2x00/rt2x00dev.c 
    246246+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c 
    247 @@ -1318,6 +1318,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de 
    248   
    249         rt2x00dev->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; 
     247@@ -1325,6 +1325,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de 
     248        INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup); 
     249        INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep); 
    250250  
    251251+       retval = rt2x00lib_load_eeprom_file(rt2x00dev); 
     
    254254+ 
    255255        /* 
    256          * Initialize work. 
     256         * Let the driver probe the device to detect the capabilities. 
    257257         */ 
    258 @@ -1442,6 +1446,11 @@ void rt2x00lib_remove_dev(struct rt2x00_ 
     258@@ -1455,6 +1459,11 @@ void rt2x00lib_remove_dev(struct rt2x00_ 
    259259         */ 
    260260        if (rt2x00dev->drv_data) 
     
    278278        rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_SOC); 
    279279  
     280--- a/.local-symbols 
     281+++ b/.local-symbols 
     282@@ -272,6 +272,7 @@ RT2X00_LIB_FIRMWARE= 
     283 RT2X00_LIB_CRYPTO= 
     284 RT2X00_LIB_LEDS= 
     285 RT2X00_LIB_DEBUGFS= 
     286+RT2X00_LIB_EEPROM= 
     287 RT2X00_DEBUG= 
     288 RTLWIFI= 
     289 RTLWIFI_DEBUG= 
  • branches/attitude_adjustment/package/mac80211/patches/605-rt2x00-pci-eeprom.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/rt2x00/rt2800pci.c 
    22+++ b/drivers/net/wireless/rt2x00/rt2800pci.c 
    3 @@ -89,7 +89,7 @@ static void rt2800pci_mcu_status(struct  
    4         rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); 
     3@@ -90,7 +90,7 @@ static void rt2800pci_mcu_status(struct  
     4        rt2x00mmio_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); 
    55 } 
    66  
     
    1010        memcpy(rt2x00dev->eeprom, rt2x00dev->eeprom_file->data, EEPROM_SIZE); 
    1111        return 0; 
    12 @@ -983,8 +983,9 @@ static int rt2800pci_read_eeprom(struct  
     12@@ -1093,8 +1093,9 @@ static int rt2800pci_read_eeprom(struct  
    1313 { 
    1414        int retval; 
     
    2424--- a/drivers/net/wireless/rt2x00/rt2x00pci.c 
    2525+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c 
    26 @@ -255,6 +255,7 @@ exit: 
     26@@ -78,6 +78,7 @@ exit: 
    2727 int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops) 
    2828 { 
     
    3232        int retval; 
    3333        u16 chip; 
    34 @@ -300,6 +301,12 @@ int rt2x00pci_probe(struct pci_dev *pci_ 
     34@@ -125,6 +126,12 @@ int rt2x00pci_probe(struct pci_dev *pci_ 
    3535        rt2x00dev->irq = pci_dev->irq; 
    3636        rt2x00dev->name = pci_name(pci_dev); 
  • branches/attitude_adjustment/package/mac80211/patches/606-rt2x00_no_realign.patch

    r36470 r37266  
    2525--- a/drivers/net/wireless/rt2x00/rt2x00queue.c 
    2626+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c 
    27 @@ -162,36 +162,14 @@ void rt2x00queue_align_frame(struct sk_b 
     27@@ -163,36 +163,14 @@ void rt2x00queue_align_frame(struct sk_b 
    2828 void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int header_length) 
    2929 { 
  • branches/attitude_adjustment/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch

    r36470 r37266  
    1313--- a/drivers/net/wireless/rt2x00/rt2x00dev.c 
    1414+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c 
    15 @@ -939,6 +939,22 @@ static int rt2x00lib_probe_hw_modes(stru 
     15@@ -938,6 +938,22 @@ static int rt2x00lib_probe_hw_modes(stru 
    1616        unsigned int num_rates; 
    1717        unsigned int i; 
     
    2828+ 
    2929+       if ((spec->supported_bands & SUPPORT_BAND_BOTH) == 0) { 
    30 +               ERROR(rt2x00dev, "No supported bands\n"); 
     30+               rt2x00_err(rt2x00dev, "No supported bands\n"); 
    3131+               return -EINVAL; 
    3232+       } 
     
    3838--- a/drivers/net/wireless/rt2x00/rt2x00.h 
    3939+++ b/drivers/net/wireless/rt2x00/rt2x00.h 
    40 @@ -424,6 +424,7 @@ struct hw_mode_spec { 
     40@@ -414,6 +414,7 @@ struct hw_mode_spec { 
    4141        unsigned int supported_bands; 
    4242 #define SUPPORT_BAND_2GHZ      0x00000001 
  • branches/attitude_adjustment/package/mac80211/patches/608-add_platform_data_mac_addr.patch

    r36470 r37266  
    1111--- a/drivers/net/wireless/rt2x00/rt2x00dev.c 
    1212+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c 
    13 @@ -930,6 +930,18 @@ static void rt2x00lib_rate(struct ieee80 
     13@@ -929,6 +929,18 @@ static void rt2x00lib_rate(struct ieee80 
    1414                entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE; 
    1515 } 
     
    3232--- a/drivers/net/wireless/rt2x00/rt2x00.h 
    3333+++ b/drivers/net/wireless/rt2x00/rt2x00.h 
    34 @@ -1314,6 +1314,7 @@ static inline void rt2x00debug_dump_fram 
     34@@ -1326,6 +1326,7 @@ static inline void rt2x00debug_dump_fram 
    3535  */ 
    3636 u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev, 
     
    4242--- a/drivers/net/wireless/rt2x00/rt61pci.c 
    4343+++ b/drivers/net/wireless/rt2x00/rt61pci.c 
    44 @@ -2392,6 +2392,7 @@ static int rt61pci_validate_eeprom(struc 
     44@@ -2395,6 +2395,7 @@ static int rt61pci_validate_eeprom(struc 
    4545        u32 reg; 
    4646        u16 word; 
     
    4949        s8 value; 
    5050  
    51         rt2x00pci_register_read(rt2x00dev, E2PROM_CSR, &reg); 
    52 @@ -2412,7 +2413,11 @@ static int rt61pci_validate_eeprom(struc 
     51        rt2x00mmio_register_read(rt2x00dev, E2PROM_CSR, &reg); 
     52@@ -2415,7 +2416,11 @@ static int rt61pci_validate_eeprom(struc 
    5353        /* 
    5454         * Start validation of the data that has been read. 
     
    6161        if (!is_valid_ether_addr(mac)) { 
    6262                eth_random_addr(mac); 
    63                 EEPROM(rt2x00dev, "MAC: %pM\n", mac); 
     63                rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", mac); 
  • branches/attitude_adjustment/package/mac80211/patches/610-rt2x00-fix-rt3352-ext-pa.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/rt2x00/rt2800lib.c 
    22+++ b/drivers/net/wireless/rt2x00/rt2800lib.c 
    3 @@ -2249,15 +2249,18 @@ static void rt2800_config_channel(struct 
     3@@ -2631,15 +2631,18 @@ static void rt2800_config_channel(struct 
    44        /* 
    55         * Change BBP settings 
     
    2323        } 
    2424  
    25 @@ -3670,6 +3673,7 @@ static int rt2800_init_bbp(struct rt2x00 
    26                 rt2800_bbp_write(rt2x00dev, 120, 0x50); 
    27   
    28         if (rt2x00_rt(rt2x00dev, RT3290) || 
    29 +           rt2x00_rt(rt2x00dev, RT3352) || 
    30             rt2x00_rt(rt2x00dev, RT5390) || 
    31             rt2x00_rt(rt2x00dev, RT5392)) 
    32                 rt2800_bbp_write(rt2x00dev, 128, 0x12); 
    33 @@ -3976,6 +3980,12 @@ static void rt2800_init_rfcsr_3290(struc 
     25@@ -4971,6 +4974,12 @@ static void rt2800_init_rfcsr_3290(struc 
    3426  
    3527 static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev) 
     
    4133+       u8 rfcsr; 
    4234+ 
     35        rt2800_rf_init_calibration(rt2x00dev, 30); 
     36  
    4337        rt2800_rfcsr_write(rt2x00dev, 0, 0xf0); 
    44         rt2800_rfcsr_write(rt2x00dev, 1, 0x23); 
    45         rt2800_rfcsr_write(rt2x00dev, 2, 0x50); 
    46 @@ -4009,15 +4019,30 @@ static void rt2800_init_rfcsr_3352(struc 
     38@@ -5006,15 +5015,30 @@ static void rt2800_init_rfcsr_3352(struc 
    4739        rt2800_rfcsr_write(rt2x00dev, 31, 0x80); 
    4840        rt2800_rfcsr_write(rt2x00dev, 32, 0x80); 
     
    5446+       if (!tx1_int_pa) 
    5547+               rt2x00_set_field8(&rfcsr, RFCSR34_TX1_EXT_PA, 1); 
    56 +       rt2800_rfcsr_write(rt2x00dev, 34, rfcsr ); 
     48+       rt2800_rfcsr_write(rt2x00dev, 34, rfcsr); 
    5749        rt2800_rfcsr_write(rt2x00dev, 35, 0x03); 
    5850        rt2800_rfcsr_write(rt2x00dev, 36, 0xbd); 
     
    7870        rt2800_rfcsr_write(rt2x00dev, 44, 0xdb); 
    7971        rt2800_rfcsr_write(rt2x00dev, 45, 0xdb); 
    80 @@ -4025,15 +4050,20 @@ static void rt2800_init_rfcsr_3352(struc 
     72@@ -5022,15 +5046,20 @@ static void rt2800_init_rfcsr_3352(struc 
    8173        rt2800_rfcsr_write(rt2x00dev, 47, 0x0d); 
    8274        rt2800_rfcsr_write(rt2x00dev, 48, 0x14); 
     
    108100        rt2800_rfcsr_write(rt2x00dev, 60, 0x00); 
    109101        rt2800_rfcsr_write(rt2x00dev, 61, 0x00); 
    110 @@ -4949,7 +4979,8 @@ static int rt2800_init_eeprom(struct rt2 
     102@@ -5715,6 +5744,7 @@ static int rt2800_init_eeprom(struct rt2 
     103         * RT53xx: defined in "EEPROM_CHIP_ID" field 
     104         */ 
     105        if (rt2x00_rt(rt2x00dev, RT3290) || 
     106+           rt2x00_rt(rt2x00dev, RT3352) || 
     107            rt2x00_rt(rt2x00dev, RT5390) || 
     108            rt2x00_rt(rt2x00dev, RT5392)) 
     109                rt2x00_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); 
     110@@ -5804,7 +5834,8 @@ static int rt2800_init_eeprom(struct rt2 
    111111        /* 
    112112         * Detect if this device has Bluetooth co-existence. 
     
    118118  
    119119        /* 
    120 @@ -4978,6 +5009,22 @@ static int rt2800_init_eeprom(struct rt2 
     120@@ -5833,6 +5864,22 @@ static int rt2800_init_eeprom(struct rt2 
    121121                                        EIRP_MAX_TX_POWER_LIMIT) 
    122122                __set_bit(CAPABILITY_POWER_LIMIT, &rt2x00dev->cap_flags); 
     
    143143--- a/drivers/net/wireless/rt2x00/rt2800.h 
    144144+++ b/drivers/net/wireless/rt2x00/rt2800.h 
    145 @@ -2117,6 +2117,12 @@ struct mac_iveiv_entry { 
     145@@ -2153,6 +2153,12 @@ struct mac_iveiv_entry { 
    146146 #define RFCSR31_RX_CALIB               FIELD8(0x7f) 
    147147  
     
    156156  */ 
    157157 #define RFCSR38_RX_LO1_EN              FIELD8(0x20) 
    158 @@ -2127,6 +2133,18 @@ struct mac_iveiv_entry { 
     158@@ -2163,6 +2169,18 @@ struct mac_iveiv_entry { 
    159159 #define RFCSR39_RX_LO2_EN              FIELD8(0x80) 
    160160  
     
    175175  */ 
    176176 #define RFCSR49_TX                     FIELD8(0x3f) 
    177 @@ -2135,6 +2153,8 @@ struct mac_iveiv_entry { 
     177@@ -2172,6 +2190,8 @@ struct mac_iveiv_entry { 
    178178  * RFCSR 50: 
    179179  */ 
     
    181181+#define RFCSR50_TX0_EXT_PA             FIELD8(0x02) 
    182182+#define RFCSR50_TX1_EXT_PA             FIELD8(0x10) 
    183   
    184  /* 
    185   * RF registers 
    186 @@ -2222,6 +2242,8 @@ struct mac_iveiv_entry { 
     183 #define RFCSR50_EP                     FIELD8(0xc0) 
     184  
     185 /* 
     186@@ -2260,6 +2280,8 @@ struct mac_iveiv_entry { 
    187187  * INTERNAL_TX_ALC: 0: disable, 1: enable 
    188188  * BT_COEXIST: 0: disable, 1: enable 
     
    193193 #define        EEPROM_NIC_CONF1                0x001b 
    194194 #define EEPROM_NIC_CONF1_HW_RADIO              FIELD16(0x0001) 
    195 @@ -2239,6 +2261,8 @@ struct mac_iveiv_entry { 
     195@@ -2277,6 +2299,8 @@ struct mac_iveiv_entry { 
    196196 #define EEPROM_NIC_CONF1_INTERNAL_TX_ALC               FIELD16(0x2000) 
    197197 #define EEPROM_NIC_CONF1_BT_COEXIST            FIELD16(0x4000) 
     
    204204--- a/drivers/net/wireless/rt2x00/rt2x00.h 
    205205+++ b/drivers/net/wireless/rt2x00/rt2x00.h 
    206 @@ -740,6 +740,8 @@ enum rt2x00_capability_flags { 
     206@@ -726,6 +726,8 @@ enum rt2x00_capability_flags { 
    207207        CAPABILITY_DOUBLE_ANTENNA, 
    208208        CAPABILITY_BT_COEXIST, 
  • branches/attitude_adjustment/package/mac80211/patches/611-rt2x00-rf_vals-rt3352-xtal20.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/rt2x00/rt2800lib.c 
    22+++ b/drivers/net/wireless/rt2x00/rt2800lib.c 
    3 @@ -5169,6 +5169,27 @@ static const struct rf_channel rf_vals_3 
    4         {173, 0x61, 0, 9}, 
     3@@ -6156,6 +6156,27 @@ static const struct rf_channel rf_vals_5 
     4        {196, 83, 0, 12, 1}, 
    55 }; 
    66  
     
    2929 { 
    3030        struct hw_mode_spec *spec = &rt2x00dev->spec; 
    31 @@ -5246,7 +5267,6 @@ static int rt2800_probe_hw_mode(struct r 
     31@@ -6234,7 +6255,6 @@ static int rt2800_probe_hw_mode(struct r 
    3232                   rt2x00_rf(rt2x00dev, RF3022) || 
    3333                   rt2x00_rf(rt2x00dev, RF3290) || 
     
    3737                   rt2x00_rf(rt2x00dev, RF5370) || 
    3838                   rt2x00_rf(rt2x00dev, RF5372) || 
    39 @@ -5254,6 +5274,12 @@ static int rt2800_probe_hw_mode(struct r 
     39@@ -6242,6 +6262,12 @@ static int rt2800_probe_hw_mode(struct r 
    4040                   rt2x00_rf(rt2x00dev, RF5392)) { 
    4141                spec->num_channels = 14; 
     
    5050                spec->supported_bands |= SUPPORT_BAND_5GHZ; 
    5151                spec->num_channels = ARRAY_SIZE(rf_vals_3x); 
    52 @@ -5347,6 +5373,19 @@ static int rt2800_probe_hw_mode(struct r 
     52@@ -6389,6 +6415,19 @@ static int rt2800_probe_rt(struct rt2x00 
    5353        return 0; 
    5454 } 
     
    7070 { 
    7171        int retval; 
    72 @@ -5372,6 +5411,15 @@ int rt2800_probe_hw(struct rt2x00_dev *r 
     72@@ -6418,6 +6457,15 @@ int rt2800_probe_hw(struct rt2x00_dev *r 
    7373        rt2800_register_write(rt2x00dev, GPIO_CTRL, reg); 
    7474  
     
    8888--- a/drivers/net/wireless/rt2x00/rt2x00.h 
    8989+++ b/drivers/net/wireless/rt2x00/rt2x00.h 
    90 @@ -419,6 +419,7 @@ static inline struct rt2x00_intf* vif_to 
     90@@ -409,6 +409,7 @@ static inline struct rt2x00_intf* vif_to 
    9191  * @channels: Device/chipset specific channel values (See &struct rf_channel). 
    9292  * @channels_info: Additional information for channels (See &struct channel_info). 
     
    9696 struct hw_mode_spec { 
    9797        unsigned int supported_bands; 
    98 @@ -435,6 +436,7 @@ struct hw_mode_spec { 
     98@@ -425,6 +426,7 @@ struct hw_mode_spec { 
    9999        const struct channel_info *channels_info; 
    100100  
  • branches/attitude_adjustment/package/mac80211/patches/612-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch

    r36470 r37266  
    1414--- a/drivers/net/wireless/rt2x00/rt2800pci.c 
    1515+++ b/drivers/net/wireless/rt2x00/rt2800pci.c 
    16 @@ -1185,11 +1185,18 @@ static int rt2800soc_probe(struct platfo 
     16@@ -1309,11 +1309,18 @@ static int rt2800soc_probe(struct platfo 
    1717        return rt2x00soc_probe(pdev, &rt2800pci_ops); 
    1818 } 
  • branches/attitude_adjustment/package/mac80211/patches/614-rt2x00-of_load_eeprom_filename.patch

    r36470 r37266  
    11--- a/drivers/net/wireless/rt2x00/rt2800pci.c 
    22+++ b/drivers/net/wireless/rt2x00/rt2800pci.c 
    3 @@ -322,11 +322,17 @@ static int rt2800pci_write_firmware(stru 
     3@@ -39,6 +39,7 @@ 
     4 #include <linux/pci.h> 
     5 #include <linux/platform_device.h> 
     6 #include <linux/eeprom_93cx6.h> 
     7+#include <linux/of.h> 
     8  
     9 #include "rt2x00.h" 
     10 #include "rt2x00mmio.h" 
     11@@ -323,11 +324,17 @@ static int rt2800pci_write_firmware(stru 
    412 static char *rt2800pci_get_eeprom_file_name(struct rt2x00_dev *rt2x00dev) 
    513 { 
  • branches/attitude_adjustment/package/mac80211/patches/616-rt2x00-support-rt5350.patch

    <
    r36470 r37266  
    11--- a/drivers/net/wireless/rt2x00/rt2800.h 
    22+++ b/drivers/net/wireless/rt2x00/rt2800.h 
    3 @@ -69,6 +69,7 @@ 
    4  #define RF3322                         0x000c 
     3@@ -71,6 +71,7 @@ 
    54 #define RF3053                         0x000d 
     5 #define RF5592                         0x000f 
    66 #define RF3290                         0x3290 
    77+#define RF5350                         0x5350 
     
    1111--- a/drivers/net/wireless/rt2x00/rt2800lib.c 
    1212+++ b/drivers/net/wireless/rt2x00/rt2800lib.c 
    13 @@ -2138,6 +2138,15 @@ static void rt2800_config_channel_rf53xx 
     13@@ -2141,6 +2141,15 @@ static void rt2800_config_channel_rf53xx 
    1414        if (rf->channel <= 14) { 
    1515                int idx = rf->channel-1; 
     
    2727                        if (rt2x00_rt_rev_gte(rt2x00dev, RT5390, REV_RT5390F)) { 
    2828                                /* r55/r59 value array of channel 1~14 */ 
    29 @@ -2219,6 +2228,7 @@ static void rt2800_config_channel(struct 
     29@@ -2598,6 +2607,7 @@ static void rt2800_config_channel(struct 
    3030        case RF3322: 
    3131                rt2800_config_channel_rf3322(rt2x00dev, conf, rf, info); 
     
    3535        case RF5370: 
    3636        case RF5372: 
    37 @@ -2232,6 +2242,7 @@ static void rt2800_config_channel(struct 
     37@@ -2614,6 +2624,7 @@ static void rt2800_config_channel(struct 
    3838  
    3939        if (rt2x00_rf(rt2x00dev, RF3290) || 
     
    4343            rt2x00_rf(rt2x00dev, RF5370) || 
    4444            rt2x00_rf(rt2x00dev, RF5372) || 
    45 @@ -2362,7 +2373,8 @@ static void rt2800_config_channel(struct 
     45@@ -2778,7 +2789,8 @@ static void rt2800_config_channel(struct 
    4646        /* 
    4747         * Clear update flag 
     
    5353                rt2x00_set_field8(&bbp, BBP49_UPDATE_FLAG, 0); 
    5454                rt2800_bbp_write(rt2x00dev, 49, bbp); 
    55 @@ -2801,6 +2813,7 @@ void rt2800_vco_calibration(struct rt2x0 
     55@@ -3224,6 +3236,7 @@ void rt2800_vco_calibration(struct rt2x0 
    5656                rt2800_rfcsr_write(rt2x00dev, 7, rfcsr); 
    5757                break; 
     
    6161        case RF5370: 
    6262        case RF5372: 
    63 @@ -3125,7 +3138,8 @@ static int rt2800_init_registers(struct  
     63@@ -3563,7 +3576,8 @@ static int rt2800_init_registers(struct  
    6464        } else if (rt2x00_rt(rt2x00dev, RT3572)) { 
    6565                rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400); 
     
    6868+       } else if (rt2x00_rt(rt2x00dev, RT5350) || 
    6969+                  rt2x00_rt(rt2x00dev, RT5390) || 
    70                    rt2x00_rt(rt2x00dev, RT5392)) { 
     70                   rt2x00_rt(rt2x00dev, RT5392) || 
     71                   rt2x00_rt(rt2x00dev, RT5592)) { 
    7172                rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404); 
    72                 rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606); 
    73 @@ -3507,6 +3521,10 @@ static int rt2800_init_bbp(struct rt2x00 
    74                 rt2800_bbp_write(rt2x00dev, 4, 0x50); 
    75         } 
    76   
     73@@ -4216,9 +4230,13 @@ static void rt2800_init_bbp_3352(struct  
     74  
     75        rt2800_bbp_write(rt2x00dev, 82, 0x62); 
     76  
     77-       rt2800_bbp_write(rt2x00dev, 83, 0x6a); 
     78- 
     79-       rt2800_bbp_write(rt2x00dev, 84, 0x99); 
    7780+       if (rt2x00_rt(rt2x00dev, RT5350)) { 
    78 +               rt2800_bbp_write(rt2x00dev, 4, 0x50); 
     81+               rt2800_bbp_write(rt2x00dev, 83, 0x7a); 
     82+               rt2800_bbp_write(rt2x00dev, 84, 0x9a); 
     83+       } else { 
     84+               rt2800_bbp_write(rt2x00dev, 83, 0x6a); 
     85+               rt2800_bbp_write(rt2x00dev, 84, 0x99); 
    7986+       } 
    80 + 
    81         if (rt2x00_rt(rt2x00dev, RT3290) || 
    82             rt2x00_rt(rt2x00dev, RT5390) || 
    83             rt2x00_rt(rt2x00dev, RT5392)) { 
    84 @@ -3519,11 +3537,13 @@ static int rt2800_init_bbp(struct rt2x00 
    85             rt2x00_rt(rt2x00dev, RT3290) || 
    86             rt2x00_rt(rt2x00dev, RT3352) || 
    87             rt2x00_rt(rt2x00dev, RT3572) || 
    88 +           rt2x00_rt(rt2x00dev, RT5350) || 
    89             rt2x00_rt(rt2x00dev, RT5390) || 
    90             rt2x00_rt(rt2x00dev, RT5392)) 
    91                 rt2800_bbp_write(rt2x00dev, 31, 0x08); 
    92   
    93 -       if (rt2x00_rt(rt2x00dev, RT3352)) 
    94 +       if (rt2x00_rt(rt2x00dev, RT3352) || 
    95 +           rt2x00_rt(rt2x00dev, RT5350)) 
    96                 rt2800_bbp_write(rt2x00dev, 47, 0x48); 
    97   
    98         rt2800_bbp_write(rt2x00dev, 65, 0x2c); 
    99 @@ -3531,6 +3551,7 @@ static int rt2800_init_bbp(struct rt2x00 
    100   
    101         if (rt2x00_rt(rt2x00dev, RT3290) || 
    102             rt2x00_rt(rt2x00dev, RT3352) || 
    103 +           rt2x00_rt(rt2x00dev, RT5350) || 
    104             rt2x00_rt(rt2x00dev, RT5390) || 
    105             rt2x00_rt(rt2x00dev, RT5392)) 
    106                 rt2800_bbp_write(rt2x00dev, 68, 0x0b); 
    107 @@ -3540,6 +3561,7 @@ static int rt2800_init_bbp(struct rt2x00 
    108                 rt2800_bbp_write(rt2x00dev, 73, 0x12); 
    109         } else if (rt2x00_rt(rt2x00dev, RT3290) || 
    110                    rt2x00_rt(rt2x00dev, RT3352) || 
    111 +                  rt2x00_rt(rt2x00dev, RT5350) || 
    112                    rt2x00_rt(rt2x00dev, RT5390) || 
    113                    rt2x00_rt(rt2x00dev, RT5392)) { 
    114                 rt2800_bbp_write(rt2x00dev, 69, 0x12); 
    115 @@ -3576,7 +3598,8 @@ static int rt2800_init_bbp(struct rt2x00 
    116                 rt2800_bbp_write(rt2x00dev, 79, 0x18); 
    117                 rt2800_bbp_write(rt2x00dev, 80, 0x09); 
    118                 rt2800_bbp_write(rt2x00dev, 81, 0x33); 
    119 -       } else if (rt2x00_rt(rt2x00dev, RT3352)) { 
    120 +       } else if (rt2x00_rt(rt2x00dev, RT3352) || 
    121 +               rt2x00_rt(rt2x00dev, RT5350)) { 
    122                 rt2800_bbp_write(rt2x00dev, 78, 0x0e); 
    123                 rt2800_bbp_write(rt2x00dev, 80, 0x08); 
    124                 rt2800_bbp_write(rt2x00dev, 81, 0x37); 
    125 @@ -3586,6 +3609,7 @@ static int rt2800_init_bbp(struct rt2x00 
    126   
    127         rt2800_bbp_write(rt2x00dev, 82, 0x62); 
    128         if (rt2x00_rt(rt2x00dev, RT3290) || 
    129 +           rt2x00_rt(rt2x00dev, RT5350) || 
    130             rt2x00_rt(rt2x00dev, RT5390) || 
    131             rt2x00_rt(rt2x00dev, RT5392)) 
    132                 rt2800_bbp_write(rt2x00dev, 83, 0x7a); 
    133 @@ -3595,6 +3619,7 @@ static int rt2800_init_bbp(struct rt2x00 
    134         if (rt2x00_rt_rev(rt2x00dev, RT2860, REV_RT2860D)) 
    135                 rt2800_bbp_write(rt2x00dev, 84, 0x19); 
    136         else if (rt2x00_rt(rt2x00dev, RT3290) || 
    137 +                rt2x00_rt(rt2x00dev, RT5350) || 
    138                  rt2x00_rt(rt2x00dev, RT5390) || 
    139                  rt2x00_rt(rt2x00dev, RT5392)) 
    140                 rt2800_bbp_write(rt2x00dev, 84, 0x9a); 
    141 @@ -3603,6 +3628,7 @@ static int rt2800_init_bbp(struct rt2x00 
    142   
    143         if (rt2x00_rt(rt2x00dev, RT3290) || 
    144             rt2x00_rt(rt2x00dev, RT3352) || 
    145 +           rt2x00_rt(rt2x00dev, RT5350) || 
    146             rt2x00_rt(rt2x00dev, RT5390) || 
    147             rt2x00_rt(rt2x00dev, RT5392)) 
    148                 rt2800_bbp_write(rt2x00dev, 86, 0x38); 
    149 @@ -3617,6 +3643,7 @@ static int rt2800_init_bbp(struct rt2x00 
    150   
    151         if (rt2x00_rt(rt2x00dev, RT3290) || 
    152             rt2x00_rt(rt2x00dev, RT3352) || 
    153 +           rt2x00_rt(rt2x00dev, RT5350) || 
    154             rt2x00_rt(rt2x00dev, RT5390) || 
    155             rt2x00_rt(rt2x00dev, RT5392)) 
    156                 rt2800_bbp_write(rt2x00dev, 92, 0x02); 
    157 @@ -3635,6 +3662,7 @@ static int rt2800_init_bbp(struct rt2x00 
    158             rt2x00_rt(rt2x00dev, RT3290) || 
    159             rt2x00_rt(rt2x00dev, RT3352) || 
    160             rt2x00_rt(rt2x00dev, RT3572) || 
    161 +           rt2x00_rt(rt2x00dev, RT5350) || 
    162             rt2x00_rt(rt2x00dev, RT5390) || 
    163             rt2x00_rt(rt2x00dev, RT5392) || 
    164             rt2800_is_305x_soc(rt2x00dev)) 
    165 @@ -3644,6 +3672,7 @@ static int rt2800_init_bbp(struct rt2x00 
    166   
    167         if (rt2x00_rt(rt2x00dev, RT3290) || 
    168             rt2x00_rt(rt2x00dev, RT3352) || 
    169 +           rt2x00_rt(rt2x00dev, RT5350) || 
    170             rt2x00_rt(rt2x00dev, RT5390) || 
    171             rt2x00_rt(rt2x00dev, RT5392)) 
    172                 rt2800_bbp_write(rt2x00dev, 104, 0x92); 
    173 @@ -3654,13 +3683,15 @@ static int rt2800_init_bbp(struct rt2x00 
    174                 rt2800_bbp_write(rt2x00dev, 105, 0x1c); 
    175         else if (rt2x00_rt(rt2x00dev, RT3352)) 
    176                 rt2800_bbp_write(rt2x00dev, 105, 0x34); 
    177 -       else if (rt2x00_rt(rt2x00dev, RT5390) || 
    178 +       else if (rt2x00_rt(rt2x00dev, RT5350) || 
    179 +                rt2x00_rt(rt2x00dev, RT5390) || 
    180                  rt2x00_rt(rt2x00dev, RT5392)) 
    181                 rt2800_bbp_write(rt2x00dev, 105, 0x3c); 
    182         else 
    183                 rt2800_bbp_write(rt2x00dev, 105, 0x05); 
    184   
    185         if (rt2x00_rt(rt2x00dev, RT3290) || 
    186 +               rt2x00_rt(rt2x00dev, RT5350) || 
    187             rt2x00_rt(rt2x00dev, RT5390)) 
    188                 rt2800_bbp_write(rt2x00dev, 106, 0x03); 
    189         else if (rt2x00_rt(rt2x00dev, RT3352)) 
    190 @@ -3670,11 +3701,13 @@ static int rt2800_init_bbp(struct rt2x00 
    191         else 
    192                 rt2800_bbp_write(rt2x00dev, 106, 0x35); 
    193   
    194 -       if (rt2x00_rt(rt2x00dev, RT3352)) 
    195 +       if (rt2x00_rt(rt2x00dev, RT3352) || 
    196 +           rt2x00_rt(rt2x00dev, RT5350)) 
    197                 rt2800_bbp_write(rt2x00dev, 120, 0x50); 
    198   
    199         if (rt2x00_rt(rt2x00dev, RT3290) || 
    200             rt2x00_rt(rt2x00dev, RT3352) || 
    201 +           rt2x00_rt(rt2x00dev, RT5350) || 
    202             rt2x00_rt(rt2x00dev, RT5390) || 
    203             rt2x00_rt(rt2x00dev, RT5392)) 
    204                 rt2800_bbp_write(rt2x00dev, 128, 0x12); 
    205 @@ -3684,13 +3717,15 @@ static int rt2800_init_bbp(struct rt2x00 
    206                 rt2800_bbp_write(rt2x00dev, 135, 0xf6); 
    207         } 
    208   
    209 -       if (rt2x00_rt(rt2x00dev, RT3352)) 
    210 +       if (rt2x00_rt(rt2x00dev, RT3352) || 
    211 +           rt2x00_rt(rt2x00dev, RT5350)) 
    212                 rt2800_bbp_write(rt2x00dev, 137, 0x0f); 
    213   
    214         if (rt2x00_rt(rt2x00dev, RT3071) || 
    215             rt2x00_rt(rt2x00dev, RT3090) || 
    216             rt2x00_rt(rt2x00dev, RT3390) || 
    217             rt2x00_rt(rt2x00dev, RT3572) || 
    218 +           rt2x00_rt(rt2x00dev, RT5350) || 
    219             rt2x00_rt(rt2x00dev, RT5390) || 
    220             rt2x00_rt(rt2x00dev, RT5392)) { 
    221                 rt2800_bbp_read(rt2x00dev, 138, &value); 
    222 @@ -3727,7 +3762,8 @@ static int rt2800_init_bbp(struct rt2x00 
    223                 rt2800_bbp_write(rt2x00dev, 3, value); 
    224         } 
    225   
    226 -       if (rt2x00_rt(rt2x00dev, RT3352)) { 
    227 +       if (rt2x00_rt(rt2x00dev, RT3352) || 
    228 +           rt2x00_rt(rt2x00dev, RT5350)) { 
    229                 rt2800_bbp_write(rt2x00dev, 163, 0xbd); 
    230                 /* Set ITxBF timeout to 0x9c40=1000msec */ 
    231                 rt2800_bbp_write(rt2x00dev, 179, 0x02); 
    232 @@ -3749,6 +3785,14 @@ static int rt2800_init_bbp(struct rt2x00 
    233                 rt2800_bbp_write(rt2x00dev, 148, 0xc8); 
    234         } 
    235   
     87  
     88        rt2800_bbp_write(rt2x00dev, 86, 0x38); 
     89  
     90@@ -4232,9 +4250,13 @@ static void rt2800_init_bbp_3352(struct  
     91  
     92        rt2800_bbp_write(rt2x00dev, 104, 0x92); 
     93  
     94-       rt2800_bbp_write(rt2x00dev, 105, 0x34); 
     95- 
     96-       rt2800_bbp_write(rt2x00dev, 106, 0x05); 
     97+       if (rt2x00_rt(rt2x00dev, RT5350)) { 
     98+               rt2800_bbp_write(rt2x00dev, 105, 0x3c); 
     99