OSDN Git Service

hw/isa/pc87312: Inherit from the abstract TYPE_ISA_SUPERIO
authorPhilippe Mathieu-Daudé <f4bug@amsat.org>
Thu, 8 Mar 2018 22:39:30 +0000 (23:39 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 12 Mar 2018 15:12:48 +0000 (16:12 +0100)
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20180308223946.26784-10-f4bug@amsat.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
hw/isa/pc87312.c
include/hw/isa/pc87312.h

index fda91fe..6b8100f 100644 (file)
@@ -270,6 +270,7 @@ static void pc87312_realize(DeviceState *dev, Error **errp)
     ISABus *bus;
     Chardev *chr;
     DriveInfo *drive;
+    Error *local_err = NULL;
     char name[5];
     int i;
 
@@ -279,6 +280,12 @@ static void pc87312_realize(DeviceState *dev, Error **errp)
     isa_register_ioport(isa, &s->io, s->iobase);
     pc87312_hard_reset(s);
 
+    ISA_SUPERIO_GET_CLASS(dev)->parent_realize(dev, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        return;
+    }
+
     if (is_parallel_enabled(s)) {
         /* FIXME use a qdev chardev prop instead of parallel_hds[] */
         chr = parallel_hds[0];
@@ -381,7 +388,9 @@ static Property pc87312_properties[] = {
 static void pc87312_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
+    ISASuperIOClass *sc = ISA_SUPERIO_CLASS(klass);
 
+    sc->parent_realize = dc->realize;
     dc->realize = pc87312_realize;
     dc->reset = pc87312_reset;
     dc->vmsd = &vmstate_pc87312;
@@ -392,7 +401,7 @@ static void pc87312_class_init(ObjectClass *klass, void *data)
 
 static const TypeInfo pc87312_type_info = {
     .name          = TYPE_PC87312_SUPERIO,
-    .parent        = TYPE_ISA_DEVICE,
+    .parent        = TYPE_ISA_SUPERIO,
     .instance_size = sizeof(PC87312State),
     .instance_init = pc87312_initfn,
     .class_init    = pc87312_class_init,
index b65b219..f3761d6 100644 (file)
 #ifndef QEMU_PC87312_H
 #define QEMU_PC87312_H
 
-#include "hw/isa/isa.h"
+#include "hw/isa/superio.h"
 
 
 #define TYPE_PC87312_SUPERIO "pc87312"
 #define PC87312(obj) OBJECT_CHECK(PC87312State, (obj), TYPE_PC87312_SUPERIO)
 
 typedef struct PC87312State {
-    ISADevice dev;
+    /*< private >*/
+    ISASuperIODevice parent_dev;
+    /*< public >*/
 
     uint16_t iobase;
     uint8_t config; /* initial configuration */