1#ifndef QEMU_IRQ_H
2#define QEMU_IRQ_H
3
4#include "qom/object.h"
5
6
7
8#define TYPE_IRQ "irq"
9
10typedef struct IRQState *qemu_irq;
11
12typedef void (*qemu_irq_handler)(void *opaque, int n, int level);
13
14struct IRQState {
15 Object parent_obj;
16
17 qemu_irq_handler handler;
18 void *opaque;
19 int n;
20};
21
22void qemu_set_irq(qemu_irq irq, int level);
23
24static inline void qemu_irq_raise(qemu_irq irq)
25{
26 qemu_set_irq(irq, 1);
27}
28
29static inline void qemu_irq_lower(qemu_irq irq)
30{
31 qemu_set_irq(irq, 0);
32}
33
34static inline void qemu_irq_pulse(qemu_irq irq)
35{
36 qemu_set_irq(irq, 1);
37 qemu_set_irq(irq, 0);
38}
39
40
41
42
43qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n);
44
45
46
47
48
49qemu_irq qemu_allocate_irq(qemu_irq_handler handler, void *opaque, int n);
50
51
52
53
54qemu_irq *qemu_extend_irqs(qemu_irq *old, int n_old, qemu_irq_handler handler,
55 void *opaque, int n);
56
57void qemu_free_irqs(qemu_irq *s, int n);
58void qemu_free_irq(qemu_irq irq);
59
60
61qemu_irq qemu_irq_invert(qemu_irq irq);
62
63
64qemu_irq qemu_irq_split(qemu_irq irq1, qemu_irq irq2);
65
66
67
68
69qemu_irq *qemu_irq_proxy(qemu_irq **target, int n);
70
71
72
73void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n);
74
75#endif
76