Lines Matching refs:obj

96 drm_gem_object_free_internal(struct drm_gem_object *obj, int gen)
98 if (obj->pfnarray != NULL)
99 kmem_free(obj->pfnarray, btopr(obj->real_size) * sizeof (pfn_t));
101 gfxp_free_mempool(&obj->mempool_cookie, obj->kaddr, obj->real_size);
103 (void) ddi_dma_unbind_handle(obj->dma_hdl);
104 ddi_dma_mem_free(&obj->acc_hdl);
105 ddi_dma_free_handle(&obj->dma_hdl);
107 obj->kaddr = NULL;
133 drm_gem_object_alloc_internal_normal(struct drm_device *dev, struct drm_gem_object *obj,
154 cb, NULL, &obj->dma_hdl)) {
158 if (ddi_dma_mem_alloc(obj->dma_hdl, ptob(pgcnt), acc_attr,
160 &obj->kaddr, &obj->real_size, &obj->acc_hdl)) {
164 if (ddi_dma_addr_bind_handle(obj->dma_hdl, NULL,
165 obj->kaddr, obj->real_size, DDI_DMA_RDWR,
172 real_pgcnt = btopr(obj->real_size);
174 obj->pfnarray = kmem_zalloc(real_pgcnt * sizeof (pfn_t), KM_NOSLEEP);
175 if (obj->pfnarray == NULL) {
185 obj->pfnarray[n++] = btop(paddr);
191 ddi_dma_nextcookie(obj->dma_hdl, &cookie);
195 (void) ddi_dma_unbind_handle(obj->dma_hdl);
197 ddi_dma_mem_free(&obj->acc_hdl);
199 ddi_dma_free_handle(&obj->dma_hdl);
207 drm_gem_object_alloc_internal_mempool(struct drm_gem_object *obj,
213 obj->pfnarray = kmem_zalloc(pgcnt * sizeof (pfn_t), KM_NOSLEEP);
214 if (obj->pfnarray == NULL) {
219 ret = gfxp_alloc_from_mempool(&obj->mempool_cookie, &obj->kaddr,
220 obj->pfnarray, pgcnt, flag);
223 kmem_free(obj->pfnarray, pgcnt * sizeof (pfn_t));
227 obj->real_size = size;
232 drm_gem_object_internal(struct drm_device *dev, struct drm_gem_object *obj,
245 ret = drm_gem_object_alloc_internal_mempool(obj, size, mode);
249 ret = drm_gem_object_alloc_internal_normal(dev, obj, size, 0);
253 tmp_pfn = hat_getpfnum(kas.a_hat, obj->kaddr);
254 if (tmp_pfn != obj->pfnarray[0]) {
255 DRM_ERROR("obj %p map incorrect 0x%lx != 0x%lx",
256 (void *)obj, tmp_pfn, obj->pfnarray[0]);
257 drm_gem_object_free_internal(obj, gen);
273 drm_gem_object_init(struct drm_device *dev, struct drm_gem_object *obj,
284 obj->dev = dev;
285 obj->size = size;
287 ret = drm_gem_object_internal(dev, obj, size, gen);
297 map->handle = obj;
300 map->size = obj->real_size;
305 gfxp_umem_cookie_init(obj->kaddr, obj->real_size);
311 obj->maplist.map = map;
312 if (drm_map_handle(dev, &obj->maplist)) {
317 kref_init(&obj->refcount);
318 atomic_set(&obj->handle_count, 0);
321 INIT_LIST_HEAD(&obj->track_list);
323 list_add_tail(&obj->track_list, &dev->gem_objects_list, (caddr_t)obj);
326 INIT_LIST_HEAD(&obj->his_list);
327 drm_gem_object_track(obj, "obj init", 0, 0, NULL);
330 INIT_LIST_HEAD(&obj->seg_list);
339 drm_gem_object_free_internal(obj, gen);
349 struct drm_gem_object *obj, size_t size)
353 obj->dev = dev;
355 kref_init(&obj->refcount);
356 atomic_set(&obj->handle_count, 0);
357 obj->size = size;
368 struct drm_gem_object *obj;
370 obj = kzalloc(sizeof(*obj), GFP_KERNEL);
371 if (!obj)
374 if (drm_gem_object_init(dev, obj, size, 0) != 0) {
375 kmem_free(obj, sizeof (struct drm_gem_object));
380 dev->driver->gem_init_object(obj) != 0) {
383 return obj;
386 drm_gem_object_release(obj);
387 kfree(obj, sizeof(*obj));
399 struct drm_gem_object *obj;
413 obj = idr_list_find(&filp->object_idr, handle);
414 if (obj == NULL) {
418 dev = obj->dev;
425 dev->driver->gem_close_object(obj, filp);
426 drm_gem_object_handle_unreference_unlocked(obj);
438 struct drm_gem_object *obj,
441 struct drm_device *dev = obj->dev;
454 ret = idr_list_get_new_above(&file_priv->object_idr, (void *)obj, (int *)handlep);
462 drm_gem_object_handle_reference(obj);
465 ret = dev->driver->gem_open_object(obj, file_priv);
481 struct drm_gem_object *obj;
486 obj = idr_list_find(&filp->object_idr, handle);
487 if (obj == NULL) {
492 drm_gem_object_reference(obj);
496 return obj;
528 struct drm_gem_object *obj;
534 obj = drm_gem_object_lookup(dev, file, args->handle);
535 if (obj == NULL)
545 if (!obj->name) {
546 ret = idr_list_get_new_above(&dev->object_name_idr, (void *) obj,
547 &obj->name);
548 args->name = (uint64_t) obj->name;
558 drm_gem_object_reference(obj);
560 args->name = (uint64_t) obj->name;
566 drm_gem_object_unreference_unlocked(obj);
581 struct drm_gem_object *obj;
589 obj = idr_list_find(&dev->object_name_idr, (int) args->name);
590 if (obj)
591 drm_gem_object_reference(obj);
593 if (!obj)
596 ret = drm_gem_handle_create(file, obj, &handle);
597 drm_gem_object_unreference_unlocked(obj);
602 args->size = obj->size;
628 struct drm_gem_object *obj = ptr;
629 struct drm_device *dev = obj->dev;
632 dev->driver->gem_close_object(obj, file_priv);
634 drm_gem_object_handle_unreference_unlocked(obj);
649 struct drm_gem_object *obj;
652 obj = (struct drm_gem_object *)entry->obj;
653 (void) drm_gem_object_release_handle(obj->name, obj, (void *)file_private);
659 drm_gem_object_release(struct drm_gem_object *obj)
661 struct drm_device *dev = obj->dev;
662 struct drm_local_map *map = obj->maplist.map;
666 list_del(&obj->track_list);
670 list_for_each_entry_safe(r_list, list_temp, struct drm_history_list, &obj->his_list, head) {
674 list_del(&obj->his_list);
677 (void) idr_remove(&dev->map_idr, obj->maplist.user_token >> PAGE_SHIFT);
681 kmem_free(obj->pfnarray, btopr(obj->real_size) * sizeof (pfn_t));
683 if (obj->dma_hdl == NULL) {
684 gfxp_free_mempool(&obj->mempool_cookie, obj->kaddr, obj->real_size);
686 (void) ddi_dma_unbind_handle(obj->dma_hdl);
687 ddi_dma_mem_free(&obj->acc_hdl);
688 ddi_dma_free_handle(&obj->dma_hdl);
690 obj->kaddr = NULL;
702 struct drm_gem_object *obj = (struct drm_gem_object *) kref;
703 struct drm_device *dev = obj->dev;
708 dev->driver->gem_free_object(obj);
725 drm_gem_object_handle_free(struct drm_gem_object *obj)
727 struct drm_device *dev = obj->dev;
731 if (obj->name) {
732 (void) idr_list_remove(&dev->object_name_idr, obj->name);
733 obj->name = 0;
741 kref_put(&obj->refcount, drm_gem_object_ref_bug);
748 drm_gem_create_mmap_offset(struct drm_gem_object *obj)
750 obj->gtt_map_kaddr = gfxp_alloc_kernel_space(obj->real_size);
751 if (obj->gtt_map_kaddr == NULL) {
758 drm_gem_mmap(struct drm_gem_object *obj, pfn_t pfn)
760 gfxp_load_kernel_space(pfn, obj->real_size, GFXP_MEMORY_WRITECOMBINED, obj->gtt_map_kaddr);
764 drm_gem_release_mmap(struct drm_gem_object *obj)
766 gfxp_unload_kernel_space(obj->gtt_map_kaddr, obj->real_size);
770 drm_gem_free_mmap_offset(struct drm_gem_object *obj)
772 struct ddi_umem_cookie *umem_cookie = obj->maplist.map->umem_cookie;
773 umem_cookie->cvaddr = obj->kaddr;
775 if (obj->maplist.map->gtt_mmap == 0) {
776 gfxp_free_kernel_space(obj->gtt_map_kaddr, obj->real_size);
780 if (obj->maplist.map->gtt_mmap == 1) {
781 gfxp_unmap_kernel_space(obj->gtt_map_kaddr, obj->real_size);
782 obj->maplist.map->gtt_mmap = 0;
785 obj->gtt_map_kaddr = NULL;
789 drm_gem_object_track(struct drm_gem_object *obj, const char *name,
799 list_add_tail(&list->head, &obj->his_list, (caddr_t)list);