From: KONRAD Frederic <fred.kon...@greensocs.com> I think the global structure is good as we discuted in the V4. So, I tried to start device refactoring, and also made some little fix.
For the device refactoring, what are you suggesting for replacing VirtIOBindings ? Also, the virtio_pci_init_cb(..) currently use direct access to VirtIODevice, can I just implement functions in virtio-bus to access the fields ? ( eg : get/set_nvectors ). Finally, any idea on how I can make this patch-set for not breaking anything ? The virtio-blk refactoring breaks all virtio-blk devices. This patch-set is : * Introducing a virtio-bus which extends bus-state. * Implementing a virtio-pci-bus which extends virtio-bus. * Implementing a virtio-pci device which has a virtio-pci-bus. * Implementing virtio-device which extends device-states. * Implementing a virtio-blk which extends virtio-device. The first patch is a modification of qdev-monitor.c, it forces the function qbus_find_recursive(..) to return a non-full bus, and return an error if the desired bus ( with "bus=" option ) is full. It add a max_dev field to the bus_state structure. If max_dev=0 it has no limitation, if not the maximum amount of device connected to the bus is max_dev. Changes v4 -> v5: * use ERROR_CLASS_GENERIC_ERROR in place of creating a new error type for the maximum device limitation. ( Peter ) * Removed bus_in_use function. We assume that the virtio-bus is not in use, when plugin in. ( Peter ) * Added virtio_bus_destroy_device(). * Implemented the exit function of virtio-pci. * Implemented the init callback for virtio-pci ( must be modified, it still access vdev directly. ). * Implemented the exit callback for virtio-pci. * Started virtio-device refactoring. * Started virtio-blk refactoring. Changes v3 -> v4: * Added virtio-bus.o in Makefile.objs ( accidentally dropped from v3 ). * *const* TypeInfo in virtio-bus. * Introduced virtio-pci-bus. * Reintroduced virtio-pci. * Introduced virtio-device. * Started virtio-blk refactoring. * Added an error type in qerror.h for the "bus full" error. Changes v2 -> v3: * Added VirtioBusClass. * Renamed VirtioBus -> VirtioBusState. * Renamed qbus -> parent_obj. * Plug the device only in a non-full bus. Changes v1 -> v2: * All the little fix you suggest ( License, Debug printf, naming convention, ...) * Added get_virtio_device_id(), and remove the pci_id* from the VirtioBus structure. * Added virtio_bus_reset(). * Added cast macros VIRTIO_BUS. * Added virtio_bus_plug_device. * Replaced the old-style "bus->qbus" by BUS() macro. Fred. KONRAD Frederic (6): qdev : add a maximum device allowed field for the bus. virtio-bus : Introduce virtio-bus virtio-pci-bus : Introduce virtio-pci-bus. virtio-pci : Refactor virtio-pci device. virtio-device : Refactor virtio-device. virtio-blk : Refactor virtio-blk. hw/Makefile.objs | 1 + hw/qdev-core.h | 2 + hw/qdev-monitor.c | 11 ++++ hw/virtio-blk.c | 170 ++++++++++++++++++++++++++++++++++++++++++++++-------- hw/virtio-blk.h | 4 ++ hw/virtio-bus.c | 111 +++++++++++++++++++++++++++++++++++ hw/virtio-bus.h | 76 ++++++++++++++++++++++++ hw/virtio-pci.c | 149 +++++++++++++++++++++++++++++++++++++++++++++++ hw/virtio-pci.h | 33 ++++++++++- hw/virtio.c | 56 ++++++++++++++++++ hw/virtio.h | 29 ++++++++++ 11 files changed, 616 insertions(+), 26 deletions(-) create mode 100644 hw/virtio-bus.c create mode 100644 hw/virtio-bus.h -- 1.7.11.7