--- /dev/null
+Copyright 2013 Samsung Electronics co., Ltd. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sub license, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--- /dev/null
+SUBDIRS = src
--- /dev/null
+#! /bin/sh
+
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
+autoreconf --force --install --verbose "$srcdir"
+test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
--- /dev/null
+AC_PREREQ([2.60])
+AC_INIT([libtdm-fbdev],
+ [1.0.0],
+ [https://www.tizen.org],
+ [libtdm-fbdev])
+
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_SRCDIR([Makefile.am])
+AM_INIT_AUTOMAKE([1.10 foreign dist-bzip2])
+AM_MAINTAINER_MODE([enable])
+
+# Check for programs
+AC_PROG_CC
+
+AC_USE_SYSTEM_EXTENSIONS
+AC_SYS_LARGEFILE
+AC_FUNC_ALLOCA
+
+# Initialize libtool
+LT_PREREQ([2.2])
+LT_INIT([disable-static])
+
+# Enable quiet compiles on automake 1.11.
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+PKG_CHECK_MODULES(TDM_DRM, libtdm libtbm)
+PKG_CHECK_MODULES(UDEV, libudev, [udev=yes], [udev=no])
+if test x"$udev" = xyes; then
+ AC_DEFINE(HAVE_UDEV,1,[Enable udev-based monitor hotplug detection])
+ TDM_DRM_CFLAGS="$TDM_DRM_CFLAGS $UDEV_CFLAGS"
+ TDM_DRM_LIBS="$TDM_DRM_LIBS $UDEV_LIBS"
+fi
+
+AC_SUBST(TDM_DRM_CFLAGS)
+AC_SUBST(TDM_DRM_LIBS)
+
+# set the dir for the tbm module
+DEFAULT_TDM_MODULE_PATH="${libdir}/tdm"
+AC_ARG_WITH(tdm-module-path, AS_HELP_STRING([--with-tdm-module-path=PATH], [tdm module dir]),
+ [ TDM_MODULE_PATH="$withval" ],
+ [ TDM_MODULE_PATH="${DEFAULT_TDM_MODULE_PATH}" ])
+AC_SUBST(TDM_MODULE_PATH)
+
+# For enumerating devices in test case
+AC_OUTPUT([
+ Makefile
+ src/Makefile])
+
+echo ""
+echo "$PACKAGE_STRING will be compiled with:"
+echo ""
+echo "TDM_DRM_CFLAGS : $TDM_DRM_CFLAGS"
+echo "TDM_DRM_LIBS : $TDM_DRM_LIBS"
+echo "TDM_MODULE_DIR : $TDM_MODULE_PATH"
+echo ""
--- /dev/null
+<manifest>
+ <request>
+ <domain name="_"/>
+ </request>
+</manifest>
--- /dev/null
+Name: libtdm-fbdev
+Version: 1.0.1
+Release: 0
+Summary: Tizen Display Manager DRM Back-End Library
+Group: Development/Libraries
+License: MIT
+Source0: %{name}-%{version}.tar.gz
+Source1001: %{name}.manifest
+BuildRequires: pkgconfig(libdrm)
+BuildRequires: pkgconfig(libudev)
+BuildRequires: pkgconfig(libtdm)
+
+%description
+Back-End library of Tizen Display Manager FBDEV : libtdm-mgr FBDEV library
+
+%prep
+%setup -q
+cp %{SOURCE1001} .
+
+%build
+%reconfigure --prefix=%{_prefix} --libdir=%{_libdir} --disable-static \
+ CFLAGS="${CFLAGS} -Wall -Werror" \
+ LDFLAGS="${LDFLAGS} -Wl,--hash-style=both -Wl,--as-needed"
+make %{?_smp_mflags}
+
+%install
+%make_install
+
+%post
+if [ -f %{_libdir}/tdm/libtdm-default.so ]; then
+ rm -rf %{_libdir}/tdm/libtdm-default.so
+fi
+ln -s libtdm-fbdev.so %{_libdir}/tdm/libtdm-default.so
+
+%postun -p /sbin/ldconfig
+
+%files
+%manifest %{name}.manifest
+%license COPYING
+%defattr(-,root,root,-)
+%{_libdir}/tdm/libtdm-fbdev.so
--- /dev/null
+AM_CFLAGS = \
+ $(TDM_DRM_CFLAGS) \
+ -I$(top_srcdir)/src
+
+libtdm_fbdev_la_LTLIBRARIES = libtdm-fbdev.la
+libtdm_fbdev_ladir = $(TDM_MODULE_PATH)
+libtdm_fbdev_la_LDFLAGS = -module -avoid-version
+libtdm_fbdev_la_LIBADD = $(TDM_DRM_LIBS) -ldl
+
+libtdm_fbdev_la_SOURCES = \
+ tdm_fbdev_display.c \
+ tdm_fbdev.c
--- /dev/null
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#if HAVE_UDEV
+#include <libudev.h>
+#endif
+
+#include "tdm_fbdev.h"
+
+#include <tdm_helper.h>
+
+/*
+ * TODO: How should it be named?
+ */
+#define TDM_FBDEV_NAME "vigs"
+
+static tdm_func_display fbdev_func_display =
+{
+ fbdev_display_get_capabilitiy,
+ NULL, //display_get_pp_capability,
+ NULL, //display_get_capture_capability
+ fbdev_display_get_outputs,
+ fbdev_display_get_fd,
+ fbdev_display_handle_events,
+ NULL, //display_create_pp,
+ fbdev_output_get_capability,
+ fbdev_output_get_layers,
+ fbdev_output_set_property,
+ fbdev_output_get_property,
+ fbdev_output_wait_vblank,
+ fbdev_output_set_vblank_handler,
+ fbdev_output_commit,
+ fbdev_output_set_commit_handler,
+ fbdev_output_set_dpms,
+ fbdev_output_get_dpms,
+ fbdev_output_set_mode,
+ fbdev_output_get_mode,
+ NULL, //output_create_capture
+ fbdev_layer_get_capability,
+ fbdev_layer_set_property,
+ fbdev_layer_get_property,
+ fbdev_layer_set_info,
+ fbdev_layer_get_info,
+ fbdev_layer_set_buffer,
+ fbdev_layer_unset_buffer,
+ NULL, //layer_set_video_pos
+ NULL, //layer_create_capture
+};
+
+
+void
+tdm_fbdev_deinit(tdm_backend_data *bdata)
+{
+
+}
+
+tdm_backend_data*
+tdm_fbdev_init(tdm_display *dpy, tdm_error *error)
+{
+ (void) fbdev_func_display;
+
+ return NULL;
+}
+
+tdm_backend_module tdm_backend_module_data =
+{
+ "vigs",
+ "Samsung",
+ TDM_BACKEND_ABI_VERSION,
+ tdm_fbdev_init,
+ tdm_fbdev_deinit
+};
--- /dev/null
+#ifndef _TDM_fbdev_H_
+#define _TDM_fbdev_H_
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <errno.h>
+#include <unistd.h>
+#include <limits.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+
+#include <tbm_surface.h>
+#include <tbm_surface_internal.h>
+#include <tdm_backend.h>
+#include <tdm_log.h>
+#include <tdm_list.h>
+
+/* drm backend functions (display) */
+tdm_error fbdev_display_get_capabilitiy(tdm_backend_data *bdata, tdm_caps_display *caps);
+tdm_output** fbdev_display_get_outputs(tdm_backend_data *bdata, int *count, tdm_error *error);
+tdm_error fbdev_display_get_fd(tdm_backend_data *bdata, int *fd);
+tdm_error fbdev_display_handle_events(tdm_backend_data *bdata);
+tdm_pp* fbdev_display_create_pp(tdm_backend_data *bdata, tdm_error *error);
+tdm_error fbdev_output_get_capability(tdm_output *output, tdm_caps_output *caps);
+tdm_layer** fbdev_output_get_layers(tdm_output *output, int *count, tdm_error *error);
+tdm_error fbdev_output_set_property(tdm_output *output, unsigned int id, tdm_value value);
+tdm_error fbdev_output_get_property(tdm_output *output, unsigned int id, tdm_value *value);
+tdm_error fbdev_output_wait_vblank(tdm_output *output, int interval, int sync, void *user_data);
+tdm_error fbdev_output_set_vblank_handler(tdm_output *output, tdm_output_vblank_handler func);
+tdm_error fbdev_output_commit(tdm_output *output, int sync, void *user_data);
+tdm_error fbdev_output_set_commit_handler(tdm_output *output, tdm_output_commit_handler func);
+tdm_error fbdev_output_set_dpms(tdm_output *output, tdm_output_dpms dpms_value);
+tdm_error fbdev_output_get_dpms(tdm_output *output, tdm_output_dpms *dpms_value);
+tdm_error fbdev_output_set_mode(tdm_output *output, const tdm_output_mode *mode);
+tdm_error fbdev_output_get_mode(tdm_output *output, const tdm_output_mode **mode);
+tdm_error fbdev_layer_get_capability(tdm_layer *layer, tdm_caps_layer *caps);
+tdm_error fbdev_layer_set_property(tdm_layer *layer, unsigned int id, tdm_value value);
+tdm_error fbdev_layer_get_property(tdm_layer *layer, unsigned int id, tdm_value *value);
+tdm_error fbdev_layer_set_info(tdm_layer *layer, tdm_info_layer *info);
+tdm_error fbdev_layer_get_info(tdm_layer *layer, tdm_info_layer *info);
+tdm_error fbdev_layer_set_buffer(tdm_layer *layer, tbm_surface_h buffer);
+tdm_error fbdev_layer_unset_buffer(tdm_layer *layer);
+
+#endif /* _TDM_fbdev_H_ */
--- /dev/null
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tdm_helper.h>
+#include "tdm_fbdev.h"
+
+tdm_error
+fbdev_display_get_capabilitiy(tdm_backend_data *bdata, tdm_caps_display *caps)
+{
+ return TDM_ERROR_NONE;
+}
+
+tdm_output**
+fbdev_display_get_outputs(tdm_backend_data *bdata, int *count, tdm_error *error)
+{
+ return NULL;
+}
+
+tdm_error
+fbdev_display_get_fd(tdm_backend_data *bdata, int *fd)
+{
+ return TDM_ERROR_NONE;
+}
+
+tdm_error
+fbdev_display_handle_events(tdm_backend_data *bdata)
+{
+ return TDM_ERROR_NONE;
+}
+
+tdm_error
+fbdev_output_get_capability(tdm_output *output, tdm_caps_output *caps)
+{
+ return TDM_ERROR_NONE;
+}
+
+tdm_layer**
+fbdev_output_get_layers(tdm_output *output, int *count, tdm_error *error)
+{
+ return NULL;
+}
+
+tdm_error
+fbdev_output_set_property(tdm_output *output, unsigned int id, tdm_value value)
+{
+ return TDM_ERROR_NONE;
+}
+
+tdm_error
+fbdev_output_get_property(tdm_output *output, unsigned int id, tdm_value *value)
+{
+ return TDM_ERROR_NONE;
+}
+
+tdm_error
+fbdev_output_wait_vblank(tdm_output *output, int interval, int sync, void *user_data)
+{
+ return TDM_ERROR_NONE;
+}
+
+tdm_error
+fbdev_output_set_vblank_handler(tdm_output *output, tdm_output_vblank_handler func)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_output_commit(tdm_output *output, int sync, void *user_data)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_output_set_commit_handler(tdm_output *output, tdm_output_commit_handler func)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_output_set_dpms(tdm_output *output, tdm_output_dpms dpms_value)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_output_get_dpms(tdm_output *output, tdm_output_dpms *dpms_value)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_output_set_mode(tdm_output *output, const tdm_output_mode *mode)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_output_get_mode(tdm_output *output, const tdm_output_mode **mode)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_layer_get_capability(tdm_layer *layer, tdm_caps_layer *caps)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_layer_set_property(tdm_layer *layer, unsigned int id, tdm_value value)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_layer_get_property(tdm_layer *layer, unsigned int id, tdm_value *value)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_layer_set_info(tdm_layer *layer, tdm_info_layer *info)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_layer_get_info(tdm_layer *layer, tdm_info_layer *info)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_layer_set_buffer(tdm_layer *layer, tbm_surface_h buffer)
+{
+ return TDM_ERROR_NONE;
+}
+
+
+tdm_error
+fbdev_layer_unset_buffer(tdm_layer *layer)
+{
+ return TDM_ERROR_NONE;
+}