Merge branch 'master' of ssh://infradead/~/public_git/wireless-next into for-davem
authorJohn W. Linville <linville@tuxdriver.com>
Mon, 19 Sep 2011 19:00:16 +0000 (15:00 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 19 Sep 2011 19:00:16 +0000 (15:00 -0400)
1  2 
MAINTAINERS
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
drivers/net/wireless/ath/ath9k/ar9003_phy.h
drivers/net/wireless/rt2x00/rt2800usb.c
net/mac80211/agg-rx.c
net/mac80211/cfg.c
net/mac80211/iface.c
net/mac80211/mesh_pathtbl.c
net/mac80211/sta_info.c

diff --combined MAINTAINERS
@@@ -117,20 -117,20 +117,20 @@@ Maintainers List (try to look for most 
  M:    Philip Blundell <philb@gnu.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/3c505*
 +F:    drivers/net/ethernet/i825xx/3c505*
  
  3C59X NETWORK DRIVER
  M:    Steffen Klassert <klassert@mathematik.tu-chemnitz.de>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    Documentation/networking/vortex.txt
 -F:    drivers/net/3c59x.c
 +F:    drivers/net/ethernet/3com/3c59x.c
  
  3CR990 NETWORK DRIVER
  M:    David Dillow <dave@thedillows.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/typhoon*
 +F:    drivers/net/ethernet/3com/typhoon*
  
  3WARE SAS/SATA-RAID SCSI DRIVERS (3W-XXXX, 3W-9XXX, 3W-SAS)
  M:    Adam Radford <linuxraid@lsi.com>
@@@ -156,7 -156,7 +156,7 @@@ M: Realtek linux nic maintainers <nic_s
  M:    Francois Romieu <romieu@fr.zoreil.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/r8169.c
 +F:    drivers/net/ethernet/realtek/r8169.c
  
  8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
  M:    Greg Kroah-Hartman <gregkh@suse.de>
@@@ -170,7 -170,8 +170,7 @@@ F: include/linux/serial_8250.
  8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
  L:    netdev@vger.kernel.org
  S:    Orphan / Obsolete
 -F:    drivers/net/*8390*
 -F:    drivers/net/ax88796.c
 +F:    drivers/net/ethernet/8390/
  
  9P FILE SYSTEM
  M:    Eric Van Hensbergen <ericvh@gmail.com>
@@@ -213,7 -214,7 +213,7 @@@ ACENIC DRIVE
  M:    Jes Sorensen <jes@trained-monkey.org>
  L:    linux-acenic@sunsite.dk
  S:    Maintained
 -F:    drivers/net/acenic*
 +F:    drivers/net/ethernet/alteon/acenic*
  
  ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
  M:    Peter Feuerer <peter@piie.net>
@@@ -745,7 -746,7 +745,7 @@@ L: linux-arm-kernel@lists.infradead.or
  W:    http://www.arm.linux.org.uk/
  S:    Maintained
  F:    arch/arm/mach-ebsa110/
 -F:    drivers/net/arm/am79c961a.*
 +F:    drivers/net/ethernet/amd/am79c961a.*
  
  ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
  M:    Daniel Ribeiro <drwyrm@gmail.com>
@@@ -1014,8 -1015,7 +1014,8 @@@ F:      arch/arm/include/asm/hardware/ioc.
  F:    arch/arm/include/asm/hardware/iomd.h
  F:    arch/arm/include/asm/hardware/memc.h
  F:    arch/arm/mach-rpc/
 -F:    drivers/net/arm/ether*
 +F:    drivers/net/ethernet/i825xx/ether1*
 +F:    drivers/net/ethernet/seeq/ether3*
  F:    drivers/scsi/arm/
  
  ARM/SHARK MACHINE SUPPORT
@@@ -1127,7 -1127,7 +1127,7 @@@ F:      arch/arm/mach-nuc93x
  F:    drivers/input/keyboard/w90p910_keypad.c
  F:    drivers/input/touchscreen/w90p910_ts.c
  F:    drivers/watchdog/nuc900_wdt.c
 -F:    drivers/net/arm/w90p910_ether.c
 +F:    drivers/net/ethernet/nuvoton/w90p910_ether.c
  F:    drivers/mtd/nand/nuc900_nand.c
  F:    drivers/rtc/rtc-nuc900.c
  F:    drivers/spi/spi_nuc900.c
@@@ -1246,6 -1246,14 +1246,14 @@@ W:    http://wireless.kernel.org/en/users/
  S:    Maintained
  F:    drivers/net/wireless/ath/ath5k/
  
+ ATHEROS ATH6KL WIRELESS DRIVER
+ M:    Kalle Valo <kvalo@qca.qualcomm.com>
+ L:    linux-wireless@vger.kernel.org
+ W:    http://wireless.kernel.org/en/users/Drivers/ath6kl
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath6kl.git
+ S:    Supported
+ F:    drivers/net/wireless/ath/ath6kl/
  ATHEROS ATH9K WIRELESS DRIVER
  M:    "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
  M:    Jouni Malinen <jouni@qca.qualcomm.com>
@@@ -1283,7 -1291,7 +1291,7 @@@ L:      netdev@vger.kernel.or
  W:    http://sourceforge.net/projects/atl1
  W:    http://atl1.sourceforge.net
  S:    Maintained
 -F:    drivers/net/atlx/
 +F:    drivers/net/ethernet/atheros/
  
  ATM
  M:    Chas Williams <chas@cmf.nrl.navy.mil>
@@@ -1323,7 -1331,7 +1331,7 @@@ F:      include/video/atmel_lcdc.
  ATMEL MACB ETHERNET DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  S:    Supported
 -F:    drivers/net/macb.*
 +F:    drivers/net/ethernet/cadence/
  
  ATMEL SPI DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
@@@ -1446,7 -1454,7 +1454,7 @@@ BLACKFIN EMAC DRIVE
  L:    uclinux-dist-devel@blackfin.uclinux.org
  W:    http://blackfin.uclinux.org
  S:    Supported
 -F:    drivers/net/bfin_mac.*
 +F:    drivers/net/ethernet/adi/
  
  BLACKFIN RTC DRIVER
  M:    Mike Frysinger <vapier.adi@gmail.com>
@@@ -1527,27 -1535,27 +1535,27 @@@ BROADCOM B44 10/100 ETHERNET DRIVE
  M:    Gary Zambrano <zambrano@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/b44.*
 +F:    drivers/net/ethernet/broadcom/b44.*
  
  BROADCOM BNX2 GIGABIT ETHERNET DRIVER
  M:    Michael Chan <mchan@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/bnx2.*
 -F:    drivers/net/bnx2_*
 +F:    drivers/net/ethernet/broadcom/bnx2.*
 +F:    drivers/net/ethernet/broadcom/bnx2_*
  
  BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
  M:    Eilon Greenstein <eilong@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/bnx2x/
 +F:    drivers/net/ethernet/broadcom/bnx2x/
  
  BROADCOM TG3 GIGABIT ETHERNET DRIVER
  M:    Matt Carlson <mcarlson@broadcom.com>
  M:    Michael Chan <mchan@broadcom.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/tg3.*
 +F:    drivers/net/ethernet/broadcom/tg3.*
  
  BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
  M:    Brett Rudley <brudley@broadcom.com>
@@@ -1577,7 -1585,7 +1585,7 @@@ M:      Rasesh Mody <rmody@brocade.com
  M:    Debashis Dutt <ddutt@brocade.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/bna/
 +F:    drivers/net/ethernet/brocade/bna/
  
  BSG (block layer generic sg v4 driver)
  M:    FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
@@@ -1762,13 -1770,13 +1770,13 @@@ M:   Vasanthy Kolluri <vkolluri@cisco.com
  M:    Roopa Prabhu <roprabhu@cisco.com>
  M:    David Wang <dwang2@cisco.com>
  S:    Supported
 -F:    drivers/net/enic/
 +F:    drivers/net/ethernet/cisco/enic/
  
  CIRRUS LOGIC EP93XX ETHERNET DRIVER
  M:    Hartley Sweeten <hsweeten@visionengravers.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/arm/ep93xx_eth.c
 +F:    drivers/net/ethernet/cirrus/ep93xx_eth.c
  
  CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER
  M:    Lennert Buytenhek <kernel@wantstofly.org>
@@@ -1908,7 -1916,7 +1916,7 @@@ CPMAC ETHERNET DRIVE
  M:    Florian Fainelli <florian@openwrt.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/cpmac.c
 +F:    drivers/net/ethernet/ti/cpmac.c
  
  CPU FREQUENCY DRIVERS
  M:    Dave Jones <davej@redhat.com>
@@@ -1925,12 -1933,6 +1933,12 @@@ S:    Maintaine
  F:    arch/x86/kernel/cpuid.c
  F:    arch/x86/kernel/msr.c
  
 +CPU POWER MONITORING SUBSYSTEM
 +M:    Dominik Brodowski <linux@dominikbrodowski.net>
 +M:    Thomas Renninger <trenn@suse.de>
 +S:    Maintained
 +F:    tools/power/cpupower
 +
  CPUSETS
  M:    Paul Menage <menage@google.com>
  W:    http://www.bullopensource.org/cpuset/
@@@ -1995,7 -1997,7 +2003,7 @@@ M:      Divy Le Ray <divy@chelsio.com
  L:    netdev@vger.kernel.org
  W:    http://www.chelsio.com
  S:    Supported
 -F:    drivers/net/cxgb3/
 +F:    drivers/net/ethernet/chelsio/cxgb3/
  
  CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
  M:    Steve Wise <swise@chelsio.com>
@@@ -2009,7 -2011,7 +2017,7 @@@ M:      Dimitris Michailidis <dm@chelsio.com
  L:    netdev@vger.kernel.org
  W:    http://www.chelsio.com
  S:    Supported
 -F:    drivers/net/cxgb4/
 +F:    drivers/net/ethernet/chelsio/cxgb4/
  
  CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
  M:    Steve Wise <swise@chelsio.com>
@@@ -2023,14 -2025,14 +2031,14 @@@ M:   Casey Leedom <leedom@chelsio.com
  L:    netdev@vger.kernel.org
  W:    http://www.chelsio.com
  S:    Supported
 -F:    drivers/net/cxgb4vf/
 +F:    drivers/net/ethernet/chelsio/cxgb4vf/
  
  STMMAC ETHERNET DRIVER
  M:    Giuseppe Cavallaro <peppe.cavallaro@st.com>
  L:    netdev@vger.kernel.org
  W:    http://www.stlinux.com
  S:    Supported
 -F:    drivers/net/stmmac/
 +F:    drivers/net/ethernet/stmicro/stmmac/
  
  CYBERPRO FB DRIVER
  M:    Russell King <linux@arm.linux.org.uk>
@@@ -2074,7 -2076,7 +2082,7 @@@ DAVICOM FAST ETHERNET (DMFE) NETWORK DR
  L:    netdev@vger.kernel.org
  S:    Orphan
  F:    Documentation/networking/dmfe.txt
 -F:    drivers/net/tulip/dmfe.c
 +F:    drivers/net/ethernet/tulip/dmfe.c
  
  DC390/AM53C974 SCSI driver
  M:    Kurt Garloff <garloff@suse.de>
@@@ -2113,7 -2115,7 +2121,7 @@@ F:      net/decnet
  DEFXX FDDI NETWORK DRIVER
  M:    "Maciej W. Rozycki" <macro@linux-mips.org>
  S:    Maintained
 -F:    drivers/net/defxx.*
 +F:    drivers/net/fddi/defxx.*
  
  DELL LAPTOP DRIVER
  M:    Matthew Garrett <mjg59@srcf.ucam.org>
@@@ -2466,7 -2468,7 +2474,7 @@@ EHEA (IBM pSeries eHEA 10Gb ethernet ad
  M:    Breno Leitao <leitao@linux.vnet.ibm.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ehea/
 +F:    drivers/net/ethernet/ibm/ehea/
  
  EMBEDDED LINUX
  M:    Paul Gortmaker <paul.gortmaker@windriver.com>
@@@ -2511,7 -2513,7 +2519,7 @@@ ETHEREXPRESS-16 NETWORK DRIVE
  M:    Philip Blundell <philb@gnu.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/eexpress.*
 +F:    drivers/net/ethernet/i825xx/eexpress.*
  
  ETHERNET BRIDGE
  M:    Stephen Hemminger <shemminger@linux-foundation.org>
@@@ -2525,7 -2527,7 +2533,7 @@@ F:      net/bridge
  ETHERTEAM 16I DRIVER
  M:    Mika Kuoppala <miku@iki.fi>
  S:    Maintained
 -F:    drivers/net/eth16i.c
 +F:    drivers/net/ethernet/fujitsu/eth16i.c
  
  EXT2 FILE SYSTEM
  M:    Jan Kara <jack@suse.cz>
@@@ -2643,8 -2645,9 +2651,8 @@@ S:      Maintaine
  F:    arch/x86/math-emu/
  
  FRAME RELAY DLCI/FRAD (Sangoma drivers too)
 -M:    Mike McLagan <mike.mclagan@linux.org>
  L:    netdev@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wan/dlci.c
  F:    drivers/net/wan/sdla.c
  
@@@ -2689,7 -2692,7 +2697,7 @@@ M:      Vitaly Bordug <vbordug@ru.mvista.com
  L:    linuxppc-dev@lists.ozlabs.org
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/fs_enet/
 +F:    drivers/net/ethernet/freescale/fs_enet/
  F:    include/linux/fs_enet_pd.h
  
  FREESCALE QUICC ENGINE LIBRARY
@@@ -2711,7 -2714,7 +2719,7 @@@ M:      Li Yang <leoli@freescale.com
  L:    netdev@vger.kernel.org
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
 -F:    drivers/net/ucc_geth*
 +F:    drivers/net/ethernet/freescale/ucc_geth*
  
  FREESCALE QUICC ENGINE UCC UART DRIVER
  M:    Timur Tabi <timur@freescale.com>
@@@ -3049,7 -3052,6 +3057,7 @@@ S:      Maintaine
  F:    include/linux/hippidevice.h
  F:    include/linux/if_hippi.h
  F:    net/802/hippi.c
 +F:    drivers/net/hippi/
  
  HOST AP DRIVER
  M:    Jouni Malinen <j@w1.fi>
@@@ -3067,7 -3069,7 +3075,7 @@@ F:      drivers/platform/x86/tc1100-wmi.
  HP100:        Driver for HP 10/100 Mbit/s Voice Grade Network Adapter Series
  M:    Jaroslav Kysela <perex@perex.cz>
  S:    Maintained
 -F:    drivers/net/hp100.*
 +F:    drivers/net/ethernet/hp/hp100.*
  
  HPET: High Precision Event Timers driver
  M:    Clemens Ladisch <clemens@ladisch.de>
@@@ -3165,7 -3167,7 +3173,7 @@@ IBM Power Virtual Ethernet Device Drive
  M:    Santiago Leon <santil@linux.vnet.ibm.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/ibmveth.*
 +F:    drivers/net/ethernet/ibm/ibmveth.*
  
  IBM ServeRAID RAID DRIVER
  P:    Jack Hammer
@@@ -3321,7 -3323,7 +3329,7 @@@ F:      arch/arm/mach-ixp4xx/include/mach/qm
  F:    arch/arm/mach-ixp4xx/include/mach/npe.h
  F:    arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
  F:    arch/arm/mach-ixp4xx/ixp4xx_npe.c
 -F:    drivers/net/arm/ixp4xx_eth.c
 +F:    drivers/net/ethernet/xscale/ixp4xx_eth.c
  F:    drivers/net/wan/ixp4xx_hss.c
  
  INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT
@@@ -3333,7 -3335,7 +3341,7 @@@ INTEL IXP2000 ETHERNET DRIVE
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ixp2000/
 +F:    drivers/net/ethernet/xscale/ixp2000/
  
  INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf)
  M:    Jeff Kirsher <jeffrey.t.kirsher@intel.com>
@@@ -3342,13 -3344,13 +3350,13 @@@ M:   Bruce Allan <bruce.w.allan@intel.com
  M:    Carolyn Wyborny <carolyn.wyborny@intel.com>
  M:    Don Skidmore <donald.c.skidmore@intel.com>
  M:    Greg Rose <gregory.v.rose@intel.com>
 -M:    PJ Waskiewicz <peter.p.waskiewicz.jr@intel.com>
 +M:    Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
  M:    Alex Duyck <alexander.h.duyck@intel.com>
  M:    John Ronciak <john.ronciak@intel.com>
  L:    e1000-devel@lists.sourceforge.net
  W:    http://e1000.sourceforge.net/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-2.6.git
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next.git
  S:    Supported
  F:    Documentation/networking/e100.txt
  F:    Documentation/networking/e1000.txt
@@@ -3358,13 -3360,14 +3366,13 @@@ F:   Documentation/networking/igbvf.tx
  F:    Documentation/networking/ixgb.txt
  F:    Documentation/networking/ixgbe.txt
  F:    Documentation/networking/ixgbevf.txt
 -F:    drivers/net/e100.c
 -F:    drivers/net/e1000/
 -F:    drivers/net/e1000e/
 -F:    drivers/net/igb/
 -F:    drivers/net/igbvf/
 -F:    drivers/net/ixgb/
 -F:    drivers/net/ixgbe/
 -F:    drivers/net/ixgbevf/
 +F:    drivers/net/ethernet/intel/
 +
 +INTEL MRST PMU DRIVER
 +M:    Len Brown <len.brown@intel.com>
 +L:    linux-pm@lists.linux-foundation.org
 +S:    Supported
 +F:    arch/x86/platform/mrst/pmu.*
  
  INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
  L:    linux-wireless@vger.kernel.org
@@@ -3426,7 -3429,7 +3434,7 @@@ IOC3 ETHERNET DRIVE
  M:    Ralf Baechle <ralf@linux-mips.org>
  L:    linux-mips@linux-mips.org
  S:    Maintained
 -F:    drivers/net/ioc3-eth.c
 +F:    drivers/net/ethernet/sgi/ioc3-eth.c
  
  IOC3 SERIAL DRIVER
  M:    Pat Gefre <pfg@sgi.com>
@@@ -3444,7 -3447,7 +3452,7 @@@ M:      Francois Romieu <romieu@fr.zoreil.co
  M:    Sorbica Shieh <sorbica@icplus.com.tw>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ipg.*
 +F:    drivers/net/ethernet/icplus/ipg.*
  
  IPATH DRIVER
  M:    Mike Marciniszyn <infinipath@qlogic.com>
@@@ -3592,7 -3595,7 +3600,7 @@@ JME NETWORK DRIVE
  M:    Guo-Fu Tseng <cooldavid@cooldavid.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/jme.*
 +F:    drivers/net/ethernet/jme.*
  
  JOURNALLING FLASH FILE SYSTEM V2 (JFFS2)
  M:    David Woodhouse <dwmw2@infradead.org>
@@@ -3899,9 -3902,9 +3907,9 @@@ F:      arch/powerpc/platforms/powermac
  F:    drivers/macintosh/
  
  LINUX FOR POWERPC EMBEDDED MPC5XXX
 -M:    Grant Likely <grant.likely@secretlab.ca>
 +M:    Anatolij Gustschin <agust@denx.de>
  L:    linuxppc-dev@lists.ozlabs.org
 -T:    git git://git.secretlab.ca/git/linux-2.6.git
 +T:    git git://git.denx.de/linux-2.6-agust.git
  S:    Maintained
  F:    arch/powerpc/platforms/512x/
  F:    arch/powerpc/platforms/52xx/
@@@ -4123,7 -4126,7 +4131,7 @@@ MARVELL MV643XX ETHERNET DRIVE
  M:    Lennert Buytenhek <buytenh@wantstofly.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/mv643xx_eth.*
 +F:    drivers/net/ethernet/marvell/mv643xx_eth.*
  F:    include/linux/mv643xx.h
  
  MARVELL MWIFIEX WIRELESS DRIVER
@@@ -4155,13 -4158,6 +4163,13 @@@ S:    Orpha
  F:    drivers/video/matrox/matroxfb_*
  F:    include/linux/matroxfb.h
  
 +MAX1668 TEMPERATURE SENSOR DRIVER
 +M:    "David George" <david.george@ska.ac.za>
 +L:    lm-sensors@lm-sensors.org
 +S:    Maintained
 +F:    Documentation/hwmon/max1668
 +F:    drivers/hwmon/max1668.c
 +
  MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
  M:    "Hans J. Koch" <hjk@hansjkoch.de>
  L:    lm-sensors@lm-sensors.org
@@@ -4337,12 -4333,12 +4345,12 @@@ M:   Andrew Gallatin <gallatin@myri.com
  L:    netdev@vger.kernel.org
  W:    http://www.myri.com/scs/download-Myri10GE.html
  S:    Supported
 -F:    drivers/net/myri10ge/
 +F:    drivers/net/ethernet/myricom/myri10ge/
  
  NATSEMI ETHERNET DRIVER (DP8381x)
  M:    Tim Hockin <thockin@hockin.org>
  S:    Maintained
 -F:    drivers/net/natsemi.c
 +F:    drivers/net/ethernet/natsemi/natsemi.c
  
  NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER
  M:    Daniel Mack <zonque@gmail.com>
@@@ -4382,8 -4378,9 +4390,8 @@@ W:      http://trac.neterion.com/cgi-bin/tra
  W:    http://trac.neterion.com/cgi-bin/trac.cgi/wiki/X3100Linux?Anonymous
  S:    Supported
  F:    Documentation/networking/s2io.txt
 -F:    drivers/net/s2io*
  F:    Documentation/networking/vxge.txt
 -F:    drivers/net/vxge/
 +F:    drivers/net/ethernet/neterion/
  
  NETFILTER/IPTABLES/IPCHAINS
  P:    Rusty Russell
@@@ -4407,10 -4404,10 +4415,10 @@@ F:   net/*/netfilter
  F:    net/netfilter/
  
  NETLABEL
 -M:    Paul Moore <paul.moore@hp.com>
 +M:    Paul Moore <paul@paul-moore.com>
  W:    http://netlabel.sf.net
  L:    netdev@vger.kernel.org
 -S:    Supported
 +S:    Maintained
  F:    Documentation/netlabel/
  F:    include/net/netlabel.h
  F:    net/netlabel/
@@@ -4455,6 -4452,7 +4463,6 @@@ F:      include/linux/netdevice.
  NETWORKING [IPv4/IPv6]
  M:    "David S. Miller" <davem@davemloft.net>
  M:    Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
 -M:    "Pekka Savola (ipv6)" <pekkas@netcore.fi>
  M:    James Morris <jmorris@namei.org>
  M:    Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
  M:    Patrick McHardy <kaber@trash.net>
@@@ -4467,7 -4465,7 +4475,7 @@@ F:      include/net/ip
  F:    arch/x86/net/*
  
  NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK)
 -M:    Paul Moore <paul.moore@hp.com>
 +M:    Paul Moore <paul@paul-moore.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  
@@@ -4496,12 -4494,11 +4504,12 @@@ F:   include/linux/if_
  F:    include/linux/*device.h
  
  NETXEN (1/10) GbE SUPPORT
 -M:    Amit Kumar Salecha <amit.salecha@qlogic.com>
 +M:    Sony Chacko <sony.chacko@qlogic.com>
 +M:    Rajesh Borundia <rajesh.borundia@qlogic.com>
  L:    netdev@vger.kernel.org
  W:    http://www.qlogic.com
  S:    Supported
 -F:    drivers/net/netxen/
 +F:    drivers/net/ethernet/qlogic/netxen/
  
  NFC SUBSYSTEM
  M:    Lauro Ramos Venancio <lauro.venancio@openbossa.org>
@@@ -4533,7 -4530,7 +4541,7 @@@ M:      Jan-Pascal van Best <janpascal@vanbe
  M:    Andreas Mohr <andi@lisas.de>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ni5010.*
 +F:    drivers/net/ethernet/racal/ni5010.*
  
  NILFS2 FILESYSTEM
  M:    KONISHI Ryusuke <konishi.ryusuke@lab.ntt.co.jp>
@@@ -4731,7 -4728,6 +4739,7 @@@ S:      Maintaine
  F:    drivers/of
  F:    include/linux/of*.h
  K:    of_get_property
 +K:    of_match_table
  
  OPENRISC ARCHITECTURE
  M:    Jonas Bonn <jonas@southpole.se>
@@@ -4799,7 -4795,7 +4807,7 @@@ PA SEMI ETHERNET DRIVE
  M:    Olof Johansson <olof@lixom.net>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/pasemi_mac.*
 +F:    drivers/net/ethernet/pasemi/*
  
  PA SEMI SMBUS DRIVER
  M:    Olof Johansson <olof@lixom.net>
@@@ -4946,7 -4942,7 +4954,7 @@@ PCNET32 NETWORK DRIVE
  M:    Don Fry <pcnet32@frontier.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/pcnet32.c
 +F:    drivers/net/ethernet/amd/pcnet32.c
  
  PCRYPT PARALLEL CRYPTO ENGINE
  M:    Steffen Klassert <steffen.klassert@secunet.com>
@@@ -5022,17 -5018,6 +5030,17 @@@ F:    drivers/i2c/busses/i2c-puv3.
  F:    drivers/video/fb-puv3.c
  F:    drivers/rtc/rtc-puv3.c
  
 +PMBUS HARDWARE MONITORING DRIVERS
 +M:    Guenter Roeck <guenter.roeck@ericsson.com>
 +L:    lm-sensors@lm-sensors.org
 +W:    http://www.lm-sensors.org/
 +W:    http://www.roeck-us.net/linux/drivers/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
 +S:    Maintained
 +F:    Documentation/hwmon/pmbus
 +F:    drivers/hwmon/pmbus/
 +F:    include/linux/i2c/pmbus.h
 +
  PMC SIERRA MaxRAID DRIVER
  M:    Anil Ravindranath <anil_ravindranath@pmc-sierra.com>
  L:    linux-scsi@vger.kernel.org
@@@ -5078,7 -5063,7 +5086,7 @@@ PPP PROTOCOL DRIVERS AND COMPRESSOR
  M:    Paul Mackerras <paulus@samba.org>
  L:    linux-ppp@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/ppp_*
 +F:    drivers/net/ppp/ppp_*
  
  PPP OVER ATM (RFC 2364)
  M:    Mitchell Blank Jr <mitch@sfgoth.com>
@@@ -5089,8 -5074,8 +5097,8 @@@ F:      include/linux/atmppp.
  PPP OVER ETHERNET
  M:    Michal Ostrowski <mostrows@earthlink.net>
  S:    Maintained
 -F:    drivers/net/pppoe.c
 -F:    drivers/net/pppox.c
 +F:    drivers/net/ppp/pppoe.c
 +F:    drivers/net/ppp/pppox.c
  
  PPP OVER L2TP
  M:    James Chapman <jchapman@katalix.com>
@@@ -5111,7 -5096,7 +5119,7 @@@ PPTP DRIVE
  M:    Dmitry Kozlov <xeb@mail.ru>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/pptp.c
 +F:    drivers/net/ppp/pptp.c
  W:    http://sourceforge.net/projects/accel-pptp
  
  PREEMPTIBLE KERNEL
@@@ -5140,7 -5125,7 +5148,7 @@@ M:      Geoff Levand <geoff@infradead.org
  L:    netdev@vger.kernel.org
  L:    cbe-oss-dev@lists.ozlabs.org
  S:    Maintained
 -F:    drivers/net/ps3_gelic_net.*
 +F:    drivers/net/ethernet/toshiba/ps3_gelic_net.*
  
  PS3 PLATFORM SUPPORT
  M:    Geoff Levand <geoff@infradead.org>
@@@ -5258,24 -5243,23 +5266,24 @@@ M:   linux-driver@qlogic.co
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    Documentation/networking/LICENSE.qla3xxx
 -F:    drivers/net/qla3xxx.*
 +F:    drivers/net/ethernet/qlogic/qla3xxx.*
  
  QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
 -M:    Amit Kumar Salecha <amit.salecha@qlogic.com>
  M:    Anirban Chakraborty <anirban.chakraborty@qlogic.com>
 +M:    Sony Chacko <sony.chacko@qlogic.com>
  M:    linux-driver@qlogic.com
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/qlcnic/
 +F:    drivers/net/ethernet/qlogic/qlcnic/
  
  QLOGIC QLGE 10Gb ETHERNET DRIVER
 +M:    Anirban Chakraborty <anirban.chakraborty@qlogic.com>
  M:    Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
  M:    Ron Mercer <ron.mercer@qlogic.com>
  M:    linux-driver@qlogic.com
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/qlge/
 +F:    drivers/net/ethernet/qlogic/qlge/
  
  QNX4 FILESYSTEM
  M:    Anders Larsen <al@alarsen.net>
@@@ -5357,7 -5341,7 +5365,7 @@@ RDC R6040 FAST ETHERNET DRIVE
  M:    Florian Fainelli <florian@openwrt.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/r6040.c
 +F:    drivers/net/ethernet/rdc/r6040.c
  
  RDS - RELIABLE DATAGRAM SOCKETS
  M:    Andy Grover <andy.grover@oracle.com>
@@@ -5760,7 -5744,7 +5768,7 @@@ M:      Ajit Khaparde <ajit.khaparde@emulex.
  L:    netdev@vger.kernel.org
  W:    http://www.emulex.com
  S:    Supported
 -F:    drivers/net/benet/
 +F:    drivers/net/ethernet/emulex/benet/
  
  SFC NETWORK DRIVER
  M:    Solarflare linux maintainers <linux-net-drivers@solarflare.com>
@@@ -5768,7 -5752,7 +5776,7 @@@ M:      Steve Hodgson <shodgson@solarflare.c
  M:    Ben Hutchings <bhutchings@solarflare.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/sfc/
 +F:    drivers/net/ethernet/sfc/
  
  SGI GRU DRIVER
  M:    Jack Steiner <steiner@sgi.com>
@@@ -5834,14 -5818,14 +5842,14 @@@ SIS 190 ETHERNET DRIVE
  M:    Francois Romieu <romieu@fr.zoreil.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/sis190.c
 +F:    drivers/net/ethernet/sis/sis190.c
  
  SIS 900/7016 FAST ETHERNET DRIVER
  M:    Daniele Venzano <venza@brownhat.org>
  W:    http://www.brownhat.org/sis900.html
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/sis900.*
 +F:    drivers/net/ethernet/sis/sis900.*
  
  SIS 96X I2C/SMBUS DRIVER
  M:    "Mark M. Hoffman" <mhoffman@lightlink.com>
@@@ -5868,7 -5852,8 +5876,7 @@@ SKGE, SKY2 10/100/1000 GIGABIT ETHERNE
  M:    Stephen Hemminger <shemminger@linux-foundation.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/skge.*
 -F:    drivers/net/sky2.*
 +F:    drivers/net/ethernet/marvell/sk*
  
  SLAB ALLOCATOR
  M:    Christoph Lameter <cl@linux-foundation.org>
@@@ -5882,7 -5867,7 +5890,7 @@@ F:      mm/sl?b.
  SMC91x ETHERNET DRIVER
  M:    Nicolas Pitre <nico@fluxnic.net>
  S:    Odd Fixes
 -F:    drivers/net/smc91x.*
 +F:    drivers/net/ethernet/smsc/smc91x.*
  
  SMM665 HARDWARE MONITOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
@@@ -5917,13 -5902,13 +5925,13 @@@ M:   Steve Glendinning <steve.glendinning
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    include/linux/smsc911x.h
 -F:    drivers/net/smsc911x.*
 +F:    drivers/net/ethernet/smsc/smsc911x.*
  
  SMSC9420 PCI ETHERNET DRIVER
  M:    Steve Glendinning <steve.glendinning@smsc.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/smsc9420.*
 +F:    drivers/net/ethernet/smsc/smsc9420.*
  
  SN-IA64 (Itanium) SUB-PLATFORM
  M:    Jes Sorensen <jes@sgi.com>
@@@ -5957,7 -5942,7 +5965,7 @@@ SONIC NETWORK DRIVE
  M:    Thomas Bogendoerfer <tsbogend@alpha.franken.de>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/sonic.*
 +F:    drivers/net/ethernet/natsemi/sonic.*
  
  SONICS SILICON BACKPLANE DRIVER (SSB)
  M:    Michael Buesch <m@bues.ch>
@@@ -6098,7 -6083,7 +6106,7 @@@ M:      Jens Osterkamp <jens@de.ibm.com
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    Documentation/networking/spider_net.txt
 -F:    drivers/net/spider_net*
 +F:    drivers/net/ethernet/toshiba/spider_net*
  
  SPU FILE SYSTEM
  M:    Jeremy Kerr <jk@ozlabs.org>
@@@ -6145,12 -6130,6 +6153,6 @@@ M:     Jakub Schmidtke <sjakub@gmail.com
  S:    Odd Fixes
  F:    drivers/staging/asus_oled/
  
- STAGING - ATHEROS ATH6KL WIRELESS DRIVER
- M:    Luis R. Rodriguez <mcgrof@gmail.com>
- M:    Naveen Singh <nsingh@atheros.com>
- S:    Odd Fixes
- F:    drivers/staging/ath6kl/
  STAGING - COMEDI
  M:    Ian Abbott <abbotti@mev.co.uk>
  M:    Mori Hess <fmhess@users.sourceforge.net>
@@@ -6276,7 -6255,7 +6278,7 @@@ F:      drivers/staging/xgifb
  STARFIRE/DURALAN NETWORK DRIVER
  M:    Ion Badulescu <ionut@badula.org>
  S:    Odd Fixes
 -F:    drivers/net/starfire*
 +F:    drivers/net/ethernet/adaptec/starfire*
  
  SUN3/3X
  M:    Sam Creasey <sammy@sammy.net>
@@@ -6285,7 -6264,6 +6287,7 @@@ S:      Maintaine
  F:    arch/m68k/kernel/*sun3*
  F:    arch/m68k/sun3*/
  F:    arch/m68k/include/asm/sun3*
 +F:    drivers/net/ethernet/i825xx/sun3*
  
  SUPERH
  M:    Paul Mundt <lethal@linux-sh.org>
@@@ -6329,7 -6307,6 +6331,7 @@@ F:      include/linux/sysv_fs.
  TARGET SUBSYSTEM
  M:    Nicholas A. Bellinger <nab@linux-iscsi.org>
  L:    linux-scsi@vger.kernel.org
 +L:    target-devel@vger.kernel.org
  L:    http://groups.google.com/group/linux-iscsi-target-dev
  W:    http://www.linux-iscsi.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/nab/lio-core-2.6.git master
@@@ -6374,7 -6351,7 +6376,7 @@@ M:      Alexander Indenbaum <baum@tehutinetw
  M:    Andy Gospodarek <andy@greyhouse.net>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    drivers/net/tehuti*
 +F:    drivers/net/ethernet/tehuti/*
  
  Telecom Clock Driver for MCPL0010
  M:    Mark Gross <mark.gross@intel.com>
@@@ -6425,7 -6402,7 +6427,7 @@@ W:      http://www.tilera.com/scm
  S:    Supported
  F:    arch/tile/
  F:    drivers/tty/hvc/hvc_tile.c
 -F:    drivers/net/tile/
 +F:    drivers/net/ethernet/tile/
  F:    drivers/edac/tile_edac.c
  
  TLAN NETWORK DRIVER
@@@ -6434,7 -6411,7 +6436,7 @@@ L:      tlan-devel@lists.sourceforge.net (su
  W:    http://sourceforge.net/projects/tlan/
  S:    Maintained
  F:    Documentation/networking/tlan.txt
 -F:    drivers/net/tlan.*
 +F:    drivers/net/ethernet/ti/tlan.*
  
  TOMOYO SECURITY MODULE
  M:    Kentaro Takeda <takedakn@nttdata.co.jp>
@@@ -6528,7 -6505,7 +6530,7 @@@ TULIP NETWORK DRIVER
  M:    Grant Grundler <grundler@parisc-linux.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/tulip/
 +F:    drivers/net/ethernet/tulip/
  
  TUN/TAP driver
  M:    Maxim Krasnyansky <maxk@qualcomm.com>
@@@ -6574,7 -6551,7 +6576,7 @@@ W:      http://uclinux-h8.sourceforge.jp
  S:    Supported
  F:    arch/h8300/
  F:    drivers/ide/ide-h8300.c
 -F:    drivers/net/ne-h8300.c
 +F:    drivers/net/ethernet/8390/ne-h8300.c
  
  UDF FILESYSTEM
  M:    Jan Kara <jack@suse.cz>
@@@ -7002,7 -6979,7 +7004,7 @@@ F:      include/linux/vhost.
  VIA RHINE NETWORK DRIVER
  M:    Roger Luethi <rl@hellgate.ch>
  S:    Maintained
 -F:    drivers/net/via-rhine.c
 +F:    drivers/net/ethernet/via/via-rhine.c
  
  VIAPRO SMBUS DRIVER
  M:    Jean Delvare <khali@linux-fr.org>
@@@ -7030,7 -7007,7 +7032,7 @@@ VIA VELOCITY NETWORK DRIVE
  M:    Francois Romieu <romieu@fr.zoreil.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/net/via-velocity.*
 +F:    drivers/net/ethernet/via/via-velocity.*
  
  VLAN (802.1Q)
  M:    Patrick McHardy <kaber@trash.net>
@@@ -7363,7 -7340,7 +7365,7 @@@ THE RES
  M:    Linus Torvalds <torvalds@linux-foundation.org>
  L:    linux-kernel@vger.kernel.org
  Q:    http://patchwork.kernel.org/project/LKML/list/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
  S:    Buried alive in reporters
  F:    *
  F:    */
  #define COMP_HDR_LEN 4
  #define COMP_CKSUM_LEN 2
  
- #define AR_CH0_TOP (0x00016288)
- #define AR_CH0_TOP_XPABIASLVL (0x300)
- #define AR_CH0_TOP_XPABIASLVL_S (8)
- #define AR_CH0_THERM (0x00016290)
- #define AR_CH0_THERM_XPABIASLVL_MSB 0x3
- #define AR_CH0_THERM_XPABIASLVL_MSB_S 0
- #define AR_CH0_THERM_XPASHORT2GND 0x4
- #define AR_CH0_THERM_XPASHORT2GND_S 2
- #define AR_SWITCH_TABLE_COM_ALL (0xffff)
- #define AR_SWITCH_TABLE_COM_ALL_S (0)
- #define AR_SWITCH_TABLE_COM2_ALL (0xffffff)
- #define AR_SWITCH_TABLE_COM2_ALL_S (0)
- #define AR_SWITCH_TABLE_ALL (0xfff)
- #define AR_SWITCH_TABLE_ALL_S (0)
  #define LE16(x) __constant_cpu_to_le16(x)
  #define LE32(x) __constant_cpu_to_le32(x)
  
@@@ -158,7 -139,7 +139,7 @@@ static const struct ar9300_eeprom ar930
                .papdRateMaskHt20 = LE32(0x0cf0e0e0),
                .papdRateMaskHt40 = LE32(0x6cf0e0e0),
                .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0,
                },
         },
        .base_ext1 = {
                 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
                 { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } },
  
 -               { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } },
 +               { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0) } },
                 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
                 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
  
                .papdRateMaskHt20 = LE32(0x0c80c080),
                .papdRateMaskHt40 = LE32(0x0080c080),
                .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0,
                },
         },
        .base_ext2 = {
@@@ -735,7 -716,7 +716,7 @@@ static const struct ar9300_eeprom ar930
                .papdRateMaskHt20 = LE32(0x0c80c080),
                .papdRateMaskHt40 = LE32(0x0080c080),
                .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0,
                },
         },
         .base_ext1 = {
                 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
                 { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } },
  
 -               { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } },
 +               { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0) } },
                 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
                 { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
  
                .papdRateMaskHt20 = LE32(0x0cf0e0e0),
                .papdRateMaskHt40 = LE32(0x6cf0e0e0),
                .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0,
                },
         },
        .base_ext2 = {
@@@ -1313,7 -1294,7 +1294,7 @@@ static const struct ar9300_eeprom ar930
                .papdRateMaskHt20 = LE32(0x80c080),
                .papdRateMaskHt40 = LE32(0x80c080),
                .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0,
                },
        },
        .base_ext1 = {
                .papdRateMaskHt20 = LE32(0x0cf0e0e0),
                .papdRateMaskHt40 = LE32(0x6cf0e0e0),
                .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0,
                },
        },
        .base_ext2 = {
@@@ -1891,7 -1872,7 +1872,7 @@@ static const struct ar9300_eeprom ar930
                .papdRateMaskHt20 = LE32(0x0c80c080),
                .papdRateMaskHt40 = LE32(0x0080c080),
                .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0,
                },
        },
        .base_ext1 = {
                { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
                { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } },
  
 -              { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } },
 +              { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0) } },
                { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
                { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
  
                .papdRateMaskHt20 = LE32(0x0cf0e0e0),
                .papdRateMaskHt40 = LE32(0x6cf0e0e0),
                .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0,
                },
        },
        .base_ext2 = {
@@@ -2468,7 -2449,7 +2449,7 @@@ static const struct ar9300_eeprom ar930
                .papdRateMaskHt20 = LE32(0x0c80C080),
                .papdRateMaskHt40 = LE32(0x0080C080),
                .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0,
                },
         },
         .base_ext1 = {
                .papdRateMaskHt20 = LE32(0x0cf0e0e0),
                .papdRateMaskHt40 = LE32(0x6cf0e0e0),
                .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                       0, 0, 0, 0, 0, 0, 0, 0,
                },
         },
        .base_ext2 = {
@@@ -3573,6 -3554,8 +3554,8 @@@ static void ar9003_hw_xpa_bias_level_ap
  
        if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
                REG_RMW_FIELD(ah, AR_CH0_TOP2, AR_CH0_TOP2_XPABIASLVL, bias);
+       else if (AR_SREV_9480(ah))
+               REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
        else {
                REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
                REG_RMW_FIELD(ah, AR_CH0_THERM,
        }
  }
  
+ static u16 ar9003_switch_com_spdt_get(struct ath_hw *ah, bool is_2ghz)
+ {
+       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
+       __le32 val;
+       if (is_2ghz)
+               val = eep->modalHeader2G.switchcomspdt;
+       else
+               val = eep->modalHeader5G.switchcomspdt;
+       return le32_to_cpu(val);
+ }
  static u32 ar9003_hw_ant_ctrl_common_get(struct ath_hw *ah, bool is2ghz)
  {
        struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
@@@ -3637,7 -3633,36 +3633,36 @@@ static void ar9003_hw_ant_ctrl_apply(st
  
        u32 value = ar9003_hw_ant_ctrl_common_get(ah, is2ghz);
  
-       REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM, AR_SWITCH_TABLE_COM_ALL, value);
+       if (AR_SREV_9480(ah)) {
+               if (AR_SREV_9480_10(ah)) {
+                       value &= ~AR_SWITCH_TABLE_COM_SPDT;
+                       value |= 0x00100000;
+               }
+               REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM,
+                               AR_SWITCH_TABLE_COM_AR9480_ALL, value);
+       } else
+               REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM,
+                             AR_SWITCH_TABLE_COM_ALL, value);
+       /*
+        *   AR9480 defines new switch table for BT/WLAN,
+        *       here's new field name in XXX.ref for both 2G and 5G.
+        *   Register: [GLB_CONTROL] GLB_CONTROL (@0x20044)
+        *   15:12   R/W     SWITCH_TABLE_COM_SPDT_WLAN_RX
+        * SWITCH_TABLE_COM_SPDT_WLAN_RX
+        *
+        *   11:8     R/W     SWITCH_TABLE_COM_SPDT_WLAN_TX
+        * SWITCH_TABLE_COM_SPDT_WLAN_TX
+        *
+        *   7:4 R/W  SWITCH_TABLE_COM_SPDT_WLAN_IDLE
+        * SWITCH_TABLE_COM_SPDT_WLAN_IDLE
+        */
+       if (AR_SREV_9480_20_OR_LATER(ah)) {
+               value = ar9003_switch_com_spdt_get(ah, is2ghz);
+               REG_RMW_FIELD(ah, AR_PHY_GLB_CONTROL,
+                               AR_SWITCH_TABLE_COM_SPDT_ALL, value);
+       }
  
        value = ar9003_hw_ant_ctrl_common_2_get(ah, is2ghz);
        REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM_2, AR_SWITCH_TABLE_COM2_ALL, value);
@@@ -3837,6 -3862,7 +3862,7 @@@ static void ar9003_hw_internal_regulato
  {
        int internal_regulator =
                ath9k_hw_ar9300_get_eeprom(ah, EEP_INTERNAL_REGULATOR);
+       u32 reg_val;
  
        if (internal_regulator) {
                if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
                                }
                        } else {
                                reg_pmu_set = (5 << 1) | (7 << 4) |
 -                                            (1 << 8) | (2 << 14) |
 +                                            (2 << 8) | (2 << 14) |
                                              (6 << 17) | (1 << 20) |
                                              (3 << 24) | (1 << 28);
                        }
                        REG_WRITE(ah, AR_PHY_PMU2, reg_pmu_set);
                        if (!is_pmu_set(ah, AR_PHY_PMU2, reg_pmu_set))
                                return;
+               } else if (AR_SREV_9480(ah)) {
+                       reg_val = ath9k_hw_ar9300_get_eeprom(ah, EEP_SWREG);
+                       REG_WRITE(ah, AR_PHY_PMU1, reg_val);
                } else {
                        /* Internal regulator is ON. Write swreg register. */
-                       int swreg = ath9k_hw_ar9300_get_eeprom(ah, EEP_SWREG);
+                       reg_val = ath9k_hw_ar9300_get_eeprom(ah, EEP_SWREG);
                        REG_WRITE(ah, AR_RTC_REG_CONTROL1,
                                  REG_READ(ah, AR_RTC_REG_CONTROL1) &
                                  (~AR_RTC_REG_CONTROL1_SWREG_PROGRAM));
-                       REG_WRITE(ah, AR_RTC_REG_CONTROL0, swreg);
+                       REG_WRITE(ah, AR_RTC_REG_CONTROL0, reg_val);
                        /* Set REG_CONTROL1.SWREG_PROGRAM */
                        REG_WRITE(ah, AR_RTC_REG_CONTROL1,
                                  REG_READ(ah,
                if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
                        REG_RMW_FIELD(ah, AR_PHY_PMU2, AR_PHY_PMU2_PGM, 0);
                        while (REG_READ_FIELD(ah, AR_PHY_PMU2,
-                                             AR_PHY_PMU2_PGM))
+                                               AR_PHY_PMU2_PGM))
                                udelay(10);
  
                        REG_RMW_FIELD(ah, AR_PHY_PMU1, AR_PHY_PMU1_PWD, 0x1);
                        while (!REG_READ_FIELD(ah, AR_PHY_PMU1,
-                                              AR_PHY_PMU1_PWD))
+                                               AR_PHY_PMU1_PWD))
                                udelay(10);
                        REG_RMW_FIELD(ah, AR_PHY_PMU2, AR_PHY_PMU2_PGM, 0x1);
                        while (!REG_READ_FIELD(ah, AR_PHY_PMU2,
-                                             AR_PHY_PMU2_PGM))
+                                               AR_PHY_PMU2_PGM))
                                udelay(10);
-               } else
-                       REG_WRITE(ah, AR_RTC_SLEEP_CLK,
-                                 (REG_READ(ah,
-                                  AR_RTC_SLEEP_CLK) |
-                                  AR_RTC_FORCE_SWREG_PRD));
+               } else if (AR_SREV_9480(ah))
+                       REG_RMW_FIELD(ah, AR_PHY_PMU1, AR_PHY_PMU1_PWD, 0x1);
+               else {
+                       reg_val = REG_READ(ah, AR_RTC_SLEEP_CLK) |
+                               AR_RTC_FORCE_SWREG_PRD;
+                       REG_WRITE(ah, AR_RTC_SLEEP_CLK, reg_val);
+               }
        }
  
  }
@@@ -4493,6 -4524,12 +4524,12 @@@ static int ar9003_hw_power_control_over
                tempSlope = eep->modalHeader5G.tempSlope;
  
        REG_RMW_FIELD(ah, AR_PHY_TPC_19, AR_PHY_TPC_19_ALPHA_THERM, tempSlope);
+       if (AR_SREV_9480_20(ah))
+               REG_RMW_FIELD(ah, AR_PHY_TPC_19_B1,
+                             AR_PHY_TPC_19_B1_ALPHA_THERM, tempSlope);
        REG_RMW_FIELD(ah, AR_PHY_TPC_18, AR_PHY_TPC_18_THERM_CAL_VALUE,
                      temperature[0]);
  
  #define AR_PHY_TX_IQCAL_CORR_COEFF_B0(_i)    (AR_SM_BASE + \
                                             (AR_SREV_9485(ah) ? \
                                              0x3d0 : 0x450) + ((_i) << 2))
+ #define AR_PHY_RTT_CTRL                       (AR_SM_BASE + 0x380)
+ #define AR_PHY_RTT_TABLE_SW_INTF_B    (AR_SM_BASE + 0x384)
+ #define AR_PHY_RTT_TABLE_SW_INTF_1_B0 (AR_SM_BASE + 0x388)
  
  #define AR_PHY_WATCHDOG_STATUS      (AR_SM_BASE + 0x5c0)
  #define AR_PHY_WATCHDOG_CTL_1       (AR_SM_BASE + 0x5c4)
  #define AR_PHY_BB_THERM_ADC_4_LATEST_VOLT_VALUE               0x0000ff00
  #define AR_PHY_BB_THERM_ADC_4_LATEST_VOLT_VALUE_S     8
  
+ /* AIC Registers */
+ #define AR_PHY_AIC_CTRL_0_B0  (AR_SM_BASE + 0x4b0)
+ #define AR_PHY_AIC_CTRL_1_B0  (AR_SM_BASE + 0x4b4)
+ #define AR_PHY_AIC_CTRL_2_B0  (AR_SM_BASE + 0x4b8)
+ #define AR_PHY_AIC_CTRL_3_B0  (AR_SM_BASE + 0x4bc)
+ #define AR_PHY_AIC_STAT_0_B0  (AR_SM_BASE + (AR_SREV_9480_10(ah) ? \
+                                       0x4c0 : 0x4c4))
+ #define AR_PHY_AIC_STAT_1_B0  (AR_SM_BASE + (AR_SREV_9480_10(ah) ? \
+                                       0x4c4 : 0x4c8))
+ #define AR_PHY_AIC_CTRL_4_B0  (AR_SM_BASE + 0x4c0)
+ #define AR_PHY_AIC_STAT_2_B0  (AR_SM_BASE + 0x4cc)
  
  #define AR_PHY_65NM_CH0_SYNTH4      0x1608c
  #define AR_PHY_SYNTH4_LONG_SHIFT_SELECT   0x00000002
  #define AR_PHY_65NM_CH0_BIAS2       0x160c4
  #define AR_PHY_65NM_CH0_BIAS4       0x160cc
  #define AR_PHY_65NM_CH0_RXTX4       0x1610c
- #define AR_PHY_65NM_CH0_THERM       (AR_SREV_9300(ah) ? 0x16290 : 0x1628c)
+ #define AR_CH0_TOP    (AR_SREV_9300(ah) ? 0x16288 : \
+                               ((AR_SREV_9480(ah) ? 0x1628c : 0x16280)))
+ #define AR_CH0_TOP_XPABIASLVL (0x300)
+ #define AR_CH0_TOP_XPABIASLVL_S (8)
+ #define AR_CH0_THERM  (AR_SREV_9300(ah) ? 0x16290 : \
+                               ((AR_SREV_9485(ah) ? 0x1628c : 0x16294)))
+ #define AR_CH0_THERM_XPABIASLVL_MSB 0x3
+ #define AR_CH0_THERM_XPABIASLVL_MSB_S 0
+ #define AR_CH0_THERM_XPASHORT2GND 0x4
+ #define AR_CH0_THERM_XPASHORT2GND_S 2
+ #define AR_SWITCH_TABLE_COM_ALL (0xffff)
+ #define AR_SWITCH_TABLE_COM_ALL_S (0)
+ #define AR_SWITCH_TABLE_COM_AR9480_ALL (0xffffff)
+ #define AR_SWITCH_TABLE_COM_AR9480_ALL_S (0)
+ #define AR_SWITCH_TABLE_COM_SPDT (0x00f00000)
+ #define AR_SWITCH_TABLE_COM_SPDT_ALL (0x0000fff0)
+ #define AR_SWITCH_TABLE_COM_SPDT_ALL_S (4)
+ #define AR_SWITCH_TABLE_COM2_ALL (0xffffff)
+ #define AR_SWITCH_TABLE_COM2_ALL_S (0)
+ #define AR_SWITCH_TABLE_ALL (0xfff)
+ #define AR_SWITCH_TABLE_ALL_S (0)
+ #define AR_PHY_65NM_CH0_THERM       (AR_SREV_9300(ah) ? 0x16290 :\
+                                       (AR_SREV_9485(ah) ? 0x1628c : 0x16294))
  
  #define AR_PHY_65NM_CH0_THERM_LOCAL   0x80000000
  #define AR_PHY_65NM_CH0_THERM_LOCAL_S 31
  #define AR_PHY_65NM_CH2_RXTX1       0x16900
  #define AR_PHY_65NM_CH2_RXTX2       0x16904
  
- #define AR_CH0_TOP2           (AR_SREV_9300(ah) ? 0x1628c : 0x16284)
+ #define AR_CH0_TOP2           (AR_SREV_9300(ah) ? 0x1628c : \
+                                       (AR_SREV_9485(ah) ? 0x16284 : 0x16290))
  #define AR_CH0_TOP2_XPABIASLVL                0xf000
  #define AR_CH0_TOP2_XPABIASLVL_S      12
  
- #define AR_CH0_XTAL           (AR_SREV_9300(ah) ? 0x16294 : 0x16290)
+ #define AR_CH0_XTAL           (AR_SREV_9300(ah) ? 0x16294 : \
+                                       (AR_SREV_9485(ah) ? 0x16290 : 0x16298))
  #define AR_CH0_XTAL_CAPINDAC  0x7f000000
  #define AR_CH0_XTAL_CAPINDAC_S        24
  #define AR_CH0_XTAL_CAPOUTDAC 0x00fe0000
  #define AR_CH0_XTAL_CAPOUTDAC_S       17
  
- #define AR_PHY_PMU1           0x16c40
+ #define AR_PHY_PMU1           (AR_SREV_9480(ah) ? 0x16340 : 0x16c40)
  #define AR_PHY_PMU1_PWD               0x1
  #define AR_PHY_PMU1_PWD_S     0
  
- #define AR_PHY_PMU2           0x16c44
+ #define AR_PHY_PMU2           (AR_SREV_9480(ah) ? 0x16344 : 0x16c44)
  #define AR_PHY_PMU2_PGM               0x00200000
  #define AR_PHY_PMU2_PGM_S     21
  
   */
  #define AR_SM1_BASE   0xb200
  
- #define AR_PHY_SWITCH_CHAIN_1    (AR_SM1_BASE + 0x84)
- #define AR_PHY_FCAL_2_1          (AR_SM1_BASE + 0xd0)
- #define AR_PHY_DFT_TONE_CTL_1    (AR_SM1_BASE + 0xd4)
- #define AR_PHY_CL_TAB_1          (AR_SM1_BASE + 0x100)
- #define AR_PHY_CHAN_INFO_GAIN_1  (AR_SM1_BASE + 0x180)
- #define AR_PHY_TPC_4_B1          (AR_SM1_BASE + 0x204)
- #define AR_PHY_TPC_5_B1          (AR_SM1_BASE + 0x208)
- #define AR_PHY_TPC_6_B1          (AR_SM1_BASE + 0x20c)
- #define AR_PHY_TPC_11_B1         (AR_SM1_BASE + 0x220)
- #define AR_PHY_PDADC_TAB_1       (AR_SM1_BASE + 0x240)
+ #define AR_PHY_SWITCH_CHAIN_1   (AR_SM1_BASE + 0x84)
+ #define AR_PHY_FCAL_2_1         (AR_SM1_BASE + 0xd0)
+ #define AR_PHY_DFT_TONE_CTL_1   (AR_SM1_BASE + 0xd4)
+ #define AR_PHY_CL_TAB_1         (AR_SM1_BASE + 0x100)
+ #define AR_PHY_CHAN_INFO_GAIN_1 (AR_SM1_BASE + 0x180)
+ #define AR_PHY_TPC_4_B1         (AR_SM1_BASE + 0x204)
+ #define AR_PHY_TPC_5_B1         (AR_SM1_BASE + 0x208)
+ #define AR_PHY_TPC_6_B1         (AR_SM1_BASE + 0x20c)
+ #define AR_PHY_TPC_11_B1        (AR_SM1_BASE + 0x220)
+ #define AR_PHY_PDADC_TAB_1    (AR_SM1_BASE + (AR_SREV_AR9300(ah) ? \
+                                       0x240 : 0x280))
+ #define AR_PHY_TPC_19_B1      (AR_SM1_BASE + 0x240)
+ #define AR_PHY_TPC_19_B1_ALPHA_THERM          0xff
+ #define AR_PHY_TPC_19_B1_ALPHA_THERM_S                0
  #define AR_PHY_TX_IQCAL_STATUS_B1   (AR_SM1_BASE + 0x48c)
 -#define AR_PHY_TX_IQCAL_CORR_COEFF_B1(_i)    (AR_SM_BASE + 0x450 + ((_i) << 2))
 +#define AR_PHY_TX_IQCAL_CORR_COEFF_B1(_i)    (AR_SM1_BASE + 0x450 + ((_i) << 2))
  
+ /* SM 1 AIC Registers */
+ #define AR_PHY_AIC_CTRL_0_B1  (AR_SM1_BASE + 0x4b0)
+ #define AR_PHY_AIC_CTRL_1_B1  (AR_SM1_BASE + 0x4b4)
+ #define AR_PHY_AIC_CTRL_2_B1  (AR_SM1_BASE + 0x4b8)
+ #define AR_PHY_AIC_STAT_0_B1  (AR_SM1_BASE + (AR_SREV_9480_10(ah) ? \
+                                       0x4c0 : 0x4c4))
+ #define AR_PHY_AIC_STAT_1_B1  (AR_SM1_BASE + (AR_SREV_9480_10(ah) ? \
+                                       0x4c4 : 0x4c8))
+ #define AR_PHY_AIC_CTRL_4_B1  (AR_SM1_BASE + 0x4c0)
+ #define AR_PHY_AIC_STAT_2_B1  (AR_SM1_BASE + 0x4cc)
+ #define AR_PHY_AIC_SRAM_ADDR_B1       (AR_SM1_BASE + 0x5f0)
+ #define AR_PHY_AIC_SRAM_DATA_B1       (AR_SM1_BASE + 0x5f4)
  /*
   * Channel 2 Register Map
   */
  
  #define AR_PHY_RSSI_3            (AR_AGC3_BASE + 0x180)
  
+ /* GLB Registers */
+ #define AR_GLB_BASE   0x20000
+ #define AR_PHY_GLB_CONTROL    (AR_GLB_BASE + 0x44)
+ #define AR_GLB_SCRATCH(_ah)   (AR_GLB_BASE + \
+                                       (AR_SREV_9480_20(_ah) ? 0x4c : 0x50))
+ #define AR_GLB_STATUS         (AR_GLB_BASE + 0x48)
  /*
   * Misc helper defines
   */
@@@ -534,7 -534,8 +534,8 @@@ static void rt2800usb_txdone(struct rt2
                if (!entry || rt2x00queue_empty(queue))
                        break;
  
-               rt2800_txdone_entry(entry, reg);
+               rt2800_txdone_entry(entry, reg,
+                                   rt2800usb_get_txwi(entry));
        }
  }
  
@@@ -749,6 -750,8 +750,8 @@@ static const struct ieee80211_ops rt280
        .get_stats              = rt2x00mac_get_stats,
        .get_tkip_seq           = rt2800_get_tkip_seq,
        .set_rts_threshold      = rt2800_set_rts_threshold,
+       .sta_add                = rt2x00mac_sta_add,
+       .sta_remove             = rt2x00mac_sta_remove,
        .bss_info_changed       = rt2x00mac_bss_info_changed,
        .conf_tx                = rt2800_conf_tx,
        .get_tsf                = rt2800_get_tsf,
@@@ -806,6 -809,8 +809,8 @@@ static const struct rt2x00lib_ops rt280
        .config_erp             = rt2800_config_erp,
        .config_ant             = rt2800_config_ant,
        .config                 = rt2800_config,
+       .sta_add                = rt2800_sta_add,
+       .sta_remove             = rt2800_sta_remove,
  };
  
  static const struct data_queue_desc rt2800usb_queue_rx = {
@@@ -921,8 -926,6 +926,8 @@@ static struct usb_device_id rt2800usb_d
        { USB_DEVICE(0x07d1, 0x3c16) },
        /* Draytek */
        { USB_DEVICE(0x07fa, 0x7712) },
 +      /* DVICO */
 +      { USB_DEVICE(0x0fe9, 0xb307) },
        /* Edimax */
        { USB_DEVICE(0x7392, 0x7711) },
        { USB_DEVICE(0x7392, 0x7717) },
diff --combined net/mac80211/agg-rx.c
@@@ -69,7 -69,7 +69,7 @@@ void ___ieee80211_stop_rx_ba_session(st
        if (!tid_rx)
                return;
  
 -      rcu_assign_pointer(sta->ampdu_mlme.tid_rx[tid], NULL);
 +      RCU_INIT_POINTER(sta->ampdu_mlme.tid_rx[tid], NULL);
  
  #ifdef CONFIG_MAC80211_HT_DEBUG
        printk(KERN_DEBUG "Rx BA session stop requested for %pM tid %u\n",
@@@ -167,12 -167,8 +167,8 @@@ static void ieee80211_send_addba_resp(s
        u16 capab;
  
        skb = dev_alloc_skb(sizeof(*mgmt) + local->hw.extra_tx_headroom);
-       if (!skb) {
-               printk(KERN_DEBUG "%s: failed to allocate buffer "
-                      "for addba resp frame\n", sdata->name);
+       if (!skb)
                return;
-       }
  
        skb_reserve(skb, local->hw.extra_tx_headroom);
        mgmt = (struct ieee80211_mgmt *) skb_put(skb, 24);
@@@ -279,14 -275,8 +275,8 @@@ void ieee80211_process_addba_request(st
  
        /* prepare A-MPDU MLME for Rx aggregation */
        tid_agg_rx = kmalloc(sizeof(struct tid_ampdu_rx), GFP_KERNEL);
-       if (!tid_agg_rx) {
- #ifdef CONFIG_MAC80211_HT_DEBUG
-               if (net_ratelimit())
-                       printk(KERN_ERR "allocate rx mlme to tid %d failed\n",
-                                       tid);
- #endif
+       if (!tid_agg_rx)
                goto end;
-       }
  
        spin_lock_init(&tid_agg_rx->reorder_lock);
  
        tid_agg_rx->reorder_time =
                kcalloc(buf_size, sizeof(unsigned long), GFP_KERNEL);
        if (!tid_agg_rx->reorder_buf || !tid_agg_rx->reorder_time) {
- #ifdef CONFIG_MAC80211_HT_DEBUG
-               if (net_ratelimit())
-                       printk(KERN_ERR "can not allocate reordering buffer "
-                              "to tid %d\n", tid);
- #endif
                kfree(tid_agg_rx->reorder_buf);
                kfree(tid_agg_rx->reorder_time);
                kfree(tid_agg_rx);
        status = WLAN_STATUS_SUCCESS;
  
        /* activate it for RX */
 -      rcu_assign_pointer(sta->ampdu_mlme.tid_rx[tid], tid_agg_rx);
 +      RCU_INIT_POINTER(sta->ampdu_mlme.tid_rx[tid], tid_agg_rx);
  
        if (timeout)
                mod_timer(&tid_agg_rx->session_timer, TU_TO_EXP_TIME(timeout));
diff --combined net/mac80211/cfg.c
@@@ -62,7 -62,7 +62,7 @@@ static int ieee80211_change_iface(struc
  
        if (type == NL80211_IFTYPE_AP_VLAN &&
            params && params->use_4addr == 0)
 -              rcu_assign_pointer(sdata->u.vlan.sta, NULL);
 +              RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
        else if (type == NL80211_IFTYPE_STATION &&
                 params && params->use_4addr >= 0)
                sdata->u.mgd.use_4addr = params->use_4addr;
@@@ -455,6 -455,20 +455,20 @@@ static int ieee80211_get_station(struc
        return ret;
  }
  
+ static void ieee80211_config_ap_ssid(struct ieee80211_sub_if_data *sdata,
+                                    struct beacon_parameters *params)
+ {
+       struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
+       bss_conf->ssid_len = params->ssid_len;
+       if (params->ssid_len)
+               memcpy(bss_conf->ssid, params->ssid, params->ssid_len);
+       bss_conf->hidden_ssid =
+               (params->hidden_ssid != NL80211_HIDDEN_SSID_NOT_IN_USE);
+ }
  /*
   * This handles both adding a beacon and setting new beacon info
   */
@@@ -542,14 -556,17 +556,17 @@@ static int ieee80211_config_beacon(stru
  
        sdata->vif.bss_conf.dtim_period = new->dtim_period;
  
 -      rcu_assign_pointer(sdata->u.ap.beacon, new);
 +      RCU_INIT_POINTER(sdata->u.ap.beacon, new);
  
        synchronize_rcu();
  
        kfree(old);
  
+       ieee80211_config_ap_ssid(sdata, params);
        ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED |
-                                               BSS_CHANGED_BEACON);
+                                               BSS_CHANGED_BEACON |
+                                               BSS_CHANGED_SSID);
        return 0;
  }
  
@@@ -594,7 -611,7 +611,7 @@@ static int ieee80211_del_beacon(struct 
        if (!old)
                return -ENOENT;
  
 -      rcu_assign_pointer(sdata->u.ap.beacon, NULL);
 +      RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
        synchronize_rcu();
        kfree(old);
  
@@@ -860,7 -877,7 +877,7 @@@ static int ieee80211_change_station(str
                                return -EBUSY;
                        }
  
 -                      rcu_assign_pointer(vlansdata->u.vlan.sta, sta);
 +                      RCU_INIT_POINTER(vlansdata->u.vlan.sta, sta);
                }
  
                sta->sdata = vlansdata;
@@@ -921,7 -938,7 +938,7 @@@ static int ieee80211_del_mpath(struct w
        if (dst)
                return mesh_path_del(dst, sdata);
  
-       mesh_path_flush(sdata);
+       mesh_path_flush_by_iface(sdata);
        return 0;
  }
  
diff --combined net/mac80211/iface.c
@@@ -456,7 -456,7 +456,7 @@@ static void ieee80211_do_stop(struct ie
                                                 BSS_CHANGED_BEACON_ENABLED);
  
                /* remove beacon */
 -              rcu_assign_pointer(sdata->u.ap.beacon, NULL);
 +              RCU_INIT_POINTER(sdata->u.ap.beacon, NULL);
                synchronize_rcu();
                kfree(old_beacon);
  
@@@ -645,7 -645,7 +645,7 @@@ static const struct net_device_ops ieee
        .ndo_stop               = ieee80211_stop,
        .ndo_uninit             = ieee80211_teardown_sdata,
        .ndo_start_xmit         = ieee80211_subif_start_xmit,
 -      .ndo_set_multicast_list = ieee80211_set_multicast_list,
 +      .ndo_set_rx_mode        = ieee80211_set_multicast_list,
        .ndo_change_mtu         = ieee80211_change_mtu,
        .ndo_set_mac_address    = ieee80211_change_mac,
        .ndo_select_queue       = ieee80211_netdev_select_queue,
@@@ -689,7 -689,7 +689,7 @@@ static const struct net_device_ops ieee
        .ndo_stop               = ieee80211_stop,
        .ndo_uninit             = ieee80211_teardown_sdata,
        .ndo_start_xmit         = ieee80211_monitor_start_xmit,
 -      .ndo_set_multicast_list = ieee80211_set_multicast_list,
 +      .ndo_set_rx_mode        = ieee80211_set_multicast_list,
        .ndo_change_mtu         = ieee80211_change_mtu,
        .ndo_set_mac_address    = eth_mac_addr,
        .ndo_select_queue       = ieee80211_monitor_select_queue,
@@@ -1214,6 -1214,9 +1214,9 @@@ void ieee80211_if_remove(struct ieee802
        list_del_rcu(&sdata->list);
        mutex_unlock(&sdata->local->iflist_mtx);
  
+       if (ieee80211_vif_is_mesh(&sdata->vif))
+               mesh_path_flush_by_iface(sdata);
        synchronize_rcu();
        unregister_netdevice(sdata->dev);
  }
@@@ -1233,6 -1236,9 +1236,9 @@@ void ieee80211_remove_interfaces(struc
        list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) {
                list_del(&sdata->list);
  
+               if (ieee80211_vif_is_mesh(&sdata->vif))
+                       mesh_path_flush_by_iface(sdata);
                unregister_netdevice_queue(sdata->dev, &unreg_list);
        }
        mutex_unlock(&local->iflist_mtx);
@@@ -14,6 -14,7 +14,7 @@@
  #include <linux/spinlock.h>
  #include <linux/string.h>
  #include <net/mac80211.h>
+ #include "wme.h"
  #include "ieee80211_i.h"
  #include "mesh.h"
  
@@@ -48,8 -49,10 +49,10 @@@ static struct mesh_table __rcu *mpp_pat
  int mesh_paths_generation;
  
  /* This lock will have the grow table function as writer and add / delete nodes
-  * as readers. When reading the table (i.e. doing lookups) we are well protected
-  * by RCU
+  * as readers. RCU provides sufficient protection only when reading the table
+  * (i.e. doing lookups).  Adding or adding or removing nodes requires we take
+  * the read lock or we risk operating on an old table.  The write lock is only
+  * needed when modifying the number of buckets a table.
   */
  static DEFINE_RWLOCK(pathtbl_resize_lock);
  
@@@ -210,6 -213,7 +213,7 @@@ void mesh_path_assign_nexthop(struct me
        struct ieee80211_hdr *hdr;
        struct sk_buff_head tmpq;
        unsigned long flags;
+       struct ieee80211_sub_if_data *sdata = mpath->sdata;
  
        rcu_assign_pointer(mpath->next_hop, sta);
  
        while ((skb = __skb_dequeue(&mpath->frame_queue)) != NULL) {
                hdr = (struct ieee80211_hdr *) skb->data;
                memcpy(hdr->addr1, sta->sta.addr, ETH_ALEN);
+               skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, skb));
+               ieee80211_set_qos_hdr(sdata, skb);
                __skb_queue_tail(&tmpq, skb);
        }
  
@@@ -333,25 -339,14 +339,14 @@@ static void mesh_path_move_to_queue(str
  }
  
  
- /**
-  * mesh_path_lookup - look up a path in the mesh path table
-  * @dst: hardware address (ETH_ALEN length) of destination
-  * @sdata: local subif
-  *
-  * Returns: pointer to the mesh path structure, or NULL if not found
-  *
-  * Locking: must be called within a read rcu section.
-  */
- struct mesh_path *mesh_path_lookup(u8 *dst, struct ieee80211_sub_if_data *sdata)
+ static struct mesh_path *path_lookup(struct mesh_table *tbl, u8 *dst,
+                                         struct ieee80211_sub_if_data *sdata)
  {
        struct mesh_path *mpath;
        struct hlist_node *n;
        struct hlist_head *bucket;
-       struct mesh_table *tbl;
        struct mpath_node *node;
  
-       tbl = rcu_dereference(mesh_paths);
        bucket = &tbl->hash_buckets[mesh_table_hash(dst, sdata, tbl)];
        hlist_for_each_entry_rcu(node, n, bucket, list) {
                mpath = node->mpath;
                                memcmp(dst, mpath->dst, ETH_ALEN) == 0) {
                        if (MPATH_EXPIRED(mpath)) {
                                spin_lock_bh(&mpath->state_lock);
-                               if (MPATH_EXPIRED(mpath))
-                                       mpath->flags &= ~MESH_PATH_ACTIVE;
+                               mpath->flags &= ~MESH_PATH_ACTIVE;
                                spin_unlock_bh(&mpath->state_lock);
                        }
                        return mpath;
        return NULL;
  }
  
- struct mesh_path *mpp_path_lookup(u8 *dst, struct ieee80211_sub_if_data *sdata)
+ /**
+  * mesh_path_lookup - look up a path in the mesh path table
+  * @dst: hardware address (ETH_ALEN length) of destination
+  * @sdata: local subif
+  *
+  * Returns: pointer to the mesh path structure, or NULL if not found
+  *
+  * Locking: must be called within a read rcu section.
+  */
+ struct mesh_path *mesh_path_lookup(u8 *dst, struct ieee80211_sub_if_data *sdata)
  {
-       struct mesh_path *mpath;
-       struct hlist_node *n;
-       struct hlist_head *bucket;
-       struct mesh_table *tbl;
-       struct mpath_node *node;
-       tbl = rcu_dereference(mpp_paths);
+       return path_lookup(rcu_dereference(mesh_paths), dst, sdata);
+ }
  
-       bucket = &tbl->hash_buckets[mesh_table_hash(dst, sdata, tbl)];
-       hlist_for_each_entry_rcu(node, n, bucket, list) {
-               mpath = node->mpath;
-               if (mpath->sdata == sdata &&
-                   memcmp(dst, mpath->dst, ETH_ALEN) == 0) {
-                       if (MPATH_EXPIRED(mpath)) {
-                               spin_lock_bh(&mpath->state_lock);
-                               if (MPATH_EXPIRED(mpath))
-                                       mpath->flags &= ~MESH_PATH_ACTIVE;
-                               spin_unlock_bh(&mpath->state_lock);
-                       }
-                       return mpath;
-               }
-       }
-       return NULL;
+ struct mesh_path *mpp_path_lookup(u8 *dst, struct ieee80211_sub_if_data *sdata)
+ {
+       return path_lookup(rcu_dereference(mpp_paths), dst, sdata);
  }
  
  
@@@ -420,8 -406,7 +406,7 @@@ struct mesh_path *mesh_path_lookup_by_i
                if (j++ == idx) {
                        if (MPATH_EXPIRED(node->mpath)) {
                                spin_lock_bh(&node->mpath->state_lock);
-                               if (MPATH_EXPIRED(node->mpath))
-                                       node->mpath->flags &= ~MESH_PATH_ACTIVE;
+                               node->mpath->flags &= ~MESH_PATH_ACTIVE;
                                spin_unlock_bh(&node->mpath->state_lock);
                        }
                        return node->mpath;
@@@ -776,22 -761,47 +761,47 @@@ void mesh_plink_broken(struct sta_info 
        tbl = rcu_dereference(mesh_paths);
        for_each_mesh_entry(tbl, p, node, i) {
                mpath = node->mpath;
-               spin_lock_bh(&mpath->state_lock);
                if (rcu_dereference(mpath->next_hop) == sta &&
                    mpath->flags & MESH_PATH_ACTIVE &&
                    !(mpath->flags & MESH_PATH_FIXED)) {
+                       spin_lock_bh(&mpath->state_lock);
                        mpath->flags &= ~MESH_PATH_ACTIVE;
                        ++mpath->sn;
                        spin_unlock_bh(&mpath->state_lock);
                        mesh_path_error_tx(sdata->u.mesh.mshcfg.element_ttl,
                                        mpath->dst, cpu_to_le32(mpath->sn),
                                        reason, bcast, sdata);
-               } else
-               spin_unlock_bh(&mpath->state_lock);
+               }
        }
        rcu_read_unlock();
  }
  
+ static void mesh_path_node_reclaim(struct rcu_head *rp)
+ {
+       struct mpath_node *node = container_of(rp, struct mpath_node, rcu);
+       struct ieee80211_sub_if_data *sdata = node->mpath->sdata;
+       del_timer_sync(&node->mpath->timer);
+       atomic_dec(&sdata->u.mesh.mpaths);
+       kfree(node->mpath);
+       kfree(node);
+ }
+ /* needs to be called with the corresponding hashwlock taken */
+ static void __mesh_path_del(struct mesh_table *tbl, struct mpath_node *node)
+ {
+       struct mesh_path *mpath;
+       mpath = node->mpath;
+       spin_lock(&mpath->state_lock);
+       mpath->flags |= MESH_PATH_RESOLVING;
+       if (mpath->is_gate)
+               mesh_gate_del(tbl, mpath);
+       hlist_del_rcu(&node->list);
+       call_rcu(&node->rcu, mesh_path_node_reclaim);
+       spin_unlock(&mpath->state_lock);
+       atomic_dec(&tbl->entries);
+ }
  /**
   * mesh_path_flush_by_nexthop - Deletes mesh paths if their next hop matches
   *
@@@ -812,42 -822,59 +822,59 @@@ void mesh_path_flush_by_nexthop(struct 
        int i;
  
        rcu_read_lock();
-       tbl = rcu_dereference(mesh_paths);
+       read_lock_bh(&pathtbl_resize_lock);
+       tbl = resize_dereference_mesh_paths();
        for_each_mesh_entry(tbl, p, node, i) {
                mpath = node->mpath;
-               if (rcu_dereference(mpath->next_hop) == sta)
-                       mesh_path_del(mpath->dst, mpath->sdata);
+               if (rcu_dereference(mpath->next_hop) == sta) {
+                       spin_lock_bh(&tbl->hashwlock[i]);
+                       __mesh_path_del(tbl, node);
+                       spin_unlock_bh(&tbl->hashwlock[i]);
+               }
        }
+       read_unlock_bh(&pathtbl_resize_lock);
        rcu_read_unlock();
  }
  
- void mesh_path_flush(struct ieee80211_sub_if_data *sdata)
+ static void table_flush_by_iface(struct mesh_table *tbl,
+                                struct ieee80211_sub_if_data *sdata)
  {
-       struct mesh_table *tbl;
        struct mesh_path *mpath;
        struct mpath_node *node;
        struct hlist_node *p;
        int i;
  
-       rcu_read_lock();
-       tbl = rcu_dereference(mesh_paths);
+       WARN_ON(!rcu_read_lock_held());
        for_each_mesh_entry(tbl, p, node, i) {
                mpath = node->mpath;
-               if (mpath->sdata == sdata)
-                       mesh_path_del(mpath->dst, mpath->sdata);
+               if (mpath->sdata != sdata)
+                       continue;
+               spin_lock_bh(&tbl->hashwlock[i]);
+               __mesh_path_del(tbl, node);
+               spin_unlock_bh(&tbl->hashwlock[i]);
        }
-       rcu_read_unlock();
  }
  
- static void mesh_path_node_reclaim(struct rcu_head *rp)
+ /**
+  * mesh_path_flush_by_iface - Deletes all mesh paths associated with a given iface
+  *
+  * This function deletes both mesh paths as well as mesh portal paths.
+  *
+  * @sdata - interface data to match
+  *
+  */
+ void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata)
  {
-       struct mpath_node *node = container_of(rp, struct mpath_node, rcu);
-       struct ieee80211_sub_if_data *sdata = node->mpath->sdata;
+       struct mesh_table *tbl;
  
-       del_timer_sync(&node->mpath->timer);
-       atomic_dec(&sdata->u.mesh.mpaths);
-       kfree(node->mpath);
-       kfree(node);
+       rcu_read_lock();
+       read_lock_bh(&pathtbl_resize_lock);
+       tbl = resize_dereference_mesh_paths();
+       table_flush_by_iface(tbl, sdata);
+       tbl = resize_dereference_mpp_paths();
+       table_flush_by_iface(tbl, sdata);
+       read_unlock_bh(&pathtbl_resize_lock);
+       rcu_read_unlock();
  }
  
  /**
@@@ -878,14 -905,7 +905,7 @@@ int mesh_path_del(u8 *addr, struct ieee
                mpath = node->mpath;
                if (mpath->sdata == sdata &&
                    memcmp(addr, mpath->dst, ETH_ALEN) == 0) {
-                       spin_lock_bh(&mpath->state_lock);
-                       if (mpath->is_gate)
-                               mesh_gate_del(tbl, mpath);
-                       mpath->flags |= MESH_PATH_RESOLVING;
-                       hlist_del_rcu(&node->list);
-                       call_rcu(&node->rcu, mesh_path_node_reclaim);
-                       atomic_dec(&tbl->entries);
-                       spin_unlock_bh(&mpath->state_lock);
+                       __mesh_path_del(tbl, node);
                        goto enddel;
                }
        }
@@@ -991,9 -1011,14 +1011,14 @@@ void mesh_path_discard_frame(struct sk_
  
                da = hdr->addr3;
                ra = hdr->addr1;
+               rcu_read_lock();
                mpath = mesh_path_lookup(da, sdata);
-               if (mpath)
+               if (mpath) {
+                       spin_lock_bh(&mpath->state_lock);
                        sn = ++mpath->sn;
+                       spin_unlock_bh(&mpath->state_lock);
+               }
+               rcu_read_unlock();
                mesh_path_error_tx(sdata->u.mesh.mshcfg.element_ttl, skb->data,
                                   cpu_to_le32(sn), reason, ra, sdata);
        }
@@@ -1074,6 -1099,7 +1099,7 @@@ static int mesh_path_node_copy(struct h
  int mesh_pathtbl_init(void)
  {
        struct mesh_table *tbl_path, *tbl_mpp;
+       int ret;
  
        tbl_path = mesh_table_alloc(INIT_PATHS_SIZE_ORDER);
        if (!tbl_path)
        tbl_path->copy_node = &mesh_path_node_copy;
        tbl_path->mean_chain_len = MEAN_CHAIN_LEN;
        tbl_path->known_gates = kzalloc(sizeof(struct hlist_head), GFP_ATOMIC);
+       if (!tbl_path->known_gates) {
+               ret = -ENOMEM;
+               goto free_path;
+       }
        INIT_HLIST_HEAD(tbl_path->known_gates);
  
  
        tbl_mpp = mesh_table_alloc(INIT_PATHS_SIZE_ORDER);
        if (!tbl_mpp) {
-               mesh_table_free(tbl_path, true);
-               return -ENOMEM;
+               ret = -ENOMEM;
+               goto free_path;
        }
        tbl_mpp->free_node = &mesh_path_node_free;
        tbl_mpp->copy_node = &mesh_path_node_copy;
        tbl_mpp->mean_chain_len = MEAN_CHAIN_LEN;
        tbl_mpp->known_gates = kzalloc(sizeof(struct hlist_head), GFP_ATOMIC);
+       if (!tbl_mpp->known_gates) {
+               ret = -ENOMEM;
+               goto free_mpp;
+       }
        INIT_HLIST_HEAD(tbl_mpp->known_gates);
  
        /* Need no locking since this is during init */
        RCU_INIT_POINTER(mpp_paths, tbl_mpp);
  
        return 0;
+ free_mpp:
+       mesh_table_free(tbl_mpp, true);
+ free_path:
+       mesh_table_free(tbl_path, true);
+       return ret;
  }
  
  void mesh_path_expire(struct ieee80211_sub_if_data *sdata)
                if (node->mpath->sdata != sdata)
                        continue;
                mpath = node->mpath;
-               spin_lock_bh(&mpath->state_lock);
                if ((!(mpath->flags & MESH_PATH_RESOLVING)) &&
                    (!(mpath->flags & MESH_PATH_FIXED)) &&
-                    time_after(jiffies, mpath->exp_time + MESH_PATH_EXPIRE)) {
-                       spin_unlock_bh(&mpath->state_lock);
+                    time_after(jiffies, mpath->exp_time + MESH_PATH_EXPIRE))
                        mesh_path_del(mpath->dst, mpath->sdata);
-               } else
-                       spin_unlock_bh(&mpath->state_lock);
        }
        rcu_read_unlock();
  }
  void mesh_pathtbl_unregister(void)
  {
        /* no need for locking during exit path */
 -      mesh_table_free(rcu_dereference_raw(mesh_paths), true);
 -      mesh_table_free(rcu_dereference_raw(mpp_paths), true);
 +      mesh_table_free(rcu_dereference_protected(mesh_paths, 1), true);
 +      mesh_table_free(rcu_dereference_protected(mpp_paths, 1), true);
  }
diff --combined net/mac80211/sta_info.c
@@@ -72,7 -72,7 +72,7 @@@ static int sta_info_hash_del(struct iee
        if (!s)
                return -ENOENT;
        if (s == sta) {
 -              rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)],
 +              RCU_INIT_POINTER(local->sta_hash[STA_HASH(sta->sta.addr)],
                                   s->hnext);
                return 0;
        }
@@@ -82,7 -82,7 +82,7 @@@
                s = rcu_dereference_protected(s->hnext,
                                        lockdep_is_held(&local->sta_lock));
        if (rcu_access_pointer(s->hnext)) {
 -              rcu_assign_pointer(s->hnext, sta->hnext);
 +              RCU_INIT_POINTER(s->hnext, sta->hnext);
                return 0;
        }
  
@@@ -231,7 -231,7 +231,7 @@@ static void sta_info_hash_add(struct ie
                              struct sta_info *sta)
  {
        sta->hnext = local->sta_hash[STA_HASH(sta->sta.addr)];
 -      rcu_assign_pointer(local->sta_hash[STA_HASH(sta->sta.addr)], sta);
 +      RCU_INIT_POINTER(local->sta_hash[STA_HASH(sta->sta.addr)], sta);
  }
  
  static void sta_unblock(struct work_struct *wk)
@@@ -691,14 -691,13 +691,13 @@@ void sta_info_clear_tim_bit(struct sta_
        spin_unlock_irqrestore(&sta->local->sta_lock, flags);
  }
  
- static int sta_info_buffer_expired(struct sta_info *sta,
-                                  struct sk_buff *skb)
+ static bool sta_info_buffer_expired(struct sta_info *sta, struct sk_buff *skb)
  {
        struct ieee80211_tx_info *info;
        int timeout;
  
        if (!skb)
-               return 0;
+               return false;
  
        info = IEEE80211_SKB_CB(skb);
  
@@@ -718,9 -717,6 +717,6 @@@ static bool sta_info_cleanup_expire_buf
        unsigned long flags;
        struct sk_buff *skb;
  
-       if (skb_queue_empty(&sta->ps_tx_buf))
-               return false;
        for (;;) {
                spin_lock_irqsave(&sta->ps_tx_buf.lock, flags);
                skb = skb_peek(&sta->ps_tx_buf);
                        sta_info_clear_tim_bit(sta);
        }
  
-       return true;
+       return !skb_queue_empty(&sta->ps_tx_buf);
  }
  
  static int __must_check __sta_info_destroy(struct sta_info *sta)
        local->sta_generation++;
  
        if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
 -              rcu_assign_pointer(sdata->u.vlan.sta, NULL);
 +              RCU_INIT_POINTER(sdata->u.vlan.sta, NULL);
  
        if (sta->uploaded) {
                if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)