void virtio_save(VirtIODevice *vdev, QEMUFile *f)

{

    BusState *qbus = qdev_get_parent_bus(DEVICE(vdev));

    VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);

    VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(vdev);

    uint32_t guest_features_lo = (vdev->guest_features & 0xffffffff);

    int i;



    if (k->save_config) {

        k->save_config(qbus->parent, f);

    }



    qemu_put_8s(f, &vdev->status);

    qemu_put_8s(f, &vdev->isr);

    qemu_put_be16s(f, &vdev->queue_sel);

    qemu_put_be32s(f, &guest_features_lo);

    qemu_put_be32(f, vdev->config_len);

    qemu_put_buffer(f, vdev->config, vdev->config_len);



    for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {

        if (vdev->vq[i].vring.num == 0)

            break;

    }



    qemu_put_be32(f, i);



    for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {

        if (vdev->vq[i].vring.num == 0)

            break;



        qemu_put_be32(f, vdev->vq[i].vring.num);

        if (k->has_variable_vring_alignment) {

            qemu_put_be32(f, vdev->vq[i].vring.align);

        }

        /* XXX virtio-1 devices */

        qemu_put_be64(f, vdev->vq[i].vring.desc);

        qemu_put_be16s(f, &vdev->vq[i].last_avail_idx);

        if (k->save_queue) {

            k->save_queue(qbus->parent, i, f);

        }

    }



    if (vdc->save != NULL) {

        vdc->save(vdev, f);

    }



    if (vdc->vmsd) {

        vmstate_save_state(f, vdc->vmsd, vdev, NULL);

    }



    /* Subsections */

    vmstate_save_state(f, &vmstate_virtio, vdev, NULL);

}

void virtio_save(VirtIODevice *vdev, QEMUFile *f)

{

    BusState *qbus = qdev_get_parent_bus(DEVICE(vdev));

    VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);

    VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(vdev);

    uint32_t guest_features_lo = (vdev->guest_features & 0xffffffff);

    int i;



    if (k->save_config) {

        k->save_config(qbus->parent, f);

    }



    qemu_put_8s(f, &vdev->status);

    qemu_put_8s(f, &vdev->isr);

    qemu_put_be16s(f, &vdev->queue_sel);

    qemu_put_be32s(f, &guest_features_lo);

    qemu_put_be32(f, vdev->config_len);

    qemu_put_buffer(f, vdev->config, vdev->config_len);



    for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {

        if (vdev->vq[i].vring.num == 0)

            break;

    }



    qemu_put_be32(f, i);



    for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {

        if (vdev->vq[i].vring.num == 0)

            break;



        qemu_put_be32(f, vdev->vq[i].vring.num);

        if (k->has_variable_vring_alignment) {

            qemu_put_be32(f, vdev->vq[i].vring.align);

        }

        

        qemu_put_be64(f, vdev->vq[i].vring.desc);

        qemu_put_be16s(f, &vdev->vq[i].last_avail_idx);

        if (k->save_queue) {

            k->save_queue(qbus->parent, i, f);

        }

    }



    if (vdc->save != NULL) {

        vdc->save(vdev, f);

    }



    if (vdc->vmsd) {

        vmstate_save_state(f, vdc->vmsd, vdev, NULL);

    }



    

    vmstate_save_state(f, &vmstate_virtio, vdev, NULL);

}

void FUNC_0(VirtIODevice *VAR_0, QEMUFile *VAR_1)

{

    BusState *qbus = qdev_get_parent_bus(DEVICE(VAR_0));

    VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);

    VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(VAR_0);

    uint32_t guest_features_lo = (VAR_0->guest_features & 0xffffffff);

    int VAR_2;



    if (k->save_config) {

        k->save_config(qbus->parent, VAR_1);

    }



    qemu_put_8s(VAR_1, &VAR_0->status);

    qemu_put_8s(VAR_1, &VAR_0->isr);

    qemu_put_be16s(VAR_1, &VAR_0->queue_sel);

    qemu_put_be32s(VAR_1, &guest_features_lo);

    qemu_put_be32(VAR_1, VAR_0->config_len);

    qemu_put_buffer(VAR_1, VAR_0->config, VAR_0->config_len);



    for (VAR_2 = 0; VAR_2 < VIRTIO_QUEUE_MAX; VAR_2++) {

        if (VAR_0->vq[VAR_2].vring.num == 0)

            break;

    }



    qemu_put_be32(VAR_1, VAR_2);



    for (VAR_2 = 0; VAR_2 < VIRTIO_QUEUE_MAX; VAR_2++) {

        if (VAR_0->vq[VAR_2].vring.num == 0)

            break;



        qemu_put_be32(VAR_1, VAR_0->vq[VAR_2].vring.num);

        if (k->has_variable_vring_alignment) {

            qemu_put_be32(VAR_1, VAR_0->vq[VAR_2].vring.align);

        }

        

        qemu_put_be64(VAR_1, VAR_0->vq[VAR_2].vring.desc);

        qemu_put_be16s(VAR_1, &VAR_0->vq[VAR_2].last_avail_idx);

        if (k->save_queue) {

            k->save_queue(qbus->parent, VAR_2, VAR_1);

        }

    }



    if (vdc->save != NULL) {

        vdc->save(VAR_0, VAR_1);

    }



    if (vdc->vmsd) {

        vmstate_save_state(VAR_1, vdc->vmsd, VAR_0, NULL);

    }



    

    vmstate_save_state(VAR_1, &vmstate_virtio, VAR_0, NULL);

}

void FUNC_0(VirtIODevice *VAR_0, QEMUFile *VAR_1)
{ BusState *qbus = qdev_get_parent_bus(DEVICE(VAR_0)); VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus); VirtioDeviceClass *vdc = VIRTIO_DEVICE_GET_CLASS(VAR_0); uint32_t guest_features_lo = (VAR_0->guest_features & 0xffffffff); int VAR_2; if (k->save_config) { k->save_config(qbus->parent, VAR_1); } qemu_put_8s(VAR_1, &VAR_0->status); qemu_put_8s(VAR_1, &VAR_0->isr); qemu_put_be16s(VAR_1, &VAR_0->queue_sel); qemu_put_be32s(VAR_1, &guest_features_lo); qemu_put_be32(VAR_1, VAR_0->config_len); qemu_put_buffer(VAR_1, VAR_0->config, VAR_0->config_len); for (VAR_2 = 0; VAR_2 < VIRTIO_QUEUE_MAX; VAR_2++) { if (VAR_0->vq[VAR_2].vring.num == 0)
break; } qemu_put_be32(VAR_1, VAR_2); for (VAR_2 = 0; VAR_2 < VIRTIO_QUEUE_MAX; VAR_2++) { if (VAR_0->vq[VAR_2].vring.num == 0)
break; qemu_put_be32(VAR_1, VAR_0->vq[VAR_2].vring.num); if (k->has_variable_vring_alignment) { qemu_put_be32(VAR_1, VAR_0->vq[VAR_2].vring.align); } qemu_put_be64(VAR_1, VAR_0->vq[VAR_2].vring.desc); qemu_put_be16s(VAR_1, &VAR_0->vq[VAR_2].last_avail_idx); if (k->save_queue) { k->save_queue(qbus->parent, VAR_2, VAR_1); } } if (vdc->save != NULL) { vdc->save(VAR_0, VAR_1); } if (vdc->vmsd) { vmstate_save_state(VAR_1, vdc->vmsd, VAR_0, NULL); } vmstate_save_state(VAR_1, &vmstate_virtio, VAR_0, NULL); }