summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Juszkiewicz <marcin@juszkiewicz.com.pl>2009-07-28 14:30:47 +0200
committerMarcin Juszkiewicz <marcin@juszkiewicz.com.pl>2009-10-26 17:28:43 +0100
commit083679cd9634449aff829be751cfb236e1175956 (patch)
tree885f0892d1935f90bc02bc6bbe72c69ff534796f
parent6cb806430f8a66630f960bf0570c49fddacfe98d (diff)
xserver-kdrive-nomadik: added 1.3.0.0 version
This version has hardware acceleration working. NOTE: patches were applied and refreshed - thats why they differ from ST ones.
-rw-r--r--recipes/xorg-xserver/xserver-kdrive-nomadik/nomadik_xserver_1300.patch6052
-rw-r--r--recipes/xorg-xserver/xserver-kdrive-nomadik/nomadik_xserver_sva_service_cleanup.patch19
-rw-r--r--recipes/xorg-xserver/xserver-kdrive-nomadik_1.3.0.0.bb47
3 files changed, 6118 insertions, 0 deletions
diff --git a/recipes/xorg-xserver/xserver-kdrive-nomadik/nomadik_xserver_1300.patch b/recipes/xorg-xserver/xserver-kdrive-nomadik/nomadik_xserver_1300.patch
new file mode 100644
index 0000000000..2a52072748
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-kdrive-nomadik/nomadik_xserver_1300.patch
@@ -0,0 +1,6052 @@
+---
+ Makefile.am | 6
+ Xext/Makefile.am | 6
+ Xext/xcalibrate.c | 47
+ configure.ac | 51
+ dix/dixfonts.c | 2
+ dix/window.c | 142 ++
+ exa/exa.c | 6
+ exa/exa_offscreen.c | 2
+ hw/kdrive/Makefile.am | 9
+ hw/kdrive/fbdev/fbdev.c | 59 +
+ hw/kdrive/fbdev/fbinit.c | 7
+ hw/kdrive/linux/evdev.c | 385 +++++++
+ hw/kdrive/linux/linux.c | 4
+ hw/kdrive/linux/mouse.c | 2
+ hw/kdrive/nomadik/Makefile.am | 29
+ hw/kdrive/nomadik/nomadik-exa.c | 957 ++++++++++++++++++
+ hw/kdrive/nomadik/nomadik-exa.h | 147 ++
+ hw/kdrive/nomadik/nomadik-init.c | 194 +++
+ hw/kdrive/nomadik/nomadik-log.h | 70 +
+ hw/kdrive/nomadik/nomadik-sva.c | 626 ++++++++++++
+ hw/kdrive/nomadik/nomadik-sva.h | 193 +++
+ hw/kdrive/nomadik/nomadik-video.c | 1956 ++++++++++++++++++++++++++++++++++++++
+ hw/kdrive/nomadik/nomadik-video.h | 26
+ hw/kdrive/src/kdrive.c | 41
+ hw/kdrive/src/kdrive.h | 7
+ hw/kdrive/src/kinput.c | 14
+ hw/kdrive/src/kmode.c | 49
+ include/kdrive-config.h.in | 3
+ mi/miinitext.c | 6
+ xfixes/cursor.c | 25
+ 30 files changed, 5034 insertions(+), 37 deletions(-)
+
+--- xorg-server-1.3.0.0.orig/Makefile.am
++++ xorg-server-1.3.0.0/Makefile.am
+@@ -28,10 +28,14 @@ endif
+
+ if XINPUT
+ XINPUT_DIR=Xi
+ endif
+
++if XKB
++XKB_DIR=xkb
++endif
++
+ if DBE
+ DBE_DIR=dbe
+ endif
+
+ SUBDIRS = \
+@@ -44,11 +48,11 @@ SUBDIRS = \
+ miext \
+ os \
+ randr \
+ render \
+ $(XINPUT_DIR) \
+- xkb \
++ $(XKB_DIR) \
+ $(DBE_DIR) \
+ $(MFB_DIR) \
+ $(AFB_DIR) \
+ $(CFB_DIR) \
+ $(CFB32_DIR) \
+--- xorg-server-1.3.0.0.orig/Xext/Makefile.am
++++ xorg-server-1.3.0.0/Xext/Makefile.am
+@@ -89,10 +89,15 @@ XCALIBRATE_SRCS = xcalibrate.c
+ if XCALIBRATE
+ BUILTIN_SRCS += $(XCALIBRATE_SRCS)
+ # XCalibrare needs tslib
+ endif
+
++XCALIBRATE_SRCS = xcalibrate.c
++if XCALIBRATE
++BUILTIN_SRCS += $(XCALIBRATE_SRCS)
++endif
++
+ # X EVent Interception Extension: allows accessibility helpers & composite
+ # managers to intercept events from input devices and transform as needed
+ # before the clients see them.
+ XEVIE_SRCS = xevie.c
+ if XEVIE
+@@ -167,10 +172,11 @@ EXTRA_DIST = \
+ $(SCREENSAVER_SRCS) \
+ $(XACE_SRCS) \
+ $(XCSECURITY_SRCS) \
+ $(XCALIBRATE_SRCS) \
+ $(XINERAMA_SRCS) \
++ $(XCALIBRATE_SRCS) \
+ $(XEVIE_SRCS) \
+ $(XPRINT_SRCS) \
+ $(APPGROUP_SRCS) \
+ $(CUP_SRCS) \
+ $(EVI_SRCS) \
+--- xorg-server-1.3.0.0.orig/Xext/xcalibrate.c
++++ xorg-server-1.3.0.0/Xext/xcalibrate.c
+@@ -164,11 +164,10 @@ ProcXCalibrateSetRawMode (ClientPtr clie
+ }
+ WriteToClient(client, sizeof (rep), (char *) &rep);
+ return (client->noClientException);
+ }
+
+-
+ static int
+ SProcXCalibrateSetRawMode (ClientPtr client)
+ {
+ REQUEST(xXCalibrateRawModeReq);
+ int n;
+@@ -178,10 +177,51 @@ SProcXCalibrateSetRawMode (ClientPtr cli
+ swaps(&stuff->on, n);
+
+ return ProcXCalibrateSetRawMode(client);
+ }
+
++static int
++ProcXCalibrateScreenToCoord (ClientPtr client)
++{
++ REQUEST(xXCalibrateScreenToCoordReq);
++ xXCalibrateScreenToCoordReply rep;
++
++ REQUEST_SIZE_MATCH (xXCalibrateScreenToCoordReq);
++
++ memset (&rep, 0, sizeof (rep));
++ rep.type = X_Reply;
++ rep.sequenceNumber = client->sequence;
++ rep.x = stuff->x;
++ rep.y = stuff->y;
++
++ KdScreenToMouseCoords(&rep.x, &rep.y);
++
++ if (client->swapped)
++ {
++ int n;
++
++ swaps (&rep.x, n);
++ swaps (&rep.y, n);
++ }
++ WriteToClient(client, sizeof (rep), (char *) &rep);
++ return (client->noClientException);
++}
++
++static int
++SProcXCalibrateScreenToCoord (ClientPtr client)
++{
++ REQUEST(xXCalibrateScreenToCoordReq);
++ int n;
++
++ REQUEST_SIZE_MATCH (xXCalibrateScreenToCoordReq);
++
++ swaps(&stuff->x, n);
++ swaps(&stuff->y, n);
++
++ return ProcXCalibrateScreenToCoord(client);
++}
++
+ static void
+ XCalibrateResetProc (ExtensionEntry *extEntry)
+ {
+ }
+
+@@ -192,10 +232,13 @@ ProcXCalibrateDispatch (ClientPtr client
+ switch (stuff->data) {
+ case X_XCalibrateQueryVersion:
+ return ProcXCalibrateQueryVersion(client);
+ case X_XCalibrateRawMode:
+ return ProcXCalibrateSetRawMode(client);
++ case X_XCalibrateScreenToCoord:
++ return ProcXCalibrateScreenToCoord(client);
++
+ default: break;
+ }
+
+ return BadRequest;
+ }
+@@ -211,10 +254,12 @@ SProcXCalibrateDispatch (ClientPtr clien
+ switch (stuff->data) {
+ case X_XCalibrateQueryVersion:
+ return SProcXCalibrateQueryVersion(client);
+ case X_XCalibrateRawMode:
+ return SProcXCalibrateSetRawMode(client);
++ case X_XCalibrateScreenToCoord:
++ return SProcXCalibrateScreenToCoord(client);
+
+ default: break;
+ }
+
+ return BadRequest;
+--- xorg-server-1.3.0.0.orig/configure.ac
++++ xorg-server-1.3.0.0/configure.ac
+@@ -389,10 +389,16 @@ AC_ARG_WITH(rgb-path, AS_HELP_ST
+ [ RGBPATH="$withval" ],
+ [ RGBPATH="${datadir}/X11/rgb" ])
+ AC_ARG_WITH(dri-driver-path, AS_HELP_STRING([--with-dri-driver-path=PATH], [Path to DRI drivers (default: ${libdir}/dri)]),
+ [ DRI_DRIVER_PATH="$withval" ],
+ [ DRI_DRIVER_PATH="${libdir}/dri" ])
++KERNEL_HEADERS_PATH="${libdir}/linux"
++AC_ARG_WITH(kernel-headers-path,
++ AS_HELP_STRING([--with-kernel-headers=PATH],
++ [Path to kernel headers (default: ${includedir}/linux)]),
++ [KERNEL_HEADERS_PATH="$withval"],
++ [KERNEL_HEADERS_PATH="${libdir}/linux"])
+ AC_ARG_ENABLE(builddocs, AS_HELP_STRING([--enable-builddocs], [Build docs (default: disabled)]),
+ [BUILDDOCS=$enableval],
+ [BUILDDOCS=no])
+ AC_ARG_ENABLE(install-libxf86config,
+ AS_HELP_STRING([--enable-install-libxf86config],
+@@ -419,10 +425,11 @@ AC_ARG_ENABLE(dri, AS_HELP_ST
+ AC_ARG_ENABLE(xinerama, AS_HELP_STRING([--disable-xinerama], [Build Xinerama extension (default: enabled)]), [XINERAMA=$enableval], [XINERAMA=yes])
+ AC_ARG_ENABLE(xf86vidmode, AS_HELP_STRING([--disable-xf86vidmode], [Build XF86VidMode extension (default: enabled)]), [XF86VIDMODE=$enableval], [XF86VIDMODE=yes])
+ AC_ARG_ENABLE(xf86misc, AS_HELP_STRING([--disable-xf86misc], [Build XF86Misc extension (default: enabled)]), [XF86MISC=$enableval], [XF86MISC=yes])
+ AC_ARG_ENABLE(xace, AS_HELP_STRING([--disable-xace], [Build X-ACE extension (default: enabled)]), [XACE=$enableval], [XACE=yes])
+ AC_ARG_ENABLE(xcsecurity, AS_HELP_STRING([--disable-xcsecurity], [Build Security extension (default: enabled)]), [XCSECURITY=$enableval], [XCSECURITY=$XACE])
++AC_ARG_ENABLE(xcalibrate, AS_HELP_STRING([--enable-xcalibrate], [Build XCalibrate extension (default: disabled)]), [XCALIBRATE=$enableval], [XCALIBRATE=no])
+ AC_ARG_ENABLE(appgroup, AS_HELP_STRING([--disable-appgroup], [Build XC-APPGROUP extension (default: enabled)]), [APPGROUP=$enableval], [APPGROUP=$XCSECURITY])
+ AC_ARG_ENABLE(xcalibrate, AS_HELP_STRING([--enable-xcalibrate], [Build XCalibrate extension (default: disabled)]), [XCALIBRATE=$enableval], [XCALIBRATE=no])
+ AC_ARG_ENABLE(tslib, AS_HELP_STRING([--enable-tslib], [Build kdrive tslib touchscreen support (default: disabled)]), [TSLIB=$enableval], [TSLIB=no])
+ AC_ARG_ENABLE(xevie, AS_HELP_STRING([--disable-xevie], [Build XEvIE extension (default: enabled)]), [XEVIE=$enableval], [XEVIE=yes])
+ AC_ARG_ENABLE(cup, AS_HELP_STRING([--disable-cup], [Build TOG-CUP extension (default: enabled)]), [CUP=$enableval], [CUP=yes])
+@@ -432,10 +439,11 @@ AC_ARG_ENABLE(fontcache, AS_HELP_ST
+ AC_ARG_ENABLE(dbe, AS_HELP_STRING([--disable-dbe], [Build DBE extension (default: enabled)]), [DBE=$enableval], [DBE=yes])
+ AC_ARG_ENABLE(xf86bigfont, AS_HELP_STRING([--disable-xf86bigfont], [Build XF86 Big Font extension (default: enabled)]), [XF86BIGFONT=$enableval], [XF86BIGFONT=yes])
+ AC_ARG_ENABLE(dpms, AS_HELP_STRING([--disable-dpms], [Build DPMS extension (default: enabled)]), [DPMSExtension=$enableval], [DPMSExtension=yes])
+ AC_ARG_ENABLE(xinput, AS_HELP_STRING([--disable-xinput], [Build XInput Extension (default: enabled)]), [XINPUT=$enableval], [XINPUT=yes])
+ AC_ARG_ENABLE(xfree86-utils, AS_HELP_STRING([--enable-xfree86-utils], [Build xfree86 DDX utilities (default: enabled)]), [XF86UTILS=$enableval], [XF86UTILS=yes])
++AC_ARG_ENABLE(xkb, AS_HELP_STRING([--disable-xkb], [Build XKB (default: enabled)]), [XKB=$enableval], [XKB=yes])
+
+ dnl DDXes.
+ AC_ARG_ENABLE(xorg, AS_HELP_STRING([--enable-xorg], [Build Xorg server (default: auto)]), [XORG=$enableval], [XORG=auto])
+ AC_ARG_ENABLE(dmx, AS_HELP_STRING([--enable-dmx], [Build DMX server (default: auto)]), [DMX=$enableval], [DMX=auto])
+ AC_ARG_ENABLE(xvfb, AS_HELP_STRING([--enable-xvfb], [Build Xvfb server (default: yes)]), [XVFB=$enableval], [XVFB=yes])
+@@ -446,10 +454,11 @@ AC_ARG_ENABLE(xgl, AS_HELP_ST
+ AC_ARG_ENABLE(xglx, AS_HELP_STRING([--enable-xglx], [Build Xglx xgl module (default: no)]), [XGLX=$enableval], [XGLX=no])
+ AC_ARG_ENABLE(xegl, AS_HELP_STRING([--enable-xegl], [Build Xegl xgl module (default: no)]), [XEGL=$enableval], [XEGL=no])
+ dnl kdrive and its subsystems
+ AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no])
+ AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto])
++AC_ARG_ENABLE(nomadik, AS_HELP_STRING([--enable-nomadik],[Build the kdrive Xnomadik server (default: auto)]), [NOMADIK=$enableval], [NOMADIK=auto])
+ AC_ARG_ENABLE(xsdl, AS_HELP_STRING([--enable-xsdl], [Build the kdrive Xsdl server (default: auto)]), [XSDL=$enableval], [XSDL=auto])
+ dnl xprint
+ AC_ARG_ENABLE(freetype, AS_HELP_STRING([ --enable-freetype], [Build Xprint FreeType backend (default: yes)]), [XP_USE_FREETYPE=$enableval],[XP_USE_FREETYPE=no])
+ AC_ARG_WITH(freetype-config, AS_HELP_STRING([ --with-freetype-config=PROG], [Use FreeType configuration program PROG (default: auto)]), freetype_config=$withval, freetype_config=auto)
+
+@@ -518,11 +527,15 @@ dnl ------------------------------------
+ XEXT_INC='-I$(top_srcdir)/Xext'
+ XEXT_LIB='$(top_builddir)/Xext/libXext.la'
+ XEXTXORG_LIB='$(top_builddir)/Xext/libXextbuiltin.la'
+
+ dnl Core modules for most extensions, et al.
++if test "$KDRIVE" = yes; then
++REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto xextproto xproto xtrans xf86bigfontproto [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto inputproto [kbproto >= 1.0.3]"
++else
+ REQUIRED_MODULES="[randrproto >= 1.2] renderproto [fixesproto >= 4.0] [damageproto >= 1.1] xcmiscproto xextproto xproto xtrans xf86miscproto xf86vidmodeproto xf86bigfontproto [scrnsaverproto >= 1.1] bigreqsproto resourceproto fontsproto inputproto xf86dgaproto [kbproto >= 1.0.3]"
++fi
+ REQUIRED_LIBS="xfont xau fontenc"
+
+ AM_CONDITIONAL(XV, [test "x$XV" = xyes])
+ if test "x$XV" = xyes; then
+ AC_DEFINE(XV, 1, [Support Xv extension])
+@@ -646,10 +659,16 @@ if test "x$XCSECURITY" = xyes; then
+ AC_MSG_ERROR([cannot build Security extension without X-ACE])
+ fi
+ AC_DEFINE(XCSECURITY, 1, [Build Security extension])
+ fi
+
++AM_CONDITIONAL(XCALIBRATE, [test "x$XCALIBRATE" = xyes])
++if test "x$XCALIBRATE" = xyes; then
++ AC_DEFINE(XCALIBRATE, 1, [Build XCalibrate extension])
++ REQUIRED_MODULES="$REQUIRED_MODULES xcalibrateproto"
++fi
++
+ AM_CONDITIONAL(XEVIE, [test "x$XEVIE" = xyes])
+ if test "x$XEVIE" = xyes; then
+ AC_DEFINE(XEVIE, 1, [Build XEvIE extension])
+ REQUIRED_MODULES="$REQUIRED_MODULES evieproto"
+ fi
+@@ -758,16 +777,19 @@ fi
+
+ AM_CONDITIONAL(XF86UTILS, test "x$XF86UTILS" = xyes)
+
+ AC_DEFINE(SHAPE, 1, [Support SHAPE extension])
+
+-AC_DEFINE(XKB, 1, [Build XKB])
+-AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
+-AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default])
+-REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
+-XKB_LIB='$(top_builddir)/xkb/libxkb.la'
+-XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
++AM_CONDITIONAL(XKB, [test "x$XKB" = xyes])
++if test "x$XKB" = xyes; then
++ AC_DEFINE(XKB, 1, [Build XKB])
++ AC_DEFINE(XKB_IN_SERVER, 1, [Build XKB server])
++ AC_DEFINE(XKB_DFLT_DISABLED, 0, [Disable XKB per default])
++ REQUIRED_MODULES="$REQUIRED_MODULES xkbfile"
++ XKB_LIB='$(top_builddir)/xkb/libxkb.la'
++ XKB_STUB_LIB='$(top_builddir)/xkb/libxkbstubs.la'
++fi
+
+ AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1,
+ [Do not have `strcasecmp'.]))
+
+ PKG_CHECK_MODULES([XDMCP], [xdmcp], [have_libxdmcp="yes"], [have_libxdmcp="no"])
+@@ -1509,15 +1531,16 @@ if test "$KDRIVE" = yes; then
+ AC_DEFINE(KDRIVEFBDEV, 1, [Build fbdev-based kdrive server])
+ fi
+
+ # tslib...
+ if test "x$TSLIB" = xyes; then
+- PKG_CHECK_MODULES([TSLIB], [tslib-0.0], [HAVE_TSLIB="yes"], [HAVE_TSLIB="no"])
++ PKG_CHECK_MODULES([TSLIB], [tslib-1.0], [HAVE_TSLIB="yes"], [HAVE_TSLIB="no"])
+ if test "x$HAVE_TSLIB" = xno; then
+ AC_MSG_ERROR([tslib must be installed to build the tslib driver. See http://tslib.berlios.de/])
+ fi
+ AC_DEFINE(TSLIB, 1, [Have tslib support])
++ AC_DEFINE(TOUCHSCREEN, 1, [Have touchscreen support])
+ fi
+
+ # damage shadow extension glx (NOTYET) fb mi
+ KDRIVE_INC='-I$(top_srcdir)/hw/kdrive/src'
+ KDRIVE_PURE_INCS="$KDRIVE_INC $MIEXT_DAMAGE_INC $MIEXT_SHADOW_INC $XEXT_INC $FB_INC $MI_INC"
+@@ -1536,14 +1559,18 @@ if test "$KDRIVE" = yes; then
+ KDRIVE_OS_LIB='$(top_builddir)/hw/kdrive/linux/liblinux.a'
+ KDRIVELINUX=yes
+ ;;
+ esac
+ KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.a'
+- KDRIVE_LIBS="$DIX_LIB $KDRIVE_LIB $KDRIVE_OS_LIB $KDRIVE_PURE_LIBS $KDRIVE_STUB_LIB $TSLIB_LIBS"
++ KDRIVE_LIBS="$DIX_LIB $KDRIVE_LIB $KDRIVE_PURE_LIBS $KDRIVE_OS_LIB $KDRIVE_STUB_LIB $TSLIB_LIBS"
+
+ # check if we can build Xephyr
+ PKG_CHECK_MODULES(XEPHYR, x11 xext xfont xau xdmcp, [xephyr="yes"], [xephyr="no"])
++
++ #check if we can build Xnomadik
++ AC_CHECK_HEADER([nomadik/sga_lib.h], nomadik="yes")
++
+
+ # check for SDL SDK
+ AC_CHECK_HEADERS([SDL/SDL.h])
+ if test "x$XSDL" = xauto; then
+ XSDL="$ac_cv_header_SDL_SDL_h"
+@@ -1567,10 +1594,13 @@ AC_CHECK_FUNC([nanosleep], [],
+ AM_CONDITIONAL(XEPHYR, [test x"$xephyr" = xyes])
+ XEPHYR_LIBS="$XEPHYR_LIBS $XSERVER_LIBS"
+ AC_SUBST([XEPHYR_LIBS])
+ AC_SUBST([XEPHYR_INCS])
+
++AM_CONDITIONAL(NOMADIK,[test x"$nomadik" = xyes])
++AC_SUBST([KERNEL_HEADERS_PATH])
++
+ if test x"$XSDL" = xyes; then
+ AC_DEFINE(XSDLSERVER,,[Build Xsdl server])
+ XSDL_LIBS="`sdl-config --libs` $XSERVER_LIBS"
+ XSDL_INCS="`sdl-config --cflags` $XSERVER_CFLAGS"
+ fi
+@@ -1601,11 +1631,13 @@ XKB_COMPILED_DIR=`echo $XKBOUTPUT | sed
+ AC_DEFINE_DIR(XKM_OUTPUT_DIR, XKBOUTPUT, [Path to XKB output dir])
+
+ AC_SUBST(XKB_COMPILED_DIR)
+
+ dnl and the rest of these are generic, so they're in config.h
++if test ! x"$KDRIVE" = xyes; then
+ AC_DEFINE(XFreeXDGA, 1, [Build XDGA support])
++fi
+ AC_DEFINE(XResExtension, 1, [Build XRes extension])
+
+ AC_TRY_COMPILE([
+ #include <features.h>
+ #ifndef __GLIBC__
+@@ -1614,14 +1646,16 @@ AC_TRY_COMPILE([
+ ], [], [AC_DEFINE(_GNU_SOURCE, 1,
+ [ Enable GNU and other extensions to the C environment for glibc])])
+
+ AC_DEFINE_DIR(PROJECTROOT, prefix, [Overall prefix])
+
++if test ! "x$KDRIVE" = xyes ; then
+ dnl xorgconfig CLI configuration utility
+ PKG_CHECK_MODULES([XORGCONFIG_DEP], [xkbfile x11])
+ AC_SUBST(XORGCONFIG_DEP_CFLAGS)
+ AC_SUBST(XORGCONFIG_DEP_LIBS)
++fi
+
+ dnl xorgcfg GUI configuration utility
+ AC_ARG_ENABLE(xorgcfg, AS_HELP_STRING([--enable-xorgcfg],
+ [Build xorgcfg GUI configuration utility (default: yes)]),
+ [XORGCFG=$enableval],[XORGCFG=yes])
+@@ -1813,10 +1847,11 @@ hw/kdrive/sdl/Makefile
+ hw/kdrive/sis300/Makefile
+ hw/kdrive/smi/Makefile
+ hw/kdrive/src/Makefile
+ hw/kdrive/vesa/Makefile
+ hw/kdrive/via/Makefile
++hw/kdrive/nomadik/Makefile
+ hw/xprint/Makefile
+ hw/xprint/doc/Makefile
+ hw/xprint/pcl/Makefile
+ hw/xprint/pcl-mono/Makefile
+ hw/xprint/raster/Makefile
+--- xorg-server-1.3.0.0.orig/dix/dixfonts.c
++++ xorg-server-1.3.0.0/dix/dixfonts.c
+@@ -48,11 +48,11 @@ Equipment Corporation.
+
+ ******************************************************************/
+
+ #define NEED_REPLIES
+ #ifdef HAVE_DIX_CONFIG_H
+-#include <dix-config.h>
++#include <kdrive-config.h>
+ #endif
+
+ #include <X11/X.h>
+ #include <X11/Xmd.h>
+ #include <X11/Xproto.h>
+--- xorg-server-1.3.0.0.orig/dix/window.c
++++ xorg-server-1.3.0.0/dix/window.c
+@@ -179,10 +179,12 @@ static Bool TileScreenSaver(int i, int k
+
+
+ _X_EXPORT int numSaveUndersViewable = 0;
+ _X_EXPORT int deltaSaveUndersViewable = 0;
+
++char* RootPPM = NULL;
++
+ #ifdef DEBUG
+ /******
+ * PrintWindowTree
+ * For debugging only
+ ******/
+@@ -305,20 +307,159 @@ SetWindowToDefaults(register WindowPtr p
+ #ifdef COMPOSITE
+ pWin->redirectDraw = 0;
+ #endif
+ }
+
++static int
++get_int(FILE *fp)
++{
++ int c = 0;
++
++ while ((c = getc(fp)) != EOF)
++ {
++ if (isspace(c))
++ continue;
++
++ if (c == '#')
++ while (c = getc(fp))
++ if (c == EOF)
++ return 0;
++ else if (c == '\n')
++ break;
++
++ if (isdigit(c))
++ {
++ int val = c - '0';
++ while ((c = getc(fp)) && isdigit(c))
++ val = (val * 10) + (c - '0');
++ return val;
++ }
++ }
++
++ return 0;
++}
++
++static unsigned char*
++ppm_load (const char* path, int depth, int *width, int *height)
++{
++ FILE *fp;
++ int max, n = 0, w, h, i, j, bytes_per_line;
++ unsigned char *data, *res, h1, h2;
++
++ if (depth < 16 || depth > 32)
++ return NULL;
++
++ if (depth > 16)
++ depth = 32;
++
++ fp = fopen (path, "r");
++ if (fp == NULL)
++ return FALSE;
++
++ h1 = getc(fp);
++ h2 = getc(fp);
++
++ /* magic is 'P6' for raw ppm */
++ if (h1 != 'P' && h2 != '6')
++ goto fail;
++
++ w = get_int(fp);
++ h = get_int(fp);
++
++ if (w == 0 || h == 0)
++ goto fail;
++
++ max = get_int(fp);
++
++ if (max != 255)
++ goto fail;
++
++ bytes_per_line = ((w * depth + 31) >> 5) << 2;
++
++ res = data = malloc(bytes_per_line * h);
++
++ for (i=0; i<h; i++)
++ {
++ for (j=0; j<w; j++)
++ {
++ unsigned char buf[3];
++ fread(buf, 1, 3, fp);
++
++ switch (depth)
++ {
++ case 24:
++ case 32:
++ *data = buf[2];
++ *(data+1) = buf[1];
++ *(data+2) = buf[0];
++ data += 4;
++ break;
++ case 16:
++ default:
++ *(unsigned short*)data
++ = ((buf[0] >> 3) << 11) | ((buf[1] >> 2) << 5) | (buf[2] >> 3);
++ data += 2;
++ break;
++ }
++ }
++ data += (bytes_per_line - (w*(depth>>3)));
++ }
++
++ data = res;
++
++ *width = w;
++ *height = h;
++
++ fclose(fp);
++
++ return res;
++
++ fail:
++ fclose(fp);
++ return NULL;
++}
++
+ static void
+ MakeRootTile(WindowPtr pWin)
+ {
+ ScreenPtr pScreen = pWin->drawable.pScreen;
+ GCPtr pGC;
+ unsigned char back[128];
+ int len = BitmapBytePad(sizeof(long));
+ register unsigned char *from, *to;
+ register int i, j;
+
++ if (RootPPM != NULL)
++ {
++ int w, h;
++ unsigned char *data;
++
++ if ((data = ppm_load (RootPPM, pScreen->rootDepth, &w, &h)) != NULL)
++ {
++ pWin->background.pixmap
++ = (*pScreen->CreatePixmap)(pScreen, w, h, pScreen->rootDepth);
++
++ pWin->backgroundState = BackgroundPixmap;
++ pGC = GetScratchGC(pScreen->rootDepth, pScreen);
++ if (!pWin->background.pixmap || !pGC)
++ FatalError("could not create root tile");
++
++ ValidateGC((DrawablePtr)pWin->background.pixmap, pGC);
++
++ (*pGC->ops->PutImage)((DrawablePtr)pWin->background.pixmap,
++ pGC,
++ pScreen->rootDepth,
++ 0, 0, w, h, 0, ZPixmap, (char *)data);
++ FreeScratchGC(pGC);
++
++ free(data);
++ return;
++ }
++ else
++ ErrorF("Unable to load root window image.");
++ }
++
+ pWin->background.pixmap = (*pScreen->CreatePixmap)(pScreen, 4, 4,
+ pScreen->rootDepth);
+
+ pWin->backgroundState = BackgroundPixmap;
+ pGC = GetScratchGC(pScreen->rootDepth, pScreen);
+@@ -348,10 +489,11 @@ MakeRootTile(WindowPtr pWin)
+
+ FreeScratchGC(pGC);
+
+ }
+
++
+ WindowPtr
+ AllocateWindow(ScreenPtr pScreen)
+ {
+ WindowPtr pWin;
+ register char *ptr;
+--- xorg-server-1.3.0.0.orig/exa/exa.c
++++ xorg-server-1.3.0.0/exa/exa.c
+@@ -781,10 +781,12 @@ void exaMarkSync(ScreenPtr pScreen)
+ */
+ void exaWaitSync(ScreenPtr pScreen)
+ {
+ ExaScreenPriv(pScreen);
+
+- if (pExaScr->info->needsSync && !pExaScr->swappedOut) {
+- (*pExaScr->info->WaitMarker)(pScreen, pExaScr->info->lastMarker);
++ if (pExaScr->info->needsSync
++ && !pExaScr->swappedOut) {
++ if (pExaScr->info->WaitMarker)
++ (*pExaScr->info->WaitMarker)(pScreen, pExaScr->info->lastMarker);
+ pExaScr->info->needsSync = FALSE;
+ }
+ }
+--- xorg-server-1.3.0.0.orig/exa/exa_offscreen.c
++++ xorg-server-1.3.0.0/exa/exa_offscreen.c
+@@ -425,11 +425,11 @@ ExaOffscreenMarkUsed (PixmapPtr pPixmap)
+ {
+ ExaPixmapPriv (pPixmap);
+ ExaScreenPriv (pPixmap->drawable.pScreen);
+ static int iter = 0;
+
+- if (!pExaPixmap->area)
++ if (!pExaPixmap || !pExaPixmap->area)
+ return;
+
+ /* The numbers here are arbitrary. We may want to tune these. */
+ pExaPixmap->area->score += 100;
+ if (++iter == 10) {
+--- xorg-server-1.3.0.0.orig/hw/kdrive/Makefile.am
++++ xorg-server-1.3.0.0/hw/kdrive/Makefile.am
+@@ -2,11 +2,11 @@ if KDRIVEVESA
+ VESA_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
+ smi via
+ endif
+
+ if KDRIVEFBDEV
+-FBDEV_SUBDIRS = fbdev
++FBDEV_SUBDIRS = fbdev epson
+ endif
+
+ if XSDLSERVER
+ XSDL_SUBDIRS = sdl
+ endif
+@@ -17,16 +17,21 @@ endif
+
+ if KDRIVELINUX
+ LINUX_SUBDIRS = linux
+ endif
+
++if NOMADIK
++NOMADIK_SUBDIRS = nomadik
++endif
++
+ SUBDIRS = \
+ src \
+ $(LINUX_SUBDIRS) \
+ $(XSDL_SUBDIRS) \
+ $(FBDEV_SUBDIRS) \
+ $(VESA_SUBDIRS) \
+ $(XEPHYR_SUBDIRS) \
++ $(NOMADIK_SUBDIRS) \
+ fake
+
+ DIST_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
+- smi via fbdev sdl ephyr src linux fake sis300
++ smi via fbdev sdl ephyr src linux fake sis300 nomadik
+--- xorg-server-1.3.0.0.orig/hw/kdrive/fbdev/fbdev.c
++++ xorg-server-1.3.0.0/hw/kdrive/fbdev/fbdev.c
+@@ -30,10 +30,11 @@
+ #include <sys/ioctl.h>
+
+ #include <errno.h>
+
+ extern int KdTsPhyScreen;
++Bool showMemInfo = FALSE ;
+
+ char *fbdevDevicePath = NULL;
+
+ Bool
+ fbdevInitialize (KdCardInfo *card, FbdevPriv *priv)
+@@ -186,15 +187,34 @@ fbdevScreenInitialize (KdScreenInfo *scr
+
+ t = KdFindMode (screen, fbdevModeSupported);
+ screen->rate = t->rate;
+ screen->width = t->horizontal;
+ screen->height = t->vertical;
++ fprintf(stderr, "%s, %d, %d, %d, %d, \
++ %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, \
++ %d, %d, %d, %d, %d, %d, %d, %d, %d", __FUNCTION__, __LINE__,
++ var.xres, var.yres, var.xres_virtual, var.yres_virtual,
++ var.xoffset, var.yoffset, var.bits_per_pixel, var.grayscale,
++ var.nonstd, var.activate, var.height, var.width,
++ var.accel_flags, var.pixclock, var.left_margin, var.right_margin,
++ var.upper_margin, var.lower_margin, var.hsync_len, var.vsync_len,
++ var.sync, var.vmode);
+
+ /* Now try setting the mode */
+ if (k < 0 || (t->horizontal != var.xres || t->vertical != var.yres))
+ fbdevConvertMonitorTiming (t, &var);
+
++ fprintf(stderr, "%s, %d, %d, %d, %d, \
++ %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, \
++ %d, %d, %d, %d, %d, %d, %d, %d, %d", __FUNCTION__, __LINE__,
++ var.xres, var.yres, var.xres_virtual, var.yres_virtual,
++ var.xoffset, var.yoffset, var.bits_per_pixel, var.grayscale,
++ var.nonstd, var.activate, var.height, var.width,
++ var.accel_flags, var.pixclock, var.left_margin, var.right_margin,
++ var.upper_margin, var.lower_margin, var.hsync_len, var.vsync_len,
++ var.sync, var.vmode);
++
+ var.activate = FB_ACTIVATE_NOW;
+ var.bits_per_pixel = screen->fb[0].depth;
+ var.nonstd = 0;
+ var.grayscale = 0;
+
+@@ -209,10 +229,15 @@ fbdevScreenInitialize (KdScreenInfo *scr
+ /* Re-get the "fixed" parameters since they might have changed */
+ k = ioctl (priv->fd, FBIOGET_FSCREENINFO, &priv->fix);
+ if (k < 0)
+ perror ("FBIOGET_FSCREENINFO");
+
++ /* Re-get the "fixed" parameters since they might have changed */
++ k = ioctl (priv->fd, FBIOGET_FSCREENINFO, &priv->fix);
++ if (k < 0)
++ perror ("FBIOGET_FSCREENINFO");
++
+ /* Now get the new screeninfo */
+ ioctl (priv->fd, FBIOGET_VSCREENINFO, &priv->var);
+ depth = priv->var.bits_per_pixel;
+ gray = priv->var.grayscale;
+
+@@ -345,11 +370,11 @@ fbdevMapFramebuffer (KdScreenInfo *scree
+
+ screen->width = priv->var.xres;
+ screen->height = priv->var.yres;
+ screen->memory_base = (CARD8 *) (priv->fb);
+ screen->memory_size = priv->fix.smem_len;
+-
++
+ if (scrpriv->shadow)
+ {
+ if (!KdShadowFbAlloc (screen, 0,
+ scrpriv->randr & (RR_Rotate_90|RR_Rotate_270)))
+ return FALSE;
+@@ -361,10 +386,30 @@ fbdevMapFramebuffer (KdScreenInfo *scree
+ 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;
+ }
++
++ if (showMemInfo)
++ {
++ LogMessageVerb (X_INFO,
++ 0,
++ "screen width: %d\n"
++ "screen height: %d\n"
++ "video mem base: %#x\n"
++ "offscreen mem offset %#x\n"
++ "video mem size: %#x\n"
++ "depth (in bits) %d\n",
++ screen->width,
++ screen->height,
++ screen->memory_base,
++ screen->off_screen_base,
++ screen->memory_size,
++ priv->var.bits_per_pixel) ;
++ exit(0) ;
++ }
++
+
+ return TRUE;
+ }
+
+ void
+@@ -664,18 +709,27 @@ fbdevEnable (ScreenPtr pScreen)
+ FbdevPriv *priv = pScreenPriv->card->driver;
+ int k;
+
+ priv->var.activate = FB_ACTIVATE_NOW|FB_CHANGE_CMAP_VBL;
+
++ fprintf(stderr, "%s, %d, %d, %d, %d, \
++ %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, \
++ %d, %d, %d, %d, %d, %d, %d, %d, %d", __FUNCTION__, __LINE__,
++ priv->var.xres, priv->var.yres, priv->var.xres_virtual, priv->var.yres_virtual,
++ priv->var.xoffset, priv->var.yoffset, priv->var.bits_per_pixel, priv->var.grayscale,
++ priv->var.nonstd, priv->var.activate, priv->var.height, priv->var.width,
++ priv->var.accel_flags, priv->var.pixclock, priv->var.left_margin, priv->var.right_margin,
++ priv->var.upper_margin, priv->var.lower_margin, priv->var.hsync_len, priv->var.vsync_len,
++ priv->var.sync, priv->var.vmode);
+ /* display it on the LCD */
++#if 0
+ k = ioctl (priv->fd, FBIOPUT_VSCREENINFO, &priv->var);
+ if (k < 0)
+ {
+ perror ("FBIOPUT_VSCREENINFO");
+ return FALSE;
+ }
+-
+ if (priv->fix.visual == FB_VISUAL_DIRECTCOLOR)
+ {
+ struct fb_cmap cmap;
+ int i;
+
+@@ -694,10 +748,11 @@ fbdevEnable (ScreenPtr pScreen)
+ cmap.green = &priv->green[0];
+ cmap.blue = &priv->blue[0];
+ cmap.transp = 0;
+ ioctl (priv->fd, FBIOPUTCMAP, &cmap);
+ }
++ #endif
+ return TRUE;
+ }
+
+ Bool
+ fbdevDPMS (ScreenPtr pScreen, int mode)
+--- xorg-server-1.3.0.0.orig/hw/kdrive/fbdev/fbinit.c
++++ xorg-server-1.3.0.0/hw/kdrive/fbdev/fbinit.c
+@@ -26,10 +26,12 @@
+ #ifdef HAVE_CONFIG_H
+ #include <kdrive-config.h>
+ #endif
+ #include <fbdev.h>
+
++extern int use_evdev;
++
+ void
+ InitCard (char *name)
+ {
+ KdCardAttr attr;
+
+@@ -43,11 +45,14 @@ InitOutput (ScreenInfo *pScreenInfo, int
+ }
+
+ void
+ InitInput (int argc, char **argv)
+ {
+- KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
++ if (use_evdev)
++ KdInitInput (&LinuxEvdevMouseFuncs, &LinuxEvdevKeyboardFuncs);
++ else
++ KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
+ #ifdef TOUCHSCREEN
+ KdAddMouseDriver (&TsFuncs);
+ #endif
+ }
+
+--- xorg-server-1.3.0.0.orig/hw/kdrive/linux/evdev.c
++++ xorg-server-1.3.0.0/hw/kdrive/linux/evdev.c
+@@ -29,13 +29,15 @@
+ #include <errno.h>
+ #include <linux/input.h>
+ #include <X11/X.h>
+ #include <X11/Xproto.h>
+ #include <X11/Xpoll.h>
++#include <X11/keysym.h>
+ #include "inputstr.h"
+ #include "scrnintstr.h"
+ #include "kdrive.h"
++#include "kkeymap.h"
+
+ #define NUM_EVENTS 128
+ #define ABS_UNSET -65535
+
+ #define BITS_PER_LONG (sizeof(long) * 8)
+@@ -103,36 +105,79 @@ EvdevMotion (KdMouseInfo *mi)
+ static void
+ EvdevRead (int evdevPort, void *closure)
+ {
+ KdMouseInfo *mi = closure;
+ Kevdev *ke = mi->driver;
+- int i;
++ int i, j;
+ struct input_event events[NUM_EVENTS];
+ int n;
++ int flags;
+
+ n = read (evdevPort, &events, NUM_EVENTS * sizeof (struct input_event));
+ if (n <= 0)
+ return;
+ n /= sizeof (struct input_event);
+ for (i = 0; i < n; i++)
+ {
++ flags = KD_MOUSE_DELTA | kdMouseInfo->buttonState;
+ switch (events[i].type) {
+ case EV_SYN:
+ break;
+ case EV_KEY:
+- EvdevMotion (mi);
+- ASSIGNBIT(ke->key,events[i].code, events[i].value);
+- if (events[i].code < 0x100)
+- ErrorF ("key %d %d\n", events[i].code, events[i].value);
+- else
+- ErrorF ("key 0x%x %d\n", events[i].code, events[i].value);
++ if (events[i].code >= BTN_MOUSE && events[i].code < BTN_JOYSTICK) {
++ switch (events[i].code) {
++ case BTN_LEFT:
++ if (events[i].value == 1)
++ flags |= KD_BUTTON_1;
++ else
++ flags &= ~KD_BUTTON_1;
++ break;
++ case BTN_MIDDLE:
++ if (events[i].value == 1)
++ flags |= KD_BUTTON_2;
++ else
++ flags &= ~KD_BUTTON_2;
++ break;
++ case BTN_RIGHT:
++ if (events[i].value == 1)
++ flags |= KD_BUTTON_3;
++ else
++ flags &= ~KD_BUTTON_3;
++ break;
++ default:
++ /* Unknow button */
++ break;
++ }
++ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, 0);
++ }
+ break;
+ case EV_REL:
+- ke->rel[events[i].code] += events[i].value;
++ if (events[i].code == REL_X) {
++ KdEnqueueMouseEvent (kdMouseInfo, flags, events[i].value, 0);
++ }
++ else if (events[i].code == REL_Y) {
++ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, events[i].value);
++ }
++ else if (events[i].code == REL_WHEEL) {
++ for (j = 0; j < abs (events[i].value); j++) {
++ if (events[i].value > 0)
++ flags |= KD_BUTTON_4;
++ else
++ flags |= KD_BUTTON_5;
++
++ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, 0);
++
++ if (events[i].value > 0)
++ flags &= ~KD_BUTTON_4;
++ else
++ flags &= ~KD_BUTTON_5;
++
++ KdEnqueueMouseEvent (kdMouseInfo, flags, 0, 0);
++ } /* events[i].code == REL_WHEEL */
++ }
+ break;
+ case EV_ABS:
+- ke->abs[events[i].code] = events[i].value;
+ break;
+ }
+ }
+ EvdevMotion (mi);
+ }
+@@ -171,10 +216,16 @@ EvdevInit (void)
+ for (i = 0; i < NUM_DEFAULT_EVDEV; i++)
+ {
+ fd = open (kdefaultEvdev[i], 2);
+ if (fd >= 0)
+ {
++ if (ioctl (fd, EVIOCGRAB, 1) < 0)
++ {
++ close (fd);
++ continue;
++ }
++
+ mi->name = KdSaveString (kdefaultEvdev[i]);
+ break;
+ }
+ }
+ }
+@@ -285,15 +336,327 @@ EvdevFini (void)
+ KdMouseFuncs LinuxEvdevMouseFuncs = {
+ EvdevInit,
+ EvdevFini,
+ };
+
+-#if 0
++/* Keyboard */
++
++int kbd_fd = -1;
++int EvdevInputType = 0;
++
++KeySym evdevKeymap[(194 - 1 + 1) * 2] = {
++/* These are directly mapped from DOS scanset 0 */
++/* 1 8 */ XK_Escape, NoSymbol,
++/* 2 9 */ XK_1, XK_exclam,
++/* 3 10 */ XK_2, XK_at,
++/* 4 11 */ XK_3, XK_numbersign,
++/* 5 12 */ XK_4, XK_dollar,
++/* 6 13 */ XK_5, XK_percent,
++/* 7 14 */ XK_6, XK_asciicircum,
++/* 8 15 */ XK_7, XK_ampersand,
++/* 9 16 */ XK_8, XK_asterisk,
++/* 10 17 */ XK_9, XK_parenleft,
++/* 11 18 */ XK_0, XK_parenright,
++/* 12 19 */ XK_minus, XK_underscore,
++/* 13 20 */ XK_equal, XK_plus,
++/* 14 21 */ XK_BackSpace, NoSymbol,
++/* 15 22 */ XK_Tab, NoSymbol,
++/* 16 23 */ XK_Q, NoSymbol,
++/* 17 24 */ XK_W, NoSymbol,
++/* 18 25 */ XK_E, NoSymbol,
++/* 19 26 */ XK_R, NoSymbol,
++/* 20 27 */ XK_T, NoSymbol,
++/* 21 28 */ XK_Y, NoSymbol,
++/* 22 29 */ XK_U, NoSymbol,
++/* 23 30 */ XK_I, NoSymbol,
++/* 24 31 */ XK_O, NoSymbol,
++/* 25 32 */ XK_P, NoSymbol,
++/* 26 33 */ XK_bracketleft, XK_braceleft,
++/* 27 34 */ XK_bracketright, XK_braceright,
++/* 28 35 */ XK_Return, NoSymbol,
++/* 29 36 */ XK_Control_L, NoSymbol,
++/* 30 37 */ XK_A, NoSymbol