xref: /openbmc/qemu/include/hw/irq.h (revision 0ebfc997)
10d09e41aSPaolo Bonzini #ifndef QEMU_IRQ_H
20d09e41aSPaolo Bonzini #define QEMU_IRQ_H
30d09e41aSPaolo Bonzini 
40d09e41aSPaolo Bonzini /* Generic IRQ/GPIO pin infrastructure.  */
50d09e41aSPaolo Bonzini 
6615c4895SAndreas Färber #define TYPE_IRQ "irq"
7615c4895SAndreas Färber 
80d09e41aSPaolo Bonzini void qemu_set_irq(qemu_irq irq, int level);
90d09e41aSPaolo Bonzini 
qemu_irq_raise(qemu_irq irq)100d09e41aSPaolo Bonzini static inline void qemu_irq_raise(qemu_irq irq)
110d09e41aSPaolo Bonzini {
120d09e41aSPaolo Bonzini     qemu_set_irq(irq, 1);
130d09e41aSPaolo Bonzini }
140d09e41aSPaolo Bonzini 
qemu_irq_lower(qemu_irq irq)150d09e41aSPaolo Bonzini static inline void qemu_irq_lower(qemu_irq irq)
160d09e41aSPaolo Bonzini {
170d09e41aSPaolo Bonzini     qemu_set_irq(irq, 0);
180d09e41aSPaolo Bonzini }
190d09e41aSPaolo Bonzini 
qemu_irq_pulse(qemu_irq irq)200d09e41aSPaolo Bonzini static inline void qemu_irq_pulse(qemu_irq irq)
210d09e41aSPaolo Bonzini {
220d09e41aSPaolo Bonzini     qemu_set_irq(irq, 1);
230d09e41aSPaolo Bonzini     qemu_set_irq(irq, 0);
240d09e41aSPaolo Bonzini }
250d09e41aSPaolo Bonzini 
260d09e41aSPaolo Bonzini /* Returns an array of N IRQs. Each IRQ is assigned the argument handler and
270d09e41aSPaolo Bonzini  * opaque data.
280d09e41aSPaolo Bonzini  */
290d09e41aSPaolo Bonzini qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n);
300d09e41aSPaolo Bonzini 
31a8a9d30bSMarcel Apfelbaum /*
32a8a9d30bSMarcel Apfelbaum  * Allocates a single IRQ. The irq is assigned with a handler, an opaque
33a8a9d30bSMarcel Apfelbaum  * data and the interrupt number.
34a8a9d30bSMarcel Apfelbaum  */
35a8a9d30bSMarcel Apfelbaum qemu_irq qemu_allocate_irq(qemu_irq_handler handler, void *opaque, int n);
36a8a9d30bSMarcel Apfelbaum 
370d09e41aSPaolo Bonzini /* Extends an Array of IRQs. Old IRQs have their handlers and opaque data
380d09e41aSPaolo Bonzini  * preserved. New IRQs are assigned the argument handler and opaque data.
390d09e41aSPaolo Bonzini  */
400d09e41aSPaolo Bonzini qemu_irq *qemu_extend_irqs(qemu_irq *old, int n_old, qemu_irq_handler handler,
410d09e41aSPaolo Bonzini                                 void *opaque, int n);
420d09e41aSPaolo Bonzini 
43f173d57aSPeter Crosthwaite void qemu_free_irqs(qemu_irq *s, int n);
44a8a9d30bSMarcel Apfelbaum void qemu_free_irq(qemu_irq irq);
450d09e41aSPaolo Bonzini 
460d09e41aSPaolo Bonzini /* Returns a new IRQ with opposite polarity.  */
470d09e41aSPaolo Bonzini qemu_irq qemu_irq_invert(qemu_irq irq);
480d09e41aSPaolo Bonzini 
490d09e41aSPaolo Bonzini /* For internal use in qtest.  Similar to qemu_irq_split, but operating
500d09e41aSPaolo Bonzini    on an existing vector of qemu_irq.  */
510d09e41aSPaolo Bonzini void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n);
520d09e41aSPaolo Bonzini 
53*faf7c6deSPeter Maydell /**
54*faf7c6deSPeter Maydell  * qemu_irq_is_connected: Return true if IRQ line is wired up
55*faf7c6deSPeter Maydell  *
56*faf7c6deSPeter Maydell  * If a qemu_irq has a device on the other (receiving) end of it,
57*faf7c6deSPeter Maydell  * return true; otherwise return false.
58*faf7c6deSPeter Maydell  *
59*faf7c6deSPeter Maydell  * Usually device models don't need to care whether the machine model
60*faf7c6deSPeter Maydell  * has wired up their outbound qemu_irq lines, because functions like
61*faf7c6deSPeter Maydell  * qemu_set_irq() silently do nothing if there is nothing on the other
62*faf7c6deSPeter Maydell  * end of the line. However occasionally a device model will want to
63*faf7c6deSPeter Maydell  * provide default behaviour if its output is left floating, and
64*faf7c6deSPeter Maydell  * it can use this function to identify when that is the case.
65*faf7c6deSPeter Maydell  */
qemu_irq_is_connected(qemu_irq irq)66*faf7c6deSPeter Maydell static inline bool qemu_irq_is_connected(qemu_irq irq)
67*faf7c6deSPeter Maydell {
68*faf7c6deSPeter Maydell     return irq != NULL;
69*faf7c6deSPeter Maydell }
70*faf7c6deSPeter Maydell 
710d09e41aSPaolo Bonzini #endif
72