From 8944edc3dd9928b10f39194350b035cac0b40d0d Mon Sep 17 00:00:00 2001 From: "Eugene (jno) Dvurechenski" Date: Wed, 28 Oct 2015 11:12:13 +0100 Subject: pc-bios/s390-ccw: add simplified virtio call Add virtio_run(VirtioCmd) call to use simple declarative approach. Signed-off-by: Eugene (jno) Dvurechenski Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw/virtio.c | 17 +++++++++++++++++ pc-bios/s390-ccw/virtio.h | 9 +++++++++ 2 files changed, 26 insertions(+) (limited to 'pc-bios') 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 * ***********************************************/ diff --git a/pc-bios/s390-ccw/virtio.h b/pc-bios/s390-ccw/virtio.h index 7b227db7b8..57c71a2c93 100644 --- a/pc-bios/s390-ccw/virtio.h +++ b/pc-bios/s390-ccw/virtio.h @@ -248,4 +248,13 @@ typedef struct VDev VDev; VDev *virtio_get_device(void); VirtioDevType virtio_get_device_type(void); +struct VirtioCmd { + void *data; + int size; + int flags; +}; +typedef struct VirtioCmd VirtioCmd; + +int virtio_run(VDev *vdev, int vqid, VirtioCmd *cmd); + #endif /* VIRTIO_H */ -- cgit v1.2.3