From 2949ab59982d98097a6dbae48c7c5acb8ce5992c Mon Sep 17 00:00:00 2001 From: Peeter Must Date: Thu, 23 Jan 2020 10:43:48 +0200 Subject: [PATCH] drm: Pass CRTC ID in userspace vblank events * Add DRM_CAP_CRTC_IN_VBLANK_EVENT so userspace can query the crtc field. * This follows Linux's commit 5db06a8a98f515f67446a69c57577c4c363ec65d. --- sys/dev/drm/drm_ioctl.c | 3 +++ sys/dev/drm/drm_irq.c | 2 ++ sys/dev/drm/include/uapi/drm/drm.h | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/sys/dev/drm/drm_ioctl.c b/sys/dev/drm/drm_ioctl.c index 2d9951561a..63756af24c 100644 --- a/sys/dev/drm/drm_ioctl.c +++ b/sys/dev/drm/drm_ioctl.c @@ -265,6 +265,9 @@ static int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_ case DRM_CAP_ADDFB2_MODIFIERS: req->value = dev->mode_config.allow_fb_modifiers; break; + case DRM_CAP_CRTC_IN_VBLANK_EVENT: + req->value = 1; + break; default: return -EINVAL; } diff --git a/sys/dev/drm/drm_irq.c b/sys/dev/drm/drm_irq.c index 59e86a986d..fdf21ea8be 100644 --- a/sys/dev/drm/drm_irq.c +++ b/sys/dev/drm/drm_irq.c @@ -1040,6 +1040,7 @@ void drm_crtc_arm_vblank_event(struct drm_crtc *crtc, e->pipe = pipe; e->event.sequence = drm_vblank_count(dev, pipe); + e->event.crtc_id = crtc->base.id; list_add_tail(&e->base.link, &dev->vblank_event_list); } EXPORT_SYMBOL(drm_crtc_arm_vblank_event); @@ -1070,6 +1071,7 @@ void drm_crtc_send_vblank_event(struct drm_crtc *crtc, now = get_drm_timestamp(); } e->pipe = pipe; + e->event.crtc_id = crtc->base.id; send_vblank_event(dev, e, seq, &now); } EXPORT_SYMBOL(drm_crtc_send_vblank_event); diff --git a/sys/dev/drm/include/uapi/drm/drm.h b/sys/dev/drm/include/uapi/drm/drm.h index d71c747349..3d065caca7 100644 --- a/sys/dev/drm/include/uapi/drm/drm.h +++ b/sys/dev/drm/include/uapi/drm/drm.h @@ -641,6 +641,7 @@ struct drm_gem_open { #define DRM_CAP_CURSOR_HEIGHT 0x9 #define DRM_CAP_ADDFB2_MODIFIERS 0x10 #define DRM_CAP_PAGE_FLIP_TARGET 0x11 +#define DRM_CAP_CRTC_IN_VBLANK_EVENT 0x12 /** DRM_IOCTL_GET_CAP ioctl argument type */ struct drm_get_cap { @@ -863,7 +864,7 @@ struct drm_event_vblank { __u32 tv_sec; __u32 tv_usec; __u32 sequence; - __u32 reserved; + __u32 crtc_id; /* 0 on older kernels that do not support this */ }; /* typedef area */ -- 2.41.0