diff options
author | Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> | 2016-02-01 11:17:56 +0530 |
---|---|---|
committer | Alexey Kardashevskiy <aik@ozlabs.ru> | 2016-02-08 16:40:38 +1100 |
commit | bcdf942b91c3630764e2b8935ffb4c18484053cb (patch) | |
tree | e6ff9ef54e95b28ecf3b0562afe41ac202d5323f /lib/libvirtio/virtio.h | |
parent | 805cc24afacb799a814327bd91005a5f21fd55fa (diff) | |
download | SLOF-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.h | 12 |
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); |