diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2007-06-04 23:00:00 +1000 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-06-25 17:02:07 +1000 |
commit | ee51de5645edee4124db6a479d2e135ebe436748 (patch) | |
tree | ac1ceab5d8051ca458b8a5f94377eec899dc97cc /arch/powerpc/kernel/irq.c | |
parent | 6fde40f3f1a9641ea0a41471cea77f34c0cbb36f (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.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index d806b18d9ff..a3351561d28 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, return 0; } +unsigned int irq_create_direct_mapping(struct irq_host *host) +{ + unsigned int virq; + + if (host == NULL) + host = irq_default_host; + + BUG_ON(host == NULL); + WARN_ON(host->revmap_type != IRQ_HOST_MAP_NOMAP); + + virq = irq_alloc_virt(host, 1, 0); + if (virq == NO_IRQ) { + pr_debug("irq: create_direct virq allocation failed\n"); + return NO_IRQ; + } + + pr_debug("irq: create_direct obtained virq %d\n", virq); + + if (irq_setup_virq(host, virq, virq)) + return NO_IRQ; + + return virq; +} + unsigned int irq_create_mapping(struct irq_host *host, irq_hw_number_t hwirq) { |