drm/qxl: add support for cursor hotspot.
authorDave Airlie <airlied@redhat.com>
Thu, 20 Jun 2013 01:48:53 +0000 (11:48 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 27 Jun 2013 23:13:56 +0000 (09:13 +1000)
This uses the cursor hotspot info from userspace and passes
it to the qxl hw layer.

Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/qxl/qxl_display.c

index 5a6bfa2..686a937 100644 (file)
@@ -249,11 +249,11 @@ qxl_hide_cursor(struct qxl_device *qdev)
        qxl_release_unreserve(qdev, release);
 }
 
-static int qxl_crtc_cursor_set(struct drm_crtc *crtc,
-                              struct drm_file *file_priv,
-                              uint32_t handle,
-                              uint32_t width,
-                              uint32_t height)
+static int qxl_crtc_cursor_set2(struct drm_crtc *crtc,
+                               struct drm_file *file_priv,
+                               uint32_t handle,
+                               uint32_t width,
+                               uint32_t height, int32_t hot_x, int32_t hot_y)
 {
        struct drm_device *dev = crtc->dev;
        struct qxl_device *qdev = dev->dev_private;
@@ -309,8 +309,8 @@ static int qxl_crtc_cursor_set(struct drm_crtc *crtc,
        cursor->header.type = SPICE_CURSOR_TYPE_ALPHA;
        cursor->header.width = 64;
        cursor->header.height = 64;
-       cursor->header.hot_spot_x = 0;
-       cursor->header.hot_spot_y = 0;
+       cursor->header.hot_spot_x = hot_x;
+       cursor->header.hot_spot_y = hot_y;
        cursor->data_size = size;
        cursor->chunk.next_chunk = 0;
        cursor->chunk.prev_chunk = 0;
@@ -391,7 +391,7 @@ static int qxl_crtc_cursor_move(struct drm_crtc *crtc,
 
 
 static const struct drm_crtc_funcs qxl_crtc_funcs = {
-       .cursor_set = qxl_crtc_cursor_set,
+       .cursor_set2 = qxl_crtc_cursor_set2,
        .cursor_move = qxl_crtc_cursor_move,
        .set_config = drm_crtc_helper_set_config,
        .destroy = qxl_crtc_destroy,