vugbm.h (1500B)
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 14#ifdef CONFIG_MEMFD 15#include <sys/ioctl.h> 16#endif 17 18#ifdef CONFIG_GBM 19#include <gbm.h> 20#endif 21 22struct vugbm_buffer; 23 24struct vugbm_device { 25 bool inited; 26 int fd; 27#ifdef CONFIG_GBM 28 struct gbm_device *dev; 29#endif 30 31 bool (*alloc_bo)(struct vugbm_buffer *buf); 32 void (*free_bo)(struct vugbm_buffer *buf); 33 bool (*get_fd)(struct vugbm_buffer *buf, int *fd); 34 bool (*map_bo)(struct vugbm_buffer *buf); 35 void (*unmap_bo)(struct vugbm_buffer *buf); 36 void (*device_destroy)(struct vugbm_device *dev); 37}; 38 39struct vugbm_buffer { 40 struct vugbm_device *dev; 41 42#ifdef CONFIG_MEMFD 43 int memfd; 44#endif 45#ifdef CONFIG_GBM 46 struct gbm_bo *bo; 47 void *mmap_data; 48#endif 49 50 uint8_t *mmap; 51 uint32_t width; 52 uint32_t height; 53 uint32_t stride; 54 uint32_t format; 55}; 56 57void vugbm_device_init(struct vugbm_device *dev, int fd); 58void vugbm_device_destroy(struct vugbm_device *dev); 59 60bool vugbm_buffer_create(struct vugbm_buffer *buffer, struct vugbm_device *dev, 61 uint32_t width, uint32_t height); 62bool vugbm_buffer_can_get_dmabuf_fd(struct vugbm_buffer *buffer); 63bool vugbm_buffer_get_dmabuf_fd(struct vugbm_buffer *buffer, int *fd); 64void vugbm_buffer_destroy(struct vugbm_buffer *buffer); 65 66#endif