Lines Matching refs:virq

32 static void irq_domain_free_one_irq(struct irq_domain *domain, unsigned int virq);
682 static int irq_domain_associate_locked(struct irq_domain *domain, unsigned int virq, in irq_domain_associate_locked() argument
685 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_domain_associate_locked()
691 if (WARN(!irq_data, "error: virq%i is not allocated", virq)) in irq_domain_associate_locked()
693 if (WARN(irq_data->domain, "error: virq%i is already associated", virq)) in irq_domain_associate_locked()
699 ret = domain->ops->map(domain, virq, hwirq); in irq_domain_associate_locked()
708 domain->name, hwirq, virq, ret); in irq_domain_associate_locked()
719 irq_clear_status_flags(virq, IRQ_NOREQUEST); in irq_domain_associate_locked()
724 int irq_domain_associate(struct irq_domain *domain, unsigned int virq, in irq_domain_associate() argument
730 ret = irq_domain_associate_locked(domain, virq, hwirq); in irq_domain_associate()
766 unsigned int virq; in irq_create_direct_mapping() local
772 virq = irq_alloc_desc_from(1, of_node_to_nid(of_node)); in irq_create_direct_mapping()
773 if (!virq) { in irq_create_direct_mapping()
777 if (virq >= domain->hwirq_max) { in irq_create_direct_mapping()
780 irq_free_desc(virq); in irq_create_direct_mapping()
783 pr_debug("create_direct obtained virq %d\n", virq); in irq_create_direct_mapping()
785 if (irq_domain_associate(domain, virq, virq)) { in irq_create_direct_mapping()
786 irq_free_desc(virq); in irq_create_direct_mapping()
790 return virq; in irq_create_direct_mapping()
800 int virq; in irq_create_mapping_affinity_locked() local
805 virq = irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node), in irq_create_mapping_affinity_locked()
807 if (virq <= 0) { in irq_create_mapping_affinity_locked()
812 if (irq_domain_associate_locked(domain, virq, hwirq)) { in irq_create_mapping_affinity_locked()
813 irq_free_desc(virq); in irq_create_mapping_affinity_locked()
818 hwirq, of_node_full_name(of_node), virq); in irq_create_mapping_affinity_locked()
820 return virq; in irq_create_mapping_affinity_locked()
838 int virq; in irq_create_mapping_affinity() local
851 virq = irq_find_mapping(domain, hwirq); in irq_create_mapping_affinity()
852 if (virq) { in irq_create_mapping_affinity()
853 pr_debug("existing mapping on virq %d\n", virq); in irq_create_mapping_affinity()
857 virq = irq_create_mapping_affinity_locked(domain, hwirq, affinity); in irq_create_mapping_affinity()
861 return virq; in irq_create_mapping_affinity()
902 int virq; in irq_create_fwspec_mapping() local
934 virq = irq_find_mapping(domain, hwirq); in irq_create_fwspec_mapping()
935 if (virq) { in irq_create_fwspec_mapping()
941 if (type == IRQ_TYPE_NONE || type == irq_get_trigger_type(virq)) in irq_create_fwspec_mapping()
948 if (irq_get_trigger_type(virq) == IRQ_TYPE_NONE) { in irq_create_fwspec_mapping()
949 irq_data = irq_get_irq_data(virq); in irq_create_fwspec_mapping()
951 virq = 0; in irq_create_fwspec_mapping()
961 virq = 0; in irq_create_fwspec_mapping()
968 virq = msi_device_domain_alloc_wired(domain, hwirq, type); in irq_create_fwspec_mapping()
971 virq = irq_domain_alloc_irqs_locked(domain, -1, 1, NUMA_NO_NODE, in irq_create_fwspec_mapping()
973 if (virq <= 0) { in irq_create_fwspec_mapping()
974 virq = 0; in irq_create_fwspec_mapping()
979 virq = irq_create_mapping_affinity_locked(domain, hwirq, NULL); in irq_create_fwspec_mapping()
980 if (!virq) in irq_create_fwspec_mapping()
984 irq_data = irq_get_irq_data(virq); in irq_create_fwspec_mapping()
986 virq = 0; in irq_create_fwspec_mapping()
995 return virq; in irq_create_fwspec_mapping()
1014 void irq_dispose_mapping(unsigned int virq) in irq_dispose_mapping() argument
1019 irq_data = virq ? irq_get_irq_data(virq) : NULL; in irq_dispose_mapping()
1028 irq_domain_free_one_irq(domain, virq); in irq_dispose_mapping()
1030 irq_domain_disassociate(domain, virq); in irq_dispose_mapping()
1031 irq_free_desc(virq); in irq_dispose_mapping()
1219 int irq_domain_alloc_descs(int virq, unsigned int cnt, irq_hw_number_t hwirq, in irq_domain_alloc_descs() argument
1224 if (virq >= 0) { in irq_domain_alloc_descs()
1225 virq = __irq_alloc_descs(virq, virq, cnt, node, THIS_MODULE, in irq_domain_alloc_descs()
1231 virq = __irq_alloc_descs(-1, hint, cnt, node, THIS_MODULE, in irq_domain_alloc_descs()
1233 if (virq <= 0 && hint > 1) { in irq_domain_alloc_descs()
1234 virq = __irq_alloc_descs(-1, 1, cnt, node, THIS_MODULE, in irq_domain_alloc_descs()
1239 return virq; in irq_domain_alloc_descs()
1296 static void irq_domain_insert_irq(int virq) in irq_domain_insert_irq() argument
1300 for (data = irq_get_irq_data(virq); data; data = data->parent_data) { in irq_domain_insert_irq()
1307 irq_clear_status_flags(virq, IRQ_NOREQUEST); in irq_domain_insert_irq()
1310 static void irq_domain_remove_irq(int virq) in irq_domain_remove_irq() argument
1314 irq_set_status_flags(virq, IRQ_NOREQUEST); in irq_domain_remove_irq()
1315 irq_set_chip_and_handler(virq, NULL, NULL); in irq_domain_remove_irq()
1316 synchronize_irq(virq); in irq_domain_remove_irq()
1319 for (data = irq_get_irq_data(virq); data; data = data->parent_data) { in irq_domain_remove_irq()
1356 static void irq_domain_free_irq_data(unsigned int virq, unsigned int nr_irqs) in irq_domain_free_irq_data() argument
1362 irq_data = irq_get_irq_data(virq + i); in irq_domain_free_irq_data()
1385 unsigned int virq) in irq_domain_disconnect_hierarchy() argument
1389 irqd = irq_domain_get_irq_data(domain, virq); in irq_domain_disconnect_hierarchy()
1398 static int irq_domain_trim_hierarchy(unsigned int virq) in irq_domain_trim_hierarchy() argument
1402 irq_data = irq_get_irq_data(virq); in irq_domain_trim_hierarchy()
1436 virq, tail->parent_data->domain->name); in irq_domain_trim_hierarchy()
1448 unsigned int virq, unsigned int nr_irqs) in irq_domain_alloc_irq_data() argument
1456 irq_data = irq_get_irq_data(virq + i); in irq_domain_alloc_irq_data()
1462 irq_domain_free_irq_data(virq, i + 1); in irq_domain_alloc_irq_data()
1477 unsigned int virq) in irq_domain_get_irq_data() argument
1481 for (irq_data = irq_get_irq_data(virq); irq_data; in irq_domain_get_irq_data()
1498 int irq_domain_set_hwirq_and_chip(struct irq_domain *domain, unsigned int virq, in irq_domain_set_hwirq_and_chip() argument
1503 struct irq_data *irq_data = irq_domain_get_irq_data(domain, virq); in irq_domain_set_hwirq_and_chip()
1527 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq, in irq_domain_set_info() argument
1532 irq_domain_set_hwirq_and_chip(domain, virq, hwirq, chip, chip_data); in irq_domain_set_info()
1533 __irq_set_handler(virq, handler, 0, handler_name); in irq_domain_set_info()
1534 irq_set_handler_data(virq, handler_data); in irq_domain_set_info()
1544 void irq_domain_free_irqs_common(struct irq_domain *domain, unsigned int virq, in irq_domain_free_irqs_common() argument
1551 irq_data = irq_domain_get_irq_data(domain, virq + i); in irq_domain_free_irqs_common()
1555 irq_domain_free_irqs_parent(domain, virq, nr_irqs); in irq_domain_free_irqs_common()
1565 void irq_domain_free_irqs_top(struct irq_domain *domain, unsigned int virq, in irq_domain_free_irqs_top() argument
1571 irq_set_handler_data(virq + i, NULL); in irq_domain_free_irqs_top()
1572 irq_set_handler(virq + i, NULL); in irq_domain_free_irqs_top()
1574 irq_domain_free_irqs_common(domain, virq, nr_irqs); in irq_domain_free_irqs_top()
1608 int i, ret, virq; in irq_domain_alloc_irqs_locked() local
1611 virq = irq_base; in irq_domain_alloc_irqs_locked()
1613 virq = irq_domain_alloc_descs(irq_base, nr_irqs, 0, node, in irq_domain_alloc_irqs_locked()
1615 if (virq < 0) { in irq_domain_alloc_irqs_locked()
1618 return virq; in irq_domain_alloc_irqs_locked()
1622 if (irq_domain_alloc_irq_data(domain, virq, nr_irqs)) { in irq_domain_alloc_irqs_locked()
1623 pr_debug("cannot allocate memory for IRQ%d\n", virq); in irq_domain_alloc_irqs_locked()
1628 ret = irq_domain_alloc_irqs_hierarchy(domain, virq, nr_irqs, arg); in irq_domain_alloc_irqs_locked()
1633 ret = irq_domain_trim_hierarchy(virq + i); in irq_domain_alloc_irqs_locked()
1639 irq_domain_insert_irq(virq + i); in irq_domain_alloc_irqs_locked()
1641 return virq; in irq_domain_alloc_irqs_locked()
1644 irq_domain_free_irq_data(virq, nr_irqs); in irq_domain_alloc_irqs_locked()
1646 irq_free_descs(virq, nr_irqs); in irq_domain_alloc_irqs_locked()
1725 int irq_domain_push_irq(struct irq_domain *domain, int virq, void *arg) in irq_domain_push_irq() argument
1727 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_domain_push_irq()
1741 desc = irq_to_desc(virq); in irq_domain_push_irq()
1781 rv = irq_domain_alloc_irqs_hierarchy(domain, virq, 1, arg); in irq_domain_push_irq()
1806 int irq_domain_pop_irq(struct irq_domain *domain, int virq) in irq_domain_pop_irq() argument
1808 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_domain_pop_irq()
1822 desc = irq_to_desc(virq); in irq_domain_pop_irq()
1834 tmp_irq_data = irq_domain_get_irq_data(domain, virq); in irq_domain_pop_irq()
1852 irq_domain_free_irqs_hierarchy(domain, virq, 1); in irq_domain_pop_irq()
1872 void irq_domain_free_irqs(unsigned int virq, unsigned int nr_irqs) in irq_domain_free_irqs() argument
1874 struct irq_data *data = irq_get_irq_data(virq); in irq_domain_free_irqs()
1886 irq_domain_remove_irq(virq + i); in irq_domain_free_irqs()
1887 irq_domain_free_irqs_hierarchy(domain, virq, nr_irqs); in irq_domain_free_irqs()
1890 irq_domain_free_irq_data(virq, nr_irqs); in irq_domain_free_irqs()
1891 irq_free_descs(virq, nr_irqs); in irq_domain_free_irqs()
1894 static void irq_domain_free_one_irq(struct irq_domain *domain, unsigned int virq) in irq_domain_free_one_irq() argument
1897 msi_device_domain_free_wired(domain, virq); in irq_domain_free_one_irq()
1899 irq_domain_free_irqs(virq, 1); in irq_domain_free_one_irq()
2018 unsigned int virq) in irq_domain_get_irq_data() argument
2020 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_domain_get_irq_data()
2037 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq, in irq_domain_set_info() argument
2042 irq_set_chip_and_handler_name(virq, chip, handler, handler_name); in irq_domain_set_info()
2043 irq_set_chip_data(virq, chip_data); in irq_domain_set_info()
2044 irq_set_handler_data(virq, handler_data); in irq_domain_set_info()
2055 static void irq_domain_free_one_irq(struct irq_domain *domain, unsigned int virq) { } in irq_domain_free_one_irq() argument