2019-05-24 16:09:42 +03:00
|
|
|
/*
|
|
|
|
* Virtio vhost-user GPU Device
|
|
|
|
*
|
|
|
|
* GBM helpers
|
|
|
|
*
|
|
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
|
|
* See the COPYING file in the top-level directory.
|
|
|
|
*/
|
2019-06-07 17:13:21 +03:00
|
|
|
|
|
|
|
#ifndef VHOST_USER_GPU_VUGBM_H
|
|
|
|
#define VHOST_USER_GPU_VUGBM_H
|
2019-05-24 16:09:42 +03:00
|
|
|
|
|
|
|
|
|
|
|
#ifdef CONFIG_MEMFD
|
|
|
|
#include <sys/ioctl.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef CONFIG_GBM
|
|
|
|
#include <gbm.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
struct vugbm_buffer;
|
|
|
|
|
|
|
|
struct vugbm_device {
|
|
|
|
bool inited;
|
|
|
|
int fd;
|
|
|
|
#ifdef CONFIG_GBM
|
|
|
|
struct gbm_device *dev;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
bool (*alloc_bo)(struct vugbm_buffer *buf);
|
|
|
|
void (*free_bo)(struct vugbm_buffer *buf);
|
|
|
|
bool (*get_fd)(struct vugbm_buffer *buf, int *fd);
|
|
|
|
bool (*map_bo)(struct vugbm_buffer *buf);
|
|
|
|
void (*unmap_bo)(struct vugbm_buffer *buf);
|
|
|
|
void (*device_destroy)(struct vugbm_device *dev);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct vugbm_buffer {
|
|
|
|
struct vugbm_device *dev;
|
|
|
|
|
|
|
|
#ifdef CONFIG_MEMFD
|
|
|
|
int memfd;
|
|
|
|
#endif
|
|
|
|
#ifdef CONFIG_GBM
|
|
|
|
struct gbm_bo *bo;
|
|
|
|
void *mmap_data;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
uint8_t *mmap;
|
|
|
|
uint32_t width;
|
|
|
|
uint32_t height;
|
|
|
|
uint32_t stride;
|
|
|
|
uint32_t format;
|
|
|
|
};
|
|
|
|
|
|
|
|
bool vugbm_device_init(struct vugbm_device *dev, int fd);
|
|
|
|
void vugbm_device_destroy(struct vugbm_device *dev);
|
|
|
|
|
|
|
|
bool vugbm_buffer_create(struct vugbm_buffer *buffer, struct vugbm_device *dev,
|
|
|
|
uint32_t width, uint32_t height);
|
|
|
|
bool vugbm_buffer_can_get_dmabuf_fd(struct vugbm_buffer *buffer);
|
|
|
|
bool vugbm_buffer_get_dmabuf_fd(struct vugbm_buffer *buffer, int *fd);
|
|
|
|
void vugbm_buffer_destroy(struct vugbm_buffer *buffer);
|
|
|
|
|
|
|
|
#endif
|