• Home
  • Raw
  • Download

Lines Matching refs:bo

33 void bo_del(struct fd_bo *bo);
36 static void set_name(struct fd_bo *bo, uint32_t name) in set_name() argument
38 bo->name = name; in set_name()
40 _mesa_hash_table_insert(bo->dev->name_table, &bo->name, bo); in set_name()
46 struct fd_bo *bo = NULL; in lookup_bo() local
50 bo = fd_bo_ref(entry->data); in lookup_bo()
53 list_delinit(&bo->list); in lookup_bo()
55 return bo; in lookup_bo()
62 struct fd_bo *bo; in bo_from_handle() local
64 bo = dev->funcs->bo_from_handle(dev, size, handle); in bo_from_handle()
65 if (!bo) { in bo_from_handle()
72 bo->dev = dev; in bo_from_handle()
73 bo->size = size; in bo_from_handle()
74 bo->handle = handle; in bo_from_handle()
75 bo->iova = bo->funcs->iova(bo); in bo_from_handle()
76 bo->flags = FD_RELOC_FLAGS_INIT; in bo_from_handle()
78 p_atomic_set(&bo->refcnt, 1); in bo_from_handle()
79 list_inithead(&bo->list); in bo_from_handle()
81 _mesa_hash_table_insert(dev->handle_table, &bo->handle, bo); in bo_from_handle()
82 return bo; in bo_from_handle()
89 struct fd_bo *bo = NULL; in bo_new() local
93 bo = fd_bo_cache_alloc(cache, &size, flags); in bo_new()
94 if (bo) in bo_new()
95 return bo; in bo_new()
102 bo = bo_from_handle(dev, size, handle); in bo_new()
105 VG_BO_ALLOC(bo); in bo_new()
107 return bo; in bo_new()
113 struct fd_bo *bo = bo_new(dev, size, flags, &dev->bo_cache); in _fd_bo_new() local
114 if (bo) in _fd_bo_new()
115 bo->bo_reuse = BO_CACHE; in _fd_bo_new()
116 return bo; in _fd_bo_new()
120 _fd_bo_set_name(struct fd_bo *bo, const char *fmt, va_list ap) in _fd_bo_set_name() argument
122 bo->funcs->set_name(bo, fmt, ap); in _fd_bo_set_name()
134 struct fd_bo *bo = bo_new(dev, size, flags, &dev->ring_cache); in fd_bo_new_ring() local
135 if (bo) { in fd_bo_new_ring()
136 bo->bo_reuse = RING_CACHE; in fd_bo_new_ring()
137 bo->flags |= FD_RELOC_DUMP; in fd_bo_new_ring()
138 fd_bo_set_name(bo, "cmdstream"); in fd_bo_new_ring()
140 return bo; in fd_bo_new_ring()
146 struct fd_bo *bo = NULL; in fd_bo_from_handle() local
150 bo = lookup_bo(dev->handle_table, handle); in fd_bo_from_handle()
151 if (bo) in fd_bo_from_handle()
154 bo = bo_from_handle(dev, size, handle); in fd_bo_from_handle()
156 VG_BO_ALLOC(bo); in fd_bo_from_handle()
161 return bo; in fd_bo_from_handle()
169 struct fd_bo *bo; in fd_bo_from_dmabuf() local
178 bo = lookup_bo(dev->handle_table, handle); in fd_bo_from_dmabuf()
179 if (bo) in fd_bo_from_dmabuf()
186 bo = bo_from_handle(dev, size, handle); in fd_bo_from_dmabuf()
188 VG_BO_ALLOC(bo); in fd_bo_from_dmabuf()
193 return bo; in fd_bo_from_dmabuf()
201 struct fd_bo *bo; in fd_bo_from_name() local
206 bo = lookup_bo(dev->name_table, name); in fd_bo_from_name()
207 if (bo) in fd_bo_from_name()
215 bo = lookup_bo(dev->handle_table, req.handle); in fd_bo_from_name()
216 if (bo) in fd_bo_from_name()
219 bo = bo_from_handle(dev, req.size, req.handle); in fd_bo_from_name()
220 if (bo) { in fd_bo_from_name()
221 set_name(bo, name); in fd_bo_from_name()
222 VG_BO_ALLOC(bo); in fd_bo_from_name()
228 return bo; in fd_bo_from_name()
232 fd_bo_mark_for_dump(struct fd_bo *bo) in fd_bo_mark_for_dump() argument
234 bo->flags |= FD_RELOC_DUMP; in fd_bo_mark_for_dump()
237 uint64_t fd_bo_get_iova(struct fd_bo *bo) in fd_bo_get_iova() argument
240 assert(bo->iova != 0); in fd_bo_get_iova()
241 return bo->iova; in fd_bo_get_iova()
244 struct fd_bo * fd_bo_ref(struct fd_bo *bo) in fd_bo_ref() argument
246 p_atomic_inc(&bo->refcnt); in fd_bo_ref()
247 return bo; in fd_bo_ref()
250 void fd_bo_del(struct fd_bo *bo) in fd_bo_del() argument
252 struct fd_device *dev = bo->dev; in fd_bo_del()
254 if (!atomic_dec_and_test(&bo->refcnt)) in fd_bo_del()
259 if ((bo->bo_reuse == BO_CACHE) && (fd_bo_cache_free(&dev->bo_cache, bo) == 0)) in fd_bo_del()
261 if ((bo->bo_reuse == RING_CACHE) && (fd_bo_cache_free(&dev->ring_cache, bo) == 0)) in fd_bo_del()
264 bo_del(bo); in fd_bo_del()
271 void bo_del(struct fd_bo *bo) in bo_del() argument
273 VG_BO_FREE(bo); in bo_del()
275 if (bo->map) in bo_del()
276 os_munmap(bo->map, bo->size); in bo_del()
282 if (bo->handle) { in bo_del()
284 .handle = bo->handle, in bo_del()
286 _mesa_hash_table_remove_key(bo->dev->handle_table, &bo->handle); in bo_del()
287 if (bo->name) in bo_del()
288 _mesa_hash_table_remove_key(bo->dev->name_table, &bo->name); in bo_del()
289 drmIoctl(bo->dev->fd, DRM_IOCTL_GEM_CLOSE, &req); in bo_del()
292 bo->funcs->destroy(bo); in bo_del()
295 int fd_bo_get_name(struct fd_bo *bo, uint32_t *name) in fd_bo_get_name() argument
297 if (!bo->name) { in fd_bo_get_name()
299 .handle = bo->handle, in fd_bo_get_name()
303 ret = drmIoctl(bo->dev->fd, DRM_IOCTL_GEM_FLINK, &req); in fd_bo_get_name()
309 set_name(bo, req.name); in fd_bo_get_name()
311 bo->bo_reuse = NO_CACHE; in fd_bo_get_name()
314 *name = bo->name; in fd_bo_get_name()
319 uint32_t fd_bo_handle(struct fd_bo *bo) in fd_bo_handle() argument
321 bo->bo_reuse = NO_CACHE; in fd_bo_handle()
322 return bo->handle; in fd_bo_handle()
325 int fd_bo_dmabuf(struct fd_bo *bo) in fd_bo_dmabuf() argument
329 ret = drmPrimeHandleToFD(bo->dev->fd, bo->handle, DRM_CLOEXEC, in fd_bo_dmabuf()
336 bo->bo_reuse = NO_CACHE; in fd_bo_dmabuf()
341 uint32_t fd_bo_size(struct fd_bo *bo) in fd_bo_size() argument
343 return bo->size; in fd_bo_size()
346 void * fd_bo_map(struct fd_bo *bo) in fd_bo_map() argument
348 if (!bo->map) { in fd_bo_map()
352 ret = bo->funcs->offset(bo, &offset); in fd_bo_map()
357 bo->map = os_mmap(0, bo->size, PROT_READ | PROT_WRITE, MAP_SHARED, in fd_bo_map()
358 bo->dev->fd, offset); in fd_bo_map()
359 if (bo->map == MAP_FAILED) { in fd_bo_map()
361 bo->map = NULL; in fd_bo_map()
364 return bo->map; in fd_bo_map()
368 int fd_bo_cpu_prep(struct fd_bo *bo, struct fd_pipe *pipe, uint32_t op) in fd_bo_cpu_prep() argument
370 return bo->funcs->cpu_prep(bo, pipe, op); in fd_bo_cpu_prep()
373 void fd_bo_cpu_fini(struct fd_bo *bo) in fd_bo_cpu_fini() argument
375 bo->funcs->cpu_fini(bo); in fd_bo_cpu_fini()