]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
first shell of gnttab be ops
authorDavid Woodhouse <dwmw@amazon.co.uk>
Fri, 6 Jan 2023 09:59:28 +0000 (09:59 +0000)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Fri, 6 Jan 2023 09:59:42 +0000 (09:59 +0000)
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
hw/i386/kvm/xen_gnttab.c

index 79805b9f74a9158f326cf82cf2f5c0fa93d11ddf..b52a6bb7ad05cf4d11b0648532a666589983800a 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "hw/sysbus.h"
 #include "hw/xen/xen.h"
+#include "hw/xen/xen_backend_ops.h"
 #include "xen_overlay.h"
 #include "xen_gnttab.h"
 
@@ -59,11 +60,12 @@ struct XenGnttabState {
     MemoryRegion gnt_frames;
     MemoryRegion *gnt_aliases;
     uint64_t *gnt_frame_gpas;
+
+    uint32_t *map_track;
 };
 
 struct XenGnttabState *xen_gnttab_singleton;
 
-
 static void xen_gnttab_realize(DeviceState *dev, Error **errp)
 {
     XenGnttabState *s = XEN_GNTTAB(dev);
@@ -94,6 +96,8 @@ static void xen_gnttab_realize(DeviceState *dev, Error **errp)
     qemu_mutex_init(&s->gnt_lock);
 
     xen_gnttab_singleton = s;
+
+    s->map_track = g_new0(uint32_t, s->max_frames * ENTRIES_PER_FRAME_V1);
 }
 
 static int xen_gnttab_post_load(void *opaque, int version_id)
@@ -239,3 +243,63 @@ int xen_gnttab_query_size_op(struct gnttab_query_size *size)
     size->max_nr_frames = s->max_frames;
     return 0;
 }
+
+struct xengntdev_handle {
+    GHashTable *maps;
+};
+
+/* Track per-open refs, to allow close() to clean up. */
+struct instance_map {
+    void *virt_addr;
+    grant_ref_t gref;
+    uint32_t count;
+};
+
+static int xen_be_gnttab_set_max_grants(struct xengntdev_handle *xgt, uint32_t nr_grants)
+{
+    return 0;
+}
+
+static void *xen_be_gnttab_map_refs(struct xengntdev_handle *xgt, uint32_t count,
+                                    uint32_t domid, uint32_t *refs, int prot)
+{
+    return NULL;
+}
+
+static int xen_be_gnttab_unmap(struct xengntdev_handle *xgt,
+                               void *start_address, uint32_t count)
+{
+    return 0;
+}
+
+static int xen_be_gnttab_copy(struct xengntdev_handle *xgt, bool to_domain, uint32_t domid,
+                              XenGrantCopySegment *segs, uint32_t nr_segs,
+                              Error **errp)
+{
+    return -ENOTSUP;
+}
+
+static struct xengntdev_handle *xen_be_gnttab_open(void)
+{
+    struct xengntdev_handle *xgt = g_new0(struct xengntdev_handle, 1);
+
+    xgt->maps = g_hash_table_new(g_direct_hash, g_direct_equal);
+    return xgt;
+}
+
+static int xen_be_gnttab_close(struct xengntdev_handle *xgt)
+{
+    g_hash_table_destroy(xgt->maps);
+    g_free(xgt);
+    return 0;
+}
+
+struct gnttab_backend_ops libxengnttab_backend_ops = {
+    .open = xen_be_gnttab_open,
+    .close = xen_be_gnttab_close,
+    .grant_copy = xen_be_gnttab_copy,
+    .set_max_grants = xen_be_gnttab_set_max_grants,
+    .map_refs = xen_be_gnttab_map_refs,
+    .unmap = xen_be_gnttab_unmap,
+};
+