x86: Add pcibios_fixup_irqs to x86_init
authorThomas Gleixner <tglx@linutronix.de>
Sat, 29 Aug 2009 15:51:26 +0000 (17:51 +0200)
committerH. Peter Anvin <hpa@zytor.com>
Sat, 20 Feb 2010 00:12:39 +0000 (16:12 -0800)
Platforms like Moorestown want to override the pcibios_fixup_irqs
default function. Add it to x86_init.pci.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
LKML-Reference: <43F901BD926A4E43B106BF17856F07559FB80D00@orsmsx508.amr.corp.intel.com>
Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Jacob Pan <jacob.jun.pan@intel.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
arch/x86/include/asm/pci_x86.h
arch/x86/include/asm/x86_init.h
arch/x86/kernel/x86_init.c
arch/x86/pci/irq.c

index 46511c5be4561d16a4bbb48f931656aab8ca6dbb..6e69edfbf0740c4adf6b2a2e8c50226bce902d94 100644 (file)
@@ -113,6 +113,7 @@ extern int __init pci_acpi_init(void);
 extern void __init pcibios_irq_init(void);
 extern int __init pcibios_init(void);
 extern int pci_legacy_init(void);
+extern void pcibios_fixup_irqs(void);
 
 /* pci-mmconfig.c */
 
@@ -188,7 +189,9 @@ static inline void mmio_config_writel(void __iomem *pos, u32 val)
 #  define x86_default_pci_init         pci_legacy_init
 # endif
 # define x86_default_pci_init_irq      pcibios_irq_init
+# define x86_default_pci_fixup_irqs    pcibios_fixup_irqs
 #else
 # define x86_default_pci_init          NULL
 # define x86_default_pci_init_irq      NULL
+# define x86_default_pci_fixup_irqs    NULL
 #endif
index 34f61cd56f3ba558dcc0ca6633b9fab5fe6bedb6..8ef56f21f9f007ad41cd5a3865819fa23e69f87e 100644 (file)
@@ -102,10 +102,12 @@ struct x86_init_iommu {
   * struct x86_init_pci - platform specific pci init functions
  * @init:                      platform specific pci init
  * @init_irq:                  platform specific pci irq init
+ * @fixup_irqs:                        platform specific pci irq fixup
  */
 struct x86_init_pci {
        int (*init)(void);
        void (*init_irq)(void);
+       void (*fixup_irqs)(void);
 };
 
 /**
index 203f26fb7f33a8ac56bc23d1d41ce3d5d2e88a60..1817cd7a03fa49b1e3af618c08f217826dd5a107 100644 (file)
@@ -4,6 +4,7 @@
  *  For licencing details see kernel-base/COPYING
  */
 #include <linux/init.h>
+#include <linux/ioport.h>
 
 #include <asm/bios_ebda.h>
 #include <asm/paravirt.h>
@@ -75,6 +76,7 @@ struct x86_init_ops x86_init __initdata = {
        .pci = {
                .init                   = x86_default_pci_init,
                .init_irq               = x86_default_pci_init_irq,
+               .fixup_irqs             = x86_default_pci_fixup_irqs,
        },
 };
 
index 0f40ff20dd67f8526b39257f6ac0fecd214dccf2..a60deb6e6696b6bbcbda159977c3a19b3aede20e 100644 (file)
@@ -1016,7 +1016,7 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
        return 1;
 }
 
-static void __init pcibios_fixup_irqs(void)
+void __init pcibios_fixup_irqs(void)
 {
        struct pci_dev *dev = NULL;
        u8 pin;
@@ -1142,7 +1142,7 @@ void __init pcibios_irq_init(void)
                        pirq_table = NULL;
        }
 
-       pcibios_fixup_irqs();
+       x86_init.pci.fixup_irqs();
 
        if (io_apic_assign_pci_irqs && pci_routeirq) {
                struct pci_dev *dev = NULL;