From ef58f376d306f0864f60f125a337f061b48653a6 Mon Sep 17 00:00:00 2001 From: Topi Pohjolainen Date: Tue, 27 Apr 2010 13:14:18 +0200 Subject: [PATCH] gpu: pvr: support for polling events In DRM style provide means for userspace to monitor availability of events via the poll syscall. Signed-off-by: Topi Pohjolainen Signed-off-by: Imre Deak --- pvr/pvr_events.c | 13 +++++++++++++ pvr/pvr_events.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/pvr/pvr_events.c b/pvr/pvr_events.c index 70c061b..9b3db1f 100644 --- a/pvr/pvr_events.c +++ b/pvr/pvr_events.c @@ -66,6 +66,19 @@ ssize_t pvr_read(struct file *filp, char __user *buf, size_t count, loff_t *off) return total; } +unsigned int pvr_poll(struct file *filp, struct poll_table_struct *wait) +{ + struct PVRSRV_FILE_PRIVATE_DATA *priv = filp->private_data; + unsigned int mask = 0; + + poll_wait(filp, &priv->event_wait, wait); + + if (!list_empty(&priv->event_list)) + mask |= POLLIN | POLLRDNORM; + + return mask; +} + void pvr_release_events(struct PVRSRV_FILE_PRIVATE_DATA *priv) { struct pvr_pending_event *w; diff --git a/pvr/pvr_events.h b/pvr/pvr_events.h index f046cbf..f64b48f 100644 --- a/pvr/pvr_events.h +++ b/pvr/pvr_events.h @@ -6,6 +6,7 @@ #include "private_data.h" #include #include +#include /* * Header for events written back to userspace on the drm fd. The @@ -33,6 +34,7 @@ void pvr_init_events(void); ssize_t pvr_read(struct file *filp, char __user *buf, size_t count, loff_t *off); +unsigned int pvr_poll(struct file *filp, struct poll_table_struct *wait); void pvr_release_events(struct PVRSRV_FILE_PRIVATE_DATA *priv); #endif /* PVR_EVENTS_H */ -- 2.47.2