drm/radeon: introduce gem_to_radeon_bo helper
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 18 Feb 2011 16:59:17 +0000 (17:59 +0100)
committerDave Airlie <airlied@redhat.com>
Wed, 23 Feb 2011 00:34:47 +0000 (10:34 +1000)
... 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>
drivers/gpu/drm/radeon/atombios_crtc.c
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon_cs.c
drivers/gpu/drm/radeon/radeon_device.c
drivers/gpu/drm/radeon/radeon_display.c
drivers/gpu/drm/radeon/radeon_fb.c
drivers/gpu/drm/radeon/radeon_gem.c
drivers/gpu/drm/radeon/radeon_legacy_crtc.c
drivers/gpu/drm/radeon/radeon_object.c

index b1537000a104c2dec3ec241eece713b3a7d15694..d56f08d3cbdc8b84e4c7b75a4a2ae6bcbd2995e8 100644 (file)
@@ -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;
index f4d19464901225c2598f3b3a9587bd579de71d32..f29229c51d732cf2594bf69fd587c4789026f64d 100644 (file)
@@ -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;
index 35b5eb8fbe2ae53c0b9109810f903bcef32a9dd6..8c1916941871d4bd10b0c3fda53eecdaad3e96cd 100644 (file)
@@ -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;
index 13945bd10461a6c2b149f192aeec74e76b1a1136..7c0a3f26ab5e6f451c16fb434ca420cc00e4bb20 100644 (file)
@@ -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);
index 2eff98cfd72884ab2c2e871f87858cbf97edbb13..4409975a363ce82825be4598703c2c332cb0888f 100644 (file)
@@ -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);
index cb968f997ce75b844c763a82b7598cfa102ad11c..28431e78ab562560312c494fdd6b6f0715ce00ee 100644 (file)
@@ -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;
 }
index 69d00bf85b13967d4316fc3f087dad5d17324a7f..a419b67d8401b5cbad0c20329567fb166b4b661d 100644 (file)
@@ -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;
index cf0638c3b7c70df070ff10fa11b7a914115689fc..9ae599eb2e6d8f84d70792c6d81373c64c8872b5 100644 (file)
@@ -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;
index 9324c881d64066a487b3ee34938409d5b430a9bc..2be18960409ec2d696dcf7246677a9b4f8522b3f 100644 (file)
@@ -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);
        }