Statistics
| Branch: | Revision:

root / hw / irq.h @ 7830cf78

History | View | Annotate | Download (1.6 kB)

1 87ecb68b pbrook
#ifndef QEMU_IRQ_H
2 87ecb68b pbrook
#define QEMU_IRQ_H
3 87ecb68b pbrook
4 d537cf6c pbrook
/* Generic IRQ/GPIO pin infrastructure.  */
5 d537cf6c pbrook
6 5202ef94 Igor Mammedov
typedef struct IRQState *qemu_irq;
7 5202ef94 Igor Mammedov
8 d537cf6c pbrook
typedef void (*qemu_irq_handler)(void *opaque, int n, int level);
9 d537cf6c pbrook
10 d537cf6c pbrook
void qemu_set_irq(qemu_irq irq, int level);
11 d537cf6c pbrook
12 d537cf6c pbrook
static inline void qemu_irq_raise(qemu_irq irq)
13 d537cf6c pbrook
{
14 d537cf6c pbrook
    qemu_set_irq(irq, 1);
15 d537cf6c pbrook
}
16 d537cf6c pbrook
17 d537cf6c pbrook
static inline void qemu_irq_lower(qemu_irq irq)
18 d537cf6c pbrook
{
19 d537cf6c pbrook
    qemu_set_irq(irq, 0);
20 d537cf6c pbrook
}
21 d537cf6c pbrook
22 106627d0 balrog
static inline void qemu_irq_pulse(qemu_irq irq)
23 106627d0 balrog
{
24 106627d0 balrog
    qemu_set_irq(irq, 1);
25 106627d0 balrog
    qemu_set_irq(irq, 0);
26 106627d0 balrog
}
27 106627d0 balrog
28 1e5b31e6 Peter A. G. Crosthwaite
/* Returns an array of N IRQs. Each IRQ is assigned the argument handler and
29 1e5b31e6 Peter A. G. Crosthwaite
 * opaque data.
30 1e5b31e6 Peter A. G. Crosthwaite
 */
31 d537cf6c pbrook
qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n);
32 1e5b31e6 Peter A. G. Crosthwaite
33 1e5b31e6 Peter A. G. Crosthwaite
/* Extends an Array of IRQs. Old IRQs have their handlers and opaque data
34 1e5b31e6 Peter A. G. Crosthwaite
 * preserved. New IRQs are assigned the argument handler and opaque data.
35 1e5b31e6 Peter A. G. Crosthwaite
 */
36 1e5b31e6 Peter A. G. Crosthwaite
qemu_irq *qemu_extend_irqs(qemu_irq *old, int n_old, qemu_irq_handler handler,
37 1e5b31e6 Peter A. G. Crosthwaite
                                void *opaque, int n);
38 1e5b31e6 Peter A. G. Crosthwaite
39 51bf9e7e aliguori
void qemu_free_irqs(qemu_irq *s);
40 d537cf6c pbrook
41 b50a6563 balrog
/* Returns a new IRQ with opposite polarity.  */
42 b50a6563 balrog
qemu_irq qemu_irq_invert(qemu_irq irq);
43 87ecb68b pbrook
44 9793212b Peter Maydell
/* Returns a new IRQ which feeds into both the passed IRQs */
45 9793212b Peter Maydell
qemu_irq qemu_irq_split(qemu_irq irq1, qemu_irq irq2);
46 9793212b Peter Maydell
47 22ec3283 Avi Kivity
/* Returns a new IRQ set which connects 1:1 to another IRQ set, which
48 22ec3283 Avi Kivity
 * may be set later.
49 22ec3283 Avi Kivity
 */
50 22ec3283 Avi Kivity
qemu_irq *qemu_irq_proxy(qemu_irq **target, int n);
51 22ec3283 Avi Kivity
52 20288345 Paolo Bonzini
/* For internal use in qtest.  Similar to qemu_irq_split, but operating
53 20288345 Paolo Bonzini
   on an existing vector of qemu_irq.  */
54 20288345 Paolo Bonzini
void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n);
55 20288345 Paolo Bonzini
void qemu_irq_intercept_out(qemu_irq **gpio_out, qemu_irq_handler handler, int n);
56 20288345 Paolo Bonzini
57 87ecb68b pbrook
#endif