irq: irqdomain: Add API to find free irq range
When registering irq chip drivers, one common requirement is to specify the irq_domain irq_base and nr_irq. These fields represent the system wide logical interrupt range the domain occupies. For systems with only one interrupt controller, it's trivial to know these values. But for systems with several irq chip drivers, it becomes painful to keep track of interrupt ranges in platform defines. These create needless compile time dependencies, of which the Device Tree aims to solve. irq_alloc_desc() can search for a free irq, but is very inefficient for determining the availability of large ranges. Additionally, some irq chip drivers allocate irq descriptors lazily. For example, portions of the Device Tree may not be parsed until a particular bus is probed. But of_irq_init() is intended to be run at init time, and this is a natural time to allocate irq domains. Thus by the time we allocate our irq descriptors, we already need to know a range of acceptable irqs to use for the domain. To solve these problems, let's introduce irq_domain_find_free_range(), which will return to the caller the first available irq domain range not used already by the system. This range can then be specified with irq_domain_add(). Change-Id: I8b0f5d25b173c76b8fc5d4f46b3fe9c6bf5c3c8f Signed-off-by: Michael Bohan <mbohan@codeaurora.org>
This commit is contained in:
@@ -95,6 +95,7 @@ extern void irq_domain_register(struct irq_domain *domain);
|
||||
extern void irq_domain_register_irq(struct irq_domain *domain, int hwirq);
|
||||
extern void irq_domain_unregister(struct irq_domain *domain);
|
||||
extern void irq_domain_unregister_irq(struct irq_domain *domain, int hwirq);
|
||||
extern int irq_domain_find_free_range(unsigned int from, unsigned int cnt);
|
||||
|
||||
#endif /* CONFIG_IRQ_DOMAIN */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user