Merge commit 'v2.6.28-rc2' into x86/pci-ioapic-boot-irq-quirks
authorIngo Molnar <mingo@elte.hu>
Tue, 28 Oct 2008 15:26:12 +0000 (16:26 +0100)
committerIngo Molnar <mingo@elte.hu>
Tue, 28 Oct 2008 15:26:12 +0000 (16:26 +0100)
1  2 
Documentation/kernel-parameters.txt
arch/x86/Kconfig
arch/x86/include/asm/io_apic.h
arch/x86/include/asm/pci.h
drivers/pci/quirks.c
include/linux/pci.h
include/linux/pci_ids.h

index 62b6e8067a5b54d7d6c3de39655dfd998fb46696,343e0f0f84b60e9f62bcdef4963f5c8912073c8a..63bac584f9cb03975ca61b4d4453b118f5ffd3c3
@@@ -87,7 -87,8 +87,8 @@@ parameter is applicable
        SH      SuperH architecture is enabled.
        SMP     The kernel is an SMP kernel.
        SPARC   Sparc architecture is enabled.
-       SWSUSP  Software suspend is enabled.
+       SWSUSP  Software suspend (hibernation) is enabled.
+       SUSPEND System suspend states are enabled.
        TS      Appropriate touchscreen support is enabled.
        USB     USB support is enabled.
        USBHID  USB Human Interface Device support is enabled.
        X86-64  X86-64 architecture is enabled.
                        More X86-64 boot options can be found in
                        Documentation/x86_64/boot-options.txt .
+       X86     Either 32bit or 64bit x86 (same as X86-32+X86-64)
  
  In addition, the following text indicates that the option:
  
@@@ -147,10 -149,12 +149,12 @@@ and is between 256 and 4096 characters
                        default: 0
  
        acpi_sleep=     [HW,ACPI] Sleep options
-                       Format: { s3_bios, s3_mode, s3_beep, old_ordering }
+                       Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig, old_ordering }
                        See Documentation/power/video.txt for s3_bios and s3_mode.
                        s3_beep is for debugging; it makes the PC's speaker beep
                        as soon as the kernel's real-mode entry point is called.
+                       s4_nohwsig prevents ACPI hardware signature from being
+                       used during resume from hibernation.
                        old_ordering causes the ACPI 1.0 ordering of the _PTS
                        control method, wrt putting devices into low power
                        states, to be enforced (the ACPI 2.0 ordering of _PTS is
        acpi.debug_level=       [HW,ACPI]
                        Format: <int>
                        Each bit of the <int> indicates an ACPI debug level,
-                       1: enable, 0: disable. It is useful for boot time
-                       debugging. After system has booted up, it can be set
-                       via /sys/module/acpi/parameters/debug_level.
-                       CONFIG_ACPI_DEBUG must be enabled for this to produce any output.
-                       Available bits (add the numbers together) to enable different
-                       debug output levels of the ACPI subsystem:
-                       0x01 error 0x02 warn 0x04 init 0x08 debug object
-                       0x10 info 0x20 init names 0x40 parse 0x80 load
-                       0x100 dispatch 0x200 execute 0x400 names 0x800 operation region
-                       0x1000 bfield 0x2000 tables 0x4000 values 0x8000 objects
-                       0x10000 resources 0x20000 user requests 0x40000 package.
-                       The number can be in decimal or prefixed with 0x in hex.
-                       Warning: Many of these options can produce a lot of
-                       output and make your system unusable. Be very careful.
+                       which corresponds to the level in an ACPI_DEBUG_PRINT
+                       statement.  After system has booted up, this mask
+                       can be set via /sys/module/acpi/parameters/debug_level.
+                       CONFIG_ACPI_DEBUG must be enabled for this to produce
+                       any output.  The number can be in decimal or prefixed
+                       with 0x in hex.  Some of these options produce so much
+                       output that the system is unusable.
+                       The following global components are defined by the
+                       ACPI CA:
+                              0x01 error
+                              0x02 warn
+                              0x04 init
+                              0x08 debug object
+                              0x10 info
+                              0x20 init names
+                              0x40 parse
+                              0x80 load
+                             0x100 dispatch
+                             0x200 execute
+                             0x400 names
+                             0x800 operation region
+                            0x1000 bfield
+                            0x2000 tables
+                            0x4000 values
+                            0x8000 objects
+                           0x10000 resources
+                           0x20000 user requests
+                           0x40000 package
+                       The number can be in decimal or prefixed with 0x in hex.
+                       Warning: Many of these options can produce a lot of
+                       output and make your system unusable. Be very careful.
+       acpi.power_nocheck=     [HW,ACPI]
+                       Format: 1/0 enable/disable the check of power state.
+                       On some bogus BIOS the _PSC object/_STA object of
+                       power resource can't return the correct device power
+                       state. In such case it is unneccessary to check its
+                       power state again in power transition.
+                       1 : disable the power state check
  
        acpi_pm_good    [X86-32,X86-64]
                        Override the pmtimer bug detection: force the kernel
                        isolate - enable device isolation (each device, as far
                                  as possible, will get its own protection
                                  domain)
+                       fullflush - enable flushing of IO/TLB entries when
+                                   they are unmapped. Otherwise they are
+                                   flushed before they will be reused, which
+                                   is a lot of faster
        amd_iommu_size= [HW,X86-64]
                        Define the size of the aperture for the AMD IOMMU
                        driver. Possible values are:
                        no delay (0).
                        Format: integer
  
+       bootmem_debug   [KNL] Enable bootmem allocator debug messages.
        bttv.card=      [HW,V4L] bttv (bt848 + bt878 based grabber cards)
        bttv.radio=     Most important insmod options are available as
                        kernel args too.
                        Range: 0 - 8192
                        Default: 64
  
-       disable_8254_timer
-       enable_8254_timer
-                       [IA32/X86_64] Disable/Enable interrupt 0 timer routing
-                       over the 8254 in addition to over the IO-APIC. The
-                       kernel tries to set a sensible default.
        hpet=           [X86-32,HPET] option to control HPET usage
                        Format: { enable (default) | disable | force }
                        disable: disable HPET and use PIT instead
        earlyprintk=    [X86-32,X86-64,SH,BLACKFIN]
                        earlyprintk=vga
                        earlyprintk=serial[,ttySn[,baudrate]]
+                       earlyprintk=dbgp
  
                        Append ",keep" to not disable it when the real console
                        takes over.
  
-                       Only vga or serial at a time, not both.
+                       Only vga or serial or usb debug port at a time.
  
                        Currently only ttyS0 and ttyS1 are supported.
  
                        See Documentation/block/as-iosched.txt and
                        Documentation/block/deadline-iosched.txt for details.
  
-       elfcorehdr=     [X86-32, X86_64]
+       elfcorehdr=     [IA64,PPC,SH,X86-32,X86_64]
                        Specifies physical address of start of kernel core
                        image elf header. Generally kexec loader will
                        pass this option to capture kernel.
        hisax=          [HW,ISDN]
                        See Documentation/isdn/README.HiSax.
  
-       hugepages=      [HW,X86-32,IA-64] Maximal number of HugeTLB pages.
-       hugepagesz=     [HW,IA-64,PPC] The size of the HugeTLB pages.
+       hugepages=      [HW,X86-32,IA-64] HugeTLB pages to allocate at boot.
+       hugepagesz=     [HW,IA-64,PPC,X86-64] The size of the HugeTLB pages.
+                       On x86-64 and powerpc, this option can be specified
+                       multiple times interleaved with hugepages= to reserve
+                       huge pages of different sizes. Valid pages sizes on
+                       x86-64 are 2M (when the CPU supports "pse") and 1G
+                       (when the CPU supports the "pdpe1gb" cpuinfo flag)
+                       Note that 1GB pages can only be allocated at boot time
+                       using hugepages= and not freed afterwards.
+       default_hugepagesz=
+                       [same as hugepagesz=] The size of the default
+                       HugeTLB page size. This is the size represented by
+                       the legacy /proc/ hugepages APIs, used for SHM, and
+                       default size when mounting hugetlbfs filesystems.
+                       Defaults to the default architecture's huge page size
+                       if not specified.
+       hlt             [BUGS=ARM,SH]
+       i8042.debug     [HW] Toggle i8042 debug mode
        i8042.direct    [HW] Put keyboard port into non-translated mode
        i8042.dumbkbd   [HW] Pretend that controller can only read data from
                             keyboard and cannot control its state
                        (only serial suported for now)
                        Format: <serial_device>[,baud]
  
+       kmac=           [MIPS] korina ethernet MAC address.
+                       Configure the RouterBoard 532 series on-chip
+                       Ethernet adapter MAC address.
        l2cr=           [PPC]
  
        l3cr=           [PPC]
  
                        * [no]ncq: Turn on or off NCQ.
  
+                       * nohrst, nosrst, norst: suppress hard, soft
+                           and both resets.
                        If there are multiple matching configurations changing
                        the same attribute, the last one is used.
  
        mem=nopentium   [BUGS=X86-32] Disable usage of 4MB pages for kernel
                        memory.
  
+       memchunk=nn[KMG]
+                       [KNL,SH] Allow user to override the default size for
+                       per-device physically contiguous DMA buffers.
        memmap=exactmap [KNL,X86-32,X86_64] Enable setting of an exact
                        E820 memory map, as specified by the user.
                        Such memmap=exactmap lines can be constructed based on
                                 or
                                 memmap=0x10000$0x18690000
  
-       memtest=        [KNL,X86_64] Enable memtest
+       memory_corruption_check=0/1 [X86]
+                       Some BIOSes seem to corrupt the first 64k of
+                       memory when doing things like suspend/resume.
+                       Setting this option will scan the memory
+                       looking for corruption.  Enabling this will
+                       both detect corruption and prevent the kernel
+                       from using the memory being corrupted.
+                       However, its intended as a diagnostic tool; if
+                       repeatable BIOS-originated corruption always
+                       affects the same memory, you can use memmap=
+                       to prevent the kernel from using that memory.
+       memory_corruption_check_size=size [X86]
+                       By default it checks for corruption in the low
+                       64k, making this memory unavailable for normal
+                       use.  Use this parameter to scan for
+                       corruption in more or less memory.
+       memory_corruption_check_period=seconds [X86]
+                       By default it checks for corruption every 60
+                       seconds.  Use this parameter to check at some
+                       other rate.  0 disables periodic checking.
+       memtest=        [KNL,X86] Enable memtest
                        Format: <integer>
                        range: 0,4 : pattern number
                        default : 0 <disable>
  
        mga=            [HW,DRM]
  
+       mminit_loglevel=
+                       [KNL] When CONFIG_DEBUG_MEMORY_INIT is set, this
+                       parameter allows control of the logging verbosity for
+                       the additional memory initialisation checks. A value
+                       of 0 disables mminit logging and a level of 4 will
+                       log everything. Information is printed at KERN_DEBUG
+                       so loglevel=8 may also need to be specified.
        mousedev.tap_time=
                        [MOUSE] Maximum time between finger touching and
                        leaving touchpad surface for touch to be considered
                        This usage is only documented in each driver source
                        file if at all.
  
+       nf_conntrack.acct=
+                       [NETFILTER] Enable connection tracking flow accounting
+                       0 to disable accounting
+                       1 to enable accounting
+                       Default value depends on CONFIG_NF_CT_ACCT that is
+                       going to be removed in 2.6.29.
        nfsaddrs=       [NFS]
                        See Documentation/filesystems/nfsroot.txt.
  
  
        nodisconnect    [HW,SCSI,M68K] Disables SCSI disconnects.
  
+       nodsp           [SH] Disable hardware DSP at boot time.
        noefi           [X86-32,X86-64] Disable EFI runtime services support.
  
        noexec          [IA-64]
                        noexec32=off: disable non-executable mappings
                                read implies executable mappings
  
+       nofpu           [SH] Disable hardware FPU at boot time.
        nofxsr          [BUGS=X86-32] Disables x86 floating point extended
                        register save and restore. The kernel will only save
                        legacy floating-point registers on task switch.
  
        noclflush       [BUGS=X86] Don't use the CLFLUSH instruction
  
-       nohlt           [BUGS=ARM]
+       nohlt           [BUGS=ARM,SH]
  
        no-hlt          [BUGS=X86-32] Tells the kernel that the hlt
                        instruction doesn't work correctly and not to
  
        nolapic_timer   [X86-32,APIC] Do not use the local APIC timer.
  
+       nox2apic        [X86-64,APIC] Do not enable x2APIC mode.
+       x2apic_phys     [X86-64,APIC] Use x2apic physical mode instead of
+                       default x2apic cluster mode on platforms
+                       supporting x2apic.
        noltlbs         [PPC] Do not use large page/tlb entries for kernel
                        lowmem mapping on PPC40x.
  
                        See also Documentation/paride.txt.
  
        pci=option[,option...]  [PCI] various PCI subsystem options:
-               off             [X86-32] don't probe for the PCI bus
+               off             [X86] don't probe for the PCI bus
                bios            [X86-32] force use of PCI BIOS, don't access
                                the hardware directly. Use this if your machine
                                has a non-standard PCI host bridge.
                                hardware access methods are allowed. Use this
                                if you experience crashes upon bootup and you
                                suspect they are caused by the BIOS.
-               conf1           [X86-32] Force use of PCI Configuration
+               conf1           [X86] Force use of PCI Configuration
                                Mechanism 1.
-               conf2           [X86-32] Force use of PCI Configuration
+               conf2           [X86] Force use of PCI Configuration
                                Mechanism 2.
                noaer           [PCIE] If the PCIEAER kernel config parameter is
                                enabled, this kernel boot option can be used to
                nomsi           [MSI] If the PCI_MSI kernel config parameter is
                                enabled, this kernel boot option can be used to
                                disable the use of MSI interrupts system-wide.
 +              noioapicquirk   [APIC] Disable all boot interrupt quirks.
 +                              Safety option to keep boot IRQs enabled. This
 +                              should never be necessary.
 +              ioapicreroute   [APIC] Enable rerouting of boot IRQs to the
 +                              primary IO-APIC for bridges that cannot disable
 +                              boot IRQs. This fixes a source of spurious IRQs
 +                              when the system masks IRQs.
 +              noioapicreroute [APIC] Disable workaround that uses the
 +                              boot IRQ equivalent of an IRQ that connects to
 +                              a chipset where boot IRQs cannot be disabled.
 +                              The opposite of ioapicreroute.
                biosirq         [X86-32] Use PCI BIOS calls to get the interrupt
                                routing table. These calls are known to be buggy
                                on several machines and they hang the machine
                                this option if the kernel is unable to allocate
                                IRQs or discover secondary PCI buses on your
                                motherboard.
-               rom             [X86-32] Assign address space to expansion ROMs.
+               rom             [X86] Assign address space to expansion ROMs.
                                Use with caution as certain devices share
                                address decoders between ROMs and other
                                resources.
-               norom           [X86-32,X86_64] Do not assign address space to
+               norom           [X86] Do not assign address space to
                                expansion ROMs that do not already have
                                BIOS assigned address ranges.
-               irqmask=0xMMMM  [X86-32] Set a bit mask of IRQs allowed to be
+               irqmask=0xMMMM  [X86] Set a bit mask of IRQs allowed to be
                                assigned automatically to PCI devices. You can
                                make the kernel exclude IRQs of your ISA cards
                                this way.
-               pirqaddr=0xAAAAA        [X86-32] Specify the physical address
+               pirqaddr=0xAAAAA        [X86] Specify the physical address
                                of the PIRQ table (normally generated
                                by the BIOS) if it is outside the
                                F0000h-100000h range.
-               lastbus=N       [X86-32] Scan all buses thru bus #N. Can be
+               lastbus=N       [X86] Scan all buses thru bus #N. Can be
                                useful if the kernel is unable to find your
                                secondary buses and you want to tell it
                                explicitly which ones they are.
-               assign-busses   [X86-32] Always assign all PCI bus
+               assign-busses   [X86] Always assign all PCI bus
                                numbers ourselves, overriding
                                whatever the firmware may have done.
-               usepirqmask     [X86-32] Honor the possible IRQ mask stored
+               usepirqmask     [X86] Honor the possible IRQ mask stored
                                in the BIOS $PIR table. This is needed on
                                some systems with broken BIOSes, notably
                                some HP Pavilion N5400 and Omnibook XE3
                                notebooks. This will have no effect if ACPI
                                IRQ routing is enabled.
-               noacpi          [X86-32] Do not use ACPI for IRQ routing
+               noacpi          [X86] Do not use ACPI for IRQ routing
                                or for PCI scanning.
-               use_crs         [X86-32] Use _CRS for PCI resource
+               use_crs         [X86] Use _CRS for PCI resource
                                allocation.
                routeirq        Do IRQ routing for all PCI devices.
                                This is normally done in pci_enable_device(),
                                reserved for the CardBus bridge's memory
                                window. The default value is 64 megabytes.
  
+       pcie_aspm=      [PCIE] Forcibly enable or disable PCIe Active State Power
+                       Management.
+               off     Disable ASPM.
+               force   Enable ASPM even on devices that claim not to support it.
+                       WARNING: Forcing ASPM on may cause system lockups.
        pcmv=           [HW,PCMCIA] BadgePAD 4
  
        pd.             [PARIDE]
                        Override pmtimer IOPort with a hex value.
                        e.g. pmtmr=0x508
  
+       pnp.debug       [PNP]
+                       Enable PNP debug messages.  This depends on the
+                       CONFIG_PNP_DEBUG_MESSAGES option.
        pnpacpi=        [ACPI]
                        { off }
  
                        autoconfiguration.
                        Ranges are in pairs (memory base and size).
  
+       dynamic_printk
+                       Enables pr_debug()/dev_dbg() calls if
+                       CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. These can also
+                       be switched on/off via <debugfs>/dynamic_printk/modules
        print-fatal-signals=
                        [KNL] debug: print fatal signals
                        print-fatal-signals=1: print segfault info to
        shapers=        [NET]
                        Maximal number of shapers.
  
+       show_msr=       [x86] show boot-time MSR settings
+                       Format: { <integer> }
+                       Show boot-time (BIOS-initialized) MSR settings.
+                       The parameter means the number of CPUs to show,
+                       for example 1 means boot CPU only.
        sim710=         [SCSI,HW]
                        See header of drivers/scsi/sim710.c.
  
  
        snd-ymfpci=     [HW,ALSA]
  
+       softlockup_panic=
+                       [KNL] Should the soft-lockup detector generate panics.
        sonypi.*=       [HW] Sony Programmable I/O Control Device driver
                        See Documentation/sonypi.txt
  
  
        tdfx=           [HW,DRM]
  
+       test_suspend=   [SUSPEND]
+                       Specify "mem" (for Suspend-to-RAM) or "standby" (for
+                       standby suspend) as the system sleep state to briefly
+                       enter during system startup.  The system is woken from
+                       this state using a wakeup-capable RTC alarm.
        thash_entries=  [KNL,NET]
                        Set number of hash buckets for TCP connection
  
  
        thermal.crt=    [HW,ACPI]
                        -1: disable all critical trip points in all thermal zones
-                       <degrees C>: lower all critical trip points
+                       <degrees C>: override all critical trip points
  
        thermal.nocrt=  [HW,ACPI]
                        Set to disable actions on ACPI thermal zone
                        <deci-seconds>: poll all this frequency
                        0: no polling (default)
  
-       tipar.timeout=  [HW,PPT]
-                       Set communications timeout in tenths of a second
-                       (default 15).
-       tipar.delay=    [HW,PPT]
-                       Set inter-bit delay in microseconds (default 10).
        tmscsim=        [HW,SCSI]
                        See comment before function dc390_setup() in
                        drivers/scsi/tmscsim.c.
                        Note that genuine overcurrent events won't be
                        reported either.
  
+       unknown_nmi_panic
+                       [X86-32,X86-64]
+                       Set unknown_nmi_panic=1 early on boot.
        usbcore.autosuspend=
                        [USB] The autosuspend time delay (in seconds) used
                        for newly-detected USB devices (default 2).  This
                        autosuspended.  Devices for which the delay is set
                        to a negative value won't be autosuspended at all.
  
+       usbcore.usbfs_snoop=
+                       [USB] Set to log all usbfs traffic (default 0 = off).
+       usbcore.blinkenlights=
+                       [USB] Set to cycle leds on hubs (default 0 = off).
+       usbcore.old_scheme_first=
+                       [USB] Start with the old device initialization
+                       scheme (default 0 = off).
+       usbcore.use_both_schemes=
+                       [USB] Try the other device initialization scheme
+                       if the first one fails (default 1 = enabled).
+       usbcore.initial_descriptor_timeout=
+                       [USB] Specifies timeout for the initial 64-byte
+                         USB_REQ_GET_DESCRIPTOR request in milliseconds
+                       (default 5000 = 5.0 seconds).
        usbhid.mousepoll=
                        [USBHID] The interval which mice are to be polled at.
  
diff --combined arch/x86/Kconfig
index 09521332636b1e1d98f47dac146d3a7539854851,350bee1d54dc2ae41851f503d9ef7705a0e93e31..f4ed47db79ee9f5f8c206c4758770fc9127df9fd
@@@ -18,25 -18,28 +18,28 @@@ config X86_6
  ### Arch settings
  config X86
        def_bool y
+       select HAVE_AOUT if X86_32
        select HAVE_UNSTABLE_SCHED_CLOCK
        select HAVE_IDE
        select HAVE_OPROFILE
+       select HAVE_IOREMAP_PROT
        select HAVE_KPROBES
+       select ARCH_WANT_OPTIONAL_GPIOLIB
        select HAVE_KRETPROBES
+       select HAVE_FTRACE_MCOUNT_RECORD
        select HAVE_DYNAMIC_FTRACE
        select HAVE_FTRACE
        select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64)
        select HAVE_ARCH_KGDB if !X86_VOYAGER
+       select HAVE_ARCH_TRACEHOOK
+       select HAVE_GENERIC_DMA_COHERENT if X86_32
+       select HAVE_EFFICIENT_UNALIGNED_ACCESS
  
  config ARCH_DEFCONFIG
        string
        default "arch/x86/configs/i386_defconfig" if X86_32
        default "arch/x86/configs/x86_64_defconfig" if X86_64
  
- config GENERIC_LOCKBREAK
-       def_bool n
  config GENERIC_TIME
        def_bool y
  
@@@ -89,7 -92,7 +92,7 @@@ config GENERIC_HWEIGH
        def_bool y
  
  config GENERIC_GPIO
-       def_bool n
+       bool
  
  config ARCH_MAY_HAVE_PC_FDC
        def_bool y
@@@ -100,12 -103,6 +103,6 @@@ config RWSEM_GENERIC_SPINLOC
  config RWSEM_XCHGADD_ALGORITHM
        def_bool X86_XADD
  
- config ARCH_HAS_ILOG2_U32
-       def_bool n
- config ARCH_HAS_ILOG2_U64
-       def_bool n
  config ARCH_HAS_CPU_IDLE_WAIT
        def_bool y
  
@@@ -119,6 -116,9 +116,9 @@@ config GENERIC_TIME_VSYSCAL
  config ARCH_HAS_CPU_RELAX
        def_bool y
  
+ config ARCH_HAS_DEFAULT_IDLE
+       def_bool y
  config ARCH_HAS_CACHE_LINE_SIZE
        def_bool y
  
@@@ -147,9 -147,6 +147,6 @@@ config AUDIT_ARC
        bool
        default X86_64
  
- config ARCH_SUPPORTS_AOUT
-       def_bool y
  config ARCH_SUPPORTS_OPTIMIZED_INLINING
        def_bool y
  
@@@ -200,6 -197,7 +197,7 @@@ config X86_TRAMPOLIN
  config KTIME_SCALAR
        def_bool X86_32
  source "init/Kconfig"
+ source "kernel/Kconfig.freezer"
  
  menu "Processor type and features"
  
@@@ -329,20 -327,6 +327,6 @@@ config X86_BIGSM
  
  endif
  
- config X86_RDC321X
-       bool "RDC R-321x SoC"
-       depends on X86_32
-       select M486
-       select X86_REBOOTFIXUPS
-       select GENERIC_GPIO
-       select LEDS_CLASS
-       select LEDS_GPIO
-       select NEW_LEDS
-       help
-         This option is needed for RDC R-321x system-on-chip, also known
-         as R-8610-(G).
-         If you don't have one of these chips, you should say N here.
  config X86_VSMP
        bool "Support for ScaleMP vSMP"
        select PARAVIRT
@@@ -366,6 -350,16 +350,16 @@@ config X86_VISW
          A kernel compiled for the Visual Workstation will run on general
          PCs as well. See <file:Documentation/sgi-visws.txt> for details.
  
+ config X86_RDC321X
+       bool "RDC R-321x SoC"
+       depends on X86_32
+       select M486
+       select X86_REBOOTFIXUPS
+       help
+         This option is needed for RDC R-321x system-on-chip, also known
+         as R-8610-(G).
+         If you don't have one of these chips, you should say N here.
  config SCHED_NO_NO_OMIT_FRAME_POINTER
        def_bool y
        prompt "Single-depth WCHAN output"
@@@ -447,7 -441,6 +441,6 @@@ config PARAVIRT_DEBU
  
  config MEMTEST
        bool "Memtest"
-       depends on X86_64
        help
          This option adds a kernel parameter 'memtest', which allows memtest
          to be set.
@@@ -554,6 -547,7 +547,7 @@@ config CALGARY_IOMMU_ENABLED_BY_DEFAUL
  config AMD_IOMMU
        bool "AMD IOMMU support"
        select SWIOTLB
+       select PCI_MSI
        depends on X86_64 && PCI && ACPI
        help
          With this option you can enable support for AMD IOMMU hardware in
@@@ -578,35 -572,29 +572,29 @@@ config SWIOTL
  
  config IOMMU_HELPER
        def_bool (CALGARY_IOMMU || GART_IOMMU || SWIOTLB || AMD_IOMMU)
  config MAXSMP
        bool "Configure Maximum number of SMP Processors and NUMA Nodes"
-       depends on X86_64 && SMP
+       depends on X86_64 && SMP && BROKEN
        default n
        help
          Configure maximum number of CPUS and NUMA Nodes for this architecture.
          If unsure, say N.
  
- if MAXSMP
- config NR_CPUS
-       int
-       default "4096"
- endif
- if !MAXSMP
  config NR_CPUS
-       int "Maximum number of CPUs (2-4096)"
-       range 2 4096
+       int "Maximum number of CPUs (2-512)" if !MAXSMP
+       range 2 512
        depends on SMP
+       default "4096" if MAXSMP
        default "32" if X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000
        default "8"
        help
          This allows you to specify the maximum number of CPUs which this
-         kernel will support.  The maximum supported value is 4096 and the
+         kernel will support.  The maximum supported value is 512 and the
          minimum value which makes sense is 2.
  
          This is purely to save memory - each supported CPU adds
          approximately eight kilobytes to the kernel image.
- endif
  
  config SCHED_SMT
        bool "SMT (Hyperthreading) scheduler support"
@@@ -665,30 -653,6 +653,30 @@@ config X86_VISWS_API
        def_bool y
        depends on X86_32 && X86_VISWS
  
 +config X86_REROUTE_FOR_BROKEN_BOOT_IRQS
 +      bool "Reroute for broken boot IRQs"
 +      default n
 +      depends on X86_IO_APIC
 +      help
 +        This option enables a workaround that fixes a source of
 +        spurious interrupts. This is recommended when threaded
 +        interrupt handling is used on systems where the generation of
 +        superfluous "boot interrupts" cannot be disabled.
 +
 +        Some chipsets generate a legacy INTx "boot IRQ" when the IRQ
 +        entry in the chipset's IO-APIC is masked (as, e.g. the RT
 +        kernel does during interrupt handling). On chipsets where this
 +        boot IRQ generation cannot be disabled, this workaround keeps
 +        the original IRQ line masked so that only the equivalent "boot
 +        IRQ" is delivered to the CPUs. The workaround also tells the
 +        kernel to set up the IRQ handler on the boot IRQ line. In this
 +        way only one interrupt is delivered to the kernel. Otherwise
 +        the spurious second interrupt may cause the kernel to bring
 +        down (vital) interrupt lines.
 +
 +        Only affects "broken" chipsets. Interrupt sharing may be
 +        increased on these systems.
 +
  config X86_MCE
        bool "Machine Check Exception"
        depends on !X86_VOYAGER
@@@ -789,9 -753,8 +777,8 @@@ config I8
          Say N otherwise.
  
  config X86_REBOOTFIXUPS
-       def_bool n
-       prompt "Enable X86 board specific fixups for reboot"
-       depends on X86_32 && X86
+       bool "Enable X86 board specific fixups for reboot"
+       depends on X86_32
        ---help---
          This enables chipset and/or board specific fixups to be done
          in order to get reboot to work correctly. This is only needed on
          Say N otherwise.
  
  config MICROCODE
-       tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support"
+       tristate "/dev/cpu/microcode - microcode support"
        select FW_LOADER
        ---help---
          If you say Y here, you will be able to update the microcode on
-         Intel processors in the IA32 family, e.g. Pentium Pro, Pentium II,
-         Pentium III, Pentium 4, Xeon etc.  You will obviously need the
-         actual microcode binary data itself which is not shipped with the
-         Linux kernel.
+         certain Intel and AMD processors. The Intel support is for the
+         IA32 family, e.g. Pentium Pro, Pentium II, Pentium III,
+         Pentium 4, Xeon etc. The AMD support is for family 0x10 and
+         0x11 processors, e.g. Opteron, Phenom and Turion 64 Ultra.
+         You will obviously need the actual microcode binary data itself
+         which is not shipped with the Linux kernel.
  
-         For latest news and information on obtaining all the required
-         ingredients for this driver, check:
-         <http://www.urbanmyth.org/microcode/>.
+         This option selects the general module only, you need to select
+         at least one vendor specific module as well.
  
          To compile this driver as a module, choose M here: the
          module will be called microcode.
  
- config MICROCODE_OLD_INTERFACE
+ config MICROCODE_INTEL
+        bool "Intel microcode patch loading support"
+        depends on MICROCODE
+        default MICROCODE
+        select FW_LOADER
+        --help---
+          This options enables microcode patch loading support for Intel
+          processors.
+          For latest news and information on obtaining all the required
+          Intel ingredients for this driver, check:
+          <http://www.urbanmyth.org/microcode/>.
+ config MICROCODE_AMD
+        bool "AMD microcode patch loading support"
+        depends on MICROCODE
+        select FW_LOADER
+        --help---
+          If you select this option, microcode patch loading support for AMD
+        processors will be enabled.
+    config MICROCODE_OLD_INTERFACE
        def_bool y
        depends on MICROCODE
  
@@@ -953,16 -938,17 +962,17 @@@ config HIGHME
        depends on X86_32 && (HIGHMEM64G || HIGHMEM4G)
  
  config X86_PAE
-       def_bool n
-       prompt "PAE (Physical Address Extension) Support"
+       bool "PAE (Physical Address Extension) Support"
        depends on X86_32 && !HIGHMEM4G
-       select RESOURCES_64BIT
        help
          PAE is required for NX support, and furthermore enables
          larger swapspace support for non-overcommit purposes. It
          has the cost of more pagetable lookup overhead, and also
          consumes more pagetable space per process.
  
+ config ARCH_PHYS_ADDR_T_64BIT
+        def_bool X86_64 || X86_PAE
  # Common NUMA Features
  config NUMA
        bool "Numa Memory Allocation and Scheduler Support (EXPERIMENTAL)"
          local memory controller of the CPU and add some more
          NUMA awareness to the kernel.
  
-         For i386 this is currently highly experimental and should be only
+         For 32-bit this is currently highly experimental and should be only
          used for kernel development. It might also cause boot failures.
-         For x86_64 this is recommended on all multiprocessor Opteron systems.
+         For 64-bit this is recommended on all multiprocessor Opteron systems.
          If the system is EM64T, you should say N unless your system is
          EM64T NUMA.
  
@@@ -1021,17 -1007,10 +1031,10 @@@ config NUMA_EM
          into virtual nodes when booted with "numa=fake=N", where N is the
          number of nodes. This is only useful for debugging.
  
- if MAXSMP
  config NODES_SHIFT
-       int
-       default "9"
- endif
- if !MAXSMP
- config NODES_SHIFT
-       int "Maximum NUMA Nodes (as a power of 2)"
+       int "Maximum NUMA Nodes (as a power of 2)" if !MAXSMP
        range 1 9   if X86_64
+       default "9" if MAXSMP
        default "6" if X86_64
        default "4" if X86_NUMAQ
        default "3"
        help
          Specify the maximum number of NUMA Nodes available on the target
          system.  Increases memory reserved to accomodate various tables.
- endif
  
  config HAVE_ARCH_BOOTMEM_NODE
        def_bool y
@@@ -1059,7 -1037,7 +1061,7 @@@ config HAVE_ARCH_ALLOC_REMA
  
  config ARCH_FLATMEM_ENABLE
        def_bool y
-       depends on X86_32 && ARCH_SELECT_MEMORY_MODEL && X86_PC && !NUMA
+       depends on X86_32 && ARCH_SELECT_MEMORY_MODEL && !NUMA
  
  config ARCH_DISCONTIGMEM_ENABLE
        def_bool y
@@@ -1075,7 -1053,7 +1077,7 @@@ config ARCH_SPARSEMEM_DEFAUL
  
  config ARCH_SPARSEMEM_ENABLE
        def_bool y
-       depends on X86_64 || NUMA || (EXPERIMENTAL && X86_PC)
+       depends on X86_64 || NUMA || (EXPERIMENTAL && X86_PC) || X86_GENERICARCH
        select SPARSEMEM_STATIC if X86_32
        select SPARSEMEM_VMEMMAP_ENABLE if X86_64
  
@@@ -1098,6 -1076,56 +1100,56 @@@ config HIGHPT
          low memory.  Setting this option will put user-space page table
          entries in high memory.
  
+ config X86_CHECK_BIOS_CORRUPTION
+         bool "Check for low memory corruption"
+       help
+        Periodically check for memory corruption in low memory, which
+        is suspected to be caused by BIOS.  Even when enabled in the
+        configuration, it is disabled at runtime.  Enable it by
+        setting "memory_corruption_check=1" on the kernel command
+        line.  By default it scans the low 64k of memory every 60
+        seconds; see the memory_corruption_check_size and
+        memory_corruption_check_period parameters in
+        Documentation/kernel-parameters.txt to adjust this.
+        When enabled with the default parameters, this option has
+        almost no overhead, as it reserves a relatively small amount
+        of memory and scans it infrequently.  It both detects corruption
+        and prevents it from affecting the running system.
+        It is, however, intended as a diagnostic tool; if repeatable
+        BIOS-originated corruption always affects the same memory,
+        you can use memmap= to prevent the kernel from using that
+        memory.
+ config X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK
+         bool "Set the default setting of memory_corruption_check"
+       depends on X86_CHECK_BIOS_CORRUPTION
+       default y
+       help
+        Set whether the default state of memory_corruption_check is
+        on or off.
+ config X86_RESERVE_LOW_64K
+         bool "Reserve low 64K of RAM on AMI/Phoenix BIOSen"
+       default y
+       help
+        Reserve the first 64K of physical RAM on BIOSes that are known
+        to potentially corrupt that memory range. A numbers of BIOSes are
+        known to utilize this area during suspend/resume, so it must not
+        be used by the kernel.
+        Set this to N if you are absolutely sure that you trust the BIOS
+        to get all its memory reservations and usages right.
+        If you have doubts about the BIOS (e.g. suspend/resume does not
+        work or there's kernel crashes after certain hardware hotplug
+        events) and it's not AMI or Phoenix, then you might want to enable
+        X86_CHECK_BIOS_CORRUPTION=y to allow the kernel to check typical
+        corruption patterns.
+        Say Y if unsure.
  config MATH_EMULATION
        bool
        prompt "Math emulation" if X86_32
@@@ -1156,10 -1184,10 +1208,10 @@@ config MTR
          You can safely say Y even if your machine doesn't have MTRRs, you'll
          just add about 9 KB to your kernel.
  
-         See <file:Documentation/mtrr.txt> for more information.
+         See <file:Documentation/x86/mtrr.txt> for more information.
  
  config MTRR_SANITIZER
-       bool
+       def_bool y
        prompt "MTRR cleanup support"
        depends on MTRR
        help
          The largest mtrr entry size for a continous block can be set with
          mtrr_chunk_size.
  
-         If unsure, say N.
+         If unsure, say Y.
  
  config MTRR_SANITIZER_ENABLE_DEFAULT
        int "MTRR cleanup enable value (0-1)"
@@@ -1205,8 -1233,7 +1257,7 @@@ config X86_PA
          If unsure, say Y.
  
  config EFI
-       def_bool n
-       prompt "EFI runtime service support"
+       bool "EFI runtime service support"
        depends on ACPI
        ---help---
        This enables the kernel to use EFI runtime services that are
        resultant kernel should continue to boot on existing non-EFI
        platforms.
  
- config IRQBALANCE
-       def_bool y
-       prompt "Enable kernel irq balancing"
-       depends on X86_32 && SMP && X86_IO_APIC
-       help
-         The default yes will allow the kernel to do irq load balancing.
-         Saying no will keep the kernel from doing irq load balancing.
  config SECCOMP
        def_bool y
        prompt "Enable seccomp to safely compute untrusted bytecode"
-       depends on PROC_FS
        help
          This kernel feature is useful for number crunching applications
          that may need to compute untrusted bytecode during their
          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 /proc/<pid>/seccomp, it cannot be disabled
+         enabled via prctl(PR_SET_SECCOMP), it cannot be disabled
          and the task is only allowed to execute a few safe syscalls
          defined by each seccomp mode.
  
@@@ -1288,7 -1306,7 +1330,7 @@@ config KEXE
          strongly in flux, so no good recommendation can be made.
  
  config CRASH_DUMP
-       bool "kernel crash dumps (EXPERIMENTAL)"
+       bool "kernel crash dumps"
        depends on X86_64 || (X86_32 && HIGHMEM)
        help
          Generate crash dump after being started by kexec.
          (CONFIG_RELOCATABLE=y).
          For more details see Documentation/kdump/kdump.txt
  
+ config KEXEC_JUMP
+       bool "kexec jump (EXPERIMENTAL)"
+       depends on EXPERIMENTAL
+       depends on KEXEC && HIBERNATION && X86_32
+       help
+         Jump between original kernel and kexeced kernel and invoke
+         code in physical address mode via KEXEC
  config PHYSICAL_START
        hex "Physical address where the kernel is loaded" if (EMBEDDED || CRASH_DUMP)
        default "0x1000000" if X86_NUMAQ
@@@ -1387,14 -1413,14 +1437,14 @@@ config PHYSICAL_ALIG
          Don't change this unless you know what you are doing.
  
  config HOTPLUG_CPU
-       bool "Support for suspend on SMP and hot-pluggable CPUs (EXPERIMENTAL)"
-       depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER
+       bool "Support for hot-pluggable CPUs"
+       depends on SMP && HOTPLUG && !X86_VOYAGER
        ---help---
-         Say Y here to experiment with turning CPUs off and on, and to
-         enable suspend on SMP systems. CPUs can be controlled through
-         /sys/devices/system/cpu.
-         Say N if you want to disable CPU hotplug and don't need to
-         suspend.
+         Say Y here to allow turning CPUs off and on. CPUs can be
+         controlled through /sys/devices/system/cpu.
+         ( Note: power management support will enable this option
+           automatically on SMP systems. )
+         Say N if you want to disable CPU hotplug.
  
  config COMPAT_VDSO
        def_bool y
  
          If unsure, say Y.
  
+ config CMDLINE_BOOL
+       bool "Built-in kernel command line"
+       default n
+       help
+         Allow for specifying boot arguments to the kernel at
+         build time.  On some systems (e.g. embedded ones), it is
+         necessary or convenient to provide some or all of the
+         kernel boot arguments with the kernel itself (that is,
+         to not rely on the boot loader to provide them.)
+         To compile command line arguments into the kernel,
+         set this option to 'Y', then fill in the
+         the boot arguments in CONFIG_CMDLINE.
+         Systems with fully functional boot loaders (i.e. non-embedded)
+         should leave this option set to 'N'.
+ config CMDLINE
+       string "Built-in kernel command string"
+       depends on CMDLINE_BOOL
+       default ""
+       help
+         Enter arguments here that should be compiled into the kernel
+         image and used at boot time.  If the boot loader provides a
+         command line at boot time, it is appended to this string to
+         form the full kernel command line, when the system boots.
+         However, you can use the CONFIG_CMDLINE_OVERRIDE option to
+         change this behavior.
+         In most cases, the command line (whether built-in or provided
+         by the boot loader) should specify the device for the root
+         file system.
+ config CMDLINE_OVERRIDE
+       bool "Built-in command line overrides boot loader arguments"
+       default n
+       depends on CMDLINE_BOOL
+       help
+         Set this option to 'Y' to have the kernel ignore the boot loader
+         command line, and use ONLY the built-in command line.
+         This is used to work around broken boot loaders.  This should
+         be set to 'N' under normal conditions.
  endmenu
  
  config ARCH_ENABLE_MEMORY_HOTPLUG
@@@ -1567,6 -1638,8 +1662,8 @@@ source "arch/x86/kernel/cpu/cpufreq/Kco
  
  source "drivers/cpuidle/Kconfig"
  
+ source "drivers/idle/Kconfig"
  endmenu
  
  
@@@ -1674,6 -1747,14 +1771,14 @@@ config DMAR_FLOPPY_W
         workaround will setup a 1:1 mapping for the first
         16M to make floppy (an ISA device) work.
  
+ config INTR_REMAP
+       bool "Support for Interrupt Remapping (EXPERIMENTAL)"
+       depends on X86_64 && X86_IO_APIC && PCI_MSI && ACPI && EXPERIMENTAL
+       help
+        Supports Interrupt remapping for IO-APIC and MSI devices.
+        To use x2apic mode in the CPU's which support x2APIC enhancements or
+        to support platforms with CPU's having > 8 bit APIC ID, say Y.
  source "drivers/pci/pcie/Kconfig"
  
  source "drivers/pci/Kconfig"
@@@ -1790,7 -1871,7 +1895,7 @@@ config IA32_EMULATIO
  
  config IA32_AOUT
         tristate "IA32 a.out support"
-        depends on IA32_EMULATION && ARCH_SUPPORTS_AOUT
+        depends on IA32_EMULATION
         help
           Support old a.out binaries in the 32bit emulation.
  
@@@ -1804,7 -1885,7 +1909,7 @@@ config COMPAT_FOR_U64_ALIGNMEN
  
  config SYSVIPC_COMPAT
        def_bool y
-       depends on X86_64 && COMPAT && SYSVIPC
+       depends on COMPAT && SYSVIPC
  
  endmenu
  
index 721605d8f116df1bd152c6b82f42e8586bb310e5,6afd9933a7dd96d96822a8ecb058cc2528ed09ac..e475e009ae5d4e60dc0e828ad96373ef91f2799a
@@@ -1,9 -1,10 +1,10 @@@
- #ifndef __ASM_IO_APIC_H
- #define __ASM_IO_APIC_H
+ #ifndef _ASM_X86_IO_APIC_H
+ #define _ASM_X86_IO_APIC_H
  
  #include <linux/types.h>
  #include <asm/mpspec.h>
  #include <asm/apicdef.h>
+ #include <asm/irq_vectors.h>
  
  /*
   * Intel IO-APIC support for SMP and UP systems.
@@@ -87,24 -88,22 +88,22 @@@ struct IO_APIC_route_entry 
                mask            :  1,   /* 0: enabled, 1: disabled */
                __reserved_2    : 15;
  
- #ifdef CONFIG_X86_32
-       union {
-               struct {
-                       __u32   __reserved_1    : 24,
-                               physical_dest   :  4,
-                               __reserved_2    :  4;
-               } physical;
-               struct {
-                       __u32   __reserved_1    : 24,
-                               logical_dest    :  8;
-               } logical;
-       } dest;
- #else
        __u32   __reserved_3    : 24,
                dest            :  8;
- #endif
+ } __attribute__ ((packed));
  
+ struct IR_IO_APIC_route_entry {
+       __u64   vector          : 8,
+               zero            : 3,
+               index2          : 1,
+               delivery_status : 1,
+               polarity        : 1,
+               irr             : 1,
+               trigger         : 1,
+               mask            : 1,
+               reserved        : 31,
+               format          : 1,
+               index           : 15;
  } __attribute__ ((packed));
  
  #ifdef CONFIG_X86_IO_APIC
@@@ -157,21 -156,11 +156,21 @@@ extern int sis_apic_bug
  /* 1 if "noapic" boot option passed */
  extern int skip_ioapic_setup;
  
 +/* 1 if "noapic" boot option passed */
 +extern int noioapicquirk;
 +
 +/* -1 if "noapic" boot option passed */
 +extern int noioapicreroute;
 +
  /* 1 if the timer IRQ uses the '8259A Virtual Wire' mode */
  extern int timer_through_8259;
  
  static inline void disable_ioapic_setup(void)
  {
 +#ifdef CONFIG_PCI
 +      noioapicquirk = 1;
 +      noioapicreroute = -1;
 +#endif
        skip_ioapic_setup = 1;
  }
  
@@@ -193,10 -182,23 +192,23 @@@ extern int io_apic_set_pci_routing(int 
  extern int (*ioapic_renumber_irq)(int ioapic, int irq);
  extern void ioapic_init_mappings(void);
  
+ #ifdef CONFIG_X86_64
+ extern int save_mask_IO_APIC_setup(void);
+ extern void restore_IO_APIC_setup(void);
+ extern void reinit_intr_remapped_IO_APIC(int);
+ #endif
+ extern int probe_nr_irqs(void);
  #else  /* !CONFIG_X86_IO_APIC */
  #define io_apic_assign_pci_irqs 0
  static const int timer_through_8259 = 0;
  static inline void ioapic_init_mappings(void) { }
- #endif
  
+ static inline int probe_nr_irqs(void)
+ {
+       return NR_IRQS;
+ }
  #endif
+ #endif /* _ASM_X86_IO_APIC_H */
index 0000000000000000000000000000000000000000,875b38edf19383f0e1176b9a73dede0f49f42c38..647781298e7ef7cbc98b14ad75f2552b0092507f
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,114 +1,116 @@@
+ #ifndef _ASM_X86_PCI_H
+ #define _ASM_X86_PCI_H
+ #include <linux/mm.h> /* for struct page */
+ #include <linux/types.h>
+ #include <linux/slab.h>
+ #include <linux/string.h>
+ #include <asm/scatterlist.h>
+ #include <asm/io.h>
+ #ifdef __KERNEL__
+ struct pci_sysdata {
+       int             domain;         /* PCI domain */
+       int             node;           /* NUMA node */
+ #ifdef CONFIG_X86_64
+       void            *iommu;         /* IOMMU private data */
+ #endif
+ };
+ extern int pci_routeirq;
++extern int noioapicquirk;
++extern int noioapicreroute;
+ /* scan a bus after allocating a pci_sysdata for it */
+ extern struct pci_bus *pci_scan_bus_on_node(int busno, struct pci_ops *ops,
+                                           int node);
+ extern struct pci_bus *pci_scan_bus_with_sysdata(int busno);
+ static inline int pci_domain_nr(struct pci_bus *bus)
+ {
+       struct pci_sysdata *sd = bus->sysdata;
+       return sd->domain;
+ }
+ static inline int pci_proc_domain(struct pci_bus *bus)
+ {
+       return pci_domain_nr(bus);
+ }
+ /* Can be used to override the logic in pci_scan_bus for skipping
+    already-configured bus numbers - to be used for buggy BIOSes
+    or architectures with incomplete PCI setup by the loader */
+ #ifdef CONFIG_PCI
+ extern unsigned int pcibios_assign_all_busses(void);
+ #else
+ #define pcibios_assign_all_busses()   0
+ #endif
+ #define pcibios_scan_all_fns(a, b)    0
+ extern unsigned long pci_mem_start;
+ #define PCIBIOS_MIN_IO                0x1000
+ #define PCIBIOS_MIN_MEM               (pci_mem_start)
+ #define PCIBIOS_MIN_CARDBUS_IO        0x4000
+ void pcibios_config_init(void);
+ struct pci_bus *pcibios_scan_root(int bus);
+ void pcibios_set_master(struct pci_dev *dev);
+ void pcibios_penalize_isa_irq(int irq, int active);
+ struct irq_routing_table *pcibios_get_irq_routing_table(void);
+ int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
+ #define HAVE_PCI_MMAP
+ extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
+                              enum pci_mmap_state mmap_state,
+                              int write_combine);
+ #ifdef CONFIG_PCI
+ extern void early_quirks(void);
+ static inline void pci_dma_burst_advice(struct pci_dev *pdev,
+                                       enum pci_dma_burst_strategy *strat,
+                                       unsigned long *strategy_parameter)
+ {
+       *strat = PCI_DMA_BURST_INFINITY;
+       *strategy_parameter = ~0UL;
+ }
+ #else
+ static inline void early_quirks(void) { }
+ #endif
+ #endif  /* __KERNEL__ */
+ #ifdef CONFIG_X86_32
+ # include "pci_32.h"
+ #else
+ # include "pci_64.h"
+ #endif
+ /* implement the pci_ DMA API in terms of the generic device dma_ one */
+ #include <asm-generic/pci-dma-compat.h>
+ /* generic pci stuff */
+ #include <asm-generic/pci.h>
+ #ifdef CONFIG_NUMA
+ /* Returns the node based on pci bus */
+ static inline int __pcibus_to_node(struct pci_bus *bus)
+ {
+       struct pci_sysdata *sd = bus->sysdata;
+       return sd->node;
+ }
+ static inline cpumask_t __pcibus_to_cpumask(struct pci_bus *bus)
+ {
+       return node_to_cpumask(__pcibus_to_node(bus));
+ }
+ #endif
+ #endif /* _ASM_X86_PCI_H */
diff --combined drivers/pci/quirks.c
index c880dd0bbfb5f51169562970e3c814b4e87f00ea,96cf8ecd04ce7b40ea60fc9e1a077607a8c46d77..0b60ed884d984bbe2bcc3bc46b8570be47c820c3
  #include <linux/kallsyms.h>
  #include "pci.h"
  
+ int isa_dma_bridge_buggy;
+ EXPORT_SYMBOL(isa_dma_bridge_buggy);
+ int pci_pci_problems;
+ EXPORT_SYMBOL(pci_pci_problems);
+ int pcie_mch_quirk;
+ EXPORT_SYMBOL(pcie_mch_quirk);
+ #ifdef CONFIG_PCI_QUIRKS
  /* The Mellanox Tavor device gives false positive parity errors
   * Mark this device with a broken_parity_status, to allow
   * PCI scanning code to "skip" this now blacklisted device.
@@@ -35,6 -43,20 +43,20 @@@ static void __devinit quirk_mellanox_ta
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MELLANOX,PCI_DEVICE_ID_MELLANOX_TAVOR,quirk_mellanox_tavor);
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MELLANOX,PCI_DEVICE_ID_MELLANOX_TAVOR_BRIDGE,quirk_mellanox_tavor);
  
+ /* Many VIA bridges seem to corrupt data for DAC. Disable it here */
+ int forbid_dac __read_mostly;
+ EXPORT_SYMBOL(forbid_dac);
+ static __devinit void via_no_dac(struct pci_dev *dev)
+ {
+       if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && forbid_dac == 0) {
+               dev_info(&dev->dev,
+                       "VIA PCI bridge detected. Disabling DAC.\n");
+               forbid_dac = 1;
+       }
+ }
+ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_ANY_ID, via_no_dac);
  /* Deal with broken BIOS'es that neglect to enable passive release,
     which can cause problems in combination with the 82441FX/PPro MTRRs */
  static void quirk_passive_release(struct pci_dev *dev)
@@@ -62,8 -84,6 +84,6 @@@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_
      
      This appears to be BIOS not version dependent. So presumably there is a 
      chipset level fix */
- int isa_dma_bridge_buggy;
- EXPORT_SYMBOL(isa_dma_bridge_buggy);
      
  static void __devinit quirk_isa_dma_hangs(struct pci_dev *dev)
  {
@@@ -84,9 -104,6 +104,6 @@@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_N
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC,    PCI_DEVICE_ID_NEC_CBUS_2,       quirk_isa_dma_hangs);
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC,    PCI_DEVICE_ID_NEC_CBUS_3,       quirk_isa_dma_hangs);
  
- int pci_pci_problems;
- EXPORT_SYMBOL(pci_pci_problems);
  /*
   *    Chipsets where PCI->PCI transfers vanish or hang
   */
@@@ -602,6 -619,27 +619,6 @@@ static void __init quirk_ioapic_rmw(str
                sis_apic_bug = 1;
  }
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI,     PCI_ANY_ID,                     quirk_ioapic_rmw);
 -
 -#define AMD8131_revA0        0x01
 -#define AMD8131_revB0        0x11
 -#define AMD8131_MISC         0x40
 -#define AMD8131_NIOAMODE_BIT 0
 -static void quirk_amd_8131_ioapic(struct pci_dev *dev)
 -{ 
 -        unsigned char tmp;
 -        
 -        if (nr_ioapics == 0) 
 -                return;
 -
 -        if (dev->revision == AMD8131_revA0 || dev->revision == AMD8131_revB0) {
 -                dev_info(&dev->dev, "Fixing up AMD8131 IOAPIC mode\n");
 -                pci_read_config_byte( dev, AMD8131_MISC, &tmp);
 -                tmp &= ~(1 << AMD8131_NIOAMODE_BIT);
 -                pci_write_config_byte( dev, AMD8131_MISC, tmp);
 -        }
 -} 
 -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_ioapic);
 -DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_ioapic);
  #endif /* CONFIG_X86_IO_APIC */
  
  /*
@@@ -902,6 -940,19 +919,19 @@@ static void __init quirk_ide_samemode(s
  }
  DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10, quirk_ide_samemode);
  
+ /*
+  * Some ATA devices break if put into D3
+  */
+ static void __devinit quirk_no_ata_d3(struct pci_dev *pdev)
+ {
+       /* Quirk the legacy ATA devices only. The AHCI ones are ok */
+       if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE)
+               pdev->dev_flags |= PCI_DEV_FLAGS_NO_D3;
+ }
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, PCI_ANY_ID, quirk_no_ata_d3);
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_ATI, PCI_ANY_ID, quirk_no_ata_d3);
  /* This was originally an Alpha specific thing, but it really fits here.
   * The i82375 PCI/EISA bridge appears as non-classified. Fix that.
   */
@@@ -1328,9 -1379,6 +1358,6 @@@ static void __init quirk_alder_ioapic(s
  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC,      quirk_alder_ioapic);
  #endif
  
- int pcie_mch_quirk;
- EXPORT_SYMBOL(pcie_mch_quirk);
  static void __devinit quirk_pcie_mch(struct pci_dev *pdev)
  {
        pcie_mch_quirk = 1;
@@@ -1388,155 -1436,6 +1415,155 @@@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_I
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,  0x260a, quirk_intel_pcie_pm);
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,  0x260b, quirk_intel_pcie_pm);
  
 +#ifdef CONFIG_X86_IO_APIC
 +/*
 + * Boot interrupts on some chipsets cannot be turned off. For these chipsets,
 + * remap the original interrupt in the linux kernel to the boot interrupt, so
 + * that a PCI device's interrupt handler is installed on the boot interrupt
 + * line instead.
 + */
 +static void quirk_reroute_to_boot_interrupts_intel(struct pci_dev *dev)
 +{
 +      if (noioapicquirk || noioapicreroute)
 +              return;
 +
 +      dev->irq_reroute_variant = INTEL_IRQ_REROUTE_VARIANT;
 +
 +      printk(KERN_INFO "PCI quirk: reroute interrupts for 0x%04x:0x%04x\n",
 +                      dev->vendor, dev->device);
 +      return;
 +}
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_80333_0,    quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_80333_1,    quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_ESB2_0,     quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_PXH_0,      quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_PXH_1,      quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_PXHV,       quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_80332_0,    quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,  PCI_DEVICE_ID_INTEL_80332_1,    quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80333_0,    quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80333_1,    quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_0,     quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_0,      quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1,      quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV,       quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80332_0,    quirk_reroute_to_boot_interrupts_intel);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80332_1,    quirk_reroute_to_boot_interrupts_intel);
 +
 +/*
 + * On some chipsets we can disable the generation of legacy INTx boot
 + * interrupts.
 + */
 +
 +/*
 + * IO-APIC1 on 6300ESB generates boot interrupts, see intel order no
 + * 300641-004US, section 5.7.3.
 + */
 +#define INTEL_6300_IOAPIC_ABAR                0x40
 +#define INTEL_6300_DISABLE_BOOT_IRQ   (1<<14)
 +
 +static void quirk_disable_intel_boot_interrupt(struct pci_dev *dev)
 +{
 +      u16 pci_config_word;
 +
 +      if (noioapicquirk)
 +              return;
 +
 +      pci_read_config_word(dev, INTEL_6300_IOAPIC_ABAR, &pci_config_word);
 +      pci_config_word |= INTEL_6300_DISABLE_BOOT_IRQ;
 +      pci_write_config_word(dev, INTEL_6300_IOAPIC_ABAR, pci_config_word);
 +
 +      printk(KERN_INFO "disabled boot interrupt on device 0x%04x:0x%04x\n",
 +              dev->vendor, dev->device);
 +}
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_ESB_10,    quirk_disable_intel_boot_interrupt);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_ESB_10,   quirk_disable_intel_boot_interrupt);
 +
 +/*
 + * disable boot interrupts on HT-1000
 + */
 +#define BC_HT1000_FEATURE_REG         0x64
 +#define BC_HT1000_PIC_REGS_ENABLE     (1<<0)
 +#define BC_HT1000_MAP_IDX             0xC00
 +#define BC_HT1000_MAP_DATA            0xC01
 +
 +static void quirk_disable_broadcom_boot_interrupt(struct pci_dev *dev)
 +{
 +      u32 pci_config_dword;
 +      u8 irq;
 +
 +      if (noioapicquirk)
 +              return;
 +
 +      pci_read_config_dword(dev, BC_HT1000_FEATURE_REG, &pci_config_dword);
 +      pci_write_config_dword(dev, BC_HT1000_FEATURE_REG, pci_config_dword |
 +                      BC_HT1000_PIC_REGS_ENABLE);
 +
 +      for (irq = 0x10; irq < 0x10 + 32; irq++) {
 +              outb(irq, BC_HT1000_MAP_IDX);
 +              outb(0x00, BC_HT1000_MAP_DATA);
 +      }
 +
 +      pci_write_config_dword(dev, BC_HT1000_FEATURE_REG, pci_config_dword);
 +
 +      printk(KERN_INFO "disabled boot interrupts on PCI device"
 +                      "0x%04x:0x%04x\n", dev->vendor, dev->device);
 +}
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS,   PCI_DEVICE_ID_SERVERWORKS_HT1000SB,      quirk_disable_broadcom_boot_interrupt);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_SERVERWORKS,   PCI_DEVICE_ID_SERVERWORKS_HT1000SB,     quirk_disable_broadcom_boot_interrupt);
 +
 +/*
 + * disable boot interrupts on AMD and ATI chipsets
 + */
 +/*
 + * NOIOAMODE needs to be disabled to disable "boot interrupts". For AMD 8131
 + * rev. A0 and B0, NOIOAMODE needs to be disabled anyway to fix IO-APIC mode
 + * (due to an erratum).
 + */
 +#define AMD_813X_MISC                 0x40
 +#define AMD_813X_NOIOAMODE            (1<<0)
 +
 +static void quirk_disable_amd_813x_boot_interrupt(struct pci_dev *dev)
 +{
 +      u32 pci_config_dword;
 +
 +      if (noioapicquirk)
 +              return;
 +
 +      pci_read_config_dword(dev, AMD_813X_MISC, &pci_config_dword);
 +      pci_config_dword &= ~AMD_813X_NOIOAMODE;
 +      pci_write_config_dword(dev, AMD_813X_MISC, pci_config_dword);
 +
 +      printk(KERN_INFO "disabled boot interrupts on PCI device "
 +                      "0x%04x:0x%04x\n", dev->vendor, dev->device);
 +}
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD,   PCI_DEVICE_ID_AMD_8131_BRIDGE,   quirk_disable_amd_813x_boot_interrupt);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD,   PCI_DEVICE_ID_AMD_8132_BRIDGE,  quirk_disable_amd_813x_boot_interrupt);
 +
 +#define AMD_8111_PCI_IRQ_ROUTING      0x56
 +
 +static void quirk_disable_amd_8111_boot_interrupt(struct pci_dev *dev)
 +{
 +      u16 pci_config_word;
 +
 +      if (noioapicquirk)
 +              return;
 +
 +      pci_read_config_word(dev, AMD_8111_PCI_IRQ_ROUTING, &pci_config_word);
 +      if (!pci_config_word) {
 +              printk(KERN_INFO "boot interrupts on PCI device 0x%04x:0x%04x "
 +                              "already disabled\n",
 +                              dev->vendor, dev->device);
 +              return;
 +      }
 +      pci_write_config_word(dev, AMD_8111_PCI_IRQ_ROUTING, 0);
 +      printk(KERN_INFO "disabled boot interrupts on PCI device "
 +                      "0x%04x:0x%04x\n", dev->vendor, dev->device);
 +}
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD,   PCI_DEVICE_ID_AMD_8111_SMBUS,    quirk_disable_amd_8111_boot_interrupt);
 +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD,   PCI_DEVICE_ID_AMD_8111_SMBUS,   quirk_disable_amd_8111_boot_interrupt);
 +#endif /* CONFIG_X86_IO_APIC */
 +
  /*
   * Toshiba TC86C001 IDE controller reports the standard 8-byte BAR0 size
   * but the PIO transfers won't work if BAR0 falls at the odd 8 bytes.
@@@ -1670,85 -1569,6 +1697,6 @@@ static void __devinit fixup_rev1_53c810
  }
  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, fixup_rev1_53c810);
  
- static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, struct pci_fixup *end)
- {
-       while (f < end) {
-               if ((f->vendor == dev->vendor || f->vendor == (u16) PCI_ANY_ID) &&
-                   (f->device == dev->device || f->device == (u16) PCI_ANY_ID)) {
- #ifdef DEBUG
-                       dev_dbg(&dev->dev, "calling ");
-                       print_fn_descriptor_symbol("%s\n", f->hook);
- #endif
-                       f->hook(dev);
-               }
-               f++;
-       }
- }
- extern struct pci_fixup __start_pci_fixups_early[];
- extern struct pci_fixup __end_pci_fixups_early[];
- extern struct pci_fixup __start_pci_fixups_header[];
- extern struct pci_fixup __end_pci_fixups_header[];
- extern struct pci_fixup __start_pci_fixups_final[];
- extern struct pci_fixup __end_pci_fixups_final[];
- extern struct pci_fixup __start_pci_fixups_enable[];
- extern struct pci_fixup __end_pci_fixups_enable[];
- extern struct pci_fixup __start_pci_fixups_resume[];
- extern struct pci_fixup __end_pci_fixups_resume[];
- extern struct pci_fixup __start_pci_fixups_resume_early[];
- extern struct pci_fixup __end_pci_fixups_resume_early[];
- extern struct pci_fixup __start_pci_fixups_suspend[];
- extern struct pci_fixup __end_pci_fixups_suspend[];
- void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev)
- {
-       struct pci_fixup *start, *end;
-       switch(pass) {
-       case pci_fixup_early:
-               start = __start_pci_fixups_early;
-               end = __end_pci_fixups_early;
-               break;
-       case pci_fixup_header:
-               start = __start_pci_fixups_header;
-               end = __end_pci_fixups_header;
-               break;
-       case pci_fixup_final:
-               start = __start_pci_fixups_final;
-               end = __end_pci_fixups_final;
-               break;
-       case pci_fixup_enable:
-               start = __start_pci_fixups_enable;
-               end = __end_pci_fixups_enable;
-               break;
-       case pci_fixup_resume:
-               start = __start_pci_fixups_resume;
-               end = __end_pci_fixups_resume;
-               break;
-       case pci_fixup_resume_early:
-               start = __start_pci_fixups_resume_early;
-               end = __end_pci_fixups_resume_early;
-               break;
-       case pci_fixup_suspend:
-               start = __start_pci_fixups_suspend;
-               end = __end_pci_fixups_suspend;
-               break;
-       default:
-               /* stupid compiler warning, you would think with an enum... */
-               return;
-       }
-       pci_do_fixups(dev, start, end);
- }
- EXPORT_SYMBOL(pci_fixup_device);
  /* Enable 1k I/O space granularity on the Intel P64H2 */
  static void __devinit quirk_p64h2_1k_io(struct pci_dev *dev)
  {
@@@ -1871,9 -1691,14 +1819,14 @@@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_V
   */
  static void __devinit quirk_brcm_570x_limit_vpd(struct pci_dev *dev)
  {
-       /*  Only disable the VPD capability for 5706, 5708, and 5709 rev. A */
+       /*
+        * Only disable the VPD capability for 5706, 5706S, 5708,
+        * 5708S and 5709 rev. A
+        */
        if ((dev->device == PCI_DEVICE_ID_NX2_5706) ||
+           (dev->device == PCI_DEVICE_ID_NX2_5706S) ||
            (dev->device == PCI_DEVICE_ID_NX2_5708) ||
+           (dev->device == PCI_DEVICE_ID_NX2_5708S) ||
            ((dev->device == PCI_DEVICE_ID_NX2_5709) &&
             (dev->revision & 0xf0) == 0x0)) {
                if (dev->vpd)
@@@ -2117,3 -1942,82 +2070,82 @@@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_A
                        quirk_msi_intx_disable_bug);
  
  #endif /* CONFIG_PCI_MSI */
+ static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, struct pci_fixup *end)
+ {
+       while (f < end) {
+               if ((f->vendor == dev->vendor || f->vendor == (u16) PCI_ANY_ID) &&
+                   (f->device == dev->device || f->device == (u16) PCI_ANY_ID)) {
+                       dev_dbg(&dev->dev, "calling %pF\n", f->hook);
+                       f->hook(dev);
+               }
+               f++;
+       }
+ }
+ extern struct pci_fixup __start_pci_fixups_early[];
+ extern struct pci_fixup __end_pci_fixups_early[];
+ extern struct pci_fixup __start_pci_fixups_header[];
+ extern struct pci_fixup __end_pci_fixups_header[];
+ extern struct pci_fixup __start_pci_fixups_final[];
+ extern struct pci_fixup __end_pci_fixups_final[];
+ extern struct pci_fixup __start_pci_fixups_enable[];
+ extern struct pci_fixup __end_pci_fixups_enable[];
+ extern struct pci_fixup __start_pci_fixups_resume[];
+ extern struct pci_fixup __end_pci_fixups_resume[];
+ extern struct pci_fixup __start_pci_fixups_resume_early[];
+ extern struct pci_fixup __end_pci_fixups_resume_early[];
+ extern struct pci_fixup __start_pci_fixups_suspend[];
+ extern struct pci_fixup __end_pci_fixups_suspend[];
+ void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev)
+ {
+       struct pci_fixup *start, *end;
+       switch(pass) {
+       case pci_fixup_early:
+               start = __start_pci_fixups_early;
+               end = __end_pci_fixups_early;
+               break;
+       case pci_fixup_header:
+               start = __start_pci_fixups_header;
+               end = __end_pci_fixups_header;
+               break;
+       case pci_fixup_final:
+               start = __start_pci_fixups_final;
+               end = __end_pci_fixups_final;
+               break;
+       case pci_fixup_enable:
+               start = __start_pci_fixups_enable;
+               end = __end_pci_fixups_enable;
+               break;
+       case pci_fixup_resume:
+               start = __start_pci_fixups_resume;
+               end = __end_pci_fixups_resume;
+               break;
+       case pci_fixup_resume_early:
+               start = __start_pci_fixups_resume_early;
+               end = __end_pci_fixups_resume_early;
+               break;
+       case pci_fixup_suspend:
+               start = __start_pci_fixups_suspend;
+               end = __end_pci_fixups_suspend;
+               break;
+       default:
+               /* stupid compiler warning, you would think with an enum... */
+               return;
+       }
+       pci_do_fixups(dev, start, end);
+ }
+ #else
+ void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev) {}
+ #endif
+ EXPORT_SYMBOL(pci_fixup_device);
diff --combined include/linux/pci.h
index cfc2297c3e2859b07046cedae14e287e0db3749f,c75b82bda327723998eb6c3148ac8c0b1a061a7d..9194adf82e2063eeb1d04cee920e54c2485f2679
@@@ -51,6 -51,7 +51,7 @@@
  #include <linux/kobject.h>
  #include <asm/atomic.h>
  #include <linux/device.h>
+ #include <linux/io.h>
  
  /* Include the ID list */
  #include <linux/pci_ids.h>
@@@ -64,6 -65,11 +65,11 @@@ struct pci_slot 
        struct kobject kobj;
  };
  
+ static inline const char *pci_slot_name(const struct pci_slot *slot)
+ {
+       return kobject_name(&slot->kobj);
+ }
  /* File state for mmap()s on /proc/bus/pci/X/Y */
  enum pci_mmap_state {
        pci_mmap_io,
@@@ -124,13 -130,10 +130,15 @@@ enum pci_dev_flags 
         * generation too.
         */
        PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) 1,
+       /* Device configuration is irrevocably lost if disabled into D3 */
+       PCI_DEV_FLAGS_NO_D3 = (__force pci_dev_flags_t) 2,
  };
  
 +enum pci_irq_reroute_variant {
 +      INTEL_IRQ_REROUTE_VARIANT = 1,
 +      MAX_IRQ_REROUTE_VARIANTS = 3
 +};
 +
  typedef unsigned short __bitwise pci_bus_flags_t;
  enum pci_bus_flags {
        PCI_BUS_FLAGS_NO_MSI   = (__force pci_bus_flags_t) 1,
@@@ -215,9 -218,9 +223,10 @@@ struct pci_dev 
        unsigned int    no_msi:1;       /* device may not use msi */
        unsigned int    block_ucfg_access:1;    /* userspace config space access is blocked */
        unsigned int    broken_parity_status:1; /* Device generates false positive parity */
 +      unsigned int    irq_reroute_variant:2;  /* device needs IRQ rerouting variant */
        unsigned int    msi_enabled:1;
        unsigned int    msix_enabled:1;
+       unsigned int    ari_enabled:1;  /* ARI forwarding */
        unsigned int    is_managed:1;
        unsigned int    is_pcie:1;
        pci_dev_flags_t dev_flags;
@@@ -351,7 -354,6 +360,6 @@@ struct pci_bus_region 
  struct pci_dynids {
        spinlock_t lock;            /* protects list, index */
        struct list_head list;      /* for IDs added at runtime */
-       unsigned int use_driver_data:1; /* pci_device_id->driver_data is used */
  };
  
  /* ---------------------------------------------------------------- */
@@@ -460,8 -462,8 +468,8 @@@ struct pci_driver 
  
  /**
   * PCI_VDEVICE - macro used to describe a specific pci device in short form
-  * @vend: the vendor name
-  * @dev: the 16 bit PCI Device ID
+  * @vendor: the vendor name
+  * @device: the 16 bit PCI Device ID
   *
   * This macro is used to create a struct pci_device_id that matches a
   * specific PCI device.  The subvendor, and subdevice fields will be set
@@@ -513,9 -515,10 +521,10 @@@ struct pci_bus *pci_create_bus(struct d
  struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
                                int busnr);
  struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr,
-                                const char *name);
+                                const char *name,
+                                struct hotplug_slot *hotplug);
  void pci_destroy_slot(struct pci_slot *slot);
- void pci_update_slot_number(struct pci_slot *slot, int slot_nr);
+ void pci_renumber_slot(struct pci_slot *slot, int slot_nr);
  int pci_scan_slot(struct pci_bus *bus, int devfn);
  struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn);
  void pci_device_add(struct pci_dev *dev, struct pci_bus *bus);
@@@ -538,11 -541,18 +547,18 @@@ extern void pci_sort_breadthfirst(void)
  #ifdef CONFIG_PCI_LEGACY
  struct pci_dev __deprecated *pci_find_device(unsigned int vendor,
                                             unsigned int device,
-                                            const struct pci_dev *from);
+                                            struct pci_dev *from);
  struct pci_dev __deprecated *pci_find_slot(unsigned int bus,
                                           unsigned int devfn);
  #endif /* CONFIG_PCI_LEGACY */
  
+ enum pci_lost_interrupt_reason {
+       PCI_LOST_IRQ_NO_INFORMATION = 0,
+       PCI_LOST_IRQ_DISABLE_MSI,
+       PCI_LOST_IRQ_DISABLE_MSIX,
+       PCI_LOST_IRQ_DISABLE_ACPI,
+ };
+ enum pci_lost_interrupt_reason pci_lost_interrupt(struct pci_dev *dev);
  int pci_find_capability(struct pci_dev *dev, int cap);
  int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap);
  int pci_find_ext_capability(struct pci_dev *dev, int cap);
@@@ -554,7 -564,7 +570,7 @@@ struct pci_dev *pci_get_device(unsigne
                                struct pci_dev *from);
  struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
                                unsigned int ss_vendor, unsigned int ss_device,
-                               const struct pci_dev *from);
+                               struct pci_dev *from);
  struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn);
  struct pci_dev *pci_get_bus_and_slot(unsigned int bus, unsigned int devfn);
  struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
@@@ -630,11 -640,15 +646,15 @@@ int pcix_get_mmrbc(struct pci_dev *dev)
  int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc);
  int pcie_get_readrq(struct pci_dev *dev);
  int pcie_set_readrq(struct pci_dev *dev, int rq);
+ int pci_reset_function(struct pci_dev *dev);
+ int pci_execute_reset_function(struct pci_dev *dev);
  void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno);
  int __must_check pci_assign_resource(struct pci_dev *dev, int i);
  int pci_select_bars(struct pci_dev *dev, unsigned long flags);
  
  /* ROM control related routines */
+ int pci_enable_rom(struct pci_dev *pdev);
+ void pci_disable_rom(struct pci_dev *pdev);
  void __iomem __must_check *pci_map_rom(struct pci_dev *pdev, size_t *size);
  void pci_unmap_rom(struct pci_dev *pdev, void __iomem *rom);
  size_t pci_get_rom_size(void __iomem *rom, size_t size);
@@@ -644,7 -658,11 +664,11 @@@ int pci_save_state(struct pci_dev *dev)
  int pci_restore_state(struct pci_dev *dev);
  int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
  pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
+ bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
+ void pci_pme_active(struct pci_dev *dev, bool enable);
  int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable);
+ int pci_wake_from_d3(struct pci_dev *dev, bool enable);
+ pci_power_t pci_target_state(struct pci_dev *dev);
  int pci_prepare_to_sleep(struct pci_dev *dev);
  int pci_back_from_sleep(struct pci_dev *dev);
  
@@@ -682,10 -700,12 +706,12 @@@ void pci_enable_bridges(struct pci_bus 
  /* Proper probing supporting hot-pluggable devices */
  int __must_check __pci_register_driver(struct pci_driver *, struct module *,
                                       const char *mod_name);
- static inline int __must_check pci_register_driver(struct pci_driver *driver)
- {
-       return __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME);
- }
+ /*
+  * pci_register_driver must be a macro so that KBUILD_MODNAME can be expanded
+  */
+ #define pci_register_driver(driver)           \
+       __pci_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
  
  void pci_unregister_driver(struct pci_driver *dev);
  void pci_remove_behind_bridge(struct pci_dev *dev);
@@@ -722,7 -742,7 +748,7 @@@ enum pci_dma_burst_strategy 
  };
  
  struct msix_entry {
-       u16     vector; /* kernel uses to write allocated vector */
+       u32     vector; /* kernel uses to write allocated vector */
        u16     entry;  /* driver uses to specify entry, OS writes */
  };
  
@@@ -815,7 -835,7 +841,7 @@@ _PCI_NOP_ALL(write,
  
  static inline struct pci_dev *pci_find_device(unsigned int vendor,
                                              unsigned int device,
-                                             const struct pci_dev *from)
+                                             struct pci_dev *from)
  {
        return NULL;
  }
@@@ -837,7 -857,7 +863,7 @@@ static inline struct pci_dev *pci_get_s
                                             unsigned int device,
                                             unsigned int ss_vendor,
                                             unsigned int ss_device,
-                                            const struct pci_dev *from)
+                                            struct pci_dev *from)
  {
        return NULL;
  }
@@@ -1115,5 -1135,20 +1141,20 @@@ static inline void pci_mmcfg_early_init
  static inline void pci_mmcfg_late_init(void) { }
  #endif
  
+ #ifdef CONFIG_HAS_IOMEM
+ static inline void * pci_ioremap_bar(struct pci_dev *pdev, int bar)
+ {
+       /*
+        * Make sure the BAR is actually a memory resource, not an IO resource
+        */
+       if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM)) {
+               WARN_ON(1);
+               return NULL;
+       }
+       return ioremap_nocache(pci_resource_start(pdev, bar),
+                                    pci_resource_len(pdev, bar));
+ }
+ #endif
  #endif /* __KERNEL__ */
  #endif /* LINUX_PCI_H */
diff --combined include/linux/pci_ids.h
index 2b3934c735b28e0e7738142d38b260deb3993325,1800f1d6e40dd1c22ff973e6f86f654ee27755f4..b6e6944542807e75d43d17b4d2e432c8f875b090
  #define PCI_DEVICE_ID_AMD_K8_NB_ADDRMAP       0x1101
  #define PCI_DEVICE_ID_AMD_K8_NB_MEMCTL        0x1102
  #define PCI_DEVICE_ID_AMD_K8_NB_MISC  0x1103
+ #define PCI_DEVICE_ID_AMD_10H_NB_HT   0x1200
+ #define PCI_DEVICE_ID_AMD_10H_NB_MAP  0x1201
+ #define PCI_DEVICE_ID_AMD_10H_NB_DRAM 0x1202
+ #define PCI_DEVICE_ID_AMD_10H_NB_MISC 0x1203
+ #define PCI_DEVICE_ID_AMD_10H_NB_LINK 0x1204
+ #define PCI_DEVICE_ID_AMD_11H_NB_HT   0x1300
+ #define PCI_DEVICE_ID_AMD_11H_NB_MAP  0x1301
+ #define PCI_DEVICE_ID_AMD_11H_NB_DRAM 0x1302
+ #define PCI_DEVICE_ID_AMD_11H_NB_MISC 0x1303
+ #define PCI_DEVICE_ID_AMD_11H_NB_LINK 0x1304
  #define PCI_DEVICE_ID_AMD_LANCE               0x2000
  #define PCI_DEVICE_ID_AMD_LANCE_HOME  0x2001
  #define PCI_DEVICE_ID_AMD_SCSI                0x2020
  #define PCI_DEVICE_ID_MATROX_G200_PCI 0x0520
  #define PCI_DEVICE_ID_MATROX_G200_AGP 0x0521
  #define       PCI_DEVICE_ID_MATROX_G400       0x0525
+ #define       PCI_DEVICE_ID_MATROX_G200EV_PCI 0x0530
  #define PCI_DEVICE_ID_MATROX_G550     0x2527
  #define PCI_DEVICE_ID_MATROX_VIA      0x4536
  
  #define PCI_VENDOR_ID_TI              0x104c
  #define PCI_DEVICE_ID_TI_TVP4020      0x3d07
  #define PCI_DEVICE_ID_TI_4450         0x8011
+ #define PCI_DEVICE_ID_TI_TSB43AB22    0x8023
  #define PCI_DEVICE_ID_TI_XX21_XX11    0x8031
  #define PCI_DEVICE_ID_TI_XX21_XX11_FM 0x8033
  #define PCI_DEVICE_ID_TI_XX21_XX11_SD 0x8034
  #define PCI_DEVICE_ID_EICON_MAESTRAQ_U        0xe013
  #define PCI_DEVICE_ID_EICON_MAESTRAP  0xe014
  
+ #define PCI_VENDOR_ID_CISCO           0x1137
  #define PCI_VENDOR_ID_ZIATECH         0x1138
  #define PCI_DEVICE_ID_ZIATECH_5550_HC 0x5550
   
  #define PCI_DEVICE_ID_MARVELL_GT64260 0x6430
  #define PCI_DEVICE_ID_MARVELL_MV64360 0x6460
  #define PCI_DEVICE_ID_MARVELL_MV64460 0x6480
- #define PCI_DEVICE_ID_MARVELL_CAFE_SD 0x4101
+ #define PCI_DEVICE_ID_MARVELL_88ALP01_NAND    0x4100
+ #define PCI_DEVICE_ID_MARVELL_88ALP01_SD      0x4101
+ #define PCI_DEVICE_ID_MARVELL_88ALP01_CCIC    0x4102
  
  #define PCI_VENDOR_ID_V3              0x11b0
  #define PCI_DEVICE_ID_V3_V960         0x0001
  #define PCI_DEVICE_ID_MOXA_C320               0x3200
  
  #define PCI_VENDOR_ID_CCD             0x1397
+ #define PCI_DEVICE_ID_CCD_HFC4S               0x08B4
+ #define PCI_SUBDEVICE_ID_CCD_PMX2S    0x1234
+ #define PCI_DEVICE_ID_CCD_HFC8S               0x16B8
  #define PCI_DEVICE_ID_CCD_2BD0                0x2bd0
+ #define PCI_DEVICE_ID_CCD_HFCE1               0x30B1
+ #define PCI_SUBDEVICE_ID_CCD_SPD4S    0x3136
+ #define PCI_SUBDEVICE_ID_CCD_SPDE1    0x3137
  #define PCI_DEVICE_ID_CCD_B000                0xb000
  #define PCI_DEVICE_ID_CCD_B006                0xb006
  #define PCI_DEVICE_ID_CCD_B007                0xb007
  #define PCI_DEVICE_ID_CCD_B00B                0xb00b
  #define PCI_DEVICE_ID_CCD_B00C                0xb00c
  #define PCI_DEVICE_ID_CCD_B100                0xb100
+ #define PCI_SUBDEVICE_ID_CCD_IOB4ST   0xB520
+ #define PCI_SUBDEVICE_ID_CCD_IOB8STR  0xB521
+ #define PCI_SUBDEVICE_ID_CCD_IOB8ST   0xB522
+ #define PCI_SUBDEVICE_ID_CCD_IOB1E1   0xB523
+ #define PCI_SUBDEVICE_ID_CCD_SWYX4S   0xB540
+ #define PCI_SUBDEVICE_ID_CCD_JH4S20   0xB550
+ #define PCI_SUBDEVICE_ID_CCD_IOB8ST_1 0xB552
+ #define PCI_SUBDEVICE_ID_CCD_BN4S     0xB560
+ #define PCI_SUBDEVICE_ID_CCD_BN8S     0xB562
+ #define PCI_SUBDEVICE_ID_CCD_BNE1     0xB563
+ #define PCI_SUBDEVICE_ID_CCD_BNE1D    0xB564
+ #define PCI_SUBDEVICE_ID_CCD_BNE1DP   0xB565
+ #define PCI_SUBDEVICE_ID_CCD_BN2S     0xB566
+ #define PCI_SUBDEVICE_ID_CCD_BN1SM    0xB567
+ #define PCI_SUBDEVICE_ID_CCD_BN4SM    0xB568
+ #define PCI_SUBDEVICE_ID_CCD_BN2SM    0xB569
+ #define PCI_SUBDEVICE_ID_CCD_BNE1M    0xB56A
+ #define PCI_SUBDEVICE_ID_CCD_BN8SP    0xB56B
+ #define PCI_SUBDEVICE_ID_CCD_HFC4S    0xB620
+ #define PCI_SUBDEVICE_ID_CCD_HFC8S    0xB622
  #define PCI_DEVICE_ID_CCD_B700                0xb700
  #define PCI_DEVICE_ID_CCD_B701                0xb701
+ #define PCI_SUBDEVICE_ID_CCD_HFCE1    0xC523
+ #define PCI_SUBDEVICE_ID_CCD_OV2S     0xE884
+ #define PCI_SUBDEVICE_ID_CCD_OV4S     0xE888
+ #define PCI_SUBDEVICE_ID_CCD_OV8S     0xE998
  
  #define PCI_VENDOR_ID_EXAR            0x13a8
  #define PCI_DEVICE_ID_EXAR_XR17C152   0x0152
  
  #define PCI_VENDOR_ID_OXSEMI          0x1415
  #define PCI_DEVICE_ID_OXSEMI_12PCI840 0x8403
+ #define PCI_DEVICE_ID_OXSEMI_PCIe840          0xC000
+ #define PCI_DEVICE_ID_OXSEMI_PCIe840_G                0xC004
+ #define PCI_DEVICE_ID_OXSEMI_PCIe952_0                0xC100
+ #define PCI_DEVICE_ID_OXSEMI_PCIe952_0_G      0xC104
+ #define PCI_DEVICE_ID_OXSEMI_PCIe952_1                0xC110
+ #define PCI_DEVICE_ID_OXSEMI_PCIe952_1_G      0xC114
+ #define PCI_DEVICE_ID_OXSEMI_PCIe952_1_U      0xC118
+ #define PCI_DEVICE_ID_OXSEMI_PCIe952_1_GU     0xC11C
  #define PCI_DEVICE_ID_OXSEMI_16PCI954 0x9501
  #define PCI_DEVICE_ID_OXSEMI_16PCI95N 0x9511
  #define PCI_DEVICE_ID_OXSEMI_16PCI954PP       0x9513
  #define PCI_DEVICE_ID_NX2_5708                0x164c
  #define PCI_DEVICE_ID_TIGON3_5702FE   0x164d
  #define PCI_DEVICE_ID_NX2_57710               0x164e
+ #define PCI_DEVICE_ID_NX2_57711               0x164f
+ #define PCI_DEVICE_ID_NX2_57711E      0x1650
  #define PCI_DEVICE_ID_TIGON3_5705     0x1653
  #define PCI_DEVICE_ID_TIGON3_5705_2   0x1654
  #define PCI_DEVICE_ID_TIGON3_5720     0x1658
  #define PCI_DEVICE_ID_TIGON3_5787M    0x1693
  #define PCI_DEVICE_ID_TIGON3_5782     0x1696
  #define PCI_DEVICE_ID_TIGON3_5784     0x1698
+ #define PCI_DEVICE_ID_TIGON3_5785     0x1699
  #define PCI_DEVICE_ID_TIGON3_5786     0x169a
  #define PCI_DEVICE_ID_TIGON3_5787     0x169b
  #define PCI_DEVICE_ID_TIGON3_5788     0x169c
  #define PCI_DEVICE_ID_HERC_WIN                0x5732
  #define PCI_DEVICE_ID_HERC_UNI                0x5832
  
- #define PCI_VENDOR_ID_RDC             0x17f3
  #define PCI_VENDOR_ID_SITECOM         0x182d
  #define PCI_DEVICE_ID_SITECOM_DC105V2 0x3069
  
  
  #define PCI_VENDOR_ID_ATTANSIC                0x1969
  #define PCI_DEVICE_ID_ATTANSIC_L1     0x1048
+ #define PCI_DEVICE_ID_ATTANSIC_L2     0x2048
  
  #define PCI_VENDOR_ID_JMICRON         0x197B
  #define PCI_DEVICE_ID_JMICRON_JMB360  0x2360
  #define PCI_DEVICE_ID_3DLABS_PERMEDIA2        0x0007
  #define PCI_DEVICE_ID_3DLABS_PERMEDIA2V       0x0009
  
+ #define PCI_VENDOR_ID_NETXEN          0x4040
+ #define PCI_DEVICE_ID_NX2031_10GXSR   0x0001
+ #define PCI_DEVICE_ID_NX2031_10GCX4   0x0002
+ #define PCI_DEVICE_ID_NX2031_4GCU     0x0003
+ #define PCI_DEVICE_ID_NX2031_IMEZ     0x0004
+ #define PCI_DEVICE_ID_NX2031_HMEZ     0x0005
+ #define PCI_DEVICE_ID_NX2031_XG_MGMT  0x0024
+ #define PCI_DEVICE_ID_NX2031_XG_MGMT2 0x0025
+ #define PCI_DEVICE_ID_NX3031          0x0100
  #define PCI_VENDOR_ID_AKS             0x416c
  #define PCI_DEVICE_ID_AKS_ALADDINCARD 0x0100
  
  #define PCI_DEVICE_ID_INTEL_PXH_0     0x0329
  #define PCI_DEVICE_ID_INTEL_PXH_1     0x032A
  #define PCI_DEVICE_ID_INTEL_PXHV      0x032C
 +#define PCI_DEVICE_ID_INTEL_80332_0   0x0330
 +#define PCI_DEVICE_ID_INTEL_80332_1   0x0332
 +#define PCI_DEVICE_ID_INTEL_80333_0   0x0370
 +#define PCI_DEVICE_ID_INTEL_80333_1   0x0372
  #define PCI_DEVICE_ID_INTEL_82375     0x0482
  #define PCI_DEVICE_ID_INTEL_82424     0x0483
  #define PCI_DEVICE_ID_INTEL_82378     0x0484
  #define PCI_DEVICE_ID_INTEL_ESB_4     0x25a4
  #define PCI_DEVICE_ID_INTEL_ESB_5     0x25a6
  #define PCI_DEVICE_ID_INTEL_ESB_9     0x25ab
 +#define PCI_DEVICE_ID_INTEL_ESB_10    0x25ac
  #define PCI_DEVICE_ID_INTEL_82820_HB  0x2500
  #define PCI_DEVICE_ID_INTEL_82820_UP_HB       0x2501
  #define PCI_DEVICE_ID_INTEL_82850_HB  0x2530
  #define PCI_DEVICE_ID_INTEL_ICH9_7    0x2916
  #define PCI_DEVICE_ID_INTEL_ICH9_8    0x2918
  #define PCI_DEVICE_ID_INTEL_82855PM_HB        0x3340
+ #define PCI_DEVICE_ID_INTEL_IOAT_TBG4 0x3429
+ #define PCI_DEVICE_ID_INTEL_IOAT_TBG5 0x342a
+ #define PCI_DEVICE_ID_INTEL_IOAT_TBG6 0x342b
+ #define PCI_DEVICE_ID_INTEL_IOAT_TBG7 0x342c
+ #define PCI_DEVICE_ID_INTEL_IOAT_TBG0 0x3430
+ #define PCI_DEVICE_ID_INTEL_IOAT_TBG1 0x3431
+ #define PCI_DEVICE_ID_INTEL_IOAT_TBG2 0x3432
+ #define PCI_DEVICE_ID_INTEL_IOAT_TBG3 0x3433
  #define PCI_DEVICE_ID_INTEL_82830_HB  0x3575
  #define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577
  #define PCI_DEVICE_ID_INTEL_82855GM_HB        0x3580
  #define PCI_DEVICE_ID_INTEL_MCH_PC1   0x359a
  #define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e
  #define PCI_DEVICE_ID_INTEL_IOAT_CNB  0x360b
+ #define PCI_DEVICE_ID_INTEL_FBD_CNB   0x360c
  #define PCI_DEVICE_ID_INTEL_ICH10_0   0x3a14
  #define PCI_DEVICE_ID_INTEL_ICH10_1   0x3a16
  #define PCI_DEVICE_ID_INTEL_ICH10_2   0x3a18
  #define PCI_DEVICE_ID_INTEL_ICH10_3   0x3a1a
  #define PCI_DEVICE_ID_INTEL_ICH10_4   0x3a30
  #define PCI_DEVICE_ID_INTEL_ICH10_5   0x3a60
+ #define PCI_DEVICE_ID_INTEL_PCH_LPC_MIN       0x3b00
+ #define PCI_DEVICE_ID_INTEL_PCH_LPC_MAX       0x3b1f
+ #define PCI_DEVICE_ID_INTEL_PCH_SMBUS 0x3b30
  #define PCI_DEVICE_ID_INTEL_IOAT_SNB  0x402f
+ #define PCI_DEVICE_ID_INTEL_5100_16   0x65f0
+ #define PCI_DEVICE_ID_INTEL_5100_21   0x65f5
+ #define PCI_DEVICE_ID_INTEL_5100_22   0x65f6
  #define PCI_DEVICE_ID_INTEL_5400_ERR  0x4030
  #define PCI_DEVICE_ID_INTEL_5400_FBD0 0x4035
  #define PCI_DEVICE_ID_INTEL_5400_FBD1 0x4036
  
  #define PCI_VENDOR_ID_3COM_2          0xa727
  
+ #define PCI_VENDOR_ID_DIGIUM          0xd161
+ #define PCI_DEVICE_ID_DIGIUM_HFC4S    0xb410
  #define PCI_SUBVENDOR_ID_EXSYS                0xd84d
  #define PCI_SUBDEVICE_ID_EXSYS_4014   0x4014
  #define PCI_SUBDEVICE_ID_EXSYS_4055   0x4055