Lines Matching +full:- +full:- +full:-
2 * Virtio vhost-user GPU Device
7 * See the COPYING file in the top-level directory.
16 buf->mmap = g_malloc(buf->width * buf->height * 4); in mem_alloc_bo()
17 buf->stride = buf->width * 4; in mem_alloc_bo()
24 g_free(buf->mmap); in mem_free_bo()
30 return buf->mmap != NULL; in mem_map_bo()
56 return ROUND_UP(buf->width * buf->height * 4, qemu_real_host_page_size()); in udmabuf_get_size()
64 buf->memfd = memfd_create("udmabuf-bo", MFD_ALLOW_SEALING); in udmabuf_alloc_bo()
65 if (buf->memfd < 0) { in udmabuf_alloc_bo()
69 ret = ftruncate(buf->memfd, udmabuf_get_size(buf)); in udmabuf_alloc_bo()
71 close(buf->memfd); in udmabuf_alloc_bo()
75 ret = fcntl(buf->memfd, F_ADD_SEALS, F_SEAL_SHRINK); in udmabuf_alloc_bo()
77 close(buf->memfd); in udmabuf_alloc_bo()
81 buf->stride = buf->width * 4; in udmabuf_alloc_bo()
89 close(buf->memfd); in udmabuf_free_bo()
95 buf->mmap = mmap(NULL, udmabuf_get_size(buf), in udmabuf_map_bo()
96 PROT_READ | PROT_WRITE, MAP_SHARED, buf->memfd, 0); in udmabuf_map_bo()
97 if (buf->mmap == MAP_FAILED) { in udmabuf_map_bo()
108 .memfd = buf->memfd, in udmabuf_get_fd()
113 *fd = ioctl(buf->dev->fd, UDMABUF_CREATE, &create); in udmabuf_get_fd()
121 munmap(buf->mmap, udmabuf_get_size(buf)); in udmabuf_unmap_bo()
127 close(dev->fd); in udmabuf_device_destroy()
135 struct gbm_device *dev = buf->dev->dev; in alloc_bo()
137 assert(!buf->bo); in alloc_bo()
139 buf->bo = gbm_bo_create(dev, buf->width, buf->height, in alloc_bo()
140 buf->format, in alloc_bo()
143 if (buf->bo) { in alloc_bo()
144 buf->stride = gbm_bo_get_stride(buf->bo); in alloc_bo()
154 gbm_bo_destroy(buf->bo); in free_bo()
162 buf->mmap = gbm_bo_map(buf->bo, 0, 0, buf->width, buf->height, in map_bo()
164 &buf->mmap_data); in map_bo()
166 assert(stride == buf->stride); in map_bo()
168 return buf->mmap != NULL; in map_bo()
174 gbm_bo_unmap(buf->bo, buf->mmap_data); in unmap_bo()
180 *fd = gbm_bo_get_fd(buf->bo); in get_fd()
188 gbm_device_destroy(dev->dev); in device_destroy()
195 if (!dev->inited) { in vugbm_device_destroy()
199 dev->device_destroy(dev); in vugbm_device_destroy()
205 assert(!dev->inited); in vugbm_device_init()
209 dev->dev = gbm_create_device(fd); in vugbm_device_init()
211 if (dev->dev != NULL) { in vugbm_device_init()
212 dev->fd = fd; in vugbm_device_init()
213 dev->alloc_bo = alloc_bo; in vugbm_device_init()
214 dev->free_bo = free_bo; in vugbm_device_init()
215 dev->get_fd = get_fd; in vugbm_device_init()
216 dev->map_bo = map_bo; in vugbm_device_init()
217 dev->unmap_bo = unmap_bo; in vugbm_device_init()
218 dev->device_destroy = device_destroy; in vugbm_device_init()
219 dev->inited = true; in vugbm_device_init()
223 if (!dev->inited && g_file_test("/dev/udmabuf", G_FILE_TEST_EXISTS)) { in vugbm_device_init()
224 dev->fd = open("/dev/udmabuf", O_RDWR); in vugbm_device_init()
225 if (dev->fd >= 0) { in vugbm_device_init()
227 dev->alloc_bo = udmabuf_alloc_bo; in vugbm_device_init()
228 dev->free_bo = udmabuf_free_bo; in vugbm_device_init()
229 dev->get_fd = udmabuf_get_fd; in vugbm_device_init()
230 dev->map_bo = udmabuf_map_bo; in vugbm_device_init()
231 dev->unmap_bo = udmabuf_unmap_bo; in vugbm_device_init()
232 dev->device_destroy = udmabuf_device_destroy; in vugbm_device_init()
233 dev->inited = true; in vugbm_device_init()
237 if (!dev->inited) { in vugbm_device_init()
239 dev->alloc_bo = mem_alloc_bo; in vugbm_device_init()
240 dev->free_bo = mem_free_bo; in vugbm_device_init()
241 dev->map_bo = mem_map_bo; in vugbm_device_init()
242 dev->unmap_bo = mem_unmap_bo; in vugbm_device_init()
243 dev->device_destroy = mem_device_destroy; in vugbm_device_init()
244 dev->inited = true; in vugbm_device_init()
246 assert(dev->inited); in vugbm_device_init()
252 struct vugbm_device *dev = buf->dev; in vugbm_buffer_map()
254 return dev->map_bo(buf); in vugbm_buffer_map()
260 struct vugbm_device *dev = buf->dev; in vugbm_buffer_unmap()
262 dev->unmap_bo(buf); in vugbm_buffer_unmap()
268 if (!buffer->dev->get_fd) { in vugbm_buffer_can_get_dmabuf_fd()
279 !buffer->dev->get_fd(buffer, fd)) { in vugbm_buffer_get_dmabuf_fd()
296 buffer->dev = dev; in vugbm_buffer_create()
297 buffer->width = width; in vugbm_buffer_create()
298 buffer->height = height; in vugbm_buffer_create()
299 buffer->format = GBM_FORMAT_XRGB8888; in vugbm_buffer_create()
300 buffer->stride = 0; /* modified during alloc */ in vugbm_buffer_create()
301 if (!dev->alloc_bo(buffer)) { in vugbm_buffer_create()
314 dev->free_bo(buffer); in vugbm_buffer_create()
321 struct vugbm_device *dev = buffer->dev; in vugbm_buffer_destroy()
324 dev->free_bo(buffer); in vugbm_buffer_destroy()