Lines Matching refs:sn_irq_info
26 static void register_intr_pda(struct sn_irq_info *sn_irq_info);
27 static void unregister_intr_pda(struct sn_irq_info *sn_irq_info);
34 struct sn_irq_info *sn_irq_info, in sn_intr_alloc() argument
44 (u64) local_widget, __pa(sn_irq_info), (u64) req_irq, in sn_intr_alloc()
51 struct sn_irq_info *sn_irq_info) in sn_intr_free() argument
59 (u64) local_widget, (u64) sn_irq_info->irq_irq, in sn_intr_free()
60 (u64) sn_irq_info->irq_cookie, 0, 0); in sn_intr_free()
64 struct sn_irq_info *sn_irq_info, in sn_intr_redirect() argument
73 (u64) local_widget, __pa(sn_irq_info), in sn_intr_redirect()
115 struct sn_irq_info *sn_retarget_vector(struct sn_irq_info *sn_irq_info, in sn_retarget_vector() argument
126 struct sn_irq_info *new_irq_info; in sn_retarget_vector()
129 bridge = (u64) sn_irq_info->irq_bridge; in sn_retarget_vector()
140 vector = sn_irq_info->irq_irq; in sn_retarget_vector()
143 status = sn_intr_redirect(local_nasid, local_widget, sn_irq_info, nasid, slice); in sn_retarget_vector()
145 new_irq_info = sn_irq_info; in sn_retarget_vector()
153 new_irq_info = kmemdup(sn_irq_info, sizeof(struct sn_irq_info), in sn_retarget_vector()
175 list_replace_rcu(&sn_irq_info->list, &new_irq_info->list); in sn_retarget_vector()
177 kfree_rcu(sn_irq_info, rcu); in sn_retarget_vector()
207 struct sn_irq_info *sn_irq_info, *sn_irq_info_safe; in sn_set_affinity_irq() local
215 list_for_each_entry_safe(sn_irq_info, sn_irq_info_safe, in sn_set_affinity_irq() local
217 (void)sn_retarget_vector(sn_irq_info, nasid, slice); in sn_set_affinity_irq()
283 static void register_intr_pda(struct sn_irq_info *sn_irq_info) in register_intr_pda() argument
285 int irq = sn_irq_info->irq_irq; in register_intr_pda()
286 int cpu = sn_irq_info->irq_cpuid; in register_intr_pda()
296 static void unregister_intr_pda(struct sn_irq_info *sn_irq_info) in unregister_intr_pda() argument
298 int irq = sn_irq_info->irq_irq; in unregister_intr_pda()
299 int cpu = sn_irq_info->irq_cpuid; in unregister_intr_pda()
300 struct sn_irq_info *tmp_irq_info; in unregister_intr_pda()
338 void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info) in sn_irq_fixup() argument
340 nasid_t nasid = sn_irq_info->irq_nasid; in sn_irq_fixup()
341 int slice = sn_irq_info->irq_slice; in sn_irq_fixup()
348 sn_irq_info->irq_cpuid = cpu; in sn_irq_fixup()
349 sn_irq_info->irq_pciioinfo = SN_PCIDEV_INFO(pci_dev); in sn_irq_fixup()
353 list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]); in sn_irq_fixup()
354 reserve_irq_vector(sn_irq_info->irq_irq); in sn_irq_fixup()
355 if (sn_irq_info->irq_int_bit != -1) in sn_irq_fixup()
356 irq_set_handler(sn_irq_info->irq_irq, handle_level_irq); in sn_irq_fixup()
359 register_intr_pda(sn_irq_info); in sn_irq_fixup()
362 set_irq_affinity_info(sn_irq_info->irq_irq, cpuphys, 0); in sn_irq_fixup()
367 irqd_mark_affinity_was_set(irq_get_irq_data(sn_irq_info->irq_irq)); in sn_irq_fixup()
373 struct sn_irq_info *sn_irq_info; in sn_irq_unfixup() local
379 sn_irq_info = SN_PCIDEV_INFO(pci_dev)->pdi_sn_irq_info; in sn_irq_unfixup()
380 if (!sn_irq_info) in sn_irq_unfixup()
382 if (!sn_irq_info->irq_irq) { in sn_irq_unfixup()
383 kfree(sn_irq_info); in sn_irq_unfixup()
387 unregister_intr_pda(sn_irq_info); in sn_irq_unfixup()
389 list_del_rcu(&sn_irq_info->list); in sn_irq_unfixup()
391 if (list_empty(sn_irq_lh[sn_irq_info->irq_irq])) in sn_irq_unfixup()
392 free_irq_vector(sn_irq_info->irq_irq); in sn_irq_unfixup()
393 kfree_rcu(sn_irq_info, rcu); in sn_irq_unfixup()
399 sn_call_force_intr_provider(struct sn_irq_info *sn_irq_info) in sn_call_force_intr_provider() argument
403 pci_provider = sn_pci_provider[sn_irq_info->irq_bridge_type]; in sn_call_force_intr_provider()
406 if (!irqd_irq_disabled(irq_get_irq_data(sn_irq_info->irq_irq)) && in sn_call_force_intr_provider()
408 (*pci_provider->force_interrupt)(sn_irq_info); in sn_call_force_intr_provider()
420 static void sn_check_intr(int irq, struct sn_irq_info *sn_irq_info) in sn_check_intr() argument
431 if (sn_irq_info->irq_bridge_type != PCIIO_ASIC_TYPE_PIC) in sn_check_intr()
434 pcidev_info = (struct pcidev_info *)sn_irq_info->irq_pciioinfo; in sn_check_intr()
446 if (sn_irq_info->irq_int_bit & regval & in sn_check_intr()
447 sn_irq_info->irq_last_intr) { in sn_check_intr()
448 regval &= ~(sn_irq_info->irq_int_bit & regval); in sn_check_intr()
449 sn_call_force_intr_provider(sn_irq_info); in sn_check_intr()
453 sn_irq_info->irq_last_intr = regval; in sn_check_intr()
458 struct sn_irq_info *sn_irq_info; in sn_lb_int_war_check() local
466 list_for_each_entry_rcu(sn_irq_info, sn_irq_lh[i], list) { in sn_lb_int_war_check()
467 sn_check_intr(i, sn_irq_info); in sn_lb_int_war_check()