Lines Matching refs:irq
181 int irq; in __gsi_to_irq() local
185 for (irq = 0; irq < NR_IRQS; irq++) { in __gsi_to_irq()
186 info = &iosapic_intr_info[irq]; in __gsi_to_irq()
189 return irq; in __gsi_to_irq()
198 int irq; in gsi_to_irq() local
201 irq = __gsi_to_irq(gsi); in gsi_to_irq()
203 return irq; in gsi_to_irq()
206 static struct iosapic_rte_info *find_rte(unsigned int irq, unsigned int gsi) in find_rte() argument
210 list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) in find_rte()
217 set_rte (unsigned int gsi, unsigned int irq, unsigned int dest, int mask) in set_rte() argument
224 ia64_vector vector = irq_to_vector(irq); in set_rte()
228 rte = find_rte(irq, gsi); in set_rte()
233 pol = iosapic_intr_info[irq].polarity; in set_rte()
234 trigger = iosapic_intr_info[irq].trigger; in set_rte()
235 dmode = iosapic_intr_info[irq].dmode; in set_rte()
240 set_irq_affinity_info(irq, (int)(dest & 0xffff), redir); in set_rte()
254 iosapic_intr_info[irq].low32 = low32; in set_rte()
255 iosapic_intr_info[irq].dest = dest; in set_rte()
272 int irq; in kexec_disable_iosapic() local
274 for (irq = 0; irq < NR_IRQS; irq++) { in kexec_disable_iosapic()
275 info = &iosapic_intr_info[irq]; in kexec_disable_iosapic()
276 vec = irq_to_vector(irq); in kexec_disable_iosapic()
291 unsigned int irq = data->irq; in mask_irq() local
296 if (!iosapic_intr_info[irq].count) in mask_irq()
300 low32 = iosapic_intr_info[irq].low32 |= IOSAPIC_MASK; in mask_irq()
301 list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) { in mask_irq()
310 unsigned int irq = data->irq; in unmask_irq() local
315 if (!iosapic_intr_info[irq].count) in unmask_irq()
318 low32 = iosapic_intr_info[irq].low32 &= ~IOSAPIC_MASK; in unmask_irq()
319 list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) { in unmask_irq()
331 unsigned int irq = data->irq; in iosapic_set_affinity() local
334 int redir = (irq & IA64_IRQ_REDIRECTED) ? 1 : 0; in iosapic_set_affinity()
338 irq &= (~IA64_IRQ_REDIRECTED); in iosapic_set_affinity()
344 if (irq_prepare_move(irq, cpu)) in iosapic_set_affinity()
349 if (!iosapic_intr_info[irq].count) in iosapic_set_affinity()
352 set_irq_affinity_info(irq, dest, redir); in iosapic_set_affinity()
357 low32 = iosapic_intr_info[irq].low32 & ~(7 << IOSAPIC_DELIVERY_SHIFT); in iosapic_set_affinity()
365 low32 |= irq_to_vector(irq); in iosapic_set_affinity()
367 iosapic_intr_info[irq].low32 = low32; in iosapic_set_affinity()
368 iosapic_intr_info[irq].dest = dest; in iosapic_set_affinity()
369 list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) { in iosapic_set_affinity()
394 unsigned int irq = data->irq; in iosapic_unmask_level_irq() local
395 ia64_vector vec = irq_to_vector(irq); in iosapic_unmask_level_irq()
399 irq_complete_move(irq); in iosapic_unmask_level_irq()
406 list_for_each_entry(rte, &iosapic_intr_info[irq].rtes, rte_list) in iosapic_unmask_level_irq()
451 irq_complete_move(data->irq); in iosapic_ack_edge_irq()
487 int i, irq = -ENOSPC, min_count = -1; in iosapic_find_sharable_irq() local
504 irq = i; in iosapic_find_sharable_irq()
509 return irq; in iosapic_find_sharable_irq()
517 iosapic_reassign_vector (int irq) in iosapic_reassign_vector() argument
521 if (iosapic_intr_info[irq].count) { in iosapic_reassign_vector()
526 irq_to_vector(irq), irq_to_vector(new_irq)); in iosapic_reassign_vector()
527 memcpy(&iosapic_intr_info[new_irq], &iosapic_intr_info[irq], in iosapic_reassign_vector()
530 list_move(iosapic_intr_info[irq].rtes.next, in iosapic_reassign_vector()
532 memset(&iosapic_intr_info[irq], 0, in iosapic_reassign_vector()
534 iosapic_intr_info[irq].low32 = IOSAPIC_MASK; in iosapic_reassign_vector()
535 INIT_LIST_HEAD(&iosapic_intr_info[irq].rtes); in iosapic_reassign_vector()
539 static inline int irq_is_shared (int irq) in irq_is_shared() argument
541 return (iosapic_intr_info[irq].count > 1); in irq_is_shared()
554 register_intr (unsigned int gsi, int irq, unsigned char delivery, in register_intr() argument
568 rte = find_rte(irq, gsi); in register_intr()
580 list_add_tail(&rte->rte_list, &iosapic_intr_info[irq].rtes); in register_intr()
581 iosapic_intr_info[irq].count++; in register_intr()
585 struct iosapic_intr_info *info = &iosapic_intr_info[irq]; in register_intr()
594 iosapic_intr_info[irq].count++; in register_intr()
598 iosapic_intr_info[irq].polarity = polarity; in register_intr()
599 iosapic_intr_info[irq].dmode = delivery; in register_intr()
600 iosapic_intr_info[irq].trigger = trigger; in register_intr()
604 chip = irq_get_chip(irq); in register_intr()
609 __func__, irq_to_vector(irq), in register_intr()
613 __irq_set_chip_handler_name_locked(irq, chip, trigger == IOSAPIC_EDGE ? in register_intr()
620 get_target_cpu (unsigned int gsi, int irq) in get_target_cpu() argument
625 cpumask_t domain = irq_to_domain(irq); in get_target_cpu()
631 if (iosapic_intr_info[irq].count) in get_target_cpu()
632 return iosapic_intr_info[irq].dest; in get_target_cpu()
649 if (cpe_vector > 0 && irq_to_vector(irq) == IA64_CPEP_VECTOR) in get_target_cpu()
674 cpu_index = irq % num_cpus; in get_target_cpu()
719 int irq, mask = 1, err; in iosapic_register_intr() local
733 irq = __gsi_to_irq(gsi); in iosapic_register_intr()
734 if (irq > 0) { in iosapic_register_intr()
735 rte = find_rte(irq, gsi); in iosapic_register_intr()
736 if(iosapic_intr_info[irq].count == 0) { in iosapic_register_intr()
737 assign_irq_vector(irq); in iosapic_register_intr()
738 irq_init_desc(irq); in iosapic_register_intr()
744 irq = create_irq(); in iosapic_register_intr()
747 if (irq < 0) { in iosapic_register_intr()
748 irq = iosapic_find_sharable_irq(trigger, polarity); in iosapic_register_intr()
749 if (irq < 0) in iosapic_register_intr()
753 desc = irq_to_desc(irq); in iosapic_register_intr()
755 dest = get_target_cpu(gsi, irq); in iosapic_register_intr()
757 err = register_intr(gsi, irq, dmode, polarity, trigger); in iosapic_register_intr()
760 irq = err; in iosapic_register_intr()
768 low32 = iosapic_intr_info[irq].low32; in iosapic_register_intr()
769 if (irq_is_shared(irq) && !(low32 & IOSAPIC_MASK)) in iosapic_register_intr()
771 set_rte(gsi, irq, dest, mask); in iosapic_register_intr()
776 cpu_logical_id(dest), dest, irq_to_vector(irq)); in iosapic_register_intr()
781 return irq; in iosapic_register_intr()
788 int irq, index; in iosapic_unregister_intr() local
799 irq = gsi_to_irq(gsi); in iosapic_unregister_intr()
800 if (irq < 0) { in iosapic_unregister_intr()
808 if ((rte = find_rte(irq, gsi)) == NULL) { in iosapic_unregister_intr()
821 low32 = iosapic_intr_info[irq].low32 | IOSAPIC_MASK; in iosapic_unregister_intr()
824 iosapic_intr_info[irq].count--; in iosapic_unregister_intr()
829 trigger = iosapic_intr_info[irq].trigger; in iosapic_unregister_intr()
830 polarity = iosapic_intr_info[irq].polarity; in iosapic_unregister_intr()
831 dest = iosapic_intr_info[irq].dest; in iosapic_unregister_intr()
836 cpu_logical_id(dest), dest, irq_to_vector(irq)); in iosapic_unregister_intr()
838 if (iosapic_intr_info[irq].count == 0) { in iosapic_unregister_intr()
841 cpumask_setall(irq_get_irq_data(irq)->affinity); in iosapic_unregister_intr()
844 iosapic_intr_info[irq].dest = 0; in iosapic_unregister_intr()
845 iosapic_intr_info[irq].dmode = 0; in iosapic_unregister_intr()
846 iosapic_intr_info[irq].polarity = 0; in iosapic_unregister_intr()
847 iosapic_intr_info[irq].trigger = 0; in iosapic_unregister_intr()
848 iosapic_intr_info[irq].low32 |= IOSAPIC_MASK; in iosapic_unregister_intr()
851 destroy_and_reserve_irq(irq); in iosapic_unregister_intr()
867 int irq, vector, mask = 0; in iosapic_register_platform_intr() local
872 irq = vector = iosapic_vector; in iosapic_register_platform_intr()
873 bind_irq_vector(irq, vector, CPU_MASK_ALL); in iosapic_register_platform_intr()
878 iosapic_reassign_vector(irq); in iosapic_register_platform_intr()
882 irq = create_irq(); in iosapic_register_platform_intr()
883 if (irq < 0) in iosapic_register_platform_intr()
885 vector = irq_to_vector(irq); in iosapic_register_platform_intr()
889 irq = vector = IA64_CPE_VECTOR; in iosapic_register_platform_intr()
890 BUG_ON(bind_irq_vector(irq, vector, CPU_MASK_ALL)); in iosapic_register_platform_intr()
900 register_intr(gsi, irq, delivery, polarity, trigger); in iosapic_register_platform_intr()
910 set_rte(gsi, irq, dest, mask); in iosapic_register_platform_intr()
920 int vector, irq; in iosapic_override_isa_irq() local
924 irq = vector = isa_irq_to_vector(isa_irq); in iosapic_override_isa_irq()
925 BUG_ON(bind_irq_vector(irq, vector, CPU_MASK_ALL)); in iosapic_override_isa_irq()
927 register_intr(gsi, irq, dmode, polarity, trigger); in iosapic_override_isa_irq()
934 set_rte(gsi, irq, dest, 1); in iosapic_override_isa_irq()
956 int irq; in iosapic_system_init() local
958 for (irq = 0; irq < NR_IRQS; ++irq) { in iosapic_system_init()
959 iosapic_intr_info[irq].low32 = IOSAPIC_MASK; in iosapic_system_init()
961 INIT_LIST_HEAD(&iosapic_intr_info[irq].rtes); in iosapic_system_init()
963 iosapic_intr_info[irq].count = 0; in iosapic_system_init()
1014 iosapic_delete_rte(unsigned int irq, unsigned int gsi) in iosapic_delete_rte() argument
1018 list_for_each_entry_safe(rte, temp, &iosapic_intr_info[irq].rtes, in iosapic_delete_rte()
1092 int i, irq, index, err = 0; in iosapic_remove() local
1111 irq = __gsi_to_irq(i); in iosapic_remove()
1112 if (irq < 0) in iosapic_remove()
1115 err = iosapic_delete_rte(irq, i); in iosapic_remove()