drm/radeon: introduce gem_to_radeon_bo helper
... and switch it to container_of upcasting. v2: converted new pageflip code-paths. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
		
							parent
							
								
									441921d530
								
							
						
					
					
						commit
						7e4d15d90a
					
				| @ -1030,7 +1030,7 @@ static int evergreen_crtc_do_set_base(struct drm_crtc *crtc, | ||||
| 	 * just update base pointers | ||||
| 	 */ | ||||
| 	obj = radeon_fb->obj; | ||||
| 	rbo = obj->driver_private; | ||||
| 	rbo = gem_to_radeon_bo(obj); | ||||
| 	r = radeon_bo_reserve(rbo, false); | ||||
| 	if (unlikely(r != 0)) | ||||
| 		return r; | ||||
| @ -1145,7 +1145,7 @@ static int evergreen_crtc_do_set_base(struct drm_crtc *crtc, | ||||
| 
 | ||||
| 	if (!atomic && fb && fb != crtc->fb) { | ||||
| 		radeon_fb = to_radeon_framebuffer(fb); | ||||
| 		rbo = radeon_fb->obj->driver_private; | ||||
| 		rbo = gem_to_radeon_bo(radeon_fb->obj); | ||||
| 		r = radeon_bo_reserve(rbo, false); | ||||
| 		if (unlikely(r != 0)) | ||||
| 			return r; | ||||
| @ -1191,7 +1191,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc, | ||||
| 	} | ||||
| 
 | ||||
| 	obj = radeon_fb->obj; | ||||
| 	rbo = obj->driver_private; | ||||
| 	rbo = gem_to_radeon_bo(obj); | ||||
| 	r = radeon_bo_reserve(rbo, false); | ||||
| 	if (unlikely(r != 0)) | ||||
| 		return r; | ||||
| @ -1308,7 +1308,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc, | ||||
| 
 | ||||
| 	if (!atomic && fb && fb != crtc->fb) { | ||||
| 		radeon_fb = to_radeon_framebuffer(fb); | ||||
| 		rbo = radeon_fb->obj->driver_private; | ||||
| 		rbo = gem_to_radeon_bo(radeon_fb->obj); | ||||
| 		r = radeon_bo_reserve(rbo, false); | ||||
| 		if (unlikely(r != 0)) | ||||
| 			return r; | ||||
|  | ||||
| @ -261,6 +261,7 @@ struct radeon_bo { | ||||
| 	struct drm_gem_object		*gobj; | ||||
| 	struct drm_gem_object		gem_base; | ||||
| }; | ||||
| #define gem_to_radeon_bo(gobj) container_of((gobj), struct radeon_bo, gem_base) | ||||
| 
 | ||||
| struct radeon_bo_list { | ||||
| 	struct ttm_validate_buffer tv; | ||||
|  | ||||
| @ -75,7 +75,7 @@ int radeon_cs_parser_relocs(struct radeon_cs_parser *p) | ||||
| 				return -ENOENT; | ||||
| 			} | ||||
| 			p->relocs_ptr[i] = &p->relocs[i]; | ||||
| 			p->relocs[i].robj = p->relocs[i].gobj->driver_private; | ||||
| 			p->relocs[i].robj = gem_to_radeon_bo(p->relocs[i].gobj); | ||||
| 			p->relocs[i].lobj.bo = p->relocs[i].robj; | ||||
| 			p->relocs[i].lobj.wdomain = r->write_domain; | ||||
| 			p->relocs[i].lobj.rdomain = r->read_domains; | ||||
|  | ||||
| @ -860,7 +860,7 @@ int radeon_suspend_kms(struct drm_device *dev, pm_message_t state) | ||||
| 		if (rfb == NULL || rfb->obj == NULL) { | ||||
| 			continue; | ||||
| 		} | ||||
| 		robj = rfb->obj->driver_private; | ||||
| 		robj = gem_to_radeon_bo(rfb->obj); | ||||
| 		/* don't unpin kernel fb objects */ | ||||
| 		if (!radeon_fbdev_robj_is_fb(rdev, robj)) { | ||||
| 			r = radeon_bo_reserve(robj, false); | ||||
|  | ||||
| @ -371,7 +371,7 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc, | ||||
| 	new_radeon_fb = to_radeon_framebuffer(fb); | ||||
| 	/* schedule unpin of the old buffer */ | ||||
| 	obj = old_radeon_fb->obj; | ||||
| 	rbo = obj->driver_private; | ||||
| 	rbo = gem_to_radeon_bo(obj); | ||||
| 	work->old_rbo = rbo; | ||||
| 	INIT_WORK(&work->work, radeon_unpin_work_func); | ||||
| 
 | ||||
| @ -391,7 +391,7 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc, | ||||
| 
 | ||||
| 	/* pin the new buffer */ | ||||
| 	obj = new_radeon_fb->obj; | ||||
| 	rbo = obj->driver_private; | ||||
| 	rbo = gem_to_radeon_bo(obj); | ||||
| 
 | ||||
| 	DRM_DEBUG_DRIVER("flip-ioctl() cur_fbo = %p, cur_bbo = %p\n", | ||||
| 			 work->old_rbo, rbo); | ||||
|  | ||||
| @ -90,7 +90,7 @@ int radeon_align_pitch(struct radeon_device *rdev, int width, int bpp, bool tile | ||||
| 
 | ||||
| static void radeonfb_destroy_pinned_object(struct drm_gem_object *gobj) | ||||
| { | ||||
| 	struct radeon_bo *rbo = gobj->driver_private; | ||||
| 	struct radeon_bo *rbo = gem_to_radeon_bo(gobj); | ||||
| 	int ret; | ||||
| 
 | ||||
| 	ret = radeon_bo_reserve(rbo, false); | ||||
| @ -128,7 +128,7 @@ static int radeonfb_create_pinned_object(struct radeon_fbdev *rfbdev, | ||||
| 		       aligned_size); | ||||
| 		return -ENOMEM; | ||||
| 	} | ||||
| 	rbo = gobj->driver_private; | ||||
| 	rbo = gem_to_radeon_bo(gobj); | ||||
| 
 | ||||
| 	if (fb_tiled) | ||||
| 		tiling_flags = RADEON_TILING_MACRO; | ||||
| @ -202,7 +202,7 @@ static int radeonfb_create(struct radeon_fbdev *rfbdev, | ||||
| 	mode_cmd.depth = sizes->surface_depth; | ||||
| 
 | ||||
| 	ret = radeonfb_create_pinned_object(rfbdev, &mode_cmd, &gobj); | ||||
| 	rbo = gobj->driver_private; | ||||
| 	rbo = gem_to_radeon_bo(gobj); | ||||
| 
 | ||||
| 	/* okay we have an object now allocate the framebuffer */ | ||||
| 	info = framebuffer_alloc(0, device); | ||||
| @ -403,14 +403,14 @@ int radeon_fbdev_total_size(struct radeon_device *rdev) | ||||
| 	struct radeon_bo *robj; | ||||
| 	int size = 0; | ||||
| 
 | ||||
| 	robj = rdev->mode_info.rfbdev->rfb.obj->driver_private; | ||||
| 	robj = gem_to_radeon_bo(rdev->mode_info.rfbdev->rfb.obj); | ||||
| 	size += radeon_bo_size(robj); | ||||
| 	return size; | ||||
| } | ||||
| 
 | ||||
| bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj) | ||||
| { | ||||
| 	if (robj == rdev->mode_info.rfbdev->rfb.obj->driver_private) | ||||
| 	if (robj == gem_to_radeon_bo(rdev->mode_info.rfbdev->rfb.obj)) | ||||
| 		return true; | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| @ -39,9 +39,8 @@ int radeon_gem_object_init(struct drm_gem_object *obj) | ||||
| 
 | ||||
| void radeon_gem_object_free(struct drm_gem_object *gobj) | ||||
| { | ||||
| 	struct radeon_bo *robj = gobj->driver_private; | ||||
| 	struct radeon_bo *robj = gem_to_radeon_bo(gobj); | ||||
| 
 | ||||
| 	gobj->driver_private = NULL; | ||||
| 	if (robj) { | ||||
| 		radeon_bo_unref(&robj); | ||||
| 	} | ||||
| @ -79,7 +78,7 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size, | ||||
| int radeon_gem_object_pin(struct drm_gem_object *obj, uint32_t pin_domain, | ||||
| 			  uint64_t *gpu_addr) | ||||
| { | ||||
| 	struct radeon_bo *robj = obj->driver_private; | ||||
| 	struct radeon_bo *robj = gem_to_radeon_bo(obj); | ||||
| 	int r; | ||||
| 
 | ||||
| 	r = radeon_bo_reserve(robj, false); | ||||
| @ -92,7 +91,7 @@ int radeon_gem_object_pin(struct drm_gem_object *obj, uint32_t pin_domain, | ||||
| 
 | ||||
| void radeon_gem_object_unpin(struct drm_gem_object *obj) | ||||
| { | ||||
| 	struct radeon_bo *robj = obj->driver_private; | ||||
| 	struct radeon_bo *robj = gem_to_radeon_bo(obj); | ||||
| 	int r; | ||||
| 
 | ||||
| 	r = radeon_bo_reserve(robj, false); | ||||
| @ -110,7 +109,7 @@ int radeon_gem_set_domain(struct drm_gem_object *gobj, | ||||
| 	int r; | ||||
| 
 | ||||
| 	/* FIXME: reeimplement */ | ||||
| 	robj = gobj->driver_private; | ||||
| 	robj = gem_to_radeon_bo(gobj); | ||||
| 	/* work out where to validate the buffer to */ | ||||
| 	domain = wdomain; | ||||
| 	if (!domain) { | ||||
| @ -224,7 +223,7 @@ int radeon_gem_set_domain_ioctl(struct drm_device *dev, void *data, | ||||
| 	if (gobj == NULL) { | ||||
| 		return -ENOENT; | ||||
| 	} | ||||
| 	robj = gobj->driver_private; | ||||
| 	robj = gem_to_radeon_bo(gobj); | ||||
| 
 | ||||
| 	r = radeon_gem_set_domain(gobj, args->read_domains, args->write_domain); | ||||
| 
 | ||||
| @ -243,7 +242,7 @@ int radeon_mode_dumb_mmap(struct drm_file *filp, | ||||
| 	if (gobj == NULL) { | ||||
| 		return -ENOENT; | ||||
| 	} | ||||
| 	robj = gobj->driver_private; | ||||
| 	robj = gem_to_radeon_bo(gobj); | ||||
| 	*offset_p = radeon_bo_mmap_offset(robj); | ||||
| 	drm_gem_object_unreference_unlocked(gobj); | ||||
| 	return 0; | ||||
| @ -270,7 +269,7 @@ int radeon_gem_busy_ioctl(struct drm_device *dev, void *data, | ||||
| 	if (gobj == NULL) { | ||||
| 		return -ENOENT; | ||||
| 	} | ||||
| 	robj = gobj->driver_private; | ||||
| 	robj = gem_to_radeon_bo(gobj); | ||||
| 	r = radeon_bo_wait(robj, &cur_placement, true); | ||||
| 	switch (cur_placement) { | ||||
| 	case TTM_PL_VRAM: | ||||
| @ -300,7 +299,7 @@ int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data, | ||||
| 	if (gobj == NULL) { | ||||
| 		return -ENOENT; | ||||
| 	} | ||||
| 	robj = gobj->driver_private; | ||||
| 	robj = gem_to_radeon_bo(gobj); | ||||
| 	r = radeon_bo_wait(robj, NULL, false); | ||||
| 	/* callback hw specific functions if any */ | ||||
| 	if (robj->rdev->asic->ioctl_wait_idle) | ||||
| @ -321,7 +320,7 @@ int radeon_gem_set_tiling_ioctl(struct drm_device *dev, void *data, | ||||
| 	gobj = drm_gem_object_lookup(dev, filp, args->handle); | ||||
| 	if (gobj == NULL) | ||||
| 		return -ENOENT; | ||||
| 	robj = gobj->driver_private; | ||||
| 	robj = gem_to_radeon_bo(gobj); | ||||
| 	r = radeon_bo_set_tiling_flags(robj, args->tiling_flags, args->pitch); | ||||
| 	drm_gem_object_unreference_unlocked(gobj); | ||||
| 	return r; | ||||
| @ -339,7 +338,7 @@ int radeon_gem_get_tiling_ioctl(struct drm_device *dev, void *data, | ||||
| 	gobj = drm_gem_object_lookup(dev, filp, args->handle); | ||||
| 	if (gobj == NULL) | ||||
| 		return -ENOENT; | ||||
| 	rbo = gobj->driver_private; | ||||
| 	rbo = gem_to_radeon_bo(gobj); | ||||
| 	r = radeon_bo_reserve(rbo, false); | ||||
| 	if (unlikely(r != 0)) | ||||
| 		goto out; | ||||
|  | ||||
| @ -415,7 +415,7 @@ int radeon_crtc_do_set_base(struct drm_crtc *crtc, | ||||
| 
 | ||||
| 	/* Pin framebuffer & get tilling informations */ | ||||
| 	obj = radeon_fb->obj; | ||||
| 	rbo = obj->driver_private; | ||||
| 	rbo = gem_to_radeon_bo(obj); | ||||
| 	r = radeon_bo_reserve(rbo, false); | ||||
| 	if (unlikely(r != 0)) | ||||
| 		return r; | ||||
| @ -520,7 +520,7 @@ int radeon_crtc_do_set_base(struct drm_crtc *crtc, | ||||
| 
 | ||||
| 	if (!atomic && fb && fb != crtc->fb) { | ||||
| 		radeon_fb = to_radeon_framebuffer(fb); | ||||
| 		rbo = radeon_fb->obj->driver_private; | ||||
| 		rbo = gem_to_radeon_bo(radeon_fb->obj); | ||||
| 		r = radeon_bo_reserve(rbo, false); | ||||
| 		if (unlikely(r != 0)) | ||||
| 			return r; | ||||
|  | ||||
| @ -128,7 +128,7 @@ retry: | ||||
| 	} | ||||
| 	bo->rdev = rdev; | ||||
| 	bo->gobj = &bo->gem_base; | ||||
| 	bo->gem_base.driver_private = bo; | ||||
| 	bo->gem_base.driver_private = NULL; | ||||
| 	bo->surface_reg = -1; | ||||
| 	INIT_LIST_HEAD(&bo->list); | ||||
| 	radeon_ttm_placement_from_domain(bo, domain); | ||||
| @ -282,7 +282,6 @@ void radeon_bo_force_delete(struct radeon_device *rdev) | ||||
| 		list_del_init(&bo->list); | ||||
| 		mutex_unlock(&bo->rdev->gem.mutex); | ||||
| 		radeon_bo_unref(&bo); | ||||
| 		gobj->driver_private = NULL; | ||||
| 		drm_gem_object_unreference(gobj); | ||||
| 		mutex_unlock(&rdev->ddev->struct_mutex); | ||||
| 	} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user