Lines Matching refs:irq_domain
3 * irq_domain - IRQ translation domains
26 * a unique identifier for an interrupt controller, the irq_domain
40 struct irq_domain;
91 * struct irq_domain_ops - Methods for irq_domain objects
106 int (*match)(struct irq_domain *d, struct device_node *node,
108 int (*select)(struct irq_domain *d, struct irq_fwspec *fwspec,
110 int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw);
111 void (*unmap)(struct irq_domain *d, unsigned int virq);
112 int (*xlate)(struct irq_domain *d, struct device_node *node,
117 int (*alloc)(struct irq_domain *d, unsigned int virq,
119 void (*free)(struct irq_domain *d, unsigned int virq,
121 int (*activate)(struct irq_domain *d, struct irq_data *irqd, bool reserve);
122 void (*deactivate)(struct irq_domain *d, struct irq_data *irq_data);
123 int (*translate)(struct irq_domain *d, struct irq_fwspec *fwspec,
127 void (*debug_show)(struct seq_file *m, struct irq_domain *d,
137 * struct irq_domain - Hardware interrupt number translation object
138 * @link: Element in global irq_domain list.
140 * @ops: pointer to irq_domain methods
141 * @host_data: private data pointer for use by owner. Not touched by irq_domain
143 * @flags: host per irq_domain flags
147 * @fwnode: Pointer to firmware node associated with the irq_domain. Pretty easy
152 * @parent: Pointer to parent irq_domain to support hierarchy irq_domains
155 * Revmap data, used internally by irq_domain
162 struct irq_domain {
175 struct irq_domain *parent;
181 /* reverse map data. The linear map gets appended to the irq_domain */
225 static inline struct device_node *irq_domain_get_of_node(struct irq_domain *d)
259 struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, unsigned int size,
263 struct irq_domain *irq_domain_add_simple(struct device_node *of_node,
268 struct irq_domain *irq_domain_add_legacy(struct device_node *of_node,
274 extern struct irq_domain *irq_find_matching_fwspec(struct irq_fwspec *fwspec,
277 extern void irq_set_default_host(struct irq_domain *host);
278 extern struct irq_domain *irq_get_default_host(void);
295 extern void irq_domain_update_bus_token(struct irq_domain *domain,
299 struct irq_domain *irq_find_matching_fwnode(struct fwnode_handle *fwnode,
309 static inline struct irq_domain *irq_find_matching_host(struct device_node *node,
315 static inline struct irq_domain *irq_find_host(struct device_node *node)
317 struct irq_domain *d;
327 * irq_domain_add_linear() - Allocate and register a linear revmap irq_domain.
333 static inline struct irq_domain *irq_domain_add_linear(struct device_node *of_node,
340 static inline struct irq_domain *irq_domain_add_nomap(struct device_node *of_node,
347 static inline struct irq_domain *irq_domain_add_legacy_isa(
355 static inline struct irq_domain *irq_domain_add_tree(struct device_node *of_node,
362 static inline struct irq_domain *irq_domain_create_linear(struct fwnode_handle *fwnode,
370 static inline struct irq_domain *irq_domain_create_tree(struct fwnode_handle *fwnode,
377 extern void irq_domain_remove(struct irq_domain *host);
379 extern int irq_domain_associate(struct irq_domain *domain, unsigned int irq,
381 extern void irq_domain_associate_many(struct irq_domain *domain,
384 extern void irq_domain_disassociate(struct irq_domain *domain,
387 extern unsigned int irq_create_mapping_affinity(struct irq_domain *host,
393 static inline unsigned int irq_create_mapping(struct irq_domain *host,
410 static inline unsigned int irq_linear_revmap(struct irq_domain *domain,
415 extern unsigned int irq_find_mapping(struct irq_domain *host,
417 extern unsigned int irq_create_direct_mapping(struct irq_domain *host);
418 extern int irq_create_strict_mappings(struct irq_domain *domain,
422 static inline int irq_create_identity_mapping(struct irq_domain *host,
431 int irq_domain_xlate_onecell(struct irq_domain *d, struct device_node *ctrlr,
434 int irq_domain_xlate_twocell(struct irq_domain *d, struct device_node *ctrlr,
437 int irq_domain_xlate_onetwocell(struct irq_domain *d, struct device_node *ctrlr,
441 int irq_domain_translate_twocell(struct irq_domain *d,
446 int irq_domain_translate_onecell(struct irq_domain *d,
452 int irq_reserve_ipi(struct irq_domain *domain, const struct cpumask *dest);
456 extern struct irq_data *irq_domain_get_irq_data(struct irq_domain *domain,
458 extern void irq_domain_set_info(struct irq_domain *domain, unsigned int virq,
464 extern struct irq_domain *irq_domain_create_hierarchy(struct irq_domain *parent,
469 static inline struct irq_domain *irq_domain_add_hierarchy(struct irq_domain *parent,
481 extern int __irq_domain_alloc_irqs(struct irq_domain *domain, int irq_base,
489 static inline int irq_domain_alloc_irqs(struct irq_domain *domain,
496 extern int irq_domain_alloc_irqs_hierarchy(struct irq_domain *domain,
499 extern int irq_domain_set_hwirq_and_chip(struct irq_domain *domain,
504 extern void irq_domain_free_irqs_common(struct irq_domain *domain,
507 extern void irq_domain_free_irqs_top(struct irq_domain *domain,
510 extern int irq_domain_push_irq(struct irq_domain *domain, int virq, void *arg);
511 extern int irq_domain_pop_irq(struct irq_domain *domain, int virq);
513 extern int irq_domain_alloc_irqs_parent(struct irq_domain *domain,
517 extern void irq_domain_free_irqs_parent(struct irq_domain *domain,
521 extern int irq_domain_disconnect_hierarchy(struct irq_domain *domain,
524 static inline bool irq_domain_is_hierarchy(struct irq_domain *domain)
529 static inline bool irq_domain_is_ipi(struct irq_domain *domain)
535 static inline bool irq_domain_is_ipi_per_cpu(struct irq_domain *domain)
540 static inline bool irq_domain_is_ipi_single(struct irq_domain *domain)
545 static inline bool irq_domain_is_msi(struct irq_domain *domain)
550 static inline bool irq_domain_is_msi_remap(struct irq_domain *domain)
555 extern bool irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain);
558 static inline int irq_domain_alloc_irqs(struct irq_domain *domain,
567 static inline bool irq_domain_is_hierarchy(struct irq_domain *domain)
572 static inline bool irq_domain_is_ipi(struct irq_domain *domain)
577 static inline bool irq_domain_is_ipi_per_cpu(struct irq_domain *domain)
582 static inline bool irq_domain_is_ipi_single(struct irq_domain *domain)
587 static inline bool irq_domain_is_msi(struct irq_domain *domain)
592 static inline bool irq_domain_is_msi_remap(struct irq_domain *domain)
598 irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain)
606 static inline struct irq_domain *irq_find_matching_fwnode(