diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-12 13:40:57 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-12 13:40:57 -0700 | 
| commit | 21ba0f88ae56da82a3a15fe54d729208b64c4f4b (patch) | |
| tree | 17ce67f276fe3ea7284c3dc730bdd6a2ec7dfe2f | |
| parent | dc690d8ef842b464f1c429a376ca16cb8dbee6ae (diff) | |
| parent | 36e235901f90fb83215be43cbd8f1ca14661ea40 (diff) | |
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6: (34 commits)
  PCI: Only build PCI syscalls on architectures that want them
  PCI: limit pci_get_bus_and_slot to domain 0
  PCI: hotplug: acpiphp: avoid acpiphp "cannot get bridge info" PCI hotplug failure
  PCI: hotplug: acpiphp: remove hot plug parameter write to PCI host bridge
  PCI: hotplug: acpiphp: fix slot poweroff problem on systems without _PS3
  PCI: hotplug: pciehp: wait for 1 second after power off slot
  PCI: pci_set_power_state(): check for PM capabilities earlier
  PCI: cpci_hotplug: Convert to use the kthread API
  PCI: add pci_try_set_mwi
  PCI: pcie: remove SPIN_LOCK_UNLOCKED
  PCI: ROUND_UP macro cleanup in drivers/pci
  PCI: remove pci_dac_dma_... APIs
  PCI: pci-x-pci-express-read-control-interfaces cleanups
  PCI: Fix typo in include/linux/pci.h
  PCI: pci_ids, remove double or more empty lines
  PCI: pci_ids, add atheros and 3com_2 vendors
  PCI: pci_ids, reorder some entries
  PCI: i386: traps, change VENDOR to DEVICE
  PCI: ATM: lanai, change VENDOR to DEVICE
  PCI: Change all drivers to use pci_device->revision
  ...
172 files changed, 760 insertions, 1401 deletions
| diff --git a/Documentation/DMA-mapping.txt b/Documentation/DMA-mapping.txt index 028614cdd062..e07f2530326b 100644 --- a/Documentation/DMA-mapping.txt +++ b/Documentation/DMA-mapping.txt @@ -664,109 +664,6 @@ It is that simple.  Well, not for some odd devices.  See the next section for information  about that. -	DAC Addressing for Address Space Hungry Devices - -There exists a class of devices which do not mesh well with the PCI -DMA mapping API.  By definition these "mappings" are a finite -resource.  The number of total available mappings per bus is platform -specific, but there will always be a reasonable amount. - -What is "reasonable"?  Reasonable means that networking and block I/O -devices need not worry about using too many mappings. - -As an example of a problematic device, consider compute cluster cards. -They can potentially need to access gigabytes of memory at once via -DMA.  Dynamic mappings are unsuitable for this kind of access pattern. - -To this end we've provided a small API by which a device driver -may use DAC cycles to directly address all of physical memory. -Not all platforms support this, but most do.  It is easy to determine -whether the platform will work properly at probe time. - -First, understand that there may be a SEVERE performance penalty for -using these interfaces on some platforms.  Therefore, you MUST only -use these interfaces if it is absolutely required.  %99 of devices can -use the normal APIs without any problems. - -Note that for streaming type mappings you must either use these -interfaces, or the dynamic mapping interfaces above.  You may not mix -usage of both for the same device.  Such an act is illegal and is -guaranteed to put a banana in your tailpipe. - -However, consistent mappings may in fact be used in conjunction with -these interfaces.  Remember that, as defined, consistent mappings are -always going to be SAC addressable. - -The first thing your driver needs to do is query the PCI platform -layer if it is capable of handling your devices DAC addressing -capabilities: - -	int pci_dac_dma_supported(struct pci_dev *hwdev, u64 mask); - -You may not use the following interfaces if this routine fails. - -Next, DMA addresses using this API are kept track of using the -dma64_addr_t type.  It is guaranteed to be big enough to hold any -DAC address the platform layer will give to you from the following -routines.  If you have consistent mappings as well, you still -use plain dma_addr_t to keep track of those. - -All mappings obtained here will be direct.  The mappings are not -translated, and this is the purpose of this dialect of the DMA API. - -All routines work with page/offset pairs.  This is the _ONLY_ way to  -portably refer to any piece of memory.  If you have a cpu pointer -(which may be validly DMA'd too) you may easily obtain the page -and offset using something like this: - -	struct page *page = virt_to_page(ptr); -	unsigned long offset = offset_in_page(ptr); - -Here are the interfaces: - -	dma64_addr_t pci_dac_page_to_dma(struct pci_dev *pdev, -					 struct page *page, -					 unsigned long offset, -					 int direction); - -The DAC address for the tuple PAGE/OFFSET are returned.  The direction -argument is the same as for pci_{map,unmap}_single().  The same rules -for cpu/device access apply here as for the streaming mapping -interfaces.  To reiterate: - -	The cpu may touch the buffer before pci_dac_page_to_dma. -	The device may touch the buffer after pci_dac_page_to_dma -	is made, but the cpu may NOT. - -When the DMA transfer is complete, invoke: - -	void pci_dac_dma_sync_single_for_cpu(struct pci_dev *pdev, -					     dma64_addr_t dma_addr, -					     size_t len, int direction); - -This must be done before the CPU looks at the buffer again. -This interface behaves identically to pci_dma_sync_{single,sg}_for_cpu(). - -And likewise, if you wish to let the device get back at the buffer after -the cpu has read/written it, invoke: - -	void pci_dac_dma_sync_single_for_device(struct pci_dev *pdev, -						dma64_addr_t dma_addr, -						size_t len, int direction); - -before letting the device access the DMA area again. - -If you need to get back to the PAGE/OFFSET tuple from a dma64_addr_t -the following interfaces are provided: - -	struct page *pci_dac_dma_to_page(struct pci_dev *pdev, -					 dma64_addr_t dma_addr); -	unsigned long pci_dac_dma_to_offset(struct pci_dev *pdev, -					    dma64_addr_t dma_addr); - -This is possible with the DAC interfaces purely because they are -not translated in any way. -  		Optimizing Unmap State Space Consumption  On many platforms, pci_unmap_{single,page}() is simply a nop. diff --git a/Documentation/pci.txt b/Documentation/pci.txt index d38261b67905..7754f5aea4e9 100644 --- a/Documentation/pci.txt +++ b/Documentation/pci.txt @@ -113,9 +113,6 @@ initialization with a pointer to a structure describing the driver  		(Please see Documentation/power/pci.txt for descriptions  		of PCI Power Management and the related functions.) -	enable_wake	Enable device to generate wake events from a low power -			state. -  	shutdown	Hook into reboot_notifier_list (kernel/sys.c).  			Intended to stop any idling DMA operations.  			Useful for enabling wake-on-lan (NIC) or changing @@ -299,7 +296,10 @@ If the PCI device can use the PCI Memory-Write-Invalidate transaction,  call pci_set_mwi().  This enables the PCI_COMMAND bit for Mem-Wr-Inval  and also ensures that the cache line size register is set correctly.  Check the return value of pci_set_mwi() as not all architectures -or chip-sets may support Memory-Write-Invalidate. +or chip-sets may support Memory-Write-Invalidate.  Alternatively, +if Mem-Wr-Inval would be nice to have but is not required, call +pci_try_set_mwi() to have the system do its best effort at enabling +Mem-Wr-Inval.  3.2 Request MMIO/IOP resources diff --git a/Documentation/power/pci.txt b/Documentation/power/pci.txt index e00b099a4b86..dd8fe43888d3 100644 --- a/Documentation/power/pci.txt +++ b/Documentation/power/pci.txt @@ -164,7 +164,6 @@ struct pci_driver:          int  (*suspend) (struct pci_dev *dev, pm_message_t state);          int  (*resume) (struct pci_dev *dev); -        int  (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable);  suspend @@ -251,42 +250,6 @@ The driver should update the current_state field in its pci_dev structure in  this function, except for PM-capable devices when pci_set_power_state is used. -enable_wake ------------ - -Usage: - -if (dev->driver && dev->driver->enable_wake) -	dev->driver->enable_wake(dev,state,enable); - -This callback is generally only relevant for devices that support the PCI PM -spec and have the ability to generate a PME# (Power Management Event Signal) -to wake the system up. (However, it is possible that a device may support  -some non-standard way of generating a wake event on sleep.) - -Bits 15:11 of the PMC (Power Mgmt Capabilities) Register in a device's -PM Capabilities describe what power states the device supports generating a  -wake event from: - -+------------------+ -|  Bit  |  State   | -+------------------+ -|  11   |   D0     | -|  12   |   D1     | -|  13   |   D2     | -|  14   |   D3hot  | -|  15   |   D3cold | -+------------------+ - -A device can use this to enable wake events: - -	 pci_enable_wake(dev,state,enable); - -Note that to enable PME# from D3cold, a value of 4 should be passed to  -pci_enable_wake (since it uses an index into a bitmask). If a driver gets -a request to enable wake events from D3, two calls should be made to  -pci_enable_wake (one for both D3hot and D3cold). -  A reference implementation  ------------------------- diff --git a/MAINTAINERS b/MAINTAINERS index cba5f4df0e21..b2c541591e4f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2814,11 +2814,6 @@ P: 	Kristen Carlson Accardi  M:	kristen.c.accardi@intel.com  S:	Supported -PCI HOTPLUG COMPAQ DRIVER -P:	Greg Kroah-Hartman -M:	greg@kroah.com -S:	Maintained -  PCIE HOTPLUG DRIVER  P:	Kristen Carlson Accardi  M:	kristen.c.accardi@intel.com diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 79c6e5a24456..2a85dc33907c 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig @@ -327,6 +327,9 @@ config PCI_DOMAINS  	bool  	default y +config PCI_SYSCALL +	def_bool PCI +  config ALPHA_CORE_AGP  	bool  	depends on ALPHA_GENERIC || ALPHA_TITAN || ALPHA_MARVEL diff --git a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c index 28c84e55feb9..6b07f89a72c7 100644 --- a/arch/alpha/kernel/pci_iommu.c +++ b/arch/alpha/kernel/pci_iommu.c @@ -207,6 +207,10 @@ iommu_arena_free(struct pci_iommu_arena *arena, long ofs, long n)  		p[i] = 0;  } +/* True if the machine supports DAC addressing, and DEV can +   make use of it given MASK.  */ +static int pci_dac_dma_supported(struct pci_dev *hwdev, u64 mask); +  /* Map a single buffer of the indicated size for PCI DMA in streaming     mode.  The 32-bit PCI bus mastering address to use is returned.     Once the device is given the dma address, the device owns this memory @@ -897,7 +901,7 @@ iommu_unbind(struct pci_iommu_arena *arena, long pg_start, long pg_count)  /* True if the machine supports DAC addressing, and DEV can     make use of it given MASK.  */ -int +static int  pci_dac_dma_supported(struct pci_dev *dev, u64 mask)  {  	dma64_addr_t dac_offset = alpha_mv.pci_dac_offset; @@ -917,32 +921,6 @@ pci_dac_dma_supported(struct pci_dev *dev, u64 mask)  	return ok;  } -EXPORT_SYMBOL(pci_dac_dma_supported); - -dma64_addr_t -pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page, -		    unsigned long offset, int direction) -{ -	return (alpha_mv.pci_dac_offset -		+ __pa(page_address(page))  -		+ (dma64_addr_t) offset); -} -EXPORT_SYMBOL(pci_dac_page_to_dma); - -struct page * -pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr) -{ -	unsigned long paddr = (dma_addr & PAGE_MASK) - alpha_mv.pci_dac_offset; -	return virt_to_page(__va(paddr)); -} -EXPORT_SYMBOL(pci_dac_dma_to_page); - -unsigned long -pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr) -{ -	return (dma_addr & ~PAGE_MASK); -} -EXPORT_SYMBOL(pci_dac_dma_to_offset);  /* Helper for generic DMA-mapping functions. */ diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 50d9f3e4e0f1..482d33f9ce5b 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -531,6 +531,9 @@ config PCI  	  information about which PCI hardware does work under Linux and which  	  doesn't. +config PCI_SYSCALL +	def_bool PCI +  # Select the host bridge type  config PCI_HOST_VIA82C505  	bool diff --git a/arch/i386/kernel/cpu/cpufreq/cpufreq-nforce2.c b/arch/i386/kernel/cpu/cpufreq/cpufreq-nforce2.c index 0d49d73d1b71..66acd5039918 100644 --- a/arch/i386/kernel/cpu/cpufreq/cpufreq-nforce2.c +++ b/arch/i386/kernel/cpu/cpufreq/cpufreq-nforce2.c @@ -391,8 +391,6 @@ static struct cpufreq_driver nforce2_driver = {   */  static unsigned int nforce2_detect_chipset(void)  { -	u8 revision; -  	nforce2_chipset_dev = pci_get_subsys(PCI_VENDOR_ID_NVIDIA,  					PCI_DEVICE_ID_NVIDIA_NFORCE2,  					PCI_ANY_ID, PCI_ANY_ID, NULL); @@ -400,10 +398,8 @@ static unsigned int nforce2_detect_chipset(void)  	if (nforce2_chipset_dev == NULL)  		return -ENODEV; -	pci_read_config_byte(nforce2_chipset_dev, PCI_REVISION_ID, &revision); -  	printk(KERN_INFO "cpufreq: Detected nForce2 chipset revision %X\n", -	       revision); +	       nforce2_chipset_dev->revision);  	printk(KERN_INFO  	       "cpufreq: FSB changing is maybe unstable and can lead to crashes and data loss.\n"); diff --git a/arch/i386/kernel/cpu/cpufreq/gx-suspmod.c b/arch/i386/kernel/cpu/cpufreq/gx-suspmod.c index 6667e9cceb9f..194144539a6f 100644 --- a/arch/i386/kernel/cpu/cpufreq/gx-suspmod.c +++ b/arch/i386/kernel/cpu/cpufreq/gx-suspmod.c @@ -115,7 +115,6 @@ struct gxfreq_params {  	u8 pci_suscfg;  	u8 pci_pmer1;  	u8 pci_pmer2; -	u8 pci_rev;  	struct pci_dev *cs55x0;  }; @@ -276,7 +275,7 @@ static void gx_set_cpuspeed(unsigned int khz)  			pci_write_config_byte(gx_params->cs55x0, PCI_VIDTC, 100);/* typical 50 to 100ms */  			pci_write_config_byte(gx_params->cs55x0, PCI_PMER1, pmer1); -			if (gx_params->pci_rev < 0x10) {   /* CS5530(rev 1.2, 1.3) */ +			if (gx_params->cs55x0->revision < 0x10) {   /* CS5530(rev 1.2, 1.3) */  				suscfg = gx_params->pci_suscfg | SUSMOD;  			} else {                           /* CS5530A,B.. */  				suscfg = gx_params->pci_suscfg | SUSMOD | PWRSVE; @@ -471,7 +470,6 @@ static int __init cpufreq_gx_init(void)  	pci_read_config_byte(params->cs55x0, PCI_PMER2, &(params->pci_pmer2));  	pci_read_config_byte(params->cs55x0, PCI_MODON, &(params->on_duration));  	pci_read_config_byte(params->cs55x0, PCI_MODOFF, &(params->off_duration)); -	pci_read_config_byte(params->cs55x0, PCI_REVISION_ID, ¶ms->pci_rev);  	if ((ret = cpufreq_register_driver(&gx_suspmod_driver))) {  		kfree(params); diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-ich.c b/arch/i386/kernel/cpu/cpufreq/speedstep-ich.c index 698f980eb443..a5b2346faf1f 100644 --- a/arch/i386/kernel/cpu/cpufreq/speedstep-ich.c +++ b/arch/i386/kernel/cpu/cpufreq/speedstep-ich.c @@ -205,7 +205,6 @@ static unsigned int speedstep_detect_chipset (void)  		 * host brige. Abort on these systems.  		 */  		static struct pci_dev *hostbridge; -		u8 rev = 0;  		hostbridge  = pci_get_subsys(PCI_VENDOR_ID_INTEL,  			      PCI_DEVICE_ID_INTEL_82815_MC, @@ -216,8 +215,7 @@ static unsigned int speedstep_detect_chipset (void)  		if (!hostbridge)  			return 2; /* 2-M */ -		pci_read_config_byte(hostbridge, PCI_REVISION_ID, &rev); -		if (rev < 5) { +		if (hostbridge->revision < 5) {  			dprintk("hostbridge does not support speedstep\n");  			speedstep_chipset_dev = NULL;  			pci_dev_put(hostbridge); diff --git a/arch/i386/mach-visws/traps.c b/arch/i386/mach-visws/traps.c index 5199bd03254a..843b67acf43b 100644 --- a/arch/i386/mach-visws/traps.c +++ b/arch/i386/mach-visws/traps.c @@ -23,13 +23,13 @@ static __init void lithium_init(void)  	set_fixmap(FIX_LI_PCIB, LI_PCI_B_PHYS);  	if ((li_pcia_read16(PCI_VENDOR_ID) != PCI_VENDOR_ID_SGI) || -	    (li_pcia_read16(PCI_DEVICE_ID) != PCI_VENDOR_ID_SGI_LITHIUM)) { +	    (li_pcia_read16(PCI_DEVICE_ID) != PCI_DEVICE_ID_SGI_LITHIUM)) {  		printk(KERN_EMERG "Lithium hostbridge %c not found\n", 'A');  		panic("This machine is not SGI Visual Workstation 320/540");  	}  	if ((li_pcib_read16(PCI_VENDOR_ID) != PCI_VENDOR_ID_SGI) || -	    (li_pcib_read16(PCI_DEVICE_ID) != PCI_VENDOR_ID_SGI_LITHIUM)) { +	    (li_pcib_read16(PCI_DEVICE_ID) != PCI_DEVICE_ID_SGI_LITHIUM)) {  		printk(KERN_EMERG "Lithium hostbridge %c not found\n", 'B');  		panic("This machine is not SGI Visual Workstation 320/540");  	} diff --git a/arch/i386/pci/fixup.c b/arch/i386/pci/fixup.c index b95b42950ed4..e7306dbf6c42 100644 --- a/arch/i386/pci/fixup.c +++ b/arch/i386/pci/fixup.c @@ -118,12 +118,9 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, pci  static void pci_fixup_via_northbridge_bug(struct pci_dev *d)  {  	u8 v; -	u8 revision;  	int where = 0x55;  	int mask = 0x1f; /* clear bits 5, 6, 7 by default */ -	pci_read_config_byte(d, PCI_REVISION_ID, &revision); -  	if (d->device == PCI_DEVICE_ID_VIA_8367_0) {  		/* fix pci bus latency issues resulted by NB bios error  		   it appears on bug free^Wreduced kt266x's bios forces @@ -133,8 +130,8 @@ static void pci_fixup_via_northbridge_bug(struct pci_dev *d)  		where = 0x95; /* the memory write queue timer register is   				different for the KT266x's: 0x95 not 0x55 */  	} else if (d->device == PCI_DEVICE_ID_VIA_8363_0 && -			(revision == VIA_8363_KL133_REVISION_ID ||  -			revision == VIA_8363_KM133_REVISION_ID)) { +			(d->revision == VIA_8363_KL133_REVISION_ID || +			d->revision == VIA_8363_KM133_REVISION_ID)) {  			mask = 0x3f; /* clear only bits 6 and 7; clearing bit 5  					causes screen corruption on the KL133/KM133 */  	} @@ -142,7 +139,7 @@ static void pci_fixup_via_northbridge_bug(struct pci_dev *d)  	pci_read_config_byte(d, where, &v);  	if (v & ~mask) {  		printk(KERN_WARNING "Disabling VIA memory write queue (PCI ID %04x, rev %02x): [%02x] %02x & %02x -> %02x\n", \ -			d->device, revision, where, v, mask, v & mask); +			d->device, d->revision, where, v, mask, v & mask);  		v &= mask;  		pci_write_config_byte(d, where, v);  	} diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index de1bff659969..db9ddff95841 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig @@ -520,8 +520,10 @@ config PCI  	  here unless you are using a simulator without PCI support.  config PCI_DOMAINS -	bool -	default PCI +	def_bool PCI + +config PCI_SYSCALL +	def_bool PCI  source "drivers/pci/pcie/Kconfig" diff --git a/arch/mips/pci/Makefile b/arch/mips/pci/Makefile index f26ede001a0b..c58bd3d036f4 100644 --- a/arch/mips/pci/Makefile +++ b/arch/mips/pci/Makefile @@ -2,7 +2,7 @@  # Makefile for the PCI specific kernel interface routines under Linux.  # -obj-y				+= pci.o pci-dac.o +obj-y				+= pci.o  #  # PCI bus host bridge specific code diff --git a/arch/mips/pci/fixup-cobalt.c b/arch/mips/pci/fixup-cobalt.c index 7fc475f7eae5..76b4f0ffb1e5 100644 --- a/arch/mips/pci/fixup-cobalt.c +++ b/arch/mips/pci/fixup-cobalt.c @@ -58,8 +58,6 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1,  static void qube_raq_galileo_fixup(struct pci_dev *dev)  { -	unsigned short galileo_id; -  	if (dev->devfn != PCI_DEVFN(0, 0))  		return; @@ -84,16 +82,14 @@ static void qube_raq_galileo_fixup(struct pci_dev *dev)  	 * Therefore we must set the disconnect/retry cycle values to  	 * something sensible when using the new Galileo.  	 */ -	pci_read_config_word(dev, PCI_REVISION_ID, &galileo_id); -	galileo_id &= 0xff;	/* mask off class info */ - 	printk(KERN_INFO "Galileo: revision %u\n", galileo_id); + 	printk(KERN_INFO "Galileo: revision %u\n", dev->revision);  #if 0 -	if (galileo_id >= 0x10) { +	if (dev->revision >= 0x10) {  		/* New Galileo, assumes PCI stop line to VIA is connected. */  		GT_WRITE(GT_PCI0_TOR_OFS, 0x4020); -	} else if (galileo_id == 0x1 || galileo_id == 0x2) +	} else if (dev->revision == 0x1 || dev->revision == 0x2)  #endif  	{  		signed int timeo; diff --git a/arch/mips/pci/pci-dac.c b/arch/mips/pci/pci-dac.c deleted file mode 100644 index 0f0ea1b7d4dd..000000000000 --- a/arch/mips/pci/pci-dac.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * This file is subject to the terms and conditions of the GNU General Public - * License.  See the file "COPYING" in the main directory of this archive - * for more details. - * - * Copyright (C) 2000  Ani Joshi <ajoshi@unixbox.com> - * Copyright (C) 2000, 2001, 06  Ralf Baechle <ralf@linux-mips.org> - * swiped from i386, and cloned for MIPS by Geert, polished by Ralf. - */ - -#include <linux/types.h> -#include <linux/dma-mapping.h> -#include <linux/mm.h> -#include <linux/module.h> -#include <linux/string.h> - -#include <asm/cache.h> -#include <asm/io.h> - -#include <dma-coherence.h> - -#include <linux/pci.h> - -dma64_addr_t pci_dac_page_to_dma(struct pci_dev *pdev, -	struct page *page, unsigned long offset, int direction) -{ -	struct device *dev = &pdev->dev; - -	BUG_ON(direction == DMA_NONE); - -	if (!plat_device_is_coherent(dev)) { -		unsigned long addr; - -		addr = (unsigned long) page_address(page) + offset; -		dma_cache_wback_inv(addr, PAGE_SIZE); -	} - -	return plat_map_dma_mem_page(dev, page) + offset; -} - -EXPORT_SYMBOL(pci_dac_page_to_dma); - -struct page *pci_dac_dma_to_page(struct pci_dev *pdev, -	dma64_addr_t dma_addr) -{ -	return pfn_to_page(plat_dma_addr_to_phys(dma_addr) >> PAGE_SHIFT); -} - -EXPORT_SYMBOL(pci_dac_dma_to_page); - -unsigned long pci_dac_dma_to_offset(struct pci_dev *pdev, -	dma64_addr_t dma_addr) -{ -	return dma_addr & ~PAGE_MASK; -} - -EXPORT_SYMBOL(pci_dac_dma_to_offset); - -void pci_dac_dma_sync_single_for_cpu(struct pci_dev *pdev, -	dma64_addr_t dma_addr, size_t len, int direction) -{ -	BUG_ON(direction == PCI_DMA_NONE); - -	if (!plat_device_is_coherent(&pdev->dev)) -		dma_cache_wback_inv(dma_addr + PAGE_OFFSET, len); -} - -EXPORT_SYMBOL(pci_dac_dma_sync_single_for_cpu); - -void pci_dac_dma_sync_single_for_device(struct pci_dev *pdev, -	dma64_addr_t dma_addr, size_t len, int direction) -{ -	BUG_ON(direction == PCI_DMA_NONE); - -	if (!plat_device_is_coherent(&pdev->dev)) -		dma_cache_wback_inv(dma_addr + PAGE_OFFSET, len); -} - -EXPORT_SYMBOL(pci_dac_dma_sync_single_for_device); diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 5eaeafd30bdf..6beee32144c0 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -698,8 +698,10 @@ config PCI  	  infrastructure code to support PCI bus devices.  config PCI_DOMAINS -	bool -	default PCI +	def_bool PCI + +config PCI_SYSCALL +	def_bool PCI  config PCI_QSPAN  	bool "QSpan PCI" diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c index e66064b5093a..86982112b0dd 100644 --- a/arch/powerpc/kernel/pci_32.c +++ b/arch/powerpc/kernel/pci_32.c @@ -1047,10 +1047,10 @@ void pcibios_make_OF_bus_map(void)  #endif /* CONFIG_PPC_OF */  /* Add sysfs properties */ -void pcibios_add_platform_entries(struct pci_dev *pdev) +int pcibios_add_platform_entries(struct pci_dev *pdev)  {  #ifdef CONFIG_PPC_OF -	device_create_file(&pdev->dev, &dev_attr_devspec); +	return device_create_file(&pdev->dev, &dev_attr_devspec);  #endif /* CONFIG_PPC_OF */  } diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index 249cca27a9b8..e3009a43ac56 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c @@ -367,8 +367,10 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,  	sprintf(pci_name(dev), "%04x:%02x:%02x.%d", pci_domain_nr(bus),  		dev->bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn));  	dev->class = get_int_prop(node, "class-code", 0); +	dev->revision = get_int_prop(node, "revision-id", 0);  	DBG("    class: 0x%x\n", dev->class); +	DBG("    revision: 0x%x\n", dev->revision);  	dev->current_state = 4;		/* unknown power state */  	dev->error_state = pci_channel_io_normal; @@ -876,9 +878,9 @@ static ssize_t pci_show_devspec(struct device *dev,  }  static DEVICE_ATTR(devspec, S_IRUGO, pci_show_devspec, NULL); -void pcibios_add_platform_entries(struct pci_dev *pdev) +int pcibios_add_platform_entries(struct pci_dev *pdev)  { -	device_create_file(&pdev->dev, &dev_attr_devspec); +	return device_create_file(&pdev->dev, &dev_attr_devspec);  }  #define ISA_SPACE_MASK 0x1 diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig index ccce2a4a1522..6bdeeb70b157 100644 --- a/arch/ppc/Kconfig +++ b/arch/ppc/Kconfig @@ -1237,8 +1237,10 @@ config PCI  	  infrastructure code to support PCI bus devices.  config PCI_DOMAINS -	bool -	default PCI +	def_bool PCI + +config PCI_SYSCALL +	def_bool PCI  config MPC83xx_PCI2  	bool "Support for 2nd PCI host controller" diff --git a/arch/ppc/kernel/pci.c b/arch/ppc/kernel/pci.c index 5e723c4c2571..c2ec13bea006 100644 --- a/arch/ppc/kernel/pci.c +++ b/arch/ppc/kernel/pci.c @@ -633,12 +633,6 @@ void pcibios_make_OF_bus_map(void)  {  } -/* Add sysfs properties */ -void pcibios_add_platform_entries(struct pci_dev *pdev) -{ -} - -  static int __init  pcibios_init(void)  { diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index fbcc00c6c06e..8567cc901942 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -210,6 +210,9 @@ config PCI  	  CP-1200, JavaEngine-1, Corona, Red October, and Serengeti SGSC.  	  All of these platforms are extremely obscure, so say N if unsure. +config PCI_SYSCALL +	def_bool PCI +  source "drivers/pci/Kconfig"  endif diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig index 89a1b469b93d..6566d13db04f 100644 --- a/arch/sparc64/Kconfig +++ b/arch/sparc64/Kconfig @@ -320,8 +320,10 @@ config PCI  	  doesn't.  config PCI_DOMAINS -	bool -	default PCI +	def_bool PCI + +config PCI_SYSCALL +	def_bool PCI  source "drivers/pci/Kconfig" diff --git a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c index 81f4a5ea05f7..55ad1b899bb8 100644 --- a/arch/sparc64/kernel/pci.c +++ b/arch/sparc64/kernel/pci.c @@ -448,6 +448,7 @@ struct pci_dev *of_create_pci_dev(struct pci_pbm_info *pbm,  		 */  		pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);  		dev->class = class >> 8; +		dev->revision = class & 0xff;  		sprintf(pci_name(dev), "%04x:%02x:%02x.%d", pci_domain_nr(bus),  			dev->bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn)); diff --git a/arch/x86_64/kernel/pci-dma.c b/arch/x86_64/kernel/pci-dma.c index 9f80aad3fe2d..90f6315d02d4 100644 --- a/arch/x86_64/kernel/pci-dma.c +++ b/arch/x86_64/kernel/pci-dma.c @@ -22,8 +22,7 @@ EXPORT_SYMBOL(bad_dma_address);  int iommu_bio_merge __read_mostly = 0;  EXPORT_SYMBOL(iommu_bio_merge); -int iommu_sac_force __read_mostly = 0; -EXPORT_SYMBOL(iommu_sac_force); +static int iommu_sac_force __read_mostly = 0;  int no_iommu __read_mostly;  #ifdef CONFIG_IOMMU_DEBUG diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c index f7de02a6f497..e1ca86dfdd66 100644 --- a/drivers/acpi/processor_core.c +++ b/drivers/acpi/processor_core.c @@ -115,7 +115,6 @@ struct acpi_processor_errata errata __read_mostly;  static int acpi_processor_errata_piix4(struct pci_dev *dev)  { -	u8 rev = 0;  	u8 value1 = 0;  	u8 value2 = 0; @@ -127,9 +126,7 @@ static int acpi_processor_errata_piix4(struct pci_dev *dev)  	 * Note that 'dev' references the PIIX4 ACPI Controller.  	 */ -	pci_read_config_byte(dev, PCI_REVISION_ID, &rev); - -	switch (rev) { +	switch (dev->revision) {  	case 0:  		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found PIIX4 A-step\n"));  		break; @@ -147,7 +144,7 @@ static int acpi_processor_errata_piix4(struct pci_dev *dev)  		break;  	} -	switch (rev) { +	switch (dev->revision) {  	case 0:		/* PIIX4 A-step */  	case 1:		/* PIIX4 B-step */ diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index 21a7ca4936b4..d9fa329fd157 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c @@ -928,20 +928,18 @@ static int __devinit piix_check_450nx_errata(struct pci_dev *ata_dev)  {  	struct pci_dev *pdev = NULL;  	u16 cfg; -	u8 rev;  	int no_piix_dma = 0;  	while((pdev = pci_get_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, pdev)) != NULL)  	{  		/* Look for 450NX PXB. Check for problem configurations  		   A PCI quirk checks bit 6 already */ -		pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);  		pci_read_config_word(pdev, 0x41, &cfg);  		/* Only on the original revision: IDE DMA can hang */ -		if (rev == 0x00) +		if (pdev->revision == 0x00)  			no_piix_dma = 1;  		/* On all revisions below 5 PXB bus lock must be disabled for IDE */ -		else if (cfg & (1<<14) && rev < 5) +		else if (cfg & (1<<14) && pdev->revision < 5)  			no_piix_dma = 2;  	}  	if (no_piix_dma) diff --git a/drivers/ata/pata_ali.c b/drivers/ata/pata_ali.c index 30c4276ec882..010436795d20 100644 --- a/drivers/ata/pata_ali.c +++ b/drivers/ata/pata_ali.c @@ -455,23 +455,21 @@ static struct ata_port_operations ali_c5_port_ops = {  static void ali_init_chipset(struct pci_dev *pdev)  { -	u8 rev, tmp; +	u8 tmp;  	struct pci_dev *north, *isa_bridge; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev); -  	/*  	 * The chipset revision selects the driver operations and  	 * mode data.  	 */ -	if (rev >= 0x20 && rev < 0xC2) { +	if (pdev->revision >= 0x20 && pdev->revision < 0xC2) {  		/* 1543-E/F, 1543C-C, 1543C-D, 1543C-E */  		pci_read_config_byte(pdev, 0x4B, &tmp);  		/* Clear CD-ROM DMA write bit */  		tmp &= 0x7F;  		pci_write_config_byte(pdev, 0x4B, tmp); -	} else if (rev >= 0xC2) { +	} else if (pdev->revision >= 0xC2) {  		/* Enable cable detection logic */  		pci_read_config_byte(pdev, 0x4B, &tmp);  		pci_write_config_byte(pdev, 0x4B, tmp | 0x08); @@ -483,21 +481,21 @@ static void ali_init_chipset(struct pci_dev *pdev)  		/* Configure the ALi bridge logic. For non ALi rely on BIOS.  		   Set the south bridge enable bit */  		pci_read_config_byte(isa_bridge, 0x79, &tmp); -		if (rev == 0xC2) +		if (pdev->revision == 0xC2)  			pci_write_config_byte(isa_bridge, 0x79, tmp | 0x04); -		else if (rev > 0xC2 && rev < 0xC5) +		else if (pdev->revision > 0xC2 && pdev->revision < 0xC5)  			pci_write_config_byte(isa_bridge, 0x79, tmp | 0x02);  	} -	if (rev >= 0x20) { +	if (pdev->revision >= 0x20) {  		/*  		 * CD_ROM DMA on (0x53 bit 0). Enable this even if we want  		 * to use PIO. 0x53 bit 1 (rev 20 only) - enable FIFO control  		 * via 0x54/55.  		 */  		pci_read_config_byte(pdev, 0x53, &tmp); -		if (rev <= 0x20) +		if (pdev->revision <= 0x20)  			tmp &= ~0x02; -		if (rev >= 0xc7) +		if (pdev->revision >= 0xc7)  			tmp |= 0x03;  		else  			tmp |= 0x01;	/* CD_ROM enable for DMA */ @@ -579,25 +577,23 @@ static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id)  	};  	const struct ata_port_info *ppi[] = { NULL, NULL }; -	u8 rev, tmp; +	u8 tmp;  	struct pci_dev *isa_bridge; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev); -  	/*  	 * The chipset revision selects the driver operations and  	 * mode data.  	 */ -	if (rev < 0x20) { +	if (pdev->revision < 0x20) {  		ppi[0] = &info_early; -	} else if (rev < 0xC2) { +	} else if (pdev->revision < 0xC2) {          	ppi[0] = &info_20; -	} else if (rev == 0xC2) { +	} else if (pdev->revision == 0xC2) {          	ppi[0] = &info_c2; -	} else if (rev == 0xC3) { +	} else if (pdev->revision == 0xC3) {          	ppi[0] = &info_c3; -	} else if (rev == 0xC4) { +	} else if (pdev->revision == 0xC4) {          	ppi[0] = &info_c4;  	} else          	ppi[0] = &info_c5; @@ -605,7 +601,7 @@ static int ali_init_one(struct pci_dev *pdev, const struct pci_device_id *id)  	ali_init_chipset(pdev);  	isa_bridge = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, NULL); -	if (isa_bridge && rev >= 0x20 && rev < 0xC2) { +	if (isa_bridge && pdev->revision >= 0x20 && pdev->revision < 0xC2) {  		/* Are we paired with a UDMA capable chip */  		pci_read_config_byte(isa_bridge, 0x5E, &tmp);  		if ((tmp & 0x1E) == 0x12) diff --git a/drivers/ata/pata_amd.c b/drivers/ata/pata_amd.c index b9c44c575ce3..b09facad63e1 100644 --- a/drivers/ata/pata_amd.c +++ b/drivers/ata/pata_amd.c @@ -623,17 +623,15 @@ static int amd_init_one(struct pci_dev *pdev, const struct pci_device_id *id)  	const struct ata_port_info *ppi[] = { NULL, NULL };  	static int printed_version;  	int type = id->driver_data; -	u8 rev;  	u8 fifo;  	if (!printed_version++)  		dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);  	pci_read_config_byte(pdev, 0x41, &fifo);  	/* Check for AMD7409 without swdma errata and if found adjust type */ -	if (type == 1 && rev > 0x7) +	if (type == 1 && pdev->revision > 0x7)  		type = 2;  	/* Check for AMD7411 */ diff --git a/drivers/ata/pata_cs5530.c b/drivers/ata/pata_cs5530.c index 3fca5898642b..68f150a1e2f4 100644 --- a/drivers/ata/pata_cs5530.c +++ b/drivers/ata/pata_cs5530.c @@ -266,7 +266,7 @@ static int cs5530_init_chip(void)  	}  	pci_set_master(cs5530_0); -	pci_set_mwi(cs5530_0); +	pci_try_set_mwi(cs5530_0);  	/*  	 * Set PCI CacheLineSize to 16-bytes: diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c index b67bbf6516ba..430673be1df7 100644 --- a/drivers/ata/pata_it821x.c +++ b/drivers/ata/pata_it821x.c @@ -587,8 +587,7 @@ static int it821x_port_start(struct ata_port *ap)  	itdev->want[1][1] = ATA_ANY;  	itdev->last_device = -1; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &conf); -	if (conf == 0x10) { +	if (pdev->revision == 0x11) {  		itdev->timing10 = 1;  		/* Need to disable ATAPI DMA for this case */  		if (!itdev->smart) diff --git a/drivers/ata/pata_serverworks.c b/drivers/ata/pata_serverworks.c index 0231aba51ca4..89691541fe59 100644 --- a/drivers/ata/pata_serverworks.c +++ b/drivers/ata/pata_serverworks.c @@ -410,11 +410,8 @@ static int serverworks_fixup_osb4(struct pci_dev *pdev)  static int serverworks_fixup_csb(struct pci_dev *pdev)  { -	u8 rev;  	u8 btr; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev); -  	/* Third Channel Test */  	if (!(PCI_FUNC(pdev->devfn) & 1)) {  		struct pci_dev * findev = NULL; @@ -456,7 +453,7 @@ static int serverworks_fixup_csb(struct pci_dev *pdev)  	if (!(PCI_FUNC(pdev->devfn) & 1))  		btr |= 0x2;  	else -		btr |= (rev >= SVWKS_CSB5_REVISION_NEW) ? 0x3 : 0x2; +		btr |= (pdev->revision >= SVWKS_CSB5_REVISION_NEW) ? 0x3 : 0x2;  	pci_write_config_byte(pdev, 0x5A, btr);  	return btr; diff --git a/drivers/ata/pata_sis.c b/drivers/ata/pata_sis.c index 657b1ee2f5c1..9a829a7cbc60 100644 --- a/drivers/ata/pata_sis.c +++ b/drivers/ata/pata_sis.c @@ -931,9 +931,7 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)  		if (host != NULL) {  			chipset = sets;			/* Match found */  			if (sets->device == 0x630) {	/* SIS630 */ -				u8 host_rev; -				pci_read_config_byte(host, PCI_REVISION_ID, &host_rev); -				if (host_rev >= 0x30)	/* 630 ET */ +				if (host->revision >= 0x30)	/* 630 ET */  					chipset = &sis100_early;  			}  			break; @@ -977,7 +975,6 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)  		u16 trueid;  		u8 prefctl;  		u8 idecfg; -		u8 sbrev;  		/* Try the second unmasking technique */  		pci_read_config_byte(pdev, 0x4a, &idecfg); @@ -990,11 +987,10 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)  			lpc_bridge = pci_get_slot(pdev->bus, 0x10); /* Bus 0 Dev 2 Fn 0 */  			if (lpc_bridge == NULL)  				break; -			pci_read_config_byte(lpc_bridge, PCI_REVISION_ID, &sbrev);  			pci_read_config_byte(pdev, 0x49, &prefctl);  			pci_dev_put(lpc_bridge); -			if (sbrev == 0x10 && (prefctl & 0x80)) { +			if (lpc_bridge->revision == 0x10 && (prefctl & 0x80)) {  				chipset = &sis133_early;  				break;  			} diff --git a/drivers/ata/pata_sl82c105.c b/drivers/ata/pata_sl82c105.c index bde734189623..8c2813aa6cdb 100644 --- a/drivers/ata/pata_sl82c105.c +++ b/drivers/ata/pata_sl82c105.c @@ -270,7 +270,6 @@ static struct ata_port_operations sl82c105_port_ops = {  static int sl82c105_bridge_revision(struct pci_dev *pdev)  {  	struct pci_dev *bridge; -	u8 rev;  	/*  	 * The bridge should be part of the same device, but function 0. @@ -292,10 +291,8 @@ static int sl82c105_bridge_revision(struct pci_dev *pdev)  	/*  	 * We need to find function 0's revision, not function 1  	 */ -	pci_read_config_byte(bridge, PCI_REVISION_ID, &rev); -  	pci_dev_put(bridge); -	return rev; +	return bridge->revision;  } diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index f0cadbe6aa11..f645fe22cd1e 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c @@ -506,7 +506,6 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)  	struct pci_dev *isa = NULL;  	const struct via_isa_bridge *config;  	static int printed_version; -	u8 t;  	u8 enable;  	u32 timing; @@ -520,9 +519,8 @@ static int via_init_one(struct pci_dev *pdev, const struct pci_device_id *id)  			!!(config->flags & VIA_BAD_ID),  			config->id, NULL))) { -			pci_read_config_byte(isa, PCI_REVISION_ID, &t); -			if (t >= config->rev_min && -			    t <= config->rev_max) +			if (isa->revision >= config->rev_min && +			    isa->revision <= config->rev_max)  				break;  			pci_dev_put(isa);  		} diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index 8a77a0ae83ad..5d576435fccc 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c @@ -1765,12 +1765,9 @@ static void mv5_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val)  static void mv5_reset_bus(struct pci_dev *pdev, void __iomem *mmio)  { -	u8 rev_id;  	int early_5080; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev_id); - -	early_5080 = (pdev->device == 0x5080) && (rev_id == 0); +	early_5080 = (pdev->device == 0x5080) && (pdev->revision == 0);  	if (!early_5080) {  		u32 tmp = readl(mmio + MV_PCI_EXP_ROM_BAR_CTL); @@ -2387,17 +2384,14 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)  {  	struct pci_dev *pdev = to_pci_dev(host->dev);  	struct mv_host_priv *hpriv = host->private_data; -	u8 rev_id;  	u32 hp_flags = hpriv->hp_flags; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev_id); -  	switch(board_idx) {  	case chip_5080:  		hpriv->ops = &mv5xxx_ops;  		hp_flags |= MV_HP_GEN_I; -		switch (rev_id) { +		switch (pdev->revision) {  		case 0x1:  			hp_flags |= MV_HP_ERRATA_50XXB0;  			break; @@ -2417,7 +2411,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)  		hpriv->ops = &mv5xxx_ops;  		hp_flags |= MV_HP_GEN_I; -		switch (rev_id) { +		switch (pdev->revision) {  		case 0x0:  			hp_flags |= MV_HP_ERRATA_50XXB0;  			break; @@ -2437,7 +2431,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)  		hpriv->ops = &mv6xxx_ops;  		hp_flags |= MV_HP_GEN_II; -		switch (rev_id) { +		switch (pdev->revision) {  		case 0x7:  			hp_flags |= MV_HP_ERRATA_60X1B2;  			break; @@ -2457,7 +2451,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)  		hpriv->ops = &mv6xxx_ops;  		hp_flags |= MV_HP_GEN_IIE; -		switch (rev_id) { +		switch (pdev->revision) {  		case 0x0:  			hp_flags |= MV_HP_ERRATA_XX42A0;  			break; @@ -2585,14 +2579,12 @@ static void mv_print_info(struct ata_host *host)  {  	struct pci_dev *pdev = to_pci_dev(host->dev);  	struct mv_host_priv *hpriv = host->private_data; -	u8 rev_id, scc; +	u8 scc;  	const char *scc_s, *gen;  	/* Use this to determine the HW stepping of the chip so we know  	 * what errata to workaround  	 */ -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev_id); -  	pci_read_config_byte(pdev, PCI_CLASS_DEVICE, &scc);  	if (scc == 0)  		scc_s = "SCSI"; diff --git a/drivers/atm/eni.c b/drivers/atm/eni.c index 0d3a38b1cb0b..77637e780d41 100644 --- a/drivers/atm/eni.c +++ b/drivers/atm/eni.c @@ -1704,7 +1704,6 @@ static int __devinit eni_do_init(struct atm_dev *dev)  	struct pci_dev *pci_dev;  	unsigned long real_base;  	void __iomem *base; -	unsigned char revision;  	int error,i,last;  	DPRINTK(">eni_init\n"); @@ -1715,12 +1714,6 @@ static int __devinit eni_do_init(struct atm_dev *dev)  	pci_dev = eni_dev->pci_dev;  	real_base = pci_resource_start(pci_dev, 0);  	eni_dev->irq = pci_dev->irq; -	error = pci_read_config_byte(pci_dev,PCI_REVISION_ID,&revision); -	if (error) { -		printk(KERN_ERR DEV_LABEL "(itf %d): init error 0x%02x\n", -		    dev->number,error); -		return -EINVAL; -	}  	if ((error = pci_write_config_word(pci_dev,PCI_COMMAND,  	    PCI_COMMAND_MEMORY |  	    (eni_dev->asic ? PCI_COMMAND_PARITY | PCI_COMMAND_SERR : 0)))) { @@ -1729,7 +1722,7 @@ static int __devinit eni_do_init(struct atm_dev *dev)  		return -EIO;  	}  	printk(KERN_NOTICE DEV_LABEL "(itf %d): rev.%d,base=0x%lx,irq=%d,", -	    dev->number,revision,real_base,eni_dev->irq); +	    dev->number,pci_dev->revision,real_base,eni_dev->irq);  	if (!(base = ioremap_nocache(real_base,MAP_MAX_SIZE))) {  		printk("\n");  		printk(KERN_ERR DEV_LABEL "(itf %d): can't set up page " diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c index 3800bc0cb2ef..8f995ce8d73b 100644 --- a/drivers/atm/idt77252.c +++ b/drivers/atm/idt77252.c @@ -3679,7 +3679,6 @@ idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)  	unsigned long membase, srambase;  	struct idt77252_dev *card;  	struct atm_dev *dev; -	ushort revision = 0;  	int i, err; @@ -3688,19 +3687,13 @@ idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)  		return err;  	} -	if (pci_read_config_word(pcidev, PCI_REVISION_ID, &revision)) { -		printk("idt77252-%d: can't read PCI_REVISION_ID\n", index); -		err = -ENODEV; -		goto err_out_disable_pdev; -	} -  	card = kzalloc(sizeof(struct idt77252_dev), GFP_KERNEL);  	if (!card) {  		printk("idt77252-%d: can't allocate private data\n", index);  		err = -ENOMEM;  		goto err_out_disable_pdev;  	} -	card->revision = revision; +	card->revision = pcidev->revision;  	card->index = index;  	card->pcidev = pcidev;  	sprintf(card->name, "idt77252-%d", card->index); @@ -3762,8 +3755,8 @@ idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)  	}  	printk("%s: ABR SAR (Rev %c): MEM %08lx SRAM %08lx [%u KB]\n", -	       card->name, ((revision > 1) && (revision < 25)) ? -	       'A' + revision - 1 : '?', membase, srambase, +	       card->name, ((card->revision > 1) && (card->revision < 25)) ? +	       'A' + card->revision - 1 : '?', membase, srambase,  	       card->sramsize / 1024);  	if (init_card(dev)) { diff --git a/drivers/atm/iphase.c b/drivers/atm/iphase.c index bb7ef570514c..a3b605a0ca17 100644 --- a/drivers/atm/iphase.c +++ b/drivers/atm/iphase.c @@ -2290,7 +2290,6 @@ static int __devinit ia_init(struct atm_dev *dev)  	unsigned long real_base;  	void __iomem *base;  	unsigned short command;   -	unsigned char revision;    	int error, i;   	/* The device has been identified and registered. Now we read    @@ -2305,16 +2304,14 @@ static int __devinit ia_init(struct atm_dev *dev)  	real_base = pci_resource_start (iadev->pci, 0);  	iadev->irq = iadev->pci->irq; -	if ((error = pci_read_config_word(iadev->pci, PCI_COMMAND,&command))    -		    || (error = pci_read_config_byte(iadev->pci,    -				PCI_REVISION_ID,&revision)))    -	{   +	error = pci_read_config_word(iadev->pci, PCI_COMMAND, &command); +	if (error) {  		printk(KERN_ERR DEV_LABEL "(itf %d): init error 0x%x\n",    				dev->number,error);    		return -EINVAL;    	}    	IF_INIT(printk(DEV_LABEL "(itf %d): rev.%d,realbase=0x%lx,irq=%d\n",   -			dev->number, revision, real_base, iadev->irq);)   +			dev->number, iadev->pci->revision, real_base, iadev->irq);)  	/* find mapping size of board */   @@ -2353,7 +2350,7 @@ static int __devinit ia_init(struct atm_dev *dev)  		return error;    	}    	IF_INIT(printk(DEV_LABEL " (itf %d): rev.%d,base=%p,irq=%d\n",   -			dev->number, revision, base, iadev->irq);)   +			dev->number, iadev->pci->revision, base, iadev->irq);)  	/* filling the iphase dev structure */    	iadev->mem = iadev->pci_map_size /2;   diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c index 09f477d4237a..0e2c1ae650e7 100644 --- a/drivers/atm/lanai.c +++ b/drivers/atm/lanai.c @@ -246,8 +246,8 @@ struct lanai_vcc {  };  enum lanai_type { -	lanai2	= PCI_VENDOR_ID_EF_ATM_LANAI2, -	lanaihb	= PCI_VENDOR_ID_EF_ATM_LANAIHB +	lanai2	= PCI_DEVICE_ID_EF_ATM_LANAI2, +	lanaihb	= PCI_DEVICE_ID_EF_ATM_LANAIHB  };  struct lanai_dev_stats { @@ -293,7 +293,6 @@ struct lanai_dev {  	struct atm_vcc *cbrvcc;  	int number;  	int board_rev; -	u8 pci_revision;  /* TODO - look at race conditions with maintence of conf1/conf2 */  /* TODO - transmit locking: should we use _irq not _irqsave? */  /* TODO - organize above in some rational fashion (see <asm/cache.h>) */ @@ -1969,14 +1968,6 @@ static int __devinit lanai_pci_start(struct lanai_dev *lanai)  		    "(itf %d): No suitable DMA available.\n", lanai->number);  		return -EBUSY;  	} -	/* Get the pci revision byte */ -	result = pci_read_config_byte(pci, PCI_REVISION_ID, -	    &lanai->pci_revision); -	if (result != PCIBIOS_SUCCESSFUL) { -		printk(KERN_ERR DEV_LABEL "(itf %d): can't read " -		    "PCI_REVISION_ID: %d\n", lanai->number, result); -		return -EINVAL; -	}  	result = pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &w);  	if (result != PCIBIOS_SUCCESSFUL) {  		printk(KERN_ERR DEV_LABEL "(itf %d): can't read " @@ -2254,7 +2245,7 @@ static int __devinit lanai_dev_open(struct atm_dev *atmdev)  	lanai_timed_poll_start(lanai);  	printk(KERN_NOTICE DEV_LABEL "(itf %d): rev.%d, base=0x%lx, irq=%u "  	    "(%02X-%02X-%02X-%02X-%02X-%02X)\n", lanai->number, -	    (int) lanai->pci_revision, (unsigned long) lanai->base, +	    (int) lanai->pci->revision, (unsigned long) lanai->base,  	    lanai->pci->irq,  	    atmdev->esi[0], atmdev->esi[1], atmdev->esi[2],  	    atmdev->esi[3], atmdev->esi[4], atmdev->esi[5]); @@ -2491,7 +2482,7 @@ static int lanai_proc_read(struct atm_dev *atmdev, loff_t *pos, char *page)  		    (unsigned int) lanai->magicno, lanai->num_vci);  	if (left-- == 0)  		return sprintf(page, "revision: board=%d, pci_if=%d\n", -		    lanai->board_rev, (int) lanai->pci_revision); +		    lanai->board_rev, (int) lanai->pci->revision);  	if (left-- == 0)  		return sprintf(page, "EEPROM ESI: "  		    "%02X:%02X:%02X:%02X:%02X:%02X\n", @@ -2631,14 +2622,8 @@ static int __devinit lanai_init_one(struct pci_dev *pci,  }  static struct pci_device_id lanai_pci_tbl[] = { -	{ -		PCI_VENDOR_ID_EF, PCI_VENDOR_ID_EF_ATM_LANAI2, -		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 -	}, -	{ -		PCI_VENDOR_ID_EF, PCI_VENDOR_ID_EF_ATM_LANAIHB, -		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 -	}, +	{ PCI_VDEVICE(EF, PCI_DEVICE_ID_EF_ATM_LANAI2) }, +	{ PCI_VDEVICE(EF, PCI_DEVICE_ID_EF_ATM_LANAIHB) },  	{ 0, }	/* terminal entry */  };  MODULE_DEVICE_TABLE(pci, lanai_pci_tbl); diff --git a/drivers/atm/zatm.c b/drivers/atm/zatm.c index 2ad2527cf5b3..020a87a476c8 100644 --- a/drivers/atm/zatm.c +++ b/drivers/atm/zatm.c @@ -1182,7 +1182,6 @@ static int __devinit zatm_init(struct atm_dev *dev)  	struct zatm_dev *zatm_dev;  	struct pci_dev *pci_dev;  	unsigned short command; -	unsigned char revision;  	int error,i,last;  	unsigned long t0,t1,t2; @@ -1192,8 +1191,7 @@ static int __devinit zatm_init(struct atm_dev *dev)  	pci_dev = zatm_dev->pci_dev;  	zatm_dev->base = pci_resource_start(pci_dev, 0);  	zatm_dev->irq = pci_dev->irq; -	if ((error = pci_read_config_word(pci_dev,PCI_COMMAND,&command)) || -	    (error = pci_read_config_byte(pci_dev,PCI_REVISION_ID,&revision))) { +	if ((error = pci_read_config_word(pci_dev,PCI_COMMAND,&command))) {  		printk(KERN_ERR DEV_LABEL "(itf %d): init error 0x%02x\n",  		    dev->number,error);  		return -EINVAL; @@ -1206,7 +1204,7 @@ static int __devinit zatm_init(struct atm_dev *dev)  	}  	eprom_get_esi(dev);  	printk(KERN_NOTICE DEV_LABEL "(itf %d): rev.%d,base=0x%x,irq=%d,", -	    dev->number,revision,zatm_dev->base,zatm_dev->irq); +	    dev->number,pci_dev->revision,zatm_dev->base,zatm_dev->irq);  	/* reset uPD98401 */  	zout(0,SWR);  	while (!(zin(GSR) & uPD98401_INT_IND)); diff --git a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c index e6c534e62846..df0ddf14b85c 100644 --- a/drivers/char/agp/amd-k7-agp.c +++ b/drivers/char/agp/amd-k7-agp.c @@ -462,9 +462,7 @@ static int __devinit agp_amdk7_probe(struct pci_dev *pdev,  	 * erratum 46: Setup violation on AGP SBA pins - Disable side band addressing.  	 * With this lot disabled, we should prevent lockups. */  	if (agp_bridge->dev->device == PCI_DEVICE_ID_AMD_FE_GATE_700E) { -		u8 revision=0; -		pci_read_config_byte(pdev, PCI_REVISION_ID, &revision); -		if (revision == 0x10 || revision == 0x11) { +		if (pdev->revision == 0x10 || pdev->revision == 0x11) {  			agp_bridge->flags = AGP_ERRATA_FASTWRITES;  			agp_bridge->flags |= AGP_ERRATA_SBA;  			agp_bridge->flags |= AGP_ERRATA_1X; diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c index 801abdd29066..d95662e96326 100644 --- a/drivers/char/agp/amd64-agp.c +++ b/drivers/char/agp/amd64-agp.c @@ -367,10 +367,8 @@ static __devinit int cache_nbs (struct pci_dev *pdev, u32 cap_ptr)  static void __devinit amd8151_init(struct pci_dev *pdev, struct agp_bridge_data *bridge)  {  	char *revstring; -	u8 rev_id; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev_id); -	switch (rev_id) { +	switch (pdev->revision) {  	case 0x01: revstring="A0"; break;  	case 0x02: revstring="A1"; break;  	case 0x11: revstring="B0"; break; @@ -386,7 +384,7 @@ static void __devinit amd8151_init(struct pci_dev *pdev, struct agp_bridge_data  	 * Work around errata.  	 * Chips before B2 stepping incorrectly reporting v3.5  	 */ -	if (rev_id < 0x13) { +	if (pdev->revision < 0x13) {  		printk (KERN_INFO PFX "Correcting AGP revision (reports 3.5, is really 3.0)\n");  		bridge->major_version = 3;  		bridge->minor_version = 0; diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c index 5cfcff532545..e783dbf0f162 100644 --- a/drivers/clocksource/acpi_pm.c +++ b/drivers/clocksource/acpi_pm.c @@ -105,14 +105,11 @@ static inline void acpi_pm_need_workaround(void)   */  static void __devinit acpi_pm_check_blacklist(struct pci_dev *dev)  { -	u8 rev; -  	if (acpi_pm_good)  		return; -	pci_read_config_byte(dev, PCI_REVISION_ID, &rev);  	/* the bug has been fixed in PIIX4M */ -	if (rev < 3) { +	if (dev->revision < 3) {  		printk(KERN_WARNING "* Found PM-Timer Bug on the chipset."  		       " Due to workarounds for a bug,\n"  		       "* this clock source is slow. Consider trying" diff --git a/drivers/i2c/busses/i2c-viapro.c b/drivers/i2c/busses/i2c-viapro.c index a0f7e4a303b5..edc275002f80 100644 --- a/drivers/i2c/busses/i2c-viapro.c +++ b/drivers/i2c/busses/i2c-viapro.c @@ -397,8 +397,7 @@ found:  	case PCI_DEVICE_ID_VIA_82C686_4:  		/* The VT82C686B (rev 0x40) does support I2C block  		   transactions, but the VT82C686A (rev 0x30) doesn't */ -		if (!pci_read_config_byte(pdev, PCI_REVISION_ID, &temp) -		 && temp >= 0x40) +		if (pdev->revision >= 0x40)  			vt596_features |= FEATURE_I2CBLOCK;  		break;  	} diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index 8a6b27b3bcc3..ba0fb92b0417 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c @@ -508,7 +508,7 @@ static unsigned int __devinit init_chipset_ali15x3 (struct pci_dev *dev, const c  	u8 tmpbyte;  	struct pci_dev *north = pci_get_slot(dev->bus, PCI_DEVFN(0,0)); -	pci_read_config_byte(dev, PCI_REVISION_ID, &m5229_revision); +	m5229_revision = dev->revision;  	isa_dev = pci_get_device(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, NULL); diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c index 84ed30cdb324..8d30b99a54d8 100644 --- a/drivers/ide/pci/amd74xx.c +++ b/drivers/ide/pci/amd74xx.c @@ -123,8 +123,7 @@ static int amd74xx_get_info(char *buffer, char **addr, off_t offset, int count)  	amd_print("Driver Version:                     2.13");  	amd_print("South Bridge:                       %s", pci_name(bmide_dev)); -	pci_read_config_byte(dev, PCI_REVISION_ID, &t); -	amd_print("Revision:                           IDE %#x", t); +	amd_print("Revision:                           IDE %#x", dev->revision);  	amd_print("Highest DMA rate:                   UDMA%s", amd_dma[fls(amd_config->udma_mask) - 1]);  	amd_print("BM-DMA base:                        %#lx", amd_base); @@ -312,8 +311,7 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch   */  	if (amd_config->flags & AMD_CHECK_SWDMA) { -		pci_read_config_byte(dev, PCI_REVISION_ID, &t); -		if (t <= 7) +		if (dev->revision <= 7)  			amd_config->flags |= AMD_BAD_SWDMA;  	} @@ -383,7 +381,7 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev, const ch  	pci_read_config_byte(dev, PCI_REVISION_ID, &t);  	printk(KERN_INFO "%s: %s (rev %02x) UDMA%s controller\n", -		amd_chipset->name, pci_name(dev), t, +		amd_chipset->name, pci_name(dev), dev->revision,  		amd_dma[fls(amd_config->udma_mask) - 1]);  /* diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c index 8631b6c8aa15..1e89dd6e5bbf 100644 --- a/drivers/ide/pci/cmd64x.c +++ b/drivers/ide/pci/cmd64x.c @@ -88,7 +88,6 @@ static char * print_cmd64x_get_info (char *buf, struct pci_dev *dev, int index)  	u8 reg72 = 0, reg73 = 0;			/* primary */  	u8 reg7a = 0, reg7b = 0;			/* secondary */  	u8 reg50 = 1, reg51 = 1, reg57 = 0, reg71 = 0;	/* extra */ -	u8 rev = 0;  	p += sprintf(p, "\nController: %d\n", index);  	p += sprintf(p, "PCI-%x Chipset.\n", dev->device); @@ -103,9 +102,8 @@ static char * print_cmd64x_get_info (char *buf, struct pci_dev *dev, int index)  	(void) pci_read_config_byte(dev, UDIDETCR1, ®7b);  	/* PCI0643/6 originally didn't have the primary channel enable bit */ -	(void) pci_read_config_byte(dev, PCI_REVISION_ID, &rev);  	if ((dev->device == PCI_DEVICE_ID_CMD_643) || -	    (dev->device == PCI_DEVICE_ID_CMD_646 && rev < 3)) +	    (dev->device == PCI_DEVICE_ID_CMD_646 && dev->revision < 3))  		reg51 |= CNTRL_ENA_1ST;  	p += sprintf(p, "---------------- Primary Channel " @@ -604,14 +602,11 @@ static int __devinit init_setup_cmd64x(struct pci_dev *dev, ide_pci_device_t *d)  static int __devinit init_setup_cmd646(struct pci_dev *dev, ide_pci_device_t *d)  { -	u8 rev = 0; -  	/*  	 * The original PCI0646 didn't have the primary channel enable bit,  	 * it appeared starting with PCI0646U (i.e. revision ID 3).  	 */ -	pci_read_config_byte(dev, PCI_REVISION_ID, &rev); -	if (rev < 3) +	if (dev->revision < 3)  		d->enablebits[0].reg = 0;  	return ide_setup_pci_device(dev, d); diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c index 1eec1f308d16..b5c00d15a704 100644 --- a/drivers/ide/pci/cs5530.c +++ b/drivers/ide/pci/cs5530.c @@ -236,7 +236,7 @@ static unsigned int __devinit init_chipset_cs5530 (struct pci_dev *dev, const ch  	 */  	pci_set_master(cs5530_0); -	pci_set_mwi(cs5530_0); +	pci_try_set_mwi(cs5530_0);  	/*  	 * Set PCI CacheLineSize to 16-bytes: diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c index 4b6bae8eee82..e9b07a97c340 100644 --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c @@ -1413,11 +1413,9 @@ static int __devinit init_setup_hpt372n(struct pci_dev *dev, ide_pci_device_t *d  static int __devinit init_setup_hpt371(struct pci_dev *dev, ide_pci_device_t *d)  {  	struct hpt_info *info; -	u8 rev = 0, mcr1 = 0; +	u8 mcr1 = 0; -	pci_read_config_byte(dev, PCI_REVISION_ID, &rev); - -	if (rev > 1) { +	if (dev->revision > 1) {  		d->name = "HPT371N";  		info = &hpt371n; @@ -1442,11 +1440,8 @@ static int __devinit init_setup_hpt371(struct pci_dev *dev, ide_pci_device_t *d)  static int __devinit init_setup_hpt372a(struct pci_dev *dev, ide_pci_device_t *d)  {  	struct hpt_info *info; -	u8 rev = 0; - -	pci_read_config_byte(dev, PCI_REVISION_ID, &rev); -	if (rev > 1) { +	if (dev->revision > 1) {  		d->name = "HPT372N";  		info = &hpt372n; @@ -1460,11 +1455,8 @@ static int __devinit init_setup_hpt372a(struct pci_dev *dev, ide_pci_device_t *d  static int __devinit init_setup_hpt302(struct pci_dev *dev, ide_pci_device_t *d)  {  	struct hpt_info *info; -	u8 rev = 0; -	pci_read_config_byte(dev, PCI_REVISION_ID, &rev); - -	if (rev > 1) { +	if (dev->revision > 1) {  		d->name = "HPT302N";  		info = &hpt302n; @@ -1478,7 +1470,7 @@ static int __devinit init_setup_hpt302(struct pci_dev *dev, ide_pci_device_t *d)  static int __devinit init_setup_hpt366(struct pci_dev *dev, ide_pci_device_t *d)  {  	struct pci_dev *dev2; -	u8 rev = 0; +	u8 rev = dev->revision;  	static char   *chipset_names[] = { "HPT366", "HPT366",  "HPT368",  					   "HPT370", "HPT370A", "HPT372",  					   "HPT372N" }; @@ -1489,8 +1481,6 @@ static int __devinit init_setup_hpt366(struct pci_dev *dev, ide_pci_device_t *d)  	if (PCI_FUNC(dev->devfn) & 1)  		return -ENODEV; -	pci_read_config_byte(dev, PCI_REVISION_ID, &rev); -  	switch (rev) {  	case 0:  	case 1: diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c index 2e0b29ef596a..1372c35be035 100644 --- a/drivers/ide/pci/piix.c +++ b/drivers/ide/pci/piix.c @@ -572,18 +572,16 @@ static void __devinit piix_check_450nx(void)  {  	struct pci_dev *pdev = NULL;  	u16 cfg; -	u8 rev;  	while((pdev=pci_get_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, pdev))!=NULL)  	{  		/* Look for 450NX PXB. Check for problem configurations  		   A PCI quirk checks bit 6 already */ -		pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);  		pci_read_config_word(pdev, 0x41, &cfg);  		/* Only on the original revision: IDE DMA can hang */ -		if(rev == 0x00) +		if (pdev->revision == 0x00)  			no_piix_dma = 1;  		/* On all revisions below 5 PXB bus lock must be disabled for IDE */ -		else if(cfg & (1<<14) && rev < 5) +		else if (cfg & (1<<14) && pdev->revision < 5)  			no_piix_dma = 2;  	}  	if(no_piix_dma) diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index 1371b5bf6bf0..ed04e0c8dd4c 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c @@ -55,7 +55,6 @@ static const char *svwks_bad_ata100[] = {  	NULL  }; -static u8 svwks_revision = 0;  static struct pci_dev *isa_dev;  static int check_in_drive_lists (ide_drive_t *drive, const char **list) @@ -71,9 +70,6 @@ static u8 svwks_udma_filter(ide_drive_t *drive)  	struct pci_dev *dev     = HWIF(drive)->pci_dev;  	u8 mask = 0; -	if (!svwks_revision) -		pci_read_config_byte(dev, PCI_REVISION_ID, &svwks_revision); -  	if (dev->device == PCI_DEVICE_ID_SERVERWORKS_HT1000IDE)  		return 0x1f;  	if (dev->device == PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) { @@ -88,9 +84,9 @@ static u8 svwks_udma_filter(ide_drive_t *drive)  			return 0;  		/* Check the OSB4 DMA33 enable bit */  		return ((reg & 0x00004000) == 0x00004000) ? 0x07 : 0; -	} else if (svwks_revision < SVWKS_CSB5_REVISION_NEW) { +	} else if (dev->revision < SVWKS_CSB5_REVISION_NEW) {  		return 0x07; -	} else if (svwks_revision >= SVWKS_CSB5_REVISION_NEW) { +	} else if (dev->revision >= SVWKS_CSB5_REVISION_NEW) {  		u8 btr = 0, mode;  		pci_read_config_byte(dev, 0x5A, &btr);  		mode = btr & 0x3; @@ -234,9 +230,6 @@ static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const cha  	unsigned int reg;  	u8 btr; -	/* save revision id to determine DMA capability */ -	pci_read_config_byte(dev, PCI_REVISION_ID, &svwks_revision); -  	/* force Master Latency Timer value to 64 PCICLKs */  	pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x40); @@ -315,7 +308,7 @@ static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const cha  		if (!(PCI_FUNC(dev->devfn) & 1))  			btr |= 0x2;  		else -			btr |= (svwks_revision >= SVWKS_CSB5_REVISION_NEW) ? 0x3 : 0x2; +			btr |= (dev->revision >= SVWKS_CSB5_REVISION_NEW) ? 0x3 : 0x2;  		pci_write_config_byte(dev, 0x5A, btr);  	}  	/* Setup HT1000 SouthBridge Controller - Single Channel Only */ diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c index f875183ac8d9..756a9b6eb462 100644 --- a/drivers/ide/pci/sis5513.c +++ b/drivers/ide/pci/sis5513.c @@ -659,9 +659,7 @@ static unsigned int __devinit init_chipset_sis5513 (struct pci_dev *dev, const c  		/* Special case for SiS630 : 630S/ET is ATA_100a */  		if (SiSHostChipInfo[i].host_id == PCI_DEVICE_ID_SI_630) { -			u8 hostrev; -			pci_read_config_byte(host, PCI_REVISION_ID, &hostrev); -			if (hostrev >= 0x30) +			if (host->revision >= 0x30)  				chipset_family = ATA_100a;  		}  		pci_dev_put(host); @@ -702,7 +700,6 @@ static unsigned int __devinit init_chipset_sis5513 (struct pci_dev *dev, const c  			u16 trueid;  			u8 prefctl;  			u8 idecfg; -			u8 sbrev;  			pci_read_config_byte(dev, 0x4a, &idecfg);  			pci_write_config_byte(dev, 0x4a, idecfg | 0x10); @@ -712,11 +709,10 @@ static unsigned int __devinit init_chipset_sis5513 (struct pci_dev *dev, const c  			if (trueid == 0x5517) { /* SiS 961/961B */  				lpc_bridge = pci_get_slot(dev->bus, 0x10); /* Bus 0, Dev 2, Fn 0 */ -				pci_read_config_byte(lpc_bridge, PCI_REVISION_ID, &sbrev);  				pci_read_config_byte(dev, 0x49, &prefctl);  				pci_dev_put(lpc_bridge); -				if (sbrev == 0x10 && (prefctl & 0x80)) { +				if (lpc_bridge->revision == 0x10 && (prefctl & 0x80)) {  					printk(KERN_INFO "SIS5513: SiS 961B MuTIOL IDE UDMA133 controller\n");  					chipset_family = ATA_133a;  				} else { diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c index 487879842af4..a7323d278c49 100644 --- a/drivers/ide/pci/sl82c105.c +++ b/drivers/ide/pci/sl82c105.c @@ -338,7 +338,6 @@ static void sl82c105_tune_drive(ide_drive_t *drive, u8 pio)  static unsigned int sl82c105_bridge_revision(struct pci_dev *dev)  {  	struct pci_dev *bridge; -	u8 rev;  	/*  	 * The bridge should be part of the same device, but function 0. @@ -360,10 +359,9 @@ static unsigned int sl82c105_bridge_revision(struct pci_dev *dev)  	/*  	 * We need to find function 0's revision, not function 1  	 */ -	pci_read_config_byte(bridge, PCI_REVISION_ID, &rev);  	pci_dev_put(bridge); -	return rev; +	return bridge->revision;  }  /* diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c index d21dd2e7eeb3..27e92fb9f95e 100644 --- a/drivers/ide/pci/via82cxxx.c +++ b/drivers/ide/pci/via82cxxx.c @@ -237,16 +237,14 @@ static int via82cxxx_ide_dma_check (ide_drive_t *drive)  static struct via_isa_bridge *via_config_find(struct pci_dev **isa)  {  	struct via_isa_bridge *via_config; -	u8 t;  	for (via_config = via_isa_bridges; via_config->id; via_config++)  		if ((*isa = pci_get_device(PCI_VENDOR_ID_VIA +  			!!(via_config->flags & VIA_BAD_ID),  			via_config->id, NULL))) { -			pci_read_config_byte(*isa, PCI_REVISION_ID, &t); -			if (t >= via_config->rev_min && -			    t <= via_config->rev_max) +			if ((*isa)->revision >= via_config->rev_min && +			    (*isa)->revision <= via_config->rev_max)  				break;  			pci_dev_put(*isa);  		} @@ -404,10 +402,9 @@ static unsigned int __devinit init_chipset_via82cxxx(struct pci_dev *dev, const  	 * Print the boot message.  	 */ -	pci_read_config_byte(isa, PCI_REVISION_ID, &t);  	printk(KERN_INFO "VP_IDE: VIA %s (rev %02x) IDE %sDMA%s "  		"controller on pci%s\n", -		via_config->name, t, +		via_config->name, isa->revision,  		via_config->udma_mask ? "U" : "MW",  		via_dma[via_config->udma_mask ?  			(fls(via_config->udma_mask) - 1) : 0], diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c index e3a223209710..834e86f6c04e 100644 --- a/drivers/infiniband/hw/ipath/ipath_driver.c +++ b/drivers/infiniband/hw/ipath/ipath_driver.c @@ -270,7 +270,6 @@ static int __devinit ipath_init_one(struct pci_dev *pdev,  	struct ipath_devdata *dd;  	unsigned long long addr;  	u32 bar0 = 0, bar1 = 0; -	u8 rev;  	dd = ipath_alloc_devdata(pdev);  	if (IS_ERR(dd)) { @@ -432,13 +431,7 @@ static int __devinit ipath_init_one(struct pci_dev *pdev,  	dd->ipath_deviceid = ent->device;	/* save for later use */  	dd->ipath_vendorid = ent->vendor; -	ret = pci_read_config_byte(pdev, PCI_REVISION_ID, &rev); -	if (ret) { -		ipath_dev_err(dd, "Failed to read PCI revision ID unit " -			      "%u: err %d\n", dd->ipath_unit, -ret); -		goto bail_regions;	/* shouldn't ever happen */ -	} -	dd->ipath_pcirev = rev; +	dd->ipath_pcirev = pdev->revision;  #if defined(__powerpc__)  	/* There isn't a generic way to specify writethrough mappings */ diff --git a/drivers/isdn/hisax/bkm_a8.c b/drivers/isdn/hisax/bkm_a8.c index 340310645346..6339bb443f62 100644 --- a/drivers/isdn/hisax/bkm_a8.c +++ b/drivers/isdn/hisax/bkm_a8.c @@ -287,7 +287,6 @@ setup_sct_quadro(struct IsdnCard *card)  #ifdef CONFIG_PCI  	struct IsdnCardState *cs = card->cs;  	char tmp[64]; -	u_char pci_rev_id;  	u_int found = 0;  	u_int pci_ioaddr1, pci_ioaddr2, pci_ioaddr3, pci_ioaddr4, pci_ioaddr5; @@ -335,8 +334,7 @@ setup_sct_quadro(struct IsdnCard *card)  		}  #ifdef ATTEMPT_PCI_REMAPPING  /* HACK: PLX revision 1 bug: PLX address bit 7 must not be set */ -		pci_read_config_byte(dev_a8, PCI_REVISION_ID, &pci_rev_id); -		if ((pci_ioaddr1 & 0x80) && (pci_rev_id == 1)) { +		if ((pci_ioaddr1 & 0x80) && (dev_a8->revision == 1)) {  			printk(KERN_WARNING "HiSax: %s (%s): PLX rev 1, remapping required!\n",  				CardType[card->typ],  				sct_quadro_subtypes[cs->subtyp]); diff --git a/drivers/media/radio/radio-gemtek-pci.c b/drivers/media/radio/radio-gemtek-pci.c index fdf5d6e46eac..5e6f17df204b 100644 --- a/drivers/media/radio/radio-gemtek-pci.c +++ b/drivers/media/radio/radio-gemtek-pci.c @@ -94,7 +94,6 @@ struct gemtek_pci_card {  	u32 iobase;  	u32 length; -	u8  chiprev;  	u16 model;  	u32 current_frequency; @@ -415,7 +414,6 @@ static int __devinit gemtek_pci_probe( struct pci_dev *pci_dev, const struct pci  		goto err_pci;  	} -	pci_read_config_byte( pci_dev, PCI_REVISION_ID, &card->chiprev );  	pci_read_config_word( pci_dev, PCI_SUBSYSTEM_ID, &card->model );  	pci_set_drvdata( pci_dev, card ); @@ -436,7 +434,7 @@ static int __devinit gemtek_pci_probe( struct pci_dev *pci_dev, const struct pci  	gemtek_pci_mute( card );  	printk( KERN_INFO "Gemtek PCI Radio (rev. %d) found at 0x%04x-0x%04x.\n", -		card->chiprev, card->iobase, card->iobase + card->length - 1 ); +		pci_dev->revision, card->iobase, card->iobase + card->length - 1 );  	return 0; diff --git a/drivers/media/video/meye.c b/drivers/media/video/meye.c index 664aba8b4d85..7533fc203319 100644 --- a/drivers/media/video/meye.c +++ b/drivers/media/video/meye.c @@ -1809,7 +1809,6 @@ static int __devinit meye_probe(struct pci_dev *pcidev,  {  	int ret = -EBUSY;  	unsigned long mchip_adr; -	u8 revision;  	if (meye.mchip_dev != NULL) {  		printk(KERN_ERR "meye: only one device allowed!\n"); @@ -1885,7 +1884,6 @@ static int __devinit meye_probe(struct pci_dev *pcidev,  		goto outreqirq;  	} -	pci_read_config_byte(meye.mchip_dev, PCI_REVISION_ID, &revision);  	pci_write_config_byte(meye.mchip_dev, PCI_CACHE_LINE_SIZE, 8);  	pci_write_config_byte(meye.mchip_dev, PCI_LATENCY_TIMER, 64); @@ -1939,7 +1937,7 @@ static int __devinit meye_probe(struct pci_dev *pcidev,  	printk(KERN_INFO "meye: Motion Eye Camera Driver v%s.\n",  	       MEYE_DRIVER_VERSION);  	printk(KERN_INFO "meye: mchip KL5A72002 rev. %d, base %lx, irq %d\n", -	       revision, mchip_adr, meye.mchip_irq); +	       meye.mchip_dev->revision, mchip_adr, meye.mchip_irq);  	return 0; diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c index 58bbc3e6d0de..807e6992e614 100644 --- a/drivers/net/8139cp.c +++ b/drivers/net/8139cp.c @@ -1799,7 +1799,6 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)  	void __iomem *regs;  	resource_size_t pciaddr;  	unsigned int addr_len, i, pci_using_dac; -	u8 pci_rev;  #ifndef MODULE  	static int version_printed; @@ -1807,13 +1806,11 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)  		printk("%s", version);  #endif -	pci_read_config_byte(pdev, PCI_REVISION_ID, &pci_rev); -  	if (pdev->vendor == PCI_VENDOR_ID_REALTEK && -	    pdev->device == PCI_DEVICE_ID_REALTEK_8139 && pci_rev < 0x20) { +	    pdev->device == PCI_DEVICE_ID_REALTEK_8139 && pdev->revision < 0x20) {  		dev_err(&pdev->dev,  			   "This (id %04x:%04x rev %02x) is not an 8139C+ compatible chip\n", -		           pdev->vendor, pdev->device, pci_rev); +		           pdev->vendor, pdev->device, pdev->revision);  		dev_err(&pdev->dev, "Try the \"8139too\" driver instead.\n");  		return -ENODEV;  	} diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c index 21a6ccbf92e0..327eaa7b4999 100644 --- a/drivers/net/8139too.c +++ b/drivers/net/8139too.c @@ -931,7 +931,6 @@ static int __devinit rtl8139_init_one (struct pci_dev *pdev,  	int i, addr_len, option;  	void __iomem *ioaddr;  	static int board_idx = -1; -	u8 pci_rev;  	assert (pdev != NULL);  	assert (ent != NULL); @@ -949,13 +948,11 @@ static int __devinit rtl8139_init_one (struct pci_dev *pdev,  	}  #endif -	pci_read_config_byte(pdev, PCI_REVISION_ID, &pci_rev); -  	if (pdev->vendor == PCI_VENDOR_ID_REALTEK && -	    pdev->device == PCI_DEVICE_ID_REALTEK_8139 && pci_rev >= 0x20) { +	    pdev->device == PCI_DEVICE_ID_REALTEK_8139 && pdev->revision >= 0x20) {  		dev_info(&pdev->dev,  			   "This (id %04x:%04x rev %02x) is an enhanced 8139C+ chip\n", -		       	   pdev->vendor, pdev->device, pci_rev); +		       	   pdev->vendor, pdev->device, pdev->revision);  		dev_info(&pdev->dev,  			   "Use the \"8139cp\" driver for improved performance and stability.\n");  	} diff --git a/drivers/net/atl1/atl1.h b/drivers/net/atl1/atl1.h index b1c6034e68fa..df4c1a0071aa 100644 --- a/drivers/net/atl1/atl1.h +++ b/drivers/net/atl1/atl1.h @@ -210,7 +210,6 @@ struct atl1_hw {  	u16 phy_spd_default;  	u16 dev_rev; -	u8 revision_id;  	/* spi flash */  	u8 flash_vendor; diff --git a/drivers/net/atl1/atl1_main.c b/drivers/net/atl1/atl1_main.c index 3bb40dd4a410..501919eb7f5e 100644 --- a/drivers/net/atl1/atl1_main.c +++ b/drivers/net/atl1/atl1_main.c @@ -118,10 +118,6 @@ static int __devinit atl1_sw_init(struct atl1_adapter *adapter)  {  	struct atl1_hw *hw = &adapter->hw;  	struct net_device *netdev = adapter->netdev; -	struct pci_dev *pdev = adapter->pdev; - -	/* PCI config space info */ -	pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id);  	hw->max_frame_size = netdev->mtu + ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;  	hw->min_frame_size = MINIMUM_ETHERNET_FRAME_SIZE; diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c index d681903c592d..02e994b1b028 100644 --- a/drivers/net/bnx2.c +++ b/drivers/net/bnx2.c @@ -6736,10 +6736,9 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)  		while ((amd_8132 = pci_get_device(PCI_VENDOR_ID_AMD,  						  PCI_DEVICE_ID_AMD_8132_BRIDGE,  						  amd_8132))) { -			u8 rev; -			pci_read_config_byte(amd_8132, PCI_REVISION_ID, &rev); -			if (rev >= 0x10 && rev <= 0x13) { +			if (amd_8132->revision >= 0x10 && +			    amd_8132->revision <= 0x13) {  				disable_msi = 1;  				pci_dev_put(amd_8132);  				break; diff --git a/drivers/net/cassini.c b/drivers/net/cassini.c index 59b9943b077d..f6e4030c73d1 100644 --- a/drivers/net/cassini.c +++ b/drivers/net/cassini.c @@ -3422,21 +3422,19 @@ done:  static void cas_check_pci_invariants(struct cas *cp)  {  	struct pci_dev *pdev = cp->pdev; -	u8 rev;  	cp->cas_flags = 0; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);  	if ((pdev->vendor == PCI_VENDOR_ID_SUN) &&  	    (pdev->device == PCI_DEVICE_ID_SUN_CASSINI)) { -		if (rev >= CAS_ID_REVPLUS) +		if (pdev->revision >= CAS_ID_REVPLUS)  			cp->cas_flags |= CAS_FLAG_REG_PLUS; -		if (rev < CAS_ID_REVPLUS02u) +		if (pdev->revision < CAS_ID_REVPLUS02u)  			cp->cas_flags |= CAS_FLAG_TARGET_ABORT;  		/* Original Cassini supports HW CSUM, but it's not  		 * enabled by default as it can trigger TX hangs.  		 */ -		if (rev < CAS_ID_REV2) +		if (pdev->revision < CAS_ID_REV2)  			cp->cas_flags |= CAS_FLAG_NO_HW_CSUM;  	} else {  		/* Only sun has original cassini chips.  */ @@ -4919,13 +4917,13 @@ static int __devinit cas_init_one(struct pci_dev *pdev,  	pci_cmd &= ~PCI_COMMAND_SERR;  	pci_cmd |= PCI_COMMAND_PARITY;  	pci_write_config_word(pdev, PCI_COMMAND, pci_cmd); -	if (pci_set_mwi(pdev)) +	if (pci_try_set_mwi(pdev))  		printk(KERN_WARNING PFX "Could not enable MWI for %s\n",  		       pci_name(pdev));  	/*  	 * On some architectures, the default cache line size set -	 * by pci_set_mwi reduces perforamnce.  We have to increase +	 * by pci_try_set_mwi reduces perforamnce.  We have to increase  	 * it for this case.  To start, we'll print some configuration  	 * data.  	 */ diff --git a/drivers/net/dl2k.c b/drivers/net/dl2k.c index a4ace071f1cb..04e3710c9082 100644 --- a/drivers/net/dl2k.c +++ b/drivers/net/dl2k.c @@ -250,7 +250,6 @@ rio_probe1 (struct pci_dev *pdev, const struct pci_device_id *ent)  			np->an_enable = 1;  		mii_set_media (dev);  	} -	pci_read_config_byte(pdev, PCI_REVISION_ID, &np->pci_rev_id);  	err = register_netdev (dev);  	if (err) @@ -879,7 +878,7 @@ receive_packet (struct net_device *dev)  			skb->protocol = eth_type_trans (skb, dev);  #if 0  			/* Checksum done by hw, but csum value unavailable. */ -			if (np->pci_rev_id >= 0x0c && +			if (np->pdev->pci_rev_id >= 0x0c &&  				!(frame_status & (TCPError | UDPError | IPError))) {  				skb->ip_summed = CHECKSUM_UNNECESSARY;  			} diff --git a/drivers/net/dl2k.h b/drivers/net/dl2k.h index 814c449c359f..e443065a452e 100644 --- a/drivers/net/dl2k.h +++ b/drivers/net/dl2k.h @@ -668,7 +668,6 @@ struct netdev_private {  	unsigned int rx_flow:1;		/* Rx flow control enable */  	unsigned int phy_media:1;	/* 1: fiber, 0: copper */  	unsigned int link_status:1;	/* Current link status */ -	unsigned char pci_rev_id;	/* PCI revision ID */  	struct netdev_desc *last_tx;	/* Last Tx descriptor used. */  	unsigned long cur_rx, old_rx;	/* Producer/consumer ring indices */  	unsigned long cur_tx, old_tx; diff --git a/drivers/net/e100.c b/drivers/net/e100.c index 74ea6373c7cd..6b6401e9304e 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c @@ -583,7 +583,6 @@ struct nic {  	u32 rx_tco_frames;  	u32 rx_over_length_errors; -	u8 rev_id;  	u16 leds;  	u16 eeprom_wc;  	u16 eeprom[256]; @@ -937,9 +936,8 @@ static void e100_get_defaults(struct nic *nic)  	struct param_range rfds = { .min = 16, .max = 256, .count = 256 };  	struct param_range cbs  = { .min = 64, .max = 256, .count = 128 }; -	pci_read_config_byte(nic->pdev, PCI_REVISION_ID, &nic->rev_id);  	/* MAC type is encoded as rev ID; exception: ICH is treated as 82559 */ -	nic->mac = (nic->flags & ich) ? mac_82559_D101M : nic->rev_id; +	nic->mac = (nic->flags & ich) ? mac_82559_D101M : nic->pdev->revision;  	if(nic->mac == mac_unknown)  		nic->mac = mac_82557_D100_A; @@ -1279,7 +1277,7 @@ static void e100_setup_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb  	if (nic->flags & ich)  		goto noloaducode; -	/* Search for ucode match against h/w rev_id */ +	/* Search for ucode match against h/w revision */  	for (opts = ucode_opts; opts->mac; opts++) {  		int i;  		u32 *ucode = opts->ucode; @@ -2238,7 +2236,7 @@ static void e100_get_regs(struct net_device *netdev,  	u32 *buff = p;  	int i; -	regs->version = (1 << 24) | nic->rev_id; +	regs->version = (1 << 24) | nic->pdev->revision;  	buff[0] = ioread8(&nic->csr->scb.cmd_hi) << 24 |  		ioread8(&nic->csr->scb.cmd_lo) << 16 |  		ioread16(&nic->csr->scb.status); diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index cf8af928a69c..f48b659e0c2b 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c @@ -1266,8 +1266,7 @@ e1000_sw_init(struct e1000_adapter *adapter)  	hw->device_id = pdev->device;  	hw->subsystem_vendor_id = pdev->subsystem_vendor;  	hw->subsystem_id = pdev->subsystem_device; - -	pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id); +	hw->revision_id = pdev->revision;  	pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word); diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index 42ba1c012ee2..67046e8c21eb 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c @@ -5084,15 +5084,13 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i  	np->wolenabled = 0;  	if (id->driver_data & DEV_HAS_POWER_CNTRL) { -		u8 revision_id; -		pci_read_config_byte(pci_dev, PCI_REVISION_ID, &revision_id);  		/* take phy and nic out of low power mode */  		powerstate = readl(base + NvRegPowerState2);  		powerstate &= ~NVREG_POWERSTATE2_POWERUP_MASK;  		if ((id->device == PCI_DEVICE_ID_NVIDIA_NVENET_12 ||  		     id->device == PCI_DEVICE_ID_NVIDIA_NVENET_13) && -		    revision_id >= 0xA3) +		    pci_dev->revision >= 0xA3)  			powerstate |= NVREG_POWERSTATE2_POWERUP_REV_A3;  		writel(powerstate, base + NvRegPowerState2);  	} diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c index 56f8197b953b..b703ccfe040b 100644 --- a/drivers/net/netxen/netxen_nic_main.c +++ b/drivers/net/netxen/netxen_nic_main.c @@ -54,8 +54,6 @@ static char netxen_nic_driver_string[] = "NetXen Network Driver version "  #define NETXEN_ADAPTER_UP_MAGIC 777  #define NETXEN_NIC_PEG_TUNE 0 -u8 nx_p2_id = NX_P2_C0; -  #define DMA_32BIT_MASK	0x00000000ffffffffULL  #define DMA_35BIT_MASK	0x00000007ffffffffULL @@ -307,8 +305,7 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  		goto err_out_disable_pdev;  	pci_set_master(pdev); -	pci_read_config_byte(pdev, PCI_REVISION_ID, &nx_p2_id); -	if (nx_p2_id == NX_P2_C1 && +	if (pdev->revision == NX_P2_C1 &&  	    (pci_set_dma_mask(pdev, DMA_35BIT_MASK) == 0) &&  	    (pci_set_consistent_dma_mask(pdev, DMA_35BIT_MASK) == 0)) {  		pci_using_dac = 1; @@ -552,7 +549,7 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	INIT_WORK(&adapter->watchdog_task, netxen_watchdog_task);  	adapter->ahw.pdev = pdev;  	adapter->proc_cmd_buf_counter = 0; -	adapter->ahw.revision_id = nx_p2_id; +	adapter->ahw.revision_id = pdev->revision;  	/* make sure Window == 1 */  	netxen_nic_pci_change_crbwindow(adapter, 1); diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index fa29a403a247..58bbfdd4f901 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c @@ -1135,7 +1135,7 @@ static int init_nic(struct s2io_nic *nic)  	 * SXE-008 TRANSMIT DMA ARBITRATION ISSUE.  	 */  	if ((nic->device_type == XFRAME_I_DEVICE) && -		(get_xena_rev_id(nic->pdev) < 4)) +		(nic->pdev->revision < 4))  		writeq(PCC_ENABLE_FOUR, &bar0->pcc_enable);  	val64 = readq(&bar0->tx_fifo_partition_0); @@ -1873,7 +1873,7 @@ static int verify_pcc_quiescent(struct s2io_nic *sp, int flag)  	herc = (sp->device_type == XFRAME_II_DEVICE);  	if (flag == FALSE) { -		if ((!herc && (get_xena_rev_id(sp->pdev) >= 4)) || herc) { +		if ((!herc && (sp->pdev->revision >= 4)) || herc) {  			if (!(val64 & ADAPTER_STATUS_RMAC_PCC_IDLE))  				ret = 1;  		} else { @@ -1881,7 +1881,7 @@ static int verify_pcc_quiescent(struct s2io_nic *sp, int flag)  				ret = 1;  		}  	} else { -		if ((!herc && (get_xena_rev_id(sp->pdev) >= 4)) || herc) { +		if ((!herc && (sp->pdev->revision >= 4)) || herc) {  			if (((val64 & ADAPTER_STATUS_RMAC_PCC_IDLE) ==  			     ADAPTER_STATUS_RMAC_PCC_IDLE))  				ret = 1; @@ -7076,23 +7076,6 @@ static void s2io_link(struct s2io_nic * sp, int link)  }  /** - *  get_xena_rev_id - to identify revision ID of xena. - *  @pdev : PCI Dev structure - *  Description: - *  Function to identify the Revision ID of xena. - *  Return value: - *  returns the revision ID of the device. - */ - -static int get_xena_rev_id(struct pci_dev *pdev) -{ -	u8 id = 0; -	int ret; -	ret = pci_read_config_byte(pdev, PCI_REVISION_ID, (u8 *) & id); -	return id; -} - -/**   *  s2io_init_pci -Initialization of PCI and PCI-X configuration registers .   *  @sp : private member of the device structure, which is a pointer to the   *  s2io_nic structure. @@ -7550,7 +7533,7 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)  	s2io_vpd_read(sp);  	DBG_PRINT(ERR_DBG, "Copyright(c) 2002-2007 Neterion Inc.\n");  	DBG_PRINT(ERR_DBG, "%s: Neterion %s (rev %d)\n",dev->name, -		  sp->product_name, get_xena_rev_id(sp->pdev)); +		  sp->product_name, pdev->revision);  	DBG_PRINT(ERR_DBG, "%s: Driver version %s\n", dev->name,  		  s2io_driver_version);  	DBG_PRINT(ERR_DBG, "%s: MAC ADDR: " diff --git a/drivers/net/s2io.h b/drivers/net/s2io.h index 58592780f519..3887fe63a908 100644 --- a/drivers/net/s2io.h +++ b/drivers/net/s2io.h @@ -1033,7 +1033,6 @@ static void s2io_set_link(struct work_struct *work);  static int s2io_set_swapper(struct s2io_nic * sp);  static void s2io_card_down(struct s2io_nic *nic);  static int s2io_card_up(struct s2io_nic *nic); -static int get_xena_rev_id(struct pci_dev *pdev);  static int wait_for_cmd_complete(void __iomem *addr, u64 busy_bit,  					int bit_state);  static int s2io_add_isr(struct s2io_nic * sp); diff --git a/drivers/net/starfire.c b/drivers/net/starfire.c index f2e101967204..8b6478663a56 100644 --- a/drivers/net/starfire.c +++ b/drivers/net/starfire.c @@ -740,7 +740,7 @@ static int __devinit starfire_init_one(struct pci_dev *pdev,  	pci_set_master(pdev);  	/* enable MWI -- it vastly improves Rx performance on sparc64 */ -	pci_set_mwi(pdev); +	pci_try_set_mwi(pdev);  #ifdef ZEROCOPY  	/* Starfire can do TCP/UDP checksumming */ diff --git a/drivers/net/sundance.c b/drivers/net/sundance.c index c8ba534c17bf..af0c9831074c 100644 --- a/drivers/net/sundance.c +++ b/drivers/net/sundance.c @@ -397,7 +397,6 @@ struct netdev_private {  	unsigned char phys[MII_CNT];		/* MII device addresses, only first one used. */  	struct pci_dev *pci_dev;  	void __iomem *base; -	unsigned char pci_rev_id;  };  /* The station address location in the EEPROM. */ @@ -544,8 +543,6 @@ static int __devinit sundance_probe1 (struct pci_dev *pdev,  	dev->change_mtu = &change_mtu;  	pci_set_drvdata(pdev, dev); -	pci_read_config_byte(pdev, PCI_REVISION_ID, &np->pci_rev_id); -  	i = register_netdev(dev);  	if (i)  		goto err_out_unmap_rx; @@ -828,7 +825,7 @@ static int netdev_open(struct net_device *dev)  	iowrite8(100, ioaddr + RxDMAPollPeriod);  	iowrite8(127, ioaddr + TxDMAPollPeriod);  	/* Fix DFE-580TX packet drop issue */ -	if (np->pci_rev_id >= 0x14) +	if (np->pci_dev->revision >= 0x14)  		iowrite8(0x01, ioaddr + DebugCtrl1);  	netif_start_queue(dev); @@ -1194,7 +1191,7 @@ static irqreturn_t intr_handler(int irq, void *dev_instance)  			hw_frame_id = ioread8(ioaddr + TxFrameId);  		} -		if (np->pci_rev_id >= 0x14) { +		if (np->pci_dev->revision >= 0x14) {  			spin_lock(&np->lock);  			for (; np->cur_tx - np->dirty_tx > 0; np->dirty_tx++) {  				int entry = np->dirty_tx % TX_RING_SIZE; diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c index 15146a119230..8b35f13318ea 100644 --- a/drivers/net/sunhme.c +++ b/drivers/net/sunhme.c @@ -3095,12 +3095,8 @@ static int __devinit happy_meal_pci_probe(struct pci_dev *pdev,  #ifdef CONFIG_SPARC  	hp->hm_revision = of_getintprop_default(dp, "hm-rev", 0xff); -	if (hp->hm_revision == 0xff) { -		unsigned char prev; - -		pci_read_config_byte(pdev, PCI_REVISION_ID, &prev); -		hp->hm_revision = 0xc0 | (prev & 0x0f); -	} +	if (hp->hm_revision == 0xff) +		hp->hm_revision = 0xc0 | (pdev->revision & 0x0f);  #else  	/* works with this on non-sparc hosts */  	hp->hm_revision = 0x20; diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 3245f16baabc..32e4037dcb50 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c @@ -10551,11 +10551,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)  				continue;  			}  			if (pci_id->rev != PCI_ANY_ID) { -				u8 rev; - -				pci_read_config_byte(bridge, PCI_REVISION_ID, -						     &rev); -				if (rev > pci_id->rev) +				if (bridge->revision > pci_id->rev)  					continue;  			}  			if (bridge->subordinate && diff --git a/drivers/net/tlan.c b/drivers/net/tlan.c index 106dc1ef0acb..74eb12107e68 100644 --- a/drivers/net/tlan.c +++ b/drivers/net/tlan.c @@ -533,7 +533,6 @@ static int __devinit TLan_probe1(struct pci_dev *pdev,  	struct net_device  *dev;  	TLanPrivateInfo    *priv; -	u8		   pci_rev;  	u16		   device_id;  	int		   reg, rc = -ENODEV; @@ -577,8 +576,6 @@ static int __devinit TLan_probe1(struct pci_dev *pdev,  			goto err_out_free_dev;  		} -		pci_read_config_byte ( pdev, PCI_REVISION_ID, &pci_rev); -  		for ( reg= 0; reg <= 5; reg ++ ) {  			if (pci_resource_flags(pdev, reg) & IORESOURCE_IO) {  				pci_io_base = pci_resource_start(pdev, reg); @@ -595,7 +592,7 @@ static int __devinit TLan_probe1(struct pci_dev *pdev,  		dev->base_addr = pci_io_base;  		dev->irq = pdev->irq; -		priv->adapterRev = pci_rev; +		priv->adapterRev = pdev->revision;  		pci_set_master(pdev);  		pci_set_drvdata(pdev, dev); diff --git a/drivers/net/tulip/de4x5.c b/drivers/net/tulip/de4x5.c index 42fca26afc50..09902891a6e6 100644 --- a/drivers/net/tulip/de4x5.c +++ b/drivers/net/tulip/de4x5.c @@ -2134,7 +2134,7 @@ srom_search(struct net_device *dev, struct pci_dev *pdev)      u_short vendor, status;      u_int irq = 0, device;      u_long iobase = 0;                     /* Clear upper 32 bits in Alphas */ -    int i, j, cfrv; +    int i, j;      struct de4x5_private *lp = netdev_priv(dev);      struct list_head *walk; @@ -2150,7 +2150,6 @@ srom_search(struct net_device *dev, struct pci_dev *pdev)  	/* Get the chip configuration revision register */  	pb = this_dev->bus->number; -	pci_read_config_dword(this_dev, PCI_REVISION_ID, &cfrv);  	/* Set the device number information */  	lp->device = PCI_SLOT(this_dev->devfn); @@ -2158,7 +2157,8 @@ srom_search(struct net_device *dev, struct pci_dev *pdev)  	/* Set the chipset information */  	if (is_DC2114x) { -	    device = ((cfrv & CFRV_RN) < DC2114x_BRK ? DC21142 : DC21143); +	    device = ((this_dev->revision & CFRV_RN) < DC2114x_BRK +		      ? DC21142 : DC21143);  	}  	lp->chipset = device; @@ -2254,7 +2254,7 @@ static int __devinit de4x5_pci_probe (struct pci_dev *pdev,  	}  	/* Get the chip configuration revision register */ -	pci_read_config_dword(pdev, PCI_REVISION_ID, &lp->cfrv); +	lp->cfrv = pdev->revision;  	/* Set the device number information */  	lp->device = dev_num; diff --git a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c index 4ed67ff0e81e..dab74feb44bc 100644 --- a/drivers/net/tulip/dmfe.c +++ b/drivers/net/tulip/dmfe.c @@ -181,11 +181,12 @@  	udelay(5);  #define __CHK_IO_SIZE(pci_id, dev_rev) \ - (( ((pci_id)==PCI_DM9132_ID) || ((dev_rev) >= 0x02000030) ) ? \ + (( ((pci_id)==PCI_DM9132_ID) || ((dev_rev) >= 0x30) ) ? \  	DM9102A_IO_SIZE: DM9102_IO_SIZE) -#define CHK_IO_SIZE(pci_dev, dev_rev) \ -	(__CHK_IO_SIZE(((pci_dev)->device << 16) | (pci_dev)->vendor, dev_rev)) +#define CHK_IO_SIZE(pci_dev) \ +	(__CHK_IO_SIZE(((pci_dev)->device << 16) | (pci_dev)->vendor, \ +	(pci_dev)->revision))  /* Sten Check */  #define DEVICE net_device @@ -205,7 +206,7 @@ struct rx_desc {  struct dmfe_board_info {  	u32 chip_id;			/* Chip vendor/Device ID */ -	u32 chip_revision;		/* Chip revision */ +	u8 chip_revision;		/* Chip revision */  	struct DEVICE *next_dev;	/* next device */  	struct pci_dev *pdev;		/* PCI device */  	spinlock_t lock; @@ -359,7 +360,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,  {  	struct dmfe_board_info *db;	/* board information structure */  	struct net_device *dev; -	u32 dev_rev, pci_pmr; +	u32 pci_pmr;  	int i, err;  	DMFE_DBUG(0, "dmfe_init_one()", 0); @@ -392,10 +393,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,  		goto err_out_disable;  	} -	/* Read Chip revision */ -	pci_read_config_dword(pdev, PCI_REVISION_ID, &dev_rev); - -	if (pci_resource_len(pdev, 0) < (CHK_IO_SIZE(pdev, dev_rev)) ) { +	if (pci_resource_len(pdev, 0) < (CHK_IO_SIZE(pdev)) ) {  		printk(KERN_ERR DRV_NAME ": Allocated I/O size too small\n");  		err = -ENODEV;  		goto err_out_disable; @@ -433,7 +431,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,  	db->chip_id = ent->driver_data;  	db->ioaddr = pci_resource_start(pdev, 0); -	db->chip_revision = dev_rev; +	db->chip_revision = pdev->revision;  	db->wol_mode = 0;  	db->pdev = pdev; @@ -455,7 +453,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,  	pci_read_config_dword(pdev, 0x50, &pci_pmr);  	pci_pmr &= 0x70000; -	if ( (pci_pmr == 0x10000) && (dev_rev == 0x02000031) ) +	if ( (pci_pmr == 0x10000) && (db->chip_revision == 0x31) )  		db->chip_type = 1;	/* DM9102A E3 */  	else  		db->chip_type = 0; @@ -553,7 +551,7 @@ static int dmfe_open(struct DEVICE *dev)  	/* CR6 operation mode decision */  	if ( !chkmode || (db->chip_id == PCI_DM9132_ID) || -		(db->chip_revision >= 0x02000030) ) { +		(db->chip_revision >= 0x30) ) {      		db->cr6_data |= DMFE_TXTH_256;  		db->cr0_data = CR0_DEFAULT;  		db->dm910x_chk_mode=4;		/* Enter the normal mode */ @@ -1199,9 +1197,9 @@ static void dmfe_timer(unsigned long data)  		tmp_cr12 = inb(db->ioaddr + DCR12);	/* DM9102/DM9102A */  	if ( ((db->chip_id == PCI_DM9102_ID) && -		(db->chip_revision == 0x02000030)) || +		(db->chip_revision == 0x30)) ||  		((db->chip_id == PCI_DM9132_ID) && -		(db->chip_revision == 0x02000010)) ) { +		(db->chip_revision == 0x10)) ) {  		/* DM9102A Chip */  		if (tmp_cr12 & 2)  			link_ok = 0; diff --git a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c index 041af63f2811..7dcd138b0fed 100644 --- a/drivers/net/tulip/tulip_core.c +++ b/drivers/net/tulip/tulip_core.c @@ -1155,7 +1155,7 @@ static void __devinit tulip_mwi_config (struct pci_dev *pdev,  	/* set or disable MWI in the standard PCI command bit.  	 * Check for the case where  mwi is desired but not available  	 */ -	if (csr0 & MWI)	pci_set_mwi(pdev); +	if (csr0 & MWI)	pci_try_set_mwi(pdev);  	else		pci_clear_mwi(pdev);  	/* read result from hardware (in case bit refused to enable) */ @@ -1238,7 +1238,6 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,  	};  	static int last_irq;  	static int multiport_cnt;	/* For four-port boards w/one EEPROM */ -	u8 chip_rev;  	int i, irq;  	unsigned short sum;  	unsigned char *ee_data; @@ -1274,10 +1273,8 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,  	if (pdev->vendor == 0x1282 && pdev->device == 0x9100)  	{ -		u32 dev_rev;  		/* Read Chip revision */ -		pci_read_config_dword(pdev, PCI_REVISION_ID, &dev_rev); -		if(dev_rev < 0x02000030) +		if (pdev->revision < 0x02000030)  		{  			printk(KERN_ERR PFX "skipping early DM9100 with Crc bug (use dmfe)\n");  			return -ENODEV; @@ -1360,8 +1357,6 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,  	if (!ioaddr)  		goto err_out_free_res; -	pci_read_config_byte (pdev, PCI_REVISION_ID, &chip_rev); -  	/*  	 * initialize private data structure 'tp'  	 * it is zeroed and aligned in alloc_etherdev @@ -1382,7 +1377,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,  	tp->flags = tulip_tbl[chip_idx].flags;  	tp->pdev = pdev;  	tp->base_addr = ioaddr; -	tp->revision = chip_rev; +	tp->revision = pdev->revision;  	tp->csr0 = csr0;  	spin_lock_init(&tp->lock);  	spin_lock_init(&tp->mii_lock); @@ -1399,7 +1394,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,  		tulip_mwi_config (pdev, dev);  #else  	/* MWI is broken for DC21143 rev 65... */ -	if (chip_idx == DC21143 && chip_rev == 65) +	if (chip_idx == DC21143 && pdev->revision == 65)  		tp->csr0 &= ~MWI;  #endif @@ -1640,7 +1635,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,  #else  		"Port"  #endif -		" %#llx,", dev->name, chip_name, chip_rev, +		" %#llx,", dev->name, chip_name, pdev->revision,  		(unsigned long long) pci_resource_start(pdev, TULIP_BAR));  	pci_set_drvdata(pdev, dev); diff --git a/drivers/net/tulip/xircom_cb.c b/drivers/net/tulip/xircom_cb.c index 37e35cd277a1..16a54e6b8d4f 100644 --- a/drivers/net/tulip/xircom_cb.c +++ b/drivers/net/tulip/xircom_cb.c @@ -205,7 +205,6 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_  {  	struct net_device *dev = NULL;  	struct xircom_private *private; -	unsigned char chip_rev;  	unsigned long flags;  	unsigned short tmp16;  	enter("xircom_probe"); @@ -224,8 +223,6 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_  	pci_read_config_word (pdev,PCI_STATUS, &tmp16);  	pci_write_config_word (pdev, PCI_STATUS,tmp16); -	pci_read_config_byte(pdev, PCI_REVISION_ID, &chip_rev); -  	if (!request_region(pci_resource_start(pdev, 0), 128, "xircom_cb")) {  		printk(KERN_ERR "xircom_probe: failed to allocate io-region\n");  		return -ENODEV; @@ -286,7 +283,7 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_  		goto reg_fail;  	} -	printk(KERN_INFO "%s: Xircom cardbus revision %i at irq %i \n", dev->name, chip_rev, pdev->irq); +	printk(KERN_INFO "%s: Xircom cardbus revision %i at irq %i \n", dev->name, pdev->revision, pdev->irq);  	/* start the transmitter to get a heartbeat */  	/* TODO: send 2 dummy packets here */  	transceiver_voodoo(private); diff --git a/drivers/net/tulip/xircom_tulip_cb.c b/drivers/net/tulip/xircom_tulip_cb.c index f984fbde8b23..fc439f333350 100644 --- a/drivers/net/tulip/xircom_tulip_cb.c +++ b/drivers/net/tulip/xircom_tulip_cb.c @@ -524,7 +524,6 @@ static int __devinit xircom_init_one(struct pci_dev *pdev, const struct pci_devi  	int chip_idx = id->driver_data;  	long ioaddr;  	int i; -	u8 chip_rev;  /* when built into the kernel, we only print version if device is found */  #ifndef MODULE @@ -620,9 +619,8 @@ static int __devinit xircom_init_one(struct pci_dev *pdev, const struct pci_devi  	if (register_netdev(dev))  		goto err_out_cleardev; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &chip_rev);  	printk(KERN_INFO "%s: %s rev %d at %#3lx,", -	       dev->name, xircom_tbl[chip_idx].chip_name, chip_rev, ioaddr); +	       dev->name, xircom_tbl[chip_idx].chip_name, pdev->revision, ioaddr);  	for (i = 0; i < 6; i++)  		printk("%c%2.2X", i ? ':' : ' ', dev->dev_addr[i]);  	printk(", IRQ %d.\n", dev->irq); diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c index df524548d531..03587205546e 100644 --- a/drivers/net/typhoon.c +++ b/drivers/net/typhoon.c @@ -2267,12 +2267,6 @@ need_resume:  	typhoon_resume(pdev);  	return -EBUSY;  } - -static int -typhoon_enable_wake(struct pci_dev *pdev, pci_power_t state, int enable) -{ -	return pci_enable_wake(pdev, state, enable); -}  #endif  static int __devinit @@ -2636,7 +2630,6 @@ static struct pci_driver typhoon_driver = {  #ifdef CONFIG_PM  	.suspend	= typhoon_suspend,  	.resume		= typhoon_resume, -	.enable_wake	= typhoon_enable_wake,  #endif  }; diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c index 565f6cc185ce..f51c2c138f10 100644 --- a/drivers/net/via-rhine.c +++ b/drivers/net/via-rhine.c @@ -622,7 +622,6 @@ static int __devinit rhine_init_one(struct pci_dev *pdev,  	struct net_device *dev;  	struct rhine_private *rp;  	int i, rc; -	u8 pci_rev;  	u32 quirks;  	long pioaddr;  	long memaddr; @@ -642,27 +641,25 @@ static int __devinit rhine_init_one(struct pci_dev *pdev,  		printk(version);  #endif -	pci_read_config_byte(pdev, PCI_REVISION_ID, &pci_rev); -  	io_size = 256;  	phy_id = 0;  	quirks = 0;  	name = "Rhine"; -	if (pci_rev < VTunknown0) { +	if (pdev->revision < VTunknown0) {  		quirks = rqRhineI;  		io_size = 128;  	} -	else if (pci_rev >= VT6102) { +	else if (pdev->revision >= VT6102) {  		quirks = rqWOL | rqForceReset; -		if (pci_rev < VT6105) { +		if (pdev->revision < VT6105) {  			name = "Rhine II";  			quirks |= rqStatusWBRace;	/* Rhine-II exclusive */  		}  		else {  			phy_id = 1;	/* Integrated PHY, phy_id fixed to 1 */ -			if (pci_rev >= VT6105_B0) +			if (pdev->revision >= VT6105_B0)  				quirks |= rq6patterns; -			if (pci_rev < VT6105M) +			if (pdev->revision < VT6105M)  				name = "Rhine III";  			else  				name = "Rhine III (Management Adapter)"; diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c index b670b97bcfde..f331843d1102 100644 --- a/drivers/net/via-velocity.c +++ b/drivers/net/via-velocity.c @@ -890,8 +890,7 @@ static void __devinit velocity_init_info(struct pci_dev *pdev,  static int __devinit velocity_get_pci_info(struct velocity_info *vptr, struct pci_dev *pdev)  { -	if (pci_read_config_byte(pdev, PCI_REVISION_ID, &vptr->rev_id) < 0) -		return -EIO; +	vptr->rev_id = pdev->revision;  	pci_set_master(pdev); diff --git a/drivers/net/wan/pc300_drv.c b/drivers/net/wan/pc300_drv.c index 999bf71937ca..ec1c556a47ca 100644 --- a/drivers/net/wan/pc300_drv.c +++ b/drivers/net/wan/pc300_drv.c @@ -3439,7 +3439,6 @@ static int __devinit  cpc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)  {  	static int first_time = 1; -	ucchar cpc_rev_id;  	int err, eeprom_outdated = 0;  	ucshort device_id;  	pc300_t *card; @@ -3480,7 +3479,6 @@ cpc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)  	card->hw.falcsize = pci_resource_len(pdev, 4);  	card->hw.plxphys = pci_resource_start(pdev, 5);  	card->hw.plxsize = pci_resource_len(pdev, 5); -	pci_read_config_byte(pdev, PCI_REVISION_ID, &cpc_rev_id);  	switch (device_id) {  		case PCI_DEVICE_ID_PC300_RX_1: @@ -3498,7 +3496,7 @@ cpc_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)  	}  #ifdef PC300_DEBUG_PCI  	printk("cpc (bus=0x0%x,pci_id=0x%x,", pdev->bus->number, pdev->devfn); -	printk("rev_id=%d) IRQ%d\n", cpc_rev_id, card->hw.irq); +	printk("rev_id=%d) IRQ%d\n", pdev->revision, card->hw.irq);  	printk("cpc:found  ramaddr=0x%08lx plxaddr=0x%08lx "  	       "ctladdr=0x%08lx falcaddr=0x%08lx\n",  	       card->hw.ramphys, card->hw.plxphys, card->hw.scaphys, diff --git a/drivers/net/wan/pc300too.c b/drivers/net/wan/pc300too.c index aff05dba720a..dfbd3b00f03b 100644 --- a/drivers/net/wan/pc300too.c +++ b/drivers/net/wan/pc300too.c @@ -311,7 +311,6 @@ static int __devinit pc300_pci_init_one(struct pci_dev *pdev,  					const struct pci_device_id *ent)  {  	card_t *card; -	u8 rev_id;  	u32 __iomem *p;  	int i;  	u32 ramsize; @@ -366,7 +365,6 @@ static int __devinit pc300_pci_init_one(struct pci_dev *pdev,  			return -ENOMEM;  		} -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev_id);  	if (pci_resource_len(pdev, 0) != PC300_PLX_SIZE ||  	    pci_resource_len(pdev, 2) != PC300_SCA_SIZE ||  	    pci_resource_len(pdev, 3) < 16384) { diff --git a/drivers/net/wan/pci200syn.c b/drivers/net/wan/pci200syn.c index ca06a00d9d86..7f720de2e9f0 100644 --- a/drivers/net/wan/pci200syn.c +++ b/drivers/net/wan/pci200syn.c @@ -289,7 +289,6 @@ static int __devinit pci200_pci_init_one(struct pci_dev *pdev,  					 const struct pci_device_id *ent)  {  	card_t *card; -	u8 rev_id;  	u32 __iomem *p;  	int i;  	u32 ramsize; @@ -330,7 +329,6 @@ static int __devinit pci200_pci_init_one(struct pci_dev *pdev,  		return -ENOMEM;  	} -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev_id);  	if (pci_resource_len(pdev, 0) != PCI200SYN_PLX_SIZE ||  	    pci_resource_len(pdev, 2) != PCI200SYN_SCA_SIZE ||  	    pci_resource_len(pdev, 3) < 16384) { diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c index ef6b253a92ce..c5d6753a55ea 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c @@ -3741,10 +3741,8 @@ static int bcm43xx_attach_board(struct bcm43xx_private *bcm)  	                          &bcm->board_type);  	if (err)  		goto err_iounmap; -	err = bcm43xx_pci_read_config16(bcm, PCI_REVISION_ID, -	                          &bcm->board_revision); -	if (err) -		goto err_iounmap; + +	bcm->board_revision = bcm->pci_dev->revision;  	err = bcm43xx_chipset_attach(bcm);  	if (err) diff --git a/drivers/net/wireless/hostap/hostap_pci.c b/drivers/net/wireless/hostap/hostap_pci.c index 0cd48d151f5e..7da3664b8515 100644 --- a/drivers/net/wireless/hostap/hostap_pci.c +++ b/drivers/net/wireless/hostap/hostap_pci.c @@ -453,8 +453,6 @@ static struct pci_driver prism2_pci_drv_id = {  	.suspend	= prism2_pci_suspend,  	.resume		= prism2_pci_resume,  #endif /* CONFIG_PM */ -	/* Linux 2.4.6 added save_state and enable_wake that are not used here -	 */  }; diff --git a/drivers/net/wireless/hostap/hostap_plx.c b/drivers/net/wireless/hostap/hostap_plx.c index 0183df757b3e..040dc3e36410 100644 --- a/drivers/net/wireless/hostap/hostap_plx.c +++ b/drivers/net/wireless/hostap/hostap_plx.c @@ -613,9 +613,6 @@ static struct pci_driver prism2_plx_drv_id = {  	.id_table	= prism2_plx_id_table,  	.probe		= prism2_plx_probe,  	.remove		= prism2_plx_remove, -	.suspend	= NULL, -	.resume		= NULL, -	.enable_wake	= NULL  }; diff --git a/drivers/net/wireless/prism54/islpci_hotplug.c b/drivers/net/wireless/prism54/islpci_hotplug.c index 3dcb13bb7d57..af2e4f2405f2 100644 --- a/drivers/net/wireless/prism54/islpci_hotplug.c +++ b/drivers/net/wireless/prism54/islpci_hotplug.c @@ -87,7 +87,6 @@ static struct pci_driver prism54_driver = {  	.remove = prism54_remove,  	.suspend = prism54_suspend,  	.resume = prism54_resume, -	/* .enable_wake ; we don't support this yet */  };  /****************************************************************************** @@ -167,8 +166,7 @@ prism54_probe(struct pci_dev *pdev, const struct pci_device_id *id)  	pci_set_master(pdev);  	/* enable MWI */ -	if (!pci_set_mwi(pdev)) -		printk(KERN_INFO "%s: pci_set_mwi(pdev) succeeded\n", DRV_NAME); +	pci_try_set_mwi(pdev);  	/* setup the network device interface and its structure */  	if (!(ndev = islpci_setup(pdev))) { diff --git a/drivers/pci/Makefile b/drivers/pci/Makefile index e3beb784406f..006054a40995 100644 --- a/drivers/pci/Makefile +++ b/drivers/pci/Makefile @@ -41,9 +41,7 @@ obj-$(CONFIG_ACPI)    += pci-acpi.o  # Cardbus & CompactPCI use setup-bus  obj-$(CONFIG_HOTPLUG) += setup-bus.o -ifndef CONFIG_X86 -obj-y += syscall.o -endif +obj-$(CONFIG_PCI_SYSCALL) += syscall.o  ifeq ($(CONFIG_PCI_DEBUG),y)  EXTRA_CFLAGS += -DDEBUG diff --git a/drivers/pci/hotplug/acpiphp.h b/drivers/pci/hotplug/acpiphp.h index ddbadd95387e..f6cc0c5b5657 100644 --- a/drivers/pci/hotplug/acpiphp.h +++ b/drivers/pci/hotplug/acpiphp.h @@ -211,6 +211,7 @@ typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data);  extern int acpiphp_enable_slot (struct acpiphp_slot *slot);  extern int acpiphp_disable_slot (struct acpiphp_slot *slot); +extern int acpiphp_eject_slot (struct acpiphp_slot *slot);  extern u8 acpiphp_get_power_status (struct acpiphp_slot *slot);  extern u8 acpiphp_get_attention_status (struct acpiphp_slot *slot);  extern u8 acpiphp_get_latch_status (struct acpiphp_slot *slot); diff --git a/drivers/pci/hotplug/acpiphp_core.c b/drivers/pci/hotplug/acpiphp_core.c index fa5c0197d571..a0ca63adad5a 100644 --- a/drivers/pci/hotplug/acpiphp_core.c +++ b/drivers/pci/hotplug/acpiphp_core.c @@ -156,11 +156,15 @@ static int enable_slot(struct hotplug_slot *hotplug_slot)  static int disable_slot(struct hotplug_slot *hotplug_slot)  {  	struct slot *slot = hotplug_slot->private; +	int retval;  	dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);  	/* disable the specified slot */ -	return acpiphp_disable_slot(slot->acpi_slot); +	retval = acpiphp_disable_slot(slot->acpi_slot); +	if (!retval) +		retval = acpiphp_eject_slot(slot->acpi_slot); +	return retval;  } diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index 9ef4e989afc4..1e125b56c9a9 100644 --- a/drivers/pci/hotplug/acpiphp_glue.c +++ b/drivers/pci/hotplug/acpiphp_glue.c @@ -1282,7 +1282,7 @@ static unsigned int get_slot_status(struct acpiphp_slot *slot)  /**   * acpiphp_eject_slot - physically eject the slot   */ -static int acpiphp_eject_slot(struct acpiphp_slot *slot) +int acpiphp_eject_slot(struct acpiphp_slot *slot)  {  	acpi_status status;  	struct acpiphp_func *func; @@ -1368,6 +1368,9 @@ static void program_hpp(struct pci_dev *dev, struct acpiphp_bridge *bridge)  			(dev->class >> 8) == PCI_CLASS_BRIDGE_PCI)))  		return; +	if ((dev->class >> 8) == PCI_CLASS_BRIDGE_HOST) +		return; +  	pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE,  			bridge->hpp.t0->cache_line_size);  	pci_write_config_byte(dev, PCI_LATENCY_TIMER, @@ -1502,6 +1505,37 @@ static void handle_bridge_insertion(acpi_handle handle, u32 type)   * ACPI event handlers   */ +static acpi_status +count_sub_bridges(acpi_handle handle, u32 lvl, void *context, void **rv) +{ +	int *count = (int *)context; +	struct acpiphp_bridge *bridge; + +	bridge = acpiphp_handle_to_bridge(handle); +	if (bridge) +		(*count)++; +	return AE_OK ; +} + +static acpi_status +check_sub_bridges(acpi_handle handle, u32 lvl, void *context, void **rv) +{ +	struct acpiphp_bridge *bridge; +	char objname[64]; +	struct acpi_buffer buffer = { .length = sizeof(objname), +				      .pointer = objname }; + +	bridge = acpiphp_handle_to_bridge(handle); +	if (bridge) { +		acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer); +		dbg("%s: re-enumerating slots under %s\n", +			__FUNCTION__, objname); +		acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer); +		acpiphp_check_bridge(bridge); +	} +	return AE_OK ; +} +  /**   * handle_hotplug_event_bridge - handle ACPI event on bridges   * @@ -1519,6 +1553,7 @@ static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *cont  	struct acpi_buffer buffer = { .length = sizeof(objname),  				      .pointer = objname };  	struct acpi_device *device; +	int num_sub_bridges = 0;  	if (acpi_bus_get_device(handle, &device)) {  		/* This bridge must have just been physically inserted */ @@ -1527,7 +1562,12 @@ static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *cont  	}  	bridge = acpiphp_handle_to_bridge(handle); -	if (!bridge) { +	if (type == ACPI_NOTIFY_BUS_CHECK) { +		acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, ACPI_UINT32_MAX, +			count_sub_bridges, &num_sub_bridges, NULL); +	} + +	if (!bridge && !num_sub_bridges) {  		err("cannot get bridge info\n");  		return;  	} @@ -1538,7 +1578,14 @@ static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *cont  	case ACPI_NOTIFY_BUS_CHECK:  		/* bus re-enumerate */  		dbg("%s: Bus check notify on %s\n", __FUNCTION__, objname); -		acpiphp_check_bridge(bridge); +		if (bridge) { +			dbg("%s: re-enumerating slots under %s\n", +				__FUNCTION__, objname); +			acpiphp_check_bridge(bridge); +		} +		if (num_sub_bridges) +			acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, +				ACPI_UINT32_MAX, check_sub_bridges, NULL, NULL);  		break;  	case ACPI_NOTIFY_DEVICE_CHECK: diff --git a/drivers/pci/hotplug/cpci_hotplug_core.c b/drivers/pci/hotplug/cpci_hotplug_core.c index 684551559d44..ed4d44e3332c 100644 --- a/drivers/pci/hotplug/cpci_hotplug_core.c +++ b/drivers/pci/hotplug/cpci_hotplug_core.c @@ -35,6 +35,7 @@  #include <linux/smp_lock.h>  #include <asm/atomic.h>  #include <linux/delay.h> +#include <linux/kthread.h>  #include "cpci_hotplug.h"  #define DRIVER_AUTHOR	"Scott Murray <scottm@somanetworks.com>" @@ -59,9 +60,8 @@ static int slots;  static atomic_t extracting;  int cpci_debug;  static struct cpci_hp_controller *controller; -static struct semaphore event_semaphore;	/* mutex for process loop (up if something to process) */ -static struct semaphore thread_exit;		/* guard ensure thread has exited before calling it quits */ -static int thread_finished = 1; +static struct task_struct *cpci_thread; +static int thread_finished;  static int enable_slot(struct hotplug_slot *slot);  static int disable_slot(struct hotplug_slot *slot); @@ -357,9 +357,7 @@ cpci_hp_intr(int irq, void *data)  	controller->ops->disable_irq();  	/* Trigger processing by the event thread */ -	dbg("Signal event_semaphore"); -	up(&event_semaphore); -	dbg("exited cpci_hp_intr"); +	wake_up_process(cpci_thread);  	return IRQ_HANDLED;  } @@ -521,17 +519,12 @@ event_thread(void *data)  {  	int rc; -	lock_kernel(); -	daemonize("cpci_hp_eventd"); -	unlock_kernel(); -  	dbg("%s - event thread started", __FUNCTION__);  	while (1) {  		dbg("event thread sleeping"); -		down_interruptible(&event_semaphore); -		dbg("event thread woken, thread_finished = %d", -		    thread_finished); -		if (thread_finished || signal_pending(current)) +		set_current_state(TASK_INTERRUPTIBLE); +		schedule(); +		if (kthread_should_stop())  			break;  		do {  			rc = check_slots(); @@ -541,18 +534,17 @@ event_thread(void *data)  			} else if (rc < 0) {  				dbg("%s - error checking slots", __FUNCTION__);  				thread_finished = 1; -				break; +				goto out;  			} -		} while (atomic_read(&extracting) && !thread_finished); -		if (thread_finished) +		} while (atomic_read(&extracting) && !kthread_should_stop()); +		if (kthread_should_stop())  			break;  		/* Re-enable ENUM# interrupt */  		dbg("%s - re-enabling irq", __FUNCTION__);  		controller->ops->enable_irq();  	} -	dbg("%s - event thread signals exit", __FUNCTION__); -	up(&thread_exit); + out:  	return 0;  } @@ -562,12 +554,8 @@ poll_thread(void *data)  {  	int rc; -	lock_kernel(); -	daemonize("cpci_hp_polld"); -	unlock_kernel(); -  	while (1) { -		if (thread_finished || signal_pending(current)) +		if (kthread_should_stop() || signal_pending(current))  			break;  		if (controller->ops->query_enum()) {  			do { @@ -578,48 +566,36 @@ poll_thread(void *data)  				} else if (rc < 0) {  					dbg("%s - error checking slots", __FUNCTION__);  					thread_finished = 1; -					break; +					goto out;  				} -			} while (atomic_read(&extracting) && !thread_finished); +			} while (atomic_read(&extracting) && !kthread_should_stop());  		}  		msleep(100);  	} -	dbg("poll thread signals exit"); -	up(&thread_exit); + out:  	return 0;  }  static int  cpci_start_thread(void)  { -	int pid; - -	/* initialize our semaphores */ -	init_MUTEX_LOCKED(&event_semaphore); -	init_MUTEX_LOCKED(&thread_exit); -	thread_finished = 0; -  	if (controller->irq) -		pid = kernel_thread(event_thread, NULL, 0); +		cpci_thread = kthread_run(event_thread, NULL, "cpci_hp_eventd");  	else -		pid = kernel_thread(poll_thread, NULL, 0); -	if (pid < 0) { +		cpci_thread = kthread_run(poll_thread, NULL, "cpci_hp_polld"); +	if (IS_ERR(cpci_thread)) {  		err("Can't start up our thread"); -		return -1; +		return PTR_ERR(cpci_thread);  	} -	dbg("Our thread pid = %d", pid); +	thread_finished = 0;  	return 0;  }  static void  cpci_stop_thread(void)  { +	kthread_stop(cpci_thread);  	thread_finished = 1; -	dbg("thread finish command given"); -	if (controller->irq) -		up(&event_semaphore); -	dbg("wait for thread to exit"); -	down(&thread_exit);  }  int diff --git a/drivers/pci/hotplug/cpci_hotplug_pci.c b/drivers/pci/hotplug/cpci_hotplug_pci.c index 7b1beaad2752..5e9be44817cb 100644 --- a/drivers/pci/hotplug/cpci_hotplug_pci.c +++ b/drivers/pci/hotplug/cpci_hotplug_pci.c @@ -45,8 +45,6 @@ extern int cpci_debug;  #define info(format, arg...) printk(KERN_INFO "%s: " format "\n", MY_NAME , ## arg)  #define warn(format, arg...) printk(KERN_WARNING "%s: " format "\n", MY_NAME , ## arg) -#define ROUND_UP(x, a)		(((x) + (a) - 1) & ~((a) - 1)) -  u8 cpci_get_attention_status(struct slot* slot)  { diff --git a/drivers/pci/hotplug/cpqphp_core.c b/drivers/pci/hotplug/cpqphp_core.c index 5617cfdadc5c..d590a99930fa 100644 --- a/drivers/pci/hotplug/cpqphp_core.c +++ b/drivers/pci/hotplug/cpqphp_core.c @@ -796,7 +796,6 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	u8 num_of_slots = 0;  	u8 hp_slot = 0;  	u8 device; -	u8 rev;  	u8 bus_cap;  	u16 temp_word;  	u16 vendor_id; @@ -823,9 +822,8 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	}  	dbg("Vendor ID: %x\n", vendor_id); -	rc = pci_read_config_byte(pdev, PCI_REVISION_ID, &rev); -	dbg("revision: %d\n", rev); -	if (rc || ((vendor_id == PCI_VENDOR_ID_COMPAQ) && (!rev))) { +	dbg("revision: %d\n", pdev->revision); +	if ((vendor_id == PCI_VENDOR_ID_COMPAQ) && (!pdev->revision)) {  		err(msg_HPC_rev_error);  		rc = -ENODEV;  		goto err_disable_device; @@ -836,7 +834,7 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	 * For Intel, each SSID bit identifies a PHP capability.  	 * Also Intel HPC's may have RID=0.  	 */ -	if ((rev > 2) || (vendor_id == PCI_VENDOR_ID_INTEL)) { +	if ((pdev->revision > 2) || (vendor_id == PCI_VENDOR_ID_INTEL)) {  		// TODO: This code can be made to support non-Compaq or Intel subsystem IDs  		rc = pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &subsystem_vid);  		if (rc) { @@ -870,7 +868,7 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  		switch (subsystem_vid) {  			case PCI_VENDOR_ID_COMPAQ: -				if (rev >= 0x13) { /* CIOBX */ +				if (pdev->revision >= 0x13) { /* CIOBX */  					ctrl->push_flag = 1;  					ctrl->slot_switch_type = 1;  					ctrl->push_button = 1; @@ -1075,7 +1073,7 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	memcpy(ctrl->pci_bus, pdev->bus, sizeof(*ctrl->pci_bus));  	ctrl->bus = pdev->bus->number; -	ctrl->rev = rev; +	ctrl->rev = pdev->revision;  	dbg("bus device function rev: %d %d %d %d\n", ctrl->bus,  		PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn), ctrl->rev); diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h index ccc57627201e..7959c222dc24 100644 --- a/drivers/pci/hotplug/pciehp.h +++ b/drivers/pci/hotplug/pciehp.h @@ -103,6 +103,7 @@ struct controller {  	u8 cap_base;  	struct timer_list poll_timer;  	volatile int cmd_busy; +	spinlock_t lock;  };  #define INT_BUTTON_IGNORE		0 diff --git a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c index 7f22caa70178..98e541ffef3d 100644 --- a/drivers/pci/hotplug/pciehp_ctrl.c +++ b/drivers/pci/hotplug/pciehp_ctrl.c @@ -197,6 +197,12 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot)  			    __FUNCTION__);  			return;  		} +		/* +		 * After turning power off, we must wait for at least +		 * 1 second before taking any action that relies on +		 * power having been removed from the slot/adapter. +		 */ +		msleep(1000);  	}  } @@ -615,6 +621,12 @@ int pciehp_disable_slot(struct slot *p_slot)  			mutex_unlock(&p_slot->ctrl->crit_sect);  			return -EINVAL;  		} +		/* +		 * After turning power off, we must wait for at least +		 * 1 second before taking any action that relies on +		 * power having been removed from the slot/adapter. +		 */ +		msleep(1000);  	}  	ret = remove_board(p_slot); diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 9aac6a87eb53..016eea94a8a5 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c @@ -275,11 +275,19 @@ static inline int pcie_wait_cmd(struct controller *ctrl)  	return retval;  } -static int pcie_write_cmd(struct slot *slot, u16 cmd) +/** + * pcie_write_cmd - Issue controller command + * @slot: slot to which the command is issued + * @cmd:  command value written to slot control register + * @mask: bitmask of slot control register to be modified + */ +static int pcie_write_cmd(struct slot *slot, u16 cmd, u16 mask)  {  	struct controller *ctrl = slot->ctrl;  	int retval = 0;  	u16 slot_status; +	u16 slot_ctrl; +	unsigned long flags;  	DBG_ENTER_ROUTINE  @@ -299,17 +307,29 @@ static int pcie_write_cmd(struct slot *slot, u16 cmd)  		    __FUNCTION__);  	} -	ctrl->cmd_busy = 1; -	retval = pciehp_writew(ctrl, SLOTCTRL, (cmd | CMD_CMPL_INTR_ENABLE)); +	spin_lock_irqsave(&ctrl->lock, flags); +	retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl);  	if (retval) { -		err("%s: Cannot write to SLOTCTRL register\n", __FUNCTION__); -		goto out; +		err("%s: Cannot read SLOTCTRL register\n", __FUNCTION__); +		goto out_spin_unlock;  	} +	slot_ctrl &= ~mask; +	slot_ctrl |= ((cmd & mask) | CMD_CMPL_INTR_ENABLE); + +	ctrl->cmd_busy = 1; +	retval = pciehp_writew(ctrl, SLOTCTRL, slot_ctrl); +	if (retval) +		err("%s: Cannot write to SLOTCTRL register\n", __FUNCTION__); + + out_spin_unlock: +	spin_unlock_irqrestore(&ctrl->lock, flags); +  	/*  	 * Wait for command completion.  	 */ -	retval = pcie_wait_cmd(ctrl); +	if (!retval) +		retval = pcie_wait_cmd(ctrl);   out:  	mutex_unlock(&ctrl->ctrl_lock);  	DBG_LEAVE_ROUTINE  @@ -502,25 +522,20 @@ static int hpc_get_emi_status(struct slot *slot, u8 *status)  static int hpc_toggle_emi(struct slot *slot)  { -	struct controller *ctrl = slot->ctrl; -	u16 slot_cmd = 0; -	u16 slot_ctrl; -	int rc = 0; +	u16 slot_cmd; +	u16 cmd_mask; +	int rc;  	DBG_ENTER_ROUTINE -	rc = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); -	if (rc) { -		err("%s : hp_register_read_word SLOT_CTRL failed\n", -			__FUNCTION__); -		return rc; -	} - -	slot_cmd = (slot_ctrl | EMI_CTRL); -	if (!pciehp_poll_mode) +	slot_cmd = EMI_CTRL; +	cmd_mask = EMI_CTRL; +	if (!pciehp_poll_mode) {  		slot_cmd = slot_cmd | HP_INTR_ENABLE; +		cmd_mask = cmd_mask | HP_INTR_ENABLE; +	} -	pcie_write_cmd(slot, slot_cmd); +	rc = pcie_write_cmd(slot, slot_cmd, cmd_mask);  	slot->last_emi_toggle = get_seconds();  	DBG_LEAVE_ROUTINE  	return rc; @@ -529,35 +544,32 @@ static int hpc_toggle_emi(struct slot *slot)  static int hpc_set_attention_status(struct slot *slot, u8 value)  {  	struct controller *ctrl = slot->ctrl; -	u16 slot_cmd = 0; -	u16 slot_ctrl; -	int rc = 0; +	u16 slot_cmd; +	u16 cmd_mask; +	int rc;  	DBG_ENTER_ROUTINE -	rc = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); -	if (rc) { -		err("%s: Cannot read SLOTCTRL register\n", __FUNCTION__); -		return rc; -	} - +	cmd_mask = ATTN_LED_CTRL;  	switch (value) {  		case 0 :	/* turn off */ -			slot_cmd = (slot_ctrl & ~ATTN_LED_CTRL) | 0x00C0; +			slot_cmd = 0x00C0;  			break;  		case 1:		/* turn on */ -			slot_cmd = (slot_ctrl & ~ATTN_LED_CTRL) | 0x0040; +			slot_cmd = 0x0040;  			break;  		case 2:		/* turn blink */ -			slot_cmd = (slot_ctrl & ~ATTN_LED_CTRL) | 0x0080; +			slot_cmd = 0x0080;  			break;  		default:  			return -1;  	} -	if (!pciehp_poll_mode) -		slot_cmd = slot_cmd | HP_INTR_ENABLE;  +	if (!pciehp_poll_mode) { +		slot_cmd = slot_cmd | HP_INTR_ENABLE; +		cmd_mask = cmd_mask | HP_INTR_ENABLE; +	} -	pcie_write_cmd(slot, slot_cmd); +	rc = pcie_write_cmd(slot, slot_cmd, cmd_mask);  	dbg("%s: SLOTCTRL %x write cmd %x\n",  	    __FUNCTION__, ctrl->cap_base + SLOTCTRL, slot_cmd); @@ -570,21 +582,18 @@ static void hpc_set_green_led_on(struct slot *slot)  {  	struct controller *ctrl = slot->ctrl;  	u16 slot_cmd; -	u16 slot_ctrl; -	int rc = 0; +	u16 cmd_mask;  	DBG_ENTER_ROUTINE -	rc = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); -	if (rc) { -		err("%s: Cannot read SLOTCTRL register\n", __FUNCTION__); -		return; +	slot_cmd = 0x0100; +	cmd_mask = PWR_LED_CTRL; +	if (!pciehp_poll_mode) { +		slot_cmd = slot_cmd | HP_INTR_ENABLE; +		cmd_mask = cmd_mask | HP_INTR_ENABLE;  	} -	slot_cmd = (slot_ctrl & ~PWR_LED_CTRL) | 0x0100; -	if (!pciehp_poll_mode) -		slot_cmd = slot_cmd | HP_INTR_ENABLE;  -	pcie_write_cmd(slot, slot_cmd); +	pcie_write_cmd(slot, slot_cmd, cmd_mask);  	dbg("%s: SLOTCTRL %x write cmd %x\n",  	    __FUNCTION__, ctrl->cap_base + SLOTCTRL, slot_cmd); @@ -596,22 +605,18 @@ static void hpc_set_green_led_off(struct slot *slot)  {  	struct controller *ctrl = slot->ctrl;  	u16 slot_cmd; -	u16 slot_ctrl; -	int rc = 0; +	u16 cmd_mask;  	DBG_ENTER_ROUTINE -	rc = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); -	if (rc) { -		err("%s: Cannot read SLOTCTRL register\n", __FUNCTION__); -		return; +	slot_cmd = 0x0300; +	cmd_mask = PWR_LED_CTRL; +	if (!pciehp_poll_mode) { +		slot_cmd = slot_cmd | HP_INTR_ENABLE; +		cmd_mask = cmd_mask | HP_INTR_ENABLE;  	} -	slot_cmd = (slot_ctrl & ~PWR_LED_CTRL) | 0x0300; - -	if (!pciehp_poll_mode) -		slot_cmd = slot_cmd | HP_INTR_ENABLE;  -	pcie_write_cmd(slot, slot_cmd); +	pcie_write_cmd(slot, slot_cmd, cmd_mask);  	dbg("%s: SLOTCTRL %x write cmd %x\n",  	    __FUNCTION__, ctrl->cap_base + SLOTCTRL, slot_cmd); @@ -623,22 +628,18 @@ static void hpc_set_green_led_blink(struct slot *slot)  {  	struct controller *ctrl = slot->ctrl;  	u16 slot_cmd; -	u16 slot_ctrl; -	int rc = 0;  +	u16 cmd_mask;  	DBG_ENTER_ROUTINE -	rc = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); -	if (rc) { -		err("%s: Cannot read SLOTCTRL register\n", __FUNCTION__); -		return; +	slot_cmd = 0x0200; +	cmd_mask = PWR_LED_CTRL; +	if (!pciehp_poll_mode) { +		slot_cmd = slot_cmd | HP_INTR_ENABLE; +		cmd_mask = cmd_mask | HP_INTR_ENABLE;  	} -	slot_cmd = (slot_ctrl & ~PWR_LED_CTRL) | 0x0200; - -	if (!pciehp_poll_mode) -		slot_cmd = slot_cmd | HP_INTR_ENABLE;  -	pcie_write_cmd(slot, slot_cmd); +	pcie_write_cmd(slot, slot_cmd, cmd_mask);  	dbg("%s: SLOTCTRL %x write cmd %x\n",  	    __FUNCTION__, ctrl->cap_base + SLOTCTRL, slot_cmd); @@ -669,7 +670,8 @@ static int hpc_power_on_slot(struct slot * slot)  {  	struct controller *ctrl = slot->ctrl;  	u16 slot_cmd; -	u16 slot_ctrl, slot_status; +	u16 cmd_mask; +	u16 slot_status;  	int retval = 0;  	DBG_ENTER_ROUTINE  @@ -692,23 +694,23 @@ static int hpc_power_on_slot(struct slot * slot)  		}  	} -	retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); -	if (retval) { -		err("%s: Cannot read SLOTCTRL register\n", __FUNCTION__); -		return retval; -	} - -	slot_cmd = (slot_ctrl & ~PWR_CTRL) | POWER_ON; - +	slot_cmd = POWER_ON; +	cmd_mask = PWR_CTRL;  	/* Enable detection that we turned off at slot power-off time */ -	if (!pciehp_poll_mode) +	if (!pciehp_poll_mode) {  		slot_cmd = slot_cmd |  		           PWR_FAULT_DETECT_ENABLE |  		           MRL_DETECT_ENABLE |  		           PRSN_DETECT_ENABLE |  		           HP_INTR_ENABLE; +		cmd_mask = cmd_mask | +		           PWR_FAULT_DETECT_ENABLE | +		           MRL_DETECT_ENABLE | +		           PRSN_DETECT_ENABLE | +		           HP_INTR_ENABLE; +	} -	retval = pcie_write_cmd(slot, slot_cmd); +	retval = pcie_write_cmd(slot, slot_cmd, cmd_mask);  	if (retval) {  		err("%s: Write %x command failed!\n", __FUNCTION__, slot_cmd); @@ -726,21 +728,15 @@ static int hpc_power_off_slot(struct slot * slot)  {  	struct controller *ctrl = slot->ctrl;  	u16 slot_cmd; -	u16 slot_ctrl; +	u16 cmd_mask;  	int retval = 0;  	DBG_ENTER_ROUTINE   	dbg("%s: slot->hp_slot %x\n", __FUNCTION__, slot->hp_slot); -	retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); -	if (retval) { -		err("%s: Cannot read SLOTCTRL register\n", __FUNCTION__); -		return retval; -	} - -	slot_cmd = (slot_ctrl & ~PWR_CTRL) | POWER_OFF; - +	slot_cmd = POWER_OFF; +	cmd_mask = PWR_CTRL;  	/*  	 * If we get MRL or presence detect interrupts now, the isr  	 * will notice the sticky power-fault bit too and issue power @@ -748,14 +744,19 @@ static int hpc_power_off_slot(struct slot * slot)  	 * of command completions, since the power-fault bit remains on  	 * till the slot is powered on again.  	 */ -	if (!pciehp_poll_mode) +	if (!pciehp_poll_mode) {  		slot_cmd = (slot_cmd &  		            ~PWR_FAULT_DETECT_ENABLE &  		            ~MRL_DETECT_ENABLE &  		            ~PRSN_DETECT_ENABLE) | HP_INTR_ENABLE; +		cmd_mask = cmd_mask | +			   PWR_FAULT_DETECT_ENABLE | +			   MRL_DETECT_ENABLE | +			   PRSN_DETECT_ENABLE | +			   HP_INTR_ENABLE; +	} -	retval = pcie_write_cmd(slot, slot_cmd); - +	retval = pcie_write_cmd(slot, slot_cmd, cmd_mask);  	if (retval) {  		err("%s: Write command failed!\n", __FUNCTION__);  		return -1; @@ -775,6 +776,7 @@ static irqreturn_t pcie_isr(int irq, void *dev_id)  	u16 temp_word;  	int hp_slot = 0;	/* only 1 slot per PCI Express port */  	int rc = 0; +	unsigned long flags;  	rc = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);  	if (rc) { @@ -794,10 +796,12 @@ static irqreturn_t pcie_isr(int irq, void *dev_id)  	dbg("%s: intr_loc %x\n", __FUNCTION__, intr_loc);  	/* Mask Hot-plug Interrupt Enable */  	if (!pciehp_poll_mode) { +		spin_lock_irqsave(&ctrl->lock, flags);  		rc = pciehp_readw(ctrl, SLOTCTRL, &temp_word);  		if (rc) {  			err("%s: Cannot read SLOT_CTRL register\n",  			    __FUNCTION__); +			spin_unlock_irqrestore(&ctrl->lock, flags);  			return IRQ_NONE;  		} @@ -808,8 +812,10 @@ static irqreturn_t pcie_isr(int irq, void *dev_id)  		if (rc) {  			err("%s: Cannot write to SLOTCTRL register\n",  			    __FUNCTION__); +			spin_unlock_irqrestore(&ctrl->lock, flags);  			return IRQ_NONE;  		} +		spin_unlock_irqrestore(&ctrl->lock, flags);  		rc = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);  		if (rc) { @@ -859,10 +865,12 @@ static irqreturn_t pcie_isr(int irq, void *dev_id)  	}  	/* Unmask Hot-plug Interrupt Enable */  	if (!pciehp_poll_mode) { +		spin_lock_irqsave(&ctrl->lock, flags);  		rc = pciehp_readw(ctrl, SLOTCTRL, &temp_word);  		if (rc) {  			err("%s: Cannot read SLOTCTRL register\n",  			    __FUNCTION__); +			spin_unlock_irqrestore(&ctrl->lock, flags);  			return IRQ_NONE;  		} @@ -873,8 +881,10 @@ static irqreturn_t pcie_isr(int irq, void *dev_id)  		if (rc) {  			err("%s: Cannot write to SLOTCTRL register\n",  			    __FUNCTION__); +			spin_unlock_irqrestore(&ctrl->lock, flags);  			return IRQ_NONE;  		} +		spin_unlock_irqrestore(&ctrl->lock, flags);  		rc = pciehp_readw(ctrl, SLOTSTATUS, &slot_status);  		if (rc) { @@ -1237,6 +1247,7 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)  	mutex_init(&ctrl->crit_sect);  	mutex_init(&ctrl->ctrl_lock); +	spin_lock_init(&ctrl->lock);  	/* setup wait queue */  	init_waitqueue_head(&ctrl->queue); diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c index b5ac810404c0..c8062494009f 100644 --- a/drivers/pci/pci-acpi.c +++ b/drivers/pci/pci-acpi.c @@ -55,8 +55,6 @@ acpi_query_osc (  	status = acpi_evaluate_object(handle, "_OSC", &input, &output);  	if (ACPI_FAILURE (status)) { -		printk(KERN_DEBUG   -			"Evaluate _OSC Set fails. Status = 0x%04x\n", status);  		*ret_status = status;  		return status;  	} @@ -124,11 +122,9 @@ acpi_run_osc (  	in_params[3].buffer.pointer 	= (u8 *)context;  	status = acpi_evaluate_object(handle, "_OSC", &input, &output); -	if (ACPI_FAILURE (status)) { -		printk(KERN_DEBUG   -			"Evaluate _OSC Set fails. Status = 0x%04x\n", status); +	if (ACPI_FAILURE (status))  		return status; -	} +  	out_obj = output.pointer;  	if (out_obj->type != ACPI_TYPE_BUFFER) {  		printk(KERN_DEBUG   diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index 6543cbe83be5..10dbdec80416 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -603,6 +603,11 @@ static struct bin_attribute pcie_config_attr = {  	.write = pci_write_config,  }; +int __attribute__ ((weak)) pcibios_add_platform_entries(struct pci_dev *dev) +{ +	return 0; +} +  int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev)  {  	struct bin_attribute *rom_attr = NULL; @@ -642,10 +647,14 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev)  		}  	}  	/* add platform-specific attributes */ -	pcibios_add_platform_entries(pdev); +	if (pcibios_add_platform_entries(pdev)) +		goto err_rom_file;  	return 0; +err_rom_file: +	if (pci_resource_len(pdev, PCI_ROM_RESOURCE)) +		sysfs_remove_bin_file(&pdev->dev.kobj, rom_attr);  err_rom:  	kfree(rom_attr);  err_resource_files: diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index fd47ac0c4730..03fd59e80fef 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -406,6 +406,13 @@ pci_set_power_state(struct pci_dev *dev, pci_power_t state)  	if ((state == PCI_D1 || state == PCI_D2) && pci_no_d1d2(dev))  		return 0; +	/* find PCI PM capability in list */ +	pm = pci_find_capability(dev, PCI_CAP_ID_PM); + +	/* abort if the device doesn't support PM capabilities */ +	if (!pm) +		return -EIO; +  	/* Validate current state:  	 * Can enter D0 from any state, but if we can only go deeper   	 * to sleep if we're already in a low power state @@ -418,13 +425,6 @@ pci_set_power_state(struct pci_dev *dev, pci_power_t state)  		return 0;        /* we're already there */ -	/* find PCI PM capability in list */ -	pm = pci_find_capability(dev, PCI_CAP_ID_PM); -	 -	/* abort if the device doesn't support PM capabilities */ -	if (!pm) -		return -EIO;  -  	pci_read_config_word(dev,pm + PCI_PM_PMC,&pmc);  	if ((pmc & PCI_PM_CAP_VER_MASK) > 3) {  		printk(KERN_DEBUG @@ -1186,6 +1186,11 @@ int pci_set_mwi(struct pci_dev *dev)  	return 0;  } +int pci_try_set_mwi(struct pci_dev *dev) +{ +	return 0; +} +  void pci_clear_mwi(struct pci_dev *dev)  {  } @@ -1242,9 +1247,7 @@ pci_set_cacheline_size(struct pci_dev *dev)   * pci_set_mwi - enables memory-write-invalidate PCI transaction   * @dev: the PCI device for which MWI is enabled   * - * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND, - * and then calls @pcibios_set_mwi to do the needed arch specific - * operations or a generic mwi-prep function. + * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.   *   * RETURNS: An appropriate -ERRNO error value on error, or zero for success.   */ @@ -1260,7 +1263,8 @@ pci_set_mwi(struct pci_dev *dev)  	pci_read_config_word(dev, PCI_COMMAND, &cmd);  	if (! (cmd & PCI_COMMAND_INVALIDATE)) { -		pr_debug("PCI: Enabling Mem-Wr-Inval for device %s\n", pci_name(dev)); +		pr_debug("PCI: Enabling Mem-Wr-Inval for device %s\n", +			pci_name(dev));  		cmd |= PCI_COMMAND_INVALIDATE;  		pci_write_config_word(dev, PCI_COMMAND, cmd);  	} @@ -1269,6 +1273,21 @@ pci_set_mwi(struct pci_dev *dev)  }  /** + * pci_try_set_mwi - enables memory-write-invalidate PCI transaction + * @dev: the PCI device for which MWI is enabled + * + * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND. + * Callers are not required to check the return value. + * + * RETURNS: An appropriate -ERRNO error value on error, or zero for success. + */ +int pci_try_set_mwi(struct pci_dev *dev) +{ +	int rc = pci_set_mwi(dev); +	return rc; +} + +/**   * pci_clear_mwi - disables Memory-Write-Invalidate for device dev   * @dev: the PCI device to disable   * @@ -1375,6 +1394,164 @@ pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)  #endif  /** + * pcix_get_max_mmrbc - get PCI-X maximum designed memory read byte count + * @dev: PCI device to query + * + * Returns mmrbc: maximum designed memory read count in bytes + *    or appropriate error value. + */ +int pcix_get_max_mmrbc(struct pci_dev *dev) +{ +	int err, cap; +	u32 stat; + +	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); +	if (!cap) +		return -EINVAL; + +	err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat); +	if (err) +		return -EINVAL; + +	return (stat & PCI_X_STATUS_MAX_READ) >> 12; +} +EXPORT_SYMBOL(pcix_get_max_mmrbc); + +/** + * pcix_get_mmrbc - get PCI-X maximum memory read byte count + * @dev: PCI device to query + * + * Returns mmrbc: maximum memory read count in bytes + *    or appropriate error value. + */ +int pcix_get_mmrbc(struct pci_dev *dev) +{ +	int ret, cap; +	u32 cmd; + +	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); +	if (!cap) +		return -EINVAL; + +	ret = pci_read_config_dword(dev, cap + PCI_X_CMD, &cmd); +	if (!ret) +		ret = 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2); + +	return ret; +} +EXPORT_SYMBOL(pcix_get_mmrbc); + +/** + * pcix_set_mmrbc - set PCI-X maximum memory read byte count + * @dev: PCI device to query + * @mmrbc: maximum memory read count in bytes + *    valid values are 512, 1024, 2048, 4096 + * + * If possible sets maximum memory read byte count, some bridges have erratas + * that prevent this. + */ +int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc) +{ +	int cap, err = -EINVAL; +	u32 stat, cmd, v, o; + +	if (mmrbc < 512 || mmrbc > 4096 || (mmrbc & (mmrbc-1))) +		goto out; + +	v = ffs(mmrbc) - 10; + +	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX); +	if (!cap) +		goto out; + +	err = pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat); +	if (err) +		goto out; + +	if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21) +		return -E2BIG; + +	err = pci_read_config_dword(dev, cap + PCI_X_CMD, &cmd); +	if (err) +		goto out; + +	o = (cmd & PCI_X_CMD_MAX_READ) >> 2; +	if (o != v) { +		if (v > o && dev->bus && +		   (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_MMRBC)) +			return -EIO; + +		cmd &= ~PCI_X_CMD_MAX_READ; +		cmd |= v << 2; +		err = pci_write_config_dword(dev, cap + PCI_X_CMD, cmd); +	} +out: +	return err; +} +EXPORT_SYMBOL(pcix_set_mmrbc); + +/** + * pcie_get_readrq - get PCI Express read request size + * @dev: PCI device to query + * + * Returns maximum memory read request in bytes + *    or appropriate error value. + */ +int pcie_get_readrq(struct pci_dev *dev) +{ +	int ret, cap; +	u16 ctl; + +	cap = pci_find_capability(dev, PCI_CAP_ID_EXP); +	if (!cap) +		return -EINVAL; + +	ret = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl); +	if (!ret) +	ret = 128 << ((ctl & PCI_EXP_DEVCTL_READRQ) >> 12); + +	return ret; +} +EXPORT_SYMBOL(pcie_get_readrq); + +/** + * pcie_set_readrq - set PCI Express maximum memory read request + * @dev: PCI device to query + * @count: maximum memory read count in bytes + *    valid values are 128, 256, 512, 1024, 2048, 4096 + * + * If possible sets maximum read byte count + */ +int pcie_set_readrq(struct pci_dev *dev, int rq) +{ +	int cap, err = -EINVAL; +	u16 ctl, v; + +	if (rq < 128 || rq > 4096 || (rq & (rq-1))) +		goto out; + +	v = (ffs(rq) - 8) << 12; + +	cap = pci_find_capability(dev, PCI_CAP_ID_EXP); +	if (!cap) +		goto out; + +	err = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl); +	if (err) +		goto out; + +	if ((ctl & PCI_EXP_DEVCTL_READRQ) != v) { +		ctl &= ~PCI_EXP_DEVCTL_READRQ; +		ctl |= v; +		err = pci_write_config_dword(dev, cap + PCI_EXP_DEVCTL, ctl); +	} + +out: +	return err; +} +EXPORT_SYMBOL(pcie_set_readrq); + +/**   * pci_select_bars - Make BAR mask from the type of resource   * @dev: the PCI device for which BAR mask is made   * @flags: resource type mask to be selected @@ -1442,6 +1619,7 @@ EXPORT_SYMBOL(pci_release_selected_regions);  EXPORT_SYMBOL(pci_request_selected_regions);  EXPORT_SYMBOL(pci_set_master);  EXPORT_SYMBOL(pci_set_mwi); +EXPORT_SYMBOL(pci_try_set_mwi);  EXPORT_SYMBOL(pci_clear_mwi);  EXPORT_SYMBOL_GPL(pci_intx);  EXPORT_SYMBOL(pci_set_dma_mask); diff --git a/drivers/pci/pcie/aer/Kconfig b/drivers/pci/pcie/aer/Kconfig index 3f37a60a6438..c3bde588aa13 100644 --- a/drivers/pci/pcie/aer/Kconfig +++ b/drivers/pci/pcie/aer/Kconfig @@ -4,7 +4,7 @@  config PCIEAER  	boolean "Root Port Advanced Error Reporting support" -	depends on PCIEPORTBUS && ACPI +	depends on PCIEPORTBUS  	default y  	help  	  This enables PCI Express Root Port Advanced Error Reporting diff --git a/drivers/pci/pcie/aer/Makefile b/drivers/pci/pcie/aer/Makefile index 15a4f40d520b..8da3bd8455a8 100644 --- a/drivers/pci/pcie/aer/Makefile +++ b/drivers/pci/pcie/aer/Makefile @@ -4,5 +4,6 @@  obj-$(CONFIG_PCIEAER) += aerdriver.o -aerdriver-objs := aerdrv_errprint.o aerdrv_core.o aerdrv.o aerdrv_acpi.o +aerdriver-objs := aerdrv_errprint.o aerdrv_core.o aerdrv.o +aerdriver-$(CONFIG_ACPI) += aerdrv_acpi.o diff --git a/drivers/pci/pcie/aer/aerdrv.c b/drivers/pci/pcie/aer/aerdrv.c index db6ad8e763ac..6846fb42b399 100644 --- a/drivers/pci/pcie/aer/aerdrv.c +++ b/drivers/pci/pcie/aer/aerdrv.c @@ -157,7 +157,7 @@ static struct aer_rpc* aer_alloc_rpc(struct pcie_device *dev)  	 * Initialize Root lock access, e_lock, to Root Error Status Reg,  	 * Root Error ID Reg, and Root error producer/consumer index.  	 */ -	rpc->e_lock = SPIN_LOCK_UNLOCKED; +	spin_lock_init(&rpc->e_lock);  	rpc->rpd = dev;  	INIT_WORK(&rpc->dpc_handler, aer_isr); diff --git a/drivers/pci/pcie/aer/aerdrv.h b/drivers/pci/pcie/aer/aerdrv.h index 5cca394d5999..c7ad68b6c6d6 100644 --- a/drivers/pci/pcie/aer/aerdrv.h +++ b/drivers/pci/pcie/aer/aerdrv.h @@ -19,10 +19,6 @@  #define AER_ERROR_MASK			0x001fffff  #define AER_ERROR(d)			(d & AER_ERROR_MASK) -#define OSC_METHOD_RUN_SUCCESS		0 -#define OSC_METHOD_NOT_SUPPORTED	1 -#define OSC_METHOD_RUN_FAILURE		2 -  /* Root Error Status Register Bits */  #define ROOT_ERR_STATUS_MASKS			0x0f @@ -121,6 +117,14 @@ extern void aer_delete_rootport(struct aer_rpc *rpc);  extern int aer_init(struct pcie_device *dev);  extern void aer_isr(struct work_struct *work);  extern void aer_print_error(struct pci_dev *dev, struct aer_err_info *info); -extern int aer_osc_setup(struct pci_dev *dev); + +#ifdef CONFIG_ACPI +extern int aer_osc_setup(struct pcie_device *pciedev); +#else +static inline int aer_osc_setup(struct pcie_device *pciedev) +{ +	return 0; +} +#endif  #endif //_AERDRV_H_ diff --git a/drivers/pci/pcie/aer/aerdrv_acpi.c b/drivers/pci/pcie/aer/aerdrv_acpi.c index fa68e89ebec9..1a1eb45a779e 100644 --- a/drivers/pci/pcie/aer/aerdrv_acpi.c +++ b/drivers/pci/pcie/aer/aerdrv_acpi.c @@ -20,19 +20,18 @@  /**   * aer_osc_setup - run ACPI _OSC method + * @pciedev: pcie_device which AER is being enabled on   * - * Return: - *	Zero if success. Nonzero for otherwise. + * @return: Zero on success. Nonzero otherwise.   *   * Invoked when PCIE bus loads AER service driver. To avoid conflict with   * BIOS AER support requires BIOS to yield AER control to OS native driver.   **/ -int aer_osc_setup(struct pci_dev *dev) +int aer_osc_setup(struct pcie_device *pciedev)  { -	int retval = OSC_METHOD_RUN_SUCCESS; -	acpi_status status; -	acpi_handle handle = DEVICE_ACPI_HANDLE(&dev->dev); -	struct pci_dev *pdev = dev; +	acpi_status status = AE_NOT_FOUND; +	struct pci_dev *pdev = pciedev->port; +	acpi_handle handle = DEVICE_ACPI_HANDLE(&pdev->dev);  	struct pci_bus *parent;  	while (!handle) { @@ -50,19 +49,20 @@ int aer_osc_setup(struct pci_dev *dev)  		pdev = parent->self;  	} -	if (!handle) -		return OSC_METHOD_NOT_SUPPORTED; +	if (handle) { +		pci_osc_support_set(OSC_EXT_PCI_CONFIG_SUPPORT); +		status = pci_osc_control_set(handle, +					OSC_PCI_EXPRESS_AER_CONTROL | +					OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL); +	} -	pci_osc_support_set(OSC_EXT_PCI_CONFIG_SUPPORT); -	status = pci_osc_control_set(handle, OSC_PCI_EXPRESS_AER_CONTROL | -		OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL);  	if (ACPI_FAILURE(status)) { -		if (status == AE_SUPPORT) -			retval = OSC_METHOD_NOT_SUPPORTED; -	 	else -			retval = OSC_METHOD_RUN_FAILURE; +		printk(KERN_DEBUG "AER service couldn't init device %s - %s\n", +		    pciedev->device.bus_id, +		    (status == AE_SUPPORT || status == AE_NOT_FOUND) ? +		    "no _OSC support" : "Run ACPI _OSC fails"); +		return -1;  	} -	return retval; +	return 0;  } - diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c index 08e13033ced8..92a8469b21ba 100644 --- a/drivers/pci/pcie/aer/aerdrv_core.c +++ b/drivers/pci/pcie/aer/aerdrv_core.c @@ -22,8 +22,6 @@  #include <linux/errno.h>  #include <linux/pm.h>  #include <linux/suspend.h> -#include <linux/acpi.h> -#include <linux/pci-acpi.h>  #include <linux/delay.h>  #include "aerdrv.h" @@ -119,6 +117,21 @@ int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev)  	return 0;  } +int pci_cleanup_aer_correct_error_status(struct pci_dev *dev) +{ +	int pos; +	u32 status; + +	pos = pci_find_aer_capability(dev); +	if (!pos) +		return -EIO; + +	pci_read_config_dword(dev, pos + PCI_ERR_COR_STATUS, &status); +	pci_write_config_dword(dev, pos + PCI_ERR_COR_STATUS, status); + +	return 0; +} +  static int find_device_iter(struct device *device, void *data)  {  	struct pci_dev *dev; @@ -733,20 +746,8 @@ void aer_delete_rootport(struct aer_rpc *rpc)   **/  int aer_init(struct pcie_device *dev)  { -	int status; - -	/* Run _OSC Method */ -	status = aer_osc_setup(dev->port); - -	if(status != OSC_METHOD_RUN_SUCCESS) { -		printk(KERN_DEBUG "%s: AER service init fails - %s\n", -		__FUNCTION__, -		(status == OSC_METHOD_NOT_SUPPORTED) ? -			"No ACPI _OSC support" : "Run ACPI _OSC fails"); - -		if (!forceload) -			return status; -	} +	if (aer_osc_setup(dev) && !forceload) +		return -ENXIO;  	return AER_SUCCESS;  } @@ -755,4 +756,5 @@ EXPORT_SYMBOL_GPL(pci_find_aer_capability);  EXPORT_SYMBOL_GPL(pci_enable_pcie_error_reporting);  EXPORT_SYMBOL_GPL(pci_disable_pcie_error_reporting);  EXPORT_SYMBOL_GPL(pci_cleanup_aer_uncorrect_error_status); +EXPORT_SYMBOL_GPL(pci_cleanup_aer_correct_error_status); diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 08783bd381f5..a7bce75c6732 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -654,7 +654,7 @@ int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass  			       pcibios_assign_all_busses() ? " " :  			       " (try 'pci=assign-busses')");  			printk(KERN_WARNING "Please report the result to " -			       "linux-kernel to fix this permanently\n"); +			       "<bk@suse.de> to fix this permanently\n");  		}  		bus = bus->parent;  	} @@ -700,6 +700,7 @@ static int pci_setup_device(struct pci_dev * dev)  		dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn));  	pci_read_config_dword(dev, PCI_CLASS_REVISION, &class); +	dev->revision = class & 0xff;  	class >>= 8;				    /* upper 3 bytes */  	dev->class = class;  	class >>= 8; diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c index 0425a7b7350d..cfa0dfe61b1a 100644 --- a/drivers/pci/proc.c +++ b/drivers/pci/proc.c @@ -480,7 +480,6 @@ static int __init pci_proc_init(void)  __initcall(pci_proc_init);  #ifdef CONFIG_HOTPLUG -EXPORT_SYMBOL(pci_proc_attach_device);  EXPORT_SYMBOL(pci_proc_detach_bus);  #endif diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 01d8f8a8843c..c559085c89a5 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -587,10 +587,7 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_VIA,	PCI_DEVICE_ID_VIA_8237,		quirk_via_v   */  static void __devinit quirk_amd_ioapic(struct pci_dev *dev)  { -	u8 rev; - -	pci_read_config_byte(dev, PCI_REVISION_ID, &rev); -	if (rev >= 0x02) { +	if (dev->revision >= 0x02) {  		printk(KERN_WARNING "I/O APIC: AMD Erratum #22 may be present. In the event of instability try\n");  		printk(KERN_WARNING "        : booting with the \"noapic\" option.\n");  	} @@ -610,13 +607,12 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SI,	PCI_ANY_ID,			quirk_ioapic_rmw );  #define AMD8131_NIOAMODE_BIT 0  static void quirk_amd_8131_ioapic(struct pci_dev *dev)  {  -        unsigned char revid, tmp; +        unsigned char tmp;          if (nr_ioapics == 0)                   return; -        pci_read_config_byte(dev, PCI_REVISION_ID, &revid); -        if (revid == AMD8131_revA0 || revid == AMD8131_revB0) { +        if (dev->revision == AMD8131_revA0 || dev->revision == AMD8131_revB0) {                  printk(KERN_INFO "Fixing up AMD8131 IOAPIC mode\n");                   pci_read_config_byte( dev, AMD8131_MISC, &tmp);                  tmp &= ~(1 << AMD8131_NIOAMODE_BIT); @@ -627,6 +623,22 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_  DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_ioapic);  #endif /* CONFIG_X86_IO_APIC */ +/* + * Some settings of MMRBC can lead to data corruption so block changes. + * See AMD 8131 HyperTransport PCI-X Tunnel Revision Guide + */ +static void __init quirk_amd_8131_mmrbc(struct pci_dev *dev) +{ +	unsigned char revid; + +	pci_read_config_byte(dev, PCI_REVISION_ID, &revid); +	if (dev->subordinate && revid <= 0x12) { +		printk(KERN_INFO "AMD8131 rev %x detected, disabling PCI-X " +				"MMRBC\n", revid); +		dev->subordinate->bus_flags |= PCI_BUS_FLAGS_NO_MMRBC; +	} +} +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8131_BRIDGE, quirk_amd_8131_mmrbc);  /*   * FIXME: it is questionable that quirk_via_acpi @@ -843,10 +855,8 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_CYRIX,	PCI_DEVICE_ID_CYRIX_PCI_MASTER, qu  static void quirk_disable_pxb(struct pci_dev *pdev)  {  	u16 config; -	u8 rev; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev); -	if (rev != 0x04)		/* Only C0 requires this */ +	if (pdev->revision != 0x04)		/* Only C0 requires this */  		return;  	pci_read_config_word(pdev, 0x40, &config);  	if (config & (1<<6)) { diff --git a/drivers/pci/search.c b/drivers/pci/search.c index c13232435dc0..9f7090fa8771 100644 --- a/drivers/pci/search.c +++ b/drivers/pci/search.c @@ -139,12 +139,14 @@ struct pci_dev * pci_get_slot(struct pci_bus *bus, unsigned int devfn)  }  /** - * pci_get_bus_and_slot - locate PCI device from a given PCI slot + * pci_get_bus_and_slot - locate PCI device from a given PCI bus & slot   * @bus: number of PCI bus on which desired PCI device resides   * @devfn: encodes number of PCI slot in which the desired PCI   * device resides and the logical device number within that slot   * in case of multi-function devices.   * + * Note: the bus/slot search is limited to PCI domain (segment) 0. + *   * Given a PCI bus and slot/function number, the desired PCI device   * is located in system global list of PCI devices.  If the device   * is found, a pointer to its data structure is returned.  If no @@ -157,7 +159,8 @@ struct pci_dev * pci_get_bus_and_slot(unsigned int bus, unsigned int devfn)  	struct pci_dev *dev = NULL;  	while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { -		if (dev->bus->number == bus && dev->devfn == devfn) +		if (pci_domain_nr(dev->bus) == 0 && +		   (dev->bus->number == bus && dev->devfn == devfn))  			return dev;  	}  	return NULL; diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 5ec297d7a5b4..5e5191ec8de6 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -34,8 +34,6 @@  #define DBG(x...)  #endif -#define ROUND_UP(x, a)		(((x) + (a) - 1) & ~((a) - 1)) -  static void pbus_assign_resources_sorted(struct pci_bus *bus)  {  	struct pci_dev *dev; @@ -310,7 +308,7 @@ static void pbus_size_io(struct pci_bus *bus)  #if defined(CONFIG_ISA) || defined(CONFIG_EISA)  	size = (size & 0xff) + ((size & ~0xffUL) << 2);  #endif -	size = ROUND_UP(size + size1, 4096); +	size = ALIGN(size + size1, 4096);  	if (!size) {  		b_res->flags = 0;  		return; @@ -378,11 +376,11 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask, unsigned long  		if (!align)  			min_align = align1; -		else if (ROUND_UP(align + min_align, min_align) < align1) +		else if (ALIGN(align + min_align, min_align) < align1)  			min_align = align1 >> 1;  		align += aligns[order];  	} -	size = ROUND_UP(size, min_align); +	size = ALIGN(size, min_align);  	if (!size) {  		b_res->flags = 0;  		return 1; diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c index 9d37fec27f24..2ac050d7f8cf 100644 --- a/drivers/pci/syscall.c +++ b/drivers/pci/syscall.c @@ -23,14 +23,14 @@ sys_pciconfig_read(unsigned long bus, unsigned long dfn,  	u8 byte;  	u16 word;  	u32 dword; -	long err, cfg_ret; +	long err; +	long cfg_ret; -	err = -EPERM;  	if (!capable(CAP_SYS_ADMIN)) -		goto error; +		return -EPERM;  	err = -ENODEV; -	dev = pci_find_slot(bus, dfn); +	dev = pci_get_bus_and_slot(bus, dfn);  	if (!dev)  		goto error; @@ -66,7 +66,8 @@ sys_pciconfig_read(unsigned long bus, unsigned long dfn,  	case 4:  		err = put_user(dword, (unsigned int __user *)buf);  		break; -	}; +	} +	pci_dev_put(dev);  	return err;  error: @@ -83,7 +84,8 @@ error:  	case 4:  		put_user(-1, (unsigned int __user *)buf);  		break; -	}; +	} +	pci_dev_put(dev);  	return err;  } @@ -101,7 +103,7 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,  	if (!capable(CAP_SYS_ADMIN))  		return -EPERM; -	dev = pci_find_slot(bus, dfn); +	dev = pci_get_bus_and_slot(bus, dfn);  	if (!dev)  		return -ENODEV; @@ -137,8 +139,8 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,  	default:  		err = -EINVAL;  		break; -	}; +	}  	unlock_kernel(); - +	pci_dev_put(dev);  	return err;  } diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c index 27852b43b904..1c0d7578e791 100644 --- a/drivers/scsi/aic94xx/aic94xx_init.c +++ b/drivers/scsi/aic94xx/aic94xx_init.c @@ -223,13 +223,8 @@ static int __devinit asd_common_setup(struct asd_ha_struct *asd_ha)  {  	int err, i; -	err = pci_read_config_byte(asd_ha->pcidev, PCI_REVISION_ID, -				   &asd_ha->revision_id); -	if (err) { -		asd_printk("couldn't read REVISION ID register of %s\n", -			   pci_name(asd_ha->pcidev)); -		goto Err; -	} +	asd_ha->revision_id = asd_ha->pcidev->revision; +  	err = -ENODEV;  	if (asd_ha->revision_id < AIC9410_DEV_REV_B0) {  		asd_printk("%s is revision %s (%X), which is not supported\n", diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index 4a3083ea59d5..b3bf77f1ec05 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c @@ -5373,18 +5373,12 @@ static const u16 ipr_blocked_processors[] = {   **/  static int ipr_invalid_adapter(struct ipr_ioa_cfg *ioa_cfg)  { -	u8 rev_id;  	int i; -	if (ioa_cfg->type == 0x5702) { -		if (pci_read_config_byte(ioa_cfg->pdev, PCI_REVISION_ID, -					 &rev_id) == PCIBIOS_SUCCESSFUL) { -			if (rev_id < 4) { -				for (i = 0; i < ARRAY_SIZE(ipr_blocked_processors); i++){ -					if (__is_processor(ipr_blocked_processors[i])) -						return 1; -				} -			} +	if ((ioa_cfg->type == 0x5702) && (ioa_cfg->pdev->revision < 4)) { +		for (i = 0; i < ARRAY_SIZE(ipr_blocked_processors); i++){ +			if (__is_processor(ipr_blocked_processors[i])) +				return 1;  		}  	}  	return 0; @@ -7541,13 +7535,7 @@ static int __devinit ipr_probe_ioa(struct pci_dev *pdev,  	else  		ioa_cfg->transop_timeout = IPR_OPERATIONAL_TIMEOUT; -	rc = pci_read_config_byte(pdev, PCI_REVISION_ID, &ioa_cfg->revid); - -	if (rc != PCIBIOS_SUCCESSFUL) { -		dev_err(&pdev->dev, "Failed to read PCI revision ID\n"); -		rc = -EIO; -		goto out_scsi_host_put; -	} +	ioa_cfg->revid = pdev->revision;  	ipr_regs_pci = pci_resource_start(pdev, 0); diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c index 8b704f73055a..40f148e0833f 100644 --- a/drivers/scsi/ips.c +++ b/drivers/scsi/ips.c @@ -7148,7 +7148,6 @@ ips_init_phase1(struct pci_dev *pci_dev, int *indexPtr)  	uint32_t mem_addr;  	uint32_t io_len;  	uint32_t mem_len; -	uint8_t revision_id;  	uint8_t bus;  	uint8_t func;  	uint8_t irq; @@ -7227,12 +7226,6 @@ ips_init_phase1(struct pci_dev *pci_dev, int *indexPtr)  		}  	} -	/* get the revision ID */ -	if (pci_read_config_byte(pci_dev, PCI_REVISION_ID, &revision_id)) { -		IPS_PRINTK(KERN_WARNING, pci_dev, "Can't get revision id.\n"); -		return -1; -	} -  	subdevice_id = pci_dev->subsystem_device;  	/* found a controller */ @@ -7258,7 +7251,7 @@ ips_init_phase1(struct pci_dev *pci_dev, int *indexPtr)  	ha->mem_ptr = mem_ptr;  	ha->ioremap_ptr = ioremap_ptr;  	ha->host_num = (uint32_t) index; -	ha->revision_id = revision_id; +	ha->revision_id = pci_dev->revision;  	ha->slot_num = PCI_SLOT(pci_dev->devfn);  	ha->device_id = pci_dev->device;  	ha->subdevice_id = subdevice_id; diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index dcb4ba0ecee1..955b2e48d041 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c @@ -1578,10 +1578,7 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid)  	INIT_LIST_HEAD(&phba->fc_nodes);  	pci_set_master(pdev); -	retval = pci_set_mwi(pdev); -	if (retval) -		dev_printk(KERN_WARNING, &pdev->dev, -			   "Warning: pci_set_mwi returned %d\n", retval); +	pci_try_set_mwi(pdev);  	if (pci_set_dma_mask(phba->pcidev, DMA_64BIT_MASK) != 0)  		if (pci_set_dma_mask(phba->pcidev, DMA_32BIT_MASK) != 0) diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c index f6f561d26bf0..3e9765f0281d 100644 --- a/drivers/scsi/nsp32.c +++ b/drivers/scsi/nsp32.c @@ -3487,15 +3487,6 @@ static int nsp32_resume(struct pci_dev *pdev)  	return 0;  } -/* Enable wake event */ -static int nsp32_enable_wake(struct pci_dev *pdev, pci_power_t state, int enable) -{ -	struct Scsi_Host *host = pci_get_drvdata(pdev); - -	nsp32_msg(KERN_INFO, "pci-enable_wake: stub, pdev=0x%p, enable=%d, slot=%s, host=0x%p", pdev, enable, pci_name(pdev), host); - -	return 0; -}  #endif  /************************************************************************ @@ -3571,7 +3562,6 @@ static struct pci_driver nsp32_driver = {  #ifdef CONFIG_PM  	.suspend	= nsp32_suspend,   	.resume		= nsp32_resume,  -	.enable_wake    = nsp32_enable_wake,  #endif  }; diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 2a45aec4ff29..cf94f8636ba5 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -296,7 +296,7 @@ qla24xx_pci_config(scsi_qla_host_t *ha)  	d &= ~PCI_ROM_ADDRESS_ENABLE;  	pci_write_config_dword(ha->pdev, PCI_ROM_ADDRESS, d); -	pci_read_config_word(ha->pdev, PCI_REVISION_ID, &ha->chip_revision); +	ha->chip_revision = ha->pdev->revision;  	/* Get PCI bus information. */  	spin_lock_irqsave(&ha->hardware_lock, flags); diff --git a/drivers/serial/jsm/jsm_driver.c b/drivers/serial/jsm/jsm_driver.c index 81792e6eeb2d..6767ee381cd1 100644 --- a/drivers/serial/jsm/jsm_driver.c +++ b/drivers/serial/jsm/jsm_driver.c @@ -88,7 +88,7 @@ static int jsm_probe_one(struct pci_dev *pdev, const struct pci_device_id *ent)  	spin_lock_init(&brd->bd_intr_lock);  	/* store which revision we have */ -	pci_read_config_byte(pdev, PCI_REVISION_ID, &brd->rev); +	brd->rev = pdev->revision;  	brd->irq = pdev->irq; diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c index d975ecf18e00..00fda334dc72 100644 --- a/drivers/usb/gadget/net2280.c +++ b/drivers/usb/gadget/net2280.c @@ -2964,7 +2964,7 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)  			, &dev->pci->pcimstctl);  	/* erratum 0115 shouldn't appear: Linux inits PCI_LATENCY_TIMER */  	pci_set_master (pdev); -	pci_set_mwi (pdev); +	pci_try_set_mwi (pdev);  	/* ... also flushes any posted pci writes */  	dev->chiprev = get_idx_reg (dev->regs, REG_CHIPREV) & 0xffff; diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 12edc723ec73..966965f72338 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c @@ -149,8 +149,7 @@ static int ehci_pci_setup(struct usb_hcd *hcd)  		 * fixed in newer silicon.  		 */  		case 0x0068: -			pci_read_config_dword(pdev, PCI_REVISION_ID, &temp); -			if ((temp & 0xff) < 0xa4) +			if (pdev->revision < 0xa4)  				ehci->no_selective_suspend = 1;  			break;  		} diff --git a/drivers/video/kyro/STG4000InitDevice.c b/drivers/video/kyro/STG4000InitDevice.c index ab5285a7f1d6..1d3f2080aa6f 100644 --- a/drivers/video/kyro/STG4000InitDevice.c +++ b/drivers/video/kyro/STG4000InitDevice.c @@ -247,7 +247,6 @@ int SetCoreClockPLL(volatile STG4000REG __iomem *pSTGReg, struct pci_dev *pDev)  	u32 ulCoreClock;  	u32 tmp;  	u32 ulChipSpeed; -	u8 rev;  	STG_WRITE_REG(IntMask, 0xFFFF); @@ -276,9 +275,9 @@ int SetCoreClockPLL(volatile STG4000REG __iomem *pSTGReg, struct pci_dev *pDev)  		      PMX2_SOFTRESET_ROM_RST);  	pci_read_config_word(pDev, PCI_CONFIG_SUBSYS_ID, &sub); -	pci_read_config_byte(pDev, PCI_REVISION_ID, &rev); -	ulChipSpeed = InitSDRAMRegisters(pSTGReg, (u32)sub, (u32)rev); +	ulChipSpeed = InitSDRAMRegisters(pSTGReg, (u32)sub, +		                         (u32)pDev->revision);  	if (ulChipSpeed == 0)  		return -EINVAL; diff --git a/drivers/video/matrox/matroxfb_base.c b/drivers/video/matrox/matroxfb_base.c index c8559a756b75..886e475f22f2 100644 --- a/drivers/video/matrox/matroxfb_base.c +++ b/drivers/video/matrox/matroxfb_base.c @@ -1994,7 +1994,6 @@ static void matroxfb_unregister_device(struct matrox_fb_info* minfo) {  static int matroxfb_probe(struct pci_dev* pdev, const struct pci_device_id* dummy) {  	struct board* b; -	u_int8_t rev;  	u_int16_t svid;  	u_int16_t sid;  	struct matrox_fb_info* minfo; @@ -2005,11 +2004,10 @@ static int matroxfb_probe(struct pci_dev* pdev, const struct pci_device_id* dumm  #endif  	DBG(__FUNCTION__) -	pci_read_config_byte(pdev, PCI_REVISION_ID, &rev);  	svid = pdev->subsystem_vendor;  	sid = pdev->subsystem_device;  	for (b = dev_list; b->vendor; b++) { -		if ((b->vendor != pdev->vendor) || (b->device != pdev->device) || (b->rev < rev)) continue; +		if ((b->vendor != pdev->vendor) || (b->device != pdev->device) || (b->rev < pdev->revision)) continue;  		if (b->svid)  			if ((b->svid != svid) || (b->sid != sid)) continue;  		break; diff --git a/drivers/video/sis/sis_main.c b/drivers/video/sis/sis_main.c index a30e1e13d8be..93d07ef85276 100644 --- a/drivers/video/sis/sis_main.c +++ b/drivers/video/sis/sis_main.c @@ -5789,7 +5789,7 @@ sisfb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	ivideo->warncount = 0;  	ivideo->chip_id = pdev->device;  	ivideo->chip_vendor = pdev->vendor; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &ivideo->revision_id); +	ivideo->revision_id = pdev->revision;  	ivideo->SiS_Pr.ChipRevision = ivideo->revision_id;  	pci_read_config_word(pdev, PCI_COMMAND, ®16);  	ivideo->sisvga_enabled = reg16 & 0x01; diff --git a/drivers/video/sstfb.c b/drivers/video/sstfb.c index 62fa5500361d..5eff28ce4f4d 100644 --- a/drivers/video/sstfb.c +++ b/drivers/video/sstfb.c @@ -1348,7 +1348,7 @@ static int __devinit sstfb_probe(struct pci_dev *pdev,  	f_ddprintk("found device : %s\n", spec->name);  	par->dev = pdev; -	pci_read_config_byte(pdev, PCI_REVISION_ID, &par->revision); +	par->revision = pdev->revision;  	fix->mmio_start = pci_resource_start(pdev,0);  	fix->mmio_len	= 0x400000; diff --git a/drivers/video/tgafb.c b/drivers/video/tgafb.c index f0fde6ea7c36..5c0dab628099 100644 --- a/drivers/video/tgafb.c +++ b/drivers/video/tgafb.c @@ -1625,8 +1625,7 @@ tgafb_register(struct device *dev)  	par->tga_regs_base = mem_base + TGA_REGS_OFFSET;  	par->tga_type = tga_type;  	if (tga_bus_pci) -		pci_read_config_byte(to_pci_dev(dev), PCI_REVISION_ID, -				     &par->tga_chip_rev); +		par->tga_chip_rev = (to_pci_dev(dev))->revision;  	if (tga_bus_tc)  		par->tga_chip_rev = TGA_READ_REG(par, TGA_START_REG) & 0xff; diff --git a/include/asm-alpha/pci.h b/include/asm-alpha/pci.h index 85aa1127c903..30ee7669b19f 100644 --- a/include/asm-alpha/pci.h +++ b/include/asm-alpha/pci.h @@ -199,30 +199,6 @@ pci_dma_sync_sg_for_device(struct pci_dev *dev, struct scatterlist *sg,  extern int pci_dma_supported(struct pci_dev *hwdev, u64 mask); -/* True if the machine supports DAC addressing, and DEV can -   make use of it given MASK.  */ -extern int pci_dac_dma_supported(struct pci_dev *hwdev, u64 mask); - -/* Convert to/from DAC dma address and struct page.  */ -extern dma64_addr_t pci_dac_page_to_dma(struct pci_dev *, struct page *, -					unsigned long, int); -extern struct page *pci_dac_dma_to_page(struct pci_dev *, dma64_addr_t); -extern unsigned long pci_dac_dma_to_offset(struct pci_dev *, dma64_addr_t); - -static inline void -pci_dac_dma_sync_single_for_cpu(struct pci_dev *pdev, dma64_addr_t dma_addr, -				size_t len, int direction) -{ -	/* Nothing to do. */ -} - -static inline void -pci_dac_dma_sync_single_for_device(struct pci_dev *pdev, dma64_addr_t dma_addr, -				   size_t len, int direction) -{ -	/* Nothing to do. */ -} -  #ifdef CONFIG_PCI  static inline void pci_dma_burst_advice(struct pci_dev *pdev,  					enum pci_dma_burst_strategy *strat, @@ -275,11 +251,6 @@ static inline int pci_proc_domain(struct pci_bus *bus)  	return hose->need_domain_info;  } -static inline void -pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  struct pci_dev *alpha_gendev_to_pci(struct device *dev);  #endif /* __KERNEL__ */ diff --git a/include/asm-arm/pci.h b/include/asm-arm/pci.h index f21abd4ddac6..ed3f898191f4 100644 --- a/include/asm-arm/pci.h +++ b/include/asm-arm/pci.h @@ -26,11 +26,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active)  #define PCI_DMA_BUS_IS_PHYS     (0)  /* - * We don't support DAC DMA cycles. - */ -#define pci_dac_dma_supported(pci_dev, mask)	(0) - -/*   * Whether pci_unmap_{single,page} is a nop depends upon the   * configuration.   */ @@ -76,10 +71,6 @@ pcibios_select_root(struct pci_dev *pdev, struct resource *res)  	return root;  } -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #endif /* __KERNEL__ */  #endif diff --git a/include/asm-cris/pci.h b/include/asm-cris/pci.h index b2ac8a331da1..730ce40fdd0f 100644 --- a/include/asm-cris/pci.h +++ b/include/asm-cris/pci.h @@ -52,47 +52,11 @@ struct pci_dev;  #define pci_unmap_len(PTR, LEN_NAME)		(0)  #define pci_unmap_len_set(PTR, LEN_NAME, VAL)	do { } while (0) -/* This is always fine. */ -#define pci_dac_dma_supported(pci_dev, mask)	(1) - -static inline dma64_addr_t -pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page, unsigned long offset, int direction) -{ -	return ((dma64_addr_t) page_to_phys(page) + -		(dma64_addr_t) offset); -} - -static inline struct page * -pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr) -{ -	return pfn_to_page(dma_addr >> PAGE_SHIFT); -} - -static inline unsigned long -pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr) -{ -	return (dma_addr & ~PAGE_MASK); -} - -static inline void -pci_dac_dma_sync_single_for_cpu(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, int direction) -{ -} - -static inline void -pci_dac_dma_sync_single_for_device(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, int direction) -{ -} -  #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); -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #endif /* __KERNEL__ */  /* implement the pci_ DMA API in terms of the generic device dma_ one */ diff --git a/include/asm-frv/pci.h b/include/asm-frv/pci.h index f35a4511e7b9..585d9b49949a 100644 --- a/include/asm-frv/pci.h +++ b/include/asm-frv/pci.h @@ -22,10 +22,6 @@ struct pci_dev;  #define pcibios_assign_all_busses()	0 -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  extern void pcibios_set_master(struct pci_dev *dev);  extern void pcibios_penalize_isa_irq(int irq); @@ -44,9 +40,6 @@ extern void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size,  extern void pci_free_consistent(struct pci_dev *hwdev, size_t size,  				void *vaddr, dma_addr_t dma_handle); -/* This is always fine. */ -#define pci_dac_dma_supported(pci_dev, mask)	(1) -  /* Return the index of the PCI controller for device PDEV. */  #define pci_controller_num(PDEV)	(0) diff --git a/include/asm-h8300/pci.h b/include/asm-h8300/pci.h index 0c771b05fdd5..97389b35aa35 100644 --- a/include/asm-h8300/pci.h +++ b/include/asm-h8300/pci.h @@ -22,8 +22,4 @@ static inline void pcibios_penalize_isa_irq(int irq, int active)  #define PCI_DMA_BUS_IS_PHYS	(1) -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #endif /* _ASM_H8300_PCI_H */ diff --git a/include/asm-i386/pci.h b/include/asm-i386/pci.h index 64b6d0baedbc..392d3fe5d45e 100644 --- a/include/asm-i386/pci.h +++ b/include/asm-i386/pci.h @@ -56,48 +56,11 @@ struct pci_dev;  #define pci_unmap_len(PTR, LEN_NAME)		(0)  #define pci_unmap_len_set(PTR, LEN_NAME, VAL)	do { } while (0) -/* This is always fine. */ -#define pci_dac_dma_supported(pci_dev, mask)	(1) - -static inline dma64_addr_t -pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page, unsigned long offset, int direction) -{ -	return ((dma64_addr_t) page_to_phys(page) + -		(dma64_addr_t) offset); -} - -static inline struct page * -pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr) -{ -	return pfn_to_page(dma_addr >> PAGE_SHIFT); -} - -static inline unsigned long -pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr) -{ -	return (dma_addr & ~PAGE_MASK); -} - -static inline void -pci_dac_dma_sync_single_for_cpu(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, int direction) -{ -} - -static inline void -pci_dac_dma_sync_single_for_device(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, int direction) -{ -	flush_write_buffers(); -} -  #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); -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #ifdef CONFIG_PCI  static inline void pci_dma_burst_advice(struct pci_dev *pdev,  					enum pci_dma_burst_strategy *strat, diff --git a/include/asm-ia64/pci.h b/include/asm-ia64/pci.h index 5a5d1c2ce39d..3523d2584598 100644 --- a/include/asm-ia64/pci.h +++ b/include/asm-ia64/pci.h @@ -71,14 +71,6 @@ pcibios_penalize_isa_irq (int irq, int active)  #define pci_unmap_len_set(PTR, LEN_NAME, VAL)		\  	(((PTR)->LEN_NAME) = (VAL)) -/* The ia64 platform always supports 64-bit addressing. */ -#define pci_dac_dma_supported(pci_dev, mask)		(1) -#define pci_dac_page_to_dma(dev,pg,off,dir)		((dma_addr_t) page_to_bus(pg) + (off)) -#define pci_dac_dma_to_page(dev,dma_addr)		(virt_to_page(bus_to_virt(dma_addr))) -#define pci_dac_dma_to_offset(dev,dma_addr)		offset_in_page(dma_addr) -#define pci_dac_dma_sync_single_for_cpu(dev,dma_addr,len,dir)	do { } while (0) -#define pci_dac_dma_sync_single_for_device(dev,dma_addr,len,dir)	do { mb(); } while (0) -  #ifdef CONFIG_PCI  static inline void pci_dma_burst_advice(struct pci_dev *pdev,  					enum pci_dma_burst_strategy *strat, @@ -143,10 +135,6 @@ static inline int pci_proc_domain(struct pci_bus *bus)  	return (pci_domain_nr(bus) != 0);  } -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  extern void pcibios_resource_to_bus(struct pci_dev *dev,  		struct pci_bus_region *region, struct resource *res); diff --git a/include/asm-m68k/pci.h b/include/asm-m68k/pci.h index 9d2c07abe44f..678cb0b52314 100644 --- a/include/asm-m68k/pci.h +++ b/include/asm-m68k/pci.h @@ -54,8 +54,4 @@ static inline void pcibios_penalize_isa_irq(int irq, int active)   */  #define PCI_DMA_BUS_IS_PHYS	(1) -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #endif /* _ASM_M68K_PCI_H */ diff --git a/include/asm-m68knommu/pci.h b/include/asm-m68knommu/pci.h index e04c77e1184d..a13f3cc87451 100644 --- a/include/asm-m68knommu/pci.h +++ b/include/asm-m68knommu/pci.h @@ -24,16 +24,6 @@ static inline int pci_dma_supported(struct pci_dev *hwdev, u64 mask)  	return 1;  } -/* - * Not supporting more than 32-bit PCI bus addresses now, but - * must satisfy references to this function.  Change if needed. - */ -#define pci_dac_dma_supported(pci_dev, mask) (0) - -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #endif /* CONFIG_COMEMPCI */  #endif /* M68KNOMMU_PCI_H */ diff --git a/include/asm-mips/pci.h b/include/asm-mips/pci.h index a59d54749eef..4fcc185cb2d1 100644 --- a/include/asm-mips/pci.h +++ b/include/asm-mips/pci.h @@ -121,20 +121,6 @@ extern unsigned int PCI_DMA_BUS_IS_PHYS;  #endif /* CONFIG_DMA_NEED_PCI_MAP_STATE  */ -/* This is always fine. */ -#define pci_dac_dma_supported(pci_dev, mask)	(1) - -extern dma64_addr_t pci_dac_page_to_dma(struct pci_dev *pdev, -	struct page *page, unsigned long offset, int direction); -extern struct page *pci_dac_dma_to_page(struct pci_dev *pdev, -	dma64_addr_t dma_addr); -extern unsigned long pci_dac_dma_to_offset(struct pci_dev *pdev, -	dma64_addr_t dma_addr); -extern void pci_dac_dma_sync_single_for_cpu(struct pci_dev *pdev, -	dma64_addr_t dma_addr, size_t len, int direction); -extern void pci_dac_dma_sync_single_for_device(struct pci_dev *pdev, -	dma64_addr_t dma_addr, size_t len, int direction); -  #ifdef CONFIG_PCI  static inline void pci_dma_burst_advice(struct pci_dev *pdev,  					enum pci_dma_burst_strategy *strat, @@ -181,10 +167,6 @@ static inline int pci_proc_domain(struct pci_bus *bus)  /* implement the pci_ DMA API in terms of the generic device dma_ one */  #include <asm-generic/pci-dma-compat.h> -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  /* Do platform specific device initialization at pci_enable_device() time */  extern int pcibios_plat_dev_init(struct pci_dev *dev); diff --git a/include/asm-parisc/pci.h b/include/asm-parisc/pci.h index 7b3be9ac0dda..61fbd57a8323 100644 --- a/include/asm-parisc/pci.h +++ b/include/asm-parisc/pci.h @@ -238,9 +238,6 @@ extern inline void pcibios_register_hba(struct pci_hba_data *x)  #define PCIBIOS_MIN_IO          0x10  #define PCIBIOS_MIN_MEM         0x1000 /* NBPG - but pci/setup-res.c dies */ -/* Don't support DAC yet. */ -#define pci_dac_dma_supported(pci_dev, mask)   (0) -  /* export the pci_ DMA API in terms of the dma_ one */  #include <asm-generic/pci-dma-compat.h> @@ -284,10 +281,6 @@ pcibios_select_root(struct pci_dev *pdev, struct resource *res)  	return root;  } -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  static inline void pcibios_penalize_isa_irq(int irq, int active)  {  	/* We don't need to penalize isa irq's */ diff --git a/include/asm-powerpc/dma-mapping.h b/include/asm-powerpc/dma-mapping.h index a19a6f1a1cf1..f6bd804d9090 100644 --- a/include/asm-powerpc/dma-mapping.h +++ b/include/asm-powerpc/dma-mapping.h @@ -61,7 +61,6 @@ struct dma_mapping_ops {  	void		(*unmap_sg)(struct device *dev, struct scatterlist *sg,  				int nents, enum dma_data_direction direction);  	int		(*dma_supported)(struct device *dev, u64 mask); -	int		(*dac_dma_supported)(struct device *dev, u64 mask);  	int		(*set_dma_mask)(struct device *dev, u64 dma_mask);  }; diff --git a/include/asm-powerpc/pci.h b/include/asm-powerpc/pci.h index ce0f13e8eb14..e16e7bc9ab5c 100644 --- a/include/asm-powerpc/pci.h +++ b/include/asm-powerpc/pci.h @@ -74,18 +74,6 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)  extern void set_pci_dma_ops(struct dma_mapping_ops *dma_ops);  extern struct dma_mapping_ops *get_pci_dma_ops(void); -/* For DAC DMA, we currently don't support it by default, but - * we let 64-bit platforms override this. - */ -static inline int pci_dac_dma_supported(struct pci_dev *hwdev,u64 mask) -{ -	struct dma_mapping_ops *d = get_pci_dma_ops(); - -	if (d && d->dac_dma_supported) -		return d->dac_dma_supported(&hwdev->dev, mask); -	return 0; -} -  static inline void pci_dma_burst_advice(struct pci_dev *pdev,  					enum pci_dma_burst_strategy *strat,  					unsigned long *strategy_parameter) @@ -124,12 +112,6 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,  }  #endif -/* - * At present there are very few 32-bit PPC machines that can have - * memory above the 4GB point, and we don't support that. - */ -#define pci_dac_dma_supported(pci_dev, mask)	(0) -  /* Return the index of the PCI controller for device PDEV. */  #define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index @@ -243,8 +225,6 @@ extern void of_scan_bus(struct device_node *node, struct pci_bus *bus);  extern int pci_read_irq_line(struct pci_dev *dev); -extern void pcibios_add_platform_entries(struct pci_dev *dev); -  struct file;  extern pgprot_t	pci_phys_mem_access_prot(struct file *file,  					 unsigned long pfn, diff --git a/include/asm-ppc/pci.h b/include/asm-ppc/pci.h index 9d162028dab9..d2442cd72a59 100644 --- a/include/asm-ppc/pci.h +++ b/include/asm-ppc/pci.h @@ -102,12 +102,6 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,  }  #endif -/* - * At present there are very few 32-bit PPC machines that can have - * memory above the 4GB point, and we don't support that. - */ -#define pci_dac_dma_supported(pci_dev, mask)	(0) -  /* Return the index of the PCI controller for device PDEV. */  #define pci_domain_nr(bus) ((struct pci_controller *)(bus)->sysdata)->index @@ -145,8 +139,6 @@ pcibios_select_root(struct pci_dev *pdev, struct resource *res)  	return root;  } -extern void pcibios_add_platform_entries(struct pci_dev *dev); -  struct file;  extern pgprot_t	pci_phys_mem_access_prot(struct file *file,  					 unsigned long pfn, diff --git a/include/asm-sh/pci.h b/include/asm-sh/pci.h index b1f9a9e0231e..2757ce096ff7 100644 --- a/include/asm-sh/pci.h +++ b/include/asm-sh/pci.h @@ -110,11 +110,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active)  #define pci_unmap_len_set(PTR, LEN_NAME, VAL)	do { } while (0)  #endif -/* Not supporting more than 32-bit PCI bus addresses now, but - * must satisfy references to this function.  Change if needed. - */ -#define pci_dac_dma_supported(pci_dev, mask) (0) -  #ifdef CONFIG_PCI  static inline void pci_dma_burst_advice(struct pci_dev *pdev,  					enum pci_dma_burst_strategy *strat, @@ -134,10 +129,6 @@ int pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin);  int pciauto_assign_resources(int busno, struct pci_channel *hose);  #endif -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #endif /* __KERNEL__ */  /* generic pci stuff */ diff --git a/include/asm-sh64/pci.h b/include/asm-sh64/pci.h index aa8043089bb6..57a67cf7a5c4 100644 --- a/include/asm-sh64/pci.h +++ b/include/asm-sh64/pci.h @@ -72,11 +72,6 @@ static inline void pcibios_penalize_isa_irq(int irq, int active)  #define pci_unmap_len_set(PTR, LEN_NAME, VAL)	do { } while (0)  #endif -/* Not supporting more than 32-bit PCI bus addresses now, but - * must satisfy references to this function.  Change if needed. - */ -#define pci_dac_dma_supported(pci_dev, mask) (0) -  /* These macros should be used after a pci_map_sg call has been done   * to get bus addresses of each of the SG entries and their lengths.   * You should only work with the number of sg entries pci_map_sg @@ -104,10 +99,6 @@ extern void pcibios_fixup_irqs(void);  extern int pciauto_assign_resources(int busno, struct pci_channel *hose);  #endif -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #endif /* __KERNEL__ */  /* generic pci stuff */ diff --git a/include/asm-sparc/pci.h b/include/asm-sparc/pci.h index a750c688408b..b93b6c79e08f 100644 --- a/include/asm-sparc/pci.h +++ b/include/asm-sparc/pci.h @@ -142,8 +142,6 @@ static inline int pci_dma_supported(struct pci_dev *hwdev, u64 mask)  	return 1;  } -#define pci_dac_dma_supported(dev, mask)	(0) -  #ifdef CONFIG_PCI  static inline void pci_dma_burst_advice(struct pci_dev *pdev,  					enum pci_dma_burst_strategy *strat, @@ -154,10 +152,6 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,  }  #endif -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #define PCI_DMA_ERROR_CODE      (~(dma_addr_t)0x0)  static inline int pci_dma_mapping_error(dma_addr_t dma_addr) diff --git a/include/asm-sparc64/pci.h b/include/asm-sparc64/pci.h index 47cea16e1bad..e11ac100f043 100644 --- a/include/asm-sparc64/pci.h +++ b/include/asm-sparc64/pci.h @@ -206,49 +206,6 @@ extern int pci_dma_supported(struct pci_dev *hwdev, u64 mask);  #define PCI64_REQUIRED_MASK	(~(dma64_addr_t)0)  #define PCI64_ADDR_BASE		0xfffc000000000000UL -/* Usage of the pci_dac_foo interfaces is only valid if this - * test passes. - */ -#define pci_dac_dma_supported(pci_dev, mask) \ -	((((mask) & PCI64_REQUIRED_MASK) == PCI64_REQUIRED_MASK) ? 1 : 0) - -static inline dma64_addr_t -pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page, unsigned long offset, int direction) -{ -	return (PCI64_ADDR_BASE + -		__pa(page_address(page)) + offset); -} - -static inline struct page * -pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr) -{ -	unsigned long paddr = (dma_addr & PAGE_MASK) - PCI64_ADDR_BASE; - -	return virt_to_page(__va(paddr)); -} - -static inline unsigned long -pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr) -{ -	return (dma_addr & ~PAGE_MASK); -} - -static inline void -pci_dac_dma_sync_single_for_cpu(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, int direction) -{ -	/* DAC cycle addressing does not make use of the -	 * PCI controller's streaming cache, so nothing to do. -	 */ -} - -static inline void -pci_dac_dma_sync_single_for_device(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, int direction) -{ -	/* DAC cycle addressing does not make use of the -	 * PCI controller's streaming cache, so nothing to do. -	 */ -} -  #define PCI_DMA_ERROR_CODE	(~(dma_addr_t)0x0)  static inline int pci_dma_mapping_error(dma_addr_t dma_addr) @@ -303,10 +260,6 @@ pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,  extern struct resource *pcibios_select_root(struct pci_dev *, struct resource *); -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)  {  	return PCI_IRQ_NONE; diff --git a/include/asm-v850/pci.h b/include/asm-v850/pci.h index 4581826e1cac..de2a7d0a81cc 100644 --- a/include/asm-v850/pci.h +++ b/include/asm-v850/pci.h @@ -116,8 +116,4 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,  extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);  extern void pci_iounmap (struct pci_dev *dev, void __iomem *addr); -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #endif /* __V850_PCI_H__ */ diff --git a/include/asm-v850/rte_cb.h b/include/asm-v850/rte_cb.h index 9f7f02cb0391..e85d261b79bf 100644 --- a/include/asm-v850/rte_cb.h +++ b/include/asm-v850/rte_cb.h @@ -64,7 +64,6 @@  /* As we don't really support PCI DMA to cpu memory, and use bounce-buffers     instead, perversely enough, this becomes always true! */  # define pci_dma_supported(dev, mask)		1 -# define pci_dac_dma_supported(dev, mask)	0  # define pcibios_assign_all_busses()		1  #endif /* CONFIG_RTE_MB_A_PCI */ diff --git a/include/asm-x86_64/pci.h b/include/asm-x86_64/pci.h index 49c5e9280598..bda94fd5176f 100644 --- a/include/asm-x86_64/pci.h +++ b/include/asm-x86_64/pci.h @@ -54,14 +54,6 @@ extern int iommu_setup(char *opt);  #if defined(CONFIG_IOMMU) || defined(CONFIG_CALGARY_IOMMU) -/* - * x86-64 always supports DAC, but sometimes it is useful to force - * devices through the IOMMU to get automatic sg list merging. - * Optional right now. - */ -extern int iommu_sac_force; -#define pci_dac_dma_supported(pci_dev, mask)	(!iommu_sac_force) -  #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)	\  	dma_addr_t ADDR_NAME;  #define DECLARE_PCI_UNMAP_LEN(LEN_NAME)		\ @@ -78,8 +70,6 @@ extern int iommu_sac_force;  #else  /* No IOMMU */ -#define pci_dac_dma_supported(pci_dev, mask)    1 -  #define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME)  #define DECLARE_PCI_UNMAP_LEN(LEN_NAME)  #define pci_unmap_addr(PTR, ADDR_NAME)		(0) @@ -91,36 +81,6 @@ extern int iommu_sac_force;  #include <asm-generic/pci-dma-compat.h> -static inline dma64_addr_t -pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page, unsigned long offset, int direction) -{ -	return ((dma64_addr_t) page_to_phys(page) + -		(dma64_addr_t) offset); -} - -static inline struct page * -pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr) -{ -	return virt_to_page(__va(dma_addr)); 	 -} - -static inline unsigned long -pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr) -{ -	return (dma_addr & ~PAGE_MASK); -} - -static inline void -pci_dac_dma_sync_single_for_cpu(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, int direction) -{ -} - -static inline void -pci_dac_dma_sync_single_for_device(struct pci_dev *pdev, dma64_addr_t dma_addr, size_t len, int direction) -{ -	flush_write_buffers(); -} -  #ifdef CONFIG_PCI  static inline void pci_dma_burst_advice(struct pci_dev *pdev,  					enum pci_dma_burst_strategy *strat, @@ -135,10 +95,6 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev,  extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,  			       enum pci_mmap_state mmap_state, int write_combine); -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #endif /* __KERNEL__ */  /* generic pci stuff */ diff --git a/include/asm-xtensa/pci.h b/include/asm-xtensa/pci.h index 24eb7fc25da8..66410acf18b4 100644 --- a/include/asm-xtensa/pci.h +++ b/include/asm-xtensa/pci.h @@ -64,9 +64,6 @@ struct pci_dev;  #define pci_ubnmap_len(PTR, LEN_NAME)		(0)  #define pci_unmap_len_set(PTR, LEN_NAME, VAL)	do { } while (0) -/* We cannot access memory above 4GB */ -#define pci_dac_dma_supported(pci_dev, mask)	(0) -  /* Map a range of PCI memory or I/O space for a device into user space */  int pci_mmap_page_range(struct pci_dev *pdev, struct vm_area_struct *vma,                          enum pci_mmap_state mmap_state, int write_combine); @@ -74,10 +71,6 @@ int pci_mmap_page_range(struct pci_dev *pdev, struct vm_area_struct *vma,  /* Tell drivers/pci/proc.c that we have pci_mmap_page_range() */  #define HAVE_PCI_MMAP	1 -static inline void pcibios_add_platform_entries(struct pci_dev *dev) -{ -} -  #endif /* __KERNEL__ */  /* Implement the pci_ DMA API in terms of the generic device dma_ one */ diff --git a/include/linux/aer.h b/include/linux/aer.h index 402e178b38eb..509656286e53 100644 --- a/include/linux/aer.h +++ b/include/linux/aer.h @@ -13,11 +13,13 @@ extern int pci_enable_pcie_error_reporting(struct pci_dev *dev);  extern int pci_find_aer_capability(struct pci_dev *dev);  extern int pci_disable_pcie_error_reporting(struct pci_dev *dev);  extern int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev); +extern int pci_cleanup_aer_correct_error_status(struct pci_dev *dev);  #else -#define pci_enable_pcie_error_reporting(dev)		do { } while (0) -#define pci_find_aer_capability(dev)			do { } while (0) -#define pci_disable_pcie_error_reporting(dev)		do { } while (0) -#define pci_cleanup_aer_uncorrect_error_status(dev)	do { } while (0) +#define pci_enable_pcie_error_reporting(dev)		(-EINVAL) +#define pci_find_aer_capability(dev)			(0) +#define pci_disable_pcie_error_reporting(dev)		(-EINVAL) +#define pci_cleanup_aer_uncorrect_error_status(dev)	(-EINVAL) +#define pci_cleanup_aer_correct_error_status(dev)	(-EINVAL)  #endif  #endif //_AER_H_ diff --git a/include/linux/pci.h b/include/linux/pci.h index 086a0e5a6318..a5602e26f4dd 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -111,7 +111,8 @@ enum pcie_reset_state {  typedef unsigned short __bitwise pci_bus_flags_t;  enum pci_bus_flags { -	PCI_BUS_FLAGS_NO_MSI = (__force pci_bus_flags_t) 1, +	PCI_BUS_FLAGS_NO_MSI   = (__force pci_bus_flags_t) 1, +	PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2,  };  struct pci_cap_saved_state { @@ -138,6 +139,7 @@ struct pci_dev {  	unsigned short	subsystem_vendor;  	unsigned short	subsystem_device;  	unsigned int	class;		/* 3 bytes: (base,sub,prog-if) */ +	u8		revision;	/* PCI revision, low byte of class word */  	u8		hdr_type;	/* PCI header type (`multi' flag masked out) */  	u8		rom_base_reg;	/* which config register controls the ROM */  	u8		pin;  		/* which interrupt pin this device uses */ @@ -313,7 +315,7 @@ struct pci_dynids {  /* ---------------------------------------------------------------- */  /** PCI Error Recovery System (PCI-ERS).  If a PCI device driver provides - *  a set fof callbacks in struct pci_error_handlers, then that device driver + *  a set of callbacks in struct pci_error_handlers, then that device driver   *  will be notified of PCI bus errors, and will be driven to recovery   *  when an error occurs.   */ @@ -370,7 +372,6 @@ struct pci_driver {  	int  (*suspend_late) (struct pci_dev *dev, pm_message_t state);  	int  (*resume_early) (struct pci_dev *dev);  	int  (*resume) (struct pci_dev *dev);	                /* Device woken up */ -	int  (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable);   /* Enable wake event */  	void (*shutdown) (struct pci_dev *dev);  	struct pci_error_handlers *err_handler; @@ -475,7 +476,7 @@ extern void pci_sort_breadthfirst(void);  /* Generic PCI functions exported to card drivers */  struct pci_dev __deprecated *pci_find_device (unsigned int vendor, unsigned int device, const struct pci_dev *from); -struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn); +struct pci_dev __deprecated *pci_find_slot (unsigned int bus, unsigned int devfn);  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); @@ -544,11 +545,16 @@ void pci_set_master(struct pci_dev *dev);  int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);  #define HAVE_PCI_SET_MWI  int __must_check pci_set_mwi(struct pci_dev *dev); +int pci_try_set_mwi(struct pci_dev *dev);  void pci_clear_mwi(struct pci_dev *dev);  void pci_intx(struct pci_dev *dev, int enable);  void pci_msi_off(struct pci_dev *dev);  int pci_set_dma_mask(struct pci_dev *dev, u64 mask);  int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); +int pcix_get_max_mmrbc(struct pci_dev *dev); +int pcix_get_mmrbc(struct pci_dev *dev); +int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc); +int pcie_set_readrq(struct pci_dev *dev, int rq);  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 __must_check pci_assign_resource_fixed(struct pci_dev *dev, int i); @@ -876,5 +882,7 @@ extern int pci_pci_problems;  extern unsigned long pci_cardbus_io_size;  extern unsigned long pci_cardbus_mem_size; +extern int pcibios_add_platform_entries(struct pci_dev *dev); +  #endif /* __KERNEL__ */  #endif /* LINUX_PCI_H */ diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 8300001e9078..9366182fffa7 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -133,6 +133,9 @@  /* Vendors and devices.  Sort key: vendor first, device next. */ +#define PCI_VENDOR_ID_TTTECH		0x0357 +#define PCI_DEVICE_ID_TTTECH_MC322	0x000a +  #define PCI_VENDOR_ID_DYNALINK		0x0675  #define PCI_DEVICE_ID_DYNALINK_IS64PH	0x1702 @@ -733,7 +736,6 @@  #define PCI_DEVICE_ID_ELSA_MICROLINK	0x1000  #define PCI_DEVICE_ID_ELSA_QS3000	0x3000 -  #define PCI_VENDOR_ID_BUSLOGIC		      0x104B  #define PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER_NC 0x0140  #define PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER    0x1040 @@ -779,7 +781,6 @@  #define PCI_VENDOR_ID_SONY		0x104d -  /* Winbond have two vendor IDs! See 0x10ad as well */  #define PCI_VENDOR_ID_WINBOND2		0x1050  #define PCI_DEVICE_ID_WINBOND2_89C940F	0x5a5a @@ -817,7 +818,6 @@  #define PCI_DEVICE_ID_PROMISE_20276	0x5275  #define PCI_DEVICE_ID_PROMISE_20277	0x7275 -  #define PCI_VENDOR_ID_UMC		0x1060  #define PCI_DEVICE_ID_UMC_UM8673F	0x0101  #define PCI_DEVICE_ID_UMC_UM8886BF	0x673a @@ -833,7 +833,6 @@  #define PCI_DEVICE_ID_MYLEX_DAC960_BA	0xBA56  #define PCI_DEVICE_ID_MYLEX_DAC960_GEM	0xB166 -  #define PCI_VENDOR_ID_APPLE		0x106b  #define PCI_DEVICE_ID_APPLE_BANDIT	0x0001  #define PCI_DEVICE_ID_APPLE_HYDRA	0x000e @@ -869,7 +868,6 @@  #define PCI_DEVICE_ID_YAMAHA_744	0x0010  #define PCI_DEVICE_ID_YAMAHA_754	0x0012 -  #define PCI_VENDOR_ID_QLOGIC		0x1077  #define PCI_DEVICE_ID_QLOGIC_ISP10160	0x1016  #define PCI_DEVICE_ID_QLOGIC_ISP1020	0x1020 @@ -900,12 +898,9 @@  #define PCI_DEVICE_ID_CYRIX_5530_AUDIO	0x0103  #define PCI_DEVICE_ID_CYRIX_5530_VIDEO	0x0104 - -  #define PCI_VENDOR_ID_CONTAQ		0x1080  #define PCI_DEVICE_ID_CONTAQ_82C693	0xc693 -  #define PCI_VENDOR_ID_OLICOM		0x108d  #define PCI_DEVICE_ID_OLICOM_OC2325	0x0012  #define PCI_DEVICE_ID_OLICOM_OC2183	0x0013 @@ -937,23 +932,19 @@  #define PCI_DEVICE_ID_SII_3112		0x3112  #define PCI_DEVICE_ID_SII_1210SA	0x0240 -  #define PCI_VENDOR_ID_BROOKTREE		0x109e  #define PCI_DEVICE_ID_BROOKTREE_878	0x0878  #define PCI_DEVICE_ID_BROOKTREE_879	0x0879 -  #define PCI_VENDOR_ID_SGI		0x10a9  #define PCI_DEVICE_ID_SGI_IOC3		0x0003 +#define PCI_DEVICE_ID_SGI_LITHIUM	0x1002  #define PCI_DEVICE_ID_SGI_IOC4		0x100a -#define PCI_VENDOR_ID_SGI_LITHIUM	0x1002 -  #define PCI_VENDOR_ID_WINBOND		0x10ad  #define PCI_DEVICE_ID_WINBOND_82C105	0x0105  #define PCI_DEVICE_ID_WINBOND_83C553	0x0565 -  #define PCI_VENDOR_ID_PLX		0x10b5  #define PCI_DEVICE_ID_PLX_R685		0x1030  #define PCI_DEVICE_ID_PLX_ROMULUS	0x106a @@ -987,7 +978,6 @@  #define PCI_DEVICE_ID_3COM_3CR990SVR97	0x9909  #define PCI_DEVICE_ID_3COM_3CR990SVR	0x990a -  #define PCI_VENDOR_ID_AL		0x10b9  #define PCI_DEVICE_ID_AL_M1533		0x1533  #define PCI_DEVICE_ID_AL_M1535 		0x1535 @@ -1010,18 +1000,14 @@  #define PCI_DEVICE_ID_AL_M5451		0x5451  #define PCI_DEVICE_ID_AL_M7101		0x7101 - -  #define PCI_VENDOR_ID_NEOMAGIC		0x10c8  #define PCI_DEVICE_ID_NEOMAGIC_NM256AV_AUDIO 0x8005  #define PCI_DEVICE_ID_NEOMAGIC_NM256ZX_AUDIO 0x8006  #define PCI_DEVICE_ID_NEOMAGIC_NM256XL_PLUS_AUDIO 0x8016 -  #define PCI_VENDOR_ID_TCONRAD		0x10da  #define PCI_DEVICE_ID_TCONRAD_TOKENRING	0x0508 -  #define PCI_VENDOR_ID_NVIDIA			0x10de  #define PCI_DEVICE_ID_NVIDIA_TNT		0x0020  #define PCI_DEVICE_ID_NVIDIA_TNT2		0x0028 @@ -1242,9 +1228,6 @@  #define PCI_DEVICE_ID_IMS_TT128		0x9128  #define PCI_DEVICE_ID_IMS_TT3D		0x9135 - - -  #define PCI_VENDOR_ID_INTERG		0x10ea  #define PCI_DEVICE_ID_INTERG_1682	0x1682  #define PCI_DEVICE_ID_INTERG_2000	0x2000 @@ -1263,7 +1246,6 @@  #define PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP 0x3fc5  #define PCI_DEVICE_ID_XILINX_HAMMERFALL_DSP_MADI 0x3fc6 -  #define PCI_VENDOR_ID_INIT		0x1101  #define PCI_VENDOR_ID_CREATIVE		0x1102 /* duplicate: ECTIVA */ @@ -1358,7 +1340,6 @@  #define PCI_VENDOR_ID_SIEMENS           0x110A  #define PCI_DEVICE_ID_SIEMENS_DSCC4     0x2102 -  #define PCI_VENDOR_ID_VORTEX		0x1119  #define PCI_DEVICE_ID_VORTEX_GDT60x0	0x0000  #define PCI_DEVICE_ID_VORTEX_GDT6000B	0x0001 @@ -1384,8 +1365,8 @@  #define PCI_VENDOR_ID_EF		0x111a  #define PCI_DEVICE_ID_EF_ATM_FPGA	0x0000  #define PCI_DEVICE_ID_EF_ATM_ASIC	0x0002 -#define PCI_VENDOR_ID_EF_ATM_LANAI2	0x0003 -#define PCI_VENDOR_ID_EF_ATM_LANAIHB	0x0005 +#define PCI_DEVICE_ID_EF_ATM_LANAI2	0x0003 +#define PCI_DEVICE_ID_EF_ATM_LANAIHB	0x0005  #define PCI_VENDOR_ID_IDT		0x111d  #define PCI_DEVICE_ID_IDT_IDT77201	0x0001 @@ -1393,7 +1374,6 @@  #define PCI_VENDOR_ID_FORE		0x1127  #define PCI_DEVICE_ID_FORE_PCA200E	0x0300 -  #define PCI_VENDOR_ID_PHILIPS		0x1131  #define PCI_DEVICE_ID_PHILIPS_SAA7146	0x7146  #define PCI_DEVICE_ID_PHILIPS_SAA9730	0x9730 @@ -1412,7 +1392,6 @@  #define PCI_DEVICE_ID_ZIATECH_5550_HC	0x5550 -  #define PCI_VENDOR_ID_SYSKONNECT	0x1148  #define PCI_DEVICE_ID_SYSKONNECT_TR	0x4200  #define PCI_DEVICE_ID_SYSKONNECT_GE	0x4300 @@ -1420,7 +1399,6 @@  #define PCI_DEVICE_ID_SYSKONNECT_9DXX	0x4400  #define PCI_DEVICE_ID_SYSKONNECT_9MXX	0x4500 -  #define PCI_VENDOR_ID_DIGI		0x114f  #define PCI_DEVICE_ID_DIGI_DF_M_IOM2_E	0x0070  #define PCI_DEVICE_ID_DIGI_DF_M_E	0x0071 @@ -1431,12 +1409,10 @@  #define PCI_DEVICE_ID_NEO_2RJ45         0x00CA  #define PCI_DEVICE_ID_NEO_2RJ45PRI      0x00CB -  #define PCI_VENDOR_ID_XIRCOM		0x115d  #define PCI_DEVICE_ID_XIRCOM_RBM56G	0x0101  #define PCI_DEVICE_ID_XIRCOM_X3201_MDM	0x0103 -  #define PCI_VENDOR_ID_SERVERWORKS	  0x1166  #define PCI_DEVICE_ID_SERVERWORKS_HE	  0x0008  #define PCI_DEVICE_ID_SERVERWORKS_LE	  0x0009 @@ -1505,7 +1481,6 @@  #define PCI_DEVICE_ID_ZEITNET_1221	0x0001  #define PCI_DEVICE_ID_ZEITNET_1225	0x0002 -  #define PCI_VENDOR_ID_FUJITSU_ME	0x119e  #define PCI_DEVICE_ID_FUJITSU_FS155	0x0001  #define PCI_DEVICE_ID_FUJITSU_FS50	0x0003 @@ -1523,28 +1498,23 @@  #define PCI_DEVICE_ID_V3_V960		0x0001  #define PCI_DEVICE_ID_V3_V351		0x0002 -  #define PCI_VENDOR_ID_ATT		0x11c1  #define PCI_DEVICE_ID_ATT_VENUS_MODEM	0x480 -  #define PCI_VENDOR_ID_SPECIALIX		0x11cb  #define PCI_DEVICE_ID_SPECIALIX_IO8	0x2000  #define PCI_DEVICE_ID_SPECIALIX_RIO	0x8000  #define PCI_SUBDEVICE_ID_SPECIALIX_SPEED4 0xa004 -  #define PCI_VENDOR_ID_ANALOG_DEVICES	0x11d4  #define PCI_DEVICE_ID_AD1889JS		0x1889 -  #define PCI_DEVICE_ID_SEGA_BBA		0x1234  #define PCI_VENDOR_ID_ZORAN		0x11de  #define PCI_DEVICE_ID_ZORAN_36057	0x6057  #define PCI_DEVICE_ID_ZORAN_36120	0x6120 -  #define PCI_VENDOR_ID_COMPEX		0x11f6  #define PCI_DEVICE_ID_COMPEX_ENET100VG4	0x0112 @@ -1603,8 +1573,6 @@  #define PCI_DEVICE_ID_3DFX_VOODOO3	0x0005  #define PCI_DEVICE_ID_3DFX_VOODOO5	0x0009 - -  #define PCI_VENDOR_ID_AVM		0x1244  #define PCI_DEVICE_ID_AVM_B1		0x0700  #define PCI_DEVICE_ID_AVM_C4		0x0800 @@ -1613,7 +1581,6 @@  #define PCI_DEVICE_ID_AVM_C2		0x1100  #define PCI_DEVICE_ID_AVM_T1		0x1200 -  #define PCI_VENDOR_ID_STALLION		0x124d  /* Allied Telesyn */ @@ -1636,7 +1603,6 @@  #define PCI_VENDOR_ID_SATSAGEM		0x1267  #define PCI_DEVICE_ID_SATSAGEM_NICCY	0x1016 -  #define PCI_VENDOR_ID_ENSONIQ		0x1274  #define PCI_DEVICE_ID_ENSONIQ_CT5880	0x5880  #define PCI_DEVICE_ID_ENSONIQ_ES1370	0x5000 @@ -1659,7 +1625,6 @@  #define PCI_VENDOR_ID_ALTEON		0x12ae -  #define PCI_SUBVENDOR_ID_CONNECT_TECH			0x12c4  #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232		0x0001  #define PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232		0x0002 @@ -1690,7 +1655,6 @@  #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_4_485	0x0331  #define PCI_SUBDEVICE_ID_CONNECT_TECH_PCI_UART_8_485	0x0332 -  #define PCI_VENDOR_ID_NVIDIA_SGS	0x12d2  #define PCI_DEVICE_ID_NVIDIA_SGS_RIVA128 0x0018 @@ -1800,7 +1764,6 @@  #define PCI_DEVICE_ID_LMC_SSI		0x0005  #define PCI_DEVICE_ID_LMC_T1		0x0006 -  #define PCI_VENDOR_ID_NETGEAR		0x1385  #define PCI_DEVICE_ID_NETGEAR_GA620	0x620a @@ -1903,6 +1866,8 @@  #define PCI_DEVICE_ID_OXSEMI_16PCI952	0x9521  #define PCI_DEVICE_ID_OXSEMI_16PCI952PP	0x9523 +#define PCI_VENDOR_ID_CHELSIO		0x1425 +  #define PCI_VENDOR_ID_SAMSUNG		0x144d  #define PCI_VENDOR_ID_MYRICOM		0x14c1 @@ -2011,13 +1976,10 @@  #define PCI_DEVICE_ID_ENE_720		0x1421  #define PCI_DEVICE_ID_ENE_722		0x1422 -#define PCI_VENDOR_ID_CHELSIO		0x1425 -  #define PCI_SUBVENDOR_ID_PERLE          0x155f  #define PCI_SUBDEVICE_ID_PCI_RAS4       0xf001  #define PCI_SUBDEVICE_ID_PCI_RAS8       0xf010 -  #define PCI_VENDOR_ID_SYBA		0x1592  #define PCI_DEVICE_ID_SYBA_2P_EPP	0x0782  #define PCI_DEVICE_ID_SYBA_1P_ECP	0x0783 @@ -2036,8 +1998,10 @@  #define PCI_DEVICE_ID_MELLANOX_SINAI_OLD 0x5e8c  #define PCI_DEVICE_ID_MELLANOX_SINAI	0x6274 -#define PCI_VENDOR_ID_PDC		0x15e9 +#define PCI_VENDOR_ID_QUICKNET		0x15e2 +#define PCI_DEVICE_ID_QUICKNET_XJ	0x0500 +#define PCI_VENDOR_ID_PDC		0x15e9  #define PCI_VENDOR_ID_FARSITE           0x1619  #define PCI_DEVICE_ID_FARSITE_T2P       0x0400 @@ -2054,6 +2018,8 @@  #define PCI_DEVICE_ID_BCM1250_PCI	0x0001  #define PCI_DEVICE_ID_BCM1250_HT	0x0002 +#define PCI_VENDOR_ID_ATHEROS		0x168c +  #define PCI_VENDOR_ID_NETCELL		0x169c  #define PCI_DEVICE_ID_REVOLUTION	0x0044 @@ -2092,7 +2058,6 @@  #define PCI_DEVICE_ID_HERC_WIN		0x5732  #define PCI_DEVICE_ID_HERC_UNI		0x5832 -  #define PCI_VENDOR_ID_SITECOM		0x182d  #define PCI_DEVICE_ID_SITECOM_DC105V2	0x3069 @@ -2128,12 +2093,9 @@  #define PCI_DEVICE_ID_3DLABS_PERMEDIA2	0x0007  #define PCI_DEVICE_ID_3DLABS_PERMEDIA2V	0x0009 -  #define PCI_VENDOR_ID_AKS		0x416c  #define PCI_DEVICE_ID_AKS_ALADDINCARD	0x0100 - -  #define PCI_VENDOR_ID_S3		0x5333  #define PCI_DEVICE_ID_S3_TRIO		0x8811  #define PCI_DEVICE_ID_S3_868		0x8880 @@ -2145,7 +2107,6 @@  #define PCI_VENDOR_ID_DUNORD		0x5544  #define PCI_DEVICE_ID_DUNORD_I3000	0x0001 -  #define PCI_VENDOR_ID_DCI		0x6666  #define PCI_DEVICE_ID_DCI_PCCOM4	0x0001  #define PCI_DEVICE_ID_DCI_PCCOM8	0x0002 @@ -2389,7 +2350,6 @@  #define PCI_DEVICE_ID_ADAPTEC2_OBSIDIAN   0x0500  #define PCI_DEVICE_ID_ADAPTEC2_SCAMP	0x0503 -  #define PCI_VENDOR_ID_HOLTEK		0x9412  #define PCI_DEVICE_ID_HOLTEK_6565	0x6565 @@ -2405,6 +2365,8 @@  #define PCI_DEVICE_ID_NETMOS_9845	0x9845  #define PCI_DEVICE_ID_NETMOS_9855	0x9855 +#define PCI_VENDOR_ID_3COM_2		0xa727 +  #define PCI_SUBVENDOR_ID_EXSYS		0xd84d  #define PCI_SUBDEVICE_ID_EXSYS_4014	0x4014  #define PCI_SUBDEVICE_ID_EXSYS_4055	0x4055 @@ -2413,13 +2375,7 @@  #define PCI_DEVICE_ID_TIGERJET_300	0x0001  #define PCI_DEVICE_ID_TIGERJET_100	0x0002 -#define PCI_VENDOR_ID_TTTECH		0x0357 -#define PCI_DEVICE_ID_TTTECH_MC322	0x000A -  #define PCI_VENDOR_ID_XILINX_RME	0xea60  #define PCI_DEVICE_ID_RME_DIGI32	0x9896  #define PCI_DEVICE_ID_RME_DIGI32_PRO	0x9897  #define PCI_DEVICE_ID_RME_DIGI32_8	0x9898 - -#define PCI_VENDOR_ID_QUICKNET		0x15E2 -#define PCI_DEVICE_ID_QUICKNET_XJ	0x0500 diff --git a/sound/oss/emu10k1/main.c b/sound/oss/emu10k1/main.c index 16ac02540a3f..5058411b7524 100644 --- a/sound/oss/emu10k1/main.c +++ b/sound/oss/emu10k1/main.c @@ -1302,7 +1302,7 @@ static int __devinit emu10k1_probe(struct pci_dev *pci_dev, const struct pci_dev  		goto err_irq;  	} -	pci_read_config_byte(pci_dev, PCI_REVISION_ID, &card->chiprev); +	card->chiprev = pci_dev->revision;  	pci_read_config_word(pci_dev, PCI_SUBSYSTEM_ID, &card->model);  	printk(KERN_INFO "emu10k1: %s rev %d model %#04x found, IO at %#04lx-%#04lx, IRQ %d\n", diff --git a/sound/oss/es1371.c b/sound/oss/es1371.c index 593a3aac12ce..52648573f601 100644 --- a/sound/oss/es1371.c +++ b/sound/oss/es1371.c @@ -2894,7 +2894,7 @@ static int __devinit es1371_probe(struct pci_dev *pcidev, const struct pci_devic  	s->irq = pcidev->irq;  	s->vendor = pcidev->vendor;  	s->device = pcidev->device; -	pci_read_config_byte(pcidev, PCI_REVISION_ID, &s->rev); +	s->rev = pcidev->revision;  	s->codec->private_data = s;  	s->codec->id = 0;  	s->codec->codec_read = rdcodec; diff --git a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c index cb59f994c68f..41543a4933e7 100644 --- a/sound/pci/ali5451/ali5451.c +++ b/sound/pci/ali5451/ali5451.c @@ -2218,7 +2218,7 @@ static int __devinit snd_ali_create(struct snd_card *card,  	codec->card = card;  	codec->pci = pci;  	codec->irq = -1; -	pci_read_config_byte(pci, PCI_REVISION_ID, &codec->revision); +	codec->revision = pci->revision;  	codec->spdif_support = spdif_support;  	if (pcm_streams < 1) diff --git a/sound/pci/atiixp.c b/sound/pci/atiixp.c index 7d8053b5e8d5..89184a424140 100644 --- a/sound/pci/atiixp.c +++ b/sound/pci/atiixp.c @@ -1639,15 +1639,12 @@ static int __devinit snd_atiixp_probe(struct pci_dev *pci,  {  	struct snd_card *card;  	struct atiixp *chip; -	unsigned char revision;  	int err;  	card = snd_card_new(index, id, THIS_MODULE, 0);  	if (card == NULL)  		return -ENOMEM; -	pci_read_config_byte(pci, PCI_REVISION_ID, &revision); -  	strcpy(card->driver, spdif_aclink ? "ATIIXP" : "ATIIXP-SPDMA");  	strcpy(card->shortname, "ATI IXP");  	if ((err = snd_atiixp_create(card, pci, &chip)) < 0) @@ -1670,7 +1667,8 @@ static int __devinit snd_atiixp_probe(struct pci_dev *pci,  	snd_atiixp_chip_start(chip);  	snprintf(card->longname, sizeof(card->longname), -		 "%s rev %x with %s at %#lx, irq %i", card->shortname, revision, +		 "%s rev %x with %s at %#lx, irq %i", card->shortname, +		 pci->revision,  		 chip->ac97[0] ? snd_ac97_get_short_name(chip->ac97[0]) : "?",  		 chip->addr, chip->irq); diff --git a/sound/pci/atiixp_modem.c b/sound/pci/atiixp_modem.c index 904023fe4f26..ce752f84457a 100644 --- a/sound/pci/atiixp_modem.c +++ b/sound/pci/atiixp_modem.c @@ -1283,15 +1283,12 @@ static int __devinit snd_atiixp_probe(struct pci_dev *pci,  {  	struct snd_card *card;  	struct atiixp_modem *chip; -	unsigned char revision;  	int err;  	card = snd_card_new(index, id, THIS_MODULE, 0);  	if (card == NULL)  		return -ENOMEM; -	pci_read_config_byte(pci, PCI_REVISION_ID, &revision); -  	strcpy(card->driver, "ATIIXP-MODEM");  	strcpy(card->shortname, "ATI IXP Modem");  	if ((err = snd_atiixp_create(card, pci, &chip)) < 0) @@ -1312,7 +1309,7 @@ static int __devinit snd_atiixp_probe(struct pci_dev *pci,  	snd_atiixp_chip_start(chip);  	sprintf(card->longname, "%s rev %x at 0x%lx, irq %i", -		card->shortname, revision, chip->addr, chip->irq); +		card->shortname, pci->revision, chip->addr, chip->irq);  	if ((err = snd_card_register(card)) < 0)  		goto __error; diff --git a/sound/pci/au88x0/au88x0.c b/sound/pci/au88x0/au88x0.c index 238154bb7a25..5ec1b6fcd548 100644 --- a/sound/pci/au88x0/au88x0.c +++ b/sound/pci/au88x0/au88x0.c @@ -341,11 +341,7 @@ snd_vortex_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)  		snd_card_free(card);  		return err;  	} -	if ((err = pci_read_config_byte(pci, PCI_REVISION_ID, -				  &(chip->rev))) < 0) { -		snd_card_free(card); -		return err; -	} +	chip->rev = pci->revision;  #ifdef CHIP_AU8830  	if ((chip->rev) != 0xfe && (chip->rev) != 0xfa) {  		printk(KERN_ALERT diff --git a/sound/pci/ca0106/ca0106.h b/sound/pci/ca0106/ca0106.h index aaac6e5b4767..a0420bc63f0b 100644 --- a/sound/pci/ca0106/ca0106.h +++ b/sound/pci/ca0106/ca0106.h @@ -590,7 +590,6 @@ struct snd_ca0106 {  	struct resource *res_port;  	int irq; -	unsigned char revision;		/* chip revision */  	unsigned int serial;            /* serial number */  	unsigned short model;		/* subsystem id */ diff --git a/sound/pci/ca0106/ca0106_main.c b/sound/pci/ca0106/ca0106_main.c index 48f3f17c5170..9fd7b8a5b75e 100644 --- a/sound/pci/ca0106/ca0106_main.c +++ b/sound/pci/ca0106/ca0106_main.c @@ -1293,13 +1293,12 @@ static int __devinit snd_ca0106_create(int dev, struct snd_card *card,  	}  	pci_set_master(pci); -	/* read revision & serial */ -	pci_read_config_byte(pci, PCI_REVISION_ID, &chip->revision); +	/* read serial */  	pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &chip->serial);  	pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &chip->model);  #if 1  	printk(KERN_INFO "snd-ca0106: Model %04x Rev %08x Serial %08x\n", chip->model, -	       chip->revision, chip->serial); +	       pci->revision, chip->serial);  #endif  	strcpy(card->driver, "CA0106");  	strcpy(card->shortname, "CA0106"); diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c index dbc805c33fc4..4a9b59ad8ab1 100644 --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c @@ -1511,7 +1511,6 @@ int __devinit snd_emu10k1_create(struct snd_card *card,  	struct snd_emu10k1 *emu;  	int idx, err;  	int is_audigy; -	unsigned char revision;  	unsigned int silent_page;  	const struct snd_emu_chip_details *c;  	static struct snd_device_ops ops = { @@ -1543,8 +1542,7 @@ int __devinit snd_emu10k1_create(struct snd_card *card,  	emu->synth = NULL;  	emu->get_synth_voice = NULL;  	/* read revision & serial */ -	pci_read_config_byte(pci, PCI_REVISION_ID, &revision); -	emu->revision = revision; +	emu->revision = pci->revision;  	pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial);  	pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model);  	snd_printdd("vendor=0x%x, device=0x%x, subsystem_vendor_id=0x%x, subsystem_id=0x%x\n",pci->vendor, pci->device, emu->serial, emu->model); diff --git a/sound/pci/emu10k1/emu10k1x.c b/sound/pci/emu10k1/emu10k1x.c index bb0fec7f7e1b..e4af7a9b808c 100644 --- a/sound/pci/emu10k1/emu10k1x.c +++ b/sound/pci/emu10k1/emu10k1x.c @@ -942,7 +942,7 @@ static int __devinit snd_emu10k1x_create(struct snd_card *card,  	pci_set_master(pci);  	/* read revision & serial */ -	pci_read_config_byte(pci, PCI_REVISION_ID, &chip->revision); +	chip->revision = pci->revision;  	pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &chip->serial);  	pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &chip->model);  	snd_printk(KERN_INFO "Model %04x Rev %08x Serial %08x\n", chip->model, diff --git a/sound/pci/ens1370.c b/sound/pci/ens1370.c index 6a0ddcf00884..7c403965153b 100644 --- a/sound/pci/ens1370.c +++ b/sound/pci/ens1370.c @@ -2110,7 +2110,6 @@ static int __devinit snd_ensoniq_create(struct snd_card *card,  				     struct ensoniq ** rensoniq)  {  	struct ensoniq *ensoniq; -	unsigned char cmdb;  	int err;  	static struct snd_device_ops ops = {  		.dev_free =	snd_ensoniq_dev_free, @@ -2151,8 +2150,7 @@ static int __devinit snd_ensoniq_create(struct snd_card *card,  	}  #endif  	pci_set_master(pci); -	pci_read_config_byte(pci, PCI_REVISION_ID, &cmdb); -	ensoniq->rev = cmdb; +	ensoniq->rev = pci->revision;  #ifdef CHIP1370  #if 0  	ensoniq->ctrl = ES_1370_CDC_EN | ES_1370_SERR_DISABLE | diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c index 6dc578bbeec9..11015178e207 100644 --- a/sound/pci/fm801.c +++ b/sound/pci/fm801.c @@ -1369,7 +1369,6 @@ static int __devinit snd_fm801_create(struct snd_card *card,  				      struct fm801 ** rchip)  {  	struct fm801 *chip; -	unsigned char rev;  	int err;  	static struct snd_device_ops ops = {  		.dev_free =	snd_fm801_dev_free, @@ -1405,8 +1404,7 @@ static int __devinit snd_fm801_create(struct snd_card *card,  		pci_set_master(pci);  	} -	pci_read_config_byte(pci, PCI_REVISION_ID, &rev); -	if (rev >= 0xb1)	/* FM801-AU */ +	if (pci->revision >= 0xb1)	/* FM801-AU */  		chip->multichannel = 1;  	snd_fm801_chip_init(chip, 0); diff --git a/sound/pci/via82xx.c b/sound/pci/via82xx.c index a28992269f5e..50c9f92cfd1b 100644 --- a/sound/pci/via82xx.c +++ b/sound/pci/via82xx.c @@ -2431,7 +2431,6 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,  {  	struct snd_card *card;  	struct via82xx *chip; -	unsigned char revision;  	int chip_type = 0, card_type;  	unsigned int i;  	int err; @@ -2441,18 +2440,17 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,  		return -ENOMEM;  	card_type = pci_id->driver_data; -	pci_read_config_byte(pci, PCI_REVISION_ID, &revision);  	switch (card_type) {  	case TYPE_CARD_VIA686:  		strcpy(card->driver, "VIA686A"); -		sprintf(card->shortname, "VIA 82C686A/B rev%x", revision); +		sprintf(card->shortname, "VIA 82C686A/B rev%x", pci->revision);  		chip_type = TYPE_VIA686;  		break;  	case TYPE_CARD_VIA8233:  		chip_type = TYPE_VIA8233; -		sprintf(card->shortname, "VIA 823x rev%x", revision); +		sprintf(card->shortname, "VIA 823x rev%x", pci->revision);  		for (i = 0; i < ARRAY_SIZE(via823x_cards); i++) { -			if (revision == via823x_cards[i].revision) { +			if (pci->revision == via823x_cards[i].revision) {  				chip_type = via823x_cards[i].type;  				strcpy(card->shortname, via823x_cards[i].name);  				break; @@ -2460,7 +2458,7 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,  		}  		if (chip_type != TYPE_VIA8233A) {  			if (dxs_support == VIA_DXS_AUTO) -				dxs_support = check_dxs_list(pci, revision); +				dxs_support = check_dxs_list(pci, pci->revision);  			/* force to use VIA8233 or 8233A model according to  			 * dxs_support module option  			 */ @@ -2471,7 +2469,7 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,  		}  		if (chip_type == TYPE_VIA8233A)  			strcpy(card->driver, "VIA8233A"); -		else if (revision >= VIA_REV_8237) +		else if (pci->revision >= VIA_REV_8237)  			strcpy(card->driver, "VIA8237"); /* no slog assignment */  		else  			strcpy(card->driver, "VIA8233"); @@ -2482,7 +2480,7 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,  		goto __error;  	} -	if ((err = snd_via82xx_create(card, pci, chip_type, revision, +	if ((err = snd_via82xx_create(card, pci, chip_type, pci->revision,  				      ac97_clock, &chip)) < 0)  		goto __error;  	card->private_data = chip; diff --git a/sound/pci/via82xx_modem.c b/sound/pci/via82xx_modem.c index b338e15db0d9..8cbf8eba4ae9 100644 --- a/sound/pci/via82xx_modem.c +++ b/sound/pci/via82xx_modem.c @@ -1162,7 +1162,6 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,  {  	struct snd_card *card;  	struct via82xx_modem *chip; -	unsigned char revision;  	int chip_type = 0, card_type;  	unsigned int i;  	int err; @@ -1172,7 +1171,6 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,  		return -ENOMEM;  	card_type = pci_id->driver_data; -	pci_read_config_byte(pci, PCI_REVISION_ID, &revision);  	switch (card_type) {  	case TYPE_CARD_VIA82XX_MODEM:  		strcpy(card->driver, "VIA82XX-MODEM"); @@ -1184,7 +1182,7 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,  		goto __error;  	} -	if ((err = snd_via82xx_create(card, pci, chip_type, revision, +	if ((err = snd_via82xx_create(card, pci, chip_type, pci->revision,  				      ac97_clock, &chip)) < 0)  		goto __error;  	card->private_data = chip; diff --git a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c index ea861bceaddf..ab7a81c35705 100644 --- a/sound/pci/ymfpci/ymfpci_main.c +++ b/sound/pci/ymfpci/ymfpci_main.c @@ -2404,7 +2404,7 @@ int __devinit snd_ymfpci_create(struct snd_card *card,  	chip->pci = pci;  	chip->irq = -1;  	chip->device_id = pci->device; -	pci_read_config_byte(pci, PCI_REVISION_ID, &chip->rev); +	chip->rev = pci->revision;  	chip->reg_area_phys = pci_resource_start(pci, 0);  	chip->reg_area_virt = ioremap_nocache(chip->reg_area_phys, 0x8000);  	pci_set_master(pci); | 
