mirror of https://github.com/xemu-project/xemu.git
irq: Slim conversion of qemu_irq to QOM
As a prequel to any big Pin refactoring plans, do an in-place conversion of qemu_irq to an Object, so that we can reference it in link<> properties. Signed-off-by: Andreas Färber <afaerber@suse.de> [ PC Changes: * Removed array-alloctor ref counting logic (limit changes just to * single IRQ allocator) * Removed WIP marking from subject line ] Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Acked-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
f173d57a4c
commit
615c489570
|
@ -23,8 +23,13 @@
|
||||||
*/
|
*/
|
||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
#include "hw/irq.h"
|
#include "hw/irq.h"
|
||||||
|
#include "qom/object.h"
|
||||||
|
|
||||||
|
#define IRQ(obj) OBJECT_CHECK(struct IRQState, (obj), TYPE_IRQ)
|
||||||
|
|
||||||
struct IRQState {
|
struct IRQState {
|
||||||
|
Object parent_obj;
|
||||||
|
|
||||||
qemu_irq_handler handler;
|
qemu_irq_handler handler;
|
||||||
void *opaque;
|
void *opaque;
|
||||||
int n;
|
int n;
|
||||||
|
@ -63,7 +68,7 @@ qemu_irq qemu_allocate_irq(qemu_irq_handler handler, void *opaque, int n)
|
||||||
{
|
{
|
||||||
struct IRQState *irq;
|
struct IRQState *irq;
|
||||||
|
|
||||||
irq = g_new(struct IRQState, 1);
|
irq = IRQ(object_new(TYPE_IRQ));
|
||||||
irq->handler = handler;
|
irq->handler = handler;
|
||||||
irq->opaque = opaque;
|
irq->opaque = opaque;
|
||||||
irq->n = n;
|
irq->n = n;
|
||||||
|
@ -82,7 +87,7 @@ void qemu_free_irqs(qemu_irq *s, int n)
|
||||||
|
|
||||||
void qemu_free_irq(qemu_irq irq)
|
void qemu_free_irq(qemu_irq irq)
|
||||||
{
|
{
|
||||||
g_free(irq);
|
object_unref(OBJECT(irq));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qemu_notirq(void *opaque, int line, int level)
|
static void qemu_notirq(void *opaque, int line, int level)
|
||||||
|
@ -144,3 +149,16 @@ void qemu_irq_intercept_out(qemu_irq **gpio_out, qemu_irq_handler handler, int n
|
||||||
qemu_irq *old_irqs = *gpio_out;
|
qemu_irq *old_irqs = *gpio_out;
|
||||||
*gpio_out = qemu_allocate_irqs(handler, old_irqs, n);
|
*gpio_out = qemu_allocate_irqs(handler, old_irqs, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const TypeInfo irq_type_info = {
|
||||||
|
.name = TYPE_IRQ,
|
||||||
|
.parent = TYPE_OBJECT,
|
||||||
|
.instance_size = sizeof(struct IRQState),
|
||||||
|
};
|
||||||
|
|
||||||
|
static void irq_register_types(void)
|
||||||
|
{
|
||||||
|
type_register_static(&irq_type_info);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_init(irq_register_types)
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
/* Generic IRQ/GPIO pin infrastructure. */
|
/* Generic IRQ/GPIO pin infrastructure. */
|
||||||
|
|
||||||
|
#define TYPE_IRQ "irq"
|
||||||
|
|
||||||
typedef struct IRQState *qemu_irq;
|
typedef struct IRQState *qemu_irq;
|
||||||
|
|
||||||
typedef void (*qemu_irq_handler)(void *opaque, int n, int level);
|
typedef void (*qemu_irq_handler)(void *opaque, int n, int level);
|
||||||
|
|
Loading…
Reference in New Issue