diff options
author | Michael S. Tsirkin <mst@redhat.com> | 2009-06-21 19:50:13 +0300 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-06-24 09:09:14 -0500 |
commit | 7055e687cd4cea5befefb2d8012e4e2574cfa9b3 (patch) | |
tree | d5827b1fae3a5f3523d2c024443b19e10c57ade1 /hw/virtio.h | |
parent | 54c96da798141feadd1424ef43fba19757e50d39 (diff) |
qemu/virtio: virtio support for many interrupt vectors
Extend virtio to support many interrupt vectors, and rearrange code in
preparation for multi-vector support (mostly move reset out to bindings,
because we will have to reset the vectors in transport-specific code).
Actual bindings in pci, and use in net, to follow.
Load and save are not connected to bindings yet, so they are left
stubbed out for now.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/virtio.h')
-rw-r--r-- | hw/virtio.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/hw/virtio.h b/hw/virtio.h index 46ed0b28ed..e1b31d0d23 100644 --- a/hw/virtio.h +++ b/hw/virtio.h @@ -75,11 +75,13 @@ typedef struct VirtQueueElement } VirtQueueElement; typedef struct { - void (*update_irq)(void * opaque); + void (*notify)(void * opaque, uint16_t vector); } VirtIOBindings; #define VIRTIO_PCI_QUEUE_MAX 16 +#define VIRTIO_NO_VECTOR 0xffff + struct VirtIODevice { const char *name; @@ -89,6 +91,8 @@ struct VirtIODevice uint32_t features; size_t config_len; void *config; + uint16_t config_vector; + int nvectors; uint32_t (*get_features)(VirtIODevice *vdev); uint32_t (*bad_features)(VirtIODevice *vdev); void (*set_features)(VirtIODevice *vdev, uint32_t val); @@ -118,7 +122,7 @@ void virtio_notify(VirtIODevice *vdev, VirtQueue *vq); void virtio_save(VirtIODevice *vdev, QEMUFile *f); -void virtio_load(VirtIODevice *vdev, QEMUFile *f); +int virtio_load(VirtIODevice *vdev, QEMUFile *f); void virtio_cleanup(VirtIODevice *vdev); @@ -144,6 +148,8 @@ void virtio_queue_set_addr(VirtIODevice *vdev, int n, target_phys_addr_t addr); target_phys_addr_t virtio_queue_get_addr(VirtIODevice *vdev, int n); int virtio_queue_get_num(VirtIODevice *vdev, int n); void virtio_queue_notify(VirtIODevice *vdev, int n); +uint16_t virtio_queue_vector(VirtIODevice *vdev, int n); +void virtio_queue_set_vector(VirtIODevice *vdev, int n, uint16_t vector); void virtio_reset(void *opaque); void virtio_update_irq(VirtIODevice *vdev); |