#define _GNU_SOURCE
#include <errno.h>
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include "compositor.h"
#include "evdev.h"
#include "launcher-util.h"
+#include "log.h"
struct drm_compositor {
struct weston_compositor base;
ret = drmModeAddFB(compositor->drm.fd, width, height, 24, 32,
stride, handle, &fb->fb_id);
if (ret) {
- fprintf(stderr, "failed to create kms fb: %m\n");
+ weston_log("failed to create kms fb: %m\n");
free(fb);
return NULL;
}
if (!eglMakeCurrent(compositor->base.display, output->egl_surface,
output->egl_surface, compositor->base.context)) {
- fprintf(stderr, "failed to make current\n");
+ weston_log("failed to make current\n");
return;
}
eglSwapBuffers(compositor->base.display, output->egl_surface);
bo = gbm_surface_lock_front_buffer(output->surface);
if (!bo) {
- fprintf(stderr, "failed to lock front buffer: %m\n");
+ weston_log("failed to lock front buffer: %m\n");
return;
}
output->next = drm_fb_get_from_bo(bo, output);
if (!output->next) {
- fprintf(stderr, "failed to get drm_fb for bo\n");
+ weston_log("failed to get drm_fb for bo\n");
gbm_surface_release_buffer(output->surface, bo);
return;
}
&output->connector_id, 1,
&mode->mode_info);
if (ret) {
- fprintf(stderr, "set mode failed: %m\n");
+ weston_log("set mode failed: %m\n");
return;
}
}
if (drmModePageFlip(compositor->drm.fd, output->crtc_id,
output->next->fb_id,
DRM_MODE_PAGE_FLIP_EVENT, output) < 0) {
- fprintf(stderr, "queueing pageflip failed: %m\n");
+ weston_log("queueing pageflip failed: %m\n");
return;
}
s->src_x, s->src_y,
s->src_w, s->src_h);
if (ret)
- fprintf(stderr, "setplane failed: %d: %s\n",
+ weston_log("setplane failed: %d: %s\n",
ret, strerror(errno));
/*
vbl.request.signal = (unsigned long)s;
ret = drmWaitVBlank(compositor->drm.fd, &vbl);
if (ret) {
- fprintf(stderr, "vblank event request failed: %d: %s\n",
+ weston_log("vblank event request failed: %d: %s\n",
ret, strerror(errno));
}
}
output->crtc_id, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0);
if (ret)
- fprintf(stderr,
- "failed to disable plane: %d: %s\n",
+ weston_log("failed to disable plane: %d: %s\n",
ret, strerror(errno));
drmModeRmFB(c->drm.fd, s->fb_id);
s->surface = NULL;
format, handles, pitches, offsets,
&fb_id, 0);
if (ret) {
- fprintf(stderr, "addfb2 failed: %d\n", ret);
+ weston_log("addfb2 failed: %d\n", ret);
c->sprites_are_broken = 1;
return -1;
}
handle = gbm_bo_get_handle(bo).s32;
ret = drmModeSetCursor(c->drm.fd, output->crtc_id, handle, 64, 64);
if (ret) {
- fprintf(stderr, "failed to set cursor: %s\n", strerror(-ret));
+ weston_log("failed to set cursor: %s\n", strerror(-ret));
goto out;
}
es->sprite->geometry.x - output->base.x,
es->sprite->geometry.y - output->base.y);
if (ret) {
- fprintf(stderr, "failed to move cursor: %s\n", strerror(-ret));
+ weston_log("failed to move cursor: %s\n", strerror(-ret));
goto out;
}
EGLSurface egl_surface;
if (output_base == NULL) {
- fprintf(stderr, "output is NULL.\n");
+ weston_log("output is NULL.\n");
return -1;
}
if (mode == NULL) {
- fprintf(stderr, "mode is NULL.\n");
+ weston_log("mode is NULL.\n");
return -1;
}
drm_mode = choose_mode (output, mode);
if (!drm_mode) {
- printf("%s, invalid resolution:%dx%d\n", __func__, mode->width, mode->height);
+ weston_log("%s, invalid resolution:%dx%d\n", __func__, mode->width, mode->height);
return -1;
} else if (&drm_mode->base == output->base.current) {
return 0;
&output->connector_id, 1, &drm_mode->mode_info);
if (ret) {
- fprintf(stderr, "failed to set mode (%dx%d) %u Hz\n",
+ weston_log("failed to set mode (%dx%d) %u Hz\n",
drm_mode->base.width,
drm_mode->base.height,
drm_mode->base.refresh / 1000);
GBM_BO_USE_SCANOUT |
GBM_BO_USE_RENDERING);
if (!surface) {
- fprintf(stderr, "failed to create gbm surface\n");
+ weston_log("failed to create gbm surface\n");
return -1;
}
surface, NULL);
if (egl_surface == EGL_NO_SURFACE) {
- fprintf(stderr, "failed to create egl surface\n");
+ weston_log("failed to create egl surface\n");
goto err;
}
output->current->fb_id, 0, 0,
&output->connector_id, 1, &drm_mode->mode_info);
if (ret) {
- fprintf(stderr, "failed to set mode\n");
+ weston_log("failed to set mode\n");
goto err;
}
if (sysnum)
ec->drm.id = atoi(sysnum);
if (!sysnum || ec->drm.id < 0) {
- fprintf(stderr, "cannot get device sysnum\n");
+ weston_log("cannot get device sysnum\n");
return -1;
}
fd = open(filename, O_RDWR | O_CLOEXEC);
if (fd < 0) {
/* Probably permissions error */
- fprintf(stderr, "couldn't open %s, skipping\n",
+ weston_log("couldn't open %s, skipping\n",
udev_device_get_devnode(device));
return -1;
}
ec->gbm = gbm_create_device(ec->drm.fd);
ec->base.display = eglGetDisplay(ec->gbm);
if (ec->base.display == NULL) {
- fprintf(stderr, "failed to create display\n");
+ weston_log("failed to create display\n");
return -1;
}
if (!eglInitialize(ec->base.display, &major, &minor)) {
- fprintf(stderr, "failed to initialize display\n");
+ weston_log("failed to initialize display\n");
return -1;
}
if (!eglBindAPI(EGL_OPENGL_ES_API)) {
- fprintf(stderr, "failed to bind api EGL_OPENGL_ES_API\n");
+ weston_log("failed to bind api EGL_OPENGL_ES_API\n");
return -1;
}
if (!eglChooseConfig(ec->base.display, config_attribs,
&ec->base.config, 1, &n) || n != 1) {
- fprintf(stderr, "failed to choose config: %d\n", n);
+ weston_log("failed to choose config: %d\n", n);
return -1;
}
ec->base.context = eglCreateContext(ec->base.display, ec->base.config,
EGL_NO_CONTEXT, context_attribs);
if (ec->base.context == NULL) {
- fprintf(stderr, "failed to create context\n");
+ weston_log("failed to create context\n");
return -1;
}
GBM_FORMAT_XRGB8888,
GBM_BO_USE_RENDERING);
if (!ec->dummy_surface) {
- fprintf(stderr, "failed to create dummy gbm surface\n");
+ weston_log("failed to create dummy gbm surface\n");
return -1;
}
eglCreateWindowSurface(ec->base.display, ec->base.config,
ec->dummy_surface, NULL);
if (ec->dummy_egl_surface == EGL_NO_SURFACE) {
- fprintf(stderr, "failed to create egl surface\n");
+ weston_log("failed to create egl surface\n");
return -1;
}
if (!eglMakeCurrent(ec->base.display, ec->dummy_egl_surface,
ec->dummy_egl_surface, ec->base.context)) {
- fprintf(stderr, "failed to make context current\n");
+ weston_log("failed to make context current\n");
return -1;
}
encoder = drmModeGetEncoder(ec->drm.fd, connector->encoders[0]);
if (encoder == NULL) {
- fprintf(stderr, "No encoder for connector.\n");
+ weston_log("No encoder for connector.\n");
return -1;
}
break;
}
if (i == resources->count_crtcs) {
- fprintf(stderr, "No usable crtc for encoder.\n");
+ weston_log("No usable crtc for encoder.\n");
drmModeFreeEncoder(encoder);
return -1;
}
GBM_BO_USE_SCANOUT |
GBM_BO_USE_RENDERING);
if (!output->surface) {
- fprintf(stderr, "failed to create gbm surface\n");
+ weston_log("failed to create gbm surface\n");
goto err_free;
}
eglCreateWindowSurface(ec->base.display, ec->base.config,
output->surface, NULL);
if (output->egl_surface == EGL_NO_SURFACE) {
- fprintf(stderr, "failed to create egl surface\n");
+ weston_log("failed to create egl surface\n");
goto err_surface;
}
plane_res = drmModeGetPlaneResources(ec->drm.fd);
if (!plane_res) {
- fprintf(stderr, "failed to get plane resources: %s\n",
+ weston_log("failed to get plane resources: %s\n",
strerror(errno));
return;
}
sprite = malloc(sizeof(*sprite) + ((sizeof(uint32_t)) *
plane->count_formats));
if (!sprite) {
- fprintf(stderr, "%s: out of memory\n",
+ weston_log("%s: out of memory\n",
__func__);
free(plane);
continue;
resources = drmModeGetResources(ec->drm.fd);
if (!resources) {
- fprintf(stderr, "drmModeGetResources failed\n");
+ weston_log("drmModeGetResources failed\n");
return -1;
}
}
if (wl_list_empty(&ec->base.output_list)) {
- fprintf(stderr, "No currently active connector found.\n");
+ weston_log("No currently active connector found.\n");
drmModeFreeResources(resources);
return -1;
}
resources = drmModeGetResources(ec->drm.fd);
if (!resources) {
- fprintf(stderr, "drmModeGetResources failed\n");
+ weston_log("drmModeGetResources failed\n");
return;
}
create_output_for_connector(ec, resources,
connector, x, y,
drm_device);
- printf("connector %d connected\n", connector_id);
+ weston_log("connector %d connected\n", connector_id);
}
drmModeFreeConnector(connector);
if (disconnects & (1 << output->connector_id)) {
disconnects &= ~(1 << output->connector_id);
- printf("connector %d disconnected\n",
+ weston_log("connector %d disconnected\n",
output->connector_id);
x_offset += output->base.current->width;
drm_output_destroy(&output->base);
gbm_device_destroy(d->gbm);
destroy_sprites(d);
if (weston_launcher_drm_set_master(&d->base, d->drm.fd, 0) < 0)
- fprintf(stderr, "failed to drop master: %m\n");
+ weston_log("failed to drop master: %m\n");
tty_destroy(d->tty);
free(d);
&output->connector_id, 1,
&drm_mode->mode_info);
if (ret < 0) {
- fprintf(stderr,
+ weston_log(
"failed to set mode %dx%d for output at %d,%d: %m\n",
drm_mode->base.width, drm_mode->base.height,
output->base.x, output->base.y);
case TTY_ENTER_VT:
compositor->focus = 1;
if (weston_launcher_drm_set_master(&ec->base, ec->drm.fd, 1)) {
- fprintf(stderr, "failed to set master: %m\n");
+ weston_log("failed to set master: %m\n");
wl_display_terminate(compositor->wl_display);
}
compositor->state = ec->prev_state;
0, 0, 0, 0, 0, 0, 0, 0);
if (weston_launcher_drm_set_master(&ec->base, ec->drm.fd, 0) < 0)
- fprintf(stderr, "failed to drop master: %m\n");
+ weston_log("failed to drop master: %m\n");
break;
};
memset(ec, 0, sizeof *ec);
ec->udev = udev_new();
if (ec->udev == NULL) {
- fprintf(stderr, "failed to initialize udev context\n");
+ weston_log("failed to initialize udev context\n");
return NULL;
}
ec->base.wl_display = display;
ec->tty = tty_create(&ec->base, vt_func, tty);
if (!ec->tty) {
- fprintf(stderr, "failed to initialize tty\n");
+ weston_log("failed to initialize tty\n");
free(ec);
return NULL;
}
}
if (drm_device == NULL) {
- fprintf(stderr, "no drm device found\n");
+ weston_log("no drm device found\n");
return NULL;
}
if (init_egl(ec, drm_device) < 0) {
- fprintf(stderr, "failed to initialize egl\n");
+ weston_log("failed to initialize egl\n");
return NULL;
}
create_sprites(ec);
if (create_outputs(ec, connector, drm_device) < 0) {
- fprintf(stderr, "failed to create output for %s\n", path);
+ weston_log("failed to create output for %s\n", path);
return NULL;
}
ec->udev_monitor = udev_monitor_new_from_netlink(ec->udev, "udev");
if (ec->udev_monitor == NULL) {
- fprintf(stderr, "failed to intialize udev monitor\n");
+ weston_log("failed to intialize udev monitor\n");
return NULL;
}
udev_monitor_filter_add_match_subsystem_devtype(ec->udev_monitor,
WL_EVENT_READABLE, udev_drm_event, ec);
if (udev_monitor_enable_receiving(ec->udev_monitor) < 0) {
- fprintf(stderr, "failed to enable udev-monitor receiving\n");
+ weston_log("failed to enable udev-monitor receiving\n");
return NULL;
}