diff options
-rw-r--r-- | hw/virtio/virtio.c | 24 | ||||
-rw-r--r-- | include/hw/virtio/virtio.h | 4 |
2 files changed, 28 insertions, 0 deletions
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 0f88c25..53a0d90 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -1087,6 +1087,18 @@ EventNotifier *virtio_queue_get_host_notifier(VirtQueue *vq) return &vq->host_notifier; } +void virtio_device_set_child_bus_name(VirtIODevice *vdev, char *bus_name) +{ + if (vdev->bus_name) { + g_free(vdev->bus_name); + vdev->bus_name = NULL; + } + + if (bus_name) { + vdev->bus_name = g_strdup(bus_name); + } +} + static int virtio_device_init(DeviceState *qdev) { VirtIODevice *vdev = VIRTIO_DEVICE(qdev); @@ -1099,11 +1111,23 @@ static int virtio_device_init(DeviceState *qdev) return 0; } +static int virtio_device_exit(DeviceState *qdev) +{ + VirtIODevice *vdev = VIRTIO_DEVICE(qdev); + + if (vdev->bus_name) { + g_free(vdev->bus_name); + vdev->bus_name = NULL; + } + return 0; +} + static void virtio_device_class_init(ObjectClass *klass, void *data) { /* Set the default value here. */ DeviceClass *dc = DEVICE_CLASS(klass); dc->init = virtio_device_init; + dc->exit = virtio_device_exit; dc->bus_type = TYPE_VIRTIO_BUS; } diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index ae7a4c4..a6c5c53 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -118,6 +118,7 @@ struct VirtIODevice uint16_t device_id; bool vm_running; VMChangeStateEntry *vmstate; + char *bus_name; }; typedef struct VirtioDeviceClass { @@ -149,6 +150,9 @@ void virtio_init(VirtIODevice *vdev, const char *name, uint16_t device_id, size_t config_size); void virtio_cleanup(VirtIODevice *vdev); +/* Set the child bus name. */ +void virtio_device_set_child_bus_name(VirtIODevice *vdev, char *bus_name); + VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size, void (*handle_output)(VirtIODevice *, VirtQueue *)); |