Lines Matching refs:virq

26 static int irq_domain_alloc_descs(int virq, unsigned int nr_irqs,
337 int irq_domain_associate(struct irq_domain *domain, unsigned int virq, in irq_domain_associate() argument
340 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_domain_associate()
346 if (WARN(!irq_data, "error: virq%i is not allocated", virq)) in irq_domain_associate()
348 if (WARN(irq_data->domain, "error: virq%i is already associated", virq)) in irq_domain_associate()
355 ret = domain->ops->map(domain, virq, hwirq); in irq_domain_associate()
364 domain->name, hwirq, virq, ret); in irq_domain_associate()
378 domain->linear_revmap[hwirq] = virq; in irq_domain_associate()
386 irq_clear_status_flags(virq, IRQ_NOREQUEST); in irq_domain_associate()
421 unsigned int virq; in irq_create_direct_mapping() local
427 virq = irq_alloc_desc_from(1, of_node_to_nid(of_node)); in irq_create_direct_mapping()
428 if (!virq) { in irq_create_direct_mapping()
432 if (virq >= domain->revmap_direct_max_irq) { in irq_create_direct_mapping()
435 irq_free_desc(virq); in irq_create_direct_mapping()
438 pr_debug("create_direct obtained virq %d\n", virq); in irq_create_direct_mapping()
440 if (irq_domain_associate(domain, virq, virq)) { in irq_create_direct_mapping()
441 irq_free_desc(virq); in irq_create_direct_mapping()
445 return virq; in irq_create_direct_mapping()
463 int virq; in irq_create_mapping() local
479 virq = irq_find_mapping(domain, hwirq); in irq_create_mapping()
480 if (virq) { in irq_create_mapping()
481 pr_debug("-> existing mapping on virq %d\n", virq); in irq_create_mapping()
482 return virq; in irq_create_mapping()
486 virq = irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node)); in irq_create_mapping()
487 if (virq <= 0) { in irq_create_mapping()
492 if (irq_domain_associate(domain, virq, hwirq)) { in irq_create_mapping()
493 irq_free_desc(virq); in irq_create_mapping()
498 hwirq, of_node_full_name(of_node), virq); in irq_create_mapping()
500 return virq; in irq_create_mapping()
574 int virq; in irq_create_fwspec_mapping() local
595 virq = irq_find_mapping(domain, hwirq); in irq_create_fwspec_mapping()
596 if (virq) in irq_create_fwspec_mapping()
597 return virq; in irq_create_fwspec_mapping()
599 virq = irq_domain_alloc_irqs(domain, 1, NUMA_NO_NODE, fwspec); in irq_create_fwspec_mapping()
600 if (virq <= 0) in irq_create_fwspec_mapping()
604 virq = irq_create_mapping(domain, hwirq); in irq_create_fwspec_mapping()
605 if (!virq) in irq_create_fwspec_mapping()
606 return virq; in irq_create_fwspec_mapping()
611 type != irq_get_trigger_type(virq)) in irq_create_fwspec_mapping()
612 irq_set_irq_type(virq, type); in irq_create_fwspec_mapping()
613 return virq; in irq_create_fwspec_mapping()
630 void irq_dispose_mapping(unsigned int virq) in irq_dispose_mapping() argument
632 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_dispose_mapping()
635 if (!virq || !irq_data) in irq_dispose_mapping()
642 irq_domain_disassociate(domain, virq); in irq_dispose_mapping()
643 irq_free_desc(virq); in irq_dispose_mapping()
836 static int irq_domain_alloc_descs(int virq, unsigned int cnt, in irq_domain_alloc_descs() argument
841 if (virq >= 0) { in irq_domain_alloc_descs()
842 virq = irq_alloc_descs(virq, virq, cnt, node); in irq_domain_alloc_descs()
847 virq = irq_alloc_descs_from(hint, cnt, node); in irq_domain_alloc_descs()
848 if (virq <= 0 && hint > 1) in irq_domain_alloc_descs()
849 virq = irq_alloc_descs_from(1, cnt, node); in irq_domain_alloc_descs()
852 return virq; in irq_domain_alloc_descs()
892 static void irq_domain_insert_irq(int virq) in irq_domain_insert_irq() argument
896 for (data = irq_get_irq_data(virq); data; data = data->parent_data) { in irq_domain_insert_irq()
901 domain->linear_revmap[hwirq] = virq; in irq_domain_insert_irq()
913 irq_clear_status_flags(virq, IRQ_NOREQUEST); in irq_domain_insert_irq()
916 static void irq_domain_remove_irq(int virq) in irq_domain_remove_irq() argument
920 irq_set_status_flags(virq, IRQ_NOREQUEST); in irq_domain_remove_irq()
921 irq_set_chip_and_handler(virq, NULL, NULL); in irq_domain_remove_irq()
922 synchronize_irq(virq); in irq_domain_remove_irq()
925 for (data = irq_get_irq_data(virq); data; data = data->parent_data) { in irq_domain_remove_irq()
956 static void irq_domain_free_irq_data(unsigned int virq, unsigned int nr_irqs) in irq_domain_free_irq_data() argument
962 irq_data = irq_get_irq_data(virq + i); in irq_domain_free_irq_data()
976 unsigned int virq, unsigned int nr_irqs) in irq_domain_alloc_irq_data() argument
984 irq_data = irq_get_irq_data(virq + i); in irq_domain_alloc_irq_data()
990 irq_domain_free_irq_data(virq, i + 1); in irq_domain_alloc_irq_data()
1005 unsigned int virq) in irq_domain_get_irq_data() argument
1009 for (irq_data = irq_get_irq_data(virq); irq_data; in irq_domain_get_irq_data()
1025 int irq_domain_set_hwirq_and_chip(struct irq_domain *domain, unsigned int virq, in irq_domain_set_hwirq_and_chip() argument
1029 struct irq_data *irq_data = irq_domain_get_irq_data(domain, virq); in irq_domain_set_hwirq_and_chip()
1052 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq, in irq_domain_set_info() argument
1057 irq_domain_set_hwirq_and_chip(domain, virq, hwirq, chip, chip_data); in irq_domain_set_info()
1058 __irq_set_handler(virq, handler, 0, handler_name); in irq_domain_set_info()
1059 irq_set_handler_data(virq, handler_data); in irq_domain_set_info()
1079 void irq_domain_free_irqs_common(struct irq_domain *domain, unsigned int virq, in irq_domain_free_irqs_common() argument
1086 irq_data = irq_domain_get_irq_data(domain, virq + i); in irq_domain_free_irqs_common()
1090 irq_domain_free_irqs_parent(domain, virq, nr_irqs); in irq_domain_free_irqs_common()
1099 void irq_domain_free_irqs_top(struct irq_domain *domain, unsigned int virq, in irq_domain_free_irqs_top() argument
1105 irq_set_handler_data(virq + i, NULL); in irq_domain_free_irqs_top()
1106 irq_set_handler(virq + i, NULL); in irq_domain_free_irqs_top()
1108 irq_domain_free_irqs_common(domain, virq, nr_irqs); in irq_domain_free_irqs_top()
1173 int i, ret, virq; in __irq_domain_alloc_irqs() local
1187 virq = irq_base; in __irq_domain_alloc_irqs()
1189 virq = irq_domain_alloc_descs(irq_base, nr_irqs, 0, node); in __irq_domain_alloc_irqs()
1190 if (virq < 0) { in __irq_domain_alloc_irqs()
1193 return virq; in __irq_domain_alloc_irqs()
1197 if (irq_domain_alloc_irq_data(domain, virq, nr_irqs)) { in __irq_domain_alloc_irqs()
1198 pr_debug("cannot allocate memory for IRQ%d\n", virq); in __irq_domain_alloc_irqs()
1204 ret = irq_domain_alloc_irqs_recursive(domain, virq, nr_irqs, arg); in __irq_domain_alloc_irqs()
1210 irq_domain_insert_irq(virq + i); in __irq_domain_alloc_irqs()
1213 return virq; in __irq_domain_alloc_irqs()
1216 irq_domain_free_irq_data(virq, nr_irqs); in __irq_domain_alloc_irqs()
1218 irq_free_descs(virq, nr_irqs); in __irq_domain_alloc_irqs()
1227 void irq_domain_free_irqs(unsigned int virq, unsigned int nr_irqs) in irq_domain_free_irqs() argument
1229 struct irq_data *data = irq_get_irq_data(virq); in irq_domain_free_irqs()
1238 irq_domain_remove_irq(virq + i); in irq_domain_free_irqs()
1239 irq_domain_free_irqs_recursive(data->domain, virq, nr_irqs); in irq_domain_free_irqs()
1242 irq_domain_free_irq_data(virq, nr_irqs); in irq_domain_free_irqs()
1243 irq_free_descs(virq, nr_irqs); in irq_domain_free_irqs()
1340 unsigned int virq) in irq_domain_get_irq_data() argument
1342 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_domain_get_irq_data()
1358 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq, in irq_domain_set_info() argument
1363 irq_set_chip_and_handler_name(virq, chip, handler, handler_name); in irq_domain_set_info()
1364 irq_set_chip_data(virq, chip_data); in irq_domain_set_info()
1365 irq_set_handler_data(virq, handler_data); in irq_domain_set_info()