Lines Matching refs:bo
163 struct omap_bo *bo = NULL; in lookup_bo() local
164 if (!drmHashLookup(dev->handle_table, handle, (void **)&bo)) { in lookup_bo()
166 bo = omap_bo_ref(bo); in lookup_bo()
168 return bo; in lookup_bo()
175 struct omap_bo *bo = calloc(sizeof(*bo), 1); in bo_from_handle() local
176 if (!bo) { in bo_from_handle()
180 bo->dev = omap_device_ref(dev); in bo_from_handle()
181 bo->handle = handle; in bo_from_handle()
182 bo->fd = -1; in bo_from_handle()
183 atomic_set(&bo->refcnt, 1); in bo_from_handle()
185 drmHashInsert(dev->handle_table, handle, bo); in bo_from_handle()
186 return bo; in bo_from_handle()
193 struct omap_bo *bo = NULL; in omap_bo_new_impl() local
208 bo = bo_from_handle(dev, req.handle); in omap_bo_new_impl()
212 bo->size = round_up(size.tiled.width, PAGE_SIZE) * size.tiled.height; in omap_bo_new_impl()
214 bo->size = size.bytes; in omap_bo_new_impl()
217 return bo; in omap_bo_new_impl()
220 free(bo); in omap_bo_new_impl()
255 drm_public struct omap_bo *omap_bo_ref(struct omap_bo *bo) in omap_bo_ref() argument
257 atomic_inc(&bo->refcnt); in omap_bo_ref()
258 return bo; in omap_bo_ref()
262 static int get_buffer_info(struct omap_bo *bo) in get_buffer_info() argument
265 .handle = bo->handle, in get_buffer_info()
267 int ret = drmCommandWriteRead(bo->dev->fd, DRM_OMAP_GEM_INFO, in get_buffer_info()
274 bo->offset = req.offset; in get_buffer_info()
275 bo->size = req.size; in get_buffer_info()
284 struct omap_bo *bo = NULL; in omap_bo_from_name() local
295 bo = lookup_bo(dev, req.handle); in omap_bo_from_name()
296 if (!bo) { in omap_bo_from_name()
297 bo = bo_from_handle(dev, req.handle); in omap_bo_from_name()
298 bo->name = name; in omap_bo_from_name()
303 return bo; in omap_bo_from_name()
307 free(bo); in omap_bo_from_name()
318 struct omap_bo *bo = NULL; in omap_bo_from_dmabuf() local
331 bo = lookup_bo(dev, req.handle); in omap_bo_from_dmabuf()
332 if (!bo) { in omap_bo_from_dmabuf()
333 bo = bo_from_handle(dev, req.handle); in omap_bo_from_dmabuf()
338 return bo; in omap_bo_from_dmabuf()
342 free(bo); in omap_bo_from_dmabuf()
347 drm_public void omap_bo_del(struct omap_bo *bo) in omap_bo_del() argument
349 if (!bo) { in omap_bo_del()
353 if (!atomic_dec_and_test(&bo->refcnt)) in omap_bo_del()
356 if (bo->map) { in omap_bo_del()
357 munmap(bo->map, bo->size); in omap_bo_del()
360 if (bo->fd >= 0) { in omap_bo_del()
361 close(bo->fd); in omap_bo_del()
364 if (bo->handle) { in omap_bo_del()
366 drmHashDelete(bo->dev->handle_table, bo->handle); in omap_bo_del()
367 drmCloseBufferHandle(bo->dev->fd, bo->handle); in omap_bo_del()
371 omap_device_del(bo->dev); in omap_bo_del()
373 free(bo); in omap_bo_del()
377 drm_public int omap_bo_get_name(struct omap_bo *bo, uint32_t *name) in omap_bo_get_name() argument
379 if (!bo->name) { in omap_bo_get_name()
381 .handle = bo->handle, in omap_bo_get_name()
385 ret = drmIoctl(bo->dev->fd, DRM_IOCTL_GEM_FLINK, &req); in omap_bo_get_name()
390 bo->name = req.name; in omap_bo_get_name()
393 *name = bo->name; in omap_bo_get_name()
398 drm_public uint32_t omap_bo_handle(struct omap_bo *bo) in omap_bo_handle() argument
400 return bo->handle; in omap_bo_handle()
406 drm_public int omap_bo_dmabuf(struct omap_bo *bo) in omap_bo_dmabuf() argument
408 if (bo->fd < 0) { in omap_bo_dmabuf()
410 .handle = bo->handle, in omap_bo_dmabuf()
415 ret = drmIoctl(bo->dev->fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &req); in omap_bo_dmabuf()
420 bo->fd = req.fd; in omap_bo_dmabuf()
422 return dup(bo->fd); in omap_bo_dmabuf()
425 drm_public uint32_t omap_bo_size(struct omap_bo *bo) in omap_bo_size() argument
427 if (!bo->size) { in omap_bo_size()
428 get_buffer_info(bo); in omap_bo_size()
430 return bo->size; in omap_bo_size()
433 drm_public void *omap_bo_map(struct omap_bo *bo) in omap_bo_map() argument
435 if (!bo->map) { in omap_bo_map()
436 if (!bo->offset) { in omap_bo_map()
437 get_buffer_info(bo); in omap_bo_map()
440 bo->map = mmap(0, bo->size, PROT_READ | PROT_WRITE, in omap_bo_map()
441 MAP_SHARED, bo->dev->fd, bo->offset); in omap_bo_map()
442 if (bo->map == MAP_FAILED) { in omap_bo_map()
443 bo->map = NULL; in omap_bo_map()
446 return bo->map; in omap_bo_map()
449 drm_public int omap_bo_cpu_prep(struct omap_bo *bo, enum omap_gem_op op) in omap_bo_cpu_prep() argument
452 .handle = bo->handle, in omap_bo_cpu_prep()
455 return drmCommandWrite(bo->dev->fd, in omap_bo_cpu_prep()
459 drm_public int omap_bo_cpu_fini(struct omap_bo *bo, enum omap_gem_op op) in omap_bo_cpu_fini() argument
462 .handle = bo->handle, in omap_bo_cpu_fini()
466 return drmCommandWrite(bo->dev->fd, in omap_bo_cpu_fini()