On Tue, Nov 29, 2016 at 02:57:07PM +0100, Cornelia Huck wrote: > On Fri, 25 Nov 2016 20:05:42 -0200 > Eduardo Habkost <ehabk...@redhat.com> wrote: > > > Each bus class will now be aware of the specific device types > > that can be plugged on it. That will be useful for: > > > > * Runtime check for which devices types can be plugged to the > > machine; > > * Validation of query-machines output by automated tests. > > > > By default, a single type name is used on all bus instances (set > > at BusClass::device_type), but bus instances can override it and > > return a different type list. > > > > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > > I've read (well, more skimmed through) the whole patchset and I think > we have different cases of "multiple device types for one bus": > > - the q35 root bus case later in this patchset, where just a certain > instance of the bus can accept multiple types > - the case where every instance of a bus may accept multiple types > (none currently; but this will be the case for e.g. virtual-css once we > have other derivates of CCW_DEVICE than virtio-ccw)
Are all going to be subclasses of TYPE_CCW_DEVICE, and are all TYPE_CCW_DEVICE subclasses going to be accepted by virtual-css? In this case, you could just set BusClass::device_type to TYPE_CCW_DEVICE on virtual-css-bus. > > For the second case, a static initializer for multiple types in the > class makes sense; If necessary, we can change BusClass::device_type to a BusClass::device_types list. I didn't do that because it didn't seem necessary (and I would like to encourage buses to encode compatiblity using a single type/interface name whenever possible). > but the first case is a bit hackish. Should there be > a generic way to pass a list of types to the individual bus instance's > initializers (that could fall back to a static list in the class)? Sound good, but I don't know how that generic mechanism could look like. Would a: void bus_add_accepted_device_type(BusState *bus, const char *devtype) function be enough? -- Eduardo