Lines Matching full:gem
3 * NVIDIA Tegra DRM GEM helper functions
8 * Based on the GEM/CMA helpers
22 #include "gem.h"
55 drm_gem_object_put(&obj->gem); in tegra_bo_put()
62 struct drm_gem_object *gem = &obj->gem; in tegra_bo_pin() local
96 map->size = gem->size; in tegra_bo_pin()
116 err = sg_alloc_table_from_pages(map->sgt, obj->pages, obj->num_pages, 0, gem->size, in tegra_bo_pin()
126 err = dma_get_sgtable(dev, map->sgt, obj->vaddr, obj->iova, gem->size); in tegra_bo_pin()
148 map->size = gem->size; in tegra_bo_pin()
220 drm_gem_object_get(&obj->gem); in tegra_bo_get()
249 bo->mm, bo->gem.size, PAGE_SIZE, 0, 0); in tegra_bo_iommu_map()
308 bo->gem.funcs = &tegra_gem_object_funcs; in tegra_bo_alloc_object()
313 err = drm_gem_object_init(drm, &bo->gem, size); in tegra_bo_alloc_object()
317 err = drm_gem_create_mmap_offset(&bo->gem); in tegra_bo_alloc_object()
324 drm_gem_object_release(&bo->gem); in tegra_bo_alloc_object()
334 drm_gem_put_pages(&bo->gem, bo->pages, true, true); in tegra_bo_free()
338 dma_free_wc(drm->dev, bo->gem.size, bo->vaddr, bo->iova); in tegra_bo_free()
346 bo->pages = drm_gem_get_pages(&bo->gem); in tegra_bo_get_pages()
350 bo->num_pages = bo->gem.size >> PAGE_SHIFT; in tegra_bo_get_pages()
352 bo->sgt = drm_prime_pages_to_sg(bo->gem.dev, bo->pages, bo->num_pages); in tegra_bo_get_pages()
368 drm_gem_put_pages(&bo->gem, bo->pages, false, false); in tegra_bo_get_pages()
388 size_t size = bo->gem.size; in tegra_bo_alloc()
426 drm_gem_object_release(&bo->gem); in tegra_bo_create()
444 err = drm_gem_handle_create(file, &bo->gem, handle); in tegra_bo_create_with_handle()
446 tegra_bo_free_object(&bo->gem); in tegra_bo_create_with_handle()
450 drm_gem_object_put(&bo->gem); in tegra_bo_create_with_handle()
488 bo->gem.import_attach = attach; in tegra_bo_import()
503 drm_gem_object_release(&bo->gem); in tegra_bo_import()
508 void tegra_bo_free_object(struct drm_gem_object *gem) in tegra_bo_free_object() argument
510 struct tegra_drm *tegra = gem->dev->dev_private; in tegra_bo_free_object()
512 struct tegra_bo *bo = to_tegra_bo(gem); in tegra_bo_free_object()
519 dev_err(gem->dev->dev, "mapping %p stale for device %s\n", mapping, in tegra_bo_free_object()
526 if (drm_gem_is_imported(gem)) { in tegra_bo_free_object()
527 dma_buf_unmap_attachment_unlocked(gem->import_attach, bo->sgt, in tegra_bo_free_object()
529 dma_buf_detach(gem->import_attach->dmabuf, gem->import_attach); in tegra_bo_free_object()
533 tegra_bo_free(gem->dev, bo); in tegra_bo_free_object()
538 drm_gem_object_release(gem); in tegra_bo_free_object()
563 struct drm_gem_object *gem = vma->vm_private_data; in tegra_bo_fault() local
564 struct tegra_bo *bo = to_tegra_bo(gem); in tegra_bo_fault()
583 int __tegra_gem_mmap(struct drm_gem_object *gem, struct vm_area_struct *vma) in __tegra_gem_mmap() argument
585 struct tegra_bo *bo = to_tegra_bo(gem); in __tegra_gem_mmap()
599 err = dma_mmap_wc(gem->dev->dev, vma, bo->vaddr, bo->iova, in __tegra_gem_mmap()
600 gem->size); in __tegra_gem_mmap()
620 struct drm_gem_object *gem; in tegra_drm_mmap() local
627 gem = vma->vm_private_data; in tegra_drm_mmap()
629 return __tegra_gem_mmap(gem, vma); in tegra_drm_mmap()
636 struct drm_gem_object *gem = attach->dmabuf->priv; in tegra_gem_prime_map_dma_buf() local
637 struct tegra_bo *bo = to_tegra_bo(gem); in tegra_gem_prime_map_dma_buf()
646 0, gem->size, GFP_KERNEL) < 0) in tegra_gem_prime_map_dma_buf()
650 gem->size) < 0) in tegra_gem_prime_map_dma_buf()
669 struct drm_gem_object *gem = attach->dmabuf->priv; in tegra_gem_prime_unmap_dma_buf() local
670 struct tegra_bo *bo = to_tegra_bo(gem); in tegra_gem_prime_unmap_dma_buf()
687 struct drm_gem_object *gem = buf->priv; in tegra_gem_prime_begin_cpu_access() local
688 struct tegra_bo *bo = to_tegra_bo(gem); in tegra_gem_prime_begin_cpu_access()
689 struct drm_device *drm = gem->dev; in tegra_gem_prime_begin_cpu_access()
700 struct drm_gem_object *gem = buf->priv; in tegra_gem_prime_end_cpu_access() local
701 struct tegra_bo *bo = to_tegra_bo(gem); in tegra_gem_prime_end_cpu_access()
702 struct drm_device *drm = gem->dev; in tegra_gem_prime_end_cpu_access()
712 struct drm_gem_object *gem = buf->priv; in tegra_gem_prime_mmap() local
715 err = drm_gem_mmap_obj(gem, gem->size, vma); in tegra_gem_prime_mmap()
719 return __tegra_gem_mmap(gem, vma); in tegra_gem_prime_mmap()
724 struct drm_gem_object *gem = buf->priv; in tegra_gem_prime_vmap() local
725 struct tegra_bo *bo = to_tegra_bo(gem); in tegra_gem_prime_vmap()
739 struct drm_gem_object *gem = buf->priv; in tegra_gem_prime_vunmap() local
740 struct tegra_bo *bo = to_tegra_bo(gem); in tegra_gem_prime_vunmap()
756 struct dma_buf *tegra_gem_prime_export(struct drm_gem_object *gem, in tegra_gem_prime_export() argument
762 exp_info.owner = gem->dev->driver->fops->owner; in tegra_gem_prime_export()
764 exp_info.size = gem->size; in tegra_gem_prime_export()
766 exp_info.priv = gem; in tegra_gem_prime_export()
768 return drm_gem_dmabuf_export(gem->dev, &exp_info); in tegra_gem_prime_export()
777 struct drm_gem_object *gem = buf->priv; in tegra_gem_prime_import() local
779 if (gem->dev == drm) { in tegra_gem_prime_import()
780 drm_gem_object_get(gem); in tegra_gem_prime_import()
781 return gem; in tegra_gem_prime_import()
789 return &bo->gem; in tegra_gem_prime_import()
794 struct drm_gem_object *gem; in tegra_gem_lookup() local
797 gem = drm_gem_object_lookup(file, handle); in tegra_gem_lookup()
798 if (!gem) in tegra_gem_lookup()
801 bo = to_tegra_bo(gem); in tegra_gem_lookup()