[PATCH 1/2] drm: add DRM_CAPs for cursor size

Rob Clark robdclark at gmail.com
Fri Feb 14 13:02:12 PST 2014


On Wed, Feb 12, 2014 at 1:28 PM, Alex Deucher <alexdeucher at gmail.com> wrote:
> Some hardware may not support standard 64x64 cursors.  Add
> a drm cap to query the cursor size from the kernel.  Some examples
> include radeon CIK parts (128x128 cursors) and armada (32x64 or 64x32).
> This allows things like device specific ddxes to remove asics specific
> logic and also allows xf86-video-modesetting to work properly with hw
> cursors on this hardware. Default to 64 if the driver doesn't specify
> a size.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>

Reviewed-by: Rob Clark <robdclark at gmail.com>

> ---
>  drivers/gpu/drm/drm_ioctl.c | 12 ++++++++++++
>  include/drm/drm_crtc.h      |  3 +++
>  include/uapi/drm/drm.h      |  2 ++
>  3 files changed, 17 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
> index dffc836..f4dc9b7 100644
> --- a/drivers/gpu/drm/drm_ioctl.c
> +++ b/drivers/gpu/drm/drm_ioctl.c
> @@ -296,6 +296,18 @@ int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_priv)
>         case DRM_CAP_ASYNC_PAGE_FLIP:
>                 req->value = dev->mode_config.async_page_flip;
>                 break;
> +       case DRM_CAP_CURSOR_WIDTH:
> +               if (dev->mode_config.cursor_width)
> +                       req->value = dev->mode_config.cursor_width;
> +               else
> +                       req->value = 64;
> +               break;
> +       case DRM_CAP_CURSOR_HEIGHT:
> +               if (dev->mode_config.cursor_height)
> +                       req->value = dev->mode_config.cursor_height;
> +               else
> +                       req->value = 64;
> +               break;
>         default:
>                 return -EINVAL;
>         }
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index 71727b6..8f3dee0 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -907,6 +907,9 @@ struct drm_mode_config {
>
>         /* whether async page flip is supported or not */
>         bool async_page_flip;
> +
> +       /* cursor size */
> +       uint32_t cursor_width, cursor_height;
>  };
>
>  #define obj_to_crtc(x) container_of(x, struct drm_crtc, base)
> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
> index 3c9a833..b06c8ed 100644
> --- a/include/uapi/drm/drm.h
> +++ b/include/uapi/drm/drm.h
> @@ -619,6 +619,8 @@ struct drm_gem_open {
>  #define  DRM_PRIME_CAP_EXPORT          0x2
>  #define DRM_CAP_TIMESTAMP_MONOTONIC    0x6
>  #define DRM_CAP_ASYNC_PAGE_FLIP                0x7
> +#define DRM_CAP_CURSOR_WIDTH           0x8
> +#define DRM_CAP_CURSOR_HEIGHT          0x9
>
>  /** DRM_IOCTL_GET_CAP ioctl argument type */
>  struct drm_get_cap {
> --
> 1.8.3.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list