Lines Matching refs:obj
29 struct page **_drm_gem_get_pages(struct drm_gem_object *obj, gfp_t gfpmask);
30 void _drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages,
32 int _drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size);
122 static int get_pages(struct drm_gem_object *obj, struct page ***pages);
123 static uint64_t mmap_offset(struct drm_gem_object *obj);
140 struct drm_gem_object *obj; /* the current pinned obj */ member
153 static void evict_entry(struct drm_gem_object *obj, in evict_entry() argument
156 struct omap_gem_object *omap_obj = to_omap_bo(obj); in evict_entry()
159 loff_t off = mmap_offset(obj) + in evict_entry()
167 unmap_mapping_range(obj->dev->anon_inode->i_mapping, in evict_entry()
172 unmap_mapping_range(obj->dev->anon_inode->i_mapping, in evict_entry()
176 entry->obj = NULL; in evict_entry()
180 static void evict(struct drm_gem_object *obj) in evict() argument
182 struct omap_gem_object *omap_obj = to_omap_bo(obj); in evict()
193 if (entry->obj == obj) in evict()
194 evict_entry(obj, fmt, entry); in evict()
206 static inline bool is_shmem(struct drm_gem_object *obj) in is_shmem() argument
208 return obj->filp != NULL; in is_shmem()
215 static inline bool is_cached_coherent(struct drm_gem_object *obj) in is_cached_coherent() argument
217 struct omap_gem_object *omap_obj = to_omap_bo(obj); in is_cached_coherent()
218 return is_shmem(obj) && in is_cached_coherent()
225 static int omap_gem_attach_pages(struct drm_gem_object *obj) in omap_gem_attach_pages() argument
227 struct drm_device *dev = obj->dev; in omap_gem_attach_pages()
228 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_attach_pages()
230 int npages = obj->size >> PAGE_SHIFT; in omap_gem_attach_pages()
236 pages = drm_gem_get_pages(obj); in omap_gem_attach_pages()
238 dev_err(obj->dev->dev, "could not get pages: %ld\n", PTR_ERR(pages)); in omap_gem_attach_pages()
270 drm_gem_put_pages(obj, pages, true, false); in omap_gem_attach_pages()
276 static void omap_gem_detach_pages(struct drm_gem_object *obj) in omap_gem_detach_pages() argument
278 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_detach_pages()
284 int i, npages = obj->size >> PAGE_SHIFT; in omap_gem_detach_pages()
286 dma_unmap_page(obj->dev->dev, omap_obj->addrs[i], in omap_gem_detach_pages()
294 drm_gem_put_pages(obj, omap_obj->pages, true, false); in omap_gem_detach_pages()
299 uint32_t omap_gem_flags(struct drm_gem_object *obj) in omap_gem_flags() argument
301 return to_omap_bo(obj)->flags; in omap_gem_flags()
305 static uint64_t mmap_offset(struct drm_gem_object *obj) in mmap_offset() argument
307 struct drm_device *dev = obj->dev; in mmap_offset()
314 size = omap_gem_mmap_size(obj); in mmap_offset()
315 ret = drm_gem_create_mmap_offset_size(obj, size); in mmap_offset()
321 return drm_vma_node_offset_addr(&obj->vma_node); in mmap_offset()
324 uint64_t omap_gem_mmap_offset(struct drm_gem_object *obj) in omap_gem_mmap_offset() argument
327 mutex_lock(&obj->dev->struct_mutex); in omap_gem_mmap_offset()
328 offset = mmap_offset(obj); in omap_gem_mmap_offset()
329 mutex_unlock(&obj->dev->struct_mutex); in omap_gem_mmap_offset()
334 size_t omap_gem_mmap_size(struct drm_gem_object *obj) in omap_gem_mmap_size() argument
336 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_mmap_size()
337 size_t size = obj->size; in omap_gem_mmap_size()
354 int omap_gem_tiled_size(struct drm_gem_object *obj, uint16_t *w, uint16_t *h) in omap_gem_tiled_size() argument
356 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_tiled_size()
366 static int fault_1d(struct drm_gem_object *obj, in fault_1d() argument
369 struct omap_gem_object *omap_obj = to_omap_bo(obj); in fault_1d()
378 omap_gem_cpu_sync(obj, pgoff); in fault_1d()
392 static int fault_2d(struct drm_gem_object *obj, in fault_2d() argument
395 struct omap_gem_object *omap_obj = to_omap_bo(obj); in fault_2d()
438 if (entry->obj) in fault_2d()
439 evict_entry(entry->obj, fmt, entry); in fault_2d()
441 entry->obj = obj; in fault_2d()
471 dev_err(obj->dev->dev, "failed to pin: %d\n", ret); in fault_2d()
507 struct drm_gem_object *obj = vma->vm_private_data; in omap_gem_fault() local
508 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_fault()
509 struct drm_device *dev = obj->dev; in omap_gem_fault()
519 ret = get_pages(obj, &pages); in omap_gem_fault()
530 ret = fault_2d(obj, vma, vmf); in omap_gem_fault()
532 ret = fault_1d(obj, vma, vmf); in omap_gem_fault()
563 int omap_gem_mmap_obj(struct drm_gem_object *obj, in omap_gem_mmap_obj() argument
566 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_mmap_obj()
581 if (WARN_ON(!obj->filp)) in omap_gem_mmap_obj()
591 vma->vm_file = get_file(obj->filp); in omap_gem_mmap_obj()
638 struct drm_gem_object *obj; in omap_gem_dumb_map_offset() local
642 obj = drm_gem_object_lookup(dev, file, handle); in omap_gem_dumb_map_offset()
643 if (obj == NULL) { in omap_gem_dumb_map_offset()
648 *offset = omap_gem_mmap_offset(obj); in omap_gem_dumb_map_offset()
650 drm_gem_object_unreference_unlocked(obj); in omap_gem_dumb_map_offset()
661 int omap_gem_roll(struct drm_gem_object *obj, uint32_t roll) in omap_gem_roll() argument
663 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_roll()
664 uint32_t npages = obj->size >> PAGE_SHIFT; in omap_gem_roll()
668 dev_err(obj->dev->dev, "invalid roll: %d\n", roll); in omap_gem_roll()
674 mutex_lock(&obj->dev->struct_mutex); in omap_gem_roll()
679 ret = get_pages(obj, &pages); in omap_gem_roll()
684 dev_err(obj->dev->dev, "could not repin: %d\n", ret); in omap_gem_roll()
688 mutex_unlock(&obj->dev->struct_mutex); in omap_gem_roll()
696 void omap_gem_cpu_sync(struct drm_gem_object *obj, int pgoff) in omap_gem_cpu_sync() argument
698 struct drm_device *dev = obj->dev; in omap_gem_cpu_sync()
699 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_cpu_sync()
701 if (is_cached_coherent(obj) && omap_obj->addrs[pgoff]) { in omap_gem_cpu_sync()
709 void omap_gem_dma_sync(struct drm_gem_object *obj, in omap_gem_dma_sync() argument
712 struct drm_device *dev = obj->dev; in omap_gem_dma_sync()
713 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_dma_sync()
715 if (is_cached_coherent(obj)) { in omap_gem_dma_sync()
716 int i, npages = obj->size >> PAGE_SHIFT; in omap_gem_dma_sync()
729 unmap_mapping_range(obj->filp->f_mapping, 0, in omap_gem_dma_sync()
730 omap_gem_mmap_size(obj), 1); in omap_gem_dma_sync()
739 int omap_gem_get_paddr(struct drm_gem_object *obj, in omap_gem_get_paddr() argument
742 struct omap_drm_private *priv = obj->dev->dev_private; in omap_gem_get_paddr()
743 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_get_paddr()
746 mutex_lock(&obj->dev->struct_mutex); in omap_gem_get_paddr()
748 if (remap && is_shmem(obj) && priv->has_dmm) { in omap_gem_get_paddr()
751 uint32_t npages = obj->size >> PAGE_SHIFT; in omap_gem_get_paddr()
757 ret = get_pages(obj, &pages); in omap_gem_get_paddr()
766 block = tiler_reserve_1d(obj->size); in omap_gem_get_paddr()
771 dev_err(obj->dev->dev, in omap_gem_get_paddr()
781 dev_err(obj->dev->dev, in omap_gem_get_paddr()
803 mutex_unlock(&obj->dev->struct_mutex); in omap_gem_get_paddr()
811 void omap_gem_put_paddr(struct drm_gem_object *obj) in omap_gem_put_paddr() argument
813 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_put_paddr()
816 mutex_lock(&obj->dev->struct_mutex); in omap_gem_put_paddr()
822 dev_err(obj->dev->dev, in omap_gem_put_paddr()
827 dev_err(obj->dev->dev, in omap_gem_put_paddr()
835 mutex_unlock(&obj->dev->struct_mutex); in omap_gem_put_paddr()
842 int omap_gem_rotated_paddr(struct drm_gem_object *obj, uint32_t orient, in omap_gem_rotated_paddr() argument
845 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_rotated_paddr()
848 mutex_lock(&obj->dev->struct_mutex); in omap_gem_rotated_paddr()
854 mutex_unlock(&obj->dev->struct_mutex); in omap_gem_rotated_paddr()
859 int omap_gem_tiled_stride(struct drm_gem_object *obj, uint32_t orient) in omap_gem_tiled_stride() argument
861 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_tiled_stride()
871 static int get_pages(struct drm_gem_object *obj, struct page ***pages) in get_pages() argument
873 struct omap_gem_object *omap_obj = to_omap_bo(obj); in get_pages()
876 if (is_shmem(obj) && !omap_obj->pages) { in get_pages()
877 ret = omap_gem_attach_pages(obj); in get_pages()
879 dev_err(obj->dev->dev, "could not attach pages\n"); in get_pages()
900 int omap_gem_get_pages(struct drm_gem_object *obj, struct page ***pages, in omap_gem_get_pages() argument
905 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_get_pages()
911 mutex_lock(&obj->dev->struct_mutex); in omap_gem_get_pages()
912 ret = get_pages(obj, pages); in omap_gem_get_pages()
913 mutex_unlock(&obj->dev->struct_mutex); in omap_gem_get_pages()
918 int omap_gem_put_pages(struct drm_gem_object *obj) in omap_gem_put_pages() argument
931 void *omap_gem_vaddr(struct drm_gem_object *obj) in omap_gem_vaddr() argument
933 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_vaddr()
934 WARN_ON(!mutex_is_locked(&obj->dev->struct_mutex)); in omap_gem_vaddr()
937 int ret = get_pages(obj, &pages); in omap_gem_vaddr()
940 omap_obj->vaddr = vmap(pages, obj->size >> PAGE_SHIFT, in omap_gem_vaddr()
957 struct drm_gem_object *obj = &omap_obj->base; in omap_gem_resume() local
958 uint32_t npages = obj->size >> PAGE_SHIFT; in omap_gem_resume()
975 void omap_gem_describe(struct drm_gem_object *obj, struct seq_file *m) in omap_gem_describe() argument
977 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_describe()
980 off = drm_vma_node_start(&obj->vma_node); in omap_gem_describe()
983 omap_obj->flags, obj->name, obj->refcount.refcount.counter, in omap_gem_describe()
996 seq_printf(m, " %d", obj->size); in omap_gem_describe()
1009 struct drm_gem_object *obj = &omap_obj->base; in omap_gem_describe_objects() local
1011 omap_gem_describe(obj, m); in omap_gem_describe_objects()
1013 size += obj->size; in omap_gem_describe_objects()
1073 static inline int sync_op(struct drm_gem_object *obj, in sync_op() argument
1076 struct omap_gem_object *omap_obj = to_omap_bo(obj); in sync_op()
1123 int omap_gem_op_start(struct drm_gem_object *obj, enum omap_gem_op op) in omap_gem_op_start() argument
1125 return sync_op(obj, op, true); in omap_gem_op_start()
1128 int omap_gem_op_finish(struct drm_gem_object *obj, enum omap_gem_op op) in omap_gem_op_finish() argument
1130 return sync_op(obj, op, false); in omap_gem_op_finish()
1142 int omap_gem_op_sync(struct drm_gem_object *obj, enum omap_gem_op op) in omap_gem_op_sync() argument
1144 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_op_sync()
1194 int omap_gem_op_async(struct drm_gem_object *obj, enum omap_gem_op op, in omap_gem_op_async() argument
1197 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_op_async()
1236 int omap_gem_set_sync_object(struct drm_gem_object *obj, void *syncobj) in omap_gem_set_sync_object() argument
1238 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_set_sync_object()
1271 void omap_gem_free_object(struct drm_gem_object *obj) in omap_gem_free_object() argument
1273 struct drm_device *dev = obj->dev; in omap_gem_free_object()
1275 struct omap_gem_object *omap_obj = to_omap_bo(obj); in omap_gem_free_object()
1277 evict(obj); in omap_gem_free_object()
1285 drm_gem_free_mmap_offset(obj); in omap_gem_free_object()
1295 omap_gem_detach_pages(obj); in omap_gem_free_object()
1297 if (!is_shmem(obj)) { in omap_gem_free_object()
1298 dma_free_writecombine(dev->dev, obj->size, in omap_gem_free_object()
1309 drm_gem_object_release(obj); in omap_gem_free_object()
1311 kfree(obj); in omap_gem_free_object()
1318 struct drm_gem_object *obj; in omap_gem_new_handle() local
1321 obj = omap_gem_new(dev, gsize, flags); in omap_gem_new_handle()
1322 if (!obj) in omap_gem_new_handle()
1325 ret = drm_gem_handle_create(file, obj, handle); in omap_gem_new_handle()
1327 drm_gem_object_release(obj); in omap_gem_new_handle()
1328 kfree(obj); /* TODO isn't there a dtor to call? just copying i915 */ in omap_gem_new_handle()
1333 drm_gem_object_unreference_unlocked(obj); in omap_gem_new_handle()
1344 struct drm_gem_object *obj = NULL; in omap_gem_new() local
1381 obj = &omap_obj->base; in omap_gem_new()
1410 drm_gem_private_object_init(dev, obj, size); in omap_gem_new()
1412 ret = drm_gem_object_init(dev, obj, size); in omap_gem_new()
1416 mapping = file_inode(obj->filp)->i_mapping; in omap_gem_new()
1420 return obj; in omap_gem_new()
1423 if (obj) in omap_gem_new()
1424 omap_gem_free_object(obj); in omap_gem_new()