diff options
1567 files changed, 7127 insertions, 4953 deletions
diff --git a/Documentation/00-INDEX b/Documentation/00-INDEX index 6de71308a90..5b5aba404aa 100644 --- a/Documentation/00-INDEX +++ b/Documentation/00-INDEX @@ -89,8 +89,6 @@ cciss.txt  	- info, major/minor #'s for Compaq's SMART Array Controllers.  cdrom/  	- directory with information on the CD-ROM drivers that Linux has. -cli-sti-removal.txt -	- cli()/sti() removal guide.  computone.txt  	- info on Computone Intelliport II/Plus Multiport Serial Driver.  connector/ diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index 0eb0d027eb3..1d1b34500b6 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile @@ -12,7 +12,7 @@ DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \  	    kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \  	    gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \  	    genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \ -	    mac80211.xml debugobjects.xml +	    mac80211.xml debugobjects.xml sh.xml  ###  # The build process is as follows (targets): diff --git a/Documentation/DocBook/s390-drivers.tmpl b/Documentation/DocBook/s390-drivers.tmpl index 4acc73240a6..95bfc12e543 100644 --- a/Documentation/DocBook/s390-drivers.tmpl +++ b/Documentation/DocBook/s390-drivers.tmpl @@ -100,7 +100,7 @@        the hardware structures represented here, please consult the Principles        of Operation.      </para> -!Iinclude/asm-s390/cio.h +!Iarch/s390/include/asm/cio.h      </sect1>      <sect1 id="ccwdev">       <title>ccw devices</title> @@ -114,7 +114,7 @@        ccw device structure. Device drivers must not bypass those functions        or strange side effects may happen.      </para> -!Iinclude/asm-s390/ccwdev.h +!Iarch/s390/include/asm/ccwdev.h  !Edrivers/s390/cio/device.c  !Edrivers/s390/cio/device_ops.c      </sect1> @@ -125,7 +125,7 @@  	measurement data which is made available by the channel subsystem  	for each channel attached device.    </para> -!Iinclude/asm-s390/cmb.h +!Iarch/s390/include/asm/cmb.h  !Edrivers/s390/cio/cmf.c      </sect1>    </chapter> @@ -142,7 +142,7 @@    </para>     <sect1 id="ccwgroupdevices">      <title>ccw group devices</title> -!Iinclude/asm-s390/ccwgroup.h +!Iarch/s390/include/asm/ccwgroup.h  !Edrivers/s390/cio/ccwgroup.c     </sect1>    </chapter> diff --git a/Documentation/DocBook/sh.tmpl b/Documentation/DocBook/sh.tmpl new file mode 100644 index 00000000000..0c3dc4c69dd --- /dev/null +++ b/Documentation/DocBook/sh.tmpl @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" +	"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> + +<book id="sh-drivers"> + <bookinfo> +  <title>SuperH Interfaces Guide</title> +   +  <authorgroup> +   <author> +    <firstname>Paul</firstname> +    <surname>Mundt</surname> +    <affiliation> +     <address> +      <email>lethal@linux-sh.org</email> +     </address> +    </affiliation> +   </author> +  </authorgroup> + +  <copyright> +   <year>2008</year> +   <holder>Paul Mundt</holder> +  </copyright> +  <copyright> +   <year>2008</year> +   <holder>Renesas Technology Corp.</holder> +  </copyright> + +  <legalnotice> +   <para> +     This documentation is free software; you can redistribute +     it and/or modify it under the terms of the GNU General Public +     License version 2 as published by the Free Software Foundation. +   </para> +       +   <para> +     This program is distributed in the hope that it will be +     useful, but WITHOUT ANY WARRANTY; without even the implied +     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +     See the GNU General Public License for more details. +   </para> +       +   <para> +     You should have received a copy of the GNU General Public +     License along with this program; if not, write to the Free +     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +     MA 02111-1307 USA +   </para> +       +   <para> +     For more details see the file COPYING in the source +     distribution of Linux. +   </para> +  </legalnotice> + </bookinfo> + +<toc></toc> + +  <chapter id="mm"> +    <title>Memory Management</title> +    <sect1 id="sh4"> +    <title>SH-4</title> +      <sect2 id="sq"> +        <title>Store Queue API</title> +!Earch/sh/kernel/cpu/sh4/sq.c +      </sect2> +    </sect1> +    <sect1 id="sh5"> +      <title>SH-5</title> +      <sect2 id="tlb"> +	<title>TLB Interfaces</title> +!Iarch/sh/mm/tlb-sh5.c +!Iarch/sh/include/asm/tlb_64.h +      </sect2> +    </sect1> +  </chapter> +  <chapter id="clk"> +    <title>Clock Framework Extensions</title> +!Iarch/sh/include/asm/clock.h +  </chapter> +  <chapter id="mach"> +    <title>Machine Specific Interfaces</title> +    <sect1 id="dreamcast"> +      <title>mach-dreamcast</title> +!Iarch/sh/boards/mach-dreamcast/rtc.c +    </sect1> +    <sect1 id="x3proto"> +      <title>mach-x3proto</title> +!Earch/sh/boards/mach-x3proto/ilsel.c +    </sect1> +  </chapter> +  <chapter id="busses"> +    <title>Busses</title> +    <sect1 id="superhyway"> +      <title>SuperHyway</title> +!Edrivers/sh/superhyway/superhyway.c +    </sect1> + +    <sect1 id="maple"> +      <title>Maple</title> +!Edrivers/sh/maple/maple.c +    </sect1> +  </chapter> +</book> diff --git a/Documentation/cli-sti-removal.txt b/Documentation/cli-sti-removal.txt deleted file mode 100644 index 60932b02fcb..00000000000 --- a/Documentation/cli-sti-removal.txt +++ /dev/null @@ -1,133 +0,0 @@ - -#### cli()/sti() removal guide, started by Ingo Molnar <mingo@redhat.com> - - -as of 2.5.28, five popular macros have been removed on SMP, and -are being phased out on UP: - - cli(), sti(), save_flags(flags), save_flags_cli(flags), restore_flags(flags) - -until now it was possible to protect driver code against interrupt -handlers via a cli(), but from now on other, more lightweight methods -have to be used for synchronization, such as spinlocks or semaphores. - -for example, driver code that used to do something like: - -	struct driver_data; - -	irq_handler (...) -	{ -		.... -		driver_data.finish = 1; -		driver_data.new_work = 0; -		.... -	} - -	... - -	ioctl_func (...) -	{ -		... -		cli(); -		... -		driver_data.finish = 0; -		driver_data.new_work = 2; -		... -		sti(); -		... -	} - -was SMP-correct because the cli() function ensured that no -interrupt handler (amongst them the above irq_handler()) function -would execute while the cli()-ed section is executing. - -but from now on a more direct method of locking has to be used: - -	DEFINE_SPINLOCK(driver_lock); -	struct driver_data; - -	irq_handler (...) -	{ -		unsigned long flags; -		.... -		spin_lock_irqsave(&driver_lock, flags); -		.... -		driver_data.finish = 1; -		driver_data.new_work = 0; -		.... -		spin_unlock_irqrestore(&driver_lock, flags); -		.... -	} - -	... - -	ioctl_func (...) -	{ -		... -		spin_lock_irq(&driver_lock); -		... -		driver_data.finish = 0; -		driver_data.new_work = 2; -		... -		spin_unlock_irq(&driver_lock); -		... -	} - -the above code has a number of advantages: - -- the locking relation is easier to understand - actual lock usage -  pinpoints the critical sections. cli() usage is too opaque. -  Easier to understand means it's easier to debug. - -- it's faster, because spinlocks are faster to acquire than the -  potentially heavily-used IRQ lock. Furthermore, your driver does -  not have to wait eg. for a big heavy SCSI interrupt to finish, -  because the driver_lock spinlock is only used by your driver. -  cli() on the other hand was used by many drivers, and extended -  the critical section to the whole IRQ handler function - creating -  serious lock contention. - -  -to make the transition easier, we've still kept the cli(), sti(), -save_flags(), save_flags_cli() and restore_flags() macros defined -on UP systems - but their usage will be phased out until 2.6 is -released. - -drivers that want to disable local interrupts (interrupts on the -current CPU), can use the following five macros: - -  local_irq_disable(), local_irq_enable(), local_save_flags(flags), -  local_irq_save(flags), local_irq_restore(flags) - -but beware, their meaning and semantics are much simpler, far from -that of the old cli(), sti(), save_flags(flags) and restore_flags(flags) -SMP meaning: - -    local_irq_disable()       => turn local IRQs off - -    local_irq_enable()        => turn local IRQs on - -    local_save_flags(flags)   => save the current IRQ state into flags. The -                                 state can be on or off. (on some -                                 architectures there's even more bits in it.) - -    local_irq_save(flags)     => save the current IRQ state into flags and -                                 disable interrupts. - -    local_irq_restore(flags)  => restore the IRQ state from flags. - -(local_irq_save can save both irqs on and irqs off state, and -local_irq_restore can restore into both irqs on and irqs off state.) - -another related change is that synchronize_irq() now takes a parameter: -synchronize_irq(irq). This change too has the purpose of making SMP -synchronization more lightweight - this way you can wait for your own -interrupt handler to finish, no need to wait for other IRQ sources. - - -why were these changes done? The main reason was the architectural burden -of maintaining the cli()/sti() interface - it became a real problem. The -new interrupt system is much more streamlined, easier to understand, debug, -and it's also a bit faster - the same happened to it that will happen to -cli()/sti() using drivers once they convert to spinlocks :-) - diff --git a/Documentation/power/pm_qos_interface.txt b/Documentation/power/pm_qos_interface.txt index 49adb1a3351..c40866e8b95 100644 --- a/Documentation/power/pm_qos_interface.txt +++ b/Documentation/power/pm_qos_interface.txt @@ -1,4 +1,4 @@ -PM quality of Service interface. +PM Quality Of Service Interface.  This interface provides a kernel and user mode interface for registering  performance expectations by drivers, subsystems and user space applications on @@ -7,6 +7,11 @@ one of the parameters.  Currently we have {cpu_dma_latency, network_latency, network_throughput} as the  initial set of pm_qos parameters. +Each parameters have defined units: + * latency: usec + * timeout: usec + * throughput: kbs (kilo bit / sec) +  The infrastructure exposes multiple misc device nodes one per implemented  parameter.  The set of parameters implement is defined by pm_qos_power_init()  and pm_qos_params.h.  This is done because having the available parameters diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt index 928a79ceb7a..de4063cb4fd 100644 --- a/Documentation/powerpc/booting-without-of.txt +++ b/Documentation/powerpc/booting-without-of.txt @@ -278,7 +278,7 @@ it with special cases.          a 64-bit platform.          d) request and get assigned a platform number (see PLATFORM_* -        constants in include/asm-powerpc/processor.h +        constants in arch/powerpc/include/asm/processor.h  32-bit embedded kernels: @@ -340,7 +340,7 @@ the block to RAM before passing it to the kernel.  ---------     The kernel is entered with r3 pointing to an area of memory that is -   roughly described in include/asm-powerpc/prom.h by the structure +   roughly described in arch/powerpc/include/asm/prom.h by the structure     boot_param_header:  struct boot_param_header { diff --git a/Documentation/powerpc/eeh-pci-error-recovery.txt b/Documentation/powerpc/eeh-pci-error-recovery.txt index df7afe43d46..9d4e33df624 100644 --- a/Documentation/powerpc/eeh-pci-error-recovery.txt +++ b/Documentation/powerpc/eeh-pci-error-recovery.txt @@ -133,7 +133,7 @@ error.  Given an arbitrary address, the routine  pci_get_device_by_addr() will find the pci device associated  with that address (if any). -The default include/asm-powerpc/io.h macros readb(), inb(), insb(), +The default arch/powerpc/include/asm/io.h macros readb(), inb(), insb(),  etc. include a check to see if the i/o read returned all-0xff's.  If so, these make a call to eeh_dn_check_failure(), which in turn  asks the firmware if the all-ff's value is the sign of a true EEH diff --git a/MAINTAINERS b/MAINTAINERS index 5e6d6ab8243..8223a521d7c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -502,6 +502,12 @@ L:	openezx-devel@lists.openezx.org (subscribers-only)  W:	http://www.openezx.org/  S:	Maintained +ARM/FREESCALE IMX / MXC ARM ARCHITECTURE +P:	Sascha Hauer +M:	kernel@pengutronix.de +L:	linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) +S:	Maintained +  ARM/GLOMATION GESBC9312SX MACHINE SUPPORT  P:	Lennert Buytenhek  M:	kernel@wantstofly.org @@ -1,7 +1,7 @@  VERSION = 2  PATCHLEVEL = 6  SUBLEVEL = 27 -EXTRAVERSION = -rc1 +EXTRAVERSION = -rc2  NAME = Rotary Wombat  # *DOCUMENTATION* @@ -929,10 +929,10 @@ ifneq ($(KBUILD_SRC),)  		echo "  in the '$(srctree)' directory.";\  		/bin/false; \  	fi; -	$(Q)if [ ! -d include2 ]; then mkdir -p include2; fi; -	$(Q)if [ -e $(srctree)/include/asm-$(SRCARCH)/errno.h ]; then  \ +	$(Q)if [ ! -d include2 ]; then                                  \ +	    mkdir -p include2;                                          \  	    ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm;     \ -	    fi +	fi  endif  # prepare2 creates a makefile if using a separate output directory @@ -1492,7 +1492,7 @@ quiet_cmd_cscope-file = FILELST cscope.files        cmd_cscope-file = (echo \-k; echo \-q; $(all-sources)) > cscope.files  quiet_cmd_cscope = MAKE    cscope.out -      cmd_cscope = cscope -b +      cmd_cscope = cscope -b -f cscope.out  cscope: FORCE  	$(call cmd,cscope-file) diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 2f074774423..359d224c8c3 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -114,13 +114,16 @@ endif   machine-$(CONFIG_ARCH_IOP32X)	   := iop32x   machine-$(CONFIG_ARCH_IOP33X)	   := iop33x   machine-$(CONFIG_ARCH_IOP13XX)	   := iop13xx +    plat-$(CONFIG_PLAT_IOP)	   := iop   machine-$(CONFIG_ARCH_IXP4XX)	   := ixp4xx   machine-$(CONFIG_ARCH_IXP2000)    := ixp2000   machine-$(CONFIG_ARCH_IXP23XX)    := ixp23xx   machine-$(CONFIG_ARCH_OMAP1)	   := omap1   machine-$(CONFIG_ARCH_OMAP2)	   := omap2    incdir-$(CONFIG_ARCH_OMAP)	   := omap - machine-$(CONFIG_ARCH_S3C2410)	   := s3c2410 +    plat-$(CONFIG_ARCH_OMAP)	   := omap + machine-$(CONFIG_ARCH_S3C2410)	   := s3c2410 s3c2400 s3c2412 s3c2440 s3c2442 s3c2443 +    plat-$(CONFIG_PLAT_S3C24XX)	   := s3c24xx   machine-$(CONFIG_ARCH_LH7A40X)	   := lh7a40x   machine-$(CONFIG_ARCH_VERSATILE)  := versatile   machine-$(CONFIG_ARCH_IMX)	   := imx @@ -136,9 +139,11 @@ endif   machine-$(CONFIG_ARCH_KIRKWOOD)   := kirkwood   machine-$(CONFIG_ARCH_KS8695)     := ks8695    incdir-$(CONFIG_ARCH_MXC)	   := mxc +    plat-$(CONFIG_ARCH_MXC)	   := mxc   machine-$(CONFIG_ARCH_MX2)	   := mx2   machine-$(CONFIG_ARCH_MX3)	   := mx3   machine-$(CONFIG_ARCH_ORION5X)	   := orion5x +    plat-$(CONFIG_PLAT_ORION)	   := orion   machine-$(CONFIG_ARCH_MSM7X00A)   := msm   machine-$(CONFIG_ARCH_LOKI)       := loki   machine-$(CONFIG_ARCH_MV78XX0)    := mv78xx0 @@ -154,16 +159,26 @@ endif  TEXT_OFFSET := $(textofs-y)  ifeq ($(incdir-y),) -incdir-y := $(machine-y) +incdir-y := $(word 1,$(machine-y))  endif  INCDIR   := arch-$(incdir-y) +# The first directory contains additional information for the boot setup code  ifneq ($(machine-y),) -MACHINE  := arch/arm/mach-$(machine-y)/ +MACHINE  := arch/arm/mach-$(word 1,$(machine-y))/  else  MACHINE  :=  endif +machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y)) +platdirs := $(patsubst %,arch/arm/plat-%/,$(plat-y)) + +ifeq ($(KBUILD_SRC),) +KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs) $(platdirs)) +else +KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs) $(platdirs)) +endif +  export	TEXT_OFFSET GZFLAGS MMUEXT  # Do we have FASTFPE? @@ -174,23 +189,11 @@ endif  # If we have a machine-specific directory, then include it in the build.  core-y				+= arch/arm/kernel/ arch/arm/mm/ arch/arm/common/ -core-y				+= $(MACHINE) -core-$(CONFIG_ARCH_S3C2410)	+= arch/arm/mach-s3c2400/ -core-$(CONFIG_ARCH_S3C2410)	+= arch/arm/mach-s3c2412/ -core-$(CONFIG_ARCH_S3C2410)	+= arch/arm/mach-s3c2440/ -core-$(CONFIG_ARCH_S3C2410)	+= arch/arm/mach-s3c2442/ -core-$(CONFIG_ARCH_S3C2410)	+= arch/arm/mach-s3c2443/ +core-y				+= $(machdirs) $(platdirs)  core-$(CONFIG_FPE_NWFPE)	+= arch/arm/nwfpe/  core-$(CONFIG_FPE_FASTFPE)	+= $(FASTFPE_OBJ)  core-$(CONFIG_VFP)		+= arch/arm/vfp/ -# If we have a common platform directory, then include it in the build. -core-$(CONFIG_PLAT_IOP)		+= arch/arm/plat-iop/ -core-$(CONFIG_PLAT_ORION)		+= arch/arm/plat-orion/ -core-$(CONFIG_ARCH_OMAP)	+= arch/arm/plat-omap/ -core-$(CONFIG_PLAT_S3C24XX)		+= arch/arm/plat-s3c24xx/ -core-$(CONFIG_ARCH_MXC)		+= arch/arm/plat-mxc/ -  drivers-$(CONFIG_OPROFILE)      += arch/arm/oprofile/  libs-y				:= arch/arm/lib/ $(libs-y) diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 95baac4939e..94462a097f8 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile @@ -112,6 +112,3 @@ $(obj)/font.c: $(FONTC)  $(obj)/vmlinux.lds: $(obj)/vmlinux.lds.in arch/arm/boot/Makefile .config  	@sed "$(SEDFLAGS)" < $< > $@ - -$(obj)/misc.o: $(obj)/misc.c include/asm/arch/uncompress.h lib/inflate.c - diff --git a/arch/arm/boot/compressed/head-xscale.S b/arch/arm/boot/compressed/head-xscale.S index dd3fbd6766e..aa5ee49c5c5 100644 --- a/arch/arm/boot/compressed/head-xscale.S +++ b/arch/arm/boot/compressed/head-xscale.S @@ -6,7 +6,6 @@   */  #include <linux/linkage.h> -#include <asm/mach-types.h>  		.section        ".start", "ax" diff --git a/arch/arm/common/locomo.c b/arch/arm/common/locomo.c index 85579654d3b..1f0f0adeafb 100644 --- a/arch/arm/common/locomo.c +++ b/arch/arm/common/locomo.c @@ -25,7 +25,7 @@  #include <linux/slab.h>  #include <linux/spinlock.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach/irq.h> diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c index f6d3fdda706..64c328d1627 100644 --- a/arch/arm/common/sa1111.c +++ b/arch/arm/common/sa1111.c @@ -26,7 +26,7 @@  #include <linux/dma-mapping.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/common/sharpsl_pm.c b/arch/arm/common/sharpsl_pm.c index 8822b684d47..a0d15400688 100644 --- a/arch/arm/common/sharpsl_pm.c +++ b/arch/arm/common/sharpsl_pm.c @@ -26,8 +26,7 @@  #include <linux/apm-emulation.h>  #include <linux/suspend.h> -#include <asm/hardware.h> -#include <asm/mach-types.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/arch/pm.h>  #include <asm/arch/pxa-regs.h> diff --git a/arch/arm/common/time-acorn.c b/arch/arm/common/time-acorn.c index d544da41473..af37bfd74f9 100644 --- a/arch/arm/common/time-acorn.c +++ b/arch/arm/common/time-acorn.c @@ -18,7 +18,7 @@  #include <linux/interrupt.h>  #include <linux/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/hardware/ioc.h> diff --git a/arch/arm/common/uengine.c b/arch/arm/common/uengine.c index 117cab30bd3..3e19985ddec 100644 --- a/arch/arm/common/uengine.c +++ b/arch/arm/common/uengine.c @@ -16,7 +16,6 @@  #include <linux/slab.h>  #include <linux/module.h>  #include <linux/string.h> -#include <asm/hardware.h>  #include <asm/arch/hardware.h>  #include <asm/hardware/uengine.h>  #include <asm/io.h> diff --git a/include/asm-arm/Kbuild b/arch/arm/include/asm/Kbuild index 73237bd130a..73237bd130a 100644 --- a/include/asm-arm/Kbuild +++ b/arch/arm/include/asm/Kbuild diff --git a/include/asm-arm/a.out-core.h b/arch/arm/include/asm/a.out-core.h index 93d04acaa31..93d04acaa31 100644 --- a/include/asm-arm/a.out-core.h +++ b/arch/arm/include/asm/a.out-core.h diff --git a/include/asm-arm/a.out.h b/arch/arm/include/asm/a.out.h index 79489fdcc8b..79489fdcc8b 100644 --- a/include/asm-arm/a.out.h +++ b/arch/arm/include/asm/a.out.h diff --git a/include/asm-arm/assembler.h b/arch/arm/include/asm/assembler.h index 911393b2c6f..6116e4893c0 100644 --- a/include/asm-arm/assembler.h +++ b/arch/arm/include/asm/assembler.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/assembler.h + *  arch/arm/include/asm/assembler.h   *   *  Copyright (C) 1996-2000 Russell King   * diff --git a/include/asm-arm/atomic.h b/arch/arm/include/asm/atomic.h index 3b59f94b5a3..325f881ccb5 100644 --- a/include/asm-arm/atomic.h +++ b/arch/arm/include/asm/atomic.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/atomic.h + *  arch/arm/include/asm/atomic.h   *   *  Copyright (C) 1996 Russell King.   *  Copyright (C) 2002 Deep Blue Solutions Ltd. diff --git a/include/asm-arm/auxvec.h b/arch/arm/include/asm/auxvec.h index c0536f6b29a..c0536f6b29a 100644 --- a/include/asm-arm/auxvec.h +++ b/arch/arm/include/asm/auxvec.h diff --git a/include/asm-arm/bitops.h b/arch/arm/include/asm/bitops.h index 9a1db20e032..9a1db20e032 100644 --- a/include/asm-arm/bitops.h +++ b/arch/arm/include/asm/bitops.h diff --git a/include/asm-arm/bug.h b/arch/arm/include/asm/bug.h index 7b62351f097..7b62351f097 100644 --- a/include/asm-arm/bug.h +++ b/arch/arm/include/asm/bug.h diff --git a/include/asm-arm/bugs.h b/arch/arm/include/asm/bugs.h index ca54eb0f12d..a97f1ea708d 100644 --- a/include/asm-arm/bugs.h +++ b/arch/arm/include/asm/bugs.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/bugs.h + *  arch/arm/include/asm/bugs.h   *   *  Copyright (C) 1995-2003 Russell King   * diff --git a/include/asm-arm/byteorder.h b/arch/arm/include/asm/byteorder.h index e6f7fcdc73b..4fbfb22f65a 100644 --- a/include/asm-arm/byteorder.h +++ b/arch/arm/include/asm/byteorder.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/byteorder.h + *  arch/arm/include/asm/byteorder.h   *   * ARM Endian-ness.  In little endian mode, the data bus is connected such   * that byte accesses appear as: diff --git a/include/asm-arm/cache.h b/arch/arm/include/asm/cache.h index 31332c8ac04..cb7a9e97fd7 100644 --- a/include/asm-arm/cache.h +++ b/arch/arm/include/asm/cache.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/cache.h + *  arch/arm/include/asm/cache.h   */  #ifndef __ASMARM_CACHE_H  #define __ASMARM_CACHE_H diff --git a/include/asm-arm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index e68a1cbcc85..9073d9c6567 100644 --- a/include/asm-arm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/cacheflush.h + *  arch/arm/include/asm/cacheflush.h   *   *  Copyright (C) 1999-2002 Russell King   * diff --git a/include/asm-arm/checksum.h b/arch/arm/include/asm/checksum.h index eaa0efd8d0d..6dcc1643086 100644 --- a/include/asm-arm/checksum.h +++ b/arch/arm/include/asm/checksum.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/checksum.h + *  arch/arm/include/asm/checksum.h   *   * IP checksum routines   * diff --git a/include/asm-arm/cnt32_to_63.h b/arch/arm/include/asm/cnt32_to_63.h index 480c873fa74..480c873fa74 100644 --- a/include/asm-arm/cnt32_to_63.h +++ b/arch/arm/include/asm/cnt32_to_63.h diff --git a/include/asm-arm/cpu-multi32.h b/arch/arm/include/asm/cpu-multi32.h index 3479de9266e..e2b5b0b2116 100644 --- a/include/asm-arm/cpu-multi32.h +++ b/arch/arm/include/asm/cpu-multi32.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/cpu-multi32.h + *  arch/arm/include/asm/cpu-multi32.h   *   *  Copyright (C) 2000 Russell King   * diff --git a/include/asm-arm/cpu-single.h b/arch/arm/include/asm/cpu-single.h index 0b120ee3609..f073a6d2a40 100644 --- a/include/asm-arm/cpu-single.h +++ b/arch/arm/include/asm/cpu-single.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/cpu-single.h + *  arch/arm/include/asm/cpu-single.h   *   *  Copyright (C) 2000 Russell King   * diff --git a/include/asm-arm/cpu.h b/arch/arm/include/asm/cpu.h index 715426b9b08..634b2d7c612 100644 --- a/include/asm-arm/cpu.h +++ b/arch/arm/include/asm/cpu.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/cpu.h + *  arch/arm/include/asm/cpu.h   *   *  Copyright (C) 2004-2005 ARM Ltd.   * diff --git a/include/asm-arm/cputime.h b/arch/arm/include/asm/cputime.h index 3a8002a5fec..3a8002a5fec 100644 --- a/include/asm-arm/cputime.h +++ b/arch/arm/include/asm/cputime.h diff --git a/include/asm-arm/current.h b/arch/arm/include/asm/current.h index 75d21e2a3ff..75d21e2a3ff 100644 --- a/include/asm-arm/current.h +++ b/arch/arm/include/asm/current.h diff --git a/include/asm-arm/delay.h b/arch/arm/include/asm/delay.h index b2deda18154..b2deda18154 100644 --- a/include/asm-arm/delay.h +++ b/arch/arm/include/asm/delay.h diff --git a/include/asm-arm/device.h b/arch/arm/include/asm/device.h index c61642b4060..c61642b4060 100644 --- a/include/asm-arm/device.h +++ b/arch/arm/include/asm/device.h diff --git a/include/asm-arm/div64.h b/arch/arm/include/asm/div64.h index 5001390be95..5001390be95 100644 --- a/include/asm-arm/div64.h +++ b/arch/arm/include/asm/div64.h diff --git a/include/asm-arm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h index 45329fca1b6..45329fca1b6 100644 --- a/include/asm-arm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h diff --git a/include/asm-arm/dma.h b/arch/arm/include/asm/dma.h index 9f2c5305c26..9f2c5305c26 100644 --- a/include/asm-arm/dma.h +++ b/arch/arm/include/asm/dma.h diff --git a/include/asm-arm/domain.h b/arch/arm/include/asm/domain.h index 3c12a762530..cc7ef408071 100644 --- a/include/asm-arm/domain.h +++ b/arch/arm/include/asm/domain.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/domain.h + *  arch/arm/include/asm/domain.h   *   *  Copyright (C) 1999 Russell King.   * diff --git a/include/asm-arm/ecard.h b/arch/arm/include/asm/ecard.h index 5e22881a630..29f2610efc7 100644 --- a/include/asm-arm/ecard.h +++ b/arch/arm/include/asm/ecard.h @@ -1,5 +1,5 @@  /* - * linux/include/asm-arm/ecard.h + * arch/arm/include/asm/ecard.h   *   * definitions for expansion cards   * diff --git a/include/asm-arm/elf.h b/arch/arm/include/asm/elf.h index 4ca75162748..4ca75162748 100644 --- a/include/asm-arm/elf.h +++ b/arch/arm/include/asm/elf.h diff --git a/include/asm-arm/emergency-restart.h b/arch/arm/include/asm/emergency-restart.h index 108d8c48e42..108d8c48e42 100644 --- a/include/asm-arm/emergency-restart.h +++ b/arch/arm/include/asm/emergency-restart.h diff --git a/include/asm-arm/errno.h b/arch/arm/include/asm/errno.h index 6e60f0612bb..6e60f0612bb 100644 --- a/include/asm-arm/errno.h +++ b/arch/arm/include/asm/errno.h diff --git a/include/asm-arm/fb.h b/arch/arm/include/asm/fb.h index d92e99cd8c8..d92e99cd8c8 100644 --- a/include/asm-arm/fb.h +++ b/arch/arm/include/asm/fb.h diff --git a/include/asm-arm/fcntl.h b/arch/arm/include/asm/fcntl.h index a80b6607b2e..a80b6607b2e 100644 --- a/include/asm-arm/fcntl.h +++ b/arch/arm/include/asm/fcntl.h diff --git a/include/asm-arm/fiq.h b/arch/arm/include/asm/fiq.h index a3bad09e825..2242ce22ec6 100644 --- a/include/asm-arm/fiq.h +++ b/arch/arm/include/asm/fiq.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/fiq.h + *  arch/arm/include/asm/fiq.h   *   * Support for FIQ on ARM architectures.   * Written by Philip Blundell <philb@gnu.org>, 1998 diff --git a/include/asm-arm/flat.h b/arch/arm/include/asm/flat.h index 9918aa46d9e..1d77e51907f 100644 --- a/include/asm-arm/flat.h +++ b/arch/arm/include/asm/flat.h @@ -1,5 +1,5 @@  /* - * include/asm-arm/flat.h -- uClinux flat-format executables + * arch/arm/include/asm/flat.h -- uClinux flat-format executables   */  #ifndef __ARM_FLAT_H__ diff --git a/include/asm-arm/floppy.h b/arch/arm/include/asm/floppy.h index 41a5e9d6bb6..dce20c25ab1 100644 --- a/include/asm-arm/floppy.h +++ b/arch/arm/include/asm/floppy.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/floppy.h + *  arch/arm/include/asm/floppy.h   *   *  Copyright (C) 1996-2000 Russell King   * diff --git a/include/asm-arm/fpstate.h b/arch/arm/include/asm/fpstate.h index 392eb533232..ee5e03efc1b 100644 --- a/include/asm-arm/fpstate.h +++ b/arch/arm/include/asm/fpstate.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/fpstate.h + *  arch/arm/include/asm/fpstate.h   *   *  Copyright (C) 1995 Russell King   * diff --git a/include/asm-arm/ftrace.h b/arch/arm/include/asm/ftrace.h index 584ef9a8e5a..584ef9a8e5a 100644 --- a/include/asm-arm/ftrace.h +++ b/arch/arm/include/asm/ftrace.h diff --git a/include/asm-arm/futex.h b/arch/arm/include/asm/futex.h index 6a332a9f099..6a332a9f099 100644 --- a/include/asm-arm/futex.h +++ b/arch/arm/include/asm/futex.h diff --git a/include/asm-arm/glue.h b/arch/arm/include/asm/glue.h index a97a182ba28..a0e39d5d00c 100644 --- a/include/asm-arm/glue.h +++ b/arch/arm/include/asm/glue.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/glue.h + *  arch/arm/include/asm/glue.h   *   *  Copyright (C) 1997-1999 Russell King   *  Copyright (C) 2000-2002 Deep Blue Solutions Ltd. diff --git a/include/asm-arm/gpio.h b/arch/arm/include/asm/gpio.h index fff4f800ee4..fff4f800ee4 100644 --- a/include/asm-arm/gpio.h +++ b/arch/arm/include/asm/gpio.h diff --git a/include/asm-arm/hardirq.h b/arch/arm/include/asm/hardirq.h index 182310b9919..182310b9919 100644 --- a/include/asm-arm/hardirq.h +++ b/arch/arm/include/asm/hardirq.h diff --git a/include/asm-arm/hardware/arm_timer.h b/arch/arm/include/asm/hardware/arm_timer.h index 04be3bdf46b..04be3bdf46b 100644 --- a/include/asm-arm/hardware/arm_timer.h +++ b/arch/arm/include/asm/hardware/arm_timer.h diff --git a/include/asm-arm/hardware/arm_twd.h b/arch/arm/include/asm/hardware/arm_twd.h index e521b70713c..e521b70713c 100644 --- a/include/asm-arm/hardware/arm_twd.h +++ b/arch/arm/include/asm/hardware/arm_twd.h diff --git a/include/asm-arm/hardware/cache-l2x0.h b/arch/arm/include/asm/hardware/cache-l2x0.h index 54029a74039..64f2252a25c 100644 --- a/include/asm-arm/hardware/cache-l2x0.h +++ b/arch/arm/include/asm/hardware/cache-l2x0.h @@ -1,5 +1,5 @@  /* - * include/asm-arm/hardware/cache-l2x0.h + * arch/arm/include/asm/hardware/cache-l2x0.h   *   * Copyright (C) 2007 ARM Limited   * diff --git a/include/asm-arm/hardware/clps7111.h b/arch/arm/include/asm/hardware/clps7111.h index 8d3228dc177..44477225aed 100644 --- a/include/asm-arm/hardware/clps7111.h +++ b/arch/arm/include/asm/hardware/clps7111.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/clps7111.h + *  arch/arm/include/asm/hardware/clps7111.h   *   *  This file contains the hardware definitions of the CLPS7111 internal   *  registers. diff --git a/include/asm-arm/hardware/cs89712.h b/arch/arm/include/asm/hardware/cs89712.h index ad99a3e1b80..f75626933e9 100644 --- a/include/asm-arm/hardware/cs89712.h +++ b/arch/arm/include/asm/hardware/cs89712.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/cs89712.h + *  arch/arm/include/asm/hardware/cs89712.h   *   *  This file contains the hardware definitions of the CS89712   *  additional internal registers. diff --git a/include/asm-arm/hardware/debug-8250.S b/arch/arm/include/asm/hardware/debug-8250.S index 07c97fb233f..22c689255e6 100644 --- a/include/asm-arm/hardware/debug-8250.S +++ b/arch/arm/include/asm/hardware/debug-8250.S @@ -1,5 +1,5 @@  /* - * linux/include/asm-arm/hardware/debug-8250.S + * arch/arm/include/asm/hardware/debug-8250.S   *   *  Copyright (C) 1994-1999 Russell King   * diff --git a/include/asm-arm/hardware/debug-pl01x.S b/arch/arm/include/asm/hardware/debug-pl01x.S index 23c541a9e89..f9fd083eff6 100644 --- a/include/asm-arm/hardware/debug-pl01x.S +++ b/arch/arm/include/asm/hardware/debug-pl01x.S @@ -1,4 +1,4 @@ -/* linux/include/asm-arm/hardware/debug-pl01x.S +/* arch/arm/include/asm/hardware/debug-pl01x.S   *   * Debugging macro include header   * diff --git a/include/asm-arm/hardware/dec21285.h b/arch/arm/include/asm/hardware/dec21285.h index 546f7077be9..cf2578ffd54 100644 --- a/include/asm-arm/hardware/dec21285.h +++ b/arch/arm/include/asm/hardware/dec21285.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/dec21285.h + *  arch/arm/include/asm/hardware/dec21285.h   *   *  Copyright (C) 1998 Russell King   * @@ -19,7 +19,7 @@  #define DC21285_PCI_MEM			0x80000000  #ifndef __ASSEMBLY__ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define DC21285_IO(x)		((volatile unsigned long *)(ARMCSR_BASE+(x)))  #else  #define DC21285_IO(x)		(x) diff --git a/include/asm-arm/hardware/entry-macro-iomd.S b/arch/arm/include/asm/hardware/entry-macro-iomd.S index 9bb580a5b15..e0af4983723 100644 --- a/include/asm-arm/hardware/entry-macro-iomd.S +++ b/arch/arm/include/asm/hardware/entry-macro-iomd.S @@ -1,5 +1,5 @@  /* - * include/asm-arm/hardware/entry-macro-iomd.S + * arch/arm/include/asm/hardware/entry-macro-iomd.S   *   * Low-level IRQ helper macros for IOC/IOMD based platforms   * diff --git a/include/asm-arm/hardware/ep7211.h b/arch/arm/include/asm/hardware/ep7211.h index 017aa68f612..654d5f625c4 100644 --- a/include/asm-arm/hardware/ep7211.h +++ b/arch/arm/include/asm/hardware/ep7211.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/ep7211.h + *  arch/arm/include/asm/hardware/ep7211.h   *   *  This file contains the hardware definitions of the EP7211 internal   *  registers. diff --git a/include/asm-arm/hardware/ep7212.h b/arch/arm/include/asm/hardware/ep7212.h index 0e952e74707..3b43bbeaf1d 100644 --- a/include/asm-arm/hardware/ep7212.h +++ b/arch/arm/include/asm/hardware/ep7212.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/ep7212.h + *  arch/arm/include/asm/hardware/ep7212.h   *   *  This file contains the hardware definitions of the EP7212 internal   *  registers. diff --git a/include/asm-arm/hardware/gic.h b/arch/arm/include/asm/hardware/gic.h index 966e428ad32..4924914af18 100644 --- a/include/asm-arm/hardware/gic.h +++ b/arch/arm/include/asm/hardware/gic.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/gic.h + *  arch/arm/include/asm/hardware/gic.h   *   *  Copyright (C) 2002 ARM Limited, All Rights Reserved.   * diff --git a/include/asm-arm/hardware/icst307.h b/arch/arm/include/asm/hardware/icst307.h index ff8618a441c..554f128a104 100644 --- a/include/asm-arm/hardware/icst307.h +++ b/arch/arm/include/asm/hardware/icst307.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/icst307.h + *  arch/arm/include/asm/hardware/icst307.h   *   *  Copyright (C) 2003 Deep Blue Solutions, Ltd, All Rights Reserved.   * diff --git a/include/asm-arm/hardware/icst525.h b/arch/arm/include/asm/hardware/icst525.h index edd5a570440..58f0dc43e2e 100644 --- a/include/asm-arm/hardware/icst525.h +++ b/arch/arm/include/asm/hardware/icst525.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/icst525.h + *  arch/arm/include/asm/hardware/icst525.h   *   *  Copyright (C) 2003 Deep Blue Solutions, Ltd, All Rights Reserved.   * diff --git a/include/asm-arm/hardware/ioc.h b/arch/arm/include/asm/hardware/ioc.h index b3b46ef6594..1f6b8013bec 100644 --- a/include/asm-arm/hardware/ioc.h +++ b/arch/arm/include/asm/hardware/ioc.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/ioc.h + *  arch/arm/include/asm/hardware/ioc.h   *   *  Copyright (C) Russell King   * diff --git a/include/asm-arm/hardware/iomd.h b/arch/arm/include/asm/hardware/iomd.h index 396e55ad06c..9c5afbd71a6 100644 --- a/include/asm-arm/hardware/iomd.h +++ b/arch/arm/include/asm/hardware/iomd.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/iomd.h + *  arch/arm/include/asm/hardware/iomd.h   *   *  Copyright (C) 1999 Russell King   * diff --git a/include/asm-arm/hardware/iop3xx-adma.h b/arch/arm/include/asm/hardware/iop3xx-adma.h index af64676650a..df31b15cf6e 100644 --- a/include/asm-arm/hardware/iop3xx-adma.h +++ b/arch/arm/include/asm/hardware/iop3xx-adma.h @@ -19,7 +19,7 @@  #define _ADMA_H  #include <linux/types.h>  #include <linux/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/iop_adma.h>  /* Memory copy units */ diff --git a/include/asm-arm/hardware/iop3xx-gpio.h b/arch/arm/include/asm/hardware/iop3xx-gpio.h index 0c9331f9ac2..0ebc91cb42f 100644 --- a/include/asm-arm/hardware/iop3xx-gpio.h +++ b/arch/arm/include/asm/hardware/iop3xx-gpio.h @@ -1,5 +1,5 @@  /* - * linux/include/asm-arm/hardware/iop3xx-gpio.h + * arch/arm/include/asm/hardware/iop3xx-gpio.h   *   * IOP3xx GPIO wrappers   * @@ -25,7 +25,7 @@  #ifndef __ASM_ARM_HARDWARE_IOP3XX_GPIO_H  #define __ASM_ARM_HARDWARE_IOP3XX_GPIO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm-generic/gpio.h>  #define IOP3XX_N_GPIOS	8 diff --git a/include/asm-arm/hardware/iop3xx.h b/arch/arm/include/asm/hardware/iop3xx.h index 18f6937f501..4b8e7f55992 100644 --- a/include/asm-arm/hardware/iop3xx.h +++ b/arch/arm/include/asm/hardware/iop3xx.h @@ -1,5 +1,5 @@  /* - * include/asm-arm/hardware/iop3xx.h + * arch/arm/include/asm/hardware/iop3xx.h   *   * Intel IOP32X and IOP33X register definitions   * diff --git a/include/asm-arm/hardware/iop_adma.h b/arch/arm/include/asm/hardware/iop_adma.h index cb7e3611bcb..cb7e3611bcb 100644 --- a/include/asm-arm/hardware/iop_adma.h +++ b/arch/arm/include/asm/hardware/iop_adma.h diff --git a/include/asm-arm/hardware/it8152.h b/arch/arm/include/asm/hardware/it8152.h index 74b5fff7f57..74b5fff7f57 100644 --- a/include/asm-arm/hardware/it8152.h +++ b/arch/arm/include/asm/hardware/it8152.h diff --git a/include/asm-arm/hardware/linkup-l1110.h b/arch/arm/include/asm/hardware/linkup-l1110.h index 7ec91168a57..7ec91168a57 100644 --- a/include/asm-arm/hardware/linkup-l1110.h +++ b/arch/arm/include/asm/hardware/linkup-l1110.h diff --git a/include/asm-arm/hardware/locomo.h b/arch/arm/include/asm/hardware/locomo.h index fb0645de6f3..954b1be991b 100644 --- a/include/asm-arm/hardware/locomo.h +++ b/arch/arm/include/asm/hardware/locomo.h @@ -1,5 +1,5 @@  /* - * linux/include/asm-arm/hardware/locomo.h + * arch/arm/include/asm/hardware/locomo.h   *   * This file contains the definitions for the LoCoMo G/A Chip   * diff --git a/include/asm-arm/hardware/memc.h b/arch/arm/include/asm/hardware/memc.h index 8aef5aa0e01..42ba7c167d1 100644 --- a/include/asm-arm/hardware/memc.h +++ b/arch/arm/include/asm/hardware/memc.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/memc.h + *  arch/arm/include/asm/hardware/memc.h   *   *  Copyright (C) Russell King.   * diff --git a/include/asm-arm/hardware/pci_v3.h b/arch/arm/include/asm/hardware/pci_v3.h index 4d497bdb9a9..2811c7e2cfd 100644 --- a/include/asm-arm/hardware/pci_v3.h +++ b/arch/arm/include/asm/hardware/pci_v3.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/pci_v3.h + *  arch/arm/include/asm/hardware/pci_v3.h   *   *  Internal header file PCI V3 chip   * diff --git a/include/asm-arm/hardware/sa1111.h b/arch/arm/include/asm/hardware/sa1111.h index 61b1d05c7df..6cf98d4f7dc 100644 --- a/include/asm-arm/hardware/sa1111.h +++ b/arch/arm/include/asm/hardware/sa1111.h @@ -1,5 +1,5 @@  /* - * linux/include/asm-arm/hardware/sa1111.h + * arch/arm/include/asm/hardware/sa1111.h   *   * Copyright (C) 2000 John G Dorsey <john+@cs.cmu.edu>   * diff --git a/include/asm-arm/hardware/scoop.h b/arch/arm/include/asm/hardware/scoop.h index dfb8330599f..dfb8330599f 100644 --- a/include/asm-arm/hardware/scoop.h +++ b/arch/arm/include/asm/hardware/scoop.h diff --git a/include/asm-arm/hardware/sharpsl_pm.h b/arch/arm/include/asm/hardware/sharpsl_pm.h index 2d00db22b98..2d00db22b98 100644 --- a/include/asm-arm/hardware/sharpsl_pm.h +++ b/arch/arm/include/asm/hardware/sharpsl_pm.h diff --git a/include/asm-arm/hardware/ssp.h b/arch/arm/include/asm/hardware/ssp.h index 3b42e181997..3b42e181997 100644 --- a/include/asm-arm/hardware/ssp.h +++ b/arch/arm/include/asm/hardware/ssp.h diff --git a/include/asm-arm/hardware/uengine.h b/arch/arm/include/asm/hardware/uengine.h index b442d65c659..b442d65c659 100644 --- a/include/asm-arm/hardware/uengine.h +++ b/arch/arm/include/asm/hardware/uengine.h diff --git a/include/asm-arm/hardware/vic.h b/arch/arm/include/asm/hardware/vic.h index ed9ca3736a0..263f2c362a3 100644 --- a/include/asm-arm/hardware/vic.h +++ b/arch/arm/include/asm/hardware/vic.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/hardware/vic.h + *  arch/arm/include/asm/hardware/vic.h   *   *  Copyright (c) ARM Limited 2003.  All rights reserved.   * diff --git a/arch/arm/include/asm/hw_irq.h b/arch/arm/include/asm/hw_irq.h new file mode 100644 index 00000000000..90831f6f5f5 --- /dev/null +++ b/arch/arm/include/asm/hw_irq.h @@ -0,0 +1,27 @@ +/* + * Nothing to see here yet + */ +#ifndef _ARCH_ARM_HW_IRQ_H +#define _ARCH_ARM_HW_IRQ_H + +static inline void ack_bad_irq(int irq) +{ +	extern unsigned long irq_err_count; +	irq_err_count++; +} + +/* + * Obsolete inline function for calling irq descriptor handlers. + */ +static inline void desc_handle_irq(unsigned int irq, struct irq_desc *desc) +{ +	desc->handle_irq(irq, desc); +} + +void set_irq_flags(unsigned int irq, unsigned int flags); + +#define IRQF_VALID	(1 << 0) +#define IRQF_PROBE	(1 << 1) +#define IRQF_NOAUTOEN	(1 << 2) + +#endif diff --git a/include/asm-arm/hwcap.h b/arch/arm/include/asm/hwcap.h index 81f4c899a55..81f4c899a55 100644 --- a/include/asm-arm/hwcap.h +++ b/arch/arm/include/asm/hwcap.h diff --git a/include/asm-arm/ide.h b/arch/arm/include/asm/ide.h index a48019f99d0..b507ce8e501 100644 --- a/include/asm-arm/ide.h +++ b/arch/arm/include/asm/ide.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/ide.h + *  arch/arm/include/asm/ide.h   *   *  Copyright (C) 1994-1996  Linus Torvalds & authors   */ diff --git a/include/asm-arm/io.h b/arch/arm/include/asm/io.h index eebe56e74d6..ffe07c0f46d 100644 --- a/include/asm-arm/io.h +++ b/arch/arm/include/asm/io.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/io.h + *  arch/arm/include/asm/io.h   *   *  Copyright (C) 1996-2000 Russell King   * diff --git a/include/asm-arm/ioctl.h b/arch/arm/include/asm/ioctl.h index b279fe06dfe..b279fe06dfe 100644 --- a/include/asm-arm/ioctl.h +++ b/arch/arm/include/asm/ioctl.h diff --git a/include/asm-arm/ioctls.h b/arch/arm/include/asm/ioctls.h index a91d8a1523c..a91d8a1523c 100644 --- a/include/asm-arm/ioctls.h +++ b/arch/arm/include/asm/ioctls.h diff --git a/include/asm-arm/ipcbuf.h b/arch/arm/include/asm/ipcbuf.h index 97683975f7d..97683975f7d 100644 --- a/include/asm-arm/ipcbuf.h +++ b/arch/arm/include/asm/ipcbuf.h diff --git a/include/asm-arm/irq.h b/arch/arm/include/asm/irq.h index 9cb01907e43..9cb01907e43 100644 --- a/include/asm-arm/irq.h +++ b/arch/arm/include/asm/irq.h diff --git a/include/asm-arm/irq_regs.h b/arch/arm/include/asm/irq_regs.h index 3dd9c0b7027..3dd9c0b7027 100644 --- a/include/asm-arm/irq_regs.h +++ b/arch/arm/include/asm/irq_regs.h diff --git a/include/asm-arm/irqflags.h b/arch/arm/include/asm/irqflags.h index 6d09974e664..6d09974e664 100644 --- a/include/asm-arm/irqflags.h +++ b/arch/arm/include/asm/irqflags.h diff --git a/include/asm-arm/kdebug.h b/arch/arm/include/asm/kdebug.h index 6ece1b03766..6ece1b03766 100644 --- a/include/asm-arm/kdebug.h +++ b/arch/arm/include/asm/kdebug.h diff --git a/include/asm-arm/kexec.h b/arch/arm/include/asm/kexec.h index c8986bb99ed..c8986bb99ed 100644 --- a/include/asm-arm/kexec.h +++ b/arch/arm/include/asm/kexec.h diff --git a/include/asm-arm/kgdb.h b/arch/arm/include/asm/kgdb.h index 67af4b84198..67af4b84198 100644 --- a/include/asm-arm/kgdb.h +++ b/arch/arm/include/asm/kgdb.h diff --git a/include/asm-arm/kmap_types.h b/arch/arm/include/asm/kmap_types.h index 45def13ee17..45def13ee17 100644 --- a/include/asm-arm/kmap_types.h +++ b/arch/arm/include/asm/kmap_types.h diff --git a/include/asm-arm/kprobes.h b/arch/arm/include/asm/kprobes.h index b1a37876942..a5d0d99ad38 100644 --- a/include/asm-arm/kprobes.h +++ b/arch/arm/include/asm/kprobes.h @@ -1,5 +1,5 @@  /* - * include/asm-arm/kprobes.h + * arch/arm/include/asm/kprobes.h   *   * Copyright (C) 2006, 2007 Motorola Inc.   * diff --git a/include/asm-arm/leds.h b/arch/arm/include/asm/leds.h index 12290ea5580..c545739f39b 100644 --- a/include/asm-arm/leds.h +++ b/arch/arm/include/asm/leds.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/leds.h + *  arch/arm/include/asm/leds.h   *   *  Copyright (C) 1998 Russell King   * diff --git a/include/asm-arm/limits.h b/arch/arm/include/asm/limits.h index 08d8c660080..08d8c660080 100644 --- a/include/asm-arm/limits.h +++ b/arch/arm/include/asm/limits.h diff --git a/include/asm-arm/linkage.h b/arch/arm/include/asm/linkage.h index 5a25632b1bc..5a25632b1bc 100644 --- a/include/asm-arm/linkage.h +++ b/arch/arm/include/asm/linkage.h diff --git a/include/asm-arm/local.h b/arch/arm/include/asm/local.h index c11c530f74d..c11c530f74d 100644 --- a/include/asm-arm/local.h +++ b/arch/arm/include/asm/local.h diff --git a/include/asm-arm/locks.h b/arch/arm/include/asm/locks.h index 852220eecdb..ef4c897772d 100644 --- a/include/asm-arm/locks.h +++ b/arch/arm/include/asm/locks.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/locks.h + *  arch/arm/include/asm/locks.h   *   *  Copyright (C) 2000 Russell King   * diff --git a/include/asm-arm/mach/arch.h b/arch/arm/include/asm/mach/arch.h index bcc8aed7c9a..c59842dc7cb 100644 --- a/include/asm-arm/mach/arch.h +++ b/arch/arm/include/asm/mach/arch.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/mach/arch.h + *  arch/arm/include/asm/mach/arch.h   *   *  Copyright (C) 2000 Russell King   * diff --git a/include/asm-arm/mach/dma.h b/arch/arm/include/asm/mach/dma.h index e7c4a20aad5..fc7278ea714 100644 --- a/include/asm-arm/mach/dma.h +++ b/arch/arm/include/asm/mach/dma.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/mach/dma.h + *  arch/arm/include/asm/mach/dma.h   *   *  Copyright (C) 1998-2000 Russell King   * diff --git a/include/asm-arm/mach/flash.h b/arch/arm/include/asm/mach/flash.h index 05b029ef637..4ca69fe2c85 100644 --- a/include/asm-arm/mach/flash.h +++ b/arch/arm/include/asm/mach/flash.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/mach/flash.h + *  arch/arm/include/asm/mach/flash.h   *   *  Copyright (C) 2003 Russell King, All Rights Reserved.   * diff --git a/include/asm-arm/mach/irda.h b/arch/arm/include/asm/mach/irda.h index 58984d9c0b0..38f77b5e56c 100644 --- a/include/asm-arm/mach/irda.h +++ b/arch/arm/include/asm/mach/irda.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/mach/irda.h + *  arch/arm/include/asm/mach/irda.h   *   *  Copyright (C) 2004 Russell King.   * diff --git a/include/asm-arm/mach/irq.h b/arch/arm/include/asm/mach/irq.h index eb0bfba6570..acac5302e4e 100644 --- a/include/asm-arm/mach/irq.h +++ b/arch/arm/include/asm/mach/irq.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/mach/irq.h + *  arch/arm/include/asm/mach/irq.h   *   *  Copyright (C) 1995-2000 Russell King.   * @@ -22,20 +22,6 @@ extern void init_FIQ(void);  extern int show_fiq_list(struct seq_file *, void *);  /* - * Obsolete inline function for calling irq descriptor handlers. - */ -static inline void desc_handle_irq(unsigned int irq, struct irq_desc *desc) -{ -	desc->handle_irq(irq, desc); -} - -void set_irq_flags(unsigned int irq, unsigned int flags); - -#define IRQF_VALID	(1 << 0) -#define IRQF_PROBE	(1 << 1) -#define IRQF_NOAUTOEN	(1 << 2) - -/*   * This is for easy migration, but should be changed in the source   */  #define do_bad_IRQ(irq,desc)				\ @@ -45,10 +31,4 @@ do {							\  	spin_unlock(&desc->lock);			\  } while(0) -extern unsigned long irq_err_count; -static inline void ack_bad_irq(int irq) -{ -	irq_err_count++; -} -  #endif diff --git a/include/asm-arm/mach/map.h b/arch/arm/include/asm/mach/map.h index 7ef3c839018..06f583b1399 100644 --- a/include/asm-arm/mach/map.h +++ b/arch/arm/include/asm/mach/map.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/map.h + *  arch/arm/include/asm/map.h   *   *  Copyright (C) 1999-2000 Russell King   * diff --git a/include/asm-arm/mach/mmc.h b/arch/arm/include/asm/mach/mmc.h index eb91145c00c..4da332b0314 100644 --- a/include/asm-arm/mach/mmc.h +++ b/arch/arm/include/asm/mach/mmc.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/mach/mmc.h + *  arch/arm/include/asm/mach/mmc.h   */  #ifndef ASMARM_MACH_MMC_H  #define ASMARM_MACH_MMC_H diff --git a/include/asm-arm/mach/pci.h b/arch/arm/include/asm/mach/pci.h index 9d4f6b5ea41..32da1ae17e0 100644 --- a/include/asm-arm/mach/pci.h +++ b/arch/arm/include/asm/mach/pci.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/mach/pci.h + *  arch/arm/include/asm/mach/pci.h   *   *  Copyright (C) 2000 Russell King   * diff --git a/include/asm-arm/mach/serial_at91.h b/arch/arm/include/asm/mach/serial_at91.h index 55b317a8906..ea6d063923b 100644 --- a/include/asm-arm/mach/serial_at91.h +++ b/arch/arm/include/asm/mach/serial_at91.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/mach/serial_at91.h + *  arch/arm/include/asm/mach/serial_at91.h   *   *  Based on serial_sa1100.h  by Nicolas Pitre   * diff --git a/include/asm-arm/mach/serial_sa1100.h b/arch/arm/include/asm/mach/serial_sa1100.h index 20c22bb218d..d09064bf95a 100644 --- a/include/asm-arm/mach/serial_sa1100.h +++ b/arch/arm/include/asm/mach/serial_sa1100.h @@ -1,9 +1,9 @@  /* - *  linux/include/asm-arm/mach/serial_sa1100.h + *  arch/arm/include/asm/mach/serial_sa1100.h   *   *  Author: Nicolas Pitre   * - * Moved to include/asm-arm/mach and changed lots, Russell King + * Moved and changed lots, Russell King   *   * Low level machine dependent UART functions.   */ diff --git a/include/asm-arm/mach/sharpsl_param.h b/arch/arm/include/asm/mach/sharpsl_param.h index 7a24ecf0422..7a24ecf0422 100644 --- a/include/asm-arm/mach/sharpsl_param.h +++ b/arch/arm/include/asm/mach/sharpsl_param.h diff --git a/include/asm-arm/mach/time.h b/arch/arm/include/asm/mach/time.h index 2fd36ea0130..b2cc1fcd040 100644 --- a/include/asm-arm/mach/time.h +++ b/arch/arm/include/asm/mach/time.h @@ -1,5 +1,5 @@  /* - * linux/include/asm-arm/mach/time.h + * arch/arm/include/asm/mach/time.h   *   * Copyright (C) 2004 MontaVista Software, Inc.   * diff --git a/include/asm-arm/mach/udc_pxa2xx.h b/arch/arm/include/asm/mach/udc_pxa2xx.h index 9e5ed7c0f27..270902c353f 100644 --- a/include/asm-arm/mach/udc_pxa2xx.h +++ b/arch/arm/include/asm/mach/udc_pxa2xx.h @@ -1,5 +1,5 @@  /* - * linux/include/asm-arm/mach/udc_pxa2xx.h + * arch/arm/include/asm/mach/udc_pxa2xx.h   *   * This supports machine-specific differences in how the PXA2xx   * USB Device Controller (UDC) is wired. diff --git a/include/asm-arm/mc146818rtc.h b/arch/arm/include/asm/mc146818rtc.h index 7b81e0c4254..7b81e0c4254 100644 --- a/include/asm-arm/mc146818rtc.h +++ b/arch/arm/include/asm/mc146818rtc.h diff --git a/include/asm-arm/memory.h b/arch/arm/include/asm/memory.h index 9ba4d7136e6..92069221dca 100644 --- a/include/asm-arm/memory.h +++ b/arch/arm/include/asm/memory.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/memory.h + *  arch/arm/include/asm/memory.h   *   *  Copyright (C) 2000-2002 Russell King   *  modification for nommu, Hyok S. Choi, 2004 diff --git a/include/asm-arm/mman.h b/arch/arm/include/asm/mman.h index 54570d2e95b..54570d2e95b 100644 --- a/include/asm-arm/mman.h +++ b/arch/arm/include/asm/mman.h diff --git a/include/asm-arm/mmu.h b/arch/arm/include/asm/mmu.h index 53099d4ee42..53099d4ee42 100644 --- a/include/asm-arm/mmu.h +++ b/arch/arm/include/asm/mmu.h diff --git a/include/asm-arm/mmu_context.h b/arch/arm/include/asm/mmu_context.h index 91b9dfdfed5..a301e446007 100644 --- a/include/asm-arm/mmu_context.h +++ b/arch/arm/include/asm/mmu_context.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/mmu_context.h + *  arch/arm/include/asm/mmu_context.h   *   *  Copyright (C) 1996 Russell King.   * diff --git a/include/asm-arm/mmzone.h b/arch/arm/include/asm/mmzone.h index b87de151f0a..f2fbb508490 100644 --- a/include/asm-arm/mmzone.h +++ b/arch/arm/include/asm/mmzone.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/mmzone.h + *  arch/arm/include/asm/mmzone.h   *   *  1999-12-29	Nicolas Pitre		Created   * diff --git a/include/asm-arm/module.h b/arch/arm/include/asm/module.h index 24b168dc31a..24b168dc31a 100644 --- a/include/asm-arm/module.h +++ b/arch/arm/include/asm/module.h diff --git a/include/asm-arm/msgbuf.h b/arch/arm/include/asm/msgbuf.h index 33b35b946ea..33b35b946ea 100644 --- a/include/asm-arm/msgbuf.h +++ b/arch/arm/include/asm/msgbuf.h diff --git a/include/asm-arm/mtd-xip.h b/arch/arm/include/asm/mtd-xip.h index 9eb127cc7db..4bc50f9abe3 100644 --- a/include/asm-arm/mtd-xip.h +++ b/arch/arm/include/asm/mtd-xip.h @@ -17,7 +17,7 @@  #ifndef __ARM_MTD_XIP_H__  #define __ARM_MTD_XIP_H__ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/mtd-xip.h>  /* fill instruction prefetch */ diff --git a/include/asm-arm/mutex.h b/arch/arm/include/asm/mutex.h index 020bd98710a..93226cf23ae 100644 --- a/include/asm-arm/mutex.h +++ b/arch/arm/include/asm/mutex.h @@ -1,5 +1,5 @@  /* - * include/asm-arm/mutex.h + * arch/arm/include/asm/mutex.h   *   * ARM optimized mutex locking primitives   * diff --git a/include/asm-arm/nwflash.h b/arch/arm/include/asm/nwflash.h index 04e5a557a88..04e5a557a88 100644 --- a/include/asm-arm/nwflash.h +++ b/arch/arm/include/asm/nwflash.h diff --git a/include/asm-arm/page-nommu.h b/arch/arm/include/asm/page-nommu.h index ea1cde84f50..3574c0deb37 100644 --- a/include/asm-arm/page-nommu.h +++ b/arch/arm/include/asm/page-nommu.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/page-nommu.h + *  arch/arm/include/asm/page-nommu.h   *   *  Copyright (C) 2004 Hyok S. Choi   * diff --git a/include/asm-arm/page.h b/arch/arm/include/asm/page.h index 7c5fc5582e5..cf2e2680daa 100644 --- a/include/asm-arm/page.h +++ b/arch/arm/include/asm/page.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/page.h + *  arch/arm/include/asm/page.h   *   *  Copyright (C) 1995-2003 Russell King   * diff --git a/include/asm-arm/param.h b/arch/arm/include/asm/param.h index 15806468ba7..8b24bf94c06 100644 --- a/include/asm-arm/param.h +++ b/arch/arm/include/asm/param.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/param.h + *  arch/arm/include/asm/param.h   *   *  Copyright (C) 1995-1999 Russell King   * diff --git a/include/asm-arm/parport.h b/arch/arm/include/asm/parport.h index f2f90c76ddd..26e94b09035 100644 --- a/include/asm-arm/parport.h +++ b/arch/arm/include/asm/parport.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/parport.h: ARM-specific parport initialisation + *  arch/arm/include/asm/parport.h: ARM-specific parport initialisation   *   *  Copyright (C) 1999, 2000  Tim Waugh <tim@cyberelk.demon.co.uk>   * diff --git a/include/asm-arm/pci.h b/arch/arm/include/asm/pci.h index 2d84792f2e1..968b833f3bb 100644 --- a/include/asm-arm/pci.h +++ b/arch/arm/include/asm/pci.h @@ -4,7 +4,7 @@  #ifdef __KERNEL__  #include <asm-generic/pci-dma-compat.h> -#include <asm/hardware.h> /* for PCIBIOS_MIN_* */ +#include <asm/arch/hardware.h> /* for PCIBIOS_MIN_* */  #define pcibios_scan_all_fns(a, b)	0 diff --git a/include/asm-arm/percpu.h b/arch/arm/include/asm/percpu.h index b4e32d8ec07..b4e32d8ec07 100644 --- a/include/asm-arm/percpu.h +++ b/arch/arm/include/asm/percpu.h diff --git a/include/asm-arm/pgalloc.h b/arch/arm/include/asm/pgalloc.h index 163b0305dd7..3dcd64bf182 100644 --- a/include/asm-arm/pgalloc.h +++ b/arch/arm/include/asm/pgalloc.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/pgalloc.h + *  arch/arm/include/asm/pgalloc.h   *   *  Copyright (C) 2000-2001 Russell King   * diff --git a/include/asm-arm/pgtable-hwdef.h b/arch/arm/include/asm/pgtable-hwdef.h index f3b5120c99f..fd1521d5cb9 100644 --- a/include/asm-arm/pgtable-hwdef.h +++ b/arch/arm/include/asm/pgtable-hwdef.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/pgtable-hwdef.h + *  arch/arm/include/asm/pgtable-hwdef.h   *   *  Copyright (C) 1995-2002 Russell King   * diff --git a/include/asm-arm/pgtable-nommu.h b/arch/arm/include/asm/pgtable-nommu.h index 386fcc10a97..b011f2e939a 100644 --- a/include/asm-arm/pgtable-nommu.h +++ b/arch/arm/include/asm/pgtable-nommu.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/pgtable-nommu.h + *  arch/arm/include/asm/pgtable-nommu.h   *   *  Copyright (C) 1995-2002 Russell King   *  Copyright (C) 2004  Hyok S. Choi diff --git a/include/asm-arm/pgtable.h b/arch/arm/include/asm/pgtable.h index 5571c13c3f3..8ab060a53ab 100644 --- a/include/asm-arm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/pgtable.h + *  arch/arm/include/asm/pgtable.h   *   *  Copyright (C) 1995-2002 Russell King   * diff --git a/include/asm-arm/poll.h b/arch/arm/include/asm/poll.h index c98509d3149..c98509d3149 100644 --- a/include/asm-arm/poll.h +++ b/arch/arm/include/asm/poll.h diff --git a/include/asm-arm/posix_types.h b/arch/arm/include/asm/posix_types.h index c37379dadcb..2446d23bfdb 100644 --- a/include/asm-arm/posix_types.h +++ b/arch/arm/include/asm/posix_types.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/posix_types.h + *  arch/arm/include/asm/posix_types.h   *   *  Copyright (C) 1996-1998 Russell King.   * diff --git a/include/asm-arm/proc-fns.h b/arch/arm/include/asm/proc-fns.h index 75ec760f4c7..db80203b68e 100644 --- a/include/asm-arm/proc-fns.h +++ b/arch/arm/include/asm/proc-fns.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/proc-fns.h + *  arch/arm/include/asm/proc-fns.h   *   *  Copyright (C) 1997-1999 Russell King   *  Copyright (C) 2000 Deep Blue Solutions Ltd diff --git a/include/asm-arm/processor.h b/arch/arm/include/asm/processor.h index bd8029e8dc6..b01d5e7e3d5 100644 --- a/include/asm-arm/processor.h +++ b/arch/arm/include/asm/processor.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/processor.h + *  arch/arm/include/asm/processor.h   *   *  Copyright (C) 1995-1999 Russell King   * diff --git a/include/asm-arm/procinfo.h b/arch/arm/include/asm/procinfo.h index 4d3c685075e..ca52e584ef7 100644 --- a/include/asm-arm/procinfo.h +++ b/arch/arm/include/asm/procinfo.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/procinfo.h + *  arch/arm/include/asm/procinfo.h   *   *  Copyright (C) 1996-1999 Russell King   * diff --git a/include/asm-arm/ptrace.h b/arch/arm/include/asm/ptrace.h index 8382b7510f9..b415c0e8545 100644 --- a/include/asm-arm/ptrace.h +++ b/arch/arm/include/asm/ptrace.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/ptrace.h + *  arch/arm/include/asm/ptrace.h   *   *  Copyright (C) 1996-2003 Russell King   * diff --git a/include/asm-arm/resource.h b/arch/arm/include/asm/resource.h index 734b581b5b6..734b581b5b6 100644 --- a/include/asm-arm/resource.h +++ b/arch/arm/include/asm/resource.h diff --git a/include/asm-arm/scatterlist.h b/arch/arm/include/asm/scatterlist.h index ca0a37d0340..ca0a37d0340 100644 --- a/include/asm-arm/scatterlist.h +++ b/arch/arm/include/asm/scatterlist.h diff --git a/include/asm-arm/sections.h b/arch/arm/include/asm/sections.h index 2b8c5160388..2b8c5160388 100644 --- a/include/asm-arm/sections.h +++ b/arch/arm/include/asm/sections.h diff --git a/include/asm-arm/segment.h b/arch/arm/include/asm/segment.h index 9e24c21f630..9e24c21f630 100644 --- a/include/asm-arm/segment.h +++ b/arch/arm/include/asm/segment.h diff --git a/include/asm-arm/sembuf.h b/arch/arm/include/asm/sembuf.h index 1c028395428..1c028395428 100644 --- a/include/asm-arm/sembuf.h +++ b/arch/arm/include/asm/sembuf.h diff --git a/include/asm-arm/serial.h b/arch/arm/include/asm/serial.h index 015b262dc14..ebb049091e2 100644 --- a/include/asm-arm/serial.h +++ b/arch/arm/include/asm/serial.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/serial.h + *  arch/arm/include/asm/serial.h   *   *  Copyright (C) 1996 Russell King.   * diff --git a/include/asm-arm/setup.h b/arch/arm/include/asm/setup.h index 7bbf105463f..7bbf105463f 100644 --- a/include/asm-arm/setup.h +++ b/arch/arm/include/asm/setup.h diff --git a/include/asm-arm/shmbuf.h b/arch/arm/include/asm/shmbuf.h index 2e5c67ba1c9..2e5c67ba1c9 100644 --- a/include/asm-arm/shmbuf.h +++ b/arch/arm/include/asm/shmbuf.h diff --git a/include/asm-arm/shmparam.h b/arch/arm/include/asm/shmparam.h index a5223b3a9bf..a5223b3a9bf 100644 --- a/include/asm-arm/shmparam.h +++ b/arch/arm/include/asm/shmparam.h diff --git a/include/asm-arm/sigcontext.h b/arch/arm/include/asm/sigcontext.h index fc0b80b6a6f..fc0b80b6a6f 100644 --- a/include/asm-arm/sigcontext.h +++ b/arch/arm/include/asm/sigcontext.h diff --git a/include/asm-arm/siginfo.h b/arch/arm/include/asm/siginfo.h index 5e21852e603..5e21852e603 100644 --- a/include/asm-arm/siginfo.h +++ b/arch/arm/include/asm/siginfo.h diff --git a/include/asm-arm/signal.h b/arch/arm/include/asm/signal.h index d0fb487aba4..d0fb487aba4 100644 --- a/include/asm-arm/signal.h +++ b/arch/arm/include/asm/signal.h diff --git a/include/asm-arm/sizes.h b/arch/arm/include/asm/sizes.h index 503843db156..503843db156 100644 --- a/include/asm-arm/sizes.h +++ b/arch/arm/include/asm/sizes.h diff --git a/include/asm-arm/smp.h b/arch/arm/include/asm/smp.h index 7fffa2404b8..cc12a525a06 100644 --- a/include/asm-arm/smp.h +++ b/arch/arm/include/asm/smp.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/smp.h + *  arch/arm/include/asm/smp.h   *   *  Copyright (C) 2004-2005 ARM Ltd.   * @@ -17,7 +17,7 @@  #include <asm/arch/smp.h>  #ifndef CONFIG_SMP -# error "<asm-arm/smp.h> included in non-SMP build" +# error "<asm/smp.h> included in non-SMP build"  #endif  #define raw_smp_processor_id() (current_thread_info()->cpu) diff --git a/include/asm-arm/socket.h b/arch/arm/include/asm/socket.h index 6817be9573a..6817be9573a 100644 --- a/include/asm-arm/socket.h +++ b/arch/arm/include/asm/socket.h diff --git a/include/asm-arm/sockios.h b/arch/arm/include/asm/sockios.h index a2588a2512d..a2588a2512d 100644 --- a/include/asm-arm/sockios.h +++ b/arch/arm/include/asm/sockios.h diff --git a/include/asm-arm/sparsemem.h b/arch/arm/include/asm/sparsemem.h index 277158191a0..277158191a0 100644 --- a/include/asm-arm/sparsemem.h +++ b/arch/arm/include/asm/sparsemem.h diff --git a/include/asm-arm/spinlock.h b/arch/arm/include/asm/spinlock.h index 2b41ebbfa7f..2b41ebbfa7f 100644 --- a/include/asm-arm/spinlock.h +++ b/arch/arm/include/asm/spinlock.h diff --git a/include/asm-arm/spinlock_types.h b/arch/arm/include/asm/spinlock_types.h index 43e83f6d2ee..43e83f6d2ee 100644 --- a/include/asm-arm/spinlock_types.h +++ b/arch/arm/include/asm/spinlock_types.h diff --git a/include/asm-arm/stat.h b/arch/arm/include/asm/stat.h index 42c0c13999d..42c0c13999d 100644 --- a/include/asm-arm/stat.h +++ b/arch/arm/include/asm/stat.h diff --git a/include/asm-arm/statfs.h b/arch/arm/include/asm/statfs.h index a02e6a8c3d7..a02e6a8c3d7 100644 --- a/include/asm-arm/statfs.h +++ b/arch/arm/include/asm/statfs.h diff --git a/include/asm-arm/string.h b/arch/arm/include/asm/string.h index e50c4a39b69..e50c4a39b69 100644 --- a/include/asm-arm/string.h +++ b/arch/arm/include/asm/string.h diff --git a/include/asm-arm/suspend.h b/arch/arm/include/asm/suspend.h index cf0d0bdee74..cf0d0bdee74 100644 --- a/include/asm-arm/suspend.h +++ b/arch/arm/include/asm/suspend.h diff --git a/include/asm-arm/system.h b/arch/arm/include/asm/system.h index 514af792a59..514af792a59 100644 --- a/include/asm-arm/system.h +++ b/arch/arm/include/asm/system.h diff --git a/include/asm-arm/termbits.h b/arch/arm/include/asm/termbits.h index f784d11f40b..f784d11f40b 100644 --- a/include/asm-arm/termbits.h +++ b/arch/arm/include/asm/termbits.h diff --git a/include/asm-arm/termios.h b/arch/arm/include/asm/termios.h index 293e3f1bc3f..293e3f1bc3f 100644 --- a/include/asm-arm/termios.h +++ b/arch/arm/include/asm/termios.h diff --git a/include/asm-arm/therm.h b/arch/arm/include/asm/therm.h index e51c923ecdf..f002f0197d7 100644 --- a/include/asm-arm/therm.h +++ b/arch/arm/include/asm/therm.h @@ -1,5 +1,5 @@  /* - * linux/include/asm-arm/therm.h: Definitions for Dallas Semiconductor + * arch/arm/include/asm/therm.h: Definitions for Dallas Semiconductor   *  DS1620 thermometer driver (as used in the Rebel.com NetWinder)   */  #ifndef __ASM_THERM_H diff --git a/include/asm-arm/thread_info.h b/arch/arm/include/asm/thread_info.h index d4be2d64616..e56fa48e4ae 100644 --- a/include/asm-arm/thread_info.h +++ b/arch/arm/include/asm/thread_info.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/thread_info.h + *  arch/arm/include/asm/thread_info.h   *   *  Copyright (C) 2002 Russell King.   * @@ -117,7 +117,7 @@ extern void iwmmxt_task_switch(struct thread_info *);  /*   * We use bit 30 of the preempt_count to indicate that kernel - * preemption is occurring.  See include/asm-arm/hardirq.h. + * preemption is occurring.  See <asm/hardirq.h>.   */  #define PREEMPT_ACTIVE	0x40000000 diff --git a/include/asm-arm/thread_notify.h b/arch/arm/include/asm/thread_notify.h index 8866e521684..f27379d7f72 100644 --- a/include/asm-arm/thread_notify.h +++ b/arch/arm/include/asm/thread_notify.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/thread_notify.h + *  arch/arm/include/asm/thread_notify.h   *   *  Copyright (C) 2006 Russell King.   * diff --git a/include/asm-arm/timex.h b/arch/arm/include/asm/timex.h index 7b8d4cb24be..e50e2926cd6 100644 --- a/include/asm-arm/timex.h +++ b/arch/arm/include/asm/timex.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/timex.h + *  arch/arm/include/asm/timex.h   *   *  Copyright (C) 1997,1998 Russell King   * diff --git a/include/asm-arm/tlb.h b/arch/arm/include/asm/tlb.h index 36bd402a21c..857f1dfac79 100644 --- a/include/asm-arm/tlb.h +++ b/arch/arm/include/asm/tlb.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/tlb.h + *  arch/arm/include/asm/tlb.h   *   *  Copyright (C) 2002 Russell King   * diff --git a/include/asm-arm/tlbflush.h b/arch/arm/include/asm/tlbflush.h index 909656c747e..0d0d40f1b59 100644 --- a/include/asm-arm/tlbflush.h +++ b/arch/arm/include/asm/tlbflush.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/tlbflush.h + *  arch/arm/include/asm/tlbflush.h   *   *  Copyright (C) 1999-2003 Russell King   * diff --git a/include/asm-arm/topology.h b/arch/arm/include/asm/topology.h index accbd7cad9b..accbd7cad9b 100644 --- a/include/asm-arm/topology.h +++ b/arch/arm/include/asm/topology.h diff --git a/include/asm-arm/traps.h b/arch/arm/include/asm/traps.h index aa399aec568..aa399aec568 100644 --- a/include/asm-arm/traps.h +++ b/arch/arm/include/asm/traps.h diff --git a/include/asm-arm/types.h b/arch/arm/include/asm/types.h index 345df01534a..345df01534a 100644 --- a/include/asm-arm/types.h +++ b/arch/arm/include/asm/types.h diff --git a/include/asm-arm/uaccess.h b/arch/arm/include/asm/uaccess.h index 4c1a3fa9f25..d0f51ff900b 100644 --- a/include/asm-arm/uaccess.h +++ b/arch/arm/include/asm/uaccess.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/uaccess.h + *  arch/arm/include/asm/uaccess.h   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License version 2 as diff --git a/include/asm-arm/ucontext.h b/arch/arm/include/asm/ucontext.h index bf65e9f4525..bf65e9f4525 100644 --- a/include/asm-arm/ucontext.h +++ b/arch/arm/include/asm/ucontext.h diff --git a/include/asm-arm/unaligned.h b/arch/arm/include/asm/unaligned.h index 44593a89490..44593a89490 100644 --- a/include/asm-arm/unaligned.h +++ b/arch/arm/include/asm/unaligned.h diff --git a/include/asm-arm/unistd.h b/arch/arm/include/asm/unistd.h index 7c570082b1e..f95fbb2fcb5 100644 --- a/include/asm-arm/unistd.h +++ b/arch/arm/include/asm/unistd.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/unistd.h + *  arch/arm/include/asm/unistd.h   *   *  Copyright (C) 2001-2005 Russell King   * diff --git a/include/asm-arm/user.h b/arch/arm/include/asm/user.h index 825c1e7c582..825c1e7c582 100644 --- a/include/asm-arm/user.h +++ b/arch/arm/include/asm/user.h diff --git a/include/asm-arm/vfp.h b/arch/arm/include/asm/vfp.h index 5f9a2cb3d45..f4ab34fd4f7 100644 --- a/include/asm-arm/vfp.h +++ b/arch/arm/include/asm/vfp.h @@ -1,5 +1,5 @@  /* - * linux/include/asm-arm/vfp.h + * arch/arm/include/asm/vfp.h   *   * VFP register definitions.   * First, the standard VFP set. diff --git a/include/asm-arm/vfpmacros.h b/arch/arm/include/asm/vfpmacros.h index cccb3892e73..422f3cc204a 100644 --- a/include/asm-arm/vfpmacros.h +++ b/arch/arm/include/asm/vfpmacros.h @@ -1,5 +1,5 @@  /* - * linux/include/asm-arm/vfpmacros.h + * arch/arm/include/asm/vfpmacros.h   *   * Assembler-only file containing VFP macros and register definitions.   */ diff --git a/include/asm-arm/vga.h b/arch/arm/include/asm/vga.h index 1e0b913c3d7..4f767ad3a0b 100644 --- a/include/asm-arm/vga.h +++ b/arch/arm/include/asm/vga.h @@ -1,7 +1,7 @@  #ifndef ASMARM_VGA_H  #define ASMARM_VGA_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #define VGA_MAP_MEM(x,s)	(PCIMEM_BASE + (x)) diff --git a/include/asm-arm/xor.h b/arch/arm/include/asm/xor.h index e7c4cf58bed..7604673dc42 100644 --- a/include/asm-arm/xor.h +++ b/arch/arm/include/asm/xor.h @@ -1,5 +1,5 @@  /* - *  linux/include/asm-arm/xor.h + *  arch/arm/include/asm/xor.h   *   *  Copyright (C) 2001 Russell King   * diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c index f5cfdabcb87..8192fe8409d 100644 --- a/arch/arm/kernel/ecard.c +++ b/arch/arm/kernel/ecard.c @@ -46,7 +46,7 @@  #include <asm/dma.h>  #include <asm/ecard.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mmu_context.h>  #include <asm/mach/irq.h> diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S index 7e9c00a8a41..1c3c6ea5f9e 100644 --- a/arch/arm/kernel/head-common.S +++ b/arch/arm/kernel/head-common.S @@ -181,7 +181,7 @@ ENTRY(lookup_processor_type)  	ldmfd	sp!, {r4 - r7, r9, pc}  /* - * Look in include/asm-arm/procinfo.h and arch/arm/kernel/arch.[ch] for + * Look in <asm/procinfo.h> and arch/arm/kernel/arch.[ch] for   * more information about the __proc_info and __arch_info structures.   */  	.long	__proc_info_begin diff --git a/arch/arm/kernel/head-nommu.S b/arch/arm/kernel/head-nommu.S index 5d78ffb8a9a..27329bd3203 100644 --- a/arch/arm/kernel/head-nommu.S +++ b/arch/arm/kernel/head-nommu.S @@ -15,7 +15,6 @@  #include <linux/init.h>  #include <asm/assembler.h> -#include <asm/mach-types.h>  #include <asm/ptrace.h>  #include <asm/asm-offsets.h>  #include <asm/thread_info.h> diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index 11dcd52e51b..f88efb135b7 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c @@ -38,6 +38,7 @@  #include <linux/proc_fs.h>  #include <asm/system.h> +#include <asm/mach/irq.h>  #include <asm/mach/time.h>  /* diff --git a/arch/arm/lib/ecard.S b/arch/arm/lib/ecard.S index c55aaa2a208..79cf247ad52 100644 --- a/arch/arm/lib/ecard.S +++ b/arch/arm/lib/ecard.S @@ -12,7 +12,7 @@   */  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define CPSR2SPSR(rt) \  		mrs	rt, cpsr; \ diff --git a/arch/arm/lib/getuser.S b/arch/arm/lib/getuser.S index 1dd8ea4f9a9..2034d4dbe6a 100644 --- a/arch/arm/lib/getuser.S +++ b/arch/arm/lib/getuser.S @@ -20,7 +20,7 @@   *		r2, r3 contains the zero-extended value   *		lr corrupted   * - * No other registers must be altered.  (see include/asm-arm/uaccess.h + * No other registers must be altered.  (see <asm/uaccess.h>   * for specific ASM register usage).   *   * Note that ADDR_LIMIT is either 0 or 0xc0000000. diff --git a/arch/arm/lib/io-readsw-armv3.S b/arch/arm/lib/io-readsw-armv3.S index 4ef90418514..4cc4411595f 100644 --- a/arch/arm/lib/io-readsw-armv3.S +++ b/arch/arm/lib/io-readsw-armv3.S @@ -9,7 +9,7 @@   */  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  .Linsw_bad_alignment:  		adr	r0, .Linsw_bad_align_msg diff --git a/arch/arm/lib/io-writesw-armv3.S b/arch/arm/lib/io-writesw-armv3.S index 1607a29f49b..0a34752bc44 100644 --- a/arch/arm/lib/io-writesw-armv3.S +++ b/arch/arm/lib/io-writesw-armv3.S @@ -9,7 +9,7 @@   */  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  .Loutsw_bad_alignment:  		adr	r0, .Loutsw_bad_align_msg diff --git a/arch/arm/lib/putuser.S b/arch/arm/lib/putuser.S index 8620afe54f7..08ec7dffa52 100644 --- a/arch/arm/lib/putuser.S +++ b/arch/arm/lib/putuser.S @@ -20,7 +20,7 @@   * Outputs:	r0 is the error code   *		lr corrupted   * - * No other registers must be altered.  (see include/asm-arm/uaccess.h + * No other registers must be altered.  (see <asm/uaccess.h>   * for specific ASM register usage).   *   * Note that ADDR_LIMIT is either 0 or 0xc0000000 diff --git a/arch/arm/mach-aaec2000/aaed2000.c b/arch/arm/mach-aaec2000/aaed2000.c index 83f57da3184..08f030d506b 100644 --- a/arch/arm/mach-aaec2000/aaed2000.c +++ b/arch/arm/mach-aaec2000/aaed2000.c @@ -20,7 +20,7 @@  #include <asm/setup.h>  #include <asm/memory.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-aaec2000/core.c b/arch/arm/mach-aaec2000/core.c index b016be2b0e3..2e0cec2dc99 100644 --- a/arch/arm/mach-aaec2000/core.c +++ b/arch/arm/mach-aaec2000/core.c @@ -20,7 +20,7 @@  #include <linux/timex.h>  #include <linux/signal.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/sizes.h> diff --git a/arch/arm/mach-at91/at91x40_time.c b/arch/arm/mach-at91/at91x40_time.c index eddc882f1b4..44690440e84 100644 --- a/arch/arm/mach-at91/at91x40_time.c +++ b/arch/arm/mach-at91/at91x40_time.c @@ -23,7 +23,7 @@  #include <linux/interrupt.h>  #include <linux/irq.h>  #include <linux/time.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach/time.h>  #include <asm/arch/at91_tc.h> diff --git a/arch/arm/mach-at91/board-1arm.c b/arch/arm/mach-at91/board-1arm.c index 2d3d4b6f7b0..fc0f293174c 100644 --- a/arch/arm/mach-at91/board-1arm.c +++ b/arch/arm/mach-at91/board-1arm.c @@ -24,7 +24,7 @@  #include <linux/module.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-cam60.c b/arch/arm/mach-at91/board-cam60.c index af2c33aff1a..17faf3cea12 100644 --- a/arch/arm/mach-at91/board-cam60.c +++ b/arch/arm/mach-at91/board-cam60.c @@ -28,7 +28,7 @@  #include <linux/spi/spi.h>  #include <linux/spi/flash.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-cap9adk.c b/arch/arm/mach-at91/board-cap9adk.c index 1f4725972ed..fd21d4240e8 100644 --- a/arch/arm/mach-at91/board-cap9adk.c +++ b/arch/arm/mach-at91/board-cap9adk.c @@ -33,7 +33,7 @@  #include <video/atmel_lcdc.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-carmeva.c b/arch/arm/mach-at91/board-carmeva.c index 9854fc3dd1f..5156fd2883c 100644 --- a/arch/arm/mach-at91/board-carmeva.c +++ b/arch/arm/mach-at91/board-carmeva.c @@ -25,7 +25,7 @@  #include <linux/module.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-csb337.c b/arch/arm/mach-at91/board-csb337.c index 81f1ebb4e96..a55e9ca80ef 100644 --- a/arch/arm/mach-at91/board-csb337.c +++ b/arch/arm/mach-at91/board-csb337.c @@ -28,7 +28,7 @@  #include <linux/input.h>  #include <linux/gpio_keys.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-csb637.c b/arch/arm/mach-at91/board-csb637.c index bb1a5474dda..dfdd4dda04a 100644 --- a/arch/arm/mach-at91/board-csb637.c +++ b/arch/arm/mach-at91/board-csb637.c @@ -25,7 +25,7 @@  #include <linux/platform_device.h>  #include <linux/mtd/physmap.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-dk.c b/arch/arm/mach-at91/board-dk.c index 02a70b2f355..78b5c8b867e 100644 --- a/arch/arm/mach-at91/board-dk.c +++ b/arch/arm/mach-at91/board-dk.c @@ -29,7 +29,7 @@  #include <linux/spi/spi.h>  #include <linux/mtd/physmap.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-eb01.c b/arch/arm/mach-at91/board-eb01.c index 0c1e3858e7d..631af0857d7 100644 --- a/arch/arm/mach-at91/board-eb01.c +++ b/arch/arm/mach-at91/board-eb01.c @@ -24,7 +24,7 @@  #include <linux/platform_device.h>  #include <linux/irq.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h>  #include <asm/arch/board.h> diff --git a/arch/arm/mach-at91/board-eb9200.c b/arch/arm/mach-at91/board-eb9200.c index 3fe054e0056..58ae7a6c240 100644 --- a/arch/arm/mach-at91/board-eb9200.c +++ b/arch/arm/mach-at91/board-eb9200.c @@ -25,7 +25,7 @@  #include <linux/module.h>  #include <linux/device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-ecbat91.c b/arch/arm/mach-at91/board-ecbat91.c index e77fad44383..665d3091baf 100644 --- a/arch/arm/mach-at91/board-ecbat91.c +++ b/arch/arm/mach-at91/board-ecbat91.c @@ -27,7 +27,7 @@  #include <linux/spi/spi.h>  #include <linux/spi/flash.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-ek.c b/arch/arm/mach-at91/board-ek.c index 74aa4325eab..dbe79df1f0a 100644 --- a/arch/arm/mach-at91/board-ek.c +++ b/arch/arm/mach-at91/board-ek.c @@ -29,7 +29,7 @@  #include <linux/spi/spi.h>  #include <linux/mtd/physmap.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-kafa.c b/arch/arm/mach-at91/board-kafa.c index cf1b7b2f76f..16577a06471 100644 --- a/arch/arm/mach-at91/board-kafa.c +++ b/arch/arm/mach-at91/board-kafa.c @@ -24,7 +24,7 @@  #include <linux/module.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c index 082ed59365a..6054e982e28 100644 --- a/arch/arm/mach-at91/board-kb9202.c +++ b/arch/arm/mach-at91/board-kb9202.c @@ -25,7 +25,7 @@  #include <linux/module.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-picotux200.c b/arch/arm/mach-at91/board-picotux200.c index 6acb55c09ae..ea39c6c186e 100644 --- a/arch/arm/mach-at91/board-picotux200.c +++ b/arch/arm/mach-at91/board-picotux200.c @@ -27,7 +27,7 @@  #include <linux/spi/spi.h>  #include <linux/mtd/physmap.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-qil-a9260.c b/arch/arm/mach-at91/board-qil-a9260.c index 33b1ccdb516..5393b8079bd 100644 --- a/arch/arm/mach-at91/board-qil-a9260.c +++ b/arch/arm/mach-at91/board-qil-a9260.c @@ -30,7 +30,7 @@  #include <linux/input.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-sam9-l9260.c b/arch/arm/mach-at91/board-sam9-l9260.c index 3cd5f8d0e2e..fe8a8ac89d6 100644 --- a/arch/arm/mach-at91/board-sam9-l9260.c +++ b/arch/arm/mach-at91/board-sam9-l9260.c @@ -27,7 +27,7 @@  #include <linux/platform_device.h>  #include <linux/spi/spi.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-sam9260ek.c b/arch/arm/mach-at91/board-sam9260ek.c index daf93a58806..6f3b377dc37 100644 --- a/arch/arm/mach-at91/board-sam9260ek.c +++ b/arch/arm/mach-at91/board-sam9260ek.c @@ -28,7 +28,7 @@  #include <linux/spi/at73c213.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c index 12bf527f93b..9d3c65e79c3 100644 --- a/arch/arm/mach-at91/board-sam9261ek.c +++ b/arch/arm/mach-at91/board-sam9261ek.c @@ -35,7 +35,7 @@  #include <video/atmel_lcdc.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c index 63121197f8c..334b159285c 100644 --- a/arch/arm/mach-at91/board-sam9263ek.c +++ b/arch/arm/mach-at91/board-sam9263ek.c @@ -32,7 +32,7 @@  #include <video/atmel_lcdc.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c index e0c07952cc3..f0975bba6d5 100644 --- a/arch/arm/mach-at91/board-sam9g20ek.c +++ b/arch/arm/mach-at91/board-sam9g20ek.c @@ -26,7 +26,7 @@  #include <linux/spi/at73c213.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c index 66e77bb2e07..5271200b6de 100644 --- a/arch/arm/mach-at91/board-sam9rlek.c +++ b/arch/arm/mach-at91/board-sam9rlek.c @@ -18,7 +18,7 @@  #include <video/atmel_lcdc.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-usb-a9260.c b/arch/arm/mach-at91/board-usb-a9260.c index 2f4ecac150d..4048e47c519 100644 --- a/arch/arm/mach-at91/board-usb-a9260.c +++ b/arch/arm/mach-at91/board-usb-a9260.c @@ -30,7 +30,7 @@  #include <linux/input.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-usb-a9263.c b/arch/arm/mach-at91/board-usb-a9263.c index 0e9649d3eda..a2b94947f57 100644 --- a/arch/arm/mach-at91/board-usb-a9263.c +++ b/arch/arm/mach-at91/board-usb-a9263.c @@ -29,7 +29,7 @@  #include <linux/gpio_keys.h>  #include <linux/input.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/board-yl-9200.c b/arch/arm/mach-at91/board-yl-9200.c index bbbfd06f5e0..0aa3ddaf3d6 100644 --- a/arch/arm/mach-at91/board-yl-9200.c +++ b/arch/arm/mach-at91/board-yl-9200.c @@ -33,7 +33,7 @@  #include <linux/gpio_keys.h>  #include <linux/input.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-at91/clock.c b/arch/arm/mach-at91/clock.c index 464bdbbf74d..daebd72a629 100644 --- a/arch/arm/mach-at91/clock.c +++ b/arch/arm/mach-at91/clock.c @@ -24,9 +24,8 @@  #include <linux/clk.h>  #include <asm/io.h> -#include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/at91_pmc.h>  #include <asm/arch/cpu.h> diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c index ee4964abcaf..4db221e0345 100644 --- a/arch/arm/mach-at91/gpio.c +++ b/arch/arm/mach-at91/gpio.c @@ -20,7 +20,7 @@  #include <linux/module.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/at91_pio.h>  #include <asm/arch/gpio.h> diff --git a/arch/arm/mach-at91/irq.c b/arch/arm/mach-at91/irq.c index ca87587b2b4..a1bfc12a0c2 100644 --- a/arch/arm/mach-at91/irq.c +++ b/arch/arm/mach-at91/irq.c @@ -25,9 +25,8 @@  #include <linux/mm.h>  #include <linux/types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h> -#include <asm/mach-types.h>  #include <asm/setup.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-at91/leds.c b/arch/arm/mach-at91/leds.c index 9cdcda500fe..f064b7acb01 100644 --- a/arch/arm/mach-at91/leds.c +++ b/arch/arm/mach-at91/leds.c @@ -13,7 +13,6 @@  #include <linux/module.h>  #include <linux/init.h> -#include <asm/mach-types.h>  #include <asm/arch/board.h>  #include <asm/arch/gpio.h> diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index 8ab4feb1ec5..a5cfe866c9d 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c @@ -23,7 +23,6 @@  #include <asm/atomic.h>  #include <asm/mach/time.h>  #include <asm/mach/irq.h> -#include <asm/mach-types.h>  #include <asm/arch/at91_pmc.h>  #include <asm/arch/gpio.h> diff --git a/arch/arm/mach-clps711x/autcpu12.c b/arch/arm/mach-clps711x/autcpu12.c index c13ca6c56ba..25d18b738bd 100644 --- a/arch/arm/mach-clps711x/autcpu12.c +++ b/arch/arm/mach-clps711x/autcpu12.c @@ -23,7 +23,7 @@  #include <linux/string.h>  #include <linux/mm.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/sizes.h>  #include <asm/io.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-clps711x/cdb89712.c b/arch/arm/mach-clps711x/cdb89712.c index 831df007f6c..8520cb0fdab 100644 --- a/arch/arm/mach-clps711x/cdb89712.c +++ b/arch/arm/mach-clps711x/cdb89712.c @@ -23,7 +23,7 @@  #include <linux/string.h>  #include <linux/mm.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/pgtable.h>  #include <asm/page.h> diff --git a/arch/arm/mach-clps711x/ceiva.c b/arch/arm/mach-clps711x/ceiva.c index e2b2c5ac8a8..9444ab1ffaa 100644 --- a/arch/arm/mach-clps711x/ceiva.c +++ b/arch/arm/mach-clps711x/ceiva.c @@ -27,7 +27,7 @@  #include <linux/kernel.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/page.h>  #include <asm/pgtable.h>  #include <asm/sizes.h> diff --git a/arch/arm/mach-clps711x/edb7211-mm.c b/arch/arm/mach-clps711x/edb7211-mm.c index 0d52e085125..06f64ec57ae 100644 --- a/arch/arm/mach-clps711x/edb7211-mm.c +++ b/arch/arm/mach-clps711x/edb7211-mm.c @@ -22,7 +22,7 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/page.h>  #include <asm/pgtable.h>  #include <asm/sizes.h> diff --git a/arch/arm/mach-clps711x/fortunet.c b/arch/arm/mach-clps711x/fortunet.c index 3792ab4f099..c457a35de4e 100644 --- a/arch/arm/mach-clps711x/fortunet.c +++ b/arch/arm/mach-clps711x/fortunet.c @@ -23,7 +23,7 @@  #include <linux/init.h>  #include <linux/initrd.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/setup.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-clps711x/irq.c b/arch/arm/mach-clps711x/irq.c index ca102960f52..6954a7a4915 100644 --- a/arch/arm/mach-clps711x/irq.c +++ b/arch/arm/mach-clps711x/irq.c @@ -21,7 +21,7 @@  #include <linux/list.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-clps711x/mm.c b/arch/arm/mach-clps711x/mm.c index a00f77ef8df..43c2fa8f481 100644 --- a/arch/arm/mach-clps711x/mm.c +++ b/arch/arm/mach-clps711x/mm.c @@ -25,7 +25,7 @@  #include <linux/bootmem.h>  #include <asm/sizes.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/pgtable.h>  #include <asm/page.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-clps711x/p720t-leds.c b/arch/arm/mach-clps711x/p720t-leds.c index 4915b352496..a9b9c5b847e 100644 --- a/arch/arm/mach-clps711x/p720t-leds.c +++ b/arch/arm/mach-clps711x/p720t-leds.c @@ -22,7 +22,7 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/leds.h>  #include <asm/system.h> diff --git a/arch/arm/mach-clps711x/p720t.c b/arch/arm/mach-clps711x/p720t.c index c8ecd2480c2..80d8fd28b2f 100644 --- a/arch/arm/mach-clps711x/p720t.c +++ b/arch/arm/mach-clps711x/p720t.c @@ -23,7 +23,7 @@  #include <linux/string.h>  #include <linux/mm.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/pgtable.h>  #include <asm/page.h> diff --git a/arch/arm/mach-clps711x/time.c b/arch/arm/mach-clps711x/time.c index e5dc33f1f95..d922a891b1a 100644 --- a/arch/arm/mach-clps711x/time.c +++ b/arch/arm/mach-clps711x/time.c @@ -22,7 +22,7 @@  #include <linux/irq.h>  #include <linux/sched.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/leds.h>  #include <asm/io.h> diff --git a/arch/arm/mach-clps7500/core.c b/arch/arm/mach-clps7500/core.c index 2ac63671ea5..cfd8aca9f7d 100644 --- a/arch/arm/mach-clps7500/core.c +++ b/arch/arm/mach-clps7500/core.c @@ -21,7 +21,7 @@  #include <asm/mach/irq.h>  #include <asm/mach/time.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/iomd.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-davinci/board-evm.c b/arch/arm/mach-davinci/board-evm.c index 9e4024c4965..7497619e4a8 100644 --- a/arch/arm/mach-davinci/board-evm.c +++ b/arch/arm/mach-davinci/board-evm.c @@ -20,7 +20,7 @@  #include <asm/setup.h>  #include <asm/io.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-davinci/clock.c b/arch/arm/mach-davinci/clock.c index c6b94f60e0b..0014fb1c6eb 100644 --- a/arch/arm/mach-davinci/clock.c +++ b/arch/arm/mach-davinci/clock.c @@ -17,7 +17,7 @@  #include <linux/mutex.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/psc.h> diff --git a/arch/arm/mach-davinci/irq.c b/arch/arm/mach-davinci/irq.c index 1333d84d2e4..090580ed88e 100644 --- a/arch/arm/mach-davinci/irq.c +++ b/arch/arm/mach-davinci/irq.c @@ -23,7 +23,7 @@  #include <linux/interrupt.h>  #include <linux/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach/irq.h> diff --git a/arch/arm/mach-davinci/mux.c b/arch/arm/mach-davinci/mux.c index 92d26bd305b..439bf94bdc4 100644 --- a/arch/arm/mach-davinci/mux.c +++ b/arch/arm/mach-davinci/mux.c @@ -11,7 +11,7 @@  #include <linux/io.h>  #include <linux/spinlock.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/mux.h> diff --git a/arch/arm/mach-davinci/psc.c b/arch/arm/mach-davinci/psc.c index 1334416559a..753f0ba81a4 100644 --- a/arch/arm/mach-davinci/psc.c +++ b/arch/arm/mach-davinci/psc.c @@ -23,7 +23,7 @@  #include <linux/init.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/psc.h>  #include <asm/arch/mux.h> diff --git a/arch/arm/mach-davinci/serial.c b/arch/arm/mach-davinci/serial.c index 8368c93c788..c2b812f3391 100644 --- a/arch/arm/mach-davinci/serial.c +++ b/arch/arm/mach-davinci/serial.c @@ -29,7 +29,7 @@  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/serial.h>  #include <asm/arch/irqs.h> diff --git a/arch/arm/mach-davinci/time.c b/arch/arm/mach-davinci/time.c index e96a3dcdc1a..50c3b54c4cc 100644 --- a/arch/arm/mach-davinci/time.c +++ b/arch/arm/mach-davinci/time.c @@ -17,7 +17,7 @@  #include <linux/spinlock.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/system.h>  #include <asm/irq.h>  #include <asm/mach/irq.h> diff --git a/arch/arm/mach-ebsa110/core.c b/arch/arm/mach-ebsa110/core.c index 7710e14b526..31f4f213cce 100644 --- a/arch/arm/mach-ebsa110/core.c +++ b/arch/arm/mach-ebsa110/core.c @@ -15,7 +15,7 @@  #include <linux/serial_8250.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-ebsa110/io.c b/arch/arm/mach-ebsa110/io.c index 6b2380e153e..a2027adeefc 100644 --- a/arch/arm/mach-ebsa110/io.c +++ b/arch/arm/mach-ebsa110/io.c @@ -24,7 +24,7 @@  #include <linux/kernel.h>  #include <linux/types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/page.h> diff --git a/arch/arm/mach-ebsa110/leds.c b/arch/arm/mach-ebsa110/leds.c index 3bc8c5e708e..b16d0167977 100644 --- a/arch/arm/mach-ebsa110/leds.c +++ b/arch/arm/mach-ebsa110/leds.c @@ -15,7 +15,7 @@  #include <linux/spinlock.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-ep93xx/adssphere.c b/arch/arm/mach-ep93xx/adssphere.c index ac5d5818eb7..8f87f8a4148 100644 --- a/arch/arm/mach-ep93xx/adssphere.c +++ b/arch/arm/mach-ep93xx/adssphere.c @@ -19,7 +19,7 @@  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ep93xx/clock.c b/arch/arm/mach-ep93xx/clock.c index f62c35500bb..4642c70f21e 100644 --- a/arch/arm/mach-ep93xx/clock.c +++ b/arch/arm/mach-ep93xx/clock.c @@ -16,7 +16,7 @@  #include <linux/module.h>  #include <linux/string.h>  #include <asm/div64.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  struct clk { diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index 5fed5760850..b49da117af9 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c @@ -36,7 +36,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/system.h>  #include <asm/tlbflush.h> diff --git a/arch/arm/mach-ep93xx/edb9302.c b/arch/arm/mach-ep93xx/edb9302.c index 0315615b74d..1650ec72422 100644 --- a/arch/arm/mach-ep93xx/edb9302.c +++ b/arch/arm/mach-ep93xx/edb9302.c @@ -19,7 +19,7 @@  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ep93xx/edb9302a.c b/arch/arm/mach-ep93xx/edb9302a.c index 62e064bab1d..00208ce6e62 100644 --- a/arch/arm/mach-ep93xx/edb9302a.c +++ b/arch/arm/mach-ep93xx/edb9302a.c @@ -19,7 +19,7 @@  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ep93xx/edb9307.c b/arch/arm/mach-ep93xx/edb9307.c index d6a5698da91..78d04aeca46 100644 --- a/arch/arm/mach-ep93xx/edb9307.c +++ b/arch/arm/mach-ep93xx/edb9307.c @@ -19,7 +19,7 @@  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ep93xx/edb9312.c b/arch/arm/mach-ep93xx/edb9312.c index e310e4d7299..d658fb2f574 100644 --- a/arch/arm/mach-ep93xx/edb9312.c +++ b/arch/arm/mach-ep93xx/edb9312.c @@ -20,7 +20,7 @@  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ep93xx/edb9315.c b/arch/arm/mach-ep93xx/edb9315.c index 249ca9e57bc..4fd1cd67152 100644 --- a/arch/arm/mach-ep93xx/edb9315.c +++ b/arch/arm/mach-ep93xx/edb9315.c @@ -19,7 +19,7 @@  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ep93xx/edb9315a.c b/arch/arm/mach-ep93xx/edb9315a.c index 7ca0e6170a4..44dacbac863 100644 --- a/arch/arm/mach-ep93xx/edb9315a.c +++ b/arch/arm/mach-ep93xx/edb9315a.c @@ -19,7 +19,7 @@  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ep93xx/gesbc9312.c b/arch/arm/mach-ep93xx/gesbc9312.c index 694590a451c..cc80031b4ef 100644 --- a/arch/arm/mach-ep93xx/gesbc9312.c +++ b/arch/arm/mach-ep93xx/gesbc9312.c @@ -19,7 +19,7 @@  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ep93xx/micro9.c b/arch/arm/mach-ep93xx/micro9.c index f28c1294cae..4d831ba799d 100644 --- a/arch/arm/mach-ep93xx/micro9.c +++ b/arch/arm/mach-ep93xx/micro9.c @@ -20,7 +20,7 @@  #include <linux/mtd/physmap.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/arch.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c index 3a4bf90ba83..c0bc642a5c1 100644 --- a/arch/arm/mach-ep93xx/ts72xx.c +++ b/arch/arm/mach-ep93xx/ts72xx.c @@ -20,7 +20,7 @@  #include <linux/platform_device.h>  #include <linux/m48t86.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-footbridge/ebsa285-leds.c b/arch/arm/mach-footbridge/ebsa285-leds.c index 09c1fbc5187..c04c46c404f 100644 --- a/arch/arm/mach-footbridge/ebsa285-leds.c +++ b/arch/arm/mach-footbridge/ebsa285-leds.c @@ -21,7 +21,7 @@  #include <linux/init.h>  #include <linux/spinlock.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/mach-types.h>  #include <asm/system.h> diff --git a/arch/arm/mach-footbridge/isa-irq.c b/arch/arm/mach-footbridge/isa-irq.c index 79443ffc891..b8e53d68c09 100644 --- a/arch/arm/mach-footbridge/isa-irq.c +++ b/arch/arm/mach-footbridge/isa-irq.c @@ -21,7 +21,7 @@  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/dec21285.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-footbridge/netwinder-leds.c b/arch/arm/mach-footbridge/netwinder-leds.c index 8e9cac5a213..2a2fbff7585 100644 --- a/arch/arm/mach-footbridge/netwinder-leds.c +++ b/arch/arm/mach-footbridge/netwinder-leds.c @@ -21,7 +21,7 @@  #include <linux/init.h>  #include <linux/spinlock.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/mach-types.h>  #include <asm/system.h> diff --git a/arch/arm/mach-footbridge/time.c b/arch/arm/mach-footbridge/time.c index d5cfcda385d..bffba25dd26 100644 --- a/arch/arm/mach-footbridge/time.c +++ b/arch/arm/mach-footbridge/time.c @@ -23,7 +23,7 @@  #include <linux/mc146818rtc.h>  #include <linux/bcd.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach/time.h> diff --git a/arch/arm/mach-h720x/common.c b/arch/arm/mach-h720x/common.c index 45144ad2bed..26aefae7f9a 100644 --- a/arch/arm/mach-h720x/common.c +++ b/arch/arm/mach-h720x/common.c @@ -23,7 +23,7 @@  #include <asm/pgtable.h>  #include <asm/dma.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/irq.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-h720x/cpu-h7201.c b/arch/arm/mach-h720x/cpu-h7201.c index c2a431f482f..cd51520b1e3 100644 --- a/arch/arm/mach-h720x/cpu-h7201.c +++ b/arch/arm/mach-h720x/cpu-h7201.c @@ -17,7 +17,7 @@  #include <linux/interrupt.h>  #include <linux/module.h>  #include <asm/types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/arch/irqs.h>  #include <asm/mach/irq.h> diff --git a/arch/arm/mach-h720x/cpu-h7202.c b/arch/arm/mach-h720x/cpu-h7202.c index c627fa124eb..22573fcf9e1 100644 --- a/arch/arm/mach-h720x/cpu-h7202.c +++ b/arch/arm/mach-h720x/cpu-h7202.c @@ -17,7 +17,7 @@  #include <linux/interrupt.h>  #include <linux/module.h>  #include <asm/types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/arch/irqs.h>  #include <asm/mach/irq.h> diff --git a/arch/arm/mach-h720x/h7201-eval.c b/arch/arm/mach-h720x/h7201-eval.c index 407cd4c0aa8..899f9350cc6 100644 --- a/arch/arm/mach-h720x/h7201-eval.c +++ b/arch/arm/mach-h720x/h7201-eval.c @@ -25,7 +25,7 @@  #include <asm/page.h>  #include <asm/pgtable.h>  #include <asm/mach/arch.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "common.h"  MACHINE_START(H7201, "Hynix GMS30C7201") diff --git a/arch/arm/mach-h720x/h7202-eval.c b/arch/arm/mach-h720x/h7202-eval.c index bf2acdce62e..eb725bd8e83 100644 --- a/arch/arm/mach-h720x/h7202-eval.c +++ b/arch/arm/mach-h720x/h7202-eval.c @@ -25,7 +25,7 @@  #include <asm/page.h>  #include <asm/pgtable.h>  #include <asm/mach/arch.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "common.h"  static struct resource cirrus_resources[] = { diff --git a/arch/arm/mach-imx/clock.c b/arch/arm/mach-imx/clock.c index 6a90fe5578d..8915a5fc63c 100644 --- a/arch/arm/mach-imx/clock.c +++ b/arch/arm/mach-imx/clock.c @@ -172,24 +172,29 @@ found:  	return clk;  } +EXPORT_SYMBOL(clk_get);  void clk_put(struct clk *clk)  {  } +EXPORT_SYMBOL(clk_put);  int clk_enable(struct clk *clk)  {  	return 0;  } +EXPORT_SYMBOL(clk_enable);  void clk_disable(struct clk *clk)  {  } +EXPORT_SYMBOL(clk_disable);  unsigned long clk_get_rate(struct clk *clk)  {  	return clk->get_rate();  } +EXPORT_SYMBOL(clk_get_rate);  int imx_clocks_init(void)  { diff --git a/arch/arm/mach-imx/cpufreq.c b/arch/arm/mach-imx/cpufreq.c index be0809b33e0..3fee1ac6fd8 100644 --- a/arch/arm/mach-imx/cpufreq.c +++ b/arch/arm/mach-imx/cpufreq.c @@ -36,7 +36,7 @@  #include <linux/err.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "generic.h" diff --git a/arch/arm/mach-imx/dma.c b/arch/arm/mach-imx/dma.c index ee1c6f06ff6..17a43ba1696 100644 --- a/arch/arm/mach-imx/dma.c +++ b/arch/arm/mach-imx/dma.c @@ -30,7 +30,7 @@  #include <asm/system.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/dma.h>  #include <asm/arch/imx-dma.h> diff --git a/arch/arm/mach-imx/generic.c b/arch/arm/mach-imx/generic.c index 98ddd8a6d05..df77665fadc 100644 --- a/arch/arm/mach-imx/generic.c +++ b/arch/arm/mach-imx/generic.c @@ -30,7 +30,7 @@  #include <asm/errno.h>  #include <asm/arch/imxfb.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/imx-regs.h>  #include <asm/mach/map.h> @@ -251,7 +251,6 @@ void __init set_imx_fb_info(struct imxfb_mach_info *hard_imx_fb_info)  {  	memcpy(&imx_fb_info,hard_imx_fb_info,sizeof(struct imxfb_mach_info));  } -EXPORT_SYMBOL(set_imx_fb_info);  static struct resource imxfb_resources[] = {  	[0] = { diff --git a/arch/arm/mach-imx/irq.c b/arch/arm/mach-imx/irq.c index e1b1f028b93..167b7fcbed2 100644 --- a/arch/arm/mach-imx/irq.c +++ b/arch/arm/mach-imx/irq.c @@ -27,7 +27,7 @@  #include <linux/list.h>  #include <linux/timer.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-imx/leds-mx1ads.c b/arch/arm/mach-imx/leds-mx1ads.c index 79236404aec..8757d37354f 100644 --- a/arch/arm/mach-imx/leds-mx1ads.c +++ b/arch/arm/mach-imx/leds-mx1ads.c @@ -13,7 +13,7 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/system.h>  #include <asm/io.h>  #include <asm/leds.h> diff --git a/arch/arm/mach-imx/mx1ads.c b/arch/arm/mach-imx/mx1ads.c index 9635d5812bc..baf5e2f711e 100644 --- a/arch/arm/mach-imx/mx1ads.c +++ b/arch/arm/mach-imx/mx1ads.c @@ -16,7 +16,7 @@  #include <linux/init.h>  #include <linux/platform_device.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/pgtable.h>  #include <asm/page.h> @@ -125,7 +125,7 @@ static struct platform_device *devices[] __initdata = {  	&imx_uart2_device,  }; -#ifdef CONFIG_MMC_IMX +#if defined(CONFIG_MMC_IMX) || defined(CONFIG_MMC_IMX_MODULE)  static int mx1ads_mmc_card_present(struct device *dev)  {  	/* MMC/SD Card Detect is PB 20 on MX1ADS V1.0.7 */ @@ -143,7 +143,7 @@ mx1ads_init(void)  #ifdef CONFIG_LEDS  	imx_gpio_mode(GPIO_PORTA | GPIO_OUT | 2);  #endif -#ifdef CONFIG_MMC_IMX +#if defined(CONFIG_MMC_IMX) || defined(CONFIG_MMC_IMX_MODULE)  	/* SD/MMC card detect */  	imx_gpio_mode(GPIO_PORTB | GPIO_GIUS | GPIO_IN | 20);  	imx_set_mmc_info(&mx1ads_mmc_info); diff --git a/arch/arm/mach-imx/time.c b/arch/arm/mach-imx/time.c index 5a41e96e858..7fc6d2cdfd9 100644 --- a/arch/arm/mach-imx/time.c +++ b/arch/arm/mach-imx/time.c @@ -19,7 +19,7 @@  #include <linux/clockchips.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/leds.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-integrator/core.c b/arch/arm/mach-integrator/core.c index 7fbbc17f8e8..f439bf12be5 100644 --- a/arch/arm/mach-integrator/core.c +++ b/arch/arm/mach-integrator/core.c @@ -20,7 +20,7 @@  #include <linux/amba/bus.h>  #include <linux/amba/serial.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h>  #include <asm/hardware/arm_timer.h> diff --git a/arch/arm/mach-integrator/cpu.c b/arch/arm/mach-integrator/cpu.c index 71c58bff304..afa0f21ea96 100644 --- a/arch/arm/mach-integrator/cpu.c +++ b/arch/arm/mach-integrator/cpu.c @@ -20,7 +20,7 @@  #include <linux/smp.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach-types.h>  #include <asm/hardware/icst525.h> diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c index df37e93c6fc..3996ddc2a4b 100644 --- a/arch/arm/mach-integrator/integrator_ap.c +++ b/arch/arm/mach-integrator/integrator_ap.c @@ -28,7 +28,7 @@  #include <linux/amba/bus.h>  #include <linux/amba/kmi.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c index 913f64b2240..28d330101e6 100644 --- a/arch/arm/mach-integrator/integrator_cp.c +++ b/arch/arm/mach-integrator/integrator_cp.c @@ -20,7 +20,7 @@  #include <linux/amba/kmi.h>  #include <linux/amba/clcd.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-integrator/leds.c b/arch/arm/mach-integrator/leds.c index f1436e683b4..6062180b108 100644 --- a/arch/arm/mach-integrator/leds.c +++ b/arch/arm/mach-integrator/leds.c @@ -25,7 +25,7 @@  #include <linux/smp.h>  #include <linux/spinlock.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/leds.h>  #include <asm/system.h> diff --git a/arch/arm/mach-integrator/pci_v3.c b/arch/arm/mach-integrator/pci_v3.c index c07f497000c..b8685d919fe 100644 --- a/arch/arm/mach-integrator/pci_v3.c +++ b/arch/arm/mach-integrator/pci_v3.c @@ -28,7 +28,7 @@  #include <linux/spinlock.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/system.h> diff --git a/arch/arm/mach-iop13xx/io.c b/arch/arm/mach-iop13xx/io.c index 5b22fdeca52..44b8c8c1410 100644 --- a/arch/arm/mach-iop13xx/io.c +++ b/arch/arm/mach-iop13xx/io.c @@ -18,7 +18,7 @@   */  #include <linux/kernel.h>  #include <linux/module.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  void * __iomem __iop13xx_io(unsigned long io_addr) diff --git a/arch/arm/mach-iop13xx/iq81340mc.c b/arch/arm/mach-iop13xx/iq81340mc.c index 77b24cd1d88..e17457e8e91 100644 --- a/arch/arm/mach-iop13xx/iq81340mc.c +++ b/arch/arm/mach-iop13xx/iq81340mc.c @@ -18,7 +18,7 @@   */  #include <linux/pci.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/pci.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-iop13xx/iq81340sc.c b/arch/arm/mach-iop13xx/iq81340sc.c index e8522b3b816..19204d8f810 100644 --- a/arch/arm/mach-iop13xx/iq81340sc.c +++ b/arch/arm/mach-iop13xx/iq81340sc.c @@ -18,7 +18,7 @@   */  #include <linux/pci.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/pci.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-iop13xx/irq.c b/arch/arm/mach-iop13xx/irq.c index 69f07b25b3c..e860a6d22de 100644 --- a/arch/arm/mach-iop13xx/irq.c +++ b/arch/arm/mach-iop13xx/irq.c @@ -23,8 +23,7 @@  #include <asm/uaccess.h>  #include <asm/mach/irq.h>  #include <asm/irq.h> -#include <asm/hardware.h> -#include <asm/mach-types.h> +#include <asm/arch/hardware.h>  #include <asm/arch/irqs.h>  #include <asm/arch/msi.h> diff --git a/arch/arm/mach-iop13xx/pci.c b/arch/arm/mach-iop13xx/pci.c index 7825c1aaa27..a0e0147f24f 100644 --- a/arch/arm/mach-iop13xx/pci.c +++ b/arch/arm/mach-iop13xx/pci.c @@ -21,7 +21,7 @@  #include <linux/delay.h>  #include <linux/jiffies.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/sizes.h>  #include <asm/signal.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-iop13xx/setup.c b/arch/arm/mach-iop13xx/setup.c index 246f6d47872..d3fee8a11b6 100644 --- a/arch/arm/mach-iop13xx/setup.c +++ b/arch/arm/mach-iop13xx/setup.c @@ -22,7 +22,7 @@  #include <linux/mtd/physmap.h>  #endif  #include <asm/mach/map.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h>  #include <asm/hardware/iop_adma.h> diff --git a/arch/arm/mach-iop32x/em7210.c b/arch/arm/mach-iop32x/em7210.c index 4877597c875..9941395a5d0 100644 --- a/arch/arm/mach-iop32x/em7210.c +++ b/arch/arm/mach-iop32x/em7210.c @@ -23,7 +23,7 @@  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h>  #include <linux/i2c.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <linux/io.h>  #include <linux/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-iop32x/glantank.c b/arch/arm/mach-iop32x/glantank.c index d4fca75ce54..8761445ed04 100644 --- a/arch/arm/mach-iop32x/glantank.c +++ b/arch/arm/mach-iop32x/glantank.c @@ -25,7 +25,7 @@  #include <linux/mtd/physmap.h>  #include <linux/i2c.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-iop32x/iq31244.c b/arch/arm/mach-iop32x/iq31244.c index 4a89823bceb..5a4e951cad9 100644 --- a/arch/arm/mach-iop32x/iq31244.c +++ b/arch/arm/mach-iop32x/iq31244.c @@ -26,7 +26,7 @@  #include <linux/serial_8250.h>  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-iop32x/iq80321.c b/arch/arm/mach-iop32x/iq80321.c index 1da3c911edd..1c098c507c6 100644 --- a/arch/arm/mach-iop32x/iq80321.c +++ b/arch/arm/mach-iop32x/iq80321.c @@ -23,7 +23,7 @@  #include <linux/serial_8250.h>  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-iop32x/irq.c b/arch/arm/mach-iop32x/irq.c index 55cf0162e8c..2ea1e716296 100644 --- a/arch/arm/mach-iop32x/irq.c +++ b/arch/arm/mach-iop32x/irq.c @@ -16,7 +16,7 @@  #include <linux/list.h>  #include <asm/mach/irq.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  static u32 iop32x_mask; diff --git a/arch/arm/mach-iop32x/n2100.c b/arch/arm/mach-iop32x/n2100.c index 28f164ea472..f38dc19bbcc 100644 --- a/arch/arm/mach-iop32x/n2100.c +++ b/arch/arm/mach-iop32x/n2100.c @@ -30,7 +30,7 @@  #include <linux/i2c.h>  #include <linux/platform_device.h>  #include <linux/reboot.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-iop33x/iq80331.c b/arch/arm/mach-iop33x/iq80331.c index de39fd77857..e736c50ed3d 100644 --- a/arch/arm/mach-iop33x/iq80331.c +++ b/arch/arm/mach-iop33x/iq80331.c @@ -22,7 +22,7 @@  #include <linux/serial_8250.h>  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-iop33x/iq80332.c b/arch/arm/mach-iop33x/iq80332.c index 4904fd78445..75347a23ceb 100644 --- a/arch/arm/mach-iop33x/iq80332.c +++ b/arch/arm/mach-iop33x/iq80332.c @@ -22,7 +22,7 @@  #include <linux/serial_8250.h>  #include <linux/mtd/physmap.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-iop33x/irq.c b/arch/arm/mach-iop33x/irq.c index f09dd054b9c..6ae1fac6c61 100644 --- a/arch/arm/mach-iop33x/irq.c +++ b/arch/arm/mach-iop33x/irq.c @@ -16,7 +16,7 @@  #include <linux/list.h>  #include <asm/mach/irq.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  static u32 iop33x_mask0; diff --git a/arch/arm/mach-iop33x/uart.c b/arch/arm/mach-iop33x/uart.c index ac297cd0276..f11b86fc86c 100644 --- a/arch/arm/mach-iop33x/uart.c +++ b/arch/arm/mach-iop33x/uart.c @@ -24,9 +24,8 @@  #include <asm/setup.h>  #include <asm/system.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/iop3xx.h> -#include <asm/mach-types.h>  #include <asm/mach/arch.h>  #define IOP33X_UART_XTAL 33334000 diff --git a/arch/arm/mach-ixp2000/core.c b/arch/arm/mach-ixp2000/core.c index daf28074134..7e810b3fa55 100644 --- a/arch/arm/mach-ixp2000/core.c +++ b/arch/arm/mach-ixp2000/core.c @@ -29,7 +29,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/system.h>  #include <asm/tlbflush.h> diff --git a/arch/arm/mach-ixp2000/enp2611.c b/arch/arm/mach-ixp2000/enp2611.c index 9c49435d42c..17af9f7bd06 100644 --- a/arch/arm/mach-ixp2000/enp2611.c +++ b/arch/arm/mach-ixp2000/enp2611.c @@ -38,7 +38,7 @@  #include <asm/pgtable.h>  #include <asm/page.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp2000/ixdp2400.c b/arch/arm/mach-ixp2000/ixdp2400.c index ce7c15c7300..5f106876297 100644 --- a/arch/arm/mach-ixp2000/ixdp2400.c +++ b/arch/arm/mach-ixp2000/ixdp2400.c @@ -31,7 +31,7 @@  #include <asm/pgtable.h>  #include <asm/page.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp2000/ixdp2800.c b/arch/arm/mach-ixp2000/ixdp2800.c index 14f09b80ab7..4c0f0ee6340 100644 --- a/arch/arm/mach-ixp2000/ixdp2800.c +++ b/arch/arm/mach-ixp2000/ixdp2800.c @@ -31,7 +31,7 @@  #include <asm/pgtable.h>  #include <asm/page.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp2000/ixdp2x00.c b/arch/arm/mach-ixp2000/ixdp2x00.c index 73c651e83d9..f378baed267 100644 --- a/arch/arm/mach-ixp2000/ixdp2x00.c +++ b/arch/arm/mach-ixp2000/ixdp2x00.c @@ -31,7 +31,7 @@  #include <asm/pgtable.h>  #include <asm/page.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp2000/ixdp2x01.c b/arch/arm/mach-ixp2000/ixdp2x01.c index d3d730d2fc2..739a9e0965c 100644 --- a/arch/arm/mach-ixp2000/ixdp2x01.c +++ b/arch/arm/mach-ixp2000/ixdp2x01.c @@ -36,7 +36,7 @@  #include <asm/pgtable.h>  #include <asm/page.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp2000/pci.c b/arch/arm/mach-ixp2000/pci.c index 03f4cf7f9de..dd0eee2c4cc 100644 --- a/arch/arm/mach-ixp2000/pci.c +++ b/arch/arm/mach-ixp2000/pci.c @@ -28,7 +28,7 @@  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp23xx/core.c b/arch/arm/mach-ixp23xx/core.c index df16a4eac49..bc40cd49462 100644 --- a/arch/arm/mach-ixp23xx/core.c +++ b/arch/arm/mach-ixp23xx/core.c @@ -32,8 +32,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> -#include <asm/mach-types.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/system.h>  #include <asm/tlbflush.h> diff --git a/arch/arm/mach-ixp23xx/espresso.c b/arch/arm/mach-ixp23xx/espresso.c index d3a779a7a35..b6cbefce7c1 100644 --- a/arch/arm/mach-ixp23xx/espresso.c +++ b/arch/arm/mach-ixp23xx/espresso.c @@ -29,7 +29,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/system.h> diff --git a/arch/arm/mach-ixp23xx/ixdp2351.c b/arch/arm/mach-ixp23xx/ixdp2351.c index 5c5d4d66dee..d510160d472 100644 --- a/arch/arm/mach-ixp23xx/ixdp2351.c +++ b/arch/arm/mach-ixp23xx/ixdp2351.c @@ -34,7 +34,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/system.h>  #include <asm/tlbflush.h> diff --git a/arch/arm/mach-ixp23xx/pci.c b/arch/arm/mach-ixp23xx/pci.c index 227f808dc0e..c84cc6b140a 100644 --- a/arch/arm/mach-ixp23xx/pci.c +++ b/arch/arm/mach-ixp23xx/pci.c @@ -31,8 +31,7 @@  #include <asm/sizes.h>  #include <asm/system.h>  #include <asm/mach/pci.h> -#include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  extern int (*external_fault) (unsigned long, struct pt_regs *); diff --git a/arch/arm/mach-ixp23xx/roadrunner.c b/arch/arm/mach-ixp23xx/roadrunner.c index 896ff9f840d..c461520d79c 100644 --- a/arch/arm/mach-ixp23xx/roadrunner.c +++ b/arch/arm/mach-ixp23xx/roadrunner.c @@ -33,7 +33,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/system.h> diff --git a/arch/arm/mach-ixp4xx/avila-pci.c b/arch/arm/mach-ixp4xx/avila-pci.c index c6e044befcc..8d549daba1e 100644 --- a/arch/arm/mach-ixp4xx/avila-pci.c +++ b/arch/arm/mach-ixp4xx/avila-pci.c @@ -25,7 +25,7 @@  #include <asm/mach/pci.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  void __init avila_pci_preinit(void) diff --git a/arch/arm/mach-ixp4xx/avila-setup.c b/arch/arm/mach-ixp4xx/avila-setup.c index e38f45fa58a..87e38ca18a2 100644 --- a/arch/arm/mach-ixp4xx/avila-setup.c +++ b/arch/arm/mach-ixp4xx/avila-setup.c @@ -23,7 +23,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c index 64be341109b..3b32f7014bf 100644 --- a/arch/arm/mach-ixp4xx/common-pci.c +++ b/arch/arm/mach-ixp4xx/common-pci.c @@ -32,7 +32,7 @@  #include <asm/sizes.h>  #include <asm/system.h>  #include <asm/mach/pci.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /* diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index 3947c506b4f..00cede2b7a4 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c @@ -30,7 +30,7 @@  #include <linux/clockchips.h>  #include <asm/arch/udc.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/uaccess.h>  #include <asm/io.h>  #include <asm/pgtable.h> diff --git a/arch/arm/mach-ixp4xx/coyote-pci.c b/arch/arm/mach-ixp4xx/coyote-pci.c index be4f4a208b9..6dd400f55e4 100644 --- a/arch/arm/mach-ixp4xx/coyote-pci.c +++ b/arch/arm/mach-ixp4xx/coyote-pci.c @@ -20,7 +20,7 @@  #include <linux/irq.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp4xx/coyote-setup.c b/arch/arm/mach-ixp4xx/coyote-setup.c index 13f8a7ac3ba..66acd55346c 100644 --- a/arch/arm/mach-ixp4xx/coyote-setup.c +++ b/arch/arm/mach-ixp4xx/coyote-setup.c @@ -19,7 +19,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ixp4xx/gateway7001-pci.c b/arch/arm/mach-ixp4xx/gateway7001-pci.c index afd1dc14e59..07ee00c05ed 100644 --- a/arch/arm/mach-ixp4xx/gateway7001-pci.c +++ b/arch/arm/mach-ixp4xx/gateway7001-pci.c @@ -23,7 +23,7 @@  #include <linux/irq.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp4xx/gateway7001-setup.c b/arch/arm/mach-ixp4xx/gateway7001-setup.c index 37876832e14..80044e8b90b 100644 --- a/arch/arm/mach-ixp4xx/gateway7001-setup.c +++ b/arch/arm/mach-ixp4xx/gateway7001-setup.c @@ -22,7 +22,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ixp4xx/gtwx5715-pci.c b/arch/arm/mach-ixp4xx/gtwx5715-pci.c index 20960704183..241bb5f2f42 100644 --- a/arch/arm/mach-ixp4xx/gtwx5715-pci.c +++ b/arch/arm/mach-ixp4xx/gtwx5715-pci.c @@ -28,7 +28,7 @@  #include <linux/irq.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/gtwx5715.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp4xx/gtwx5715-setup.c b/arch/arm/mach-ixp4xx/gtwx5715-setup.c index dc6725bda3c..ef21bfb3359 100644 --- a/arch/arm/mach-ixp4xx/gtwx5715-setup.c +++ b/arch/arm/mach-ixp4xx/gtwx5715-setup.c @@ -32,7 +32,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ixp4xx/ixdp425-pci.c b/arch/arm/mach-ixp4xx/ixdp425-pci.c index 7d9bb4d2310..9ec957196c7 100644 --- a/arch/arm/mach-ixp4xx/ixdp425-pci.c +++ b/arch/arm/mach-ixp4xx/ixdp425-pci.c @@ -22,7 +22,7 @@  #include <asm/mach/pci.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  void __init ixdp425_pci_preinit(void) diff --git a/arch/arm/mach-ixp4xx/ixdp425-setup.c b/arch/arm/mach-ixp4xx/ixdp425-setup.c index 44584afb34a..8666a428f9b 100644 --- a/arch/arm/mach-ixp4xx/ixdp425-setup.c +++ b/arch/arm/mach-ixp4xx/ixdp425-setup.c @@ -24,7 +24,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-ixp4xx/ixdpg425-pci.c b/arch/arm/mach-ixp4xx/ixdpg425-pci.c index 37d9f2e8f60..fac9e5cdab2 100644 --- a/arch/arm/mach-ixp4xx/ixdpg425-pci.c +++ b/arch/arm/mach-ixp4xx/ixdpg425-pci.c @@ -19,7 +19,7 @@  #include <linux/irq.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp4xx/wg302v2-pci.c b/arch/arm/mach-ixp4xx/wg302v2-pci.c index 0f00feab67f..0fd513af9a4 100644 --- a/arch/arm/mach-ixp4xx/wg302v2-pci.c +++ b/arch/arm/mach-ixp4xx/wg302v2-pci.c @@ -23,7 +23,7 @@  #include <linux/irq.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/pci.h> diff --git a/arch/arm/mach-ixp4xx/wg302v2-setup.c b/arch/arm/mach-ixp4xx/wg302v2-setup.c index f7e09ad804e..c426dcb5b9b 100644 --- a/arch/arm/mach-ixp4xx/wg302v2-setup.c +++ b/arch/arm/mach-ixp4xx/wg302v2-setup.c @@ -23,7 +23,7 @@  #include <asm/types.h>  #include <asm/setup.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-kirkwood/addr-map.c b/arch/arm/mach-kirkwood/addr-map.c index a39f0f3c473..8a7ebe9ad7f 100644 --- a/arch/arm/mach-kirkwood/addr-map.c +++ b/arch/arm/mach-kirkwood/addr-map.c @@ -12,7 +12,7 @@  #include <linux/init.h>  #include <linux/mbus.h>  #include <linux/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "common.h"  /* diff --git a/arch/arm/mach-ks8695/cpu.c b/arch/arm/mach-ks8695/cpu.c index 407d255e42b..97ab618fc35 100644 --- a/arch/arm/mach-ks8695/cpu.c +++ b/arch/arm/mach-ks8695/cpu.c @@ -25,7 +25,7 @@  #include <linux/module.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-ks8695/gpio.c b/arch/arm/mach-ks8695/gpio.c index 5e46191c0af..a1e46436a94 100644 --- a/arch/arm/mach-ks8695/gpio.c +++ b/arch/arm/mach-ks8695/gpio.c @@ -25,7 +25,7 @@  #include <linux/module.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/irq.h>  #include <asm/arch/regs-gpio.h> diff --git a/arch/arm/mach-ks8695/irq.c b/arch/arm/mach-ks8695/irq.c index 0b06941a1ee..0773ae79572 100644 --- a/arch/arm/mach-ks8695/irq.c +++ b/arch/arm/mach-ks8695/irq.c @@ -25,7 +25,7 @@  #include <linux/ioport.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-ks8695/leds.c b/arch/arm/mach-ks8695/leds.c index d61762ae50d..17c5ef13b0d 100644 --- a/arch/arm/mach-ks8695/leds.c +++ b/arch/arm/mach-ks8695/leds.c @@ -12,7 +12,6 @@  #include <linux/module.h>  #include <linux/init.h> -#include <asm/mach-types.h>  #include <asm/leds.h>  #include <asm/arch/devices.h>  #include <asm/arch/gpio.h> diff --git a/arch/arm/mach-ks8695/pci.c b/arch/arm/mach-ks8695/pci.c index 3f4e0330cb1..c0c2d590159 100644 --- a/arch/arm/mach-ks8695/pci.c +++ b/arch/arm/mach-ks8695/pci.c @@ -31,7 +31,7 @@  #include <asm/io.h>  #include <asm/signal.h>  #include <asm/mach/pci.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/devices.h>  #include <asm/arch/regs-pci.h> diff --git a/arch/arm/mach-l7200/core.c b/arch/arm/mach-l7200/core.c index 561a0fe7095..8cec912fd03 100644 --- a/arch/arm/mach-l7200/core.c +++ b/arch/arm/mach-l7200/core.c @@ -13,7 +13,7 @@  #include <asm/types.h>  #include <asm/irq.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/page.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-lh7a40x/arch-kev7a400.c b/arch/arm/mach-lh7a40x/arch-kev7a400.c index 2ef7d0097b3..c794ca7a5f2 100644 --- a/arch/arm/mach-lh7a40x/arch-kev7a400.c +++ b/arch/arm/mach-lh7a40x/arch-kev7a400.c @@ -13,7 +13,7 @@  #include <linux/device.h>  #include <linux/interrupt.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-lh7a40x/arch-lpd7a40x.c b/arch/arm/mach-lh7a40x/arch-lpd7a40x.c index fe64946f9e1..ff3109a00c2 100644 --- a/arch/arm/mach-lh7a40x/arch-lpd7a40x.c +++ b/arch/arm/mach-lh7a40x/arch-lpd7a40x.c @@ -14,7 +14,7 @@  #include <linux/interrupt.h>  #include <linux/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-lh7a40x/clcd.c b/arch/arm/mach-lh7a40x/clcd.c index 1992db4c252..395ad9b83c4 100644 --- a/arch/arm/mach-lh7a40x/clcd.c +++ b/arch/arm/mach-lh7a40x/clcd.c @@ -17,14 +17,13 @@  //#include <linux/module.h>  //#include <linux/time.h> -//#include <asm/hardware.h>  //#include <asm/mach/time.h>  #include <asm/irq.h>  #include <asm/mach/irq.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <linux/amba/bus.h>  #include <linux/amba/clcd.h> diff --git a/arch/arm/mach-lh7a40x/clocks.c b/arch/arm/mach-lh7a40x/clocks.c index 7530a95c15a..9fe7f3a4894 100644 --- a/arch/arm/mach-lh7a40x/clocks.c +++ b/arch/arm/mach-lh7a40x/clocks.c @@ -9,7 +9,7 @@   */  #include <linux/cpufreq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/clocks.h>  #include <linux/err.h> diff --git a/arch/arm/mach-lh7a40x/irq-lh7a400.c b/arch/arm/mach-lh7a40x/irq-lh7a400.c index 9472bbebd8a..0e5a805036d 100644 --- a/arch/arm/mach-lh7a40x/irq-lh7a400.c +++ b/arch/arm/mach-lh7a40x/irq-lh7a400.c @@ -12,7 +12,7 @@  #include <linux/module.h>  #include <linux/interrupt.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/irq.h>  #include <asm/arch/irqs.h> diff --git a/arch/arm/mach-lh7a40x/irq-lh7a404.c b/arch/arm/mach-lh7a40x/irq-lh7a404.c index 9b28389035e..f3293bfac8c 100644 --- a/arch/arm/mach-lh7a40x/irq-lh7a404.c +++ b/arch/arm/mach-lh7a40x/irq-lh7a404.c @@ -12,7 +12,7 @@  #include <linux/module.h>  #include <linux/interrupt.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/irq.h>  #include <asm/arch/irqs.h> diff --git a/arch/arm/mach-lh7a40x/irq-lpd7a40x.c b/arch/arm/mach-lh7a40x/irq-lpd7a40x.c index 66e1ed3961e..41bf9f817b9 100644 --- a/arch/arm/mach-lh7a40x/irq-lpd7a40x.c +++ b/arch/arm/mach-lh7a40x/irq-lpd7a40x.c @@ -13,7 +13,7 @@  #include <linux/module.h>  #include <linux/interrupt.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/irq.h>  #include <asm/arch/irqs.h> diff --git a/arch/arm/mach-lh7a40x/ssp-cpld.c b/arch/arm/mach-lh7a40x/ssp-cpld.c index a10830186da..4cd31bb8a8b 100644 --- a/arch/arm/mach-lh7a40x/ssp-cpld.c +++ b/arch/arm/mach-lh7a40x/ssp-cpld.c @@ -46,7 +46,7 @@  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/ssp.h> diff --git a/arch/arm/mach-lh7a40x/time.c b/arch/arm/mach-lh7a40x/time.c index e50e60b3385..1c7e469e352 100644 --- a/arch/arm/mach-lh7a40x/time.c +++ b/arch/arm/mach-lh7a40x/time.c @@ -14,7 +14,7 @@  #include <linux/irq.h>  #include <linux/time.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/leds.h> diff --git a/arch/arm/mach-loki/addr-map.c b/arch/arm/mach-loki/addr-map.c index ba25e56ade5..3b6319d4c1c 100644 --- a/arch/arm/mach-loki/addr-map.c +++ b/arch/arm/mach-loki/addr-map.c @@ -11,7 +11,7 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/mbus.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include "common.h" diff --git a/arch/arm/mach-msm/board-halibut.c b/arch/arm/mach-msm/board-halibut.c index 86dfb2b5261..46460218a20 100644 --- a/arch/arm/mach-msm/board-halibut.c +++ b/arch/arm/mach-msm/board-halibut.c @@ -19,7 +19,7 @@  #include <linux/platform_device.h>  #include <linux/input.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-msm/io.c b/arch/arm/mach-msm/io.c index c39edb994a8..eca4283bbcb 100644 --- a/arch/arm/mach-msm/io.c +++ b/arch/arm/mach-msm/io.c @@ -19,7 +19,7 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/page.h>  #include <asm/arch/msm_iomap.h> diff --git a/arch/arm/mach-msm/irq.c b/arch/arm/mach-msm/irq.c index 24158040b78..0535b39261f 100644 --- a/arch/arm/mach-msm/irq.c +++ b/arch/arm/mach-msm/irq.c @@ -21,7 +21,7 @@  #include <linux/timer.h>  #include <linux/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h> diff --git a/arch/arm/mach-mx2/clock_imx27.c b/arch/arm/mach-mx2/clock_imx27.c index 0a29ef29c73..4af6f4f06e8 100644 --- a/arch/arm/mach-mx2/clock_imx27.c +++ b/arch/arm/mach-mx2/clock_imx27.c @@ -25,7 +25,6 @@  #include <asm/arch/clock.h>  #include <asm/arch/common.h>  #include <asm/div64.h> -#include <asm/mach-types.h>  #include "crm_regs.h" diff --git a/arch/arm/mach-mx2/cpu_imx27.c b/arch/arm/mach-mx2/cpu_imx27.c index d6b5c2e3377..33f81f2b086 100644 --- a/arch/arm/mach-mx2/cpu_imx27.c +++ b/arch/arm/mach-mx2/cpu_imx27.c @@ -24,7 +24,7 @@  #include <linux/io.h>  #include <linux/module.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "crm_regs.h" diff --git a/arch/arm/mach-mx2/devices.c b/arch/arm/mach-mx2/devices.c index a1f44c3c531..b5d2b63ea0d 100644 --- a/arch/arm/mach-mx2/devices.c +++ b/arch/arm/mach-mx2/devices.c @@ -32,7 +32,7 @@  #include <linux/platform_device.h>  #include <linux/gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * Resource definition for the MXC IrDA diff --git a/arch/arm/mach-mx2/generic.c b/arch/arm/mach-mx2/generic.c index 07875cf00de..4de97e18778 100644 --- a/arch/arm/mach-mx2/generic.c +++ b/arch/arm/mach-mx2/generic.c @@ -20,7 +20,7 @@  #include <linux/mm.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/pgtable.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-mx2/mx27ads.c b/arch/arm/mach-mx2/mx27ads.c index a9ff01fff13..64c7bf67c40 100644 --- a/arch/arm/mach-mx2/mx27ads.c +++ b/arch/arm/mach-mx2/mx27ads.c @@ -24,7 +24,7 @@  #include <linux/mtd/partitions.h>  #include <linux/mtd/physmap.h>  #include <asm/arch/common.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> diff --git a/arch/arm/mach-mx2/pcm038.c b/arch/arm/mach-mx2/pcm038.c index a9a28f58e71..ebe97260576 100644 --- a/arch/arm/mach-mx2/pcm038.c +++ b/arch/arm/mach-mx2/pcm038.c @@ -22,7 +22,7 @@  #include <asm/mach/arch.h>  #include <asm/mach-types.h>  #include <asm/arch/common.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/iomux-mx1-mx2.h>  #include <asm/mach/time.h>  #include <asm/arch/imx-uart.h> diff --git a/arch/arm/mach-mx2/pcm970-baseboard.c b/arch/arm/mach-mx2/pcm970-baseboard.c index 028ac4d3368..165d54acebe 100644 --- a/arch/arm/mach-mx2/pcm970-baseboard.c +++ b/arch/arm/mach-mx2/pcm970-baseboard.c @@ -17,8 +17,7 @@   */  #include <linux/platform_device.h> -#include <asm/hardware.h> -#include <asm/mach-types.h> +#include <asm/arch/hardware.h>  #include <asm/mach/arch.h>  /* diff --git a/arch/arm/mach-mx2/serial.c b/arch/arm/mach-mx2/serial.c index 570c02b8e5d..58dda232bb6 100644 --- a/arch/arm/mach-mx2/serial.c +++ b/arch/arm/mach-mx2/serial.c @@ -20,7 +20,7 @@  #include <linux/module.h>  #include <linux/platform_device.h>  #include <linux/serial.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/imx-uart.h>  static struct resource uart0[] = { diff --git a/arch/arm/mach-mx3/devices.c b/arch/arm/mach-mx3/devices.c index 5c0320fce5b..cdd0ff95e88 100644 --- a/arch/arm/mach-mx3/devices.c +++ b/arch/arm/mach-mx3/devices.c @@ -21,7 +21,7 @@  #include <linux/platform_device.h>  #include <linux/serial.h>  #include <linux/gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/imx-uart.h>  static struct resource uart0[] = { diff --git a/arch/arm/mach-mx3/iomux.c b/arch/arm/mach-mx3/iomux.c index adc51feefc1..e189a5f9aba 100644 --- a/arch/arm/mach-mx3/iomux.c +++ b/arch/arm/mach-mx3/iomux.c @@ -21,7 +21,7 @@  #include <linux/spinlock.h>  #include <linux/io.h>  #include <linux/gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/gpio.h>  #include <asm/arch/iomux-mx3.h> diff --git a/arch/arm/mach-mx3/mm.c b/arch/arm/mach-mx3/mm.c index 41dad485ded..881b3569af5 100644 --- a/arch/arm/mach-mx3/mm.c +++ b/arch/arm/mach-mx3/mm.c @@ -22,7 +22,7 @@  #include <linux/mm.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/pgtable.h>  #include <asm/mach/map.h>  #include <asm/arch/common.h> diff --git a/arch/arm/mach-mx3/mx31ads.c b/arch/arm/mach-mx3/mx31ads.c index eba3e0cd428..63df8b0c480 100644 --- a/arch/arm/mach-mx3/mx31ads.c +++ b/arch/arm/mach-mx3/mx31ads.c @@ -23,7 +23,7 @@  #include <linux/clk.h>  #include <linux/serial_8250.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> diff --git a/arch/arm/mach-mx3/mx31lite.c b/arch/arm/mach-mx3/mx31lite.c index 1372c1a1fc3..03384a73f57 100644 --- a/arch/arm/mach-mx3/mx31lite.c +++ b/arch/arm/mach-mx3/mx31lite.c @@ -23,7 +23,7 @@  #include <linux/kernel.h>  #include <linux/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> diff --git a/arch/arm/mach-mx3/pcm037.c b/arch/arm/mach-mx3/pcm037.c index a34ae6de266..1bb4eadf1ec 100644 --- a/arch/arm/mach-mx3/pcm037.c +++ b/arch/arm/mach-mx3/pcm037.c @@ -23,7 +23,7 @@  #include <linux/mtd/physmap.h>  #include <linux/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> diff --git a/arch/arm/mach-netx/fb.c b/arch/arm/mach-netx/fb.c index ef0ab6115c0..e169b683e4d 100644 --- a/arch/arm/mach-netx/fb.c +++ b/arch/arm/mach-netx/fb.c @@ -24,7 +24,7 @@  #include <linux/amba/clcd.h>  #include <asm/arch/netx-regs.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  struct clk {}; diff --git a/arch/arm/mach-netx/generic.c b/arch/arm/mach-netx/generic.c index 99d4fb19a08..798ac6e120f 100644 --- a/arch/arm/mach-netx/generic.c +++ b/arch/arm/mach-netx/generic.c @@ -22,7 +22,7 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/map.h>  #include <asm/hardware/vic.h>  #include <asm/io.h> diff --git a/arch/arm/mach-netx/nxdb500.c b/arch/arm/mach-netx/nxdb500.c index e4a133d6284..0cb19450499 100644 --- a/arch/arm/mach-netx/nxdb500.c +++ b/arch/arm/mach-netx/nxdb500.c @@ -25,7 +25,7 @@  #include <linux/amba/bus.h>  #include <linux/amba/clcd.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/arch/netx-regs.h> diff --git a/arch/arm/mach-netx/nxdkn.c b/arch/arm/mach-netx/nxdkn.c index 7e26c42d1ac..848b2f172dd 100644 --- a/arch/arm/mach-netx/nxdkn.c +++ b/arch/arm/mach-netx/nxdkn.c @@ -25,7 +25,7 @@  #include <linux/amba/bus.h>  #include <linux/amba/clcd.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/arch/netx-regs.h> diff --git a/arch/arm/mach-netx/nxeb500hmi.c b/arch/arm/mach-netx/nxeb500hmi.c index 53e10a9849f..cb361eadba5 100644 --- a/arch/arm/mach-netx/nxeb500hmi.c +++ b/arch/arm/mach-netx/nxeb500hmi.c @@ -25,7 +25,7 @@  #include <linux/amba/bus.h>  #include <linux/amba/clcd.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/arch/netx-regs.h> diff --git a/arch/arm/mach-netx/pfifo.c b/arch/arm/mach-netx/pfifo.c index 44dea61a9de..d0e6b43ff3a 100644 --- a/arch/arm/mach-netx/pfifo.c +++ b/arch/arm/mach-netx/pfifo.c @@ -22,7 +22,7 @@  #include <linux/mutex.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/netx-regs.h>  #include <asm/arch/pfifo.h> diff --git a/arch/arm/mach-netx/time.c b/arch/arm/mach-netx/time.c index ea07b54afa5..2c93fd3d03e 100644 --- a/arch/arm/mach-netx/time.c +++ b/arch/arm/mach-netx/time.c @@ -22,7 +22,7 @@  #include <linux/irq.h>  #include <linux/clocksource.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach/time.h>  #include <asm/arch/netx-regs.h> diff --git a/arch/arm/mach-netx/xc.c b/arch/arm/mach-netx/xc.c index ca9c5b61283..0ea4d3baf7b 100644 --- a/arch/arm/mach-netx/xc.c +++ b/arch/arm/mach-netx/xc.c @@ -23,7 +23,7 @@  #include <linux/mutex.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/netx-regs.h>  #include <asm/arch/xc.h> diff --git a/arch/arm/mach-ns9xxx/board-a9m9750dev.c b/arch/arm/mach-ns9xxx/board-a9m9750dev.c index a494b71c019..46b4f5a2e7f 100644 --- a/arch/arm/mach-ns9xxx/board-a9m9750dev.c +++ b/arch/arm/mach-ns9xxx/board-a9m9750dev.c @@ -13,12 +13,12 @@  #include <asm/mach/map.h>  #include <asm/gpio.h> -#include <asm/arch-ns9xxx/board.h> -#include <asm/arch-ns9xxx/processor-ns9360.h> -#include <asm/arch-ns9xxx/regs-sys-ns9360.h> -#include <asm/arch-ns9xxx/regs-mem.h> -#include <asm/arch-ns9xxx/regs-bbu.h> -#include <asm/arch-ns9xxx/regs-board-a9m9750dev.h> +#include <asm/arch/board.h> +#include <asm/arch/processor-ns9360.h> +#include <asm/arch/regs-sys-ns9360.h> +#include <asm/arch/regs-mem.h> +#include <asm/arch/regs-bbu.h> +#include <asm/arch/regs-board-a9m9750dev.h>  #include "board-a9m9750dev.h" diff --git a/arch/arm/mach-ns9xxx/gpio-ns9360.c b/arch/arm/mach-ns9xxx/gpio-ns9360.c index cabfb879dda..7bc05a4b45b 100644 --- a/arch/arm/mach-ns9xxx/gpio-ns9360.c +++ b/arch/arm/mach-ns9xxx/gpio-ns9360.c @@ -14,8 +14,8 @@  #include <linux/kernel.h>  #include <linux/module.h> -#include <asm/arch-ns9xxx/regs-bbu.h> -#include <asm/arch-ns9xxx/processor-ns9360.h> +#include <asm/arch/regs-bbu.h> +#include <asm/arch/processor-ns9360.h>  #include "gpio-ns9360.h" diff --git a/arch/arm/mach-ns9xxx/gpio.c b/arch/arm/mach-ns9xxx/gpio.c index b3c963b0c8f..ed4c83389d4 100644 --- a/arch/arm/mach-ns9xxx/gpio.c +++ b/arch/arm/mach-ns9xxx/gpio.c @@ -13,9 +13,9 @@  #include <linux/spinlock.h>  #include <linux/module.h> -#include <asm/arch-ns9xxx/gpio.h> -#include <asm/arch-ns9xxx/processor.h> -#include <asm/arch-ns9xxx/processor-ns9360.h> +#include <asm/arch/gpio.h> +#include <asm/arch/processor.h> +#include <asm/arch/processor-ns9360.h>  #include <asm/bug.h>  #include <asm/types.h>  #include <asm/bitops.h> diff --git a/arch/arm/mach-ns9xxx/irq.c b/arch/arm/mach-ns9xxx/irq.c index ca85d24cf39..96de8ebed41 100644 --- a/arch/arm/mach-ns9xxx/irq.c +++ b/arch/arm/mach-ns9xxx/irq.c @@ -12,10 +12,9 @@  #include <linux/kernel_stat.h>  #include <asm/io.h>  #include <asm/mach/irq.h> -#include <asm/mach-types.h> -#include <asm/arch-ns9xxx/regs-sys-common.h> -#include <asm/arch-ns9xxx/irqs.h> -#include <asm/arch-ns9xxx/board.h> +#include <asm/arch/regs-sys-common.h> +#include <asm/arch/irqs.h> +#include <asm/arch/board.h>  #include "generic.h" diff --git a/arch/arm/mach-ns9xxx/mach-cc9p9360dev.c b/arch/arm/mach-ns9xxx/mach-cc9p9360dev.c index 9623fff6b3b..7714233fb00 100644 --- a/arch/arm/mach-ns9xxx/mach-cc9p9360dev.c +++ b/arch/arm/mach-ns9xxx/mach-cc9p9360dev.c @@ -11,7 +11,7 @@  #include <asm/mach/arch.h>  #include <asm/mach-types.h> -#include <asm/arch-ns9xxx/processor-ns9360.h> +#include <asm/arch/processor-ns9360.h>  #include "board-a9m9750dev.h"  #include "generic.h" diff --git a/arch/arm/mach-ns9xxx/mach-cc9p9360js.c b/arch/arm/mach-ns9xxx/mach-cc9p9360js.c index fcc815bdd29..bdbd0bb1a0b 100644 --- a/arch/arm/mach-ns9xxx/mach-cc9p9360js.c +++ b/arch/arm/mach-ns9xxx/mach-cc9p9360js.c @@ -11,7 +11,7 @@  #include <asm/mach/arch.h>  #include <asm/mach-types.h> -#include <asm/arch-ns9xxx/processor-ns9360.h> +#include <asm/arch/processor-ns9360.h>  #include "board-jscc9p9360.h"  #include "generic.h" diff --git a/arch/arm/mach-ns9xxx/plat-serial8250.c b/arch/arm/mach-ns9xxx/plat-serial8250.c index 5aa5d9baf8c..c9cce9b4e6c 100644 --- a/arch/arm/mach-ns9xxx/plat-serial8250.c +++ b/arch/arm/mach-ns9xxx/plat-serial8250.c @@ -11,8 +11,8 @@  #include <linux/platform_device.h>  #include <linux/serial_8250.h> -#include <asm/arch-ns9xxx/regs-board-a9m9750dev.h> -#include <asm/arch-ns9xxx/board.h> +#include <asm/arch/regs-board-a9m9750dev.h> +#include <asm/arch/board.h>  #define DRIVER_NAME "serial8250" diff --git a/arch/arm/mach-ns9xxx/processor-ns9360.c b/arch/arm/mach-ns9xxx/processor-ns9360.c index 2bee0b7fccb..8ee81b59b35 100644 --- a/arch/arm/mach-ns9xxx/processor-ns9360.c +++ b/arch/arm/mach-ns9xxx/processor-ns9360.c @@ -14,8 +14,8 @@  #include <asm/page.h>  #include <asm/mach/map.h> -#include <asm/arch-ns9xxx/processor-ns9360.h> -#include <asm/arch-ns9xxx/regs-sys-ns9360.h> +#include <asm/arch/processor-ns9360.h> +#include <asm/arch/regs-sys-ns9360.h>  void ns9360_reset(char mode)  { diff --git a/arch/arm/mach-ns9xxx/time-ns9360.c b/arch/arm/mach-ns9xxx/time-ns9360.c index 4d573c9793e..66bd5826297 100644 --- a/arch/arm/mach-ns9xxx/time-ns9360.c +++ b/arch/arm/mach-ns9xxx/time-ns9360.c @@ -15,9 +15,9 @@  #include <linux/clocksource.h>  #include <linux/clockchips.h> -#include <asm/arch-ns9xxx/processor-ns9360.h> -#include <asm/arch-ns9xxx/regs-sys-ns9360.h> -#include <asm/arch-ns9xxx/irqs.h> +#include <asm/arch/processor-ns9360.h> +#include <asm/arch/regs-sys-ns9360.h> +#include <asm/arch/irqs.h>  #include <asm/arch/system.h>  #include "generic.h" diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index 8b102ad59c1..46488c27665 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c @@ -17,7 +17,7 @@  #include <linux/input.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-omap1/board-fsample.c b/arch/arm/mach-omap1/board-fsample.c index 1bdb66638e2..8583e80a3ca 100644 --- a/arch/arm/mach-omap1/board-fsample.c +++ b/arch/arm/mach-omap1/board-fsample.c @@ -20,7 +20,7 @@  #include <linux/mtd/partitions.h>  #include <linux/input.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/flash.h> diff --git a/arch/arm/mach-omap1/board-generic.c b/arch/arm/mach-omap1/board-generic.c index c711bf23f7b..d9026624313 100644 --- a/arch/arm/mach-omap1/board-generic.c +++ b/arch/arm/mach-omap1/board-generic.c @@ -17,7 +17,7 @@  #include <linux/init.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c index 4b444fdaafe..f69e3b5ad54 100644 --- a/arch/arm/mach-omap1/board-h2.c +++ b/arch/arm/mach-omap1/board-h2.c @@ -29,7 +29,7 @@  #include <linux/input.h>  #include <linux/i2c/tps65010.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/gpio.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c index 7fbaa8d648c..1ae3826e27c 100644 --- a/arch/arm/mach-omap1/board-h3.c +++ b/arch/arm/mach-omap1/board-h3.c @@ -31,7 +31,7 @@  #include <asm/setup.h>  #include <asm/page.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/gpio.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c index 4b8ae3ee0d0..667c7204f82 100644 --- a/arch/arm/mach-omap1/board-innovator.c +++ b/arch/arm/mach-omap1/board-innovator.c @@ -24,7 +24,7 @@  #include <linux/mtd/partitions.h>  #include <linux/input.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/flash.h> diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c index 3f39e0e79c9..2826214d351 100644 --- a/arch/arm/mach-omap1/board-nokia770.c +++ b/arch/arm/mach-omap1/board-nokia770.c @@ -20,7 +20,7 @@  #include <linux/workqueue.h>  #include <linux/delay.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c index 41f94f6fc15..4d8cd9fcb69 100644 --- a/arch/arm/mach-omap1/board-osk.c +++ b/arch/arm/mach-omap1/board-osk.c @@ -39,7 +39,7 @@  #include <linux/i2c/tps65010.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/gpio.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c index a4d20127a60..6855255f5c6 100644 --- a/arch/arm/mach-omap1/board-palmte.c +++ b/arch/arm/mach-omap1/board-palmte.c @@ -27,7 +27,7 @@  #include <linux/interrupt.h>  #include <linux/apm-emulation.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-omap1/board-palmtt.c b/arch/arm/mach-omap1/board-palmtt.c index 2a033689f9f..96896f83b5f 100644 --- a/arch/arm/mach-omap1/board-palmtt.c +++ b/arch/arm/mach-omap1/board-palmtt.c @@ -23,7 +23,7 @@  #include <linux/mtd/partitions.h>  #include <linux/leds.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-omap1/board-palmz71.c b/arch/arm/mach-omap1/board-palmz71.c index 34389b63b0e..b8ccdb20500 100644 --- a/arch/arm/mach-omap1/board-palmz71.c +++ b/arch/arm/mach-omap1/board-palmz71.c @@ -26,7 +26,7 @@  #include <linux/mtd/mtd.h>  #include <linux/mtd/partitions.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c index 94bc0745ab2..9857fc9e156 100644 --- a/arch/arm/mach-omap1/board-perseus2.c +++ b/arch/arm/mach-omap1/board-perseus2.c @@ -20,7 +20,7 @@  #include <linux/mtd/partitions.h>  #include <linux/input.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/flash.h> diff --git a/arch/arm/mach-omap1/board-sx1.c b/arch/arm/mach-omap1/board-sx1.c index e473fa6d4a5..0c2c42b2ec6 100644 --- a/arch/arm/mach-omap1/board-sx1.c +++ b/arch/arm/mach-omap1/board-sx1.c @@ -26,7 +26,7 @@  #include <linux/i2c.h>  #include <linux/errno.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/flash.h> diff --git a/arch/arm/mach-omap1/board-voiceblue.c b/arch/arm/mach-omap1/board-voiceblue.c index 8948d45a276..902b12ed8c1 100644 --- a/arch/arm/mach-omap1/board-voiceblue.c +++ b/arch/arm/mach-omap1/board-voiceblue.c @@ -22,7 +22,7 @@  #include <linux/serial_8250.h>  #include <linux/serial_reg.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/flash.h> diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c index da8a3ac47e1..9ad8f927ef1 100644 --- a/arch/arm/mach-omap1/devices.c +++ b/arch/arm/mach-omap1/devices.c @@ -14,9 +14,8 @@  #include <linux/init.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h> -#include <asm/mach-types.h>  #include <asm/mach/map.h>  #include <asm/arch/tc.h> diff --git a/arch/arm/mach-omap1/fpga.c b/arch/arm/mach-omap1/fpga.c index d963125ed75..b9649c75836 100644 --- a/arch/arm/mach-omap1/fpga.c +++ b/arch/arm/mach-omap1/fpga.c @@ -22,7 +22,7 @@  #include <linux/device.h>  #include <linux/errno.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach/irq.h> diff --git a/arch/arm/mach-omap1/irq.c b/arch/arm/mach-omap1/irq.c index 1da9d59a034..061f073265f 100644 --- a/arch/arm/mach-omap1/irq.c +++ b/arch/arm/mach-omap1/irq.c @@ -41,7 +41,7 @@  #include <linux/sched.h>  #include <linux/interrupt.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/irq.h>  #include <asm/arch/gpio.h> diff --git a/arch/arm/mach-omap1/leds-h2p2-debug.c b/arch/arm/mach-omap1/leds-h2p2-debug.c index 8976fbb21f7..c9e894a66e2 100644 --- a/arch/arm/mach-omap1/leds-h2p2-debug.c +++ b/arch/arm/mach-omap1/leds-h2p2-debug.c @@ -14,7 +14,7 @@  #include <linux/sched.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-omap1/leds-innovator.c b/arch/arm/mach-omap1/leds-innovator.c index e7835d6f53a..82eacb005e2 100644 --- a/arch/arm/mach-omap1/leds-innovator.c +++ b/arch/arm/mach-omap1/leds-innovator.c @@ -3,7 +3,7 @@   */  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h> diff --git a/arch/arm/mach-omap1/leds-osk.c b/arch/arm/mach-omap1/leds-osk.c index 754383dde80..1cd94e0c9b3 100644 --- a/arch/arm/mach-omap1/leds-osk.c +++ b/arch/arm/mach-omap1/leds-osk.c @@ -5,7 +5,7 @@   */  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h> diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c index 742f79e73bd..bb06de92dae 100644 --- a/arch/arm/mach-omap1/pm.c +++ b/arch/arm/mach-omap1/pm.c @@ -47,7 +47,6 @@  #include <asm/atomic.h>  #include <asm/mach/time.h>  #include <asm/mach/irq.h> -#include <asm/mach-types.h>  #include <asm/arch/cpu.h>  #include <asm/arch/irqs.h> diff --git a/arch/arm/mach-omap1/sram.S b/arch/arm/mach-omap1/sram.S index 126d252062d..776c89c7c5a 100644 --- a/arch/arm/mach-omap1/sram.S +++ b/arch/arm/mach-omap1/sram.S @@ -11,7 +11,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h>  #include <asm/arch/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  	.text diff --git a/arch/arm/mach-omap1/time.c b/arch/arm/mach-omap1/time.c index 5d2b270935a..ae8910381e3 100644 --- a/arch/arm/mach-omap1/time.c +++ b/arch/arm/mach-omap1/time.c @@ -45,7 +45,7 @@  #include <linux/clockchips.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/leds.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-omap1/timer32k.c b/arch/arm/mach-omap1/timer32k.c index fbbdb806c95..f358fe9548f 100644 --- a/arch/arm/mach-omap1/timer32k.c +++ b/arch/arm/mach-omap1/timer32k.c @@ -46,7 +46,7 @@  #include <linux/clockchips.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/leds.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index 1682eb77c46..8911f8e675c 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c @@ -22,7 +22,7 @@  #include <linux/err.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c index 870b34972d3..170c9681d09 100644 --- a/arch/arm/mach-omap2/board-apollon.c +++ b/arch/arm/mach-omap2/board-apollon.c @@ -29,7 +29,7 @@  #include <linux/err.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/flash.h> diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index df8be081e15..68ec3a32387 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c @@ -20,7 +20,7 @@  #include <linux/init.h>  #include <linux/device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index 0d28f6897c8..a32b475dc09 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c @@ -22,7 +22,7 @@  #include <linux/err.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index b603bc5f8e5..a6acdcdbb63 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -14,7 +14,7 @@  #include <linux/init.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach-types.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-omap2/irq.c b/arch/arm/mach-omap2/irq.c index f064f725e72..6d4c4bf82ad 100644 --- a/arch/arm/mach-omap2/irq.c +++ b/arch/arm/mach-omap2/irq.c @@ -13,7 +13,7 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/interrupt.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/irq.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index d6c9de82ca0..5e6e595d8ef 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c @@ -30,7 +30,6 @@  #include <asm/atomic.h>  #include <asm/mach/time.h>  #include <asm/mach/irq.h> -#include <asm/mach-types.h>  #include <asm/arch/irqs.h>  #include <asm/arch/clock.h> diff --git a/arch/arm/mach-omap2/sram242x.S b/arch/arm/mach-omap2/sram242x.S index 4c274510f3e..229a9284ed9 100644 --- a/arch/arm/mach-omap2/sram242x.S +++ b/arch/arm/mach-omap2/sram242x.S @@ -25,7 +25,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h>  #include <asm/arch/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "prm.h"  #include "cm.h" diff --git a/arch/arm/mach-omap2/sram243x.S b/arch/arm/mach-omap2/sram243x.S index a3fa48dc08c..1665ebb9d7c 100644 --- a/arch/arm/mach-omap2/sram243x.S +++ b/arch/arm/mach-omap2/sram243x.S @@ -25,7 +25,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h>  #include <asm/arch/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "prm.h"  #include "cm.h" diff --git a/arch/arm/mach-orion5x/addr-map.c b/arch/arm/mach-orion5x/addr-map.c index 6f0dbda6c44..9a3cc006836 100644 --- a/arch/arm/mach-orion5x/addr-map.c +++ b/arch/arm/mach-orion5x/addr-map.c @@ -13,7 +13,7 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/mbus.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include "common.h" diff --git a/arch/arm/mach-orion5x/mpp.c b/arch/arm/mach-orion5x/mpp.c index a48cadb0159..8eadc9b5b0a 100644 --- a/arch/arm/mach-orion5x/mpp.c +++ b/arch/arm/mach-orion5x/mpp.c @@ -11,7 +11,7 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/mbus.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include "common.h"  #include "mpp.h" diff --git a/arch/arm/mach-pnx4008/clock.c b/arch/arm/mach-pnx4008/clock.c index a5268c3ac5a..576e9a4d21e 100644 --- a/arch/arm/mach-pnx4008/clock.c +++ b/arch/arm/mach-pnx4008/clock.c @@ -21,7 +21,7 @@  #include <linux/err.h>  #include <linux/delay.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/clock.h> diff --git a/arch/arm/mach-pnx4008/core.c b/arch/arm/mach-pnx4008/core.c index 429c796938b..156d8faa356 100644 --- a/arch/arm/mach-pnx4008/core.c +++ b/arch/arm/mach-pnx4008/core.c @@ -26,7 +26,7 @@  #include <linux/device.h>  #include <linux/spi/spi.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/setup.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-pnx4008/dma.c b/arch/arm/mach-pnx4008/dma.c index fe152e82590..fee0d252854 100644 --- a/arch/arm/mach-pnx4008/dma.c +++ b/arch/arm/mach-pnx4008/dma.c @@ -23,7 +23,7 @@  #include <linux/clk.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/dma.h>  #include <asm/dma-mapping.h>  #include <asm/io.h> diff --git a/arch/arm/mach-pnx4008/irq.c b/arch/arm/mach-pnx4008/irq.c index 5ed67e1947a..7eba2929a13 100644 --- a/arch/arm/mach-pnx4008/irq.c +++ b/arch/arm/mach-pnx4008/irq.c @@ -23,10 +23,9 @@  #include <linux/ioport.h>  #include <linux/device.h>  #include <linux/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/setup.h> -#include <asm/mach-types.h>  #include <asm/pgtable.h>  #include <asm/page.h>  #include <asm/system.h> diff --git a/arch/arm/mach-pnx4008/pm.c b/arch/arm/mach-pnx4008/pm.c index 40116d25434..52c51f91ed8 100644 --- a/arch/arm/mach-pnx4008/pm.c +++ b/arch/arm/mach-pnx4008/pm.c @@ -20,7 +20,6 @@  #include <linux/clk.h>  #include <asm/io.h> -#include <asm/mach-types.h>  #include <asm/cacheflush.h>  #include <asm/arch/pm.h>  #include <asm/arch/clock.h> diff --git a/arch/arm/mach-pnx4008/serial.c b/arch/arm/mach-pnx4008/serial.c index 95a1b3f964a..a95bd19e00c 100644 --- a/arch/arm/mach-pnx4008/serial.c +++ b/arch/arm/mach-pnx4008/serial.c @@ -16,7 +16,7 @@  #include <asm/io.h>  #include <asm/arch/platform.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <linux/serial_core.h>  #include <linux/serial_reg.h> diff --git a/arch/arm/mach-pnx4008/sleep.S b/arch/arm/mach-pnx4008/sleep.S index fea1e17a365..fe6bdcdda4f 100644 --- a/arch/arm/mach-pnx4008/sleep.S +++ b/arch/arm/mach-pnx4008/sleep.S @@ -13,7 +13,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define PWRMAN_VA_BASE IO_ADDRESS(PNX4008_PWRMAN_BASE)  #define PWR_CTRL_REG_OFFS 0x44 diff --git a/arch/arm/mach-pnx4008/time.c b/arch/arm/mach-pnx4008/time.c index 6d4ca8fc0cb..616cb3e9605 100644 --- a/arch/arm/mach-pnx4008/time.c +++ b/arch/arm/mach-pnx4008/time.c @@ -24,7 +24,7 @@  #include <linux/irq.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/leds.h>  #include <asm/mach/time.h> diff --git a/arch/arm/mach-pxa/clock.c b/arch/arm/mach-pxa/clock.c index 630063ffa6f..d858f9864bf 100644 --- a/arch/arm/mach-pxa/clock.c +++ b/arch/arm/mach-pxa/clock.c @@ -14,7 +14,7 @@  #include <asm/arch/pxa2xx-regs.h>  #include <asm/arch/pxa2xx-gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "devices.h"  #include "generic.h" diff --git a/arch/arm/mach-pxa/colibri.c b/arch/arm/mach-pxa/colibri.c index 574839d7c13..c0c81b7a94f 100644 --- a/arch/arm/mach-pxa/colibri.c +++ b/arch/arm/mach-pxa/colibri.c @@ -21,7 +21,7 @@  #include <linux/mtd/partitions.h>  #include <linux/mtd/physmap.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/sizes.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c index e58504edb14..8c43e273002 100644 --- a/arch/arm/mach-pxa/corgi.c +++ b/arch/arm/mach-pxa/corgi.c @@ -26,7 +26,7 @@  #include <asm/setup.h>  #include <asm/memory.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h>  #include <asm/system.h> diff --git a/arch/arm/mach-pxa/corgi_lcd.c b/arch/arm/mach-pxa/corgi_lcd.c index 9328df37afd..b08290bd5fa 100644 --- a/arch/arm/mach-pxa/corgi_lcd.c +++ b/arch/arm/mach-pxa/corgi_lcd.c @@ -22,7 +22,7 @@  #include <linux/string.h>  #include <asm/arch/akita.h>  #include <asm/arch/corgi.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/sharpsl.h>  #include <asm/arch/spitz.h> diff --git a/arch/arm/mach-pxa/corgi_pm.c b/arch/arm/mach-pxa/corgi_pm.c index e91c0f26c41..abd8b13e731 100644 --- a/arch/arm/mach-pxa/corgi_pm.c +++ b/arch/arm/mach-pxa/corgi_pm.c @@ -20,7 +20,7 @@  #include <asm/irq.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/scoop.h>  #include <asm/arch/sharpsl.h> diff --git a/arch/arm/mach-pxa/corgi_ssp.c b/arch/arm/mach-pxa/corgi_ssp.c index eccc45d21f7..21e616f2bb4 100644 --- a/arch/arm/mach-pxa/corgi_ssp.c +++ b/arch/arm/mach-pxa/corgi_ssp.c @@ -16,7 +16,7 @@  #include <linux/slab.h>  #include <linux/delay.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/arch/ssp.h> diff --git a/arch/arm/mach-pxa/cpu-pxa.c b/arch/arm/mach-pxa/cpu-pxa.c index fb9ba1ab282..8f6075a2996 100644 --- a/arch/arm/mach-pxa/cpu-pxa.c +++ b/arch/arm/mach-pxa/cpu-pxa.c @@ -37,7 +37,7 @@  #include <linux/init.h>  #include <linux/cpufreq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/pxa2xx-regs.h> diff --git a/arch/arm/mach-pxa/dma.c b/arch/arm/mach-pxa/dma.c index 3215316d7b0..2532b6d6671 100644 --- a/arch/arm/mach-pxa/dma.c +++ b/arch/arm/mach-pxa/dma.c @@ -20,7 +20,7 @@  #include <asm/system.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/dma.h>  #include <asm/arch/pxa-regs.h> diff --git a/arch/arm/mach-pxa/generic.c b/arch/arm/mach-pxa/generic.c index ca053226fba..2106028636f 100644 --- a/arch/arm/mach-pxa/generic.c +++ b/arch/arm/mach-pxa/generic.c @@ -20,7 +20,7 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/system.h>  #include <asm/pgtable.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-pxa/gpio.c b/arch/arm/mach-pxa/gpio.c index 7d3e16970be..1f34f23e177 100644 --- a/arch/arm/mach-pxa/gpio.c +++ b/arch/arm/mach-pxa/gpio.c @@ -18,7 +18,7 @@  #include <linux/sysdev.h>  #include <asm/gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/pxa2xx-gpio.h> diff --git a/arch/arm/mach-pxa/gumstix.c b/arch/arm/mach-pxa/gumstix.c index bdf23975403..2bc06363940 100644 --- a/arch/arm/mach-pxa/gumstix.c +++ b/arch/arm/mach-pxa/gumstix.c @@ -26,7 +26,7 @@  #include <asm/setup.h>  #include <asm/memory.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/sizes.h> diff --git a/arch/arm/mach-pxa/idp.c b/arch/arm/mach-pxa/idp.c index 2637633f916..a994292fba1 100644 --- a/arch/arm/mach-pxa/idp.c +++ b/arch/arm/mach-pxa/idp.c @@ -25,7 +25,7 @@  #include <asm/setup.h>  #include <asm/memory.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c index fbff557bb22..26a9d8b7d5f 100644 --- a/arch/arm/mach-pxa/irq.c +++ b/arch/arm/mach-pxa/irq.c @@ -17,7 +17,7 @@  #include <linux/interrupt.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/irq.h>  #include <asm/arch/pxa-regs.h> diff --git a/arch/arm/mach-pxa/leds-idp.c b/arch/arm/mach-pxa/leds-idp.c index 38aa9270540..c410e53bf9e 100644 --- a/arch/arm/mach-pxa/leds-idp.c +++ b/arch/arm/mach-pxa/leds-idp.c @@ -14,7 +14,7 @@  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h> diff --git a/arch/arm/mach-pxa/leds-lubbock.c b/arch/arm/mach-pxa/leds-lubbock.c index afbc6698e27..7eafbb4d507 100644 --- a/arch/arm/mach-pxa/leds-lubbock.c +++ b/arch/arm/mach-pxa/leds-lubbock.c @@ -13,7 +13,7 @@  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h>  #include <asm/arch/pxa-regs.h> diff --git a/arch/arm/mach-pxa/leds-mainstone.c b/arch/arm/mach-pxa/leds-mainstone.c index 065293eb0d8..32ca5acfa1c 100644 --- a/arch/arm/mach-pxa/leds-mainstone.c +++ b/arch/arm/mach-pxa/leds-mainstone.c @@ -12,7 +12,7 @@  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h> diff --git a/arch/arm/mach-pxa/leds-trizeps4.c b/arch/arm/mach-pxa/leds-trizeps4.c index 21880daabaf..c2fe1db22bf 100644 --- a/arch/arm/mach-pxa/leds-trizeps4.c +++ b/arch/arm/mach-pxa/leds-trizeps4.c @@ -12,7 +12,7 @@  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/system.h>  #include <asm/types.h>  #include <asm/leds.h> diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c index dd759d03a9f..101bd7ee815 100644 --- a/arch/arm/mach-pxa/littleton.c +++ b/arch/arm/mach-pxa/littleton.c @@ -26,7 +26,7 @@  #include <asm/setup.h>  #include <asm/memory.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-pxa/lpd270.c b/arch/arm/mach-pxa/lpd270.c index 8d1ab54e7b2..34c69b10f1b 100644 --- a/arch/arm/mach-pxa/lpd270.c +++ b/arch/arm/mach-pxa/lpd270.c @@ -29,7 +29,7 @@  #include <asm/setup.h>  #include <asm/memory.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/sizes.h> diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index af7375bb46a..66a3f334d6d 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c @@ -30,7 +30,7 @@  #include <asm/setup.h>  #include <asm/memory.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/sizes.h> diff --git a/arch/arm/mach-pxa/magician.c b/arch/arm/mach-pxa/magician.c index c9d274f0048..e919f37be72 100644 --- a/arch/arm/mach-pxa/magician.c +++ b/arch/arm/mach-pxa/magician.c @@ -26,7 +26,7 @@  #include <linux/pda_power.h>  #include <linux/pwm_backlight.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/arch/magician.h> diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index c8e38b5ff1c..425ba9666da 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c @@ -32,7 +32,7 @@  #include <asm/setup.h>  #include <asm/memory.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/sizes.h> diff --git a/arch/arm/mach-pxa/mfp-pxa3xx.c b/arch/arm/mach-pxa/mfp-pxa3xx.c index 3a5b0fcbaf1..c15183174d7 100644 --- a/arch/arm/mach-pxa/mfp-pxa3xx.c +++ b/arch/arm/mach-pxa/mfp-pxa3xx.c @@ -19,7 +19,7 @@  #include <linux/io.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/mfp.h>  #include <asm/arch/mfp-pxa3xx.h>  #include <asm/arch/pxa3xx-regs.h> diff --git a/arch/arm/mach-pxa/pcm990-baseboard.c b/arch/arm/mach-pxa/pcm990-baseboard.c index 30023b00e47..90056d56b21 100644 --- a/arch/arm/mach-pxa/pcm990-baseboard.c +++ b/arch/arm/mach-pxa/pcm990-baseboard.c @@ -22,7 +22,6 @@  #include <linux/irq.h>  #include <linux/platform_device.h> -#include <linux/ide.h>  #include <linux/i2c.h>  #include <linux/pwm_backlight.h> diff --git a/arch/arm/mach-pxa/pm.c b/arch/arm/mach-pxa/pm.c index 7d4debbdcca..9445bf11e7a 100644 --- a/arch/arm/mach-pxa/pm.c +++ b/arch/arm/mach-pxa/pm.c @@ -16,7 +16,7 @@  #include <linux/errno.h>  #include <linux/time.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/memory.h>  #include <asm/system.h>  #include <asm/arch/pm.h> diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c index 39612cfa0b4..fef958fddf5 100644 --- a/arch/arm/mach-pxa/poodle.c +++ b/arch/arm/mach-pxa/poodle.c @@ -21,7 +21,7 @@  #include <linux/pm.h>  #include <linux/delay.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c index c5b845b935b..c8379e5309d 100644 --- a/arch/arm/mach-pxa/pxa25x.c +++ b/arch/arm/mach-pxa/pxa25x.c @@ -23,7 +23,7 @@  #include <linux/suspend.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/irqs.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/pxa2xx-regs.h> diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index d5d14ea33f2..46720ed2a67 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c @@ -18,7 +18,7 @@  #include <linux/platform_device.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/arch/irqs.h>  #include <asm/arch/pxa-regs.h> diff --git a/arch/arm/mach-pxa/pxa300.c b/arch/arm/mach-pxa/pxa300.c index da92e973388..b8482da3e4d 100644 --- a/arch/arm/mach-pxa/pxa300.c +++ b/arch/arm/mach-pxa/pxa300.c @@ -17,7 +17,7 @@  #include <linux/kernel.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa3xx-regs.h>  #include <asm/arch/mfp-pxa300.h> diff --git a/arch/arm/mach-pxa/pxa320.c b/arch/arm/mach-pxa/pxa320.c index c557c23a1ef..95d46d92621 100644 --- a/arch/arm/mach-pxa/pxa320.c +++ b/arch/arm/mach-pxa/pxa320.c @@ -17,7 +17,7 @@  #include <linux/kernel.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/mfp.h>  #include <asm/arch/pxa3xx-regs.h>  #include <asm/arch/mfp-pxa320.h> diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c index f491025a0c8..4f5e6c7f695 100644 --- a/arch/arm/mach-pxa/pxa3xx.c +++ b/arch/arm/mach-pxa/pxa3xx.c @@ -22,7 +22,7 @@  #include <linux/io.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa3xx-regs.h>  #include <asm/arch/ohci.h>  #include <asm/arch/pm.h> diff --git a/arch/arm/mach-pxa/pxa930.c b/arch/arm/mach-pxa/pxa930.c index 9503897d049..028ee1d8654 100644 --- a/arch/arm/mach-pxa/pxa930.c +++ b/arch/arm/mach-pxa/pxa930.c @@ -16,7 +16,7 @@  #include <linux/irq.h>  #include <linux/dma-mapping.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/mfp-pxa930.h>  static struct pxa3xx_mfp_addr_map pxa930_mfp_addr_map[] __initdata = { diff --git a/arch/arm/mach-pxa/saar.c b/arch/arm/mach-pxa/saar.c index d02bc6f8bb9..ee70dee5b4d 100644 --- a/arch/arm/mach-pxa/saar.c +++ b/arch/arm/mach-pxa/saar.c @@ -21,7 +21,7 @@  #include <asm/mach-types.h>  #include <asm/mach/arch.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa3xx-regs.h>  #include <asm/arch/mfp-pxa930.h> diff --git a/arch/arm/mach-pxa/sharpsl_pm.c b/arch/arm/mach-pxa/sharpsl_pm.c index 23e9b928330..7b7d0bd32eb 100644 --- a/arch/arm/mach-pxa/sharpsl_pm.c +++ b/arch/arm/mach-pxa/sharpsl_pm.c @@ -22,7 +22,7 @@  #include <linux/platform_device.h>  #include <linux/apm-emulation.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/arch/pm.h>  #include <asm/arch/pxa-regs.h> diff --git a/arch/arm/mach-pxa/sleep.S b/arch/arm/mach-pxa/sleep.S index 784716eb7fc..2a58f1e40e3 100644 --- a/arch/arm/mach-pxa/sleep.S +++ b/arch/arm/mach-pxa/sleep.S @@ -13,7 +13,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/pxa2xx-regs.h> diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index 762249c03de..a8774d45849 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c @@ -26,7 +26,7 @@  #include <asm/setup.h>  #include <asm/memory.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h>  #include <asm/system.h> diff --git a/arch/arm/mach-pxa/spitz_pm.c b/arch/arm/mach-pxa/spitz_pm.c index 360354084ae..8fb5651548d 100644 --- a/arch/arm/mach-pxa/spitz_pm.c +++ b/arch/arm/mach-pxa/spitz_pm.c @@ -20,7 +20,7 @@  #include <asm/irq.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/scoop.h>  #include <asm/arch/sharpsl.h> diff --git a/arch/arm/mach-pxa/ssp.c b/arch/arm/mach-pxa/ssp.c index 89f38683787..bca34e5c8c0 100644 --- a/arch/arm/mach-pxa/ssp.c +++ b/arch/arm/mach-pxa/ssp.c @@ -31,7 +31,7 @@  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/ssp.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/regs-ssp.h> diff --git a/arch/arm/mach-pxa/standby.S b/arch/arm/mach-pxa/standby.S index 40bb70eff3f..207fb607662 100644 --- a/arch/arm/mach-pxa/standby.S +++ b/arch/arm/mach-pxa/standby.S @@ -11,7 +11,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/pxa2xx-regs.h> diff --git a/arch/arm/mach-pxa/tavorevb.c b/arch/arm/mach-pxa/tavorevb.c index ac283507e42..9dcb349e6d9 100644 --- a/arch/arm/mach-pxa/tavorevb.c +++ b/arch/arm/mach-pxa/tavorevb.c @@ -21,7 +21,7 @@  #include <asm/mach-types.h>  #include <asm/mach/arch.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa3xx-regs.h>  #include <asm/arch/mfp-pxa930.h> diff --git a/arch/arm/mach-pxa/trizeps4.c b/arch/arm/mach-pxa/trizeps4.c index 12811b7aea0..6367ac21af8 100644 --- a/arch/arm/mach-pxa/trizeps4.c +++ b/arch/arm/mach-pxa/trizeps4.c @@ -31,7 +31,7 @@  #include <asm/setup.h>  #include <asm/memory.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/sizes.h> diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c index 8fca6d890b7..f11ced1562b 100644 --- a/arch/arm/mach-pxa/zylonite.c +++ b/arch/arm/mach-pxa/zylonite.c @@ -23,7 +23,7 @@  #include <asm/mach-types.h>  #include <asm/mach/arch.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/audio.h>  #include <asm/arch/gpio.h>  #include <asm/arch/pxafb.h> diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index 131990d196f..b63fa88fb42 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c @@ -29,7 +29,7 @@  #include <linux/clockchips.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/leds.h> diff --git a/arch/arm/mach-realview/localtimer.c b/arch/arm/mach-realview/localtimer.c index 50604360479..7631f3ea851 100644 --- a/arch/arm/mach-realview/localtimer.c +++ b/arch/arm/mach-realview/localtimer.c @@ -20,7 +20,7 @@  #include <asm/hardware/arm_twd.h>  #include <asm/hardware/gic.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-realview/platsmp.c b/arch/arm/mach-realview/platsmp.c index 8e813ed5751..c1e579cbaa7 100644 --- a/arch/arm/mach-realview/platsmp.c +++ b/arch/arm/mach-realview/platsmp.c @@ -15,7 +15,7 @@  #include <linux/smp.h>  #include <asm/cacheflush.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c index 5782d83fd88..66c1f3e47f6 100644 --- a/arch/arm/mach-realview/realview_eb.c +++ b/arch/arm/mach-realview/realview_eb.c @@ -24,7 +24,7 @@  #include <linux/sysdev.h>  #include <linux/amba/bus.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/leds.h> diff --git a/arch/arm/mach-realview/realview_pb1176.c b/arch/arm/mach-realview/realview_pb1176.c index cf7f576a586..a00588a8d8f 100644 --- a/arch/arm/mach-realview/realview_pb1176.c +++ b/arch/arm/mach-realview/realview_pb1176.c @@ -24,7 +24,7 @@  #include <linux/sysdev.h>  #include <linux/amba/bus.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/leds.h> diff --git a/arch/arm/mach-realview/realview_pb11mp.c b/arch/arm/mach-realview/realview_pb11mp.c index f7ce1c5a178..018898708b7 100644 --- a/arch/arm/mach-realview/realview_pb11mp.c +++ b/arch/arm/mach-realview/realview_pb11mp.c @@ -24,7 +24,7 @@  #include <linux/sysdev.h>  #include <linux/amba/bus.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/leds.h> diff --git a/arch/arm/mach-rpc/dma.c b/arch/arm/mach-rpc/dma.c index 596379a4cf8..fb1d42b5378 100644 --- a/arch/arm/mach-rpc/dma.c +++ b/arch/arm/mach-rpc/dma.c @@ -20,7 +20,7 @@  #include <asm/fiq.h>  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/uaccess.h>  #include <asm/mach/dma.h> diff --git a/arch/arm/mach-rpc/riscpc.c b/arch/arm/mach-rpc/riscpc.c index eca558c6bf5..54a6c756584 100644 --- a/arch/arm/mach-rpc/riscpc.c +++ b/arch/arm/mach-rpc/riscpc.c @@ -22,7 +22,7 @@  #include <asm/elf.h>  #include <asm/io.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/page.h>  #include <asm/domain.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-s3c2400/gpio.c b/arch/arm/mach-s3c2400/gpio.c index 758e160410e..140fd2548b4 100644 --- a/arch/arm/mach-s3c2400/gpio.c +++ b/arch/arm/mach-s3c2400/gpio.c @@ -25,7 +25,7 @@  #include <linux/interrupt.h>  #include <linux/ioport.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-s3c2410/bast-irq.c b/arch/arm/mach-s3c2410/bast-irq.c index 76a7cb15f3b..4e58bc0e30e 100644 --- a/arch/arm/mach-s3c2410/bast-irq.c +++ b/arch/arm/mach-s3c2410/bast-irq.c @@ -28,7 +28,7 @@  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-s3c2410/clock.c b/arch/arm/mach-s3c2410/clock.c index 2bfaa610202..4e6239726aa 100644 --- a/arch/arm/mach-s3c2410/clock.c +++ b/arch/arm/mach-s3c2410/clock.c @@ -34,7 +34,7 @@  #include <asm/mach/map.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/plat-s3c/regs-serial.h> diff --git a/arch/arm/mach-s3c2410/gpio.c b/arch/arm/mach-s3c2410/gpio.c index 01e795d1146..d15621ef5b6 100644 --- a/arch/arm/mach-s3c2410/gpio.c +++ b/arch/arm/mach-s3c2410/gpio.c @@ -26,7 +26,7 @@  #include <linux/interrupt.h>  #include <linux/ioport.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-s3c2410/h1940-bluetooth.c b/arch/arm/mach-s3c2410/h1940-bluetooth.c index 3c48886521e..affa4fa12ac 100644 --- a/arch/arm/mach-s3c2410/h1940-bluetooth.c +++ b/arch/arm/mach-s3c2410/h1940-bluetooth.c @@ -17,7 +17,7 @@  #include <linux/ctype.h>  #include <linux/leds.h>  #include <asm/arch/regs-gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/h1940-latch.h>  #define DRV_NAME              "h1940-bt" diff --git a/arch/arm/mach-s3c2410/mach-amlm5900.c b/arch/arm/mach-s3c2410/mach-amlm5900.c index a67a0685664..2d72496ed09 100644 --- a/arch/arm/mach-s3c2410/mach-amlm5900.c +++ b/arch/arm/mach-s3c2410/mach-amlm5900.c @@ -42,7 +42,7 @@  #include <asm/mach/irq.h>  #include <asm/mach/flash.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2410/mach-bast.c b/arch/arm/mach-s3c2410/mach-bast.c index 965f2712970..9c76df6662a 100644 --- a/arch/arm/mach-s3c2410/mach-bast.c +++ b/arch/arm/mach-s3c2410/mach-bast.c @@ -33,7 +33,7 @@  #include <asm/arch/bast-irq.h>  #include <asm/arch/bast-cpld.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2410/mach-h1940.c b/arch/arm/mach-s3c2410/mach-h1940.c index 7c1145e87c1..f658b842130 100644 --- a/arch/arm/mach-s3c2410/mach-h1940.c +++ b/arch/arm/mach-s3c2410/mach-h1940.c @@ -25,7 +25,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2410/mach-n30.c b/arch/arm/mach-s3c2410/mach-n30.c index 43c2e915c5b..cbc7956a24e 100644 --- a/arch/arm/mach-s3c2410/mach-n30.c +++ b/arch/arm/mach-s3c2410/mach-n30.c @@ -26,7 +26,7 @@  #include <linux/serial_core.h>  #include <linux/timer.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2410/mach-otom.c b/arch/arm/mach-s3c2410/mach-otom.c index 717af40e447..3b5dc6e81ea 100644 --- a/arch/arm/mach-s3c2410/mach-otom.c +++ b/arch/arm/mach-s3c2410/mach-otom.c @@ -24,7 +24,7 @@  #include <asm/arch/otom-map.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2410/mach-qt2410.c b/arch/arm/mach-s3c2410/mach-qt2410.c index a1caf4b0ada..012dc14ffb2 100644 --- a/arch/arm/mach-s3c2410/mach-qt2410.c +++ b/arch/arm/mach-s3c2410/mach-qt2410.c @@ -42,7 +42,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2410/mach-smdk2410.c b/arch/arm/mach-s3c2410/mach-smdk2410.c index 226550504c8..849ebe92adc 100644 --- a/arch/arm/mach-s3c2410/mach-smdk2410.c +++ b/arch/arm/mach-s3c2410/mach-smdk2410.c @@ -42,7 +42,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2410/mach-tct_hammer.c b/arch/arm/mach-s3c2410/mach-tct_hammer.c index d90d445ccfb..d7646a91a1e 100644 --- a/arch/arm/mach-s3c2410/mach-tct_hammer.c +++ b/arch/arm/mach-s3c2410/mach-tct_hammer.c @@ -39,7 +39,7 @@  #include <asm/mach/irq.h>  #include <asm/mach/flash.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2410/mach-vr1000.c b/arch/arm/mach-s3c2410/mach-vr1000.c index 9a0965ac5e1..a3f60cd0bba 100644 --- a/arch/arm/mach-s3c2410/mach-vr1000.c +++ b/arch/arm/mach-s3c2410/mach-vr1000.c @@ -35,7 +35,7 @@  #include <asm/arch/vr1000-irq.h>  #include <asm/arch/vr1000-cpld.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2410/pm-h1940.S b/arch/arm/mach-s3c2410/pm-h1940.S index 7d66de7ff7d..cb87c941fe4 100644 --- a/arch/arm/mach-s3c2410/pm-h1940.S +++ b/arch/arm/mach-s3c2410/pm-h1940.S @@ -20,7 +20,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/map.h>  #include <asm/arch/regs-gpio.h> diff --git a/arch/arm/mach-s3c2410/pm.c b/arch/arm/mach-s3c2410/pm.c index 3b3a7db4e0d..b9087273c24 100644 --- a/arch/arm/mach-s3c2410/pm.c +++ b/arch/arm/mach-s3c2410/pm.c @@ -26,7 +26,7 @@  #include <linux/time.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2410/s3c2410.c b/arch/arm/mach-s3c2410/s3c2410.c index 0e7991940f8..54d4b7983c9 100644 --- a/arch/arm/mach-s3c2410/s3c2410.c +++ b/arch/arm/mach-s3c2410/s3c2410.c @@ -24,7 +24,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-s3c2410/sleep.S b/arch/arm/mach-s3c2410/sleep.S index 8a9c5a2bb25..1597fcf9d7a 100644 --- a/arch/arm/mach-s3c2410/sleep.S +++ b/arch/arm/mach-s3c2410/sleep.S @@ -26,7 +26,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/map.h>  #include <asm/arch/regs-gpio.h> diff --git a/arch/arm/mach-s3c2410/usb-simtec.c b/arch/arm/mach-s3c2410/usb-simtec.c index 6aec86a5da5..28942e0acc9 100644 --- a/arch/arm/mach-s3c2410/usb-simtec.c +++ b/arch/arm/mach-s3c2410/usb-simtec.c @@ -31,7 +31,7 @@  #include <asm/arch/usb-control.h>  #include <asm/arch/regs-gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-s3c2412/clock.c b/arch/arm/mach-s3c2412/clock.c index 1157b5a1626..b1552b2e8ea 100644 --- a/arch/arm/mach-s3c2412/clock.c +++ b/arch/arm/mach-s3c2412/clock.c @@ -34,7 +34,7 @@  #include <asm/mach/map.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/plat-s3c/regs-serial.h> diff --git a/arch/arm/mach-s3c2412/gpio.c b/arch/arm/mach-s3c2412/gpio.c index 8e55c3a2eab..4f86693b05f 100644 --- a/arch/arm/mach-s3c2412/gpio.c +++ b/arch/arm/mach-s3c2412/gpio.c @@ -22,7 +22,7 @@  #include <asm/arch/regs-gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  int s3c2412_gpio_set_sleepcfg(unsigned int pin, unsigned int state)  { diff --git a/arch/arm/mach-s3c2412/irq.c b/arch/arm/mach-s3c2412/irq.c index cc1917bf952..0230b2f6353 100644 --- a/arch/arm/mach-s3c2412/irq.c +++ b/arch/arm/mach-s3c2412/irq.c @@ -25,7 +25,7 @@  #include <linux/ioport.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-s3c2412/mach-smdk2413.c b/arch/arm/mach-s3c2412/mach-smdk2413.c index b126a530daa..d7d0e95949c 100644 --- a/arch/arm/mach-s3c2412/mach-smdk2413.c +++ b/arch/arm/mach-s3c2412/mach-smdk2413.c @@ -24,7 +24,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/iomd.h>  #include <asm/setup.h>  #include <asm/io.h> diff --git a/arch/arm/mach-s3c2412/mach-vstms.c b/arch/arm/mach-s3c2412/mach-vstms.c index 32982547cd6..d7087d0dbad 100644 --- a/arch/arm/mach-s3c2412/mach-vstms.c +++ b/arch/arm/mach-s3c2412/mach-vstms.c @@ -27,7 +27,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-s3c2412/pm.c b/arch/arm/mach-s3c2412/pm.c index d4ffb2d9807..a71d6c6cd44 100644 --- a/arch/arm/mach-s3c2412/pm.c +++ b/arch/arm/mach-s3c2412/pm.c @@ -19,7 +19,7 @@  #include <linux/sysdev.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-s3c2412/s3c2412.c b/arch/arm/mach-s3c2412/s3c2412.c index 98a0de924c2..5ce001b5c27 100644 --- a/arch/arm/mach-s3c2412/s3c2412.c +++ b/arch/arm/mach-s3c2412/s3c2412.c @@ -25,7 +25,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/proc-fns.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-s3c2412/sleep.S b/arch/arm/mach-s3c2412/sleep.S index db32cac4199..609312b6202 100644 --- a/arch/arm/mach-s3c2412/sleep.S +++ b/arch/arm/mach-s3c2412/sleep.S @@ -22,7 +22,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/map.h>  #include <asm/arch/regs-irq.h> diff --git a/arch/arm/mach-s3c2440/clock.c b/arch/arm/mach-s3c2440/clock.c index 184d804934c..9ef4efd7e23 100644 --- a/arch/arm/mach-s3c2440/clock.c +++ b/arch/arm/mach-s3c2440/clock.c @@ -34,7 +34,7 @@  #include <linux/mutex.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/atomic.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-s3c2440/dsc.c b/arch/arm/mach-s3c2440/dsc.c index 2995ff5681b..e7f1ca1e673 100644 --- a/arch/arm/mach-s3c2440/dsc.c +++ b/arch/arm/mach-s3c2440/dsc.c @@ -20,7 +20,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-s3c2440/irq.c b/arch/arm/mach-s3c2440/irq.c index a87608bc1a0..457255d1f08 100644 --- a/arch/arm/mach-s3c2440/irq.c +++ b/arch/arm/mach-s3c2440/irq.c @@ -25,7 +25,7 @@  #include <linux/ioport.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-s3c2440/mach-anubis.c b/arch/arm/mach-s3c2440/mach-anubis.c index 09af8b23500..f53eba751a6 100644 --- a/arch/arm/mach-s3c2440/mach-anubis.c +++ b/arch/arm/mach-s3c2440/mach-anubis.c @@ -31,7 +31,7 @@  #include <asm/arch/anubis-irq.h>  #include <asm/arch/anubis-cpld.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2440/mach-at2440evb.c b/arch/arm/mach-s3c2440/mach-at2440evb.c index f5e3c7f2763..48e8fb6d18b 100644 --- a/arch/arm/mach-s3c2440/mach-at2440evb.c +++ b/arch/arm/mach-s3c2440/mach-at2440evb.c @@ -27,7 +27,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2440/mach-nexcoder.c b/arch/arm/mach-s3c2440/mach-nexcoder.c index afe0d7b7e38..0f4437b79ef 100644 --- a/arch/arm/mach-s3c2440/mach-nexcoder.c +++ b/arch/arm/mach-s3c2440/mach-nexcoder.c @@ -29,7 +29,7 @@  #include <asm/mach/irq.h>  #include <asm/setup.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2440/mach-osiris.c b/arch/arm/mach-s3c2440/mach-osiris.c index af996b0e91e..c4008d5c42f 100644 --- a/arch/arm/mach-s3c2440/mach-osiris.c +++ b/arch/arm/mach-s3c2440/mach-osiris.c @@ -28,7 +28,7 @@  #include <asm/arch/osiris-map.h>  #include <asm/arch/osiris-cpld.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2440/mach-rx3715.c b/arch/arm/mach-s3c2440/mach-rx3715.c index bac40c4878a..569f00bc929 100644 --- a/arch/arm/mach-s3c2440/mach-rx3715.c +++ b/arch/arm/mach-s3c2440/mach-rx3715.c @@ -33,7 +33,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2440/mach-smdk2440.c b/arch/arm/mach-s3c2440/mach-smdk2440.c index 4552828bf80..52deb5a6d91 100644 --- a/arch/arm/mach-s3c2440/mach-smdk2440.c +++ b/arch/arm/mach-s3c2440/mach-smdk2440.c @@ -26,7 +26,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2440/s3c2440.c b/arch/arm/mach-s3c2440/s3c2440.c index 90e1da61fbc..19f06c3c26a 100644 --- a/arch/arm/mach-s3c2440/s3c2440.c +++ b/arch/arm/mach-s3c2440/s3c2440.c @@ -25,7 +25,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-s3c2442/clock.c b/arch/arm/mach-s3c2442/clock.c index 2d030d439fe..ad2e8a92978 100644 --- a/arch/arm/mach-s3c2442/clock.c +++ b/arch/arm/mach-s3c2442/clock.c @@ -34,7 +34,7 @@  #include <linux/mutex.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/atomic.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-s3c2443/clock.c b/arch/arm/mach-s3c2443/clock.c index 17f064fabda..04d248aaa7a 100644 --- a/arch/arm/mach-s3c2443/clock.c +++ b/arch/arm/mach-s3c2443/clock.c @@ -34,7 +34,7 @@  #include <asm/mach/map.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/regs-s3c2443-clock.h> diff --git a/arch/arm/mach-s3c2443/irq.c b/arch/arm/mach-s3c2443/irq.c index f9ad498a6fc..499cddbbab4 100644 --- a/arch/arm/mach-s3c2443/irq.c +++ b/arch/arm/mach-s3c2443/irq.c @@ -25,7 +25,7 @@  #include <linux/ioport.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/mach-s3c2443/mach-smdk2443.c b/arch/arm/mach-s3c2443/mach-smdk2443.c index 8cd93130ef3..5a6d3331024 100644 --- a/arch/arm/mach-s3c2443/mach-smdk2443.c +++ b/arch/arm/mach-s3c2443/mach-smdk2443.c @@ -26,7 +26,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-s3c2443/s3c2443.c b/arch/arm/mach-s3c2443/s3c2443.c index 9ce490560af..3e9f92383ed 100644 --- a/arch/arm/mach-s3c2443/s3c2443.c +++ b/arch/arm/mach-s3c2443/s3c2443.c @@ -25,7 +25,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/mach-sa1100/assabet.c b/arch/arm/mach-sa1100/assabet.c index be06d668a3c..d219845b10b 100644 --- a/arch/arm/mach-sa1100/assabet.c +++ b/arch/arm/mach-sa1100/assabet.c @@ -20,7 +20,7 @@  #include <linux/delay.h>  #include <linux/mm.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-sa1100/badge4.c b/arch/arm/mach-sa1100/badge4.c index 842d9e6dc5f..d087c3bf3fe 100644 --- a/arch/arm/mach-sa1100/badge4.c +++ b/arch/arm/mach-sa1100/badge4.c @@ -23,7 +23,7 @@  #include <linux/mtd/partitions.h>  #include <linux/errno.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/setup.h>  #include <asm/arch/irqs.h> diff --git a/arch/arm/mach-sa1100/cerf.c b/arch/arm/mach-sa1100/cerf.c index 56d3ee01baa..cfb65eb9f30 100644 --- a/arch/arm/mach-sa1100/cerf.c +++ b/arch/arm/mach-sa1100/cerf.c @@ -19,7 +19,7 @@  #include <linux/mtd/partitions.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-sa1100/clock.c b/arch/arm/mach-sa1100/clock.c index b5809c51d13..dbd1aaaa09a 100644 --- a/arch/arm/mach-sa1100/clock.c +++ b/arch/arm/mach-sa1100/clock.c @@ -11,7 +11,7 @@  #include <linux/spinlock.h>  #include <linux/mutex.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * Very simple clock implementation - we only have one clock to diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c index 2f772a3965c..40893638be7 100644 --- a/arch/arm/mach-sa1100/collie.c +++ b/arch/arm/mach-sa1100/collie.c @@ -26,7 +26,7 @@  #include <linux/mtd/partitions.h>  #include <linux/timer.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-sa1100/collie_pm.c b/arch/arm/mach-sa1100/collie_pm.c index 94620be7bfa..daa9d57c00f 100644 --- a/arch/arm/mach-sa1100/collie_pm.c +++ b/arch/arm/mach-sa1100/collie_pm.c @@ -24,8 +24,7 @@  #include <linux/platform_device.h>  #include <asm/irq.h> -#include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/scoop.h>  #include <asm/dma.h>  #include <asm/arch/collie.h> diff --git a/arch/arm/mach-sa1100/cpu-sa1100.c b/arch/arm/mach-sa1100/cpu-sa1100.c index 343368aa82d..61df76f8526 100644 --- a/arch/arm/mach-sa1100/cpu-sa1100.c +++ b/arch/arm/mach-sa1100/cpu-sa1100.c @@ -88,7 +88,7 @@  #include <linux/init.h>  #include <linux/cpufreq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "generic.h" diff --git a/arch/arm/mach-sa1100/cpu-sa1110.c b/arch/arm/mach-sa1100/cpu-sa1110.c index 36b47ff5af1..a471f9f6273 100644 --- a/arch/arm/mach-sa1100/cpu-sa1110.c +++ b/arch/arm/mach-sa1100/cpu-sa1110.c @@ -26,7 +26,7 @@  #include <linux/delay.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/io.h>  #include <asm/system.h> diff --git a/arch/arm/mach-sa1100/dma.c b/arch/arm/mach-sa1100/dma.c index e5080286060..65d96eec9e6 100644 --- a/arch/arm/mach-sa1100/dma.c +++ b/arch/arm/mach-sa1100/dma.c @@ -18,7 +18,7 @@  #include <asm/system.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/dma.h> diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c index 0c2fa1c4fb4..e616130ae52 100644 --- a/arch/arm/mach-sa1100/generic.c +++ b/arch/arm/mach-sa1100/generic.c @@ -21,7 +21,7 @@  #include <asm/div64.h>  #include <asm/cnt32_to_63.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/system.h>  #include <asm/pgtable.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-sa1100/gpio.c b/arch/arm/mach-sa1100/gpio.c index 372f1f4f54a..184b04c0072 100644 --- a/arch/arm/mach-sa1100/gpio.c +++ b/arch/arm/mach-sa1100/gpio.c @@ -12,7 +12,7 @@  #include <linux/module.h>  #include <asm/gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "generic.h"  static int sa1100_gpio_get(struct gpio_chip *chip, unsigned offset) diff --git a/arch/arm/mach-sa1100/h3600.c b/arch/arm/mach-sa1100/h3600.c index b34ff42bbd7..8c560ae0869 100644 --- a/arch/arm/mach-sa1100/h3600.c +++ b/arch/arm/mach-sa1100/h3600.c @@ -30,7 +30,7 @@  #include <linux/serial_core.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-sa1100/hackkit.c b/arch/arm/mach-sa1100/hackkit.c index 046b213efd5..270feb0fa4a 100644 --- a/arch/arm/mach-sa1100/hackkit.c +++ b/arch/arm/mach-sa1100/hackkit.c @@ -22,7 +22,7 @@  #include <linux/mtd/mtd.h>  #include <linux/mtd/partitions.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/setup.h>  #include <asm/page.h> diff --git a/arch/arm/mach-sa1100/irq.c b/arch/arm/mach-sa1100/irq.c index c5e438b12ec..280e111ba06 100644 --- a/arch/arm/mach-sa1100/irq.c +++ b/arch/arm/mach-sa1100/irq.c @@ -16,7 +16,7 @@  #include <linux/ioport.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/irq.h>  #include "generic.h" diff --git a/arch/arm/mach-sa1100/jornada720.c b/arch/arm/mach-sa1100/jornada720.c index 52ac37d1e23..2fefd195375 100644 --- a/arch/arm/mach-sa1100/jornada720.c +++ b/arch/arm/mach-sa1100/jornada720.c @@ -23,7 +23,7 @@  #include <linux/mtd/partitions.h>  #include <video/s1d13xxxfb.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/sa1111.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-sa1100/jornada720_ssp.c b/arch/arm/mach-sa1100/jornada720_ssp.c index 395c39bed7d..e319c361fc6 100644 --- a/arch/arm/mach-sa1100/jornada720_ssp.c +++ b/arch/arm/mach-sa1100/jornada720_ssp.c @@ -20,7 +20,7 @@  #include <linux/sched.h>  #include <linux/slab.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/ssp.h>  #include <asm/arch/jornada720.h> diff --git a/arch/arm/mach-sa1100/lart.c b/arch/arm/mach-sa1100/lart.c index 07d3a696ae7..7b991217a7f 100644 --- a/arch/arm/mach-sa1100/lart.c +++ b/arch/arm/mach-sa1100/lart.c @@ -6,7 +6,7 @@  #include <linux/kernel.h>  #include <linux/tty.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-sa1100/leds-assabet.c b/arch/arm/mach-sa1100/leds-assabet.c index ee978898987..0af944ea1b6 100644 --- a/arch/arm/mach-sa1100/leds-assabet.c +++ b/arch/arm/mach-sa1100/leds-assabet.c @@ -11,7 +11,7 @@   */  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h>  #include <asm/arch/assabet.h> diff --git a/arch/arm/mach-sa1100/leds-badge4.c b/arch/arm/mach-sa1100/leds-badge4.c index 280929be972..9aead5f0a50 100644 --- a/arch/arm/mach-sa1100/leds-badge4.c +++ b/arch/arm/mach-sa1100/leds-badge4.c @@ -12,7 +12,7 @@  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h> diff --git a/arch/arm/mach-sa1100/leds-cerf.c b/arch/arm/mach-sa1100/leds-cerf.c index f38eeddbef1..0c61ce5fddd 100644 --- a/arch/arm/mach-sa1100/leds-cerf.c +++ b/arch/arm/mach-sa1100/leds-cerf.c @@ -5,7 +5,7 @@   */  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h> diff --git a/arch/arm/mach-sa1100/leds-hackkit.c b/arch/arm/mach-sa1100/leds-hackkit.c index 7e91cc90b5a..afa82f40048 100644 --- a/arch/arm/mach-sa1100/leds-hackkit.c +++ b/arch/arm/mach-sa1100/leds-hackkit.c @@ -11,7 +11,7 @@   */  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h> diff --git a/arch/arm/mach-sa1100/leds-lart.c b/arch/arm/mach-sa1100/leds-lart.c index 2d27d76cfc6..066c7dc2f3f 100644 --- a/arch/arm/mach-sa1100/leds-lart.c +++ b/arch/arm/mach-sa1100/leds-lart.c @@ -11,7 +11,7 @@   */  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h> diff --git a/arch/arm/mach-sa1100/leds-simpad.c b/arch/arm/mach-sa1100/leds-simpad.c index def090a8738..1a3564b97e4 100644 --- a/arch/arm/mach-sa1100/leds-simpad.c +++ b/arch/arm/mach-sa1100/leds-simpad.c @@ -5,7 +5,7 @@   */  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h>  #include <asm/arch/simpad.h> diff --git a/arch/arm/mach-sa1100/neponset.c b/arch/arm/mach-sa1100/neponset.c index 967a48454f6..dd7949f4f57 100644 --- a/arch/arm/mach-sa1100/neponset.c +++ b/arch/arm/mach-sa1100/neponset.c @@ -10,7 +10,7 @@  #include <linux/platform_device.h>  #include <linux/slab.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/mach/map.h> diff --git a/arch/arm/mach-sa1100/pleb.c b/arch/arm/mach-sa1100/pleb.c index 69a71f11625..84e956e2359 100644 --- a/arch/arm/mach-sa1100/pleb.c +++ b/arch/arm/mach-sa1100/pleb.c @@ -11,7 +11,7 @@  #include <linux/mtd/partitions.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/setup.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-sa1100/pm.c b/arch/arm/mach-sa1100/pm.c index 1693d447a22..41ac21057b7 100644 --- a/arch/arm/mach-sa1100/pm.c +++ b/arch/arm/mach-sa1100/pm.c @@ -27,7 +27,7 @@  #include <linux/errno.h>  #include <linux/time.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/memory.h>  #include <asm/system.h>  #include <asm/mach/time.h> diff --git a/arch/arm/mach-sa1100/shannon.c b/arch/arm/mach-sa1100/shannon.c index 8acab7b1e4c..60b4d847b48 100644 --- a/arch/arm/mach-sa1100/shannon.c +++ b/arch/arm/mach-sa1100/shannon.c @@ -9,7 +9,7 @@  #include <linux/mtd/mtd.h>  #include <linux/mtd/partitions.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/setup.h> diff --git a/arch/arm/mach-sa1100/simpad.c b/arch/arm/mach-sa1100/simpad.c index a9ae1b581aa..cc1df0703fc 100644 --- a/arch/arm/mach-sa1100/simpad.c +++ b/arch/arm/mach-sa1100/simpad.c @@ -14,7 +14,7 @@  #include <linux/mtd/partitions.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/setup.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-sa1100/sleep.S b/arch/arm/mach-sa1100/sleep.S index 5a84062f92a..29bdd3d1d1f 100644 --- a/arch/arm/mach-sa1100/sleep.S +++ b/arch/arm/mach-sa1100/sleep.S @@ -18,7 +18,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h> diff --git a/arch/arm/mach-sa1100/ssp.c b/arch/arm/mach-sa1100/ssp.c index 06206ceb312..db491659c8c 100644 --- a/arch/arm/mach-sa1100/ssp.c +++ b/arch/arm/mach-sa1100/ssp.c @@ -20,7 +20,7 @@  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/ssp.h>  #define TIMEOUT 100000 diff --git a/arch/arm/mach-sa1100/time.c b/arch/arm/mach-sa1100/time.c index a9799cb35b7..428c2127834 100644 --- a/arch/arm/mach-sa1100/time.c +++ b/arch/arm/mach-sa1100/time.c @@ -16,7 +16,7 @@  #include <linux/clockchips.h>  #include <asm/mach/time.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define MIN_OSCR_DELTA 2 diff --git a/arch/arm/mach-shark/leds.c b/arch/arm/mach-shark/leds.c index 5386a81f796..333ece0aad4 100644 --- a/arch/arm/mach-shark/leds.c +++ b/arch/arm/mach-shark/leds.c @@ -21,7 +21,7 @@  #include <linux/spinlock.h>  #include <linux/ioport.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/io.h>  #include <asm/system.h> diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index a7dd09436cb..12097f441a8 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c @@ -31,7 +31,7 @@  #include <asm/cnt32_to_63.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/leds.h> diff --git a/arch/arm/mach-versatile/pci.c b/arch/arm/mach-versatile/pci.c index ca829015943..4335c07b865 100644 --- a/arch/arm/mach-versatile/pci.c +++ b/arch/arm/mach-versatile/pci.c @@ -22,7 +22,7 @@  #include <linux/spinlock.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/system.h> diff --git a/arch/arm/mach-versatile/versatile_ab.c b/arch/arm/mach-versatile/versatile_ab.c index b257ef78ef4..6e1fe3b450d 100644 --- a/arch/arm/mach-versatile/versatile_ab.c +++ b/arch/arm/mach-versatile/versatile_ab.c @@ -24,7 +24,7 @@  #include <linux/sysdev.h>  #include <linux/amba/bus.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-versatile/versatile_pb.c b/arch/arm/mach-versatile/versatile_pb.c index be439bb9d45..2eeda4b0107 100644 --- a/arch/arm/mach-versatile/versatile_pb.c +++ b/arch/arm/mach-versatile/versatile_pb.c @@ -24,7 +24,7 @@  #include <linux/sysdev.h>  #include <linux/amba/bus.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 3a6c8ec34cd..ed15f876c72 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig @@ -187,7 +187,7 @@ config CPU_ARM926T  		ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || \  		ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || \  		ARCH_AT91SAM9G20 || ARCH_AT91CAP9 || \ -		ARCH_NS9XXX || ARCH_DAVINCI +		ARCH_NS9XXX || ARCH_DAVINCI || ARCH_MX2  	default y if ARCH_VERSATILE_PB || MACH_VERSATILE_AB || \  		ARCH_OMAP730 || ARCH_OMAP16XX || \  		ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || \ @@ -742,3 +742,11 @@ config CACHE_L2X0  	select OUTER_CACHE  	help  	  This option enables the L2x0 PrimeCell. + +config CACHE_XSC3L2 +	bool "Enable the L2 cache on XScale3" +	depends on CPU_XSC3 +	default y +	select OUTER_CACHE +	help +	  This option enables the L2 cache on XScale3. diff --git a/arch/arm/mm/cache-v3.S b/arch/arm/mm/cache-v3.S index e1994788cf0..3e8d8c79856 100644 --- a/arch/arm/mm/cache-v3.S +++ b/arch/arm/mm/cache-v3.S @@ -9,7 +9,7 @@   */  #include <linux/linkage.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/page.h>  #include "proc-macros.S" diff --git a/arch/arm/mm/cache-v4.S b/arch/arm/mm/cache-v4.S index b2908063ed6..8e23c8d69e7 100644 --- a/arch/arm/mm/cache-v4.S +++ b/arch/arm/mm/cache-v4.S @@ -9,7 +9,7 @@   */  #include <linux/linkage.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/page.h>  #include "proc-macros.S" diff --git a/arch/arm/mm/cache-v4wt.S b/arch/arm/mm/cache-v4wt.S index 9bcabd86c6f..d67829f00ee 100644 --- a/arch/arm/mm/cache-v4wt.S +++ b/arch/arm/mm/cache-v4wt.S @@ -13,7 +13,7 @@   */  #include <linux/linkage.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/page.h>  #include "proc-macros.S" diff --git a/arch/arm/mm/cache-xsc3l2.c b/arch/arm/mm/cache-xsc3l2.c new file mode 100644 index 00000000000..158bd96763d --- /dev/null +++ b/arch/arm/mm/cache-xsc3l2.c @@ -0,0 +1,182 @@ +/* + * arch/arm/mm/cache-xsc3l2.c - XScale3 L2 cache controller support + * + * Copyright (C) 2007 ARM Limited + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include <linux/init.h> +#include <linux/spinlock.h> + +#include <asm/system.h> +#include <asm/cacheflush.h> +#include <asm/io.h> + +#define CR_L2	(1 << 26) + +#define CACHE_LINE_SIZE		32 +#define CACHE_LINE_SHIFT	5 +#define CACHE_WAY_PER_SET	8 + +#define CACHE_WAY_SIZE(l2ctype)	(8192 << (((l2ctype) >> 8) & 0xf)) +#define CACHE_SET_SIZE(l2ctype)	(CACHE_WAY_SIZE(l2ctype) >> CACHE_LINE_SHIFT) + +static inline int xsc3_l2_present(void) +{ +	unsigned long l2ctype; + +	__asm__("mrc p15, 1, %0, c0, c0, 1" : "=r" (l2ctype)); + +	return !!(l2ctype & 0xf8); +} + +static inline void xsc3_l2_clean_mva(unsigned long addr) +{ +	__asm__("mcr p15, 1, %0, c7, c11, 1" : : "r" (addr)); +} + +static inline void xsc3_l2_clean_pa(unsigned long addr) +{ +	xsc3_l2_clean_mva(__phys_to_virt(addr)); +} + +static inline void xsc3_l2_inv_mva(unsigned long addr) +{ +	__asm__("mcr p15, 1, %0, c7, c7, 1" : : "r" (addr)); +} + +static inline void xsc3_l2_inv_pa(unsigned long addr) +{ +	xsc3_l2_inv_mva(__phys_to_virt(addr)); +} + +static inline void xsc3_l2_inv_all(void) +{ +	unsigned long l2ctype, set_way; +	int set, way; + +	__asm__("mrc p15, 1, %0, c0, c0, 1" : "=r" (l2ctype)); + +	for (set = 0; set < CACHE_SET_SIZE(l2ctype); set++) { +		for (way = 0; way < CACHE_WAY_PER_SET; way++) { +			set_way = (way << 29) | (set << 5); +			__asm__("mcr p15, 1, %0, c7, c11, 2" : : "r"(set_way)); +		} +	} + +	dsb(); +} + +static void xsc3_l2_inv_range(unsigned long start, unsigned long end) +{ +	if (start == 0 && end == -1ul) { +		xsc3_l2_inv_all(); +		return; +	} + +	/* +	 * Clean and invalidate partial first cache line. +	 */ +	if (start & (CACHE_LINE_SIZE - 1)) { +		xsc3_l2_clean_pa(start & ~(CACHE_LINE_SIZE - 1)); +		xsc3_l2_inv_pa(start & ~(CACHE_LINE_SIZE - 1)); +		start = (start | (CACHE_LINE_SIZE - 1)) + 1; +	} + +	/* +	 * Clean and invalidate partial last cache line. +	 */ +	if (end & (CACHE_LINE_SIZE - 1)) { +		xsc3_l2_clean_pa(end & ~(CACHE_LINE_SIZE - 1)); +		xsc3_l2_inv_pa(end & ~(CACHE_LINE_SIZE - 1)); +		end &= ~(CACHE_LINE_SIZE - 1); +	} + +	/* +	 * Invalidate all full cache lines between 'start' and 'end'. +	 */ +	while (start != end) { +		xsc3_l2_inv_pa(start); +		start += CACHE_LINE_SIZE; +	} + +	dsb(); +} + +static void xsc3_l2_clean_range(unsigned long start, unsigned long end) +{ +	start &= ~(CACHE_LINE_SIZE - 1); +	while (start < end) { +		xsc3_l2_clean_pa(start); +		start += CACHE_LINE_SIZE; +	} + +	dsb(); +} + +/* + * optimize L2 flush all operation by set/way format + */ +static inline void xsc3_l2_flush_all(void) +{ +	unsigned long l2ctype, set_way; +	int set, way; + +	__asm__("mrc p15, 1, %0, c0, c0, 1" : "=r" (l2ctype)); + +	for (set = 0; set < CACHE_SET_SIZE(l2ctype); set++) { +		for (way = 0; way < CACHE_WAY_PER_SET; way++) { +			set_way = (way << 29) | (set << 5); +			__asm__("mcr p15, 1, %0, c7, c15, 2" : : "r"(set_way)); +		} +	} + +	dsb(); +} + +static void xsc3_l2_flush_range(unsigned long start, unsigned long end) +{ +	if (start == 0 && end == -1ul) { +		xsc3_l2_flush_all(); +		return; +	} + +	start &= ~(CACHE_LINE_SIZE - 1); +	while (start < end) { +		xsc3_l2_clean_pa(start); +		xsc3_l2_inv_pa(start); +		start += CACHE_LINE_SIZE; +	} + +	dsb(); +} + +static int __init xsc3_l2_init(void) +{ +	if (!cpu_is_xsc3() || !xsc3_l2_present()) +		return 0; + +	if (!(get_cr() & CR_L2)) { +		pr_info("XScale3 L2 cache enabled.\n"); +		adjust_cr(CR_L2, CR_L2); +		xsc3_l2_inv_all(); +	} + +	outer_cache.inv_range = xsc3_l2_inv_range; +	outer_cache.clean_range = xsc3_l2_clean_range; +	outer_cache.flush_range = xsc3_l2_flush_range; + +	return 0; +} +core_initcall(xsc3_l2_init); diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index e6352946dde..30a69d67d67 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c @@ -156,9 +156,9 @@ static int __init check_initrd(struct meminfo *mi)  	}  	if (initrd_node == -1) { -		printk(KERN_ERR "initrd (0x%08lx - 0x%08lx) extends beyond " +		printk(KERN_ERR "INITRD: 0x%08lx+0x%08lx extends beyond "  		       "physical memory - disabling initrd\n", -		       phys_initrd_start, end); +		       phys_initrd_start, phys_initrd_size);  		phys_initrd_start = phys_initrd_size = 0;  	}  #endif @@ -239,25 +239,33 @@ bootmem_init_node(int node, int initrd_node, struct meminfo *mi)  	reserve_bootmem_node(pgdat, boot_pfn << PAGE_SHIFT,  			     boot_pages << PAGE_SHIFT, BOOTMEM_DEFAULT); +	/* +	 * Reserve any special node zero regions. +	 */ +	if (node == 0) +		reserve_node_zero(pgdat); +  #ifdef CONFIG_BLK_DEV_INITRD  	/*  	 * If the initrd is in this node, reserve its memory.  	 */  	if (node == initrd_node) { -		reserve_bootmem_node(pgdat, phys_initrd_start, -				     phys_initrd_size, BOOTMEM_DEFAULT); -		initrd_start = __phys_to_virt(phys_initrd_start); -		initrd_end = initrd_start + phys_initrd_size; +		int res = reserve_bootmem_node(pgdat, phys_initrd_start, +				     phys_initrd_size, BOOTMEM_EXCLUSIVE); + +		if (res == 0) { +			initrd_start = __phys_to_virt(phys_initrd_start); +			initrd_end = initrd_start + phys_initrd_size; +		} else { +			printk(KERN_ERR +				"INITRD: 0x%08lx+0x%08lx overlaps in-use " +				"memory region - disabling initrd\n", +				phys_initrd_start, phys_initrd_size); +		}  	}  #endif  	/* -	 * Finally, reserve any node zero regions. -	 */ -	if (node == 0) -		reserve_node_zero(pgdat); - -	/*  	 * initialise the zones within this node.  	 */  	memset(zone_size, 0, sizeof(zone_size)); diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c index 303a7ff6bfd..b81dbf9ffb7 100644 --- a/arch/arm/mm/ioremap.c +++ b/arch/arm/mm/ioremap.c @@ -259,7 +259,7 @@ remap_area_supersections(unsigned long virt, unsigned long pfn,   * caller shouldn't need to know that small detail.   *   * 'flags' are the extra L_PTE_ flags that you want to specify for this - * mapping.  See include/asm-arm/proc-armv/pgtable.h for more information. + * mapping.  See <asm/pgtable.h> for more information.   */  void __iomem *  __arm_ioremap_pfn(unsigned long pfn, unsigned long offset, size_t size, diff --git a/arch/arm/mm/proc-arm720.S b/arch/arm/mm/proc-arm720.S index d64f8e6f75a..eda733d3045 100644 --- a/arch/arm/mm/proc-arm720.S +++ b/arch/arm/mm/proc-arm720.S @@ -231,7 +231,7 @@ cpu_arm720_name:  		.align  /* - * See linux/include/asm-arm/procinfo.h for a definition of this structure. + * See <asm/procinfo.h> for a definition of this structure.   */  		.section ".proc.info.init", #alloc, #execinstr diff --git a/arch/arm/mm/proc-sa110.S b/arch/arm/mm/proc-sa110.S index 9818195dbf1..d05e2358b82 100644 --- a/arch/arm/mm/proc-sa110.S +++ b/arch/arm/mm/proc-sa110.S @@ -18,7 +18,7 @@  #include <asm/assembler.h>  #include <asm/asm-offsets.h>  #include <asm/elf.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/pgtable-hwdef.h>  #include <asm/pgtable.h>  #include <asm/ptrace.h> diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S index c5fe27ad289..56bd3bfa294 100644 --- a/arch/arm/mm/proc-sa1100.S +++ b/arch/arm/mm/proc-sa1100.S @@ -23,7 +23,7 @@  #include <asm/assembler.h>  #include <asm/asm-offsets.h>  #include <asm/elf.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/pgtable-hwdef.h>  #include <asm/pgtable.h> diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S index 3533741a76f..6a0adecfe0e 100644 --- a/arch/arm/mm/proc-xsc3.S +++ b/arch/arm/mm/proc-xsc3.S @@ -28,7 +28,7 @@  #include <linux/init.h>  #include <asm/assembler.h>  #include <asm/elf.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/pgtable.h>  #include <asm/pgtable-hwdef.h>  #include <asm/page.h> @@ -52,11 +52,6 @@  #define CACHESIZE	32768  /* - * Run with L2 enabled. - */ -#define L2_CACHE_ENABLE	1 - -/*   * This macro is used to wait for a CP15 write and is needed when we   * have to ensure that the last operation to the coprocessor was   * completed before continuing with operation. @@ -265,12 +260,9 @@ ENTRY(xsc3_dma_inv_range)  	tst	r0, #CACHELINESIZE - 1  	bic	r0, r0, #CACHELINESIZE - 1  	mcrne	p15, 0, r0, c7, c10, 1		@ clean L1 D line -	mcrne	p15, 1, r0, c7, c11, 1		@ clean L2 line  	tst	r1, #CACHELINESIZE - 1  	mcrne	p15, 0, r1, c7, c10, 1		@ clean L1 D line -	mcrne	p15, 1, r1, c7, c11, 1		@ clean L2 line  1:	mcr	p15, 0, r0, c7, c6, 1		@ invalidate L1 D line -	mcr	p15, 1, r0, c7, c7, 1		@ invalidate L2 line  	add	r0, r0, #CACHELINESIZE  	cmp	r0, r1  	blo	1b @@ -288,7 +280,6 @@ ENTRY(xsc3_dma_inv_range)  ENTRY(xsc3_dma_clean_range)  	bic	r0, r0, #CACHELINESIZE - 1  1:	mcr	p15, 0, r0, c7, c10, 1		@ clean L1 D line -	mcr	p15, 1, r0, c7, c11, 1		@ clean L2 line  	add	r0, r0, #CACHELINESIZE  	cmp	r0, r1  	blo	1b @@ -306,8 +297,6 @@ ENTRY(xsc3_dma_clean_range)  ENTRY(xsc3_dma_flush_range)  	bic	r0, r0, #CACHELINESIZE - 1  1:	mcr	p15, 0, r0, c7, c14, 1		@ clean/invalidate L1 D line -	mcr	p15, 1, r0, c7, c11, 1		@ clean L2 line -	mcr	p15, 1, r0, c7, c7, 1		@ invalidate L2 line  	add	r0, r0, #CACHELINESIZE  	cmp	r0, r1  	blo	1b @@ -347,9 +336,7 @@ ENTRY(cpu_xsc3_switch_mm)  	mcr	p15, 0, ip, c7, c5, 0		@ invalidate L1 I cache and BTB  	mcr	p15, 0, ip, c7, c10, 4		@ data write barrier  	mcr	p15, 0, ip, c7, c5, 4		@ prefetch flush -#ifdef L2_CACHE_ENABLE  	orr	r0, r0, #0x18			@ cache the page table in L2 -#endif  	mcr	p15, 0, r0, c2, c0, 0		@ load page table pointer  	mcr	p15, 0, ip, c8, c7, 0		@ invalidate I and D TLBs  	cpwait_ret lr, ip @@ -378,12 +365,10 @@ ENTRY(cpu_xsc3_set_pte_ext)  	orreq	r2, r2, #PTE_EXT_AP_UNO_SRW	@ yes -> user n/a, system r/w  						@ combined with user -> user r/w -#if L2_CACHE_ENABLE  	@ If it's cacheable, it needs to be in L2 also.  	eor	ip, r1, #L_PTE_CACHEABLE  	tst	ip, #L_PTE_CACHEABLE  	orreq	r2, r2, #PTE_EXT_TEX(0x5) -#endif  	tst	r3, #L_PTE_PRESENT | L_PTE_YOUNG	@ present and young?  	movne	r2, #0				@ no -> fault @@ -408,9 +393,7 @@ __xsc3_setup:  	mcr	p15, 0, ip, c7, c10, 4		@ data write barrier  	mcr	p15, 0, ip, c7, c5, 4		@ prefetch flush  	mcr	p15, 0, ip, c8, c7, 0		@ invalidate I and D TLBs -#if L2_CACHE_ENABLE  	orr	r4, r4, #0x18			@ cache the page table in L2 -#endif  	mcr	p15, 0, r4, c2, c0, 0		@ load page table pointer  	mov	r0, #0				@ don't allow CP access @@ -418,9 +401,7 @@ __xsc3_setup:  	mrc	p15, 0, r0, c1, c0, 1		@ get auxiliary control reg  	and	r0, r0, #2			@ preserve bit P bit setting -#if L2_CACHE_ENABLE  	orr	r0, r0, #(1 << 10)		@ enable L2 for LLR cache -#endif  	mcr	p15, 0, r0, c1, c0, 1		@ set auxiliary control reg  	adr	r5, xsc3_crval @@ -429,9 +410,6 @@ __xsc3_setup:  	bic	r0, r0, r5			@ ..V. ..R. .... ..A.  	orr	r0, r0, r6			@ ..VI Z..S .... .C.M (mmu)  						@ ...I Z..S .... .... (uc) -#if L2_CACHE_ENABLE -	orr 	r0, r0, #0x04000000		@ L2 enable -#endif  	mov	pc, lr  	.size	__xsc3_setup, . - __xsc3_setup diff --git a/arch/arm/nwfpe/fpa11.h b/arch/arm/nwfpe/fpa11.h index 4a4d02c0911..386cbd13eaf 100644 --- a/arch/arm/nwfpe/fpa11.h +++ b/arch/arm/nwfpe/fpa11.h @@ -69,7 +69,7 @@ typedef union tagFPREG {   * This structure is exported to user space.  Do not re-order.   * Only add new stuff to the end, and do not change the size of   * any element.  Elements of this structure are used by user - * space, and must match struct user_fp in include/asm-arm/user.h. + * space, and must match struct user_fp in <asm/user.h>.   * We include the byte offsets below for documentation purposes.   *   * The size of this structure and FPREG are checked by fpmodule.c diff --git a/arch/arm/oprofile/op_model_mpcore.c b/arch/arm/oprofile/op_model_mpcore.c index 4458705021e..65e26c17f8a 100644 --- a/arch/arm/oprofile/op_model_mpcore.c +++ b/arch/arm/oprofile/op_model_mpcore.c @@ -40,7 +40,7 @@  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/system.h>  #include "op_counter.h" diff --git a/arch/arm/plat-iop/i2c.c b/arch/arm/plat-iop/i2c.c index e99909bdba7..b7b8fcb9108 100644 --- a/arch/arm/plat-iop/i2c.c +++ b/arch/arm/plat-iop/i2c.c @@ -25,9 +25,8 @@  #include <asm/setup.h>  #include <asm/system.h>  #include <asm/memory.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/iop3xx.h> -#include <asm/mach-types.h>  #include <asm/mach/arch.h>  #ifdef CONFIG_ARCH_IOP32X diff --git a/arch/arm/plat-iop/io.c b/arch/arm/plat-iop/io.c index 498675d028d..c30d1885af3 100644 --- a/arch/arm/plat-iop/io.c +++ b/arch/arm/plat-iop/io.c @@ -18,7 +18,7 @@   */  #include <linux/kernel.h>  #include <linux/module.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  void * __iomem __iop3xx_ioremap(unsigned long cookie, size_t size, diff --git a/arch/arm/plat-iop/pci.c b/arch/arm/plat-iop/pci.c index d9bc15a69e5..e32054fbe52 100644 --- a/arch/arm/plat-iop/pci.c +++ b/arch/arm/plat-iop/pci.c @@ -21,10 +21,9 @@  #include <asm/irq.h>  #include <asm/signal.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/pci.h>  #include <asm/hardware/iop3xx.h> -#include <asm/mach-types.h>  // #define DEBUG diff --git a/arch/arm/plat-iop/time.c b/arch/arm/plat-iop/time.c index 6fe481ff4fd..da9e82441c5 100644 --- a/arch/arm/plat-iop/time.c +++ b/arch/arm/plat-iop/time.c @@ -18,7 +18,7 @@  #include <linux/time.h>  #include <linux/init.h>  #include <linux/timex.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/uaccess.h> diff --git a/arch/arm/plat-mxc/gpio.c b/arch/arm/plat-mxc/gpio.c index 318b268f938..73d30463364 100644 --- a/arch/arm/plat-mxc/gpio.c +++ b/arch/arm/plat-mxc/gpio.c @@ -23,7 +23,7 @@  #include <linux/io.h>  #include <linux/irq.h>  #include <linux/gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm-generic/bug.h>  static struct mxc_gpio_port *mxc_gpio_ports; diff --git a/arch/arm/plat-mxc/iomux-mx1-mx2.c b/arch/arm/plat-mxc/iomux-mx1-mx2.c index 1985571eb40..1204456d61a 100644 --- a/arch/arm/plat-mxc/iomux-mx1-mx2.c +++ b/arch/arm/plat-mxc/iomux-mx1-mx2.c @@ -30,7 +30,7 @@  #include <linux/string.h>  #include <linux/gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/map.h>  #include <asm/arch/iomux-mx1-mx2.h> diff --git a/arch/arm/plat-mxc/time.c b/arch/arm/plat-mxc/time.c index 3bf86343fdf..be9680a88b0 100644 --- a/arch/arm/plat-mxc/time.c +++ b/arch/arm/plat-mxc/time.c @@ -26,7 +26,7 @@  #include <linux/clockchips.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/time.h>  #include <asm/arch/common.h>  #include <asm/arch/mxc_timer.h> diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c index 8d04929a3c7..6a955296e8c 100644 --- a/arch/arm/plat-omap/common.c +++ b/arch/arm/plat-omap/common.c @@ -19,7 +19,7 @@  #include <linux/serial_reg.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/system.h>  #include <asm/pgtable.h>  #include <asm/mach/map.h> diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c index d719c15daa5..3c8ef1ac5f3 100644 --- a/arch/arm/plat-omap/cpu-omap.c +++ b/arch/arm/plat-omap/cpu-omap.c @@ -21,7 +21,7 @@  #include <linux/err.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/system.h> diff --git a/arch/arm/plat-omap/debug-devices.c b/arch/arm/plat-omap/debug-devices.c index f455233af08..7228ef8534b 100644 --- a/arch/arm/plat-omap/debug-devices.c +++ b/arch/arm/plat-omap/debug-devices.c @@ -13,7 +13,7 @@  #include <linux/init.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/board.h> diff --git a/arch/arm/plat-omap/debug-leds.c b/arch/arm/plat-omap/debug-leds.c index 9128a80d228..a47695c3171 100644 --- a/arch/arm/plat-omap/debug-leds.c +++ b/arch/arm/plat-omap/debug-leds.c @@ -13,7 +13,7 @@  #include <linux/leds.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/system.h>  #include <asm/mach-types.h> diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c index 81002b722da..9b4240b9d65 100644 --- a/arch/arm/plat-omap/devices.c +++ b/arch/arm/plat-omap/devices.c @@ -14,7 +14,7 @@  #include <linux/init.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach-types.h>  #include <asm/mach/map.h> diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index fac8e994f58..69450d61cf4 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c @@ -28,7 +28,7 @@  #include <linux/io.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/dma.h>  #include <asm/arch/tc.h> diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index f22506af0e6..30b6f2c9cb3 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c @@ -32,7 +32,7 @@  #include <linux/list.h>  #include <linux/clk.h>  #include <linux/delay.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/dmtimer.h>  #include <asm/io.h>  #include <asm/arch/irqs.h> diff --git a/arch/arm/plat-omap/fb.c b/arch/arm/plat-omap/fb.c index 5d107520e6b..b0b3c5419b0 100644 --- a/arch/arm/plat-omap/fb.c +++ b/arch/arm/plat-omap/fb.c @@ -28,9 +28,8 @@  #include <linux/platform_device.h>  #include <linux/bootmem.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h> -#include <asm/mach-types.h>  #include <asm/mach/map.h>  #include <asm/arch/board.h> diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index 63e094342ef..7112b5db4a3 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c @@ -18,7 +18,7 @@  #include <linux/err.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/arch/irqs.h>  #include <asm/arch/gpio.h> diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c index 7990ab185bb..647ed5971c6 100644 --- a/arch/arm/plat-omap/i2c.c +++ b/arch/arm/plat-omap/i2c.c @@ -26,7 +26,6 @@  #include <linux/kernel.h>  #include <linux/platform_device.h>  #include <linux/i2c.h> -#include <asm/mach-types.h>  #include <asm/arch/mux.h>  #define OMAP_I2C_SIZE		0x3f diff --git a/arch/arm/plat-omap/ocpi.c b/arch/arm/plat-omap/ocpi.c index b5d307026c8..005261a4e72 100644 --- a/arch/arm/plat-omap/ocpi.c +++ b/arch/arm/plat-omap/ocpi.c @@ -33,7 +33,7 @@  #include <linux/clk.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define OCPI_BASE		0xfffec320  #define OCPI_FAULT		(OCPI_BASE + 0x00) diff --git a/arch/arm/plat-omap/usb.c b/arch/arm/plat-omap/usb.c index 2699c16d4da..359912ffed7 100644 --- a/arch/arm/plat-omap/usb.c +++ b/arch/arm/plat-omap/usb.c @@ -31,7 +31,7 @@  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/system.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/control.h>  #include <asm/arch/mux.h> diff --git a/arch/arm/plat-s3c24xx/clock.c b/arch/arm/plat-s3c24xx/clock.c index 3ac8d8d781b..373d0435848 100644 --- a/arch/arm/plat-s3c24xx/clock.c +++ b/arch/arm/plat-s3c24xx/clock.c @@ -40,7 +40,7 @@  #include <linux/mutex.h>  #include <linux/delay.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/plat-s3c24xx/common-smdk.c b/arch/arm/plat-s3c24xx/common-smdk.c index 398c7ac2529..a608aa38882 100644 --- a/arch/arm/plat-s3c24xx/common-smdk.c +++ b/arch/arm/plat-s3c24xx/common-smdk.c @@ -31,7 +31,7 @@  #include <asm/mach/irq.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/plat-s3c24xx/cpu.c b/arch/arm/plat-s3c24xx/cpu.c index f5699cadb0c..05a1d9cc280 100644 --- a/arch/arm/plat-s3c24xx/cpu.c +++ b/arch/arm/plat-s3c24xx/cpu.c @@ -30,7 +30,7 @@  #include <linux/platform_device.h>  #include <linux/delay.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h>  #include <asm/delay.h> diff --git a/arch/arm/plat-s3c24xx/devs.c b/arch/arm/plat-s3c24xx/devs.c index eea3b32ff79..5c6f446a1fa 100644 --- a/arch/arm/plat-s3c24xx/devs.c +++ b/arch/arm/plat-s3c24xx/devs.c @@ -24,7 +24,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h>  #include <asm/arch/fb.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/plat-s3c24xx/dma.c b/arch/arm/plat-s3c24xx/dma.c index 8c5e656d5d8..8ae5719d6b3 100644 --- a/arch/arm/plat-s3c24xx/dma.c +++ b/arch/arm/plat-s3c24xx/dma.c @@ -29,7 +29,7 @@  #include <asm/system.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/dma.h> diff --git a/arch/arm/plat-s3c24xx/gpio.c b/arch/arm/plat-s3c24xx/gpio.c index ee99dcc7f0b..ace8bec5de5 100644 --- a/arch/arm/plat-s3c24xx/gpio.c +++ b/arch/arm/plat-s3c24xx/gpio.c @@ -27,7 +27,7 @@  #include <linux/interrupt.h>  #include <linux/ioport.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/plat-s3c24xx/gpiolib.c b/arch/arm/plat-s3c24xx/gpiolib.c index 825d8d0c5ca..6dd5211c9c6 100644 --- a/arch/arm/plat-s3c24xx/gpiolib.c +++ b/arch/arm/plat-s3c24xx/gpiolib.c @@ -19,7 +19,7 @@  #include <linux/io.h>  #include <linux/gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/arch/regs-gpio.h> diff --git a/arch/arm/plat-s3c24xx/irq.c b/arch/arm/plat-s3c24xx/irq.c index 001436c04b1..f524d765c8a 100644 --- a/arch/arm/plat-s3c24xx/irq.c +++ b/arch/arm/plat-s3c24xx/irq.c @@ -56,7 +56,7 @@  #include <linux/ioport.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/plat-s3c24xx/pm-simtec.c b/arch/arm/plat-s3c24xx/pm-simtec.c index cb0b3a4ccf1..9919419e327 100644 --- a/arch/arm/plat-s3c24xx/pm-simtec.c +++ b/arch/arm/plat-s3c24xx/pm-simtec.c @@ -24,7 +24,7 @@  #include <asm/mach/arch.h>  #include <asm/mach/map.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/map.h> diff --git a/arch/arm/plat-s3c24xx/pm.c b/arch/arm/plat-s3c24xx/pm.c index bf5581a9aee..0d044bcbe1a 100644 --- a/arch/arm/plat-s3c24xx/pm.c +++ b/arch/arm/plat-s3c24xx/pm.c @@ -37,7 +37,7 @@  #include <linux/serial_core.h>  #include <asm/cacheflush.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/plat-s3c/regs-serial.h> diff --git a/arch/arm/plat-s3c24xx/pwm-clock.c b/arch/arm/plat-s3c24xx/pwm-clock.c index 2cda3e3c678..489e32abf3a 100644 --- a/arch/arm/plat-s3c24xx/pwm-clock.c +++ b/arch/arm/plat-s3c24xx/pwm-clock.c @@ -18,7 +18,7 @@  #include <linux/err.h>  #include <linux/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/arch/regs-clock.h> diff --git a/arch/arm/plat-s3c24xx/s3c244x-clock.c b/arch/arm/plat-s3c24xx/s3c244x-clock.c index faf3e0f9f4e..a811e8b6d45 100644 --- a/arch/arm/plat-s3c24xx/s3c244x-clock.c +++ b/arch/arm/plat-s3c24xx/s3c244x-clock.c @@ -34,7 +34,7 @@  #include <linux/mutex.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/atomic.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/plat-s3c24xx/s3c244x-irq.c b/arch/arm/plat-s3c24xx/s3c244x-irq.c index 2dbb2606d44..2eefe16bd2a 100644 --- a/arch/arm/plat-s3c24xx/s3c244x-irq.c +++ b/arch/arm/plat-s3c24xx/s3c244x-irq.c @@ -25,7 +25,7 @@  #include <linux/ioport.h>  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/arch/arm/plat-s3c24xx/s3c244x.c b/arch/arm/plat-s3c24xx/s3c244x.c index 2f01af5f64c..eb9dd4f9b8e 100644 --- a/arch/arm/plat-s3c24xx/s3c244x.c +++ b/arch/arm/plat-s3c24xx/s3c244x.c @@ -25,7 +25,7 @@  #include <asm/mach/map.h>  #include <asm/mach/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/arch/arm/plat-s3c24xx/sleep.S b/arch/arm/plat-s3c24xx/sleep.S index a646cbe8244..4f8756e19bb 100644 --- a/arch/arm/plat-s3c24xx/sleep.S +++ b/arch/arm/plat-s3c24xx/sleep.S @@ -26,7 +26,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/map.h>  #include <asm/arch/regs-gpio.h> diff --git a/arch/arm/tools/Makefile b/arch/arm/tools/Makefile index c2a4993a724..1dbaa29ac4d 100644 --- a/arch/arm/tools/Makefile +++ b/arch/arm/tools/Makefile @@ -6,4 +6,5 @@  include/asm-arm/mach-types.h: $(src)/gen-mach-types $(src)/mach-types  	@echo '  Generating $@' +	@mkdir -p $(dir $@)  	$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; } diff --git a/arch/m68k/mac/baboon.c b/arch/m68k/mac/baboon.c index dae9c982aa8..c7b25b0aacf 100644 --- a/arch/m68k/mac/baboon.c +++ b/arch/m68k/mac/baboon.c @@ -11,7 +11,6 @@  #include <linux/mm.h>  #include <linux/delay.h>  #include <linux/init.h> -#include <linux/ide.h>  #include <asm/traps.h>  #include <asm/bootinfo.h> diff --git a/arch/m68k/mac/via.c b/arch/m68k/mac/via.c index f3b27d04a31..1bdb03c73c0 100644 --- a/arch/m68k/mac/via.c +++ b/arch/m68k/mac/via.c @@ -27,7 +27,6 @@  #include <linux/mm.h>  #include <linux/delay.h>  #include <linux/init.h> -#include <linux/ide.h>  #include <linux/module.h>  #include <asm/bootinfo.h> diff --git a/arch/mips/emma2rh/markeins/setup.c b/arch/mips/emma2rh/markeins/setup.c index a56c4b804b0..822a20e21fa 100644 --- a/arch/mips/emma2rh/markeins/setup.c +++ b/arch/mips/emma2rh/markeins/setup.c @@ -27,7 +27,6 @@  #include <linux/types.h>  #include <linux/initrd.h>  #include <linux/irq.h> -#include <linux/ide.h>  #include <linux/ioport.h>  #include <linux/param.h>	/* for HZ */  #include <linux/root_dev.h> diff --git a/arch/mips/jazz/setup.c b/arch/mips/jazz/setup.c index f60524e8bc4..b59ba6b93cd 100644 --- a/arch/mips/jazz/setup.c +++ b/arch/mips/jazz/setup.c @@ -10,7 +10,6 @@   * Copyright (C) 2007 by Thomas Bogendoerfer   */  #include <linux/eisa.h> -#include <linux/hdreg.h>  #include <linux/init.h>  #include <linux/ioport.h>  #include <linux/sched.h> @@ -18,7 +17,6 @@  #include <linux/mm.h>  #include <linux/console.h>  #include <linux/fb.h> -#include <linux/ide.h>  #include <linux/pm.h>  #include <linux/screen_info.h>  #include <linux/platform_device.h> diff --git a/arch/mn10300/kernel/module.c b/arch/mn10300/kernel/module.c index 0e4d2f6fa6e..8fa36893df7 100644 --- a/arch/mn10300/kernel/module.c +++ b/arch/mn10300/kernel/module.c @@ -24,6 +24,7 @@  #include <linux/fs.h>  #include <linux/string.h>  #include <linux/kernel.h> +#include <linux/bug.h>  #if 0  #define DEBUGP printk @@ -195,7 +196,7 @@ int module_finalize(const Elf_Ehdr *hdr,  		    const Elf_Shdr *sechdrs,  		    struct module *me)  { -	return 0; +	return module_bug_finalize(hdr, sechdrs, me);  }  /* @@ -203,4 +204,5 @@ int module_finalize(const Elf_Ehdr *hdr,   */  void module_arch_cleanup(struct module *mod)  { +	module_bug_cleanup(mod);  } diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug index 8c8aadbe956..4ebc52a19f0 100644 --- a/arch/powerpc/Kconfig.debug +++ b/arch/powerpc/Kconfig.debug @@ -97,7 +97,7 @@ config IRQSTACKS  config VIRQ_DEBUG  	bool "Expose hardware/virtual IRQ mapping via debugfs" -	depends on DEBUG_FS && PPC_MERGE +	depends on DEBUG_FS  	help  	  This option will show the mapping relationship between hardware irq  	  numbers and virtual irq numbers. The mapping is exposed via debugfs diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts index 666185f5945..3b3a1062cb2 100644 --- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts +++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts @@ -202,6 +202,11 @@  			fsl,has-rstcr;  		}; +		wdt@e4000 { +			compatible = "fsl,mpc8610-wdt"; +			reg = <0xe4000 0x100>; +		}; +  		i2s@16000 {  			compatible = "fsl,mpc8610-ssi";  			cell-index = <0>; diff --git a/arch/powerpc/boot/io.h b/arch/powerpc/boot/io.h index ccaedaec50d..7c09f4861fe 100644 --- a/arch/powerpc/boot/io.h +++ b/arch/powerpc/boot/io.h @@ -6,7 +6,7 @@  /*   * Low-level I/O routines.   * - * Copied from <file:include/asm-powerpc/io.h> (which has no copyright) + * Copied from <file:arch/powerpc/include/asm/io.h> (which has no copyright)   */  static inline int in_8(const volatile unsigned char *addr)  { diff --git a/include/asm-powerpc/8253pit.h b/arch/powerpc/include/asm/8253pit.h index b70d6e53b30..b70d6e53b30 100644 --- a/include/asm-powerpc/8253pit.h +++ b/arch/powerpc/include/asm/8253pit.h diff --git a/include/asm-powerpc/8xx_immap.h b/arch/powerpc/include/asm/8xx_immap.h index 4b0e1520600..4b0e1520600 100644 --- a/include/asm-powerpc/8xx_immap.h +++ b/arch/powerpc/include/asm/8xx_immap.h diff --git a/include/asm-powerpc/Kbuild b/arch/powerpc/include/asm/Kbuild index 5ab7d7fe198..5ab7d7fe198 100644 --- a/include/asm-powerpc/Kbuild +++ b/arch/powerpc/include/asm/Kbuild diff --git a/include/asm-powerpc/a.out.h b/arch/powerpc/include/asm/a.out.h index 89cead6b176..89cead6b176 100644 --- a/include/asm-powerpc/a.out.h +++ b/arch/powerpc/include/asm/a.out.h diff --git a/include/asm-powerpc/abs_addr.h b/arch/powerpc/include/asm/abs_addr.h index 98324c5a828..98324c5a828 100644 --- a/include/asm-powerpc/abs_addr.h +++ b/arch/powerpc/include/asm/abs_addr.h diff --git a/include/asm-powerpc/agp.h b/arch/powerpc/include/asm/agp.h index 86455c4c31e..86455c4c31e 100644 --- a/include/asm-powerpc/agp.h +++ b/arch/powerpc/include/asm/agp.h diff --git a/include/asm-powerpc/asm-compat.h b/arch/powerpc/include/asm/asm-compat.h index 8f0fe797194..8f0fe797194 100644 --- a/include/asm-powerpc/asm-compat.h +++ b/arch/powerpc/include/asm/asm-compat.h diff --git a/include/asm-powerpc/atomic.h b/arch/powerpc/include/asm/atomic.h index f3fc733758f..f3fc733758f 100644 --- a/include/asm-powerpc/atomic.h +++ b/arch/powerpc/include/asm/atomic.h diff --git a/include/asm-powerpc/auxvec.h b/arch/powerpc/include/asm/auxvec.h index 19a099b62cd..19a099b62cd 100644 --- a/include/asm-powerpc/auxvec.h +++ b/arch/powerpc/include/asm/auxvec.h diff --git a/include/asm-powerpc/backlight.h b/arch/powerpc/include/asm/backlight.h index 8cf5c37c381..8cf5c37c381 100644 --- a/include/asm-powerpc/backlight.h +++ b/arch/powerpc/include/asm/backlight.h diff --git a/include/asm-powerpc/bitops.h b/arch/powerpc/include/asm/bitops.h index 897eade3afb..897eade3afb 100644 --- a/include/asm-powerpc/bitops.h +++ b/arch/powerpc/include/asm/bitops.h diff --git a/include/asm-powerpc/bootx.h b/arch/powerpc/include/asm/bootx.h index 57b82e3f89c..57b82e3f89c 100644 --- a/include/asm-powerpc/bootx.h +++ b/arch/powerpc/include/asm/bootx.h diff --git a/include/asm-powerpc/btext.h b/arch/powerpc/include/asm/btext.h index 906f46e3100..906f46e3100 100644 --- a/include/asm-powerpc/btext.h +++ b/arch/powerpc/include/asm/btext.h diff --git a/include/asm-powerpc/bug.h b/arch/powerpc/include/asm/bug.h index e55d1f66b86..e55d1f66b86 100644 --- a/include/asm-powerpc/bug.h +++ b/arch/powerpc/include/asm/bug.h diff --git a/include/asm-powerpc/bugs.h b/arch/powerpc/include/asm/bugs.h index 42fdb73e306..42fdb73e306 100644 --- a/include/asm-powerpc/bugs.h +++ b/arch/powerpc/include/asm/bugs.h diff --git a/include/asm-powerpc/byteorder.h b/arch/powerpc/include/asm/byteorder.h index b37752214a1..b37752214a1 100644 --- a/include/asm-powerpc/byteorder.h +++ b/arch/powerpc/include/asm/byteorder.h diff --git a/include/asm-powerpc/cache.h b/arch/powerpc/include/asm/cache.h index 81de6eb3455..81de6eb3455 100644 --- a/include/asm-powerpc/cache.h +++ b/arch/powerpc/include/asm/cache.h diff --git a/include/asm-powerpc/cacheflush.h b/arch/powerpc/include/asm/cacheflush.h index ba667a383b8..ba667a383b8 100644 --- a/include/asm-powerpc/cacheflush.h +++ b/arch/powerpc/include/asm/cacheflush.h diff --git a/include/asm-powerpc/cell-pmu.h b/arch/powerpc/include/asm/cell-pmu.h index 8066eede3a0..8066eede3a0 100644 --- a/include/asm-powerpc/cell-pmu.h +++ b/arch/powerpc/include/asm/cell-pmu.h diff --git a/include/asm-powerpc/cell-regs.h b/arch/powerpc/include/asm/cell-regs.h index fd6fd00434e..fd6fd00434e 100644 --- a/include/asm-powerpc/cell-regs.h +++ b/arch/powerpc/include/asm/cell-regs.h diff --git a/include/asm-powerpc/checksum.h b/arch/powerpc/include/asm/checksum.h index 7cdf358337c..7cdf358337c 100644 --- a/include/asm-powerpc/checksum.h +++ b/arch/powerpc/include/asm/checksum.h diff --git a/include/asm-powerpc/clk_interface.h b/arch/powerpc/include/asm/clk_interface.h index ab1882c1e17..ab1882c1e17 100644 --- a/include/asm-powerpc/clk_interface.h +++ b/arch/powerpc/include/asm/clk_interface.h diff --git a/include/asm-powerpc/code-patching.h b/arch/powerpc/include/asm/code-patching.h index 107d9b915e3..107d9b915e3 100644 --- a/include/asm-powerpc/code-patching.h +++ b/arch/powerpc/include/asm/code-patching.h diff --git a/include/asm-powerpc/compat.h b/arch/powerpc/include/asm/compat.h index d811a8cd7b5..d811a8cd7b5 100644 --- a/include/asm-powerpc/compat.h +++ b/arch/powerpc/include/asm/compat.h diff --git a/include/asm-powerpc/cpm.h b/arch/powerpc/include/asm/cpm.h index 24d79e3abd8..24d79e3abd8 100644 --- a/include/asm-powerpc/cpm.h +++ b/arch/powerpc/include/asm/cpm.h diff --git a/include/asm-powerpc/cpm1.h b/arch/powerpc/include/asm/cpm1.h index 2ff798744c1..2ff798744c1 100644 --- a/include/asm-powerpc/cpm1.h +++ b/arch/powerpc/include/asm/cpm1.h diff --git a/include/asm-powerpc/cpm2.h b/arch/powerpc/include/asm/cpm2.h index 2a6fa0183ac..2a6fa0183ac 100644 --- a/include/asm-powerpc/cpm2.h +++ b/arch/powerpc/include/asm/cpm2.h diff --git a/include/asm-powerpc/cputable.h b/arch/powerpc/include/asm/cputable.h index ef8a248dfd5..ef8a248dfd5 100644 --- a/include/asm-powerpc/cputable.h +++ b/arch/powerpc/include/asm/cputable.h diff --git a/include/asm-powerpc/cputhreads.h b/arch/powerpc/include/asm/cputhreads.h index fb11b0c459b..fb11b0c459b 100644 --- a/include/asm-powerpc/cputhreads.h +++ b/arch/powerpc/include/asm/cputhreads.h diff --git a/include/asm-powerpc/cputime.h b/arch/powerpc/include/asm/cputime.h index f42e623030e..f42e623030e 100644 --- a/include/asm-powerpc/cputime.h +++ b/arch/powerpc/include/asm/cputime.h diff --git a/include/asm-powerpc/current.h b/arch/powerpc/include/asm/current.h index e2c7f06931e..e2c7f06931e 100644 --- a/include/asm-powerpc/current.h +++ b/arch/powerpc/include/asm/current.h diff --git a/include/asm-powerpc/dbdma.h b/arch/powerpc/include/asm/dbdma.h index e23f07e73cb..e23f07e73cb 100644 --- a/include/asm-powerpc/dbdma.h +++ b/arch/powerpc/include/asm/dbdma.h diff --git a/include/asm-powerpc/dcr-generic.h b/arch/powerpc/include/asm/dcr-generic.h index 35b71599ec4..35b71599ec4 100644 --- a/include/asm-powerpc/dcr-generic.h +++ b/arch/powerpc/include/asm/dcr-generic.h diff --git a/include/asm-powerpc/dcr-mmio.h b/arch/powerpc/include/asm/dcr-mmio.h index acd491dbd45..acd491dbd45 100644 --- a/include/asm-powerpc/dcr-mmio.h +++ b/arch/powerpc/include/asm/dcr-mmio.h diff --git a/include/asm-powerpc/dcr-native.h b/arch/powerpc/include/asm/dcr-native.h index 72d2b72c739..72d2b72c739 100644 --- a/include/asm-powerpc/dcr-native.h +++ b/arch/powerpc/include/asm/dcr-native.h diff --git a/include/asm-powerpc/dcr-regs.h b/arch/powerpc/include/asm/dcr-regs.h index 29b0ecef980..29b0ecef980 100644 --- a/include/asm-powerpc/dcr-regs.h +++ b/arch/powerpc/include/asm/dcr-regs.h diff --git a/include/asm-powerpc/dcr.h b/arch/powerpc/include/asm/dcr.h index 53b283050ab..d13fb68bb5c 100644 --- a/include/asm-powerpc/dcr.h +++ b/arch/powerpc/include/asm/dcr.h @@ -65,17 +65,13 @@ typedef dcr_host_mmio_t dcr_host_t;  #endif /* defined(CONFIG_PPC_DCR_NATIVE) && defined(CONFIG_PPC_DCR_MMIO) */  /* - * On CONFIG_PPC_MERGE, we have additional helpers to read the DCR - * base from the device-tree + * additional helpers to read the DCR * base from the device-tree   */ -#ifdef CONFIG_PPC_MERGE  struct device_node;  extern unsigned int dcr_resource_start(struct device_node *np,  				       unsigned int index);  extern unsigned int dcr_resource_len(struct device_node *np,  				     unsigned int index); -#endif /* CONFIG_PPC_MERGE */ -  #endif /* CONFIG_PPC_DCR */  #endif /* __ASSEMBLY__ */  #endif /* __KERNEL__ */ diff --git a/include/asm-powerpc/delay.h b/arch/powerpc/include/asm/delay.h index f9200a65c63..f9200a65c63 100644 --- a/include/asm-powerpc/delay.h +++ b/arch/powerpc/include/asm/delay.h diff --git a/include/asm-powerpc/device.h b/arch/powerpc/include/asm/device.h index 228ab2a315b..228ab2a315b 100644 --- a/include/asm-powerpc/device.h +++ b/arch/powerpc/include/asm/device.h diff --git a/include/asm-powerpc/div64.h b/arch/powerpc/include/asm/div64.h index 6cd978cefb2..6cd978cefb2 100644 --- a/include/asm-powerpc/div64.h +++ b/arch/powerpc/include/asm/div64.h diff --git a/include/asm-powerpc/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index c7ca45f97dd..c7ca45f97dd 100644 --- a/include/asm-powerpc/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h diff --git a/include/asm-powerpc/dma.h b/arch/powerpc/include/asm/dma.h index a7e06e25c70..a7e06e25c70 100644 --- a/include/asm-powerpc/dma.h +++ b/arch/powerpc/include/asm/dma.h diff --git a/include/asm-powerpc/edac.h b/arch/powerpc/include/asm/edac.h index 6ead88bbfbb..6ead88bbfbb 100644 --- a/include/asm-powerpc/edac.h +++ b/arch/powerpc/include/asm/edac.h diff --git a/include/asm-powerpc/eeh.h b/arch/powerpc/include/asm/eeh.h index b886bec6701..b886bec6701 100644 --- a/include/asm-powerpc/eeh.h +++ b/arch/powerpc/include/asm/eeh.h diff --git a/include/asm-powerpc/eeh_event.h b/arch/powerpc/include/asm/eeh_event.h index cc3cb04539a..cc3cb04539a 100644 --- a/include/asm-powerpc/eeh_event.h +++ b/arch/powerpc/include/asm/eeh_event.h diff --git a/include/asm-powerpc/elf.h b/arch/powerpc/include/asm/elf.h index 80d1f399ee5..80d1f399ee5 100644 --- a/include/asm-powerpc/elf.h +++ b/arch/powerpc/include/asm/elf.h diff --git a/include/asm-powerpc/emergency-restart.h b/arch/powerpc/include/asm/emergency-restart.h index 3711bd9d50b..3711bd9d50b 100644 --- a/include/asm-powerpc/emergency-restart.h +++ b/arch/powerpc/include/asm/emergency-restart.h diff --git a/include/asm-powerpc/errno.h b/arch/powerpc/include/asm/errno.h index 8c145fd17d8..8c145fd17d8 100644 --- a/include/asm-powerpc/errno.h +++ b/arch/powerpc/include/asm/errno.h diff --git a/include/asm-powerpc/exception.h b/arch/powerpc/include/asm/exception.h index 329148b5acc..329148b5acc 100644 --- a/include/asm-powerpc/exception.h +++ b/arch/powerpc/include/asm/exception.h diff --git a/include/asm-powerpc/fb.h b/arch/powerpc/include/asm/fb.h index 411af8d17a6..411af8d17a6 100644 --- a/include/asm-powerpc/fb.h +++ b/arch/powerpc/include/asm/fb.h diff --git a/include/asm-powerpc/fcntl.h b/arch/powerpc/include/asm/fcntl.h index ce5c4516d40..ce5c4516d40 100644 --- a/include/asm-powerpc/fcntl.h +++ b/arch/powerpc/include/asm/fcntl.h diff --git a/include/asm-powerpc/feature-fixups.h b/arch/powerpc/include/asm/feature-fixups.h index a1029967620..a1029967620 100644 --- a/include/asm-powerpc/feature-fixups.h +++ b/arch/powerpc/include/asm/feature-fixups.h diff --git a/include/asm-powerpc/firmware.h b/arch/powerpc/include/asm/firmware.h index 3a179827528..3a179827528 100644 --- a/include/asm-powerpc/firmware.h +++ b/arch/powerpc/include/asm/firmware.h diff --git a/include/asm-powerpc/fixmap.h b/arch/powerpc/include/asm/fixmap.h index 8428b38a3d3..8428b38a3d3 100644 --- a/include/asm-powerpc/fixmap.h +++ b/arch/powerpc/include/asm/fixmap.h diff --git a/include/asm-powerpc/floppy.h b/arch/powerpc/include/asm/floppy.h index 24bd34c57e9..24bd34c57e9 100644 --- a/include/asm-powerpc/floppy.h +++ b/arch/powerpc/include/asm/floppy.h diff --git a/include/asm-powerpc/fs_pd.h b/arch/powerpc/include/asm/fs_pd.h index 9361cd5342c..9361cd5342c 100644 --- a/include/asm-powerpc/fs_pd.h +++ b/arch/powerpc/include/asm/fs_pd.h diff --git a/include/asm-powerpc/fsl_gtm.h b/arch/powerpc/include/asm/fsl_gtm.h index 8e8c9b5032d..8e8c9b5032d 100644 --- a/include/asm-powerpc/fsl_gtm.h +++ b/arch/powerpc/include/asm/fsl_gtm.h diff --git a/include/asm-powerpc/fsl_lbc.h b/arch/powerpc/include/asm/fsl_lbc.h index 303f5484c05..303f5484c05 100644 --- a/include/asm-powerpc/fsl_lbc.h +++ b/arch/powerpc/include/asm/fsl_lbc.h diff --git a/include/asm-powerpc/ftrace.h b/arch/powerpc/include/asm/ftrace.h index de921326cca..de921326cca 100644 --- a/include/asm-powerpc/ftrace.h +++ b/arch/powerpc/include/asm/ftrace.h diff --git a/include/asm-powerpc/futex.h b/arch/powerpc/include/asm/futex.h index 6d406c5c5de..6d406c5c5de 100644 --- a/include/asm-powerpc/futex.h +++ b/arch/powerpc/include/asm/futex.h diff --git a/include/asm-powerpc/gpio.h b/arch/powerpc/include/asm/gpio.h index ea04632399d..ea04632399d 100644 --- a/include/asm-powerpc/gpio.h +++ b/arch/powerpc/include/asm/gpio.h diff --git a/include/asm-powerpc/grackle.h b/arch/powerpc/include/asm/grackle.h index bd7812a519d..bd7812a519d 100644 --- a/include/asm-powerpc/grackle.h +++ b/arch/powerpc/include/asm/grackle.h diff --git a/include/asm-powerpc/hardirq.h b/arch/powerpc/include/asm/hardirq.h index 288e14d53b7..288e14d53b7 100644 --- a/include/asm-powerpc/hardirq.h +++ b/arch/powerpc/include/asm/hardirq.h diff --git a/include/asm-powerpc/heathrow.h b/arch/powerpc/include/asm/heathrow.h index 93f54958a9d..93f54958a9d 100644 --- a/include/asm-powerpc/heathrow.h +++ b/arch/powerpc/include/asm/heathrow.h diff --git a/include/asm-powerpc/highmem.h b/arch/powerpc/include/asm/highmem.h index 5d99b6489d5..5d99b6489d5 100644 --- a/include/asm-powerpc/highmem.h +++ b/arch/powerpc/include/asm/highmem.h diff --git a/include/asm-powerpc/hugetlb.h b/arch/powerpc/include/asm/hugetlb.h index 26f0d0ab27a..26f0d0ab27a 100644 --- a/include/asm-powerpc/hugetlb.h +++ b/arch/powerpc/include/asm/hugetlb.h diff --git a/include/asm-powerpc/hvcall.h b/arch/powerpc/include/asm/hvcall.h index fbe2932fa9e..fbe2932fa9e 100644 --- a/include/asm-powerpc/hvcall.h +++ b/arch/powerpc/include/asm/hvcall.h diff --git a/include/asm-powerpc/hvconsole.h b/arch/powerpc/include/asm/hvconsole.h index 35ea69e8121..35ea69e8121 100644 --- a/include/asm-powerpc/hvconsole.h +++ b/arch/powerpc/include/asm/hvconsole.h diff --git a/include/asm-powerpc/hvcserver.h b/arch/powerpc/include/asm/hvcserver.h index 67d7da3a4da..67d7da3a4da 100644 --- a/include/asm-powerpc/hvcserver.h +++ b/arch/powerpc/include/asm/hvcserver.h diff --git a/include/asm-powerpc/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h index f75a5fc64d2..f75a5fc64d2 100644 --- a/include/asm-powerpc/hw_irq.h +++ b/arch/powerpc/include/asm/hw_irq.h diff --git a/include/asm-powerpc/hydra.h b/arch/powerpc/include/asm/hydra.h index 1ad4eed07fb..1ad4eed07fb 100644 --- a/include/asm-powerpc/hydra.h +++ b/arch/powerpc/include/asm/hydra.h diff --git a/include/asm-powerpc/i8259.h b/arch/powerpc/include/asm/i8259.h index db1362f8c60..105ade297aa 100644 --- a/include/asm-powerpc/i8259.h +++ b/arch/powerpc/include/asm/i8259.h @@ -4,14 +4,9 @@  #include <linux/irq.h> -#ifdef CONFIG_PPC_MERGE  extern void i8259_init(struct device_node *node, unsigned long intack_addr);  extern unsigned int i8259_irq(void);  extern struct irq_host *i8259_get_host(void); -#else -extern void i8259_init(unsigned long intack_addr, int offset); -extern int i8259_irq(void); -#endif  #endif /* __KERNEL__ */  #endif /* _ASM_POWERPC_I8259_H */ diff --git a/include/asm-powerpc/ibmebus.h b/arch/powerpc/include/asm/ibmebus.h index 1a9d9aea21f..1a9d9aea21f 100644 --- a/include/asm-powerpc/ibmebus.h +++ b/arch/powerpc/include/asm/ibmebus.h diff --git a/include/asm-powerpc/ide.h b/arch/powerpc/include/asm/ide.h index 1aaf27be874..048480e340f 100644 --- a/include/asm-powerpc/ide.h +++ b/arch/powerpc/include/asm/ide.h @@ -20,7 +20,6 @@  #define __ide_mm_outsl(p, a, c)	writesl((void __iomem *)(p), (a), (c))  #ifndef  __powerpc64__ -#include <linux/hdreg.h>  #include <linux/ioport.h>  /* FIXME: use ide_platform host driver */ diff --git a/include/asm-powerpc/immap_86xx.h b/arch/powerpc/include/asm/immap_86xx.h index 0f165e59c32..0f165e59c32 100644 --- a/include/asm-powerpc/immap_86xx.h +++ b/arch/powerpc/include/asm/immap_86xx.h diff --git a/include/asm-powerpc/immap_cpm2.h b/arch/powerpc/include/asm/immap_cpm2.h index 4080bab0468..4080bab0468 100644 --- a/include/asm-powerpc/immap_cpm2.h +++ b/arch/powerpc/include/asm/immap_cpm2.h diff --git a/include/asm-powerpc/immap_qe.h b/arch/powerpc/include/asm/immap_qe.h index 7b6f411db3e..3c2fced3ac2 100644 --- a/include/asm-powerpc/immap_qe.h +++ b/arch/powerpc/include/asm/immap_qe.h @@ -1,6 +1,4 @@  /* - * include/asm-powerpc/immap_qe.h - *   * QUICC Engine (QE) Internal Memory Map.   * The Internal Memory Map for devices with QE on them. This   * is the superset of all QE devices (8360, etc.). diff --git a/include/asm-powerpc/io-defs.h b/arch/powerpc/include/asm/io-defs.h index 44d7927aec6..44d7927aec6 100644 --- a/include/asm-powerpc/io-defs.h +++ b/arch/powerpc/include/asm/io-defs.h diff --git a/include/asm-powerpc/io.h b/arch/powerpc/include/asm/io.h index 77c7fa025e6..77c7fa025e6 100644 --- a/include/asm-powerpc/io.h +++ b/arch/powerpc/include/asm/io.h diff --git a/include/asm-powerpc/ioctl.h b/arch/powerpc/include/asm/ioctl.h index 57d68304218..57d68304218 100644 --- a/include/asm-powerpc/ioctl.h +++ b/arch/powerpc/include/asm/ioctl.h diff --git a/include/asm-powerpc/ioctls.h b/arch/powerpc/include/asm/ioctls.h index 279a6229584..279a6229584 100644 --- a/include/asm-powerpc/ioctls.h +++ b/arch/powerpc/include/asm/ioctls.h diff --git a/include/asm-powerpc/iommu.h b/arch/powerpc/include/asm/iommu.h index 51ecfef8d84..51ecfef8d84 100644 --- a/include/asm-powerpc/iommu.h +++ b/arch/powerpc/include/asm/iommu.h diff --git a/include/asm-powerpc/ipcbuf.h b/arch/powerpc/include/asm/ipcbuf.h index 2c3e1d94db1..2c3e1d94db1 100644 --- a/include/asm-powerpc/ipcbuf.h +++ b/arch/powerpc/include/asm/ipcbuf.h diff --git a/include/asm-powerpc/ipic.h b/arch/powerpc/include/asm/ipic.h index 8ff08be0014..fb59829983b 100644 --- a/include/asm-powerpc/ipic.h +++ b/arch/powerpc/include/asm/ipic.h @@ -1,6 +1,4 @@  /* - * include/asm-powerpc/ipic.h - *   * IPIC external definitions and structure.   *   * Maintainer: Kumar Gala <galak@kernel.crashing.org> @@ -79,15 +77,8 @@ extern void ipic_disable_mcp(enum ipic_mcp_irq mcp_irq);  extern u32 ipic_get_mcp_status(void);  extern void ipic_clear_mcp_status(u32 mask); -#ifdef CONFIG_PPC_MERGE  extern struct ipic * ipic_init(struct device_node *node, unsigned int flags);  extern unsigned int ipic_get_irq(void); -#else -extern void ipic_init(phys_addr_t phys_addr, unsigned int flags, -		unsigned int irq_offset, -		unsigned char *senses, unsigned int senses_count); -extern int ipic_get_irq(void); -#endif  #endif /* __ASM_IPIC_H__ */  #endif /* __KERNEL__ */ diff --git a/include/asm-powerpc/irq.h b/arch/powerpc/include/asm/irq.h index 1ef8e304e0e..a372f76836c 100644 --- a/include/asm-powerpc/irq.h +++ b/arch/powerpc/include/asm/irq.h @@ -25,8 +25,6 @@  extern atomic_t ppc_n_lost_interrupts; -#ifdef CONFIG_PPC_MERGE -  /* This number is used when no interrupt has been assigned */  #define NO_IRQ			(0) @@ -326,292 +324,6 @@ static __inline__ int irq_canonicalize(int irq)  	return irq;  } - -#else /* CONFIG_PPC_MERGE */ - -/* This number is used when no interrupt has been assigned */ -#define NO_IRQ			(-1) -#define NO_IRQ_IGNORE		(-2) - - -/* - * These constants are used for passing information about interrupt - * signal polarity and level/edge sensing to the low-level PIC chip - * drivers. - */ -#define IRQ_SENSE_MASK		0x1 -#define IRQ_SENSE_LEVEL		0x1	/* interrupt on active level */ -#define IRQ_SENSE_EDGE		0x0	/* interrupt triggered by edge */ - -#define IRQ_POLARITY_MASK	0x2 -#define IRQ_POLARITY_POSITIVE	0x2	/* high level or low->high edge */ -#define IRQ_POLARITY_NEGATIVE	0x0	/* low level or high->low edge */ - - -#if defined(CONFIG_40x) -#include <asm/ibm4xx.h> - -#ifndef NR_BOARD_IRQS -#define NR_BOARD_IRQS 0 -#endif - -#ifndef UIC_WIDTH /* Number of interrupts per device */ -#define UIC_WIDTH 32 -#endif - -#ifndef NR_UICS /* number  of UIC devices */ -#define NR_UICS 1 -#endif - -#if defined (CONFIG_403) -/* - * The PowerPC 403 cores' Asynchronous Interrupt Controller (AIC) has - * 32 possible interrupts, a majority of which are not implemented on - * all cores. There are six configurable, external interrupt pins and - * there are eight internal interrupts for the on-chip serial port - * (SPU), DMA controller, and JTAG controller. - * - */ - -#define	NR_AIC_IRQS 32 -#define	NR_IRQS	 (NR_AIC_IRQS + NR_BOARD_IRQS) - -#elif !defined (CONFIG_403) - -/* - *  The PowerPC 405 cores' Universal Interrupt Controller (UIC) has 32 - * possible interrupts as well. There are seven, configurable external - * interrupt pins and there are 17 internal interrupts for the on-chip - * serial port, DMA controller, on-chip Ethernet controller, PCI, etc. - * - */ - - -#define NR_UIC_IRQS UIC_WIDTH -#define NR_IRQS		((NR_UIC_IRQS * NR_UICS) + NR_BOARD_IRQS) -#endif - -#elif defined(CONFIG_44x) -#include <asm/ibm44x.h> - -#define	NR_UIC_IRQS	32 -#define	NR_IRQS		((NR_UIC_IRQS * NR_UICS) + NR_BOARD_IRQS) - -#elif defined(CONFIG_8xx) - -/* Now include the board configuration specific associations. -*/ -#include <asm/mpc8xx.h> - -/* The MPC8xx cores have 16 possible interrupts.  There are eight - * possible level sensitive interrupts assigned and generated internally - * from such devices as CPM, PCMCIA, RTC, PIT, TimeBase and Decrementer. - * There are eight external interrupts (IRQs) that can be configured - * as either level or edge sensitive. - * - * On some implementations, there is also the possibility of an 8259 - * through the PCI and PCI-ISA bridges. - * - * We are "flattening" the interrupt vectors of the cascaded CPM - * and 8259 interrupt controllers so that we can uniquely identify - * any interrupt source with a single integer. - */ -#define NR_SIU_INTS	16 -#define NR_CPM_INTS	32 -#ifndef NR_8259_INTS -#define NR_8259_INTS 0 -#endif - -#define SIU_IRQ_OFFSET		0 -#define CPM_IRQ_OFFSET		(SIU_IRQ_OFFSET + NR_SIU_INTS) -#define I8259_IRQ_OFFSET	(CPM_IRQ_OFFSET + NR_CPM_INTS) - -#define NR_IRQS	(NR_SIU_INTS + NR_CPM_INTS + NR_8259_INTS) - -/* These values must be zero-based and map 1:1 with the SIU configuration. - * They are used throughout the 8xx I/O subsystem to generate - * interrupt masks, flags, and other control patterns.  This is why the - * current kernel assumption of the 8259 as the base controller is such - * a pain in the butt. - */ -#define	SIU_IRQ0	(0)	/* Highest priority */ -#define	SIU_LEVEL0	(1) -#define	SIU_IRQ1	(2) -#define	SIU_LEVEL1	(3) -#define	SIU_IRQ2	(4) -#define	SIU_LEVEL2	(5) -#define	SIU_IRQ3	(6) -#define	SIU_LEVEL3	(7) -#define	SIU_IRQ4	(8) -#define	SIU_LEVEL4	(9) -#define	SIU_IRQ5	(10) -#define	SIU_LEVEL5	(11) -#define	SIU_IRQ6	(12) -#define	SIU_LEVEL6	(13) -#define	SIU_IRQ7	(14) -#define	SIU_LEVEL7	(15) - -#define MPC8xx_INT_FEC1		SIU_LEVEL1 -#define MPC8xx_INT_FEC2		SIU_LEVEL3 - -#define MPC8xx_INT_SCC1		(CPM_IRQ_OFFSET + CPMVEC_SCC1) -#define MPC8xx_INT_SCC2		(CPM_IRQ_OFFSET + CPMVEC_SCC2) -#define MPC8xx_INT_SCC3		(CPM_IRQ_OFFSET + CPMVEC_SCC3) -#define MPC8xx_INT_SCC4		(CPM_IRQ_OFFSET + CPMVEC_SCC4) -#define MPC8xx_INT_SMC1		(CPM_IRQ_OFFSET + CPMVEC_SMC1) -#define MPC8xx_INT_SMC2		(CPM_IRQ_OFFSET + CPMVEC_SMC2) - -/* The internal interrupts we can configure as we see fit. - * My personal preference is CPM at level 2, which puts it above the - * MBX PCI/ISA/IDE interrupts. - */ -#ifndef PIT_INTERRUPT -#define PIT_INTERRUPT		SIU_LEVEL0 -#endif -#ifndef	CPM_INTERRUPT -#define CPM_INTERRUPT		SIU_LEVEL2 -#endif -#ifndef	PCMCIA_INTERRUPT -#define PCMCIA_INTERRUPT	SIU_LEVEL6 -#endif -#ifndef	DEC_INTERRUPT -#define DEC_INTERRUPT		SIU_LEVEL7 -#endif - -/* Some internal interrupt registers use an 8-bit mask for the interrupt - * level instead of a number. - */ -#define	mk_int_int_mask(IL) (1 << (7 - (IL/2))) - -#else /* CONFIG_40x + CONFIG_8xx */ -/* - * this is the # irq's for all ppc arch's (pmac/chrp/prep) - * so it is the max of them all - */ -#define NR_IRQS			256 -#define __DO_IRQ_CANON	1 - -#ifndef CONFIG_8260 - -#define NUM_8259_INTERRUPTS	16 - -#else /* CONFIG_8260 */ - -/* The 8260 has an internal interrupt controller with a maximum of - * 64 IRQs.  We will use NR_IRQs from above since it is large enough. - * Don't be confused by the 8260 documentation where they list an - * "interrupt number" and "interrupt vector".  We are only interested - * in the interrupt vector.  There are "reserved" holes where the - * vector number increases, but the interrupt number in the table does not. - * (Document errata updates have fixed this...make sure you have up to - * date processor documentation -- Dan). - */ - -#ifndef CPM_IRQ_OFFSET -#define CPM_IRQ_OFFSET	0 -#endif - -#define NR_CPM_INTS	64 - -#define	SIU_INT_ERROR		((uint)0x00 + CPM_IRQ_OFFSET) -#define	SIU_INT_I2C		((uint)0x01 + CPM_IRQ_OFFSET) -#define	SIU_INT_SPI		((uint)0x02 + CPM_IRQ_OFFSET) -#define	SIU_INT_RISC		((uint)0x03 + CPM_IRQ_OFFSET) -#define	SIU_INT_SMC1		((uint)0x04 + CPM_IRQ_OFFSET) -#define	SIU_INT_SMC2		((uint)0x05 + CPM_IRQ_OFFSET) -#define	SIU_INT_IDMA1		((uint)0x06 + CPM_IRQ_OFFSET) -#define	SIU_INT_IDMA2		((uint)0x07 + CPM_IRQ_OFFSET) -#define	SIU_INT_IDMA3		((uint)0x08 + CPM_IRQ_OFFSET) -#define	SIU_INT_IDMA4		((uint)0x09 + CPM_IRQ_OFFSET) -#define	SIU_INT_SDMA		((uint)0x0a + CPM_IRQ_OFFSET) -#define	SIU_INT_USB		((uint)0x0b + CPM_IRQ_OFFSET) -#define	SIU_INT_TIMER1		((uint)0x0c + CPM_IRQ_OFFSET) -#define	SIU_INT_TIMER2		((uint)0x0d + CPM_IRQ_OFFSET) -#define	SIU_INT_TIMER3		((uint)0x0e + CPM_IRQ_OFFSET) -#define	SIU_INT_TIMER4		((uint)0x0f + CPM_IRQ_OFFSET) -#define	SIU_INT_TMCNT		((uint)0x10 + CPM_IRQ_OFFSET) -#define	SIU_INT_PIT		((uint)0x11 + CPM_IRQ_OFFSET) -#define	SIU_INT_PCI		((uint)0x12 + CPM_IRQ_OFFSET) -#define	SIU_INT_IRQ1		((uint)0x13 + CPM_IRQ_OFFSET) -#define	SIU_INT_IRQ2		((uint)0x14 + CPM_IRQ_OFFSET) -#define	SIU_INT_IRQ3		((uint)0x15 + CPM_IRQ_OFFSET) -#define	SIU_INT_IRQ4		((uint)0x16 + CPM_IRQ_OFFSET) -#define	SIU_INT_IRQ5		((uint)0x17 + CPM_IRQ_OFFSET) -#define	SIU_INT_IRQ6		((uint)0x18 + CPM_IRQ_OFFSET) -#define	SIU_INT_IRQ7		((uint)0x19 + CPM_IRQ_OFFSET) -#define	SIU_INT_FCC1		((uint)0x20 + CPM_IRQ_OFFSET) -#define	SIU_INT_FCC2		((uint)0x21 + CPM_IRQ_OFFSET) -#define	SIU_INT_FCC3		((uint)0x22 + CPM_IRQ_OFFSET) -#define	SIU_INT_MCC1		((uint)0x24 + CPM_IRQ_OFFSET) -#define	SIU_INT_MCC2		((uint)0x25 + CPM_IRQ_OFFSET) -#define	SIU_INT_SCC1		((uint)0x28 + CPM_IRQ_OFFSET) -#define	SIU_INT_SCC2		((uint)0x29 + CPM_IRQ_OFFSET) -#define	SIU_INT_SCC3		((uint)0x2a + CPM_IRQ_OFFSET) -#define	SIU_INT_SCC4		((uint)0x2b + CPM_IRQ_OFFSET) -#define	SIU_INT_PC15		((uint)0x30 + CPM_IRQ_OFFSET) -#define	SIU_INT_PC14		((uint)0x31 + CPM_IRQ_OFFSET) -#define	SIU_INT_PC13		((uint)0x32 + CPM_IRQ_OFFSET) -#define	SIU_INT_PC12		((uint)0x33 + CPM_IRQ_OFFSET) -#define	SIU_INT_PC11		((uint)0x34 + CPM_IRQ_OFFSET) -#define	SIU_INT_PC10		((uint)0x35 + CPM_IRQ_OFFSET) -#define	SIU_INT_PC9		((uint)0x36 + CPM_IRQ_OFFSET) -#define	SIU_INT_PC8		((uint)0x37 + CPM_IRQ_OFFSET) -#define	SIU_INT_PC7		((uint)0x38 + CPM_IRQ_OFFSET) -#define	SIU_INT_PC6		((uint)0x39 + CPM_IRQ_OFFSET) -#define	SIU_INT_PC5		((uint)0x3a + CPM_IRQ_OFFSET) -#define	SIU_INT_PC4		((uint)0x3b + CPM_IRQ_OFFSET) -#define	SIU_INT_PC3		((uint)0x3c + CPM_IRQ_OFFSET) -#define	SIU_INT_PC2		((uint)0x3d + CPM_IRQ_OFFSET) -#define	SIU_INT_PC1		((uint)0x3e + CPM_IRQ_OFFSET) -#define	SIU_INT_PC0		((uint)0x3f + CPM_IRQ_OFFSET) - -#endif /* CONFIG_8260 */ - -#endif /* Whatever way too big #ifdef */ - -#define NR_MASK_WORDS	((NR_IRQS + 31) / 32) -/* pedantic: these are long because they are used with set_bit --RR */ -extern unsigned long ppc_cached_irq_mask[NR_MASK_WORDS]; - -/* - * Because many systems have two overlapping names spaces for - * interrupts (ISA and XICS for example), and the ISA interrupts - * have historically not been easy to renumber, we allow ISA - * interrupts to take values 0 - 15, and shift up the remaining - * interrupts by 0x10. - */ -#define NUM_ISA_INTERRUPTS	0x10 -extern int __irq_offset_value; - -static inline int irq_offset_up(int irq) -{ -	return(irq + __irq_offset_value); -} - -static inline int irq_offset_down(int irq) -{ -	return(irq - __irq_offset_value); -} - -static inline int irq_offset_value(void) -{ -	return __irq_offset_value; -} - -#ifdef __DO_IRQ_CANON -extern int ppc_do_canonicalize_irqs; -#else -#define ppc_do_canonicalize_irqs	0 -#endif - -static __inline__ int irq_canonicalize(int irq) -{ -	if (ppc_do_canonicalize_irqs && irq == 2) -		irq = 9; -	return irq; -} -#endif /* CONFIG_PPC_MERGE */ -  extern int distribute_irqs;  struct irqaction; diff --git a/include/asm-powerpc/irq_regs.h b/arch/powerpc/include/asm/irq_regs.h index ba94b51a0a7..ba94b51a0a7 100644 --- a/include/asm-powerpc/irq_regs.h +++ b/arch/powerpc/include/asm/irq_regs.h diff --git a/include/asm-powerpc/irqflags.h b/arch/powerpc/include/asm/irqflags.h index cc6fdba3366..17ba3a881bf 100644 --- a/include/asm-powerpc/irqflags.h +++ b/arch/powerpc/include/asm/irqflags.h @@ -1,6 +1,4 @@  /* - * include/asm-powerpc/irqflags.h - *   * IRQ flags handling   */  #ifndef _ASM_IRQFLAGS_H @@ -10,7 +8,7 @@  /*   * Get definitions for raw_local_save_flags(x), etc.   */ -#include <asm-powerpc/hw_irq.h> +#include <asm/hw_irq.h>  #else  #ifdef CONFIG_TRACE_IRQFLAGS diff --git a/include/asm-powerpc/iseries/alpaca.h b/arch/powerpc/include/asm/iseries/alpaca.h index c0cce6727a6..c0cce6727a6 100644 --- a/include/asm-powerpc/iseries/alpaca.h +++ b/arch/powerpc/include/asm/iseries/alpaca.h diff --git a/include/asm-powerpc/iseries/hv_call.h b/arch/powerpc/include/asm/iseries/hv_call.h index 162d653ad51..162d653ad51 100644 --- a/include/asm-powerpc/iseries/hv_call.h +++ b/arch/powerpc/include/asm/iseries/hv_call.h diff --git a/include/asm-powerpc/iseries/hv_call_event.h b/arch/powerpc/include/asm/iseries/hv_call_event.h index cc029d388e1..cc029d388e1 100644 --- a/include/asm-powerpc/iseries/hv_call_event.h +++ b/arch/powerpc/include/asm/iseries/hv_call_event.h diff --git a/include/asm-powerpc/iseries/hv_call_sc.h b/arch/powerpc/include/asm/iseries/hv_call_sc.h index f5d21095925..f5d21095925 100644 --- a/include/asm-powerpc/iseries/hv_call_sc.h +++ b/arch/powerpc/include/asm/iseries/hv_call_sc.h diff --git a/include/asm-powerpc/iseries/hv_call_xm.h b/arch/powerpc/include/asm/iseries/hv_call_xm.h index 392ac3f54df..392ac3f54df 100644 --- a/include/asm-powerpc/iseries/hv_call_xm.h +++ b/arch/powerpc/include/asm/iseries/hv_call_xm.h diff --git a/include/asm-powerpc/iseries/hv_lp_config.h b/arch/powerpc/include/asm/iseries/hv_lp_config.h index a006fd1e4a2..a006fd1e4a2 100644 --- a/include/asm-powerpc/iseries/hv_lp_config.h +++ b/arch/powerpc/include/asm/iseries/hv_lp_config.h diff --git a/include/asm-powerpc/iseries/hv_lp_event.h b/arch/powerpc/include/asm/iseries/hv_lp_event.h index 8f5da7d7720..8f5da7d7720 100644 --- a/include/asm-powerpc/iseries/hv_lp_event.h +++ b/arch/powerpc/include/asm/iseries/hv_lp_event.h diff --git a/include/asm-powerpc/iseries/hv_types.h b/arch/powerpc/include/asm/iseries/hv_types.h index c3e6d2a1d1c..c3e6d2a1d1c 100644 --- a/include/asm-powerpc/iseries/hv_types.h +++ b/arch/powerpc/include/asm/iseries/hv_types.h diff --git a/include/asm-powerpc/iseries/iommu.h b/arch/powerpc/include/asm/iseries/iommu.h index c59ee7e4bed..c59ee7e4bed 100644 --- a/include/asm-powerpc/iseries/iommu.h +++ b/arch/powerpc/include/asm/iseries/iommu.h diff --git a/include/asm-powerpc/iseries/it_lp_queue.h b/arch/powerpc/include/asm/iseries/it_lp_queue.h index 42827883882..42827883882 100644 --- a/include/asm-powerpc/iseries/it_lp_queue.h +++ b/arch/powerpc/include/asm/iseries/it_lp_queue.h diff --git a/include/asm-powerpc/iseries/lpar_map.h b/arch/powerpc/include/asm/iseries/lpar_map.h index 5e9f3e128ee..5e9f3e128ee 100644 --- a/include/asm-powerpc/iseries/lpar_map.h +++ b/arch/powerpc/include/asm/iseries/lpar_map.h diff --git a/include/asm-powerpc/iseries/mf.h b/arch/powerpc/include/asm/iseries/mf.h index eb851a9c9e5..eb851a9c9e5 100644 --- a/include/asm-powerpc/iseries/mf.h +++ b/arch/powerpc/include/asm/iseries/mf.h diff --git a/include/asm-powerpc/iseries/vio.h b/arch/powerpc/include/asm/iseries/vio.h index f9ac0d00b95..f9ac0d00b95 100644 --- a/include/asm-powerpc/iseries/vio.h +++ b/arch/powerpc/include/asm/iseries/vio.h diff --git a/include/asm-powerpc/kdebug.h b/arch/powerpc/include/asm/kdebug.h index ae6d206728a..ae6d206728a 100644 --- a/include/asm-powerpc/kdebug.h +++ b/arch/powerpc/include/asm/kdebug.h diff --git a/include/asm-powerpc/kdump.h b/arch/powerpc/include/asm/kdump.h index f6c93c71689..f6c93c71689 100644 --- a/include/asm-powerpc/kdump.h +++ b/arch/powerpc/include/asm/kdump.h diff --git a/include/asm-powerpc/kexec.h b/arch/powerpc/include/asm/kexec.h index acdcdc66f1b..acdcdc66f1b 100644 --- a/include/asm-powerpc/kexec.h +++ b/arch/powerpc/include/asm/kexec.h diff --git a/include/asm-powerpc/keylargo.h b/arch/powerpc/include/asm/keylargo.h index d8520ef121f..d8520ef121f 100644 --- a/include/asm-powerpc/keylargo.h +++ b/arch/powerpc/include/asm/keylargo.h diff --git a/include/asm-powerpc/kgdb.h b/arch/powerpc/include/asm/kgdb.h index 1399caf719a..edd217006d2 100644 --- a/include/asm-powerpc/kgdb.h +++ b/arch/powerpc/include/asm/kgdb.h @@ -1,6 +1,4 @@  /* - * include/asm-powerpc/kgdb.h - *   * The PowerPC (32/64) specific defines / externs for KGDB.  Based on   * the previous 32bit and 64bit specific files, which had the following   * copyrights: diff --git a/include/asm-powerpc/kmap_types.h b/arch/powerpc/include/asm/kmap_types.h index b6bac6f61c1..b6bac6f61c1 100644 --- a/include/asm-powerpc/kmap_types.h +++ b/arch/powerpc/include/asm/kmap_types.h diff --git a/include/asm-powerpc/kprobes.h b/arch/powerpc/include/asm/kprobes.h index d0e7701fa1f..d0e7701fa1f 100644 --- a/include/asm-powerpc/kprobes.h +++ b/arch/powerpc/include/asm/kprobes.h diff --git a/include/asm-powerpc/kvm.h b/arch/powerpc/include/asm/kvm.h index f993e4198d5..f993e4198d5 100644 --- a/include/asm-powerpc/kvm.h +++ b/arch/powerpc/include/asm/kvm.h diff --git a/include/asm-powerpc/kvm_asm.h b/arch/powerpc/include/asm/kvm_asm.h index 2197764796d..2197764796d 100644 --- a/include/asm-powerpc/kvm_asm.h +++ b/arch/powerpc/include/asm/kvm_asm.h diff --git a/include/asm-powerpc/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index 2655e2a4831..2655e2a4831 100644 --- a/include/asm-powerpc/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h diff --git a/include/asm-powerpc/kvm_para.h b/arch/powerpc/include/asm/kvm_para.h index 2d48f6a63d0..2d48f6a63d0 100644 --- a/include/asm-powerpc/kvm_para.h +++ b/arch/powerpc/include/asm/kvm_para.h diff --git a/include/asm-powerpc/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h index a8b06879226..a8b06879226 100644 --- a/include/asm-powerpc/kvm_ppc.h +++ b/arch/powerpc/include/asm/kvm_ppc.h diff --git a/include/asm-powerpc/libata-portmap.h b/arch/powerpc/include/asm/libata-portmap.h index 4d8518049f4..4d8518049f4 100644 --- a/include/asm-powerpc/libata-portmap.h +++ b/arch/powerpc/include/asm/libata-portmap.h diff --git a/include/asm-powerpc/linkage.h b/arch/powerpc/include/asm/linkage.h index e1c4ac1cc4b..e1c4ac1cc4b 100644 --- a/include/asm-powerpc/linkage.h +++ b/arch/powerpc/include/asm/linkage.h diff --git a/include/asm-powerpc/lmb.h b/arch/powerpc/include/asm/lmb.h index 6f5fdf0a19a..6f5fdf0a19a 100644 --- a/include/asm-powerpc/lmb.h +++ b/arch/powerpc/include/asm/lmb.h diff --git a/include/asm-powerpc/local.h b/arch/powerpc/include/asm/local.h index 612d8327665..612d8327665 100644 --- a/include/asm-powerpc/local.h +++ b/arch/powerpc/include/asm/local.h diff --git a/include/asm-powerpc/lppaca.h b/arch/powerpc/include/asm/lppaca.h index 2fe268b1033..2fe268b1033 100644 --- a/include/asm-powerpc/lppaca.h +++ b/arch/powerpc/include/asm/lppaca.h diff --git a/include/asm-powerpc/lv1call.h b/arch/powerpc/include/asm/lv1call.h index 81713acf752..81713acf752 100644 --- a/include/asm-powerpc/lv1call.h +++ b/arch/powerpc/include/asm/lv1call.h diff --git a/include/asm-powerpc/machdep.h b/arch/powerpc/include/asm/machdep.h index 893aafd87fd..893aafd87fd 100644 --- a/include/asm-powerpc/machdep.h +++ b/arch/powerpc/include/asm/machdep.h diff --git a/include/asm-powerpc/macio.h b/arch/powerpc/include/asm/macio.h index 079c06eae44..079c06eae44 100644 --- a/include/asm-powerpc/macio.h +++ b/arch/powerpc/include/asm/macio.h diff --git a/include/asm-powerpc/mc146818rtc.h b/arch/powerpc/include/asm/mc146818rtc.h index f2741c8b59a..f2741c8b59a 100644 --- a/include/asm-powerpc/mc146818rtc.h +++ b/arch/powerpc/include/asm/mc146818rtc.h diff --git a/include/asm-powerpc/mediabay.h b/arch/powerpc/include/asm/mediabay.h index b2efb332580..b2efb332580 100644 --- a/include/asm-powerpc/mediabay.h +++ b/arch/powerpc/include/asm/mediabay.h diff --git a/include/asm-powerpc/mman.h b/arch/powerpc/include/asm/mman.h index 9209f755763..9209f755763 100644 --- a/include/asm-powerpc/mman.h +++ b/arch/powerpc/include/asm/mman.h diff --git a/include/asm-powerpc/mmu-40x.h b/arch/powerpc/include/asm/mmu-40x.h index 3d108676584..3d108676584 100644 --- a/include/asm-powerpc/mmu-40x.h +++ b/arch/powerpc/include/asm/mmu-40x.h diff --git a/include/asm-powerpc/mmu-44x.h b/arch/powerpc/include/asm/mmu-44x.h index a825524c981..a825524c981 100644 --- a/include/asm-powerpc/mmu-44x.h +++ b/arch/powerpc/include/asm/mmu-44x.h diff --git a/include/asm-powerpc/mmu-8xx.h b/arch/powerpc/include/asm/mmu-8xx.h index 9db877eb88d..9db877eb88d 100644 --- a/include/asm-powerpc/mmu-8xx.h +++ b/arch/powerpc/include/asm/mmu-8xx.h diff --git a/include/asm-powerpc/mmu-fsl-booke.h b/arch/powerpc/include/asm/mmu-fsl-booke.h index 925d93cf64d..925d93cf64d 100644 --- a/include/asm-powerpc/mmu-fsl-booke.h +++ b/arch/powerpc/include/asm/mmu-fsl-booke.h diff --git a/include/asm-powerpc/mmu-hash32.h b/arch/powerpc/include/asm/mmu-hash32.h index 16b1a1e77e6..16b1a1e77e6 100644 --- a/include/asm-powerpc/mmu-hash32.h +++ b/arch/powerpc/include/asm/mmu-hash32.h diff --git a/include/asm-powerpc/mmu-hash64.h b/arch/powerpc/include/asm/mmu-hash64.h index 19c7a940349..19c7a940349 100644 --- a/include/asm-powerpc/mmu-hash64.h +++ b/arch/powerpc/include/asm/mmu-hash64.h diff --git a/include/asm-powerpc/mmu.h b/arch/powerpc/include/asm/mmu.h index 4c0e1b4f975..4c0e1b4f975 100644 --- a/include/asm-powerpc/mmu.h +++ b/arch/powerpc/include/asm/mmu.h diff --git a/include/asm-powerpc/mmu_context.h b/arch/powerpc/include/asm/mmu_context.h index 9102b8bf0ea..9102b8bf0ea 100644 --- a/include/asm-powerpc/mmu_context.h +++ b/arch/powerpc/include/asm/mmu_context.h diff --git a/include/asm-powerpc/mmzone.h b/arch/powerpc/include/asm/mmzone.h index 19f299b7e25..19f299b7e25 100644 --- a/include/asm-powerpc/mmzone.h +++ b/arch/powerpc/include/asm/mmzone.h diff --git a/include/asm-powerpc/module.h b/arch/powerpc/include/asm/module.h index e5f14b13ccf..e5f14b13ccf 100644 --- a/include/asm-powerpc/module.h +++ b/arch/powerpc/include/asm/module.h diff --git a/include/asm-powerpc/mpc512x.h b/arch/powerpc/include/asm/mpc512x.h index c48a1658eea..c48a1658eea 100644 --- a/include/asm-powerpc/mpc512x.h +++ b/arch/powerpc/include/asm/mpc512x.h diff --git a/include/asm-powerpc/mpc52xx.h b/arch/powerpc/include/asm/mpc52xx.h index 81ef10b6b67..81ef10b6b67 100644 --- a/include/asm-powerpc/mpc52xx.h +++ b/arch/powerpc/include/asm/mpc52xx.h diff --git a/include/asm-powerpc/mpc52xx_psc.h b/arch/powerpc/include/asm/mpc52xx_psc.h index 8917ed63056..8917ed63056 100644 --- a/include/asm-powerpc/mpc52xx_psc.h +++ b/arch/powerpc/include/asm/mpc52xx_psc.h diff --git a/include/asm-powerpc/mpc6xx.h b/arch/powerpc/include/asm/mpc6xx.h index effc2291beb..effc2291beb 100644 --- a/include/asm-powerpc/mpc6xx.h +++ b/arch/powerpc/include/asm/mpc6xx.h diff --git a/include/asm-powerpc/mpc8260.h b/arch/powerpc/include/asm/mpc8260.h index 03317e1e618..03317e1e618 100644 --- a/include/asm-powerpc/mpc8260.h +++ b/arch/powerpc/include/asm/mpc8260.h diff --git a/include/asm-powerpc/mpc86xx.h b/arch/powerpc/include/asm/mpc86xx.h index 15f650f987e..15f650f987e 100644 --- a/include/asm-powerpc/mpc86xx.h +++ b/arch/powerpc/include/asm/mpc86xx.h diff --git a/include/asm-powerpc/mpc8xx.h b/arch/powerpc/include/asm/mpc8xx.h index 98f3c4f1732..98f3c4f1732 100644 --- a/include/asm-powerpc/mpc8xx.h +++ b/arch/powerpc/include/asm/mpc8xx.h diff --git a/include/asm-powerpc/mpic.h b/arch/powerpc/include/asm/mpic.h index fe566a348a8..fe566a348a8 100644 --- a/include/asm-powerpc/mpic.h +++ b/arch/powerpc/include/asm/mpic.h diff --git a/include/asm-powerpc/msgbuf.h b/arch/powerpc/include/asm/msgbuf.h index dd76743c753..dd76743c753 100644 --- a/include/asm-powerpc/msgbuf.h +++ b/arch/powerpc/include/asm/msgbuf.h diff --git a/include/asm-powerpc/mutex.h b/arch/powerpc/include/asm/mutex.h index 458c1f7fbc1..458c1f7fbc1 100644 --- a/include/asm-powerpc/mutex.h +++ b/arch/powerpc/include/asm/mutex.h diff --git a/include/asm-powerpc/nvram.h b/arch/powerpc/include/asm/nvram.h index efde5ac82f7..efde5ac82f7 100644 --- a/include/asm-powerpc/nvram.h +++ b/arch/powerpc/include/asm/nvram.h diff --git a/include/asm-powerpc/of_device.h b/arch/powerpc/include/asm/of_device.h index 3c123990ca2..3c123990ca2 100644 --- a/include/asm-powerpc/of_device.h +++ b/arch/powerpc/include/asm/of_device.h diff --git a/include/asm-powerpc/of_platform.h b/arch/powerpc/include/asm/of_platform.h index 18659ef7213..18659ef7213 100644 --- a/include/asm-powerpc/of_platform.h +++ b/arch/powerpc/include/asm/of_platform.h diff --git a/include/asm-powerpc/ohare.h b/arch/powerpc/include/asm/ohare.h index 0d030f9dea2..0d030f9dea2 100644 --- a/include/asm-powerpc/ohare.h +++ b/arch/powerpc/include/asm/ohare.h diff --git a/include/asm-powerpc/oprofile_impl.h b/arch/powerpc/include/asm/oprofile_impl.h index 95035c602ba..95035c602ba 100644 --- a/include/asm-powerpc/oprofile_impl.h +++ b/arch/powerpc/include/asm/oprofile_impl.h diff --git a/include/asm-powerpc/pSeries_reconfig.h b/arch/powerpc/include/asm/pSeries_reconfig.h index e482e5352e6..e482e5352e6 100644 --- a/include/asm-powerpc/pSeries_reconfig.h +++ b/arch/powerpc/include/asm/pSeries_reconfig.h diff --git a/include/asm-powerpc/paca.h b/arch/powerpc/include/asm/paca.h index 7b564444ff6..6493a395508 100644 --- a/include/asm-powerpc/paca.h +++ b/arch/powerpc/include/asm/paca.h @@ -1,6 +1,4 @@  /* - * include/asm-powerpc/paca.h - *   * This control block defines the PACA which defines the processor   * specific data for each logical processor on the system.   * There are some pointers defined that are utilized by PLIC. diff --git a/include/asm-powerpc/page.h b/arch/powerpc/include/asm/page.h index e088545cb3f..e088545cb3f 100644 --- a/include/asm-powerpc/page.h +++ b/arch/powerpc/include/asm/page.h diff --git a/include/asm-powerpc/page_32.h b/arch/powerpc/include/asm/page_32.h index ebfae530a37..ebfae530a37 100644 --- a/include/asm-powerpc/page_32.h +++ b/arch/powerpc/include/asm/page_32.h diff --git a/include/asm-powerpc/page_64.h b/arch/powerpc/include/asm/page_64.h index 043bfdfe4f7..043bfdfe4f7 100644 --- a/include/asm-powerpc/page_64.h +++ b/arch/powerpc/include/asm/page_64.h diff --git a/include/asm-powerpc/param.h b/arch/powerpc/include/asm/param.h index 094f63d4d5c..094f63d4d5c 100644 --- a/include/asm-powerpc/param.h +++ b/arch/powerpc/include/asm/param.h diff --git a/include/asm-powerpc/parport.h b/arch/powerpc/include/asm/parport.h index 414c50e2e88..414c50e2e88 100644 --- a/include/asm-powerpc/parport.h +++ b/arch/powerpc/include/asm/parport.h diff --git a/include/asm-powerpc/pasemi_dma.h b/arch/powerpc/include/asm/pasemi_dma.h index 19fd7933e2d..19fd7933e2d 100644 --- a/include/asm-powerpc/pasemi_dma.h +++ b/arch/powerpc/include/asm/pasemi_dma.h diff --git a/include/asm-powerpc/pci-bridge.h b/arch/powerpc/include/asm/pci-bridge.h index ae2ea803a0f..ae2ea803a0f 100644 --- a/include/asm-powerpc/pci-bridge.h +++ b/arch/powerpc/include/asm/pci-bridge.h diff --git a/include/asm-powerpc/pci.h b/arch/powerpc/include/asm/pci.h index a05a942b1c2..a05a942b1c2 100644 --- a/include/asm-powerpc/pci.h +++ b/arch/powerpc/include/asm/pci.h diff --git a/include/asm-powerpc/percpu.h b/arch/powerpc/include/asm/percpu.h index f879252b7ea..f879252b7ea 100644 --- a/include/asm-powerpc/percpu.h +++ b/arch/powerpc/include/asm/percpu.h diff --git a/include/asm-powerpc/pgalloc-32.h b/arch/powerpc/include/asm/pgalloc-32.h index 58c07147b3e..58c07147b3e 100644 --- a/include/asm-powerpc/pgalloc-32.h +++ b/arch/powerpc/include/asm/pgalloc-32.h diff --git a/include/asm-powerpc/pgalloc-64.h b/arch/powerpc/include/asm/pgalloc-64.h index 812a1d8f35c..812a1d8f35c 100644 --- a/include/asm-powerpc/pgalloc-64.h +++ b/arch/powerpc/include/asm/pgalloc-64.h diff --git a/include/asm-powerpc/pgalloc.h b/arch/powerpc/include/asm/pgalloc.h index b4505ed0f0f..b4505ed0f0f 100644 --- a/include/asm-powerpc/pgalloc.h +++ b/arch/powerpc/include/asm/pgalloc.h diff --git a/include/asm-powerpc/pgtable-4k.h b/arch/powerpc/include/asm/pgtable-4k.h index 6b18ba9d2d8..6b18ba9d2d8 100644 --- a/include/asm-powerpc/pgtable-4k.h +++ b/arch/powerpc/include/asm/pgtable-4k.h diff --git a/include/asm-powerpc/pgtable-64k.h b/arch/powerpc/include/asm/pgtable-64k.h index 07b0d8f09cb..07b0d8f09cb 100644 --- a/include/asm-powerpc/pgtable-64k.h +++ b/arch/powerpc/include/asm/pgtable-64k.h diff --git a/include/asm-powerpc/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h index 6fe39e32704..6fe39e32704 100644 --- a/include/asm-powerpc/pgtable-ppc32.h +++ b/arch/powerpc/include/asm/pgtable-ppc32.h diff --git a/include/asm-powerpc/pgtable-ppc64.h b/arch/powerpc/include/asm/pgtable-ppc64.h index 74c6f380b80..db0b8f3b880 100644 --- a/include/asm-powerpc/pgtable-ppc64.h +++ b/arch/powerpc/include/asm/pgtable-ppc64.h @@ -100,7 +100,7 @@  #define _PAGE_WRENABLE	(_PAGE_RW | _PAGE_DIRTY) -/* __pgprot defined in asm-powerpc/page.h */ +/* __pgprot defined in arch/powerpc/incliude/asm/page.h */  #define PAGE_NONE	__pgprot(_PAGE_PRESENT | _PAGE_ACCESSED)  #define PAGE_SHARED	__pgprot(_PAGE_BASE | _PAGE_RW | _PAGE_USER) diff --git a/include/asm-powerpc/pgtable.h b/arch/powerpc/include/asm/pgtable.h index dbb8ca172e4..dbb8ca172e4 100644 --- a/include/asm-powerpc/pgtable.h +++ b/arch/powerpc/include/asm/pgtable.h diff --git a/include/asm-powerpc/phyp_dump.h b/arch/powerpc/include/asm/phyp_dump.h index fa74c6c3e10..fa74c6c3e10 100644 --- a/include/asm-powerpc/phyp_dump.h +++ b/arch/powerpc/include/asm/phyp_dump.h diff --git a/include/asm-powerpc/pmac_feature.h b/arch/powerpc/include/asm/pmac_feature.h index 877c35a4356..877c35a4356 100644 --- a/include/asm-powerpc/pmac_feature.h +++ b/arch/powerpc/include/asm/pmac_feature.h diff --git a/include/asm-powerpc/pmac_low_i2c.h b/arch/powerpc/include/asm/pmac_low_i2c.h index 131011bd7e7..131011bd7e7 100644 --- a/include/asm-powerpc/pmac_low_i2c.h +++ b/arch/powerpc/include/asm/pmac_low_i2c.h diff --git a/include/asm-powerpc/pmac_pfunc.h b/arch/powerpc/include/asm/pmac_pfunc.h index 1330d6a58c5..1330d6a58c5 100644 --- a/include/asm-powerpc/pmac_pfunc.h +++ b/arch/powerpc/include/asm/pmac_pfunc.h diff --git a/include/asm-powerpc/pmc.h b/arch/powerpc/include/asm/pmc.h index d6a616a1b3e..d6a616a1b3e 100644 --- a/include/asm-powerpc/pmc.h +++ b/arch/powerpc/include/asm/pmc.h diff --git a/include/asm-powerpc/pmi.h b/arch/powerpc/include/asm/pmi.h index b4e91fbf508..b4e91fbf508 100644 --- a/include/asm-powerpc/pmi.h +++ b/arch/powerpc/include/asm/pmi.h diff --git a/include/asm-powerpc/poll.h b/arch/powerpc/include/asm/poll.h index c98509d3149..c98509d3149 100644 --- a/include/asm-powerpc/poll.h +++ b/arch/powerpc/include/asm/poll.h diff --git a/include/asm-powerpc/posix_types.h b/arch/powerpc/include/asm/posix_types.h index c4e396b540d..c4e396b540d 100644 --- a/include/asm-powerpc/posix_types.h +++ b/arch/powerpc/include/asm/posix_types.h diff --git a/include/asm-powerpc/ppc-pci.h b/arch/powerpc/include/asm/ppc-pci.h index 854ab713f56..854ab713f56 100644 --- a/include/asm-powerpc/ppc-pci.h +++ b/arch/powerpc/include/asm/ppc-pci.h diff --git a/include/asm-powerpc/ppc4xx.h b/arch/powerpc/include/asm/ppc4xx.h index 033039a80c4..033039a80c4 100644 --- a/include/asm-powerpc/ppc4xx.h +++ b/arch/powerpc/include/asm/ppc4xx.h diff --git a/include/asm-powerpc/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h index 0966899d974..0966899d974 100644 --- a/include/asm-powerpc/ppc_asm.h +++ b/arch/powerpc/include/asm/ppc_asm.h diff --git a/include/asm-powerpc/processor.h b/arch/powerpc/include/asm/processor.h index 101ed87f7d8..101ed87f7d8 100644 --- a/include/asm-powerpc/processor.h +++ b/arch/powerpc/include/asm/processor.h diff --git a/include/asm-powerpc/prom.h b/arch/powerpc/include/asm/prom.h index eb3bd2e1c7f..eb3bd2e1c7f 100644 --- a/include/asm-powerpc/prom.h +++ b/arch/powerpc/include/asm/prom.h diff --git a/include/asm-powerpc/ps3.h b/arch/powerpc/include/asm/ps3.h index f9e34c493cb..f9e34c493cb 100644 --- a/include/asm-powerpc/ps3.h +++ b/arch/powerpc/include/asm/ps3.h diff --git a/include/asm-powerpc/ps3av.h b/arch/powerpc/include/asm/ps3av.h index fda98715cd3..fda98715cd3 100644 --- a/include/asm-powerpc/ps3av.h +++ b/arch/powerpc/include/asm/ps3av.h diff --git a/include/asm-powerpc/ps3fb.h b/arch/powerpc/include/asm/ps3fb.h index 3f121fe4010..3f121fe4010 100644 --- a/include/asm-powerpc/ps3fb.h +++ b/arch/powerpc/include/asm/ps3fb.h diff --git a/include/asm-powerpc/ps3stor.h b/arch/powerpc/include/asm/ps3stor.h index 6fcaf714fa5..6fcaf714fa5 100644 --- a/include/asm-powerpc/ps3stor.h +++ b/arch/powerpc/include/asm/ps3stor.h diff --git a/include/asm-powerpc/ptrace.h b/arch/powerpc/include/asm/ptrace.h index 734e0754fb9..734e0754fb9 100644 --- a/include/asm-powerpc/ptrace.h +++ b/arch/powerpc/include/asm/ptrace.h diff --git a/include/asm-powerpc/qe.h b/arch/powerpc/include/asm/qe.h index edee15d269e..edee15d269e 100644 --- a/include/asm-powerpc/qe.h +++ b/arch/powerpc/include/asm/qe.h diff --git a/include/asm-powerpc/qe_ic.h b/arch/powerpc/include/asm/qe_ic.h index a779b2c9eaf..56a7745ca34 100644 --- a/include/asm-powerpc/qe_ic.h +++ b/arch/powerpc/include/asm/qe_ic.h @@ -1,6 +1,4 @@  /* - * include/asm-powerpc/qe_ic.h - *   * Copyright (C) 2006 Freescale Semicondutor, Inc. All rights reserved.   *   * Authors: 	Shlomi Gridish <gridish@freescale.com> diff --git a/include/asm-powerpc/reg.h b/arch/powerpc/include/asm/reg.h index c6d1ab65077..c6d1ab65077 100644 --- a/include/asm-powerpc/reg.h +++ b/arch/powerpc/include/asm/reg.h diff --git a/include/asm-powerpc/reg_8xx.h b/arch/powerpc/include/asm/reg_8xx.h index e8ea346b21d..e8ea346b21d 100644 --- a/include/asm-powerpc/reg_8xx.h +++ b/arch/powerpc/include/asm/reg_8xx.h diff --git a/include/asm-powerpc/reg_booke.h b/arch/powerpc/include/asm/reg_booke.h index be980f4ee49..be980f4ee49 100644 --- a/include/asm-powerpc/reg_booke.h +++ b/arch/powerpc/include/asm/reg_booke.h diff --git a/include/asm-powerpc/reg_fsl_emb.h b/arch/powerpc/include/asm/reg_fsl_emb.h index 1e180a59458..1e180a59458 100644 --- a/include/asm-powerpc/reg_fsl_emb.h +++ b/arch/powerpc/include/asm/reg_fsl_emb.h diff --git a/include/asm-powerpc/resource.h b/arch/powerpc/include/asm/resource.h index 04bc4db8921..04bc4db8921 100644 --- a/include/asm-powerpc/resource.h +++ b/arch/powerpc/include/asm/resource.h diff --git a/include/asm-powerpc/rheap.h b/arch/powerpc/include/asm/rheap.h index 172381769cf..172381769cf 100644 --- a/include/asm-powerpc/rheap.h +++ b/arch/powerpc/include/asm/rheap.h diff --git a/include/asm-powerpc/rio.h b/arch/powerpc/include/asm/rio.h index 0018bf80cb2..0018bf80cb2 100644 --- a/include/asm-powerpc/rio.h +++ b/arch/powerpc/include/asm/rio.h diff --git a/include/asm-powerpc/rtas.h b/arch/powerpc/include/asm/rtas.h index 8eaa7b28d9d..8eaa7b28d9d 100644 --- a/include/asm-powerpc/rtas.h +++ b/arch/powerpc/include/asm/rtas.h diff --git a/include/asm-powerpc/rtc.h b/arch/powerpc/include/asm/rtc.h index f5802926b6c..f5802926b6c 100644 --- a/include/asm-powerpc/rtc.h +++ b/arch/powerpc/include/asm/rtc.h diff --git a/include/asm-powerpc/rwsem.h b/arch/powerpc/include/asm/rwsem.h index a6cc93b78b9..24cd9281ec3 100644 --- a/include/asm-powerpc/rwsem.h +++ b/arch/powerpc/include/asm/rwsem.h @@ -8,8 +8,8 @@  #ifdef __KERNEL__  /* - * include/asm-powerpc/rwsem.h: R/W semaphores for PPC using the stuff - * in lib/rwsem.c.  Adapted largely from include/asm-i386/rwsem.h + * R/W semaphores for PPC using the stuff in lib/rwsem.c. + * Adapted largely from include/asm-i386/rwsem.h   * by Paul Mackerras <paulus@samba.org>.   */ diff --git a/include/asm-powerpc/scatterlist.h b/arch/powerpc/include/asm/scatterlist.h index fcf7d55afe4..fcf7d55afe4 100644 --- a/include/asm-powerpc/scatterlist.h +++ b/arch/powerpc/include/asm/scatterlist.h diff --git a/include/asm-powerpc/seccomp.h b/arch/powerpc/include/asm/seccomp.h index 853765eb1f6..853765eb1f6 100644 --- a/include/asm-powerpc/seccomp.h +++ b/arch/powerpc/include/asm/seccomp.h diff --git a/include/asm-powerpc/sections.h b/arch/powerpc/include/asm/sections.h index 916018e425c..916018e425c 100644 --- a/include/asm-powerpc/sections.h +++ b/arch/powerpc/include/asm/sections.h diff --git a/include/asm-powerpc/sembuf.h b/arch/powerpc/include/asm/sembuf.h index 99a41938ae3..99a41938ae3 100644 --- a/include/asm-powerpc/sembuf.h +++ b/arch/powerpc/include/asm/sembuf.h diff --git a/include/asm-powerpc/serial.h b/arch/powerpc/include/asm/serial.h index 3e8589b43cb..3e8589b43cb 100644 --- a/include/asm-powerpc/serial.h +++ b/arch/powerpc/include/asm/serial.h diff --git a/include/asm-powerpc/setjmp.h b/arch/powerpc/include/asm/setjmp.h index 279d03a1eec..279d03a1eec 100644 --- a/include/asm-powerpc/setjmp.h +++ b/arch/powerpc/include/asm/setjmp.h diff --git a/include/asm-powerpc/setup.h b/arch/powerpc/include/asm/setup.h index 817fac0a071..817fac0a071 100644 --- a/include/asm-powerpc/setup.h +++ b/arch/powerpc/include/asm/setup.h diff --git a/include/asm-powerpc/shmbuf.h b/arch/powerpc/include/asm/shmbuf.h index 8efa39698b6..8efa39698b6 100644 --- a/include/asm-powerpc/shmbuf.h +++ b/arch/powerpc/include/asm/shmbuf.h diff --git a/include/asm-powerpc/shmparam.h b/arch/powerpc/include/asm/shmparam.h index 5cda42a6d39..5cda42a6d39 100644 --- a/include/asm-powerpc/shmparam.h +++ b/arch/powerpc/include/asm/shmparam.h diff --git a/include/asm-powerpc/sigcontext.h b/arch/powerpc/include/asm/sigcontext.h index 9c1f24fd5d1..9c1f24fd5d1 100644 --- a/include/asm-powerpc/sigcontext.h +++ b/arch/powerpc/include/asm/sigcontext.h diff --git a/include/asm-powerpc/siginfo.h b/arch/powerpc/include/asm/siginfo.h index 12f1bce037b..12f1bce037b 100644 --- a/include/asm-powerpc/siginfo.h +++ b/arch/powerpc/include/asm/siginfo.h diff --git a/include/asm-powerpc/signal.h b/arch/powerpc/include/asm/signal.h index a7360cdd99e..a7360cdd99e 100644 --- a/include/asm-powerpc/signal.h +++ b/arch/powerpc/include/asm/signal.h diff --git a/include/asm-powerpc/smp.h b/arch/powerpc/include/asm/smp.h index 4d28e1e4521..4d28e1e4521 100644 --- a/include/asm-powerpc/smp.h +++ b/arch/powerpc/include/asm/smp.h diff --git a/include/asm-powerpc/smu.h b/arch/powerpc/include/asm/smu.h index 7ae2753da56..7ae2753da56 100644 --- a/include/asm-powerpc/smu.h +++ b/arch/powerpc/include/asm/smu.h diff --git a/include/asm-powerpc/socket.h b/arch/powerpc/include/asm/socket.h index f5a4e168e49..f5a4e168e49 100644 --- a/include/asm-powerpc/socket.h +++ b/arch/powerpc/include/asm/socket.h diff --git a/include/asm-powerpc/sockios.h b/arch/powerpc/include/asm/sockios.h index 55cef7675a3..55cef7675a3 100644 --- a/include/asm-powerpc/sockios.h +++ b/arch/powerpc/include/asm/sockios.h diff --git a/include/asm-powerpc/sparsemem.h b/arch/powerpc/include/asm/sparsemem.h index 54a47ea2c3a..54a47ea2c3a 100644 --- a/include/asm-powerpc/sparsemem.h +++ b/arch/powerpc/include/asm/sparsemem.h diff --git a/include/asm-powerpc/spinlock.h b/arch/powerpc/include/asm/spinlock.h index f56a843f470..f56a843f470 100644 --- a/include/asm-powerpc/spinlock.h +++ b/arch/powerpc/include/asm/spinlock.h diff --git a/include/asm-powerpc/spinlock_types.h b/arch/powerpc/include/asm/spinlock_types.h index 74236c9f05b..74236c9f05b 100644 --- a/include/asm-powerpc/spinlock_types.h +++ b/arch/powerpc/include/asm/spinlock_types.h diff --git a/include/asm-powerpc/spu.h b/arch/powerpc/include/asm/spu.h index 8b2eb044270..8b2eb044270 100644 --- a/include/asm-powerpc/spu.h +++ b/arch/powerpc/include/asm/spu.h diff --git a/include/asm-powerpc/spu_csa.h b/arch/powerpc/include/asm/spu_csa.h index a40fd491250..a40fd491250 100644 --- a/include/asm-powerpc/spu_csa.h +++ b/arch/powerpc/include/asm/spu_csa.h diff --git a/include/asm-powerpc/spu_info.h b/arch/powerpc/include/asm/spu_info.h index 3545efbf989..3545efbf989 100644 --- a/include/asm-powerpc/spu_info.h +++ b/arch/powerpc/include/asm/spu_info.h diff --git a/include/asm-powerpc/spu_priv1.h b/arch/powerpc/include/asm/spu_priv1.h index 25020a34ce7..25020a34ce7 100644 --- a/include/asm-powerpc/spu_priv1.h +++ b/arch/powerpc/include/asm/spu_priv1.h diff --git a/include/asm-powerpc/sstep.h b/arch/powerpc/include/asm/sstep.h index f593b0f9b62..f593b0f9b62 100644 --- a/include/asm-powerpc/sstep.h +++ b/arch/powerpc/include/asm/sstep.h diff --git a/include/asm-powerpc/stat.h b/arch/powerpc/include/asm/stat.h index e4edc510b53..e4edc510b53 100644 --- a/include/asm-powerpc/stat.h +++ b/arch/powerpc/include/asm/stat.h diff --git a/include/asm-powerpc/statfs.h b/arch/powerpc/include/asm/statfs.h index 67024026c10..67024026c10 100644 --- a/include/asm-powerpc/statfs.h +++ b/arch/powerpc/include/asm/statfs.h diff --git a/include/asm-powerpc/string.h b/arch/powerpc/include/asm/string.h index e40010abcaf..e40010abcaf 100644 --- a/include/asm-powerpc/string.h +++ b/arch/powerpc/include/asm/string.h diff --git a/include/asm-powerpc/suspend.h b/arch/powerpc/include/asm/suspend.h index cbf2c9404c3..cbf2c9404c3 100644 --- a/include/asm-powerpc/suspend.h +++ b/arch/powerpc/include/asm/suspend.h diff --git a/include/asm-powerpc/synch.h b/arch/powerpc/include/asm/synch.h index 45963e80f55..45963e80f55 100644 --- a/include/asm-powerpc/synch.h +++ b/arch/powerpc/include/asm/synch.h diff --git a/include/asm-powerpc/syscall.h b/arch/powerpc/include/asm/syscall.h index efa7f0b879f..efa7f0b879f 100644 --- a/include/asm-powerpc/syscall.h +++ b/arch/powerpc/include/asm/syscall.h diff --git a/include/asm-powerpc/syscalls.h b/arch/powerpc/include/asm/syscalls.h index eb8eb400c66..eb8eb400c66 100644 --- a/include/asm-powerpc/syscalls.h +++ b/arch/powerpc/include/asm/syscalls.h diff --git a/include/asm-powerpc/systbl.h b/arch/powerpc/include/asm/systbl.h index e084272ed1c..e084272ed1c 100644 --- a/include/asm-powerpc/systbl.h +++ b/arch/powerpc/include/asm/systbl.h diff --git a/include/asm-powerpc/system.h b/arch/powerpc/include/asm/system.h index d6648c14332..d6648c14332 100644 --- a/include/asm-powerpc/system.h +++ b/arch/powerpc/include/asm/system.h diff --git a/include/asm-powerpc/tce.h b/arch/powerpc/include/asm/tce.h index f663634cccc..f663634cccc 100644 --- a/include/asm-powerpc/tce.h +++ b/arch/powerpc/include/asm/tce.h diff --git a/include/asm-powerpc/termbits.h b/arch/powerpc/include/asm/termbits.h index 6698188ca55..6698188ca55 100644 --- a/include/asm-powerpc/termbits.h +++ b/arch/powerpc/include/asm/termbits.h diff --git a/include/asm-powerpc/termios.h b/arch/powerpc/include/asm/termios.h index 2c14fea07c8..2c14fea07c8 100644 --- a/include/asm-powerpc/termios.h +++ b/arch/powerpc/include/asm/termios.h diff --git a/include/asm-powerpc/thread_info.h b/arch/powerpc/include/asm/thread_info.h index 9665a26a253..9665a26a253 100644 --- a/include/asm-powerpc/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h diff --git a/include/asm-powerpc/time.h b/arch/powerpc/include/asm/time.h index febd581ec9b..febd581ec9b 100644 --- a/include/asm-powerpc/time.h +++ b/arch/powerpc/include/asm/time.h diff --git a/include/asm-powerpc/timex.h b/arch/powerpc/include/asm/timex.h index c55e14f7ef4..c55e14f7ef4 100644 --- a/include/asm-powerpc/timex.h +++ b/arch/powerpc/include/asm/timex.h diff --git a/include/asm-powerpc/tlb.h b/arch/powerpc/include/asm/tlb.h index e20ff7541f3..e20ff7541f3 100644 --- a/include/asm-powerpc/tlb.h +++ b/arch/powerpc/include/asm/tlb.h diff --git a/include/asm-powerpc/tlbflush.h b/arch/powerpc/include/asm/tlbflush.h index 361cd5c7a32..361cd5c7a32 100644 --- a/include/asm-powerpc/tlbflush.h +++ b/arch/powerpc/include/asm/tlbflush.h diff --git a/include/asm-powerpc/topology.h b/arch/powerpc/include/asm/topology.h index c32da6f9799..c32da6f9799 100644 --- a/include/asm-powerpc/topology.h +++ b/arch/powerpc/include/asm/topology.h diff --git a/include/asm-powerpc/tsi108.h b/arch/powerpc/include/asm/tsi108.h index f8b60793b7a..f8b60793b7a 100644 --- a/include/asm-powerpc/tsi108.h +++ b/arch/powerpc/include/asm/tsi108.h diff --git a/include/asm-powerpc/tsi108_irq.h b/arch/powerpc/include/asm/tsi108_irq.h index 6ed93979fbe..6ed93979fbe 100644 --- a/include/asm-powerpc/tsi108_irq.h +++ b/arch/powerpc/include/asm/tsi108_irq.h diff --git a/include/asm-powerpc/tsi108_pci.h b/arch/powerpc/include/asm/tsi108_pci.h index 5653d7cc3e2..5653d7cc3e2 100644 --- a/include/asm-powerpc/tsi108_pci.h +++ b/arch/powerpc/include/asm/tsi108_pci.h diff --git a/include/asm-powerpc/types.h b/arch/powerpc/include/asm/types.h index d3374bc865b..d3374bc865b 100644 --- a/include/asm-powerpc/types.h +++ b/arch/powerpc/include/asm/types.h diff --git a/include/asm-powerpc/uaccess.h b/arch/powerpc/include/asm/uaccess.h index bd0fb849515..bd0fb849515 100644 --- a/include/asm-powerpc/uaccess.h +++ b/arch/powerpc/include/asm/uaccess.h diff --git a/include/asm-powerpc/ucc.h b/arch/powerpc/include/asm/ucc.h index 46b09ba6bea..46b09ba6bea 100644 --- a/include/asm-powerpc/ucc.h +++ b/arch/powerpc/include/asm/ucc.h diff --git a/include/asm-powerpc/ucc_fast.h b/arch/powerpc/include/asm/ucc_fast.h index fce16abe7ee..839aab8bf37 100644 --- a/include/asm-powerpc/ucc_fast.h +++ b/arch/powerpc/include/asm/ucc_fast.h @@ -1,6 +1,4 @@  /* - * include/asm-powerpc/ucc_fast.h - *   * Internal header file for UCC FAST unit routines.   *   * Copyright (C) 2006 Freescale Semicondutor, Inc. All rights reserved. diff --git a/include/asm-powerpc/ucc_slow.h b/arch/powerpc/include/asm/ucc_slow.h index 0980e6ad335..0980e6ad335 100644 --- a/include/asm-powerpc/ucc_slow.h +++ b/arch/powerpc/include/asm/ucc_slow.h diff --git a/include/asm-powerpc/ucontext.h b/arch/powerpc/include/asm/ucontext.h index d9a4ddf0cc8..d9a4ddf0cc8 100644 --- a/include/asm-powerpc/ucontext.h +++ b/arch/powerpc/include/asm/ucontext.h diff --git a/include/asm-powerpc/udbg.h b/arch/powerpc/include/asm/udbg.h index 6418ceea44b..6418ceea44b 100644 --- a/include/asm-powerpc/udbg.h +++ b/arch/powerpc/include/asm/udbg.h diff --git a/include/asm-powerpc/uic.h b/arch/powerpc/include/asm/uic.h index 970eb7e2186..597edfcae3d 100644 --- a/include/asm-powerpc/uic.h +++ b/arch/powerpc/include/asm/uic.h @@ -1,6 +1,4 @@  /* - * include/asm-powerpc/uic.h - *   * IBM PPC4xx UIC external definitions and structure.   *   * Maintainer: David Gibson <dwg@au1.ibm.com> diff --git a/include/asm-powerpc/unaligned.h b/arch/powerpc/include/asm/unaligned.h index 5f1b1e3c213..5f1b1e3c213 100644 --- a/include/asm-powerpc/unaligned.h +++ b/arch/powerpc/include/asm/unaligned.h diff --git a/include/asm-powerpc/uninorth.h b/arch/powerpc/include/asm/uninorth.h index f737732c386..f737732c386 100644 --- a/include/asm-powerpc/uninorth.h +++ b/arch/powerpc/include/asm/uninorth.h diff --git a/include/asm-powerpc/unistd.h b/arch/powerpc/include/asm/unistd.h index e07d0c76ed7..e07d0c76ed7 100644 --- a/include/asm-powerpc/unistd.h +++ b/arch/powerpc/include/asm/unistd.h diff --git a/include/asm-powerpc/user.h b/arch/powerpc/include/asm/user.h index 3fd4545dd74..3fd4545dd74 100644 --- a/include/asm-powerpc/user.h +++ b/arch/powerpc/include/asm/user.h diff --git a/include/asm-powerpc/vdso.h b/arch/powerpc/include/asm/vdso.h index 26fc449bd98..26fc449bd98 100644 --- a/include/asm-powerpc/vdso.h +++ b/arch/powerpc/include/asm/vdso.h diff --git a/include/asm-powerpc/vdso_datapage.h b/arch/powerpc/include/asm/vdso_datapage.h index f01393224b5..f01393224b5 100644 --- a/include/asm-powerpc/vdso_datapage.h +++ b/arch/powerpc/include/asm/vdso_datapage.h diff --git a/include/asm-powerpc/vga.h b/arch/powerpc/include/asm/vga.h index a2eac409c1e..a2eac409c1e 100644 --- a/include/asm-powerpc/vga.h +++ b/arch/powerpc/include/asm/vga.h diff --git a/include/asm-powerpc/vio.h b/arch/powerpc/include/asm/vio.h index 0a290a19594..0a290a19594 100644 --- a/include/asm-powerpc/vio.h +++ b/arch/powerpc/include/asm/vio.h diff --git a/include/asm-powerpc/xilinx_intc.h b/arch/powerpc/include/asm/xilinx_intc.h index 343612f8fec..343612f8fec 100644 --- a/include/asm-powerpc/xilinx_intc.h +++ b/arch/powerpc/include/asm/xilinx_intc.h diff --git a/include/asm-powerpc/xmon.h b/arch/powerpc/include/asm/xmon.h index 5eb8e599e5c..5eb8e599e5c 100644 --- a/include/asm-powerpc/xmon.h +++ b/arch/powerpc/include/asm/xmon.h diff --git a/include/asm-powerpc/xor.h b/arch/powerpc/include/asm/xor.h index c82eb12a5b1..c82eb12a5b1 100644 --- a/include/asm-powerpc/xor.h +++ b/arch/powerpc/include/asm/xor.h diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 1a4094704b1..64f5948ebc9 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -59,8 +59,6 @@ obj64-$(CONFIG_HIBERNATION)	+= swsusp_asm64.o  obj-$(CONFIG_MODULES)		+= module.o module_$(CONFIG_WORD_SIZE).o  obj-$(CONFIG_44x)		+= cpu_setup_44x.o -ifeq ($(CONFIG_PPC_MERGE),y) -  extra-$(CONFIG_PPC_STD_MMU)	:= head_32.o  extra-$(CONFIG_PPC64)		:= head_64.o  extra-$(CONFIG_40x)		:= head_40x.o @@ -100,12 +98,6 @@ ifneq ($(CONFIG_PPC_INDIRECT_IO),y)  obj-y				+= iomap.o  endif -else -# stuff used from here for ARCH=ppc -smpobj-$(CONFIG_SMP)		+= smp.o - -endif -  obj-$(CONFIG_PPC64)		+= $(obj64-y)  extra-$(CONFIG_PPC_FPU)		+= fpu.o @@ -121,9 +113,6 @@ PHONY += systbl_chk  systbl_chk: $(src)/systbl_chk.sh $(obj)/systbl_chk.i  	$(call cmd,systbl_chk) - -ifeq ($(CONFIG_PPC_MERGE),y) -  $(obj)/built-in.o:		prom_init_check  quiet_cmd_prom_init_check = CALL    $< @@ -133,7 +122,4 @@ PHONY += prom_init_check  prom_init_check: $(src)/prom_init_check.sh $(obj)/prom_init.o  	$(call cmd,prom_init_check) -endif - -  clean-files := vmlinux.lds diff --git a/arch/powerpc/kernel/cpu_setup_44x.S b/arch/powerpc/kernel/cpu_setup_44x.S index 5465e8de0e6..80cac984d85 100644 --- a/arch/powerpc/kernel/cpu_setup_44x.S +++ b/arch/powerpc/kernel/cpu_setup_44x.S @@ -39,12 +39,6 @@ _GLOBAL(__setup_cpu_440gx)  _GLOBAL(__setup_cpu_440spe)  	b	__fixup_440A_mcheck - /* Temporary fixup for arch/ppc until we kill the whole thing */ -#ifndef CONFIG_PPC_MERGE -_GLOBAL(__fixup_440A_mcheck) -	blr -#endif -  /* enable APU between CPU and FPU */  _GLOBAL(__init_fpu_44x)  	mfspr	r3,SPRN_CCR0 diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 6ac8612da3c..d972decf032 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c @@ -77,22 +77,12 @@ static int ppc_spurious_interrupts;  EXPORT_SYMBOL(__irq_offset_value);  atomic_t ppc_n_lost_interrupts; -#ifndef CONFIG_PPC_MERGE -#define NR_MASK_WORDS	((NR_IRQS + 31) / 32) -unsigned long ppc_cached_irq_mask[NR_MASK_WORDS]; -#endif -  #ifdef CONFIG_TAU_INT  extern int tau_initialized;  extern int tau_interrupts(int);  #endif  #endif /* CONFIG_PPC32 */ -#if defined(CONFIG_SMP) && !defined(CONFIG_PPC_MERGE) -extern atomic_t ipi_recv; -extern atomic_t ipi_sent; -#endif -  #ifdef CONFIG_PPC64  EXPORT_SYMBOL(irq_desc); @@ -216,21 +206,14 @@ int show_interrupts(struct seq_file *p, void *v)  skip:  		spin_unlock_irqrestore(&desc->lock, flags);  	} else if (i == NR_IRQS) { -#ifdef CONFIG_PPC32 -#ifdef CONFIG_TAU_INT +#if defined(CONFIG_PPC32) && defined(CONFIG_TAU_INT)  		if (tau_initialized){  			seq_puts(p, "TAU: ");  			for_each_online_cpu(j)  				seq_printf(p, "%10u ", tau_interrupts(j));  			seq_puts(p, "  PowerPC             Thermal Assist (cpu temp)\n");  		} -#endif -#if defined(CONFIG_SMP) && !defined(CONFIG_PPC_MERGE) -		/* should this be per processor send/receive? */ -		seq_printf(p, "IPI (recv/sent): %10u/%u\n", -				atomic_read(&ipi_recv), atomic_read(&ipi_sent)); -#endif -#endif /* CONFIG_PPC32 */ +#endif /* CONFIG_PPC32 && CONFIG_TAU_INT*/  		seq_printf(p, "BAD: %10u\n", ppc_spurious_interrupts);  	}  	return 0; @@ -454,8 +437,6 @@ void do_softirq(void)   * IRQ controller and virtual interrupts   */ -#ifdef CONFIG_PPC_MERGE -  static LIST_HEAD(irq_hosts);  static DEFINE_SPINLOCK(irq_big_lock);  static DEFINE_PER_CPU(unsigned int, irq_radix_reader); @@ -1114,8 +1095,6 @@ static int __init irq_debugfs_init(void)  __initcall(irq_debugfs_init);  #endif /* CONFIG_VIRQ_DEBUG */ -#endif /* CONFIG_PPC_MERGE */ -  #ifdef CONFIG_PPC64  static int __init setup_noirqdistrib(char *str)  { diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index e030f3bd502..957bded0020 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -276,10 +276,8 @@ int set_dabr(unsigned long dabr)  {  	__get_cpu_var(current_dabr) = dabr; -#ifdef CONFIG_PPC_MERGE		/* XXX for now */  	if (ppc_md.set_dabr)  		return ppc_md.set_dabr(dabr); -#endif  	/* XXX should we have a CPU_FTR_HAS_DABR ? */  #if defined(CONFIG_PPC64) || defined(CONFIG_6xx) diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index f177c60ea76..65639a43e64 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c @@ -788,9 +788,7 @@ static int __init vdso_init(void)  	return 0;  } -#ifdef CONFIG_PPC_MERGE  arch_initcall(vdso_init); -#endif  int in_gate_area_no_task(unsigned long addr)  { diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index 2a88e8b9a3c..d69912c07ce 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile @@ -6,12 +6,10 @@ ifeq ($(CONFIG_PPC64),y)  EXTRA_CFLAGS		+= -mno-minimal-toc  endif -ifeq ($(CONFIG_PPC_MERGE),y)  obj-y			:= string.o alloc.o \  			   checksum_$(CONFIG_WORD_SIZE).o  obj-$(CONFIG_PPC32)	+= div64.o copy_32.o crtsavres.o  obj-$(CONFIG_HAS_IOMEM)	+= devres.o -endif  obj-$(CONFIG_PPC64)	+= copypage_64.o copyuser_64.o \  			   memcpy_64.o usercopy_64.o mem_64.o string.o diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 702691cb9e8..1c93c255873 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c @@ -311,7 +311,7 @@ void __init paging_init(void)  #endif /* CONFIG_HIGHMEM */  	printk(KERN_DEBUG "Top of RAM: 0x%llx, Total RAM: 0x%lx\n", -	       (u64)top_of_ram, total_ram); +	       (unsigned long long)top_of_ram, total_ram);  	printk(KERN_DEBUG "Memory hole size: %ldMB\n",  	       (long int)((top_of_ram - total_ram) >> 20));  	memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c index c53145f6194..6aa12081377 100644 --- a/arch/powerpc/mm/ppc_mmu_32.c +++ b/arch/powerpc/mm/ppc_mmu_32.c @@ -236,8 +236,8 @@ void __init MMU_init_hw(void)  	Hash_end = (struct hash_pte *) ((unsigned long)Hash + Hash_size); -	printk("Total memory = %ldMB; using %ldkB for hash table (at %p)\n", -	       total_memory >> 20, Hash_size >> 10, Hash); +	printk("Total memory = %lldMB; using %ldkB for hash table (at %p)\n", +	       (unsigned long long)(total_memory >> 20), Hash_size >> 10, Hash);  	/* diff --git a/arch/powerpc/mm/tlb_64.c b/arch/powerpc/mm/tlb_64.c index 409fcc7b63c..be7dd422c0f 100644 --- a/arch/powerpc/mm/tlb_64.c +++ b/arch/powerpc/mm/tlb_64.c @@ -34,7 +34,7 @@  DEFINE_PER_CPU(struct ppc64_tlb_batch, ppc64_tlb_batch);  /* This is declared as we are using the more or less generic - * include/asm-powerpc/tlb.h file -- tgall + * arch/powerpc/include/asm/tlb.h file -- tgall   */  DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);  static DEFINE_PER_CPU(struct pte_freelist_batch *, pte_freelist_cur); diff --git a/arch/powerpc/platforms/52xx/Makefile b/arch/powerpc/platforms/52xx/Makefile index daf0e1568d6..b8a52062738 100644 --- a/arch/powerpc/platforms/52xx/Makefile +++ b/arch/powerpc/platforms/52xx/Makefile @@ -1,10 +1,8 @@  #  # Makefile for 52xx based boards  # -ifeq ($(CONFIG_PPC_MERGE),y)  obj-y				+= mpc52xx_pic.o mpc52xx_common.o  obj-$(CONFIG_PCI)		+= mpc52xx_pci.o -endif  obj-$(CONFIG_PPC_MPC5200_SIMPLE) += mpc5200_simple.o  obj-$(CONFIG_PPC_EFIKA)		+= efika.o @@ -15,4 +13,4 @@ ifeq ($(CONFIG_PPC_LITE5200),y)  	obj-$(CONFIG_PM)	+= lite5200_sleep.o lite5200_pm.o  endif -obj-$(CONFIG_PPC_MPC5200_GPIO)	+= mpc52xx_gpio.o
\ No newline at end of file +obj-$(CONFIG_PPC_MPC5200_GPIO)	+= mpc52xx_gpio.o diff --git a/arch/powerpc/platforms/86xx/mpc86xx_smp.c b/arch/powerpc/platforms/86xx/mpc86xx_smp.c index 835f2dc24dc..014e26cda08 100644 --- a/arch/powerpc/platforms/86xx/mpc86xx_smp.c +++ b/arch/powerpc/platforms/86xx/mpc86xx_smp.c @@ -19,7 +19,7 @@  #include <asm/page.h>  #include <asm/pgtable.h>  #include <asm/pci-bridge.h> -#include <asm-powerpc/mpic.h> +#include <asm/mpic.h>  #include <asm/mpc86xx.h>  #include <asm/cacheflush.h> diff --git a/arch/powerpc/platforms/Makefile b/arch/powerpc/platforms/Makefile index 423a0234dc3..8079e0b4fd6 100644 --- a/arch/powerpc/platforms/Makefile +++ b/arch/powerpc/platforms/Makefile @@ -1,13 +1,7 @@  obj-$(CONFIG_FSL_ULI1575)	+= fsl_uli1575.o -ifeq ($(CONFIG_PPC_MERGE),y)  obj-$(CONFIG_PPC_PMAC)		+= powermac/ -else -ifeq ($(CONFIG_PPC64),y) -obj-$(CONFIG_PPC_PMAC)		+= powermac/ -endif -endif  obj-$(CONFIG_PPC_CHRP)		+= chrp/  obj-$(CONFIG_40x)		+= 40x/  obj-$(CONFIG_44x)		+= 44x/ diff --git a/arch/powerpc/platforms/powermac/Makefile b/arch/powerpc/platforms/powermac/Makefile index 89774177b20..58ecdd72630 100644 --- a/arch/powerpc/platforms/powermac/Makefile +++ b/arch/powerpc/platforms/powermac/Makefile @@ -7,7 +7,7 @@ endif  obj-y				+= pic.o setup.o time.o feature.o pci.o \  				   sleep.o low_i2c.o cache.o pfunc_core.o \ -				   pfunc_base.o +				   pfunc_base.o udbg_scc.o udbg_adb.o  obj-$(CONFIG_PMAC_BACKLIGHT)	+= backlight.o  obj-$(CONFIG_CPU_FREQ_PMAC)	+= cpufreq_32.o  obj-$(CONFIG_CPU_FREQ_PMAC64)	+= cpufreq_64.o @@ -19,4 +19,3 @@ obj-$(CONFIG_NVRAM:m=y)		+= nvram.o  obj-$(CONFIG_PPC64)		+= nvram.o  obj-$(CONFIG_PPC32)		+= bootx_init.o  obj-$(CONFIG_SMP)		+= smp.o -obj-$(CONFIG_PPC_MERGE)		+= udbg_scc.o udbg_adb.o diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile index 16a0ed28eb0..a90054b56d5 100644 --- a/arch/powerpc/sysdev/Makefile +++ b/arch/powerpc/sysdev/Makefile @@ -25,7 +25,6 @@ obj-$(CONFIG_MV64X60)		+= $(mv64x60-y) mv64x60_pic.o mv64x60_dev.o \  obj-$(CONFIG_RTC_DRV_CMOS)	+= rtc_cmos_setup.o  obj-$(CONFIG_AXON_RAM)		+= axonram.o -ifeq ($(CONFIG_PPC_MERGE),y)  obj-$(CONFIG_PPC_INDIRECT_PCI)	+= indirect_pci.o  obj-$(CONFIG_PPC_I8259)		+= i8259.o  obj-$(CONFIG_IPIC)		+= ipic.o @@ -36,7 +35,6 @@ obj-$(CONFIG_OF_RTC)		+= of_rtc.o  ifeq ($(CONFIG_PCI),y)  obj-$(CONFIG_4xx)		+= ppc4xx_pci.o  endif -endif  # Temporary hack until we have migrated to asm-powerpc  ifeq ($(ARCH),powerpc) diff --git a/include/asm-s390/Kbuild b/arch/s390/include/asm/Kbuild index 63a23415fba..63a23415fba 100644 --- a/include/asm-s390/Kbuild +++ b/arch/s390/include/asm/Kbuild diff --git a/include/asm-s390/airq.h b/arch/s390/include/asm/airq.h index 1ac80d6b058..1ac80d6b058 100644 --- a/include/asm-s390/airq.h +++ b/arch/s390/include/asm/airq.h diff --git a/include/asm-s390/appldata.h b/arch/s390/include/asm/appldata.h index 79283dac828..79283dac828 100644 --- a/include/asm-s390/appldata.h +++ b/arch/s390/include/asm/appldata.h diff --git a/include/asm-s390/atomic.h b/arch/s390/include/asm/atomic.h index 2d184655bc5..2d184655bc5 100644 --- a/include/asm-s390/atomic.h +++ b/arch/s390/include/asm/atomic.h diff --git a/include/asm-s390/auxvec.h b/arch/s390/include/asm/auxvec.h index 0d340720fd9..0d340720fd9 100644 --- a/include/asm-s390/auxvec.h +++ b/arch/s390/include/asm/auxvec.h diff --git a/include/asm-s390/bitops.h b/arch/s390/include/asm/bitops.h index b4eb24ab5af..b4eb24ab5af 100644 --- a/include/asm-s390/bitops.h +++ b/arch/s390/include/asm/bitops.h diff --git a/include/asm-s390/bug.h b/arch/s390/include/asm/bug.h index 384e3621e34..384e3621e34 100644 --- a/include/asm-s390/bug.h +++ b/arch/s390/include/asm/bug.h diff --git a/include/asm-s390/bugs.h b/arch/s390/include/asm/bugs.h index 011f1e6a2a6..011f1e6a2a6 100644 --- a/include/asm-s390/bugs.h +++ b/arch/s390/include/asm/bugs.h diff --git a/include/asm-s390/byteorder.h b/arch/s390/include/asm/byteorder.h index 1fe2492baa8..1fe2492baa8 100644 --- a/include/asm-s390/byteorder.h +++ b/arch/s390/include/asm/byteorder.h diff --git a/include/asm-s390/cache.h b/arch/s390/include/asm/cache.h index 9b866816863..9b866816863 100644 --- a/include/asm-s390/cache.h +++ b/arch/s390/include/asm/cache.h diff --git a/include/asm-s390/cacheflush.h b/arch/s390/include/asm/cacheflush.h index 49d5af916d0..49d5af916d0 100644 --- a/include/asm-s390/cacheflush.h +++ b/arch/s390/include/asm/cacheflush.h diff --git a/include/asm-s390/ccwdev.h b/arch/s390/include/asm/ccwdev.h index ba007d8df94..ba007d8df94 100644 --- a/include/asm-s390/ccwdev.h +++ b/arch/s390/include/asm/ccwdev.h diff --git a/include/asm-s390/ccwgroup.h b/arch/s390/include/asm/ccwgroup.h index a27f68985a7..a27f68985a7 100644 --- a/include/asm-s390/ccwgroup.h +++ b/arch/s390/include/asm/ccwgroup.h diff --git a/include/asm-s390/checksum.h b/arch/s390/include/asm/checksum.h index d5a8e7c1477..d5a8e7c1477 100644 --- a/include/asm-s390/checksum.h +++ b/arch/s390/include/asm/checksum.h diff --git a/include/asm-s390/chpid.h b/arch/s390/include/asm/chpid.h index dfe3c7f3439..dfe3c7f3439 100644 --- a/include/asm-s390/chpid.h +++ b/arch/s390/include/asm/chpid.h diff --git a/include/asm-s390/chsc.h b/arch/s390/include/asm/chsc.h index d38d0cf62d4..d38d0cf62d4 100644 --- a/include/asm-s390/chsc.h +++ b/arch/s390/include/asm/chsc.h diff --git a/include/asm-s390/cio.h b/arch/s390/include/asm/cio.h index 6dccb071aec..6dccb071aec 100644 --- a/include/asm-s390/cio.h +++ b/arch/s390/include/asm/cio.h diff --git a/include/asm-s390/cmb.h b/arch/s390/include/asm/cmb.h index 50196857d27..50196857d27 100644 --- a/include/asm-s390/cmb.h +++ b/arch/s390/include/asm/cmb.h diff --git a/include/asm-s390/compat.h b/arch/s390/include/asm/compat.h index de065b32381..de065b32381 100644 --- a/include/asm-s390/compat.h +++ b/arch/s390/include/asm/compat.h diff --git a/include/asm-s390/cpcmd.h b/arch/s390/include/asm/cpcmd.h index 48a9eab1642..48a9eab1642 100644 --- a/include/asm-s390/cpcmd.h +++ b/arch/s390/include/asm/cpcmd.h diff --git a/include/asm-s390/cpu.h b/arch/s390/include/asm/cpu.h index e5a6a9ba3ad..e5a6a9ba3ad 100644 --- a/include/asm-s390/cpu.h +++ b/arch/s390/include/asm/cpu.h diff --git a/include/asm-s390/cputime.h b/arch/s390/include/asm/cputime.h index 133ce054fc8..133ce054fc8 100644 --- a/include/asm-s390/cputime.h +++ b/arch/s390/include/asm/cputime.h diff --git a/include/asm-s390/current.h b/arch/s390/include/asm/current.h index 83cf36cde2d..83cf36cde2d 100644 --- a/include/asm-s390/current.h +++ b/arch/s390/include/asm/current.h diff --git a/include/asm-s390/dasd.h b/arch/s390/include/asm/dasd.h index 3f002e13d02..3f002e13d02 100644 --- a/include/asm-s390/dasd.h +++ b/arch/s390/include/asm/dasd.h diff --git a/include/asm-s390/debug.h b/arch/s390/include/asm/debug.h index 9450ce6e32d..9450ce6e32d 100644 --- a/include/asm-s390/debug.h +++ b/arch/s390/include/asm/debug.h diff --git a/include/asm-s390/delay.h b/arch/s390/include/asm/delay.h index 78357314c45..78357314c45 100644 --- a/include/asm-s390/delay.h +++ b/arch/s390/include/asm/delay.h diff --git a/include/asm-s390/device.h b/arch/s390/include/asm/device.h index d8f9872b0e2..d8f9872b0e2 100644 --- a/include/asm-s390/device.h +++ b/arch/s390/include/asm/device.h diff --git a/include/asm-s390/diag.h b/arch/s390/include/asm/diag.h index 72b2e2f2d32..72b2e2f2d32 100644 --- a/include/asm-s390/diag.h +++ b/arch/s390/include/asm/diag.h diff --git a/include/asm-s390/div64.h b/arch/s390/include/asm/div64.h index 6cd978cefb2..6cd978cefb2 100644 --- a/include/asm-s390/div64.h +++ b/arch/s390/include/asm/div64.h diff --git a/include/asm-s390/dma.h b/arch/s390/include/asm/dma.h index 7425c6af6cd..7425c6af6cd 100644 --- a/include/asm-s390/dma.h +++ b/arch/s390/include/asm/dma.h diff --git a/include/asm-s390/ebcdic.h b/arch/s390/include/asm/ebcdic.h index 7f6f641d32f..7f6f641d32f 100644 --- a/include/asm-s390/ebcdic.h +++ b/arch/s390/include/asm/ebcdic.h diff --git a/include/asm-s390/elf.h b/arch/s390/include/asm/elf.h index 3cad5692381..3cad5692381 100644 --- a/include/asm-s390/elf.h +++ b/arch/s390/include/asm/elf.h diff --git a/include/asm-s390/emergency-restart.h b/arch/s390/include/asm/emergency-restart.h index 108d8c48e42..108d8c48e42 100644 --- a/include/asm-s390/emergency-restart.h +++ b/arch/s390/include/asm/emergency-restart.h diff --git a/include/asm-s390/errno.h b/arch/s390/include/asm/errno.h index e41d5b37c4d..e41d5b37c4d 100644 --- a/include/asm-s390/errno.h +++ b/arch/s390/include/asm/errno.h diff --git a/include/asm-s390/etr.h b/arch/s390/include/asm/etr.h index 80ef58c6197..80ef58c6197 100644 --- a/include/asm-s390/etr.h +++ b/arch/s390/include/asm/etr.h diff --git a/include/asm-s390/extmem.h b/arch/s390/include/asm/extmem.h index 33837d75618..33837d75618 100644 --- a/include/asm-s390/extmem.h +++ b/arch/s390/include/asm/extmem.h diff --git a/include/asm-s390/fb.h b/arch/s390/include/asm/fb.h index c7df3803099..c7df3803099 100644 --- a/include/asm-s390/fb.h +++ b/arch/s390/include/asm/fb.h diff --git a/include/asm-s390/fcntl.h b/arch/s390/include/asm/fcntl.h index 46ab12db573..46ab12db573 100644 --- a/include/asm-s390/fcntl.h +++ b/arch/s390/include/asm/fcntl.h diff --git a/include/asm-s390/fcx.h b/arch/s390/include/asm/fcx.h index 8be1f3a5804..8be1f3a5804 100644 --- a/include/asm-s390/fcx.h +++ b/arch/s390/include/asm/fcx.h diff --git a/include/asm-s390/futex.h b/arch/s390/include/asm/futex.h index 5c5d02de49e..5c5d02de49e 100644 --- a/include/asm-s390/futex.h +++ b/arch/s390/include/asm/futex.h diff --git a/include/asm-s390/hardirq.h b/arch/s390/include/asm/hardirq.h index 89ec7056da2..89ec7056da2 100644 --- a/include/asm-s390/hardirq.h +++ b/arch/s390/include/asm/hardirq.h diff --git a/include/asm-s390/hugetlb.h b/arch/s390/include/asm/hugetlb.h index 670a1d1745d..670a1d1745d 100644 --- a/include/asm-s390/hugetlb.h +++ b/arch/s390/include/asm/hugetlb.h diff --git a/include/asm-s390/idals.h b/arch/s390/include/asm/idals.h index e82c10efe65..e82c10efe65 100644 --- a/include/asm-s390/idals.h +++ b/arch/s390/include/asm/idals.h diff --git a/include/asm-s390/io.h b/arch/s390/include/asm/io.h index b7ff6afc3ca..b7ff6afc3ca 100644 --- a/include/asm-s390/io.h +++ b/arch/s390/include/asm/io.h diff --git a/include/asm-s390/ioctl.h b/arch/s390/include/asm/ioctl.h index b279fe06dfe..b279fe06dfe 100644 --- a/include/asm-s390/ioctl.h +++ b/arch/s390/include/asm/ioctl.h diff --git a/include/asm-s390/ioctls.h b/arch/s390/include/asm/ioctls.h index 40e481b1b46..40e481b1b46 100644 --- a/include/asm-s390/ioctls.h +++ b/arch/s390/include/asm/ioctls.h diff --git a/include/asm-s390/ipcbuf.h b/arch/s390/include/asm/ipcbuf.h index 37f293d12c8..37f293d12c8 100644 --- a/include/asm-s390/ipcbuf.h +++ b/arch/s390/include/asm/ipcbuf.h diff --git a/include/asm-s390/ipl.h b/arch/s390/include/asm/ipl.h index 1171e6d144a..1171e6d144a 100644 --- a/include/asm-s390/ipl.h +++ b/arch/s390/include/asm/ipl.h diff --git a/include/asm-s390/irq.h b/arch/s390/include/asm/irq.h index 7da991a858f..7da991a858f 100644 --- a/include/asm-s390/irq.h +++ b/arch/s390/include/asm/irq.h diff --git a/include/asm-s390/irq_regs.h b/arch/s390/include/asm/irq_regs.h index 3dd9c0b7027..3dd9c0b7027 100644 --- a/include/asm-s390/irq_regs.h +++ b/arch/s390/include/asm/irq_regs.h diff --git a/include/asm-s390/irqflags.h b/arch/s390/include/asm/irqflags.h index 3f26131120b..3f26131120b 100644 --- a/include/asm-s390/irqflags.h +++ b/arch/s390/include/asm/irqflags.h diff --git a/include/asm-s390/isc.h b/arch/s390/include/asm/isc.h index 34bb8916db4..34bb8916db4 100644 --- a/include/asm-s390/isc.h +++ b/arch/s390/include/asm/isc.h diff --git a/include/asm-s390/itcw.h b/arch/s390/include/asm/itcw.h index a9bc5c36b32..a9bc5c36b32 100644 --- a/include/asm-s390/itcw.h +++ b/arch/s390/include/asm/itcw.h diff --git a/include/asm-s390/kdebug.h b/arch/s390/include/asm/kdebug.h index 40db27cd6e6..40db27cd6e6 100644 --- a/include/asm-s390/kdebug.h +++ b/arch/s390/include/asm/kdebug.h diff --git a/include/asm-s390/kexec.h b/arch/s390/include/asm/kexec.h index f219c6411e0..f219c6411e0 100644 --- a/include/asm-s390/kexec.h +++ b/arch/s390/include/asm/kexec.h diff --git a/include/asm-s390/kmap_types.h b/arch/s390/include/asm/kmap_types.h index fd157464822..fd157464822 100644 --- a/include/asm-s390/kmap_types.h +++ b/arch/s390/include/asm/kmap_types.h diff --git a/include/asm-s390/kprobes.h b/arch/s390/include/asm/kprobes.h index 330f68caffe..330f68caffe 100644 --- a/include/asm-s390/kprobes.h +++ b/arch/s390/include/asm/kprobes.h diff --git a/include/asm-s390/kvm.h b/arch/s390/include/asm/kvm.h index d74002f9579..d74002f9579 100644 --- a/include/asm-s390/kvm.h +++ b/arch/s390/include/asm/kvm.h diff --git a/include/asm-s390/kvm_host.h b/arch/s390/include/asm/kvm_host.h index 3c55e4107dc..3c55e4107dc 100644 --- a/include/asm-s390/kvm_host.h +++ b/arch/s390/include/asm/kvm_host.h diff --git a/include/asm-s390/kvm_para.h b/arch/s390/include/asm/kvm_para.h index 2c503796b61..2c503796b61 100644 --- a/include/asm-s390/kvm_para.h +++ b/arch/s390/include/asm/kvm_para.h diff --git a/include/asm-s390/kvm_virtio.h b/arch/s390/include/asm/kvm_virtio.h index 146100224de..146100224de 100644 --- a/include/asm-s390/kvm_virtio.h +++ b/arch/s390/include/asm/kvm_virtio.h diff --git a/include/asm-s390/linkage.h b/arch/s390/include/asm/linkage.h index 291c2d01c44..291c2d01c44 100644 --- a/include/asm-s390/linkage.h +++ b/arch/s390/include/asm/linkage.h diff --git a/include/asm-s390/local.h b/arch/s390/include/asm/local.h index c11c530f74d..c11c530f74d 100644 --- a/include/asm-s390/local.h +++ b/arch/s390/include/asm/local.h diff --git a/include/asm-s390/lowcore.h b/arch/s390/include/asm/lowcore.h index 0bc51d52a89..0bc51d52a89 100644 --- a/include/asm-s390/lowcore.h +++ b/arch/s390/include/asm/lowcore.h diff --git a/include/asm-s390/mathemu.h b/arch/s390/include/asm/mathemu.h index e8dd1ba8edb..e8dd1ba8edb 100644 --- a/include/asm-s390/mathemu.h +++ b/arch/s390/include/asm/mathemu.h diff --git a/include/asm-s390/mman.h b/arch/s390/include/asm/mman.h index 7839767d837..7839767d837 100644 --- a/include/asm-s390/mman.h +++ b/arch/s390/include/asm/mman.h diff --git a/include/asm-s390/mmu.h b/arch/s390/include/asm/mmu.h index 5dd5e7b3476..5dd5e7b3476 100644 --- a/include/asm-s390/mmu.h +++ b/arch/s390/include/asm/mmu.h diff --git a/include/asm-s390/mmu_context.h b/arch/s390/include/asm/mmu_context.h index 4c2fbf48c9c..4c2fbf48c9c 100644 --- a/include/asm-s390/mmu_context.h +++ b/arch/s390/include/asm/mmu_context.h diff --git a/include/asm-s390/module.h b/arch/s390/include/asm/module.h index 1cc1c5af705..1cc1c5af705 100644 --- a/include/asm-s390/module.h +++ b/arch/s390/include/asm/module.h diff --git a/include/asm-s390/monwriter.h b/arch/s390/include/asm/monwriter.h index f0cbf96c52e..f0cbf96c52e 100644 --- a/include/asm-s390/monwriter.h +++ b/arch/s390/include/asm/monwriter.h diff --git a/include/asm-s390/msgbuf.h b/arch/s390/include/asm/msgbuf.h index 1bbdee92792..1bbdee92792 100644 --- a/include/asm-s390/msgbuf.h +++ b/arch/s390/include/asm/msgbuf.h diff --git a/include/asm-s390/mutex.h b/arch/s390/include/asm/mutex.h index 458c1f7fbc1..458c1f7fbc1 100644 --- a/include/asm-s390/mutex.h +++ b/arch/s390/include/asm/mutex.h diff --git a/include/asm-s390/page.h b/arch/s390/include/asm/page.h index 991ba939408..991ba939408 100644 --- a/include/asm-s390/page.h +++ b/arch/s390/include/asm/page.h diff --git a/include/asm-s390/param.h b/arch/s390/include/asm/param.h index 34aaa460334..34aaa460334 100644 --- a/include/asm-s390/param.h +++ b/arch/s390/include/asm/param.h diff --git a/include/asm-s390/pci.h b/arch/s390/include/asm/pci.h index 42a145c9ddd..42a145c9ddd 100644 --- a/include/asm-s390/pci.h +++ b/arch/s390/include/asm/pci.h diff --git a/include/asm-s390/percpu.h b/arch/s390/include/asm/percpu.h index 408d60b4f75..408d60b4f75 100644 --- a/include/asm-s390/percpu.h +++ b/arch/s390/include/asm/percpu.h diff --git a/include/asm-s390/pgalloc.h b/arch/s390/include/asm/pgalloc.h index f5b2bf3d7c1..f5b2bf3d7c1 100644 --- a/include/asm-s390/pgalloc.h +++ b/arch/s390/include/asm/pgalloc.h diff --git a/include/asm-s390/pgtable.h b/arch/s390/include/asm/pgtable.h index 0bdb704ae05..0bdb704ae05 100644 --- a/include/asm-s390/pgtable.h +++ b/arch/s390/include/asm/pgtable.h diff --git a/include/asm-s390/poll.h b/arch/s390/include/asm/poll.h index c98509d3149..c98509d3149 100644 --- a/include/asm-s390/poll.h +++ b/arch/s390/include/asm/poll.h diff --git a/include/asm-s390/posix_types.h b/arch/s390/include/asm/posix_types.h index 397d93fba3a..397d93fba3a 100644 --- a/include/asm-s390/posix_types.h +++ b/arch/s390/include/asm/posix_types.h diff --git a/include/asm-s390/processor.h b/arch/s390/include/asm/processor.h index 4af80af2a88..4af80af2a88 100644 --- a/include/asm-s390/processor.h +++ b/arch/s390/include/asm/processor.h diff --git a/include/asm-s390/ptrace.h b/arch/s390/include/asm/ptrace.h index af2c9ac28a0..af2c9ac28a0 100644 --- a/include/asm-s390/ptrace.h +++ b/arch/s390/include/asm/ptrace.h diff --git a/include/asm-s390/qdio.h b/arch/s390/include/asm/qdio.h index 6813772171f..6813772171f 100644 --- a/include/asm-s390/qdio.h +++ b/arch/s390/include/asm/qdio.h diff --git a/include/asm-s390/qeth.h b/arch/s390/include/asm/qeth.h index 930d378ef75..930d378ef75 100644 --- a/include/asm-s390/qeth.h +++ b/arch/s390/include/asm/qeth.h diff --git a/include/asm-s390/reset.h b/arch/s390/include/asm/reset.h index f584f4a5258..f584f4a5258 100644 --- a/include/asm-s390/reset.h +++ b/arch/s390/include/asm/reset.h diff --git a/include/asm-s390/resource.h b/arch/s390/include/asm/resource.h index 366c01de04f..366c01de04f 100644 --- a/include/asm-s390/resource.h +++ b/arch/s390/include/asm/resource.h diff --git a/include/asm-s390/rwsem.h b/arch/s390/include/asm/rwsem.h index 9d2a1797180..9d2a1797180 100644 --- a/include/asm-s390/rwsem.h +++ b/arch/s390/include/asm/rwsem.h diff --git a/include/asm-s390/s390_ext.h b/arch/s390/include/asm/s390_ext.h index 2afc060266a..2afc060266a 100644 --- a/include/asm-s390/s390_ext.h +++ b/arch/s390/include/asm/s390_ext.h diff --git a/include/asm-s390/s390_rdev.h b/arch/s390/include/asm/s390_rdev.h index 6fa20442a48..6fa20442a48 100644 --- a/include/asm-s390/s390_rdev.h +++ b/arch/s390/include/asm/s390_rdev.h diff --git a/include/asm-s390/scatterlist.h b/arch/s390/include/asm/scatterlist.h index 29ec8e28c8d..29ec8e28c8d 100644 --- a/include/asm-s390/scatterlist.h +++ b/arch/s390/include/asm/scatterlist.h diff --git a/include/asm-s390/schid.h b/arch/s390/include/asm/schid.h index 825503cf3dc..825503cf3dc 100644 --- a/include/asm-s390/schid.h +++ b/arch/s390/include/asm/schid.h diff --git a/include/asm-s390/sclp.h b/arch/s390/include/asm/sclp.h index fed7bee650a..fed7bee650a 100644 --- a/include/asm-s390/sclp.h +++ b/arch/s390/include/asm/sclp.h diff --git a/include/asm-s390/sections.h b/arch/s390/include/asm/sections.h index fbd9116eb17..fbd9116eb17 100644 --- a/include/asm-s390/sections.h +++ b/arch/s390/include/asm/sections.h diff --git a/include/asm-s390/segment.h b/arch/s390/include/asm/segment.h index 8bfce3475b1..8bfce3475b1 100644 --- a/include/asm-s390/segment.h +++ b/arch/s390/include/asm/segment.h diff --git a/include/asm-s390/sembuf.h b/arch/s390/include/asm/sembuf.h index 32626b0cac4..32626b0cac4 100644 --- a/include/asm-s390/sembuf.h +++ b/arch/s390/include/asm/sembuf.h diff --git a/include/asm-s390/setup.h b/arch/s390/include/asm/setup.h index 2bd9faeb391..2bd9faeb391 100644 --- a/include/asm-s390/setup.h +++ b/arch/s390/include/asm/setup.h diff --git a/include/asm-s390/sfp-machine.h b/arch/s390/include/asm/sfp-machine.h index 4e16aede4b0..4e16aede4b0 100644 --- a/include/asm-s390/sfp-machine.h +++ b/arch/s390/include/asm/sfp-machine.h diff --git a/include/asm-s390/sfp-util.h b/arch/s390/include/asm/sfp-util.h index 0addc6466d9..0addc6466d9 100644 --- a/include/asm-s390/sfp-util.h +++ b/arch/s390/include/asm/sfp-util.h diff --git a/include/asm-s390/shmbuf.h b/arch/s390/include/asm/shmbuf.h index eed2e280ce3..eed2e280ce3 100644 --- a/include/asm-s390/shmbuf.h +++ b/arch/s390/include/asm/shmbuf.h diff --git a/include/asm-s390/shmparam.h b/arch/s390/include/asm/shmparam.h index c2e0c0508e7..c2e0c0508e7 100644 --- a/include/asm-s390/shmparam.h +++ b/arch/s390/include/asm/shmparam.h diff --git a/include/asm-s390/sigcontext.h b/arch/s390/include/asm/sigcontext.h index aeb6e0b1332..aeb6e0b1332 100644 --- a/include/asm-s390/sigcontext.h +++ b/arch/s390/include/asm/sigcontext.h diff --git a/include/asm-s390/siginfo.h b/arch/s390/include/asm/siginfo.h index e0ff1ab054b..e0ff1ab054b 100644 --- a/include/asm-s390/siginfo.h +++ b/arch/s390/include/asm/siginfo.h diff --git a/include/asm-s390/signal.h b/arch/s390/include/asm/signal.h index f6cfddb278c..f6cfddb278c 100644 --- a/include/asm-s390/signal.h +++ b/arch/s390/include/asm/signal.h diff --git a/include/asm-s390/sigp.h b/arch/s390/include/asm/sigp.h index e16d56f8dfe..e16d56f8dfe 100644 --- a/include/asm-s390/sigp.h +++ b/arch/s390/include/asm/sigp.h diff --git a/include/asm-s390/smp.h b/arch/s390/include/asm/smp.h index ae89cf2478f..ae89cf2478f 100644 --- a/include/asm-s390/smp.h +++ b/arch/s390/include/asm/smp.h diff --git a/include/asm-s390/socket.h b/arch/s390/include/asm/socket.h index c786ab623b2..c786ab623b2 100644 --- a/include/asm-s390/socket.h +++ b/arch/s390/include/asm/socket.h diff --git a/include/asm-s390/sockios.h b/arch/s390/include/asm/sockios.h index f4fc16c7da5..f4fc16c7da5 100644 --- a/include/asm-s390/sockios.h +++ b/arch/s390/include/asm/sockios.h diff --git a/include/asm-s390/sparsemem.h b/arch/s390/include/asm/sparsemem.h index 545d219e6a2..545d219e6a2 100644 --- a/include/asm-s390/sparsemem.h +++ b/arch/s390/include/asm/sparsemem.h diff --git a/include/asm-s390/spinlock.h b/arch/s390/include/asm/spinlock.h index df84ae96915..df84ae96915 100644 --- a/include/asm-s390/spinlock.h +++ b/arch/s390/include/asm/spinlock.h diff --git a/include/asm-s390/spinlock_types.h b/arch/s390/include/asm/spinlock_types.h index 654abc40de0..654abc40de0 100644 --- a/include/asm-s390/spinlock_types.h +++ b/arch/s390/include/asm/spinlock_types.h diff --git a/include/asm-s390/stat.h b/arch/s390/include/asm/stat.h index d92959eebb6..d92959eebb6 100644 --- a/include/asm-s390/stat.h +++ b/arch/s390/include/asm/stat.h diff --git a/include/asm-s390/statfs.h b/arch/s390/include/asm/statfs.h index 099a4557919..099a4557919 100644 --- a/include/asm-s390/statfs.h +++ b/arch/s390/include/asm/statfs.h diff --git a/include/asm-s390/string.h b/arch/s390/include/asm/string.h index d074673a6d9..d074673a6d9 100644 --- a/include/asm-s390/string.h +++ b/arch/s390/include/asm/string.h diff --git a/include/asm-s390/suspend.h b/arch/s390/include/asm/suspend.h index 1f34580e67a..1f34580e67a 100644 --- a/include/asm-s390/suspend.h +++ b/arch/s390/include/asm/suspend.h diff --git a/include/asm-s390/sysinfo.h b/arch/s390/include/asm/sysinfo.h index 79d01343f8b..79d01343f8b 100644 --- a/include/asm-s390/sysinfo.h +++ b/arch/s390/include/asm/sysinfo.h diff --git a/include/asm-s390/system.h b/arch/s390/include/asm/system.h index 819e7d99ca0..819e7d99ca0 100644 --- a/include/asm-s390/system.h +++ b/arch/s390/include/asm/system.h diff --git a/include/asm-s390/tape390.h b/arch/s390/include/asm/tape390.h index 884fba48f1f..884fba48f1f 100644 --- a/include/asm-s390/tape390.h +++ b/arch/s390/include/asm/tape390.h diff --git a/include/asm-s390/termbits.h b/arch/s390/include/asm/termbits.h index 58731853d52..58731853d52 100644 --- a/include/asm-s390/termbits.h +++ b/arch/s390/include/asm/termbits.h diff --git a/include/asm-s390/termios.h b/arch/s390/include/asm/termios.h index 67f66278f53..67f66278f53 100644 --- a/include/asm-s390/termios.h +++ b/arch/s390/include/asm/termios.h diff --git a/include/asm-s390/thread_info.h b/arch/s390/include/asm/thread_info.h index 91a8f93ad35..91a8f93ad35 100644 --- a/include/asm-s390/thread_info.h +++ b/arch/s390/include/asm/thread_info.h diff --git a/include/asm-s390/timer.h b/arch/s390/include/asm/timer.h index d98d79e35cd..d98d79e35cd 100644 --- a/include/asm-s390/timer.h +++ b/arch/s390/include/asm/timer.h diff --git a/include/asm-s390/timex.h b/arch/s390/include/asm/timex.h index d744c3d62de..d744c3d62de 100644 --- a/include/asm-s390/timex.h +++ b/arch/s390/include/asm/timex.h diff --git a/include/asm-s390/tlb.h b/arch/s390/include/asm/tlb.h index 3d8a96d39d9..3d8a96d39d9 100644 --- a/include/asm-s390/tlb.h +++ b/arch/s390/include/asm/tlb.h diff --git a/include/asm-s390/tlbflush.h b/arch/s390/include/asm/tlbflush.h index d60394b9745..d60394b9745 100644 --- a/include/asm-s390/tlbflush.h +++ b/arch/s390/include/asm/tlbflush.h diff --git a/include/asm-s390/todclk.h b/arch/s390/include/asm/todclk.h index c7f62055488..c7f62055488 100644 --- a/include/asm-s390/todclk.h +++ b/arch/s390/include/asm/todclk.h diff --git a/include/asm-s390/topology.h b/arch/s390/include/asm/topology.h index d96c9164345..d96c9164345 100644 --- a/include/asm-s390/topology.h +++ b/arch/s390/include/asm/topology.h diff --git a/include/asm-s390/types.h b/arch/s390/include/asm/types.h index 41c54765613..41c54765613 100644 --- a/include/asm-s390/types.h +++ b/arch/s390/include/asm/types.h diff --git a/include/asm-s390/uaccess.h b/arch/s390/include/asm/uaccess.h index 0235970278f..0235970278f 100644 --- a/include/asm-s390/uaccess.h +++ b/arch/s390/include/asm/uaccess.h diff --git a/include/asm-s390/ucontext.h b/arch/s390/include/asm/ucontext.h index d69bec0b03f..d69bec0b03f 100644 --- a/include/asm-s390/ucontext.h +++ b/arch/s390/include/asm/ucontext.h diff --git a/include/asm-s390/unaligned.h b/arch/s390/include/asm/unaligned.h index da9627afe5d..da9627afe5d 100644 --- a/include/asm-s390/unaligned.h +++ b/arch/s390/include/asm/unaligned.h diff --git a/include/asm-s390/unistd.h b/arch/s390/include/asm/unistd.h index c8ad350d144..c8ad350d144 100644 --- a/include/asm-s390/unistd.h +++ b/arch/s390/include/asm/unistd.h diff --git a/include/asm-s390/user.h b/arch/s390/include/asm/user.h index 1b050e35fdc..1b050e35fdc 100644 --- a/include/asm-s390/user.h +++ b/arch/s390/include/asm/user.h diff --git a/include/asm-s390/vtoc.h b/arch/s390/include/asm/vtoc.h index 3a5267d90d2..3a5267d90d2 100644 --- a/include/asm-s390/vtoc.h +++ b/arch/s390/include/asm/vtoc.h diff --git a/include/asm-s390/xor.h b/arch/s390/include/asm/xor.h index c82eb12a5b1..c82eb12a5b1 100644 --- a/include/asm-s390/xor.h +++ b/arch/s390/include/asm/xor.h diff --git a/include/asm-s390/zcrypt.h b/arch/s390/include/asm/zcrypt.h index 00d3bbd4411..00d3bbd4411 100644 --- a/include/asm-s390/zcrypt.h +++ b/arch/s390/include/asm/zcrypt.h diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index cb992c3d6b7..5131d50f851 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -48,6 +48,9 @@ config GENERIC_HWEIGHT  config GENERIC_HARDIRQS  	def_bool y +config GENERIC_HARDIRQS_NO__DO_IRQ +	def_bool y +  config GENERIC_IRQ_PROBE  	def_bool y @@ -63,6 +66,10 @@ config GENERIC_TIME  config GENERIC_CLOCKEVENTS  	def_bool n +config GENERIC_LOCKBREAK +	def_bool y +	depends on SMP && PREEMPT +  config SYS_SUPPORTS_PM  	bool @@ -94,9 +101,6 @@ config ARCH_HAS_ILOG2_U64  config ARCH_NO_VIRT_TO_BUS  	def_bool y -config ARCH_SUPPORTS_AOUT -	def_bool y -  config IO_TRAPPED  	bool @@ -483,6 +487,23 @@ config CRASH_DUMP  	  For more details see Documentation/kdump/kdump.txt +config SECCOMP +	bool "Enable seccomp to safely compute untrusted bytecode" +	depends on PROC_FS +	default y +	help +	  This kernel feature is useful for number crunching applications +	  that may need to compute untrusted bytecode during their +	  execution. By using pipes or other transports made available to +	  the process as file descriptors supporting the read/write +	  syscalls, it's possible to isolate those applications in +	  their own address space using seccomp. Once seccomp is +	  enabled via prctl, it cannot be disabled and the task is only +	  allowed to execute a few safe syscalls defined by each seccomp +	  mode. + +	  If unsure, say N. +  config SMP  	bool "Symmetric multi-processing support"  	depends on SYS_SUPPORTS_SMP diff --git a/arch/sh/Kconfig.debug b/arch/sh/Kconfig.debug index 36f4b1f7066..4d2d102e00d 100644 --- a/arch/sh/Kconfig.debug +++ b/arch/sh/Kconfig.debug @@ -182,7 +182,7 @@ if SUPERH64  config SH64_PROC_ASIDS  	bool "Debug: report ASIDs through /proc/asids" -	depends on PROC_FS +	depends on PROC_FS && MMU  config SH64_SR_WATCH  	bool "Debug: set SR.WATCH to enable hardware watchpoints and trace" diff --git a/arch/sh/Makefile b/arch/sh/Makefile index 25659ce74ba..01d85c74481 100644 --- a/arch/sh/Makefile +++ b/arch/sh/Makefile @@ -95,8 +95,6 @@ head-y			:= arch/sh/kernel/init_task.o  head-$(CONFIG_SUPERH32)	+= arch/sh/kernel/head_32.o  head-$(CONFIG_SUPERH64)	+= arch/sh/kernel/head_64.o -LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name) -  core-y				+= arch/sh/kernel/ arch/sh/mm/ arch/sh/boards/  core-$(CONFIG_SH_FPU_EMU)	+= arch/sh/math-emu/ @@ -145,10 +143,6 @@ cpuincdir-$(CONFIG_CPU_SH4)	+= cpu-sh4  cpuincdir-$(CONFIG_CPU_SH5)	+= cpu-sh5  cpuincdir-y			+= cpu-common	# Must be last -libs-$(CONFIG_SUPERH32)		:= arch/sh/lib/	$(libs-y) -libs-$(CONFIG_SUPERH64)		:= arch/sh/lib64/ $(libs-y) -libs-y				+= $(LIBGCC) -  drivers-y			+= arch/sh/drivers/  drivers-$(CONFIG_OPROFILE)	+= arch/sh/oprofile/ @@ -161,10 +155,16 @@ KBUILD_CFLAGS		+= -pipe $(cflags-y)  KBUILD_CPPFLAGS		+= $(cflags-y)  KBUILD_AFLAGS		+= $(cflags-y) +LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name) + +libs-$(CONFIG_SUPERH32)		:= arch/sh/lib/	$(libs-y) +libs-$(CONFIG_SUPERH64)		:= arch/sh/lib64/ $(libs-y) +libs-y				+= $(LIBGCC) +  PHONY += maketools FORCE  maketools:  include/linux/version.h FORCE -	$(Q)$(MAKE) $(build)=arch/sh/tools arch/sh/include/asm/machtypes.h +	$(Q)$(MAKE) $(build)=arch/sh/tools include/asm-sh/machtypes.h  all: $(KBUILD_IMAGE) @@ -215,4 +215,4 @@ arch/sh/lib64/syscalltab.h: arch/sh/kernel/syscalls_64.S  	$(call filechk,gen-syscalltab)  CLEAN_FILES += arch/sh/lib64/syscalltab.h \ -	       arch/sh/include/asm/machtypes.h +	       include/asm-sh/machtypes.h diff --git a/arch/sh/boards/Makefile b/arch/sh/boards/Makefile index ff9b93c5a91..463022c7df3 100644 --- a/arch/sh/boards/Makefile +++ b/arch/sh/boards/Makefile @@ -5,4 +5,4 @@ obj-$(CONFIG_SH_AP325RXA)	+= board-ap325rxa.o  obj-$(CONFIG_SH_MAGIC_PANEL_R2)	+= board-magicpanelr2.o  obj-$(CONFIG_SH_RSK7203)	+= board-rsk7203.o  obj-$(CONFIG_SH_SH7785LCR)	+= board-sh7785lcr.o -obj-$(CONFIG_SH_SHMIN)		+= board-shmin..o +obj-$(CONFIG_SH_SHMIN)		+= board-shmin.o diff --git a/arch/sh/boards/board-ap325rxa.c b/arch/sh/boards/board-ap325rxa.c index 9c71603d29a..025d4fe55a5 100644 --- a/arch/sh/boards/board-ap325rxa.c +++ b/arch/sh/boards/board-ap325rxa.c @@ -17,7 +17,6 @@  #include <linux/mtd/physmap.h>  #include <linux/delay.h>  #include <linux/i2c.h> -#include <linux/delay.h>  #include <linux/smc911x.h>  #include <media/soc_camera_platform.h>  #include <media/sh_mobile_ceu.h> diff --git a/arch/sh/boards/mach-se/7343/irq.c b/arch/sh/boards/mach-se/7343/irq.c index 5d96e2eef82..051c29d4eae 100644 --- a/arch/sh/boards/mach-se/7343/irq.c +++ b/arch/sh/boards/mach-se/7343/irq.c @@ -13,7 +13,6 @@  #include <linux/init.h>  #include <linux/irq.h>  #include <linux/interrupt.h> -#include <linux/irq.h>  #include <linux/io.h>  #include <mach-se/mach/se7343.h> diff --git a/arch/sh/boards/mach-systemh/irq.c b/arch/sh/boards/mach-systemh/irq.c index 0ba2fe674c4..601c9c8cdbe 100644 --- a/arch/sh/boards/mach-systemh/irq.c +++ b/arch/sh/boards/mach-systemh/irq.c @@ -11,9 +11,8 @@  #include <linux/init.h>  #include <linux/irq.h> +#include <linux/interrupt.h> -#include <linux/hdreg.h> -#include <linux/ide.h>  #include <asm/io.h>  #include <asm/systemh7751.h>  #include <asm/smc37c93x.h> diff --git a/arch/sh/configs/dreamcast_defconfig b/arch/sh/configs/dreamcast_defconfig index d4075283956..3dc1cbd8a98 100644 --- a/arch/sh/configs/dreamcast_defconfig +++ b/arch/sh/configs/dreamcast_defconfig @@ -1,7 +1,7 @@  #  # Automatically generated make config: don't edit -# Linux kernel version: 2.6.26 -# Wed Jul 30 01:34:24 2008 +# Linux kernel version: 2.6.27-rc1 +# Mon Aug  4 16:49:13 2008  #  CONFIG_SUPERH=y  CONFIG_SUPERH32=y @@ -11,6 +11,7 @@ CONFIG_GENERIC_BUG=y  CONFIG_GENERIC_FIND_NEXT_BIT=y  CONFIG_GENERIC_HWEIGHT=y  CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y  CONFIG_GENERIC_IRQ_PROBE=y  CONFIG_GENERIC_CALIBRATE_DELAY=y  CONFIG_GENERIC_TIME=y @@ -21,7 +22,6 @@ CONFIG_LOCKDEP_SUPPORT=y  # CONFIG_ARCH_HAS_ILOG2_U32 is not set  # CONFIG_ARCH_HAS_ILOG2_U64 is not set  CONFIG_ARCH_NO_VIRT_TO_BUS=y -CONFIG_ARCH_SUPPORTS_AOUT=y  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"  # @@ -87,6 +87,7 @@ CONFIG_HAVE_OPROFILE=y  # CONFIG_USE_GENERIC_SMP_HELPERS is not set  CONFIG_HAVE_CLK=y  CONFIG_PROC_PAGE_MONITOR=y +CONFIG_HAVE_GENERIC_DMA_COHERENT=y  CONFIG_SLABINFO=y  CONFIG_RT_MUTEXES=y  # CONFIG_TINY_SHMEM is not set @@ -284,6 +285,7 @@ CONFIG_HZ=250  # CONFIG_SCHED_HRTICK is not set  # CONFIG_KEXEC is not set  # CONFIG_CRASH_DUMP is not set +CONFIG_SECCOMP=y  # CONFIG_PREEMPT_NONE is not set  # CONFIG_PREEMPT_VOLUNTARY is not set  CONFIG_PREEMPT=y @@ -317,10 +319,6 @@ CONFIG_PCI_LEGACY=y  #  CONFIG_BINFMT_ELF=y  # CONFIG_BINFMT_MISC is not set - -# -# Networking -#  CONFIG_NET=y  # @@ -555,7 +553,7 @@ CONFIG_INPUT_KEYBOARD=y  # CONFIG_KEYBOARD_XTKBD is not set  # CONFIG_KEYBOARD_NEWTON is not set  # CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_MAPLE is not set +CONFIG_KEYBOARD_MAPLE=y  # CONFIG_KEYBOARD_SH_KEYSC is not set  CONFIG_INPUT_MOUSE=y  # CONFIG_MOUSE_PS2 is not set diff --git a/arch/sh/include/asm/a.out.h b/arch/sh/include/asm/a.out.h deleted file mode 100644 index 1f93130e179..00000000000 --- a/arch/sh/include/asm/a.out.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef __ASM_SH_A_OUT_H -#define __ASM_SH_A_OUT_H - -struct exec -{ -  unsigned long a_info;		/* Use macros N_MAGIC, etc for access */ -  unsigned a_text;		/* length of text, in bytes */ -  unsigned a_data;		/* length of data, in bytes */ -  unsigned a_bss;		/* length of uninitialized data area for file, in bytes */ -  unsigned a_syms;		/* length of symbol table data in file, in bytes */ -  unsigned a_entry;		/* start address */ -  unsigned a_trsize;		/* length of relocation info for text, in bytes */ -  unsigned a_drsize;		/* length of relocation info for data, in bytes */ -}; - -#define N_TRSIZE(a)	((a).a_trsize) -#define N_DRSIZE(a)	((a).a_drsize) -#define N_SYMSIZE(a)	((a).a_syms) - -#endif /* __ASM_SH_A_OUT_H */ diff --git a/arch/sh/include/asm/ptrace.h b/arch/sh/include/asm/ptrace.h index 643ab5a7cf3..b86aeabba61 100644 --- a/arch/sh/include/asm/ptrace.h +++ b/arch/sh/include/asm/ptrace.h @@ -104,6 +104,15 @@ struct pt_dspregs {  extern void show_regs(struct pt_regs *); +/* + * These are defined as per linux/ptrace.h. + */ +struct task_struct; + +#define arch_has_single_step()	(1) +extern void user_enable_single_step(struct task_struct *); +extern void user_disable_single_step(struct task_struct *); +  #ifdef CONFIG_SH_DSP  #define task_pt_regs(task) \  	((struct pt_regs *) (task_stack_page(task) + THREAD_SIZE \ diff --git a/arch/sh/include/asm/seccomp.h b/arch/sh/include/asm/seccomp.h new file mode 100644 index 00000000000..3280ed3802e --- /dev/null +++ b/arch/sh/include/asm/seccomp.h @@ -0,0 +1,10 @@ +#ifndef __ASM_SECCOMP_H + +#include <linux/unistd.h> + +#define __NR_seccomp_read __NR_read +#define __NR_seccomp_write __NR_write +#define __NR_seccomp_exit __NR_exit +#define __NR_seccomp_sigreturn __NR_rt_sigreturn + +#endif /* __ASM_SECCOMP_H */ diff --git a/arch/sh/include/asm/thread_info.h b/arch/sh/include/asm/thread_info.h index eeb4c747119..0a894cafb1d 100644 --- a/arch/sh/include/asm/thread_info.h +++ b/arch/sh/include/asm/thread_info.h @@ -117,24 +117,45 @@ static inline struct thread_info *current_thread_info(void)  #define TIF_NEED_RESCHED	2	/* rescheduling necessary */  #define TIF_RESTORE_SIGMASK	3	/* restore signal mask in do_signal() */  #define TIF_SINGLESTEP		4	/* singlestepping active */ -#define TIF_SYSCALL_AUDIT	5 +#define TIF_SYSCALL_AUDIT	5	/* syscall auditing active */ +#define TIF_SECCOMP		6	/* secure computing */ +#define TIF_NOTIFY_RESUME	7	/* callback before returning to user */  #define TIF_USEDFPU		16	/* FPU was used by this task this quantum (SMP) */  #define TIF_POLLING_NRFLAG	17	/* true if poll_idle() is polling TIF_NEED_RESCHED */  #define TIF_MEMDIE		18 -#define TIF_FREEZE		19 +#define TIF_FREEZE		19	/* Freezing for suspend */ -#define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE) -#define _TIF_SIGPENDING		(1<<TIF_SIGPENDING) -#define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED) -#define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK) -#define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP) -#define _TIF_SYSCALL_AUDIT		(1<<TIF_SYSCALL_AUDIT) -#define _TIF_USEDFPU		(1<<TIF_USEDFPU) -#define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG) -#define _TIF_FREEZE		(1<<TIF_FREEZE) +#define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE) +#define _TIF_SIGPENDING		(1 << TIF_SIGPENDING) +#define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED) +#define _TIF_RESTORE_SIGMASK	(1 << TIF_RESTORE_SIGMASK) +#define _TIF_SINGLESTEP		(1 << TIF_SINGLESTEP) +#define _TIF_SYSCALL_AUDIT	(1 << TIF_SYSCALL_AUDIT) +#define _TIF_SECCOMP		(1 << TIF_SECCOMP) +#define _TIF_NOTIFY_RESUME	(1 << TIF_NOTIFY_RESUME) +#define _TIF_USEDFPU		(1 << TIF_USEDFPU) +#define _TIF_POLLING_NRFLAG	(1 << TIF_POLLING_NRFLAG) +#define _TIF_FREEZE		(1 << TIF_FREEZE) -#define _TIF_WORK_MASK		0x000000FE	/* work to do on interrupt/exception return */ -#define _TIF_ALLWORK_MASK	0x000000FF	/* work to do on any return to u-space */ +/* + * _TIF_ALLWORK_MASK and _TIF_WORK_MASK need to fit within a byte, or we + * blow the tst immediate size constraints and need to fix up + * arch/sh/kernel/entry-common.S. + */ + +/* work to do in syscall trace */ +#define _TIF_WORK_SYSCALL_MASK	(_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \ +				 _TIF_SYSCALL_AUDIT | _TIF_SECCOMP) + +/* work to do on any return to u-space */ +#define _TIF_ALLWORK_MASK	(_TIF_SYSCALL_TRACE | _TIF_SIGPENDING      | \ +				 _TIF_NEED_RESCHED  | _TIF_SYSCALL_AUDIT   | \ +				 _TIF_SINGLESTEP    | _TIF_RESTORE_SIGMASK | \ +				 _TIF_NOTIFY_RESUME) + +/* work to do on interrupt/exception return */ +#define _TIF_WORK_MASK		(_TIF_ALLWORK_MASK & ~(_TIF_SYSCALL_TRACE | \ +				 _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP))  #endif /* __KERNEL__ */ diff --git a/arch/sh/include/asm/tlb_64.h b/arch/sh/include/asm/tlb_64.h index 0a96f3af69e..ef0ae2a28f2 100644 --- a/arch/sh/include/asm/tlb_64.h +++ b/arch/sh/include/asm/tlb_64.h @@ -21,11 +21,9 @@  #ifndef __ASSEMBLY__  /** - * for_each_dtlb_entry + * for_each_dtlb_entry - Iterate over free (non-wired) DTLB entries   *   * @tlb:	TLB entry - * - * Iterate over free (non-wired) DTLB entries   */  #define for_each_dtlb_entry(tlb)		\  	for (tlb  = cpu_data->dtlb.first;	\ @@ -33,11 +31,9 @@  	     tlb += cpu_data->dtlb.step)  /** - * for_each_itlb_entry + * for_each_itlb_entry - Iterate over free (non-wired) ITLB entries   *   * @tlb:	TLB entry - * - * Iterate over free (non-wired) ITLB entries   */  #define for_each_itlb_entry(tlb)		\  	for (tlb  = cpu_data->itlb.first;	\ @@ -45,11 +41,9 @@  	     tlb += cpu_data->itlb.step)  /** - * __flush_tlb_slot + * __flush_tlb_slot - Flushes TLB slot @slot.   *   * @slot:	Address of TLB slot. - * - * Flushes TLB slot @slot.   */  static inline void __flush_tlb_slot(unsigned long long slot)  { diff --git a/arch/sh/include/cpu-sh2/cpu/cache.h b/arch/sh/include/cpu-sh2/cpu/cache.h index 4e0b1650068..673515bc413 100644 --- a/arch/sh/include/cpu-sh2/cpu/cache.h +++ b/arch/sh/include/cpu-sh2/cpu/cache.h @@ -21,11 +21,11 @@  #define CCR		0xffffffec  #define CCR_CACHE_CE	0x01	/* Cache enable */ -#define CCR_CACHE_WT	0x06    /* CCR[bit1=1,bit2=1] */ +#define CCR_CACHE_WT	0x02    /* CCR[bit1=1,bit2=1] */  				/* 0x00000000-0x7fffffff: Write-through  */  				/* 0x80000000-0x9fffffff: Write-back     */                                  /* 0xc0000000-0xdfffffff: Write-through  */ -#define CCR_CACHE_CB	0x00    /* CCR[bit1=0,bit2=0] */ +#define CCR_CACHE_CB	0x04    /* CCR[bit1=0,bit2=0] */  				/* 0x00000000-0x7fffffff: Write-back     */  				/* 0x80000000-0x9fffffff: Write-through  */                                  /* 0xc0000000-0xdfffffff: Write-back     */ @@ -36,6 +36,8 @@  #define CCR_CACHE_ENABLE	CCR_CACHE_CE  #define CCR_CACHE_INVALIDATE	CCR_CACHE_CF +#define CACHE_PHYSADDR_MASK	0x1ffffc00 +  #endif  #endif /* __ASM_CPU_SH2_CACHE_H */ diff --git a/arch/sh/include/cpu-sh2a/cpu/addrspace.h b/arch/sh/include/cpu-sh2a/cpu/addrspace.h new file mode 100644 index 00000000000..31eb4b58aa6 --- /dev/null +++ b/arch/sh/include/cpu-sh2a/cpu/addrspace.h @@ -0,0 +1,10 @@ +#ifndef __ASM_SH_CPU_SH2A_ADDRSPACE_H +#define __ASM_SH_CPU_SH2A_ADDRSPACE_H + +#define P0SEG		0x00000000 +#define P1SEG		0x00000000 +#define P2SEG		0x20000000 +#define P3SEG		0x40000000 +#define P4SEG		0x60000000 + +#endif /* __ASM_SH_CPU_SH2A_ADDRSPACE_H */ diff --git a/arch/sh/include/cpu-sh2a/cpu/cache.h b/arch/sh/include/cpu-sh2a/cpu/cache.h index afe228b3f49..defb0baa5a0 100644 --- a/arch/sh/include/cpu-sh2a/cpu/cache.h +++ b/arch/sh/include/cpu-sh2a/cpu/cache.h @@ -36,5 +36,8 @@  #define CCR_CACHE_ENABLE	(CCR_CACHE_OCE | CCR_CACHE_ICE)  #define CCR_CACHE_INVALIDATE	(CCR_CACHE_OCI | CCR_CACHE_ICI) +#define CCR_ICACHE_INVALIDATE	CCR_CACHE_ICI +#define CCR_OCACHE_INVALIDATE	CCR_CACHE_OCI +#define CACHE_PHYSADDR_MASK	0x1ffffc00  #endif /* __ASM_CPU_SH2A_CACHE_H */ diff --git a/arch/sh/include/cpu-sh2a/cpu/cacheflush.h b/arch/sh/include/cpu-sh2a/cpu/cacheflush.h new file mode 100644 index 00000000000..3d3b9205d2a --- /dev/null +++ b/arch/sh/include/cpu-sh2a/cpu/cacheflush.h @@ -0,0 +1,34 @@ +#ifndef __ASM_CPU_SH2A_CACHEFLUSH_H +#define __ASM_CPU_SH2A_CACHEFLUSH_H + +/*  + * Cache flushing: + * + *  - flush_cache_all() flushes entire cache + *  - flush_cache_mm(mm) flushes the specified mm context's cache lines + *  - flush_cache_dup mm(mm) handles cache flushing when forking + *  - flush_cache_page(mm, vmaddr, pfn) flushes a single page + *  - flush_cache_range(vma, start, end) flushes a range of pages + * + *  - flush_dcache_page(pg) flushes(wback&invalidates) a page for dcache + *  - flush_icache_range(start, end) flushes(invalidates) a range for icache + *  - flush_icache_page(vma, pg) flushes(invalidates) a page for icache + * + *  Caches are indexed (effectively) by physical address on SH-2, so + *  we don't need them. + */ +#define flush_cache_all()			do { } while (0) +#define flush_cache_mm(mm)			do { } while (0) +#define flush_cache_dup_mm(mm)			do { } while (0) +#define flush_cache_range(vma, start, end)	do { } while (0) +#define flush_cache_page(vma, vmaddr, pfn)	do { } while (0) +#define flush_dcache_page(page)			do { } while (0) +#define flush_dcache_mmap_lock(mapping)		do { } while (0) +#define flush_dcache_mmap_unlock(mapping)	do { } while (0) +void flush_icache_range(unsigned long start, unsigned long end); +#define flush_icache_page(vma,pg)		do { } while (0) +#define flush_icache_user_range(vma,pg,adr,len)	do { } while (0) +#define flush_cache_sigtramp(vaddr)		do { } while (0) + +#define p3_cache_init()				do { } while (0) +#endif /* __ASM_CPU_SH2A_CACHEFLUSH_H */ diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c index dcdf959a3d4..8a8a993f55e 100644 --- a/arch/sh/kernel/cpu/sh4/sq.c +++ b/arch/sh/kernel/cpu/sh4/sq.c @@ -199,7 +199,7 @@ EXPORT_SYMBOL(sq_remap);  /**   * sq_unmap - Unmap a Store Queue allocation - * @map: Pre-allocated Store Queue mapping. + * @vaddr: Pre-allocated Store Queue mapping.   *   * Unmaps the store queue allocation @map that was previously created by   * sq_remap(). Also frees up the pte that was previously inserted into diff --git a/arch/sh/kernel/cpu/sh5/entry.S b/arch/sh/kernel/cpu/sh5/entry.S index ca08e7f26a3..04c7da96814 100644 --- a/arch/sh/kernel/cpu/sh5/entry.S +++ b/arch/sh/kernel/cpu/sh5/entry.S @@ -987,11 +987,11 @@ work_resched:  work_notifysig:  	gettr	tr1, LINK -	movi	do_signal, r6 +	movi	do_notify_resume, r6  	ptabs	r6, tr0  	or	SP, ZERO, r2 -	or	ZERO, ZERO, r3 -	blink	tr0, LINK	    /* Call do_signal(regs, 0), return here */ +	or	r7, ZERO, r3 +	blink	tr0, LINK	    /* Call do_notify_resume(regs, current_thread_info->flags), return here */  restore_all:  	/* Do prefetches */ @@ -1300,18 +1300,20 @@ syscall_allowed:  	getcon	KCR0, r2  	ld.l	r2, TI_FLAGS, r4 -	movi	(_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | _TIF_SYSCALL_AUDIT), r6 +	movi	_TIF_WORK_SYSCALL_MASK, r6  	and	r6, r4, r6  	beq/l	r6, ZERO, tr0  	/* Trace it by calling syscall_trace before and after */ -	movi	syscall_trace, r4 +	movi	do_syscall_trace_enter, r4  	or	SP, ZERO, r2 -	or	ZERO, ZERO, r3  	ptabs	r4, tr0  	blink	tr0, LINK -	/* Reload syscall number as r5 is trashed by syscall_trace */ +	/* Save the retval */ +	st.q	SP, FRAME_R(2), r2 + +	/* Reload syscall number as r5 is trashed by do_syscall_trace_enter */  	ld.q	SP, FRAME_S(FSYSCALL_ID), r5  	andi	r5, 0x1ff, r5 @@ -1343,9 +1345,8 @@ syscall_ret_trace:  	/* We get back here only if under trace */  	st.q	SP, FRAME_R(9), r2	/* Save return value */ -	movi	syscall_trace, LINK +	movi	do_syscall_trace_leave, LINK  	or	SP, ZERO, r2 -	movi	1, r3  	ptabs	LINK, tr0  	blink	tr0, LINK diff --git a/arch/sh/kernel/entry-common.S b/arch/sh/kernel/entry-common.S index 5e0dd193384..0bc17def55a 100644 --- a/arch/sh/kernel/entry-common.S +++ b/arch/sh/kernel/entry-common.S @@ -202,7 +202,7 @@ work_resched:  syscall_exit_work:  	! r0: current_thread_info->flags  	! r8: current_thread_info -	tst	#_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | _TIF_SYSCALL_AUDIT, r0 +	tst	#_TIF_WORK_SYSCALL_MASK, r0  	bt/s	work_pending  	 tst	#_TIF_NEED_RESCHED, r0  #ifdef CONFIG_TRACE_IRQFLAGS @@ -211,10 +211,8 @@ syscall_exit_work:  	 nop  #endif  	sti -	! XXX setup arguments...  	mov	r15, r4 -	mov	#1, r5 -	mov.l	4f, r0			! do_syscall_trace +	mov.l	8f, r0			! do_syscall_trace_leave  	jsr	@r0  	 nop  	bra	resume_userspace @@ -223,12 +221,11 @@ syscall_exit_work:  	.align	2  syscall_trace_entry:  	!                     	Yes it is traced. -	! XXX setup arguments...  	mov     r15, r4 -	mov     #0, r5 -	mov.l	4f, r11		! Call do_syscall_trace which notifies +	mov.l	7f, r11		! Call do_syscall_trace_enter which notifies  	jsr	@r11	    	! superior (will chomp R[0-7])  	 nop +	mov.l	r0, @(OFF_R0,r15)	! Save return value  	!			Reload R0-R4 from kernel stack, where the  	!   	    	    	parent may have modified them using  	!   	    	    	ptrace(POKEUSR).  (Note that R0-R2 are @@ -351,7 +348,7 @@ ENTRY(system_call)  	!  	get_current_thread_info r8, r10  	mov.l	@(TI_FLAGS,r8), r8 -	mov	#(_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT), r10 +	mov	#_TIF_WORK_SYSCALL_MASK, r10  	tst	r10, r8  	bf	syscall_trace_entry  	! @@ -389,8 +386,9 @@ syscall_exit:  #endif  2:	.long	NR_syscalls  3:	.long	sys_call_table -4:	.long	do_syscall_trace  #ifdef CONFIG_TRACE_IRQFLAGS  5:	.long	trace_hardirqs_on  6:	.long	trace_hardirqs_off  #endif +7:	.long	do_syscall_trace_enter +8:	.long	do_syscall_trace_leave diff --git a/arch/sh/kernel/machine_kexec.c b/arch/sh/kernel/machine_kexec.c index ec1eadce4aa..4703dff174d 100644 --- a/arch/sh/kernel/machine_kexec.c +++ b/arch/sh/kernel/machine_kexec.c @@ -13,6 +13,7 @@  #include <linux/kexec.h>  #include <linux/delay.h>  #include <linux/reboot.h> +#include <linux/numa.h>  #include <asm/pgtable.h>  #include <asm/pgalloc.h>  #include <asm/mmu_context.h> @@ -104,3 +105,10 @@ void machine_kexec(struct kimage *image)  	(*rnk)(page_list, reboot_code_buffer, image->start, vbr_reg);  } +void arch_crash_save_vmcoreinfo(void) +{ +#ifdef CONFIG_NUMA +	VMCOREINFO_SYMBOL(node_data); +	VMCOREINFO_LENGTH(node_data, MAX_NUMNODES); +#endif +} diff --git a/arch/sh/kernel/module.c b/arch/sh/kernel/module.c index 5482e65375a..c43081039dd 100644 --- a/arch/sh/kernel/module.c +++ b/arch/sh/kernel/module.c @@ -27,6 +27,7 @@  #include <linux/moduleloader.h>  #include <linux/elf.h>  #include <linux/vmalloc.h> +#include <linux/bug.h>  #include <linux/fs.h>  #include <linux/string.h>  #include <linux/kernel.h> @@ -36,7 +37,8 @@ void *module_alloc(unsigned long size)  {  	if (size == 0)  		return NULL; -	return vmalloc(size); + +	return vmalloc_exec(size);  } @@ -145,9 +147,10 @@ int module_finalize(const Elf_Ehdr *hdr,  		    const Elf_Shdr *sechdrs,  		    struct module *me)  { -	return 0; +	return module_bug_finalize(hdr, sechdrs, me);  }  void module_arch_cleanup(struct module *mod)  { +	module_bug_cleanup(mod);  } diff --git a/arch/sh/kernel/ptrace_32.c b/arch/sh/kernel/ptrace_32.c index 2bc72def5cf..035cb300d3d 100644 --- a/arch/sh/kernel/ptrace_32.c +++ b/arch/sh/kernel/ptrace_32.c @@ -20,6 +20,8 @@  #include <linux/signal.h>  #include <linux/io.h>  #include <linux/audit.h> +#include <linux/seccomp.h> +#include <linux/tracehook.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h>  #include <asm/system.h> @@ -57,7 +59,23 @@ static inline int put_stack_long(struct task_struct *task, int offset,  	return 0;  } -static void ptrace_disable_singlestep(struct task_struct *child) +void user_enable_single_step(struct task_struct *child) +{ +	struct pt_regs *regs = task_pt_regs(child); +	long pc; + +	pc = get_stack_long(child, (long)®s->pc); + +	/* Next scheduling will set up UBC */ +	if (child->thread.ubc_pc == 0) +		ubc_usercnt += 1; + +	child->thread.ubc_pc = pc; + +	set_tsk_thread_flag(child, TIF_SINGLESTEP); +} + +void user_disable_single_step(struct task_struct *child)  {  	clear_tsk_thread_flag(child, TIF_SINGLESTEP); @@ -81,7 +99,7 @@ static void ptrace_disable_singlestep(struct task_struct *child)   */  void ptrace_disable(struct task_struct *child)  { -	ptrace_disable_singlestep(child); +	user_disable_single_step(child);  }  long arch_ptrace(struct task_struct *child, long request, long addr, long data) @@ -90,12 +108,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  	int ret;  	switch (request) { -	/* when I and D space are separate, these will need to be fixed. */ -	case PTRACE_PEEKTEXT: /* read word at location addr. */ -	case PTRACE_PEEKDATA: -		ret = generic_ptrace_peekdata(child, addr, data); -		break; -  	/* read the word at location addr in the USER area. */  	case PTRACE_PEEKUSR: {  		unsigned long tmp; @@ -125,12 +137,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  		break;  	} -	/* when I and D space are separate, this will have to be fixed. */ -	case PTRACE_POKETEXT: /* write the word at location addr. */ -	case PTRACE_POKEDATA: -		ret = generic_ptrace_pokedata(child, addr, data); -		break; -  	case PTRACE_POKEUSR: /* write the word at location addr in the USER area */  		ret = -EIO;  		if ((addr & 3) || addr < 0 || @@ -151,67 +157,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  		}  		break; -	case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ -	case PTRACE_CONT: { /* restart after signal. */ -		ret = -EIO; -		if (!valid_signal(data)) -			break; -		if (request == PTRACE_SYSCALL) -			set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); -		else -			clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); - -		ptrace_disable_singlestep(child); - -		child->exit_code = data; -		wake_up_process(child); -		ret = 0; -		break; -	} - -/* - * make the child exit.  Best I can do is send it a sigkill. - * perhaps it should be put in the status that it wants to - * exit. - */ -	case PTRACE_KILL: { -		ret = 0; -		if (child->exit_state == EXIT_ZOMBIE)	/* already dead */ -			break; -		ptrace_disable_singlestep(child); -		child->exit_code = SIGKILL; -		wake_up_process(child); -		break; -	} - -	case PTRACE_SINGLESTEP: {  /* set the trap flag. */ -		long pc; -		struct pt_regs *regs = NULL; - -		ret = -EIO; -		if (!valid_signal(data)) -			break; -		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); -		if ((child->ptrace & PT_DTRACE) == 0) { -			/* Spurious delayed TF traps may occur */ -			child->ptrace |= PT_DTRACE; -		} - -		pc = get_stack_long(child, (long)®s->pc); - -		/* Next scheduling will set up UBC */ -		if (child->thread.ubc_pc == 0) -			ubc_usercnt += 1; -		child->thread.ubc_pc = pc; - -		set_tsk_thread_flag(child, TIF_SINGLESTEP); -		child->exit_code = data; -		/* give it a chance to run. */ -		wake_up_process(child); -		ret = 0; -		break; -	} -  #ifdef CONFIG_SH_DSP  	case PTRACE_GETDSPREGS: {  		unsigned long dp; @@ -272,39 +217,49 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  	return ret;  } -asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit) +static inline int audit_arch(void)  { -	struct task_struct *tsk = current; +	int arch = EM_SH; -	if (unlikely(current->audit_context) && entryexit) -		audit_syscall_exit(AUDITSC_RESULT(regs->regs[0]), -				   regs->regs[0]); +#ifdef CONFIG_CPU_LITTLE_ENDIAN +	arch |= __AUDIT_ARCH_LE; +#endif -	if (!test_thread_flag(TIF_SYSCALL_TRACE) && -	    !test_thread_flag(TIF_SINGLESTEP)) -		goto out; -	if (!(tsk->ptrace & PT_PTRACED)) -		goto out; +	return arch; +} -	/* the 0x80 provides a way for the tracing parent to distinguish -	   between a syscall stop and SIGTRAP delivery */ -	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) && -				 !test_thread_flag(TIF_SINGLESTEP) ? 0x80 : 0)); +asmlinkage long do_syscall_trace_enter(struct pt_regs *regs) +{ +	long ret = 0; -	/* -	 * this isn't the same as continuing with a signal, but it will do -	 * for normal use.  strace only continues with a signal if the -	 * stopping signal is not SIGTRAP.  -brl -	 */ -	if (tsk->exit_code) { -		send_sig(tsk->exit_code, tsk, 1); -		tsk->exit_code = 0; -	} +	secure_computing(regs->regs[0]); + +	if (test_thread_flag(TIF_SYSCALL_TRACE) && +	    tracehook_report_syscall_entry(regs)) +		/* +		 * Tracing decided this syscall should not happen. +		 * We'll return a bogus call number to get an ENOSYS +		 * error, but leave the original number in regs->regs[0]. +		 */ +		ret = -1L; -out: -	if (unlikely(current->audit_context) && !entryexit) -		audit_syscall_entry(AUDIT_ARCH_SH, regs->regs[3], +	if (unlikely(current->audit_context)) +		audit_syscall_entry(audit_arch(), regs->regs[3],  				    regs->regs[4], regs->regs[5],  				    regs->regs[6], regs->regs[7]); +	return ret ?: regs->regs[0]; +} + +asmlinkage void do_syscall_trace_leave(struct pt_regs *regs) +{ +	int step; + +	if (unlikely(current->audit_context)) +		audit_syscall_exit(AUDITSC_RESULT(regs->regs[0]), +				   regs->regs[0]); + +	step = test_thread_flag(TIF_SINGLESTEP); +	if (step || test_thread_flag(TIF_SYSCALL_TRACE)) +		tracehook_report_syscall_exit(regs, step);  } diff --git a/arch/sh/kernel/ptrace_64.c b/arch/sh/kernel/ptrace_64.c index d453c47dc52..5922edd416d 100644 --- a/arch/sh/kernel/ptrace_64.c +++ b/arch/sh/kernel/ptrace_64.c @@ -27,6 +27,8 @@  #include <linux/signal.h>  #include <linux/syscalls.h>  #include <linux/audit.h> +#include <linux/seccomp.h> +#include <linux/tracehook.h>  #include <asm/io.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h> @@ -120,18 +122,23 @@ put_fpu_long(struct task_struct *task, unsigned long addr, unsigned long data)  	return 0;  } +void user_enable_single_step(struct task_struct *child) +{ +	struct pt_regs *regs = child->thread.uregs; + +	regs->sr |= SR_SSTEP;	/* auto-resetting upon exception */ +} + +void user_disable_single_step(struct task_struct *child) +{ +	regs->sr &= ~SR_SSTEP; +}  long arch_ptrace(struct task_struct *child, long request, long addr, long data)  {  	int ret;  	switch (request) { -	/* when I and D space are separate, these will need to be fixed. */ -	case PTRACE_PEEKTEXT: /* read word at location addr. */ -	case PTRACE_PEEKDATA: -		ret = generic_ptrace_peekdata(child, addr, data); -		break; -  	/* read the word at location addr in the USER area. */  	case PTRACE_PEEKUSR: {  		unsigned long tmp; @@ -154,12 +161,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  		break;  	} -	/* when I and D space are separate, this will have to be fixed. */ -	case PTRACE_POKETEXT: /* write the word at location addr. */ -	case PTRACE_POKEDATA: -		ret = generic_ptrace_pokedata(child, addr, data); -		break; -  	case PTRACE_POKEUSR:                  /* write the word at location addr in the USER area. We must                     disallow any changes to certain SR bits or u_fpvalid, since @@ -191,58 +192,6 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)  		}  		break; -	case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ -	case PTRACE_CONT: { /* restart after signal. */ -		ret = -EIO; -		if (!valid_signal(data)) -			break; -		if (request == PTRACE_SYSCALL) -			set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); -		else -			clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); -		child->exit_code = data; -		wake_up_process(child); -		ret = 0; -		break; -	} - -/* - * make the child exit.  Best I can do is send it a sigkill. - * perhaps it should be put in the status that it wants to - * exit. - */ -	case PTRACE_KILL: { -		ret = 0; -		if (child->exit_state == EXIT_ZOMBIE)	/* already dead */ -			break; -		child->exit_code = SIGKILL; -		wake_up_process(child); -		break; -	} - -	case PTRACE_SINGLESTEP: {  /* set the trap flag. */ -		struct pt_regs *regs; - -		ret = -EIO; -		if (!valid_signal(data)) -			break; -		clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); -		if ((child->ptrace & PT_DTRACE) == 0) { -			/* Spurious delayed TF traps may occur */ -			child->ptrace |= PT_DTRACE; -		} - -		regs = child->thread.uregs; - -		regs->sr |= SR_SSTEP;	/* auto-resetting upon exception */ - -		child->exit_code = data; -		/* give it a chance to run. */ -		wake_up_process(child); -		ret = 0; -		break; -	} -  	default:  		ret = ptrace_request(child, request, addr, data);  		break; @@ -273,38 +222,51 @@ asmlinkage int sh64_ptrace(long request, long pid, long addr, long data)  	return sys_ptrace(request, pid, addr, data);  } -asmlinkage void syscall_trace(struct pt_regs *regs, int entryexit) +static inline int audit_arch(void)  { -	struct task_struct *tsk = current; +	int arch = EM_SH; -	if (unlikely(current->audit_context) && entryexit) -		audit_syscall_exit(AUDITSC_RESULT(regs->regs[9]), -				   regs->regs[9]); +#ifdef CONFIG_64BIT +	arch |= __AUDIT_ARCH_64BIT; +#endif +#ifdef CONFIG_CPU_LITTLE_ENDIAN +	arch |= __AUDIT_ARCH_LE; +#endif -	if (!test_thread_flag(TIF_SYSCALL_TRACE) && -	    !test_thread_flag(TIF_SINGLESTEP)) -		goto out; -	if (!(tsk->ptrace & PT_PTRACED)) -		goto out; +	return arch; +} -	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) && -				!test_thread_flag(TIF_SINGLESTEP) ? 0x80 : 0)); +asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs) +{ +	long long ret = 0; -	/* -	 * this isn't the same as continuing with a signal, but it will do -	 * for normal use.  strace only continues with a signal if the -	 * stopping signal is not SIGTRAP.  -brl -	 */ -	if (tsk->exit_code) { -		send_sig(tsk->exit_code, tsk, 1); -		tsk->exit_code = 0; -	} +	secure_computing(regs->regs[9]); -out: -	if (unlikely(current->audit_context) && !entryexit) -		audit_syscall_entry(AUDIT_ARCH_SH, regs->regs[1], +	if (test_thread_flag(TIF_SYSCALL_TRACE) && +	    tracehook_report_syscall_entry(regs)) +		/* +		 * Tracing decided this syscall should not happen. +		 * We'll return a bogus call number to get an ENOSYS +		 * error, but leave the original number in regs->regs[0]. +		 */ +		ret = -1LL; + +	if (unlikely(current->audit_context)) +		audit_syscall_entry(audit_arch(), regs->regs[1],  				    regs->regs[2], regs->regs[3],  				    regs->regs[4], regs->regs[5]); + +	return ret ?: regs->regs[9]; +} + +asmlinkage void do_syscall_trace_leave(struct pt_regs *regs) +{ +	if (unlikely(current->audit_context)) +		audit_syscall_exit(AUDITSC_RESULT(regs->regs[9]), +				   regs->regs[9]); + +	if (test_thread_flag(TIF_SYSCALL_TRACE)) +		tracehook_report_syscall_exit(regs, 0);  }  /* Called with interrupts disabled */ @@ -338,5 +300,5 @@ asmlinkage void do_software_break_point(unsigned long long vec,   */  void ptrace_disable(struct task_struct *child)  { -        /* nothing to do.. */ +	user_disable_single_step(child);  } diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c index 6339d0c9571..a35207655e7 100644 --- a/arch/sh/kernel/setup.c +++ b/arch/sh/kernel/setup.c @@ -25,6 +25,7 @@  #include <linux/smp.h>  #include <linux/err.h>  #include <linux/debugfs.h> +#include <linux/crash_dump.h>  #include <asm/uaccess.h>  #include <asm/io.h>  #include <asm/page.h> @@ -286,6 +287,25 @@ static void __init setup_memory(void)  extern void __init setup_memory(void);  #endif +/* + * Note: elfcorehdr_addr is not just limited to vmcore. It is also used by + * is_kdump_kernel() to determine if we are booting after a panic. Hence + * ifdef it under CONFIG_CRASH_DUMP and not CONFIG_PROC_VMCORE. + */ +#ifdef CONFIG_CRASH_DUMP +/* elfcorehdr= specifies the location of elf core header + * stored by the crashed kernel. + */ +static int __init parse_elfcorehdr(char *arg) +{ +	if (!arg) +		return -EINVAL; +	elfcorehdr_addr = memparse(arg, &arg); +	return 0; +} +early_param("elfcorehdr", parse_elfcorehdr); +#endif +  void __init setup_arch(char **cmdline_p)  {  	enable_mmu(); diff --git a/arch/sh/kernel/signal_32.c b/arch/sh/kernel/signal_32.c index 4bbbde895a5..51689d29ad4 100644 --- a/arch/sh/kernel/signal_32.c +++ b/arch/sh/kernel/signal_32.c @@ -24,6 +24,7 @@  #include <linux/binfmts.h>  #include <linux/freezer.h>  #include <linux/io.h> +#include <linux/tracehook.h>  #include <asm/system.h>  #include <asm/ucontext.h>  #include <asm/uaccess.h> @@ -507,14 +508,13 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,  		switch (regs->regs[0]) {  			case -ERESTART_RESTARTBLOCK:  			case -ERESTARTNOHAND: +			no_system_call_restart:  				regs->regs[0] = -EINTR;  				break;  			case -ERESTARTSYS: -				if (!(ka->sa.sa_flags & SA_RESTART)) { -					regs->regs[0] = -EINTR; -					break; -				} +				if (!(ka->sa.sa_flags & SA_RESTART)) +					goto no_system_call_restart;  			/* fallthrough */  			case -ERESTARTNOINTR:  				regs->regs[0] = save_r0; @@ -589,12 +589,15 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0)  			 * clear the TIF_RESTORE_SIGMASK flag */  			if (test_thread_flag(TIF_RESTORE_SIGMASK))  				clear_thread_flag(TIF_RESTORE_SIGMASK); + +			tracehook_signal_handler(signr, &info, &ka, regs, +					test_thread_flag(TIF_SINGLESTEP));  		}  		return;  	} - no_signal: +no_signal:  	/* Did we come from a system call? */  	if (regs->tra >= 0) {  		/* Restart the system call - no handlers present */ @@ -618,9 +621,14 @@ static void do_signal(struct pt_regs *regs, unsigned int save_r0)  }  asmlinkage void do_notify_resume(struct pt_regs *regs, unsigned int save_r0, -				 __u32 thread_info_flags) +				 unsigned long thread_info_flags)  {  	/* deal with pending signal delivery */ -	if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)) +	if (thread_info_flags & _TIF_SIGPENDING)  		do_signal(regs, save_r0); + +	if (thread_info_flags & _TIF_NOTIFY_RESUME) { +		clear_thread_flag(TIF_NOTIFY_RESUME); +		tracehook_notify_resume(regs); +	}  } diff --git a/arch/sh/kernel/signal_64.c b/arch/sh/kernel/signal_64.c index 552eb810cd8..1d62dfef77f 100644 --- a/arch/sh/kernel/signal_64.c +++ b/arch/sh/kernel/signal_64.c @@ -22,6 +22,7 @@  #include <linux/ptrace.h>  #include <linux/unistd.h>  #include <linux/stddef.h> +#include <linux/tracehook.h>  #include <asm/ucontext.h>  #include <asm/uaccess.h>  #include <asm/pgtable.h> @@ -42,7 +43,84 @@  #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) -asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset); +/* + * Note that 'init' is a special process: it doesn't get signals it doesn't + * want to handle. Thus you cannot kill init even with a SIGKILL even by + * mistake. + * + * Note that we go through the signals twice: once to check the signals that + * the kernel can handle, and then we build all the user-level signal handling + * stack-frames in one go after that. + */ +static int do_signal(struct pt_regs *regs, sigset_t *oldset) +{ +	siginfo_t info; +	int signr; +	struct k_sigaction ka; + +	/* +	 * We want the common case to go fast, which +	 * is why we may in certain cases get here from +	 * kernel mode. Just return without doing anything +	 * if so. +	 */ +	if (!user_mode(regs)) +		return 1; + +	if (try_to_freeze()) +		goto no_signal; + +	if (test_thread_flag(TIF_RESTORE_SIGMASK)) +		oldset = ¤t->saved_sigmask; +	else if (!oldset) +		oldset = ¤t->blocked; + +	signr = get_signal_to_deliver(&info, &ka, regs, 0); + +	if (signr > 0) { +		/* Whee!  Actually deliver the signal.  */ +		handle_signal(signr, &info, &ka, oldset, regs); + +		/* +		 * If a signal was successfully delivered, the saved sigmask +		 * is in its frame, and we can clear the TIF_RESTORE_SIGMASK +		 * flag. +		 */ +		if (test_thread_flag(TIF_RESTORE_SIGMASK)) +			clear_thread_flag(TIF_RESTORE_SIGMASK); + +		tracehook_signal_handler(signr, &info, &ka, regs, 0); +		return 1; +	} + +no_signal: +	/* Did we come from a system call? */ +	if (regs->syscall_nr >= 0) { +		/* Restart the system call - no handlers present */ +		switch (regs->regs[REG_RET]) { +		case -ERESTARTNOHAND: +		case -ERESTARTSYS: +		case -ERESTARTNOINTR: +			/* Decode Syscall # */ +			regs->regs[REG_RET] = regs->syscall_nr; +			regs->pc -= 4; +			break; + +		case -ERESTART_RESTARTBLOCK: +			regs->regs[REG_RET] = __NR_restart_syscall; +			regs->pc -= 4; +			break; +		} +	} + +	/* No signal to deliver -- put the saved sigmask back */ +	if (test_thread_flag(TIF_RESTORE_SIGMASK)) { +		clear_thread_flag(TIF_RESTORE_SIGMASK); +		sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); +	} + +	return 0; +}  /*   * Atomically swap in the new signal mask, and wait for a signal. @@ -643,14 +721,13 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,  		switch (regs->regs[REG_RET]) {  			case -ERESTART_RESTARTBLOCK:  			case -ERESTARTNOHAND: +			no_system_call_restart:  				regs->regs[REG_RET] = -EINTR;  				break;  			case -ERESTARTSYS: -				if (!(ka->sa.sa_flags & SA_RESTART)) { -					regs->regs[REG_RET] = -EINTR; -					break; -				} +				if (!(ka->sa.sa_flags & SA_RESTART)) +					goto no_system_call_restart;  			/* fallthrough */  			case -ERESTARTNOINTR:  				/* Decode syscall # */ @@ -673,80 +750,13 @@ handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,  	spin_unlock_irq(¤t->sighand->siglock);  } -/* - * Note that 'init' is a special process: it doesn't get signals it doesn't - * want to handle. Thus you cannot kill init even with a SIGKILL even by - * mistake. - * - * Note that we go through the signals twice: once to check the signals that - * the kernel can handle, and then we build all the user-level signal handling - * stack-frames in one go after that. - */ -int do_signal(struct pt_regs *regs, sigset_t *oldset) +asmlinkage void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags)  { -	siginfo_t info; -	int signr; -	struct k_sigaction ka; - -	/* -	 * We want the common case to go fast, which -	 * is why we may in certain cases get here from -	 * kernel mode. Just return without doing anything -	 * if so. -	 */ -	if (!user_mode(regs)) -		return 1; - -	if (try_to_freeze()) -		goto no_signal; - -	if (test_thread_flag(TIF_RESTORE_SIGMASK)) -		oldset = ¤t->saved_sigmask; -	else if (!oldset) -		oldset = ¤t->blocked; - -	signr = get_signal_to_deliver(&info, &ka, regs, 0); - -	if (signr > 0) { -		/* Whee!  Actually deliver the signal.  */ -		handle_signal(signr, &info, &ka, oldset, regs); +	if (thread_info_flags & _TIF_SIGPENDING) +		do_signal(regs, 0); -		/* -		 * If a signal was successfully delivered, the saved sigmask -		 * is in its frame, and we can clear the TIF_RESTORE_SIGMASK -		 * flag. -		 */ -		if (test_thread_flag(TIF_RESTORE_SIGMASK)) -			clear_thread_flag(TIF_RESTORE_SIGMASK); - -		return 1; +	if (thread_info_flags & _TIF_NOTIFY_RESUME) { +		clear_thread_flag(TIF_NOTIFY_RESUME); +		tracehook_notify_resume(regs);  	} - -no_signal: -	/* Did we come from a system call? */ -	if (regs->syscall_nr >= 0) { -		/* Restart the system call - no handlers present */ -		switch (regs->regs[REG_RET]) { -		case -ERESTARTNOHAND: -		case -ERESTARTSYS: -		case -ERESTARTNOINTR: -			/* Decode Syscall # */ -			regs->regs[REG_RET] = regs->syscall_nr; -			regs->pc -= 4; -			break; - -		case -ERESTART_RESTARTBLOCK: -			regs->regs[REG_RET] = __NR_restart_syscall; -			regs->pc -= 4; -			break; -		} -	} - -	/* No signal to deliver -- put the saved sigmask back */ -	if (test_thread_flag(TIF_RESTORE_SIGMASK)) { -		clear_thread_flag(TIF_RESTORE_SIGMASK); -		sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); -	} - -	return 0;  } diff --git a/arch/sh/mm/Kconfig b/arch/sh/mm/Kconfig index 56d0a7daa34..9c131cac91a 100644 --- a/arch/sh/mm/Kconfig +++ b/arch/sh/mm/Kconfig @@ -237,7 +237,6 @@ choice  config CACHE_WRITEBACK  	bool "Write-back" -	depends on CPU_SH2A || CPU_SH3 || CPU_SH4 || CPU_SH5  config CACHE_WRITETHROUGH  	bool "Write-through" diff --git a/arch/sh/mm/Makefile_32 b/arch/sh/mm/Makefile_32 index e295db60b91..70e0906023c 100644 --- a/arch/sh/mm/Makefile_32 +++ b/arch/sh/mm/Makefile_32 @@ -5,12 +5,15 @@  obj-y			:= init.o extable_32.o consistent.o  ifndef CONFIG_CACHE_OFF -obj-$(CONFIG_CPU_SH2)		+= cache-sh2.o -obj-$(CONFIG_CPU_SH3)		+= cache-sh3.o -obj-$(CONFIG_CPU_SH4)		+= cache-sh4.o -obj-$(CONFIG_SH7705_CACHE_32KB)	+= cache-sh7705.o +cache-$(CONFIG_CPU_SH2)		:= cache-sh2.o +cache-$(CONFIG_CPU_SH2A)	:= cache-sh2a.o +cache-$(CONFIG_CPU_SH3)		:= cache-sh3.o +cache-$(CONFIG_CPU_SH4)		:= cache-sh4.o +cache-$(CONFIG_SH7705_CACHE_32KB)	+= cache-sh7705.o  endif +obj-y			+= $(cache-y) +  mmu-y			:= tlb-nommu.o pg-nommu.o  mmu-$(CONFIG_MMU)	:= fault_32.o tlbflush_32.o ioremap_32.o diff --git a/arch/sh/mm/cache-sh2.c b/arch/sh/mm/cache-sh2.c index 6614033f6be..c4e80d2b764 100644 --- a/arch/sh/mm/cache-sh2.c +++ b/arch/sh/mm/cache-sh2.c @@ -2,6 +2,7 @@   * arch/sh/mm/cache-sh2.c   *   * Copyright (C) 2002 Paul Mundt + * Copyright (C) 2008 Yoshinori Sato   *   * Released under the terms of the GNU GPL v2.0.   */ @@ -24,8 +25,15 @@ void __flush_wback_region(void *start, int size)  	end = ((unsigned long)start + size + L1_CACHE_BYTES-1)  		& ~(L1_CACHE_BYTES-1);  	for (v = begin; v < end; v+=L1_CACHE_BYTES) { -		/* FIXME cache purge */ -		ctrl_outl((v & 0x1ffffc00), (v & 0x00000ff0) | 0x00000008); +		unsigned long addr = CACHE_OC_ADDRESS_ARRAY | (v & 0x00000ff0); +		int way; +		for (way = 0; way < 4; way++) { +			unsigned long data =  ctrl_inl(addr | (way << 12)); +			if ((data & CACHE_PHYSADDR_MASK) == (v & CACHE_PHYSADDR_MASK)) { +				data &= ~SH_CACHE_UPDATED; +				ctrl_outl(data, addr | (way << 12)); +			} +		}  	}  } @@ -37,21 +45,40 @@ void __flush_purge_region(void *start, int size)  	begin = (unsigned long)start & ~(L1_CACHE_BYTES-1);  	end = ((unsigned long)start + size + L1_CACHE_BYTES-1)  		& ~(L1_CACHE_BYTES-1); -	for (v = begin; v < end; v+=L1_CACHE_BYTES) { -		ctrl_outl((v & 0x1ffffc00), (v & 0x00000ff0) | 0x00000008); -	} + +	for (v = begin; v < end; v+=L1_CACHE_BYTES) +		ctrl_outl((v & CACHE_PHYSADDR_MASK), +			  CACHE_OC_ADDRESS_ARRAY | (v & 0x00000ff0) | 0x00000008);  }  void __flush_invalidate_region(void *start, int size)  { +#ifdef CONFIG_CACHE_WRITEBACK +	/* +	 * SH-2 does not support individual line invalidation, only a +	 * global invalidate. +	 */ +	unsigned long ccr; +	unsigned long flags; +	local_irq_save(flags); +	jump_to_uncached(); + +	ccr = ctrl_inl(CCR); +	ccr |= CCR_CACHE_INVALIDATE; +	ctrl_outl(ccr, CCR); + +	back_to_cached(); +	local_irq_restore(flags); +#else  	unsigned long v;  	unsigned long begin, end;  	begin = (unsigned long)start & ~(L1_CACHE_BYTES-1);  	end = ((unsigned long)start + size + L1_CACHE_BYTES-1)  		& ~(L1_CACHE_BYTES-1); -	for (v = begin; v < end; v+=L1_CACHE_BYTES) { -		ctrl_outl((v & 0x1ffffc00), (v & 0x00000ff0) | 0x00000008); -	} -} +	for (v = begin; v < end; v+=L1_CACHE_BYTES) +		ctrl_outl((v & CACHE_PHYSADDR_MASK), +			  CACHE_OC_ADDRESS_ARRAY | (v & 0x00000ff0) | 0x00000008); +#endif +} diff --git a/arch/sh/mm/cache-sh2a.c b/arch/sh/mm/cache-sh2a.c new file mode 100644 index 00000000000..62c0c5f3512 --- /dev/null +++ b/arch/sh/mm/cache-sh2a.c @@ -0,0 +1,129 @@ +/* + * arch/sh/mm/cache-sh2a.c + * + * Copyright (C) 2008 Yoshinori Sato + * + * Released under the terms of the GNU GPL v2.0. + */ + +#include <linux/init.h> +#include <linux/mm.h> + +#include <asm/cache.h> +#include <asm/addrspace.h> +#include <asm/processor.h> +#include <asm/cacheflush.h> +#include <asm/io.h> + +void __flush_wback_region(void *start, int size) +{ +	unsigned long v; +	unsigned long begin, end; +	unsigned long flags; + +	begin = (unsigned long)start & ~(L1_CACHE_BYTES-1); +	end = ((unsigned long)start + size + L1_CACHE_BYTES-1) +		& ~(L1_CACHE_BYTES-1); + +	local_irq_save(flags); +	jump_to_uncached(); + +	for (v = begin; v < end; v+=L1_CACHE_BYTES) { +		unsigned long addr = CACHE_OC_ADDRESS_ARRAY | (v & 0x000007f0); +		int way; +		for (way = 0; way < 4; way++) { +			unsigned long data =  ctrl_inl(addr | (way << 11)); +			if ((data & CACHE_PHYSADDR_MASK) == (v & CACHE_PHYSADDR_MASK)) { +				data &= ~SH_CACHE_UPDATED; +				ctrl_outl(data, addr | (way << 11)); +			} +		} +	} + +	back_to_cached(); +	local_irq_restore(flags); +} + +void __flush_purge_region(void *start, int size) +{ +	unsigned long v; +	unsigned long begin, end; +	unsigned long flags; + +	begin = (unsigned long)start & ~(L1_CACHE_BYTES-1); +	end = ((unsigned long)start + size + L1_CACHE_BYTES-1) +		& ~(L1_CACHE_BYTES-1); + +	local_irq_save(flags); +	jump_to_uncached(); + +	for (v = begin; v < end; v+=L1_CACHE_BYTES) { +		ctrl_outl((v & CACHE_PHYSADDR_MASK), +			  CACHE_OC_ADDRESS_ARRAY | (v & 0x000003f0) | 0x00000008); +	} +	back_to_cached(); +	local_irq_restore(flags); +} + +void __flush_invalidate_region(void *start, int size) +{ +	unsigned long v; +	unsigned long begin, end; +	unsigned long flags; + +	begin = (unsigned long)start & ~(L1_CACHE_BYTES-1); +	end = ((unsigned long)start + size + L1_CACHE_BYTES-1) +		& ~(L1_CACHE_BYTES-1); +	local_irq_save(flags); +	jump_to_uncached(); + +#ifdef CONFIG_CACHE_WRITEBACK +	ctrl_outl(ctrl_inl(CCR) | CCR_OCACHE_INVALIDATE, CCR); +	/* I-cache invalidate */ +	for (v = begin; v < end; v+=L1_CACHE_BYTES) { +		ctrl_outl((v & CACHE_PHYSADDR_MASK), +			  CACHE_IC_ADDRESS_ARRAY | (v & 0x000003f0) | 0x00000008); +	} +#else +	for (v = begin; v < end; v+=L1_CACHE_BYTES) { +		ctrl_outl((v & CACHE_PHYSADDR_MASK), +			  CACHE_IC_ADDRESS_ARRAY | (v & 0x000003f0) | 0x00000008); +		ctrl_outl((v & CACHE_PHYSADDR_MASK), +			  CACHE_OC_ADDRESS_ARRAY | (v & 0x000003f0) | 0x00000008); +	} +#endif +	back_to_cached(); +	local_irq_restore(flags); +} + +/* WBack O-Cache and flush I-Cache */ +void flush_icache_range(unsigned long start, unsigned long end) +{ +	unsigned long v; +	unsigned long flags; + +	start = start & ~(L1_CACHE_BYTES-1); +	end = (end + L1_CACHE_BYTES-1) & ~(L1_CACHE_BYTES-1); + +	local_irq_save(flags); +	jump_to_uncached(); + +	for (v = start; v < end; v+=L1_CACHE_BYTES) { +		unsigned long addr = (v & 0x000007f0); +		int way; +		/* O-Cache writeback */ +		for (way = 0; way < 4; way++) { +			unsigned long data =  ctrl_inl(CACHE_OC_ADDRESS_ARRAY | addr | (way << 11)); +			if ((data & CACHE_PHYSADDR_MASK) == (v & CACHE_PHYSADDR_MASK)) { +				data &= ~SH_CACHE_UPDATED; +				ctrl_outl(data, CACHE_OC_ADDRESS_ARRAY | addr | (way << 11)); +			} +		} +		/* I-Cache invalidate */ +		ctrl_outl(addr, +			  CACHE_IC_ADDRESS_ARRAY | addr | 0x00000008); +	} + +	back_to_cached(); +	local_irq_restore(flags); +} diff --git a/arch/sh/mm/tlb-sh5.c b/arch/sh/mm/tlb-sh5.c index f34274a1ded..dae131243bc 100644 --- a/arch/sh/mm/tlb-sh5.c +++ b/arch/sh/mm/tlb-sh5.c @@ -15,9 +15,7 @@  #include <asm/mmu_context.h>  /** - * sh64_tlb_init - * - * Perform initial setup for the DTLB and ITLB. + * sh64_tlb_init - Perform initial setup for the DTLB and ITLB.   */  int __init sh64_tlb_init(void)  { @@ -46,9 +44,7 @@ int __init sh64_tlb_init(void)  }  /** - * sh64_next_free_dtlb_entry - * - * Find the next available DTLB entry + * sh64_next_free_dtlb_entry - Find the next available DTLB entry   */  unsigned long long sh64_next_free_dtlb_entry(void)  { @@ -56,9 +52,7 @@ unsigned long long sh64_next_free_dtlb_entry(void)  }  /** - * sh64_get_wired_dtlb_entry - * - * Allocate a wired (locked-in) entry in the DTLB + * sh64_get_wired_dtlb_entry - Allocate a wired (locked-in) entry in the DTLB   */  unsigned long long sh64_get_wired_dtlb_entry(void)  { @@ -71,12 +65,10 @@ unsigned long long sh64_get_wired_dtlb_entry(void)  }  /** - * sh64_put_wired_dtlb_entry + * sh64_put_wired_dtlb_entry - Free a wired (locked-in) entry in the DTLB.   *   * @entry:	Address of TLB slot.   * - * Free a wired (locked-in) entry in the DTLB. - *   * Works like a stack, last one to allocate must be first one to free.   */  int sh64_put_wired_dtlb_entry(unsigned long long entry) @@ -115,7 +107,7 @@ int sh64_put_wired_dtlb_entry(unsigned long long entry)  }  /** - * sh64_setup_tlb_slot + * sh64_setup_tlb_slot - Load up a translation in a wired slot.   *   * @config_addr:	Address of TLB slot.   * @eaddr:		Virtual address. @@ -154,7 +146,7 @@ inline void sh64_setup_tlb_slot(unsigned long long config_addr,  }  /** - * sh64_teardown_tlb_slot + * sh64_teardown_tlb_slot - Teardown a translation.   *   * @config_addr:	Address of TLB slot.   * diff --git a/arch/sh/tools/Makefile b/arch/sh/tools/Makefile index b5d202be820..567516b58ac 100644 --- a/arch/sh/tools/Makefile +++ b/arch/sh/tools/Makefile @@ -10,7 +10,7 @@  # Shamelessly cloned from ARM.  # -arch/sh/include/asm/machtypes.h: $(src)/gen-mach-types $(src)/mach-types +include/asm-sh/machtypes.h: $(src)/gen-mach-types $(src)/mach-types  	@echo '  Generating $@' -	$(Q)if [ ! -d arch/sh/include/asm ]; then mkdir -p arch/sh/include/asm; fi +	$(Q)if [ ! -d include/asm-sh ]; then mkdir -p include/asm-sh; fi  	$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; } diff --git a/arch/sparc/include/asm/futex_64.h b/arch/sparc/include/asm/futex_64.h index d8378935ae9..47f95839dc6 100644 --- a/arch/sparc/include/asm/futex_64.h +++ b/arch/sparc/include/asm/futex_64.h @@ -59,7 +59,7 @@ static inline int futex_atomic_op_inuser(int encoded_op, int __user *uaddr)  		__futex_cas_op("or\t%2, %4, %1", ret, oldval, uaddr, oparg);  		break;  	case FUTEX_OP_ANDN: -		__futex_cas_op("and\t%2, %4, %1", ret, oldval, uaddr, oparg); +		__futex_cas_op("andn\t%2, %4, %1", ret, oldval, uaddr, oparg);  		break;  	case FUTEX_OP_XOR:  		__futex_cas_op("xor\t%2, %4, %1", ret, oldval, uaddr, oparg); diff --git a/arch/sparc/include/asm/irq_64.h b/arch/sparc/include/asm/irq_64.h index 0bb9bf53174..3473e25231d 100644 --- a/arch/sparc/include/asm/irq_64.h +++ b/arch/sparc/include/asm/irq_64.h @@ -90,4 +90,7 @@ static inline unsigned long get_softint(void)  	return retval;  } +void __trigger_all_cpu_backtrace(void); +#define trigger_all_cpu_backtrace() __trigger_all_cpu_backtrace() +  #endif diff --git a/arch/sparc/include/asm/of_platform.h b/arch/sparc/include/asm/of_platform.h index aa699775ffb..93a262c4402 100644 --- a/arch/sparc/include/asm/of_platform.h +++ b/arch/sparc/include/asm/of_platform.h @@ -1,8 +1,24 @@  #ifndef ___ASM_SPARC_OF_PLATFORM_H  #define ___ASM_SPARC_OF_PLATFORM_H -#if defined(__sparc__) && defined(__arch64__) -#include <asm/of_platform_64.h> -#else -#include <asm/of_platform_32.h> -#endif +/* + *    Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp. + *			 <benh@kernel.crashing.org> + *    Modified for Sparc by merging parts of asm/of_device.h + *		by Stephen Rothwell + * + *  This program is free software; you can redistribute it and/or + *  modify it under the terms of the GNU General Public License + *  as published by the Free Software Foundation; either version + *  2 of the License, or (at your option) any later version. + * + */ + +/* This is just here during the transition */ +#include <linux/of_platform.h> + +extern struct bus_type ebus_bus_type; +extern struct bus_type sbus_bus_type; + +#define of_bus_type	of_platform_bus_type	/* for compatibility */ +  #endif diff --git a/arch/sparc/include/asm/of_platform_32.h b/arch/sparc/include/asm/of_platform_32.h deleted file mode 100644 index 723f7c9b741..00000000000 --- a/arch/sparc/include/asm/of_platform_32.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _ASM_SPARC_OF_PLATFORM_H -#define _ASM_SPARC_OF_PLATFORM_H -/* - *    Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp. - *			 <benh@kernel.crashing.org> - *    Modified for Sparc by merging parts of asm/of_device.h - *		by Stephen Rothwell - * - *  This program is free software; you can redistribute it and/or - *  modify it under the terms of the GNU General Public License - *  as published by the Free Software Foundation; either version - *  2 of the License, or (at your option) any later version. - * - */ - -/* This is just here during the transition */ -#include <linux/of_platform.h> - -extern struct bus_type ebus_bus_type; -extern struct bus_type sbus_bus_type; - -#define of_bus_type	of_platform_bus_type	/* for compatibility */ - -#endif	/* _ASM_SPARC_OF_PLATFORM_H */ diff --git a/arch/sparc/include/asm/of_platform_64.h b/arch/sparc/include/asm/of_platform_64.h deleted file mode 100644 index 4f66a5f6342..00000000000 --- a/arch/sparc/include/asm/of_platform_64.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef _ASM_SPARC64_OF_PLATFORM_H -#define _ASM_SPARC64_OF_PLATFORM_H -/* - *    Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp. - *			 <benh@kernel.crashing.org> - *    Modified for Sparc by merging parts of asm/of_device.h - *		by Stephen Rothwell - * - *  This program is free software; you can redistribute it and/or - *  modify it under the terms of the GNU General Public License - *  as published by the Free Software Foundation; either version - *  2 of the License, or (at your option) any later version. - * - */ - -/* This is just here during the transition */ -#include <linux/of_platform.h> - -extern struct bus_type isa_bus_type; -extern struct bus_type ebus_bus_type; -extern struct bus_type sbus_bus_type; - -#define of_bus_type	of_platform_bus_type	/* for compatibility */ - -#endif	/* _ASM_SPARC64_OF_PLATFORM_H */ diff --git a/arch/sparc/include/asm/ptrace_32.h b/arch/sparc/include/asm/ptrace_32.h index d43c88b8683..d409c4f21a5 100644 --- a/arch/sparc/include/asm/ptrace_32.h +++ b/arch/sparc/include/asm/ptrace_32.h @@ -40,16 +40,6 @@ struct pt_regs {  #define UREG_FP        UREG_I6  #define UREG_RETPC     UREG_I7 -static inline bool pt_regs_is_syscall(struct pt_regs *regs) -{ -	return (regs->psr & PSR_SYSCALL); -} - -static inline bool pt_regs_clear_syscall(struct pt_regs *regs) -{ -	return (regs->psr &= ~PSR_SYSCALL); -} -  /* A register window */  struct reg_window {  	unsigned long locals[8]; @@ -72,6 +62,16 @@ struct sparc_stackf {  #ifdef __KERNEL__ +static inline bool pt_regs_is_syscall(struct pt_regs *regs) +{ +	return (regs->psr & PSR_SYSCALL); +} + +static inline bool pt_regs_clear_syscall(struct pt_regs *regs) +{ +	return (regs->psr &= ~PSR_SYSCALL); +} +  #define user_mode(regs) (!((regs)->psr & PSR_PS))  #define instruction_pointer(regs) ((regs)->pc)  #define user_stack_pointer(regs) ((regs)->u_regs[UREG_FP]) diff --git a/arch/sparc/include/asm/ptrace_64.h b/arch/sparc/include/asm/ptrace_64.h index ec6d45c84cd..06e4914c13f 100644 --- a/arch/sparc/include/asm/ptrace_64.h +++ b/arch/sparc/include/asm/ptrace_64.h @@ -37,21 +37,6 @@ struct pt_regs {  	unsigned int magic;  }; -static inline int pt_regs_trap_type(struct pt_regs *regs) -{ -	return regs->magic & 0x1ff; -} - -static inline bool pt_regs_is_syscall(struct pt_regs *regs) -{ -	return (regs->tstate & TSTATE_SYSCALL); -} - -static inline bool pt_regs_clear_syscall(struct pt_regs *regs) -{ -	return (regs->tstate &= ~TSTATE_SYSCALL); -} -  struct pt_regs32 {  	unsigned int psr;  	unsigned int pc; @@ -128,15 +113,30 @@ struct sparc_trapf {  #ifdef __KERNEL__ +static inline int pt_regs_trap_type(struct pt_regs *regs) +{ +	return regs->magic & 0x1ff; +} + +static inline bool pt_regs_is_syscall(struct pt_regs *regs) +{ +	return (regs->tstate & TSTATE_SYSCALL); +} + +static inline bool pt_regs_clear_syscall(struct pt_regs *regs) +{ +	return (regs->tstate &= ~TSTATE_SYSCALL); +} +  struct global_reg_snapshot {  	unsigned long		tstate;  	unsigned long		tpc;  	unsigned long		tnpc;  	unsigned long		o7;  	unsigned long		i7; +	unsigned long		rpc;  	struct thread_info	*thread;  	unsigned long		pad1; -	unsigned long		pad2;  };  #define __ARCH_WANT_COMPAT_SYS_PTRACE @@ -154,7 +154,6 @@ extern unsigned long profile_pc(struct pt_regs *);  #define profile_pc(regs) instruction_pointer(regs)  #endif  extern void show_regs(struct pt_regs *); -extern void __show_regs(struct pt_regs *);  #endif  #else /* __ASSEMBLY__ */ @@ -315,9 +314,9 @@ extern void __show_regs(struct pt_regs *);  #define GR_SNAP_TNPC	0x10  #define GR_SNAP_O7	0x18  #define GR_SNAP_I7	0x20 -#define GR_SNAP_THREAD	0x28 -#define GR_SNAP_PAD1	0x30 -#define GR_SNAP_PAD2	0x38 +#define GR_SNAP_RPC	0x28 +#define GR_SNAP_THREAD	0x30 +#define GR_SNAP_PAD1	0x38  #endif  /*  __KERNEL__  */ diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c index c481673d249..ba43d85e8dd 100644 --- a/arch/sparc64/kernel/irq.c +++ b/arch/sparc64/kernel/irq.c @@ -915,12 +915,18 @@ static void __init sun4v_init_mondo_queues(void)  		alloc_one_mondo(&tb->nonresum_mondo_pa, tb->nonresum_qmask);  		alloc_one_kbuf(&tb->nonresum_kernel_buf_pa,  			       tb->nonresum_qmask); +	} +} + +static void __init init_send_mondo_info(void) +{ +	int cpu; + +	for_each_possible_cpu(cpu) { +		struct trap_per_cpu *tb = &trap_block[cpu];  		init_cpu_send_mondo_info(tb);  	} - -	/* Load up the boot cpu's entries.  */ -	sun4v_register_mondo_queues(hard_smp_processor_id());  }  static struct irqaction timer_irq_action = { @@ -949,6 +955,13 @@ void __init init_IRQ(void)  	if (tlb_type == hypervisor)  		sun4v_init_mondo_queues(); +	init_send_mondo_info(); + +	if (tlb_type == hypervisor) { +		/* Load up the boot cpu's entries.  */ +		sun4v_register_mondo_queues(hard_smp_processor_id()); +	} +  	/* We need to clear any IRQ's pending in the soft interrupt  	 * registers, a spurious one could be left around from the  	 * PROM timer which we just disabled. diff --git a/arch/sparc64/kernel/of_device.c b/arch/sparc64/kernel/of_device.c index 4fd48ab7dda..f8b50cbf4bf 100644 --- a/arch/sparc64/kernel/of_device.c +++ b/arch/sparc64/kernel/of_device.c @@ -56,9 +56,6 @@ struct of_device *of_find_device_by_node(struct device_node *dp)  EXPORT_SYMBOL(of_find_device_by_node);  #ifdef CONFIG_PCI -struct bus_type isa_bus_type; -EXPORT_SYMBOL(isa_bus_type); -  struct bus_type ebus_bus_type;  EXPORT_SYMBOL(ebus_bus_type);  #endif @@ -842,8 +839,6 @@ static int __init of_bus_driver_init(void)  	err = of_bus_type_init(&of_platform_bus_type, "of");  #ifdef CONFIG_PCI  	if (!err) -		err = of_bus_type_init(&isa_bus_type, "isa"); -	if (!err)  		err = of_bus_type_init(&ebus_bus_type, "ebus");  #endif  #ifdef CONFIG_SBUS diff --git a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c index 8a9cd3e165b..7f5debdc5fe 100644 --- a/arch/sparc64/kernel/process.c +++ b/arch/sparc64/kernel/process.c @@ -52,8 +52,6 @@  #include <asm/irq_regs.h>  #include <asm/smp.h> -/* #define VERBOSE_SHOWREGS */ -  static void sparc64_yield(int cpu)  {  	if (tlb_type != hypervisor) @@ -213,22 +211,8 @@ static void show_regwindow(struct pt_regs *regs)  		printk("I7: <%pS>\n", (void *) rwk->ins[7]);  } -#ifdef CONFIG_SMP -static DEFINE_SPINLOCK(regdump_lock); -#endif - -void __show_regs(struct pt_regs * regs) +void show_regs(struct pt_regs *regs)  { -#ifdef CONFIG_SMP -	unsigned long flags; - -	/* Protect against xcall ipis which might lead to livelock on the lock */ -	__asm__ __volatile__("rdpr      %%pstate, %0\n\t" -			     "wrpr      %0, %1, %%pstate" -			     : "=r" (flags) -			     : "i" (PSTATE_IE)); -	spin_lock(®dump_lock); -#endif  	printk("TSTATE: %016lx TPC: %016lx TNPC: %016lx Y: %08x    %s\n", regs->tstate,  	       regs->tpc, regs->tnpc, regs->y, print_tainted());  	printk("TPC: <%pS>\n", (void *) regs->tpc); @@ -246,64 +230,24 @@ void __show_regs(struct pt_regs * regs)  	       regs->u_regs[15]);  	printk("RPC: <%pS>\n", (void *) regs->u_regs[15]);  	show_regwindow(regs); -#ifdef CONFIG_SMP -	spin_unlock(®dump_lock); -	__asm__ __volatile__("wrpr	%0, 0, %%pstate" -			     : : "r" (flags)); -#endif  } -#ifdef VERBOSE_SHOWREGS -static void idump_from_user (unsigned int *pc) -{ -	int i; -	int code; -	 -	if((((unsigned long) pc) & 3)) -		return; -	 -	pc -= 3; -	for(i = -3; i < 6; i++) { -		get_user(code, pc); -		printk("%c%08x%c",i?' ':'<',code,i?' ':'>'); -		pc++; -	} -	printk("\n"); -} -#endif +struct global_reg_snapshot global_reg_snapshot[NR_CPUS]; +static DEFINE_SPINLOCK(global_reg_snapshot_lock); -void show_regs(struct pt_regs *regs) +static bool kstack_valid(struct thread_info *tp, struct reg_window *rw)  { -#ifdef VERBOSE_SHOWREGS -	extern long etrap, etraptl1; -#endif -	__show_regs(regs); -#if 0 -#ifdef CONFIG_SMP -	{ -		extern void smp_report_regs(void); +	unsigned long thread_base, fp; -		smp_report_regs(); -	} -#endif -#endif +	thread_base = (unsigned long) tp; +	fp = (unsigned long) rw; -#ifdef VERBOSE_SHOWREGS	 -	if (regs->tpc >= &etrap && regs->tpc < &etraptl1 && -	    regs->u_regs[14] >= (long)current - PAGE_SIZE && -	    regs->u_regs[14] < (long)current + 6 * PAGE_SIZE) { -		printk ("*********parent**********\n"); -		__show_regs((struct pt_regs *)(regs->u_regs[14] + PTREGS_OFF)); -		idump_from_user(((struct pt_regs *)(regs->u_regs[14] + PTREGS_OFF))->tpc); -		printk ("*********endpar**********\n"); -	} -#endif +	if (fp < (thread_base + sizeof(struct thread_info)) || +	    fp >= (thread_base + THREAD_SIZE)) +		return false; +	return true;  } -#ifdef CONFIG_MAGIC_SYSRQ -struct global_reg_snapshot global_reg_snapshot[NR_CPUS]; -static DEFINE_SPINLOCK(global_reg_snapshot_lock); -  static void __global_reg_self(struct thread_info *tp, struct pt_regs *regs,  			      int this_cpu)  { @@ -315,14 +259,22 @@ static void __global_reg_self(struct thread_info *tp, struct pt_regs *regs,  	global_reg_snapshot[this_cpu].o7 = regs->u_regs[UREG_I7];  	if (regs->tstate & TSTATE_PRIV) { +		struct thread_info *tp = current_thread_info();  		struct reg_window *rw;  		rw = (struct reg_window *)  			(regs->u_regs[UREG_FP] + STACK_BIAS); -		global_reg_snapshot[this_cpu].i7 = rw->ins[6]; -	} else +		if (kstack_valid(tp, rw)) { +			global_reg_snapshot[this_cpu].i7 = rw->ins[7]; +			rw = (struct reg_window *) +				(rw->ins[6] + STACK_BIAS); +			if (kstack_valid(tp, rw)) +				global_reg_snapshot[this_cpu].rpc = rw->ins[7]; +		} +	} else {  		global_reg_snapshot[this_cpu].i7 = 0; - +		global_reg_snapshot[this_cpu].rpc = 0; +	}  	global_reg_snapshot[this_cpu].thread = tp;  } @@ -341,7 +293,7 @@ static void __global_reg_poll(struct global_reg_snapshot *gp)  	}  } -static void sysrq_handle_globreg(int key, struct tty_struct *tty) +void __trigger_all_cpu_backtrace(void)  {  	struct thread_info *tp = current_thread_info();  	struct pt_regs *regs = get_irq_regs(); @@ -375,13 +327,14 @@ static void sysrq_handle_globreg(int key, struct tty_struct *tty)  		       ((tp && tp->task) ? tp->task->pid : -1));  		if (gp->tstate & TSTATE_PRIV) { -			printk("             TPC[%pS] O7[%pS] I7[%pS]\n", +			printk("             TPC[%pS] O7[%pS] I7[%pS] RPC[%pS]\n",  			       (void *) gp->tpc,  			       (void *) gp->o7, -			       (void *) gp->i7); +			       (void *) gp->i7, +			       (void *) gp->rpc);  		} else { -			printk("             TPC[%lx] O7[%lx] I7[%lx]\n", -			       gp->tpc, gp->o7, gp->i7); +			printk("             TPC[%lx] O7[%lx] I7[%lx] RPC[%lx]\n", +			       gp->tpc, gp->o7, gp->i7, gp->rpc);  		}  	} @@ -390,6 +343,13 @@ static void sysrq_handle_globreg(int key, struct tty_struct *tty)  	spin_unlock_irqrestore(&global_reg_snapshot_lock, flags);  } +#ifdef CONFIG_MAGIC_SYSRQ + +static void sysrq_handle_globreg(int key, struct tty_struct *tty) +{ +	__trigger_all_cpu_backtrace(); +} +  static struct sysrq_key_op sparc_globalreg_op = {  	.handler	= sysrq_handle_globreg,  	.help_msg	= "Globalregs", diff --git a/arch/sparc64/kernel/signal.c b/arch/sparc64/kernel/signal.c index d1b84456a9e..ec82d76dc6f 100644 --- a/arch/sparc64/kernel/signal.c +++ b/arch/sparc64/kernel/signal.c @@ -2,7 +2,7 @@   *  arch/sparc64/kernel/signal.c   *   *  Copyright (C) 1991, 1992  Linus Torvalds - *  Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) + *  Copyright (C) 1995, 2008 David S. Miller (davem@davemloft.net)   *  Copyright (C) 1996 Miguel de Icaza (miguel@nuclecu.unam.mx)   *  Copyright (C) 1997 Eddie C. Dost   (ecd@skynet.be)   *  Copyright (C) 1997,1998 Jakub Jelinek   (jj@sunsite.mff.cuni.cz) @@ -23,7 +23,6 @@  #include <linux/tty.h>  #include <linux/binfmts.h>  #include <linux/bitops.h> -#include <linux/tracehook.h>  #include <asm/uaccess.h>  #include <asm/ptrace.h> @@ -91,7 +90,9 @@ asmlinkage void sparc64_set_context(struct pt_regs *regs)  	err |= __get_user(regs->u_regs[UREG_G4], (&(*grp)[MC_G4]));  	err |= __get_user(regs->u_regs[UREG_G5], (&(*grp)[MC_G5]));  	err |= __get_user(regs->u_regs[UREG_G6], (&(*grp)[MC_G6])); -	err |= __get_user(regs->u_regs[UREG_G7], (&(*grp)[MC_G7])); + +	/* Skip %g7 as that's the thread register in userspace.  */ +  	err |= __get_user(regs->u_regs[UREG_I0], (&(*grp)[MC_O0]));  	err |= __get_user(regs->u_regs[UREG_I1], (&(*grp)[MC_O1]));  	err |= __get_user(regs->u_regs[UREG_I2], (&(*grp)[MC_O2])); diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index 7cf72b4bb10..27b81775a4d 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c @@ -459,27 +459,35 @@ again:  	}  } -static inline void spitfire_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask) +static void spitfire_xcall_deliver(struct trap_per_cpu *tb, int cnt)  { +	u64 *mondo, data0, data1, data2; +	u16 *cpu_list;  	u64 pstate;  	int i;  	__asm__ __volatile__("rdpr %%pstate, %0" : "=r" (pstate)); -	for_each_cpu_mask(i, mask) -		spitfire_xcall_helper(data0, data1, data2, pstate, i); +	cpu_list = __va(tb->cpu_list_pa); +	mondo = __va(tb->cpu_mondo_block_pa); +	data0 = mondo[0]; +	data1 = mondo[1]; +	data2 = mondo[2]; +	for (i = 0; i < cnt; i++) +		spitfire_xcall_helper(data0, data1, data2, pstate, cpu_list[i]);  }  /* Cheetah now allows to send the whole 64-bytes of data in the interrupt   * packet, but we have no use for that.  However we do take advantage of   * the new pipelining feature (ie. dispatch to multiple cpus simultaneously).   */ -static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask) +static void cheetah_xcall_deliver(struct trap_per_cpu *tb, int cnt)  { -	u64 pstate, ver, busy_mask;  	int nack_busy_id, is_jbus, need_more; +	u64 *mondo, pstate, ver, busy_mask; +	u16 *cpu_list; -	if (cpus_empty(mask)) -		return; +	cpu_list = __va(tb->cpu_list_pa); +	mondo = __va(tb->cpu_mondo_block_pa);  	/* Unfortunately, someone at Sun had the brilliant idea to make the  	 * busy/nack fields hard-coded by ITID number for this Ultra-III @@ -502,7 +510,7 @@ retry:  			     "stxa	%2, [%5] %6\n\t"  			     "membar	#Sync\n\t"  			     : /* no outputs */ -			     : "r" (data0), "r" (data1), "r" (data2), +			     : "r" (mondo[0]), "r" (mondo[1]), "r" (mondo[2]),  			       "r" (0x40), "r" (0x50), "r" (0x60),  			       "i" (ASI_INTR_W)); @@ -511,11 +519,16 @@ retry:  	{  		int i; -		for_each_cpu_mask(i, mask) { -			u64 target = (i << 14) | 0x70; +		for (i = 0; i < cnt; i++) { +			u64 target, nr; +			nr = cpu_list[i]; +			if (nr == 0xffff) +				continue; + +			target = (nr << 14) | 0x70;  			if (is_jbus) { -				busy_mask |= (0x1UL << (i * 2)); +				busy_mask |= (0x1UL << (nr * 2));  			} else {  				target |= (nack_busy_id << 24);  				busy_mask |= (0x1UL << @@ -549,11 +562,13 @@ retry:  				__asm__ __volatile__("wrpr %0, 0x0, %%pstate"  						     : : "r" (pstate));  				if (unlikely(need_more)) { -					int i, cnt = 0; -					for_each_cpu_mask(i, mask) { -						cpu_clear(i, mask); -						cnt++; -						if (cnt == 32) +					int i, this_cnt = 0; +					for (i = 0; i < cnt; i++) { +						if (cpu_list[i] == 0xffff) +							continue; +						cpu_list[i] = 0xffff; +						this_cnt++; +						if (this_cnt == 32)  							break;  					}  					goto retry; @@ -584,16 +599,20 @@ retry:  			/* Clear out the mask bits for cpus which did not  			 * NACK us.  			 */ -			for_each_cpu_mask(i, mask) { -				u64 check_mask; +			for (i = 0; i < cnt; i++) { +				u64 check_mask, nr; + +				nr = cpu_list[i]; +				if (nr == 0xffff) +					continue;  				if (is_jbus) -					check_mask = (0x2UL << (2*i)); +					check_mask = (0x2UL << (2*nr));  				else  					check_mask = (0x2UL <<  						      this_busy_nack);  				if ((dispatch_stat & check_mask) == 0) -					cpu_clear(i, mask); +					cpu_list[i] = 0xffff;  				this_busy_nack += 2;  				if (this_busy_nack == 64)  					break; @@ -605,47 +624,17 @@ retry:  }  /* Multi-cpu list version.  */ -static void hypervisor_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask) +static void hypervisor_xcall_deliver(struct trap_per_cpu *tb, int cnt)  { -	struct trap_per_cpu *tb; +	int retries, this_cpu, prev_sent, i, saw_cpu_error; +	unsigned long status;  	u16 *cpu_list; -	u64 *mondo; -	cpumask_t error_mask; -	unsigned long flags, status; -	int cnt, retries, this_cpu, prev_sent, i; - -	if (cpus_empty(mask)) -		return; - -	/* We have to do this whole thing with interrupts fully disabled. -	 * Otherwise if we send an xcall from interrupt context it will -	 * corrupt both our mondo block and cpu list state. -	 * -	 * One consequence of this is that we cannot use timeout mechanisms -	 * that depend upon interrupts being delivered locally.  So, for -	 * example, we cannot sample jiffies and expect it to advance. -	 * -	 * Fortunately, udelay() uses %stick/%tick so we can use that. -	 */ -	local_irq_save(flags);  	this_cpu = smp_processor_id(); -	tb = &trap_block[this_cpu]; - -	mondo = __va(tb->cpu_mondo_block_pa); -	mondo[0] = data0; -	mondo[1] = data1; -	mondo[2] = data2; -	wmb();  	cpu_list = __va(tb->cpu_list_pa); -	/* Setup the initial cpu list.  */ -	cnt = 0; -	for_each_cpu_mask(i, mask) -		cpu_list[cnt++] = i; - -	cpus_clear(error_mask); +	saw_cpu_error = 0;  	retries = 0;  	prev_sent = 0;  	do { @@ -690,10 +679,9 @@ static void hypervisor_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t  					continue;  				err = sun4v_cpu_state(cpu); -				if (err >= 0 && -				    err == HV_CPU_STATE_ERROR) { +				if (err == HV_CPU_STATE_ERROR) { +					saw_cpu_error = (cpu + 1);  					cpu_list[i] = 0xffff; -					cpu_set(cpu, error_mask);  				}  			}  		} else if (unlikely(status != HV_EWOULDBLOCK)) @@ -717,32 +705,24 @@ static void hypervisor_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t  		}  	} while (1); -	local_irq_restore(flags); - -	if (unlikely(!cpus_empty(error_mask))) +	if (unlikely(saw_cpu_error))  		goto fatal_mondo_cpu_error;  	return;  fatal_mondo_cpu_error:  	printk(KERN_CRIT "CPU[%d]: SUN4V mondo cpu error, some target cpus " -	       "were in error state\n", -	       this_cpu); -	printk(KERN_CRIT "CPU[%d]: Error mask [ ", this_cpu); -	for_each_cpu_mask(i, error_mask) -		printk("%d ", i); -	printk("]\n"); +	       "(including %d) were in error state\n", +	       this_cpu, saw_cpu_error - 1);  	return;  fatal_mondo_timeout: -	local_irq_restore(flags);  	printk(KERN_CRIT "CPU[%d]: SUN4V mondo timeout, no forward "  	       " progress after %d retries.\n",  	       this_cpu, retries);  	goto dump_cpu_list_and_out;  fatal_mondo_error: -	local_irq_restore(flags);  	printk(KERN_CRIT "CPU[%d]: Unexpected SUN4V mondo error %lu\n",  	       this_cpu, status);  	printk(KERN_CRIT "CPU[%d]: Args were cnt(%d) cpulist_pa(%lx) " @@ -756,58 +736,93 @@ dump_cpu_list_and_out:  	printk("]\n");  } -/* Send cross call to all processors mentioned in MASK - * except self. +static void (*xcall_deliver_impl)(struct trap_per_cpu *, int); + +static void xcall_deliver(u64 data0, u64 data1, u64 data2, const cpumask_t *mask) +{ +	struct trap_per_cpu *tb; +	int this_cpu, i, cnt; +	unsigned long flags; +	u16 *cpu_list; +	u64 *mondo; + +	/* We have to do this whole thing with interrupts fully disabled. +	 * Otherwise if we send an xcall from interrupt context it will +	 * corrupt both our mondo block and cpu list state. +	 * +	 * One consequence of this is that we cannot use timeout mechanisms +	 * that depend upon interrupts being delivered locally.  So, for +	 * example, we cannot sample jiffies and expect it to advance. +	 * +	 * Fortunately, udelay() uses %stick/%tick so we can use that. +	 */ +	local_irq_save(flags); + +	this_cpu = smp_processor_id(); +	tb = &trap_block[this_cpu]; + +	mondo = __va(tb->cpu_mondo_block_pa); +	mondo[0] = data0; +	mondo[1] = data1; +	mondo[2] = data2; +	wmb(); + +	cpu_list = __va(tb->cpu_list_pa); + +	/* Setup the initial cpu list.  */ +	cnt = 0; +	for_each_cpu_mask_nr(i, *mask) { +		if (i == this_cpu || !cpu_online(i)) +			continue; +		cpu_list[cnt++] = i; +	} + +	if (cnt) +		xcall_deliver_impl(tb, cnt); + +	local_irq_restore(flags); +} + +/* Send cross call to all processors mentioned in MASK_P + * except self.  Really, there are only two cases currently, + * "&cpu_online_map" and "&mm->cpu_vm_mask".   */ -static void smp_cross_call_masked(unsigned long *func, u32 ctx, u64 data1, u64 data2, cpumask_t mask) +static void smp_cross_call_masked(unsigned long *func, u32 ctx, u64 data1, u64 data2, const cpumask_t *mask)  {  	u64 data0 = (((u64)ctx)<<32 | (((u64)func) & 0xffffffff)); -	int this_cpu = get_cpu(); - -	cpus_and(mask, mask, cpu_online_map); -	cpu_clear(this_cpu, mask); -	if (tlb_type == spitfire) -		spitfire_xcall_deliver(data0, data1, data2, mask); -	else if (tlb_type == cheetah || tlb_type == cheetah_plus) -		cheetah_xcall_deliver(data0, data1, data2, mask); -	else -		hypervisor_xcall_deliver(data0, data1, data2, mask); -	/* NOTE: Caller runs local copy on master. */ +	xcall_deliver(data0, data1, data2, mask); +} -	put_cpu(); +/* Send cross call to all processors except self. */ +static void smp_cross_call(unsigned long *func, u32 ctx, u64 data1, u64 data2) +{ +	smp_cross_call_masked(func, ctx, data1, data2, &cpu_online_map);  }  extern unsigned long xcall_sync_tick;  static void smp_start_sync_tick_client(int cpu)  { -	cpumask_t mask = cpumask_of_cpu(cpu); - -	smp_cross_call_masked(&xcall_sync_tick, -			      0, 0, 0, mask); +	xcall_deliver((u64) &xcall_sync_tick, 0, 0, +		      &cpumask_of_cpu(cpu));  }  extern unsigned long xcall_call_function;  void arch_send_call_function_ipi(cpumask_t mask)  { -	smp_cross_call_masked(&xcall_call_function, 0, 0, 0, mask); +	xcall_deliver((u64) &xcall_call_function, 0, 0, &mask);  }  extern unsigned long xcall_call_function_single;  void arch_send_call_function_single_ipi(int cpu)  { -	cpumask_t mask = cpumask_of_cpu(cpu); - -	smp_cross_call_masked(&xcall_call_function_single, 0, 0, 0, mask); +	xcall_deliver((u64) &xcall_call_function_single, 0, 0, +		      &cpumask_of_cpu(cpu));  } -/* Send cross call to all processors except self. */ -#define smp_cross_call(func, ctx, data1, data2) \ -	smp_cross_call_masked(func, ctx, data1, data2, cpu_online_map) -  void smp_call_function_client(int irq, struct pt_regs *regs)  {  	clear_softint(1 << irq); @@ -843,7 +858,6 @@ void smp_tsb_sync(struct mm_struct *mm)  extern unsigned long xcall_flush_tlb_mm;  extern unsigned long xcall_flush_tlb_pending;  extern unsigned long xcall_flush_tlb_kernel_range; -extern unsigned long xcall_report_regs;  #ifdef CONFIG_MAGIC_SYSRQ  extern unsigned long xcall_fetch_glob_regs;  #endif @@ -878,7 +892,6 @@ static inline void __local_flush_dcache_page(struct page *page)  void smp_flush_dcache_page_impl(struct page *page, int cpu)  { -	cpumask_t mask = cpumask_of_cpu(cpu);  	int this_cpu;  	if (tlb_type == hypervisor) @@ -894,29 +907,24 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)  		__local_flush_dcache_page(page);  	} else if (cpu_online(cpu)) {  		void *pg_addr = page_address(page); -		u64 data0; +		u64 data0 = 0;  		if (tlb_type == spitfire) { -			data0 = -				((u64)&xcall_flush_dcache_page_spitfire); +			data0 = ((u64)&xcall_flush_dcache_page_spitfire);  			if (page_mapping(page) != NULL)  				data0 |= ((u64)1 << 32); -			spitfire_xcall_deliver(data0, -					       __pa(pg_addr), -					       (u64) pg_addr, -					       mask);  		} else if (tlb_type == cheetah || tlb_type == cheetah_plus) {  #ifdef DCACHE_ALIASING_POSSIBLE -			data0 = -				((u64)&xcall_flush_dcache_page_cheetah); -			cheetah_xcall_deliver(data0, -					      __pa(pg_addr), -					      0, mask); +			data0 =	((u64)&xcall_flush_dcache_page_cheetah);  #endif  		} +		if (data0) { +			xcall_deliver(data0, __pa(pg_addr), +				      (u64) pg_addr, &cpumask_of_cpu(cpu));  #ifdef CONFIG_DEBUG_DCFLUSH -		atomic_inc(&dcpage_flushes_xcall); +			atomic_inc(&dcpage_flushes_xcall);  #endif +		}  	}  	put_cpu(); @@ -924,66 +932,41 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)  void flush_dcache_page_all(struct mm_struct *mm, struct page *page)  { -	void *pg_addr = page_address(page); -	cpumask_t mask = cpu_online_map; -	u64 data0; +	void *pg_addr;  	int this_cpu; +	u64 data0;  	if (tlb_type == hypervisor)  		return;  	this_cpu = get_cpu(); -	cpu_clear(this_cpu, mask); -  #ifdef CONFIG_DEBUG_DCFLUSH  	atomic_inc(&dcpage_flushes);  #endif -	if (cpus_empty(mask)) -		goto flush_self; +	data0 = 0; +	pg_addr = page_address(page);  	if (tlb_type == spitfire) {  		data0 = ((u64)&xcall_flush_dcache_page_spitfire);  		if (page_mapping(page) != NULL)  			data0 |= ((u64)1 << 32); -		spitfire_xcall_deliver(data0, -				       __pa(pg_addr), -				       (u64) pg_addr, -				       mask);  	} else if (tlb_type == cheetah || tlb_type == cheetah_plus) {  #ifdef DCACHE_ALIASING_POSSIBLE  		data0 = ((u64)&xcall_flush_dcache_page_cheetah); -		cheetah_xcall_deliver(data0, -				      __pa(pg_addr), -				      0, mask);  #endif  	} +	if (data0) { +		xcall_deliver(data0, __pa(pg_addr), +			      (u64) pg_addr, &cpu_online_map);  #ifdef CONFIG_DEBUG_DCFLUSH -	atomic_inc(&dcpage_flushes_xcall); +		atomic_inc(&dcpage_flushes_xcall);  #endif - flush_self: +	}  	__local_flush_dcache_page(page);  	put_cpu();  } -static void __smp_receive_signal_mask(cpumask_t mask) -{ -	smp_cross_call_masked(&xcall_receive_signal, 0, 0, 0, mask); -} - -void smp_receive_signal(int cpu) -{ -	cpumask_t mask = cpumask_of_cpu(cpu); - -	if (cpu_online(cpu)) -		__smp_receive_signal_mask(mask); -} - -void smp_receive_signal_client(int irq, struct pt_regs *regs) -{ -	clear_softint(1 << irq); -} -  void smp_new_mmu_context_version_client(int irq, struct pt_regs *regs)  {  	struct mm_struct *mm; @@ -1022,11 +1005,6 @@ void kgdb_roundup_cpus(unsigned long flags)  }  #endif -void smp_report_regs(void) -{ -	smp_cross_call(&xcall_report_regs, 0, 0, 0); -} -  #ifdef CONFIG_MAGIC_SYSRQ  void smp_fetch_global_regs(void)  { @@ -1089,7 +1067,7 @@ void smp_flush_tlb_mm(struct mm_struct *mm)  	smp_cross_call_masked(&xcall_flush_tlb_mm,  			      ctx, 0, 0, -			      mm->cpu_vm_mask); +			      &mm->cpu_vm_mask);  local_flush_and_out:  	__flush_tlb_mm(ctx, SECONDARY_CONTEXT); @@ -1107,7 +1085,7 @@ void smp_flush_tlb_pending(struct mm_struct *mm, unsigned long nr, unsigned long  	else  		smp_cross_call_masked(&xcall_flush_tlb_pending,  				      ctx, nr, (unsigned long) vaddrs, -				      mm->cpu_vm_mask); +				      &mm->cpu_vm_mask);  	__flush_tlb_pending(ctx, nr, vaddrs); @@ -1208,6 +1186,16 @@ void __devinit smp_prepare_boot_cpu(void)  {  } +void __init smp_setup_processor_id(void) +{ +	if (tlb_type == spitfire) +		xcall_deliver_impl = spitfire_xcall_deliver; +	else if (tlb_type == cheetah || tlb_type == cheetah_plus) +		xcall_deliver_impl = cheetah_xcall_deliver; +	else +		xcall_deliver_impl = hypervisor_xcall_deliver; +} +  void __devinit smp_fill_in_sib_core_maps(void)  {  	unsigned int i; @@ -1376,7 +1364,13 @@ void __init smp_cpus_done(unsigned int max_cpus)  void smp_send_reschedule(int cpu)  { -	smp_receive_signal(cpu); +	xcall_deliver((u64) &xcall_receive_signal, 0, 0, +		      &cpumask_of_cpu(cpu)); +} + +void smp_receive_signal_client(int irq, struct pt_regs *regs) +{ +	clear_softint(1 << irq);  }  /* This is a nop because we capture all other cpus diff --git a/arch/sparc64/kernel/sparc64_ksyms.c b/arch/sparc64/kernel/sparc64_ksyms.c index 504e678ee12..0804f71df6c 100644 --- a/arch/sparc64/kernel/sparc64_ksyms.c +++ b/arch/sparc64/kernel/sparc64_ksyms.c @@ -68,7 +68,6 @@ extern void *__memscan_zero(void *, size_t);  extern void *__memscan_generic(void *, int, size_t);  extern int __memcmp(const void *, const void *, __kernel_size_t);  extern __kernel_size_t strlen(const char *); -extern void show_regs(struct pt_regs *);  extern void syscall_trace(struct pt_regs *, int);  extern void sys_sigsuspend(void);  extern int compat_sys_ioctl(unsigned int fd, unsigned int cmd, u32 arg); diff --git a/arch/sparc64/kernel/traps.c b/arch/sparc64/kernel/traps.c index bd30ecba563..404e8561e2d 100644 --- a/arch/sparc64/kernel/traps.c +++ b/arch/sparc64/kernel/traps.c @@ -1777,7 +1777,7 @@ static void sun4v_log_error(struct pt_regs *regs, struct sun4v_error_entry *ent,  	       pfx,  	       ent->err_raddr, ent->err_size, ent->err_cpu); -	__show_regs(regs); +	show_regs(regs);  	if ((cnt = atomic_read(ocnt)) != 0) {  		atomic_set(ocnt, 0); @@ -2177,7 +2177,6 @@ static inline struct reg_window *kernel_stack_up(struct reg_window *rw)  void die_if_kernel(char *str, struct pt_regs *regs)  {  	static int die_counter; -	extern void smp_report_regs(void);  	int count = 0;  	/* Amuse the user. */ @@ -2190,7 +2189,7 @@ void die_if_kernel(char *str, struct pt_regs *regs)  	printk("%s(%d): %s [#%d]\n", current->comm, task_pid_nr(current), str, ++die_counter);  	notify_die(DIE_OOPS, str, regs, 0, 255, SIGSEGV);  	__asm__ __volatile__("flushw"); -	__show_regs(regs); +	show_regs(regs);  	add_taint(TAINT_DIE);  	if (regs->tstate & TSTATE_PRIV) {  		struct reg_window *rw = (struct reg_window *) @@ -2215,11 +2214,6 @@ void die_if_kernel(char *str, struct pt_regs *regs)  		}  		user_instruction_dump ((unsigned int __user *) regs->tpc);  	} -#if 0 -#ifdef CONFIG_SMP -	smp_report_regs(); -#endif -#endif                                                	  	if (regs->tstate & TSTATE_PRIV)  		do_exit(SIGKILL);  	do_exit(SIGSEGV); diff --git a/arch/sparc64/mm/tsb.c b/arch/sparc64/mm/tsb.c index 3547937b17a..587f8efb2e0 100644 --- a/arch/sparc64/mm/tsb.c +++ b/arch/sparc64/mm/tsb.c @@ -1,9 +1,10 @@  /* arch/sparc64/mm/tsb.c   * - * Copyright (C) 2006 David S. Miller <davem@davemloft.net> + * Copyright (C) 2006, 2008 David S. Miller <davem@davemloft.net>   */  #include <linux/kernel.h> +#include <linux/preempt.h>  #include <asm/system.h>  #include <asm/page.h>  #include <asm/tlbflush.h> @@ -415,7 +416,9 @@ retry_tsb_alloc:  		tsb_context_switch(mm);  		/* Now force other processors to do the same.  */ +		preempt_disable();  		smp_tsb_sync(mm); +		preempt_enable();  		/* Now it is safe to free the old tsb.  */  		kmem_cache_free(tsb_caches[old_cache_index], old_tsb); diff --git a/arch/sparc64/mm/ultra.S b/arch/sparc64/mm/ultra.S index 4c8ca131ffa..ff1dc44d363 100644 --- a/arch/sparc64/mm/ultra.S +++ b/arch/sparc64/mm/ultra.S @@ -480,41 +480,6 @@ xcall_sync_tick:  	b		rtrap_xcall  	 ldx		[%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 -	/* NOTE: This is SPECIAL!!  We do etrap/rtrap however -	 *       we choose to deal with the "BH's run with -	 *       %pil==15" problem (described in asm/pil.h) -	 *       by just invoking rtrap directly past where -	 *       BH's are checked for. -	 * -	 *       We do it like this because we do not want %pil==15 -	 *       lockups to prevent regs being reported. -	 */ -	.globl		xcall_report_regs -xcall_report_regs: - -661:	rdpr		%pstate, %g2 -	wrpr		%g2, PSTATE_IG | PSTATE_AG, %pstate -	.section	.sun4v_2insn_patch, "ax" -	.word		661b -	nop -	nop -	.previous - -	rdpr		%pil, %g2 -	wrpr		%g0, 15, %pil -	sethi		%hi(109f), %g7 -	b,pt		%xcc, etrap_irq -109:	 or		%g7, %lo(109b), %g7 -#ifdef CONFIG_TRACE_IRQFLAGS -	call		trace_hardirqs_off -	 nop -#endif -	call		__show_regs -	 add		%sp, PTREGS_OFF, %o0 -	/* Has to be a non-v9 branch due to the large distance. */ -	b		rtrap_xcall -	 ldx		[%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 -  #ifdef CONFIG_MAGIC_SYSRQ  	.globl		xcall_fetch_glob_regs  xcall_fetch_glob_regs: @@ -531,6 +496,13 @@ xcall_fetch_glob_regs:  	stx		%g7, [%g1 + GR_SNAP_TNPC]  	stx		%o7, [%g1 + GR_SNAP_O7]  	stx		%i7, [%g1 + GR_SNAP_I7] +	/* Don't try this at home kids... */ +	rdpr		%cwp, %g2 +	sub		%g2, 1, %g7 +	wrpr		%g7, %cwp +	mov		%i7, %g7 +	wrpr		%g2, %cwp +	stx		%g7, [%g1 + GR_SNAP_RPC]  	sethi		%hi(trap_block), %g7  	or		%g7, %lo(trap_block), %g7  	sllx		%g2, TRAP_BLOCK_SZ_SHIFT, %g2 diff --git a/arch/xtensa/kernel/xtensa_ksyms.c b/arch/xtensa/kernel/xtensa_ksyms.c index 6e52cdd6166..c9a7c5b74a0 100644 --- a/arch/xtensa/kernel/xtensa_ksyms.c +++ b/arch/xtensa/kernel/xtensa_ksyms.c @@ -18,7 +18,6 @@  #include <linux/interrupt.h>  #include <asm/irq.h>  #include <linux/in6.h> -#include <linux/ide.h>  #include <asm/uaccess.h>  #include <asm/checksum.h> diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c index c5b9bcfc0a6..12a5182173f 100644 --- a/block/scsi_ioctl.c +++ b/block/scsi_ioctl.c @@ -518,7 +518,7 @@ int scsi_cmd_ioctl(struct file *file, struct request_queue *q,  			hdr.sbp = cgc.sense;  			if (hdr.sbp)  				hdr.mx_sb_len = sizeof(struct request_sense); -			hdr.timeout = cgc.timeout; +			hdr.timeout = jiffies_to_msecs(cgc.timeout);  			hdr.cmdp = ((struct cdrom_generic_command __user*) arg)->cmd;  			hdr.cmd_len = sizeof(cgc.cmd); diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index d81632cd7d0..0ce0c279aab 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c @@ -1292,8 +1292,6 @@ static void cciss_check_queues(ctlr_info_t *h)  				h->next_to_run = curr_queue;  				break;  			} -		} else { -			curr_queue = (curr_queue + 1) % (h->highest_lun + 1);  		}  	}  } diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index a5da3563265..d9d1b65d206 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c @@ -1436,10 +1436,6 @@ static void cdrom_count_tracks(struct cdrom_device_info *cdi, tracktype* tracks)  	tracks->xa=0;  	tracks->error=0;  	cdinfo(CD_COUNT_TRACKS, "entering cdrom_count_tracks\n");  -        if (!CDROM_CAN(CDC_PLAY_AUDIO)) {  -                tracks->error=CDS_NO_INFO; -                return; -        }          	/* Grab the TOC header so we can see how many tracks there are */  	if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header))) {  		if (ret == -ENOMEDIUM) diff --git a/drivers/char/ds1620.c b/drivers/char/ds1620.c index 34275c6f1da..be85c6d1edf 100644 --- a/drivers/char/ds1620.c +++ b/drivers/char/ds1620.c @@ -10,7 +10,7 @@  #include <linux/init.h>  #include <linux/smp_lock.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/uaccess.h>  #include <asm/therm.h> diff --git a/drivers/char/efirtc.c b/drivers/char/efirtc.c index 67fbd7aab5d..34d15d54823 100644 --- a/drivers/char/efirtc.c +++ b/drivers/char/efirtc.c @@ -37,7 +37,6 @@  #include <linux/rtc.h>  #include <linux/proc_fs.h>  #include <linux/efi.h> -#include <linux/smp_lock.h>  #include <linux/uaccess.h>  #include <asm/system.h> diff --git a/drivers/char/hvc_console.h b/drivers/char/hvc_console.h index d9ce1091562..9790201718a 100644 --- a/drivers/char/hvc_console.h +++ b/drivers/char/hvc_console.h @@ -6,7 +6,7 @@   * 	Ryan S. Arnold <rsa@us.ibm.com>   *   * hvc_console header information: - *      moved here from include/asm-powerpc/hvconsole.h + *      moved here from arch/powerpc/include/asm/hvconsole.h   *      and drivers/char/hvc_console.c   *   * This program is free software; you can redistribute it and/or modify diff --git a/drivers/char/hvcs.c b/drivers/char/hvcs.c index 786d518e947..473d9b14439 100644 --- a/drivers/char/hvcs.c +++ b/drivers/char/hvcs.c @@ -114,7 +114,7 @@   * the hvcs_final_close() function in order to get it out of the spinlock.   * Rearranged hvcs_close().  Cleaned up some printks and did some housekeeping   * on the changelog.  Removed local CLC_LENGTH and used HVCS_CLC_LENGTH from - * include/asm-powerpc/hvcserver.h  + * arch/powerepc/include/asm/hvcserver.h   *   * 1.3.2 -> 1.3.3 Replaced yield() in hvcs_close() with tty_wait_until_sent() to   * prevent possible lockup with realtime scheduling as similarily pointed out by diff --git a/drivers/char/hw_random/ixp4xx-rng.c b/drivers/char/hw_random/ixp4xx-rng.c index bab43ca32ac..b4402b5958e 100644 --- a/drivers/char/hw_random/ixp4xx-rng.c +++ b/drivers/char/hw_random/ixp4xx-rng.c @@ -23,7 +23,7 @@  #include <linux/hw_random.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static int ixp4xx_rng_data_read(struct hwrng *rng, u32 *buffer) diff --git a/drivers/char/vt.c b/drivers/char/vt.c index 82a51f38a54..1bc00c9d860 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c @@ -916,7 +916,6 @@ int vc_resize(struct vc_data *vc, unsigned int cols, unsigned int lines)  		ws.ws_col = vc->vc_cols;  		ws.ws_ypixel = vc->vc_scan_lines; -		mutex_lock(&vc->vc_tty->termios_mutex);  		spin_lock_irq(&vc->vc_tty->ctrl_lock);  		if ((ws.ws_row != cws->ws_row || ws.ws_col != cws->ws_col))  			pgrp = get_pid(vc->vc_tty->pgrp); @@ -926,7 +925,6 @@ int vc_resize(struct vc_data *vc, unsigned int cols, unsigned int lines)  			put_pid(pgrp);  		}  		*cws = ws; -		mutex_unlock(&vc->vc_tty->termios_mutex);  	}  	if (CON_IS_VISIBLE(vc)) diff --git a/drivers/i2c/busses/i2c-acorn.c b/drivers/i2c/busses/i2c-acorn.c index 7c2be3558a2..5ec60d141ce 100644 --- a/drivers/i2c/busses/i2c-acorn.c +++ b/drivers/i2c/busses/i2c-acorn.c @@ -16,7 +16,7 @@  #include <linux/i2c.h>  #include <linux/i2c-algo-bit.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/hardware/ioc.h>  #include <asm/system.h> diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c index af3846eda98..eccbb745156 100644 --- a/drivers/i2c/busses/i2c-davinci.c +++ b/drivers/i2c/busses/i2c-davinci.c @@ -36,8 +36,7 @@  #include <linux/platform_device.h>  #include <linux/io.h> -#include <asm/hardware.h> -#include <asm/mach-types.h> +#include <asm/arch/hardware.h>  #include <asm/arch/i2c.h> diff --git a/drivers/i2c/busses/i2c-ixp2000.c b/drivers/i2c/busses/i2c-ixp2000.c index 5af9e6521e6..bd0f3f4323b 100644 --- a/drivers/i2c/busses/i2c-ixp2000.c +++ b/drivers/i2c/busses/i2c-ixp2000.c @@ -33,7 +33,7 @@  #include <linux/i2c.h>  #include <linux/i2c-algo-bit.h> -#include <asm/hardware.h>	/* Pick up IXP2000-specific bits */ +#include <asm/arch/hardware.h>	/* Pick up IXP2000-specific bits */  #include <asm/arch/gpio.h>  static inline int ixp2000_scl_pin(void *data) diff --git a/drivers/i2c/busses/i2c-pnx.c b/drivers/i2c/busses/i2c-pnx.c index 1ca21084ffc..e06ccc6c5e9 100644 --- a/drivers/i2c/busses/i2c-pnx.c +++ b/drivers/i2c/busses/i2c-pnx.c @@ -19,7 +19,7 @@  #include <linux/completion.h>  #include <linux/platform_device.h>  #include <linux/i2c-pnx.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/uaccess.h> diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c index af9e6034d7f..d65b7fbb469 100644 --- a/drivers/i2c/busses/i2c-pxa.c +++ b/drivers/i2c/busses/i2c-pxa.c @@ -34,7 +34,7 @@  #include <linux/err.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h>  #include <asm/arch/i2c.h> diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c index 4864723c742..b216bfbea78 100644 --- a/drivers/i2c/busses/i2c-s3c2410.c +++ b/drivers/i2c/busses/i2c-s3c2410.c @@ -35,7 +35,7 @@  #include <linux/clk.h>  #include <linux/cpufreq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h> diff --git a/drivers/i2c/chips/menelaus.c b/drivers/i2c/chips/menelaus.c index b36db1797c1..e3c12e365c4 100644 --- a/drivers/i2c/chips/menelaus.c +++ b/drivers/i2c/chips/menelaus.c @@ -41,7 +41,6 @@  #include <linux/rtc.h>  #include <linux/bcd.h> -#include <asm/mach-types.h>  #include <asm/mach/irq.h>  #include <asm/arch/gpio.h> diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig index 130ef64b44f..a34758d2951 100644 --- a/drivers/ide/Kconfig +++ b/drivers/ide/Kconfig @@ -54,16 +54,6 @@ menuconfig IDE  if IDE -config IDE_MAX_HWIFS -	int "Max IDE interfaces" -	depends on ALPHA || SUPERH || IA64 || EMBEDDED -	range 1 10 -	default 4 -	help -	  This is the maximum number of IDE hardware interfaces that will -	  be supported by the driver. Make sure it is at least as high as -	  the number of IDE interfaces in your system. -  config BLK_DEV_IDE  	tristate "Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support"  	---help--- diff --git a/drivers/ide/arm/ide_arm.c b/drivers/ide/arm/ide_arm.c index 176532ffae0..8a3bb23f8ae 100644 --- a/drivers/ide/arm/ide_arm.c +++ b/drivers/ide/arm/ide_arm.c @@ -11,7 +11,6 @@  #include <linux/init.h>  #include <linux/ide.h> -#include <asm/mach-types.h>  #include <asm/irq.h>  #define DRV_NAME "ide_arm" diff --git a/drivers/ide/arm/palm_bk3710.c b/drivers/ide/arm/palm_bk3710.c index 3e842d60eae..f788fa5a977 100644 --- a/drivers/ide/arm/palm_bk3710.c +++ b/drivers/ide/arm/palm_bk3710.c @@ -309,7 +309,7 @@ static void __devinit palm_bk3710_chipinit(void __iomem *base)  	palm_bk3710_setpiomode(base, NULL, 1, 600, 0);  } -static u8 __devinit palm_bk3710_cable_detect(ide_hwif_t *hwif) +static u8 palm_bk3710_cable_detect(ide_hwif_t *hwif)  {  	return ATA_CBL_PATA80;  } diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index e617cf08aef..89a112d513a 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c @@ -66,11 +66,11 @@ static struct cdrom_info *ide_cd_get(struct gendisk *disk)  	mutex_lock(&idecd_ref_mutex);  	cd = ide_cd_g(disk);  	if (cd) { -		kref_get(&cd->kref); -		if (ide_device_get(cd->drive)) { -			kref_put(&cd->kref, ide_cd_release); +		if (ide_device_get(cd->drive))  			cd = NULL; -		} +		else +			kref_get(&cd->kref); +  	}  	mutex_unlock(&idecd_ref_mutex);  	return cd; @@ -78,9 +78,11 @@ static struct cdrom_info *ide_cd_get(struct gendisk *disk)  static void ide_cd_put(struct cdrom_info *cd)  { +	ide_drive_t *drive = cd->drive; +  	mutex_lock(&idecd_ref_mutex); -	ide_device_put(cd->drive);  	kref_put(&cd->kref, ide_cd_release); +	ide_device_put(drive);  	mutex_unlock(&idecd_ref_mutex);  } @@ -1305,6 +1307,7 @@ static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity,  	int stat;  	unsigned char cmd[BLK_MAX_CDB];  	unsigned len = sizeof(capbuf); +	u32 blocklen;  	memset(cmd, 0, BLK_MAX_CDB);  	cmd[0] = GPCMD_READ_CDVD_CAPACITY; @@ -1317,23 +1320,24 @@ static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity,  	/*  	 * Sanity check the given block size  	 */ -	switch (capbuf.blocklen) { -	case __constant_cpu_to_be32(512): -	case __constant_cpu_to_be32(1024): -	case __constant_cpu_to_be32(2048): -	case __constant_cpu_to_be32(4096): +	blocklen = be32_to_cpu(capbuf.blocklen); +	switch (blocklen) { +	case 512: +	case 1024: +	case 2048: +	case 4096:  		break;  	default:  		printk(KERN_ERR "%s: weird block size %u\n", -			drive->name, capbuf.blocklen); +			drive->name, blocklen);  		printk(KERN_ERR "%s: default to 2kb block size\n",  			drive->name); -		capbuf.blocklen = __constant_cpu_to_be32(2048); +		blocklen = 2048;  		break;  	}  	*capacity = 1 + be32_to_cpu(capbuf.lba); -	*sectors_per_frame = be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS; +	*sectors_per_frame = blocklen >> SECTOR_BITS;  	return 0;  } diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index 28d85b410f7..68b9cf0138b 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c @@ -65,11 +65,10 @@ static struct ide_disk_obj *ide_disk_get(struct gendisk *disk)  	mutex_lock(&idedisk_ref_mutex);  	idkp = ide_disk_g(disk);  	if (idkp) { -		kref_get(&idkp->kref); -		if (ide_device_get(idkp->drive)) { -			kref_put(&idkp->kref, ide_disk_release); +		if (ide_device_get(idkp->drive))  			idkp = NULL; -		} +		else +			kref_get(&idkp->kref);  	}  	mutex_unlock(&idedisk_ref_mutex);  	return idkp; @@ -77,9 +76,11 @@ static struct ide_disk_obj *ide_disk_get(struct gendisk *disk)  static void ide_disk_put(struct ide_disk_obj *idkp)  { +	ide_drive_t *drive = idkp->drive; +  	mutex_lock(&idedisk_ref_mutex); -	ide_device_put(idkp->drive);  	kref_put(&idkp->kref, ide_disk_release); +	ide_device_put(drive);  	mutex_unlock(&idedisk_ref_mutex);  } diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c index 71c377a7bcf..adc68275585 100644 --- a/drivers/ide/ide-dma.c +++ b/drivers/ide/ide-dma.c @@ -649,11 +649,7 @@ static unsigned int ide_get_mode_mask(ide_drive_t *drive, u8 base, u8 req_mode)  		if (id->field_valid & 2) {  			mask = id->dma_1word & hwif->swdma_mask;  		} else if (id->tDMA) { -			/* -			 * ide_fix_driveid() doesn't convert ->tDMA to the -			 * CPU endianness so we need to do it here -			 */ -			u8 mode = le16_to_cpu(id->tDMA); +			u8 mode = id->tDMA;  			/*  			 * if the mode is valid convert it to the mask diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c index ca11a26746f..e9034c0125f 100644 --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c @@ -167,11 +167,10 @@ static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk)  	mutex_lock(&idefloppy_ref_mutex);  	floppy = ide_floppy_g(disk);  	if (floppy) { -		kref_get(&floppy->kref); -		if (ide_device_get(floppy->drive)) { -			kref_put(&floppy->kref, idefloppy_cleanup_obj); +		if (ide_device_get(floppy->drive))  			floppy = NULL; -		} +		else +			kref_get(&floppy->kref);  	}  	mutex_unlock(&idefloppy_ref_mutex);  	return floppy; @@ -179,9 +178,11 @@ static struct ide_floppy_obj *ide_floppy_get(struct gendisk *disk)  static void ide_floppy_put(struct ide_floppy_obj *floppy)  { +	ide_drive_t *drive = floppy->drive; +  	mutex_lock(&idefloppy_ref_mutex); -	ide_device_put(floppy->drive);  	kref_put(&floppy->kref, idefloppy_cleanup_obj); +	ide_device_put(drive);  	mutex_unlock(&idefloppy_ref_mutex);  } diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index 8aae9176451..2cbadffe922 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c @@ -484,11 +484,11 @@ void ide_fix_driveid (struct hd_driveid *id)  	for (i = 0; i < 3; i++)  		id->words157_159[i] = __le16_to_cpu(id->words157_159[i]);  	id->cfa_power      = __le16_to_cpu(id->cfa_power); -	for (i = 0; i < 14; i++) +	for (i = 0; i < 15; i++)  		id->words161_175[i] = __le16_to_cpu(id->words161_175[i]); -	for (i = 0; i < 31; i++) +	for (i = 0; i < 30; i++)  		id->words176_205[i] = __le16_to_cpu(id->words176_205[i]); -	for (i = 0; i < 48; i++) +	for (i = 0; i < 49; i++)  		id->words206_254[i] = __le16_to_cpu(id->words206_254[i]);  	id->integrity_word  = __le16_to_cpu(id->integrity_word);  # else diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index 82c2afe4d28..1bce84b5663 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c @@ -331,11 +331,10 @@ static struct ide_tape_obj *ide_tape_get(struct gendisk *disk)  	mutex_lock(&idetape_ref_mutex);  	tape = ide_tape_g(disk);  	if (tape) { -		kref_get(&tape->kref); -		if (ide_device_get(tape->drive)) { -			kref_put(&tape->kref, ide_tape_release); +		if (ide_device_get(tape->drive))  			tape = NULL; -		} +		else +			kref_get(&tape->kref);  	}  	mutex_unlock(&idetape_ref_mutex);  	return tape; @@ -343,9 +342,11 @@ static struct ide_tape_obj *ide_tape_get(struct gendisk *disk)  static void ide_tape_put(struct ide_tape_obj *tape)  { +	ide_drive_t *drive = tape->drive; +  	mutex_lock(&idetape_ref_mutex); -	ide_device_put(tape->drive);  	kref_put(&tape->kref, ide_tape_release); +	ide_device_put(drive);  	mutex_unlock(&idetape_ref_mutex);  } diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c index e0c8fe7d9fe..40644b6f1c0 100644 --- a/drivers/ide/pci/aec62xx.c +++ b/drivers/ide/pci/aec62xx.c @@ -160,7 +160,7 @@ static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev)  	return dev->irq;  } -static u8 __devinit atp86x_cable_detect(ide_hwif_t *hwif) +static u8 atp86x_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev);  	u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01; diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index b582687e0cd..d647526af55 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c @@ -371,7 +371,7 @@ static int ali_cable_override(struct pci_dev *pdev)   *	FIXME: frobs bits that are not defined on newer ALi devicea   */ -static u8 __devinit ali_cable_detect(ide_hwif_t *hwif) +static u8 ali_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev);  	unsigned long flags; diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c index 2cea7bf51a0..1e66a960a96 100644 --- a/drivers/ide/pci/amd74xx.c +++ b/drivers/ide/pci/amd74xx.c @@ -175,7 +175,7 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev)  	return dev->irq;  } -static u8 __devinit amd_cable_detect(ide_hwif_t *hwif) +static u8 amd_cable_detect(ide_hwif_t *hwif)  {  	if ((amd_80w >> hwif->channel) & 1)  		return ATA_CBL_PATA80; diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c index 332f08f43b5..41f6cb6c163 100644 --- a/drivers/ide/pci/atiixp.c +++ b/drivers/ide/pci/atiixp.c @@ -119,7 +119,7 @@ static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed)  	spin_unlock_irqrestore(&atiixp_lock, flags);  } -static u8 __devinit atiixp_cable_detect(ide_hwif_t *hwif) +static u8 atiixp_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *pdev = to_pci_dev(hwif->dev);  	u8 udma_mode = 0, ch = hwif->channel; diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c index 1360b4fa9fd..e064398e03b 100644 --- a/drivers/ide/pci/cmd64x.c +++ b/drivers/ide/pci/cmd64x.c @@ -354,7 +354,7 @@ static unsigned int __devinit init_chipset_cmd64x(struct pci_dev *dev)  	return 0;  } -static u8 __devinit cmd64x_cable_detect(ide_hwif_t *hwif) +static u8 cmd64x_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev  *dev	= to_pci_dev(hwif->dev);  	u8 bmidecsr = 0, mask	= hwif->channel ? 0x02 : 0x01; diff --git a/drivers/ide/pci/cs5520.c b/drivers/ide/pci/cs5520.c index c0364b287f1..151844fcbb0 100644 --- a/drivers/ide/pci/cs5520.c +++ b/drivers/ide/pci/cs5520.c @@ -96,6 +96,7 @@ static const struct ide_port_ops cs5520_port_ops = {  static const struct ide_port_info cyrix_chipset __devinitdata = {  	.name		= DRV_NAME, +	.enablebits	= { { 0x60, 0x01, 0x01 }, { 0x60, 0x02, 0x02 } },  	.port_ops	= &cs5520_port_ops,  	.host_flags	= IDE_HFLAG_ISA_PORTS | IDE_HFLAG_CS5520,  	.pio_mask	= ATA_PIO4, diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c index f7b50cdeefa..dd3dc23af99 100644 --- a/drivers/ide/pci/cs5535.c +++ b/drivers/ide/pci/cs5535.c @@ -153,7 +153,7 @@ static void cs5535_set_pio_mode(ide_drive_t *drive, const u8 pio)  	cs5535_set_speed(drive, XFER_PIO_0 + pio);  } -static u8 __devinit cs5535_cable_detect(ide_hwif_t *hwif) +static u8 cs5535_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev);  	u8 bit; diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c index 5271b246b88..748793a413a 100644 --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c @@ -1214,7 +1214,7 @@ static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev)  	return dev->irq;  } -static u8 __devinit hpt3xx_cable_detect(ide_hwif_t *hwif) +static u8 hpt3xx_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev	*dev	= to_pci_dev(hwif->dev);  	struct ide_host *host	= pci_get_drvdata(dev); diff --git a/drivers/ide/pci/it8213.c b/drivers/ide/pci/it8213.c index 6eba8f18826..652e47dd7e8 100644 --- a/drivers/ide/pci/it8213.c +++ b/drivers/ide/pci/it8213.c @@ -141,7 +141,7 @@ static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed)  	}  } -static u8 __devinit it8213_cable_detect(ide_hwif_t *hwif) +static u8 it8213_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev);  	u8 reg42h = 0; diff --git a/drivers/ide/pci/it821x.c b/drivers/ide/pci/it821x.c index e16a1d113a2..b6dc723de70 100644 --- a/drivers/ide/pci/it821x.c +++ b/drivers/ide/pci/it821x.c @@ -428,7 +428,7 @@ static void it821x_set_dma_mode(ide_drive_t *drive, const u8 speed)   *	the needed logic onboard.   */ -static u8 __devinit it821x_cable_detect(ide_hwif_t *hwif) +static u8 it821x_cable_detect(ide_hwif_t *hwif)  {  	/* The reference driver also only does disk side */  	return ATA_CBL_PATA80; @@ -443,7 +443,7 @@ static u8 __devinit it821x_cable_detect(ide_hwif_t *hwif)   *	final tuning that is needed, or fixups to work around bugs.   */ -static void __devinit it821x_quirkproc(ide_drive_t *drive) +static void it821x_quirkproc(ide_drive_t *drive)  {  	struct it821x_dev *itdev = ide_get_hwifdata(drive->hwif);  	struct hd_driveid *id = drive->id; diff --git a/drivers/ide/pci/jmicron.c b/drivers/ide/pci/jmicron.c index 545b6e172d9..bb9d09d8f19 100644 --- a/drivers/ide/pci/jmicron.c +++ b/drivers/ide/pci/jmicron.c @@ -27,7 +27,7 @@ typedef enum {   *	Returns the cable type.   */ -static u8 __devinit jmicron_cable_detect(ide_hwif_t *hwif) +static u8 jmicron_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *pdev = to_pci_dev(hwif->dev); diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c index 998615fa285..0f609b72f47 100644 --- a/drivers/ide/pci/pdc202xx_new.c +++ b/drivers/ide/pci/pdc202xx_new.c @@ -193,7 +193,7 @@ static void pdcnew_set_pio_mode(ide_drive_t *drive, const u8 pio)  	}  } -static u8 __devinit pdcnew_cable_detect(ide_hwif_t *hwif) +static u8 pdcnew_cable_detect(ide_hwif_t *hwif)  {  	if (get_indexed_reg(hwif, 0x0b) & 0x04)  		return ATA_CBL_PATA40; diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c index 6ff2def58da..de9a2740046 100644 --- a/drivers/ide/pci/pdc202xx_old.c +++ b/drivers/ide/pci/pdc202xx_old.c @@ -117,7 +117,7 @@ static void pdc202xx_set_pio_mode(ide_drive_t *drive, const u8 pio)  	pdc202xx_set_mode(drive, XFER_PIO_0 + pio);  } -static u8 __devinit pdc2026x_cable_detect(ide_hwif_t *hwif) +static u8 pdc2026x_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev);  	u16 CIS, mask = hwif->channel ? (1 << 11) : (1 << 10); diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c index 7fc3022dcf6..30cfc815fe3 100644 --- a/drivers/ide/pci/piix.c +++ b/drivers/ide/pci/piix.c @@ -256,7 +256,7 @@ static const struct ich_laptop ich_laptop[] = {  	{ 0, }  }; -static u8 __devinit piix_cable_detect(ide_hwif_t *hwif) +static u8 piix_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *pdev = to_pci_dev(hwif->dev);  	const struct ich_laptop *lap = &ich_laptop[0]; diff --git a/drivers/ide/pci/scc_pata.c b/drivers/ide/pci/scc_pata.c index 94a7ab86423..6cde48bba6f 100644 --- a/drivers/ide/pci/scc_pata.c +++ b/drivers/ide/pci/scc_pata.c @@ -827,7 +827,7 @@ static void __devinit init_iops_scc(ide_hwif_t *hwif)  	init_mmio_iops_scc(hwif);  } -static u8 __devinit scc_cable_detect(ide_hwif_t *hwif) +static u8 scc_cable_detect(ide_hwif_t *hwif)  {  	return ATA_CBL_PATA80;  } diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index d173f293772..c3bdc6e51a4 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c @@ -272,7 +272,7 @@ static unsigned int __devinit init_chipset_svwks(struct pci_dev *dev)  	return dev->irq;  } -static u8 __devinit ata66_svwks_svwks(ide_hwif_t *hwif) +static u8 ata66_svwks_svwks(ide_hwif_t *hwif)  {  	return ATA_CBL_PATA80;  } @@ -284,7 +284,7 @@ static u8 __devinit ata66_svwks_svwks(ide_hwif_t *hwif)   * Bit 14 clear = primary IDE channel does not have 80-pin cable.   * Bit 14 set   = primary IDE channel has 80-pin cable.   */ -static u8 __devinit ata66_svwks_dell(ide_hwif_t *hwif) +static u8 ata66_svwks_dell(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev); @@ -303,7 +303,7 @@ static u8 __devinit ata66_svwks_dell(ide_hwif_t *hwif)   *   * WARNING: this only works on Alpine hardware!   */ -static u8 __devinit ata66_svwks_cobalt(ide_hwif_t *hwif) +static u8 ata66_svwks_cobalt(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev); @@ -315,7 +315,7 @@ static u8 __devinit ata66_svwks_cobalt(ide_hwif_t *hwif)  	return ATA_CBL_PATA40;  } -static u8 __devinit svwks_cable_detect(ide_hwif_t *hwif) +static u8 svwks_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev); diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index b8ad9ad6cf0..445ce6fbea3 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c @@ -639,7 +639,7 @@ static int is_dev_seagate_sata(ide_drive_t *drive)   *	that can occur before we know what drives are present.   */ -static void __devinit sil_quirkproc(ide_drive_t *drive) +static void sil_quirkproc(ide_drive_t *drive)  {  	ide_hwif_t *hwif = drive->hwif; @@ -679,7 +679,7 @@ static void __devinit init_iops_siimage(ide_hwif_t *hwif)   *	Check for the presence of an ATA66 capable cable on the interface.   */ -static u8 __devinit sil_cable_detect(ide_hwif_t *hwif) +static u8 sil_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *dev	= to_pci_dev(hwif->dev);  	unsigned long addr	= siimage_selreg(hwif, 0); diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c index cc95f90b53b..e5a4b42b4e3 100644 --- a/drivers/ide/pci/sis5513.c +++ b/drivers/ide/pci/sis5513.c @@ -518,7 +518,7 @@ static const struct sis_laptop sis_laptop[] = {  	{ 0, }  }; -static u8 __devinit sis_cable_detect(ide_hwif_t *hwif) +static u8 sis_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *pdev = to_pci_dev(hwif->dev);  	const struct sis_laptop *lap = &sis_laptop[0]; diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c index 13d1fa491f2..866d6c65e3a 100644 --- a/drivers/ide/pci/slc90e66.c +++ b/drivers/ide/pci/slc90e66.c @@ -116,7 +116,7 @@ static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed)  	}  } -static u8 __devinit slc90e66_cable_detect(ide_hwif_t *hwif) +static u8 slc90e66_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev);  	u8 reg47 = 0, mask = hwif->channel ? 0x01 : 0x02; diff --git a/drivers/ide/pci/tc86c001.c b/drivers/ide/pci/tc86c001.c index b1cb8a9ce5a..7fc88c375e5 100644 --- a/drivers/ide/pci/tc86c001.c +++ b/drivers/ide/pci/tc86c001.c @@ -131,7 +131,7 @@ static void tc86c001_dma_start(ide_drive_t *drive)  	ide_dma_start(drive);  } -static u8 __devinit tc86c001_cable_detect(ide_hwif_t *hwif) +static u8 tc86c001_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *dev = to_pci_dev(hwif->dev);  	unsigned long sc_base = pci_resource_start(dev, 5); diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c index 454d2bf62dc..a6b2cc83f29 100644 --- a/drivers/ide/pci/via82cxxx.c +++ b/drivers/ide/pci/via82cxxx.c @@ -352,7 +352,7 @@ static int via_cable_override(struct pci_dev *pdev)  	return 0;  } -static u8 __devinit via82cxxx_cable_detect(ide_hwif_t *hwif) +static u8 via82cxxx_cable_detect(ide_hwif_t *hwif)  {  	struct pci_dev *pdev = to_pci_dev(hwif->dev);  	struct ide_host *host = pci_get_drvdata(pdev); diff --git a/drivers/infiniband/hw/ehca/ehca_reqs.c b/drivers/infiniband/hw/ehca/ehca_reqs.c index dd9bc68f1c7..898c8b5c38d 100644 --- a/drivers/infiniband/hw/ehca/ehca_reqs.c +++ b/drivers/infiniband/hw/ehca/ehca_reqs.c @@ -42,7 +42,7 @@   */ -#include <asm-powerpc/system.h> +#include <asm/system.h>  #include "ehca_classes.h"  #include "ehca_tools.h"  #include "ehca_qes.h" diff --git a/drivers/input/keyboard/jornada720_kbd.c b/drivers/input/keyboard/jornada720_kbd.c index ce650af6d64..63774b53d75 100644 --- a/drivers/input/keyboard/jornada720_kbd.c +++ b/drivers/input/keyboard/jornada720_kbd.c @@ -25,7 +25,7 @@  #include <linux/platform_device.h>  #include <asm/arch/jornada720.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  MODULE_AUTHOR("Kristoffer Ericson <Kristoffer.Ericson@gmail.com>");  MODULE_DESCRIPTION("HP Jornada 710/720/728 keyboard driver"); diff --git a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c index 7797ef6e5e6..22f17a593be 100644 --- a/drivers/input/keyboard/maple_keyb.c +++ b/drivers/input/keyboard/maple_keyb.c @@ -2,7 +2,7 @@   * SEGA Dreamcast keyboard driver   * Based on drivers/usb/usbkbd.c   * Copyright YAEGASHI Takeshi, 2001 - * Porting to 2.6 Copyright Adrian McMenamin, 2007 + * Porting to 2.6 Copyright Adrian McMenamin, 2007, 2008   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -45,39 +45,51 @@ struct dc_kbd {  };  static const unsigned short dc_kbd_keycode[NR_SCANCODES] = { -	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_A, KEY_B, KEY_C, KEY_D, -	KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, -	KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, -	KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_1, KEY_2, -	KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, -	KEY_ENTER, KEY_ESC, KEY_BACKSPACE, KEY_TAB, KEY_SPACE, KEY_MINUS, KEY_EQUAL, KEY_LEFTBRACE, -	KEY_RIGHTBRACE, KEY_BACKSLASH, KEY_BACKSLASH, KEY_SEMICOLON, KEY_APOSTROPHE, KEY_GRAVE, KEY_COMMA, -	KEY_DOT, KEY_SLASH, KEY_CAPSLOCK, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_A, KEY_B, +	KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, +	KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, +	KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, +	KEY_7, KEY_8, KEY_9, KEY_0, KEY_ENTER, KEY_ESC, KEY_BACKSPACE, +	KEY_TAB, KEY_SPACE, KEY_MINUS, KEY_EQUAL, KEY_LEFTBRACE, +	KEY_RIGHTBRACE, KEY_BACKSLASH, KEY_BACKSLASH, KEY_SEMICOLON, +	KEY_APOSTROPHE, KEY_GRAVE, KEY_COMMA, KEY_DOT, KEY_SLASH, +	KEY_CAPSLOCK, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6,  	KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12, KEY_SYSRQ, -	KEY_SCROLLLOCK, KEY_PAUSE, KEY_INSERT, KEY_HOME, KEY_PAGEUP, KEY_DELETE, -	KEY_END, KEY_PAGEDOWN, KEY_RIGHT, KEY_LEFT, KEY_DOWN, KEY_UP, -	KEY_NUMLOCK, KEY_KPSLASH, KEY_KPASTERISK, KEY_KPMINUS, KEY_KPPLUS, KEY_KPENTER, KEY_KP1, KEY_KP2, -	KEY_KP3, KEY_KP4, KEY_KP5, KEY_KP6, KEY_KP7, KEY_KP8, KEY_KP9, KEY_KP0, KEY_KPDOT, -	KEY_102ND, KEY_COMPOSE, KEY_POWER, KEY_KPEQUAL, KEY_F13, KEY_F14, KEY_F15, -	KEY_F16, KEY_F17, KEY_F18, KEY_F19, KEY_F20, -	KEY_F21, KEY_F22, KEY_F23, KEY_F24, KEY_OPEN, KEY_HELP, KEY_PROPS, KEY_FRONT, -	KEY_STOP, KEY_AGAIN, KEY_UNDO, KEY_CUT, KEY_COPY, KEY_PASTE, KEY_FIND, KEY_MUTE, -	KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_KPCOMMA, KEY_RESERVED, KEY_RO, KEY_KATAKANAHIRAGANA , KEY_YEN, -	KEY_HENKAN, KEY_MUHENKAN, KEY_KPJPCOMMA, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_HANGEUL, KEY_HANJA, KEY_KATAKANA, KEY_HIRAGANA, KEY_ZENKAKUHANKAKU, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, -	KEY_LEFTCTRL, KEY_LEFTSHIFT, KEY_LEFTALT, KEY_LEFTMETA, KEY_RIGHTCTRL, KEY_RIGHTSHIFT, KEY_RIGHTALT, KEY_RIGHTMETA, -	KEY_PLAYPAUSE, KEY_STOPCD, KEY_PREVIOUSSONG, KEY_NEXTSONG, KEY_EJECTCD, KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_MUTE, -	KEY_WWW, KEY_BACK, KEY_FORWARD, KEY_STOP, KEY_FIND, KEY_SCROLLUP, KEY_SCROLLDOWN, KEY_EDIT, KEY_SLEEP, -	KEY_SCREENLOCK, KEY_REFRESH, KEY_CALC, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED +	KEY_SCROLLLOCK, KEY_PAUSE, KEY_INSERT, KEY_HOME, KEY_PAGEUP, +	KEY_DELETE, KEY_END, KEY_PAGEDOWN, KEY_RIGHT, KEY_LEFT, KEY_DOWN, +	KEY_UP, KEY_NUMLOCK, KEY_KPSLASH, KEY_KPASTERISK, KEY_KPMINUS, +	KEY_KPPLUS, KEY_KPENTER, KEY_KP1, KEY_KP2, KEY_KP3, KEY_KP4, KEY_KP5, +	KEY_KP6, KEY_KP7, KEY_KP8, KEY_KP9, KEY_KP0, KEY_KPDOT, KEY_102ND, +	KEY_COMPOSE, KEY_POWER, KEY_KPEQUAL, KEY_F13, KEY_F14, KEY_F15, +	KEY_F16, KEY_F17, KEY_F18, KEY_F19, KEY_F20, KEY_F21, KEY_F22, +	KEY_F23, KEY_F24, KEY_OPEN, KEY_HELP, KEY_PROPS, KEY_FRONT, KEY_STOP, +	KEY_AGAIN, KEY_UNDO, KEY_CUT, KEY_COPY, KEY_PASTE, KEY_FIND, KEY_MUTE, +	KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_KPCOMMA, KEY_RESERVED, KEY_RO, KEY_KATAKANAHIRAGANA , KEY_YEN, +	KEY_HENKAN, KEY_MUHENKAN, KEY_KPJPCOMMA, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_HANGEUL, KEY_HANJA, KEY_KATAKANA, KEY_HIRAGANA, +	KEY_ZENKAKUHANKAKU, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, +	KEY_RESERVED, KEY_RESERVED, KEY_LEFTCTRL, KEY_LEFTSHIFT, KEY_LEFTALT, +	KEY_LEFTMETA, KEY_RIGHTCTRL, KEY_RIGHTSHIFT, KEY_RIGHTALT, +	KEY_RIGHTMETA, KEY_PLAYPAUSE, KEY_STOPCD, KEY_PREVIOUSSONG, +	KEY_NEXTSONG, KEY_EJECTCD, KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_MUTE, +	KEY_WWW, KEY_BACK, KEY_FORWARD, KEY_STOP, KEY_FIND, KEY_SCROLLUP, +	KEY_SCROLLDOWN, KEY_EDIT, KEY_SLEEP, KEY_SCREENLOCK, KEY_REFRESH, +	KEY_CALC, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED  };  static void dc_scan_kbd(struct dc_kbd *kbd) @@ -127,12 +139,12 @@ static void dc_scan_kbd(struct dc_kbd *kbd)  static void dc_kbd_callback(struct mapleq *mq)  {  	struct maple_device *mapledev = mq->dev; -	struct dc_kbd *kbd = mapledev->private_data; +	struct dc_kbd *kbd = maple_get_drvdata(mapledev);  	unsigned long *buf = mq->recvbuf;  	/* -	 * We should always be getting the lock because the only -	 * time it may be locked if driver is in cleanup phase. +	 * We should always get the lock because the only +	 * time it may be locked is if the driver is in the cleanup phase.  	 */  	if (likely(mutex_trylock(&maple_keyb_mutex))) { @@ -145,106 +157,96 @@ static void dc_kbd_callback(struct mapleq *mq)  	}  } -static int dc_kbd_connect(struct maple_device *mdev) +static int probe_maple_kbd(struct device *dev)  { +	struct maple_device *mdev = to_maple_dev(dev); +	struct maple_driver *mdrv = to_maple_driver(dev->driver);  	int i, error;  	struct dc_kbd *kbd; -	struct input_dev *dev; +	struct input_dev *idev;  	if (!(mdev->function & MAPLE_FUNC_KEYBOARD))  		return -EINVAL;  	kbd = kzalloc(sizeof(struct dc_kbd), GFP_KERNEL); -	dev = input_allocate_device(); -	if (!kbd || !dev) { +	idev = input_allocate_device(); +	if (!kbd || !idev) {  		error = -ENOMEM;  		goto fail;  	} -	mdev->private_data = kbd; - -	kbd->dev = dev; +	kbd->dev = idev;  	memcpy(kbd->keycode, dc_kbd_keycode, sizeof(kbd->keycode)); -	dev->name = mdev->product_name; -	dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); -	dev->keycode = kbd->keycode; -	dev->keycodesize = sizeof (unsigned short); -	dev->keycodemax = ARRAY_SIZE(kbd->keycode); -	dev->id.bustype = BUS_HOST; -	dev->dev.parent = &mdev->dev; +	idev->name = mdev->product_name; +	idev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); +	idev->keycode = kbd->keycode; +	idev->keycodesize = sizeof(unsigned short); +	idev->keycodemax = ARRAY_SIZE(kbd->keycode); +	idev->id.bustype = BUS_HOST; +	idev->dev.parent = &mdev->dev;  	for (i = 0; i < NR_SCANCODES; i++) -		__set_bit(dc_kbd_keycode[i], dev->keybit); -	__clear_bit(KEY_RESERVED, dev->keybit); +		__set_bit(dc_kbd_keycode[i], idev->keybit); +	__clear_bit(KEY_RESERVED, idev->keybit); -	input_set_capability(dev, EV_MSC, MSC_SCAN); -	input_set_drvdata(dev, kbd); +	input_set_capability(idev, EV_MSC, MSC_SCAN); +	input_set_drvdata(idev, kbd); -	error = input_register_device(dev); +	error = input_register_device(idev);  	if (error)  		goto fail;  	/* Maple polling is locked to VBLANK - which may be just 50/s */ -	maple_getcond_callback(mdev, dc_kbd_callback, HZ/50, MAPLE_FUNC_KEYBOARD); -	return 0; +	maple_getcond_callback(mdev, dc_kbd_callback, HZ/50, +		MAPLE_FUNC_KEYBOARD); - fail: -	input_free_device(dev); +	mdev->driver = mdrv; + +	maple_set_drvdata(mdev, kbd); + +	return error; + +fail: +	input_free_device(idev);  	kfree(kbd); -	mdev->private_data = NULL; +	maple_set_drvdata(mdev, NULL);  	return error;  } -static void dc_kbd_disconnect(struct maple_device *mdev) +static int remove_maple_kbd(struct device *dev)  { -	struct dc_kbd *kbd; +	struct maple_device *mdev = to_maple_dev(dev); +	struct dc_kbd *kbd = maple_get_drvdata(mdev);  	mutex_lock(&maple_keyb_mutex); -	kbd = mdev->private_data; -	mdev->private_data = NULL;  	input_unregister_device(kbd->dev);  	kfree(kbd); -	mutex_unlock(&maple_keyb_mutex); -} - -/* allow the keyboard to be used */ -static int probe_maple_kbd(struct device *dev) -{ -	struct maple_device *mdev = to_maple_dev(dev); -	struct maple_driver *mdrv = to_maple_driver(dev->driver); -	int error; - -	error = dc_kbd_connect(mdev); -	if (error) -		return error; - -	mdev->driver = mdrv; -	mdev->registered = 1; +	maple_set_drvdata(mdev, NULL); +	mutex_unlock(&maple_keyb_mutex);  	return 0;  }  static struct maple_driver dc_kbd_driver = {  	.function = MAPLE_FUNC_KEYBOARD, -	.connect = dc_kbd_connect, -	.disconnect = dc_kbd_disconnect,  	.drv = {  		.name = "Dreamcast_keyboard",  		.probe = probe_maple_kbd, -       }, +		.remove = remove_maple_kbd, +	},  };  static int __init dc_kbd_init(void)  { -	return maple_driver_register(&dc_kbd_driver.drv); +	return maple_driver_register(&dc_kbd_driver);  }  static void __exit dc_kbd_exit(void)  { -	driver_unregister(&dc_kbd_driver.drv); +	maple_driver_unregister(&dc_kbd_driver);  }  module_init(dc_kbd_init); diff --git a/drivers/input/keyboard/omap-keypad.c b/drivers/input/keyboard/omap-keypad.c index 10afd206806..b7964850832 100644 --- a/drivers/input/keyboard/omap-keypad.c +++ b/drivers/input/keyboard/omap-keypad.c @@ -38,9 +38,8 @@  #include <asm/arch/keypad.h>  #include <asm/arch/menelaus.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h> -#include <asm/mach-types.h>  #include <asm/arch/mux.h>  #undef NEW_BOARD_LEARNING_MODE diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c index 6f1516f5075..8a925359d82 100644 --- a/drivers/input/keyboard/pxa27x_keypad.c +++ b/drivers/input/keyboard/pxa27x_keypad.c @@ -26,7 +26,6 @@  #include <linux/clk.h>  #include <linux/err.h> -#include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> diff --git a/drivers/input/misc/ixp4xx-beeper.c b/drivers/input/misc/ixp4xx-beeper.c index 798d84c44d0..7908f5c12b0 100644 --- a/drivers/input/misc/ixp4xx-beeper.c +++ b/drivers/input/misc/ixp4xx-beeper.c @@ -20,7 +20,7 @@  #include <linux/delay.h>  #include <linux/platform_device.h>  #include <linux/interrupt.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");  MODULE_DESCRIPTION("ixp4xx beeper driver"); diff --git a/drivers/input/mouse/rpcmouse.c b/drivers/input/mouse/rpcmouse.c index 18a48636ba4..536e3be31b4 100644 --- a/drivers/input/mouse/rpcmouse.c +++ b/drivers/input/mouse/rpcmouse.c @@ -23,7 +23,7 @@  #include <linux/init.h>  #include <linux/input.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/io.h>  #include <asm/hardware/iomd.h> diff --git a/drivers/input/serio/rpckbd.c b/drivers/input/serio/rpckbd.c index 1567b778247..22374d0d998 100644 --- a/drivers/input/serio/rpckbd.c +++ b/drivers/input/serio/rpckbd.c @@ -35,7 +35,7 @@  #include <linux/platform_device.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/hardware/iomd.h>  #include <asm/system.h> diff --git a/drivers/input/touchscreen/jornada720_ts.c b/drivers/input/touchscreen/jornada720_ts.c index 1aca108b103..19f40772c2f 100644 --- a/drivers/input/touchscreen/jornada720_ts.c +++ b/drivers/input/touchscreen/jornada720_ts.c @@ -19,7 +19,7 @@  #include <linux/interrupt.h>  #include <linux/module.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/jornada720.h>  MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>"); diff --git a/drivers/isdn/Makefile b/drivers/isdn/Makefile index 8380a4568d1..f1f777570e8 100644 --- a/drivers/isdn/Makefile +++ b/drivers/isdn/Makefile @@ -5,7 +5,7 @@  obj-$(CONFIG_ISDN_I4L)			+= i4l/  obj-$(CONFIG_ISDN_CAPI)			+= capi/  obj-$(CONFIG_MISDN)			+= mISDN/ -obj-$(CONFIG_ISDN_CAPI)			+= hardware/ +obj-$(CONFIG_ISDN)			+= hardware/  obj-$(CONFIG_ISDN_DIVERSION)		+= divert/  obj-$(CONFIG_ISDN_DRV_HISAX)		+= hisax/  obj-$(CONFIG_ISDN_DRV_ICN)		+= icn/ diff --git a/drivers/isdn/hardware/mISDN/hfcmulti.c b/drivers/isdn/hardware/mISDN/hfcmulti.c index 2649ea55a9e..1eac03f39d0 100644 --- a/drivers/isdn/hardware/mISDN/hfcmulti.c +++ b/drivers/isdn/hardware/mISDN/hfcmulti.c @@ -140,7 +140,7 @@   * #define HFC_REGISTER_DEBUG   */ -static const char *hfcmulti_revision = "2.00"; +static const char *hfcmulti_revision = "2.02";  #include <linux/module.h>  #include <linux/pci.h> @@ -427,12 +427,12 @@ write_fifo_regio(struct hfc_multi *hc, u_char *data, int len)  {  	outb(A_FIFO_DATA0, (hc->pci_iobase)+4);  	while (len>>2) { -		outl(*(u32 *)data, hc->pci_iobase); +		outl(cpu_to_le32(*(u32 *)data), hc->pci_iobase);  		data += 4;  		len -= 4;  	}  	while (len>>1) { -		outw(*(u16 *)data, hc->pci_iobase); +		outw(cpu_to_le16(*(u16 *)data), hc->pci_iobase);  		data += 2;  		len -= 2;  	} @@ -447,17 +447,19 @@ void  write_fifo_pcimem(struct hfc_multi *hc, u_char *data, int len)  {  	while (len>>2) { -		writel(*(u32 *)data, (hc->pci_membase)+A_FIFO_DATA0); +		writel(cpu_to_le32(*(u32 *)data), +			hc->pci_membase + A_FIFO_DATA0);  		data += 4;  		len -= 4;  	}  	while (len>>1) { -		writew(*(u16 *)data, (hc->pci_membase)+A_FIFO_DATA0); +		writew(cpu_to_le16(*(u16 *)data), +			hc->pci_membase + A_FIFO_DATA0);  		data += 2;  		len -= 2;  	}  	while (len) { -		writeb(*data, (hc->pci_membase)+A_FIFO_DATA0); +		writeb(*data, hc->pci_membase + A_FIFO_DATA0);  		data++;  		len--;  	} @@ -468,12 +470,12 @@ read_fifo_regio(struct hfc_multi *hc, u_char *data, int len)  {  	outb(A_FIFO_DATA0, (hc->pci_iobase)+4);  	while (len>>2) { -		*(u32 *)data = inl(hc->pci_iobase); +		*(u32 *)data = le32_to_cpu(inl(hc->pci_iobase));  		data += 4;  		len -= 4;  	}  	while (len>>1) { -		*(u16 *)data = inw(hc->pci_iobase); +		*(u16 *)data = le16_to_cpu(inw(hc->pci_iobase));  		data += 2;  		len -= 2;  	} @@ -490,18 +492,18 @@ read_fifo_pcimem(struct hfc_multi *hc, u_char *data, int len)  {  	while (len>>2) {  		*(u32 *)data = -			readl((hc->pci_membase)+A_FIFO_DATA0); +			le32_to_cpu(readl(hc->pci_membase + A_FIFO_DATA0));  		data += 4;  		len -= 4;  	}  	while (len>>1) {  		*(u16 *)data = -			readw((hc->pci_membase)+A_FIFO_DATA0); +			le16_to_cpu(readw(hc->pci_membase + A_FIFO_DATA0));  		data += 2;  		len -= 2;  	}  	while (len) { -		*data = readb((hc->pci_membase)+A_FIFO_DATA0); +		*data = readb(hc->pci_membase + A_FIFO_DATA0);  		data++;  		len--;  	} @@ -3971,7 +3973,7 @@ open_bchannel(struct hfc_multi *hc, struct dchannel *dch,  	struct bchannel	*bch;  	int		ch; -	if (!test_bit(rq->adr.channel, &dch->dev.channelmap[0])) +	if (!test_channelmap(rq->adr.channel, dch->dev.channelmap))  		return -EINVAL;  	if (rq->protocol == ISDN_P_NONE)  		return -EINVAL; @@ -4587,7 +4589,7 @@ init_e1_port(struct hfc_multi *hc, struct hm_map *m)  		list_add(&bch->ch.list, &dch->dev.bchannels);  		hc->chan[ch].bch = bch;  		hc->chan[ch].port = 0; -		test_and_set_bit(bch->nr, &dch->dev.channelmap[0]); +		set_channelmap(bch->nr, dch->dev.channelmap);  	}  	/* set optical line type */  	if (port[Port_cnt] & 0x001) { @@ -4755,7 +4757,7 @@ init_multi_port(struct hfc_multi *hc, int pt)  		list_add(&bch->ch.list, &dch->dev.bchannels);  		hc->chan[i + ch].bch = bch;  		hc->chan[i + ch].port = pt; -		test_and_set_bit(bch->nr, &dch->dev.channelmap[0]); +		set_channelmap(bch->nr, dch->dev.channelmap);  	}  	/* set master clock */  	if (port[Port_cnt] & 0x001) { @@ -5050,12 +5052,12 @@ static void __devexit hfc_remove_pci(struct pci_dev *pdev)  static const struct hm_map hfcm_map[] = {  /*0*/	{VENDOR_BN, "HFC-1S Card (mini PCI)", 4, 1, 1, 3, 0, DIP_4S, 0}, -/*1*/	{VENDOR_BN, "HFC-2S Card", 4, 2, 1, 3, 0, DIP_4S}, +/*1*/	{VENDOR_BN, "HFC-2S Card", 4, 2, 1, 3, 0, DIP_4S, 0},  /*2*/	{VENDOR_BN, "HFC-2S Card (mini PCI)", 4, 2, 1, 3, 0, DIP_4S, 0},  /*3*/	{VENDOR_BN, "HFC-4S Card", 4, 4, 1, 2, 0, DIP_4S, 0},  /*4*/	{VENDOR_BN, "HFC-4S Card (mini PCI)", 4, 4, 1, 2, 0, 0, 0},  /*5*/	{VENDOR_CCD, "HFC-4S Eval (old)", 4, 4, 0, 0, 0, 0, 0}, -/*6*/	{VENDOR_CCD, "HFC-4S IOB4ST", 4, 4, 1, 2, 0, 0, 0}, +/*6*/	{VENDOR_CCD, "HFC-4S IOB4ST", 4, 4, 1, 2, 0, DIP_4S, 0},  /*7*/	{VENDOR_CCD, "HFC-4S", 4, 4, 1, 2, 0, 0, 0},  /*8*/	{VENDOR_DIG, "HFC-4S Card", 4, 4, 0, 2, 0, 0, HFC_IO_MODE_REGIO},  /*9*/	{VENDOR_CCD, "HFC-4S Swyx 4xS0 SX2 QuadBri", 4, 4, 1, 2, 0, 0, 0}, @@ -5251,9 +5253,6 @@ HFCmulti_init(void)  	if (debug & DEBUG_HFCMULTI_INIT)  		printk(KERN_DEBUG "%s: init entered\n", __func__); -#ifdef __BIG_ENDIAN -#error "not running on big endian machines now" -#endif  	hfc_interrupt = symbol_get(ztdummy_extern_interrupt);  	register_interrupt = symbol_get(ztdummy_register_interrupt);  	unregister_interrupt = symbol_get(ztdummy_unregister_interrupt); diff --git a/drivers/isdn/hardware/mISDN/hfcpci.c b/drivers/isdn/hardware/mISDN/hfcpci.c index 3231814e7ef..9cf5edbb1a9 100644 --- a/drivers/isdn/hardware/mISDN/hfcpci.c +++ b/drivers/isdn/hardware/mISDN/hfcpci.c @@ -2056,7 +2056,7 @@ setup_card(struct hfc_pci *card)  	card->dch.dev.nrbchan = 2;  	for (i = 0; i < 2; i++) {  		card->bch[i].nr = i + 1; -		test_and_set_bit(i + 1, &card->dch.dev.channelmap[0]); +		set_channelmap(i + 1, card->dch.dev.channelmap);  		card->bch[i].debug = debug;  		mISDN_initbchannel(&card->bch[i], MAX_DATA_MEM);  		card->bch[i].hw = card; diff --git a/drivers/isdn/mISDN/l1oip_core.c b/drivers/isdn/mISDN/l1oip_core.c index 155b99780c4..e42150a5778 100644 --- a/drivers/isdn/mISDN/l1oip_core.c +++ b/drivers/isdn/mISDN/l1oip_core.c @@ -1006,8 +1006,7 @@ open_bchannel(struct l1oip *hc, struct dchannel *dch, struct channel_req *rq)  	struct bchannel	*bch;  	int		ch; -	if (!test_bit(rq->adr.channel & 0x1f, -		&dch->dev.channelmap[rq->adr.channel >> 5])) +	if (!test_channelmap(rq->adr.channel, dch->dev.channelmap))  		return -EINVAL;  	if (rq->protocol == ISDN_P_NONE)  		return -EINVAL; @@ -1412,8 +1411,7 @@ init_card(struct l1oip *hc, int pri, int bundle)  		bch->ch.nr = i + ch;  		list_add(&bch->ch.list, &dch->dev.bchannels);  		hc->chan[i + ch].bch = bch; -		test_and_set_bit(bch->nr & 0x1f, -			&dch->dev.channelmap[bch->nr >> 5]); +		set_channelmap(bch->nr, dch->dev.channelmap);  	}  	ret = mISDN_register_device(&dch->dev, hc->name);  	if (ret) diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c index 4ba4cc364c9..e5a20f9542d 100644 --- a/drivers/isdn/mISDN/socket.c +++ b/drivers/isdn/mISDN/socket.c @@ -379,7 +379,7 @@ data_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)  			di.Bprotocols = dev->Bprotocols | get_all_Bprotocols();  			di.protocol = dev->D.protocol;  			memcpy(di.channelmap, dev->channelmap, -				MISDN_CHMAP_SIZE * 4); +				sizeof(di.channelmap));  			di.nrbchan = dev->nrbchan;  			strcpy(di.name, dev->name);  			if (copy_to_user((void __user *)arg, &di, sizeof(di))) @@ -637,7 +637,7 @@ base_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)  			di.Bprotocols = dev->Bprotocols | get_all_Bprotocols();  			di.protocol = dev->D.protocol;  			memcpy(di.channelmap, dev->channelmap, -				MISDN_CHMAP_SIZE * 4); +				sizeof(di.channelmap));  			di.nrbchan = dev->nrbchan;  			strcpy(di.name, dev->name);  			if (copy_to_user((void __user *)arg, &di, sizeof(di))) diff --git a/drivers/leds/leds-corgi.c b/drivers/leds/leds-corgi.c index a709704b9f9..e9d419ff784 100644 --- a/drivers/leds/leds-corgi.c +++ b/drivers/leds/leds-corgi.c @@ -15,7 +15,6 @@  #include <linux/init.h>  #include <linux/platform_device.h>  #include <linux/leds.h> -#include <asm/mach-types.h>  #include <asm/arch/corgi.h>  #include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h> diff --git a/drivers/leds/leds-h1940.c b/drivers/leds/leds-h1940.c index 73c70502168..5227585e74b 100644 --- a/drivers/leds/leds-h1940.c +++ b/drivers/leds/leds-h1940.c @@ -17,7 +17,7 @@  #include <linux/ctype.h>  #include <linux/leds.h>  #include <asm/arch/regs-gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/h1940-latch.h>  /* diff --git a/drivers/leds/leds-locomo.c b/drivers/leds/leds-locomo.c index 7295f7f5218..17ebfe283e7 100644 --- a/drivers/leds/leds-locomo.c +++ b/drivers/leds/leds-locomo.c @@ -13,7 +13,7 @@  #include <linux/device.h>  #include <linux/leds.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/locomo.h>  static void locomoled_brightness_set(struct led_classdev *led_cdev, diff --git a/drivers/leds/leds-s3c24xx.c b/drivers/leds/leds-s3c24xx.c index d4f5021dccb..cb74c1890b3 100644 --- a/drivers/leds/leds-s3c24xx.c +++ b/drivers/leds/leds-s3c24xx.c @@ -16,7 +16,7 @@  #include <linux/platform_device.h>  #include <linux/leds.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/regs-gpio.h>  #include <asm/arch/leds-gpio.h> diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c index b1e5b470525..d7e46d345d9 100644 --- a/drivers/macintosh/mediabay.c +++ b/drivers/macintosh/mediabay.c @@ -16,7 +16,6 @@  #include <linux/delay.h>  #include <linux/sched.h>  #include <linux/timer.h> -#include <linux/hdreg.h>  #include <linux/stddef.h>  #include <linux/init.h>  #include <linux/ide.h> diff --git a/drivers/media/video/vino.c b/drivers/media/video/vino.c index 3989b0eded2..ef7572cbc4a 100644 --- a/drivers/media/video/vino.c +++ b/drivers/media/video/vino.c @@ -39,6 +39,7 @@  #include <linux/i2c-algo-sgi.h>  #include <linux/videodev2.h> +#include <media/v4l2-ioctl.h>  #include <media/v4l2-common.h>  #include <linux/video_decoder.h>  #include <linux/mutex.h> diff --git a/drivers/mfd/mcp-sa11x0.c b/drivers/mfd/mcp-sa11x0.c index b5272b5ce3f..6a2a2a8c387 100644 --- a/drivers/mfd/mcp-sa11x0.c +++ b/drivers/mfd/mcp-sa11x0.c @@ -21,7 +21,7 @@  #include <linux/platform_device.h>  #include <asm/dma.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/system.h>  #include <asm/arch/mcp.h> diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c index f6b10dda31f..a67541113e1 100644 --- a/drivers/mfd/ucb1x00-core.c +++ b/drivers/mfd/ucb1x00-core.c @@ -26,7 +26,7 @@  #include <linux/mutex.h>  #include <asm/dma.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "ucb1x00.h" diff --git a/drivers/misc/sgi-gru/grutlbpurge.c b/drivers/misc/sgi-gru/grutlbpurge.c index bcfd5425e2e..c84496a7769 100644 --- a/drivers/misc/sgi-gru/grutlbpurge.c +++ b/drivers/misc/sgi-gru/grutlbpurge.c @@ -34,7 +34,6 @@  #include <linux/hugetlb.h>  #include <linux/delay.h>  #include <linux/timex.h> -#include <linux/delay.h>  #include <linux/srcu.h>  #include <asm/processor.h>  #include "gru.h" diff --git a/drivers/mmc/host/omap.c b/drivers/mmc/host/omap.c index dbc26eb6a89..1f587a239b0 100644 --- a/drivers/mmc/host/omap.c +++ b/drivers/mmc/host/omap.c @@ -29,7 +29,6 @@  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/mach-types.h>  #include <asm/arch/board.h>  #include <asm/arch/mmc.h> diff --git a/drivers/mtd/maps/autcpu12-nvram.c b/drivers/mtd/maps/autcpu12-nvram.c index cf32267263d..f199b16de2d 100644 --- a/drivers/mtd/maps/autcpu12-nvram.c +++ b/drivers/mtd/maps/autcpu12-nvram.c @@ -25,7 +25,7 @@  #include <linux/init.h>  #include <asm/io.h>  #include <asm/sizes.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/autcpu12.h>  #include <linux/mtd/mtd.h>  #include <linux/mtd/map.h> diff --git a/drivers/mtd/maps/ceiva.c b/drivers/mtd/maps/ceiva.c index 6464d487eb1..468204ca238 100644 --- a/drivers/mtd/maps/ceiva.c +++ b/drivers/mtd/maps/ceiva.c @@ -25,7 +25,7 @@  #include <linux/mtd/partitions.h>  #include <linux/mtd/concat.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/io.h>  #include <asm/sizes.h> diff --git a/drivers/mtd/maps/h720x-flash.c b/drivers/mtd/maps/h720x-flash.c index ef891547446..873ff1523bb 100644 --- a/drivers/mtd/maps/h720x-flash.c +++ b/drivers/mtd/maps/h720x-flash.c @@ -16,7 +16,7 @@  #include <linux/mtd/mtd.h>  #include <linux/mtd/map.h>  #include <linux/mtd/partitions.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  static struct mtd_info *mymtd; diff --git a/drivers/mtd/maps/integrator-flash.c b/drivers/mtd/maps/integrator-flash.c index ee361aaadb1..d0282ceecc9 100644 --- a/drivers/mtd/maps/integrator-flash.c +++ b/drivers/mtd/maps/integrator-flash.c @@ -37,7 +37,7 @@  #include <linux/mtd/partitions.h>  #include <asm/mach/flash.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/system.h> diff --git a/drivers/mtd/maps/ipaq-flash.c b/drivers/mtd/maps/ipaq-flash.c index a806119797e..6447e8be992 100644 --- a/drivers/mtd/maps/ipaq-flash.c +++ b/drivers/mtd/maps/ipaq-flash.c @@ -24,8 +24,8 @@  #include <linux/mtd/concat.h>  #endif -#include <asm/hardware.h> -#include <asm/arch-sa1100/h3600.h> +#include <asm/arch/hardware.h> +#include <asm/arch/h3600.h>  #include <asm/io.h> diff --git a/drivers/mtd/maps/ixp2000.c b/drivers/mtd/maps/ixp2000.c index c2264792a20..33b583e0d1b 100644 --- a/drivers/mtd/maps/ixp2000.c +++ b/drivers/mtd/maps/ixp2000.c @@ -30,7 +30,7 @@  #include <linux/mtd/partitions.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/flash.h>  #include <linux/reboot.h> diff --git a/drivers/mtd/maps/omap_nor.c b/drivers/mtd/maps/omap_nor.c index 68eec6c6c51..771e6806c58 100644 --- a/drivers/mtd/maps/omap_nor.c +++ b/drivers/mtd/maps/omap_nor.c @@ -43,7 +43,7 @@  #include <linux/mtd/partitions.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/flash.h>  #include <asm/arch/tc.h> diff --git a/drivers/mtd/maps/pxa2xx-flash.c b/drivers/mtd/maps/pxa2xx-flash.c index 82113295c26..fe070cc0a49 100644 --- a/drivers/mtd/maps/pxa2xx-flash.c +++ b/drivers/mtd/maps/pxa2xx-flash.c @@ -19,7 +19,7 @@  #include <linux/mtd/partitions.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/cacheflush.h>  #include <asm/mach/flash.h> diff --git a/drivers/mtd/maps/sa1100-flash.c b/drivers/mtd/maps/sa1100-flash.c index e177a43dfff..7fc3204eee7 100644 --- a/drivers/mtd/maps/sa1100-flash.c +++ b/drivers/mtd/maps/sa1100-flash.c @@ -18,7 +18,7 @@  #include <linux/mtd/partitions.h>  #include <linux/mtd/concat.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/sizes.h>  #include <asm/mach/flash.h> diff --git a/drivers/mtd/mtdsuper.c b/drivers/mtd/mtdsuper.c index 9b6af7e74a6..00d46e137b2 100644 --- a/drivers/mtd/mtdsuper.c +++ b/drivers/mtd/mtdsuper.c @@ -125,8 +125,11 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags,  	       int (*fill_super)(struct super_block *, void *, int),  	       struct vfsmount *mnt)  { +#ifdef CONFIG_BLOCK  	struct block_device *bdev; -	int mtdnr, ret; +	int ret, major; +#endif +	int mtdnr;  	if (!dev_name)  		return -EINVAL; @@ -178,6 +181,7 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags,  		}  	} +#ifdef CONFIG_BLOCK  	/* try the old way - the hack where we allowed users to mount  	 * /dev/mtdblock$(n) but didn't actually _use_ the blockdev  	 */ @@ -190,22 +194,25 @@ int get_sb_mtd(struct file_system_type *fs_type, int flags,  	DEBUG(1, "MTDSB: lookup_bdev() returned 0\n");  	ret = -EINVAL; -	if (MAJOR(bdev->bd_dev) != MTD_BLOCK_MAJOR) -		goto not_an_MTD_device; +	major = MAJOR(bdev->bd_dev);  	mtdnr = MINOR(bdev->bd_dev);  	bdput(bdev); +	if (major != MTD_BLOCK_MAJOR) +		goto not_an_MTD_device; +  	return get_sb_mtd_nr(fs_type, flags, dev_name, data, mtdnr, fill_super,  			     mnt);  not_an_MTD_device: +#endif /* CONFIG_BLOCK */ +  	if (!(flags & MS_SILENT))  		printk(KERN_NOTICE  		       "MTD: Attempt to mount non-MTD device \"%s\"\n",  		       dev_name); -	bdput(bdev); -	return ret; +	return -EINVAL;  }  EXPORT_SYMBOL_GPL(get_sb_mtd); diff --git a/drivers/mtd/nand/sharpsl.c b/drivers/mtd/nand/sharpsl.c index 6dba2fb66ae..18d2cd395b2 100644 --- a/drivers/mtd/nand/sharpsl.c +++ b/drivers/mtd/nand/sharpsl.c @@ -21,7 +21,7 @@  #include <linux/mtd/partitions.h>  #include <linux/interrupt.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  static void __iomem *sharpsl_io_base; diff --git a/drivers/net/arm/am79c961a.c b/drivers/net/arm/am79c961a.c index a637910b02d..0ece4f9f1fa 100644 --- a/drivers/net/arm/am79c961a.c +++ b/drivers/net/arm/am79c961a.c @@ -28,7 +28,7 @@  #include <linux/bitops.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/system.h> diff --git a/drivers/net/irda/ep7211-sir.c b/drivers/net/irda/ep7211-sir.c index 831572429bb..2f89d47a37c 100644 --- a/drivers/net/irda/ep7211-sir.c +++ b/drivers/net/irda/ep7211-sir.c @@ -14,7 +14,7 @@  #include <net/irda/irda_device.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "sir-dev.h" diff --git a/drivers/net/irda/sa1100_ir.c b/drivers/net/irda/sa1100_ir.c index 1bc8518f919..d16594a5dbc 100644 --- a/drivers/net/irda/sa1100_ir.c +++ b/drivers/net/irda/sa1100_ir.c @@ -37,7 +37,7 @@  #include <asm/irq.h>  #include <asm/dma.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/irda.h>  static int power_level = 3; diff --git a/drivers/net/ixp2000/ixp2400-msf.c b/drivers/net/ixp2000/ixp2400-msf.c index 9ec38eebfb5..65267c97310 100644 --- a/drivers/net/ixp2000/ixp2400-msf.c +++ b/drivers/net/ixp2000/ixp2400-msf.c @@ -13,7 +13,7 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/ixp2000-regs.h>  #include <asm/delay.h>  #include <asm/io.h> diff --git a/drivers/net/ixp2000/ixpdev.c b/drivers/net/ixp2000/ixpdev.c index 7111c65f0b3..7b70c66504a 100644 --- a/drivers/net/ixp2000/ixpdev.c +++ b/drivers/net/ixp2000/ixpdev.c @@ -16,7 +16,6 @@  #include <linux/init.h>  #include <linux/moduleparam.h>  #include <asm/hardware/uengine.h> -#include <asm/mach-types.h>  #include <asm/io.h>  #include "ixp2400_rx.ucode"  #include "ixp2400_tx.ucode" diff --git a/drivers/net/netx-eth.c b/drivers/net/netx-eth.c index dc442e37085..f2655ce526b 100644 --- a/drivers/net/netx-eth.c +++ b/drivers/net/netx-eth.c @@ -29,7 +29,6 @@  #include <linux/mii.h>  #include <asm/io.h> -#include <asm/hardware.h>  #include <asm/arch/hardware.h>  #include <asm/arch/netx-regs.h>  #include <asm/arch/pfifo.h> diff --git a/drivers/net/stnic.c b/drivers/net/stnic.c index b65be5d70fe..2ed0bd59681 100644 --- a/drivers/net/stnic.c +++ b/drivers/net/stnic.c @@ -19,7 +19,7 @@  #include <asm/system.h>  #include <asm/io.h> -#include <asm/se.h> +#include <mach-se/mach/se.h>  #include <asm/machvec.h>  #ifdef CONFIG_SH_STANDARD_BIOS  #include <asm/sh_bios.h> diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 26aa37aa531..d2439b85a79 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c @@ -7687,21 +7687,11 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy)   */  static int tg3_init_hw(struct tg3 *tp, int reset_phy)  { -	int err; - -	/* Force the chip into D0. */ -	err = tg3_set_power_state(tp, PCI_D0); -	if (err) -		goto out; -  	tg3_switch_clocks(tp);  	tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); -	err = tg3_reset_hw(tp, reset_phy); - -out: -	return err; +	return tg3_reset_hw(tp, reset_phy);  }  #define TG3_STAT_ADD32(PSTAT, REG) \ @@ -8016,13 +8006,11 @@ static int tg3_open(struct net_device *dev)  	netif_carrier_off(tp->dev); -	tg3_full_lock(tp, 0); -  	err = tg3_set_power_state(tp, PCI_D0); -	if (err) { -		tg3_full_unlock(tp); +	if (err)  		return err; -	} + +	tg3_full_lock(tp, 0);  	tg3_disable_ints(tp);  	tp->tg3_flags &= ~TG3_FLAG_INIT_COMPLETE; diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig index 91fc2c765d9..4c7ff61a1a9 100644 --- a/drivers/net/wireless/Kconfig +++ b/drivers/net/wireless/Kconfig @@ -649,6 +649,7 @@ config RTL8187  	  Trendnet TEW-424UB  	  ASUS P5B Deluxe  	  Toshiba Satellite Pro series of laptops +	  Asus Wireless Link  	  Thanks to Realtek for their support! diff --git a/drivers/net/wireless/ath5k/ath5k.h b/drivers/net/wireless/ath5k/ath5k.h index ba35c30d203..9102eea3c8b 100644 --- a/drivers/net/wireless/ath5k/ath5k.h +++ b/drivers/net/wireless/ath5k/ath5k.h @@ -186,11 +186,13 @@ struct ath5k_srev_name {  #define AR5K_SREV_RAD_2111	0x20  #define AR5K_SREV_RAD_5112	0x30  #define AR5K_SREV_RAD_5112A	0x35 +#define	AR5K_SREV_RAD_5112B	0x36  #define AR5K_SREV_RAD_2112	0x40  #define AR5K_SREV_RAD_2112A	0x45 -#define AR5K_SREV_RAD_SC0	0x56	/* Found on 2413/2414 */ -#define AR5K_SREV_RAD_SC1	0x63	/* Found on 5413/5414 */ -#define AR5K_SREV_RAD_SC2	0xa2	/* Found on 2424-5/5424 */ +#define	AR5K_SREV_RAD_2112B	0x46 +#define AR5K_SREV_RAD_SC0	0x50	/* Found on 2413/2414 */ +#define AR5K_SREV_RAD_SC1	0x60	/* Found on 5413/5414 */ +#define AR5K_SREV_RAD_SC2	0xa0	/* Found on 2424-5/5424 */  #define AR5K_SREV_RAD_5133	0xc0	/* MIMO found on 5418 */  /* IEEE defs */ diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c index ff3fad794b6..ebf19bc11f5 100644 --- a/drivers/net/wireless/ath5k/base.c +++ b/drivers/net/wireless/ath5k/base.c @@ -2170,6 +2170,7 @@ ath5k_beacon_config(struct ath5k_softc *sc)  	ath5k_hw_set_intr(ah, 0);  	sc->bmisscount = 0; +	sc->imask &= ~(AR5K_INT_BMISS | AR5K_INT_SWBA);  	if (sc->opmode == IEEE80211_IF_TYPE_STA) {  		sc->imask |= AR5K_INT_BMISS; diff --git a/drivers/net/wireless/ath5k/debug.c b/drivers/net/wireless/ath5k/debug.c index 41d5fa34b54..6fa6c8e04ff 100644 --- a/drivers/net/wireless/ath5k/debug.c +++ b/drivers/net/wireless/ath5k/debug.c @@ -129,7 +129,7 @@ static struct reg regs[] = {  	REG_STRUCT_INIT(AR5K_CPC1),  	REG_STRUCT_INIT(AR5K_CPC2),  	REG_STRUCT_INIT(AR5K_CPC3), -	REG_STRUCT_INIT(AR5K_CPCORN), +	REG_STRUCT_INIT(AR5K_CPCOVF),  	REG_STRUCT_INIT(AR5K_RESET_CTL),  	REG_STRUCT_INIT(AR5K_SLEEP_CTL),  	REG_STRUCT_INIT(AR5K_INTPEND), diff --git a/drivers/net/wireless/ath5k/debug.h b/drivers/net/wireless/ath5k/debug.h index 2cf8d18b10e..ffc52939330 100644 --- a/drivers/net/wireless/ath5k/debug.h +++ b/drivers/net/wireless/ath5k/debug.h @@ -63,7 +63,6 @@  struct ath5k_softc;  struct ath5k_hw; -struct ieee80211_hw_mode;  struct sk_buff;  struct ath5k_buf; diff --git a/drivers/net/wireless/ath5k/hw.c b/drivers/net/wireless/ath5k/hw.c index 7ca87a55731..ad1a5b422c8 100644 --- a/drivers/net/wireless/ath5k/hw.c +++ b/drivers/net/wireless/ath5k/hw.c @@ -139,6 +139,8 @@ static int ath5k_hw_post(struct ath5k_hw *ah)  	for (c = 0; c < 2; c++) {  		cur_reg = regs[c]; + +		/* Save previous value */  		init_val = ath5k_hw_reg_read(ah, cur_reg);  		for (i = 0; i < 256; i++) { @@ -170,6 +172,10 @@ static int ath5k_hw_post(struct ath5k_hw *ah)  			var_pattern = 0x003b080f;  			ath5k_hw_reg_write(ah, var_pattern, cur_reg);  		} + +		/* Restore previous value */ +		ath5k_hw_reg_write(ah, init_val, cur_reg); +  	}  	return 0; @@ -287,67 +293,42 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version)  	/* Identify the radio chip*/  	if (ah->ah_version == AR5K_AR5210) {  		ah->ah_radio = AR5K_RF5110; +	/* +	 * Register returns 0x0/0x04 for radio revision +	 * so ath5k_hw_radio_revision doesn't parse the value +	 * correctly. For now we are based on mac's srev to +	 * identify RF2425 radio. +	 */ +	} else if (srev == AR5K_SREV_VER_AR2425) { +		ah->ah_radio = AR5K_RF2425; +		ah->ah_phy_spending = AR5K_PHY_SPENDING_RF2425;  	} else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_5112) {  		ah->ah_radio = AR5K_RF5111;  		ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5111;  	} else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_SC0) { -  		ah->ah_radio = AR5K_RF5112; - -		if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_5112A) { -			ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112; -		} else { -			ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112A; -		} - +		ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112;  	} else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_SC1) {  		ah->ah_radio = AR5K_RF2413; -		ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112A; +		ah->ah_phy_spending = AR5K_PHY_SPENDING_RF2413;  	} else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_SC2) {  		ah->ah_radio = AR5K_RF5413; -		ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112A; +		ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5413;  	} else if (ah->ah_radio_5ghz_revision < AR5K_SREV_RAD_5133) { -  		/* AR5424 */  		if (srev >= AR5K_SREV_VER_AR5424) {  			ah->ah_radio = AR5K_RF5413; -			ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5424; +			ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5413;  		/* AR2424 */  		} else {  			ah->ah_radio = AR5K_RF2413; /* For testing */ -			ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112A; +			ah->ah_phy_spending = AR5K_PHY_SPENDING_RF2413;  		} - -	/* -	 * Register returns 0x4 for radio revision -	 * so ath5k_hw_radio_revision doesn't parse the value -	 * correctly. For now we are based on mac's srev to -	 * identify RF2425 radio. -	 */ -	} else if (srev == AR5K_SREV_VER_AR2425) { -		ah->ah_radio = AR5K_RF2425; -		ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112;  	} -  	ah->ah_phy = AR5K_PHY(0);  	/* -	 * Identify AR5212-based PCI-E cards -	 * And write some initial settings. -	 * -	 * (doing a "strings" on ndis driver -	 * -ar5211.sys- reveals the following -	 * pci-e related functions: -	 * -	 * pcieClockReq -	 * pcieRxErrNotify -	 * pcieL1SKPEnable -	 * pcieAspm -	 * pcieDisableAspmOnRfWake -	 * pciePowerSaveEnable -	 * -	 * I guess these point to ClockReq but -	 * i'm not sure.) +	 * Write PCI-E power save settings  	 */  	if ((ah->ah_version == AR5K_AR5212) && (pdev->is_pcie)) {  		ath5k_hw_reg_write(ah, 0x9248fc00, 0x4080); @@ -369,10 +350,15 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version)  	if (ret)  		goto err_free; +	/* Write AR5K_PCICFG_UNK on 2112B and later chips */ +	if (ah->ah_radio_5ghz_revision > AR5K_SREV_RAD_2112B || +	srev > AR5K_SREV_VER_AR2413) { +		ath5k_hw_reg_write(ah, AR5K_PCICFG_UNK, AR5K_PCICFG); +	} +  	/*  	 * Get card capabilities, values, ...  	 */ -  	ret = ath5k_eeprom_init(ah);  	if (ret) {  		ATH5K_ERR(sc, "unable to init EEPROM\n"); @@ -843,27 +829,41 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,  		 * Write some more initial register settings  		 */  		if (ah->ah_version == AR5K_AR5212) { -			ath5k_hw_reg_write(ah, 0x0002a002, AR5K_PHY(11)); +			ath5k_hw_reg_write(ah, 0x0002a002, 0x982c);  			if (channel->hw_value == CHANNEL_G)  				if (ah->ah_mac_srev < AR5K_SREV_VER_AR2413)  					ath5k_hw_reg_write(ah, 0x00f80d80, -						AR5K_PHY(83)); +								0x994c);  				else if (ah->ah_mac_srev < AR5K_SREV_VER_AR2424)  					ath5k_hw_reg_write(ah, 0x00380140, -						AR5K_PHY(83)); +								0x994c);  				else if (ah->ah_mac_srev < AR5K_SREV_VER_AR2425)  					ath5k_hw_reg_write(ah, 0x00fc0ec0, -						AR5K_PHY(83)); +								0x994c);  				else /* 2425 */  					ath5k_hw_reg_write(ah, 0x00fc0fc0, -						AR5K_PHY(83)); +								0x994c);  			else -				ath5k_hw_reg_write(ah, 0x00000000, -					AR5K_PHY(83)); +				ath5k_hw_reg_write(ah, 0x00000000, 0x994c); + +			/* Some bits are disabled here, we know nothing about +			 * register 0xa228 yet, most of the times this ends up +			 * with a value 0x9b5 -haven't seen any dump with +			 * a different value- */ +			/* Got this from decompiling binary HAL */ +			data = ath5k_hw_reg_read(ah, 0xa228); +			data &= 0xfffffdff; +			ath5k_hw_reg_write(ah, data, 0xa228); + +			data = ath5k_hw_reg_read(ah, 0xa228); +			data &= 0xfffe03ff; +			ath5k_hw_reg_write(ah, data, 0xa228); +			data = 0; -			ath5k_hw_reg_write(ah, 0x000009b5, 0xa228); -			ath5k_hw_reg_write(ah, 0x0000000f, 0x8060); +			/* Just write 0x9b5 ? */ +			/* ath5k_hw_reg_write(ah, 0x000009b5, 0xa228); */ +			ath5k_hw_reg_write(ah, 0x0000000f, AR5K_SEQ_MASK);  			ath5k_hw_reg_write(ah, 0x00000000, 0xa254);  			ath5k_hw_reg_write(ah, 0x0000000e, AR5K_PHY_SCAL);  		} @@ -879,6 +879,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,  			else  				data = 0xffb80d20;  			ath5k_hw_reg_write(ah, data, AR5K_PHY_FRAME_CTL); +			data = 0;  		}  		/* @@ -898,7 +899,6 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,  		/*  		 * Write RF registers -		 * TODO:Does this work on 5211 (5111) ?  		 */  		ret = ath5k_hw_rfregs(ah, channel, mode);  		if (ret) @@ -935,7 +935,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,  			return ret;  		/* Set antenna mode */ -		AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x44), +		AR5K_REG_MASKED_BITS(ah, AR5K_PHY_ANT_CTL,  			ah->ah_antenna[ee_mode][0], 0xfffffc06);  		/* @@ -965,15 +965,15 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,  		ath5k_hw_reg_write(ah,  			AR5K_PHY_NF_SVAL(ee->ee_noise_floor_thr[ee_mode]), -			AR5K_PHY(0x5a)); +			AR5K_PHY_NFTHRES); -		AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x11), +		AR5K_REG_MASKED_BITS(ah, AR5K_PHY_SETTLING,  			(ee->ee_switch_settling[ee_mode] << 7) & 0x3f80,  			0xffffc07f); -		AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x12), +		AR5K_REG_MASKED_BITS(ah, AR5K_PHY_GAIN,  			(ee->ee_ant_tx_rx[ee_mode] << 12) & 0x3f000,  			0xfffc0fff); -		AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x14), +		AR5K_REG_MASKED_BITS(ah, AR5K_PHY_DESIRED_SIZE,  			(ee->ee_adc_desired_size[ee_mode] & 0x00ff) |  			((ee->ee_pga_desired_size[ee_mode] << 8) & 0xff00),  			0xffff0000); @@ -982,13 +982,13 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,  			(ee->ee_tx_end2xpa_disable[ee_mode] << 24) |  			(ee->ee_tx_end2xpa_disable[ee_mode] << 16) |  			(ee->ee_tx_frm2xpa_enable[ee_mode] << 8) | -			(ee->ee_tx_frm2xpa_enable[ee_mode]), AR5K_PHY(0x0d)); +			(ee->ee_tx_frm2xpa_enable[ee_mode]), AR5K_PHY_RF_CTL4); -		AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x0a), +		AR5K_REG_MASKED_BITS(ah, AR5K_PHY_RF_CTL3,  			ee->ee_tx_end2xlna_enable[ee_mode] << 8, 0xffff00ff); -		AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x19), +		AR5K_REG_MASKED_BITS(ah, AR5K_PHY_NF,  			(ee->ee_thr_62[ee_mode] << 12) & 0x7f000, 0xfff80fff); -		AR5K_REG_MASKED_BITS(ah, AR5K_PHY(0x49), 4, 0xffffff01); +		AR5K_REG_MASKED_BITS(ah, AR5K_PHY_OFDM_SELFCORR, 4, 0xffffff01);  		AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ,  		    AR5K_PHY_IQ_CORR_ENABLE | @@ -1063,7 +1063,8 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,  	ath5k_hw_reg_write(ah, AR5K_PHY_ACT_ENABLE, AR5K_PHY_ACT);  	/* -	 * 5111/5112 Specific +	 * On 5211+ read activation -> rx delay +	 * and use it.  	 */  	if (ah->ah_version != AR5K_AR5210) {  		data = ath5k_hw_reg_read(ah, AR5K_PHY_RX_DELAY) & @@ -1071,40 +1072,77 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,  		data = (channel->hw_value & CHANNEL_CCK) ?  			((data << 2) / 22) : (data / 10); -		udelay(100 + data); +		udelay(100 + (2 * data)); +		data = 0;  	} else {  		mdelay(1);  	}  	/* -	 * Enable calibration and wait until completion +	 * Perform ADC test (?) +	 */ +	data = ath5k_hw_reg_read(ah, AR5K_PHY_TST1); +	ath5k_hw_reg_write(ah, AR5K_PHY_TST1_TXHOLD, AR5K_PHY_TST1); +	for (i = 0; i <= 20; i++) { +		if (!(ath5k_hw_reg_read(ah, AR5K_PHY_ADC_TEST) & 0x10)) +			break; +		udelay(200); +	} +	ath5k_hw_reg_write(ah, data, AR5K_PHY_TST1); +	data = 0; + +	/* +	 * Start automatic gain calibration +	 * +	 * During AGC calibration RX path is re-routed to +	 * a signal detector so we don't receive anything. +	 * +	 * This method is used to calibrate some static offsets +	 * used together with on-the fly I/Q calibration (the +	 * one performed via ath5k_hw_phy_calibrate), that doesn't +	 * interrupt rx path. +	 * +	 * If we are in a noisy environment AGC calibration may time +	 * out.  	 */  	AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL,  				AR5K_PHY_AGCCTL_CAL); +	/* At the same time start I/Q calibration for QAM constellation +	 * -no need for CCK- */ +	ah->ah_calibration = false; +	if (!(mode == AR5K_MODE_11B)) { +		ah->ah_calibration = true; +		AR5K_REG_WRITE_BITS(ah, AR5K_PHY_IQ, +				AR5K_PHY_IQ_CAL_NUM_LOG_MAX, 15); +		AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, +				AR5K_PHY_IQ_RUN); +	} + +	/* Wait for gain calibration to finish (we check for I/Q calibration +	 * during ath5k_phy_calibrate) */  	if (ath5k_hw_register_timeout(ah, AR5K_PHY_AGCCTL,  			AR5K_PHY_AGCCTL_CAL, 0, false)) { -		ATH5K_ERR(ah->ah_sc, "calibration timeout (%uMHz)\n", +		ATH5K_ERR(ah->ah_sc, "gain calibration timeout (%uMHz)\n",  			channel->center_freq);  		return -EAGAIN;  	} +	/* +	 * Start noise floor calibration +	 * +	 * If we run NF calibration before AGC, it always times out. +	 * Binary HAL starts NF and AGC calibration at the same time +	 * and only waits for AGC to finish. I believe that's wrong because +	 * during NF calibration, rx path is also routed to a detector, so if +	 * it doesn't finish we won't have RX. +	 * +	 * XXX: Find an interval that's OK for all cards... +	 */  	ret = ath5k_hw_noise_floor_calibration(ah, channel->center_freq);  	if (ret)  		return ret; -	ah->ah_calibration = false; - -	/* A and G modes can use QAM modulation which requires enabling -	 * I and Q calibration. Don't bother in B mode. */ -	if (!(mode == AR5K_MODE_11B)) { -		ah->ah_calibration = true; -		AR5K_REG_WRITE_BITS(ah, AR5K_PHY_IQ, -				AR5K_PHY_IQ_CAL_NUM_LOG_MAX, 15); -		AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, -				AR5K_PHY_IQ_RUN); -	} -  	/*  	 * Reset queues and start beacon timers at the end of the reset routine  	 */ @@ -1154,6 +1192,12 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum ieee80211_if_types op_mode,  		ath5k_hw_reg_write(ah, AR5K_PHY_SCLOCK_32MHZ, AR5K_PHY_SCLOCK);  		ath5k_hw_reg_write(ah, AR5K_PHY_SDELAY_32MHZ, AR5K_PHY_SDELAY);  		ath5k_hw_reg_write(ah, ah->ah_phy_spending, AR5K_PHY_SPENDING); + +		data = ath5k_hw_reg_read(ah, AR5K_USEC_5211) & 0xffffc07f ; +		data |= (ah->ah_phy_spending == AR5K_PHY_SPENDING_18) ? +						0x00000f80 : 0x00001380 ; +		ath5k_hw_reg_write(ah, data, AR5K_USEC_5211); +		data = 0;  	}  	if (ah->ah_version == AR5K_AR5212) { @@ -1226,7 +1270,7 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode,  		bool set_chip, u16 sleep_duration)  {  	unsigned int i; -	u32 staid; +	u32 staid, data;  	ATH5K_TRACE(ah->ah_sc);  	staid = ath5k_hw_reg_read(ah, AR5K_STA_ID1); @@ -1238,7 +1282,8 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode,  	case AR5K_PM_NETWORK_SLEEP:  		if (set_chip)  			ath5k_hw_reg_write(ah, -				AR5K_SLEEP_CTL_SLE | sleep_duration, +				AR5K_SLEEP_CTL_SLE_ALLOW | +				sleep_duration,  				AR5K_SLEEP_CTL);  		staid |= AR5K_STA_ID1_PWR_SV; @@ -1253,13 +1298,24 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode,  		break;  	case AR5K_PM_AWAKE: + +		staid &= ~AR5K_STA_ID1_PWR_SV; +  		if (!set_chip)  			goto commit; -		ath5k_hw_reg_write(ah, AR5K_SLEEP_CTL_SLE_WAKE, -				AR5K_SLEEP_CTL); +		/* Preserve sleep duration */ +		data = ath5k_hw_reg_read(ah, AR5K_SLEEP_CTL); +		if( data & 0xffc00000 ){ +			data = 0; +		} else { +			data = data & 0xfffcffff; +		} + +		ath5k_hw_reg_write(ah, data, AR5K_SLEEP_CTL); +		udelay(15); -		for (i = 5000; i > 0; i--) { +		for (i = 50; i > 0; i--) {  			/* Check if the chip did wake up */  			if ((ath5k_hw_reg_read(ah, AR5K_PCICFG) &  					AR5K_PCICFG_SPWR_DN) == 0) @@ -1267,15 +1323,13 @@ int ath5k_hw_set_power(struct ath5k_hw *ah, enum ath5k_power_mode mode,  			/* Wait a bit and retry */  			udelay(200); -			ath5k_hw_reg_write(ah, AR5K_SLEEP_CTL_SLE_WAKE, -				AR5K_SLEEP_CTL); +			ath5k_hw_reg_write(ah, data, AR5K_SLEEP_CTL);  		}  		/* Fail if the chip didn't wake up */  		if (i <= 0)  			return -EIO; -		staid &= ~AR5K_STA_ID1_PWR_SV;  		break;  	default: @@ -1304,6 +1358,7 @@ void ath5k_hw_start_rx(struct ath5k_hw *ah)  {  	ATH5K_TRACE(ah->ah_sc);  	ath5k_hw_reg_write(ah, AR5K_CR_RXE, AR5K_CR); +	ath5k_hw_reg_read(ah, AR5K_CR);  }  /* @@ -1390,6 +1445,7 @@ int ath5k_hw_tx_start(struct ath5k_hw *ah, unsigned int queue)  		}  		/* Start queue */  		ath5k_hw_reg_write(ah, tx_queue, AR5K_CR); +		ath5k_hw_reg_read(ah, AR5K_CR);  	} else {  		/* Return if queue is disabled */  		if (AR5K_REG_READ_Q(ah, AR5K_QCU_TXD, queue)) @@ -1687,6 +1743,7 @@ enum ath5k_int ath5k_hw_set_intr(struct ath5k_hw *ah, enum ath5k_int new_mask)  	 * (they will be re-enabled afterwards).  	 */  	ath5k_hw_reg_write(ah, AR5K_IER_DISABLE, AR5K_IER); +	ath5k_hw_reg_read(ah, AR5K_IER);  	old_mask = ah->ah_imr; @@ -3363,11 +3420,13 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)  		ath5k_hw_reg_write(ah, ah->ah_turbo ?  			AR5K_INIT_PROTO_TIME_CNTRL_TURBO :  			AR5K_INIT_PROTO_TIME_CNTRL, AR5K_IFS1); -		/* Set PHY register 0x9844 (??) */ +		/* Set AR5K_PHY_SETTLING */  		ath5k_hw_reg_write(ah, ah->ah_turbo ? -			(ath5k_hw_reg_read(ah, AR5K_PHY(17)) & ~0x7F) | 0x38 : -			(ath5k_hw_reg_read(ah, AR5K_PHY(17)) & ~0x7F) | 0x1C, -			AR5K_PHY(17)); +			(ath5k_hw_reg_read(ah, AR5K_PHY_SETTLING) & ~0x7F) +			| 0x38 : +			(ath5k_hw_reg_read(ah, AR5K_PHY_SETTLING) & ~0x7F) +			| 0x1C, +			AR5K_PHY_SETTLING);  		/* Set Frame Control Register */  		ath5k_hw_reg_write(ah, ah->ah_turbo ?  			(AR5K_PHY_FRAME_CTL_INI | AR5K_PHY_TURBO_MODE | @@ -3488,7 +3547,7 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)  			if (tq->tqi_flags & AR5K_TXQ_FLAG_RDYTIME_EXP_POLICY_ENABLE)  				AR5K_REG_ENABLE_BITS(ah,  					AR5K_QUEUE_MISC(queue), -					AR5K_QCU_MISC_TXE); +					AR5K_QCU_MISC_RDY_VEOL_POLICY);  		}  		if (tq->tqi_flags & AR5K_TXQ_FLAG_BACKOFF_DISABLE) diff --git a/drivers/net/wireless/ath5k/initvals.c b/drivers/net/wireless/ath5k/initvals.c index 04c84e9da89..2806b21bf90 100644 --- a/drivers/net/wireless/ath5k/initvals.c +++ b/drivers/net/wireless/ath5k/initvals.c @@ -489,7 +489,7 @@ static const struct ath5k_ini ar5212_ini[] = {  	{ AR5K_QUEUE_TXDP(9),	0x00000000 },  	{ AR5K_DCU_FP,		0x00000000 },  	{ AR5K_DCU_TXP,		0x00000000 }, -	{ AR5K_DCU_TX_FILTER,	0x00000000 }, +	{ AR5K_DCU_TX_FILTER_0_BASE,	0x00000000 },  	/* Unknown table */  	{ 0x1078, 0x00000000 },  	{ 0x10b8, 0x00000000 }, @@ -679,7 +679,7 @@ static const struct ath5k_ini ar5212_ini[] = {  	{ AR5K_PHY(645), 0x00106c10 },  	{ AR5K_PHY(646), 0x009c4060 },  	{ AR5K_PHY(647), 0x1483800a }, -	/* { AR5K_PHY(648), 0x018830c6 },*/ /* 2413 */ +	/* { AR5K_PHY(648), 0x018830c6 },*/ /* 2413/2425 */  	{ AR5K_PHY(648), 0x01831061 },  	{ AR5K_PHY(649), 0x00000400 },  	/*{ AR5K_PHY(650), 0x000001b5 },*/ diff --git a/drivers/net/wireless/ath5k/phy.c b/drivers/net/wireless/ath5k/phy.c index afd8689e5c0..fa0d47faf57 100644 --- a/drivers/net/wireless/ath5k/phy.c +++ b/drivers/net/wireless/ath5k/phy.c @@ -1020,6 +1020,74 @@ static const struct ath5k_ini_rfgain rfgain_2413[] = {  	{ AR5K_RF_GAIN(63), { 0x000000f9 } },  }; +/* Initial RF Gain settings for RF2425 */ +static const struct ath5k_ini_rfgain rfgain_2425[] = { +	{ AR5K_RF_GAIN(0), { 0x00000000 } }, +	{ AR5K_RF_GAIN(1), { 0x00000040 } }, +	{ AR5K_RF_GAIN(2), { 0x00000080 } }, +	{ AR5K_RF_GAIN(3), { 0x00000181 } }, +	{ AR5K_RF_GAIN(4), { 0x000001c1 } }, +	{ AR5K_RF_GAIN(5), { 0x00000001 } }, +	{ AR5K_RF_GAIN(6), { 0x00000041 } }, +	{ AR5K_RF_GAIN(7), { 0x00000081 } }, +	{ AR5K_RF_GAIN(8), { 0x00000188 } }, +	{ AR5K_RF_GAIN(9), { 0x000001c8 } }, +	{ AR5K_RF_GAIN(10), { 0x00000008 } }, +	{ AR5K_RF_GAIN(11), { 0x00000048 } }, +	{ AR5K_RF_GAIN(12), { 0x00000088 } }, +	{ AR5K_RF_GAIN(13), { 0x00000189 } }, +	{ AR5K_RF_GAIN(14), { 0x000001c9 } }, +	{ AR5K_RF_GAIN(15), { 0x00000009 } }, +	{ AR5K_RF_GAIN(16), { 0x00000049 } }, +	{ AR5K_RF_GAIN(17), { 0x00000089 } }, +	{ AR5K_RF_GAIN(18), { 0x000001b0 } }, +	{ AR5K_RF_GAIN(19), { 0x000001f0 } }, +	{ AR5K_RF_GAIN(20), { 0x00000030 } }, +	{ AR5K_RF_GAIN(21), { 0x00000070 } }, +	{ AR5K_RF_GAIN(22), { 0x00000171 } }, +	{ AR5K_RF_GAIN(23), { 0x000001b1 } }, +	{ AR5K_RF_GAIN(24), { 0x000001f1 } }, +	{ AR5K_RF_GAIN(25), { 0x00000031 } }, +	{ AR5K_RF_GAIN(26), { 0x00000071 } }, +	{ AR5K_RF_GAIN(27), { 0x000001b8 } }, +	{ AR5K_RF_GAIN(28), { 0x000001f8 } }, +	{ AR5K_RF_GAIN(29), { 0x00000038 } }, +	{ AR5K_RF_GAIN(30), { 0x00000078 } }, +	{ AR5K_RF_GAIN(31), { 0x000000b8 } }, +	{ AR5K_RF_GAIN(32), { 0x000001b9 } }, +	{ AR5K_RF_GAIN(33), { 0x000001f9 } }, +	{ AR5K_RF_GAIN(34), { 0x00000039 } }, +	{ AR5K_RF_GAIN(35), { 0x00000079 } }, +	{ AR5K_RF_GAIN(36), { 0x000000b9 } }, +	{ AR5K_RF_GAIN(37), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(38), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(39), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(40), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(41), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(42), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(43), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(44), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(45), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(46), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(47), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(48), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(49), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(50), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(51), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(52), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(53), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(54), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(55), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(56), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(57), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(58), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(59), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(60), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(61), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(62), { 0x000000f9 } }, +	{ AR5K_RF_GAIN(63), { 0x000000f9 } }, +}; +  static const struct ath5k_gain_opt rfgain_opt_5112 = {  	1,  	8, @@ -1588,8 +1656,8 @@ int ath5k_hw_rfgain(struct ath5k_hw *ah, unsigned int freq)  		freq = 0; /* only 2Ghz */  		break;  	case AR5K_RF2425: -		ath5k_rfg = rfgain_2413; -		size = ARRAY_SIZE(rfgain_2413); +		ath5k_rfg = rfgain_2425; +		size = ARRAY_SIZE(rfgain_2425);  		freq = 0; /* only 2Ghz */  		break;  	default: @@ -1830,9 +1898,6 @@ static int ath5k_hw_rf5112_channel(struct ath5k_hw *ah,  	data = data0 = data1 = data2 = 0;  	c = channel->center_freq; -	/* -	 * Set the channel on the RF5112 or newer -	 */  	if (c < 4800) {  		if (!((c - 2224) % 5)) {  			data0 = ((2 * (c - 704)) - 3040) / 10; @@ -1844,7 +1909,7 @@ static int ath5k_hw_rf5112_channel(struct ath5k_hw *ah,  			return -EINVAL;  		data0 = ath5k_hw_bitswap((data0 << 2) & 0xff, 8); -	} else { +	} else if ((c - (c % 5)) != 2 || c > 5435) {  		if (!(c % 20) && c >= 5120) {  			data0 = ath5k_hw_bitswap(((c - 4800) / 20 << 2), 8);  			data2 = ath5k_hw_bitswap(3, 2); @@ -1856,6 +1921,9 @@ static int ath5k_hw_rf5112_channel(struct ath5k_hw *ah,  			data2 = ath5k_hw_bitswap(1, 2);  		} else  			return -EINVAL; +	} else { +		data0 = ath5k_hw_bitswap((10 * (c - 2) - 4800) / 25 + 1, 8); +		data2 = ath5k_hw_bitswap(0, 2);  	}  	data = (data0 << 4) | (data1 << 1) | (data2 << 2) | 0x1001; @@ -1867,6 +1935,45 @@ static int ath5k_hw_rf5112_channel(struct ath5k_hw *ah,  }  /* + * Set the channel on the RF2425 + */ +static int ath5k_hw_rf2425_channel(struct ath5k_hw *ah, +		struct ieee80211_channel *channel) +{ +	u32 data, data0, data2; +	u16 c; + +	data = data0 = data2 = 0; +	c = channel->center_freq; + +	if (c < 4800) { +		data0 = ath5k_hw_bitswap((c - 2272), 8); +		data2 = 0; +	/* ? 5GHz ? */ +	} else if ((c - (c % 5)) != 2 || c > 5435) { +		if (!(c % 20) && c < 5120) +			data0 = ath5k_hw_bitswap(((c - 4800) / 20 << 2), 8); +		else if (!(c % 10)) +			data0 = ath5k_hw_bitswap(((c - 4800) / 10 << 1), 8); +		else if (!(c % 5)) +			data0 = ath5k_hw_bitswap((c - 4800) / 5, 8); +		else +			return -EINVAL; +		data2 = ath5k_hw_bitswap(1, 2); +	} else { +		data0 = ath5k_hw_bitswap((10 * (c - 2) - 4800) / 25 + 1, 8); +		data2 = ath5k_hw_bitswap(0, 2); +	} + +	data = (data0 << 4) | data2 << 2 | 0x1001; + +	ath5k_hw_reg_write(ah, data & 0xff, AR5K_RF_BUFFER); +	ath5k_hw_reg_write(ah, (data >> 8) & 0x7f, AR5K_RF_BUFFER_CONTROL_5); + +	return 0; +} + +/*   * Set a channel on the radio chip   */  int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel) @@ -1895,6 +2002,9 @@ int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel)  	case AR5K_RF5111:  		ret = ath5k_hw_rf5111_channel(ah, channel);  		break; +	case AR5K_RF2425: +		ret = ath5k_hw_rf2425_channel(ah, channel); +		break;  	default:  		ret = ath5k_hw_rf5112_channel(ah, channel);  		break; @@ -1903,6 +2013,15 @@ int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel)  	if (ret)  		return ret; +	/* Set JAPAN setting for channel 14 */ +	if (channel->center_freq == 2484) { +		AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_CCKTXCTL, +				AR5K_PHY_CCKTXCTL_JAPAN); +	} else { +		AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_CCKTXCTL, +				AR5K_PHY_CCKTXCTL_WORLD); +	} +  	ah->ah_current_channel.center_freq = channel->center_freq;  	ah->ah_current_channel.hw_value = channel->hw_value;  	ah->ah_turbo = channel->hw_value == CHANNEL_T ? true : false; @@ -1933,6 +2052,8 @@ int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel)   * http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL \   * &p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=7245893.PN.&OS=PN/7   * + * XXX: Since during noise floor calibration antennas are detached according to + * the patent, we should stop tx queues here.   */  int  ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq) @@ -1942,7 +2063,7 @@ ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq)  	s32 noise_floor;  	/* -	 * Enable noise floor calibration and wait until completion +	 * Enable noise floor calibration  	 */  	AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_AGCCTL,  				AR5K_PHY_AGCCTL_NF); @@ -1952,7 +2073,7 @@ ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq)  	if (ret) {  		ATH5K_ERR(ah->ah_sc,  			"noise floor calibration timeout (%uMHz)\n", freq); -		return ret; +		return -EAGAIN;  	}  	/* Wait until the noise floor is calibrated and read the value */ @@ -1974,7 +2095,7 @@ ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq)  	if (noise_floor > AR5K_TUNE_NOISE_FLOOR) {  		ATH5K_ERR(ah->ah_sc,  			"noise floor calibration failed (%uMHz)\n", freq); -		return -EIO; +		return -EAGAIN;  	}  	ah->ah_noise_floor = noise_floor; @@ -2087,38 +2208,66 @@ static int ath5k_hw_rf5110_calibrate(struct ath5k_hw *ah,  }  /* - * Perform a PHY calibration on RF5111/5112 + * Perform a PHY calibration on RF5111/5112 and newer chips   */  static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,  		struct ieee80211_channel *channel)  {  	u32 i_pwr, q_pwr;  	s32 iq_corr, i_coff, i_coffd, q_coff, q_coffd; +	int i;  	ATH5K_TRACE(ah->ah_sc);  	if (!ah->ah_calibration || -			ath5k_hw_reg_read(ah, AR5K_PHY_IQ) & AR5K_PHY_IQ_RUN) +		ath5k_hw_reg_read(ah, AR5K_PHY_IQ) & AR5K_PHY_IQ_RUN)  		goto done; -	ah->ah_calibration = false; +	/* Calibration has finished, get the results and re-run */ +	for (i = 0; i <= 10; i++) { +		iq_corr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_CORR); +		i_pwr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_PWR_I); +		q_pwr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_PWR_Q); +	} -	iq_corr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_CORR); -	i_pwr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_PWR_I); -	q_pwr = ath5k_hw_reg_read(ah, AR5K_PHY_IQRES_CAL_PWR_Q);  	i_coffd = ((i_pwr >> 1) + (q_pwr >> 1)) >> 7; -	q_coffd = q_pwr >> 6; +	q_coffd = q_pwr >> 7; +	/* No correction */  	if (i_coffd == 0 || q_coffd == 0)  		goto done;  	i_coff = ((-iq_corr) / i_coffd) & 0x3f; -	q_coff = (((s32)i_pwr / q_coffd) - 64) & 0x1f; -	/* Commit new IQ value */ +	/* Boundary check */ +	if (i_coff > 31) +		i_coff = 31; +	if (i_coff < -32) +		i_coff = -32; + +	q_coff = (((s32)i_pwr / q_coffd) - 128) & 0x1f; + +	/* Boundary check */ +	if (q_coff > 15) +		q_coff = 15; +	if (q_coff < -16) +		q_coff = -16; + +	/* Commit new I/Q value */  	AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, AR5K_PHY_IQ_CORR_ENABLE |  		((u32)q_coff) | ((u32)i_coff << AR5K_PHY_IQ_CORR_Q_I_COFF_S)); +	/* Re-enable calibration -if we don't we'll commit +	 * the same values again and again */ +	AR5K_REG_WRITE_BITS(ah, AR5K_PHY_IQ, +			AR5K_PHY_IQ_CAL_NUM_LOG_MAX, 15); +	AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_IQ, AR5K_PHY_IQ_RUN); +  done: + +	/* TODO: Separate noise floor calibration from I/Q calibration +	 * since noise floor calibration interrupts rx path while I/Q +	 * calibration doesn't. We don't need to run noise floor calibration +	 * as often as I/Q calibration.*/  	ath5k_hw_noise_floor_calibration(ah, channel->center_freq);  	/* Request RF gain */ diff --git a/drivers/net/wireless/ath5k/reg.h b/drivers/net/wireless/ath5k/reg.h index 30629b3e37c..7562bf173d3 100644 --- a/drivers/net/wireless/ath5k/reg.h +++ b/drivers/net/wireless/ath5k/reg.h @@ -53,7 +53,7 @@  #define AR5K_CR_TXD0	0x00000008	/* TX Disable for queue 0 on 5210 */  #define AR5K_CR_TXD1	0x00000010	/* TX Disable for queue 1 on 5210 */  #define	AR5K_CR_RXD	0x00000020	/* RX Disable */ -#define	AR5K_CR_SWI	0x00000040 +#define	AR5K_CR_SWI	0x00000040	/* Software Interrupt */  /*   * RX Descriptor Pointer register @@ -65,19 +65,19 @@   */  #define	AR5K_CFG		0x0014			/* Register Address */  #define	AR5K_CFG_SWTD		0x00000001	/* Byte-swap TX descriptor (for big endian archs) */ -#define	AR5K_CFG_SWTB		0x00000002	/* Byte-swap TX buffer (?) */ +#define	AR5K_CFG_SWTB		0x00000002	/* Byte-swap TX buffer */  #define	AR5K_CFG_SWRD		0x00000004	/* Byte-swap RX descriptor */ -#define	AR5K_CFG_SWRB		0x00000008	/* Byte-swap RX buffer (?) */ -#define	AR5K_CFG_SWRG		0x00000010	/* Byte-swap Register values (?) */ -#define AR5K_CFG_ADHOC		0x00000020 	/* [5211+] */ +#define	AR5K_CFG_SWRB		0x00000008	/* Byte-swap RX buffer */ +#define	AR5K_CFG_SWRG		0x00000010	/* Byte-swap Register access */ +#define AR5K_CFG_ADHOC		0x00000020 	/* AP/Adhoc indication [5211+] */  #define AR5K_CFG_PHY_OK		0x00000100	/* [5211+] */  #define AR5K_CFG_EEBS		0x00000200	/* EEPROM is busy */ -#define	AR5K_CFG_CLKGD		0x00000400	/* Clock gated (?) */ +#define	AR5K_CFG_CLKGD		0x00000400	/* Clock gated (Disable dynamic clock) */  #define AR5K_CFG_TXCNT		0x00007800	/* Tx frame count (?) [5210] */  #define AR5K_CFG_TXCNT_S	11  #define AR5K_CFG_TXFSTAT	0x00008000	/* Tx frame status (?) [5210] */  #define AR5K_CFG_TXFSTRT	0x00010000	/* [5210] */ -#define	AR5K_CFG_PCI_THRES	0x00060000	/* [5211+] */ +#define	AR5K_CFG_PCI_THRES	0x00060000	/* PCI Master req q threshold [5211+] */  #define	AR5K_CFG_PCI_THRES_S	17  /* @@ -162,35 +162,40 @@  /*   * Transmit configuration register   */ -#define AR5K_TXCFG		0x0030			/* Register Address */ -#define AR5K_TXCFG_SDMAMR	0x00000007	/* DMA size */ -#define AR5K_TXCFG_SDMAMR_S	0 -#define AR5K_TXCFG_B_MODE	0x00000008	/* Set b mode for 5111 (enable 2111) */ -#define AR5K_TXCFG_TXFSTP	0x00000008	/* TX DMA full Stop [5210] */ -#define AR5K_TXCFG_TXFULL	0x000003f0	/* TX Triger level mask */ -#define AR5K_TXCFG_TXFULL_S	4 -#define AR5K_TXCFG_TXFULL_0B	0x00000000 -#define AR5K_TXCFG_TXFULL_64B	0x00000010 -#define AR5K_TXCFG_TXFULL_128B	0x00000020 -#define AR5K_TXCFG_TXFULL_192B	0x00000030 -#define AR5K_TXCFG_TXFULL_256B	0x00000040 -#define AR5K_TXCFG_TXCONT_EN	0x00000080 -#define AR5K_TXCFG_DMASIZE	0x00000100	/* Flag for passing DMA size [5210] */ -#define AR5K_TXCFG_JUMBO_TXE	0x00000400	/* Enable jumbo frames transmition (?) [5211+] */ -#define AR5K_TXCFG_RTSRND	0x00001000	/* [5211+] */ -#define AR5K_TXCFG_FRMPAD_DIS	0x00002000	/* [5211+] */ -#define AR5K_TXCFG_RDY_DIS	0x00004000	/* [5211+] */ +#define AR5K_TXCFG			0x0030			/* Register Address */ +#define AR5K_TXCFG_SDMAMR		0x00000007	/* DMA size (read) */ +#define AR5K_TXCFG_SDMAMR_S		0 +#define AR5K_TXCFG_B_MODE		0x00000008	/* Set b mode for 5111 (enable 2111) */ +#define AR5K_TXCFG_TXFSTP		0x00000008	/* TX DMA full Stop [5210] */ +#define AR5K_TXCFG_TXFULL		0x000003f0	/* TX Triger level mask */ +#define AR5K_TXCFG_TXFULL_S		4 +#define AR5K_TXCFG_TXFULL_0B		0x00000000 +#define AR5K_TXCFG_TXFULL_64B		0x00000010 +#define AR5K_TXCFG_TXFULL_128B		0x00000020 +#define AR5K_TXCFG_TXFULL_192B		0x00000030 +#define AR5K_TXCFG_TXFULL_256B		0x00000040 +#define AR5K_TXCFG_TXCONT_EN		0x00000080 +#define AR5K_TXCFG_DMASIZE		0x00000100	/* Flag for passing DMA size [5210] */ +#define AR5K_TXCFG_JUMBO_DESC_EN	0x00000400	/* Enable jumbo tx descriptors [5211+] */ +#define AR5K_TXCFG_ADHOC_BCN_ATIM	0x00000800	/* Adhoc Beacon ATIM Policy */ +#define AR5K_TXCFG_ATIM_WINDOW_DEF_DIS	0x00001000	/* Disable ATIM window defer [5211+] */ +#define AR5K_TXCFG_RTSRND		0x00001000	/* [5211+] */ +#define AR5K_TXCFG_FRMPAD_DIS		0x00002000	/* [5211+] */ +#define AR5K_TXCFG_RDY_CBR_DIS		0x00004000	/* Ready time CBR disable [5211+] */ +#define AR5K_TXCFG_JUMBO_FRM_MODE	0x00008000	/* Jumbo frame mode [5211+] */ +#define AR5K_TXCFG_DCU_CACHING_DIS	0x00010000	/* Disable DCU caching */  /*   * Receive configuration register   */  #define AR5K_RXCFG		0x0034			/* Register Address */ -#define AR5K_RXCFG_SDMAMW	0x00000007	/* DMA size */ +#define AR5K_RXCFG_SDMAMW	0x00000007	/* DMA size (write) */  #define AR5K_RXCFG_SDMAMW_S	0 -#define	AR5K_RXCFG_DEF_ANTENNA	0x00000008	/* Default antenna */ -#define AR5K_RXCFG_ZLFDMA	0x00000010	/* Zero-length DMA */ -#define AR5K_RXCFG_JUMBO_RXE	0x00000020	/* Enable jumbo frames reception (?) [5211+] */ -#define AR5K_RXCFG_JUMBO_WRAP	0x00000040	/* Wrap jumbo frames (?) [5211+] */ +#define AR5K_RXCFG_ZLFDMA	0x00000008	/* Enable Zero-length frame DMA */ +#define	AR5K_RXCFG_DEF_ANTENNA	0x00000010	/* Default antenna (?) */ +#define AR5K_RXCFG_JUMBO_RXE	0x00000020	/* Enable jumbo rx descriptors [5211+] */ +#define AR5K_RXCFG_JUMBO_WRAP	0x00000040	/* Wrap jumbo frames [5211+] */ +#define AR5K_RXCFG_SLE_ENTRY	0x00000080	/* Sleep entry policy */  /*   * Receive jumbo descriptor last address register @@ -202,35 +207,35 @@   * MIB control register   */  #define AR5K_MIBC		0x0040			/* Register Address */ -#define AR5K_MIBC_COW		0x00000001 -#define AR5K_MIBC_FMC		0x00000002	/* Freeze Mib Counters (?) */ -#define AR5K_MIBC_CMC		0x00000004	/* Clean Mib Counters (?) */ -#define AR5K_MIBC_MCS		0x00000008 +#define AR5K_MIBC_COW		0x00000001	/* Warn test indicator */ +#define AR5K_MIBC_FMC		0x00000002	/* Freeze MIB Counters  */ +#define AR5K_MIBC_CMC		0x00000004	/* Clean MIB Counters  */ +#define AR5K_MIBC_MCS		0x00000008	/* MIB counter strobe */  /*   * Timeout prescale register   */  #define AR5K_TOPS		0x0044 -#define	AR5K_TOPS_M		0x0000ffff	/* [5211+] (?) */ +#define	AR5K_TOPS_M		0x0000ffff  /*   * Receive timeout register (no frame received)   */  #define AR5K_RXNOFRM		0x0048 -#define	AR5K_RXNOFRM_M		0x000003ff	/* [5211+] (?) */ +#define	AR5K_RXNOFRM_M		0x000003ff  /*   * Transmit timeout register (no frame sent)   */  #define AR5K_TXNOFRM		0x004c -#define	AR5K_TXNOFRM_M		0x000003ff	/* [5211+] (?) */ -#define	AR5K_TXNOFRM_QCU	0x000ffc00	/* [5211+] (?) */ +#define	AR5K_TXNOFRM_M		0x000003ff +#define	AR5K_TXNOFRM_QCU	0x000ffc00  /*   * Receive frame gap timeout register   */  #define AR5K_RPGTO		0x0050 -#define AR5K_RPGTO_M		0x000003ff	/* [5211+] (?) */ +#define AR5K_RPGTO_M		0x000003ff  /*   * Receive frame count limit register @@ -241,6 +246,7 @@  /*   * Misc settings register + * (reserved0-3)   */  #define AR5K_MISC		0x0058			/* Register Address */  #define	AR5K_MISC_DMA_OBS_M	0x000001e0 @@ -256,6 +262,7 @@  /*   * QCU/DCU clock gating register (5311) + * (reserved4-5)   */  #define	AR5K_QCUDCU_CLKGT	0x005c			/* Register Address (?) */  #define	AR5K_QCUDCU_CLKGT_QCU	0x0000ffff	/* Mask for QCU clock */ @@ -284,18 +291,18 @@  #define AR5K_ISR_TXEOL		0x00000400	/* Empty TX descriptor */  #define AR5K_ISR_TXURN		0x00000800	/* Transmit FIFO underrun */  #define AR5K_ISR_MIB		0x00001000	/* Update MIB counters */ -#define AR5K_ISR_SWI		0x00002000	/* Software interrupt (?) */ +#define AR5K_ISR_SWI		0x00002000	/* Software interrupt */  #define AR5K_ISR_RXPHY		0x00004000	/* PHY error */ -#define AR5K_ISR_RXKCM		0x00008000 +#define AR5K_ISR_RXKCM		0x00008000	/* RX Key cache miss */  #define AR5K_ISR_SWBA		0x00010000	/* Software beacon alert */  #define AR5K_ISR_BRSSI		0x00020000  #define AR5K_ISR_BMISS		0x00040000	/* Beacon missed */  #define AR5K_ISR_HIUERR		0x00080000	/* Host Interface Unit error [5211+] */  #define AR5K_ISR_BNR		0x00100000 	/* Beacon not ready [5211+] */ -#define AR5K_ISR_MCABT		0x00100000	/* [5210] */ -#define AR5K_ISR_RXCHIRP	0x00200000	/* [5212+] */ -#define AR5K_ISR_SSERR		0x00200000	/* [5210] */ -#define AR5K_ISR_DPERR		0x00400000	/* [5210] */ +#define AR5K_ISR_MCABT		0x00100000	/* Master Cycle Abort [5210] */ +#define AR5K_ISR_RXCHIRP	0x00200000	/* CHIRP Received [5212+] */ +#define AR5K_ISR_SSERR		0x00200000	/* Signaled System Error [5210] */ +#define AR5K_ISR_DPERR		0x00400000	/* Det par Error (?) [5210] */  #define AR5K_ISR_TIM		0x00800000	/* [5210] */  #define AR5K_ISR_BCNMISC	0x00800000	/* [5212+] */  #define AR5K_ISR_GPIO		0x01000000	/* GPIO (rf kill)*/ @@ -320,14 +327,14 @@  #define AR5K_SISR2		0x008c			/* Register Address [5211+] */  #define AR5K_SISR2_QCU_TXURN	0x000003ff	/* Mask for QCU_TXURN */ -#define	AR5K_SISR2_MCABT	0x00100000 -#define	AR5K_SISR2_SSERR	0x00200000 -#define	AR5K_SISR2_DPERR	0x00400000 +#define	AR5K_SISR2_MCABT	0x00100000	/* Master Cycle Abort */ +#define	AR5K_SISR2_SSERR	0x00200000	/* Signaled System Error */ +#define	AR5K_SISR2_DPERR	0x00400000	/* Det par Error (?) */  #define	AR5K_SISR2_TIM		0x01000000	/* [5212+] */  #define	AR5K_SISR2_CAB_END	0x02000000	/* [5212+] */ -#define	AR5K_SISR2_DTIM_SYNC	0x04000000	/* [5212+] */ -#define	AR5K_SISR2_BCN_TIMEOUT	0x08000000	/* [5212+] */ -#define	AR5K_SISR2_CAB_TIMEOUT	0x10000000	/* [5212+] */ +#define	AR5K_SISR2_DTIM_SYNC	0x04000000	/* DTIM sync lost [5212+] */ +#define	AR5K_SISR2_BCN_TIMEOUT	0x08000000	/* Beacon Timeout [5212+] */ +#define	AR5K_SISR2_CAB_TIMEOUT	0x10000000	/* CAB Timeout [5212+] */  #define	AR5K_SISR2_DTIM		0x20000000	/* [5212+] */  #define AR5K_SISR3		0x0090			/* Register Address [5211+] */ @@ -368,18 +375,18 @@  #define AR5K_IMR_TXEOL		0x00000400	/* Empty TX descriptor*/  #define AR5K_IMR_TXURN		0x00000800	/* Transmit FIFO underrun*/  #define AR5K_IMR_MIB		0x00001000	/* Update MIB counters*/ -#define AR5K_IMR_SWI		0x00002000 +#define AR5K_IMR_SWI		0x00002000	/* Software interrupt */  #define AR5K_IMR_RXPHY		0x00004000	/* PHY error*/ -#define AR5K_IMR_RXKCM		0x00008000 +#define AR5K_IMR_RXKCM		0x00008000	/* RX Key cache miss */  #define AR5K_IMR_SWBA		0x00010000	/* Software beacon alert*/  #define AR5K_IMR_BRSSI		0x00020000  #define AR5K_IMR_BMISS		0x00040000	/* Beacon missed*/  #define AR5K_IMR_HIUERR		0x00080000	/* Host Interface Unit error [5211+] */  #define AR5K_IMR_BNR		0x00100000 	/* Beacon not ready [5211+] */ -#define AR5K_IMR_MCABT		0x00100000	/* [5210] */ -#define AR5K_IMR_RXCHIRP	0x00200000	/* [5212+]*/ -#define AR5K_IMR_SSERR		0x00200000	/* [5210] */ -#define AR5K_IMR_DPERR		0x00400000	/* [5210] */ +#define AR5K_IMR_MCABT		0x00100000	/* Master Cycle Abort [5210] */ +#define AR5K_IMR_RXCHIRP	0x00200000	/* CHIRP Received [5212+]*/ +#define AR5K_IMR_SSERR		0x00200000	/* Signaled System Error [5210] */ +#define AR5K_IMR_DPERR		0x00400000	/* Det par Error (?) [5210] */  #define AR5K_IMR_TIM		0x00800000	/* [5211+] */  #define AR5K_IMR_BCNMISC	0x00800000	/* [5212+] */  #define AR5K_IMR_GPIO		0x01000000	/* GPIO (rf kill)*/ @@ -405,14 +412,14 @@  #define AR5K_SIMR2		0x00ac			/* Register Address [5211+] */  #define AR5K_SIMR2_QCU_TXURN	0x000003ff	/* Mask for QCU_TXURN */  #define AR5K_SIMR2_QCU_TXURN_S	0 -#define	AR5K_SIMR2_MCABT	0x00100000 -#define	AR5K_SIMR2_SSERR	0x00200000 -#define	AR5K_SIMR2_DPERR	0x00400000 +#define	AR5K_SIMR2_MCABT	0x00100000	/* Master Cycle Abort */ +#define	AR5K_SIMR2_SSERR	0x00200000	/* Signaled System Error */ +#define	AR5K_SIMR2_DPERR	0x00400000	/* Det par Error (?) */  #define	AR5K_SIMR2_TIM		0x01000000	/* [5212+] */  #define	AR5K_SIMR2_CAB_END	0x02000000	/* [5212+] */ -#define	AR5K_SIMR2_DTIM_SYNC	0x04000000	/* [5212+] */ -#define	AR5K_SIMR2_BCN_TIMEOUT	0x08000000	/* [5212+] */ -#define	AR5K_SIMR2_CAB_TIMEOUT	0x10000000	/* [5212+] */ +#define	AR5K_SIMR2_DTIM_SYNC	0x04000000	/* DTIM Sync lost [5212+] */ +#define	AR5K_SIMR2_BCN_TIMEOUT	0x08000000	/* Beacon Timeout [5212+] */ +#define	AR5K_SIMR2_CAB_TIMEOUT	0x10000000	/* CAB Timeout [5212+] */  #define	AR5K_SIMR2_DTIM		0x20000000	/* [5212+] */  #define AR5K_SIMR3		0x00b0			/* Register Address [5211+] */ @@ -425,23 +432,69 @@  #define AR5K_SIMR4_QTRIG	0x000003ff	/* Mask for QTRIG */  #define AR5K_SIMR4_QTRIG_S	0 +/* + * DMA Debug registers 0-7 + * 0xe0 - 0xfc + */  /*   * Decompression mask registers [5212+]   */ -#define AR5K_DCM_ADDR		0x0400		/*Decompression mask address (?)*/ -#define AR5K_DCM_DATA		0x0404		/*Decompression mask data (?)*/ +#define AR5K_DCM_ADDR		0x0400		/*Decompression mask address (index) */ +#define AR5K_DCM_DATA		0x0404		/*Decompression mask data */ + +/* + * Wake On Wireless pattern control register [5212+] + */ +#define	AR5K_WOW_PCFG			0x0410			/* Register Address */ +#define	AR5K_WOW_PCFG_PAT_MATCH_EN	0x00000001	/* Pattern match enable */ +#define	AR5K_WOW_PCFG_LONG_FRAME_POL	0x00000002	/* Long frame policy */ +#define	AR5K_WOW_PCFG_WOBMISS		0x00000004	/* Wake on bea(con) miss (?) */ +#define	AR5K_WOW_PCFG_PAT_0_EN		0x00000100	/* Enable pattern 0 */ +#define	AR5K_WOW_PCFG_PAT_1_EN		0x00000200	/* Enable pattern 1 */ +#define	AR5K_WOW_PCFG_PAT_2_EN		0x00000400	/* Enable pattern 2 */ +#define	AR5K_WOW_PCFG_PAT_3_EN		0x00000800	/* Enable pattern 3 */ +#define	AR5K_WOW_PCFG_PAT_4_EN		0x00001000	/* Enable pattern 4 */ +#define	AR5K_WOW_PCFG_PAT_5_EN		0x00002000	/* Enable pattern 5 */ + +/* + * Wake On Wireless pattern index register (?) [5212+] + */ +#define	AR5K_WOW_PAT_IDX	0x0414 + +/* + * Wake On Wireless pattern data register [5212+] + */ +#define	AR5K_WOW_PAT_DATA	0x0418			/* Register Address */ +#define	AR5K_WOW_PAT_DATA_0_3_V	0x00000001	/* Pattern 0, 3 value */ +#define	AR5K_WOW_PAT_DATA_1_4_V	0x00000100	/* Pattern 1, 4 value */ +#define	AR5K_WOW_PAT_DATA_2_5_V	0x00010000	/* Pattern 2, 5 value */ +#define	AR5K_WOW_PAT_DATA_0_3_M	0x01000000	/* Pattern 0, 3 mask */ +#define	AR5K_WOW_PAT_DATA_1_4_M	0x04000000	/* Pattern 1, 4 mask */ +#define	AR5K_WOW_PAT_DATA_2_5_M	0x10000000	/* Pattern 2, 5 mask */  /*   * Decompression configuration registers [5212+]   */ -#define AR5K_DCCFG		0x0420 +#define AR5K_DCCFG		0x0420			/* Register Address */ +#define AR5K_DCCFG_GLOBAL_EN	0x00000001	/* Enable decompression on all queues */ +#define AR5K_DCCFG_BYPASS_EN	0x00000002	/* Bypass decompression */ +#define AR5K_DCCFG_BCAST_EN	0x00000004	/* Enable decompression for bcast frames */ +#define AR5K_DCCFG_MCAST_EN	0x00000008	/* Enable decompression for mcast frames */  /*   * Compression configuration registers [5212+]   */ -#define AR5K_CCFG		0x0600 -#define AR5K_CCFG_CUP		0x0604 +#define AR5K_CCFG		0x0600			/* Register Address */ +#define	AR5K_CCFG_WINDOW_SIZE	0x00000007	/* Compression window size */ +#define	AR5K_CCFG_CPC_EN	0x00000008	/* Enable performance counters */ + +#define AR5K_CCFG_CCU		0x0604			/* Register Address */ +#define AR5K_CCFG_CCU_CUP_EN	0x00000001	/* CCU Catchup enable */ +#define AR5K_CCFG_CCU_CREDIT	0x00000002	/* CCU Credit (field) */ +#define AR5K_CCFG_CCU_CD_THRES	0x00000080	/* CCU Cyc(lic?) debt threshold (field) */ +#define AR5K_CCFG_CCU_CUP_LCNT	0x00010000	/* CCU Catchup lit(?) count */ +#define	AR5K_CCFG_CCU_INIT	0x00100200	/* Initial value during reset */  /*   * Compression performance counter registers [5212+] @@ -450,7 +503,7 @@  #define AR5K_CPC1		0x0614		/* Compression performance counter 1*/  #define AR5K_CPC2		0x0618		/* Compression performance counter 2 */  #define AR5K_CPC3		0x061c		/* Compression performance counter 3 */ -#define AR5K_CPCORN		0x0620		/* Compression performance overrun (?) */ +#define AR5K_CPCOVF		0x0620		/* Compression performance overflow */  /* @@ -466,8 +519,6 @@   * set/clear, which contain status for all queues (we shift by 1 for each   * queue). To access these registers easily we define some macros here   * that are used inside HAL. For more infos check out *_tx_queue functs. - * - * TODO: Boundary checking on macros (here?)   */  /* @@ -513,7 +564,6 @@  #define	AR5K_QCU_RDYTIMECFG_BASE	0x0900	/* Register Address - Queue0 RDYTIMECFG */  #define	AR5K_QCU_RDYTIMECFG_INTVAL	0x00ffffff	/* Ready time interval mask */  #define AR5K_QCU_RDYTIMECFG_INTVAL_S	0 -#define	AR5K_QCU_RDYTIMECFG_DURATION	0x00ffffff	/* Ready time duration mask */  #define	AR5K_QCU_RDYTIMECFG_ENABLE	0x01000000	/* Ready time enable mask */  #define AR5K_QUEUE_RDYTIMECFG(_q)	AR5K_QUEUE_REG(AR5K_QCU_RDYTIMECFG_BASE, _q) @@ -534,19 +584,20 @@   */  #define AR5K_QCU_MISC_BASE		0x09c0			/* Register Address -Queue0 MISC */  #define	AR5K_QCU_MISC_FRSHED_M		0x0000000f	/* Frame sheduling mask */ -#define	AR5K_QCU_MISC_FRSHED_ASAP	0		/* ASAP */ -#define	AR5K_QCU_MISC_FRSHED_CBR	1		/* Constant Bit Rate */ -#define	AR5K_QCU_MISC_FRSHED_DBA_GT	2		/* DMA Beacon alert gated (?) */ -#define	AR5K_QCU_MISC_FRSHED_TIM_GT	3		/* Time gated (?) */ +#define	AR5K_QCU_MISC_FRSHED_ASAP		0	/* ASAP */ +#define	AR5K_QCU_MISC_FRSHED_CBR		1	/* Constant Bit Rate */ +#define	AR5K_QCU_MISC_FRSHED_DBA_GT		2	/* DMA Beacon alert gated (?) */ +#define	AR5K_QCU_MISC_FRSHED_TIM_GT		3	/* Time gated (?) */  #define	AR5K_QCU_MISC_FRSHED_BCN_SENT_GT	4	/* Beacon sent gated (?) */  #define	AR5K_QCU_MISC_ONESHOT_ENABLE	0x00000010	/* Oneshot enable */  #define	AR5K_QCU_MISC_CBREXP		0x00000020	/* CBR expired (normal queue) */  #define	AR5K_QCU_MISC_CBREXP_BCN	0x00000040	/* CBR expired (beacon queue) */ -#define	AR5K_QCU_MISC_BCN_ENABLE	0x00000080	/* Beacons enabled */ -#define	AR5K_QCU_MISC_CBR_THRES_ENABLE	0x00000100	/* CBR threshold enabled (?) */ -#define	AR5K_QCU_MISC_TXE		0x00000200	/* TXE reset when RDYTIME enalbed (?) */ -#define	AR5K_QCU_MISC_CBR		0x00000400	/* CBR threshold reset (?) */ -#define	AR5K_QCU_MISC_DCU_EARLY		0x00000800	/* DCU reset (?) */ +#define	AR5K_QCU_MISC_BCN_ENABLE	0x00000080	/* Enable Beacon use */ +#define	AR5K_QCU_MISC_CBR_THRES_ENABLE	0x00000100	/* CBR threshold enabled */ +#define	AR5K_QCU_MISC_RDY_VEOL_POLICY	0x00000200	/* TXE reset when RDYTIME enalbed */ +#define	AR5K_QCU_MISC_CBR_RESET_CNT	0x00000400	/* CBR threshold (counter) reset */ +#define	AR5K_QCU_MISC_DCU_EARLY		0x00000800	/* DCU early termination */ +#define AR5K_QCU_MISC_DCU_CMP_EN	0x00001000	/* Enable frame compression */  #define AR5K_QUEUE_MISC(_q)		AR5K_QUEUE_REG(AR5K_QCU_MISC_BASE, _q) @@ -555,7 +606,7 @@   */  #define AR5K_QCU_STS_BASE	0x0a00			/* Register Address - Queue0 STS */  #define	AR5K_QCU_STS_FRMPENDCNT	0x00000003	/* Frames pending counter */ -#define	AR5K_QCU_STS_CBREXPCNT	0x0000ff00	/* CBR expired counter (?) */ +#define	AR5K_QCU_STS_CBREXPCNT	0x0000ff00	/* CBR expired counter */  #define	AR5K_QUEUE_STATUS(_q)	AR5K_QUEUE_REG(AR5K_QCU_STS_BASE, _q)  /* @@ -569,9 +620,11 @@   */  #define AR5K_QCU_CBB_SELECT	0x0b00  #define AR5K_QCU_CBB_ADDR	0x0b04 +#define AR5K_QCU_CBB_ADDR_S	9  /*   * QCU compression buffer configuration register [5212+] + * (buffer size)   */  #define AR5K_QCU_CBCFG		0x0b08 @@ -652,80 +705,100 @@   * No lockout means there is no special handling.   */  #define AR5K_DCU_MISC_BASE		0x1100			/* Register Address -Queue0 DCU_MISC */ -#define	AR5K_DCU_MISC_BACKOFF		0x000007ff	/* Mask for backoff setting (?) */ +#define	AR5K_DCU_MISC_BACKOFF		0x000007ff	/* Mask for backoff threshold */  #define AR5K_DCU_MISC_BACKOFF_FRAG	0x00000200	/* Enable backoff while bursting */ -#define	AR5K_DCU_MISC_HCFPOLL_ENABLE	0x00000800	/* CF - Poll (?) */ -#define	AR5K_DCU_MISC_BACKOFF_PERSIST	0x00001000	/* Persistent backoff (?) */ -#define	AR5K_DCU_MISC_FRMPRFTCH_ENABLE	0x00002000	/* Enable frame pre-fetch (?) */ +#define	AR5K_DCU_MISC_HCFPOLL_ENABLE	0x00000800	/* CF - Poll enable */ +#define	AR5K_DCU_MISC_BACKOFF_PERSIST	0x00001000	/* Persistent backoff */ +#define	AR5K_DCU_MISC_FRMPRFTCH_ENABLE	0x00002000	/* Enable frame pre-fetch */  #define	AR5K_DCU_MISC_VIRTCOL		0x0000c000	/* Mask for Virtual Collision (?) */ -#define	AR5K_DCU_MISC_VIRTCOL_NORMAL	0 -#define	AR5K_DCU_MISC_VIRTCOL_MODIFIED	1 -#define	AR5K_DCU_MISC_VIRTCOL_IGNORE	2 -#define	AR5K_DCU_MISC_BCN_ENABLE	0x00010000	/* Beacon enable (?) */ +#define	AR5K_DCU_MISC_VIRTCOL_NORMAL		0 +#define	AR5K_DCU_MISC_VIRTCOL_MODIFIED		1 +#define	AR5K_DCU_MISC_VIRTCOL_IGNORE		2 +#define	AR5K_DCU_MISC_BCN_ENABLE	0x00010000	/* Enable Beacon use */  #define	AR5K_DCU_MISC_ARBLOCK_CTL	0x00060000	/* Arbiter lockout control mask */  #define	AR5K_DCU_MISC_ARBLOCK_CTL_S	17 -#define	AR5K_DCU_MISC_ARBLOCK_CTL_NONE	0		/* No arbiter lockout */ +#define	AR5K_DCU_MISC_ARBLOCK_CTL_NONE		0	/* No arbiter lockout */  #define	AR5K_DCU_MISC_ARBLOCK_CTL_INTFRM	1	/* Intra-frame lockout */  #define	AR5K_DCU_MISC_ARBLOCK_CTL_GLOBAL	2	/* Global lockout */ -#define	AR5K_DCU_MISC_ARBLOCK_IGNORE	0x00080000 -#define	AR5K_DCU_MISC_SEQ_NUM_INCR_DIS	0x00100000	/* Disable sequence number increment (?) */ -#define	AR5K_DCU_MISC_POST_FR_BKOFF_DIS	0x00200000	/* Disable post-frame backoff (?) */ -#define	AR5K_DCU_MISC_VIRT_COLL_POLICY	0x00400000	/* Virtual Collision policy (?) */ -#define	AR5K_DCU_MISC_BLOWN_IFS_POLICY	0x00800000 +#define	AR5K_DCU_MISC_ARBLOCK_IGNORE	0x00080000	/* Ignore Arbiter lockout */ +#define	AR5K_DCU_MISC_SEQ_NUM_INCR_DIS	0x00100000	/* Disable sequence number increment */ +#define	AR5K_DCU_MISC_POST_FR_BKOFF_DIS	0x00200000	/* Disable post-frame backoff */ +#define	AR5K_DCU_MISC_VIRT_COLL_POLICY	0x00400000	/* Virtual Collision cw policy */ +#define	AR5K_DCU_MISC_BLOWN_IFS_POLICY	0x00800000	/* Blown IFS policy (?) */  #define	AR5K_DCU_MISC_SEQNUM_CTL	0x01000000	/* Sequence number control (?) */  #define AR5K_QUEUE_DFS_MISC(_q)		AR5K_QUEUE_REG(AR5K_DCU_MISC_BASE, _q)  /*   * DCU frame sequence number registers   */ -#define AR5K_DCU_SEQNUM_BASE	0x1140 -#define	AR5K_DCU_SEQNUM_M	0x00000fff +#define AR5K_DCU_SEQNUM_BASE		0x1140 +#define	AR5K_DCU_SEQNUM_M		0x00000fff  #define	AR5K_QUEUE_DFS_SEQNUM(_q)	AR5K_QUEUE_REG(AR5K_DCU_SEQNUM_BASE, _q)  /* - * DCU global IFS SIFS registers + * DCU global IFS SIFS register   */  #define AR5K_DCU_GBL_IFS_SIFS	0x1030  #define AR5K_DCU_GBL_IFS_SIFS_M	0x0000ffff  /* - * DCU global IFS slot interval registers + * DCU global IFS slot interval register   */  #define AR5K_DCU_GBL_IFS_SLOT	0x1070  #define AR5K_DCU_GBL_IFS_SLOT_M	0x0000ffff  /* - * DCU global IFS EIFS registers + * DCU global IFS EIFS register   */  #define AR5K_DCU_GBL_IFS_EIFS	0x10b0  #define AR5K_DCU_GBL_IFS_EIFS_M	0x0000ffff  /* - * DCU global IFS misc registers + * DCU global IFS misc register + * + * LFSR stands for Linear Feedback Shift Register + * and it's used for generating pseudo-random + * number sequences. + * + * (If i understand corectly, random numbers are + * used for idle sensing -multiplied with cwmin/max etc-)   */  #define AR5K_DCU_GBL_IFS_MISC			0x10f0			/* Register Address */ -#define	AR5K_DCU_GBL_IFS_MISC_LFSR_SLICE	0x00000007 -#define	AR5K_DCU_GBL_IFS_MISC_TURBO_MODE	0x00000008	/* Turbo mode (?) */ -#define	AR5K_DCU_GBL_IFS_MISC_SIFS_DUR_USEC	0x000003f0	/* SIFS Duration mask (?) */ -#define	AR5K_DCU_GBL_IFS_MISC_USEC_DUR		0x000ffc00 -#define	AR5K_DCU_GBL_IFS_MISC_DCU_ARB_DELAY	0x00300000 +#define	AR5K_DCU_GBL_IFS_MISC_LFSR_SLICE	0x00000007	/* LFSR Slice Select */ +#define	AR5K_DCU_GBL_IFS_MISC_TURBO_MODE	0x00000008	/* Turbo mode */ +#define	AR5K_DCU_GBL_IFS_MISC_SIFS_DUR_USEC	0x000003f0	/* SIFS Duration mask */ +#define	AR5K_DCU_GBL_IFS_MISC_USEC_DUR		0x000ffc00	/* USEC Duration mask */ +#define	AR5K_DCU_GBL_IFS_MISC_DCU_ARB_DELAY	0x00300000	/* DCU Arbiter delay mask */ +#define AR5K_DCU_GBL_IFS_MISC_SIFS_CNT_RST	0x00400000	/* SIFC cnt reset policy (?) */ +#define AR5K_DCU_GBL_IFS_MISC_AIFS_CNT_RST	0x00800000	/* AIFS cnt reset policy (?) */ +#define AR5K_DCU_GBL_IFS_MISC_RND_LFSR_SL_DIS	0x01000000	/* Disable random LFSR slice */  /*   * DCU frame prefetch control register   */ -#define AR5K_DCU_FP		0x1230 +#define AR5K_DCU_FP			0x1230			/* Register Address */ +#define AR5K_DCU_FP_NOBURST_DCU_EN	0x00000001	/* Enable non-burst prefetch on DCU (?) */ +#define AR5K_DCU_FP_NOBURST_EN		0x00000010	/* Enable non-burst prefetch (?) */ +#define AR5K_DCU_FP_BURST_DCU_EN	0x00000020	/* Enable burst prefetch on DCU (?) */  /*   * DCU transmit pause control/status register   */  #define AR5K_DCU_TXP		0x1270			/* Register Address */ -#define	AR5K_DCU_TXP_M		0x000003ff	/* Tx pause mask (?) */ -#define	AR5K_DCU_TXP_STATUS	0x00010000	/* Tx pause status (?) */ +#define	AR5K_DCU_TXP_M		0x000003ff	/* Tx pause mask */ +#define	AR5K_DCU_TXP_STATUS	0x00010000	/* Tx pause status */ + +/* + * DCU transmit filter table 0 (32 entries) + */ +#define AR5K_DCU_TX_FILTER_0_BASE	0x1038 +#define	AR5K_DCU_TX_FILTER_0(_n)	(AR5K_DCU_TX_FILTER_0_BASE + (_n * 64))  /* - * DCU transmit filter register + * DCU transmit filter table 1 (16 entries)   */ -#define AR5K_DCU_TX_FILTER	0x1038 +#define AR5K_DCU_TX_FILTER_1_BASE	0x103c +#define	AR5K_DCU_TX_FILTER_1(_n)	(AR5K_DCU_TX_FILTER_1_BASE + ((_n - 32) * 64))  /*   * DCU clear transmit filter register @@ -739,9 +812,6 @@  /*   * Reset control register - * - * 4 and 8 are not used in 5211/5212 and - * 2 means "baseband reset" on 5211/5212.   */  #define AR5K_RESET_CTL		0x4000			/* Register Address */  #define AR5K_RESET_CTL_PCU	0x00000001	/* Protocol Control Unit reset */ @@ -765,6 +835,7 @@  #define AR5K_SLEEP_CTL_SLE_SLP		0x00010000	/* Force chip sleep */  #define AR5K_SLEEP_CTL_SLE_ALLOW	0x00020000  #define AR5K_SLEEP_CTL_SLE_UNITS	0x00000008	/* [5211+] */ +/* more bits */  /*   * Interrupt pending register @@ -776,13 +847,14 @@   * Sleep force register   */  #define AR5K_SFR	0x400c -#define AR5K_SFR_M	0x00000001 +#define AR5K_SFR_EN	0x00000001  /*   * PCI configuration register   */  #define AR5K_PCICFG			0x4010			/* Register Address */  #define AR5K_PCICFG_EEAE		0x00000001	/* Eeprom access enable [5210] */ +#define	AR5K_PCICFG_SLEEP_CLOCK_EN	0x00000002	/* Enable sleep clock (?) */  #define AR5K_PCICFG_CLKRUNEN		0x00000004	/* CLKRUN enable [5211+] */  #define AR5K_PCICFG_EESIZE		0x00000018	/* Mask for EEPROM size [5211+] */  #define AR5K_PCICFG_EESIZE_S		3 @@ -798,19 +870,21 @@  #define	AR5K_PCICFG_CBEFIX_DIS		0x00000400	/* Disable CBE fix (?) */  #define AR5K_PCICFG_SL_INTEN		0x00000800	/* Enable interrupts when asleep (?) */  #define AR5K_PCICFG_LED_BCTL		0x00001000	/* Led blink (?) [5210] */ -#define AR5K_PCICFG_SL_INPEN		0x00002800	/* Sleep even whith pending interrupts (?) */ +#define	AR5K_PCICFG_UNK			0x00001000	/* Passed on some parts durring attach (?) */ +#define AR5K_PCICFG_SL_INPEN		0x00002000	/* Sleep even whith pending interrupts (?) */  #define AR5K_PCICFG_SPWR_DN		0x00010000	/* Mask for power status */  #define AR5K_PCICFG_LEDMODE		0x000e0000	/* Ledmode [5211+] */  #define AR5K_PCICFG_LEDMODE_PROP	0x00000000	/* Blink on standard traffic [5211+] */  #define AR5K_PCICFG_LEDMODE_PROM	0x00020000	/* Default mode (blink on any traffic) [5211+] */  #define AR5K_PCICFG_LEDMODE_PWR		0x00040000	/* Some other blinking mode  (?) [5211+] */  #define AR5K_PCICFG_LEDMODE_RAND	0x00060000	/* Random blinking (?) [5211+] */ -#define AR5K_PCICFG_LEDBLINK		0x00700000 +#define AR5K_PCICFG_LEDBLINK		0x00700000	/* Led blink rate */  #define AR5K_PCICFG_LEDBLINK_S		20 -#define AR5K_PCICFG_LEDSLOW		0x00800000	/* Slow led blink rate (?) [5211+] */ +#define AR5K_PCICFG_LEDSLOW		0x00800000	/* Slowest led blink rate [5211+] */  #define AR5K_PCICFG_LEDSTATE				\  	(AR5K_PCICFG_LED | AR5K_PCICFG_LEDMODE |	\  	AR5K_PCICFG_LEDBLINK | AR5K_PCICFG_LEDSLOW) +#define	AR5K_PCICFG_SLEEP_CLOCK_RATE	0x03000000	/* Sleep clock rate (field) */  /*   * "General Purpose Input/Output" (GPIO) control register @@ -947,7 +1021,7 @@  #define AR5K_EEPROM_VERSION_4_4		0x4004  #define AR5K_EEPROM_VERSION_4_5		0x4005  #define AR5K_EEPROM_VERSION_4_6		0x4006	/* has ee_scaled_cck_delta */ -#define AR5K_EEPROM_VERSION_4_7		0x3007 +#define AR5K_EEPROM_VERSION_4_7		0x4007  #define AR5K_EEPROM_MODE_11A		0  #define AR5K_EEPROM_MODE_11B		1 @@ -1023,10 +1097,14 @@  #define AR5K_EEPROM_STAT_WRDONE	0x00000008	/* EEPROM write successful */  /* - * EEPROM config register (?) + * EEPROM config register   */ -#define AR5K_EEPROM_CFG	0x6010 - +#define AR5K_EEPROM_CFG			0x6010			/* Register Addres */ +#define AR5K_EEPROM_CFG_SIZE_OVR	0x00000001 +#define AR5K_EEPROM_CFG_WR_WAIT_DIS	0x00000004	/* Disable write wait */ +#define AR5K_EEPROM_CFG_CLK_RATE	0x00000018	/* Clock rate */ +#define AR5K_EEPROM_CFG_PROT_KEY	0x00ffff00	/* Protectio key */ +#define AR5K_EEPROM_CFG_LIND_EN		0x01000000	/* Enable length indicator (?) */  /* @@ -1050,7 +1128,7 @@  #define AR5K_STA_ID1			0x8004			/* Register Address */  #define AR5K_STA_ID1_AP			0x00010000	/* Set AP mode */  #define AR5K_STA_ID1_ADHOC		0x00020000	/* Set Ad-Hoc mode */ -#define AR5K_STA_ID1_PWR_SV		0x00040000	/* Power save reporting (?) */ +#define AR5K_STA_ID1_PWR_SV		0x00040000	/* Power save reporting */  #define AR5K_STA_ID1_NO_KEYSRCH		0x00080000	/* No key search */  #define AR5K_STA_ID1_NO_PSPOLL		0x00100000	/* No power save polling [5210] */  #define AR5K_STA_ID1_PCF_5211		0x00100000	/* Enable PCF on [5211+] */ @@ -1059,9 +1137,13 @@  					AR5K_STA_ID1_PCF_5210 : AR5K_STA_ID1_PCF_5211)  #define AR5K_STA_ID1_DEFAULT_ANTENNA	0x00200000	/* Use default antenna */  #define AR5K_STA_ID1_DESC_ANTENNA	0x00400000	/* Update antenna from descriptor */ -#define AR5K_STA_ID1_RTS_DEF_ANTENNA	0x00800000	/* Use default antenna for RTS (?) */ -#define AR5K_STA_ID1_ACKCTS_6MB		0x01000000	/* Use 6Mbit/s for ACK/CTS (?) */ +#define AR5K_STA_ID1_RTS_DEF_ANTENNA	0x00800000	/* Use default antenna for RTS */ +#define AR5K_STA_ID1_ACKCTS_6MB		0x01000000	/* Use 6Mbit/s for ACK/CTS */  #define AR5K_STA_ID1_BASE_RATE_11B	0x02000000	/* Use 11b base rate (for ACK/CTS ?) [5211+] */ +#define AR5K_STA_ID1_SELF_GEN_SECTORE	0x04000000	/* Self generate sectore (?) */ +#define AR5K_STA_ID1_CRYPT_MIC_EN	0x08000000	/* Enable MIC */ +#define AR5K_STA_ID1_KEYSRCH_MODE	0x10000000	/* Keysearch mode (?) */ +#define AR5K_STA_ID1_PRESERVE_SEQ_NUM	0x20000000	/* Preserve sequence number */  /*   * First BSSID register (MAC address, lower 32bits) @@ -1117,7 +1199,7 @@   *   * Retry limit register for 5210 (no QCU/DCU so it's done in PCU)   */ -#define AR5K_NODCU_RETRY_LMT		0x801c			/*Register Address */ +#define AR5K_NODCU_RETRY_LMT		0x801c			/* Register Address */  #define AR5K_NODCU_RETRY_LMT_SH_RETRY	0x0000000f	/* Short retry limit mask */  #define AR5K_NODCU_RETRY_LMT_SH_RETRY_S	0  #define AR5K_NODCU_RETRY_LMT_LG_RETRY	0x000000f0	/* Long retry mask */ @@ -1136,9 +1218,9 @@  #define AR5K_USEC_5211			0x801c			/* Register Address [5211+] */  #define AR5K_USEC			(ah->ah_version == AR5K_AR5210 ? \  					AR5K_USEC_5210 : AR5K_USEC_5211) -#define AR5K_USEC_1			0x0000007f +#define AR5K_USEC_1			0x0000007f	/* clock cycles for 1us */  #define AR5K_USEC_1_S			0 -#define AR5K_USEC_32			0x00003f80 +#define AR5K_USEC_32			0x00003f80	/* clock cycles for 1us while on 32Mhz clock */  #define AR5K_USEC_32_S			7  #define AR5K_USEC_TX_LATENCY_5211	0x007fc000  #define AR5K_USEC_TX_LATENCY_5211_S	14 @@ -1152,16 +1234,16 @@  /*   * PCU beacon control register   */ -#define AR5K_BEACON_5210	0x8024 -#define AR5K_BEACON_5211	0x8020 +#define AR5K_BEACON_5210	0x8024			/*Register Address [5210] */ +#define AR5K_BEACON_5211	0x8020			/*Register Address [5211+] */  #define AR5K_BEACON		(ah->ah_version == AR5K_AR5210 ? \  				AR5K_BEACON_5210 : AR5K_BEACON_5211) -#define AR5K_BEACON_PERIOD	0x0000ffff +#define AR5K_BEACON_PERIOD	0x0000ffff	/* Mask for beacon period */  #define AR5K_BEACON_PERIOD_S	0 -#define AR5K_BEACON_TIM		0x007f0000 +#define AR5K_BEACON_TIM		0x007f0000	/* Mask for TIM offset */  #define AR5K_BEACON_TIM_S	16 -#define AR5K_BEACON_ENABLE	0x00800000 -#define AR5K_BEACON_RESET_TSF	0x01000000 +#define AR5K_BEACON_ENABLE	0x00800000	/* Enable beacons */ +#define AR5K_BEACON_RESET_TSF	0x01000000	/* Force TSF reset */  /*   * CFP period register @@ -1234,7 +1316,6 @@  /*   * Receive filter register - * TODO: Get these out of ar5xxx.h on ath5k   */  #define AR5K_RX_FILTER_5210	0x804c			/* Register Address [5210] */  #define AR5K_RX_FILTER_5211	0x803c			/* Register Address [5211+] */ @@ -1307,11 +1388,11 @@  #define AR5K_DIAG_SW_5211		0x8048			/* Register Address [5211+] */  #define AR5K_DIAG_SW			(ah->ah_version == AR5K_AR5210 ? \  					AR5K_DIAG_SW_5210 : AR5K_DIAG_SW_5211) -#define AR5K_DIAG_SW_DIS_WEP_ACK	0x00000001 -#define AR5K_DIAG_SW_DIS_ACK		0x00000002	/* Disable ACKs (?) */ -#define AR5K_DIAG_SW_DIS_CTS		0x00000004	/* Disable CTSs (?) */ -#define AR5K_DIAG_SW_DIS_ENC		0x00000008	/* Disable encryption (?) */ -#define AR5K_DIAG_SW_DIS_DEC		0x00000010	/* Disable decryption (?) */ +#define AR5K_DIAG_SW_DIS_WEP_ACK	0x00000001	/* Disable ACKs if WEP key is invalid */ +#define AR5K_DIAG_SW_DIS_ACK		0x00000002	/* Disable ACKs */ +#define AR5K_DIAG_SW_DIS_CTS		0x00000004	/* Disable CTSs */ +#define AR5K_DIAG_SW_DIS_ENC		0x00000008	/* Disable encryption */ +#define AR5K_DIAG_SW_DIS_DEC		0x00000010	/* Disable decryption */  #define AR5K_DIAG_SW_DIS_TX		0x00000020	/* Disable transmit [5210] */  #define AR5K_DIAG_SW_DIS_RX_5210	0x00000040	/* Disable recieve */  #define AR5K_DIAG_SW_DIS_RX_5211	0x00000020 @@ -1329,13 +1410,13 @@  #define AR5K_DIAG_SW_CHAN_INFO_5211	0x00000100  #define AR5K_DIAG_SW_CHAN_INFO		(ah->ah_version == AR5K_AR5210 ? \  					AR5K_DIAG_SW_CHAN_INFO_5210 : AR5K_DIAG_SW_CHAN_INFO_5211) -#define AR5K_DIAG_SW_EN_SCRAM_SEED_5211	0x00000200	/* Scrambler seed (?) */ +#define AR5K_DIAG_SW_EN_SCRAM_SEED_5211	0x00000200	/* Enable scrambler seed */  #define AR5K_DIAG_SW_EN_SCRAM_SEED_5210	0x00000400  #define AR5K_DIAG_SW_EN_SCRAM_SEED	(ah->ah_version == AR5K_AR5210 ? \  					AR5K_DIAG_SW_EN_SCRAM_SEED_5210 : AR5K_DIAG_SW_EN_SCRAM_SEED_5211)  #define AR5K_DIAG_SW_ECO_ENABLE		0x00000400	/* [5211+] */  #define AR5K_DIAG_SW_SCVRAM_SEED	0x0003f800	/* [5210] */ -#define AR5K_DIAG_SW_SCRAM_SEED_M	0x0001fc00	/* Scrambler seed mask (?) */ +#define AR5K_DIAG_SW_SCRAM_SEED_M	0x0001fc00	/* Scrambler seed mask */  #define AR5K_DIAG_SW_SCRAM_SEED_S	10  #define AR5K_DIAG_SW_DIS_SEQ_INC	0x00040000	/* Disable seqnum increment (?)[5210] */  #define AR5K_DIAG_SW_FRAME_NV0_5210	0x00080000 @@ -1344,6 +1425,7 @@  					AR5K_DIAG_SW_FRAME_NV0_5210 : AR5K_DIAG_SW_FRAME_NV0_5211)  #define AR5K_DIAG_SW_OBSPT_M		0x000c0000  #define AR5K_DIAG_SW_OBSPT_S		18 +/* more bits */  /*   * TSF (clock) register (lower 32 bits) @@ -1369,15 +1451,34 @@  /*   * ADDAC test register [5211+]   */ -#define AR5K_ADDAC_TEST	0x8054 -#define AR5K_ADDAC_TEST_TXCONT 0x00000001 +#define AR5K_ADDAC_TEST			0x8054			/* Register Address */ +#define AR5K_ADDAC_TEST_TXCONT 		0x00000001	/* Test continuous tx */ +#define AR5K_ADDAC_TEST_TST_MODE	0x00000002	/* Test mode */ +#define AR5K_ADDAC_TEST_LOOP_EN		0x00000004	/* Enable loop */ +#define AR5K_ADDAC_TEST_LOOP_LEN	0x00000008	/* Loop length (field) */ +#define AR5K_ADDAC_TEST_USE_U8		0x00004000	/* Use upper 8 bits */ +#define AR5K_ADDAC_TEST_MSB		0x00008000	/* State of MSB */ +#define AR5K_ADDAC_TEST_TRIG_SEL	0x00010000	/* Trigger select */ +#define AR5K_ADDAC_TEST_TRIG_PTY	0x00020000	/* Trigger polarity */ +#define AR5K_ADDAC_TEST_RXCONT		0x00040000	/* Continuous capture */ +#define AR5K_ADDAC_TEST_CAPTURE		0x00080000	/* Begin capture */ +#define AR5K_ADDAC_TEST_TST_ARM		0x00100000	/* Test ARM (Adaptive Radio Mode ?) */  /*   * Default antenna register [5211+]   */  #define AR5K_DEFAULT_ANTENNA	0x8058 +/* + * Frame control QoS mask register (?) [5211+] + * (FC_QOS_MASK) + */ +#define AR5K_FRAME_CTL_QOSM	0x805c +/* + * Seq mask register (?) [5211+] + */ +#define AR5K_SEQ_MASK	0x8060  /*   * Retry count register [5210] @@ -1449,124 +1550,242 @@  /*   * XR (eXtended Range) mode register   */ -#define AR5K_XRMODE			0x80c0 -#define	AR5K_XRMODE_POLL_TYPE_M		0x0000003f +#define AR5K_XRMODE			0x80c0			/* Register Address */ +#define	AR5K_XRMODE_POLL_TYPE_M		0x0000003f	/* Mask for Poll type (?) */  #define	AR5K_XRMODE_POLL_TYPE_S		0 -#define	AR5K_XRMODE_POLL_SUBTYPE_M	0x0000003c +#define	AR5K_XRMODE_POLL_SUBTYPE_M	0x0000003c	/* Mask for Poll subtype (?) */  #define	AR5K_XRMODE_POLL_SUBTYPE_S	2 -#define	AR5K_XRMODE_POLL_WAIT_ALL	0x00000080 -#define	AR5K_XRMODE_SIFS_DELAY		0x000fff00 -#define	AR5K_XRMODE_FRAME_HOLD_M	0xfff00000 +#define	AR5K_XRMODE_POLL_WAIT_ALL	0x00000080	/* Wait for poll */ +#define	AR5K_XRMODE_SIFS_DELAY		0x000fff00	/* Mask for SIFS delay */ +#define	AR5K_XRMODE_FRAME_HOLD_M	0xfff00000	/* Mask for frame hold (?) */  #define	AR5K_XRMODE_FRAME_HOLD_S	20  /*   * XR delay register   */ -#define AR5K_XRDELAY			0x80c4 -#define AR5K_XRDELAY_SLOT_DELAY_M	0x0000ffff +#define AR5K_XRDELAY			0x80c4			/* Register Address */ +#define AR5K_XRDELAY_SLOT_DELAY_M	0x0000ffff	/* Mask for slot delay */  #define AR5K_XRDELAY_SLOT_DELAY_S	0 -#define AR5K_XRDELAY_CHIRP_DELAY_M	0xffff0000 +#define AR5K_XRDELAY_CHIRP_DELAY_M	0xffff0000	/* Mask for CHIRP data delay */  #define AR5K_XRDELAY_CHIRP_DELAY_S	16  /*   * XR timeout register   */ -#define AR5K_XRTIMEOUT			0x80c8 -#define AR5K_XRTIMEOUT_CHIRP_M		0x0000ffff +#define AR5K_XRTIMEOUT			0x80c8			/* Register Address */ +#define AR5K_XRTIMEOUT_CHIRP_M		0x0000ffff	/* Mask for CHIRP timeout */  #define AR5K_XRTIMEOUT_CHIRP_S		0 -#define AR5K_XRTIMEOUT_POLL_M		0xffff0000 +#define AR5K_XRTIMEOUT_POLL_M		0xffff0000	/* Mask for Poll timeout */  #define AR5K_XRTIMEOUT_POLL_S		16  /*   * XR chirp register   */ -#define AR5K_XRCHIRP			0x80cc -#define AR5K_XRCHIRP_SEND		0x00000001 -#define AR5K_XRCHIRP_GAP		0xffff0000 +#define AR5K_XRCHIRP			0x80cc			/* Register Address */ +#define AR5K_XRCHIRP_SEND		0x00000001	/* Send CHIRP */ +#define AR5K_XRCHIRP_GAP		0xffff0000	/* Mask for CHIRP gap (?) */  /*   * XR stomp register   */ -#define AR5K_XRSTOMP			0x80d0 -#define AR5K_XRSTOMP_TX			0x00000001 -#define AR5K_XRSTOMP_RX_ABORT		0x00000002 -#define AR5K_XRSTOMP_RSSI_THRES		0x0000ff00 +#define AR5K_XRSTOMP			0x80d0			/* Register Address */ +#define AR5K_XRSTOMP_TX			0x00000001	/* Stomp Tx (?) */ +#define AR5K_XRSTOMP_RX			0x00000002	/* Stomp Rx (?) */ +#define AR5K_XRSTOMP_TX_RSSI		0x00000004	/* Stomp Tx RSSI (?) */ +#define AR5K_XRSTOMP_TX_BSSID		0x00000008	/* Stomp Tx BSSID (?) */ +#define AR5K_XRSTOMP_DATA		0x00000010	/* Stomp data (?)*/ +#define AR5K_XRSTOMP_RSSI_THRES		0x0000ff00	/* Mask for XR RSSI threshold */  /*   * First enhanced sleep register   */ -#define AR5K_SLEEP0			0x80d4 -#define AR5K_SLEEP0_NEXT_DTIM		0x0007ffff +#define AR5K_SLEEP0			0x80d4			/* Register Address */ +#define AR5K_SLEEP0_NEXT_DTIM		0x0007ffff	/* Mask for next DTIM (?) */  #define AR5K_SLEEP0_NEXT_DTIM_S		0 -#define AR5K_SLEEP0_ASSUME_DTIM		0x00080000 -#define AR5K_SLEEP0_ENH_SLEEP_EN	0x00100000 -#define AR5K_SLEEP0_CABTO		0xff000000 +#define AR5K_SLEEP0_ASSUME_DTIM		0x00080000	/* Assume DTIM */ +#define AR5K_SLEEP0_ENH_SLEEP_EN	0x00100000	/* Enable enchanced sleep control */ +#define AR5K_SLEEP0_CABTO		0xff000000	/* Mask for CAB Time Out */  #define AR5K_SLEEP0_CABTO_S		24  /*   * Second enhanced sleep register   */ -#define AR5K_SLEEP1			0x80d8 -#define AR5K_SLEEP1_NEXT_TIM		0x0007ffff +#define AR5K_SLEEP1			0x80d8			/* Register Address */ +#define AR5K_SLEEP1_NEXT_TIM		0x0007ffff	/* Mask for next TIM (?) */  #define AR5K_SLEEP1_NEXT_TIM_S		0 -#define AR5K_SLEEP1_BEACON_TO		0xff000000 +#define AR5K_SLEEP1_BEACON_TO		0xff000000	/* Mask for Beacon Time Out */  #define AR5K_SLEEP1_BEACON_TO_S		24  /*   * Third enhanced sleep register   */ -#define AR5K_SLEEP2			0x80dc -#define AR5K_SLEEP2_TIM_PER		0x0000ffff +#define AR5K_SLEEP2			0x80dc			/* Register Address */ +#define AR5K_SLEEP2_TIM_PER		0x0000ffff	/* Mask for TIM period (?) */  #define AR5K_SLEEP2_TIM_PER_S		0 -#define AR5K_SLEEP2_DTIM_PER		0xffff0000 +#define AR5K_SLEEP2_DTIM_PER		0xffff0000	/* Mask for DTIM period (?) */  #define AR5K_SLEEP2_DTIM_PER_S		16  /*   * BSSID mask registers   */ -#define AR5K_BSS_IDM0			0x80e0 -#define AR5K_BSS_IDM1			0x80e4 +#define AR5K_BSS_IDM0			0x80e0	/* Upper bits */ +#define AR5K_BSS_IDM1			0x80e4	/* Lower bits */  /*   * TX power control (TPC) register + * + * XXX: PCDAC steps (0.5dbm) or DBM ? + * + * XXX: Mask changes for newer chips to 7f + *      like tx power table ?   */ -#define AR5K_TXPC			0x80e8 -#define AR5K_TXPC_ACK_M			0x0000003f +#define AR5K_TXPC			0x80e8			/* Register Address */ +#define AR5K_TXPC_ACK_M			0x0000003f	/* Mask for ACK tx power */  #define AR5K_TXPC_ACK_S			0 -#define AR5K_TXPC_CTS_M			0x00003f00 +#define AR5K_TXPC_CTS_M			0x00003f00	/* Mask for CTS tx power */  #define AR5K_TXPC_CTS_S			8 -#define AR5K_TXPC_CHIRP_M		0x003f0000 +#define AR5K_TXPC_CHIRP_M		0x003f0000	/* Mask for CHIRP tx power */  #define AR5K_TXPC_CHIRP_S		22  /*   * Profile count registers   */ -#define AR5K_PROFCNT_TX			0x80ec -#define AR5K_PROFCNT_RX			0x80f0 -#define AR5K_PROFCNT_RXCLR		0x80f4 -#define AR5K_PROFCNT_CYCLE		0x80f8 +#define AR5K_PROFCNT_TX			0x80ec	/* Tx count */ +#define AR5K_PROFCNT_RX			0x80f0	/* Rx count */ +#define AR5K_PROFCNT_RXCLR		0x80f4	/* Clear Rx count */ +#define AR5K_PROFCNT_CYCLE		0x80f8	/* Cycle count (?) */ + +/* + * Quiet (period) control registers (?) + */ +#define AR5K_QUIET_CTL1			0x80fc			/* Register Address */ +#define AR5K_QUIET_CTL1_NEXT_QT		0x0000ffff	/* Mask for next quiet (period?) (?) */ +#define AR5K_QUIET_CTL1_QT_EN		0x00010000	/* Enable quiet (period?) */ +#define AR5K_QUIET_CTL2			0x8100			/* Register Address */ +#define AR5K_QUIET_CTL2_QT_PER		0x0000ffff	/* Mask for quiet period (?) */ +#define AR5K_QUIET_CTL2_QT_DUR		0xffff0000	/* Mask for quiet duration (?) */  /*   * TSF parameter register   */ -#define AR5K_TSF_PARM			0x8104 -#define AR5K_TSF_PARM_INC_M		0x000000ff +#define AR5K_TSF_PARM			0x8104			/* Register Address */ +#define AR5K_TSF_PARM_INC_M		0x000000ff	/* Mask for TSF increment */  #define AR5K_TSF_PARM_INC_S		0  /* + * QoS register (?) + */ +#define AR5K_QOS			0x8108			/* Register Address */ +#define AR5K_QOS_NOACK_2BIT_VALUES	0x00000000	/* (field) */ +#define AR5K_QOS_NOACK_BIT_OFFSET	0x00000020	/* (field) */ +#define AR5K_QOS_NOACK_BYTE_OFFSET	0x00000080	/* (field) */ + +/*   * PHY error filter register   */  #define AR5K_PHY_ERR_FIL		0x810c -#define AR5K_PHY_ERR_FIL_RADAR		0x00000020 -#define AR5K_PHY_ERR_FIL_OFDM		0x00020000 -#define AR5K_PHY_ERR_FIL_CCK		0x02000000 +#define AR5K_PHY_ERR_FIL_RADAR		0x00000020	/* Radar signal */ +#define AR5K_PHY_ERR_FIL_OFDM		0x00020000	/* OFDM false detect (ANI) */ +#define AR5K_PHY_ERR_FIL_CCK		0x02000000	/* CCK false detect (ANI) */ + +/* + * XR latency register + */ +#define AR5K_XRLAT_TX		0x8110  /* - * Rate duration register + * ACK SIFS register + */ +#define AR5K_ACKSIFS		0x8114			/* Register Address */ +#define AR5K_ACKSIFS_INC	0x00000000	/* ACK SIFS Increment (field) */ + +/* + * MIC QoS control register (?) + */ +#define	AR5K_MIC_QOS_CTL	0x8118			/* Register Address */ +#define	AR5K_MIC_QOS_CTL_0	0x00000001	/* MIC QoS control 0 (?) */ +#define	AR5K_MIC_QOS_CTL_1	0x00000004	/* MIC QoS control 1 (?) */ +#define	AR5K_MIC_QOS_CTL_2	0x00000010	/* MIC QoS control 2 (?) */ +#define	AR5K_MIC_QOS_CTL_3	0x00000040	/* MIC QoS control 3 (?) */ +#define	AR5K_MIC_QOS_CTL_4	0x00000100	/* MIC QoS control 4 (?) */ +#define	AR5K_MIC_QOS_CTL_5	0x00000400	/* MIC QoS control 5 (?) */ +#define	AR5K_MIC_QOS_CTL_6	0x00001000	/* MIC QoS control 6 (?) */ +#define	AR5K_MIC_QOS_CTL_7	0x00004000	/* MIC QoS control 7 (?) */ +#define	AR5K_MIC_QOS_CTL_MQ_EN	0x00010000	/* Enable MIC QoS */ + +/* + * MIC QoS select register (?) + */ +#define	AR5K_MIC_QOS_SEL	0x811c +#define	AR5K_MIC_QOS_SEL_0	0x00000001 +#define	AR5K_MIC_QOS_SEL_1	0x00000010 +#define	AR5K_MIC_QOS_SEL_2	0x00000100 +#define	AR5K_MIC_QOS_SEL_3	0x00001000 +#define	AR5K_MIC_QOS_SEL_4	0x00010000 +#define	AR5K_MIC_QOS_SEL_5	0x00100000 +#define	AR5K_MIC_QOS_SEL_6	0x01000000 +#define	AR5K_MIC_QOS_SEL_7	0x10000000 + +/* + * Misc mode control register (?) + */ +#define	AR5K_MISC_MODE			0x8120			/* Register Address */ +#define	AR5K_MISC_MODE_FBSSID_MATCH	0x00000001	/* Force BSSID match */ +#define	AR5K_MISC_MODE_ACKSIFS_MEM	0x00000002	/* ACK SIFS memory (?) */ +/* more bits */ + +/* + * OFDM Filter counter + */ +#define	AR5K_OFDM_FIL_CNT		0x8124 + +/* + * CCK Filter counter + */ +#define	AR5K_CCK_FIL_CNT		0x8128 + +/* + * PHY Error Counters (?) + */ +#define	AR5K_PHYERR_CNT1		0x812c +#define	AR5K_PHYERR_CNT1_MASK		0x8130 + +#define	AR5K_PHYERR_CNT2		0x8134 +#define	AR5K_PHYERR_CNT2_MASK		0x8138 + +/* + * TSF Threshold register (?) + */ +#define	AR5K_TSF_THRES			0x813c + +/* + * Rate -> ACK SIFS mapping table (32 entries) + */ +#define	AR5K_RATE_ACKSIFS_BASE		0x8680			/* Register Address */ +#define	AR5K_RATE_ACKSIFS(_n)		(AR5K_RATE_ACKSIFS_BSE + ((_n) << 2)) +#define	AR5K_RATE_ACKSIFS_NORMAL	0x00000001	/* Normal SIFS (field) */ +#define	AR5K_RATE_ACKSIFS_TURBO		0x00000400	/* Turbo SIFS (field) */ + +/* + * Rate -> duration mapping table (32 entries)   */  #define AR5K_RATE_DUR_BASE		0x8700  #define AR5K_RATE_DUR(_n)		(AR5K_RATE_DUR_BASE + ((_n) << 2)) +/* + * Rate -> db mapping table + * (8 entries, each one has 4 8bit fields) + */ +#define AR5K_RATE2DB_BASE		0x87c0 +#define AR5K_RATE2DB(_n)		(AR5K_RATE2DB_BASE + ((_n) << 2)) + +/* + * db -> Rate mapping table + * (8 entries, each one has 4 8bit fields) + */ +#define AR5K_DB2RATE_BASE		0x87e0 +#define AR5K_DB2RATE(_n)		(AR5K_DB2RATE_BASE + ((_n) << 2)) +  /*===5212 end===*/  /* @@ -1613,12 +1832,34 @@  /*===PHY REGISTERS===*/  /* - * PHY register + * PHY registers start   */  #define	AR5K_PHY_BASE			0x9800  #define	AR5K_PHY(_n)			(AR5K_PHY_BASE + ((_n) << 2)) -#define AR5K_PHY_SHIFT_2GHZ		0x00004007 -#define AR5K_PHY_SHIFT_5GHZ		0x00000007 + +/* + * TST_2 (Misc config parameters) + */ +#define	AR5K_PHY_TST2			0x9800			/* Register Address */ +#define AR5K_PHY_TST2_TRIG_SEL		0x00000001	/* Trigger select (?) (field ?) */ +#define AR5K_PHY_TST2_TRIG		0x00000010	/* Trigger (?) (field ?) */ +#define AR5K_PHY_TST2_CBUS_MODE		0x00000100	/* Cardbus mode (?) */ +/* bit reserved */ +#define AR5K_PHY_TST2_CLK32		0x00000400	/* CLK_OUT is CLK32 (32Khz external) */ +#define AR5K_PHY_TST2_CHANCOR_DUMP_EN	0x00000800	/* Enable Chancor dump (?) */ +#define AR5K_PHY_TST2_EVEN_CHANCOR_DUMP	0x00001000	/* Even Chancor dump (?) */ +#define AR5K_PHY_TST2_RFSILENT_EN	0x00002000	/* Enable RFSILENT */ +#define AR5K_PHY_TST2_ALT_RFDATA	0x00004000	/* Alternate RFDATA (5-2GHz switch) */ +#define AR5K_PHY_TST2_MINI_OBS_EN	0x00008000	/* Enable mini OBS (?) */ +#define AR5K_PHY_TST2_RX2_IS_RX5_INV	0x00010000	/* 2GHz rx path is the 5GHz path inverted (?) */ +#define AR5K_PHY_TST2_SLOW_CLK160	0x00020000	/* Slow CLK160 (?) */ +#define AR5K_PHY_TST2_AGC_OBS_SEL_3	0x00040000	/* AGC OBS Select 3 (?) */ +#define AR5K_PHY_TST2_BBB_OBS_SEL	0x00080000	/* BB OBS Select (field ?) */ +#define AR5K_PHY_TST2_ADC_OBS_SEL	0x00800000	/* ADC OBS Select (field ?) */ +#define AR5K_PHY_TST2_RX_CLR_SEL	0x08000000	/* RX Clear Select (?) */ +#define AR5K_PHY_TST2_FORCE_AGC_CLR	0x10000000	/* Force AGC clear (?) */ +#define AR5K_PHY_SHIFT_2GHZ		0x00004007	/* Used to access 2GHz radios */ +#define AR5K_PHY_SHIFT_5GHZ		0x00000007	/* Used to access 5GHz radios (default) */  /*   * PHY frame control register [5110] /turbo mode register [5111+] @@ -1630,18 +1871,21 @@   * a "turbo mode register" for 5110. We treat this one as   * a frame control register for 5110 below.   */ -#define	AR5K_PHY_TURBO			0x9804 -#define	AR5K_PHY_TURBO_MODE		0x00000001 -#define	AR5K_PHY_TURBO_SHORT		0x00000002 +#define	AR5K_PHY_TURBO			0x9804			/* Register Address */ +#define	AR5K_PHY_TURBO_MODE		0x00000001	/* Enable turbo mode */ +#define	AR5K_PHY_TURBO_SHORT		0x00000002	/* Short mode (20Mhz channels) (?) */  /*   * PHY agility command register + * (aka TST_1)   */ -#define	AR5K_PHY_AGC			0x9808 -#define	AR5K_PHY_AGC_DISABLE		0x08000000 +#define	AR5K_PHY_AGC			0x9808			/* Register Address */ +#define	AR5K_PHY_TST1			0x9808 +#define	AR5K_PHY_AGC_DISABLE		0x08000000	/* Disable AGC to A2 (?)*/ +#define	AR5K_PHY_TST1_TXHOLD		0x00003800	/* Set tx hold (?) */  /* - * PHY timing register [5112+] + * PHY timing register 3 [5112+]   */  #define	AR5K_PHY_TIMING_3		0x9814  #define	AR5K_PHY_TIMING_3_DSC_MAN	0xfffe0000 @@ -1657,26 +1901,81 @@  /*   * PHY activation register   */ -#define	AR5K_PHY_ACT			0x981c -#define	AR5K_PHY_ACT_ENABLE		0x00000001 -#define	AR5K_PHY_ACT_DISABLE		0x00000002 +#define	AR5K_PHY_ACT			0x981c			/* Register Address */ +#define	AR5K_PHY_ACT_ENABLE		0x00000001	/* Activate PHY */ +#define	AR5K_PHY_ACT_DISABLE		0x00000002	/* Deactivate PHY */ + +/* + * PHY RF control registers + * (i think these are delay times, + * these calibration values exist + * in EEPROM) + */ +#define AR5K_PHY_RF_CTL2		0x9824			/* Register Address */ +#define	AR5K_PHY_RF_CTL2_TXF2TXD_START	0x0000000f	/* Mask for TX frame to TX d(esc?) start */ + +#define AR5K_PHY_RF_CTL3		0x9828			/* Register Address */ +#define AR5K_PHY_RF_CTL3_TXE2XLNA_ON	0x0000000f	/* Mask for TX end to XLNA on */ + +#define AR5K_PHY_RF_CTL4		0x9834			/* Register Address */ +#define AR5K_PHY_RF_CTL4_TXF2XPA_A_ON	0x00000001	/* TX frame to XPA A on (field) */ +#define AR5K_PHY_RF_CTL4_TXF2XPA_B_ON	0x00000100	/* TX frame to XPA B on (field) */ +#define	AR5K_PHY_RF_CTL4_TXE2XPA_A_OFF	0x00010000	/* TX end to XPA A off (field) */ +#define AR5K_PHY_RF_CTL4_TXE2XPA_B_OFF	0x01000000	/* TX end to XPA B off (field) */ + +/* + * Pre-Amplifier control register + * (XPA -> external pre-amplifier) + */ +#define	AR5K_PHY_PA_CTL			0x9838			/* Register Address */ +#define	AR5K_PHY_PA_CTL_XPA_A_HI	0x00000001	/* XPA A high (?) */ +#define	AR5K_PHY_PA_CTL_XPA_B_HI	0x00000002	/* XPA B high (?) */ +#define	AR5K_PHY_PA_CTL_XPA_A_EN	0x00000004	/* Enable XPA A */ +#define	AR5K_PHY_PA_CTL_XPA_B_EN	0x00000008	/* Enable XPA B */ + +/* + * PHY settling register + */ +#define AR5K_PHY_SETTLING		0x9844			/* Register Address */ +#define	AR5K_PHY_SETTLING_AGC		0x0000007f	/* Mask for AGC settling time */ +#define	AR5K_PHY_SETTLING_SWITCH	0x00003f80	/* Mask for Switch settlig time */ + +/* + * PHY Gain registers + */ +#define AR5K_PHY_GAIN			0x9848			/* Register Address */ +#define	AR5K_PHY_GAIN_TXRX_ATTEN	0x0003f000	/* Mask for TX-RX Attenuation */ + +#define	AR5K_PHY_GAIN_OFFSET		0x984c			/* Register Address */ +#define	AR5K_PHY_GAIN_OFFSET_RXTX_FLAG	0x00020000	/* RX-TX flag (?) */ + +/* + * Desired size register + * (for more infos read ANI patent) + */ +#define AR5K_PHY_DESIRED_SIZE		0x9850			/* Register Address */ +#define	AR5K_PHY_DESIRED_SIZE_ADC	0x000000ff	/* Mask for ADC desired size */ +#define	AR5K_PHY_DESIRED_SIZE_PGA	0x0000ff00	/* Mask for PGA desired size */ +#define	AR5K_PHY_DESIRED_SIZE_TOT	0x0ff00000	/* Mask for Total desired size (?) */  /*   * PHY signal register + * (for more infos read ANI patent)   */ -#define	AR5K_PHY_SIG			0x9858 -#define	AR5K_PHY_SIG_FIRSTEP		0x0003f000 +#define	AR5K_PHY_SIG			0x9858			/* Register Address */ +#define	AR5K_PHY_SIG_FIRSTEP		0x0003f000	/* Mask for FIRSTEP */  #define	AR5K_PHY_SIG_FIRSTEP_S		12 -#define	AR5K_PHY_SIG_FIRPWR		0x03fc0000 +#define	AR5K_PHY_SIG_FIRPWR		0x03fc0000	/* Mask for FIPWR */  #define	AR5K_PHY_SIG_FIRPWR_S		18  /*   * PHY coarse agility control register + * (for more infos read ANI patent)   */ -#define	AR5K_PHY_AGCCOARSE		0x985c -#define	AR5K_PHY_AGCCOARSE_LO		0x00007f80 +#define	AR5K_PHY_AGCCOARSE		0x985c			/* Register Address */ +#define	AR5K_PHY_AGCCOARSE_LO		0x00007f80	/* Mask for AGC Coarse low */  #define	AR5K_PHY_AGCCOARSE_LO_S		7 -#define	AR5K_PHY_AGCCOARSE_HI		0x003f8000 +#define	AR5K_PHY_AGCCOARSE_HI		0x003f8000	/* Mask for AGC Coarse high */  #define	AR5K_PHY_AGCCOARSE_HI_S		15  /* @@ -1689,12 +1988,13 @@  /*   * PHY noise floor status register   */ -#define AR5K_PHY_NF			0x9864 -#define AR5K_PHY_NF_M			0x000001ff -#define AR5K_PHY_NF_ACTIVE		0x00000100 +#define AR5K_PHY_NF			0x9864			/* Register address */ +#define AR5K_PHY_NF_M			0x000001ff	/* Noise floor mask */ +#define AR5K_PHY_NF_ACTIVE		0x00000100	/* Noise floor calibration still active */  #define AR5K_PHY_NF_RVAL(_n)		(((_n) >> 19) & AR5K_PHY_NF_M)  #define AR5K_PHY_NF_AVAL(_n)		(-((_n) ^ AR5K_PHY_NF_M) + 1)  #define AR5K_PHY_NF_SVAL(_n)		(((_n) & AR5K_PHY_NF_M) | (1 << 9)) +#define	AR5K_PHY_NF_THRESH62		0x00001000	/* Thresh62 -check ANI patent- (field) */  /*   * PHY ADC saturation register [5110] @@ -1706,6 +2006,30 @@  #define	AR5K_PHY_ADCSAT_THR_S		5  /* + * PHY Weak ofdm signal detection threshold registers (ANI) [5212+] + */ + +/* High thresholds */ +#define AR5K_PHY_WEAK_OFDM_HIGH_THR		0x9868 +#define AR5K_PHY_WEAK_OFDM_HIGH_THR_M2_COUNT	0x0000001f +#define AR5K_PHY_WEAK_OFDM_HIGH_THR_M2_COUNT_S	0 +#define AR5K_PHY_WEAK_OFDM_HIGH_THR_M1		0x00fe0000 +#define AR5K_PHY_WEAK_OFDM_HIGH_THR_M1_S	17 +#define AR5K_PHY_WEAK_OFDM_HIGH_THR_M2		0x7f000000 +#define AR5K_PHY_WEAK_OFDM_HIGH_THR_M2_S	24 + +/* Low thresholds */ +#define AR5K_PHY_WEAK_OFDM_LOW_THR 		0x986c +#define AR5K_PHY_WEAK_OFDM_LOW_THR_SELFCOR_EN	0x00000001 +#define AR5K_PHY_WEAK_OFDM_LOW_THR_M2_COUNT	0x00003f00 +#define AR5K_PHY_WEAK_OFDM_LOW_THR_M2_COUNT_S	8 +#define AR5K_PHY_WEAK_OFDM_LOW_THR_M1		0x001fc000 +#define AR5K_PHY_WEAK_OFDM_LOW_THR_M1_S		14 +#define AR5K_PHY_WEAK_OFDM_LOW_THR_M2		0x0fe00000 +#define AR5K_PHY_WEAK_OFDM_LOW_THR_M2_S		21 + + +/*   * PHY sleep registers [5112+]   */  #define AR5K_PHY_SCR			0x9870 @@ -1730,6 +2054,8 @@  					AR5K_PHY_PLL_44MHZ_5211 : AR5K_PHY_PLL_44MHZ_5212)  #define AR5K_PHY_PLL_RF5111		0x00000000  #define AR5K_PHY_PLL_RF5112		0x00000040 +#define	AR5K_PHY_PLL_HALF_RATE		0x00000100 +#define	AR5K_PHY_PLL_QUARTER_RATE	0x00000200  /*   * RF Buffer register @@ -1792,23 +2118,74 @@  #define AR5K_PHY_RFSTG_DISABLE		0x00000021  /* + * PHY Antenna control register + */ +#define AR5K_PHY_ANT_CTL		0x9910			/* Register Address */ +#define	AR5K_PHY_ANT_CTL_TXRX_EN	0x00000001	/* Enable TX/RX (?) */ +#define	AR5K_PHY_ANT_CTL_SECTORED_ANT	0x00000004	/* Sectored Antenna */ +#define	AR5K_PHY_ANT_CTL_HITUNE5	0x00000008	/* Hitune5 (?) */ +#define	AR5K_PHY_ANT_CTL_SWTABLE_IDLE	0x00000010	/* Switch table idle (?) */ + +/*   * PHY receiver delay register [5111+]   */ -#define	AR5K_PHY_RX_DELAY		0x9914 -#define	AR5K_PHY_RX_DELAY_M		0x00003fff +#define	AR5K_PHY_RX_DELAY		0x9914			/* Register Address */ +#define	AR5K_PHY_RX_DELAY_M		0x00003fff	/* Mask for RX activate to receive delay (/100ns) */ + +/* + * PHY max rx length register (?) [5111] + */ +#define	AR5K_PHY_MAX_RX_LEN		0x991c  /* - * PHY timing I(nphase) Q(adrature) control register [5111+] + * PHY timing register 4 + * I(nphase)/Q(adrature) calibration register [5111+]   */ -#define	AR5K_PHY_IQ			0x9920		/* Register address */ +#define	AR5K_PHY_IQ			0x9920			/* Register Address */  #define	AR5K_PHY_IQ_CORR_Q_Q_COFF	0x0000001f	/* Mask for q correction info */  #define	AR5K_PHY_IQ_CORR_Q_I_COFF	0x000007e0	/* Mask for i correction info */  #define	AR5K_PHY_IQ_CORR_Q_I_COFF_S	5  #define	AR5K_PHY_IQ_CORR_ENABLE		0x00000800	/* Enable i/q correction */ -#define	AR5K_PHY_IQ_CAL_NUM_LOG_MAX	0x0000f000 +#define	AR5K_PHY_IQ_CAL_NUM_LOG_MAX	0x0000f000	/* Mask for max number of samples in log scale */  #define	AR5K_PHY_IQ_CAL_NUM_LOG_MAX_S	12  #define	AR5K_PHY_IQ_RUN			0x00010000	/* Run i/q calibration */ +#define	AR5K_PHY_IQ_USE_PT_DF		0x00020000	/* Use pilot track df (?) */ +#define	AR5K_PHY_IQ_EARLY_TRIG_THR	0x00200000	/* Early trigger threshold (?) (field) */ +#define	AR5K_PHY_IQ_PILOT_MASK_EN	0x10000000	/* Enable pilot mask (?) */ +#define	AR5K_PHY_IQ_CHAN_MASK_EN	0x20000000	/* Enable channel mask (?) */ +#define	AR5K_PHY_IQ_SPUR_FILT_EN	0x40000000	/* Enable spur filter */ +#define	AR5K_PHY_IQ_SPUR_RSSI_EN	0x80000000	/* Enable spur rssi */ + +/* + * PHY timing register 5 + * OFDM Self-correlator Cyclic RSSI threshold params + * (Check out bb_cycpwr_thr1 on ANI patent) + */ +#define	AR5K_PHY_OFDM_SELFCORR			0x9924			/* Register Address */ +#define	AR5K_PHY_OFDM_SELFCORR_CYPWR_THR1_EN	0x00000001	/* Enable cyclic RSSI thr 1 */ +#define	AR5K_PHY_OFDM_SELFCORR_CYPWR_THR1	0x000000fe	/* Mask for Cyclic RSSI threshold 1 */ +#define	AR5K_PHY_OFDM_SELFCORR_CYPWR_THR3	0x00000100	/* Cyclic RSSI threshold 3 (field) (?) */ +#define	AR5K_PHY_OFDM_SELFCORR_RSSI_1ATHR_EN	0x00008000	/* Enable 1A RSSI threshold (?) */ +#define	AR5K_PHY_OFDM_SELFCORR_RSSI_1ATHR	0x00010000	/* 1A RSSI threshold (field) (?) */ +#define	AR5K_PHY_OFDM_SELFCORR_LSCTHR_HIRSSI	0x00800000	/* Long sc threshold hi rssi (?) */ +/* + * PHY-only warm reset register + */ +#define	AR5K_PHY_WARM_RESET		0x9928 + +/* + * PHY-only control register + */ +#define AR5K_PHY_CTL			0x992c			/* Register Address */ +#define	AR5K_PHY_CTL_RX_DRAIN_RATE	0x00000001	/* RX drain rate (?) */ +#define	AR5K_PHY_CTL_LATE_TX_SIG_SYM	0x00000002	/* Late tx signal symbol (?) */ +#define	AR5K_PHY_CTL_GEN_SCRAMBLER	0x00000004	/* Generate scrambler */ +#define	AR5K_PHY_CTL_TX_ANT_SEL		0x00000008	/* TX antenna select */ +#define	AR5K_PHY_CTL_TX_ANT_STATIC	0x00000010	/* Static TX antenna */ +#define	AR5K_PHY_CTL_RX_ANT_SEL		0x00000020	/* RX antenna select */ +#define	AR5K_PHY_CTL_RX_ANT_STATIC	0x00000040	/* Static RX antenna */ +#define	AR5K_PHY_CTL_LOW_FREQ_SLE_EN	0x00000080	/* Enable low freq sleep */  /*   * PHY PAPD probe register [5111+ (?)] @@ -1816,9 +2193,13 @@   * Because it's always 0 in 5211 initialization code   */  #define	AR5K_PHY_PAPD_PROBE		0x9930 +#define	AR5K_PHY_PAPD_PROBE_SH_HI_PAR	0x00000001 +#define	AR5K_PHY_PAPD_PROBE_PCDAC_BIAS	0x00000002 +#define	AR5K_PHY_PAPD_PROBE_COMP_GAIN	0x00000040  #define	AR5K_PHY_PAPD_PROBE_TXPOWER	0x00007e00  #define	AR5K_PHY_PAPD_PROBE_TXPOWER_S	9  #define	AR5K_PHY_PAPD_PROBE_TX_NEXT	0x00008000 +#define	AR5K_PHY_PAPD_PROBE_PREDIST_EN	0x00010000  #define	AR5K_PHY_PAPD_PROBE_TYPE	0x01800000	/* [5112+] */  #define	AR5K_PHY_PAPD_PROBE_TYPE_S	23  #define	AR5K_PHY_PAPD_PROBE_TYPE_OFDM	0 @@ -1848,15 +2229,16 @@  #define	AR5K_PHY_FRAME_CTL		(ah->ah_version == AR5K_AR5210 ? \  					AR5K_PHY_FRAME_CTL_5210 : AR5K_PHY_FRAME_CTL_5211)  /*---[5111+]---*/ -#define	AR5K_PHY_FRAME_CTL_TX_CLIP	0x00000038 +#define	AR5K_PHY_FRAME_CTL_TX_CLIP	0x00000038	/* Mask for tx clip (?) */  #define	AR5K_PHY_FRAME_CTL_TX_CLIP_S	3 +#define	AR5K_PHY_FRAME_CTL_PREP_CHINFO	0x00010000	/* Prepend chan info */  /*---[5110/5111]---*/ -#define	AR5K_PHY_FRAME_CTL_TIMING_ERR	0x01000000 -#define	AR5K_PHY_FRAME_CTL_PARITY_ERR	0x02000000 -#define	AR5K_PHY_FRAME_CTL_ILLRATE_ERR	0x04000000	/* illegal rate */ -#define	AR5K_PHY_FRAME_CTL_ILLLEN_ERR	0x08000000	/* illegal length */ +#define	AR5K_PHY_FRAME_CTL_TIMING_ERR	0x01000000	/* PHY timing error */ +#define	AR5K_PHY_FRAME_CTL_PARITY_ERR	0x02000000	/* Parity error */ +#define	AR5K_PHY_FRAME_CTL_ILLRATE_ERR	0x04000000	/* Illegal rate */ +#define	AR5K_PHY_FRAME_CTL_ILLLEN_ERR	0x08000000	/* Illegal length */  #define	AR5K_PHY_FRAME_CTL_SERVICE_ERR	0x20000000 -#define	AR5K_PHY_FRAME_CTL_TXURN_ERR	0x40000000	/* tx underrun */ +#define	AR5K_PHY_FRAME_CTL_TXURN_ERR	0x40000000	/* TX underrun */  #define AR5K_PHY_FRAME_CTL_INI		AR5K_PHY_FRAME_CTL_SERVICE_ERR | \  			AR5K_PHY_FRAME_CTL_TXURN_ERR | \  			AR5K_PHY_FRAME_CTL_ILLLEN_ERR | \ @@ -1915,6 +2297,11 @@ after DFS is enabled */  #define AR5K_PHY_ANT_SWITCH_TABLE_1	0x9964  /* + * PHY Noise floor threshold + */ +#define AR5K_PHY_NFTHRES		0x9968 + +/*   * PHY clock sleep registers [5112+]   */  #define AR5K_PHY_SCLOCK			0x99f0 @@ -1922,56 +2309,116 @@ after DFS is enabled */  #define AR5K_PHY_SDELAY			0x99f4  #define AR5K_PHY_SDELAY_32MHZ		0x000000ff  #define AR5K_PHY_SPENDING		0x99f8 +#define	AR5K_PHY_SPENDING_14		0x00000014 +#define	AR5K_PHY_SPENDING_18		0x00000018  #define AR5K_PHY_SPENDING_RF5111	0x00000018 -#define AR5K_PHY_SPENDING_RF5112	0x00000014 /* <- i 've only seen this on 2425 dumps ! */ -#define AR5K_PHY_SPENDING_RF5112A	0x0000000e /* but since i only have 5112A-based chips */ -#define AR5K_PHY_SPENDING_RF5424	0x00000012 /* to test it might be also for old 5112.  */ +#define AR5K_PHY_SPENDING_RF5112	0x00000014 +/* #define AR5K_PHY_SPENDING_RF5112A	0x0000000e */ +/* #define AR5K_PHY_SPENDING_RF5424	0x00000012 */ +#define	AR5K_PHY_SPENDING_RF5413	0x00000014 +#define	AR5K_PHY_SPENDING_RF2413	0x00000014 +#define AR5K_PHY_SPENDING_RF2425	0x00000018  /*   * Misc PHY/radio registers [5110 - 5111]   */ -#define	AR5K_BB_GAIN_BASE		0x9b00 /* BaseBand Amplifier Gain table base address */ +#define	AR5K_BB_GAIN_BASE		0x9b00	/* BaseBand Amplifier Gain table base address */  #define AR5K_BB_GAIN(_n)		(AR5K_BB_GAIN_BASE + ((_n) << 2)) -#define	AR5K_RF_GAIN_BASE		0x9a00 /* RF Amplrifier Gain table base address */ +#define	AR5K_RF_GAIN_BASE		0x9a00	/* RF Amplrifier Gain table base address */  #define AR5K_RF_GAIN(_n)		(AR5K_RF_GAIN_BASE + ((_n) << 2))  /*   * PHY timing IQ calibration result register [5111+]   */ -#define	AR5K_PHY_IQRES_CAL_PWR_I	0x9c10 /* I (Inphase) power value */ -#define	AR5K_PHY_IQRES_CAL_PWR_Q	0x9c14 /* Q (Quadrature) power value */ +#define	AR5K_PHY_IQRES_CAL_PWR_I	0x9c10	/* I (Inphase) power value */ +#define	AR5K_PHY_IQRES_CAL_PWR_Q	0x9c14	/* Q (Quadrature) power value */  #define	AR5K_PHY_IQRES_CAL_CORR		0x9c18	/* I/Q Correlation */  /*   * PHY current RSSI register [5111+]   */ -#define	AR5K_PHY_CURRENT_RSSI		0x9c1c +#define	AR5K_PHY_CURRENT_RSSI	0x9c1c + +/* + * PHY RF Bus grant register (?) + */ +#define	AR5K_PHY_RFBUS_GRANT	0x9c20 + +/* + * PHY ADC test register + */ +#define	AR5K_PHY_ADC_TEST	0x9c24 +#define	AR5K_PHY_ADC_TEST_I	0x00000001 +#define	AR5K_PHY_ADC_TEST_Q	0x00000200 + +/* + * PHY DAC test register + */ +#define	AR5K_PHY_DAC_TEST	0x9c28 +#define	AR5K_PHY_DAC_TEST_I	0x00000001 +#define	AR5K_PHY_DAC_TEST_Q	0x00000200 + +/* + * PHY PTAT register (?) + */ +#define	AR5K_PHY_PTAT		0x9c2c + +/* + * PHY Illegal TX rate register [5112+] + */ +#define	AR5K_PHY_BAD_TX_RATE	0x9c30 + +/* + * PHY SPUR Power register [5112+] + */ +#define	AR5K_PHY_SPUR_PWR	0x9c34			/* Register Address */ +#define	AR5K_PHY_SPUR_PWR_I	0x00000001	/* SPUR Power estimate for I (field) */ +#define	AR5K_PHY_SPUR_PWR_Q	0x00000100	/* SPUR Power estimate for Q (field) */ +#define	AR5K_PHY_SPUR_PWR_FILT	0x00010000	/* Power with SPUR removed (field) */ + +/* + * PHY Channel status register [5112+] (?) + */ +#define	AR5K_PHY_CHAN_STATUS		0x9c38 +#define	AR5K_PHY_CHAN_STATUS_BT_ACT	0x00000001 +#define	AR5K_PHY_CHAN_STATUS_RX_CLR_RAW	0x00000002 +#define	AR5K_PHY_CHAN_STATUS_RX_CLR_MAC	0x00000004 +#define	AR5K_PHY_CHAN_STATUS_RX_CLR_PAP	0x00000008 + +/* + * PHY PAPD I (power?) table (?) + * (92! entries) + */ +#define	AR5K_PHY_PAPD_I_BASE	0xa000 +#define	AR5K_PHY_PAPD_I(_n)	(AR5K_PHY_PAPD_I_BASE + ((_n) << 2))  /*   * PHY PCDAC TX power table   */  #define	AR5K_PHY_PCDAC_TXPOWER_BASE_5211	0xa180 -#define AR5K_PHY_PCDAC_TXPOWER_BASE_5413	0xa280 -#define AR5K_PHY_PCDAC_TXPOWER_BASE	(ah->ah_radio >= AR5K_RF5413 ? \ -					AR5K_PHY_PCDAC_TXPOWER_BASE_5413 :\ +#define AR5K_PHY_PCDAC_TXPOWER_BASE_2413	0xa280 +#define AR5K_PHY_PCDAC_TXPOWER_BASE	(ah->ah_radio >= AR5K_RF2413 ? \ +					AR5K_PHY_PCDAC_TXPOWER_BASE_2413 :\  					AR5K_PHY_PCDAC_TXPOWER_BASE_5211)  #define	AR5K_PHY_PCDAC_TXPOWER(_n)	(AR5K_PHY_PCDAC_TXPOWER_BASE + ((_n) << 2))  /*   * PHY mode register [5111+]   */ -#define	AR5K_PHY_MODE			0x0a200		/* Register address */ -#define	AR5K_PHY_MODE_MOD		0x00000001	/* PHY Modulation mask*/ +#define	AR5K_PHY_MODE			0x0a200			/* Register Address */ +#define	AR5K_PHY_MODE_MOD		0x00000001	/* PHY Modulation bit */  #define AR5K_PHY_MODE_MOD_OFDM		0  #define AR5K_PHY_MODE_MOD_CCK		1 -#define AR5K_PHY_MODE_FREQ		0x00000002	/* Freq mode mask */ +#define AR5K_PHY_MODE_FREQ		0x00000002	/* Freq mode bit */  #define	AR5K_PHY_MODE_FREQ_5GHZ		0  #define	AR5K_PHY_MODE_FREQ_2GHZ		2 -#define AR5K_PHY_MODE_MOD_DYN		0x00000004	/* Dynamic OFDM/CCK mode mask [5112+] */ +#define AR5K_PHY_MODE_MOD_DYN		0x00000004	/* Enable Dynamic OFDM/CCK mode [5112+] */  #define AR5K_PHY_MODE_RAD		0x00000008	/* [5212+] */  #define AR5K_PHY_MODE_RAD_RF5111	0  #define AR5K_PHY_MODE_RAD_RF5112	8 -#define AR5K_PHY_MODE_XR		0x00000010	/* [5112+] */ +#define AR5K_PHY_MODE_XR		0x00000010	/* Enable XR mode [5112+] */ +#define	AR5K_PHY_MODE_HALF_RATE		0x00000020	/* Enable Half rate (test) */ +#define	AR5K_PHY_MODE_QUARTER_RATE	0x00000040	/* Enable Quarter rat (test) */  /*   * PHY CCK transmit control register [5111+ (?)] @@ -1979,6 +2426,15 @@ after DFS is enabled */  #define AR5K_PHY_CCKTXCTL		0xa204  #define AR5K_PHY_CCKTXCTL_WORLD		0x00000000  #define AR5K_PHY_CCKTXCTL_JAPAN		0x00000010 +#define	AR5K_PHY_CCKTXCTL_SCRAMBLER_DIS	0x00000001 +#define	AR5K_PHY_CCKTXCTK_DAC_SCALE	0x00000004 + +/* + * PHY CCK Cross-correlator Barker RSSI threshold register [5212+] + */ +#define AR5K_PHY_CCK_CROSSCORR			0xa208 +#define AR5K_PHY_CCK_CROSSCORR_WEAK_SIG_THR	0x0000000f +#define AR5K_PHY_CCK_CROSSCORR_WEAK_SIG_THR_S	0  /*   * PHY 2GHz gain register [5111+] diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index 846a7d05185..36e8d2f6e7b 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c @@ -305,9 +305,10 @@ static inline void ipw_write_reg32(struct ipw_priv *a, u32 b, u32 c)  #define _ipw_write8(ipw, ofs, val) writeb((val), (ipw)->hw_base + (ofs))  /* 8-bit direct write (for low 4K of SRAM/regs), with debug wrapper */ -#define ipw_write8(ipw, ofs, val) \ +#define ipw_write8(ipw, ofs, val) do { \   IPW_DEBUG_IO("%s %d: write_direct8(0x%08X, 0x%08X)\n", __FILE__, __LINE__, (u32)(ofs), (u32)(val)); \ - _ipw_write8(ipw, ofs, val) + _ipw_write8(ipw, ofs, val); \ + } while (0)  /* 16-bit direct write (low 4K) */  #define _ipw_write16(ipw, ofs, val) writew((val), (ipw)->hw_base + (ofs)) diff --git a/drivers/net/wireless/iwlwifi/Kconfig b/drivers/net/wireless/iwlwifi/Kconfig index 82b66a3d3a5..b0ac0ce3fb9 100644 --- a/drivers/net/wireless/iwlwifi/Kconfig +++ b/drivers/net/wireless/iwlwifi/Kconfig @@ -14,18 +14,49 @@ config IWLWIFI_LEDS  	default n  config IWLWIFI_RFKILL -	boolean "IWLWIFI RF kill support" +	boolean "Iwlwifi RF kill support"  	depends on IWLCORE -config IWL4965 -	tristate "Intel Wireless WiFi 4965AGN" +config IWLWIFI_DEBUG +	bool "Enable full debugging output in iwlagn driver" +	depends on IWLCORE +	---help--- +	  This option will enable debug tracing output for the iwlwifi drivers + +	  This will result in the kernel module being ~100k larger.  You can +	  control which debug output is sent to the kernel log by setting the +	  value in + +		/sys/class/net/wlan0/device/debug_level + +	  This entry will only exist if this option is enabled. + +	  To set a value, simply echo an 8-byte hex value to the same file: + +		  % echo 0x43fff > /sys/class/net/wlan0/device/debug_level + +	  You can find the list of debug mask values in: +		  drivers/net/wireless/iwlwifi/iwl-debug.h + +	  If this is your first time using this driver, you should say Y here +	  as the debug information can assist others in helping you resolve +	  any problems you may encounter. + +config IWLWIFI_DEBUGFS +        bool "Iwlwifi debugfs support" +        depends on IWLCORE && IWLWIFI_DEBUG && MAC80211_DEBUGFS +        ---help--- +	  Enable creation of debugfs files for the iwlwifi drivers. + +config IWLAGN +	tristate "Intel Wireless WiFi Next Gen AGN"  	depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL  	select FW_LOADER  	select IWLCORE  	---help---  	  Select to build the driver supporting the: -	  Intel Wireless WiFi Link 4965AGN +	  Intel Wireless WiFi Link Next-Gen AGN  	  This driver uses the kernel's mac80211 subsystem. @@ -42,60 +73,33 @@ config IWL4965  	  If you want to compile the driver as a module ( = code which can be  	  inserted in and removed from the running kernel whenever you want),  	  say M here and read <file:Documentation/kbuild/modules.txt>.  The -	  module will be called iwl4965.ko. - -config IWL4965_LEDS -	bool "Enable LEDS features in iwl4965 driver" -	depends on IWL4965 -	select IWLWIFI_LEDS -	---help--- -	  This option enables LEDS for the iwlwifi drivers +	  module will be called iwlagn.ko. - -config IWL4965_SPECTRUM_MEASUREMENT -	bool "Enable Spectrum Measurement in iwl4965 driver" -	depends on IWL4965 +config IWLAGN_SPECTRUM_MEASUREMENT +	bool "Enable Spectrum Measurement in iwlagn driver" +	depends on IWLAGN  	---help--- -	  This option will enable spectrum measurement for the iwl4965 driver. +	  This option will enable spectrum measurement for the iwlagn driver. -config IWLWIFI_DEBUG -	bool "Enable full debugging output in iwl4965 driver" -	depends on IWL4965 +config IWLAGN_LEDS +	bool "Enable LEDS features in iwlagn driver" +	depends on IWLAGN +	select IWLWIFI_LEDS  	---help--- -	  This option will enable debug tracing output for the iwl4965 -	  driver. - -	  This will result in the kernel module being ~100k larger.  You can -	  control which debug output is sent to the kernel log by setting the -	  value in - -		/sys/class/net/wlan0/device/debug_level - -	  This entry will only exist if this option is enabled. - -	  To set a value, simply echo an 8-byte hex value to the same file: - -		  % echo 0x43fff > /sys/class/net/wlan0/device/debug_level +	  This option enables LEDS for the iwlagn drivers -	  You can find the list of debug mask values in: -		  drivers/net/wireless/iwlwifi/iwl-4965-debug.h -	  If this is your first time using this driver, you should say Y here -	  as the debug information can assist others in helping you resolve -	  any problems you may encounter. +config IWL4965 +	bool "Intel Wireless WiFi 4965AGN" +	depends on IWLAGN +	---help--- +	  This option enables support for Intel Wireless WiFi Link 4965AGN  config IWL5000  	bool "Intel Wireless WiFi 5000AGN" -	depends on IWL4965 +	depends on IWLAGN  	---help---  	  This option enables support for Intel Wireless WiFi Link 5000AGN Family -	  Dependency on 4965 is temporary - -config IWLWIFI_DEBUGFS -        bool "Iwlwifi debugfs support" -        depends on IWLCORE && IWLWIFI_DEBUG && MAC80211_DEBUGFS -        ---help--- -	  Enable creation of debugfs files for the iwlwifi drivers.  config IWL3945  	tristate "Intel PRO/Wireless 3945ABG/BG Network Connection" diff --git a/drivers/net/wireless/iwlwifi/Makefile b/drivers/net/wireless/iwlwifi/Makefile index 1f52b92f08b..47aa28f6a51 100644 --- a/drivers/net/wireless/iwlwifi/Makefile +++ b/drivers/net/wireless/iwlwifi/Makefile @@ -6,15 +6,14 @@ iwlcore-$(CONFIG_IWLWIFI_DEBUGFS) += iwl-debugfs.o  iwlcore-$(CONFIG_IWLWIFI_LEDS) += iwl-led.o  iwlcore-$(CONFIG_IWLWIFI_RFKILL) += iwl-rfkill.o +obj-$(CONFIG_IWLAGN)	+= iwlagn.o +iwlagn-objs		:= iwl-agn.o iwl-agn-rs.o + +iwlagn-$(CONFIG_IWL4965) += iwl-4965.o +iwlagn-$(CONFIG_IWL5000) += iwl-5000.o +  obj-$(CONFIG_IWL3945)	+= iwl3945.o  iwl3945-objs		:= iwl3945-base.o iwl-3945.o iwl-3945-rs.o  iwl3945-$(CONFIG_IWL3945_LEDS) += iwl-3945-led.o -obj-$(CONFIG_IWL4965)	+= iwl4965.o -iwl4965-objs		:= iwl4965-base.o iwl-4965.o iwl-4965-rs.o - -ifeq ($(CONFIG_IWL5000),y) -	iwl4965-objs += iwl-5000.o -endif - diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-led.c b/drivers/net/wireless/iwlwifi/iwl-3945-led.c index 6be1fe13fa5..d3336966b6b 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945-led.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945-led.c @@ -206,12 +206,12 @@ static void iwl3945_led_brightness_set(struct led_classdev *led_cdev,  static int iwl3945_led_register_led(struct iwl3945_priv *priv,  				   struct iwl3945_led *led,  				   enum led_type type, u8 set_led, -				   const char *name, char *trigger) +				   char *trigger)  {  	struct device *device = wiphy_dev(priv->hw->wiphy);  	int ret; -	led->led_dev.name = name; +	led->led_dev.name = led->name;  	led->led_dev.brightness_set = iwl3945_led_brightness_set;  	led->led_dev.default_trigger = trigger; @@ -308,7 +308,6 @@ void iwl3945_led_background(struct iwl3945_priv *priv)  int iwl3945_led_register(struct iwl3945_priv *priv)  {  	char *trigger; -	char name[32];  	int ret;  	priv->last_blink_rate = 0; @@ -318,7 +317,8 @@ int iwl3945_led_register(struct iwl3945_priv *priv)  	priv->allow_blinking = 0;  	trigger = ieee80211_get_radio_led_name(priv->hw); -	snprintf(name, sizeof(name), "iwl-%s:radio", +	snprintf(priv->led[IWL_LED_TRG_RADIO].name, +		 sizeof(priv->led[IWL_LED_TRG_RADIO].name), "iwl-%s:radio",  		 wiphy_name(priv->hw->wiphy));  	priv->led[IWL_LED_TRG_RADIO].led_on = iwl3945_led_on; @@ -327,19 +327,20 @@ int iwl3945_led_register(struct iwl3945_priv *priv)  	ret = iwl3945_led_register_led(priv,  				   &priv->led[IWL_LED_TRG_RADIO], -				   IWL_LED_TRG_RADIO, 1, -				   name, trigger); +				   IWL_LED_TRG_RADIO, 1, trigger); +  	if (ret)  		goto exit_fail;  	trigger = ieee80211_get_assoc_led_name(priv->hw); -	snprintf(name, sizeof(name), "iwl-%s:assoc", +	snprintf(priv->led[IWL_LED_TRG_ASSOC].name, +		 sizeof(priv->led[IWL_LED_TRG_ASSOC].name), "iwl-%s:assoc",  		 wiphy_name(priv->hw->wiphy));  	ret = iwl3945_led_register_led(priv,  				   &priv->led[IWL_LED_TRG_ASSOC], -				   IWL_LED_TRG_ASSOC, 0, -				   name, trigger); +				   IWL_LED_TRG_ASSOC, 0, trigger); +  	/* for assoc always turn led on */  	priv->led[IWL_LED_TRG_ASSOC].led_on = iwl3945_led_on;  	priv->led[IWL_LED_TRG_ASSOC].led_off = iwl3945_led_on; @@ -349,14 +350,13 @@ int iwl3945_led_register(struct iwl3945_priv *priv)  		goto exit_fail;  	trigger = ieee80211_get_rx_led_name(priv->hw); -	snprintf(name, sizeof(name), "iwl-%s:RX", +	snprintf(priv->led[IWL_LED_TRG_RX].name, +		 sizeof(priv->led[IWL_LED_TRG_RX].name), "iwl-%s:RX",  		 wiphy_name(priv->hw->wiphy)); -  	ret = iwl3945_led_register_led(priv,  				   &priv->led[IWL_LED_TRG_RX], -				   IWL_LED_TRG_RX, 0, -				   name, trigger); +				   IWL_LED_TRG_RX, 0, trigger);  	priv->led[IWL_LED_TRG_RX].led_on = iwl3945_led_associated;  	priv->led[IWL_LED_TRG_RX].led_off = iwl3945_led_associated; @@ -366,13 +366,14 @@ int iwl3945_led_register(struct iwl3945_priv *priv)  		goto exit_fail;  	trigger = ieee80211_get_tx_led_name(priv->hw); -	snprintf(name, sizeof(name), "iwl-%s:TX", +	snprintf(priv->led[IWL_LED_TRG_TX].name, +		 sizeof(priv->led[IWL_LED_TRG_TX].name), "iwl-%s:TX",  		 wiphy_name(priv->hw->wiphy));  	ret = iwl3945_led_register_led(priv,  				   &priv->led[IWL_LED_TRG_TX], -				   IWL_LED_TRG_TX, 0, -				   name, trigger); +				   IWL_LED_TRG_TX, 0, trigger); +  	priv->led[IWL_LED_TRG_TX].led_on = iwl3945_led_associated;  	priv->led[IWL_LED_TRG_TX].led_off = iwl3945_led_associated;  	priv->led[IWL_LED_TRG_TX].led_pattern = iwl3945_led_pattern; diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-led.h b/drivers/net/wireless/iwlwifi/iwl-3945-led.h index 47b7e0bac80..2fbd126c134 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945-led.h +++ b/drivers/net/wireless/iwlwifi/iwl-3945-led.h @@ -50,6 +50,7 @@ enum led_type {  struct iwl3945_led {  	struct iwl3945_priv *priv;  	struct led_classdev led_dev; +	char name[32];  	int (*led_on) (struct iwl3945_priv *priv, int led_id);  	int (*led_off) (struct iwl3945_priv *priv, int led_id); diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c index a51e0eaa133..b3931f6135a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945.c @@ -710,10 +710,7 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv,  		return;  	} -	if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) { -		iwl3945_pass_packet_to_mac80211(priv, rxb, &rx_status); -		return; -	} +  	/* Convert 3945's rssi indicator to dBm */  	rx_status.signal = rx_stats->rssi - IWL_RSSI_OFFSET; @@ -775,6 +772,11 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv,  		priv->last_rx_noise = rx_status.noise;  	} +	if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) { +		iwl3945_pass_packet_to_mac80211(priv, rxb, &rx_status); +		return; +	} +  	switch (le16_to_cpu(header->frame_control) & IEEE80211_FCTL_FTYPE) {  	case IEEE80211_FTYPE_MGMT:  		switch (le16_to_cpu(header->frame_control) & @@ -793,8 +795,7 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv,  					struct ieee80211_mgmt *mgmt =  					    (struct ieee80211_mgmt *)header;  					__le32 *pos; -					pos = -					    (__le32 *) & mgmt->u.beacon. +					pos = (__le32 *)&mgmt->u.beacon.  					    timestamp;  					priv->timestamp0 = le32_to_cpu(pos[0]);  					priv->timestamp1 = le32_to_cpu(pos[1]); @@ -1507,7 +1508,7 @@ static int iwl3945_hw_reg_adjust_power_by_temp(int new_reading, int old_reading)   */  static inline int iwl3945_hw_reg_temp_out_of_range(int temperature)  { -	return (((temperature < -260) || (temperature > 25)) ? 1 : 0); +	return ((temperature < -260) || (temperature > 25)) ? 1 : 0;  }  int iwl3945_hw_get_temperature(struct iwl3945_priv *priv) @@ -2628,7 +2629,7 @@ unsigned int iwl3945_hw_get_beacon_cmd(struct iwl3945_priv *priv,  	tx_beacon_cmd->tx.supp_rates[1] =  		(IWL_CCK_BASIC_RATES_MASK & 0xF); -	return (sizeof(struct iwl3945_tx_beacon_cmd) + frame_size); +	return sizeof(struct iwl3945_tx_beacon_cmd) + frame_size;  }  void iwl3945_hw_rx_handler_setup(struct iwl3945_priv *priv) diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index ba2df1ba32d..22bb26985c2 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c @@ -341,39 +341,6 @@ err:  	return -EINVAL;  } -int iwl4965_set_pwr_src(struct iwl_priv *priv, enum iwl_pwr_src src) -{ -	int ret; -	unsigned long flags; - -	spin_lock_irqsave(&priv->lock, flags); -	ret = iwl_grab_nic_access(priv); -	if (ret) { -		spin_unlock_irqrestore(&priv->lock, flags); -		return ret; -	} - -	if (src == IWL_PWR_SRC_VAUX) { -		u32 val; -		ret = pci_read_config_dword(priv->pci_dev, PCI_POWER_SOURCE, -					    &val); - -		if (val & PCI_CFG_PMC_PME_FROM_D3COLD_SUPPORT) { -			iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG, -					       APMG_PS_CTRL_VAL_PWR_SRC_VAUX, -					       ~APMG_PS_CTRL_MSK_PWR_SRC); -		} -	} else { -		iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG, -				       APMG_PS_CTRL_VAL_PWR_SRC_VMAIN, -				       ~APMG_PS_CTRL_MSK_PWR_SRC); -	} - -	iwl_release_nic_access(priv); -	spin_unlock_irqrestore(&priv->lock, flags); - -	return ret; -}  /*   * Activate/Deactivat Tx DMA/FIFO channels according tx fifos mask @@ -875,18 +842,6 @@ static int iwl4965_hw_set_hw_params(struct iwl_priv *priv)  	return 0;  } -/* set card power command */ -static int iwl4965_set_power(struct iwl_priv *priv, -		      void *cmd) -{ -	int ret = 0; - -	ret = iwl_send_cmd_pdu_async(priv, POWER_TABLE_CMD, -				    sizeof(struct iwl4965_powertable_cmd), -				    cmd, NULL); -	return ret; -} -  static s32 iwl4965_math_div_round(s32 num, s32 denom, s32 *res)  {  	s32 sign = 1; @@ -1560,11 +1515,11 @@ static int iwl4965_fill_txpower_tbl(struct iwl_priv *priv, u8 band, u16 channel,  					  c, atten_value, power_index,  					tx_power.s.radio_tx_gain[c],  					tx_power.s.dsp_predis_atten[c]); -		}/* for each chain */ +		} /* for each chain */  		tx_power_tbl->power_tbl[i].dw = cpu_to_le32(tx_power.dw); -	}/* for each rate */ +	} /* for each rate */  	return 0;  } @@ -1701,38 +1656,6 @@ static int iwl4965_shared_mem_rx_idx(struct iwl_priv *priv)  	return le32_to_cpu(s->rb_closed) & 0xFFF;  } -unsigned int iwl4965_hw_get_beacon_cmd(struct iwl_priv *priv, -			  struct iwl_frame *frame, u8 rate) -{ -	struct iwl4965_tx_beacon_cmd *tx_beacon_cmd; -	unsigned int frame_size; - -	tx_beacon_cmd = &frame->u.beacon; -	memset(tx_beacon_cmd, 0, sizeof(*tx_beacon_cmd)); - -	tx_beacon_cmd->tx.sta_id = priv->hw_params.bcast_sta_id; -	tx_beacon_cmd->tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE; - -	frame_size = iwl4965_fill_beacon_frame(priv, -				tx_beacon_cmd->frame, -				iwl_bcast_addr, -				sizeof(frame->u) - sizeof(*tx_beacon_cmd)); - -	BUG_ON(frame_size > MAX_MPDU_SIZE); -	tx_beacon_cmd->tx.len = cpu_to_le16((u16)frame_size); - -	if ((rate == IWL_RATE_1M_PLCP) || (rate >= IWL_RATE_2M_PLCP)) -		tx_beacon_cmd->tx.rate_n_flags = -			iwl_hw_set_rate_n_flags(rate, RATE_MCS_CCK_MSK); -	else -		tx_beacon_cmd->tx.rate_n_flags = -			iwl_hw_set_rate_n_flags(rate, 0); - -	tx_beacon_cmd->tx.tx_flags = (TX_CMD_FLG_SEQ_CTL_MSK | -				TX_CMD_FLG_TSF_MSK | TX_CMD_FLG_STA_RATE_MSK); -	return (sizeof(*tx_beacon_cmd) + frame_size); -} -  static int iwl4965_alloc_shared_mem(struct iwl_priv *priv)  {  	priv->shared_virt = pci_alloc_consistent(priv->pci_dev, @@ -2079,39 +2002,6 @@ static int iwl4965_txq_agg_enable(struct iwl_priv *priv, int txq_id,  	return 0;  } -int iwl4965_mac_ampdu_action(struct ieee80211_hw *hw, -			     enum ieee80211_ampdu_mlme_action action, -			     const u8 *addr, u16 tid, u16 *ssn) -{ -	struct iwl_priv *priv = hw->priv; -	DECLARE_MAC_BUF(mac); - -	IWL_DEBUG_HT("A-MPDU action on addr %s tid %d\n", -		     print_mac(mac, addr), tid); - -	if (!(priv->cfg->sku & IWL_SKU_N)) -		return -EACCES; - -	switch (action) { -	case IEEE80211_AMPDU_RX_START: -		IWL_DEBUG_HT("start Rx\n"); -		return iwl_rx_agg_start(priv, addr, tid, *ssn); -	case IEEE80211_AMPDU_RX_STOP: -		IWL_DEBUG_HT("stop Rx\n"); -		return iwl_rx_agg_stop(priv, addr, tid); -	case IEEE80211_AMPDU_TX_START: -		IWL_DEBUG_HT("start Tx\n"); -		return iwl_tx_agg_start(priv, addr, tid, ssn); -	case IEEE80211_AMPDU_TX_STOP: -		IWL_DEBUG_HT("stop Tx\n"); -		return iwl_tx_agg_stop(priv, addr, tid); -	default: -		IWL_DEBUG_HT("unknown\n"); -		return -EINVAL; -		break; -	} -	return 0; -}  static u16 iwl4965_get_hcmd_size(u8 cmd_id, u16 len)  { @@ -2240,9 +2130,9 @@ static int iwl4965_tx_status_reply_tx(struct iwl_priv *priv,  				bitmap = bitmap << sh;  				sh = 0;  			} -			bitmap |= (1 << sh); -			IWL_DEBUG_TX_REPLY("start=%d bitmap=0x%x\n", -					   start, (u32)(bitmap & 0xFFFFFFFF)); +			bitmap |= 1ULL << sh; +			IWL_DEBUG_TX_REPLY("start=%d bitmap=0x%llx\n", +					   start, (unsigned long long)bitmap);  		}  		agg->bitmap = bitmap; @@ -2368,6 +2258,40 @@ static void iwl4965_rx_reply_tx(struct iwl_priv *priv,  		IWL_ERROR("TODO:  Implement Tx ABORT REQUIRED!!!\n");  } +static int iwl4965_calc_rssi(struct iwl_priv *priv, +			     struct iwl_rx_phy_res *rx_resp) +{ +	/* data from PHY/DSP regarding signal strength, etc., +	 *   contents are always there, not configurable by host.  */ +	struct iwl4965_rx_non_cfg_phy *ncphy = +	    (struct iwl4965_rx_non_cfg_phy *)rx_resp->non_cfg_phy_buf; +	u32 agc = (le16_to_cpu(ncphy->agc_info) & IWL49_AGC_DB_MASK) +			>> IWL49_AGC_DB_POS; + +	u32 valid_antennae = +	    (le16_to_cpu(rx_resp->phy_flags) & IWL49_RX_PHY_FLAGS_ANTENNAE_MASK) +			>> IWL49_RX_PHY_FLAGS_ANTENNAE_OFFSET; +	u8 max_rssi = 0; +	u32 i; + +	/* Find max rssi among 3 possible receivers. +	 * These values are measured by the digital signal processor (DSP). +	 * They should stay fairly constant even as the signal strength varies, +	 *   if the radio's automatic gain control (AGC) is working right. +	 * AGC value (see below) will provide the "interesting" info. */ +	for (i = 0; i < 3; i++) +		if (valid_antennae & (1 << i)) +			max_rssi = max(ncphy->rssi_info[i << 1], max_rssi); + +	IWL_DEBUG_STATS("Rssi In A %d B %d C %d Max %d AGC dB %d\n", +		ncphy->rssi_info[0], ncphy->rssi_info[2], ncphy->rssi_info[4], +		max_rssi, agc); + +	/* dBm = max_rssi dB - agc dB - constant. +	 * Higher AGC (higher radio gain) means lower signal. */ +	return max_rssi - agc - IWL_RSSI_OFFSET; +} +  /* Set up 4965-specific Rx frame reply handlers */  static void iwl4965_rx_handler_setup(struct iwl_priv *priv) @@ -2399,6 +2323,7 @@ static struct iwl_hcmd_utils_ops iwl4965_hcmd_utils = {  	.chain_noise_reset = iwl4965_chain_noise_reset,  	.gain_computation = iwl4965_gain_computation,  	.rts_tx_cmd_flag = iwl4965_rts_tx_cmd_flag, +	.calc_rssi = iwl4965_calc_rssi,  };  static struct iwl_lib_ops iwl4965_lib = { @@ -2440,7 +2365,6 @@ static struct iwl_lib_ops iwl4965_lib = {  		.check_version = iwl4965_eeprom_check_version,  		.query_addr = iwlcore_eeprom_query_addr,  	}, -	.set_power = iwl4965_set_power,  	.send_tx_power	= iwl4965_send_tx_power,  	.update_chain_flags = iwl4965_update_chain_flags,  	.temperature = iwl4965_temperature_calib, diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index 878d6193b23..f3d139b663e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c @@ -93,6 +93,13 @@ static int iwl5000_apm_init(struct iwl_priv *priv)  	iwl_set_bit(priv, CSR_GIO_CHICKEN_BITS,  		    CSR_GIO_CHICKEN_BITS_REG_BIT_L1A_NO_L0S_RX); +	/* Set FH wait treshold to maximum (HW error during stress W/A) */ +	iwl_set_bit(priv, CSR_DBG_HPET_MEM_REG, CSR_DBG_HPET_MEM_REG_VAL); + +	/* enable HAP INTA to move device L1a -> L0s */ +	iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, +		    CSR_HW_IF_CONFIG_REG_BIT_HAP_WAKE_L1A); +  	iwl_set_bit(priv, CSR_ANA_PLL_CFG, CSR50_ANA_PLL_CFG_VAL);  	/* set "initialization complete" bit to move adapter @@ -230,6 +237,16 @@ static void iwl5000_nic_config(struct iwl_priv *priv)  		    CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI |  		    CSR_HW_IF_CONFIG_REG_BIT_MAC_SI); +	/* W/A : NIC is stuck in a reset state after Early PCIe power off +	 * (PCIe power is lost before PERST# is asserted), +	 * causing ME FW to lose ownership and not being able to obtain it back. +	 */ +	iwl_grab_nic_access(priv); +	iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG, +				APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS, +				~APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS); +	iwl_release_nic_access(priv); +  	spin_unlock_irqrestore(&priv->lock, flags);  } @@ -924,8 +941,8 @@ static void iwl5000_txq_update_byte_cnt_tbl(struct iwl_priv *priv,  	len = byte_cnt + IWL_TX_CRC_SIZE + IWL_TX_DELIMITER_SIZE;  	if (txq_id != IWL_CMD_QUEUE_NUM) { -		sta = txq->cmd[txq->q.write_ptr].cmd.tx.sta_id; -		sec_ctl = txq->cmd[txq->q.write_ptr].cmd.tx.sec_ctl; +		sta = txq->cmd[txq->q.write_ptr]->cmd.tx.sta_id; +		sec_ctl = txq->cmd[txq->q.write_ptr]->cmd.tx.sec_ctl;  		switch (sec_ctl & TX_CMD_SEC_MSK) {  		case TX_CMD_SEC_CCM: @@ -964,7 +981,7 @@ static void iwl5000_txq_inval_byte_cnt_tbl(struct iwl_priv *priv,  	u8 sta = 0;  	if (txq_id != IWL_CMD_QUEUE_NUM) -		sta = txq->cmd[txq->q.read_ptr].cmd.tx.sta_id; +		sta = txq->cmd[txq->q.read_ptr]->cmd.tx.sta_id;  	shared_data->queues_byte_cnt_tbls[txq_id].tfd_offset[txq->q.read_ptr].  					val = cpu_to_le16(1 | (sta << 12)); @@ -1131,7 +1148,7 @@ static void iwl5000_txq_set_sched(struct iwl_priv *priv, u32 mask)  static inline u32 iwl5000_get_scd_ssn(struct iwl5000_tx_resp *tx_resp)  { -	return le32_to_cpup((__le32*)&tx_resp->status + +	return le32_to_cpup((__le32 *)&tx_resp->status +  			    tx_resp->frame_count) & MAX_SN;  } @@ -1228,9 +1245,9 @@ static int iwl5000_tx_status_reply_tx(struct iwl_priv *priv,  				bitmap = bitmap << sh;  				sh = 0;  			} -			bitmap |= (1 << sh); -			IWL_DEBUG_TX_REPLY("start=%d bitmap=0x%x\n", -					   start, (u32)(bitmap & 0xFFFFFFFF)); +			bitmap |= 1ULL << sh; +			IWL_DEBUG_TX_REPLY("start=%d bitmap=0x%llx\n", +					   start, (unsigned long long)bitmap);  		}  		agg->bitmap = bitmap; @@ -1444,6 +1461,44 @@ static void iwl5000_temperature(struct iwl_priv *priv)  	priv->temperature = le32_to_cpu(priv->statistics.general.temperature);  } +/* Calc max signal level (dBm) among 3 possible receivers */ +static int iwl5000_calc_rssi(struct iwl_priv *priv, +			     struct iwl_rx_phy_res *rx_resp) +{ +	/* data from PHY/DSP regarding signal strength, etc., +	 *   contents are always there, not configurable by host +	 */ +	struct iwl5000_non_cfg_phy *ncphy = +		(struct iwl5000_non_cfg_phy *)rx_resp->non_cfg_phy_buf; +	u32 val, rssi_a, rssi_b, rssi_c, max_rssi; +	u8 agc; + +	val  = le32_to_cpu(ncphy->non_cfg_phy[IWL50_RX_RES_AGC_IDX]); +	agc = (val & IWL50_OFDM_AGC_MSK) >> IWL50_OFDM_AGC_BIT_POS; + +	/* Find max rssi among 3 possible receivers. +	 * These values are measured by the digital signal processor (DSP). +	 * They should stay fairly constant even as the signal strength varies, +	 *   if the radio's automatic gain control (AGC) is working right. +	 * AGC value (see below) will provide the "interesting" info. +	 */ +	val = le32_to_cpu(ncphy->non_cfg_phy[IWL50_RX_RES_RSSI_AB_IDX]); +	rssi_a = (val & IWL50_OFDM_RSSI_A_MSK) >> IWL50_OFDM_RSSI_A_BIT_POS; +	rssi_b = (val & IWL50_OFDM_RSSI_B_MSK) >> IWL50_OFDM_RSSI_B_BIT_POS; +	val = le32_to_cpu(ncphy->non_cfg_phy[IWL50_RX_RES_RSSI_C_IDX]); +	rssi_c = (val & IWL50_OFDM_RSSI_C_MSK) >> IWL50_OFDM_RSSI_C_BIT_POS; + +	max_rssi = max_t(u32, rssi_a, rssi_b); +	max_rssi = max_t(u32, max_rssi, rssi_c); + +	IWL_DEBUG_STATS("Rssi In A %d B %d C %d Max %d AGC dB %d\n", +		rssi_a, rssi_b, rssi_c, max_rssi, agc); + +	/* dBm = max_rssi dB - agc dB - constant. +	 * Higher AGC (higher radio gain) means lower signal. */ +	return max_rssi - agc - IWL_RSSI_OFFSET; +} +  static struct iwl_hcmd_ops iwl5000_hcmd = {  	.rxon_assoc = iwl5000_send_rxon_assoc,  }; @@ -1454,6 +1509,7 @@ static struct iwl_hcmd_utils_ops iwl5000_hcmd_utils = {  	.gain_computation = iwl5000_gain_computation,  	.chain_noise_reset = iwl5000_chain_noise_reset,  	.rts_tx_cmd_flag = iwl5000_rts_tx_cmd_flag, +	.calc_rssi = iwl5000_calc_rssi,  };  static struct iwl_lib_ops iwl5000_lib = { @@ -1474,6 +1530,7 @@ static struct iwl_lib_ops iwl5000_lib = {  	.alive_notify = iwl5000_alive_notify,  	.send_tx_power = iwl5000_send_tx_power,  	.temperature = iwl5000_temperature, +	.update_chain_flags = iwl4965_update_chain_flags,  	.apm_ops = {  		.init =	iwl5000_apm_init,  		.reset = iwl5000_apm_reset, diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c index 3ccb84aa5db..754fef5b592 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c @@ -42,7 +42,7 @@  #include "iwl-core.h"  #include "iwl-helpers.h" -#define RS_NAME "iwl-4965-rs" +#define RS_NAME "iwl-agn-rs"  #define NUM_TRY_BEFORE_ANT_TOGGLE 1  #define IWL_NUMBER_TRY      1 @@ -77,9 +77,9 @@ static const u8 ant_toggle_lookup[] = {  };  /** - * struct iwl4965_rate_scale_data -- tx success history for one rate + * struct iwl_rate_scale_data -- tx success history for one rate   */ -struct iwl4965_rate_scale_data { +struct iwl_rate_scale_data {  	u64 data;		/* bitmap of successful frames */  	s32 success_counter;	/* number of frames successful */  	s32 success_ratio;	/* per-cent * 128  */ @@ -89,12 +89,12 @@ struct iwl4965_rate_scale_data {  };  /** - * struct iwl4965_scale_tbl_info -- tx params and success history for all rates + * struct iwl_scale_tbl_info -- tx params and success history for all rates   * - * There are two of these in struct iwl4965_lq_sta, + * There are two of these in struct iwl_lq_sta,   * one for "active", and one for "search".   */ -struct iwl4965_scale_tbl_info { +struct iwl_scale_tbl_info {  	enum iwl_table_type lq_type;  	u8 ant_type;  	u8 is_SGI;	/* 1 = short guard interval */ @@ -103,10 +103,10 @@ struct iwl4965_scale_tbl_info {  	u8 action;	/* change modulation; IWL_[LEGACY/SISO/MIMO]_SWITCH_* */  	s32 *expected_tpt;	/* throughput metrics; expected_tpt_G, etc. */  	u32 current_rate;  /* rate_n_flags, uCode API format */ -	struct iwl4965_rate_scale_data win[IWL_RATE_COUNT]; /* rate histories */ +	struct iwl_rate_scale_data win[IWL_RATE_COUNT]; /* rate histories */  }; -struct iwl4965_traffic_load { +struct iwl_traffic_load {  	unsigned long time_stamp;	/* age of the oldest statistics */  	u32 packet_count[TID_QUEUE_MAX_SIZE];   /* packet count in this time  						 * slice */ @@ -118,11 +118,11 @@ struct iwl4965_traffic_load {  };  /** - * struct iwl4965_lq_sta -- driver's rate scaling private structure + * struct iwl_lq_sta -- driver's rate scaling private structure   *   * Pointer to this gets passed back and forth between driver and mac80211.   */ -struct iwl4965_lq_sta { +struct iwl_lq_sta {  	u8 active_tbl;		/* index of active table, range 0-1 */  	u8 enable_counter;	/* indicates HT mode */  	u8 stay_in_tbl;		/* 1: disallow, 0: allow search for new mode */ @@ -153,8 +153,8 @@ struct iwl4965_lq_sta {  	u16 active_rate_basic;  	struct iwl_link_quality_cmd lq; -	struct iwl4965_scale_tbl_info lq_info[LQ_SIZE]; /* "active", "search" */ -	struct iwl4965_traffic_load load[TID_MAX_LOAD_COUNT]; +	struct iwl_scale_tbl_info lq_info[LQ_SIZE]; /* "active", "search" */ +	struct iwl_traffic_load load[TID_MAX_LOAD_COUNT];  	u8 tx_agg_tid_en;  #ifdef CONFIG_MAC80211_DEBUGFS  	struct dentry *rs_sta_dbgfs_scale_table_file; @@ -170,16 +170,15 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,  				   struct ieee80211_hdr *hdr,  				   struct sta_info *sta);  static void rs_fill_link_cmd(const struct iwl_priv *priv, -			     struct iwl4965_lq_sta *lq_sta, -			     u32 rate_n_flags); +			     struct iwl_lq_sta *lq_sta, u32 rate_n_flags);  #ifdef CONFIG_MAC80211_DEBUGFS -static void rs_dbgfs_set_mcs(struct iwl4965_lq_sta *lq_sta, -					u32 *rate_n_flags, int index); +static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta, +			     u32 *rate_n_flags, int index);  #else -static void rs_dbgfs_set_mcs(struct iwl4965_lq_sta *lq_sta, -					u32 *rate_n_flags, int index) +static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta, +			     u32 *rate_n_flags, int index)  {}  #endif @@ -234,7 +233,7 @@ static inline u8 rs_extract_rate(u32 rate_n_flags)  	return (u8)(rate_n_flags & 0xFF);  } -static void rs_rate_scale_clear_window(struct iwl4965_rate_scale_data *window) +static void rs_rate_scale_clear_window(struct iwl_rate_scale_data *window)  {  	window->data = 0;  	window->success_counter = 0; @@ -246,14 +245,14 @@ static void rs_rate_scale_clear_window(struct iwl4965_rate_scale_data *window)  static inline u8 rs_is_valid_ant(u8 valid_antenna, u8 ant_type)  { -	return ((ant_type & valid_antenna) == ant_type); +	return (ant_type & valid_antenna) == ant_type;  }  /*   *	removes the old data from the statistics. All data that is older than   *	TID_MAX_TIME_DIFF, will be deleted.   */ -static void rs_tl_rm_old_stats(struct iwl4965_traffic_load *tl, u32 curr_time) +static void rs_tl_rm_old_stats(struct iwl_traffic_load *tl, u32 curr_time)  {  	/* The oldest age we want to keep */  	u32 oldest_time = curr_time - TID_MAX_TIME_DIFF; @@ -274,13 +273,13 @@ static void rs_tl_rm_old_stats(struct iwl4965_traffic_load *tl, u32 curr_time)   *	increment traffic load value for tid and also remove   *	any old values if passed the certain time period   */ -static u8 rs_tl_add_packet(struct iwl4965_lq_sta *lq_data, +static u8 rs_tl_add_packet(struct iwl_lq_sta *lq_data,  			   struct ieee80211_hdr *hdr)  {  	u32 curr_time = jiffies_to_msecs(jiffies);  	u32 time_diff;  	s32 index; -	struct iwl4965_traffic_load *tl = NULL; +	struct iwl_traffic_load *tl = NULL;  	__le16 fc = hdr->frame_control;  	u8 tid; @@ -325,12 +324,12 @@ static u8 rs_tl_add_packet(struct iwl4965_lq_sta *lq_data,  /*  	get the traffic load value for tid  */ -static u32 rs_tl_get_load(struct iwl4965_lq_sta *lq_data, u8 tid) +static u32 rs_tl_get_load(struct iwl_lq_sta *lq_data, u8 tid)  {  	u32 curr_time = jiffies_to_msecs(jiffies);  	u32 time_diff;  	s32 index; -	struct iwl4965_traffic_load *tl = NULL; +	struct iwl_traffic_load *tl = NULL;  	if (tid >= TID_MAX_LOAD_COUNT)  		return 0; @@ -354,8 +353,8 @@ static u32 rs_tl_get_load(struct iwl4965_lq_sta *lq_data, u8 tid)  }  static void rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv, -				struct iwl4965_lq_sta *lq_data, u8 tid, -				struct sta_info *sta) +				      struct iwl_lq_sta *lq_data, u8 tid, +				      struct sta_info *sta)  {  	unsigned long state;  	DECLARE_MAC_BUF(mac); @@ -373,8 +372,8 @@ static void rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv,  }  static void rs_tl_turn_on_agg(struct iwl_priv *priv, u8 tid, -				struct iwl4965_lq_sta *lq_data, -				struct sta_info *sta) +			      struct iwl_lq_sta *lq_data, +			      struct sta_info *sta)  {  	if ((tid < TID_MAX_LOAD_COUNT))  		rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta); @@ -385,9 +384,9 @@ static void rs_tl_turn_on_agg(struct iwl_priv *priv, u8 tid,  static inline int get_num_of_ant_from_rate(u32 rate_n_flags)  { -	return (!!(rate_n_flags & RATE_MCS_ANT_A_MSK) + -		!!(rate_n_flags & RATE_MCS_ANT_B_MSK) + -		!!(rate_n_flags & RATE_MCS_ANT_C_MSK)); +	return !!(rate_n_flags & RATE_MCS_ANT_A_MSK) + +	       !!(rate_n_flags & RATE_MCS_ANT_B_MSK) + +	       !!(rate_n_flags & RATE_MCS_ANT_C_MSK);  }  /** @@ -397,11 +396,11 @@ static inline int get_num_of_ant_from_rate(u32 rate_n_flags)   * at this rate.  window->data contains the bitmask of successful   * packets.   */ -static int rs_collect_tx_data(struct iwl4965_rate_scale_data *windows, +static int rs_collect_tx_data(struct iwl_rate_scale_data *windows,  			      int scale_index, s32 tpt, int retries,  			      int successes)  { -	struct iwl4965_rate_scale_data *window = NULL; +	struct iwl_rate_scale_data *window = NULL;  	static const u64 mask = (((u64)1) << (IWL_RATE_MAX_WINDOW - 1));  	s32 fail_count; @@ -473,7 +472,7 @@ static int rs_collect_tx_data(struct iwl4965_rate_scale_data *windows,   * Fill uCode API rate_n_flags field, based on "search" or "active" table.   */  /* FIXME:RS:remove this function and put the flags statically in the table */ -static u32 rate_n_flags_from_tbl(struct iwl4965_scale_tbl_info *tbl, +static u32 rate_n_flags_from_tbl(struct iwl_scale_tbl_info *tbl,  				       int index, u8 use_green)  {  	u32 rate_n_flags = 0; @@ -530,7 +529,7 @@ static u32 rate_n_flags_from_tbl(struct iwl4965_scale_tbl_info *tbl,   */  static int rs_get_tbl_info_from_mcs(const u32 rate_n_flags,  				    enum ieee80211_band band, -				    struct iwl4965_scale_tbl_info *tbl, +				    struct iwl_scale_tbl_info *tbl,  				    int *rate_idx)  {  	u32 ant_msk = (rate_n_flags & RATE_MCS_ANT_ABC_MSK); @@ -591,7 +590,7 @@ static int rs_get_tbl_info_from_mcs(const u32 rate_n_flags,  /* switch to another antenna/antennas and return 1 */  /* if no other valid antenna found, return 0 */  static int rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags, -			      struct iwl4965_scale_tbl_info *tbl) +			     struct iwl_scale_tbl_info *tbl)  {  	u8 new_ant_type; @@ -621,9 +620,9 @@ static int rs_toggle_antenna(u32 valid_ant, u32 *rate_n_flags,  #if 0  static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf)  { -	return ((conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) && +	return (conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) &&  		priv->current_ht_config.is_green_field && -		!priv->current_ht_config.non_GF_STA_present); +		!priv->current_ht_config.non_GF_STA_present;  }  #endif  static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf) @@ -638,9 +637,9 @@ static inline u8 rs_use_green(struct iwl_priv *priv, struct ieee80211_conf *conf   * basic available rates.   *   */ -static u16 rs_get_supported_rates(struct iwl4965_lq_sta *lq_sta, -				   struct ieee80211_hdr *hdr, -				   enum iwl_table_type rate_type) +static u16 rs_get_supported_rates(struct iwl_lq_sta *lq_sta, +				  struct ieee80211_hdr *hdr, +				  enum iwl_table_type rate_type)  {  	if (hdr && is_multicast_ether_addr(hdr->addr1) &&  	    lq_sta->active_rate_basic) @@ -714,9 +713,9 @@ static u16 rs_get_adjacent_rate(struct iwl_priv *priv, u8 index, u16 rate_mask,  	return (high << 8) | low;  } -static u32 rs_get_lower_rate(struct iwl4965_lq_sta *lq_sta, -			     struct iwl4965_scale_tbl_info *tbl, u8 scale_index, -			     u8 ht_possible) +static u32 rs_get_lower_rate(struct iwl_lq_sta *lq_sta, +			     struct iwl_scale_tbl_info *tbl, +			     u8 scale_index, u8 ht_possible)  {  	s32 low;  	u16 rate_mask; @@ -780,7 +779,7 @@ static void rs_tx_status(void *priv_rate, struct net_device *dev,  	int status;  	u8 retries;  	int rs_index, index = 0; -	struct iwl4965_lq_sta *lq_sta; +	struct iwl_lq_sta *lq_sta;  	struct iwl_link_quality_cmd *table;  	struct sta_info *sta;  	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; @@ -788,11 +787,11 @@ static void rs_tx_status(void *priv_rate, struct net_device *dev,  	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);  	struct ieee80211_hw *hw = local_to_hw(local);  	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); -	struct iwl4965_rate_scale_data *window = NULL; -	struct iwl4965_rate_scale_data *search_win = NULL; +	struct iwl_rate_scale_data *window = NULL; +	struct iwl_rate_scale_data *search_win = NULL;  	u32 tx_rate; -	struct iwl4965_scale_tbl_info tbl_type; -	struct iwl4965_scale_tbl_info *curr_tbl, *search_tbl; +	struct iwl_scale_tbl_info tbl_type; +	struct iwl_scale_tbl_info *curr_tbl, *search_tbl;  	u8 active_index = 0;  	__le16 fc = hdr->frame_control;  	s32 tpt = 0; @@ -820,7 +819,7 @@ static void rs_tx_status(void *priv_rate, struct net_device *dev,  		goto out; -	lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv; +	lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv;  	if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) &&  	    !lq_sta->ibss_sta_added) @@ -831,10 +830,8 @@ static void rs_tx_status(void *priv_rate, struct net_device *dev,  	curr_tbl = &(lq_sta->lq_info[active_index]);  	search_tbl = &(lq_sta->lq_info[(1 - active_index)]); -	window = (struct iwl4965_rate_scale_data *) -	    &(curr_tbl->win[0]); -	search_win = (struct iwl4965_rate_scale_data *) -	    &(search_tbl->win[0]); +	window = (struct iwl_rate_scale_data *)&(curr_tbl->win[0]); +	search_win = (struct iwl_rate_scale_data *)&(search_tbl->win[0]);  	/*  	 * Ignore this Tx frame response if its initial rate doesn't match @@ -983,7 +980,7 @@ out:   * searching for a new mode.   */  static void rs_set_stay_in_table(struct iwl_priv *priv, u8 is_legacy, -				 struct iwl4965_lq_sta *lq_sta) +				 struct iwl_lq_sta *lq_sta)  {  	IWL_DEBUG_RATE("we are staying in the same table\n");  	lq_sta->stay_in_tbl = 1;	/* only place this gets set */ @@ -1004,8 +1001,8 @@ static void rs_set_stay_in_table(struct iwl_priv *priv, u8 is_legacy,  /*   * Find correct throughput table for given mode of modulation   */ -static void rs_set_expected_tpt_table(struct iwl4965_lq_sta *lq_sta, -				      struct iwl4965_scale_tbl_info *tbl) +static void rs_set_expected_tpt_table(struct iwl_lq_sta *lq_sta, +				      struct iwl_scale_tbl_info *tbl)  {  	if (is_legacy(tbl->lq_type)) {  		if (!is_a_band(tbl->lq_type)) @@ -1050,12 +1047,12 @@ static void rs_set_expected_tpt_table(struct iwl4965_lq_sta *lq_sta,   * bit rate will typically need to increase, but not if performance was bad.   */  static s32 rs_get_best_rate(struct iwl_priv *priv, -			    struct iwl4965_lq_sta *lq_sta, -			    struct iwl4965_scale_tbl_info *tbl,	/* "search" */ +			    struct iwl_lq_sta *lq_sta, +			    struct iwl_scale_tbl_info *tbl,	/* "search" */  			    u16 rate_mask, s8 index)  {  	/* "active" values */ -	struct iwl4965_scale_tbl_info *active_tbl = +	struct iwl_scale_tbl_info *active_tbl =  	    &(lq_sta->lq_info[lq_sta->active_tbl]);  	s32 active_sr = active_tbl->win[index].success_ratio;  	s32 active_tpt = active_tbl->expected_tpt[index]; @@ -1143,10 +1140,10 @@ static s32 rs_get_best_rate(struct iwl_priv *priv,   * Set up search table for MIMO   */  static int rs_switch_to_mimo2(struct iwl_priv *priv, -			     struct iwl4965_lq_sta *lq_sta, +			     struct iwl_lq_sta *lq_sta,  			     struct ieee80211_conf *conf,  			     struct sta_info *sta, -			     struct iwl4965_scale_tbl_info *tbl, int index) +			     struct iwl_scale_tbl_info *tbl, int index)  {  	u16 rate_mask;  	s32 rate; @@ -1210,10 +1207,10 @@ static int rs_switch_to_mimo2(struct iwl_priv *priv,   * Set up search table for SISO   */  static int rs_switch_to_siso(struct iwl_priv *priv, -			     struct iwl4965_lq_sta *lq_sta, +			     struct iwl_lq_sta *lq_sta,  			     struct ieee80211_conf *conf,  			     struct sta_info *sta, -			     struct iwl4965_scale_tbl_info *tbl, int index) +			     struct iwl_scale_tbl_info *tbl, int index)  {  	u16 rate_mask;  	u8 is_green = lq_sta->is_green; @@ -1270,18 +1267,17 @@ static int rs_switch_to_siso(struct iwl_priv *priv,   * Try to switch to new modulation mode from legacy   */  static int rs_move_legacy_other(struct iwl_priv *priv, -				struct iwl4965_lq_sta *lq_sta, +				struct iwl_lq_sta *lq_sta,  				struct ieee80211_conf *conf,  				struct sta_info *sta,  				int index)  { -	struct iwl4965_scale_tbl_info *tbl = -	    &(lq_sta->lq_info[lq_sta->active_tbl]); -	struct iwl4965_scale_tbl_info *search_tbl = -	    &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); -	struct iwl4965_rate_scale_data *window = &(tbl->win[index]); -	u32 sz = (sizeof(struct iwl4965_scale_tbl_info) - -		  (sizeof(struct iwl4965_rate_scale_data) * IWL_RATE_COUNT)); +	struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); +	struct iwl_scale_tbl_info *search_tbl = +				&(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); +	struct iwl_rate_scale_data *window = &(tbl->win[index]); +	u32 sz = (sizeof(struct iwl_scale_tbl_info) - +		  (sizeof(struct iwl_rate_scale_data) * IWL_RATE_COUNT));  	u8 start_action = tbl->action;  	u8 valid_tx_ant = priv->hw_params.valid_tx_ant;  	int ret = 0; @@ -1360,19 +1356,17 @@ static int rs_move_legacy_other(struct iwl_priv *priv,   * Try to switch to new modulation mode from SISO   */  static int rs_move_siso_to_other(struct iwl_priv *priv, -				 struct iwl4965_lq_sta *lq_sta, +				 struct iwl_lq_sta *lq_sta,  				 struct ieee80211_conf *conf, -				 struct sta_info *sta, -				 int index) +				 struct sta_info *sta, int index)  {  	u8 is_green = lq_sta->is_green; -	struct iwl4965_scale_tbl_info *tbl = -	    &(lq_sta->lq_info[lq_sta->active_tbl]); -	struct iwl4965_scale_tbl_info *search_tbl = -	    &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); -	struct iwl4965_rate_scale_data *window = &(tbl->win[index]); -	u32 sz = (sizeof(struct iwl4965_scale_tbl_info) - -		  (sizeof(struct iwl4965_rate_scale_data) * IWL_RATE_COUNT)); +	struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); +	struct iwl_scale_tbl_info *search_tbl = +				&(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); +	struct iwl_rate_scale_data *window = &(tbl->win[index]); +	u32 sz = (sizeof(struct iwl_scale_tbl_info) - +		  (sizeof(struct iwl_rate_scale_data) * IWL_RATE_COUNT));  	u8 start_action = tbl->action;  	u8 valid_tx_ant = priv->hw_params.valid_tx_ant;  	int ret; @@ -1455,18 +1449,16 @@ static int rs_move_siso_to_other(struct iwl_priv *priv,   * Try to switch to new modulation mode from MIMO   */  static int rs_move_mimo_to_other(struct iwl_priv *priv, -				 struct iwl4965_lq_sta *lq_sta, +				 struct iwl_lq_sta *lq_sta,  				 struct ieee80211_conf *conf, -				 struct sta_info *sta, -				 int index) +				 struct sta_info *sta, int index)  {  	s8 is_green = lq_sta->is_green; -	struct iwl4965_scale_tbl_info *tbl = -	    &(lq_sta->lq_info[lq_sta->active_tbl]); -	struct iwl4965_scale_tbl_info *search_tbl = -	    &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); -	u32 sz = (sizeof(struct iwl4965_scale_tbl_info) - -		  (sizeof(struct iwl4965_rate_scale_data) * IWL_RATE_COUNT)); +	struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); +	struct iwl_scale_tbl_info *search_tbl = +				&(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); +	u32 sz = (sizeof(struct iwl_scale_tbl_info) - +		  (sizeof(struct iwl_rate_scale_data) * IWL_RATE_COUNT));  	u8 start_action = tbl->action;  	/*u8 valid_tx_ant = priv->hw_params.valid_tx_ant;*/  	int ret; @@ -1552,9 +1544,9 @@ static int rs_move_mimo_to_other(struct iwl_priv *priv,   * 2) # times calling this function   * 3) elapsed time in this mode (not used, for now)   */ -static void rs_stay_in_table(struct iwl4965_lq_sta *lq_sta) +static void rs_stay_in_table(struct iwl_lq_sta *lq_sta)  { -	struct iwl4965_scale_tbl_info *tbl; +	struct iwl_scale_tbl_info *tbl;  	int i;  	int active_tbl;  	int flush_interval_passed = 0; @@ -1642,7 +1634,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,  	int high = IWL_RATE_INVALID;  	int index;  	int i; -	struct iwl4965_rate_scale_data *window = NULL; +	struct iwl_rate_scale_data *window = NULL;  	int current_tpt = IWL_INVALID_VALUE;  	int low_tpt = IWL_INVALID_VALUE;  	int high_tpt = IWL_INVALID_VALUE; @@ -1651,8 +1643,8 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,  	__le16 fc;  	u16 rate_mask;  	u8 update_lq = 0; -	struct iwl4965_lq_sta *lq_sta; -	struct iwl4965_scale_tbl_info *tbl, *tbl1; +	struct iwl_lq_sta *lq_sta; +	struct iwl_scale_tbl_info *tbl, *tbl1;  	u16 rate_scale_index_msk = 0;  	u32 rate;  	u8 is_green = 0; @@ -1675,7 +1667,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv,  	if (!sta || !sta->rate_ctrl_priv)  		return; -	lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv; +	lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv;  	tid = rs_tl_add_packet(lq_sta, hdr); @@ -2030,8 +2022,8 @@ static void rs_initialize_lq(struct iwl_priv *priv,  			     struct ieee80211_conf *conf,  			     struct sta_info *sta)  { -	struct iwl4965_lq_sta *lq_sta; -	struct iwl4965_scale_tbl_info *tbl; +	struct iwl_lq_sta *lq_sta; +	struct iwl_scale_tbl_info *tbl;  	int rate_idx;  	int i;  	u32 rate; @@ -2042,7 +2034,7 @@ static void rs_initialize_lq(struct iwl_priv *priv,  	if (!sta || !sta->rate_ctrl_priv)  		goto out; -	lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv; +	lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv;  	i = sta->last_txrate_idx;  	if ((lq_sta->lq.sta_id == 0xff) && @@ -2096,7 +2088,7 @@ static void rs_get_rate(void *priv_rate, struct net_device *dev,  	struct sta_info *sta;  	__le16 fc;  	struct iwl_priv *priv = (struct iwl_priv *)priv_rate; -	struct iwl4965_lq_sta *lq_sta; +	struct iwl_lq_sta *lq_sta;  	IWL_DEBUG_RATE_LIMIT("rate scale calculate new rate for skb\n"); @@ -2113,7 +2105,7 @@ static void rs_get_rate(void *priv_rate, struct net_device *dev,  		goto out;  	} -	lq_sta = (struct iwl4965_lq_sta *)sta->rate_ctrl_priv; +	lq_sta = (struct iwl_lq_sta *)sta->rate_ctrl_priv;  	i = sta->last_txrate_idx;  	if ((priv->iw_mode == IEEE80211_IF_TYPE_IBSS) && @@ -2149,14 +2141,14 @@ out:  static void *rs_alloc_sta(void *priv_rate, gfp_t gfp)  { -	struct iwl4965_lq_sta *lq_sta; +	struct iwl_lq_sta *lq_sta;  	struct iwl_priv *priv;  	int i, j;  	priv = (struct iwl_priv *)priv_rate;  	IWL_DEBUG_RATE("create station rate scale window\n"); -	lq_sta = kzalloc(sizeof(struct iwl4965_lq_sta), gfp); +	lq_sta = kzalloc(sizeof(struct iwl_lq_sta), gfp);  	if (lq_sta == NULL)  		return NULL; @@ -2165,7 +2157,7 @@ static void *rs_alloc_sta(void *priv_rate, gfp_t gfp)  	for (j = 0; j < LQ_SIZE; j++)  		for (i = 0; i < IWL_RATE_COUNT; i++) -			rs_rate_scale_clear_window(&(lq_sta->lq_info[j].win[i])); +			rs_rate_scale_clear_window(&lq_sta->lq_info[j].win[i]);  	return lq_sta;  } @@ -2178,7 +2170,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,  	struct ieee80211_conf *conf = &local->hw.conf;  	struct ieee80211_supported_band *sband;  	struct iwl_priv *priv = (struct iwl_priv *)priv_rate; -	struct iwl4965_lq_sta *lq_sta = priv_sta; +	struct iwl_lq_sta *lq_sta = priv_sta;  	sband = local->hw.wiphy->bands[local->hw.conf.channel->band]; @@ -2187,7 +2179,7 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,  	sta->txrate_idx = 3;  	for (j = 0; j < LQ_SIZE; j++)  		for (i = 0; i < IWL_RATE_COUNT; i++) -			rs_rate_scale_clear_window(&(lq_sta->lq_info[j].win[i])); +			rs_rate_scale_clear_window(&lq_sta->lq_info[j].win[i]);  	IWL_DEBUG_RATE("LQ: *** rate scale global init ***\n");  	/* TODO: what is a good starting rate for STA? About middle? Maybe not @@ -2271,10 +2263,9 @@ static void rs_rate_init(void *priv_rate, void *priv_sta,  }  static void rs_fill_link_cmd(const struct iwl_priv *priv, -			     struct iwl4965_lq_sta *lq_sta, -			     u32 new_rate) +			     struct iwl_lq_sta *lq_sta, u32 new_rate)  { -	struct iwl4965_scale_tbl_info tbl_type; +	struct iwl_scale_tbl_info tbl_type;  	int index = 0;  	int rate_idx;  	int repeat_rate = 0; @@ -2402,6 +2393,7 @@ static void rs_free(void *priv_rate)  static void rs_clear(void *priv_rate)  { +#ifdef CONFIG_IWLWIFI_DEBUG  	struct iwl_priv *priv = (struct iwl_priv *) priv_rate;  	IWL_DEBUG_RATE("enter\n"); @@ -2409,11 +2401,12 @@ static void rs_clear(void *priv_rate)  	/* TODO - add rate scale state reset */  	IWL_DEBUG_RATE("leave\n"); +#endif /* CONFIG_IWLWIFI_DEBUG */  }  static void rs_free_sta(void *priv_rate, void *priv_sta)  { -	struct iwl4965_lq_sta *lq_sta = priv_sta; +	struct iwl_lq_sta *lq_sta = priv_sta;  	struct iwl_priv *priv;  	priv = (struct iwl_priv *)priv_rate; @@ -2429,8 +2422,8 @@ static int open_file_generic(struct inode *inode, struct file *file)  	file->private_data = inode->i_private;  	return 0;  } -static void rs_dbgfs_set_mcs(struct iwl4965_lq_sta *lq_sta, -				u32 *rate_n_flags, int index) +static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta, +			     u32 *rate_n_flags, int index)  {  	struct iwl_priv *priv; @@ -2453,7 +2446,7 @@ static void rs_dbgfs_set_mcs(struct iwl4965_lq_sta *lq_sta,  static ssize_t rs_sta_dbgfs_scale_table_write(struct file *file,  			const char __user *user_buf, size_t count, loff_t *ppos)  { -	struct iwl4965_lq_sta *lq_sta = file->private_data; +	struct iwl_lq_sta *lq_sta = file->private_data;  	struct iwl_priv *priv;  	char buf[64];  	int buf_size; @@ -2493,7 +2486,7 @@ static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file,  	int desc = 0;  	int i = 0; -	struct iwl4965_lq_sta *lq_sta = file->private_data; +	struct iwl_lq_sta *lq_sta = file->private_data;  	desc += sprintf(buff+desc, "sta_id %d\n", lq_sta->lq.sta_id);  	desc += sprintf(buff+desc, "failed=%d success=%d rate=0%X\n", @@ -2541,7 +2534,7 @@ static ssize_t rs_sta_dbgfs_stats_table_read(struct file *file,  	int desc = 0;  	int i, j; -	struct iwl4965_lq_sta *lq_sta = file->private_data; +	struct iwl_lq_sta *lq_sta = file->private_data;  	for (i = 0; i < LQ_SIZE; i++) {  		desc += sprintf(buff+desc, "%s type=%d SGI=%d FAT=%d DUP=%d\n"  				"rate=0x%X\n", @@ -2570,7 +2563,7 @@ static const struct file_operations rs_sta_dbgfs_stats_table_ops = {  static void rs_add_debugfs(void *priv, void *priv_sta,  					struct dentry *dir)  { -	struct iwl4965_lq_sta *lq_sta = priv_sta; +	struct iwl_lq_sta *lq_sta = priv_sta;  	lq_sta->rs_sta_dbgfs_scale_table_file =  		debugfs_create_file("rate_scale_table", 0600, dir,  				lq_sta, &rs_sta_dbgfs_scale_table_ops); @@ -2585,7 +2578,7 @@ static void rs_add_debugfs(void *priv, void *priv_sta,  static void rs_remove_debugfs(void *priv, void *priv_sta)  { -	struct iwl4965_lq_sta *lq_sta = priv_sta; +	struct iwl_lq_sta *lq_sta = priv_sta;  	debugfs_remove(lq_sta->rs_sta_dbgfs_scale_table_file);  	debugfs_remove(lq_sta->rs_sta_dbgfs_stats_table_file);  	debugfs_remove(lq_sta->rs_sta_dbgfs_tx_agg_tid_en_file); @@ -2609,104 +2602,12 @@ static struct rate_control_ops rs_ops = {  #endif  }; -int iwl4965_fill_rs_info(struct ieee80211_hw *hw, char *buf, u8 sta_id) -{ -	struct ieee80211_local *local = hw_to_local(hw); -	struct iwl_priv *priv = hw->priv; -	struct iwl4965_lq_sta *lq_sta; -	struct sta_info *sta; -	int cnt = 0, i; -	u32 samples = 0, success = 0, good = 0; -	unsigned long now = jiffies; -	u32 max_time = 0; -	u8 lq_type, antenna; - -	rcu_read_lock(); - -	sta = sta_info_get(local, priv->stations[sta_id].sta.sta.addr); -	if (!sta || !sta->rate_ctrl_priv) { -		if (sta) -			IWL_DEBUG_RATE("leave - no private rate data!\n"); -		else -			IWL_DEBUG_RATE("leave - no station!\n"); -		rcu_read_unlock(); -		return sprintf(buf, "station %d not found\n", sta_id); -	} - -	lq_sta = (void *)sta->rate_ctrl_priv; - -	lq_type = lq_sta->lq_info[lq_sta->active_tbl].lq_type; -	antenna = lq_sta->lq_info[lq_sta->active_tbl].ant_type; - -	if (is_legacy(lq_type)) -		i = IWL_RATE_54M_INDEX; -	else -		i = IWL_RATE_60M_INDEX; -	while (1) { -		u64 mask; -		int j; -		int active = lq_sta->active_tbl; - -		cnt += -		    sprintf(&buf[cnt], " %2dMbs: ", iwl_rates[i].ieee / 2); - -		mask = (1ULL << (IWL_RATE_MAX_WINDOW - 1)); -		for (j = 0; j < IWL_RATE_MAX_WINDOW; j++, mask >>= 1) -			buf[cnt++] = -				(lq_sta->lq_info[active].win[i].data & mask) -				? '1' : '0'; - -		samples += lq_sta->lq_info[active].win[i].counter; -		good += lq_sta->lq_info[active].win[i].success_counter; -		success += lq_sta->lq_info[active].win[i].success_counter * -			   iwl_rates[i].ieee; - -		if (lq_sta->lq_info[active].win[i].stamp) { -			int delta = -				   jiffies_to_msecs(now - -				   lq_sta->lq_info[active].win[i].stamp); - -			if (delta > max_time) -				max_time = delta; - -			cnt += sprintf(&buf[cnt], "%5dms\n", delta); -		} else -			buf[cnt++] = '\n'; - -		j = iwl4965_get_prev_ieee_rate(i); -		if (j == i) -			break; -		i = j; -	} - -	/* -	 * Display the average rate of all samples taken. -	 * NOTE: We multiply # of samples by 2 since the IEEE measurement -	 * added from iwl_rates is actually 2X the rate. -	 */ -	if (samples) -		cnt += sprintf(&buf[cnt], -			 "\nAverage rate is %3d.%02dMbs over last %4dms\n" -			 "%3d%% success (%d good packets over %d tries)\n", -			 success / (2 * samples), (success * 5 / samples) % 10, -			 max_time, good * 100 / samples, good, samples); -	else -		cnt += sprintf(&buf[cnt], "\nAverage rate: 0Mbs\n"); - -	cnt += sprintf(&buf[cnt], "\nrate scale type %d antenna %d " -			 "active_search %d rate index %d\n", lq_type, antenna, -			 lq_sta->search_better_tbl, sta->last_txrate_idx); - -	rcu_read_unlock(); -	return cnt; -} - -int iwl4965_rate_control_register(void) +int iwlagn_rate_control_register(void)  {  	return ieee80211_rate_control_register(&rs_ops);  } -void iwl4965_rate_control_unregister(void) +void iwlagn_rate_control_unregister(void)  {  	ieee80211_rate_control_unregister(&rs_ops);  } diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.h b/drivers/net/wireless/iwlwifi/iwl-agn-rs.h index 9b9972885aa..84d4d1e3375 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.h +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.h @@ -24,8 +24,8 @@   *   *****************************************************************************/ -#ifndef __iwl_4965_rs_h__ -#define __iwl_4965_rs_h__ +#ifndef __iwl_agn_rs_h__ +#define __iwl_agn_rs_h__  #include "iwl-dev.h" @@ -88,7 +88,7 @@ enum {  #define	IWL_RATE_5M_MASK   (1 << IWL_RATE_5M_INDEX)  #define	IWL_RATE_11M_MASK  (1 << IWL_RATE_11M_INDEX) -/* 4965 uCode API values for legacy bit rates, both OFDM and CCK */ +/* uCode API values for legacy bit rates, both OFDM and CCK */  enum {  	IWL_RATE_6M_PLCP  = 13,  	IWL_RATE_9M_PLCP  = 15, @@ -107,7 +107,7 @@ enum {  	/*FIXME:RS:add IWL_RATE_LEGACY_INVM_PLCP = 0,*/  }; -/* 4965 uCode API values for OFDM high-throughput (HT) bit rates */ +/* uCode API values for OFDM high-throughput (HT) bit rates */  enum {  	IWL_RATE_SISO_6M_PLCP = 0,  	IWL_RATE_SISO_12M_PLCP = 1, @@ -287,15 +287,6 @@ static inline u8 iwl4965_get_prev_ieee_rate(u8 rate_index)  }  /** - * iwl4965_fill_rs_info - Fill an output text buffer with the rate representation - * - * NOTE:  This is provided as a quick mechanism for a user to visualize - * the performance of the rate control algorithm and is not meant to be - * parsed software. - */ -extern int iwl4965_fill_rs_info(struct ieee80211_hw *, char *buf, u8 sta_id); - -/**   * iwl4965_rate_control_register - Register the rate control algorithm callbacks   *   * Since the rate control algorithm is hardware specific, there is no need @@ -305,7 +296,7 @@ extern int iwl4965_fill_rs_info(struct ieee80211_hw *, char *buf, u8 sta_id);   * ieee80211_register_hw   *   */ -extern int iwl4965_rate_control_register(void); +extern int iwlagn_rate_control_register(void);  /**   * iwl4965_rate_control_unregister - Unregister the rate control callbacks @@ -313,6 +304,6 @@ extern int iwl4965_rate_control_register(void);   * This should be called after calling ieee80211_unregister_hw, but before   * the driver is unloaded.   */ -extern void iwl4965_rate_control_unregister(void); +extern void iwlagn_rate_control_unregister(void); -#endif +#endif /* __iwl_agn__rs__ */ diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 71f5da3fe5c..b8407d5704a 100644 --- a/drivers/net/wireless/iwlwifi/iwl4965-base.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c @@ -65,7 +65,7 @@   * NOTE: DRV_NAME is defined in iwlwifi.h for use by iwl-debug.h and printk   */ -#define DRV_DESCRIPTION	"Intel(R) Wireless WiFi Link 4965AGN driver for Linux" +#define DRV_DESCRIPTION	"Intel(R) Wireless WiFi Link AGN driver for Linux"  #ifdef CONFIG_IWLWIFI_DEBUG  #define VD "d" @@ -73,7 +73,7 @@  #define VD  #endif -#ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT +#ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT  #define VS "s"  #else  #define VS @@ -86,6 +86,7 @@ MODULE_DESCRIPTION(DRV_DESCRIPTION);  MODULE_VERSION(DRV_VERSION);  MODULE_AUTHOR(DRV_COPYRIGHT);  MODULE_LICENSE("GPL"); +MODULE_ALIAS("iwl4965");  /*************** STATION TABLE MANAGEMENT ****   * mac80211 should be examined to determine if sta_info is duplicating @@ -444,11 +445,10 @@ static void iwl_free_frame(struct iwl_priv *priv, struct iwl_frame *frame)  	list_add(&frame->list, &priv->free_frames);  } -unsigned int iwl4965_fill_beacon_frame(struct iwl_priv *priv, -				struct ieee80211_hdr *hdr, -				const u8 *dest, int left) +static unsigned int iwl_fill_beacon_frame(struct iwl_priv *priv, +					  struct ieee80211_hdr *hdr, +					  const u8 *dest, int left)  { -  	if (!iwl_is_associated(priv) || !priv->ibss_beacon ||  	    ((priv->iw_mode != IEEE80211_IF_TYPE_IBSS) &&  	     (priv->iw_mode != IEEE80211_IF_TYPE_AP))) @@ -487,6 +487,38 @@ static u8 iwl4965_rate_get_lowest_plcp(struct iwl_priv *priv)  		return IWL_RATE_6M_PLCP;  } +unsigned int iwl4965_hw_get_beacon_cmd(struct iwl_priv *priv, +				       struct iwl_frame *frame, u8 rate) +{ +	struct iwl_tx_beacon_cmd *tx_beacon_cmd; +	unsigned int frame_size; + +	tx_beacon_cmd = &frame->u.beacon; +	memset(tx_beacon_cmd, 0, sizeof(*tx_beacon_cmd)); + +	tx_beacon_cmd->tx.sta_id = priv->hw_params.bcast_sta_id; +	tx_beacon_cmd->tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE; + +	frame_size = iwl_fill_beacon_frame(priv, tx_beacon_cmd->frame, +				iwl_bcast_addr, +				sizeof(frame->u) - sizeof(*tx_beacon_cmd)); + +	BUG_ON(frame_size > MAX_MPDU_SIZE); +	tx_beacon_cmd->tx.len = cpu_to_le16((u16)frame_size); + +	if ((rate == IWL_RATE_1M_PLCP) || (rate >= IWL_RATE_2M_PLCP)) +		tx_beacon_cmd->tx.rate_n_flags = +			iwl_hw_set_rate_n_flags(rate, RATE_MCS_CCK_MSK); +	else +		tx_beacon_cmd->tx.rate_n_flags = +			iwl_hw_set_rate_n_flags(rate, 0); + +	tx_beacon_cmd->tx.tx_flags = TX_CMD_FLG_SEQ_CTL_MSK | +				     TX_CMD_FLG_TSF_MSK | +				     TX_CMD_FLG_STA_RATE_MSK; + +	return sizeof(*tx_beacon_cmd) + frame_size; +}  static int iwl4965_send_beacon_cmd(struct iwl_priv *priv)  {  	struct iwl_frame *frame; @@ -608,7 +640,6 @@ static void iwl_activate_qos(struct iwl_priv *priv, u8 force)  }  #define MAX_UCODE_BEACON_INTERVAL	4096 -#define INTEL_CONN_LISTEN_INTERVAL	__constant_cpu_to_le16(0xA)  static __le16 iwl4965_adjust_beacon_interval(u16 beacon_val)  { @@ -638,7 +669,7 @@ static void iwl4965_setup_rxon_timing(struct iwl_priv *priv)  	priv->rxon_timing.timestamp.dw[0] =  				cpu_to_le32(priv->timestamp & 0xFFFFFFFF); -	priv->rxon_timing.listen_interval = INTEL_CONN_LISTEN_INTERVAL; +	priv->rxon_timing.listen_interval = cpu_to_le16(conf->listen_interval);  	tsf = priv->timestamp; @@ -853,7 +884,7 @@ static void iwl4965_set_rate(struct iwl_priv *priv)  		   (IWL_OFDM_BASIC_RATES_MASK >> IWL_FIRST_OFDM_RATE) & 0xFF;  } -#ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT +#ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT  #include "iwl-spectrum.h" @@ -1057,7 +1088,7 @@ static void iwl4965_rx_csa(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb)  static void iwl4965_rx_spectrum_measure_notif(struct iwl_priv *priv,  					  struct iwl_rx_mem_buffer *rxb)  { -#ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT +#ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT  	struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data;  	struct iwl4965_spectrum_notification *report = &(pkt->u.spectrum_notif); @@ -1231,6 +1262,37 @@ static void iwl4965_rx_card_state_notif(struct iwl_priv *priv,  		wake_up_interruptible(&priv->wait_command_queue);  } +int iwl4965_set_pwr_src(struct iwl_priv *priv, enum iwl_pwr_src src) +{ +	int ret; +	unsigned long flags; + +	spin_lock_irqsave(&priv->lock, flags); +	ret = iwl_grab_nic_access(priv); +	if (ret) +		goto err; + +	if (src == IWL_PWR_SRC_VAUX) { +		u32 val; +		ret = pci_read_config_dword(priv->pci_dev, PCI_POWER_SOURCE, +					    &val); + +		if (val & PCI_CFG_PMC_PME_FROM_D3COLD_SUPPORT) +			iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG, +					       APMG_PS_CTRL_VAL_PWR_SRC_VAUX, +					       ~APMG_PS_CTRL_MSK_PWR_SRC); +	} else { +		iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG, +				       APMG_PS_CTRL_VAL_PWR_SRC_VMAIN, +				       ~APMG_PS_CTRL_MSK_PWR_SRC); +	} + +	iwl_release_nic_access(priv); +err: +	spin_unlock_irqrestore(&priv->lock, flags); +	return ret; +} +  /**   * iwl4965_setup_rx_handlers - Initialize Rx handler callbacks   * @@ -2170,17 +2232,16 @@ static int __iwl4965_up(struct iwl_priv *priv)  	}  	/* If platform's RF_KILL switch is NOT set to KILL */ -	if (iwl_read32(priv, CSR_GP_CNTRL) & -				CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW) +	if (iwl_read32(priv, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW)  		clear_bit(STATUS_RF_KILL_HW, &priv->status);  	else  		set_bit(STATUS_RF_KILL_HW, &priv->status); -	if (!test_bit(STATUS_IN_SUSPEND, &priv->status) && -	    iwl_is_rfkill(priv)) { +	if (iwl_is_rfkill(priv)) { +		iwl4965_enable_interrupts(priv);  		IWL_WARNING("Radio disabled by %s RF Kill switch\n",  		    test_bit(STATUS_RF_KILL_HW, &priv->status) ? "HW" : "SW"); -		return -ENODEV; +		return 0;  	}  	iwl_write32(priv, CSR_INT, 0xFFFFFFFF); @@ -2216,11 +2277,6 @@ static int __iwl4965_up(struct iwl_priv *priv)  	memcpy(priv->ucode_data_backup.v_addr, priv->ucode_data.v_addr,  	       priv->ucode_data.len); -	/* We return success when we resume from suspend and rf_kill is on. */ -	if (test_bit(STATUS_RF_KILL_HW, &priv->status) || -	    test_bit(STATUS_RF_KILL_SW, &priv->status)) -		return 0; -  	for (i = 0; i < MAX_HW_RESTARTS; i++) {  		iwl_clear_stations_table(priv); @@ -2415,7 +2471,7 @@ static void iwl4965_post_associate(struct iwl_priv *priv)  	unsigned long flags;  	if (priv->iw_mode == IEEE80211_IF_TYPE_AP) { -		IWL_ERROR("%s Should not be called in AP mode\n", __FUNCTION__); +		IWL_ERROR("%s Should not be called in AP mode\n", __func__);  		return;  	} @@ -2491,7 +2547,7 @@ static void iwl4965_post_associate(struct iwl_priv *priv)  	default:  		IWL_ERROR("%s Should not be called in %d mode\n", -				__FUNCTION__, priv->iw_mode); +			  __func__, priv->iw_mode);  		break;  	} @@ -2589,6 +2645,9 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw)  	if (ret)  		goto out_release_irq; +	if (iwl_is_rfkill(priv)) +		goto out; +  	IWL_DEBUG_INFO("Start UP work done.\n");  	if (test_bit(STATUS_IN_SUSPEND, &priv->status)) @@ -2608,6 +2667,7 @@ static int iwl4965_mac_start(struct ieee80211_hw *hw)  		}  	} +out:  	priv->is_open = 1;  	IWL_DEBUG_MAC80211("leave\n");  	return 0; @@ -2773,6 +2833,7 @@ static int iwl4965_mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *co  	spin_lock_irqsave(&priv->lock, flags); +  	/* if we are switching from ht to 2.4 clear flags  	 * from any ht related info since 2.4 does not  	 * support ht */ @@ -3102,6 +3163,7 @@ static void iwl4965_bss_info_changed(struct ieee80211_hw *hw,  		if (bss_conf->assoc) {  			priv->assoc_id = bss_conf->aid;  			priv->beacon_int = bss_conf->beacon_int; +			priv->power_data.dtim_period = bss_conf->dtim_period;  			priv->timestamp = bss_conf->timestamp;  			priv->assoc_capability = bss_conf->assoc_capability;  			priv->next_scan_jiffies = jiffies + @@ -3345,6 +3407,39 @@ static int iwl4965_mac_conf_tx(struct ieee80211_hw *hw, u16 queue,  	return 0;  } +static int iwl4965_mac_ampdu_action(struct ieee80211_hw *hw, +			     enum ieee80211_ampdu_mlme_action action, +			     const u8 *addr, u16 tid, u16 *ssn) +{ +	struct iwl_priv *priv = hw->priv; +	DECLARE_MAC_BUF(mac); + +	IWL_DEBUG_HT("A-MPDU action on addr %s tid %d\n", +		     print_mac(mac, addr), tid); + +	if (!(priv->cfg->sku & IWL_SKU_N)) +		return -EACCES; + +	switch (action) { +	case IEEE80211_AMPDU_RX_START: +		IWL_DEBUG_HT("start Rx\n"); +		return iwl_rx_agg_start(priv, addr, tid, *ssn); +	case IEEE80211_AMPDU_RX_STOP: +		IWL_DEBUG_HT("stop Rx\n"); +		return iwl_rx_agg_stop(priv, addr, tid); +	case IEEE80211_AMPDU_TX_START: +		IWL_DEBUG_HT("start Tx\n"); +		return iwl_tx_agg_start(priv, addr, tid, ssn); +	case IEEE80211_AMPDU_TX_STOP: +		IWL_DEBUG_HT("stop Tx\n"); +		return iwl_tx_agg_stop(priv, addr, tid); +	default: +		IWL_DEBUG_HT("unknown\n"); +		return -EINVAL; +		break; +	} +	return 0; +}  static int iwl4965_mac_get_tx_stats(struct ieee80211_hw *hw,  				struct ieee80211_tx_queue_stats *stats)  { @@ -3592,15 +3687,6 @@ static ssize_t show_temperature(struct device *d,  static DEVICE_ATTR(temperature, S_IRUGO, show_temperature, NULL); -static ssize_t show_rs_window(struct device *d, -			      struct device_attribute *attr, -			      char *buf) -{ -	struct iwl_priv *priv = d->driver_data; -	return iwl4965_fill_rs_info(priv->hw, buf, IWL_AP_ID); -} -static DEVICE_ATTR(rs_window, S_IRUGO, show_rs_window, NULL); -  static ssize_t show_tx_power(struct device *d,  			     struct device_attribute *attr, char *buf)  { @@ -3699,7 +3785,7 @@ static ssize_t store_filter_flags(struct device *d,  static DEVICE_ATTR(filter_flags, S_IWUSR | S_IRUGO, show_filter_flags,  		   store_filter_flags); -#ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT +#ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT  static ssize_t show_measurement(struct device *d,  				struct device_attribute *attr, char *buf) @@ -3707,7 +3793,7 @@ static ssize_t show_measurement(struct device *d,  	struct iwl_priv *priv = dev_get_drvdata(d);  	struct iwl4965_spectrum_notification measure_report;  	u32 size = sizeof(measure_report), len = 0, ofs = 0; -	u8 *data = (u8 *) & measure_report; +	u8 *data = (u8 *)&measure_report;  	unsigned long flags;  	spin_lock_irqsave(&priv->lock, flags); @@ -3770,7 +3856,7 @@ static ssize_t store_measurement(struct device *d,  static DEVICE_ATTR(measurement, S_IRUSR | S_IWUSR,  		   show_measurement, store_measurement); -#endif /* CONFIG_IWL4965_SPECTRUM_MEASUREMENT */ +#endif /* CONFIG_IWLAGN_SPECTRUM_MEASUREMENT */  static ssize_t store_retry_rate(struct device *d,  				struct device_attribute *attr, @@ -3800,77 +3886,54 @@ static ssize_t store_power_level(struct device *d,  				 const char *buf, size_t count)  {  	struct iwl_priv *priv = dev_get_drvdata(d); -	int rc; +	int ret;  	int mode;  	mode = simple_strtoul(buf, NULL, 0);  	mutex_lock(&priv->mutex);  	if (!iwl_is_ready(priv)) { -		rc = -EAGAIN; +		ret = -EAGAIN;  		goto out;  	} -	rc = iwl_power_set_user_mode(priv, mode); -	if (rc) { +	ret = iwl_power_set_user_mode(priv, mode); +	if (ret) {  		IWL_DEBUG_MAC80211("failed setting power mode.\n");  		goto out;  	} -	rc = count; +	ret = count;   out:  	mutex_unlock(&priv->mutex); -	return rc; +	return ret;  } -#define MAX_WX_STRING 80 - -/* Values are in microsecond */ -static const s32 timeout_duration[] = { -	350000, -	250000, -	75000, -	37000, -	25000, -}; -static const s32 period_duration[] = { -	400000, -	700000, -	1000000, -	1000000, -	1000000 -}; -  static ssize_t show_power_level(struct device *d,  				struct device_attribute *attr, char *buf)  {  	struct iwl_priv *priv = dev_get_drvdata(d); +	int mode = priv->power_data.user_power_setting; +	int system = priv->power_data.system_power_setting;  	int level = priv->power_data.power_mode;  	char *p = buf; -	p += sprintf(p, "%d ", level); -	switch (level) { -	case IWL_POWER_MODE_CAM: -	case IWL_POWER_AC: -		p += sprintf(p, "(AC)"); +	switch (system) { +	case IWL_POWER_SYS_AUTO: +		p += sprintf(p, "SYSTEM:auto");  		break; -	case IWL_POWER_BATTERY: -		p += sprintf(p, "(BATTERY)"); +	case IWL_POWER_SYS_AC: +		p += sprintf(p, "SYSTEM:ac"); +		break; +	case IWL_POWER_SYS_BATTERY: +		p += sprintf(p, "SYSTEM:battery");  		break; -	default: -		p += sprintf(p, -			     "(Timeout %dms, Period %dms)", -			     timeout_duration[level - 1] / 1000, -			     period_duration[level - 1] / 1000);  	} -/* -	if (!(priv->power_mode & IWL_POWER_ENABLED)) -		p += sprintf(p, " OFF\n"); -	else -		p += sprintf(p, " \n"); -*/ -	p += sprintf(p, " \n"); -	return (p - buf + 1); + +	p += sprintf(p, "\tMODE:%s", (mode < IWL_POWER_AUTO)?"fixed":"auto"); +	p += sprintf(p, "\tINDEX:%d", level); +	p += sprintf(p, "\n"); +	return p - buf + 1;  }  static DEVICE_ATTR(power_level, S_IWUSR | S_IRUSR, show_power_level, @@ -3945,7 +4008,7 @@ static ssize_t show_statistics(struct device *d,  	struct iwl_priv *priv = dev_get_drvdata(d);  	u32 size = sizeof(struct iwl_notif_statistics);  	u32 len = 0, ofs = 0; -	u8 *data = (u8 *) & priv->statistics; +	u8 *data = (u8 *)&priv->statistics;  	int rc = 0;  	if (!iwl_is_alive(priv)) @@ -4041,12 +4104,11 @@ static struct attribute *iwl4965_sysfs_entries[] = {  	&dev_attr_channels.attr,  	&dev_attr_flags.attr,  	&dev_attr_filter_flags.attr, -#ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT +#ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT  	&dev_attr_measurement.attr,  #endif  	&dev_attr_power_level.attr,  	&dev_attr_retry_rate.attr, -	&dev_attr_rs_window.attr,  	&dev_attr_statistics.attr,  	&dev_attr_status.attr,  	&dev_attr_temperature.attr, @@ -4394,8 +4456,10 @@ static int iwl4965_pci_resume(struct pci_dev *pdev)  /* Hardware specific file defines the PCI IDs table for that hardware module */  static struct pci_device_id iwl_hw_card_ids[] = { +#ifdef CONFIG_IWL4965  	{IWL_PCI_DEVICE(0x4229, PCI_ANY_ID, iwl4965_agn_cfg)},  	{IWL_PCI_DEVICE(0x4230, PCI_ANY_ID, iwl4965_agn_cfg)}, +#endif /* CONFIG_IWL4965 */  #ifdef CONFIG_IWL5000  	{IWL_PCI_DEVICE(0x4232, 0x1205, iwl5100_bg_cfg)},  	{IWL_PCI_DEVICE(0x4232, 0x1305, iwl5100_bg_cfg)}, @@ -4431,7 +4495,7 @@ static int __init iwl4965_init(void)  	printk(KERN_INFO DRV_NAME ": " DRV_DESCRIPTION ", " DRV_VERSION "\n");  	printk(KERN_INFO DRV_NAME ": " DRV_COPYRIGHT "\n"); -	ret = iwl4965_rate_control_register(); +	ret = iwlagn_rate_control_register();  	if (ret) {  		IWL_ERROR("Unable to register rate control algorithm: %d\n", ret);  		return ret; @@ -4446,14 +4510,14 @@ static int __init iwl4965_init(void)  	return ret;  error_register: -	iwl4965_rate_control_unregister(); +	iwlagn_rate_control_unregister();  	return ret;  }  static void __exit iwl4965_exit(void)  {  	pci_unregister_driver(&iwl_driver); -	iwl4965_rate_control_unregister(); +	iwlagn_rate_control_unregister();  }  module_exit(iwl4965_exit); diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h index e9bb1de0ce3..28b5b09996e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-commands.h +++ b/drivers/net/wireless/iwlwifi/iwl-commands.h @@ -666,8 +666,7 @@ struct iwl4965_rxon_assoc_cmd {  	__le16 reserved;  } __attribute__ ((packed)); - - +#define IWL_CONN_MAX_LISTEN_INTERVAL	10  /*   * REPLY_RXON_TIMING = 0x14 (command, has simple generic response) @@ -1076,10 +1075,12 @@ struct iwl4965_rx_frame {  } __attribute__ ((packed));  /* Fixed (non-configurable) rx data from phy */ -#define RX_PHY_FLAGS_ANTENNAE_OFFSET		(4) -#define RX_PHY_FLAGS_ANTENNAE_MASK		(0x70) -#define IWL_AGC_DB_MASK 	(0x3f80)	/* MASK(7,13) */ -#define IWL_AGC_DB_POS		(7) + +#define IWL49_RX_RES_PHY_CNT 14 +#define IWL49_RX_PHY_FLAGS_ANTENNAE_OFFSET	(4) +#define IWL49_RX_PHY_FLAGS_ANTENNAE_MASK	(0x70) +#define IWL49_AGC_DB_MASK			(0x3f80)	/* MASK(7,13) */ +#define IWL49_AGC_DB_POS			(7)  struct iwl4965_rx_non_cfg_phy {  	__le16 ant_selection;	/* ant A bit 4, ant B bit 5, ant C bit 6 */  	__le16 agc_info;	/* agc code 0:6, agc dB 7:13, reserved 14:15 */ @@ -1087,12 +1088,30 @@ struct iwl4965_rx_non_cfg_phy {  	u8 pad[0];  } __attribute__ ((packed)); + +#define IWL50_RX_RES_PHY_CNT 8 +#define IWL50_RX_RES_AGC_IDX     1 +#define IWL50_RX_RES_RSSI_AB_IDX 2 +#define IWL50_RX_RES_RSSI_C_IDX  3 +#define IWL50_OFDM_AGC_MSK 0xfe00 +#define IWL50_OFDM_AGC_BIT_POS 9 +#define IWL50_OFDM_RSSI_A_MSK 0x00ff +#define IWL50_OFDM_RSSI_A_BIT_POS 0 +#define IWL50_OFDM_RSSI_B_MSK 0xff0000 +#define IWL50_OFDM_RSSI_B_BIT_POS 16 +#define IWL50_OFDM_RSSI_C_MSK 0x00ff +#define IWL50_OFDM_RSSI_C_BIT_POS 0 + +struct iwl5000_non_cfg_phy { +	__le32 non_cfg_phy[IWL50_RX_RES_PHY_CNT];  /* upto 8 phy entries */ +} __attribute__ ((packed)); + +  /*   * REPLY_RX = 0xc3 (response only, not a command)   * Used only for legacy (non 11n) frames.   */ -#define RX_RES_PHY_CNT 14 -struct iwl4965_rx_phy_res { +struct iwl_rx_phy_res {  	u8 non_cfg_phy_cnt;     /* non configurable DSP phy data byte count */  	u8 cfg_phy_cnt;		/* configurable DSP phy data byte count */  	u8 stat_id;		/* configurable DSP phy data set ID */ @@ -1101,8 +1120,7 @@ struct iwl4965_rx_phy_res {  	__le32 beacon_time_stamp; /* beacon at on-air rise */  	__le16 phy_flags;	/* general phy flags: band, modulation, ... */  	__le16 channel;		/* channel number */ -	__le16 non_cfg_phy[RX_RES_PHY_CNT];	/* upto 14 phy entries */ -	__le32 reserved2; +	u8 non_cfg_phy_buf[32]; /* for various implementations of non_cfg_phy */  	__le32 rate_n_flags;	/* RATE_MCS_* */  	__le16 byte_count;	/* frame's byte-count */  	__le16 reserved3; @@ -1993,7 +2011,7 @@ struct iwl4965_spectrum_notification {   *****************************************************************************/  /** - * struct iwl4965_powertable_cmd - Power Table Command + * struct iwl_powertable_cmd - Power Table Command   * @flags: See below:   *   * POWER_TABLE_CMD = 0x77 (command, has simple generic response) @@ -2027,7 +2045,7 @@ struct iwl4965_spectrum_notification {  #define IWL_POWER_PCI_PM_MSK			__constant_cpu_to_le16(1 << 3)  #define IWL_POWER_FAST_PD			__constant_cpu_to_le16(1 << 4) -struct iwl4965_powertable_cmd { +struct iwl_powertable_cmd {  	__le16 flags;  	u8 keep_alive_seconds;  	u8 debug_flags; @@ -2324,7 +2342,7 @@ struct iwl4965_beacon_notif {  /*   * REPLY_TX_BEACON = 0x91 (command, has simple generic response)   */ -struct iwl4965_tx_beacon_cmd { +struct iwl_tx_beacon_cmd {  	struct iwl_tx_cmd tx;  	__le16 tim_idx;  	u8 tim_size; diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index e3427c205cc..9bd61809129 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c @@ -383,8 +383,8 @@ void iwl_reset_qos(struct iwl_priv *priv)  }  EXPORT_SYMBOL(iwl_reset_qos); -#define MAX_BIT_RATE_40_MHZ 0x96; /* 150 Mbps */ -#define MAX_BIT_RATE_20_MHZ 0x48; /* 72 Mbps */ +#define MAX_BIT_RATE_40_MHZ 0x96 /* 150 Mbps */ +#define MAX_BIT_RATE_20_MHZ 0x48 /* 72 Mbps */  static void iwlcore_init_ht_hw_capab(const struct iwl_priv *priv,  			      struct ieee80211_ht_info *ht_info,  			      enum ieee80211_band band) @@ -815,7 +815,7 @@ int iwl_setup_mac(struct iwl_priv *priv)  {  	int ret;  	struct ieee80211_hw *hw = priv->hw; -	hw->rate_control_algorithm = "iwl-4965-rs"; +	hw->rate_control_algorithm = "iwl-agn-rs";  	/* Tell mac80211 our characteristics */  	hw->flags = IEEE80211_HW_SIGNAL_DBM | @@ -827,6 +827,7 @@ int iwl_setup_mac(struct iwl_priv *priv)  		hw->ampdu_queues = priv->cfg->mod_params->num_of_ampdu_queues;  	hw->conf.beacon_int = 100; +	hw->max_listen_interval = IWL_CONN_MAX_LISTEN_INTERVAL;  	if (priv->bands[IEEE80211_BAND_2GHZ].n_channels)  		priv->hw->wiphy->bands[IEEE80211_BAND_2GHZ] = diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index db66114f1e5..64f139e9744 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h @@ -95,6 +95,8 @@ struct iwl_hcmd_utils_ops {  	void (*chain_noise_reset)(struct iwl_priv *priv);  	void (*rts_tx_cmd_flag)(struct ieee80211_tx_info *info,  			__le32 *tx_flags); +	int  (*calc_rssi)(struct iwl_priv *priv, +			  struct iwl_rx_phy_res *rx_resp);  };  struct iwl_lib_ops { @@ -139,7 +141,6 @@ struct iwl_lib_ops {  		int (*set_pwr_src)(struct iwl_priv *priv, enum iwl_pwr_src src);  	} apm_ops;  	/* power */ -	int (*set_power)(struct iwl_priv *priv, void *cmd);  	int (*send_tx_power) (struct iwl_priv *priv);  	void (*update_chain_flags)(struct iwl_priv *priv);  	void (*temperature) (struct iwl_priv *priv); diff --git a/drivers/net/wireless/iwlwifi/iwl-csr.h b/drivers/net/wireless/iwlwifi/iwl-csr.h index 545ed692d88..52629fbd835 100644 --- a/drivers/net/wireless/iwlwifi/iwl-csr.h +++ b/drivers/net/wireless/iwlwifi/iwl-csr.h @@ -104,6 +104,7 @@   *  3-2:  0 = A, 1 = B, 2 = C, 3 = D step   */  #define CSR_HW_REV_WA_REG	(CSR_BASE+0x22C) +#define CSR_DBG_HPET_MEM_REG	(CSR_BASE+0x240)  /* Bits for CSR_HW_IF_CONFIG_REG */  #define CSR49_HW_IF_CONFIG_REG_BIT_4965_R	(0x00000010) @@ -118,7 +119,12 @@  #define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_A    (0x00000000)  #define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_B    (0x00001000) -#define CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM     (0x00200000) +#define CSR_HW_IF_CONFIG_REG_BIT_HAP_WAKE_L1A		(0x00080000) +#define CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM		(0x00200000) +#define CSR_HW_IF_CONFIG_REG_BIT_PCI_OWN_SEM		(0x00400000) +#define CSR_HW_IF_CONFIG_REG_BIT_ME_OWN			(0x02000000) +#define CSR_HW_IF_CONFIG_REG_BIT_WAKE_ME		(0x08000000) +  /* interrupt flags in INTA, set by uCode or hardware (e.g. dma),   * acknowledged (reset) by host writing "1" to flagged bits. */ @@ -236,6 +242,8 @@  #define CSR39_ANA_PLL_CFG_VAL        (0x01000000)  #define CSR50_ANA_PLL_CFG_VAL        (0x00880300) +/* HPET MEM debug */ +#define CSR_DBG_HPET_MEM_REG_VAL	(0xFFFF0000)  /*=== HBUS (Host-side Bus) ===*/  #define HBUS_BASE	(0x400)  /* diff --git a/drivers/net/wireless/iwlwifi/iwl-debug.h b/drivers/net/wireless/iwlwifi/iwl-debug.h index d6d729e86bd..b4ffd33ef98 100644 --- a/drivers/net/wireless/iwlwifi/iwl-debug.h +++ b/drivers/net/wireless/iwlwifi/iwl-debug.h @@ -33,12 +33,12 @@  #define IWL_DEBUG(level, fmt, args...) \  do { if (priv->debug_level & (level)) \    dev_printk(KERN_ERR, &(priv->hw->wiphy->dev), "%c %s " fmt, \ -	 in_interrupt() ? 'I' : 'U', __FUNCTION__ , ## args); } while (0) +	 in_interrupt() ? 'I' : 'U', __func__ , ## args); } while (0)  #define IWL_DEBUG_LIMIT(level, fmt, args...) \  do { if ((priv->debug_level & (level)) && net_ratelimit()) \    dev_printk(KERN_ERR, &(priv->hw->wiphy->dev), "%c %s " fmt, \ -	 in_interrupt() ? 'I' : 'U', __FUNCTION__ , ## args); } while (0) +	 in_interrupt() ? 'I' : 'U', __func__ , ## args); } while (0)  #ifdef CONFIG_IWLWIFI_DEBUGFS  struct iwl_debugfs { diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c index ed948dc59b3..20db0eb636a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c +++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c @@ -231,7 +231,7 @@ static ssize_t iwl_dbgfs_stations_read(struct file *file, char __user *user_buf,  	DECLARE_MAC_BUF(mac);  	buf = kmalloc(bufsz, GFP_KERNEL); -	if(!buf) +	if (!buf)  		return -ENOMEM;  	pos += scnprintf(buf + pos, bufsz - pos, "num of stations: %d\n\n", @@ -364,16 +364,19 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name)  {  	struct iwl_debugfs *dbgfs;  	struct dentry *phyd = priv->hw->wiphy->debugfsdir; +	int ret = 0;  	dbgfs = kzalloc(sizeof(struct iwl_debugfs), GFP_KERNEL);  	if (!dbgfs) { +		ret = -ENOMEM;  		goto err;  	}  	priv->dbgfs = dbgfs;  	dbgfs->name = name;  	dbgfs->dir_drv = debugfs_create_dir(name, phyd); -	if (!dbgfs->dir_drv || IS_ERR(dbgfs->dir_drv)){ +	if (!dbgfs->dir_drv || IS_ERR(dbgfs->dir_drv)) { +		ret = -ENOENT;  		goto err;  	} @@ -394,7 +397,7 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name)  err:  	IWL_ERROR("Can't open the debugfs directory\n");  	iwl_dbgfs_unregister(priv); -	return -ENOENT; +	return ret;  }  EXPORT_SYMBOL(iwl_dbgfs_register); @@ -404,7 +407,7 @@ EXPORT_SYMBOL(iwl_dbgfs_register);   */  void iwl_dbgfs_unregister(struct iwl_priv *priv)  { -	if (!(priv->dbgfs)) +	if (!priv->dbgfs)  		return;  	DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_eeprom); diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index 4d789e353e3..c19db438306 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h @@ -36,7 +36,7 @@  #include <linux/kernel.h>  #include <net/ieee80211_radiotap.h> -#define DRV_NAME        "iwl4965" +#define DRV_NAME        "iwlagn"  #include "iwl-rfkill.h"  #include "iwl-eeprom.h"  #include "iwl-4965-hw.h" @@ -45,6 +45,7 @@  #include "iwl-debug.h"  #include "iwl-led.h"  #include "iwl-power.h" +#include "iwl-agn-rs.h"  /* configuration for the iwl4965 */  extern struct iwl_cfg iwl4965_agn_cfg; @@ -134,8 +135,7 @@ struct iwl_tx_info {  struct iwl_tx_queue {  	struct iwl_queue q;  	struct iwl_tfd_frame *bd; -	struct iwl_cmd *cmd; -	dma_addr_t dma_addr_cmd; +	struct iwl_cmd *cmd[TFD_TX_CMD_SLOTS];  	struct iwl_tx_info *txb;  	int need_update;  	int sched_retry; @@ -191,7 +191,6 @@ struct iwl4965_clip_group {  	const s8 clip_powers[IWL_MAX_RATES];  }; -#include "iwl-4965-rs.h"  #define IWL_TX_FIFO_AC0	0  #define IWL_TX_FIFO_AC1	1 @@ -219,7 +218,7 @@ enum iwl_pwr_src {  struct iwl_frame {  	union {  		struct ieee80211_hdr frame; -		struct iwl4965_tx_beacon_cmd beacon; +		struct iwl_tx_beacon_cmd beacon;  		u8 raw[IEEE80211_FRAME_LEN];  		u8 cmd[360];  	} u; @@ -283,10 +282,9 @@ struct iwl_cmd {  		u32 val32;  		struct iwl4965_bt_cmd bt;  		struct iwl4965_rxon_time_cmd rxon_time; -		struct iwl4965_powertable_cmd powertable; +		struct iwl_powertable_cmd powertable;  		struct iwl_qosparam_cmd qosparam;  		struct iwl_tx_cmd tx; -		struct iwl4965_tx_beacon_cmd tx_beacon;  		struct iwl4965_rxon_assoc_cmd rxon_assoc;  		struct iwl_rem_sta_cmd rm_sta;  		u8 *indirect; @@ -590,6 +588,7 @@ extern unsigned int iwl4965_fill_beacon_frame(struct iwl_priv *priv,  					const u8 *dest, int left);  extern void iwl4965_update_chain_flags(struct iwl_priv *priv);  int iwl4965_set_pwr_src(struct iwl_priv *priv, enum iwl_pwr_src src); +extern int iwl4965_set_power(struct iwl_priv *priv, void *cmd);  extern const u8 iwl_bcast_addr[ETH_ALEN]; @@ -642,10 +641,6 @@ struct iwl_priv;   * Forward declare iwl-4965.c functions for iwl-base.c   */  extern void iwl4965_rf_kill_ct_config(struct iwl_priv *priv); - -int iwl4965_mac_ampdu_action(struct ieee80211_hw *hw, -				    enum ieee80211_ampdu_mlme_action action, -				    const u8 *addr, u16 tid, u16 *ssn);  int iwl4965_check_empty_hw_queue(struct iwl_priv *priv, int sta_id,  					u8 tid, int txq_id); @@ -812,14 +807,11 @@ struct iwl_chain_noise_data {  #define EEPROM_SEM_RETRY_LIMIT 1000	/* number of attempts (not time) */ -#ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT -  enum {  	MEASUREMENT_READY = (1 << 0),  	MEASUREMENT_ACTIVE = (1 << 1),  }; -#endif  #define IWL_MAX_NUM_QUEUES	20 /* FIXME: do dynamic allocation */ @@ -844,7 +836,7 @@ struct iwl_priv {  	struct ieee80211_supported_band bands[IEEE80211_NUM_BANDS]; -#ifdef CONFIG_IWL4965_SPECTRUM_MEASUREMENT +#ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT  	/* spectrum measurement report caching */  	struct iwl4965_spectrum_notification measure_report;  	u8 measurement_status; diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-eeprom.c index 4a08a1b5097..bce53830b30 100644 --- a/drivers/net/wireless/iwlwifi/iwl-eeprom.c +++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.c @@ -273,8 +273,7 @@ EXPORT_SYMBOL(iwl_eeprom_init);  void iwl_eeprom_free(struct iwl_priv *priv)  { -	if(priv->eeprom) -		kfree(priv->eeprom); +	kfree(priv->eeprom);  	priv->eeprom = NULL;  }  EXPORT_SYMBOL(iwl_eeprom_free); diff --git a/drivers/net/wireless/iwlwifi/iwl-hcmd.c b/drivers/net/wireless/iwlwifi/iwl-hcmd.c index 8fa991b7202..6512834bb91 100644 --- a/drivers/net/wireless/iwlwifi/iwl-hcmd.c +++ b/drivers/net/wireless/iwlwifi/iwl-hcmd.c @@ -228,7 +228,7 @@ cancel:  		 * TX cmd queue. Otherwise in case the cmd comes  		 * in later, it will possibly set an invalid  		 * address (cmd->meta.source). */ -		qcmd = &priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_idx]; +		qcmd = priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_idx];  		qcmd->meta.flags &= ~CMD_WANT_SKB;  	}  fail: diff --git a/drivers/net/wireless/iwlwifi/iwl-led.c b/drivers/net/wireless/iwlwifi/iwl-led.c index 61250e6a7d1..cb11c4a4d69 100644 --- a/drivers/net/wireless/iwlwifi/iwl-led.c +++ b/drivers/net/wireless/iwlwifi/iwl-led.c @@ -161,12 +161,32 @@ int iwl4965_led_off(struct iwl_priv *priv, int led_id)  /* Set led register off */  static int iwl4965_led_off_reg(struct iwl_priv *priv, int led_id)  { -	IWL_DEBUG_LED("radio off\n"); +	IWL_DEBUG_LED("LED Reg off\n");  	iwl_write32(priv, CSR_LED_REG, CSR_LED_REG_TRUN_OFF);  	return 0;  }  /* + * Set led register in case of disassociation according to rfkill state + */ +static int iwl_led_associate(struct iwl_priv *priv, int led_id) +{ +	IWL_DEBUG_LED("Associated\n"); +	priv->allow_blinking = 1; +	return iwl4965_led_on_reg(priv, led_id); +} +static int iwl_led_disassociate(struct iwl_priv *priv, int led_id) +{ +	priv->allow_blinking = 0; +	if (iwl_is_rfkill(priv)) +		iwl4965_led_off_reg(priv, led_id); +	else +		iwl4965_led_on_reg(priv, led_id); + +	return 0; +} + +/*   * brightness call back function for Tx/Rx LED   */  static int iwl_led_associated(struct iwl_priv *priv, int led_id) @@ -199,16 +219,10 @@ static void iwl_led_brightness_set(struct led_classdev *led_cdev,  			led_type_str[led->type], brightness);  	switch (brightness) {  	case LED_FULL: -		if (led->type == IWL_LED_TRG_ASSOC) -			priv->allow_blinking = 1; -  		if (led->led_on)  			led->led_on(priv, IWL_LED_LINK);  		break;  	case LED_OFF: -		if (led->type == IWL_LED_TRG_ASSOC) -			priv->allow_blinking = 0; -  		if (led->led_off)  			led->led_off(priv, IWL_LED_LINK);  		break; @@ -228,12 +242,12 @@ static void iwl_led_brightness_set(struct led_classdev *led_cdev,   */  static int iwl_leds_register_led(struct iwl_priv *priv, struct iwl_led *led,  				   enum led_type type, u8 set_led, -				   const char *name, char *trigger) +				   char *trigger)  {  	struct device *device = wiphy_dev(priv->hw->wiphy);  	int ret; -	led->led_dev.name = name; +	led->led_dev.name = led->name;  	led->led_dev.brightness_set = iwl_led_brightness_set;  	led->led_dev.default_trigger = trigger; @@ -284,12 +298,6 @@ static int iwl_get_blink_rate(struct iwl_priv *priv)  	return i;  } -static inline int is_rf_kill(struct iwl_priv *priv) -{ -	return test_bit(STATUS_RF_KILL_HW, &priv->status) || -		test_bit(STATUS_RF_KILL_SW, &priv->status); -} -  /*   * this function called from handler. Since setting Led command can   * happen very frequent we postpone led command to be called from @@ -303,7 +311,7 @@ void iwl_leds_background(struct iwl_priv *priv)  		priv->last_blink_time = 0;  		return;  	} -	if (is_rf_kill(priv)) { +	if (iwl_is_rfkill(priv)) {  		priv->last_blink_time = 0;  		return;  	} @@ -337,7 +345,6 @@ EXPORT_SYMBOL(iwl_leds_background);  int iwl_leds_register(struct iwl_priv *priv)  {  	char *trigger; -	char name[32];  	int ret;  	priv->last_blink_rate = 0; @@ -346,7 +353,8 @@ int iwl_leds_register(struct iwl_priv *priv)  	priv->allow_blinking = 0;  	trigger = ieee80211_get_radio_led_name(priv->hw); -	snprintf(name, sizeof(name), "iwl-%s:radio", +	snprintf(priv->led[IWL_LED_TRG_RADIO].name, +		 sizeof(priv->led[IWL_LED_TRG_RADIO].name), "iwl-%s:radio",  		 wiphy_name(priv->hw->wiphy));  	priv->led[IWL_LED_TRG_RADIO].led_on = iwl4965_led_on_reg; @@ -354,31 +362,33 @@ int iwl_leds_register(struct iwl_priv *priv)  	priv->led[IWL_LED_TRG_RADIO].led_pattern = NULL;  	ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_RADIO], -				   IWL_LED_TRG_RADIO, 1, name, trigger); +				   IWL_LED_TRG_RADIO, 1, trigger);  	if (ret)  		goto exit_fail;  	trigger = ieee80211_get_assoc_led_name(priv->hw); -	snprintf(name, sizeof(name), "iwl-%s:assoc", +	snprintf(priv->led[IWL_LED_TRG_ASSOC].name, +		 sizeof(priv->led[IWL_LED_TRG_ASSOC].name), "iwl-%s:assoc",  		 wiphy_name(priv->hw->wiphy));  	ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_ASSOC], -				   IWL_LED_TRG_ASSOC, 0, name, trigger); +				   IWL_LED_TRG_ASSOC, 0, trigger);  	/* for assoc always turn led on */ -	priv->led[IWL_LED_TRG_ASSOC].led_on = iwl4965_led_on_reg; -	priv->led[IWL_LED_TRG_ASSOC].led_off = iwl4965_led_on_reg; +	priv->led[IWL_LED_TRG_ASSOC].led_on = iwl_led_associate; +	priv->led[IWL_LED_TRG_ASSOC].led_off = iwl_led_disassociate;  	priv->led[IWL_LED_TRG_ASSOC].led_pattern = NULL;  	if (ret)  		goto exit_fail;  	trigger = ieee80211_get_rx_led_name(priv->hw); -	snprintf(name, sizeof(name), "iwl-%s:RX", wiphy_name(priv->hw->wiphy)); - +	snprintf(priv->led[IWL_LED_TRG_RX].name, +		 sizeof(priv->led[IWL_LED_TRG_RX].name), "iwl-%s:RX", +		 wiphy_name(priv->hw->wiphy));  	ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_RX], -				   IWL_LED_TRG_RX, 0, name, trigger); +				   IWL_LED_TRG_RX, 0, trigger);  	priv->led[IWL_LED_TRG_RX].led_on = iwl_led_associated;  	priv->led[IWL_LED_TRG_RX].led_off = iwl_led_associated; @@ -388,9 +398,12 @@ int iwl_leds_register(struct iwl_priv *priv)  		goto exit_fail;  	trigger = ieee80211_get_tx_led_name(priv->hw); -	snprintf(name, sizeof(name), "iwl-%s:TX", wiphy_name(priv->hw->wiphy)); +	snprintf(priv->led[IWL_LED_TRG_TX].name, +		 sizeof(priv->led[IWL_LED_TRG_TX].name), "iwl-%s:TX", +		 wiphy_name(priv->hw->wiphy)); +  	ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_TX], -				   IWL_LED_TRG_TX, 0, name, trigger); +				   IWL_LED_TRG_TX, 0, trigger);  	priv->led[IWL_LED_TRG_TX].led_on = iwl_led_associated;  	priv->led[IWL_LED_TRG_TX].led_off = iwl_led_associated; diff --git a/drivers/net/wireless/iwlwifi/iwl-led.h b/drivers/net/wireless/iwlwifi/iwl-led.h index 1980ae5a7e8..588c9ad20e8 100644 --- a/drivers/net/wireless/iwlwifi/iwl-led.h +++ b/drivers/net/wireless/iwlwifi/iwl-led.h @@ -52,6 +52,7 @@ enum led_type {  struct iwl_led {  	struct iwl_priv *priv;  	struct led_classdev led_dev; +	char name[32];  	int (*led_on) (struct iwl_priv *priv, int led_id);  	int (*led_off) (struct iwl_priv *priv, int led_id); diff --git a/drivers/net/wireless/iwlwifi/iwl-power.c b/drivers/net/wireless/iwlwifi/iwl-power.c index 2e71803e09b..028e3053c0c 100644 --- a/drivers/net/wireless/iwlwifi/iwl-power.c +++ b/drivers/net/wireless/iwlwifi/iwl-power.c @@ -82,7 +82,7 @@  /* default power management (not Tx power) table values */  /* for tim  0-10 */ -static struct iwl_power_vec_entry range_0[IWL_POWER_AC] = { +static struct iwl_power_vec_entry range_0[IWL_POWER_MAX] = {  	{{NOSLP, SLP_TOUT(0), SLP_TOUT(0), SLP_VEC(0, 0, 0, 0, 0)}, 0},  	{{SLP, SLP_TOUT(200), SLP_TOUT(500), SLP_VEC(1, 2, 2, 2, 0xFF)}, 0},  	{{SLP, SLP_TOUT(200), SLP_TOUT(300), SLP_VEC(1, 2, 2, 2, 0xFF)}, 0}, @@ -93,7 +93,7 @@ static struct iwl_power_vec_entry range_0[IWL_POWER_AC] = {  /* for tim = 3-10 */ -static struct iwl_power_vec_entry range_1[IWL_POWER_AC] = { +static struct iwl_power_vec_entry range_1[IWL_POWER_MAX] = {  	{{NOSLP, SLP_TOUT(0), SLP_TOUT(0), SLP_VEC(0, 0, 0, 0, 0)}, 0},  	{{SLP, SLP_TOUT(200), SLP_TOUT(500), SLP_VEC(1, 2, 3, 4, 4)}, 0},  	{{SLP, SLP_TOUT(200), SLP_TOUT(300), SLP_VEC(1, 2, 3, 4, 7)}, 0}, @@ -103,7 +103,7 @@ static struct iwl_power_vec_entry range_1[IWL_POWER_AC] = {  };  /* for tim > 11 */ -static struct iwl_power_vec_entry range_2[IWL_POWER_AC] = { +static struct iwl_power_vec_entry range_2[IWL_POWER_MAX] = {  	{{NOSLP, SLP_TOUT(0), SLP_TOUT(0), SLP_VEC(0, 0, 0, 0, 0)}, 0},  	{{SLP, SLP_TOUT(200), SLP_TOUT(500), SLP_VEC(1, 2, 3, 4, 0xFF)}, 0},  	{{SLP, SLP_TOUT(200), SLP_TOUT(300), SLP_VEC(2, 4, 6, 7, 0xFF)}, 0}, @@ -112,12 +112,19 @@ static struct iwl_power_vec_entry range_2[IWL_POWER_AC] = {  	{{SLP, SLP_TOUT(25), SLP_TOUT(25), SLP_VEC(4, 7, 10, 10, 0xFF)}, 0}  }; +/* set card power command */ +static int iwl_set_power(struct iwl_priv *priv, void *cmd) +{ +	return iwl_send_cmd_pdu_async(priv, POWER_TABLE_CMD, +				      sizeof(struct iwl_powertable_cmd), +				      cmd, NULL); +}  /* decide the right power level according to association status   * and battery status   */  static u16 iwl_get_auto_power_mode(struct iwl_priv *priv)  { -	u16 mode = priv->power_data.user_power_setting; +	u16 mode;  	switch (priv->power_data.user_power_setting) {  	case IWL_POWER_AUTO: @@ -129,12 +136,16 @@ static u16 iwl_get_auto_power_mode(struct iwl_priv *priv)  		else  			mode = IWL_POWER_ON_AC_DISASSOC;  		break; +	/* FIXME: remove battery and ac from here */  	case IWL_POWER_BATTERY:  		mode = IWL_POWER_INDEX_3;  		break;  	case IWL_POWER_AC:  		mode = IWL_POWER_MODE_CAM;  		break; +	default: +		mode = priv->power_data.user_power_setting; +		break;  	}  	return mode;  } @@ -144,7 +155,7 @@ static int iwl_power_init_handle(struct iwl_priv *priv)  {  	int ret = 0, i;  	struct iwl_power_mgr *pow_data; -	int size = sizeof(struct iwl_power_vec_entry) * IWL_POWER_AC; +	int size = sizeof(struct iwl_power_vec_entry) * IWL_POWER_MAX;  	u16 pci_pm;  	IWL_DEBUG_POWER("Initialize power \n"); @@ -162,11 +173,11 @@ static int iwl_power_init_handle(struct iwl_priv *priv)  	if (ret != 0)  		return 0;  	else { -		struct iwl4965_powertable_cmd *cmd; +		struct iwl_powertable_cmd *cmd;  		IWL_DEBUG_POWER("adjust power command flags\n"); -		for (i = 0; i < IWL_POWER_AC; i++) { +		for (i = 0; i < IWL_POWER_MAX; i++) {  			cmd = &pow_data->pwr_range_0[i].cmd;  			if (pci_pm & 0x1) @@ -180,7 +191,7 @@ static int iwl_power_init_handle(struct iwl_priv *priv)  /* adjust power command according to dtim period and power level*/  static int iwl_update_power_command(struct iwl_priv *priv, -				    struct iwl4965_powertable_cmd *cmd, +				    struct iwl_powertable_cmd *cmd,  				    u16 mode)  {  	int ret = 0, i; @@ -204,7 +215,7 @@ static int iwl_update_power_command(struct iwl_priv *priv,  		range = &pow_data->pwr_range_2[0];  	period = pow_data->dtim_period; -	memcpy(cmd, &range[mode].cmd, sizeof(struct iwl4965_powertable_cmd)); +	memcpy(cmd, &range[mode].cmd, sizeof(struct iwl_powertable_cmd));  	if (period == 0) {  		period = 1; @@ -258,17 +269,18 @@ int iwl_power_update_mode(struct iwl_priv *priv, u8 refresh)  	* else user level */  	switch (setting->system_power_setting) { -	case IWL_POWER_AUTO: +	case IWL_POWER_SYS_AUTO:  		final_mode = iwl_get_auto_power_mode(priv);  		break; -	case IWL_POWER_BATTERY: +	case IWL_POWER_SYS_BATTERY:  		final_mode = IWL_POWER_INDEX_3;  		break; -	case IWL_POWER_AC: +	case IWL_POWER_SYS_AC:  		final_mode = IWL_POWER_MODE_CAM;  		break;  	default: -		final_mode = setting->system_power_setting; +		final_mode = IWL_POWER_INDEX_3; +		WARN_ON(1);  	}  	if (setting->critical_power_setting > final_mode) @@ -280,7 +292,7 @@ int iwl_power_update_mode(struct iwl_priv *priv, u8 refresh)  	if (!iwl_is_rfkill(priv) && !setting->power_disabled &&  	    ((setting->power_mode != final_mode) || refresh)) { -		struct iwl4965_powertable_cmd cmd; +		struct iwl_powertable_cmd cmd;  		if (final_mode != IWL_POWER_MODE_CAM)  			set_bit(STATUS_POWER_PMI, &priv->status); @@ -291,8 +303,7 @@ int iwl_power_update_mode(struct iwl_priv *priv, u8 refresh)  		if (final_mode == IWL_POWER_INDEX_5)  			cmd.flags |= IWL_POWER_FAST_PD; -		if (priv->cfg->ops->lib->set_power) -			ret = priv->cfg->ops->lib->set_power(priv, &cmd); +		ret = iwl_set_power(priv, &cmd);  		if (final_mode == IWL_POWER_MODE_CAM)  			clear_bit(STATUS_POWER_PMI, &priv->status); @@ -388,7 +399,7 @@ void iwl_power_initialize(struct iwl_priv *priv)  	iwl_power_init_handle(priv);  	priv->power_data.user_power_setting = IWL_POWER_AUTO;  	priv->power_data.power_disabled = 0; -	priv->power_data.system_power_setting = IWL_POWER_AUTO; +	priv->power_data.system_power_setting = IWL_POWER_SYS_AUTO;  	priv->power_data.is_battery_active = 0;  	priv->power_data.power_disabled = 0;  	priv->power_data.critical_power_setting = 0; diff --git a/drivers/net/wireless/iwlwifi/iwl-power.h b/drivers/net/wireless/iwlwifi/iwl-power.h index b066724a1c2..abcbbf96a84 100644 --- a/drivers/net/wireless/iwlwifi/iwl-power.h +++ b/drivers/net/wireless/iwlwifi/iwl-power.h @@ -33,12 +33,25 @@  struct iwl_priv; -#define IWL_POWER_MODE_CAM	0x00    /* Continuously Aware Mode, always on */ -#define IWL_POWER_INDEX_3	0x03 -#define IWL_POWER_INDEX_5	0x05 -#define IWL_POWER_AC		0x06 -#define IWL_POWER_BATTERY	0x07 -#define IWL_POWER_AUTO		0x08 +enum { +	IWL_POWER_MODE_CAM, /* Continuously Aware Mode, always on */ +	IWL_POWER_INDEX_1, +	IWL_POWER_INDEX_2, +	IWL_POWER_INDEX_3, +	IWL_POWER_INDEX_4, +	IWL_POWER_INDEX_5, +	IWL_POWER_AUTO, +	IWL_POWER_MAX = IWL_POWER_AUTO, +	IWL_POWER_AC, +	IWL_POWER_BATTERY, +}; + +enum { +	IWL_POWER_SYS_AUTO, +	IWL_POWER_SYS_AC, +	IWL_POWER_SYS_BATTERY, +}; +  #define IWL_POWER_LIMIT		0x08  #define IWL_POWER_MASK		0x0F  #define IWL_POWER_ENABLED	0x10 @@ -46,15 +59,15 @@ struct iwl_priv;  /* Power management (not Tx power) structures */  struct iwl_power_vec_entry { -	struct iwl4965_powertable_cmd cmd; +	struct iwl_powertable_cmd cmd;  	u8 no_dtim;  };  struct iwl_power_mgr {  	spinlock_t lock; -	struct iwl_power_vec_entry pwr_range_0[IWL_POWER_AC]; -	struct iwl_power_vec_entry pwr_range_1[IWL_POWER_AC]; -	struct iwl_power_vec_entry pwr_range_2[IWL_POWER_AC]; +	struct iwl_power_vec_entry pwr_range_0[IWL_POWER_MAX]; +	struct iwl_power_vec_entry pwr_range_1[IWL_POWER_MAX]; +	struct iwl_power_vec_entry pwr_range_2[IWL_POWER_MAX];  	u32 dtim_period;  	/* final power level that used to calculate final power command */  	u8 power_mode; diff --git a/drivers/net/wireless/iwlwifi/iwl-prph.h b/drivers/net/wireless/iwlwifi/iwl-prph.h index 70d9c7568b9..ee5afd48d3a 100644 --- a/drivers/net/wireless/iwlwifi/iwl-prph.h +++ b/drivers/net/wireless/iwlwifi/iwl-prph.h @@ -84,14 +84,16 @@  #define APMG_CLK_VAL_DMA_CLK_RQT	(0x00000200)  #define APMG_CLK_VAL_BSM_CLK_RQT	(0x00000800) -#define APMG_PS_CTRL_VAL_RESET_REQ	(0x04000000) -#define APMG_PCIDEV_STT_VAL_L1_ACT_DIS	(0x00000800) +#define APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS	(0x00400000) +#define APMG_PS_CTRL_VAL_RESET_REQ		(0x04000000) +#define APMG_PS_CTRL_MSK_PWR_SRC		(0x03000000) +#define APMG_PS_CTRL_VAL_PWR_SRC_VMAIN		(0x00000000) +#define APMG_PS_CTRL_VAL_PWR_SRC_MAX		(0x01000000) /* 3945 only */ +#define APMG_PS_CTRL_VAL_PWR_SRC_VAUX		(0x02000000) -#define APMG_PS_CTRL_MSK_PWR_SRC              (0x03000000) -#define APMG_PS_CTRL_VAL_PWR_SRC_VMAIN        (0x00000000) -#define APMG_PS_CTRL_VAL_PWR_SRC_VAUX         (0x01000000) +#define APMG_PCIDEV_STT_VAL_L1_ACT_DIS		(0x00000800)  /**   * BSM (Bootstrap State Machine) diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c index e2d9afba38a..f3f6ea49fdd 100644 --- a/drivers/net/wireless/iwlwifi/iwl-rx.c +++ b/drivers/net/wireless/iwlwifi/iwl-rx.c @@ -791,7 +791,7 @@ static inline void iwl_dbg_report_frame(struct iwl_priv *priv,  static void iwl_add_radiotap(struct iwl_priv *priv,  				 struct sk_buff *skb, -				 struct iwl4965_rx_phy_res *rx_start, +				 struct iwl_rx_phy_res *rx_start,  				 struct ieee80211_rx_status *stats,  				 u32 ampdu_status)  { @@ -1010,8 +1010,8 @@ static void iwl_pass_packet_to_mac80211(struct iwl_priv *priv,  				       struct ieee80211_rx_status *stats)  {  	struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data; -	struct iwl4965_rx_phy_res *rx_start = (include_phy) ? -	    (struct iwl4965_rx_phy_res *)&(pkt->u.raw[0]) : NULL; +	struct iwl_rx_phy_res *rx_start = (include_phy) ? +	    (struct iwl_rx_phy_res *)&(pkt->u.raw[0]) : NULL;  	struct ieee80211_hdr *hdr;  	u16 len;  	__le32 *rx_end; @@ -1020,7 +1020,7 @@ static void iwl_pass_packet_to_mac80211(struct iwl_priv *priv,  	u32 ampdu_status_legacy;  	if (!include_phy && priv->last_phy_res[0]) -		rx_start = (struct iwl4965_rx_phy_res *)&priv->last_phy_res[1]; +		rx_start = (struct iwl_rx_phy_res *)&priv->last_phy_res[1];  	if (!rx_start) {  		IWL_ERROR("MPDU frame without a PHY data\n"); @@ -1032,8 +1032,8 @@ static void iwl_pass_packet_to_mac80211(struct iwl_priv *priv,  		len = le16_to_cpu(rx_start->byte_count); -		rx_end = (__le32 *) ((u8 *) &pkt->u.raw[0] + -				  sizeof(struct iwl4965_rx_phy_res) + +		rx_end = (__le32 *)((u8 *) &pkt->u.raw[0] + +				  sizeof(struct iwl_rx_phy_res) +  				  rx_start->cfg_phy_cnt + len);  	} else { @@ -1084,40 +1084,13 @@ static void iwl_pass_packet_to_mac80211(struct iwl_priv *priv,  }  /* Calc max signal level (dBm) among 3 possible receivers */ -static int iwl_calc_rssi(struct iwl_priv *priv, -			     struct iwl4965_rx_phy_res *rx_resp) +static inline int iwl_calc_rssi(struct iwl_priv *priv, +				struct iwl_rx_phy_res *rx_resp)  { -	/* data from PHY/DSP regarding signal strength, etc., -	 *   contents are always there, not configurable by host.  */ -	struct iwl4965_rx_non_cfg_phy *ncphy = -	    (struct iwl4965_rx_non_cfg_phy *)rx_resp->non_cfg_phy; -	u32 agc = (le16_to_cpu(ncphy->agc_info) & IWL_AGC_DB_MASK) -			>> IWL_AGC_DB_POS; - -	u32 valid_antennae = -	    (le16_to_cpu(rx_resp->phy_flags) & RX_PHY_FLAGS_ANTENNAE_MASK) -			>> RX_PHY_FLAGS_ANTENNAE_OFFSET; -	u8 max_rssi = 0; -	u32 i; - -	/* Find max rssi among 3 possible receivers. -	 * These values are measured by the digital signal processor (DSP). -	 * They should stay fairly constant even as the signal strength varies, -	 *   if the radio's automatic gain control (AGC) is working right. -	 * AGC value (see below) will provide the "interesting" info. */ -	for (i = 0; i < 3; i++) -		if (valid_antennae & (1 << i)) -			max_rssi = max(ncphy->rssi_info[i << 1], max_rssi); - -	IWL_DEBUG_STATS("Rssi In A %d B %d C %d Max %d AGC dB %d\n", -		ncphy->rssi_info[0], ncphy->rssi_info[2], ncphy->rssi_info[4], -		max_rssi, agc); - -	/* dBm = max_rssi dB - agc dB - constant. -	 * Higher AGC (higher radio gain) means lower signal. */ -	return max_rssi - agc - IWL_RSSI_OFFSET; +	return priv->cfg->ops->utils->calc_rssi(priv, rx_resp);  } +  static void iwl_sta_modify_ps_wake(struct iwl_priv *priv, int sta_id)  {  	unsigned long flags; @@ -1180,9 +1153,9 @@ void iwl_rx_reply_rx(struct iwl_priv *priv,  	 *   this rx packet for legacy frames,  	 *   or phy data cached from REPLY_RX_PHY_CMD for HT frames. */  	int include_phy = (pkt->hdr.cmd == REPLY_RX); -	struct iwl4965_rx_phy_res *rx_start = (include_phy) ? -		(struct iwl4965_rx_phy_res *)&(pkt->u.raw[0]) : -		(struct iwl4965_rx_phy_res *)&priv->last_phy_res[1]; +	struct iwl_rx_phy_res *rx_start = (include_phy) ? +		(struct iwl_rx_phy_res *)&(pkt->u.raw[0]) : +		(struct iwl_rx_phy_res *)&priv->last_phy_res[1];  	__le32 *rx_end;  	unsigned int len = 0;  	u16 fc; @@ -1210,7 +1183,7 @@ void iwl_rx_reply_rx(struct iwl_priv *priv,  	if (!include_phy) {  		if (priv->last_phy_res[0]) -			rx_start = (struct iwl4965_rx_phy_res *) +			rx_start = (struct iwl_rx_phy_res *)  				&priv->last_phy_res[1];  		else  			rx_start = NULL; @@ -1227,7 +1200,7 @@ void iwl_rx_reply_rx(struct iwl_priv *priv,  		len = le16_to_cpu(rx_start->byte_count);  		rx_end = (__le32 *)(pkt->u.raw + rx_start->cfg_phy_cnt + -				  sizeof(struct iwl4965_rx_phy_res) + len); +				  sizeof(struct iwl_rx_phy_res) + len);  	} else {  		struct iwl4965_rx_mpdu_res_start *amsdu =  			(struct iwl4965_rx_mpdu_res_start *)pkt->u.raw; @@ -1316,6 +1289,6 @@ void iwl_rx_reply_rx_phy(struct iwl_priv *priv,  	struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data;  	priv->last_phy_res[0] = 1;  	memcpy(&priv->last_phy_res[1], &(pkt->u.raw[0]), -	       sizeof(struct iwl4965_rx_phy_res)); +	       sizeof(struct iwl_rx_phy_res));  }  EXPORT_SYMBOL(iwl_rx_reply_rx_phy); diff --git a/drivers/net/wireless/iwlwifi/iwl-scan.c b/drivers/net/wireless/iwlwifi/iwl-scan.c index 5a00ac23e2d..9bb6adb28b7 100644 --- a/drivers/net/wireless/iwlwifi/iwl-scan.c +++ b/drivers/net/wireless/iwlwifi/iwl-scan.c @@ -202,6 +202,7 @@ static int iwl_send_scan_abort(struct iwl_priv *priv)  		clear_bit(STATUS_SCAN_HW, &priv->status);  	} +	priv->alloc_rxb_skb--;  	dev_kfree_skb_any(cmd.meta.u.skb);  	return ret; diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c index 6d1467d0bd9..60a6e010603 100644 --- a/drivers/net/wireless/iwlwifi/iwl-sta.c +++ b/drivers/net/wireless/iwlwifi/iwl-sta.c @@ -823,7 +823,7 @@ int iwl_send_lq_cmd(struct iwl_priv *priv,  	if (lq->sta_id == 0xFF)  		lq->sta_id = IWL_AP_ID; -	iwl_dump_lq_cmd(priv,lq); +	iwl_dump_lq_cmd(priv, lq);  	if (iwl_is_associated(priv) && priv->assoc_station_added)  		return  iwl_send_cmd(priv, &cmd); @@ -839,7 +839,7 @@ EXPORT_SYMBOL(iwl_send_lq_cmd);   * for automatic fallback during transmission.   *   * NOTE: This sets up a default set of values.  These will be replaced later - *       if the driver's iwl-4965-rs rate scaling algorithm is used, instead of + *       if the driver's iwl-agn-rs rate scaling algorithm is used, instead of   *       rc80211_simple.   *   * NOTE: Run REPLY_ADD_STA command to set up station table entry, before diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c index f72cd0bf6aa..aa98c76d819 100644 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c @@ -208,11 +208,12 @@ EXPORT_SYMBOL(iwl_txq_update_write_ptr);   * Free all buffers.   * 0-fill, but do not free "txq" descriptor structure.   */ -static void iwl_tx_queue_free(struct iwl_priv *priv, struct iwl_tx_queue *txq) +static void iwl_tx_queue_free(struct iwl_priv *priv, int txq_id)  { +	struct iwl_tx_queue *txq = &priv->txq[txq_id];  	struct iwl_queue *q = &txq->q;  	struct pci_dev *dev = priv->pci_dev; -	int len; +	int i, slots_num, len;  	if (q->n_bd == 0)  		return; @@ -227,7 +228,12 @@ static void iwl_tx_queue_free(struct iwl_priv *priv, struct iwl_tx_queue *txq)  		len += IWL_MAX_SCAN_SIZE;  	/* De-alloc array of command/tx buffers */ -	pci_free_consistent(dev, len, txq->cmd, txq->dma_addr_cmd); +	slots_num = (txq_id == IWL_CMD_QUEUE_NUM) ? +			TFD_CMD_SLOTS : TFD_TX_CMD_SLOTS; +	for (i = 0; i < slots_num; i++) +		kfree(txq->cmd[i]); +	if (txq_id == IWL_CMD_QUEUE_NUM) +		kfree(txq->cmd[slots_num]);  	/* De-alloc circular buffer of TFDs */  	if (txq->q.n_bd) @@ -400,8 +406,7 @@ static int iwl_tx_queue_init(struct iwl_priv *priv,  			     struct iwl_tx_queue *txq,  			     int slots_num, u32 txq_id)  { -	struct pci_dev *dev = priv->pci_dev; -	int len; +	int i, len;  	int rc = 0;  	/* @@ -412,17 +417,25 @@ static int iwl_tx_queue_init(struct iwl_priv *priv,  	 * For normal Tx queues (all other queues), no super-size command  	 * space is needed.  	 */ -	len = sizeof(struct iwl_cmd) * slots_num; -	if (txq_id == IWL_CMD_QUEUE_NUM) -		len +=  IWL_MAX_SCAN_SIZE; -	txq->cmd = pci_alloc_consistent(dev, len, &txq->dma_addr_cmd); -	if (!txq->cmd) -		return -ENOMEM; +	len = sizeof(struct iwl_cmd); +	for (i = 0; i <= slots_num; i++) { +		if (i == slots_num) { +			if (txq_id == IWL_CMD_QUEUE_NUM) +				len += IWL_MAX_SCAN_SIZE; +			else +				continue; +		} + +		txq->cmd[i] = kmalloc(len, GFP_KERNEL | GFP_DMA); +		if (!txq->cmd[i]) +			return -ENOMEM; +	}  	/* Alloc driver data array and TFD circular buffer */  	rc = iwl_tx_queue_alloc(priv, txq, txq_id);  	if (rc) { -		pci_free_consistent(dev, len, txq->cmd, txq->dma_addr_cmd); +		for (i = 0; i < slots_num; i++) +			kfree(txq->cmd[i]);  		return -ENOMEM;  	} @@ -451,7 +464,7 @@ void iwl_hw_txq_ctx_free(struct iwl_priv *priv)  	/* Tx queues */  	for (txq_id = 0; txq_id < priv->hw_params.max_txq_num; txq_id++) -		iwl_tx_queue_free(priv, &priv->txq[txq_id]); +		iwl_tx_queue_free(priv, txq_id);  	/* Keep-warm buffer */  	iwl_kw_free(priv); @@ -859,7 +872,7 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)  	txq->txb[q->write_ptr].skb[0] = skb;  	/* Set up first empty entry in queue's array of Tx/cmd buffers */ -	out_cmd = &txq->cmd[idx]; +	out_cmd = txq->cmd[idx];  	tx_cmd = &out_cmd->cmd.tx;  	memset(&out_cmd->hdr, 0, sizeof(out_cmd->hdr));  	memset(tx_cmd, 0, sizeof(struct iwl_tx_cmd)); @@ -899,8 +912,9 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)  	/* Physical address of this Tx command's header (not MAC header!),  	 * within command buffer array. */ -	txcmd_phys = txq->dma_addr_cmd + sizeof(struct iwl_cmd) * idx + -		     offsetof(struct iwl_cmd, hdr); +	txcmd_phys = pci_map_single(priv->pci_dev, out_cmd, +				sizeof(struct iwl_cmd), PCI_DMA_TODEVICE); +	txcmd_phys += offsetof(struct iwl_cmd, hdr);  	/* Add buffer containing Tx command and MAC(!) header to TFD's  	 * first entry */ @@ -962,16 +976,16 @@ int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)  	if (ret)  		return ret; -	if ((iwl_queue_space(q) < q->high_mark) -	    && priv->mac80211_registered) { +	if ((iwl_queue_space(q) < q->high_mark) && priv->mac80211_registered) {  		if (wait_write_ptr) {  			spin_lock_irqsave(&priv->lock, flags);  			txq->need_update = 1;  			iwl_txq_update_write_ptr(priv, txq);  			spin_unlock_irqrestore(&priv->lock, flags); +		} else { +			ieee80211_stop_queue(priv->hw, +					     skb_get_queue_mapping(skb));  		} - -		ieee80211_stop_queue(priv->hw, skb_get_queue_mapping(skb));  	}  	return 0; @@ -1004,7 +1018,7 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)  	u32 idx;  	u16 fix_size;  	dma_addr_t phys_addr; -	int ret; +	int len, ret;  	unsigned long flags;  	cmd->len = priv->cfg->ops->utils->get_hcmd_size(cmd->id, cmd->len); @@ -1034,7 +1048,7 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)  	control_flags = (u32 *) tfd;  	idx = get_cmd_index(q, q->write_ptr, cmd->meta.flags & CMD_SIZE_HUGE); -	out_cmd = &txq->cmd[idx]; +	out_cmd = txq->cmd[idx];  	out_cmd->hdr.cmd = cmd->id;  	memcpy(&out_cmd->meta, &cmd->meta, sizeof(cmd->meta)); @@ -1048,9 +1062,11 @@ int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)  			INDEX_TO_SEQ(q->write_ptr));  	if (out_cmd->meta.flags & CMD_SIZE_HUGE)  		out_cmd->hdr.sequence |= cpu_to_le16(SEQ_HUGE_FRAME); - -	phys_addr = txq->dma_addr_cmd + sizeof(txq->cmd[0]) * idx + -			offsetof(struct iwl_cmd, hdr); +	len = (idx == TFD_CMD_SLOTS) ? +			IWL_MAX_SCAN_SIZE : sizeof(struct iwl_cmd); +	phys_addr = pci_map_single(priv->pci_dev, out_cmd, len, +						PCI_DMA_TODEVICE); +	phys_addr += offsetof(struct iwl_cmd, hdr);  	iwl_hw_txq_attach_buf_to_tfd(priv, tfd, phys_addr, fix_size);  	IWL_DEBUG_HC("Sending command %s (#%x), seq: 0x%04X, " @@ -1115,6 +1131,9 @@ static void iwl_hcmd_queue_reclaim(struct iwl_priv *priv, int txq_id, int index)  {  	struct iwl_tx_queue *txq = &priv->txq[txq_id];  	struct iwl_queue *q = &txq->q; +	struct iwl_tfd_frame *bd = &txq->bd[index]; +	dma_addr_t dma_addr; +	int is_odd, buf_len;  	int nfreed = 0;  	if ((index >= q->n_bd) || (iwl_queue_used(q, index) == 0)) { @@ -1132,6 +1151,19 @@ static void iwl_hcmd_queue_reclaim(struct iwl_priv *priv, int txq_id, int index)  					q->write_ptr, q->read_ptr);  			queue_work(priv->workqueue, &priv->restart);  		} +		is_odd = (index/2) & 0x1; +		if (is_odd) { +			dma_addr = IWL_GET_BITS(bd->pa[index], tb2_addr_lo16) | +					(IWL_GET_BITS(bd->pa[index], +							tb2_addr_hi20) << 16); +			buf_len = IWL_GET_BITS(bd->pa[index], tb2_len); +		} else { +			dma_addr = le32_to_cpu(bd->pa[index].tb1_addr); +			buf_len = IWL_GET_BITS(bd->pa[index], tb1_len); +		} + +		pci_unmap_single(priv->pci_dev, dma_addr, buf_len, +				 PCI_DMA_TODEVICE);  		nfreed++;  	}  } @@ -1163,7 +1195,7 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb)  	BUG_ON(txq_id != IWL_CMD_QUEUE_NUM);  	cmd_index = get_cmd_index(&priv->txq[IWL_CMD_QUEUE_NUM].q, index, huge); -	cmd = &priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_index]; +	cmd = priv->txq[IWL_CMD_QUEUE_NUM].cmd[cmd_index];  	/* Input error checking is done when commands are added to queue. */  	if (cmd->meta.flags & CMD_WANT_SKB) { @@ -1391,7 +1423,7 @@ static int iwl_tx_status_reply_compressed_ba(struct iwl_priv *priv,  	/* For each frame attempted in aggregation,  	 * update driver's record of tx frame's status. */  	for (i = 0; i < agg->frame_count ; i++) { -		ack = bitmap & (1 << i); +		ack = bitmap & (1ULL << i);  		successes += !!ack;  		IWL_DEBUG_TX_REPLY("%s ON i=%d idx=%d raw=%d\n",  			ack? "ACK":"NACK", i, (agg->start_idx + i) & 0xff, diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index 7c82ecfa30a..444847ab1b5 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c @@ -275,10 +275,8 @@ static int iwl3945_tx_queue_alloc(struct iwl3945_priv *priv,  	return 0;   error: -	if (txq->txb) { -		kfree(txq->txb); -		txq->txb = NULL; -	} +	kfree(txq->txb); +	txq->txb = NULL;  	return -ENOMEM;  } @@ -365,10 +363,8 @@ void iwl3945_tx_queue_free(struct iwl3945_priv *priv, struct iwl3945_tx_queue *t  				    txq->q.n_bd, txq->bd, txq->q.dma_addr);  	/* De-alloc array of per-TFD driver data */ -	if (txq->txb) { -		kfree(txq->txb); -		txq->txb = NULL; -	} +	kfree(txq->txb); +	txq->txb = NULL;  	/* 0-fill queue descriptor structure */  	memset(txq, 0, sizeof(*txq)); @@ -2703,9 +2699,8 @@ static int iwl3945_tx_skb(struct iwl3945_priv *priv, struct sk_buff *skb)  	if (!ieee80211_has_morefrags(hdr->frame_control)) {  		txq->need_update = 1; -		if (qc) { +		if (qc)  			priv->stations[sta_id].tid[tid].seq_number = seq_number; -		}  	} else {  		wait_write_ptr = 1;  		txq->need_update = 0; @@ -3813,7 +3808,7 @@ int iwl3945_calc_db_from_ratio(int sig_ratio)  	/* 100:1 or higher, divide by 10 and use table,  	 *   add 20 dB to make up for divide by 10 */  	if (sig_ratio >= 100) -		return (20 + (int)ratio2dB[sig_ratio/10]); +		return 20 + (int)ratio2dB[sig_ratio/10];  	/* We shouldn't see this */  	if (sig_ratio < 1) @@ -5088,7 +5083,7 @@ static void iwl3945_dealloc_ucode_pci(struct iwl3945_priv *priv)   * iwl3945_verify_inst_full - verify runtime uCode image in card vs. host,   *     looking at all data.   */ -static int iwl3945_verify_inst_full(struct iwl3945_priv *priv, __le32 * image, u32 len) +static int iwl3945_verify_inst_full(struct iwl3945_priv *priv, __le32 *image, u32 len)  {  	u32 val;  	u32 save_len = len; @@ -5237,7 +5232,7 @@ static int iwl3945_verify_bsm(struct iwl3945_priv *priv)  	val = iwl3945_read_prph(priv, BSM_WR_DWCOUNT_REG);  	for (reg = BSM_SRAM_LOWER_BOUND;  	     reg < BSM_SRAM_LOWER_BOUND + len; -	     reg += sizeof(u32), image ++) { +	     reg += sizeof(u32), image++) {  		val = iwl3945_read_prph(priv, reg);  		if (val != le32_to_cpu(*image)) {  			IWL_ERROR("BSM uCode verification failed at " @@ -6336,7 +6331,7 @@ static void iwl3945_bg_post_associate(struct work_struct *data)  	DECLARE_MAC_BUF(mac);  	if (priv->iw_mode == IEEE80211_IF_TYPE_AP) { -		IWL_ERROR("%s Should not be called in AP mode\n", __FUNCTION__); +		IWL_ERROR("%s Should not be called in AP mode\n", __func__);  		return;  	} @@ -6417,7 +6412,7 @@ static void iwl3945_bg_post_associate(struct work_struct *data)  	default:  		 IWL_ERROR("%s Should not be called in %d mode\n", -			   __FUNCTION__, priv->iw_mode); +			   __func__, priv->iw_mode);  		break;  	} @@ -6594,12 +6589,6 @@ static int iwl3945_mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)  	IWL_DEBUG_MAC80211("enter\n"); -	if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) { -		IWL_DEBUG_MAC80211("leave - monitor\n"); -		dev_kfree_skb_any(skb); -		return 0; -	} -  	IWL_DEBUG_TX("dev->xmit(%d bytes) at rate 0x%02x\n", skb->len,  		     ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate); @@ -7456,7 +7445,7 @@ static ssize_t show_measurement(struct device *d,  	struct iwl3945_priv *priv = dev_get_drvdata(d);  	struct iwl3945_spectrum_notification measure_report;  	u32 size = sizeof(measure_report), len = 0, ofs = 0; -	u8 *data = (u8 *) & measure_report; +	u8 *data = (u8 *)&measure_report;  	unsigned long flags;  	spin_lock_irqsave(&priv->lock, flags); @@ -7627,7 +7616,7 @@ static ssize_t show_power_level(struct device *d,  	else  		p += sprintf(p, " \n"); -	return (p - buf + 1); +	return p - buf + 1;  } @@ -7649,7 +7638,7 @@ static ssize_t show_statistics(struct device *d,  	struct iwl3945_priv *priv = dev_get_drvdata(d);  	u32 size = sizeof(struct iwl3945_notif_statistics);  	u32 len = 0, ofs = 0; -	u8 *data = (u8 *) & priv->statistics; +	u8 *data = (u8 *)&priv->statistics;  	int rc = 0;  	if (!iwl3945_is_alive(priv)) @@ -8003,16 +7992,16 @@ static int iwl3945_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e  	/* nic init */  	iwl3945_set_bit(priv, CSR_GIO_CHICKEN_BITS, -                    CSR_GIO_CHICKEN_BITS_REG_BIT_DIS_L0S_EXIT_TIMER); +			CSR_GIO_CHICKEN_BITS_REG_BIT_DIS_L0S_EXIT_TIMER); -        iwl3945_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE); -        err = iwl3945_poll_bit(priv, CSR_GP_CNTRL, -                          CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, -                          CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 25000); -        if (err < 0) { -                IWL_DEBUG_INFO("Failed to init the card\n"); +	iwl3945_set_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_INIT_DONE); +	err = iwl3945_poll_bit(priv, CSR_GP_CNTRL, +			       CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, +			       CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY, 25000); +	if (err < 0) { +		IWL_DEBUG_INFO("Failed to init the card\n");  		goto out_remove_sysfs; -        } +	}  	/* Read the EEPROM */  	err = iwl3945_eeprom_init(priv);  	if (err) { @@ -8114,9 +8103,8 @@ static void __devexit iwl3945_pci_remove(struct pci_dev *pdev)  	iwl3945_unset_hw_setting(priv);  	iwl3945_clear_stations_table(priv); -	if (priv->mac80211_registered) { +	if (priv->mac80211_registered)  		ieee80211_unregister_hw(priv->hw); -	}  	/*netif_stop_queue(dev); */  	flush_workqueue(priv->workqueue); diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index 14d5d61cec4..bd32ac0b4e0 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c @@ -297,9 +297,7 @@ static ssize_t lbs_rtap_set(struct device *dev,  			lbs_add_rtap(priv);  		}  		priv->monitormode = monitor_mode; -	} - -	else { +	} else {  		if (!priv->monitormode)  			return strlen(buf);  		priv->monitormode = 0; @@ -1242,8 +1240,6 @@ int lbs_start_card(struct lbs_private *priv)  		lbs_pr_err("cannot register ethX device\n");  		goto done;  	} -	if (device_create_file(&dev->dev, &dev_attr_lbs_rtap)) -		lbs_pr_err("cannot register lbs_rtap attribute\n");  	lbs_update_channel(priv); @@ -1275,6 +1271,13 @@ int lbs_start_card(struct lbs_private *priv)  			if (device_create_file(&dev->dev, &dev_attr_lbs_mesh))  				lbs_pr_err("cannot register lbs_mesh attribute\n"); + +			/* While rtap isn't related to mesh, only mesh-enabled +			 * firmware implements the rtap functionality via +			 * CMD_802_11_MONITOR_MODE. +			 */ +			if (device_create_file(&dev->dev, &dev_attr_lbs_rtap)) +				lbs_pr_err("cannot register lbs_rtap attribute\n");  		}  	} @@ -1306,9 +1309,9 @@ void lbs_stop_card(struct lbs_private *priv)  	netif_carrier_off(priv->dev);  	lbs_debugfs_remove_one(priv); -	device_remove_file(&dev->dev, &dev_attr_lbs_rtap);  	if (priv->mesh_tlv) {  		device_remove_file(&dev->dev, &dev_attr_lbs_mesh); +		device_remove_file(&dev->dev, &dev_attr_lbs_rtap);  	}  	/* Flush pending command nodes */ diff --git a/drivers/net/wireless/p54/p54.h b/drivers/net/wireless/p54/p54.h index c6f27b9022f..cac9a515b82 100644 --- a/drivers/net/wireless/p54/p54.h +++ b/drivers/net/wireless/p54/p54.h @@ -52,6 +52,7 @@ struct p54_common {  	int (*open)(struct ieee80211_hw *dev);  	void (*stop)(struct ieee80211_hw *dev);  	int mode; +	struct mutex conf_mutex;  	u8 mac_addr[ETH_ALEN];  	u8 bssid[ETH_ALEN];  	struct pda_iq_autocal_entry *iq_autocal; diff --git a/drivers/net/wireless/p54/p54common.c b/drivers/net/wireless/p54/p54common.c index ffaf7a6b681..4da89ea9b56 100644 --- a/drivers/net/wireless/p54/p54common.c +++ b/drivers/net/wireless/p54/p54common.c @@ -886,9 +886,12 @@ static void p54_remove_interface(struct ieee80211_hw *dev,  static int p54_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf)  {  	int ret; +	struct p54_common *priv = dev->priv; +	mutex_lock(&priv->conf_mutex);  	ret = p54_set_freq(dev, cpu_to_le16(conf->channel->center_freq));  	p54_set_vdcf(dev); +	mutex_unlock(&priv->conf_mutex);  	return ret;  } @@ -898,10 +901,12 @@ static int p54_config_interface(struct ieee80211_hw *dev,  {  	struct p54_common *priv = dev->priv; +	mutex_lock(&priv->conf_mutex);  	p54_set_filter(dev, 0, priv->mac_addr, conf->bssid, 0, 1, 0, 0xF642);  	p54_set_filter(dev, 0, priv->mac_addr, conf->bssid, 2, 0, 0, 0);  	p54_set_leds(dev, 1, !is_multicast_ether_addr(conf->bssid), 0);  	memcpy(priv->bssid, conf->bssid, ETH_ALEN); +	mutex_unlock(&priv->conf_mutex);  	return 0;  } @@ -1009,6 +1014,7 @@ struct ieee80211_hw *p54_init_common(size_t priv_data_len)  	}  	p54_init_vdcf(dev); +	mutex_init(&priv->conf_mutex);  	return dev;  } diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c index 97fa14e0a47..3d75a7137d3 100644 --- a/drivers/net/wireless/prism54/isl_ioctl.c +++ b/drivers/net/wireless/prism54/isl_ioctl.c @@ -2518,7 +2518,7 @@ enum {  #define PRISM2_HOSTAPD_MAX_BUF_SIZE 1024  #define PRISM2_HOSTAPD_GENERIC_ELEMENT_HDR_LEN \ -((int) (&((struct prism2_hostapd_param *) 0)->u.generic_elem.data)) +	offsetof(struct prism2_hostapd_param, u.generic_elem.data)  /* Maximum length for algorithm names (-1 for nul termination)   * used in ioctl() */ diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c index aa6dfb811c7..181a146b476 100644 --- a/drivers/net/wireless/rt2x00/rt2500pci.c +++ b/drivers/net/wireless/rt2x00/rt2500pci.c @@ -1220,6 +1220,7 @@ static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,  	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);  	rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,  			   test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags)); +	rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skb->len);  	rt2x00_set_field32(&word, TXD_W0_CIPHER_ALG, CIPHER_NONE);  	rt2x00_desc_write(txd, 0, word);  } diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c index 3078417b326..cd5af656932 100644 --- a/drivers/net/wireless/rt2x00/rt2500usb.c +++ b/drivers/net/wireless/rt2x00/rt2500usb.c @@ -633,6 +633,16 @@ static void rt2500usb_reset_tuner(struct rt2x00_dev *rt2x00dev)  	rt2x00dev->link.vgc_level = value;  } +/* + * NOTE: This function is directly ported from legacy driver, but + * despite it being declared it was never called. Although link tuning + * sounds like a good idea, and usually works well for the other drivers, + * it does _not_ work with rt2500usb. Enabling this function will result + * in TX capabilities only until association kicks in. Immediately + * after the successful association all TX frames will be kept in the + * hardware queue and never transmitted. + */ +#if 0  static void rt2500usb_link_tuner(struct rt2x00_dev *rt2x00dev)  {  	int rssi = rt2x00_get_link_rssi(&rt2x00dev->link); @@ -752,6 +762,9 @@ dynamic_cca_tune:  		rt2x00dev->link.vgc_level = r17;  	}  } +#else +#define rt2500usb_link_tuner	NULL +#endif  /*   * Initialization functions. @@ -1376,6 +1389,9 @@ static int rt2500usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)  		rt2x00_set_field16(&word, EEPROM_BBPTUNE_VGCLOWER, bbp);  		rt2x00_eeprom_write(rt2x00dev, EEPROM_BBPTUNE_VGC, word);  		EEPROM(rt2x00dev, "BBPtune vgc: 0x%04x\n", word); +	} else { +		rt2x00_set_field16(&word, EEPROM_BBPTUNE_VGCLOWER, bbp); +		rt2x00_eeprom_write(rt2x00dev, EEPROM_BBPTUNE_VGC, word);  	}  	rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_R17, &word); @@ -1384,9 +1400,6 @@ static int rt2500usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)  		rt2x00_set_field16(&word, EEPROM_BBPTUNE_R17_HIGH, 0x41);  		rt2x00_eeprom_write(rt2x00dev, EEPROM_BBPTUNE_R17, word);  		EEPROM(rt2x00dev, "BBPtune r17: 0x%04x\n", word); -	} else { -		rt2x00_set_field16(&word, EEPROM_BBPTUNE_VGCLOWER, bbp); -		rt2x00_eeprom_write(rt2x00dev, EEPROM_BBPTUNE_VGC, word);  	}  	rt2x00_eeprom_read(rt2x00dev, EEPROM_BBPTUNE_R24, &word); @@ -1737,6 +1750,7 @@ static int rt2500usb_probe_hw(struct rt2x00_dev *rt2x00dev)  	__set_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags);  	__set_bit(DRIVER_REQUIRE_BEACON_GUARD, &rt2x00dev->flags);  	__set_bit(DRIVER_REQUIRE_SCHEDULED, &rt2x00dev->flags); +	__set_bit(CONFIG_DISABLE_LINK_TUNING, &rt2x00dev->flags);  	/*  	 * Set the rssi offset. diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index db2dc976d83..8b10ea41b20 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h @@ -368,6 +368,12 @@ struct rt2x00_intf {  #define DELAYED_CONFIG_ERP		0x00000002  #define DELAYED_LED_ASSOC		0x00000004 +	/* +	 * Software sequence counter, this is only required +	 * for hardware which doesn't support hardware +	 * sequence counting. +	 */ +	spinlock_t seqlock;  	u16 seqno;  }; diff --git a/drivers/net/wireless/rt2x00/rt2x00config.c b/drivers/net/wireless/rt2x00/rt2x00config.c index 3f89516e833..d134c3be539 100644 --- a/drivers/net/wireless/rt2x00/rt2x00config.c +++ b/drivers/net/wireless/rt2x00/rt2x00config.c @@ -254,6 +254,8 @@ config:  			libconf.ant.rx = default_ant->rx;  		else if (active_ant->rx == ANTENNA_SW_DIVERSITY)  			libconf.ant.rx = ANTENNA_B; +		else +			libconf.ant.rx = active_ant->rx;  		if (conf->antenna_sel_tx)  			libconf.ant.tx = conf->antenna_sel_tx; @@ -261,6 +263,8 @@ config:  			libconf.ant.tx = default_ant->tx;  		else if (active_ant->tx == ANTENNA_SW_DIVERSITY)  			libconf.ant.tx = ANTENNA_B; +		else +			libconf.ant.tx = active_ant->tx;  	}  	if (flags & CONFIG_UPDATE_SLOT_TIME) { diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c index 300cf061035..6bee1d611bb 100644 --- a/drivers/net/wireless/rt2x00/rt2x00debug.c +++ b/drivers/net/wireless/rt2x00/rt2x00debug.c @@ -372,9 +372,6 @@ static ssize_t rt2x00debug_write_##__name(struct file *file,	\  	if (*offset)						\  		return 0;					\  								\ -	if (!capable(CAP_NET_ADMIN))				\ -		return -EPERM;					\ -								\  	if (intf->offset_##__name >= debug->__name.word_count)	\  		return -EINVAL;					\  								\ @@ -454,7 +451,7 @@ static struct dentry *rt2x00debug_create_file_driver(const char *name,  	data += sprintf(data, "compiled: %s %s\n", __DATE__, __TIME__);  	blob->size = strlen(blob->data); -	return debugfs_create_blob(name, S_IRUGO, intf->driver_folder, blob); +	return debugfs_create_blob(name, S_IRUSR, intf->driver_folder, blob);  }  static struct dentry *rt2x00debug_create_file_chipset(const char *name, @@ -482,7 +479,7 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name,  	data += sprintf(data, "rf length: %d\n", debug->rf.word_count);  	blob->size = strlen(blob->data); -	return debugfs_create_blob(name, S_IRUGO, intf->driver_folder, blob); +	return debugfs_create_blob(name, S_IRUSR, intf->driver_folder, blob);  }  void rt2x00debug_register(struct rt2x00_dev *rt2x00dev) @@ -517,7 +514,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)  	if (IS_ERR(intf->chipset_entry))  		goto exit; -	intf->dev_flags = debugfs_create_file("dev_flags", S_IRUGO, +	intf->dev_flags = debugfs_create_file("dev_flags", S_IRUSR,  					      intf->driver_folder, intf,  					      &rt2x00debug_fop_dev_flags);  	if (IS_ERR(intf->dev_flags)) @@ -532,7 +529,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)  ({								\  	(__intf)->__name##_off_entry =				\  	    debugfs_create_u32(__stringify(__name) "_offset",	\ -			       S_IRUGO | S_IWUSR,		\ +			       S_IRUSR | S_IWUSR,		\  			       (__intf)->register_folder,	\  			       &(__intf)->offset_##__name);	\  	if (IS_ERR((__intf)->__name##_off_entry))		\ @@ -540,7 +537,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)  								\  	(__intf)->__name##_val_entry =				\  	    debugfs_create_file(__stringify(__name) "_value",	\ -				S_IRUGO | S_IWUSR,		\ +				S_IRUSR | S_IWUSR,		\  				(__intf)->register_folder,	\  				(__intf), &rt2x00debug_fop_##__name);\  	if (IS_ERR((__intf)->__name##_val_entry))		\ @@ -560,7 +557,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)  		goto exit;  	intf->queue_frame_dump_entry = -	    debugfs_create_file("dump", S_IRUGO, intf->queue_folder, +	    debugfs_create_file("dump", S_IRUSR, intf->queue_folder,  				intf, &rt2x00debug_fop_queue_dump);  	if (IS_ERR(intf->queue_frame_dump_entry))  		goto exit; @@ -569,7 +566,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev)  	init_waitqueue_head(&intf->frame_dump_waitqueue);  	intf->queue_stats_entry = -	    debugfs_create_file("queue", S_IRUGO, intf->queue_folder, +	    debugfs_create_file("queue", S_IRUSR, intf->queue_folder,  				intf, &rt2x00debug_fop_queue_stats);  	return; diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c index c3ee4ecba79..bd422fd6a89 100644 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c @@ -247,6 +247,7 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw,  		rt2x00dev->intf_sta_count++;  	spin_lock_init(&intf->lock); +	spin_lock_init(&intf->seqlock);  	intf->beacon = entry;  	if (conf->type == IEEE80211_IF_TYPE_AP) diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c index 3b27f6aa860..898cdd7f57d 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c @@ -128,6 +128,7 @@ static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry,  	unsigned int data_length;  	unsigned int duration;  	unsigned int residual; +	unsigned long irqflags;  	memset(txdesc, 0, sizeof(*txdesc)); @@ -213,14 +214,14 @@ static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry,  	 * sequence counter given by mac80211.  	 */  	if (tx_info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) { -		spin_lock(&intf->lock); +		spin_lock_irqsave(&intf->seqlock, irqflags);  		if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags))  			intf->seqno += 0x10;  		hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);  		hdr->seq_ctrl |= cpu_to_le16(intf->seqno); -		spin_unlock(&intf->lock); +		spin_unlock_irqrestore(&intf->seqlock, irqflags);  		__set_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags);  	} diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c index 933e6cc9359..8d76bb2e031 100644 --- a/drivers/net/wireless/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/rt2x00/rt2x00usb.c @@ -124,7 +124,7 @@ EXPORT_SYMBOL_GPL(rt2x00usb_vendor_request_buff);  int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev,  					const u8 request, const u8 requesttype, -					const u16 offset, void *buffer, +					const u16 offset, const void *buffer,  					const u16 buffer_length,  					const int timeout)  { @@ -134,7 +134,7 @@ int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev,  	mutex_lock(&rt2x00dev->usb_cache_mutex); -	tb  = buffer; +	tb  = (char *)buffer;  	off = offset;  	len = buffer_length;  	while (len && !status) { diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.h b/drivers/net/wireless/rt2x00/rt2x00usb.h index ee3875f894a..3b4a67417f9 100644 --- a/drivers/net/wireless/rt2x00/rt2x00usb.h +++ b/drivers/net/wireless/rt2x00/rt2x00usb.h @@ -185,7 +185,7 @@ int rt2x00usb_vendor_req_buff_lock(struct rt2x00_dev *rt2x00dev,   */  int rt2x00usb_vendor_request_large_buff(struct rt2x00_dev *rt2x00dev,  					const u8 request, const u8 requesttype, -					const u16 offset, void *buffer, +					const u16 offset, const void *buffer,  					const u16 buffer_length,  					const int timeout); diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c index fbe2a652e01..087e90b328c 100644 --- a/drivers/net/wireless/rt2x00/rt61pci.c +++ b/drivers/net/wireless/rt2x00/rt61pci.c @@ -1004,6 +1004,11 @@ static int rt61pci_load_firmware(struct rt2x00_dev *rt2x00dev, const void *data,  	}  	/* +	 * Hardware needs another millisecond before it is ready. +	 */ +	msleep(1); + +	/*  	 * Reset MAC and BBP registers.  	 */  	reg = 0; diff --git a/drivers/net/wireless/rtl8187.h b/drivers/net/wireless/rtl8187.h index 1b0d750f662..5a9515c9996 100644 --- a/drivers/net/wireless/rtl8187.h +++ b/drivers/net/wireless/rtl8187.h @@ -94,6 +94,10 @@ struct rtl8187_priv {  	const struct rtl818x_rf_ops *rf;  	struct ieee80211_vif *vif;  	int mode; +	/* The mutex protects the TX loopback state. +	 * Any attempt to set channels concurrently locks the device. +	 */ +	struct mutex conf_mutex;  	/* rtl8187 specific */  	struct ieee80211_channel channels[14]; diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c index 177988efd66..57376fb993e 100644 --- a/drivers/net/wireless/rtl8187_dev.c +++ b/drivers/net/wireless/rtl8187_dev.c @@ -31,6 +31,8 @@ MODULE_DESCRIPTION("RTL8187/RTL8187B USB wireless driver");  MODULE_LICENSE("GPL");  static struct usb_device_id rtl8187_table[] __devinitdata = { +	/* Asus */ +	{USB_DEVICE(0x0b05, 0x171d), .driver_info = DEVICE_RTL8187},  	/* Realtek */  	{USB_DEVICE(0x0bda, 0x8187), .driver_info = DEVICE_RTL8187},  	{USB_DEVICE(0x0bda, 0x8189), .driver_info = DEVICE_RTL8187B}, @@ -726,6 +728,7 @@ static int rtl8187_start(struct ieee80211_hw *dev)  	if (ret)  		return ret; +	mutex_lock(&priv->conf_mutex);  	if (priv->is_rtl8187b) {  		reg = RTL818X_RX_CONF_MGMT |  		      RTL818X_RX_CONF_DATA | @@ -747,6 +750,7 @@ static int rtl8187_start(struct ieee80211_hw *dev)  				  (7 << 0  /* long retry limit */) |  				  (7 << 21 /* MAX TX DMA */));  		rtl8187_init_urbs(dev); +		mutex_unlock(&priv->conf_mutex);  		return 0;  	} @@ -790,6 +794,7 @@ static int rtl8187_start(struct ieee80211_hw *dev)  	reg |= RTL818X_CMD_TX_ENABLE;  	reg |= RTL818X_CMD_RX_ENABLE;  	rtl818x_iowrite8(priv, &priv->map->CMD, reg); +	mutex_unlock(&priv->conf_mutex);  	return 0;  } @@ -801,6 +806,7 @@ static void rtl8187_stop(struct ieee80211_hw *dev)  	struct sk_buff *skb;  	u32 reg; +	mutex_lock(&priv->conf_mutex);  	rtl818x_iowrite16(priv, &priv->map->INT_MASK, 0);  	reg = rtl818x_ioread8(priv, &priv->map->CMD); @@ -820,7 +826,7 @@ static void rtl8187_stop(struct ieee80211_hw *dev)  		usb_kill_urb(info->urb);  		kfree_skb(skb);  	} -	return; +	mutex_unlock(&priv->conf_mutex);  }  static int rtl8187_add_interface(struct ieee80211_hw *dev, @@ -840,6 +846,7 @@ static int rtl8187_add_interface(struct ieee80211_hw *dev,  		return -EOPNOTSUPP;  	} +	mutex_lock(&priv->conf_mutex);  	priv->vif = conf->vif;  	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); @@ -848,6 +855,7 @@ static int rtl8187_add_interface(struct ieee80211_hw *dev,  				 ((u8 *)conf->mac_addr)[i]);  	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); +	mutex_unlock(&priv->conf_mutex);  	return 0;  } @@ -855,8 +863,10 @@ static void rtl8187_remove_interface(struct ieee80211_hw *dev,  				     struct ieee80211_if_init_conf *conf)  {  	struct rtl8187_priv *priv = dev->priv; +	mutex_lock(&priv->conf_mutex);  	priv->mode = IEEE80211_IF_TYPE_MNTR;  	priv->vif = NULL; +	mutex_unlock(&priv->conf_mutex);  }  static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) @@ -864,6 +874,7 @@ static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf)  	struct rtl8187_priv *priv = dev->priv;  	u32 reg; +	mutex_lock(&priv->conf_mutex);  	reg = rtl818x_ioread32(priv, &priv->map->TX_CONF);  	/* Enable TX loopback on MAC level to avoid TX during channel  	 * changes, as this has be seen to causes problems and the @@ -896,6 +907,7 @@ static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf)  	rtl818x_iowrite16(priv, &priv->map->ATIMTR_INTERVAL, 100);  	rtl818x_iowrite16(priv, &priv->map->BEACON_INTERVAL, 100);  	rtl818x_iowrite16(priv, &priv->map->BEACON_INTERVAL_TIME, 100); +	mutex_unlock(&priv->conf_mutex);  	return 0;  } @@ -907,6 +919,7 @@ static int rtl8187_config_interface(struct ieee80211_hw *dev,  	int i;  	u8 reg; +	mutex_lock(&priv->conf_mutex);  	for (i = 0; i < ETH_ALEN; i++)  		rtl818x_iowrite8(priv, &priv->map->BSSID[i], conf->bssid[i]); @@ -920,6 +933,7 @@ static int rtl8187_config_interface(struct ieee80211_hw *dev,  		rtl818x_iowrite8(priv, &priv->map->MSR, reg);  	} +	mutex_unlock(&priv->conf_mutex);  	return 0;  } @@ -1187,6 +1201,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,  		printk(KERN_ERR "rtl8187: Cannot register device\n");  		goto err_free_dev;  	} +	mutex_init(&priv->conf_mutex);  	printk(KERN_INFO "%s: hwaddr %s, %s V%d + %s\n",  	       wiphy_name(dev->wiphy), print_mac(mac, dev->wiphy->perm_addr), diff --git a/drivers/pcmcia/at91_cf.c b/drivers/pcmcia/at91_cf.c index 684968558c1..ab6b4bee318 100644 --- a/drivers/pcmcia/at91_cf.c +++ b/drivers/pcmcia/at91_cf.c @@ -18,7 +18,7 @@  #include <pcmcia/ss.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/sizes.h>  #include <asm/gpio.h> diff --git a/drivers/pcmcia/omap_cf.c b/drivers/pcmcia/omap_cf.c index 569b746b573..36cf9bcf3ac 100644 --- a/drivers/pcmcia/omap_cf.c +++ b/drivers/pcmcia/omap_cf.c @@ -19,7 +19,7 @@  #include <pcmcia/ss.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/sizes.h> diff --git a/drivers/pcmcia/pxa2xx_base.c b/drivers/pcmcia/pxa2xx_base.c index ccfdf1969a7..ff5e3f324f3 100644 --- a/drivers/pcmcia/pxa2xx_base.c +++ b/drivers/pcmcia/pxa2xx_base.c @@ -24,7 +24,7 @@  #include <linux/spinlock.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/system.h> diff --git a/drivers/pcmcia/pxa2xx_lubbock.c b/drivers/pcmcia/pxa2xx_lubbock.c index 881ec8a8e38..64f709d0113 100644 --- a/drivers/pcmcia/pxa2xx_lubbock.c +++ b/drivers/pcmcia/pxa2xx_lubbock.c @@ -21,7 +21,7 @@  #include <linux/init.h>  #include <linux/delay.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/sa1111.h>  #include <asm/mach-types.h>  #include <asm/arch/pxa-regs.h> diff --git a/drivers/pcmcia/pxa2xx_mainstone.c b/drivers/pcmcia/pxa2xx_mainstone.c index 92d1cc33808..b0dcda48152 100644 --- a/drivers/pcmcia/pxa2xx_mainstone.c +++ b/drivers/pcmcia/pxa2xx_mainstone.c @@ -21,7 +21,7 @@  #include <pcmcia/ss.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h> diff --git a/drivers/pcmcia/pxa2xx_sharpsl.c b/drivers/pcmcia/pxa2xx_sharpsl.c index d71f93d4583..58395bff9a7 100644 --- a/drivers/pcmcia/pxa2xx_sharpsl.c +++ b/drivers/pcmcia/pxa2xx_sharpsl.c @@ -19,7 +19,7 @@  #include <linux/platform_device.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/hardware/scoop.h> diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c index d0c1d63d189..203e579ebbd 100644 --- a/drivers/pcmcia/rsrc_nonstatic.c +++ b/drivers/pcmcia/rsrc_nonstatic.c @@ -275,7 +275,7 @@ static int readable(struct pcmcia_socket *s, struct resource *res,  		destroy_cis_cache(s);  	}  	s->cis_mem.res = NULL; -	if ((ret != 0) || (count == 0)) +	if ((ret != 0) || (*count == 0))  		return 0;  	return 1;  } diff --git a/drivers/pcmcia/sa1100_assabet.c b/drivers/pcmcia/sa1100_assabet.c index ce133ce81c1..71fbb62804b 100644 --- a/drivers/pcmcia/sa1100_assabet.c +++ b/drivers/pcmcia/sa1100_assabet.c @@ -11,7 +11,7 @@  #include <linux/device.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/signal.h> diff --git a/drivers/pcmcia/sa1100_badge4.c b/drivers/pcmcia/sa1100_badge4.c index 607c3f326ec..a34279a6788 100644 --- a/drivers/pcmcia/sa1100_badge4.c +++ b/drivers/pcmcia/sa1100_badge4.c @@ -18,7 +18,7 @@  #include <linux/errno.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/arch/badge4.h>  #include <asm/hardware/sa1111.h> diff --git a/drivers/pcmcia/sa1100_cerf.c b/drivers/pcmcia/sa1100_cerf.c index 7c3951a2675..bd843bffde5 100644 --- a/drivers/pcmcia/sa1100_cerf.c +++ b/drivers/pcmcia/sa1100_cerf.c @@ -11,7 +11,7 @@  #include <linux/init.h>  #include <linux/delay.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/arch/cerf.h> diff --git a/drivers/pcmcia/sa1100_h3600.c b/drivers/pcmcia/sa1100_h3600.c index e5491879acd..9017b1302cc 100644 --- a/drivers/pcmcia/sa1100_h3600.c +++ b/drivers/pcmcia/sa1100_h3600.c @@ -11,7 +11,7 @@  #include <linux/init.h>  #include <linux/delay.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/mach-types.h>  #include <asm/arch/h3600.h> diff --git a/drivers/pcmcia/sa1100_jornada720.c b/drivers/pcmcia/sa1100_jornada720.c index 2167e6714d2..15c31dbb0f3 100644 --- a/drivers/pcmcia/sa1100_jornada720.c +++ b/drivers/pcmcia/sa1100_jornada720.c @@ -10,7 +10,7 @@  #include <linux/errno.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/sa1111.h>  #include <asm/mach-types.h> diff --git a/drivers/pcmcia/sa1100_neponset.c b/drivers/pcmcia/sa1100_neponset.c index 687492fcd5b..ace391b69e9 100644 --- a/drivers/pcmcia/sa1100_neponset.c +++ b/drivers/pcmcia/sa1100_neponset.c @@ -9,7 +9,7 @@  #include <linux/errno.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/arch/neponset.h>  #include <asm/hardware/sa1111.h> diff --git a/drivers/pcmcia/sa1100_shannon.c b/drivers/pcmcia/sa1100_shannon.c index 494912fccc0..16b04270508 100644 --- a/drivers/pcmcia/sa1100_shannon.c +++ b/drivers/pcmcia/sa1100_shannon.c @@ -9,7 +9,7 @@  #include <linux/device.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/arch/shannon.h>  #include <asm/irq.h> diff --git a/drivers/pcmcia/sa1100_simpad.c b/drivers/pcmcia/sa1100_simpad.c index 42567de894b..6e6e9865438 100644 --- a/drivers/pcmcia/sa1100_simpad.c +++ b/drivers/pcmcia/sa1100_simpad.c @@ -9,7 +9,7 @@  #include <linux/device.h>  #include <linux/init.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/irq.h>  #include <asm/arch/simpad.h> diff --git a/drivers/pcmcia/sa1111_generic.c b/drivers/pcmcia/sa1111_generic.c index 658cddfbcf2..432c0610582 100644 --- a/drivers/pcmcia/sa1111_generic.c +++ b/drivers/pcmcia/sa1111_generic.c @@ -14,7 +14,7 @@  #include <pcmcia/ss.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/sa1111.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/drivers/pcmcia/sa11xx_base.c b/drivers/pcmcia/sa11xx_base.c index 31a7abc55b2..7d48201ae10 100644 --- a/drivers/pcmcia/sa11xx_base.c +++ b/drivers/pcmcia/sa11xx_base.c @@ -37,7 +37,7 @@  #include <linux/kernel.h>  #include <linux/spinlock.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/system.h> diff --git a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c index 8c21446996f..95dff38e85f 100644 --- a/drivers/pcmcia/soc_common.c +++ b/drivers/pcmcia/soc_common.c @@ -43,7 +43,7 @@  #include <linux/spinlock.h>  #include <linux/cpufreq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/system.h> diff --git a/drivers/rtc/rtc-bfin.c b/drivers/rtc/rtc-bfin.c index 8624f55d056..a1af4c27939 100644 --- a/drivers/rtc/rtc-bfin.c +++ b/drivers/rtc/rtc-bfin.c @@ -2,7 +2,7 @@   * Blackfin On-Chip Real Time Clock Driver   *  Supports BF52[257]/BF53[123]/BF53[467]/BF54[24789]   * - * Copyright 2004-2007 Analog Devices Inc. + * Copyright 2004-2008 Analog Devices Inc.   *   * Enter bugs at http://blackfin.uclinux.org/   * @@ -32,6 +32,15 @@   * writes to clear status registers complete immediately.   */ +/* It may seem odd that there is no SWCNT code in here (which would be exposed + * via the periodic interrupt event, or PIE).  Since the Blackfin RTC peripheral + * runs in units of seconds (N/HZ) but the Linux framework runs in units of HZ + * (2^N HZ), there is no point in keeping code that only provides 1 HZ PIEs. + * The same exact behavior can be accomplished by using the update interrupt + * event (UIE).  Maybe down the line the RTC peripheral will suck less in which + * case we can re-introduce PIE support. + */ +  #include <linux/bcd.h>  #include <linux/completion.h>  #include <linux/delay.h> @@ -144,14 +153,13 @@ static void bfin_rtc_sync_pending(struct device *dev)   * Initialize the RTC.  Enable pre-scaler to scale RTC clock   * to 1Hz and clear interrupt/status registers.   */ -static void bfin_rtc_reset(struct device *dev) +static void bfin_rtc_reset(struct device *dev, u16 rtc_ictl)  {  	struct bfin_rtc *rtc = dev_get_drvdata(dev);  	dev_dbg_stamp(dev);  	bfin_rtc_sync_pending(dev);  	bfin_write_RTC_PREN(0x1); -	bfin_write_RTC_ICTL(RTC_ISTAT_WRITE_COMPLETE); -	bfin_write_RTC_SWCNT(0); +	bfin_write_RTC_ICTL(rtc_ictl);  	bfin_write_RTC_ALARM(0);  	bfin_write_RTC_ISTAT(0xFFFF);  	rtc->rtc_wrote_regs = 0; @@ -194,14 +202,6 @@ static irqreturn_t bfin_rtc_interrupt(int irq, void *dev_id)  		}  	} -	if (rtc_ictl & RTC_ISTAT_STOPWATCH) { -		if (rtc_istat & RTC_ISTAT_STOPWATCH) { -			bfin_write_RTC_ISTAT(RTC_ISTAT_STOPWATCH); -			events |= RTC_PF | RTC_IRQF; -			bfin_write_RTC_SWCNT(rtc->rtc_dev->irq_freq); -		} -	} -  	if (rtc_ictl & RTC_ISTAT_SEC) {  		if (rtc_istat & RTC_ISTAT_SEC) {  			bfin_write_RTC_ISTAT(RTC_ISTAT_SEC); @@ -226,7 +226,7 @@ static int bfin_rtc_open(struct device *dev)  	ret = request_irq(IRQ_RTC, bfin_rtc_interrupt, IRQF_SHARED, to_platform_device(dev)->name, dev);  	if (!ret) -		bfin_rtc_reset(dev); +		bfin_rtc_reset(dev, RTC_ISTAT_WRITE_COMPLETE);  	return ret;  } @@ -234,16 +234,16 @@ static int bfin_rtc_open(struct device *dev)  static void bfin_rtc_release(struct device *dev)  {  	dev_dbg_stamp(dev); -	bfin_rtc_reset(dev); +	bfin_rtc_reset(dev, 0);  	free_irq(IRQ_RTC, dev);  } -static void bfin_rtc_int_set(struct bfin_rtc *rtc, u16 rtc_int) +static void bfin_rtc_int_set(u16 rtc_int)  {  	bfin_write_RTC_ISTAT(rtc_int);  	bfin_write_RTC_ICTL(bfin_read_RTC_ICTL() | rtc_int);  } -static void bfin_rtc_int_clear(struct bfin_rtc *rtc, u16 rtc_int) +static void bfin_rtc_int_clear(u16 rtc_int)  {  	bfin_write_RTC_ICTL(bfin_read_RTC_ICTL() & rtc_int);  } @@ -252,7 +252,7 @@ static void bfin_rtc_int_set_alarm(struct bfin_rtc *rtc)  	/* Blackfin has different bits for whether the alarm is  	 * more than 24 hours away.  	 */ -	bfin_rtc_int_set(rtc, (rtc->rtc_alarm.tm_yday == -1 ? RTC_ISTAT_ALARM : RTC_ISTAT_ALARM_DAY)); +	bfin_rtc_int_set(rtc->rtc_alarm.tm_yday == -1 ? RTC_ISTAT_ALARM : RTC_ISTAT_ALARM_DAY);  }  static int bfin_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)  { @@ -264,23 +264,13 @@ static int bfin_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long ar  	bfin_rtc_sync_pending(dev);  	switch (cmd) { -	case RTC_PIE_ON: -		dev_dbg_stamp(dev); -		bfin_rtc_int_set(rtc, RTC_ISTAT_STOPWATCH); -		bfin_write_RTC_SWCNT(rtc->rtc_dev->irq_freq); -		break; -	case RTC_PIE_OFF: -		dev_dbg_stamp(dev); -		bfin_rtc_int_clear(rtc, ~RTC_ISTAT_STOPWATCH); -		break; -  	case RTC_UIE_ON:  		dev_dbg_stamp(dev); -		bfin_rtc_int_set(rtc, RTC_ISTAT_SEC); +		bfin_rtc_int_set(RTC_ISTAT_SEC);  		break;  	case RTC_UIE_OFF:  		dev_dbg_stamp(dev); -		bfin_rtc_int_clear(rtc, ~RTC_ISTAT_SEC); +		bfin_rtc_int_clear(~RTC_ISTAT_SEC);  		break;  	case RTC_AIE_ON: @@ -289,7 +279,7 @@ static int bfin_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long ar  		break;  	case RTC_AIE_OFF:  		dev_dbg_stamp(dev); -		bfin_rtc_int_clear(rtc, ~(RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY)); +		bfin_rtc_int_clear(~(RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY));  		break;  	default: @@ -371,30 +361,14 @@ static int bfin_rtc_proc(struct device *dev, struct seq_file *seq)  	seq_printf(seq,  		"alarm_IRQ\t: %s\n"  		"wkalarm_IRQ\t: %s\n" -		"seconds_IRQ\t: %s\n" -		"periodic_IRQ\t: %s\n", +		"seconds_IRQ\t: %s\n",  		yesno(ictl & RTC_ISTAT_ALARM),  		yesno(ictl & RTC_ISTAT_ALARM_DAY), -		yesno(ictl & RTC_ISTAT_SEC), -		yesno(ictl & RTC_ISTAT_STOPWATCH)); +		yesno(ictl & RTC_ISTAT_SEC));  	return 0;  #undef yesno  } -/** - *	bfin_irq_set_freq - make sure hardware supports requested freq - *	@dev: pointer to RTC device structure - *	@freq: requested frequency rate - * - *	The Blackfin RTC can only generate periodic events at 1 per - *	second (1 Hz), so reject any attempt at changing it. - */ -static int bfin_irq_set_freq(struct device *dev, int freq) -{ -	dev_dbg_stamp(dev); -	return -ENOTTY; -} -  static struct rtc_class_ops bfin_rtc_ops = {  	.open          = bfin_rtc_open,  	.release       = bfin_rtc_release, @@ -404,7 +378,6 @@ static struct rtc_class_ops bfin_rtc_ops = {  	.read_alarm    = bfin_rtc_read_alarm,  	.set_alarm     = bfin_rtc_set_alarm,  	.proc          = bfin_rtc_proc, -	.irq_set_freq  = bfin_irq_set_freq,  };  static int __devinit bfin_rtc_probe(struct platform_device *pdev) @@ -423,10 +396,14 @@ static int __devinit bfin_rtc_probe(struct platform_device *pdev)  		ret = PTR_ERR(rtc->rtc_dev);  		goto err;  	} -	rtc->rtc_dev->irq_freq = 1; + +	/* see comment at top of file about stopwatch/PIE */ +	bfin_write_RTC_SWCNT(0);  	platform_set_drvdata(pdev, rtc); +	device_init_wakeup(&pdev->dev, 1); +  	return 0;   err: @@ -445,6 +422,32 @@ static int __devexit bfin_rtc_remove(struct platform_device *pdev)  	return 0;  } +#ifdef CONFIG_PM +static int bfin_rtc_suspend(struct platform_device *pdev, pm_message_t state) +{ +	if (device_may_wakeup(&pdev->dev)) { +		enable_irq_wake(IRQ_RTC); +		bfin_rtc_sync_pending(&pdev->dev); +	} else +		bfin_rtc_int_clear(-1); + +	return 0; +} + +static int bfin_rtc_resume(struct platform_device *pdev) +{ +	if (device_may_wakeup(&pdev->dev)) +		disable_irq_wake(IRQ_RTC); +	else +		bfin_write_RTC_ISTAT(-1); + +	return 0; +} +#else +# define bfin_rtc_suspend NULL +# define bfin_rtc_resume  NULL +#endif +  static struct platform_driver bfin_rtc_driver = {  	.driver		= {  		.name	= "rtc-bfin", @@ -452,6 +455,8 @@ static struct platform_driver bfin_rtc_driver = {  	},  	.probe		= bfin_rtc_probe,  	.remove		= __devexit_p(bfin_rtc_remove), +	.suspend	= bfin_rtc_suspend, +	.resume		= bfin_rtc_resume,  };  static int __init bfin_rtc_init(void) diff --git a/drivers/rtc/rtc-ep93xx.c b/drivers/rtc/rtc-ep93xx.c index 1e99325270d..9ab53ec6313 100644 --- a/drivers/rtc/rtc-ep93xx.c +++ b/drivers/rtc/rtc-ep93xx.c @@ -12,7 +12,7 @@  #include <linux/module.h>  #include <linux/rtc.h>  #include <linux/platform_device.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define EP93XX_RTC_REG(x)	(EP93XX_RTC_BASE + (x))  #define EP93XX_RTC_DATA		EP93XX_RTC_REG(0x0000) diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index 54b1ebb0150..8054112fc04 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c @@ -22,7 +22,7 @@  #include <linux/clk.h>  #include <linux/log2.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/uaccess.h>  #include <asm/io.h>  #include <asm/irq.h> diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c index f47294c6014..a0982d67e08 100644 --- a/drivers/rtc/rtc-sa1100.c +++ b/drivers/rtc/rtc-sa1100.c @@ -31,7 +31,7 @@  #include <linux/pm.h>  #include <linux/bitops.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #ifdef CONFIG_ARCH_PXA diff --git a/drivers/scsi/arm/acornscsi-io.S b/drivers/scsi/arm/acornscsi-io.S index 5cebe310526..075df199cde 100644 --- a/drivers/scsi/arm/acornscsi-io.S +++ b/drivers/scsi/arm/acornscsi-io.S @@ -8,7 +8,7 @@  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #if defined(__APCS_32__)  #define LOADREGS(t,r,l...)	ldm##t	r, l diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c index da876d3924b..a48e4990fe1 100644 --- a/drivers/scsi/hptiop.c +++ b/drivers/scsi/hptiop.c @@ -25,7 +25,6 @@  #include <linux/delay.h>  #include <linux/timer.h>  #include <linux/spinlock.h> -#include <linux/hdreg.h>  #include <asm/uaccess.h>  #include <asm/io.h>  #include <asm/div64.h> @@ -1249,6 +1248,13 @@ static struct pci_device_id hptiop_id_table[] = {  	{ PCI_VDEVICE(TTI, 0x3522), (kernel_ulong_t)&hptiop_itl_ops },  	{ PCI_VDEVICE(TTI, 0x3410), (kernel_ulong_t)&hptiop_itl_ops },  	{ PCI_VDEVICE(TTI, 0x3540), (kernel_ulong_t)&hptiop_itl_ops }, +	{ PCI_VDEVICE(TTI, 0x3530), (kernel_ulong_t)&hptiop_itl_ops }, +	{ PCI_VDEVICE(TTI, 0x3560), (kernel_ulong_t)&hptiop_itl_ops }, +	{ PCI_VDEVICE(TTI, 0x4322), (kernel_ulong_t)&hptiop_itl_ops }, +	{ PCI_VDEVICE(TTI, 0x4210), (kernel_ulong_t)&hptiop_itl_ops }, +	{ PCI_VDEVICE(TTI, 0x4211), (kernel_ulong_t)&hptiop_itl_ops }, +	{ PCI_VDEVICE(TTI, 0x4310), (kernel_ulong_t)&hptiop_itl_ops }, +	{ PCI_VDEVICE(TTI, 0x4311), (kernel_ulong_t)&hptiop_itl_ops },  	{ PCI_VDEVICE(TTI, 0x3120), (kernel_ulong_t)&hptiop_mv_ops },  	{ PCI_VDEVICE(TTI, 0x3122), (kernel_ulong_t)&hptiop_mv_ops },  	{ PCI_VDEVICE(TTI, 0x3020), (kernel_ulong_t)&hptiop_mv_ops }, diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c index b40a673985a..461331d3dc4 100644 --- a/drivers/scsi/ide-scsi.c +++ b/drivers/scsi/ide-scsi.c @@ -102,11 +102,10 @@ static struct ide_scsi_obj *ide_scsi_get(struct gendisk *disk)  	mutex_lock(&idescsi_ref_mutex);  	scsi = ide_scsi_g(disk);  	if (scsi) { -		scsi_host_get(scsi->host); -		if (ide_device_get(scsi->drive)) { -			scsi_host_put(scsi->host); +		if (ide_device_get(scsi->drive))  			scsi = NULL; -		} +		else +			scsi_host_get(scsi->host);  	}  	mutex_unlock(&idescsi_ref_mutex);  	return scsi; @@ -114,9 +113,11 @@ static struct ide_scsi_obj *ide_scsi_get(struct gendisk *disk)  static void ide_scsi_put(struct ide_scsi_obj *scsi)  { +	ide_drive_t *drive = scsi->drive; +  	mutex_lock(&idescsi_ref_mutex); -	ide_device_put(scsi->drive);  	scsi_host_put(scsi->host); +	ide_device_put(drive);  	mutex_unlock(&idescsi_ref_mutex);  } diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c index 75a64a6cae8..b29360ed0bd 100644 --- a/drivers/scsi/scsi_transport_spi.c +++ b/drivers/scsi/scsi_transport_spi.c @@ -366,12 +366,14 @@ spi_transport_rd_attr(rti, "%d\n");  spi_transport_rd_attr(pcomp_en, "%d\n");  spi_transport_rd_attr(hold_mcs, "%d\n"); -/* we only care about the first child device so we return 1 */ +/* we only care about the first child device that's a real SCSI device + * so we return 1 to terminate the iteration when we find it */  static int child_iter(struct device *dev, void *data)  { -	struct scsi_device *sdev = to_scsi_device(dev); +	if (!scsi_is_sdev_device(dev)) +		return 0; -	spi_dv_device(sdev); +	spi_dv_device(to_scsi_device(dev));  	return 1;  } diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c index 0fe031f003e..1bcf3c33d7f 100644 --- a/drivers/scsi/ses.c +++ b/drivers/scsi/ses.c @@ -345,14 +345,14 @@ static int ses_enclosure_find_by_addr(struct enclosure_device *edev,  	return 0;  } -#define VPD_INQUIRY_SIZE 512 +#define VPD_INQUIRY_SIZE 36  static void ses_match_to_enclosure(struct enclosure_device *edev,  				   struct scsi_device *sdev)  {  	unsigned char *buf = kmalloc(VPD_INQUIRY_SIZE, GFP_KERNEL);  	unsigned char *desc; -	int len; +	u16 vpd_len;  	struct efd efd = {  		.addr = 0,  	}; @@ -372,9 +372,19 @@ static void ses_match_to_enclosure(struct enclosure_device *edev,  			     VPD_INQUIRY_SIZE, NULL, SES_TIMEOUT, SES_RETRIES))  		goto free; -	len = (buf[2] << 8) + buf[3]; +	vpd_len = (buf[2] << 8) + buf[3]; +	kfree(buf); +	buf = kmalloc(vpd_len, GFP_KERNEL); +	if (!buf) +		return; +	cmd[3] = vpd_len >> 8; +	cmd[4] = vpd_len & 0xff; +	if (scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, +			     vpd_len, NULL, SES_TIMEOUT, SES_RETRIES)) +		goto free; +  	desc = buf + 4; -	while (desc < buf + len) { +	while (desc < buf + vpd_len) {  		enum scsi_protocol proto = desc[0] >> 4;  		u8 code_set = desc[0] & 0x0f;  		u8 piv = desc[1] & 0x80; diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index d3b8ebb8377..3d36270a8b4 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -1747,7 +1747,7 @@ st_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages,                   */  		flush_dcache_page(pages[i]);  		/* ?? Is locking needed? I don't think so */ -		/* if (TestSetPageLocked(pages[i])) +		/* if (!trylock_page(pages[i]))  		   goto out_unlock; */          } diff --git a/drivers/serial/21285.c b/drivers/serial/21285.c index 6558a403780..73d7773c841 100644 --- a/drivers/serial/21285.c +++ b/drivers/serial/21285.c @@ -19,7 +19,7 @@  #include <asm/irq.h>  #include <asm/mach-types.h>  #include <asm/hardware/dec21285.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define BAUD_BASE		(mem_fclk_21285/64) diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c index 9d8543762a3..efcd44344fb 100644 --- a/drivers/serial/bfin_5xx.c +++ b/drivers/serial/bfin_5xx.c @@ -817,7 +817,7 @@ static void bfin_serial_set_ldisc(struct uart_port *port)  	if (line >= port->info->port.tty->driver->num)  		return; -	switch (port->info->port.tty->ldisc.num) { +	switch (port->info->port.tty->termios->c_line) {  	case N_IRDA:  		val = UART_GET_GCTL(&bfin_serial_ports[line]);  		val |= (IREN | RPOLC); diff --git a/drivers/serial/clps711x.c b/drivers/serial/clps711x.c index fc1fa9267c5..44d5d267ca1 100644 --- a/drivers/serial/clps711x.c +++ b/drivers/serial/clps711x.c @@ -39,7 +39,7 @@  #include <linux/serial_core.h>  #include <linux/serial.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/hardware/clps7111.h> diff --git a/drivers/serial/crisv10.c b/drivers/serial/crisv10.c index 8249ac49055..bf94a770bb4 100644 --- a/drivers/serial/crisv10.c +++ b/drivers/serial/crisv10.c @@ -234,7 +234,7 @@ unsigned long r_alt_ser_baudrate_shadow = 0;  static struct e100_serial rs_table[] = {  	{ .baud        = DEF_BAUD, -	  .port        = (unsigned char *)R_SERIAL0_CTRL, +	  .ioport        = (unsigned char *)R_SERIAL0_CTRL,  	  .irq         = 1U << 12, /* uses DMA 6 and 7 */  	  .oclrintradr = R_DMA_CH6_CLR_INTR,  	  .ofirstadr   = R_DMA_CH6_FIRST, @@ -288,7 +288,7 @@ static struct e100_serial rs_table[] = {  },  /* ttyS0 */  #ifndef CONFIG_SVINTO_SIM  	{ .baud        = DEF_BAUD, -	  .port        = (unsigned char *)R_SERIAL1_CTRL, +	  .ioport        = (unsigned char *)R_SERIAL1_CTRL,  	  .irq         = 1U << 16, /* uses DMA 8 and 9 */  	  .oclrintradr = R_DMA_CH8_CLR_INTR,  	  .ofirstadr   = R_DMA_CH8_FIRST, @@ -344,7 +344,7 @@ static struct e100_serial rs_table[] = {  },  /* ttyS1 */  	{ .baud        = DEF_BAUD, -	  .port        = (unsigned char *)R_SERIAL2_CTRL, +	  .ioport        = (unsigned char *)R_SERIAL2_CTRL,  	  .irq         = 1U << 4,  /* uses DMA 2 and 3 */  	  .oclrintradr = R_DMA_CH2_CLR_INTR,  	  .ofirstadr   = R_DMA_CH2_FIRST, @@ -398,7 +398,7 @@ static struct e100_serial rs_table[] = {   },  /* ttyS2 */  	{ .baud        = DEF_BAUD, -	  .port        = (unsigned char *)R_SERIAL3_CTRL, +	  .ioport        = (unsigned char *)R_SERIAL3_CTRL,  	  .irq         = 1U << 8,  /* uses DMA 4 and 5 */  	  .oclrintradr = R_DMA_CH4_CLR_INTR,  	  .ofirstadr   = R_DMA_CH4_FIRST, @@ -939,7 +939,7 @@ static const struct control_pins e100_modem_pins[NR_PORTS] =  /* Output */  #define E100_RTS_GET(info) ((info)->rx_ctrl & E100_RTS_MASK)  /* Input */ -#define E100_CTS_GET(info) ((info)->port[REG_STATUS] & E100_CTS_MASK) +#define E100_CTS_GET(info) ((info)->ioport[REG_STATUS] & E100_CTS_MASK)  /* These are typically PA or PB and 0 means 0V, 1 means 3.3V */  /* Is an output */ @@ -1092,7 +1092,7 @@ e100_rts(struct e100_serial *info, int set)  	local_irq_save(flags);  	info->rx_ctrl &= ~E100_RTS_MASK;  	info->rx_ctrl |= (set ? 0 : E100_RTS_MASK);  /* RTS is active low */ -	info->port[REG_REC_CTRL] = info->rx_ctrl; +	info->ioport[REG_REC_CTRL] = info->rx_ctrl;  	local_irq_restore(flags);  #ifdef SERIAL_DEBUG_IO  	printk("ser%i rts %i\n", info->line, set); @@ -1142,7 +1142,7 @@ e100_disable_rx(struct e100_serial *info)  {  #ifndef CONFIG_SVINTO_SIM  	/* disable the receiver */ -	info->port[REG_REC_CTRL] = +	info->ioport[REG_REC_CTRL] =  		(info->rx_ctrl &= ~IO_MASK(R_SERIAL0_REC_CTRL, rec_enable));  #endif  } @@ -1152,7 +1152,7 @@ e100_enable_rx(struct e100_serial *info)  {  #ifndef CONFIG_SVINTO_SIM  	/* enable the receiver */ -	info->port[REG_REC_CTRL] = +	info->ioport[REG_REC_CTRL] =  		(info->rx_ctrl |= IO_MASK(R_SERIAL0_REC_CTRL, rec_enable));  #endif  } @@ -1490,7 +1490,7 @@ rs_stop(struct tty_struct *tty)  			xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable);  		} -		*((unsigned long *)&info->port[REG_XOFF]) = xoff; +		*((unsigned long *)&info->ioport[REG_XOFF]) = xoff;  		local_irq_restore(flags);  	}  } @@ -1513,7 +1513,7 @@ rs_start(struct tty_struct *tty)  			xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable);  		} -		*((unsigned long *)&info->port[REG_XOFF]) = xoff; +		*((unsigned long *)&info->ioport[REG_XOFF]) = xoff;  		if (!info->uses_dma_out &&  		    info->xmit.head != info->xmit.tail && info->xmit.buf)  			e100_enable_serial_tx_ready_irq(info); @@ -1888,7 +1888,7 @@ static void receive_chars_dma(struct e100_serial *info)  	handle_all_descr_data(info);  	/* Read the status register to detect errors */ -	rstat = info->port[REG_STATUS]; +	rstat = info->ioport[REG_STATUS];  	if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) {  		DFLOW(DEBUG_LOG(info->line, "XOFF detect stat %x\n", rstat));  	} @@ -1897,7 +1897,7 @@ static void receive_chars_dma(struct e100_serial *info)  		/* If we got an error, we must reset it by reading the  		 * data_in field  		 */ -		unsigned char data = info->port[REG_DATA]; +		unsigned char data = info->ioport[REG_DATA];  		PROCSTAT(ser_stat[info->line].errors_cnt++);  		DEBUG_LOG(info->line, "#dERR: s d 0x%04X\n", @@ -2077,7 +2077,7 @@ static int force_eop_if_needed(struct e100_serial *info)  	/* We check data_avail bit to determine if data has  	 * arrived since last time  	 */ -	unsigned char rstat = info->port[REG_STATUS]; +	unsigned char rstat = info->ioport[REG_STATUS];  	/* error or datavail? */  	if (rstat & SER_ERROR_MASK) { @@ -2096,7 +2096,7 @@ static int force_eop_if_needed(struct e100_serial *info)  		TIMERD(DEBUG_LOG(info->line, "timeout: rstat 0x%03X\n",  		          rstat | (info->line << 8)));  		/* Read data to clear status flags */ -		(void)info->port[REG_DATA]; +		(void)info->ioport[REG_DATA];  		info->forced_eop = 0;  		START_FLUSH_FAST_TIMER(info, "magic"); @@ -2296,7 +2296,7 @@ struct e100_serial * handle_ser_rx_interrupt_no_dma(struct e100_serial *info)  	}  	/* Read data and status at the same time */ -	data_read = *((unsigned long *)&info->port[REG_DATA_STATUS32]); +	data_read = *((unsigned long *)&info->ioport[REG_DATA_STATUS32]);  more_data:  	if (data_read & IO_MASK(R_SERIAL0_READ, xoff_detect) ) {  		DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0)); @@ -2391,7 +2391,7 @@ more_data:  	info->icount.rx++; -	data_read = *((unsigned long *)&info->port[REG_DATA_STATUS32]); +	data_read = *((unsigned long *)&info->ioport[REG_DATA_STATUS32]);  	if (data_read & IO_MASK(R_SERIAL0_READ, data_avail)) {  		DEBUG_LOG(info->line, "ser_rx   %c in loop\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read));  		goto more_data; @@ -2413,7 +2413,7 @@ static struct e100_serial* handle_ser_rx_interrupt(struct e100_serial *info)  		return handle_ser_rx_interrupt_no_dma(info);  	}  	/* DMA is used */ -	rstat = info->port[REG_STATUS]; +	rstat = info->ioport[REG_STATUS];  	if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) {  		DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0));  	} @@ -2426,7 +2426,7 @@ static struct e100_serial* handle_ser_rx_interrupt(struct e100_serial *info)  		/* If we got an error, we must reset it by reading the  		 * data_in field  		 */ -		data = info->port[REG_DATA]; +		data = info->ioport[REG_DATA];  		DINTR1(DEBUG_LOG(info->line, "ser_rx!  %c\n", data));  		DINTR1(DEBUG_LOG(info->line, "ser_rx err stat %02X\n", rstat));  		if (!data && (rstat & SER_FRAMING_ERR_MASK)) { @@ -2528,10 +2528,10 @@ static void handle_ser_tx_interrupt(struct e100_serial *info)  		unsigned char rstat;  		DFLOW(DEBUG_LOG(info->line, "tx_int: xchar 0x%02X\n", info->x_char));  		local_irq_save(flags); -		rstat = info->port[REG_STATUS]; +		rstat = info->ioport[REG_STATUS];  		DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat)); -		info->port[REG_TR_DATA] = info->x_char; +		info->ioport[REG_TR_DATA] = info->x_char;  		info->icount.tx++;  		info->x_char = 0;  		/* We must enable since it is disabled in ser_interrupt */ @@ -2545,7 +2545,7 @@ static void handle_ser_tx_interrupt(struct e100_serial *info)  		/* We only use normal tx interrupt when sending x_char */  		DFLOW(DEBUG_LOG(info->line, "tx_int: xchar sent\n", 0));  		local_irq_save(flags); -		rstat = info->port[REG_STATUS]; +		rstat = info->ioport[REG_STATUS];  		DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat));  		e100_disable_serial_tx_ready_irq(info);  		if (info->port.tty->stopped) @@ -2573,7 +2573,7 @@ static void handle_ser_tx_interrupt(struct e100_serial *info)  	DINTR2(DEBUG_LOG(info->line, "tx_int %c\n", info->xmit.buf[info->xmit.tail]));  	/* Send a byte, rs485 timing is critical so turn of ints */  	local_irq_save(flags); -	info->port[REG_TR_DATA] = info->xmit.buf[info->xmit.tail]; +	info->ioport[REG_TR_DATA] = info->xmit.buf[info->xmit.tail];  	info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1);  	info->icount.tx++;  	if (info->xmit.head == info->xmit.tail) { @@ -2848,7 +2848,7 @@ startup(struct e100_serial * info)  	/* dummy read to reset any serial errors */ -	(void)info->port[REG_DATA]; +	(void)info->ioport[REG_DATA];  	/* enable the interrupts */  	if (info->uses_dma_out) @@ -2897,7 +2897,7 @@ shutdown(struct e100_serial * info)  	/* shut down the transmitter and receiver */  	DFLOW(DEBUG_LOG(info->line, "shutdown %i\n", info->line));  	e100_disable_rx(info); -	info->port[REG_TR_CTRL] = (info->tx_ctrl &= ~0x40); +	info->ioport[REG_TR_CTRL] = (info->tx_ctrl &= ~0x40);  	/* disable interrupts, reset dma channels */  	if (info->uses_dma_in) { @@ -2968,7 +2968,7 @@ change_speed(struct e100_serial *info)  	if (!info->port.tty || !info->port.tty->termios)  		return; -	if (!info->port) +	if (!info->ioport)  		return;  	cflag = info->port.tty->termios->c_cflag; @@ -3037,7 +3037,7 @@ change_speed(struct e100_serial *info)  		info->baud = cflag_to_baud(cflag);  #ifndef CONFIG_SVINTO_SIM -		info->port[REG_BAUD] = cflag_to_etrax_baud(cflag); +		info->ioport[REG_BAUD] = cflag_to_etrax_baud(cflag);  #endif /* CONFIG_SVINTO_SIM */  	} @@ -3097,8 +3097,8 @@ change_speed(struct e100_serial *info)  	/* actually write the control regs to the hardware */ -	info->port[REG_TR_CTRL] = info->tx_ctrl; -	info->port[REG_REC_CTRL] = info->rx_ctrl; +	info->ioport[REG_TR_CTRL] = info->tx_ctrl; +	info->ioport[REG_REC_CTRL] = info->rx_ctrl;  	xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(info->port.tty));  	xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable);  	if (info->port.tty->termios->c_iflag & IXON ) { @@ -3107,7 +3107,7 @@ change_speed(struct e100_serial *info)  		xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable);  	} -	*((unsigned long *)&info->port[REG_XOFF]) = xoff; +	*((unsigned long *)&info->ioport[REG_XOFF]) = xoff;  	local_irq_restore(flags);  #endif /* !CONFIG_SVINTO_SIM */ @@ -3156,7 +3156,7 @@ static int rs_raw_write(struct tty_struct *tty,  #ifdef SERIAL_DEBUG_DATA  	if (info->line == SERIAL_DEBUG_LINE)  		printk("rs_raw_write (%d), status %d\n", -		       count, info->port[REG_STATUS]); +		       count, info->ioport[REG_STATUS]);  #endif  #ifdef CONFIG_SVINTO_SIM @@ -3427,7 +3427,7 @@ get_serial_info(struct e100_serial * info,  	memset(&tmp, 0, sizeof(tmp));  	tmp.type = info->type;  	tmp.line = info->line; -	tmp.port = (int)info->port; +	tmp.port = (int)info->ioport;  	tmp.irq = info->irq;  	tmp.flags = info->flags;  	tmp.baud_base = info->baud_base; @@ -3557,14 +3557,14 @@ char *get_control_state_str(int MLines, char *s)  }  #endif -static void +static int  rs_break(struct tty_struct *tty, int break_state)  {  	struct e100_serial *info = (struct e100_serial *)tty->driver_data;  	unsigned long flags; -	if (!info->port) -		return; +	if (!info->ioport) +		return -EIO;  	local_irq_save(flags);  	if (break_state == -1) { @@ -3575,8 +3575,9 @@ rs_break(struct tty_struct *tty, int break_state)  		/* Set bit 7 (txd) and 6 (tr_enable) */  		info->tx_ctrl |= (0x80 | 0x40);  	} -	info->port[REG_TR_CTRL] = info->tx_ctrl; +	info->ioport[REG_TR_CTRL] = info->tx_ctrl;  	local_irq_restore(flags); +	return 0;  }  static int @@ -4231,9 +4232,9 @@ static int line_info(char *buf, struct e100_serial *info)  	unsigned long tmp;  	ret = sprintf(buf, "%d: uart:E100 port:%lX irq:%d", -		      info->line, (unsigned long)info->port, info->irq); +		      info->line, (unsigned long)info->ioport, info->irq); -	if (!info->port || (info->type == PORT_UNKNOWN)) { +	if (!info->ioport || (info->type == PORT_UNKNOWN)) {  		ret += sprintf(buf+ret, "\n");  		return ret;  	} @@ -4281,7 +4282,7 @@ static int line_info(char *buf, struct e100_serial *info)  	}  	{ -		unsigned char rstat = info->port[REG_STATUS]; +		unsigned char rstat = info->ioport[REG_STATUS];  		if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) )  			ret += sprintf(buf+ret, " xoff_detect:1");  	} @@ -4502,7 +4503,7 @@ rs_init(void)  		if (info->enabled) {  			printk(KERN_INFO "%s%d at 0x%x is a builtin UART with DMA\n", -			       serial_driver->name, info->line, (unsigned int)info->port); +			       serial_driver->name, info->line, (unsigned int)info->ioport);  		}  	}  #ifdef CONFIG_ETRAX_FAST_TIMER diff --git a/drivers/serial/crisv10.h b/drivers/serial/crisv10.h index ccd0f32b737..e3c5c8c3c09 100644 --- a/drivers/serial/crisv10.h +++ b/drivers/serial/crisv10.h @@ -36,8 +36,9 @@ struct etrax_recv_buffer {  };  struct e100_serial { +	struct tty_port port;  	int baud; -	volatile u8	*port;	/* R_SERIALx_CTRL */ +	volatile u8	*ioport;	/* R_SERIALx_CTRL */  	u32		irq;	/* bitnr in R_IRQ_MASK2 for dmaX_descr */  	/* Output registers */ diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c index e0da4dc7bbf..db3a2df5e5c 100644 --- a/drivers/serial/imx.c +++ b/drivers/serial/imx.c @@ -44,7 +44,7 @@  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/imx-uart.h>  /* Register definitions */ diff --git a/drivers/serial/netx-serial.c b/drivers/serial/netx-serial.c index 9f8ccb735c1..edbb85a2cc5 100644 --- a/drivers/serial/netx-serial.c +++ b/drivers/serial/netx-serial.c @@ -35,7 +35,7 @@  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/netx-regs.h>  /* We've been assigned a range on the "Low-density serial ports" major */ diff --git a/drivers/serial/pxa.c b/drivers/serial/pxa.c index b9a93f326fb..033767bed04 100644 --- a/drivers/serial/pxa.c +++ b/drivers/serial/pxa.c @@ -45,7 +45,7 @@  #include <linux/clk.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm/arch/pxa-regs.h> diff --git a/drivers/serial/s3c2400.c b/drivers/serial/s3c2400.c index a1102053e55..525130d67f9 100644 --- a/drivers/serial/s3c2400.c +++ b/drivers/serial/s3c2400.c @@ -17,7 +17,7 @@  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/plat-s3c/regs-serial.h>  #include <asm/arch/regs-gpio.h> diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c index c5f03f41686..f9630c6e6f7 100644 --- a/drivers/serial/s3c2410.c +++ b/drivers/serial/s3c2410.c @@ -19,7 +19,7 @@  #include <linux/serial.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/plat-s3c/regs-serial.h>  #include <asm/arch/regs-gpio.h> diff --git a/drivers/serial/s3c2412.c b/drivers/serial/s3c2412.c index ce0c220e3e9..b4c0bb5a041 100644 --- a/drivers/serial/s3c2412.c +++ b/drivers/serial/s3c2412.c @@ -19,7 +19,7 @@  #include <linux/serial.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/plat-s3c/regs-serial.h>  #include <asm/arch/regs-gpio.h> diff --git a/drivers/serial/s3c2440.c b/drivers/serial/s3c2440.c index 38f954bd39c..ea34faa2f65 100644 --- a/drivers/serial/s3c2440.c +++ b/drivers/serial/s3c2440.c @@ -19,7 +19,7 @@  #include <linux/serial.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/plat-s3c/regs-serial.h>  #include <asm/arch/regs-gpio.h> diff --git a/drivers/serial/sa1100.c b/drivers/serial/sa1100.c index a5e76cc1807..6c37a58652c 100644 --- a/drivers/serial/sa1100.c +++ b/drivers/serial/sa1100.c @@ -39,7 +39,7 @@  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach/serial_sa1100.h>  /* We've been assigned a range on the "Low-density serial ports" major */ diff --git a/drivers/serial/samsung.c b/drivers/serial/samsung.c index d852f83f890..5b964d4bc04 100644 --- a/drivers/serial/samsung.c +++ b/drivers/serial/samsung.c @@ -45,7 +45,7 @@  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/plat-s3c/regs-serial.h>  #include <asm/arch/regs-gpio.h> diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c index be97789fa5f..d1812d32f47 100644 --- a/drivers/sh/maple/maple.c +++ b/drivers/sh/maple/maple.c @@ -2,6 +2,7 @@   * Core maple bus functionality   *   *  Copyright (C) 2007, 2008 Adrian McMenamin + *  Copyright (C) 2001 - 2008 Paul Mundt   *   * Based on 2.4 code by:   * @@ -31,7 +32,7 @@  #include <mach/dma.h>  #include <mach/sysasic.h> -MODULE_AUTHOR("Yaegshi Takeshi, Paul Mundt, M.R. Brown, Adrian McMenamin"); +MODULE_AUTHOR("Yaegashi Takeshi, Paul Mundt, M. R. Brown, Adrian McMenamin");  MODULE_DESCRIPTION("Maple bus driver for Dreamcast");  MODULE_LICENSE("GPL v2");  MODULE_SUPPORTED_DEVICE("{{SEGA, Dreamcast/Maple}}"); @@ -65,19 +66,36 @@ static bool checked[4];  static struct maple_device *baseunits[4];  /** - *  maple_driver_register - register a device driver - *  automatically makes the driver bus a maple bus - *  @drv: the driver to be registered + * maple_driver_register - register a maple driver + * @drv: maple driver to be registered. + * + * Registers the passed in @drv, while updating the bus type. + * Devices with matching function IDs will be automatically probed.   */ -int maple_driver_register(struct device_driver *drv) +int maple_driver_register(struct maple_driver *drv)  {  	if (!drv)  		return -EINVAL; -	drv->bus = &maple_bus_type; -	return driver_register(drv); + +	drv->drv.bus = &maple_bus_type; + +	return driver_register(&drv->drv);  }  EXPORT_SYMBOL_GPL(maple_driver_register); +/** + * maple_driver_unregister - unregister a maple driver. + * @drv: maple driver to unregister. + * + * Cleans up after maple_driver_register(). To be invoked in the exit + * path of any module drivers. + */ +void maple_driver_unregister(struct maple_driver *drv) +{ +	driver_unregister(&drv->drv); +} +EXPORT_SYMBOL_GPL(maple_driver_unregister); +  /* set hardware registers to enable next round of dma */  static void maplebus_dma_reset(void)  { @@ -129,13 +147,13 @@ static void maple_release_device(struct device *dev)  	kfree(mdev);  } -/* +/**   * maple_add_packet - add a single instruction to the queue - * @mdev - maple device - * @function - function on device being queried - * @command - maple command to add - * @length - length of command string (in 32 bit words) - * @data - remainder of command string + * @mdev: maple device + * @function: function on device being queried + * @command: maple command to add + * @length: length of command string (in 32 bit words) + * @data: remainder of command string   */  int maple_add_packet(struct maple_device *mdev, u32 function, u32 command,  	size_t length, void *data) @@ -176,14 +194,15 @@ out:  }  EXPORT_SYMBOL_GPL(maple_add_packet); -/* +/**   * maple_add_packet_sleeps - add a single instruction to the queue - *  - waits for lock to be free - * @mdev - maple device - * @function - function on device being queried - * @command - maple command to add - * @length - length of command string (in 32 bit words) - * @data - remainder of command string + * @mdev: maple device + * @function: function on device being queried + * @command: maple command to add + * @length: length of command string (in 32 bit words) + * @data: remainder of command string + * + * Same as maple_add_packet(), but waits for the lock to become free.   */  int maple_add_packet_sleeps(struct maple_device *mdev, u32 function,  	u32 command, size_t length, void *data) @@ -724,11 +743,9 @@ static int maple_get_dma_buffer(void)  static int match_maple_bus_driver(struct device *devptr,  				  struct device_driver *drvptr)  { -	struct maple_driver *maple_drv; -	struct maple_device *maple_dev; +	struct maple_driver *maple_drv = to_maple_driver(drvptr); +	struct maple_device *maple_dev = to_maple_dev(devptr); -	maple_drv = container_of(drvptr, struct maple_driver, drv); -	maple_dev = container_of(devptr, struct maple_device, dev);  	/* Trap empty port case */  	if (maple_dev->devinfo.function == 0xFFFFFFFF)  		return 0; diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index 2303521b4f0..b9d0efb6803 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig @@ -149,6 +149,12 @@ config SPI_OMAP24XX  	  SPI master controller for OMAP24xx/OMAP34xx Multichannel SPI  	  (McSPI) modules. +config SPI_ORION +	tristate "Orion SPI master (EXPERIMENTAL)" +	depends on PLAT_ORION && EXPERIMENTAL +	help +	  This enables using the SPI master controller on the Orion chips. +  config SPI_PXA2XX  	tristate "PXA2xx SSP SPI master"  	depends on ARCH_PXA && EXPERIMENTAL diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile index 7fca043ce72..ccf18de34e1 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile @@ -21,6 +21,7 @@ obj-$(CONFIG_SPI_LM70_LLP)		+= spi_lm70llp.o  obj-$(CONFIG_SPI_PXA2XX)		+= pxa2xx_spi.o  obj-$(CONFIG_SPI_OMAP_UWIRE)		+= omap_uwire.o  obj-$(CONFIG_SPI_OMAP24XX)		+= omap2_mcspi.o +obj-$(CONFIG_SPI_ORION)			+= orion_spi.o  obj-$(CONFIG_SPI_MPC52xx_PSC)		+= mpc52xx_psc_spi.o  obj-$(CONFIG_SPI_MPC83xx)		+= spi_mpc83xx.o  obj-$(CONFIG_SPI_S3C24XX_GPIO)		+= spi_s3c24xx_gpio.o diff --git a/drivers/spi/atmel_spi.c b/drivers/spi/atmel_spi.c index 0c716566085..95190c619c1 100644 --- a/drivers/spi/atmel_spi.c +++ b/drivers/spi/atmel_spi.c @@ -184,7 +184,8 @@ static void atmel_spi_next_xfer(struct spi_master *master,  {  	struct atmel_spi	*as = spi_master_get_devdata(master);  	struct spi_transfer	*xfer; -	u32			len, remaining, total; +	u32			len, remaining; +	u32			ieval;  	dma_addr_t		tx_dma, rx_dma;  	if (!as->current_transfer) @@ -197,6 +198,8 @@ static void atmel_spi_next_xfer(struct spi_master *master,  		xfer = NULL;  	if (xfer) { +		spi_writel(as, PTCR, SPI_BIT(RXTDIS) | SPI_BIT(TXTDIS)); +  		len = xfer->len;  		atmel_spi_next_xfer_data(master, xfer, &tx_dma, &rx_dma, &len);  		remaining = xfer->len - len; @@ -234,6 +237,8 @@ static void atmel_spi_next_xfer(struct spi_master *master,  	as->next_transfer = xfer;  	if (xfer) { +		u32	total; +  		total = len;  		atmel_spi_next_xfer_data(master, xfer, &tx_dma, &rx_dma, &len);  		as->next_remaining_bytes = total - len; @@ -250,9 +255,11 @@ static void atmel_spi_next_xfer(struct spi_master *master,  			"  next xfer %p: len %u tx %p/%08x rx %p/%08x\n",  			xfer, xfer->len, xfer->tx_buf, xfer->tx_dma,  			xfer->rx_buf, xfer->rx_dma); +		ieval = SPI_BIT(ENDRX) | SPI_BIT(OVRES);  	} else {  		spi_writel(as, RNCR, 0);  		spi_writel(as, TNCR, 0); +		ieval = SPI_BIT(RXBUFF) | SPI_BIT(ENDRX) | SPI_BIT(OVRES);  	}  	/* REVISIT: We're waiting for ENDRX before we start the next @@ -265,7 +272,7 @@ static void atmel_spi_next_xfer(struct spi_master *master,  	 *  	 * It should be doable, though. Just not now...  	 */ -	spi_writel(as, IER, SPI_BIT(ENDRX) | SPI_BIT(OVRES)); +	spi_writel(as, IER, ieval);  	spi_writel(as, PTCR, SPI_BIT(TXTEN) | SPI_BIT(RXTEN));  } @@ -396,7 +403,7 @@ atmel_spi_interrupt(int irq, void *dev_id)  		ret = IRQ_HANDLED; -		spi_writel(as, IDR, (SPI_BIT(ENDTX) | SPI_BIT(ENDRX) +		spi_writel(as, IDR, (SPI_BIT(RXBUFF) | SPI_BIT(ENDRX)  				     | SPI_BIT(OVRES)));  		/* @@ -418,7 +425,7 @@ atmel_spi_interrupt(int irq, void *dev_id)  		if (xfer->delay_usecs)  			udelay(xfer->delay_usecs); -		dev_warn(master->dev.parent, "fifo overrun (%u/%u remaining)\n", +		dev_warn(master->dev.parent, "overrun (%u/%u remaining)\n",  			 spi_readl(as, TCR), spi_readl(as, RCR));  		/* @@ -442,7 +449,7 @@ atmel_spi_interrupt(int irq, void *dev_id)  		spi_readl(as, SR);  		atmel_spi_msg_done(master, as, msg, -EIO, 0); -	} else if (pending & SPI_BIT(ENDRX)) { +	} else if (pending & (SPI_BIT(RXBUFF) | SPI_BIT(ENDRX))) {  		ret = IRQ_HANDLED;  		spi_writel(as, IDR, pending); diff --git a/drivers/spi/omap_uwire.c b/drivers/spi/omap_uwire.c index d9ae111c27a..e7588e112ec 100644 --- a/drivers/spi/omap_uwire.c +++ b/drivers/spi/omap_uwire.c @@ -47,7 +47,7 @@  #include <asm/system.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach-types.h> diff --git a/drivers/spi/orion_spi.c b/drivers/spi/orion_spi.c new file mode 100644 index 00000000000..c4eaacd6e55 --- /dev/null +++ b/drivers/spi/orion_spi.c @@ -0,0 +1,574 @@ +/* + * orion_spi.c -- Marvell Orion SPI controller driver + * + * Author: Shadi Ammouri <shadi@marvell.com> + * Copyright (C) 2007-2008 Marvell Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/delay.h> +#include <linux/platform_device.h> +#include <linux/err.h> +#include <linux/io.h> +#include <linux/spi/spi.h> +#include <linux/spi/orion_spi.h> +#include <asm/unaligned.h> + +#define DRIVER_NAME			"orion_spi" + +#define ORION_NUM_CHIPSELECTS		1 /* only one slave is supported*/ +#define ORION_SPI_WAIT_RDY_MAX_LOOP	2000 /* in usec */ + +#define ORION_SPI_IF_CTRL_REG		0x00 +#define ORION_SPI_IF_CONFIG_REG		0x04 +#define ORION_SPI_DATA_OUT_REG		0x08 +#define ORION_SPI_DATA_IN_REG		0x0c +#define ORION_SPI_INT_CAUSE_REG		0x10 + +#define ORION_SPI_IF_8_16_BIT_MODE	(1 << 5) +#define ORION_SPI_CLK_PRESCALE_MASK	0x1F + +struct orion_spi { +	struct work_struct	work; + +	/* Lock access to transfer list.	*/ +	spinlock_t		lock; + +	struct list_head	msg_queue; +	struct spi_master	*master; +	void __iomem		*base; +	unsigned int		max_speed; +	unsigned int		min_speed; +	struct orion_spi_info	*spi_info; +}; + +static struct workqueue_struct *orion_spi_wq; + +static inline void __iomem *spi_reg(struct orion_spi *orion_spi, u32 reg) +{ +	return orion_spi->base + reg; +} + +static inline void +orion_spi_setbits(struct orion_spi *orion_spi, u32 reg, u32 mask) +{ +	void __iomem *reg_addr = spi_reg(orion_spi, reg); +	u32 val; + +	val = readl(reg_addr); +	val |= mask; +	writel(val, reg_addr); +} + +static inline void +orion_spi_clrbits(struct orion_spi *orion_spi, u32 reg, u32 mask) +{ +	void __iomem *reg_addr = spi_reg(orion_spi, reg); +	u32 val; + +	val = readl(reg_addr); +	val &= ~mask; +	writel(val, reg_addr); +} + +static int orion_spi_set_transfer_size(struct orion_spi *orion_spi, int size) +{ +	if (size == 16) { +		orion_spi_setbits(orion_spi, ORION_SPI_IF_CONFIG_REG, +				  ORION_SPI_IF_8_16_BIT_MODE); +	} else if (size == 8) { +		orion_spi_clrbits(orion_spi, ORION_SPI_IF_CONFIG_REG, +				  ORION_SPI_IF_8_16_BIT_MODE); +	} else { +		pr_debug("Bad bits per word value %d (only 8 or 16 are " +			 "allowed).\n", size); +		return -EINVAL; +	} + +	return 0; +} + +static int orion_spi_baudrate_set(struct spi_device *spi, unsigned int speed) +{ +	u32 tclk_hz; +	u32 rate; +	u32 prescale; +	u32 reg; +	struct orion_spi *orion_spi; + +	orion_spi = spi_master_get_devdata(spi->master); + +	tclk_hz = orion_spi->spi_info->tclk; + +	/* +	 * the supported rates are: 4,6,8...30 +	 * round up as we look for equal or less speed +	 */ +	rate = DIV_ROUND_UP(tclk_hz, speed); +	rate = roundup(rate, 2); + +	/* check if requested speed is too small */ +	if (rate > 30) +		return -EINVAL; + +	if (rate < 4) +		rate = 4; + +	/* Convert the rate to SPI clock divisor value.	*/ +	prescale = 0x10 + rate/2; + +	reg = readl(spi_reg(orion_spi, ORION_SPI_IF_CONFIG_REG)); +	reg = ((reg & ~ORION_SPI_CLK_PRESCALE_MASK) | prescale); +	writel(reg, spi_reg(orion_spi, ORION_SPI_IF_CONFIG_REG)); + +	return 0; +} + +/* + * called only when no transfer is active on the bus + */ +static int +orion_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t) +{ +	struct orion_spi *orion_spi; +	unsigned int speed = spi->max_speed_hz; +	unsigned int bits_per_word = spi->bits_per_word; +	int	rc; + +	orion_spi = spi_master_get_devdata(spi->master); + +	if ((t != NULL) && t->speed_hz) +		speed = t->speed_hz; + +	if ((t != NULL) && t->bits_per_word) +		bits_per_word = t->bits_per_word; + +	rc = orion_spi_baudrate_set(spi, speed); +	if (rc) +		return rc; + +	return orion_spi_set_transfer_size(orion_spi, bits_per_word); +} + +static void orion_spi_set_cs(struct orion_spi *orion_spi, int enable) +{ +	if (enable) +		orion_spi_setbits(orion_spi, ORION_SPI_IF_CTRL_REG, 0x1); +	else +		orion_spi_clrbits(orion_spi, ORION_SPI_IF_CTRL_REG, 0x1); +} + +static inline int orion_spi_wait_till_ready(struct orion_spi *orion_spi) +{ +	int i; + +	for (i = 0; i < ORION_SPI_WAIT_RDY_MAX_LOOP; i++) { +		if (readl(spi_reg(orion_spi, ORION_SPI_INT_CAUSE_REG))) +			return 1; +		else +			udelay(1); +	} + +	return -1; +} + +static inline int +orion_spi_write_read_8bit(struct spi_device *spi, +			  const u8 **tx_buf, u8 **rx_buf) +{ +	void __iomem *tx_reg, *rx_reg, *int_reg; +	struct orion_spi *orion_spi; + +	orion_spi = spi_master_get_devdata(spi->master); +	tx_reg = spi_reg(orion_spi, ORION_SPI_DATA_OUT_REG); +	rx_reg = spi_reg(orion_spi, ORION_SPI_DATA_IN_REG); +	int_reg = spi_reg(orion_spi, ORION_SPI_INT_CAUSE_REG); + +	/* clear the interrupt cause register */ +	writel(0x0, int_reg); + +	if (tx_buf && *tx_buf) +		writel(*(*tx_buf)++, tx_reg); +	else +		writel(0, tx_reg); + +	if (orion_spi_wait_till_ready(orion_spi) < 0) { +		dev_err(&spi->dev, "TXS timed out\n"); +		return -1; +	} + +	if (rx_buf && *rx_buf) +		*(*rx_buf)++ = readl(rx_reg); + +	return 1; +} + +static inline int +orion_spi_write_read_16bit(struct spi_device *spi, +			   const u16 **tx_buf, u16 **rx_buf) +{ +	void __iomem *tx_reg, *rx_reg, *int_reg; +	struct orion_spi *orion_spi; + +	orion_spi = spi_master_get_devdata(spi->master); +	tx_reg = spi_reg(orion_spi, ORION_SPI_DATA_OUT_REG); +	rx_reg = spi_reg(orion_spi, ORION_SPI_DATA_IN_REG); +	int_reg = spi_reg(orion_spi, ORION_SPI_INT_CAUSE_REG); + +	/* clear the interrupt cause register */ +	writel(0x0, int_reg); + +	if (tx_buf && *tx_buf) +		writel(__cpu_to_le16(get_unaligned((*tx_buf)++)), tx_reg); +	else +		writel(0, tx_reg); + +	if (orion_spi_wait_till_ready(orion_spi) < 0) { +		dev_err(&spi->dev, "TXS timed out\n"); +		return -1; +	} + +	if (rx_buf && *rx_buf) +		put_unaligned(__le16_to_cpu(readl(rx_reg)), (*rx_buf)++); + +	return 1; +} + +static unsigned int +orion_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer) +{ +	struct orion_spi *orion_spi; +	unsigned int count; +	int word_len; + +	orion_spi = spi_master_get_devdata(spi->master); +	word_len = spi->bits_per_word; +	count = xfer->len; + +	if (word_len == 8) { +		const u8 *tx = xfer->tx_buf; +		u8 *rx = xfer->rx_buf; + +		do { +			if (orion_spi_write_read_8bit(spi, &tx, &rx) < 0) +				goto out; +			count--; +		} while (count); +	} else if (word_len == 16) { +		const u16 *tx = xfer->tx_buf; +		u16 *rx = xfer->rx_buf; + +		do { +			if (orion_spi_write_read_16bit(spi, &tx, &rx) < 0) +				goto out; +			count -= 2; +		} while (count); +	} + +out: +	return xfer->len - count; +} + + +static void orion_spi_work(struct work_struct *work) +{ +	struct orion_spi *orion_spi = +		container_of(work, struct orion_spi, work); + +	spin_lock_irq(&orion_spi->lock); +	while (!list_empty(&orion_spi->msg_queue)) { +		struct spi_message *m; +		struct spi_device *spi; +		struct spi_transfer *t = NULL; +		int par_override = 0; +		int status = 0; +		int cs_active = 0; + +		m = container_of(orion_spi->msg_queue.next, struct spi_message, +				 queue); + +		list_del_init(&m->queue); +		spin_unlock_irq(&orion_spi->lock); + +		spi = m->spi; + +		/* Load defaults */ +		status = orion_spi_setup_transfer(spi, NULL); + +		if (status < 0) +			goto msg_done; + +		list_for_each_entry(t, &m->transfers, transfer_list) { +			if (par_override || t->speed_hz || t->bits_per_word) { +				par_override = 1; +				status = orion_spi_setup_transfer(spi, t); +				if (status < 0) +					break; +				if (!t->speed_hz && !t->bits_per_word) +					par_override = 0; +			} + +			if (!cs_active) { +				orion_spi_set_cs(orion_spi, 1); +				cs_active = 1; +			} + +			if (t->len) +				m->actual_length += +					orion_spi_write_read(spi, t); + +			if (t->delay_usecs) +				udelay(t->delay_usecs); + +			if (t->cs_change) { +				orion_spi_set_cs(orion_spi, 0); +				cs_active = 0; +			} +		} + +msg_done: +		if (cs_active) +			orion_spi_set_cs(orion_spi, 0); + +		m->status = status; +		m->complete(m->context); + +		spin_lock_irq(&orion_spi->lock); +	} + +	spin_unlock_irq(&orion_spi->lock); +} + +static int __init orion_spi_reset(struct orion_spi *orion_spi) +{ +	/* Verify that the CS is deasserted */ +	orion_spi_set_cs(orion_spi, 0); + +	return 0; +} + +static int orion_spi_setup(struct spi_device *spi) +{ +	struct orion_spi *orion_spi; + +	orion_spi = spi_master_get_devdata(spi->master); + +	if (spi->mode) { +		dev_err(&spi->dev, "setup: unsupported mode bits %x\n", +			spi->mode); +		return -EINVAL; +	} + +	if (spi->bits_per_word == 0) +		spi->bits_per_word = 8; + +	if ((spi->max_speed_hz == 0) +			|| (spi->max_speed_hz > orion_spi->max_speed)) +		spi->max_speed_hz = orion_spi->max_speed; + +	if (spi->max_speed_hz < orion_spi->min_speed) { +		dev_err(&spi->dev, "setup: requested speed too low %d Hz\n", +			spi->max_speed_hz); +		return -EINVAL; +	} + +	/* +	 * baudrate & width will be set orion_spi_setup_transfer +	 */ +	return 0; +} + +static int orion_spi_transfer(struct spi_device *spi, struct spi_message *m) +{ +	struct orion_spi *orion_spi; +	struct spi_transfer *t = NULL; +	unsigned long flags; + +	m->actual_length = 0; +	m->status = 0; + +	/* reject invalid messages and transfers */ +	if (list_empty(&m->transfers) || !m->complete) +		return -EINVAL; + +	orion_spi = spi_master_get_devdata(spi->master); + +	list_for_each_entry(t, &m->transfers, transfer_list) { +		unsigned int bits_per_word = spi->bits_per_word; + +		if (t->tx_buf == NULL && t->rx_buf == NULL && t->len) { +			dev_err(&spi->dev, +				"message rejected : " +				"invalid transfer data buffers\n"); +			goto msg_rejected; +		} + +		if ((t != NULL) && t->bits_per_word) +			bits_per_word = t->bits_per_word; + +		if ((bits_per_word != 8) && (bits_per_word != 16)) { +			dev_err(&spi->dev, +				"message rejected : " +				"invalid transfer bits_per_word (%d bits)\n", +				bits_per_word); +			goto msg_rejected; +		} +		/*make sure buffer length is even when working in 16 bit mode*/ +		if ((t != NULL) && (t->bits_per_word == 16) && (t->len & 1)) { +			dev_err(&spi->dev, +				"message rejected : " +				"odd data length (%d) while in 16 bit mode\n", +				t->len); +			goto msg_rejected; +		} + +		if (t->speed_hz < orion_spi->min_speed) { +			dev_err(&spi->dev, +				"message rejected : " +				"device min speed (%d Hz) exceeds " +				"required transfer speed (%d Hz)\n", +				orion_spi->min_speed, t->speed_hz); +			goto msg_rejected; +		} +	} + + +	spin_lock_irqsave(&orion_spi->lock, flags); +	list_add_tail(&m->queue, &orion_spi->msg_queue); +	queue_work(orion_spi_wq, &orion_spi->work); +	spin_unlock_irqrestore(&orion_spi->lock, flags); + +	return 0; +msg_rejected: +	/* Message rejected and not queued */ +	m->status = -EINVAL; +	if (m->complete) +		m->complete(m->context); +	return -EINVAL; +} + +static int __init orion_spi_probe(struct platform_device *pdev) +{ +	struct spi_master *master; +	struct orion_spi *spi; +	struct resource *r; +	struct orion_spi_info *spi_info; +	int status = 0; + +	spi_info = pdev->dev.platform_data; + +	master = spi_alloc_master(&pdev->dev, sizeof *spi); +	if (master == NULL) { +		dev_dbg(&pdev->dev, "master allocation failed\n"); +		return -ENOMEM; +	} + +	if (pdev->id != -1) +		master->bus_num = pdev->id; + +	master->setup = orion_spi_setup; +	master->transfer = orion_spi_transfer; +	master->num_chipselect = ORION_NUM_CHIPSELECTS; + +	dev_set_drvdata(&pdev->dev, master); + +	spi = spi_master_get_devdata(master); +	spi->master = master; +	spi->spi_info = spi_info; + +	spi->max_speed = DIV_ROUND_UP(spi_info->tclk, 4); +	spi->min_speed = DIV_ROUND_UP(spi_info->tclk, 30); + +	r = platform_get_resource(pdev, IORESOURCE_MEM, 0); +	if (r == NULL) { +		status = -ENODEV; +		goto out; +	} + +	if (!request_mem_region(r->start, (r->end - r->start) + 1, +				pdev->dev.bus_id)) { +		status = -EBUSY; +		goto out; +	} +	spi->base = ioremap(r->start, SZ_1K); + +	INIT_WORK(&spi->work, orion_spi_work); + +	spin_lock_init(&spi->lock); +	INIT_LIST_HEAD(&spi->msg_queue); + +	if (orion_spi_reset(spi) < 0) +		goto out_rel_mem; + +	status = spi_register_master(master); +	if (status < 0) +		goto out_rel_mem; + +	return status; + +out_rel_mem: +	release_mem_region(r->start, (r->end - r->start) + 1); + +out: +	spi_master_put(master); +	return status; +} + + +static int __exit orion_spi_remove(struct platform_device *pdev) +{ +	struct spi_master *master; +	struct orion_spi *spi; +	struct resource *r; + +	master = dev_get_drvdata(&pdev->dev); +	spi = spi_master_get_devdata(master); + +	cancel_work_sync(&spi->work); + +	r = platform_get_resource(pdev, IORESOURCE_MEM, 0); +	release_mem_region(r->start, (r->end - r->start) + 1); + +	spi_unregister_master(master); + +	return 0; +} + +MODULE_ALIAS("platform:" DRIVER_NAME); + +static struct platform_driver orion_spi_driver = { +	.driver = { +		.name	= DRIVER_NAME, +		.owner	= THIS_MODULE, +	}, +	.remove		= __exit_p(orion_spi_remove), +}; + +static int __init orion_spi_init(void) +{ +	orion_spi_wq = create_singlethread_workqueue( +				orion_spi_driver.driver.name); +	if (orion_spi_wq == NULL) +		return -ENOMEM; + +	return platform_driver_probe(&orion_spi_driver, orion_spi_probe); +} +module_init(orion_spi_init); + +static void __exit orion_spi_exit(void) +{ +	flush_workqueue(orion_spi_wq); +	platform_driver_unregister(&orion_spi_driver); + +	destroy_workqueue(orion_spi_wq); +} +module_exit(orion_spi_exit); + +MODULE_DESCRIPTION("Orion SPI driver"); +MODULE_AUTHOR("Shadi Ammouri <shadi@marvell.com>"); +MODULE_LICENSE("GPL"); diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c index 067299d6d19..70786f57cdc 100644 --- a/drivers/spi/pxa2xx_spi.c +++ b/drivers/spi/pxa2xx_spi.c @@ -31,7 +31,6 @@  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/hardware.h>  #include <asm/delay.h>  #include <asm/dma.h> diff --git a/drivers/spi/spi_imx.c b/drivers/spi/spi_imx.c index 6fb77fcc497..8d7c902c87c 100644 --- a/drivers/spi/spi_imx.c +++ b/drivers/spi/spi_imx.c @@ -33,7 +33,6 @@  #include <asm/io.h>  #include <asm/irq.h> -#include <asm/hardware.h>  #include <asm/delay.h>  #include <asm/arch/hardware.h> diff --git a/drivers/spi/spi_s3c24xx.c b/drivers/spi/spi_s3c24xx.c index 1c643c9e1f1..89da39f02d6 100644 --- a/drivers/spi/spi_s3c24xx.c +++ b/drivers/spi/spi_s3c24xx.c @@ -25,7 +25,7 @@  #include <asm/io.h>  #include <asm/dma.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/regs-gpio.h>  #include <asm/plat-s3c24xx/regs-spi.h> @@ -236,6 +236,19 @@ static irqreturn_t s3c24xx_spi_irq(int irq, void *dev)  	return IRQ_HANDLED;  } +static void s3c24xx_spi_initialsetup(struct s3c24xx_spi *hw) +{ +	/* for the moment, permanently enable the clock */ + +	clk_enable(hw->clk); + +	/* program defaults into the registers */ + +	writeb(0xff, hw->regs + S3C2410_SPPRE); +	writeb(SPPIN_DEFAULT, hw->regs + S3C2410_SPPIN); +	writeb(SPCON_DEFAULT, hw->regs + S3C2410_SPCON); +} +  static int __init s3c24xx_spi_probe(struct platform_device *pdev)  {  	struct s3c2410_spi_info *pdata; @@ -327,15 +340,7 @@ static int __init s3c24xx_spi_probe(struct platform_device *pdev)  		goto err_no_clk;  	} -	/* for the moment, permanently enable the clock */ - -	clk_enable(hw->clk); - -	/* program defaults into the registers */ - -	writeb(0xff, hw->regs + S3C2410_SPPRE); -	writeb(SPPIN_DEFAULT, hw->regs + S3C2410_SPPIN); -	writeb(SPCON_DEFAULT, hw->regs + S3C2410_SPCON); +	s3c24xx_spi_initialsetup(hw);  	/* setup any gpio we can */ @@ -415,7 +420,7 @@ static int s3c24xx_spi_resume(struct platform_device *pdev)  {  	struct s3c24xx_spi *hw = platform_get_drvdata(pdev); -	clk_enable(hw->clk); +	s3c24xx_spi_initialsetup(hw);  	return 0;  } diff --git a/drivers/spi/spi_s3c24xx_gpio.c b/drivers/spi/spi_s3c24xx_gpio.c index e33f6145c56..d44fd0af0da 100644 --- a/drivers/spi/spi_s3c24xx_gpio.c +++ b/drivers/spi/spi_s3c24xx_gpio.c @@ -23,7 +23,7 @@  #include <asm/arch/regs-gpio.h>  #include <asm/arch/spi-gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  struct s3c2410_spigpio {  	struct spi_bitbang		 bitbang; diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c index 2fcc06eb5e6..586d6f1376c 100644 --- a/drivers/usb/core/message.c +++ b/drivers/usb/core/message.c @@ -389,7 +389,6 @@ int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,  	if (io->entries <= 0)  		return io->entries; -	io->count = io->entries;  	io->urbs = kmalloc(io->entries * sizeof *io->urbs, mem_flags);  	if (!io->urbs)  		goto nomem; @@ -458,6 +457,7 @@ int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,  	io->urbs[--i]->transfer_flags &= ~URB_NO_INTERRUPT;  	/* transaction state */ +	io->count = io->entries;  	io->status = 0;  	io->bytes = 0;  	init_completion(&io->complete); diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index e2d8a5d86c4..5b935e9ebf9 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c @@ -40,11 +40,10 @@  #include <linux/usb/gadget.h>  #include <asm/byteorder.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/system.h> -#include <asm/mach-types.h>  #include <asm/gpio.h>  #include <asm/arch/board.h> diff --git a/drivers/usb/gadget/lh7a40x_udc.h b/drivers/usb/gadget/lh7a40x_udc.h index 1ecfd6366b9..fd43b90df03 100644 --- a/drivers/usb/gadget/lh7a40x_udc.h +++ b/drivers/usb/gadget/lh7a40x_udc.h @@ -47,7 +47,7 @@  #include <asm/irq.h>  #include <asm/system.h>  #include <asm/unaligned.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <linux/usb/ch9.h>  #include <linux/usb/gadget.h> diff --git a/drivers/usb/gadget/pxa27x_udc.c b/drivers/usb/gadget/pxa27x_udc.c index 9d447d8cfc0..06c81a3c927 100644 --- a/drivers/usb/gadget/pxa27x_udc.c +++ b/drivers/usb/gadget/pxa27x_udc.c @@ -33,7 +33,7 @@  #include <linux/irq.h>  #include <asm/byteorder.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <linux/usb.h>  #include <linux/usb/ch9.h> diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c index 6b1ef488043..021955a5772 100644 --- a/drivers/usb/gadget/s3c2410_udc.c +++ b/drivers/usb/gadget/s3c2410_udc.c @@ -57,7 +57,6 @@  #include <asm/plat-s3c24xx/regs-udc.h>  #include <asm/plat-s3c24xx/udc.h> -#include <asm/mach-types.h>  #include "s3c2410_udc.h" diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c index a5d8e550d89..389a8f1bbc6 100644 --- a/drivers/usb/host/ohci-at91.c +++ b/drivers/usb/host/ohci-at91.c @@ -15,8 +15,7 @@  #include <linux/clk.h>  #include <linux/platform_device.h> -#include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/gpio.h>  #include <asm/arch/board.h> diff --git a/drivers/usb/host/ohci-ep93xx.c b/drivers/usb/host/ohci-ep93xx.c index 5adaf36e47d..4d628a9c6d8 100644 --- a/drivers/usb/host/ohci-ep93xx.c +++ b/drivers/usb/host/ohci-ep93xx.c @@ -28,8 +28,7 @@  #include <linux/signal.h>  #include <linux/platform_device.h> -#include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static struct clk *usb_host_clock; diff --git a/drivers/usb/host/ohci-lh7a404.c b/drivers/usb/host/ohci-lh7a404.c index 1ef5d482c14..020769b6943 100644 --- a/drivers/usb/host/ohci-lh7a404.c +++ b/drivers/usb/host/ohci-lh7a404.c @@ -19,7 +19,7 @@  #include <linux/platform_device.h>  #include <linux/signal.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  extern int usb_disabled(void); diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c index 6e5e5f81ac9..9b7e9102fb9 100644 --- a/drivers/usb/host/ohci-omap.c +++ b/drivers/usb/host/ohci-omap.c @@ -19,7 +19,7 @@  #include <linux/platform_device.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach-types.h> diff --git a/drivers/usb/host/ohci-pnx4008.c b/drivers/usb/host/ohci-pnx4008.c index 6ad8f2fc57b..ff4d928eb11 100644 --- a/drivers/usb/host/ohci-pnx4008.c +++ b/drivers/usb/host/ohci-pnx4008.c @@ -21,9 +21,8 @@  #include <linux/platform_device.h>  #include <linux/i2c.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h> -#include <asm/mach-types.h>  #include <asm/arch/platform.h>  #include <asm/arch/irqs.h> diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c index 127b1579902..3eb2c28e608 100644 --- a/drivers/usb/host/ohci-pxa27x.c +++ b/drivers/usb/host/ohci-pxa27x.c @@ -24,8 +24,7 @@  #include <linux/platform_device.h>  #include <linux/clk.h> -#include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/pxa2xx-regs.h> /* FIXME: for PSSR */  #include <asm/arch/ohci.h> diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c index 3c7a740cfe0..358100c8dfa 100644 --- a/drivers/usb/host/ohci-s3c2410.c +++ b/drivers/usb/host/ohci-s3c2410.c @@ -22,7 +22,7 @@  #include <linux/platform_device.h>  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/usb-control.h>  #define valid_port(idx) ((idx) == 1 || (idx) == 2) diff --git a/drivers/usb/host/ohci-sa1111.c b/drivers/usb/host/ohci-sa1111.c index 2e9dceb9bb9..a3a8fea6d36 100644 --- a/drivers/usb/host/ohci-sa1111.c +++ b/drivers/usb/host/ohci-sa1111.c @@ -13,7 +13,7 @@   * This file is licenced under the GPL.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/arch/assabet.h>  #include <asm/arch/badge4.h> diff --git a/drivers/usb/storage/freecom.c b/drivers/usb/storage/freecom.c index 7a4d4567722..73ac7262239 100644 --- a/drivers/usb/storage/freecom.c +++ b/drivers/usb/storage/freecom.c @@ -26,8 +26,6 @@   * (http://www.freecom.de/)   */ -#include <linux/hdreg.h> -  #include <scsi/scsi.h>  #include <scsi/scsi_cmnd.h> diff --git a/drivers/video/acornfb.c b/drivers/video/acornfb.c index 017233d0c48..bad26c65d9b 100644 --- a/drivers/video/acornfb.c +++ b/drivers/video/acornfb.c @@ -29,7 +29,7 @@  #include <linux/platform_device.h>  #include <linux/dma-mapping.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/mach-types.h> diff --git a/drivers/video/arkfb.c b/drivers/video/arkfb.c index 38a1e8308c8..4bd569e479a 100644 --- a/drivers/video/arkfb.c +++ b/drivers/video/arkfb.c @@ -958,20 +958,20 @@ static int __devinit ark_pci_probe(struct pci_dev *dev, const struct pci_device_  	/* Prepare PCI device */  	rc = pci_enable_device(dev);  	if (rc < 0) { -		dev_err(info->dev, "cannot enable PCI device\n"); +		dev_err(info->device, "cannot enable PCI device\n");  		goto err_enable_device;  	}  	rc = pci_request_regions(dev, "arkfb");  	if (rc < 0) { -		dev_err(info->dev, "cannot reserve framebuffer region\n"); +		dev_err(info->device, "cannot reserve framebuffer region\n");  		goto err_request_regions;  	}  	par->dac = ics5342_init(ark_dac_read_regs, ark_dac_write_regs, info);  	if (! par->dac) {  		rc = -ENOMEM; -		dev_err(info->dev, "RAMDAC initialization failed\n"); +		dev_err(info->device, "RAMDAC initialization failed\n");  		goto err_dac;  	} @@ -982,7 +982,7 @@ static int __devinit ark_pci_probe(struct pci_dev *dev, const struct pci_device_  	info->screen_base = pci_iomap(dev, 0, 0);  	if (! info->screen_base) {  		rc = -ENOMEM; -		dev_err(info->dev, "iomap for framebuffer failed\n"); +		dev_err(info->device, "iomap for framebuffer failed\n");  		goto err_iomap;  	} @@ -1004,19 +1004,19 @@ static int __devinit ark_pci_probe(struct pci_dev *dev, const struct pci_device_  	rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8);  	if (! ((rc == 1) || (rc == 2))) {  		rc = -EINVAL; -		dev_err(info->dev, "mode %s not found\n", mode_option); +		dev_err(info->device, "mode %s not found\n", mode_option);  		goto err_find_mode;  	}  	rc = fb_alloc_cmap(&info->cmap, 256, 0);  	if (rc < 0) { -		dev_err(info->dev, "cannot allocate colormap\n"); +		dev_err(info->device, "cannot allocate colormap\n");  		goto err_alloc_cmap;  	}  	rc = register_framebuffer(info);  	if (rc < 0) { -		dev_err(info->dev, "cannot register framebugger\n"); +		dev_err(info->device, "cannot register framebugger\n");  		goto err_reg_fb;  	} @@ -1090,7 +1090,7 @@ static int ark_pci_suspend (struct pci_dev* dev, pm_message_t state)  	struct fb_info *info = pci_get_drvdata(dev);  	struct arkfb_info *par = info->par; -	dev_info(info->dev, "suspend\n"); +	dev_info(info->device, "suspend\n");  	acquire_console_sem();  	mutex_lock(&(par->open_lock)); @@ -1121,7 +1121,7 @@ static int ark_pci_resume (struct pci_dev* dev)  	struct fb_info *info = pci_get_drvdata(dev);  	struct arkfb_info *par = info->par; -	dev_info(info->dev, "resume\n"); +	dev_info(info->device, "resume\n");  	acquire_console_sem();  	mutex_lock(&(par->open_lock)); diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c index 620ba812036..cc6b470073d 100644 --- a/drivers/video/aty/atyfb_base.c +++ b/drivers/video/aty/atyfb_base.c @@ -244,7 +244,7 @@ static int atyfb_sync(struct fb_info *info);       */  static int aty_init(struct fb_info *info); -static void aty_resume_chip(struct fb_info *info); +  #ifdef CONFIG_ATARI  static int store_video_par(char *videopar, unsigned char m64_num);  #endif @@ -2023,6 +2023,20 @@ static int atyfb_pci_suspend(struct pci_dev *pdev, pm_message_t state)  	return 0;  } +static void aty_resume_chip(struct fb_info *info) +{ +	struct atyfb_par *par = info->par; + +	aty_st_le32(MEM_CNTL, par->mem_cntl, par); + +	if (par->pll_ops->resume_pll) +		par->pll_ops->resume_pll(info, &par->pll); + +	if (par->aux_start) +		aty_st_le32(BUS_CNTL, +			aty_ld_le32(BUS_CNTL, par) | BUS_APER_REG_DIS, par); +} +  static int atyfb_pci_resume(struct pci_dev *pdev)  {  	struct fb_info *info = pci_get_drvdata(pdev); @@ -2659,19 +2673,6 @@ aty_init_exit:  	return ret;  } -static void aty_resume_chip(struct fb_info *info) -{ -	struct atyfb_par *par = info->par; - -	aty_st_le32(MEM_CNTL, par->mem_cntl, par); - -	if (par->pll_ops->resume_pll) -		par->pll_ops->resume_pll(info, &par->pll); - -	if (par->aux_start) -		aty_st_le32(BUS_CNTL, aty_ld_le32(BUS_CNTL, par) | BUS_APER_REG_DIS, par); -} -  #ifdef CONFIG_ATARI  static int __devinit store_video_par(char *video_str, unsigned char m64_num)  { diff --git a/drivers/video/aty/radeon_accel.c b/drivers/video/aty/radeon_accel.c index 3ca27cb13ca..4d13f68436e 100644 --- a/drivers/video/aty/radeon_accel.c +++ b/drivers/video/aty/radeon_accel.c @@ -241,8 +241,8 @@ void radeonfb_engine_reset(struct radeonfb_info *rinfo)  	INREG(HOST_PATH_CNTL);  	OUTREG(HOST_PATH_CNTL, host_path_cntl); -	if (rinfo->family != CHIP_FAMILY_R300 || -	    rinfo->family != CHIP_FAMILY_R350 || +	if (rinfo->family != CHIP_FAMILY_R300 && +	    rinfo->family != CHIP_FAMILY_R350 &&  	    rinfo->family != CHIP_FAMILY_RV350)  		OUTREG(RBBM_SOFT_RESET, rbbm_soft_reset); diff --git a/drivers/video/aty/radeon_i2c.c b/drivers/video/aty/radeon_i2c.c index f9e7c29ad9b..8c8fa35f1b7 100644 --- a/drivers/video/aty/radeon_i2c.c +++ b/drivers/video/aty/radeon_i2c.c @@ -69,7 +69,8 @@ static int radeon_setup_i2c_bus(struct radeon_i2c_chan *chan, const char *name)  {  	int rc; -	strcpy(chan->adapter.name, name); +	snprintf(chan->adapter.name, sizeof(chan->adapter.name), +		 "radeonfb %s", name);  	chan->adapter.owner		= THIS_MODULE;  	chan->adapter.id		= I2C_HW_B_RADEON;  	chan->adapter.algo_data		= &chan->algo; diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c index 6338d0e2fe0..ea07258565f 100644 --- a/drivers/video/backlight/pwm_bl.c +++ b/drivers/video/backlight/pwm_bl.c @@ -68,8 +68,10 @@ static int pwm_backlight_probe(struct platform_device *pdev)  	struct pwm_bl_data *pb;  	int ret; -	if (!data) +	if (!data) { +		dev_err(&pdev->dev, "failed to find platform data\n");  		return -EINVAL; +	}  	if (data->init) {  		ret = data->init(&pdev->dev); @@ -79,6 +81,7 @@ static int pwm_backlight_probe(struct platform_device *pdev)  	pb = kzalloc(sizeof(*pb), GFP_KERNEL);  	if (!pb) { +		dev_err(&pdev->dev, "no memory for state\n");  		ret = -ENOMEM;  		goto err_alloc;  	} @@ -91,7 +94,8 @@ static int pwm_backlight_probe(struct platform_device *pdev)  		dev_err(&pdev->dev, "unable to request PWM for backlight\n");  		ret = PTR_ERR(pb->pwm);  		goto err_pwm; -	} +	} else +		dev_dbg(&pdev->dev, "got pwm for backlight\n");  	bl = backlight_device_register(pdev->name, &pdev->dev,  			pb, &pwm_backlight_ops); @@ -183,3 +187,5 @@ module_exit(pwm_backlight_exit);  MODULE_DESCRIPTION("PWM based Backlight Driver");  MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:pwm-backlight"); + diff --git a/drivers/video/clps711xfb.c b/drivers/video/clps711xfb.c index 9f8a389dc7a..3701caa367e 100644 --- a/drivers/video/clps711xfb.c +++ b/drivers/video/clps711xfb.c @@ -27,7 +27,7 @@  #include <linux/proc_fs.h>  #include <linux/delay.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <linux/uaccess.h> diff --git a/drivers/video/console/.gitignore b/drivers/video/console/.gitignore new file mode 100644 index 00000000000..0c258b45439 --- /dev/null +++ b/drivers/video/console/.gitignore @@ -0,0 +1,2 @@ +# conmakehash generated file +promcon_tbl.c diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 3ccfa76d9b2..33859934a8e 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c @@ -1311,6 +1311,9 @@ static void fbcon_clear(struct vc_data *vc, int sy, int sx, int height,  	if (!height || !width)  		return; +	if (sy < vc->vc_top && vc->vc_top == logo_lines) +		vc->vc_top = 0; +  	/* Split blits that cross physical y_wrap boundary */  	y_break = p->vrows - p->yscroll; diff --git a/drivers/video/fsl-diu-fb.c b/drivers/video/fsl-diu-fb.c index 9cd36c223d3..bd320a2bfb7 100644 --- a/drivers/video/fsl-diu-fb.c +++ b/drivers/video/fsl-diu-fb.c @@ -1649,8 +1649,10 @@ static int __init fsl_diu_init(void)  	}  	prop = of_get_property(np, "d-cache-size", NULL); -	if (prop == NULL) +	if (prop == NULL) { +		of_node_put(np);  		return -ENODEV; +	}  	/* Freescale PLRU requires 13/8 times the cache size to do a proper  	   displacement flush @@ -1659,8 +1661,10 @@ static int __init fsl_diu_init(void)  	coherence_data_size /= 8;  	prop = of_get_property(np, "d-cache-line-size", NULL); -	if (prop == NULL) +	if (prop == NULL) { +		of_node_put(np);  		return -ENODEV; +	}  	d_cache_line_size = *prop;  	of_node_put(np); diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index 0c5a475c1ca..d28879fd3a2 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c @@ -33,7 +33,7 @@  #include <linux/platform_device.h>  #include <linux/dma-mapping.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/imxfb.h> diff --git a/drivers/video/omap/omapfb_main.c b/drivers/video/omap/omapfb_main.c index f85af5c4fa6..d9abc48a210 100644 --- a/drivers/video/omap/omapfb_main.c +++ b/drivers/video/omap/omapfb_main.c @@ -28,7 +28,6 @@  #include <linux/mm.h>  #include <linux/uaccess.h> -#include <asm/mach-types.h>  #include <asm/arch/dma.h>  #include <asm/arch/omapfb.h> diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c index 69de2fed6c5..3169ea4831e 100644 --- a/drivers/video/pxafb.c +++ b/drivers/video/pxafb.c @@ -45,7 +45,7 @@  #include <linux/kthread.h>  #include <linux/freezer.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/irq.h>  #include <asm/div64.h> diff --git a/drivers/video/s3fb.c b/drivers/video/s3fb.c index 2972f112dbe..8361bd0e3df 100644 --- a/drivers/video/s3fb.c +++ b/drivers/video/s3fb.c @@ -903,13 +903,13 @@ static int __devinit s3_pci_probe(struct pci_dev *dev, const struct pci_device_i  	/* Prepare PCI device */  	rc = pci_enable_device(dev);  	if (rc < 0) { -		dev_err(info->dev, "cannot enable PCI device\n"); +		dev_err(info->device, "cannot enable PCI device\n");  		goto err_enable_device;  	}  	rc = pci_request_regions(dev, "s3fb");  	if (rc < 0) { -		dev_err(info->dev, "cannot reserve framebuffer region\n"); +		dev_err(info->device, "cannot reserve framebuffer region\n");  		goto err_request_regions;  	} @@ -921,7 +921,7 @@ static int __devinit s3_pci_probe(struct pci_dev *dev, const struct pci_device_i  	info->screen_base = pci_iomap(dev, 0, 0);  	if (! info->screen_base) {  		rc = -ENOMEM; -		dev_err(info->dev, "iomap for framebuffer failed\n"); +		dev_err(info->device, "iomap for framebuffer failed\n");  		goto err_iomap;  	} @@ -965,19 +965,19 @@ static int __devinit s3_pci_probe(struct pci_dev *dev, const struct pci_device_i  	rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8);  	if (! ((rc == 1) || (rc == 2))) {  		rc = -EINVAL; -		dev_err(info->dev, "mode %s not found\n", mode_option); +		dev_err(info->device, "mode %s not found\n", mode_option);  		goto err_find_mode;  	}  	rc = fb_alloc_cmap(&info->cmap, 256, 0);  	if (rc < 0) { -		dev_err(info->dev, "cannot allocate colormap\n"); +		dev_err(info->device, "cannot allocate colormap\n");  		goto err_alloc_cmap;  	}  	rc = register_framebuffer(info);  	if (rc < 0) { -		dev_err(info->dev, "cannot register framebuffer\n"); +		dev_err(info->device, "cannot register framebuffer\n");  		goto err_reg_fb;  	} @@ -1053,7 +1053,7 @@ static int s3_pci_suspend(struct pci_dev* dev, pm_message_t state)  	struct fb_info *info = pci_get_drvdata(dev);  	struct s3fb_info *par = info->par; -	dev_info(info->dev, "suspend\n"); +	dev_info(info->device, "suspend\n");  	acquire_console_sem();  	mutex_lock(&(par->open_lock)); @@ -1085,7 +1085,7 @@ static int s3_pci_resume(struct pci_dev* dev)  	struct s3fb_info *par = info->par;  	int err; -	dev_info(info->dev, "resume\n"); +	dev_info(info->device, "resume\n");  	acquire_console_sem();  	mutex_lock(&(par->open_lock)); @@ -1102,7 +1102,7 @@ static int s3_pci_resume(struct pci_dev* dev)  	if (err) {  		mutex_unlock(&(par->open_lock));  		release_console_sem(); -		dev_err(info->dev, "error %d enabling device for resume\n", err); +		dev_err(info->device, "error %d enabling device for resume\n", err);  		return err;  	}  	pci_set_master(dev); diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c index 78bcdbc3f48..8fbcce6d069 100644 --- a/drivers/video/sa1100fb.c +++ b/drivers/video/sa1100fb.c @@ -177,7 +177,7 @@  #include <linux/dma-mapping.h>  #include <linux/mutex.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/mach-types.h>  #include <asm/arch/assabet.h> diff --git a/drivers/video/vt8623fb.c b/drivers/video/vt8623fb.c index 4a484ee98f8..34aae7a2a62 100644 --- a/drivers/video/vt8623fb.c +++ b/drivers/video/vt8623fb.c @@ -677,13 +677,13 @@ static int __devinit vt8623_pci_probe(struct pci_dev *dev, const struct pci_devi  	rc = pci_enable_device(dev);  	if (rc < 0) { -		dev_err(info->dev, "cannot enable PCI device\n"); +		dev_err(info->device, "cannot enable PCI device\n");  		goto err_enable_device;  	}  	rc = pci_request_regions(dev, "vt8623fb");  	if (rc < 0) { -		dev_err(info->dev, "cannot reserve framebuffer region\n"); +		dev_err(info->device, "cannot reserve framebuffer region\n");  		goto err_request_regions;  	} @@ -696,14 +696,14 @@ static int __devinit vt8623_pci_probe(struct pci_dev *dev, const struct pci_devi  	info->screen_base = pci_iomap(dev, 0, 0);  	if (! info->screen_base) {  		rc = -ENOMEM; -		dev_err(info->dev, "iomap for framebuffer failed\n"); +		dev_err(info->device, "iomap for framebuffer failed\n");  		goto err_iomap_1;  	}  	par->mmio_base = pci_iomap(dev, 1, 0);  	if (! par->mmio_base) {  		rc = -ENOMEM; -		dev_err(info->dev, "iomap for MMIO failed\n"); +		dev_err(info->device, "iomap for MMIO failed\n");  		goto err_iomap_2;  	} @@ -714,7 +714,7 @@ static int __devinit vt8623_pci_probe(struct pci_dev *dev, const struct pci_devi  	if ((16 <= memsize1) && (memsize1 <= 64) && (memsize1 == memsize2))  		info->screen_size = memsize1 << 20;  	else { -		dev_err(info->dev, "memory size detection failed (%x %x), suppose 16 MB\n", memsize1, memsize2); +		dev_err(info->device, "memory size detection failed (%x %x), suppose 16 MB\n", memsize1, memsize2);  		info->screen_size = 16 << 20;  	} @@ -731,19 +731,19 @@ static int __devinit vt8623_pci_probe(struct pci_dev *dev, const struct pci_devi  	rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8);  	if (! ((rc == 1) || (rc == 2))) {  		rc = -EINVAL; -		dev_err(info->dev, "mode %s not found\n", mode_option); +		dev_err(info->device, "mode %s not found\n", mode_option);  		goto err_find_mode;  	}  	rc = fb_alloc_cmap(&info->cmap, 256, 0);  	if (rc < 0) { -		dev_err(info->dev, "cannot allocate colormap\n"); +		dev_err(info->device, "cannot allocate colormap\n");  		goto err_alloc_cmap;  	}  	rc = register_framebuffer(info);  	if (rc < 0) { -		dev_err(info->dev, "cannot register framebugger\n"); +		dev_err(info->device, "cannot register framebugger\n");  		goto err_reg_fb;  	} @@ -817,7 +817,7 @@ static int vt8623_pci_suspend(struct pci_dev* dev, pm_message_t state)  	struct fb_info *info = pci_get_drvdata(dev);  	struct vt8623fb_info *par = info->par; -	dev_info(info->dev, "suspend\n"); +	dev_info(info->device, "suspend\n");  	acquire_console_sem();  	mutex_lock(&(par->open_lock)); @@ -848,7 +848,7 @@ static int vt8623_pci_resume(struct pci_dev* dev)  	struct fb_info *info = pci_get_drvdata(dev);  	struct vt8623fb_info *par = info->par; -	dev_info(info->dev, "resume\n"); +	dev_info(info->device, "resume\n");  	acquire_console_sem();  	mutex_lock(&(par->open_lock)); diff --git a/drivers/watchdog/ar7_wdt.c b/drivers/watchdog/ar7_wdt.c index 2eb48c0df32..ef7b0d67095 100644 --- a/drivers/watchdog/ar7_wdt.c +++ b/drivers/watchdog/ar7_wdt.c @@ -69,7 +69,8 @@ struct ar7_wdt {  	u32 prescale;  }; -static struct semaphore open_semaphore; +static unsigned long wdt_is_open; +static spinlock_t wdt_lock;  static unsigned expect_close;  /* XXX currently fixed, allows max margin ~68.72 secs */ @@ -154,8 +155,10 @@ static void ar7_wdt_update_margin(int new_margin)  	u32 change;  	change = new_margin * (ar7_vbus_freq() / prescale_value); -	if (change < 1) change = 1; -	if (change > 0xffff) change = 0xffff; +	if (change < 1) +		change = 1; +	if (change > 0xffff) +		change = 0xffff;  	ar7_wdt_change(change);  	margin = change * prescale_value / ar7_vbus_freq();  	printk(KERN_INFO DRVNAME @@ -179,7 +182,7 @@ static void ar7_wdt_disable_wdt(void)  static int ar7_wdt_open(struct inode *inode, struct file *file)  {  	/* only allow one at a time */ -	if (down_trylock(&open_semaphore)) +	if (test_and_set_bit(0, &wdt_is_open))  		return -EBUSY;  	ar7_wdt_enable_wdt();  	expect_close = 0; @@ -195,9 +198,7 @@ static int ar7_wdt_release(struct inode *inode, struct file *file)  		"will not disable the watchdog timer\n");  	else if (!nowayout)  		ar7_wdt_disable_wdt(); - -	up(&open_semaphore); - +	clear_bit(0, &wdt_is_open);  	return 0;  } @@ -222,7 +223,9 @@ static ssize_t ar7_wdt_write(struct file *file, const char *data,  	if (len) {  		size_t i; +		spin_lock(&wdt_lock);  		ar7_wdt_kick(1); +		spin_unlock(&wdt_lock);  		expect_close = 0;  		for (i = 0; i < len; ++i) { @@ -237,8 +240,8 @@ static ssize_t ar7_wdt_write(struct file *file, const char *data,  	return len;  } -static int ar7_wdt_ioctl(struct inode *inode, struct file *file, -			 unsigned int cmd, unsigned long arg) +static long ar7_wdt_ioctl(struct file *file, +					unsigned int cmd, unsigned long arg)  {  	static struct watchdog_info ident = {  		.identity = LONGNAME, @@ -269,8 +272,10 @@ static int ar7_wdt_ioctl(struct inode *inode, struct file *file,  		if (new_margin < 1)  			return -EINVAL; +		spin_lock(&wdt_lock);  		ar7_wdt_update_margin(new_margin);  		ar7_wdt_kick(1); +		spin_unlock(&wdt_lock);  	case WDIOC_GETTIMEOUT:  		if (put_user(margin, (int *)arg)) @@ -282,7 +287,7 @@ static int ar7_wdt_ioctl(struct inode *inode, struct file *file,  static const struct file_operations ar7_wdt_fops = {  	.owner		= THIS_MODULE,  	.write		= ar7_wdt_write, -	.ioctl		= ar7_wdt_ioctl, +	.unlocked_ioctl	= ar7_wdt_ioctl,  	.open		= ar7_wdt_open,  	.release	= ar7_wdt_release,  }; @@ -297,6 +302,8 @@ static int __init ar7_wdt_init(void)  {  	int rc; +	spin_lock_init(&wdt_lock); +  	ar7_wdt_get_regs();  	if (!request_mem_region(ar7_regs_wdt, sizeof(struct ar7_wdt), @@ -312,8 +319,6 @@ static int __init ar7_wdt_init(void)  	ar7_wdt_prescale(prescale_value);  	ar7_wdt_update_margin(margin); -	sema_init(&open_semaphore, 1); -  	rc = register_reboot_notifier(&ar7_wdt_notifier);  	if (rc) {  		printk(KERN_ERR DRVNAME diff --git a/drivers/watchdog/davinci_wdt.c b/drivers/watchdog/davinci_wdt.c index 1782c79eff0..2ec36e0d8cf 100644 --- a/drivers/watchdog/davinci_wdt.c +++ b/drivers/watchdog/davinci_wdt.c @@ -23,7 +23,7 @@  #include <linux/platform_device.h>  #include <linux/spinlock.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/uaccess.h>  #include <asm/io.h> diff --git a/drivers/watchdog/ep93xx_wdt.c b/drivers/watchdog/ep93xx_wdt.c index 0e4787a0bb8..7476844dbac 100644 --- a/drivers/watchdog/ep93xx_wdt.c +++ b/drivers/watchdog/ep93xx_wdt.c @@ -29,7 +29,7 @@  #include <linux/watchdog.h>  #include <linux/timer.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/uaccess.h>  #define WDT_VERSION	"0.3" diff --git a/drivers/watchdog/iop_wdt.c b/drivers/watchdog/iop_wdt.c index bbbd91af754..d37146f11e4 100644 --- a/drivers/watchdog/iop_wdt.c +++ b/drivers/watchdog/iop_wdt.c @@ -32,7 +32,7 @@  #include <linux/miscdevice.h>  #include <linux/watchdog.h>  #include <linux/uaccess.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static int nowayout = WATCHDOG_NOWAYOUT;  static unsigned long wdt_status; diff --git a/drivers/watchdog/it8712f_wdt.c b/drivers/watchdog/it8712f_wdt.c index 445b7e81211..51bfd572183 100644 --- a/drivers/watchdog/it8712f_wdt.c +++ b/drivers/watchdog/it8712f_wdt.c @@ -30,9 +30,8 @@  #include <linux/fs.h>  #include <linux/pci.h>  #include <linux/spinlock.h> - -#include <asm/uaccess.h> -#include <asm/io.h> +#include <linux/uaccess.h> +#include <linux/io.h>  #define NAME "it8712f_wdt" @@ -50,7 +49,7 @@ static int nowayout = WATCHDOG_NOWAYOUT;  module_param(nowayout, int, 0);  MODULE_PARM_DESC(nowayout, "Disable watchdog shutdown on close"); -static struct semaphore it8712f_wdt_sem; +static unsigned long wdt_open;  static unsigned expect_close;  static spinlock_t io_lock;  static unsigned char revision; @@ -86,22 +85,19 @@ static unsigned short address;  #define WDT_OUT_PWROK	0x10  #define WDT_OUT_KRST	0x40 -static int -superio_inb(int reg) +static int superio_inb(int reg)  {  	outb(reg, REG);  	return inb(VAL);  } -static void -superio_outb(int val, int reg) +static void superio_outb(int val, int reg)  {  	outb(reg, REG);  	outb(val, VAL);  } -static int -superio_inw(int reg) +static int superio_inw(int reg)  {  	int val;  	outb(reg++, REG); @@ -111,15 +107,13 @@ superio_inw(int reg)  	return val;  } -static inline void -superio_select(int ldn) +static inline void superio_select(int ldn)  {  	outb(LDN, REG);  	outb(ldn, VAL);  } -static inline void -superio_enter(void) +static inline void superio_enter(void)  {  	spin_lock(&io_lock);  	outb(0x87, REG); @@ -128,22 +122,19 @@ superio_enter(void)  	outb(0x55, REG);  } -static inline void -superio_exit(void) +static inline void superio_exit(void)  {  	outb(0x02, REG);  	outb(0x02, VAL);  	spin_unlock(&io_lock);  } -static inline void -it8712f_wdt_ping(void) +static inline void it8712f_wdt_ping(void)  {  	inb(address);  } -static void -it8712f_wdt_update_margin(void) +static void it8712f_wdt_update_margin(void)  {  	int config = WDT_OUT_KRST | WDT_OUT_PWROK;  	int units = margin; @@ -165,8 +156,7 @@ it8712f_wdt_update_margin(void)  	superio_outb(units, WDT_TIMEOUT);  } -static int -it8712f_wdt_get_status(void) +static int it8712f_wdt_get_status(void)  {  	if (superio_inb(WDT_CONTROL) & 0x01)  		return WDIOF_CARDRESET; @@ -174,8 +164,7 @@ it8712f_wdt_get_status(void)  		return 0;  } -static void -it8712f_wdt_enable(void) +static void it8712f_wdt_enable(void)  {  	printk(KERN_DEBUG NAME ": enabling watchdog timer\n");  	superio_enter(); @@ -190,8 +179,7 @@ it8712f_wdt_enable(void)  	it8712f_wdt_ping();  } -static void -it8712f_wdt_disable(void) +static void it8712f_wdt_disable(void)  {  	printk(KERN_DEBUG NAME ": disabling watchdog timer\n"); @@ -207,8 +195,7 @@ it8712f_wdt_disable(void)  	superio_exit();  } -static int -it8712f_wdt_notify(struct notifier_block *this, +static int it8712f_wdt_notify(struct notifier_block *this,  		    unsigned long code, void *unused)  {  	if (code == SYS_HALT || code == SYS_POWER_OFF) @@ -222,9 +209,8 @@ static struct notifier_block it8712f_wdt_notifier = {  	.notifier_call = it8712f_wdt_notify,  }; -static ssize_t -it8712f_wdt_write(struct file *file, const char __user *data, -	size_t len, loff_t *ppos) +static ssize_t it8712f_wdt_write(struct file *file, const char __user *data, +					size_t len, loff_t *ppos)  {  	/* check for a magic close character */  	if (len) { @@ -245,9 +231,8 @@ it8712f_wdt_write(struct file *file, const char __user *data,  	return len;  } -static int -it8712f_wdt_ioctl(struct inode *inode, struct file *file, -	unsigned int cmd, unsigned long arg) +static long it8712f_wdt_ioctl(struct file *file, unsigned int cmd, +							unsigned long arg)  {  	void __user *argp = (void __user *)arg;  	int __user *p = argp; @@ -302,19 +287,16 @@ it8712f_wdt_ioctl(struct inode *inode, struct file *file,  	}  } -static int -it8712f_wdt_open(struct inode *inode, struct file *file) +static int it8712f_wdt_open(struct inode *inode, struct file *file)  {  	/* only allow one at a time */ -	if (down_trylock(&it8712f_wdt_sem)) +	if (test_and_set_bit(0, &wdt_open))  		return -EBUSY;  	it8712f_wdt_enable(); -  	return nonseekable_open(inode, file);  } -static int -it8712f_wdt_release(struct inode *inode, struct file *file) +static int it8712f_wdt_release(struct inode *inode, struct file *file)  {  	if (expect_close != 42) {  		printk(KERN_WARNING NAME @@ -324,7 +306,7 @@ it8712f_wdt_release(struct inode *inode, struct file *file)  		it8712f_wdt_disable();  	}  	expect_close = 0; -	up(&it8712f_wdt_sem); +	clear_bit(0, &wdt_open);  	return 0;  } @@ -333,7 +315,7 @@ static const struct file_operations it8712f_wdt_fops = {  	.owner = THIS_MODULE,  	.llseek = no_llseek,  	.write = it8712f_wdt_write, -	.ioctl = it8712f_wdt_ioctl, +	.unlocked_ioctl = it8712f_wdt_ioctl,  	.open = it8712f_wdt_open,  	.release = it8712f_wdt_release,  }; @@ -344,8 +326,7 @@ static struct miscdevice it8712f_wdt_miscdev = {  	.fops = &it8712f_wdt_fops,  }; -static int __init -it8712f_wdt_find(unsigned short *address) +static int __init it8712f_wdt_find(unsigned short *address)  {  	int err = -ENODEV;  	int chip_type; @@ -387,8 +368,7 @@ exit:  	return err;  } -static int __init -it8712f_wdt_init(void) +static int __init it8712f_wdt_init(void)  {  	int err = 0; @@ -404,8 +384,6 @@ it8712f_wdt_init(void)  	it8712f_wdt_disable(); -	sema_init(&it8712f_wdt_sem, 1); -  	err = register_reboot_notifier(&it8712f_wdt_notifier);  	if (err) {  		printk(KERN_ERR NAME ": unable to register reboot notifier\n"); @@ -430,8 +408,7 @@ out:  	return err;  } -static void __exit -it8712f_wdt_exit(void) +static void __exit it8712f_wdt_exit(void)  {  	misc_deregister(&it8712f_wdt_miscdev);  	unregister_reboot_notifier(&it8712f_wdt_notifier); diff --git a/drivers/watchdog/ixp2000_wdt.c b/drivers/watchdog/ixp2000_wdt.c index dc7548dcaf3..884c2b435be 100644 --- a/drivers/watchdog/ixp2000_wdt.c +++ b/drivers/watchdog/ixp2000_wdt.c @@ -26,7 +26,7 @@  #include <linux/init.h>  #include <linux/bitops.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/uaccess.h>  static int nowayout = WATCHDOG_NOWAYOUT; diff --git a/drivers/watchdog/ixp4xx_wdt.c b/drivers/watchdog/ixp4xx_wdt.c index 5864bb865cf..d4d37dac107 100644 --- a/drivers/watchdog/ixp4xx_wdt.c +++ b/drivers/watchdog/ixp4xx_wdt.c @@ -23,7 +23,7 @@  #include <linux/init.h>  #include <linux/bitops.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/uaccess.h>  static int nowayout = WATCHDOG_NOWAYOUT; diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c index 74bc39aa1ce..6dfb9cf1558 100644 --- a/drivers/watchdog/omap_wdt.c +++ b/drivers/watchdog/omap_wdt.c @@ -43,7 +43,7 @@  #include <asm/io.h>  #include <asm/uaccess.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/prcm.h> diff --git a/drivers/watchdog/pnx4008_wdt.c b/drivers/watchdog/pnx4008_wdt.c index 6b8483d3c78..11a206781d0 100644 --- a/drivers/watchdog/pnx4008_wdt.c +++ b/drivers/watchdog/pnx4008_wdt.c @@ -29,7 +29,7 @@  #include <linux/clk.h>  #include <linux/spinlock.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/uaccess.h>  #include <asm/io.h> diff --git a/drivers/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c index 98532c0e068..97b4a2e8eb0 100644 --- a/drivers/watchdog/s3c2410_wdt.c +++ b/drivers/watchdog/s3c2410_wdt.c @@ -46,9 +46,8 @@  #include <linux/platform_device.h>  #include <linux/interrupt.h>  #include <linux/clk.h> - -#include <asm/uaccess.h> -#include <asm/io.h> +#include <linux/uaccess.h> +#include <linux/io.h>  #include <asm/arch/map.h> @@ -65,8 +64,8 @@  static int nowayout	= WATCHDOG_NOWAYOUT;  static int tmr_margin	= CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME;  static int tmr_atboot	= CONFIG_S3C2410_WATCHDOG_ATBOOT; -static int soft_noboot	= 0; -static int debug	= 0; +static int soft_noboot; +static int debug;  module_param(tmr_margin,  int, 0);  module_param(tmr_atboot,  int, 0); @@ -74,24 +73,23 @@ module_param(nowayout,    int, 0);  module_param(soft_noboot, int, 0);  module_param(debug,	  int, 0); -MODULE_PARM_DESC(tmr_margin, "Watchdog tmr_margin in seconds. default=" __MODULE_STRING(CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME) ")"); - -MODULE_PARM_DESC(tmr_atboot, "Watchdog is started at boot time if set to 1, default=" __MODULE_STRING(CONFIG_S3C2410_WATCHDOG_ATBOOT)); - -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); - +MODULE_PARM_DESC(tmr_margin, "Watchdog tmr_margin in seconds. default=" +		__MODULE_STRING(CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME) ")"); +MODULE_PARM_DESC(tmr_atboot, +		"Watchdog is started at boot time if set to 1, default=" +			__MODULE_STRING(CONFIG_S3C2410_WATCHDOG_ATBOOT)); +MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" +			__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");  MODULE_PARM_DESC(soft_noboot, "Watchdog action, set to 1 to ignore reboots, 0 to reboot (default depends on ONLY_TESTING)"); -  MODULE_PARM_DESC(debug, "Watchdog debug, set to >1 for debug, (default 0)");  typedef enum close_state {  	CLOSE_STATE_NOT, -	CLOSE_STATE_ALLOW=0x4021 +	CLOSE_STATE_ALLOW = 0x4021  } close_state_t; -static DECLARE_MUTEX(open_lock); - +static unsigned long open_lock;  static struct device    *wdt_dev;	/* platform device attached to */  static struct resource	*wdt_mem;  static struct resource	*wdt_irq; @@ -99,38 +97,58 @@ static struct clk	*wdt_clock;  static void __iomem	*wdt_base;  static unsigned int	 wdt_count;  static close_state_t	 allow_close; +static DEFINE_SPINLOCK(wdt_lock);  /* watchdog control routines */  #define DBG(msg...) do { \  	if (debug) \  		printk(KERN_INFO msg); \ -	} while(0) +	} while (0)  /* functions */ -static int s3c2410wdt_keepalive(void) +static void s3c2410wdt_keepalive(void)  { +	spin_lock(&wdt_lock);  	writel(wdt_count, wdt_base + S3C2410_WTCNT); -	return 0; +	spin_unlock(&wdt_lock);  } -static int s3c2410wdt_stop(void) +static void __s3c2410wdt_stop(void)  {  	unsigned long wtcon; +	spin_lock(&wdt_lock);  	wtcon = readl(wdt_base + S3C2410_WTCON);  	wtcon &= ~(S3C2410_WTCON_ENABLE | S3C2410_WTCON_RSTEN);  	writel(wtcon, wdt_base + S3C2410_WTCON); +	spin_unlock(&wdt_lock); +} -	return 0; +static void __s3c2410wdt_stop(void) +{ +	unsigned long wtcon; + +	wtcon = readl(wdt_base + S3C2410_WTCON); +	wtcon &= ~(S3C2410_WTCON_ENABLE | S3C2410_WTCON_RSTEN); +	writel(wtcon, wdt_base + S3C2410_WTCON); +} + +static void s3c2410wdt_stop(void) +{ +	spin_lock(&wdt_lock); +	__s3c2410wdt_stop(); +	spin_unlock(&wdt_lock);  } -static int s3c2410wdt_start(void) +static void s3c2410wdt_start(void)  {  	unsigned long wtcon; -	s3c2410wdt_stop(); +	spin_lock(&wdt_lock); + +	__s3c2410wdt_stop();  	wtcon = readl(wdt_base + S3C2410_WTCON);  	wtcon |= S3C2410_WTCON_ENABLE | S3C2410_WTCON_DIV128; @@ -149,6 +167,7 @@ static int s3c2410wdt_start(void)  	writel(wdt_count, wdt_base + S3C2410_WTDAT);  	writel(wdt_count, wdt_base + S3C2410_WTCNT);  	writel(wtcon, wdt_base + S3C2410_WTCON); +	spin_unlock(&wdt_lock);  	return 0;  } @@ -211,7 +230,7 @@ static int s3c2410wdt_set_heartbeat(int timeout)  static int s3c2410wdt_open(struct inode *inode, struct file *file)  { -	if(down_trylock(&open_lock)) +	if (test_and_set_bit(0, &open_lock))  		return -EBUSY;  	if (nowayout) @@ -231,15 +250,14 @@ static int s3c2410wdt_release(struct inode *inode, struct file *file)  	 * 	Lock it in if it's a module and we set nowayout  	 */ -	if (allow_close == CLOSE_STATE_ALLOW) { +	if (allow_close == CLOSE_STATE_ALLOW)  		s3c2410wdt_stop(); -	} else { +	else {  		dev_err(wdt_dev, "Unexpected close, not stopping watchdog\n");  		s3c2410wdt_keepalive();  	} -  	allow_close = CLOSE_STATE_NOT; -	up(&open_lock); +	clear_bit(0, &open_lock);  	return 0;  } @@ -249,7 +267,7 @@ static ssize_t s3c2410wdt_write(struct file *file, const char __user *data,  	/*  	 *	Refresh the timer.  	 */ -	if(len) { +	if (len) {  		if (!nowayout) {  			size_t i; @@ -265,7 +283,6 @@ static ssize_t s3c2410wdt_write(struct file *file, const char __user *data,  					allow_close = CLOSE_STATE_ALLOW;  			}  		} -  		s3c2410wdt_keepalive();  	}  	return len; @@ -273,48 +290,41 @@ static ssize_t s3c2410wdt_write(struct file *file, const char __user *data,  #define OPTIONS WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE -static struct watchdog_info s3c2410_wdt_ident = { +static const struct watchdog_info s3c2410_wdt_ident = {  	.options          =     OPTIONS,  	.firmware_version =	0,  	.identity         =	"S3C2410 Watchdog",  }; -static int s3c2410wdt_ioctl(struct inode *inode, struct file *file, -	unsigned int cmd, unsigned long arg) +static long s3c2410wdt_ioctl(struct file *file,	unsigned int cmd, +							unsigned long arg)  {  	void __user *argp = (void __user *)arg;  	int __user *p = argp;  	int new_margin;  	switch (cmd) { -		default: -			return -ENOTTY; - -		case WDIOC_GETSUPPORT: -			return copy_to_user(argp, &s3c2410_wdt_ident, -				sizeof(s3c2410_wdt_ident)) ? -EFAULT : 0; - -		case WDIOC_GETSTATUS: -		case WDIOC_GETBOOTSTATUS: -			return put_user(0, p); - -		case WDIOC_KEEPALIVE: -			s3c2410wdt_keepalive(); -			return 0; - -		case WDIOC_SETTIMEOUT: -			if (get_user(new_margin, p)) -				return -EFAULT; - -			if (s3c2410wdt_set_heartbeat(new_margin)) -				return -EINVAL; - -			s3c2410wdt_keepalive(); -			return put_user(tmr_margin, p); - -		case WDIOC_GETTIMEOUT: -			return put_user(tmr_margin, p); +	default: +		return -ENOTTY; +	case WDIOC_GETSUPPORT: +		return copy_to_user(argp, &s3c2410_wdt_ident, +			sizeof(s3c2410_wdt_ident)) ? -EFAULT : 0; +	case WDIOC_GETSTATUS: +	case WDIOC_GETBOOTSTATUS: +		return put_user(0, p); +	case WDIOC_KEEPALIVE: +		s3c2410wdt_keepalive(); +		return 0; +	case WDIOC_SETTIMEOUT: +		if (get_user(new_margin, p)) +			return -EFAULT; +		if (s3c2410wdt_set_heartbeat(new_margin)) +			return -EINVAL; +		s3c2410wdt_keepalive(); +		return put_user(tmr_margin, p); +	case WDIOC_GETTIMEOUT: +		return put_user(tmr_margin, p);  	}  } @@ -324,7 +334,7 @@ static const struct file_operations s3c2410wdt_fops = {  	.owner		= THIS_MODULE,  	.llseek		= no_llseek,  	.write		= s3c2410wdt_write, -	.ioctl		= s3c2410wdt_ioctl, +	.unlocked_ioctl	= s3c2410wdt_ioctl,  	.open		= s3c2410wdt_open,  	.release	= s3c2410wdt_release,  }; @@ -411,14 +421,15 @@ static int s3c2410wdt_probe(struct platform_device *pdev)  	 * not, try the default value */  	if (s3c2410wdt_set_heartbeat(tmr_margin)) { -		started = s3c2410wdt_set_heartbeat(CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME); +		started = s3c2410wdt_set_heartbeat( +					CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME); -		if (started == 0) { -			dev_info(dev,"tmr_margin value out of range, default %d used\n", +		if (started == 0) +			dev_info(dev, +			   "tmr_margin value out of range, default %d used\n",  			       CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME); -		} else { +		else  			dev_info(dev, "default timer value is out of range, cannot start\n"); -		}  	}  	ret = misc_register(&s3c2410wdt_miscdev); @@ -447,7 +458,7 @@ static int s3c2410wdt_probe(struct platform_device *pdev)  		 (wtcon & S3C2410_WTCON_ENABLE) ?  "" : "in",  		 (wtcon & S3C2410_WTCON_RSTEN) ? "" : "dis",  		 (wtcon & S3C2410_WTCON_INTEN) ? "" : "en"); -	 +  	return 0;   err_clk: @@ -487,7 +498,7 @@ static int s3c2410wdt_remove(struct platform_device *dev)  static void s3c2410wdt_shutdown(struct platform_device *dev)  { -	s3c2410wdt_stop();	 +	s3c2410wdt_stop();  }  #ifdef CONFIG_PM @@ -540,7 +551,8 @@ static struct platform_driver s3c2410wdt_driver = {  }; -static char banner[] __initdata = KERN_INFO "S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics\n"; +static char banner[] __initdata = +	KERN_INFO "S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics\n";  static int __init watchdog_init(void)  { diff --git a/drivers/watchdog/sa1100_wdt.c b/drivers/watchdog/sa1100_wdt.c index 34a2b3b8180..d985cba40dd 100644 --- a/drivers/watchdog/sa1100_wdt.c +++ b/drivers/watchdog/sa1100_wdt.c @@ -31,7 +31,7 @@  #include <asm/arch/pxa-regs.h>  #endif -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/uaccess.h>  #define OSCR_FREQ		CLOCK_TICK_RATE diff --git a/drivers/watchdog/sc1200wdt.c b/drivers/watchdog/sc1200wdt.c index 35cddff7020..621ebad56d8 100644 --- a/drivers/watchdog/sc1200wdt.c +++ b/drivers/watchdog/sc1200wdt.c @@ -15,14 +15,18 @@   *   *	Changelog:   *	20020220 Zwane Mwaikambo	Code based on datasheet, no hardware. - *	20020221 Zwane Mwaikambo	Cleanups as suggested by Jeff Garzik and Alan Cox. + *	20020221 Zwane Mwaikambo	Cleanups as suggested by Jeff Garzik + *					and Alan Cox.   *	20020222 Zwane Mwaikambo	Added probing.   *	20020225 Zwane Mwaikambo	Added ISAPNP support.   *	20020412 Rob Radez		Broke out start/stop functions - *		 <rob@osinvestor.com>	Return proper status instead of temperature warning - *					Add WDIOC_GETBOOTSTATUS and WDIOC_SETOPTIONS ioctls + *		 <rob@osinvestor.com>	Return proper status instead of + *					temperature warning + *					Add WDIOC_GETBOOTSTATUS and + *					WDIOC_SETOPTIONS ioctls   *					Fix CONFIG_WATCHDOG_NOWAYOUT - *	20020530 Joel Becker		Add Matt Domsch's nowayout module option + *	20020530 Joel Becker		Add Matt Domsch's nowayout module + *					option   *	20030116 Adam Belay		Updated to the latest pnp code   *   */ @@ -39,9 +43,8 @@  #include <linux/pnp.h>  #include <linux/fs.h>  #include <linux/semaphore.h> - -#include <asm/io.h> -#include <asm/uaccess.h> +#include <linux/io.h> +#include <linux/uaccess.h>  #define SC1200_MODULE_VER	"build 20020303"  #define SC1200_MODULE_NAME	"sc1200wdt" @@ -72,7 +75,7 @@ static char banner[] __initdata = KERN_INFO PFX SC1200_MODULE_VER;  static int timeout = 1;  static int io = -1;  static int io_len = 2;		/* for non plug and play */ -static struct semaphore open_sem; +static unsigned long open_flag;  static char expect_close;  static DEFINE_SPINLOCK(sc1200wdt_lock);	/* io port access serialisation */ @@ -81,7 +84,8 @@ static int isapnp = 1;  static struct pnp_dev *wdt_dev;  module_param(isapnp, int, 0); -MODULE_PARM_DESC(isapnp, "When set to 0 driver ISA PnP support will be disabled"); +MODULE_PARM_DESC(isapnp, +	"When set to 0 driver ISA PnP support will be disabled");  #endif  module_param(io, int, 0); @@ -91,26 +95,40 @@ MODULE_PARM_DESC(timeout, "range is 0-255 minutes, default is 1");  static int nowayout = WATCHDOG_NOWAYOUT;  module_param(nowayout, int, 0); -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); +MODULE_PARM_DESC(nowayout, +	"Watchdog cannot be stopped once started (default=" +				__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");  /* Read from Data Register */ -static inline void sc1200wdt_read_data(unsigned char index, unsigned char *data) +static inline void __sc1200wdt_read_data(unsigned char index, +						unsigned char *data)  { -	spin_lock(&sc1200wdt_lock);  	outb_p(index, PMIR);  	*data = inb(PMDR); -	spin_unlock(&sc1200wdt_lock);  } +static void sc1200wdt_read_data(unsigned char index, unsigned char *data) +{ +	spin_lock(&sc1200wdt_lock); +	__sc1200wdt_read_data(index, data); +	spin_unlock(&sc1200wdt_lock); +}  /* Write to Data Register */ -static inline void sc1200wdt_write_data(unsigned char index, unsigned char data) +static inline void __sc1200wdt_write_data(unsigned char index, +						unsigned char data)  { -	spin_lock(&sc1200wdt_lock);  	outb_p(index, PMIR);  	outb(data, PMDR); +} + +static inline void sc1200wdt_write_data(unsigned char index, +						unsigned char data) +{ +	spin_lock(&sc1200wdt_lock); +	__sc1200wdt_write_data(index, data);  	spin_unlock(&sc1200wdt_lock);  } @@ -118,22 +136,23 @@ static inline void sc1200wdt_write_data(unsigned char index, unsigned char data)  static void sc1200wdt_start(void)  {  	unsigned char reg; +	spin_lock(&sc1200wdt_lock); -	sc1200wdt_read_data(WDCF, ®); +	__sc1200wdt_read_data(WDCF, ®);  	/* assert WDO when any of the following interrupts are triggered too */  	reg |= (KBC_IRQ | MSE_IRQ | UART1_IRQ | UART2_IRQ); -	sc1200wdt_write_data(WDCF, reg); +	__sc1200wdt_write_data(WDCF, reg);  	/* set the timeout and get the ball rolling */ -	sc1200wdt_write_data(WDTO, timeout); -} +	__sc1200wdt_write_data(WDTO, timeout); +	spin_unlock(&sc1200wdt_lock); +}  static void sc1200wdt_stop(void)  {  	sc1200wdt_write_data(WDTO, 0);  } -  /* This returns the status of the WDO signal, inactive high. */  static inline int sc1200wdt_status(void)  { @@ -144,14 +163,13 @@ static inline int sc1200wdt_status(void)  	 * KEEPALIVEPING which is a bit of a kludge because there's nothing  	 * else for enabled/disabled status  	 */ -	return (ret & 0x01) ? 0 : WDIOF_KEEPALIVEPING;	/* bits 1 - 7 are undefined */ +	return (ret & 0x01) ? 0 : WDIOF_KEEPALIVEPING;  } -  static int sc1200wdt_open(struct inode *inode, struct file *file)  {  	/* allow one at a time */ -	if (down_trylock(&open_sem)) +	if (test_and_set_bit(0, &open_flag))  		return -EBUSY;  	if (timeout > MAX_TIMEOUT) @@ -164,71 +182,71 @@ static int sc1200wdt_open(struct inode *inode, struct file *file)  } -static int sc1200wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) +static long sc1200wdt_ioctl(struct file *file, unsigned int cmd, +						unsigned long arg)  {  	int new_timeout;  	void __user *argp = (void __user *)arg;  	int __user *p = argp; -	static struct watchdog_info ident = { -		.options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE, +	static const struct watchdog_info ident = { +		.options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | +							WDIOF_MAGICCLOSE,  		.firmware_version = 0,  		.identity = "PC87307/PC97307",  	};  	switch (cmd) { -		default: -			return -ENOTTY; - -		case WDIOC_GETSUPPORT: -			if (copy_to_user(argp, &ident, sizeof ident)) -				return -EFAULT; -			return 0; - -		case WDIOC_GETSTATUS: -			return put_user(sc1200wdt_status(), p); - -		case WDIOC_GETBOOTSTATUS: -			return put_user(0, p); -		case WDIOC_KEEPALIVE: -			sc1200wdt_write_data(WDTO, timeout); -			return 0; +	case WDIOC_GETSUPPORT: +		if (copy_to_user(argp, &ident, sizeof ident)) +			return -EFAULT; +		return 0; -		case WDIOC_SETTIMEOUT: -			if (get_user(new_timeout, p)) -				return -EFAULT; +	case WDIOC_GETSTATUS: +		return put_user(sc1200wdt_status(), p); -			/* the API states this is given in secs */ -			new_timeout /= 60; -			if (new_timeout < 0 || new_timeout > MAX_TIMEOUT) -				return -EINVAL; +	case WDIOC_GETBOOTSTATUS: +		return put_user(0, p); -			timeout = new_timeout; -			sc1200wdt_write_data(WDTO, timeout); -			/* fall through and return the new timeout */ +	case WDIOC_KEEPALIVE: +		sc1200wdt_write_data(WDTO, timeout); +		return 0; -		case WDIOC_GETTIMEOUT: -			return put_user(timeout * 60, p); +	case WDIOC_SETTIMEOUT: +		if (get_user(new_timeout, p)) +			return -EFAULT; +		/* the API states this is given in secs */ +		new_timeout /= 60; +		if (new_timeout < 0 || new_timeout > MAX_TIMEOUT) +			return -EINVAL; +		timeout = new_timeout; +		sc1200wdt_write_data(WDTO, timeout); +		/* fall through and return the new timeout */ -		case WDIOC_SETOPTIONS: -		{ -			int options, retval = -EINVAL; +	case WDIOC_GETTIMEOUT: +		return put_user(timeout * 60, p); -			if (get_user(options, p)) -				return -EFAULT; +	case WDIOC_SETOPTIONS: +	{ +		int options, retval = -EINVAL; -			if (options & WDIOS_DISABLECARD) { -				sc1200wdt_stop(); -				retval = 0; -			} +		if (get_user(options, p)) +			return -EFAULT; -			if (options & WDIOS_ENABLECARD) { -				sc1200wdt_start(); -				retval = 0; -			} +		if (options & WDIOS_DISABLECARD) { +			sc1200wdt_stop(); +			retval = 0; +		} -			return retval; +		if (options & WDIOS_ENABLECARD) { +			sc1200wdt_start(); +			retval = 0;  		} + +		return retval; +	} +	default: +		return -ENOTTY;  	}  } @@ -240,16 +258,18 @@ static int sc1200wdt_release(struct inode *inode, struct file *file)  		printk(KERN_INFO PFX "Watchdog disabled\n");  	} else {  		sc1200wdt_write_data(WDTO, timeout); -		printk(KERN_CRIT PFX "Unexpected close!, timeout = %d min(s)\n", timeout); +		printk(KERN_CRIT PFX +			"Unexpected close!, timeout = %d min(s)\n", timeout);  	} -	up(&open_sem); +	clear_bit(0, &open_flag);  	expect_close = 0;  	return 0;  } -static ssize_t sc1200wdt_write(struct file *file, const char __user *data, size_t len, loff_t *ppos) +static ssize_t sc1200wdt_write(struct file *file, const char __user *data, +						size_t len, loff_t *ppos)  {  	if (len) {  		if (!nowayout) { @@ -275,7 +295,8 @@ static ssize_t sc1200wdt_write(struct file *file, const char __user *data, size_  } -static int sc1200wdt_notify_sys(struct notifier_block *this, unsigned long code, void *unused) +static int sc1200wdt_notify_sys(struct notifier_block *this, +					unsigned long code, void *unused)  {  	if (code == SYS_DOWN || code == SYS_HALT)  		sc1200wdt_stop(); @@ -284,23 +305,20 @@ static int sc1200wdt_notify_sys(struct notifier_block *this, unsigned long code,  } -static struct notifier_block sc1200wdt_notifier = -{ +static struct notifier_block sc1200wdt_notifier = {  	.notifier_call =	sc1200wdt_notify_sys,  }; -static const struct file_operations sc1200wdt_fops = -{ +static const struct file_operations sc1200wdt_fops = {  	.owner		= THIS_MODULE,  	.llseek		= no_llseek,  	.write		= sc1200wdt_write, -	.ioctl		= sc1200wdt_ioctl, +	.unlocked_ioctl = sc1200wdt_ioctl,  	.open		= sc1200wdt_open,  	.release	= sc1200wdt_release,  }; -static struct miscdevice sc1200wdt_miscdev = -{ +static struct miscdevice sc1200wdt_miscdev = {  	.minor		= WATCHDOG_MINOR,  	.name		= "watchdog",  	.fops		= &sc1200wdt_fops, @@ -312,14 +330,14 @@ static int __init sc1200wdt_probe(void)  	/* The probe works by reading the PMC3 register's default value of 0x0e  	 * there is one caveat, if the device disables the parallel port or any  	 * of the UARTs we won't be able to detect it. -	 * Nb. This could be done with accuracy by reading the SID registers, but -	 * we don't have access to those io regions. +	 * NB. This could be done with accuracy by reading the SID registers, +	 * but we don't have access to those io regions.  	 */  	unsigned char reg;  	sc1200wdt_read_data(PMC3, ®); -	reg &= 0x0f;				/* we don't want the UART busy bits */ +	reg &= 0x0f;		/* we don't want the UART busy bits */  	return (reg == 0x0e) ? 0 : -ENODEV;  } @@ -332,7 +350,8 @@ static struct pnp_device_id scl200wdt_pnp_devices[] = {  	{.id = ""},  }; -static int scl200wdt_pnp_probe(struct pnp_dev * dev, const struct pnp_device_id *dev_id) +static int scl200wdt_pnp_probe(struct pnp_dev *dev, +					const struct pnp_device_id *dev_id)  {  	/* this driver only supports one card at a time */  	if (wdt_dev || !isapnp) @@ -347,13 +366,14 @@ static int scl200wdt_pnp_probe(struct pnp_dev * dev, const struct pnp_device_id  		return -EBUSY;  	} -	printk(KERN_INFO "scl200wdt: PnP device found at io port %#x/%d\n", io, io_len); +	printk(KERN_INFO "scl200wdt: PnP device found at io port %#x/%d\n", +								io, io_len);  	return 0;  } -static void scl200wdt_pnp_remove(struct pnp_dev * dev) +static void scl200wdt_pnp_remove(struct pnp_dev *dev)  { -	if (wdt_dev){ +	if (wdt_dev) {  		release_region(io, io_len);  		wdt_dev = NULL;  	} @@ -375,8 +395,6 @@ static int __init sc1200wdt_init(void)  	printk("%s\n", banner); -	sema_init(&open_sem, 1); -  #if defined CONFIG_PNP  	if (isapnp) {  		ret = pnp_register_driver(&scl200wdt_pnp_driver); @@ -410,13 +428,16 @@ static int __init sc1200wdt_init(void)  	ret = register_reboot_notifier(&sc1200wdt_notifier);  	if (ret) { -		printk(KERN_ERR PFX "Unable to register reboot notifier err = %d\n", ret); +		printk(KERN_ERR PFX +			"Unable to register reboot notifier err = %d\n", ret);  		goto out_io;  	}  	ret = misc_register(&sc1200wdt_miscdev);  	if (ret) { -		printk(KERN_ERR PFX "Unable to register miscdev on minor %d\n", WATCHDOG_MINOR); +		printk(KERN_ERR PFX +			"Unable to register miscdev on minor %d\n", +							WATCHDOG_MINOR);  		goto out_rbt;  	} @@ -446,7 +467,7 @@ static void __exit sc1200wdt_exit(void)  	unregister_reboot_notifier(&sc1200wdt_notifier);  #if defined CONFIG_PNP -	if(isapnp) +	if (isapnp)  		pnp_unregister_driver(&scl200wdt_pnp_driver);  	else  #endif diff --git a/drivers/watchdog/wdt.c b/drivers/watchdog/wdt.c index 756fb15fdce..53a6b18bcb9 100644 --- a/drivers/watchdog/wdt.c +++ b/drivers/watchdog/wdt.c @@ -24,9 +24,10 @@   *					Matt Crocker).   *		Alan Cox	:	Added wdt= boot option   *		Alan Cox	:	Cleaned up copy/user stuff - *		Tim Hockin	:	Added insmod parameters, comment cleanup - *					Parameterized timeout - *		Tigran Aivazian	:	Restructured wdt_init() to handle failures + *		Tim Hockin	:	Added insmod parameters, comment + *					cleanup, parameterized timeout + *		Tigran Aivazian	:	Restructured wdt_init() to handle + *					failures   *		Joel Becker	:	Added WDIOC_GET/SETTIMEOUT   *		Matt Domsch	:	Added nowayout module option   */ @@ -42,9 +43,9 @@  #include <linux/notifier.h>  #include <linux/reboot.h>  #include <linux/init.h> +#include <linux/io.h> +#include <linux/uaccess.h> -#include <asm/io.h> -#include <asm/uaccess.h>  #include <asm/system.h>  #include "wd501p.h" @@ -60,15 +61,19 @@ static char expect_close;  static int heartbeat = WD_TIMO;  static int wd_heartbeat;  module_param(heartbeat, int, 0); -MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (0<heartbeat<65536, default=" __MODULE_STRING(WD_TIMO) ")"); +MODULE_PARM_DESC(heartbeat, +	"Watchdog heartbeat in seconds. (0 < heartbeat < 65536, default=" +				__MODULE_STRING(WD_TIMO) ")");  static int nowayout = WATCHDOG_NOWAYOUT;  module_param(nowayout, int, 0); -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); +MODULE_PARM_DESC(nowayout, +	"Watchdog cannot be stopped once started (default=" +				__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");  /* You must set these - there is no sane way to probe for this board. */ -static int io=0x240; -static int irq=11; +static int io = 0x240; +static int irq = 11;  static DEFINE_SPINLOCK(wdt_lock); @@ -82,7 +87,8 @@ MODULE_PARM_DESC(irq, "WDT irq (default=11)");  static int tachometer;  module_param(tachometer, int, 0); -MODULE_PARM_DESC(tachometer, "WDT501-P Fan Tachometer support (0=disable, default=0)"); +MODULE_PARM_DESC(tachometer, +		"WDT501-P Fan Tachometer support (0=disable, default=0)");  #endif /* CONFIG_WDT_501 */  /* @@ -91,9 +97,9 @@ MODULE_PARM_DESC(tachometer, "WDT501-P Fan Tachometer support (0=disable, defaul  static void wdt_ctr_mode(int ctr, int mode)  { -	ctr<<=6; -	ctr|=0x30; -	ctr|=(mode<<1); +	ctr <<= 6; +	ctr |= 0x30; +	ctr |= (mode << 1);  	outb_p(ctr, WDT_CR);  } @@ -114,12 +120,15 @@ static int wdt_start(void)  	unsigned long flags;  	spin_lock_irqsave(&wdt_lock, flags);  	inb_p(WDT_DC);			/* Disable watchdog */ -	wdt_ctr_mode(0,3);		/* Program CTR0 for Mode 3: Square Wave Generator */ -	wdt_ctr_mode(1,2);		/* Program CTR1 for Mode 2: Rate Generator */ -	wdt_ctr_mode(2,0);		/* Program CTR2 for Mode 0: Pulse on Terminal Count */ +	wdt_ctr_mode(0, 3);		/* Program CTR0 for Mode 3: +						Square Wave Generator */ +	wdt_ctr_mode(1, 2);		/* Program CTR1 for Mode 2: +						Rate Generator */ +	wdt_ctr_mode(2, 0);		/* Program CTR2 for Mode 0: +						Pulse on Terminal Count */  	wdt_ctr_load(0, 8948);		/* Count at 100Hz */ -	wdt_ctr_load(1,wd_heartbeat);	/* Heartbeat */ -	wdt_ctr_load(2,65535);		/* Length of reset pulse */ +	wdt_ctr_load(1, wd_heartbeat);	/* Heartbeat */ +	wdt_ctr_load(2, 65535);		/* Length of reset pulse */  	outb_p(0, WDT_DC);		/* Enable watchdog */  	spin_unlock_irqrestore(&wdt_lock, flags);  	return 0; @@ -131,13 +140,13 @@ static int wdt_start(void)   *	Stop the watchdog driver.   */ -static int wdt_stop (void) +static int wdt_stop(void)  {  	unsigned long flags;  	spin_lock_irqsave(&wdt_lock, flags);  	/* Turn the card off */  	inb_p(WDT_DC);			/* Disable watchdog */ -	wdt_ctr_load(2,0);		/* 0 length reset pulses now */ +	wdt_ctr_load(2, 0);		/* 0 length reset pulses now */  	spin_unlock_irqrestore(&wdt_lock, flags);  	return 0;  } @@ -145,8 +154,8 @@ static int wdt_stop (void)  /**   *	wdt_ping:   * - *	Reload counter one with the watchdog heartbeat. We don't bother reloading - *	the cascade counter. + *	Reload counter one with the watchdog heartbeat. We don't bother + *	reloading the cascade counter.   */  static int wdt_ping(void) @@ -155,8 +164,9 @@ static int wdt_ping(void)  	spin_lock_irqsave(&wdt_lock, flags);  	/* Write a watchdog value */  	inb_p(WDT_DC);			/* Disable watchdog */ -	wdt_ctr_mode(1,2);		/* Re-Program CTR1 for Mode 2: Rate Generator */ -	wdt_ctr_load(1,wd_heartbeat);	/* Heartbeat */ +	wdt_ctr_mode(1, 2);		/* Re-Program CTR1 for Mode 2: +							Rate Generator */ +	wdt_ctr_load(1, wd_heartbeat);	/* Heartbeat */  	outb_p(0, WDT_DC);		/* Enable watchdog */  	spin_unlock_irqrestore(&wdt_lock, flags);  	return 0; @@ -166,13 +176,14 @@ static int wdt_ping(void)   *	wdt_set_heartbeat:   *	@t:		the new heartbeat value that needs to be set.   * - *	Set a new heartbeat value for the watchdog device. If the heartbeat value is - *	incorrect we keep the old value and return -EINVAL. If successfull we - *	return 0. + *	Set a new heartbeat value for the watchdog device. If the heartbeat + *	value is incorrect we keep the old value and return -EINVAL. If + *	successful we return 0.   */ +  static int wdt_set_heartbeat(int t)  { -	if ((t < 1) || (t > 65535)) +	if (t < 1 || t > 65535)  		return -EINVAL;  	heartbeat = t; @@ -200,7 +211,7 @@ static int wdt_get_status(int *status)  	new_status = inb_p(WDT_SR);  	spin_unlock_irqrestore(&wdt_lock, flags); -	*status=0; +	*status = 0;  	if (new_status & WDC_SR_ISOI0)  		*status |= WDIOF_EXTERN1;  	if (new_status & WDC_SR_ISII1) @@ -266,7 +277,7 @@ static irqreturn_t wdt_interrupt(int irq, void *dev_id)  #ifdef CONFIG_WDT_501  	if (!(status & WDC_SR_TGOOD)) -		printk(KERN_CRIT "Overheat alarm.(%d)\n",inb_p(WDT_RT)); +		printk(KERN_CRIT "Overheat alarm.(%d)\n", inb_p(WDT_RT));  	if (!(status & WDC_SR_PSUOVER))  		printk(KERN_CRIT "PSU over voltage.\n");  	if (!(status & WDC_SR_PSUUNDR)) @@ -304,9 +315,10 @@ static irqreturn_t wdt_interrupt(int irq, void *dev_id)   *	write of data will do, as we we don't define content meaning.   */ -static ssize_t wdt_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) +static ssize_t wdt_write(struct file *file, const char __user *buf, +						size_t count, loff_t *ppos)  { -	if(count) { +	if (count) {  		if (!nowayout) {  			size_t i; @@ -328,7 +340,6 @@ static ssize_t wdt_write(struct file *file, const char __user *buf, size_t count  /**   *	wdt_ioctl: - *	@inode: inode of the device   *	@file: file handle to the device   *	@cmd: watchdog command   *	@arg: argument pointer @@ -338,8 +349,7 @@ static ssize_t wdt_write(struct file *file, const char __user *buf, size_t count   *	querying capabilities and current status.   */ -static int wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, -	unsigned long arg) +static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg)  {  	void __user *argp = (void __user *)arg;  	int __user *p = argp; @@ -362,32 +372,28 @@ static int wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,  		ident.options |= WDIOF_FANFAULT;  #endif /* CONFIG_WDT_501 */ -	switch(cmd) -	{ -		default: -			return -ENOTTY; -		case WDIOC_GETSUPPORT: -			return copy_to_user(argp, &ident, sizeof(ident))?-EFAULT:0; - -		case WDIOC_GETSTATUS: -			wdt_get_status(&status); -			return put_user(status, p); -		case WDIOC_GETBOOTSTATUS: -			return put_user(0, p); -		case WDIOC_KEEPALIVE: -			wdt_ping(); -			return 0; -		case WDIOC_SETTIMEOUT: -			if (get_user(new_heartbeat, p)) -				return -EFAULT; - -			if (wdt_set_heartbeat(new_heartbeat)) -				return -EINVAL; - -			wdt_ping(); -			/* Fall */ -		case WDIOC_GETTIMEOUT: -			return put_user(heartbeat, p); +	switch (cmd) { +	default: +		return -ENOTTY; +	case WDIOC_GETSUPPORT: +		return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; +	case WDIOC_GETSTATUS: +		wdt_get_status(&status); +		return put_user(status, p); +	case WDIOC_GETBOOTSTATUS: +		return put_user(0, p); +	case WDIOC_KEEPALIVE: +		wdt_ping(); +		return 0; +	case WDIOC_SETTIMEOUT: +		if (get_user(new_heartbeat, p)) +			return -EFAULT; +		if (wdt_set_heartbeat(new_heartbeat)) +			return -EINVAL; +		wdt_ping(); +		/* Fall */ +	case WDIOC_GETTIMEOUT: +		return put_user(heartbeat, p);  	}  } @@ -405,7 +411,7 @@ static int wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,  static int wdt_open(struct inode *inode, struct file *file)  { -	if(test_and_set_bit(0, &wdt_is_open)) +	if (test_and_set_bit(0, &wdt_is_open))  		return -EBUSY;  	/*  	 *	Activate @@ -432,7 +438,8 @@ static int wdt_release(struct inode *inode, struct file *file)  		wdt_stop();  		clear_bit(0, &wdt_is_open);  	} else { -		printk(KERN_CRIT "wdt: WDT device closed unexpectedly.  WDT will not stop!\n"); +		printk(KERN_CRIT +		 "wdt: WDT device closed unexpectedly.  WDT will not stop!\n");  		wdt_ping();  	}  	expect_close = 0; @@ -451,14 +458,15 @@ static int wdt_release(struct inode *inode, struct file *file)   *	farenheit. It was designed by an imperial measurement luddite.   */ -static ssize_t wdt_temp_read(struct file *file, char __user *buf, size_t count, loff_t *ptr) +static ssize_t wdt_temp_read(struct file *file, char __user *buf, +						size_t count, loff_t *ptr)  {  	int temperature;  	if (wdt_get_temperature(&temperature))  		return -EFAULT; -	if (copy_to_user (buf, &temperature, 1)) +	if (copy_to_user(buf, &temperature, 1))  		return -EFAULT;  	return 1; @@ -506,10 +514,8 @@ static int wdt_temp_release(struct inode *inode, struct file *file)  static int wdt_notify_sys(struct notifier_block *this, unsigned long code,  	void *unused)  { -	if(code==SYS_DOWN || code==SYS_HALT) { -		/* Turn the card off */ +	if (code == SYS_DOWN || code == SYS_HALT)  		wdt_stop(); -	}  	return NOTIFY_DONE;  } @@ -522,7 +528,7 @@ static const struct file_operations wdt_fops = {  	.owner		= THIS_MODULE,  	.llseek		= no_llseek,  	.write		= wdt_write, -	.ioctl		= wdt_ioctl, +	.unlocked_ioctl	= wdt_ioctl,  	.open		= wdt_open,  	.release	= wdt_release,  }; @@ -576,7 +582,7 @@ static void __exit wdt_exit(void)  #endif /* CONFIG_WDT_501 */  	unregister_reboot_notifier(&wdt_notifier);  	free_irq(irq, NULL); -	release_region(io,8); +	release_region(io, 8);  }  /** @@ -591,44 +597,49 @@ static int __init wdt_init(void)  {  	int ret; -	/* Check that the heartbeat value is within it's range ; if not reset to the default */ +	/* Check that the heartbeat value is within it's range; +	   if not reset to the default */  	if (wdt_set_heartbeat(heartbeat)) {  		wdt_set_heartbeat(WD_TIMO); -		printk(KERN_INFO "wdt: heartbeat value must be 0<heartbeat<65536, using %d\n", +		printk(KERN_INFO "wdt: heartbeat value must be 0 < heartbeat < 65536, using %d\n",  			WD_TIMO);  	}  	if (!request_region(io, 8, "wdt501p")) { -		printk(KERN_ERR "wdt: I/O address 0x%04x already in use\n", io); +		printk(KERN_ERR +			"wdt: I/O address 0x%04x already in use\n", io);  		ret = -EBUSY;  		goto out;  	}  	ret = request_irq(irq, wdt_interrupt, IRQF_DISABLED, "wdt501p", NULL); -	if(ret) { +	if (ret) {  		printk(KERN_ERR "wdt: IRQ %d is not free.\n", irq);  		goto outreg;  	}  	ret = register_reboot_notifier(&wdt_notifier); -	if(ret) { -		printk(KERN_ERR "wdt: cannot register reboot notifier (err=%d)\n", ret); +	if (ret) { +		printk(KERN_ERR +		      "wdt: cannot register reboot notifier (err=%d)\n", ret);  		goto outirq;  	}  #ifdef CONFIG_WDT_501  	ret = misc_register(&temp_miscdev);  	if (ret) { -		printk(KERN_ERR "wdt: cannot register miscdev on minor=%d (err=%d)\n", -			TEMP_MINOR, ret); +		printk(KERN_ERR +			"wdt: cannot register miscdev on minor=%d (err=%d)\n", +							TEMP_MINOR, ret);  		goto outrbt;  	}  #endif /* CONFIG_WDT_501 */  	ret = misc_register(&wdt_miscdev);  	if (ret) { -		printk(KERN_ERR "wdt: cannot register miscdev on minor=%d (err=%d)\n", -			WATCHDOG_MINOR, ret); +		printk(KERN_ERR +			"wdt: cannot register miscdev on minor=%d (err=%d)\n", +							WATCHDOG_MINOR, ret);  		goto outmisc;  	} @@ -636,7 +647,8 @@ static int __init wdt_init(void)  	printk(KERN_INFO "WDT500/501-P driver 0.10 at 0x%04x (Interrupt %d). heartbeat=%d sec (nowayout=%d)\n",  		io, irq, heartbeat, nowayout);  #ifdef CONFIG_WDT_501 -	printk(KERN_INFO "wdt: Fan Tachometer is %s\n", (tachometer ? "Enabled" : "Disabled")); +	printk(KERN_INFO "wdt: Fan Tachometer is %s\n", +				(tachometer ? "Enabled" : "Disabled"));  #endif /* CONFIG_WDT_501 */  out: @@ -651,7 +663,7 @@ outrbt:  outirq:  	free_irq(irq, NULL);  outreg: -	release_region(io,8); +	release_region(io, 8);  	goto out;  } diff --git a/drivers/watchdog/wdt285.c b/drivers/watchdog/wdt285.c index e4cf661dc89..00cd6f21e76 100644 --- a/drivers/watchdog/wdt285.c +++ b/drivers/watchdog/wdt285.c @@ -29,7 +29,7 @@  #include <asm/irq.h>  #include <asm/uaccess.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/hardware/dec21285.h> diff --git a/drivers/watchdog/wdt_pci.c b/drivers/watchdog/wdt_pci.c index 1355608683e..5d922fd6eaf 100644 --- a/drivers/watchdog/wdt_pci.c +++ b/drivers/watchdog/wdt_pci.c @@ -29,9 +29,11 @@   *		JP Nollmann	:	Added support for PCI wdt501p   *		Alan Cox	:	Split ISA and PCI cards into two drivers   *		Jeff Garzik	:	PCI cleanups - *		Tigran Aivazian	:	Restructured wdtpci_init_one() to handle failures + *		Tigran Aivazian	:	Restructured wdtpci_init_one() to handle + *					failures   *		Joel Becker 	:	Added WDIOC_GET/SETTIMEOUT - *		Zwane Mwaikambo	:	Magic char closing, locking changes, cleanups + *		Zwane Mwaikambo	:	Magic char closing, locking changes, + *					cleanups   *		Matt Domsch	:	nowayout module option   */ @@ -42,14 +44,15 @@  #include <linux/miscdevice.h>  #include <linux/watchdog.h>  #include <linux/ioport.h> +#include <linux/delay.h>  #include <linux/notifier.h>  #include <linux/reboot.h>  #include <linux/init.h>  #include <linux/fs.h>  #include <linux/pci.h> +#include <linux/io.h> +#include <linux/uaccess.h> -#include <asm/io.h> -#include <asm/uaccess.h>  #include <asm/system.h>  #define WDT_IS_PCI @@ -73,7 +76,7 @@  /* We can only use 1 card due to the /dev/watchdog restriction */  static int dev_count; -static struct semaphore open_sem; +static unsigned long open_lock;  static DEFINE_SPINLOCK(wdtpci_lock);  static char expect_close; @@ -86,18 +89,23 @@ static int irq;  static int heartbeat = WD_TIMO;  static int wd_heartbeat;  module_param(heartbeat, int, 0); -MODULE_PARM_DESC(heartbeat, "Watchdog heartbeat in seconds. (0<heartbeat<65536, default=" __MODULE_STRING(WD_TIMO) ")"); +MODULE_PARM_DESC(heartbeat, +		"Watchdog heartbeat in seconds. (0<heartbeat<65536, default=" +				__MODULE_STRING(WD_TIMO) ")");  static int nowayout = WATCHDOG_NOWAYOUT;  module_param(nowayout, int, 0); -MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); +MODULE_PARM_DESC(nowayout, +		"Watchdog cannot be stopped once started (default=" +				__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");  #ifdef CONFIG_WDT_501_PCI  /* Support for the Fan Tachometer on the PCI-WDT501 */  static int tachometer;  module_param(tachometer, int, 0); -MODULE_PARM_DESC(tachometer, "PCI-WDT501 Fan Tachometer support (0=disable, default=0)"); +MODULE_PARM_DESC(tachometer, +	"PCI-WDT501 Fan Tachometer support (0=disable, default=0)");  #endif /* CONFIG_WDT_501_PCI */  /* @@ -106,16 +114,19 @@ MODULE_PARM_DESC(tachometer, "PCI-WDT501 Fan Tachometer support (0=disable, defa  static void wdtpci_ctr_mode(int ctr, int mode)  { -	ctr<<=6; -	ctr|=0x30; -	ctr|=(mode<<1); -	outb_p(ctr, WDT_CR); +	ctr <<= 6; +	ctr |= 0x30; +	ctr |= (mode << 1); +	outb(ctr, WDT_CR); +	udelay(8);  }  static void wdtpci_ctr_load(int ctr, int val)  { -	outb_p(val&0xFF, WDT_COUNT0+ctr); -	outb_p(val>>8, WDT_COUNT0+ctr); +	outb(val & 0xFF, WDT_COUNT0 + ctr); +	udelay(8); +	outb(val >> 8, WDT_COUNT0 + ctr); +	udelay(8);  }  /** @@ -134,23 +145,35 @@ static int wdtpci_start(void)  	 * "pet" the watchdog, as Access says.  	 * This resets the clock outputs.  	 */ -	inb_p(WDT_DC);			/* Disable watchdog */ -	wdtpci_ctr_mode(2,0);		/* Program CTR2 for Mode 0: Pulse on Terminal Count */ -	outb_p(0, WDT_DC);		/* Enable watchdog */ - -	inb_p(WDT_DC);			/* Disable watchdog */ -	outb_p(0, WDT_CLOCK);		/* 2.0833MHz clock */ -	inb_p(WDT_BUZZER);		/* disable */ -	inb_p(WDT_OPTONOTRST);		/* disable */ -	inb_p(WDT_OPTORST);		/* disable */ -	inb_p(WDT_PROGOUT);		/* disable */ -	wdtpci_ctr_mode(0,3);		/* Program CTR0 for Mode 3: Square Wave Generator */ -	wdtpci_ctr_mode(1,2);		/* Program CTR1 for Mode 2: Rate Generator */ -	wdtpci_ctr_mode(2,1);		/* Program CTR2 for Mode 1: Retriggerable One-Shot */ -	wdtpci_ctr_load(0,20833);	/* count at 100Hz */ -	wdtpci_ctr_load(1,wd_heartbeat);/* Heartbeat */ +	inb(WDT_DC);			/* Disable watchdog */ +	udelay(8); +	wdtpci_ctr_mode(2, 0);		/* Program CTR2 for Mode 0: +						Pulse on Terminal Count */ +	outb(0, WDT_DC);		/* Enable watchdog */ +	udelay(8); +	inb(WDT_DC);			/* Disable watchdog */ +	udelay(8); +	outb(0, WDT_CLOCK);		/* 2.0833MHz clock */ +	udelay(8); +	inb(WDT_BUZZER);		/* disable */ +	udelay(8); +	inb(WDT_OPTONOTRST);		/* disable */ +	udelay(8); +	inb(WDT_OPTORST);		/* disable */ +	udelay(8); +	inb(WDT_PROGOUT);		/* disable */ +	udelay(8); +	wdtpci_ctr_mode(0, 3);		/* Program CTR0 for Mode 3: +						Square Wave Generator */ +	wdtpci_ctr_mode(1, 2);		/* Program CTR1 for Mode 2: +						Rate Generator */ +	wdtpci_ctr_mode(2, 1);		/* Program CTR2 for Mode 1: +						Retriggerable One-Shot */ +	wdtpci_ctr_load(0, 20833);	/* count at 100Hz */ +	wdtpci_ctr_load(1, wd_heartbeat);/* Heartbeat */  	/* DO NOT LOAD CTR2 on PCI card! -- JPN */ -	outb_p(0, WDT_DC);		/* Enable watchdog */ +	outb(0, WDT_DC);		/* Enable watchdog */ +	udelay(8);  	spin_unlock_irqrestore(&wdtpci_lock, flags);  	return 0; @@ -162,14 +185,15 @@ static int wdtpci_start(void)   *	Stop the watchdog driver.   */ -static int wdtpci_stop (void) +static int wdtpci_stop(void)  {  	unsigned long flags;  	/* Turn the card off */  	spin_lock_irqsave(&wdtpci_lock, flags); -	inb_p(WDT_DC);			/* Disable watchdog */ -	wdtpci_ctr_load(2,0);		/* 0 length reset pulses now */ +	inb(WDT_DC);			/* Disable watchdog */ +	udelay(8); +	wdtpci_ctr_load(2, 0);		/* 0 length reset pulses now */  	spin_unlock_irqrestore(&wdtpci_lock, flags);  	return 0;  } @@ -177,20 +201,23 @@ static int wdtpci_stop (void)  /**   *	wdtpci_ping:   * - *	Reload counter one with the watchdog heartbeat. We don't bother reloading - *	the cascade counter. + *	Reload counter one with the watchdog heartbeat. We don't bother + *	reloading the cascade counter.   */  static int wdtpci_ping(void)  {  	unsigned long flags; -	/* Write a watchdog value */  	spin_lock_irqsave(&wdtpci_lock, flags); -	inb_p(WDT_DC);			/* Disable watchdog */ -	wdtpci_ctr_mode(1,2);		/* Re-Program CTR1 for Mode 2: Rate Generator */ -	wdtpci_ctr_load(1,wd_heartbeat);/* Heartbeat */ -	outb_p(0, WDT_DC);		/* Enable watchdog */ +	/* Write a watchdog value */ +	inb(WDT_DC);			/* Disable watchdog */ +	udelay(8); +	wdtpci_ctr_mode(1, 2);		/* Re-Program CTR1 for Mode 2: +							Rate Generator */ +	wdtpci_ctr_load(1, wd_heartbeat);/* Heartbeat */ +	outb(0, WDT_DC);		/* Enable watchdog */ +	udelay(8);  	spin_unlock_irqrestore(&wdtpci_lock, flags);  	return 0;  } @@ -199,14 +226,14 @@ static int wdtpci_ping(void)   *	wdtpci_set_heartbeat:   *	@t:		the new heartbeat value that needs to be set.   * - *	Set a new heartbeat value for the watchdog device. If the heartbeat value is - *	incorrect we keep the old value and return -EINVAL. If successfull we - *	return 0. + *	Set a new heartbeat value for the watchdog device. If the heartbeat + *	value is incorrect we keep the old value and return -EINVAL. + *	If successful we return 0.   */  static int wdtpci_set_heartbeat(int t)  {  	/* Arbitrary, can't find the card's limits */ -	if ((t < 1) || (t > 65535)) +	if (t < 1 || t > 65535)  		return -EINVAL;  	heartbeat = t; @@ -227,9 +254,14 @@ static int wdtpci_set_heartbeat(int t)  static int wdtpci_get_status(int *status)  { -	unsigned char new_status=inb_p(WDT_SR); +	unsigned char new_status; +	unsigned long flags; + +	spin_lock_irqsave(&wdtpci_lock, flags); +	new_status = inb(WDT_SR); +	spin_unlock_irqrestore(&wdtpci_lock, flags); -	*status=0; +	*status = 0;  	if (new_status & WDC_SR_ISOI0)  		*status |= WDIOF_EXTERN1;  	if (new_status & WDC_SR_ISII1) @@ -259,8 +291,12 @@ static int wdtpci_get_status(int *status)  static int wdtpci_get_temperature(int *temperature)  { -	unsigned short c=inb_p(WDT_RT); - +	unsigned short c; +	unsigned long flags; +	spin_lock_irqsave(&wdtpci_lock, flags); +	c = inb(WDT_RT); +	udelay(8); +	spin_unlock_irqrestore(&wdtpci_lock, flags);  	*temperature = (c * 11 / 15) + 7;  	return 0;  } @@ -282,17 +318,25 @@ static irqreturn_t wdtpci_interrupt(int irq, void *dev_id)  	 *	Read the status register see what is up and  	 *	then printk it.  	 */ -	unsigned char status=inb_p(WDT_SR); +	unsigned char status; + +	spin_lock(&wdtpci_lock); + +	status = inb(WDT_SR); +	udelay(8);  	printk(KERN_CRIT PFX "status %d\n", status);  #ifdef CONFIG_WDT_501_PCI -	if (!(status & WDC_SR_TGOOD)) - 		printk(KERN_CRIT PFX "Overheat alarm.(%d)\n",inb_p(WDT_RT)); +	if (!(status & WDC_SR_TGOOD)) { +		u8 alarm = inb(WDT_RT); +		printk(KERN_CRIT PFX "Overheat alarm.(%d)\n", alarm); +		udelay(8); +	}  	if (!(status & WDC_SR_PSUOVER)) - 		printk(KERN_CRIT PFX "PSU over voltage.\n"); +		printk(KERN_CRIT PFX "PSU over voltage.\n");  	if (!(status & WDC_SR_PSUUNDR)) - 		printk(KERN_CRIT PFX "PSU under voltage.\n"); +		printk(KERN_CRIT PFX "PSU under voltage.\n");  	if (tachometer) {  		if (!(status & WDC_SR_FANGOOD))  			printk(KERN_CRIT PFX "Possible fan fault.\n"); @@ -310,6 +354,7 @@ static irqreturn_t wdtpci_interrupt(int irq, void *dev_id)  		printk(KERN_CRIT PFX "Reset in 5ms.\n");  #endif  	} +	spin_unlock(&wdtpci_lock);  	return IRQ_HANDLED;  } @@ -325,7 +370,8 @@ static irqreturn_t wdtpci_interrupt(int irq, void *dev_id)   *	write of data will do, as we we don't define content meaning.   */ -static ssize_t wdtpci_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) +static ssize_t wdtpci_write(struct file *file, const char __user *buf, +					size_t count, loff_t *ppos)  {  	if (count) {  		if (!nowayout) { @@ -335,7 +381,7 @@ static ssize_t wdtpci_write(struct file *file, const char __user *buf, size_t co  			for (i = 0; i != count; i++) {  				char c; -				if(get_user(c, buf+i)) +				if (get_user(c, buf+i))  					return -EFAULT;  				if (c == 'V')  					expect_close = 42; @@ -343,13 +389,11 @@ static ssize_t wdtpci_write(struct file *file, const char __user *buf, size_t co  		}  		wdtpci_ping();  	} -  	return count;  }  /**   *	wdtpci_ioctl: - *	@inode: inode of the device   *	@file: file handle to the device   *	@cmd: watchdog command   *	@arg: argument pointer @@ -359,8 +403,8 @@ static ssize_t wdtpci_write(struct file *file, const char __user *buf, size_t co   *	querying capabilities and current status.   */ -static int wdtpci_ioctl(struct inode *inode, struct file *file, unsigned int cmd, -	unsigned long arg) +static long wdtpci_ioctl(struct file *file, unsigned int cmd, +							unsigned long arg)  {  	int new_heartbeat;  	int status; @@ -383,33 +427,29 @@ static int wdtpci_ioctl(struct inode *inode, struct file *file, unsigned int cmd  		ident.options |= WDIOF_FANFAULT;  #endif /* CONFIG_WDT_501_PCI */ -	switch(cmd) -	{ -		default: -			return -ENOTTY; -		case WDIOC_GETSUPPORT: -			return copy_to_user(argp, &ident, sizeof(ident))?-EFAULT:0; - -		case WDIOC_GETSTATUS: -			wdtpci_get_status(&status); -			return put_user(status, p); -		case WDIOC_GETBOOTSTATUS: -			return put_user(0, p); -		case WDIOC_KEEPALIVE: -			wdtpci_ping(); -			return 0; -		case WDIOC_SETTIMEOUT: -			if (get_user(new_heartbeat, p)) -				return -EFAULT; - -			if (wdtpci_set_heartbeat(new_heartbeat)) -				return -EINVAL; - -			wdtpci_ping(); -			/* Fall */ -		case WDIOC_GETTIMEOUT: -			return put_user(heartbeat, p); -	} +	switch (cmd) { +	default: +		return -ENOTTY; +	case WDIOC_GETSUPPORT: +		return copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0; +	case WDIOC_GETSTATUS: +		wdtpci_get_status(&status); +		return put_user(status, p); +	case WDIOC_GETBOOTSTATUS: +		return put_user(0, p); +	case WDIOC_KEEPALIVE: +		wdtpci_ping(); +		return 0; +	case WDIOC_SETTIMEOUT: +		if (get_user(new_heartbeat, p)) +			return -EFAULT; +		if (wdtpci_set_heartbeat(new_heartbeat)) +			return -EINVAL; +		wdtpci_ping(); +		/* Fall */ +	case WDIOC_GETTIMEOUT: +		return put_user(heartbeat, p); +		}  }  /** @@ -426,12 +466,11 @@ static int wdtpci_ioctl(struct inode *inode, struct file *file, unsigned int cmd  static int wdtpci_open(struct inode *inode, struct file *file)  { -	if (down_trylock(&open_sem)) +	if (test_and_set_bit(0, &open_lock))  		return -EBUSY; -	if (nowayout) { +	if (nowayout)  		__module_get(THIS_MODULE); -	}  	/*  	 *	Activate  	 */ @@ -460,7 +499,7 @@ static int wdtpci_release(struct inode *inode, struct file *file)  		wdtpci_ping();  	}  	expect_close = 0; -	up(&open_sem); +	clear_bit(0, &open_lock);  	return 0;  } @@ -476,14 +515,15 @@ static int wdtpci_release(struct inode *inode, struct file *file)   *	fahrenheit. It was designed by an imperial measurement luddite.   */ -static ssize_t wdtpci_temp_read(struct file *file, char __user *buf, size_t count, loff_t *ptr) +static ssize_t wdtpci_temp_read(struct file *file, char __user *buf, +						size_t count, loff_t *ptr)  {  	int temperature;  	if (wdtpci_get_temperature(&temperature))  		return -EFAULT; -	if (copy_to_user (buf, &temperature, 1)) +	if (copy_to_user(buf, &temperature, 1))  		return -EFAULT;  	return 1; @@ -529,12 +569,10 @@ static int wdtpci_temp_release(struct inode *inode, struct file *file)   */  static int wdtpci_notify_sys(struct notifier_block *this, unsigned long code, -	void *unused) +							void *unused)  { -	if (code==SYS_DOWN || code==SYS_HALT) { -		/* Turn the card off */ +	if (code == SYS_DOWN || code == SYS_HALT)  		wdtpci_stop(); -	}  	return NOTIFY_DONE;  } @@ -547,7 +585,7 @@ static const struct file_operations wdtpci_fops = {  	.owner		= THIS_MODULE,  	.llseek		= no_llseek,  	.write		= wdtpci_write, -	.ioctl		= wdtpci_ioctl, +	.unlocked_ioctl	= wdtpci_ioctl,  	.open		= wdtpci_open,  	.release	= wdtpci_release,  }; @@ -584,80 +622,85 @@ static struct notifier_block wdtpci_notifier = {  }; -static int __devinit wdtpci_init_one (struct pci_dev *dev, -				   const struct pci_device_id *ent) +static int __devinit wdtpci_init_one(struct pci_dev *dev, +					const struct pci_device_id *ent)  {  	int ret = -EIO;  	dev_count++;  	if (dev_count > 1) { -		printk (KERN_ERR PFX "this driver only supports 1 device\n"); +		printk(KERN_ERR PFX "This driver only supports one device\n");  		return -ENODEV;  	} -	if (pci_enable_device (dev)) { -		printk (KERN_ERR PFX "Not possible to enable PCI Device\n"); +	if (pci_enable_device(dev)) { +		printk(KERN_ERR PFX "Not possible to enable PCI Device\n");  		return -ENODEV;  	} -	if (pci_resource_start (dev, 2) == 0x0000) { -		printk (KERN_ERR PFX "No I/O-Address for card detected\n"); +	if (pci_resource_start(dev, 2) == 0x0000) { +		printk(KERN_ERR PFX "No I/O-Address for card detected\n");  		ret = -ENODEV;  		goto out_pci;  	} -	sema_init(&open_sem, 1); -  	irq = dev->irq; -	io = pci_resource_start (dev, 2); +	io = pci_resource_start(dev, 2); -	if (request_region (io, 16, "wdt_pci") == NULL) { -		printk (KERN_ERR PFX "I/O address 0x%04x already in use\n", io); +	if (request_region(io, 16, "wdt_pci") == NULL) { +		printk(KERN_ERR PFX "I/O address 0x%04x already in use\n", io);  		goto out_pci;  	} -	if (request_irq (irq, wdtpci_interrupt, IRQF_DISABLED | IRQF_SHARED, +	if (request_irq(irq, wdtpci_interrupt, IRQF_DISABLED | IRQF_SHARED,  			 "wdt_pci", &wdtpci_miscdev)) { -		printk (KERN_ERR PFX "IRQ %d is not free\n", irq); +		printk(KERN_ERR PFX "IRQ %d is not free\n", irq);  		goto out_reg;  	} -	printk ("PCI-WDT500/501 (PCI-WDG-CSM) driver 0.10 at 0x%04x (Interrupt %d)\n", -		io, irq); +	printk(KERN_INFO +	 "PCI-WDT500/501 (PCI-WDG-CSM) driver 0.10 at 0x%04x (Interrupt %d)\n", +								io, irq); -	/* Check that the heartbeat value is within it's range ; if not reset to the default */ +	/* Check that the heartbeat value is within its range; +	   if not reset to the default */  	if (wdtpci_set_heartbeat(heartbeat)) {  		wdtpci_set_heartbeat(WD_TIMO); -		printk(KERN_INFO PFX "heartbeat value must be 0<heartbeat<65536, using %d\n", -			WD_TIMO); +		printk(KERN_INFO PFX +		  "heartbeat value must be 0 < heartbeat < 65536, using %d\n", +								WD_TIMO);  	} -	ret = register_reboot_notifier (&wdtpci_notifier); +	ret = register_reboot_notifier(&wdtpci_notifier);  	if (ret) { -		printk (KERN_ERR PFX "cannot register reboot notifier (err=%d)\n", ret); +		printk(KERN_ERR PFX +			"cannot register reboot notifier (err=%d)\n", ret);  		goto out_irq;  	}  #ifdef CONFIG_WDT_501_PCI -	ret = misc_register (&temp_miscdev); +	ret = misc_register(&temp_miscdev);  	if (ret) { -		printk (KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", -			TEMP_MINOR, ret); +		printk(KERN_ERR PFX +			"cannot register miscdev on minor=%d (err=%d)\n", +					TEMP_MINOR, ret);  		goto out_rbt;  	}  #endif /* CONFIG_WDT_501_PCI */ -	ret = misc_register (&wdtpci_miscdev); +	ret = misc_register(&wdtpci_miscdev);  	if (ret) { -		printk (KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", -			WATCHDOG_MINOR, ret); +		printk(KERN_ERR PFX +			"cannot register miscdev on minor=%d (err=%d)\n", +						WATCHDOG_MINOR, ret);  		goto out_misc;  	}  	printk(KERN_INFO PFX "initialized. heartbeat=%d sec (nowayout=%d)\n",  		heartbeat, nowayout);  #ifdef CONFIG_WDT_501_PCI -	printk(KERN_INFO "wdt: Fan Tachometer is %s\n", (tachometer ? "Enabled" : "Disabled")); +	printk(KERN_INFO "wdt: Fan Tachometer is %s\n", +				(tachometer ? "Enabled" : "Disabled"));  #endif /* CONFIG_WDT_501_PCI */  	ret = 0; @@ -673,14 +716,14 @@ out_rbt:  out_irq:  	free_irq(irq, &wdtpci_miscdev);  out_reg: -	release_region (io, 16); +	release_region(io, 16);  out_pci:  	pci_disable_device(dev);  	goto out;  } -static void __devexit wdtpci_remove_one (struct pci_dev *pdev) +static void __devexit wdtpci_remove_one(struct pci_dev *pdev)  {  	/* here we assume only one device will ever have  	 * been picked up and registered by probe function */ @@ -728,7 +771,7 @@ static struct pci_driver wdtpci_driver = {  static void __exit wdtpci_cleanup(void)  { -	pci_unregister_driver (&wdtpci_driver); +	pci_unregister_driver(&wdtpci_driver);  } @@ -742,7 +785,7 @@ static void __exit wdtpci_cleanup(void)  static int __init wdtpci_init(void)  { -	return pci_register_driver (&wdtpci_driver); +	return pci_register_driver(&wdtpci_driver);  } diff --git a/firmware/ihex2fw.c b/firmware/ihex2fw.c index 660b191ed75..8f7fdaa9e01 100644 --- a/firmware/ihex2fw.c +++ b/firmware/ihex2fw.c @@ -250,19 +250,19 @@ static void file_record(struct ihex_binrec *record)  static int output_records(int outfd)  { -	unsigned char zeroes[5] = {0, 0, 0, 0, 0}; +	unsigned char zeroes[6] = {0, 0, 0, 0, 0, 0};  	struct ihex_binrec *p = records;  	while (p) {  		uint16_t writelen = (p->len + 9) & ~3;  		p->addr = htonl(p->addr); -		p->len = htonl(p->len); +		p->len = htons(p->len);  		write(outfd, &p->addr, writelen);  		p = p->next;  	}  	/* EOF record is zero length, since we don't bother to represent  	   the type field in the binary version */ -	write(outfd, zeroes, 5); +	write(outfd, zeroes, 6);  	return 0;  } diff --git a/fs/afs/write.c b/fs/afs/write.c index 9a849ad3c48..065b4e10681 100644 --- a/fs/afs/write.c +++ b/fs/afs/write.c @@ -404,7 +404,7 @@ static int afs_write_back_from_locked_page(struct afs_writeback *wb,  			page = pages[loop];  			if (page->index > wb->last)  				break; -			if (TestSetPageLocked(page)) +			if (!trylock_page(page))  				break;  			if (!PageDirty(page) ||  			    page_private(page) != (unsigned long) wb) { diff --git a/fs/buffer.c b/fs/buffer.c index 4dbe52948e8..38653e36e22 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -1720,7 +1720,7 @@ static int __block_write_full_page(struct inode *inode, struct page *page,  		 */  		if (wbc->sync_mode != WB_SYNC_NONE || !wbc->nonblocking) {  			lock_buffer(bh); -		} else if (test_set_buffer_locked(bh)) { +		} else if (!trylock_buffer(bh)) {  			redirty_page_for_writepage(wbc, page);  			continue;  		} @@ -3000,7 +3000,7 @@ void ll_rw_block(int rw, int nr, struct buffer_head *bhs[])  		if (rw == SWRITE || rw == SWRITE_SYNC)  			lock_buffer(bh); -		else if (test_set_buffer_locked(bh)) +		else if (!trylock_buffer(bh))  			continue;  		if (rw == WRITE || rw == SWRITE || rw == SWRITE_SYNC) { diff --git a/fs/cifs/file.c b/fs/cifs/file.c index 0aac824371a..e692c42f24b 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -1280,7 +1280,7 @@ retry:  			if (first < 0)  				lock_page(page); -			else if (TestSetPageLocked(page)) +			else if (!trylock_page(page))  				break;  			if (unlikely(page->mapping != mapping)) { diff --git a/fs/ext4/acl.c b/fs/ext4/acl.c index c7d04e16544..694ed6fadcc 100644 --- a/fs/ext4/acl.c +++ b/fs/ext4/acl.c @@ -40,34 +40,35 @@ ext4_acl_from_disk(const void *value, size_t size)  	acl = posix_acl_alloc(count, GFP_NOFS);  	if (!acl)  		return ERR_PTR(-ENOMEM); -	for (n=0; n < count; n++) { +	for (n = 0; n < count; n++) {  		ext4_acl_entry *entry =  			(ext4_acl_entry *)value;  		if ((char *)value + sizeof(ext4_acl_entry_short) > end)  			goto fail;  		acl->a_entries[n].e_tag  = le16_to_cpu(entry->e_tag);  		acl->a_entries[n].e_perm = le16_to_cpu(entry->e_perm); -		switch(acl->a_entries[n].e_tag) { -			case ACL_USER_OBJ: -			case ACL_GROUP_OBJ: -			case ACL_MASK: -			case ACL_OTHER: -				value = (char *)value + -					sizeof(ext4_acl_entry_short); -				acl->a_entries[n].e_id = ACL_UNDEFINED_ID; -				break; -			case ACL_USER: -			case ACL_GROUP: -				value = (char *)value + sizeof(ext4_acl_entry); -				if ((char *)value > end) -					goto fail; -				acl->a_entries[n].e_id = -					le32_to_cpu(entry->e_id); -				break; +		switch (acl->a_entries[n].e_tag) { +		case ACL_USER_OBJ: +		case ACL_GROUP_OBJ: +		case ACL_MASK: +		case ACL_OTHER: +			value = (char *)value + +				sizeof(ext4_acl_entry_short); +			acl->a_entries[n].e_id = ACL_UNDEFINED_ID; +			break; -			default: +		case ACL_USER: +		case ACL_GROUP: +			value = (char *)value + sizeof(ext4_acl_entry); +			if ((char *)value > end)  				goto fail; +			acl->a_entries[n].e_id = +				le32_to_cpu(entry->e_id); +			break; + +		default: +			goto fail;  		}  	}  	if (value != end) @@ -96,27 +97,26 @@ ext4_acl_to_disk(const struct posix_acl *acl, size_t *size)  		return ERR_PTR(-ENOMEM);  	ext_acl->a_version = cpu_to_le32(EXT4_ACL_VERSION);  	e = (char *)ext_acl + sizeof(ext4_acl_header); -	for (n=0; n < acl->a_count; n++) { +	for (n = 0; n < acl->a_count; n++) {  		ext4_acl_entry *entry = (ext4_acl_entry *)e;  		entry->e_tag  = cpu_to_le16(acl->a_entries[n].e_tag);  		entry->e_perm = cpu_to_le16(acl->a_entries[n].e_perm); -		switch(acl->a_entries[n].e_tag) { -			case ACL_USER: -			case ACL_GROUP: -				entry->e_id = -					cpu_to_le32(acl->a_entries[n].e_id); -				e += sizeof(ext4_acl_entry); -				break; +		switch (acl->a_entries[n].e_tag) { +		case ACL_USER: +		case ACL_GROUP: +			entry->e_id = cpu_to_le32(acl->a_entries[n].e_id); +			e += sizeof(ext4_acl_entry); +			break; -			case ACL_USER_OBJ: -			case ACL_GROUP_OBJ: -			case ACL_MASK: -			case ACL_OTHER: -				e += sizeof(ext4_acl_entry_short); -				break; +		case ACL_USER_OBJ: +		case ACL_GROUP_OBJ: +		case ACL_MASK: +		case ACL_OTHER: +			e += sizeof(ext4_acl_entry_short); +			break; -			default: -				goto fail; +		default: +			goto fail;  		}  	}  	return (char *)ext_acl; @@ -167,23 +167,23 @@ ext4_get_acl(struct inode *inode, int type)  	if (!test_opt(inode->i_sb, POSIX_ACL))  		return NULL; -	switch(type) { -		case ACL_TYPE_ACCESS: -			acl = ext4_iget_acl(inode, &ei->i_acl); -			if (acl != EXT4_ACL_NOT_CACHED) -				return acl; -			name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS; -			break; +	switch (type) { +	case ACL_TYPE_ACCESS: +		acl = ext4_iget_acl(inode, &ei->i_acl); +		if (acl != EXT4_ACL_NOT_CACHED) +			return acl; +		name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS; +		break; -		case ACL_TYPE_DEFAULT: -			acl = ext4_iget_acl(inode, &ei->i_default_acl); -			if (acl != EXT4_ACL_NOT_CACHED) -				return acl; -			name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT; -			break; +	case ACL_TYPE_DEFAULT: +		acl = ext4_iget_acl(inode, &ei->i_default_acl); +		if (acl != EXT4_ACL_NOT_CACHED) +			return acl; +		name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT; +		break; -		default: -			return ERR_PTR(-EINVAL); +	default: +		return ERR_PTR(-EINVAL);  	}  	retval = ext4_xattr_get(inode, name_index, "", NULL, 0);  	if (retval > 0) { @@ -201,14 +201,14 @@ ext4_get_acl(struct inode *inode, int type)  	kfree(value);  	if (!IS_ERR(acl)) { -		switch(type) { -			case ACL_TYPE_ACCESS: -				ext4_iset_acl(inode, &ei->i_acl, acl); -				break; +		switch (type) { +		case ACL_TYPE_ACCESS: +			ext4_iset_acl(inode, &ei->i_acl, acl); +			break; -			case ACL_TYPE_DEFAULT: -				ext4_iset_acl(inode, &ei->i_default_acl, acl); -				break; +		case ACL_TYPE_DEFAULT: +			ext4_iset_acl(inode, &ei->i_default_acl, acl); +			break;  		}  	}  	return acl; @@ -232,31 +232,31 @@ ext4_set_acl(handle_t *handle, struct inode *inode, int type,  	if (S_ISLNK(inode->i_mode))  		return -EOPNOTSUPP; -	switch(type) { -		case ACL_TYPE_ACCESS: -			name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS; -			if (acl) { -				mode_t mode = inode->i_mode; -				error = posix_acl_equiv_mode(acl, &mode); -				if (error < 0) -					return error; -				else { -					inode->i_mode = mode; -					ext4_mark_inode_dirty(handle, inode); -					if (error == 0) -						acl = NULL; -				} +	switch (type) { +	case ACL_TYPE_ACCESS: +		name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS; +		if (acl) { +			mode_t mode = inode->i_mode; +			error = posix_acl_equiv_mode(acl, &mode); +			if (error < 0) +				return error; +			else { +				inode->i_mode = mode; +				ext4_mark_inode_dirty(handle, inode); +				if (error == 0) +					acl = NULL;  			} -			break; +		} +		break; -		case ACL_TYPE_DEFAULT: -			name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT; -			if (!S_ISDIR(inode->i_mode)) -				return acl ? -EACCES : 0; -			break; +	case ACL_TYPE_DEFAULT: +		name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT; +		if (!S_ISDIR(inode->i_mode)) +			return acl ? -EACCES : 0; +		break; -		default: -			return -EINVAL; +	default: +		return -EINVAL;  	}  	if (acl) {  		value = ext4_acl_to_disk(acl, &size); @@ -269,14 +269,14 @@ ext4_set_acl(handle_t *handle, struct inode *inode, int type,  	kfree(value);  	if (!error) { -		switch(type) { -			case ACL_TYPE_ACCESS: -				ext4_iset_acl(inode, &ei->i_acl, acl); -				break; +		switch (type) { +		case ACL_TYPE_ACCESS: +			ext4_iset_acl(inode, &ei->i_acl, acl); +			break; -			case ACL_TYPE_DEFAULT: -				ext4_iset_acl(inode, &ei->i_default_acl, acl); -				break; +		case ACL_TYPE_DEFAULT: +			ext4_iset_acl(inode, &ei->i_default_acl, acl); +			break;  		}  	}  	return error; diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index 495ab21b983..1ae5004e93f 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c @@ -314,25 +314,28 @@ ext4_read_block_bitmap(struct super_block *sb, ext4_group_t block_group)  	if (unlikely(!bh)) {  		ext4_error(sb, __func__,  			    "Cannot read block bitmap - " -			    "block_group = %d, block_bitmap = %llu", -			    (int)block_group, (unsigned long long)bitmap_blk); +			    "block_group = %lu, block_bitmap = %llu", +			    block_group, bitmap_blk);  		return NULL;  	}  	if (bh_uptodate_or_lock(bh))  		return bh; +	spin_lock(sb_bgl_lock(EXT4_SB(sb), block_group));  	if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {  		ext4_init_block_bitmap(sb, bh, block_group, desc);  		set_buffer_uptodate(bh);  		unlock_buffer(bh); +		spin_unlock(sb_bgl_lock(EXT4_SB(sb), block_group));  		return bh;  	} +	spin_unlock(sb_bgl_lock(EXT4_SB(sb), block_group));  	if (bh_submit_read(bh) < 0) {  		put_bh(bh);  		ext4_error(sb, __func__,  			    "Cannot read block bitmap - " -			    "block_group = %d, block_bitmap = %llu", -			    (int)block_group, (unsigned long long)bitmap_blk); +			    "block_group = %lu, block_bitmap = %llu", +			    block_group, bitmap_blk);  		return NULL;  	}  	ext4_valid_block_bitmap(sb, desc, block_group, bh); diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 303e41cf7b1..6c7924d9e35 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -1044,7 +1044,6 @@ extern void ext4_mb_update_group_info(struct ext4_group_info *grp,  /* inode.c */ -void ext4_da_release_space(struct inode *inode, int used, int to_free);  int ext4_forget(handle_t *handle, int is_metadata, struct inode *inode,  		struct buffer_head *bh, ext4_fsblk_t blocknr);  struct buffer_head *ext4_getblk(handle_t *, struct inode *, diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 42c4c0c892e..612c3d2c382 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -99,7 +99,7 @@ static int ext4_ext_journal_restart(handle_t *handle, int needed)  	if (handle->h_buffer_credits > needed)  		return 0;  	err = ext4_journal_extend(handle, needed); -	if (err) +	if (err <= 0)  		return err;  	return ext4_journal_restart(handle, needed);  } @@ -1441,7 +1441,7 @@ unsigned int ext4_ext_check_overlap(struct inode *inode,  	/*  	 * get the next allocated block if the extent in the path -	 * is before the requested block(s)  +	 * is before the requested block(s)  	 */  	if (b2 < b1) {  		b2 = ext4_ext_next_allocated_block(path); @@ -1910,9 +1910,13 @@ ext4_ext_rm_leaf(handle_t *handle, struct inode *inode,  			BUG_ON(b != ex_ee_block + ex_ee_len - 1);  		} -		/* at present, extent can't cross block group: */ -		/* leaf + bitmap + group desc + sb + inode */ -		credits = 5; +		/* +		 * 3 for leaf, sb, and inode plus 2 (bmap and group +		 * descriptor) for each block group; assume two block +		 * groups plus ex_ee_len/blocks_per_block_group for +		 * the worst case +		 */ +		credits = 7 + 2*(ex_ee_len/EXT4_BLOCKS_PER_GROUP(inode->i_sb));  		if (ex == EXT_FIRST_EXTENT(eh)) {  			correct_index = 1;  			credits += (ext_depth(inode)) + 1; @@ -2323,7 +2327,10 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,  		unsigned int newdepth;  		/* If extent has less than EXT4_EXT_ZERO_LEN zerout directly */  		if (allocated <= EXT4_EXT_ZERO_LEN) { -			/* Mark first half uninitialized. +			/* +			 * iblock == ee_block is handled by the zerouout +			 * at the beginning. +			 * Mark first half uninitialized.  			 * Mark second half initialized and zero out the  			 * initialized extent  			 */ @@ -2346,7 +2353,7 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,  				ex->ee_len   = orig_ex.ee_len;  				ext4_ext_store_pblock(ex, ext_pblock(&orig_ex));  				ext4_ext_dirty(handle, inode, path + depth); -				/* zeroed the full extent */ +				/* blocks available from iblock */  				return allocated;  			} else if (err) @@ -2374,6 +2381,7 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,  					err = PTR_ERR(path);  					return err;  				} +				/* get the second half extent details */  				ex = path[depth].p_ext;  				err = ext4_ext_get_access(handle, inode,  								path + depth); @@ -2403,6 +2411,7 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,  			ext4_ext_store_pblock(ex, ext_pblock(&orig_ex));  			ext4_ext_dirty(handle, inode, path + depth);  			/* zeroed the full extent */ +			/* blocks available from iblock */  			return allocated;  		} else if (err) @@ -2418,23 +2427,22 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,  		 */  		orig_ex.ee_len = cpu_to_le16(ee_len -  						ext4_ext_get_actual_len(ex3)); -		if (newdepth != depth) { -			depth = newdepth; -			ext4_ext_drop_refs(path); -			path = ext4_ext_find_extent(inode, iblock, path); -			if (IS_ERR(path)) { -				err = PTR_ERR(path); -				goto out; -			} -			eh = path[depth].p_hdr; -			ex = path[depth].p_ext; -			if (ex2 != &newex) -				ex2 = ex; - -			err = ext4_ext_get_access(handle, inode, path + depth); -			if (err) -				goto out; +		depth = newdepth; +		ext4_ext_drop_refs(path); +		path = ext4_ext_find_extent(inode, iblock, path); +		if (IS_ERR(path)) { +			err = PTR_ERR(path); +			goto out;  		} +		eh = path[depth].p_hdr; +		ex = path[depth].p_ext; +		if (ex2 != &newex) +			ex2 = ex; + +		err = ext4_ext_get_access(handle, inode, path + depth); +		if (err) +			goto out; +  		allocated = max_blocks;  		/* If extent has less than EXT4_EXT_ZERO_LEN and we are trying @@ -2452,6 +2460,7 @@ static int ext4_ext_convert_to_initialized(handle_t *handle,  			ext4_ext_store_pblock(ex, ext_pblock(&orig_ex));  			ext4_ext_dirty(handle, inode, path + depth);  			/* zero out the first half */ +			/* blocks available from iblock */  			return allocated;  		}  	} diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index a92eb305344..655e760212b 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c @@ -97,34 +97,44 @@ unsigned ext4_init_inode_bitmap(struct super_block *sb, struct buffer_head *bh,   * Return buffer_head of bitmap on success or NULL.   */  static struct buffer_head * -read_inode_bitmap(struct super_block *sb, ext4_group_t block_group) +ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)  {  	struct ext4_group_desc *desc;  	struct buffer_head *bh = NULL; +	ext4_fsblk_t bitmap_blk;  	desc = ext4_get_group_desc(sb, block_group, NULL);  	if (!desc) -		goto error_out; +		return NULL; +	bitmap_blk = ext4_inode_bitmap(sb, desc); +	bh = sb_getblk(sb, bitmap_blk); +	if (unlikely(!bh)) { +		ext4_error(sb, __func__, +			    "Cannot read inode bitmap - " +			    "block_group = %lu, inode_bitmap = %llu", +			    block_group, bitmap_blk); +		return NULL; +	} +	if (bh_uptodate_or_lock(bh)) +		return bh; + +	spin_lock(sb_bgl_lock(EXT4_SB(sb), block_group));  	if (desc->bg_flags & cpu_to_le16(EXT4_BG_INODE_UNINIT)) { -		bh = sb_getblk(sb, ext4_inode_bitmap(sb, desc)); -		if (!buffer_uptodate(bh)) { -			lock_buffer(bh); -			if (!buffer_uptodate(bh)) { -				ext4_init_inode_bitmap(sb, bh, block_group, -						       desc); -				set_buffer_uptodate(bh); -			} -			unlock_buffer(bh); -		} -	} else { -		bh = sb_bread(sb, ext4_inode_bitmap(sb, desc)); +		ext4_init_inode_bitmap(sb, bh, block_group, desc); +		set_buffer_uptodate(bh); +		unlock_buffer(bh); +		spin_unlock(sb_bgl_lock(EXT4_SB(sb), block_group)); +		return bh;  	} -	if (!bh) -		ext4_error(sb, "read_inode_bitmap", +	spin_unlock(sb_bgl_lock(EXT4_SB(sb), block_group)); +	if (bh_submit_read(bh) < 0) { +		put_bh(bh); +		ext4_error(sb, __func__,  			    "Cannot read inode bitmap - "  			    "block_group = %lu, inode_bitmap = %llu", -			    block_group, ext4_inode_bitmap(sb, desc)); -error_out: +			    block_group, bitmap_blk); +		return NULL; +	}  	return bh;  } @@ -200,7 +210,7 @@ void ext4_free_inode (handle_t *handle, struct inode * inode)  	}  	block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb);  	bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb); -	bitmap_bh = read_inode_bitmap(sb, block_group); +	bitmap_bh = ext4_read_inode_bitmap(sb, block_group);  	if (!bitmap_bh)  		goto error_return; @@ -623,7 +633,7 @@ got_group:  			goto fail;  		brelse(bitmap_bh); -		bitmap_bh = read_inode_bitmap(sb, group); +		bitmap_bh = ext4_read_inode_bitmap(sb, group);  		if (!bitmap_bh)  			goto fail; @@ -728,7 +738,7 @@ got:  			/* When marking the block group with  			 * ~EXT4_BG_INODE_UNINIT we don't want to depend -			 * on the value of bg_itable_unsed even though +			 * on the value of bg_itable_unused even though  			 * mke2fs could have initialized the same for us.  			 * Instead we calculated the value below  			 */ @@ -891,7 +901,7 @@ struct inode *ext4_orphan_get(struct super_block *sb, unsigned long ino)  	block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb);  	bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb); -	bitmap_bh = read_inode_bitmap(sb, block_group); +	bitmap_bh = ext4_read_inode_bitmap(sb, block_group);  	if (!bitmap_bh) {  		ext4_warning(sb, __func__,  			     "inode bitmap error for orphan %lu", ino); @@ -969,7 +979,7 @@ unsigned long ext4_count_free_inodes (struct super_block * sb)  			continue;  		desc_count += le16_to_cpu(gdp->bg_free_inodes_count);  		brelse(bitmap_bh); -		bitmap_bh = read_inode_bitmap(sb, i); +		bitmap_bh = ext4_read_inode_bitmap(sb, i);  		if (!bitmap_bh)  			continue; diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 9843b046c23..59fbbe899ac 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -191,6 +191,7 @@ static int ext4_journal_test_restart(handle_t *handle, struct inode *inode)  void ext4_delete_inode (struct inode * inode)  {  	handle_t *handle; +	int err;  	if (ext4_should_order_data(inode))  		ext4_begin_ordered_truncate(inode, 0); @@ -199,8 +200,9 @@ void ext4_delete_inode (struct inode * inode)  	if (is_bad_inode(inode))  		goto no_delete; -	handle = start_transaction(inode); +	handle = ext4_journal_start(inode, blocks_for_truncate(inode)+3);  	if (IS_ERR(handle)) { +		ext4_std_error(inode->i_sb, PTR_ERR(handle));  		/*  		 * If we're going to skip the normal cleanup, we still need to  		 * make sure that the in-core orphan linked list is properly @@ -213,8 +215,34 @@ void ext4_delete_inode (struct inode * inode)  	if (IS_SYNC(inode))  		handle->h_sync = 1;  	inode->i_size = 0; +	err = ext4_mark_inode_dirty(handle, inode); +	if (err) { +		ext4_warning(inode->i_sb, __func__, +			     "couldn't mark inode dirty (err %d)", err); +		goto stop_handle; +	}  	if (inode->i_blocks)  		ext4_truncate(inode); + +	/* +	 * ext4_ext_truncate() doesn't reserve any slop when it +	 * restarts journal transactions; therefore there may not be +	 * enough credits left in the handle to remove the inode from +	 * the orphan list and set the dtime field. +	 */ +	if (handle->h_buffer_credits < 3) { +		err = ext4_journal_extend(handle, 3); +		if (err > 0) +			err = ext4_journal_restart(handle, 3); +		if (err != 0) { +			ext4_warning(inode->i_sb, __func__, +				     "couldn't extend journal (err %d)", err); +		stop_handle: +			ext4_journal_stop(handle); +			goto no_delete; +		} +	} +  	/*  	 * Kill off the orphan record which ext4_truncate created.  	 * AKPM: I think this can be inside the above `if'. @@ -952,6 +980,67 @@ out:  	return err;  } +/* + * Calculate the number of metadata blocks need to reserve + * to allocate @blocks for non extent file based file + */ +static int ext4_indirect_calc_metadata_amount(struct inode *inode, int blocks) +{ +	int icap = EXT4_ADDR_PER_BLOCK(inode->i_sb); +	int ind_blks, dind_blks, tind_blks; + +	/* number of new indirect blocks needed */ +	ind_blks = (blocks + icap - 1) / icap; + +	dind_blks = (ind_blks + icap - 1) / icap; + +	tind_blks = 1; + +	return ind_blks + dind_blks + tind_blks; +} + +/* + * Calculate the number of metadata blocks need to reserve + * to allocate given number of blocks + */ +static int ext4_calc_metadata_amount(struct inode *inode, int blocks) +{ +	if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) +		return ext4_ext_calc_metadata_amount(inode, blocks); + +	return ext4_indirect_calc_metadata_amount(inode, blocks); +} + +static void ext4_da_update_reserve_space(struct inode *inode, int used) +{ +	struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); +	int total, mdb, mdb_free; + +	spin_lock(&EXT4_I(inode)->i_block_reservation_lock); +	/* recalculate the number of metablocks still need to be reserved */ +	total = EXT4_I(inode)->i_reserved_data_blocks - used; +	mdb = ext4_calc_metadata_amount(inode, total); + +	/* figure out how many metablocks to release */ +	BUG_ON(mdb > EXT4_I(inode)->i_reserved_meta_blocks); +	mdb_free = EXT4_I(inode)->i_reserved_meta_blocks - mdb; + +	/* Account for allocated meta_blocks */ +	mdb_free -= EXT4_I(inode)->i_allocated_meta_blocks; + +	/* update fs free blocks counter for truncate case */ +	percpu_counter_add(&sbi->s_freeblocks_counter, mdb_free); + +	/* update per-inode reservations */ +	BUG_ON(used  > EXT4_I(inode)->i_reserved_data_blocks); +	EXT4_I(inode)->i_reserved_data_blocks -= used; + +	BUG_ON(mdb > EXT4_I(inode)->i_reserved_meta_blocks); +	EXT4_I(inode)->i_reserved_meta_blocks = mdb; +	EXT4_I(inode)->i_allocated_meta_blocks = 0; +	spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); +} +  /* Maximum number of blocks we map for direct IO at once. */  #define DIO_MAX_BLOCKS 4096  /* @@ -965,10 +1054,9 @@ out:  /* + * The ext4_get_blocks_wrap() function try to look up the requested blocks, + * and returns if the blocks are already mapped.   * - * - * ext4_ext4 get_block() wrapper function - * It will do a look up first, and returns if the blocks already mapped.   * Otherwise it takes the write lock of the i_data_sem and allocate blocks   * and store the allocated blocks in the result buffer head and mark it   * mapped. @@ -1069,7 +1157,7 @@ int ext4_get_blocks_wrap(handle_t *handle, struct inode *inode, sector_t block,  		 * which were deferred till now  		 */  		if ((retval > 0) && buffer_delay(bh)) -			ext4_da_release_space(inode, retval, 0); +			ext4_da_update_reserve_space(inode, retval);  	}  	up_write((&EXT4_I(inode)->i_data_sem)); @@ -1336,12 +1424,8 @@ static int ext4_ordered_write_end(struct file *file,  {  	handle_t *handle = ext4_journal_current_handle();  	struct inode *inode = mapping->host; -	unsigned from, to;  	int ret = 0, ret2; -	from = pos & (PAGE_CACHE_SIZE - 1); -	to = from + len; -  	ret = ext4_jbd2_file_inode(handle, inode);  	if (ret == 0) { @@ -1437,36 +1521,6 @@ static int ext4_journalled_write_end(struct file *file,  	return ret ? ret : copied;  } -/* - * Calculate the number of metadata blocks need to reserve - * to allocate @blocks for non extent file based file - */ -static int ext4_indirect_calc_metadata_amount(struct inode *inode, int blocks) -{ -	int icap = EXT4_ADDR_PER_BLOCK(inode->i_sb); -	int ind_blks, dind_blks, tind_blks; - -	/* number of new indirect blocks needed */ -	ind_blks = (blocks + icap - 1) / icap; - -	dind_blks = (ind_blks + icap - 1) / icap; - -	tind_blks = 1; - -	return ind_blks + dind_blks + tind_blks; -} - -/* - * Calculate the number of metadata blocks need to reserve - * to allocate given number of blocks - */ -static int ext4_calc_metadata_amount(struct inode *inode, int blocks) -{ -	if (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL) -		return ext4_ext_calc_metadata_amount(inode, blocks); - -	return ext4_indirect_calc_metadata_amount(inode, blocks); -}  static int ext4_da_reserve_space(struct inode *inode, int nrblocks)  { @@ -1490,7 +1544,6 @@ static int ext4_da_reserve_space(struct inode *inode, int nrblocks)  		spin_unlock(&EXT4_I(inode)->i_block_reservation_lock);  		return -ENOSPC;  	} -  	/* reduce fs free blocks counter */  	percpu_counter_sub(&sbi->s_freeblocks_counter, total); @@ -1501,35 +1554,31 @@ static int ext4_da_reserve_space(struct inode *inode, int nrblocks)  	return 0;       /* success */  } -void ext4_da_release_space(struct inode *inode, int used, int to_free) +static void ext4_da_release_space(struct inode *inode, int to_free)  {  	struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);  	int total, mdb, mdb_free, release;  	spin_lock(&EXT4_I(inode)->i_block_reservation_lock);  	/* recalculate the number of metablocks still need to be reserved */ -	total = EXT4_I(inode)->i_reserved_data_blocks - used - to_free; +	total = EXT4_I(inode)->i_reserved_data_blocks - to_free;  	mdb = ext4_calc_metadata_amount(inode, total);  	/* figure out how many metablocks to release */  	BUG_ON(mdb > EXT4_I(inode)->i_reserved_meta_blocks);  	mdb_free = EXT4_I(inode)->i_reserved_meta_blocks - mdb; -	/* Account for allocated meta_blocks */ -	mdb_free -= EXT4_I(inode)->i_allocated_meta_blocks; -  	release = to_free + mdb_free;  	/* update fs free blocks counter for truncate case */  	percpu_counter_add(&sbi->s_freeblocks_counter, release);  	/* update per-inode reservations */ -	BUG_ON(used + to_free > EXT4_I(inode)->i_reserved_data_blocks); -	EXT4_I(inode)->i_reserved_data_blocks -= (used + to_free); +	BUG_ON(to_free > EXT4_I(inode)->i_reserved_data_blocks); +	EXT4_I(inode)->i_reserved_data_blocks -= to_free;  	BUG_ON(mdb > EXT4_I(inode)->i_reserved_meta_blocks);  	EXT4_I(inode)->i_reserved_meta_blocks = mdb; -	EXT4_I(inode)->i_allocated_meta_blocks = 0;  	spin_unlock(&EXT4_I(inode)->i_block_reservation_lock);  } @@ -1551,7 +1600,7 @@ static void ext4_da_page_release_reservation(struct page *page,  		}  		curr_off = next_off;  	} while ((bh = bh->b_this_page) != head); -	ext4_da_release_space(page->mapping->host, 0, to_release); +	ext4_da_release_space(page->mapping->host, to_release);  }  /* @@ -2280,8 +2329,11 @@ retry:  	}  	page = __grab_cache_page(mapping, index); -	if (!page) -		return -ENOMEM; +	if (!page) { +		ext4_journal_stop(handle); +		ret = -ENOMEM; +		goto out; +	}  	*pagep = page;  	ret = block_write_begin(file, mapping, pos, len, flags, pagep, fsdata, @@ -3590,6 +3642,16 @@ static int __ext4_get_inode_loc(struct inode *inode,  	}  	if (!buffer_uptodate(bh)) {  		lock_buffer(bh); + +		/* +		 * If the buffer has the write error flag, we have failed +		 * to write out another inode in the same block.  In this +		 * case, we don't have to read the block because we may +		 * read the old inode data successfully. +		 */ +		if (buffer_write_io_error(bh) && !buffer_uptodate(bh)) +			set_buffer_uptodate(bh); +  		if (buffer_uptodate(bh)) {  			/* someone brought it uptodate while we waited */  			unlock_buffer(bh); diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 8d141a25bbe..865e9ddb44d 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -787,13 +787,16 @@ static int ext4_mb_init_cache(struct page *page, char *incore)  		if (bh_uptodate_or_lock(bh[i]))  			continue; +		spin_lock(sb_bgl_lock(EXT4_SB(sb), first_group + i));  		if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {  			ext4_init_block_bitmap(sb, bh[i],  						first_group + i, desc);  			set_buffer_uptodate(bh[i]);  			unlock_buffer(bh[i]); +			spin_unlock(sb_bgl_lock(EXT4_SB(sb), first_group + i));  			continue;  		} +		spin_unlock(sb_bgl_lock(EXT4_SB(sb), first_group + i));  		get_bh(bh[i]);  		bh[i]->b_end_io = end_buffer_read_sync;  		submit_bh(READ, bh[i]); @@ -2477,7 +2480,7 @@ err_freesgi:  int ext4_mb_init(struct super_block *sb, int needs_recovery)  {  	struct ext4_sb_info *sbi = EXT4_SB(sb); -	unsigned i; +	unsigned i, j;  	unsigned offset;  	unsigned max;  	int ret; @@ -2537,7 +2540,7 @@ int ext4_mb_init(struct super_block *sb, int needs_recovery)  	sbi->s_mb_history_filter = EXT4_MB_HISTORY_DEFAULT;  	sbi->s_mb_group_prealloc = MB_DEFAULT_GROUP_PREALLOC; -	i = sizeof(struct ext4_locality_group) * NR_CPUS; +	i = sizeof(struct ext4_locality_group) * nr_cpu_ids;  	sbi->s_locality_groups = kmalloc(i, GFP_KERNEL);  	if (sbi->s_locality_groups == NULL) {  		clear_opt(sbi->s_mount_opt, MBALLOC); @@ -2545,11 +2548,12 @@ int ext4_mb_init(struct super_block *sb, int needs_recovery)  		kfree(sbi->s_mb_maxs);  		return -ENOMEM;  	} -	for (i = 0; i < NR_CPUS; i++) { +	for (i = 0; i < nr_cpu_ids; i++) {  		struct ext4_locality_group *lg;  		lg = &sbi->s_locality_groups[i];  		mutex_init(&lg->lg_mutex); -		INIT_LIST_HEAD(&lg->lg_prealloc_list); +		for (j = 0; j < PREALLOC_TB_SIZE; j++) +			INIT_LIST_HEAD(&lg->lg_prealloc_list[j]);  		spin_lock_init(&lg->lg_prealloc_lock);  	} @@ -3260,6 +3264,7 @@ static void ext4_mb_use_group_pa(struct ext4_allocation_context *ac,  				struct ext4_prealloc_space *pa)  {  	unsigned int len = ac->ac_o_ex.fe_len; +  	ext4_get_group_no_and_offset(ac->ac_sb, pa->pa_pstart,  					&ac->ac_b_ex.fe_group,  					&ac->ac_b_ex.fe_start); @@ -3282,6 +3287,7 @@ static void ext4_mb_use_group_pa(struct ext4_allocation_context *ac,  static noinline_for_stack int  ext4_mb_use_preallocated(struct ext4_allocation_context *ac)  { +	int order, i;  	struct ext4_inode_info *ei = EXT4_I(ac->ac_inode);  	struct ext4_locality_group *lg;  	struct ext4_prealloc_space *pa; @@ -3322,22 +3328,29 @@ ext4_mb_use_preallocated(struct ext4_allocation_context *ac)  	lg = ac->ac_lg;  	if (lg == NULL)  		return 0; +	order  = fls(ac->ac_o_ex.fe_len) - 1; +	if (order > PREALLOC_TB_SIZE - 1) +		/* The max size of hash table is PREALLOC_TB_SIZE */ +		order = PREALLOC_TB_SIZE - 1; -	rcu_read_lock(); -	list_for_each_entry_rcu(pa, &lg->lg_prealloc_list, pa_inode_list) { -		spin_lock(&pa->pa_lock); -		if (pa->pa_deleted == 0 && pa->pa_free >= ac->ac_o_ex.fe_len) { -			atomic_inc(&pa->pa_count); -			ext4_mb_use_group_pa(ac, pa); +	for (i = order; i < PREALLOC_TB_SIZE; i++) { +		rcu_read_lock(); +		list_for_each_entry_rcu(pa, &lg->lg_prealloc_list[i], +					pa_inode_list) { +			spin_lock(&pa->pa_lock); +			if (pa->pa_deleted == 0 && +					pa->pa_free >= ac->ac_o_ex.fe_len) { +				atomic_inc(&pa->pa_count); +				ext4_mb_use_group_pa(ac, pa); +				spin_unlock(&pa->pa_lock); +				ac->ac_criteria = 20; +				rcu_read_unlock(); +				return 1; +			}  			spin_unlock(&pa->pa_lock); -			ac->ac_criteria = 20; -			rcu_read_unlock(); -			return 1;  		} -		spin_unlock(&pa->pa_lock); +		rcu_read_unlock();  	} -	rcu_read_unlock(); -  	return 0;  } @@ -3560,6 +3573,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac)  	pa->pa_free = pa->pa_len;  	atomic_set(&pa->pa_count, 1);  	spin_lock_init(&pa->pa_lock); +	INIT_LIST_HEAD(&pa->pa_inode_list);  	pa->pa_deleted = 0;  	pa->pa_linear = 1; @@ -3580,10 +3594,10 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac)  	list_add(&pa->pa_group_list, &grp->bb_prealloc_list);  	ext4_unlock_group(sb, ac->ac_b_ex.fe_group); -	spin_lock(pa->pa_obj_lock); -	list_add_tail_rcu(&pa->pa_inode_list, &lg->lg_prealloc_list); -	spin_unlock(pa->pa_obj_lock); - +	/* +	 * We will later add the new pa to the right bucket +	 * after updating the pa_free in ext4_mb_release_context +	 */  	return 0;  } @@ -3733,20 +3747,23 @@ ext4_mb_discard_group_preallocations(struct super_block *sb,  	bitmap_bh = ext4_read_block_bitmap(sb, group);  	if (bitmap_bh == NULL) { -		/* error handling here */ -		ext4_mb_release_desc(&e4b); -		BUG_ON(bitmap_bh == NULL); +		ext4_error(sb, __func__, "Error in reading block " +				"bitmap for %lu\n", group); +		return 0;  	}  	err = ext4_mb_load_buddy(sb, group, &e4b); -	BUG_ON(err != 0); /* error handling here */ +	if (err) { +		ext4_error(sb, __func__, "Error in loading buddy " +				"information for %lu\n", group); +		put_bh(bitmap_bh); +		return 0; +	}  	if (needed == 0)  		needed = EXT4_BLOCKS_PER_GROUP(sb) + 1; -	grp = ext4_get_group_info(sb, group);  	INIT_LIST_HEAD(&list); -  	ac = kmem_cache_alloc(ext4_ac_cachep, GFP_NOFS);  repeat:  	ext4_lock_group(sb, group); @@ -3903,13 +3920,18 @@ repeat:  		ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, NULL);  		err = ext4_mb_load_buddy(sb, group, &e4b); -		BUG_ON(err != 0); /* error handling here */ +		if (err) { +			ext4_error(sb, __func__, "Error in loading buddy " +					"information for %lu\n", group); +			continue; +		}  		bitmap_bh = ext4_read_block_bitmap(sb, group);  		if (bitmap_bh == NULL) { -			/* error handling here */ +			ext4_error(sb, __func__, "Error in reading block " +					"bitmap for %lu\n", group);  			ext4_mb_release_desc(&e4b); -			BUG_ON(bitmap_bh == NULL); +			continue;  		}  		ext4_lock_group(sb, group); @@ -4112,22 +4134,168 @@ ext4_mb_initialize_context(struct ext4_allocation_context *ac,  } +static noinline_for_stack void +ext4_mb_discard_lg_preallocations(struct super_block *sb, +					struct ext4_locality_group *lg, +					int order, int total_entries) +{ +	ext4_group_t group = 0; +	struct ext4_buddy e4b; +	struct list_head discard_list; +	struct ext4_prealloc_space *pa, *tmp; +	struct ext4_allocation_context *ac; + +	mb_debug("discard locality group preallocation\n"); + +	INIT_LIST_HEAD(&discard_list); +	ac = kmem_cache_alloc(ext4_ac_cachep, GFP_NOFS); + +	spin_lock(&lg->lg_prealloc_lock); +	list_for_each_entry_rcu(pa, &lg->lg_prealloc_list[order], +						pa_inode_list) { +		spin_lock(&pa->pa_lock); +		if (atomic_read(&pa->pa_count)) { +			/* +			 * This is the pa that we just used +			 * for block allocation. So don't +			 * free that +			 */ +			spin_unlock(&pa->pa_lock); +			continue; +		} +		if (pa->pa_deleted) { +			spin_unlock(&pa->pa_lock); +			continue; +		} +		/* only lg prealloc space */ +		BUG_ON(!pa->pa_linear); + +		/* seems this one can be freed ... */ +		pa->pa_deleted = 1; +		spin_unlock(&pa->pa_lock); + +		list_del_rcu(&pa->pa_inode_list); +		list_add(&pa->u.pa_tmp_list, &discard_list); + +		total_entries--; +		if (total_entries <= 5) { +			/* +			 * we want to keep only 5 entries +			 * allowing it to grow to 8. This +			 * mak sure we don't call discard +			 * soon for this list. +			 */ +			break; +		} +	} +	spin_unlock(&lg->lg_prealloc_lock); + +	list_for_each_entry_safe(pa, tmp, &discard_list, u.pa_tmp_list) { + +		ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, NULL); +		if (ext4_mb_load_buddy(sb, group, &e4b)) { +			ext4_error(sb, __func__, "Error in loading buddy " +					"information for %lu\n", group); +			continue; +		} +		ext4_lock_group(sb, group); +		list_del(&pa->pa_group_list); +		ext4_mb_release_group_pa(&e4b, pa, ac); +		ext4_unlock_group(sb, group); + +		ext4_mb_release_desc(&e4b); +		list_del(&pa->u.pa_tmp_list); +		call_rcu(&(pa)->u.pa_rcu, ext4_mb_pa_callback); +	} +	if (ac) +		kmem_cache_free(ext4_ac_cachep, ac); +} + +/* + * We have incremented pa_count. So it cannot be freed at this + * point. Also we hold lg_mutex. So no parallel allocation is + * possible from this lg. That means pa_free cannot be updated. + * + * A parallel ext4_mb_discard_group_preallocations is possible. + * which can cause the lg_prealloc_list to be updated. + */ + +static void ext4_mb_add_n_trim(struct ext4_allocation_context *ac) +{ +	int order, added = 0, lg_prealloc_count = 1; +	struct super_block *sb = ac->ac_sb; +	struct ext4_locality_group *lg = ac->ac_lg; +	struct ext4_prealloc_space *tmp_pa, *pa = ac->ac_pa; + +	order = fls(pa->pa_free) - 1; +	if (order > PREALLOC_TB_SIZE - 1) +		/* The max size of hash table is PREALLOC_TB_SIZE */ +		order = PREALLOC_TB_SIZE - 1; +	/* Add the prealloc space to lg */ +	rcu_read_lock(); +	list_for_each_entry_rcu(tmp_pa, &lg->lg_prealloc_list[order], +						pa_inode_list) { +		spin_lock(&tmp_pa->pa_lock); +		if (tmp_pa->pa_deleted) { +			spin_unlock(&pa->pa_lock); +			continue; +		} +		if (!added && pa->pa_free < tmp_pa->pa_free) { +			/* Add to the tail of the previous entry */ +			list_add_tail_rcu(&pa->pa_inode_list, +						&tmp_pa->pa_inode_list); +			added = 1; +			/* +			 * we want to count the total +			 * number of entries in the list +			 */ +		} +		spin_unlock(&tmp_pa->pa_lock); +		lg_prealloc_count++; +	} +	if (!added) +		list_add_tail_rcu(&pa->pa_inode_list, +					&lg->lg_prealloc_list[order]); +	rcu_read_unlock(); + +	/* Now trim the list to be not more than 8 elements */ +	if (lg_prealloc_count > 8) { +		ext4_mb_discard_lg_preallocations(sb, lg, +						order, lg_prealloc_count); +		return; +	} +	return ; +} +  /*   * release all resource we used in allocation   */  static int ext4_mb_release_context(struct ext4_allocation_context *ac)  { -	if (ac->ac_pa) { -		if (ac->ac_pa->pa_linear) { +	struct ext4_prealloc_space *pa = ac->ac_pa; +	if (pa) { +		if (pa->pa_linear) {  			/* see comment in ext4_mb_use_group_pa() */ -			spin_lock(&ac->ac_pa->pa_lock); -			ac->ac_pa->pa_pstart += ac->ac_b_ex.fe_len; -			ac->ac_pa->pa_lstart += ac->ac_b_ex.fe_len; -			ac->ac_pa->pa_free -= ac->ac_b_ex.fe_len; -			ac->ac_pa->pa_len -= ac->ac_b_ex.fe_len; -			spin_unlock(&ac->ac_pa->pa_lock); +			spin_lock(&pa->pa_lock); +			pa->pa_pstart += ac->ac_b_ex.fe_len; +			pa->pa_lstart += ac->ac_b_ex.fe_len; +			pa->pa_free -= ac->ac_b_ex.fe_len; +			pa->pa_len -= ac->ac_b_ex.fe_len; +			spin_unlock(&pa->pa_lock); +			/* +			 * We want to add the pa to the right bucket. +			 * Remove it from the list and while adding +			 * make sure the list to which we are adding +			 * doesn't grow big. +			 */ +			if (likely(pa->pa_free)) { +				spin_lock(pa->pa_obj_lock); +				list_del_rcu(&pa->pa_inode_list); +				spin_unlock(pa->pa_obj_lock); +				ext4_mb_add_n_trim(ac); +			}  		} -		ext4_mb_put_pa(ac, ac->ac_sb, ac->ac_pa); +		ext4_mb_put_pa(ac, ac->ac_sb, pa);  	}  	if (ac->ac_bitmap_page)  		page_cache_release(ac->ac_bitmap_page); @@ -4420,11 +4588,15 @@ do_more:  		count -= overflow;  	}  	bitmap_bh = ext4_read_block_bitmap(sb, block_group); -	if (!bitmap_bh) +	if (!bitmap_bh) { +		err = -EIO;  		goto error_return; +	}  	gdp = ext4_get_group_desc(sb, block_group, &gd_bh); -	if (!gdp) +	if (!gdp) { +		err = -EIO;  		goto error_return; +	}  	if (in_range(ext4_block_bitmap(sb, gdp), block, count) ||  	    in_range(ext4_inode_bitmap(sb, gdp), block, count) || diff --git a/fs/ext4/mballoc.h b/fs/ext4/mballoc.h index bfe6add46bc..c7c9906c2a7 100644 --- a/fs/ext4/mballoc.h +++ b/fs/ext4/mballoc.h @@ -164,11 +164,17 @@ struct ext4_free_extent {   * Locality group:   *   we try to group all related changes together   *   so that writeback can flush/allocate them together as well + *   Size of lg_prealloc_list hash is determined by MB_DEFAULT_GROUP_PREALLOC + *   (512). We store prealloc space into the hash based on the pa_free blocks + *   order value.ie, fls(pa_free)-1;   */ +#define PREALLOC_TB_SIZE 10  struct ext4_locality_group {  	/* for allocator */ -	struct mutex		lg_mutex;	/* to serialize allocates */ -	struct list_head	lg_prealloc_list;/* list of preallocations */ +	/* to serialize allocates */ +	struct mutex		lg_mutex; +	/* list of preallocations */ +	struct list_head	lg_prealloc_list[PREALLOC_TB_SIZE];  	spinlock_t		lg_prealloc_lock;  }; diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c index f000fbe2cd9..0a926516426 100644 --- a/fs/ext4/resize.c +++ b/fs/ext4/resize.c @@ -73,7 +73,7 @@ static int verify_group_input(struct super_block *sb,  			     "Inode bitmap not in group (block %llu)",  			     (unsigned long long)input->inode_bitmap);  	else if (outside(input->inode_table, start, end) || -	         outside(itend - 1, start, end)) +		 outside(itend - 1, start, end))  		ext4_warning(sb, __func__,  			     "Inode table not in group (blocks %llu-%llu)",  			     (unsigned long long)input->inode_table, itend - 1); @@ -104,7 +104,7 @@ static int verify_group_input(struct super_block *sb,  			     (unsigned long long)input->inode_bitmap,  			     start, metaend - 1);  	else if (inside(input->inode_table, start, metaend) || -	         inside(itend - 1, start, metaend)) +		 inside(itend - 1, start, metaend))  		ext4_warning(sb, __func__,  			     "Inode table (%llu-%llu) overlaps"  			     "GDT table (%llu-%llu)", @@ -158,9 +158,9 @@ static int extend_or_restart_transaction(handle_t *handle, int thresh,  	if (err) {  		if ((err = ext4_journal_restart(handle, EXT4_MAX_TRANS_DATA)))  			return err; -	        if ((err = ext4_journal_get_write_access(handle, bh))) +		if ((err = ext4_journal_get_write_access(handle, bh)))  			return err; -        } +	}  	return 0;  } @@ -416,11 +416,11 @@ static int add_new_gdb(handle_t *handle, struct inode *inode,  		       "EXT4-fs: ext4_add_new_gdb: adding group block %lu\n",  		       gdb_num); -	/* -	 * If we are not using the primary superblock/GDT copy don't resize, -	 * because the user tools have no way of handling this.  Probably a -	 * bad time to do it anyways. -	 */ +        /* +         * If we are not using the primary superblock/GDT copy don't resize, +         * because the user tools have no way of handling this.  Probably a +         * bad time to do it anyways. +         */  	if (EXT4_SB(sb)->s_sbh->b_blocknr !=  	    le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block)) {  		ext4_warning(sb, __func__, @@ -507,14 +507,14 @@ static int add_new_gdb(handle_t *handle, struct inode *inode,  	return 0;  exit_inode: -	//ext4_journal_release_buffer(handle, iloc.bh); +	/* ext4_journal_release_buffer(handle, iloc.bh); */  	brelse(iloc.bh);  exit_dindj: -	//ext4_journal_release_buffer(handle, dind); +	/* ext4_journal_release_buffer(handle, dind); */  exit_primary: -	//ext4_journal_release_buffer(handle, *primary); +	/* ext4_journal_release_buffer(handle, *primary); */  exit_sbh: -	//ext4_journal_release_buffer(handle, *primary); +	/* ext4_journal_release_buffer(handle, *primary); */  exit_dind:  	brelse(dind);  exit_bh: @@ -818,12 +818,12 @@ int ext4_group_add(struct super_block *sb, struct ext4_new_group_data *input)  	if ((err = ext4_journal_get_write_access(handle, sbi->s_sbh)))  		goto exit_journal; -	/* -	 * We will only either add reserved group blocks to a backup group -	 * or remove reserved blocks for the first group in a new group block. -	 * Doing both would be mean more complex code, and sane people don't -	 * use non-sparse filesystems anymore.  This is already checked above. -	 */ +        /* +         * We will only either add reserved group blocks to a backup group +         * or remove reserved blocks for the first group in a new group block. +         * Doing both would be mean more complex code, and sane people don't +         * use non-sparse filesystems anymore.  This is already checked above. +         */  	if (gdb_off) {  		primary = sbi->s_group_desc[gdb_num];  		if ((err = ext4_journal_get_write_access(handle, primary))) @@ -835,24 +835,24 @@ int ext4_group_add(struct super_block *sb, struct ext4_new_group_data *input)  	} else if ((err = add_new_gdb(handle, inode, input, &primary)))  		goto exit_journal; -	/* -	 * OK, now we've set up the new group.  Time to make it active. -	 * -	 * Current kernels don't lock all allocations via lock_super(), -	 * so we have to be safe wrt. concurrent accesses the group -	 * data.  So we need to be careful to set all of the relevant -	 * group descriptor data etc. *before* we enable the group. -	 * -	 * The key field here is sbi->s_groups_count: as long as -	 * that retains its old value, nobody is going to access the new -	 * group. -	 * -	 * So first we update all the descriptor metadata for the new -	 * group; then we update the total disk blocks count; then we -	 * update the groups count to enable the group; then finally we -	 * update the free space counts so that the system can start -	 * using the new disk blocks. -	 */ +        /* +         * OK, now we've set up the new group.  Time to make it active. +         * +         * Current kernels don't lock all allocations via lock_super(), +         * so we have to be safe wrt. concurrent accesses the group +         * data.  So we need to be careful to set all of the relevant +         * group descriptor data etc. *before* we enable the group. +         * +         * The key field here is sbi->s_groups_count: as long as +         * that retains its old value, nobody is going to access the new +         * group. +         * +         * So first we update all the descriptor metadata for the new +         * group; then we update the total disk blocks count; then we +         * update the groups count to enable the group; then finally we +         * update the free space counts so that the system can start +         * using the new disk blocks. +         */  	/* Update group descriptor block for new group */  	gdp = (struct ext4_group_desc *)((char *)primary->b_data + @@ -946,7 +946,8 @@ exit_put:  	return err;  } /* ext4_group_add */ -/* Extend the filesystem to the new number of blocks specified.  This entry +/* + * Extend the filesystem to the new number of blocks specified.  This entry   * point is only used to extend the current filesystem to the end of the last   * existing group.  It can be accessed via ioctl, or by "remount,resize=<size>"   * for emergencies (because it has no dependencies on reserved blocks). @@ -1024,7 +1025,7 @@ int ext4_group_extend(struct super_block *sb, struct ext4_super_block *es,  			     o_blocks_count + add, add);  	/* See if the device is actually as big as what was requested */ -	bh = sb_bread(sb, o_blocks_count + add -1); +	bh = sb_bread(sb, o_blocks_count + add - 1);  	if (!bh) {  		ext4_warning(sb, __func__,  			     "can't read last block, resize aborted"); diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 1e69f29a8c5..d5d77958b86 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -49,20 +49,19 @@ static int ext4_load_journal(struct super_block *, struct ext4_super_block *,  			     unsigned long journal_devnum);  static int ext4_create_journal(struct super_block *, struct ext4_super_block *,  			       unsigned int); -static void ext4_commit_super (struct super_block * sb, -			       struct ext4_super_block * es, -			       int sync); -static void ext4_mark_recovery_complete(struct super_block * sb, -					struct ext4_super_block * es); -static void ext4_clear_journal_err(struct super_block * sb, -				   struct ext4_super_block * es); +static void ext4_commit_super(struct super_block *sb, +			      struct ext4_super_block *es, int sync); +static void ext4_mark_recovery_complete(struct super_block *sb, +					struct ext4_super_block *es); +static void ext4_clear_journal_err(struct super_block *sb, +				   struct ext4_super_block *es);  static int ext4_sync_fs(struct super_block *sb, int wait); -static const char *ext4_decode_error(struct super_block * sb, int errno, +static const char *ext4_decode_error(struct super_block *sb, int errno,  				     char nbuf[16]); -static int ext4_remount (struct super_block * sb, int * flags, char * data); -static int ext4_statfs (struct dentry * dentry, struct kstatfs * buf); +static int ext4_remount(struct super_block *sb, int *flags, char *data); +static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf);  static void ext4_unlockfs(struct super_block *sb); -static void ext4_write_super (struct super_block * sb); +static void ext4_write_super(struct super_block *sb);  static void ext4_write_super_lockfs(struct super_block *sb); @@ -211,15 +210,15 @@ static void ext4_handle_error(struct super_block *sb)  	if (sb->s_flags & MS_RDONLY)  		return; -	if (!test_opt (sb, ERRORS_CONT)) { +	if (!test_opt(sb, ERRORS_CONT)) {  		journal_t *journal = EXT4_SB(sb)->s_journal;  		EXT4_SB(sb)->s_mount_opt |= EXT4_MOUNT_ABORT;  		if (journal)  			jbd2_journal_abort(journal, -EIO);  	} -	if (test_opt (sb, ERRORS_RO)) { -		printk (KERN_CRIT "Remounting filesystem read-only\n"); +	if (test_opt(sb, ERRORS_RO)) { +		printk(KERN_CRIT "Remounting filesystem read-only\n");  		sb->s_flags |= MS_RDONLY;  	}  	ext4_commit_super(sb, es, 1); @@ -228,13 +227,13 @@ static void ext4_handle_error(struct super_block *sb)  			sb->s_id);  } -void ext4_error (struct super_block * sb, const char * function, -		 const char * fmt, ...) +void ext4_error(struct super_block *sb, const char *function, +		const char *fmt, ...)  {  	va_list args;  	va_start(args, fmt); -	printk(KERN_CRIT "EXT4-fs error (device %s): %s: ",sb->s_id, function); +	printk(KERN_CRIT "EXT4-fs error (device %s): %s: ", sb->s_id, function);  	vprintk(fmt, args);  	printk("\n");  	va_end(args); @@ -242,7 +241,7 @@ void ext4_error (struct super_block * sb, const char * function,  	ext4_handle_error(sb);  } -static const char *ext4_decode_error(struct super_block * sb, int errno, +static const char *ext4_decode_error(struct super_block *sb, int errno,  				     char nbuf[16])  {  	char *errstr = NULL; @@ -278,8 +277,7 @@ static const char *ext4_decode_error(struct super_block * sb, int errno,  /* __ext4_std_error decodes expected errors from journaling functions   * automatically and invokes the appropriate error response.  */ -void __ext4_std_error (struct super_block * sb, const char * function, -		       int errno) +void __ext4_std_error(struct super_block *sb, const char *function, int errno)  {  	char nbuf[16];  	const char *errstr; @@ -292,8 +290,8 @@ void __ext4_std_error (struct super_block * sb, const char * function,  		return;  	errstr = ext4_decode_error(sb, errno, nbuf); -	printk (KERN_CRIT "EXT4-fs error (device %s) in %s: %s\n", -		sb->s_id, function, errstr); +	printk(KERN_CRIT "EXT4-fs error (device %s) in %s: %s\n", +	       sb->s_id, function, errstr);  	ext4_handle_error(sb);  } @@ -308,15 +306,15 @@ void __ext4_std_error (struct super_block * sb, const char * function,   * case we take the easy way out and panic immediately.   */ -void ext4_abort (struct super_block * sb, const char * function, -		 const char * fmt, ...) +void ext4_abort(struct super_block *sb, const char *function, +		const char *fmt, ...)  {  	va_list args; -	printk (KERN_CRIT "ext4_abort called.\n"); +	printk(KERN_CRIT "ext4_abort called.\n");  	va_start(args, fmt); -	printk(KERN_CRIT "EXT4-fs error (device %s): %s: ",sb->s_id, function); +	printk(KERN_CRIT "EXT4-fs error (device %s): %s: ", sb->s_id, function);  	vprintk(fmt, args);  	printk("\n");  	va_end(args); @@ -334,8 +332,8 @@ void ext4_abort (struct super_block * sb, const char * function,  	jbd2_journal_abort(EXT4_SB(sb)->s_journal, -EIO);  } -void ext4_warning (struct super_block * sb, const char * function, -		   const char * fmt, ...) +void ext4_warning(struct super_block *sb, const char *function, +		  const char *fmt, ...)  {  	va_list args; @@ -496,7 +494,7 @@ static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi)  	}  } -static void ext4_put_super (struct super_block * sb) +static void ext4_put_super(struct super_block *sb)  {  	struct ext4_sb_info *sbi = EXT4_SB(sb);  	struct ext4_super_block *es = sbi->s_es; @@ -647,7 +645,8 @@ static void ext4_clear_inode(struct inode *inode)  				       &EXT4_I(inode)->jinode);  } -static inline void ext4_show_quota_options(struct seq_file *seq, struct super_block *sb) +static inline void ext4_show_quota_options(struct seq_file *seq, +					   struct super_block *sb)  {  #if defined(CONFIG_QUOTA)  	struct ext4_sb_info *sbi = EXT4_SB(sb); @@ -822,8 +821,8 @@ static struct dentry *ext4_fh_to_parent(struct super_block *sb, struct fid *fid,  }  #ifdef CONFIG_QUOTA -#define QTYPE2NAME(t) ((t)==USRQUOTA?"user":"group") -#define QTYPE2MOPT(on, t) ((t)==USRQUOTA?((on)##USRJQUOTA):((on)##GRPJQUOTA)) +#define QTYPE2NAME(t) ((t) == USRQUOTA?"user":"group") +#define QTYPE2MOPT(on, t) ((t) == USRQUOTA?((on)##USRJQUOTA):((on)##GRPJQUOTA))  static int ext4_dquot_initialize(struct inode *inode, int type);  static int ext4_dquot_drop(struct inode *inode); @@ -991,12 +990,12 @@ static ext4_fsblk_t get_sb_block(void **data)  	return sb_block;  } -static int parse_options (char *options, struct super_block *sb, -			  unsigned int *inum, unsigned long *journal_devnum, -			  ext4_fsblk_t *n_blocks_count, int is_remount) +static int parse_options(char *options, struct super_block *sb, +			 unsigned int *inum, unsigned long *journal_devnum, +			 ext4_fsblk_t *n_blocks_count, int is_remount)  {  	struct ext4_sb_info *sbi = EXT4_SB(sb); -	char * p; +	char *p;  	substring_t args[MAX_OPT_ARGS];  	int data_opt = 0;  	int option; @@ -1009,7 +1008,7 @@ static int parse_options (char *options, struct super_block *sb,  	if (!options)  		return 1; -	while ((p = strsep (&options, ",")) != NULL) { +	while ((p = strsep(&options, ",")) != NULL) {  		int token;  		if (!*p)  			continue; @@ -1017,16 +1016,16 @@ static int parse_options (char *options, struct super_block *sb,  		token = match_token(p, tokens, args);  		switch (token) {  		case Opt_bsd_df: -			clear_opt (sbi->s_mount_opt, MINIX_DF); +			clear_opt(sbi->s_mount_opt, MINIX_DF);  			break;  		case Opt_minix_df: -			set_opt (sbi->s_mount_opt, MINIX_DF); +			set_opt(sbi->s_mount_opt, MINIX_DF);  			break;  		case Opt_grpid: -			set_opt (sbi->s_mount_opt, GRPID); +			set_opt(sbi->s_mount_opt, GRPID);  			break;  		case Opt_nogrpid: -			clear_opt (sbi->s_mount_opt, GRPID); +			clear_opt(sbi->s_mount_opt, GRPID);  			break;  		case Opt_resuid:  			if (match_int(&args[0], &option)) @@ -1043,41 +1042,41 @@ static int parse_options (char *options, struct super_block *sb,  			/* *sb_block = match_int(&args[0]); */  			break;  		case Opt_err_panic: -			clear_opt (sbi->s_mount_opt, ERRORS_CONT); -			clear_opt (sbi->s_mount_opt, ERRORS_RO); -			set_opt (sbi->s_mount_opt, ERRORS_PANIC); +			clear_opt(sbi->s_mount_opt, ERRORS_CONT); +			clear_opt(sbi->s_mount_opt, ERRORS_RO); +			set_opt(sbi->s_mount_opt, ERRORS_PANIC);  			break;  		case Opt_err_ro: -			clear_opt (sbi->s_mount_opt, ERRORS_CONT); -			clear_opt (sbi->s_mount_opt, ERRORS_PANIC); -			set_opt (sbi->s_mount_opt, ERRORS_RO); +			clear_opt(sbi->s_mount_opt, ERRORS_CONT); +			clear_opt(sbi->s_mount_opt, ERRORS_PANIC); +			set_opt(sbi->s_mount_opt, ERRORS_RO);  			break;  		case Opt_err_cont: -			clear_opt (sbi->s_mount_opt, ERRORS_RO); -			clear_opt (sbi->s_mount_opt, ERRORS_PANIC); -			set_opt (sbi->s_mount_opt, ERRORS_CONT); +			clear_opt(sbi->s_mount_opt, ERRORS_RO); +			clear_opt(sbi->s_mount_opt, ERRORS_PANIC); +			set_opt(sbi->s_mount_opt, ERRORS_CONT);  			break;  		case Opt_nouid32: -			set_opt (sbi->s_mount_opt, NO_UID32); +			set_opt(sbi->s_mount_opt, NO_UID32);  			break;  		case Opt_nocheck: -			clear_opt (sbi->s_mount_opt, CHECK); +			clear_opt(sbi->s_mount_opt, CHECK);  			break;  		case Opt_debug: -			set_opt (sbi->s_mount_opt, DEBUG); +			set_opt(sbi->s_mount_opt, DEBUG);  			break;  		case Opt_oldalloc: -			set_opt (sbi->s_mount_opt, OLDALLOC); +			set_opt(sbi->s_mount_opt, OLDALLOC);  			break;  		case Opt_orlov: -			clear_opt (sbi->s_mount_opt, OLDALLOC); +			clear_opt(sbi->s_mount_opt, OLDALLOC);  			break;  #ifdef CONFIG_EXT4DEV_FS_XATTR  		case Opt_user_xattr: -			set_opt (sbi->s_mount_opt, XATTR_USER); +			set_opt(sbi->s_mount_opt, XATTR_USER);  			break;  		case Opt_nouser_xattr: -			clear_opt (sbi->s_mount_opt, XATTR_USER); +			clear_opt(sbi->s_mount_opt, XATTR_USER);  			break;  #else  		case Opt_user_xattr: @@ -1115,7 +1114,7 @@ static int parse_options (char *options, struct super_block *sb,  				       "journal on remount\n");  				return 0;  			} -			set_opt (sbi->s_mount_opt, UPDATE_JOURNAL); +			set_opt(sbi->s_mount_opt, UPDATE_JOURNAL);  			break;  		case Opt_journal_inum:  			if (is_remount) { @@ -1145,7 +1144,7 @@ static int parse_options (char *options, struct super_block *sb,  			set_opt(sbi->s_mount_opt, JOURNAL_CHECKSUM);  			break;  		case Opt_noload: -			set_opt (sbi->s_mount_opt, NOLOAD); +			set_opt(sbi->s_mount_opt, NOLOAD);  			break;  		case Opt_commit:  			if (match_int(&args[0], &option)) @@ -1331,7 +1330,7 @@ set_qf_format:  					"on this filesystem, use tune2fs\n");  				return 0;  			} -			set_opt (sbi->s_mount_opt, EXTENTS); +			set_opt(sbi->s_mount_opt, EXTENTS);  			break;  		case Opt_noextents:  			/* @@ -1348,7 +1347,7 @@ set_qf_format:  						"-o noextents options\n");  				return 0;  			} -			clear_opt (sbi->s_mount_opt, EXTENTS); +			clear_opt(sbi->s_mount_opt, EXTENTS);  			break;  		case Opt_i_version:  			set_opt(sbi->s_mount_opt, I_VERSION); @@ -1374,9 +1373,9 @@ set_qf_format:  			set_opt(sbi->s_mount_opt, DELALLOC);  			break;  		default: -			printk (KERN_ERR -				"EXT4-fs: Unrecognized mount option \"%s\" " -				"or missing value\n", p); +			printk(KERN_ERR +			       "EXT4-fs: Unrecognized mount option \"%s\" " +			       "or missing value\n", p);  			return 0;  		}  	} @@ -1423,31 +1422,31 @@ static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es,  	int res = 0;  	if (le32_to_cpu(es->s_rev_level) > EXT4_MAX_SUPP_REV) { -		printk (KERN_ERR "EXT4-fs warning: revision level too high, " -			"forcing read-only mode\n"); +		printk(KERN_ERR "EXT4-fs warning: revision level too high, " +		       "forcing read-only mode\n");  		res = MS_RDONLY;  	}  	if (read_only)  		return res;  	if (!(sbi->s_mount_state & EXT4_VALID_FS)) -		printk (KERN_WARNING "EXT4-fs warning: mounting unchecked fs, " -			"running e2fsck is recommended\n"); +		printk(KERN_WARNING "EXT4-fs warning: mounting unchecked fs, " +		       "running e2fsck is recommended\n");  	else if ((sbi->s_mount_state & EXT4_ERROR_FS)) -		printk (KERN_WARNING -			"EXT4-fs warning: mounting fs with errors, " -			"running e2fsck is recommended\n"); +		printk(KERN_WARNING +		       "EXT4-fs warning: mounting fs with errors, " +		       "running e2fsck is recommended\n");  	else if ((__s16) le16_to_cpu(es->s_max_mnt_count) >= 0 &&  		 le16_to_cpu(es->s_mnt_count) >=  		 (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count)) -		printk (KERN_WARNING -			"EXT4-fs warning: maximal mount count reached, " -			"running e2fsck is recommended\n"); +		printk(KERN_WARNING +		       "EXT4-fs warning: maximal mount count reached, " +		       "running e2fsck is recommended\n");  	else if (le32_to_cpu(es->s_checkinterval) &&  		(le32_to_cpu(es->s_lastcheck) +  			le32_to_cpu(es->s_checkinterval) <= get_seconds())) -		printk (KERN_WARNING -			"EXT4-fs warning: checktime reached, " -			"running e2fsck is recommended\n"); +		printk(KERN_WARNING +		       "EXT4-fs warning: checktime reached, " +		       "running e2fsck is recommended\n");  #if 0  		/* @@@ We _will_ want to clear the valid bit if we find  		 * inconsistencies, to force a fsck at reboot.  But for @@ -1506,14 +1505,13 @@ static int ext4_fill_flex_info(struct super_block *sb)  	flex_group_count = (sbi->s_groups_count + groups_per_flex - 1) /  		groups_per_flex; -	sbi->s_flex_groups = kmalloc(flex_group_count * +	sbi->s_flex_groups = kzalloc(flex_group_count *  				     sizeof(struct flex_groups), GFP_KERNEL);  	if (sbi->s_flex_groups == NULL) { -		printk(KERN_ERR "EXT4-fs: not enough memory\n"); +		printk(KERN_ERR "EXT4-fs: not enough memory for " +				"%lu flex groups\n", flex_group_count);  		goto failed;  	} -	memset(sbi->s_flex_groups, 0, flex_group_count * -	       sizeof(struct flex_groups));  	gdp = ext4_get_group_desc(sb, 1, &bh);  	block_bitmap = ext4_block_bitmap(sb, gdp) - 1; @@ -1597,16 +1595,14 @@ static int ext4_check_descriptors(struct super_block *sb)  				(EXT4_BLOCKS_PER_GROUP(sb) - 1);  		block_bitmap = ext4_block_bitmap(sb, gdp); -		if (block_bitmap < first_block || block_bitmap > last_block) -		{ +		if (block_bitmap < first_block || block_bitmap > last_block) {  			printk(KERN_ERR "EXT4-fs: ext4_check_descriptors: "  			       "Block bitmap for group %lu not in group "  			       "(block %llu)!", i, block_bitmap);  			return 0;  		}  		inode_bitmap = ext4_inode_bitmap(sb, gdp); -		if (inode_bitmap < first_block || inode_bitmap > last_block) -		{ +		if (inode_bitmap < first_block || inode_bitmap > last_block) {  			printk(KERN_ERR "EXT4-fs: ext4_check_descriptors: "  			       "Inode bitmap for group %lu not in group "  			       "(block %llu)!", i, inode_bitmap); @@ -1614,26 +1610,28 @@ static int ext4_check_descriptors(struct super_block *sb)  		}  		inode_table = ext4_inode_table(sb, gdp);  		if (inode_table < first_block || -		    inode_table + sbi->s_itb_per_group - 1 > last_block) -		{ +		    inode_table + sbi->s_itb_per_group - 1 > last_block) {  			printk(KERN_ERR "EXT4-fs: ext4_check_descriptors: "  			       "Inode table for group %lu not in group "  			       "(block %llu)!", i, inode_table);  			return 0;  		} +		spin_lock(sb_bgl_lock(sbi, i));  		if (!ext4_group_desc_csum_verify(sbi, i, gdp)) {  			printk(KERN_ERR "EXT4-fs: ext4_check_descriptors: "  			       "Checksum for group %lu failed (%u!=%u)\n",  			       i, le16_to_cpu(ext4_group_desc_csum(sbi, i,  			       gdp)), le16_to_cpu(gdp->bg_checksum)); -			return 0; +			if (!(sb->s_flags & MS_RDONLY)) +				return 0;  		} +		spin_unlock(sb_bgl_lock(sbi, i));  		if (!flexbg_flag)  			first_block += EXT4_BLOCKS_PER_GROUP(sb);  	}  	ext4_free_blocks_count_set(sbi->s_es, ext4_count_free_blocks(sb)); -	sbi->s_es->s_free_inodes_count=cpu_to_le32(ext4_count_free_inodes(sb)); +	sbi->s_es->s_free_inodes_count = cpu_to_le32(ext4_count_free_inodes(sb));  	return 1;  } @@ -1654,8 +1652,8 @@ static int ext4_check_descriptors(struct super_block *sb)   * e2fsck was run on this filesystem, and it must have already done the orphan   * inode cleanup for us, so we can safely abort without any further action.   */ -static void ext4_orphan_cleanup (struct super_block * sb, -				 struct ext4_super_block * es) +static void ext4_orphan_cleanup(struct super_block *sb, +				struct ext4_super_block *es)  {  	unsigned int s_flags = sb->s_flags;  	int nr_orphans = 0, nr_truncates = 0; @@ -1732,7 +1730,7 @@ static void ext4_orphan_cleanup (struct super_block * sb,  		iput(inode);  /* The delete magic happens here! */  	} -#define PLURAL(x) (x), ((x)==1) ? "" : "s" +#define PLURAL(x) (x), ((x) == 1) ? "" : "s"  	if (nr_orphans)  		printk(KERN_INFO "EXT4-fs: %s: %d orphan inode%s deleted\n", @@ -1899,12 +1897,12 @@ static unsigned long ext4_get_stripe_size(struct ext4_sb_info *sbi)  	return 0;  } -static int ext4_fill_super (struct super_block *sb, void *data, int silent) +static int ext4_fill_super(struct super_block *sb, void *data, int silent)  				__releases(kernel_lock)  				__acquires(kernel_lock)  { -	struct buffer_head * bh; +	struct buffer_head *bh;  	struct ext4_super_block *es = NULL;  	struct ext4_sb_info *sbi;  	ext4_fsblk_t block; @@ -1953,7 +1951,7 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  	}  	if (!(bh = sb_bread(sb, logical_sb_block))) { -		printk (KERN_ERR "EXT4-fs: unable to read superblock\n"); +		printk(KERN_ERR "EXT4-fs: unable to read superblock\n");  		goto out_fail;  	}  	/* @@ -2026,8 +2024,8 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  	set_opt(sbi->s_mount_opt, DELALLOC); -	if (!parse_options ((char *) data, sb, &journal_inum, &journal_devnum, -			    NULL, 0)) +	if (!parse_options((char *) data, sb, &journal_inum, &journal_devnum, +			   NULL, 0))  		goto failed_mount;  	sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | @@ -2102,7 +2100,7 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  			goto failed_mount;  		} -		brelse (bh); +		brelse(bh);  		logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;  		offset = do_div(logical_sb_block, blocksize);  		bh = sb_bread(sb, logical_sb_block); @@ -2114,8 +2112,8 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  		es = (struct ext4_super_block *)(((char *)bh->b_data) + offset);  		sbi->s_es = es;  		if (es->s_magic != cpu_to_le16(EXT4_SUPER_MAGIC)) { -			printk (KERN_ERR -				"EXT4-fs: Magic mismatch, very weird !\n"); +			printk(KERN_ERR +			       "EXT4-fs: Magic mismatch, very weird !\n");  			goto failed_mount;  		}  	} @@ -2132,9 +2130,9 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  		if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) ||  		    (!is_power_of_2(sbi->s_inode_size)) ||  		    (sbi->s_inode_size > blocksize)) { -			printk (KERN_ERR -				"EXT4-fs: unsupported inode size: %d\n", -				sbi->s_inode_size); +			printk(KERN_ERR +			       "EXT4-fs: unsupported inode size: %d\n", +			       sbi->s_inode_size);  			goto failed_mount;  		}  		if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) @@ -2166,20 +2164,20 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  	sbi->s_mount_state = le16_to_cpu(es->s_state);  	sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb));  	sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb)); -	for (i=0; i < 4; i++) +	for (i = 0; i < 4; i++)  		sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);  	sbi->s_def_hash_version = es->s_def_hash_version;  	if (sbi->s_blocks_per_group > blocksize * 8) { -		printk (KERN_ERR -			"EXT4-fs: #blocks per group too big: %lu\n", -			sbi->s_blocks_per_group); +		printk(KERN_ERR +		       "EXT4-fs: #blocks per group too big: %lu\n", +		       sbi->s_blocks_per_group);  		goto failed_mount;  	}  	if (sbi->s_inodes_per_group > blocksize * 8) { -		printk (KERN_ERR -			"EXT4-fs: #inodes per group too big: %lu\n", -			sbi->s_inodes_per_group); +		printk(KERN_ERR +		       "EXT4-fs: #inodes per group too big: %lu\n", +		       sbi->s_inodes_per_group);  		goto failed_mount;  	} @@ -2213,10 +2211,10 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  	sbi->s_groups_count = blocks_count;  	db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) /  		   EXT4_DESC_PER_BLOCK(sb); -	sbi->s_group_desc = kmalloc(db_count * sizeof (struct buffer_head *), +	sbi->s_group_desc = kmalloc(db_count * sizeof(struct buffer_head *),  				    GFP_KERNEL);  	if (sbi->s_group_desc == NULL) { -		printk (KERN_ERR "EXT4-fs: not enough memory\n"); +		printk(KERN_ERR "EXT4-fs: not enough memory\n");  		goto failed_mount;  	} @@ -2226,13 +2224,13 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  		block = descriptor_loc(sb, logical_sb_block, i);  		sbi->s_group_desc[i] = sb_bread(sb, block);  		if (!sbi->s_group_desc[i]) { -			printk (KERN_ERR "EXT4-fs: " -				"can't read group descriptor %d\n", i); +			printk(KERN_ERR "EXT4-fs: " +			       "can't read group descriptor %d\n", i);  			db_count = i;  			goto failed_mount2;  		}  	} -	if (!ext4_check_descriptors (sb)) { +	if (!ext4_check_descriptors(sb)) {  		printk(KERN_ERR "EXT4-fs: group descriptors corrupted!\n");  		goto failed_mount2;  	} @@ -2308,11 +2306,11 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  		    EXT4_SB(sb)->s_journal->j_failed_commit) {  			printk(KERN_CRIT "EXT4-fs error (device %s): "  			       "ext4_fill_super: Journal transaction " -			       "%u is corrupt\n", sb->s_id,  +			       "%u is corrupt\n", sb->s_id,  			       EXT4_SB(sb)->s_journal->j_failed_commit); -			if (test_opt (sb, ERRORS_RO)) { -				printk (KERN_CRIT -					"Mounting filesystem read-only\n"); +			if (test_opt(sb, ERRORS_RO)) { +				printk(KERN_CRIT +				       "Mounting filesystem read-only\n");  				sb->s_flags |= MS_RDONLY;  				EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;  				es->s_state |= cpu_to_le16(EXT4_ERROR_FS); @@ -2332,9 +2330,9 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  			goto failed_mount3;  	} else {  		if (!silent) -			printk (KERN_ERR -				"ext4: No journal on filesystem on %s\n", -				sb->s_id); +			printk(KERN_ERR +			       "ext4: No journal on filesystem on %s\n", +			       sb->s_id);  		goto failed_mount3;  	} @@ -2418,7 +2416,7 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  		goto failed_mount4;  	} -	ext4_setup_super (sb, es, sb->s_flags & MS_RDONLY); +	ext4_setup_super(sb, es, sb->s_flags & MS_RDONLY);  	/* determine the minimum size of new large inodes, if present */  	if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) { @@ -2457,12 +2455,12 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent)  	ext4_orphan_cleanup(sb, es);  	EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS;  	if (needs_recovery) -		printk (KERN_INFO "EXT4-fs: recovery complete.\n"); +		printk(KERN_INFO "EXT4-fs: recovery complete.\n");  	ext4_mark_recovery_complete(sb, es); -	printk (KERN_INFO "EXT4-fs: mounted filesystem with %s data mode.\n", -		test_opt(sb,DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA ? "journal": -		test_opt(sb,DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA ? "ordered": -		"writeback"); +	printk(KERN_INFO "EXT4-fs: mounted filesystem with %s data mode.\n", +	       test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA ? "journal": +	       test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA ? "ordered": +	       "writeback");  	if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {  		printk(KERN_WARNING "EXT4-fs: Ignoring delalloc option - " @@ -2575,14 +2573,14 @@ static journal_t *ext4_get_journal(struct super_block *sb,  static journal_t *ext4_get_dev_journal(struct super_block *sb,  				       dev_t j_dev)  { -	struct buffer_head * bh; +	struct buffer_head *bh;  	journal_t *journal;  	ext4_fsblk_t start;  	ext4_fsblk_t len;  	int hblock, blocksize;  	ext4_fsblk_t sb_block;  	unsigned long offset; -	struct ext4_super_block * es; +	struct ext4_super_block *es;  	struct block_device *bdev;  	bdev = ext4_blkdev_get(j_dev); @@ -2697,8 +2695,8 @@ static int ext4_load_journal(struct super_block *sb,  					"unavailable, cannot proceed.\n");  				return -EROFS;  			} -			printk (KERN_INFO "EXT4-fs: write access will " -					"be enabled during recovery.\n"); +			printk(KERN_INFO "EXT4-fs: write access will " +			       "be enabled during recovery.\n");  		}  	} @@ -2751,8 +2749,8 @@ static int ext4_load_journal(struct super_block *sb,  	return 0;  } -static int ext4_create_journal(struct super_block * sb, -			       struct ext4_super_block * es, +static int ext4_create_journal(struct super_block *sb, +			       struct ext4_super_block *es,  			       unsigned int journal_inum)  {  	journal_t *journal; @@ -2793,9 +2791,8 @@ static int ext4_create_journal(struct super_block * sb,  	return 0;  } -static void ext4_commit_super (struct super_block * sb, -			       struct ext4_super_block * es, -			       int sync) +static void ext4_commit_super(struct super_block *sb, +			      struct ext4_super_block *es, int sync)  {  	struct buffer_head *sbh = EXT4_SB(sb)->s_sbh; @@ -2816,8 +2813,8 @@ static void ext4_commit_super (struct super_block * sb,   * remounting) the filesystem readonly, then we will end up with a   * consistent fs on disk.  Record that fact.   */ -static void ext4_mark_recovery_complete(struct super_block * sb, -					struct ext4_super_block * es) +static void ext4_mark_recovery_complete(struct super_block *sb, +					struct ext4_super_block *es)  {  	journal_t *journal = EXT4_SB(sb)->s_journal; @@ -2839,8 +2836,8 @@ static void ext4_mark_recovery_complete(struct super_block * sb,   * has recorded an error from a previous lifetime, move that error to the   * main filesystem now.   */ -static void ext4_clear_journal_err(struct super_block * sb, -				   struct ext4_super_block * es) +static void ext4_clear_journal_err(struct super_block *sb, +				   struct ext4_super_block *es)  {  	journal_t *journal;  	int j_errno; @@ -2865,7 +2862,7 @@ static void ext4_clear_journal_err(struct super_block * sb,  		EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;  		es->s_state |= cpu_to_le16(EXT4_ERROR_FS); -		ext4_commit_super (sb, es, 1); +		ext4_commit_super(sb, es, 1);  		jbd2_journal_clear_err(journal);  	} @@ -2898,7 +2895,7 @@ int ext4_force_commit(struct super_block *sb)   * This implicitly triggers the writebehind on sync().   */ -static void ext4_write_super (struct super_block * sb) +static void ext4_write_super(struct super_block *sb)  {  	if (mutex_trylock(&sb->s_lock) != 0)  		BUG(); @@ -2954,13 +2951,14 @@ static void ext4_unlockfs(struct super_block *sb)  	}  } -static int ext4_remount (struct super_block * sb, int * flags, char * data) +static int ext4_remount(struct super_block *sb, int *flags, char *data)  { -	struct ext4_super_block * es; +	struct ext4_super_block *es;  	struct ext4_sb_info *sbi = EXT4_SB(sb);  	ext4_fsblk_t n_blocks_count = 0;  	unsigned long old_sb_flags;  	struct ext4_mount_options old_opts; +	ext4_group_t g;  	int err;  #ifdef CONFIG_QUOTA  	int i; @@ -3039,6 +3037,26 @@ static int ext4_remount (struct super_block * sb, int * flags, char * data)  			}  			/* +			 * Make sure the group descriptor checksums +			 * are sane.  If they aren't, refuse to +			 * remount r/w. +			 */ +			for (g = 0; g < sbi->s_groups_count; g++) { +				struct ext4_group_desc *gdp = +					ext4_get_group_desc(sb, g, NULL); + +				if (!ext4_group_desc_csum_verify(sbi, g, gdp)) { +					printk(KERN_ERR +	       "EXT4-fs: ext4_remount: " +		"Checksum for group %lu failed (%u!=%u)\n", +		g, le16_to_cpu(ext4_group_desc_csum(sbi, g, gdp)), +					       le16_to_cpu(gdp->bg_checksum)); +					err = -EINVAL; +					goto restore_opts; +				} +			} + +			/*  			 * If we have an unprocessed orphan list hanging  			 * around from a previously readonly bdev mount,  			 * require a full umount/remount for now. @@ -3063,7 +3081,7 @@ static int ext4_remount (struct super_block * sb, int * flags, char * data)  			sbi->s_mount_state = le16_to_cpu(es->s_state);  			if ((err = ext4_group_extend(sb, es, n_blocks_count)))  				goto restore_opts; -			if (!ext4_setup_super (sb, es, 0)) +			if (!ext4_setup_super(sb, es, 0))  				sb->s_flags &= ~MS_RDONLY;  		}  	} @@ -3093,7 +3111,7 @@ restore_opts:  	return err;  } -static int ext4_statfs (struct dentry * dentry, struct kstatfs * buf) +static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)  {  	struct super_block *sb = dentry->d_sb;  	struct ext4_sb_info *sbi = EXT4_SB(sb); @@ -3331,12 +3349,12 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,  	}  	/* Journaling quota? */  	if (EXT4_SB(sb)->s_qf_names[type]) { -		/* Quotafile not of fs root? */ +		/* Quotafile not in fs root? */  		if (nd.path.dentry->d_parent->d_inode != sb->s_root->d_inode)  			printk(KERN_WARNING  				"EXT4-fs: Quota file not on filesystem root. "  				"Journaled quota will not work.\n"); - 	} +	}  	/*  	 * When we journal data on quota file, we have to flush journal to see diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index 93c5fdcdad2..8954208b489 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c @@ -1512,7 +1512,7 @@ static inline void ext4_xattr_hash_entry(struct ext4_xattr_header *header,  	char *name = entry->e_name;  	int n; -	for (n=0; n < entry->e_name_len; n++) { +	for (n = 0; n < entry->e_name_len; n++) {  		hash = (hash << NAME_HASH_SHIFT) ^  		       (hash >> (8*sizeof(hash) - NAME_HASH_SHIFT)) ^  		       *name++; diff --git a/fs/fat/file.c b/fs/fat/file.c index 8707a8cfa02..ddde37025ca 100644 --- a/fs/fat/file.c +++ b/fs/fat/file.c @@ -313,6 +313,8 @@ static int fat_allow_set_time(struct msdos_sb_info *sbi, struct inode *inode)  	return 0;  } +#define TIMES_SET_FLAGS	(ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET) +  int fat_setattr(struct dentry *dentry, struct iattr *attr)  {  	struct msdos_sb_info *sbi = MSDOS_SB(dentry->d_sb); @@ -336,9 +338,9 @@ int fat_setattr(struct dentry *dentry, struct iattr *attr)  	/* Check for setting the inode time. */  	ia_valid = attr->ia_valid; -	if (ia_valid & (ATTR_MTIME_SET | ATTR_ATIME_SET)) { +	if (ia_valid & TIMES_SET_FLAGS) {  		if (fat_allow_set_time(sbi, inode)) -			attr->ia_valid &= ~(ATTR_MTIME_SET | ATTR_ATIME_SET); +			attr->ia_valid &= ~TIMES_SET_FLAGS;  	}  	error = inode_change_ok(inode, attr); diff --git a/fs/jbd/commit.c b/fs/jbd/commit.c index 2eccbfaa1d4..ae08c057e75 100644 --- a/fs/jbd/commit.c +++ b/fs/jbd/commit.c @@ -63,7 +63,7 @@ static void release_buffer_page(struct buffer_head *bh)  		goto nope;  	/* OK, it's a truncated page */ -	if (TestSetPageLocked(page)) +	if (!trylock_page(page))  		goto nope;  	page_cache_get(page); @@ -221,7 +221,7 @@ write_out_data:  		 * blocking lock_buffer().  		 */  		if (buffer_dirty(bh)) { -			if (test_set_buffer_locked(bh)) { +			if (!trylock_buffer(bh)) {  				BUFFER_TRACE(bh, "needs blocking lock");  				spin_unlock(&journal->j_list_lock);  				/* Write out all data to prevent deadlocks */ @@ -446,7 +446,7 @@ void journal_commit_transaction(journal_t *journal)  			spin_lock(&journal->j_list_lock);  		}  		if (unlikely(!buffer_uptodate(bh))) { -			if (TestSetPageLocked(bh->b_page)) { +			if (!trylock_page(bh->b_page)) {  				spin_unlock(&journal->j_list_lock);  				lock_page(bh->b_page);  				spin_lock(&journal->j_list_lock); diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index f8b3be87322..f2ad061e95e 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c @@ -67,7 +67,7 @@ static void release_buffer_page(struct buffer_head *bh)  		goto nope;  	/* OK, it's a truncated page */ -	if (TestSetPageLocked(page)) +	if (!trylock_page(page))  		goto nope;  	page_cache_get(page); @@ -262,8 +262,18 @@ static int journal_finish_inode_data_buffers(journal_t *journal,  		jinode->i_flags |= JI_COMMIT_RUNNING;  		spin_unlock(&journal->j_list_lock);  		err = filemap_fdatawait(jinode->i_vfs_inode->i_mapping); -		if (!ret) -			ret = err; +		if (err) { +			/* +			 * Because AS_EIO is cleared by +			 * wait_on_page_writeback_range(), set it again so +			 * that user process can get -EIO from fsync(). +			 */ +			set_bit(AS_EIO, +				&jinode->i_vfs_inode->i_mapping->flags); + +			if (!ret) +				ret = err; +		}  		spin_lock(&journal->j_list_lock);  		jinode->i_flags &= ~JI_COMMIT_RUNNING;  		wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING); @@ -670,8 +680,14 @@ start_journal_io:  	 * commit block, which happens below in such setting.  	 */  	err = journal_finish_inode_data_buffers(journal, commit_transaction); -	if (err) -		jbd2_journal_abort(journal, err); +	if (err) { +		char b[BDEVNAME_SIZE]; + +		printk(KERN_WARNING +			"JBD2: Detected IO errors while flushing file data " +			"on %s\n", bdevname(journal->j_fs_dev, b)); +		err = 0; +	}  	/* Lo and behold: we have just managed to send a transaction to             the log.  Before we can commit it, wait for the IO so far to diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index b26c6d9fe6a..8207a01c4ed 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c @@ -68,7 +68,6 @@ EXPORT_SYMBOL(jbd2_journal_set_features);  EXPORT_SYMBOL(jbd2_journal_create);  EXPORT_SYMBOL(jbd2_journal_load);  EXPORT_SYMBOL(jbd2_journal_destroy); -EXPORT_SYMBOL(jbd2_journal_update_superblock);  EXPORT_SYMBOL(jbd2_journal_abort);  EXPORT_SYMBOL(jbd2_journal_errno);  EXPORT_SYMBOL(jbd2_journal_ack_err); diff --git a/fs/nfs/nfsroot.c b/fs/nfs/nfsroot.c index 8478fc25dae..46763d1cd39 100644 --- a/fs/nfs/nfsroot.c +++ b/fs/nfs/nfsroot.c @@ -127,7 +127,7 @@ enum {  	Opt_err  }; -static match_table_t __initconst tokens = { +static match_table_t __initdata tokens = {  	{Opt_port, "port=%u"},  	{Opt_rsize, "rsize=%u"},  	{Opt_wsize, "wsize=%u"}, diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c index 00e9ccde8e4..b38f944f066 100644 --- a/fs/ntfs/aops.c +++ b/fs/ntfs/aops.c @@ -1194,7 +1194,7 @@ lock_retry_remap:  		tbh = bhs[i];  		if (!tbh)  			continue; -		if (unlikely(test_set_buffer_locked(tbh))) +		if (!trylock_buffer(tbh))  			BUG();  		/* The buffer dirty state is now irrelevant, just clean it. */  		clear_buffer_dirty(tbh); diff --git a/fs/ntfs/compress.c b/fs/ntfs/compress.c index 33ff314cc50..9669541d011 100644 --- a/fs/ntfs/compress.c +++ b/fs/ntfs/compress.c @@ -665,7 +665,7 @@ lock_retry_remap:  	for (i = 0; i < nr_bhs; i++) {  		struct buffer_head *tbh = bhs[i]; -		if (unlikely(test_set_buffer_locked(tbh))) +		if (!trylock_buffer(tbh))  			continue;  		if (unlikely(buffer_uptodate(tbh))) {  			unlock_buffer(tbh); diff --git a/fs/ntfs/mft.c b/fs/ntfs/mft.c index 790defb847e..17d32ca6bc3 100644 --- a/fs/ntfs/mft.c +++ b/fs/ntfs/mft.c @@ -586,7 +586,7 @@ int ntfs_sync_mft_mirror(ntfs_volume *vol, const unsigned long mft_no,  		for (i_bhs = 0; i_bhs < nr_bhs; i_bhs++) {  			struct buffer_head *tbh = bhs[i_bhs]; -			if (unlikely(test_set_buffer_locked(tbh))) +			if (!trylock_buffer(tbh))  				BUG();  			BUG_ON(!buffer_uptodate(tbh));  			clear_buffer_dirty(tbh); @@ -779,7 +779,7 @@ int write_mft_record_nolock(ntfs_inode *ni, MFT_RECORD *m, int sync)  	for (i_bhs = 0; i_bhs < nr_bhs; i_bhs++) {  		struct buffer_head *tbh = bhs[i_bhs]; -		if (unlikely(test_set_buffer_locked(tbh))) +		if (!trylock_buffer(tbh))  			BUG();  		BUG_ON(!buffer_uptodate(tbh));  		clear_buffer_dirty(tbh); diff --git a/fs/omfs/inode.c b/fs/omfs/inode.c index d865f553543..a95fe5984f4 100644 --- a/fs/omfs/inode.c +++ b/fs/omfs/inode.c @@ -492,7 +492,8 @@ static int omfs_fill_super(struct super_block *sb, void *data, int silent)  	if (sbi->s_num_blocks != be64_to_cpu(omfs_rb->r_num_blocks)) {  		printk(KERN_ERR "omfs: block count discrepancy between "  			"super and root blocks (%llx, %llx)\n", -			sbi->s_num_blocks, be64_to_cpu(omfs_rb->r_num_blocks)); +			(unsigned long long)sbi->s_num_blocks, +			(unsigned long long)be64_to_cpu(omfs_rb->r_num_blocks));  		goto out_brelse_bh2;  	} diff --git a/fs/proc/base.c b/fs/proc/base.c index 01ed610f9b8..a28840b11b8 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -2423,10 +2423,13 @@ static int do_io_accounting(struct task_struct *task, char *buffer, int whole)  			"read_bytes: %llu\n"  			"write_bytes: %llu\n"  			"cancelled_write_bytes: %llu\n", -			acct.rchar, acct.wchar, -			acct.syscr, acct.syscw, -			acct.read_bytes, acct.write_bytes, -			acct.cancelled_write_bytes); +			(unsigned long long)acct.rchar, +			(unsigned long long)acct.wchar, +			(unsigned long long)acct.syscr, +			(unsigned long long)acct.syscw, +			(unsigned long long)acct.read_bytes, +			(unsigned long long)acct.write_bytes, +			(unsigned long long)acct.cancelled_write_bytes);  }  static int proc_tid_io_accounting(struct task_struct *task, char *buffer) diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index 192269698a8..5699171212a 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c @@ -2435,7 +2435,7 @@ static int reiserfs_write_full_page(struct page *page,  		if (wbc->sync_mode != WB_SYNC_NONE || !wbc->nonblocking) {  			lock_buffer(bh);  		} else { -			if (test_set_buffer_locked(bh)) { +			if (!trylock_buffer(bh)) {  				redirty_page_for_writepage(wbc, page);  				continue;  			} diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c index c8f60ee183b..c21df71943a 100644 --- a/fs/reiserfs/journal.c +++ b/fs/reiserfs/journal.c @@ -627,7 +627,7 @@ static int journal_list_still_alive(struct super_block *s,  static void release_buffer_page(struct buffer_head *bh)  {  	struct page *page = bh->b_page; -	if (!page->mapping && !TestSetPageLocked(page)) { +	if (!page->mapping && trylock_page(page)) {  		page_cache_get(page);  		put_bh(bh);  		if (!page->mapping) @@ -855,7 +855,7 @@ static int write_ordered_buffers(spinlock_t * lock,  		jh = JH_ENTRY(list->next);  		bh = jh->bh;  		get_bh(bh); -		if (test_set_buffer_locked(bh)) { +		if (!trylock_buffer(bh)) {  			if (!buffer_dirty(bh)) {  				list_move(&jh->list, &tmp);  				goto loop_next; @@ -3871,7 +3871,7 @@ int reiserfs_prepare_for_journal(struct super_block *p_s_sb,  {  	PROC_INFO_INC(p_s_sb, journal.prepare); -	if (test_set_buffer_locked(bh)) { +	if (!trylock_buffer(bh)) {  		if (!wait)  			return 0;  		lock_buffer(bh); diff --git a/fs/splice.c b/fs/splice.c index b30311ba8af..1bbc6f4bb09 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -371,7 +371,7 @@ __generic_file_splice_read(struct file *in, loff_t *ppos,  			 * for an in-flight io page  			 */  			if (flags & SPLICE_F_NONBLOCK) { -				if (TestSetPageLocked(page)) { +				if (!trylock_page(page)) {  					error = -EAGAIN;  					break;  				} diff --git a/fs/ufs/super.c b/fs/ufs/super.c index 3e30e40aa24..3141969b456 100644 --- a/fs/ufs/super.c +++ b/fs/ufs/super.c @@ -1233,7 +1233,7 @@ static int ufs_show_options(struct seq_file *seq, struct vfsmount *vfs)  {  	struct ufs_sb_info *sbi = UFS_SB(vfs->mnt_sb);  	unsigned mval = sbi->s_mount_opt & UFS_MOUNT_UFSTYPE; -	const struct match_token *tp = tokens; +	struct match_token *tp = tokens;  	while (tp->token != Opt_onerror_panic && tp->token != mval)  		++tp; diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index 0b211cba190..fa47e43b8b4 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c @@ -675,7 +675,7 @@ xfs_probe_cluster(  			} else  				pg_offset = PAGE_CACHE_SIZE; -			if (page->index == tindex && !TestSetPageLocked(page)) { +			if (page->index == tindex && trylock_page(page)) {  				pg_len = xfs_probe_page(page, pg_offset, mapped);  				unlock_page(page);  			} @@ -759,7 +759,7 @@ xfs_convert_page(  	if (page->index != tindex)  		goto fail; -	if (TestSetPageLocked(page)) +	if (!trylock_page(page))  		goto fail;  	if (PageWriteback(page))  		goto fail_unlock_page; @@ -1104,7 +1104,7 @@ xfs_page_state_convert(  			 * that we are writing into for the first time.  			 */  			type = IOMAP_NEW; -			if (!test_and_set_bit(BH_Lock, &bh->b_state)) { +			if (trylock_buffer(bh)) {  				ASSERT(buffer_mapped(bh));  				if (iomap_valid)  					all_bh = 1; diff --git a/include/asm-arm/arch-aaec2000/io.h b/include/asm-arm/arch-aaec2000/io.h index d710204ac74..bc2364ab875 100644 --- a/include/asm-arm/arch-aaec2000/io.h +++ b/include/asm-arm/arch-aaec2000/io.h @@ -6,7 +6,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-at91/cpu.h b/include/asm-arm/arch-at91/cpu.h index 52df794205c..f24b55c9083 100644 --- a/include/asm-arm/arch-at91/cpu.h +++ b/include/asm-arm/arch-at91/cpu.h @@ -13,7 +13,7 @@  #ifndef __ASM_ARCH_CPU_H  #define __ASM_ARCH_CPU_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/at91_dbgu.h> diff --git a/include/asm-arm/arch-at91/debug-macro.S b/include/asm-arm/arch-at91/debug-macro.S index 13e9f5e1d4f..ff28696b6d9 100644 --- a/include/asm-arm/arch-at91/debug-macro.S +++ b/include/asm-arm/arch-at91/debug-macro.S @@ -11,7 +11,7 @@   *  */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/at91_dbgu.h>  	.macro	addruart,rx diff --git a/include/asm-arm/arch-at91/entry-macro.S b/include/asm-arm/arch-at91/entry-macro.S index 1005eee6219..cbaf6050154 100644 --- a/include/asm-arm/arch-at91/entry-macro.S +++ b/include/asm-arm/arch-at91/entry-macro.S @@ -10,7 +10,7 @@   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/at91_aic.h>  	.macro	disable_fiq diff --git a/include/asm-arm/arch-at91/memory.h b/include/asm-arm/arch-at91/memory.h index 4835d678450..904fbd60f0e 100644 --- a/include/asm-arm/arch-at91/memory.h +++ b/include/asm-arm/arch-at91/memory.h @@ -21,7 +21,7 @@  #ifndef __ASM_ARCH_MEMORY_H  #define __ASM_ARCH_MEMORY_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define PHYS_OFFSET	(AT91_SDRAM_BASE) diff --git a/include/asm-arm/arch-at91/system.h b/include/asm-arm/arch-at91/system.h index 6bf846098ea..c5e3d035726 100644 --- a/include/asm-arm/arch-at91/system.h +++ b/include/asm-arm/arch-at91/system.h @@ -21,7 +21,7 @@  #ifndef __ASM_ARCH_SYSTEM_H  #define __ASM_ARCH_SYSTEM_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/at91_st.h>  #include <asm/arch/at91_dbgu.h> diff --git a/include/asm-arm/arch-at91/timex.h b/include/asm-arm/arch-at91/timex.h index 298d8313cda..67c86a89828 100644 --- a/include/asm-arm/arch-at91/timex.h +++ b/include/asm-arm/arch-at91/timex.h @@ -21,7 +21,7 @@  #ifndef __ASM_ARCH_TIMEX_H  #define __ASM_ARCH_TIMEX_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #if defined(CONFIG_ARCH_AT91RM9200) diff --git a/include/asm-arm/arch-cl7500/entry-macro.S b/include/asm-arm/arch-cl7500/entry-macro.S index 038b761fdad..5bd55557ccc 100644 --- a/include/asm-arm/arch-cl7500/entry-macro.S +++ b/include/asm-arm/arch-cl7500/entry-macro.S @@ -1,4 +1,4 @@ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/entry-macro-iomd.S>  	.equ	ioc_base_high, IOC_BASE & 0xff000000 diff --git a/include/asm-arm/arch-cl7500/io.h b/include/asm-arm/arch-cl7500/io.h index 89a33287f4f..80f9b19cac9 100644 --- a/include/asm-arm/arch-cl7500/io.h +++ b/include/asm-arm/arch-cl7500/io.h @@ -10,7 +10,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-clps711x/entry-macro.S b/include/asm-arm/arch-clps711x/entry-macro.S index cd8c5a0bc7b..3554887cbcc 100644 --- a/include/asm-arm/arch-clps711x/entry-macro.S +++ b/include/asm-arm/arch-clps711x/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/clps7111.h>  		.macro	disable_fiq diff --git a/include/asm-arm/arch-clps711x/io.h b/include/asm-arm/arch-clps711x/io.h index 53d790202c1..2b84dac8b2f 100644 --- a/include/asm-arm/arch-clps711x/io.h +++ b/include/asm-arm/arch-clps711x/io.h @@ -20,7 +20,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-clps711x/system.h b/include/asm-arm/arch-clps711x/system.h index 11e1491535a..1f561772bee 100644 --- a/include/asm-arm/arch-clps711x/system.h +++ b/include/asm-arm/arch-clps711x/system.h @@ -20,7 +20,7 @@  #ifndef __ASM_ARCH_SYSTEM_H  #define __ASM_ARCH_SYSTEM_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/clps7111.h>  #include <asm/io.h> diff --git a/include/asm-arm/arch-clps711x/uncompress.h b/include/asm-arm/arch-clps711x/uncompress.h index 03d233ae87c..8c5684ad086 100644 --- a/include/asm-arm/arch-clps711x/uncompress.h +++ b/include/asm-arm/arch-clps711x/uncompress.h @@ -18,7 +18,7 @@   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   */  #include <asm/arch/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/clps7111.h>  #undef CLPS7111_BASE diff --git a/include/asm-arm/arch-davinci/gpio.h b/include/asm-arm/arch-davinci/gpio.h index ff8de30b2fb..54fda734649 100644 --- a/include/asm-arm/arch-davinci/gpio.h +++ b/include/asm-arm/arch-davinci/gpio.h @@ -14,7 +14,7 @@  #define	__DAVINCI_GPIO_H  #include <linux/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * basic gpio routines diff --git a/include/asm-arm/arch-davinci/system.h b/include/asm-arm/arch-davinci/system.h index 440ac515804..6713e4a44ee 100644 --- a/include/asm-arm/arch-davinci/system.h +++ b/include/asm-arm/arch-davinci/system.h @@ -12,7 +12,7 @@  #define __ASM_ARCH_SYSTEM_H  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  extern void davinci_watchdog_reset(void); diff --git a/include/asm-arm/arch-ebsa285/entry-macro.S b/include/asm-arm/arch-ebsa285/entry-macro.S index e63064edb73..e203c628d50 100644 --- a/include/asm-arm/arch-ebsa285/entry-macro.S +++ b/include/asm-arm/arch-ebsa285/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/irqs.h>  #include <asm/hardware/dec21285.h> diff --git a/include/asm-arm/arch-ebsa285/io.h b/include/asm-arm/arch-ebsa285/io.h index f9c72914186..e88c6e23038 100644 --- a/include/asm-arm/arch-ebsa285/io.h +++ b/include/asm-arm/arch-ebsa285/io.h @@ -14,7 +14,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffff diff --git a/include/asm-arm/arch-ebsa285/system.h b/include/asm-arm/arch-ebsa285/system.h index bf91c695c4b..a720bf7ca12 100644 --- a/include/asm-arm/arch-ebsa285/system.h +++ b/include/asm-arm/arch-ebsa285/system.h @@ -9,7 +9,7 @@   */  #include <asm/hardware/dec21285.h>  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/leds.h>  #include <asm/mach-types.h> diff --git a/include/asm-arm/arch-ep93xx/hardware.h b/include/asm-arm/arch-ep93xx/hardware.h index 9b69f454065..4233f6e8515 100644 --- a/include/asm-arm/arch-ep93xx/hardware.h +++ b/include/asm-arm/arch-ep93xx/hardware.h @@ -1,6 +1,8 @@  /*   * linux/include/asm-arm/arch-ep93xx/hardware.h   */ +#ifndef __ASM_ARCH_HARDWARE_H +#define __ASM_ARCH_HARDWARE_H  #include "ep93xx-regs.h" @@ -10,3 +12,5 @@  #include "gesbc9312.h"  #include "ts72xx.h" + +#endif diff --git a/include/asm-arm/arch-ep93xx/system.h b/include/asm-arm/arch-ep93xx/system.h index 79b71858674..f1a5acf5191 100644 --- a/include/asm-arm/arch-ep93xx/system.h +++ b/include/asm-arm/arch-ep93xx/system.h @@ -2,7 +2,7 @@   * linux/include/asm-arm/arch-ep93xx/system.h   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static inline void arch_idle(void)  { diff --git a/include/asm-arm/arch-h720x/io.h b/include/asm-arm/arch-h720x/io.h index d3ccfd8172b..68814828c9a 100644 --- a/include/asm-arm/arch-h720x/io.h +++ b/include/asm-arm/arch-h720x/io.h @@ -14,7 +14,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-h720x/system.h b/include/asm-arm/arch-h720x/system.h index 8dc1460b230..ddba93760b4 100644 --- a/include/asm-arm/arch-h720x/system.h +++ b/include/asm-arm/arch-h720x/system.h @@ -12,7 +12,7 @@  #ifndef __ASM_ARCH_SYSTEM_H  #define __ASM_ARCH_SYSTEM_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static void arch_idle(void)  { diff --git a/include/asm-arm/arch-h720x/uncompress.h b/include/asm-arm/arch-h720x/uncompress.h index 18c69e0f358..61584cd5f42 100644 --- a/include/asm-arm/arch-h720x/uncompress.h +++ b/include/asm-arm/arch-h720x/uncompress.h @@ -7,7 +7,7 @@  #ifndef __ASM_ARCH_UNCOMPRESS_H  #define __ASM_ARCH_UNCOMPRESS_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define LSR 	0x14  #define TEMPTY 	0x40 diff --git a/include/asm-arm/arch-imx/entry-macro.S b/include/asm-arm/arch-imx/entry-macro.S index 0b84e81031c..5dc0f307c1b 100644 --- a/include/asm-arm/arch-imx/entry-macro.S +++ b/include/asm-arm/arch-imx/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  		.macro	disable_fiq  		.endm diff --git a/include/asm-arm/arch-imx/io.h b/include/asm-arm/arch-imx/io.h index b191cdd0557..1a1d9bb8863 100644 --- a/include/asm-arm/arch-imx/io.h +++ b/include/asm-arm/arch-imx/io.h @@ -20,7 +20,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-imx/irqs.h b/include/asm-arm/arch-imx/irqs.h index f195542898e..238197cfb9d 100644 --- a/include/asm-arm/arch-imx/irqs.h +++ b/include/asm-arm/arch-imx/irqs.h @@ -23,7 +23,7 @@  #define __ARM_IRQS_H__  /* Use the imx definitions */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   *  IMX Interrupt numbers diff --git a/include/asm-arm/arch-integrator/entry-macro.S b/include/asm-arm/arch-integrator/entry-macro.S index 491af1a23de..ef535a68bdd 100644 --- a/include/asm-arm/arch-integrator/entry-macro.S +++ b/include/asm-arm/arch-integrator/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/irqs.h>   		.macro	disable_fiq diff --git a/include/asm-arm/arch-iop13xx/adma.h b/include/asm-arm/arch-iop13xx/adma.h index ef4f5da2029..26f60af6716 100644 --- a/include/asm-arm/arch-iop13xx/adma.h +++ b/include/asm-arm/arch-iop13xx/adma.h @@ -19,7 +19,7 @@  #define _ADMA_H  #include <linux/types.h>  #include <linux/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/iop_adma.h>  #define ADMA_ACCR(chan)	(chan->mmr_base + 0x0) diff --git a/include/asm-arm/arch-iop13xx/timex.h b/include/asm-arm/arch-iop13xx/timex.h index f0c51dd97ed..47564ecb387 100644 --- a/include/asm-arm/arch-iop13xx/timex.h +++ b/include/asm-arm/arch-iop13xx/timex.h @@ -1,3 +1,3 @@ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define CLOCK_TICK_RATE (100 * HZ) diff --git a/include/asm-arm/arch-iop13xx/uncompress.h b/include/asm-arm/arch-iop13xx/uncompress.h index dd9c2934190..5d4418decb8 100644 --- a/include/asm-arm/arch-iop13xx/uncompress.h +++ b/include/asm-arm/arch-iop13xx/uncompress.h @@ -1,6 +1,6 @@  #include <asm/types.h>  #include <linux/serial_reg.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define UART_BASE ((volatile u32 *)IOP13XX_UART1_PHYS)  #define TX_DONE (UART_LSR_TEMT | UART_LSR_THRE) diff --git a/include/asm-arm/arch-iop32x/io.h b/include/asm-arm/arch-iop32x/io.h index 958af751a48..47b2736236e 100644 --- a/include/asm-arm/arch-iop32x/io.h +++ b/include/asm-arm/arch-iop32x/io.h @@ -11,7 +11,7 @@  #ifndef __IO_H  #define __IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  extern void __iomem *__iop3xx_ioremap(unsigned long cookie, size_t size,  	unsigned int mtype); diff --git a/include/asm-arm/arch-iop32x/memory.h b/include/asm-arm/arch-iop32x/memory.h index c51072af214..bdcf03895ee 100644 --- a/include/asm-arm/arch-iop32x/memory.h +++ b/include/asm-arm/arch-iop32x/memory.h @@ -5,7 +5,7 @@  #ifndef __MEMORY_H  #define __MEMORY_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * Physical DRAM offset. diff --git a/include/asm-arm/arch-iop32x/timex.h b/include/asm-arm/arch-iop32x/timex.h index 9934b087311..44570461982 100644 --- a/include/asm-arm/arch-iop32x/timex.h +++ b/include/asm-arm/arch-iop32x/timex.h @@ -4,6 +4,6 @@   * IOP32x architecture timex specifications   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define CLOCK_TICK_RATE		(100 * HZ) diff --git a/include/asm-arm/arch-iop32x/uncompress.h b/include/asm-arm/arch-iop32x/uncompress.h index 070f15818fe..07028786394 100644 --- a/include/asm-arm/arch-iop32x/uncompress.h +++ b/include/asm-arm/arch-iop32x/uncompress.h @@ -5,7 +5,7 @@  #include <asm/types.h>  #include <asm/mach-types.h>  #include <linux/serial_reg.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static volatile u8 *uart_base; diff --git a/include/asm-arm/arch-iop33x/io.h b/include/asm-arm/arch-iop33x/io.h index fec9c53e2b1..3fc607c46f0 100644 --- a/include/asm-arm/arch-iop33x/io.h +++ b/include/asm-arm/arch-iop33x/io.h @@ -11,7 +11,7 @@  #ifndef __IO_H  #define __IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  extern void __iomem *__iop3xx_ioremap(unsigned long cookie, size_t size,  	unsigned int mtype); diff --git a/include/asm-arm/arch-iop33x/memory.h b/include/asm-arm/arch-iop33x/memory.h index c8749127d6a..d798d83c83a 100644 --- a/include/asm-arm/arch-iop33x/memory.h +++ b/include/asm-arm/arch-iop33x/memory.h @@ -5,7 +5,7 @@  #ifndef __MEMORY_H  #define __MEMORY_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * Physical DRAM offset. diff --git a/include/asm-arm/arch-iop33x/timex.h b/include/asm-arm/arch-iop33x/timex.h index fe3e1e369ff..75a001e93da 100644 --- a/include/asm-arm/arch-iop33x/timex.h +++ b/include/asm-arm/arch-iop33x/timex.h @@ -4,6 +4,6 @@   * IOP3xx architecture timex specifications   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define CLOCK_TICK_RATE		(100 * HZ) diff --git a/include/asm-arm/arch-iop33x/uncompress.h b/include/asm-arm/arch-iop33x/uncompress.h index e17fbc05877..34d9e8e8287 100644 --- a/include/asm-arm/arch-iop33x/uncompress.h +++ b/include/asm-arm/arch-iop33x/uncompress.h @@ -5,7 +5,7 @@  #include <asm/types.h>  #include <asm/mach-types.h>  #include <linux/serial_reg.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static volatile u32 *uart_base; diff --git a/include/asm-arm/arch-ixp2000/io.h b/include/asm-arm/arch-ixp2000/io.h index c0ff2c6c66e..5dc1d25dcb4 100644 --- a/include/asm-arm/arch-ixp2000/io.h +++ b/include/asm-arm/arch-ixp2000/io.h @@ -15,7 +15,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT		0xffffffff  #define __mem_pci(a)		(a) diff --git a/include/asm-arm/arch-ixp2000/system.h b/include/asm-arm/arch-ixp2000/system.h index 3cc9a04f68c..8731dd36e45 100644 --- a/include/asm-arm/arch-ixp2000/system.h +++ b/include/asm-arm/arch-ixp2000/system.h @@ -9,7 +9,7 @@   * published by the Free Software Foundation.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  static inline void arch_idle(void) diff --git a/include/asm-arm/arch-ixp23xx/memory.h b/include/asm-arm/arch-ixp23xx/memory.h index 6d859d742d7..c3d906af9fe 100644 --- a/include/asm-arm/arch-ixp23xx/memory.h +++ b/include/asm-arm/arch-ixp23xx/memory.h @@ -12,7 +12,7 @@  #ifndef __ASM_ARCH_MEMORY_H  #define __ASM_ARCH_MEMORY_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * Physical DRAM offset. @@ -28,7 +28,6 @@   *		to an address that the kernel can use.   */  #ifndef __ASSEMBLY__ -#include <asm/mach-types.h>  #define __virt_to_bus(v)						\  	({ unsigned int ret;						\ diff --git a/include/asm-arm/arch-ixp23xx/system.h b/include/asm-arm/arch-ixp23xx/system.h index 925e6b0c338..54e8a51475e 100644 --- a/include/asm-arm/arch-ixp23xx/system.h +++ b/include/asm-arm/arch-ixp23xx/system.h @@ -8,7 +8,7 @@   * published by the Free Software Foundation.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  static inline void arch_idle(void) diff --git a/include/asm-arm/arch-ixp4xx/avila.h b/include/asm-arm/arch-ixp4xx/avila.h index 0dfea0ccd6b..88f053d6443 100644 --- a/include/asm-arm/arch-ixp4xx/avila.h +++ b/include/asm-arm/arch-ixp4xx/avila.h @@ -16,7 +16,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H__ -#error "Do not include this directly, instead #include <asm/hardware.h>" +#error "Do not include this directly, instead #include <asm/arch/hardware.h>"  #endif  #define	AVILA_SDA_PIN		7 diff --git a/include/asm-arm/arch-ixp4xx/coyote.h b/include/asm-arm/arch-ixp4xx/coyote.h index 7ac9ba2c035..428b298afc1 100644 --- a/include/asm-arm/arch-ixp4xx/coyote.h +++ b/include/asm-arm/arch-ixp4xx/coyote.h @@ -13,7 +13,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H__ -#error "Do not include this directly, instead #include <asm/hardware.h>" +#error "Do not include this directly, instead #include <asm/arch/hardware.h>"  #endif  /* PCI controller GPIO to IRQ pin mappings */ diff --git a/include/asm-arm/arch-ixp4xx/dma.h b/include/asm-arm/arch-ixp4xx/dma.h index 2c7f5327d80..0b755d6e919 100644 --- a/include/asm-arm/arch-ixp4xx/dma.h +++ b/include/asm-arm/arch-ixp4xx/dma.h @@ -14,7 +14,7 @@  #include <linux/device.h>  #include <asm/page.h>  #include <asm/sizes.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define MAX_DMA_ADDRESS		(PAGE_OFFSET + SZ_64M) diff --git a/include/asm-arm/arch-ixp4xx/dsmg600.h b/include/asm-arm/arch-ixp4xx/dsmg600.h index b7673e171ab..5afae8c2e29 100644 --- a/include/asm-arm/arch-ixp4xx/dsmg600.h +++ b/include/asm-arm/arch-ixp4xx/dsmg600.h @@ -13,7 +13,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H__ -#error "Do not include this directly, instead #include <asm/hardware.h>" +#error "Do not include this directly, instead #include <asm/arch/hardware.h>"  #endif  #define DSMG600_SDA_PIN		5 diff --git a/include/asm-arm/arch-ixp4xx/entry-macro.S b/include/asm-arm/arch-ixp4xx/entry-macro.S index f144a005ed9..ed313c52a8a 100644 --- a/include/asm-arm/arch-ixp4xx/entry-macro.S +++ b/include/asm-arm/arch-ixp4xx/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  		.macro	disable_fiq  		.endm diff --git a/include/asm-arm/arch-ixp4xx/fsg.h b/include/asm-arm/arch-ixp4xx/fsg.h index c0100cc7981..168b9848eb4 100644 --- a/include/asm-arm/arch-ixp4xx/fsg.h +++ b/include/asm-arm/arch-ixp4xx/fsg.h @@ -16,7 +16,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H__ -#error "Do not include this directly, instead #include <asm/hardware.h>" +#error "Do not include this directly, instead #include <asm/arch/hardware.h>"  #endif  #define FSG_SDA_PIN		12 diff --git a/include/asm-arm/arch-ixp4xx/gpio.h b/include/asm-arm/arch-ixp4xx/gpio.h index 3a4c5b8ae9e..28e7d27b1b8 100644 --- a/include/asm-arm/arch-ixp4xx/gpio.h +++ b/include/asm-arm/arch-ixp4xx/gpio.h @@ -25,7 +25,7 @@  #ifndef __ASM_ARCH_IXP4XX_GPIO_H  #define __ASM_ARCH_IXP4XX_GPIO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static inline int gpio_request(unsigned gpio, const char *label)  { diff --git a/include/asm-arm/arch-ixp4xx/gtwx5715.h b/include/asm-arm/arch-ixp4xx/gtwx5715.h index c3069d67c00..2192dedc2f5 100644 --- a/include/asm-arm/arch-ixp4xx/gtwx5715.h +++ b/include/asm-arm/arch-ixp4xx/gtwx5715.h @@ -21,7 +21,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H__ -#error "Do not include this directly, instead #include <asm/hardware.h>" +#error "Do not include this directly, instead #include <asm/arch/hardware.h>"  #endif  #include "irqs.h" diff --git a/include/asm-arm/arch-ixp4xx/io.h b/include/asm-arm/arch-ixp4xx/io.h index de181ce958d..8e7426081f0 100644 --- a/include/asm-arm/arch-ixp4xx/io.h +++ b/include/asm-arm/arch-ixp4xx/io.h @@ -15,7 +15,7 @@  #include <linux/bitops.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffff0000 diff --git a/include/asm-arm/arch-ixp4xx/ixdp425.h b/include/asm-arm/arch-ixp4xx/ixdp425.h index e0791af3bfe..d0a1dcb48d5 100644 --- a/include/asm-arm/arch-ixp4xx/ixdp425.h +++ b/include/asm-arm/arch-ixp4xx/ixdp425.h @@ -13,7 +13,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H__ -#error "Do not include this directly, instead #include <asm/hardware.h>" +#error "Do not include this directly, instead #include <asm/arch/hardware.h>"  #endif  #define	IXDP425_SDA_PIN		7 diff --git a/include/asm-arm/arch-ixp4xx/nas100d.h b/include/asm-arm/arch-ixp4xx/nas100d.h index 98d937897bc..ecb12d66399 100644 --- a/include/asm-arm/arch-ixp4xx/nas100d.h +++ b/include/asm-arm/arch-ixp4xx/nas100d.h @@ -16,7 +16,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H__ -#error "Do not include this directly, instead #include <asm/hardware.h>" +#error "Do not include this directly, instead #include <asm/arch/hardware.h>"  #endif  #define NAS100D_SDA_PIN		5 diff --git a/include/asm-arm/arch-ixp4xx/nslu2.h b/include/asm-arm/arch-ixp4xx/nslu2.h index 714bbc65126..fa895f44e43 100644 --- a/include/asm-arm/arch-ixp4xx/nslu2.h +++ b/include/asm-arm/arch-ixp4xx/nslu2.h @@ -15,7 +15,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H__ -#error "Do not include this directly, instead #include <asm/hardware.h>" +#error "Do not include this directly, instead #include <asm/arch/hardware.h>"  #endif  #define NSLU2_SDA_PIN		7 diff --git a/include/asm-arm/arch-ixp4xx/platform.h b/include/asm-arm/arch-ixp4xx/platform.h index a1f2b5404db..b2af5154cef 100644 --- a/include/asm-arm/arch-ixp4xx/platform.h +++ b/include/asm-arm/arch-ixp4xx/platform.h @@ -8,7 +8,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H__ -#error "Do not include this directly, instead #include <asm/hardware.h>" +#error "Do not include this directly, instead #include <asm/arch/hardware.h>"  #endif  #ifndef __ASSEMBLY__ diff --git a/include/asm-arm/arch-ixp4xx/prpmc1100.h b/include/asm-arm/arch-ixp4xx/prpmc1100.h index e2532ab7f48..100855feafd 100644 --- a/include/asm-arm/arch-ixp4xx/prpmc1100.h +++ b/include/asm-arm/arch-ixp4xx/prpmc1100.h @@ -13,7 +13,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H__ -#error "Do not include this directly, instead #include <asm/hardware.h>" +#error "Do not include this directly, instead #include <asm/arch/hardware.h>"  #endif  #define	PRPMC1100_FLASH_BASE	IXP4XX_EXP_BUS_CS0_BASE_PHYS diff --git a/include/asm-arm/arch-ixp4xx/system.h b/include/asm-arm/arch-ixp4xx/system.h index 8e1db423b1c..f11b92262a0 100644 --- a/include/asm-arm/arch-ixp4xx/system.h +++ b/include/asm-arm/arch-ixp4xx/system.h @@ -9,7 +9,7 @@   *   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static inline void arch_idle(void)  { diff --git a/include/asm-arm/arch-ixp4xx/timex.h b/include/asm-arm/arch-ixp4xx/timex.h index 3745e35cc03..c2559e28cbc 100644 --- a/include/asm-arm/arch-ixp4xx/timex.h +++ b/include/asm-arm/arch-ixp4xx/timex.h @@ -3,7 +3,7 @@   *    */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * We use IXP425 General purpose timer for our timer needs, it runs at  diff --git a/include/asm-arm/arch-ks8695/debug-macro.S b/include/asm-arm/arch-ks8695/debug-macro.S index cd5f2fb1f06..d2583ffffa9 100644 --- a/include/asm-arm/arch-ks8695/debug-macro.S +++ b/include/asm-arm/arch-ks8695/debug-macro.S @@ -11,7 +11,7 @@   * published by the Free Software Foundation.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/regs-uart.h>  	.macro	addruart, rx diff --git a/include/asm-arm/arch-ks8695/entry-macro.S b/include/asm-arm/arch-ks8695/entry-macro.S index e34bdf85920..3993cfe67cf 100644 --- a/include/asm-arm/arch-ks8695/entry-macro.S +++ b/include/asm-arm/arch-ks8695/entry-macro.S @@ -11,7 +11,7 @@   * warranty of any kind, whether express or implied.  */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/regs-irq.h>  	.macro	disable_fiq diff --git a/include/asm-arm/arch-ks8695/memory.h b/include/asm-arm/arch-ks8695/memory.h index 24f6a6e4a30..1b542f77977 100644 --- a/include/asm-arm/arch-ks8695/memory.h +++ b/include/asm-arm/arch-ks8695/memory.h @@ -13,7 +13,7 @@  #ifndef __ASM_ARCH_MEMORY_H  #define __ASM_ARCH_MEMORY_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * Physical SRAM offset. diff --git a/include/asm-arm/arch-l7200/aux_reg.h b/include/asm-arm/arch-l7200/aux_reg.h index 5b4396de16a..762cbc76c50 100644 --- a/include/asm-arm/arch-l7200/aux_reg.h +++ b/include/asm-arm/arch-l7200/aux_reg.h @@ -9,7 +9,7 @@  #ifndef _ASM_ARCH_AUXREG_H  #define _ASM_ARCH_AUXREG_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define l7200aux_reg	*((volatile unsigned int *) (AUX_BASE)) diff --git a/include/asm-arm/arch-l7200/entry-macro.S b/include/asm-arm/arch-l7200/entry-macro.S index 63411d3e9df..d5e7294df1d 100644 --- a/include/asm-arm/arch-l7200/entry-macro.S +++ b/include/asm-arm/arch-l7200/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  		.equ	irq_base_addr,	IO_BASE_2 diff --git a/include/asm-arm/arch-l7200/gp_timers.h b/include/asm-arm/arch-l7200/gp_timers.h index 9c4804d1357..6f20962df24 100644 --- a/include/asm-arm/arch-l7200/gp_timers.h +++ b/include/asm-arm/arch-l7200/gp_timers.h @@ -10,7 +10,7 @@  #ifndef _ASM_ARCH_GPTIMERS_H  #define _ASM_ARCH_GPTIMERS_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * Layout of L7200 general purpose timer registers diff --git a/include/asm-arm/arch-l7200/io.h b/include/asm-arm/arch-l7200/io.h index 645dbdfb390..e24a10a7ed8 100644 --- a/include/asm-arm/arch-l7200/io.h +++ b/include/asm-arm/arch-l7200/io.h @@ -10,7 +10,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-l7200/system.h b/include/asm-arm/arch-l7200/system.h index 18825cf071b..efef950a5b5 100644 --- a/include/asm-arm/arch-l7200/system.h +++ b/include/asm-arm/arch-l7200/system.h @@ -12,7 +12,7 @@  #ifndef __ASM_ARCH_SYSTEM_H  #define __ASM_ARCH_SYSTEM_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static inline void arch_idle(void)  { diff --git a/include/asm-arm/arch-l7200/uncompress.h b/include/asm-arm/arch-l7200/uncompress.h index 04be2a08863..c5ba0adf4a5 100644 --- a/include/asm-arm/arch-l7200/uncompress.h +++ b/include/asm-arm/arch-l7200/uncompress.h @@ -9,7 +9,7 @@   *  07-26-2000	SJH	Removed hard coded baud rate   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_UART  IO_START + 0x00044000 diff --git a/include/asm-arm/arch-lh7a40x/entry-macro.S b/include/asm-arm/arch-lh7a40x/entry-macro.S index ffe397250f0..34468e06462 100644 --- a/include/asm-arm/arch-lh7a40x/entry-macro.S +++ b/include/asm-arm/arch-lh7a40x/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/irqs.h>  /* In order to allow there to be support for both of the processor diff --git a/include/asm-arm/arch-lh7a40x/io.h b/include/asm-arm/arch-lh7a40x/io.h index 17bc9409748..8d591d0927c 100644 --- a/include/asm-arm/arch-lh7a40x/io.h +++ b/include/asm-arm/arch-lh7a40x/io.h @@ -11,7 +11,7 @@  #ifndef __ASM_ARCH_IO_H  #define __ASM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-msm/debug-macro.S b/include/asm-arm/arch-msm/debug-macro.S index 393d5272e50..e131b44b210 100644 --- a/include/asm-arm/arch-msm/debug-macro.S +++ b/include/asm-arm/arch-msm/debug-macro.S @@ -14,7 +14,7 @@   *   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/msm_iomap.h>  	.macro	addruart,rx diff --git a/include/asm-arm/arch-msm/system.h b/include/asm-arm/arch-msm/system.h index 7c5544bdd0c..fb31b3aa675 100644 --- a/include/asm-arm/arch-msm/system.h +++ b/include/asm-arm/arch-msm/system.h @@ -13,7 +13,7 @@   *   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  void arch_idle(void); diff --git a/include/asm-arm/arch-mxc/gpio.h b/include/asm-arm/arch-mxc/gpio.h index d393e15f5a6..5f13a65e404 100644 --- a/include/asm-arm/arch-mxc/gpio.h +++ b/include/asm-arm/arch-mxc/gpio.h @@ -19,7 +19,7 @@  #ifndef __ASM_ARCH_MXC_GPIO_H__  #define __ASM_ARCH_MXC_GPIO_H__ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm-generic/gpio.h>  /* use gpiolib dispatchers */ diff --git a/include/asm-arm/arch-mxc/irqs.h b/include/asm-arm/arch-mxc/irqs.h index f416130718c..21411efc10f 100644 --- a/include/asm-arm/arch-mxc/irqs.h +++ b/include/asm-arm/arch-mxc/irqs.h @@ -11,6 +11,6 @@  #ifndef __ASM_ARCH_MXC_IRQS_H__  #define __ASM_ARCH_MXC_IRQS_H__ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #endif /* __ASM_ARCH_MXC_IRQS_H__ */ diff --git a/include/asm-arm/arch-mxc/memory.h b/include/asm-arm/arch-mxc/memory.h index 059f83023a1..7e669ee0d63 100644 --- a/include/asm-arm/arch-mxc/memory.h +++ b/include/asm-arm/arch-mxc/memory.h @@ -11,7 +11,7 @@  #ifndef __ASM_ARCH_MXC_MEMORY_H__  #define __ASM_ARCH_MXC_MEMORY_H__ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * Virtual view <-> DMA view memory address translations diff --git a/include/asm-arm/arch-mxc/mxc_timer.h b/include/asm-arm/arch-mxc/mxc_timer.h index 6cb11f4f1a0..5439fa6cf61 100644 --- a/include/asm-arm/arch-mxc/mxc_timer.h +++ b/include/asm-arm/arch-mxc/mxc_timer.h @@ -24,7 +24,7 @@  #define __PLAT_MXC_TIMER_H  #include <linux/clk.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #ifdef CONFIG_ARCH_IMX  #define TIMER_BASE		IO_ADDRESS(TIM1_BASE_ADDR) diff --git a/include/asm-arm/arch-mxc/timex.h b/include/asm-arm/arch-mxc/timex.h index 59019fa58f8..432e0c84c50 100644 --- a/include/asm-arm/arch-mxc/timex.h +++ b/include/asm-arm/arch-mxc/timex.h @@ -20,6 +20,6 @@  #ifndef __ASM_ARCH_MXC_TIMEX_H__  #define __ASM_ARCH_MXC_TIMEX_H__ -#include <asm/hardware.h>	/* for CLOCK_TICK_RATE */ +#include <asm/arch/hardware.h>	/* for CLOCK_TICK_RATE */  #endif				/* __ASM_ARCH_MXC_TIMEX_H__ */ diff --git a/include/asm-arm/arch-mxc/uncompress.h b/include/asm-arm/arch-mxc/uncompress.h index 42cc0cb3fef..18f33b0cdeb 100644 --- a/include/asm-arm/arch-mxc/uncompress.h +++ b/include/asm-arm/arch-mxc/uncompress.h @@ -25,7 +25,7 @@  #define __MXC_BOOT_UNCOMPRESS -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define UART(x) (*(volatile unsigned long *)(serial_port + (x))) diff --git a/include/asm-arm/arch-netx/entry-macro.S b/include/asm-arm/arch-netx/entry-macro.S index 83ad188a084..4115bbdf97a 100644 --- a/include/asm-arm/arch-netx/entry-macro.S +++ b/include/asm-arm/arch-netx/entry-macro.S @@ -18,7 +18,7 @@   * along with this program; if not, write to the Free Software   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  		.macro  disable_fiq  		.endm diff --git a/include/asm-arm/arch-netx/system.h b/include/asm-arm/arch-netx/system.h index 52adf368d76..0624d87e1db 100644 --- a/include/asm-arm/arch-netx/system.h +++ b/include/asm-arm/arch-netx/system.h @@ -20,7 +20,7 @@  #define __ASM_ARCH_SYSTEM_H  #include <asm/io.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include "netx-regs.h"  static inline void arch_idle(void) diff --git a/include/asm-arm/arch-ns9xxx/debug-macro.S b/include/asm-arm/arch-ns9xxx/debug-macro.S index b21b93eb2db..c78908d7203 100644 --- a/include/asm-arm/arch-ns9xxx/debug-macro.S +++ b/include/asm-arm/arch-ns9xxx/debug-macro.S @@ -7,9 +7,9 @@   * under the terms of the GNU General Public License version 2 as published by   * the Free Software Foundation.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h> -#include <asm/arch-ns9xxx/regs-board-a9m9750dev.h> +#include <asm/arch/regs-board-a9m9750dev.h>  		.macro	addruart,rx  		mrc	p15, 0, \rx, c1, c0 diff --git a/include/asm-arm/arch-ns9xxx/entry-macro.S b/include/asm-arm/arch-ns9xxx/entry-macro.S index 89a21c53046..e9d9449d300 100644 --- a/include/asm-arm/arch-ns9xxx/entry-macro.S +++ b/include/asm-arm/arch-ns9xxx/entry-macro.S @@ -8,8 +8,8 @@   * under the terms of the GNU General Public License version 2 as published by   * the Free Software Foundation.   */ -#include <asm/hardware.h> -#include <asm/arch-ns9xxx/regs-sys-common.h> +#include <asm/arch/hardware.h> +#include <asm/arch/regs-sys-common.h>  		.macro	get_irqnr_preamble, base, tmp  		ldr	\base, =SYS_ISRADDR diff --git a/include/asm-arm/arch-ns9xxx/processor.h b/include/asm-arm/arch-ns9xxx/processor.h index f7b53b65de8..3137e5ba01a 100644 --- a/include/asm-arm/arch-ns9xxx/processor.h +++ b/include/asm-arm/arch-ns9xxx/processor.h @@ -11,7 +11,7 @@  #ifndef __ASM_ARCH_PROCESSOR_H  #define __ASM_ARCH_PROCESSOR_H -#include <asm/arch-ns9xxx/module.h> +#include <asm/arch/module.h>  #define processor_is_ns9210()	(0			\  		|| module_is_cc7ucamry()		\ diff --git a/include/asm-arm/arch-ns9xxx/regs-bbu.h b/include/asm-arm/arch-ns9xxx/regs-bbu.h index 7ee194dc635..b41b31d04f0 100644 --- a/include/asm-arm/arch-ns9xxx/regs-bbu.h +++ b/include/asm-arm/arch-ns9xxx/regs-bbu.h @@ -11,7 +11,7 @@  #ifndef __ASM_ARCH_REGSBBU_H  #define __ASM_ARCH_REGSBBU_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /* BBus Utility */ diff --git a/include/asm-arm/arch-ns9xxx/regs-board-a9m9750dev.h b/include/asm-arm/arch-ns9xxx/regs-board-a9m9750dev.h index afa3a9db3e1..6bf1ed2ac3d 100644 --- a/include/asm-arm/arch-ns9xxx/regs-board-a9m9750dev.h +++ b/include/asm-arm/arch-ns9xxx/regs-board-a9m9750dev.h @@ -11,7 +11,7 @@  #ifndef __ASM_ARCH_REGSBOARDA9M9750_H  #define __ASM_ARCH_REGSBOARDA9M9750_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define FPGA_UARTA_BASE	io_p2v(NS9XXX_CSxSTAT_PHYS(0))  #define FPGA_UARTB_BASE	io_p2v(NS9XXX_CSxSTAT_PHYS(0) + 0x08) diff --git a/include/asm-arm/arch-ns9xxx/regs-mem.h b/include/asm-arm/arch-ns9xxx/regs-mem.h index fb455a0ed84..023f7be6f4c 100644 --- a/include/asm-arm/arch-ns9xxx/regs-mem.h +++ b/include/asm-arm/arch-ns9xxx/regs-mem.h @@ -11,7 +11,7 @@  #ifndef __ASM_ARCH_REGSMEM_H  #define __ASM_ARCH_REGSMEM_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /* Memory Module */ diff --git a/include/asm-arm/arch-ns9xxx/regs-sys-common.h b/include/asm-arm/arch-ns9xxx/regs-sys-common.h index 956c57cb781..bc82d5ec2a8 100644 --- a/include/asm-arm/arch-ns9xxx/regs-sys-common.h +++ b/include/asm-arm/arch-ns9xxx/regs-sys-common.h @@ -11,7 +11,7 @@  #ifndef __ASM_ARCH_REGSSYSCOMMON_H  #define __ASM_ARCH_REGSSYSCOMMON_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /* Interrupt Vector Address Register Level x */  #define SYS_IVA(x)	__REG2(0xa09000c4, (x)) diff --git a/include/asm-arm/arch-ns9xxx/regs-sys-ns9360.h b/include/asm-arm/arch-ns9xxx/regs-sys-ns9360.h index 318b6945afb..821275a88cb 100644 --- a/include/asm-arm/arch-ns9xxx/regs-sys-ns9360.h +++ b/include/asm-arm/arch-ns9xxx/regs-sys-ns9360.h @@ -11,7 +11,7 @@  #ifndef __ASM_ARCH_REGSSYSNS9360_H  #define __ASM_ARCH_REGSSYSNS9360_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /* System Control Module */ diff --git a/include/asm-arm/arch-ns9xxx/system.h b/include/asm-arm/arch-ns9xxx/system.h index 1348073afe4..c2941684d66 100644 --- a/include/asm-arm/arch-ns9xxx/system.h +++ b/include/asm-arm/arch-ns9xxx/system.h @@ -12,8 +12,8 @@  #define __ASM_ARCH_SYSTEM_H  #include <asm/proc-fns.h> -#include <asm/arch-ns9xxx/processor.h> -#include <asm/arch-ns9xxx/processor-ns9360.h> +#include <asm/arch/processor.h> +#include <asm/arch/processor-ns9360.h>  static inline void arch_idle(void)  { diff --git a/include/asm-arm/arch-omap/board.h b/include/asm-arm/arch-omap/board.h index db44c5d1f1a..99564c70f12 100644 --- a/include/asm-arm/arch-omap/board.h +++ b/include/asm-arm/arch-omap/board.h @@ -154,7 +154,7 @@ struct omap_version_config {  }; -#include <asm-arm/arch-omap/board-nokia.h> +#include <asm/arch/board-nokia.h>  struct omap_board_config_entry {  	u16 tag; diff --git a/include/asm-arm/arch-omap/entry-macro.S b/include/asm-arm/arch-omap/entry-macro.S index 369093a45fc..67ed7839e78 100644 --- a/include/asm-arm/arch-omap/entry-macro.S +++ b/include/asm-arm/arch-omap/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/io.h>  #include <asm/arch/irqs.h> diff --git a/include/asm-arm/arch-omap/io.h b/include/asm-arm/arch-omap/io.h index 0b13557fd30..449e3568baa 100644 --- a/include/asm-arm/arch-omap/io.h +++ b/include/asm-arm/arch-omap/io.h @@ -34,7 +34,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-omap/irqs.h b/include/asm-arm/arch-omap/irqs.h index 7464c694859..afbf1e84646 100644 --- a/include/asm-arm/arch-omap/irqs.h +++ b/include/asm-arm/arch-omap/irqs.h @@ -327,6 +327,6 @@  extern void omap_init_irq(void);  #endif -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #endif diff --git a/include/asm-arm/arch-omap/mcbsp.h b/include/asm-arm/arch-omap/mcbsp.h index 26c78f67dc8..3da459a282b 100644 --- a/include/asm-arm/arch-omap/mcbsp.h +++ b/include/asm-arm/arch-omap/mcbsp.h @@ -27,7 +27,7 @@  #include <linux/completion.h>  #include <linux/spinlock.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/clock.h>  #define OMAP730_MCBSP1_BASE	0xfffb1000 diff --git a/include/asm-arm/arch-omap/mtd-xip.h b/include/asm-arm/arch-omap/mtd-xip.h index a73a28571fe..f4714b5270d 100644 --- a/include/asm-arm/arch-omap/mtd-xip.h +++ b/include/asm-arm/arch-omap/mtd-xip.h @@ -14,7 +14,7 @@  #ifndef __ARCH_OMAP_MTD_XIP_H__  #define __ARCH_OMAP_MTD_XIP_H__ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define OMAP_MPU_TIMER_BASE	(0xfffec500)  #define OMAP_MPU_TIMER_OFFSET	0x100 diff --git a/include/asm-arm/arch-omap/system.h b/include/asm-arm/arch-omap/system.h index ac2bfa433f0..176d9d6c258 100644 --- a/include/asm-arm/arch-omap/system.h +++ b/include/asm-arm/arch-omap/system.h @@ -7,7 +7,7 @@  #include <linux/clk.h>  #include <asm/mach-types.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #ifndef CONFIG_MACH_VOICEBLUE  #define voiceblue_reset()		do {} while (0) diff --git a/include/asm-arm/arch-pnx4008/system.h b/include/asm-arm/arch-pnx4008/system.h index 6e3da70ab10..17f9d7f9e5a 100644 --- a/include/asm-arm/arch-pnx4008/system.h +++ b/include/asm-arm/arch-pnx4008/system.h @@ -21,7 +21,7 @@  #ifndef __ASM_ARCH_SYSTEM_H  #define __ASM_ARCH_SYSTEM_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/platform.h> diff --git a/include/asm-arm/arch-pnx4008/timex.h b/include/asm-arm/arch-pnx4008/timex.h index ee470a39089..f22ee24a021 100644 --- a/include/asm-arm/arch-pnx4008/timex.h +++ b/include/asm-arm/arch-pnx4008/timex.h @@ -14,7 +14,7 @@  #ifndef __PNX4008_TIMEX_H  #define __PNX4008_TIMEX_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #define CLOCK_TICK_RATE		1000000 diff --git a/include/asm-arm/arch-pxa/entry-macro.S b/include/asm-arm/arch-pxa/entry-macro.S index c145bb01bc8..897d164da22 100644 --- a/include/asm-arm/arch-pxa/entry-macro.S +++ b/include/asm-arm/arch-pxa/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/irqs.h>  		.macro	disable_fiq diff --git a/include/asm-arm/arch-pxa/gpio.h b/include/asm-arm/arch-pxa/gpio.h index bdbf5f9ffdd..2c1e3d8ad7a 100644 --- a/include/asm-arm/arch-pxa/gpio.h +++ b/include/asm-arm/arch-pxa/gpio.h @@ -26,7 +26,7 @@  #include <asm/arch/pxa-regs.h>  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm-generic/gpio.h> diff --git a/include/asm-arm/arch-pxa/io.h b/include/asm-arm/arch-pxa/io.h index 7f8d817b446..af34e0f2f7d 100644 --- a/include/asm-arm/arch-pxa/io.h +++ b/include/asm-arm/arch-pxa/io.h @@ -6,7 +6,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-realview/entry-macro.S b/include/asm-arm/arch-realview/entry-macro.S index cd26306d8e5..31a39a7cdaa 100644 --- a/include/asm-arm/arch-realview/entry-macro.S +++ b/include/asm-arm/arch-realview/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/gic.h>  		.macro	disable_fiq diff --git a/include/asm-arm/arch-realview/system.h b/include/asm-arm/arch-realview/system.h index 6f3d0ce0ca1..bff3d3fcf84 100644 --- a/include/asm-arm/arch-realview/system.h +++ b/include/asm-arm/arch-realview/system.h @@ -21,7 +21,7 @@  #ifndef __ASM_ARCH_SYSTEM_H  #define __ASM_ARCH_SYSTEM_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/platform.h> diff --git a/include/asm-arm/arch-realview/uncompress.h b/include/asm-arm/arch-realview/uncompress.h index 4c905d7a13a..3f7ae2e0260 100644 --- a/include/asm-arm/arch-realview/uncompress.h +++ b/include/asm-arm/arch-realview/uncompress.h @@ -17,7 +17,7 @@   * along with this program; if not, write to the Free Software   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #include <asm/arch/board-eb.h> diff --git a/include/asm-arm/arch-rpc/entry-macro.S b/include/asm-arm/arch-rpc/entry-macro.S index 038b761fdad..5bd55557ccc 100644 --- a/include/asm-arm/arch-rpc/entry-macro.S +++ b/include/asm-arm/arch-rpc/entry-macro.S @@ -1,4 +1,4 @@ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/entry-macro-iomd.S>  	.equ	ioc_base_high, IOC_BASE & 0xff000000 diff --git a/include/asm-arm/arch-rpc/io.h b/include/asm-arm/arch-rpc/io.h index 6bd2295c0e0..0d10d4591a4 100644 --- a/include/asm-arm/arch-rpc/io.h +++ b/include/asm-arm/arch-rpc/io.h @@ -13,7 +13,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-rpc/system.h b/include/asm-arm/arch-rpc/system.h index 729c2ae4b51..ca3277d1d5e 100644 --- a/include/asm-arm/arch-rpc/system.h +++ b/include/asm-arm/arch-rpc/system.h @@ -7,7 +7,7 @@   * it under the terms of the GNU General Public License version 2 as   * published by the Free Software Foundation.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/iomd.h>  #include <asm/io.h> diff --git a/include/asm-arm/arch-rpc/uncompress.h b/include/asm-arm/arch-rpc/uncompress.h index b8e29efd8c5..844e4d469fb 100644 --- a/include/asm-arm/arch-rpc/uncompress.h +++ b/include/asm-arm/arch-rpc/uncompress.h @@ -9,7 +9,7 @@   */  #define VIDMEM ((char *)SCREEN_START) -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/setup.h>  #include <asm/page.h> diff --git a/include/asm-arm/arch-s3c2410/dma.h b/include/asm-arm/arch-s3c2410/dma.h index 4f291d9b7d9..86eaa0c2dc1 100644 --- a/include/asm-arm/arch-s3c2410/dma.h +++ b/include/asm-arm/arch-s3c2410/dma.h @@ -14,7 +14,7 @@  #define __ASM_ARCH_DMA_H __FILE__  #include <linux/sysdev.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  /*   * This is the maximum DMA address(physical address) that can be DMAd to. diff --git a/include/asm-arm/arch-s3c2410/entry-macro.S b/include/asm-arm/arch-s3c2410/entry-macro.S index bbec0a8ff15..f70d051b267 100644 --- a/include/asm-arm/arch-s3c2410/entry-macro.S +++ b/include/asm-arm/arch-s3c2410/entry-macro.S @@ -19,7 +19,7 @@  #define INTPND		(0x10)  #define INTOFFSET	(0x14) -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  	.macro  get_irqnr_preamble, base, tmp diff --git a/include/asm-arm/arch-s3c2410/hardware.h b/include/asm-arm/arch-s3c2410/hardware.h index 29592c3ebf2..6dd10be4314 100644 --- a/include/asm-arm/arch-s3c2410/hardware.h +++ b/include/asm-arm/arch-s3c2410/hardware.h @@ -13,10 +13,6 @@  #ifndef __ASM_ARCH_HARDWARE_H  #define __ASM_ARCH_HARDWARE_H -#ifndef __ASM_HARDWARE_H -#error "Do not include this directly, instead #include <asm/hardware.h>" -#endif -  #ifndef __ASSEMBLY__  /* external functions for GPIO support diff --git a/include/asm-arm/arch-s3c2410/io.h b/include/asm-arm/arch-s3c2410/io.h index 6b35a4f2630..3756c993776 100644 --- a/include/asm-arm/arch-s3c2410/io.h +++ b/include/asm-arm/arch-s3c2410/io.h @@ -9,7 +9,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-s3c2410/system-reset.h b/include/asm-arm/arch-s3c2410/system-reset.h index 1615bce0c02..beeec770dcf 100644 --- a/include/asm-arm/arch-s3c2410/system-reset.h +++ b/include/asm-arm/arch-s3c2410/system-reset.h @@ -10,7 +10,7 @@   * published by the Free Software Foundation.  */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/plat-s3c/regs-watchdog.h> diff --git a/include/asm-arm/arch-s3c2410/system.h b/include/asm-arm/arch-s3c2410/system.h index ad258085e53..98f690e7d33 100644 --- a/include/asm-arm/arch-s3c2410/system.h +++ b/include/asm-arm/arch-s3c2410/system.h @@ -10,7 +10,7 @@   * published by the Free Software Foundation.  */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/map.h> diff --git a/include/asm-arm/arch-sa1100/badge4.h b/include/asm-arm/arch-sa1100/badge4.h index 8d7a671492d..d93a9a83b25 100644 --- a/include/asm-arm/arch-sa1100/badge4.h +++ b/include/asm-arm/arch-sa1100/badge4.h @@ -13,7 +13,7 @@   */  #ifndef __ASM_ARCH_HARDWARE_H -#error "include <asm/hardware.h> instead" +#error "include <asm/arch/hardware.h> instead"  #endif  #define BADGE4_SA1111_BASE		(0x48000000) diff --git a/include/asm-arm/arch-sa1100/debug-macro.S b/include/asm-arm/arch-sa1100/debug-macro.S index 267c317a740..1b7753654bd 100644 --- a/include/asm-arm/arch-sa1100/debug-macro.S +++ b/include/asm-arm/arch-sa1100/debug-macro.S @@ -10,7 +10,7 @@   * published by the Free Software Foundation.   *  */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  		.macro	addruart,rx  		mrc	p15, 0, \rx, c1, c0 diff --git a/include/asm-arm/arch-sa1100/gpio.h b/include/asm-arm/arch-sa1100/gpio.h index 93d3395b102..e66ecf74e80 100644 --- a/include/asm-arm/arch-sa1100/gpio.h +++ b/include/asm-arm/arch-sa1100/gpio.h @@ -24,7 +24,7 @@  #ifndef __ASM_ARCH_SA1100_GPIO_H  #define __ASM_ARCH_SA1100_GPIO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/irq.h>  #include <asm-generic/gpio.h> diff --git a/include/asm-arm/arch-sa1100/ide.h b/include/asm-arm/arch-sa1100/ide.h index 193f6c15f4d..24972f30195 100644 --- a/include/asm-arm/arch-sa1100/ide.h +++ b/include/asm-arm/arch-sa1100/ide.h @@ -10,7 +10,7 @@   */  #include <asm/irq.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #error "This code is broken and needs update to match with current ide support" diff --git a/include/asm-arm/arch-sa1100/system.h b/include/asm-arm/arch-sa1100/system.h index aef91e3b63f..63375a0c014 100644 --- a/include/asm-arm/arch-sa1100/system.h +++ b/include/asm-arm/arch-sa1100/system.h @@ -3,7 +3,7 @@   *   * Copyright (c) 1999 Nicolas Pitre <nico@cam.org>   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  static inline void arch_idle(void)  { diff --git a/include/asm-arm/arch-shark/io.h b/include/asm-arm/arch-shark/io.h index 87ffa27f296..b11d7860a9d 100644 --- a/include/asm-arm/arch-shark/io.h +++ b/include/asm-arm/arch-shark/io.h @@ -11,7 +11,7 @@  #ifndef __ASM_ARM_ARCH_IO_H  #define __ASM_ARM_ARCH_IO_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #define IO_SPACE_LIMIT 0xffffffff diff --git a/include/asm-arm/arch-versatile/entry-macro.S b/include/asm-arm/arch-versatile/entry-macro.S index 924d1a8fe36..cd114169c3e 100644 --- a/include/asm-arm/arch-versatile/entry-macro.S +++ b/include/asm-arm/arch-versatile/entry-macro.S @@ -7,7 +7,7 @@   * License version 2. This program is licensed "as is" without any   * warranty of any kind, whether express or implied.   */ -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/vic.h>  		.macro	disable_fiq diff --git a/include/asm-arm/arch-versatile/system.h b/include/asm-arm/arch-versatile/system.h index 71c6254c0d9..3ea4e07b58c 100644 --- a/include/asm-arm/arch-versatile/system.h +++ b/include/asm-arm/arch-versatile/system.h @@ -21,7 +21,7 @@  #ifndef __ASM_ARCH_SYSTEM_H  #define __ASM_ARCH_SYSTEM_H -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/io.h>  #include <asm/arch/platform.h> diff --git a/include/asm-arm/hardware.h b/include/asm-arm/hardware.h deleted file mode 100644 index 1fd1a5b6504..00000000000 --- a/include/asm-arm/hardware.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - *  linux/include/asm-arm/hardware.h - * - *  Copyright (C) 1996 Russell King - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - *  Common hardware definitions - */ - -#ifndef __ASM_HARDWARE_H -#define __ASM_HARDWARE_H - -#include <asm/arch/hardware.h> - -#endif diff --git a/include/asm-arm/hw_irq.h b/include/asm-arm/hw_irq.h deleted file mode 100644 index f1a08a50060..00000000000 --- a/include/asm-arm/hw_irq.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Nothing to see here yet - */ -#ifndef _ARCH_ARM_HW_IRQ_H -#define _ARCH_ARM_HW_IRQ_H - -#include <asm/mach/irq.h> - -#endif diff --git a/include/asm-m68k/contregs.h b/include/asm-m68k/contregs.h index 1e233e7d191..d1ea750bddf 100644 --- a/include/asm-m68k/contregs.h +++ b/include/asm-m68k/contregs.h @@ -1,4 +1,53 @@  #ifndef _M68K_CONTREGS_H  #define _M68K_CONTREGS_H -#include <asm-sparc/contregs.h> + +/* contregs.h:  Addresses of registers in the ASI_CONTROL alternate address + *              space. These are for the mmu's context register, etc. + * + * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) + */ + +/* 3=sun3 +   4=sun4 (as in sun4 sysmaint student book) +   c=sun4c (according to davem) */ + +#define AC_IDPROM     0x00000000    /* 34  ID PROM, R/O, byte, 32 bytes      */ +#define AC_PAGEMAP    0x10000000    /* 3   Pagemap R/W, long                 */ +#define AC_SEGMAP     0x20000000    /* 3   Segment map, byte                 */ +#define AC_CONTEXT    0x30000000    /* 34c current mmu-context               */ +#define AC_SENABLE    0x40000000    /* 34c system dvma/cache/reset enable reg*/ +#define AC_UDVMA_ENB  0x50000000    /* 34  Not used on Sun boards, byte      */ +#define AC_BUS_ERROR  0x60000000    /* 34  Not cleared on read, byte.        */ +#define AC_SYNC_ERR   0x60000000    /*  c fault type                         */ +#define AC_SYNC_VA    0x60000004    /*  c fault virtual address              */ +#define AC_ASYNC_ERR  0x60000008    /*  c asynchronous fault type            */ +#define AC_ASYNC_VA   0x6000000c    /*  c async fault virtual address        */ +#define AC_LEDS       0x70000000    /* 34  Zero turns on LEDs, byte          */ +#define AC_CACHETAGS  0x80000000    /* 34c direct access to the VAC tags     */ +#define AC_CACHEDDATA 0x90000000    /* 3 c direct access to the VAC data     */ +#define AC_UDVMA_MAP  0xD0000000    /* 4  Not used on Sun boards, byte       */ +#define AC_VME_VECTOR 0xE0000000    /* 4  For non-Autovector VME, byte       */ +#define AC_BOOT_SCC   0xF0000000    /* 34  bypass to access Zilog 8530. byte.*/ + +/* s=Swift, h=Ross_HyperSPARC, v=TI_Viking, t=Tsunami, r=Ross_Cypress        */ +#define AC_M_PCR      0x0000        /* shv Processor Control Reg             */ +#define AC_M_CTPR     0x0100        /* shv Context Table Pointer Reg         */ +#define AC_M_CXR      0x0200        /* shv Context Register                  */ +#define AC_M_SFSR     0x0300        /* shv Synchronous Fault Status Reg      */ +#define AC_M_SFAR     0x0400        /* shv Synchronous Fault Address Reg     */ +#define AC_M_AFSR     0x0500        /*  hv Asynchronous Fault Status Reg     */ +#define AC_M_AFAR     0x0600        /*  hv Asynchronous Fault Address Reg    */ +#define AC_M_RESET    0x0700        /*  hv Reset Reg                         */ +#define AC_M_RPR      0x1000        /*  hv Root Pointer Reg                  */ +#define AC_M_TSUTRCR  0x1000        /* s   TLB Replacement Ctrl Reg          */ +#define AC_M_IAPTP    0x1100        /*  hv Instruction Access PTP            */ +#define AC_M_DAPTP    0x1200        /*  hv Data Access PTP                   */ +#define AC_M_ITR      0x1300        /*  hv Index Tag Register                */ +#define AC_M_TRCR     0x1400        /*  hv TLB Replacement Control Reg       */ +#define AC_M_SFSRX    0x1300        /* s   Synch Fault Status Reg prim       */ +#define AC_M_SFARX    0x1400        /* s   Synch Fault Address Reg prim      */ +#define AC_M_RPR1     0x1500        /*  h  Root Pointer Reg (entry 2)        */ +#define AC_M_IAPTP1   0x1600        /*  h  Instruction Access PTP (entry 2)  */ +#define AC_M_DAPTP1   0x1700        /*  h  Data Access PTP (entry 2)         */ +  #endif /* _M68K_CONTREGS_H */ diff --git a/include/asm-m68k/fbio.h b/include/asm-m68k/fbio.h index c17edf8c7bc..b9215a0907d 100644 --- a/include/asm-m68k/fbio.h +++ b/include/asm-m68k/fbio.h @@ -1 +1,330 @@ -#include <asm-sparc/fbio.h> +#ifndef __LINUX_FBIO_H +#define __LINUX_FBIO_H + +#include <linux/compiler.h> +#include <linux/types.h> + +/* Constants used for fbio SunOS compatibility */ +/* (C) 1996 Miguel de Icaza */ + +/* Frame buffer types */ +#define FBTYPE_NOTYPE           -1 +#define FBTYPE_SUN1BW           0   /* mono */ +#define FBTYPE_SUN1COLOR        1  +#define FBTYPE_SUN2BW           2  +#define FBTYPE_SUN2COLOR        3  +#define FBTYPE_SUN2GP           4  +#define FBTYPE_SUN5COLOR        5  +#define FBTYPE_SUN3COLOR        6  +#define FBTYPE_MEMCOLOR         7  +#define FBTYPE_SUN4COLOR        8  +  +#define FBTYPE_NOTSUN1          9  +#define FBTYPE_NOTSUN2          10 +#define FBTYPE_NOTSUN3          11 +  +#define FBTYPE_SUNFAST_COLOR    12  /* cg6 */ +#define FBTYPE_SUNROP_COLOR     13 +#define FBTYPE_SUNFB_VIDEO      14 +#define FBTYPE_SUNGIFB          15 +#define FBTYPE_SUNGPLAS         16 +#define FBTYPE_SUNGP3           17 +#define FBTYPE_SUNGT            18 +#define FBTYPE_SUNLEO           19      /* zx Leo card */ +#define FBTYPE_MDICOLOR         20      /* cg14 */ +#define FBTYPE_TCXCOLOR		21	/* SUNW,tcx card */ + +#define FBTYPE_LASTPLUSONE      21	/* This is not last + 1 in fact... */ + +/* Does not seem to be listed in the Sun file either */ +#define FBTYPE_CREATOR          22 +#define FBTYPE_PCI_IGA1682	23 +#define FBTYPE_P9100COLOR	24 + +#define FBTYPE_PCI_GENERIC	1000 +#define FBTYPE_PCI_MACH64	1001 + +/* fbio ioctls */ +/* Returned by FBIOGTYPE */ +struct  fbtype { +        int     fb_type;        /* fb type, see above */ +        int     fb_height;      /* pixels */ +        int     fb_width;       /* pixels */ +        int     fb_depth; +        int     fb_cmsize;      /* color map entries */ +        int     fb_size;        /* fb size in bytes */ +}; +#define FBIOGTYPE _IOR('F', 0, struct fbtype) + +struct  fbcmap { +        int             index;          /* first element (0 origin) */ +        int             count; +        unsigned char   __user *red; +        unsigned char   __user *green; +        unsigned char   __user *blue; +}; + +#ifdef __KERNEL__ +#define FBIOPUTCMAP_SPARC _IOW('F', 3, struct fbcmap) +#define FBIOGETCMAP_SPARC _IOW('F', 4, struct fbcmap) +#else +#define FBIOPUTCMAP _IOW('F', 3, struct fbcmap) +#define FBIOGETCMAP _IOW('F', 4, struct fbcmap) +#endif + +/* # of device specific values */ +#define FB_ATTR_NDEVSPECIFIC    8 +/* # of possible emulations */ +#define FB_ATTR_NEMUTYPES       4 +  +struct fbsattr { +        int     flags; +        int     emu_type;	/* -1 if none */ +        int     dev_specific[FB_ATTR_NDEVSPECIFIC]; +}; +  +struct fbgattr { +        int     real_type;	/* real frame buffer type */ +        int     owner;		/* unknown */ +        struct fbtype fbtype;	/* real frame buffer fbtype */ +        struct fbsattr sattr;    +        int     emu_types[FB_ATTR_NEMUTYPES]; /* supported emulations */ +}; +#define FBIOSATTR  _IOW('F', 5, struct fbgattr) /* Unsupported: */ +#define FBIOGATTR  _IOR('F', 6, struct fbgattr)	/* supported */ + +#define FBIOSVIDEO _IOW('F', 7, int) +#define FBIOGVIDEO _IOR('F', 8, int) + +struct fbcursor { +        short set;              /* what to set, choose from the list above */ +        short enable;           /* cursor on/off */ +        struct fbcurpos pos;    /* cursor position */ +        struct fbcurpos hot;    /* cursor hot spot */ +        struct fbcmap cmap;     /* color map info */ +        struct fbcurpos size;   /* cursor bit map size */ +        char __user *image;     /* cursor image bits */ +        char __user *mask;      /* cursor mask bits */ +}; + +/* set/get cursor attributes/shape */ +#define FBIOSCURSOR     _IOW('F', 24, struct fbcursor) +#define FBIOGCURSOR     _IOWR('F', 25, struct fbcursor) +  +/* set/get cursor position */ +#define FBIOSCURPOS     _IOW('F', 26, struct fbcurpos) +#define FBIOGCURPOS     _IOW('F', 27, struct fbcurpos) +  +/* get max cursor size */ +#define FBIOGCURMAX     _IOR('F', 28, struct fbcurpos) + +/* wid manipulation */ +struct fb_wid_alloc { +#define FB_WID_SHARED_8		0 +#define FB_WID_SHARED_24	1 +#define FB_WID_DBL_8		2 +#define FB_WID_DBL_24		3 +	__u32	wa_type; +	__s32	wa_index;	/* Set on return */ +	__u32	wa_count;	 +}; +struct fb_wid_item { +	__u32	wi_type; +	__s32	wi_index; +	__u32	wi_attrs; +	__u32	wi_values[32]; +}; +struct fb_wid_list { +	__u32	wl_flags; +	__u32	wl_count; +	struct fb_wid_item	*wl_list; +}; + +#define FBIO_WID_ALLOC	_IOWR('F', 30, struct fb_wid_alloc) +#define FBIO_WID_FREE	_IOW('F', 31, struct fb_wid_alloc) +#define FBIO_WID_PUT	_IOW('F', 32, struct fb_wid_list) +#define FBIO_WID_GET	_IOWR('F', 33, struct fb_wid_list) + +/* Creator ioctls */ +#define FFB_IOCTL	('F'<<8) +#define FFB_SYS_INFO		(FFB_IOCTL|80) +#define FFB_CLUTREAD		(FFB_IOCTL|81) +#define FFB_CLUTPOST		(FFB_IOCTL|82) +#define FFB_SETDIAGMODE		(FFB_IOCTL|83) +#define FFB_GETMONITORID	(FFB_IOCTL|84) +#define FFB_GETVIDEOMODE	(FFB_IOCTL|85) +#define FFB_SETVIDEOMODE	(FFB_IOCTL|86) +#define FFB_SETSERVER		(FFB_IOCTL|87) +#define FFB_SETOVCTL		(FFB_IOCTL|88) +#define FFB_GETOVCTL		(FFB_IOCTL|89) +#define FFB_GETSAXNUM		(FFB_IOCTL|90) +#define FFB_FBDEBUG		(FFB_IOCTL|91) + +/* Cg14 ioctls */ +#define MDI_IOCTL          ('M'<<8) +#define MDI_RESET          (MDI_IOCTL|1) +#define MDI_GET_CFGINFO    (MDI_IOCTL|2) +#define MDI_SET_PIXELMODE  (MDI_IOCTL|3) +#    define MDI_32_PIX     32 +#    define MDI_16_PIX     16 +#    define MDI_8_PIX      8 + +struct mdi_cfginfo { +	int     mdi_ncluts;     /* Number of implemented CLUTs in this MDI */ +        int     mdi_type;       /* FBTYPE name */ +        int     mdi_height;     /* height */ +        int     mdi_width;      /* widht */ +        int     mdi_size;       /* available ram */ +        int     mdi_mode;       /* 8bpp, 16bpp or 32bpp */ +        int     mdi_pixfreq;    /* pixel clock (from PROM) */ +}; + +/* SparcLinux specific ioctl for the MDI, should be replaced for + * the SET_XLUT/SET_CLUTn ioctls instead + */ +#define MDI_CLEAR_XLUT       (MDI_IOCTL|9) + +/* leo & ffb ioctls */ +struct fb_clut_alloc { +	__u32	clutid;	/* Set on return */ + 	__u32	flag; + 	__u32	index; +}; + +struct fb_clut { +#define FB_CLUT_WAIT	0x00000001	/* Not yet implemented */ + 	__u32	flag; + 	__u32	clutid; + 	__u32	offset; + 	__u32	count; + 	char *	red; + 	char *	green; + 	char *	blue; +}; + +struct fb_clut32 { + 	__u32	flag; + 	__u32	clutid; + 	__u32	offset; + 	__u32	count; + 	__u32	red; + 	__u32	green; + 	__u32	blue; +}; + +#define LEO_CLUTALLOC	_IOWR('L', 53, struct fb_clut_alloc) +#define LEO_CLUTFREE	_IOW('L', 54, struct fb_clut_alloc) +#define LEO_CLUTREAD	_IOW('L', 55, struct fb_clut) +#define LEO_CLUTPOST	_IOW('L', 56, struct fb_clut) +#define LEO_SETGAMMA	_IOW('L', 68, int) /* Not yet implemented */ +#define LEO_GETGAMMA	_IOR('L', 69, int) /* Not yet implemented */ + +#ifdef __KERNEL__ +/* Addresses on the fd of a cgsix that are mappable */ +#define CG6_FBC    0x70000000 +#define CG6_TEC    0x70001000 +#define CG6_BTREGS 0x70002000 +#define CG6_FHC    0x70004000 +#define CG6_THC    0x70005000 +#define CG6_ROM    0x70006000 +#define CG6_RAM    0x70016000 +#define CG6_DHC    0x80000000 + +#define CG3_MMAP_OFFSET 0x4000000 + +/* Addresses on the fd of a tcx that are mappable */ +#define TCX_RAM8BIT   		0x00000000 +#define TCX_RAM24BIT   		0x01000000 +#define TCX_UNK3   		0x10000000 +#define TCX_UNK4   		0x20000000 +#define TCX_CONTROLPLANE   	0x28000000 +#define TCX_UNK6   		0x30000000 +#define TCX_UNK7   		0x38000000 +#define TCX_TEC    		0x70000000 +#define TCX_BTREGS 		0x70002000 +#define TCX_THC    		0x70004000 +#define TCX_DHC    		0x70008000 +#define TCX_ALT	   		0x7000a000 +#define TCX_SYNC   		0x7000e000 +#define TCX_UNK2    		0x70010000 + +/* CG14 definitions */ + +/* Offsets into the OBIO space: */ +#define CG14_REGS        0       /* registers */ +#define CG14_CURSORREGS  0x1000  /* cursor registers */ +#define CG14_DACREGS     0x2000  /* DAC registers */ +#define CG14_XLUT        0x3000  /* X Look Up Table -- ??? */ +#define CG14_CLUT1       0x4000  /* Color Look Up Table */ +#define CG14_CLUT2       0x5000  /* Color Look Up Table */ +#define CG14_CLUT3       0x6000  /* Color Look Up Table */ +#define CG14_AUTO	 0xf000 + +#endif /* KERNEL */ + +/* These are exported to userland for applications to use */ +/* Mappable offsets for the cg14: control registers */ +#define MDI_DIRECT_MAP 0x10000000 +#define MDI_CTLREG_MAP 0x20000000 +#define MDI_CURSOR_MAP 0x30000000 +#define MDI_SHDW_VRT_MAP 0x40000000 + +/* Mappable offsets for the cg14: frame buffer resolutions */ +/* 32 bits */ +#define MDI_CHUNKY_XBGR_MAP 0x50000000 +#define MDI_CHUNKY_BGR_MAP 0x60000000 + +/* 16 bits */ +#define MDI_PLANAR_X16_MAP 0x70000000 +#define MDI_PLANAR_C16_MAP 0x80000000 + +/* 8 bit is done as CG3 MMAP offset */ +/* 32 bits, planar */ +#define MDI_PLANAR_X32_MAP 0x90000000 +#define MDI_PLANAR_B32_MAP 0xa0000000 +#define MDI_PLANAR_G32_MAP 0xb0000000 +#define MDI_PLANAR_R32_MAP 0xc0000000 + +/* Mappable offsets on leo */ +#define LEO_SS0_MAP            0x00000000 +#define LEO_LC_SS0_USR_MAP     0x00800000 +#define LEO_LD_SS0_MAP         0x00801000 +#define LEO_LX_CURSOR_MAP      0x00802000 +#define LEO_SS1_MAP            0x00803000 +#define LEO_LC_SS1_USR_MAP     0x01003000 +#define LEO_LD_SS1_MAP         0x01004000 +#define LEO_UNK_MAP            0x01005000 +#define LEO_LX_KRN_MAP         0x01006000 +#define LEO_LC_SS0_KRN_MAP     0x01007000 +#define LEO_LC_SS1_KRN_MAP     0x01008000 +#define LEO_LD_GBL_MAP         0x01009000 +#define LEO_UNK2_MAP           0x0100a000 + +#ifdef __KERNEL__ +struct  fbcmap32 { +	int             index;          /* first element (0 origin) */ +	int             count; +	u32		red; +	u32		green; +	u32		blue; +}; + +#define FBIOPUTCMAP32	_IOW('F', 3, struct fbcmap32) +#define FBIOGETCMAP32	_IOW('F', 4, struct fbcmap32) + +struct fbcursor32 { +	short set;		/* what to set, choose from the list above */ +	short enable;		/* cursor on/off */ +	struct fbcurpos pos;	/* cursor position */ +	struct fbcurpos hot;	/* cursor hot spot */ +	struct fbcmap32 cmap;	/* color map info */ +	struct fbcurpos size;	/* cursor bit map size */ +	u32	image;		/* cursor image bits */ +	u32	mask;		/* cursor mask bits */ +}; + +#define FBIOSCURSOR32	_IOW('F', 24, struct fbcursor32) +#define FBIOGCURSOR32	_IOW('F', 25, struct fbcursor32) +#endif + +#endif /* __LINUX_FBIO_H */ diff --git a/include/asm-m68k/idprom.h b/include/asm-m68k/idprom.h index 4349eaf3cfe..160616a89e0 100644 --- a/include/asm-m68k/idprom.h +++ b/include/asm-m68k/idprom.h @@ -1,6 +1,25 @@  #ifndef _M68K_IDPROM_H  #define _M68K_IDPROM_H -#include <asm-sparc/idprom.h> +/* + * idprom.h: Macros and defines for idprom routines + * + * Copyright (C) 1995,1996 David S. Miller (davem@caip.rutgers.edu) + */ + +#include <linux/types.h> + +struct idprom { +	u8		id_format;	/* Format identifier (always 0x01) */ +	u8		id_machtype;	/* Machine type */ +	u8		id_ethaddr[6];	/* Hardware ethernet address */ +	s32		id_date;	/* Date of manufacture */ +	u32		id_sernum:24;	/* Unique serial number */ +	u8		id_cksum;	/* Checksum - xor of the data bytes */ +	u8		reserved[16]; +}; + +extern struct idprom *idprom; +extern void idprom_init(void);  /* Sun3: in control space */  #define SUN3_IDPROM_BASE	0x00000000 diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 50cfe8ceb47..eadaab44015 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h @@ -115,7 +115,6 @@ BUFFER_FNS(Uptodate, uptodate)  BUFFER_FNS(Dirty, dirty)  TAS_BUFFER_FNS(Dirty, dirty)  BUFFER_FNS(Lock, locked) -TAS_BUFFER_FNS(Lock, locked)  BUFFER_FNS(Req, req)  TAS_BUFFER_FNS(Req, req)  BUFFER_FNS(Mapped, mapped) @@ -321,10 +320,15 @@ static inline void wait_on_buffer(struct buffer_head *bh)  		__wait_on_buffer(bh);  } +static inline int trylock_buffer(struct buffer_head *bh) +{ +	return likely(!test_and_set_bit(BH_Lock, &bh->b_state)); +} +  static inline void lock_buffer(struct buffer_head *bh)  {  	might_sleep(); -	if (test_set_buffer_locked(bh)) +	if (!trylock_buffer(bh))  		__lock_buffer(bh);  } diff --git a/include/linux/ide.h b/include/linux/ide.h index b846bc44a27..87c12ed9695 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -219,18 +219,7 @@ static inline int __ide_default_irq(unsigned long base)  #include <asm-generic/ide_iops.h>  #endif -#ifndef MAX_HWIFS -#if defined(CONFIG_BLACKFIN) || defined(CONFIG_H8300) || defined(CONFIG_XTENSA) -# define MAX_HWIFS	1 -#else -# define MAX_HWIFS	10 -#endif -#endif - -#if !defined(MAX_HWIFS) || defined(CONFIG_EMBEDDED) -#undef MAX_HWIFS -#define MAX_HWIFS	CONFIG_IDE_MAX_HWIFS -#endif +#define MAX_HWIFS	10  /* Currently only m68k, apus and m8xx need it */  #ifndef IDE_ARCH_ACK_INTR @@ -509,24 +498,33 @@ struct ide_tp_ops {  extern const struct ide_tp_ops default_tp_ops; +/** + * struct ide_port_ops - IDE port operations + * + * @init_dev:		host specific initialization of a device + * @set_pio_mode:	routine to program host for PIO mode + * @set_dma_mode:	routine to program host for DMA mode + * @selectproc:		tweaks hardware to select drive + * @reset_poll:		chipset polling based on hba specifics + * @pre_reset:		chipset specific changes to default for device-hba resets + * @resetproc:		routine to reset controller after a disk reset + * @maskproc:		special host masking for drive selection + * @quirkproc:		check host's drive quirk list + * + * @mdma_filter:	filter MDMA modes + * @udma_filter:	filter UDMA modes + * + * @cable_detect:	detect cable type + */  struct ide_port_ops { -	/* host specific initialization of a device */  	void	(*init_dev)(ide_drive_t *); -	/* routine to program host for PIO mode */  	void	(*set_pio_mode)(ide_drive_t *, const u8); -	/* routine to program host for DMA mode */  	void	(*set_dma_mode)(ide_drive_t *, const u8); -	/* tweaks hardware to select drive */  	void	(*selectproc)(ide_drive_t *); -	/* chipset polling based on hba specifics */  	int	(*reset_poll)(ide_drive_t *); -	/* chipset specific changes to default for device-hba resets */  	void	(*pre_reset)(ide_drive_t *); -	/* routine to reset controller after a disk reset */  	void	(*resetproc)(ide_drive_t *); -	/* special host masking for drive selection */  	void	(*maskproc)(ide_drive_t *, int); -	/* check host's drive quirk list */  	void	(*quirkproc)(ide_drive_t *);  	u8	(*mdma_filter)(ide_drive_t *); diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index a1630ba0b87..7f4df7c7659 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h @@ -506,6 +506,19 @@ struct ieee80211_channel_sw_ie {  	u8 count;  } __attribute__ ((packed)); +/** + * struct ieee80211_tim + * + * This structure refers to "Traffic Indication Map information element" + */ +struct ieee80211_tim_ie { +	u8 dtim_count; +	u8 dtim_period; +	u8 bitmap_ctrl; +	/* variable size: 1 - 251 bytes */ +	u8 virtual_map[0]; +} __attribute__ ((packed)); +  struct ieee80211_mgmt {  	__le16 frame_control;  	__le16 duration; diff --git a/include/linux/ihex.h b/include/linux/ihex.h index 2baace2788a..31d8629e75a 100644 --- a/include/linux/ihex.h +++ b/include/linux/ihex.h @@ -18,7 +18,7 @@ struct ihex_binrec {  	__be32 addr;  	__be16 len;  	uint8_t data[0]; -} __attribute__((aligned(4))); +} __attribute__((packed));  /* Find the next record, taking into account the 4-byte alignment */  static inline const struct ihex_binrec * diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 62aa4f895ab..58ff4e74b2f 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -223,35 +223,6 @@ static inline int disable_irq_wake(unsigned int irq)  #define or_softirq_pending(x)  (local_softirq_pending() |= (x))  #endif -/* - * Temporary defines for UP kernels, until all code gets fixed. - */ -#ifndef CONFIG_SMP -static inline void __deprecated cli(void) -{ -	local_irq_disable(); -} -static inline void __deprecated sti(void) -{ -	local_irq_enable(); -} -static inline void __deprecated save_flags(unsigned long *x) -{ -	local_save_flags(*x); -} -#define save_flags(x) save_flags(&x) -static inline void __deprecated restore_flags(unsigned long x) -{ -	local_irq_restore(x); -} - -static inline void __deprecated save_and_cli(unsigned long *x) -{ -	local_irq_save(*x); -} -#define save_and_cli(x)	save_and_cli(&x) -#endif /* CONFIG_SMP */ -  /* Some architectures might implement lazy enabling/disabling of   * interrupts. In some cases, such as stop_machine, we might want   * to ensure that after a local_irq_disable(), interrupts have diff --git a/include/linux/kexec.h b/include/linux/kexec.h index 82f88a8a827..32110cede64 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h @@ -130,8 +130,8 @@ void vmcoreinfo_append_str(const char *fmt, ...)  	__attribute__ ((format (printf, 1, 2)));  unsigned long paddr_vmcoreinfo_note(void); -#define VMCOREINFO_OSRELEASE(name) \ -	vmcoreinfo_append_str("OSRELEASE=%s\n", #name) +#define VMCOREINFO_OSRELEASE(value) \ +	vmcoreinfo_append_str("OSRELEASE=%s\n", value)  #define VMCOREINFO_PAGESIZE(value) \  	vmcoreinfo_append_str("PAGESIZE=%ld\n", value)  #define VMCOREINFO_SYMBOL(name) \ diff --git a/include/linux/mISDNif.h b/include/linux/mISDNif.h index 5c948f33781..8f2d60da04e 100644 --- a/include/linux/mISDNif.h +++ b/include/linux/mISDNif.h @@ -37,7 +37,7 @@   */  #define	MISDN_MAJOR_VERSION	1  #define	MISDN_MINOR_VERSION	0 -#define MISDN_RELEASE		18 +#define MISDN_RELEASE		19  /* primitives for information exchange   * generell format @@ -242,7 +242,8 @@ struct mISDNhead {  #define TEI_SAPI		63  #define CTRL_SAPI		0 -#define MISDN_CHMAP_SIZE	4 +#define MISDN_MAX_CHANNEL	127 +#define MISDN_CHMAP_SIZE	((MISDN_MAX_CHANNEL + 1) >> 3)  #define SOL_MISDN	0 @@ -275,11 +276,32 @@ struct mISDN_devinfo {  	u_int			Dprotocols;  	u_int			Bprotocols;  	u_int			protocol; -	u_long			channelmap[MISDN_CHMAP_SIZE]; +	u_char			channelmap[MISDN_CHMAP_SIZE];  	u_int			nrbchan;  	char			name[MISDN_MAX_IDLEN];  }; +static inline int +test_channelmap(u_int nr, u_char *map) +{ +	if (nr <= MISDN_MAX_CHANNEL) +		return map[nr >> 3] & (1 << (nr & 7)); +	else +		return 0; +} + +static inline void +set_channelmap(u_int nr, u_char *map) +{ +	map[nr >> 3] |= (1 << (nr & 7)); +} + +static inline void +clear_channelmap(u_int nr, u_char *map) +{ +	map[nr >> 3] &= ~(1 << (nr & 7)); +} +  /* CONTROL_CHANNEL parameters */  #define MISDN_CTRL_GETOP		0x0000  #define MISDN_CTRL_LOOP			0x0001 @@ -405,7 +427,7 @@ struct mISDNdevice {  	u_int			Dprotocols;  	u_int			Bprotocols;  	u_int			nrbchan; -	u_long			channelmap[MISDN_CHMAP_SIZE]; +	u_char			channelmap[MISDN_CHMAP_SIZE];  	struct list_head	bchannels;  	struct mISDNchannel	*teimgr;  	struct device		dev; @@ -430,7 +452,7 @@ struct mISDNstack {  #endif  }; -/* global alloc/queue dunctions */ +/* global alloc/queue functions */  static inline struct sk_buff *  mI_alloc_skb(unsigned int len, gfp_t gfp_mask) diff --git a/include/linux/maple.h b/include/linux/maple.h index c853b106601..c23d3f51ba4 100644 --- a/include/linux/maple.h +++ b/include/linux/maple.h @@ -51,7 +51,6 @@ struct maple_devinfo {  struct maple_device {  	struct maple_driver *driver;  	struct mapleq *mq; -	void *private_data;  	void (*callback) (struct mapleq * mq);  	unsigned long when, interval, function;  	struct maple_devinfo devinfo; @@ -70,7 +69,9 @@ void maple_getcond_callback(struct maple_device *dev,  			    void (*callback) (struct mapleq * mq),  			    unsigned long interval,  			    unsigned long function); -int maple_driver_register(struct device_driver *drv); +int maple_driver_register(struct maple_driver *); +void maple_driver_unregister(struct maple_driver *); +  int maple_add_packet_sleeps(struct maple_device *mdev, u32 function,  	u32 command, u32 length, void *data);  void maple_clear_dev(struct maple_device *mdev); @@ -78,4 +79,7 @@ void maple_clear_dev(struct maple_device *mdev);  #define to_maple_dev(n) container_of(n, struct maple_device, dev)  #define to_maple_driver(n) container_of(n, struct maple_driver, drv) +#define maple_get_drvdata(d)		dev_get_drvdata(&(d)->dev) +#define maple_set_drvdata(d,p)		dev_set_drvdata(&(d)->dev, (p)) +  #endif				/* __LINUX_MAPLE_H */ diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index ee583f642a9..488c56e649b 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -61,9 +61,7 @@ struct wireless_dev;  #define NET_XMIT_DROP		1	/* skb dropped			*/  #define NET_XMIT_CN		2	/* congestion notification	*/  #define NET_XMIT_POLICED	3	/* skb is shot by police	*/ -#define NET_XMIT_BYPASS		4	/* packet does not leave via dequeue; -					   (TC use only - dev_queue_xmit -					   returns this as NET_XMIT_SUCCESS) */ +#define NET_XMIT_MASK		0xFFFF	/* qdisc flags in net/sch_generic.h */  /* Backlog congestion levels */  #define NET_RX_SUCCESS		0   /* keep 'em coming, baby */ diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 25aaccdb2f2..c74d3e87531 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -163,7 +163,7 @@ static inline int Page##uname(struct page *page) 			\  struct page;	/* forward declaration */ -PAGEFLAG(Locked, locked) TESTSCFLAG(Locked, locked) +TESTPAGEFLAG(Locked, locked)  PAGEFLAG(Error, error)  PAGEFLAG(Referenced, referenced) TESTCLEARFLAG(Referenced, referenced)  PAGEFLAG(Dirty, dirty) TESTSCFLAG(Dirty, dirty) __CLEARPAGEFLAG(Dirty, dirty) diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 69ed3cb1197..5da31c12101 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -250,29 +250,6 @@ static inline struct page *read_mapping_page(struct address_space *mapping,  	return read_cache_page(mapping, index, filler, data);  } -int add_to_page_cache_locked(struct page *page, struct address_space *mapping, -				pgoff_t index, gfp_t gfp_mask); -int add_to_page_cache_lru(struct page *page, struct address_space *mapping, -				pgoff_t index, gfp_t gfp_mask); -extern void remove_from_page_cache(struct page *page); -extern void __remove_from_page_cache(struct page *page); - -/* - * Like add_to_page_cache_locked, but used to add newly allocated pages: - * the page is new, so we can just run SetPageLocked() against it. - */ -static inline int add_to_page_cache(struct page *page, -		struct address_space *mapping, pgoff_t offset, gfp_t gfp_mask) -{ -	int error; - -	SetPageLocked(page); -	error = add_to_page_cache_locked(page, mapping, offset, gfp_mask); -	if (unlikely(error)) -		ClearPageLocked(page); -	return error; -} -  /*   * Return byte-offset into filesystem object for page.   */ @@ -294,13 +271,28 @@ extern int __lock_page_killable(struct page *page);  extern void __lock_page_nosync(struct page *page);  extern void unlock_page(struct page *page); +static inline void set_page_locked(struct page *page) +{ +	set_bit(PG_locked, &page->flags); +} + +static inline void clear_page_locked(struct page *page) +{ +	clear_bit(PG_locked, &page->flags); +} + +static inline int trylock_page(struct page *page) +{ +	return !test_and_set_bit(PG_locked, &page->flags); +} +  /*   * lock_page may only be called if we have the page's inode pinned.   */  static inline void lock_page(struct page *page)  {  	might_sleep(); -	if (TestSetPageLocked(page)) +	if (!trylock_page(page))  		__lock_page(page);  } @@ -312,7 +304,7 @@ static inline void lock_page(struct page *page)  static inline int lock_page_killable(struct page *page)  {  	might_sleep(); -	if (TestSetPageLocked(page)) +	if (!trylock_page(page))  		return __lock_page_killable(page);  	return 0;  } @@ -324,7 +316,7 @@ static inline int lock_page_killable(struct page *page)  static inline void lock_page_nosync(struct page *page)  {  	might_sleep(); -	if (TestSetPageLocked(page)) +	if (!trylock_page(page))  		__lock_page_nosync(page);  } @@ -409,4 +401,27 @@ static inline int fault_in_pages_readable(const char __user *uaddr, int size)  	return ret;  } +int add_to_page_cache_locked(struct page *page, struct address_space *mapping, +				pgoff_t index, gfp_t gfp_mask); +int add_to_page_cache_lru(struct page *page, struct address_space *mapping, +				pgoff_t index, gfp_t gfp_mask); +extern void remove_from_page_cache(struct page *page); +extern void __remove_from_page_cache(struct page *page); + +/* + * Like add_to_page_cache_locked, but used to add newly allocated pages: + * the page is new, so we can just run set_page_locked() against it. + */ +static inline int add_to_page_cache(struct page *page, +		struct address_space *mapping, pgoff_t offset, gfp_t gfp_mask) +{ +	int error; + +	set_page_locked(page); +	error = add_to_page_cache_locked(page, mapping, offset, gfp_mask); +	if (unlikely(error)) +		clear_page_locked(page); +	return error; +} +  #endif /* _LINUX_PAGEMAP_H */ diff --git a/include/linux/parser.h b/include/linux/parser.h index cc554ca8bc7..7dcd0507575 100644 --- a/include/linux/parser.h +++ b/include/linux/parser.h @@ -14,7 +14,7 @@ struct match_token {  	const char *pattern;  }; -typedef const struct match_token match_table_t[]; +typedef struct match_token match_table_t[];  /* Maximum number of arguments that match_token will find in a pattern */  enum {MAX_OPT_ARGS = 3}; diff --git a/include/linux/pm_qos_params.h b/include/linux/pm_qos_params.h index 2e4e97bd19f..d74f75ed1e4 100644 --- a/include/linux/pm_qos_params.h +++ b/include/linux/pm_qos_params.h @@ -1,6 +1,6 @@  /* interface for the pm_qos_power infrastructure of the linux kernel.   * - * Mark Gross + * Mark Gross <mgross@linux.intel.com>   */  #include <linux/list.h>  #include <linux/notifier.h> diff --git a/include/linux/spi/orion_spi.h b/include/linux/spi/orion_spi.h new file mode 100644 index 00000000000..b4d9fa6f797 --- /dev/null +++ b/include/linux/spi/orion_spi.h @@ -0,0 +1,17 @@ +/* + * orion_spi.h + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#ifndef __LINUX_SPI_ORION_SPI_H +#define __LINUX_SPI_ORION_SPI_H + +struct orion_spi_info { +	u32	tclk;		/* no <linux/clk.h> support yet */ +}; + + +#endif diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h index 12532839f50..ab3ef7aefa9 100644 --- a/include/linux/tracehook.h +++ b/include/linux/tracehook.h @@ -487,6 +487,9 @@ static inline int tracehook_notify_jctl(int notify, int why)  	return notify || (current->ptrace & PT_PTRACED);  } +#define DEATH_REAP			-1 +#define DEATH_DELAYED_GROUP_LEADER	-2 +  /**   * tracehook_notify_death - task is dead, ready to notify parent   * @task:		@current task now exiting @@ -501,8 +504,6 @@ static inline int tracehook_notify_jctl(int notify, int why)   *   * Called with write_lock_irq(&tasklist_lock) held.   */ -#define DEATH_REAP			-1 -#define DEATH_DELAYED_GROUP_LEADER	-2  static inline int tracehook_notify_death(struct task_struct *task,  					 void **death_cookie, int group_dead)  { diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h index 8c8119ffee1..1c78d56c57e 100644 --- a/include/linux/vt_kern.h +++ b/include/linux/vt_kern.h @@ -86,6 +86,7 @@ int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc);  #define con_copy_unimap(d, s) (0)  #define con_get_unimap(vc, ct, uct, list) (-EINVAL)  #define con_free_unimap(vc) do { ; } while (0) +#define con_protect_unimap(vc, rdonly) do { ; } while (0)  #define vc_translate(vc, c) (c)  #endif diff --git a/include/net/dst.h b/include/net/dst.h index c5c318a628f..8a8b71e5f3f 100644 --- a/include/net/dst.h +++ b/include/net/dst.h @@ -252,17 +252,7 @@ static inline int dst_output(struct sk_buff *skb)  /* Input packet from network to transport.  */  static inline int dst_input(struct sk_buff *skb)  { -	int err; - -	for (;;) { -		err = skb->dst->input(skb); - -		if (likely(err == 0)) -			return err; -		/* Oh, Jamal... Seems, I will not forgive you this mess. :-) */ -		if (unlikely(err != NET_XMIT_BYPASS)) -			return err; -	} +	return skb->dst->input(skb);  }  static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie) diff --git a/include/net/flow.h b/include/net/flow.h index ad16e0076c8..228b2477cee 100644 --- a/include/net/flow.h +++ b/include/net/flow.h @@ -47,7 +47,6 @@ struct flowi {  #define fl4_scope	nl_u.ip4_u.scope  	__u8	proto; -	__u8	flags;  	union {  		struct {  			__be16	sport; diff --git a/include/net/mac80211.h b/include/net/mac80211.h index b52721008be..b397e4d984c 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -177,9 +177,10 @@ enum ieee80211_bss_change {   * @aid: association ID number, valid only when @assoc is true   * @use_cts_prot: use CTS protection   * @use_short_preamble: use 802.11b short preamble + * @dtim_period: num of beacons before the next DTIM, for PSM   * @timestamp: beacon timestamp   * @beacon_int: beacon interval - * @assoc_capability: capabbilities taken from assoc resp + * @assoc_capability: capabilities taken from assoc resp   * @assoc_ht: association in HT mode   * @ht_conf: ht capabilities   * @ht_bss_conf: ht extended capabilities @@ -191,6 +192,7 @@ struct ieee80211_bss_conf {  	/* erp related data */  	bool use_cts_prot;  	bool use_short_preamble; +	u8 dtim_period;  	u16 beacon_int;  	u16 assoc_capability;  	u64 timestamp; @@ -430,6 +432,7 @@ enum ieee80211_conf_flags {   * @radio_enabled: when zero, driver is required to switch off the radio.   *	TODO make a flag   * @beacon_int: beacon interval (TODO make interface config) + * @listen_interval: listen interval in units of beacon interval   * @flags: configuration flags defined above   * @power_level: requested transmit power (in dBm)   * @max_antenna_gain: maximum antenna gain (in dBi) @@ -444,6 +447,7 @@ struct ieee80211_conf {  	int radio_enabled;  	int beacon_int; +	u16 listen_interval;  	u32 flags;  	int power_level;  	int max_antenna_gain; @@ -785,6 +789,9 @@ enum ieee80211_hw_flags {   * @max_signal: Maximum value for signal (rssi) in RX information, used   *     only when @IEEE80211_HW_SIGNAL_UNSPEC or @IEEE80211_HW_SIGNAL_DB   * + * @max_listen_interval: max listen interval in units of beacon interval + *     that HW supports + *   * @queues: number of available hardware transmit queues for   *	data packets. WMM/QoS requires at least four, these   *	queues need to have configurable access parameters. @@ -812,7 +819,9 @@ struct ieee80211_hw {  	unsigned int extra_tx_headroom;  	int channel_change_time;  	int vif_data_size; -	u16 queues, ampdu_queues; +	u16 queues; +	u16 ampdu_queues; +	u16 max_listen_interval;  	s8 max_signal;  }; diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index b5f40d7ef72..a7abfda3e44 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -193,10 +193,22 @@ static inline struct Qdisc *qdisc_root(struct Qdisc *qdisc)  	return qdisc->dev_queue->qdisc;  } +/* The qdisc root lock is a mechanism by which to top level + * of a qdisc tree can be locked from any qdisc node in the + * forest.  This allows changing the configuration of some + * aspect of the qdisc tree while blocking out asynchronous + * qdisc access in the packet processing paths. + * + * It is only legal to do this when the root will not change + * on us.  Otherwise we'll potentially lock the wrong qdisc + * root.  This is enforced by holding the RTNL semaphore, which + * all users of this lock accessor must do. + */  static inline spinlock_t *qdisc_root_lock(struct Qdisc *qdisc)  {  	struct Qdisc *root = qdisc_root(qdisc); +	ASSERT_RTNL();  	return qdisc_lock(root);  } @@ -331,6 +343,18 @@ static inline unsigned int qdisc_pkt_len(struct sk_buff *skb)  	return qdisc_skb_cb(skb)->pkt_len;  } +/* additional qdisc xmit flags (NET_XMIT_MASK in linux/netdevice.h) */ +enum net_xmit_qdisc_t { +	__NET_XMIT_STOLEN = 0x00010000, +	__NET_XMIT_BYPASS = 0x00020000, +}; + +#ifdef CONFIG_NET_CLS_ACT +#define net_xmit_drop_count(e)	((e) & __NET_XMIT_STOLEN ? 0 : 1) +#else +#define net_xmit_drop_count(e)	(1) +#endif +  static inline int qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch)  {  #ifdef CONFIG_NET_SCHED @@ -343,7 +367,7 @@ static inline int qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch)  static inline int qdisc_enqueue_root(struct sk_buff *skb, struct Qdisc *sch)  {  	qdisc_skb_cb(skb)->pkt_len = skb->len; -	return qdisc_enqueue(skb, sch); +	return qdisc_enqueue(skb, sch) & NET_XMIT_MASK;  }  static inline int __qdisc_enqueue_tail(struct sk_buff *skb, struct Qdisc *sch, diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 535a18f57a1..ab1c472ea75 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -524,8 +524,7 @@ static inline void sctp_ssn_skip(struct sctp_stream *stream, __u16 id,   */  struct sctp_af {  	int		(*sctp_xmit)	(struct sk_buff *skb, -					 struct sctp_transport *, -					 int ipfragok); +					 struct sctp_transport *);  	int		(*setsockopt)	(struct sock *sk,  					 int level,  					 int optname, diff --git a/include/video/radeon.h b/include/video/radeon.h index 83467e18f5e..95a1f2038b1 100644 --- a/include/video/radeon.h +++ b/include/video/radeon.h @@ -527,8 +527,9 @@  /* DSTCACHE_CTLSTAT bit constants */ -#define RB2D_DC_FLUSH				   (3 << 0) -#define RB2D_DC_FLUSH_ALL			   0xf +#define RB2D_DC_FLUSH_2D			   (1 << 0) +#define RB2D_DC_FREE_2D				   (1 << 2) +#define RB2D_DC_FLUSH_ALL			   (RB2D_DC_FLUSH_2D | RB2D_DC_FREE_2D)  #define RB2D_DC_BUSY				   (1 << 31) diff --git a/init/Kconfig b/init/Kconfig index 7e6dae1ae72..b678803decc 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -845,9 +845,10 @@ menuconfig MODULES  	  If unsure, say Y. +if MODULES +  config MODULE_FORCE_LOAD  	bool "Forced module loading" -	depends on MODULES  	default n  	help  	  Allow loading of modules without version information (ie. modprobe @@ -856,7 +857,6 @@ config MODULE_FORCE_LOAD  config MODULE_UNLOAD  	bool "Module unloading" -	depends on MODULES  	help  	  Without this option you will not be able to unload any  	  modules (note that some modules may not be unloadable @@ -875,7 +875,6 @@ config MODULE_FORCE_UNLOAD  config MODVERSIONS  	bool "Module versioning support" -	depends on MODULES  	help  	  Usually, you have to use modules compiled with your kernel.  	  Saying Y here makes it sometimes possible to use modules @@ -886,7 +885,6 @@ config MODVERSIONS  config MODULE_SRCVERSION_ALL  	bool "Source checksum for all modules" -	depends on MODULES  	help  	  Modules which contain a MODULE_VERSION get an extra "srcversion"  	  field inserted into their modinfo section, which contains a @@ -898,11 +896,12 @@ config MODULE_SRCVERSION_ALL  config KMOD  	def_bool y -	depends on MODULES  	help  	  This is being removed soon.  These days, CONFIG_MODULES  	  implies CONFIG_KMOD, so use that instead. +endif # MODULES +  config STOP_MACHINE  	bool  	default y diff --git a/init/main.c b/init/main.c index 9c3b68b86ca..0bc7e167bf4 100644 --- a/init/main.c +++ b/init/main.c @@ -22,7 +22,6 @@  #include <linux/init.h>  #include <linux/smp_lock.h>  #include <linux/initrd.h> -#include <linux/hdreg.h>  #include <linux/bootmem.h>  #include <linux/tty.h>  #include <linux/gfp.h> diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 496c3dd3727..972f8e61d36 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -243,6 +243,9 @@ static inline int open_arg(int flags, int mask)  static int audit_match_perm(struct audit_context *ctx, int mask)  { +	if (unlikely(!ctx)) +		return 0; +  	unsigned n = ctx->major;  	switch (audit_classify_syscall(ctx->arch, n)) {  	case 0:	/* native */ @@ -284,6 +287,10 @@ static int audit_match_filetype(struct audit_context *ctx, int which)  {  	unsigned index = which & ~S_IFMT;  	mode_t mode = which & S_IFMT; + +	if (unlikely(!ctx)) +		return 0; +  	if (index >= ctx->name_count)  		return 0;  	if (ctx->names[index].ino == -1) diff --git a/kernel/dma-coherent.c b/kernel/dma-coherent.c index 7517115a8cc..91e96950cd5 100644 --- a/kernel/dma-coherent.c +++ b/kernel/dma-coherent.c @@ -77,15 +77,14 @@ void *dma_mark_declared_memory_occupied(struct device *dev,  {  	struct dma_coherent_mem *mem = dev->dma_mem;  	int pos, err; -	int pages = (size + (device_addr & ~PAGE_MASK) + PAGE_SIZE - 1); -	pages >>= PAGE_SHIFT; +	size += device_addr & ~PAGE_MASK;  	if (!mem)  		return ERR_PTR(-EINVAL);  	pos = (device_addr - mem->device_base) >> PAGE_SHIFT; -	err = bitmap_allocate_region(mem->bitmap, pos, get_order(pages)); +	err = bitmap_allocate_region(mem->bitmap, pos, get_order(size));  	if (err != 0)  		return ERR_PTR(err);  	return mem->virt_base + (pos << PAGE_SHIFT); diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 152abfd3589..0314074fa23 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -323,7 +323,8 @@ static int __irq_set_trigger(struct irq_chip *chip, unsigned int irq,  	ret = chip->set_type(irq, flags & IRQF_TRIGGER_MASK);  	if (ret) -		pr_err("setting flow type for irq %u failed (%pF)\n", +		pr_err("setting trigger mode %d for irq %u failed (%pF)\n", +				(int)(flags & IRQF_TRIGGER_MASK),  				irq, chip->set_type);  	return ret; diff --git a/kernel/pm_qos_params.c b/kernel/pm_qos_params.c index 8cb75702638..da9c2dda6a4 100644 --- a/kernel/pm_qos_params.c +++ b/kernel/pm_qos_params.c @@ -24,7 +24,7 @@   * requirement that the application has is cleaned up when closes the file   * pointer or exits the pm_qos_object will get an opportunity to clean up.   * - * mark gross mgross@linux.intel.com + * Mark Gross <mgross@linux.intel.com>   */  #include <linux/pm_qos_params.h> @@ -211,8 +211,8 @@ EXPORT_SYMBOL_GPL(pm_qos_requirement);   * @value: defines the qos request   *   * This function inserts a new entry in the pm_qos_class list of requested qos - * performance charactoistics.  It recomputes the agregate QoS expectations for - * the pm_qos_class of parrameters. + * performance characteristics.  It recomputes the aggregate QoS expectations + * for the pm_qos_class of parameters.   */  int pm_qos_add_requirement(int pm_qos_class, char *name, s32 value)  { @@ -250,10 +250,10 @@ EXPORT_SYMBOL_GPL(pm_qos_add_requirement);   * @name: identifies the request   * @value: defines the qos request   * - * Updates an existing qos requierement for the pm_qos_class of parameters along + * Updates an existing qos requirement for the pm_qos_class of parameters along   * with updating the target pm_qos_class value.   * - * If the named request isn't in the lest then no change is made. + * If the named request isn't in the list then no change is made.   */  int pm_qos_update_requirement(int pm_qos_class, char *name, s32 new_value)  { @@ -287,7 +287,7 @@ EXPORT_SYMBOL_GPL(pm_qos_update_requirement);   * @pm_qos_class: identifies which list of qos request to us   * @name: identifies the request   * - * Will remove named qos request from pm_qos_class list of parrameters and + * Will remove named qos request from pm_qos_class list of parameters and   * recompute the current target value for the pm_qos_class.   */  void pm_qos_remove_requirement(int pm_qos_class, char *name) @@ -319,7 +319,7 @@ EXPORT_SYMBOL_GPL(pm_qos_remove_requirement);   * @notifier: notifier block managed by caller.   *   * will register the notifier into a notification chain that gets called - * uppon changes to the pm_qos_class target value. + * upon changes to the pm_qos_class target value.   */   int pm_qos_add_notifier(int pm_qos_class, struct notifier_block *notifier)  { @@ -338,7 +338,7 @@ EXPORT_SYMBOL_GPL(pm_qos_add_notifier);   * @notifier: notifier block to be removed.   *   * will remove the notifier from the notification chain that gets called - * uppon changes to the pm_qos_class target value. + * upon changes to the pm_qos_class target value.   */  int pm_qos_remove_notifier(int pm_qos_class, struct notifier_block *notifier)  { diff --git a/kernel/relay.c b/kernel/relay.c index 04006ef970b..8d13a7855c0 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -944,6 +944,10 @@ static void relay_file_read_consume(struct rchan_buf *buf,  	size_t n_subbufs = buf->chan->n_subbufs;  	size_t read_subbuf; +	if (buf->subbufs_produced == buf->subbufs_consumed && +	    buf->offset == buf->bytes_consumed) +		return; +  	if (buf->bytes_consumed + bytes_consumed > subbuf_size) {  		relay_subbufs_consumed(buf->chan, buf->cpu, 1);  		buf->bytes_consumed = 0; @@ -975,6 +979,8 @@ static int relay_file_read_avail(struct rchan_buf *buf, size_t read_pos)  	relay_file_read_consume(buf, read_pos, 0); +	consumed = buf->subbufs_consumed; +  	if (unlikely(buf->offset > subbuf_size)) {  		if (produced == consumed)  			return 0; @@ -993,8 +999,12 @@ static int relay_file_read_avail(struct rchan_buf *buf, size_t read_pos)  	if (consumed > produced)  		produced += n_subbufs * subbuf_size; -	if (consumed == produced) +	if (consumed == produced) { +		if (buf->offset == subbuf_size && +		    buf->subbufs_produced > buf->subbufs_consumed) +			return 1;  		return 0; +	}  	return 1;  } diff --git a/kernel/sched.c b/kernel/sched.c index 21f7da94662..04160d277e7 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -5004,19 +5004,21 @@ recheck:  			return -EPERM;  	} +	if (user) {  #ifdef CONFIG_RT_GROUP_SCHED -	/* -	 * Do not allow realtime tasks into groups that have no runtime -	 * assigned. -	 */ -	if (user -	    && rt_policy(policy) && task_group(p)->rt_bandwidth.rt_runtime == 0) -		return -EPERM; +		/* +		 * Do not allow realtime tasks into groups that have no runtime +		 * assigned. +		 */ +		if (rt_policy(policy) && task_group(p)->rt_bandwidth.rt_runtime == 0) +			return -EPERM;  #endif -	retval = security_task_setscheduler(p, policy, param); -	if (retval) -		return retval; +		retval = security_task_setscheduler(p, policy, param); +		if (retval) +			return retval; +	} +  	/*  	 * make sure no PI-waiters arrive (or leave) while we are  	 * changing the priority of the task: diff --git a/kernel/semaphore.c b/kernel/semaphore.c index aaaeae8244e..94a62c0d4ad 100644 --- a/kernel/semaphore.c +++ b/kernel/semaphore.c @@ -212,9 +212,7 @@ static inline int __sched __down_common(struct semaphore *sem, long state,  	waiter.up = 0;  	for (;;) { -		if (state == TASK_INTERRUPTIBLE && signal_pending(task)) -			goto interrupted; -		if (state == TASK_KILLABLE && fatal_signal_pending(task)) +		if (signal_pending_state(state, task))  			goto interrupted;  		if (timeout <= 0)  			goto timed_out; diff --git a/mm/filemap.c b/mm/filemap.c index d97d1ad5547..54e96865085 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -558,14 +558,14 @@ EXPORT_SYMBOL(wait_on_page_bit);   * But that's OK - sleepers in wait_on_page_writeback() just go back to sleep.   *   * The first mb is necessary to safely close the critical section opened by the - * TestSetPageLocked(), the second mb is necessary to enforce ordering between - * the clear_bit and the read of the waitqueue (to avoid SMP races with a - * parallel wait_on_page_locked()). + * test_and_set_bit() to lock the page; the second mb is necessary to enforce + * ordering between the clear_bit and the read of the waitqueue (to avoid SMP + * races with a parallel wait_on_page_locked()).   */  void unlock_page(struct page *page)  {  	smp_mb__before_clear_bit(); -	if (!TestClearPageLocked(page)) +	if (!test_and_clear_bit(PG_locked, &page->flags))  		BUG();  	smp_mb__after_clear_bit();   	wake_up_page(page, PG_locked); @@ -931,7 +931,7 @@ grab_cache_page_nowait(struct address_space *mapping, pgoff_t index)  	struct page *page = find_get_page(mapping, index);  	if (page) { -		if (!TestSetPageLocked(page)) +		if (trylock_page(page))  			return page;  		page_cache_release(page);  		return NULL; @@ -1027,7 +1027,7 @@ find_page:  			if (inode->i_blkbits == PAGE_CACHE_SHIFT ||  					!mapping->a_ops->is_partially_uptodate)  				goto page_not_up_to_date; -			if (TestSetPageLocked(page)) +			if (!trylock_page(page))  				goto page_not_up_to_date;  			if (!mapping->a_ops->is_partially_uptodate(page,  								desc, offset)) diff --git a/mm/memory.c b/mm/memory.c index 6793b9c6810..1002f473f49 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1789,7 +1789,7 @@ static int do_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,  	 * not dirty accountable.  	 */  	if (PageAnon(old_page)) { -		if (!TestSetPageLocked(old_page)) { +		if (trylock_page(old_page)) {  			reuse = can_share_swap_page(old_page);  			unlock_page(old_page);  		} @@ -2765,16 +2765,26 @@ int make_pages_present(unsigned long addr, unsigned long end)  	vma = find_vma(current->mm, addr);  	if (!vma) -		return -1; +		return -ENOMEM;  	write = (vma->vm_flags & VM_WRITE) != 0;  	BUG_ON(addr >= end);  	BUG_ON(end > vma->vm_end);  	len = DIV_ROUND_UP(end, PAGE_SIZE) - addr/PAGE_SIZE;  	ret = get_user_pages(current, current->mm, addr,  			len, write, 0, NULL, NULL); -	if (ret < 0) +	if (ret < 0) { +		/* +		   SUS require strange return value to mlock +		    - invalid addr generate to ENOMEM. +		    - out of memory should generate EAGAIN. +		*/ +		if (ret == -EFAULT) +			ret = -ENOMEM; +		else if (ret == -ENOMEM) +			ret = -EAGAIN;  		return ret; -	return ret == len ? 0 : -1; +	} +	return ret == len ? 0 : -ENOMEM;  }  #if !defined(__HAVE_ARCH_GATE_AREA) diff --git a/mm/migrate.c b/mm/migrate.c index 153572fb60b..2a80136b23b 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -605,7 +605,7 @@ static int move_to_new_page(struct page *newpage, struct page *page)  	 * establishing additional references. We are the only one  	 * holding a reference to the new page at this point.  	 */ -	if (TestSetPageLocked(newpage)) +	if (!trylock_page(newpage))  		BUG();  	/* Prepare mapping for the new page.*/ @@ -667,7 +667,7 @@ static int unmap_and_move(new_page_t get_new_page, unsigned long private,  	BUG_ON(charge);  	rc = -EAGAIN; -	if (TestSetPageLocked(page)) { +	if (!trylock_page(page)) {  		if (!force)  			goto move_newpage;  		lock_page(page); diff --git a/mm/mlock.c b/mm/mlock.c index 7b2656055d6..01fbe93eff5 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -78,8 +78,6 @@ success:  	mm->locked_vm -= pages;  out: -	if (ret == -ENOMEM) -		ret = -EAGAIN;  	return ret;  } diff --git a/mm/mm_init.c b/mm/mm_init.c index c6af41ea999..936ef2efd89 100644 --- a/mm/mm_init.c +++ b/mm/mm_init.c @@ -14,6 +14,10 @@  #ifdef CONFIG_DEBUG_MEMORY_INIT  int __meminitdata mminit_loglevel; +#ifndef SECTIONS_SHIFT +#define SECTIONS_SHIFT	0 +#endif +  /* The zonelists are simply reported, validation is manual. */  void mminit_verify_zonelist(void)  { @@ -74,11 +78,7 @@ void __init mminit_verify_pageflags_layout(void)  		NR_PAGEFLAGS);  	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_shifts",  		"Section %d Node %d Zone %d\n", -#ifdef SECTIONS_SHIFT  		SECTIONS_SHIFT, -#else -		0, -#endif  		NODES_SHIFT,  		ZONES_SHIFT);  	mminit_dprintk(MMINIT_TRACE, "pageflags_layout_offsets", diff --git a/mm/mmap.c b/mm/mmap.c index 245c3d69067..971d0eda754 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -370,7 +370,7 @@ find_vma_prepare(struct mm_struct *mm, unsigned long addr,  		if (vma_tmp->vm_end > addr) {  			vma = vma_tmp;  			if (vma_tmp->vm_start <= addr) -				return vma; +				break;  			__rb_link = &__rb_parent->rb_left;  		} else {  			rb_prev = __rb_parent; diff --git a/mm/nommu.c b/mm/nommu.c index 5edccd9c921..ed75bc962fb 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -266,6 +266,27 @@ void *vmalloc_node(unsigned long size, int node)  }  EXPORT_SYMBOL(vmalloc_node); +#ifndef PAGE_KERNEL_EXEC +# define PAGE_KERNEL_EXEC PAGE_KERNEL +#endif + +/** + *	vmalloc_exec  -  allocate virtually contiguous, executable memory + *	@size:		allocation size + * + *	Kernel-internal function to allocate enough pages to cover @size + *	the page level allocator and map them into contiguous and + *	executable kernel virtual space. + * + *	For tight control over page level allocator and protection flags + *	use __vmalloc() instead. + */ + +void *vmalloc_exec(unsigned long size) +{ +	return __vmalloc(size, GFP_KERNEL | __GFP_HIGHMEM, PAGE_KERNEL_EXEC); +} +  /**   * vmalloc_32  -  allocate virtually contiguous memory (32bit addressable)   *	@size:		allocation size diff --git a/mm/rmap.c b/mm/rmap.c index 94a5246a3f9..1ea4e6fcee7 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -422,7 +422,7 @@ int page_referenced(struct page *page, int is_locked,  			referenced += page_referenced_anon(page, mem_cont);  		else if (is_locked)  			referenced += page_referenced_file(page, mem_cont); -		else if (TestSetPageLocked(page)) +		else if (!trylock_page(page))  			referenced++;  		else {  			if (page->mapping) diff --git a/mm/shmem.c b/mm/shmem.c index c1e5a3b4f75..04fb4f1ab88 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -1265,7 +1265,7 @@ repeat:  		}  		/* We have to do this with page locked to prevent races */ -		if (TestSetPageLocked(swappage)) { +		if (!trylock_page(swappage)) {  			shmem_swp_unmap(entry);  			spin_unlock(&info->lock);  			wait_on_page_locked(swappage); @@ -1329,7 +1329,7 @@ repeat:  		shmem_swp_unmap(entry);  		filepage = find_get_page(mapping, idx);  		if (filepage && -		    (!PageUptodate(filepage) || TestSetPageLocked(filepage))) { +		    (!PageUptodate(filepage) || !trylock_page(filepage))) {  			spin_unlock(&info->lock);  			wait_on_page_locked(filepage);  			page_cache_release(filepage); diff --git a/mm/swap.c b/mm/swap.c index 7417a2adbe5..9e0cb311807 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -444,7 +444,7 @@ void pagevec_strip(struct pagevec *pvec)  	for (i = 0; i < pagevec_count(pvec); i++) {  		struct page *page = pvec->pages[i]; -		if (PagePrivate(page) && !TestSetPageLocked(page)) { +		if (PagePrivate(page) && trylock_page(page)) {  			if (PagePrivate(page))  				try_to_release_page(page, 0);  			unlock_page(page); diff --git a/mm/swap_state.c b/mm/swap_state.c index b8035b05512..167cf2dc8a0 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -201,7 +201,7 @@ void delete_from_swap_cache(struct page *page)   */  static inline void free_swap_cache(struct page *page)  { -	if (PageSwapCache(page) && !TestSetPageLocked(page)) { +	if (PageSwapCache(page) && trylock_page(page)) {  		remove_exclusive_swap_page(page);  		unlock_page(page);  	} @@ -302,9 +302,9 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,  		 * re-using the just freed swap entry for an existing page.  		 * May fail (-ENOMEM) if radix-tree node allocation failed.  		 */ -		SetPageLocked(new_page); +		set_page_locked(new_page);  		err = add_to_swap_cache(new_page, entry, gfp_mask & GFP_KERNEL); -		if (!err) { +		if (likely(!err)) {  			/*  			 * Initiate read into locked page and return.  			 */ @@ -312,7 +312,7 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,  			swap_readpage(NULL, new_page);  			return new_page;  		} -		ClearPageLocked(new_page); +		clear_page_locked(new_page);  		swap_free(entry);  	} while (err != -ENOMEM); diff --git a/mm/swapfile.c b/mm/swapfile.c index bb7f79641f9..1e330f2998f 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -403,7 +403,7 @@ void free_swap_and_cache(swp_entry_t entry)  	if (p) {  		if (swap_entry_free(p, swp_offset(entry)) == 1) {  			page = find_get_page(&swapper_space, entry.val); -			if (page && unlikely(TestSetPageLocked(page))) { +			if (page && unlikely(!trylock_page(page))) {  				page_cache_release(page);  				page = NULL;  			} diff --git a/mm/truncate.c b/mm/truncate.c index e68443d7456..250505091d3 100644 --- a/mm/truncate.c +++ b/mm/truncate.c @@ -104,7 +104,6 @@ truncate_complete_page(struct address_space *mapping, struct page *page)  	cancel_dirty_page(page, PAGE_CACHE_SIZE);  	remove_from_page_cache(page); -	ClearPageUptodate(page);  	ClearPageMappedToDisk(page);  	page_cache_release(page);	/* pagecache ref */  } @@ -188,7 +187,7 @@ void truncate_inode_pages_range(struct address_space *mapping,  			if (page_index > next)  				next = page_index;  			next++; -			if (TestSetPageLocked(page)) +			if (!trylock_page(page))  				continue;  			if (PageWriteback(page)) {  				unlock_page(page); @@ -281,7 +280,7 @@ unsigned long __invalidate_mapping_pages(struct address_space *mapping,  			pgoff_t index;  			int lock_failed; -			lock_failed = TestSetPageLocked(page); +			lock_failed = !trylock_page(page);  			/*  			 * We really shouldn't be looking at the ->index of an @@ -356,7 +355,6 @@ invalidate_complete_page2(struct address_space *mapping, struct page *page)  	BUG_ON(PagePrivate(page));  	__remove_from_page_cache(page);  	spin_unlock_irq(&mapping->tree_lock); -	ClearPageUptodate(page);  	page_cache_release(page);	/* pagecache ref */  	return 1;  failed: diff --git a/mm/vmscan.c b/mm/vmscan.c index 75be453628b..1ff1a58e7c1 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -496,7 +496,7 @@ static unsigned long shrink_page_list(struct list_head *page_list,  		page = lru_to_page(page_list);  		list_del(&page->lru); -		if (TestSetPageLocked(page)) +		if (!trylock_page(page))  			goto keep;  		VM_BUG_ON(PageActive(page)); @@ -582,7 +582,7 @@ static unsigned long shrink_page_list(struct list_head *page_list,  				 * A synchronous write - probably a ramdisk.  Go  				 * ahead and try to reclaim the page.  				 */ -				if (TestSetPageLocked(page)) +				if (!trylock_page(page))  					goto keep;  				if (PageDirty(page) || PageWriteback(page))  					goto keep_locked; diff --git a/net/ax25/sysctl_net_ax25.c b/net/ax25/sysctl_net_ax25.c index f597987b242..f288fc4aef9 100644 --- a/net/ax25/sysctl_net_ax25.c +++ b/net/ax25/sysctl_net_ax25.c @@ -36,6 +36,7 @@ static struct ctl_path ax25_path[] = {  	{ .procname = "ax25", .ctl_name = NET_AX25, },  	{ }  }; +  static const ctl_table ax25_param_table[] = {  	{  		.ctl_name	= NET_AX25_IP_DEFAULT_MODE, @@ -167,6 +168,7 @@ static const ctl_table ax25_param_table[] = {  		.extra1		= &min_proto,  		.extra2		= &max_proto  	}, +#ifdef CONFIG_AX25_DAMA_SLAVE  	{  		.ctl_name	= NET_AX25_DAMA_SLAVE_TIMEOUT,  		.procname	= "dama_slave_timeout", @@ -177,6 +179,8 @@ static const ctl_table ax25_param_table[] = {  		.extra1		= &min_ds_timeout,  		.extra2		= &max_ds_timeout  	}, +#endif +  	{ .ctl_name = 0 }	/* that's all, folks! */  }; @@ -210,16 +214,6 @@ void ax25_register_sysctl(void)  		ax25_table[n].procname     = ax25_dev->dev->name;  		ax25_table[n].mode         = 0555; -#ifndef CONFIG_AX25_DAMA_SLAVE -		/* -		 * We do not wish to have a representation of this parameter -		 * in /proc/sys/ when configured *not* to include the -		 * AX.25 DAMA slave code, do we? -		 */ - -		child[AX25_VALUES_DS_TIMEOUT].procname = NULL; -#endif -  		child[AX25_MAX_VALUES].ctl_name = 0;	/* just in case... */  		for (k = 0; k < AX25_MAX_VALUES; k++) diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c index 6e280a8a31e..6a9a6cd74b1 100644 --- a/net/bridge/br_netfilter.c +++ b/net/bridge/br_netfilter.c @@ -113,7 +113,7 @@ void br_netfilter_rtable_init(struct net_bridge *br)  	struct rtable *rt = &br->fake_rtable;  	atomic_set(&rt->u.dst.__refcnt, 1); -	rt->u.dst.dev = &br->dev; +	rt->u.dst.dev = br->dev;  	rt->u.dst.path = &rt->u.dst;  	rt->u.dst.metrics[RTAX_MTU - 1] = 1500;  	rt->u.dst.flags	= DST_NOXFRM; diff --git a/net/bridge/br_stp.c b/net/bridge/br_stp.c index 921bbe5cb94..6e63ec3f1fc 100644 --- a/net/bridge/br_stp.c +++ b/net/bridge/br_stp.c @@ -368,14 +368,25 @@ static void br_make_blocking(struct net_bridge_port *p)  /* called under bridge lock */  static void br_make_forwarding(struct net_bridge_port *p)  { -	if (p->state == BR_STATE_BLOCKING) { -		if (p->br->stp_enabled == BR_KERNEL_STP) -			p->state = BR_STATE_LISTENING; -		else -			p->state = BR_STATE_LEARNING; +	struct net_bridge *br = p->br; -		br_log_state(p); -		mod_timer(&p->forward_delay_timer, jiffies + p->br->forward_delay);	} +	if (p->state != BR_STATE_BLOCKING) +		return; + +	if (br->forward_delay == 0) { +		p->state = BR_STATE_FORWARDING; +		br_topology_change_detection(br); +		del_timer(&p->forward_delay_timer); +	} +	else if (p->br->stp_enabled == BR_KERNEL_STP) +		p->state = BR_STATE_LISTENING; +	else +		p->state = BR_STATE_LEARNING; + +	br_log_state(p); + +	if (br->forward_delay != 0) +		mod_timer(&p->forward_delay_timer, jiffies + br->forward_delay);  }  /* called under bridge lock */ diff --git a/net/core/dev.c b/net/core/dev.c index 69320a56a08..01993ad74e7 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1796,7 +1796,7 @@ gso:  	skb->tc_verd = SET_TC_AT(skb->tc_verd,AT_EGRESS);  #endif  	if (q->enqueue) { -		spinlock_t *root_lock = qdisc_root_lock(q); +		spinlock_t *root_lock = qdisc_lock(q);  		spin_lock(root_lock); @@ -1805,7 +1805,6 @@ gso:  		spin_unlock(root_lock); -		rc = rc == NET_XMIT_BYPASS ? NET_XMIT_SUCCESS : rc;  		goto out;  	} @@ -1909,7 +1908,6 @@ int netif_rx(struct sk_buff *skb)  	if (queue->input_pkt_queue.qlen <= netdev_max_backlog) {  		if (queue->input_pkt_queue.qlen) {  enqueue: -			dev_hold(skb->dev);  			__skb_queue_tail(&queue->input_pkt_queue, skb);  			local_irq_restore(flags);  			return NET_RX_SUCCESS; @@ -1995,7 +1993,7 @@ static void net_tx_action(struct softirq_action *h)  			smp_mb__before_clear_bit();  			clear_bit(__QDISC_STATE_SCHED, &q->state); -			root_lock = qdisc_root_lock(q); +			root_lock = qdisc_lock(q);  			if (spin_trylock(root_lock)) {  				qdisc_run(q);  				spin_unlock(root_lock); @@ -2270,6 +2268,20 @@ out:  	return ret;  } +/* Network device is going away, flush any packets still pending  */ +static void flush_backlog(void *arg) +{ +	struct net_device *dev = arg; +	struct softnet_data *queue = &__get_cpu_var(softnet_data); +	struct sk_buff *skb, *tmp; + +	skb_queue_walk_safe(&queue->input_pkt_queue, skb, tmp) +		if (skb->dev == dev) { +			__skb_unlink(skb, &queue->input_pkt_queue); +			kfree_skb(skb); +		} +} +  static int process_backlog(struct napi_struct *napi, int quota)  {  	int work = 0; @@ -2279,7 +2291,6 @@ static int process_backlog(struct napi_struct *napi, int quota)  	napi->weight = weight_p;  	do {  		struct sk_buff *skb; -		struct net_device *dev;  		local_irq_disable();  		skb = __skb_dequeue(&queue->input_pkt_queue); @@ -2288,14 +2299,9 @@ static int process_backlog(struct napi_struct *napi, int quota)  			local_irq_enable();  			break;  		} -  		local_irq_enable(); -		dev = skb->dev; -  		netif_receive_skb(skb); - -		dev_put(dev);  	} while (++work < quota && jiffies == start_time);  	return work; @@ -3988,6 +3994,10 @@ int register_netdevice(struct net_device *dev)  		}  	} +	/* Enable software GSO if SG is supported. */ +	if (dev->features & NETIF_F_SG) +		dev->features |= NETIF_F_GSO; +  	netdev_initialize_kobject(dev);  	ret = netdev_register_kobject(dev);  	if (ret) @@ -4165,6 +4175,8 @@ void netdev_run_todo(void)  		dev->reg_state = NETREG_UNREGISTERED; +		on_each_cpu(flush_backlog, dev, 1); +  		netdev_wait_allrefs(dev);  		/* paranoia */ diff --git a/net/core/neighbour.c b/net/core/neighbour.c index f62c8af85d3..9d92e41826e 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -2281,6 +2281,7 @@ static struct neighbour *neigh_get_idx(struct seq_file *seq, loff_t *pos)  	struct neighbour *n = neigh_get_first(seq);  	if (n) { +		--(*pos);  		while (*pos) {  			n = neigh_get_next(seq, n, pos);  			if (!n) @@ -2341,6 +2342,7 @@ static struct pneigh_entry *pneigh_get_idx(struct seq_file *seq, loff_t *pos)  	struct pneigh_entry *pn = pneigh_get_first(seq);  	if (pn) { +		--(*pos);  		while (*pos) {  			pn = pneigh_get_next(seq, pn, pos);  			if (!pn) @@ -2354,10 +2356,11 @@ static void *neigh_get_idx_any(struct seq_file *seq, loff_t *pos)  {  	struct neigh_seq_state *state = seq->private;  	void *rc; +	loff_t idxpos = *pos; -	rc = neigh_get_idx(seq, pos); +	rc = neigh_get_idx(seq, &idxpos);  	if (!rc && !(state->flags & NEIGH_SEQ_NEIGH_ONLY)) -		rc = pneigh_get_idx(seq, pos); +		rc = pneigh_get_idx(seq, &idxpos);  	return rc;  } @@ -2366,7 +2369,6 @@ void *neigh_seq_start(struct seq_file *seq, loff_t *pos, struct neigh_table *tbl  	__acquires(tbl->lock)  {  	struct neigh_seq_state *state = seq->private; -	loff_t pos_minus_one;  	state->tbl = tbl;  	state->bucket = 0; @@ -2374,8 +2376,7 @@ void *neigh_seq_start(struct seq_file *seq, loff_t *pos, struct neigh_table *tbl  	read_lock_bh(&tbl->lock); -	pos_minus_one = *pos - 1; -	return *pos ? neigh_get_idx_any(seq, &pos_minus_one) : SEQ_START_TOKEN; +	return *pos ? neigh_get_idx_any(seq, pos) : SEQ_START_TOKEN;  }  EXPORT_SYMBOL(neigh_seq_start); @@ -2385,7 +2386,7 @@ void *neigh_seq_next(struct seq_file *seq, void *v, loff_t *pos)  	void *rc;  	if (v == SEQ_START_TOKEN) { -		rc = neigh_get_idx(seq, pos); +		rc = neigh_get_first(seq);  		goto out;  	} diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 3284605f2ec..2498cdaf8cb 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -2085,15 +2085,19 @@ static inline int f_pick(struct pktgen_dev *pkt_dev)  		if (pkt_dev->flows[flow].count >= pkt_dev->lflow) {  			/* reset time */  			pkt_dev->flows[flow].count = 0; +			pkt_dev->flows[flow].flags = 0;  			pkt_dev->curfl += 1;  			if (pkt_dev->curfl >= pkt_dev->cflows)  				pkt_dev->curfl = 0; /*reset */  		}  	} else {  		flow = random32() % pkt_dev->cflows; +		pkt_dev->curfl = flow; -		if (pkt_dev->flows[flow].count > pkt_dev->lflow) +		if (pkt_dev->flows[flow].count > pkt_dev->lflow) {  			pkt_dev->flows[flow].count = 0; +			pkt_dev->flows[flow].flags = 0; +		}  	}  	return pkt_dev->curfl; @@ -2162,7 +2166,7 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev)  			mc = random32() % pkt_dev->src_mac_count;  		else {  			mc = pkt_dev->cur_src_mac_offset++; -			if (pkt_dev->cur_src_mac_offset > +			if (pkt_dev->cur_src_mac_offset >=  			    pkt_dev->src_mac_count)  				pkt_dev->cur_src_mac_offset = 0;  		} @@ -2189,7 +2193,7 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev)  		else {  			mc = pkt_dev->cur_dst_mac_offset++; -			if (pkt_dev->cur_dst_mac_offset > +			if (pkt_dev->cur_dst_mac_offset >=  			    pkt_dev->dst_mac_count) {  				pkt_dev->cur_dst_mac_offset = 0;  			} diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 770d827f5ab..e0689fd7b79 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -232,6 +232,7 @@ static struct ctl_table ipv4_table[] = {  		.mode		= 0644,  		.proc_handler	= &ipv4_doint_and_flush,  		.strategy	= &ipv4_doint_and_flush_strategy, +		.extra2		= &init_net,  	},  	{  		.ctl_name	= NET_IPV4_NO_PMTU_DISC, diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index a027003d69a..a4402de425d 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -269,7 +269,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl,  	skb->mark = sk->sk_mark;  	mtu = dst_mtu(dst); -	if ((skb->len <= mtu) || ipfragok || skb_is_gso(skb)) { +	if ((skb->len <= mtu) || skb->local_df || skb_is_gso(skb)) {  		IP6_INC_STATS(ip6_dst_idev(skb->dst),  			      IPSTATS_MIB_OUTREQUESTS);  		return NF_HOOK(PF_INET6, NF_INET_LOCAL_OUT, skb, NULL, dst->dev, diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index ea33b26512c..741cfcd96f8 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -346,6 +346,8 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,  		 */  		if (optlen == 0)  			optval = NULL; +		else if (optval == NULL) +			goto e_inval;  		else if (optlen < sizeof(struct ipv6_opt_hdr) ||  			 optlen & 0x7 || optlen > 8 * 255)  			goto e_inval; diff --git a/net/ipv6/syncookies.c b/net/ipv6/syncookies.c index a46badd1082..ec394cf5a19 100644 --- a/net/ipv6/syncookies.c +++ b/net/ipv6/syncookies.c @@ -199,10 +199,8 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)  	ireq6 = inet6_rsk(req);  	treq = tcp_rsk(req); -	if (security_inet_conn_request(sk, skb, req)) { -		reqsk_free(req); -		goto out; -	} +	if (security_inet_conn_request(sk, skb, req)) +		goto out_free;  	req->mss = mss;  	ireq->rmt_port = th->source; @@ -255,14 +253,13 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)  		fl.fl_ip_dport = inet_rsk(req)->rmt_port;  		fl.fl_ip_sport = inet_sk(sk)->sport;  		security_req_classify_flow(req, &fl); -		if (ip6_dst_lookup(sk, &dst, &fl)) { -			reqsk_free(req); -			goto out; -		} +		if (ip6_dst_lookup(sk, &dst, &fl)) +			goto out_free; +  		if (final_p)  			ipv6_addr_copy(&fl.fl6_dst, final_p);  		if ((xfrm_lookup(&dst, &fl, sk, 0)) < 0) -			goto out; +			goto out_free;  	}  	req->window_clamp = tp->window_clamp ? :dst_metric(dst, RTAX_WINDOW); @@ -273,7 +270,10 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)  	ireq->rcv_wscale = rcv_wscale;  	ret = get_cookie_sock(sk, skb, req, dst); - -out:	return ret; +out: +	return ret; +out_free: +	reqsk_free(req); +	return NULL;  } diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index a4f9a832722..ec59345af65 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h @@ -82,6 +82,7 @@ struct ieee80211_sta_bss {  	u8 bssid[ETH_ALEN];  	u8 ssid[IEEE80211_MAX_SSID_LEN]; +	u8 dtim_period;  	u16 capability; /* host byte order */  	enum ieee80211_band band;  	int freq; @@ -586,6 +587,7 @@ struct ieee80211_local {  	struct timer_list sta_cleanup;  	unsigned long queues_pending[BITS_TO_LONGS(IEEE80211_MAX_QUEUES)]; +	unsigned long queues_pending_run[BITS_TO_LONGS(IEEE80211_MAX_QUEUES)];  	struct ieee80211_tx_stored_packet pending_packet[IEEE80211_MAX_QUEUES];  	struct tasklet_struct tx_pending_tasklet; diff --git a/net/mac80211/main.c b/net/mac80211/main.c index a4c5b90de76..0c02c471bca 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c @@ -1689,6 +1689,11 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)  	if (local->hw.conf.beacon_int < 10)  		local->hw.conf.beacon_int = 100; +	if (local->hw.max_listen_interval == 0) +		local->hw.max_listen_interval = 1; + +	local->hw.conf.listen_interval = local->hw.max_listen_interval; +  	local->wstats_flags |= local->hw.flags & (IEEE80211_HW_SIGNAL_UNSPEC |  						  IEEE80211_HW_SIGNAL_DB |  						  IEEE80211_HW_SIGNAL_DBM) ? diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index acb04133a95..e1d11c9b672 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -551,6 +551,7 @@ static void ieee80211_set_associated(struct net_device *dev,  			/* set timing information */  			sdata->bss_conf.beacon_int = bss->beacon_int;  			sdata->bss_conf.timestamp = bss->timestamp; +			sdata->bss_conf.dtim_period = bss->dtim_period;  			changed |= ieee80211_handle_bss_capability(sdata, bss); @@ -773,7 +774,8 @@ static void ieee80211_send_assoc(struct net_device *dev,  		mgmt->frame_control = IEEE80211_FC(IEEE80211_FTYPE_MGMT,  						   IEEE80211_STYPE_REASSOC_REQ);  		mgmt->u.reassoc_req.capab_info = cpu_to_le16(capab); -		mgmt->u.reassoc_req.listen_interval = cpu_to_le16(1); +		mgmt->u.reassoc_req.listen_interval = +				cpu_to_le16(local->hw.conf.listen_interval);  		memcpy(mgmt->u.reassoc_req.current_ap, ifsta->prev_bssid,  		       ETH_ALEN);  	} else { @@ -781,7 +783,8 @@ static void ieee80211_send_assoc(struct net_device *dev,  		mgmt->frame_control = IEEE80211_FC(IEEE80211_FTYPE_MGMT,  						   IEEE80211_STYPE_ASSOC_REQ);  		mgmt->u.assoc_req.capab_info = cpu_to_le16(capab); -		mgmt->u.assoc_req.listen_interval = cpu_to_le16(1); +		mgmt->u.reassoc_req.listen_interval = +				cpu_to_le16(local->hw.conf.listen_interval);  	}  	/* SSID */ @@ -2688,6 +2691,16 @@ static void ieee80211_rx_bss_info(struct net_device *dev,  	bss->beacon_int = le16_to_cpu(mgmt->u.beacon.beacon_int);  	bss->capability = le16_to_cpu(mgmt->u.beacon.capab_info); +	if (elems->tim) { +		struct ieee80211_tim_ie *tim_ie = +			(struct ieee80211_tim_ie *)elems->tim; +		bss->dtim_period = tim_ie->dtim_period; +	} + +	/* set default value for buggy APs */ +	if (!elems->tim || bss->dtim_period == 0) +		bss->dtim_period = 1; +  	bss->supp_rates_len = 0;  	if (elems->supp_rates) {  		clen = IEEE80211_MAX_SUPP_RATES - bss->supp_rates_len; @@ -3650,11 +3663,21 @@ static int ieee80211_sta_find_ibss(struct net_device *dev,  		       "%s\n", print_mac(mac, bssid),  		       print_mac(mac2, ifsta->bssid));  #endif /* CONFIG_MAC80211_IBSS_DEBUG */ -	if (found && memcmp(ifsta->bssid, bssid, ETH_ALEN) != 0 && -	    (bss = ieee80211_rx_bss_get(dev, bssid, -					local->hw.conf.channel->center_freq, -					ifsta->ssid, ifsta->ssid_len))) { + +	if (found && memcmp(ifsta->bssid, bssid, ETH_ALEN) != 0) {  		int ret; +		int search_freq; + +		if (ifsta->flags & IEEE80211_STA_AUTO_CHANNEL_SEL) +			search_freq = bss->freq; +		else +			search_freq = local->hw.conf.channel->center_freq; + +		bss = ieee80211_rx_bss_get(dev, bssid, search_freq, +					   ifsta->ssid, ifsta->ssid_len); +		if (!bss) +			goto dont_join; +  		printk(KERN_DEBUG "%s: Selected IBSS BSSID %s"  		       " based on configured SSID\n",  		       dev->name, print_mac(mac, bssid)); @@ -3662,6 +3685,8 @@ static int ieee80211_sta_find_ibss(struct net_device *dev,  		ieee80211_rx_bss_put(local, bss);  		return ret;  	} + +dont_join:  #ifdef CONFIG_MAC80211_IBSS_DEBUG  	printk(KERN_DEBUG "   did not try to join ibss\n");  #endif /* CONFIG_MAC80211_IBSS_DEBUG */ @@ -3895,7 +3920,7 @@ done:  	if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {  		struct ieee80211_if_sta *ifsta = &sdata->u.sta;  		if (!(ifsta->flags & IEEE80211_STA_BSSID_SET) || -		    (!ifsta->state == IEEE80211_IBSS_JOINED && +		    (!(ifsta->state == IEEE80211_IBSS_JOINED) &&  		    !ieee80211_sta_active_ibss(dev)))  			ieee80211_sta_find_ibss(dev, ifsta);  	} diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 69019e94387..771ec68b848 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -1060,13 +1060,14 @@ static int ieee80211_tx_prepare(struct ieee80211_tx_data *tx,  static int __ieee80211_tx(struct ieee80211_local *local, struct sk_buff *skb,  			  struct ieee80211_tx_data *tx)  { -	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); +	struct ieee80211_tx_info *info;  	int ret, i; -	if (netif_subqueue_stopped(local->mdev, skb)) -		return IEEE80211_TX_AGAIN; -  	if (skb) { +		if (netif_subqueue_stopped(local->mdev, skb)) +			return IEEE80211_TX_AGAIN; +		info =  IEEE80211_SKB_CB(skb); +  		ieee80211_dump_frame(wiphy_name(local->hw.wiphy),  				     "TX to low-level driver", skb);  		ret = local->ops->tx(local_to_hw(local), skb); @@ -1215,6 +1216,7 @@ retry:  		if (ret == IEEE80211_TX_FRAG_AGAIN)  			skb = NULL; +  		set_bit(queue, local->queues_pending);  		smp_mb();  		/* @@ -1708,14 +1710,19 @@ void ieee80211_tx_pending(unsigned long data)  	netif_tx_lock_bh(dev);  	for (i = 0; i < ieee80211_num_regular_queues(&local->hw); i++) {  		/* Check that this queue is ok */ -		if (__netif_subqueue_stopped(local->mdev, i)) +		if (__netif_subqueue_stopped(local->mdev, i) && +		    !test_bit(i, local->queues_pending_run))  			continue;  		if (!test_bit(i, local->queues_pending)) { +			clear_bit(i, local->queues_pending_run);  			ieee80211_wake_queue(&local->hw, i);  			continue;  		} +		clear_bit(i, local->queues_pending_run); +		netif_start_subqueue(local->mdev, i); +  		store = &local->pending_packet[i];  		tx.extra_frag = store->extra_frag;  		tx.num_extra_frag = store->num_extra_frag; diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 19f85e1b369..0d463c80c40 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c @@ -361,6 +361,7 @@ void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue)  	struct ieee80211_local *local = hw_to_local(hw);  	if (test_bit(queue, local->queues_pending)) { +		set_bit(queue, local->queues_pending_run);  		tasklet_schedule(&local->tx_pending_tasklet);  	} else {  		netif_wake_subqueue(local->mdev, queue); diff --git a/net/mac80211/wme.c b/net/mac80211/wme.c index 28437f0001d..4310e2f6566 100644 --- a/net/mac80211/wme.c +++ b/net/mac80211/wme.c @@ -241,12 +241,14 @@ void ieee80211_ht_agg_queue_remove(struct ieee80211_local *local,  	} else {  		struct netdev_queue *txq;  		spinlock_t *root_lock; +		struct Qdisc *q;  		txq = netdev_get_tx_queue(local->mdev, agg_queue); -		root_lock = qdisc_root_lock(txq->qdisc); +		q = rcu_dereference(txq->qdisc); +		root_lock = qdisc_lock(q);  		spin_lock_bh(root_lock); -		qdisc_reset(txq->qdisc); +		qdisc_reset(q);  		spin_unlock_bh(root_lock);  	}  } diff --git a/net/rfkill/rfkill-input.c b/net/rfkill/rfkill-input.c index 8aa82273014..e5b69556bb5 100644 --- a/net/rfkill/rfkill-input.c +++ b/net/rfkill/rfkill-input.c @@ -109,6 +109,25 @@ static DEFINE_RFKILL_TASK(rfkill_uwb, RFKILL_TYPE_UWB);  static DEFINE_RFKILL_TASK(rfkill_wimax, RFKILL_TYPE_WIMAX);  static DEFINE_RFKILL_TASK(rfkill_wwan, RFKILL_TYPE_WWAN); +static void rfkill_schedule_evsw_rfkillall(int state) +{ +	/* EVERY radio type. state != 0 means radios ON */ +	/* handle EPO (emergency power off) through shortcut */ +	if (state) { +		rfkill_schedule_set(&rfkill_wwan, +				    RFKILL_STATE_UNBLOCKED); +		rfkill_schedule_set(&rfkill_wimax, +				    RFKILL_STATE_UNBLOCKED); +		rfkill_schedule_set(&rfkill_uwb, +				    RFKILL_STATE_UNBLOCKED); +		rfkill_schedule_set(&rfkill_bt, +				    RFKILL_STATE_UNBLOCKED); +		rfkill_schedule_set(&rfkill_wlan, +				    RFKILL_STATE_UNBLOCKED); +	} else +		rfkill_schedule_epo(); +} +  static void rfkill_event(struct input_handle *handle, unsigned int type,  			unsigned int code, int data)  { @@ -132,21 +151,7 @@ static void rfkill_event(struct input_handle *handle, unsigned int type,  	} else if (type == EV_SW) {  		switch (code) {  		case SW_RFKILL_ALL: -			/* EVERY radio type. data != 0 means radios ON */ -			/* handle EPO (emergency power off) through shortcut */ -			if (data) { -				rfkill_schedule_set(&rfkill_wwan, -						    RFKILL_STATE_UNBLOCKED); -				rfkill_schedule_set(&rfkill_wimax, -						    RFKILL_STATE_UNBLOCKED); -				rfkill_schedule_set(&rfkill_uwb, -						    RFKILL_STATE_UNBLOCKED); -				rfkill_schedule_set(&rfkill_bt, -						    RFKILL_STATE_UNBLOCKED); -				rfkill_schedule_set(&rfkill_wlan, -						    RFKILL_STATE_UNBLOCKED); -			} else -				rfkill_schedule_epo(); +			rfkill_schedule_evsw_rfkillall(data);  			break;  		default:  			break; @@ -168,6 +173,7 @@ static int rfkill_connect(struct input_handler *handler, struct input_dev *dev,  	handle->handler = handler;  	handle->name = "rfkill"; +	/* causes rfkill_start() to be called */  	error = input_register_handle(handle);  	if (error)  		goto err_free_handle; @@ -185,6 +191,23 @@ static int rfkill_connect(struct input_handler *handler, struct input_dev *dev,  	return error;  } +static void rfkill_start(struct input_handle *handle) +{ +	/* Take event_lock to guard against configuration changes, we +	 * should be able to deal with concurrency with rfkill_event() +	 * just fine (which event_lock will also avoid). */ +	spin_lock_irq(&handle->dev->event_lock); + +	if (test_bit(EV_SW, handle->dev->evbit)) { +		if (test_bit(SW_RFKILL_ALL, handle->dev->swbit)) +			rfkill_schedule_evsw_rfkillall(test_bit(SW_RFKILL_ALL, +							handle->dev->sw)); +		/* add resync for further EV_SW events here */ +	} + +	spin_unlock_irq(&handle->dev->event_lock); +} +  static void rfkill_disconnect(struct input_handle *handle)  {  	input_close_device(handle); @@ -225,6 +248,7 @@ static struct input_handler rfkill_handler = {  	.event =	rfkill_event,  	.connect =	rfkill_connect,  	.disconnect =	rfkill_disconnect, +	.start =	rfkill_start,  	.name =		"rfkill",  	.id_table =	rfkill_ids,  }; diff --git a/net/rfkill/rfkill.c b/net/rfkill/rfkill.c index c6f2f388cb7..d2d45655cd1 100644 --- a/net/rfkill/rfkill.c +++ b/net/rfkill/rfkill.c @@ -105,6 +105,16 @@ static void rfkill_led_trigger(struct rfkill *rfkill,  #endif /* CONFIG_RFKILL_LEDS */  } +#ifdef CONFIG_RFKILL_LEDS +static void rfkill_led_trigger_activate(struct led_classdev *led) +{ +	struct rfkill *rfkill = container_of(led->trigger, +			struct rfkill, led_trigger); + +	rfkill_led_trigger(rfkill, rfkill->state); +} +#endif /* CONFIG_RFKILL_LEDS */ +  static void notify_rfkill_state_change(struct rfkill *rfkill)  {  	blocking_notifier_call_chain(&rfkill_notifier_list, @@ -589,7 +599,10 @@ static void rfkill_led_trigger_register(struct rfkill *rfkill)  #ifdef CONFIG_RFKILL_LEDS  	int error; -	rfkill->led_trigger.name = rfkill->dev.bus_id; +	if (!rfkill->led_trigger.name) +		rfkill->led_trigger.name = rfkill->dev.bus_id; +	if (!rfkill->led_trigger.activate) +		rfkill->led_trigger.activate = rfkill_led_trigger_activate;  	error = led_trigger_register(&rfkill->led_trigger);  	if (error)  		rfkill->led_trigger.name = NULL; diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c index 6b517b9dac5..43d37256c15 100644 --- a/net/sched/sch_atm.c +++ b/net/sched/sch_atm.c @@ -415,7 +415,7 @@ static int atm_tc_enqueue(struct sk_buff *skb, struct Qdisc *sch)  		case TC_ACT_QUEUED:  		case TC_ACT_STOLEN:  			kfree_skb(skb); -			return NET_XMIT_SUCCESS; +			return NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;  		case TC_ACT_SHOT:  			kfree_skb(skb);  			goto drop; @@ -432,9 +432,11 @@ static int atm_tc_enqueue(struct sk_buff *skb, struct Qdisc *sch)  	ret = qdisc_enqueue(skb, flow->q);  	if (ret != 0) {  drop: __maybe_unused -		sch->qstats.drops++; -		if (flow) -			flow->qstats.drops++; +		if (net_xmit_drop_count(ret)) { +			sch->qstats.drops++; +			if (flow) +				flow->qstats.drops++; +		}  		return ret;  	}  	sch->bstats.bytes += qdisc_pkt_len(skb); @@ -455,7 +457,7 @@ drop: __maybe_unused  		return 0;  	}  	tasklet_schedule(&p->task); -	return NET_XMIT_BYPASS; +	return NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;  }  /* @@ -530,7 +532,7 @@ static int atm_tc_requeue(struct sk_buff *skb, struct Qdisc *sch)  	if (!ret) {  		sch->q.qlen++;  		sch->qstats.requeues++; -	} else { +	} else if (net_xmit_drop_count(ret)) {  		sch->qstats.drops++;  		p->link.qstats.drops++;  	} diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c index 14954bf4a68..4e261ce62f4 100644 --- a/net/sched/sch_cbq.c +++ b/net/sched/sch_cbq.c @@ -230,7 +230,7 @@ cbq_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)  	    (cl = cbq_class_lookup(q, prio)) != NULL)  		return cl; -	*qerr = NET_XMIT_BYPASS; +	*qerr = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;  	for (;;) {  		int result = 0;  		defmap = head->defaults; @@ -256,7 +256,7 @@ cbq_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)  		switch (result) {  		case TC_ACT_QUEUED:  		case TC_ACT_STOLEN: -			*qerr = NET_XMIT_SUCCESS; +			*qerr = NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;  		case TC_ACT_SHOT:  			return NULL;  		case TC_ACT_RECLASSIFY: @@ -377,7 +377,7 @@ cbq_enqueue(struct sk_buff *skb, struct Qdisc *sch)  	q->rx_class = cl;  #endif  	if (cl == NULL) { -		if (ret == NET_XMIT_BYPASS) +		if (ret & __NET_XMIT_BYPASS)  			sch->qstats.drops++;  		kfree_skb(skb);  		return ret; @@ -397,9 +397,11 @@ cbq_enqueue(struct sk_buff *skb, struct Qdisc *sch)  		return ret;  	} -	sch->qstats.drops++; -	cbq_mark_toplevel(q, cl); -	cl->qstats.drops++; +	if (net_xmit_drop_count(ret)) { +		sch->qstats.drops++; +		cbq_mark_toplevel(q, cl); +		cl->qstats.drops++; +	}  	return ret;  } @@ -430,8 +432,10 @@ cbq_requeue(struct sk_buff *skb, struct Qdisc *sch)  			cbq_activate_class(cl);  		return 0;  	} -	sch->qstats.drops++; -	cl->qstats.drops++; +	if (net_xmit_drop_count(ret)) { +		sch->qstats.drops++; +		cl->qstats.drops++; +	}  	return ret;  } @@ -664,13 +668,15 @@ static int cbq_reshape_fail(struct sk_buff *skb, struct Qdisc *child)  	q->rx_class = NULL;  	if (cl && (cl = cbq_reclassify(skb, cl)) != NULL) { +		int ret;  		cbq_mark_toplevel(q, cl);  		q->rx_class = cl;  		cl->q->__parent = sch; -		if (qdisc_enqueue(skb, cl->q) == 0) { +		ret = qdisc_enqueue(skb, cl->q); +		if (ret == NET_XMIT_SUCCESS) {  			sch->q.qlen++;  			sch->bstats.packets++;  			sch->bstats.bytes += qdisc_pkt_len(skb); @@ -678,7 +684,8 @@ static int cbq_reshape_fail(struct sk_buff *skb, struct Qdisc *child)  				cbq_activate_class(cl);  			return 0;  		} -		sch->qstats.drops++; +		if (net_xmit_drop_count(ret)) +			sch->qstats.drops++;  		return 0;  	} diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c index a935676987e..edd1298f85f 100644 --- a/net/sched/sch_dsmark.c +++ b/net/sched/sch_dsmark.c @@ -236,7 +236,7 @@ static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch)  		case TC_ACT_QUEUED:  		case TC_ACT_STOLEN:  			kfree_skb(skb); -			return NET_XMIT_SUCCESS; +			return NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;  		case TC_ACT_SHOT:  			goto drop; @@ -254,7 +254,8 @@ static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch)  	err = qdisc_enqueue(skb, p->q);  	if (err != NET_XMIT_SUCCESS) { -		sch->qstats.drops++; +		if (net_xmit_drop_count(err)) +			sch->qstats.drops++;  		return err;  	} @@ -267,7 +268,7 @@ static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch)  drop:  	kfree_skb(skb);  	sch->qstats.drops++; -	return NET_XMIT_BYPASS; +	return NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;  }  static struct sk_buff *dsmark_dequeue(struct Qdisc *sch) @@ -321,7 +322,8 @@ static int dsmark_requeue(struct sk_buff *skb, struct Qdisc *sch)  	err = p->q->ops->requeue(skb, p->q);  	if (err != NET_XMIT_SUCCESS) { -		sch->qstats.drops++; +		if (net_xmit_drop_count(err)) +			sch->qstats.drops++;  		return err;  	} diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 9c9cd4d9489..7cf83b37459 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -29,7 +29,7 @@  /* Main transmission queue. */  /* Modifications to data participating in scheduling must be protected with - * qdisc_root_lock(qdisc) spinlock. + * qdisc_lock(qdisc) spinlock.   *   * The idea is the following:   * - enqueue, dequeue are serialized via qdisc root lock @@ -126,7 +126,7 @@ static inline int qdisc_restart(struct Qdisc *q)  	if (unlikely((skb = dequeue_skb(q)) == NULL))  		return 0; -	root_lock = qdisc_root_lock(q); +	root_lock = qdisc_lock(q);  	/* And release qdisc */  	spin_unlock(root_lock); @@ -507,7 +507,7 @@ errout:  }  EXPORT_SYMBOL(qdisc_create_dflt); -/* Under qdisc_root_lock(qdisc) and BH! */ +/* Under qdisc_lock(qdisc) and BH! */  void qdisc_reset(struct Qdisc *qdisc)  { @@ -543,7 +543,7 @@ static void __qdisc_destroy(struct rcu_head *head)  	kfree((char *) qdisc - qdisc->padded);  } -/* Under qdisc_root_lock(qdisc) and BH! */ +/* Under qdisc_lock(qdisc) and BH! */  void qdisc_destroy(struct Qdisc *qdisc)  { @@ -659,7 +659,7 @@ static bool some_qdisc_is_running(struct net_device *dev, int lock)  		dev_queue = netdev_get_tx_queue(dev, i);  		q = dev_queue->qdisc; -		root_lock = qdisc_root_lock(q); +		root_lock = qdisc_lock(q);  		if (lock)  			spin_lock_bh(root_lock); @@ -735,7 +735,7 @@ static void shutdown_scheduler_queue(struct net_device *dev,  	struct Qdisc *qdisc_default = _qdisc_default;  	if (qdisc) { -		spinlock_t *root_lock = qdisc_root_lock(qdisc); +		spinlock_t *root_lock = qdisc_lock(qdisc);  		dev_queue->qdisc = qdisc_default;  		dev_queue->qdisc_sleeping = qdisc_default; diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c index 0ae7d19dcba..c2b8d9cce3d 100644 --- a/net/sched/sch_hfsc.c +++ b/net/sched/sch_hfsc.c @@ -1159,14 +1159,14 @@ hfsc_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)  		if (cl->level == 0)  			return cl; -	*qerr = NET_XMIT_BYPASS; +	*qerr = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;  	tcf = q->root.filter_list;  	while (tcf && (result = tc_classify(skb, tcf, &res)) >= 0) {  #ifdef CONFIG_NET_CLS_ACT  		switch (result) {  		case TC_ACT_QUEUED:  		case TC_ACT_STOLEN: -			*qerr = NET_XMIT_SUCCESS; +			*qerr = NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;  		case TC_ACT_SHOT:  			return NULL;  		} @@ -1578,7 +1578,7 @@ hfsc_enqueue(struct sk_buff *skb, struct Qdisc *sch)  	cl = hfsc_classify(skb, sch, &err);  	if (cl == NULL) { -		if (err == NET_XMIT_BYPASS) +		if (err & __NET_XMIT_BYPASS)  			sch->qstats.drops++;  		kfree_skb(skb);  		return err; @@ -1586,8 +1586,10 @@ hfsc_enqueue(struct sk_buff *skb, struct Qdisc *sch)  	err = qdisc_enqueue(skb, cl->qdisc);  	if (unlikely(err != NET_XMIT_SUCCESS)) { -		cl->qstats.drops++; -		sch->qstats.drops++; +		if (net_xmit_drop_count(err)) { +			cl->qstats.drops++; +			sch->qstats.drops++; +		}  		return err;  	} diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 75a40951c4f..be35422711a 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c @@ -214,14 +214,14 @@ static struct htb_class *htb_classify(struct sk_buff *skb, struct Qdisc *sch,  	if ((cl = htb_find(skb->priority, sch)) != NULL && cl->level == 0)  		return cl; -	*qerr = NET_XMIT_BYPASS; +	*qerr = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;  	tcf = q->filter_list;  	while (tcf && (result = tc_classify(skb, tcf, &res)) >= 0) {  #ifdef CONFIG_NET_CLS_ACT  		switch (result) {  		case TC_ACT_QUEUED:  		case TC_ACT_STOLEN: -			*qerr = NET_XMIT_SUCCESS; +			*qerr = NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;  		case TC_ACT_SHOT:  			return NULL;  		} @@ -567,14 +567,16 @@ static int htb_enqueue(struct sk_buff *skb, struct Qdisc *sch)  		}  #ifdef CONFIG_NET_CLS_ACT  	} else if (!cl) { -		if (ret == NET_XMIT_BYPASS) +		if (ret & __NET_XMIT_BYPASS)  			sch->qstats.drops++;  		kfree_skb(skb);  		return ret;  #endif -	} else if (qdisc_enqueue(skb, cl->un.leaf.q) != NET_XMIT_SUCCESS) { -		sch->qstats.drops++; -		cl->qstats.drops++; +	} else if ((ret = qdisc_enqueue(skb, cl->un.leaf.q)) != NET_XMIT_SUCCESS) { +		if (net_xmit_drop_count(ret)) { +			sch->qstats.drops++; +			cl->qstats.drops++; +		}  		return NET_XMIT_DROP;  	} else {  		cl->bstats.packets += @@ -610,15 +612,17 @@ static int htb_requeue(struct sk_buff *skb, struct Qdisc *sch)  		}  #ifdef CONFIG_NET_CLS_ACT  	} else if (!cl) { -		if (ret == NET_XMIT_BYPASS) +		if (ret & __NET_XMIT_BYPASS)  			sch->qstats.drops++;  		kfree_skb(skb);  		return ret;  #endif -	} else if (cl->un.leaf.q->ops->requeue(skb, cl->un.leaf.q) != +	} else if ((ret = cl->un.leaf.q->ops->requeue(skb, cl->un.leaf.q)) !=  		   NET_XMIT_SUCCESS) { -		sch->qstats.drops++; -		cl->qstats.drops++; +		if (net_xmit_drop_count(ret)) { +			sch->qstats.drops++; +			cl->qstats.drops++; +		}  		return NET_XMIT_DROP;  	} else  		htb_activate(q, cl); diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c index a5908570067..fb0294d0b55 100644 --- a/net/sched/sch_netem.c +++ b/net/sched/sch_netem.c @@ -176,7 +176,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)  	if (count == 0) {  		sch->qstats.drops++;  		kfree_skb(skb); -		return NET_XMIT_BYPASS; +		return NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;  	}  	skb_orphan(skb); @@ -240,8 +240,9 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch)  		sch->q.qlen++;  		sch->bstats.bytes += qdisc_pkt_len(skb);  		sch->bstats.packets++; -	} else +	} else if (net_xmit_drop_count(ret)) {  		sch->qstats.drops++; +	}  	pr_debug("netem: enqueue ret %d\n", ret);  	return ret; diff --git a/net/sched/sch_prio.c b/net/sched/sch_prio.c index f849243eb09..eac197610ed 100644 --- a/net/sched/sch_prio.c +++ b/net/sched/sch_prio.c @@ -38,14 +38,14 @@ prio_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)  	struct tcf_result res;  	int err; -	*qerr = NET_XMIT_BYPASS; +	*qerr = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;  	if (TC_H_MAJ(skb->priority) != sch->handle) {  		err = tc_classify(skb, q->filter_list, &res);  #ifdef CONFIG_NET_CLS_ACT  		switch (err) {  		case TC_ACT_STOLEN:  		case TC_ACT_QUEUED: -			*qerr = NET_XMIT_SUCCESS; +			*qerr = NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;  		case TC_ACT_SHOT:  			return NULL;  		} @@ -74,7 +74,7 @@ prio_enqueue(struct sk_buff *skb, struct Qdisc *sch)  #ifdef CONFIG_NET_CLS_ACT  	if (qdisc == NULL) { -		if (ret == NET_XMIT_BYPASS) +		if (ret & __NET_XMIT_BYPASS)  			sch->qstats.drops++;  		kfree_skb(skb);  		return ret; @@ -88,7 +88,8 @@ prio_enqueue(struct sk_buff *skb, struct Qdisc *sch)  		sch->q.qlen++;  		return NET_XMIT_SUCCESS;  	} -	sch->qstats.drops++; +	if (net_xmit_drop_count(ret)) +		sch->qstats.drops++;  	return ret;  } @@ -102,7 +103,7 @@ prio_requeue(struct sk_buff *skb, struct Qdisc* sch)  	qdisc = prio_classify(skb, sch, &ret);  #ifdef CONFIG_NET_CLS_ACT  	if (qdisc == NULL) { -		if (ret == NET_XMIT_BYPASS) +		if (ret & __NET_XMIT_BYPASS)  			sch->qstats.drops++;  		kfree_skb(skb);  		return ret; @@ -114,7 +115,8 @@ prio_requeue(struct sk_buff *skb, struct Qdisc* sch)  		sch->qstats.requeues++;  		return 0;  	} -	sch->qstats.drops++; +	if (net_xmit_drop_count(ret)) +		sch->qstats.drops++;  	return NET_XMIT_DROP;  } diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c index 3f2d1d7f3bb..5da05839e22 100644 --- a/net/sched/sch_red.c +++ b/net/sched/sch_red.c @@ -97,7 +97,7 @@ static int red_enqueue(struct sk_buff *skb, struct Qdisc* sch)  		sch->bstats.bytes += qdisc_pkt_len(skb);  		sch->bstats.packets++;  		sch->q.qlen++; -	} else { +	} else if (net_xmit_drop_count(ret)) {  		q->stats.pdrop++;  		sch->qstats.drops++;  	} diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c index 8589da66656..6e041d10dbd 100644 --- a/net/sched/sch_sfq.c +++ b/net/sched/sch_sfq.c @@ -171,14 +171,14 @@ static unsigned int sfq_classify(struct sk_buff *skb, struct Qdisc *sch,  	if (!q->filter_list)  		return sfq_hash(q, skb) + 1; -	*qerr = NET_XMIT_BYPASS; +	*qerr = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS;  	result = tc_classify(skb, q->filter_list, &res);  	if (result >= 0) {  #ifdef CONFIG_NET_CLS_ACT  		switch (result) {  		case TC_ACT_STOLEN:  		case TC_ACT_QUEUED: -			*qerr = NET_XMIT_SUCCESS; +			*qerr = NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;  		case TC_ACT_SHOT:  			return 0;  		} @@ -285,7 +285,7 @@ sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch)  	hash = sfq_classify(skb, sch, &ret);  	if (hash == 0) { -		if (ret == NET_XMIT_BYPASS) +		if (ret & __NET_XMIT_BYPASS)  			sch->qstats.drops++;  		kfree_skb(skb);  		return ret; @@ -339,7 +339,7 @@ sfq_requeue(struct sk_buff *skb, struct Qdisc *sch)  	hash = sfq_classify(skb, sch, &ret);  	if (hash == 0) { -		if (ret == NET_XMIT_BYPASS) +		if (ret & __NET_XMIT_BYPASS)  			sch->qstats.drops++;  		kfree_skb(skb);  		return ret; diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index b296672f763..7d3b7ff3bf0 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c @@ -135,7 +135,8 @@ static int tbf_enqueue(struct sk_buff *skb, struct Qdisc* sch)  	ret = qdisc_enqueue(skb, q->qdisc);  	if (ret != 0) { -		sch->qstats.drops++; +		if (net_xmit_drop_count(ret)) +			sch->qstats.drops++;  		return ret;  	} diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c index a238d6834b3..483a01d0740 100644 --- a/net/sctp/ipv6.c +++ b/net/sctp/ipv6.c @@ -195,8 +195,7 @@ out:  }  /* Based on tcp_v6_xmit() in tcp_ipv6.c. */ -static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport, -			int ipfragok) +static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport)  {  	struct sock *sk = skb->sk;  	struct ipv6_pinfo *np = inet6_sk(sk); @@ -231,7 +230,10 @@ static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport,  	SCTP_INC_STATS(SCTP_MIB_OUTSCTPPACKS); -	return ip6_xmit(sk, skb, &fl, np->opt, ipfragok); +	if (!(transport->param_flags & SPP_PMTUD_ENABLE)) +		skb->local_df = 1; + +	return ip6_xmit(sk, skb, &fl, np->opt, 0);  }  /* Returns the dst cache entry for the given source and destination ip diff --git a/net/sctp/output.c b/net/sctp/output.c index 45684646b1d..0dc4a7dfb23 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c @@ -586,10 +586,8 @@ int sctp_packet_transmit(struct sctp_packet *packet)  	SCTP_DEBUG_PRINTK("***sctp_transmit_packet*** skb len %d\n",  			  nskb->len); -	if (tp->param_flags & SPP_PMTUD_ENABLE) -		(*tp->af_specific->sctp_xmit)(nskb, tp, packet->ipfragok); -	else -		(*tp->af_specific->sctp_xmit)(nskb, tp, 1); +	nskb->local_df = packet->ipfragok; +	(*tp->af_specific->sctp_xmit)(nskb, tp);  out:  	packet->size = packet->overhead; diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index a6e0818bcff..0b65354aaf6 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c @@ -862,16 +862,21 @@ static int sctp_inet_supported_addrs(const struct sctp_sock *opt,  /* Wrapper routine that calls the ip transmit routine. */  static inline int sctp_v4_xmit(struct sk_buff *skb, -			       struct sctp_transport *transport, int ipfragok) +			       struct sctp_transport *transport)  { +	struct inet_sock *inet = inet_sk(skb->sk); +  	SCTP_DEBUG_PRINTK("%s: skb:%p, len:%d, "  			  "src:%u.%u.%u.%u, dst:%u.%u.%u.%u\n",  			  __func__, skb, skb->len,  			  NIPQUAD(skb->rtable->rt_src),  			  NIPQUAD(skb->rtable->rt_dst)); +	inet->pmtudisc = transport->param_flags & SPP_PMTUD_ENABLE ? +			 IP_PMTUDISC_DO : IP_PMTUDISC_DONT; +  	SCTP_INC_STATS(SCTP_MIB_OUTSCTPPACKS); -	return ip_queue_xmit(skb, ipfragok); +	return ip_queue_xmit(skb, 0);  }  static struct sctp_af sctp_af_inet; diff --git a/scripts/Makefile.fwinst b/scripts/Makefile.fwinst index f63a663de15..6bf8e87f1dc 100644 --- a/scripts/Makefile.fwinst +++ b/scripts/Makefile.fwinst @@ -50,8 +50,12 @@ PHONY +=  __fw_install __fw_modinst FORCE  .PHONY: $(PHONY)  __fw_install: $(installed-fw) +  __fw_modinst: $(installed-mod-fw) +	@: +  __fw_modbuild: $(addprefix $(obj)/,$(mod-fw)) +	@:  FORCE: diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index 9fba838c706..36b5eedcdc7 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c @@ -596,7 +596,7 @@ int main(int ac, char **av)  		break;  	} -	if (conf_get_changed() && conf_write(NULL)) { +	if (conf_write(NULL)) {  		fprintf(stderr, _("\n*** Error during writing of the kernel configuration.\n\n"));  		exit(1);  	} diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 07597611cc5..df6a188b993 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c @@ -222,10 +222,8 @@ load:  				continue;  			if (def == S_DEF_USER) {  				sym = sym_find(line + 9); -				if (!sym) { -					conf_warning("trying to assign nonexistent symbol %s", line + 9); +				if (!sym)  					break; -				}  			} else {  				sym = sym_lookup(line + 9, 0);  				if (sym->type == S_UNKNOWN) @@ -261,10 +259,8 @@ load:  			}  			if (def == S_DEF_USER) {  				sym = sym_find(line + 7); -				if (!sym) { -					conf_warning("trying to assign nonexistent symbol %s", line + 7); +				if (!sym)  					break; -				}  			} else {  				sym = sym_lookup(line + 7, 0);  				if (sym->type == S_UNKNOWN) diff --git a/scripts/kernel-doc b/scripts/kernel-doc index d8f77e26081..ff787e6ff8e 100755 --- a/scripts/kernel-doc +++ b/scripts/kernel-doc @@ -1403,7 +1403,7 @@ sub dump_struct($$) {  	my $members = $3;  	# ignore embedded structs or unions -	$members =~ s/{.*?}//g; +	$members =~ s/{.*}//g;  	# ignore members marked private:  	$members =~ s/\/\*.*?private:.*?public:.*?\*\///gos; diff --git a/scripts/patch-kernel b/scripts/patch-kernel index ece46ef0ba5..46a59cae3a0 100755 --- a/scripts/patch-kernel +++ b/scripts/patch-kernel @@ -213,6 +213,7 @@ fi  if [ $stopvers != "default" ]; then  	STOPSUBLEVEL=`echo $stopvers | cut -d. -f3`  	STOPEXTRA=`echo $stopvers | cut -d. -f4` +	STOPFULLVERSION=${stopvers%%.$STOPEXTRA}  	#echo "#___STOPSUBLEVEL=/$STOPSUBLEVEL/, STOPEXTRA=/$STOPEXTRA/"  else  	STOPSUBLEVEL=9999 @@ -249,7 +250,7 @@ while :				# incrementing SUBLEVEL (s in v.p.s)  do      CURRENTFULLVERSION="$VERSION.$PATCHLEVEL.$SUBLEVEL"      EXTRAVER= -    if [ $stopvers = $CURRENTFULLVERSION ]; then +    if [ $STOPFULLVERSION = $CURRENTFULLVERSION ]; then          echo "Stopping at $CURRENTFULLVERSION base as requested."          break      fi diff --git a/sound/arm/pxa2xx-ac97.c b/sound/arm/pxa2xx-ac97.c index 5b3274b465e..158f7b50b78 100644 --- a/sound/arm/pxa2xx-ac97.c +++ b/sound/arm/pxa2xx-ac97.c @@ -26,7 +26,7 @@  #include <asm/irq.h>  #include <linux/mutex.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/pxa2xx-gpio.h>  #include <asm/arch/audio.h> diff --git a/sound/arm/pxa2xx-pcm.c b/sound/arm/pxa2xx-pcm.c index 0ede9e4656a..9a104e2430f 100644 --- a/sound/arm/pxa2xx-pcm.c +++ b/sound/arm/pxa2xx-pcm.c @@ -21,7 +21,7 @@  #include <sound/pcm_params.h>  #include <asm/dma.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h>  #include "pxa2xx-pcm.h" diff --git a/sound/arm/sa11xx-uda1341.c b/sound/arm/sa11xx-uda1341.c index faeddf3eced..40c213e7059 100644 --- a/sound/arm/sa11xx-uda1341.c +++ b/sound/arm/sa11xx-uda1341.c @@ -71,7 +71,7 @@  #include <linux/pm.h>  #endif -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/h3600.h>  #include <asm/mach-types.h>  #include <asm/dma.h> diff --git a/sound/core/seq/oss/seq_oss_synth.c b/sound/core/seq/oss/seq_oss_synth.c index 558dadbf45f..e024e4588b8 100644 --- a/sound/core/seq/oss/seq_oss_synth.c +++ b/sound/core/seq/oss/seq_oss_synth.c @@ -604,6 +604,9 @@ snd_seq_oss_synth_make_info(struct seq_oss_devinfo *dp, int dev, struct synth_in  {  	struct seq_oss_synth *rec; +	if (dev < 0 || dev >= dp->max_synthdev) +		return -ENXIO; +  	if (dp->synths[dev].is_midi) {  		struct midi_info minf;  		snd_seq_oss_midi_make_info(dp, dp->synths[dev].midi_mapped, &minf); diff --git a/sound/oss/vidc.c b/sound/oss/vidc.c index bb4a0969f46..41cd4f25de0 100644 --- a/sound/oss/vidc.c +++ b/sound/oss/vidc.c @@ -22,7 +22,7 @@  #include <linux/kernel.h>  #include <linux/interrupt.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/dma.h>  #include <asm/io.h>  #include <asm/hardware/iomd.h> diff --git a/sound/oss/vidc_fill.S b/sound/oss/vidc_fill.S index 01ccc074cc1..d2cb210cc40 100644 --- a/sound/oss/vidc_fill.S +++ b/sound/oss/vidc_fill.S @@ -11,7 +11,7 @@   */  #include <linux/linkage.h>  #include <asm/assembler.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/hardware/iomd.h>  		.text diff --git a/sound/oss/waveartist.c b/sound/oss/waveartist.c index 88490418f93..d84c49787f6 100644 --- a/sound/oss/waveartist.c +++ b/sound/oss/waveartist.c @@ -47,7 +47,7 @@  #include "waveartist.h"  #ifdef CONFIG_ARM -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/mach-types.h>  #endif diff --git a/sound/soc/at91/eti_b1_wm8731.c b/sound/soc/at91/eti_b1_wm8731.c index d532de95424..d61a4537e60 100644 --- a/sound/soc/at91/eti_b1_wm8731.c +++ b/sound/soc/at91/eti_b1_wm8731.c @@ -33,7 +33,7 @@  #include <sound/soc.h>  #include <sound/soc-dapm.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/gpio.h>  #include "../codecs/wm8731.h" diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c index 5e2c306399e..0722eebe3d6 100644 --- a/sound/soc/davinci/davinci-evm.c +++ b/sound/soc/davinci/davinci-evm.c @@ -19,7 +19,6 @@  #include <sound/soc.h>  #include <sound/soc-dapm.h> -#include <asm/mach-types.h>  #include <asm/dma.h>  #include <asm/arch/hardware.h> diff --git a/sound/soc/pxa/pxa2xx-ac97.c b/sound/soc/pxa/pxa2xx-ac97.c index 059af815ea0..b45a4f199ef 100644 --- a/sound/soc/pxa/pxa2xx-ac97.c +++ b/sound/soc/pxa/pxa2xx-ac97.c @@ -26,7 +26,7 @@  #include <asm/irq.h>  #include <linux/mutex.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/pxa2xx-gpio.h>  #include <asm/arch/audio.h> diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c index 8f96d87f7b4..f69870f4f67 100644 --- a/sound/soc/pxa/pxa2xx-i2s.c +++ b/sound/soc/pxa/pxa2xx-i2s.c @@ -21,7 +21,7 @@  #include <sound/initval.h>  #include <sound/soc.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/pxa2xx-gpio.h>  #include <asm/arch/audio.h> diff --git a/sound/soc/pxa/pxa2xx-pcm.c b/sound/soc/pxa/pxa2xx-pcm.c index 2df03ee5819..77708f879c9 100644 --- a/sound/soc/pxa/pxa2xx-pcm.c +++ b/sound/soc/pxa/pxa2xx-pcm.c @@ -22,7 +22,7 @@  #include <sound/soc.h>  #include <asm/dma.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/pxa-regs.h>  #include <asm/arch/audio.h> diff --git a/sound/soc/s3c24xx/neo1973_wm8753.c b/sound/soc/s3c24xx/neo1973_wm8753.c index 4d7a9aa15f1..47bf9a0aab7 100644 --- a/sound/soc/s3c24xx/neo1973_wm8753.c +++ b/sound/soc/s3c24xx/neo1973_wm8753.c @@ -24,11 +24,10 @@  #include <sound/soc-dapm.h>  #include <sound/tlv.h> -#include <asm/mach-types.h>  #include <asm/hardware/scoop.h>  #include <asm/arch/regs-clock.h>  #include <asm/arch/regs-gpio.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/audio.h>  #include <linux/io.h>  #include <asm/arch/spi-gpio.h> diff --git a/sound/soc/s3c24xx/s3c2412-i2s.c b/sound/soc/s3c24xx/s3c2412-i2s.c index ee4676ed128..59c3d5355f5 100644 --- a/sound/soc/s3c24xx/s3c2412-i2s.c +++ b/sound/soc/s3c24xx/s3c2412-i2s.c @@ -28,7 +28,7 @@  #include <sound/pcm_params.h>  #include <sound/initval.h>  #include <sound/soc.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <linux/io.h>  #include <asm/dma.h> diff --git a/sound/soc/s3c24xx/s3c2443-ac97.c b/sound/soc/s3c24xx/s3c2443-ac97.c index 783349b7fed..a37167398ab 100644 --- a/sound/soc/s3c24xx/s3c2443-ac97.c +++ b/sound/soc/s3c24xx/s3c2443-ac97.c @@ -27,7 +27,7 @@  #include <sound/initval.h>  #include <sound/soc.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/plat-s3c/regs-ac97.h>  #include <asm/arch/regs-gpio.h>  #include <asm/arch/regs-clock.h> diff --git a/sound/soc/s3c24xx/s3c24xx-i2s.c b/sound/soc/s3c24xx/s3c24xx-i2s.c index 397524282b5..ff614d645e7 100644 --- a/sound/soc/s3c24xx/s3c24xx-i2s.c +++ b/sound/soc/s3c24xx/s3c24xx-i2s.c @@ -27,7 +27,7 @@  #include <sound/initval.h>  #include <sound/soc.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/regs-gpio.h>  #include <asm/arch/regs-clock.h>  #include <asm/arch/audio.h> diff --git a/sound/soc/s3c24xx/s3c24xx-pcm.c b/sound/soc/s3c24xx/s3c24xx-pcm.c index cef79b34dc6..fadd33e2a73 100644 --- a/sound/soc/s3c24xx/s3c24xx-pcm.c +++ b/sound/soc/s3c24xx/s3c24xx-pcm.c @@ -27,7 +27,7 @@  #include <sound/soc.h>  #include <asm/dma.h> -#include <asm/hardware.h> +#include <asm/arch/hardware.h>  #include <asm/arch/dma.h>  #include <asm/arch/audio.h>  |