From 5c82dc7874b6eaff39dc8c8575e72e5a40f13ea6 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Tue, 19 Jul 2016 10:03:56 -0400 Subject: Adapt Block/WakeupHandler signature for ABI 23 Signed-off-by: Adam Jackson --- src/compat-api.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/compat-api.h b/src/compat-api.h index 4f7b9ea..15b92fe 100644 --- a/src/compat-api.h +++ b/src/compat-api.h @@ -76,8 +76,13 @@ #define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv +#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(23, 0) +#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout +#define BLOCKHANDLER_ARGS arg, pTimeout +#else #define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout, pointer pReadmask #define BLOCKHANDLER_ARGS arg, pTimeout, pReadmask +#endif #define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen #define CLOSE_SCREEN_ARGS pScreen -- cgit v1.1 From 5f60ca4fe99199183dced955de0206acb5a5ebe9 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 19 Jul 2016 08:33:51 -0700 Subject: Use NotifyFd for drm and udev fds NotifyFd is available after API 22, and must be used after API 23. Signed-off-by: Keith Packard --- src/compat-api.h | 4 ++++ src/drmmode_display.c | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/compat-api.h b/src/compat-api.h index 15b92fe..80dabc1 100644 --- a/src/compat-api.h +++ b/src/compat-api.h @@ -76,6 +76,10 @@ #define SCREEN_INIT_ARGS_DECL ScreenPtr pScreen, int argc, char **argv +#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(22,0) +#define HAVE_NOTIFY_FD 1 +#endif + #if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(23, 0) #define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer pTimeout #define BLOCKHANDLER_ARGS arg, pTimeout diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 0d94bb5..53ae677 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -1462,6 +1462,18 @@ drmmode_flip_handler(int fd, unsigned int frame, unsigned int tv_sec, free(flipdata); } +#if HAVE_NOTIFY_FD + +static void +drmmode_notify_fd(int fd, int notify, void *data) +{ + ScrnInfoPtr scrn = data; + drmmode_ptr drmmode = drmmode_from_scrn(scrn); + drmHandleEvent(drmmode->fd, &drmmode->event_context); +} + +#else + static void drmmode_wakeup_handler(pointer data, int err, pointer p) { @@ -1480,6 +1492,7 @@ drmmode_wakeup_handler(pointer data, int err, pointer p) drmmode_handle_uevents(scrn); #endif } +#endif /* HAVE_NOTIFY_FD */ void drmmode_wait_for_event(ScrnInfoPtr pScrn) @@ -1517,11 +1530,15 @@ drmmode_screen_init(ScreenPtr pScreen) drmmode->event_context.version = DRM_EVENT_CONTEXT_VERSION; drmmode->event_context.page_flip_handler = drmmode_flip_handler; +#if HAVE_NOTIFY_FD + SetNotifyFd(drmmode->fd, drmmode_notify_fd, X_NOTIFY_READ, pScrn); +#else AddGeneralSocket(drmmode->fd); /* Register a wakeup handler to get informed on DRM events */ RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA, drmmode_wakeup_handler, pScrn); +#endif return TRUE; } @@ -1535,10 +1552,14 @@ drmmode_screen_fini(ScreenPtr pScreen) drmmode_uevent_fini(pScrn); +#if HAVE_NOTIFY_FD + RemoveNotifyFd(drmmode->fd); +#else /* Register a wakeup handler to get informed on DRM events */ RemoveBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA, drmmode_wakeup_handler, pScrn); RemoveGeneralSocket(drmmode->fd); +#endif drmmode_remove_fb(pScrn); fd_bo_del(pMsm->scanout); -- cgit v1.1 From 6c8e21c686578f22d973a243a09c838943ddbadd Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Wed, 7 Dec 2016 17:59:09 -0500 Subject: Use NotifyFd more completely previous commit missed some. Signed-off-by: Rob Clark --- src/Makefile.am | 1 - src/compat-api.h | 19 +++++++++++++++++++ src/drmmode_display.c | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/Makefile.am b/src/Makefile.am index d4c1289..f7d5dd1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,6 @@ AM_CFLAGS = \ @XORG_CFLAGS@ \ @XATRACKER_CFLAGS@ \ -Wall \ - -Werror \ -I$(top_srcdir)/system-includes/ \ -I$(top_builddir)/ diff --git a/src/compat-api.h b/src/compat-api.h index 80dabc1..af1b922 100644 --- a/src/compat-api.h +++ b/src/compat-api.h @@ -28,6 +28,11 @@ #ifndef COMPAT_API_H #define COMPAT_API_H +#include +#include +#include + +#include #ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR #define GetGlyphPicture(g, s) GlyphPicture((g))[(s)->myNum] #define SetGlyphPicture(g, s, p) GlyphPicture((g))[(s)->myNum] = p @@ -35,7 +40,13 @@ #ifndef XF86_HAS_SCRN_CONV #define xf86ScreenToScrn(s) xf86Screens[(s)->myNum] +#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,1,0,0,0) #define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex] +#else +#define xf86ScrnToScreen(s) ((s)->pScreen) +#endif +#else +#define xf86ScrnToScreen(s) ((s)->pScreen) #endif #ifndef XF86_SCRN_INTERFACE @@ -51,12 +62,17 @@ #define BLOCKHANDLER_ARGS_DECL int arg, pointer blockData, pointer pTimeout, pointer pReadmask #define BLOCKHANDLER_ARGS arg, blockData, pTimeout, pReadmask +#define WAKEUPHANDLER_ARGS_DECL int arg, pointer wakeupData, unsigned long result, pointer read_mask +#define WAKEUPHANDLER_ARGS arg, wakeupData, result, read_mask + #define CLOSE_SCREEN_ARGS_DECL int scrnIndex, ScreenPtr pScreen #define CLOSE_SCREEN_ARGS scrnIndex, pScreen #define ADJUST_FRAME_ARGS_DECL int arg, int x, int y, int flags +#define ADJUST_FRAME_ARGS(arg, x, y) (arg)->scrnIndex, x, y, 0 #define SWITCH_MODE_ARGS_DECL int arg, DisplayModePtr mode, int flags +#define SWITCH_MODE_ARGS(arg, m) (arg)->scrnIndex, m, 0 #define FREE_SCREEN_ARGS_DECL int arg, int flags #define FREE_SCREEN_ARGS(x) (x)->scrnIndex, 0 @@ -88,6 +104,9 @@ #define BLOCKHANDLER_ARGS arg, pTimeout, pReadmask #endif +#define WAKEUPHANDLER_ARGS_DECL ScreenPtr arg, unsigned long result, pointer read_mask +#define WAKEUPHANDLER_ARGS arg, result, read_mask + #define CLOSE_SCREEN_ARGS_DECL ScreenPtr pScreen #define CLOSE_SCREEN_ARGS pScreen diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 53ae677..c3a55e6 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -1381,6 +1381,15 @@ drmmode_handle_uevents(ScrnInfoPtr scrn) } #endif +#if HAVE_NOTIFY_FD +static void +drmmode_udev_notify(int fd, int notify, void *data) +{ + ScrnInfoPtr scrn = data; + drmmode_handle_uevents(scrn); +} +#endif + static void drmmode_uevent_init(ScrnInfoPtr scrn) { @@ -1407,7 +1416,12 @@ drmmode_uevent_init(ScrnInfoPtr scrn) return; } +#if HAVE_NOTIFY_FD + SetNotifyFd(udev_monitor_get_fd(mon), drmmode_udev_notify, X_NOTIFY_READ, scrn); +#else AddGeneralSocket(udev_monitor_get_fd(mon)); +#endif + drmmode->uevent_monitor = mon; #endif } @@ -1421,7 +1435,11 @@ drmmode_uevent_fini(ScrnInfoPtr scrn) if (drmmode->uevent_monitor) { struct udev *u = udev_monitor_get_udev(drmmode->uevent_monitor); +#if HAVE_NOTIFY_FD + RemoveNotifyFd(udev_monitor_get_fd(drmmode->uevent_monitor)); +#else RemoveGeneralSocket(udev_monitor_get_fd(drmmode->uevent_monitor)); +#endif udev_monitor_unref(drmmode->uevent_monitor); udev_unref(u); } -- cgit v1.1