Lines Matching defs:virq

32 static void irq_domain_free_one_irq(struct irq_domain *domain, unsigned int virq);
355 * static virq assignments (non-DT boot) then it will set that up correctly.
548 "virq%i doesn't exist; cannot disassociate\n", irq))
578 static int irq_domain_associate_locked(struct irq_domain *domain, unsigned int virq,
581 struct irq_data *irq_data = irq_get_irq_data(virq);
587 if (WARN(!irq_data, "error: virq%i is not allocated", virq))
589 if (WARN(irq_data->domain, "error: virq%i is already associated", virq))
595 ret = domain->ops->map(domain, virq, hwirq);
604 domain->name, hwirq, virq, ret);
615 irq_clear_status_flags(virq, IRQ_NOREQUEST);
620 int irq_domain_associate(struct irq_domain *domain, unsigned int virq,
626 ret = irq_domain_associate_locked(domain, virq, hwirq);
662 unsigned int virq;
668 virq = irq_alloc_desc_from(1, of_node_to_nid(of_node));
669 if (!virq) {
670 pr_debug("create_direct virq allocation failed\n");
673 if (virq >= domain->hwirq_max) {
676 irq_free_desc(virq);
679 pr_debug("create_direct obtained virq %d\n", virq);
681 if (irq_domain_associate(domain, virq, virq)) {
682 irq_free_desc(virq);
686 return virq;
696 int virq;
701 virq = irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node),
703 if (virq <= 0) {
704 pr_debug("-> virq allocation failed\n");
708 if (irq_domain_associate_locked(domain, virq, hwirq)) {
709 irq_free_desc(virq);
714 hwirq, of_node_full_name(of_node), virq);
716 return virq;
734 int virq;
747 virq = irq_find_mapping(domain, hwirq);
748 if (virq) {
749 pr_debug("existing mapping on virq %d\n", virq);
753 virq = irq_create_mapping_affinity_locked(domain, hwirq, affinity);
757 return virq;
798 int virq;
830 virq = irq_find_mapping(domain, hwirq);
831 if (virq) {
837 if (type == IRQ_TYPE_NONE || type == irq_get_trigger_type(virq))
844 if (irq_get_trigger_type(virq) == IRQ_TYPE_NONE) {
845 irq_data = irq_get_irq_data(virq);
847 virq = 0;
857 virq = 0;
864 virq = msi_device_domain_alloc_wired(domain, hwirq, type);
867 virq = irq_domain_alloc_irqs_locked(domain, -1, 1, NUMA_NO_NODE,
869 if (virq <= 0) {
870 virq = 0;
875 virq = irq_create_mapping_affinity_locked(domain, hwirq, NULL);
876 if (!virq)
880 irq_data = irq_get_irq_data(virq);
882 virq = 0;
891 return virq;
908 * @virq: linux irq number of the interrupt to unmap
910 void irq_dispose_mapping(unsigned int virq)
915 irq_data = virq ? irq_get_irq_data(virq) : NULL;
924 irq_domain_free_one_irq(domain, virq);
926 irq_domain_disassociate(domain, virq);
927 irq_free_desc(virq);
1089 int irq_domain_alloc_descs(int virq, unsigned int cnt, irq_hw_number_t hwirq,
1094 if (virq >= 0) {
1095 virq = __irq_alloc_descs(virq, virq, cnt, node, THIS_MODULE,
1101 virq = __irq_alloc_descs(-1, hint, cnt, node, THIS_MODULE,
1103 if (virq <= 0 && hint > 1) {
1104 virq = __irq_alloc_descs(-1, 1, cnt, node, THIS_MODULE,
1109 return virq;
1167 static void irq_domain_insert_irq(int virq)
1171 for (data = irq_get_irq_data(virq); data; data = data->parent_data) {
1178 irq_clear_status_flags(virq, IRQ_NOREQUEST);
1181 static void irq_domain_remove_irq(int virq)
1185 irq_set_status_flags(virq, IRQ_NOREQUEST);
1186 irq_set_chip_and_handler(virq, NULL, NULL);
1187 synchronize_irq(virq);
1190 for (data = irq_get_irq_data(virq); data; data = data->parent_data) {
1227 static void irq_domain_free_irq_data(unsigned int virq, unsigned int nr_irqs)
1233 irq_data = irq_get_irq_data(virq + i);
1245 * @virq: IRQ number where the hierarchy is to be trimmed
1247 * Marks the @virq level belonging to @domain as disconnected.
1248 * Returns -EINVAL if @virq doesn't have a valid irq_data pointing
1256 unsigned int virq)
1260 irqd = irq_domain_get_irq_data(domain, virq);
1269 static int irq_domain_trim_hierarchy(unsigned int virq)
1273 irq_data = irq_get_irq_data(virq);
1307 virq, tail->parent_data->domain->name);
1319 unsigned int virq, unsigned int nr_irqs)
1327 irq_data = irq_get_irq_data(virq + i);
1333 irq_domain_free_irq_data(virq, i + 1);
1343 * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain
1345 * @virq: IRQ number to get irq_data
1348 unsigned int virq)
1352 for (irq_data = irq_get_irq_data(virq); irq_data;
1362 * irq_domain_set_hwirq_and_chip - Set hwirq and irqchip of @virq at @domain
1364 * @virq: IRQ number
1369 int irq_domain_set_hwirq_and_chip(struct irq_domain *domain, unsigned int virq,
1374 struct irq_data *irq_data = irq_domain_get_irq_data(domain, virq);
1388 * irq_domain_set_info - Set the complete data for a @virq in @domain
1390 * @virq: IRQ number
1398 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq,
1403 irq_domain_set_hwirq_and_chip(domain, virq, hwirq, chip, chip_data);
1404 __irq_set_handler(virq, handler, 0, handler_name);
1405 irq_set_handler_data(virq, handler_data);
1412 * @virq: IRQ number to start with
1415 void irq_domain_free_irqs_common(struct irq_domain *domain, unsigned int virq,
1422 irq_data = irq_domain_get_irq_data(domain, virq + i);
1426 irq_domain_free_irqs_parent(domain, virq, nr_irqs);
1433 * @virq: IRQ number to start with
1436 void irq_domain_free_irqs_top(struct irq_domain *domain, unsigned int virq,
1442 irq_set_handler_data(virq + i, NULL);
1443 irq_set_handler(virq + i, NULL);
1445 irq_domain_free_irqs_common(domain, virq, nr_irqs);
1479 int i, ret, virq;
1482 virq = irq_base;
1484 virq = irq_domain_alloc_descs(irq_base, nr_irqs, 0, node,
1486 if (virq < 0) {
1489 return virq;
1493 if (irq_domain_alloc_irq_data(domain, virq, nr_irqs)) {
1494 pr_debug("cannot allocate memory for IRQ%d\n", virq);
1499 ret = irq_domain_alloc_irqs_hierarchy(domain, virq, nr_irqs, arg);
1504 ret = irq_domain_trim_hierarchy(virq + i);
1510 irq_domain_insert_irq(virq + i);
1512 return virq;
1515 irq_domain_free_irq_data(virq, nr_irqs);
1517 irq_free_descs(virq, nr_irqs);
1588 * @virq: Irq to push the domain in to.
1596 int irq_domain_push_irq(struct irq_domain *domain, int virq, void *arg)
1598 struct irq_data *irq_data = irq_get_irq_data(virq);
1604 * Check that no action has been set, which indicates the virq
1612 desc = irq_to_desc(virq);
1652 rv = irq_domain_alloc_irqs_hierarchy(domain, virq, 1, arg);
1672 * @virq: Irq to remove the domain from.
1677 int irq_domain_pop_irq(struct irq_domain *domain, int virq)
1679 struct irq_data *irq_data = irq_get_irq_data(virq);
1685 * Check that no action is set, which indicates the virq is in
1693 desc = irq_to_desc(virq);
1705 tmp_irq_data = irq_domain_get_irq_data(domain, virq);
1723 irq_domain_free_irqs_hierarchy(domain, virq, 1);
1740 * @virq: base IRQ number
1743 void irq_domain_free_irqs(unsigned int virq, unsigned int nr_irqs)
1745 struct irq_data *data = irq_get_irq_data(virq);
1757 irq_domain_remove_irq(virq + i);
1758 irq_domain_free_irqs_hierarchy(domain, virq, nr_irqs);
1761 irq_domain_free_irq_data(virq, nr_irqs);
1762 irq_free_descs(virq, nr_irqs);
1765 static void irq_domain_free_one_irq(struct irq_domain *domain, unsigned int virq)
1768 msi_device_domain_free_wired(domain, virq);
1770 irq_domain_free_irqs(virq, 1);
1884 * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain
1886 * @virq: IRQ number to get irq_data
1889 unsigned int virq)
1891 struct irq_data *irq_data = irq_get_irq_data(virq);
1898 * irq_domain_set_info - Set the complete data for a @virq in @domain
1900 * @virq: IRQ number
1908 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq,
1913 irq_set_chip_and_handler_name(virq, chip, handler, handler_name);
1914 irq_set_chip_data(virq, chip_data);
1915 irq_set_handler_data(virq, handler_data);
1926 static void irq_domain_free_one_irq(struct irq_domain *domain, unsigned int virq) { }