[PATCH 1/2] kdrive: Delete Xfbdev, and support code that's used nowhere else.

Jamey Sharp jamey at minilop.net
Thu May 12 15:21:54 PDT 2011


If you want to use the Linux framebuffer device interface, use the X.Org
DDX with its video-fbdev driver. Input devices supported by Xfbdev
should work with input-evdev, input-kbd, or input-mouse, with the
possible exception of devices supported only by tslib.

Of kdrive's Linux-specific support functions, I only kept evdev.c, and
that's only because Xephyr can be compiled with evdev support.

Signed-off-by: Jamey Sharp <jamey at minilop.net>
---
Looks like when ajax submitted a similar patch last February, Mikhail
Gusarov NAK'd it. Is it time yet?

 configure.ac                |   63 +---
 hw/kdrive/Makefile.am       |    7 +-
 hw/kdrive/fbdev/.gitignore  |    2 -
 hw/kdrive/fbdev/Makefile.am |   29 --
 hw/kdrive/fbdev/Xfbdev.man  |   28 --
 hw/kdrive/fbdev/fbdev.c     |  826 ----------------------------------
 hw/kdrive/fbdev/fbdev.h     |   99 -----
 hw/kdrive/fbdev/fbinit.c    |  106 -----
 hw/kdrive/linux/Makefile.am |   14 -
 hw/kdrive/linux/keyboard.c  |  765 --------------------------------
 hw/kdrive/linux/linux.c     |  401 -----------------
 hw/kdrive/linux/mouse.c     | 1030 -------------------------------------------
 hw/kdrive/linux/ms.c        |  182 --------
 hw/kdrive/linux/ps2.c       |  186 --------
 hw/kdrive/linux/tslib.c     |  197 ---------
 hw/kdrive/src/kdrive.h      |    3 -
 include/dix-config.h.in     |    6 -
 include/kdrive-config.h.in  |   12 -
 include/xorg-server.h.in    |    3 -
 19 files changed, 3 insertions(+), 3956 deletions(-)
 delete mode 100644 hw/kdrive/fbdev/.gitignore
 delete mode 100644 hw/kdrive/fbdev/Makefile.am
 delete mode 100644 hw/kdrive/fbdev/Xfbdev.man
 delete mode 100644 hw/kdrive/fbdev/fbdev.c
 delete mode 100644 hw/kdrive/fbdev/fbdev.h
 delete mode 100644 hw/kdrive/fbdev/fbinit.c
 delete mode 100644 hw/kdrive/linux/keyboard.c
 delete mode 100644 hw/kdrive/linux/linux.c
 delete mode 100644 hw/kdrive/linux/mouse.c
 delete mode 100644 hw/kdrive/linux/ms.c
 delete mode 100644 hw/kdrive/linux/ps2.c
 delete mode 100644 hw/kdrive/linux/tslib.c

diff --git a/configure.ac b/configure.ac
index 61caaed..1057ed5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -625,7 +625,6 @@ AC_ARG_ENABLE(xf86vidmode,    AS_HELP_STRING([--disable-xf86vidmode], [Build XF8
 AC_ARG_ENABLE(xace,           AS_HELP_STRING([--disable-xace], [Build X-ACE extension (default: enabled)]), [XACE=$enableval], [XACE=yes])
 AC_ARG_ENABLE(xselinux,       AS_HELP_STRING([--enable-xselinux], [Build SELinux extension (default: disabled)]), [XSELINUX=$enableval], [XSELINUX=no])
 AC_ARG_ENABLE(xcsecurity,     AS_HELP_STRING([--enable-xcsecurity], [Build Security extension (default: disabled)]), [XCSECURITY=$enableval], [XCSECURITY=no])
-AC_ARG_ENABLE(tslib,          AS_HELP_STRING([--enable-tslib], [Build kdrive tslib touchscreen support (default: disabled)]), [TSLIB=$enableval], [TSLIB=no])
 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([--enable-xf86bigfont], [Build XF86 Big Font extension (default: disabled)]), [XF86BIGFONT=$enableval], [XF86BIGFONT=no])
 AC_ARG_ENABLE(dpms,           AS_HELP_STRING([--disable-dpms], [Build DPMS extension (default: enabled)]), [DPMSExtension=$enableval], [DPMSExtension=yes])
@@ -653,10 +652,7 @@ 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(xfake,          AS_HELP_STRING([--enable-xfake], [Build the kdrive 'fake' server (default: auto)]), [XFAKE=$enableval], [XFAKE=auto])
-AC_ARG_ENABLE(xfbdev,         AS_HELP_STRING([--enable-xfbdev], [Build the kdrive framebuffer device server (default: auto)]), [XFBDEV=$enableval], [XFBDEV=auto])
 dnl kdrive options
-AC_ARG_ENABLE(kdrive-kbd,     AS_HELP_STRING([--enable-kdrive-kbd], [Build kbd driver for kdrive (default: auto)]), [KDRIVE_KBD=$enableval], [KDRIVE_KBD=auto])
-AC_ARG_ENABLE(kdrive-mouse,   AC_HELP_STRING([--enable-kdrive-mouse], [Build mouse driver for kdrive (default: auto)]), [KDRIVE_MOUSE=$enableval], [KDRIVE_MOUSE=auto])
 AC_ARG_ENABLE(kdrive-evdev,   AC_HELP_STRING([--enable-kdrive-evdev], [Build evdev driver for kdrive (default: auto)]), [KDRIVE_EVDEV=$enableval], [KDRIVE_EVDEV=auto])
 
 
@@ -1989,46 +1985,9 @@ if test "$KDRIVE" = yes; then
     AC_DEFINE(KDRIVESERVER,1,[Build Kdrive X server])
     AC_DEFINE(KDRIVEDDXACTIONS,,[Build kdrive ddx])
 
-    AC_CHECK_HEADERS([linux/fb.h])
-    if test "$ac_cv_header_linux_fb_h" = yes && test "x$XFBDEV" = xauto; then
-        XFBDEV=yes
-    fi
-
-    if test "x$XFBDEV" = xyes; then
-        KDRIVEFBDEVLIB=yes
-        AC_DEFINE(KDRIVEFBDEV, 1, [Build fbdev-based kdrive server])
-    fi
-
-
-    PKG_CHECK_MODULES([TSLIB], [tslib-0.0], [HAVE_TSLIB="yes"], [HAVE_TSLIB="no"])
-    if test "x$HAVE_TSLIB" = xno; then
-        AC_CHECK_LIB(ts, ts_open, [
-			HAVE_TSLIB="yes"
-			TSLIB_LIBS="-lts"
-		])
-    fi
-
-    if test "xTSLIB" = xauto; then
-        TSLIB="$HAVE_TSLIB"
-    fi
-
-    if test "x$TSLIB" = xyes; then
-        if ! test "x$HAVE_TSLIB" = xyes; then
-            AC_MSG_ERROR([tslib must be installed to build the tslib driver. See http://tslib.berlios.de/])
-        else
-            AC_DEFINE(TSLIB, 1, [Have tslib support])
-        fi
-    fi
-
-    if test "x$KDRIVE_KBD" = xyes; then
-       AC_DEFINE(KDRIVE_KBD, 1, [Enable KDrive kbd driver])
-    fi
     if test "x$KDRIVE_EVDEV" = xyes; then
        AC_DEFINE(KDRIVE_EVDEV, 1, [Enable KDrive evdev driver])
     fi
-    if test "x$KDRIVE_MOUSE" = xyes; then
-       AC_DEFINE(KDRIVE_MOUSE, 1, [Enable KDrive mouse driver])
-    fi
 
     XEPHYR_REQUIRED_LIBS="x11 $LIBXEXT xau xdmcp"
     if test "x$XV" = xyes; then
@@ -2056,7 +2015,7 @@ if test "$KDRIVE" = yes; then
     KDRIVE_OS_INC='-I$(top_srcdir)/hw/kdrive/linux'
     KDRIVE_INCS="$KDRIVE_PURE_INCS $KDRIVE_OS_INC"
     
-    KDRIVE_CFLAGS="$XSERVER_CFLAGS -DHAVE_KDRIVE_CONFIG_H $TSLIB_CFLAGS"
+    KDRIVE_CFLAGS="$XSERVER_CFLAGS -DHAVE_KDRIVE_CONFIG_H"
 
     KDRIVE_PURE_LIBS="$FB_LIB $MI_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $OS_LIB"
     KDRIVE_LIB='$(top_builddir)/hw/kdrive/src/libkdrive.la'
@@ -2067,30 +2026,18 @@ if test "$KDRIVE" = yes; then
 	    if test "x$KDRIVE_EVDEV" = xauto; then
 		KDRIVE_EVDEV=yes
 	    fi
-	    if test "x$KDRIVE_KBD" = xauto; then
-		KDRIVE_KBD=yes
-	    fi
-	    if test "x$KDRIVE_MOUSE" = xauto; then
-		KDRIVE_MOUSE=yes
-	    fi
 	    ;;
 	*)
 	    if test "x$KDRIVE_EVDEV" = xauto; then
 		KDRIVE_EVDEV=no
 	    fi
-	    if test "x$KDRIVE_KBD" = xauto; then
-		KDRIVE_KBD=no
-	    fi
-	    if test "x$KDRIVE_MOUSE" = xauto; then
-		KDRIVE_MOUSE=no
-	    fi
 	    ;;
     esac
     KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.la'
     KDRIVE_LOCAL_LIBS="$MAIN_LIB $DIX_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB"
     KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $FB_LIB $MI_LIB $KDRIVE_PURE_LIBS"
     KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $KDRIVE_OS_LIB"
-    KDRIVE_LIBS="$KDRIVE_LOCAL_LIBS $XSERVER_SYS_LIBS $GLX_SYS_LIBS $DLOPEN_LIBS $TSLIB_LIBS"
+    KDRIVE_LIBS="$KDRIVE_LOCAL_LIBS $XSERVER_SYS_LIBS $GLX_SYS_LIBS $DLOPEN_LIBS"
 
     AC_SUBST([XEPHYR_LIBS])
     AC_SUBST([XEPHYR_INCS])
@@ -2103,12 +2050,7 @@ AC_SUBST([KDRIVE_LOCAL_LIBS])
 AC_SUBST([KDRIVE_LIBS])
 AM_CONDITIONAL(KDRIVELINUX, [test "x$KDRIVELINUX" = xyes])
 AM_CONDITIONAL(KDRIVE_EVDEV, [test "x$KDRIVE_EVDEV" = xyes])
-AM_CONDITIONAL(KDRIVE_KBD,   [test "x$KDRIVE_KBD" = xyes])
-AM_CONDITIONAL(KDRIVE_MOUSE, [test "x$KDRIVE_MOUSE" = xyes])
-AM_CONDITIONAL(TSLIB, [test "x$HAVE_TSLIB" = xyes])
-AM_CONDITIONAL(KDRIVEFBDEV, [test "x$XFBDEV" = xyes])
 AM_CONDITIONAL(XEPHYR, [test "x$KDRIVE" = xyes && test "x$XEPHYR" = xyes])
-AM_CONDITIONAL(BUILD_KDRIVEFBDEVLIB, [test "x$KDRIVE" = xyes && test "x$KDRIVEFBDEVLIB" = xyes])
 AM_CONDITIONAL(XFAKESERVER, [test "x$KDRIVE" = xyes && test "x$XFAKE" = xyes])
 
 dnl and the rest of these are generic, so they're in config.h
@@ -2240,7 +2182,6 @@ hw/kdrive/Makefile
 hw/kdrive/ephyr/Makefile
 hw/kdrive/ephyr/man/Makefile
 hw/kdrive/fake/Makefile
-hw/kdrive/fbdev/Makefile
 hw/kdrive/linux/Makefile
 hw/kdrive/src/Makefile
 test/Makefile
diff --git a/hw/kdrive/Makefile.am b/hw/kdrive/Makefile.am
index 471ca89..31985a8 100644
--- a/hw/kdrive/Makefile.am
+++ b/hw/kdrive/Makefile.am
@@ -1,7 +1,3 @@
-if BUILD_KDRIVEFBDEVLIB
-FBDEV_SUBDIRS = fbdev
-endif
-
 if XFAKESERVER
 XFAKE_SUBDIRS = fake
 endif
@@ -15,7 +11,6 @@ LINUX_SUBDIRS = linux
 endif
 
 SERVER_SUBDIRS = 		\
-	$(FBDEV_SUBDIRS)	\
 	$(XEPHYR_SUBDIRS)       \
 	$(XFAKE_SUBDIRS)
 
@@ -24,7 +19,7 @@ SUBDIRS =			\
 	$(LINUX_SUBDIRS)	\
 	$(SERVER_SUBDIRS)
 
-DIST_SUBDIRS = fbdev ephyr src linux fake
+DIST_SUBDIRS = ephyr src linux fake
 
 relink:
 	$(AM_V_at)for i in $(SERVER_SUBDIRS) ; do $(MAKE) -C $$i relink || exit 1 ; done
diff --git a/hw/kdrive/fbdev/.gitignore b/hw/kdrive/fbdev/.gitignore
deleted file mode 100644
index 80ad266..0000000
--- a/hw/kdrive/fbdev/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-#		Add & Override for this directory and it's subdirectories
-Xfbdev
diff --git a/hw/kdrive/fbdev/Makefile.am b/hw/kdrive/fbdev/Makefile.am
deleted file mode 100644
index ec9df95..0000000
--- a/hw/kdrive/fbdev/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
-INCLUDES = 					\
-	@KDRIVE_INCS@				\
-	@KDRIVE_CFLAGS@
-
-noinst_LTLIBRARIES = libfbdev.la
-
-libfbdev_la_SOURCES =	\
-	fbdev.c		\
-	fbdev.h
-
-if KDRIVEFBDEV
-bin_PROGRAMS = Xfbdev
-
-Xfbdev_SOURCES = \
-	fbinit.c
-
-Xfbdev_LDADD = 						\
-	libfbdev.la					\
-	@KDRIVE_LIBS@
-
-Xfbdev_DEPENDENCIES =	\
-	libfbdev.la					\
-	$(KDRIVE_PURE_LIBS)
-
-Xfbdev_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-
-relink:
-	$(AM_V_at)rm -f $(bin_PROGRAMS) && $(MAKE) $(bin_PROGRAMS)
-endif
diff --git a/hw/kdrive/fbdev/Xfbdev.man b/hw/kdrive/fbdev/Xfbdev.man
deleted file mode 100644
index bfdae16..0000000
--- a/hw/kdrive/fbdev/Xfbdev.man
+++ /dev/null
@@ -1,28 +0,0 @@
-.\" $RCSId: xc/programs/Xserver/hw/kdrive/fbdev/Xfbdev.man,v 1.4 2001/01/27 18:20:40 dawes Exp $
-.\"
-.TH Xfbdev 1 __vendorversion__
-.SH NAME
-Xfbdev \- Linux framebuffer device tiny X server
-.SH SYNOPSIS
-.B Xfbdev
-.RI [ :display ] 
-.RI [ option ...]
-.SH DESCRIPTION
-.B Xfbdev
-is a generic X server for Linux.
-.B Xfbdev
-doesn't know about any particular hardware, and uses the framebuffer
-provided by the Linux framebuffer device.
-.SH OPTIONS
-.B Xfbdev
-accepts the common options of the Xkdrive family of servers.  Please
-see Xkdrive(1).
-.SH KEYBOARD
-To be written.
-.SH SEE ALSO
-X(__miscmansuffix__), Xserver(1), Xkdrive(1), xdm(1), xinit(1).
-.SH AUTHORS
-The
-.B Xfbdev
-server was written by Keith Packard.
-
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
deleted file mode 100644
index 2c7fa91..0000000
--- a/hw/kdrive/fbdev/fbdev.c
+++ /dev/null
@@ -1,826 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * 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 Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "fbdev.h"
-#include <sys/ioctl.h>
-
-#include <errno.h>
-
-extern int KdTsPhyScreen;
-
-char *fbdevDevicePath = NULL;
-
-static Bool
-fbdevInitialize (KdCardInfo *card, FbdevPriv *priv)
-{
-    unsigned long   off;
-
-    if (fbdevDevicePath == NULL)
-      fbdevDevicePath = "/dev/fb0";
-
-    if ((priv->fd = open(fbdevDevicePath, O_RDWR)) < 0)
-      {
-	ErrorF("Error opening framebuffer %s: %s\n",
-	       fbdevDevicePath, strerror(errno));
-        return FALSE;
-      }
-
-    /* quiet valgrind */
-    memset (&priv->fix, '\0', sizeof (priv->fix));
-    if (ioctl(priv->fd, FBIOGET_FSCREENINFO, &priv->fix) < 0) {
-	perror("Error with /dev/fb ioctl FIOGET_FSCREENINFO");
-	close (priv->fd);
-	return FALSE;
-    }
-    /* quiet valgrind */
-    memset (&priv->var, '\0', sizeof (priv->var));
-    if (ioctl(priv->fd, FBIOGET_VSCREENINFO, &priv->var) < 0) {
-	perror("Error with /dev/fb ioctl FIOGET_VSCREENINFO");
-	close (priv->fd);
-	return FALSE;
-    }
-
-    priv->fb_base = (char *) mmap ((caddr_t) NULL,
-				   priv->fix.smem_len,
-				   PROT_READ|PROT_WRITE,
-				   MAP_SHARED,
-				   priv->fd, 0);
-
-    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
-fbdevCardInit (KdCardInfo *card)
-{
-    FbdevPriv	*priv;
-
-    priv = (FbdevPriv *) malloc(sizeof (FbdevPriv));
-    if (!priv)
-	return FALSE;
-
-    if (!fbdevInitialize (card, priv))
-    {
-	free(priv);
-	return FALSE;
-    }
-    card->driver = priv;
-
-    return TRUE;
-}
-
-static Pixel
-fbdevMakeContig (Pixel orig, Pixel others)
-{
-    Pixel   low;
-
-    low = lowbit (orig) >> 1;
-    while (low && (others & low) == 0)
-    {
-	orig |= low;
-	low >>= 1;
-    }
-    return orig;
-}
-
-static Bool
-fbdevModeSupported (KdScreenInfo		*screen,
-		    const KdMonitorTiming	*t)
-{
-    return TRUE;
-}
-
-static void
-fbdevConvertMonitorTiming (const KdMonitorTiming *t, struct fb_var_screeninfo *var)
-{
-    memset (var, 0, sizeof (struct fb_var_screeninfo));
-
-    var->xres = t->horizontal;
-    var->yres = t->vertical;
-    var->xres_virtual = t->horizontal;
-    var->yres_virtual = t->vertical;
-    var->xoffset = 0;
-    var->yoffset = 0;
-    var->pixclock = t->clock ? 1000000000 / t->clock : 0;
-    var->left_margin = t->hbp;
-    var->right_margin = t->hfp;
-    var->upper_margin = t->vbp;
-    var->lower_margin = t->vfp;
-    var->hsync_len = t->hblank - t->hfp - t->hbp;
-    var->vsync_len = t->vblank - t->vfp - t->vbp;
-
-    var->sync = 0;
-    var->vmode = 0;
-
-    if (t->hpol == KdSyncPositive)
-      var->sync |= FB_SYNC_HOR_HIGH_ACT;
-    if (t->vpol == KdSyncPositive)
-      var->sync |= FB_SYNC_VERT_HIGH_ACT;
-}
-
-static Bool
-fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
-{
-    FbdevPriv	*priv = screen->card->driver;
-    Pixel	allbits;
-    int		depth;
-    Bool	gray;
-    struct fb_var_screeninfo var;
-    const KdMonitorTiming *t;
-    int k;
-
-    k = ioctl (priv->fd, FBIOGET_VSCREENINFO, &var);
-
-    if (!screen->width || !screen->height)
-    {
-	if (k >= 0)
-	{
-	    screen->width = var.xres;
-	    screen->height = var.yres;
-	}
-	else
-	{
-	    screen->width = 1024;
-	    screen->height = 768;
-	}
-	screen->rate = 103; /* FIXME: should get proper value from fb driver */
-    }
-    if (!screen->fb.depth)
-    {
-	if (k >= 0)
-	    screen->fb.depth = var.bits_per_pixel;
-	else
-	    screen->fb.depth = 16;
-    }
-
-    if ((screen->width != var.xres) || (screen->height != var.yres))
-    {
-      t = KdFindMode (screen, fbdevModeSupported);
-      screen->rate = t->rate;
-      screen->width = t->horizontal;
-      screen->height = t->vertical;
-
-      /* Now try setting the mode */
-      if (k < 0 || (t->horizontal != var.xres || t->vertical != var.yres))
-          fbdevConvertMonitorTiming (t, &var);
-    }
-
-    var.activate = FB_ACTIVATE_NOW;
-    var.bits_per_pixel = screen->fb.depth;
-    var.nonstd = 0;
-    var.grayscale = 0;
-
-    k = ioctl (priv->fd, FBIOPUT_VSCREENINFO, &var);
-
-    if (k < 0)
-    {
-	fprintf (stderr, "error: %s\n", strerror (errno));
-	return FALSE;
-    }
-
-    /* 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;
-
-    switch (priv->fix.visual) {
-    case FB_VISUAL_PSEUDOCOLOR:
-	if (gray)
-	{
-	    screen->fb.visuals = (1 << StaticGray);
-	    /* could also support GrayScale, but what's the point? */
-	}
-	else
-	{
-	    screen->fb.visuals = ((1 << StaticGray) |
-			       (1 << GrayScale) |
-			       (1 << StaticColor) |
-			       (1 << PseudoColor) |
-			       (1 << TrueColor) |
-			       (1 << DirectColor));
-	}
-	screen->fb.blueMask  = 0x00;
-	screen->fb.greenMask = 0x00;
-	screen->fb.redMask   = 0x00;
-	break;
-    case FB_VISUAL_STATIC_PSEUDOCOLOR:
-	if (gray)
-	{
-	    screen->fb.visuals = (1 << StaticGray);
-	}
-	else
-	{
-	    screen->fb.visuals = (1 << StaticColor);
-	}
-	screen->fb.blueMask  = 0x00;
-	screen->fb.greenMask = 0x00;
-	screen->fb.redMask   = 0x00;
-	break;
-    case FB_VISUAL_TRUECOLOR:
-    case FB_VISUAL_DIRECTCOLOR:
-	screen->fb.visuals = (1 << TrueColor);
-#define Mask(o,l)   (((1 << l) - 1) << o)
-	screen->fb.redMask = Mask (priv->var.red.offset, priv->var.red.length);
-	screen->fb.greenMask = Mask (priv->var.green.offset, priv->var.green.length);
-	screen->fb.blueMask = Mask (priv->var.blue.offset, priv->var.blue.length);
-
-	/*
-	 * This is a kludge so that Render will work -- fill in the gaps
-	 * in the pixel
-	 */
-	screen->fb.redMask = fbdevMakeContig (screen->fb.redMask,
-						 screen->fb.greenMask|
-						 screen->fb.blueMask);
-
-	screen->fb.greenMask = fbdevMakeContig (screen->fb.greenMask,
-						   screen->fb.redMask|
-						   screen->fb.blueMask);
-
-	screen->fb.blueMask = fbdevMakeContig (screen->fb.blueMask,
-						  screen->fb.redMask|
-						  screen->fb.greenMask);
-
-	allbits = screen->fb.redMask | screen->fb.greenMask | screen->fb.blueMask;
-	depth = 32;
-	while (depth && !(allbits & (1 << (depth - 1))))
-	    depth--;
-	break;
-    default:
-	return FALSE;
-	break;
-    }
-    screen->fb.depth = depth;
-    screen->fb.bitsPerPixel = priv->var.bits_per_pixel;
-
-    scrpriv->randr = screen->randr;
-
-    return fbdevMapFramebuffer (screen);
-}
-
-Bool
-fbdevScreenInit (KdScreenInfo *screen)
-{
-    FbdevScrPriv *scrpriv;
-
-    scrpriv = calloc(1, sizeof (FbdevScrPriv));
-    if (!scrpriv)
-	return FALSE;
-    screen->driver = scrpriv;
-    if (!fbdevScreenInitialize (screen, scrpriv))
-    {
-	screen->driver = 0;
-	free(scrpriv);
-	return FALSE;
-    }
-    return TRUE;
-}
-
-static void *
-fbdevWindowLinear (ScreenPtr	pScreen,
-		   CARD32	row,
-		   CARD32	offset,
-		   int		mode,
-		   CARD32	*size,
-		   void		*closure)
-{
-    KdScreenPriv(pScreen);
-    FbdevPriv	    *priv = pScreenPriv->card->driver;
-
-    if (!pScreenPriv->enabled)
-	return 0;
-    *size = priv->fix.line_length;
-    return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
-}
-
-Bool
-fbdevMapFramebuffer (KdScreenInfo *screen)
-{
-    FbdevScrPriv	*scrpriv = screen->driver;
-    KdPointerMatrix	m;
-    FbdevPriv		*priv = screen->card->driver;
-
-    if (scrpriv->randr != RR_Rotate_0)
-	scrpriv->shadow = TRUE;
-    else
-	scrpriv->shadow = FALSE;
-
-    KdComputePointerMatrix (&m, scrpriv->randr, screen->width, screen->height);
-
-    KdSetPointerMatrix (&m);
-
-    screen->width = priv->var.xres;
-    screen->height = priv->var.yres;
-
-    if (scrpriv->shadow)
-    {
-	if (!KdShadowFbAlloc (screen,
-			      scrpriv->randr & (RR_Rotate_90|RR_Rotate_270)))
-	    return FALSE;
-    }
-    else
-    {
-        screen->fb.byteStride = priv->fix.line_length;
-        screen->fb.pixelStride = (priv->fix.line_length * 8 /
-    				 priv->var.bits_per_pixel);
-        screen->fb.frameBuffer = (CARD8 *) (priv->fb);
-    }
-
-    return TRUE;
-}
-
-static void
-fbdevSetScreenSizes (ScreenPtr pScreen)
-{
-    KdScreenPriv(pScreen);
-    KdScreenInfo	*screen = pScreenPriv->screen;
-    FbdevScrPriv	*scrpriv = screen->driver;
-    FbdevPriv		*priv = screen->card->driver;
-
-    if (scrpriv->randr & (RR_Rotate_0|RR_Rotate_180))
-    {
-	pScreen->width = priv->var.xres;
-	pScreen->height = priv->var.yres;
-	pScreen->mmWidth = screen->width_mm;
-	pScreen->mmHeight = screen->height_mm;
-    }
-    else
-    {
-	pScreen->width = priv->var.yres;
-	pScreen->height = priv->var.xres;
-	pScreen->mmWidth = screen->height_mm;
-	pScreen->mmHeight = screen->width_mm;
-    }
-}
-
-static Bool
-fbdevUnmapFramebuffer (KdScreenInfo *screen)
-{
-    KdShadowFbFree (screen);
-    return TRUE;
-}
-
-static Bool
-fbdevSetShadow (ScreenPtr pScreen)
-{
-    KdScreenPriv(pScreen);
-    KdScreenInfo	*screen = pScreenPriv->screen;
-    FbdevScrPriv	*scrpriv = screen->driver;
-    FbdevPriv		*priv = screen->card->driver;
-    ShadowUpdateProc	update;
-    ShadowWindowProc	window;
-    int			useYX = 0;
-
-#ifdef __arm__
-    /* Use variant copy routines that always read left to right in the
-       shadow framebuffer.  Reading vertical strips is exceptionally
-       slow on XScale due to cache effects.  */
-    useYX = 1;
-#endif
-
-    window = fbdevWindowLinear;
-    update = 0;
-    if (scrpriv->randr)
-	if (priv->var.bits_per_pixel == 16) {
-	    switch (scrpriv->randr) {
-	    case RR_Rotate_90:
-		if (useYX)
-		    update = shadowUpdateRotate16_90YX;
-		else
-		    update =  shadowUpdateRotate16_90;
-		break;
-	    case RR_Rotate_180:
-		update = shadowUpdateRotate16_180;
-		break;
-	    case RR_Rotate_270:
-		if (useYX)
-		    update = shadowUpdateRotate16_270YX;
-		else
-		    update =  shadowUpdateRotate16_270;
-		break;
-	    default:
-		update = shadowUpdateRotate16;
-		break;
-	    }
-	} else
-	    update = shadowUpdateRotatePacked;
-    else
-	update = shadowUpdatePacked;
-    return KdShadowSet (pScreen, scrpriv->randr, update, window);
-}
-
-
-#ifdef RANDR
-static Bool
-fbdevRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
-{
-    KdScreenPriv(pScreen);
-    KdScreenInfo	    *screen = pScreenPriv->screen;
-    FbdevScrPriv	    *scrpriv = screen->driver;
-    RRScreenSizePtr	    pSize;
-    Rotation		    randr;
-    int			    n;
-
-    *rotations = RR_Rotate_All|RR_Reflect_All;
-
-    for (n = 0; n < pScreen->numDepths; n++)
-	if (pScreen->allowedDepths[n].numVids)
-	    break;
-    if (n == pScreen->numDepths)
-	return FALSE;
-
-    pSize = RRRegisterSize (pScreen,
-			    screen->width,
-			    screen->height,
-			    screen->width_mm,
-			    screen->height_mm);
-
-    randr = KdSubRotation (scrpriv->randr, screen->randr);
-
-    RRSetCurrentConfig (pScreen, randr, 0, pSize);
-
-    return TRUE;
-}
-
-static Bool
-fbdevRandRSetConfig (ScreenPtr		pScreen,
-		     Rotation		randr,
-		     int		rate,
-		     RRScreenSizePtr	pSize)
-{
-    KdScreenPriv(pScreen);
-    KdScreenInfo	*screen = pScreenPriv->screen;
-    FbdevScrPriv	*scrpriv = screen->driver;
-    Bool		wasEnabled = pScreenPriv->enabled;
-    FbdevScrPriv	oldscr;
-    int			oldwidth;
-    int			oldheight;
-    int			oldmmwidth;
-    int			oldmmheight;
-    int			newwidth, newheight;
-
-    if (screen->randr & (RR_Rotate_0|RR_Rotate_180))
-    {
-	newwidth = pSize->width;
-	newheight = pSize->height;
-    }
-    else
-    {
-	newwidth = pSize->height;
-	newheight = pSize->width;
-    }
-
-    if (wasEnabled)
-	KdDisableScreen (pScreen);
-
-    oldscr = *scrpriv;
-
-    oldwidth = screen->width;
-    oldheight = screen->height;
-    oldmmwidth = pScreen->mmWidth;
-    oldmmheight = pScreen->mmHeight;
-
-    /*
-     * Set new configuration
-     */
-
-    scrpriv->randr = KdAddRotation (screen->randr, randr);
-
-    fbdevUnmapFramebuffer (screen);
-
-    if (!fbdevMapFramebuffer (screen))
-	goto bail4;
-
-    KdShadowUnset (screen->pScreen);
-
-    if (!fbdevSetShadow (screen->pScreen))
-	goto bail4;
-
-    fbdevSetScreenSizes (screen->pScreen);
-
-    /*
-     * Set frame buffer mapping
-     */
-    (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen),
-				    pScreen->width,
-				    pScreen->height,
-				    screen->fb.depth,
-				    screen->fb.bitsPerPixel,
-				    screen->fb.byteStride,
-				    screen->fb.frameBuffer);
-
-    /* set the subpixel order */
-
-    KdSetSubpixelOrder (pScreen, scrpriv->randr);
-    if (wasEnabled)
-	KdEnableScreen (pScreen);
-
-    return TRUE;
-
-bail4:
-    fbdevUnmapFramebuffer (screen);
-    *scrpriv = oldscr;
-    (void) fbdevMapFramebuffer (screen);
-    pScreen->width = oldwidth;
-    pScreen->height = oldheight;
-    pScreen->mmWidth = oldmmwidth;
-    pScreen->mmHeight = oldmmheight;
-
-    if (wasEnabled)
-	KdEnableScreen (pScreen);
-    return FALSE;
-}
-
-static Bool
-fbdevRandRInit (ScreenPtr pScreen)
-{
-    rrScrPrivPtr    pScrPriv;
-
-    if (!RRScreenInit (pScreen))
-	return FALSE;
-
-    pScrPriv = rrGetScrPriv(pScreen);
-    pScrPriv->rrGetInfo = fbdevRandRGetInfo;
-    pScrPriv->rrSetConfig = fbdevRandRSetConfig;
-    return TRUE;
-}
-#endif
-
-static Bool
-fbdevCreateColormap (ColormapPtr pmap)
-{
-    ScreenPtr		pScreen = pmap->pScreen;
-    KdScreenPriv(pScreen);
-    FbdevPriv		*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 = malloc(nent * sizeof (xColorItem));
-	if (!pdefs)
-	    return FALSE;
-	for (i = 0; i < nent; i++)
-	    pdefs[i].pixel = i;
-	fbdevGetColors (pScreen, 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;
-	}
-	free(pdefs);
-	return TRUE;
-    default:
-	return fbInitializeColormap (pmap);
-    }
-}
-
-Bool
-fbdevInitScreen (ScreenPtr pScreen)
-{
-#ifdef TOUCHSCREEN
-    KdTsPhyScreen = pScreen->myNum;
-#endif
-
-    pScreen->CreateColormap = fbdevCreateColormap;
-    return TRUE;
-}
-
-Bool
-fbdevFinishInitScreen (ScreenPtr pScreen)
-{
-    if (!shadowSetup (pScreen))
-	return FALSE;
-
-#ifdef RANDR
-    if (!fbdevRandRInit (pScreen))
-	return FALSE;
-#endif
-
-    return TRUE;
-}
-
-
-Bool
-fbdevCreateResources (ScreenPtr pScreen)
-{
-    return fbdevSetShadow (pScreen);
-}
-
-void
-fbdevPreserve (KdCardInfo *card)
-{
-}
-
-static int
-fbdevUpdateFbColormap(FbdevPriv *priv, int minidx, int maxidx)
-{
-    struct fb_cmap cmap;
-
-    cmap.start = minidx;
-    cmap.len = maxidx - minidx + 1;
-    cmap.red = &priv->red[minidx];
-    cmap.green = &priv->green[minidx];
-    cmap.blue = &priv->blue[minidx];
-    cmap.transp = 0;
-
-    return ioctl(priv->fd, FBIOPUTCMAP, &cmap);
-}
-
-Bool
-fbdevEnable (ScreenPtr pScreen)
-{
-    KdScreenPriv(pScreen);
-    FbdevPriv		*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;
-    }
-
-    if (priv->fix.visual == FB_VISUAL_DIRECTCOLOR)
-    {
-	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);
-	}
-
-	fbdevUpdateFbColormap(priv, 0, i);
-    }
-    return TRUE;
-}
-
-Bool
-fbdevDPMS (ScreenPtr pScreen, int mode)
-{
-    KdScreenPriv(pScreen);
-    FbdevPriv	*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
-fbdevDisable (ScreenPtr pScreen)
-{
-}
-
-void
-fbdevRestore (KdCardInfo *card)
-{
-}
-
-void
-fbdevScreenFini (KdScreenInfo *screen)
-{
-}
-
-void
-fbdevCardFini (KdCardInfo *card)
-{
-    FbdevPriv	*priv = card->driver;
-
-    munmap (priv->fb_base, priv->fix.smem_len);
-    close (priv->fd);
-    free(priv);
-}
-
-/*
- * Retrieve actual colormap and return selected n entries in pdefs.
- */
-void
-fbdevGetColors (ScreenPtr pScreen, int n, xColorItem *pdefs)
-{
-    KdScreenPriv(pScreen);
-    FbdevPriv	    *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++;
-    }
-}
-
-/*
- * Change colormap by updating n entries described in pdefs.
- */
-void
-fbdevPutColors (ScreenPtr pScreen, int n, xColorItem *pdefs)
-{
-    KdScreenPriv(pScreen);
-    FbdevPriv	*priv = pScreenPriv->card->driver;
-    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++;
-    }
-
-    fbdevUpdateFbColormap(priv, min, max);
-}
diff --git a/hw/kdrive/fbdev/fbdev.h b/hw/kdrive/fbdev/fbdev.h
deleted file mode 100644
index ebac6ad..0000000
--- a/hw/kdrive/fbdev/fbdev.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * 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 Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD 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.
- */
-
-#ifndef _FBDEV_H_
-#define _FBDEV_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 _fbdevPriv {
-    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;
-} FbdevPriv;
-
-typedef struct _fbdevScrPriv {
-    Rotation			randr;
-    Bool			shadow;
-} FbdevScrPriv;
-
-extern KdCardFuncs  fbdevFuncs;
-extern char*        fbdevDevicePath;
-
-Bool
-fbdevCardInit (KdCardInfo *card);
-
-Bool
-fbdevScreenInit (KdScreenInfo *screen);
-
-Bool
-fbdevInitScreen (ScreenPtr pScreen);
-
-Bool
-fbdevFinishInitScreen (ScreenPtr pScreen);
-
-Bool
-fbdevCreateResources (ScreenPtr pScreen);
-
-void
-fbdevPreserve (KdCardInfo *card);
-
-Bool
-fbdevEnable (ScreenPtr pScreen);
-
-Bool
-fbdevDPMS (ScreenPtr pScreen, int mode);
-
-void
-fbdevDisable (ScreenPtr pScreen);
-
-void
-fbdevRestore (KdCardInfo *card);
-
-void
-fbdevScreenFini (KdScreenInfo *screen);
-
-void
-fbdevCardFini (KdCardInfo *card);
-
-void
-fbdevGetColors (ScreenPtr pScreen, int n, xColorItem *pdefs);
-
-void
-fbdevPutColors (ScreenPtr pScreen, int n, xColorItem *pdefs);
-
-Bool
-fbdevMapFramebuffer (KdScreenInfo *screen);
-
-#endif /* _FBDEV_H_ */
diff --git a/hw/kdrive/fbdev/fbinit.c b/hw/kdrive/fbdev/fbinit.c
deleted file mode 100644
index 51e7e00..0000000
--- a/hw/kdrive/fbdev/fbinit.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * 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 Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include <fbdev.h>
-
-void
-InitCard (char *name)
-{
-    KdCardInfoAdd (&fbdevFuncs, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
-    KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
-    KdOsAddInputDrivers ();
-    KdInitInput ();
-}
-
-void
-CloseInput (void)
-{
-}
-
-void
-ddxUseMsg (void)
-{
-  KdUseMsg();
-  ErrorF("\nXfbdev Device Usage:\n");
-  ErrorF("-fb path         Framebuffer device to use. Defaults to /dev/fb0\n");
-  ErrorF("\n");
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
-  if (!strcmp (argv[i], "-fb"))
-    {
-      if (i+1 < argc)
-	{
-	  fbdevDevicePath = argv[i+1];
-	  return 2;
-	}
-      UseMsg();
-      exit(1);
-    }
-
-  return KdProcessArgument (argc, argv, i);
-}
-
-
-KdCardFuncs	fbdevFuncs = {
-    fbdevCardInit,	    /* cardinit */
-    fbdevScreenInit,	    /* scrinit */
-    fbdevInitScreen,	    /* initScreen */
-    fbdevFinishInitScreen,  /* finishInitScreen */
-    fbdevCreateResources,   /* createRes */
-    fbdevPreserve,	    /* preserve */
-    fbdevEnable,	    /* enable */
-    fbdevDPMS,		    /* dpms */
-    fbdevDisable,	    /* disable */
-    fbdevRestore,	    /* restore */
-    fbdevScreenFini,	    /* scrfini */
-    fbdevCardFini,	    /* cardfini */
-
-    0,			    /* initCursor */
-    0,			    /* enableCursor */
-    0,			    /* disableCursor */
-    0,			    /* finiCursor */
-    0,			    /* recolorCursor */
-
-    0,			    /* initAccel */
-    0,			    /* enableAccel */
-    0,			    /* disableAccel */
-    0,			    /* finiAccel */
-
-    fbdevGetColors,    	    /* getColors */
-    fbdevPutColors,	    /* putColors */
-};
diff --git a/hw/kdrive/linux/Makefile.am b/hw/kdrive/linux/Makefile.am
index 93e5d2f..ae4a6e2 100644
--- a/hw/kdrive/linux/Makefile.am
+++ b/hw/kdrive/linux/Makefile.am
@@ -8,20 +8,6 @@ noinst_LTLIBRARIES = liblinux.la
 
 liblinux_la_SOURCES =
 
-liblinux_la_SOURCES += linux.c
-
-if KDRIVE_KBD
-liblinux_la_SOURCES += keyboard.c
-endif
-
 if KDRIVE_EVDEV
 liblinux_la_SOURCES += evdev.c
 endif
-
-if KDRIVE_MOUSE
-liblinux_la_SOURCES += mouse.c ms.c ps2.c
-endif
-
-if TSLIB
-liblinux_la_SOURCES += tslib.c
-endif
diff --git a/hw/kdrive/linux/keyboard.c b/hw/kdrive/linux/keyboard.c
deleted file mode 100644
index e05c5ab..0000000
--- a/hw/kdrive/linux/keyboard.c
+++ /dev/null
@@ -1,765 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- * XKB integration © 2006 Nokia Corporation, author: Tomas Frydrych <tf at o-hand.com>
- *
- * LinuxKeyboardRead() XKB code based on xf86KbdLnx.c:
- * Copyright © 1990,91 by Thomas Roell, Dinkelscherben, Germany.
- * Copyright © 1994-2001 by The XFree86 Project, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the copyright holder(s)
- * and author(s) shall not be used in advertising or otherwise to promote
- * the sale, use or other dealings in this Software without prior written
- * authorization from the copyright holder(s) and author(s).
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include <linux/keyboard.h>
-#include <linux/kd.h>
-#define XK_PUBLISHING
-#include <X11/keysym.h>
-#include <termios.h>
-#include <sys/ioctl.h>
-
-extern int LinuxConsoleFd;
-
-static const KeySym linux_to_x[256] = {
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	XK_BackSpace,	XK_Tab,		XK_Linefeed,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	XK_Escape,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	XK_space,	XK_exclam,	XK_quotedbl,	XK_numbersign,
-	XK_dollar,	XK_percent,	XK_ampersand,	XK_apostrophe,
-	XK_parenleft,	XK_parenright,	XK_asterisk,	XK_plus,
-	XK_comma,	XK_minus,	XK_period,	XK_slash,
-	XK_0,		XK_1,		XK_2,		XK_3,
-	XK_4,		XK_5,		XK_6,		XK_7,
-	XK_8,		XK_9,		XK_colon,	XK_semicolon,
-	XK_less,	XK_equal,	XK_greater,	XK_question,
-	XK_at,		XK_A,		XK_B,		XK_C,
-	XK_D,		XK_E,		XK_F,		XK_G,
-	XK_H,		XK_I,		XK_J,		XK_K,
-	XK_L,		XK_M,		XK_N,		XK_O,
-	XK_P,		XK_Q,		XK_R,		XK_S,
-	XK_T,		XK_U,		XK_V,		XK_W,
-	XK_X,		XK_Y,		XK_Z,		XK_bracketleft,
-	XK_backslash,	XK_bracketright,XK_asciicircum,	XK_underscore,
-	XK_grave,	XK_a,		XK_b,		XK_c,
-	XK_d,		XK_e,		XK_f,		XK_g,
-	XK_h,		XK_i,		XK_j,		XK_k,
-	XK_l,		XK_m,		XK_n,		XK_o,
-	XK_p,		XK_q,		XK_r,		XK_s,
-	XK_t,		XK_u,		XK_v,		XK_w,
-	XK_x,		XK_y,		XK_z,		XK_braceleft,
-	XK_bar,		XK_braceright,	XK_asciitilde,	XK_BackSpace,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	NoSymbol,	NoSymbol,	NoSymbol,	NoSymbol,
-	XK_nobreakspace,XK_exclamdown,	XK_cent,	XK_sterling,
-	XK_currency,	XK_yen,		XK_brokenbar,	XK_section,
-	XK_diaeresis,	XK_copyright,	XK_ordfeminine,	XK_guillemotleft,
-	XK_notsign,	XK_hyphen,	XK_registered,	XK_macron,
-	XK_degree,	XK_plusminus,	XK_twosuperior,	XK_threesuperior,
-	XK_acute,	XK_mu,		XK_paragraph,	XK_periodcentered,
-	XK_cedilla,	XK_onesuperior,	XK_masculine,	XK_guillemotright,
-	XK_onequarter,	XK_onehalf,	XK_threequarters,XK_questiondown,
-	XK_Agrave,	XK_Aacute,	XK_Acircumflex,	XK_Atilde,
-	XK_Adiaeresis,	XK_Aring,	XK_AE,		XK_Ccedilla,
-	XK_Egrave,	XK_Eacute,	XK_Ecircumflex,	XK_Ediaeresis,
-	XK_Igrave,	XK_Iacute,	XK_Icircumflex,	XK_Idiaeresis,
-	XK_ETH,		XK_Ntilde,	XK_Ograve,	XK_Oacute,
-	XK_Ocircumflex,	XK_Otilde,	XK_Odiaeresis,	XK_multiply,
-	XK_Ooblique,	XK_Ugrave,	XK_Uacute,	XK_Ucircumflex,
-	XK_Udiaeresis,	XK_Yacute,	XK_THORN,	XK_ssharp,
-	XK_agrave,	XK_aacute,	XK_acircumflex,	XK_atilde,
-	XK_adiaeresis,	XK_aring,	XK_ae,		XK_ccedilla,
-	XK_egrave,	XK_eacute,	XK_ecircumflex,	XK_ediaeresis,
-	XK_igrave,	XK_iacute,	XK_icircumflex,	XK_idiaeresis,
-	XK_eth,		XK_ntilde,	XK_ograve,	XK_oacute,
-	XK_ocircumflex,	XK_otilde,	XK_odiaeresis,	XK_division,
-	XK_oslash,	XK_ugrave,	XK_uacute,	XK_ucircumflex,
-	XK_udiaeresis,	XK_yacute,	XK_thorn,	XK_ydiaeresis
-};
-
-/*
- * Getting a keycode from scancode
- *
- * With XKB
- * --------
- *
- * We have to enqueue keyboard events using standard X keycodes which correspond
- * to AT scancode + 8; this means that we need to translate the Linux scancode
- * provided by the kernel to an AT scancode -- this translation is not linear
- * and requires that we use a LUT.
- *
- *
- * Without XKB
- * -----------
- *
- * We can use custom keycodes, which makes things simpler; we define our custom
- * keycodes as Linux scancodes + KD_KEY_OFFSET
-*/
-
-/*
-   This LUT translates AT scancodes into Linux ones -- the keymap we create
-   for the core X keyboard protocol has to be AT-scancode based so that it
-   corresponds to the Xkb keymap.
-*/
-#if 0
-static unsigned char at2lnx[] =
-{
-	0x0,    /* no valid scancode */
-	0x01,	/* KEY_Escape */	0x02,	/* KEY_1 */
-	0x03,	/* KEY_2 */		0x04,	/* KEY_3 */
-	0x05,	/* KEY_4 */		0x06,	/* KEY_5 */
-	0x07,	/* KEY_6 */		0x08,	/* KEY_7 */
-	0x09,	/* KEY_8 */		0x0a,	/* KEY_9 */
-	0x0b,	/* KEY_0 */		0x0c,	/* KEY_Minus */
-	0x0d,	/* KEY_Equal */		0x0e,	/* KEY_BackSpace */
-	0x0f,	/* KEY_Tab */		0x10,	/* KEY_Q */
-	0x11,	/* KEY_W */		0x12,	/* KEY_E */
-	0x13,	/* KEY_R */		0x14,	/* KEY_T */
-	0x15,	/* KEY_Y */		0x16,	/* KEY_U */
-	0x17,	/* KEY_I */		0x18,	/* KEY_O */
-	0x19,	/* KEY_P */		0x1a,	/* KEY_LBrace */
-	0x1b,	/* KEY_RBrace */	0x1c,	/* KEY_Enter */
-	0x1d,	/* KEY_LCtrl */		0x1e,	/* KEY_A */
-	0x1f,	/* KEY_S */		0x20,	/* KEY_D */
-	0x21,	/* KEY_F */		0x22,	/* KEY_G */
-	0x23,	/* KEY_H */		0x24,	/* KEY_J */
-	0x25,	/* KEY_K */		0x26,	/* KEY_L */
-	0x27,	/* KEY_SemiColon */	0x28,	/* KEY_Quote */
-	0x29,	/* KEY_Tilde */		0x2a,	/* KEY_ShiftL */
-	0x2b,	/* KEY_BSlash */	0x2c,	/* KEY_Z */
-	0x2d,	/* KEY_X */		0x2e,	/* KEY_C */
-	0x2f,	/* KEY_V */		0x30,	/* KEY_B */
-	0x31,	/* KEY_N */		0x32,	/* KEY_M */
-	0x33,	/* KEY_Comma */		0x34,	/* KEY_Period */
-	0x35,	/* KEY_Slash */		0x36,	/* KEY_ShiftR */
-	0x37,	/* KEY_KP_Multiply */	0x38,	/* KEY_Alt */
-	0x39,	/* KEY_Space */		0x3a,	/* KEY_CapsLock */
-	0x3b,	/* KEY_F1 */		0x3c,	/* KEY_F2 */
-	0x3d,	/* KEY_F3 */		0x3e,	/* KEY_F4 */
-	0x3f,	/* KEY_F5 */		0x40,	/* KEY_F6 */
-	0x41,	/* KEY_F7 */		0x42,	/* KEY_F8 */
-	0x43,	/* KEY_F9 */		0x44,	/* KEY_F10 */
-	0x45,	/* KEY_NumLock */	0x46,	/* KEY_ScrollLock */
-	0x47,	/* KEY_KP_7 */		0x48,	/* KEY_KP_8 */
-	0x49,	/* KEY_KP_9 */		0x4a,	/* KEY_KP_Minus */
-	0x4b,	/* KEY_KP_4 */		0x4c,	/* KEY_KP_5 */
-	0x4d,	/* KEY_KP_6 */		0x4e,	/* KEY_KP_Plus */
-	0x4f,	/* KEY_KP_1 */		0x50,	/* KEY_KP_2 */
-	0x51,	/* KEY_KP_3 */		0x52,	/* KEY_KP_0 */
-	0x53,	/* KEY_KP_Decimal */	0x54,	/* KEY_SysReqest */
-	0x00,	/* 0x55 */		0x56,	/* KEY_Less */
-	0x57,	/* KEY_F11 */		0x58,	/* KEY_F12 */
-	0x66,	/* KEY_Home */		0x67,	/* KEY_Up */
-	0x68,	/* KEY_PgUp */		0x69,	/* KEY_Left */
-	0x5d,	/* KEY_Begin */		0x6a,	/* KEY_Right */
-	0x6b,	/* KEY_End */		0x6c,	/* KEY_Down */
-	0x6d,	/* KEY_PgDown */	0x6e,	/* KEY_Insert */
-	0x6f,	/* KEY_Delete */	0x60,	/* KEY_KP_Enter */
-	0x61,	/* KEY_RCtrl */		0x77,	/* KEY_Pause */
-	0x63,	/* KEY_Print */		0x62,	/* KEY_KP_Divide */
-	0x64,	/* KEY_AltLang */	0x65,	/* KEY_Break */
-	0x00,	/* KEY_LMeta */		0x00,	/* KEY_RMeta */
-	0x7A,	/* KEY_Menu/FOCUS_PF11*/0x00,	/* 0x6e */
-	0x7B,	/* FOCUS_PF12 */	0x00,	/* 0x70 */
-	0x00,	/* 0x71 */		0x00,	/* 0x72 */
-	0x59,	/* FOCUS_PF2 */		0x78,	/* FOCUS_PF9 */
-	0x00,	/* 0x75 */		0x00,	/* 0x76 */
-	0x5A,	/* FOCUS_PF3 */		0x5B,	/* FOCUS_PF4 */
-	0x5C,	/* FOCUS_PF5 */		0x5D,	/* FOCUS_PF6 */
-	0x5E,	/* FOCUS_PF7 */		0x5F,	/* FOCUS_PF8 */
-	0x7C,	/* JAP_86 */		0x79,	/* FOCUS_PF10 */
-	0x00,	/* 0x7f */
-};
-
-#define NUM_AT_KEYS (sizeof(at2lnx)/sizeof(at2lnx[0]))
-#define LNX_KEY_INDEX(n) n < NUM_AT_KEYS ? at2lnx[n] : 0
-
-static unsigned char tbl[KD_MAX_WIDTH] =
-{
-    0,
-    1 << KG_SHIFT,
-    (1 << KG_ALTGR),
-    (1 << KG_ALTGR) | (1 << KG_SHIFT)
-};
-#endif
-
-static void
-readKernelMapping(KdKeyboardInfo *ki)
-{
-#if 0
-    KeySym	    *k;
-    int		    i, j;
-    struct kbentry  kbe;
-    int		    minKeyCode, maxKeyCode;
-    int		    row;
-    int             fd;
-
-    if (!ki)
-        return;
-
-    fd = LinuxConsoleFd;
-
-    minKeyCode = NR_KEYS;
-    maxKeyCode = 0;
-    row = 0;
-    ki->keySyms.mapWidth = KD_MAX_WIDTH;
-    for (i = 0; i < NR_KEYS && row < KD_MAX_LENGTH; ++i)
-    {
-        kbe.kb_index = LNX_KEY_INDEX(i);
-
-        k = ki->keySyms.map + row * ki->keySyms.mapWidth;
-
-	for (j = 0; j < ki->keySyms.mapWidth; ++j)
-	{
-	    unsigned short kval;
-
-	    k[j] = NoSymbol;
-
-	    kbe.kb_table = tbl[j];
-	    kbe.kb_value = 0;
-	    if (ioctl(fd, KDGKBENT, &kbe))
-		continue;
-
-	    kval = KVAL(kbe.kb_value);
-	    switch (KTYP(kbe.kb_value))
-	    {
-	    case KT_LATIN:
-	    case KT_LETTER:
-		k[j] = linux_to_x[kval];
-		break;
-
-	    case KT_FN:
-		if (kval <= 19)
-		    k[j] = XK_F1 + kval;
-		else switch (kbe.kb_value)
-		{
-		case K_FIND:
-		    k[j] = XK_Home; /* or XK_Find */
-		    break;
-		case K_INSERT:
-		    k[j] = XK_Insert;
-		    break;
-		case K_REMOVE:
-		    k[j] = XK_Delete;
-		    break;
-		case K_SELECT:
-		    k[j] = XK_End; /* or XK_Select */
-		    break;
-		case K_PGUP:
-		    k[j] = XK_Prior;
-		    break;
-		case K_PGDN:
-		    k[j] = XK_Next;
-		    break;
-		case K_HELP:
-		    k[j] = XK_Help;
-		    break;
-		case K_DO:
-		    k[j] = XK_Execute;
-		    break;
-		case K_PAUSE:
-		    k[j] = XK_Pause;
-		    break;
-		case K_MACRO:
-		    k[j] = XK_Menu;
-		    break;
-		default:
-		    break;
-		}
-		break;
-
-	    case KT_SPEC:
-		switch (kbe.kb_value)
-		{
-		case K_ENTER:
-		    k[j] = XK_Return;
-		    break;
-		case K_BREAK:
-		    k[j] = XK_Break;
-		    break;
-		case K_CAPS:
-		    k[j] = XK_Caps_Lock;
-		    break;
-		case K_NUM:
-		    k[j] = XK_Num_Lock;
-		    break;
-		case K_HOLD:
-		    k[j] = XK_Scroll_Lock;
-		    break;
-		case K_COMPOSE:
-		    k[j] = XK_Multi_key;
-		    break;
-		default:
-		    break;
-		}
-		break;
-
-	    case KT_PAD:
-		switch (kbe.kb_value)
-		{
-		case K_PPLUS:
-		    k[j] = XK_KP_Add;
-		    break;
-		case K_PMINUS:
-		    k[j] = XK_KP_Subtract;
-		    break;
-		case K_PSTAR:
-		    k[j] = XK_KP_Multiply;
-		    break;
-		case K_PSLASH:
-		    k[j] = XK_KP_Divide;
-		    break;
-		case K_PENTER:
-		    k[j] = XK_KP_Enter;
-		    break;
-		case K_PCOMMA:
-		    k[j] = XK_KP_Separator;
-		    break;
-		case K_PDOT:
-		    k[j] = XK_KP_Decimal;
-		    break;
-		case K_PPLUSMINUS:
-		    k[j] = XK_KP_Subtract;
-		    break;
-		default:
-		    if (kval <= 9)
-			k[j] = XK_KP_0 + kval;
-		    break;
-		}
-		break;
-
-		/*
-		 * KT_DEAD keys are for accelerated diacritical creation.
-		 */
-	    case KT_DEAD:
-		switch (kbe.kb_value)
-		{
-		case K_DGRAVE:
-		    k[j] = XK_dead_grave;
-		    break;
-		case K_DACUTE:
-		    k[j] = XK_dead_acute;
-		    break;
-		case K_DCIRCM:
-		    k[j] = XK_dead_circumflex;
-		    break;
-		case K_DTILDE:
-		    k[j] = XK_dead_tilde;
-		    break;
-		case K_DDIERE:
-		    k[j] = XK_dead_diaeresis;
-		    break;
-		}
-		break;
-
-	    case KT_CUR:
-		switch (kbe.kb_value)
-		{
-		case K_DOWN:
-		    k[j] = XK_Down;
-		    break;
-		case K_LEFT:
-		    k[j] = XK_Left;
-		    break;
-		case K_RIGHT:
-		    k[j] = XK_Right;
-		    break;
-		case K_UP:
-		    k[j] = XK_Up;
-		    break;
-		}
-		break;
-
-	    case KT_SHIFT:
-		switch (kbe.kb_value)
-		{
-		case K_ALTGR:
-		    k[j] = XK_Mode_switch;
-		    break;
-		case K_ALT:
-		    k[j] = (kbe.kb_index == 0x64 ?
-			  XK_Alt_R : XK_Alt_L);
-		    break;
-		case K_CTRL:
-		    k[j] = (kbe.kb_index == 0x61 ?
-			  XK_Control_R : XK_Control_L);
-		    break;
-		case K_CTRLL:
-		    k[j] = XK_Control_L;
-		    break;
-		case K_CTRLR:
-		    k[j] = XK_Control_R;
-		    break;
-		case K_SHIFT:
-		    k[j] = (kbe.kb_index == 0x36 ?
-			  XK_Shift_R : XK_Shift_L);
-		    break;
-		case K_SHIFTL:
-		    k[j] = XK_Shift_L;
-		    break;
-		case K_SHIFTR:
-		    k[j] = XK_Shift_R;
-		    break;
-		default:
-		    break;
-		}
-		break;
-
-		/*
-		 * KT_ASCII keys accumulate a 3 digit decimal number that gets
-		 * emitted when the shift state changes. We can't emulate that.
-		 */
-	    case KT_ASCII:
-		break;
-
-	    case KT_LOCK:
-		if (kbe.kb_value == K_SHIFTLOCK)
-		    k[j] = XK_Shift_Lock;
-		break;
-
-#ifdef KT_X
-	    case KT_X:
-		/* depends on new keyboard symbols in file linux/keyboard.h */
-		if(kbe.kb_value == K_XMENU) k[j] = XK_Menu;
-		if(kbe.kb_value == K_XTELEPHONE) k[j] = XK_telephone;
-		break;
-#endif
-#ifdef KT_XF
-	    case KT_XF:
-		/* special linux keysyms which map directly to XF86 keysyms */
-		k[j] = (kbe.kb_value & 0xFF) + 0x1008FF00;
-		break;
-#endif
-
-	    default:
-		break;
-	    }
-	    if (i < minKeyCode)
-		minKeyCode = i;
-	    if (i > maxKeyCode)
-		maxKeyCode = i;
-	}
-
-	if (minKeyCode == NR_KEYS)
-	    continue;
-
-	if (k[3] == k[2]) k[3] = NoSymbol;
-	if (k[2] == k[1]) k[2] = NoSymbol;
-	if (k[1] == k[0]) k[1] = NoSymbol;
-	if (k[0] == k[2] && k[1] == k[3]) k[2] = k[3] = NoSymbol;
-	if (k[3] == k[0] && k[2] == k[1] && k[2] == NoSymbol) k[3] =NoSymbol;
-	row++;
-    }
-    ki->minScanCode = minKeyCode;
-    ki->maxScanCode = maxKeyCode;
-#endif
-}
-
-/*
- * We need these to handle extended scancodes correctly (I could just use the
- * numbers below, but this makes the code more readable
- */
-
-/* The prefix codes */
-#define KEY_Prefix0      /* special               0x60  */   96
-#define KEY_Prefix1      /* special               0x61  */   97
-
-/* The raw scancodes */
-#define KEY_Enter        /* Enter                 0x1c  */   28
-#define KEY_LCtrl        /* Ctrl(left)            0x1d  */   29
-#define KEY_Slash        /* / (Slash)   ?         0x35  */   53
-#define KEY_KP_Multiply  /* *                     0x37  */   55
-#define KEY_Alt          /* Alt(left)             0x38  */   56
-#define KEY_F3           /* F3                    0x3d  */   61
-#define KEY_F4           /* F4                    0x3e  */   62
-#define KEY_F5           /* F5                    0x3f  */   63
-#define KEY_F6           /* F6                    0x40  */   64
-#define KEY_F7           /* F7                    0x41  */   65
-#define KEY_ScrollLock   /* ScrollLock            0x46  */   70
-#define KEY_KP_7         /* 7           Home      0x47  */   71
-#define KEY_KP_8         /* 8           Up        0x48  */   72
-#define KEY_KP_9         /* 9           PgUp      0x49  */   73
-#define KEY_KP_Minus     /* - (Minus)             0x4a  */   74
-#define KEY_KP_4         /* 4           Left      0x4b  */   75
-#define KEY_KP_5         /* 5                     0x4c  */   76
-#define KEY_KP_6         /* 6           Right     0x4d  */   77
-#define KEY_KP_Plus      /* + (Plus)              0x4e  */   78
-#define KEY_KP_1         /* 1           End       0x4f  */   79
-#define KEY_KP_2         /* 2           Down      0x50  */   80
-#define KEY_KP_3         /* 3           PgDown    0x51  */   81
-#define KEY_KP_0         /* 0           Insert    0x52  */   82
-#define KEY_KP_Decimal   /* . (Decimal) Delete    0x53  */   83
-#define KEY_Home         /* Home                  0x59  */   89
-#define KEY_Up           /* Up                    0x5a  */   90
-#define KEY_PgUp         /* PgUp                  0x5b  */   91
-#define KEY_Left         /* Left                  0x5c  */   92
-#define KEY_Begin        /* Begin                 0x5d  */   93
-#define KEY_Right        /* Right                 0x5e  */   94
-#define KEY_End          /* End                   0x5f  */   95
-#define KEY_Down         /* Down                  0x60  */   96
-#define KEY_PgDown       /* PgDown                0x61  */   97
-#define KEY_Insert       /* Insert                0x62  */   98
-#define KEY_Delete       /* Delete                0x63  */   99
-#define KEY_KP_Enter     /* Enter                 0x64  */  100
-#define KEY_RCtrl        /* Ctrl(right)           0x65  */  101
-#define KEY_Pause        /* Pause                 0x66  */  102
-#define KEY_Print        /* Print                 0x67  */  103
-#define KEY_KP_Divide    /* Divide                0x68  */  104
-#define KEY_AltLang      /* AtlLang(right)        0x69  */  105
-#define KEY_Break        /* Break                 0x6a  */  106
-#define KEY_LMeta        /* Left Meta             0x6b  */  107
-#define KEY_RMeta        /* Right Meta            0x6c  */  108
-#define KEY_Menu         /* Menu                  0x6d  */  109
-#define KEY_F13          /* F13                   0x6e  */  110
-#define KEY_F14          /* F14                   0x6f  */  111
-#define KEY_F15          /* F15                   0x70  */  112
-#define KEY_F16          /* F16                   0x71  */  113
-#define KEY_F17          /* F17                   0x72  */  114
-#define KEY_KP_DEC       /* KP_DEC                0x73  */  115
-
-static void
-LinuxKeyboardRead (int fd, void *closure)
-{
-    unsigned char   buf[256], *b;
-    int		    n;
-    unsigned char   prefix = 0, scancode = 0;
-
-    while ((n = read (fd, buf, sizeof (buf))) > 0) {
-	b = buf;
-	while (n--) {
-            /*
-             * With xkb we use RAW mode for reading the console, which allows us
-             * process extended scancodes.
-             *
-             * See if this is a prefix extending the following keycode
-             */
-            if (!prefix && ((b[0] & 0x7f) == KEY_Prefix0))
-            {
-                    prefix = KEY_Prefix0;
-                    /* swallow this up */
-                    b++;
-                    continue;
-            }
-            else if (!prefix && ((b[0] & 0x7f) == KEY_Prefix1))
-            {
-                    prefix = KEY_Prefix1;
-                    /* swallow this up */
-                    b++;
-                    continue;
-            }
-            scancode = b[0] & 0x7f;
-
-            switch (prefix) {
-                    /* from xf86Events.c */
-                    case KEY_Prefix0:
-                    {
-                        switch (scancode) {
-                            case KEY_KP_7:
-                                scancode = KEY_Home;      break;  /* curs home */
-                            case KEY_KP_8:
-                                scancode = KEY_Up;        break;  /* curs up */
-                            case KEY_KP_9:
-                                scancode = KEY_PgUp;      break;  /* curs pgup */
-                            case KEY_KP_4:
-                                scancode = KEY_Left;      break;  /* curs left */
-                            case KEY_KP_5:
-                                scancode = KEY_Begin;     break;  /* curs begin */
-                            case KEY_KP_6:
-                                scancode = KEY_Right;     break;  /* curs right */
-                            case KEY_KP_1:
-                                scancode = KEY_End;       break;  /* curs end */
-                            case KEY_KP_2:
-                                scancode = KEY_Down;      break;  /* curs down */
-                            case KEY_KP_3:
-                                scancode = KEY_PgDown;    break;  /* curs pgdown */
-                            case KEY_KP_0:
-                                scancode = KEY_Insert;    break;  /* curs insert */
-                            case KEY_KP_Decimal:
-                                scancode = KEY_Delete;    break;  /* curs delete */
-                            case KEY_Enter:
-                                scancode = KEY_KP_Enter;  break;  /* keypad enter */
-                            case KEY_LCtrl:
-                                scancode = KEY_RCtrl;     break;  /* right ctrl */
-                            case KEY_KP_Multiply:
-                                scancode = KEY_Print;     break;  /* print */
-                            case KEY_Slash:
-                                scancode = KEY_KP_Divide; break;  /* keyp divide */
-                            case KEY_Alt:
-                                scancode = KEY_AltLang;   break;  /* right alt */
-                            case KEY_ScrollLock:
-                                scancode = KEY_Break;     break;  /* curs break */
-                            case 0x5b:
-                                scancode = KEY_LMeta;     break;
-                            case 0x5c:
-                                scancode = KEY_RMeta;     break;
-                            case 0x5d:
-                                scancode = KEY_Menu;      break;
-                            case KEY_F3:
-                                scancode = KEY_F13;       break;
-                            case KEY_F4:
-                                scancode = KEY_F14;       break;
-                            case KEY_F5:
-                                scancode = KEY_F15;       break;
-                            case KEY_F6:
-                                scancode = KEY_F16;       break;
-                            case KEY_F7:
-                                scancode = KEY_F17;       break;
-                            case KEY_KP_Plus:
-                                scancode = KEY_KP_DEC;    break;
-                            /* Ignore virtual shifts (E0 2A, E0 AA, E0 36, E0 B6) */
-                            case 0x2A:
-                            case 0x36:
-                                b++;
-                                prefix = 0;
-                                continue;
-                            default:
-                                 /*
-                                  * "Internet" keyboards are generating lots of new
-                                  * codes.  Let them pass.  There is little consistency
-                                  * between them, so don't bother with symbolic names at
-                                  * this level.
-                                  */
-                                scancode += 0x78;
-                        }
-                        break;
-                    }
-
-                    case KEY_Prefix1:
-                    {
-                        /* we do no handle these */
-                        b++;
-                        prefix = 0;
-                        continue;
-                    }
-
-                    default: /* should not happen*/
-                    case 0: /* do nothing */
-                        ;
-            }
-
-            prefix = 0;
-	    KdEnqueueKeyboardEvent (closure, scancode, b[0] & 0x80);
-	    b++;
-	}
-    }
-}
-
-static int		LinuxKbdTrans;
-static struct termios	LinuxTermios;
-
-static Status
-LinuxKeyboardEnable (KdKeyboardInfo *ki)
-{
-    struct termios nTty;
-    unsigned char   buf[256];
-    int		    n;
-    int             fd;
-
-    if (!ki)
-        return !Success;
-
-    fd = LinuxConsoleFd;
-    ki->driverPrivate = (void *) fd;
-
-    ioctl (fd, KDGKBMODE, &LinuxKbdTrans);
-    tcgetattr (fd, &LinuxTermios);
-    ioctl(fd, KDSKBMODE, K_RAW);
-    nTty = LinuxTermios;
-    nTty.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);
-    nTty.c_oflag = 0;
-    nTty.c_cflag = CREAD | CS8;
-    nTty.c_lflag = 0;
-    nTty.c_cc[VTIME]=0;
-    nTty.c_cc[VMIN]=1;
-    cfsetispeed(&nTty, 9600);
-    cfsetospeed(&nTty, 9600);
-    tcsetattr(fd, TCSANOW, &nTty);
-    /*
-     * Flush any pending keystrokes
-     */
-    while ((n = read (fd, buf, sizeof (buf))) > 0)
-	;
-    KdRegisterFd (fd, LinuxKeyboardRead, ki);
-    return Success;
-}
-
-static void
-LinuxKeyboardDisable (KdKeyboardInfo *ki)
-{
-    int fd;
-
-    if (!ki)
-        return;
-
-    fd = (int) ki->driverPrivate;
-
-    KdUnregisterFd(ki, fd, FALSE);
-    ioctl(fd, KDSKBMODE, LinuxKbdTrans);
-    tcsetattr(fd, TCSANOW, &LinuxTermios);
-}
-
-static Status
-LinuxKeyboardInit (KdKeyboardInfo *ki)
-{
-    if (!ki)
-        return !Success;
-
-    free(ki->path);
-    ki->path = strdup("console");
-    free(ki->name);
-    ki->name = strdup("Linux console keyboard");
-
-    readKernelMapping (ki);
-
-    return Success;
-}
-
-static void
-LinuxKeyboardLeds (KdKeyboardInfo *ki, int leds)
-{
-    if (!ki)
-        return;
-
-    ioctl ((int)ki->driverPrivate, KDSETLED, leds & 7);
-}
-
-KdKeyboardDriver LinuxKeyboardDriver = {
-    "keyboard",
-    .Init = LinuxKeyboardInit,
-    .Enable = LinuxKeyboardEnable,
-    .Leds = LinuxKeyboardLeds,
-    .Disable = LinuxKeyboardDisable,
-};
diff --git a/hw/kdrive/linux/linux.c b/hw/kdrive/linux/linux.c
deleted file mode 100644
index 9863c14..0000000
--- a/hw/kdrive/linux/linux.c
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * 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 Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include <errno.h>
-#include <signal.h>
-#include <linux/vt.h>
-#include <linux/kd.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <X11/keysym.h>
-#include <linux/apm_bios.h>
-
-#ifdef KDRIVE_MOUSE
-extern KdPointerDriver	LinuxMouseDriver;
-extern KdPointerDriver	Ps2MouseDriver;
-extern KdPointerDriver	MsMouseDriver;
-#endif
-#ifdef TSLIB
-extern KdPointerDriver	TsDriver;
-#endif
-#ifdef KDRIVE_EVDEV
-extern KdPointerDriver	LinuxEvdevMouseDriver;
-extern KdKeyboardDriver LinuxEvdevKeyboardDriver;
-#endif
-#ifdef KDRIVE_KBD
-extern KdKeyboardDriver	LinuxKeyboardDriver;
-#endif
-
-static int  vtno;
-int  LinuxConsoleFd;
-int  LinuxApmFd = -1;
-static int  activeVT;
-static Bool enabled;
-
-static void
-LinuxVTRequest (int sig)
-{
-    kdSwitchPending = TRUE;
-}
-
-/* Check before chowning -- this avoids touching the file system */
-static void
-LinuxCheckChown (char *file)
-{
-    struct stat	    st;
-    __uid_t	    u;
-    __gid_t	    g;
-
-    if (stat (file, &st) < 0)
-	return;
-    u = getuid ();
-    g = getgid ();
-    if (st.st_uid != u || st.st_gid != g)
-	chown (file, u, g);
-}
-
-static int
-LinuxInit (void)
-{
-    int fd = -1;
-    char vtname[11];
-    struct vt_stat vts;
-
-    LinuxConsoleFd = -1;
-    /* check if we're run with euid==0 */
-    if (geteuid() != 0)
-    {
-	FatalError("LinuxInit: Server must be suid root\n");
-    }
-
-    if (kdVirtualTerminal >= 0)
-	vtno = kdVirtualTerminal;
-    else
-    {
-	if ((fd = open("/dev/tty0",O_WRONLY,0)) < 0)
-	{
-	    FatalError(
-		       "LinuxInit: Cannot open /dev/tty0 (%s)\n",
-		       strerror(errno));
-	}
-	if ((ioctl(fd, VT_OPENQRY, &vtno) < 0) ||
-	    (vtno == -1))
-	{
-	    FatalError("xf86OpenConsole: Cannot find a free VT\n");
-	}
-	close(fd);
-    }
-
-    sprintf(vtname,"/dev/tty%d",vtno); /* /dev/tty1-64 */
-
-    if ((LinuxConsoleFd = open(vtname, O_RDWR|O_NDELAY, 0)) < 0)
-    {
-	FatalError("LinuxInit: Cannot open %s (%s)\n",
-		   vtname, strerror(errno));
-    }
-
-    /* change ownership of the vt */
-    LinuxCheckChown (vtname);
-
-    /*
-     * the current VT device we're running on is not "console", we want
-     * to grab all consoles too
-     *
-     * Why is this needed?
-     */
-    LinuxCheckChown ("/dev/tty0");
-    /*
-     * Linux doesn't switch to an active vt after the last close of a vt,
-     * so we do this ourselves by remembering which is active now.
-     */
-    memset (&vts, '\0', sizeof (vts));	/* valgrind */
-    if (ioctl(LinuxConsoleFd, VT_GETSTATE, &vts) == 0)
-    {
-	activeVT = vts.v_active;
-    }
-
-    return 1;
-}
-
-static void
-LinuxSetSwitchMode (int mode)
-{
-    struct sigaction	act;
-    struct vt_mode	VT;
-
-    if (ioctl(LinuxConsoleFd, VT_GETMODE, &VT) < 0)
-    {
-	FatalError ("LinuxInit: VT_GETMODE failed\n");
-    }
-
-    if (mode == VT_PROCESS)
-    {
-	act.sa_handler = LinuxVTRequest;
-	sigemptyset (&act.sa_mask);
-	act.sa_flags = 0;
-	sigaction (SIGUSR1, &act, 0);
-
-	VT.mode = mode;
-	VT.relsig = SIGUSR1;
-	VT.acqsig = SIGUSR1;
-    }
-    else
-    {
-	act.sa_handler = SIG_IGN;
-	sigemptyset (&act.sa_mask);
-	act.sa_flags = 0;
-	sigaction (SIGUSR1, &act, 0);
-
-	VT.mode = mode;
-	VT.relsig = 0;
-	VT.acqsig = 0;
-    }
-    if (ioctl(LinuxConsoleFd, VT_SETMODE, &VT) < 0)
-    {
-	FatalError("LinuxInit: VT_SETMODE failed\n");
-    }
-}
-
-static void
-LinuxApmBlock (pointer blockData, OSTimePtr pTimeout, pointer pReadmask)
-{
-}
-
-static Bool LinuxApmRunning;
-
-static void
-LinuxApmWakeup (pointer blockData, int result, pointer pReadmask)
-{
-    fd_set  *readmask = (fd_set *) pReadmask;
-
-    if (result > 0 && LinuxApmFd >= 0 && FD_ISSET (LinuxApmFd, readmask))
-    {
-	apm_event_t event;
-	Bool	    running = LinuxApmRunning;
-	int	    cmd = APM_IOC_SUSPEND;
-
-	while (read (LinuxApmFd, &event, sizeof (event)) == sizeof (event))
-	{
-	    switch (event) {
-	    case APM_SYS_STANDBY:
-	    case APM_USER_STANDBY:
-		running = FALSE;
-		cmd = APM_IOC_STANDBY;
-		break;
-	    case APM_SYS_SUSPEND:
-	    case APM_USER_SUSPEND:
-	    case APM_CRITICAL_SUSPEND:
-		running = FALSE;
-		cmd = APM_IOC_SUSPEND;
-		break;
-	    case APM_NORMAL_RESUME:
-	    case APM_CRITICAL_RESUME:
-	    case APM_STANDBY_RESUME:
-		running = TRUE;
-		break;
-	    }
-	}
-	if (running && !LinuxApmRunning)
-	{
-	    KdResume ();
-	    LinuxApmRunning = TRUE;
-	}
-	else if (!running && LinuxApmRunning)
-	{
-	    KdSuspend ();
-	    LinuxApmRunning = FALSE;
-	    ioctl (LinuxApmFd, cmd, 0);
-	}
-    }
-}
-
-#ifdef FNONBLOCK
-#define NOBLOCK FNONBLOCK
-#else
-#define NOBLOCK FNDELAY
-#endif
-
-static void
-LinuxEnable (void)
-{
-    if (enabled)
-	return;
-    if (kdSwitchPending)
-    {
-	kdSwitchPending = FALSE;
-	ioctl (LinuxConsoleFd, VT_RELDISP, VT_ACKACQ);
-    }
-    /*
-     * Open the APM driver
-     */
-    LinuxApmFd = open ("/dev/apm_bios", 2);
-    if (LinuxApmFd < 0 && errno == ENOENT)
-	LinuxApmFd = open ("/dev/misc/apm_bios", 2);
-    if (LinuxApmFd >= 0)
-    {
-	LinuxApmRunning = TRUE;
-	fcntl (LinuxApmFd, F_SETFL, fcntl (LinuxApmFd, F_GETFL) | NOBLOCK);
-	RegisterBlockAndWakeupHandlers (LinuxApmBlock, LinuxApmWakeup, 0);
-	AddEnabledDevice (LinuxApmFd);
-    }
-
-    /*
-     * now get the VT
-     */
-    LinuxSetSwitchMode (VT_AUTO);
-    if (ioctl(LinuxConsoleFd, VT_ACTIVATE, vtno) != 0)
-    {
-	FatalError("LinuxInit: VT_ACTIVATE failed\n");
-    }
-    if (ioctl(LinuxConsoleFd, VT_WAITACTIVE, vtno) != 0)
-    {
-	FatalError("LinuxInit: VT_WAITACTIVE failed\n");
-    }
-    LinuxSetSwitchMode (VT_PROCESS);
-    if (ioctl(LinuxConsoleFd, KDSETMODE, KD_GRAPHICS) < 0)
-    {
-	FatalError("LinuxInit: KDSETMODE KD_GRAPHICS failed\n");
-    }
-    enabled = TRUE;
-}
-
-static void
-LinuxDisable (void)
-{
-    ioctl(LinuxConsoleFd, KDSETMODE, KD_TEXT);  /* Back to text mode ... */
-    if (kdSwitchPending)
-    {
-	kdSwitchPending = FALSE;
-	ioctl (LinuxConsoleFd, VT_RELDISP, 1);
-    }
-    enabled = FALSE;
-    if (LinuxApmFd >= 0)
-    {
-	RemoveBlockAndWakeupHandlers (LinuxApmBlock, LinuxApmWakeup, 0);
-	RemoveEnabledDevice (LinuxApmFd);
-	close (LinuxApmFd);
-	LinuxApmFd = -1;
-    }
-}
-
-static void
-LinuxFini (void)
-{
-    struct vt_mode   VT;
-    struct vt_stat  vts;
-    int		    fd;
-
-    if (LinuxConsoleFd < 0)
-	return;
-
-    if (ioctl(LinuxConsoleFd, VT_GETMODE, &VT) != -1)
-    {
-	VT.mode = VT_AUTO;
-	ioctl(LinuxConsoleFd, VT_SETMODE, &VT); /* set dflt vt handling */
-    }
-    memset (&vts, '\0', sizeof (vts));	/* valgrind */
-    ioctl (LinuxConsoleFd, VT_GETSTATE, &vts);
-    if (vtno == vts.v_active)
-    {
-	/*
-	 * Find a legal VT to switch to, either the one we started from
-	 * or the lowest active one that isn't ours
-	 */
-	if (activeVT < 0 ||
-	    activeVT == vts.v_active ||
-	    !(vts.v_state & (1 << activeVT)))
-	{
-	    for (activeVT = 1; activeVT < 16; activeVT++)
-		if (activeVT != vtno && (vts.v_state & (1 << activeVT)))
-		    break;
-	    if (activeVT == 16)
-		activeVT = -1;
-	}
-	/*
-	 * Perform a switch back to the active VT when we were started
-	 */
-	if (activeVT >= -1)
-	{
-	    ioctl (LinuxConsoleFd, VT_ACTIVATE, activeVT);
-	    ioctl (LinuxConsoleFd, VT_WAITACTIVE, activeVT);
-	    activeVT = -1;
-	}
-    }
-    close(LinuxConsoleFd);                /* make the vt-manager happy */
-    LinuxConsoleFd = -1;
-    fd = open ("/dev/tty0", O_RDWR|O_NDELAY, 0);
-    if (fd >= 0)
-    {
-	memset (&vts, '\0', sizeof (vts));	/* valgrind */
-	ioctl (fd, VT_GETSTATE, &vts);
-	if (ioctl (fd, VT_DISALLOCATE, vtno) < 0)
-	    fprintf (stderr, "Can't deallocate console %d %s\n", vtno, strerror(errno));
-	close (fd);
-    }
-    return;
-}
-
-void
-KdOsAddInputDrivers (void)
-{
-#ifdef KDRIVE_MOUSE
-    KdAddPointerDriver(&LinuxMouseDriver);
-    KdAddPointerDriver(&MsMouseDriver);
-    KdAddPointerDriver(&Ps2MouseDriver);
-#endif
-#ifdef TSLIB
-    KdAddPointerDriver(&TsDriver);
-#endif
-#ifdef KDRIVE_EVDEV
-    KdAddPointerDriver(&LinuxEvdevMouseDriver);
-    KdAddKeyboardDriver(&LinuxEvdevKeyboardDriver);
-#endif
-#ifdef KDRIVE_KBD
-    KdAddKeyboardDriver(&LinuxKeyboardDriver);
-#endif
-}
-
-static void
-LinuxBell(int volume, int pitch, int duration)
-{
-    if (volume && pitch)
-        ioctl(LinuxConsoleFd, KDMKTONE, ((1193190 / pitch) & 0xffff) |
-              (((unsigned long)duration * volume / 50) << 16));
-}
-
-KdOsFuncs   LinuxFuncs = {
-    .Init = LinuxInit,
-    .Enable = LinuxEnable,
-    .Disable = LinuxDisable,
-    .Fini = LinuxFini,
-    .Bell = LinuxBell,
-};
-
-void
-OsVendorInit (void)
-{
-    KdOsInit (&LinuxFuncs);
-}
diff --git a/hw/kdrive/linux/mouse.c b/hw/kdrive/linux/mouse.c
deleted file mode 100644
index 1db5348..0000000
--- a/hw/kdrive/linux/mouse.c
+++ /dev/null
@@ -1,1030 +0,0 @@
-/*
- * Copyright © 2001 Keith Packard
- *
- * 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 Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include <errno.h>
-#include <termios.h>
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include <X11/Xpoll.h>
-#include "inputstr.h"
-#include "scrnintstr.h"
-#include "kdrive.h"
-
-#undef DEBUG
-#undef DEBUG_BYTES
-#define KBUFIO_SIZE 256
-#define MOUSE_TIMEOUT	100
-
-typedef struct _kbufio {
-    int		    fd;
-    unsigned char   buf[KBUFIO_SIZE];
-    int		    avail;
-    int		    used;
-} Kbufio;
-
-static Bool
-MouseWaitForReadable (int fd, int timeout)
-{
-    fd_set	    set;
-    struct timeval  tv, *tp;
-    int		    n;
-    CARD32	    done;
-
-    done = GetTimeInMillis () + timeout;
-    for (;;)
-    {
-	FD_ZERO (&set);
-	FD_SET (fd, &set);
-	if (timeout == -1)
-	    tp = 0;
-	else
-	{
-	    tv.tv_sec = timeout / 1000;
-	    tv.tv_usec = (timeout % 1000) * 1000;
-	    tp = &tv;
-	}
-	n = select (fd + 1, &set, 0, 0, tp);
-	if (n > 0)
-	    return TRUE;
-	if (n < 0 && (errno == EAGAIN || errno == EINTR))
-	{
-	    timeout = (int) (done - GetTimeInMillis ());
-	    if (timeout > 0)
-		continue;
-	}
-	break;
-    }
-    return FALSE;
-}
-
-static int
-MouseReadByte (Kbufio *b, int timeout)
-{
-    int	n;
-    if (b->avail <= b->used)
-    {
-	if (timeout && !MouseWaitForReadable (b->fd, timeout))
-	{
-#ifdef DEBUG_BYTES
-	    ErrorF ("\tTimeout %d\n", timeout);
-#endif
-	    return -1;
-	}
-	n = read (b->fd, b->buf, KBUFIO_SIZE);
-	if (n <= 0)
-	    return -1;
-        b->avail = n;
-        b->used = 0;
-    }
-#ifdef DEBUG_BYTES
-    ErrorF ("\tget %02x\n", b->buf[b->used]);
-#endif
-    return b->buf[b->used++];
-}
-
-#if NOTUSED
-static int
-MouseFlush (Kbufio *b, char *buf, int size)
-{
-    CARD32  now = GetTimeInMillis ();
-    CARD32  done = now + 100;
-    int	    c;
-    int	    n = 0;
-
-    while ((c = MouseReadByte (b, done - now)) != -1)
-    {
-	if (buf)
-	{
-	    if (n == size)
-	    {
-		memmove (buf, buf + 1, size - 1);
-		n--;
-	    }
-	    buf[n++] = c;
-	}
-	now = GetTimeInMillis ();
-	if ((INT32) (now - done) >= 0)
-	    break;
-    }
-    return n;
-}
-
-static int
-MousePeekByte (Kbufio *b, int timeout)
-{
-    int	    c;
-
-    c = MouseReadByte (b, timeout);
-    if (c != -1)
-	--b->used;
-    return c;
-}
-#endif /* NOTUSED */
-
-static Bool
-MouseWaitForWritable (int fd, int timeout)
-{
-    fd_set	    set;
-    struct timeval  tv, *tp;
-    int		    n;
-
-    FD_ZERO (&set);
-    FD_SET (fd, &set);
-    if (timeout == -1)
-	tp = 0;
-    else
-    {
-	tv.tv_sec = timeout / 1000;
-	tv.tv_usec = (timeout % 1000) * 1000;
-	tp = &tv;
-    }
-    n = select (fd + 1, 0, &set, 0, tp);
-    if (n > 0)
-	return TRUE;
-    return FALSE;
-}
-
-static Bool
-MouseWriteByte (int fd, unsigned char c, int timeout)
-{
-    int	ret;
-
-#ifdef DEBUG_BYTES
-    ErrorF ("\tput %02x\n", c);
-#endif
-    for (;;)
-    {
-	ret = write (fd, &c, 1);
-	if (ret == 1)
-	    return TRUE;
-	if (ret == 0)
-	    return FALSE;
-	if (errno != EWOULDBLOCK)
-	    return FALSE;
-	if (!MouseWaitForWritable (fd, timeout))
-	    return FALSE;
-    }
-}
-
-static Bool
-MouseWriteBytes (int fd, unsigned char *c, int n, int timeout)
-{
-    while (n--)
-	if (!MouseWriteByte (fd, *c++, timeout))
-	    return FALSE;
-    return TRUE;
-}
-
-#define MAX_MOUSE   10	    /* maximum length of mouse protocol */
-#define MAX_SKIP    16	    /* number of error bytes before switching */
-#define MAX_VALID   4	    /* number of valid packets before accepting */
-
-typedef struct _kmouseProt {
-    char	    *name;
-    Bool	    (*Complete) (KdPointerInfo *pi, unsigned char *ev, int ne);
-    int		    (*Valid) (KdPointerInfo *pi, unsigned char *ev, int ne);
-    Bool	    (*Parse) (KdPointerInfo *pi, unsigned char *ev, int ne);
-    Bool	    (*Init) (KdPointerInfo *pi);
-    unsigned char   headerMask, headerValid;
-    unsigned char   dataMask, dataValid;
-    Bool	    tty;
-    unsigned int    c_iflag;
-    unsigned int    c_oflag;
-    unsigned int    c_lflag;
-    unsigned int    c_cflag;
-    unsigned int    speed;
-    unsigned char   *init;
-    unsigned long   state;
-} KmouseProt;
-
-typedef enum _kmouseStage {
-    MouseBroken, MouseTesting, MouseWorking
-} KmouseStage;
-
-typedef struct _kmouse {
-    Kbufio		iob;
-    const KmouseProt	*prot;
-    int			i_prot;
-    KmouseStage		stage;	/* protocol verification stage */
-    Bool		tty;	/* mouse device is a tty */
-    int			valid;	/* sequential valid events */
-    int			tested;	/* bytes scanned during Testing phase */
-    int			invalid;/* total invalid bytes for this protocol */
-    unsigned long	state;	/* private per protocol, init to prot->state */
-} Kmouse;
-
-static int mouseValid (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    Kmouse		*km = pi->driverPrivate;
-    const KmouseProt	*prot = km->prot;
-    int	    i;
-
-    for (i = 0; i < ne; i++)
-	if ((ev[i] & prot->headerMask) == prot->headerValid)
-	    break;
-    if (i != 0)
-	return i;
-    for (i = 1; i < ne; i++)
-	if ((ev[i] & prot->dataMask) != prot->dataValid)
-	    return -1;
-    return 0;
-}
-
-static Bool threeComplete (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    return ne == 3;
-}
-
-static Bool fourComplete (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    return ne == 4;
-}
-
-static Bool fiveComplete (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    return ne == 5;
-}
-
-static Bool MouseReasonable (KdPointerInfo *pi, unsigned long flags, int dx, int dy)
-{
-    Kmouse		*km = pi->driverPrivate;
-
-    if (km->stage == MouseWorking)
-	return TRUE;
-    if (dx < -50 || dx > 50)
-    {
-#ifdef DEBUG
-	ErrorF ("Large X %d\n", dx);
-#endif
-	return FALSE;
-    }
-    if (dy < -50 || dy > 50)
-    {
-#ifdef DEBUG
-	ErrorF ("Large Y %d\n", dy);
-#endif
-	return FALSE;
-    }
-    return TRUE;
-}
-
-/*
- * Standard PS/2 mouse protocol
- */
-static Bool ps2Parse (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    Kmouse	    *km = pi->driverPrivate;
-    int		    dx, dy, dz;
-    unsigned long   flags;
-    unsigned long   flagsrelease = 0;
-
-    flags = KD_MOUSE_DELTA;
-    if (ev[0] & 4)
-	flags |= KD_BUTTON_2;
-    if (ev[0] & 2)
-	flags |= KD_BUTTON_3;
-    if (ev[0] & 1)
-	flags |= KD_BUTTON_1;
-
-    if (ne > 3)
-    {
-	dz = (int) (signed char) ev[3];
-	if (dz < 0)
-	{
-	    flags |= KD_BUTTON_4;
-	    flagsrelease = KD_BUTTON_4;
-	}
-	else if (dz > 0)
-	{
-	    flags |= KD_BUTTON_5;
-	    flagsrelease = KD_BUTTON_5;
-	}
-    }
-
-    dx = ev[1];
-    if (ev[0] & 0x10)
-	dx -= 256;
-    dy = ev[2];
-    if (ev[0] & 0x20)
-	dy -= 256;
-    dy = -dy;
-    if (!MouseReasonable (pi, flags, dx, dy))
-	return FALSE;
-    if (km->stage == MouseWorking)
-    {
-	KdEnqueuePointerEvent (pi, flags, dx, dy, 0);
-	if (flagsrelease)
-	{
-	    flags &= ~flagsrelease;
-	    KdEnqueuePointerEvent (pi, flags, dx, dy, 0);
-	}
-    }
-    return TRUE;
-}
-
-static Bool ps2Init (KdPointerInfo *pi);
-
-static const KmouseProt ps2Prot = {
-    "ps/2",
-    threeComplete, mouseValid, ps2Parse, ps2Init,
-    0x08, 0x08, 0x00, 0x00,
-    FALSE
-};
-
-static const KmouseProt imps2Prot = {
-    "imps/2",
-    fourComplete, mouseValid, ps2Parse, ps2Init,
-    0x08, 0x08, 0x00, 0x00,
-    FALSE
-};
-
-static const KmouseProt exps2Prot = {
-    "exps/2",
-    fourComplete, mouseValid, ps2Parse, ps2Init,
-    0x08, 0x08, 0x00, 0x00,
-    FALSE
-};
-
-/*
- * Once the mouse is known to speak ps/2 protocol, go and find out
- * what advanced capabilities it has and turn them on
- */
-
-/* these extracted from FreeBSD 4.3 sys/dev/kbd/atkbdcreg.h */
-
-/* aux device commands (sent to KBD_DATA_PORT) */
-#define PSMC_SET_SCALING11      0x00e6
-#define PSMC_SET_SCALING21      0x00e7
-#define PSMC_SET_RESOLUTION     0x00e8
-#define PSMC_SEND_DEV_STATUS    0x00e9
-#define PSMC_SET_STREAM_MODE    0x00ea
-#define PSMC_SEND_DEV_DATA      0x00eb
-#define PSMC_SET_REMOTE_MODE    0x00f0
-#define PSMC_SEND_DEV_ID        0x00f2
-#define PSMC_SET_SAMPLING_RATE  0x00f3
-#define PSMC_ENABLE_DEV         0x00f4
-#define PSMC_DISABLE_DEV        0x00f5
-#define PSMC_SET_DEFAULTS       0x00f6
-#define PSMC_RESET_DEV          0x00ff
-
-/* PSMC_SET_RESOLUTION argument */
-#define PSMD_RES_LOW            0       /* typically 25ppi */
-#define PSMD_RES_MEDIUM_LOW     1       /* typically 50ppi */
-#define PSMD_RES_MEDIUM_HIGH    2       /* typically 100ppi (default) */
-#define PSMD_RES_HIGH           3       /* typically 200ppi */
-#define PSMD_MAX_RESOLUTION     PSMD_RES_HIGH
-
-/* PSMC_SET_SAMPLING_RATE */
-#define PSMD_MAX_RATE           255     /* FIXME: not sure if it's possible */
-
-/* aux device ID */
-#define PSM_MOUSE_ID            0
-#define PSM_BALLPOINT_ID        2
-#define PSM_INTELLI_ID          3
-#define PSM_EXPLORER_ID         4
-#define PSM_4DMOUSE_ID          6
-#define PSM_4DPLUS_ID           8
-
-static unsigned char	ps2_init[] = {
-    PSMC_ENABLE_DEV,
-    0,
-};
-
-#define NINIT_PS2   1
-
-static unsigned char    wheel_3button_init[] = {
-    PSMC_SET_SAMPLING_RATE, 200,
-    PSMC_SET_SAMPLING_RATE, 100,
-    PSMC_SET_SAMPLING_RATE,  80,
-    PSMC_SEND_DEV_ID,
-    0,
-};
-
-#define NINIT_IMPS2 4
-
-static unsigned char    wheel_5button_init[] = {
-    PSMC_SET_SAMPLING_RATE, 200,
-    PSMC_SET_SAMPLING_RATE, 100,
-    PSMC_SET_SAMPLING_RATE,  80,
-    PSMC_SET_SAMPLING_RATE, 200,
-    PSMC_SET_SAMPLING_RATE, 200,
-    PSMC_SET_SAMPLING_RATE,  80,
-    PSMC_SEND_DEV_ID,
-    0
-};
-
-#define NINIT_EXPS2 7
-
-static unsigned char	intelli_init[] = {
-    PSMC_SET_SAMPLING_RATE, 200,
-    PSMC_SET_SAMPLING_RATE, 100,
-    PSMC_SET_SAMPLING_RATE,  80,
-    0
-};
-
-#define NINIT_INTELLI	3
-
-static int
-ps2SkipInit (KdPointerInfo *pi, int ninit, Bool ret_next)
-{
-    Kmouse  *km = pi->driverPrivate;
-    int	    c = -1;
-    int	    skipping;
-    Bool    waiting;
-
-    skipping = 0;
-    waiting = FALSE;
-    while (ninit || ret_next)
-    {
-	c = MouseReadByte (&km->iob, MOUSE_TIMEOUT);
-	if (c == -1)
-	    break;
-	/* look for ACK */
-	if (c == 0xfa)
-	{
-	    ninit--;
-	    if (ret_next)
-		waiting = TRUE;
-	}
-	/* look for packet start -- not the response */
-	else if ((c & 0x08) == 0x08)
-	    waiting = FALSE;
-	else if (waiting)
-	    break;
-    }
-    return c;
-}
-
-static Bool
-ps2Init (KdPointerInfo *pi)
-{
-    Kmouse	    *km = pi->driverPrivate;
-    int		    skipping;
-    Bool	    waiting;
-    int		    id;
-    unsigned char   *init;
-    int		    ninit;
-
-    /* Send Intellimouse initialization sequence */
-    MouseWriteBytes (km->iob.fd, intelli_init, strlen ((char *) intelli_init), 100);
-    /*
-     * Send ID command
-     */
-    if (!MouseWriteByte (km->iob.fd, PSMC_SEND_DEV_ID, 100))
-	return FALSE;
-    skipping = 0;
-    waiting = FALSE;
-    id = ps2SkipInit (pi, 0, TRUE);
-    switch (id) {
-    case 3:
-	init = wheel_3button_init;
-	ninit = NINIT_IMPS2;
-	km->prot = &imps2Prot;
-	break;
-    case 4:
-	init = wheel_5button_init;
-	ninit = NINIT_EXPS2;
-	km->prot = &exps2Prot;
-	break;
-    default:
-	init = ps2_init;
-	ninit = NINIT_PS2;
-	km->prot = &ps2Prot;
-	break;
-    }
-    if (init)
-	MouseWriteBytes (km->iob.fd, init, strlen ((char *) init), 100);
-    /*
-     * Flush out the available data to eliminate responses to the
-     * initialization string.  Make sure any partial event is
-     * skipped
-     */
-    (void) ps2SkipInit (pi, ninit, FALSE);
-    return TRUE;
-}
-
-static Bool busParse (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    Kmouse	    *km = pi->driverPrivate;
-    int		    dx, dy;
-    unsigned long   flags;
-
-    flags = KD_MOUSE_DELTA;
-    dx = (signed char) ev[1];
-    dy = -(signed char) ev[2];
-    if ((ev[0] & 4) == 0)
-	flags |= KD_BUTTON_1;
-    if ((ev[0] & 2) == 0)
-	flags |= KD_BUTTON_2;
-    if ((ev[0] & 1) == 0)
-	flags |= KD_BUTTON_3;
-    if (!MouseReasonable (pi, flags, dx, dy))
-	return FALSE;
-    if (km->stage == MouseWorking)
-	KdEnqueuePointerEvent (pi, flags, dx, dy, 0);
-    return TRUE;
-}
-
-static const KmouseProt busProt = {
-    "bus",
-    threeComplete, mouseValid, busParse, 0,
-    0xf8, 0x00, 0x00, 0x00,
-    FALSE
-};
-
-/*
- * Standard MS serial protocol, three bytes
- */
-
-static Bool msParse (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    Kmouse	    *km = pi->driverPrivate;
-    int		    dx, dy;
-    unsigned long   flags;
-
-    flags = KD_MOUSE_DELTA;
-
-    if (ev[0] & 0x20)
-	flags |= KD_BUTTON_1;
-    if (ev[0] & 0x10)
-	flags |= KD_BUTTON_3;
-
-    dx = (signed char)(((ev[0] & 0x03) << 6) | (ev[1] & 0x3F));
-    dy = (signed char)(((ev[0] & 0x0C) << 4) | (ev[2] & 0x3F));
-    if (!MouseReasonable (pi, flags, dx, dy))
-	return FALSE;
-    if (km->stage == MouseWorking)
-	KdEnqueuePointerEvent (pi, flags, dx, dy, 0);
-    return TRUE;
-}
-
-static const KmouseProt msProt = {
-    "ms",
-    threeComplete, mouseValid, msParse, 0,
-    0xc0, 0x40, 0xc0, 0x00,
-    TRUE,
-    IGNPAR,
-    0,
-    0,
-    CS7 | CSTOPB | CREAD | CLOCAL,
-    B1200,
-};
-
-/*
- * Logitech mice send 3 or 4 bytes, the only way to tell is to look at the
- * first byte of a synchronized protocol stream and see if it's got
- * any bits turned on that can't occur in that fourth byte
- */
-static Bool logiComplete (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    Kmouse		*km = pi->driverPrivate;
-
-    if ((ev[0] & 0x40) == 0x40)
-	return ne == 3;
-    if (km->stage != MouseBroken && (ev[0] & ~0x23) == 0)
-	return ne == 1;
-    return FALSE;
-}
-
-static int logiValid (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    Kmouse		*km = pi->driverPrivate;
-    const KmouseProt	*prot = km->prot;
-    int	    i;
-
-    for (i = 0; i < ne; i++)
-    {
-	if ((ev[i] & 0x40) == 0x40)
-	    break;
-	if (km->stage != MouseBroken && (ev[i] & ~0x23) == 0)
-	    break;
-    }
-    if (i != 0)
-	return i;
-    for (i = 1; i < ne; i++)
-	if ((ev[i] & prot->dataMask) != prot->dataValid)
-	    return -1;
-    return 0;
-}
-
-static Bool logiParse (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    Kmouse	    *km = pi->driverPrivate;
-    int		    dx, dy;
-    unsigned long   flags;
-
-    flags = KD_MOUSE_DELTA;
-
-    if (ne == 3)
-    {
-	if (ev[0] & 0x20)
-	    flags |= KD_BUTTON_1;
-	if (ev[0] & 0x10)
-	    flags |= KD_BUTTON_3;
-
-	dx = (signed char)(((ev[0] & 0x03) << 6) | (ev[1] & 0x3F));
-	dy = (signed char)(((ev[0] & 0x0C) << 4) | (ev[2] & 0x3F));
-	flags |= km->state & KD_BUTTON_2;
-    }
-    else
-    {
-	if (ev[0] & 0x20)
-	    flags |= KD_BUTTON_2;
-	dx = 0;
-	dy = 0;
-	flags |= km->state & (KD_BUTTON_1|KD_BUTTON_3);
-    }
-
-    if (!MouseReasonable (pi, flags, dx, dy))
-	return FALSE;
-    if (km->stage == MouseWorking)
-	KdEnqueuePointerEvent (pi, flags, dx, dy, 0);
-    return TRUE;
-}
-
-static const KmouseProt logiProt = {
-    "logitech",
-    logiComplete, logiValid, logiParse, 0,
-    0xc0, 0x40, 0xc0, 0x00,
-    TRUE,
-    IGNPAR,
-    0,
-    0,
-    CS7 | CSTOPB | CREAD | CLOCAL,
-    B1200,
-};
-
-/*
- * Mouse systems protocol, 5 bytes
- */
-static Bool mscParse (KdPointerInfo *pi, unsigned char *ev, int ne)
-{
-    Kmouse	    *km = pi->driverPrivate;
-    int		    dx, dy;
-    unsigned long   flags;
-
-    flags = KD_MOUSE_DELTA;
-
-    if (!(ev[0] & 0x4))
-	flags |= KD_BUTTON_1;
-    if (!(ev[0] & 0x2))
-	flags |= KD_BUTTON_2;
-    if (!(ev[0] & 0x1))
-	flags |= KD_BUTTON_3;
-    dx =    (signed char)(ev[1]) + (signed char)(ev[3]);
-    dy = - ((signed char)(ev[2]) + (signed char)(ev[4]));
-
-    if (!MouseReasonable (pi, flags, dx, dy))
-	return FALSE;
-    if (km->stage == MouseWorking)
-	KdEnqueuePointerEvent (pi, flags, dx, dy, 0);
-    return TRUE;
-}
-
-static const KmouseProt mscProt = {
-    "msc",
-    fiveComplete, mouseValid, mscParse, 0,
-    0xf8, 0x80, 0x00, 0x00,
-    TRUE,
-    IGNPAR,
-    0,
-    0,
-    CS8 | CSTOPB | CREAD | CLOCAL,
-    B1200,
-};
-
-/*
- * Use logitech before ms -- they're the same except that
- * logitech sometimes has a fourth byte
- */
-static const KmouseProt *kmouseProts[] = {
-    &ps2Prot, &imps2Prot, &exps2Prot, &busProt, &logiProt, &msProt, &mscProt,
-};
-
-#define NUM_PROT    (sizeof (kmouseProts) / sizeof (kmouseProts[0]))
-
-static void
-MouseInitProtocol (Kmouse *km)
-{
-    int		    ret;
-    struct termios  t;
-
-    if (km->prot->tty)
-    {
-	ret = tcgetattr (km->iob.fd, &t);
-
-	if (ret >= 0)
-	{
-	    t.c_iflag = km->prot->c_iflag;
-	    t.c_oflag = km->prot->c_oflag;
-	    t.c_lflag = km->prot->c_lflag;
-	    t.c_cflag = km->prot->c_cflag;
-	    cfsetispeed (&t, km->prot->speed);
-	    cfsetospeed (&t, km->prot->speed);
-	    ret = tcsetattr (km->iob.fd, TCSANOW, &t);
-	}
-    }
-    km->stage = MouseBroken;
-    km->valid = 0;
-    km->tested = 0;
-    km->invalid = 0;
-    km->state = km->prot->state;
-}
-
-static void
-MouseFirstProtocol (Kmouse *km, char *prot)
-{
-    if (prot)
-    {
-	for (km->i_prot = 0; km->i_prot < NUM_PROT; km->i_prot++)
-	    if (!strcmp (prot, kmouseProts[km->i_prot]->name))
-		break;
-	if (km->i_prot == NUM_PROT)
-	{
-	    int	i;
-	    ErrorF ("Unknown mouse protocol \"%s\". Pick one of:", prot);
-	    for (i = 0; i < NUM_PROT; i++)
-		ErrorF (" %s", kmouseProts[i]->name);
-	    ErrorF ("\n");
-	}
-	else
-	{
-	    km->prot = kmouseProts[km->i_prot];
-	    if (km->tty && !km->prot->tty)
-		ErrorF ("Mouse device is serial port, protocol %s is not serial protocol\n",
-			prot);
-	    else if (!km->tty && km->prot->tty)
-		ErrorF ("Mouse device is not serial port, protocol %s is serial protocol\n",
-			prot);
-	}
-    }
-    if (!km->prot)
-    {
-	for (km->i_prot = 0; kmouseProts[km->i_prot]->tty != km->tty; km->i_prot++)
-	    ;
-	km->prot = kmouseProts[km->i_prot];
-    }
-    MouseInitProtocol (km);
-}
-
-static void
-MouseNextProtocol (Kmouse *km)
-{
-    do
-    {
-	if (!km->prot)
-	    km->i_prot = 0;
-	else
-	    if (++km->i_prot == NUM_PROT) km->i_prot = 0;
-	km->prot = kmouseProts[km->i_prot];
-    } while (km->prot->tty != km->tty);
-    MouseInitProtocol (km);
-    ErrorF ("Switching to mouse protocol \"%s\"\n", km->prot->name);
-}
-
-static void
-MouseRead (int mousePort, void *closure)
-{
-    KdPointerInfo   *pi = closure;
-    Kmouse	    *km = pi->driverPrivate;
-    unsigned char   event[MAX_MOUSE];
-    int		    ne;
-    int		    c;
-    int		    i;
-    int		    timeout;
-
-    timeout = 0;
-    ne = 0;
-    for(;;)
-    {
-	c = MouseReadByte (&km->iob, timeout);
-	if (c == -1)
-	{
-	    if (ne)
-	    {
-		km->invalid += ne + km->tested;
-		km->valid = 0;
-		km->tested = 0;
-		km->stage = MouseBroken;
-	    }
-	    break;
-	}
-	event[ne++] = c;
-	i = (*km->prot->Valid) (pi, event, ne);
-	if (i != 0)
-	{
-#ifdef DEBUG
-	    ErrorF ("Mouse protocol %s broken %d of %d bytes bad\n",
-		    km->prot->name, i > 0 ? i : ne, ne);
-#endif
-	    if (i > 0 && i < ne)
-	    {
-		ne -= i;
-		memmove (event, event + i, ne);
-	    }
-	    else
-	    {
-		i = ne;
-		ne = 0;
-	    }
-	    km->invalid += i + km->tested;
-	    km->valid = 0;
-	    km->tested = 0;
-	    if (km->stage == MouseWorking)
-		km->i_prot--;
-	    km->stage = MouseBroken;
-	    if (km->invalid > MAX_SKIP)
-	    {
-		MouseNextProtocol (km);
-		ne = 0;
-	    }
-	    timeout = 0;
-	}
-	else
-	{
-	    if ((*km->prot->Complete) (pi, event, ne))
-	    {
-		if ((*km->prot->Parse) (pi, event, ne))
-		{
-		    switch (km->stage)
-		    {
-		    case MouseBroken:
-#ifdef DEBUG
-			ErrorF ("Mouse protocol %s seems OK\n",
-				km->prot->name);
-#endif
-			/* do not zero invalid to accumulate invalid bytes */
-			km->valid = 0;
-			km->tested = 0;
-			km->stage = MouseTesting;
-			/* fall through ... */
-		    case MouseTesting:
-			km->valid++;
-			km->tested += ne;
-			if (km->valid > MAX_VALID)
-			{
-#ifdef DEBUG
-			    ErrorF ("Mouse protocol %s working\n",
-				    km->prot->name);
-#endif
-			    km->stage = MouseWorking;
-			    km->invalid = 0;
-			    km->tested = 0;
-			    km->valid = 0;
-			    if (km->prot->Init && !(*km->prot->Init) (pi))
-				km->stage = MouseBroken;
-			}
-			break;
-		    case MouseWorking:
-			break;
-		    }
-		}
-		else
-		{
-		    km->invalid += ne + km->tested;
-		    km->valid = 0;
-		    km->tested = 0;
-		    km->stage = MouseBroken;
-		}
-		ne = 0;
-		timeout = 0;
-	    }
-	    else
-		timeout = MOUSE_TIMEOUT;
-	}
-    }
-}
-
-int MouseInputType;
-
-char *kdefaultMouse[] =  {
-    "/dev/input/mice",
-    "/dev/mouse",
-    "/dev/psaux",
-    "/dev/adbmouse",
-    "/dev/ttyS0",
-    "/dev/ttyS1",
-};
-
-#define NUM_DEFAULT_MOUSE    (sizeof (kdefaultMouse) / sizeof (kdefaultMouse[0]))
-
-static Status
-MouseInit (KdPointerInfo *pi)
-{
-    int		i;
-    int		fd;
-    Kmouse	*km;
-
-    if (!pi)
-        return BadImplementation;
-
-    if (!pi->path || strcmp(pi->path, "auto") == 0) {
-        for (i = 0; i < NUM_DEFAULT_MOUSE; i++) {
-            fd = open (kdefaultMouse[i], 2);
-            if (fd >= 0) {
-                pi->path = strdup (kdefaultMouse[i]);
-                break;
-            }
-        }
-    }
-    else {
-        fd = open (pi->path, 2);
-    }
-
-    if (fd < 0)
-        return BadMatch;
-
-    close(fd);
-
-    km = (Kmouse *) malloc(sizeof (Kmouse));
-    if (km) {
-        km->iob.avail = km->iob.used = 0;
-        MouseFirstProtocol(km, pi->protocol ? pi->protocol : "exps/2");
-        /* MouseFirstProtocol sets state to MouseBroken for later protocol
-         * checks. Skip these checks if a protocol was supplied */
-        if (pi->protocol)
-                km->state = MouseWorking;
-        km->i_prot = 0;
-        km->tty = isatty (fd);
-        km->iob.fd = -1;
-        pi->driverPrivate = km;
-    }
-    else {
-        close (fd);
-        return BadAlloc;
-    }
-
-    return Success;
-}
-
-static Status
-MouseEnable (KdPointerInfo *pi)
-{
-    Kmouse *km;
-
-    if (!pi || !pi->driverPrivate || !pi->path)
-        return BadImplementation;
-
-    km = pi->driverPrivate;
-
-    km->iob.fd = open(pi->path, 2);
-    if (km->iob.fd < 0)
-        return BadMatch;
-
-    if (!KdRegisterFd (km->iob.fd, MouseRead, pi))
-    {
-        close(km->iob.fd);
-        return BadAlloc;
-    }
-
-    return Success;
-}
-
-static void
-MouseDisable (KdPointerInfo *pi)
-{
-    Kmouse *km;
-    if (!pi || !pi->driverPrivate)
-        return;
-
-    km = pi->driverPrivate;
-    KdUnregisterFd (pi, km->iob.fd, TRUE);
-}
-
-static void
-MouseFini (KdPointerInfo *pi)
-{
-    free(pi->driverPrivate);
-    pi->driverPrivate = NULL;
-}
-
-KdPointerDriver LinuxMouseDriver = {
-    "mouse",
-    MouseInit,
-    MouseEnable,
-    MouseDisable,
-    MouseFini,
-    NULL,
-};
diff --git a/hw/kdrive/linux/ms.c b/hw/kdrive/linux/ms.c
deleted file mode 100644
index b6151cd..0000000
--- a/hw/kdrive/linux/ms.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-Copyright (c) 2001 by Juliusz Chroboczek
-Copyright (c) 1999 by Keith Packard
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include <errno.h>
-#include <termios.h>
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include <X11/Xpoll.h>
-#include "inputstr.h"
-#include "scrnintstr.h"
-#include "kdrive.h"
-
-static int
-MsReadBytes (int fd, char *buf, int len, int min)
-{
-    int		    n, tot;
-    fd_set	    set;
-    struct timeval  tv;
-
-    tot = 0;
-    while (len)
-    {
-	n = read (fd, buf, len);
-	if (n > 0)
-	{
-	    tot += n;
-	    buf += n;
-	    len -= n;
-	}
-	if (tot % min == 0)
-	    break;
-	FD_ZERO (&set);
-	FD_SET (fd, &set);
-	tv.tv_sec = 0;
-	tv.tv_usec = 100 * 1000;
-	n = select (fd + 1, &set, 0, 0, &tv);
-	if (n <= 0)
-	    break;
-    }
-    return tot;
-}
-
-static void
-MsRead (int port, void *closure)
-{
-    unsigned char   buf[3 * 200];
-    unsigned char   *b;
-    int		    n;
-    int		    dx, dy;
-    unsigned long   flags;
-
-    while ((n = MsReadBytes (port, (char *) buf, sizeof (buf), 3)) > 0)
-    {
-	b = buf;
-	while (n >= 3)
-	{
-	    flags = KD_MOUSE_DELTA;
-
-	    if (b[0] & 0x20)
-		flags |= KD_BUTTON_1;
-	    if (b[0] & 0x10)
-		flags |= KD_BUTTON_3;
-
-	    dx = (char)(((b[0] & 0x03) << 6) | (b[1] & 0x3F));
-	    dy = (char)(((b[0] & 0x0C) << 4) | (b[2] & 0x3F));
-            n -= 3;
-            b += 3;
-	    KdEnqueuePointerEvent (closure, flags, dx, dy, 0);
-	}
-    }
-}
-
-static Status
-MsInit (KdPointerInfo *pi)
-{
-    if (!pi)
-        return BadImplementation;
-
-    if (!pi->path || strcmp(pi->path, "auto"))
-        pi->path = strdup("/dev/mouse");
-    if (!pi->name)
-        pi->name = strdup("Microsoft protocol mouse");
-
-    return Success;
-}
-
-static Status
-MsEnable (KdPointerInfo *pi)
-{
-    int port;
-    struct termios t;
-    int ret;
-
-    port = open (pi->path, O_RDWR | O_NONBLOCK);
-    if(port < 0) {
-        ErrorF("Couldn't open %s (%d)\n", pi->path, (int)errno);
-        return 0;
-    } else if (port == 0) {
-        ErrorF("Opening %s returned 0!  Please complain to Keith.\n",
-               pi->path);
-	goto bail;
-    }
-
-    if(!isatty(port)) {
-        ErrorF("%s is not a tty\n", pi->path);
-        goto bail;
-    }
-
-    ret = tcgetattr(port, &t);
-    if(ret < 0) {
-        ErrorF("Couldn't tcgetattr(%s): %d\n", pi->path, errno);
-        goto bail;
-    }
-    t.c_iflag &= ~ (IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR |
-                   IGNCR | ICRNL | IXON | IXOFF);
-    t.c_oflag &= ~ OPOST;
-    t.c_lflag &= ~ (ECHO | ECHONL | ICANON | ISIG | IEXTEN);
-    t.c_cflag &= ~ (CSIZE | PARENB);
-    t.c_cflag |= CS8 | CLOCAL | CSTOPB;
-
-    cfsetispeed (&t, B1200);
-    cfsetospeed (&t, B1200);
-    t.c_cc[VMIN] = 1;
-    t.c_cc[VTIME] = 0;
-    ret = tcsetattr(port, TCSANOW, &t);
-    if(ret < 0) {
-        ErrorF("Couldn't tcsetattr(%s): %d\n", pi->path, errno);
-        goto bail;
-    }
-    if (KdRegisterFd (port, MsRead, pi))
-	return TRUE;
-    pi->driverPrivate = (void *)port;
-
-    return Success;
-
- bail:
-    close(port);
-    return BadMatch;
-}
-
-static void
-MsDisable (KdPointerInfo *pi)
-{
-    KdUnregisterFd (pi, (int)pi->driverPrivate, TRUE);
-}
-
-static void
-MsFini (KdPointerInfo *pi)
-{
-}
-
-KdPointerDriver MsMouseDriver = {
-    "ms",
-    MsInit,
-    MsEnable,
-    MsDisable,
-    MsFini,
-    NULL,
-};
diff --git a/hw/kdrive/linux/ps2.c b/hw/kdrive/linux/ps2.c
deleted file mode 100644
index 552a3c7..0000000
--- a/hw/kdrive/linux/ps2.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * 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 Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include <X11/Xpoll.h>
-#include "inputstr.h"
-#include "scrnintstr.h"
-#include "kdrive.h"
-
-static int
-Ps2ReadBytes (int fd, char *buf, int len, int min)
-{
-    int		    n, tot;
-    fd_set	    set;
-    struct timeval  tv;
-
-    tot = 0;
-    while (len)
-    {
-	n = read (fd, buf, len);
-	if (n > 0)
-	{
-	    tot += n;
-	    buf += n;
-	    len -= n;
-	}
-	if (tot % min == 0)
-	    break;
-	FD_ZERO (&set);
-	FD_SET (fd, &set);
-	tv.tv_sec = 0;
-	tv.tv_usec = 100 * 1000;
-	n = select (fd + 1, &set, 0, 0, &tv);
-	if (n <= 0)
-	    break;
-    }
-    return tot;
-}
-
-char	*Ps2Names[] = {
-    "/dev/psaux",
-/*    "/dev/mouse", */
-    "/dev/input/mice",
-};
-
-#define NUM_PS2_NAMES	(sizeof (Ps2Names) / sizeof (Ps2Names[0]))
-
-static void
-Ps2Read (int ps2Port, void *closure)
-{
-    unsigned char   buf[3 * 200];
-    unsigned char   *b;
-    int		    n;
-    int		    dx, dy;
-    unsigned long   flags;
-    unsigned long   left_button = KD_BUTTON_1;
-    unsigned long   right_button = KD_BUTTON_3;
-
-#undef SWAP_USB
-#ifdef SWAP_USB
-    if (id == 2)
-    {
-	left_button = KD_BUTTON_3;
-	right_button = KD_BUTTON_1;
-    }
-#endif
-    while ((n = Ps2ReadBytes (ps2Port, (char *) buf, sizeof (buf), 3)) > 0)
-    {
-	b = buf;
-	while (n >= 3)
-	{
-	    flags = KD_MOUSE_DELTA;
-	    if (b[0] & 4)
-		flags |= KD_BUTTON_2;
-	    if (b[0] & 2)
-		flags |= right_button;
-	    if (b[0] & 1)
-		flags |= left_button;
-
-	    dx = b[1];
-	    if (b[0] & 0x10)
-		dx -= 256;
-	    dy = b[2];
-	    if (b[0] & 0x20)
-		dy -= 256;
-	    dy = -dy;
-	    n -= 3;
-	    b += 3;
-	    KdEnqueuePointerEvent (closure, flags, dx, dy, 0);
-	}
-    }
-}
-
-static Status
-Ps2Init (KdPointerInfo *pi)
-{
-    int	ps2Port, i;
-
-    if (!pi->path) {
-        for (i = 0; i < NUM_PS2_NAMES; i++) {
-            ps2Port = open (Ps2Names[i], 0);
-            if (ps2Port >= 0) {
-                pi->path = strdup (Ps2Names[i]);
-                break;
-            }
-	}
-    }
-    else {
-        ps2Port = open (pi->path, 0);
-    }
-
-    if (ps2Port < 0)
-        return BadMatch;
-
-    close(ps2Port);
-    if (!pi->name)
-        pi->name = strdup ("PS/2 Mouse");
-
-    return Success;
-}
-
-static Status
-Ps2Enable (KdPointerInfo *pi)
-{
-    int fd;
-
-    if (!pi)
-        return BadImplementation;
-
-    fd = open (pi->path, 0);
-    if (fd < 0)
-        return BadMatch;
-
-    if (!KdRegisterFd (fd, Ps2Read, pi)) {
-        close(fd);
-        return BadAlloc;
-    }
-
-    pi->driverPrivate = (void *)fd;
-
-    return Success;
-}
-
-
-static void
-Ps2Disable (KdPointerInfo *pi)
-{
-    KdUnregisterFd (pi, (int)pi->driverPrivate, TRUE);
-}
-
-static void
-Ps2Fini (KdPointerInfo *pi)
-{
-}
-
-KdPointerDriver Ps2MouseDriver = {
-    "ps2",
-    Ps2Init,
-    Ps2Enable,
-    Ps2Disable,
-    Ps2Fini,
-    NULL,
-};
diff --git a/hw/kdrive/linux/tslib.c b/hw/kdrive/linux/tslib.c
deleted file mode 100644
index 570cbf9..0000000
--- a/hw/kdrive/linux/tslib.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * TSLIB based touchscreen driver for KDrive
- * Porting to new input API and event queueing by Daniel Stone.
- * Derived from ts.c by Keith Packard
- * Derived from ps2.c by Jim Gettys
- *
- * Copyright © 1999 Keith Packard
- * Copyright © 2000 Compaq Computer Corporation
- * Copyright © 2002 MontaVista Software Inc.
- * Copyright © 2005 OpenedHand Ltd.
- * Copyright © 2006 Nokia Corporation
- *
- * 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 the authors and/or copyright holders
- * not be used in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.  The authors and/or
- * copyright holders make no representations about the suitability of this
- * software for any purpose.  It is provided "as is" without express or
- * implied warranty.
- *
- * THE AUTHORS AND/OR COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD
- * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- * AND FITNESS, IN NO EVENT SHALL THE AUTHORS AND/OR COPYRIGHT HOLDERS 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.
- */
-
-
-#ifdef HAVE_KDRIVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include <X11/Xpoll.h>
-#include "inputstr.h"
-#include "scrnintstr.h"
-#include "kdrive.h"
-#include <sys/ioctl.h>
-#include <tslib.h>
-#include <dirent.h>
-#include <linux/input.h>
-
-struct TslibPrivate {
-    int fd;
-    int lastx, lasty;
-    struct tsdev *tsDev;
-    void (*raw_event_hook)(int x, int y, int pressure, void *closure);
-    void *raw_event_closure;
-    int phys_screen;
-};
-
-
-static void
-TsRead (int fd, void *closure)
-{
-    KdPointerInfo       *pi = closure;
-    struct TslibPrivate *private = pi->driverPrivate;
-    struct ts_sample    event;
-    long                x = 0, y = 0;
-    unsigned long       flags;
-
-    if (private->raw_event_hook) {
-        while (ts_read_raw(private->tsDev, &event, 1) == 1)
-            private->raw_event_hook (event.x, event.y, event.pressure,
-                                     private->raw_event_closure);
-        return;
-    }
-
-    while (ts_read(private->tsDev, &event, 1) == 1) {
-        if (event.pressure) {
-            flags = KD_BUTTON_1;
-
-            /*
-             * Here we test for the touch screen driver actually being on the
-             * touch screen, if it is we send absolute coordinates. If not,
-             * then we send delta's so that we can track the entire vga screen.
-             */
-            if (KdCurScreen == private->phys_screen) {
-                x = event.x;
-                y = event.y;
-            } else {
-                flags |= KD_MOUSE_DELTA;
-                if ((private->lastx == 0) || (private->lasty == 0)) {
-                    x = event.x;
-                    y = event.y;
-                } else {
-                    x = event.x - private->lastx;
-                    y = event.y - private->lasty;
-	    	}
-            }
-            private->lastx = event.x;
-            private->lasty = event.y;
-        } else {
-            flags = 0;
-            x = private->lastx;
-            y = private->lasty;
-        }
-
-        KdEnqueuePointerEvent (pi, flags, x, y, event.pressure);
-    }
-}
-
-static Status
-TslibEnable (KdPointerInfo *pi)
-{
-    struct TslibPrivate *private = pi->driverPrivate;
-
-    private->raw_event_hook = NULL;
-    private->raw_event_closure = NULL;
-    if (!pi->path) {
-        pi->path = strdup("/dev/input/touchscreen0");
-        ErrorF("[tslib/TslibEnable] no device path given, trying %s\n", pi->path);
-    }
-
-    private->tsDev = ts_open(pi->path, 0);
-    if (!private->tsDev) {
-        ErrorF("[tslib/TslibEnable] failed to open %s\n", pi->path);
-        return BadAlloc;
-    }
-
-    if (ts_config(private->tsDev)) {
-        ErrorF("[tslib/TslibEnable] failed to load configuration\n");
-        ts_close(private->tsDev);
-        private->tsDev = NULL;
-        return BadValue;
-    }
-
-    private->fd = ts_fd(private->tsDev);
-
-    KdRegisterFd(private->fd, TsRead, pi);
-
-    return Success;
-}
-
-
-static void
-TslibDisable (KdPointerInfo *pi)
-{
-    struct TslibPrivate *private = pi->driverPrivate;
-
-    if (private->fd)
-        KdUnregisterFd(pi, private->fd, TRUE);
-
-    if (private->tsDev)
-        ts_close(private->tsDev);
-
-    private->fd = 0;
-    private->tsDev = NULL;
-}
-
-
-static Status
-TslibInit (KdPointerInfo *pi)
-{
-    struct TslibPrivate *private = NULL;
-
-    if (!pi || !pi->dixdev)
-        return !Success;
-
-    pi->driverPrivate = (struct TslibPrivate *)
-                        calloc(sizeof(struct TslibPrivate), 1);
-    if (!pi->driverPrivate)
-        return !Success;
-
-    private = pi->driverPrivate;
-    /* hacktastic */
-    private->phys_screen = 0;
-    pi->nAxes = 3;
-    pi->name = strdup("Touchscreen");
-    pi->inputClass = KD_TOUCHSCREEN;
-
-    return Success;
-}
-
-
-static void
-TslibFini (KdPointerInfo *pi)
-{
-    free(pi->driverPrivate);
-    pi->driverPrivate = NULL;
-}
-
-
-KdPointerDriver TsDriver = {
-    "tslib",
-    TslibInit,
-    TslibEnable,
-    TslibDisable,
-    TslibFini,
-    NULL,
-};
diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h
index 2ab535a..1bab9c2 100644
--- a/hw/kdrive/src/kdrive.h
+++ b/hw/kdrive/src/kdrive.h
@@ -438,9 +438,6 @@ KdProcessArgument (int argc, char **argv, int i);
 void
 KdOsInit (KdOsFuncs *pOsFuncs);
 
-void
-KdOsAddInputDrivers (void);
-
 Bool
 KdAllocatePrivates (ScreenPtr pScreen);
 
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 72ef4e9..5e20ac6 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -225,9 +225,6 @@
 /* Define to 1 if you have the <sys/vm86.h> header file. */
 #undef HAVE_SYS_VM86_H
 
-/* Define to 1 if you have the <tslib.h> header file. */
-#undef HAVE_TSLIB_H
-
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
@@ -291,9 +288,6 @@
 /* Support TCP socket connections */
 #undef TCPCONN
 
-/* Support tslib touchscreen abstraction library */
-#undef TSLIB
-
 /* Support UNIX socket connections */
 #undef UNIXCONN
 
diff --git a/include/kdrive-config.h.in b/include/kdrive-config.h.in
index 3d7e9a4..3c0a91b 100644
--- a/include/kdrive-config.h.in
+++ b/include/kdrive-config.h.in
@@ -10,18 +10,6 @@
 /* Building kdrive server. */
 #undef KDRIVESERVER
 
-/* Include framebuffer support in X servers */
-#undef KDRIVEFBDEV
-
-/* Support tslib touchscreen abstraction library */
-#undef TSLIB
-
-/* Support KDrive kbd driver */
-#undef KDRIVE_KBD
-
-/* Support KDrive mouse driver */
-#undef KDRIVE_MOUSE
-
 /* Support KDrive evdev driver */
 #undef KDRIVE_EVDEV
 
diff --git a/include/xorg-server.h.in b/include/xorg-server.h.in
index 11b56ef..b3289c0 100644
--- a/include/xorg-server.h.in
+++ b/include/xorg-server.h.in
@@ -67,9 +67,6 @@
 /* Support TCP socket connections */
 #undef TCPCONN
 
-/* Support tslib touchscreen abstraction library */
-#undef TSLIB
-
 /* Support UNIX socket connections */
 #undef UNIXCONN
 
-- 
1.7.4.4



More information about the xorg-devel mailing list