diff options
Diffstat (limited to 'backend/headless/backend.c')
-rw-r--r-- | backend/headless/backend.c | 93 |
1 files changed, 4 insertions, 89 deletions
diff --git a/backend/headless/backend.c b/backend/headless/backend.c index ad0c4ebf..8d74287d 100644 --- a/backend/headless/backend.c +++ b/backend/headless/backend.c @@ -1,16 +1,9 @@ -#define _POSIX_C_SOURCE 200809L #include <assert.h> -#include <drm_fourcc.h> -#include <fcntl.h> #include <stdlib.h> -#include <unistd.h> #include <wlr/interfaces/wlr_input_device.h> #include <wlr/interfaces/wlr_output.h> -#include <wlr/render/wlr_renderer.h> #include <wlr/util/log.h> -#include <xf86drm.h> #include "backend/headless.h" -#include "render/drm_format_set.h" #include "util/signal.h" struct wlr_headless_backend *headless_backend_from_backend( @@ -64,16 +57,9 @@ static void backend_destroy(struct wlr_backend *wlr_backend) { wlr_backend_finish(wlr_backend); - close(backend->drm_fd); free(backend); } -static int backend_get_drm_fd(struct wlr_backend *wlr_backend) { - struct wlr_headless_backend *backend = - headless_backend_from_backend(wlr_backend); - return backend->drm_fd; -} - static uint32_t get_buffer_caps(struct wlr_backend *wlr_backend) { return WLR_BUFFER_CAP_DATA_PTR | WLR_BUFFER_CAP_DMABUF @@ -83,7 +69,6 @@ static uint32_t get_buffer_caps(struct wlr_backend *wlr_backend) { static const struct wlr_backend_impl backend_impl = { .start = backend_start, .destroy = backend_destroy, - .get_drm_fd = backend_get_drm_fd, .get_buffer_caps = get_buffer_caps, }; @@ -107,52 +92,6 @@ static bool backend_init(struct wlr_headless_backend *backend, return true; } -static int open_drm_render_node(void) { - uint32_t flags = 0; - int devices_len = drmGetDevices2(flags, NULL, 0); - if (devices_len < 0) { - wlr_log(WLR_ERROR, "drmGetDevices2 failed: %s", strerror(-devices_len)); - return -1; - } - drmDevice **devices = calloc(devices_len, sizeof(drmDevice *)); - if (devices == NULL) { - wlr_log_errno(WLR_ERROR, "Allocation failed"); - return -1; - } - devices_len = drmGetDevices2(flags, devices, devices_len); - if (devices_len < 0) { - free(devices); - wlr_log(WLR_ERROR, "drmGetDevices2 failed: %s", strerror(-devices_len)); - return -1; - } - - int fd = -1; - for (int i = 0; i < devices_len; i++) { - drmDevice *dev = devices[i]; - if (dev->available_nodes & (1 << DRM_NODE_RENDER)) { - const char *name = dev->nodes[DRM_NODE_RENDER]; - wlr_log(WLR_DEBUG, "Opening DRM render node '%s'", name); - fd = open(name, O_RDWR | O_CLOEXEC); - if (fd < 0) { - wlr_log_errno(WLR_ERROR, "Failed to open '%s'", name); - goto out; - } - break; - } - } - if (fd < 0) { - wlr_log(WLR_ERROR, "Failed to find any DRM render node"); - } - -out: - for (int i = 0; i < devices_len; i++) { - drmFreeDevice(&devices[i]); - } - free(devices); - - return fd; -} - struct wlr_backend *wlr_headless_backend_create(struct wl_display *display) { wlr_log(WLR_INFO, "Creating headless backend"); @@ -163,21 +102,12 @@ struct wlr_backend *wlr_headless_backend_create(struct wl_display *display) { return NULL; } - backend->drm_fd = open_drm_render_node(); - if (backend->drm_fd < 0) { - wlr_log(WLR_ERROR, "Failed to open DRM render node"); - } - if (!backend_init(backend, display)) { - goto error_init; + free(backend); + return NULL; } return &backend->backend; - -error_init: - close(backend->drm_fd); - free(backend); - return NULL; } struct wlr_backend *wlr_headless_backend_create_with_renderer( @@ -191,27 +121,12 @@ struct wlr_backend *wlr_headless_backend_create_with_renderer( return NULL; } - int drm_fd = wlr_renderer_get_drm_fd(renderer); - if (drm_fd < 0) { - wlr_log(WLR_ERROR, "Failed to get DRM device FD from parent renderer"); - backend->drm_fd = -1; - } else { - backend->drm_fd = fcntl(drm_fd, F_DUPFD_CLOEXEC, 0); - if (backend->drm_fd < 0) { - wlr_log_errno(WLR_ERROR, "fcntl(F_DUPFD_CLOEXEC) failed"); - } - } - if (!backend_init(backend, display)) { - goto error_init; + free(backend); + return NULL; } return &backend->backend; - -error_init: - close(backend->drm_fd); - free(backend); - return NULL; } bool wlr_backend_is_headless(struct wlr_backend *backend) { |