On 07/16/2012 02:16 AM, Paolo Bonzini wrote:
Il 15/07/2012 22:25, miny...@acm.org ha scritto:
+    /* Clear the property from this device so we can put it elsewhere */
+    chr = isa->chr;
+    qdev_prop_set_chr(&dev->qdev, "chardev", NULL);
+
+    if (chr) {
+       bdev = qdev_create(NULL, "ipmi-bmc-extern");
+       qdev_prop_set_chr(bdev, "chardev", chr);
+    } else {
+       bdev = qdev_create(NULL, "ipmi-bmc-sim");
+    }
+    snprintf(typename, sizeof(typename), "ipmi-interface-%s", isa->interface);
+    idev = qdev_create(&isa_bus->qbus, typename);
+    qdev_prop_set_ptr(bdev, "ipmiif", idev);
+    qdev_prop_set_uint64(idev, "iobase", isa->iobase);
+    qdev_prop_set_ptr(idev, "bmc", bdev);
+    qdev_prop_set_uint8(idev, "slave-addr", isa->slave_addr);
+    rc = qdev_init(idev);
I think this is adding a bit of extra complication.  You do not need to
add explicit devices for this.

Yeah, but the qdevs did a lot of nice things for me :).  But I understand.


If you want to make ipmi-bmc-* and ipmi-interface-* objects, you can
create them with object_new, set the properties manually with the
returned pointer and add the object to the parent with
object_property_add_child.

The main reason I went with qdevs originally was because all the properties are defined for qdevs. I'd have to do all my own properties otherwise.

However, I think all the properties are represented by what is already there in isa-ipmi, so just having pointers to the interface and bmc objects is ok, I think.


Otherwise, it should also be fine if you just add them as function pointers.

Either way also lets you keep the ownership of the chardev in the ISA
IPMI device, and avoids that "info qtree" looks strange and does not
show the chardev you assigned.

Yeah, I see that now.  Makes sense.

BTW, where do you want me to document this? I didn't see an obvious place in qemu-options.hx.

I'm working on tests, too. I didn't find much there already, but I'll see what I can add.

Thanks,

-corey

Reply via email to