From f9d363fece0046cabfa00ad6b72b50f45b70db60 Mon Sep 17 00:00:00 2001 From: Scott Anderson Date: Sun, 14 May 2017 13:07:34 +1200 Subject: Added device matching --- backend/drm/backend.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'backend/drm/backend.c') diff --git a/backend/drm/backend.c b/backend/drm/backend.c index e49197ec..d8b7fc0e 100644 --- a/backend/drm/backend.c +++ b/backend/drm/backend.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -38,23 +39,32 @@ static struct wlr_backend_impl backend_impl = { }; static void device_paused(struct wl_listener *listener, void *data) { - struct wlr_backend_state *backend = wl_container_of(listener, backend, device_paused); + struct wlr_backend_state *drm = wl_container_of(listener, drm, device_paused); + struct device_arg *arg = data; // TODO: Actually pause the renderer or something. // We currently just expect it to fail its next pageflip. - (void)backend; + if (arg->dev == drm->dev) { + wlr_log(L_INFO, "DRM fd paused"); + } } static void device_resumed(struct wl_listener *listener, void *data) { struct wlr_backend_state *drm = wl_container_of(listener, drm, device_resumed); - int *new_fd = data; + struct device_arg *arg = data; + + if (arg->dev != drm->dev) { + return; + } - if (dup2(*new_fd, drm->fd) < 0) { + if (dup2(arg->fd, drm->fd) < 0) { wlr_log(L_ERROR, "dup2 failed: %s", strerror(errno)); return; } + wlr_log(L_INFO, "DRM fd resumed"); + for (size_t i = 0; i < drm->outputs->length; ++i) { struct wlr_output_state *output = drm->outputs->items[i]; wlr_drm_output_start_renderer(output); @@ -94,6 +104,12 @@ struct wlr_backend *wlr_drm_backend_create(struct wl_display *display, goto error_udev; } + struct stat st; + if (fstat(state->fd, &st) < 0) { + wlr_log(L_ERROR, "Stat failed: %s", strerror(errno)); + } + state->dev = st.st_rdev; + struct wl_event_loop *event_loop = wl_display_get_event_loop(display); state->drm_event = wl_event_loop_add_fd(event_loop, state->fd, -- cgit v1.2.3