diff options
author | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2010-10-06 16:12:28 -0400 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2010-10-18 10:49:34 -0400 |
commit | 294ee6f89cfd629e276f632a6003a0fad7785dce (patch) | |
tree | d72a0ebf5fe371f22a9e8b7b24880d4758255121 /arch/x86/kernel | |
parent | 1525bf0d8f059a38c6e79353583854e1981b2e67 (diff) |
x86: Introduce x86_msi_ops
Introduce an x86 specific indirect mechanism to setup MSIs.
The MSI setup functions become function pointers in an x86_msi_ops
struct, that defaults to the implementation in io_apic.c and msi.c.
[v2: Use HAVE_DEFAULT_* knobs]
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: x86@kernel.org
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 4 | ||||
-rw-r--r-- | arch/x86/kernel/x86_init.c | 7 |
2 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 44bb914a42b2..0885a4120737 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -3330,7 +3330,7 @@ static int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int irq) | |||
3330 | return 0; | 3330 | return 0; |
3331 | } | 3331 | } |
3332 | 3332 | ||
3333 | int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) | 3333 | int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) |
3334 | { | 3334 | { |
3335 | int node, ret, sub_handle, index = 0; | 3335 | int node, ret, sub_handle, index = 0; |
3336 | unsigned int irq, irq_want; | 3336 | unsigned int irq, irq_want; |
@@ -3388,7 +3388,7 @@ error: | |||
3388 | return ret; | 3388 | return ret; |
3389 | } | 3389 | } |
3390 | 3390 | ||
3391 | void arch_teardown_msi_irq(unsigned int irq) | 3391 | void native_teardown_msi_irq(unsigned int irq) |
3392 | { | 3392 | { |
3393 | destroy_irq(irq); | 3393 | destroy_irq(irq); |
3394 | } | 3394 | } |
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c index cd6da6bf3eca..ceb2911aa439 100644 --- a/arch/x86/kernel/x86_init.c +++ b/arch/x86/kernel/x86_init.c | |||
@@ -6,10 +6,12 @@ | |||
6 | #include <linux/init.h> | 6 | #include <linux/init.h> |
7 | #include <linux/ioport.h> | 7 | #include <linux/ioport.h> |
8 | #include <linux/module.h> | 8 | #include <linux/module.h> |
9 | #include <linux/pci.h> | ||
9 | 10 | ||
10 | #include <asm/bios_ebda.h> | 11 | #include <asm/bios_ebda.h> |
11 | #include <asm/paravirt.h> | 12 | #include <asm/paravirt.h> |
12 | #include <asm/pci_x86.h> | 13 | #include <asm/pci_x86.h> |
14 | #include <asm/pci.h> | ||
13 | #include <asm/mpspec.h> | 15 | #include <asm/mpspec.h> |
14 | #include <asm/setup.h> | 16 | #include <asm/setup.h> |
15 | #include <asm/apic.h> | 17 | #include <asm/apic.h> |
@@ -99,3 +101,8 @@ struct x86_platform_ops x86_platform = { | |||
99 | }; | 101 | }; |
100 | 102 | ||
101 | EXPORT_SYMBOL_GPL(x86_platform); | 103 | EXPORT_SYMBOL_GPL(x86_platform); |
104 | struct x86_msi_ops x86_msi = { | ||
105 | .setup_msi_irqs = native_setup_msi_irqs, | ||
106 | .teardown_msi_irq = native_teardown_msi_irq, | ||
107 | .teardown_msi_irqs = default_teardown_msi_irqs, | ||
108 | }; | ||