|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 06/27] i8259.c: introduce TYPE_I8259 device
This device represents a single emulated 8259 PIC and its associated class and
ensures that we can safely embed the device within a container device.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@xxxxxxxxxxx>
---
include/hw/intc/i8259.h | 8 ++++----
hw/intc/i8259.c | 33 +++++++++++++++++++--------------
2 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/include/hw/intc/i8259.h b/include/hw/intc/i8259.h
index 1921a30371..87ccd55a4d 100644
--- a/include/hw/intc/i8259.h
+++ b/include/hw/intc/i8259.h
@@ -3,9 +3,9 @@
/* i8259.c */
-typedef struct I8259CommonState I8259CommonState;
+typedef struct I8259State I8259State;
-extern I8259CommonState *isa_pic;
+extern I8259State *isa_pic;
/*
* i8259_init()
@@ -16,7 +16,7 @@ extern I8259CommonState *isa_pic;
*/
qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq_in);
qemu_irq *kvm_i8259_init(ISABus *bus);
-int pic_get_output(I8259CommonState *s);
-int pic_read_irq(I8259CommonState *s);
+int pic_get_output(I8259State *s);
+int pic_read_irq(I8259State *s);
#endif
diff --git a/hw/intc/i8259.c b/hw/intc/i8259.c
index 856075a754..81827f2734 100644
--- a/hw/intc/i8259.c
+++ b/hw/intc/i8259.c
@@ -35,9 +35,11 @@
/*#define DEBUG_IRQ_LATENCY*/
#define TYPE_I8259 "isa-i8259"
-typedef struct I8259Class I8259Class;
-DECLARE_CLASS_CHECKERS(I8259Class, I8259,
- TYPE_I8259)
+OBJECT_DECLARE_TYPE(I8259State, I8259Class, I8259)
+
+struct I8259State {
+ I8259CommonState parent_obj;
+};
/**
* I8259Class:
@@ -52,7 +54,7 @@ struct I8259Class {
#ifdef DEBUG_IRQ_LATENCY
static int64_t irq_time[16];
#endif
-I8259CommonState *isa_pic;
+I8259State *isa_pic;
static I8259CommonState *slave_pic;
/* return the highest priority found in mask (highest = smallest
@@ -170,11 +172,12 @@ static void pic_intack(I8259CommonState *s, int irq)
pic_update_irq(s);
}
-int pic_read_irq(I8259CommonState *s)
+int pic_read_irq(I8259State *s)
{
+ I8259CommonState *cs = I8259_COMMON(s);
int irq, intno;
- irq = pic_get_irq(s);
+ irq = pic_get_irq(cs);
if (irq >= 0) {
int irq2;
@@ -187,16 +190,16 @@ int pic_read_irq(I8259CommonState *s)
irq2 = 7;
}
intno = slave_pic->irq_base + irq2;
- pic_intack(s, irq);
+ pic_intack(cs, irq);
irq = irq2 + 8;
} else {
- intno = s->irq_base + irq;
- pic_intack(s, irq);
+ intno = cs->irq_base + irq;
+ pic_intack(cs, irq);
}
} else {
/* spurious IRQ on host controller */
irq = 7;
- intno = s->irq_base + irq;
+ intno = cs->irq_base + irq;
}
#ifdef DEBUG_IRQ_LATENCY
@@ -348,9 +351,11 @@ static uint64_t pic_ioport_read(void *opaque, hwaddr addr,
return ret;
}
-int pic_get_output(I8259CommonState *s)
+int pic_get_output(I8259State *s)
{
- return (pic_get_irq(s) >= 0);
+ I8259CommonState *cs = I8259_COMMON(s);
+
+ return (pic_get_irq(cs) >= 0);
}
static void elcr_ioport_write(void *opaque, hwaddr addr,
@@ -418,7 +423,7 @@ qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq_in)
irq_set[i] = qdev_get_gpio_in(dev, i);
}
- isa_pic = I8259_COMMON(dev);
+ isa_pic = I8259(dev);
isadev = i8259_init_chip(TYPE_I8259, bus, false);
dev = DEVICE(isadev);
@@ -444,7 +449,7 @@ static void i8259_class_init(ObjectClass *klass, const void
*data)
static const TypeInfo i8259_info = {
.name = TYPE_I8259,
- .instance_size = sizeof(I8259CommonState),
+ .instance_size = sizeof(I8259State),
.parent = TYPE_I8259_COMMON,
.class_init = i8259_class_init,
.class_size = sizeof(I8259Class),
--
2.43.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |