Lines Matching full:domain
28 static void irq_domain_check_hierarchy(struct irq_domain *domain);
59 * identifying an irq domain
62 * @name: Optional user provided domain name
71 * domain struct.
133 * @ops: domain callbacks
137 * Returns pointer to IRQ domain, or NULL on failure.
145 struct irq_domain *domain; in __irq_domain_add() local
154 domain = kzalloc_node(struct_size(domain, revmap, size), in __irq_domain_add()
156 if (!domain) in __irq_domain_add()
165 domain->fwnode = fwnode; in __irq_domain_add()
166 domain->name = kstrdup(fwid->name, GFP_KERNEL); in __irq_domain_add()
167 if (!domain->name) { in __irq_domain_add()
168 kfree(domain); in __irq_domain_add()
171 domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED; in __irq_domain_add()
174 domain->fwnode = fwnode; in __irq_domain_add()
175 domain->name = fwid->name; in __irq_domain_add()
189 kfree(domain); in __irq_domain_add()
195 domain->name = name; in __irq_domain_add()
196 domain->fwnode = fwnode; in __irq_domain_add()
197 domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED; in __irq_domain_add()
200 if (!domain->name) { in __irq_domain_add()
203 domain->name = kasprintf(GFP_KERNEL, "unknown-%d", in __irq_domain_add()
205 if (!domain->name) { in __irq_domain_add()
206 kfree(domain); in __irq_domain_add()
209 domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED; in __irq_domain_add()
216 INIT_RADIX_TREE(&domain->revmap_tree, GFP_KERNEL); in __irq_domain_add()
217 mutex_init(&domain->revmap_mutex); in __irq_domain_add()
218 domain->ops = ops; in __irq_domain_add()
219 domain->host_data = host_data; in __irq_domain_add()
220 domain->hwirq_max = hwirq_max; in __irq_domain_add()
223 domain->flags |= IRQ_DOMAIN_FLAG_NO_MAP; in __irq_domain_add()
226 domain->revmap_size = size; in __irq_domain_add()
228 irq_domain_check_hierarchy(domain); in __irq_domain_add()
231 debugfs_add_domain_dir(domain); in __irq_domain_add()
232 list_add(&domain->link, &irq_domain_list); in __irq_domain_add()
235 pr_debug("Added domain %s\n", domain->name); in __irq_domain_add()
236 return domain; in __irq_domain_add()
241 * irq_domain_remove() - Remove an irq domain.
242 * @domain: domain to remove
244 * This routine is used to remove an irq domain. The caller must ensure
245 * that all mappings within the domain have been disposed of prior to
248 void irq_domain_remove(struct irq_domain *domain) in irq_domain_remove() argument
251 debugfs_remove_domain_dir(domain); in irq_domain_remove()
253 WARN_ON(!radix_tree_empty(&domain->revmap_tree)); in irq_domain_remove()
255 list_del(&domain->link); in irq_domain_remove()
258 * If the going away domain is the default one, reset it. in irq_domain_remove()
260 if (unlikely(irq_default_domain == domain)) in irq_domain_remove()
265 pr_debug("Removed domain %s\n", domain->name); in irq_domain_remove()
267 fwnode_dev_initialized(domain->fwnode, false); in irq_domain_remove()
268 fwnode_handle_put(domain->fwnode); in irq_domain_remove()
269 if (domain->flags & IRQ_DOMAIN_NAME_ALLOCATED) in irq_domain_remove()
270 kfree(domain->name); in irq_domain_remove()
271 kfree(domain); in irq_domain_remove()
275 void irq_domain_update_bus_token(struct irq_domain *domain, in irq_domain_update_bus_token() argument
280 if (domain->bus_token == bus_token) in irq_domain_update_bus_token()
285 domain->bus_token = bus_token; in irq_domain_update_bus_token()
287 name = kasprintf(GFP_KERNEL, "%s-%d", domain->name, bus_token); in irq_domain_update_bus_token()
293 debugfs_remove_domain_dir(domain); in irq_domain_update_bus_token()
295 if (domain->flags & IRQ_DOMAIN_NAME_ALLOCATED) in irq_domain_update_bus_token()
296 kfree(domain->name); in irq_domain_update_bus_token()
298 domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED; in irq_domain_update_bus_token()
300 domain->name = name; in irq_domain_update_bus_token()
301 debugfs_add_domain_dir(domain); in irq_domain_update_bus_token()
311 * @first_irq: first number of irq block assigned to the domain,
313 * pre-map all of the irqs in the domain to virqs starting at first_irq.
314 * @ops: domain callbacks
331 struct irq_domain *domain; in irq_domain_create_simple() local
333 domain = __irq_domain_add(fwnode, size, size, 0, ops, host_data); in irq_domain_create_simple()
334 if (!domain) in irq_domain_create_simple()
346 irq_domain_associate_many(domain, first_irq, 0, size); in irq_domain_create_simple()
349 return domain; in irq_domain_create_simple()
357 * @first_irq: first number of irq block assigned to the domain
361 * @ops: map/unmap domain callbacks
387 struct irq_domain *domain; in irq_domain_create_legacy() local
389 domain = __irq_domain_add(fwnode, first_hwirq + size, first_hwirq + size, 0, ops, host_data); in irq_domain_create_legacy()
390 if (domain) in irq_domain_create_legacy()
391 irq_domain_associate_many(domain, first_irq, first_hwirq, size); in irq_domain_create_legacy()
393 return domain; in irq_domain_create_legacy()
398 * irq_find_matching_fwspec() - Locates a domain for a given fwspec
400 * @bus_token: domain-specific data
414 * bus_token == DOMAIN_BUS_ANY matches any domain, any other in irq_find_matching_fwspec()
415 * values must generate an exact match for the domain to be in irq_find_matching_fwspec()
443 * Return: false if any MSI irq domain does not support IRQ remapping,
444 * true otherwise (including if there is no MSI irq domain)
465 * irq_set_default_host() - Set a "default" irq domain
466 * @domain: default domain pointer
468 * For convenience, it's possible to set a "default" domain that will be used
473 void irq_set_default_host(struct irq_domain *domain) in irq_set_default_host() argument
475 pr_debug("Default domain set to @0x%p\n", domain); in irq_set_default_host()
477 irq_default_domain = domain; in irq_set_default_host()
482 * irq_get_default_host() - Retrieve the "default" irq domain
484 * Returns: the default domain, if any.
496 static bool irq_domain_is_nomap(struct irq_domain *domain) in irq_domain_is_nomap() argument
499 (domain->flags & IRQ_DOMAIN_FLAG_NO_MAP); in irq_domain_is_nomap()
502 static void irq_domain_clear_mapping(struct irq_domain *domain, in irq_domain_clear_mapping() argument
505 if (irq_domain_is_nomap(domain)) in irq_domain_clear_mapping()
508 mutex_lock(&domain->revmap_mutex); in irq_domain_clear_mapping()
509 if (hwirq < domain->revmap_size) in irq_domain_clear_mapping()
510 rcu_assign_pointer(domain->revmap[hwirq], NULL); in irq_domain_clear_mapping()
512 radix_tree_delete(&domain->revmap_tree, hwirq); in irq_domain_clear_mapping()
513 mutex_unlock(&domain->revmap_mutex); in irq_domain_clear_mapping()
516 static void irq_domain_set_mapping(struct irq_domain *domain, in irq_domain_set_mapping() argument
520 if (irq_domain_is_nomap(domain)) in irq_domain_set_mapping()
523 mutex_lock(&domain->revmap_mutex); in irq_domain_set_mapping()
524 if (hwirq < domain->revmap_size) in irq_domain_set_mapping()
525 rcu_assign_pointer(domain->revmap[hwirq], irq_data); in irq_domain_set_mapping()
527 radix_tree_insert(&domain->revmap_tree, hwirq, irq_data); in irq_domain_set_mapping()
528 mutex_unlock(&domain->revmap_mutex); in irq_domain_set_mapping()
531 static void irq_domain_disassociate(struct irq_domain *domain, unsigned int irq) in irq_domain_disassociate() argument
536 if (WARN(!irq_data || irq_data->domain != domain, in irq_domain_disassociate()
550 if (domain->ops->unmap) in irq_domain_disassociate()
551 domain->ops->unmap(domain, irq); in irq_domain_disassociate()
554 irq_data->domain = NULL; in irq_domain_disassociate()
556 domain->mapcount--; in irq_domain_disassociate()
559 irq_domain_clear_mapping(domain, hwirq); in irq_domain_disassociate()
562 int irq_domain_associate(struct irq_domain *domain, unsigned int virq, in irq_domain_associate() argument
568 if (WARN(hwirq >= domain->hwirq_max, in irq_domain_associate()
569 "error: hwirq 0x%x is too large for %s\n", (int)hwirq, domain->name)) in irq_domain_associate()
573 if (WARN(irq_data->domain, "error: virq%i is already associated", virq)) in irq_domain_associate()
578 irq_data->domain = domain; in irq_domain_associate()
579 if (domain->ops->map) { in irq_domain_associate()
580 ret = domain->ops->map(domain, virq, hwirq); in irq_domain_associate()
589 domain->name, hwirq, virq, ret); in irq_domain_associate()
591 irq_data->domain = NULL; in irq_domain_associate()
597 /* If not already assigned, give the domain the chip's name */ in irq_domain_associate()
598 if (!domain->name && irq_data->chip) in irq_domain_associate()
599 domain->name = irq_data->chip->name; in irq_domain_associate()
602 domain->mapcount++; in irq_domain_associate()
603 irq_domain_set_mapping(domain, hwirq, irq_data); in irq_domain_associate()
612 void irq_domain_associate_many(struct irq_domain *domain, unsigned int irq_base, in irq_domain_associate_many() argument
618 of_node = irq_domain_get_of_node(domain); in irq_domain_associate_many()
623 irq_domain_associate(domain, irq_base + i, hwirq_base + i); in irq_domain_associate_many()
631 * @domain: domain to allocate the irq for or NULL for default domain
639 unsigned int irq_create_direct_mapping(struct irq_domain *domain) in irq_create_direct_mapping() argument
644 if (domain == NULL) in irq_create_direct_mapping()
645 domain = irq_default_domain; in irq_create_direct_mapping()
647 of_node = irq_domain_get_of_node(domain); in irq_create_direct_mapping()
653 if (virq >= domain->hwirq_max) { in irq_create_direct_mapping()
655 domain->hwirq_max); in irq_create_direct_mapping()
661 if (irq_domain_associate(domain, virq, virq)) { in irq_create_direct_mapping()
673 * @domain: domain owning this hardware interrupt or NULL for default domain
674 * @hwirq: hardware irq number in that domain space
682 unsigned int irq_create_mapping_affinity(struct irq_domain *domain, in irq_create_mapping_affinity() argument
689 pr_debug("irq_create_mapping(0x%p, 0x%lx)\n", domain, hwirq); in irq_create_mapping_affinity()
691 /* Look for default domain if necessary */ in irq_create_mapping_affinity()
692 if (domain == NULL) in irq_create_mapping_affinity()
693 domain = irq_default_domain; in irq_create_mapping_affinity()
694 if (domain == NULL) { in irq_create_mapping_affinity()
695 WARN(1, "%s(, %lx) called with NULL domain\n", __func__, hwirq); in irq_create_mapping_affinity()
698 pr_debug("-> using domain @%p\n", domain); in irq_create_mapping_affinity()
700 of_node = irq_domain_get_of_node(domain); in irq_create_mapping_affinity()
703 virq = irq_find_mapping(domain, hwirq); in irq_create_mapping_affinity()
717 if (irq_domain_associate(domain, virq, hwirq)) { in irq_create_mapping_affinity()
722 pr_debug("irq %lu on domain %s mapped to virtual irq %u\n", in irq_create_mapping_affinity()
742 /* If domain has no translation, then we assume interrupt line */ in irq_domain_translate()
762 struct irq_domain *domain; in irq_create_fwspec_mapping() local
769 domain = irq_find_matching_fwspec(fwspec, DOMAIN_BUS_WIRED); in irq_create_fwspec_mapping()
770 if (!domain) in irq_create_fwspec_mapping()
771 domain = irq_find_matching_fwspec(fwspec, DOMAIN_BUS_ANY); in irq_create_fwspec_mapping()
773 domain = irq_default_domain; in irq_create_fwspec_mapping()
776 if (!domain) { in irq_create_fwspec_mapping()
777 pr_warn("no irq domain found for %s !\n", in irq_create_fwspec_mapping()
782 if (irq_domain_translate(domain, fwspec, &hwirq, &type)) in irq_create_fwspec_mapping()
796 virq = irq_find_mapping(domain, hwirq); in irq_create_fwspec_mapping()
824 if (irq_domain_is_hierarchy(domain)) { in irq_create_fwspec_mapping()
825 virq = irq_domain_alloc_irqs(domain, 1, NUMA_NO_NODE, fwspec); in irq_create_fwspec_mapping()
830 virq = irq_create_mapping(domain, hwirq); in irq_create_fwspec_mapping()
837 if (irq_domain_is_hierarchy(domain)) in irq_create_fwspec_mapping()
869 struct irq_domain *domain; in irq_dispose_mapping() local
874 domain = irq_data->domain; in irq_dispose_mapping()
875 if (WARN_ON(domain == NULL)) in irq_dispose_mapping()
878 if (irq_domain_is_hierarchy(domain)) { in irq_dispose_mapping()
881 irq_domain_disassociate(domain, virq); in irq_dispose_mapping()
889 * @domain: domain owning this hardware interrupt
890 * @hwirq: hardware irq number in that domain space
895 struct irq_desc *__irq_resolve_mapping(struct irq_domain *domain, in __irq_resolve_mapping() argument
902 /* Look for default domain if necessary */ in __irq_resolve_mapping()
903 if (domain == NULL) in __irq_resolve_mapping()
904 domain = irq_default_domain; in __irq_resolve_mapping()
905 if (domain == NULL) in __irq_resolve_mapping()
908 if (irq_domain_is_nomap(domain)) { in __irq_resolve_mapping()
909 if (hwirq < domain->hwirq_max) { in __irq_resolve_mapping()
910 data = irq_domain_get_irq_data(domain, hwirq); in __irq_resolve_mapping()
922 if (hwirq < domain->revmap_size) in __irq_resolve_mapping()
923 data = rcu_dereference(domain->revmap[hwirq]); in __irq_resolve_mapping()
925 data = radix_tree_lookup(&domain->revmap_tree, hwirq); in __irq_resolve_mapping()
1082 * @parent: Parent irq domain to associate with the new domain
1083 * @flags: Irq domain flags associated to the domain
1084 * @size: Size of the domain. See below
1086 * @ops: Pointer to the interrupt domain callbacks
1089 * If @size is 0 a tree domain is created, otherwise a linear domain.
1091 * If successful the parent is associated to the new domain and the
1092 * domain flags are set.
1093 * Returns pointer to IRQ domain, or NULL on failure.
1102 struct irq_domain *domain; in irq_domain_create_hierarchy() local
1105 domain = irq_domain_create_linear(fwnode, size, ops, host_data); in irq_domain_create_hierarchy()
1107 domain = irq_domain_create_tree(fwnode, ops, host_data); in irq_domain_create_hierarchy()
1108 if (domain) { in irq_domain_create_hierarchy()
1109 domain->parent = parent; in irq_domain_create_hierarchy()
1110 domain->flags |= flags; in irq_domain_create_hierarchy()
1113 return domain; in irq_domain_create_hierarchy()
1122 struct irq_domain *domain = data->domain; in irq_domain_insert_irq() local
1124 domain->mapcount++; in irq_domain_insert_irq()
1125 irq_domain_set_mapping(domain, data->hwirq, data); in irq_domain_insert_irq()
1127 /* If not already assigned, give the domain the chip's name */ in irq_domain_insert_irq()
1128 if (!domain->name && data->chip) in irq_domain_insert_irq()
1129 domain->name = data->chip->name; in irq_domain_insert_irq()
1145 struct irq_domain *domain = data->domain; in irq_domain_remove_irq() local
1148 domain->mapcount--; in irq_domain_remove_irq()
1149 irq_domain_clear_mapping(domain, hwirq); in irq_domain_remove_irq()
1153 static struct irq_data *irq_domain_insert_irq_data(struct irq_domain *domain, in irq_domain_insert_irq_data() argument
1164 irq_data->domain = domain; in irq_domain_insert_irq_data()
1190 irq_data->domain = NULL; in irq_domain_free_irq_data()
1198 * @domain: IRQ domain from which the hierarchy is to be disconnected
1201 * Marks the @virq level belonging to @domain as disconnected.
1203 * to @domain.
1209 int irq_domain_disconnect_hierarchy(struct irq_domain *domain, in irq_domain_disconnect_hierarchy() argument
1214 irqd = irq_domain_get_irq_data(domain, virq); in irq_domain_disconnect_hierarchy()
1261 virq, tail->parent_data->domain->name); in irq_domain_trim_hierarchy()
1272 static int irq_domain_alloc_irq_data(struct irq_domain *domain, in irq_domain_alloc_irq_data() argument
1282 irq_data->domain = domain; in irq_domain_alloc_irq_data()
1284 for (parent = domain->parent; parent; parent = parent->parent) { in irq_domain_alloc_irq_data()
1297 * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain
1298 * @domain: domain to match
1301 struct irq_data *irq_domain_get_irq_data(struct irq_domain *domain, in irq_domain_get_irq_data() argument
1308 if (irq_data->domain == domain) in irq_domain_get_irq_data()
1316 * irq_domain_set_hwirq_and_chip - Set hwirq and irqchip of @virq at @domain
1317 * @domain: Interrupt domain to match
1323 int irq_domain_set_hwirq_and_chip(struct irq_domain *domain, unsigned int virq, in irq_domain_set_hwirq_and_chip() argument
1328 struct irq_data *irq_data = irq_domain_get_irq_data(domain, virq); in irq_domain_set_hwirq_and_chip()
1342 * irq_domain_set_info - Set the complete data for a @virq in @domain
1343 * @domain: Interrupt domain to match
1352 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq, in irq_domain_set_info() argument
1357 irq_domain_set_hwirq_and_chip(domain, virq, hwirq, chip, chip_data); in irq_domain_set_info()
1365 * @domain: Interrupt domain to match
1369 void irq_domain_free_irqs_common(struct irq_domain *domain, unsigned int virq, in irq_domain_free_irqs_common() argument
1376 irq_data = irq_domain_get_irq_data(domain, virq + i); in irq_domain_free_irqs_common()
1380 irq_domain_free_irqs_parent(domain, virq, nr_irqs); in irq_domain_free_irqs_common()
1386 * @domain: Interrupt domain to match
1390 void irq_domain_free_irqs_top(struct irq_domain *domain, unsigned int virq, in irq_domain_free_irqs_top() argument
1399 irq_domain_free_irqs_common(domain, virq, nr_irqs); in irq_domain_free_irqs_top()
1402 static void irq_domain_free_irqs_hierarchy(struct irq_domain *domain, in irq_domain_free_irqs_hierarchy() argument
1408 if (!domain->ops->free) in irq_domain_free_irqs_hierarchy()
1412 if (irq_domain_get_irq_data(domain, irq_base + i)) in irq_domain_free_irqs_hierarchy()
1413 domain->ops->free(domain, irq_base + i, 1); in irq_domain_free_irqs_hierarchy()
1417 int irq_domain_alloc_irqs_hierarchy(struct irq_domain *domain, in irq_domain_alloc_irqs_hierarchy() argument
1421 if (!domain->ops->alloc) { in irq_domain_alloc_irqs_hierarchy()
1422 pr_debug("domain->ops->alloc() is NULL\n"); in irq_domain_alloc_irqs_hierarchy()
1426 return domain->ops->alloc(domain, irq_base, nr_irqs, arg); in irq_domain_alloc_irqs_hierarchy()
1430 * __irq_domain_alloc_irqs - Allocate IRQs from domain
1431 * @domain: domain to allocate from
1435 * @arg: domain specific argument
1451 int __irq_domain_alloc_irqs(struct irq_domain *domain, int irq_base, in __irq_domain_alloc_irqs() argument
1457 if (domain == NULL) { in __irq_domain_alloc_irqs()
1458 domain = irq_default_domain; in __irq_domain_alloc_irqs()
1459 if (WARN(!domain, "domain is NULL; cannot allocate IRQ\n")) in __irq_domain_alloc_irqs()
1475 if (irq_domain_alloc_irq_data(domain, virq, nr_irqs)) { in __irq_domain_alloc_irqs()
1482 ret = irq_domain_alloc_irqs_hierarchy(domain, virq, nr_irqs, arg); in __irq_domain_alloc_irqs()
1515 if (irq_domain_is_nomap(d->domain)) in irq_domain_fix_revmap()
1519 mutex_lock(&d->domain->revmap_mutex); in irq_domain_fix_revmap()
1520 if (d->hwirq < d->domain->revmap_size) { in irq_domain_fix_revmap()
1522 rcu_assign_pointer(d->domain->revmap[d->hwirq], d); in irq_domain_fix_revmap()
1524 slot = radix_tree_lookup_slot(&d->domain->revmap_tree, d->hwirq); in irq_domain_fix_revmap()
1526 radix_tree_replace_slot(&d->domain->revmap_tree, slot, d); in irq_domain_fix_revmap()
1528 mutex_unlock(&d->domain->revmap_mutex); in irq_domain_fix_revmap()
1532 * irq_domain_push_irq() - Push a domain in to the top of a hierarchy.
1533 * @domain: Domain to push.
1534 * @virq: Irq to push the domain in to.
1538 * via a call to pci_enable_msix(), add an additional domain to the
1542 int irq_domain_push_irq(struct irq_domain *domain, int virq, void *arg) in irq_domain_push_irq() argument
1564 if (domain == NULL) in irq_domain_push_irq()
1567 if (WARN_ON(!irq_domain_is_hierarchy(domain))) in irq_domain_push_irq()
1573 if (domain->parent != root_irq_data->domain) in irq_domain_push_irq()
1588 * irq_desc, with values for this domain. in irq_domain_push_irq()
1591 root_irq_data->domain = domain; in irq_domain_push_irq()
1598 rv = irq_domain_alloc_irqs_hierarchy(domain, virq, 1, arg); in irq_domain_push_irq()
1607 irq_domain_set_mapping(domain, root_irq_data->hwirq, root_irq_data); in irq_domain_push_irq()
1617 * irq_domain_pop_irq() - Remove a domain from the top of a hierarchy.
1618 * @domain: Domain to remove.
1619 * @virq: Irq to remove the domain from.
1624 int irq_domain_pop_irq(struct irq_domain *domain, int virq) in irq_domain_pop_irq() argument
1646 if (domain == NULL) in irq_domain_pop_irq()
1652 tmp_irq_data = irq_domain_get_irq_data(domain, virq); in irq_domain_pop_irq()
1654 /* We can only "pop" if this domain is at the top of the list */ in irq_domain_pop_irq()
1658 if (WARN_ON(root_irq_data->domain != domain)) in irq_domain_pop_irq()
1669 irq_domain_clear_mapping(domain, root_irq_data->hwirq); in irq_domain_pop_irq()
1670 irq_domain_free_irqs_hierarchy(domain, virq, 1); in irq_domain_pop_irq()
1695 if (WARN(!data || !data->domain || !data->domain->ops->free, in irq_domain_free_irqs()
1702 irq_domain_free_irqs_hierarchy(data->domain, virq, nr_irqs); in irq_domain_free_irqs()
1710 * irq_domain_alloc_irqs_parent - Allocate interrupts from parent domain
1711 * @domain: Domain below which interrupts must be allocated
1714 * @arg: Allocation data (arch/domain specific)
1716 int irq_domain_alloc_irqs_parent(struct irq_domain *domain, in irq_domain_alloc_irqs_parent() argument
1720 if (!domain->parent) in irq_domain_alloc_irqs_parent()
1723 return irq_domain_alloc_irqs_hierarchy(domain->parent, irq_base, in irq_domain_alloc_irqs_parent()
1729 * irq_domain_free_irqs_parent - Free interrupts from parent domain
1730 * @domain: Domain below which interrupts must be freed
1734 void irq_domain_free_irqs_parent(struct irq_domain *domain, in irq_domain_free_irqs_parent() argument
1737 if (!domain->parent) in irq_domain_free_irqs_parent()
1740 irq_domain_free_irqs_hierarchy(domain->parent, irq_base, nr_irqs); in irq_domain_free_irqs_parent()
1746 if (irq_data && irq_data->domain) { in __irq_domain_deactivate_irq()
1747 struct irq_domain *domain = irq_data->domain; in __irq_domain_deactivate_irq() local
1749 if (domain->ops->deactivate) in __irq_domain_deactivate_irq()
1750 domain->ops->deactivate(domain, irq_data); in __irq_domain_deactivate_irq()
1760 if (irqd && irqd->domain) { in __irq_domain_activate_irq()
1761 struct irq_domain *domain = irqd->domain; in __irq_domain_activate_irq() local
1766 if (!ret && domain->ops->activate) { in __irq_domain_activate_irq()
1767 ret = domain->ops->activate(domain, irqd, reserve); in __irq_domain_activate_irq()
1812 static void irq_domain_check_hierarchy(struct irq_domain *domain) in irq_domain_check_hierarchy() argument
1815 if (domain->ops->alloc) in irq_domain_check_hierarchy()
1816 domain->flags |= IRQ_DOMAIN_FLAG_HIERARCHY; in irq_domain_check_hierarchy()
1820 * irq_domain_hierarchical_is_msi_remap - Check if the domain or any
1822 * @domain: domain pointer
1824 bool irq_domain_hierarchical_is_msi_remap(struct irq_domain *domain) in irq_domain_hierarchical_is_msi_remap() argument
1826 for (; domain; domain = domain->parent) { in irq_domain_hierarchical_is_msi_remap()
1827 if (irq_domain_is_msi_remap(domain)) in irq_domain_hierarchical_is_msi_remap()
1834 * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain
1835 * @domain: domain to match
1838 struct irq_data *irq_domain_get_irq_data(struct irq_domain *domain, in irq_domain_get_irq_data() argument
1843 return (irq_data && irq_data->domain == domain) ? irq_data : NULL; in irq_domain_get_irq_data()
1848 * irq_domain_set_info - Set the complete data for a @virq in @domain
1849 * @domain: Interrupt domain to match
1858 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq, in irq_domain_set_info() argument
1868 static void irq_domain_check_hierarchy(struct irq_domain *domain) in irq_domain_check_hierarchy() argument
1897 /* Default domain? Might be NULL */ in irq_domain_debug_show()