Lines Matching refs:virq

26 static int irq_domain_alloc_descs(int virq, unsigned int nr_irqs,
273 int irq_domain_associate(struct irq_domain *domain, unsigned int virq, in irq_domain_associate() argument
276 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_domain_associate()
282 if (WARN(!irq_data, "error: virq%i is not allocated", virq)) in irq_domain_associate()
284 if (WARN(irq_data->domain, "error: virq%i is already associated", virq)) in irq_domain_associate()
291 ret = domain->ops->map(domain, virq, hwirq); in irq_domain_associate()
300 domain->name, hwirq, virq, ret); in irq_domain_associate()
314 domain->linear_revmap[hwirq] = virq; in irq_domain_associate()
322 irq_clear_status_flags(virq, IRQ_NOREQUEST); in irq_domain_associate()
354 unsigned int virq; in irq_create_direct_mapping() local
359 virq = irq_alloc_desc_from(1, of_node_to_nid(domain->of_node)); in irq_create_direct_mapping()
360 if (!virq) { in irq_create_direct_mapping()
364 if (virq >= domain->revmap_direct_max_irq) { in irq_create_direct_mapping()
367 irq_free_desc(virq); in irq_create_direct_mapping()
370 pr_debug("create_direct obtained virq %d\n", virq); in irq_create_direct_mapping()
372 if (irq_domain_associate(domain, virq, virq)) { in irq_create_direct_mapping()
373 irq_free_desc(virq); in irq_create_direct_mapping()
377 return virq; in irq_create_direct_mapping()
394 int virq; in irq_create_mapping() local
408 virq = irq_find_mapping(domain, hwirq); in irq_create_mapping()
409 if (virq) { in irq_create_mapping()
410 pr_debug("-> existing mapping on virq %d\n", virq); in irq_create_mapping()
411 return virq; in irq_create_mapping()
415 virq = irq_domain_alloc_descs(-1, 1, hwirq, in irq_create_mapping()
417 if (virq <= 0) { in irq_create_mapping()
422 if (irq_domain_associate(domain, virq, hwirq)) { in irq_create_mapping()
423 irq_free_desc(virq); in irq_create_mapping()
428 hwirq, of_node_full_name(domain->of_node), virq); in irq_create_mapping()
430 return virq; in irq_create_mapping()
472 int virq; in irq_create_of_mapping() local
495 virq = irq_find_mapping(domain, hwirq); in irq_create_of_mapping()
496 if (virq) in irq_create_of_mapping()
497 return virq; in irq_create_of_mapping()
499 virq = irq_domain_alloc_irqs(domain, 1, NUMA_NO_NODE, irq_data); in irq_create_of_mapping()
500 if (virq <= 0) in irq_create_of_mapping()
504 virq = irq_create_mapping(domain, hwirq); in irq_create_of_mapping()
505 if (!virq) in irq_create_of_mapping()
506 return virq; in irq_create_of_mapping()
511 type != irq_get_trigger_type(virq)) in irq_create_of_mapping()
512 irq_set_irq_type(virq, type); in irq_create_of_mapping()
513 return virq; in irq_create_of_mapping()
521 void irq_dispose_mapping(unsigned int virq) in irq_dispose_mapping() argument
523 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_dispose_mapping()
526 if (!virq || !irq_data) in irq_dispose_mapping()
533 irq_domain_disassociate(domain, virq); in irq_dispose_mapping()
534 irq_free_desc(virq); in irq_dispose_mapping()
725 static int irq_domain_alloc_descs(int virq, unsigned int cnt, in irq_domain_alloc_descs() argument
730 if (virq >= 0) { in irq_domain_alloc_descs()
731 virq = irq_alloc_descs(virq, virq, cnt, node); in irq_domain_alloc_descs()
736 virq = irq_alloc_descs_from(hint, cnt, node); in irq_domain_alloc_descs()
737 if (virq <= 0 && hint > 1) in irq_domain_alloc_descs()
738 virq = irq_alloc_descs_from(1, cnt, node); in irq_domain_alloc_descs()
741 return virq; in irq_domain_alloc_descs()
781 static void irq_domain_insert_irq(int virq) in irq_domain_insert_irq() argument
785 for (data = irq_get_irq_data(virq); data; data = data->parent_data) { in irq_domain_insert_irq()
790 domain->linear_revmap[hwirq] = virq; in irq_domain_insert_irq()
802 irq_clear_status_flags(virq, IRQ_NOREQUEST); in irq_domain_insert_irq()
805 static void irq_domain_remove_irq(int virq) in irq_domain_remove_irq() argument
809 irq_set_status_flags(virq, IRQ_NOREQUEST); in irq_domain_remove_irq()
810 irq_set_chip_and_handler(virq, NULL, NULL); in irq_domain_remove_irq()
811 synchronize_irq(virq); in irq_domain_remove_irq()
814 for (data = irq_get_irq_data(virq); data; data = data->parent_data) { in irq_domain_remove_irq()
844 static void irq_domain_free_irq_data(unsigned int virq, unsigned int nr_irqs) in irq_domain_free_irq_data() argument
850 irq_data = irq_get_irq_data(virq + i); in irq_domain_free_irq_data()
864 unsigned int virq, unsigned int nr_irqs) in irq_domain_alloc_irq_data() argument
872 irq_data = irq_get_irq_data(virq + i); in irq_domain_alloc_irq_data()
878 irq_domain_free_irq_data(virq, i + 1); in irq_domain_alloc_irq_data()
893 unsigned int virq) in irq_domain_get_irq_data() argument
897 for (irq_data = irq_get_irq_data(virq); irq_data; in irq_domain_get_irq_data()
913 int irq_domain_set_hwirq_and_chip(struct irq_domain *domain, unsigned int virq, in irq_domain_set_hwirq_and_chip() argument
917 struct irq_data *irq_data = irq_domain_get_irq_data(domain, virq); in irq_domain_set_hwirq_and_chip()
940 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq, in irq_domain_set_info() argument
945 irq_domain_set_hwirq_and_chip(domain, virq, hwirq, chip, chip_data); in irq_domain_set_info()
946 __irq_set_handler(virq, handler, 0, handler_name); in irq_domain_set_info()
947 irq_set_handler_data(virq, handler_data); in irq_domain_set_info()
967 void irq_domain_free_irqs_common(struct irq_domain *domain, unsigned int virq, in irq_domain_free_irqs_common() argument
974 irq_data = irq_domain_get_irq_data(domain, virq + i); in irq_domain_free_irqs_common()
978 irq_domain_free_irqs_parent(domain, virq, nr_irqs); in irq_domain_free_irqs_common()
987 void irq_domain_free_irqs_top(struct irq_domain *domain, unsigned int virq, in irq_domain_free_irqs_top() argument
993 irq_set_handler_data(virq + i, NULL); in irq_domain_free_irqs_top()
994 irq_set_handler(virq + i, NULL); in irq_domain_free_irqs_top()
996 irq_domain_free_irqs_common(domain, virq, nr_irqs); in irq_domain_free_irqs_top()
1061 int i, ret, virq; in __irq_domain_alloc_irqs() local
1075 virq = irq_base; in __irq_domain_alloc_irqs()
1077 virq = irq_domain_alloc_descs(irq_base, nr_irqs, 0, node); in __irq_domain_alloc_irqs()
1078 if (virq < 0) { in __irq_domain_alloc_irqs()
1081 return virq; in __irq_domain_alloc_irqs()
1085 if (irq_domain_alloc_irq_data(domain, virq, nr_irqs)) { in __irq_domain_alloc_irqs()
1086 pr_debug("cannot allocate memory for IRQ%d\n", virq); in __irq_domain_alloc_irqs()
1092 ret = irq_domain_alloc_irqs_recursive(domain, virq, nr_irqs, arg); in __irq_domain_alloc_irqs()
1098 irq_domain_insert_irq(virq + i); in __irq_domain_alloc_irqs()
1101 return virq; in __irq_domain_alloc_irqs()
1104 irq_domain_free_irq_data(virq, nr_irqs); in __irq_domain_alloc_irqs()
1106 irq_free_descs(virq, nr_irqs); in __irq_domain_alloc_irqs()
1115 void irq_domain_free_irqs(unsigned int virq, unsigned int nr_irqs) in irq_domain_free_irqs() argument
1117 struct irq_data *data = irq_get_irq_data(virq); in irq_domain_free_irqs()
1126 irq_domain_remove_irq(virq + i); in irq_domain_free_irqs()
1127 irq_domain_free_irqs_recursive(data->domain, virq, nr_irqs); in irq_domain_free_irqs()
1130 irq_domain_free_irq_data(virq, nr_irqs); in irq_domain_free_irqs()
1131 irq_free_descs(virq, nr_irqs); in irq_domain_free_irqs()
1228 unsigned int virq) in irq_domain_get_irq_data() argument
1230 struct irq_data *irq_data = irq_get_irq_data(virq); in irq_domain_get_irq_data()