Lines Matching refs:virq
562 int irq_domain_associate(struct irq_domain *domain, unsigned int virq, in irq_domain_associate() argument
565 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_domain_associate()
571 if (WARN(!irq_data, "error: virq%i is not allocated", virq)) in irq_domain_associate()
573 if (WARN(irq_data->domain, "error: virq%i is already associated", virq)) 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()
606 irq_clear_status_flags(virq, IRQ_NOREQUEST); in irq_domain_associate()
642 unsigned int virq; in irq_create_direct_mapping() local
648 virq = irq_alloc_desc_from(1, of_node_to_nid(of_node)); in irq_create_direct_mapping()
649 if (!virq) { in irq_create_direct_mapping()
653 if (virq >= domain->revmap_size) { in irq_create_direct_mapping()
656 irq_free_desc(virq); in irq_create_direct_mapping()
659 pr_debug("create_direct obtained virq %d\n", virq); in irq_create_direct_mapping()
661 if (irq_domain_associate(domain, virq, virq)) { in irq_create_direct_mapping()
662 irq_free_desc(virq); in irq_create_direct_mapping()
666 return virq; in irq_create_direct_mapping()
687 int virq; in irq_create_mapping_affinity() local
703 virq = irq_find_mapping(domain, hwirq); in irq_create_mapping_affinity()
704 if (virq) { in irq_create_mapping_affinity()
705 pr_debug("-> existing mapping on virq %d\n", virq); in irq_create_mapping_affinity()
706 return virq; in irq_create_mapping_affinity()
710 virq = irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node), in irq_create_mapping_affinity()
712 if (virq <= 0) { in irq_create_mapping_affinity()
717 if (irq_domain_associate(domain, virq, hwirq)) { in irq_create_mapping_affinity()
718 irq_free_desc(virq); in irq_create_mapping_affinity()
723 hwirq, of_node_full_name(of_node), virq); in irq_create_mapping_affinity()
725 return virq; in irq_create_mapping_affinity()
766 int virq; in irq_create_fwspec_mapping() local
796 virq = irq_find_mapping(domain, hwirq); in irq_create_fwspec_mapping()
797 if (virq) { in irq_create_fwspec_mapping()
803 if (type == IRQ_TYPE_NONE || type == irq_get_trigger_type(virq)) in irq_create_fwspec_mapping()
804 return virq; in irq_create_fwspec_mapping()
810 if (irq_get_trigger_type(virq) == IRQ_TYPE_NONE) { in irq_create_fwspec_mapping()
811 irq_data = irq_get_irq_data(virq); in irq_create_fwspec_mapping()
816 return virq; in irq_create_fwspec_mapping()
825 virq = irq_domain_alloc_irqs(domain, 1, NUMA_NO_NODE, fwspec); in irq_create_fwspec_mapping()
826 if (virq <= 0) in irq_create_fwspec_mapping()
830 virq = irq_create_mapping(domain, hwirq); in irq_create_fwspec_mapping()
831 if (!virq) in irq_create_fwspec_mapping()
832 return virq; in irq_create_fwspec_mapping()
835 irq_data = irq_get_irq_data(virq); in irq_create_fwspec_mapping()
838 irq_domain_free_irqs(virq, 1); in irq_create_fwspec_mapping()
840 irq_dispose_mapping(virq); in irq_create_fwspec_mapping()
847 return virq; in irq_create_fwspec_mapping()
866 void irq_dispose_mapping(unsigned int virq) in irq_dispose_mapping() argument
868 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_dispose_mapping()
871 if (!virq || !irq_data) in irq_dispose_mapping()
879 irq_domain_free_irqs(virq, 1); in irq_dispose_mapping()
881 irq_domain_disassociate(domain, virq); in irq_dispose_mapping()
882 irq_free_desc(virq); in irq_dispose_mapping()
1042 int irq_domain_alloc_descs(int virq, unsigned int cnt, irq_hw_number_t hwirq, in irq_domain_alloc_descs() argument
1047 if (virq >= 0) { in irq_domain_alloc_descs()
1048 virq = __irq_alloc_descs(virq, virq, cnt, node, THIS_MODULE, in irq_domain_alloc_descs()
1054 virq = __irq_alloc_descs(-1, hint, cnt, node, THIS_MODULE, in irq_domain_alloc_descs()
1056 if (virq <= 0 && hint > 1) { in irq_domain_alloc_descs()
1057 virq = __irq_alloc_descs(-1, 1, cnt, node, THIS_MODULE, in irq_domain_alloc_descs()
1062 return virq; in irq_domain_alloc_descs()
1115 static void irq_domain_insert_irq(int virq) in irq_domain_insert_irq() argument
1119 for (data = irq_get_irq_data(virq); data; data = data->parent_data) { in irq_domain_insert_irq()
1130 irq_clear_status_flags(virq, IRQ_NOREQUEST); in irq_domain_insert_irq()
1133 static void irq_domain_remove_irq(int virq) in irq_domain_remove_irq() argument
1137 irq_set_status_flags(virq, IRQ_NOREQUEST); in irq_domain_remove_irq()
1138 irq_set_chip_and_handler(virq, NULL, NULL); in irq_domain_remove_irq()
1139 synchronize_irq(virq); in irq_domain_remove_irq()
1142 for (data = irq_get_irq_data(virq); data; data = data->parent_data) { in irq_domain_remove_irq()
1179 static void irq_domain_free_irq_data(unsigned int virq, unsigned int nr_irqs) in irq_domain_free_irq_data() argument
1185 irq_data = irq_get_irq_data(virq + i); in irq_domain_free_irq_data()
1208 unsigned int virq) in irq_domain_disconnect_hierarchy() argument
1212 irqd = irq_domain_get_irq_data(domain, virq); in irq_domain_disconnect_hierarchy()
1221 static int irq_domain_trim_hierarchy(unsigned int virq) in irq_domain_trim_hierarchy() argument
1225 irq_data = irq_get_irq_data(virq); in irq_domain_trim_hierarchy()
1259 virq, tail->parent_data->domain->name); in irq_domain_trim_hierarchy()
1271 unsigned int virq, unsigned int nr_irqs) in irq_domain_alloc_irq_data() argument
1279 irq_data = irq_get_irq_data(virq + i); in irq_domain_alloc_irq_data()
1285 irq_domain_free_irq_data(virq, i + 1); in irq_domain_alloc_irq_data()
1300 unsigned int virq) in irq_domain_get_irq_data() argument
1304 for (irq_data = irq_get_irq_data(virq); irq_data; in irq_domain_get_irq_data()
1321 int irq_domain_set_hwirq_and_chip(struct irq_domain *domain, unsigned int virq, in irq_domain_set_hwirq_and_chip() argument
1325 struct irq_data *irq_data = irq_domain_get_irq_data(domain, virq); in irq_domain_set_hwirq_and_chip()
1349 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq, in irq_domain_set_info() argument
1354 irq_domain_set_hwirq_and_chip(domain, virq, hwirq, chip, chip_data); in irq_domain_set_info()
1355 __irq_set_handler(virq, handler, 0, handler_name); in irq_domain_set_info()
1356 irq_set_handler_data(virq, handler_data); in irq_domain_set_info()
1366 void irq_domain_free_irqs_common(struct irq_domain *domain, unsigned int virq, in irq_domain_free_irqs_common() argument
1373 irq_data = irq_domain_get_irq_data(domain, virq + i); in irq_domain_free_irqs_common()
1377 irq_domain_free_irqs_parent(domain, virq, nr_irqs); in irq_domain_free_irqs_common()
1387 void irq_domain_free_irqs_top(struct irq_domain *domain, unsigned int virq, in irq_domain_free_irqs_top() argument
1393 irq_set_handler_data(virq + i, NULL); in irq_domain_free_irqs_top()
1394 irq_set_handler(virq + i, NULL); in irq_domain_free_irqs_top()
1396 irq_domain_free_irqs_common(domain, virq, nr_irqs); in irq_domain_free_irqs_top()
1452 int i, ret, virq; in __irq_domain_alloc_irqs() local
1461 virq = irq_base; in __irq_domain_alloc_irqs()
1463 virq = irq_domain_alloc_descs(irq_base, nr_irqs, 0, node, in __irq_domain_alloc_irqs()
1465 if (virq < 0) { in __irq_domain_alloc_irqs()
1468 return virq; in __irq_domain_alloc_irqs()
1472 if (irq_domain_alloc_irq_data(domain, virq, nr_irqs)) { in __irq_domain_alloc_irqs()
1473 pr_debug("cannot allocate memory for IRQ%d\n", virq); in __irq_domain_alloc_irqs()
1479 ret = irq_domain_alloc_irqs_hierarchy(domain, virq, nr_irqs, arg); in __irq_domain_alloc_irqs()
1486 ret = irq_domain_trim_hierarchy(virq + i); in __irq_domain_alloc_irqs()
1494 irq_domain_insert_irq(virq + i); in __irq_domain_alloc_irqs()
1497 return virq; in __irq_domain_alloc_irqs()
1500 irq_domain_free_irq_data(virq, nr_irqs); in __irq_domain_alloc_irqs()
1502 irq_free_descs(virq, nr_irqs); in __irq_domain_alloc_irqs()
1539 int irq_domain_push_irq(struct irq_domain *domain, int virq, void *arg) in irq_domain_push_irq() argument
1542 struct irq_data *root_irq_data = irq_get_irq_data(virq); in irq_domain_push_irq()
1555 desc = irq_to_desc(virq); in irq_domain_push_irq()
1595 rv = irq_domain_alloc_irqs_hierarchy(domain, virq, 1, arg); in irq_domain_push_irq()
1621 int irq_domain_pop_irq(struct irq_domain *domain, int virq) in irq_domain_pop_irq() argument
1623 struct irq_data *root_irq_data = irq_get_irq_data(virq); in irq_domain_pop_irq()
1637 desc = irq_to_desc(virq); in irq_domain_pop_irq()
1649 tmp_irq_data = irq_domain_get_irq_data(domain, virq); in irq_domain_pop_irq()
1667 irq_domain_free_irqs_hierarchy(domain, virq, 1); in irq_domain_pop_irq()
1687 void irq_domain_free_irqs(unsigned int virq, unsigned int nr_irqs) in irq_domain_free_irqs() argument
1689 struct irq_data *data = irq_get_irq_data(virq); in irq_domain_free_irqs()
1698 irq_domain_remove_irq(virq + i); in irq_domain_free_irqs()
1699 irq_domain_free_irqs_hierarchy(data->domain, virq, nr_irqs); in irq_domain_free_irqs()
1702 irq_domain_free_irq_data(virq, nr_irqs); in irq_domain_free_irqs()
1703 irq_free_descs(virq, nr_irqs); in irq_domain_free_irqs()
1836 unsigned int virq) in irq_domain_get_irq_data() argument
1838 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_domain_get_irq_data()
1855 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq, in irq_domain_set_info() argument
1860 irq_set_chip_and_handler_name(virq, chip, handler, handler_name); in irq_domain_set_info()
1861 irq_set_chip_data(virq, chip_data); in irq_domain_set_info()
1862 irq_set_handler_data(virq, handler_data); in irq_domain_set_info()