Lines Matching full:irq_domain
3 * irq_domain - IRQ translation domains
26 * a unique identifier for an interrupt controller, the irq_domain
42 struct irq_domain;
74 * struct irq_domain_ops - Methods for irq_domain objects
102 int (*match)(struct irq_domain *d, struct device_node *node,
104 int (*select)(struct irq_domain *d, struct irq_fwspec *fwspec,
106 int (*map)(struct irq_domain *d, unsigned int virq, irq_hw_number_t hw);
107 void (*unmap)(struct irq_domain *d, unsigned int virq);
108 int (*xlate)(struct irq_domain *d, struct device_node *node,
113 int (*alloc)(struct irq_domain *d, unsigned int virq,
115 void (*free)(struct irq_domain *d, unsigned int virq,
117 int (*activate)(struct irq_domain *d, struct irq_data *irqd, bool reserve);
118 void (*deactivate)(struct irq_domain *d, struct irq_data *irq_data);
119 int (*translate)(struct irq_domain *d, struct irq_fwspec *fwspec,
123 void (*debug_show)(struct seq_file *m, struct irq_domain *d,
133 * struct irq_domain - Hardware interrupt number translation object
134 * @link: Element in global irq_domain list.
136 * @ops: Pointer to irq_domain methods
137 * @host_data: Private data pointer for use by owner. Not touched by irq_domain
139 * @flags: Per irq_domain flags
145 * @fwnode: Pointer to firmware node associated with the irq_domain. Pretty easy
158 * @parent: Pointer to parent irq_domain to support hierarchy irq_domains
169 struct irq_domain { struct
177 struct irq_domain *root; argument
186 struct irq_domain *parent; argument
191 void (*exit)(struct irq_domain *d); argument
193 /* reverse map data. The linear map gets appended to the irq_domain */
242 static inline struct device_node *irq_domain_get_of_node(struct irq_domain *d) in irq_domain_get_of_node()
247 static inline void irq_domain_set_pm_device(struct irq_domain *d, in irq_domain_set_pm_device()
325 struct irq_domain *parent;
328 int (*init)(struct irq_domain *d);
329 void (*exit)(struct irq_domain *d);
332 struct irq_domain *irq_domain_instantiate(const struct irq_domain_info *info);
333 struct irq_domain *devm_irq_domain_instantiate(struct device *dev,
336 struct irq_domain *irq_domain_create_simple(struct fwnode_handle *fwnode,
341 struct irq_domain *irq_domain_add_legacy(struct device_node *of_node,
347 struct irq_domain *irq_domain_create_legacy(struct fwnode_handle *fwnode,
353 extern struct irq_domain *irq_find_matching_fwspec(struct irq_fwspec *fwspec,
355 extern void irq_set_default_host(struct irq_domain *host);
356 extern struct irq_domain *irq_get_default_host(void);
373 extern void irq_domain_update_bus_token(struct irq_domain *domain,
377 struct irq_domain *irq_find_matching_fwnode(struct fwnode_handle *fwnode, in irq_find_matching_fwnode()
387 static inline struct irq_domain *irq_find_matching_host(struct device_node *node, in irq_find_matching_host()
393 static inline struct irq_domain *irq_find_host(struct device_node *node) in irq_find_host()
395 struct irq_domain *d; in irq_find_host()
404 static inline struct irq_domain *irq_domain_add_simple(struct device_node *of_node, in irq_domain_add_simple()
414 * irq_domain_add_linear() - Allocate and register a linear revmap irq_domain.
420 static inline struct irq_domain *irq_domain_add_linear(struct device_node *of_node, in irq_domain_add_linear()
432 struct irq_domain *d; in irq_domain_add_linear()
439 static inline struct irq_domain *irq_domain_add_nomap(struct device_node *of_node, in irq_domain_add_nomap()
451 struct irq_domain *d; in irq_domain_add_nomap()
457 extern unsigned int irq_create_direct_mapping(struct irq_domain *host);
460 static inline struct irq_domain *irq_domain_add_tree(struct device_node *of_node, in irq_domain_add_tree()
470 struct irq_domain *d; in irq_domain_add_tree()
476 static inline struct irq_domain *irq_domain_create_linear(struct fwnode_handle *fwnode, in irq_domain_create_linear()
488 struct irq_domain *d; in irq_domain_create_linear()
494 static inline struct irq_domain *irq_domain_create_tree(struct fwnode_handle *fwnode, in irq_domain_create_tree()
504 struct irq_domain *d; in irq_domain_create_tree()
510 extern void irq_domain_remove(struct irq_domain *host);
512 extern int irq_domain_associate(struct irq_domain *domain, unsigned int irq,
514 extern void irq_domain_associate_many(struct irq_domain *domain,
518 extern unsigned int irq_create_mapping_affinity(struct irq_domain *host,
524 static inline unsigned int irq_create_mapping(struct irq_domain *host, in irq_create_mapping()
530 extern struct irq_desc *__irq_resolve_mapping(struct irq_domain *domain,
534 static inline struct irq_desc *irq_resolve_mapping(struct irq_domain *domain, in irq_resolve_mapping()
545 static inline unsigned int irq_find_mapping(struct irq_domain *domain, in irq_find_mapping()
556 static inline unsigned int irq_linear_revmap(struct irq_domain *domain, in irq_linear_revmap()
565 int irq_domain_xlate_onecell(struct irq_domain *d, struct device_node *ctrlr,
568 int irq_domain_xlate_twocell(struct irq_domain *d, struct device_node *ctrlr,
571 int irq_domain_xlate_onetwocell(struct irq_domain *d, struct device_node *ctrlr,
575 int irq_domain_translate_twocell(struct irq_domain *d,
580 int irq_domain_translate_onecell(struct irq_domain *d,
586 int irq_reserve_ipi(struct irq_domain *domain, const struct cpumask *dest);
590 extern struct irq_data *irq_domain_get_irq_data(struct irq_domain *domain,
592 extern void irq_domain_set_info(struct irq_domain *domain, unsigned int virq,
599 extern struct irq_domain *irq_domain_create_hierarchy(struct irq_domain *parent,
604 static inline struct irq_domain *irq_domain_add_hierarchy(struct irq_domain *parent, in irq_domain_add_hierarchy()
616 extern int __irq_domain_alloc_irqs(struct irq_domain *domain, int irq_base,
624 static inline int irq_domain_alloc_irqs(struct irq_domain *domain, in irq_domain_alloc_irqs()
631 extern int irq_domain_alloc_irqs_hierarchy(struct irq_domain *domain,
634 extern int irq_domain_set_hwirq_and_chip(struct irq_domain *domain,
639 extern void irq_domain_free_irqs_common(struct irq_domain *domain,
642 extern void irq_domain_free_irqs_top(struct irq_domain *domain,
645 extern int irq_domain_push_irq(struct irq_domain *domain, int virq, void *arg);
646 extern int irq_domain_pop_irq(struct irq_domain *domain, int virq);
648 extern int irq_domain_alloc_irqs_parent(struct irq_domain *domain,
652 extern void irq_domain_free_irqs_parent(struct irq_domain *domain,
656 extern int irq_domain_disconnect_hierarchy(struct irq_domain *domain,
659 static inline bool irq_domain_is_hierarchy(struct irq_domain *domain) in irq_domain_is_hierarchy()
664 static inline bool irq_domain_is_ipi(struct irq_domain *domain) in irq_domain_is_ipi()
670 static inline bool irq_domain_is_ipi_per_cpu(struct irq_domain *domain) in irq_domain_is_ipi_per_cpu()
675 static inline bool irq_domain_is_ipi_single(struct irq_domain *domain) in irq_domain_is_ipi_single()
680 static inline bool irq_domain_is_msi(struct irq_domain *domain) in irq_domain_is_msi()
685 static inline bool irq_domain_is_msi_parent(struct irq_domain *domain) in irq_domain_is_msi_parent()
690 static inline bool irq_domain_is_msi_device(struct irq_domain *domain) in irq_domain_is_msi_device()
696 static inline int irq_domain_alloc_irqs(struct irq_domain *domain, in irq_domain_alloc_irqs()
705 static inline bool irq_domain_is_hierarchy(struct irq_domain *domain) in irq_domain_is_hierarchy()
710 static inline bool irq_domain_is_ipi(struct irq_domain *domain) in irq_domain_is_ipi()
715 static inline bool irq_domain_is_ipi_per_cpu(struct irq_domain *domain) in irq_domain_is_ipi_per_cpu()
720 static inline bool irq_domain_is_ipi_single(struct irq_domain *domain) in irq_domain_is_ipi_single()
725 static inline bool irq_domain_is_msi(struct irq_domain *domain) in irq_domain_is_msi()
730 static inline bool irq_domain_is_msi_parent(struct irq_domain *domain) in irq_domain_is_msi_parent()
735 static inline bool irq_domain_is_msi_device(struct irq_domain *domain) in irq_domain_is_msi_device()
743 int msi_device_domain_alloc_wired(struct irq_domain *domain, unsigned int hwirq,
745 void msi_device_domain_free_wired(struct irq_domain *domain, unsigned int virq);
747 static inline int msi_device_domain_alloc_wired(struct irq_domain *domain, unsigned int hwirq, in msi_device_domain_alloc_wired()
753 static inline void msi_device_domain_free_wired(struct irq_domain *domain, unsigned int virq) in msi_device_domain_free_wired()
761 static inline struct irq_domain *irq_find_matching_fwnode( in irq_find_matching_fwnode()