qemu/include/hw/virtio/virtio-dmabuf.h
Albert Esteve faefdba847 hw/display: introduce virtio-dmabuf
This API manages objects (in this iteration,
dmabuf fds) that can be shared along different
virtio devices, associated to a UUID.

The API allows the different devices to add,
remove and/or retrieve the objects by simply
invoking the public functions that reside in the
virtio-dmabuf file.

For vhost backends, the API stores the pointer
to the backend holding the object.

Suggested-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Albert Esteve <aesteve@redhat.com>
Message-Id: <20231002065706.94707-3-aesteve@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2023-10-04 18:15:06 -04:00

101 lines
3.0 KiB
C

/*
* Virtio Shared dma-buf
*
* Copyright Red Hat, Inc. 2023
*
* Authors:
* Albert Esteve <aesteve@redhat.com>
*
* This work is licensed under the terms of the GNU GPL, version 2.
* See the COPYING file in the top-level directory.
*/
#ifndef VIRTIO_DMABUF_H
#define VIRTIO_DMABUF_H
#include "qemu/uuid.h"
#include "vhost.h"
typedef enum SharedObjectType {
TYPE_INVALID = 0,
TYPE_DMABUF,
TYPE_VHOST_DEV,
} SharedObjectType;
typedef struct VirtioSharedObject {
SharedObjectType type;
gpointer value;
} VirtioSharedObject;
/**
* virtio_add_dmabuf() - Add a new dma-buf resource to the lookup table
* @uuid: new resource's UUID
* @dmabuf_fd: the dma-buf descriptor that will be stored and shared with
* other virtio devices. The caller retains ownership over the
* descriptor and its lifecycle.
*
* Note: @dmabuf_fd must be a valid (non-negative) file descriptor.
*
* Return: true if the UUID did not exist and the resource has been added,
* false if another resource with the same UUID already existed.
* Note that if it finds a repeated UUID, the resource is not inserted in
* the lookup table.
*/
bool virtio_add_dmabuf(QemuUUID *uuid, int dmabuf_fd);
/**
* virtio_add_vhost_device() - Add a new exporter vhost device that holds the
* resource with the associated UUID
* @uuid: new resource's UUID
* @dev: the pointer to the vhost device that holds the resource. The caller
* retains ownership over the device struct and its lifecycle.
*
* Return: true if the UUID did not exist and the device has been tracked,
* false if another resource with the same UUID already existed.
* Note that if it finds a repeated UUID, the resource is not inserted in
* the lookup table.
*/
bool virtio_add_vhost_device(QemuUUID *uuid, struct vhost_dev *dev);
/**
* virtio_remove_resource() - Removes a resource from the lookup table
* @uuid: resource's UUID
*
* Return: true if the UUID has been found and removed from the lookup table.
*/
bool virtio_remove_resource(const QemuUUID *uuid);
/**
* virtio_lookup_dmabuf() - Looks for a dma-buf resource in the lookup table
* @uuid: resource's UUID
*
* Return: the dma-buf file descriptor integer, or -1 if the key is not found.
*/
int virtio_lookup_dmabuf(const QemuUUID *uuid);
/**
* virtio_lookup_vhost_device() - Looks for an exporter vhost device in the
* lookup table
* @uuid: resource's UUID
*
* Return: pointer to the vhost_dev struct, or NULL if the key is not found.
*/
struct vhost_dev *virtio_lookup_vhost_device(const QemuUUID *uuid);
/**
* virtio_object_type() - Looks for the type of resource in the lookup table
* @uuid: resource's UUID
*
* Return: the type of resource associated with the UUID, or TYPE_INVALID if
* the key is not found.
*/
SharedObjectType virtio_object_type(const QemuUUID *uuid);
/**
* virtio_free_resources() - Destroys all keys and values of the shared
* resources lookup table, and frees them
*/
void virtio_free_resources(void);
#endif /* VIRTIO_DMABUF_H */