Unverified Commit 305b391d authored by Zack Rusin's avatar Zack Rusin Committed by Javier Martinez Canillas
Browse files

drm/qxl: Use the hotspot properties from cursor planes



Atomic modesetting got support for mouse hotspots via the hotspot
properties. Port the legacy kms hotspot handling to the new properties
on cursor planes.

Signed-off-by: default avatarZack Rusin <zackr@vmware.com>
Reviewed-by: default avatarGerd Hoffmann <kraxel@redhat.com>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: virtualization@lists.linux-foundation.org
Cc: spice-devel@lists.freedesktop.org
Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Signed-off-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231023074613.41327-5-aesteve@redhat.com
parent cd549942
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -485,7 +485,6 @@ static int qxl_primary_atomic_check(struct drm_plane *plane,
static int qxl_primary_apply_cursor(struct qxl_device *qdev,
				    struct drm_plane_state *plane_state)
{
	struct drm_framebuffer *fb = plane_state->fb;
	struct qxl_crtc *qcrtc = to_qxl_crtc(plane_state->crtc);
	struct qxl_cursor_cmd *cmd;
	struct qxl_release *release;
@@ -510,8 +509,8 @@ static int qxl_primary_apply_cursor(struct qxl_device *qdev,

	cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release);
	cmd->type = QXL_CURSOR_SET;
	cmd->u.set.position.x = plane_state->crtc_x + fb->hot_x;
	cmd->u.set.position.y = plane_state->crtc_y + fb->hot_y;
	cmd->u.set.position.x = plane_state->crtc_x + plane_state->hotspot_x;
	cmd->u.set.position.y = plane_state->crtc_y + plane_state->hotspot_y;

	cmd->u.set.shape = qxl_bo_physical_address(qdev, qcrtc->cursor_bo, 0);

@@ -531,7 +530,6 @@ static int qxl_primary_apply_cursor(struct qxl_device *qdev,
static int qxl_primary_move_cursor(struct qxl_device *qdev,
				   struct drm_plane_state *plane_state)
{
	struct drm_framebuffer *fb = plane_state->fb;
	struct qxl_crtc *qcrtc = to_qxl_crtc(plane_state->crtc);
	struct qxl_cursor_cmd *cmd;
	struct qxl_release *release;
@@ -554,8 +552,8 @@ static int qxl_primary_move_cursor(struct qxl_device *qdev,

	cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release);
	cmd->type = QXL_CURSOR_MOVE;
	cmd->u.position.x = plane_state->crtc_x + fb->hot_x;
	cmd->u.position.y = plane_state->crtc_y + fb->hot_y;
	cmd->u.position.x = plane_state->crtc_x + plane_state->hotspot_x;
	cmd->u.position.y = plane_state->crtc_y + plane_state->hotspot_y;
	qxl_release_unmap(qdev, release, &cmd->release_info);

	qxl_release_fence_buffer_objects(release);
@@ -851,8 +849,8 @@ static int qxl_plane_prepare_fb(struct drm_plane *plane,
		struct qxl_bo *old_cursor_bo = qcrtc->cursor_bo;

		qcrtc->cursor_bo = qxl_create_cursor(qdev, user_bo,
						     new_state->fb->hot_x,
						     new_state->fb->hot_y);
						     new_state->hotspot_x,
						     new_state->hotspot_y);
		qxl_free_cursor(old_cursor_bo);
	}