From 9015f3107d6794af010096ff3cba8308b1b14dfa Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Sat, 27 Oct 2012 13:41:23 +0200 Subject: [PATCH] uterm: monitor: add "dev_flags" field to event-structure Instead of using different types we now use flags. This is more appropriate and will allow us more easily to add new flags. Signed-off-by: David Herrmann --- src/kmscon_main.c | 12 +++++------- src/uterm.h | 6 +++++- src/uterm_monitor.c | 17 ++++++++++++----- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/kmscon_main.c b/src/kmscon_main.c index 4864b7e..90c3b23 100644 --- a/src/kmscon_main.c +++ b/src/kmscon_main.c @@ -203,6 +203,7 @@ static void app_seat_video_event(struct uterm_video *video, static int app_seat_add_video(struct app_seat *seat, struct app_video **out, unsigned int type, + unsigned int flags, const char *node) { int ret; @@ -210,14 +211,13 @@ static int app_seat_add_video(struct app_seat *seat, struct app_video *vid; if (seat->conf->fbdev) { - if (type != UTERM_MONITOR_FBDEV && - type != UTERM_MONITOR_FBDEV_DRM) { + if (type != UTERM_MONITOR_FBDEV) { log_info("ignoring video device %s on seat %s as it is not an fbdev device", node, seat->name); return -ERANGE; } - } else { - if (type == UTERM_MONITOR_FBDEV_DRM) { + } else if (type == UTERM_MONITOR_FBDEV) { + if (flags & UTERM_MONITOR_DRM_BACKED) { log_info("ignoring video device %s on seat %s as it is a DRM-fbdev device", node, seat->name); return -ERANGE; @@ -328,8 +328,8 @@ static void app_monitor_event(struct uterm_monitor *mon, switch (ev->dev_type) { case UTERM_MONITOR_DRM: case UTERM_MONITOR_FBDEV: - case UTERM_MONITOR_FBDEV_DRM: ret = app_seat_add_video(seat, &vid, ev->dev_type, + ev->dev_flags, ev->dev_node); if (ret) return; @@ -350,7 +350,6 @@ static void app_monitor_event(struct uterm_monitor *mon, switch (ev->dev_type) { case UTERM_MONITOR_DRM: case UTERM_MONITOR_FBDEV: - case UTERM_MONITOR_FBDEV_DRM: if (ev->dev_data) app_seat_remove_video(seat, ev->dev_data); break; @@ -369,7 +368,6 @@ static void app_monitor_event(struct uterm_monitor *mon, switch (ev->dev_type) { case UTERM_MONITOR_DRM: case UTERM_MONITOR_FBDEV: - case UTERM_MONITOR_FBDEV_DRM: vid = ev->dev_data; if (!vid) return; diff --git a/src/uterm.h b/src/uterm.h index 4e743f7..2f7671d 100644 --- a/src/uterm.h +++ b/src/uterm.h @@ -397,10 +397,13 @@ enum uterm_monitor_event_type { enum uterm_monitor_dev_type { UTERM_MONITOR_DRM, UTERM_MONITOR_FBDEV, - UTERM_MONITOR_FBDEV_DRM, UTERM_MONITOR_INPUT, }; +enum uterm_monitor_dev_flag { + UTERM_MONITOR_DRM_BACKED = 0x01, +}; + struct uterm_monitor_event { unsigned int type; @@ -410,6 +413,7 @@ struct uterm_monitor_event { struct uterm_monitor_dev *dev; unsigned int dev_type; + unsigned int dev_flags; const char *dev_node; void *dev_data; }; diff --git a/src/uterm_monitor.c b/src/uterm_monitor.c index 36ce425..8d4a750 100644 --- a/src/uterm_monitor.c +++ b/src/uterm_monitor.c @@ -55,6 +55,7 @@ struct uterm_monitor_dev { struct shl_dlist list; struct uterm_monitor_seat *seat; unsigned int type; + unsigned int flags; char *node; void *data; }; @@ -212,6 +213,7 @@ static void monitor_sd_deinit(struct uterm_monitor *mon) static void seat_new_dev(struct uterm_monitor_seat *seat, unsigned int type, + unsigned int flags, const char *node) { struct uterm_monitor_dev *dev; @@ -223,6 +225,7 @@ static void seat_new_dev(struct uterm_monitor_seat *seat, memset(dev, 0, sizeof(*dev)); dev->seat = seat; dev->type = type; + dev->flags = flags; dev->node = strdup(node); if (!dev->node) @@ -237,6 +240,7 @@ static void seat_new_dev(struct uterm_monitor_seat *seat, ev.seat_data = dev->seat->data; ev.dev = dev; ev.dev_type = dev->type; + ev.dev_flags = dev->flags; ev.dev_node = dev->node; ev.dev_data = dev->data; dev->seat->mon->cb(dev->seat->mon, &ev, dev->seat->mon->data); @@ -263,6 +267,7 @@ static void seat_free_dev(struct uterm_monitor_dev *dev) ev.seat_data = dev->seat->data; ev.dev = dev; ev.dev_type = dev->type; + ev.dev_flags = dev->flags; ev.dev_node = dev->node; ev.dev_data = dev->data; dev->seat->mon->cb(dev->seat->mon, &ev, dev->seat->mon->data); @@ -451,7 +456,7 @@ static void monitor_udev_add(struct uterm_monitor *mon, const char *sname, *subs, *node, *name, *sysname; struct shl_dlist *iter; struct uterm_monitor_seat *seat; - unsigned int type; + unsigned int type, flags; int id; struct udev_device *p; @@ -490,6 +495,7 @@ static void monitor_udev_add(struct uterm_monitor *mon, } sname = udev_device_get_property_value(dev, "ID_SEAT"); type = UTERM_MONITOR_DRM; + flags = 0; } else if (!strcmp(subs, "graphics")) { #ifdef BUILD_ENABLE_MULTI_SEAT if (udev_device_has_tag(dev, "seat") != 1) { @@ -503,10 +509,10 @@ static void monitor_udev_add(struct uterm_monitor *mon, return; } sname = udev_device_get_property_value(dev, "ID_SEAT"); + type = UTERM_MONITOR_FBDEV; + flags = 0; if (is_drm_fbdev(node)) - type = UTERM_MONITOR_FBDEV_DRM; - else - type = UTERM_MONITOR_FBDEV; + flags |= UTERM_MONITOR_DRM_BACKED; } else if (!strcmp(subs, "input")) { sysname = udev_device_get_sysname(dev); if (!sysname || strncmp(sysname, "event", 5)) { @@ -527,6 +533,7 @@ static void monitor_udev_add(struct uterm_monitor *mon, #endif sname = udev_device_get_property_value(p, "ID_SEAT"); type = UTERM_MONITOR_INPUT; + flags = 0; } else { log_debug("adding device with unknown subsystem %s (%s)", subs, name); @@ -550,7 +557,7 @@ static void monitor_udev_add(struct uterm_monitor *mon, return; } - seat_new_dev(seat, type, node); + seat_new_dev(seat, type, flags, node); } static void monitor_udev_remove(struct uterm_monitor *mon, -- 2.7.4