Lines Matching refs:irq

69 #define evtchn_from_irq(x)	(irq_evtchn[irq].evtchn)
96 unsigned int irq;
100 for (irq = 1; irq < ARRAY_SIZE(irq_evtchn); irq++) {
101 if (irq_evtchn[irq].inuse)
103 irq_evtchn[irq].inuse = 1;
105 return irq;
120 free_xen_irq(int irq)
124 irq_evtchn[irq].inuse = 0;
129 irq_to_evtchn_port(int irq)
132 return irq_evtchn[irq].evtchn;
157 unsigned int irq;
160 irq = alloc_xen_irq();
161 if (irq < 0)
162 return irq;
164 mtx_lock(&irq_evtchn[irq].lock);
171 mtx_unlock(&irq_evtchn[irq].lock);
172 free_xen_irq(irq);
176 irq_evtchn[irq].handler = handler;
177 irq_evtchn[irq].arg = arg;
178 irq_evtchn[irq].evtchn = alloc_unbound.port;
179 irq_evtchn[irq].close = 1;
180 irq_evtchn[irq].mpsafe = (irqflags & INTR_MPSAFE) != 0;
182 evtchn_to_irq[alloc_unbound.port] = irq;
186 mtx_unlock(&irq_evtchn[irq].lock);
189 *irqp = irq;
199 unsigned int irq;
202 irq = alloc_xen_irq();
203 if (irq < 0)
204 return irq;
206 mtx_lock(&irq_evtchn[irq].lock);
213 mtx_unlock(&irq_evtchn[irq].lock);
214 free_xen_irq(irq);
218 irq_evtchn[irq].handler = handler;
219 irq_evtchn[irq].arg = arg;
220 irq_evtchn[irq].evtchn = bind_interdomain.local_port;
221 irq_evtchn[irq].close = 1;
222 irq_evtchn[irq].mpsafe = (irqflags & INTR_MPSAFE) != 0;
224 evtchn_to_irq[bind_interdomain.local_port] = irq;
228 mtx_unlock(&irq_evtchn[irq].lock);
231 *irqp = irq;
241 unsigned int irq;
243 irq = alloc_xen_irq();
244 if (irq < 0)
245 return irq;
247 mtx_lock(&irq_evtchn[irq].lock);
249 irq_evtchn[irq].handler = handler;
250 irq_evtchn[irq].arg = arg;
251 irq_evtchn[irq].evtchn = caller_port;
252 irq_evtchn[irq].close = 0;
253 irq_evtchn[irq].mpsafe = (irqflags & INTR_MPSAFE) != 0;
255 evtchn_to_irq[caller_port] = irq;
259 mtx_unlock(&irq_evtchn[irq].lock);
262 *irqp = irq;
267 unbind_from_irqhandler(unsigned int irq)
271 mtx_lock(&irq_evtchn[irq].lock);
273 evtchn = evtchn_from_irq(irq);
278 if (irq_evtchn[irq].close) {
285 irq_evtchn[irq].handler = NULL;
286 irq_evtchn[irq].evtchn = 0;
288 mtx_unlock(&irq_evtchn[irq].lock);
290 while (irq_evtchn[irq].in_handler)
293 free_xen_irq(irq);
296 void notify_remote_via_irq(int irq)
300 evtchn = evtchn_from_irq(irq);
316 /* XXX: All events are bound to vcpu0 but irq may be redirected. */
320 int irq, handler_mpsafe;
367 irq = evtchn_to_irq[port];
368 if (irq < 0)
371 mtx_lock(&irq_evtchn[irq].lock);
372 handler = irq_evtchn[irq].handler;
373 handler_arg = irq_evtchn[irq].arg;
374 handler_mpsafe = irq_evtchn[irq].mpsafe;
377 irq, port);
378 mtx_unlock(&irq_evtchn[irq].lock);
381 irq_evtchn[irq].in_handler = 1;
382 mtx_unlock(&irq_evtchn[irq].lock);
392 mtx_lock(&irq_evtchn[irq].lock);
393 irq_evtchn[irq].in_handler = 0;
394 mtx_unlock(&irq_evtchn[irq].lock);
415 * that can handle this irq.
429 int evtchn, irq;
436 for (irq = 0; irq < ARRAY_SIZE(irq_evtchn); irq++)
437 irq_evtchn[irq].evtchn = 0;
447 int irq;
450 mtx_init(&irq_alloc_lock, "xen-irq-lock", NULL, MTX_DEF);
452 for (irq = 0; irq < ARRAY_SIZE(irq_evtchn); irq++)
453 mtx_init(&irq_evtchn[irq].lock, "irq-evtchn", NULL, MTX_DEF);