Statistics
| Branch: | Revision:

root / include / hw / irq.h @ d91a68a7

History | View | Annotate | Download (1.8 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 a8a9d30b Marcel Apfelbaum
/*
34 a8a9d30b Marcel Apfelbaum
 * Allocates a single IRQ. The irq is assigned with a handler, an opaque
35 a8a9d30b Marcel Apfelbaum
 * data and the interrupt number.
36 a8a9d30b Marcel Apfelbaum
 */
37 a8a9d30b Marcel Apfelbaum
qemu_irq qemu_allocate_irq(qemu_irq_handler handler, void *opaque, int n);
38 a8a9d30b Marcel Apfelbaum
39 1e5b31e6 Peter A. G. Crosthwaite
/* Extends an Array of IRQs. Old IRQs have their handlers and opaque data
40 1e5b31e6 Peter A. G. Crosthwaite
 * preserved. New IRQs are assigned the argument handler and opaque data.
41 1e5b31e6 Peter A. G. Crosthwaite
 */
42 1e5b31e6 Peter A. G. Crosthwaite
qemu_irq *qemu_extend_irqs(qemu_irq *old, int n_old, qemu_irq_handler handler,
43 1e5b31e6 Peter A. G. Crosthwaite
                                void *opaque, int n);
44 1e5b31e6 Peter A. G. Crosthwaite
45 51bf9e7e aliguori
void qemu_free_irqs(qemu_irq *s);
46 a8a9d30b Marcel Apfelbaum
void qemu_free_irq(qemu_irq irq);
47 d537cf6c pbrook
48 b50a6563 balrog
/* Returns a new IRQ with opposite polarity.  */
49 b50a6563 balrog
qemu_irq qemu_irq_invert(qemu_irq irq);
50 87ecb68b pbrook
51 9793212b Peter Maydell
/* Returns a new IRQ which feeds into both the passed IRQs */
52 9793212b Peter Maydell
qemu_irq qemu_irq_split(qemu_irq irq1, qemu_irq irq2);
53 9793212b Peter Maydell
54 22ec3283 Avi Kivity
/* Returns a new IRQ set which connects 1:1 to another IRQ set, which
55 22ec3283 Avi Kivity
 * may be set later.
56 22ec3283 Avi Kivity
 */
57 22ec3283 Avi Kivity
qemu_irq *qemu_irq_proxy(qemu_irq **target, int n);
58 22ec3283 Avi Kivity
59 20288345 Paolo Bonzini
/* For internal use in qtest.  Similar to qemu_irq_split, but operating
60 20288345 Paolo Bonzini
   on an existing vector of qemu_irq.  */
61 20288345 Paolo Bonzini
void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n);
62 20288345 Paolo Bonzini
void qemu_irq_intercept_out(qemu_irq **gpio_out, qemu_irq_handler handler, int n);
63 20288345 Paolo Bonzini
64 87ecb68b pbrook
#endif