Also deal with drm fd wakeup Block and wakeup handlers lose their pReadmask arguments
Signed-off-by: Keith Packard <[email protected]> --- src/compat-api.h | 5 +++++ src/drmmode_display.c | 22 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/compat-api.h b/src/compat-api.h index b299f83..1039b0e 100644 --- a/src/compat-api.h +++ b/src/compat-api.h @@ -73,8 +73,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, void *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 diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 2555465..b1de952 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -59,6 +59,10 @@ #define DEFAULT_NOMINAL_FRAME_RATE 60 +#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 22 +#define HAVE_NOTIFY_FD 1 +#endif + static Bool drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height); @@ -2231,13 +2235,21 @@ drmmode_flip_handler(xf86CrtcPtr crtc, uint32_t frame, uint64_t usec, void *even } +#if HAVE_NOTIFY_FD +static void +drm_notify_fd(int fd, int ready, void *data) +#else static void drm_wakeup_handler(pointer data, int err, pointer p) +#endif { drmmode_ptr drmmode = data; +#if !HAVE_NOTIFY_FD fd_set *read_mask = p; - if (err >= 0 && FD_ISSET(drmmode->fd, read_mask)) { + if (err >= 0 && FD_ISSET(drmmode->fd, read_mask)) +#endif + { drmHandleEvent(drmmode->fd, &drmmode->event_context); } } @@ -2321,9 +2333,13 @@ void drmmode_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode) info->drmmode_inited = TRUE; if (pRADEONEnt->fd_wakeup_registered != serverGeneration) { +#if HAVE_NOTIFY_FD + SetNotifyFd(drmmode->fd, drm_notify_fd, X_NOTIFY_READ, drmmode); +#else AddGeneralSocket(drmmode->fd); RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA, drm_wakeup_handler, drmmode); +#endif pRADEONEnt->fd_wakeup_registered = serverGeneration; pRADEONEnt->fd_wakeup_ref = 1; } else @@ -2340,9 +2356,13 @@ void drmmode_fini(ScrnInfoPtr pScrn, drmmode_ptr drmmode) if (pRADEONEnt->fd_wakeup_registered == serverGeneration && !--pRADEONEnt->fd_wakeup_ref) { +#if HAVE_NOTIFY_FD + RemoveNotifyFd(drmmode->fd); +#else RemoveGeneralSocket(drmmode->fd); RemoveBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA, drm_wakeup_handler, drmmode); +#endif } } -- 2.8.1 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
