changeset 5045:1cee937d9fcc

Nobody has stepped up to maintain a framebuffer console driver. Bye bye! :)
author Sam Lantinga <slouken@libsdl.org>
date Wed, 19 Jan 2011 22:18:45 -0800
parents 4913042e8572
children 4cb778067834
files configure.in include/SDL_config.h.in src/video/SDL_sysvideo.h src/video/SDL_video.c src/video/fbcon/3dfx_mmio.h src/video/fbcon/3dfx_regs.h src/video/fbcon/SDL_fb3dfx.c src/video/fbcon/SDL_fb3dfx.h src/video/fbcon/SDL_fbelo.c src/video/fbcon/SDL_fbelo.h src/video/fbcon/SDL_fbevents.c src/video/fbcon/SDL_fbevents_c.h src/video/fbcon/SDL_fbkeys.h src/video/fbcon/SDL_fbmatrox.c src/video/fbcon/SDL_fbmatrox.h src/video/fbcon/SDL_fbmouse.c src/video/fbcon/SDL_fbmouse_c.h src/video/fbcon/SDL_fbriva.c src/video/fbcon/SDL_fbriva.h src/video/fbcon/SDL_fbvideo.c src/video/fbcon/SDL_fbvideo.h src/video/fbcon/matrox_mmio.h src/video/fbcon/matrox_regs.h src/video/fbcon/riva_mmio.h src/video/fbcon/riva_regs.h
diffstat 25 files changed, 0 insertions(+), 6092 deletions(-) [+]
line wrap: on
line diff
--- a/configure.in	Wed Jan 19 19:51:04 2011 -0800
+++ b/configure.in	Wed Jan 19 22:18:45 2011 -0800
@@ -1420,33 +1420,6 @@
     fi
 }
 
-dnl Find the framebuffer console includes
-CheckFBCON()
-{
-    AC_ARG_ENABLE(video-fbcon,
-AC_HELP_STRING([--enable-video-fbcon], [use framebuffer console video driver [[default=no]]]),
-                  , enable_video_fbcon=no)
-    if test x$enable_video = xyes -a x$enable_video_fbcon = xyes; then
-        AC_MSG_CHECKING(for framebuffer console support)
-        video_fbcon=no
-        AC_TRY_COMPILE([
-         #include <linux/fb.h>
-         #include <linux/kd.h>
-         #include <linux/keyboard.h>
-        ],[
-        ],[
-        video_fbcon=yes
-        ])
-        AC_MSG_RESULT($video_fbcon)
-        if test x$video_fbcon = xyes; then
-            AC_CHECK_FUNCS(getpagesize)
-            AC_DEFINE(SDL_VIDEO_DRIVER_FBCON)
-            SOURCES="$SOURCES $srcdir/src/video/fbcon/*.c"
-            have_video=yes
-        fi
-    fi
-}
-
 dnl Find DirectFB
 CheckDirectFB()
 {
@@ -2300,7 +2273,6 @@
         CheckESD
         CheckNAS
         CheckX11
-        CheckFBCON
         CheckDirectFB
         CheckFusionSound
         CheckPS3
--- a/include/SDL_config.h.in	Wed Jan 19 19:51:04 2011 -0800
+++ b/include/SDL_config.h.in	Wed Jan 19 22:18:45 2011 -0800
@@ -261,7 +261,6 @@
 #undef SDL_VIDEO_DRIVER_DIRECTFB
 #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC
 #undef SDL_VIDEO_DRIVER_DUMMY
-#undef SDL_VIDEO_DRIVER_FBCON
 #undef SDL_VIDEO_DRIVER_NDS
 #undef SDL_VIDEO_DRIVER_PHOTON
 #undef SDL_VIDEO_DRIVER_QNXGF
--- a/src/video/SDL_sysvideo.h	Wed Jan 19 19:51:04 2011 -0800
+++ b/src/video/SDL_sysvideo.h	Wed Jan 19 22:18:45 2011 -0800
@@ -408,9 +408,6 @@
 #if SDL_VIDEO_DRIVER_X11
 extern VideoBootStrap X11_bootstrap;
 #endif
-#if SDL_VIDEO_DRIVER_FBCON
-extern VideoBootStrap FBCON_bootstrap;
-#endif
 #if SDL_VIDEO_DRIVER_DIRECTFB
 extern VideoBootStrap DirectFB_bootstrap;
 #endif
--- a/src/video/SDL_video.c	Wed Jan 19 19:51:04 2011 -0800
+++ b/src/video/SDL_video.c	Wed Jan 19 22:18:45 2011 -0800
@@ -62,9 +62,6 @@
 #if SDL_VIDEO_DRIVER_X11
     &X11_bootstrap,
 #endif
-#if SDL_VIDEO_DRIVER_FBCON
-    &FBCON_bootstrap,
-#endif
 #if SDL_VIDEO_DRIVER_DIRECTFB
     &DirectFB_bootstrap,
 #endif
--- a/src/video/fbcon/3dfx_mmio.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* 3Dfx register definitions */
-
-#include "3dfx_regs.h"
-
-/* 3Dfx control macros */
-
-#define tdfx_in8(reg)		*(volatile Uint8  *)(mapped_io + (reg))
-#define tdfx_in32(reg)		*(volatile Uint32 *)(mapped_io + (reg))
-
-#define tdfx_out8(reg,v)	*(volatile Uint8  *)(mapped_io + (reg)) = v;
-#define tdfx_out32(reg,v)	*(volatile Uint32 *)(mapped_io + (reg)) = v;
-
-
-/* Wait for fifo space */
-#define tdfx_wait(space)						\
-{									\
-	while ( (tdfx_in8(TDFX_STATUS) & 0x1F) < space )		\
-		;							\
-}
-
-
-/* Wait for idle accelerator */
-#define tdfx_waitidle()							\
-{									\
-	int i = 0;							\
-									\
-	tdfx_wait(1);							\
-	tdfx_out32(COMMAND_3D, COMMAND_3D_NOP);				\
-	do {								\
-		i = (tdfx_in32(TDFX_STATUS) & STATUS_BUSY) ? 0 : i + 1;	\
-	} while ( i != 3 );						\
-}
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/3dfx_regs.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#ifndef _3DFX_REGS_H
-#define _3DFX_REGS_H
-
-/* This information comes from the public 3Dfx specs for the Voodoo 3000 */
-
-/* mapped_io register offsets */
-#define TDFX_STATUS	0x00
-
-#define INTCTRL		(0x00100000 + 0x04)
-#define CLIP0MIN	(0x00100000 + 0x08)
-#define CLIP0MAX	(0x00100000 + 0x0c)
-#define DSTBASE		(0x00100000 + 0x10)
-#define DSTFORMAT	(0x00100000 + 0x14)
-#define SRCCOLORKEYMIN	(0x00100000 + 0x18)
-#define SRCCOLORKEYMAX	(0x00100000 + 0x1c)
-#define DSTCOLORKEYMIN	(0x00100000 + 0x20)
-#define DSTCOLORKEYMAX	(0x00100000 + 0x24)
-#define BRESERROR0	(0x00100000 + 0x28)
-#define BRESERROR1	(0x00100000 + 0x2c)
-#define ROP_2D		(0x00100000 + 0x30)
-#define SRCBASE		(0x00100000 + 0x34)
-#define COMMANDEXTRA_2D	(0x00100000 + 0x38)
-#define PATTERN0	(0x00100000 + 0x44)
-#define PATTERN1	(0x00100000 + 0x48)
-#define CLIP1MIN	(0x00100000 + 0x4c)
-#define CLIP1MAX	(0x00100000 + 0x50)
-#define SRCFORMAT	(0x00100000 + 0x54)
-#define SRCSIZE		(0x00100000 + 0x58)
-#define SRCXY		(0x00100000 + 0x5c)
-#define COLORBACK	(0x00100000 + 0x60)
-#define COLORFORE	(0x00100000 + 0x64)
-#define DSTSIZE		(0x00100000 + 0x68)
-#define DSTXY		(0x00100000 + 0x6c)
-#define COMMAND_2D	(0x00100000 + 0x70)
-#define LAUNCH_2D	(0x00100000 + 0x80)
-#define PATTERNBASE	(0x00100000 + 0x100)
-
-#define COMMAND_3D	(0x00200000 + 0x120)
-
-/* register bitfields (not all, only as needed) */
-
-#define BIT(x) (1UL << (x))
-
-#define COMMAND_2D_BITBLT		0x01
-#define COMMAND_2D_FILLRECT		0x05
-#define COMMAND_2D_LINE			0x06
-#define COMMAND_2D_POLYGON_FILL		0x08
-#define COMMAND_2D_INITIATE		BIT(8)
-#define COMMAND_2D_REVERSELINE		BIT(9)
-#define COMMAND_2D_STIPPLELINE		BIT(12)
-#define COMMAND_2D_MONOCHROME_PATT	BIT(13)
-#define COMMAND_2D_MONOCHROME_TRANSP    BIT(16)
-
-#define COMMAND_3D_NOP			0x00
-
-#define STATUS_RETRACE			BIT(6)
-#define STATUS_BUSY			BIT(9)
-
-#endif /* _3DFX_REGS_H */
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fb3dfx.c	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,225 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_video.h"
-#include "../SDL_blit.h"
-#include "SDL_fb3dfx.h"
-#include "3dfx_mmio.h"
-
-
-/* Wait for vertical retrace */
-static void
-WaitVBL(_THIS)
-{
-    /* find start of retrace */
-    tdfx_waitidle();
-    while ((tdfx_in32(TDFX_STATUS) & STATUS_RETRACE) == STATUS_RETRACE);
-    /* wait until we're past the start */
-    while ((tdfx_in32(TDFX_STATUS) & STATUS_RETRACE) == 0);
-}
-
-static void
-WaitIdle(_THIS)
-{
-    tdfx_waitidle();
-}
-
-/* Sets video mem colorkey and accelerated blit function */
-static int
-SetHWColorKey(_THIS, SDL_Surface * surface, Uint32 key)
-{
-    return (0);
-}
-
-static int
-FillHWRect(_THIS, SDL_Surface * dst, SDL_Rect * rect, Uint32 color)
-{
-    int bpp;
-    char *dst_base;
-    Uint32 format;
-    int dstX, dstY;
-
-    /* Don't blit to the display surface when switched away */
-    if (switched_away) {
-        return -2;              /* no hardware access */
-    }
-    if (dst == this->screen) {
-        SDL_mutexP(hw_lock);
-    }
-
-    /* Set the destination pixel format */
-    dst_base = (char *) ((char *) dst->pixels - mapped_mem);
-    bpp = dst->format->BitsPerPixel;
-    format = dst->pitch | ((bpp + ((bpp == 8) ? 0 : 8)) << 13);
-
-    /* Calculate source and destination base coordinates */
-    dstX = rect->x;
-    dstY = rect->y;
-
-    /* Execute the fill command */
-    tdfx_wait(6);
-    tdfx_out32(DSTBASE, (Uint32) dst_base);
-    tdfx_out32(DSTFORMAT, format);
-    tdfx_out32(COLORFORE, color);
-    tdfx_out32(COMMAND_2D, COMMAND_2D_FILLRECT);
-    tdfx_out32(DSTSIZE, rect->w | (rect->h << 16));
-    tdfx_out32(LAUNCH_2D, dstX | (dstY << 16));
-
-    FB_AddBusySurface(dst);
-
-    if (dst == this->screen) {
-        SDL_mutexV(hw_lock);
-    }
-    return (0);
-}
-
-static int
-HWAccelBlit(SDL_Surface * src, SDL_Rect * srcrect,
-            SDL_Surface * dst, SDL_Rect * dstrect)
-{
-    SDL_VideoDevice *this = current_video;
-    int bpp;
-    Uint32 src_format;
-    Uint32 dst_format;
-    char *src_base;
-    char *dst_base;
-    int srcX, srcY;
-    int dstX, dstY;
-    Uint32 blitop;
-    Uint32 use_colorkey;
-
-    /* Don't blit to the display surface when switched away */
-    if (switched_away) {
-        return -2;              /* no hardware access */
-    }
-    if (dst == this->screen) {
-        SDL_mutexP(hw_lock);
-    }
-
-    /* Set the source and destination pixel format */
-    src_base = (char *) ((char *) src->pixels - mapped_mem);
-    bpp = src->format->BitsPerPixel;
-    src_format = src->pitch | ((bpp + ((bpp == 8) ? 0 : 8)) << 13);
-    dst_base = (char *) ((char *) dst->pixels - mapped_mem);
-    bpp = dst->format->BitsPerPixel;
-    dst_format = dst->pitch | ((bpp + ((bpp == 8) ? 0 : 8)) << 13);
-
-    srcX = srcrect->x;
-    srcY = srcrect->y;
-    dstX = dstrect->x;
-    dstY = dstrect->y;
-
-    /* Assemble the blit operation */
-    blitop = COMMAND_2D_BITBLT | (0xCC << 24);
-    if (srcX <= dstX) {
-        blitop |= BIT(14);
-        srcX += (dstrect->w - 1);
-        dstX += (dstrect->w - 1);
-    }
-    if (srcY <= dstY) {
-        blitop |= BIT(15);
-        srcY += (dstrect->h - 1);
-        dstY += (dstrect->h - 1);
-    }
-
-    /* Perform the blit! */
-    if ((src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY) {
-        tdfx_wait(3);
-        tdfx_out32(SRCCOLORKEYMIN, src->format->colorkey);
-        tdfx_out32(SRCCOLORKEYMAX, src->format->colorkey);
-        tdfx_out32(ROP_2D, 0xAA00);
-        use_colorkey = 1;
-    } else {
-        use_colorkey = 0;
-    }
-    tdfx_wait(9);
-    tdfx_out32(SRCBASE, (Uint32) src_base);
-    tdfx_out32(SRCFORMAT, src_format);
-    tdfx_out32(DSTBASE, (Uint32) dst_base);
-    tdfx_out32(DSTFORMAT, src_format);
-    tdfx_out32(COMMAND_2D, blitop);
-    tdfx_out32(COMMANDEXTRA_2D, use_colorkey);
-    tdfx_out32(DSTSIZE, dstrect->w | (dstrect->h << 16));
-    tdfx_out32(DSTXY, dstX | (dstY << 16));
-    tdfx_out32(LAUNCH_2D, srcX | (srcY << 16));
-
-    FB_AddBusySurface(src);
-    FB_AddBusySurface(dst);
-
-    if (dst == this->screen) {
-        SDL_mutexV(hw_lock);
-    }
-    return (0);
-}
-
-static int
-CheckHWBlit(_THIS, SDL_Surface * src, SDL_Surface * dst)
-{
-    int accelerated;
-
-    /* Set initial acceleration on */
-    src->flags |= SDL_HWACCEL;
-
-    /* Set the surface attributes */
-    if ((src->flags & SDL_SRCALPHA) == SDL_SRCALPHA) {
-        if (!this->info.blit_hw_A) {
-            src->flags &= ~SDL_HWACCEL;
-        }
-    }
-    if ((src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY) {
-        if (!this->info.blit_hw_CC) {
-            src->flags &= ~SDL_HWACCEL;
-        }
-    }
-
-    /* Check to see if final surface blit is accelerated */
-    accelerated = !!(src->flags & SDL_HWACCEL);
-    if (accelerated) {
-        src->map->hw_blit = HWAccelBlit;
-    }
-    return (accelerated);
-}
-
-void
-FB_3DfxAccel(_THIS, __u32 card)
-{
-    /* We have hardware accelerated surface functions */
-    this->CheckHWBlit = CheckHWBlit;
-    wait_vbl = WaitVBL;
-    wait_idle = WaitIdle;
-
-    /* Reset the 3Dfx controller */
-    tdfx_out32(BRESERROR0, 0);
-    tdfx_out32(BRESERROR1, 0);
-
-    /* The 3Dfx has an accelerated color fill */
-    this->info.blit_fill = 1;
-    this->FillHWRect = FillHWRect;
-
-    /* The 3Dfx has accelerated normal and colorkey blits */
-    this->info.blit_hw = 1;
-    this->info.blit_hw_CC = 1;
-    this->SetHWColorKey = SetHWColorKey;
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fb3dfx.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* 3Dfx hardware acceleration for the SDL framebuffer console driver */
-
-#include "SDL_fbvideo.h"
-
-/* Set up the driver for 3Dfx acceleration */
-extern void FB_3DfxAccel(_THIS, __u32 card);
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbelo.c	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,462 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include <unistd.h>
-#include <sys/time.h>
-#include <ctype.h>
-
-#include "SDL_stdinc.h"
-#include "SDL_fbvideo.h"
-#include "SDL_fbelo.h"
-
-/*
-	calibration default values
-	values are read from the following environment variables:
-
-	SDL_ELO_MIN_X
-	SDL_ELO_MAX_X
-	SDL_ELO_MIN_Y
-	SDL_ELO_MAX_Y
-*/
-
-static int ELO_MIN_X = 400;
-static int ELO_MAX_X = 3670;
-static int ELO_MIN_Y = 500;
-static int ELO_MAX_Y = 3540;
-
-#define ELO_SNAP_SIZE 6
-#define ELO_TOUCH_BYTE		'T'
-#define ELO_ID			'I'
-#define ELO_MODE		'M'
-#define ELO_PARAMETER		'P'
-#define ELO_REPORT		'B'
-#define ELO_ACK			'A'
-
-#define ELO_INIT_CHECKSUM	0xAA
-
-#define ELO_BTN_PRESS		0x01
-#define ELO_STREAM		0x02
-#define ELO_BTN_RELEASE		0x04
-
-#define ELO_TOUCH_MODE		0x01
-#define ELO_STREAM_MODE		0x02
-#define ELO_UNTOUCH_MODE	0x04
-#define ELO_RANGE_CHECK_MODE	0x40
-#define ELO_TRIM_MODE		0x02
-#define ELO_CALIB_MODE		0x04
-#define ELO_SCALING_MODE	0x08
-#define ELO_TRACKING_MODE	0x40
-
-#define ELO_SERIAL_MASK		0xF8
-
-#define ELO_SERIAL_IO		'0'
-
-#define ELO_MAX_TRIALS	3
-#define ELO_MAX_WAIT		100000
-#define ELO_UNTOUCH_DELAY	5
-#define ELO_REPORT_DELAY	1
-
-/*	eloParsePacket
-*/
-int
-eloParsePacket(unsigned char *mousebuf, int *dx, int *dy, int *button_state)
-{
-    static int elo_button = 0;
-    static int last_x = 0;
-    static int last_y = 0;
-    int x, y;
-
-    /* Check if we have a touch packet */
-    if (mousebuf[1] != ELO_TOUCH_BYTE) {
-        return 0;
-    }
-
-    x = ((mousebuf[4] << 8) | mousebuf[3]);
-    y = ((mousebuf[6] << 8) | mousebuf[5]);
-
-    if ((SDL_abs(x - last_x) > ELO_SNAP_SIZE)
-        || (SDL_abs(y - last_y) > ELO_SNAP_SIZE)) {
-        *dx = ((mousebuf[4] << 8) | mousebuf[3]);
-        *dy = ((mousebuf[6] << 8) | mousebuf[5]);
-    } else {
-        *dx = last_x;
-        *dy = last_y;
-    }
-
-    last_x = *dx;
-    last_y = *dy;
-
-    if ((mousebuf[2] & 0x07) == ELO_BTN_PRESS) {
-        elo_button = 1;
-    }
-    if ((mousebuf[2] & 0x07) == ELO_BTN_RELEASE) {
-        elo_button = 0;
-    }
-
-    *button_state = elo_button;
-    return 1;
-}
-
-/*	Convert the raw coordinates from the ELO controller
-	to a screen position.
-*/
-void
-eloConvertXY(_THIS, int *dx, int *dy)
-{
-    int input_x = *dx;
-    int input_y = *dy;
-    int width = ELO_MAX_X - ELO_MIN_X;
-    int height = ELO_MAX_Y - ELO_MIN_Y;
-
-    *dx =
-        ((int) cache_vinfo.xres -
-         ((int) cache_vinfo.xres * (input_x - ELO_MIN_X)) / width);
-    *dy = (cache_vinfo.yres * (input_y - ELO_MIN_Y)) / height;
-}
-
-
-/*	eloGetPacket
-*/
-int
-eloGetPacket(unsigned char *buffer, int *buffer_p, int *checksum, int fd)
-{
-    int num_bytes;
-    int ok;
-
-    if (fd == 0) {
-        num_bytes = ELO_PACKET_SIZE;
-    } else {
-        num_bytes = read(fd,
-                         (char *) (buffer + *buffer_p),
-                         ELO_PACKET_SIZE - *buffer_p);
-    }
-
-    if (num_bytes < 0) {
-#ifdef DEBUG_MOUSE
-        fprintf(stderr,
-                "System error while reading from Elographics touchscreen.\n");
-#endif
-        return 0;
-    }
-
-    while (num_bytes) {
-        if ((*buffer_p == 0) && (buffer[0] != ELO_START_BYTE)) {
-            SDL_memcpy(&buffer[0], &buffer[1], num_bytes - 1);
-        } else {
-            if (*buffer_p < ELO_PACKET_SIZE - 1) {
-                *checksum = *checksum + buffer[*buffer_p];
-                *checksum = *checksum % 256;
-            }
-            (*buffer_p)++;
-        }
-        num_bytes--;
-    }
-
-    if (*buffer_p == ELO_PACKET_SIZE) {
-        ok = (*checksum == buffer[ELO_PACKET_SIZE - 1]);
-        *checksum = ELO_INIT_CHECKSUM;
-        *buffer_p = 0;
-
-        if (!ok) {
-            return 0;
-        }
-
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
-/* eloSendPacket
-*/
-
-int
-eloSendPacket(unsigned char *packet, int fd)
-{
-    int i, result;
-    int sum = ELO_INIT_CHECKSUM;
-
-    packet[0] = ELO_START_BYTE;
-    for (i = 0; i < ELO_PACKET_SIZE - 1; i++) {
-        sum += packet[i];
-        sum &= 0xFF;
-    }
-    packet[ELO_PACKET_SIZE - 1] = sum;
-
-    result = write(fd, packet, ELO_PACKET_SIZE);
-
-    if (result != ELO_PACKET_SIZE) {
-#ifdef DEBUG_MOUSE
-        printf("System error while sending to Elographics touchscreen.\n");
-#endif
-        return 0;
-    } else {
-        return 1;
-    }
-}
-
-
-/*	eloWaitForInput
- */
-int
-eloWaitForInput(int fd, int timeout)
-{
-    fd_set readfds;
-    struct timeval to;
-    int r;
-
-    FD_ZERO(&readfds);
-    FD_SET(fd, &readfds);
-    to.tv_sec = 0;
-    to.tv_usec = timeout;
-
-    r = select(FD_SETSIZE, &readfds, NULL, NULL, &to);
-    return r;
-}
-
-/*	eloWaitReply
- */
-int
-eloWaitReply(unsigned char type, unsigned char *reply, int fd)
-{
-    int ok;
-    int i, result;
-    int reply_p = 0;
-    int sum = ELO_INIT_CHECKSUM;
-
-    i = ELO_MAX_TRIALS;
-    do {
-        ok = 0;
-
-        result = eloWaitForInput(fd, ELO_MAX_WAIT);
-
-        if (result > 0) {
-            ok = eloGetPacket(reply, &reply_p, &sum, fd);
-
-            if (ok && reply[1] != type && type != ELO_PARAMETER) {
-#ifdef DEBUG_MOUSE
-                fprintf(stderr, "Wrong reply received\n");
-#endif
-                ok = 0;
-            }
-        } else {
-#ifdef DEBUG_MOUSE
-            fprintf(stderr, "No input!\n");
-#endif
-        }
-
-        if (result == 0) {
-            i--;
-        }
-    } while (!ok && (i > 0));
-
-    return ok;
-}
-
-
-/*	eloWaitAck
- */
-
-int
-eloWaitAck(int fd)
-{
-    unsigned char packet[ELO_PACKET_SIZE];
-    int i, nb_errors;
-
-    if (eloWaitReply(ELO_ACK, packet, fd)) {
-        for (i = 0, nb_errors = 0; i < 4; i++) {
-            if (packet[2 + i] != '0') {
-                nb_errors++;
-            }
-        }
-
-        if (nb_errors != 0) {
-#ifdef DEBUG_MOUSE
-            fprintf(stderr,
-                    "Elographics acknowledge packet reports %d errors\n",
-                    nb_errors);
-#endif
-        }
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
-
-/*	eloSendQuery --
-*/
-int
-eloSendQuery(unsigned char *request, unsigned char *reply, int fd)
-{
-    int ok;
-
-    if (eloSendPacket(request, fd)) {
-        ok = eloWaitReply(toupper(request[1]), reply, fd);
-        if (ok) {
-            ok = eloWaitAck(fd);
-        }
-        return ok;
-    } else {
-        return 0;
-    }
-}
-
-
-/*	eloSendControl
-*/
-int
-eloSendControl(unsigned char *control, int fd)
-{
-    if (eloSendPacket(control, fd)) {
-        return eloWaitAck(fd);
-    } else {
-        return 0;
-    }
-}
-
-/*	eloInitController
-*/
-int
-eloInitController(int fd)
-{
-    unsigned char req[ELO_PACKET_SIZE];
-    unsigned char reply[ELO_PACKET_SIZE];
-    const char *buffer = NULL;
-    int result = 0;
-
-    struct termios mouse_termios;
-
-    /* try to read the calibration values */
-    buffer = SDL_getenv("SDL_ELO_MIN_X");
-    if (buffer) {
-        ELO_MIN_X = SDL_atoi(buffer);
-    }
-    buffer = SDL_getenv("SDL_ELO_MAX_X");
-    if (buffer) {
-        ELO_MAX_X = SDL_atoi(buffer);
-    }
-    buffer = SDL_getenv("SDL_ELO_MIN_Y");
-    if (buffer) {
-        ELO_MIN_Y = SDL_atoi(buffer);
-    }
-    buffer = SDL_getenv("SDL_ELO_MAX_Y");
-    if (buffer) {
-        ELO_MAX_Y = SDL_atoi(buffer);
-    }
-#ifdef DEBUG_MOUSE
-    fprintf(stderr,
-            "ELO calibration values:\nmin_x: %i\nmax_x: %i\nmin_y: %i\nmax_y: %i\n",
-            ELO_MIN_X, ELO_MAX_X, ELO_MIN_Y, ELO_MAX_Y);
-#endif
-
-    /* set comm params */
-    SDL_memset(&mouse_termios, 0, sizeof(mouse_termios));
-    mouse_termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL;
-    mouse_termios.c_cc[VMIN] = 1;
-    result = tcsetattr(fd, TCSANOW, &mouse_termios);
-
-    if (result < 0) {
-#ifdef DEBUG_MOUSE
-        fprintf(stderr, "Unable to configure Elographics touchscreen port\n");
-#endif
-        return 0;
-    }
-
-    SDL_memset(req, 0, ELO_PACKET_SIZE);
-    req[1] = tolower(ELO_PARAMETER);
-    if (!eloSendQuery(req, reply, fd)) {
-#ifdef DEBUG_MOUSE
-        fprintf(stderr,
-                "Not at the specified rate or model 2310, will continue\n");
-#endif
-    }
-
-    SDL_memset(req, 0, ELO_PACKET_SIZE);
-    req[1] = tolower(ELO_ID);
-    if (eloSendQuery(req, reply, fd)) {
-#ifdef DEBUG_MOUSE
-        fprintf(stderr, "Ok, controller configured!\n");
-#endif
-    } else {
-#ifdef DEBUG_MOUSE
-        fprintf(stderr,
-                "Unable to ask Elographics touchscreen identification\n");
-#endif
-        return 0;
-    }
-
-    SDL_memset(req, 0, ELO_PACKET_SIZE);
-    req[1] = ELO_MODE;
-    req[3] = ELO_TOUCH_MODE | ELO_STREAM_MODE | ELO_UNTOUCH_MODE;
-    req[4] = ELO_TRACKING_MODE;
-    if (!eloSendControl(req, fd)) {
-#ifdef DEBUG_MOUSE
-        fprintf(stderr,
-                "Unable to change Elographics touchscreen operating mode\n");
-#endif
-        return 0;
-    }
-
-    SDL_memset(req, 0, ELO_PACKET_SIZE);
-    req[1] = ELO_REPORT;
-    req[2] = ELO_UNTOUCH_DELAY;
-    req[3] = ELO_REPORT_DELAY;
-    if (!eloSendControl(req, fd)) {
-#ifdef DEBUG_MOUSE
-        fprintf(stderr,
-                "Unable to change Elographics touchscreen reports timings\n");
-#endif
-        return 0;
-    }
-
-    return 1;
-}
-
-int
-eloReadPosition(_THIS, int fd, int *x, int *y, int *button_state, int *realx,
-                int *realy)
-{
-    unsigned char buffer[ELO_PACKET_SIZE];
-    int pointer = 0;
-    int checksum = ELO_INIT_CHECKSUM;
-
-    while (pointer < ELO_PACKET_SIZE) {
-        if (eloGetPacket(buffer, &pointer, &checksum, fd)) {
-            break;
-        }
-    }
-
-    if (!eloParsePacket(buffer, realx, realy, button_state)) {
-        return 0;
-    }
-
-    *x = *realx;
-    *y = *realy;
-
-    eloConvertXY(this, x, y);
-
-    return 1;
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbelo.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#ifndef SDL_fbelo_h
-#define SDL_fbelo_h
-
-#include "SDL_fbvideo.h"
-
-/* ELO */
-#define ELO_PACKET_SIZE	10
-#define ELO_START_BYTE		'U'
-
-/*	eloConvertXY
-	Convert the raw coordinates from the ELO controller
-	to a screen position.
-*/
-void eloConvertXY(_THIS, int *dx, int *dy);
-
-/*	eloInitController(int fd)
-	Initialize the ELO serial touchscreen controller
-*/
-int eloInitController(int fd);
-
-/*	eloParsePacket
-	extract position and button state from a packet
-*/
-int eloParsePacket(unsigned char *mousebuf, int *dx, int *dy,
-                   int *button_state);
-
-/*	eloReadPosition
-	read a packet and get the cursor position
-*/
-
-int eloReadPosition(_THIS, int fd, int *x, int *y, int *button_state,
-                    int *realx, int *realy);
-
-#endif /* SDL_fbelo_h */
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbevents.c	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1391 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* Handle the event stream, converting console events into SDL events */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <limits.h>
-
-/* For parsing /proc */
-#include <dirent.h>
-#include <ctype.h>
-
-#include <linux/vt.h>
-#include <linux/kd.h>
-#include <linux/keyboard.h>
-
-#include "SDL_timer.h"
-#include "SDL_mutex.h"
-#include "../SDL_sysvideo.h"
-#include "../../events/SDL_sysevents.h"
-#include "../../events/SDL_events_c.h"
-#include "SDL_fbvideo.h"
-#include "SDL_fbevents_c.h"
-#include "SDL_fbkeys.h"
-
-#include "SDL_fbelo.h"
-
-#ifndef GPM_NODE_FIFO
-#define GPM_NODE_FIFO	"/dev/gpmdata"
-#endif
-
-/*#define DEBUG_KEYBOARD*/
-/*#define DEBUG_MOUSE*/
-
-/* The translation tables from a console scancode to a SDL keysym */
-#define NUM_VGAKEYMAPS	(1<<KG_CAPSSHIFT)
-static Uint16 vga_keymap[NUM_VGAKEYMAPS][NR_KEYS];
-static SDLKey keymap[128];
-static Uint16 keymap_temp[128]; /* only used at startup */
-static SDL_keysym *TranslateKey(int scancode, SDL_keysym * keysym);
-
-/* Ugh, we have to duplicate the kernel's keysym mapping code...
-   Oh, it's not so bad. :-)
-
-   FIXME: Add keyboard LED handling code
- */
-static void
-FB_vgainitkeymaps(int fd)
-{
-    struct kbentry entry;
-    int map, i;
-
-    /* Don't do anything if we are passed a closed keyboard */
-    if (fd < 0) {
-        return;
-    }
-
-    /* Load all the keysym mappings */
-    for (map = 0; map < NUM_VGAKEYMAPS; ++map) {
-        SDL_memset(vga_keymap[map], 0, NR_KEYS * sizeof(Uint16));
-        for (i = 0; i < NR_KEYS; ++i) {
-            entry.kb_table = map;
-            entry.kb_index = i;
-            if (ioctl(fd, KDGKBENT, &entry) == 0) {
-                /* fill keytemp. This replaces SDL_fbkeys.h */
-                if ((map == 0) && (i < 128)) {
-                    keymap_temp[i] = entry.kb_value;
-                }
-                /* The "Enter" key is a special case */
-                if (entry.kb_value == K_ENTER) {
-                    entry.kb_value = K(KT_ASCII, 13);
-                }
-                /* Handle numpad specially as well */
-                if (KTYP(entry.kb_value) == KT_PAD) {
-                    switch (entry.kb_value) {
-                    case K_P0:
-                    case K_P1:
-                    case K_P2:
-                    case K_P3:
-                    case K_P4:
-                    case K_P5:
-                    case K_P6:
-                    case K_P7:
-                    case K_P8:
-                    case K_P9:
-                        vga_keymap[map][i] = entry.kb_value;
-                        vga_keymap[map][i] += '0';
-                        break;
-                    case K_PPLUS:
-                        vga_keymap[map][i] = K(KT_ASCII, '+');
-                        break;
-                    case K_PMINUS:
-                        vga_keymap[map][i] = K(KT_ASCII, '-');
-                        break;
-                    case K_PSTAR:
-                        vga_keymap[map][i] = K(KT_ASCII, '*');
-                        break;
-                    case K_PSLASH:
-                        vga_keymap[map][i] = K(KT_ASCII, '/');
-                        break;
-                    case K_PENTER:
-                        vga_keymap[map][i] = K(KT_ASCII, '\r');
-                        break;
-                    case K_PCOMMA:
-                        vga_keymap[map][i] = K(KT_ASCII, ',');
-                        break;
-                    case K_PDOT:
-                        vga_keymap[map][i] = K(KT_ASCII, '.');
-                        break;
-                    default:
-                        break;
-                    }
-                }
-                /* Do the normal key translation */
-                if ((KTYP(entry.kb_value) == KT_LATIN) ||
-                    (KTYP(entry.kb_value) == KT_ASCII) ||
-                    (KTYP(entry.kb_value) == KT_LETTER)) {
-                    vga_keymap[map][i] = entry.kb_value;
-                }
-            }
-        }
-    }
-}
-
-int
-FB_InGraphicsMode(_THIS)
-{
-    return ((keyboard_fd >= 0) && (saved_kbd_mode >= 0));
-}
-
-int
-FB_EnterGraphicsMode(_THIS)
-{
-    struct termios keyboard_termios;
-
-    /* Set medium-raw keyboard mode */
-    if ((keyboard_fd >= 0) && !FB_InGraphicsMode(this)) {
-
-        /* Switch to the correct virtual terminal */
-        if (current_vt > 0) {
-            struct vt_stat vtstate;
-
-            if (ioctl(keyboard_fd, VT_GETSTATE, &vtstate) == 0) {
-                saved_vt = vtstate.v_active;
-            }
-            if (ioctl(keyboard_fd, VT_ACTIVATE, current_vt) == 0) {
-                ioctl(keyboard_fd, VT_WAITACTIVE, current_vt);
-            }
-        }
-
-        /* Set the terminal input mode */
-        if (tcgetattr(keyboard_fd, &saved_kbd_termios) < 0) {
-            SDL_SetError("Unable to get terminal attributes");
-            if (keyboard_fd > 0) {
-                close(keyboard_fd);
-            }
-            keyboard_fd = -1;
-            return (-1);
-        }
-        if (ioctl(keyboard_fd, KDGKBMODE, &saved_kbd_mode) < 0) {
-            SDL_SetError("Unable to get current keyboard mode");
-            if (keyboard_fd > 0) {
-                close(keyboard_fd);
-            }
-            keyboard_fd = -1;
-            return (-1);
-        }
-        keyboard_termios = saved_kbd_termios;
-        keyboard_termios.c_lflag &= ~(ICANON | ECHO | ISIG);
-        keyboard_termios.c_iflag &=
-            ~(ISTRIP | IGNCR | ICRNL | INLCR | IXOFF | IXON);
-        keyboard_termios.c_cc[VMIN] = 0;
-        keyboard_termios.c_cc[VTIME] = 0;
-        if (tcsetattr(keyboard_fd, TCSAFLUSH, &keyboard_termios) < 0) {
-            FB_CloseKeyboard(this);
-            SDL_SetError("Unable to set terminal attributes");
-            return (-1);
-        }
-        /* This will fail if we aren't root or this isn't our tty */
-        if (ioctl(keyboard_fd, KDSKBMODE, K_MEDIUMRAW) < 0) {
-            FB_CloseKeyboard(this);
-            SDL_SetError("Unable to set keyboard in raw mode");
-            return (-1);
-        }
-        if (ioctl(keyboard_fd, KDSETMODE, KD_GRAPHICS) < 0) {
-            FB_CloseKeyboard(this);
-            SDL_SetError("Unable to set keyboard in graphics mode");
-            return (-1);
-        }
-        /* Prevent switching the virtual terminal */
-        ioctl(keyboard_fd, VT_LOCKSWITCH, 1);
-    }
-    return (keyboard_fd);
-}
-
-void
-FB_LeaveGraphicsMode(_THIS)
-{
-    if (FB_InGraphicsMode(this)) {
-        ioctl(keyboard_fd, KDSETMODE, KD_TEXT);
-        ioctl(keyboard_fd, KDSKBMODE, saved_kbd_mode);
-        tcsetattr(keyboard_fd, TCSAFLUSH, &saved_kbd_termios);
-        saved_kbd_mode = -1;
-
-        /* Head back over to the original virtual terminal */
-        ioctl(keyboard_fd, VT_UNLOCKSWITCH, 1);
-        if (saved_vt > 0) {
-            ioctl(keyboard_fd, VT_ACTIVATE, saved_vt);
-        }
-    }
-}
-
-void
-FB_CloseKeyboard(_THIS)
-{
-    if (keyboard_fd >= 0) {
-        FB_LeaveGraphicsMode(this);
-        if (keyboard_fd > 0) {
-            close(keyboard_fd);
-        }
-    }
-    keyboard_fd = -1;
-}
-
-int
-FB_OpenKeyboard(_THIS)
-{
-    /* Open only if not already opened */
-    if (keyboard_fd < 0) {
-        static const char *const tty0[] = { "/dev/tty0", "/dev/vc/0", NULL };
-        static const char *const vcs[] = { "/dev/vc/%d", "/dev/tty%d", NULL };
-        int i, tty0_fd;
-
-        /* Try to query for a free virtual terminal */
-        tty0_fd = -1;
-        for (i = 0; tty0[i] && (tty0_fd < 0); ++i) {
-            tty0_fd = open(tty0[i], O_WRONLY, 0);
-        }
-        if (tty0_fd < 0) {
-            tty0_fd = dup(0);   /* Maybe stdin is a VT? */
-        }
-        ioctl(tty0_fd, VT_OPENQRY, &current_vt);
-        close(tty0_fd);
-        if ((geteuid() == 0) && (current_vt > 0)) {
-            for (i = 0; vcs[i] && (keyboard_fd < 0); ++i) {
-                char vtpath[12];
-
-                SDL_snprintf(vtpath, SDL_arraysize(vtpath), vcs[i],
-                             current_vt);
-                keyboard_fd = open(vtpath, O_RDWR, 0);
-#ifdef DEBUG_KEYBOARD
-                fprintf(stderr, "vtpath = %s, fd = %d\n",
-                        vtpath, keyboard_fd);
-#endif /* DEBUG_KEYBOARD */
-
-                /* This needs to be our controlling tty
-                   so that the kernel ioctl() calls work
-                 */
-                if (keyboard_fd >= 0) {
-                    tty0_fd = open("/dev/tty", O_RDWR, 0);
-                    if (tty0_fd >= 0) {
-                        ioctl(tty0_fd, TIOCNOTTY, 0);
-                        close(tty0_fd);
-                    }
-                }
-            }
-        }
-        if (keyboard_fd < 0) {
-            /* Last resort, maybe our tty is a usable VT */
-            struct vt_stat vtstate;
-
-            keyboard_fd = open("/dev/tty", O_RDWR);
-
-            if (ioctl(keyboard_fd, VT_GETSTATE, &vtstate) == 0) {
-                current_vt = vtstate.v_active;
-            } else {
-                current_vt = 0;
-            }
-        }
-#ifdef DEBUG_KEYBOARD
-        fprintf(stderr, "Current VT: %d\n", current_vt);
-#endif
-        saved_kbd_mode = -1;
-
-        /* Make sure that our input is a console terminal */
-        {
-            int dummy;
-            if (ioctl(keyboard_fd, KDGKBMODE, &dummy) < 0) {
-                close(keyboard_fd);
-                keyboard_fd = -1;
-                SDL_SetError("Unable to open a console terminal");
-            }
-        }
-
-        /* Set up keymap */
-        FB_vgainitkeymaps(keyboard_fd);
-    }
-    return (keyboard_fd);
-}
-
-static enum
-{
-    MOUSE_NONE = -1,
-    MOUSE_MSC,                  /* Note: GPM uses the MSC protocol */
-    MOUSE_PS2,
-    MOUSE_IMPS2,
-    MOUSE_MS,
-    MOUSE_BM,
-    MOUSE_ELO,
-    MOUSE_TSLIB,
-    NUM_MOUSE_DRVS
-} mouse_drv = MOUSE_NONE;
-
-void
-FB_CloseMouse(_THIS)
-{
-#if SDL_INPUT_TSLIB
-    if (ts_dev != NULL) {
-        ts_close(ts_dev);
-        ts_dev = NULL;
-        mouse_fd = -1;
-    }
-#endif /* SDL_INPUT_TSLIB */
-    if (mouse_fd > 0) {
-        close(mouse_fd);
-    }
-    mouse_fd = -1;
-}
-
-/* Returns processes listed in /proc with the desired name */
-static int
-find_pid(DIR * proc, const char *wanted_name)
-{
-    struct dirent *entry;
-    int pid;
-
-    /* First scan proc for the gpm process */
-    pid = 0;
-    while ((pid == 0) && ((entry = readdir(proc)) != NULL)) {
-        if (isdigit(entry->d_name[0])) {
-            FILE *status;
-            char path[PATH_MAX];
-            char name[PATH_MAX];
-
-            SDL_snprintf(path, SDL_arraysize(path), "/proc/%s/status",
-                         entry->d_name);
-            status = fopen(path, "r");
-            if (status) {
-                name[0] = '\0';
-                fscanf(status, "Name: %s", name);
-                if (SDL_strcmp(name, wanted_name) == 0) {
-                    pid = SDL_atoi(entry->d_name);
-                }
-                fclose(status);
-            }
-        }
-    }
-    return pid;
-}
-
-/* Returns true if /dev/gpmdata is being written to by gpm */
-static int
-gpm_available(char *proto, size_t protolen)
-{
-    int available;
-    DIR *proc;
-    int pid;
-    int cmdline, len, arglen;
-    char path[PATH_MAX];
-    char args[PATH_MAX], *arg;
-
-    /* Don't bother looking if the fifo isn't there */
-#ifdef DEBUG_MOUSE
-    fprintf(stderr, "testing gpm\n");
-#endif
-    if (access(GPM_NODE_FIFO, F_OK) < 0) {
-        return (0);
-    }
-
-    available = 0;
-    proc = opendir("/proc");
-    if (proc) {
-        char raw_proto[10] = { '\0' };
-        char repeat_proto[10] = { '\0' };
-        while (!available && (pid = find_pid(proc, "gpm")) > 0) {
-            SDL_snprintf(path, SDL_arraysize(path), "/proc/%d/cmdline", pid);
-            cmdline = open(path, O_RDONLY, 0);
-            if (cmdline >= 0) {
-                len = read(cmdline, args, sizeof(args));
-                arg = args;
-                while (len > 0) {
-                    arglen = SDL_strlen(arg) + 1;
-#ifdef DEBUG_MOUSE
-                    fprintf(stderr, "gpm arg %s len %d\n", arg, arglen);
-#endif
-                    if (SDL_strcmp(arg, "-t") == 0) {
-                        /* protocol string, keep it for later */
-                        char *t, *s;
-                        t = arg + arglen;
-                        s = SDL_strchr(t, ' ');
-                        if (s)
-                            *s = 0;
-                        SDL_strlcpy(raw_proto, t, SDL_arraysize(raw_proto));
-                        if (s)
-                            *s = ' ';
-                    }
-                    if (SDL_strncmp(arg, "-R", 2) == 0) {
-                        char *t, *s;
-                        available = 1;
-                        t = arg + 2;
-                        s = SDL_strchr(t, ' ');
-                        if (s)
-                            *s = 0;
-                        SDL_strlcpy(repeat_proto, t,
-                                    SDL_arraysize(repeat_proto));
-                        if (s)
-                            *s = ' ';
-                    }
-                    len -= arglen;
-                    arg += arglen;
-                }
-                close(cmdline);
-            }
-        }
-        closedir(proc);
-
-        if (available) {
-            if (SDL_strcmp(repeat_proto, "raw") == 0) {
-                SDL_strlcpy(proto, raw_proto, protolen);
-            } else if (*repeat_proto) {
-                SDL_strlcpy(proto, repeat_proto, protolen);
-            } else {
-                SDL_strlcpy(proto, "msc", protolen);
-            }
-        }
-    }
-    return available;
-}
-
-
-/* rcg06112001 Set up IMPS/2 mode, if possible. This gives
- *  us access to the mousewheel, etc. Returns zero if
- *  writes to device failed, but you still need to query the
- *  device to see which mode it's actually in.
- */
-static int
-set_imps2_mode(int fd)
-{
-    /* If you wanted to control the mouse mode (and we do :)  ) ...
-       Set IMPS/2 protocol:
-       {0xf3,200,0xf3,100,0xf3,80}
-       Reset mouse device:
-       {0xFF}
-     */
-    Uint8 set_imps2[] = { 0xf3, 200, 0xf3, 100, 0xf3, 80 };
-    /*Uint8 reset = 0xff; */
-    fd_set fdset;
-    struct timeval tv;
-    int retval = 0;
-
-    if (write(fd, &set_imps2, sizeof(set_imps2)) == sizeof(set_imps2)) {
-        /* Don't reset it, that'll clear IMPS/2 mode on some mice
-           if (write(fd, &reset, sizeof (reset)) == sizeof (reset) ) {
-           retval = 1;
-           }
-         */
-    }
-
-    /* Get rid of any chatter from the above */
-    FD_ZERO(&fdset);
-    FD_SET(fd, &fdset);
-    tv.tv_sec = 0;
-    tv.tv_usec = 0;
-    while (select(fd + 1, &fdset, 0, 0, &tv) > 0) {
-        char temp[32];
-        read(fd, temp, sizeof(temp));
-    }
-
-    return retval;
-}
-
-
-/* Returns true if the mouse uses the IMPS/2 protocol */
-static int
-detect_imps2(int fd)
-{
-    int imps2;
-
-    imps2 = 0;
-
-    if (SDL_getenv("SDL_MOUSEDEV_IMPS2")) {
-        imps2 = 1;
-    }
-    if (!imps2) {
-        Uint8 query_ps2 = 0xF2;
-        fd_set fdset;
-        struct timeval tv;
-
-        /* Get rid of any mouse motion noise */
-        FD_ZERO(&fdset);
-        FD_SET(fd, &fdset);
-        tv.tv_sec = 0;
-        tv.tv_usec = 0;
-        while (select(fd + 1, &fdset, 0, 0, &tv) > 0) {
-            char temp[32];
-            read(fd, temp, sizeof(temp));
-        }
-
-        /* Query for the type of mouse protocol */
-        if (write(fd, &query_ps2, sizeof(query_ps2)) == sizeof(query_ps2)) {
-            Uint8 ch = 0;
-
-            /* Get the mouse protocol response */
-            do {
-                FD_ZERO(&fdset);
-                FD_SET(fd, &fdset);
-                tv.tv_sec = 1;
-                tv.tv_usec = 0;
-                if (select(fd + 1, &fdset, 0, 0, &tv) < 1) {
-                    break;
-                }
-            } while ((read(fd, &ch, sizeof(ch)) == sizeof(ch)) &&
-                     ((ch == 0xFA) || (ch == 0xAA)));
-
-            /* Experimental values (Logitech wheelmouse) */
-#ifdef DEBUG_MOUSE
-            fprintf(stderr, "Last mouse mode: 0x%x\n", ch);
-#endif
-            if ((ch == 3) || (ch == 4)) {
-                imps2 = 1;
-            }
-        }
-    }
-    return imps2;
-}
-
-int
-FB_OpenMouse(_THIS)
-{
-    int i;
-    const char *mousedev;
-    const char *mousedrv;
-
-    mousedrv = SDL_getenv("SDL_MOUSEDRV");
-    mousedev = SDL_getenv("SDL_MOUSEDEV");
-    mouse_fd = -1;
-
-#if SDL_INPUT_TSLIB
-    if (mousedrv && (SDL_strcmp(mousedrv, "TSLIB") == 0)) {
-        if (mousedev == NULL)
-            mousedev = SDL_getenv("TSLIB_TSDEVICE");
-        if (mousedev != NULL) {
-            ts_dev = ts_open(mousedev, 1);
-            if ((ts_dev != NULL) && (ts_config(ts_dev) >= 0)) {
-#ifdef DEBUG_MOUSE
-                fprintf(stderr, "Using tslib touchscreen\n");
-#endif
-                mouse_drv = MOUSE_TSLIB;
-                mouse_fd = ts_fd(ts_dev);
-                return mouse_fd;
-            }
-        }
-        mouse_drv = MOUSE_NONE;
-        return mouse_fd;
-    }
-#endif /* SDL_INPUT_TSLIB */
-
-    /* ELO TOUCHSCREEN SUPPORT */
-
-    if (mousedrv && (SDL_strcmp(mousedrv, "ELO") == 0)) {
-        mouse_fd = open(mousedev, O_RDWR);
-        if (mouse_fd >= 0) {
-            if (eloInitController(mouse_fd)) {
-#ifdef DEBUG_MOUSE
-                fprintf(stderr, "Using ELO touchscreen\n");
-#endif
-                mouse_drv = MOUSE_ELO;
-            }
-
-        } else if (mouse_fd < 0) {
-            mouse_drv = MOUSE_NONE;
-        }
-
-        return (mouse_fd);
-    }
-
-    /* STD MICE */
-
-    if (mousedev == NULL) {
-        /* FIXME someday... allow multiple mice in this driver */
-        static const char *ps2mice[] = {
-            "/dev/input/mice", "/dev/usbmouse", "/dev/psaux", NULL
-        };
-        /* First try to use GPM in repeater mode */
-        if (mouse_fd < 0) {
-            char proto[10];
-            if (gpm_available(proto, SDL_arraysize(proto))) {
-                mouse_fd = open(GPM_NODE_FIFO, O_RDONLY, 0);
-                if (mouse_fd >= 0) {
-                    if (SDL_strcmp(proto, "msc") == 0) {
-                        mouse_drv = MOUSE_MSC;
-                    } else if (SDL_strcmp(proto, "ps2") == 0) {
-                        mouse_drv = MOUSE_PS2;
-                    } else if (SDL_strcmp(proto, "imps2") == 0) {
-                        mouse_drv = MOUSE_IMPS2;
-                    } else if (SDL_strcmp(proto, "ms") == 0 ||
-                               SDL_strcmp(proto, "bare") == 0) {
-                        mouse_drv = MOUSE_MS;
-                    } else if (SDL_strcmp(proto, "bm") == 0) {
-                        mouse_drv = MOUSE_BM;
-                    } else {
-                        /* Unknown protocol... */
-#ifdef DEBUG_MOUSE
-                        fprintf(stderr,
-                                "GPM mouse using unknown protocol = %s\n",
-                                proto);
-#endif
-                        close(mouse_fd);
-                        mouse_fd = -1;
-                    }
-                }
-#ifdef DEBUG_MOUSE
-                if (mouse_fd >= 0) {
-                    fprintf(stderr,
-                            "Using GPM mouse, protocol = %s\n", proto);
-                }
-#endif /* DEBUG_MOUSE */
-            }
-        }
-        /* Now try to use a modern PS/2 mouse */
-        for (i = 0; (mouse_fd < 0) && ps2mice[i]; ++i) {
-            mouse_fd = open(ps2mice[i], O_RDWR, 0);
-            if (mouse_fd < 0) {
-                mouse_fd = open(ps2mice[i], O_RDONLY, 0);
-            }
-            if (mouse_fd >= 0) {
-                /* rcg06112001 Attempt to set IMPS/2 mode */
-                set_imps2_mode(mouse_fd);
-                if (detect_imps2(mouse_fd)) {
-#ifdef DEBUG_MOUSE
-                    fprintf(stderr, "Using IMPS2 mouse\n");
-#endif
-                    mouse_drv = MOUSE_IMPS2;
-                } else {
-#ifdef DEBUG_MOUSE
-                    fprintf(stderr, "Using PS2 mouse\n");
-#endif
-                    mouse_drv = MOUSE_PS2;
-                }
-            }
-        }
-        /* Next try to use a PPC ADB port mouse */
-        if (mouse_fd < 0) {
-            mouse_fd = open("/dev/adbmouse", O_RDONLY, 0);
-            if (mouse_fd >= 0) {
-#ifdef DEBUG_MOUSE
-                fprintf(stderr, "Using ADB mouse\n");
-#endif
-                mouse_drv = MOUSE_BM;
-            }
-        }
-    }
-    /* Default to a serial Microsoft mouse */
-    if (mouse_fd < 0) {
-        if (mousedev == NULL) {
-            mousedev = "/dev/mouse";
-        }
-        mouse_fd = open(mousedev, O_RDONLY, 0);
-        if (mouse_fd >= 0) {
-            struct termios mouse_termios;
-
-            /* Set the sampling speed to 1200 baud */
-            tcgetattr(mouse_fd, &mouse_termios);
-            mouse_termios.c_iflag = IGNBRK | IGNPAR;
-            mouse_termios.c_oflag = 0;
-            mouse_termios.c_lflag = 0;
-            mouse_termios.c_line = 0;
-            mouse_termios.c_cc[VTIME] = 0;
-            mouse_termios.c_cc[VMIN] = 1;
-            mouse_termios.c_cflag = CREAD | CLOCAL | HUPCL;
-            mouse_termios.c_cflag |= CS8;
-            mouse_termios.c_cflag |= B1200;
-            tcsetattr(mouse_fd, TCSAFLUSH, &mouse_termios);
-            if (mousedrv && (SDL_strcmp(mousedrv, "PS2") == 0)) {
-#ifdef DEBUG_MOUSE
-                fprintf(stderr,
-                        "Using (user specified) PS2 mouse on %s\n", mousedev);
-#endif
-                mouse_drv = MOUSE_PS2;
-            } else {
-#ifdef DEBUG_MOUSE
-                fprintf(stderr, "Using (default) MS mouse on %s\n", mousedev);
-#endif
-                mouse_drv = MOUSE_MS;
-            }
-        }
-    }
-    if (mouse_fd < 0) {
-        mouse_drv = MOUSE_NONE;
-    }
-    return (mouse_fd);
-}
-
-static int posted = 0;
-
-void
-FB_vgamousecallback(int button, int relative, int dx, int dy)
-{
-    int button_1, button_3;
-    int button_state;
-    int state_changed;
-    int i;
-    Uint8 state;
-
-    if (dx || dy) {
-        posted += SDL_PrivateMouseMotion(0, relative, dx, dy);
-    }
-
-    /* Swap button 1 and 3 */
-    button_1 = (button & 0x04) >> 2;
-    button_3 = (button & 0x01) << 2;
-    button &= ~0x05;
-    button |= (button_1 | button_3);
-
-    /* See what changed */
-    button_state = SDL_GetMouseState(NULL, NULL);
-    state_changed = button_state ^ button;
-    for (i = 0; i < 8; ++i) {
-        if (state_changed & (1 << i)) {
-            if (button & (1 << i)) {
-                state = SDL_PRESSED;
-            } else {
-                state = SDL_RELEASED;
-            }
-            posted += SDL_PrivateMouseButton(state, i + 1, 0, 0);
-        }
-    }
-}
-
-/* Handle input from tslib */
-#if SDL_INPUT_TSLIB
-static void
-handle_tslib(_THIS)
-{
-    struct ts_sample sample;
-    int button;
-
-    while (ts_read(ts_dev, &sample, 1) > 0) {
-        button = (sample.pressure > 0) ? 1 : 0;
-        button <<= 2;           /* must report it as button 3 */
-        FB_vgamousecallback(button, 0, sample.x, sample.y);
-    }
-    return;
-}
-#endif /* SDL_INPUT_TSLIB */
-
-/* For now, use MSC, PS/2, and MS protocols
-   Driver adapted from the SVGAlib mouse driver code (taken from gpm, etc.)
- */
-static void
-handle_mouse(_THIS)
-{
-    static int start = 0;
-    static unsigned char mousebuf[BUFSIZ];
-    static int relative = 1;
-
-    int i, nread;
-    int button = 0;
-    int dx = 0, dy = 0;
-    int packetsize = 0;
-    int realx, realy;
-
-    /* Figure out the mouse packet size */
-    switch (mouse_drv) {
-    case MOUSE_NONE:
-        /* Ack! */
-        read(mouse_fd, mousebuf, BUFSIZ);
-        return;
-    case MOUSE_MSC:
-        packetsize = 5;
-        break;
-    case MOUSE_IMPS2:
-        packetsize = 4;
-        break;
-    case MOUSE_PS2:
-    case MOUSE_MS:
-    case MOUSE_BM:
-        packetsize = 3;
-        break;
-    case MOUSE_ELO:
-        /* try to read the next packet */
-        if (eloReadPosition
-            (this, mouse_fd, &dx, &dy, &button, &realx, &realy)) {
-            button = (button & 0x01) << 2;
-            FB_vgamousecallback(button, 0, dx, dy);
-        }
-        return;                 /* nothing left to do */
-    case MOUSE_TSLIB:
-#if SDL_INPUT_TSLIB
-        handle_tslib(this);
-#endif
-        return;                 /* nothing left to do */
-    default:
-        /* Uh oh.. */
-        packetsize = 0;
-        break;
-    }
-
-    /* Special handling for the quite sensitive ELO controller */
-    if (mouse_drv == MOUSE_ELO) {
-
-    }
-
-    /* Read as many packets as possible */
-    nread = read(mouse_fd, &mousebuf[start], BUFSIZ - start);
-    if (nread < 0) {
-        return;
-    }
-    nread += start;
-#ifdef DEBUG_MOUSE
-    fprintf(stderr, "Read %d bytes from mouse, start = %d\n", nread, start);
-#endif
-    for (i = 0; i < (nread - (packetsize - 1)); i += packetsize) {
-        switch (mouse_drv) {
-        case MOUSE_NONE:
-            break;
-        case MOUSE_MSC:
-            /* MSC protocol has 0x80 in high byte */
-            if ((mousebuf[i] & 0xF8) != 0x80) {
-                /* Go to next byte */
-                i -= (packetsize - 1);
-                continue;
-            }
-            /* Get current mouse state */
-            button = (~mousebuf[i]) & 0x07;
-            dx = (signed char) (mousebuf[i + 1]) +
-                (signed char) (mousebuf[i + 3]);
-            dy = -((signed char) (mousebuf[i + 2]) +
-                   (signed char) (mousebuf[i + 4]));
-            break;
-        case MOUSE_PS2:
-            /* PS/2 protocol has nothing in high byte */
-            if ((mousebuf[i] & 0xC0) != 0) {
-                /* Go to next byte */
-                i -= (packetsize - 1);
-                continue;
-            }
-            /* Get current mouse state */
-            button = (mousebuf[i] & 0x04) >> 1 |        /*Middle */
-                (mousebuf[i] & 0x02) >> 1 |     /*Right */
-                (mousebuf[i] & 0x01) << 2;      /*Left */
-            dx = (mousebuf[i] & 0x10) ?
-                mousebuf[i + 1] - 256 : mousebuf[i + 1];
-            dy = (mousebuf[i] & 0x20) ?
-                -(mousebuf[i + 2] - 256) : -mousebuf[i + 2];
-            break;
-        case MOUSE_IMPS2:
-            /* Get current mouse state */
-            button = (mousebuf[i] & 0x04) >> 1 |        /*Middle */
-                (mousebuf[i] & 0x02) >> 1 |     /*Right */
-                (mousebuf[i] & 0x01) << 2 |     /*Left */
-                (mousebuf[i] & 0x40) >> 3 |     /* 4 */
-                (mousebuf[i] & 0x80) >> 3;      /* 5 */
-            dx = (mousebuf[i] & 0x10) ?
-                mousebuf[i + 1] - 256 : mousebuf[i + 1];
-            dy = (mousebuf[i] & 0x20) ?
-                -(mousebuf[i + 2] - 256) : -mousebuf[i + 2];
-            switch (mousebuf[i + 3] & 0x0F) {
-            case 0x0E:         /* DX = +1 */
-            case 0x02:         /* DX = -1 */
-                break;
-            case 0x0F:         /* DY = +1 (map button 4) */
-                FB_vgamousecallback(button | (1 << 3), 1, 0, 0);
-                break;
-            case 0x01:         /* DY = -1 (map button 5) */
-                FB_vgamousecallback(button | (1 << 4), 1, 0, 0);
-                break;
-            }
-            break;
-        case MOUSE_MS:
-            /* Microsoft protocol has 0x40 in high byte */
-            if ((mousebuf[i] & 0x40) != 0x40) {
-                /* Go to next byte */
-                i -= (packetsize - 1);
-                continue;
-            }
-            /* Get current mouse state */
-            button = ((mousebuf[i] & 0x20) >> 3) |
-                ((mousebuf[i] & 0x10) >> 4);
-            dx = (signed char) (((mousebuf[i] & 0x03) << 6) |
-                                (mousebuf[i + 1] & 0x3F));
-            dy = (signed char) (((mousebuf[i] & 0x0C) << 4) |
-                                (mousebuf[i + 2] & 0x3F));
-            break;
-        case MOUSE_BM:
-            /* BusMouse protocol has 0xF8 in high byte */
-            if ((mousebuf[i] & 0xF8) != 0x80) {
-                /* Go to next byte */
-                i -= (packetsize - 1);
-                continue;
-            }
-            /* Get current mouse state */
-            button = (~mousebuf[i]) & 0x07;
-            dx = (signed char) mousebuf[i + 1];
-            dy = -(signed char) mousebuf[i + 2];
-            break;
-        default:
-            /* Uh oh.. */
-            dx = 0;
-            dy = 0;
-            break;
-        }
-        FB_vgamousecallback(button, relative, dx, dy);
-    }
-    if (i < nread) {
-        SDL_memcpy(mousebuf, &mousebuf[i], (nread - i));
-        start = (nread - i);
-    } else {
-        start = 0;
-    }
-    return;
-}
-
-/* Handle switching to another VC, returns when our VC is back */
-static void
-switch_vt_prep(_THIS)
-{
-    SDL_Surface *screen = SDL_VideoSurface;
-
-    SDL_PrivateAppActive(0,
-                         (SDL_APPACTIVE | SDL_APPINPUTFOCUS |
-                          SDL_APPMOUSEFOCUS));
-
-    /* Save the contents of the screen, and go to text mode */
-    wait_idle(this);
-    screen_arealen = ((screen->h + (2 * this->offset_y)) * screen->pitch);
-    screen_contents = (Uint8 *) SDL_malloc(screen_arealen);
-    if (screen_contents) {
-        SDL_memcpy(screen_contents, screen->pixels, screen_arealen);
-    }
-    FB_SavePaletteTo(this, 256, screen_palette);
-    ioctl(console_fd, FBIOGET_VSCREENINFO, &screen_vinfo);
-    ioctl(keyboard_fd, KDSETMODE, KD_TEXT);
-    ioctl(keyboard_fd, VT_UNLOCKSWITCH, 1);
-}
-
-static void
-switch_vt_done(_THIS)
-{
-    SDL_Surface *screen = SDL_VideoSurface;
-
-    /* Restore graphics mode and the contents of the screen */
-    ioctl(keyboard_fd, VT_LOCKSWITCH, 1);
-    ioctl(keyboard_fd, KDSETMODE, KD_GRAPHICS);
-    ioctl(console_fd, FBIOPUT_VSCREENINFO, &screen_vinfo);
-    FB_RestorePaletteFrom(this, 256, screen_palette);
-    if (screen_contents) {
-        SDL_memcpy(screen->pixels, screen_contents, screen_arealen);
-        SDL_free(screen_contents);
-        screen_contents = NULL;
-    }
-
-    /* Get updates to the shadow surface while switched away */
-    if (SDL_ShadowSurface) {
-        SDL_UpdateRect(SDL_ShadowSurface, 0, 0, 0, 0);
-    }
-
-    SDL_PrivateAppActive(1,
-                         (SDL_APPACTIVE | SDL_APPINPUTFOCUS |
-                          SDL_APPMOUSEFOCUS));
-}
-
-static void
-switch_vt(_THIS, unsigned short which)
-{
-    struct vt_stat vtstate;
-
-    /* Figure out whether or not we're switching to a new console */
-    if ((ioctl(keyboard_fd, VT_GETSTATE, &vtstate) < 0) ||
-        (which == vtstate.v_active)) {
-        return;
-    }
-
-    /* New console, switch to it */
-    SDL_mutexP(hw_lock);
-    switch_vt_prep(this);
-    if (ioctl(keyboard_fd, VT_ACTIVATE, which) == 0) {
-        ioctl(keyboard_fd, VT_WAITACTIVE, which);
-        switched_away = 1;
-    } else {
-        switch_vt_done(this);
-    }
-    SDL_mutexV(hw_lock);
-}
-
-static void
-handle_keyboard(_THIS)
-{
-    unsigned char keybuf[BUFSIZ];
-    int i, nread;
-    int pressed;
-    int scancode;
-    SDL_keysym keysym;
-
-    nread = read(keyboard_fd, keybuf, BUFSIZ);
-    for (i = 0; i < nread; ++i) {
-        scancode = keybuf[i] & 0x7F;
-        if (keybuf[i] & 0x80) {
-            pressed = SDL_RELEASED;
-        } else {
-            pressed = SDL_PRESSED;
-        }
-        TranslateKey(scancode, &keysym);
-        /* Handle Ctrl-Alt-FN for vt switch */
-        switch (keysym.sym) {
-        case SDLK_F1:
-        case SDLK_F2:
-        case SDLK_F3:
-        case SDLK_F4:
-        case SDLK_F5:
-        case SDLK_F6:
-        case SDLK_F7:
-        case SDLK_F8:
-        case SDLK_F9:
-        case SDLK_F10:
-        case SDLK_F11:
-        case SDLK_F12:
-            if ((SDL_GetModState() & KMOD_CTRL) &&
-                (SDL_GetModState() & KMOD_ALT)) {
-                if (pressed) {
-                    switch_vt(this, (keysym.sym - SDLK_F1) + 1);
-                }
-                break;
-            }
-            /* Fall through to normal processing */
-        default:
-            posted += SDL_PrivateKeyboard(pressed, &keysym);
-            break;
-        }
-    }
-}
-
-void
-FB_PumpEvents(_THIS)
-{
-    fd_set fdset;
-    int max_fd;
-    static struct timeval zero;
-
-    do {
-        if (switched_away) {
-            struct vt_stat vtstate;
-
-            SDL_mutexP(hw_lock);
-            if ((ioctl(keyboard_fd, VT_GETSTATE, &vtstate) == 0) &&
-                vtstate.v_active == current_vt) {
-                switched_away = 0;
-                switch_vt_done(this);
-            }
-            SDL_mutexV(hw_lock);
-        }
-
-        posted = 0;
-
-        FD_ZERO(&fdset);
-        max_fd = 0;
-        if (keyboard_fd >= 0) {
-            FD_SET(keyboard_fd, &fdset);
-            if (max_fd < keyboard_fd) {
-                max_fd = keyboard_fd;
-            }
-        }
-        if (mouse_fd >= 0) {
-            FD_SET(mouse_fd, &fdset);
-            if (max_fd < mouse_fd) {
-                max_fd = mouse_fd;
-            }
-        }
-        if (select(max_fd + 1, &fdset, NULL, NULL, &zero) > 0) {
-            if (keyboard_fd >= 0) {
-                if (FD_ISSET(keyboard_fd, &fdset)) {
-                    handle_keyboard(this);
-                }
-            }
-            if (mouse_fd >= 0) {
-                if (FD_ISSET(mouse_fd, &fdset)) {
-                    handle_mouse(this);
-                }
-            }
-        }
-    } while (posted);
-}
-
-void
-FB_InitOSKeymap(_THIS)
-{
-    int i;
-
-    /* Initialize the Linux key translation table */
-
-    /* First get the ascii keys and others not well handled */
-    for (i = 0; i < SDL_arraysize(keymap); ++i) {
-        switch (i) {
-            /* These aren't handled by the x86 kernel keymapping (?) */
-        case SCANCODE_PRINTSCREEN:
-            keymap[i] = SDLK_PRINT;
-            break;
-        case SCANCODE_BREAK:
-            keymap[i] = SDLK_BREAK;
-            break;
-        case SCANCODE_BREAK_ALTERNATIVE:
-            keymap[i] = SDLK_PAUSE;
-            break;
-        case SCANCODE_LEFTSHIFT:
-            keymap[i] = SDLK_LSHIFT;
-            break;
-        case SCANCODE_RIGHTSHIFT:
-            keymap[i] = SDLK_RSHIFT;
-            break;
-        case SCANCODE_LEFTCONTROL:
-            keymap[i] = SDLK_LCTRL;
-            break;
-        case SCANCODE_RIGHTCONTROL:
-            keymap[i] = SDLK_RCTRL;
-            break;
-        case SCANCODE_RIGHTWIN:
-            keymap[i] = SDLK_RSUPER;
-            break;
-        case SCANCODE_LEFTWIN:
-            keymap[i] = SDLK_LSUPER;
-            break;
-        case SCANCODE_LEFTALT:
-            keymap[i] = SDLK_LALT;
-            break;
-        case SCANCODE_RIGHTALT:
-            keymap[i] = SDLK_RALT;
-            break;
-        case 127:
-            keymap[i] = SDLK_MENU;
-            break;
-            /* this should take care of all standard ascii keys */
-        default:
-            keymap[i] = KVAL(vga_keymap[0][i]);
-            break;
-        }
-    }
-    for (i = 0; i < SDL_arraysize(keymap); ++i) {
-        switch (keymap_temp[i]) {
-        case K_F1:
-            keymap[i] = SDLK_F1;
-            break;
-        case K_F2:
-            keymap[i] = SDLK_F2;
-            break;
-        case K_F3:
-            keymap[i] = SDLK_F3;
-            break;
-        case K_F4:
-            keymap[i] = SDLK_F4;
-            break;
-        case K_F5:
-            keymap[i] = SDLK_F5;
-            break;
-        case K_F6:
-            keymap[i] = SDLK_F6;
-            break;
-        case K_F7:
-            keymap[i] = SDLK_F7;
-            break;
-        case K_F8:
-            keymap[i] = SDLK_F8;
-            break;
-        case K_F9:
-            keymap[i] = SDLK_F9;
-            break;
-        case K_F10:
-            keymap[i] = SDLK_F10;
-            break;
-        case K_F11:
-            keymap[i] = SDLK_F11;
-            break;
-        case K_F12:
-            keymap[i] = SDLK_F12;
-            break;
-
-        case K_DOWN:
-            keymap[i] = SDLK_DOWN;
-            break;
-        case K_LEFT:
-            keymap[i] = SDLK_LEFT;
-            break;
-        case K_RIGHT:
-            keymap[i] = SDLK_RIGHT;
-            break;
-        case K_UP:
-            keymap[i] = SDLK_UP;
-            break;
-
-        case K_P0:
-            keymap[i] = SDLK_KP0;
-            break;
-        case K_P1:
-            keymap[i] = SDLK_KP1;
-            break;
-        case K_P2:
-            keymap[i] = SDLK_KP2;
-            break;
-        case K_P3:
-            keymap[i] = SDLK_KP3;
-            break;
-        case K_P4:
-            keymap[i] = SDLK_KP4;
-            break;
-        case K_P5:
-            keymap[i] = SDLK_KP5;
-            break;
-        case K_P6:
-            keymap[i] = SDLK_KP6;
-            break;
-        case K_P7:
-            keymap[i] = SDLK_KP7;
-            break;
-        case K_P8:
-            keymap[i] = SDLK_KP8;
-            break;
-        case K_P9:
-            keymap[i] = SDLK_KP9;
-            break;
-        case K_PPLUS:
-            keymap[i] = SDLK_KP_PLUS;
-            break;
-        case K_PMINUS:
-            keymap[i] = SDLK_KP_MINUS;
-            break;
-        case K_PSTAR:
-            keymap[i] = SDLK_KP_MULTIPLY;
-            break;
-        case K_PSLASH:
-            keymap[i] = SDLK_KP_DIVIDE;
-            break;
-        case K_PENTER:
-            keymap[i] = SDLK_KP_ENTER;
-            break;
-        case K_PDOT:
-            keymap[i] = SDLK_KP_PERIOD;
-            break;
-
-        case K_SHIFT:
-            if (keymap[i] != SDLK_RSHIFT)
-                keymap[i] = SDLK_LSHIFT;
-            break;
-        case K_SHIFTL:
-            keymap[i] = SDLK_LSHIFT;
-            break;
-        case K_SHIFTR:
-            keymap[i] = SDLK_RSHIFT;
-            break;
-        case K_CTRL:
-            if (keymap[i] != SDLK_RCTRL)
-                keymap[i] = SDLK_LCTRL;
-            break;
-        case K_CTRLL:
-            keymap[i] = SDLK_LCTRL;
-            break;
-        case K_CTRLR:
-            keymap[i] = SDLK_RCTRL;
-            break;
-        case K_ALT:
-            keymap[i] = SDLK_LALT;
-            break;
-        case K_ALTGR:
-            keymap[i] = SDLK_RALT;
-            break;
-
-        case K_INSERT:
-            keymap[i] = SDLK_INSERT;
-            break;
-        case K_REMOVE:
-            keymap[i] = SDLK_DELETE;
-            break;
-        case K_PGUP:
-            keymap[i] = SDLK_PAGEUP;
-            break;
-        case K_PGDN:
-            keymap[i] = SDLK_PAGEDOWN;
-            break;
-        case K_FIND:
-            keymap[i] = SDLK_HOME;
-            break;
-        case K_SELECT:
-            keymap[i] = SDLK_END;
-            break;
-
-        case K_NUM:
-            keymap[i] = SDLK_NUMLOCK;
-            break;
-        case K_CAPS:
-            keymap[i] = SDLK_CAPSLOCK;
-            break;
-
-        case K_F13:
-            keymap[i] = SDLK_PRINT;
-            break;
-        case K_HOLD:
-            keymap[i] = SDLK_SCROLLOCK;
-            break;
-        case K_PAUSE:
-            keymap[i] = SDLK_PAUSE;
-            break;
-
-        case 127:
-            keymap[i] = SDLK_BACKSPACE;
-            break;
-
-        default:
-            break;
-        }
-    }
-}
-
-static SDL_keysym *
-TranslateKey(int scancode, SDL_keysym * keysym)
-{
-    /* Set the keysym information */
-    keysym->scancode = scancode;
-    keysym->sym = keymap[scancode];
-    keysym->mod = KMOD_NONE;
-
-    /* If UNICODE is on, get the UNICODE value for the key */
-    keysym->unicode = 0;
-    if (SDL_TranslateUNICODE) {
-        int map;
-        SDLMod modstate;
-
-        modstate = SDL_GetModState();
-        map = 0;
-        if (modstate & KMOD_SHIFT) {
-            map |= (1 << KG_SHIFT);
-        }
-        if (modstate & KMOD_CTRL) {
-            map |= (1 << KG_CTRL);
-        }
-        if (modstate & KMOD_LALT) {
-            map |= (1 << KG_ALT);
-        }
-        if (modstate & KMOD_RALT) {
-            map |= (1 << KG_ALTGR);
-        }
-        if (KTYP(vga_keymap[map][scancode]) == KT_LETTER) {
-            if (modstate & KMOD_CAPS) {
-                map ^= (1 << KG_SHIFT);
-            }
-        }
-        if (KTYP(vga_keymap[map][scancode]) == KT_PAD) {
-            if (modstate & KMOD_NUM) {
-                keysym->unicode = KVAL(vga_keymap[map][scancode]);
-            }
-        } else {
-            keysym->unicode = KVAL(vga_keymap[map][scancode]);
-        }
-    }
-    return (keysym);
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbevents_c.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_fbvideo.h"
-
-/* Variables and functions exported by SDL_sysevents.c to other parts 
-   of the native video subsystem (SDL_sysvideo.c)
-*/
-extern int FB_OpenKeyboard(_THIS);
-extern void FB_CloseKeyboard(_THIS);
-extern int FB_OpenMouse(_THIS);
-extern void FB_CloseMouse(_THIS);
-extern int FB_EnterGraphicsMode(_THIS);
-extern int FB_InGraphicsMode(_THIS);
-extern void FB_LeaveGraphicsMode(_THIS);
-
-extern void FB_InitOSKeymap(_THIS);
-extern void FB_PumpEvents(_THIS);
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbkeys.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-
-/* Scancodes for the Linux framebuffer console
-   - Taken with thanks from SVGAlib 1.4.0
-*/
-
-#define SCANCODE_ESCAPE			1
-
-#define SCANCODE_1			2
-#define SCANCODE_2			3
-#define SCANCODE_3			4
-#define SCANCODE_4			5
-#define SCANCODE_5			6
-#define SCANCODE_6			7
-#define SCANCODE_7			8
-#define SCANCODE_8			9
-#define SCANCODE_9			10
-#define SCANCODE_0			11
-
-#define SCANCODE_MINUS			12
-#define SCANCODE_EQUAL			13
-
-#define SCANCODE_BACKSPACE		14
-#define SCANCODE_TAB			15
-
-#define SCANCODE_Q			16
-#define SCANCODE_W			17
-#define SCANCODE_E			18
-#define SCANCODE_R			19
-#define SCANCODE_T			20
-#define SCANCODE_Y			21
-#define SCANCODE_U			22
-#define SCANCODE_I			23
-#define SCANCODE_O			24
-#define SCANCODE_P			25
-#define SCANCODE_BRACKET_LEFT		26
-#define SCANCODE_BRACKET_RIGHT		27
-
-#define SCANCODE_ENTER			28
-
-#define SCANCODE_LEFTCONTROL		29
-
-#define SCANCODE_A			30
-#define SCANCODE_S			31
-#define SCANCODE_D			32
-#define SCANCODE_F			33
-#define SCANCODE_G			34
-#define SCANCODE_H			35
-#define SCANCODE_J			36
-#define SCANCODE_K			37
-#define SCANCODE_L			38
-#define SCANCODE_SEMICOLON		39
-#define SCANCODE_APOSTROPHE		40
-#define SCANCODE_GRAVE			41
-
-#define SCANCODE_LEFTSHIFT		42
-#define SCANCODE_BACKSLASH		43
-
-#define SCANCODE_Z			44
-#define SCANCODE_X			45
-#define SCANCODE_C			46
-#define SCANCODE_V			47
-#define SCANCODE_B			48
-#define SCANCODE_N			49
-#define SCANCODE_M			50
-#define SCANCODE_COMMA			51
-#define SCANCODE_PERIOD			52
-#define SCANCODE_SLASH			53
-
-#define SCANCODE_RIGHTSHIFT		54
-#define SCANCODE_KEYPADMULTIPLY		55
-
-#define SCANCODE_LEFTALT		56
-#define SCANCODE_SPACE			57
-#define SCANCODE_CAPSLOCK		58
-
-#define SCANCODE_F1			59
-#define SCANCODE_F2			60
-#define SCANCODE_F3			61
-#define SCANCODE_F4			62
-#define SCANCODE_F5			63
-#define SCANCODE_F6			64
-#define SCANCODE_F7			65
-#define SCANCODE_F8			66
-#define SCANCODE_F9			67
-#define SCANCODE_F10			68
-
-#define SCANCODE_NUMLOCK		69
-#define SCANCODE_SCROLLLOCK		70
-
-#define SCANCODE_KEYPAD7		71
-#define SCANCODE_CURSORUPLEFT		71
-#define SCANCODE_KEYPAD8		72
-#define SCANCODE_CURSORUP		72
-#define SCANCODE_KEYPAD9		73
-#define SCANCODE_CURSORUPRIGHT		73
-#define SCANCODE_KEYPADMINUS		74
-#define SCANCODE_KEYPAD4		75
-#define SCANCODE_CURSORLEFT		75
-#define SCANCODE_KEYPAD5		76
-#define SCANCODE_KEYPAD6		77
-#define SCANCODE_CURSORRIGHT		77
-#define SCANCODE_KEYPADPLUS		78
-#define SCANCODE_KEYPAD1		79
-#define SCANCODE_CURSORDOWNLEFT		79
-#define SCANCODE_KEYPAD2		80
-#define SCANCODE_CURSORDOWN		80
-#define SCANCODE_KEYPAD3		81
-#define SCANCODE_CURSORDOWNRIGHT	81
-#define SCANCODE_KEYPAD0		82
-#define SCANCODE_KEYPADPERIOD		83
-
-#define SCANCODE_LESS			86
-
-#define SCANCODE_F11			87
-#define SCANCODE_F12			88
-
-#define SCANCODE_KEYPADENTER		96
-#define SCANCODE_RIGHTCONTROL		97
-#define SCANCODE_CONTROL		97
-#define SCANCODE_KEYPADDIVIDE		98
-#define SCANCODE_PRINTSCREEN		99
-#define SCANCODE_RIGHTALT		100
-#define SCANCODE_BREAK			101     /* Beware: is 119     */
-#define SCANCODE_BREAK_ALTERNATIVE	119     /* on some keyboards! */
-
-#define SCANCODE_HOME			102
-#define SCANCODE_CURSORBLOCKUP		103     /* Cursor key block */
-#define SCANCODE_PAGEUP			104
-#define SCANCODE_CURSORBLOCKLEFT	105     /* Cursor key block */
-#define SCANCODE_CURSORBLOCKRIGHT	106     /* Cursor key block */
-#define SCANCODE_END			107
-#define SCANCODE_CURSORBLOCKDOWN	108     /* Cursor key block */
-#define SCANCODE_PAGEDOWN		109
-#define SCANCODE_INSERT			110
-#define SCANCODE_REMOVE			111
-
-#define SCANCODE_RIGHTWIN		126
-#define SCANCODE_LEFTWIN		125
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbmatrox.c	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,285 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_video.h"
-#include "../SDL_blit.h"
-#include "SDL_fbmatrox.h"
-#include "matrox_mmio.h"
-
-
-/* Wait for vertical retrace - taken from the XFree86 Matrox driver */
-static void
-WaitVBL(_THIS)
-{
-    int count;
-
-    /* find start of retrace */
-    mga_waitidle();
-    while ((mga_in8(0x1FDA) & 0x08));
-    while (!(mga_in8(0x1FDA) & 0x08));
-    /* wait until we're past the start */
-    count = mga_in32(0x1E20) + 2;
-    while (mga_in32(0x1E20) < count);
-}
-
-static void
-WaitIdle(_THIS)
-{
-    mga_waitidle();
-}
-
-/* Sets video mem colorkey and accelerated blit function */
-static int
-SetHWColorKey(_THIS, SDL_Surface * surface, Uint32 key)
-{
-    return (0);
-}
-
-/* Sets per surface hardware alpha value */
-#if 0
-static int
-SetHWAlpha(_THIS, SDL_Surface * surface, Uint8 value)
-{
-    return (0);
-}
-#endif
-
-static int
-FillHWRect(_THIS, SDL_Surface * dst, SDL_Rect * rect, Uint32 color)
-{
-    int dstX, dstY;
-    Uint32 fxbndry;
-    Uint32 ydstlen;
-    Uint32 fillop;
-
-    /* Don't blit to the display surface when switched away */
-    if (switched_away) {
-        return -2;              /* no hardware access */
-    }
-    if (dst == this->screen) {
-        SDL_mutexP(hw_lock);
-    }
-
-    switch (dst->format->BytesPerPixel) {
-    case 1:
-        color |= (color << 8);
-    case 2:
-        color |= (color << 16);
-        break;
-    }
-
-    /* Set up the X/Y base coordinates */
-    FB_dst_to_xy(this, dst, &dstX, &dstY);
-
-    /* Adjust for the current rectangle */
-    dstX += rect->x;
-    dstY += rect->y;
-
-    /* Set up the X boundaries */
-    fxbndry = (dstX | ((dstX + rect->w) << 16));
-
-    /* Set up the Y boundaries */
-    ydstlen = (rect->h | (dstY << 16));
-
-    /* Set up for color fill operation */
-    fillop = MGADWG_TRAP | MGADWG_SOLID |
-        MGADWG_ARZERO | MGADWG_SGNZERO | MGADWG_SHIFTZERO;
-
-    /* Execute the operations! */
-    mga_wait(5);
-    mga_out32(MGAREG_DWGCTL, fillop | MGADWG_REPLACE);
-    mga_out32(MGAREG_FCOL, color);
-    mga_out32(MGAREG_FXBNDRY, fxbndry);
-    mga_out32(MGAREG_YDSTLEN + MGAREG_EXEC, ydstlen);
-
-    FB_AddBusySurface(dst);
-
-    if (dst == this->screen) {
-        SDL_mutexV(hw_lock);
-    }
-    return (0);
-}
-
-static int
-HWAccelBlit(SDL_Surface * src, SDL_Rect * srcrect,
-            SDL_Surface * dst, SDL_Rect * dstrect)
-{
-    SDL_VideoDevice *this = current_video;
-    int pitch, w, h;
-    int srcX, srcY;
-    int dstX, dstY;
-    Uint32 sign;
-    Uint32 start, stop;
-    int skip;
-    Uint32 blitop;
-
-    /* FIXME: For now, only blit to display surface */
-    if (dst->pitch != SDL_VideoSurface->pitch) {
-        return (src->map->sw_blit(src, srcrect, dst, dstrect));
-    }
-
-    /* Don't blit to the display surface when switched away */
-    if (switched_away) {
-        return -2;              /* no hardware access */
-    }
-    if (dst == this->screen) {
-        SDL_mutexP(hw_lock);
-    }
-
-    /* Calculate source and destination base coordinates (in pixels) */
-    w = dstrect->w;
-    h = dstrect->h;
-    FB_dst_to_xy(this, src, &srcX, &srcY);
-    FB_dst_to_xy(this, dst, &dstX, &dstY);
-
-    /* Adjust for the current blit rectangles */
-    srcX += srcrect->x;
-    srcY += srcrect->y;
-    dstX += dstrect->x;
-    dstY += dstrect->y;
-    pitch = dst->pitch / dst->format->BytesPerPixel;
-
-    /* Set up the blit direction (sign) flags */
-    sign = 0;
-    if (srcX < dstX) {
-        sign |= 1;
-    }
-    if (srcY < dstY) {
-        sign |= 4;
-        srcY += (h - 1);
-        dstY += (h - 1);
-    }
-
-    /* Set up the blit source row start, end, and skip (in pixels) */
-    stop = start = (srcY * pitch) + srcX;
-    if (srcX < dstX) {
-        start += (w - 1);
-    } else {
-        stop += (w - 1);
-    }
-    if (srcY < dstY) {
-        skip = -pitch;
-    } else {
-        skip = pitch;
-    }
-
-    /* Set up the blit operation */
-    if ((src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY) {
-        Uint32 colorkey;
-
-        blitop = MGADWG_BFCOL | MGADWG_BITBLT |
-            MGADWG_SHIFTZERO | MGADWG_RSTR | (0x0C << 16) | MGADWG_TRANSC;
-
-        colorkey = src->format->colorkey;
-        switch (dst->format->BytesPerPixel) {
-        case 1:
-            colorkey |= (colorkey << 8);
-        case 2:
-            colorkey |= (colorkey << 16);
-            break;
-        }
-        mga_wait(2);
-        mga_out32(MGAREG_FCOL, colorkey);
-        mga_out32(MGAREG_BCOL, 0xFFFFFFFF);
-    } else {
-        blitop = MGADWG_BFCOL | MGADWG_BITBLT |
-            MGADWG_SHIFTZERO | MGADWG_RSTR | (0x0C << 16);
-    }
-    mga_wait(7);
-    mga_out32(MGAREG_SGN, sign);
-    mga_out32(MGAREG_AR3, start);
-    mga_out32(MGAREG_AR0, stop);
-    mga_out32(MGAREG_AR5, skip);
-    mga_out32(MGAREG_FXBNDRY, (dstX | ((dstX + w - 1) << 16)));
-    mga_out32(MGAREG_YDSTLEN, (dstY << 16) | h);
-    mga_out32(MGAREG_DWGCTL + MGAREG_EXEC, blitop);
-
-    FB_AddBusySurface(src);
-    FB_AddBusySurface(dst);
-
-    if (dst == this->screen) {
-        SDL_mutexV(hw_lock);
-    }
-    return (0);
-}
-
-static int
-CheckHWBlit(_THIS, SDL_Surface * src, SDL_Surface * dst)
-{
-    int accelerated;
-
-    /* Set initial acceleration on */
-    src->flags |= SDL_HWACCEL;
-
-    /* Set the surface attributes */
-    if ((src->flags & SDL_SRCALPHA) == SDL_SRCALPHA) {
-        if (!this->info.blit_hw_A) {
-            src->flags &= ~SDL_HWACCEL;
-        }
-    }
-    if ((src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY) {
-        if (!this->info.blit_hw_CC) {
-            src->flags &= ~SDL_HWACCEL;
-        }
-    }
-
-    /* Check to see if final surface blit is accelerated */
-    accelerated = !!(src->flags & SDL_HWACCEL);
-    if (accelerated) {
-        src->map->hw_blit = HWAccelBlit;
-    }
-    return (accelerated);
-}
-
-void
-FB_MatroxAccel(_THIS, __u32 card)
-{
-    /* We have hardware accelerated surface functions */
-    this->CheckHWBlit = CheckHWBlit;
-    wait_vbl = WaitVBL;
-    wait_idle = WaitIdle;
-
-    /* The Matrox has an accelerated color fill */
-    this->info.blit_fill = 1;
-    this->FillHWRect = FillHWRect;
-
-    /* The Matrox has accelerated normal and colorkey blits. */
-    this->info.blit_hw = 1;
-    /* The Millenium I appears to do the colorkey test a word
-       at a time, and the transparency is intverted. (?)
-     */
-    if (card != FB_ACCEL_MATROX_MGA2064W) {
-        this->info.blit_hw_CC = 1;
-        this->SetHWColorKey = SetHWColorKey;
-    }
-#if 0                           /* Not yet implemented? */
-    /* The Matrox G200/G400 has an accelerated alpha blit */
-    if ((card == FB_ACCEL_MATROX_MGAG200)
-        || (card == FB_ACCEL_MATROX_MGAG400)) {
-        this->info.blit_hw_A = 1;
-        this->SetHWAlpha = SetHWAlpha;
-    }
-#endif
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbmatrox.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* Matrox hardware acceleration for the SDL framebuffer console driver */
-
-#include "SDL_fbvideo.h"
-
-/* Set up the driver for Matrox acceleration */
-extern void FB_MatroxAccel(_THIS, __u32 card);
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbmouse.c	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_mouse.h"
-#include "../../events/SDL_events_c.h"
-#include "SDL_fbvideo.h"
-#include "SDL_fbmouse_c.h"
-
-
-/* The implementation dependent data for the window manager cursor */
-struct WMcursor
-{
-    int unused;
-};
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbmouse_c.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_fbvideo.h"
-
-/* Functions to be exported */
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbriva.c	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,231 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#include "SDL_video.h"
-#include "../SDL_blit.h"
-#include "SDL_fbriva.h"
-#include "riva_mmio.h"
-#include "riva_regs.h"
-
-
-static int FifoEmptyCount = 0;
-static int FifoFreeCount = 0;
-
-/* Wait for vertical retrace */
-static void
-WaitVBL(_THIS)
-{
-    volatile Uint8 *port = (Uint8 *) (mapped_io + PCIO_OFFSET + 0x3DA);
-
-    while ((*port & 0x08));
-    while (!(*port & 0x08));
-}
-
-static void
-NV3WaitIdle(_THIS)
-{
-    RivaRop *Rop = (RivaRop *) (mapped_io + ROP_OFFSET);
-    while ((Rop->FifoFree < FifoEmptyCount) ||
-           (*(mapped_io + PGRAPH_OFFSET + 0x000006B0) & 0x01));
-}
-
-static void
-NV4WaitIdle(_THIS)
-{
-    RivaRop *Rop = (RivaRop *) (mapped_io + ROP_OFFSET);
-    while ((Rop->FifoFree < FifoEmptyCount) ||
-           (*(mapped_io + PGRAPH_OFFSET + 0x00000700) & 0x01));
-}
-
-#if 0                           /* Not yet implemented? */
-/* Sets video mem colorkey and accelerated blit function */
-static int
-SetHWColorKey(_THIS, SDL_Surface * surface, Uint32 key)
-{
-    return (0);
-}
-
-/* Sets per surface hardware alpha value */
-static int
-SetHWAlpha(_THIS, SDL_Surface * surface, Uint8 value)
-{
-    return (0);
-}
-#endif /* Not yet implemented */
-
-static int
-FillHWRect(_THIS, SDL_Surface * dst, SDL_Rect * rect, Uint32 color)
-{
-    int dstX, dstY;
-    int dstW, dstH;
-    RivaBitmap *Bitmap = (RivaBitmap *) (mapped_io + BITMAP_OFFSET);
-
-    /* Don't blit to the display surface when switched away */
-    if (switched_away) {
-        return -2;              /* no hardware access */
-    }
-    if (dst == this->screen) {
-        SDL_mutexP(hw_lock);
-    }
-
-    /* Set up the X/Y base coordinates */
-    dstW = rect->w;
-    dstH = rect->h;
-    FB_dst_to_xy(this, dst, &dstX, &dstY);
-
-    /* Adjust for the current rectangle */
-    dstX += rect->x;
-    dstY += rect->y;
-
-    RIVA_FIFO_FREE(Bitmap, 1);
-    Bitmap->Color1A = color;
-
-    RIVA_FIFO_FREE(Bitmap, 2);
-    Bitmap->UnclippedRectangle[0].TopLeft = (dstX << 16) | dstY;
-    Bitmap->UnclippedRectangle[0].WidthHeight = (dstW << 16) | dstH;
-
-    FB_AddBusySurface(dst);
-
-    if (dst == this->screen) {
-        SDL_mutexV(hw_lock);
-    }
-    return (0);
-}
-
-static int
-HWAccelBlit(SDL_Surface * src, SDL_Rect * srcrect,
-            SDL_Surface * dst, SDL_Rect * dstrect)
-{
-    SDL_VideoDevice *this = current_video;
-    int srcX, srcY;
-    int dstX, dstY;
-    int dstW, dstH;
-    RivaScreenBlt *Blt = (RivaScreenBlt *) (mapped_io + BLT_OFFSET);
-
-    /* FIXME: For now, only blit to display surface */
-    if (dst->pitch != SDL_VideoSurface->pitch) {
-        return (src->map->sw_blit(src, srcrect, dst, dstrect));
-    }
-
-    /* Don't blit to the display surface when switched away */
-    if (switched_away) {
-        return -2;              /* no hardware access */
-    }
-    if (dst == this->screen) {
-        SDL_mutexP(hw_lock);
-    }
-
-    /* Calculate source and destination base coordinates (in pixels) */
-    dstW = dstrect->w;
-    dstH = dstrect->h;
-    FB_dst_to_xy(this, src, &srcX, &srcY);
-    FB_dst_to_xy(this, dst, &dstX, &dstY);
-
-    /* Adjust for the current blit rectangles */
-    srcX += srcrect->x;
-    srcY += srcrect->y;
-    dstX += dstrect->x;
-    dstY += dstrect->y;
-
-    RIVA_FIFO_FREE(Blt, 3);
-    Blt->TopLeftSrc = (srcY << 16) | srcX;
-    Blt->TopLeftDst = (dstY << 16) | dstX;
-    Blt->WidthHeight = (dstH << 16) | dstW;
-
-    FB_AddBusySurface(src);
-    FB_AddBusySurface(dst);
-
-    if (dst == this->screen) {
-        SDL_mutexV(hw_lock);
-    }
-    return (0);
-}
-
-static int
-CheckHWBlit(_THIS, SDL_Surface * src, SDL_Surface * dst)
-{
-    int accelerated;
-
-    /* Set initial acceleration on */
-    src->flags |= SDL_HWACCEL;
-
-    /* Set the surface attributes */
-    if ((src->flags & SDL_SRCALPHA) == SDL_SRCALPHA) {
-        if (!this->info.blit_hw_A) {
-            src->flags &= ~SDL_HWACCEL;
-        }
-    }
-    if ((src->flags & SDL_SRCCOLORKEY) == SDL_SRCCOLORKEY) {
-        if (!this->info.blit_hw_CC) {
-            src->flags &= ~SDL_HWACCEL;
-        }
-    }
-
-    /* Check to see if final surface blit is accelerated */
-    accelerated = !!(src->flags & SDL_HWACCEL);
-    if (accelerated) {
-        src->map->hw_blit = HWAccelBlit;
-    }
-    return (accelerated);
-}
-
-void
-FB_RivaAccel(_THIS, __u32 card)
-{
-    RivaRop *Rop = (RivaRop *) (mapped_io + ROP_OFFSET);
-
-    /* We have hardware accelerated surface functions */
-    this->CheckHWBlit = CheckHWBlit;
-    wait_vbl = WaitVBL;
-    switch (card) {
-    case FB_ACCEL_NV3:
-        wait_idle = NV3WaitIdle;
-        break;
-    case FB_ACCEL_NV4:
-        wait_idle = NV4WaitIdle;
-        break;
-    default:
-        /* Hmm... FIXME */
-        break;
-    }
-    FifoEmptyCount = Rop->FifoFree;
-
-    /* The Riva has an accelerated color fill */
-    this->info.blit_fill = 1;
-    this->FillHWRect = FillHWRect;
-
-    /* The Riva has accelerated normal and colorkey blits. */
-    this->info.blit_hw = 1;
-#if 0                           /* Not yet implemented? */
-    this->info.blit_hw_CC = 1;
-    this->SetHWColorKey = SetHWColorKey;
-#endif
-
-#if 0                           /* Not yet implemented? */
-    /* The Riva has an accelerated alpha blit */
-    this->info.blit_hw_A = 1;
-    this->SetHWAlpha = SetHWAlpha;
-#endif
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbriva.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* Riva hardware acceleration for the SDL framebuffer console driver */
-
-#include "SDL_fbvideo.h"
-
-#ifndef FB_ACCEL_NV3
-#define FB_ACCEL_NV3	27
-#endif
-#ifndef FB_ACCEL_NV4
-#define FB_ACCEL_NV4	28
-#endif
-
-/* Set up the driver for Riva acceleration */
-extern void FB_RivaAccel(_THIS, __u32 card);
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbvideo.c	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1815 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* Framebuffer console based SDL video driver implementation.
-*/
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <sys/mman.h>
-
-#ifndef HAVE_GETPAGESIZE
-#include <asm/page.h>           /* For definition of PAGE_SIZE */
-#endif
-
-#include <linux/vt.h>
-
-#include "SDL_video.h"
-#include "SDL_mouse.h"
-#include "../SDL_sysvideo.h"
-#include "../SDL_pixels_c.h"
-#include "../../events/SDL_events_c.h"
-#include "SDL_fbvideo.h"
-#include "SDL_fbmouse_c.h"
-#include "SDL_fbevents_c.h"
-#include "SDL_fb3dfx.h"
-#include "SDL_fbmatrox.h"
-#include "SDL_fbriva.h"
-
-/*#define FBCON_DEBUG*/
-
-#if defined(i386) && defined(FB_TYPE_VGA_PLANES)
-#define VGA16_FBCON_SUPPORT
-#include <sys/io.h>             /* For ioperm() */
-#ifndef FB_AUX_VGA_PLANES_VGA4
-#define FB_AUX_VGA_PLANES_VGA4	0
-#endif
-/*
-static inline void outb (unsigned char value, unsigned short port)
-{
-  __asm__ __volatile__ ("outb %b0,%w1"::"a" (value), "Nd" (port));
-} 
-*/
-#endif /* FB_TYPE_VGA_PLANES */
-
-/* A list of video resolutions that we query for (sorted largest to smallest) */
-static const SDL_Rect checkres[] = {
-    {0, 0, 1600, 1200},         /* 16 bpp: 0x11E, or 286 */
-    {0, 0, 1408, 1056},         /* 16 bpp: 0x19A, or 410 */
-    {0, 0, 1280, 1024},         /* 16 bpp: 0x11A, or 282 */
-    {0, 0, 1152, 864},          /* 16 bpp: 0x192, or 402 */
-    {0, 0, 1024, 768},          /* 16 bpp: 0x117, or 279 */
-    {0, 0, 960, 720},           /* 16 bpp: 0x18A, or 394 */
-    {0, 0, 800, 600},           /* 16 bpp: 0x114, or 276 */
-    {0, 0, 768, 576},           /* 16 bpp: 0x182, or 386 */
-    {0, 0, 720, 576},           /* PAL */
-    {0, 0, 720, 480},           /* NTSC */
-    {0, 0, 640, 480},           /* 16 bpp: 0x111, or 273 */
-    {0, 0, 640, 400},           /*  8 bpp: 0x100, or 256 */
-    {0, 0, 512, 384},
-    {0, 0, 320, 240},
-    {0, 0, 320, 200}
-};
-
-static const struct
-{
-    int xres;
-    int yres;
-    int pixclock;
-    int left;
-    int right;
-    int upper;
-    int lower;
-    int hslen;
-    int vslen;
-    int sync;
-    int vmode;
-} vesa_timings[] = {
-#ifdef USE_VESA_TIMINGS         /* Only tested on Matrox Millenium I */
-    {
-    640, 400, 39771, 48, 16, 39, 8, 96, 2, 2, 0},       /* 70 Hz */
-    {
-    640, 480, 39683, 48, 16, 33, 10, 96, 2, 0, 0},      /* 60 Hz */
-    {
-    768, 576, 26101, 144, 16, 28, 6, 112, 4, 0, 0},     /* 60 Hz */
-    {
-    800, 600, 24038, 144, 24, 28, 8, 112, 6, 0, 0},     /* 60 Hz */
-    {
-    960, 720, 17686, 144, 24, 28, 8, 112, 4, 0, 0},     /* 60 Hz */
-    {
-    1024, 768, 15386, 160, 32, 30, 4, 128, 4, 0, 0},    /* 60 Hz */
-    {
-    1152, 864, 12286, 192, 32, 30, 4, 128, 4, 0, 0},    /* 60 Hz */
-    {
-    1280, 1024, 9369, 224, 32, 32, 4, 136, 4, 0, 0},    /* 60 Hz */
-    {
-    1408, 1056, 8214, 256, 40, 32, 5, 144, 5, 0, 0},    /* 60 Hz */
-    {
-    1600, 1200, /*? */ 0, 272, 48, 32, 5, 152, 5, 0, 0},        /* 60 Hz */
-#else
-    /* You can generate these timings from your XF86Config file using
-       the 'modeline2fb' perl script included with the fbset package.
-       These timings were generated for Matrox Millenium I, 15" monitor.
-     */
-    {
-    320, 200, 79440, 16, 16, 20, 4, 48, 1, 0, 2},       /* 70 Hz */
-    {
-    320, 240, 63492, 16, 16, 16, 4, 48, 2, 0, 2},       /* 72 Hz */
-    {
-    512, 384, 49603, 48, 16, 16, 1, 64, 3, 0, 0},       /* 78 Hz */
-    {
-    640, 400, 31746, 96, 32, 41, 1, 64, 3, 2, 0},       /* 85 Hz */
-    {
-    640, 480, 31746, 120, 16, 16, 1, 64, 3, 0, 0},      /* 75 Hz */
-    {
-    768, 576, 26101, 144, 16, 28, 6, 112, 4, 0, 0},     /* 60 Hz */
-    {
-    800, 600, 20000, 64, 56, 23, 37, 120, 6, 3, 0},     /* 72 Hz */
-    {
-    960, 720, 17686, 144, 24, 28, 8, 112, 4, 0, 0},     /* 60 Hz */
-    {
-    1024, 768, 13333, 144, 24, 29, 3, 136, 6, 0, 0},    /* 70 Hz */
-    {
-    1152, 864, 12286, 192, 32, 30, 4, 128, 4, 0, 0},    /* 60 Hz */
-    {
-    1280, 1024, 9369, 224, 32, 32, 4, 136, 4, 0, 0},    /* 60 Hz */
-    {
-    1408, 1056, 8214, 256, 40, 32, 5, 144, 5, 0, 0},    /* 60 Hz */
-    {
-    1600, 1200, /*? */ 0, 272, 48, 32, 5, 152, 5, 0, 0},        /* 60 Hz */
-#endif
-};
-
-/* Initialization/Query functions */
-static int FB_VideoInit(_THIS, SDL_PixelFormat * vformat);
-static SDL_Rect **FB_ListModes(_THIS, SDL_PixelFormat * format, Uint32 flags);
-static SDL_Surface *FB_SetVideoMode(_THIS, SDL_Surface * current, int width,
-                                    int height, int bpp, Uint32 flags);
-#ifdef VGA16_FBCON_SUPPORT
-static SDL_Surface *FB_SetVGA16Mode(_THIS, SDL_Surface * current, int width,
-                                    int height, int bpp, Uint32 flags);
-#endif
-static int FB_SetColors(_THIS, int firstcolor, int ncolors,
-                        SDL_Color * colors);
-static void FB_VideoQuit(_THIS);
-
-/* Hardware surface functions */
-static int FB_InitHWSurfaces(_THIS, SDL_Surface * screen, char *base,
-                             int size);
-static void FB_FreeHWSurfaces(_THIS);
-static int FB_AllocHWSurface(_THIS, SDL_Surface * surface);
-static int FB_LockHWSurface(_THIS, SDL_Surface * surface);
-static void FB_UnlockHWSurface(_THIS, SDL_Surface * surface);
-static void FB_FreeHWSurface(_THIS, SDL_Surface * surface);
-static void FB_WaitVBL(_THIS);
-static void FB_WaitIdle(_THIS);
-static int FB_FlipHWSurface(_THIS, SDL_Surface * surface);
-
-/* Internal palette functions */
-static void FB_SavePalette(_THIS, struct fb_fix_screeninfo *finfo,
-                           struct fb_var_screeninfo *vinfo);
-static void FB_RestorePalette(_THIS);
-
-static int
-SDL_getpagesize(void)
-{
-#ifdef HAVE_GETPAGESIZE
-    return getpagesize();
-#elif defined(PAGE_SIZE)
-    return PAGE_SIZE;
-#else
-#error Can not determine system page size.
-    /* this is what it USED to be in Linux... */
-    return 4096;
-#endif
-}
-
-
-/* Small wrapper for mmap() so we can play nicely with no-mmu hosts
- * (non-mmu hosts disallow the MAP_SHARED flag) */
-
-static void *
-do_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset)
-{
-    void *ret;
-    ret = mmap(start, length, prot, flags, fd, offset);
-    if (ret == (char *) -1 && (flags & MAP_SHARED)) {
-        ret = mmap(start, length, prot,
-                   (flags & ~MAP_SHARED) | MAP_PRIVATE, fd, offset);
-    }
-    return ret;
-}
-
-/* FB driver bootstrap functions */
-
-static int
-FB_Available(void)
-{
-    int console = -1;
-    /* Added check for /fb/0 (devfs) */
-    /* but - use environment variable first... if it fails, still check defaults */
-    int idx = 0;
-    const char *SDL_fbdevs[4] = { NULL, "/dev/fb0", "/dev/fb/0", NULL };
-
-    SDL_fbdevs[0] = SDL_getenv("SDL_FBDEV");
-    if (!SDL_fbdevs[0])
-        idx++;
-    for (; SDL_fbdevs[idx]; idx++) {
-        console = open(SDL_fbdevs[idx], O_RDWR, 0);
-        if (console >= 0) {
-            close(console);
-            break;
-        }
-    }
-    return (console >= 0);
-}
-
-static void
-FB_DeleteDevice(SDL_VideoDevice * device)
-{
-    SDL_free(device->hidden);
-    SDL_free(device);
-}
-
-static SDL_VideoDevice *
-FB_CreateDevice(int devindex)
-{
-    SDL_VideoDevice *this;
-
-    /* Initialize all variables that we clean on shutdown */
-    this = (SDL_VideoDevice *) SDL_malloc(sizeof(SDL_VideoDevice));
-    if (this) {
-        SDL_memset(this, 0, (sizeof *this));
-        this->hidden = (struct SDL_PrivateVideoData *)
-            SDL_malloc((sizeof *this->hidden));
-    }
-    if ((this == NULL) || (this->hidden == NULL)) {
-        SDL_OutOfMemory();
-        if (this) {
-            SDL_free(this);
-        }
-        return (0);
-    }
-    SDL_memset(this->hidden, 0, (sizeof *this->hidden));
-    wait_vbl = FB_WaitVBL;
-    wait_idle = FB_WaitIdle;
-    mouse_fd = -1;
-    keyboard_fd = -1;
-
-    /* Set the function pointers */
-    this->VideoInit = FB_VideoInit;
-    this->ListModes = FB_ListModes;
-    this->SetVideoMode = FB_SetVideoMode;
-    this->SetColors = FB_SetColors;
-    this->UpdateRects = NULL;
-    this->VideoQuit = FB_VideoQuit;
-    this->AllocHWSurface = FB_AllocHWSurface;
-    this->CheckHWBlit = NULL;
-    this->FillHWRect = NULL;
-    this->SetHWColorKey = NULL;
-    this->SetHWAlpha = NULL;
-    this->LockHWSurface = FB_LockHWSurface;
-    this->UnlockHWSurface = FB_UnlockHWSurface;
-    this->FlipHWSurface = FB_FlipHWSurface;
-    this->FreeHWSurface = FB_FreeHWSurface;
-    this->SetCaption = NULL;
-    this->SetIcon = NULL;
-    this->IconifyWindow = NULL;
-    this->GrabInput = NULL;
-    this->GetWMInfo = NULL;
-    this->InitOSKeymap = FB_InitOSKeymap;
-    this->PumpEvents = FB_PumpEvents;
-
-    this->free = FB_DeleteDevice;
-
-    return this;
-}
-
-VideoBootStrap FBCON_bootstrap = {
-    "fbcon", "Linux Framebuffer Console",
-    FB_Available, FB_CreateDevice
-};
-
-#define FB_MODES_DB	"/etc/fb.modes"
-
-static int
-read_fbmodes_line(FILE * f, char *line, int length)
-{
-    int blank;
-    char *c;
-    int i;
-
-    blank = 0;
-    /* find a relevant line */
-    do {
-        if (!fgets(line, length, f))
-            return 0;
-        c = line;
-        while (((*c == '\t') || (*c == ' ')) && (*c != 0))
-            c++;
-
-        if ((*c == '\n') || (*c == '#') || (*c == 0))
-            blank = 1;
-        else
-            blank = 0;
-    } while (blank);
-    /* remove whitespace at the begining of the string */
-    i = 0;
-    do {
-        line[i] = c[i];
-        i++;
-    } while (c[i] != 0);
-    return 1;
-}
-
-static int
-read_fbmodes_mode(FILE * f, struct fb_var_screeninfo *vinfo)
-{
-    char line[1024];
-    char option[256];
-
-    /* Find a "geometry" */
-    do {
-        if (read_fbmodes_line(f, line, sizeof(line)) == 0)
-            return 0;
-        if (SDL_strncmp(line, "geometry", 8) == 0)
-            break;
-    } while (1);
-
-    SDL_sscanf(line, "geometry %d %d %d %d %d", &vinfo->xres, &vinfo->yres,
-               &vinfo->xres_virtual, &vinfo->yres_virtual,
-               &vinfo->bits_per_pixel);
-    if (read_fbmodes_line(f, line, sizeof(line)) == 0)
-        return 0;
-
-    SDL_sscanf(line, "timings %d %d %d %d %d %d %d", &vinfo->pixclock,
-               &vinfo->left_margin, &vinfo->right_margin,
-               &vinfo->upper_margin, &vinfo->lower_margin, &vinfo->hsync_len,
-               &vinfo->vsync_len);
-
-    vinfo->sync = 0;
-    vinfo->vmode = FB_VMODE_NONINTERLACED;
-
-    /* Parse misc options */
-    do {
-        if (read_fbmodes_line(f, line, sizeof(line)) == 0)
-            return 0;
-
-        if (SDL_strncmp(line, "hsync", 5) == 0) {
-            SDL_sscanf(line, "hsync %s", option);
-            if (SDL_strncmp(option, "high", 4) == 0)
-                vinfo->sync |= FB_SYNC_HOR_HIGH_ACT;
-        } else if (SDL_strncmp(line, "vsync", 5) == 0) {
-            SDL_sscanf(line, "vsync %s", option);
-            if (SDL_strncmp(option, "high", 4) == 0)
-                vinfo->sync |= FB_SYNC_VERT_HIGH_ACT;
-        } else if (SDL_strncmp(line, "csync", 5) == 0) {
-            SDL_sscanf(line, "csync %s", option);
-            if (SDL_strncmp(option, "high", 4) == 0)
-                vinfo->sync |= FB_SYNC_COMP_HIGH_ACT;
-        } else if (SDL_strncmp(line, "extsync", 5) == 0) {
-            SDL_sscanf(line, "extsync %s", option);
-            if (SDL_strncmp(option, "true", 4) == 0)
-                vinfo->sync |= FB_SYNC_EXT;
-        } else if (SDL_strncmp(line, "laced", 5) == 0) {
-            SDL_sscanf(line, "laced %s", option);
-            if (SDL_strncmp(option, "true", 4) == 0)
-                vinfo->vmode |= FB_VMODE_INTERLACED;
-        } else if (SDL_strncmp(line, "double", 6) == 0) {
-            SDL_sscanf(line, "double %s", option);
-            if (SDL_strncmp(option, "true", 4) == 0)
-                vinfo->vmode |= FB_VMODE_DOUBLE;
-        }
-    } while (SDL_strncmp(line, "endmode", 7) != 0);
-
-    return 1;
-}
-
-static int
-FB_CheckMode(_THIS, struct fb_var_screeninfo *vinfo,
-             int index, unsigned int *w, unsigned int *h)
-{
-    int mode_okay;
-
-    mode_okay = 0;
-    vinfo->bits_per_pixel = (index + 1) * 8;
-    vinfo->xres = *w;
-    vinfo->xres_virtual = *w;
-    vinfo->yres = *h;
-    vinfo->yres_virtual = *h;
-    vinfo->activate = FB_ACTIVATE_TEST;
-    if (ioctl(console_fd, FBIOPUT_VSCREENINFO, vinfo) == 0) {
-#ifdef FBCON_DEBUG
-        fprintf(stderr,
-                "Checked mode %dx%d at %d bpp, got mode %dx%d at %d bpp\n",
-                *w, *h, (index + 1) * 8, vinfo->xres, vinfo->yres,
-                vinfo->bits_per_pixel);
-#endif
-        if ((((vinfo->bits_per_pixel + 7) / 8) - 1) == index) {
-            *w = vinfo->xres;
-            *h = vinfo->yres;
-            mode_okay = 1;
-        }
-    }
-    return mode_okay;
-}
-
-static int
-FB_AddMode(_THIS, int index, unsigned int w, unsigned int h,
-           int check_timings)
-{
-    SDL_Rect *mode;
-    int i;
-    int next_mode;
-
-    /* Check to see if we already have this mode */
-    if (SDL_nummodes[index] > 0) {
-        mode = SDL_modelist[index][SDL_nummodes[index] - 1];
-        if ((mode->w == w) && (mode->h == h)) {
-#ifdef FBCON_DEBUG
-            fprintf(stderr,
-                    "We already have mode %dx%d at %d bytes per pixel\n",
-                    w, h, index + 1);
-#endif
-            return (0);
-        }
-    }
-
-    /* Only allow a mode if we have a valid timing for it */
-    if (check_timings) {
-        int found_timing = 0;
-        for (i = 0; i < (sizeof(vesa_timings) / sizeof(vesa_timings[0])); ++i) {
-            if ((w == vesa_timings[i].xres) &&
-                (h == vesa_timings[i].yres) && vesa_timings[i].pixclock) {
-                found_timing = 1;
-                break;
-            }
-        }
-        if (!found_timing) {
-#ifdef FBCON_DEBUG
-            fprintf(stderr, "No valid timing line for mode %dx%d\n", w, h);
-#endif
-            return (0);
-        }
-    }
-
-    /* Set up the new video mode rectangle */
-    mode = (SDL_Rect *) SDL_malloc(sizeof *mode);
-    if (mode == NULL) {
-        SDL_OutOfMemory();
-        return (-1);
-    }
-    mode->x = 0;
-    mode->y = 0;
-    mode->w = w;
-    mode->h = h;
-#ifdef FBCON_DEBUG
-    fprintf(stderr, "Adding mode %dx%d at %d bytes per pixel\n", w, h,
-            index + 1);
-#endif
-
-    /* Allocate the new list of modes, and fill in the new mode */
-    next_mode = SDL_nummodes[index];
-    SDL_modelist[index] = (SDL_Rect **)
-        SDL_realloc(SDL_modelist[index],
-                    (1 + next_mode + 1) * sizeof(SDL_Rect *));
-    if (SDL_modelist[index] == NULL) {
-        SDL_OutOfMemory();
-        SDL_nummodes[index] = 0;
-        SDL_free(mode);
-        return (-1);
-    }
-    SDL_modelist[index][next_mode] = mode;
-    SDL_modelist[index][next_mode + 1] = NULL;
-    SDL_nummodes[index]++;
-
-    return (0);
-}
-
-static int
-cmpmodes(const void *va, const void *vb)
-{
-    const SDL_Rect *a = *(const SDL_Rect **) va;
-    const SDL_Rect *b = *(const SDL_Rect **) vb;
-    if (a->h == b->h)
-        return b->w - a->w;
-    else
-        return b->h - a->h;
-}
-
-static void
-FB_SortModes(_THIS)
-{
-    int i;
-    for (i = 0; i < NUM_MODELISTS; ++i) {
-        if (SDL_nummodes[i] > 0) {
-            SDL_qsort(SDL_modelist[i], SDL_nummodes[i],
-                      sizeof *SDL_modelist[i], cmpmodes);
-        }
-    }
-}
-
-static int
-FB_VideoInit(_THIS, SDL_PixelFormat * vformat)
-{
-    const int pagesize = SDL_getpagesize();
-    struct fb_fix_screeninfo finfo;
-    struct fb_var_screeninfo vinfo;
-    int i, j;
-    int current_index;
-    unsigned int current_w;
-    unsigned int current_h;
-    const char *SDL_fbdev;
-    FILE *modesdb;
-
-    /* Initialize the library */
-    SDL_fbdev = SDL_getenv("SDL_FBDEV");
-    if (SDL_fbdev == NULL) {
-        SDL_fbdev = "/dev/fb0";
-    }
-    console_fd = open(SDL_fbdev, O_RDWR, 0);
-    if (console_fd < 0) {
-        SDL_SetError("Unable to open %s", SDL_fbdev);
-        return (-1);
-    }
-#if !SDL_THREADS_DISABLED
-    /* Create the hardware surface lock mutex */
-    hw_lock = SDL_CreateMutex();
-    if (hw_lock == NULL) {
-        SDL_SetError("Unable to create lock mutex");
-        FB_VideoQuit(this);
-        return (-1);
-    }
-#endif
-
-    /* Get the type of video hardware */
-    if (ioctl(console_fd, FBIOGET_FSCREENINFO, &finfo) < 0) {
-        SDL_SetError("Couldn't get console hardware info");
-        FB_VideoQuit(this);
-        return (-1);
-    }
-    switch (finfo.type) {
-    case FB_TYPE_PACKED_PIXELS:
-        /* Supported, no worries.. */
-        break;
-#ifdef VGA16_FBCON_SUPPORT
-    case FB_TYPE_VGA_PLANES:
-        /* VGA16 is supported, but that's it */
-        if (finfo.type_aux == FB_AUX_VGA_PLANES_VGA4) {
-            if (ioperm(0x3b4, 0x3df - 0x3b4 + 1, 1) < 0) {
-                SDL_SetError("No I/O port permissions");
-                FB_VideoQuit(this);
-                return (-1);
-            }
-            this->SetVideoMode = FB_SetVGA16Mode;
-            break;
-        }
-        /* Fall through to unsupported case */
-#endif /* VGA16_FBCON_SUPPORT */
-    default:
-        SDL_SetError("Unsupported console hardware");
-        FB_VideoQuit(this);
-        return (-1);
-    }
-    switch (finfo.visual) {
-    case FB_VISUAL_TRUECOLOR:
-    case FB_VISUAL_PSEUDOCOLOR:
-    case FB_VISUAL_STATIC_PSEUDOCOLOR:
-    case FB_VISUAL_DIRECTCOLOR:
-        break;
-    default:
-        SDL_SetError("Unsupported console hardware");
-        FB_VideoQuit(this);
-        return (-1);
-    }
-
-    /* Check if the user wants to disable hardware acceleration */
-    {
-        const char *fb_accel;
-        fb_accel = SDL_getenv("SDL_FBACCEL");
-        if (fb_accel) {
-            finfo.accel = SDL_atoi(fb_accel);
-        }
-    }
-
-    /* Memory map the device, compensating for buggy PPC mmap() */
-    mapped_offset = (((long) finfo.smem_start) -
-                     (((long) finfo.smem_start) & ~(pagesize - 1)));
-    mapped_memlen = finfo.smem_len + mapped_offset;
-    mapped_mem = do_mmap(NULL, mapped_memlen,
-                         PROT_READ | PROT_WRITE, MAP_SHARED, console_fd, 0);
-    if (mapped_mem == (char *) -1) {
-        SDL_SetError("Unable to memory map the video hardware");
-        mapped_mem = NULL;
-        FB_VideoQuit(this);
-        return (-1);
-    }
-
-    /* Determine the current screen depth */
-    if (ioctl(console_fd, FBIOGET_VSCREENINFO, &vinfo) < 0) {
-        SDL_SetError("Couldn't get console pixel format");
-        FB_VideoQuit(this);
-        return (-1);
-    }
-    vformat->BitsPerPixel = vinfo.bits_per_pixel;
-    if (vformat->BitsPerPixel < 8) {
-        /* Assuming VGA16, we handle this via a shadow framebuffer */
-        vformat->BitsPerPixel = 8;
-    }
-    for (i = 0; i < vinfo.red.length; ++i) {
-        vformat->Rmask <<= 1;
-        vformat->Rmask |= (0x00000001 << vinfo.red.offset);
-    }
-    for (i = 0; i < vinfo.green.length; ++i) {
-        vformat->Gmask <<= 1;
-        vformat->Gmask |= (0x00000001 << vinfo.green.offset);
-    }
-    for (i = 0; i < vinfo.blue.length; ++i) {
-        vformat->Bmask <<= 1;
-        vformat->Bmask |= (0x00000001 << vinfo.blue.offset);
-    }
-    saved_vinfo = vinfo;
-
-    /* Save hardware palette, if needed */
-    FB_SavePalette(this, &finfo, &vinfo);
-
-    /* If the I/O registers are available, memory map them so we
-       can take advantage of any supported hardware acceleration.
-     */
-    vinfo.accel_flags = 0;      /* Temporarily reserve registers */
-    ioctl(console_fd, FBIOPUT_VSCREENINFO, &vinfo);
-    if (finfo.accel && finfo.mmio_len) {
-        mapped_iolen = finfo.mmio_len;
-        mapped_io = do_mmap(NULL, mapped_iolen, PROT_READ | PROT_WRITE,
-                            MAP_SHARED, console_fd, mapped_memlen);
-        if (mapped_io == (char *) -1) {
-            /* Hmm, failed to memory map I/O registers */
-            mapped_io = NULL;
-        }
-    }
-
-    /* Query for the list of available video modes */
-    current_w = vinfo.xres;
-    current_h = vinfo.yres;
-    current_index = ((vinfo.bits_per_pixel + 7) / 8) - 1;
-    modesdb = fopen(FB_MODES_DB, "r");
-    for (i = 0; i < NUM_MODELISTS; ++i) {
-        SDL_nummodes[i] = 0;
-        SDL_modelist[i] = NULL;
-    }
-    if (SDL_getenv("SDL_FB_BROKEN_MODES") != NULL) {
-        FB_AddMode(this, current_index, current_w, current_h, 0);
-    } else if (modesdb) {
-        while (read_fbmodes_mode(modesdb, &vinfo)) {
-            for (i = 0; i < NUM_MODELISTS; ++i) {
-                unsigned int w, h;
-
-                /* See if we are querying for the current mode */
-                w = vinfo.xres;
-                h = vinfo.yres;
-                if (i == current_index) {
-                    if ((current_w > w) || (current_h > h)) {
-                        /* Only check once */
-                        FB_AddMode(this, i, current_w, current_h, 0);
-                        current_index = -1;
-                    }
-                }
-                if (FB_CheckMode(this, &vinfo, i, &w, &h)) {
-                    FB_AddMode(this, i, w, h, 0);
-                }
-            }
-        }
-        fclose(modesdb);
-        FB_SortModes(this);
-    } else {
-        for (i = 0; i < NUM_MODELISTS; ++i) {
-            for (j = 0; j < (sizeof(checkres) / sizeof(checkres[0])); ++j) {
-                unsigned int w, h;
-
-                /* See if we are querying for the current mode */
-                w = checkres[j].w;
-                h = checkres[j].h;
-                if (i == current_index) {
-                    if ((current_w > w) || (current_h > h)) {
-                        /* Only check once */
-                        FB_AddMode(this, i, current_w, current_h, 0);
-                        current_index = -1;
-                    }
-                }
-                if (FB_CheckMode(this, &vinfo, i, &w, &h)) {
-                    FB_AddMode(this, i, w, h, 1);
-                }
-            }
-        }
-    }
-
-    /* Fill in our hardware acceleration capabilities */
-    this->info.current_w = current_w;
-    this->info.current_h = current_h;
-    this->info.wm_available = 0;
-    this->info.hw_available = 1;
-    this->info.video_mem = finfo.smem_len / 1024;
-    if (mapped_io) {
-        switch (finfo.accel) {
-        case FB_ACCEL_MATROX_MGA2064W:
-        case FB_ACCEL_MATROX_MGA1064SG:
-        case FB_ACCEL_MATROX_MGA2164W:
-        case FB_ACCEL_MATROX_MGA2164W_AGP:
-        case FB_ACCEL_MATROX_MGAG100:
-            /*case FB_ACCEL_MATROX_MGAG200: G200 acceleration broken! */
-        case FB_ACCEL_MATROX_MGAG400:
-#ifdef FBACCEL_DEBUG
-            printf("Matrox hardware accelerator!\n");
-#endif
-            FB_MatroxAccel(this, finfo.accel);
-            break;
-        case FB_ACCEL_3DFX_BANSHEE:
-#ifdef FBACCEL_DEBUG
-            printf("3DFX hardware accelerator!\n");
-#endif
-            FB_3DfxAccel(this, finfo.accel);
-            break;
-        case FB_ACCEL_NV3:
-        case FB_ACCEL_NV4:
-#ifdef FBACCEL_DEBUG
-            printf("NVidia hardware accelerator!\n");
-#endif
-            FB_RivaAccel(this, finfo.accel);
-            break;
-        default:
-#ifdef FBACCEL_DEBUG
-            printf("Unknown hardware accelerator.\n");
-#endif
-            break;
-        }
-    }
-
-    /* Enable mouse and keyboard support */
-    if (FB_OpenKeyboard(this) < 0) {
-        FB_VideoQuit(this);
-        return (-1);
-    }
-    if (FB_OpenMouse(this) < 0) {
-        const char *sdl_nomouse;
-
-        sdl_nomouse = SDL_getenv("SDL_NOMOUSE");
-        if (!sdl_nomouse) {
-            SDL_SetError("Unable to open mouse");
-            FB_VideoQuit(this);
-            return (-1);
-        }
-    }
-
-    /* We're done! */
-    return (0);
-}
-
-static SDL_Rect **
-FB_ListModes(_THIS, SDL_PixelFormat * format, Uint32 flags)
-{
-    return (SDL_modelist[((format->BitsPerPixel + 7) / 8) - 1]);
-}
-
-/* Various screen update functions available */
-static void FB_DirectUpdate(_THIS, int numrects, SDL_Rect * rects);
-#ifdef VGA16_FBCON_SUPPORT
-static void FB_VGA16Update(_THIS, int numrects, SDL_Rect * rects);
-#endif
-
-#ifdef FBCON_DEBUG
-static void
-print_vinfo(struct fb_var_screeninfo *vinfo)
-{
-    fprintf(stderr, "Printing vinfo:\n");
-    fprintf(stderr, "\txres: %d\n", vinfo->xres);
-    fprintf(stderr, "\tyres: %d\n", vinfo->yres);
-    fprintf(stderr, "\txres_virtual: %d\n", vinfo->xres_virtual);
-    fprintf(stderr, "\tyres_virtual: %d\n", vinfo->yres_virtual);
-    fprintf(stderr, "\txoffset: %d\n", vinfo->xoffset);
-    fprintf(stderr, "\tyoffset: %d\n", vinfo->yoffset);
-    fprintf(stderr, "\tbits_per_pixel: %d\n", vinfo->bits_per_pixel);
-    fprintf(stderr, "\tgrayscale: %d\n", vinfo->grayscale);
-    fprintf(stderr, "\tnonstd: %d\n", vinfo->nonstd);
-    fprintf(stderr, "\tactivate: %d\n", vinfo->activate);
-    fprintf(stderr, "\theight: %d\n", vinfo->height);
-    fprintf(stderr, "\twidth: %d\n", vinfo->width);
-    fprintf(stderr, "\taccel_flags: %d\n", vinfo->accel_flags);
-    fprintf(stderr, "\tpixclock: %d\n", vinfo->pixclock);
-    fprintf(stderr, "\tleft_margin: %d\n", vinfo->left_margin);
-    fprintf(stderr, "\tright_margin: %d\n", vinfo->right_margin);
-    fprintf(stderr, "\tupper_margin: %d\n", vinfo->upper_margin);
-    fprintf(stderr, "\tlower_margin: %d\n", vinfo->lower_margin);
-    fprintf(stderr, "\thsync_len: %d\n", vinfo->hsync_len);
-    fprintf(stderr, "\tvsync_len: %d\n", vinfo->vsync_len);
-    fprintf(stderr, "\tsync: %d\n", vinfo->sync);
-    fprintf(stderr, "\tvmode: %d\n", vinfo->vmode);
-    fprintf(stderr, "\tred: %d/%d\n", vinfo->red.length, vinfo->red.offset);
-    fprintf(stderr, "\tgreen: %d/%d\n", vinfo->green.length,
-            vinfo->green.offset);
-    fprintf(stderr, "\tblue: %d/%d\n", vinfo->blue.length,
-            vinfo->blue.offset);
-    fprintf(stderr, "\talpha: %d/%d\n", vinfo->transp.length,
-            vinfo->transp.offset);
-}
-
-static void
-print_finfo(struct fb_fix_screeninfo *finfo)
-{
-    fprintf(stderr, "Printing finfo:\n");
-    fprintf(stderr, "\tsmem_start = %p\n", (char *) finfo->smem_start);
-    fprintf(stderr, "\tsmem_len = %d\n", finfo->smem_len);
-    fprintf(stderr, "\ttype = %d\n", finfo->type);
-    fprintf(stderr, "\ttype_aux = %d\n", finfo->type_aux);
-    fprintf(stderr, "\tvisual = %d\n", finfo->visual);
-    fprintf(stderr, "\txpanstep = %d\n", finfo->xpanstep);
-    fprintf(stderr, "\typanstep = %d\n", finfo->ypanstep);
-    fprintf(stderr, "\tywrapstep = %d\n", finfo->ywrapstep);
-    fprintf(stderr, "\tline_length = %d\n", finfo->line_length);
-    fprintf(stderr, "\tmmio_start = %p\n", (char *) finfo->mmio_start);
-    fprintf(stderr, "\tmmio_len = %d\n", finfo->mmio_len);
-    fprintf(stderr, "\taccel = %d\n", finfo->accel);
-}
-#endif
-
-static int
-choose_fbmodes_mode(struct fb_var_screeninfo *vinfo)
-{
-    int matched;
-    FILE *modesdb;
-    struct fb_var_screeninfo cinfo;
-
-    matched = 0;
-    modesdb = fopen(FB_MODES_DB, "r");
-    if (modesdb) {
-        /* Parse the mode definition file */
-        while (read_fbmodes_mode(modesdb, &cinfo)) {
-            if ((vinfo->xres == cinfo.xres && vinfo->yres == cinfo.yres)
-                && (!matched
-                    || (vinfo->bits_per_pixel == cinfo.bits_per_pixel))) {
-                vinfo->pixclock = cinfo.pixclock;
-                vinfo->left_margin = cinfo.left_margin;
-                vinfo->right_margin = cinfo.right_margin;
-                vinfo->upper_margin = cinfo.upper_margin;
-                vinfo->lower_margin = cinfo.lower_margin;
-                vinfo->hsync_len = cinfo.hsync_len;
-                vinfo->vsync_len = cinfo.vsync_len;
-                if (matched) {
-                    break;
-                }
-                matched = 1;
-            }
-        }
-        fclose(modesdb);
-    }
-    return (matched);
-}
-
-static int
-choose_vesa_mode(struct fb_var_screeninfo *vinfo)
-{
-    int matched;
-    int i;
-
-    /* Check for VESA timings */
-    matched = 0;
-    for (i = 0; i < (sizeof(vesa_timings) / sizeof(vesa_timings[0])); ++i) {
-        if ((vinfo->xres == vesa_timings[i].xres) &&
-            (vinfo->yres == vesa_timings[i].yres)) {
-#ifdef FBCON_DEBUG
-            fprintf(stderr, "Using VESA timings for %dx%d\n",
-                    vinfo->xres, vinfo->yres);
-#endif
-            if (vesa_timings[i].pixclock) {
-                vinfo->pixclock = vesa_timings[i].pixclock;
-            }
-            vinfo->left_margin = vesa_timings[i].left;
-            vinfo->right_margin = vesa_timings[i].right;
-            vinfo->upper_margin = vesa_timings[i].upper;
-            vinfo->lower_margin = vesa_timings[i].lower;
-            vinfo->hsync_len = vesa_timings[i].hslen;
-            vinfo->vsync_len = vesa_timings[i].vslen;
-            vinfo->sync = vesa_timings[i].sync;
-            vinfo->vmode = vesa_timings[i].vmode;
-            matched = 1;
-            break;
-        }
-    }
-    return (matched);
-}
-
-#ifdef VGA16_FBCON_SUPPORT
-static SDL_Surface *
-FB_SetVGA16Mode(_THIS, SDL_Surface * current,
-                int width, int height, int bpp, Uint32 flags)
-{
-    struct fb_fix_screeninfo finfo;
-    struct fb_var_screeninfo vinfo;
-
-    /* Set the terminal into graphics mode */
-    if (FB_EnterGraphicsMode(this) < 0) {
-        return (NULL);
-    }
-
-    /* Restore the original palette */
-    FB_RestorePalette(this);
-
-    /* Set the video mode and get the final screen format */
-    if (ioctl(console_fd, FBIOGET_VSCREENINFO, &vinfo) < 0) {
-        SDL_SetError("Couldn't get console screen info");
-        return (NULL);
-    }
-    cache_vinfo = vinfo;
-#ifdef FBCON_DEBUG
-    fprintf(stderr, "Printing actual vinfo:\n");
-    print_vinfo(&vinfo);
-#endif
-    if (!SDL_ReallocFormat(current, bpp, 0, 0, 0, 0)) {
-        return (NULL);
-    }
-    current->format->palette->ncolors = 16;
-
-    /* Get the fixed information about the console hardware.
-       This is necessary since finfo.line_length changes.
-     */
-    if (ioctl(console_fd, FBIOGET_FSCREENINFO, &finfo) < 0) {
-        SDL_SetError("Couldn't get console hardware info");
-        return (NULL);
-    }
-#ifdef FBCON_DEBUG
-    fprintf(stderr, "Printing actual finfo:\n");
-    print_finfo(&finfo);
-#endif
-
-    /* Save hardware palette, if needed */
-    FB_SavePalette(this, &finfo, &vinfo);
-
-    /* Set up the new mode framebuffer */
-    current->flags = SDL_FULLSCREEN;
-    current->w = vinfo.xres;
-    current->h = vinfo.yres;
-    current->pitch = current->w;
-    current->pixels = SDL_malloc(current->h * current->pitch);
-
-    /* Set the update rectangle function */
-    this->UpdateRects = FB_VGA16Update;
-
-    /* We're done */
-    return (current);
-}
-#endif /* VGA16_FBCON_SUPPORT */
-
-static SDL_Surface *
-FB_SetVideoMode(_THIS, SDL_Surface * current,
-                int width, int height, int bpp, Uint32 flags)
-{
-    struct fb_fix_screeninfo finfo;
-    struct fb_var_screeninfo vinfo;
-    int i;
-    Uint32 Rmask;
-    Uint32 Gmask;
-    Uint32 Bmask;
-    char *surfaces_mem;
-    int surfaces_len;
-
-    /* Set the terminal into graphics mode */
-    if (FB_EnterGraphicsMode(this) < 0) {
-        return (NULL);
-    }
-
-    /* Restore the original palette */
-    FB_RestorePalette(this);
-
-    /* Set the video mode and get the final screen format */
-    if (ioctl(console_fd, FBIOGET_VSCREENINFO, &vinfo) < 0) {
-        SDL_SetError("Couldn't get console screen info");
-        return (NULL);
-    }
-#ifdef FBCON_DEBUG
-    fprintf(stderr, "Printing original vinfo:\n");
-    print_vinfo(&vinfo);
-#endif
-    if ((vinfo.xres != width) || (vinfo.yres != height) ||
-        (vinfo.bits_per_pixel != bpp) || (flags & SDL_DOUBLEBUF)) {
-        vinfo.activate = FB_ACTIVATE_NOW;
-        vinfo.accel_flags = 0;
-        vinfo.bits_per_pixel = bpp;
-        vinfo.xres = width;
-        vinfo.xres_virtual = width;
-        vinfo.yres = height;
-        if (flags & SDL_DOUBLEBUF) {
-            vinfo.yres_virtual = height * 2;
-        } else {
-            vinfo.yres_virtual = height;
-        }
-        vinfo.xoffset = 0;
-        vinfo.yoffset = 0;
-        vinfo.red.length = vinfo.red.offset = 0;
-        vinfo.green.length = vinfo.green.offset = 0;
-        vinfo.blue.length = vinfo.blue.offset = 0;
-        vinfo.transp.length = vinfo.transp.offset = 0;
-        if (!choose_fbmodes_mode(&vinfo)) {
-            choose_vesa_mode(&vinfo);
-        }
-#ifdef FBCON_DEBUG
-        fprintf(stderr, "Printing wanted vinfo:\n");
-        print_vinfo(&vinfo);
-#endif
-        if (ioctl(console_fd, FBIOPUT_VSCREENINFO, &vinfo) < 0) {
-            vinfo.yres_virtual = height;
-            if (ioctl(console_fd, FBIOPUT_VSCREENINFO, &vinfo) < 0) {
-                SDL_SetError("Couldn't set console screen info");
-                return (NULL);
-            }
-        }
-    } else {
-        int maxheight;
-
-        /* Figure out how much video memory is available */
-        if (flags & SDL_DOUBLEBUF) {
-            maxheight = height * 2;
-        } else {
-            maxheight = height;
-        }
-        if (vinfo.yres_virtual > maxheight) {
-            vinfo.yres_virtual = maxheight;
-        }
-    }
-    cache_vinfo = vinfo;
-#ifdef FBCON_DEBUG
-    fprintf(stderr, "Printing actual vinfo:\n");
-    print_vinfo(&vinfo);
-#endif
-    Rmask = 0;
-    for (i = 0; i < vinfo.red.length; ++i) {
-        Rmask <<= 1;
-        Rmask |= (0x00000001 << vinfo.red.offset);
-    }
-    Gmask = 0;
-    for (i = 0; i < vinfo.green.length; ++i) {
-        Gmask <<= 1;
-        Gmask |= (0x00000001 << vinfo.green.offset);
-    }
-    Bmask = 0;
-    for (i = 0; i < vinfo.blue.length; ++i) {
-        Bmask <<= 1;
-        Bmask |= (0x00000001 << vinfo.blue.offset);
-    }
-    if (!SDL_ReallocFormat(current, vinfo.bits_per_pixel,
-                           Rmask, Gmask, Bmask, 0)) {
-        return (NULL);
-    }
-
-    /* Get the fixed information about the console hardware.
-       This is necessary since finfo.line_length changes.
-     */
-    if (ioctl(console_fd, FBIOGET_FSCREENINFO, &finfo) < 0) {
-        SDL_SetError("Couldn't get console hardware info");
-        return (NULL);
-    }
-
-    /* Save hardware palette, if needed */
-    FB_SavePalette(this, &finfo, &vinfo);
-
-    /* Set up the new mode framebuffer */
-    current->flags = (SDL_FULLSCREEN | SDL_HWSURFACE);
-    current->w = vinfo.xres;
-    current->h = vinfo.yres;
-    current->pitch = finfo.line_length;
-    current->pixels = mapped_mem + mapped_offset;
-
-    /* Set up the information for hardware surfaces */
-    surfaces_mem = (char *) current->pixels +
-        vinfo.yres_virtual * current->pitch;
-    surfaces_len = (mapped_memlen - (surfaces_mem - mapped_mem));
-    FB_FreeHWSurfaces(this);
-    FB_InitHWSurfaces(this, current, surfaces_mem, surfaces_len);
-
-    /* Let the application know we have a hardware palette */
-    switch (finfo.visual) {
-    case FB_VISUAL_PSEUDOCOLOR:
-        current->flags |= SDL_HWPALETTE;
-        break;
-    default:
-        break;
-    }
-
-    /* Update for double-buffering, if we can */
-    if (flags & SDL_DOUBLEBUF) {
-        if (vinfo.yres_virtual == (height * 2)) {
-            current->flags |= SDL_DOUBLEBUF;
-            flip_page = 0;
-            flip_address[0] = (char *) current->pixels;
-            flip_address[1] = (char *) current->pixels +
-                current->h * current->pitch;
-            this->screen = current;
-            FB_FlipHWSurface(this, current);
-            this->screen = NULL;
-        }
-    }
-
-    /* Set the update rectangle function */
-    this->UpdateRects = FB_DirectUpdate;
-
-    /* We're done */
-    return (current);
-}
-
-#ifdef FBCON_DEBUG
-void
-FB_DumpHWSurfaces(_THIS)
-{
-    vidmem_bucket *bucket;
-
-    printf("Memory left: %d (%d total)\n", surfaces_memleft,
-           surfaces_memtotal);
-    printf("\n");
-    printf("         Base  Size\n");
-    for (bucket = &surfaces; bucket; bucket = bucket->next) {
-        printf("Bucket:  %p, %d (%s)\n", bucket->base, bucket->size,
-               bucket->used ? "used" : "free");
-        if (bucket->prev) {
-            if (bucket->base != bucket->prev->base + bucket->prev->size) {
-                printf("Warning, corrupt bucket list! (prev)\n");
-            }
-        } else {
-            if (bucket != &surfaces) {
-                printf("Warning, corrupt bucket list! (!prev)\n");
-            }
-        }
-        if (bucket->next) {
-            if (bucket->next->base != bucket->base + bucket->size) {
-                printf("Warning, corrupt bucket list! (next)\n");
-            }
-        }
-    }
-    printf("\n");
-}
-#endif
-
-static int
-FB_InitHWSurfaces(_THIS, SDL_Surface * screen, char *base, int size)
-{
-    vidmem_bucket *bucket;
-
-    surfaces_memtotal = size;
-    surfaces_memleft = size;
-
-    if (surfaces_memleft > 0) {
-        bucket = (vidmem_bucket *) SDL_malloc(sizeof(*bucket));
-        if (bucket == NULL) {
-            SDL_OutOfMemory();
-            return (-1);
-        }
-        bucket->prev = &surfaces;
-        bucket->used = 0;
-        bucket->dirty = 0;
-        bucket->base = base;
-        bucket->size = size;
-        bucket->next = NULL;
-    } else {
-        bucket = NULL;
-    }
-
-    surfaces.prev = NULL;
-    surfaces.used = 1;
-    surfaces.dirty = 0;
-    surfaces.base = screen->pixels;
-    surfaces.size = (unsigned int) ((long) base - (long) surfaces.base);
-    surfaces.next = bucket;
-    screen->hwdata = (struct private_hwdata *) &surfaces;
-    return (0);
-}
-
-static void
-FB_FreeHWSurfaces(_THIS)
-{
-    vidmem_bucket *bucket, *freeable;
-
-    bucket = surfaces.next;
-    while (bucket) {
-        freeable = bucket;
-        bucket = bucket->next;
-        SDL_free(freeable);
-    }
-    surfaces.next = NULL;
-}
-
-static int
-FB_AllocHWSurface(_THIS, SDL_Surface * surface)
-{
-    vidmem_bucket *bucket;
-    int size;
-    int extra;
-
-/* Temporarily, we only allow surfaces the same width as display.
-   Some blitters require the pitch between two hardware surfaces
-   to be the same.  Others have interesting alignment restrictions.
-   Until someone who knows these details looks at the code...
-*/
-    if (surface->pitch > SDL_VideoSurface->pitch) {
-        SDL_SetError("Surface requested wider than screen");
-        return (-1);
-    }
-    surface->pitch = SDL_VideoSurface->pitch;
-    size = surface->h * surface->pitch;
-#ifdef FBCON_DEBUG
-    fprintf(stderr, "Allocating bucket of %d bytes\n", size);
-#endif
-
-    /* Quick check for available mem */
-    if (size > surfaces_memleft) {
-        SDL_SetError("Not enough video memory");
-        return (-1);
-    }
-
-    /* Search for an empty bucket big enough */
-    for (bucket = &surfaces; bucket; bucket = bucket->next) {
-        if (!bucket->used && (size <= bucket->size)) {
-            break;
-        }
-    }
-    if (bucket == NULL) {
-        SDL_SetError("Video memory too fragmented");
-        return (-1);
-    }
-
-    /* Create a new bucket for left-over memory */
-    extra = (bucket->size - size);
-    if (extra) {
-        vidmem_bucket *newbucket;
-
-#ifdef FBCON_DEBUG
-        fprintf(stderr, "Adding new free bucket of %d bytes\n", extra);
-#endif
-        newbucket = (vidmem_bucket *) SDL_malloc(sizeof(*newbucket));
-        if (newbucket == NULL) {
-            SDL_OutOfMemory();
-            return (-1);
-        }
-        newbucket->prev = bucket;
-        newbucket->used = 0;
-        newbucket->base = bucket->base + size;
-        newbucket->size = extra;
-        newbucket->next = bucket->next;
-        if (bucket->next) {
-            bucket->next->prev = newbucket;
-        }
-        bucket->next = newbucket;
-    }
-
-    /* Set the current bucket values and return it! */
-    bucket->used = 1;
-    bucket->size = size;
-    bucket->dirty = 0;
-#ifdef FBCON_DEBUG
-    fprintf(stderr, "Allocated %d bytes at %p\n", bucket->size, bucket->base);
-#endif
-    surfaces_memleft -= size;
-    surface->flags |= SDL_HWSURFACE;
-    surface->pixels = bucket->base;
-    surface->hwdata = (struct private_hwdata *) bucket;
-    return (0);
-}
-
-static void
-FB_FreeHWSurface(_THIS, SDL_Surface * surface)
-{
-    vidmem_bucket *bucket, *freeable;
-
-    /* Look for the bucket in the current list */
-    for (bucket = &surfaces; bucket; bucket = bucket->next) {
-        if (bucket == (vidmem_bucket *) surface->hwdata) {
-            break;
-        }
-    }
-    if (bucket && bucket->used) {
-        /* Add the memory back to the total */
-#ifdef DGA_DEBUG
-        printf("Freeing bucket of %d bytes\n", bucket->size);
-#endif
-        surfaces_memleft += bucket->size;
-
-        /* Can we merge the space with surrounding buckets? */
-        bucket->used = 0;
-        if (bucket->next && !bucket->next->used) {
-#ifdef DGA_DEBUG
-            printf("Merging with next bucket, for %d total bytes\n",
-                   bucket->size + bucket->next->size);
-#endif
-            freeable = bucket->next;
-            bucket->size += bucket->next->size;
-            bucket->next = bucket->next->next;
-            if (bucket->next) {
-                bucket->next->prev = bucket;
-            }
-            SDL_free(freeable);
-        }
-        if (bucket->prev && !bucket->prev->used) {
-#ifdef DGA_DEBUG
-            printf("Merging with previous bucket, for %d total bytes\n",
-                   bucket->prev->size + bucket->size);
-#endif
-            freeable = bucket;
-            bucket->prev->size += bucket->size;
-            bucket->prev->next = bucket->next;
-            if (bucket->next) {
-                bucket->next->prev = bucket->prev;
-            }
-            SDL_free(freeable);
-        }
-    }
-    surface->pixels = NULL;
-    surface->hwdata = NULL;
-}
-
-static int
-FB_LockHWSurface(_THIS, SDL_Surface * surface)
-{
-    if (switched_away) {
-        return -2;              /* no hardware access */
-    }
-    if (surface == this->screen) {
-        SDL_mutexP(hw_lock);
-        if (FB_IsSurfaceBusy(surface)) {
-            FB_WaitBusySurfaces(this);
-        }
-    } else {
-        if (FB_IsSurfaceBusy(surface)) {
-            FB_WaitBusySurfaces(this);
-        }
-    }
-    return (0);
-}
-
-static void
-FB_UnlockHWSurface(_THIS, SDL_Surface * surface)
-{
-    if (surface == this->screen) {
-        SDL_mutexV(hw_lock);
-    }
-}
-
-static void
-FB_WaitVBL(_THIS)
-{
-#ifdef FBIOWAITRETRACE          /* Heheh, this didn't make it into the main kernel */
-    ioctl(console_fd, FBIOWAITRETRACE, 0);
-#endif
-    return;
-}
-
-static void
-FB_WaitIdle(_THIS)
-{
-    return;
-}
-
-static int
-FB_FlipHWSurface(_THIS, SDL_Surface * surface)
-{
-    if (switched_away) {
-        return -2;              /* no hardware access */
-    }
-
-    /* Wait for vertical retrace and then flip display */
-    cache_vinfo.yoffset = flip_page * surface->h;
-    if (FB_IsSurfaceBusy(this->screen)) {
-        FB_WaitBusySurfaces(this);
-    }
-    wait_vbl(this);
-    if (ioctl(console_fd, FBIOPAN_DISPLAY, &cache_vinfo) < 0) {
-        SDL_SetError("ioctl(FBIOPAN_DISPLAY) failed");
-        return (-1);
-    }
-    flip_page = !flip_page;
-
-    surface->pixels = flip_address[flip_page];
-    return (0);
-}
-
-static void
-FB_DirectUpdate(_THIS, int numrects, SDL_Rect * rects)
-{
-    /* The application is already updating the visible video memory */
-    return;
-}
-
-#ifdef VGA16_FBCON_SUPPORT
-/* Code adapted with thanks from the XFree86 VGA16 driver! :) */
-#define writeGr(index, value) \
-outb(index, 0x3CE);           \
-outb(value, 0x3CF);
-#define writeSeq(index, value) \
-outb(index, 0x3C4);            \
-outb(value, 0x3C5);
-
-static void
-FB_VGA16Update(_THIS, int numrects, SDL_Rect * rects)
-{
-    SDL_Surface *screen;
-    int width, height, FBPitch, left, i, j, SRCPitch, phase;
-    register Uint32 m;
-    Uint8 s1, s2, s3, s4;
-    Uint32 *src, *srcPtr;
-    Uint8 *dst, *dstPtr;
-
-    if (switched_away) {
-        return;                 /* no hardware access */
-    }
-
-    screen = this->screen;
-    FBPitch = screen->w >> 3;
-    SRCPitch = screen->pitch >> 2;
-
-    writeGr(0x03, 0x00);
-    writeGr(0x05, 0x00);
-    writeGr(0x01, 0x00);
-    writeGr(0x08, 0xFF);
-
-    while (numrects--) {
-        left = rects->x & ~7;
-        width = (rects->w + 7) >> 3;
-        height = rects->h;
-        src = (Uint32 *) screen->pixels + (rects->y * SRCPitch) + (left >> 2);
-        dst = (Uint8 *) mapped_mem + (rects->y * FBPitch) + (left >> 3);
-
-        if ((phase = (long) dst & 3L)) {
-            phase = 4 - phase;
-            if (phase > width)
-                phase = width;
-            width -= phase;
-        }
-
-        while (height--) {
-            writeSeq(0x02, 1 << 0);
-            dstPtr = dst;
-            srcPtr = src;
-            i = width;
-            j = phase;
-            while (j--) {
-                m = (srcPtr[1] & 0x01010101) | ((srcPtr[0] & 0x01010101)
-                                                << 4);
-                *dstPtr++ = (m >> 24) | (m >> 15) | (m >> 6) | (m << 3);
-                srcPtr += 2;
-            }
-            while (i >= 4) {
-                m = (srcPtr[1] & 0x01010101) | ((srcPtr[0] & 0x01010101)
-                                                << 4);
-                s1 = (m >> 24) | (m >> 15) | (m >> 6) | (m << 3);
-                m = (srcPtr[3] & 0x01010101) | ((srcPtr[2] & 0x01010101)
-                                                << 4);
-                s2 = (m >> 24) | (m >> 15) | (m >> 6) | (m << 3);
-                m = (srcPtr[5] & 0x01010101) | ((srcPtr[4] & 0x01010101)
-                                                << 4);
-                s3 = (m >> 24) | (m >> 15) | (m >> 6) | (m << 3);
-                m = (srcPtr[7] & 0x01010101) | ((srcPtr[6] & 0x01010101)
-                                                << 4);
-                s4 = (m >> 24) | (m >> 15) | (m >> 6) | (m << 3);
-                *((Uint32 *) dstPtr) =
-                    s1 | (s2 << 8) | (s3 << 16) | (s4 << 24);
-                srcPtr += 8;
-                dstPtr += 4;
-                i -= 4;
-            }
-            while (i--) {
-                m = (srcPtr[1] & 0x01010101) | ((srcPtr[0] & 0x01010101)
-                                                << 4);
-                *dstPtr++ = (m >> 24) | (m >> 15) | (m >> 6) | (m << 3);
-                srcPtr += 2;
-            }
-
-            writeSeq(0x02, 1 << 1);
-            dstPtr = dst;
-            srcPtr = src;
-            i = width;
-            j = phase;
-            while (j--) {
-                m = (srcPtr[1] & 0x02020202) | ((srcPtr[0] & 0x02020202)
-                                                << 4);
-                *dstPtr++ = (m >> 25) | (m >> 16) | (m >> 7) | (m << 2);
-                srcPtr += 2;
-            }
-            while (i >= 4) {
-                m = (srcPtr[1] & 0x02020202) | ((srcPtr[0] & 0x02020202)
-                                                << 4);
-                s1 = (m >> 25) | (m >> 16) | (m >> 7) | (m << 2);
-                m = (srcPtr[3] & 0x02020202) | ((srcPtr[2] & 0x02020202)
-                                                << 4);
-                s2 = (m >> 25) | (m >> 16) | (m >> 7) | (m << 2);
-                m = (srcPtr[5] & 0x02020202) | ((srcPtr[4] & 0x02020202)
-                                                << 4);
-                s3 = (m >> 25) | (m >> 16) | (m >> 7) | (m << 2);
-                m = (srcPtr[7] & 0x02020202) | ((srcPtr[6] & 0x02020202)
-                                                << 4);
-                s4 = (m >> 25) | (m >> 16) | (m >> 7) | (m << 2);
-                *((Uint32 *) dstPtr) =
-                    s1 | (s2 << 8) | (s3 << 16) | (s4 << 24);
-                srcPtr += 8;
-                dstPtr += 4;
-                i -= 4;
-            }
-            while (i--) {
-                m = (srcPtr[1] & 0x02020202) | ((srcPtr[0] & 0x02020202)
-                                                << 4);
-                *dstPtr++ = (m >> 25) | (m >> 16) | (m >> 7) | (m << 2);
-                srcPtr += 2;
-            }
-
-            writeSeq(0x02, 1 << 2);
-            dstPtr = dst;
-            srcPtr = src;
-            i = width;
-            j = phase;
-            while (j--) {
-                m = (srcPtr[1] & 0x04040404) | ((srcPtr[0] & 0x04040404)
-                                                << 4);
-                *dstPtr++ = (m >> 26) | (m >> 17) | (m >> 8) | (m << 1);
-                srcPtr += 2;
-            }
-            while (i >= 4) {
-                m = (srcPtr[1] & 0x04040404) | ((srcPtr[0] & 0x04040404)
-                                                << 4);
-                s1 = (m >> 26) | (m >> 17) | (m >> 8) | (m << 1);
-                m = (srcPtr[3] & 0x04040404) | ((srcPtr[2] & 0x04040404)
-                                                << 4);
-                s2 = (m >> 26) | (m >> 17) | (m >> 8) | (m << 1);
-                m = (srcPtr[5] & 0x04040404) | ((srcPtr[4] & 0x04040404)
-                                                << 4);
-                s3 = (m >> 26) | (m >> 17) | (m >> 8) | (m << 1);
-                m = (srcPtr[7] & 0x04040404) | ((srcPtr[6] & 0x04040404)
-                                                << 4);
-                s4 = (m >> 26) | (m >> 17) | (m >> 8) | (m << 1);
-                *((Uint32 *) dstPtr) =
-                    s1 | (s2 << 8) | (s3 << 16) | (s4 << 24);
-                srcPtr += 8;
-                dstPtr += 4;
-                i -= 4;
-            }
-            while (i--) {
-                m = (srcPtr[1] & 0x04040404) | ((srcPtr[0] & 0x04040404)
-                                                << 4);
-                *dstPtr++ = (m >> 26) | (m >> 17) | (m >> 8) | (m << 1);
-                srcPtr += 2;
-            }
-
-            writeSeq(0x02, 1 << 3);
-            dstPtr = dst;
-            srcPtr = src;
-            i = width;
-            j = phase;
-            while (j--) {
-                m = (srcPtr[1] & 0x08080808) | ((srcPtr[0] & 0x08080808)
-                                                << 4);
-                *dstPtr++ = (m >> 27) | (m >> 18) | (m >> 9) | m;
-                srcPtr += 2;
-            }
-            while (i >= 4) {
-                m = (srcPtr[1] & 0x08080808) | ((srcPtr[0] & 0x08080808)
-                                                << 4);
-                s1 = (m >> 27) | (m >> 18) | (m >> 9) | m;
-                m = (srcPtr[3] & 0x08080808) | ((srcPtr[2] & 0x08080808)
-                                                << 4);
-                s2 = (m >> 27) | (m >> 18) | (m >> 9) | m;
-                m = (srcPtr[5] & 0x08080808) | ((srcPtr[4] & 0x08080808)
-                                                << 4);
-                s3 = (m >> 27) | (m >> 18) | (m >> 9) | m;
-                m = (srcPtr[7] & 0x08080808) | ((srcPtr[6] & 0x08080808)
-                                                << 4);
-                s4 = (m >> 27) | (m >> 18) | (m >> 9) | m;
-                *((Uint32 *) dstPtr) =
-                    s1 | (s2 << 8) | (s3 << 16) | (s4 << 24);
-                srcPtr += 8;
-                dstPtr += 4;
-                i -= 4;
-            }
-            while (i--) {
-                m = (srcPtr[1] & 0x08080808) | ((srcPtr[0] & 0x08080808)
-                                                << 4);
-                *dstPtr++ = (m >> 27) | (m >> 18) | (m >> 9) | m;
-                srcPtr += 2;
-            }
-
-            dst += FBPitch;
-            src += SRCPitch;
-        }
-        rects++;
-    }
-}
-#endif /* VGA16_FBCON_SUPPORT */
-
-void
-FB_SavePaletteTo(_THIS, int palette_len, __u16 * area)
-{
-    struct fb_cmap cmap;
-
-    cmap.start = 0;
-    cmap.len = palette_len;
-    cmap.red = &area[0 * palette_len];
-    cmap.green = &area[1 * palette_len];
-    cmap.blue = &area[2 * palette_len];
-    cmap.transp = NULL;
-    ioctl(console_fd, FBIOGETCMAP, &cmap);
-}
-
-void
-FB_RestorePaletteFrom(_THIS, int palette_len, __u16 * area)
-{
-    struct fb_cmap cmap;
-
-    cmap.start = 0;
-    cmap.len = palette_len;
-    cmap.red = &area[0 * palette_len];
-    cmap.green = &area[1 * palette_len];
-    cmap.blue = &area[2 * palette_len];
-    cmap.transp = NULL;
-    ioctl(console_fd, FBIOPUTCMAP, &cmap);
-}
-
-static void
-FB_SavePalette(_THIS, struct fb_fix_screeninfo *finfo,
-               struct fb_var_screeninfo *vinfo)
-{
-    int i;
-
-    /* Save hardware palette, if needed */
-    if (finfo->visual == FB_VISUAL_PSEUDOCOLOR) {
-        saved_cmaplen = 1 << vinfo->bits_per_pixel;
-        saved_cmap =
-            (__u16 *) SDL_malloc(3 * saved_cmaplen * sizeof(*saved_cmap));
-        if (saved_cmap != NULL) {
-            FB_SavePaletteTo(this, saved_cmaplen, saved_cmap);
-        }
-    }
-
-    /* Added support for FB_VISUAL_DIRECTCOLOR.
-       With this mode pixel information is passed through the palette...
-       Neat fading and gamma correction effects can be had by simply
-       fooling around with the palette instead of changing the pixel
-       values themselves... Very neat!
-
-       Adam Meyerowitz 1/19/2000
-       ameyerow@optonline.com
-     */
-    if (finfo->visual == FB_VISUAL_DIRECTCOLOR) {
-        __u16 new_entries[3 * 256];
-
-        /* Save the colormap */
-        saved_cmaplen = 256;
-        saved_cmap =
-            (__u16 *) SDL_malloc(3 * saved_cmaplen * sizeof(*saved_cmap));
-        if (saved_cmap != NULL) {
-            FB_SavePaletteTo(this, saved_cmaplen, saved_cmap);
-        }
-
-        /* Allocate new identity colormap */
-        for (i = 0; i < 256; ++i) {
-            new_entries[(0 * 256) + i] =
-                new_entries[(1 * 256) + i] =
-                new_entries[(2 * 256) + i] = (i << 8) | i;
-        }
-        FB_RestorePaletteFrom(this, 256, new_entries);
-    }
-}
-
-static void
-FB_RestorePalette(_THIS)
-{
-    /* Restore the original palette */
-    if (saved_cmap) {
-        FB_RestorePaletteFrom(this, saved_cmaplen, saved_cmap);
-        SDL_free(saved_cmap);
-        saved_cmap = NULL;
-    }
-}
-
-static int
-FB_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color * colors)
-{
-    int i;
-    __u16 r[256];
-    __u16 g[256];
-    __u16 b[256];
-    struct fb_cmap cmap;
-
-    /* Set up the colormap */
-    for (i = 0; i < ncolors; i++) {
-        r[i] = colors[i].r << 8;
-        g[i] = colors[i].g << 8;
-        b[i] = colors[i].b << 8;
-    }
-    cmap.start = firstcolor;
-    cmap.len = ncolors;
-    cmap.red = r;
-    cmap.green = g;
-    cmap.blue = b;
-    cmap.transp = NULL;
-
-    if ((ioctl(console_fd, FBIOPUTCMAP, &cmap) < 0) ||
-        !(this->screen->flags & SDL_HWPALETTE)) {
-        colors = this->screen->format->palette->colors;
-        ncolors = this->screen->format->palette->ncolors;
-        cmap.start = 0;
-        cmap.len = ncolors;
-        SDL_memset(r, 0, sizeof(r));
-        SDL_memset(g, 0, sizeof(g));
-        SDL_memset(b, 0, sizeof(b));
-        if (ioctl(console_fd, FBIOGETCMAP, &cmap) == 0) {
-            for (i = ncolors - 1; i >= 0; --i) {
-                colors[i].r = (r[i] >> 8);
-                colors[i].g = (g[i] >> 8);
-                colors[i].b = (b[i] >> 8);
-            }
-        }
-        return (0);
-    }
-    return (1);
-}
-
-/* Note:  If we are terminated, this could be called in the middle of
-   another SDL video routine -- notably UpdateRects.
-*/
-static void
-FB_VideoQuit(_THIS)
-{
-    int i, j;
-
-    if (this->screen) {
-        /* Clear screen and tell SDL not to free the pixels */
-        if (this->screen->pixels && FB_InGraphicsMode(this)) {
-#if defined(__powerpc__) || defined(__ia64__)   /* SIGBUS when using SDL_memset() ?? */
-            Uint8 *rowp = (Uint8 *) this->screen->pixels;
-            int left = this->screen->pitch * this->screen->h;
-            while (left--) {
-                *rowp++ = 0;
-            }
-#else
-            SDL_memset(this->screen->pixels, 0,
-                       this->screen->h * this->screen->pitch);
-#endif
-        }
-        /* This test fails when using the VGA16 shadow memory */
-        if (((char *) this->screen->pixels >= mapped_mem) &&
-            ((char *) this->screen->pixels < (mapped_mem + mapped_memlen))) {
-            this->screen->pixels = NULL;
-        }
-    }
-
-    /* Clear the lock mutex */
-    if (hw_lock) {
-        SDL_DestroyMutex(hw_lock);
-        hw_lock = NULL;
-    }
-
-    /* Clean up defined video modes */
-    for (i = 0; i < NUM_MODELISTS; ++i) {
-        if (SDL_modelist[i] != NULL) {
-            for (j = 0; SDL_modelist[i][j]; ++j) {
-                SDL_free(SDL_modelist[i][j]);
-            }
-            SDL_free(SDL_modelist[i]);
-            SDL_modelist[i] = NULL;
-        }
-    }
-
-    /* Clean up the memory bucket list */
-    FB_FreeHWSurfaces(this);
-
-    /* Close console and input file descriptors */
-    if (console_fd > 0) {
-        /* Unmap the video framebuffer and I/O registers */
-        if (mapped_mem) {
-            munmap(mapped_mem, mapped_memlen);
-            mapped_mem = NULL;
-        }
-        if (mapped_io) {
-            munmap(mapped_io, mapped_iolen);
-            mapped_io = NULL;
-        }
-
-        /* Restore the original video mode and palette */
-        if (FB_InGraphicsMode(this)) {
-            FB_RestorePalette(this);
-            ioctl(console_fd, FBIOPUT_VSCREENINFO, &saved_vinfo);
-        }
-
-        /* We're all done with the framebuffer */
-        close(console_fd);
-        console_fd = -1;
-    }
-    FB_CloseMouse(this);
-    FB_CloseKeyboard(this);
-}
-
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/SDL_fbvideo.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,189 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#ifndef _SDL_fbvideo_h
-#define _SDL_fbvideo_h
-
-#include <sys/types.h>
-#include <termios.h>
-#include <linux/fb.h>
-
-#include "SDL_mouse.h"
-#include "SDL_mutex.h"
-#include "../SDL_sysvideo.h"
-#if SDL_INPUT_TSLIB
-#include "tslib.h"
-#endif
-
-/* Hidden "this" pointer for the video functions */
-#define _THIS	SDL_VideoDevice *this
-
-
-/* This is the structure we use to keep track of video memory */
-typedef struct vidmem_bucket
-{
-    struct vidmem_bucket *prev;
-    int used;
-    int dirty;
-    char *base;
-    unsigned int size;
-    struct vidmem_bucket *next;
-} vidmem_bucket;
-
-/* Private display data */
-struct SDL_PrivateVideoData
-{
-    int console_fd;
-    struct fb_var_screeninfo cache_vinfo;
-    struct fb_var_screeninfo saved_vinfo;
-    int saved_cmaplen;
-    __u16 *saved_cmap;
-
-    int current_vt;
-    int saved_vt;
-    int keyboard_fd;
-    int saved_kbd_mode;
-    struct termios saved_kbd_termios;
-
-    int mouse_fd;
-#if SDL_INPUT_TSLIB
-    struct tsdev *ts_dev;
-#endif
-
-    char *mapped_mem;
-    int mapped_memlen;
-    int mapped_offset;
-    char *mapped_io;
-    long mapped_iolen;
-    int flip_page;
-    char *flip_address[2];
-
-#define NUM_MODELISTS	4       /* 8, 16, 24, and 32 bits-per-pixel */
-    int SDL_nummodes[NUM_MODELISTS];
-    SDL_Rect **SDL_modelist[NUM_MODELISTS];
-
-    vidmem_bucket surfaces;
-    int surfaces_memtotal;
-    int surfaces_memleft;
-
-    SDL_mutex *hw_lock;
-    int switched_away;
-    struct fb_var_screeninfo screen_vinfo;
-    Uint32 screen_arealen;
-    Uint8 *screen_contents;
-    __u16 screen_palette[3 * 256];
-
-    void (*wait_vbl) (_THIS);
-    void (*wait_idle) (_THIS);
-};
-/* Old variable names */
-#define console_fd		(this->hidden->console_fd)
-#define current_vt		(this->hidden->current_vt)
-#define saved_vt		(this->hidden->saved_vt)
-#define keyboard_fd		(this->hidden->keyboard_fd)
-#define saved_kbd_mode		(this->hidden->saved_kbd_mode)
-#define saved_kbd_termios	(this->hidden->saved_kbd_termios)
-#define mouse_fd		(this->hidden->mouse_fd)
-#if SDL_INPUT_TSLIB
-#define ts_dev			(this->hidden->ts_dev)
-#endif
-#define cache_vinfo		(this->hidden->cache_vinfo)
-#define saved_vinfo		(this->hidden->saved_vinfo)
-#define saved_cmaplen		(this->hidden->saved_cmaplen)
-#define saved_cmap		(this->hidden->saved_cmap)
-#define mapped_mem		(this->hidden->mapped_mem)
-#define mapped_memlen		(this->hidden->mapped_memlen)
-#define mapped_offset		(this->hidden->mapped_offset)
-#define mapped_io		(this->hidden->mapped_io)
-#define mapped_iolen		(this->hidden->mapped_iolen)
-#define flip_page		(this->hidden->flip_page)
-#define flip_address		(this->hidden->flip_address)
-#define SDL_nummodes		(this->hidden->SDL_nummodes)
-#define SDL_modelist		(this->hidden->SDL_modelist)
-#define surfaces		(this->hidden->surfaces)
-#define surfaces_memtotal	(this->hidden->surfaces_memtotal)
-#define surfaces_memleft	(this->hidden->surfaces_memleft)
-#define hw_lock			(this->hidden->hw_lock)
-#define switched_away		(this->hidden->switched_away)
-#define screen_vinfo		(this->hidden->screen_vinfo)
-#define screen_arealen		(this->hidden->screen_arealen)
-#define screen_contents		(this->hidden->screen_contents)
-#define screen_palette		(this->hidden->screen_palette)
-#define wait_vbl		(this->hidden->wait_vbl)
-#define wait_idle		(this->hidden->wait_idle)
-
-/* Accelerator types that are supported by the driver, but are not
-   necessarily in the kernel headers on the system we compile on.
-*/
-#ifndef FB_ACCEL_MATROX_MGAG400
-#define FB_ACCEL_MATROX_MGAG400	26      /* Matrox G400                  */
-#endif
-#ifndef FB_ACCEL_3DFX_BANSHEE
-#define FB_ACCEL_3DFX_BANSHEE	31      /* 3Dfx Banshee                 */
-#endif
-
-/* These functions are defined in SDL_fbvideo.c */
-extern void FB_SavePaletteTo(_THIS, int palette_len, __u16 * area);
-extern void FB_RestorePaletteFrom(_THIS, int palette_len, __u16 * area);
-
-/* These are utility functions for working with video surfaces */
-
-static __inline__ void
-FB_AddBusySurface(SDL_Surface * surface)
-{
-    ((vidmem_bucket *) surface->hwdata)->dirty = 1;
-}
-
-static __inline__ int
-FB_IsSurfaceBusy(SDL_Surface * surface)
-{
-    return ((vidmem_bucket *) surface->hwdata)->dirty;
-}
-
-static __inline__ void
-FB_WaitBusySurfaces(_THIS)
-{
-    vidmem_bucket *bucket;
-
-    /* Wait for graphic operations to complete */
-    wait_idle(this);
-
-    /* Clear all surface dirty bits */
-    for (bucket = &surfaces; bucket; bucket = bucket->next) {
-        bucket->dirty = 0;
-    }
-}
-
-static __inline__ void
-FB_dst_to_xy(_THIS, SDL_Surface * dst, int *x, int *y)
-{
-    *x = (long) ((char *) dst->pixels - mapped_mem) % this->screen->pitch;
-    *y = (long) ((char *) dst->pixels - mapped_mem) / this->screen->pitch;
-    if (dst == this->screen) {
-        *x += this->offset_x;
-        *y += this->offset_y;
-    }
-}
-
-#endif /* _SDL_fbvideo_h */
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/matrox_mmio.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-/* MGA register definitions */
-
-#include "matrox_regs.h"
-
-/* MGA control macros */
-
-#define mga_in8(reg)		*(volatile Uint8  *)(mapped_io + (reg))
-#define mga_in32(reg)		*(volatile Uint32 *)(mapped_io + (reg))
-
-#define mga_out8(reg,v)		*(volatile Uint8  *)(mapped_io + (reg)) = v;
-#define mga_out32(reg,v)	*(volatile Uint32 *)(mapped_io + (reg)) = v;
-
-
-/* Wait for fifo space */
-#define mga_wait(space)							\
-{									\
-	while ( mga_in8(MGAREG_FIFOSTATUS) < space )			\
-		;							\
-}
-
-
-/* Wait for idle accelerator */
-#define mga_waitidle()							\
-{									\
-	while ( mga_in32(MGAREG_STATUS) & 0x10000 )			\
-		;							\
-}
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/matrox_regs.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,376 +0,0 @@
-
-/*
- * MGA Millennium (MGA2064W) functions
- * MGA Mystique (MGA1064SG) functions
- *
- * Copyright 1996 The XFree86 Project, Inc.
- *
- * Authors
- *		Dirk Hohndel
- *			hohndel@XFree86.Org
- *		David Dawes
- *			dawes@XFree86.Org
- * Contributors:
- *		Guy DESBIEF, Aix-en-provence, France
- *			g.desbief@aix.pacwan.net
- *		MGA1064SG Mystique register file
- */
-
-
-#ifndef _MGA_REG_H_
-#define _MGA_REG_H_
-
-#define	MGAREG_DWGCTL		0x1c00
-#define	MGAREG_MACCESS		0x1c04
-/* the following is a mystique only register */
-#define MGAREG_MCTLWTST		0x1c08
-#define	MGAREG_ZORG		0x1c0c
-
-#define	MGAREG_PAT0		0x1c10
-#define	MGAREG_PAT1		0x1c14
-#define	MGAREG_PLNWT		0x1c1c
-
-#define	MGAREG_BCOL		0x1c20
-#define	MGAREG_FCOL		0x1c24
-
-#define	MGAREG_SRC0		0x1c30
-#define	MGAREG_SRC1		0x1c34
-#define	MGAREG_SRC2		0x1c38
-#define	MGAREG_SRC3		0x1c3c
-
-#define	MGAREG_XYSTRT		0x1c40
-#define	MGAREG_XYEND		0x1c44
-
-#define	MGAREG_SHIFT		0x1c50
-/* the following is a mystique only register */
-#define MGAREG_DMAPAD		0x1c54
-#define	MGAREG_SGN		0x1c58
-#define	MGAREG_LEN		0x1c5c
-
-#define	MGAREG_AR0		0x1c60
-#define	MGAREG_AR1		0x1c64
-#define	MGAREG_AR2		0x1c68
-#define	MGAREG_AR3		0x1c6c
-#define	MGAREG_AR4		0x1c70
-#define	MGAREG_AR5		0x1c74
-#define	MGAREG_AR6		0x1c78
-
-#define	MGAREG_CXBNDRY		0x1c80
-#define	MGAREG_FXBNDRY		0x1c84
-#define	MGAREG_YDSTLEN		0x1c88
-#define	MGAREG_PITCH		0x1c8c
-
-#define	MGAREG_YDST		0x1c90
-#define	MGAREG_YDSTORG		0x1c94
-#define	MGAREG_YTOP		0x1c98
-#define	MGAREG_YBOT		0x1c9c
-
-#define	MGAREG_CXLEFT		0x1ca0
-#define	MGAREG_CXRIGHT		0x1ca4
-#define	MGAREG_FXLEFT		0x1ca8
-#define	MGAREG_FXRIGHT		0x1cac
-
-#define	MGAREG_XDST		0x1cb0
-
-#define	MGAREG_DR0		0x1cc0
-#define	MGAREG_DR1		0x1cc4
-#define	MGAREG_DR2		0x1cc8
-#define	MGAREG_DR3		0x1ccc
-
-#define	MGAREG_DR4		0x1cd0
-#define	MGAREG_DR5		0x1cd4
-#define	MGAREG_DR6		0x1cd8
-#define	MGAREG_DR7		0x1cdc
-
-#define	MGAREG_DR8		0x1ce0
-#define	MGAREG_DR9		0x1ce4
-#define	MGAREG_DR10		0x1ce8
-#define	MGAREG_DR11		0x1cec
-
-#define	MGAREG_DR12		0x1cf0
-#define	MGAREG_DR13		0x1cf4
-#define	MGAREG_DR14		0x1cf8
-#define	MGAREG_DR15		0x1cfc
-
-#define MGAREG_SRCORG		0x2cb4
-#define MGAREG_DSTORG		0x2cb8
-
-/* add or or this to one of the previous "power registers" to start
-   the drawing engine */
-
-#define MGAREG_EXEC		0x0100
-
-#define	MGAREG_FIFOSTATUS	0x1e10
-#define	MGAREG_STATUS		0x1e14
-#define	MGAREG_ICLEAR		0x1e18
-#define	MGAREG_IEN		0x1e1c
-
-#define	MGAREG_VCOUNT		0x1e20
-
-#define	MGAREG_Reset		0x1e40
-
-#define	MGAREG_OPMODE		0x1e54
-
-/* OPMODE register additives */
-
-#define MGAOPM_DMA_GENERAL	(0x00 << 2)
-#define MGAOPM_DMA_BLIT		(0x01 << 2)
-#define MGAOPM_DMA_VECTOR	(0x10 << 2)
-
-/* DWGCTL register additives */
-
-/* Lines */
-
-#define MGADWG_LINE_OPEN	0x00
-#define MGADWG_AUTOLINE_OPEN	0x01
-#define MGADWG_LINE_CLOSE	0x02
-#define MGADWG_AUTOLINE_CLOSE	0x03
-
-/* Trapezoids */
-#define MGADWG_TRAP		0x04
-#define MGADWG_TEXTURE_TRAP	0x05
-
-/* BitBlts */
-
-#define MGADWG_BITBLT		0x08
-#define MGADWG_FBITBLT		0x0c
-#define MGADWG_ILOAD		0x09
-#define MGADWG_ILOAD_SCALE	0x0d
-#define MGADWG_ILOAD_FILTER	0x0f
-#define MGADWG_IDUMP		0x0a
-
-/* atype access to WRAM */
-
-#define MGADWG_RPL		( 0x00 << 4 )
-#define MGADWG_RSTR		( 0x01 << 4 )
-#define MGADWG_ZI		( 0x03 << 4 )
-#define MGADWG_BLK 		( 0x04 << 4 )
-#define MGADWG_I		( 0x07 << 4 )
-
-/* specifies whether bit blits are linear or xy */
-#define MGADWG_LINEAR		( 0x01 << 7 )
-
-/* z drawing mode. use MGADWG_NOZCMP for always */
-
-#define MGADWG_NOZCMP		( 0x00 << 8 )
-#define MGADWG_ZE		( 0x02 << 8 )
-#define MGADWG_ZNE		( 0x03 << 8 )
-#define MGADWG_ZLT		( 0x04 << 8 )
-#define MGADWG_ZLTE		( 0x05 << 8 )
-#define MGADWG_GT		( 0x06 << 8 )
-#define MGADWG_GTE		( 0x07 << 8 )
-
-/* use this to force colour expansion circuitry to do its stuff */
-
-#define MGADWG_SOLID		( 0x01 << 11 )
-
-/* ar register at zero */
-
-#define MGADWG_ARZERO		( 0x01 << 12 )
-
-#define MGADWG_SGNZERO		( 0x01 << 13 )
-
-#define MGADWG_SHIFTZERO	( 0x01 << 14 )
-
-/* See table on 4-43 for bop ALU operations */
-
-/* See table on 4-44 for translucidity masks */
-
-#define MGADWG_BMONOLEF		( 0x00 << 25 )
-#define MGADWG_BMONOWF		( 0x04 << 25 )
-#define MGADWG_BPLAN		( 0x01 << 25 )
-
-/* note that if bfcol is specified and you're doing a bitblt, it causes
-   a fbitblt to be performed, so check that you obey the fbitblt rules */
-
-#define MGADWG_BFCOL   		( 0x02 << 25 )
-#define MGADWG_BUYUV		( 0x0e << 25 )
-#define MGADWG_BU32BGR		( 0x03 << 25 )
-#define MGADWG_BU32RGB		( 0x07 << 25 )
-#define MGADWG_BU24BGR		( 0x0b << 25 )
-#define MGADWG_BU24RGB		( 0x0f << 25 )
-
-#define MGADWG_REPLACE		0x000C0000      /* From Linux kernel sources */
-#define MGADWG_PATTERN		( 0x01 << 29 )
-#define MGADWG_TRANSC		( 0x01 << 30 )
-#define MGADWG_NOCLIP		( 0x01 << 31 )
-#define MGAREG_MISC_WRITE	0x3c2
-#define MGAREG_MISC_READ	0x3cc
-#define MGAREG_MISC_IOADSEL	(0x1 << 0)
-#define MGAREG_MISC_RAMMAPEN	(0x1 << 1)
-#define MGAREG_MISC_CLK_SEL_VGA25	(0x0 << 2)
-#define MGAREG_MISC_CLK_SEL_VGA28	(0x1 << 2)
-#define MGAREG_MISC_CLK_SEL_MGA_PIX	(0x2 << 2)
-#define MGAREG_MISC_CLK_SEL_MGA_MSK	(0x3 << 2)
-#define MGAREG_MISC_VIDEO_DIS	(0x1 << 4)
-#define MGAREG_MISC_HIGH_PG_SEL	(0x1 << 5)
-
-/* MMIO VGA registers */
-#define MGAREG_CRTC_INDEX	0x1fd4
-#define MGAREG_CRTC_DATA	0x1fd5
-#define MGAREG_CRTCEXT_INDEX	0x1fde
-#define MGAREG_CRTCEXT_DATA	0x1fdf
-
-
-/* MGA bits for registers PCI_OPTION_REG */
-#define MGA1064_OPT_SYS_CLK_PCI   		( 0x00 << 0 )
-#define MGA1064_OPT_SYS_CLK_PLL   		( 0x01 << 0 )
-#define MGA1064_OPT_SYS_CLK_EXT   		( 0x02 << 0 )
-#define MGA1064_OPT_SYS_CLK_MSK   		( 0x03 << 0 )
-
-#define MGA1064_OPT_SYS_CLK_DIS   		( 0x01 << 2 )
-#define MGA1064_OPT_G_CLK_DIV_1   		( 0x01 << 3 )
-#define MGA1064_OPT_M_CLK_DIV_1   		( 0x01 << 4 )
-
-#define MGA1064_OPT_SYS_PLL_PDN   		( 0x01 << 5 )
-#define MGA1064_OPT_VGA_ION   		( 0x01 << 8 )
-
-/* MGA registers in PCI config space */
-#define PCI_MGA_INDEX		0x44
-#define PCI_MGA_DATA		0x48
-#define PCI_MGA_OPTION2		0x50
-#define PCI_MGA_OPTION3		0x54
-
-#define RAMDAC_OFFSET		0x3c00
-
-/* TVP3026 direct registers */
-
-#define TVP3026_INDEX		0x00
-#define TVP3026_WADR_PAL	0x00
-#define TVP3026_COL_PAL		0x01
-#define TVP3026_PIX_RD_MSK	0x02
-#define TVP3026_RADR_PAL	0x03
-#define TVP3026_CUR_COL_ADDR	0x04
-#define TVP3026_CUR_COL_DATA	0x05
-#define TVP3026_DATA		0x0a
-#define TVP3026_CUR_RAM		0x0b
-#define TVP3026_CUR_XLOW	0x0c
-#define TVP3026_CUR_XHI		0x0d
-#define TVP3026_CUR_YLOW	0x0e
-#define TVP3026_CUR_YHI		0x0f
-
-/* TVP3026 indirect registers */
-
-#define TVP3026_SILICON_REV	0x01
-#define TVP3026_CURSOR_CTL	0x06
-#define TVP3026_LATCH_CTL	0x0f
-#define TVP3026_TRUE_COLOR_CTL	0x18
-#define TVP3026_MUX_CTL		0x19
-#define TVP3026_CLK_SEL		0x1a
-#define TVP3026_PAL_PAGE	0x1c
-#define TVP3026_GEN_CTL		0x1d
-#define TVP3026_MISC_CTL	0x1e
-#define TVP3026_GEN_IO_CTL	0x2a
-#define TVP3026_GEN_IO_DATA	0x2b
-#define TVP3026_PLL_ADDR	0x2c
-#define TVP3026_PIX_CLK_DATA	0x2d
-#define TVP3026_MEM_CLK_DATA	0x2e
-#define TVP3026_LOAD_CLK_DATA	0x2f
-#define TVP3026_KEY_RED_LOW	0x32
-#define TVP3026_KEY_RED_HI	0x33
-#define TVP3026_KEY_GREEN_LOW	0x34
-#define TVP3026_KEY_GREEN_HI	0x35
-#define TVP3026_KEY_BLUE_LOW	0x36
-#define TVP3026_KEY_BLUE_HI	0x37
-#define TVP3026_KEY_CTL		0x38
-#define TVP3026_MCLK_CTL	0x39
-#define TVP3026_SENSE_TEST	0x3a
-#define TVP3026_TEST_DATA	0x3b
-#define TVP3026_CRC_LSB		0x3c
-#define TVP3026_CRC_MSB		0x3d
-#define TVP3026_CRC_CTL		0x3e
-#define TVP3026_ID		0x3f
-#define TVP3026_RESET		0xff
-
-
-/* MGA1064 DAC Register file */
-/* MGA1064 direct registers */
-
-#define MGA1064_INDEX		0x00
-#define MGA1064_WADR_PAL	0x00
-#define MGA1064_COL_PAL		0x01
-#define MGA1064_PIX_RD_MSK	0x02
-#define MGA1064_RADR_PAL	0x03
-#define MGA1064_DATA		0x0a
-
-#define MGA1064_CUR_XLOW	0x0c
-#define MGA1064_CUR_XHI		0x0d
-#define MGA1064_CUR_YLOW	0x0e
-#define MGA1064_CUR_YHI		0x0f
-
-/* MGA1064 indirect registers */
-#define MGA1064_CURSOR_BASE_ADR_LOW	0x04
-#define MGA1064_CURSOR_BASE_ADR_HI	0x05
-#define MGA1064_CURSOR_CTL	0x06
-#define MGA1064_CURSOR_COL0_RED	0x08
-#define MGA1064_CURSOR_COL0_GREEN	0x09
-#define MGA1064_CURSOR_COL0_BLUE	0x0a
-
-#define MGA1064_CURSOR_COL1_RED	0x0c
-#define MGA1064_CURSOR_COL1_GREEN	0x0d
-#define MGA1064_CURSOR_COL1_BLUE	0x0e
-
-#define MGA1064_CURSOR_COL2_RED	0x010
-#define MGA1064_CURSOR_COL2_GREEN	0x011
-#define MGA1064_CURSOR_COL2_BLUE	0x012
-
-#define MGA1064_VREF_CTL	0x018
-
-#define MGA1064_MUL_CTL		0x19
-#define MGA1064_MUL_CTL_8bits		0x0
-#define MGA1064_MUL_CTL_15bits		0x01
-#define MGA1064_MUL_CTL_16bits		0x02
-#define MGA1064_MUL_CTL_24bits		0x03
-#define MGA1064_MUL_CTL_32bits		0x04
-#define MGA1064_MUL_CTL_2G8V16bits		0x05
-#define MGA1064_MUL_CTL_G16V16bits		0x06
-#define MGA1064_MUL_CTL_32_24bits		0x07
-
-#define MGAGDAC_XVREFCTRL		0x18
-#define MGA1064_PIX_CLK_CTL		0x1a
-#define MGA1064_PIX_CLK_CTL_CLK_DIS   		( 0x01 << 2 )
-#define MGA1064_PIX_CLK_CTL_CLK_POW_DOWN   	( 0x01 << 3 )
-#define MGA1064_PIX_CLK_CTL_SEL_PCI   		( 0x00 << 0 )
-#define MGA1064_PIX_CLK_CTL_SEL_PLL   		( 0x01 << 0 )
-#define MGA1064_PIX_CLK_CTL_SEL_EXT   		( 0x02 << 0 )
-#define MGA1064_PIX_CLK_CTL_SEL_MSK   		( 0x03 << 0 )
-
-#define MGA1064_GEN_CTL		0x1d
-#define MGA1064_MISC_CTL	0x1e
-#define MGA1064_MISC_CTL_DAC_POW_DN   		( 0x01 << 0 )
-#define MGA1064_MISC_CTL_VGA   		( 0x01 << 1 )
-#define MGA1064_MISC_CTL_DIS_CON   		( 0x03 << 1 )
-#define MGA1064_MISC_CTL_MAFC   		( 0x02 << 1 )
-#define MGA1064_MISC_CTL_VGA8   		( 0x01 << 3 )
-#define MGA1064_MISC_CTL_DAC_RAM_CS   		( 0x01 << 4 )
-
-#define MGA1064_GEN_IO_CTL	0x2a
-#define MGA1064_GEN_IO_DATA	0x2b
-#define MGA1064_SYS_PLL_M	0x2c
-#define MGA1064_SYS_PLL_N	0x2d
-#define MGA1064_SYS_PLL_P	0x2e
-#define MGA1064_SYS_PLL_STAT	0x2f
-#define MGA1064_ZOOM_CTL	0x38
-#define MGA1064_SENSE_TST	0x3a
-
-#define MGA1064_CRC_LSB		0x3c
-#define MGA1064_CRC_MSB		0x3d
-#define MGA1064_CRC_CTL		0x3e
-#define MGA1064_COL_KEY_MSK_LSB		0x40
-#define MGA1064_COL_KEY_MSK_MSB		0x41
-#define MGA1064_COL_KEY_LSB		0x42
-#define MGA1064_COL_KEY_MSB		0x43
-#define MGA1064_PIX_PLLA_M	0x44
-#define MGA1064_PIX_PLLA_N	0x45
-#define MGA1064_PIX_PLLA_P	0x46
-#define MGA1064_PIX_PLLB_M	0x48
-#define MGA1064_PIX_PLLB_N	0x49
-#define MGA1064_PIX_PLLB_P	0x4a
-#define MGA1064_PIX_PLLC_M	0x4c
-#define MGA1064_PIX_PLLC_N	0x4d
-#define MGA1064_PIX_PLLC_P	0x4e
-
-#define MGA1064_PIX_PLL_STAT	0x4f
-
-#endif
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/riva_mmio.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,455 +0,0 @@
-/***************************************************************************\
-|*                                                                           *|
-|*       Copyright 1993-1999 NVIDIA, Corporation.  All rights reserved.      *|
-|*                                                                           *|
-|*     NOTICE TO USER:   The source code  is copyrighted under  U.S. and     *|
-|*     international laws.  Users and possessors of this source code are     *|
-|*     hereby granted a nonexclusive,  royalty-free copyright license to     *|
-|*     use this code in individual and commercial software.                  *|
-|*                                                                           *|
-|*     Any use of this source code must include,  in the user documenta-     *|
-|*     tion and  internal comments to the code,  notices to the end user     *|
-|*     as follows:                                                           *|
-|*                                                                           *|
-|*       Copyright 1993-1999 NVIDIA, Corporation.  All rights reserved.      *|
-|*                                                                           *|
-|*     NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY     *|
-|*     OF  THIS SOURCE  CODE  FOR ANY PURPOSE.  IT IS  PROVIDED  "AS IS"     *|
-|*     WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.  NVIDIA, CORPOR-     *|
-|*     ATION DISCLAIMS ALL WARRANTIES  WITH REGARD  TO THIS SOURCE CODE,     *|
-|*     INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE-     *|
-|*     MENT,  AND FITNESS  FOR A PARTICULAR PURPOSE.   IN NO EVENT SHALL     *|
-|*     NVIDIA, CORPORATION  BE LIABLE FOR ANY SPECIAL,  INDIRECT,  INCI-     *|
-|*     DENTAL, OR CONSEQUENTIAL DAMAGES,  OR ANY DAMAGES  WHATSOEVER RE-     *|
-|*     SULTING 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 SOURCE CODE.     *|
-|*                                                                           *|
-|*     U.S. Government  End  Users.   This source code  is a "commercial     *|
-|*     item,"  as that  term is  defined at  48 C.F.R. 2.101 (OCT 1995),     *|
-|*     consisting  of "commercial  computer  software"  and  "commercial     *|
-|*     computer  software  documentation,"  as such  terms  are  used in     *|
-|*     48 C.F.R. 12.212 (SEPT 1995)  and is provided to the U.S. Govern-     *|
-|*     ment only as  a commercial end item.   Consistent with  48 C.F.R.     *|
-|*     12.212 and  48 C.F.R. 227.7202-1 through  227.7202-4 (JUNE 1995),     *|
-|*     all U.S. Government End Users  acquire the source code  with only     *|
-|*     those rights set forth herein.                                        *|
-|*                                                                           *|
-\***************************************************************************/
-
-#ifndef __RIVA_HW_H__
-#define __RIVA_HW_H__
-#define RIVA_SW_VERSION 0x00010003
-
-/*
- * Typedefs to force certain sized values.
- */
-typedef Uint8 U008;
-typedef Uint16 U016;
-typedef Uint32 U032;
-
-/*
- * HW access macros.
- */
-#define NV_WR08(p,i,d)  (((U008 *)(p))[i]=(d))
-#define NV_RD08(p,i)    (((U008 *)(p))[i])
-#define NV_WR16(p,i,d)  (((U016 *)(p))[(i)/2]=(d))
-#define NV_RD16(p,i)    (((U016 *)(p))[(i)/2])
-#define NV_WR32(p,i,d)  (((U032 *)(p))[(i)/4]=(d))
-#define NV_RD32(p,i)    (((U032 *)(p))[(i)/4])
-#define VGA_WR08(p,i,d) NV_WR08(p,i,d)
-#define VGA_RD08(p,i)   NV_RD08(p,i)
-
-/*
- * Define supported architectures.
- */
-#define NV_ARCH_03  0x03
-#define NV_ARCH_04  0x04
-#define NV_ARCH_10  0x10
-/***************************************************************************\
-*                                                                           *
-*                             FIFO registers.                               *
-*                                                                           *
-\***************************************************************************/
-
-/*
- * Raster OPeration. Windows style ROP3.
- */
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop;
-    U032 reserved01[0x0BB];
-    U032 Rop3;
-} RivaRop;
-/*
- * 8X8 Monochrome pattern.
- */
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop;
-    U032 reserved01[0x0BD];
-    U032 Shape;
-    U032 reserved03[0x001];
-    U032 Color0;
-    U032 Color1;
-    U032 Monochrome[2];
-} RivaPattern;
-/*
- * Scissor clip rectangle.
- */
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop;
-    U032 reserved01[0x0BB];
-    U032 TopLeft;
-    U032 WidthHeight;
-} RivaClip;
-/*
- * 2D filled rectangle.
- */
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop[1];
-    U032 reserved01[0x0BC];
-    U032 Color;
-    U032 reserved03[0x03E];
-    U032 TopLeft;
-    U032 WidthHeight;
-} RivaRectangle;
-/*
- * 2D screen-screen BLT.
- */
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop;
-    U032 reserved01[0x0BB];
-    U032 TopLeftSrc;
-    U032 TopLeftDst;
-    U032 WidthHeight;
-} RivaScreenBlt;
-/*
- * 2D pixel BLT.
- */
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop[1];
-    U032 reserved01[0x0BC];
-    U032 TopLeft;
-    U032 WidthHeight;
-    U032 WidthHeightIn;
-    U032 reserved02[0x03C];
-    U032 Pixels;
-} RivaPixmap;
-/*
- * Filled rectangle combined with monochrome expand.  Useful for glyphs.
- */
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop;
-    U032 reserved01[0x0BB];
-    U032 reserved03[(0x040) - 1];
-    U032 Color1A;
-    struct
-    {
-        U032 TopLeft;
-        U032 WidthHeight;
-    } UnclippedRectangle[64];
-    U032 reserved04[(0x080) - 3];
-    struct
-    {
-        U032 TopLeft;
-        U032 BottomRight;
-    } ClipB;
-    U032 Color1B;
-    struct
-    {
-        U032 TopLeft;
-        U032 BottomRight;
-    } ClippedRectangle[64];
-    U032 reserved05[(0x080) - 5];
-    struct
-    {
-        U032 TopLeft;
-        U032 BottomRight;
-    } ClipC;
-    U032 Color1C;
-    U032 WidthHeightC;
-    U032 PointC;
-    U032 MonochromeData1C;
-    U032 reserved06[(0x080) + 121];
-    struct
-    {
-        U032 TopLeft;
-        U032 BottomRight;
-    } ClipD;
-    U032 Color1D;
-    U032 WidthHeightInD;
-    U032 WidthHeightOutD;
-    U032 PointD;
-    U032 MonochromeData1D;
-    U032 reserved07[(0x080) + 120];
-    struct
-    {
-        U032 TopLeft;
-        U032 BottomRight;
-    } ClipE;
-    U032 Color0E;
-    U032 Color1E;
-    U032 WidthHeightInE;
-    U032 WidthHeightOutE;
-    U032 PointE;
-    U032 MonochromeData01E;
-} RivaBitmap;
-/*
- * 3D textured, Z buffered triangle.
- */
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop;
-    U032 reserved01[0x0BC];
-    U032 TextureOffset;
-    U032 TextureFormat;
-    U032 TextureFilter;
-    U032 FogColor;
-/* This is a problem on LynxOS */
-#ifdef Control
-#undef Control
-#endif
-    U032 Control;
-    U032 AlphaTest;
-    U032 reserved02[0x339];
-    U032 FogAndIndex;
-    U032 Color;
-    float ScreenX;
-    float ScreenY;
-    float ScreenZ;
-    float EyeM;
-    float TextureS;
-    float TextureT;
-} RivaTexturedTriangle03;
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop;
-    U032 reserved01[0x0BB];
-    U032 ColorKey;
-    U032 TextureOffset;
-    U032 TextureFormat;
-    U032 TextureFilter;
-    U032 Blend;
-/* This is a problem on LynxOS */
-#ifdef Control
-#undef Control
-#endif
-    U032 Control;
-    U032 FogColor;
-    U032 reserved02[0x39];
-    struct
-    {
-        float ScreenX;
-        float ScreenY;
-        float ScreenZ;
-        float EyeM;
-        U032 Color;
-        U032 Specular;
-        float TextureS;
-        float TextureT;
-    } Vertex[16];
-    U032 DrawTriangle3D;
-} RivaTexturedTriangle05;
-/*
- * 2D line.
- */
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop[1];
-    U032 reserved01[0x0BC];
-    U032 Color;                 /* source color               0304-0307 */
-    U032 Reserved02[0x03e];
-    struct
-    {                           /* start aliased methods in array   0400-    */
-        U032 point0;            /* y_x S16_S16 in pixels            0-   3 */
-        U032 point1;            /* y_x S16_S16 in pixels            4-   7 */
-    } Lin[16];                  /* end of aliased methods in array      -047f */
-    struct
-    {                           /* start aliased methods in array   0480-    */
-        U032 point0X;           /* in pixels, 0 at left                0-   3 */
-        U032 point0Y;           /* in pixels, 0 at top                 4-   7 */
-        U032 point1X;           /* in pixels, 0 at left                8-   b */
-        U032 point1Y;           /* in pixels, 0 at top                 c-   f */
-    } Lin32[8];                 /* end of aliased methods in array      -04ff */
-    U032 PolyLin[32];           /* y_x S16_S16 in pixels         0500-057f */
-    struct
-    {                           /* start aliased methods in array   0580-    */
-        U032 x;                 /* in pixels, 0 at left                0-   3 */
-        U032 y;                 /* in pixels, 0 at top                 4-   7 */
-    } PolyLin32[16];            /* end of aliased methods in array      -05ff */
-    struct
-    {                           /* start aliased methods in array   0600-    */
-        U032 color;             /* source color                     0-   3 */
-        U032 point;             /* y_x S16_S16 in pixels            4-   7 */
-    } ColorPolyLin[16];         /* end of aliased methods in array      -067f */
-} RivaLine;
-/*
- * 2D/3D surfaces
- */
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop;
-    U032 reserved01[0x0BE];
-    U032 Offset;
-} RivaSurface;
-typedef volatile struct
-{
-    U032 reserved00[4];
-    U016 FifoFree;
-    U016 Nop;
-    U032 reserved01[0x0BD];
-    U032 Pitch;
-    U032 RenderBufferOffset;
-    U032 ZBufferOffset;
-} RivaSurface3D;
-
-/***************************************************************************\
-*                                                                           *
-*                        Virtualized RIVA H/W interface.                    *
-*                                                                           *
-\***************************************************************************/
-
-struct _riva_hw_inst;
-struct _riva_hw_state;
-/*
- * Virtialized chip interface. Makes RIVA 128 and TNT look alike.
- */
-typedef struct _riva_hw_inst
-{
-    /*
-     * Chip specific settings.
-     */
-    U032 Architecture;
-    U032 Version;
-    U032 CrystalFreqKHz;
-    U032 RamAmountKBytes;
-    U032 MaxVClockFreqKHz;
-    U032 RamBandwidthKBytesPerSec;
-    U032 EnableIRQ;
-    U032 IO;
-    U032 VBlankBit;
-    U032 FifoFreeCount;
-    U032 FifoEmptyCount;
-    /*
-     * Non-FIFO registers.
-     */
-    volatile U032 *PCRTC;
-    volatile U032 *PRAMDAC;
-    volatile U032 *PFB;
-    volatile U032 *PFIFO;
-    volatile U032 *PGRAPH;
-    volatile U032 *PEXTDEV;
-    volatile U032 *PTIMER;
-    volatile U032 *PMC;
-    volatile U032 *PRAMIN;
-    volatile U032 *FIFO;
-    volatile U032 *CURSOR;
-    volatile U032 *CURSORPOS;
-    volatile U032 *VBLANKENABLE;
-    volatile U032 *VBLANK;
-    volatile U008 *PCIO;
-    volatile U008 *PVIO;
-    volatile U008 *PDIO;
-    /*
-     * Common chip functions.
-     */
-    int (*Busy) (struct _riva_hw_inst *);
-    void (*CalcStateExt) (struct _riva_hw_inst *, struct _riva_hw_state *,
-                          int, int, int, int, int, int, int, int, int, int,
-                          int, int, int);
-    void (*LoadStateExt) (struct _riva_hw_inst *, struct _riva_hw_state *);
-    void (*UnloadStateExt) (struct _riva_hw_inst *, struct _riva_hw_state *);
-    void (*SetStartAddress) (struct _riva_hw_inst *, U032);
-    void (*SetSurfaces2D) (struct _riva_hw_inst *, U032, U032);
-    void (*SetSurfaces3D) (struct _riva_hw_inst *, U032, U032);
-    int (*ShowHideCursor) (struct _riva_hw_inst *, int);
-    void (*LockUnlock) (struct _riva_hw_inst *, int);
-    /*
-     * Current extended mode settings.
-     */
-    struct _riva_hw_state *CurrentState;
-    /*
-     * FIFO registers.
-     */
-    RivaRop *Rop;
-    RivaPattern *Patt;
-    RivaClip *Clip;
-    RivaPixmap *Pixmap;
-    RivaScreenBlt *Blt;
-    RivaBitmap *Bitmap;
-    RivaLine *Line;
-    RivaTexturedTriangle03 *Tri03;
-    RivaTexturedTriangle05 *Tri05;
-} RIVA_HW_INST;
-/*
- * Extended mode state information.
- */
-typedef struct _riva_hw_state
-{
-    U032 bpp;
-    U032 width;
-    U032 height;
-    U032 repaint0;
-    U032 repaint1;
-    U032 screen;
-    U032 pixel;
-    U032 horiz;
-    U032 arbitration0;
-    U032 arbitration1;
-    U032 vpll;
-    U032 pllsel;
-    U032 general;
-    U032 config;
-    U032 cursor0;
-    U032 cursor1;
-    U032 cursor2;
-    U032 offset0;
-    U032 offset1;
-    U032 offset2;
-    U032 offset3;
-    U032 pitch0;
-    U032 pitch1;
-    U032 pitch2;
-    U032 pitch3;
-} RIVA_HW_STATE;
-
-/*
- * FIFO Free Count. Should attempt to yield processor if RIVA is busy.
- */
-
-#define RIVA_FIFO_FREE(hwptr,cnt)                                  \
-{                                                                  \
-   while (FifoFreeCount < (cnt))                                   \
-	FifoFreeCount = hwptr->FifoFree >> 2;                      \
-   FifoFreeCount -= (cnt);                                         \
-}
-#endif /* __RIVA_HW_H__ */
-/* vi: set ts=4 sw=4 expandtab: */
--- a/src/video/fbcon/riva_regs.h	Wed Jan 19 19:51:04 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
-    SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2010 Sam Lantinga
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-    Sam Lantinga
-    slouken@libsdl.org
-*/
-#include "SDL_config.h"
-
-#ifndef _RIVA_REGS_H
-#define _RIVA_REGS_H
-
-/* This information comes from the XFree86 NVidia hardware driver */
-
-/* mapped_io register offsets */
-#define PGRAPH_OFFSET	0x00400000
-#define FIFO_OFFSET	0x00800000
-#define ROP_OFFSET	FIFO_OFFSET+0x00000000
-#define CLIP_OFFSET	FIFO_OFFSET+0x00002000
-#define PATT_OFFSET	FIFO_OFFSET+0x00004000
-#define PIXMAP_OFFSET	FIFO_OFFSET+0x00006000
-#define BLT_OFFSET	FIFO_OFFSET+0x00008000
-#define BITMAP_OFFSET	FIFO_OFFSET+0x0000A000
-#define LINE_OFFSET	FIFO_OFFSET+0x0000C000
-#define TRI03_OFFSET	FIFO_OFFSET+0x0000E000
-#define PCIO_OFFSET	0x00601000
-
-#endif /* _RIVA_REGS_H */
-/* vi: set ts=4 sw=4 expandtab: */