• Home
  • Raw
  • Download

Lines Matching refs:bo

32 static int __qxl_bo_pin(struct qxl_bo *bo);
33 static void __qxl_bo_unpin(struct qxl_bo *bo);
37 struct qxl_bo *bo; in qxl_ttm_bo_destroy() local
40 bo = to_qxl_bo(tbo); in qxl_ttm_bo_destroy()
41 qdev = to_qxl(bo->tbo.base.dev); in qxl_ttm_bo_destroy()
43 qxl_surface_evict(qdev, bo, false); in qxl_ttm_bo_destroy()
44 WARN_ON_ONCE(bo->map_count > 0); in qxl_ttm_bo_destroy()
46 list_del_init(&bo->list); in qxl_ttm_bo_destroy()
48 drm_gem_object_release(&bo->tbo.base); in qxl_ttm_bo_destroy()
49 kfree(bo); in qxl_ttm_bo_destroy()
52 bool qxl_ttm_bo_is_qxl_bo(struct ttm_buffer_object *bo) in qxl_ttm_bo_is_qxl_bo() argument
54 if (bo->destroy == &qxl_ttm_bo_destroy) in qxl_ttm_bo_is_qxl_bo()
115 struct qxl_bo *bo; in qxl_bo_create() local
124 bo = kzalloc(sizeof(struct qxl_bo), GFP_KERNEL); in qxl_bo_create()
125 if (bo == NULL) in qxl_bo_create()
128 r = drm_gem_object_init(&qdev->ddev, &bo->tbo.base, size); in qxl_bo_create()
130 kfree(bo); in qxl_bo_create()
133 bo->tbo.base.funcs = &qxl_object_funcs; in qxl_bo_create()
134 bo->type = domain; in qxl_bo_create()
135 bo->surface_id = 0; in qxl_bo_create()
136 INIT_LIST_HEAD(&bo->list); in qxl_bo_create()
139 bo->surf = *surf; in qxl_bo_create()
141 qxl_ttm_placement_from_domain(bo, domain); in qxl_bo_create()
143 bo->tbo.priority = priority; in qxl_bo_create()
144 r = ttm_bo_init_reserved(&qdev->mman.bdev, &bo->tbo, size, type, in qxl_bo_create()
145 &bo->placement, 0, &ctx, NULL, NULL, in qxl_bo_create()
155 ttm_bo_pin(&bo->tbo); in qxl_bo_create()
156 ttm_bo_unreserve(&bo->tbo); in qxl_bo_create()
157 *bo_ptr = bo; in qxl_bo_create()
161 int qxl_bo_vmap_locked(struct qxl_bo *bo, struct dma_buf_map *map) in qxl_bo_vmap_locked() argument
165 dma_resv_assert_held(bo->tbo.base.resv); in qxl_bo_vmap_locked()
167 if (bo->kptr) { in qxl_bo_vmap_locked()
168 bo->map_count++; in qxl_bo_vmap_locked()
171 r = ttm_bo_vmap(&bo->tbo, &bo->map); in qxl_bo_vmap_locked()
174 bo->map_count = 1; in qxl_bo_vmap_locked()
177 if (bo->map.is_iomem) in qxl_bo_vmap_locked()
178 bo->kptr = (void *)bo->map.vaddr_iomem; in qxl_bo_vmap_locked()
180 bo->kptr = bo->map.vaddr; in qxl_bo_vmap_locked()
183 *map = bo->map; in qxl_bo_vmap_locked()
187 int qxl_bo_vmap(struct qxl_bo *bo, struct dma_buf_map *map) in qxl_bo_vmap() argument
191 r = qxl_bo_reserve(bo); in qxl_bo_vmap()
195 r = __qxl_bo_pin(bo); in qxl_bo_vmap()
197 qxl_bo_unreserve(bo); in qxl_bo_vmap()
201 r = qxl_bo_vmap_locked(bo, map); in qxl_bo_vmap()
202 qxl_bo_unreserve(bo); in qxl_bo_vmap()
207 struct qxl_bo *bo, int page_offset) in qxl_bo_kmap_atomic_page() argument
215 if (bo->tbo.resource->mem_type == TTM_PL_VRAM) in qxl_bo_kmap_atomic_page()
217 else if (bo->tbo.resource->mem_type == TTM_PL_PRIV) in qxl_bo_kmap_atomic_page()
222 offset = bo->tbo.resource->start << PAGE_SHIFT; in qxl_bo_kmap_atomic_page()
225 if (bo->kptr) { in qxl_bo_kmap_atomic_page()
226 rptr = bo->kptr + (page_offset * PAGE_SIZE); in qxl_bo_kmap_atomic_page()
230 ret = qxl_bo_vmap_locked(bo, &bo_map); in qxl_bo_kmap_atomic_page()
239 void qxl_bo_vunmap_locked(struct qxl_bo *bo) in qxl_bo_vunmap_locked() argument
241 dma_resv_assert_held(bo->tbo.base.resv); in qxl_bo_vunmap_locked()
243 if (bo->kptr == NULL) in qxl_bo_vunmap_locked()
245 bo->map_count--; in qxl_bo_vunmap_locked()
246 if (bo->map_count > 0) in qxl_bo_vunmap_locked()
248 bo->kptr = NULL; in qxl_bo_vunmap_locked()
249 ttm_bo_vunmap(&bo->tbo, &bo->map); in qxl_bo_vunmap_locked()
252 int qxl_bo_vunmap(struct qxl_bo *bo) in qxl_bo_vunmap() argument
256 r = qxl_bo_reserve(bo); in qxl_bo_vunmap()
260 qxl_bo_vunmap_locked(bo); in qxl_bo_vunmap()
261 __qxl_bo_unpin(bo); in qxl_bo_vunmap()
262 qxl_bo_unreserve(bo); in qxl_bo_vunmap()
267 struct qxl_bo *bo, void *pmap) in qxl_bo_kunmap_atomic_page() argument
269 if ((bo->tbo.resource->mem_type != TTM_PL_VRAM) && in qxl_bo_kunmap_atomic_page()
270 (bo->tbo.resource->mem_type != TTM_PL_PRIV)) in qxl_bo_kunmap_atomic_page()
276 qxl_bo_vunmap_locked(bo); in qxl_bo_kunmap_atomic_page()
279 void qxl_bo_unref(struct qxl_bo **bo) in qxl_bo_unref() argument
281 if ((*bo) == NULL) in qxl_bo_unref()
284 drm_gem_object_put(&(*bo)->tbo.base); in qxl_bo_unref()
285 *bo = NULL; in qxl_bo_unref()
288 struct qxl_bo *qxl_bo_ref(struct qxl_bo *bo) in qxl_bo_ref() argument
290 drm_gem_object_get(&bo->tbo.base); in qxl_bo_ref()
291 return bo; in qxl_bo_ref()
294 static int __qxl_bo_pin(struct qxl_bo *bo) in __qxl_bo_pin() argument
297 struct drm_device *ddev = bo->tbo.base.dev; in __qxl_bo_pin()
300 if (bo->tbo.pin_count) { in __qxl_bo_pin()
301 ttm_bo_pin(&bo->tbo); in __qxl_bo_pin()
304 qxl_ttm_placement_from_domain(bo, bo->type); in __qxl_bo_pin()
305 r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); in __qxl_bo_pin()
307 ttm_bo_pin(&bo->tbo); in __qxl_bo_pin()
309 dev_err(ddev->dev, "%p pin failed\n", bo); in __qxl_bo_pin()
313 static void __qxl_bo_unpin(struct qxl_bo *bo) in __qxl_bo_unpin() argument
315 ttm_bo_unpin(&bo->tbo); in __qxl_bo_unpin()
323 int qxl_bo_pin(struct qxl_bo *bo) in qxl_bo_pin() argument
327 r = qxl_bo_reserve(bo); in qxl_bo_pin()
331 r = __qxl_bo_pin(bo); in qxl_bo_pin()
332 qxl_bo_unreserve(bo); in qxl_bo_pin()
341 int qxl_bo_unpin(struct qxl_bo *bo) in qxl_bo_unpin() argument
345 r = qxl_bo_reserve(bo); in qxl_bo_unpin()
349 __qxl_bo_unpin(bo); in qxl_bo_unpin()
350 qxl_bo_unreserve(bo); in qxl_bo_unpin()
356 struct qxl_bo *bo, *n; in qxl_bo_force_delete() local
361 list_for_each_entry_safe(bo, n, &qdev->gem.objects, list) { in qxl_bo_force_delete()
363 &bo->tbo.base, bo, (unsigned long)bo->tbo.base.size, in qxl_bo_force_delete()
364 *((unsigned long *)&bo->tbo.base.refcount)); in qxl_bo_force_delete()
366 list_del_init(&bo->list); in qxl_bo_force_delete()
369 drm_gem_object_put(&bo->tbo.base); in qxl_bo_force_delete()
383 int qxl_bo_check_id(struct qxl_device *qdev, struct qxl_bo *bo) in qxl_bo_check_id() argument
387 if (bo->type == QXL_GEM_DOMAIN_SURFACE && bo->surface_id == 0) { in qxl_bo_check_id()
389 ret = qxl_surface_id_alloc(qdev, bo); in qxl_bo_check_id()
393 ret = qxl_hw_surface_alloc(qdev, bo); in qxl_bo_check_id()