Revision 763684be

b/hw/virtio-scsi.c
692 692
    .load_request = virtio_scsi_load_request,
693 693
};
694 694

  
695
static VirtIODevice *virtio_scsi_common_init(DeviceState *dev,
696
                                             VirtIOSCSIConf *proxyconf,
697
                                             VirtIOSCSI **ps)
695
static int virtio_scsi_device_init(VirtIODevice *vdev)
698 696
{
699
    VirtIOSCSI *s = *ps;
700
    VirtIODevice *vdev = VIRTIO_DEVICE(s);
697
    DeviceState *qdev = DEVICE(vdev);
698
    VirtIOSCSI *s = VIRTIO_SCSI(vdev);
701 699
    static int virtio_scsi_id;
702 700
    int i;
703 701

  
704
    /*
705
     * We have two cases here: the old virtio-scsi-pci device, and the
706
     * refactored virtio-scsi.
707
     */
702
    virtio_init(VIRTIO_DEVICE(s), "virtio-scsi", VIRTIO_ID_SCSI,
703
                sizeof(VirtIOSCSIConfig));
708 704

  
709
    if (s == NULL) {
710
        /* virtio-scsi-pci */
711
        s = (VirtIOSCSI *)virtio_common_init("virtio-scsi", VIRTIO_ID_SCSI,
712
                                             sizeof(VirtIOSCSIConfig),
713
                                             sizeof(VirtIOSCSI));
714
    } else {
715
        /* virtio-scsi */
716
        virtio_init(VIRTIO_DEVICE(s), "virtio-scsi", VIRTIO_ID_SCSI,
717
                    sizeof(VirtIOSCSIConfig));
718
    }
705
    s->cmd_vqs = g_malloc0(s->conf.num_queues * sizeof(VirtQueue *));
719 706

  
720
    s->cmd_vqs = g_malloc0(proxyconf->num_queues * sizeof(VirtQueue *));
721

  
722
    s->qdev = dev;
723
    s->conf = *proxyconf;
707
    s->qdev = qdev;
724 708

  
725 709
    /* TODO set up vdev function pointers */
726 710
    vdev->get_config = virtio_scsi_get_config;
......
737 721
                                         virtio_scsi_handle_cmd);
738 722
    }
739 723

  
740
    scsi_bus_new(&s->bus, dev, &virtio_scsi_scsi_info);
741
    if (!dev->hotplugged) {
724
    scsi_bus_new(&s->bus, qdev, &virtio_scsi_scsi_info);
725
    if (!qdev->hotplugged) {
742 726
        scsi_bus_legacy_handle_cmdline(&s->bus);
743 727
    }
744 728

  
745
    register_savevm(dev, "virtio-scsi", virtio_scsi_id++, 1,
729
    register_savevm(qdev, "virtio-scsi", virtio_scsi_id++, 1,
746 730
                    virtio_scsi_save, virtio_scsi_load, s);
747 731

  
748
    return vdev;
749
}
750

  
751
VirtIODevice *virtio_scsi_init(DeviceState *dev, VirtIOSCSIConf *proxyconf)
752
{
753
    VirtIOSCSI *s = NULL;
754
    return virtio_scsi_common_init(dev, proxyconf, &s);
755
}
756

  
757
void virtio_scsi_exit(VirtIODevice *vdev)
758
{
759
    VirtIOSCSI *s = (VirtIOSCSI *)vdev;
760
    unregister_savevm(s->qdev, "virtio-scsi", s);
761
    g_free(s->cmd_vqs);
762
    virtio_cleanup(vdev);
763
}
764

  
765
static int virtio_scsi_device_init(VirtIODevice *vdev)
766
{
767
    DeviceState *qdev = DEVICE(vdev);
768
    VirtIOSCSI *s = VIRTIO_SCSI(vdev);
769
    if (virtio_scsi_common_init(qdev, &(s->conf), &s) == NULL) {
770
        return -1;
771
    }
772 732
    return 0;
773 733
}
774 734

  

Also available in: Unified diff