aboutsummaryrefslogtreecommitdiff
path: root/lib/libvirtio/virtio.code
diff options
context:
space:
mode:
authorAvik Sil <aviksil@linux.vnet.ibm.com>2013-09-23 14:07:35 +0530
committerNikunj A Dadhania <nikunj@linux.vnet.ibm.com>2013-10-04 12:00:13 +0530
commit46a32aa9c74be70b7f247f4aae00951755784973 (patch)
tree864720ec001977fcd2e310735f02e70c6a0c747d /lib/libvirtio/virtio.code
parenteb5994df206de4b36501a978c00309962d6dd3f5 (diff)
downloadSLOF-46a32aa9c74be70b7f247f4aae00951755784973.zip
SLOF-46a32aa9c74be70b7f247f4aae00951755784973.tar.gz
SLOF-46a32aa9c74be70b7f247f4aae00951755784973.tar.bz2
Add virtio-net driver in libvirtio
Signed-off-by: Avik Sil <aviksil@linux.vnet.ibm.com> Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Diffstat (limited to 'lib/libvirtio/virtio.code')
-rw-r--r--lib/libvirtio/virtio.code43
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/libvirtio/virtio.code b/lib/libvirtio/virtio.code
index 9c50c92..304849e 100644
--- a/lib/libvirtio/virtio.code
+++ b/lib/libvirtio/virtio.code
@@ -14,6 +14,7 @@
#include <virtio-blk.h>
#include <virtio-9p.h>
#include <virtio-scsi.h>
+#include <virtio-net.h>
/******** core virtio ********/
@@ -119,3 +120,45 @@ PRIM(virtio_X2d_scsi_X2d_send)
TOS.n = virtioscsi_send(dev, req, resp, is_read, buf, blen);
MIRP
+/******** virtio-net ********/
+
+// : virtio-net-open ( mac-addr-str len dev -- false | [ driver true ] )
+PRIM(virtio_X2d_net_X2d_open)
+{
+ void *dev = TOS.a; POP;
+ int len = TOS.u; POP;
+ char *mac_addr = TOS.a;
+
+ net_driver_t *net_driver = virtionet_open(mac_addr, len, dev);
+
+ if (net_driver) {
+ TOS.u = (unsigned long)net_driver; PUSH;
+ TOS.n = -1;
+ } else
+ TOS.n = 0;
+}
+MIRP
+
+// : virtio-net-close ( driver -- )
+PRIM(virtio_X2d_net_X2d_close)
+{
+ net_driver_t *driver = TOS.a; POP;
+ virtionet_close(driver);
+}
+MIRP
+
+// : virtio-net-read ( addr len -- actual )
+PRIM(virtio_X2d_net_X2d_read)
+{
+ int len = TOS.u; POP;
+ TOS.n = virtionet_read(TOS.a, len);
+}
+MIRP
+
+// : virtio-net-write ( addr len -- actual )
+PRIM(virtio_X2d_net_X2d_write)
+{
+ int len = TOS.u; POP;
+ TOS.n = virtionet_write(TOS.a, len);
+}
+MIRP