Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c7c2664 authored by Kristian H�gsberg's avatar Kristian H�gsberg Committed by Dave Airlie
Browse files

drm: drop DRM_IOCTL_MODE_REPLACEFB, add+remove works just as well.



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: default avatarKristian Hogsberg <krh@redhat.com>
Acked-by: default avatarJakob Bornecrantz <jakob@vmware.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent e0c8463a
Loading
Loading
Loading
Loading
+0 −40
Original line number Diff line number Diff line
@@ -2302,46 +2302,6 @@ int drm_mode_connector_property_set_ioctl(struct drm_device *dev,
	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)
{
+0 −1
Original line number Diff line number Diff line
@@ -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 )
+0 −31
Original line number Diff line number Diff line
@@ -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,
};
+0 −1
Original line number Diff line number Diff line
@@ -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
+0 −1
Original line number Diff line number Diff line
@@ -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);
};