hw/core: Add interface to allocate and free a single IRQ
qemu_allocate_irq returns a single qemu_irq. The interface allows to specify an interrupt number. qemu_free_irq frees it. Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
a53ae8e934
commit
a8a9d30bab
|
@ -68,6 +68,17 @@ qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n)
|
||||||
return qemu_extend_irqs(NULL, 0, handler, opaque, n);
|
return qemu_extend_irqs(NULL, 0, handler, opaque, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qemu_irq qemu_allocate_irq(qemu_irq_handler handler, void *opaque, int n)
|
||||||
|
{
|
||||||
|
struct IRQState *irq;
|
||||||
|
|
||||||
|
irq = g_new(struct IRQState, 1);
|
||||||
|
irq->handler = handler;
|
||||||
|
irq->opaque = opaque;
|
||||||
|
irq->n = n;
|
||||||
|
|
||||||
|
return irq;
|
||||||
|
}
|
||||||
|
|
||||||
void qemu_free_irqs(qemu_irq *s)
|
void qemu_free_irqs(qemu_irq *s)
|
||||||
{
|
{
|
||||||
|
@ -75,6 +86,11 @@ void qemu_free_irqs(qemu_irq *s)
|
||||||
g_free(s);
|
g_free(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qemu_free_irq(qemu_irq irq)
|
||||||
|
{
|
||||||
|
g_free(irq);
|
||||||
|
}
|
||||||
|
|
||||||
static void qemu_notirq(void *opaque, int line, int level)
|
static void qemu_notirq(void *opaque, int line, int level)
|
||||||
{
|
{
|
||||||
struct IRQState *irq = opaque;
|
struct IRQState *irq = opaque;
|
||||||
|
|
|
@ -30,6 +30,12 @@ static inline void qemu_irq_pulse(qemu_irq irq)
|
||||||
*/
|
*/
|
||||||
qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n);
|
qemu_irq *qemu_allocate_irqs(qemu_irq_handler handler, void *opaque, int n);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocates a single IRQ. The irq is assigned with a handler, an opaque
|
||||||
|
* data and the interrupt number.
|
||||||
|
*/
|
||||||
|
qemu_irq qemu_allocate_irq(qemu_irq_handler handler, void *opaque, int n);
|
||||||
|
|
||||||
/* Extends an Array of IRQs. Old IRQs have their handlers and opaque data
|
/* Extends an Array of IRQs. Old IRQs have their handlers and opaque data
|
||||||
* preserved. New IRQs are assigned the argument handler and opaque data.
|
* preserved. New IRQs are assigned the argument handler and opaque data.
|
||||||
*/
|
*/
|
||||||
|
@ -37,6 +43,7 @@ qemu_irq *qemu_extend_irqs(qemu_irq *old, int n_old, qemu_irq_handler handler,
|
||||||
void *opaque, int n);
|
void *opaque, int n);
|
||||||
|
|
||||||
void qemu_free_irqs(qemu_irq *s);
|
void qemu_free_irqs(qemu_irq *s);
|
||||||
|
void qemu_free_irq(qemu_irq irq);
|
||||||
|
|
||||||
/* Returns a new IRQ with opposite polarity. */
|
/* Returns a new IRQ with opposite polarity. */
|
||||||
qemu_irq qemu_irq_invert(qemu_irq irq);
|
qemu_irq qemu_irq_invert(qemu_irq irq);
|
||||||
|
|
Loading…
Reference in a new issue