Revision 5e52e5f9 hw/virtio-serial-bus.c

b/hw/virtio-serial-bus.c
39 39
    /* Arrays of ivqs and ovqs: one per port */
40 40
    VirtQueue **ivqs, **ovqs;
41 41

  
42
    VirtIOSerialBus *bus;
42
    VirtIOSerialBus bus;
43 43

  
44 44
    DeviceState *qdev;
45 45

  
......
331 331
    case VIRTIO_CONSOLE_DEVICE_READY:
332 332
        if (!cpkt.value) {
333 333
            error_report("virtio-serial-bus: Guest failure in adding device %s\n",
334
                         vser->bus->qbus.name);
334
                         vser->bus.qbus.name);
335 335
            break;
336 336
        }
337 337
        /*
......
346 346
    case VIRTIO_CONSOLE_PORT_READY:
347 347
        if (!cpkt.value) {
348 348
            error_report("virtio-serial-bus: Guest failure in adding port %u for device %s\n",
349
                         port->id, vser->bus->qbus.name);
349
                         port->id, vser->bus.qbus.name);
350 350
            break;
351 351
        }
352 352
        /*
......
473 473

  
474 474
    vser = DO_UPCAST(VirtIOSerial, vdev, vdev);
475 475

  
476
    if (vser->bus->max_nr_ports > 1) {
476
    if (vser->bus.max_nr_ports > 1) {
477 477
        features |= (1 << VIRTIO_CONSOLE_F_MULTIPORT);
478 478
    }
479 479
    return features;
......
650 650
    .print_dev = virtser_bus_dev_print,
651 651
};
652 652

  
653
static VirtIOSerialBus *virtser_bus_new(DeviceState *dev)
654
{
655
    VirtIOSerialBus *bus;
656

  
657
    bus = FROM_QBUS(VirtIOSerialBus, qbus_create(&virtser_bus_info, dev, NULL));
658
    bus->qbus.allow_hotplug = 1;
659

  
660
    return bus;
661
}
662

  
663 653
static void virtser_bus_dev_print(Monitor *mon, DeviceState *qdev, int indent)
664 654
{
665 655
    VirtIOSerialPort *port = DO_UPCAST(VirtIOSerialPort, dev, qdev);
......
843 833
    vser = DO_UPCAST(VirtIOSerial, vdev, vdev);
844 834

  
845 835
    /* Spawn a new virtio-serial bus on which the ports will ride as devices */
846
    vser->bus = virtser_bus_new(dev);
847
    vser->bus->vser = vser;
836
    qbus_create_inplace(&vser->bus.qbus, &virtser_bus_info, dev, NULL);
837
    vser->bus.qbus.allow_hotplug = 1;
838
    vser->bus.vser = vser;
848 839
    QTAILQ_INIT(&vser->ports);
849 840

  
850
    vser->bus->max_nr_ports = conf->max_virtserial_ports;
841
    vser->bus.max_nr_ports = conf->max_virtserial_ports;
851 842
    vser->ivqs = qemu_malloc(conf->max_virtserial_ports * sizeof(VirtQueue *));
852 843
    vser->ovqs = qemu_malloc(conf->max_virtserial_ports * sizeof(VirtQueue *));
853 844

  
......
867 858
    /* control queue: guest to host */
868 859
    vser->c_ovq = virtio_add_queue(vdev, 32, control_out);
869 860

  
870
    for (i = 1; i < vser->bus->max_nr_ports; i++) {
861
    for (i = 1; i < vser->bus.max_nr_ports; i++) {
871 862
        /* Add a per-port queue for host to guest transfers */
872 863
        vser->ivqs[i] = virtio_add_queue(vdev, 128, handle_input);
873 864
        /* Add a per-per queue for guest to host transfers */

Also available in: Unified diff