irqdomain: Introduce irq_domain_create_legacy() API
Introduce irq_domain_create_legacy() API which is functional equivalent to the existing irq_domain_add_legacy(), but takes a pointer to the struct fwnode_handle as a parameter. This is useful for non OF systems. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Link: https://lore.kernel.org/r/20201030165919.86234-5-andriy.shevchenko@linux.intel.com
This commit is contained in:
parent
c3a877fea9
commit
b6e95788fd
|
@ -147,6 +147,7 @@ Legacy
|
||||||
irq_domain_add_simple()
|
irq_domain_add_simple()
|
||||||
irq_domain_add_legacy()
|
irq_domain_add_legacy()
|
||||||
irq_domain_add_legacy_isa()
|
irq_domain_add_legacy_isa()
|
||||||
|
irq_domain_create_legacy()
|
||||||
|
|
||||||
The Legacy mapping is a special case for drivers that already have a
|
The Legacy mapping is a special case for drivers that already have a
|
||||||
range of irq_descs allocated for the hwirqs. It is used when the
|
range of irq_descs allocated for the hwirqs. It is used when the
|
||||||
|
@ -185,6 +186,11 @@ that the driver using the simple domain call irq_create_mapping()
|
||||||
before any irq_find_mapping() since the latter will actually work
|
before any irq_find_mapping() since the latter will actually work
|
||||||
for the static IRQ assignment case.
|
for the static IRQ assignment case.
|
||||||
|
|
||||||
|
irq_domain_add_legacy() and irq_domain_create_legacy() are functionally
|
||||||
|
equivalent, except for the first argument is different - the former
|
||||||
|
accepts an Open Firmware specific 'struct device_node', while the latter
|
||||||
|
accepts a more general abstraction 'struct fwnode_handle'.
|
||||||
|
|
||||||
Hierarchy IRQ domain
|
Hierarchy IRQ domain
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
|
|
@ -271,6 +271,12 @@ struct irq_domain *irq_domain_add_legacy(struct device_node *of_node,
|
||||||
irq_hw_number_t first_hwirq,
|
irq_hw_number_t first_hwirq,
|
||||||
const struct irq_domain_ops *ops,
|
const struct irq_domain_ops *ops,
|
||||||
void *host_data);
|
void *host_data);
|
||||||
|
struct irq_domain *irq_domain_create_legacy(struct fwnode_handle *fwnode,
|
||||||
|
unsigned int size,
|
||||||
|
unsigned int first_irq,
|
||||||
|
irq_hw_number_t first_hwirq,
|
||||||
|
const struct irq_domain_ops *ops,
|
||||||
|
void *host_data);
|
||||||
extern struct irq_domain *irq_find_matching_fwspec(struct irq_fwspec *fwspec,
|
extern struct irq_domain *irq_find_matching_fwspec(struct irq_fwspec *fwspec,
|
||||||
enum irq_domain_bus_token bus_token);
|
enum irq_domain_bus_token bus_token);
|
||||||
extern bool irq_domain_check_msi_remap(void);
|
extern bool irq_domain_check_msi_remap(void);
|
||||||
|
|
|
@ -350,17 +350,28 @@ struct irq_domain *irq_domain_add_legacy(struct device_node *of_node,
|
||||||
irq_hw_number_t first_hwirq,
|
irq_hw_number_t first_hwirq,
|
||||||
const struct irq_domain_ops *ops,
|
const struct irq_domain_ops *ops,
|
||||||
void *host_data)
|
void *host_data)
|
||||||
|
{
|
||||||
|
return irq_domain_create_legacy(of_node_to_fwnode(of_node), size,
|
||||||
|
first_irq, first_hwirq, ops, host_data);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(irq_domain_add_legacy);
|
||||||
|
|
||||||
|
struct irq_domain *irq_domain_create_legacy(struct fwnode_handle *fwnode,
|
||||||
|
unsigned int size,
|
||||||
|
unsigned int first_irq,
|
||||||
|
irq_hw_number_t first_hwirq,
|
||||||
|
const struct irq_domain_ops *ops,
|
||||||
|
void *host_data)
|
||||||
{
|
{
|
||||||
struct irq_domain *domain;
|
struct irq_domain *domain;
|
||||||
|
|
||||||
domain = __irq_domain_add(of_node_to_fwnode(of_node), first_hwirq + size,
|
domain = __irq_domain_add(fwnode, first_hwirq + size, first_hwirq + size, 0, ops, host_data);
|
||||||
first_hwirq + size, 0, ops, host_data);
|
|
||||||
if (domain)
|
if (domain)
|
||||||
irq_domain_associate_many(domain, first_irq, first_hwirq, size);
|
irq_domain_associate_many(domain, first_irq, first_hwirq, size);
|
||||||
|
|
||||||
return domain;
|
return domain;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(irq_domain_add_legacy);
|
EXPORT_SYMBOL_GPL(irq_domain_create_legacy);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* irq_find_matching_fwspec() - Locates a domain for a given fwspec
|
* irq_find_matching_fwspec() - Locates a domain for a given fwspec
|
||||||
|
|
Loading…
Reference in New Issue