Lines Matching refs:irq

104 static inline unsigned int evtchn_from_irq(int irq)
106 return irq_info[irq] & ((1U << _EVTCHN_BITS) - 1);
109 static inline unsigned int index_from_irq(int irq)
111 return (irq_info[irq] >> _EVTCHN_BITS) & ((1U << _INDEX_BITS) - 1);
114 static inline unsigned int type_from_irq(int irq)
116 return irq_info[irq] >> (32 - _IRQT_BITS);
191 int irq, cpu;
212 if ((irq = evtchn_to_irq[port]) != -1) {
213 struct intsrc *isrc = intr_lookup_source(irq);
234 int irq;
236 irq = pcpu_find(cpu)->pc_ipi_to_irq[vector];
238 notify_remote_via_irq(irq);
244 int dynirq, irq;
247 irq = dynirq_to_irq(dynirq);
248 if (irq_bindcount[irq] == 0)
252 if (irq == NR_IRQS)
255 return (irq);
261 int irq;
265 if ((irq = evtchn_to_irq[caller_port]) == -1) {
266 if ((irq = find_unbound_irq()) < 0)
269 evtchn_to_irq[caller_port] = irq;
270 irq_info[irq] = mk_irq_info(IRQT_CALLER_PORT, 0, caller_port);
273 irq_bindcount[irq]++;
278 return irq;
284 int irq;
291 if ((irq = find_unbound_irq()) < 0) {
298 evtchn_to_irq[local_port] = irq;
299 irq_info[irq] = mk_irq_info(IRQT_LOCAL_PORT, 0, local_port);
300 irq_bindcount[irq]++;
305 return irq;
343 int evtchn = 0, irq;
347 if ((irq = pcpu_find(cpu)->pc_virq_to_irq[virq]) == -1) {
348 if ((irq = find_unbound_irq()) < 0)
357 evtchn_to_irq[evtchn] = irq;
358 irq_info[irq] = mk_irq_info(IRQT_VIRQ, virq, evtchn);
360 pcpu_find(cpu)->pc_virq_to_irq[virq] = irq;
365 irq_bindcount[irq]++;
370 return irq;
378 int irq;
383 if ((irq = pcpu_find(cpu)->pc_ipi_to_irq[ipi]) == -1) {
384 if ((irq = find_unbound_irq()) < 0)
391 evtchn_to_irq[evtchn] = irq;
392 irq_info[irq] = mk_irq_info(IRQT_IPI, ipi, evtchn);
394 pcpu_find(cpu)->pc_ipi_to_irq[ipi] = irq;
398 irq_bindcount[irq]++;
404 return irq;
409 unbind_from_irq(int irq)
412 int evtchn = evtchn_from_irq(irq);
417 if ((--irq_bindcount[irq] == 0) && VALID_EVTCHN(evtchn)) {
421 switch (type_from_irq(irq)) {
424 pcpu_find(cpu)->pc_virq_to_irq[index_from_irq(irq)] = -1;
428 pcpu_find(cpu)->pc_ipi_to_irq[index_from_irq(irq)] = -1;
438 irq_info[irq] = IRQ_UNBOUND;
449 unsigned int irq;
453 irq = bind_caller_port_to_irq(caller_port, &port);
454 intr_register_source(&xp->xp_pins[irq].xp_intsrc);
455 error = intr_add_handler(devname, irq, NULL, handler, arg, irqflags,
456 &xp->xp_pins[irq].xp_cookie);
459 unbind_from_irq(irq);
466 *irqp = irq;
476 unsigned int irq;
480 irq = bind_listening_port_to_irq(remote_domain, &port);
481 intr_register_source(&xp->xp_pins[irq].xp_intsrc);
482 error = intr_add_handler(devname, irq, NULL, handler, arg, irqflags,
483 &xp->xp_pins[irq].xp_cookie);
485 unbind_from_irq(irq);
491 *irqp = irq;
502 unsigned int irq;
506 irq = bind_interdomain_evtchn_to_irq(remote_domain, remote_port, &port);
507 intr_register_source(&xp->xp_pins[irq].xp_intsrc);
508 error = intr_add_handler(devname, irq, NULL, handler, arg,
509 irqflags, &xp->xp_pins[irq].xp_cookie);
511 unbind_from_irq(irq);
518 *irqp = irq;
527 unsigned int irq;
531 irq = bind_virq_to_irq(virq, cpu, &port);
532 intr_register_source(&xp->xp_pins[irq].xp_intsrc);
533 error = intr_add_handler(devname, irq, filter, handler,
534 arg, irqflags, &xp->xp_pins[irq].xp_cookie);
536 unbind_from_irq(irq);
543 *irqp = irq;
552 unsigned int irq;
556 irq = bind_ipi_to_irq(ipi, cpu, &port);
557 intr_register_source(&xp->xp_pins[irq].xp_intsrc);
558 error = intr_add_handler(devname, irq, filter, NULL,
559 NULL, irqflags, &xp->xp_pins[irq].xp_cookie);
561 unbind_from_irq(irq);
568 *irqp = irq;
573 unbind_from_irqhandler(unsigned int irq)
575 intr_remove_handler(xp->xp_pins[irq].xp_cookie);
576 unbind_from_irq(irq);
582 rebind_irq_to_cpu(unsigned irq, unsigned tcpu)
589 evtchn = evtchn_from_irq(irq);
611 static void set_affinity_irq(unsigned irq, cpumask_t dest)
614 rebind_irq_to_cpu(irq, tcpu);
675 unsigned int irq;
682 irq = xenpic_vector(isrc);
683 unmask_evtchn(evtchn_from_irq(irq));
692 unsigned int irq;
699 irq = xenpic_vector(isrc);
700 mask_evtchn(evtchn_from_irq(irq));
709 unsigned int irq;
715 irq = xenpic_vector(isrc);
716 unmask_evtchn(evtchn_from_irq(irq));
723 unsigned int irq;
728 irq = xenpic_vector(isrc);
729 mask_evtchn(evtchn_from_irq(irq));
737 unsigned int irq;
743 irq = xenpic_vector(isrc);
744 unmask_evtchn(evtchn_from_irq(irq));
792 notify_remote_via_irq(int irq)
794 int evtchn = evtchn_from_irq(irq);
799 panic("invalid evtchn %d", irq);
806 struct physdev_eoi eoi = { .irq = pirq };
818 irq_status_query.irq = pirq;
829 #define probing_irq(_irq) (intr_lookup_source(irq) == NULL)
836 unsigned int irq;
839 irq = xenpic_vector(isrc);
840 evtchn = evtchn_from_irq(irq);
845 bind_pirq.pirq = irq;
847 bind_pirq.flags = probing_irq(irq) ? 0 : BIND_PIRQ__WILL_SHARE;
853 if (!probing_irq(irq)) /* Some failures are expected when probing. */
854 printf("Failed to obtain physical IRQ %d\n", irq);
860 pirq_query_unmask(irq_to_pirq(irq));
863 evtchn_to_irq[evtchn] = irq;
864 irq_info[irq] = mk_irq_info(IRQT_PIRQ, irq, evtchn);
868 pirq_unmask_notify(irq_to_pirq(irq));
876 unsigned int irq;
879 irq = xenpic_vector(isrc);
880 evtchn = evtchn_from_irq(irq);
886 pirq_unmask_notify(irq_to_pirq(irq));
895 unsigned int irq;
898 irq = xenpic_vector(isrc);
899 evtchn = evtchn_from_irq(irq);
914 unsigned int irq;
917 irq = xenpic_vector(isrc);
918 evtchn = evtchn_from_irq(irq);
924 pirq_unmask_notify(irq_to_pirq(irq));
930 irq_to_evtchn_port(int irq)
932 return evtchn_from_irq(irq);
975 int cpu, pirq, virq, ipi, irq, evtchn;
1005 for (irq = 0; irq < NR_IRQS; irq++)
1006 irq_info[irq] &= ~0xFFFF; /* zap event-channel binding */
1012 if ((irq = pcpu_find(0)->pc_virq_to_irq[virq]) == -1)
1015 KASSERT(irq_info[irq] == mk_irq_info(IRQT_VIRQ, virq, 0),
1025 evtchn_to_irq[evtchn] = irq;
1026 irq_info[irq] = mk_irq_info(IRQT_VIRQ, virq, evtchn);
1034 if ((irq = pcpu_find(0)->pc_ipi_to_irq[ipi]) == -1)
1037 KASSERT(irq_info[irq] == mk_irq_info(IRQT_IPI, ipi, 0),
1047 evtchn_to_irq[evtchn] = irq;
1048 irq_info[irq] = mk_irq_info(IRQT_IPI, ipi, evtchn);