Commit 5d66f151 authored by Linus Torvalds's avatar Linus Torvalds

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:
  PCI: Add Kconfig option to disable deprecated pci_find_* API
  PCI: pciserial_resume_one ignored return value of pci_enable_device
  PCI Hotplug: cpqhp_pushbutton_thread(): remove a pointless if() check
  PCI: make pci_match_device() static
  PCI: Remove 3 incorrect MSI quirks.
  PCI: Add MSI INTX_DISABLE quirks for ATI SB700/800 SATA and IXP SB400 USB
  PCI: Add quirk for devices which disable MSI when INTX_DISABLE is set.
  PCI: Add MSI quirk for ServerWorks HT1000 PCIX bridge.
  PCI: Revert "PCI: disable MSI by default on systems with Serverworks HT1000 chips"
parents 3131e530 bd3989e0
...@@ -109,7 +109,7 @@ config HISAX_16_3 ...@@ -109,7 +109,7 @@ config HISAX_16_3
config HISAX_TELESPCI config HISAX_TELESPCI
bool "Teles PCI" bool "Teles PCI"
depends on PCI && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV)) depends on PCI && PCI_LEGACY && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV))
help help
This enables HiSax support for the Teles PCI. This enables HiSax support for the Teles PCI.
See <file:Documentation/isdn/README.HiSax> on how to configure it. See <file:Documentation/isdn/README.HiSax> on how to configure it.
...@@ -237,7 +237,7 @@ config HISAX_MIC ...@@ -237,7 +237,7 @@ config HISAX_MIC
config HISAX_NETJET config HISAX_NETJET
bool "NETjet card" bool "NETjet card"
depends on PCI && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV)) depends on PCI && PCI_LEGACY && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV))
help help
This enables HiSax support for the NetJet from Traverse This enables HiSax support for the NetJet from Traverse
Technologies. Technologies.
...@@ -248,7 +248,7 @@ config HISAX_NETJET ...@@ -248,7 +248,7 @@ config HISAX_NETJET
config HISAX_NETJET_U config HISAX_NETJET_U
bool "NETspider U card" bool "NETspider U card"
depends on PCI && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV)) depends on PCI && PCI_LEGACY && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV))
help help
This enables HiSax support for the Netspider U interface ISDN card This enables HiSax support for the Netspider U interface ISDN card
from Traverse Technologies. from Traverse Technologies.
...@@ -287,7 +287,7 @@ config HISAX_HSTSAPHIR ...@@ -287,7 +287,7 @@ config HISAX_HSTSAPHIR
config HISAX_BKM_A4T config HISAX_BKM_A4T
bool "Telekom A4T card" bool "Telekom A4T card"
depends on PCI depends on PCI && PCI_LEGACY
help help
This enables HiSax support for the Telekom A4T card. This enables HiSax support for the Telekom A4T card.
...@@ -297,7 +297,7 @@ config HISAX_BKM_A4T ...@@ -297,7 +297,7 @@ config HISAX_BKM_A4T
config HISAX_SCT_QUADRO config HISAX_SCT_QUADRO
bool "Scitel Quadro card" bool "Scitel Quadro card"
depends on PCI depends on PCI && PCI_LEGACY
help help
This enables HiSax support for the Scitel Quadro card. This enables HiSax support for the Scitel Quadro card.
...@@ -316,7 +316,7 @@ config HISAX_GAZEL ...@@ -316,7 +316,7 @@ config HISAX_GAZEL
config HISAX_HFC_PCI config HISAX_HFC_PCI
bool "HFC PCI-Bus cards" bool "HFC PCI-Bus cards"
depends on PCI && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV)) depends on PCI && PCI_LEGACY && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV))
help help
This enables HiSax support for the HFC-S PCI 2BDS0 based cards. This enables HiSax support for the HFC-S PCI 2BDS0 based cards.
...@@ -325,7 +325,7 @@ config HISAX_HFC_PCI ...@@ -325,7 +325,7 @@ config HISAX_HFC_PCI
config HISAX_W6692 config HISAX_W6692
bool "Winbond W6692 based cards" bool "Winbond W6692 based cards"
depends on PCI depends on PCI && PCI_LEGACY
help help
This enables HiSax support for Winbond W6692 based PCI ISDN cards. This enables HiSax support for Winbond W6692 based PCI ISDN cards.
...@@ -341,7 +341,7 @@ config HISAX_HFC_SX ...@@ -341,7 +341,7 @@ config HISAX_HFC_SX
config HISAX_ENTERNOW_PCI config HISAX_ENTERNOW_PCI
bool "Formula-n enter:now PCI card" bool "Formula-n enter:now PCI card"
depends on HISAX_NETJET && PCI && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV)) depends on HISAX_NETJET && PCI && PCI_LEGACY && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV))
help help
This enables HiSax support for the Formula-n enter:now PCI This enables HiSax support for the Formula-n enter:now PCI
ISDN card. ISDN card.
...@@ -411,7 +411,7 @@ config HISAX_HFC4S8S ...@@ -411,7 +411,7 @@ config HISAX_HFC4S8S
config HISAX_FRITZ_PCIPNP config HISAX_FRITZ_PCIPNP
tristate "AVM Fritz!Card PCI/PCIv2/PnP support (EXPERIMENTAL)" tristate "AVM Fritz!Card PCI/PCIv2/PnP support (EXPERIMENTAL)"
depends on PCI && EXPERIMENTAL depends on PCI && PCI_LEGACY && EXPERIMENTAL
help help
This enables the driver for the AVM Fritz!Card PCI, This enables the driver for the AVM Fritz!Card PCI,
Fritz!Card PCI v2 and Fritz!Card PnP. Fritz!Card PCI v2 and Fritz!Card PnP.
......
...@@ -830,7 +830,7 @@ static int __devinit avm_pnp_setup(struct IsdnCardState *cs) ...@@ -830,7 +830,7 @@ static int __devinit avm_pnp_setup(struct IsdnCardState *cs)
#endif /* __ISAPNP__ */ #endif /* __ISAPNP__ */
#ifndef CONFIG_PCI #ifndef CONFIG_PCI_LEGACY
static int __devinit avm_pci_setup(struct IsdnCardState *cs) static int __devinit avm_pci_setup(struct IsdnCardState *cs)
{ {
...@@ -872,7 +872,7 @@ static int __devinit avm_pci_setup(struct IsdnCardState *cs) ...@@ -872,7 +872,7 @@ static int __devinit avm_pci_setup(struct IsdnCardState *cs)
return (1); return (1);
} }
#endif /* CONFIG_PCI */ #endif /* CONFIG_PCI_LEGACY */
int __devinit int __devinit
setup_avm_pcipnp(struct IsdnCard *card) setup_avm_pcipnp(struct IsdnCard *card)
......
...@@ -1148,7 +1148,7 @@ static int __devinit setup_diva_isapnp(struct IsdnCard *card) ...@@ -1148,7 +1148,7 @@ static int __devinit setup_diva_isapnp(struct IsdnCard *card)
#endif /* ISAPNP */ #endif /* ISAPNP */
#ifdef CONFIG_PCI #ifdef CONFIG_PCI_LEGACY
static struct pci_dev *dev_diva __devinitdata = NULL; static struct pci_dev *dev_diva __devinitdata = NULL;
static struct pci_dev *dev_diva_u __devinitdata = NULL; static struct pci_dev *dev_diva_u __devinitdata = NULL;
static struct pci_dev *dev_diva201 __devinitdata = NULL; static struct pci_dev *dev_diva201 __devinitdata = NULL;
...@@ -1229,14 +1229,14 @@ static int __devinit setup_diva_pci(struct IsdnCard *card) ...@@ -1229,14 +1229,14 @@ static int __devinit setup_diva_pci(struct IsdnCard *card)
return (1); /* card found */ return (1); /* card found */
} }
#else /* if !CONFIG_PCI */ #else /* if !CONFIG_PCI_LEGACY */
static int __devinit setup_diva_pci(struct IsdnCard *card) static int __devinit setup_diva_pci(struct IsdnCard *card)
{ {
return (-1); /* card not found; continue search */ return (-1); /* card not found; continue search */
} }
#endif /* CONFIG_PCI */ #endif /* CONFIG_PCI_LEGACY */
int __devinit int __devinit
setup_diva(struct IsdnCard *card) setup_diva(struct IsdnCard *card)
......
...@@ -1025,7 +1025,7 @@ setup_elsa_pcmcia(struct IsdnCard *card) ...@@ -1025,7 +1025,7 @@ setup_elsa_pcmcia(struct IsdnCard *card)
cs->irq); cs->irq);
} }
#ifdef CONFIG_PCI #ifdef CONFIG_PCI_LEGACY
static struct pci_dev *dev_qs1000 __devinitdata = NULL; static struct pci_dev *dev_qs1000 __devinitdata = NULL;
static struct pci_dev *dev_qs3000 __devinitdata = NULL; static struct pci_dev *dev_qs3000 __devinitdata = NULL;
...@@ -1093,7 +1093,7 @@ setup_elsa_pci(struct IsdnCard *card) ...@@ -1093,7 +1093,7 @@ setup_elsa_pci(struct IsdnCard *card)
{ {
return (1); return (1);
} }
#endif /* CONFIG_PCI */ #endif /* CONFIG_PCI_LEGACY */
static int __devinit static int __devinit
setup_elsa_common(struct IsdnCard *card) setup_elsa_common(struct IsdnCard *card)
......
...@@ -532,6 +532,7 @@ setup_gazelisa(struct IsdnCard *card, struct IsdnCardState *cs) ...@@ -532,6 +532,7 @@ setup_gazelisa(struct IsdnCard *card, struct IsdnCardState *cs)
return (0); return (0);
} }
#ifdef CONFIG_PCI_LEGACY
static struct pci_dev *dev_tel __devinitdata = NULL; static struct pci_dev *dev_tel __devinitdata = NULL;
static int __devinit static int __devinit
...@@ -620,6 +621,7 @@ setup_gazelpci(struct IsdnCardState *cs) ...@@ -620,6 +621,7 @@ setup_gazelpci(struct IsdnCardState *cs)
return (0); return (0);
} }
#endif /* CONFIG_PCI_LEGACY */
int __devinit int __devinit
setup_gazel(struct IsdnCard *card) setup_gazel(struct IsdnCard *card)
...@@ -639,7 +641,7 @@ setup_gazel(struct IsdnCard *card) ...@@ -639,7 +641,7 @@ setup_gazel(struct IsdnCard *card)
return (0); return (0);
} else { } else {
#ifdef CONFIG_PCI #ifdef CONFIG_PCI_LEGACY
if (setup_gazelpci(cs)) if (setup_gazelpci(cs))
return (0); return (0);
#else #else
......
...@@ -223,7 +223,6 @@ static int niccy_card_msg(struct IsdnCardState *cs, int mt, void *arg) ...@@ -223,7 +223,6 @@ static int niccy_card_msg(struct IsdnCardState *cs, int mt, void *arg)
return 0; return 0;
} }
static struct pci_dev *niccy_dev __devinitdata = NULL;
#ifdef __ISAPNP__ #ifdef __ISAPNP__
static struct pnp_card *pnp_c __devinitdata = NULL; static struct pnp_card *pnp_c __devinitdata = NULL;
#endif #endif
...@@ -299,7 +298,9 @@ int __devinit setup_niccy(struct IsdnCard *card) ...@@ -299,7 +298,9 @@ int __devinit setup_niccy(struct IsdnCard *card)
return 0; return 0;
} }
} else { } else {
#ifdef CONFIG_PCI #ifdef CONFIG_PCI_LEGACY
static struct pci_dev *niccy_dev __devinitdata;
u_int pci_ioaddr; u_int pci_ioaddr;
cs->subtyp = 0; cs->subtyp = 0;
if ((niccy_dev = pci_find_device(PCI_VENDOR_ID_SATSAGEM, if ((niccy_dev = pci_find_device(PCI_VENDOR_ID_SATSAGEM,
...@@ -356,7 +357,7 @@ int __devinit setup_niccy(struct IsdnCard *card) ...@@ -356,7 +357,7 @@ int __devinit setup_niccy(struct IsdnCard *card)
printk(KERN_WARNING "Niccy: io0 0 and NO_PCI_BIOS\n"); printk(KERN_WARNING "Niccy: io0 0 and NO_PCI_BIOS\n");
printk(KERN_WARNING "Niccy: unable to config NICCY PCI\n"); printk(KERN_WARNING "Niccy: unable to config NICCY PCI\n");
return 0; return 0;
#endif /* CONFIG_PCI */ #endif /* CONFIG_PCI_LEGACY */
} }
printk(KERN_INFO "HiSax: %s %s config irq:%d data:0x%X ale:0x%X\n", printk(KERN_INFO "HiSax: %s %s config irq:%d data:0x%X ale:0x%X\n",
CardType[cs->typ], (cs->subtyp == 1) ? "PnP" : "PCI", CardType[cs->typ], (cs->subtyp == 1) ? "PnP" : "PCI",
......
...@@ -600,7 +600,7 @@ setup_sedlbauer_isapnp(struct IsdnCard *card, int *bytecnt) ...@@ -600,7 +600,7 @@ setup_sedlbauer_isapnp(struct IsdnCard *card, int *bytecnt)
} }
#endif /* __ISAPNP__ */ #endif /* __ISAPNP__ */
#ifdef CONFIG_PCI #ifdef CONFIG_PCI_LEGACY
static struct pci_dev *dev_sedl __devinitdata = NULL; static struct pci_dev *dev_sedl __devinitdata = NULL;
static int __devinit static int __devinit
...@@ -675,7 +675,7 @@ setup_sedlbauer_pci(struct IsdnCard *card) ...@@ -675,7 +675,7 @@ setup_sedlbauer_pci(struct IsdnCard *card)
return (1); return (1);
} }
#endif /* CONFIG_PCI */ #endif /* CONFIG_PCI_LEGACY */
int __devinit int __devinit
setup_sedlbauer(struct IsdnCard *card) setup_sedlbauer(struct IsdnCard *card)
......
...@@ -7365,10 +7365,6 @@ static int tg3_open(struct net_device *dev) ...@@ -7365,10 +7365,6 @@ static int tg3_open(struct net_device *dev)
} else if (pci_enable_msi(tp->pdev) == 0) { } else if (pci_enable_msi(tp->pdev) == 0) {
u32 msi_mode; u32 msi_mode;
/* Hardware bug - MSI won't work if INTX disabled. */
if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)
pci_intx(tp->pdev, 1);
msi_mode = tr32(MSGINT_MODE); msi_mode = tr32(MSGINT_MODE);
tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE); tw32(MSGINT_MODE, msi_mode | MSGINT_MODE_ENABLE);
tp->tg3_flags2 |= TG3_FLG2_USING_MSI; tp->tg3_flags2 |= TG3_FLG2_USING_MSI;
...@@ -12681,11 +12677,6 @@ static int tg3_resume(struct pci_dev *pdev) ...@@ -12681,11 +12677,6 @@ static int tg3_resume(struct pci_dev *pdev)
if (err) if (err)
return err; return err;
/* Hardware bug - MSI won't work if INTX disabled. */
if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) &&
(tp->tg3_flags2 & TG3_FLG2_USING_MSI))
pci_intx(tp->pdev, 1);
netif_device_attach(dev); netif_device_attach(dev);
tg3_full_lock(tp, 0); tg3_full_lock(tp, 0);
......
...@@ -21,6 +21,17 @@ config PCI_MSI ...@@ -21,6 +21,17 @@ config PCI_MSI
If you don't know what to do here, say N. If you don't know what to do here, say N.
config PCI_LEGACY
bool "Enable deprecated pci_find_* API"
depends on PCI
default y
help
Say Y here if you want to include support for the deprecated
pci_find_slot() and pci_find_device() APIs. Most drivers have
been converted over to using the proper hotplug APIs, so this
option serves to include/exclude only a few drivers that are
still using this API.
config PCI_DEBUG config PCI_DEBUG
bool "PCI Debugging" bool "PCI Debugging"
depends on PCI && DEBUG_KERNEL depends on PCI && DEBUG_KERNEL
......
...@@ -41,7 +41,7 @@ config HOTPLUG_PCI_FAKE ...@@ -41,7 +41,7 @@ config HOTPLUG_PCI_FAKE
config HOTPLUG_PCI_COMPAQ config HOTPLUG_PCI_COMPAQ
tristate "Compaq PCI Hotplug driver" tristate "Compaq PCI Hotplug driver"
depends on X86 && PCI_BIOS depends on X86 && PCI_BIOS && PCI_LEGACY
help help
Say Y here if you have a motherboard with a Compaq PCI Hotplug Say Y here if you have a motherboard with a Compaq PCI Hotplug
controller. controller.
...@@ -63,7 +63,7 @@ config HOTPLUG_PCI_COMPAQ_NVRAM ...@@ -63,7 +63,7 @@ config HOTPLUG_PCI_COMPAQ_NVRAM
config HOTPLUG_PCI_IBM config HOTPLUG_PCI_IBM
tristate "IBM PCI Hotplug driver" tristate "IBM PCI Hotplug driver"
depends on X86_IO_APIC && X86 && PCI_BIOS depends on X86_IO_APIC && X86 && PCI_BIOS && PCI_LEGACY
help help
Say Y here if you have a motherboard with a IBM PCI Hotplug Say Y here if you have a motherboard with a IBM PCI Hotplug
controller. controller.
...@@ -119,7 +119,7 @@ config HOTPLUG_PCI_CPCI_ZT5550 ...@@ -119,7 +119,7 @@ config HOTPLUG_PCI_CPCI_ZT5550
config HOTPLUG_PCI_CPCI_GENERIC config HOTPLUG_PCI_CPCI_GENERIC
tristate "Generic port I/O CompactPCI Hotplug driver" tristate "Generic port I/O CompactPCI Hotplug driver"
depends on HOTPLUG_PCI_CPCI && X86 depends on HOTPLUG_PCI_CPCI && X86 && PCI_LEGACY
help help
Say Y here if you have a CompactPCI system card that exposes the #ENUM Say Y here if you have a CompactPCI system card that exposes the #ENUM
hotswap signal as a bit in a system register that can be read through hotswap signal as a bit in a system register that can be read through
......
...@@ -1931,16 +1931,14 @@ void cpqhp_pushbutton_thread(unsigned long slot) ...@@ -1931,16 +1931,14 @@ void cpqhp_pushbutton_thread(unsigned long slot)
return ; return ;
} }
if (func != NULL && ctrl != NULL) { if (cpqhp_process_SS(ctrl, func) != 0) {
if (cpqhp_process_SS(ctrl, func) != 0) { amber_LED_on(ctrl, hp_slot);
amber_LED_on (ctrl, hp_slot); green_LED_on(ctrl, hp_slot);
green_LED_on (ctrl, hp_slot);
set_SOGO(ctrl);
/* Wait for SOBS to be unset */ set_SOGO(ctrl);
wait_for_ctrl_irq (ctrl);
} /* Wait for SOBS to be unset */
wait_for_ctrl_irq(ctrl);
} }
p_slot->state = STATIC_STATE; p_slot->state = STATIC_STATE;
......
...@@ -224,6 +224,12 @@ static struct msi_desc* alloc_msi_entry(void) ...@@ -224,6 +224,12 @@ static struct msi_desc* alloc_msi_entry(void)
return entry; return entry;
} }
static void pci_intx_for_msi(struct pci_dev *dev, int enable)
{
if (!(dev->dev_flags & PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG))
pci_intx(dev, enable);
}
#ifdef CONFIG_PM #ifdef CONFIG_PM
static void __pci_restore_msi_state(struct pci_dev *dev) static void __pci_restore_msi_state(struct pci_dev *dev)
{ {
...@@ -237,7 +243,7 @@ static void __pci_restore_msi_state(struct pci_dev *dev) ...@@ -237,7 +243,7 @@ static void __pci_restore_msi_state(struct pci_dev *dev)
entry = get_irq_msi(dev->irq); entry = get_irq_msi(dev->irq);
pos = entry->msi_attrib.pos; pos = entry->msi_attrib.pos;
pci_intx(dev, 0); /* disable intx */ pci_intx_for_msi(dev, 0);
msi_set_enable(dev, 0); msi_set_enable(dev, 0);
write_msi_msg(dev->irq, &entry->msg); write_msi_msg(dev->irq, &entry->msg);
if (entry->msi_attrib.maskbit) if (entry->msi_attrib.maskbit)
...@@ -260,7 +266,7 @@ static void __pci_restore_msix_state(struct pci_dev *dev) ...@@ -260,7 +266,7 @@ static void __pci_restore_msix_state(struct pci_dev *dev)
return; return;
/* route the table */ /* route the table */
pci_intx(dev, 0); /* disable intx */ pci_intx_for_msi(dev, 0);
msix_set_enable(dev, 0); msix_set_enable(dev, 0);
list_for_each_entry(entry, &dev->msi_list, list) { list_for_each_entry(entry, &dev->msi_list, list) {
...@@ -343,7 +349,7 @@ static int msi_capability_init(struct pci_dev *dev) ...@@ -343,7 +349,7 @@ static int msi_capability_init(struct pci_dev *dev)
} }
/* Set MSI enabled bits */ /* Set MSI enabled bits */
pci_intx(dev, 0); /* disable intx */ pci_intx_for_msi(dev, 0);
msi_set_enable(dev, 1); msi_set_enable(dev, 1);
dev->msi_enabled = 1; dev->msi_enabled = 1;
...@@ -433,7 +439,7 @@ static int msix_capability_init(struct pci_dev *dev, ...@@ -433,7 +439,7 @@ static int msix_capability_init(struct pci_dev *dev,
i++; i++;
} }
/* Set MSI-X enabled bits */ /* Set MSI-X enabled bits */
pci_intx(dev, 0); /* disable intx */ pci_intx_for_msi(dev, 0);
msix_set_enable(dev, 1); msix_set_enable(dev, 1);
dev->msix_enabled = 1; dev->msix_enabled = 1;
...@@ -528,7 +534,7 @@ void pci_disable_msi(struct pci_dev* dev) ...@@ -528,7 +534,7 @@ void pci_disable_msi(struct pci_dev* dev)
return; return;
msi_set_enable(dev, 0); msi_set_enable(dev, 0);
pci_intx(dev, 1); /* enable intx */ pci_intx_for_msi(dev, 1);
dev->msi_enabled = 0; dev->msi_enabled = 0;
BUG_ON(list_empty(&dev->msi_list)); BUG_ON(list_empty(&dev->msi_list));
...@@ -640,7 +646,7 @@ void pci_disable_msix(struct pci_dev* dev) ...@@ -640,7 +646,7 @@ void pci_disable_msix(struct pci_dev* dev)
return; return;
msix_set_enable(dev, 0); msix_set_enable(dev, 0);
pci_intx(dev, 1); /* enable intx */ pci_intx_for_msi(dev, 1);
dev->msix_enabled = 0; dev->msix_enabled = 0;
msix_free_all_irqs(dev); msix_free_all_irqs(dev);
......
...@@ -143,8 +143,8 @@ const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, ...@@ -143,8 +143,8 @@ const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
* system is in its list of supported devices. Returns the matching * system is in its list of supported devices. Returns the matching
* pci_device_id structure or %NULL if there is no match. * pci_device_id structure or %NULL if there is no match.
*/ */
const struct pci_device_id *pci_match_device(struct pci_driver *drv, static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
struct pci_dev *dev) struct pci_dev *dev)
{ {
struct pci_dynid *dynid; struct pci_dynid *dynid;
...@@ -559,7 +559,6 @@ static int __init pci_driver_init(void) ...@@ -559,7 +559,6 @@ static int __init pci_driver_init(void)
postcore_initcall(pci_driver_init); postcore_initcall(pci_driver_init);
EXPORT_SYMBOL(pci_match_id); EXPORT_SYMBOL(pci_match_id);
EXPORT_SYMBOL(pci_match_device);
EXPORT_SYMBOL(__pci_register_driver); EXPORT_SYMBOL(__pci_register_driver);
EXPORT_SYMBOL(pci_unregister_driver); EXPORT_SYMBOL(pci_unregister_driver);
EXPORT_SYMBOL(pci_dev_driver); EXPORT_SYMBOL(pci_dev_driver);
......
...@@ -1621,12 +1621,8 @@ static void __init quirk_disable_all_msi(struct pci_dev *dev) ...@@ -1621,12 +1621,8 @@ static void __init quirk_disable_all_msi(struct pci_dev *dev)
printk(KERN_WARNING "PCI: MSI quirk detected. MSI deactivated.\n"); printk(KERN_WARNING "PCI: MSI quirk detected. MSI deactivated.\n");
} }
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000_PCIX, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RD580, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RX790, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS690, quirk_disable_all_msi);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi);
/* Disable MSI on chipsets that are known to not support it */ /* Disable MSI on chipsets that are known to not support it */
...@@ -1678,6 +1674,9 @@ static void __devinit quirk_msi_ht_cap(struct pci_dev *dev) ...@@ -1678,6 +1674,9 @@ static void __devinit quirk_msi_ht_cap(struct pci_dev *dev)
} }
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE, DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE,
quirk_msi_ht_cap); quirk_msi_ht_cap);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS,
PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB,
quirk_msi_ht_cap);
/* The nVidia CK804 chipset may have 2 HT MSI mappings. /* The nVidia CK804 chipset may have 2 HT MSI mappings.
* MSI are supported if the MSI capability set in any of these mappings. * MSI are supported if the MSI capability set in any of these mappings.
...@@ -1705,4 +1704,48 @@ static void __devinit quirk_nvidia_ck804_msi_ht_cap(struct pci_dev *dev) ...@@ -1705,4 +1704,48 @@ static void __devinit quirk_nvidia_ck804_msi_ht_cap(struct pci_dev *dev)
} }
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE, DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
quirk_nvidia_ck804_msi_ht_cap); quirk_nvidia_ck804_msi_ht_cap);
static void __devinit quirk_msi_intx_disable_bug(struct pci_dev *dev)
{
dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
}
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
PCI_DEVICE_ID_TIGON3_5780,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
PCI_DEVICE_ID_TIGON3_5780S,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
PCI_DEVICE_ID_TIGON3_5714,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
PCI_DEVICE_ID_TIGON3_5714S,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
PCI_DEVICE_ID_TIGON3_5715,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
PCI_DEVICE_ID_TIGON3_5715S,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4390,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4391,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4392,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4393,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4394,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4395,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4373,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4374,
quirk_msi_intx_disable_bug);
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x4375,
quirk_msi_intx_disable_bug);
#endif /* CONFIG_PCI_MSI */ #endif /* CONFIG_PCI_MSI */
...@@ -113,6 +113,8 @@ pci_find_next_bus(const struct pci_bus *from) ...@@ -113,6 +113,8 @@ pci_find_next_bus(const struct pci_bus *from)
return b; return b;
} }
#ifdef CONFIG_PCI_LEGACY
/** /**
* pci_find_slot - locate PCI device from a given PCI slot * pci_find_slot - locate PCI device from a given PCI slot
* @bus: number of PCI bus on which desired PCI device resides * @bus: number of PCI bus on which desired PCI device resides
...@@ -137,6 +139,8 @@ pci_find_slot(unsigned int bus, unsigned int devfn) ...@@ -137,6 +139,8 @@ pci_find_slot(unsigned int bus, unsigned int devfn)
return NULL; return NULL;
} }
#endif /* CONFIG_PCI_LEGACY */
/** /**
* pci_get_slot - locate PCI device for a given PCI slot * pci_get_slot - locate PCI device for a given PCI slot
* @bus: PCI bus on which desired PCI device resides * @bus: PCI bus on which desired PCI device resides
...@@ -200,6 +204,7 @@ struct pci_dev * pci_get_bus_and_slot(unsigned int bus, unsigned int devfn) ...@@ -200,6 +204,7 @@ struct pci_dev * pci_get_bus_and_slot(unsigned int bus, unsigned int devfn)
return NULL; return NULL;
} }
#ifdef CONFIG_PCI_LEGACY
/** /**
* pci_find_subsys - begin or continue searching for a PCI device by vendor/subvendor/device/subdevice id * pci_find_subsys - begin or continue searching for a PCI device by vendor/subvendor/device/subdevice id
* @vendor: PCI vendor id to match, or %PCI_ANY_ID to match all vendor ids * @vendor: PCI vendor id to match, or %PCI_ANY_ID to match all vendor ids
...@@ -278,6 +283,7 @@ pci_find_device(unsigned int vendor, unsigned int device, const struct pci_dev * ...@@ -278,6 +283,7 @@ pci_find_device(unsigned int vendor, unsigned int device, const struct pci_dev *
{ {
return pci_find_subsys(vendor, device, PCI_ANY_ID, PCI_ANY_ID, from); return pci_find_subsys(vendor, device, PCI_ANY_ID, PCI_ANY_ID, from);
} }
#endif /* CONFIG_PCI_LEGACY */
/** /**
* pci_get_subsys - begin or continue searching for a PCI device by vendor/subvendor/device/subdevice id * pci_get_subsys - begin or continue searching for a PCI device by vendor/subvendor/device/subdevice id
...@@ -468,8 +474,11 @@ int pci_dev_present(const struct pci_device_id *ids) ...@@ -468,8 +474,11 @@ int pci_dev_present(const struct pci_device_id *ids)
EXPORT_SYMBOL(pci_dev_present); EXPORT_SYMBOL(pci_dev_present);
EXPORT_SYMBOL(pci_find_present); EXPORT_SYMBOL(pci_find_present);
#ifdef CONFIG_PCI_LEGACY
EXPORT_SYMBOL(pci_find_device); EXPORT_SYMBOL(pci_find_device);
EXPORT_SYMBOL(pci_find_slot); EXPORT_SYMBOL(pci_find_slot);
#endif /* CONFIG_PCI_LEGACY */
/* For boot time work */ /* For boot time work */
EXPORT_SYMBOL(pci_find_bus); EXPORT_SYMBOL(pci_find_bus);
EXPORT_SYMBOL(pci_find_next_bus); EXPORT_SYMBOL(pci_find_next_bus);
......
...@@ -725,7 +725,7 @@ config SCSI_FD_MCS ...@@ -725,7 +725,7 @@ config SCSI_FD_MCS
config SCSI_GDTH config SCSI_GDTH
tristate "Intel/ICP (former GDT SCSI Disk Array) RAID Controller support" tristate "Intel/ICP (former GDT SCSI Disk Array) RAID Controller support"
depends on (ISA || EISA || PCI) && SCSI && ISA_DMA_API depends on (ISA || EISA || PCI) && SCSI && ISA_DMA_API && PCI_LEGACY
---help--- ---help---
Formerly called GDT SCSI Disk Array Controller Support. Formerly called GDT SCSI Disk Array Controller Support.
......
...@@ -1986,6 +1986,7 @@ static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state) ...@@ -1986,6 +1986,7 @@ static int pciserial_suspend_one(struct pci_dev *dev, pm_message_t state)
static int pciserial_resume_one(struct pci_dev *dev) static int pciserial_resume_one(struct pci_dev *dev)
{ {
int err;
struct serial_private *priv = pci_get_drvdata(dev); struct serial_private *priv = pci_get_drvdata(dev);
pci_set_power_state(dev, PCI_D0); pci_set_power_state(dev, PCI_D0);
...@@ -1995,7 +1996,9 @@ static int pciserial_resume_one(struct pci_dev *dev) ...@@ -1995,7 +1996,9 @@ static int pciserial_resume_one(struct pci_dev *dev)
/* /*
* The device may have been disabled. Re-enable it. * The device may have been disabled. Re-enable it.
*/ */
pci_enable_device(dev); err = pci_enable_device(dev);
if (err)
return err;
pciserial_resume_ports(priv); pciserial_resume_ports(priv);
} }
......
...@@ -109,6 +109,14 @@ enum pcie_reset_state { ...@@ -109,6 +109,14 @@ enum pcie_reset_state {
pcie_hot_reset = (__force pcie_reset_state_t) 3 pcie_hot_reset = (__force pcie_reset_state_t) 3
}; };
typedef unsigned short __bitwise pci_dev_flags_t;
enum pci_dev_flags {
/* INTX_DISABLE in PCI_COMMAND register disables MSI
* generation too.
*/
PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = (__force pci_dev_flags_t) 1,
};
typedef unsigned short __bitwise pci_bus_flags_t; typedef unsigned short __bitwise pci_bus_flags_t;
enum pci_bus_flags { 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,
...@@ -185,6 +193,7 @@ struct pci_dev { ...@@ -185,6 +193,7 @@ struct pci_dev {
unsigned int msix_enabled:1; unsigned int msix_enabled:1;
unsigned int is_managed:1; unsigned int is_managed:1;
unsigned int is_pcie:1; unsigned int is_pcie:1;
pci_dev_flags_t dev_flags;
atomic_t enable_cnt; /* pci_enable_device has been called */ atomic_t enable_cnt; /* pci_enable_device has been called */
u32 saved_config_space[16]; /* config space saved at suspend time */ u32 saved_config_space[16]; /* config space saved at suspend time */
...@@ -479,8 +488,11 @@ extern void pci_sort_breadthfirst(void); ...@@ -479,8 +488,11 @@ extern void pci_sort_breadthfirst(void);
/* Generic PCI functions exported to card drivers */ /* Generic PCI functions exported to card drivers */
#ifdef CONFIG_PCI_LEGACY
struct pci_dev __deprecated *pci_find_device (unsigned int vendor, unsigned int device, const struct pci_dev *from); struct pci_dev __deprecated *pci_find_device (unsigned int vendor, unsigned int device, const struct pci_dev *from);
struct pci_dev __deprecated *pci_find_slot (unsigned int bus, unsigned int devfn); struct pci_dev __deprecated *pci_find_slot (unsigned int bus, unsigned int devfn);
#endif /* CONFIG_PCI_LEGACY */
int pci_find_capability (struct pci_dev *dev, int cap); 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_next_capability (struct pci_dev *dev, u8 pos, int cap);
int pci_find_ext_capability (struct pci_dev *dev, int cap); int pci_find_ext_capability (struct pci_dev *dev, int cap);
...@@ -622,7 +634,6 @@ static inline int __must_check pci_register_driver(struct pci_driver *driver) ...@@ -622,7 +634,6 @@ static inline int __must_check pci_register_driver(struct pci_driver *driver)
void pci_unregister_driver(struct pci_driver *); void pci_unregister_driver(struct pci_driver *);
void pci_remove_behind_bridge(struct pci_dev *); void pci_remove_behind_bridge(struct pci_dev *);
struct pci_driver *pci_dev_driver(const struct pci_dev *); struct pci_driver *pci_dev_driver(const struct pci_dev *);
const struct pci_device_id *pci_match_device(struct pci_driver *drv, struct pci_dev *dev);
const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, struct pci_dev *dev); const struct pci_device_id *pci_match_id(const struct pci_device_id *ids, struct pci_dev *dev);
int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass); int pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass);
...@@ -751,7 +762,6 @@ static inline void pci_unregister_driver(struct pci_driver *drv) { } ...@@ -751,7 +762,6 @@ static inline void pci_unregister_driver(struct pci_driver *drv) { }
static inline int pci_find_capability (struct pci_dev *dev, int cap) {return 0; } static inline int pci_find_capability (struct pci_dev *dev, int cap) {return 0; }
static inline int pci_find_next_capability (struct pci_dev *dev, u8 post, int cap) { return 0; } static inline int pci_find_next_capability (struct pci_dev *dev, u8 post, int cap) { return 0; }
static inline int pci_find_ext_capability (struct pci_dev *dev, int cap) {return 0; } static inline int pci_find_ext_capability (struct pci_dev *dev, int cap) {return 0; }
static inline const struct pci_device_id *pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev) { return NULL; }
/* Power management related routines */ /* Power management related routines */
static inline int pci_save_state(struct pci_dev *dev) { return 0; } static inline int pci_save_state(struct pci_dev *dev) { return 0; }
......
...@@ -360,9 +360,6 @@ ...@@ -360,9 +360,6 @@
#define PCI_DEVICE_ID_ATI_RS400_166 0x5a32 #define PCI_DEVICE_ID_ATI_RS400_166 0x5a32
#define PCI_DEVICE_ID_ATI_RS400_200 0x5a33 #define PCI_DEVICE_ID_ATI_RS400_200 0x5a33
#define PCI_DEVICE_ID_ATI_RS480 0x5950 #define PCI_DEVICE_ID_ATI_RS480 0x5950
#define PCI_DEVICE_ID_ATI_RD580 0x5952
#define PCI_DEVICE_ID_ATI_RX790 0x5957
#define PCI_DEVICE_ID_ATI_RS690 0x7910
/* ATI IXP Chipset */ /* ATI IXP Chipset */
#define PCI_DEVICE_ID_ATI_IXP200_IDE 0x4349 #define PCI_DEVICE_ID_ATI_IXP200_IDE 0x4349
#define PCI_DEVICE_ID_ATI_IXP200_SMBUS 0x4353 #define PCI_DEVICE_ID_ATI_IXP200_SMBUS 0x4353
...@@ -1436,8 +1433,8 @@ ...@@ -1436,8 +1433,8 @@
#define PCI_DEVICE_ID_SERVERWORKS_HE 0x0008 #define PCI_DEVICE_ID_SERVERWORKS_HE 0x0008
#define PCI_DEVICE_ID_SERVERWORKS_LE 0x0009 #define PCI_DEVICE_ID_SERVERWORKS_LE 0x0009
#define PCI_DEVICE_ID_SERVERWORKS_GCNB_LE 0x0017 #define PCI_DEVICE_ID_SERVERWORKS_GCNB_LE 0x0017
#define PCI_DEVICE_ID_SERVERWORKS_HT1000_PXB 0x0036
#define PCI_DEVICE_ID_SERVERWORKS_EPB 0x0103 #define PCI_DEVICE_ID_SERVERWORKS_EPB 0x0103
#define PCI_DEVICE_ID_SERVERWORKS_HT1000_PCIX 0x0104
#define PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE 0x0132 #define PCI_DEVICE_ID_SERVERWORKS_HT2000_PCIE 0x0132
#define PCI_DEVICE_ID_SERVERWORKS_OSB4 0x0200 #define PCI_DEVICE_ID_SERVERWORKS_OSB4 0x0200
#define PCI_DEVICE_ID_SERVERWORKS_CSB5 0x0201 #define PCI_DEVICE_ID_SERVERWORKS_CSB5 0x0201
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment