Lines Matching refs:bo

38 static void drm_tegra_bo_free(struct drm_tegra_bo *bo)
40 struct drm_tegra *drm = bo->drm;
42 if (bo->map)
43 munmap(bo->map, bo->size);
45 drmCloseBufferHandle(drm->fd, bo->handle);
47 free(bo);
105 struct drm_tegra_bo *bo;
107 bo = calloc(1, sizeof(*bo));
108 if (!bo)
111 atomic_set(&bo->ref, 1);
112 bo->handle = handle;
113 bo->flags = flags;
114 bo->size = size;
115 bo->drm = drm;
117 return bo;
125 struct drm_tegra_bo *bo;
131 bo = drm_tegra_bo_alloc(drm, 0, flags, size);
132 if (!bo)
143 free(bo);
147 bo->handle = args.handle;
149 *bop = bo;
158 struct drm_tegra_bo *bo;
163 bo = drm_tegra_bo_alloc(drm, handle, flags, size);
164 if (!bo)
167 *bop = bo;
172 drm_public struct drm_tegra_bo *drm_tegra_bo_ref(struct drm_tegra_bo *bo)
174 if (bo)
175 atomic_inc(&bo->ref);
177 return bo;
180 drm_public void drm_tegra_bo_unref(struct drm_tegra_bo *bo)
182 if (bo && atomic_dec_and_test(&bo->ref))
183 drm_tegra_bo_free(bo);
187 drm_tegra_bo_get_handle(struct drm_tegra_bo *bo, uint32_t *handle)
189 if (!bo || !handle)
192 *handle = bo->handle;
197 drm_public int drm_tegra_bo_map(struct drm_tegra_bo *bo, void **ptr)
199 struct drm_tegra *drm = bo->drm;
201 if (!bo->map) {
206 args.handle = bo->handle;
213 bo->offset = args.offset;
215 bo->map = drm_mmap(NULL, bo->size, PROT_READ | PROT_WRITE, MAP_SHARED,
216 drm->fd, bo->offset);
217 if (bo->map == MAP_FAILED) {
218 bo->map = NULL;
224 *ptr = bo->map;
229 drm_public int drm_tegra_bo_unmap(struct drm_tegra_bo *bo)
231 if (!bo)
234 if (!bo->map)
237 if (munmap(bo->map, bo->size))
240 bo->map = NULL;
245 drm_public int drm_tegra_bo_get_name(struct drm_tegra_bo *bo, uint32_t *name)
247 struct drm_tegra *drm = bo->drm;
252 args.handle = bo->handle;
269 struct drm_tegra_bo *bo;
272 bo = drm_tegra_bo_alloc(drm, 0, flags, 0);
273 if (!bo)
283 bo->handle = args.handle;
284 bo->size = args.size;
286 *bop = bo;
291 free(bo);
295 drm_public int drm_tegra_bo_export(struct drm_tegra_bo *bo, uint32_t flags)
301 err = drmPrimeHandleToFD(bo->drm->fd, bo->handle, flags, &fd);
331 struct drm_tegra_bo *bo;
339 bo = drm_tegra_bo_alloc(drm, 0, 0, size);
340 if (!bo)
343 err = drmPrimeFDToHandle(drm->fd, fd, &bo->handle);
347 *bop = bo;
352 free(bo);