aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/irq.c
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2007-06-04 09:00:00 -0400
committerPaul Mackerras <paulus@samba.org>2007-06-25 03:02:07 -0400
commitee51de5645edee4124db6a479d2e135ebe436748 (patch)
treeac1ceab5d8051ca458b8a5f94377eec899dc97cc /arch/powerpc/kernel/irq.c
parent6fde40f3f1a9641ea0a41471cea77f34c0cbb36f (diff)
[POWERPC] Add irq_create_direct_mapping()
This patch adds irq_create_direct_mapping(). This routine is an alternative to irq_create_mapping(), for irq controllers that can use linux virq numbers directly as hardware numbers. Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/irq.c')
-rw-r--r--arch/powerpc/kernel/irq.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index d806b18d9ff9..a3351561d283 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -616,6 +616,30 @@ static int irq_setup_virq(struct irq_host *host, unsigned int virq,
616 return 0; 616 return 0;
617} 617}
618 618
619unsigned int irq_create_direct_mapping(struct irq_host *host)
620{
621 unsigned int virq;
622
623 if (host == NULL)
624 host = irq_default_host;
625
626 BUG_ON(host == NULL);
627 WARN_ON(host->revmap_type != IRQ_HOST_MAP_NOMAP);
628
629 virq = irq_alloc_virt(host, 1, 0);
630 if (virq == NO_IRQ) {
631 pr_debug("irq: create_direct virq allocation failed\n");
632 return NO_IRQ;
633 }
634
635 pr_debug("irq: create_direct obtained virq %d\n", virq);
636
637 if (irq_setup_virq(host, virq, virq))
638 return NO_IRQ;
639
640 return virq;
641}
642
619unsigned int irq_create_mapping(struct irq_host *host, 643unsigned int irq_create_mapping(struct irq_host *host,
620 irq_hw_number_t hwirq) 644 irq_hw_number_t hwirq)
621{ 645{