diff options
Diffstat (limited to 'drivers/gpu/drm/drm_framebuffer.c')
| -rw-r--r-- | drivers/gpu/drm/drm_framebuffer.c | 49 | 
1 files changed, 28 insertions, 21 deletions
diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c index bfedceff87bb..781af1d42d76 100644 --- a/drivers/gpu/drm/drm_framebuffer.c +++ b/drivers/gpu/drm/drm_framebuffer.c @@ -95,21 +95,20 @@ int drm_framebuffer_check_src_coords(uint32_t src_x, uint32_t src_y,  /**   * drm_mode_addfb - add an FB to the graphics configuration   * @dev: drm device for the ioctl - * @data: data pointer for the ioctl - * @file_priv: drm file for the ioctl call + * @or: pointer to request structure + * @file_priv: drm file   *   * Add a new FB to the specified CRTC, given a user request. This is the   * original addfb ioctl which only supported RGB formats.   * - * Called by the user via ioctl. + * Called by the user via ioctl, or by an in-kernel client.   *   * Returns:   * Zero on success, negative errno on failure.   */ -int drm_mode_addfb(struct drm_device *dev, -		   void *data, struct drm_file *file_priv) +int drm_mode_addfb(struct drm_device *dev, struct drm_mode_fb_cmd *or, +		   struct drm_file *file_priv)  { -	struct drm_mode_fb_cmd *or = data;  	struct drm_mode_fb_cmd2 r = {};  	int ret; @@ -134,6 +133,12 @@ int drm_mode_addfb(struct drm_device *dev,  	return 0;  } +int drm_mode_addfb_ioctl(struct drm_device *dev, +			 void *data, struct drm_file *file_priv) +{ +	return drm_mode_addfb(dev, data, file_priv); +} +  static int fb_plane_width(int width,  			  const struct drm_format_info *format, int plane)  { @@ -367,29 +372,28 @@ static void drm_mode_rmfb_work_fn(struct work_struct *w)  /**   * drm_mode_rmfb - remove an FB from the configuration - * @dev: drm device for the ioctl - * @data: data pointer for the ioctl - * @file_priv: drm file for the ioctl call + * @dev: drm device + * @fb_id: id of framebuffer to remove + * @file_priv: drm file   * - * Remove the FB specified by the user. + * Remove the specified FB.   * - * Called by the user via ioctl. + * Called by the user via ioctl, or by an in-kernel client.   *   * Returns:   * Zero on success, negative errno on failure.   */ -int drm_mode_rmfb(struct drm_device *dev, -		   void *data, struct drm_file *file_priv) +int drm_mode_rmfb(struct drm_device *dev, u32 fb_id, +		  struct drm_file *file_priv)  {  	struct drm_framebuffer *fb = NULL;  	struct drm_framebuffer *fbl = NULL; -	uint32_t *id = data;  	int found = 0;  	if (!drm_core_check_feature(dev, DRIVER_MODESET))  		return -EINVAL; -	fb = drm_framebuffer_lookup(dev, file_priv, *id); +	fb = drm_framebuffer_lookup(dev, file_priv, fb_id);  	if (!fb)  		return -ENOENT; @@ -435,6 +439,14 @@ fail_unref:  	return -ENOENT;  } +int drm_mode_rmfb_ioctl(struct drm_device *dev, +			void *data, struct drm_file *file_priv) +{ +	uint32_t *fb_id = data; + +	return drm_mode_rmfb(dev, *fb_id, file_priv); +} +  /**   * drm_mode_getfb - get FB info   * @dev: drm device for the ioctl @@ -835,9 +847,7 @@ retry:  		if (ret)  			goto unlock; -		plane_mask |= BIT(drm_plane_index(plane)); - -		plane->old_fb = plane->fb; +		plane_mask |= drm_plane_mask(plane);  	}  	/* This list is only filled when disable_crtcs is set. */ @@ -852,9 +862,6 @@ retry:  		ret = drm_atomic_commit(state);  unlock: -	if (plane_mask) -		drm_atomic_clean_old_fb(dev, plane_mask, ret); -  	if (ret == -EDEADLK) {  		drm_atomic_state_clear(state);  		drm_modeset_backoff(&ctx);  |