aboutsummaryrefslogtreecommitdiff
path: root/lib/libvirtio/virtio.code
diff options
context:
space:
mode:
authorNikunj A. Dadhania <nikunj@linux.vnet.ibm.com>2013-06-05 16:05:09 +1000
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-06-05 16:12:31 +1000
commitb5595b4565b65e02c6cdc083951bc439b9a353af (patch)
tree6fee9f9d4776ebbd88e97f03a56e66038296b85d /lib/libvirtio/virtio.code
parent41deea102e8233b7278155a0c41bf850bc5a6d07 (diff)
downloadSLOF-b5595b4565b65e02c6cdc083951bc439b9a353af.zip
SLOF-b5595b4565b65e02c6cdc083951bc439b9a353af.tar.gz
SLOF-b5595b4565b65e02c6cdc083951bc439b9a353af.tar.bz2
SLOF: virtio-scsi helper routines
* initialize/shutdown virtio-scsi device * routine for sending scsi commands to virtio-scsi device [ Modified to pass the whole virtio req/resp from forth to allow better handling of status and sense buffer -- BenH ] Signed-off-by: Nikunj A. Dadhania <nikunj@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'lib/libvirtio/virtio.code')
-rw-r--r--lib/libvirtio/virtio.code27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/libvirtio/virtio.code b/lib/libvirtio/virtio.code
index 100cc96..9c50c92 100644
--- a/lib/libvirtio/virtio.code
+++ b/lib/libvirtio/virtio.code
@@ -13,6 +13,7 @@
#include <virtio.h>
#include <virtio-blk.h>
#include <virtio-9p.h>
+#include <virtio-scsi.h>
/******** core virtio ********/
@@ -92,3 +93,29 @@ PRIM(virtio_X2d_fs_X2d_load)
TOS.n = virtio_9p_load(dev, str, buf);
MIRP
+
+/******** virtio-scsi ********/
+
+// : virtio-scsi-init ( dev -- success )
+PRIM(virtio_X2d_scsi_X2d_init)
+ void *dev = TOS.a;
+ TOS.u = virtioscsi_init(dev);
+MIRP
+
+// : virtio-scsi-shutdown ( dev -- )
+PRIM(virtio_X2d_scsi_X2d_shutdown)
+ void *dev = TOS.a; POP;
+ virtioscsi_shutdown(dev);
+MIRP
+
+// : virtio-scsi-send ( buf_addr buf_len is_read req_ptr rsp_ptr dev -- success)
+PRIM(virtio_X2d_scsi_X2d_send)
+ void *dev = TOS.a; POP;
+ void *resp = TOS.a; POP;
+ void *req = TOS.a; POP;
+ int is_read = !!TOS.n; POP;
+ uint64_t blen = TOS.n; POP;
+ void *buf = TOS.a;
+ TOS.n = virtioscsi_send(dev, req, resp, is_read, buf, blen);
+MIRP
+