1 /* 2 * Virtio Shared dma-buf 3 * 4 * Copyright Red Hat, Inc. 2023 5 * 6 * Authors: 7 * Albert Esteve <aesteve@redhat.com> 8 * 9 * This work is licensed under the terms of the GNU GPL, version 2. 10 * See the COPYING file in the top-level directory. 11 */ 12 13 #ifndef VIRTIO_DMABUF_H 14 #define VIRTIO_DMABUF_H 15 16 #include "qemu/uuid.h" 17 #include "vhost.h" 18 19 typedef enum SharedObjectType { 20 TYPE_INVALID = 0, 21 TYPE_DMABUF, 22 TYPE_VHOST_DEV, 23 } SharedObjectType; 24 25 typedef struct VirtioSharedObject { 26 SharedObjectType type; 27 gpointer value; 28 } VirtioSharedObject; 29 30 /** 31 * virtio_add_dmabuf() - Add a new dma-buf resource to the lookup table 32 * @uuid: new resource's UUID 33 * @dmabuf_fd: the dma-buf descriptor that will be stored and shared with 34 * other virtio devices. The caller retains ownership over the 35 * descriptor and its lifecycle. 36 * 37 * Note: @dmabuf_fd must be a valid (non-negative) file descriptor. 38 * 39 * Return: true if the UUID did not exist and the resource has been added, 40 * false if another resource with the same UUID already existed. 41 * Note that if it finds a repeated UUID, the resource is not inserted in 42 * the lookup table. 43 */ 44 bool virtio_add_dmabuf(QemuUUID *uuid, int dmabuf_fd); 45 46 /** 47 * virtio_add_vhost_device() - Add a new exporter vhost device that holds the 48 * resource with the associated UUID 49 * @uuid: new resource's UUID 50 * @dev: the pointer to the vhost device that holds the resource. The caller 51 * retains ownership over the device struct and its lifecycle. 52 * 53 * Return: true if the UUID did not exist and the device has been tracked, 54 * false if another resource with the same UUID already existed. 55 * Note that if it finds a repeated UUID, the resource is not inserted in 56 * the lookup table. 57 */ 58 bool virtio_add_vhost_device(QemuUUID *uuid, struct vhost_dev *dev); 59 60 /** 61 * virtio_remove_resource() - Removes a resource from the lookup table 62 * @uuid: resource's UUID 63 * 64 * Return: true if the UUID has been found and removed from the lookup table. 65 */ 66 bool virtio_remove_resource(const QemuUUID *uuid); 67 68 /** 69 * virtio_lookup_dmabuf() - Looks for a dma-buf resource in the lookup table 70 * @uuid: resource's UUID 71 * 72 * Return: the dma-buf file descriptor integer, or -1 if the key is not found. 73 */ 74 int virtio_lookup_dmabuf(const QemuUUID *uuid); 75 76 /** 77 * virtio_lookup_vhost_device() - Looks for an exporter vhost device in the 78 * lookup table 79 * @uuid: resource's UUID 80 * 81 * Return: pointer to the vhost_dev struct, or NULL if the key is not found. 82 */ 83 struct vhost_dev *virtio_lookup_vhost_device(const QemuUUID *uuid); 84 85 /** 86 * virtio_object_type() - Looks for the type of resource in the lookup table 87 * @uuid: resource's UUID 88 * 89 * Return: the type of resource associated with the UUID, or TYPE_INVALID if 90 * the key is not found. 91 */ 92 SharedObjectType virtio_object_type(const QemuUUID *uuid); 93 94 /** 95 * virtio_free_resources() - Destroys all keys and values of the shared 96 * resources lookup table, and frees them 97 */ 98 void virtio_free_resources(void); 99 100 #endif /* VIRTIO_DMABUF_H */ 101