diff options
author | Keith Packard <keithp@keithp.com> | 2013-07-22 21:50:00 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-08-29 19:25:13 -0400 |
commit | 62f2104f3fc11c4cfd1307429cb955bfa48dcb37 (patch) | |
tree | f5a4e80d68e100cc6818a6810d07f28135ddd8c5 | |
parent | 9bba0c42ec81748462e58b18095c0eef8707cc9a (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.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_ioctl.c | 3 | ||||
-rw-r--r-- | include/drm/drm_crtc.h | 3 | ||||
-rw-r--r-- | include/uapi/drm/drm.h | 1 |
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 |