|
@@ -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)
|
|
|
{
|