diff options
Diffstat (limited to 'arch/x86/pci/common.c')
-rw-r--r-- | arch/x86/pci/common.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index b67732bbb85a..82d22fc601ae 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c | |||
@@ -14,8 +14,7 @@ | |||
14 | #include <asm/segment.h> | 14 | #include <asm/segment.h> |
15 | #include <asm/io.h> | 15 | #include <asm/io.h> |
16 | #include <asm/smp.h> | 16 | #include <asm/smp.h> |
17 | 17 | #include <asm/pci_x86.h> | |
18 | #include "pci.h" | ||
19 | 18 | ||
20 | unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 | | 19 | unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 | |
21 | PCI_PROBE_MMCONF; | 20 | PCI_PROBE_MMCONF; |
@@ -23,6 +22,12 @@ unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 | | |||
23 | unsigned int pci_early_dump_regs; | 22 | unsigned int pci_early_dump_regs; |
24 | static int pci_bf_sort; | 23 | static int pci_bf_sort; |
25 | int pci_routeirq; | 24 | int pci_routeirq; |
25 | int noioapicquirk; | ||
26 | #ifdef CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS | ||
27 | int noioapicreroute = 0; | ||
28 | #else | ||
29 | int noioapicreroute = 1; | ||
30 | #endif | ||
26 | int pcibios_last_bus = -1; | 31 | int pcibios_last_bus = -1; |
27 | unsigned long pirq_table_addr; | 32 | unsigned long pirq_table_addr; |
28 | struct pci_bus *pci_root_bus; | 33 | struct pci_bus *pci_root_bus; |
@@ -519,6 +524,17 @@ char * __devinit pcibios_setup(char *str) | |||
519 | } else if (!strcmp(str, "skip_isa_align")) { | 524 | } else if (!strcmp(str, "skip_isa_align")) { |
520 | pci_probe |= PCI_CAN_SKIP_ISA_ALIGN; | 525 | pci_probe |= PCI_CAN_SKIP_ISA_ALIGN; |
521 | return NULL; | 526 | return NULL; |
527 | } else if (!strcmp(str, "noioapicquirk")) { | ||
528 | noioapicquirk = 1; | ||
529 | return NULL; | ||
530 | } else if (!strcmp(str, "ioapicreroute")) { | ||
531 | if (noioapicreroute != -1) | ||
532 | noioapicreroute = 0; | ||
533 | return NULL; | ||
534 | } else if (!strcmp(str, "noioapicreroute")) { | ||
535 | if (noioapicreroute != -1) | ||
536 | noioapicreroute = 1; | ||
537 | return NULL; | ||
522 | } | 538 | } |
523 | return str; | 539 | return str; |
524 | } | 540 | } |
@@ -535,17 +551,25 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) | |||
535 | if ((err = pci_enable_resources(dev, mask)) < 0) | 551 | if ((err = pci_enable_resources(dev, mask)) < 0) |
536 | return err; | 552 | return err; |
537 | 553 | ||
538 | if (!dev->msi_enabled) | 554 | if (!pci_dev_msi_enabled(dev)) |
539 | return pcibios_enable_irq(dev); | 555 | return pcibios_enable_irq(dev); |
540 | return 0; | 556 | return 0; |
541 | } | 557 | } |
542 | 558 | ||
543 | void pcibios_disable_device (struct pci_dev *dev) | 559 | void pcibios_disable_device (struct pci_dev *dev) |
544 | { | 560 | { |
545 | if (!dev->msi_enabled && pcibios_disable_irq) | 561 | if (!pci_dev_msi_enabled(dev) && pcibios_disable_irq) |
546 | pcibios_disable_irq(dev); | 562 | pcibios_disable_irq(dev); |
547 | } | 563 | } |
548 | 564 | ||
565 | int pci_ext_cfg_avail(struct pci_dev *dev) | ||
566 | { | ||
567 | if (raw_pci_ext_ops) | ||
568 | return 1; | ||
569 | else | ||
570 | return 0; | ||
571 | } | ||
572 | |||
549 | struct pci_bus * __devinit pci_scan_bus_on_node(int busno, struct pci_ops *ops, int node) | 573 | struct pci_bus * __devinit pci_scan_bus_on_node(int busno, struct pci_ops *ops, int node) |
550 | { | 574 | { |
551 | struct pci_bus *bus = NULL; | 575 | struct pci_bus *bus = NULL; |