Dummy driver implemented
authorStanislav Vorobiov <s.vorobiov@samsung.com>
Fri, 31 May 2013 14:24:31 +0000 (18:24 +0400)
committerStanislav Vorobiov <s.vorobiov@samsung.com>
Fri, 31 May 2013 14:24:31 +0000 (18:24 +0400)
Change-Id: I0d8695f55fb160c1ddcb094d64e7ea3fd96360eb

configure.ac
src/Makefile.am
src/tbm_bufmgr_emulator.c
src/tbm_emulator_log.c [new file with mode: 0644]
src/tbm_emulator_log.h [new file with mode: 0644]

index 603227f..b4683c2 100644 (file)
@@ -37,10 +37,11 @@ AC_FUNC_ALLOCA
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 
 PKG_CHECK_MODULES(LIBDRM, libdrm)
+PKG_CHECK_MODULES(LIBDRM_VIGS, libdrm_vigs)
 PKG_CHECK_MODULES(LIBTBM, libtbm)
 
-LIBTBM_EMULATOR_CFLAGS="$LIBDRM_CFLAGS $LIBTBM_CFLAGS "
-LIBTBM_EMULATOR_LIBS="$LIBDRM_LIBS $LIBTBM_LIBS "
+LIBTBM_EMULATOR_CFLAGS="$LIBDRM_CFLAGS $LIBDRM_VIGS_CFLAGS $LIBTBM_CFLAGS "
+LIBTBM_EMULATOR_LIBS="$LIBDRM_LIBS $LIBDRM_VIGS_LIBS $LIBTBM_LIBS "
 AC_SUBST(LIBTBM_EMULATOR_CFLAGS)
 AC_SUBST(LIBTBM_EMULATOR_LIBS)
 
index 9e7f1e6..fd662af 100644 (file)
@@ -8,4 +8,5 @@ libtbm_emulator_ladir = /${bufmgr_dir}
 libtbm_emulator_la_LIBADD = @LIBTBM_EMULATOR_LIBS@
 
 libtbm_emulator_la_SOURCES = \
-       tbm_bufmgr_emulator.c
+       tbm_bufmgr_emulator.c \
+       tbm_emulator_log.c
index e69de29..5ec6444 100644 (file)
@@ -0,0 +1,151 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tbm_bufmgr.h>
+#include <tbm_bufmgr_backend.h>
+#include "vigs.h"
+#include "tbm_emulator_log.h"
+#include <string.h>
+
+static void tbm_bufmgr_emulator_deinit(void *priv)
+{
+    TBM_EMULATOR_LOG_DEBUG("enter");
+}
+
+static int tbm_bufmgr_emulator_bo_size(tbm_bo bo)
+{
+    TBM_EMULATOR_LOG_DEBUG("enter");
+    return 0;
+}
+
+static void *tbm_bufmgr_emulator_bo_alloc(tbm_bo bo, int size, int flags)
+{
+    TBM_EMULATOR_LOG_DEBUG("enter");
+    return NULL;
+}
+
+static void tbm_bufmgr_emulator_bo_free(tbm_bo bo)
+{
+    TBM_EMULATOR_LOG_DEBUG("enter");
+}
+
+static void *tbm_bufmgr_emulator_bo_import(tbm_bo bo, unsigned int key)
+{
+    TBM_EMULATOR_LOG_DEBUG("enter");
+    return NULL;
+}
+
+static unsigned int tbm_bufmgr_emulator_bo_export(tbm_bo bo)
+{
+    TBM_EMULATOR_LOG_DEBUG("enter");
+    return 0;
+}
+
+static tbm_bo_handle tbm_bufmgr_emulator_bo_get_handle(tbm_bo bo, int device)
+{
+    tbm_bo_handle handle;
+    handle.ptr = NULL;
+    TBM_EMULATOR_LOG_DEBUG("enter");
+    return handle;
+}
+
+static tbm_bo_handle tbm_bufmgr_emulator_bo_map(tbm_bo bo, int device, int opt)
+{
+    tbm_bo_handle handle;
+    handle.ptr = NULL;
+    TBM_EMULATOR_LOG_DEBUG("enter");
+    return handle;
+}
+
+static int tbm_bufmgr_emulator_bo_unmap(tbm_bo bo)
+{
+    TBM_EMULATOR_LOG_DEBUG("enter");
+    return 0;
+}
+
+static int tbm_bufmgr_emulator_bo_cache_flush(tbm_bo bo, int flags)
+{
+    TBM_EMULATOR_LOG_DEBUG("enter");
+    return 0;
+}
+
+static int tbm_bufmgr_emulator_bo_get_global_key(tbm_bo bo)
+{
+    TBM_EMULATOR_LOG_DEBUG("enter");
+    return 0;
+}
+
+MODULEINITPPROTO(tbm_bufmgr_emulator_init);
+
+static TBMModuleVersionInfo EmulatorVersRec =
+{
+    "emulator",
+    "Samsung",
+    TBM_ABI_VERSION,
+};
+
+TBMModuleData tbmModuleData = { &EmulatorVersRec, tbm_bufmgr_emulator_init };
+
+int tbm_bufmgr_emulator_init(tbm_bufmgr bufmgr, int fd)
+{
+    int ret = 0;
+    struct vigs_drm_device *drm_dev = NULL;
+    tbm_bufmgr_backend backend = NULL;
+
+    TBM_EMULATOR_LOG_DEBUG("enter");
+
+    if (!bufmgr) {
+        return 0;
+    }
+
+    ret = vigs_drm_device_create(fd, &drm_dev);
+
+    if (ret != 0) {
+        TBM_EMULATOR_LOG_ERROR("vigs_drm_device_create failed: %s", strerror(-ret));
+        goto fail;
+    }
+
+    backend = tbm_backend_alloc();
+
+    if (!backend) {
+        TBM_EMULATOR_LOG_ERROR("tbm_backend_alloc failed");
+        goto fail;
+    }
+
+    backend->flags = 0;
+    backend->priv = (void*)drm_dev;
+    backend->bufmgr_deinit = tbm_bufmgr_emulator_deinit;
+    backend->bo_size = tbm_bufmgr_emulator_bo_size;
+    backend->bo_alloc = tbm_bufmgr_emulator_bo_alloc;
+    backend->bo_free = tbm_bufmgr_emulator_bo_free;
+    backend->bo_import = tbm_bufmgr_emulator_bo_import;
+    backend->bo_export = tbm_bufmgr_emulator_bo_export;
+    backend->bo_get_handle = tbm_bufmgr_emulator_bo_get_handle;
+    backend->bo_map = tbm_bufmgr_emulator_bo_map;
+    backend->bo_unmap = tbm_bufmgr_emulator_bo_unmap;
+    backend->bo_cache_flush = tbm_bufmgr_emulator_bo_cache_flush;
+    backend->bo_get_global_key = tbm_bufmgr_emulator_bo_get_global_key;
+    backend->bo_lock = NULL;
+    backend->bo_unlock = NULL;
+
+    if (!tbm_backend_init(bufmgr, backend)) {
+        TBM_EMULATOR_LOG_ERROR("tbm_backend_init failed");
+        goto fail;
+    }
+
+    TBM_EMULATOR_LOG_INFO("initialized");
+
+    return 1;
+
+fail:
+    if (backend) {
+        tbm_backend_free(backend);
+    }
+
+    if (drm_dev) {
+        vigs_drm_device_destroy(drm_dev);
+    }
+
+    return 0;
+}
diff --git a/src/tbm_emulator_log.c b/src/tbm_emulator_log.c
new file mode 100644 (file)
index 0000000..54442b5
--- /dev/null
@@ -0,0 +1,79 @@
+#include "tbm_emulator_log.h"
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <sys/time.h>
+
+static const char *g_log_level_to_str[] =
+{
+    "OFF",
+    "ERROR",
+    "INFO",
+    "DEBUG"
+};
+
+static pthread_once_t g_log_init = PTHREAD_ONCE_INIT;
+static int g_debug_enabled = 0;
+
+static void tbm_emulator_log_init_once(void)
+{
+    char *debug_enabled_str = getenv("TBM_EMULATOR_DEBUG");
+    g_debug_enabled = debug_enabled_str ? atoi(debug_enabled_str) : 0;
+}
+
+static void tbm_emulator_log_init(void)
+{
+    pthread_once(&g_log_init, tbm_emulator_log_init_once);
+}
+
+static void tbm_emulator_log_print_current_time(void)
+{
+    char buff[128];
+    struct tm tm;
+    struct timeval tv = { 0, 0 };
+    time_t ti;
+
+    gettimeofday(&tv, NULL);
+
+    ti = tv.tv_sec;
+
+    localtime_r(&ti, &tm);
+    strftime(buff, sizeof(buff),
+             "%H:%M:%S", &tm);
+    fprintf(stderr, "%s", buff);
+}
+
+void tbm_emulator_log_event(tbm_emulator_log_level log_level,
+                            const char *func,
+                            int line,
+                            const char *format, ...)
+{
+    va_list args;
+
+    tbm_emulator_log_init();
+
+    tbm_emulator_log_print_current_time();
+    fprintf(stderr,
+            " %-5s [%u] %s:%d",
+            g_log_level_to_str[log_level],
+            getpid(),
+            func,
+            line);
+    if (format) {
+        va_start(args, format);
+        fprintf(stderr, " - ");
+        vfprintf(stderr, format, args);
+        va_end(args);
+    }
+    fprintf(stderr, "\n");
+}
+
+int tbm_emulator_log_is_debug_enabled()
+{
+    tbm_emulator_log_init();
+
+    return g_debug_enabled;
+}
diff --git a/src/tbm_emulator_log.h b/src/tbm_emulator_log.h
new file mode 100644 (file)
index 0000000..4403f1e
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef _TBM_EMULATOR_LOG_H
+#define _TBM_EMULATOR_LOG_H
+
+typedef enum
+{
+    tbm_emulator_log_level_off = 0,
+    tbm_emulator_log_level_error = 1,
+    tbm_emulator_log_level_info = 2,
+    tbm_emulator_log_level_debug = 3,
+} tbm_emulator_log_level;
+
+void tbm_emulator_log_event(tbm_emulator_log_level log_level,
+                            const char *func,
+                            int line,
+                            const char *format, ...);
+
+int tbm_emulator_log_is_debug_enabled();
+
+#define TBM_EMULATOR_LOG_DEBUG(format, ...) \
+    do { \
+        if (tbm_emulator_log_is_debug_enabled()) { \
+            tbm_emulator_log_event(tbm_emulator_log_level_debug, __FUNCTION__, __LINE__, format,##__VA_ARGS__); \
+        } \
+    } while(0)
+
+#define TBM_EMULATOR_LOG_INFO(format, ...) tbm_emulator_log_event(tbm_emulator_log_level_info, __FUNCTION__, __LINE__, format,##__VA_ARGS__)
+#define TBM_EMULATOR_LOG_ERROR(format, ...) tbm_emulator_log_event(tbm_emulator_log_level_error, __FUNCTION__, __LINE__, format,##__VA_ARGS__)
+
+#endif