Lines Matching +full:irqs +full:- +full:map +full:- +full:range
1 // SPDX-License-Identifier: GPL-2.0
52 * __irq_domain_alloc_fwnode - Allocate a fwnode_handle suitable for
57 * @pa: Optional user-provided physical address
81 n = kasprintf(GFP_KERNEL, "%s-%d", name, id); in __irq_domain_alloc_fwnode()
94 fwid->type = type; in __irq_domain_alloc_fwnode()
95 fwid->name = n; in __irq_domain_alloc_fwnode()
96 fwid->pa = pa; in __irq_domain_alloc_fwnode()
97 fwid->fwnode.ops = &irqchip_fwnode_ops; in __irq_domain_alloc_fwnode()
98 return &fwid->fwnode; in __irq_domain_alloc_fwnode()
103 * irq_domain_free_fwnode - Free a non-OF-backed fwnode_handle
115 kfree(fwid->name); in irq_domain_free_fwnode()
140 switch (fwid->type) { in __irq_domain_create()
143 domain->fwnode = fwnode; in __irq_domain_create()
144 domain->name = kstrdup(fwid->name, GFP_KERNEL); in __irq_domain_create()
145 if (!domain->name) { in __irq_domain_create()
149 domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED; in __irq_domain_create()
152 domain->fwnode = fwnode; in __irq_domain_create()
153 domain->name = fwid->name; in __irq_domain_create()
173 domain->name = name; in __irq_domain_create()
174 domain->fwnode = fwnode; in __irq_domain_create()
175 domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED; in __irq_domain_create()
178 if (!domain->name) { in __irq_domain_create()
181 domain->name = kasprintf(GFP_KERNEL, "unknown-%d", in __irq_domain_create()
183 if (!domain->name) { in __irq_domain_create()
187 domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED; in __irq_domain_create()
193 INIT_RADIX_TREE(&domain->revmap_tree, GFP_KERNEL); in __irq_domain_create()
194 mutex_init(&domain->revmap_tree_mutex); in __irq_domain_create()
195 domain->ops = ops; in __irq_domain_create()
196 domain->host_data = host_data; in __irq_domain_create()
197 domain->hwirq_max = hwirq_max; in __irq_domain_create()
198 domain->revmap_size = size; in __irq_domain_create()
199 domain->revmap_direct_max_irq = direct_max; in __irq_domain_create()
209 list_add(&domain->link, &irq_domain_list); in __irq_domain_publish()
212 pr_debug("Added domain %s\n", domain->name); in __irq_domain_publish()
216 * __irq_domain_add() - Allocate a new irq_domain data structure
218 * @size: Size of linear map; 0 for radix mapping only
245 * irq_domain_remove() - Remove an irq domain.
257 WARN_ON(!radix_tree_empty(&domain->revmap_tree)); in irq_domain_remove()
259 list_del(&domain->link); in irq_domain_remove()
269 pr_debug("Removed domain %s\n", domain->name); in irq_domain_remove()
271 fwnode_handle_put(domain->fwnode); in irq_domain_remove()
272 if (domain->flags & IRQ_DOMAIN_NAME_ALLOCATED) in irq_domain_remove()
273 kfree(domain->name); in irq_domain_remove()
283 if (domain->bus_token == bus_token) in irq_domain_update_bus_token()
288 domain->bus_token = bus_token; in irq_domain_update_bus_token()
290 name = kasprintf(GFP_KERNEL, "%s-%d", domain->name, bus_token); in irq_domain_update_bus_token()
298 if (domain->flags & IRQ_DOMAIN_NAME_ALLOCATED) in irq_domain_update_bus_token()
299 kfree(domain->name); in irq_domain_update_bus_token()
301 domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED; in irq_domain_update_bus_token()
303 domain->name = name; in irq_domain_update_bus_token()
311 * irq_domain_add_simple() - Register an irq_domain and optionally map a range of irqs
313 * @size: total number of irqs in mapping
315 * pass zero to assign irqs on-the-fly. If first_irq is non-zero, then
316 * pre-map all of the irqs in the domain to virqs starting at first_irq.
321 * allocate irq_descs and map all of the hwirqs to virqs starting at first_irq.
325 * irqs get mapped dynamically on the fly. However, if the controller requires
326 * static virq assignments (non-DT boot) then it will set that up correctly.
346 pr_info("Cannot allocate irq_descs @ IRQ%d, assuming pre-allocated\n", in irq_domain_add_simple()
357 * irq_domain_add_legacy() - Allocate and register a legacy revmap irq_domain.
359 * @size: total number of irqs in legacy mapping
364 * @ops: map/unmap domain callbacks
367 * Note: the map() callback will be called before this function returns
390 * irq_find_matching_fwspec() - Locates a domain for a given fwspec
392 * @bus_token: domain-specific data
398 struct fwnode_handle *fwnode = fwspec->fwnode; in irq_find_matching_fwspec()
412 if (h->ops->select && fwspec->param_count) in irq_find_matching_fwspec()
413 rc = h->ops->select(h, fwspec, bus_token); in irq_find_matching_fwspec()
414 else if (h->ops->match) in irq_find_matching_fwspec()
415 rc = h->ops->match(h, to_of_node(fwnode), bus_token); in irq_find_matching_fwspec()
417 rc = ((fwnode != NULL) && (h->fwnode == fwnode) && in irq_find_matching_fwspec()
419 (h->bus_token == bus_token))); in irq_find_matching_fwspec()
432 * irq_domain_check_msi_remap - Check whether all MSI irq domains implement
457 * irq_set_default_host() - Set a "default" irq domain
463 * aren't properly represented in the device-tree.
474 * irq_get_default_host() - Retrieve the "default" irq domain
479 * systems that cannot implement a firmware->fwnode mapping (which
490 if (hwirq < domain->revmap_size) { in irq_domain_clear_mapping()
491 domain->linear_revmap[hwirq] = 0; in irq_domain_clear_mapping()
493 mutex_lock(&domain->revmap_tree_mutex); in irq_domain_clear_mapping()
494 radix_tree_delete(&domain->revmap_tree, hwirq); in irq_domain_clear_mapping()
495 mutex_unlock(&domain->revmap_tree_mutex); in irq_domain_clear_mapping()
503 if (hwirq < domain->revmap_size) { in irq_domain_set_mapping()
504 domain->linear_revmap[hwirq] = irq_data->irq; in irq_domain_set_mapping()
506 mutex_lock(&domain->revmap_tree_mutex); in irq_domain_set_mapping()
507 radix_tree_insert(&domain->revmap_tree, hwirq, irq_data); in irq_domain_set_mapping()
508 mutex_unlock(&domain->revmap_tree_mutex); in irq_domain_set_mapping()
517 if (WARN(!irq_data || irq_data->domain != domain, in irq_domain_disassociate()
521 hwirq = irq_data->hwirq; in irq_domain_disassociate()
534 if (domain->ops->unmap) in irq_domain_disassociate()
535 domain->ops->unmap(domain, irq); in irq_domain_disassociate()
538 irq_data->domain = NULL; in irq_domain_disassociate()
539 irq_data->hwirq = 0; in irq_domain_disassociate()
540 domain->mapcount--; in irq_domain_disassociate()
542 /* Clear reverse map for this hwirq */ in irq_domain_disassociate()
554 if (WARN(hwirq >= domain->hwirq_max, in irq_domain_associate_locked()
555 "error: hwirq 0x%x is too large for %s\n", (int)hwirq, domain->name)) in irq_domain_associate_locked()
556 return -EINVAL; in irq_domain_associate_locked()
558 return -EINVAL; in irq_domain_associate_locked()
559 if (WARN(irq_data->domain, "error: virq%i is already associated", virq)) in irq_domain_associate_locked()
560 return -EINVAL; in irq_domain_associate_locked()
562 irq_data->hwirq = hwirq; in irq_domain_associate_locked()
563 irq_data->domain = domain; in irq_domain_associate_locked()
564 if (domain->ops->map) { in irq_domain_associate_locked()
565 ret = domain->ops->map(domain, virq, hwirq); in irq_domain_associate_locked()
568 * If map() returns -EPERM, this interrupt is protected in irq_domain_associate_locked()
572 if (ret != -EPERM) { in irq_domain_associate_locked()
573 pr_info("%s didn't like hwirq-0x%lx to VIRQ%i mapping (rc=%d)\n", in irq_domain_associate_locked()
574 domain->name, hwirq, virq, ret); in irq_domain_associate_locked()
576 irq_data->domain = NULL; in irq_domain_associate_locked()
577 irq_data->hwirq = 0; in irq_domain_associate_locked()
582 if (!domain->name && irq_data->chip) in irq_domain_associate_locked()
583 domain->name = irq_data->chip->name; in irq_domain_associate_locked()
586 domain->mapcount++; in irq_domain_associate_locked()
624 * irq_create_direct_mapping() - Allocate an irq for direct mapping
647 if (virq >= domain->revmap_direct_max_irq) { in irq_create_direct_mapping()
648 pr_err("ERROR: no free irqs available below %i maximum\n", in irq_create_direct_mapping()
649 domain->revmap_direct_max_irq); in irq_create_direct_mapping()
674 virq = irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node), in irq_create_mapping_affinity_locked()
677 pr_debug("-> virq allocation failed\n"); in irq_create_mapping_affinity_locked()
693 * irq_create_mapping_affinity() - Map a hardware interrupt into linux irq space
735 * irq_create_strict_mappings() - Map a range of hw irqs to fixed linux irqs
736 * @domain: domain owning the interrupt range
737 * @irq_base: beginning of linux IRQ range
738 * @hwirq_base: beginning of hardware IRQ range
739 * @count: Number of interrupts to map
741 * This routine is used for allocating and mapping a range of hardware
742 * irqs to linux irqs where the linux irq numbers are at pre-defined
746 * Non-linear users can use irq_create_identity_mapping() for IRQ-at-a-time
774 if (d->ops->translate) in irq_domain_translate()
775 return d->ops->translate(d, fwspec, hwirq, type); in irq_domain_translate()
777 if (d->ops->xlate) in irq_domain_translate()
778 return d->ops->xlate(d, to_of_node(fwspec->fwnode), in irq_domain_translate()
779 fwspec->param, fwspec->param_count, in irq_domain_translate()
783 *hwirq = fwspec->param[0]; in irq_domain_translate()
793 fwspec->fwnode = np ? &np->fwnode : NULL; in of_phandle_args_to_fwspec()
794 fwspec->param_count = count; in of_phandle_args_to_fwspec()
797 fwspec->param[i] = args[i]; in of_phandle_args_to_fwspec()
808 if (fwspec->fwnode) { in irq_create_fwspec_mapping()
818 of_node_full_name(to_of_node(fwspec->fwnode))); in irq_create_fwspec_mapping()
863 pr_warn("type mismatch, failed to map hwirq-%lu for %s!\n", in irq_create_fwspec_mapping()
864 hwirq, of_node_full_name(to_of_node(fwspec->fwnode))); in irq_create_fwspec_mapping()
870 virq = irq_domain_alloc_irqs_locked(domain, -1, 1, NUMA_NO_NODE, in irq_create_fwspec_mapping()
902 of_phandle_args_to_fwspec(irq_data->np, irq_data->args, in irq_create_of_mapping()
903 irq_data->args_count, &fwspec); in irq_create_of_mapping()
910 * irq_dispose_mapping() - Unmap an interrupt
921 domain = irq_data->domain; in irq_dispose_mapping()
935 * irq_find_mapping() - Find a linux irq from a hw irq number.
950 if (hwirq < domain->revmap_direct_max_irq) { in irq_find_mapping()
952 if (data && data->hwirq == hwirq) in irq_find_mapping()
957 if (hwirq < domain->revmap_size) in irq_find_mapping()
958 return domain->linear_revmap[hwirq]; in irq_find_mapping()
961 data = radix_tree_lookup(&domain->revmap_tree, hwirq); in irq_find_mapping()
963 return data ? data->irq : 0; in irq_find_mapping()
968 * irq_domain_xlate_onecell() - Generic xlate for direct one cell bindings
978 return -EINVAL; in irq_domain_xlate_onecell()
986 * irq_domain_xlate_twocell() - Generic xlate for direct two cell bindings
989 * bindings where the cell values map directly to the hwirq number
1004 * irq_domain_xlate_onetwocell() - Generic xlate for one or two cell bindings
1007 * or two cell bindings where the cell values map directly to the hwirq number
1020 return -EINVAL; in irq_domain_xlate_onetwocell()
1036 * irq_domain_translate_onecell() - Generic translate for direct one cell
1044 if (WARN_ON(fwspec->param_count < 1)) in irq_domain_translate_onecell()
1045 return -EINVAL; in irq_domain_translate_onecell()
1046 *out_hwirq = fwspec->param[0]; in irq_domain_translate_onecell()
1053 * irq_domain_translate_twocell() - Generic translate for direct two cell
1057 * bindings where the cell values map directly to the hwirq number
1065 if (WARN_ON(fwspec->param_count < 2)) in irq_domain_translate_twocell()
1066 return -EINVAL; in irq_domain_translate_twocell()
1067 *out_hwirq = fwspec->param[0]; in irq_domain_translate_twocell()
1068 *out_type = fwspec->param[1] & IRQ_TYPE_SENSE_MASK; in irq_domain_translate_twocell()
1085 virq = __irq_alloc_descs(-1, hint, cnt, node, THIS_MODULE, in irq_domain_alloc_descs()
1088 virq = __irq_alloc_descs(-1, 1, cnt, node, THIS_MODULE, in irq_domain_alloc_descs()
1097 * irq_domain_reset_irq_data - Clear hwirq, chip and chip_data in @irq_data
1102 irq_data->hwirq = 0; in irq_domain_reset_irq_data()
1103 irq_data->chip = &no_irq_chip; in irq_domain_reset_irq_data()
1104 irq_data->chip_data = NULL; in irq_domain_reset_irq_data()
1110 * irq_domain_create_hierarchy - Add a irqdomain into the hierarchy
1139 domain->parent = parent; in irq_domain_create_hierarchy()
1140 domain->flags |= flags; in irq_domain_create_hierarchy()
1153 for (data = irq_get_irq_data(virq); data; data = data->parent_data) { in irq_domain_insert_irq()
1154 struct irq_domain *domain = data->domain; in irq_domain_insert_irq()
1156 domain->mapcount++; in irq_domain_insert_irq()
1157 irq_domain_set_mapping(domain, data->hwirq, data); in irq_domain_insert_irq()
1160 if (!domain->name && data->chip) in irq_domain_insert_irq()
1161 domain->name = data->chip->name; in irq_domain_insert_irq()
1176 for (data = irq_get_irq_data(virq); data; data = data->parent_data) { in irq_domain_remove_irq()
1177 struct irq_domain *domain = data->domain; in irq_domain_remove_irq()
1178 irq_hw_number_t hwirq = data->hwirq; in irq_domain_remove_irq()
1180 domain->mapcount--; in irq_domain_remove_irq()
1193 child->parent_data = irq_data; in irq_domain_insert_irq_data()
1194 irq_data->irq = child->irq; in irq_domain_insert_irq_data()
1195 irq_data->common = child->common; in irq_domain_insert_irq_data()
1196 irq_data->domain = domain; in irq_domain_insert_irq_data()
1208 irq_data = irq_data->parent_data; in __irq_domain_free_hierarchy()
1220 tmp = irq_data->parent_data; in irq_domain_free_irq_data()
1221 irq_data->parent_data = NULL; in irq_domain_free_irq_data()
1222 irq_data->domain = NULL; in irq_domain_free_irq_data()
1229 * irq_domain_disconnect_hierarchy - Mark the first unused level of a hierarchy
1234 * Returns -EINVAL if @virq doesn't have a valid irq_data pointing
1248 return -EINVAL; in irq_domain_disconnect_hierarchy()
1250 irqd->chip = ERR_PTR(-ENOTCONN); in irq_domain_disconnect_hierarchy()
1262 if (!irq_data->chip || IS_ERR(irq_data->chip)) in irq_domain_trim_hierarchy()
1263 return -EINVAL; in irq_domain_trim_hierarchy()
1269 for (irqd = irq_data->parent_data; irqd; irq_data = irqd, irqd = irqd->parent_data) { in irq_domain_trim_hierarchy()
1271 if (irqd->chip && tail) in irq_domain_trim_hierarchy()
1272 return -EINVAL; in irq_domain_trim_hierarchy()
1275 if (!irqd->chip && !tail) in irq_domain_trim_hierarchy()
1276 return -EINVAL; in irq_domain_trim_hierarchy()
1278 if (IS_ERR(irqd->chip)) { in irq_domain_trim_hierarchy()
1279 /* Only -ENOTCONN is a valid trim marker */ in irq_domain_trim_hierarchy()
1280 if (PTR_ERR(irqd->chip) != -ENOTCONN) in irq_domain_trim_hierarchy()
1281 return -EINVAL; in irq_domain_trim_hierarchy()
1292 virq, tail->parent_data->domain->name); in irq_domain_trim_hierarchy()
1296 tail = tail->parent_data; in irq_domain_trim_hierarchy()
1297 irqd->parent_data = NULL; in irq_domain_trim_hierarchy()
1313 irq_data->domain = domain; in irq_domain_alloc_irq_data()
1315 for (parent = domain->parent; parent; parent = parent->parent) { in irq_domain_alloc_irq_data()
1319 return -ENOMEM; in irq_domain_alloc_irq_data()
1328 * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain
1338 irq_data = irq_data->parent_data) in irq_domain_get_irq_data()
1339 if (irq_data->domain == domain) in irq_domain_get_irq_data()
1347 * irq_domain_set_hwirq_and_chip - Set hwirq and irqchip of @virq at @domain
1361 return -ENOENT; in irq_domain_set_hwirq_and_chip()
1363 irq_data->hwirq = hwirq; in irq_domain_set_hwirq_and_chip()
1364 irq_data->chip = chip ? chip : &no_irq_chip; in irq_domain_set_hwirq_and_chip()
1365 irq_data->chip_data = chip_data; in irq_domain_set_hwirq_and_chip()
1372 * irq_domain_set_info - Set the complete data for a @virq in @domain
1394 * irq_domain_free_irqs_common - Clear irq_data and free the parent
1397 * @nr_irqs: The number of irqs to free
1415 * irq_domain_free_irqs_top - Clear handler and handler data, clear irqdata and free parent
1418 * @nr_irqs: The number of irqs to free
1438 if (!domain->ops->free) in irq_domain_free_irqs_hierarchy()
1443 domain->ops->free(domain, irq_base + i, 1); in irq_domain_free_irqs_hierarchy()
1451 if (!domain->ops->alloc) { in irq_domain_alloc_irqs_hierarchy()
1452 pr_debug("domain->ops->alloc() is NULL\n"); in irq_domain_alloc_irqs_hierarchy()
1453 return -ENOSYS; in irq_domain_alloc_irqs_hierarchy()
1456 return domain->ops->alloc(domain, irq_base, nr_irqs, arg); in irq_domain_alloc_irqs_hierarchy()
1479 ret = -ENOMEM; in irq_domain_alloc_irqs_locked()
1506 * __irq_domain_alloc_irqs - Allocate IRQs from domain
1509 * @nr_irqs: number of IRQs to allocate
1517 * Parameter @realloc is mainly to support legacy IRQs.
1536 return -EINVAL; in __irq_domain_alloc_irqs()
1552 if (d->hwirq < d->domain->revmap_size) in irq_domain_fix_revmap()
1556 mutex_lock(&d->domain->revmap_tree_mutex); in irq_domain_fix_revmap()
1557 slot = radix_tree_lookup_slot(&d->domain->revmap_tree, d->hwirq); in irq_domain_fix_revmap()
1559 radix_tree_replace_slot(&d->domain->revmap_tree, slot, d); in irq_domain_fix_revmap()
1560 mutex_unlock(&d->domain->revmap_tree_mutex); in irq_domain_fix_revmap()
1564 * irq_domain_push_irq() - Push a domain in to the top of a hierarchy.
1587 * calls to struct irq_domain_ops->alloc(), which could lead in irq_domain_push_irq()
1592 return -EINVAL; in irq_domain_push_irq()
1593 if (WARN_ON(desc->action)) in irq_domain_push_irq()
1594 return -EBUSY; in irq_domain_push_irq()
1597 return -EINVAL; in irq_domain_push_irq()
1600 return -EINVAL; in irq_domain_push_irq()
1603 return -EINVAL; in irq_domain_push_irq()
1605 if (domain->parent != root_irq_data->domain) in irq_domain_push_irq()
1606 return -EINVAL; in irq_domain_push_irq()
1611 return -ENOMEM; in irq_domain_push_irq()
1622 root_irq_data->parent_data = child_irq_data; in irq_domain_push_irq()
1623 root_irq_data->domain = domain; in irq_domain_push_irq()
1624 root_irq_data->mask = 0; in irq_domain_push_irq()
1625 root_irq_data->hwirq = 0; in irq_domain_push_irq()
1626 root_irq_data->chip = NULL; in irq_domain_push_irq()
1627 root_irq_data->chip_data = NULL; in irq_domain_push_irq()
1639 irq_domain_set_mapping(domain, root_irq_data->hwirq, root_irq_data); in irq_domain_push_irq()
1649 * irq_domain_pop_irq() - Remove a domain from the top of a hierarchy.
1669 * struct irq_domain_ops->free(), which could lead to in irq_domain_pop_irq()
1674 return -EINVAL; in irq_domain_pop_irq()
1675 if (WARN_ON(desc->action)) in irq_domain_pop_irq()
1676 return -EBUSY; in irq_domain_pop_irq()
1679 return -EINVAL; in irq_domain_pop_irq()
1682 return -EINVAL; in irq_domain_pop_irq()
1688 return -EINVAL; in irq_domain_pop_irq()
1690 if (WARN_ON(root_irq_data->domain != domain)) in irq_domain_pop_irq()
1691 return -EINVAL; in irq_domain_pop_irq()
1693 child_irq_data = root_irq_data->parent_data; in irq_domain_pop_irq()
1695 return -EINVAL; in irq_domain_pop_irq()
1699 root_irq_data->parent_data = NULL; in irq_domain_pop_irq()
1701 irq_domain_clear_mapping(domain, root_irq_data->hwirq); in irq_domain_pop_irq()
1718 * irq_domain_free_irqs - Free IRQ number and associated data structures
1720 * @nr_irqs: number of IRQs to free
1727 if (WARN(!data || !data->domain || !data->domain->ops->free, in irq_domain_free_irqs()
1734 irq_domain_free_irqs_hierarchy(data->domain, virq, nr_irqs); in irq_domain_free_irqs()
1742 * irq_domain_alloc_irqs_parent - Allocate interrupts from parent domain
1744 * @nr_irqs: Number of IRQs to allocate
1754 if (!domain->parent) in irq_domain_alloc_irqs_parent()
1755 return -ENOSYS; in irq_domain_alloc_irqs_parent()
1757 return irq_domain_alloc_irqs_hierarchy(domain->parent, irq_base, in irq_domain_alloc_irqs_parent()
1763 * irq_domain_free_irqs_parent - Free interrupts from parent domain
1765 * @nr_irqs: Number of IRQs to free
1773 if (!domain->parent) in irq_domain_free_irqs_parent()
1776 irq_domain_free_irqs_hierarchy(domain->parent, irq_base, nr_irqs); in irq_domain_free_irqs_parent()
1782 if (irq_data && irq_data->domain) { in __irq_domain_deactivate_irq()
1783 struct irq_domain *domain = irq_data->domain; in __irq_domain_deactivate_irq()
1785 if (domain->ops->deactivate) in __irq_domain_deactivate_irq()
1786 domain->ops->deactivate(domain, irq_data); in __irq_domain_deactivate_irq()
1787 if (irq_data->parent_data) in __irq_domain_deactivate_irq()
1788 __irq_domain_deactivate_irq(irq_data->parent_data); in __irq_domain_deactivate_irq()
1796 if (irqd && irqd->domain) { in __irq_domain_activate_irq()
1797 struct irq_domain *domain = irqd->domain; in __irq_domain_activate_irq()
1799 if (irqd->parent_data) in __irq_domain_activate_irq()
1800 ret = __irq_domain_activate_irq(irqd->parent_data, in __irq_domain_activate_irq()
1802 if (!ret && domain->ops->activate) { in __irq_domain_activate_irq()
1803 ret = domain->ops->activate(domain, irqd, reserve); in __irq_domain_activate_irq()
1805 if (ret && irqd->parent_data) in __irq_domain_activate_irq()
1806 __irq_domain_deactivate_irq(irqd->parent_data); in __irq_domain_activate_irq()
1813 * irq_domain_activate_irq - Call domain_ops->activate recursively to activate
1818 * This is the second step to call domain_ops->activate to program interrupt
1833 * irq_domain_deactivate_irq - Call domain_ops->deactivate recursively to
1837 * It calls domain_ops->deactivate to program interrupt controllers to disable
1851 if (domain->ops->alloc) in irq_domain_check_hierarchy()
1852 domain->flags |= IRQ_DOMAIN_FLAG_HIERARCHY; in irq_domain_check_hierarchy()
1856 * irq_domain_hierarchical_is_msi_remap - Check if the domain or any
1862 for (; domain; domain = domain->parent) { in irq_domain_hierarchical_is_msi_remap()
1870 * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain
1879 return (irq_data && irq_data->domain == domain) ? irq_data : NULL; in irq_domain_get_irq_data()
1884 * irq_domain_set_info - Set the complete data for a @virq in @domain
1908 return -EINVAL; in irq_domain_alloc_irqs_locked()
1922 seq_printf(m, "%*sname: %s\n", ind, "", d->name); in irq_domain_debug_show_one()
1924 d->revmap_size + d->revmap_direct_max_irq); in irq_domain_debug_show_one()
1925 seq_printf(m, "%*smapped: %u\n", ind + 1, "", d->mapcount); in irq_domain_debug_show_one()
1926 seq_printf(m, "%*sflags: 0x%08x\n", ind +1 , "", d->flags); in irq_domain_debug_show_one()
1927 if (d->ops && d->ops->debug_show) in irq_domain_debug_show_one()
1928 d->ops->debug_show(m, d, NULL, ind + 1); in irq_domain_debug_show_one()
1930 if (!d->parent) in irq_domain_debug_show_one()
1932 seq_printf(m, "%*sparent: %s\n", ind + 1, "", d->parent->name); in irq_domain_debug_show_one()
1933 irq_domain_debug_show_one(m, d->parent, ind + 4); in irq_domain_debug_show_one()
1939 struct irq_domain *d = m->private; in irq_domain_debug_show()
1954 if (!d->name || !domain_dir || d->debugfs_file) in debugfs_add_domain_dir()
1956 d->debugfs_file = debugfs_create_file(d->name, 0444, domain_dir, d, in debugfs_add_domain_dir()
1962 debugfs_remove(d->debugfs_file); in debugfs_remove_domain_dir()
1963 d->debugfs_file = NULL; in debugfs_remove_domain_dir()