aboutsummaryrefslogtreecommitdiff
path: root/lib/libvirtio/virtio.h
diff options
context:
space:
mode:
authorNikunj A Dadhania <nikunj@linux.vnet.ibm.com>2016-02-01 11:17:56 +0530
committerAlexey Kardashevskiy <aik@ozlabs.ru>2016-02-08 16:40:38 +1100
commitbcdf942b91c3630764e2b8935ffb4c18484053cb (patch)
treee6ff9ef54e95b28ecf3b0562afe41ac202d5323f /lib/libvirtio/virtio.h
parent805cc24afacb799a814327bd91005a5f21fd55fa (diff)
downloadSLOF-bcdf942b91c3630764e2b8935ffb4c18484053cb.zip
SLOF-bcdf942b91c3630764e2b8935ffb4c18484053cb.tar.gz
SLOF-bcdf942b91c3630764e2b8935ffb4c18484053cb.tar.bz2
virtio: introduce helper for initializing virt queue
The routine takes care to allocate and set the queue address in the device. Add these calls in virtio-net, virtio-blk and virtio-9p. With the lack of this routine, devices like virtio-blk and virtio-9p did not do a device reset in the driver initialization code. This helper will fix that problem Change the signature of virtio_set_qaddr, accepting queue address as unsigned long argument. Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Diffstat (limited to 'lib/libvirtio/virtio.h')
-rw-r--r--lib/libvirtio/virtio.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/libvirtio/virtio.h b/lib/libvirtio/virtio.h
index 9d6d8da..e41f47d 100644
--- a/lib/libvirtio/virtio.h
+++ b/lib/libvirtio/virtio.h
@@ -66,6 +66,15 @@ struct virtio_device {
int type; /* VIRTIO_TYPE_PCI or VIRTIO_TYPE_VIO */
};
+struct vqs {
+ uint64_t id; /* Queue ID */
+ uint32_t size;
+ void *buf_mem;
+ struct vring_desc *desc;
+ struct vring_avail *avail;
+ struct vring_used *used;
+};
+
/* Parts of the virtqueue are aligned on a 4096 byte page boundary */
#define VQ_ALIGN(addr) (((addr) + 0xfff) & ~0xfff)
@@ -74,11 +83,12 @@ extern int virtio_get_qsize(struct virtio_device *dev, int queue);
extern struct vring_desc *virtio_get_vring_desc(struct virtio_device *dev, int queue);
extern struct vring_avail *virtio_get_vring_avail(struct virtio_device *dev, int queue);
extern struct vring_used *virtio_get_vring_used(struct virtio_device *dev, int queue);
+extern int virtio_queue_init_vq(struct virtio_device *dev, struct vqs *vq, unsigned int id);
extern void virtio_reset_device(struct virtio_device *dev);
extern void virtio_queue_notify(struct virtio_device *dev, int queue);
extern void virtio_set_status(struct virtio_device *dev, int status);
-extern void virtio_set_qaddr(struct virtio_device *dev, int queue, unsigned int qaddr);
+extern void virtio_set_qaddr(struct virtio_device *dev, int queue, unsigned long qaddr);
extern void virtio_set_guest_features(struct virtio_device *dev, int features);
extern void virtio_get_host_features(struct virtio_device *dev, int *features);
extern uint64_t virtio_get_config(struct virtio_device *dev, int offset, int size);