From: Quentin Glidic <[email protected]>

Signed-off-by: Quentin Glidic <[email protected]>
---
 Makefile.am                   | 10 ++---
 {src => lib}/compositor-drm.c | 87 +++++++++++++++++++------------------------
 {src => lib}/libbacklight.c   |  0
 {src => lib}/libbacklight.h   |  0
 lib/libweston.c               | 23 ++++++++++++
 lib/libweston.h               |  1 +
 src/main.c                    |  3 ++
 7 files changed, 71 insertions(+), 53 deletions(-)
 rename {src => lib}/compositor-drm.c (97%)
 rename {src => lib}/libbacklight.c (100%)
 rename {src => lib}/libbacklight.h (100%)

diff --git a/Makefile.am b/Makefile.am
index 36078ba..68997d8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -287,12 +287,12 @@ drm_backend_la_CFLAGS =                           \
        $(DRM_COMPOSITOR_CFLAGS)                \
        $(AM_CFLAGS)
 drm_backend_la_SOURCES =                       \
-       src/compositor-drm.c                    \
+       lib/compositor-drm.c                    \
        $(INPUT_BACKEND_SOURCES)                \
        shared/helpers.h                        \
        shared/timespec-util.h                  \
-       src/libbacklight.c                      \
-       src/libbacklight.h
+       lib/libbacklight.c                      \
+       lib/libbacklight.h
 
 if ENABLE_VAAPI_RECORDER
 drm_backend_la_SOURCES += src/vaapi-recorder.c src/vaapi-recorder.h
@@ -1325,8 +1325,8 @@ if BUILD_SETBACKLIGHT
 noinst_PROGRAMS += setbacklight
 setbacklight_SOURCES =                         \
        tests/setbacklight.c                    \
-       src/libbacklight.c                      \
-       src/libbacklight.h
+       lib/libbacklight.c                      \
+       lib/libbacklight.h
 setbacklight_CFLAGS = $(AM_CFLAGS) $(SETBACKLIGHT_CFLAGS)
 setbacklight_LDADD = $(SETBACKLIGHT_LIBS)
 endif
diff --git a/src/compositor-drm.c b/lib/compositor-drm.c
similarity index 97%
rename from src/compositor-drm.c
rename to lib/compositor-drm.c
index 04de95e..5d3cd0c 100644
--- a/src/compositor-drm.c
+++ b/lib/compositor-drm.c
@@ -46,7 +46,7 @@
 #include <gbm.h>
 #include <libudev.h>
 
-#include "libweston.h"
+#include "libweston-internal.h"
 #include "shared/helpers.h"
 #include "shared/timespec-util.h"
 #include "libbacklight.h"
@@ -88,6 +88,7 @@ enum output_config {
 
 struct drm_backend {
        struct weston_backend base;
+       struct libweston_context *context;
        struct weston_compositor *compositor;
 
        struct udev *udev;
@@ -2144,15 +2145,15 @@ setup_output_seat_constraint(struct drm_backend *b,
 }
 
 static int
-get_gbm_format_from_section(struct weston_config_section *section,
-                           uint32_t default_value,
-                           uint32_t *format)
+get_gbm_format_from_config(struct libweston_context *context,
+                          const char *section,
+                          uint32_t default_value,
+                          uint32_t *format)
 {
        char *s;
        int ret = 0;
 
-       weston_config_section_get_string(section,
-                                        "gbm-format", &s, NULL);
+       s = context->backend_config.string_getter(section, "gbm-format", NULL, 
context->backend_config.user_data);
 
        if (s == NULL)
                *format = default_value;
@@ -2296,7 +2297,7 @@ create_output_for_connector(struct drm_backend *b,
        struct drm_output *output;
        struct drm_mode *drm_mode, *next, *current;
        struct weston_mode *m;
-       struct weston_config_section *section;
+       char section[39];
        drmModeModeInfo crtc_mode, modeline;
        int i, width, height, scale;
        char *s;
@@ -2320,9 +2321,9 @@ create_output_for_connector(struct drm_backend *b,
        output->base.serial_number = "unknown";
        wl_list_init(&output->base.mode_list);
 
-       section = weston_config_get_section(b->compositor->config, "output", 
"name",
-                                           output->base.name);
-       weston_config_section_get_string(section, "mode", &s, "preferred");
+       snprintf(section, sizeof section, "output %s", output->base.name);
+
+       s = b->context->backend_config.string_getter(section, "mode", 
"preferred", b->context->backend_config.user_data);
        if (strcmp(s, "off") == 0)
                config = OUTPUT_CONFIG_OFF;
        else if (strcmp(s, "preferred") == 0)
@@ -2340,20 +2341,21 @@ create_output_for_connector(struct drm_backend *b,
        }
        free(s);
 
-       weston_config_section_get_int(section, "scale", &scale, 1);
-       weston_config_section_get_string(section, "transform", &s, "normal");
+       scale = b->context->backend_config.int_getter(section, "scale", 1, 
b->context->backend_config.user_data);
+       s = b->context->backend_config.string_getter(section, "transform", 
"normal", b->context->backend_config.user_data);
        if (weston_parse_transform(s, &transform) < 0)
                weston_log("Invalid transform \"%s\" for output %s\n",
                           s, output->base.name);
 
        free(s);
 
-       if (get_gbm_format_from_section(section,
-                                       b->format,
-                                       &output->format) == -1)
+       if (get_gbm_format_from_config(b->context,
+                                      section,
+                                      b->format,
+                                      &output->format) == -1)
                output->format = b->format;
 
-       weston_config_section_get_string(section, "seat", &s, "");
+       s = b->context->backend_config.string_getter(section, "seat", "", 
b->context->backend_config.user_data);
        setup_output_seat_constraint(b, &output->base, s);
        free(s);
 
@@ -3058,16 +3060,16 @@ renderer_switch_binding(struct weston_keyboard 
*keyboard, uint32_t time,
 }
 
 static struct drm_backend *
-drm_backend_create(struct weston_compositor *compositor,
-                     struct drm_parameters *param,
-                     int *argc, char *argv[],
-                     struct weston_config *config)
+drm_backend_create(struct libweston_context *context)
 {
+       struct weston_compositor *compositor = context->compositor;
        struct drm_backend *b;
-       struct weston_config_section *section;
        struct udev_device *drm_device;
        struct wl_event_loop *loop;
        const char *path;
+       int tty;
+       uint32_t connector;
+       const char *seat_id = default_seat;
 
        weston_log("initializing drm backend\n");
 
@@ -3075,6 +3077,8 @@ drm_backend_create(struct weston_compositor *compositor,
        if (b == NULL)
                return NULL;
 
+       b->context = context;
+
        /*
         * KMS support for hardware planes cannot properly synchronize
         * without nuclear page flip. Without nuclear/atomic, hw plane
@@ -3088,17 +3092,19 @@ drm_backend_create(struct weston_compositor *compositor,
        b->sprites_are_broken = 1;
        b->compositor = compositor;
 
-       section = weston_config_get_section(config, "core", NULL, NULL);
-       if (get_gbm_format_from_section(section,
-                                       GBM_FORMAT_XRGB8888,
-                                       &b->format) == -1)
+       if (get_gbm_format_from_config(context,
+                                      "core",
+                                      GBM_FORMAT_XRGB8888,
+                                      &b->format) == -1)
                goto err_base;
 
-       b->use_pixman = param->use_pixman;
+       b->use_pixman = context->backend_config.bool_getter(NULL, "use-pixman", 
false, context->backend_config.user_data);
+       tty = context->backend_config.int_getter(NULL, "tty", 0, 
context->backend_config.user_data);
+       connector = context->backend_config.int_getter(NULL, "connector", 0, 
context->backend_config.user_data);
 
        /* Check if we run drm-backend using weston-launch */
-       compositor->launcher = weston_launcher_connect(compositor, param->tty,
-                                                      param->seat_id, true);
+       compositor->launcher = weston_launcher_connect(compositor, tty,
+                                                      seat_id, true);
        if (compositor->launcher == NULL) {
                weston_log("fatal: drm backend should be run "
                           "using weston-launch binary or as root\n");
@@ -3114,7 +3120,7 @@ drm_backend_create(struct weston_compositor *compositor,
        b->session_listener.notify = session_notify;
        wl_signal_add(&compositor->session_signal, &b->session_listener);
 
-       drm_device = find_primary_gpu(b, param->seat_id);
+       drm_device = find_primary_gpu(b, seat_id);
        if (drm_device == NULL) {
                weston_log("no drm device found\n");
                goto err_udev;
@@ -3149,12 +3155,12 @@ drm_backend_create(struct weston_compositor *compositor,
        create_sprites(b);
 
        if (udev_input_init(&b->input,
-                           compositor, b->udev, param->seat_id) < 0) {
+                           compositor, b->udev, seat_id) < 0) {
                weston_log("failed to create input devices\n");
                goto err_sprite;
        }
 
-       if (create_outputs(b, param->connector, drm_device) < 0) {
+       if (create_outputs(b, connector, drm_device) < 0) {
                weston_log("failed to create output for %s\n", path);
                goto err_udev_input;
        }
@@ -3235,26 +3241,11 @@ err_base:
 }
 
 WL_EXPORT int
-backend_init(struct weston_compositor *compositor, int *argc, char *argv[],
-            struct weston_config *config,
-            struct weston_backend_config *config_base)
+libweston_backend_init(struct libweston_context *context)
 {
        struct drm_backend *b;
-       struct drm_parameters param = { 0, };
-
-       const struct weston_option drm_options[] = {
-               { WESTON_OPTION_INTEGER, "connector", 0, &param.connector },
-               { WESTON_OPTION_STRING, "seat", 0, &param.seat_id },
-               { WESTON_OPTION_INTEGER, "tty", 0, &param.tty },
-               { WESTON_OPTION_BOOLEAN, "current-mode", 0, 
&option_current_mode },
-               { WESTON_OPTION_BOOLEAN, "use-pixman", 0, &param.use_pixman },
-       };
-
-       param.seat_id = default_seat;
-
-       parse_options(drm_options, ARRAY_LENGTH(drm_options), argc, argv);
 
-       b = drm_backend_create(compositor, &param, argc, argv, config);
+       b = drm_backend_create(context);
        if (b == NULL)
                return -1;
        return 0;
diff --git a/src/libbacklight.c b/lib/libbacklight.c
similarity index 100%
rename from src/libbacklight.c
rename to lib/libbacklight.c
diff --git a/src/libbacklight.h b/lib/libbacklight.h
similarity index 100%
rename from src/libbacklight.h
rename to lib/libbacklight.h
diff --git a/lib/libweston.c b/lib/libweston.c
index da21f8e..dd77f6b 100644
--- a/lib/libweston.c
+++ b/lib/libweston.c
@@ -69,8 +69,31 @@ libweston_load_module(const char *name, const char 
*entrypoint)
        return init;
 }
 
+static enum libweston_backend
+load_backend(struct libweston_context *context, const char *backend)
+{
+       int (*backend_init)(struct libweston_context *context);
+
+       backend_init = libweston_load_module(backend, "libweston_backend_init");
+       if (!backend_init)
+               return -1;
+
+       return backend_init(context);
+
+}
+
 WL_EXPORT int
 libweston_load_backend(struct libweston_context *context, enum 
libweston_backend preffered)
 {
+       if (preffered == LIBWESTON_BACKEND_NONE) {
+               preffered = LIBWESTON_BACKEND_DRM;
+       }
+
+       switch (preffered) {
+       case LIBWESTON_BACKEND_DRM:
+               return load_backend(context, "drm-backend.so");
+       case LIBWESTON_BACKEND_NONE:
+       break;
+       }
        return -1;
 }
diff --git a/lib/libweston.h b/lib/libweston.h
index 7a995b8..3950316 100644
--- a/lib/libweston.h
+++ b/lib/libweston.h
@@ -14,6 +14,7 @@ void *libweston_load_module(const char *name, const char 
*entrypoint);
 
 enum libweston_backend {
        LIBWESTON_BACKEND_NONE = 0,
+       LIBWESTON_BACKEND_DRM,
 };
 int libweston_load_backend(struct libweston_context *context, enum 
libweston_backend preffered);
 
diff --git a/src/main.c b/src/main.c
index 3e52168..c03835a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -660,6 +660,9 @@ load_backend(struct weston_compositor *compositor, const 
char *backend,
 {
        enum libweston_backend libweston_backend = LIBWESTON_BACKEND_NONE;
 
+       if (strstr(backend, "drm"))
+               libweston_backend = LIBWESTON_BACKEND_DRM;
+
        if (libweston_load_backend(compositor->libweston, libweston_backend) == 
0)
                return 0;
 
-- 
2.6.4

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to