diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2009-08-29 11:51:26 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2010-02-19 19:12:39 -0500 |
commit | 9325a28ce2fa7c597e5ed41455a06c30b82b5710 (patch) | |
tree | 8221302610bd01c53932284ac48fe78be88633e8 | |
parent | ab3b37937e8f4fb38dc9780b7bc3fd3c5195cca3 (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>
-rw-r--r-- | arch/x86/include/asm/pci_x86.h | 3 | ||||
-rw-r--r-- | arch/x86/include/asm/x86_init.h | 2 | ||||
-rw-r--r-- | arch/x86/kernel/x86_init.c | 2 | ||||
-rw-r--r-- | arch/x86/pci/irq.c | 4 |
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); | |||
113 | extern void __init pcibios_irq_init(void); | 113 | extern void __init pcibios_irq_init(void); |
114 | extern int __init pcibios_init(void); | 114 | extern int __init pcibios_init(void); |
115 | extern int pci_legacy_init(void); | 115 | extern int pci_legacy_init(void); |
116 | extern 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 | */ |
106 | struct x86_init_pci { | 107 | struct 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 | ||
1019 | static void __init pcibios_fixup_irqs(void) | 1019 | void __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; |