drm: drop DRM_IOCTL_MODE_REPLACEFB, add+remove works just as well.
authorKristian H�gsberg <krh@redhat.com>
Thu, 18 Dec 2008 03:14:37 +0000 (13:14 +1000)
committerDave Airlie <airlied@linux.ie>
Mon, 29 Dec 2008 07:47:25 +0000 (17:47 +1000)
The replace fb ioctl replaces the backing buffer object for a modesetting
framebuffer object.  This can be acheived by just creating a new
framebuffer backed by the new buffer object, setting that for the crtcs
in question and then removing the old framebuffer object.

Signed-off-by: Kristian Hogsberg <krh@redhat.com>
Acked-by: Jakob Bornecrantz <jakob@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/drm_crtc.c
drivers/gpu/drm/drm_drv.c
drivers/gpu/drm/i915/intel_display.c
include/drm/drm.h
include/drm/drm_crtc.h

index ece947d3b25b019252dfb1e16c95d10e5b489eff..53c87254be4c237e10add351573e563263f18840 100644 (file)
@@ -2302,46 +2302,6 @@ out:
        return ret;
 }
 
-
-int drm_mode_replacefb(struct drm_device *dev,
-                      void *data, struct drm_file *file_priv)
-{
-       struct drm_mode_fb_cmd *r = data;
-       struct drm_mode_object *obj;
-       struct drm_framebuffer *fb;
-       int found = 0;
-       struct drm_framebuffer *fbl = NULL;
-       int ret = 0;
-
-       /* right replace the current bo attached to this fb with a new bo */
-       mutex_lock(&dev->mode_config.mutex);
-       obj = drm_mode_object_find(dev, r->fb_id, DRM_MODE_OBJECT_FB);
-       if (!obj) {
-               ret = -EINVAL;
-               goto out;
-       }
-       fb = obj_to_fb(obj);
-
-       list_for_each_entry(fbl, &file_priv->fbs, filp_head)
-               if (fb == fbl)
-                       found = 1;
-
-       if (!found) {
-               DRM_ERROR("tried to replace an fb we didn't own\n");
-               ret = -EINVAL;
-               goto out;
-       }
-
-       if (dev->mode_config.funcs->resize_fb)
-               ret = dev->mode_config.funcs->resize_fb(dev, file_priv, fb, r);
-       else
-               ret = -EINVAL;
-out:
-       mutex_unlock(&dev->mode_config.mutex);
-       return ret;
-
-}
-
 int drm_mode_connector_attach_encoder(struct drm_connector *connector,
                                      struct drm_encoder *encoder)
 {
index 7eb0e09fc73b974195ba9d2d0ac361496c9eaa56..373e3de643401ce1663422024b5d2fffdb379a60 100644 (file)
@@ -143,7 +143,6 @@ static struct drm_ioctl_desc drm_ioctls[] = {
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_MASTER|DRM_CONTROL_ALLOW),
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb, DRM_MASTER|DRM_CONTROL_ALLOW),
        DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_MASTER|DRM_CONTROL_ALLOW),
-       DRM_IOCTL_DEF(DRM_IOCTL_MODE_REPLACEFB, drm_mode_replacefb, DRM_MASTER|DRM_ROOT_ONLY|DRM_CONTROL_ALLOW),
 };
 
 #define DRM_CORE_IOCTL_COUNT   ARRAY_SIZE( drm_ioctls )
index 96c2da5b74e35a797fbc7ff6617b5466eeab28b4..5689e44d30b357acf9a665e32a3afdf8a628435f 100644 (file)
@@ -1528,38 +1528,7 @@ intel_user_framebuffer_create(struct drm_device *dev,
        return fb;
 }
 
-static int intel_insert_new_fb(struct drm_device *dev,
-                              struct drm_file *file_priv,
-                              struct drm_framebuffer *fb,
-                              struct drm_mode_fb_cmd *mode_cmd)
-{
-       struct intel_framebuffer *intel_fb;
-       struct drm_gem_object *obj;
-       struct drm_crtc *crtc;
-
-       intel_fb = to_intel_framebuffer(fb);
-
-       obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handle);
-
-       if (!obj)
-               return -EINVAL;
-
-       intel_fb->obj = obj;
-       drm_gem_object_unreference(intel_fb->obj);
-       drm_helper_mode_fill_fb_struct(fb, mode_cmd);
-       mutex_unlock(&dev->struct_mutex);
-
-       list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
-               if (crtc->fb == fb) {
-                       struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
-                       crtc_funcs->mode_set_base(crtc, crtc->x, crtc->y);
-               }
-       }
-       return 0;
-}
-
 static const struct drm_mode_config_funcs intel_mode_funcs = {
-       .resize_fb = intel_insert_new_fb,
        .fb_create = intel_user_framebuffer_create,
        .fb_changed = intelfb_probe,
 };
index 76ce6fe300b709f2118eaf7ff760f8050979e9fb..32e5096554e9004f78c0d173f45d7036f419cab3 100644 (file)
@@ -687,7 +687,6 @@ struct drm_gem_open {
 #define DRM_IOCTL_MODE_GETFB           DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
 #define DRM_IOCTL_MODE_ADDFB           DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
 #define DRM_IOCTL_MODE_RMFB            DRM_IOWR(0xAF, unsigned int)
-#define DRM_IOCTL_MODE_REPLACEFB       DRM_IOWR(0xB0, struct drm_mode_fb_cmd)
 
 /**
  * Device specific ioctls should only be in their respective headers
index 395c6139c89319187fbbf14e1995472e108effa8..0acb07f31fa43b6559214611b866f4d8a9d3bd12 100644 (file)
@@ -510,7 +510,6 @@ struct drm_mode_set {
  * the CRTC<->connector mappings as needed and update its view of the screen.
  */
 struct drm_mode_config_funcs {
-       int (*resize_fb)(struct drm_device *dev, struct drm_file *file_priv, struct drm_framebuffer *fb, struct drm_mode_fb_cmd *mode_cmd);
        struct drm_framebuffer *(*fb_create)(struct drm_device *dev, struct drm_file *file_priv, struct drm_mode_fb_cmd *mode_cmd);
        int (*fb_changed)(struct drm_device *dev);
 };