xserver: Branch 'master' - 4 commits

Adam Jackson ajax at kemper.freedesktop.org
Wed Mar 1 23:00:46 UTC 2017


 configure.ac                |   62 ---
 hw/kdrive/Makefile.am       |   19 
 hw/kdrive/fake/.gitignore   |    2 
 hw/kdrive/fake/Makefile.am  |   31 -
 hw/kdrive/fake/fake.c       |  444 ---------------------
 hw/kdrive/fake/fake.h       |  131 ------
 hw/kdrive/fake/fakeinit.c   |  119 -----
 hw/kdrive/fake/kbd.c        |   75 ---
 hw/kdrive/fake/mouse.c      |   64 ---
 hw/kdrive/fake/os.c         |   62 ---
 hw/kdrive/fbdev/.gitignore  |    2 
 hw/kdrive/fbdev/Makefile.am |   30 -
 hw/kdrive/fbdev/Xfbdev.man  |   28 -
 hw/kdrive/fbdev/fbdev.c     |  892 --------------------------------------------
 hw/kdrive/fbdev/fbdev.h     |   99 ----
 hw/kdrive/fbdev/fbinit.c    |  105 -----
 hw/kdrive/linux/Makefile.am |   19 
 hw/kdrive/linux/evdev.c     |  530 --------------------------
 hw/kdrive/linux/linux.c     |  347 -----------------
 hw/kdrive/linux/tslib.c     |  194 ---------
 hw/xfree86/sdksyms.sh       |    4 
 21 files changed, 6 insertions(+), 3253 deletions(-)

New commits:
commit 27819950e4158326e0f83a30f2e8968b932625ef
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Feb 16 12:46:23 2017 -0500

    kdrive: Remove now-unused linux backend
    
    With Xfbdev gone this has no consumers.
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>
    Acked-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/configure.ac b/configure.ac
index 291f446..110027d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -660,7 +660,6 @@ 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])
 dnl kdrive options
-AC_ARG_ENABLE(kdrive-evdev,   AS_HELP_STRING([--enable-kdrive-evdev], [Build evdev driver for kdrive (default: auto)]), [KDRIVE_EVDEV=$enableval], [KDRIVE_EVDEV=auto])
 AC_ARG_ENABLE(libunwind,      AS_HELP_STRING([--enable-libunwind], [Use libunwind for backtracing (default: auto)]), [LIBUNWIND="$enableval"], [LIBUNWIND="auto"])
 AC_ARG_ENABLE(xshmfence,      AS_HELP_STRING([--disable-xshmfence], [Disable xshmfence (default: auto)]), [XSHMFENCE="$enableval"], [XSHMFENCE="auto"])
 
@@ -2370,45 +2369,6 @@ if test "$KDRIVE" = yes; then
     AC_DEFINE(KDRIVESERVER,1,[Build Kdrive X server])
     AC_DEFINE(KDRIVEDDXACTIONS,,[Build kdrive ddx])
 
-    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
-
-    case $host_os in
-	*linux*)
-	    KDRIVE_OS_LIB='$(top_builddir)/hw/kdrive/linux/liblinux.la'
-            KDRIVELINUX=yes
-	    if test "x$KDRIVE_EVDEV" = xauto; then
-		KDRIVE_EVDEV=yes
-	    fi
-	    ;;
-	*)
-	    if test "x$KDRIVE_EVDEV" = xauto; then
-		KDRIVE_EVDEV=no
-	    fi
-	    ;;
-    esac
-
-    if test "x$KDRIVE_EVDEV" = xyes; then
-       AC_DEFINE(KDRIVE_EVDEV, 1, [Enable KDrive evdev driver])
-    fi
-
     XEPHYR_REQUIRED_LIBS="xau xdmcp xcb xcb-shape xcb-render xcb-renderutil xcb-aux xcb-image xcb-icccm xcb-shm xcb-keysyms xcb-randr xcb-xkb"
     if test "x$XV" = xyes; then
         XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS xcb-xv"
@@ -2456,9 +2416,6 @@ AC_SUBST([KDRIVE_PURE_LIBS])
 AC_SUBST([KDRIVE_MAIN_LIB])
 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(TSLIB, [test "x$HAVE_TSLIB" = xyes])
 AM_CONDITIONAL(XEPHYR, [test "x$KDRIVE" = xyes && test "x$XEPHYR" = xyes])
 
 dnl Xwayland DDX
@@ -2640,7 +2597,6 @@ hw/xquartz/xpr/Makefile
 hw/kdrive/Makefile
 hw/kdrive/ephyr/Makefile
 hw/kdrive/ephyr/man/Makefile
-hw/kdrive/linux/Makefile
 hw/kdrive/src/Makefile
 hw/xwayland/Makefile
 test/Makefile
diff --git a/hw/kdrive/Makefile.am b/hw/kdrive/Makefile.am
index de30e51..dc71dbd 100644
--- a/hw/kdrive/Makefile.am
+++ b/hw/kdrive/Makefile.am
@@ -2,19 +2,14 @@ if XEPHYR
 XEPHYR_SUBDIRS = ephyr
 endif
 
-if KDRIVELINUX
-LINUX_SUBDIRS = linux
-endif
-
 SERVER_SUBDIRS = 		\
 	$(XEPHYR_SUBDIRS)
 
 SUBDIRS =			\
 	src			\
-	$(LINUX_SUBDIRS)	\
 	$(SERVER_SUBDIRS)
 
-DIST_SUBDIRS = ephyr src linux
+DIST_SUBDIRS = ephyr src
 
 relink:
 	$(AM_V_at)for i in $(SERVER_SUBDIRS) ; do $(MAKE) -C $$i relink || exit 1 ; done
diff --git a/hw/kdrive/linux/Makefile.am b/hw/kdrive/linux/Makefile.am
deleted file mode 100644
index 97c600c..0000000
--- a/hw/kdrive/linux/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-AM_CPPFLAGS = 					\
-	@KDRIVE_INCS@				\
-	@KDRIVE_CFLAGS@
-
-AM_CFLAGS = -DHAVE_DIX_CONFIG_H
-
-noinst_LTLIBRARIES = liblinux.la
-
-liblinux_la_SOURCES =
-
-liblinux_la_SOURCES += linux.c
-
-if KDRIVE_EVDEV
-liblinux_la_SOURCES += evdev.c
-endif
-
-if TSLIB
-liblinux_la_SOURCES += tslib.c
-endif
diff --git a/hw/kdrive/linux/evdev.c b/hw/kdrive/linux/evdev.c
deleted file mode 100644
index 9590413..0000000
--- a/hw/kdrive/linux/evdev.c
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
- * Copyright © 2004 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 <linux/input.h>
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include "inputstr.h"
-#include "scrnintstr.h"
-#include "kdrive.h"
-
-#define NUM_EVENTS  128
-#define ABS_UNSET   -65535
-
-#define BITS_PER_LONG (sizeof(long) * 8)
-#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
-#define ISBITSET(x,y) ((x)[LONG(y)] & BIT(y))
-#define OFF(x)   ((x)%BITS_PER_LONG)
-#define LONG(x)  ((x)/BITS_PER_LONG)
-#define BIT(x)         (1 << OFF(x))
-
-typedef struct _kevdev {
-    /* current device state */
-    int rel[REL_MAX + 1];
-    int abs[ABS_MAX + 1];
-    int prevabs[ABS_MAX + 1];
-    long key[NBITS(KEY_MAX + 1)];
-
-    /* supported device info */
-    long relbits[NBITS(REL_MAX + 1)];
-    long absbits[NBITS(ABS_MAX + 1)];
-    long keybits[NBITS(KEY_MAX + 1)];
-    struct input_absinfo absinfo[ABS_MAX + 1];
-    int max_rel;
-    int max_abs;
-
-    int fd;
-} Kevdev;
-
-static void
-EvdevPtrBtn(KdPointerInfo * pi, struct input_event *ev)
-{
-    int flags = KD_MOUSE_DELTA | pi->buttonState;
-
-    if (ev->code >= BTN_MOUSE && ev->code < BTN_JOYSTICK) {
-        switch (ev->code) {
-        case BTN_LEFT:
-            if (ev->value == 1)
-                flags |= KD_BUTTON_1;
-            else
-                flags &= ~KD_BUTTON_1;
-            break;
-        case BTN_MIDDLE:
-            if (ev->value == 1)
-                flags |= KD_BUTTON_2;
-            else
-                flags &= ~KD_BUTTON_2;
-            break;
-        case BTN_RIGHT:
-            if (ev->value == 1)
-                flags |= KD_BUTTON_3;
-            else
-                flags &= ~KD_BUTTON_3;
-            break;
-        default:
-            /* Unknow button */
-            break;
-        }
-
-        KdEnqueuePointerEvent(pi, flags, 0, 0, 0);
-    }
-}
-
-static void
-EvdevPtrMotion(KdPointerInfo * pi, struct input_event *ev)
-{
-    Kevdev *ke = pi->driverPrivate;
-    int i;
-    int flags = KD_MOUSE_DELTA | pi->buttonState;
-
-    for (i = 0; i <= ke->max_rel; i++)
-        if (ke->rel[i]) {
-            int a;
-
-            for (a = 0; a <= ke->max_rel; a++) {
-                if (ISBITSET(ke->relbits, a)) {
-                    if (a == 0)
-                        KdEnqueuePointerEvent(pi, flags, ke->rel[a], 0, 0);
-                    else if (a == 1)
-                        KdEnqueuePointerEvent(pi, flags, 0, ke->rel[a], 0);
-                }
-                ke->rel[a] = 0;
-            }
-            break;
-        }
-    for (i = 0; i < ke->max_abs; i++)
-        if (ke->abs[i] != ke->prevabs[i]) {
-            int a;
-
-            ErrorF("abs");
-            for (a = 0; a <= ke->max_abs; a++) {
-                if (ISBITSET(ke->absbits, a))
-                    ErrorF(" %d=%d", a, ke->abs[a]);
-                ke->prevabs[a] = ke->abs[a];
-            }
-            ErrorF("\n");
-            break;
-        }
-
-    if (ev->code == REL_WHEEL) {
-        for (i = 0; i < abs(ev->value); i++) {
-            if (ev->value > 0)
-                flags |= KD_BUTTON_4;
-            else
-                flags |= KD_BUTTON_5;
-
-            KdEnqueuePointerEvent(pi, flags, 0, 0, 0);
-
-            if (ev->value > 0)
-                flags &= ~KD_BUTTON_4;
-            else
-                flags &= ~KD_BUTTON_5;
-
-            KdEnqueuePointerEvent(pi, flags, 0, 0, 0);
-        }
-    }
-
-}
-
-static void
-EvdevPtrRead(int evdevPort, void *closure)
-{
-    KdPointerInfo *pi = closure;
-    Kevdev *ke = pi->driverPrivate;
-    int i;
-    struct input_event events[NUM_EVENTS];
-    int n;
-
-    n = read(evdevPort, &events, NUM_EVENTS * sizeof(struct input_event));
-    if (n <= 0) {
-        if (errno == ENODEV)
-            DeleteInputDeviceRequest(pi->dixdev);
-        return;
-    }
-
-    n /= sizeof(struct input_event);
-    for (i = 0; i < n; i++) {
-        switch (events[i].type) {
-        case EV_SYN:
-            break;
-        case EV_KEY:
-            EvdevPtrBtn(pi, &events[i]);
-            break;
-        case EV_REL:
-            ke->rel[events[i].code] += events[i].value;
-            EvdevPtrMotion(pi, &events[i]);
-            break;
-        case EV_ABS:
-            ke->abs[events[i].code] = events[i].value;
-            EvdevPtrMotion(pi, &events[i]);
-            break;
-        }
-    }
-}
-
-const char *kdefaultEvdev[] = {
-    "/dev/input/event0",
-    "/dev/input/event1",
-    "/dev/input/event2",
-    "/dev/input/event3",
-};
-
-#define NUM_DEFAULT_EVDEV    (sizeof (kdefaultEvdev) / sizeof (kdefaultEvdev[0]))
-
-static Status
-EvdevPtrInit(KdPointerInfo * pi)
-{
-    int i;
-    int fd;
-
-    if (!pi->path) {
-        for (i = 0; i < NUM_DEFAULT_EVDEV; i++) {
-            fd = open(kdefaultEvdev[i], 2);
-            if (fd >= 0) {
-                pi->path = strdup(kdefaultEvdev[i]);
-                break;
-            }
-        }
-    }
-    else {
-        fd = open(pi->path, O_RDWR);
-        if (fd < 0) {
-            ErrorF("Failed to open evdev device %s\n", pi->path);
-            return BadMatch;
-        }
-    }
-
-    close(fd);
-
-    if (!pi->name)
-        pi->name = strdup("Evdev mouse");
-
-    return Success;
-}
-
-static Status
-EvdevPtrEnable(KdPointerInfo * pi)
-{
-    int fd;
-    unsigned long ev[NBITS(EV_MAX)];
-    Kevdev *ke;
-
-    if (!pi || !pi->path)
-        return BadImplementation;
-
-    fd = open(pi->path, 2);
-    if (fd < 0)
-        return BadMatch;
-
-    if (ioctl(fd, EVIOCGRAB, 1) < 0)
-        perror("Grabbing evdev mouse device failed");
-
-    if (ioctl(fd, EVIOCGBIT(0 /*EV*/, sizeof(ev)), ev) < 0) {
-        perror("EVIOCGBIT 0");
-        close(fd);
-        return BadMatch;
-    }
-    ke = calloc(1, sizeof(Kevdev));
-    if (!ke) {
-        close(fd);
-        return BadAlloc;
-    }
-    if (ISBITSET(ev, EV_KEY)) {
-        if (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(ke->keybits)), ke->keybits) < 0) {
-            perror("EVIOCGBIT EV_KEY");
-            free(ke);
-            close(fd);
-            return BadMatch;
-        }
-    }
-    if (ISBITSET(ev, EV_REL)) {
-        if (ioctl(fd, EVIOCGBIT(EV_REL, sizeof(ke->relbits)), ke->relbits) < 0) {
-            perror("EVIOCGBIT EV_REL");
-            free(ke);
-            close(fd);
-            return BadMatch;
-        }
-        for (ke->max_rel = REL_MAX; ke->max_rel >= 0; ke->max_rel--)
-            if (ISBITSET(ke->relbits, ke->max_rel))
-                break;
-    }
-    if (ISBITSET(ev, EV_ABS)) {
-        int i;
-
-        if (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(ke->absbits)), ke->absbits) < 0) {
-            perror("EVIOCGBIT EV_ABS");
-            free(ke);
-            close(fd);
-            return BadMatch;
-        }
-        for (ke->max_abs = ABS_MAX; ke->max_abs >= 0; ke->max_abs--)
-            if (ISBITSET(ke->absbits, ke->max_abs))
-                break;
-        for (i = 0; i <= ke->max_abs; i++) {
-            if (ISBITSET(ke->absbits, i))
-                if (ioctl(fd, EVIOCGABS(i), &ke->absinfo[i]) < 0) {
-                    perror("EVIOCGABS");
-                    break;
-                }
-            ke->prevabs[i] = ABS_UNSET;
-        }
-        if (i <= ke->max_abs) {
-            free(ke);
-            close(fd);
-            return BadValue;
-        }
-    }
-    if (!KdRegisterFd(fd, EvdevPtrRead, pi)) {
-        free(ke);
-        close(fd);
-        return BadAlloc;
-    }
-    pi->driverPrivate = ke;
-    ke->fd = fd;
-
-    return Success;
-}
-
-static void
-EvdevPtrDisable(KdPointerInfo * pi)
-{
-    Kevdev *ke;
-
-    ke = pi->driverPrivate;
-
-    if (!pi || !pi->driverPrivate)
-        return;
-
-    KdUnregisterFd(pi, ke->fd, TRUE);
-
-    if (ioctl(ke->fd, EVIOCGRAB, 0) < 0)
-        perror("Ungrabbing evdev mouse device failed");
-
-    free(ke);
-    pi->driverPrivate = 0;
-}
-
-static void
-EvdevPtrFini(KdPointerInfo * pi)
-{
-}
-
-/*
- * Evdev keyboard functions
- */
-
-static void
-readMapping(KdKeyboardInfo * ki)
-{
-    if (!ki)
-        return;
-
-    ki->minScanCode = 0;
-    ki->maxScanCode = 247;
-}
-
-static void
-EvdevKbdRead(int evdevPort, void *closure)
-{
-    KdKeyboardInfo *ki = closure;
-    struct input_event events[NUM_EVENTS];
-    int i, n;
-
-    n = read(evdevPort, &events, NUM_EVENTS * sizeof(struct input_event));
-    if (n <= 0) {
-        if (errno == ENODEV)
-            DeleteInputDeviceRequest(ki->dixdev);
-        return;
-    }
-
-    n /= sizeof(struct input_event);
-    for (i = 0; i < n; i++) {
-        if (events[i].type == EV_KEY)
-            KdEnqueueKeyboardEvent(ki, events[i].code, !events[i].value);
-/* FIXME: must implement other types of events
-        else
-            ErrorF("Event type (%d) not delivered\n", events[i].type);
-*/
-    }
-}
-
-static Status
-EvdevKbdInit(KdKeyboardInfo * ki)
-{
-    int fd;
-
-    if (!ki->path) {
-        ErrorF("Couldn't find evdev device path\n");
-        return BadValue;
-    }
-    else {
-        fd = open(ki->path, O_RDWR);
-        if (fd < 0) {
-            ErrorF("Failed to open evdev device %s\n", ki->path);
-            return BadMatch;
-        }
-    }
-
-    close(fd);
-
-    if (!ki->name)
-        ki->name = strdup("Evdev keyboard");
-
-    readMapping(ki);
-
-    return Success;
-}
-
-static Status
-EvdevKbdEnable(KdKeyboardInfo * ki)
-{
-    unsigned long ev[NBITS(EV_MAX)];
-    Kevdev *ke;
-    int fd;
-
-    if (!ki || !ki->path)
-        return BadImplementation;
-
-    fd = open(ki->path, O_RDWR);
-    if (fd < 0)
-        return BadMatch;
-
-    if (ioctl(fd, EVIOCGRAB, 1) < 0)
-        perror("Grabbing evdev keyboard device failed");
-
-    if (ioctl(fd, EVIOCGBIT(0 /*EV*/, sizeof(ev)), ev) < 0) {
-        perror("EVIOCGBIT 0");
-        close(fd);
-        return BadMatch;
-    }
-
-    ke = calloc(1, sizeof(Kevdev));
-    if (!ke) {
-        close(fd);
-        return BadAlloc;
-    }
-
-    if (!KdRegisterFd(fd, EvdevKbdRead, ki)) {
-        free(ke);
-        close(fd);
-        return BadAlloc;
-    }
-    ki->driverPrivate = ke;
-    ke->fd = fd;
-
-    return Success;
-}
-
-static void
-EvdevKbdLeds(KdKeyboardInfo * ki, int leds)
-{
-    struct input_event event;
-    Kevdev             *ke;
-    int                i;
-
-    if (!ki)
-        return;
-
-    ke = ki->driverPrivate;
-
-    if (!ke)
-        return;
-
-    memset(&event, 0, sizeof(event));
-
-    event.type = EV_LED;
-    event.code = LED_CAPSL;
-    event.value = leds & (1 << 0) ? 1 : 0;
-    i = write(ke->fd, (char *) &event, sizeof(event));
-    (void) i;
-
-    event.type = EV_LED;
-    event.code = LED_NUML;
-    event.value = leds & (1 << 1) ? 1 : 0;
-    i = write(ke->fd, (char *) &event, sizeof(event));
-    (void) i;
-
-    event.type = EV_LED;
-    event.code = LED_SCROLLL;
-    event.value = leds & (1 << 2) ? 1 : 0;
-    i = write(ke->fd, (char *) &event, sizeof(event));
-    (void) i;
-
-    event.type = EV_LED;
-    event.code = LED_COMPOSE;
-    event.value = leds & (1 << 3) ? 1 : 0;
-    i = write(ke->fd, (char *) &event, sizeof(event));
-    (void) i;
-}
-
-static void
-EvdevKbdBell(KdKeyboardInfo * ki, int volume, int frequency, int duration)
-{
-}
-
-static void
-EvdevKbdDisable(KdKeyboardInfo * ki)
-{
-    Kevdev *ke;
-
-    ke = ki->driverPrivate;
-
-    if (!ki || !ki->driverPrivate)
-        return;
-
-    KdUnregisterFd(ki, ke->fd, TRUE);
-
-    if (ioctl(ke->fd, EVIOCGRAB, 0) < 0)
-        perror("Ungrabbing evdev keyboard device failed");
-
-    free(ke);
-    ki->driverPrivate = 0;
-}
-
-static void
-EvdevKbdFini(KdKeyboardInfo * ki)
-{
-}
-
-KdPointerDriver LinuxEvdevMouseDriver = {
-    "evdev",
-    EvdevPtrInit,
-    EvdevPtrEnable,
-    EvdevPtrDisable,
-    EvdevPtrFini,
-    NULL,
-};
-
-KdKeyboardDriver LinuxEvdevKeyboardDriver = {
-    "evdev",
-    EvdevKbdInit,
-    EvdevKbdEnable,
-    EvdevKbdLeds,
-    EvdevKbdBell,
-    EvdevKbdDisable,
-    EvdevKbdFini,
-    NULL,
-};
diff --git a/hw/kdrive/linux/linux.c b/hw/kdrive/linux/linux.c
deleted file mode 100644
index 20f1fce..0000000
--- a/hw/kdrive/linux/linux.c
+++ /dev/null
@@ -1,347 +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 <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 TSLIB
-extern KdPointerDriver TsDriver;
-#endif
-#ifdef KDRIVE_EVDEV
-extern KdPointerDriver LinuxEvdevMouseDriver;
-extern KdKeyboardDriver LinuxEvdevKeyboardDriver;
-#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(const char *file)
-{
-    struct stat st;
-    __uid_t u;
-    __gid_t g;
-    int r;
-
-    if (stat(file, &st) < 0)
-        return;
-    u = getuid();
-    g = getgid();
-    if (st.st_uid != u || st.st_gid != g) {
-        r = chown(file, u, g);
-        (void) r;
-    }
-}
-
-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);
-    }
-
-    snprintf(vtname, sizeof(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 Bool LinuxApmRunning;
-
-static void
-LinuxApmNotify(int fd, int mask, void *blockData)
-{
-    apm_event_t event;
-    Bool running = LinuxApmRunning;
-    int cmd = APM_IOC_SUSPEND;
-
-    while (read(fd, &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(fd, 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);
-        SetNotifyFd(LinuxApmFd, LinuxApmNotify, X_NOTIFY_READ, NULL);
-    }
-
-    /*
-     * 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) {
-        RemoveNotifyFd(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 TSLIB
-    KdAddPointerDriver(&TsDriver);
-#endif
-#ifdef KDRIVE_EVDEV
-    KdAddPointerDriver(&LinuxEvdevMouseDriver);
-    KdAddKeyboardDriver(&LinuxEvdevKeyboardDriver);
-#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/tslib.c b/hw/kdrive/linux/tslib.c
deleted file mode 100644
index 0cdb4ea..0000000
--- a/hw/kdrive/linux/tslib.c
+++ /dev/null
@@ -1,194 +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 "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,
-};
commit feed7e3f982a7ac14f6fe85ed2e1ec4a83700841
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Feb 16 12:46:22 2017 -0500

    xfbdev: Remove
    
    With the shadow framebuffer overallocation bug fixed (ref below), Xorg +
    fbdev has tens to hundreds of kilobytes more baseline memory usage than
    Xfbdev. That's not nothing, but it's little enough that we should focus
    our efforts on the server that actually gets development attention.
    
    https://cgit.freedesktop.org/xorg/driver/xf86-video-fbdev/commit/?id=2c5eba8
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>
    Acked-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/configure.ac b/configure.ac
index 28afa37..291f446 100644
--- a/configure.ac
+++ b/configure.ac
@@ -659,7 +659,6 @@ AC_ARG_ENABLE(glamor,         AS_HELP_STRING([--enable-glamor], [Build glamor di
 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(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-evdev,   AS_HELP_STRING([--enable-kdrive-evdev], [Build evdev driver for kdrive (default: auto)]), [KDRIVE_EVDEV=$enableval], [KDRIVE_EVDEV=auto])
 AC_ARG_ENABLE(libunwind,      AS_HELP_STRING([--enable-libunwind], [Use libunwind for backtracing (default: auto)]), [LIBUNWIND="$enableval"], [LIBUNWIND="auto"])
@@ -2371,17 +2370,6 @@ 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, [
@@ -2471,9 +2459,7 @@ AC_SUBST([KDRIVE_LIBS])
 AM_CONDITIONAL(KDRIVELINUX, [test "x$KDRIVELINUX" = xyes])
 AM_CONDITIONAL(KDRIVE_EVDEV, [test "x$KDRIVE_EVDEV" = 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])
 
 dnl Xwayland DDX
 
@@ -2654,7 +2640,6 @@ hw/xquartz/xpr/Makefile
 hw/kdrive/Makefile
 hw/kdrive/ephyr/Makefile
 hw/kdrive/ephyr/man/Makefile
-hw/kdrive/fbdev/Makefile
 hw/kdrive/linux/Makefile
 hw/kdrive/src/Makefile
 hw/xwayland/Makefile
diff --git a/hw/kdrive/Makefile.am b/hw/kdrive/Makefile.am
index eee3f0c..de30e51 100644
--- a/hw/kdrive/Makefile.am
+++ b/hw/kdrive/Makefile.am
@@ -1,7 +1,3 @@
-if BUILD_KDRIVEFBDEVLIB
-FBDEV_SUBDIRS = fbdev
-endif
-
 if XEPHYR
 XEPHYR_SUBDIRS = ephyr
 endif
@@ -11,7 +7,6 @@ LINUX_SUBDIRS = linux
 endif
 
 SERVER_SUBDIRS = 		\
-	$(FBDEV_SUBDIRS)	\
 	$(XEPHYR_SUBDIRS)
 
 SUBDIRS =			\
@@ -19,7 +14,7 @@ SUBDIRS =			\
 	$(LINUX_SUBDIRS)	\
 	$(SERVER_SUBDIRS)
 
-DIST_SUBDIRS = fbdev ephyr src linux
+DIST_SUBDIRS = ephyr src linux
 
 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 d550c13..0000000
--- a/hw/kdrive/fbdev/Makefile.am
+++ /dev/null
@@ -1,30 +0,0 @@
-AM_CPPFLAGS = 					\
-	@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_MAIN_LIB@				\
-	@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 9b69edf..0000000
--- a/hw/kdrive/fbdev/fbdev.c
+++ /dev/null
@@ -1,892 +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>
-
-const 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;
-
-    /* Calculate fix.line_length if it's zero */
-    if (!priv->fix.line_length)
-        priv->fix.line_length = (priv->var.xres_virtual * depth + 7) / 8;
-
-    switch (priv->fix.visual) {
-    case FB_VISUAL_MONO01:
-    case FB_VISUAL_MONO10:
-        screen->fb.visuals = (1 << StaticGray);
-        break;
-    case FB_VISUAL_PSEUDOCOLOR:
-        screen->fb.visuals = (1 << StaticGray);
-        if (priv->var.bits_per_pixel == 1) {
-            /* Override to monochrome, to have preallocated black/white */
-            priv->fix.visual = FB_VISUAL_MONO01;
-        } else if (gray) {
-            /* 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;
-}
-
-static void *
-fbdevWindowAfb(ScreenPtr pScreen,
-               CARD32 row,
-               CARD32 offset, int mode, CARD32 *size, void *closure)
-{
-    KdScreenPriv(pScreen);
-    FbdevPriv *priv = pScreenPriv->card->driver;
-
-    if (!pScreenPriv->enabled)
-        return 0;
-    /* offset to next plane */
-    *size = priv->var.yres_virtual * 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 ||
-        priv->fix.type != FB_TYPE_PACKED_PIXELS)
-        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;
-    switch (priv->fix.type) {
-    case FB_TYPE_PACKED_PIXELS:
-        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;
-        break;
-
-    case FB_TYPE_PLANES:
-        window = fbdevWindowAfb;
-        switch (priv->var.bits_per_pixel) {
-        case 4:
-            update = shadowUpdateAfb4;
-            break;
-
-        case 8:
-            update = shadowUpdateAfb8;
-            break;
-
-        default:
-            FatalError("Bitplanes with bpp %u are not yet supported\n",
-                       priv->var.bits_per_pixel);
-        }
-        break;
-
-    case FB_TYPE_INTERLEAVED_PLANES:
-        if (priv->fix.type_aux == 2) {
-            switch (priv->var.bits_per_pixel) {
-            case 4:
-                update = shadowUpdateIplan2p4;
-                break;
-
-            case 8:
-                update = shadowUpdateIplan2p8;
-                break;
-
-            default:
-                FatalError("Atari interleaved bitplanes with bpp %u are not yet supported\n",
-                           priv->var.bits_per_pixel);
-            }
-        } else {
-            FatalError("Interleaved bitplanes with interleave %u are not yet supported\n",
-                       priv->fix.type_aux);
-        }
-        break;
-
-    case FB_TYPE_TEXT:
-        FatalError("Text frame buffers are not yet supported\n");
-        break;
-
-    case FB_TYPE_VGA_PLANES:
-        FatalError("VGA planes are not yet supported\n");
-        break;
-
-    default:
-        FatalError("Unsupported frame buffer type %u\n", priv->fix.type);
-        break;
-    }
-
-    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, newmmwidth, newmmheight;
-
-    if (screen->randr & (RR_Rotate_0 | RR_Rotate_180)) {
-        newwidth = pSize->width;
-        newheight = pSize->height;
-        newmmwidth = pSize->mmWidth;
-        newmmheight = pSize->mmHeight;
-    }
-    else {
-        newwidth = pSize->height;
-        newheight = pSize->width;
-        newmmwidth = pSize->mmHeight;
-        newmmheight = pSize->mmWidth;
-    }
-
-    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);
-    pScreen->width = newwidth;
-    pScreen->height = newheight;
-    pScreen->mmWidth = newmmwidth;
-    pScreen->mmHeight = newmmheight;
-
-    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_MONO01:
-        pScreen->whitePixel = 0;
-        pScreen->blackPixel = 1;
-        pmap->red[0].co.local.red = 65535;
-        pmap->red[0].co.local.green = 65535;
-        pmap->red[0].co.local.blue = 65535;
-        pmap->red[1].co.local.red = 0;
-        pmap->red[1].co.local.green = 0;
-        pmap->red[1].co.local.blue = 0;
-        return TRUE;
-    case FB_VISUAL_MONO10:
-        pScreen->blackPixel = 0;
-        pScreen->whitePixel = 1;
-        pmap->red[0].co.local.red = 0;
-        pmap->red[0].co.local.green = 0;
-        pmap->red[0].co.local.blue = 0;
-        pmap->red[1].co.local.red = 65535;
-        pmap->red[1].co.local.green = 65535;
-        pmap->red[1].co.local.blue = 65535;
-        return TRUE;
-    case FB_VISUAL_STATIC_PSEUDOCOLOR:
-        pVisual = pmap->pVisual;
-        nent = pVisual->ColormapEntries;
-        pdefs = xallocarray(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)
-{
-    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 f3f7aec..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 const 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 d2a1401..0000000
--- a/hw/kdrive/fbdev/fbinit.c
+++ /dev/null
@@ -1,105 +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)
-{
-    KdCloseInput();
-}
-
-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 */
-};
commit 35fbcb3f9987758bc26a87d5d7c033f4367cbd39
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Feb 16 12:46:21 2017 -0500

    xfake: Remove
    
    We already have Xvfb for a dummy DDX.
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>
    Acked-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/configure.ac b/configure.ac
index a613087..28afa37 100644
--- a/configure.ac
+++ b/configure.ac
@@ -659,7 +659,6 @@ AC_ARG_ENABLE(glamor,         AS_HELP_STRING([--enable-glamor], [Build glamor di
 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-evdev,   AS_HELP_STRING([--enable-kdrive-evdev], [Build evdev driver for kdrive (default: auto)]), [KDRIVE_EVDEV=$enableval], [KDRIVE_EVDEV=auto])
@@ -2475,7 +2474,6 @@ 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 Xwayland DDX
 
@@ -2656,7 +2654,6 @@ hw/xquartz/xpr/Makefile
 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
diff --git a/hw/kdrive/Makefile.am b/hw/kdrive/Makefile.am
index 471ca89..eee3f0c 100644
--- a/hw/kdrive/Makefile.am
+++ b/hw/kdrive/Makefile.am
@@ -2,10 +2,6 @@ if BUILD_KDRIVEFBDEVLIB
 FBDEV_SUBDIRS = fbdev
 endif
 
-if XFAKESERVER
-XFAKE_SUBDIRS = fake
-endif
-
 if XEPHYR
 XEPHYR_SUBDIRS = ephyr
 endif
@@ -16,15 +12,14 @@ endif
 
 SERVER_SUBDIRS = 		\
 	$(FBDEV_SUBDIRS)	\
-	$(XEPHYR_SUBDIRS)       \
-	$(XFAKE_SUBDIRS)
+	$(XEPHYR_SUBDIRS)
 
 SUBDIRS =			\
 	src			\
 	$(LINUX_SUBDIRS)	\
 	$(SERVER_SUBDIRS)
 
-DIST_SUBDIRS = fbdev ephyr src linux fake
+DIST_SUBDIRS = fbdev ephyr src linux
 
 relink:
 	$(AM_V_at)for i in $(SERVER_SUBDIRS) ; do $(MAKE) -C $$i relink || exit 1 ; done
diff --git a/hw/kdrive/fake/.gitignore b/hw/kdrive/fake/.gitignore
deleted file mode 100644
index 12a25cc..0000000
--- a/hw/kdrive/fake/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-#		Add & Override for this directory and it's subdirectories
-Xfake
diff --git a/hw/kdrive/fake/Makefile.am b/hw/kdrive/fake/Makefile.am
deleted file mode 100644
index d28bd27..0000000
--- a/hw/kdrive/fake/Makefile.am
+++ /dev/null
@@ -1,31 +0,0 @@
-AM_CPPFLAGS = 					\
-	@KDRIVE_INCS@				\
-	@KDRIVE_CFLAGS@
-
-noinst_LTLIBRARIES = libfake.la
-
-bin_PROGRAMS = Xfake
-
-libfake_la_SOURCES =	\
-	fake.c		\
-	kbd.c		\
-	os.c		\
-	mouse.c		\
-	fake.h
-
-Xfake_SOURCES = \
-	fakeinit.c
-
-Xfake_LDADD = 						\
-	libfake.la					\
-	@KDRIVE_MAIN_LIB@				\
-	@KDRIVE_LIBS@
-
-Xfake_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-
-Xfake_DEPENDENCIES =	\
-	libfake.la					\
-	@KDRIVE_LOCAL_LIBS@
-
-relink:
-	$(AM_V_at)rm -f $(bin_PROGRAMS) && $(MAKE) $(bin_PROGRAMS)
diff --git a/hw/kdrive/fake/fake.c b/hw/kdrive/fake/fake.c
deleted file mode 100644
index 7205df4..0000000
--- a/hw/kdrive/fake/fake.c
+++ /dev/null
@@ -1,444 +0,0 @@
-/*
- * Copyright © 2004 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 "fake.h"
-
-Bool
-fakeInitialize(KdCardInfo * card, FakePriv * priv)
-{
-    priv->base = 0;
-    priv->bytes_per_line = 0;
-    return TRUE;
-}
-
-Bool
-fakeCardInit(KdCardInfo * card)
-{
-    FakePriv *priv;
-
-    priv = (FakePriv *) malloc(sizeof(FakePriv));
-    if (!priv)
-        return FALSE;
-
-    if (!fakeInitialize(card, priv)) {
-        free(priv);
-        return FALSE;
-    }
-    card->driver = priv;
-
-    return TRUE;
-}
-
-Bool
-fakeScreenInitialize(KdScreenInfo * screen, FakeScrPriv * scrpriv)
-{
-    if (!screen->width || !screen->height) {
-        screen->width = 1024;
-        screen->height = 768;
-        screen->rate = 72;
-    }
-
-    if (screen->width <= 0)
-        screen->width = 1;
-    if (screen->height <= 0)
-        screen->height = 1;
-
-    if (!screen->fb.depth)
-        screen->fb.depth = 16;
-
-    if (screen->fb.depth <= 8) {
-        screen->fb.visuals = ((1 << StaticGray) |
-                              (1 << GrayScale) |
-                              (1 << StaticColor) |
-                              (1 << PseudoColor) |
-                              (1 << TrueColor) | (1 << DirectColor));
-    }
-    else {
-        screen->fb.visuals = (1 << TrueColor);
-#define Mask(o,l)   (((1 << l) - 1) << o)
-        if (screen->fb.depth <= 15) {
-            screen->fb.depth = 15;
-            screen->fb.bitsPerPixel = 16;
-            screen->fb.redMask = Mask (10, 5);
-            screen->fb.greenMask = Mask (5, 5);
-            screen->fb.blueMask = Mask (0, 5);
-        }
-        else if (screen->fb.depth <= 16) {
-            screen->fb.depth = 16;
-            screen->fb.bitsPerPixel = 16;
-            screen->fb.redMask = Mask (11, 5);
-            screen->fb.greenMask = Mask (5, 6);
-            screen->fb.blueMask = Mask (0, 5);
-        }
-        else {
-            screen->fb.depth = 24;
-            screen->fb.bitsPerPixel = 32;
-            screen->fb.redMask = Mask (16, 8);
-            screen->fb.greenMask = Mask (8, 8);
-            screen->fb.blueMask = Mask (0, 8);
-        }
-    }
-
-    scrpriv->randr = screen->randr;
-
-    return fakeMapFramebuffer(screen);
-}
-
-Bool
-fakeScreenInit(KdScreenInfo * screen)
-{
-    FakeScrPriv *scrpriv;
-
-    scrpriv = calloc(1, sizeof(FakeScrPriv));
-    if (!scrpriv)
-        return FALSE;
-    screen->driver = scrpriv;
-    if (!fakeScreenInitialize(screen, scrpriv)) {
-        screen->driver = 0;
-        free(scrpriv);
-        return FALSE;
-    }
-    return TRUE;
-}
-
-void *
-fakeWindowLinear(ScreenPtr pScreen,
-                 CARD32 row,
-                 CARD32 offset, int mode, CARD32 *size, void *closure)
-{
-    KdScreenPriv(pScreen);
-    FakePriv *priv = pScreenPriv->card->driver;
-
-    if (!pScreenPriv->enabled)
-        return 0;
-    *size = priv->bytes_per_line;
-    return priv->base + row * priv->bytes_per_line;
-}
-
-Bool
-fakeMapFramebuffer(KdScreenInfo * screen)
-{
-    FakeScrPriv *scrpriv = screen->driver;
-    KdPointerMatrix m;
-    FakePriv *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);
-
-    priv->bytes_per_line =
-        ((screen->width * screen->fb.bitsPerPixel + 31) >> 5) << 2;
-    free(priv->base);
-    priv->base = xallocarray(priv->bytes_per_line, screen->height);
-
-    if (scrpriv->shadow) {
-        if (!KdShadowFbAlloc
-            (screen, scrpriv->randr & (RR_Rotate_90 | RR_Rotate_270)))
-            return FALSE;
-    }
-    else {
-        screen->fb.byteStride = priv->bytes_per_line;
-        screen->fb.pixelStride = (priv->bytes_per_line * 8 /
-                                  screen->fb.bitsPerPixel);
-        screen->fb.frameBuffer = (CARD8 *) (priv->base);
-    }
-
-    return TRUE;
-}
-
-void
-fakeSetScreenSizes(ScreenPtr pScreen)
-{
-    KdScreenPriv(pScreen);
-    KdScreenInfo *screen = pScreenPriv->screen;
-    FakeScrPriv *scrpriv = screen->driver;
-
-    if (scrpriv->randr & (RR_Rotate_0 | RR_Rotate_180)) {
-        pScreen->width = screen->width;
-        pScreen->height = screen->height;
-        pScreen->mmWidth = screen->width_mm;
-        pScreen->mmHeight = screen->height_mm;
-    }
-    else {
-        pScreen->width = screen->width;
-        pScreen->height = screen->height;
-        pScreen->mmWidth = screen->height_mm;
-        pScreen->mmHeight = screen->width_mm;
-    }
-}
-
-Bool
-fakeUnmapFramebuffer(KdScreenInfo * screen)
-{
-    FakePriv *priv = screen->card->driver;
-
-    KdShadowFbFree(screen);
-    free(priv->base);
-    priv->base = NULL;
-    return TRUE;
-}
-
-Bool
-fakeSetShadow(ScreenPtr pScreen)
-{
-    KdScreenPriv(pScreen);
-    KdScreenInfo *screen = pScreenPriv->screen;
-    FakeScrPriv *scrpriv = screen->driver;
-    ShadowUpdateProc update;
-    ShadowWindowProc window;
-
-    window = fakeWindowLinear;
-    update = 0;
-    if (scrpriv->randr)
-        update = shadowUpdateRotatePacked;
-    else
-        update = shadowUpdatePacked;
-    return KdShadowSet(pScreen, scrpriv->randr, update, window);
-}
-
-#ifdef RANDR
-Bool
-fakeRandRGetInfo(ScreenPtr pScreen, Rotation * rotations)
-{
-    KdScreenPriv(pScreen);
-    KdScreenInfo *screen = pScreenPriv->screen;
-    FakeScrPriv *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;
-}
-
-Bool
-fakeRandRSetConfig(ScreenPtr pScreen,
-                   Rotation randr, int rate, RRScreenSizePtr pSize)
-{
-    KdScreenPriv(pScreen);
-    KdScreenInfo *screen = pScreenPriv->screen;
-    FakeScrPriv *scrpriv = screen->driver;
-    Bool wasEnabled = pScreenPriv->enabled;
-    FakeScrPriv 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);
-
-    fakeUnmapFramebuffer(screen);
-
-    if (!fakeMapFramebuffer(screen))
-        goto bail4;
-
-    KdShadowUnset(screen->pScreen);
-
-    if (!fakeSetShadow(screen->pScreen))
-        goto bail4;
-
-    fakeSetScreenSizes(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:
-    fakeUnmapFramebuffer(screen);
-    *scrpriv = oldscr;
-    (void) fakeMapFramebuffer(screen);
-    pScreen->width = oldwidth;
-    pScreen->height = oldheight;
-    pScreen->mmWidth = oldmmwidth;
-    pScreen->mmHeight = oldmmheight;
-
-    if (wasEnabled)
-        KdEnableScreen(pScreen);
-    return FALSE;
-}
-
-Bool
-fakeRandRInit(ScreenPtr pScreen)
-{
-    rrScrPrivPtr pScrPriv;
-
-    if (!RRScreenInit(pScreen))
-        return FALSE;
-
-    pScrPriv = rrGetScrPriv(pScreen);
-    pScrPriv->rrGetInfo = fakeRandRGetInfo;
-    pScrPriv->rrSetConfig = fakeRandRSetConfig;
-    return TRUE;
-}
-#endif
-
-Bool
-fakeCreateColormap(ColormapPtr pmap)
-{
-    return fbInitializeColormap(pmap);
-}
-
-Bool
-fakeInitScreen(ScreenPtr pScreen)
-{
-    pScreen->CreateColormap = fakeCreateColormap;
-    return TRUE;
-}
-
-Bool
-fakeFinishInitScreen(ScreenPtr pScreen)
-{
-    if (!shadowSetup(pScreen))
-        return FALSE;
-
-#ifdef RANDR
-    if (!fakeRandRInit(pScreen))
-        return FALSE;
-#endif
-
-    return TRUE;
-}
-
-Bool
-fakeCreateResources(ScreenPtr pScreen)
-{
-    return fakeSetShadow(pScreen);
-}
-
-void
-fakePreserve(KdCardInfo * card)
-{
-}
-
-Bool
-fakeEnable(ScreenPtr pScreen)
-{
-    return TRUE;
-}
-
-Bool
-fakeDPMS(ScreenPtr pScreen, int mode)
-{
-    return TRUE;
-}
-
-void
-fakeDisable(ScreenPtr pScreen)
-{
-}
-
-void
-fakeRestore(KdCardInfo * card)
-{
-}
-
-void
-fakeScreenFini(KdScreenInfo * screen)
-{
-}
-
-void
-fakeCardFini(KdCardInfo * card)
-{
-    FakePriv *priv = card->driver;
-
-    free(priv->base);
-    free(priv);
-}
-
-void
-fakeGetColors(ScreenPtr pScreen, int n, xColorItem * pdefs)
-{
-    while (n--) {
-        pdefs->red = 0;
-        pdefs->green = 0;
-        pdefs->blue = 0;
-        pdefs++;
-    }
-}
-
-void
-fakePutColors(ScreenPtr pScreen, int n, xColorItem * pdefs)
-{
-}
diff --git a/hw/kdrive/fake/fake.h b/hw/kdrive/fake/fake.h
deleted file mode 100644
index ae33fc6..0000000
--- a/hw/kdrive/fake/fake.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright © 2004 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 <unistd.h>
-#include "kdrive.h"
-
-#ifdef RANDR
-#include "randrstr.h"
-#endif
-
-typedef struct _fakePriv {
-    CARD8 *base;
-    int bytes_per_line;
-} FakePriv;
-
-typedef struct _fakeScrPriv {
-    Rotation randr;
-    Bool shadow;
-} FakeScrPriv;
-
-extern KdCardFuncs fakeFuncs;
-
-Bool
- fakeInitialize(KdCardInfo * card, FakePriv * priv);
-
-Bool
- fakeCardInit(KdCardInfo * card);
-
-Bool
- fakeScreenInit(KdScreenInfo * screen);
-
-Bool
- fakeScreenInitialize(KdScreenInfo * screen, FakeScrPriv * scrpriv);
-
-Bool
- fakeInitScreen(ScreenPtr pScreen);
-
-Bool
- fakeFinishInitScreen(ScreenPtr pScreen);
-
-Bool
- fakeCreateResources(ScreenPtr pScreen);
-
-void
- fakePreserve(KdCardInfo * card);
-
-Bool
- fakeEnable(ScreenPtr pScreen);
-
-Bool
- fakeDPMS(ScreenPtr pScreen, int mode);
-
-void
- fakeDisable(ScreenPtr pScreen);
-
-void
- fakeRestore(KdCardInfo * card);
-
-void
- fakeScreenFini(KdScreenInfo * screen);
-
-void
- fakeCardFini(KdCardInfo * card);
-
-void
- fakeGetColors(ScreenPtr pScreen, int n, xColorItem * pdefs);
-
-void
- fakePutColors(ScreenPtr pScreen, int n, xColorItem * pdefs);
-
-Bool
- fakeMapFramebuffer(KdScreenInfo * screen);
-
-void *fakeWindowLinear(ScreenPtr pScreen,
-                       CARD32 row,
-                       CARD32 offset, int mode, CARD32 *size, void *closure);
-
-void
- fakeSetScreenSizes(ScreenPtr pScreen);
-
-Bool
- fakeUnmapFramebuffer(KdScreenInfo * screen);
-
-Bool
- fakeSetShadow(ScreenPtr pScreen);
-
-Bool
- fakeCreateColormap(ColormapPtr pmap);
-
-#ifdef RANDR
-Bool
- fakeRandRGetInfo(ScreenPtr pScreen, Rotation * rotations);
-
-Bool
-
-fakeRandRSetConfig(ScreenPtr pScreen,
-                   Rotation randr, int rate, RRScreenSizePtr pSize);
-Bool
- fakeRandRInit(ScreenPtr pScreen);
-
-#endif
-
-extern KdPointerDriver FakePointerDriver;
-
-extern KdKeyboardDriver FakeKeyboardDriver;
-
-extern KdOsFuncs FakeOsFuncs;
-
-#endif                          /* _FBDEV_H_ */
diff --git a/hw/kdrive/fake/fakeinit.c b/hw/kdrive/fake/fakeinit.c
deleted file mode 100644
index 0aae1dd..0000000
--- a/hw/kdrive/fake/fakeinit.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright © 2004 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 "fake.h"
-
-void
-InitCard(char *name)
-{
-    KdCardInfoAdd(&fakeFuncs, 0);
-}
-
-void
-InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
-{
-    KdInitOutput(pScreenInfo, argc, argv);
-}
-
-void
-InitInput(int argc, char **argv)
-{
-    KdPointerInfo *pi;
-    KdKeyboardInfo *ki;
-
-    pi = KdNewPointer();
-    if (!pi)
-        return;
-    pi->driver = &FakePointerDriver;
-    KdAddPointer(pi);
-
-    ki = KdNewKeyboard();
-    if (!ki)
-        return;
-    ki->driver = &FakeKeyboardDriver;
-    KdAddKeyboard(ki);
-
-    KdInitInput();
-}
-
-void
-CloseInput(void)
-{
-    KdCloseInput();
-}
-
-#ifdef DDXBEFORERESET
-void
-ddxBeforeReset(void)
-{
-}
-#endif
-
-void
-ddxUseMsg(void)
-{
-    KdUseMsg();
-}
-
-int
-ddxProcessArgument(int argc, char **argv, int i)
-{
-    return KdProcessArgument(argc, argv, i);
-}
-
-void
-OsVendorInit(void)
-{
-    KdOsInit(&FakeOsFuncs);
-}
-
-KdCardFuncs fakeFuncs = {
-    fakeCardInit,               /* cardinit */
-    fakeScreenInit,             /* scrinit */
-    fakeInitScreen,             /* initScreen */
-    fakeFinishInitScreen,       /* finishInitScreen */
-    fakeCreateResources,        /* createRes */
-    fakePreserve,               /* preserve */
-    fakeEnable,                 /* enable */
-    fakeDPMS,                   /* dpms */
-    fakeDisable,                /* disable */
-    fakeRestore,                /* restore */
-    fakeScreenFini,             /* scrfini */
-    fakeCardFini,               /* cardfini */
-
-    0,                          /* initCursor */
-    0,                          /* enableCursor */
-    0,                          /* disableCursor */
-    0,                          /* finiCursor */
-    0,                          /* recolorCursor */
-
-    0,                          /* initAccel */
-    0,                          /* enableAccel */
-    0,                          /* disableAccel */
-    0,                          /* finiAccel */
-
-    fakeGetColors,              /* getColors */
-    fakePutColors,              /* putColors */
-};
diff --git a/hw/kdrive/fake/kbd.c b/hw/kdrive/fake/kbd.c
deleted file mode 100644
index 83a3c66..0000000
--- a/hw/kdrive/fake/kbd.c
+++ /dev/null
@@ -1,75 +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 "fake.h"
-#include <X11/keysym.h>
-
-#define FAKE_WIDTH  2
-
-static Status
-FakeKeyboardInit(KdKeyboardInfo * ki)
-{
-    ki->minScanCode = 8;
-    ki->maxScanCode = 255;
-    return Success;
-}
-
-static Status
-FakeKeyboardEnable(KdKeyboardInfo * ki)
-{
-    return Success;
-}
-
-static void
-FakeKeyboardDisable(KdKeyboardInfo * ki)
-{
-    return;
-}
-
-static void
-FakeKeyboardFini(KdKeyboardInfo * ki)
-{
-}
-
-static void
-FakeKeyboardLeds(KdKeyboardInfo * ki, int leds)
-{
-}
-
-static void
-FakeKeyboardBell(KdKeyboardInfo * ki, int volume, int frequency, int duration)
-{
-}
-
-KdKeyboardDriver FakeKeyboardDriver = {
-    "fake",
-    FakeKeyboardInit,
-    FakeKeyboardEnable,
-    FakeKeyboardLeds,
-    FakeKeyboardBell,
-    FakeKeyboardDisable,
-    FakeKeyboardFini,
-    NULL,
-};
diff --git a/hw/kdrive/fake/mouse.c b/hw/kdrive/fake/mouse.c
deleted file mode 100644
index 564dae4..0000000
--- a/hw/kdrive/fake/mouse.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright © 2004 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 "inputstr.h"
-#include "scrnintstr.h"
-#include "kdrive.h"
-
-static Status
-MouseInit(KdPointerInfo * pi)
-{
-    return Success;
-}
-
-static Status
-MouseEnable(KdPointerInfo * pi)
-{
-    return Success;
-}
-
-static void
-MouseDisable(KdPointerInfo * pi)
-{
-    return;
-}
-
-static void
-MouseFini(KdPointerInfo * pi)
-{
-    return;
-}
-
-KdPointerDriver FakePointerDriver = {
-    "fake",
-    MouseInit,
-    MouseEnable,
-    MouseDisable,
-    MouseFini,
-};
diff --git a/hw/kdrive/fake/os.c b/hw/kdrive/fake/os.c
deleted file mode 100644
index 01bb37b..0000000
--- a/hw/kdrive/fake/os.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright © 2004 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 "fake.h"
-
-static int
-FakeInit(void)
-{
-    return 1;
-}
-
-static void
-FakeEnable(void)
-{
-}
-
-static Bool
-FakeSpecialKey(KeySym sym)
-{
-    return FALSE;
-}
-
-static void
-FakeDisable(void)
-{
-}
-
-static void
-FakeFini(void)
-{
-}
-
-KdOsFuncs FakeOsFuncs = {
-    FakeInit,
-    FakeEnable,
-    FakeSpecialKey,
-    FakeDisable,
-    FakeFini,
-    0
-};
commit 3dad57b121fdf001e75fffa7e3007a9a0a154f67
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Feb 16 14:00:03 2017 -0500

    sdksyms: Tighten up the symbols we add to the magic table
    
    The code as written would match anything declared extern. _X_EXPORT is
    what we really mean here. That's a macro, so check for what it expands
    to and skip if not found.
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index cf26892..10909d0 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -343,6 +343,10 @@ BEGIN {
            n = 1;
         }
 
+        # only match _X_EXPORT
+        if ($n !~ /^(__attribute__..visibility..default|__global)/)
+            next;
+
 	# skip attribute, if any
 	while ($n ~ /^(__attribute__|__global)/ ||
 	    # skip modifiers, if any


More information about the xorg-commit mailing list