x86: Add pcibios_fixup_irqs to x86_init

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>
This commit is contained in:
Thomas Gleixner 2009-08-29 17:51:26 +02:00 committed by H. Peter Anvin
parent ab3b37937e
commit 9325a28ce2
4 changed files with 9 additions and 2 deletions

View File

@ -113,6 +113,7 @@ extern int __init pci_acpi_init(void);
extern void __init pcibios_irq_init(void); extern void __init pcibios_irq_init(void);
extern int __init pcibios_init(void); extern int __init pcibios_init(void);
extern int pci_legacy_init(void); extern int pci_legacy_init(void);
extern void pcibios_fixup_irqs(void);
/* pci-mmconfig.c */ /* 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 # define x86_default_pci_init pci_legacy_init
# endif # endif
# define x86_default_pci_init_irq pcibios_irq_init # define x86_default_pci_init_irq pcibios_irq_init
# define x86_default_pci_fixup_irqs pcibios_fixup_irqs
#else #else
# define x86_default_pci_init NULL # define x86_default_pci_init NULL
# define x86_default_pci_init_irq NULL # define x86_default_pci_init_irq NULL
# define x86_default_pci_fixup_irqs NULL
#endif #endif

View File

@ -102,10 +102,12 @@ struct x86_init_iommu {
* struct x86_init_pci - platform specific pci init functions * struct x86_init_pci - platform specific pci init functions
* @init: platform specific pci init * @init: platform specific pci init
* @init_irq: platform specific pci irq init * @init_irq: platform specific pci irq init
* @fixup_irqs: platform specific pci irq fixup
*/ */
struct x86_init_pci { struct x86_init_pci {
int (*init)(void); int (*init)(void);
void (*init_irq)(void); void (*init_irq)(void);
void (*fixup_irqs)(void);
}; };
/** /**

View File

@ -4,6 +4,7 @@
* For licencing details see kernel-base/COPYING * For licencing details see kernel-base/COPYING
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/ioport.h>
#include <asm/bios_ebda.h> #include <asm/bios_ebda.h>
#include <asm/paravirt.h> #include <asm/paravirt.h>
@ -75,6 +76,7 @@ struct x86_init_ops x86_init __initdata = {
.pci = { .pci = {
.init = x86_default_pci_init, .init = x86_default_pci_init,
.init_irq = x86_default_pci_init_irq, .init_irq = x86_default_pci_init_irq,
.fixup_irqs = x86_default_pci_fixup_irqs,
}, },
}; };

View File

@ -1016,7 +1016,7 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
return 1; return 1;
} }
static void __init pcibios_fixup_irqs(void) void __init pcibios_fixup_irqs(void)
{ {
struct pci_dev *dev = NULL; struct pci_dev *dev = NULL;
u8 pin; u8 pin;
@ -1142,7 +1142,7 @@ void __init pcibios_irq_init(void)
pirq_table = NULL; pirq_table = NULL;
} }
pcibios_fixup_irqs(); x86_init.pci.fixup_irqs();
if (io_apic_assign_pci_irqs && pci_routeirq) { if (io_apic_assign_pci_irqs && pci_routeirq) {
struct pci_dev *dev = NULL; struct pci_dev *dev = NULL;