From 4f9902f00be947d709190a5acfba2feadad3c539 Mon Sep 17 00:00:00 2001 From: Stanislav Vorobiov Date: Tue, 18 Feb 2014 17:05:46 +0400 Subject: [PATCH] VIGS: Support plane z-pos setting from user-space Change-Id: I72a60beac3dc23f23517f310d5bee59c6833b748 --- drivers/gpu/drm/vigs/vigs_driver.c | 5 ++++- drivers/gpu/drm/vigs/vigs_plane.c | 34 ++++++++++++++++++++++++++++++ drivers/gpu/drm/vigs/vigs_plane.h | 13 ++++++++++++ include/drm/vigs_drm.h | 11 +++++++++- 4 files changed, 61 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/vigs/vigs_driver.c b/drivers/gpu/drm/vigs/vigs_driver.c index 0c06d4386eb6..342911e3dae2 100644 --- a/drivers/gpu/drm/vigs/vigs_driver.c +++ b/drivers/gpu/drm/vigs/vigs_driver.c @@ -8,6 +8,7 @@ #include "vigs_irq.h" #include "vigs_fence.h" #include "vigs_file.h" +#include "vigs_plane.h" #include "vigs_mman.h" #include "drmP.h" #include "drm.h" @@ -64,7 +65,9 @@ static struct drm_ioctl_desc vigs_drm_ioctls[] = DRM_IOCTL_DEF_DRV(VIGS_FENCE_SIGNALED, vigs_fence_signaled_ioctl, DRM_UNLOCKED | DRM_AUTH), DRM_IOCTL_DEF_DRV(VIGS_FENCE_UNREF, vigs_fence_unref_ioctl, - DRM_UNLOCKED | DRM_AUTH) + DRM_UNLOCKED | DRM_AUTH), + DRM_IOCTL_DEF_DRV(VIGS_PLANE_SET_ZPOS, vigs_plane_set_zpos_ioctl, + DRM_UNLOCKED | DRM_AUTH) }; static const struct file_operations vigs_drm_driver_fops = diff --git a/drivers/gpu/drm/vigs/vigs_plane.c b/drivers/gpu/drm/vigs/vigs_plane.c index d2c789d1d18c..7d6aad7a3ce1 100644 --- a/drivers/gpu/drm/vigs/vigs_plane.c +++ b/drivers/gpu/drm/vigs/vigs_plane.c @@ -3,6 +3,7 @@ #include "vigs_framebuffer.h" #include "vigs_surface.h" #include "vigs_comm.h" +#include static const uint32_t formats[] = { @@ -165,3 +166,36 @@ int vigs_plane_init(struct vigs_device *vigs_dev, u32 index) return 0; } + +int vigs_plane_set_zpos_ioctl(struct drm_device *drm_dev, + void *data, + struct drm_file *file_priv) +{ + struct drm_vigs_plane_set_zpos *args = data; + struct drm_mode_object *obj; + struct drm_plane *plane; + struct vigs_plane *vigs_plane; + int ret; + + mutex_lock(&drm_dev->mode_config.mutex); + + obj = drm_mode_object_find(drm_dev, + args->plane_id, + DRM_MODE_OBJECT_PLANE); + if (!obj) { + ret = -EINVAL; + goto out; + } + + plane = obj_to_plane(obj); + vigs_plane = plane_to_vigs_plane(plane); + + vigs_plane->z_pos = args->zpos; + + ret = 0; + +out: + mutex_unlock(&drm_dev->mode_config.mutex); + + return ret; +} diff --git a/drivers/gpu/drm/vigs/vigs_plane.h b/drivers/gpu/drm/vigs/vigs_plane.h index 6b25089deb55..bb9e90ed1446 100644 --- a/drivers/gpu/drm/vigs/vigs_plane.h +++ b/drivers/gpu/drm/vigs/vigs_plane.h @@ -33,4 +33,17 @@ static inline struct vigs_plane *plane_to_vigs_plane(struct drm_plane *plane) int vigs_plane_init(struct vigs_device *vigs_dev, u32 index); +/* + * IOCTLs + * @{ + */ + +int vigs_plane_set_zpos_ioctl(struct drm_device *drm_dev, + void *data, + struct drm_file *file_priv); + +/* + * @} + */ + #endif diff --git a/include/drm/vigs_drm.h b/include/drm/vigs_drm.h index 6c4d2d1f762a..9211a17c11e2 100644 --- a/include/drm/vigs_drm.h +++ b/include/drm/vigs_drm.h @@ -8,7 +8,7 @@ /* * Bump this whenever driver interface changes. */ -#define DRM_VIGS_DRIVER_VERSION 11 +#define DRM_VIGS_DRIVER_VERSION 12 /* * Surface access flags. @@ -109,6 +109,12 @@ struct drm_vigs_fence_unref uint32_t handle; }; +struct drm_vigs_plane_set_zpos +{ + uint32_t plane_id; + int zpos; +}; + #define DRM_VIGS_GET_PROTOCOL_VERSION 0x00 #define DRM_VIGS_CREATE_SURFACE 0x01 #define DRM_VIGS_CREATE_EXECBUFFER 0x02 @@ -123,6 +129,7 @@ struct drm_vigs_fence_unref #define DRM_VIGS_FENCE_WAIT 0x0B #define DRM_VIGS_FENCE_SIGNALED 0x0C #define DRM_VIGS_FENCE_UNREF 0x0D +#define DRM_VIGS_PLANE_SET_ZPOS 0x0E #define DRM_IOCTL_VIGS_GET_PROTOCOL_VERSION DRM_IOR(DRM_COMMAND_BASE + \ DRM_VIGS_GET_PROTOCOL_VERSION, struct drm_vigs_get_protocol_version) @@ -152,5 +159,7 @@ struct drm_vigs_fence_unref DRM_VIGS_FENCE_SIGNALED, struct drm_vigs_fence_signaled) #define DRM_IOCTL_VIGS_FENCE_UNREF DRM_IOW(DRM_COMMAND_BASE + \ DRM_VIGS_FENCE_UNREF, struct drm_vigs_fence_unref) +#define DRM_IOCTL_VIGS_PLANE_SET_ZPOS DRM_IOW(DRM_COMMAND_BASE + \ + DRM_VIGS_PLANE_SET_ZPOS, struct drm_vigs_plane_set_zpos) #endif -- 2.34.1