[PATCH 1/2] armada: Use NotifyFd for drm fd
Christian Gmeiner
christian.gmeiner at gmail.com
Sun Dec 4 20:55:09 UTC 2016
NotifyFd is available after API 22, and must be used after API 23.
Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
---
src/common_drm.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/src/common_drm.c b/src/common_drm.c
index 92700ce..18e48a0 100644
--- a/src/common_drm.c
+++ b/src/common_drm.c
@@ -35,6 +35,10 @@
#include <libudev.h>
#endif
+#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(22,0)
+#define HAVE_NOTIFY_FD 1
+#endif
+
enum {
OPTION_HW_CURSOR,
OPTION_HOTPLUG,
@@ -1158,6 +1162,15 @@ Bool common_drm_PreScreenInit(ScreenPtr pScreen)
return TRUE;
}
+#if HAVE_NOTIFY_FD
+static void
+drmmode_notify_fd(int fd, int notify, void *data)
+{
+ struct common_drm_info *drm = data;
+
+ drmHandleEvent(drm->fd, &drm->event_context);
+}
+#else
static void common_drm_wakeup_handler(pointer data, int err, pointer p)
{
struct common_drm_info *drm = data;
@@ -1169,6 +1182,7 @@ static void common_drm_wakeup_handler(pointer data, int err, pointer p)
if (FD_ISSET(drm->fd, read_mask))
drmHandleEvent(drm->fd, &drm->event_context);
}
+#endif
Bool common_drm_PostScreenInit(ScreenPtr pScreen)
{
@@ -1236,9 +1250,13 @@ Bool common_drm_PostScreenInit(ScreenPtr pScreen)
xf86DPMSInit(pScreen, xf86DPMSSet, 0);
/* Setup the synchronisation feedback */
+#if HAVE_NOTIFY_FD
+ SetNotifyFd(drm->fd, drmmode_notify_fd, X_NOTIFY_READ, drm);
+#else
AddGeneralSocket(drm->fd);
RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
common_drm_wakeup_handler, drm);
+#endif
#ifdef HAVE_UDEV
if (!common_drm_udev_init(pScreen)) {
--
2.10.2
More information about the etnaviv
mailing list