summary refs log tree commit diff stats
path: root/hw/9pfs/9p.h
diff options
context:
space:
mode:
authorStefano Stabellini <sstabellini@kernel.org>2017-01-03 17:28:44 +0100
committerGreg Kurz <groug@kaod.org>2017-01-03 17:28:44 +0100
commitea83441cc44143b5b68a400ae4292a3eef14a675 (patch)
tree1c7cc17525478ee02fb6b468c5f21885b5d73832 /hw/9pfs/9p.h
parent583f21f8b9982d60c451e812af2d9dfe19d19d3f (diff)
downloadfocaccia-qemu-ea83441cc44143b5b68a400ae4292a3eef14a675.tar.gz
focaccia-qemu-ea83441cc44143b5b68a400ae4292a3eef14a675.zip
9pfs: introduce transport specific callbacks
Don't call virtio functions from 9pfs generic code, use generic function
callbacks instead.

Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
Signed-off-by: Greg Kurz <groug@kaod.org>
Diffstat (limited to 'hw/9pfs/9p.h')
-rw-r--r--hw/9pfs/9p.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/hw/9pfs/9p.h b/hw/9pfs/9p.h
index 07cee01aba..c8c9aa8909 100644
--- a/hw/9pfs/9p.h
+++ b/hw/9pfs/9p.h
@@ -230,6 +230,7 @@ typedef struct V9fsState
     enum p9_proto_version proto_version;
     int32_t msize;
     V9fsPDU pdus[MAX_REQ];
+    const struct V9fsTransport *transport;
     /*
      * lock ensuring atomic path update
      * on rename.
@@ -343,4 +344,22 @@ void pdu_free(V9fsPDU *pdu);
 void pdu_submit(V9fsPDU *pdu);
 void v9fs_reset(V9fsState *s);
 
+struct V9fsTransport {
+    ssize_t     (*pdu_vmarshal)(V9fsPDU *pdu, size_t offset, const char *fmt,
+                                va_list ap);
+    ssize_t     (*pdu_vunmarshal)(V9fsPDU *pdu, size_t offset, const char *fmt,
+                                  va_list ap);
+    void        (*init_iov_from_pdu)(V9fsPDU *pdu, struct iovec **piov,
+                                     unsigned int *pniov, bool is_write);
+    void        (*push_and_notify)(V9fsPDU *pdu);
+};
+
+static inline int v9fs_register_transport(V9fsState *s,
+        const struct V9fsTransport *t)
+{
+    assert(!s->transport);
+    s->transport = t;
+    return 0;
+}
+
 #endif