Merge tag 'pull-la-20220814' of https://gitlab.com/rth7680/qemu into staging
[qemu.git] / contrib / vhost-user-gpu / vugbm.h
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
22 struct vugbm_buffer;
23
24 struct 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
39 struct 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
57 void vugbm_device_init(struct vugbm_device *dev, int fd);
58 void vugbm_device_destroy(struct vugbm_device *dev);
59
60 bool vugbm_buffer_create(struct vugbm_buffer *buffer, struct vugbm_device *dev,
61 uint32_t width, uint32_t height);
62 bool vugbm_buffer_can_get_dmabuf_fd(struct vugbm_buffer *buffer);
63 bool vugbm_buffer_get_dmabuf_fd(struct vugbm_buffer *buffer, int *fd);
64 void vugbm_buffer_destroy(struct vugbm_buffer *buffer);
65
66 #endif