uterm: monitor: add "dev_flags" field to event-structure
authorDavid Herrmann <dh.herrmann@googlemail.com>
Sat, 27 Oct 2012 11:41:23 +0000 (13:41 +0200)
committerDavid Herrmann <dh.herrmann@googlemail.com>
Sat, 27 Oct 2012 11:41:23 +0000 (13:41 +0200)
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 <dh.herrmann@googlemail.com>
src/kmscon_main.c
src/uterm.h
src/uterm_monitor.c

index 4864b7e..90c3b23 100644 (file)
@@ -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;
index 4e743f7..2f7671d 100644 (file)
@@ -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;
 };
index 36ce425..8d4a750 100644 (file)
@@ -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,