aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-07-22 21:50:00 -0400
committerDave Airlie <airlied@redhat.com>2013-08-29 19:25:13 -0400
commit62f2104f3fc11c4cfd1307429cb955bfa48dcb37 (patch)
treef5a4e80d68e100cc6818a6810d07f28135ddd8c5
parent9bba0c42ec81748462e58b18095c0eef8707cc9a (diff)
drm: Advertise async page flip ability through GETCAP ioctl
Let applications know whether the kernel supports asynchronous page flipping. Signed-off-by: Keith Packard <keithp@keithp.com> Signed-off-by: Dave Airlie <airlied@gmail.com>
-rw-r--r--drivers/gpu/drm/drm_crtc.c3
-rw-r--r--drivers/gpu/drm/drm_ioctl.c3
-rw-r--r--include/drm/drm_crtc.h3
-rw-r--r--include/uapi/drm/drm.h1
4 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 4f35be732b83..452591b67996 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -3508,6 +3508,9 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
3508 page_flip->reserved != 0) 3508 page_flip->reserved != 0)
3509 return -EINVAL; 3509 return -EINVAL;
3510 3510
3511 if ((page_flip->flags & DRM_MODE_PAGE_FLIP_ASYNC) && !dev->mode_config.async_page_flip)
3512 return -EINVAL;
3513
3511 obj = drm_mode_object_find(dev, page_flip->crtc_id, DRM_MODE_OBJECT_CRTC); 3514 obj = drm_mode_object_find(dev, page_flip->crtc_id, DRM_MODE_OBJECT_CRTC);
3512 if (!obj) 3515 if (!obj)
3513 return -EINVAL; 3516 return -EINVAL;
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index cffc7c0e1171..07247e2855a2 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -293,6 +293,9 @@ int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_priv)
293 case DRM_CAP_TIMESTAMP_MONOTONIC: 293 case DRM_CAP_TIMESTAMP_MONOTONIC:
294 req->value = drm_timestamp_monotonic; 294 req->value = drm_timestamp_monotonic;
295 break; 295 break;
296 case DRM_CAP_ASYNC_PAGE_FLIP:
297 req->value = dev->mode_config.async_page_flip;
298 break;
296 default: 299 default:
297 return -EINVAL; 300 return -EINVAL;
298 } 301 }
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 0c7fec5b8fef..78ca1512c73f 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -842,6 +842,9 @@ struct drm_mode_config {
842 842
843 /* dumb ioctl parameters */ 843 /* dumb ioctl parameters */
844 uint32_t preferred_depth, prefer_shadow; 844 uint32_t preferred_depth, prefer_shadow;
845
846 /* whether async page flip is supported or not */
847 bool async_page_flip;
845}; 848};
846 849
847#define obj_to_crtc(x) container_of(x, struct drm_crtc, base) 850#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 272580ca320f..ece867889cc7 100644
--- a/include/uapi/drm/drm.h
+++ b/include/uapi/drm/drm.h
@@ -780,6 +780,7 @@ struct drm_event_vblank {
780#define DRM_CAP_DUMB_PREFER_SHADOW 0x4 780#define DRM_CAP_DUMB_PREFER_SHADOW 0x4
781#define DRM_CAP_PRIME 0x5 781#define DRM_CAP_PRIME 0x5
782#define DRM_CAP_TIMESTAMP_MONOTONIC 0x6 782#define DRM_CAP_TIMESTAMP_MONOTONIC 0x6
783#define DRM_CAP_ASYNC_PAGE_FLIP 0x7
783 784
784#define DRM_PRIME_CAP_IMPORT 0x1 785#define DRM_PRIME_CAP_IMPORT 0x1
785#define DRM_PRIME_CAP_EXPORT 0x2 786#define DRM_PRIME_CAP_EXPORT 0x2