1/* 2 * Virtio vhost-user GPU Device 3 * 4 * GBM helpers 5 * 6 * This work is licensed under the terms of the GNU GPL, version 2 or later. 7 * See the COPYING file in the top-level directory. 8 */ 9 10#ifndef VHOST_USER_GPU_VUGBM_H 11#define VHOST_USER_GPU_VUGBM_H 12 13#include "qemu/osdep.h" 14 15#ifdef CONFIG_MEMFD 16#include <sys/mman.h> 17#include <sys/ioctl.h> 18#endif 19 20#ifdef CONFIG_GBM 21#include <gbm.h> 22#endif 23 24struct vugbm_buffer; 25 26struct vugbm_device { 27 bool inited; 28 int fd; 29#ifdef CONFIG_GBM 30 struct gbm_device *dev; 31#endif 32 33 bool (*alloc_bo)(struct vugbm_buffer *buf); 34 void (*free_bo)(struct vugbm_buffer *buf); 35 bool (*get_fd)(struct vugbm_buffer *buf, int *fd); 36 bool (*map_bo)(struct vugbm_buffer *buf); 37 void (*unmap_bo)(struct vugbm_buffer *buf); 38 void (*device_destroy)(struct vugbm_device *dev); 39}; 40 41struct vugbm_buffer { 42 struct vugbm_device *dev; 43 44#ifdef CONFIG_MEMFD 45 int memfd; 46#endif 47#ifdef CONFIG_GBM 48 struct gbm_bo *bo; 49 void *mmap_data; 50#endif 51 52 uint8_t *mmap; 53 uint32_t width; 54 uint32_t height; 55 uint32_t stride; 56 uint32_t format; 57}; 58 59bool vugbm_device_init(struct vugbm_device *dev, int fd); 60void vugbm_device_destroy(struct vugbm_device *dev); 61 62bool vugbm_buffer_create(struct vugbm_buffer *buffer, struct vugbm_device *dev, 63 uint32_t width, uint32_t height); 64bool vugbm_buffer_can_get_dmabuf_fd(struct vugbm_buffer *buffer); 65bool vugbm_buffer_get_dmabuf_fd(struct vugbm_buffer *buffer, int *fd); 66void vugbm_buffer_destroy(struct vugbm_buffer *buffer); 67 68#endif 69