diff options
author | Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com> | 2015-10-28 11:12:13 +0100 |
---|---|---|
committer | Cornelia Huck <cornelia.huck@de.ibm.com> | 2016-03-23 16:13:38 +0100 |
commit | 8944edc3dd9928b10f39194350b035cac0b40d0d (patch) | |
tree | acb6fa798be18e04cb9d46d1a81ab3f9c7cef5e8 /pc-bios/s390-ccw/virtio.c | |
parent | a1102cebbfa0c9b3f66641ab97cf2c602c98d220 (diff) |
pc-bios/s390-ccw: add simplified virtio call
Add virtio_run(VirtioCmd) call to use simple declarative approach.
Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'pc-bios/s390-ccw/virtio.c')
-rw-r--r-- | pc-bios/s390-ccw/virtio.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 56734aff44..4ab4d475c0 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -225,6 +225,23 @@ static int vring_wait_reply(void) return 1; } +int virtio_run(VDev *vdev, int vqid, VirtioCmd *cmd) +{ + VRing *vr = &vdev->vrings[vqid]; + int i = 0; + + do { + vring_send_buf(vr, cmd[i].data, cmd[i].size, + cmd[i].flags | (i ? VRING_HIDDEN_IS_CHAIN : 0)); + } while (cmd[i++].flags & VRING_DESC_F_NEXT); + + vring_wait_reply(); + if (drain_irqs(vr->schid)) { + return -1; + } + return 0; +} + /*********************************************** * Virtio block * ***********************************************/ |