aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/kdrive/epson
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/hw/kdrive/epson')
-rw-r--r--xorg-server/hw/kdrive/epson/Makefile.am36
-rw-r--r--xorg-server/hw/kdrive/epson/Makefile.in716
-rw-r--r--xorg-server/hw/kdrive/epson/epson13806.c604
-rw-r--r--xorg-server/hw/kdrive/epson/epson13806.h132
-rw-r--r--xorg-server/hw/kdrive/epson/epson13806draw.c649
-rw-r--r--xorg-server/hw/kdrive/epson/epson13806draw.h119
-rw-r--r--xorg-server/hw/kdrive/epson/epson13806reg.h183
-rw-r--r--xorg-server/hw/kdrive/epson/epson13806stub.c69
8 files changed, 2508 insertions, 0 deletions
diff --git a/xorg-server/hw/kdrive/epson/Makefile.am b/xorg-server/hw/kdrive/epson/Makefile.am
new file mode 100644
index 000000000..14bb04996
--- /dev/null
+++ b/xorg-server/hw/kdrive/epson/Makefile.am
@@ -0,0 +1,36 @@
+INCLUDES = \
+ @KDRIVE_INCS@ \
+ @KDRIVE_CFLAGS@
+
+bin_PROGRAMS = Xepson
+
+noinst_LIBRARIES = libepson.a
+
+libepson_a_SOURCES = \
+ epson13806.c \
+ epson13806.h \
+ epson13806draw.c\
+ epson13806draw.h\
+ epson13806reg.h
+
+Xepson_SOURCES = \
+ epson13806stub.c
+
+EPSON_LIBS = \
+ libepson.a \
+ @KDRIVE_LIBS@
+
+if GLX
+Xepson_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
+endif
+
+Xepson_LDADD = \
+ $(EPSON_LIBS) \
+ @KDRIVE_LIBS@
+
+Xepson_DEPENDENCIES = \
+ libepson.a \
+ @KDRIVE_LOCAL_LIBS@
+
+relink:
+ rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/xorg-server/hw/kdrive/epson/Makefile.in b/xorg-server/hw/kdrive/epson/Makefile.in
new file mode 100644
index 000000000..7e7083e5b
--- /dev/null
+++ b/xorg-server/hw/kdrive/epson/Makefile.in
@@ -0,0 +1,716 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = Xepson$(EXEEXT)
+subdir = hw/kdrive/epson
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \
+ $(top_builddir)/include/xorg-server.h \
+ $(top_builddir)/include/dix-config.h \
+ $(top_builddir)/include/xgl-config.h \
+ $(top_builddir)/include/xorg-config.h \
+ $(top_builddir)/include/xkb-config.h \
+ $(top_builddir)/include/xwin-config.h \
+ $(top_builddir)/include/kdrive-config.h
+CONFIG_CLEAN_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+libepson_a_AR = $(AR) $(ARFLAGS)
+libepson_a_LIBADD =
+am_libepson_a_OBJECTS = epson13806.$(OBJEXT) epson13806draw.$(OBJEXT)
+libepson_a_OBJECTS = $(am_libepson_a_OBJECTS)
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_Xepson_OBJECTS = epson13806stub.$(OBJEXT)
+Xepson_OBJECTS = $(am_Xepson_OBJECTS)
+am__DEPENDENCIES_1 = libepson.a
+Xepson_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(Xepson_LDFLAGS) \
+ $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
+SOURCES = $(libepson_a_SOURCES) $(Xepson_SOURCES)
+DIST_SOURCES = $(libepson_a_SOURCES) $(Xepson_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+APPDEFAULTDIR = @APPDEFAULTDIR@
+APPLE_APPLICATIONS_DIR = @APPLE_APPLICATIONS_DIR@
+APP_MAN_DIR = @APP_MAN_DIR@
+APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_FONT_PATH = @BASE_FONT_PATH@
+BUILD_DATE = @BUILD_DATE@
+BUILD_TIME = @BUILD_TIME@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMPILEDDEFAULTFONTPATH = @COMPILEDDEFAULTFONTPATH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DARWIN_LIBS = @DARWIN_LIBS@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_LIBS = @DBUS_LIBS@
+DEFAULT_LIBRARY_PATH = @DEFAULT_LIBRARY_PATH@
+DEFAULT_LOGPREFIX = @DEFAULT_LOGPREFIX@
+DEFAULT_MODULE_PATH = @DEFAULT_MODULE_PATH@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DGA_CFLAGS = @DGA_CFLAGS@
+DGA_LIBS = @DGA_LIBS@
+DIX_CFLAGS = @DIX_CFLAGS@
+DLLTOOL = @DLLTOOL@
+DMXEXAMPLES_DEP_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+DMXEXAMPLES_DEP_LIBS = @DMXEXAMPLES_DEP_LIBS@
+DMXMODULES_CFLAGS = @DMXMODULES_CFLAGS@
+DMXMODULES_LIBS = @DMXMODULES_LIBS@
+DMXXIEXAMPLES_DEP_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+DMXXIEXAMPLES_DEP_LIBS = @DMXXIEXAMPLES_DEP_LIBS@
+DMXXMUEXAMPLES_DEP_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+DMXXMUEXAMPLES_DEP_LIBS = @DMXXMUEXAMPLES_DEP_LIBS@
+DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
+DRI2PROTO_LIBS = @DRI2PROTO_LIBS@
+DRIPROTO_CFLAGS = @DRIPROTO_CFLAGS@
+DRIPROTO_LIBS = @DRIPROTO_LIBS@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+DRI_DRIVER_PATH = @DRI_DRIVER_PATH@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@
+GLX_DEFINES = @GLX_DEFINES@
+GL_CFLAGS = @GL_CFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HAL_CFLAGS = @HAL_CFLAGS@
+HAL_LIBS = @HAL_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KDRIVE_CFLAGS = @KDRIVE_CFLAGS@
+KDRIVE_INCS = @KDRIVE_INCS@
+KDRIVE_LIBS = @KDRIVE_LIBS@
+KDRIVE_LOCAL_LIBS = @KDRIVE_LOCAL_LIBS@
+KDRIVE_PURE_INCS = @KDRIVE_PURE_INCS@
+KDRIVE_PURE_LIBS = @KDRIVE_PURE_LIBS@
+LAUNCHD = @LAUNCHD@
+LDFLAGS = @LDFLAGS@
+LD_EXPORT_SYMBOLS_FLAG = @LD_EXPORT_SYMBOLS_FLAG@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
+LIBDRM_LIBS = @LIBDRM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LINUXDOC = @LINUXDOC@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MAKE_HTML = @MAKE_HTML@
+MAKE_PDF = @MAKE_PDF@
+MAKE_PS = @MAKE_PS@
+MAKE_TEXT = @MAKE_TEXT@
+MESA_SOURCE = @MESA_SOURCE@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+MKFONTDIR = @MKFONTDIR@
+MKFONTSCALE = @MKFONTSCALE@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCCLD = @OBJCCLD@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJCLINK = @OBJCLINK@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
+PCIACCESS_LIBS = @PCIACCESS_LIBS@
+PCI_TXT_IDS_PATH = @PCI_TXT_IDS_PATH@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PROJECTROOT = @PROJECTROOT@
+PS2PDF = @PS2PDF@
+RANLIB = @RANLIB@
+RAWCPP = @RAWCPP@
+RAWCPPFLAGS = @RAWCPPFLAGS@
+SED = @SED@
+SERVER_MISC_CONFIG_PATH = @SERVER_MISC_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@
+SOLARIS_INOUT_ARCH = @SOLARIS_INOUT_ARCH@
+STRIP = @STRIP@
+TSLIB_CFLAGS = @TSLIB_CFLAGS@
+TSLIB_LIBS = @TSLIB_LIBS@
+UTILS_SYS_LIBS = @UTILS_SYS_LIBS@
+VENDOR_MAN_VERSION = @VENDOR_MAN_VERSION@
+VENDOR_NAME = @VENDOR_NAME@
+VENDOR_NAME_SHORT = @VENDOR_NAME_SHORT@
+VENDOR_RELEASE = @VENDOR_RELEASE@
+VERSION = @VERSION@
+X11APP_ARCHS = @X11APP_ARCHS@
+X11EXAMPLES_DEP_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+X11EXAMPLES_DEP_LIBS = @X11EXAMPLES_DEP_LIBS@
+XDMCP_CFLAGS = @XDMCP_CFLAGS@
+XDMCP_LIBS = @XDMCP_LIBS@
+XDMXCONFIG_DEP_CFLAGS = @XDMXCONFIG_DEP_CFLAGS@
+XDMXCONFIG_DEP_LIBS = @XDMXCONFIG_DEP_LIBS@
+XDMX_CFLAGS = @XDMX_CFLAGS@
+XDMX_LIBS = @XDMX_LIBS@
+XDMX_SYS_LIBS = @XDMX_SYS_LIBS@
+XEGLMODULES_CFLAGS = @XEGLMODULES_CFLAGS@
+XEGL_LIBS = @XEGL_LIBS@
+XEGL_SYS_LIBS = @XEGL_SYS_LIBS@
+XEPHYR_CFLAGS = @XEPHYR_CFLAGS@
+XEPHYR_DRI_LIBS = @XEPHYR_DRI_LIBS@
+XEPHYR_INCS = @XEPHYR_INCS@
+XEPHYR_LIBS = @XEPHYR_LIBS@
+XF86CONFIGFILE = @XF86CONFIGFILE@
+XF86MISC_CFLAGS = @XF86MISC_CFLAGS@
+XF86MISC_LIBS = @XF86MISC_LIBS@
+XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@
+XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@
+XGLMODULES_CFLAGS = @XGLMODULES_CFLAGS@
+XGLMODULES_LIBS = @XGLMODULES_LIBS@
+XGLXMODULES_CFLAGS = @XGLXMODULES_CFLAGS@
+XGLXMODULES_LIBS = @XGLXMODULES_LIBS@
+XGLX_LIBS = @XGLX_LIBS@
+XGLX_SYS_LIBS = @XGLX_SYS_LIBS@
+XGL_LIBS = @XGL_LIBS@
+XGL_MODULE_PATH = @XGL_MODULE_PATH@
+XGL_SYS_LIBS = @XGL_SYS_LIBS@
+XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@
+XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@
+XKB_COMPILED_DIR = @XKB_COMPILED_DIR@
+XKM_OUTPUT_DIR = @XKM_OUTPUT_DIR@
+XLIB_CFLAGS = @XLIB_CFLAGS@
+XLIB_LIBS = @XLIB_LIBS@
+XNESTMODULES_CFLAGS = @XNESTMODULES_CFLAGS@
+XNESTMODULES_LIBS = @XNESTMODULES_LIBS@
+XNEST_LIBS = @XNEST_LIBS@
+XNEST_SYS_LIBS = @XNEST_SYS_LIBS@
+XORGCFG_DEP_CFLAGS = @XORGCFG_DEP_CFLAGS@
+XORGCFG_DEP_LIBS = @XORGCFG_DEP_LIBS@
+XORGCONFIG_DEP_CFLAGS = @XORGCONFIG_DEP_CFLAGS@
+XORGCONFIG_DEP_LIBS = @XORGCONFIG_DEP_LIBS@
+XORG_CFLAGS = @XORG_CFLAGS@
+XORG_INCS = @XORG_INCS@
+XORG_LIBS = @XORG_LIBS@
+XORG_MODULES_CFLAGS = @XORG_MODULES_CFLAGS@
+XORG_MODULES_LIBS = @XORG_MODULES_LIBS@
+XORG_OS = @XORG_OS@
+XORG_OS_SUBDIR = @XORG_OS_SUBDIR@
+XORG_SYS_LIBS = @XORG_SYS_LIBS@
+XPRINTMODULES_CFLAGS = @XPRINTMODULES_CFLAGS@
+XPRINTMODULES_LIBS = @XPRINTMODULES_LIBS@
+XPRINTPROTO_CFLAGS = @XPRINTPROTO_CFLAGS@
+XPRINTPROTO_LIBS = @XPRINTPROTO_LIBS@
+XPRINT_CFLAGS = @XPRINT_CFLAGS@
+XPRINT_LIBS = @XPRINT_LIBS@
+XPRINT_SYS_LIBS = @XPRINT_SYS_LIBS@
+XRESEXAMPLES_DEP_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+XRESEXAMPLES_DEP_LIBS = @XRESEXAMPLES_DEP_LIBS@
+XSDL_INCS = @XSDL_INCS@
+XSDL_LIBS = @XSDL_LIBS@
+XSERVERCFLAGS_CFLAGS = @XSERVERCFLAGS_CFLAGS@
+XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@
+XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@
+XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@
+XSERVER_LIBS = @XSERVER_LIBS@
+XSERVER_SYS_LIBS = @XSERVER_SYS_LIBS@
+XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+XTSTEXAMPLES_DEP_LIBS = @XTSTEXAMPLES_DEP_LIBS@
+XVFB_LIBS = @XVFB_LIBS@
+XVFB_SYS_LIBS = @XVFB_SYS_LIBS@
+XWINMODULES_CFLAGS = @XWINMODULES_CFLAGS@
+XWINMODULES_LIBS = @XWINMODULES_LIBS@
+XWIN_LIBS = @XWIN_LIBS@
+XWIN_SERVER_NAME = @XWIN_SERVER_NAME@
+XWIN_SYS_LIBS = @XWIN_SYS_LIBS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+__XCONFIGFILE__ = @__XCONFIGFILE__@
+abi_ansic = @abi_ansic@
+abi_extension = @abi_extension@
+abi_font = @abi_font@
+abi_videodrv = @abi_videodrv@
+abi_xinput = @abi_xinput@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+driverdir = @driverdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+extdir = @extdir@
+ft_config = @ft_config@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+launchagentsdir = @launchagentsdir@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+moduledir = @moduledir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sdkdir = @sdkdir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+xglmoduledir = @xglmoduledir@
+xpconfigdir = @xpconfigdir@
+INCLUDES = \
+ @KDRIVE_INCS@ \
+ @KDRIVE_CFLAGS@
+
+noinst_LIBRARIES = libepson.a
+libepson_a_SOURCES = \
+ epson13806.c \
+ epson13806.h \
+ epson13806draw.c\
+ epson13806draw.h\
+ epson13806reg.h
+
+Xepson_SOURCES = \
+ epson13806stub.c
+
+EPSON_LIBS = \
+ libepson.a \
+ @KDRIVE_LIBS@
+
+@GLX_TRUE@Xepson_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
+Xepson_LDADD = \
+ $(EPSON_LIBS) \
+ @KDRIVE_LIBS@
+
+Xepson_DEPENDENCIES = \
+ libepson.a \
+ @KDRIVE_LOCAL_LIBS@
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign hw/kdrive/epson/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign hw/kdrive/epson/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libepson.a: $(libepson_a_OBJECTS) $(libepson_a_DEPENDENCIES)
+ -rm -f libepson.a
+ $(libepson_a_AR) libepson.a $(libepson_a_OBJECTS) $(libepson_a_LIBADD)
+ $(RANLIB) libepson.a
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ || test -f $$p1 \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+Xepson$(EXEEXT): $(Xepson_OBJECTS) $(Xepson_DEPENDENCIES)
+ @rm -f Xepson$(EXEEXT)
+ $(Xepson_LINK) $(Xepson_OBJECTS) $(Xepson_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epson13806.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epson13806draw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epson13806stub.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES) $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-libtool clean-noinstLIBRARIES ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-binPROGRAMS
+
+
+relink:
+ rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/xorg-server/hw/kdrive/epson/epson13806.c b/xorg-server/hw/kdrive/epson/epson13806.c
new file mode 100644
index 000000000..6cf8c9ad9
--- /dev/null
+++ b/xorg-server/hw/kdrive/epson/epson13806.c
@@ -0,0 +1,604 @@
+/*
+ * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Costas Sylianou not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Costas Stylianou makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL COSTAS STYLIANOU BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/*
+ * epson13806.c - Implementation of hardware accelerated functions for
+ * Epson S1D13806 graphics controller.
+ *
+ * History:
+ * 28-Jan-04 C.Stylianou PRJ NBL: Created from fbdev.c.
+ * 30-Mar-04 Phil Blundell/Peter Naulls Integration with XFree 4.3
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <kdrive-config.h>
+#endif
+
+#include <sys/ioctl.h>
+
+#include "epson13806.h"
+#include "epson13806reg.h"
+
+extern int KdTsPhyScreen;
+
+Bool
+epsonInitialize (KdCardInfo *card, EpsonPriv *priv)
+{
+ int k;
+ unsigned long off;
+ if ((priv->fd = open("/dev/fb0", O_RDWR)) < 0) {
+ perror("Error opening /dev/fb0\n");
+ return FALSE;
+ }
+
+ if ((k=ioctl(priv->fd, FBIOGET_FSCREENINFO, &priv->fix)) < 0) {
+ perror("Error with /dev/fb ioctl FIOGET_FSCREENINFO");
+ close (priv->fd);
+ return FALSE;
+ }
+
+ if ((k=ioctl(priv->fd, FBIOGET_VSCREENINFO, &priv->var)) < 0) {
+ perror("Error with /dev/fb ioctl FIOGET_VSCREENINFO");
+ close (priv->fd);
+ return FALSE;
+ }
+
+ priv->fb_base = KdMapDevice (EPSON13806_PHYSICAL_VMEM_ADDR, EPSON13806_VMEM_SIZE);
+
+
+ if (priv->fb_base == (char *)-1) {
+ perror("ERROR: mmap framebuffer fails!");
+ close (priv->fd);
+ return FALSE;
+ }
+
+ off = (unsigned long) priv->fix.smem_start % (unsigned long) getpagesize();
+ priv->fb = priv->fb_base + off;
+ return TRUE;
+}
+
+Bool
+epsonCardInit (KdCardInfo *card)
+{
+ EpsonPriv *priv;
+
+ priv = (EpsonPriv *) xalloc (sizeof (EpsonPriv));
+ if (!priv)
+ return FALSE;
+
+ if (!epsonInitialize (card, priv))
+ {
+ xfree (priv);
+ return FALSE;
+ }
+ card->driver = priv;
+
+ // Call InitEpson to map onto Epson registers
+ initEpson13806();
+
+ return TRUE;
+}
+
+#define FBDEV_KLUDGE_FORMAT
+#ifdef FBDEV_KLUDGE_FORMAT
+static Pixel
+epsonMakeContig (Pixel orig, Pixel others)
+{
+ Pixel low;
+
+ low = lowbit (orig) >> 1;
+ while (low && (others & low) == 0)
+ {
+ orig |= low;
+ low >>= 1;
+ }
+ return orig;
+}
+#endif
+
+Bool
+epsonScreenInitialize (KdScreenInfo *screen, EpsonScrPriv *scrpriv)
+{
+ EpsonPriv *priv = screen->card->driver;
+ Pixel allbits;
+ int depth;
+ Bool gray;
+ depth = priv->var.bits_per_pixel;
+ gray = priv->var.grayscale;
+
+
+ screen->fb[0].visuals = (1 << TrueColor);
+#define Mask(o,l) (((1 << l) - 1) << o)
+ screen->fb[0].redMask = Mask (priv->var.red.offset, priv->var.red.length);
+ screen->fb[0].greenMask = Mask (priv->var.green.offset, priv->var.green.length);
+ screen->fb[0].blueMask = Mask (priv->var.blue.offset, priv->var.blue.length);
+#ifdef FBDEV_KLUDGE_FORMAT
+ /*
+ * This is a kludge so that Render will work -- fill in the gaps
+ * in the pixel
+ */
+ screen->fb[0].redMask = epsonMakeContig (screen->fb[0].redMask,
+ screen->fb[0].greenMask|
+ screen->fb[0].blueMask);
+
+ screen->fb[0].greenMask = epsonMakeContig (screen->fb[0].greenMask,
+ screen->fb[0].redMask|
+ screen->fb[0].blueMask);
+
+ screen->fb[0].blueMask = epsonMakeContig (screen->fb[0].blueMask,
+ screen->fb[0].redMask|
+ screen->fb[0].greenMask);
+
+#endif
+ allbits = screen->fb[0].redMask | screen->fb[0].greenMask | screen->fb[0].blueMask;
+ depth = 32;
+ while (depth && !(allbits & (1 << (depth - 1))))
+ depth--;
+
+ screen->rate = 60;
+ scrpriv->randr = screen->randr;
+
+ {
+ screen->fb[0].depth = depth;
+ screen->fb[0].bitsPerPixel = priv->var.bits_per_pixel;
+ screen->width = priv->var.xres;
+ screen->height = priv->var.yres;
+ screen->fb[0].byteStride = priv->fix.line_length;
+ screen->fb[0].pixelStride = (priv->fix.line_length * 8 /
+ priv->var.bits_per_pixel);
+ screen->fb[0].frameBuffer = (CARD8 *) (priv->fb);
+ screen->off_screen_base = screen->fb[0].byteStride * screen->height;
+ screen->memory_base = priv->fb;
+ screen->memory_size = EPSON13806_VMEM_SIZE;
+ }
+ return TRUE;
+}
+
+Bool
+epsonScreenInit (KdScreenInfo *screen)
+{
+ EpsonScrPriv *scrpriv;
+
+ scrpriv = xalloc (sizeof (EpsonScrPriv));
+ if (!scrpriv)
+ return FALSE;
+ memset (scrpriv, '\0', sizeof (EpsonScrPriv));
+ screen->driver = scrpriv;
+ if (!epsonScreenInitialize (screen, scrpriv)) {
+ screen->driver = 0;
+ xfree (scrpriv);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void *
+epsonWindowLinear (ScreenPtr pScreen,
+ CARD32 row,
+ CARD32 offset,
+ int mode,
+ CARD32 *size,
+ void *closure)
+{
+ KdScreenPriv(pScreen);
+ EpsonPriv *priv = pScreenPriv->card->driver;
+
+ if (!pScreenPriv->enabled)
+ return 0;
+ *size = priv->fix.line_length;
+ return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
+}
+
+
+#ifdef RANDR
+static Bool
+epsonRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
+{
+ KdScreenPriv(pScreen);
+ KdScreenInfo *screen = pScreenPriv->screen;
+ EpsonScrPriv *scrpriv = screen->driver;
+#if 0
+ RRVisualGroupPtr pVisualGroup;
+ RRGroupOfVisualGroupPtr pGroupOfVisualGroup;
+#endif
+ RRScreenSizePtr pSize;
+ Rotation randr;
+ int n;
+
+ *rotations = RR_Rotate_0|RR_Rotate_90|RR_Rotate_180|RR_Rotate_270;
+
+ for (n = 0; n < pScreen->numDepths; n++)
+ if (pScreen->allowedDepths[n].numVids)
+ break;
+ if (n == pScreen->numDepths)
+ return FALSE;
+
+#if 0
+ pVisualGroup = RRCreateVisualGroup (pScreen);
+ if (!pVisualGroup)
+ return FALSE;
+
+ if (!RRAddDepthToVisualGroup (pScreen, pVisualGroup, &pScreen->allowedDepths[n])) {
+ RRDestroyVisualGroup (pScreen, pVisualGroup);
+ return FALSE;
+ }
+
+ pVisualGroup = RRRegisterVisualGroup (pScreen, pVisualGroup);
+ if (!pVisualGroup)
+ return FALSE;
+
+ pGroupOfVisualGroup = RRCreateGroupOfVisualGroup (pScreen);
+
+ if (!RRAddVisualGroupToGroupOfVisualGroup (pScreen,
+ pGroupOfVisualGroup,
+ pVisualGroup))
+ {
+ RRDestroyGroupOfVisualGroup (pScreen, pGroupOfVisualGroup);
+ /* pVisualGroup left until screen closed */
+ return FALSE;
+ }
+
+ pGroupOfVisualGroup = RRRegisterGroupOfVisualGroup (pScreen, pGroupOfVisualGroup);
+ if (!pGroupOfVisualGroup)
+ return FALSE;
+#endif
+
+ pSize = RRRegisterSize (pScreen,
+ screen->width,
+ screen->height,
+ screen->width_mm,
+ screen->height_mm);
+
+ randr = KdSubRotation (scrpriv->randr, screen->randr);
+
+ RRSetCurrentConfig (pScreen, randr, RR_Rotate_0, pSize);
+
+ return TRUE;
+}
+
+static Bool
+epsonRandRSetConfig (ScreenPtr pScreen,
+ Rotation randr,
+ int rate,
+ RRScreenSizePtr pSize)
+{
+ KdScreenPriv(pScreen);
+ KdScreenInfo *screen = pScreenPriv->screen;
+ EpsonScrPriv *scrpriv = screen->driver;
+ Bool wasEnabled = pScreenPriv->enabled;
+
+ randr = KdAddRotation (randr, screen->randr);
+
+ if (scrpriv->randr != randr)
+ {
+ if (wasEnabled)
+ KdDisableScreen (pScreen);
+
+ scrpriv->randr = randr;
+
+ if (wasEnabled)
+ KdEnableScreen (pScreen);
+ }
+ return TRUE;
+}
+
+static Bool
+epsonRandRInit (ScreenPtr pScreen)
+{
+ rrScrPrivPtr pScrPriv;
+
+ if (!RRScreenInit (pScreen))
+ return FALSE;
+
+ pScrPriv = rrGetScrPriv(pScreen);
+ pScrPriv->rrGetInfo = epsonRandRGetInfo;
+ pScrPriv->rrSetConfig = epsonRandRSetConfig;
+ return TRUE;
+}
+#endif
+
+static Bool
+epsonCreateColormap (ColormapPtr pmap)
+{
+ ScreenPtr pScreen = pmap->pScreen;
+ KdScreenPriv(pScreen);
+ EpsonPriv *priv = pScreenPriv->card->driver;
+ VisualPtr pVisual;
+ int i;
+ int nent;
+ xColorItem *pdefs;
+
+ switch (priv->fix.visual) {
+ case FB_VISUAL_STATIC_PSEUDOCOLOR:
+ pVisual = pmap->pVisual;
+ nent = pVisual->ColormapEntries;
+ pdefs = xalloc (nent * sizeof (xColorItem));
+ if (!pdefs)
+ return FALSE;
+ for (i = 0; i < nent; i++)
+ pdefs[i].pixel = i;
+ epsonGetColors (pScreen, 0, nent, pdefs);
+ for (i = 0; i < nent; i++)
+ {
+ pmap->red[i].co.local.red = pdefs[i].red;
+ pmap->red[i].co.local.green = pdefs[i].green;
+ pmap->red[i].co.local.blue = pdefs[i].blue;
+ }
+ xfree (pdefs);
+ return TRUE;
+
+ default:
+ return fbInitializeColormap (pmap);
+ }
+}
+
+Bool
+epsonInitScreen (ScreenPtr pScreen)
+{
+#ifdef TOUCHSCREEN
+ KdTsPhyScreen = pScreen->myNum;
+#endif
+
+ pScreen->CreateColormap = epsonCreateColormap;
+
+ return TRUE;
+}
+
+static Bool
+epsonFinishInitScreen (ScreenPtr pScreen)
+{
+ if (!shadowSetup (pScreen))
+ return FALSE;
+
+#ifdef RANDR
+ if (!epsonRandRInit (pScreen))
+ return FALSE;
+#endif
+
+ return TRUE;
+}
+
+static Bool
+epsonSetShadow (ScreenPtr pScreen)
+{
+ KdScreenPriv(pScreen);
+ KdScreenInfo *screen = pScreenPriv->screen;
+ EpsonScrPriv *scrpriv = screen->driver;
+ ShadowUpdateProc update;
+ ShadowWindowProc window;
+
+ window = epsonWindowLinear;
+ update = shadowUpdatePacked;
+
+ return KdShadowSet (pScreen, scrpriv->randr, update, window);
+}
+
+static Bool
+epsonCreateResources (ScreenPtr pScreen)
+{
+ return epsonSetShadow (pScreen);
+}
+
+void
+epsonPreserve (KdCardInfo *card)
+{
+}
+
+Bool
+epsonEnable (ScreenPtr pScreen)
+{
+ KdScreenPriv(pScreen);
+ EpsonPriv *priv = pScreenPriv->card->driver;
+ int k;
+
+ priv->var.activate = FB_ACTIVATE_NOW|FB_CHANGE_CMAP_VBL;
+
+ /* display it on the LCD */
+ k = ioctl (priv->fd, FBIOPUT_VSCREENINFO, &priv->var);
+ if (k < 0) {
+ perror ("FBIOPUT_VSCREENINFO");
+ return FALSE;
+ }
+
+ k = ioctl (priv->fd, FBIOGET_FSCREENINFO, &priv->fix);
+ if (k < 0) {
+ perror ("FBIOGET_FSCREENINFO");
+ return FALSE;
+ }
+
+ if (priv->fix.visual == FB_VISUAL_DIRECTCOLOR) {
+ struct fb_cmap cmap;
+ int i;
+
+ for (i = 0;
+ i < (1 << priv->var.red.length) ||
+ i < (1 << priv->var.green.length) ||
+ i < (1 << priv->var.blue.length); i++) {
+ priv->red[i] = i * 65535 / ((1 << priv->var.red.length) - 1);
+ priv->green[i] = i * 65535 / ((1 << priv->var.green.length) - 1);
+ priv->blue[i] = i * 65535 / ((1 << priv->var.blue.length) - 1);
+ }
+ cmap.start = 0;
+ cmap.len = i;
+ cmap.red = &priv->red[0];
+ cmap.green = &priv->green[0];
+ cmap.blue = &priv->blue[0];
+ cmap.transp = 0;
+ ioctl (priv->fd, FBIOPUTCMAP, &cmap);
+ }
+ return TRUE;
+}
+
+Bool
+epsonDPMS (ScreenPtr pScreen, int mode)
+{
+ KdScreenPriv(pScreen);
+ EpsonPriv *priv = pScreenPriv->card->driver;
+ static int oldmode = -1;
+
+ if (mode == oldmode)
+ return TRUE;
+#ifdef FBIOPUT_POWERMODE
+ if (ioctl (priv->fd, FBIOPUT_POWERMODE, &mode) >= 0) {
+ oldmode = mode;
+ return TRUE;
+ }
+#endif
+#ifdef FBIOBLANK
+ if (ioctl (priv->fd, FBIOBLANK, mode ? mode + 1 : 0) >= 0) {
+ oldmode = mode;
+ return TRUE;
+ }
+#endif
+ return FALSE;
+}
+
+void
+epsonDisable (ScreenPtr pScreen)
+{
+}
+
+void
+epsonRestore (KdCardInfo *card)
+{
+}
+
+void
+epsonScreenFini (KdScreenInfo *screen)
+{
+}
+
+void
+epsonCardFini (KdCardInfo *card)
+{
+ EpsonPriv *priv = card->driver;
+
+ munmap (priv->fb_base, priv->fix.smem_len);
+ close (priv->fd);
+ xfree (priv);
+}
+
+void
+epsonGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
+{
+ KdScreenPriv(pScreen);
+ EpsonPriv *priv = pScreenPriv->card->driver;
+ struct fb_cmap cmap;
+ int p;
+ int k;
+ int min, max;
+
+ min = 256;
+ max = 0;
+ for (k = 0; k < n; k++) {
+ if (pdefs[k].pixel < min)
+ min = pdefs[k].pixel;
+ if (pdefs[k].pixel > max)
+ max = pdefs[k].pixel;
+ }
+ cmap.start = min;
+ cmap.len = max - min + 1;
+ cmap.red = &priv->red[min];
+ cmap.green = &priv->green[min];;
+ cmap.blue = &priv->blue[min];
+ cmap.transp = 0;
+ k = ioctl (priv->fd, FBIOGETCMAP, &cmap);
+ if (k < 0) {
+ perror ("can't get colormap");
+ return;
+ }
+ while (n--) {
+ p = pdefs->pixel;
+ pdefs->red = priv->red[p];
+ pdefs->green = priv->green[p];
+ pdefs->blue = priv->blue[p];
+ pdefs++;
+ }
+}
+
+void
+epsonPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
+{
+ KdScreenPriv(pScreen);
+ EpsonPriv *priv = pScreenPriv->card->driver;
+ struct fb_cmap cmap;
+ int p;
+ int min, max;
+
+ min = 256;
+ max = 0;
+ while (n--) {
+ p = pdefs->pixel;
+ priv->red[p] = pdefs->red;
+ priv->green[p] = pdefs->green;
+ priv->blue[p] = pdefs->blue;
+ if (p < min)
+ min = p;
+ if (p > max)
+ max = p;
+ pdefs++;
+ }
+ cmap.start = min;
+ cmap.len = max - min + 1;
+ cmap.red = &priv->red[min];
+ cmap.green = &priv->green[min];
+ cmap.blue = &priv->blue[min];
+ cmap.transp = 0;
+ ioctl (priv->fd, FBIOPUTCMAP, &cmap);
+}
+
+
+
+KdCardFuncs epsonFuncs = {
+ epsonCardInit, /* cardinit */
+ epsonScreenInit, /* scrinit */
+ epsonInitScreen, /* initScreen */
+ epsonFinishInitScreen,
+ epsonCreateResources,
+ epsonPreserve, /* preserve */
+ epsonEnable, /* enable */
+ epsonDPMS, /* dpms */
+ epsonDisable, /* disable */
+ epsonRestore, /* restore */
+ epsonScreenFini, /* scrfini */
+ epsonCardFini, /* cardfini */
+
+ 0, /* initCursor */
+ 0, /* enableCursor */
+ 0, /* disableCursor */
+ 0, /* finiCursor */
+ 0, /* recolorCursor */
+
+ /*
+ * History:
+ * 28-Jan-04 C.Stylianou NBL: Added the following for h/w accel.
+ *
+ */
+
+ epsonDrawInit, /* initAccel */
+ epsonDrawEnable, /* enableAccel */
+ epsonDrawDisable, /* disableAccel */
+ epsonDrawFini, /* finiAccel */
+
+ epsonGetColors, /* getColors */
+ epsonPutColors, /* putColors */
+};
diff --git a/xorg-server/hw/kdrive/epson/epson13806.h b/xorg-server/hw/kdrive/epson/epson13806.h
new file mode 100644
index 000000000..b28d7c085
--- /dev/null
+++ b/xorg-server/hw/kdrive/epson/epson13806.h
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Costas Sylianou not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Costas Stylianou makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL COSTAS STYLIANOU BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/*
+ * epson13806draw.h - Implementation of hard ware accelerated functions for epson S1D13806
+ * Graphic controller.
+ *
+ * History:
+ * 28-Jan-04 C.Stylianou PRJ NBL: Created from fbdev.h
+ *
+ */
+
+#ifndef _EPSON13806_H_
+#define _EPSON13806_H_
+
+#include <stdio.h>
+#include <linux/fb.h>
+#include <unistd.h>
+#include <sys/mman.h>
+
+#include "kdrive.h"
+
+#ifdef RANDR
+#include "randrstr.h"
+#endif
+
+typedef struct _epsonPriv {
+ struct fb_var_screeninfo var;
+ struct fb_fix_screeninfo fix;
+ __u16 red[256];
+ __u16 green[256];
+ __u16 blue[256];
+ int fd;
+ char *fb;
+ char *fb_base;
+} EpsonPriv;
+
+typedef struct _epsonScrPriv {
+ Rotation randr;
+ Bool shadow;
+ KaaScreenInfoRec kaa;
+} EpsonScrPriv;
+
+extern KdCardFuncs epsonFuncs;
+
+Bool
+epsonInitialize (KdCardInfo *card, EpsonPriv *priv);
+
+Bool
+epsonCardInit (KdCardInfo *card);
+
+Bool
+epsonScreenInit (KdScreenInfo *screen);
+
+Bool
+epsonScreenInitialize (KdScreenInfo *screen, EpsonScrPriv *scrpriv);
+
+Bool
+epsonInitScreen (ScreenPtr pScreen);
+
+void
+epsonPreserve (KdCardInfo *card);
+
+Bool
+epsonEnable (ScreenPtr pScreen);
+
+Bool
+epsonDPMS (ScreenPtr pScreen, int mode);
+
+void
+epsonDisable (ScreenPtr pScreen);
+
+void
+epsonRestore (KdCardInfo *card);
+
+void
+epsonScreenFini (KdScreenInfo *screen);
+
+void
+epsonCardFini (KdCardInfo *card);
+
+void
+epsonGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
+
+void
+epsonPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
+
+/*
+ * History:
+ * 28-Jan-04 C.Stylianou NBL: Added the following prototypes for h/w accel.
+ *
+ */
+Bool
+epsonDrawInit (ScreenPtr pScreen);
+
+void
+epsonDrawEnable (ScreenPtr pScreen);
+
+void
+epsonDrawDisable (ScreenPtr pScreen);
+
+void
+epsonDrawFini (ScreenPtr pScreen);
+
+/*
+ * History:
+ * 28-Jan-04 C.Stylianou NBL: Maps to Epson registers
+ *
+ */
+void
+initEpson13806(void);
+
+
+#endif /* __EPSON13806_H_ */
diff --git a/xorg-server/hw/kdrive/epson/epson13806draw.c b/xorg-server/hw/kdrive/epson/epson13806draw.c
new file mode 100644
index 000000000..3222353a3
--- /dev/null
+++ b/xorg-server/hw/kdrive/epson/epson13806draw.c
@@ -0,0 +1,649 @@
+/*
+ * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Costas Sylianou not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Costas Stylianou makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL COSTAS STYLIANOU BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/*
+ * epson13806draw.c - Implementation of hardware accelerated functions for epson S1D13806
+ * Graphic controller.
+ *
+ * History:
+ * 28-Jan-04 C.Stylianou PRJ NBL: Created from chipsdraw.c
+ *
+ */
+
+#include "epson13806.h"
+#include "epson13806draw.h"
+#include "epson13806reg.h"
+
+#include "kaa.h"
+
+#include "gcstruct.h"
+#include "scrnintstr.h"
+#include "pixmapstr.h"
+#include "regionstr.h"
+#include "mistruct.h"
+#include "dixfontstr.h"
+#include "fb.h"
+#include "migc.h"
+#include "miline.h"
+
+
+// Functionality of BitBLT ROP register for Epson S1D13806 Graphics controller
+CARD8 epson13806Rop[16] = {
+ /* GXclear */ 0x00, /* 0 */
+ /* GXand */ 0x08, /* src AND dst */
+ /* GXandReverse */ 0x04, /* src AND NOT dst */
+ /* GXcopy */ 0x0C, /* src */
+ /* GXandInverted*/ 0x02, /* NOT src AND dst */
+ /* GXnoop */ 0x0A, /* dst */
+ /* GXxor */ 0x06, /* src XOR dst */
+ /* GXor */ 0x0E, /* src OR dst */
+ /* GXnor */ 0x01, /* NOT src AND NOT dst */
+ /* GXequiv */ 0x09, /* NOT src XOR dst */
+ /* GXinvert */ 0x05, /* NOT dst */
+ /* GXorReverse */ 0x0D, /* src OR NOT dst */
+ /* GXcopyInverted*/ 0x03, /* NOT src */
+ /* GXorInverted */ 0x0B, /* NOT src OR dst */
+ /* GXnand */ 0x07, /* NOT src OR NOT dst */
+ /* GXset */ 0x0F, /* 1 */
+};
+
+
+
+#undef __DEBUG_EPSON__
+#undef __DEBUG_EPSON_FBSET__
+#undef __DEBUG_EPSON_SOLID__
+#undef __DEBUG_EPSON_COPY__
+
+
+#ifdef __DEBUG_EPSON__
+ #define EPSON_DEBUG(a) a
+#else
+ #define EPSON_DEBUG(a)
+#endif
+
+#ifdef __DEBUG_EPSON_FBSET__
+ #define EPSON_DEBUG_FBSET(a) a
+#else
+ #define EPSON_DEBUG_FBSET(a)
+#endif
+
+#ifdef __DEBUG_EPSON_SOLID__
+ #define EPSON_DEBUG_SOLID(a) a
+#else
+ #define EPSON_DEBUG_SOLID(a)
+#endif
+
+#ifdef __DEBUG_EPSON_COPY__
+ #define EPSON_DEBUG_COPY(a) a
+#else
+ #define EPSON_DEBUG_COPY(a)
+#endif
+
+
+static unsigned int byteStride; // Distance between lines in the frame buffer (in bytes)
+static unsigned int bytesPerPixel;
+static unsigned int pixelStride;
+
+static unsigned char *regbase;
+
+/*
+ * epsonSet
+ *
+ * Description: Sets Epson variables
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static void
+epsonSet (ScreenPtr pScreen)
+{
+ EPSON_DEBUG_FBSET (fprintf(stderr,"+epsonSet\n"));
+
+ KdScreenPriv(pScreen);
+
+ byteStride = pScreenPriv->screen->fb[0].byteStride;
+ bytesPerPixel = pScreenPriv->screen->fb[0].bitsPerPixel >> 3;
+ pixelStride = pScreenPriv->screen->fb[0].pixelStride;
+
+ EPSON_DEBUG_FBSET (fprintf(stderr,"byteStride: [%x]\n", pScreenPriv->screen->fb[0].byteStride));
+ EPSON_DEBUG_FBSET (fprintf(stderr,"bytesPerPixel: [%x]\n", pScreenPriv->screen->fb[0].bitsPerPixel >> 3));
+ EPSON_DEBUG_FBSET (fprintf(stderr,"pixelStride: [%x]\n", pScreenPriv->screen->fb[0].pixelStride));
+
+ EPSON_DEBUG_FBSET (fprintf(stderr,"-epsonSet\n"));
+}
+
+
+/*
+ * epsonBg
+ *
+ * Description: Sets background colour
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static void
+epsonBg (Pixel bg)
+{
+ EPSON13806_REG16(EPSON13806_BLTBGCOLOR) = bg;
+}
+
+
+/*
+ * epsonFg
+ *
+ * Description: Sets foreground colour
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static void
+epsonFg (Pixel fg)
+{
+ EPSON13806_REG16(EPSON13806_BLTFGCOLOR) = fg;
+}
+
+
+/*
+ * epsonWaitForHwBltDone
+ *
+ * Description: Wait for previous blt to be done before programming any blt registers
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static void
+epsonWaitForHwBltDone (void)
+{
+ while (EPSON13806_REG (EPSON13806_BLTCTRL0) & EPSON13806_BLTCTRL0_ACTIVE) {}
+}
+
+
+/*
+ * epsonDrawSync
+ *
+ * Description: Sync hardware acceleration
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static void
+epsonWaitMarker (ScreenPtr pScreen, int marker)
+{
+ EPSON_DEBUG (fprintf(stderr,"+epsonDrawSync\n"));
+
+ epsonWaitForHwBltDone ();
+
+ EPSON_DEBUG (fprintf(stderr,"-epsonDrawSync\n"));
+}
+
+
+/*
+ * epsonPrepareSolid
+ *
+ * Description: Prepare Solid Fill i.e, can it be accelerated
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static Bool
+epsonPrepareSolid (PixmapPtr pPixmap,
+ int alu,
+ Pixel pm,
+ Pixel fg)
+{
+ EPSON_DEBUG_SOLID (fprintf(stderr,"+epsonPrepareSolid\n"));
+
+ FbBits depthMask;
+
+ depthMask = FbFullMask(pPixmap->drawable.depth);
+ if ((pm & depthMask) != depthMask)
+ return FALSE;
+
+ epsonSet (pPixmap->drawable.pScreen);
+ fg &= 0xffff;
+ epsonFg (fg);
+ epsonBg (fg);
+
+ epsonWaitForHwBltDone ();
+
+ EPSON_DEBUG_SOLID (fprintf(stderr,"Solid.alu [0x%x], [%d]\n", alu ,epson13806Rop[alu]));
+ EPSON13806_REG(EPSON13806_BLTROP) = epson13806Rop[alu];
+
+ if (epson13806Rop[alu] == GXnoop)
+ {
+ EPSON13806_REG(EPSON13806_BLTOPERATION) = EPSON13806_BLTOPERATION_PATFILLROP;
+ }
+ else
+ {
+ EPSON13806_REG(EPSON13806_BLTOPERATION) = EPSON13806_BLTOPERATION_SOLIDFILL;
+ }
+
+
+ EPSON_DEBUG_SOLID (fprintf(stderr,"-epsonPrepareSolid\n"));
+ return TRUE;
+
+}
+
+
+/*
+ * epsonSolid
+ *
+ * Description: Executes Solid Fill
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static void
+epsonSolid (int x1, int y1, int x2, int y2)
+{
+
+ EPSON_DEBUG_SOLID (fprintf(stderr,"+epsonSolid\n"));
+
+ CARD32 dst_addr;
+ int width, height;
+
+ EPSON_DEBUG_SOLID (fprintf(stderr,"Solid X1 [%d] Y1 [%d] X2 [%d] Y2 [%d]\n", x1, y1, x2, y2));
+
+ dst_addr = y1 * byteStride + x1 * bytesPerPixel;
+ width = ((x2 - x1)-1);
+ height = ((y2 - y1)-1);
+
+ // program dst address
+ EPSON13806_REG16(EPSON13806_BLTDSTSTART01) = dst_addr;
+ EPSON13806_REG(EPSON13806_BLTDSTSTART2) = dst_addr >> 16;
+
+ // program width and height of blit
+ EPSON13806_REG16(EPSON13806_BLTWIDTH) = width;
+ EPSON13806_REG16(EPSON13806_BLTHEIGHT) = height;
+
+ EPSON13806_REG(EPSON13806_BLTCTRL0) = EPSON13806_BLTCTRL0_ACTIVE;
+
+ // Wait for operation to complete
+ while (EPSON13806_REG(EPSON13806_BLTCTRL0) & EPSON13806_BLTCTRL0_ACTIVE) {}
+
+ EPSON_DEBUG_SOLID (fprintf(stderr,"-epsonSolid\n"));
+}
+
+
+/*
+ * epsonDoneSolid
+ *
+ * Description: Done Solid
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static void
+epsonDoneSolid (void)
+{
+ EPSON_DEBUG_SOLID (fprintf(stderr,"+epsonDoneSolid\n"));
+
+ // Read from BitBLT data offset 0 to shut it down
+ //(void)EPSON13806_REG(EPSON13806_BITBLTDATA);
+
+ EPSON_DEBUG_SOLID (fprintf(stderr,"-epsonDoneSolid\n"));
+
+}
+
+
+/*
+ * epsonPrepareCopy
+ *
+ * Description: Prepares BitBLT, i.e, can it be accelerated
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static Bool
+epsonPrepareCopy (PixmapPtr pSrcPixmap,
+ PixmapPtr pDstPixmap,
+ int dx,
+ int dy,
+ int alu,
+ Pixel pm)
+{
+ EPSON_DEBUG_COPY (fprintf(stderr,"+epsonPrepareCopy dx [0x%x] dy [0x%x]\n", dx, dy));
+
+ FbBits depthMask;
+
+ depthMask = FbFullMask(pDstPixmap->drawable.depth);
+
+ if ((pm & depthMask) != depthMask)
+ return FALSE;
+
+ epsonSet (pDstPixmap->drawable.pScreen);
+ epsonWaitForHwBltDone ();
+ EPSON13806_REG(EPSON13806_BLTROP) = epson13806Rop[alu];
+
+ EPSON_DEBUG_COPY (fprintf(stderr,"-epsonPrepareCopy\n"));
+
+ return TRUE;
+}
+
+
+/*
+ * epsonCopy
+ *
+ * Description: Executes BitBLT
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static void
+epsonCopy (int srcX,
+ int srcY,
+ int dstX,
+ int dstY,
+ int width,
+ int height)
+{
+ EPSON_DEBUG_COPY (fprintf(stderr,"+epsonCopy\n"));
+ int src_addr, dst_addr;
+ int neg_dir = FALSE;
+
+ if (!width || !height)
+ return;
+
+ src_addr = srcX * bytesPerPixel + srcY * byteStride;
+ dst_addr = dstX * bytesPerPixel + dstY * byteStride;
+
+ /*
+ * See if regions overlap and dest region is beyond source region.
+ * If so, we need to do a move BLT in negative direction. Only applies
+ * if the BLT is not transparent.
+ */
+
+ if ((srcX + width > dstX) && (srcX < dstX + width) &&
+ (srcY + height > dstY) && (srcY < dstY + height) &&
+ (dst_addr > src_addr))
+ {
+ neg_dir = TRUE;
+
+ // negative direction : get the coords of lower right corner
+ src_addr += byteStride * (height-1) + bytesPerPixel * (width-1);
+ dst_addr += byteStride * (height-1) + bytesPerPixel * (width-1);
+ }
+
+ // program BLIT memory offset
+ EPSON13806_REG16(EPSON13806_BLTSTRIDE) = byteStride/2;
+
+ // program src and dst addresses
+ EPSON13806_REG16(EPSON13806_BLTSRCSTART01) = src_addr;
+ EPSON13806_REG(EPSON13806_BLTSRCSTART2) = src_addr >> 16;
+ EPSON13806_REG16(EPSON13806_BLTDSTSTART01) = dst_addr;
+ EPSON13806_REG(EPSON13806_BLTDSTSTART2) = dst_addr >> 16;
+
+ // program width and height of blit
+ EPSON13806_REG16(EPSON13806_BLTWIDTH) = width-1;
+ EPSON13806_REG16(EPSON13806_BLTHEIGHT) = height-1;
+
+ // select pos/neg move BLIT
+ EPSON13806_REG(EPSON13806_BLTOPERATION) = neg_dir ?
+ EPSON13806_BLTOPERATION_MOVENEGROP : EPSON13806_BLTOPERATION_MOVEPOSROP;
+
+ EPSON13806_REG(EPSON13806_BLTCTRL0) = EPSON13806_BLTCTRL0_ACTIVE;
+
+ // Wait for operation to complete
+ while (EPSON13806_REG(EPSON13806_BLTCTRL0) & EPSON13806_BLTCTRL0_ACTIVE) {}
+
+ EPSON_DEBUG_COPY (fprintf(stderr,"-epsonCopy\n"));
+}
+
+
+/*
+ * epsonDoneCopy
+ *
+ * Description: Done Copy
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+static void
+epsonDoneCopy (void)
+{
+ EPSON_DEBUG_COPY (fprintf(stderr,"+epsonDoneCopy\n"));
+
+ // Read from BitBLT data offset 0 to shut it down
+ //(void)EPSON13806_REG(EPSON13806_BITBLTDATA);
+
+ EPSON_DEBUG_COPY (fprintf(stderr,"-epsonDoneCopy\n"));
+}
+
+
+/*
+ * epsonDrawInit
+ *
+ * Description: Configure the Epson S1D13806 for a 800x600 TFT colour display
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+Bool
+epsonDrawInit (ScreenPtr pScreen)
+{
+ KdScreenPriv(pScreen);
+ KdScreenInfo *screen = pScreenPriv->screen;
+ EpsonScrPriv *epsons = screen->driver;
+
+ EPSON_DEBUG (fprintf(stderr,"+epsonDrawInit\n"));
+
+ epsonSet(pScreen);
+
+#if 0
+ EPSON13806_REG(EPSON13806_MISC) = 0x00;
+ EPSON13806_REG(EPSON13806_DISPMODE) = 0x00;
+ EPSON13806_REG16(EPSON13806_GPIOCFG) = 0xffff;
+ EPSON13806_REG16(EPSON13806_GPIOCTRL) = 0x0001;
+
+ EPSON13806_REG(EPSON13806_MEMCLKCFG) = 0x01;
+ EPSON13806_REG(EPSON13806_LCDPCLKCFG) = 0x00;
+ EPSON13806_REG(EPSON13806_CRTPCLKCFG) = 0x02;
+ EPSON13806_REG(EPSON13806_MPCLKCFG) = 0x02;
+ EPSON13806_REG(EPSON13806_CPUMEMWAITSEL) = 0x01;
+ EPSON13806_REG(EPSON13806_MEMCFG) = 0x80;
+ EPSON13806_REG(EPSON13806_DRAMREFRESH) = 0x03;
+ EPSON13806_REG16(EPSON13806_DRAMTIMINGCTRL) = 0x0100;
+
+ // 5ms delay for internal LCD SDRAM to initialize
+ usleep(5000);
+
+ EPSON13806_REG(EPSON13806_PANELTYPE) = 0x25;
+ EPSON13806_REG(EPSON13806_MODRATE) = 0x00;
+ EPSON13806_REG(EPSON13806_LCDHDP) = 0x63;
+ EPSON13806_REG(EPSON13806_LCDHNDP) = 0x1f;
+ EPSON13806_REG(EPSON13806_TFTFPLINESTART) = 0x01;
+ EPSON13806_REG(EPSON13806_TFTFPLINEPULSE) = 0x0b;
+ EPSON13806_REG16(EPSON13806_LCDVDP0) = 0x0257;
+ EPSON13806_REG(EPSON13806_LCDVNDP) = 0x1b;
+ EPSON13806_REG(EPSON13806_TFTFPFRAMESTART) = 0x0a;
+ EPSON13806_REG(EPSON13806_TFTFPFRAMEPULSE) = 0x01;
+ EPSON13806_REG(EPSON13806_LCDDISPMODE) = 0x85;
+ EPSON13806_REG(EPSON13806_LCDMISC) = 0x00;
+ EPSON13806_REG16(EPSON13806_LCDSTART01) = 0x0000;
+ EPSON13806_REG(EPSON13806_LCDSTART2) = 0x00;
+ EPSON13806_REG16(EPSON13806_LCDSTRIDE) = byteStride>>1;
+ EPSON13806_REG(EPSON13806_LCDPIXELPAN) = 0x00;
+ EPSON13806_REG(EPSON13806_LCDFIFOHIGH) = 0x00;
+ EPSON13806_REG(EPSON13806_LCDFIFOLOW) = 0x00;
+#endif
+
+
+ EPSON13806_REG(EPSON13806_BLTCTRL0) = 0x00;
+ EPSON13806_REG(EPSON13806_BLTCTRL1) = 0x01; // We're using 16 bpp
+ EPSON13806_REG16(EPSON13806_BLTSTRIDE) = byteStride>>1; // program BLIT memory offset
+
+#if 0
+ EPSON13806_REG(EPSON13806_LUTMODE) = 0x00;
+ EPSON13806_REG(EPSON13806_LUTADDR) = 0x00;
+ EPSON13806_REG(EPSON13806_PWRSAVECFG) = 0x10;
+ EPSON13806_REG(EPSON13806_PWRSAVESTATUS) = 0x00;
+ EPSON13806_REG(EPSON13806_CPUMEMWATCHDOG) = 0x00;
+ EPSON13806_REG(EPSON13806_DISPMODE) = 0x01;
+
+ // Enable backlight voltage
+ EPSON13806_REG16(EPSON13806_GPIOCTRL) |= 1<<1;
+ // 10ms delay after turning on LCD.
+ usleep(10000);
+#endif
+
+ // Instruct the BitBLT unit to fill the screen with black, i.e clear fb.
+ static int addr = 0x00000000;
+ EPSON13806_REG16(EPSON13806_BLTDSTSTART01) = addr;
+ EPSON13806_REG(EPSON13806_BLTDSTSTART2) = addr >> 16;
+ EPSON13806_REG16(EPSON13806_BLTFGCOLOR) = 0x0000;
+ EPSON13806_REG(EPSON13806_BLTOPERATION) = EPSON13806_BLTOPERATION_SOLIDFILL; // solid fill blt
+ EPSON13806_REG16(EPSON13806_BLTWIDTH) = (0x0320-1);
+ EPSON13806_REG16(EPSON13806_BLTHEIGHT) = (0x0258-1);
+ EPSON13806_REG(EPSON13806_BLTCTRL0) = EPSON13806_BLTCTRL0_ACTIVE;
+
+#if 0
+ // Enable LCD data
+ EPSON13806_REG(EPSON13806_LCDDISPMODE) &= ~(1<<7);
+
+ // Turn on backlight full
+ EPSON13806_REG16(EPSON13806_GPIOCTRL) |= 0x00fc;
+#endif
+
+ memset(&epsons->kaa, 0, sizeof(KaaScreenInfoRec));
+ epsons->kaa.waitMarker = epsonWaitMarker;
+ epsons->kaa.PrepareSolid = epsonPrepareSolid;
+ epsons->kaa.Solid = epsonSolid;
+ epsons->kaa.DoneSolid = epsonDoneSolid;
+ epsons->kaa.PrepareCopy = epsonPrepareCopy;
+ epsons->kaa.Copy = epsonCopy;
+ epsons->kaa.DoneCopy = epsonDoneCopy;
+ epsons->kaa.flags = KAA_OFFSCREEN_PIXMAPS;
+
+ if (!kaaDrawInit (pScreen, &epsons->kaa))
+ return FALSE;
+
+ EPSON_DEBUG (fprintf(stderr,"-epsonDrawInit\n"));
+ return TRUE;
+}
+
+
+/*
+ * epsonDrawEnable
+ *
+ * Description: Enables hardware acceleration
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+void
+epsonDrawEnable (ScreenPtr pScreen)
+{
+ EPSON_DEBUG (fprintf(stderr,"+epsonDrawEnable\n"));
+ epsonWaitForHwBltDone ();
+ kaaMarkSync (pScreen);
+ EPSON_DEBUG (fprintf(stderr,"-epsonDrawEnable\n"));
+}
+
+
+/*
+ * epsonDrawDisable
+ *
+ * Description: Disables hardware acceleration
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+void
+epsonDrawDisable (ScreenPtr pScreen)
+{
+ EPSON_DEBUG (fprintf(stderr,"+epsonDrawDisable\n"));
+}
+
+
+/*
+ * epsonDrawFini
+ *
+ * Description: Finish hardware acceleration
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+void
+epsonDrawFini (ScreenPtr pScreen)
+{
+ EPSON_DEBUG (fprintf(stderr,"+epsonDrawFini\n"));
+}
+
+
+/*
+ * initEpson13806
+ *
+ * Description: Maps Epson S1D13806 registers
+ *
+ * History:
+ * 11-Feb-04 C.Stylianou NBL: Created.
+ *
+ */
+
+void
+initEpson13806(void)
+{
+ EPSON_DEBUG (fprintf(stderr,"+initEpson\n"));
+
+ // Map Epson S1D13806 registers
+ regbase = KdMapDevice (EPSON13806_PHYSICAL_REG_ADDR, EPSON13806_GPIO_REGSIZE);
+ if (!regbase)
+ perror("ERROR: regbase\n"); // Sets up register mappings in header files.
+
+#if 0
+ CARD8 rev_code;
+ rev_code = EPSON13806_REG (EPSON13806_REVCODE);
+ if ((rev_code >> 2) != 0x07)
+ perror("ERROR: EPSON13806 Display Controller NOT FOUND!\n");
+#endif
+
+ EPSON_DEBUG (fprintf(stderr,"-initEpson\n"));
+}
diff --git a/xorg-server/hw/kdrive/epson/epson13806draw.h b/xorg-server/hw/kdrive/epson/epson13806draw.h
new file mode 100644
index 000000000..b5f1bf5c2
--- /dev/null
+++ b/xorg-server/hw/kdrive/epson/epson13806draw.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Costas Sylianou not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Costas Stylianou makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL COSTAS STYLIANOU BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/*
+ * epson13806draw.h - Implementation of hard ware accelerated functions for epson S1D13806
+ * Graphic controller.
+ *
+ * History:
+ * 28-Jan-04 C.Stylianou PRJ NBL: Created from chipsdraw.h
+ *
+ */
+
+#ifndef _EPSON13806DRAW_H_
+#define _EPSON13806DRAW_H_
+
+
+/*
+ * offset from ioport beginning
+ */
+
+
+#define SetupEpson(s) KdScreenPriv(s); \
+ epsonCardInfo(pScreenPriv); \
+ EpsonPtr epson = epsonc->epson
+
+
+typedef volatile CARD8 VOL8;
+typedef volatile CARD16 VOL16;
+typedef volatile CARD32 VOL32;
+
+typedef struct _epsonSave {
+ int dummy;
+} EpsonSave;
+
+typedef struct _epsonCardInfo {
+ EpsonPriv epson;
+ CARD32 *window;
+ Bool mmio;
+ EpsonSave save;
+} epsonCardInfo;
+
+#define getEpsonCardInfo(kd) ((epsonCardInfo *) ((kd)->card->driver))
+#define epsonCardInfo(kd) epsonCardInfo *epsonc = getEpsonCardInfo(kd)
+
+typedef struct _epsonCursor {
+ int width, height;
+ int xhot, yhot;
+ Bool has_cursor;
+ CursorPtr pCursor;
+ Pixel source, mask;
+} EpsonCursor;
+
+#define epson_CURSOR_WIDTH 64
+#define epson_CURSOR_HEIGHT 64
+
+typedef struct _epsonScreenInfo {
+ EpsonScrPriv epson;
+ CARD8 *cursor_base;
+ CARD8 *screen;
+ CARD8 *off_screen;
+ int off_screen_size;
+ EpsonCursor cursor;
+ void *regbase_virt;
+} EpsonScreenInfo;
+
+#define getEpsonScreenInfo(kd) ((EpsonScreenInfo *) ((kd)->screen->driver))
+#define epsonScreenInfo(kd) EpsonScreenInfo *epsons = getEpsonScreenInfo(kd)
+
+Bool
+epsonDrawInit (ScreenPtr pScreen);
+
+void
+epsonDrawEnable (ScreenPtr pScreen);
+
+void
+epsonDrawSync (ScreenPtr pScreen);
+
+void
+epsonDrawDisable (ScreenPtr pScreen);
+
+void
+epsonDrawFini (ScreenPtr pScreen);
+
+Bool
+epsonCursorInit (ScreenPtr pScreen);
+
+void
+epsonCursorEnable (ScreenPtr pScreen);
+
+void
+epsonCursorDisable (ScreenPtr pScreen);
+
+void
+epsonCursorFini (ScreenPtr pScreen);
+
+void
+epsonRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef);
+
+extern KdCardFuncs epsonFuncs;
+
+#endif
diff --git a/xorg-server/hw/kdrive/epson/epson13806reg.h b/xorg-server/hw/kdrive/epson/epson13806reg.h
new file mode 100644
index 000000000..ee745a08f
--- /dev/null
+++ b/xorg-server/hw/kdrive/epson/epson13806reg.h
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Costas Sylianou not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Costas Stylianou makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL COSTAS STYLIANOU BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/*
+ * epson13806reg.h Epson S1D13806 LCD controller header file.
+ *
+ * History:
+ * 15-Feb-04 C.Stylianou PRJ NBL: Created.
+ *
+ */
+
+
+#ifndef EPSON13806REG_H
+#define EPSON13806REG_H
+
+
+#define TT_UNUSED(x) ((void) (x))
+
+
+#define EPSON13806_PHYSICAL_REG_ADDR 0x14000000
+#define EPSON13806_GPIO_REGSIZE 0x001f0000
+
+#define EPSON13806_PHYSICAL_VMEM_ADDR 0x14200000
+#define EPSON13806_VMEM_SIZE 0x140000
+
+#define PLATFORM_EPSON13806_BASE (regbase)
+#define EPSON13806_REG_BASE (PLATFORM_EPSON13806_BASE + 0x000000) // Register base address
+#define EPSON13806_SDRAM_BASE (PLATFORM_EPSON13806_BASE + 0x200000) // SDRAM base address
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Register Offsets
+//////////////////////////////////////////////////////////////////////////////////////////
+#define EPSON13806_REVCODE (EPSON13806_REG_BASE + 0x0000) // Revision Code Register
+#define EPSON13806_MISC (EPSON13806_REG_BASE + 0x0001) // Miscellaneous Register
+#define EPSON13806_GPIOCFG (EPSON13806_REG_BASE + 0x0004) // General IO Pins Configuration Register (16 bits)
+#define EPSON13806_GPIOCFG0 (EPSON13806_REG_BASE + 0x0004) // General IO Pins Configuration Register 0
+#define EPSON13806_GPIOCFG1 (EPSON13806_REG_BASE + 0x0005) // General IO Pins Configuration Register 1
+#define EPSON13806_GPIOCTRL (EPSON13806_REG_BASE + 0x0008) // General IO Pins Control Register (16 bits)
+#define EPSON13806_GPIOCTRL0 (EPSON13806_REG_BASE + 0x0008) // General IO Pins Control Register 0
+#define EPSON13806_GPIOCTRL1 (EPSON13806_REG_BASE + 0x0009) // General IO Pins Control Register 1
+#define EPSON13806_MDCFGSTATUS (EPSON13806_REG_BASE + 0x000C) // Configuration Status Register
+#define EPSON13806_MEMCLKCFG (EPSON13806_REG_BASE + 0x0010) // Memory Clock Configuration Register
+#define EPSON13806_LCDPCLKCFG (EPSON13806_REG_BASE + 0x0014) // LCD Pixel Clock Configuration Register
+#define EPSON13806_CRTPCLKCFG (EPSON13806_REG_BASE + 0x0018) // CRT/TV Clock Configuration Register
+#define EPSON13806_MPCLKCFG (EPSON13806_REG_BASE + 0x001C) // MediaPlug Clock Configuration Register
+#define EPSON13806_CPUMEMWAITSEL (EPSON13806_REG_BASE + 0x001E) // CPU To Memory Wait State Select Register
+#define EPSON13806_MEMCFG (EPSON13806_REG_BASE + 0x0020) // Memory Configuration Register
+#define EPSON13806_DRAMREFRESH (EPSON13806_REG_BASE + 0x0021) // DRAM Refresh Rate Register
+#define EPSON13806_DRAMTIMINGCTRL (EPSON13806_REG_BASE + 0x002A) // DRAM Timings Control Register (16 bits)
+#define EPSON13806_DRAMTIMINGCTRL0 (EPSON13806_REG_BASE + 0x002A) // DRAM Timings Control Register 0
+#define EPSON13806_DRAMTIMINGCTRL1 (EPSON13806_REG_BASE + 0x002B) // DRAM Timings Control Register 1
+#define EPSON13806_PANELTYPE (EPSON13806_REG_BASE + 0x0030) // Panel Type Register
+#define EPSON13806_MODRATE (EPSON13806_REG_BASE + 0x0031) // MOD Rate Register
+#define EPSON13806_LCDHDP (EPSON13806_REG_BASE + 0x0032) // LCD Horizontal Display Width Register
+#define EPSON13806_LCDHNDP (EPSON13806_REG_BASE + 0x0034) // LCD Horizontal Non-Display Period Register
+#define EPSON13806_TFTFPLINESTART (EPSON13806_REG_BASE + 0x0035) // TFT FPLINE Start Position Register
+#define EPSON13806_TFTFPLINEPULSE (EPSON13806_REG_BASE + 0x0036) // TFT FPLINE Pulse Width Register
+#define EPSON13806_LCDVDP (EPSON13806_REG_BASE + 0x0038) // LCD Vertical Display Height Register (16 bits)
+#define EPSON13806_LCDVDP0 (EPSON13806_REG_BASE + 0x0038) // LCD Vertical Display Height Register 0
+#define EPSON13806_LCDVDP1 (EPSON13806_REG_BASE + 0x0039) // LCD Vertical Display Height Register 1
+#define EPSON13806_LCDVNDP (EPSON13806_REG_BASE + 0x003A) // LCD Vertical Non-Display Period Register
+#define EPSON13806_TFTFPFRAMESTART (EPSON13806_REG_BASE + 0x003B) // TFT FPFRAME Start Position Register
+#define EPSON13806_TFTFPFRAMEPULSE (EPSON13806_REG_BASE + 0x003C) // TFT FPFRAME Pulse Width Register
+#define EPSON13806_LCDLINECOUNT (EPSON13806_REG_BASE + 0x003E) // LCD Line Count Register (16 bits)
+#define EPSON13806_LCDLINECOUNT0 (EPSON13806_REG_BASE + 0x003E) // LCD Line Count Register 0
+#define EPSON13806_LCDLINECOUNT1 (EPSON13806_REG_BASE + 0x003F) // LCD Line Count Register 1
+#define EPSON13806_LCDDISPMODE (EPSON13806_REG_BASE + 0x0040) // LCD Display Mode Register
+#define EPSON13806_LCDMISC (EPSON13806_REG_BASE + 0x0041) // LCD Miscellaneous Register
+#define EPSON13806_LCDSTART01 (EPSON13806_REG_BASE + 0x0042) // LCD Display Start Address Register 0 and 1 (16 bits)
+#define EPSON13806_LCDSTART0 (EPSON13806_REG_BASE + 0x0042) // LCD Display Start Address Register 0
+#define EPSON13806_LCDSTART1 (EPSON13806_REG_BASE + 0x0043) // LCD Display Start Address Register 1
+#define EPSON13806_LCDSTART2 (EPSON13806_REG_BASE + 0x0044) // LCD Display Start Address Register 2
+#define EPSON13806_LCDSTRIDE (EPSON13806_REG_BASE + 0x0046) // LCD Memory Address Offset Register (16 bits)
+#define EPSON13806_LCDSTRIDE0 (EPSON13806_REG_BASE + 0x0046) // LCD Memory Address Offset Register 0
+#define EPSON13806_LCDSTRIDE1 (EPSON13806_REG_BASE + 0x0047) // LCD Memory Address Offset Register 1
+#define EPSON13806_LCDPIXELPAN (EPSON13806_REG_BASE + 0x0048) // LCD Pixel Panning Register
+#define EPSON13806_LCDFIFOHIGH (EPSON13806_REG_BASE + 0x004A) // LCD Display FIFO High Threshold Control Register
+#define EPSON13806_LCDFIFOLOW (EPSON13806_REG_BASE + 0x004B) // LCD Display FIFO Low Threshold Control Register
+
+#define EPSON13806_LCDINKCURSCTRL (EPSON13806_REG_BASE + 0x0070) // LCD INK/Cursor Control Register
+#define EPSON13806_LCDINKCURSSTART (EPSON13806_REG_BASE + 0x0071) // LCD INK/Cursor Start Address Register
+#define EPSON13806_LCDCURSORXPOS (EPSON13806_REG_BASE + 0x0072) // LCD Cursor X Position Register (16 bits)
+#define EPSON13806_LCDCURSORXPOS0 (EPSON13806_REG_BASE + 0x0072) // LCD Cursor X Position Register 0
+#define EPSON13806_LCDCURSORXPOS1 (EPSON13806_REG_BASE + 0x0073) // LCD Cursor X Position Register 1
+#define EPSON13806_LCDCURSORYPOS (EPSON13806_REG_BASE + 0x0074) // LCD Cursor Y Position Register (16 bits)
+#define EPSON13806_LCDCURSORYPOS0 (EPSON13806_REG_BASE + 0x0074) // LCD Cursor Y Position Register 0
+#define EPSON13806_LCDCURSORYPOS1 (EPSON13806_REG_BASE + 0x0075) // LCD Cursor Y Position Register 1
+#define EPSON13806_LCDINKCURSBLUE0 (EPSON13806_REG_BASE + 0x0076) // LCD INK/Cursor Blue Color 0 Register
+#define EPSON13806_LCDINKCURSGREEN0 (EPSON13806_REG_BASE + 0x0077) // LCD INK/Cursor Green Color 0 Register
+#define EPSON13806_LCDINKCURSRED0 (EPSON13806_REG_BASE + 0x0078) // LCD INK/Cursor Red Color 0 Register
+#define EPSON13806_LCDINKCURSBLUE1 (EPSON13806_REG_BASE + 0x007A) // LCD INK/Cursor Blue Color 1 Register
+#define EPSON13806_LCDINKCURSGREEN1 (EPSON13806_REG_BASE + 0x007B) // LCD INK/Cursor Green Colour 1 Register
+#define EPSON13806_LCDINKCURSRED1 (EPSON13806_REG_BASE + 0x007C) // LCD INK/Cursor Red Color 1 Register
+#define EPSON13806_LCDINKCURSFIFO (EPSON13806_REG_BASE + 0x007E) // LCD INK/Cursor FIFO Threshold Register
+
+#define EPSON13806_BLTCTRL0 (EPSON13806_REG_BASE + 0x0100) // BitBlt Control Register 0
+#define EPSON13806_BLTCTRL1 (EPSON13806_REG_BASE + 0x0101) // BitBlt Control Register 1
+#define EPSON13806_BLTROP (EPSON13806_REG_BASE + 0x0102) // BitBlt ROP Code/Color Expansion Register
+#define EPSON13806_BLTOPERATION (EPSON13806_REG_BASE + 0x0103) // BitBlt Operation Register
+#define EPSON13806_BLTSRCSTART01 (EPSON13806_REG_BASE + 0x0104) // BitBlt Source Start Address Register 0 and 1 (16 bits)
+#define EPSON13806_BLTSRCSTART0 (EPSON13806_REG_BASE + 0x0104) // BitBlt Source Start Address Register 0
+#define EPSON13806_BLTSRCSTART1 (EPSON13806_REG_BASE + 0x0105) // BitBlt Source Start Address Register 1
+#define EPSON13806_BLTSRCSTART2 (EPSON13806_REG_BASE + 0x0106) // BitBlt Source Start Address Register 2
+#define EPSON13806_BLTDSTSTART01 (EPSON13806_REG_BASE + 0x0108) // BitBlt Destination Start Address Register 0 and 1 (16 bits)
+#define EPSON13806_BLTDSTSTART0 (EPSON13806_REG_BASE + 0x0108) // BitBlt Destination Start Address Register 0
+#define EPSON13806_BLTDSTSTART1 (EPSON13806_REG_BASE + 0x0109) // BitBlt Destination Start Address Register 1
+#define EPSON13806_BLTDSTSTART2 (EPSON13806_REG_BASE + 0x010A) // BitBlt Destination Start Address Register 2
+#define EPSON13806_BLTSTRIDE (EPSON13806_REG_BASE + 0x010C) // BitBlt Memory Address Offset Register (16 bits)
+#define EPSON13806_BLTSTRIDE0 (EPSON13806_REG_BASE + 0x010C) // BitBlt Memory Address Offset Register 0
+#define EPSON13806_BLTSTRIDE1 (EPSON13806_REG_BASE + 0x010D) // BitBlt Memory Address Offset Register 1
+#define EPSON13806_BLTWIDTH (EPSON13806_REG_BASE + 0x0110) // BitBlt Width Register (16 bits)
+#define EPSON13806_BLTWIDTH0 (EPSON13806_REG_BASE + 0x0110) // BitBlt Width Register 0
+#define EPSON13806_BLTWIDTH1 (EPSON13806_REG_BASE + 0x0111) // BitBlt Width Register 1
+#define EPSON13806_BLTHEIGHT (EPSON13806_REG_BASE + 0x0112) // BitBlt Height Register (16 bits)
+#define EPSON13806_BLTHEIGHT0 (EPSON13806_REG_BASE + 0x0112) // BitBlt Height Register 0
+#define EPSON13806_BLTHEIGHT1 (EPSON13806_REG_BASE + 0x0113) // BitBlt Height Register 1
+#define EPSON13806_BLTBGCOLOR (EPSON13806_REG_BASE + 0x0114) // BitBlt Background Color Register (16 bits)
+#define EPSON13806_BLTBGCOLOR0 (EPSON13806_REG_BASE + 0x0114) // BitBlt Background Color Register 0
+#define EPSON13806_BLTBGCOLOR1 (EPSON13806_REG_BASE + 0x0115) // BitBlt Background Color Register 1
+#define EPSON13806_BLTFGCOLOR (EPSON13806_REG_BASE + 0x0118) // BitBlt Foreground Color Register (16 bits)
+#define EPSON13806_BLTFGCOLOR0 (EPSON13806_REG_BASE + 0x0118) // BitBlt Foreground Color Register 0
+#define EPSON13806_BLTFGCOLOR1 (EPSON13806_REG_BASE + 0x0119) // BitBlt Foreground Color Register 0
+
+#define EPSON13806_LUTMODE (EPSON13806_REG_BASE + 0x01E0) // Look-Up Table Mode Register
+#define EPSON13806_LUTADDR (EPSON13806_REG_BASE + 0x01E2) // Look-Up Table Address Register
+#define EPSON13806_LUTDATA (EPSON13806_REG_BASE + 0x01E4) // Look-Up Table Data Register
+#define EPSON13806_PWRSAVECFG (EPSON13806_REG_BASE + 0x01F0) // Power Save Configuration Register
+#define EPSON13806_PWRSAVESTATUS (EPSON13806_REG_BASE + 0x01F1) // Power Save Status Register
+#define EPSON13806_CPUMEMWATCHDOG (EPSON13806_REG_BASE + 0x01F4) // CPU-to-Memory Access Watchdog Timer Register
+#define EPSON13806_DISPMODE (EPSON13806_REG_BASE + 0x01FC) // Display Mode Register
+
+#define EPSON13806_MEDIALCMD (EPSON13806_REG_BASE + 0x1000) // MediaPlug LCMD Register
+#define EPSON13806_MEDIARESERVEDLCMD (EPSON13806_REG_BASE + 0x1002) // MediaPlug Reserved LCMD Register
+#define EPSON13806_MEDIACMD (EPSON13806_REG_BASE + 0x1004) // MediaPlug CMD Register
+#define EPSON13806_MEDIARESERVEDCMD (EPSON13806_REG_BASE + 0x1006) // MediaPlug Reserved CMD Register
+#define EPSON13806_MEDIADATA (EPSON13806_REG_BASE + 0x1008) // MediaPlug Data Registers (base)
+
+#define EPSON13806_BITBLTDATA (EPSON13806_REG_BASE + 0x100000) // BitBLT Data Registers (base)
+
+// BLTCTRL0 register defines
+#define EPSON13806_BLTCTRL0_ACTIVE (1<<7) // Read: 1=busy, 0=idle / Write: 1=start, 0=no change
+
+// BLTOPERATION register defines
+#define EPSON13806_BLTOPERATION_WRITEROP (0x00) // Write BitBLT with ROP
+#define EPSON13806_BLTOPERATION_READ (0x01) // Read BitBLT
+#define EPSON13806_BLTOPERATION_MOVEPOSROP (0x02) // Move BitBLT in positive direction with ROP
+#define EPSON13806_BLTOPERATION_MOVENEGROP (0x03) // Move BitBLT in negative direction with ROP
+#define EPSON13806_BLTOPERATION_TRANSWRITE (0x04) // Transparent Write BitBLT
+#define EPSON13806_BLTOPERATION_TRANSMOVEPOS (0x05) // Transparent Move BitBLT in positive direction
+#define EPSON13806_BLTOPERATION_PATFILLROP (0x06) // Pattern fill with ROP
+#define EPSON13806_BLTOPERATION_PATFILLTRANS (0x07) // Pattern fill with transparency
+#define EPSON13806_BLTOPERATION_COLOREXP (0x08) // Color expansion
+#define EPSON13806_BLTOPERATION_COLOREXPTRANS (0x09) // Color expansion with transparency
+#define EPSON13806_BLTOPERATION_MOVECOLOREXP (0x0A) // Move BitBLT with color expansion
+#define EPSON13806_BLTOPERATION_MOVECOLOREXPTRANS (0x0B) // Move BitBLT with color expansion and transparency
+#define EPSON13806_BLTOPERATION_SOLIDFILL (0x0C) // Solid fill
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// Epson register access macros
+//////////////////////////////////////////////////////////////////////////////////////////
+#define EPSON13806_REG(address) *(VOL8 *)(address)
+#define EPSON13806_REG16(address) *(VOL16 *)(address)
+
+
+#endif // EPSON13806
diff --git a/xorg-server/hw/kdrive/epson/epson13806stub.c b/xorg-server/hw/kdrive/epson/epson13806stub.c
new file mode 100644
index 000000000..087a30fc7
--- /dev/null
+++ b/xorg-server/hw/kdrive/epson/epson13806stub.c
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Costas Sylianou not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Costas Stylianou makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL COSTAS STYLIANOU BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/*
+ * epson13806stub.c
+ *
+ * History:
+ * 28-Jan-04 C.Stylianou PRJ NBL: Created from fbdevinit.c
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <kdrive-config.h>
+#endif
+
+#include <epson13806.h>
+
+void
+InitCard (char *name)
+{
+ KdCardAttr attr;
+
+ fprintf(stderr, "Epson 13806 Tiny X Driver ver 1.01\n");
+
+ KdCardInfoAdd (&epsonFuncs, &attr, 0);
+}
+
+void
+InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
+{
+ KdInitOutput (pScreenInfo, argc, argv);
+}
+
+void
+InitInput (int argc, char **argv)
+{
+ KdOsAddInputDrivers ();
+ KdInitInput ();
+}
+
+int
+ddxProcessArgument (int argc, char **argv, int i)
+{
+ return KdProcessArgument (argc, argv, i);
+}
+
+void
+ddxUseMsg (void)
+{
+ KdUseMsg();
+}