On 02/09/2011 06:48 PM, Blue Swirl wrote:

We can just do:

ISASerialState dev;

isa_serial_init(&dev, 0, 0x274, 0x07, NULL, NULL);
Do you mean that there should be a generic way of doing that, like
sysbus_create_varargs() for qdev, or just add inline functions which
hide qdev property setup?

qdev properties are construct-only right now.

What qdev is trying to do is provide a mechanism invoke constructors through a factory interface where the inputs can come from many places.

Another way of doing this is to just have a normal constructor like:

void isa_serial_init(ISASerialState *dev, uint32_t iobase, ...)
{
     dev->iobase = iobase;
}

And then have an (autogenerated) factory proxy:

static ISASerialState *isa_serial_factory(QemuOpts *opts)
{
     ISASerialState *isa = qemu_mallocz(sizeof(*isa));
     isa_serial_init(isa, qemu_opt_get_int(opts, "iobase"), ...);
     return isa;
}

The advantage of this model is that you can have multiple factory interfaces to create a device. For instance, you can have a QemuOpts based factory for -device and a QDict based factory for QMP.

In addition, normal C code doesn't have to deal with any of the factory interfaces. It can just invoke a normal C interface.

Building the factory interface as an intrinsic part of qdev was a mistake IMHO.

Regards,

Anthony Liguori

I still think that FDT should be used in the future. That would
require that the properties can be set up mechanically, and I don't
see how your proposal would help that.


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to