Lines Matching refs:drv

113 	struct driver *drv;  in drv_create()  local
116 drv = (struct driver *)calloc(1, sizeof(*drv)); in drv_create()
118 if (!drv) in drv_create()
123 drv->compression = (minigbm_debug == NULL) || (strcmp(minigbm_debug, "nocompression") != 0); in drv_create()
125 drv->fd = fd; in drv_create()
126 drv->backend = drv_get_backend(fd); in drv_create()
128 if (!drv->backend) in drv_create()
131 if (pthread_mutex_init(&drv->driver_lock, NULL)) in drv_create()
134 drv->buffer_table = drmHashCreate(); in drv_create()
135 if (!drv->buffer_table) in drv_create()
138 drv->mappings = drv_array_init(sizeof(struct mapping)); in drv_create()
139 if (!drv->mappings) in drv_create()
142 drv->combos = drv_array_init(sizeof(struct combination)); in drv_create()
143 if (!drv->combos) in drv_create()
146 if (drv->backend->init) { in drv_create()
147 ret = drv->backend->init(drv); in drv_create()
149 drv_array_destroy(drv->combos); in drv_create()
154 return drv; in drv_create()
157 drv_array_destroy(drv->mappings); in drv_create()
159 drmHashDestroy(drv->buffer_table); in drv_create()
161 pthread_mutex_destroy(&drv->driver_lock); in drv_create()
163 free(drv); in drv_create()
167 void drv_destroy(struct driver *drv) in drv_destroy() argument
169 pthread_mutex_lock(&drv->driver_lock); in drv_destroy()
171 if (drv->backend->close) in drv_destroy()
172 drv->backend->close(drv); in drv_destroy()
174 drmHashDestroy(drv->buffer_table); in drv_destroy()
175 drv_array_destroy(drv->mappings); in drv_destroy()
176 drv_array_destroy(drv->combos); in drv_destroy()
178 pthread_mutex_unlock(&drv->driver_lock); in drv_destroy()
179 pthread_mutex_destroy(&drv->driver_lock); in drv_destroy()
181 free(drv); in drv_destroy()
184 int drv_get_fd(struct driver *drv) in drv_get_fd() argument
186 return drv->fd; in drv_get_fd()
189 const char *drv_get_name(struct driver *drv) in drv_get_name() argument
191 return drv->backend->name; in drv_get_name()
194 struct combination *drv_get_combination(struct driver *drv, uint32_t format, uint64_t use_flags) in drv_get_combination() argument
203 for (i = 0; i < drv_array_size(drv->combos); i++) { in drv_get_combination()
204 curr = drv_array_at_idx(drv->combos, i); in drv_get_combination()
213 struct bo *drv_bo_new(struct driver *drv, uint32_t width, uint32_t height, uint32_t format, in drv_bo_new() argument
223 bo->drv = drv; in drv_bo_new()
239 struct bo *drv_bo_create(struct driver *drv, uint32_t width, uint32_t height, uint32_t format, in drv_bo_create() argument
250 bo = drv_bo_new(drv, width, height, format, use_flags, is_test_alloc); in drv_bo_create()
256 if (drv->backend->bo_compute_metadata) { in drv_bo_create()
257 ret = drv->backend->bo_compute_metadata(bo, width, height, format, use_flags, NULL, in drv_bo_create()
260 ret = drv->backend->bo_create_from_metadata(bo); in drv_bo_create()
262 ret = drv->backend->bo_create(bo, width, height, format, use_flags); in drv_bo_create()
270 pthread_mutex_lock(&drv->driver_lock); in drv_bo_create()
276 drv_increment_reference_count(drv, bo, plane); in drv_bo_create()
279 pthread_mutex_unlock(&drv->driver_lock); in drv_bo_create()
284 struct bo *drv_bo_create_with_modifiers(struct driver *drv, uint32_t width, uint32_t height, in drv_bo_create_with_modifiers() argument
291 if (!drv->backend->bo_create_with_modifiers && !drv->backend->bo_compute_metadata) { in drv_bo_create_with_modifiers()
296 bo = drv_bo_new(drv, width, height, format, BO_USE_NONE, false); in drv_bo_create_with_modifiers()
302 if (drv->backend->bo_compute_metadata) { in drv_bo_create_with_modifiers()
303 ret = drv->backend->bo_compute_metadata(bo, width, height, format, BO_USE_NONE, in drv_bo_create_with_modifiers()
306 ret = drv->backend->bo_create_from_metadata(bo); in drv_bo_create_with_modifiers()
308 ret = drv->backend->bo_create_with_modifiers(bo, width, height, format, modifiers, in drv_bo_create_with_modifiers()
317 pthread_mutex_lock(&drv->driver_lock); in drv_bo_create_with_modifiers()
323 drv_increment_reference_count(drv, bo, plane); in drv_bo_create_with_modifiers()
326 pthread_mutex_unlock(&drv->driver_lock); in drv_bo_create_with_modifiers()
336 struct driver *drv = bo->drv; in drv_bo_destroy() local
339 pthread_mutex_lock(&drv->driver_lock); in drv_bo_destroy()
342 drv_decrement_reference_count(drv, bo, plane); in drv_bo_destroy()
345 total += drv_get_reference_count(drv, bo, plane); in drv_bo_destroy()
347 pthread_mutex_unlock(&drv->driver_lock); in drv_bo_destroy()
352 bo->drv->backend->bo_destroy(bo); in drv_bo_destroy()
359 struct bo *drv_bo_import(struct driver *drv, struct drv_import_fd_data *data) in drv_bo_import() argument
366 bo = drv_bo_new(drv, data->width, data->height, data->format, data->use_flags, false); in drv_bo_import()
371 ret = drv->backend->bo_import(bo, data); in drv_bo_import()
378 pthread_mutex_lock(&bo->drv->driver_lock); in drv_bo_import()
379 drv_increment_reference_count(bo->drv, bo, plane); in drv_bo_import()
380 pthread_mutex_unlock(&bo->drv->driver_lock); in drv_bo_import()
436 pthread_mutex_lock(&bo->drv->driver_lock); in drv_bo_map()
438 for (i = 0; i < drv_array_size(bo->drv->mappings); i++) { in drv_bo_map()
439 struct mapping *prior = (struct mapping *)drv_array_at_idx(bo->drv->mappings, i); in drv_bo_map()
453 for (i = 0; i < drv_array_size(bo->drv->mappings); i++) { in drv_bo_map()
454 struct mapping *prior = (struct mapping *)drv_array_at_idx(bo->drv->mappings, i); in drv_bo_map()
466 addr = bo->drv->backend->bo_map(bo, mapping.vma, plane, map_flags); in drv_bo_map()
470 pthread_mutex_unlock(&bo->drv->driver_lock); in drv_bo_map()
480 *map_data = drv_array_append(bo->drv->mappings, &mapping); in drv_bo_map()
485 pthread_mutex_unlock(&bo->drv->driver_lock); in drv_bo_map()
494 pthread_mutex_lock(&bo->drv->driver_lock); in drv_bo_unmap()
500 ret = bo->drv->backend->bo_unmap(bo, mapping->vma); in drv_bo_unmap()
504 for (i = 0; i < drv_array_size(bo->drv->mappings); i++) { in drv_bo_unmap()
505 if (mapping == (struct mapping *)drv_array_at_idx(bo->drv->mappings, i)) { in drv_bo_unmap()
506 drv_array_remove(bo->drv->mappings, i); in drv_bo_unmap()
512 pthread_mutex_unlock(&bo->drv->driver_lock); in drv_bo_unmap()
525 if (bo->drv->backend->bo_invalidate) in drv_bo_invalidate()
526 ret = bo->drv->backend->bo_invalidate(bo, mapping); in drv_bo_invalidate()
540 if (bo->drv->backend->bo_flush) in drv_bo_flush()
541 ret = bo->drv->backend->bo_flush(bo, mapping); in drv_bo_flush()
556 if (bo->drv->backend->bo_flush) in drv_bo_flush_or_unmap()
557 ret = bo->drv->backend->bo_flush(bo, mapping); in drv_bo_flush_or_unmap()
597 ret = drmPrimeHandleToFD(bo->drv->fd, bo->handles[plane].u32, DRM_CLOEXEC | DRM_RDWR, &fd); in drv_bo_get_plane_fd()
601 ret = drmPrimeHandleToFD(bo->drv->fd, bo->handles[plane].u32, DRM_CLOEXEC, &fd); in drv_bo_get_plane_fd()
642 uint32_t drv_resolve_format(struct driver *drv, uint32_t format, uint64_t use_flags) in drv_resolve_format() argument
644 if (drv->backend->resolve_format) in drv_resolve_format()
645 return drv->backend->resolve_format(drv, format, use_flags); in drv_resolve_format()
694 if (bo->drv->backend->resource_info) in drv_resource_info()
695 return bo->drv->backend->resource_info(bo, strides, offsets, format_modifier); in drv_resource_info()