This event is specific to Exynos G2D DRM driver. Only process it when Exynos support is enabled. Signed-off-by: Tobias Jakobi <tjakobi@xxxxxxxxxxxxxxxxxxxxx> --- exynos/exynos_drm.h | 12 ++++++++++++ xf86drm.h | 7 ++++++- xf86drmMode.c | 18 ++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/exynos/exynos_drm.h b/exynos/exynos_drm.h index 256c02f..c3af0ac 100644 --- a/exynos/exynos_drm.h +++ b/exynos/exynos_drm.h @@ -157,4 +157,16 @@ struct drm_exynos_g2d_exec { #define DRM_IOCTL_EXYNOS_G2D_EXEC DRM_IOWR(DRM_COMMAND_BASE + \ DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec) +/* EXYNOS specific events */ +#define DRM_EXYNOS_G2D_EVENT 0x80000000 + +struct drm_exynos_g2d_event { + struct drm_event base; + __u64 user_data; + __u32 tv_sec; + __u32 tv_usec; + __u32 cmdlist_no; + __u32 reserved; +}; + #endif diff --git a/xf86drm.h b/xf86drm.h index 40c55c9..6b1c9b4 100644 --- a/xf86drm.h +++ b/xf86drm.h @@ -719,7 +719,7 @@ extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2); extern int drmSetMaster(int fd); extern int drmDropMaster(int fd); -#define DRM_EVENT_CONTEXT_VERSION 2 +#define DRM_EVENT_CONTEXT_VERSION 3 typedef struct _drmEventContext { @@ -739,6 +739,11 @@ typedef struct _drmEventContext { unsigned int tv_usec, void *user_data); + void (*g2d_event_handler)(int fd, + unsigned int cmdlist_no, + unsigned int tv_sec, + unsigned int tv_usec, + void *user_data); } drmEventContext, *drmEventContextPtr; extern int drmHandleEvent(int fd, drmEventContextPtr evctx); diff --git a/xf86drmMode.c b/xf86drmMode.c index 61d5e01..d9f2898 100644 --- a/xf86drmMode.c +++ b/xf86drmMode.c @@ -53,6 +53,10 @@ #include <unistd.h> #include <errno.h> +#ifdef HAVE_EXYNOS +#include <exynos/exynos_drm.h> +#endif + #ifdef HAVE_VALGRIND #include <valgrind.h> #include <memcheck.h> @@ -846,6 +850,7 @@ int drmHandleEvent(int fd, drmEventContextPtr evctx) int len, i; struct drm_event *e; struct drm_event_vblank *vblank; + struct drm_exynos_g2d_event *g2d; /* The DRM read semantics guarantees that we always get only * complete events. */ @@ -882,6 +887,19 @@ int drmHandleEvent(int fd, drmEventContextPtr evctx) vblank->tv_usec, U642VOID (vblank->user_data)); break; +#ifdef HAVE_EXYNOS + case DRM_EXYNOS_G2D_EVENT: + if (evctx->version < 3 || + evctx->g2d_event_handler == NULL) + break; + g2d = (struct drm_exynos_g2d_event *) e; + evctx->g2d_event_handler(fd, + g2d->cmdlist_no, + g2d->tv_sec, + g2d->tv_usec, + U642VOID (g2d->user_data)); + break; +#endif default: break; } -- 2.0.5 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel