diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-02-23 07:00:56 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2011-02-23 11:26:49 -0500 |
commit | ff973d041e5ab9ada9e49f4e93ef3a699c511463 (patch) | |
tree | f5fee6d9934d98df18cdeb571a200ddc83562f28 /arch/x86/kernel/apic/io_apic.c | |
parent | ed972ccf434a9881a5881915ae04602af2776bad (diff) |
x86: ioapic: Add io_apic_setup_irq_pin()
There are about four places in the ioapic code which do exactly the
same setup sequence. Also the OF based ioapic setup needs that
function to avoid putting the OF specific code into ioapic.c
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/kernel/apic/io_apic.c')
-rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index f751a82d4cb4..6deb3ca62fd6 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -3607,6 +3607,21 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) | |||
3607 | } | 3607 | } |
3608 | #endif /* CONFIG_HT_IRQ */ | 3608 | #endif /* CONFIG_HT_IRQ */ |
3609 | 3609 | ||
3610 | int | ||
3611 | io_apic_setup_irq_pin(unsigned int irq, int node, struct io_apic_irq_attr *attr) | ||
3612 | { | ||
3613 | struct irq_cfg *cfg = alloc_irq_and_cfg_at(irq, node); | ||
3614 | int ret; | ||
3615 | |||
3616 | if (!cfg) | ||
3617 | return -EINVAL; | ||
3618 | ret = __add_pin_to_irq_node(cfg, node, attr->ioapic, attr->ioapic_pin); | ||
3619 | if (!ret) | ||
3620 | setup_ioapic_irq(attr->ioapic, attr->ioapic_pin, irq, cfg, | ||
3621 | attr->trigger, attr->polarity); | ||
3622 | return ret; | ||
3623 | } | ||
3624 | |||
3610 | int __init io_apic_get_redir_entries (int ioapic) | 3625 | int __init io_apic_get_redir_entries (int ioapic) |
3611 | { | 3626 | { |
3612 | union IO_APIC_reg_01 reg_01; | 3627 | union IO_APIC_reg_01 reg_01; |