aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2009-08-29 11:51:26 -0400
committerH. Peter Anvin <hpa@zytor.com>2010-02-19 19:12:39 -0500
commit9325a28ce2fa7c597e5ed41455a06c30b82b5710 (patch)
tree8221302610bd01c53932284ac48fe78be88633e8 /arch
parentab3b37937e8f4fb38dc9780b7bc3fd3c5195cca3 (diff)
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>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/include/asm/pci_x86.h3
-rw-r--r--arch/x86/include/asm/x86_init.h2
-rw-r--r--arch/x86/kernel/x86_init.c2
-rw-r--r--arch/x86/pci/irq.c4
4 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h
index 46511c5be456..6e69edfbf074 100644
--- a/arch/x86/include/asm/pci_x86.h
+++ b/arch/x86/include/asm/pci_x86.h
@@ -113,6 +113,7 @@ extern int __init pci_acpi_init(void);
113extern void __init pcibios_irq_init(void); 113extern void __init pcibios_irq_init(void);
114extern int __init pcibios_init(void); 114extern int __init pcibios_init(void);
115extern int pci_legacy_init(void); 115extern int pci_legacy_init(void);
116extern void pcibios_fixup_irqs(void);
116 117
117/* pci-mmconfig.c */ 118/* pci-mmconfig.c */
118 119
@@ -188,7 +189,9 @@ static inline void mmio_config_writel(void __iomem *pos, u32 val)
188# define x86_default_pci_init pci_legacy_init 189# define x86_default_pci_init pci_legacy_init
189# endif 190# endif
190# define x86_default_pci_init_irq pcibios_irq_init 191# define x86_default_pci_init_irq pcibios_irq_init
192# define x86_default_pci_fixup_irqs pcibios_fixup_irqs
191#else 193#else
192# define x86_default_pci_init NULL 194# define x86_default_pci_init NULL
193# define x86_default_pci_init_irq NULL 195# define x86_default_pci_init_irq NULL
196# define x86_default_pci_fixup_irqs NULL
194#endif 197#endif
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index 34f61cd56f3b..8ef56f21f9f0 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -102,10 +102,12 @@ struct x86_init_iommu {
102 * struct x86_init_pci - platform specific pci init functions 102 * struct x86_init_pci - platform specific pci init functions
103 * @init: platform specific pci init 103 * @init: platform specific pci init
104 * @init_irq: platform specific pci irq init 104 * @init_irq: platform specific pci irq init
105 * @fixup_irqs: platform specific pci irq fixup
105 */ 106 */
106struct x86_init_pci { 107struct x86_init_pci {
107 int (*init)(void); 108 int (*init)(void);
108 void (*init_irq)(void); 109 void (*init_irq)(void);
110 void (*fixup_irqs)(void);
109}; 111};
110 112
111/** 113/**
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
index 203f26fb7f33..1817cd7a03fa 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
@@ -4,6 +4,7 @@
4 * For licencing details see kernel-base/COPYING 4 * For licencing details see kernel-base/COPYING
5 */ 5 */
6#include <linux/init.h> 6#include <linux/init.h>
7#include <linux/ioport.h>
7 8
8#include <asm/bios_ebda.h> 9#include <asm/bios_ebda.h>
9#include <asm/paravirt.h> 10#include <asm/paravirt.h>
@@ -75,6 +76,7 @@ struct x86_init_ops x86_init __initdata = {
75 .pci = { 76 .pci = {
76 .init = x86_default_pci_init, 77 .init = x86_default_pci_init,
77 .init_irq = x86_default_pci_init_irq, 78 .init_irq = x86_default_pci_init_irq,
79 .fixup_irqs = x86_default_pci_fixup_irqs,
78 }, 80 },
79}; 81};
80 82
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c
index 0f40ff20dd67..a60deb6e6696 100644
--- a/arch/x86/pci/irq.c
+++ b/arch/x86/pci/irq.c
@@ -1016,7 +1016,7 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
1016 return 1; 1016 return 1;
1017} 1017}
1018 1018
1019static void __init pcibios_fixup_irqs(void) 1019void __init pcibios_fixup_irqs(void)
1020{ 1020{
1021 struct pci_dev *dev = NULL; 1021 struct pci_dev *dev = NULL;
1022 u8 pin; 1022 u8 pin;
@@ -1142,7 +1142,7 @@ void __init pcibios_irq_init(void)
1142 pirq_table = NULL; 1142 pirq_table = NULL;
1143 } 1143 }
1144 1144
1145 pcibios_fixup_irqs(); 1145 x86_init.pci.fixup_irqs();
1146 1146
1147 if (io_apic_assign_pci_irqs && pci_routeirq) { 1147 if (io_apic_assign_pci_irqs && pci_routeirq) {
1148 struct pci_dev *dev = NULL; 1148 struct pci_dev *dev = NULL;