xf86-video-ati: Branch 'master' - 7 commits

George Sapountzis gsap7 at kemper.freedesktop.org
Wed Feb 27 08:45:08 PST 2008


 Makefile.am            |   11 
 README.ati             |  828 ---------
 README.ati.sgml        |  648 -------
 README.r128            |  160 -
 README.r128.sgml       |  138 -
 configure.ac           |   64 
 man/Makefile.am        |    4 
 man/r128.man           |  156 -
 src/Makefile.am        |   87 
 src/atiadjust.c        |  134 -
 src/atiadjust.h        |   31 
 src/atiaudio.c         |   50 
 src/atiaudio.h         |   51 
 src/atibank.c          |  114 -
 src/atibank.h          |   44 
 src/atibus.c           |  123 -
 src/atibus.h           |   49 
 src/atichip.c          |  271 --
 src/atichip.h          |   94 -
 src/aticlock.c         |  443 ----
 src/aticlock.h         |   62 
 src/aticonfig.c        |  506 -----
 src/aticonsole.c       |  816 --------
 src/aticonsole.h       |   43 
 src/aticrtc.h          |   42 
 src/aticursor.h        |   42 
 src/atidac.c           |  462 -----
 src/atidac.h           |   99 -
 src/atidecoder.c       |   50 
 src/atidecoder.h       |   51 
 src/atidga.c           |  483 -----
 src/atidga.h           |   36 
 src/atidri.c           | 1640 ------------------
 src/atidri.h           |   49 
 src/atidripriv.h       |   57 
 src/atidsp.c           |  302 ---
 src/atidsp.h           |   35 
 src/atii2c.c           |  399 ----
 src/atii2c.h           |   48 
 src/atiload.c          |   98 -
 src/atiload.h          |   32 
 src/atilock.c          |  537 -----
 src/atilock.h          |   31 
 src/atimach64.c        | 1341 --------------
 src/atimach64.h        |   36 
 src/atimach64accel.c   | 1068 -----------
 src/atimach64accel.h   |   42 
 src/atimach64cursor.c  |  426 ----
 src/atimach64exa.c     |  696 -------
 src/atimach64i2c.c     |  469 -----
 src/atimach64i2c.h     |   32 
 src/atimach64io.c      |  103 -
 src/atimach64io.h      |  421 ----
 src/atimach64probe.c   |  289 ---
 src/atimach64probe.h   |   32 
 src/atimach64render.c  |  898 ---------
 src/atimach64version.h |   59 
 src/atimach64xv.c      | 1686 ------------------
 src/atimisc.c          |   78 
 src/atimode.c          | 1084 -----------
 src/atimode.h          |   35 
 src/atioption.h        |   98 -
 src/atipreinit.c       | 2509 ---------------------------
 src/atipreinit.h       |   30 
 src/atiprint.c         |  784 --------
 src/atiprint.h         |   34 
 src/atipriv.h          |   30 
 src/atiprobe.c         |  475 -----
 src/atiprobe.h         |   30 
 src/atiregs.h          | 2882 -------------------------------
 src/atirgb514.c        |  283 ---
 src/atirgb514.h        |   35 
 src/atiscreen.c        |  692 -------
 src/atiscreen.h        |   31 
 src/atistruct.h        |  529 -----
 src/atituner.c         |  177 -
 src/atituner.h         |   69 
 src/atiutil.c          |  117 -
 src/atiutil.h          |   67 
 src/ativalid.c         |  161 -
 src/ativalid.h         |   30 
 src/ativga.c           |  195 --
 src/ativga.h           |   40 
 src/ativgaio.c         |   49 
 src/ativgaio.h         |   56 
 src/atividmem.c        |  483 -----
 src/atividmem.h        |   73 
 src/atiwonder.c        |  159 -
 src/atiwonder.h        |   38 
 src/atiwonderio.c      |   66 
 src/atiwonderio.h      |   46 
 src/atixv.h            |   34 
 src/mach64_common.h    |  130 -
 src/mach64_dri.h       |  125 -
 src/mach64_sarea.h     |  162 -
 src/r128.h             |  606 ------
 src/r128_accel.c       | 1880 --------------------
 src/r128_common.h      |  169 -
 src/r128_cursor.c      |  311 ---
 src/r128_dga.c         |  402 ----
 src/r128_dri.c         | 1499 ----------------
 src/r128_dri.h         |  100 -
 src/r128_dripriv.h     |   57 
 src/r128_driver.c      | 4463 -------------------------------------------------
 src/r128_misc.c        |   79 
 src/r128_probe.c       |  378 ----
 src/r128_probe.h       |   73 
 src/r128_reg.h         | 1533 ----------------
 src/r128_sarea.h       |  194 --
 src/r128_version.h     |   59 
 src/r128_video.c       | 1028 -----------
 111 files changed, 16 insertions(+), 41749 deletions(-)

New commits:
commit ee485ee0fc550414cd39cdb8fd2769fe0bc996a8
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Wed Feb 27 18:41:31 2008 +0200

    radeon: pass distcheck

diff --git a/src/Makefile.am b/src/Makefile.am
index ea6d770..70c05e5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -118,6 +118,7 @@ EXTRA_DIST = \
 	$(XMODE_SRCS) \
 	radeon_render.c \
 	radeon_accelfuncs.c \
+	radeon_textured_videofuncs.c \
 	\
 	ati.h \
 	ativersion.h \
commit ff110c781299fb729e93572ba3d630ca59e8127d
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Wed Feb 27 18:41:17 2008 +0200

    add warning for r128

diff --git a/configure.ac b/configure.ac
index abed1d3..2412d4f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -249,6 +249,12 @@ AC_MSG_NOTICE(
 [Please install that driver as well for mach64-based cards.]
 )
 
+AC_MSG_NOTICE(
+[The r128 sub-driver has been split out to xf86-video-r128:]
+[    git://anongit.freedesktop.org/git/xorg/driver/xf86-video-r128]
+[Please install that driver as well for rage128-based cards.]
+)
+
 AC_OUTPUT([
 	Makefile
 	src/Makefile
commit b4a344f36332a12a51c9e896d93e9cb0672d31ef
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Wed Feb 27 18:40:50 2008 +0200

    add warning for mach64

diff --git a/configure.ac b/configure.ac
index 560b935..abed1d3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -243,6 +243,12 @@ XORG_MANPAGE_SECTIONS
 XORG_RELEASE_VERSION
 XORG_CHECK_LINUXDOC
 
+AC_MSG_NOTICE(
+[The atimisc sub-driver has been split out to xf86-video-mach64:]
+[    git://anongit.freedesktop.org/git/xorg/driver/xf86-video-mach64]
+[Please install that driver as well for mach64-based cards.]
+)
+
 AC_OUTPUT([
 	Makefile
 	src/Makefile
commit 81ce4097c12ab64a52d0992f981f588f5a297b7b
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Wed Feb 27 18:40:23 2008 +0200

    drop r128

diff --git a/README.r128 b/README.r128
deleted file mode 100644
index dcc2715..0000000
--- a/README.r128
+++ /dev/null
@@ -1,160 +0,0 @@
-  Information for ATI Rage 128 Users
-  Precision Insight, Inc., SuSE GmbH
-  13 June 2000
-  ____________________________________________________________
-
-  Table of Contents
-
-
-  1. Supported Hardware
-  2. Features
-  3. Technical Notes
-  4. Reported Working Video Cards
-  5. Configuration
-  6. Driver Options
-  7. Known Limitations
-  8. Authors
-
-
-  ______________________________________________________________________
-
-  1.  Supported Hardware
-
-
-  +o  ATI Rage 128 based cards
-
-
-
-  2.  Features
-
-
-  +o  Full support (including hardware accelerated 2D drawing) for 8, 15,
-     16, 24 bit pixel depths.
-
-  +o  Hardware cursor support to reduce sprite flicker.
-
-  +o  Support for high resolution video modes up to 1800x1440 @ 70Hz.
-
-  +o  Support for doublescan video modes (e.g., 320x200 and 320x240).
-
-  +o  Support for gamma correction at all pixel depths.
-
-  +o  Fully programmable clock supported.
-
-  +o  Robust text mode restore for VT switching.
-
-
-
-  3.  Technical Notes
-
-
-  +o  None
-
-
-
-  4.  Reported Working Video Cards
-
-
-  +o  Rage Fury AGP 32MB
-
-  +o  XPERT 128 AGP 16MB
-
-  +o  XPERT 99 AGP 8MB
-
-
-
-  5.  Configuration
-
-  The driver auto-detects all device information necessary to initialize
-  the card.  The only lines you need in the "Device" section of your
-  xorg.conf file are:
-
-         Section "Device"
-             Identifier "Rage 128"
-             Driver     "r128"
-         EndSection
-
-
-  or let xorgconfig do this for you.
-
-  However, if you have problems with auto-detection, you can specify:
-
-  +o  VideoRam - in kilobytes
-
-  +o  MemBase  - physical address of the linear framebuffer
-
-  +o  IOBase   - physical address of the memory mapped IO registers
-
-  +o  ChipID   - PCI DEVICE ID
-
-
-
-  6.  Driver Options
-
-
-  +o  "hw_cursor" - request hardware cursor (default)
-
-  +o  "sw_cursor" - software cursor only
-
-  +o  "no_accel"  - software rendering only
-
-  +o  "dac_8_bit" - use color weight 888 in 8 bpp mode (default)
-
-  +o  "dac_6_bit" - use color weight 666 in 8 bpp mode (VGA emulation)
-
-
-
-  7.  Known Limitations
-
-
-  +o  None
-
-
-
-  8.  Authors
-
-  The X11R6.8 driver was originally part of XFree86 4.4 rc2.
-
-  The XFree86 4 driver was ported from XFree86 3.3.x and enhanced by:
-
-  +o  Rickard E. (Rik) Faith  <faith at precisioninsight.com>
-
-  +o  Kevin E. Martin  <kevin at precisioninsight.com>
-
-  The XFree86 4 driver was funded by ATI and was donated to The XFree86
-  Project by:
-
-      Precision Insight, Inc.
-      Cedar Park, TX
-      USA
-
-
-  The XFree86 3.3.x driver used for the port was written by:
-
-  +o  Rickard E. (Rik) Faith  <faith at precisioninsight.com>
-
-  +o  Kevin E. Martin  <kevin at precisioninsight.com>
-
-     The XFree86 3.3.x driver was funded by ATI and was donated to The
-     XFree86 Project by Precision Insight, Inc.  It was based in part on
-     an earlier driver that was written by:
-
-  +o  Alan Hourihane  <alanh at fairlite.demon.co.uk>
-
-  +o  Dirk Hohndel  <hohndel at suse.de>
-
-  This early driver was funded and donated to The XFree86 Project by:
-
-      SuSE GmbH
-      Schanzaekerstr. 10
-      90443 Nuernberg
-      Germany
-
-
-
-  http://www.precisioninsight.com
-
-  http://www.suse.com
-
-
-
diff --git a/README.r128.sgml b/README.r128.sgml
deleted file mode 100644
index 8d7f448..0000000
--- a/README.r128.sgml
+++ /dev/null
@@ -1,138 +0,0 @@
-<!DOCTYPE linuxdoc PUBLIC "-//Xorg//DTD linuxdoc//EN"[
-<!ENTITY % defs SYSTEM "defs.ent"> %defs;
-]>
-
-<article>
-<title>Information for ATI Rage 128 Users
-<author>Precision Insight, Inc., SuSE GmbH
-<date>13 June 2000
-
-<ident>
-</ident>
-
-<toc>
-
-<sect>Supported Hardware
-<p>
-<itemize>
-  <item>ATI Rage 128 based cards
-</itemize>
-
-
-<sect>Features
-<p>
-<itemize>
-  <item>Full support (including hardware accelerated 2D drawing) for 8, 15,
-        16, 24 bit pixel depths.
-  <item>Hardware cursor support to reduce sprite flicker.
-  <item>Support for high resolution video modes up to 1800x1440 @ 70Hz.
-  <item>Support for doublescan video modes (e.g., 320x200 and 320x240).
-  <item>Support for gamma correction at all pixel depths.
-  <item>Fully programmable clock supported.
-  <item>Robust text mode restore for VT switching.
-</itemize>
-
-
-<sect>Technical Notes
-<p>
-<itemize>
-  <item>None
-</itemize>
-
-
-<sect>Reported Working Video Cards
-<p>
-<itemize>
-  <item>Rage Fury AGP 32MB
-  <item>XPERT 128 AGP 16MB
-  <item>XPERT 99 AGP 8MB
-</itemize>
-
-
-<sect>Configuration
-<p>
-The driver auto-detects all device information necessary to
-initialize the card.  The only lines you need in the "Device"
-section of your xorg.conf file are:
-<verb>
-       Section "Device"
-           Identifier "Rage 128"
-           Driver     "r128"
-       EndSection
-</verb>
-or let <tt>xorgconfig</tt> do this for you.
-
-However, if you have problems with auto-detection, you can specify:
-<itemize>
-  <item>VideoRam - in kilobytes
-  <item>MemBase  - physical address of the linear framebuffer
-  <item>IOBase   - physical address of the memory mapped IO registers
-  <item>ChipID   - PCI DEVICE ID
-</itemize>
-
-
-<sect>Driver Options
-<p>
-<itemize>
-  <item>"hw_cursor" - request hardware cursor (default)
-  <item>"sw_cursor" - software cursor only
-  <item>"no_accel"  - software rendering only
-  <item>"dac_8_bit" - use color weight 888 in 8 bpp mode (default)
-  <item>"dac_6_bit" - use color weight 666 in 8 bpp mode (VGA emulation)
-</itemize>
-
-
-<sect>Known Limitations
-<p>
-<itemize>
-  <item>None
-</itemize>
-
-
-<sect>Authors
-<p>
-The X11R&relvers; driver was originally part of XFree86 4.4 rc2.
-
-The XFree86 4 driver was ported from XFree86 3.3.x and enhanced by:
-<itemize>
-   <item>Rickard E. (Rik) Faith <email>faith at precisioninsight.com</email>
-   <item>Kevin E. Martin <email>kevin at precisioninsight.com</email>
-</itemize>
-<p>
-The XFree86 4 driver was funded by ATI and was donated to The XFree86
-Project by:
-<verb>
-    Precision Insight, Inc.
-    Cedar Park, TX
-    USA
-</verb>
-<p>
-The XFree86 3.3.x driver used for the port was written by:
-<itemize>
-   <item>Rickard E. (Rik) Faith <email>faith at precisioninsight.com</email>
-   <item>Kevin E. Martin <email>kevin at precisioninsight.com</email>
-</itemize>
-The XFree86 3.3.x driver was funded by ATI and was donated to The XFree86
-Project by Precision Insight, Inc.  It was based in part on an earlier
-driver that was written by:
-<itemize>
-   <item>Alan Hourihane <email>alanh at fairlite.demon.co.uk</email>
-   <item>Dirk Hohndel <email>hohndel at suse.de</email>
-</itemize>
-<p>This early driver was funded and donated to The XFree86 Project by:
-<verb>
-    SuSE GmbH
-    Schanzaekerstr. 10
-    90443 Nuernberg
-    Germany
-</verb>
-
-<p>
-<htmlurl name="http://www.precisioninsight.com"
-          url="http://www.precisioninsight.com">
-<p>
-<htmlurl name="http://www.suse.com"
-          url="http://www.suse.com">
-
-
-</article>
diff --git a/man/r128.man b/man/r128.man
deleted file mode 100644
index 709c2fe..0000000
--- a/man/r128.man
+++ /dev/null
@@ -1,156 +0,0 @@
-.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/r128.man,v 1.3 2001/06/01 02:10:05 dawes Exp $
-.\" shorthand for double quote that works everywhere.
-.ds q \N'34'
-.TH R128 __drivermansuffix__ __vendorversion__
-.SH NAME
-r128 \- ATI Rage 128 video driver
-.SH SYNOPSIS
-.nf
-.B "Section \*qDevice\*q"
-.BI "  Identifier \*q"  devname \*q
-.B  "  Driver \*qr128\*q"
-\ \ ...
-.B EndSection
-.fi
-.SH DESCRIPTION
-.B r128
-is an __xservername__ driver for ATI Rage 128 based video cards.  It contains
-full support for 8, 15, 16 and 24 bit pixel depths, hardware
-acceleration of drawing primitives, hardware cursor, video modes up to
-1800x1440 @ 70Hz, doublescan modes (e.g., 320x200 and 320x240), gamma
-correction at all pixel depths, a fully programming dot clock and robust
-text mode restoration for VT switching.  Dualhead is supported on M3/M4
-mobile chips.
-.SH SUPPORTED HARDWARE
-The
-.B r128
-driver supports all ATI Rage 128 based video cards including the Rage
-Fury AGP 32MB, the XPERT 128 AGP 16MB and the XPERT 99 AGP 8MB.
-.SH CONFIGURATION DETAILS
-Please refer to __xconfigfile__(__filemansuffix__) for general configuration
-details.  This section only covers configuration details specific to this
-driver.
-.PP
-The driver auto-detects all device information necessary to initialize
-the card.  However, if you have problems with auto-detection, you can
-specify:
-.PP
-.RS 4
-VideoRam - in kilobytes
-.br
-MemBase  - physical address of the linear framebuffer
-.br
-IOBase   - physical address of the MMIO registers
-.br
-ChipID   - PCI DEVICE ID
-.RE
-.PP
-In addition, the following driver
-.B Options
-are supported:
-.TP
-.BI "Option \*qSWcursor\*q \*q" boolean \*q
-Selects software cursor.  The default is
-.B off.
-.TP
-.BI "Option \*qNoAccel\*q \*q" boolean \*q
-Enables or disables all hardware acceleration.  The default is to
-.B enable
-hardware acceleration.
-.TP
-.BI "Option \*qDac6Bit\*q \*q" boolean \*q
-Enables or disables the use of 6 bits per color component when in 8 bpp
-mode (emulates VGA mode).  By default, all 8 bits per color component
-are used.  The default is
-.B off.
-.TP
-.BI "Option \*qVideoKey\*q \*q" integer \*q
-This overrides the default pixel value for the YUV video overlay key.
-The default value is
-.B undefined.
-.TP
-.BI "Option \*qDisplay\*q \*q" string \*q
-Select display mode for devices which support flat panels. Supported modes are:
-
-.B \*qFP\*q
-- use flat panel;
-
-.B \*qCRT\*q
-- use cathode ray tube;
-
-.B \*qMirror\*q
-- use both FP and CRT;
-
-.B \*qBIOS\*q
-- use mode as configured in the BIOS.
-
-The default is
-.B FP.
-
-.PP
-The following
-.B Options
-are mostly important for non-x86 architectures:
-.TP
-.BI "Option \*qProgramFPRegs\*q \*q" boolean \*q
-Enable or disable programming of the flat panel registers.
-Beware that this may damage your panel, so use this
-.B at your own risk.
-The default depends on the device.
-.TP
-.BI "Option \*qPanelWidth\*q \*q" integer \*q
-.TP
-.BI "Option \*qPanelHeight\*q \*q" integer \*q
-Override the flat panel dimensions in pixels. They are used to program the flat panel
-registers and normally determined using the video card BIOS. If the wrong dimensions
-are used, the system may hang.
-.TP
-.BI "Option \*qUseFBDev\*q \*q" boolean \*q
-Enable or disable use of an OS-specific framebuffer device interface
-(which is not supported on all OSs).  See fbdevhw(__drivermansuffix__)
-for further information.
-Default: 
-.BI on 
-for PowerPC, 
-.BI off 
-for other architectures.
-.TP
-.BI "Option \*qDMAForXv\*q \*q" boolean \*q
-Try or don't try to use DMA for Xv image transfers. This will reduce CPU
-usage when playing big videos like DVDs, but may cause instabilities.
-Default: off.
-
-.PP
-The following additional
-.B Options
-are supported:
-.TP
-.BI "Option \*qShowCache\*q \*q" boolean \*q
-Enable or disable viewing offscreen cache memory.  A
-development debug option.  Default: off.
-.TP
-.BI "Option \*qVGAAccess\*q \*q" boolean \*q
-Tell the driver if it can do legacy VGA IOs to the card. This is
-necessary for properly resuming consoles when in VGA text mode, but
-shouldn't be if the console is using radeonfb or some other graphic
-mode driver. Some platforms like PowerPC have issues with those, and they aren't
-necessary unless you have a real text mode in console. The default is
-.B off
-on PowerPC and SPARC and
-.B on
-on other architectures.
-
-.PP
-.B Dualhead Note: 
-The video BIOS on some laptops interacts strangely with dualhead.
-This can result in flickering and problems changing modes on crtc2.
-If you experience these problems try toggling your laptop's video
-output switch (e.g., fn-f7, etc.) prior to starting X or switch to
-another VT and back.
-
-.SH "SEE ALSO"
-__xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__)
-.SH AUTHORS
-.nf
-Rickard E. (Rik) Faith   \fIfaith at precisioninsight.com\fP
-Kevin E. Martin          \fIkevin at precisioninsight.com\fP
diff --git a/src/r128.h b/src/r128.h
deleted file mode 100644
index 1205245..0000000
--- a/src/r128.h
+++ /dev/null
@@ -1,606 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Rickard E. Faith <faith at valinux.com>
- *   Kevin E. Martin <martin at valinux.com>
- *
- */
-
-#ifndef _R128_H_
-#define _R128_H_
-
-#include <unistd.h>
-#include "xf86str.h"
-
-				/* PCI support */
-#include "xf86Pci.h"
-
-				/* XAA and Cursor Support */
-#include "xaa.h"
-#include "xf86Cursor.h"
-
-				/* DDC support */
-#include "xf86DDC.h"
-
-				/* Xv support */
-#include "xf86xv.h"
-
-#include "r128_probe.h"
-
-				/* DRI support */
-#ifdef XF86DRI
-#define _XF86DRI_SERVER_
-#include "r128_dripriv.h"
-#include "dri.h"
-#include "GL/glxint.h"
-#endif
-
-#include "atipcirename.h"
-
-#define R128_DEBUG          0   /* Turn off debugging output               */
-#define R128_IDLE_RETRY    32   /* Fall out of idle loops after this count */
-#define R128_TIMEOUT  2000000   /* Fall out of wait loops after this count */
-#define R128_MMIOSIZE  0x4000
-
-#define R128_VBIOS_SIZE 0x00010000
-
-#if R128_DEBUG
-#define R128TRACE(x)                                          \
-    do {                                                      \
-	ErrorF("(**) %s(%d): ", R128_NAME, pScrn->scrnIndex); \
-	ErrorF x;                                             \
-    } while (0);
-#else
-#define R128TRACE(x)
-#endif
-
-
-/* Other macros */
-#define R128_ARRAY_SIZE(x)  (sizeof(x)/sizeof(x[0]))
-#define R128_ALIGN(x,bytes) (((x) + ((bytes) - 1)) & ~((bytes) - 1))
-#define R128PTR(pScrn) ((R128InfoPtr)(pScrn)->driverPrivate)
-
-typedef struct {        /* All values in XCLKS    */
-    int  ML;            /* Memory Read Latency    */
-    int  MB;            /* Memory Burst Length    */
-    int  Trcd;          /* RAS to CAS delay       */
-    int  Trp;           /* RAS percentage         */
-    int  Twr;           /* Write Recovery         */
-    int  CL;            /* CAS Latency            */
-    int  Tr2w;          /* Read to Write Delay    */
-    int  Rloop;         /* Loop Latency           */
-    int  Rloop_fudge;   /* Add to ML to get Rloop */
-    char *name;
-} R128RAMRec, *R128RAMPtr;
-
-typedef struct {
-				/* Common registers */
-    CARD32     ovr_clr;
-    CARD32     ovr_wid_left_right;
-    CARD32     ovr_wid_top_bottom;
-    CARD32     ov0_scale_cntl;
-    CARD32     mpp_tb_config;
-    CARD32     mpp_gp_config;
-    CARD32     subpic_cntl;
-    CARD32     viph_control;
-    CARD32     i2c_cntl_1;
-    CARD32     gen_int_cntl;
-    CARD32     cap0_trig_cntl;
-    CARD32     cap1_trig_cntl;
-    CARD32     bus_cntl;
-    CARD32     config_cntl;
-
-				/* Other registers to save for VT switches */
-    CARD32     dp_datatype;
-    CARD32     gen_reset_cntl;
-    CARD32     clock_cntl_index;
-    CARD32     amcgpio_en_reg;
-    CARD32     amcgpio_mask;
-
-				/* CRTC registers */
-    CARD32     crtc_gen_cntl;
-    CARD32     crtc_ext_cntl;
-    CARD32     dac_cntl;
-    CARD32     crtc_h_total_disp;
-    CARD32     crtc_h_sync_strt_wid;
-    CARD32     crtc_v_total_disp;
-    CARD32     crtc_v_sync_strt_wid;
-    CARD32     crtc_offset;
-    CARD32     crtc_offset_cntl;
-    CARD32     crtc_pitch;
-
-				/* CRTC2 registers */
-    CARD32     crtc2_gen_cntl;
-    CARD32     crtc2_h_total_disp;
-    CARD32     crtc2_h_sync_strt_wid;
-    CARD32     crtc2_v_total_disp;
-    CARD32     crtc2_v_sync_strt_wid;
-    CARD32     crtc2_offset;
-    CARD32     crtc2_offset_cntl;
-    CARD32     crtc2_pitch;
-
-				/* Flat panel registers */
-    CARD32     fp_crtc_h_total_disp;
-    CARD32     fp_crtc_v_total_disp;
-    CARD32     fp_gen_cntl;
-    CARD32     fp_h_sync_strt_wid;
-    CARD32     fp_horz_stretch;
-    CARD32     fp_panel_cntl;
-    CARD32     fp_v_sync_strt_wid;
-    CARD32     fp_vert_stretch;
-    CARD32     lvds_gen_cntl;
-    CARD32     tmds_crc;
-    CARD32     tmds_transmitter_cntl;
-
-				/* Computed values for PLL */
-    CARD32     dot_clock_freq;
-    CARD32     pll_output_freq;
-    int        feedback_div;
-    int        post_div;
-
-				/* PLL registers */
-    CARD32     ppll_ref_div;
-    CARD32     ppll_div_3;
-    CARD32     htotal_cntl;
-
-				/* Computed values for PLL2 */
-    CARD32     dot_clock_freq_2;
-    CARD32     pll_output_freq_2;
-    int        feedback_div_2;
-    int        post_div_2;
-
-				/* PLL2 registers */
-    CARD32     p2pll_ref_div;
-    CARD32     p2pll_div_0;
-    CARD32     htotal_cntl2;
-
-				/* DDA register */
-    CARD32     dda_config;
-    CARD32     dda_on_off;
-
-				/* DDA2 register */
-    CARD32     dda2_config;
-    CARD32     dda2_on_off;
-
-				/* Pallet */
-    Bool       palette_valid;
-    CARD32     palette[256];
-    CARD32     palette2[256];
-} R128SaveRec, *R128SavePtr;
-
-typedef struct {
-    CARD16        reference_freq;
-    CARD16        reference_div;
-    unsigned      min_pll_freq;
-    unsigned      max_pll_freq;
-    CARD16        xclk;
-} R128PLLRec, *R128PLLPtr;
-
-typedef struct {
-    int                bitsPerPixel;
-    int                depth;
-    int                displayWidth;
-    int                pixel_code;
-    int                pixel_bytes;
-    DisplayModePtr     mode;
-} R128FBLayout;
-
-typedef enum
-{
-    MT_NONE,
-    MT_CRT,
-    MT_LCD,
-    MT_DFP,
-    MT_CTV,
-    MT_STV
-} R128MonitorType;
-
-typedef struct {
-    EntityInfoPtr     pEnt;
-    pciVideoPtr       PciInfo;
-    PCITAG            PciTag;
-    int               Chipset;
-    Bool              Primary;
-
-    Bool              FBDev;
-
-    unsigned long     LinearAddr;   /* Frame buffer physical address         */
-    unsigned long     MMIOAddr;     /* MMIO region physical address          */
-    unsigned long     BIOSAddr;     /* BIOS physical address                 */
-
-    void              *MMIO;        /* Map of MMIO region                    */
-    void              *FB;          /* Map of frame buffer                   */
-
-    CARD32            MemCntl;
-    CARD32            BusCntl;
-    unsigned long     FbMapSize;    /* Size of frame buffer, in bytes        */
-    int               Flags;        /* Saved copy of mode flags              */
-
-    CARD8             BIOSDisplay;  /* Device the BIOS is set to display to  */
-
-    Bool              HasPanelRegs; /* Current chip can connect to a FP      */
-    CARD8             *VBIOS;       /* Video BIOS for mode validation on FPs */
-    int               FPBIOSstart;  /* Start of the flat panel info          */
-
-				/* Computed values for FPs */
-    int               PanelXRes;
-    int               PanelYRes;
-    int               HOverPlus;
-    int               HSyncWidth;
-    int               HBlank;
-    int               VOverPlus;
-    int               VSyncWidth;
-    int               VBlank;
-    int               PanelPwrDly;
-
-    R128PLLRec        pll;
-    R128RAMPtr        ram;
-
-    R128SaveRec       SavedReg;     /* Original (text) mode                  */
-    R128SaveRec       ModeReg;      /* Current mode                          */
-    Bool              (*CloseScreen)(int, ScreenPtr);
-    void              (*BlockHandler)(int, pointer, pointer, pointer);
-
-    Bool              PaletteSavedOnVT; /* Palette saved on last VT switch   */
-
-    XAAInfoRecPtr     accel;
-    Bool              accelOn;
-    xf86CursorInfoPtr cursor;
-    unsigned long     cursor_start;
-    unsigned long     cursor_end;
-
-    /*
-     * XAAForceTransBlit is used to change the behavior of the XAA
-     * SetupForScreenToScreenCopy function, to make it DGA-friendly.
-     */
-    Bool              XAAForceTransBlit;
-
-    int               fifo_slots;   /* Free slots in the FIFO (64 max)       */
-    int               pix24bpp;     /* Depth of pixmap for 24bpp framebuffer */
-    Bool              dac6bits;     /* Use 6 bit DAC?                        */
-
-				/* Computed values for Rage 128 */
-    int               pitch;
-    int               datatype;
-    CARD32            dp_gui_master_cntl;
-
-				/* Saved values for ScreenToScreenCopy */
-    int               xdir;
-    int               ydir;
-
-				/* ScanlineScreenToScreenColorExpand support */
-    unsigned char     *scratch_buffer[1];
-    unsigned char     *scratch_save;
-    int               scanline_x;
-    int               scanline_y;
-    int               scanline_w;
-    int               scanline_h;
-#ifdef XF86DRI
-    int               scanline_hpass;
-    int               scanline_x1clip;
-    int               scanline_x2clip;
-    int               scanline_rop;
-    int               scanline_fg;
-    int               scanline_bg;
-#endif /* XF86DRI */
-    int               scanline_words;
-    int               scanline_direct;
-    int               scanline_bpp; /* Only used for ImageWrite */
-
-    DGAModePtr        DGAModes;
-    int               numDGAModes;
-    Bool              DGAactive;
-    int               DGAViewportStatus;
-    DGAFunctionRec    DGAFuncs;
-
-    R128FBLayout      CurrentLayout;
-#ifdef XF86DRI
-    Bool              directRenderingEnabled;
-    DRIInfoPtr        pDRIInfo;
-    int               drmFD;
-    drm_context_t        drmCtx;
-    int               numVisualConfigs;
-    __GLXvisualConfig *pVisualConfigs;
-    R128ConfigPrivPtr pVisualConfigsPriv;
-
-    drm_handle_t         fbHandle;
-
-    drmSize           registerSize;
-    drm_handle_t         registerHandle;
-
-    Bool              IsPCI;            /* Current card is a PCI card */
-    drmSize           pciSize;
-    drm_handle_t         pciMemHandle;
-    drmAddress        PCI;              /* Map */
-
-    Bool              allowPageFlip;    /* Enable 3d page flipping */
-    Bool              have3DWindows;    /* Are there any 3d clients? */
-    int               drmMinor;
-
-    drmSize           agpSize;
-    drm_handle_t         agpMemHandle;     /* Handle from drmAgpAlloc */
-    unsigned long     agpOffset;
-    drmAddress        AGP;              /* Map */
-    int               agpMode;
-
-    Bool              CCEInUse;         /* CCE is currently active */
-    int               CCEMode;          /* CCE mode that server/clients use */
-    int               CCEFifoSize;      /* Size of the CCE command FIFO */
-    Bool              CCESecure;        /* CCE security enabled */
-    int               CCEusecTimeout;   /* CCE timeout in usecs */
-
-				/* CCE ring buffer data */
-    unsigned long     ringStart;        /* Offset into AGP space */
-    drm_handle_t         ringHandle;       /* Handle from drmAddMap */
-    drmSize           ringMapSize;      /* Size of map */
-    int               ringSize;         /* Size of ring (in MB) */
-    drmAddress        ring;             /* Map */
-    int               ringSizeLog2QW;
-
-    unsigned long     ringReadOffset;   /* Offset into AGP space */
-    drm_handle_t         ringReadPtrHandle; /* Handle from drmAddMap */
-    drmSize           ringReadMapSize;  /* Size of map */
-    drmAddress        ringReadPtr;      /* Map */
-
-				/* CCE vertex/indirect buffer data */
-    unsigned long     bufStart;        /* Offset into AGP space */
-    drm_handle_t         bufHandle;       /* Handle from drmAddMap */
-    drmSize           bufMapSize;      /* Size of map */
-    int               bufSize;         /* Size of buffers (in MB) */
-    drmAddress        buf;             /* Map */
-    int               bufNumBufs;      /* Number of buffers */
-    drmBufMapPtr      buffers;         /* Buffer map */
-
-				/* CCE AGP Texture data */
-    unsigned long     agpTexStart;      /* Offset into AGP space */
-    drm_handle_t         agpTexHandle;     /* Handle from drmAddMap */
-    drmSize           agpTexMapSize;    /* Size of map */
-    int               agpTexSize;       /* Size of AGP tex space (in MB) */
-    drmAddress        agpTex;           /* Map */
-    int               log2AGPTexGran;
-
-				/* CCE 2D accleration */
-    drmBufPtr         indirectBuffer;
-    int               indirectStart;
-
-				/* DRI screen private data */
-    int               fbX;
-    int               fbY;
-    int               backX;
-    int               backY;
-    int               depthX;
-    int               depthY;
-
-    int               frontOffset;
-    int               frontPitch;
-    int               backOffset;
-    int               backPitch;
-    int               depthOffset;
-    int               depthPitch;
-    int               spanOffset;
-    int               textureOffset;
-    int               textureSize;
-    int               log2TexGran;
-
-				/* Saved scissor values */
-    CARD32            sc_left;
-    CARD32            sc_right;
-    CARD32            sc_top;
-    CARD32            sc_bottom;
-
-    CARD32            re_top_left;
-    CARD32            re_width_height;
-
-    CARD32            aux_sc_cntl;
-
-    int               irq;
-    CARD32            gen_int_cntl;
-
-    Bool              DMAForXv;
-#endif
-
-    XF86VideoAdaptorPtr adaptor;
-    void              (*VideoTimerCallback)(ScrnInfoPtr, Time);
-    int               videoKey;
-    Bool              showCache;
-    OptionInfoPtr     Options;
-
-    Bool              isDFP;
-    Bool              isPro2;
-    I2CBusPtr         pI2CBus;
-    CARD32            DDCReg;
-
-    Bool              VGAAccess;
-
-    /****** Added for dualhead support *******************/
-    BOOL              HasCRTC2;     /* M3/M4 */
-    BOOL              IsSecondary;  /* second Screen */
-    BOOL	      IsPrimary;    /* primary Screen */
-    BOOL              UseCRT;       /* force use CRT port as primary */
-    BOOL              SwitchingMode;
-    R128MonitorType DisplayType;  /* Monitor connected on*/
-
-} R128InfoRec, *R128InfoPtr;
-
-#define R128WaitForFifo(pScrn, entries)                                      \
-do {                                                                         \
-    if (info->fifo_slots < entries) R128WaitForFifoFunction(pScrn, entries); \
-    info->fifo_slots -= entries;                                             \
-} while (0)
-
-extern R128EntPtr R128EntPriv(ScrnInfoPtr pScrn);
-extern void        R128WaitForFifoFunction(ScrnInfoPtr pScrn, int entries);
-extern void        R128WaitForIdle(ScrnInfoPtr pScrn);
-extern void        R128EngineReset(ScrnInfoPtr pScrn);
-extern void        R128EngineFlush(ScrnInfoPtr pScrn);
-
-extern unsigned    R128INPLL(ScrnInfoPtr pScrn, int addr);
-extern void        R128WaitForVerticalSync(ScrnInfoPtr pScrn);
-
-extern Bool        R128AccelInit(ScreenPtr pScreen);
-extern void        R128EngineInit(ScrnInfoPtr pScrn);
-extern Bool        R128CursorInit(ScreenPtr pScreen);
-extern Bool        R128DGAInit(ScreenPtr pScreen);
-
-extern int         R128MinBits(int val);
-
-extern void        R128InitVideo(ScreenPtr pScreen);
-
-#ifdef XF86DRI
-extern Bool        R128DRIScreenInit(ScreenPtr pScreen);
-extern void        R128DRICloseScreen(ScreenPtr pScreen);
-extern Bool        R128DRIFinishScreenInit(ScreenPtr pScreen);
-
-#define R128CCE_START(pScrn, info)					\
-do {									\
-    int _ret = drmCommandNone(info->drmFD, DRM_R128_CCE_START);		\
-    if (_ret) {								\
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,				\
-		   "%s: CCE start %d\n", __FUNCTION__, _ret);		\
-    }									\
-} while (0)
-
-#define R128CCE_STOP(pScrn, info)					\
-do {									\
-    int _ret = R128CCEStop(pScrn);					\
-    if (_ret) {								\
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,				\
-		   "%s: CCE stop %d\n", __FUNCTION__, _ret);		\
-    }									\
-} while (0)
-
-#define R128CCE_RESET(pScrn, info)					\
-do {									\
-    if (info->directRenderingEnabled					\
-	&& R128CCE_USE_RING_BUFFER(info->CCEMode)) {			\
-	int _ret = drmCommandNone(info->drmFD, DRM_R128_CCE_RESET);	\
-	if (_ret) {							\
-	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,			\
-		       "%s: CCE reset %d\n", __FUNCTION__, _ret);	\
-	}								\
-    }									\
-} while (0)
-
-extern drmBufPtr   R128CCEGetBuffer(ScrnInfoPtr pScrn);
-#endif
-
-extern void        R128CCEFlushIndirect(ScrnInfoPtr pScrn, int discard);
-extern void        R128CCEReleaseIndirect(ScrnInfoPtr pScrn);
-extern void        R128CCEWaitForIdle(ScrnInfoPtr pScrn);
-extern int         R128CCEStop(ScrnInfoPtr pScrn);
-
-
-#define CCE_PACKET0( reg, n )						\
-	(R128_CCE_PACKET0 | ((n) << 16) | ((reg) >> 2))
-#define CCE_PACKET1( reg0, reg1 )					\
-	(R128_CCE_PACKET1 | (((reg1) >> 2) << 11) | ((reg0) >> 2))
-#define CCE_PACKET2()							\
-	(R128_CCE_PACKET2)
-#define CCE_PACKET3( pkt, n )						\
-	(R128_CCE_PACKET3 | (pkt) | ((n) << 16))
-
-
-#define R128_VERBOSE	0
-
-#define RING_LOCALS	CARD32 *__head; int __count;
-
-#define R128CCE_REFRESH(pScrn, info)					\
-do {									\
-   if ( R128_VERBOSE ) {						\
-      xf86DrvMsg( pScrn->scrnIndex, X_INFO, "REFRESH( %d ) in %s\n",	\
-		  !info->CCEInUse , __FUNCTION__ );			\
-   }									\
-   if ( !info->CCEInUse ) {						\
-      R128CCEWaitForIdle(pScrn);					\
-      BEGIN_RING( 6 );							\
-      OUT_RING_REG( R128_RE_TOP_LEFT,     info->re_top_left );		\
-      OUT_RING_REG( R128_RE_WIDTH_HEIGHT, info->re_width_height );	\
-      OUT_RING_REG( R128_AUX_SC_CNTL,     info->aux_sc_cntl );		\
-      ADVANCE_RING();							\
-      info->CCEInUse = TRUE;						\
-   }									\
-} while (0)
-
-#define BEGIN_RING( n ) do {						\
-   if ( R128_VERBOSE ) {						\
-      xf86DrvMsg( pScrn->scrnIndex, X_INFO,				\
-		  "BEGIN_RING( %d ) in %s\n", n, __FUNCTION__ );	\
-   }									\
-   if ( !info->indirectBuffer ) {					\
-      info->indirectBuffer = R128CCEGetBuffer( pScrn );			\
-      info->indirectStart = 0;						\
-   } else if ( (info->indirectBuffer->used + 4*(n)) >			\
-                info->indirectBuffer->total ) {				\
-      R128CCEFlushIndirect( pScrn, 1 );					\
-   }									\
-   __head = (pointer)((char *)info->indirectBuffer->address +		\
-		       info->indirectBuffer->used);			\
-   __count = 0;								\
-} while (0)
-
-#define ADVANCE_RING() do {						\
-   if ( R128_VERBOSE ) {						\
-      xf86DrvMsg( pScrn->scrnIndex, X_INFO,				\
-		  "ADVANCE_RING() used: %d+%d=%d/%d\n",			\
-		  info->indirectBuffer->used - info->indirectStart,	\
-		  __count * (int)sizeof(CARD32),			\
-		  info->indirectBuffer->used - info->indirectStart +	\
-		  __count * (int)sizeof(CARD32),			\
-		  info->indirectBuffer->total - info->indirectStart );	\
-   }									\
-   info->indirectBuffer->used += __count * (int)sizeof(CARD32);		\
-} while (0)
-
-#define OUT_RING( x ) do {						\
-   if ( R128_VERBOSE ) {						\
-      xf86DrvMsg( pScrn->scrnIndex, X_INFO,				\
-		  "   OUT_RING( 0x%08x )\n", (unsigned int)(x) );	\
-   }									\
-   MMIO_OUT32(&__head[__count++], 0, (x));				\
-} while (0)
-
-#define OUT_RING_REG( reg, val )					\
-do {									\
-   OUT_RING( CCE_PACKET0( reg, 0 ) );					\
-   OUT_RING( val );							\
-} while (0)
-
-#define FLUSH_RING()							\
-do {									\
-   if ( R128_VERBOSE )							\
-      xf86DrvMsg( pScrn->scrnIndex, X_INFO,				\
-		  "FLUSH_RING in %s\n", __FUNCTION__ );			\
-   if ( info->indirectBuffer ) {					\
-      R128CCEFlushIndirect( pScrn, 0 );					\
-   }									\
-} while (0)
-
-#endif
diff --git a/src/r128_accel.c b/src/r128_accel.c
deleted file mode 100644
index 8870682..0000000
--- a/src/r128_accel.c
+++ /dev/null
@@ -1,1880 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/*
- * Authors:
- *   Rickard E. Faith <faith at valinux.com>
- *   Kevin E. Martin <martin at valinux.com>
- *   Alan Hourihane <alanh at fairlite.demon.co.uk>
- *
- * Credits:
- *
- *   Thanks to Alan Hourihane <alanh at fairlite.demon..co.uk> and SuSE for
- *   providing source code to their 3.3.x Rage 128 driver.  Portions of
- *   this file are based on the acceleration code for that driver.
- *
- * References:
- *
- *   RAGE 128 VR/ RAGE 128 GL Register Reference Manual (Technical
- *   Reference Manual P/N RRG-G04100-C Rev. 0.04), ATI Technologies: April
- *   1999.
- *
- *   RAGE 128 Software Development Manual (Technical Reference Manual P/N
- *   SDK-G04000 Rev. 0.01), ATI Technologies: June 1999.
- *
- * Notes on unimplemented XAA optimizations:
- *
- *   SetClipping:   The Rage128 doesn't support the full 16bit registers needed
- *                  for XAA clip rect support.
- *   SolidFillTrap: This will probably work if we can compute the correct
- *                  Bresenham error values.
- *   TwoPointLine:  The Rage 128 supports Bresenham lines instead.
- *   DashedLine with non-power-of-two pattern length: Apparently, there is
- *                  no way to set the length of the pattern -- it is always
- *                  assumed to be 8 or 32 (or 1024?).
- *   ScreenToScreenColorExpandFill: See p. 4-17 of the Technical Reference
- *                  Manual where it states that monochrome expansion of frame
- *                  buffer data is not supported.
- *   CPUToScreenColorExpandFill, direct: The implementation here uses a hybrid
- *                  direct/indirect method.  If we had more data registers,
- *                  then we could do better.  If XAA supported a trigger write
- *                  address, the code would be simpler.
- * (Alan Hourihane) Update. We now use purely indirect and clip the full
- *                  rectangle. Seems as the direct method has some problems
- *                  with this, although this indirect method is much faster
- *                  than the old method of setting up the engine per scanline.
- *                  This code was the basis of the Radeon work we did.
- *   Color8x8PatternFill: Apparently, an 8x8 color brush cannot take an 8x8
- *                  pattern from frame buffer memory.
- *   ImageWrites:   See CPUToScreenColorExpandFill.
- *
- */
-
-#define R128_TRAPEZOIDS 0       /* Trapezoids don't work               */
-
-				/* Driver data structures */
-#include <errno.h>
-
-#include "r128.h"
-#include "r128_reg.h"
-#include "r128_probe.h"
-#ifdef XF86DRI
-#include "r128_sarea.h"
-#define _XF86DRI_SERVER_
-#include "r128_dri.h"
-#include "r128_common.h"
-#endif
-
-				/* Line support */
-#include "miline.h"
-
-				/* X and server generic header files */
-#include "xf86.h"
-
-static struct {
-    int rop;
-    int pattern;
-} R128_ROP[] = {
-    { R128_ROP3_ZERO, R128_ROP3_ZERO }, /* GXclear        */
-    { R128_ROP3_DSa,  R128_ROP3_DPa  }, /* Gxand          */
-    { R128_ROP3_SDna, R128_ROP3_PDna }, /* GXandReverse   */
-    { R128_ROP3_S,    R128_ROP3_P    }, /* GXcopy         */
-    { R128_ROP3_DSna, R128_ROP3_DPna }, /* GXandInverted  */
-    { R128_ROP3_D,    R128_ROP3_D    }, /* GXnoop         */
-    { R128_ROP3_DSx,  R128_ROP3_DPx  }, /* GXxor          */
-    { R128_ROP3_DSo,  R128_ROP3_DPo  }, /* GXor           */
-    { R128_ROP3_DSon, R128_ROP3_DPon }, /* GXnor          */
-    { R128_ROP3_DSxn, R128_ROP3_PDxn }, /* GXequiv        */
-    { R128_ROP3_Dn,   R128_ROP3_Dn   }, /* GXinvert       */
-    { R128_ROP3_SDno, R128_ROP3_PDno }, /* GXorReverse    */
-    { R128_ROP3_Sn,   R128_ROP3_Pn   }, /* GXcopyInverted */
-    { R128_ROP3_DSno, R128_ROP3_DPno }, /* GXorInverted   */
-    { R128_ROP3_DSan, R128_ROP3_DPan }, /* GXnand         */
-    { R128_ROP3_ONE,  R128_ROP3_ONE  }  /* GXset          */
-};
-
-extern int getR128EntityIndex(void);
-
-/* Flush all dirty data in the Pixel Cache to memory. */
-void R128EngineFlush(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           i;
-
-    OUTREGP(R128_PC_NGUI_CTLSTAT, R128_PC_FLUSH_ALL, ~R128_PC_FLUSH_ALL);
-    for (i = 0; i < R128_TIMEOUT; i++) {
-	if (!(INREG(R128_PC_NGUI_CTLSTAT) & R128_PC_BUSY)) break;
-    }
-}
-
-/* Reset graphics card to known state. */
-void R128EngineReset(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    CARD32        clock_cntl_index;
-    CARD32        mclk_cntl;
-    CARD32        gen_reset_cntl;
-
-    R128EngineFlush(pScrn);
-
-    clock_cntl_index = INREG(R128_CLOCK_CNTL_INDEX);
-    mclk_cntl        = INPLL(pScrn, R128_MCLK_CNTL);
-
-    OUTPLL(R128_MCLK_CNTL, mclk_cntl | R128_FORCE_GCP | R128_FORCE_PIPE3D_CP);
-
-    gen_reset_cntl   = INREG(R128_GEN_RESET_CNTL);
-
-    OUTREG(R128_GEN_RESET_CNTL, gen_reset_cntl | R128_SOFT_RESET_GUI);
-    INREG(R128_GEN_RESET_CNTL);
-    OUTREG(R128_GEN_RESET_CNTL,
-	gen_reset_cntl & (CARD32)(~R128_SOFT_RESET_GUI));
-    INREG(R128_GEN_RESET_CNTL);
-
-    OUTPLL(R128_MCLK_CNTL,        mclk_cntl);
-    OUTREG(R128_CLOCK_CNTL_INDEX, clock_cntl_index);
-    OUTREG(R128_GEN_RESET_CNTL,   gen_reset_cntl);
-}
-
-/* The FIFO has 64 slots.  This routines waits until at least `entries' of
-   these slots are empty. */
-void R128WaitForFifoFunction(ScrnInfoPtr pScrn, int entries)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           i;
-
-    for (;;) {
-	for (i = 0; i < R128_TIMEOUT; i++) {
-	    info->fifo_slots = INREG(R128_GUI_STAT) & R128_GUI_FIFOCNT_MASK;
-	    if (info->fifo_slots >= entries) return;
-	}
-	R128TRACE(("FIFO timed out: %d entries, stat=0x%08x, probe=0x%08x\n",
-		   INREG(R128_GUI_STAT) & R128_GUI_FIFOCNT_MASK,
-		   INREG(R128_GUI_STAT),
-		   INREG(R128_GUI_PROBE)));
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "FIFO timed out, resetting engine...\n");
-	R128EngineReset(pScrn);
-#ifdef XF86DRI
-	R128CCE_RESET(pScrn, info);
-	if (info->directRenderingEnabled) {
-	    R128CCE_START(pScrn, info);
-	}
-#endif
-    }
-}
-
-/* Wait for the graphics engine to be completely idle: the FIFO has
-   drained, the Pixel Cache is flushed, and the engine is idle.  This is a
-   standard "sync" function that will make the hardware "quiescent". */
-void R128WaitForIdle(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           i;
-
-    R128WaitForFifoFunction(pScrn, 64);
-
-    for (;;) {
-	for (i = 0; i < R128_TIMEOUT; i++) {
-	    if (!(INREG(R128_GUI_STAT) & R128_GUI_ACTIVE)) {
-		R128EngineFlush(pScrn);
-		return;
-	    }
-	}
-	R128TRACE(("Idle timed out: %d entries, stat=0x%08x, probe=0x%08x\n",
-		   INREG(R128_GUI_STAT) & R128_GUI_FIFOCNT_MASK,
-		   INREG(R128_GUI_STAT),
-		   INREG(R128_GUI_PROBE)));
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "Idle timed out, resetting engine...\n");
-#ifdef XF86DRI
-        R128CCE_STOP(pScrn, info);
-#endif
-	R128EngineReset(pScrn);
-#ifdef XF86DRI
-	R128CCE_RESET(pScrn, info);
-	if (info->directRenderingEnabled) {
-	    R128CCE_START(pScrn, info);
-	}
-#endif
-    }
-}
-
-#ifdef XF86DRI
-/* Wait until the CCE is completely idle: the FIFO has drained and the
- * CCE is idle.
- */
-void R128CCEWaitForIdle(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info = R128PTR(pScrn);
-    int         ret, i;
-
-    FLUSH_RING();
-
-    for (;;) {
-        i = 0;
-        do {
-            ret = drmCommandNone(info->drmFD, DRM_R128_CCE_IDLE);
-        } while ( ret && errno == EBUSY && i++ < (R128_IDLE_RETRY * R128_IDLE_RETRY) );
-
-	if (ret && ret != -EBUSY) {
-	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		       "%s: CCE idle %d\n", __FUNCTION__, ret);
-	}
-
-	if (i > R128_IDLE_RETRY) {
-	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		       "%s: (DEBUG) CCE idle took i = %d\n", __FUNCTION__, i);
-	}
-
-	if (ret == 0) return;
-
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "Idle timed out, resetting engine...\n");
-	R128CCE_STOP(pScrn, info);
-	R128EngineReset(pScrn);
-
-	/* Always restart the engine when doing CCE 2D acceleration */
-	R128CCE_RESET(pScrn, info);
-	R128CCE_START(pScrn, info);
-    }
-}
-
-int R128CCEStop(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr    info = R128PTR(pScrn);
-    drmR128CCEStop stop;
-    int            ret, i;
-
-    stop.flush = 1;
-    stop.idle  = 1;
-
-    ret = drmCommandWrite( info->drmFD, DRM_R128_CCE_STOP,
-                           &stop, sizeof(drmR128CCEStop) );
-
-    if ( ret == 0 ) {
-        return 0;
-    } else if ( errno != EBUSY ) {
-        return -errno;
-    }
-
-    stop.flush = 0;
-
-    i = 0;
-    do {
-        ret = drmCommandWrite( info->drmFD, DRM_R128_CCE_STOP,
-                               &stop, sizeof(drmR128CCEStop) );
-    } while ( ret && errno == EBUSY && i++ < R128_IDLE_RETRY );
-
-    if ( ret == 0 ) {
-        return 0;
-    } else if ( errno != EBUSY ) {
-        return -errno;
-    }
-
-    stop.idle = 0;
-
-    if ( drmCommandWrite( info->drmFD, DRM_R128_CCE_STOP,
-                          &stop, sizeof(drmR128CCEStop) )) {
-        return -errno;
-    } else {
-        return 0;
-    }
-}
-
-#endif
-
-/* Setup for XAA SolidFill. */
-static void R128SetupForSolidFill(ScrnInfoPtr pScrn,
-				  int color, int rop, unsigned int planemask)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128WaitForFifo(pScrn, 4);
-    OUTREG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | R128_GMC_BRUSH_SOLID_COLOR
-				     | R128_GMC_SRC_DATATYPE_COLOR
-				     | R128_ROP[rop].pattern));
-    OUTREG(R128_DP_BRUSH_FRGD_CLR,  color);
-    OUTREG(R128_DP_WRITE_MASK,      planemask);
-    OUTREG(R128_DP_CNTL,            (R128_DST_X_LEFT_TO_RIGHT
-				     | R128_DST_Y_TOP_TO_BOTTOM));
-}
-
-/* Subsequent XAA SolidFillRect.
-
-   Tests: xtest CH06/fllrctngl, xterm
-*/
-static void  R128SubsequentSolidFillRect(ScrnInfoPtr pScrn,
-					 int x, int y, int w, int h)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128WaitForFifo(pScrn, 2);
-    OUTREG(R128_DST_Y_X,          (y << 16) | x);
-    OUTREG(R128_DST_WIDTH_HEIGHT, (w << 16) | h);
-}
-
-/* Setup for XAA solid lines. */
-static void R128SetupForSolidLine(ScrnInfoPtr pScrn,
-				  int color, int rop, unsigned int planemask)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128WaitForFifo(pScrn, 3);
-    OUTREG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | R128_GMC_BRUSH_SOLID_COLOR
-				     | R128_GMC_SRC_DATATYPE_COLOR
-				     | R128_ROP[rop].pattern));
-    OUTREG(R128_DP_BRUSH_FRGD_CLR,  color);
-    OUTREG(R128_DP_WRITE_MASK,      planemask);
-}
-
-
-/* Subsequent XAA solid Bresenham line.
-
-   Tests: xtest CH06/drwln, ico, Mark Vojkovich's linetest program
-
-   [See http://www.xfree86.org/devel/archives/devel/1999-Jun/0102.shtml for
-   Mark Vojkovich's linetest program, posted 2Jun99 to devel at xfree86.org.]
-
-   x11perf -line500
-                               1024x768 at 76Hz   1024x768 at 76Hz
-                                        8bpp           32bpp
-   not used:                     39700.0/sec     34100.0/sec
-   used:                         47600.0/sec     36800.0/sec
-*/
-static void R128SubsequentSolidBresenhamLine(ScrnInfoPtr pScrn,
-					     int x, int y,
-					     int major, int minor,
-					     int err, int len, int octant)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           flags     = 0;
-
-    if (octant & YMAJOR)         flags |= R128_DST_Y_MAJOR;
-    if (!(octant & XDECREASING)) flags |= R128_DST_X_DIR_LEFT_TO_RIGHT;
-    if (!(octant & YDECREASING)) flags |= R128_DST_Y_DIR_TOP_TO_BOTTOM;
-
-    R128WaitForFifo(pScrn, 6);
-    OUTREG(R128_DP_CNTL_XDIR_YDIR_YMAJOR, flags);
-    OUTREG(R128_DST_Y_X,                  (y << 16) | x);
-    OUTREG(R128_DST_BRES_ERR,             err);
-    OUTREG(R128_DST_BRES_INC,             minor);
-    OUTREG(R128_DST_BRES_DEC,             -major);
-    OUTREG(R128_DST_BRES_LNTH,            len);
-}
-
-/* Subsequent XAA solid horizontal and vertical lines
-
-   1024x768 at 76Hz 8bpp
-                             Without             With
-   x11perf -hseg500      87600.0/sec     798000.0/sec
-   x11perf -vseg500      38100.0/sec      38000.0/sec
-*/
-static void R128SubsequentSolidHorVertLine(ScrnInfoPtr pScrn,
-					   int x, int y, int len, int dir )
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128WaitForFifo(pScrn, 1);
-    OUTREG(R128_DP_CNTL, (R128_DST_X_LEFT_TO_RIGHT
-			  | R128_DST_Y_TOP_TO_BOTTOM));
-
-    if (dir == DEGREES_0) {
-	R128SubsequentSolidFillRect(pScrn, x, y, len, 1);
-    } else {
-	R128SubsequentSolidFillRect(pScrn, x, y, 1, len);
-    }
-}
-
-/* Setup for XAA dashed lines.
-
-   Tests: xtest CH05/stdshs, XFree86/drwln
-
-   NOTE: Since we can only accelerate lines with power-of-2 patterns of
-   length <= 32, these x11perf numbers are not representative of the
-   speed-up on appropriately-sized patterns.
-
-   1024x768 at 76Hz 8bpp
-                             Without             With
-   x11perf -dseg100     218000.0/sec     222000.0/sec
-   x11perf -dline100    215000.0/sec     221000.0/sec
-   x11perf -ddline100   178000.0/sec     180000.0/sec
-*/
-static void R128SetupForDashedLine(ScrnInfoPtr pScrn,
-				   int fg, int bg,
-				   int rop, unsigned int planemask,
-				   int length, unsigned char *pattern)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    CARD32        pat       = *(CARD32 *)(pointer)pattern;
-
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-# define PAT_SHIFT(pat,n) pat << n
-#else
-# define PAT_SHIFT(pat,n) pat >> n
-#endif
-
-    switch (length) {
-    case  2: pat |= PAT_SHIFT(pat,2); /* fall through */
-    case  4: pat |= PAT_SHIFT(pat,4); /* fall through */
-    case  8: pat |= PAT_SHIFT(pat,8); /* fall through */
-    case 16: pat |= PAT_SHIFT(pat,16);
-    }
-
-    R128WaitForFifo(pScrn, 5);
-    OUTREG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | (bg == -1
-					? R128_GMC_BRUSH_32x1_MONO_FG_LA
-					: R128_GMC_BRUSH_32x1_MONO_FG_BG)
-				     | R128_ROP[rop].pattern
-				     | R128_GMC_BYTE_LSB_TO_MSB));
-    OUTREG(R128_DP_WRITE_MASK,      planemask);
-    OUTREG(R128_DP_BRUSH_FRGD_CLR,  fg);
-    OUTREG(R128_DP_BRUSH_BKGD_CLR,  bg);
-    OUTREG(R128_BRUSH_DATA0,        pat);
-}
-
-/* Subsequent XAA dashed line. */
-static void R128SubsequentDashedBresenhamLine(ScrnInfoPtr pScrn,
-					      int x, int y,
-					      int major, int minor,
-					      int err, int len, int octant,
-					      int phase)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           flags     = 0;
-
-    if (octant & YMAJOR)         flags |= R128_DST_Y_MAJOR;
-    if (!(octant & XDECREASING)) flags |= R128_DST_X_DIR_LEFT_TO_RIGHT;
-    if (!(octant & YDECREASING)) flags |= R128_DST_Y_DIR_TOP_TO_BOTTOM;
-
-    R128WaitForFifo(pScrn, 7);
-    OUTREG(R128_DP_CNTL_XDIR_YDIR_YMAJOR, flags);
-    OUTREG(R128_DST_Y_X,                  (y << 16) | x);
-    OUTREG(R128_BRUSH_Y_X,                (phase << 16) | phase);
-    OUTREG(R128_DST_BRES_ERR,             err);
-    OUTREG(R128_DST_BRES_INC,             minor);
-    OUTREG(R128_DST_BRES_DEC,             -major);
-    OUTREG(R128_DST_BRES_LNTH,            len);
-}
-
-#if R128_TRAPEZOIDS
-				/* This doesn't work.  Except in the
-				   lower-left quadrant, all of the pixel
-				   errors appear to be because eL and eR
-				   are not correct.  Drawing from right to
-				   left doesn't help.  Be aware that the
-				   non-_SUB registers set the sub-pixel
-				   values to 0.5 (0x08), which isn't what
-				   XAA wants. */
-/* Subsequent XAA SolidFillTrap.  XAA always passes data that assumes we
-   fill from top to bottom, so dyL and dyR are always non-negative. */
-static void R128SubsequentSolidFillTrap(ScrnInfoPtr pScrn, int y, int h,
-					int left, int dxL, int dyL, int eL,
-					int right, int dxR, int dyR, int eR)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           flags     = 0;
-    int           Lymajor   = 0;
-    int           Rymajor   = 0;
-    int           origdxL   = dxL;
-    int           origdxR   = dxR;
-
-    R128TRACE(("Trap %d %d; L %d %d %d %d; R %d %d %d %d\n",
-	       y, h,
-	       left, dxL, dyL, eL,
-	       right, dxR, dyR, eR));
-
-    if (dxL < 0)    dxL = -dxL; else flags |= (1 << 0) /* | (1 << 8) */;
-    if (dxR < 0)    dxR = -dxR; else flags |= (1 << 6);
-
-    R128WaitForFifo(pScrn, 11);
-
-#if 1
-    OUTREG(R128_DP_CNTL,            flags | (1 << 1) | (1 << 7));
-    OUTREG(R128_DST_Y_SUB,          ((y) << 4) | 0x0 );
-    OUTREG(R128_DST_X_SUB,          ((left) << 4)|0x0);
-    OUTREG(R128_TRAIL_BRES_ERR,     eR-dxR);
-    OUTREG(R128_TRAIL_BRES_INC,     dxR);
-    OUTREG(R128_TRAIL_BRES_DEC,     -dyR);
-    OUTREG(R128_TRAIL_X_SUB,        ((right) << 4) | 0x0);
-    OUTREG(R128_LEAD_BRES_ERR,      eL-dxL);
-    OUTREG(R128_LEAD_BRES_INC,      dxL);
-    OUTREG(R128_LEAD_BRES_DEC,      -dyL);
-    OUTREG(R128_LEAD_BRES_LNTH_SUB, ((h) << 4) | 0x00);
-#else
-    OUTREG(R128_DP_CNTL,            flags | (1 << 1) );
-    OUTREG(R128_DST_Y_SUB,          (y << 4));
-    OUTREG(R128_DST_X_SUB,          (right << 4));
-    OUTREG(R128_TRAIL_BRES_ERR,     eL);
-    OUTREG(R128_TRAIL_BRES_INC,     dxL);
-    OUTREG(R128_TRAIL_BRES_DEC,     -dyL);
-    OUTREG(R128_TRAIL_X_SUB,        (left << 4) | 0);
-    OUTREG(R128_LEAD_BRES_ERR,      eR);
-    OUTREG(R128_LEAD_BRES_INC,      dxR);
-    OUTREG(R128_LEAD_BRES_DEC,      -dyR);
-    OUTREG(R128_LEAD_BRES_LNTH_SUB, h << 4);
-#endif
-}
-#endif
-
-/* Setup for XAA screen-to-screen copy.
-
-   Tests: xtest CH06/fllrctngl (also tests transparency).
-*/
-static void R128SetupForScreenToScreenCopy(ScrnInfoPtr pScrn,
-					   int xdir, int ydir, int rop,
-					   unsigned int planemask,
-					   int trans_color)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    info->xdir = xdir;
-    info->ydir = ydir;
-    R128WaitForFifo(pScrn, 3);
-    OUTREG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | R128_GMC_BRUSH_SOLID_COLOR
-				     | R128_GMC_SRC_DATATYPE_COLOR
-				     | R128_ROP[rop].rop
-				     | R128_DP_SRC_SOURCE_MEMORY));
-    OUTREG(R128_DP_WRITE_MASK,      planemask);
-    OUTREG(R128_DP_CNTL,            ((xdir >= 0 ? R128_DST_X_LEFT_TO_RIGHT : 0)
-				     | (ydir >= 0
-					? R128_DST_Y_TOP_TO_BOTTOM
-					: 0)));
-
-    if ((trans_color != -1) || (info->XAAForceTransBlit == TRUE)) {
-				/* Set up for transparency */
-	R128WaitForFifo(pScrn, 3);
-	OUTREG(R128_CLR_CMP_CLR_SRC, trans_color);
-	OUTREG(R128_CLR_CMP_MASK,    R128_CLR_CMP_MSK);
-	OUTREG(R128_CLR_CMP_CNTL,    (R128_SRC_CMP_NEQ_COLOR
-				      | R128_CLR_CMP_SRC_SOURCE));
-    }
-}
-
-/* Subsequent XAA screen-to-screen copy. */
-static void R128SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn,
-					     int xa, int ya,
-					     int xb, int yb,
-					     int w, int h)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    if (info->xdir < 0) xa += w - 1, xb += w - 1;
-    if (info->ydir < 0) ya += h - 1, yb += h - 1;
-
-    R128WaitForFifo(pScrn, 3);
-    OUTREG(R128_SRC_Y_X,          (ya << 16) | xa);
-    OUTREG(R128_DST_Y_X,          (yb << 16) | xb);
-    OUTREG(R128_DST_HEIGHT_WIDTH, (h << 16) | w);
-}
-
-/* Setup for XAA mono 8x8 pattern color expansion.  Patterns with
-   transparency use `bg == -1'.  This routine is only used if the XAA
-   pixmap cache is turned on.
-
-   Tests: xtest XFree86/fllrctngl (no other test will test this routine with
-                                   both transparency and non-transparency)
-
-   1024x768 at 76Hz 8bpp
-                             Without             With
-   x11perf -srect100     38600.0/sec      85700.0/sec
-   x11perf -osrect100    38600.0/sec      85700.0/sec
-*/
-static void R128SetupForMono8x8PatternFill(ScrnInfoPtr pScrn,
-					   int patternx, int patterny,
-					   int fg, int bg, int rop,
-					   unsigned int planemask)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128WaitForFifo(pScrn, 6);
-    OUTREG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | (bg == -1
-					? R128_GMC_BRUSH_8X8_MONO_FG_LA
-					: R128_GMC_BRUSH_8X8_MONO_FG_BG)
-				     | R128_ROP[rop].pattern
-				     | R128_GMC_BYTE_LSB_TO_MSB));
-    OUTREG(R128_DP_WRITE_MASK,      planemask);
-    OUTREG(R128_DP_BRUSH_FRGD_CLR,  fg);
-    OUTREG(R128_DP_BRUSH_BKGD_CLR,  bg);
-    OUTREG(R128_BRUSH_DATA0,        patternx);
-    OUTREG(R128_BRUSH_DATA1,        patterny);
-}
-
-/* Subsequent XAA 8x8 pattern color expansion.  Because they are used in
-   the setup function, `patternx' and `patterny' are not used here. */
-static void R128SubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn,
-						 int patternx, int patterny,
-						 int x, int y, int w, int h)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128WaitForFifo(pScrn, 3);
-    OUTREG(R128_BRUSH_Y_X,        (patterny << 8) | patternx);
-    OUTREG(R128_DST_Y_X,          (y << 16) | x);
-    OUTREG(R128_DST_HEIGHT_WIDTH, (h << 16) | w);
-}
-
-#if 0
-/* Setup for XAA color 8x8 pattern fill.
-
-   Tests: xtest XFree86/fllrctngl (with Mono8x8PatternFill off)
-*/
-static void R128SetupForColor8x8PatternFill(ScrnInfoPtr pScrn,
-					    int patx, int paty,
-					    int rop, unsigned int planemask,
-					    int trans_color)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128TRACE(("Color8x8 %d %d %d\n", trans_color, patx, paty));
-
-    R128WaitForFifo(pScrn, 2);
-    OUTREG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | R128_GMC_BRUSH_8x8_COLOR
-				     | R128_GMC_SRC_DATATYPE_COLOR
-				     | R128_ROP[rop].rop
-				     | R128_DP_SRC_SOURCE_MEMORY));
-    OUTREG(R128_DP_WRITE_MASK,      planemask);
-
-    if (trans_color != -1) {
-				/* Set up for transparency */
-	R128WaitForFifo(pScrn, 3);
-	OUTREG(R128_CLR_CMP_CLR_SRC, trans_color);
-	OUTREG(R128_CLR_CMP_MASK,    R128_CLR_CMP_MSK);
-	OUTREG(R128_CLR_CMP_CNTL,    (R128_SRC_CMP_NEQ_COLOR
-				      | R128_CLR_CMP_SRC_SOURCE));
-    }
-}
-
-/* Subsequent XAA 8x8 pattern color expansion. */
-static void R128SubsequentColor8x8PatternFillRect( ScrnInfoPtr pScrn,
-						   int patx, int paty,
-						   int x, int y, int w, int h)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128TRACE(("Color8x8 %d,%d %d,%d %d %d\n", patx, paty, x, y, w, h));
-    R128WaitForFifo(pScrn, 3);
-    OUTREG(R128_SRC_Y_X, (paty << 16) | patx);
-    OUTREG(R128_DST_Y_X, (y << 16) | x);
-    OUTREG(R128_DST_HEIGHT_WIDTH, (h << 16) | w);
-}
-#endif
-
-/* Setup for XAA indirect CPU-to-screen color expansion (indirect).
-   Because of how the scratch buffer is initialized, this is really a
-   mainstore-to-screen color expansion.  Transparency is supported when `bg
-   == -1'.
-
-   x11perf -ftext (pure indirect):
-                               1024x768 at 76Hz   1024x768 at 76Hz
-                                        8bpp           32bpp
-   not used:                    685000.0/sec    794000.0/sec
-   used:                       1070000.0/sec   1080000.0/sec
-
-   We could improve this indirect routine by about 10% if the hardware
-   could accept DWORD padded scanlines, or if XAA could provide bit-packed
-   data.  We might also be able to move to a direct routine if there were
-   more HOST_DATA registers.
-
-   Implementing the hybrid indirect/direct scheme improved performance in a
-   few areas:
-
-   1024x768 at 76 8bpp
-                                   Indirect          Hybrid
-   x11perf -oddsrect10          50100.0/sec     71700.0/sec
-   x11perf -oddsrect100          4240.0/sec      6660.0/sec
-   x11perf -bigsrect10          50300.0/sec     71100.0/sec
-   x11perf -bigsrect100          4190.0/sec      6800.0/sec
-   x11perf -polytext           584000.0/sec    714000.0/sec
-   x11perf -polytext16         154000.0/sec    172000.0/sec
-   x11perf -seg1              1780000.0/sec   1880000.0/sec
-   x11perf -copyplane10         42900.0/sec     58300.0/sec
-   x11perf -copyplane100         4400.0/sec      6710.0/sec
-   x11perf -putimagexy10         5090.0/sec      6670.0/sec
-   x11perf -putimagexy100         424.0/sec       575.0/sec
-
-   1024x768 at 76 -depth 24 -fbbpp 32
-                                   Indirect          Hybrid
-   x11perf -oddsrect100          4240.0/sec      6670.0/sec
-   x11perf -bigsrect100          4190.0/sec      6800.0/sec
-   x11perf -polytext           585000.0/sec    719000.0/sec
-   x11perf -seg1              2960000.0/sec   2990000.0/sec
-   x11perf -copyplane100         4400.0/sec      6700.0/sec
-   x11perf -putimagexy100         138.0/sec       191.0/sec
-
-*/
-static void R128SetupForScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
-							   int fg, int bg,
-							   int rop,
-							   unsigned int
-							   planemask)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128WaitForFifo(pScrn, 4);
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-    OUTREG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | R128_GMC_DST_CLIPPING
-				     | R128_GMC_BRUSH_NONE
-				     | (bg == -1
-					? R128_GMC_SRC_DATATYPE_MONO_FG_LA
-					: R128_GMC_SRC_DATATYPE_MONO_FG_BG)
-				     | R128_ROP[rop].rop
-				     | R128_GMC_BYTE_LSB_TO_MSB
-				     | R128_DP_SRC_SOURCE_HOST_DATA));
-#else	/* X_BYTE_ORDER == X_BIG_ENDIAN */
-    OUTREG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | R128_GMC_DST_CLIPPING
-				     | R128_GMC_BRUSH_NONE
-				     | (bg == -1
-					? R128_GMC_SRC_DATATYPE_MONO_FG_LA
-					: R128_GMC_SRC_DATATYPE_MONO_FG_BG)
-				     | R128_ROP[rop].rop
-				     | R128_DP_SRC_SOURCE_HOST_DATA));
-#endif
-    OUTREG(R128_DP_WRITE_MASK,      planemask);
-    OUTREG(R128_DP_SRC_FRGD_CLR,    fg);
-    OUTREG(R128_DP_SRC_BKGD_CLR,    bg);
-}
-
-/* Subsequent XAA indirect CPU-to-screen color expansion.  This is only
-   called once for each rectangle. */
-static void R128SubsequentScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
-							     int x, int y,
-							     int w, int h,
-							     int skipleft)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int x1clip = x+skipleft;
-    int x2clip = x+w;
-
-    info->scanline_h      = h;
-    info->scanline_words  = (w + 31) >> 5;
-
-#if 0
-    /* Seems as though the Rage128's doesn't like blitting directly
-     * as we must be overwriting something too quickly, therefore we
-     * render to the buffer first and then blit */
-    if ((info->scanline_words * h) <= 9) {
-	/* Turn on direct for less than 9 dword colour expansion */
-	info->scratch_buffer[0]
-	    = (unsigned char *)(ADDRREG(R128_HOST_DATA_LAST)
-				- (info->scanline_words - 1));
-	info->scanline_direct = 1;
-    } else
-#endif
-    {
-	/* Use indirect for anything else */
-	info->scratch_buffer[0] = info->scratch_save;
-	info->scanline_direct   = 0;
-    }
-
-    if (pScrn->bitsPerPixel == 24) {
-	x1clip *= 3;
-	x2clip *= 3;
-    }
-
-    R128WaitForFifo(pScrn, 4 + (info->scanline_direct ?
-					(info->scanline_words * h) : 0) );
-    OUTREG(R128_SC_TOP_LEFT,     (y << 16)       | (x1clip & 0xffff));
-    OUTREG(R128_SC_BOTTOM_RIGHT, ((y+h-1) << 16) | ((x2clip-1) & 0xffff));
-    OUTREG(R128_DST_Y_X,         (y << 16)       | (x & 0xffff));
-    /* Have to pad the width here and use clipping engine */
-    OUTREG(R128_DST_HEIGHT_WIDTH, (h << 16)      | ((w + 31) & ~31));
-}
-
-/* Subsequent XAA indirect CPU-to-screen color expansion.  This is called
-   once for each scanline. */
-static void R128SubsequentColorExpandScanline(ScrnInfoPtr pScrn, int bufno)
-{
-    R128InfoPtr     info      = R128PTR(pScrn);
-    unsigned char   *R128MMIO = info->MMIO;
-    CARD32          *p        = (pointer)info->scratch_buffer[bufno];
-    int             i;
-    int             left      = info->scanline_words;
-    volatile CARD32 *d;
-
-    if (info->scanline_direct) return;
-    --info->scanline_h;
-    while (left) {
-        write_mem_barrier();
-	if (left <= 8) {
-	  /* Last scanline - finish write to DATA_LAST */
-	  if (info->scanline_h == 0) {
-	    R128WaitForFifo(pScrn, left);
-				/* Unrolling doesn't improve performance */
-	    for (d = ADDRREG(R128_HOST_DATA_LAST) - (left - 1); left; --left)
-		*d++ = *p++;
-	    return;
-	  } else {
-	    R128WaitForFifo(pScrn, left);
-				/* Unrolling doesn't improve performance */
-	    for (d = ADDRREG(R128_HOST_DATA7) - (left - 1); left; --left)
-		*d++ = *p++;
-	  }
-	} else {
-	    R128WaitForFifo(pScrn, 8);
-				/* Unrolling doesn't improve performance */
-	    for (d = ADDRREG(R128_HOST_DATA0), i = 0; i < 8; i++)
-		*d++ = *p++;
-	    left -= 8;
-	}
-    }
-}
-
-/* Setup for XAA indirect image write.
-
-   1024x768 at 76Hz 8bpp
-                             Without             With
-   x11perf -putimage10   37500.0/sec      39300.0/sec
-   x11perf -putimage100   2150.0/sec       1170.0/sec
-   x11perf -putimage500    108.0/sec         49.8/sec
- */
-static void R128SetupForScanlineImageWrite(ScrnInfoPtr pScrn,
-					   int rop,
-					   unsigned int planemask,
-					   int trans_color,
-					   int bpp,
-					   int depth)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    info->scanline_bpp = bpp;
-
-    R128WaitForFifo(pScrn, 2);
-    OUTREG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | R128_GMC_DST_CLIPPING
-				     | R128_GMC_BRUSH_1X8_COLOR
-				     | R128_GMC_SRC_DATATYPE_COLOR
-				     | R128_ROP[rop].rop
-				     | R128_GMC_BYTE_LSB_TO_MSB
-				     | R128_DP_SRC_SOURCE_HOST_DATA));
-    OUTREG(R128_DP_WRITE_MASK,      planemask);
-
-    if (trans_color != -1) {
-				/* Set up for transparency */
-	R128WaitForFifo(pScrn, 3);
-	OUTREG(R128_CLR_CMP_CLR_SRC, trans_color);
-	OUTREG(R128_CLR_CMP_MASK,    R128_CLR_CMP_MSK);
-	OUTREG(R128_CLR_CMP_CNTL,    (R128_SRC_CMP_NEQ_COLOR
-				      | R128_CLR_CMP_SRC_SOURCE));
-    }
-}
-
-/* Subsequent XAA indirect image write. This is only called once for each
-   rectangle. */
-static void R128SubsequentScanlineImageWriteRect(ScrnInfoPtr pScrn,
-						 int x, int y,
-						 int w, int h,
-						 int skipleft)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int x1clip = x+skipleft;
-    int x2clip = x+w;
-
-    int shift = 0; /* 32bpp */
-
-    if (pScrn->bitsPerPixel == 8) shift = 3;
-    else if (pScrn->bitsPerPixel == 16) shift = 1;
-
-    info->scanline_h      = h;
-    info->scanline_words  = (w * info->scanline_bpp + 31) >> 5;
-
-#if 0
-    /* Seeing as the CPUToScreen doesn't like this, I've done this
-     * here too, as it uses pretty much the same path. */
-    if ((info->scanline_words * h) <= 9) {
-	/* Turn on direct for less than 9 dword colour expansion */
-	info->scratch_buffer[0]
-	    = (unsigned char *)(ADDRREG(R128_HOST_DATA_LAST)
-				- (info->scanline_words - 1));
-	info->scanline_direct = 1;
-    } else
-#endif
-    {
-	/* Use indirect for anything else */
-	info->scratch_buffer[0] = info->scratch_save;
-	info->scanline_direct   = 0;
-    }
-
-    if (pScrn->bitsPerPixel == 24) {
-	x1clip *= 3;
-	x2clip *= 3;
-    }
-
-    R128WaitForFifo(pScrn, 4 + (info->scanline_direct ?
-					(info->scanline_words * h) : 0) );
-    OUTREG(R128_SC_TOP_LEFT,      (y << 16)       | (x1clip & 0xffff));
-    OUTREG(R128_SC_BOTTOM_RIGHT,  ((y+h-1) << 16) | ((x2clip-1) & 0xffff));
-    OUTREG(R128_DST_Y_X,          (y << 16)       | (x & 0xffff));
-    /* Have to pad the width here and use clipping engine */
-    OUTREG(R128_DST_HEIGHT_WIDTH, (h << 16)       | ((w + shift) & ~shift));
-}
-
-/* Subsequent XAA indirect iamge write.  This is called once for each
-   scanline. */
-static void R128SubsequentImageWriteScanline(ScrnInfoPtr pScrn, int bufno)
-{
-    R128InfoPtr     info      = R128PTR(pScrn);
-    unsigned char   *R128MMIO = info->MMIO;
-    CARD32          *p        = (pointer)info->scratch_buffer[bufno];
-    int             i;
-    int             left      = info->scanline_words;
-    volatile CARD32 *d;
-
-    if (info->scanline_direct) return;
-    --info->scanline_h;
-    while (left) {
-        write_mem_barrier();
-	if (left <= 8) {
-	  /* Last scanline - finish write to DATA_LAST */
-	  if (info->scanline_h == 0) {
-	    R128WaitForFifo(pScrn, left);
-				/* Unrolling doesn't improve performance */
-	    for (d = ADDRREG(R128_HOST_DATA_LAST) - (left - 1); left; --left)
-		*d++ = *p++;
-	    return;
-	  } else {
-	    R128WaitForFifo(pScrn, left);
-				/* Unrolling doesn't improve performance */
-	    for (d = ADDRREG(R128_HOST_DATA7) - (left - 1); left; --left)
-		*d++ = *p++;
-	  }
-	} else {
-	    R128WaitForFifo(pScrn, 8);
-				/* Unrolling doesn't improve performance */
-	    for (d = ADDRREG(R128_HOST_DATA0), i = 0; i < 8; i++)
-		*d++ = *p++;
-	    left -= 8;
-	}
-    }
-}
-
-/* Initialize the acceleration hardware. */
-void R128EngineInit(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128TRACE(("EngineInit (%d/%d)\n", info->CurrentLayout.pixel_code, info->CurrentLayout.bitsPerPixel));
-
-    OUTREG(R128_SCALE_3D_CNTL, 0);
-    R128EngineReset(pScrn);
-
-    switch (info->CurrentLayout.pixel_code) {
-    case 8:  info->datatype = 2; break;
-    case 15: info->datatype = 3; break;
-    case 16: info->datatype = 4; break;
-    case 24: info->datatype = 5; break;
-    case 32: info->datatype = 6; break;
-    default:
-	R128TRACE(("Unknown depth/bpp = %d/%d (code = %d)\n",
-		   info->CurrentLayout.depth, info->CurrentLayout.bitsPerPixel,
-		   info->CurrentLayout.pixel_code));
-    }
-    info->pitch = (info->CurrentLayout.displayWidth / 8) * (info->CurrentLayout.pixel_bytes == 3 ? 3 : 1);
-
-    R128TRACE(("Pitch for acceleration = %d\n", info->pitch));
-
-    R128WaitForFifo(pScrn, 2);
-    OUTREG(R128_DEFAULT_OFFSET, pScrn->fbOffset);
-    OUTREG(R128_DEFAULT_PITCH,  info->pitch);
-
-    R128WaitForFifo(pScrn, 4);
-    OUTREG(R128_AUX_SC_CNTL,             0);
-    OUTREG(R128_DEFAULT_SC_BOTTOM_RIGHT, (R128_DEFAULT_SC_RIGHT_MAX
-					  | R128_DEFAULT_SC_BOTTOM_MAX));
-    OUTREG(R128_SC_TOP_LEFT,             0);
-    OUTREG(R128_SC_BOTTOM_RIGHT,         (R128_DEFAULT_SC_RIGHT_MAX
-					  | R128_DEFAULT_SC_BOTTOM_MAX));
-
-    info->dp_gui_master_cntl = ((info->datatype << R128_GMC_DST_DATATYPE_SHIFT)
-				| R128_GMC_CLR_CMP_CNTL_DIS
-				| R128_GMC_AUX_CLIP_DIS);
-    R128WaitForFifo(pScrn, 1);
-    OUTREG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | R128_GMC_BRUSH_SOLID_COLOR
-				     | R128_GMC_SRC_DATATYPE_COLOR));
-
-    R128WaitForFifo(pScrn, 8);
-    OUTREG(R128_DST_BRES_ERR,      0);
-    OUTREG(R128_DST_BRES_INC,      0);
-    OUTREG(R128_DST_BRES_DEC,      0);
-    OUTREG(R128_DP_BRUSH_FRGD_CLR, 0xffffffff);
-    OUTREG(R128_DP_BRUSH_BKGD_CLR, 0x00000000);
-    OUTREG(R128_DP_SRC_FRGD_CLR,   0xffffffff);
-    OUTREG(R128_DP_SRC_BKGD_CLR,   0x00000000);
-    OUTREG(R128_DP_WRITE_MASK,     0xffffffff);
-
-    R128WaitForFifo(pScrn, 1);
-
-#if X_BYTE_ORDER == X_BIG_ENDIAN
-    /* FIXME: this is a kludge for texture uploads in the 3D driver. Look at
-     * how the radeon driver handles HOST_DATA_SWAP if you want to implement
-     * CCE ImageWrite acceleration or anything needing this bit */
-#ifdef XF86DRI
-    if (info->directRenderingEnabled)
-	OUTREGP(R128_DP_DATATYPE, 0, ~R128_HOST_BIG_ENDIAN_EN);
-    else
-#endif
-	OUTREGP(R128_DP_DATATYPE,
-		R128_HOST_BIG_ENDIAN_EN, ~R128_HOST_BIG_ENDIAN_EN);
-#else /* X_LITTLE_ENDIAN */
-    OUTREGP(R128_DP_DATATYPE, 0, ~R128_HOST_BIG_ENDIAN_EN);
-#endif
-
-#ifdef XF86DRI
-    info->sc_left         = 0x00000000;
-    info->sc_right        = R128_DEFAULT_SC_RIGHT_MAX;
-    info->sc_top          = 0x00000000;
-    info->sc_bottom       = R128_DEFAULT_SC_BOTTOM_MAX;
-
-    info->re_top_left     = 0x00000000;
-    info->re_width_height = ((0x7ff << R128_RE_WIDTH_SHIFT) |
-			     (0x7ff << R128_RE_HEIGHT_SHIFT));
-
-    info->aux_sc_cntl     = 0x00000000;
-#endif
-
-    R128WaitForIdle(pScrn);
-}
-
-#ifdef XF86DRI
-
-/* Setup for XAA SolidFill. */
-static void R128CCESetupForSolidFill(ScrnInfoPtr pScrn,
-				     int color, int rop,
-				     unsigned int planemask)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    BEGIN_RING( 8 );
-
-    OUT_RING_REG( R128_DP_GUI_MASTER_CNTL,
-		  (info->dp_gui_master_cntl
-		   | R128_GMC_BRUSH_SOLID_COLOR
-		   | R128_GMC_SRC_DATATYPE_COLOR
-		   | R128_ROP[rop].pattern) );
-
-    OUT_RING_REG( R128_DP_BRUSH_FRGD_CLR,  color );
-    OUT_RING_REG( R128_DP_WRITE_MASK,	   planemask );
-    OUT_RING_REG( R128_DP_CNTL,		   (R128_DST_X_LEFT_TO_RIGHT |
-					    R128_DST_Y_TOP_TO_BOTTOM));
-    ADVANCE_RING();
-}
-
-/* Subsequent XAA SolidFillRect.
-
-   Tests: xtest CH06/fllrctngl, xterm
-*/
-static void R128CCESubsequentSolidFillRect(ScrnInfoPtr pScrn,
-					   int x, int y, int w, int h)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    BEGIN_RING( 4 );
-
-    OUT_RING_REG( R128_DST_Y_X,          (y << 16) | x );
-    OUT_RING_REG( R128_DST_WIDTH_HEIGHT, (w << 16) | h );
-
-    ADVANCE_RING();
-}
-
-/* Setup for XAA screen-to-screen copy.
-
-   Tests: xtest CH06/fllrctngl (also tests transparency).
-*/
-static void R128CCESetupForScreenToScreenCopy(ScrnInfoPtr pScrn,
-					       int xdir, int ydir, int rop,
-					       unsigned int planemask,
-					       int trans_color)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    info->xdir = xdir;
-    info->ydir = ydir;
-
-    BEGIN_RING( 6 );
-
-    OUT_RING_REG( R128_DP_GUI_MASTER_CNTL,
-		  (info->dp_gui_master_cntl
-		   | R128_GMC_BRUSH_NONE
-		   | R128_GMC_SRC_DATATYPE_COLOR
-		   | R128_ROP[rop].rop
-		   | R128_DP_SRC_SOURCE_MEMORY) );
-
-    OUT_RING_REG( R128_DP_WRITE_MASK, planemask );
-    OUT_RING_REG( R128_DP_CNTL,
-		  ((xdir >= 0 ? R128_DST_X_LEFT_TO_RIGHT : 0) |
-		   (ydir >= 0 ? R128_DST_Y_TOP_TO_BOTTOM : 0)) );
-
-    ADVANCE_RING();
-
-    if ((trans_color != -1) || (info->XAAForceTransBlit == TRUE)) {
-	BEGIN_RING( 6 );
-
-	OUT_RING_REG( R128_CLR_CMP_CLR_SRC, trans_color );
-	OUT_RING_REG( R128_CLR_CMP_MASK,    R128_CLR_CMP_MSK );
-	OUT_RING_REG( R128_CLR_CMP_CNTL,    (R128_SRC_CMP_NEQ_COLOR |
-					     R128_CLR_CMP_SRC_SOURCE) );
-
-	ADVANCE_RING();
-    }
-}
-
-/* Subsequent XAA screen-to-screen copy. */
-static void R128CCESubsequentScreenToScreenCopy(ScrnInfoPtr pScrn,
-						 int xa, int ya,
-						 int xb, int yb,
-						 int w, int h)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    if (info->xdir < 0) xa += w - 1, xb += w - 1;
-    if (info->ydir < 0) ya += h - 1, yb += h - 1;
-
-    BEGIN_RING( 6 );
-
-    OUT_RING_REG( R128_SRC_Y_X,          (ya << 16) | xa );
-    OUT_RING_REG( R128_DST_Y_X,          (yb << 16) | xb );
-    OUT_RING_REG( R128_DST_HEIGHT_WIDTH, (h << 16) | w );
-
-    ADVANCE_RING();
-}
-
-
-/*
- * XAA scanline color expansion
- *
- * We use HOSTDATA_BLT CCE packets, dividing the image in chunks that fit into
- * the indirect buffer if necessary.
- */
-static void R128CCESetupForScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
-							      int fg, int bg,
-							      int rop,
-							      unsigned int
-							      planemask)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    BEGIN_RING( 2 );
-    OUT_RING_REG(R128_DP_WRITE_MASK,      planemask);
-    ADVANCE_RING();
-
-    info->scanline_rop = rop;
-    info->scanline_fg  = fg;
-    info->scanline_bg  = bg;
-}
-
-/* Helper function to write out a HOSTDATA_BLT packet into the indirect buffer
-   and set the XAA scratch buffer address appropriately */
-static void R128CCEScanlineCPUToScreenColorExpandFillPacket(ScrnInfoPtr pScrn,
-							    int bufno)
-{
-    R128InfoPtr	info = R128PTR(pScrn);
-    int chunk_words = info->scanline_hpass * info->scanline_words;
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    BEGIN_RING( chunk_words+9 );
-
-    OUT_RING( CCE_PACKET3( R128_CCE_PACKET3_CNTL_HOSTDATA_BLT, chunk_words+9-2 ) );
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-    OUT_RING( (info->dp_gui_master_cntl
-	       | R128_GMC_DST_CLIPPING
-	       | R128_GMC_BRUSH_NONE
-	       | (info->scanline_bg == -1
-		  ? R128_GMC_SRC_DATATYPE_MONO_FG_LA
-		  : R128_GMC_SRC_DATATYPE_MONO_FG_BG)
-	       | R128_ROP[info->scanline_rop].rop
-	       | R128_GMC_BYTE_LSB_TO_MSB
-	       | R128_DP_SRC_SOURCE_HOST_DATA));
-#else	/* X_BYTE_ORDER == X_BIG_ENDIAN */
-    OUT_RING( (info->dp_gui_master_cntl
-	       | R128_GMC_DST_CLIPPING
-	       | R128_GMC_BRUSH_NONE
-	       | (info->scanline_bg == -1
-		  ? R128_GMC_SRC_DATATYPE_MONO_FG_LA
-		  : R128_GMC_SRC_DATATYPE_MONO_FG_BG)
-	       | R128_ROP[info->scanline_rop].rop
-	       | R128_DP_SRC_SOURCE_HOST_DATA));
-#endif
-    OUT_RING( (info->scanline_y << 16) | (info->scanline_x1clip & 0xffff) );
-    OUT_RING( ((info->scanline_y+info->scanline_hpass-1) << 16) | ((info->scanline_x2clip-1) & 0xffff) );
-    OUT_RING( info->scanline_fg );
-    OUT_RING( info->scanline_bg );
-    OUT_RING( (info->scanline_y << 16) | (info->scanline_x & 0xffff));
-
-    /* Have to pad the width here and use clipping engine */
-    OUT_RING( (info->scanline_hpass << 16)      | ((info->scanline_w + 31) & ~31));
-
-    OUT_RING( chunk_words );
-
-    info->scratch_buffer[bufno] = (unsigned char *) &__head[__count];
-    __count += chunk_words;
-
-    ADVANCE_RING();
-
-    info->scanline_y += info->scanline_hpass;
-    info->scanline_h -= info->scanline_hpass;
-
-    if ( R128_VERBOSE )
-          xf86DrvMsg( pScrn->scrnIndex, X_INFO,
-		      "%s: hpass=%d, words=%d => chunk_words=%d, y=%d, h=%d\n",
-		      __FUNCTION__, info->scanline_hpass, info->scanline_words,
-		      chunk_words, info->scanline_y, info->scanline_h );
-}
-
-/* Subsequent XAA indirect CPU-to-screen color expansion.  This is only
-   called once for each rectangle. */
-static void R128CCESubsequentScanlineCPUToScreenColorExpandFill(ScrnInfoPtr pScrn,
-								int x, int y,
-								int w, int h,
-								int skipleft)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-
-#define BUFSIZE ( R128_BUFFER_SIZE/4-9 )
-
-    info->scanline_x      = x;
-    info->scanline_y      = y;
-    info->scanline_w      = w;
-    info->scanline_h      = h;
-
-    info->scanline_x1clip = x+skipleft;
-    info->scanline_x2clip = x+w;
-
-    info->scanline_words  = (w + 31) >> 5;
-    info->scanline_hpass  = min(h,(BUFSIZE/info->scanline_words));
-
-    if ( R128_VERBOSE )
-        xf86DrvMsg( pScrn->scrnIndex, X_INFO,
-		    "%s: x=%d, y=%d, w=%d, h=%d, skipleft=%d => x1clip=%d, x2clip=%d, hpass=%d, words=%d\n",
-		    __FUNCTION__, x, y, w, h, skipleft, info->scanline_x1clip, info->scanline_x2clip,
-		    info->scanline_hpass, info->scanline_words );
-
-    R128CCEScanlineCPUToScreenColorExpandFillPacket(pScrn, 0);
-}
-
-/* Subsequent XAA indirect CPU-to-screen color expansion.  This is called
-   once for each scanline. */
-static void R128CCESubsequentColorExpandScanline(ScrnInfoPtr pScrn,
-						 int bufno)
-{
-    R128InfoPtr     info      = R128PTR(pScrn);
-
-    if ( R128_VERBOSE )
-        xf86DrvMsg( pScrn->scrnIndex, X_INFO,
-		    "%s enter: scanline_hpass=%d, scanline_h=%d\n",
-		    __FUNCTION__, info->scanline_hpass, info->scanline_h );
-
-    if (--info->scanline_hpass) {
-        info->scratch_buffer[bufno] += 4 * info->scanline_words;
-    }
-    else if(info->scanline_h) {
-        info->scanline_hpass = min(info->scanline_h,(BUFSIZE/info->scanline_words));
-        R128CCEScanlineCPUToScreenColorExpandFillPacket(pScrn, bufno);
-    }
-
-    if ( R128_VERBOSE )
-        xf86DrvMsg( pScrn->scrnIndex, X_INFO,
-		    "%s exit: scanline_hpass=%d, scanline_h=%d\n",
-		    __FUNCTION__, info->scanline_hpass, info->scanline_h );
-}
-
-/* Solid lines */
-static void R128CCESetupForSolidLine(ScrnInfoPtr pScrn,
-				  int color, int rop, unsigned int planemask)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    BEGIN_RING( 6 );
-
-    OUT_RING_REG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | R128_GMC_BRUSH_SOLID_COLOR
-				     | R128_GMC_SRC_DATATYPE_COLOR
-				     | R128_ROP[rop].pattern));
-    OUT_RING_REG(R128_DP_BRUSH_FRGD_CLR,  color);
-    OUT_RING_REG(R128_DP_WRITE_MASK,      planemask);
-
-    ADVANCE_RING();
-}
-
-static void R128CCESubsequentSolidBresenhamLine(ScrnInfoPtr pScrn,
-					     int x, int y,
-					     int major, int minor,
-					     int err, int len, int octant)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    int           flags     = 0;
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    if (octant & YMAJOR)         flags |= R128_DST_Y_MAJOR;
-    if (!(octant & XDECREASING)) flags |= R128_DST_X_DIR_LEFT_TO_RIGHT;
-    if (!(octant & YDECREASING)) flags |= R128_DST_Y_DIR_TOP_TO_BOTTOM;
-
-    BEGIN_RING( 12 );
-
-    OUT_RING_REG(R128_DP_CNTL_XDIR_YDIR_YMAJOR, flags);
-    OUT_RING_REG(R128_DST_Y_X,                  (y << 16) | x);
-    OUT_RING_REG(R128_DST_BRES_ERR,             err);
-    OUT_RING_REG(R128_DST_BRES_INC,             minor);
-    OUT_RING_REG(R128_DST_BRES_DEC,             -major);
-    OUT_RING_REG(R128_DST_BRES_LNTH,            len);
-
-    ADVANCE_RING();
-}
-
-static void R128CCESubsequentSolidHorVertLine(ScrnInfoPtr pScrn,
-					   int x, int y, int len, int dir )
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    BEGIN_RING( 2 );
-
-    OUT_RING_REG(R128_DP_CNTL, (R128_DST_X_LEFT_TO_RIGHT
-			  | R128_DST_Y_TOP_TO_BOTTOM));
-
-    ADVANCE_RING();
-
-    if (dir == DEGREES_0) {
-	R128CCESubsequentSolidFillRect(pScrn, x, y, len, 1);
-    } else {
-	R128CCESubsequentSolidFillRect(pScrn, x, y, 1, len);
-    }
-}
-
-/* Dashed lines */
-static void R128CCESetupForDashedLine(ScrnInfoPtr pScrn,
-				   int fg, int bg,
-				   int rop, unsigned int planemask,
-				   int length, unsigned char *pattern)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    CARD32        pat       = *(CARD32 *)(pointer)pattern;
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-# define PAT_SHIFT(pat,n) pat << n
-#else
-# define PAT_SHIFT(pat,n) pat >> n
-#endif
-
-    switch (length) {
-    case  2: pat |= PAT_SHIFT(pat,2); /* fall through */
-    case  4: pat |= PAT_SHIFT(pat,4); /* fall through */
-    case  8: pat |= PAT_SHIFT(pat,8); /* fall through */
-    case 16: pat |= PAT_SHIFT(pat,16);
-    }
-
-    BEGIN_RING( 10 );
-
-    OUT_RING_REG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | (bg == -1
-					? R128_GMC_BRUSH_32x1_MONO_FG_LA
-					: R128_GMC_BRUSH_32x1_MONO_FG_BG)
-				     | R128_ROP[rop].pattern
-				     | R128_GMC_BYTE_LSB_TO_MSB));
-    OUT_RING_REG(R128_DP_WRITE_MASK,      planemask);
-    OUT_RING_REG(R128_DP_BRUSH_FRGD_CLR,  fg);
-    OUT_RING_REG(R128_DP_BRUSH_BKGD_CLR,  bg);
-    OUT_RING_REG(R128_BRUSH_DATA0,        pat);
-
-    ADVANCE_RING();
-}
-
-static void R128CCESubsequentDashedBresenhamLine(ScrnInfoPtr pScrn,
-					      int x, int y,
-					      int major, int minor,
-					      int err, int len, int octant,
-					      int phase)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    int           flags     = 0;
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    if (octant & YMAJOR)         flags |= R128_DST_Y_MAJOR;
-    if (!(octant & XDECREASING)) flags |= R128_DST_X_DIR_LEFT_TO_RIGHT;
-    if (!(octant & YDECREASING)) flags |= R128_DST_Y_DIR_TOP_TO_BOTTOM;
-
-    BEGIN_RING( 14 );
-
-    OUT_RING_REG(R128_DP_CNTL_XDIR_YDIR_YMAJOR, flags);
-    OUT_RING_REG(R128_DST_Y_X,                  (y << 16) | x);
-    OUT_RING_REG(R128_BRUSH_Y_X,                (phase << 16) | phase);
-    OUT_RING_REG(R128_DST_BRES_ERR,             err);
-    OUT_RING_REG(R128_DST_BRES_INC,             minor);
-    OUT_RING_REG(R128_DST_BRES_DEC,             -major);
-    OUT_RING_REG(R128_DST_BRES_LNTH,            len);
-
-    ADVANCE_RING();
-}
-
-/* Mono 8x8 pattern color expansion */
-static void R128CCESetupForMono8x8PatternFill(ScrnInfoPtr pScrn,
-					   int patternx, int patterny,
-					   int fg, int bg, int rop,
-					   unsigned int planemask)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    BEGIN_RING( 12 );
-
-    OUT_RING_REG(R128_DP_GUI_MASTER_CNTL, (info->dp_gui_master_cntl
-				     | (bg == -1
-					? R128_GMC_BRUSH_8X8_MONO_FG_LA
-					: R128_GMC_BRUSH_8X8_MONO_FG_BG)
-				     | R128_ROP[rop].pattern
-				     | R128_GMC_BYTE_LSB_TO_MSB));
-    OUT_RING_REG(R128_DP_WRITE_MASK,      planemask);
-    OUT_RING_REG(R128_DP_BRUSH_FRGD_CLR,  fg);
-    OUT_RING_REG(R128_DP_BRUSH_BKGD_CLR,  bg);
-    OUT_RING_REG(R128_BRUSH_DATA0,        patternx);
-    OUT_RING_REG(R128_BRUSH_DATA1,        patterny);
-
-    ADVANCE_RING();
-}
-
-static void R128CCESubsequentMono8x8PatternFillRect(ScrnInfoPtr pScrn,
-						 int patternx, int patterny,
-						 int x, int y, int w, int h)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    RING_LOCALS;
-
-    R128CCE_REFRESH( pScrn, info );
-
-    BEGIN_RING( 6 );
-
-    OUT_RING_REG(R128_BRUSH_Y_X,        (patterny << 8) | patternx);
-    OUT_RING_REG(R128_DST_Y_X,          (y << 16) | x);
-    OUT_RING_REG(R128_DST_HEIGHT_WIDTH, (h << 16) | w);
-
-    ADVANCE_RING();
-}
-
-/* Get an indirect buffer for the CCE 2D acceleration commands.
- */
-drmBufPtr R128CCEGetBuffer( ScrnInfoPtr pScrn )
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-    drmDMAReq dma;
-    drmBufPtr buf = NULL;
-    int indx = 0;
-    int size = 0;
-    int ret, i = 0;
-
-#if 0
-    /* FIXME: pScrn->pScreen has not been initialized when this is first
-       called from RADEONSelectBuffer via RADEONDRICPInit.  We could use
-       the screen index from pScrn, which is initialized, and then get
-       the screen from screenInfo.screens[index], but that is a hack. */
-    dma.context = DRIGetContext(pScrn->pScreen);
-#else
-    dma.context = 0x00000001; /* This is the X server's context */
-#endif
-    dma.send_count = 0;
-    dma.send_list = NULL;
-    dma.send_sizes = NULL;
-    dma.flags = 0;
-    dma.request_count = 1;
-    dma.request_size = R128_BUFFER_SIZE;
-    dma.request_list = &indx;
-    dma.request_sizes = &size;
-    dma.granted_count = 0;
-
-    while ( 1 ) {
-	do {
-	    ret = drmDMA( info->drmFD, &dma );
-	    if ( ret && ret != -EAGAIN ) {
-		xf86DrvMsg( pScrn->scrnIndex, X_ERROR,
-			    "%s: CCE GetBuffer %d\n", __FUNCTION__, ret );
-	    }
-	} while ( ( ret == -EAGAIN ) && ( i++ < R128_TIMEOUT ) );
-
-	if ( ret == 0 ) {
-	    buf = &info->buffers->list[indx];
-	    buf->used = 0;
-	    if ( R128_VERBOSE ) {
-		xf86DrvMsg( pScrn->scrnIndex, X_INFO,
-			    "   GetBuffer returning %d\n", buf->idx );
-	    }
-	    return buf;
-	}
-
-	xf86DrvMsg( pScrn->scrnIndex, X_ERROR,
-		    "GetBuffer timed out, resetting engine...\n");
-	R128EngineReset( pScrn );
-	/* R128EngineRestore( pScrn ); FIXME ??? */
-
-	/* Always restart the engine when doing CCE 2D acceleration */
-	R128CCE_RESET( pScrn, info );
-	R128CCE_START( pScrn, info );
-    }
-}
-
-/* Flush the indirect buffer to the kernel for submission to the card.
- */
-void R128CCEFlushIndirect( ScrnInfoPtr pScrn, int discard )
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-    drmBufPtr buffer = info->indirectBuffer;
-    int start = info->indirectStart;
-    drmR128Indirect indirect;
-
-    if ( !buffer )
-	return;
-
-    if ( (start == buffer->used) && !discard )
-        return;
-
-    indirect.idx = buffer->idx;
-    indirect.start = start;
-    indirect.end = buffer->used;
-    indirect.discard = discard;
-
-    drmCommandWriteRead( info->drmFD, DRM_R128_INDIRECT,
-                         &indirect, sizeof(drmR128Indirect));
-
-    if ( discard )
-        buffer = info->indirectBuffer = R128CCEGetBuffer( pScrn );
-
-    /* pad to an even number of dwords */
-    if (buffer->used & 7)
-        buffer->used = ( buffer->used+7 ) & ~7;
-
-    info->indirectStart = buffer->used;
-}
-
-/* Flush and release the indirect buffer.
- */
-void R128CCEReleaseIndirect( ScrnInfoPtr pScrn )
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-    drmBufPtr buffer = info->indirectBuffer;
-    int start = info->indirectStart;
-    drmR128Indirect indirect;
-
-    info->indirectBuffer = NULL;
-    info->indirectStart = 0;
-
-    if ( !buffer )
-	return;
-
-    indirect.idx = buffer->idx;
-    indirect.start = start;
-    indirect.end = buffer->used;
-    indirect.discard = 1;
-
-    drmCommandWriteRead( info->drmFD, DRM_R128_INDIRECT,
-                         &indirect, sizeof(drmR128Indirect));
-}
-
-/* This callback is required for multihead cards using XAA */
-static
-void R128RestoreCCEAccelState(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info        = R128PTR(pScrn);
-/*    unsigned char *R128MMIO = info->MMIO;  needed for OUTREG below */
-    /*xf86DrvMsg(pScrn->scrnIndex, X_INFO, "===>RestoreCP\n");*/
-
-    R128WaitForFifo(pScrn, 1);
-/* is this needed on r128
-    OUTREG( R128_DEFAULT_OFFSET, info->frontPitchOffset);
-*/
-    R128WaitForIdle(pScrn);
-
-    /* FIXME: May need to restore other things, 
-       like BKGD_CLK FG_CLK...*/
-
-}
-
-static void R128CCEAccelInit(ScrnInfoPtr pScrn, XAAInfoRecPtr a)
-{
-    R128InfoPtr info = R128PTR(pScrn);
-
-    a->Flags                            = (PIXMAP_CACHE
-					   | OFFSCREEN_PIXMAPS
-					   | LINEAR_FRAMEBUFFER);
-
-				/* Sync */
-    a->Sync                             = R128CCEWaitForIdle;
-
-    /* Solid Filled Rectangle */
-    a->PolyFillRectSolidFlags           = 0;
-    a->SetupForSolidFill                = R128CCESetupForSolidFill;
-    a->SubsequentSolidFillRect          = R128CCESubsequentSolidFillRect;
-
-				/* Screen-to-screen Copy */
-				/* Transparency uses the wrong colors for
-				   24 bpp mode -- the transparent part is
-				   correct, but the opaque color is wrong.
-				   This can be seen with netscape's I-bar
-				   cursor when editing in the URL location
-				   box. */
-    a->ScreenToScreenCopyFlags          = ((pScrn->bitsPerPixel == 24)
-					   ? NO_TRANSPARENCY
-					   : 0);
-    a->SetupForScreenToScreenCopy       = R128CCESetupForScreenToScreenCopy;
-    a->SubsequentScreenToScreenCopy     = R128CCESubsequentScreenToScreenCopy;
-
-				/* Indirect CPU-To-Screen Color Expand */
-    a->ScanlineCPUToScreenColorExpandFillFlags = LEFT_EDGE_CLIPPING
-					       | LEFT_EDGE_CLIPPING_NEGATIVE_X;
-    a->NumScanlineColorExpandBuffers   = 1;
-    a->ScanlineColorExpandBuffers      = info->scratch_buffer;
-    info->scratch_buffer[0]            = NULL;
-    a->SetupForScanlineCPUToScreenColorExpandFill
-	= R128CCESetupForScanlineCPUToScreenColorExpandFill;
-    a->SubsequentScanlineCPUToScreenColorExpandFill
-	= R128CCESubsequentScanlineCPUToScreenColorExpandFill;
-    a->SubsequentColorExpandScanline   = R128CCESubsequentColorExpandScanline;
-
-				/* Bresenham Solid Lines */
-    a->SetupForSolidLine               = R128CCESetupForSolidLine;
-    a->SubsequentSolidBresenhamLine    = R128CCESubsequentSolidBresenhamLine;
-    a->SubsequentSolidHorVertLine      = R128CCESubsequentSolidHorVertLine;
-
-				/* Bresenham Dashed Lines*/
-    a->SetupForDashedLine              = R128CCESetupForDashedLine;
-    a->SubsequentDashedBresenhamLine   = R128CCESubsequentDashedBresenhamLine;
-    a->DashPatternMaxLength            = 32;
-    a->DashedLineFlags                 = (LINE_PATTERN_LSBFIRST_LSBJUSTIFIED
-					  | LINE_PATTERN_POWER_OF_2_ONLY);
-
-				/* Mono 8x8 Pattern Fill (Color Expand) */
-    a->SetupForMono8x8PatternFill       = R128CCESetupForMono8x8PatternFill;
-    a->SubsequentMono8x8PatternFillRect = R128CCESubsequentMono8x8PatternFillRect;
-    a->Mono8x8PatternFillFlags          = (HARDWARE_PATTERN_PROGRAMMED_BITS
-					   | HARDWARE_PATTERN_PROGRAMMED_ORIGIN
-					   | HARDWARE_PATTERN_SCREEN_ORIGIN
-					   | BIT_ORDER_IN_BYTE_LSBFIRST);
-
-    if(!info->IsSecondary && xf86IsEntityShared(pScrn->entityList[0]))
-        a->RestoreAccelState           = R128RestoreCCEAccelState;
-
-}
-#endif
-
-/* This callback is required for multihead cards using XAA */
-static
-void R128RestoreAccelState(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info        = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    R128WaitForFifo(pScrn, 2);
-    OUTREG(R128_DEFAULT_OFFSET, pScrn->fbOffset);
-    OUTREG(R128_DEFAULT_PITCH,  info->pitch);
-
-    /* FIXME: May need to restore other things, 
-       like BKGD_CLK FG_CLK...*/
-
-    R128WaitForIdle(pScrn);
-
-}
-
-static void R128MMIOAccelInit(ScrnInfoPtr pScrn, XAAInfoRecPtr a)
-{
-    R128InfoPtr info = R128PTR(pScrn);
-
-    a->Flags                            = (PIXMAP_CACHE
-					   | OFFSCREEN_PIXMAPS
-					   | LINEAR_FRAMEBUFFER);
-
-				/* Sync */
-    a->Sync                             = R128WaitForIdle;
-
-				/* Solid Filled Rectangle */
-    a->PolyFillRectSolidFlags           = 0;
-    a->SetupForSolidFill                = R128SetupForSolidFill;
-    a->SubsequentSolidFillRect          = R128SubsequentSolidFillRect;
-
-				/* Screen-to-screen Copy */
-				/* Transparency uses the wrong colors for
-				   24 bpp mode -- the transparent part is
-				   correct, but the opaque color is wrong.
-				   This can be seen with netscape's I-bar
-				   cursor when editing in the URL location
-				   box. */
-    a->ScreenToScreenCopyFlags          = ((pScrn->bitsPerPixel == 24)
-					   ? NO_TRANSPARENCY
-					   : 0);
-    a->SetupForScreenToScreenCopy       = R128SetupForScreenToScreenCopy;
-    a->SubsequentScreenToScreenCopy     = R128SubsequentScreenToScreenCopy;
-
-				/* Mono 8x8 Pattern Fill (Color Expand) */
-    a->SetupForMono8x8PatternFill       = R128SetupForMono8x8PatternFill;
-    a->SubsequentMono8x8PatternFillRect = R128SubsequentMono8x8PatternFillRect;
-    a->Mono8x8PatternFillFlags          = (HARDWARE_PATTERN_PROGRAMMED_BITS
-					   | HARDWARE_PATTERN_PROGRAMMED_ORIGIN
-					   | HARDWARE_PATTERN_SCREEN_ORIGIN
-					   | BIT_ORDER_IN_BYTE_LSBFIRST);
-
-				/* Indirect CPU-To-Screen Color Expand */
-    a->ScanlineCPUToScreenColorExpandFillFlags = LEFT_EDGE_CLIPPING
-					       | LEFT_EDGE_CLIPPING_NEGATIVE_X;
-    a->NumScanlineColorExpandBuffers   = 1;
-    a->ScanlineColorExpandBuffers      = info->scratch_buffer;
-    info->scratch_save                 = xalloc(((pScrn->virtualX+31)/32*4)
-					    + (pScrn->virtualX
-					    * info->CurrentLayout.pixel_bytes));
-    info->scratch_buffer[0]            = info->scratch_save;
-    a->SetupForScanlineCPUToScreenColorExpandFill
-	= R128SetupForScanlineCPUToScreenColorExpandFill;
-    a->SubsequentScanlineCPUToScreenColorExpandFill
-	= R128SubsequentScanlineCPUToScreenColorExpandFill;
-    a->SubsequentColorExpandScanline   = R128SubsequentColorExpandScanline;
-
-				/* Bresenham Solid Lines */
-    a->SetupForSolidLine               = R128SetupForSolidLine;
-    a->SubsequentSolidBresenhamLine    = R128SubsequentSolidBresenhamLine;
-    a->SubsequentSolidHorVertLine      = R128SubsequentSolidHorVertLine;
-
-				/* Bresenham Dashed Lines*/
-    a->SetupForDashedLine              = R128SetupForDashedLine;
-    a->SubsequentDashedBresenhamLine   = R128SubsequentDashedBresenhamLine;
-    a->DashPatternMaxLength            = 32;
-    a->DashedLineFlags                 = (LINE_PATTERN_LSBFIRST_LSBJUSTIFIED
-					  | LINE_PATTERN_POWER_OF_2_ONLY);
-
-				/* ImageWrite */
-    a->NumScanlineImageWriteBuffers    = 1;
-    a->ScanlineImageWriteBuffers       = info->scratch_buffer;
-    info->scratch_buffer[0]            = info->scratch_save;
-    a->SetupForScanlineImageWrite      = R128SetupForScanlineImageWrite;
-    a->SubsequentScanlineImageWriteRect= R128SubsequentScanlineImageWriteRect;
-    a->SubsequentImageWriteScanline    = R128SubsequentImageWriteScanline;
-    a->ScanlineImageWriteFlags         = CPU_TRANSFER_PAD_DWORD
-		/* Performance tests show that we shouldn't use GXcopy for
-		 * uploads as a memcpy is faster */
-					  | NO_GXCOPY
-					  | LEFT_EDGE_CLIPPING
-					  | LEFT_EDGE_CLIPPING_NEGATIVE_X
-					  | SCANLINE_PAD_DWORD;
-
-    if(xf86IsEntityShared(pScrn->entityList[0]))
-    {
-        DevUnion* pPriv;
-        R128EntPtr pR128Ent;
-        pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
-                getR128EntityIndex());
-        pR128Ent = pPriv->ptr;
-        
-        /*if there are more than one devices sharing this entity, we
-          have to assign this call back, otherwise the XAA will be
-          disabled */
-        if(pR128Ent->HasSecondary || pR128Ent->BypassSecondary)
-           a->RestoreAccelState           = R128RestoreAccelState;
-    }
-
-}
-
-/* Initialize XAA for supported acceleration and also initialize the
-   graphics hardware for acceleration. */
-Bool R128AccelInit(ScreenPtr pScreen)
-{
-    ScrnInfoPtr   pScrn = xf86Screens[pScreen->myNum];
-    R128InfoPtr   info  = R128PTR(pScrn);
-    XAAInfoRecPtr a;
-
-    if (!(a = info->accel = XAACreateInfoRec())) return FALSE;
-
-#ifdef XF86DRI
-    if (info->directRenderingEnabled)
-	R128CCEAccelInit(pScrn, a);
-    else
-#endif
-	R128MMIOAccelInit(pScrn, a);
-
-    R128EngineInit(pScrn);
-    return XAAInit(pScreen, a);
-}
diff --git a/src/r128_common.h b/src/r128_common.h
deleted file mode 100644
index b60efe9..0000000
--- a/src/r128_common.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* r128_common.h -- common header definitions for R128 2D/3D/DRM suite
- * Created: Sun Apr  9 18:16:28 2000 by kevin at precisioninsight.com
- *
- * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas.
- * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Author:
- *   Gareth Hughes <gareth at valinux.com>
- *   Kevin E. Martin <martin at valinux.com>
- *
- * Converted to common header format:
- *   Jens Owen <jens at tungstengraphics.com>
- *
- */
-
-#ifndef _R128_COMMON_H_
-#define _R128_COMMON_H_
-
-#include <X11/Xmd.h>
-
-/*
- * WARNING: If you change any of these defines, make sure to change
- * the kernel include file as well (r128_drm.h)
- */
-
-/* Driver specific DRM command indices
- * NOTE: these are not OS specific, but they are driver specific
- */
-#define DRM_R128_INIT           0x00
-#define DRM_R128_CCE_START      0x01
-#define DRM_R128_CCE_STOP       0x02
-#define DRM_R128_CCE_RESET      0x03
-#define DRM_R128_CCE_IDLE       0x04
-#define DRM_R128_UNDEFINED1     0x05
-#define DRM_R128_RESET          0x06
-#define DRM_R128_SWAP           0x07
-#define DRM_R128_CLEAR          0x08
-#define DRM_R128_VERTEX         0x09
-#define DRM_R128_INDICES        0x0a
-#define DRM_R128_BLIT           0x0b
-#define DRM_R128_DEPTH          0x0c
-#define DRM_R128_STIPPLE        0x0d
-#define DRM_R128_UNDEFINED2     0x0e
-#define DRM_R128_INDIRECT       0x0f
-#define DRM_R128_FULLSCREEN     0x10
-#define DRM_R128_CLEAR2         0x11
-#define DRM_R128_GETPARAM       0x12
-#define DRM_R128_FLIP           0x13
-
-#define DRM_R128_FRONT_BUFFER	0x1
-#define DRM_R128_BACK_BUFFER	0x2
-#define DRM_R128_DEPTH_BUFFER	0x4
-
-typedef struct {
-   enum {
-      DRM_R128_INIT_CCE    = 0x01,
-      DRM_R128_CLEANUP_CCE = 0x02
-   } func;
-   unsigned long sarea_priv_offset;
-   int is_pci;
-   int cce_mode;
-   int cce_secure;		/* FIXME: Deprecated, we should remove this */
-   int ring_size;
-   int usec_timeout;
-
-   unsigned int fb_bpp;
-   unsigned int front_offset, front_pitch;
-   unsigned int back_offset, back_pitch;
-   unsigned int depth_bpp;
-   unsigned int depth_offset, depth_pitch;
-   unsigned int span_offset;
-
-   unsigned long fb_offset;
-   unsigned long mmio_offset;
-   unsigned long ring_offset;
-   unsigned long ring_rptr_offset;
-   unsigned long buffers_offset;
-   unsigned long agp_textures_offset;
-} drmR128Init;
-
-typedef struct {
-   int flush;
-   int idle;
-} drmR128CCEStop;
-
-typedef struct {
-   int idx;
-   int start;
-   int end;
-   int discard;
-} drmR128Indirect;
-
-typedef struct {
-   int idx;
-   int pitch;
-   int offset;
-   int format;
-   unsigned short x, y;
-   unsigned short width, height;
-} drmR128Blit;
-
-typedef struct {
-   enum {
-      DRM_R128_WRITE_SPAN         = 0x01,
-      DRM_R128_WRITE_PIXELS       = 0x02,
-      DRM_R128_READ_SPAN          = 0x03,
-      DRM_R128_READ_PIXELS        = 0x04
-   } func;
-   int n;
-   int *x;
-   int *y;
-   unsigned int *buffer;
-   unsigned char *mask;
-} drmR128Depth;
-
-typedef struct {
-   int prim;
-   int idx;                        /* Index of vertex buffer */
-   int count;                      /* Number of vertices in buffer */
-   int discard;                    /* Client finished with buffer? */
-} drmR128Vertex;
-
-typedef struct {
-   unsigned int *mask;
-} drmR128Stipple;
-
-typedef struct {
-   unsigned int flags;
-   unsigned int clear_color;
-   unsigned int clear_depth;
-   unsigned int color_mask;
-   unsigned int depth_mask;
-} drmR128Clear;
-
-typedef struct {
-   enum {
-      DRM_R128_INIT_FULLSCREEN    = 0x01,
-      DRM_R128_CLEANUP_FULLSCREEN = 0x02
-   } func;
-} drmR128Fullscreen;
-
-typedef struct drm_r128_getparam {
-	int param;
-	int *value;
-} drmR128GetParam;
-
-#define R128_PARAM_IRQ_NR            1
-
-#endif
diff --git a/src/r128_cursor.c b/src/r128_cursor.c
deleted file mode 100644
index 8321284..0000000
--- a/src/r128_cursor.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Rickard E. Faith <faith at valinux.com>
- *   Kevin E. Martin <martin at valinux.com>
- *
- * References:
- *
- *   RAGE 128 VR/ RAGE 128 GL Register Reference Manual (Technical
- *   Reference Manual P/N RRG-G04100-C Rev. 0.04), ATI Technologies: April
- *   1999.
- *
- *   RAGE 128 Software Development Manual (Technical Reference Manual P/N
- *   SDK-G04000 Rev. 0.01), ATI Technologies: June 1999.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-				/* Driver data structures */
-#include "r128.h"
-#include "r128_reg.h"
-
-				/* X and server generic header files */
-#include "xf86.h"
-
-#if X_BYTE_ORDER == X_BIG_ENDIAN
-#define P_SWAP32( a , b )                \
-       ((char *)a)[0] = ((char *)b)[3];  \
-       ((char *)a)[1] = ((char *)b)[2];  \
-       ((char *)a)[2] = ((char *)b)[1];  \
-       ((char *)a)[3] = ((char *)b)[0]
-
-#define P_SWAP16( a , b )                \
-       ((char *)a)[0] = ((char *)b)[1];  \
-       ((char *)a)[1] = ((char *)b)[0];  \
-       ((char *)a)[2] = ((char *)b)[3];  \
-       ((char *)a)[3] = ((char *)b)[2]
-#endif
-
-
-/* Set cursor foreground and background colors. */
-static void R128SetCursorColors(ScrnInfoPtr pScrn, int bg, int fg)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    if(info->IsSecondary)
-    {
-        OUTREG(R128_CUR2_CLR0, bg);
-        OUTREG(R128_CUR2_CLR1, fg);
-    }
-    else
-    {
-    	OUTREG(R128_CUR_CLR0, bg);
-    	OUTREG(R128_CUR_CLR1, fg);
-    }
-}
-
-/* Set cursor position to (x,y) with offset into cursor bitmap at
-   (xorigin,yorigin). */
-static void R128SetCursorPosition(ScrnInfoPtr pScrn, int x, int y)
-{
-    R128InfoPtr           info      = R128PTR(pScrn);
-    unsigned char         *R128MMIO = info->MMIO;
-    xf86CursorInfoPtr     cursor    = info->cursor;
-    int                   xorigin   = 0;
-    int                   yorigin   = 0;
-    int                   total_y   = pScrn->frameY1 - pScrn->frameY0;
-
-    if (x < 0)                        xorigin = -x;
-    if (y < 0)                        yorigin = -y;
-    if (y > total_y)                  y       = total_y;
-    if (info->Flags & V_DBLSCAN)      y       *= 2;
-    if (xorigin >= cursor->MaxWidth)  xorigin = cursor->MaxWidth - 1;
-    if (yorigin >= cursor->MaxHeight) yorigin = cursor->MaxHeight - 1;
-
-    if(!info->IsSecondary)
-    {
-    	OUTREG(R128_CUR_HORZ_VERT_OFF,  R128_CUR_LOCK | (xorigin << 16) | yorigin);
-    	OUTREG(R128_CUR_HORZ_VERT_POSN, (R128_CUR_LOCK
-				     | ((xorigin ? 0 : x) << 16)
-				     | (yorigin ? 0 : y)));
-    	OUTREG(R128_CUR_OFFSET,         info->cursor_start + yorigin * 16);
-    } 
-    else 
-    {
-        OUTREG(R128_CUR2_HORZ_VERT_OFF,  (R128_CUR2_LOCK
-				       | (xorigin << 16)
-				       | yorigin));
-        OUTREG(R128_CUR2_HORZ_VERT_POSN, (R128_CUR2_LOCK
-				       | ((xorigin ? 0 : x) << 16)
-				       | (yorigin ? 0 : y)));
-        OUTREG(R128_CUR2_OFFSET,         
-			info->cursor_start + pScrn->fbOffset + yorigin * 16);
-    }
-}
-
-/* Copy cursor image from `image' to video memory.  R128SetCursorPosition
-   will be called after this, so we can ignore xorigin and yorigin. */
-static void R128LoadCursorImage(ScrnInfoPtr pScrn, unsigned char *image)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    CARD32        *s        = (pointer)image;
-    CARD32        *d        = (pointer)((CARD8*)info->FB + info->cursor_start);
-    int           y;
-    CARD32        save;
-
-    if(!info->IsSecondary)
-    {
-    	save = INREG(R128_CRTC_GEN_CNTL);
-    	OUTREG(R128_CRTC_GEN_CNTL, save & (CARD32)~R128_CRTC_CUR_EN);
-    }
-    else
-    {
-        save = INREG(R128_CRTC2_GEN_CNTL);
-        OUTREG(R128_CRTC2_GEN_CNTL, save & (CARD32)~R128_CRTC2_CUR_EN);
-    }
-
-#if X_BYTE_ORDER == X_BIG_ENDIAN
-    switch(info->CurrentLayout.pixel_bytes) {
-    case 4:
-    case 3:
-	for (y = 0; y < 64; y++) {
-	    P_SWAP32(d,s);
-	    d++; s++;
-	    P_SWAP32(d,s);
-	    d++; s++;
-	    P_SWAP32(d,s);
-	    d++; s++;
-	    P_SWAP32(d,s);
-	    d++; s++;
-	}
-	break;
-    case 2:
-	for (y = 0; y < 64; y++) {
-	    P_SWAP16(d,s);
-	    d++; s++;
-	    P_SWAP16(d,s);
-	    d++; s++;
-	    P_SWAP16(d,s);
-	    d++; s++;
-	    P_SWAP16(d,s);
-	    d++; s++;
-	}
-	break;
-    default:
-	for (y = 0; y < 64; y++) {
-	    *d++ = *s++;
-	    *d++ = *s++;
-	    *d++ = *s++;
-	    *d++ = *s++;
-	}
-    }
-#else
-    for (y = 0; y < 64; y++) {
-	*d++ = *s++;
-	*d++ = *s++;
-	*d++ = *s++;
-	*d++ = *s++;
-    }
-#endif
-
-    /* Set the area after the cursor to be all transparent so that we
-       won't display corrupted cursors on the screen */
-    for (y = 0; y < 64; y++) {
-	*d++ = 0xffffffff; /* The AND bits */
-	*d++ = 0xffffffff;
-	*d++ = 0x00000000; /* The XOR bits */
-	*d++ = 0x00000000;
-    }
-
-
-    if(!info->IsSecondary)
-    	OUTREG(R128_CRTC_GEN_CNTL, save);
-    else
-        OUTREG(R128_CRTC2_GEN_CNTL, save);
-
-}
-
-/* Hide hardware cursor. */
-static void R128HideCursor(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-     if(info->IsSecondary)
-        OUTREGP(R128_CRTC2_GEN_CNTL, 0, ~R128_CRTC2_CUR_EN);
-     else
-    	OUTREGP(R128_CRTC_GEN_CNTL, 0, ~R128_CRTC_CUR_EN);
-}
-
-/* Show hardware cursor. */
-static void R128ShowCursor(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    if(info->IsSecondary)
-    {
-         OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_CUR_EN,
-               ~R128_CRTC2_CUR_EN);
-    }
-    else
-    {
-    	OUTREGP(R128_CRTC_GEN_CNTL, R128_CRTC_CUR_EN, ~R128_CRTC_CUR_EN);
-    }
-}
-
-/* Determine if hardware cursor is in use. */
-static Bool R128UseHWCursor(ScreenPtr pScreen, CursorPtr pCurs)
-{
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-    R128InfoPtr info  = R128PTR(pScrn);
-
-    return info->cursor_start ? TRUE : FALSE;
-}
-
-/* Initialize hardware cursor support. */
-Bool R128CursorInit(ScreenPtr pScreen)
-{
-    ScrnInfoPtr           pScrn   = xf86Screens[pScreen->myNum];
-    R128InfoPtr           info    = R128PTR(pScrn);
-    xf86CursorInfoPtr     cursor;
-    FBAreaPtr             fbarea;
-    int                   width;
-    int                   height;
-    int                   size;
-
-
-    if (!(cursor = info->cursor = xf86CreateCursorInfoRec())) return FALSE;
-
-    cursor->MaxWidth          = 64;
-    cursor->MaxHeight         = 64;
-    cursor->Flags             = (HARDWARE_CURSOR_TRUECOLOR_AT_8BPP
-				 | HARDWARE_CURSOR_SHOW_TRANSPARENT
-				 | HARDWARE_CURSOR_UPDATE_UNHIDDEN
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-				 | HARDWARE_CURSOR_BIT_ORDER_MSBFIRST
-#endif
-				 | HARDWARE_CURSOR_INVERT_MASK
-				 | HARDWARE_CURSOR_AND_SOURCE_WITH_MASK
-				 | HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_64
-				 | HARDWARE_CURSOR_SWAP_SOURCE_AND_MASK);
-
-    cursor->SetCursorColors   = R128SetCursorColors;
-    cursor->SetCursorPosition = R128SetCursorPosition;
-    cursor->LoadCursorImage   = R128LoadCursorImage;
-    cursor->HideCursor        = R128HideCursor;
-    cursor->ShowCursor        = R128ShowCursor;
-    cursor->UseHWCursor       = R128UseHWCursor;
-
-    size                      = (cursor->MaxWidth/4) * cursor->MaxHeight;
-    width                     = pScrn->displayWidth;
-    height                    = (size*2 + 1023) / pScrn->displayWidth;
-    fbarea                    = xf86AllocateOffscreenArea(pScreen,
-							  width,
-							  height,
-							  16,
-							  NULL,
-							  NULL,
-							  NULL);
-
-    if (!fbarea) {
-	info->cursor_start    = 0;
-	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		   "Hardware cursor disabled"
-		   " due to insufficient offscreen memory\n");
-    } else {
-	info->cursor_start    = R128_ALIGN((fbarea->box.x1
-					    + width * fbarea->box.y1)
-					   * info->CurrentLayout.pixel_bytes, 16);
-	info->cursor_end      = info->cursor_start + size;
-    }
-
-    R128TRACE(("R128CursorInit (0x%08x-0x%08x)\n",
-	       info->cursor_start, info->cursor_end));
-
-    return xf86InitCursor(pScreen, cursor);
-}
diff --git a/src/r128_dga.c b/src/r128_dga.c
deleted file mode 100644
index 7dd03aa..0000000
--- a/src/r128_dga.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * Authors:
- *   Ove KÃ¥ven <ovek at transgaming.com>,
- *    borrowing some code from the Chips and MGA drivers.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-				/* Driver data structures */
-#include "r128.h"
-#include "r128_probe.h"
-
-				/* X and server generic header files */
-#include "xf86.h"
-
-				/* DGA support */
-#include "dgaproc.h"
-
-#ifdef XF86DRI
-#include "r128_common.h"
-#endif
-
-static Bool R128_OpenFramebuffer(ScrnInfoPtr, char **, unsigned char **,
-					int *, int *, int *);
-static Bool R128_SetMode(ScrnInfoPtr, DGAModePtr);
-static int  R128_GetViewport(ScrnInfoPtr);
-static void R128_SetViewport(ScrnInfoPtr, int, int, int);
-static void R128_FillRect(ScrnInfoPtr, int, int, int, int, unsigned long);
-static void R128_BlitRect(ScrnInfoPtr, int, int, int, int, int, int);
-static void R128_BlitTransRect(ScrnInfoPtr, int, int, int, int, int, int,
-			       unsigned long);
-
-static DGAModePtr R128SetupDGAMode(ScrnInfoPtr pScrn,
-				     DGAModePtr modes,
-				     int *num,
-				     int bitsPerPixel,
-				     int depth,
-				     Bool pixmap,
-				     int secondPitch,
-				     unsigned long red,
-				     unsigned long green,
-				     unsigned long blue,
-				     short visualClass)
-{
-    R128InfoPtr   info     = R128PTR(pScrn);
-    DGAModePtr      newmodes = NULL;
-    DGAModePtr      currentMode;
-    DisplayModePtr  pMode;
-    DisplayModePtr  firstMode;
-    unsigned int    size;
-    int             pitch;
-    int             Bpp      = bitsPerPixel >> 3;
-
-SECOND_PASS:
-
-    pMode = firstMode = pScrn->modes;
-
-    while (1) {
-	pitch = pScrn->displayWidth;
-	size = pitch * Bpp * pMode->VDisplay;
-
-	if ((!secondPitch || (pitch != secondPitch)) &&
-	    (size <= info->FbMapSize)) {
-
-	    if (secondPitch)
-		pitch = secondPitch;
-
-	    if (!(newmodes = xrealloc(modes, (*num + 1) * sizeof(DGAModeRec))))
-		break;
-
-	    modes       = newmodes;
-	    currentMode = modes + *num;
-
-	    currentMode->mode           = pMode;
-	    currentMode->flags          = DGA_CONCURRENT_ACCESS;
-
-	    if (pixmap)
-		currentMode->flags     |= DGA_PIXMAP_AVAILABLE;
-
-	    if (info->accel) {
-	      if (info->accel->SetupForSolidFill &&
-		  info->accel->SubsequentSolidFillRect)
-		 currentMode->flags    |= DGA_FILL_RECT;
-	      if (info->accel->SetupForScreenToScreenCopy &&
-		  info->accel->SubsequentScreenToScreenCopy)
-		 currentMode->flags    |= DGA_BLIT_RECT | DGA_BLIT_RECT_TRANS;
-	      if (currentMode->flags &
-		  (DGA_PIXMAP_AVAILABLE | DGA_FILL_RECT |
-		   DGA_BLIT_RECT | DGA_BLIT_RECT_TRANS))
-		  currentMode->flags   &= ~DGA_CONCURRENT_ACCESS;
-	    }
-	    if (pMode->Flags & V_DBLSCAN)
-		currentMode->flags     |= DGA_DOUBLESCAN;
-	    if (pMode->Flags & V_INTERLACE)
-		currentMode->flags     |= DGA_INTERLACED;
-
-	    currentMode->byteOrder      = pScrn->imageByteOrder;
-	    currentMode->depth          = depth;
-	    currentMode->bitsPerPixel   = bitsPerPixel;
-	    currentMode->red_mask       = red;
-	    currentMode->green_mask     = green;
-	    currentMode->blue_mask      = blue;
-	    currentMode->visualClass    = visualClass;
-	    currentMode->viewportWidth  = pMode->HDisplay;
-	    currentMode->viewportHeight = pMode->VDisplay;
-	    currentMode->xViewportStep  = 8;
-	    currentMode->yViewportStep  = 1;
-	    currentMode->viewportFlags  = DGA_FLIP_RETRACE;
-	    currentMode->offset         = 0;
-	    currentMode->address        = (unsigned char*)info->LinearAddr;
-	    currentMode->bytesPerScanline = pitch * Bpp;
-	    currentMode->imageWidth     = pitch;
-	    currentMode->imageHeight    = (info->FbMapSize
-					   / currentMode->bytesPerScanline);
-	    currentMode->pixmapWidth    = currentMode->imageWidth;
-	    currentMode->pixmapHeight   = currentMode->imageHeight;
-	    currentMode->maxViewportX   = (currentMode->imageWidth
-					   - currentMode->viewportWidth);
-	    /* this might need to get clamped to some maximum */
-	    currentMode->maxViewportY   = (currentMode->imageHeight
-					   - currentMode->viewportHeight);
-	    (*num)++;
-	}
-
-	pMode = pMode->next;
-	if (pMode == firstMode)
-	    break;
-    }
-
-    if (secondPitch) {
-	secondPitch = 0;
-	goto SECOND_PASS;
-    }
-
-    return modes;
-}
-
-Bool
-R128DGAInit(ScreenPtr pScreen)
-{
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-   R128InfoPtr info = R128PTR(pScrn);
-   DGAModePtr modes = NULL;
-   int num = 0;
-
-   /* 8 */
-   modes = R128SetupDGAMode (pScrn, modes, &num, 8, 8,
-		(pScrn->bitsPerPixel == 8),
-		(pScrn->bitsPerPixel != 8) ? 0 : pScrn->displayWidth,
-		0, 0, 0, PseudoColor);
-
-   /* 15 */
-   modes = R128SetupDGAMode (pScrn, modes, &num, 16, 15,
-		(pScrn->bitsPerPixel == 16),
-		(pScrn->depth != 15) ? 0 : pScrn->displayWidth,
-		0x7c00, 0x03e0, 0x001f, TrueColor);
-
-   modes = R128SetupDGAMode (pScrn, modes, &num, 16, 15,
-		(pScrn->bitsPerPixel == 16),
-		(pScrn->depth != 15) ? 0 : pScrn->displayWidth,
-		0x7c00, 0x03e0, 0x001f, DirectColor);
-
-   /* 16 */
-   modes = R128SetupDGAMode (pScrn, modes, &num, 16, 16,
-		(pScrn->bitsPerPixel == 16),
-		(pScrn->depth != 16) ? 0 : pScrn->displayWidth,
-		0xf800, 0x07e0, 0x001f, TrueColor);
-
-   modes = R128SetupDGAMode (pScrn, modes, &num, 16, 16,
-		(pScrn->bitsPerPixel == 16),
-		(pScrn->depth != 16) ? 0 : pScrn->displayWidth,
-		0xf800, 0x07e0, 0x001f, DirectColor);
-
-   /* 24 */
-   modes = R128SetupDGAMode (pScrn, modes, &num, 24, 24,
-		(pScrn->bitsPerPixel == 24),
-		(pScrn->bitsPerPixel != 24) ? 0 : pScrn->displayWidth,
-		0xff0000, 0x00ff00, 0x0000ff, TrueColor);
-
-   modes = R128SetupDGAMode (pScrn, modes, &num, 24, 24,
-		(pScrn->bitsPerPixel == 24),
-		(pScrn->bitsPerPixel != 24) ? 0 : pScrn->displayWidth,
-		0xff0000, 0x00ff00, 0x0000ff, DirectColor);
-
-   /* 32 */
-   modes = R128SetupDGAMode (pScrn, modes, &num, 32, 24,
-		(pScrn->bitsPerPixel == 32),
-		(pScrn->bitsPerPixel != 32) ? 0 : pScrn->displayWidth,
-		0xff0000, 0x00ff00, 0x0000ff, TrueColor);
-
-   modes = R128SetupDGAMode (pScrn, modes, &num, 32, 24,
-		(pScrn->bitsPerPixel == 32),
-		(pScrn->bitsPerPixel != 32) ? 0 : pScrn->displayWidth,
-		0xff0000, 0x00ff00, 0x0000ff, DirectColor);
-
-   info->numDGAModes = num;
-   info->DGAModes = modes;
-
-   info->DGAFuncs.OpenFramebuffer    = R128_OpenFramebuffer;
-   info->DGAFuncs.CloseFramebuffer   = NULL;
-   info->DGAFuncs.SetMode            = R128_SetMode;
-   info->DGAFuncs.SetViewport        = R128_SetViewport;
-   info->DGAFuncs.GetViewport        = R128_GetViewport;
-
-   info->DGAFuncs.Sync               = NULL;
-   info->DGAFuncs.FillRect           = NULL;
-   info->DGAFuncs.BlitRect           = NULL;
-   info->DGAFuncs.BlitTransRect      = NULL;
-
-   if (info->accel) {
-      info->DGAFuncs.Sync            = info->accel->Sync;
-      if (info->accel->SetupForSolidFill &&
-	  info->accel->SubsequentSolidFillRect)
-	info->DGAFuncs.FillRect      = R128_FillRect;
-      if (info->accel->SetupForScreenToScreenCopy &&
-	  info->accel->SubsequentScreenToScreenCopy) {
-	info->DGAFuncs.BlitRect      = R128_BlitRect;
-	info->DGAFuncs.BlitTransRect = R128_BlitTransRect;
-      }
-   }
-
-   return DGAInit(pScreen, &(info->DGAFuncs), modes, num);
-}
-
-
-static Bool
-R128_SetMode(
-   ScrnInfoPtr pScrn,
-   DGAModePtr pMode
-){
-   static R128FBLayout SavedLayouts[MAXSCREENS];
-   int indx = pScrn->pScreen->myNum;
-   R128InfoPtr info = R128PTR(pScrn);
-
-   if(!pMode) { /* restore the original mode */
-	/* put the ScreenParameters back */
-	if(info->DGAactive)
-	    memcpy(&info->CurrentLayout, &SavedLayouts[indx], sizeof(R128FBLayout));
-
-	pScrn->currentMode = info->CurrentLayout.mode;
-
-	pScrn->SwitchMode(indx, pScrn->currentMode, 0);
-#ifdef XF86DRI
-	if (info->directRenderingEnabled) {
-	    R128CCE_STOP(pScrn, info);
-	}
-#endif
-	if (info->accelOn)
-	    R128EngineInit(pScrn);
-#ifdef XF86DRI
-	if (info->directRenderingEnabled) {
-	    R128CCE_START(pScrn, info);
-	}
-#endif
-	pScrn->AdjustFrame(indx, 0, 0, 0);
-	info->DGAactive = FALSE;
-   } else {
-	if(!info->DGAactive) {  /* save the old parameters */
-	    memcpy(&SavedLayouts[indx], &info->CurrentLayout, sizeof(R128FBLayout));
-	    info->DGAactive = TRUE;
-	}
-
-	info->CurrentLayout.bitsPerPixel = pMode->bitsPerPixel;
-	info->CurrentLayout.depth = pMode->depth;
-	info->CurrentLayout.displayWidth = pMode->bytesPerScanline /
-					    (pMode->bitsPerPixel >> 3);
-	info->CurrentLayout.pixel_bytes = pMode->bitsPerPixel / 8;
-	info->CurrentLayout.pixel_code  = (pMode->bitsPerPixel != 16
-					  ? pMode->bitsPerPixel
-					  : pMode->depth);
-	/* R128ModeInit() will set the mode field */
-
-	pScrn->SwitchMode(indx, pMode->mode, 0);
-
-#ifdef XF86DRI
-	if (info->directRenderingEnabled) {
-	    R128CCE_STOP(pScrn, info);
-	}
-#endif
-	if (info->accelOn)
-		R128EngineInit(pScrn);
-#ifdef XF86DRI
-	if (info->directRenderingEnabled) {
-	    R128CCE_START(pScrn, info);
-	}
-#endif
-   }
-
-   return TRUE;
-}
-
-
-
-static int
-R128_GetViewport(
-  ScrnInfoPtr pScrn
-){
-    R128InfoPtr info = R128PTR(pScrn);
-
-    return info->DGAViewportStatus;
-}
-
-
-static void
-R128_SetViewport(
-   ScrnInfoPtr pScrn,
-   int x, int y,
-   int flags
-){
-   R128InfoPtr info = R128PTR(pScrn);
-
-   pScrn->AdjustFrame(pScrn->pScreen->myNum, x, y, flags);
-   info->DGAViewportStatus = 0;  /* FIXME */
-}
-
-
-static void
-R128_FillRect (
-   ScrnInfoPtr pScrn,
-   int x, int y, int w, int h,
-   unsigned long color
-){
-    R128InfoPtr info = R128PTR(pScrn);
-
-    (*info->accel->SetupForSolidFill)(pScrn, color, GXcopy, (CARD32)(~0));
-    (*info->accel->SubsequentSolidFillRect)(pScrn, x, y, w, h);
-
-    if (pScrn->bitsPerPixel == info->CurrentLayout.bitsPerPixel)
-	SET_SYNC_FLAG(info->accel);
-}
-
-static void
-R128_BlitRect(
-   ScrnInfoPtr pScrn,
-   int srcx, int srcy,
-   int w, int h,
-   int dstx, int dsty
-){
-    R128InfoPtr info = R128PTR(pScrn);
-    int xdir = ((srcx < dstx) && (srcy == dsty)) ? -1 : 1;
-    int ydir = (srcy < dsty) ? -1 : 1;
-
-    (*info->accel->SetupForScreenToScreenCopy)(
-	pScrn, xdir, ydir, GXcopy, (CARD32)(~0), -1);
-    (*info->accel->SubsequentScreenToScreenCopy)(
-	pScrn, srcx, srcy, dstx, dsty, w, h);
-
-    if (pScrn->bitsPerPixel == info->CurrentLayout.bitsPerPixel)
-	SET_SYNC_FLAG(info->accel);
-}
-
-
-static void
-R128_BlitTransRect(
-   ScrnInfoPtr pScrn,
-   int srcx, int srcy,
-   int w, int h,
-   int dstx, int dsty,
-   unsigned long color
-){
-    R128InfoPtr info = R128PTR(pScrn);
-    int xdir = ((srcx < dstx) && (srcy == dsty)) ? -1 : 1;
-    int ydir = (srcy < dsty) ? -1 : 1;
-
-    info->XAAForceTransBlit = TRUE;
-
-    (*info->accel->SetupForScreenToScreenCopy)(
-	pScrn, xdir, ydir, GXcopy, (CARD32)(~0), color);
-
-    info->XAAForceTransBlit = FALSE;
-
-    (*info->accel->SubsequentScreenToScreenCopy)(
-	pScrn, srcx, srcy, dstx, dsty, w, h);
-
-    if (pScrn->bitsPerPixel == info->CurrentLayout.bitsPerPixel)
-	SET_SYNC_FLAG(info->accel);
-}
-
-
-static Bool
-R128_OpenFramebuffer(
-   ScrnInfoPtr pScrn,
-   char **name,
-   unsigned char **mem,
-   int *size,
-   int *offset,
-   int *flags
-){
-    R128InfoPtr info = R128PTR(pScrn);
-
-    *name = NULL;               /* no special device */
-    *mem = (unsigned char*)info->LinearAddr;
-    *size = info->FbMapSize;
-    *offset = 0;
-    *flags = /* DGA_NEED_ROOT */ 0; /* don't need root, just /dev/mem access */
-
-    return TRUE;
-}
diff --git a/src/r128_dri.c b/src/r128_dri.c
deleted file mode 100644
index 2927718..0000000
--- a/src/r128_dri.c
+++ /dev/null
@@ -1,1499 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <stdio.h>
-
-/*
- * Authors:
- *   Kevin E. Martin <martin at valinux.com>
- *   Rickard E. Faith <faith at valinux.com>
- *   Daryll Strauss <daryll at valinux.com>
- *   Gareth Hughes <gareth at valinux.com>
- *
- */
-
-				/* Driver data structures */
-#include "r128.h"
-#include "r128_dri.h"
-#include "r128_common.h"
-#include "r128_reg.h"
-#include "r128_sarea.h"
-#include "r128_version.h"
-
-				/* X and server generic header files */
-#include "xf86.h"
-#include "xf86PciInfo.h"
-#include "windowstr.h"
-
-#include "shadowfb.h"
-				/* GLX/DRI/DRM definitions */
-#define _XF86DRI_SERVER_
-#include "GL/glxtokens.h"
-#include "sarea.h"
-
-static size_t r128_drm_page_size;
-
-static void R128DRITransitionTo2d(ScreenPtr pScreen);
-static void R128DRITransitionTo3d(ScreenPtr pScreen);
-static void R128DRITransitionMultiToSingle3d(ScreenPtr pScreen);
-static void R128DRITransitionSingleToMulti3d(ScreenPtr pScreen);
-
-static void R128DRIRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
-
-/* Initialize the visual configs that are supported by the hardware.
-   These are combined with the visual configs that the indirect
-   rendering core supports, and the intersection is exported to the
-   client. */
-static Bool R128InitVisualConfigs(ScreenPtr pScreen)
-{
-    ScrnInfoPtr       pScrn            = xf86Screens[pScreen->myNum];
-    R128InfoPtr       info             = R128PTR(pScrn);
-    int               numConfigs       = 0;
-    __GLXvisualConfig *pConfigs        = NULL;
-    R128ConfigPrivPtr pR128Configs     = NULL;
-    R128ConfigPrivPtr *pR128ConfigPtrs = NULL;
-    int               i, accum, stencil, db;
-
-    switch (info->CurrentLayout.pixel_code) {
-    case 8:  /* 8bpp mode is not support */
-    case 15: /* FIXME */
-    case 24: /* FIXME */
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[dri] R128DRIScreenInit failed (depth %d not supported).  "
-		   "Disabling DRI.\n", info->CurrentLayout.pixel_code);
-	return FALSE;
-
-#define R128_USE_ACCUM   1
-#define R128_USE_STENCIL 1
-#define R128_USE_DB      1
-
-    case 16:
-	numConfigs = 1;
-	if (R128_USE_ACCUM)   numConfigs *= 2;
-	if (R128_USE_STENCIL) numConfigs *= 2;
-	if (R128_USE_DB)      numConfigs *= 2;
-
-	if (!(pConfigs
-	      = (__GLXvisualConfig*)xcalloc(sizeof(__GLXvisualConfig),
-					      numConfigs))) {
-	    return FALSE;
-	}
-	if (!(pR128Configs
-	      = (R128ConfigPrivPtr)xcalloc(sizeof(R128ConfigPrivRec),
-					     numConfigs))) {
-	    xfree(pConfigs);
-	    return FALSE;
-	}
-	if (!(pR128ConfigPtrs
-	      = (R128ConfigPrivPtr*)xcalloc(sizeof(R128ConfigPrivPtr),
-					      numConfigs))) {
-	    xfree(pConfigs);
-	    xfree(pR128Configs);
-	    return FALSE;
-	}
-
-	i = 0;
-	for (db = 0; db <= R128_USE_DB; db++) {
-	  for (accum = 0; accum <= R128_USE_ACCUM; accum++) {
-	    for (stencil = 0; stencil <= R128_USE_STENCIL; stencil++) {
-		pR128ConfigPtrs[i] = &pR128Configs[i];
-
-		pConfigs[i].vid                = (VisualID)(-1);
-		pConfigs[i].class              = -1;
-		pConfigs[i].rgba               = TRUE;
-		pConfigs[i].redSize            = 5;
-		pConfigs[i].greenSize          = 6;
-		pConfigs[i].blueSize           = 5;
-		pConfigs[i].alphaSize          = 0;
-		pConfigs[i].redMask            = 0x0000F800;
-		pConfigs[i].greenMask          = 0x000007E0;
-		pConfigs[i].blueMask           = 0x0000001F;
-		pConfigs[i].alphaMask          = 0x00000000;
-		if (accum) { /* Simulated in software */
-		    pConfigs[i].accumRedSize   = 16;
-		    pConfigs[i].accumGreenSize = 16;
-		    pConfigs[i].accumBlueSize  = 16;
-		    pConfigs[i].accumAlphaSize = 0;
-		} else {
-		    pConfigs[i].accumRedSize   = 0;
-		    pConfigs[i].accumGreenSize = 0;
-		    pConfigs[i].accumBlueSize  = 0;
-		    pConfigs[i].accumAlphaSize = 0;
-		}
-		if (db)
-		    pConfigs[i].doubleBuffer       = TRUE;
-		else
-		    pConfigs[i].doubleBuffer       = FALSE;
-		pConfigs[i].stereo             = FALSE;
-		pConfigs[i].bufferSize         = 16;
-		pConfigs[i].depthSize          = 16;
-		if (stencil)
-		    pConfigs[i].stencilSize    = 8; /* Simulated in software */
-		else
-		    pConfigs[i].stencilSize    = 0;
-		pConfigs[i].auxBuffers         = 0;
-		pConfigs[i].level              = 0;
-		if (accum || stencil) {
-		   pConfigs[i].visualRating    = GLX_SLOW_CONFIG;
-		} else {
-		   pConfigs[i].visualRating    = GLX_NONE;
-		}
-		pConfigs[i].transparentPixel   = GLX_NONE;
-		pConfigs[i].transparentRed     = 0;
-		pConfigs[i].transparentGreen   = 0;
-		pConfigs[i].transparentBlue    = 0;
-		pConfigs[i].transparentAlpha   = 0;
-		pConfigs[i].transparentIndex   = 0;
-		i++;
-	    }
-	  }
-	}
-	break;
-
-    case 32:
-	numConfigs = 1;
-	if (R128_USE_ACCUM)   numConfigs *= 2;
-	if (R128_USE_STENCIL) numConfigs *= 2;
-	if (R128_USE_DB)      numConfigs *= 2;
-
-	if (!(pConfigs
-	      = (__GLXvisualConfig*)xcalloc(sizeof(__GLXvisualConfig),
-					      numConfigs))) {
-	    return FALSE;
-	}
-	if (!(pR128Configs
-	      = (R128ConfigPrivPtr)xcalloc(sizeof(R128ConfigPrivRec),
-					     numConfigs))) {
-	    xfree(pConfigs);
-	    return FALSE;
-	}
-	if (!(pR128ConfigPtrs
-	      = (R128ConfigPrivPtr*)xcalloc(sizeof(R128ConfigPrivPtr),
-					      numConfigs))) {
-	    xfree(pConfigs);
-	    xfree(pR128Configs);
-	    return FALSE;
-	}
-
-	i = 0;
-	for (db = 0; db <= R128_USE_DB; db++) {
-	  for (accum = 0; accum <= R128_USE_ACCUM; accum++) {
-	    for (stencil = 0; stencil <= R128_USE_STENCIL; stencil++) {
-		pR128ConfigPtrs[i] = &pR128Configs[i];
-
-		pConfigs[i].vid                = (VisualID)(-1);
-		pConfigs[i].class              = -1;
-		pConfigs[i].rgba               = TRUE;
-		pConfigs[i].redSize            = 8;
-		pConfigs[i].greenSize          = 8;
-		pConfigs[i].blueSize           = 8;
-		pConfigs[i].alphaSize          = 0;
-		pConfigs[i].redMask            = 0x00FF0000;
-		pConfigs[i].greenMask          = 0x0000FF00;
-		pConfigs[i].blueMask           = 0x000000FF;
-		pConfigs[i].alphaMask          = 0x00000000;
-		if (accum) { /* Simulated in software */
-		    pConfigs[i].accumRedSize   = 16;
-		    pConfigs[i].accumGreenSize = 16;
-		    pConfigs[i].accumBlueSize  = 16;
-		    pConfigs[i].accumAlphaSize = 0;
-		} else {
-		    pConfigs[i].accumRedSize   = 0;
-		    pConfigs[i].accumGreenSize = 0;
-		    pConfigs[i].accumBlueSize  = 0;
-		    pConfigs[i].accumAlphaSize = 0;
-		}
-		if (db)
-		    pConfigs[i].doubleBuffer       = TRUE;
-		else
-		    pConfigs[i].doubleBuffer       = FALSE;
-		pConfigs[i].stereo             = FALSE;
-		pConfigs[i].bufferSize         = 24;
-		if (stencil) {
-		    pConfigs[i].depthSize      = 24;
-		    pConfigs[i].stencilSize    = 8;
-		} else {
-		    pConfigs[i].depthSize      = 24;
-		    pConfigs[i].stencilSize    = 0;
-		}
-		pConfigs[i].auxBuffers         = 0;
-		pConfigs[i].level              = 0;
-		if (accum) {
-		   pConfigs[i].visualRating    = GLX_SLOW_CONFIG;
-		} else {
-		   pConfigs[i].visualRating    = GLX_NONE;
-		}
-		pConfigs[i].transparentPixel   = GLX_NONE;
-		pConfigs[i].transparentRed     = 0;
-		pConfigs[i].transparentGreen   = 0;
-		pConfigs[i].transparentBlue    = 0;
-		pConfigs[i].transparentAlpha   = 0;
-		pConfigs[i].transparentIndex   = 0;
-		i++;
-	    }
-	  }
-	}
-	break;
-    }
-
-    info->numVisualConfigs   = numConfigs;
-    info->pVisualConfigs     = pConfigs;
-    info->pVisualConfigsPriv = pR128Configs;
-    GlxSetVisualConfigs(numConfigs, pConfigs, (void**)pR128ConfigPtrs);
-    return TRUE;
-}
-
-/* Create the Rage 128-specific context information */
-static Bool R128CreateContext(ScreenPtr pScreen, VisualPtr visual,
-			      drm_context_t hwContext, void *pVisualConfigPriv,
-			      DRIContextType contextStore)
-{
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-    R128InfoPtr info = R128PTR(pScrn);
-
-    info->drmCtx = hwContext;
-    return TRUE;
-}
-
-/* Destroy the Rage 128-specific context information */
-static void R128DestroyContext(ScreenPtr pScreen, drm_context_t hwContext,
-			       DRIContextType contextStore)
-{
-    /* Nothing yet */
-}
-
-/* Called when the X server is woken up to allow the last client's
-   context to be saved and the X server's context to be loaded.  This is
-   not necessary for the Rage 128 since the client detects when it's
-   context is not currently loaded and then load's it itself.  Since the
-   registers to start and stop the CCE are privileged, only the X server
-   can start/stop the engine. */
-static void R128EnterServer(ScreenPtr pScreen)
-{
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-    R128InfoPtr info = R128PTR(pScrn);
-
-    if (info->accel) info->accel->NeedToSync = TRUE;
-}
-
-/* Called when the X server goes to sleep to allow the X server's
-   context to be saved and the last client's context to be loaded.  This
-   is not necessary for the Rage 128 since the client detects when it's
-   context is not currently loaded and then load's it itself.  Since the
-   registers to start and stop the CCE are privileged, only the X server
-   can start/stop the engine. */
-static void R128LeaveServer(ScreenPtr pScreen)
-{
-    ScrnInfoPtr   pScrn     = xf86Screens[pScreen->myNum];
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    if (!info->directRenderingEnabled) {
-	/* Save all hardware scissors */
-	info->sc_left     = INREG(R128_SC_LEFT);
-	info->sc_right    = INREG(R128_SC_RIGHT);
-	info->sc_top      = INREG(R128_SC_TOP);
-	info->sc_bottom   = INREG(R128_SC_BOTTOM);
-	info->aux_sc_cntl = INREG(R128_SC_BOTTOM);
-    } else if (info->CCEInUse) {
-	R128CCEReleaseIndirect(pScrn);
-
-	info->CCEInUse = FALSE;
-    }
-}
-
-/* Contexts can be swapped by the X server if necessary.  This callback
-   is currently only used to perform any functions necessary when
-   entering or leaving the X server, and in the future might not be
-   necessary. */
-static void R128DRISwapContext(ScreenPtr pScreen, DRISyncType syncType,
-			       DRIContextType oldContextType, void *oldContext,
-			       DRIContextType newContextType, void *newContext)
-{
-    if ((syncType==DRI_3D_SYNC) && (oldContextType==DRI_2D_CONTEXT) &&
-	(newContextType==DRI_2D_CONTEXT)) { /* Entering from Wakeup */
-	R128EnterServer(pScreen);
-    }
-    if ((syncType==DRI_2D_SYNC) && (oldContextType==DRI_NO_CONTEXT) &&
-	(newContextType==DRI_2D_CONTEXT)) { /* Exiting from Block Handler */
-	R128LeaveServer(pScreen);
-    }
-}
-
-/* Initialize the state of the back and depth buffers. */
-static void R128DRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 indx)
-{
-    /* FIXME: This routine needs to have acceleration turned on */
-    ScreenPtr   pScreen = pWin->drawable.pScreen;
-    ScrnInfoPtr pScrn   = xf86Screens[pScreen->myNum];
-    R128InfoPtr info    = R128PTR(pScrn);
-    BoxPtr      pbox, pboxSave;
-    int         nbox, nboxSave;
-    int         depth;
-
-    /* FIXME: Use accel when CCE 2D code is written
-     * EA: What is this code kept for? Radeon doesn't have it and
-     * has a comment: "There's no need for the 2d driver to be clearing
-     * buffers for the 3d client.  It knows how to do that on its own."
-     */
-    if (info->directRenderingEnabled)
-	return;
-
-    /* FIXME: This should be based on the __GLXvisualConfig info */
-    switch (pScrn->bitsPerPixel) {
-    case  8: depth = 0x000000ff; break;
-    case 16: depth = 0x0000ffff; break;
-    case 24: depth = 0x00ffffff; break;
-    case 32: depth = 0xffffffff; break;
-    default: depth = 0x00000000; break;
-    }
-
-    /* FIXME: Copy XAAPaintWindow() and use REGION_TRANSLATE() */
-    /* FIXME: Only initialize the back and depth buffers for contexts
-       that request them */
-
-    pboxSave = pbox = REGION_RECTS(prgn);
-    nboxSave = nbox = REGION_NUM_RECTS(prgn);
-
-    (*info->accel->SetupForSolidFill)(pScrn, 0, GXcopy, (CARD32)(-1));
-    for (; nbox; nbox--, pbox++) {
-	(*info->accel->SubsequentSolidFillRect)(pScrn,
-						pbox->x1 + info->fbX,
-						pbox->y1 + info->fbY,
-						pbox->x2 - pbox->x1,
-						pbox->y2 - pbox->y1);
-	(*info->accel->SubsequentSolidFillRect)(pScrn,
-						pbox->x1 + info->backX,
-						pbox->y1 + info->backY,
-						pbox->x2 - pbox->x1,
-						pbox->y2 - pbox->y1);
-    }
-
-    pbox = pboxSave;
-    nbox = nboxSave;
-
-    /* FIXME: this needs to consider depth tiling. */
-    (*info->accel->SetupForSolidFill)(pScrn, depth, GXcopy, (CARD32)(-1));
-    for (; nbox; nbox--, pbox++)
-	(*info->accel->SubsequentSolidFillRect)(pScrn,
-						pbox->x1 + info->depthX,
-						pbox->y1 + info->depthY,
-						pbox->x2 - pbox->x1,
-						pbox->y2 - pbox->y1);
-
-    info->accel->NeedToSync = TRUE;
-}
-
-/* Copy the back and depth buffers when the X server moves a window. */
-static void R128DRIMoveBuffers(WindowPtr pWin, DDXPointRec ptOldOrg,
-			       RegionPtr prgnSrc, CARD32 indx)
-{
-    ScreenPtr   pScreen = pWin->drawable.pScreen;
-    ScrnInfoPtr pScrn   = xf86Screens[pScreen->myNum];
-    R128InfoPtr info   = R128PTR(pScrn);
-
-    /* FIXME: This routine needs to have acceleration turned on */
-    /* FIXME: Copy XAACopyWindow() and use REGION_TRANSLATE() */
-    /* FIXME: Only initialize the back and depth buffers for contexts
-       that request them */
-
-    /* FIXME: Use accel when CCE 2D code is written */
-    if (info->directRenderingEnabled)
-	return;
-}
-
-/* Initialize the AGP state.  Request memory for use in AGP space, and
-   initialize the Rage 128 registers to point to that memory. */
-static Bool R128DRIAgpInit(R128InfoPtr info, ScreenPtr pScreen)
-{
-    unsigned char *R128MMIO = info->MMIO;
-    unsigned long mode;
-    unsigned int  vendor, device;
-    int           ret;
-    unsigned long cntl, chunk;
-    int           s, l;
-    int           flags;
-    unsigned long agpBase;
-
-    if (drmAgpAcquire(info->drmFD) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_WARNING, "[agp] AGP not available\n");
-	return FALSE;
-    }
-
-				/* Modify the mode if the default mode is
-				   not appropriate for this particular
-				   combination of graphics card and AGP
-				   chipset. */
-
-    mode   = drmAgpGetMode(info->drmFD);        /* Default mode */
-    vendor = drmAgpVendorId(info->drmFD);
-    device = drmAgpDeviceId(info->drmFD);
-
-    mode &= ~R128_AGP_MODE_MASK;
-    switch (info->agpMode) {
-    case 4:          mode |= R128_AGP_4X_MODE;
-    case 2:          mode |= R128_AGP_2X_MODE;
-    case 1: default: mode |= R128_AGP_1X_MODE;
-    }
-
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[agp] Mode 0x%08lx [AGP 0x%04x/0x%04x; Card 0x%04x/0x%04x]\n",
-	       mode, vendor, device,
-	       PCI_DEV_VENDOR_ID(info->PciInfo),
-	       PCI_DEV_DEVICE_ID(info->PciInfo));
-
-    if (drmAgpEnable(info->drmFD, mode) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR, "[agp] AGP not enabled\n");
-	drmAgpRelease(info->drmFD);
-	return FALSE;
-    }
-
-    info->agpOffset = 0;
-
-    if ((ret = drmAgpAlloc(info->drmFD, info->agpSize*1024*1024, 0, NULL,
-			   &info->agpMemHandle)) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR, "[agp] Out of memory (%d)\n", ret);
-	drmAgpRelease(info->drmFD);
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[agp] %d kB allocated with handle 0x%08x\n",
-	       info->agpSize*1024, info->agpMemHandle);
-
-    if (drmAgpBind(info->drmFD, info->agpMemHandle, info->agpOffset) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR, "[agp] Could not bind\n");
-	drmAgpFree(info->drmFD, info->agpMemHandle);
-	drmAgpRelease(info->drmFD);
-	return FALSE;
-    }
-
-				/* Initialize the CCE ring buffer data */
-    info->ringStart       = info->agpOffset;
-    info->ringMapSize     = info->ringSize*1024*1024 + r128_drm_page_size;
-    info->ringSizeLog2QW  = R128MinBits(info->ringSize*1024*1024/8) - 1;
-
-    info->ringReadOffset  = info->ringStart + info->ringMapSize;
-    info->ringReadMapSize = r128_drm_page_size;
-
-				/* Reserve space for vertex/indirect buffers */
-    info->bufStart        = info->ringReadOffset + info->ringReadMapSize;
-    info->bufMapSize      = info->bufSize*1024*1024;
-
-				/* Reserve the rest for AGP textures */
-    info->agpTexStart     = info->bufStart + info->bufMapSize;
-    s = (info->agpSize*1024*1024 - info->agpTexStart);
-    l = R128MinBits((s-1) / R128_NR_TEX_REGIONS);
-    if (l < R128_LOG_TEX_GRANULARITY) l = R128_LOG_TEX_GRANULARITY;
-    info->agpTexMapSize   = (s >> l) << l;
-    info->log2AGPTexGran  = l;
-
-    if (info->CCESecure) flags = DRM_READ_ONLY;
-    else                  flags = 0;
-
-    if (drmAddMap(info->drmFD, info->ringStart, info->ringMapSize,
-		  DRM_AGP, flags, &info->ringHandle) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[agp] Could not add ring mapping\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[agp] ring handle = 0x%08x\n", info->ringHandle);
-
-    if (drmMap(info->drmFD, info->ringHandle, info->ringMapSize,
-	       &info->ring) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR, "[agp] Could not map ring\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[agp] Ring mapped at 0x%08lx\n",
-	       (unsigned long)info->ring);
-
-    if (drmAddMap(info->drmFD, info->ringReadOffset, info->ringReadMapSize,
-		  DRM_AGP, flags, &info->ringReadPtrHandle) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[agp] Could not add ring read ptr mapping\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
- 	       "[agp] ring read ptr handle = 0x%08x\n",
-	       info->ringReadPtrHandle);
-
-    if (drmMap(info->drmFD, info->ringReadPtrHandle, info->ringReadMapSize,
-	       &info->ringReadPtr) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[agp] Could not map ring read ptr\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[agp] Ring read ptr mapped at 0x%08lx\n",
-	       (unsigned long)info->ringReadPtr);
-
-    if (drmAddMap(info->drmFD, info->bufStart, info->bufMapSize,
-		  DRM_AGP, 0, &info->bufHandle) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[agp] Could not add vertex/indirect buffers mapping\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[agp] vertex/indirect buffers handle = 0x%08x\n",
-	       info->bufHandle);
-
-    if (drmMap(info->drmFD, info->bufHandle, info->bufMapSize,
-	       &info->buf) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[agp] Could not map vertex/indirect buffers\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[agp] Vertex/indirect buffers mapped at 0x%08lx\n",
-	       (unsigned long)info->buf);
-
-    if (drmAddMap(info->drmFD, info->agpTexStart, info->agpTexMapSize,
-		  DRM_AGP, 0, &info->agpTexHandle) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[agp] Could not add AGP texture map mapping\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[agp] AGP texture map handle = 0x%08x\n",
-	       info->agpTexHandle);
-
-    if (drmMap(info->drmFD, info->agpTexHandle, info->agpTexMapSize,
-	       &info->agpTex) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[agp] Could not map AGP texture map\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[agp] AGP Texture map mapped at 0x%08lx\n",
-	       (unsigned long)info->agpTex);
-
-				/* Initialize Rage 128's AGP registers */
-    cntl  = INREG(R128_AGP_CNTL);
-    cntl &= ~R128_AGP_APER_SIZE_MASK;
-    switch (info->agpSize) {
-    case 256: cntl |= R128_AGP_APER_SIZE_256MB; break;
-    case 128: cntl |= R128_AGP_APER_SIZE_128MB; break;
-    case  64: cntl |= R128_AGP_APER_SIZE_64MB;  break;
-    case  32: cntl |= R128_AGP_APER_SIZE_32MB;  break;
-    case  16: cntl |= R128_AGP_APER_SIZE_16MB;  break;
-    case   8: cntl |= R128_AGP_APER_SIZE_8MB;   break;
-    case   4: cntl |= R128_AGP_APER_SIZE_4MB;   break;
-    default:
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[agp] Illegal aperture size %d kB\n",
-		   info->agpSize*1024);
-	return FALSE;
-    }
-    agpBase = drmAgpBase(info->drmFD);
-    OUTREG(R128_AGP_BASE, agpBase);
-    OUTREG(R128_AGP_CNTL, cntl);
-
-				/* Disable Rage 128's PCIGART registers */
-    chunk = INREG(R128_BM_CHUNK_0_VAL);
-    chunk &= ~(R128_BM_PTR_FORCE_TO_PCI |
-	       R128_BM_PM4_RD_FORCE_TO_PCI |
-	       R128_BM_GLOBAL_FORCE_TO_PCI);
-    OUTREG(R128_BM_CHUNK_0_VAL, chunk);
-
-    OUTREG(R128_PCI_GART_PAGE, 1); /* Ensure AGP GART is used (for now) */
-
-    return TRUE;
-}
-
-static Bool R128DRIPciInit(R128InfoPtr info, ScreenPtr pScreen)
-{
-    unsigned char *R128MMIO = info->MMIO;
-    CARD32 chunk;
-    int ret;
-    int flags;
-
-    info->agpOffset = 0;
-
-    ret = drmScatterGatherAlloc(info->drmFD, info->agpSize*1024*1024,
-				&info->pciMemHandle);
-    if (ret < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR, "[pci] Out of memory (%d)\n", ret);
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[pci] %d kB allocated with handle 0x%08x\n",
-	       info->agpSize*1024, info->pciMemHandle);
-
-				/* Initialize the CCE ring buffer data */
-    info->ringStart       = info->agpOffset;
-    info->ringMapSize     = info->ringSize*1024*1024 + r128_drm_page_size;
-    info->ringSizeLog2QW  = R128MinBits(info->ringSize*1024*1024/8) - 1;
-
-    info->ringReadOffset  = info->ringStart + info->ringMapSize;
-    info->ringReadMapSize = r128_drm_page_size;
-
-				/* Reserve space for vertex/indirect buffers */
-    info->bufStart        = info->ringReadOffset + info->ringReadMapSize;
-    info->bufMapSize      = info->bufSize*1024*1024;
-
-    flags = DRM_READ_ONLY | DRM_LOCKED | DRM_KERNEL;
-
-    if (drmAddMap(info->drmFD, info->ringStart, info->ringMapSize,
-		  DRM_SCATTER_GATHER, flags, &info->ringHandle) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[pci] Could not add ring mapping\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[pci] ring handle = 0x%08x\n", info->ringHandle);
-
-    if (drmMap(info->drmFD, info->ringHandle, info->ringMapSize,
-	       &info->ring) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR, "[pci] Could not map ring\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[pci] Ring mapped at 0x%08lx\n",
-	       (unsigned long)info->ring);
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[pci] Ring contents 0x%08lx\n",
-	       *(unsigned long *)(pointer)info->ring);
-
-    if (drmAddMap(info->drmFD, info->ringReadOffset, info->ringReadMapSize,
-		  DRM_SCATTER_GATHER, flags, &info->ringReadPtrHandle) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[pci] Could not add ring read ptr mapping\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[pci] ring read ptr handle = 0x%08x\n",
-	       info->ringReadPtrHandle);
-
-    if (drmMap(info->drmFD, info->ringReadPtrHandle, info->ringReadMapSize,
-	       &info->ringReadPtr) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[pci] Could not map ring read ptr\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[pci] Ring read ptr mapped at 0x%08lx\n",
-	       (unsigned long)info->ringReadPtr);
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[pci] Ring read ptr contents 0x%08lx\n",
-	       *(unsigned long *)(pointer)info->ringReadPtr);
-
-    if (drmAddMap(info->drmFD, info->bufStart, info->bufMapSize,
-		  DRM_SCATTER_GATHER, 0, &info->bufHandle) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[pci] Could not add vertex/indirect buffers mapping\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[pci] vertex/indirect buffers handle = 0x%08x\n",
-	       info->bufHandle);
-
-    if (drmMap(info->drmFD, info->bufHandle, info->bufMapSize,
-	       &info->buf) < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[pci] Could not map vertex/indirect buffers\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[pci] Vertex/indirect buffers mapped at 0x%08lx\n",
-	       (unsigned long)info->buf);
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[pci] Vertex/indirect buffers contents 0x%08lx\n",
-	       *(unsigned long *)(pointer)info->buf);
-
-    switch (info->Chipset) {
-    case PCI_CHIP_RAGE128LE:
-    case PCI_CHIP_RAGE128RE:
-    case PCI_CHIP_RAGE128RK:
-    case PCI_CHIP_RAGE128PD:
-    case PCI_CHIP_RAGE128PP:
-    case PCI_CHIP_RAGE128PR:
-	/* This is a PCI card, do nothing */
-	break;
-
-    case PCI_CHIP_RAGE128LF:
-    case PCI_CHIP_RAGE128MF:
-    case PCI_CHIP_RAGE128ML:
-    case PCI_CHIP_RAGE128RF:
-    case PCI_CHIP_RAGE128RG:
-    case PCI_CHIP_RAGE128RL:
-    case PCI_CHIP_RAGE128SM:
-    case PCI_CHIP_RAGE128PF:
-    case PCI_CHIP_RAGE128TF:
-    case PCI_CHIP_RAGE128TL:
-    case PCI_CHIP_RAGE128TR:
-    /* FIXME: ATI documentation does not specify if the following chips are
-     * AGP or PCI, it just mentions their PCI IDs.  I'm assuming they're AGP
-     * until I get more correct information. <mharris at redhat.com>
-     */
-    case PCI_CHIP_RAGE128PA:
-    case PCI_CHIP_RAGE128PB:
-    case PCI_CHIP_RAGE128PC:
-    case PCI_CHIP_RAGE128PE:
-    case PCI_CHIP_RAGE128PG:
-    case PCI_CHIP_RAGE128PH:
-    case PCI_CHIP_RAGE128PI:
-    case PCI_CHIP_RAGE128PJ:
-    case PCI_CHIP_RAGE128PK:
-    case PCI_CHIP_RAGE128PL:
-    case PCI_CHIP_RAGE128PM:
-    case PCI_CHIP_RAGE128PN:
-    case PCI_CHIP_RAGE128PO:
-    case PCI_CHIP_RAGE128PQ:
-    case PCI_CHIP_RAGE128PS:
-    case PCI_CHIP_RAGE128PT:
-    case PCI_CHIP_RAGE128PU:
-    case PCI_CHIP_RAGE128PV:
-    case PCI_CHIP_RAGE128PW:
-    case PCI_CHIP_RAGE128PX:
-    case PCI_CHIP_RAGE128SE:
-    case PCI_CHIP_RAGE128SF:
-    case PCI_CHIP_RAGE128SG:
-    case PCI_CHIP_RAGE128SH:
-    case PCI_CHIP_RAGE128SK:
-    case PCI_CHIP_RAGE128SL:
-    case PCI_CHIP_RAGE128SN:
-    case PCI_CHIP_RAGE128TS:
-    case PCI_CHIP_RAGE128TT:
-    case PCI_CHIP_RAGE128TU:
-    default:
-	/* This is really an AGP card, force PCI GART mode */
-        chunk = INREG(R128_BM_CHUNK_0_VAL);
-        chunk |= (R128_BM_PTR_FORCE_TO_PCI |
-		  R128_BM_PM4_RD_FORCE_TO_PCI |
-		  R128_BM_GLOBAL_FORCE_TO_PCI);
-        OUTREG(R128_BM_CHUNK_0_VAL, chunk);
-        OUTREG(R128_PCI_GART_PAGE, 0); /* Ensure PCI GART is used */
-        break;
-    }
-
-    return TRUE;
-}
-
-/* Add a map for the MMIO registers that will be accessed by any
-   DRI-based clients. */
-static Bool R128DRIMapInit(R128InfoPtr info, ScreenPtr pScreen)
-{
-    int flags;
-
-    if (info->CCESecure) flags = DRM_READ_ONLY;
-    else                 flags = 0;
-
-				/* Map registers */
-    info->registerSize = R128_MMIOSIZE;
-    if (drmAddMap(info->drmFD, info->MMIOAddr, info->registerSize,
-		  DRM_REGISTERS, flags, &info->registerHandle) < 0) {
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[drm] register handle = 0x%08x\n", info->registerHandle);
-
-    return TRUE;
-}
-
-/* Initialize the kernel data structures. */
-static int R128DRIKernelInit(R128InfoPtr info, ScreenPtr pScreen)
-{
-    drmR128Init drmInfo;
-
-    memset( &drmInfo, 0, sizeof(drmR128Init) );
-
-    drmInfo.func                = DRM_R128_INIT_CCE;
-    drmInfo.sarea_priv_offset   = sizeof(XF86DRISAREARec);
-    drmInfo.is_pci              = info->IsPCI;
-    drmInfo.cce_mode            = info->CCEMode;
-    drmInfo.cce_secure          = info->CCESecure;
-    drmInfo.ring_size           = info->ringSize*1024*1024;
-    drmInfo.usec_timeout        = info->CCEusecTimeout;
-
-    drmInfo.fb_bpp              = info->CurrentLayout.pixel_code;
-    drmInfo.depth_bpp           = info->CurrentLayout.pixel_code;
-
-    drmInfo.front_offset        = info->frontOffset;
-    drmInfo.front_pitch         = info->frontPitch;
-
-    drmInfo.back_offset         = info->backOffset;
-    drmInfo.back_pitch          = info->backPitch;
-
-    drmInfo.depth_offset        = info->depthOffset;
-    drmInfo.depth_pitch         = info->depthPitch;
-    drmInfo.span_offset         = info->spanOffset;
-
-    drmInfo.fb_offset           = info->fbHandle;
-    drmInfo.mmio_offset         = info->registerHandle;
-    drmInfo.ring_offset         = info->ringHandle;
-    drmInfo.ring_rptr_offset    = info->ringReadPtrHandle;
-    drmInfo.buffers_offset      = info->bufHandle;
-    drmInfo.agp_textures_offset = info->agpTexHandle;
-
-    if (drmCommandWrite(info->drmFD, DRM_R128_INIT,
-                        &drmInfo, sizeof(drmR128Init)) < 0)
-        return FALSE;
-
-    return TRUE;
-}
-
-/* Add a map for the vertex buffers that will be accessed by any
-   DRI-based clients. */
-static Bool R128DRIBufInit(R128InfoPtr info, ScreenPtr pScreen)
-{
-				/* Initialize vertex buffers */
-    if (info->IsPCI) {
-	info->bufNumBufs = drmAddBufs(info->drmFD,
-				      info->bufMapSize / R128_BUFFER_SIZE,
-				      R128_BUFFER_SIZE,
-				      DRM_SG_BUFFER,
-				      info->bufStart);
-    } else {
-	info->bufNumBufs = drmAddBufs(info->drmFD,
-				      info->bufMapSize / R128_BUFFER_SIZE,
-				      R128_BUFFER_SIZE,
-				      DRM_AGP_BUFFER,
-				      info->bufStart);
-    }
-    if (info->bufNumBufs <= 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[drm] Could not create vertex/indirect buffers list\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[drm] Added %d %d byte vertex/indirect buffers\n",
-	       info->bufNumBufs, R128_BUFFER_SIZE);
-
-    if (!(info->buffers = drmMapBufs(info->drmFD))) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[drm] Failed to map vertex/indirect buffers list\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-	       "[drm] Mapped %d vertex/indirect buffers\n",
-	       info->buffers->count);
-
-    return TRUE;
-}
-
-static void R128DRIIrqInit(R128InfoPtr info, ScreenPtr pScreen)
-{
-   ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-
-   if (!info->irq) {
-      info->irq = drmGetInterruptFromBusID(
-	 info->drmFD,
-	 PCI_CFG_BUS(info->PciInfo),
-	 PCI_CFG_DEV(info->PciInfo),
-	 PCI_CFG_FUNC(info->PciInfo));
-
-      if((drmCtlInstHandler(info->drmFD, info->irq)) != 0) {
-	 xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		    "[drm] failure adding irq handler, "
-		    "there is a device already using that irq\n"
-		    "[drm] falling back to irq-free operation\n");
-	 info->irq = 0;
-      } else {
-          unsigned char *R128MMIO = info->MMIO;
-          info->gen_int_cntl = INREG( R128_GEN_INT_CNTL );
-      }
-   }
-
-   if (info->irq)
-      xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		 "[drm] dma control initialized, using IRQ %d\n",
-		 info->irq);
-}
-
-/* Initialize the CCE state, and start the CCE (if used by the X server) */
-static void R128DRICCEInit(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-
-				/* Turn on bus mastering */
-    info->BusCntl &= ~R128_BUS_MASTER_DIS;
-
-				/* CCEMode is initialized in r128_driver.c */
-    switch (info->CCEMode) {
-    case R128_PM4_NONPM4:                 info->CCEFifoSize = 0;   break;
-    case R128_PM4_192PIO:                 info->CCEFifoSize = 192; break;
-    case R128_PM4_192BM:                  info->CCEFifoSize = 192; break;
-    case R128_PM4_128PIO_64INDBM:         info->CCEFifoSize = 128; break;
-    case R128_PM4_128BM_64INDBM:          info->CCEFifoSize = 128; break;
-    case R128_PM4_64PIO_128INDBM:         info->CCEFifoSize = 64;  break;
-    case R128_PM4_64BM_128INDBM:          info->CCEFifoSize = 64;  break;
-    case R128_PM4_64PIO_64VCBM_64INDBM:   info->CCEFifoSize = 64;  break;
-    case R128_PM4_64BM_64VCBM_64INDBM:    info->CCEFifoSize = 64;  break;
-    case R128_PM4_64PIO_64VCPIO_64INDPIO: info->CCEFifoSize = 64;  break;
-    }
-
-    if (info->directRenderingEnabled) {
-				/* Make sure the CCE is on for the X server */
-	R128CCE_START(pScrn, info);
-    } else {
-				/* Make sure the CCE is off for the X server */
-	R128CCE_STOP(pScrn, info);
-    }
-}
-
-/* Initialize the screen-specific data structures for the DRI and the
-   Rage 128.  This is the main entry point to the device-specific
-   initialization code.  It calls device-independent DRI functions to
-   create the DRI data structures and initialize the DRI state. */
-Bool R128DRIScreenInit(ScreenPtr pScreen)
-{
-    ScrnInfoPtr   pScrn = xf86Screens[pScreen->myNum];
-    R128InfoPtr   info = R128PTR(pScrn);
-    DRIInfoPtr    pDRIInfo;
-    R128DRIPtr    pR128DRI;
-    int           major, minor, patch;
-    drmVersionPtr version;
-
-    /* Check that the GLX, DRI, and DRM modules have been loaded by testing
-     * for known symbols in each module. */
-    if (!xf86LoaderCheckSymbol("GlxSetVisualConfigs")) return FALSE;
-    if (!xf86LoaderCheckSymbol("drmAvailable"))        return FALSE;
-    if (!xf86LoaderCheckSymbol("DRIQueryVersion")) {
-      xf86DrvMsg(pScreen->myNum, X_ERROR,
-		 "[dri] R128DRIScreenInit failed (libdri.a too old)\n");
-      return FALSE;
-    }
-
-    /* Check the DRI version */
-    DRIQueryVersion(&major, &minor, &patch);
-    if (major != DRIINFO_MAJOR_VERSION || minor < 0) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		"[dri] R128DRIScreenInit failed because of a version mismatch.\n"
-		"[dri] libdri version is %d.%d.%d but version %d.%d.x is needed.\n"
-		"[dri] Disabling the DRI.\n",
-		major, minor, patch,
-                DRIINFO_MAJOR_VERSION, 0);
-	return FALSE;
-    }
-
-    switch (info->CurrentLayout.pixel_code) {
-    case 8:
-	/* These modes are not supported (yet). */
-    case 15:
-    case 24:
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-		   "[dri] R128DRIScreenInit failed (depth %d not supported).  "
-		   "[dri] Disabling DRI.\n", info->CurrentLayout.pixel_code);
-	return FALSE;
-
-	/* Only 16 and 32 color depths are supports currently. */
-    case 16:
-    case 32:
-	break;
-    }
-
-    r128_drm_page_size = getpagesize();
-
-    /* Create the DRI data structure, and fill it in before calling the
-       DRIScreenInit(). */
-    if (!(pDRIInfo = DRICreateInfoRec())) return FALSE;
-
-    info->pDRIInfo                       = pDRIInfo;
-    pDRIInfo->drmDriverName              = R128_DRIVER_NAME;
-    pDRIInfo->clientDriverName           = R128_DRIVER_NAME;
-    if (xf86LoaderCheckSymbol("DRICreatePCIBusID")) {
-	pDRIInfo->busIdString = DRICreatePCIBusID(info->PciInfo);
-    } else {
-	pDRIInfo->busIdString            = xalloc(64);
-	sprintf(pDRIInfo->busIdString,
-		"PCI:%d:%d:%d",
-		PCI_DEV_BUS(info->PciInfo),
-		PCI_DEV_DEV(info->PciInfo),
-		PCI_DEV_FUNC(info->PciInfo));
-    }
-    pDRIInfo->ddxDriverMajorVersion      = R128_VERSION_MAJOR;
-    pDRIInfo->ddxDriverMinorVersion      = R128_VERSION_MINOR;
-    pDRIInfo->ddxDriverPatchVersion      = R128_VERSION_PATCH;
-    pDRIInfo->frameBufferPhysicalAddress = (void *)info->LinearAddr;
-    pDRIInfo->frameBufferSize            = info->FbMapSize;
-    pDRIInfo->frameBufferStride          = (pScrn->displayWidth *
-					    info->CurrentLayout.pixel_bytes);
-    pDRIInfo->ddxDrawableTableEntry      = R128_MAX_DRAWABLES;
-    pDRIInfo->maxDrawableTableEntry      = (SAREA_MAX_DRAWABLES
-					    < R128_MAX_DRAWABLES
-					    ? SAREA_MAX_DRAWABLES
-					    : R128_MAX_DRAWABLES);
-
-#ifdef NOT_DONE
-    /* FIXME: Need to extend DRI protocol to pass this size back to
-     * client for SAREA mapping that includes a device private record
-     */
-    pDRIInfo->SAREASize =
-	((sizeof(XF86DRISAREARec) + 0xfff) & 0x1000); /* round to page */
-    /* + shared memory device private rec */
-#else
-    /* For now the mapping works by using a fixed size defined
-     * in the SAREA header
-     */
-    if (sizeof(XF86DRISAREARec)+sizeof(R128SAREAPriv)>SAREA_MAX) {
-        xf86DrvMsg(pScreen->myNum, X_ERROR,
-                   "[dri] Data does not fit in SAREA.  Disabling DRI.\n");
-	return FALSE;
-    }
-    pDRIInfo->SAREASize = SAREA_MAX;
-#endif
-
-    if (!(pR128DRI = (R128DRIPtr)xcalloc(sizeof(R128DRIRec),1))) {
-	DRIDestroyInfoRec(info->pDRIInfo);
-	info->pDRIInfo = NULL;
-	return FALSE;
-    }
-    pDRIInfo->devPrivate     = pR128DRI;
-    pDRIInfo->devPrivateSize = sizeof(R128DRIRec);
-    pDRIInfo->contextSize    = sizeof(R128DRIContextRec);
-
-    pDRIInfo->CreateContext  = R128CreateContext;
-    pDRIInfo->DestroyContext = R128DestroyContext;
-    pDRIInfo->SwapContext    = R128DRISwapContext;
-    pDRIInfo->InitBuffers    = R128DRIInitBuffers;
-    pDRIInfo->MoveBuffers    = R128DRIMoveBuffers;
-    pDRIInfo->bufferRequests = DRI_ALL_WINDOWS;
-    pDRIInfo->TransitionTo2d = R128DRITransitionTo2d;
-    pDRIInfo->TransitionTo3d = R128DRITransitionTo3d;
-    pDRIInfo->TransitionSingleToMulti3D = R128DRITransitionSingleToMulti3d;
-    pDRIInfo->TransitionMultiToSingle3D = R128DRITransitionMultiToSingle3d;
-
-    pDRIInfo->createDummyCtx     = TRUE;
-    pDRIInfo->createDummyCtxPriv = FALSE;
-
-    if (!DRIScreenInit(pScreen, pDRIInfo, &info->drmFD)) {
-	xf86DrvMsg(pScreen->myNum, X_ERROR,
-                   "[dri] DRIScreenInit failed.  Disabling DRI.\n");
-	xfree(pDRIInfo->devPrivate);
-	pDRIInfo->devPrivate = NULL;
-	DRIDestroyInfoRec(pDRIInfo);
-	pDRIInfo = NULL;
-	return FALSE;
-    }
-
-    /* Check the DRM lib version.
-       drmGetLibVersion was not supported in version 1.0, so check for
-       symbol first to avoid possible crash or hang.
-     */
-    if (xf86LoaderCheckSymbol("drmGetLibVersion")) {
-        version = drmGetLibVersion(info->drmFD);
-    }
-    else {
-        /* drmlib version 1.0.0 didn't have the drmGetLibVersion
-           entry point.  Fake it by allocating a version record
-           via drmGetVersion and changing it to version 1.0.0
-         */
-        version = drmGetVersion(info->drmFD);
-        version->version_major      = 1;
-        version->version_minor      = 0;
-        version->version_patchlevel = 0;
-    }
-
-    if (version) {
-	if (version->version_major != 1 ||
-	    version->version_minor < 1) {
-            /* incompatible drm library version */
-            xf86DrvMsg(pScreen->myNum, X_ERROR,
-		"[dri] R128DRIScreenInit failed because of a version mismatch.\n"
-		"[dri] libdrm.a module version is %d.%d.%d but version 1.1.x is needed.\n"
-		"[dri] Disabling DRI.\n",
-                version->version_major,
-                version->version_minor,
-                version->version_patchlevel);
-            drmFreeVersion(version);
-	    R128DRICloseScreen(pScreen);
-            return FALSE;
-	}
-	drmFreeVersion(version);
-    }
-
-    /* Check the r128 DRM version */
-    version = drmGetVersion(info->drmFD);
-    if (version) {
-	if (version->version_major != 2 ||
-	    version->version_minor < 2) {
-	    /* incompatible drm version */
-	    xf86DrvMsg(pScreen->myNum, X_ERROR,
-		"[dri] R128DRIScreenInit failed because of a version mismatch.\n"
-		"[dri] r128.o kernel module version is %d.%d.%d but version 2.2 or greater is needed.\n"
-		"[dri] Disabling the DRI.\n",
-		version->version_major,
-		version->version_minor,
-		version->version_patchlevel);
-	    drmFreeVersion(version);
-	    R128DRICloseScreen(pScreen);
-	    return FALSE;
-	}
-	info->drmMinor = version->version_minor;
-	drmFreeVersion(version);
-    }
-
-				/* Initialize AGP */
-    if (!info->IsPCI && !R128DRIAgpInit(info, pScreen)) {
-	info->IsPCI = TRUE;
-	xf86DrvMsg(pScreen->myNum, X_WARNING,
-		   "[agp] AGP failed to initialize -- falling back to PCI mode.\n");
-	xf86DrvMsg(pScreen->myNum, X_WARNING,
-		   "[agp] Make sure you have the agpgart kernel module loaded.\n");
-    }
-
-				/* Initialize PCIGART */
-    if (info->IsPCI && !R128DRIPciInit(info, pScreen)) {
-	R128DRICloseScreen(pScreen);
-	return FALSE;
-    }
-
-				/* DRIScreenInit doesn't add all the
-				   common mappings.  Add additional
-				   mappings here. */
-    if (!R128DRIMapInit(info, pScreen)) {
-	R128DRICloseScreen(pScreen);
-	return FALSE;
-    }
-
-				/* DRIScreenInit adds the frame buffer
-				   map, but we need it as well */
-    {
-	void *scratch_ptr;
-        int scratch_int;
-
-	DRIGetDeviceInfo(pScreen, &info->fbHandle,
-                         &scratch_int, &scratch_int,
-                         &scratch_int, &scratch_int,
-                         &scratch_ptr);
-    }
-
-				/* FIXME: When are these mappings unmapped? */
-
-    if (!R128InitVisualConfigs(pScreen)) {
-	R128DRICloseScreen(pScreen);
-	return FALSE;
-    }
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] Visual configs initialized\n");
-
-    return TRUE;
-}
-
-/* Finish initializing the device-dependent DRI state, and call
-   DRIFinishScreenInit() to complete the device-independent DRI
-   initialization. */
-Bool R128DRIFinishScreenInit(ScreenPtr pScreen)
-{
-    ScrnInfoPtr      pScrn = xf86Screens[pScreen->myNum];
-    R128InfoPtr      info  = R128PTR(pScrn);
-    R128SAREAPrivPtr pSAREAPriv;
-    R128DRIPtr       pR128DRI;
-
-    info->pDRIInfo->driverSwapMethod = DRI_HIDE_X_CONTEXT;
-    /* info->pDRIInfo->driverSwapMethod = DRI_SERVER_SWAP; */
-
-    /* NOTE: DRIFinishScreenInit must be called before *DRIKernelInit
-       because *DRIKernelInit requires that the hardware lock is held by
-       the X server, and the first time the hardware lock is grabbed is
-       in DRIFinishScreenInit. */
-    if (!DRIFinishScreenInit(pScreen)) {
-	R128DRICloseScreen(pScreen);
-	return FALSE;
-    }
-
-    /* Initialize the kernel data structures */
-    if (!R128DRIKernelInit(info, pScreen)) {
-	R128DRICloseScreen(pScreen);
-	return FALSE;
-    }
-
-    /* Initialize the vertex buffers list */
-    if (!R128DRIBufInit(info, pScreen)) {
-	R128DRICloseScreen(pScreen);
-	return FALSE;
-    }
-
-    /* Initialize IRQ */
-    R128DRIIrqInit(info, pScreen);
-
-    /* Initialize and start the CCE if required */
-    R128DRICCEInit(pScrn);
-
-    pSAREAPriv = (R128SAREAPrivPtr)DRIGetSAREAPrivate(pScreen);
-    memset(pSAREAPriv, 0, sizeof(*pSAREAPriv));
-
-    pR128DRI                    = (R128DRIPtr)info->pDRIInfo->devPrivate;
-
-    pR128DRI->deviceID          = info->Chipset;
-    pR128DRI->width             = pScrn->virtualX;
-    pR128DRI->height            = pScrn->virtualY;
-    pR128DRI->depth             = pScrn->depth;
-    pR128DRI->bpp               = pScrn->bitsPerPixel;
-
-    pR128DRI->IsPCI             = info->IsPCI;
-    pR128DRI->AGPMode           = info->agpMode;
-
-    pR128DRI->frontOffset       = info->frontOffset;
-    pR128DRI->frontPitch        = info->frontPitch;
-    pR128DRI->backOffset        = info->backOffset;
-    pR128DRI->backPitch         = info->backPitch;
-    pR128DRI->depthOffset       = info->depthOffset;
-    pR128DRI->depthPitch        = info->depthPitch;
-    pR128DRI->spanOffset        = info->spanOffset;
-    pR128DRI->textureOffset     = info->textureOffset;
-    pR128DRI->textureSize       = info->textureSize;
-    pR128DRI->log2TexGran       = info->log2TexGran;
-
-    pR128DRI->registerHandle    = info->registerHandle;
-    pR128DRI->registerSize      = info->registerSize;
-
-    pR128DRI->agpTexHandle      = info->agpTexHandle;
-    pR128DRI->agpTexMapSize     = info->agpTexMapSize;
-    pR128DRI->log2AGPTexGran    = info->log2AGPTexGran;
-    pR128DRI->agpTexOffset      = info->agpTexStart;
-    pR128DRI->sarea_priv_offset = sizeof(XF86DRISAREARec);
-
-    /* Have shadowfb run only while there is 3d active. */
-    if (info->allowPageFlip && info->drmMinor >= 5 ) {
-	ShadowFBInit( pScreen, R128DRIRefreshArea );
-    } else if (info->allowPageFlip) {
-	xf86DrvMsg(pScreen->myNum, X_WARNING,
-		   "[dri] Kernel module version 2.5.0 or newer is required for pageflipping.\n");
-       info->allowPageFlip = 0;
-    }
-
-    return TRUE;
-}
-
-/* The screen is being closed, so clean up any state and free any
-   resources used by the DRI. */
-void R128DRICloseScreen(ScreenPtr pScreen)
-{
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-    R128InfoPtr info = R128PTR(pScrn);
-    drmR128Init drmInfo;
-
-				/* Stop the CCE if it is still in use */
-    if (info->directRenderingEnabled) {
-	R128CCE_STOP(pScrn, info);
-    }
-
-    if (info->irq) {
-	drmCtlUninstHandler(info->drmFD);
-	info->irq = 0;
-	info->gen_int_cntl = 0;
-    }
-
-				/* De-allocate vertex buffers */
-    if (info->buffers) {
-	drmUnmapBufs(info->buffers);
-	info->buffers = NULL;
-    }
-
-				/* De-allocate all kernel resources */
-    memset(&drmInfo, 0, sizeof(drmR128Init));
-    drmInfo.func = DRM_R128_CLEANUP_CCE;
-    drmCommandWrite(info->drmFD, DRM_R128_INIT,
-                    &drmInfo, sizeof(drmR128Init));
-
-				/* De-allocate all AGP resources */
-    if (info->agpTex) {
-	drmUnmap(info->agpTex, info->agpTexMapSize);
-	info->agpTex = NULL;
-    }
-    if (info->buf) {
-	drmUnmap(info->buf, info->bufMapSize);
-	info->buf = NULL;
-    }
-    if (info->ringReadPtr) {
-	drmUnmap(info->ringReadPtr, info->ringReadMapSize);
-	info->ringReadPtr = NULL;
-    }
-    if (info->ring) {
-	drmUnmap(info->ring, info->ringMapSize);
-	info->ring = NULL;
-    }
-    if (info->agpMemHandle != DRM_AGP_NO_HANDLE) {
-	drmAgpUnbind(info->drmFD, info->agpMemHandle);
-	drmAgpFree(info->drmFD, info->agpMemHandle);
-	info->agpMemHandle = DRM_AGP_NO_HANDLE;
-	drmAgpRelease(info->drmFD);
-    }
-    if (info->pciMemHandle) {
-	drmScatterGatherFree(info->drmFD, info->pciMemHandle);
-	info->pciMemHandle = 0;
-    }
-
-				/* De-allocate all DRI resources */
-    DRICloseScreen(pScreen);
-
-				/* De-allocate all DRI data structures */
-    if (info->pDRIInfo) {
-	if (info->pDRIInfo->devPrivate) {
-	    xfree(info->pDRIInfo->devPrivate);
-	    info->pDRIInfo->devPrivate = NULL;
-	}
-	DRIDestroyInfoRec(info->pDRIInfo);
-	info->pDRIInfo = NULL;
-    }
-    if (info->pVisualConfigs) {
-	xfree(info->pVisualConfigs);
-	info->pVisualConfigs = NULL;
-    }
-    if (info->pVisualConfigsPriv) {
-	xfree(info->pVisualConfigsPriv);
-	info->pVisualConfigsPriv = NULL;
-    }
-}
-
-/* Use callbacks from dri.c to support pageflipping mode for a single
- * 3d context without need for any specific full-screen extension.
- */
-
-/* Use the shadowfb module to maintain a list of dirty rectangles.
- * These are blitted to the back buffer to keep both buffers clean
- * during page-flipping when the 3d application isn't fullscreen.
- *
- * Unlike most use of the shadowfb code, both buffers are in video memory.
- *
- * An alternative to this would be to organize for all on-screen drawing
- * operations to be duplicated for the two buffers.  That might be
- * faster, but seems like a lot more work...
- */
-
-
-static void R128DRIRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
-{
-    R128InfoPtr         info       = R128PTR(pScrn);
-    int                 i;
-    R128SAREAPrivPtr    pSAREAPriv = DRIGetSAREAPrivate(pScrn->pScreen);
-
-    /* Don't want to do this when no 3d is active and pages are
-     * right-way-round
-     */
-    if (!pSAREAPriv->pfAllowPageFlip && pSAREAPriv->pfCurrentPage == 0)
-	return;
-
-    (*info->accel->SetupForScreenToScreenCopy)(pScrn,
-					       1, 1, GXcopy,
-					       (CARD32)(-1), -1);
-
-    for (i = 0 ; i < num ; i++, pbox++) {
-	int xa = max(pbox->x1, 0), xb = min(pbox->x2, pScrn->virtualX-1);
-	int ya = max(pbox->y1, 0), yb = min(pbox->y2, pScrn->virtualY-1);
-
-	if (xa <= xb && ya <= yb) {
-	    (*info->accel->SubsequentScreenToScreenCopy)(pScrn, xa, ya,
-							 xa + info->backX,
-							 ya + info->backY,
-							 xb - xa + 1,
-							 yb - ya + 1);
-	}
-    }
-}
-
-static void R128EnablePageFlip(ScreenPtr pScreen)
-{
-    ScrnInfoPtr         pScrn      = xf86Screens[pScreen->myNum];
-    R128InfoPtr         info       = R128PTR(pScrn);
-    R128SAREAPrivPtr    pSAREAPriv = DRIGetSAREAPrivate(pScreen);
-
-    if (info->allowPageFlip) {
-	/* Duplicate the frontbuffer to the backbuffer */
-	(*info->accel->SetupForScreenToScreenCopy)(pScrn,
-						   1, 1, GXcopy,
-						   (CARD32)(-1), -1);
-
-	(*info->accel->SubsequentScreenToScreenCopy)(pScrn,
-						     0,
-						     0,
-						     info->backX,
-						     info->backY,
-						     pScrn->virtualX,
-						     pScrn->virtualY);
-
-	pSAREAPriv->pfAllowPageFlip = 1;
-    }
-}
-
-static void R128DisablePageFlip(ScreenPtr pScreen)
-{
-    /* Tell the clients not to pageflip.  How?
-     *   -- Field in sarea, plus bumping the window counters.
-     *   -- DRM needs to cope with Front-to-Back swapbuffers.
-     */
-    R128SAREAPrivPtr  pSAREAPriv = DRIGetSAREAPrivate(pScreen);
-
-    pSAREAPriv->pfAllowPageFlip = 0;
-}
-
-static void R128DRITransitionSingleToMulti3d(ScreenPtr pScreen)
-{
-    R128DisablePageFlip(pScreen);
-}
-
-static void R128DRITransitionMultiToSingle3d(ScreenPtr pScreen)
-{
-    /* Let the remaining 3d app start page flipping again */
-    R128EnablePageFlip(pScreen);
-}
-
-static void R128DRITransitionTo3d(ScreenPtr pScreen)
-{
-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
-    R128InfoPtr    info  = R128PTR(pScrn);
-
-    R128EnablePageFlip(pScreen);
-
-    info->have3DWindows = 1;
-
-    if (info->cursor_start)
-        xf86ForceHWCursor(pScreen, TRUE);
-}
-
-static void R128DRITransitionTo2d(ScreenPtr pScreen)
-{
-    ScrnInfoPtr         pScrn      = xf86Screens[pScreen->myNum];
-    R128InfoPtr         info       = R128PTR(pScrn);
-    R128SAREAPrivPtr    pSAREAPriv = DRIGetSAREAPrivate(pScreen);
-
-    /* Try flipping back to the front page if necessary */
-    if (pSAREAPriv->pfCurrentPage == 1)
-	drmCommandNone(info->drmFD, DRM_R128_FLIP);
-
-    /* Shut down shadowing if we've made it back to the front page */
-    if (pSAREAPriv->pfCurrentPage == 0) {
-	R128DisablePageFlip(pScreen);
-    } else {
-	xf86DrvMsg(pScreen->myNum, X_WARNING,
-		   "[dri] R128DRITransitionTo2d: "
-		   "kernel failed to unflip buffers.\n");
-    }
-
-    info->have3DWindows = 0;
-
-    if (info->cursor_start)
-        xf86ForceHWCursor(pScreen, FALSE);
-}
diff --git a/src/r128_dri.h b/src/r128_dri.h
deleted file mode 100644
index 3fae3f6..0000000
--- a/src/r128_dri.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Kevin E. Martin <martin at valinux.com>
- *   Rickard E. Faith <faith at valinux.com>
- *   Gareth Hughes <gareth at valinux.com>
- *
- */
-
-#ifndef _R128_DRI_
-#define _R128_DRI_
-
-#include "xf86drm.h"
-
-/* DRI Driver defaults */
-#define R128_DEFAULT_CCE_PIO_MODE R128_PM4_64PIO_64VCBM_64INDBM
-#define R128_DEFAULT_CCE_BM_MODE  R128_PM4_64BM_64VCBM_64INDBM
-#define R128_DEFAULT_AGP_MODE     1
-#define R128_DEFAULT_AGP_SIZE     8 /* MB (must be a power of 2 and > 4MB) */
-#define R128_DEFAULT_RING_SIZE    1 /* MB (must be page aligned) */
-#define R128_DEFAULT_BUFFER_SIZE  2 /* MB (must be page aligned) */
-#define R128_DEFAULT_AGP_TEX_SIZE 1 /* MB (must be page aligned) */
-
-#define R128_DEFAULT_CCE_TIMEOUT  10000  /* usecs */
-
-#define R128_AGP_MAX_MODE         4
-
-#define R128_CARD_TYPE_R128          1
-#define R128_CARD_TYPE_R128_PRO      2
-#define R128_CARD_TYPE_R128_MOBILITY 3
-
-#define R128CCE_USE_RING_BUFFER(m)                                        \
-(((m) == R128_PM4_192BM) ||                                               \
- ((m) == R128_PM4_128BM_64INDBM) ||                                       \
- ((m) == R128_PM4_64BM_128INDBM) ||                                       \
- ((m) == R128_PM4_64BM_64VCBM_64INDBM))
-
-typedef struct {
-    /* DRI screen private data */
-    int           deviceID;     /* PCI device ID */
-    int           width;        /* Width in pixels of display */
-    int           height;       /* Height in scanlines of display */
-    int           depth;        /* Depth of display (8, 15, 16, 24) */
-    int           bpp;          /* Bit depth of display (8, 16, 24, 32) */
-
-    int           IsPCI;        /* Current card is a PCI card */
-    int           AGPMode;
-
-    int           frontOffset;  /* Start of front buffer */
-    int           frontPitch;
-    int           backOffset;   /* Start of shared back buffer */
-    int           backPitch;
-    int           depthOffset;  /* Start of shared depth buffer */
-    int           depthPitch;
-    int           spanOffset;   /* Start of scratch spanline */
-    int           textureOffset;/* Start of texture data in frame buffer */
-    int           textureSize;
-    int           log2TexGran;
-
-    /* MMIO register data */
-    drm_handle_t     registerHandle;
-    drmSize       registerSize;
-
-    /* CCE AGP Texture data */
-    drm_handle_t     agpTexHandle;
-    drmSize       agpTexMapSize;
-    int           log2AGPTexGran;
-    int           agpTexOffset;
-    unsigned int  sarea_priv_offset;
-} R128DRIRec, *R128DRIPtr;
-
-#endif
diff --git a/src/r128_dripriv.h b/src/r128_dripriv.h
deleted file mode 100644
index 269bac9..0000000
--- a/src/r128_dripriv.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Rickard E. Faith <faith at valinux.com>
- *   Kevin E. Martin <martin at valinux.com>
- *
- */
-
-#ifndef _R128_DRIPRIV_H_
-#define _R128_DRIPRIV_H_
-
-#include "GL/glxint.h"
-
-#define R128_MAX_DRAWABLES 256
-
-extern void GlxSetVisualConfigs(int nconfigs, __GLXvisualConfig *configs,
-				void **configprivs);
-
-typedef struct {
-    /* Nothing here yet */
-    int dummy;
-} R128ConfigPrivRec, *R128ConfigPrivPtr;
-
-typedef struct {
-    /* Nothing here yet */
-    int dummy;
-} R128DRIContextRec, *R128DRIContextPtr;
-
-#endif
diff --git a/src/r128_driver.c b/src/r128_driver.c
deleted file mode 100644
index 0e693e0..0000000
--- a/src/r128_driver.c
+++ /dev/null
@@ -1,4463 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/*
- * Authors:
- *   Rickard E. Faith <faith at valinux.com>
- *   Kevin E. Martin <martin at valinux.com>
- *   Gareth Hughes <gareth at valinux.com>
- *
- * Credits:
- *
- *   Thanks to Alan Hourihane <alanh at fairlite.demon..co.uk> and SuSE for
- *   providing source code to their 3.3.x Rage 128 driver.  Portions of
- *   this file are based on the initialization code for that driver.
- *
- * References:
- *
- *   RAGE 128 VR/ RAGE 128 GL Register Reference Manual (Technical
- *   Reference Manual P/N RRG-G04100-C Rev. 0.04), ATI Technologies: April
- *   1999.
- *
- *   RAGE 128 Software Development Manual (Technical Reference Manual P/N
- *   SDK-G04000 Rev. 0.01), ATI Technologies: June 1999.
- *
- * This server does not yet support these XFree86 4.0 features:
- *   DDC1 & DDC2
- *   shadowfb
- *   overlay planes
- *
- * Modified by Marc Aurele La France <tsi at xfree86.org> for ATI driver merge.
- *
- * Dualhead support - Alex Deucher <agd5f at yahoo.com>
- */
-
-#include <string.h>
-#include <stdio.h>
-
-				/* Driver data structures */
-#include "r128.h"
-#include "r128_probe.h"
-#include "r128_reg.h"
-#include "r128_version.h"
-
-#ifdef XF86DRI
-#define _XF86DRI_SERVER_
-#include "r128_dri.h"
-#include "r128_common.h"
-#include "r128_sarea.h"
-#endif
-
-#include "fb.h"
-
-				/* colormap initialization */
-#include "micmap.h"
-
-				/* X and server generic header files */
-#include "xf86.h"
-#include "xf86_OSproc.h"
-#include "xf86PciInfo.h"
-#include "xf86RAC.h"
-#include "xf86Resources.h"
-#include "xf86cmap.h"
-#include "xf86xv.h"
-#include "vbe.h"
-
-				/* fbdevhw & vgahw */
-#ifdef WITH_VGAHW
-#include "vgaHW.h"
-#endif
-#include "fbdevhw.h"
-#include "dixstruct.h"
-
-				/* DPMS support. */
-#define DPMS_SERVER
-#include <X11/extensions/dpms.h>
-
-#ifndef MAX
-#define MAX(a,b) ((a)>(b)?(a):(b))
-#endif
-
-#define USE_CRT_ONLY	0
-
-				/* Forward definitions for driver functions */
-static Bool R128CloseScreen(int scrnIndex, ScreenPtr pScreen);
-static Bool R128SaveScreen(ScreenPtr pScreen, int mode);
-static void R128Save(ScrnInfoPtr pScrn);
-static void R128Restore(ScrnInfoPtr pScrn);
-static Bool R128ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode);
-static void R128DisplayPowerManagementSet(ScrnInfoPtr pScrn,
-					  int PowerManagementMode, int flags);
-static void R128DisplayPowerManagementSetLCD(ScrnInfoPtr pScrn,
-					  int PowerManagementMode, int flags);
-
-typedef enum {
-  OPTION_NOACCEL,
-  OPTION_SW_CURSOR,
-  OPTION_DAC_6BIT,
-  OPTION_DAC_8BIT,
-#ifdef XF86DRI
-  OPTION_XV_DMA,
-  OPTION_IS_PCI,
-  OPTION_CCE_PIO,
-  OPTION_NO_SECURITY,
-  OPTION_USEC_TIMEOUT,
-  OPTION_AGP_MODE,
-  OPTION_AGP_SIZE,
-  OPTION_RING_SIZE,
-  OPTION_BUFFER_SIZE,
-  OPTION_PAGE_FLIP,
-#endif
-#if USE_CRT_ONLY
-  /* FIXME: Disable CRTOnly until it is tested */
-  OPTION_CRT,
-#endif
-  OPTION_DISPLAY,
-  OPTION_PANEL_WIDTH,
-  OPTION_PANEL_HEIGHT,
-  OPTION_PROG_FP_REGS,
-  OPTION_FBDEV,
-  OPTION_VIDEO_KEY,
-  OPTION_SHOW_CACHE,
-  OPTION_VGA_ACCESS
-} R128Opts;
-
-static const OptionInfoRec R128Options[] = {
-  { OPTION_NOACCEL,      "NoAccel",          OPTV_BOOLEAN, {0}, FALSE },
-  { OPTION_SW_CURSOR,    "SWcursor",         OPTV_BOOLEAN, {0}, FALSE },
-  { OPTION_DAC_6BIT,     "Dac6Bit",          OPTV_BOOLEAN, {0}, FALSE },
-  { OPTION_DAC_8BIT,     "Dac8Bit",          OPTV_BOOLEAN, {0}, TRUE  },
-#ifdef XF86DRI
-  { OPTION_XV_DMA,       "DMAForXv",         OPTV_BOOLEAN, {0}, FALSE },
-  { OPTION_IS_PCI,       "ForcePCIMode",     OPTV_BOOLEAN, {0}, FALSE },
-  { OPTION_CCE_PIO,      "CCEPIOMode",       OPTV_BOOLEAN, {0}, FALSE },
-  { OPTION_NO_SECURITY,  "CCENoSecurity",    OPTV_BOOLEAN, {0}, FALSE },
-  { OPTION_USEC_TIMEOUT, "CCEusecTimeout",   OPTV_INTEGER, {0}, FALSE },
-  { OPTION_AGP_MODE,     "AGPMode",          OPTV_INTEGER, {0}, FALSE },
-  { OPTION_AGP_SIZE,     "AGPSize",          OPTV_INTEGER, {0}, FALSE },
-  { OPTION_RING_SIZE,    "RingSize",         OPTV_INTEGER, {0}, FALSE },
-  { OPTION_BUFFER_SIZE,  "BufferSize",       OPTV_INTEGER, {0}, FALSE },
-  { OPTION_PAGE_FLIP,    "EnablePageFlip",   OPTV_BOOLEAN, {0}, FALSE },
-#endif
-  { OPTION_DISPLAY,      "Display",          OPTV_STRING,  {0}, FALSE },
-  { OPTION_PANEL_WIDTH,  "PanelWidth",       OPTV_INTEGER, {0}, FALSE },
-  { OPTION_PANEL_HEIGHT, "PanelHeight",      OPTV_INTEGER, {0}, FALSE },
-  { OPTION_PROG_FP_REGS, "ProgramFPRegs",    OPTV_BOOLEAN, {0}, FALSE },
-  { OPTION_FBDEV,        "UseFBDev",         OPTV_BOOLEAN, {0}, FALSE },
-  { OPTION_VIDEO_KEY,    "VideoKey",         OPTV_INTEGER, {0}, FALSE },
-  { OPTION_SHOW_CACHE,   "ShowCache",        OPTV_BOOLEAN, {0}, FALSE },
-  { OPTION_VGA_ACCESS,   "VGAAccess",        OPTV_BOOLEAN, {0}, TRUE  },
-  { -1,                  NULL,               OPTV_NONE,    {0}, FALSE }
-};
-
-const OptionInfoRec *R128OptionsWeak(void) { return R128Options; }
-
-R128RAMRec R128RAM[] = {        /* Memory Specifications
-				   From RAGE 128 Software Development
-				   Manual (Technical Reference Manual P/N
-				   SDK-G04000 Rev 0.01), page 3-21.  */
-    { 4, 4, 3, 3, 1, 3, 1, 16, 12, "128-bit SDR SGRAM 1:1" },
-    { 4, 8, 3, 3, 1, 3, 1, 17, 13, "64-bit SDR SGRAM 1:1" },
-    { 4, 4, 1, 2, 1, 2, 1, 16, 12, "64-bit SDR SGRAM 2:1" },
-    { 4, 4, 3, 3, 2, 3, 1, 16, 12, "64-bit DDR SGRAM" },
-};
-
-int getR128EntityIndex(void)
-{
-    int *r128_entity_index = LoaderSymbol("gR128EntityIndex");
-    if (!r128_entity_index)
-        return -1;
-    else
-        return *r128_entity_index;
-}
-
-R128EntPtr R128EntPriv(ScrnInfoPtr pScrn)
-{
-    DevUnion     *pPriv;
-    R128InfoPtr  info   = R128PTR(pScrn);
-    pPriv = xf86GetEntityPrivate(info->pEnt->index,
-                                 getR128EntityIndex());
-    return pPriv->ptr;
-}
-
-/* Allocate our private R128InfoRec. */
-static Bool R128GetRec(ScrnInfoPtr pScrn)
-{
-    if (pScrn->driverPrivate) return TRUE;
-
-    pScrn->driverPrivate = xnfcalloc(sizeof(R128InfoRec), 1);
-    return TRUE;
-}
-
-/* Free our private R128InfoRec. */
-static void R128FreeRec(ScrnInfoPtr pScrn)
-{
-    if (!pScrn || !pScrn->driverPrivate) return;
-    xfree(pScrn->driverPrivate);
-    pScrn->driverPrivate = NULL;
-}
-
-/* Memory map the MMIO region.  Used during pre-init and by R128MapMem,
-   below. */
-static Bool R128MapMMIO(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info          = R128PTR(pScrn);
-
-    if (info->FBDev) {
-	info->MMIO = fbdevHWMapMMIO(pScrn);
-    } else {
-#ifndef XSERVER_LIBPCIACCESS
-	info->MMIO = xf86MapPciMem(pScrn->scrnIndex,
-				   VIDMEM_MMIO | VIDMEM_READSIDEEFFECT,
-				   info->PciTag,
-				   info->MMIOAddr,
-				   R128_MMIOSIZE);
-#else
-	int err = pci_device_map_range(info->PciInfo,
-				       info->MMIOAddr,
-				       R128_MMIOSIZE,
-				       PCI_DEV_MAP_FLAG_WRITABLE,
-				       &info->MMIO);
-
-	if (err) {
-	    xf86DrvMsg (pScrn->scrnIndex, X_ERROR,
-                        "Unable to map MMIO aperture. %s (%d)\n",
-                        strerror (err), err);
-	    return FALSE;
-	}
-#endif
-    }
-
-    if (!info->MMIO) return FALSE;
-    return TRUE;
-}
-
-/* Unmap the MMIO region.  Used during pre-init and by R128UnmapMem,
-   below. */
-static Bool R128UnmapMMIO(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info          = R128PTR(pScrn);
-
-    if (info->FBDev)
-	fbdevHWUnmapMMIO(pScrn);
-    else {
-#ifndef XSERVER_LIBPCIACCESS
-	xf86UnMapVidMem(pScrn->scrnIndex, info->MMIO, R128_MMIOSIZE);
-#else
-	pci_device_unmap_range(info->PciInfo, info->MMIO, R128_MMIOSIZE);
-#endif
-    }
-    info->MMIO = NULL;
-    return TRUE;
-}
-
-/* Memory map the frame buffer.  Used by R128MapMem, below. */
-static Bool R128MapFB(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info          = R128PTR(pScrn);
-
-    if (info->FBDev) {
-	info->FB = fbdevHWMapVidmem(pScrn);
-    } else {
-#ifndef XSERVER_LIBPCIACCESS
-	info->FB = xf86MapPciMem(pScrn->scrnIndex,
-				 VIDMEM_FRAMEBUFFER,
-				 info->PciTag,
-				 info->LinearAddr,
-				 info->FbMapSize);
-#else
-	int err = pci_device_map_range(info->PciInfo,
-				       info->LinearAddr,
-				       info->FbMapSize,
-				       PCI_DEV_MAP_FLAG_WRITABLE |
-				       PCI_DEV_MAP_FLAG_WRITE_COMBINE,
-				       &info->FB);
-
-	if (err) {
-	    xf86DrvMsg (pScrn->scrnIndex, X_ERROR,
-                        "Unable to map FB aperture. %s (%d)\n",
-                        strerror (err), err);
-	    return FALSE;
-	}
-#endif
-    }
-
-    if (!info->FB) return FALSE;
-    return TRUE;
-}
-
-/* Unmap the frame buffer.  Used by R128UnmapMem, below. */
-static Bool R128UnmapFB(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info          = R128PTR(pScrn);
-
-    if (info->FBDev)
-	fbdevHWUnmapVidmem(pScrn);
-    else
-#ifndef XSERVER_LIBPCIACCESS
-	xf86UnMapVidMem(pScrn->scrnIndex, info->FB, info->FbMapSize);
-#else
-	pci_device_unmap_range(info->PciInfo, info->FB, info->FbMapSize);
-#endif
-    info->FB = NULL;
-    return TRUE;
-}
-
-/* Memory map the MMIO region and the frame buffer. */
-static Bool R128MapMem(ScrnInfoPtr pScrn)
-{
-    if (!R128MapMMIO(pScrn)) return FALSE;
-    if (!R128MapFB(pScrn)) {
-	R128UnmapMMIO(pScrn);
-	return FALSE;
-    }
-    return TRUE;
-}
-
-/* Unmap the MMIO region and the frame buffer. */
-static Bool R128UnmapMem(ScrnInfoPtr pScrn)
-{
-    if (!R128UnmapMMIO(pScrn) || !R128UnmapFB(pScrn)) return FALSE;
-    return TRUE;
-}
-
-/* Read PLL information */
-unsigned R128INPLL(ScrnInfoPtr pScrn, int addr)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    OUTREG8(R128_CLOCK_CNTL_INDEX, addr & 0x3f);
-    return INREG(R128_CLOCK_CNTL_DATA);
-}
-
-#if 0
-/* Read PAL information (only used for debugging). */
-static int R128INPAL(int idx)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    OUTREG(R128_PALETTE_INDEX, idx << 16);
-    return INREG(R128_PALETTE_DATA);
-}
-#endif
-
-/* Wait for vertical sync. */
-void R128WaitForVerticalSync(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           i;
-
-    OUTREG(R128_GEN_INT_STATUS, R128_VSYNC_INT_AK);
-    for (i = 0; i < R128_TIMEOUT; i++) {
-	if (INREG(R128_GEN_INT_STATUS) & R128_VSYNC_INT) break;
-    }
-}
-
-/* Blank screen. */
-static void R128Blank(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    if(!info->IsSecondary)
-    {
-        switch(info->DisplayType)
-        {
-        case MT_LCD:
-            OUTREGP(R128_LVDS_GEN_CNTL, R128_LVDS_DISPLAY_DIS,
-                 ~R128_LVDS_DISPLAY_DIS);
-	    break;
-        case MT_CRT:
-            OUTREGP(R128_CRTC_EXT_CNTL, R128_CRTC_DISPLAY_DIS, ~R128_CRTC_DISPLAY_DIS);
-	    break;
-        case MT_DFP:
-            OUTREGP(R128_FP_GEN_CNTL, R128_FP_BLANK_DIS, ~R128_FP_BLANK_DIS);
-	    break;
-        case MT_NONE:
-        default:
-           break;
-        }
-    }
-    else
-    {
-        OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_DISP_DIS, ~R128_CRTC2_DISP_DIS);
-    }
-}
-
-/* Unblank screen. */
-static void R128Unblank(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    if(!info->IsSecondary)
-    {
-        switch(info->DisplayType)
-        {
-        case MT_LCD:
-            OUTREGP(R128_LVDS_GEN_CNTL, 0,
-                 ~R128_LVDS_DISPLAY_DIS);
-	    break;
-        case MT_CRT:
-            OUTREGP(R128_CRTC_EXT_CNTL, 0, ~R128_CRTC_DISPLAY_DIS);
-	    break;
-        case MT_DFP:
-            OUTREGP(R128_FP_GEN_CNTL, 0, ~R128_FP_BLANK_DIS);
-	    break;
-        case MT_NONE:
-        default:
-            break;
-        }
-    }
-    else
-    {
-        switch(info->DisplayType)
-        {
-        case MT_LCD:
-        case MT_DFP:
-        case MT_CRT:
-            OUTREGP(R128_CRTC2_GEN_CNTL, 0, ~R128_CRTC2_DISP_DIS);
-            break;
-        case MT_NONE:
-        default:
-            break;
-        }
-    }
-}
-
-/* Compute log base 2 of val. */
-int R128MinBits(int val)
-{
-    int bits;
-
-    if (!val) return 1;
-    for (bits = 0; val; val >>= 1, ++bits);
-    return bits;
-}
-
-/* Compute n/d with rounding. */
-static int R128Div(int n, int d)
-{
-    return (n + (d / 2)) / d;
-}
-
-/* Read the Video BIOS block and the FP registers (if applicable). */
-static Bool R128GetBIOSParameters(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
-{
-    R128InfoPtr info = R128PTR(pScrn);
-    int         i;
-    int         FPHeader = 0;
-
-#define R128_BIOS8(v)  (info->VBIOS[v])
-#define R128_BIOS16(v) (info->VBIOS[v] | \
-			(info->VBIOS[(v) + 1] << 8))
-#define R128_BIOS32(v) (info->VBIOS[v] | \
-			(info->VBIOS[(v) + 1] << 8) | \
-			(info->VBIOS[(v) + 2] << 16) | \
-			(info->VBIOS[(v) + 3] << 24))
-
-#ifdef XSERVER_LIBPCIACCESS
-    info->VBIOS = xalloc(info->PciInfo->rom_size);
-#else
-    info->VBIOS = xalloc(R128_VBIOS_SIZE);
-#endif
-
-    if (!info->VBIOS) {
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "Cannot allocate space for hold Video BIOS!\n");
-	return FALSE;
-    }
-
-    if (pInt10) {
-	info->BIOSAddr = pInt10->BIOSseg << 4;
-	(void)memcpy(info->VBIOS, xf86int10Addr(pInt10, info->BIOSAddr),
-		     R128_VBIOS_SIZE);
-    } else {
-#ifdef XSERVER_LIBPCIACCESS
-	if (pci_device_read_rom(info->PciInfo, info->VBIOS)) {
-	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		       "Failed to read PCI ROM!\n");
-	}
-#else
-	xf86ReadPciBIOS(0, info->PciTag, 0, info->VBIOS, R128_VBIOS_SIZE);
-	if (info->VBIOS[0] != 0x55 || info->VBIOS[1] != 0xaa) {
-	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		       "Video BIOS not detected in PCI space!\n");
-	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		       "Attempting to read Video BIOS from legacy ISA space!\n");
-	    info->BIOSAddr = 0x000c0000;
-	    xf86ReadDomainMemory(info->PciTag, info->BIOSAddr, R128_VBIOS_SIZE, info->VBIOS);
-	}
-#endif
-    }
-    if (info->VBIOS[0] != 0x55 || info->VBIOS[1] != 0xaa) {
-	info->BIOSAddr = 0x00000000;
-	xfree(info->VBIOS);
-	info->VBIOS = NULL;
-	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		   "Video BIOS not found!\n");
-    }
-
-        if(info->HasCRTC2)
-        {                    
-             if(info->IsSecondary)
-             {  
-		/* there may be a way to detect this, for now, just assume 
-		   second head is CRT */
-                 info->DisplayType = MT_CRT;
-
-                 if(info->DisplayType > MT_NONE)
-                 {
-                     DevUnion* pPriv;
-                     R128EntPtr pR128Ent;
-                     pPriv = xf86GetEntityPrivate(pScrn->entityList[0], 
-                         getR128EntityIndex());
-                     pR128Ent = pPriv->ptr;
-                     pR128Ent->HasSecondary = TRUE;
-
-                 }
-                 else return FALSE;
-                     
-             }
-             else
-             {
-                 /* really need some sort of detection here */
-		 if (info->HasPanelRegs) {
-		 	info->DisplayType = MT_LCD;
-		 } else if (info->isDFP) {
-			info->DisplayType = MT_DFP;
-                 } else 
-                 {
-                     /*DVI port has no monitor connected, try CRT port.
-                     If something on CRT port, treat it as primary*/
-                     if(xf86IsEntityShared(pScrn->entityList[0]))
-                     {
-                         DevUnion* pPriv;
-                         R128EntPtr pR128Ent;
-                         pPriv = xf86GetEntityPrivate(pScrn->entityList[0], 
-                             getR128EntityIndex());
-                         pR128Ent = pPriv->ptr;
-                         pR128Ent->BypassSecondary = TRUE;
-                     }
-
-                     info->DisplayType = MT_CRT;
-#if 0
-                     {
-                         xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-                             "No monitor detected!!!\n");
-                         return FALSE;
-                     }
-#endif
-                 }
-             }
-         }
-         else
-         {
-             /*Regular Radeon ASIC, only one CRTC, but it could be
-               used for DFP with a DVI output, like AIW board*/
-             if(info->isDFP) info->DisplayType = MT_DFP;
-             else info->DisplayType = MT_CRT;
-         }
-
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "%s Display == Type %d\n",
-              (info->IsSecondary ? "Secondary" : "Primary"), 
-               info->DisplayType);
-
-
-    if (info->VBIOS && info->DisplayType == MT_LCD) {
-	info->FPBIOSstart = 0;
-
-	/* FIXME: There should be direct access to the start of the FP info
-	   tables, but until we find out where that offset is stored, we
-	   must search for the ATI signature string: "M3      ". */
-	for (i = 4; i < R128_VBIOS_SIZE-8; i++) {
-	    if (R128_BIOS8(i)   == 'M' &&
-		R128_BIOS8(i+1) == '3' &&
-		R128_BIOS8(i+2) == ' ' &&
-		R128_BIOS8(i+3) == ' ' &&
-		R128_BIOS8(i+4) == ' ' &&
-		R128_BIOS8(i+5) == ' ' &&
-		R128_BIOS8(i+6) == ' ' &&
-		R128_BIOS8(i+7) == ' ') {
-		FPHeader = i-2;
-		break;
-	    }
-	}
-
-	if (!FPHeader) return TRUE;
-
-	/* Assume that only one panel is attached and supported */
-	for (i = FPHeader+20; i < FPHeader+84; i += 2) {
-	    if (R128_BIOS16(i) != 0) {
-		info->FPBIOSstart = R128_BIOS16(i);
-		break;
-	    }
-	}
-	if (!info->FPBIOSstart) return TRUE;
-
-	if (!info->PanelXRes)
-	    info->PanelXRes = R128_BIOS16(info->FPBIOSstart+25);
-	if (!info->PanelYRes)
-	    info->PanelYRes = R128_BIOS16(info->FPBIOSstart+27);
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel size: %dx%d\n",
-		   info->PanelXRes, info->PanelYRes);
-
-	info->PanelPwrDly = R128_BIOS8(info->FPBIOSstart+56);
-
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel ID: ");
-	for (i = 1; i <= 24; i++)
-	    ErrorF("%c", R128_BIOS8(info->FPBIOSstart+i));
-	ErrorF("\n");
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel Type: ");
-	i = R128_BIOS16(info->FPBIOSstart+29);
-	if (i & 1) ErrorF("Color, ");
-	else       ErrorF("Monochrome, ");
-	if (i & 2) ErrorF("Dual(split), ");
-	else       ErrorF("Single, ");
-	switch ((i >> 2) & 0x3f) {
-	case 0:  ErrorF("STN");        break;
-	case 1:  ErrorF("TFT");        break;
-	case 2:  ErrorF("Active STN"); break;
-	case 3:  ErrorF("EL");         break;
-	case 4:  ErrorF("Plasma");     break;
-	default: ErrorF("UNKNOWN");    break;
-	}
-	ErrorF("\n");
-	if (R128_BIOS8(info->FPBIOSstart+61) & 1) {
-	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel Interface: LVDS\n");
-	} else {
-	    /* FIXME: Add Non-LVDS flat pael support */
-	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		       "Non-LVDS panel interface detected!  "
-		       "This support is untested and may not "
-		       "function properly\n");
-	}
-    }
-
-    if (!info->PanelXRes || !info->PanelYRes) {
-        info->HasPanelRegs = FALSE;
-        xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		   "Can't determine panel dimensions, and none specified.\n"
-		   "\tDisabling programming of FP registers.\n");
-    }
-
-    return TRUE;
-}
-
-/* Read PLL parameters from BIOS block.  Default to typical values if there
-   is no BIOS. */
-static Bool R128GetPLLParameters(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-    R128PLLPtr    pll  = &info->pll;
-
-#if defined(__powerpc__) || defined(__alpha__)
-    /* there is no bios under Linux PowerPC but Open Firmware
-       does set up the PLL registers properly and we can use
-       those to calculate xclk and find the reference divider */
-
-    unsigned x_mpll_ref_fb_div;
-    unsigned xclk_cntl;
-    unsigned Nx, M;
-    unsigned PostDivSet[] = {0, 1, 2, 4, 8, 3, 6, 12};
-
-    /* Assume REF clock is 2950 (in units of 10khz) */
-    /* and that all pllclk must be between 125 Mhz and 250Mhz */
-    pll->reference_freq = 2950;
-    pll->min_pll_freq   = 12500;
-    pll->max_pll_freq   = 25000;
-
-    /* need to memory map the io to use INPLL since it
-       has not been done yet at this point in the startup */
-    R128MapMMIO(pScrn);
-    x_mpll_ref_fb_div = INPLL(pScrn, R128_X_MPLL_REF_FB_DIV);
-    xclk_cntl = INPLL(pScrn, R128_XCLK_CNTL) & 0x7;
-    pll->reference_div =
-	INPLL(pScrn,R128_PPLL_REF_DIV) & R128_PPLL_REF_DIV_MASK;
-    /* unmap it again */
-    R128UnmapMMIO(pScrn);
-
-    Nx = (x_mpll_ref_fb_div & 0x00FF00) >> 8;
-    M =  (x_mpll_ref_fb_div & 0x0000FF);
-
-    pll->xclk =  R128Div((2 * Nx * pll->reference_freq),
-			 (M * PostDivSet[xclk_cntl]));
-
-#else /* !defined(__powerpc__) */
-
-    if (!info->VBIOS) {
-	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		   "Video BIOS not detected, using default PLL parameters!\n");
-				/* These probably aren't going to work for
-				   the card you are using.  Specifically,
-				   reference freq can be 29.50MHz,
-				   28.63MHz, or 14.32MHz.  YMMV. */
-	pll->reference_freq = 2950;
-	pll->reference_div  = 65;
-	pll->min_pll_freq   = 12500;
-	pll->max_pll_freq   = 25000;
-	pll->xclk           = 10300;
-    } else {
-	CARD16 bios_header    = R128_BIOS16(0x48);
-	CARD16 pll_info_block = R128_BIOS16(bios_header + 0x30);
-	R128TRACE(("Header at 0x%04x; PLL Information at 0x%04x\n",
-		   bios_header, pll_info_block));
-
-	pll->reference_freq = R128_BIOS16(pll_info_block + 0x0e);
-	pll->reference_div  = R128_BIOS16(pll_info_block + 0x10);
-	pll->min_pll_freq   = R128_BIOS32(pll_info_block + 0x12);
-	pll->max_pll_freq   = R128_BIOS32(pll_info_block + 0x16);
-	pll->xclk           = R128_BIOS16(pll_info_block + 0x08);
-    }
-#endif /* __powerpc__ */
-
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-	       "PLL parameters: rf=%d rd=%d min=%d max=%d; xclk=%d\n",
-	       pll->reference_freq,
-	       pll->reference_div,
-	       pll->min_pll_freq,
-	       pll->max_pll_freq,
-	       pll->xclk);
-
-    return TRUE;
-}
-
-/* This is called by R128PreInit to set up the default visual. */
-static Bool R128PreInitVisual(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info          = R128PTR(pScrn);
-
-    if (!xf86SetDepthBpp(pScrn, 0, 0, 0, (Support24bppFb
-					  | Support32bppFb
-					  | SupportConvert32to24
-					  )))
-	return FALSE;
-
-    switch (pScrn->depth) {
-    case 8:
-    case 15:
-    case 16:
-    case 24:
-	break;
-    default:
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "Given depth (%d) is not supported by %s driver\n",
-		   pScrn->depth, R128_DRIVER_NAME);
-	return FALSE;
-    }
-
-    xf86PrintDepthBpp(pScrn);
-
-    info->fifo_slots  = 0;
-    info->pix24bpp    = xf86GetBppFromDepth(pScrn, pScrn->depth);
-    info->CurrentLayout.bitsPerPixel = pScrn->bitsPerPixel;
-    info->CurrentLayout.depth        = pScrn->depth;
-    info->CurrentLayout.pixel_bytes  = pScrn->bitsPerPixel / 8;
-    info->CurrentLayout.pixel_code   = (pScrn->bitsPerPixel != 16
-				       ? pScrn->bitsPerPixel
-				       : pScrn->depth);
-
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-	       "Pixel depth = %d bits stored in %d byte%s (%d bpp pixmaps)\n",
-	       pScrn->depth,
-	       info->CurrentLayout.pixel_bytes,
-	       info->CurrentLayout.pixel_bytes > 1 ? "s" : "",
-	       info->pix24bpp);
-
-
-    if (!xf86SetDefaultVisual(pScrn, -1)) return FALSE;
-
-    if (pScrn->depth > 8 && pScrn->defaultVisual != TrueColor) {
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "Default visual (%s) is not supported at depth %d\n",
-		   xf86GetVisualName(pScrn->defaultVisual), pScrn->depth);
-	return FALSE;
-    }
-    return TRUE;
-
-}
-
-/* This is called by R128PreInit to handle all color weight issues. */
-static Bool R128PreInitWeight(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info          = R128PTR(pScrn);
-
-				/* Save flag for 6 bit DAC to use for
-				   setting CRTC registers.  Otherwise use
-				   an 8 bit DAC, even if xf86SetWeight sets
-				   pScrn->rgbBits to some value other than
-				   8. */
-    info->dac6bits = FALSE;
-    if (pScrn->depth > 8) {
-	rgb defaultWeight = { 0, 0, 0 };
-	if (!xf86SetWeight(pScrn, defaultWeight, defaultWeight)) return FALSE;
-    } else {
-	pScrn->rgbBits = 8;
-	if (xf86ReturnOptValBool(info->Options, OPTION_DAC_6BIT, FALSE)) {
-	    pScrn->rgbBits = 6;
-	    info->dac6bits = TRUE;
-	}
-    }
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-	       "Using %d bits per RGB (%d bit DAC)\n",
-	       pScrn->rgbBits, info->dac6bits ? 6 : 8);
-
-    return TRUE;
-
-}
-
-/* This is called by R128PreInit to handle config file overrides for things
-   like chipset and memory regions.  Also determine memory size and type.
-   If memory type ever needs an override, put it in this routine. */
-static Bool R128PreInitConfig(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    EntityInfoPtr pEnt      = info->pEnt;
-    GDevPtr       dev       = pEnt->device;
-    int           offset    = 0;        /* RAM Type */
-    MessageType   from;
-
-				/* Chipset */
-    from = X_PROBED;
-    if (dev->chipset && *dev->chipset) {
-	info->Chipset  = xf86StringToToken(R128Chipsets, dev->chipset);
-	from           = X_CONFIG;
-    } else if (dev->chipID >= 0) {
-	info->Chipset  = dev->chipID;
-	from           = X_CONFIG;
-    } else {
-	info->Chipset = PCI_DEV_DEVICE_ID(info->PciInfo);
-    }
-    pScrn->chipset = (char *)xf86TokenToString(R128Chipsets, info->Chipset);
-
-    if (!pScrn->chipset) {
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "ChipID 0x%04x is not recognized\n", info->Chipset);
-	return FALSE;
-    }
-
-    if (info->Chipset < 0) {
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "Chipset \"%s\" is not recognized\n", pScrn->chipset);
-	return FALSE;
-    }
-
-    xf86DrvMsg(pScrn->scrnIndex, from,
-	       "Chipset: \"%s\" (ChipID = 0x%04x)\n",
-	       pScrn->chipset,
-	       info->Chipset);
-
-				/* Framebuffer */
-
-    from             = X_PROBED;
-    info->LinearAddr = PCI_REGION_BASE(info->PciInfo, 0, REGION_MEM) & 0xfc000000;
-    pScrn->memPhysBase = info->LinearAddr;
-    if (dev->MemBase) {
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		   "Linear address override, using 0x%08lx instead of 0x%08lx\n",
-		   dev->MemBase,
-		   info->LinearAddr);
-	info->LinearAddr = dev->MemBase;
-	from             = X_CONFIG;
-    } else if (!info->LinearAddr) {
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "No valid linear framebuffer address\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScrn->scrnIndex, from,
-	       "Linear framebuffer at 0x%08lx\n", info->LinearAddr);
-
-				/* MMIO registers */
-    from             = X_PROBED;
-    info->MMIOAddr   = PCI_REGION_BASE(info->PciInfo, 2, REGION_MEM) & 0xffffff00;
-    if (dev->IOBase) {
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		   "MMIO address override, using 0x%08lx instead of 0x%08lx\n",
-		   dev->IOBase,
-		   info->MMIOAddr);
-	info->MMIOAddr = dev->IOBase;
-	from           = X_CONFIG;
-    } else if (!info->MMIOAddr) {
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid MMIO address\n");
-	return FALSE;
-    }
-    xf86DrvMsg(pScrn->scrnIndex, from,
-	       "MMIO registers at 0x%08lx\n", info->MMIOAddr);
-
-#ifndef XSERVER_LIBPCIACCESS
-				/* BIOS */
-    from              = X_PROBED;
-    info->BIOSAddr    = info->PciInfo->biosBase & 0xfffe0000;
-    if (dev->BiosBase) {
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		   "BIOS address override, using 0x%08lx instead of 0x%08lx\n",
-		   dev->BiosBase,
-		   info->BIOSAddr);
-	info->BIOSAddr = dev->BiosBase;
-	from           = X_CONFIG;
-    }
-    if (info->BIOSAddr) {
-	xf86DrvMsg(pScrn->scrnIndex, from,
-		   "BIOS at 0x%08lx\n", info->BIOSAddr);
-    }
-#endif
-
-				/* Flat panel (part 1) */
-    if (xf86GetOptValBool(info->Options, OPTION_PROG_FP_REGS,
-			  &info->HasPanelRegs)) {
-	xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		   "Turned flat panel register programming %s\n",
-		   info->HasPanelRegs ? "on" : "off");
-	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		   "\n\nWARNING: Forcing the driver to use/not use the flat panel registers\nmight damage your flat panel.  Use at your *OWN* *RISK*.\n\n");
-    } else {
-        info->isDFP = FALSE;
-        info->isPro2 = FALSE;
-        info->HasCRTC2 = FALSE;
-	switch (info->Chipset) {
-	/* R128 Pro and Pro2 can have DFP, we will deal with it.
-	   No support for dual-head/xinerama yet.
-           M3 can also have DFP, no support for now */
-	case PCI_CHIP_RAGE128TF:
-	case PCI_CHIP_RAGE128TL:
-	case PCI_CHIP_RAGE128TR:
-	/* FIXME: RAGE128 TS/TT/TU are assumed to be PRO2 as all 6 chips came
-	 *        out at the same time, so are of the same family likely.
-	 *        This requires confirmation however to be fully correct.
-	 *        Mike A. Harris <mharris at redhat.com>
-	 */
-	case PCI_CHIP_RAGE128TS:
-	case PCI_CHIP_RAGE128TT:
-	case PCI_CHIP_RAGE128TU: info->isPro2 = TRUE;
-	/* FIXME: RAGE128 P[ABCEGHIJKLMNOQSTUVWX] are assumed to have DFP
-	 *        capability, as the comment at the top suggests.
-	 *        This requires confirmation however to be fully correct.
-	 *        Mike A. Harris <mharris at redhat.com>
-	 */
-	case PCI_CHIP_RAGE128PA:
-	case PCI_CHIP_RAGE128PB:
-	case PCI_CHIP_RAGE128PC:
-	case PCI_CHIP_RAGE128PE:
-	case PCI_CHIP_RAGE128PG:
-	case PCI_CHIP_RAGE128PH:
-	case PCI_CHIP_RAGE128PI:
-	case PCI_CHIP_RAGE128PJ:
-	case PCI_CHIP_RAGE128PK:
-	case PCI_CHIP_RAGE128PL:
-	case PCI_CHIP_RAGE128PM:
-	case PCI_CHIP_RAGE128PN:
-	case PCI_CHIP_RAGE128PO:
-	case PCI_CHIP_RAGE128PQ:
-	case PCI_CHIP_RAGE128PS:
-	case PCI_CHIP_RAGE128PT:
-	case PCI_CHIP_RAGE128PU:
-	case PCI_CHIP_RAGE128PV:
-	case PCI_CHIP_RAGE128PW:
-	case PCI_CHIP_RAGE128PX:
-
-	case PCI_CHIP_RAGE128PD:
-	case PCI_CHIP_RAGE128PF:
-	case PCI_CHIP_RAGE128PP:
-	case PCI_CHIP_RAGE128PR: info->isDFP = TRUE; break;
-
-	case PCI_CHIP_RAGE128LE:
-	case PCI_CHIP_RAGE128LF:
-	case PCI_CHIP_RAGE128MF:
-	case PCI_CHIP_RAGE128ML: 
-			info->HasPanelRegs = TRUE;  
-			/* which chips support dualhead? */
-			info->HasCRTC2 = TRUE;  
-			break;
-	case PCI_CHIP_RAGE128RE:
-	case PCI_CHIP_RAGE128RF:
-	case PCI_CHIP_RAGE128RG:
-	case PCI_CHIP_RAGE128RK:
-	case PCI_CHIP_RAGE128RL:
-	case PCI_CHIP_RAGE128SM:
-	/* FIXME: RAGE128 S[EFGHKLN] are assumed to be like the SM above as
-	 *        all of them are listed as "Rage 128 4x" in ATI docs.
-	 *        This requires confirmation however to be fully correct.
-	 *        Mike A. Harris <mharris at redhat.com>
-	 */
-	case PCI_CHIP_RAGE128SE:
-	case PCI_CHIP_RAGE128SF:
-	case PCI_CHIP_RAGE128SG:
-	case PCI_CHIP_RAGE128SH:
-	case PCI_CHIP_RAGE128SK:
-	case PCI_CHIP_RAGE128SL:
-	case PCI_CHIP_RAGE128SN:
-	default:                 info->HasPanelRegs = FALSE; break;
-	}
-    }
-
-				/* Read registers used to determine options */
-    from                      = X_PROBED;
-    R128MapMMIO(pScrn);
-    R128MMIO                  = info->MMIO;
-
-    if (info->FBDev)
-	pScrn->videoRam       = fbdevHWGetVidmem(pScrn) / 1024;
-    else
-	pScrn->videoRam       = INREG(R128_CONFIG_MEMSIZE) / 1024;
-
-    info->MemCntl             = INREG(R128_MEM_CNTL);
-    info->BusCntl             = INREG(R128_BUS_CNTL);
-
-    /* On non-flat panel systems, the default is to display to the CRT,
-       and on flat panel systems, the default is to display to the flat
-       panel unless the user explicity chooses otherwise using the "Display"
-       config file setting.  BIOS_5_SCRATCH holds the display device on flat
-       panel systems only. */
-    if (info->HasPanelRegs) {
-        char *Display = xf86GetOptValString(info->Options, OPTION_DISPLAY);
-
-	if (info->FBDev)
-	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		     "Option \"Display\" ignored "
-		     "(framebuffer device determines display type)\n");
-	else if (info->IsPrimary || info->IsSecondary)
-	    info->BIOSDisplay = R128_DUALHEAD;
-	else if (!Display || !xf86NameCmp(Display, "FP"))
-	    info->BIOSDisplay = R128_BIOS_DISPLAY_FP;
-	else if (!xf86NameCmp(Display, "BIOS"))
-	    info->BIOSDisplay = INREG8(R128_BIOS_5_SCRATCH);
-	else if (!xf86NameCmp(Display, "Mirror"))
-	    info->BIOSDisplay = R128_BIOS_DISPLAY_FP_CRT;
-	else if (!xf86NameCmp(Display, "CRT"))
-	    info->BIOSDisplay = R128_BIOS_DISPLAY_CRT;
-	else {
-	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		"Unsupported type \"%s\" specified for Option \"Display\".\n"
-		"\tSupported types are: "
-		"\"BIOS\", \"Mirror\", \"CRT\" and \"FP\"\n", Display);
-	    return FALSE;
-	}
-    } else {
-	info->BIOSDisplay     = R128_BIOS_DISPLAY_CRT;
-    }
-
-    R128MMIO                  = NULL;
-    R128UnmapMMIO(pScrn);
-
-				/* RAM */
-    switch (info->MemCntl & 0x3) {
-    case 0:                     /* SDR SGRAM 1:1 */
-	switch (info->Chipset) {
-	case PCI_CHIP_RAGE128TF:
-	case PCI_CHIP_RAGE128TL:
-	case PCI_CHIP_RAGE128TR:
-	case PCI_CHIP_RAGE128LE:
-	case PCI_CHIP_RAGE128LF:
-	case PCI_CHIP_RAGE128MF:
-	case PCI_CHIP_RAGE128ML:
-	case PCI_CHIP_RAGE128RE:
-	case PCI_CHIP_RAGE128RF:
-	case PCI_CHIP_RAGE128RG: offset = 0; break; /* 128-bit SDR SGRAM 1:1 */
-	case PCI_CHIP_RAGE128RK:
-	case PCI_CHIP_RAGE128RL:
-	case PCI_CHIP_RAGE128SM:
-	default:                 offset = 1; break; /*  64-bit SDR SGRAM 1:1 */
-	}
-	break;
-    case 1:                      offset = 2; break; /*  64-bit SDR SGRAM 2:1 */
-    case 2:                      offset = 3; break; /*  64-bit DDR SGRAM     */
-    default:                     offset = 1; break; /*  64-bit SDR SGRAM 1:1 */
-    }
-    info->ram = &R128RAM[offset];
-
-    if (dev->videoRam) {
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		   "Video RAM override, using %d kB instead of %d kB\n",
-		   dev->videoRam,
-		   pScrn->videoRam);
-	from             = X_CONFIG;
-	pScrn->videoRam  = dev->videoRam;
-    }
-
-    xf86DrvMsg(pScrn->scrnIndex, from,
-	       "VideoRAM: %d kByte (%s)\n", pScrn->videoRam, info->ram->name);
-
-    if (info->IsPrimary) {
-        pScrn->videoRam /= 2;
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO, 
-		"Using %dk of videoram for primary head\n",
-		pScrn->videoRam);
-    }
-
-    if (info->IsSecondary) {  
-        pScrn->videoRam /= 2;
-        info->LinearAddr += pScrn->videoRam * 1024;
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO, 
-		"Using %dk of videoram for secondary head\n",
-		pScrn->videoRam);
-    }
-
-    pScrn->videoRam  &= ~1023;
-    info->FbMapSize  = pScrn->videoRam * 1024;
-
-
-				/* Flat panel (part 2) */
-	switch (info->BIOSDisplay) {
-	case R128_DUALHEAD:
-	    xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		       "Dual display\n");
-	    break;
-	case R128_BIOS_DISPLAY_FP:
-	    xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		       "Using flat panel for display\n");
-	    break;
-	case R128_BIOS_DISPLAY_CRT:
-	    xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		       "Using external CRT for display\n");
-	    break;
-	case R128_BIOS_DISPLAY_FP_CRT:
-	    xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		       "Using both flat panel and external CRT "
-		       "for display\n");
-	    break;
-	}
-
-    if (info->HasPanelRegs) {
-				/* Panel width/height overrides */
-	info->PanelXRes = 0;
-	info->PanelYRes = 0;
-	if (xf86GetOptValInteger(info->Options,
-				 OPTION_PANEL_WIDTH, &(info->PanelXRes))) {
-	    xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		       "Flat panel width: %d\n", info->PanelXRes);
-	}
-	if (xf86GetOptValInteger(info->Options,
-				 OPTION_PANEL_HEIGHT, &(info->PanelYRes))) {
-	    xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		       "Flat panel height: %d\n", info->PanelYRes);
-	}
-    }
-
-#ifdef XF86DRI
-				/* DMA for Xv */
-    info->DMAForXv = xf86ReturnOptValBool(info->Options, OPTION_XV_DMA, FALSE);
-    if (info->DMAForXv) {
-	xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		   "Will try to use DMA for Xv image transfers\n");
-    }
-
-				/* AGP/PCI */
-    if (xf86ReturnOptValBool(info->Options, OPTION_IS_PCI, FALSE)) {
-	info->IsPCI = TRUE;
-	xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Forced into PCI-only mode\n");
-    } else {
-	switch (info->Chipset) {
-	case PCI_CHIP_RAGE128LE:
-	case PCI_CHIP_RAGE128RE:
-	case PCI_CHIP_RAGE128RK:
-	case PCI_CHIP_RAGE128PD:
-	case PCI_CHIP_RAGE128PR:
-	case PCI_CHIP_RAGE128PP: info->IsPCI = TRUE;  break;
-	case PCI_CHIP_RAGE128LF:
-	case PCI_CHIP_RAGE128MF:
-	case PCI_CHIP_RAGE128ML:
-	case PCI_CHIP_RAGE128PF:
-	case PCI_CHIP_RAGE128RF:
-	case PCI_CHIP_RAGE128RG:
-	case PCI_CHIP_RAGE128RL:
-	case PCI_CHIP_RAGE128SM:
-	case PCI_CHIP_RAGE128TF:
-	case PCI_CHIP_RAGE128TL:
-	case PCI_CHIP_RAGE128TR:
-	/* FIXME: Rage 128 S[EFGHKLN], T[STU], P[ABCEGHIJKLMNOQSTUVWX] are
-	 * believed to be AGP, but need confirmation. <mharris at redhat.com>
-	 */
-	case PCI_CHIP_RAGE128PA:
-	case PCI_CHIP_RAGE128PB:
-	case PCI_CHIP_RAGE128PC:
-	case PCI_CHIP_RAGE128PE:
-	case PCI_CHIP_RAGE128PG:
-	case PCI_CHIP_RAGE128PH:
-	case PCI_CHIP_RAGE128PI:
-	case PCI_CHIP_RAGE128PJ:
-	case PCI_CHIP_RAGE128PK:
-	case PCI_CHIP_RAGE128PL:
-	case PCI_CHIP_RAGE128PM:
-	case PCI_CHIP_RAGE128PN:
-	case PCI_CHIP_RAGE128PO:
-	case PCI_CHIP_RAGE128PQ:
-	case PCI_CHIP_RAGE128PS:
-	case PCI_CHIP_RAGE128PT:
-	case PCI_CHIP_RAGE128PU:
-	case PCI_CHIP_RAGE128PV:
-	case PCI_CHIP_RAGE128PW:
-	case PCI_CHIP_RAGE128PX:
-	case PCI_CHIP_RAGE128TS:
-	case PCI_CHIP_RAGE128TT:
-	case PCI_CHIP_RAGE128TU:
-	case PCI_CHIP_RAGE128SE:
-	case PCI_CHIP_RAGE128SF:
-	case PCI_CHIP_RAGE128SG:
-	case PCI_CHIP_RAGE128SH:
-	case PCI_CHIP_RAGE128SK:
-	case PCI_CHIP_RAGE128SL:
-	case PCI_CHIP_RAGE128SN:
-	default:                 info->IsPCI = FALSE; break;
-	}
-    }
-#endif
-
-    return TRUE;
-}
-
-static Bool R128PreInitDDC(ScrnInfoPtr pScrn, xf86Int10InfoPtr pInt10)
-{
-#if !defined(__powerpc__) && !defined(__alpha__) && !defined(__sparc__)
-    R128InfoPtr   info = R128PTR(pScrn);
-    vbeInfoPtr pVbe;
-#endif
-
-    if (!xf86LoadSubModule(pScrn, "ddc")) return FALSE;
-
-#if defined(__powerpc__) || defined(__alpha__) || defined(__sparc__)
-    /* Int10 is broken on PPC and some Alphas */
-    return TRUE;
-#else
-    if (xf86LoadSubModule(pScrn, "vbe")) {
-	pVbe = VBEInit(pInt10,info->pEnt->index);
-	if (!pVbe) return FALSE;
-        xf86SetDDCproperties(pScrn,xf86PrintEDID(vbeDoEDID(pVbe,NULL)));
-	vbeFree(pVbe);
-	return TRUE;
-    } else
-	return FALSE;
-#endif
-}
-
-/* This is called by R128PreInit to initialize gamma correction. */
-static Bool R128PreInitGamma(ScrnInfoPtr pScrn)
-{
-    Gamma zeros = { 0.0, 0.0, 0.0 };
-
-    if (!xf86SetGamma(pScrn, zeros)) return FALSE;
-    return TRUE;
-}
-
-static void
-R128I2CGetBits(I2CBusPtr b, int *Clock, int *data)
-{
-    ScrnInfoPtr   pScrn       = xf86Screens[b->scrnIndex];
-    R128InfoPtr info = R128PTR(pScrn);
-    unsigned long val;
-    unsigned char *R128MMIO = info->MMIO;
-
-    /* Get the result. */
-    val = INREG(info->DDCReg);
-    *Clock = (val & R128_GPIO_MONID_Y_3) != 0;
-    *data  = (val & R128_GPIO_MONID_Y_0) != 0;
-
-}
-
-static void
-R128I2CPutBits(I2CBusPtr b, int Clock, int data)
-{
-    ScrnInfoPtr   pScrn       = xf86Screens[b->scrnIndex];
-    R128InfoPtr info = R128PTR(pScrn);
-    unsigned long val;
-    unsigned char *R128MMIO = info->MMIO;
-
-    val = INREG(info->DDCReg)
-              & ~(CARD32)(R128_GPIO_MONID_EN_0 | R128_GPIO_MONID_EN_3);
-    val |= (Clock ? 0:R128_GPIO_MONID_EN_3);
-    val |= (data ? 0:R128_GPIO_MONID_EN_0);
-    OUTREG(info->DDCReg, val);
-}
-
-
-static Bool
-R128I2cInit(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info = R128PTR(pScrn);
-    if ( !xf86LoadSubModule(pScrn, "i2c") ) {
-        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-            "Failed to load i2c module\n");
-		return FALSE;
-    }
-
-    info->pI2CBus = xf86CreateI2CBusRec();
-    if(!info->pI2CBus) return FALSE;
-
-    info->pI2CBus->BusName    = "DDC";
-    info->pI2CBus->scrnIndex  = pScrn->scrnIndex;
-    info->DDCReg = R128_GPIO_MONID;
-    info->pI2CBus->I2CPutBits = R128I2CPutBits;
-    info->pI2CBus->I2CGetBits = R128I2CGetBits;
-    info->pI2CBus->AcknTimeout = 5;
-
-    if (!xf86I2CBusInit(info->pI2CBus)) {
-        return FALSE;
-    }
-    return TRUE;
-}
-
-/* return TRUE is a DFP is indeed connected to a DVI port */
-static Bool R128GetDFPInfo(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr info  = R128PTR(pScrn);
-    int i;
-    xf86MonPtr MonInfo = NULL;
-    xf86MonPtr ddc;
-    unsigned char *R128MMIO = info->MMIO;
-
-    if(!R128I2cInit(pScrn)){
-        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-                  "I2C initialization failed!\n");
-    }
-
-    OUTREG(info->DDCReg, (INREG(info->DDCReg)
-           | R128_GPIO_MONID_MASK_0 | R128_GPIO_MONID_MASK_3));
-
-    OUTREG(info->DDCReg, INREG(info->DDCReg)
-           & ~(CARD32)(R128_GPIO_MONID_A_0 | R128_GPIO_MONID_A_3));
-
-    MonInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, info->pI2CBus);
-    if(!MonInfo) {
-        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-                   "No DFP detected\n");
-        return FALSE;
-    }
-    xf86SetDDCproperties(pScrn, MonInfo);
-    ddc = pScrn->monitor->DDC;
-
-    for(i=0; i<4; i++)
-    {
-        if((ddc->det_mon[i].type == 0) &&
-	  (ddc->det_mon[i].section.d_timings.h_active > 0) &&
-	  (ddc->det_mon[i].section.d_timings.v_active > 0))
-        {
-            info->PanelXRes =
-                ddc->det_mon[i].section.d_timings.h_active;
-            info->PanelYRes =
-                ddc->det_mon[i].section.d_timings.v_active;
-
-            info->HOverPlus =
-                ddc->det_mon[i].section.d_timings.h_sync_off;
-            info->HSyncWidth =
-                ddc->det_mon[i].section.d_timings.h_sync_width;
-            info->HBlank =
-                ddc->det_mon[i].section.d_timings.h_blanking;
-            info->VOverPlus =
-                ddc->det_mon[i].section.d_timings.v_sync_off;
-            info->VSyncWidth =
-                ddc->det_mon[i].section.d_timings.v_sync_width;
-            info->VBlank =
-                ddc->det_mon[i].section.d_timings.v_blanking;
-        }
-    }
-    return TRUE;
-}
-
-
-static void R128SetSyncRangeFromEdid(ScrnInfoPtr pScrn, int flag)
-{
-    int i;
-    xf86MonPtr ddc = pScrn->monitor->DDC;
-    if(flag)  /*HSync*/
-    {
-        for(i=0; i<4; i++)
-        {
-            if(ddc->det_mon[i].type == DS_RANGES)
-            {
-                pScrn->monitor->nHsync = 1;
-                pScrn->monitor->hsync[0].lo =
-                    ddc->det_mon[i].section.ranges.min_h;
-                pScrn->monitor->hsync[0].hi =
-                    ddc->det_mon[i].section.ranges.max_h;
-                return;
-            }
-        }
-        /*if no sync ranges detected in detailed timing table,
-          let's try to derive them from supported VESA modes
-          Are we doing too much here!!!?
-        **/
-        i = 0;
-        if(ddc->timings1.t1 & 0x02) /*800x600 at 56*/
-        {
-            pScrn->monitor->hsync[i].lo =
-                pScrn->monitor->hsync[i].hi = 35.2;
-            i++;
-        }
-        if(ddc->timings1.t1 & 0x04) /*640x480 at 75*/
-        {
-            pScrn->monitor->hsync[i].lo =
-                pScrn->monitor->hsync[i].hi = 37.5;
-            i++;
-        }
-        if((ddc->timings1.t1 & 0x08) || (ddc->timings1.t1 & 0x01))
-        {
-            pScrn->monitor->hsync[i].lo =
-                pScrn->monitor->hsync[i].hi = 37.9;
-            i++;
-        }
-        if(ddc->timings1.t2 & 0x40)
-        {
-            pScrn->monitor->hsync[i].lo =
-                pScrn->monitor->hsync[i].hi = 46.9;
-            i++;
-        }
-        if((ddc->timings1.t2 & 0x80) || (ddc->timings1.t2 & 0x08))
-        {
-            pScrn->monitor->hsync[i].lo =
-                pScrn->monitor->hsync[i].hi = 48.1;
-            i++;
-        }
-        if(ddc->timings1.t2 & 0x04)
-        {
-            pScrn->monitor->hsync[i].lo =
-                pScrn->monitor->hsync[i].hi = 56.5;
-            i++;
-        }
-        if(ddc->timings1.t2 & 0x02)
-        {
-            pScrn->monitor->hsync[i].lo =
-                pScrn->monitor->hsync[i].hi = 60.0;
-            i++;
-        }
-        if(ddc->timings1.t2 & 0x01)
-        {
-            pScrn->monitor->hsync[i].lo =
-                pScrn->monitor->hsync[i].hi = 64.0;
-            i++;
-        }
-        pScrn->monitor->nHsync = i;
-    }
-    else      /*Vrefresh*/
-    {
-        for(i=0; i<4; i++)
-        {
-            if(ddc->det_mon[i].type == DS_RANGES)
-            {
-                pScrn->monitor->nVrefresh = 1;
-                pScrn->monitor->vrefresh[0].lo =
-                    ddc->det_mon[i].section.ranges.min_v;
-                pScrn->monitor->vrefresh[0].hi =
-                    ddc->det_mon[i].section.ranges.max_v;
-                return;
-            }
-        }
-        i = 0;
-        if(ddc->timings1.t1 & 0x02) /*800x600 at 56*/
-        {
-            pScrn->monitor->vrefresh[i].lo =
-                pScrn->monitor->vrefresh[i].hi = 56;
-            i++;
-        }
-        if((ddc->timings1.t1 & 0x01) || (ddc->timings1.t2 & 0x08))
-        {
-            pScrn->monitor->vrefresh[i].lo =
-                pScrn->monitor->vrefresh[i].hi = 60;
-            i++;
-        }
-        if(ddc->timings1.t2 & 0x04)
-        {
-            pScrn->monitor->vrefresh[i].lo =
-                pScrn->monitor->vrefresh[i].hi = 70;
-            i++;
-        }
-        if((ddc->timings1.t1 & 0x08) || (ddc->timings1.t2 & 0x80))
-        {
-            pScrn->monitor->vrefresh[i].lo =
-                pScrn->monitor->vrefresh[i].hi = 72;
-            i++;
-        }
-        if((ddc->timings1.t1 & 0x04) || (ddc->timings1.t2 & 0x40)
-           || (ddc->timings1.t2 & 0x02) || (ddc->timings1.t2 & 0x01))
-        {
-            pScrn->monitor->vrefresh[i].lo =
-                pScrn->monitor->vrefresh[i].hi = 75;
-            i++;
-        }
-        pScrn->monitor->nVrefresh = i;
-    }
-}
-
-/***********
-   xfree's xf86ValidateModes routine deosn't work well with DFPs
-   here is our own validation routine. All modes between
-   640<=XRes<=MaxRes and 480<=YRes<=MaxYRes will be permitted.
-   NOTE: RageProII doesn't support rmx, can only work with the
-         standard modes the monitor can support (scale).
-************/
-
-static int R128ValidateFPModes(ScrnInfoPtr pScrn)
-{
-    int i, j, count=0, width, height;
-    R128InfoPtr info = R128PTR(pScrn);
-    DisplayModePtr last = NULL, new = NULL, first = NULL;
-    xf86MonPtr ddc;
-
-    /* Free any allocated modes during configuration. We don't need them*/
-    while (pScrn->modes)
-    {
-	    xf86DeleteMode(&pScrn->modes, pScrn->modes);
-    }
-    while (pScrn->modePool)
-    {
-	    xf86DeleteMode(&pScrn->modePool, pScrn->modePool);
-    }
-
-    pScrn->virtualX = pScrn->display->virtualX;
-    pScrn->virtualY = pScrn->display->virtualY;
-
-    /* If no mode specified in config, we use native resolution*/
-    if(!pScrn->display->modes[0])
-    {
-        pScrn->display->modes[0] = xnfalloc(16);
-        sprintf(pScrn->display->modes[0], "%dx%d",
-               info->PanelXRes, info->PanelYRes);
-    }
-
-    for(i=0; pScrn->display->modes[i] != NULL; i++)
-    {
-        if (sscanf(pScrn->display->modes[i], "%dx%d", &width, &height) == 2)
-        {
-
-            if(width < 640 || width > info->PanelXRes ||
-               height < 480 || height > info->PanelYRes)
-            {
-                xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-                    "Mode %s is out of range.\n"
-                    "Valid mode should be between 640x480-%dx%d\n",
-                    pScrn->display->modes[i], info->PanelXRes, info->PanelYRes);
-                continue;
-            }
-
-            new = xnfcalloc(1, sizeof(DisplayModeRec));
-            new->prev = last;
-            new->name = xnfalloc(strlen(pScrn->display->modes[i]) + 1);
-            strcpy(new->name, pScrn->display->modes[i]);
-            new->HDisplay = new->CrtcHDisplay = width;
-            new->VDisplay = new->CrtcVDisplay = height;
-
-            ddc = pScrn->monitor->DDC;
-            for(j=0; j<DET_TIMINGS; j++)
-            {
-                /*We use native mode clock only*/
-                if(ddc->det_mon[j].type == 0){
-                    new->Clock = ddc->det_mon[j].section.d_timings.clock / 1000;
-                    break;
-                }
-            }
-
-            if(new->prev) new->prev->next = new;
-            last = new;
-            if(!first) first = new;
-            pScrn->display->virtualX =
-            pScrn->virtualX = MAX(pScrn->virtualX, width);
-            pScrn->display->virtualY =
-            pScrn->virtualY = MAX(pScrn->virtualY, height);
-            count++;
-        }
-        else
-        {
-            xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-                "Mode name %s is invalid\n", pScrn->display->modes[i]);
-            continue;
-        }
-   }
-
-   if(last)
-   {
-       last->next = first;
-       first->prev = last;
-       pScrn->modes = first;
-
-       /*FIXME: May need to validate line pitch here*/
-       {
-           int dummy = 0;
-           switch(pScrn->depth / 8)
-           {
-              case 1:
-                  dummy = 128 - pScrn->virtualX % 128;
-                  break;
-              case 2:
-                  dummy = 32 - pScrn->virtualX % 32;
-                  break;
-              case 3:
-              case 4:
-                  dummy = 16 - pScrn->virtualX % 16;
-           }
-           pScrn->displayWidth = pScrn->virtualX + dummy;
-       }
-
-   }
-
-   return count;
-}
-
-
-/* This is called by R128PreInit to validate modes and compute parameters
-   for all of the valid modes. */
-static Bool R128PreInitModes(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-    ClockRangePtr clockRanges;
-    int           modesFound;
-
-    if(info->isDFP) {
-        R128MapMem(pScrn);
-        info->BIOSDisplay = R128_BIOS_DISPLAY_FP;
-        /* validate if DFP really connected. */
-        if(!R128GetDFPInfo(pScrn)) {
-            info->isDFP = FALSE;
-            info->BIOSDisplay = R128_BIOS_DISPLAY_CRT;
-        } else if(!info->isPro2) {
-            /* RageProII doesn't support rmx, we can't use native-mode
-               stretching for other non-native modes. It will rely on
-               whatever VESA modes monitor can support. */
-            modesFound = R128ValidateFPModes(pScrn);
-            if(modesFound < 1) {
-                 xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-                     "No valid mode found for this DFP/LCD\n");
-                 R128UnmapMem(pScrn);
-                 return FALSE;
-
-            }
-        }
-        R128UnmapMem(pScrn);
-    }
-
-    if(!info->isDFP || info->isPro2) {
-				/* Get mode information */
-        pScrn->progClock                   = TRUE;
-        clockRanges                        = xnfcalloc(sizeof(*clockRanges), 1);
-        clockRanges->next                  = NULL;
-        clockRanges->minClock              = info->pll.min_pll_freq;
-        clockRanges->maxClock              = info->pll.max_pll_freq * 10;
-        clockRanges->clockIndex            = -1;
-        if (info->HasPanelRegs || info->isDFP) {
-            clockRanges->interlaceAllowed  = FALSE;
-            clockRanges->doubleScanAllowed = FALSE;
-        } else {
-            clockRanges->interlaceAllowed  = TRUE;
-            clockRanges->doubleScanAllowed = TRUE;
-        }
-
-        if(pScrn->monitor->DDC) {
-        /*if we still don't know sync range yet, let's try EDID.
-          Note that, since we can have dual heads, the Xconfigurator
-          may not be able to probe both monitors correctly through
-          vbe probe function (R128ProbeDDC). Here we provide an
-          additional way to auto-detect sync ranges if they haven't
-          been added to XF86Config manually.
-        **/
-            if(pScrn->monitor->nHsync <= 0)
-                R128SetSyncRangeFromEdid(pScrn, 1);
-            if(pScrn->monitor->nVrefresh <= 0)
-                R128SetSyncRangeFromEdid(pScrn, 0);
-        }
-
-        modesFound = xf86ValidateModes(pScrn,
-				   pScrn->monitor->Modes,
-				   pScrn->display->modes,
-				   clockRanges,
-				   NULL,        /* linePitches */
-				   8 * 64,      /* minPitch */
-				   8 * 1024,    /* maxPitch */
-/*
- * ATI docs say pitchInc must be 8 * 64, but this doesn't permit a pitch of
- * 800 bytes, which is known to work on the Rage128 LF on clamshell iBooks
- */
-				   8 * 32,      /* pitchInc */
-				   128,         /* minHeight */
-				   2048,        /* maxHeight */
-				   pScrn->display->virtualX,
-				   pScrn->display->virtualY,
-				   info->FbMapSize,
-				   LOOKUP_BEST_REFRESH);
-
-        if (modesFound < 1 && info->FBDev) {
-		fbdevHWUseBuildinMode(pScrn);
-		pScrn->displayWidth = fbdevHWGetLineLength(pScrn)/(pScrn->bitsPerPixel/8);
-		modesFound = 1;
-        }
-
-        if (modesFound == -1) return FALSE;
-        xf86PruneDriverModes(pScrn);
-        if (!modesFound || !pScrn->modes) {
-            xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes found\n");
-            return FALSE;
-        }
-        xf86SetCrtcForModes(pScrn, 0);
-    }
-				/* Set DPI */
-    pScrn->currentMode = pScrn->modes;
-    xf86PrintModes(pScrn);
-
-    xf86SetDpi(pScrn, 0, 0);
-
-				/* Get ScreenInit function */
-    if (!xf86LoadSubModule(pScrn, "fb")) return FALSE;
-
-    info->CurrentLayout.displayWidth = pScrn->displayWidth;
-    info->CurrentLayout.mode = pScrn->currentMode;
-
-    return TRUE;
-}
-
-/* This is called by R128PreInit to initialize the hardware cursor. */
-static Bool R128PreInitCursor(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-
-    if (!xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE)) {
-	if (!xf86LoadSubModule(pScrn, "ramdac")) return FALSE;
-    }
-    return TRUE;
-}
-
-/* This is called by R128PreInit to initialize hardware acceleration. */
-static Bool R128PreInitAccel(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-
-    if (!xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, FALSE)) {
-	if (!xf86LoadSubModule(pScrn, "xaa")) return FALSE;
-    }
-    return TRUE;
-}
-
-static Bool R128PreInitInt10(ScrnInfoPtr pScrn, xf86Int10InfoPtr *ppInt10)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-#if 1 && !defined(__alpha__)
-    /* int10 is broken on some Alphas */
-    if (xf86LoadSubModule(pScrn, "int10")) {
-	xf86DrvMsg(pScrn->scrnIndex,X_INFO,"initializing int10\n");
-	*ppInt10 = xf86InitInt10(info->pEnt->index);
-    }
-#endif
-    return TRUE;
-}
-
-#ifdef XF86DRI
-static Bool R128PreInitDRI(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info = R128PTR(pScrn);
-
-    if (xf86ReturnOptValBool(info->Options, OPTION_CCE_PIO, FALSE)) {
-	xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Forcing CCE into PIO mode\n");
-	info->CCEMode = R128_DEFAULT_CCE_PIO_MODE;
-    } else {
-	info->CCEMode = R128_DEFAULT_CCE_BM_MODE;
-    }
-
-    if (xf86ReturnOptValBool(info->Options, OPTION_NO_SECURITY, FALSE)) {
-	xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		   "WARNING!!!  CCE Security checks disabled!!! **********\n");
-	info->CCESecure = FALSE;
-    } else {
-	info->CCESecure = TRUE;
-    }
-
-    info->agpMode        = R128_DEFAULT_AGP_MODE;
-    info->agpSize        = R128_DEFAULT_AGP_SIZE;
-    info->ringSize       = R128_DEFAULT_RING_SIZE;
-    info->bufSize        = R128_DEFAULT_BUFFER_SIZE;
-    info->agpTexSize     = R128_DEFAULT_AGP_TEX_SIZE;
-
-    info->CCEusecTimeout = R128_DEFAULT_CCE_TIMEOUT;
-
-    if (!info->IsPCI) {
-	if (xf86GetOptValInteger(info->Options,
-				 OPTION_AGP_MODE, &(info->agpMode))) {
-	    if (info->agpMode < 1 || info->agpMode > R128_AGP_MAX_MODE) {
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "Illegal AGP Mode: %d\n", info->agpMode);
-		return FALSE;
-	    }
-	    xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		       "Using AGP %dx mode\n", info->agpMode);
-	}
-
-	if (xf86GetOptValInteger(info->Options,
-				 OPTION_AGP_SIZE, (int *)&(info->agpSize))) {
-	    switch (info->agpSize) {
-	    case 4:
-	    case 8:
-	    case 16:
-	    case 32:
-	    case 64:
-	    case 128:
-	    case 256:
-		break;
-	    default:
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "Illegal AGP size: %d MB\n", info->agpSize);
-		return FALSE;
-	    }
-	}
-
-	if (xf86GetOptValInteger(info->Options,
-				 OPTION_RING_SIZE, &(info->ringSize))) {
-	    if (info->ringSize < 1 || info->ringSize >= (int)info->agpSize) {
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "Illegal ring buffer size: %d MB\n",
-			   info->ringSize);
-		return FALSE;
-	    }
-	}
-
-	if (xf86GetOptValInteger(info->Options,
-				 OPTION_BUFFER_SIZE, &(info->bufSize))) {
-	    if (info->bufSize < 1 || info->bufSize >= (int)info->agpSize) {
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "Illegal vertex/indirect buffers size: %d MB\n",
-			   info->bufSize);
-		return FALSE;
-	    }
-	    if (info->bufSize > 2) {
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "Illegal vertex/indirect buffers size: %d MB\n",
-			   info->bufSize);
-		xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-			   "Clamping vertex/indirect buffers size to 2 MB\n");
-		info->bufSize = 2;
-	    }
-	}
-
-	if (info->ringSize + info->bufSize + info->agpTexSize >
-	    (int)info->agpSize) {
-	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		       "Buffers are too big for requested AGP space\n");
-	    return FALSE;
-	}
-
-	info->agpTexSize = info->agpSize - (info->ringSize + info->bufSize);
-    }
-
-    if (xf86GetOptValInteger(info->Options, OPTION_USEC_TIMEOUT,
-			     &(info->CCEusecTimeout))) {
-	/* This option checked by the R128 DRM kernel module */
-    }
-
-    if (!xf86LoadSubModule(pScrn, "shadowfb")) {
-	info->allowPageFlip = 0;
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "Couldn't load shadowfb module:\n");
-    } else {
-	info->allowPageFlip = xf86ReturnOptValBool(info->Options,
-						   OPTION_PAGE_FLIP,
-						   FALSE);
-    }
-
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Page flipping %sabled\n",
-	       info->allowPageFlip ? "en" : "dis");
-
-    return TRUE;
-}
-#endif
-
-static void
-R128ProbeDDC(ScrnInfoPtr pScrn, int indx)
-{
-    vbeInfoPtr pVbe;
-    if (xf86LoadSubModule(pScrn, "vbe")) {
-	pVbe = VBEInit(NULL,indx);
-	ConfiguredMonitor = vbeDoEDID(pVbe, NULL);
-	vbeFree(pVbe);
-    }
-}
-
-/* R128PreInit is called once at server startup. */
-Bool R128PreInit(ScrnInfoPtr pScrn, int flags)
-{
-    R128InfoPtr      info;
-    xf86Int10InfoPtr pInt10 = NULL;
-
-    R128TRACE(("R128PreInit\n"));
-
-    if (pScrn->numEntities != 1) return FALSE;
-
-    if (!R128GetRec(pScrn)) return FALSE;
-
-    info               = R128PTR(pScrn);
-
-    info->IsSecondary  = FALSE;
-    info->IsPrimary = FALSE;
-    info->SwitchingMode = FALSE;
-
-    info->pEnt         = xf86GetEntityInfo(pScrn->entityList[0]);
-    if (info->pEnt->location.type != BUS_PCI) goto fail;
-
-    if(xf86IsEntityShared(pScrn->entityList[0]))
-    {
-        if(xf86IsPrimInitDone(pScrn->entityList[0]))
-        {
-            DevUnion* pPriv;
-            R128EntPtr pR128Ent;
-            info->IsSecondary = TRUE;
-            pPriv = xf86GetEntityPrivate(pScrn->entityList[0], 
-                    getR128EntityIndex());
-            pR128Ent = pPriv->ptr;
-            if(pR128Ent->BypassSecondary) return FALSE;
-            pR128Ent->pSecondaryScrn = pScrn;
-        }
-        else
-        {
-            DevUnion* pPriv;
-            R128EntPtr pR128Ent;
-	    info->IsPrimary = TRUE;
-            xf86SetPrimInitDone(pScrn->entityList[0]);
-            pPriv = xf86GetEntityPrivate(pScrn->entityList[0], 
-                    getR128EntityIndex());
-            pR128Ent = pPriv->ptr;
-            pR128Ent->pPrimaryScrn = pScrn;
-            pR128Ent->IsDRIEnabled = FALSE;
-            pR128Ent->BypassSecondary = FALSE;
-            pR128Ent->HasSecondary = FALSE;
-            pR128Ent->RestorePrimary = FALSE;
-            pR128Ent->IsSecondaryRestored = FALSE;
-        }
-    }
-
-    if (flags & PROBE_DETECT) {
-	R128ProbeDDC(pScrn, info->pEnt->index);
-	return TRUE;
-    }
-
-    info->PciInfo      = xf86GetPciInfoForEntity(info->pEnt->index);
-    info->PciTag       = pciTag(PCI_DEV_BUS(info->PciInfo),
-				PCI_DEV_DEV(info->PciInfo),
-				PCI_DEV_FUNC(info->PciInfo));
-
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-	       "PCI bus %d card %d func %d\n",
-	       PCI_DEV_BUS(info->PciInfo),
-	       PCI_DEV_DEV(info->PciInfo),
-	       PCI_DEV_FUNC(info->PciInfo));
-
-    if (xf86RegisterResources(info->pEnt->index, 0, ResNone)) goto fail;
-    if (xf86SetOperatingState(resVga, info->pEnt->index, ResUnusedOpr)) goto fail;
-
-    pScrn->racMemFlags = RAC_FB | RAC_COLORMAP | RAC_VIEWPORT | RAC_CURSOR;
-    pScrn->monitor     = pScrn->confScreen->monitor;
-
-    if (!R128PreInitVisual(pScrn))    goto fail;
-
-				/* We can't do this until we have a
-				   pScrn->display. */
-    xf86CollectOptions(pScrn, NULL);
-    if (!(info->Options = xalloc(sizeof(R128Options))))    goto fail;
-    memcpy(info->Options, R128Options, sizeof(R128Options));
-    xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, info->Options);
-
-    /* By default, don't do VGA IOs on ppc */
-#if defined(__powerpc__) || defined(__sparc__) || !defined(WITH_VGAHW)
-    info->VGAAccess = FALSE;
-#else
-    info->VGAAccess = TRUE;
-#endif
-
-#ifdef WITH_VGAHW
-    xf86GetOptValBool(info->Options, OPTION_VGA_ACCESS, &info->VGAAccess);
-    if (info->VGAAccess) {
-       if (!xf86LoadSubModule(pScrn, "vgahw"))
-           info->VGAAccess = FALSE;
-        else {
-            if (!vgaHWGetHWRec(pScrn))
-               info->VGAAccess = FALSE;
-       }
-       if (!info->VGAAccess)
-           xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Loading VGA module failed,"
-                      " trying to run without it\n");
-    } else
-           xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VGAAccess option set to FALSE,"
-                      " VGA module load skipped\n");
-    if (info->VGAAccess)
-        vgaHWGetIOBase(VGAHWPTR(pScrn));
-#else
-    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VGAHW support not compiled, VGA "
-               "module load skipped\n");
-#endif
-
-
-
-    if (!R128PreInitWeight(pScrn))    goto fail;
-
-    if(xf86GetOptValInteger(info->Options, OPTION_VIDEO_KEY, &(info->videoKey))) {
-        xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "video key set to 0x%x\n",
-                                info->videoKey);
-    } else {
-        info->videoKey = 0x1E;
-    }
-
-    if (xf86ReturnOptValBool(info->Options, OPTION_SHOW_CACHE, FALSE)) {
-        info->showCache = TRUE;
-        xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "ShowCache enabled\n");
-    }
-
-#ifdef __powerpc__
-    if (xf86ReturnOptValBool(info->Options, OPTION_FBDEV, TRUE))
-#else
-    if (xf86ReturnOptValBool(info->Options, OPTION_FBDEV, FALSE))
-#endif
-    {
-	info->FBDev = TRUE;
-	xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
-		   "Using framebuffer device\n");
-    }
-
-    if (info->FBDev) {
-	/* check for linux framebuffer device */
-	if (!xf86LoadSubModule(pScrn, "fbdevhw")) return FALSE;
-	if (!fbdevHWInit(pScrn, info->PciInfo, NULL)) return FALSE;
-	pScrn->SwitchMode    = fbdevHWSwitchModeWeak();
-	pScrn->AdjustFrame   = fbdevHWAdjustFrameWeak();
-	pScrn->ValidMode     = fbdevHWValidModeWeak();
-    }
-
-    if (!info->FBDev)
-	if (!R128PreInitInt10(pScrn, &pInt10)) goto fail;
-
-    if (!R128PreInitConfig(pScrn))             goto fail;
-
-    if (!R128GetBIOSParameters(pScrn, pInt10)) goto fail;
-
-    if (!R128GetPLLParameters(pScrn))          goto fail;
-
-    /* Don't fail on this one */
-    R128PreInitDDC(pScrn, pInt10);
-
-    if (!R128PreInitGamma(pScrn))              goto fail;
-
-    if (!R128PreInitModes(pScrn))              goto fail;
-
-    if (!R128PreInitCursor(pScrn))             goto fail;
-
-    if (!R128PreInitAccel(pScrn))              goto fail;
-
-#ifdef XF86DRI
-    if (!R128PreInitDRI(pScrn))                goto fail;
-#endif
-
-				/* Free the video bios (if applicable) */
-    if (info->VBIOS) {
-	xfree(info->VBIOS);
-	info->VBIOS = NULL;
-    }
-
-				/* Free int10 info */
-    if (pInt10)
-	xf86FreeInt10(pInt10);
-
-    xf86DrvMsg(pScrn->scrnIndex, X_NOTICE,
-	"For information on using the multimedia capabilities\n\tof this"
-	" adapter, please see http://gatos.sf.net.\n");
-
-    return TRUE;
-
-  fail:
-				/* Pre-init failed. */
-
-				/* Free the video bios (if applicable) */
-    if (info->VBIOS) {
-	xfree(info->VBIOS);
-	info->VBIOS = NULL;
-    }
-
-				/* Free int10 info */
-    if (pInt10)
-	xf86FreeInt10(pInt10);
-
-#ifdef WITH_VGAHW
-    if (info->VGAAccess)
-           vgaHWFreeHWRec(pScrn);
-#endif
-    R128FreeRec(pScrn);
-    return FALSE;
-}
-
-/* Load a palette. */
-static void R128LoadPalette(ScrnInfoPtr pScrn, int numColors,
-			    int *indices, LOCO *colors, VisualPtr pVisual)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           i, j;
-    int           idx;
-    unsigned char r, g, b;
-
-    /* If the second monitor is connected, we also 
-       need to deal with the secondary palette*/
-    if (info->IsSecondary) j = 1;
-    else j = 0;
-    
-    PAL_SELECT(j);
-
-
-    /* Select palette 0 (main CRTC) if using FP-enabled chip */
-    /*if (info->HasPanelRegs || info->isDFP) PAL_SELECT(0);*/
-
-    if (info->CurrentLayout.depth == 15) {
-	/* 15bpp mode.  This sends 32 values. */
-	for (i = 0; i < numColors; i++) {
-	    idx = indices[i];
-	    r   = colors[idx].red;
-	    g   = colors[idx].green;
-	    b   = colors[idx].blue;
-	    OUTPAL(idx * 8, r, g, b);
-	}
-    }
-    else if (info->CurrentLayout.depth == 16) {
-	/* 16bpp mode.  This sends 64 values. */
-				/* There are twice as many green values as
-				   there are values for red and blue.  So,
-				   we take each red and blue pair, and
-				   combine it with each of the two green
-				   values. */
-	for (i = 0; i < numColors; i++) {
-	    idx = indices[i];
-	    r   = colors[idx / 2].red;
-	    g   = colors[idx].green;
-	    b   = colors[idx / 2].blue;
-	    OUTPAL(idx * 4, r, g, b);
-	}
-    }
-    else {
-	/* 8bpp mode.  This sends 256 values. */
-	for (i = 0; i < numColors; i++) {
-	    idx = indices[i];
-	    r   = colors[idx].red;
-	    b   = colors[idx].blue;
-	    g   = colors[idx].green;
-	    OUTPAL(idx, r, g, b);
-	}
-    }
-}
-
-static void
-R128BlockHandler(int i, pointer blockData, pointer pTimeout, pointer pReadmask)
-{
-    ScreenPtr   pScreen = screenInfo.screens[i];
-    ScrnInfoPtr pScrn   = xf86Screens[i];
-    R128InfoPtr info    = R128PTR(pScrn);
-
-#ifdef XF86DRI
-    if (info->directRenderingEnabled)
-        FLUSH_RING();
-#endif
-
-    pScreen->BlockHandler = info->BlockHandler;
-    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
-    pScreen->BlockHandler = R128BlockHandler;
-
-    if(info->VideoTimerCallback) {
-        (*info->VideoTimerCallback)(pScrn, currentTime.milliseconds);
-    }
-}
-
-/* Called at the start of each server generation. */
-Bool R128ScreenInit(int scrnIndex, ScreenPtr pScreen,
-                              int argc, char **argv)
-{
-    ScrnInfoPtr pScrn  = xf86Screens[pScreen->myNum];
-    R128InfoPtr info   = R128PTR(pScrn);
-    BoxRec      MemBox;
-    int		y2;
-
-    R128TRACE(("R128ScreenInit %x %d\n", pScrn->memPhysBase, pScrn->fbOffset));
-
-#ifdef XF86DRI
-				/* Turn off the CCE for now. */
-    info->CCEInUse     = FALSE;
-    info->indirectBuffer = NULL;
-#endif
-
-    if (!R128MapMem(pScrn)) return FALSE;
-    pScrn->fbOffset    = 0;
-    if(info->IsSecondary) pScrn->fbOffset = pScrn->videoRam * 1024;
-#ifdef XF86DRI
-    info->fbX          = 0;
-    info->fbY          = 0;
-    info->frontOffset  = 0;
-    info->frontPitch   = pScrn->displayWidth;
-#endif
-
-    info->PaletteSavedOnVT = FALSE;
-
-    R128Save(pScrn);
-    if (info->FBDev) {
-	if (!fbdevHWModeInit(pScrn, pScrn->currentMode)) return FALSE;
-    } else {
-	if (!R128ModeInit(pScrn, pScrn->currentMode)) return FALSE;
-    }
-
-    R128SaveScreen(pScreen, SCREEN_SAVER_ON);
-    pScrn->AdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
-
-				/* Visual setup */
-    miClearVisualTypes();
-    if (!miSetVisualTypes(pScrn->depth,
-			  miGetDefaultVisualMask(pScrn->depth),
-			  pScrn->rgbBits,
-			  pScrn->defaultVisual)) return FALSE;
-    miSetPixmapDepths ();
-
-#ifdef XF86DRI
-				/* Setup DRI after visuals have been
-				   established, but before fbScreenInit is
-				   called.  fbScreenInit will eventually
-				   call the driver's InitGLXVisuals call
-				   back. */
-    {
-	/* FIXME: When we move to dynamic allocation of back and depth
-	   buffers, we will want to revisit the following check for 3
-	   times the virtual size of the screen below. */
-	int width_bytes = (pScrn->displayWidth *
-			   info->CurrentLayout.pixel_bytes);
-	int maxy        = info->FbMapSize / width_bytes;
-
-	if (xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, FALSE)) {
-	    xf86DrvMsg(scrnIndex, X_WARNING,
-		       "Acceleration disabled, not initializing the DRI\n");
-	    info->directRenderingEnabled = FALSE;
-	} else if (maxy <= pScrn->virtualY * 3) {
-	    xf86DrvMsg(scrnIndex, X_WARNING,
-		       "Static buffer allocation failed -- "
-		       "need at least %d kB video memory\n",
-		       (pScrn->displayWidth * pScrn->virtualY *
-			info->CurrentLayout.pixel_bytes * 3 + 1023) / 1024);
-	    info->directRenderingEnabled = FALSE;
-	} else {
-            if(info->IsSecondary)
-                info->directRenderingEnabled = FALSE;
-            else 
-            {
-                /* Xinerama has sync problem with DRI, disable it for now */
-                if(xf86IsEntityShared(pScrn->entityList[0]))
-                {
-                    info->directRenderingEnabled = FALSE;
- 	            xf86DrvMsg(scrnIndex, X_WARNING,
-                        "Direct Rendering Disabled -- "
-                        "Dual-head configuration is not working with DRI "
-                        "at present.\nPlease use only one Device/Screen "
-                        "section in your XFConfig file.\n");
-                }
-                else
-                info->directRenderingEnabled =
-                    R128DRIScreenInit(pScreen);
-                if(xf86IsEntityShared(pScrn->entityList[0]))
-                {
-                    DevUnion* pPriv;
-                    R128EntPtr pR128Ent;
-                    pPriv = xf86GetEntityPrivate(pScrn->entityList[0], 
-                        getR128EntityIndex());
-                    pR128Ent = pPriv->ptr;
-                    pR128Ent->IsDRIEnabled = info->directRenderingEnabled;
-                }
-            }
-	}
-    }
-#endif
-
-    if (!fbScreenInit (pScreen, info->FB,
-		       pScrn->virtualX, pScrn->virtualY,
-		       pScrn->xDpi, pScrn->yDpi, pScrn->displayWidth,
-		       pScrn->bitsPerPixel))
-	return FALSE;
-
-    xf86SetBlackWhitePixels(pScreen);
-
-    if (pScrn->bitsPerPixel > 8) {
-	VisualPtr visual;
-
-	visual = pScreen->visuals + pScreen->numVisuals;
-	while (--visual >= pScreen->visuals) {
-	    if ((visual->class | DynamicClass) == DirectColor) {
-		visual->offsetRed   = pScrn->offset.red;
-		visual->offsetGreen = pScrn->offset.green;
-		visual->offsetBlue  = pScrn->offset.blue;
-		visual->redMask     = pScrn->mask.red;
-		visual->greenMask   = pScrn->mask.green;
-		visual->blueMask    = pScrn->mask.blue;
-	    }
-	}
-    }
-
-    /* must be after RGB order fixed */
-    fbPictureInit (pScreen, 0, 0);
-
-				/* Memory manager setup */
-#ifdef XF86DRI
-    if (info->directRenderingEnabled) {
-	FBAreaPtr fbarea;
-	int width_bytes = (pScrn->displayWidth *
-			   info->CurrentLayout.pixel_bytes);
-	int cpp = info->CurrentLayout.pixel_bytes;
-	int bufferSize = pScrn->virtualY * width_bytes;
-	int l, total;
-	int scanlines;
-
-	switch (info->CCEMode) {
-	case R128_DEFAULT_CCE_PIO_MODE:
-	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CCE in PIO mode\n");
-	    break;
-	case R128_DEFAULT_CCE_BM_MODE:
-	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CCE in BM mode\n");
-	    break;
-	default:
-	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "CCE in UNKNOWN mode\n");
-	    break;
-	}
-
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		   "Using %d MB AGP aperture\n", info->agpSize);
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		   "Using %d MB for the ring buffer\n", info->ringSize);
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		   "Using %d MB for vertex/indirect buffers\n", info->bufSize);
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		   "Using %d MB for AGP textures\n", info->agpTexSize);
-
-	/* Try for front, back, depth, and two framebuffers worth of
-	 * pixmap cache.  Should be enough for a fullscreen background
-	 * image plus some leftovers.
-	 */
-	info->textureSize = info->FbMapSize - 5 * bufferSize;
-
-	/* If that gives us less than half the available memory, let's
-	 * be greedy and grab some more.  Sorry, I care more about 3D
-	 * performance than playing nicely, and you'll get around a full
-	 * framebuffer's worth of pixmap cache anyway.
-	 */
-	if (info->textureSize < (int)info->FbMapSize / 2) {
-	    info->textureSize = info->FbMapSize - 4 * bufferSize;
-	}
-
-	if (info->textureSize > 0) {
-	    l = R128MinBits((info->textureSize-1) / R128_NR_TEX_REGIONS);
-	    if (l < R128_LOG_TEX_GRANULARITY) l = R128_LOG_TEX_GRANULARITY;
-
-	    /* Round the texture size up to the nearest whole number of
-	     * texture regions.  Again, be greedy about this, don't
-	     * round down.
-	     */
-	    info->log2TexGran = l;
-	    info->textureSize = (info->textureSize >> l) << l;
-	} else {
-	    info->textureSize = 0;
-	}
-
-	/* Set a minimum usable local texture heap size.  This will fit
-	 * two 256x256x32bpp textures.
-	 */
-	if (info->textureSize < 512 * 1024) {
-	    info->textureOffset = 0;
-	    info->textureSize = 0;
-	}
-
-	total = info->FbMapSize - info->textureSize;
-	scanlines = total / width_bytes;
-	if (scanlines > 8191) scanlines = 8191;
-
-	/* Recalculate the texture offset and size to accomodate any
-	 * rounding to a whole number of scanlines.
-	 */
-	info->textureOffset = scanlines * width_bytes;
-
-	MemBox.x1 = 0;
-	MemBox.y1 = 0;
-	MemBox.x2 = pScrn->displayWidth;
-	MemBox.y2 = scanlines;
-
-	if (!xf86InitFBManager(pScreen, &MemBox)) {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
-		       "Memory manager initialization to (%d,%d) (%d,%d) failed\n",
-		       MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
-	    return FALSE;
-	} else {
-	    int width, height;
-
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Memory manager initialized to (%d,%d) (%d,%d)\n",
-		       MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
-	    if ((fbarea = xf86AllocateOffscreenArea(pScreen,
-						    pScrn->displayWidth,
-						    2, 0, NULL, NULL, NULL))) {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			   "Reserved area from (%d,%d) to (%d,%d)\n",
-			   fbarea->box.x1, fbarea->box.y1,
-			   fbarea->box.x2, fbarea->box.y2);
-	    } else {
-		xf86DrvMsg(scrnIndex, X_ERROR, "Unable to reserve area\n");
-	    }
-	    if (xf86QueryLargestOffscreenArea(pScreen, &width,
-					      &height, 0, 0, 0)) {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			   "Largest offscreen area available: %d x %d\n",
-			   width, height);
-	    }
-	}
-
-				/* Allocate the shared back buffer */
-	if ((fbarea = xf86AllocateOffscreenArea(pScreen,
-						pScrn->virtualX,
-						pScrn->virtualY,
-						32, NULL, NULL, NULL))) {
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Reserved back buffer from (%d,%d) to (%d,%d)\n",
-		       fbarea->box.x1, fbarea->box.y1,
-		       fbarea->box.x2, fbarea->box.y2);
-
-	    info->backX = fbarea->box.x1;
-	    info->backY = fbarea->box.y1;
-	    info->backOffset = (fbarea->box.y1 * width_bytes +
-				fbarea->box.x1 * cpp);
-	    info->backPitch = pScrn->displayWidth;
-	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR, "Unable to reserve back buffer\n");
-	    info->backX = -1;
-	    info->backY = -1;
-	    info->backOffset = -1;
-	    info->backPitch = -1;
-	}
-
-				/* Allocate the shared depth buffer */
-	if ((fbarea = xf86AllocateOffscreenArea(pScreen,
-						pScrn->virtualX,
-						pScrn->virtualY + 1,
-						32, NULL, NULL, NULL))) {
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Reserved depth buffer from (%d,%d) to (%d,%d)\n",
-		       fbarea->box.x1, fbarea->box.y1,
-		       fbarea->box.x2, fbarea->box.y2);
-
-	    info->depthX = fbarea->box.x1;
-	    info->depthY = fbarea->box.y1;
-	    info->depthOffset = (fbarea->box.y1 * width_bytes +
-				 fbarea->box.x1 * cpp);
-	    info->depthPitch = pScrn->displayWidth;
-	    info->spanOffset = ((fbarea->box.y2 - 1) * width_bytes +
-				fbarea->box.x1 * cpp);
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Reserved depth span from (%d,%d) offset 0x%x\n",
-		       fbarea->box.x1, fbarea->box.y2 - 1, info->spanOffset);
-	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR, "Unable to reserve depth buffer\n");
-	    info->depthX = -1;
-	    info->depthY = -1;
-	    info->depthOffset = -1;
-	    info->depthPitch = -1;
-	    info->spanOffset = -1;
-	}
-
-	xf86DrvMsg(scrnIndex, X_INFO,
-		   "Reserved %d kb for textures at offset 0x%x\n",
-		   info->textureSize/1024, info->textureOffset);
-    }
-    else
-#endif
-    {
-	MemBox.x1 = 0;
-	MemBox.y1 = 0;
-	MemBox.x2 = pScrn->displayWidth;
-	y2        = (info->FbMapSize
-		     / (pScrn->displayWidth *
-			info->CurrentLayout.pixel_bytes));
-				/* The acceleration engine uses 14 bit
-				   signed coordinates, so we can't have any
-				   drawable caches beyond this region. */
-	if (y2 > 8191) y2 = 8191;
-	MemBox.y2 = y2;
-
-	if (!xf86InitFBManager(pScreen, &MemBox)) {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
-		       "Memory manager initialization to (%d,%d) (%d,%d) failed\n",
-		       MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
-	    return FALSE;
-	} else {
-	    int       width, height;
-	    FBAreaPtr fbarea;
-
-	    xf86DrvMsg(scrnIndex, X_INFO,
-		       "Memory manager initialized to (%d,%d) (%d,%d)\n",
-		       MemBox.x1, MemBox.y1, MemBox.x2, MemBox.y2);
-	    if ((fbarea = xf86AllocateOffscreenArea(pScreen, pScrn->displayWidth,
-						    2, 0, NULL, NULL, NULL))) {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			   "Reserved area from (%d,%d) to (%d,%d)\n",
-			   fbarea->box.x1, fbarea->box.y1,
-			   fbarea->box.x2, fbarea->box.y2);
-	    } else {
-		xf86DrvMsg(scrnIndex, X_ERROR, "Unable to reserve area\n");
-	    }
-	    if (xf86QueryLargestOffscreenArea(pScreen, &width, &height,
-					      0, 0, 0)) {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			   "Largest offscreen area available: %d x %d\n",
-			   width, height);
-	    }
-	}
-    }
-
-				/* Acceleration setup */
-    if (!xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, FALSE)) {
-	if (R128AccelInit(pScreen)) {
-	    xf86DrvMsg(scrnIndex, X_INFO, "Acceleration enabled\n");
-	    info->accelOn = TRUE;
-	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
-		       "Acceleration initialization failed\n");
-	    xf86DrvMsg(scrnIndex, X_INFO, "Acceleration disabled\n");
-	    info->accelOn = FALSE;
-	}
-    } else {
-	xf86DrvMsg(scrnIndex, X_INFO, "Acceleration disabled\n");
-	info->accelOn = FALSE;
-    }
-
-				/* DGA setup */
-    R128DGAInit(pScreen);
-
-				/* Backing store setup */
-    miInitializeBackingStore(pScreen);
-    xf86SetBackingStore(pScreen);
-
-				/* Set Silken Mouse */
-    xf86SetSilkenMouse(pScreen);
-
-				/* Cursor setup */
-    miDCInitialize(pScreen, xf86GetPointerScreenFuncs());
-
-				/* Hardware cursor setup */
-    if (!xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE)) {
-	if (R128CursorInit(pScreen)) {
-	    int width, height;
-
-	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		       "Using hardware cursor (scanline %ld)\n",
-		       info->cursor_start / pScrn->displayWidth);
-	    if (xf86QueryLargestOffscreenArea(pScreen, &width, &height,
-					      0, 0, 0)) {
-		xf86DrvMsg(scrnIndex, X_INFO,
-			   "Largest offscreen area available: %d x %d\n",
-			   width, height);
-	    }
-	} else {
-	    xf86DrvMsg(scrnIndex, X_ERROR,
-		       "Hardware cursor initialization failed\n");
-	    xf86DrvMsg(scrnIndex, X_INFO, "Using software cursor\n");
-	}
-    } else {
-	info->cursor_start = 0;
-	xf86DrvMsg(scrnIndex, X_INFO, "Using software cursor\n");
-    }
-
-				/* Colormap setup */
-    if (!miCreateDefColormap(pScreen)) return FALSE;
-    if (!xf86HandleColormaps(pScreen, 256, info->dac6bits ? 6 : 8,
-			     (info->FBDev ? fbdevHWLoadPaletteWeak() :
-			     R128LoadPalette), NULL,
-			     CMAP_PALETTED_TRUECOLOR
-			     | CMAP_RELOAD_ON_MODE_SWITCH
-#if 0 /* This option messes up text mode! (eich at suse.de) */
-			     | CMAP_LOAD_EVEN_IF_OFFSCREEN
-#endif
-			     )) return FALSE;
-
-    /* DPMS setup - FIXME: also for mirror mode in non-fbdev case? - Michel */
-    if (info->FBDev)
-	xf86DPMSInit(pScreen, fbdevHWDPMSSetWeak(), 0);
-
-    else {
-	if (info->DisplayType == MT_LCD)
-	    xf86DPMSInit(pScreen, R128DisplayPowerManagementSetLCD, 0);
-	else
-	    xf86DPMSInit(pScreen, R128DisplayPowerManagementSet, 0);
-    }
-
-    if (!info->IsSecondary)
-	R128InitVideo(pScreen);
-
-				/* Provide SaveScreen */
-    pScreen->SaveScreen  = R128SaveScreen;
-
-				/* Wrap CloseScreen */
-    info->CloseScreen    = pScreen->CloseScreen;
-    pScreen->CloseScreen = R128CloseScreen;
-
-				/* Note unused options */
-    if (serverGeneration == 1)
-	xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options);
-
-#ifdef XF86DRI
-				/* DRI finalization */
-    if (info->directRenderingEnabled) {
-				/* Now that mi, fb, drm and others have
-				   done their thing, complete the DRI
-				   setup. */
-	info->directRenderingEnabled = R128DRIFinishScreenInit(pScreen);
-    }
-    if (info->directRenderingEnabled) {
-	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Direct rendering enabled\n");
-    } else {
-	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-		   "Direct rendering disabled\n");
-    }
-#endif
-
-    info->BlockHandler = pScreen->BlockHandler;
-    pScreen->BlockHandler = R128BlockHandler;
-
-    return TRUE;
-}
-
-/* Write common registers (initialized to 0). */
-static void R128RestoreCommonRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    OUTREG(R128_FP_GEN_CNTL, restore->fp_gen_cntl | R128_FP_BLANK_DIS);
-
-    OUTREG(R128_OVR_CLR,              restore->ovr_clr);
-    OUTREG(R128_OVR_WID_LEFT_RIGHT,   restore->ovr_wid_left_right);
-    OUTREG(R128_OVR_WID_TOP_BOTTOM,   restore->ovr_wid_top_bottom);
-    OUTREG(R128_OV0_SCALE_CNTL,       restore->ov0_scale_cntl);
-    OUTREG(R128_MPP_TB_CONFIG,        restore->mpp_tb_config );
-    OUTREG(R128_MPP_GP_CONFIG,        restore->mpp_gp_config );
-    OUTREG(R128_SUBPIC_CNTL,          restore->subpic_cntl);
-    OUTREG(R128_VIPH_CONTROL,         restore->viph_control);
-    OUTREG(R128_I2C_CNTL_1,           restore->i2c_cntl_1);
-    OUTREG(R128_GEN_INT_CNTL,         restore->gen_int_cntl);
-    OUTREG(R128_CAP0_TRIG_CNTL,       restore->cap0_trig_cntl);
-    OUTREG(R128_CAP1_TRIG_CNTL,       restore->cap1_trig_cntl);
-    OUTREG(R128_BUS_CNTL,             restore->bus_cntl);
-    OUTREG(R128_CONFIG_CNTL,          restore->config_cntl);
-}
-
-/* Write CRTC registers. */
-static void R128RestoreCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    OUTREG(R128_CRTC_GEN_CNTL,        restore->crtc_gen_cntl);
-
-    OUTREGP(R128_CRTC_EXT_CNTL, restore->crtc_ext_cntl,
-	    R128_CRTC_VSYNC_DIS | R128_CRTC_HSYNC_DIS | R128_CRTC_DISPLAY_DIS);
-
-    OUTREGP(R128_DAC_CNTL, restore->dac_cntl,
-	    R128_DAC_RANGE_CNTL | R128_DAC_BLANKING);
-
-    OUTREG(R128_CRTC_H_TOTAL_DISP,    restore->crtc_h_total_disp);
-    OUTREG(R128_CRTC_H_SYNC_STRT_WID, restore->crtc_h_sync_strt_wid);
-    OUTREG(R128_CRTC_V_TOTAL_DISP,    restore->crtc_v_total_disp);
-    OUTREG(R128_CRTC_V_SYNC_STRT_WID, restore->crtc_v_sync_strt_wid);
-    OUTREG(R128_CRTC_OFFSET,          restore->crtc_offset);
-    OUTREG(R128_CRTC_OFFSET_CNTL,     restore->crtc_offset_cntl);
-    OUTREG(R128_CRTC_PITCH,           restore->crtc_pitch);
-}
-
-/* Write CRTC2 registers. */
-static void R128RestoreCrtc2Registers(ScrnInfoPtr pScrn,
-				       R128SavePtr restore)
-{
-    R128InfoPtr info        = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    OUTREGP(R128_CRTC2_GEN_CNTL, restore->crtc2_gen_cntl,
-	    R128_CRTC2_DISP_DIS);
-
-    OUTREG(R128_CRTC2_H_TOTAL_DISP,    restore->crtc2_h_total_disp);
-    OUTREG(R128_CRTC2_H_SYNC_STRT_WID, restore->crtc2_h_sync_strt_wid);
-    OUTREG(R128_CRTC2_V_TOTAL_DISP,    restore->crtc2_v_total_disp);
-    OUTREG(R128_CRTC2_V_SYNC_STRT_WID, restore->crtc2_v_sync_strt_wid);
-    OUTREG(R128_CRTC2_OFFSET,          restore->crtc2_offset);
-    OUTREG(R128_CRTC2_OFFSET_CNTL,     restore->crtc2_offset_cntl);
-    OUTREG(R128_CRTC2_PITCH,           restore->crtc2_pitch);
-}
-
-/* Write flat panel registers */
-static void R128RestoreFPRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    CARD32        tmp;
-
-    if (info->BIOSDisplay != R128_DUALHEAD)
-        OUTREG(R128_CRTC2_GEN_CNTL,       restore->crtc2_gen_cntl);
-    OUTREG(R128_FP_HORZ_STRETCH,      restore->fp_horz_stretch);
-    OUTREG(R128_FP_VERT_STRETCH,      restore->fp_vert_stretch);
-    OUTREG(R128_FP_CRTC_H_TOTAL_DISP, restore->fp_crtc_h_total_disp);
-    OUTREG(R128_FP_CRTC_V_TOTAL_DISP, restore->fp_crtc_v_total_disp);
-    OUTREG(R128_FP_H_SYNC_STRT_WID,   restore->fp_h_sync_strt_wid);
-    OUTREG(R128_FP_V_SYNC_STRT_WID,   restore->fp_v_sync_strt_wid);
-    OUTREG(R128_TMDS_CRC,             restore->tmds_crc);
-    OUTREG(R128_FP_PANEL_CNTL,        restore->fp_panel_cntl);
-    OUTREG(R128_FP_GEN_CNTL, restore->fp_gen_cntl & ~(CARD32)R128_FP_BLANK_DIS);
-
-    if(info->isDFP) return;
-
-    tmp = INREG(R128_LVDS_GEN_CNTL);
-    if ((tmp & (R128_LVDS_ON | R128_LVDS_BLON)) ==
-	(restore->lvds_gen_cntl & (R128_LVDS_ON | R128_LVDS_BLON))) {
-	OUTREG(R128_LVDS_GEN_CNTL, restore->lvds_gen_cntl);
-    } else {
-	if (restore->lvds_gen_cntl & (R128_LVDS_ON | R128_LVDS_BLON)) {
-	    OUTREG(R128_LVDS_GEN_CNTL,
-		   restore->lvds_gen_cntl & (CARD32)~R128_LVDS_BLON);
-	    usleep(R128PTR(pScrn)->PanelPwrDly * 1000);
-	    OUTREG(R128_LVDS_GEN_CNTL, restore->lvds_gen_cntl);
-	} else {
-	    OUTREG(R128_LVDS_GEN_CNTL, restore->lvds_gen_cntl | R128_LVDS_BLON);
-	    usleep(R128PTR(pScrn)->PanelPwrDly * 1000);
-	    OUTREG(R128_LVDS_GEN_CNTL, restore->lvds_gen_cntl);
-	}
-    }
-}
-
-static void R128PLLWaitForReadUpdateComplete(ScrnInfoPtr pScrn)
-{
-    while (INPLL(pScrn, R128_PPLL_REF_DIV) & R128_PPLL_ATOMIC_UPDATE_R);
-}
-
-static void R128PLLWriteUpdate(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    while (INPLL(pScrn, R128_PPLL_REF_DIV) & R128_PPLL_ATOMIC_UPDATE_R);
-
-    OUTPLLP(pScrn, R128_PPLL_REF_DIV, R128_PPLL_ATOMIC_UPDATE_W, 
-	    ~R128_PPLL_ATOMIC_UPDATE_W);
-
-}
-
-static void R128PLL2WaitForReadUpdateComplete(ScrnInfoPtr pScrn)
-{
-    while (INPLL(pScrn, R128_P2PLL_REF_DIV) & R128_P2PLL_ATOMIC_UPDATE_R);
-}
-
-static void R128PLL2WriteUpdate(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr  info       = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    while (INPLL(pScrn, R128_P2PLL_REF_DIV) & R128_P2PLL_ATOMIC_UPDATE_R);
-
-    OUTPLLP(pScrn, R128_P2PLL_REF_DIV,
-	    R128_P2PLL_ATOMIC_UPDATE_W,
-	    ~(R128_P2PLL_ATOMIC_UPDATE_W));
-}
-
-/* Write PLL registers. */
-static void R128RestorePLLRegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-
-    OUTPLLP(pScrn, R128_VCLK_ECP_CNTL,
-	    R128_VCLK_SRC_SEL_CPUCLK,
-	    ~(R128_VCLK_SRC_SEL_MASK));
-
-    OUTPLLP(pScrn,
-	    R128_PPLL_CNTL,
-	    R128_PPLL_RESET
-	    | R128_PPLL_ATOMIC_UPDATE_EN
-	    | R128_PPLL_VGA_ATOMIC_UPDATE_EN,
-	    ~(R128_PPLL_RESET
-	      | R128_PPLL_ATOMIC_UPDATE_EN
-	      | R128_PPLL_VGA_ATOMIC_UPDATE_EN));
-
-    OUTREGP(R128_CLOCK_CNTL_INDEX, R128_PLL_DIV_SEL, ~(R128_PLL_DIV_SEL));
-
-/*        R128PLLWaitForReadUpdateComplete(pScrn);*/
-    OUTPLLP(pScrn, R128_PPLL_REF_DIV,
-	    restore->ppll_ref_div, ~R128_PPLL_REF_DIV_MASK);
-/*        R128PLLWriteUpdate(pScrn);
-
-        R128PLLWaitForReadUpdateComplete(pScrn);*/
-    OUTPLLP(pScrn, R128_PPLL_DIV_3,
-	    restore->ppll_div_3, ~R128_PPLL_FB3_DIV_MASK);
-/*    R128PLLWriteUpdate(pScrn);*/
-    OUTPLLP(pScrn, R128_PPLL_DIV_3,
-	    restore->ppll_div_3, ~R128_PPLL_POST3_DIV_MASK);
-
-    R128PLLWriteUpdate(pScrn);
-    R128PLLWaitForReadUpdateComplete(pScrn);
-
-    OUTPLL(R128_HTOTAL_CNTL, restore->htotal_cntl);
-/*    R128PLLWriteUpdate(pScrn);*/
-
-    OUTPLLP(pScrn, R128_PPLL_CNTL, 0, ~(R128_PPLL_RESET
-					| R128_PPLL_SLEEP
-					| R128_PPLL_ATOMIC_UPDATE_EN
-					| R128_PPLL_VGA_ATOMIC_UPDATE_EN));
-
-    R128TRACE(("Wrote: 0x%08x 0x%08x 0x%08x (0x%08x)\n",
-	       restore->ppll_ref_div,
-	       restore->ppll_div_3,
-	       restore->htotal_cntl,
-	       INPLL(pScrn, R128_PPLL_CNTL)));
-    R128TRACE(("Wrote: rd=%d, fd=%d, pd=%d\n",
-	       restore->ppll_ref_div & R128_PPLL_REF_DIV_MASK,
-	       restore->ppll_div_3 & R128_PPLL_FB3_DIV_MASK,
-	       (restore->ppll_div_3 & R128_PPLL_POST3_DIV_MASK) >> 16));
-
-    usleep(5000); /* let the clock lock */
-
-    OUTPLLP(pScrn, R128_VCLK_ECP_CNTL,
-	    R128_VCLK_SRC_SEL_PPLLCLK,
-	    ~(R128_VCLK_SRC_SEL_MASK));
-
-}
-
-/* Write PLL2 registers. */
-static void R128RestorePLL2Registers(ScrnInfoPtr pScrn, R128SavePtr restore)
-{
-    R128InfoPtr info        = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    OUTPLLP(pScrn, R128_V2CLK_VCLKTV_CNTL,
-	    R128_V2CLK_SRC_SEL_CPUCLK, 
-	    ~R128_V2CLK_SRC_SEL_MASK);
-    
-    OUTPLLP(pScrn,
-	    R128_P2PLL_CNTL,
-	    R128_P2PLL_RESET
-	    | R128_P2PLL_ATOMIC_UPDATE_EN
-	    | R128_P2PLL_VGA_ATOMIC_UPDATE_EN,
-	    ~(R128_P2PLL_RESET
-	      | R128_P2PLL_ATOMIC_UPDATE_EN
-	      | R128_P2PLL_VGA_ATOMIC_UPDATE_EN));
-
-#if 1
-    OUTREGP(R128_CLOCK_CNTL_INDEX, 0, R128_PLL2_DIV_SEL_MASK);
-#endif
-   
-        /*R128PLL2WaitForReadUpdateComplete(pScrn);*/
-    
-    OUTPLLP(pScrn, R128_P2PLL_REF_DIV, restore->p2pll_ref_div, ~R128_P2PLL_REF_DIV_MASK);
-    
-/*        R128PLL2WriteUpdate(pScrn);   
-    R128PLL2WaitForReadUpdateComplete(pScrn);*/
-
-    OUTPLLP(pScrn, R128_P2PLL_DIV_0,
-			restore->p2pll_div_0, ~R128_P2PLL_FB0_DIV_MASK);
-
-/*    R128PLL2WriteUpdate(pScrn);
-    R128PLL2WaitForReadUpdateComplete(pScrn);*/
-    
-    OUTPLLP(pScrn, R128_P2PLL_DIV_0,
-			restore->p2pll_div_0, ~R128_P2PLL_POST0_DIV_MASK);
-
-    R128PLL2WriteUpdate(pScrn);
-    R128PLL2WaitForReadUpdateComplete(pScrn);
-    
-    OUTPLL(R128_HTOTAL2_CNTL, restore->htotal_cntl2);
-    
-/*        R128PLL2WriteUpdate(pScrn);*/
-    
-    OUTPLLP(pScrn, R128_P2PLL_CNTL, 0, ~(R128_P2PLL_RESET
-					| R128_P2PLL_SLEEP
-					| R128_P2PLL_ATOMIC_UPDATE_EN
-					| R128_P2PLL_VGA_ATOMIC_UPDATE_EN));
-
-    R128TRACE(("Wrote: 0x%08x 0x%08x 0x%08x (0x%08x)\n",
-	       restore->p2pll_ref_div,
-	       restore->p2pll_div_0,
-	       restore->htotal_cntl2,
-	       INPLL(pScrn, RADEON_P2PLL_CNTL)));
-    R128TRACE(("Wrote: rd=%d, fd=%d, pd=%d\n",
-	       restore->p2pll_ref_div & RADEON_P2PLL_REF_DIV_MASK,
-	       restore->p2pll_div_0 & RADEON_P2PLL_FB3_DIV_MASK,
-	       (restore->p2pll_div_0 & RADEON_P2PLL_POST3_DIV_MASK) >>16));
-
-    usleep(5000); /* Let the clock to lock */
-
-    OUTPLLP(pScrn, R128_V2CLK_VCLKTV_CNTL,
-	    R128_V2CLK_SRC_SEL_P2PLLCLK, 
-	    ~R128_V2CLK_SRC_SEL_MASK);
-
-}
-
-/* Write DDA registers. */
-static void R128RestoreDDARegisters(ScrnInfoPtr pScrn, R128SavePtr restore)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    OUTREG(R128_DDA_CONFIG, restore->dda_config);
-    OUTREG(R128_DDA_ON_OFF, restore->dda_on_off);
-}
-
-/* Write DDA registers. */
-static void R128RestoreDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr restore)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    OUTREG(R128_DDA2_CONFIG, restore->dda2_config);
-    OUTREG(R128_DDA2_ON_OFF, restore->dda2_on_off);
-}
-
-/* Write palette data. */
-static void R128RestorePalette(ScrnInfoPtr pScrn, R128SavePtr restore)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           i;
-
-    if (!restore->palette_valid) return;
-
-    PAL_SELECT(1);
-    OUTPAL_START(0);
-    for (i = 0; i < 256; i++) {
-	R128WaitForFifo(pScrn, 32); /* delay */
-	OUTPAL_NEXT_CARD32(restore->palette2[i]);
-    }
-
-    PAL_SELECT(0);
-    OUTPAL_START(0);
-    for (i = 0; i < 256; i++) {
-	R128WaitForFifo(pScrn, 32); /* delay */
-	OUTPAL_NEXT_CARD32(restore->palette[i]);
-    }
-
-}
-
-/* Write out state to define a new video mode.  */
-static void R128RestoreMode(ScrnInfoPtr pScrn, R128SavePtr restore)
-{
-    R128InfoPtr info = R128PTR(pScrn);
-    DevUnion* pPriv;
-    R128EntPtr pR128Ent;
-    static R128SaveRec restore0;
-
-    R128TRACE(("R128RestoreMode(%p)\n", restore));
-    if(!info->HasCRTC2)
-    {
-    	R128RestoreCommonRegisters(pScrn, restore);
-        R128RestoreDDARegisters(pScrn, restore);
-    	R128RestoreCrtcRegisters(pScrn, restore);
-        if((info->DisplayType == MT_DFP) || 
-           (info->DisplayType == MT_LCD))
-        {
-	    R128RestoreFPRegisters(pScrn, restore);
-        }
-        R128RestorePLLRegisters(pScrn, restore);
-        return;
-    }       
-    
-    pPriv = xf86GetEntityPrivate(pScrn->entityList[0], 
-                   getR128EntityIndex());
-    pR128Ent = pPriv->ptr;
-   
-
-    /*****
-      When changing mode with Dual-head card (VE/M6), care must
-      be taken for the special order in setting registers. CRTC2 has
-      to be set before changing CRTC_EXT register.
-      In the dual-head setup, X server calls this routine twice with
-      primary and secondary pScrn pointers respectively. The calls
-      can come with different order. Regardless the order of X server issuing 
-      the calls, we have to ensure we set registers in the right order!!! 
-      Otherwise we may get a blank screen.
-    *****/
-
-    if(info->IsSecondary)
-    {
-	if (!pR128Ent->RestorePrimary  && !info->SwitchingMode)
-	    R128RestoreCommonRegisters(pScrn, restore);
-        R128RestoreDDA2Registers(pScrn, restore);
-        R128RestoreCrtc2Registers(pScrn, restore);        
-        R128RestorePLL2Registers(pScrn, restore);
-        
-	if(info->SwitchingMode) return;
-
-        pR128Ent->IsSecondaryRestored = TRUE;
-
-        if(pR128Ent->RestorePrimary)
-        {
-            R128InfoPtr info0 = R128PTR(pR128Ent->pPrimaryScrn); 
-            pR128Ent->RestorePrimary = FALSE;
-
-            R128RestoreCrtcRegisters(pScrn, &restore0);
-            if((info0->DisplayType == MT_DFP) || 
-               (info0->DisplayType == MT_LCD))
-            {
-                R128RestoreFPRegisters(pScrn, &restore0);
-            }
-            
-            R128RestorePLLRegisters(pScrn, &restore0);   
-            pR128Ent->IsSecondaryRestored = FALSE;
-
-        }
-    }
-    else
-    {
-	if (!pR128Ent->IsSecondaryRestored)
-            R128RestoreCommonRegisters(pScrn, restore);
-        R128RestoreDDARegisters(pScrn, restore);
-        if(!pR128Ent->HasSecondary || pR128Ent->IsSecondaryRestored
-            || info->SwitchingMode)
-        {
-	    pR128Ent->IsSecondaryRestored = FALSE;
-            R128RestoreCrtcRegisters(pScrn, restore);
-            if((info->DisplayType == MT_DFP) || 
-               (info->DisplayType == MT_LCD))
-            {
-               R128RestoreFPRegisters(pScrn, restore);
-            }
-            R128RestorePLLRegisters(pScrn, restore);   
-        }
-        else
-        {
-            memcpy(&restore0, restore, sizeof(restore0));
-            pR128Ent->RestorePrimary = TRUE;
-        }
-    }
-
-    R128RestorePalette(pScrn, restore);
-}
-
-/* Read common registers. */
-static void R128SaveCommonRegisters(ScrnInfoPtr pScrn, R128SavePtr save)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    save->ovr_clr            = INREG(R128_OVR_CLR);
-    save->ovr_wid_left_right = INREG(R128_OVR_WID_LEFT_RIGHT);
-    save->ovr_wid_top_bottom = INREG(R128_OVR_WID_TOP_BOTTOM);
-    save->ov0_scale_cntl     = INREG(R128_OV0_SCALE_CNTL);
-    save->mpp_tb_config      = INREG(R128_MPP_TB_CONFIG);
-    save->mpp_gp_config      = INREG(R128_MPP_GP_CONFIG);
-    save->subpic_cntl        = INREG(R128_SUBPIC_CNTL);
-    save->viph_control       = INREG(R128_VIPH_CONTROL);
-    save->i2c_cntl_1         = INREG(R128_I2C_CNTL_1);
-    save->gen_int_cntl       = INREG(R128_GEN_INT_CNTL);
-    save->cap0_trig_cntl     = INREG(R128_CAP0_TRIG_CNTL);
-    save->cap1_trig_cntl     = INREG(R128_CAP1_TRIG_CNTL);
-    save->bus_cntl           = INREG(R128_BUS_CNTL);
-    save->config_cntl        = INREG(R128_CONFIG_CNTL);
-}
-
-/* Read CRTC registers. */
-static void R128SaveCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    save->crtc_gen_cntl        = INREG(R128_CRTC_GEN_CNTL);
-    save->crtc_ext_cntl        = INREG(R128_CRTC_EXT_CNTL);
-    save->dac_cntl             = INREG(R128_DAC_CNTL);
-    save->crtc_h_total_disp    = INREG(R128_CRTC_H_TOTAL_DISP);
-    save->crtc_h_sync_strt_wid = INREG(R128_CRTC_H_SYNC_STRT_WID);
-    save->crtc_v_total_disp    = INREG(R128_CRTC_V_TOTAL_DISP);
-    save->crtc_v_sync_strt_wid = INREG(R128_CRTC_V_SYNC_STRT_WID);
-    save->crtc_offset          = INREG(R128_CRTC_OFFSET);
-    save->crtc_offset_cntl     = INREG(R128_CRTC_OFFSET_CNTL);
-    save->crtc_pitch           = INREG(R128_CRTC_PITCH);
-}
-
-/* Read flat panel registers */
-static void R128SaveFPRegisters(ScrnInfoPtr pScrn, R128SavePtr save)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    if (info->BIOSDisplay != R128_DUALHEAD)
-        save->crtc2_gen_cntl       = INREG(R128_CRTC2_GEN_CNTL);
-    save->fp_crtc_h_total_disp = INREG(R128_FP_CRTC_H_TOTAL_DISP);
-    save->fp_crtc_v_total_disp = INREG(R128_FP_CRTC_V_TOTAL_DISP);
-    save->fp_gen_cntl          = INREG(R128_FP_GEN_CNTL);
-    save->fp_h_sync_strt_wid   = INREG(R128_FP_H_SYNC_STRT_WID);
-    save->fp_horz_stretch      = INREG(R128_FP_HORZ_STRETCH);
-    save->fp_panel_cntl        = INREG(R128_FP_PANEL_CNTL);
-    save->fp_v_sync_strt_wid   = INREG(R128_FP_V_SYNC_STRT_WID);
-    save->fp_vert_stretch      = INREG(R128_FP_VERT_STRETCH);
-    save->lvds_gen_cntl        = INREG(R128_LVDS_GEN_CNTL);
-    save->tmds_crc             = INREG(R128_TMDS_CRC);
-    save->tmds_transmitter_cntl = INREG(R128_TMDS_TRANSMITTER_CNTL);
-}
-
-/* Read CRTC2 registers. */
-static void R128SaveCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save)
-{
-    R128InfoPtr info        = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    save->crtc2_gen_cntl        = INREG(R128_CRTC2_GEN_CNTL);
-    save->crtc2_h_total_disp    = INREG(R128_CRTC2_H_TOTAL_DISP);
-    save->crtc2_h_sync_strt_wid = INREG(R128_CRTC2_H_SYNC_STRT_WID);
-    save->crtc2_v_total_disp    = INREG(R128_CRTC2_V_TOTAL_DISP);
-    save->crtc2_v_sync_strt_wid = INREG(R128_CRTC2_V_SYNC_STRT_WID);
-    save->crtc2_offset          = INREG(R128_CRTC2_OFFSET);
-    save->crtc2_offset_cntl     = INREG(R128_CRTC2_OFFSET_CNTL);
-    save->crtc2_pitch           = INREG(R128_CRTC2_PITCH);
-}
-
-/* Read PLL registers. */
-static void R128SavePLLRegisters(ScrnInfoPtr pScrn, R128SavePtr save)
-{
-    save->ppll_ref_div         = INPLL(pScrn, R128_PPLL_REF_DIV);
-    save->ppll_div_3           = INPLL(pScrn, R128_PPLL_DIV_3);
-    save->htotal_cntl          = INPLL(pScrn, R128_HTOTAL_CNTL);
-
-    R128TRACE(("Read: 0x%08x 0x%08x 0x%08x\n",
-	       save->ppll_ref_div,
-	       save->ppll_div_3,
-	       save->htotal_cntl));
-    R128TRACE(("Read: rd=%d, fd=%d, pd=%d\n",
-	       save->ppll_ref_div & R128_PPLL_REF_DIV_MASK,
-	       save->ppll_div_3 & R128_PPLL_FB3_DIV_MASK,
-	       (save->ppll_div_3 & R128_PPLL_POST3_DIV_MASK) >> 16));
-}
-
-/* Read PLL2 registers. */
-static void R128SavePLL2Registers(ScrnInfoPtr pScrn, R128SavePtr save)
-{
-    save->p2pll_ref_div        = INPLL(pScrn, R128_P2PLL_REF_DIV);
-    save->p2pll_div_0          = INPLL(pScrn, R128_P2PLL_DIV_0);
-    save->htotal_cntl2         = INPLL(pScrn, R128_HTOTAL2_CNTL);
-
-    R128TRACE(("Read: 0x%08x 0x%08x 0x%08x\n",
-	       save->p2pll_ref_div,
-	       save->p2pll_div_0,
-	       save->htotal_cntl2));
-    R128TRACE(("Read: rd=%d, fd=%d, pd=%d\n",
-	       save->p2pll_ref_div & R128_P2PLL_REF_DIV_MASK,
-	       save->p2pll_div_0 & R128_P2PLL_FB0_DIV_MASK,
-	       (save->p2pll_div_0 & R128_P2PLL_POST0_DIV_MASK) >> 16));
-}
-
-/* Read DDA registers. */
-static void R128SaveDDARegisters(ScrnInfoPtr pScrn, R128SavePtr save)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    save->dda_config           = INREG(R128_DDA_CONFIG);
-    save->dda_on_off           = INREG(R128_DDA_ON_OFF);
-}
-
-/* Read DDA2 registers. */
-static void R128SaveDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr save)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-
-    save->dda2_config           = INREG(R128_DDA2_CONFIG);
-    save->dda2_on_off           = INREG(R128_DDA2_ON_OFF);
-}
-
-/* Read palette data. */
-static void R128SavePalette(ScrnInfoPtr pScrn, R128SavePtr save)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           i;
-
-    PAL_SELECT(1);
-    INPAL_START(0);
-    for (i = 0; i < 256; i++) save->palette2[i] = INPAL_NEXT();
-    PAL_SELECT(0);
-    INPAL_START(0);
-    for (i = 0; i < 256; i++) save->palette[i] = INPAL_NEXT();
-    save->palette_valid = TRUE;
-}
-
-/* Save state that defines current video mode. */
-static void R128SaveMode(ScrnInfoPtr pScrn, R128SavePtr save)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-
-    R128TRACE(("R128SaveMode(%p)\n", save));
-
-    if(info->IsSecondary)
-    {
-        R128SaveCrtc2Registers(pScrn, save);
-        R128SavePLL2Registers(pScrn, save);
-        R128SaveDDA2Registers(pScrn, save);
-    }
-    else
-    {
-        R128SaveCommonRegisters(pScrn, save);
-        R128SaveCrtcRegisters(pScrn, save);
-        if((info->DisplayType == MT_DFP) || 
-           (info->DisplayType == MT_LCD))
-        {
- 	    R128SaveFPRegisters(pScrn, save);
-        }
-        R128SavePLLRegisters(pScrn, save);
-        R128SaveDDARegisters(pScrn, save);
-        R128SavePalette(pScrn, save);
-    }
-
-    R128TRACE(("R128SaveMode returns %p\n", save));
-}
-
-/* Save everything needed to restore the original VC state. */
-static void R128Save(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    R128SavePtr   save      = &info->SavedReg;
-
-    R128TRACE(("R128Save\n"));
-    if (info->FBDev) {
-	fbdevHWSave(pScrn);
-	return;
-    }
-
-    if (!info->IsSecondary) {
-#ifdef WITH_VGAHW
-        if (info->VGAAccess) {
-            vgaHWPtr hwp = VGAHWPTR(pScrn);
-
-            vgaHWUnlock(hwp);
-# if defined(__powerpc__)
-            /* temporary hack to prevent crashing on PowerMacs when trying to
-             * read VGA fonts and colormap, will find a better solution
-             * in the future. TODO: Check if there's actually some VGA stuff
-             * setup in the card at all !!
-             */
-            vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_MODE); /* Save mode only */
-# else
-            /* Save mode * & fonts & cmap */
-            vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_MODE | VGA_SR_FONTS);
-# endif
-            vgaHWLock(hwp);
-        }
-#endif
-
-        save->dp_datatype      = INREG(R128_DP_DATATYPE);
-        save->gen_reset_cntl   = INREG(R128_GEN_RESET_CNTL);
-        save->clock_cntl_index = INREG(R128_CLOCK_CNTL_INDEX);
-        save->amcgpio_en_reg   = INREG(R128_AMCGPIO_EN_REG);
-        save->amcgpio_mask     = INREG(R128_AMCGPIO_MASK);
-    }
-
-    R128SaveMode(pScrn, save);
-
-}
-
-/* Restore the original (text) mode. */
-static void R128Restore(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    R128SavePtr   restore   = &info->SavedReg;
-
-    R128TRACE(("R128Restore\n"));
-    if (info->FBDev) {
-	fbdevHWRestore(pScrn);
-	return;
-    }
-
-    R128Blank(pScrn);
-
-    if (!info->IsSecondary) {
-        OUTREG(R128_AMCGPIO_MASK,     restore->amcgpio_mask);
-        OUTREG(R128_AMCGPIO_EN_REG,   restore->amcgpio_en_reg);
-        OUTREG(R128_CLOCK_CNTL_INDEX, restore->clock_cntl_index);
-        OUTREG(R128_GEN_RESET_CNTL,   restore->gen_reset_cntl);
-        OUTREG(R128_DP_DATATYPE,      restore->dp_datatype);
-    }
-
-    R128RestoreMode(pScrn, restore);
-#ifdef WITH_VGAHW
-    if (info->VGAAccess) {
-        vgaHWPtr hwp = VGAHWPTR(pScrn);
-        if (!info->IsSecondary) {
-            vgaHWUnlock(hwp);
-# if defined(__powerpc__)
-            /* Temporary hack to prevent crashing on PowerMacs when trying to
-             * write VGA fonts, will find a better solution in the future
-             */
-            vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_MODE );
-# else
-            vgaHWRestore(pScrn, &hwp->SavedReg, VGA_SR_MODE | VGA_SR_FONTS );
-# endif
-            vgaHWLock(hwp);
-        } else {
-            R128EntPtr  pR128Ent = R128EntPriv(pScrn);
-            ScrnInfoPtr   pScrn0 = pR128Ent->pPrimaryScrn;
-            R128InfoPtr info0 = R128PTR(pScrn0);
-            vgaHWPtr      hwp0;
-
-            if (info0->VGAAccess) {
-                hwp0 = VGAHWPTR(pScrn0);
-                vgaHWUnlock(hwp0);
-#if defined(__powerpc__)
-                vgaHWRestore(pScrn0, &hwp0->SavedReg, VGA_SR_MODE);
-#else
-                vgaHWRestore(pScrn0, &hwp0->SavedReg, VGA_SR_MODE | VGA_SR_FONTS );
-#endif
-                vgaHWLock(hwp0);
-            }
-        }
-    }
-#endif
-
-    R128WaitForVerticalSync(pScrn);
-    R128Unblank(pScrn);
-}
-
-/* Define common registers for requested video mode. */
-static void R128InitCommonRegisters(R128SavePtr save, R128InfoPtr info)
-{
-    save->ovr_clr            = 0;
-    save->ovr_wid_left_right = 0;
-    save->ovr_wid_top_bottom = 0;
-    save->ov0_scale_cntl     = 0;
-    save->mpp_tb_config      = 0;
-    save->mpp_gp_config      = 0;
-    save->subpic_cntl        = 0;
-    save->viph_control       = 0;
-    save->i2c_cntl_1         = 0;
-#ifdef XF86DRI
-    save->gen_int_cntl       = info->gen_int_cntl;
-#else
-    save->gen_int_cntl       = 0;
-#endif
-    save->cap0_trig_cntl     = 0;
-    save->cap1_trig_cntl     = 0;
-    save->bus_cntl           = info->BusCntl;
-    /*
-     * If bursts are enabled, turn on discards and aborts
-     */
-    if (save->bus_cntl & (R128_BUS_WRT_BURST|R128_BUS_READ_BURST))
-	save->bus_cntl |= R128_BUS_RD_DISCARD_EN | R128_BUS_RD_ABORT_EN;
-}
-
-/* Define CRTC registers for requested video mode. */
-static Bool R128InitCrtcRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
-				  DisplayModePtr mode, R128InfoPtr info)
-{
-    int    format;
-    int    hsync_start;
-    int    hsync_wid;
-    int    hsync_fudge;
-    int    vsync_wid;
-    int    hsync_fudge_default[] = { 0x00, 0x12, 0x09, 0x09, 0x06, 0x05 };
-    int    hsync_fudge_fp[]      = { 0x12, 0x11, 0x09, 0x09, 0x05, 0x05 };
-//   int    hsync_fudge_fp_crt[]  = { 0x12, 0x10, 0x08, 0x08, 0x04, 0x04 };
-
-    switch (info->CurrentLayout.pixel_code) {
-    case 4:  format = 1; break;
-    case 8:  format = 2; break;
-    case 15: format = 3; break;      /*  555 */
-    case 16: format = 4; break;      /*  565 */
-    case 24: format = 5; break;      /*  RGB */
-    case 32: format = 6; break;      /* xRGB */
-    default:
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "Unsupported pixel depth (%d)\n",
-		   info->CurrentLayout.bitsPerPixel);
-	return FALSE;
-    }
-
-    if ((info->DisplayType == MT_DFP) || 
-        (info->DisplayType == MT_LCD))
-	hsync_fudge = hsync_fudge_fp[format-1];
-    else               
-        hsync_fudge = hsync_fudge_default[format-1];
-
-    save->crtc_gen_cntl = (R128_CRTC_EXT_DISP_EN
-			  | R128_CRTC_EN
-			  | (format << 8)
-			  | ((mode->Flags & V_DBLSCAN)
-			     ? R128_CRTC_DBL_SCAN_EN
-			     : 0)
-			  | ((mode->Flags & V_INTERLACE)
-			     ? R128_CRTC_INTERLACE_EN
-			     : 0)
-			  | ((mode->Flags & V_CSYNC)
-			     ? R128_CRTC_CSYNC_EN
-			     : 0));
-
-    if((info->DisplayType == MT_DFP) || 
-       (info->DisplayType == MT_LCD))
-    {
-        save->crtc_ext_cntl = R128_VGA_ATI_LINEAR | 
-        			  R128_XCRT_CNT_EN;
-        save->crtc_gen_cntl &= ~(R128_CRTC_DBL_SCAN_EN | 
-                                  R128_CRTC_INTERLACE_EN);
-    }
-    else
-        save->crtc_ext_cntl = R128_VGA_ATI_LINEAR | 
-			      R128_XCRT_CNT_EN |
-			      R128_CRTC_CRT_ON;
-
-    save->dac_cntl      = (R128_DAC_MASK_ALL
-			   | R128_DAC_VGA_ADR_EN
-			   | (info->dac6bits ? 0 : R128_DAC_8BIT_EN));
-
-
-    if(info->isDFP && !info->isPro2)
-    {
-        if(info->PanelXRes < mode->CrtcHDisplay)
-            mode->HDisplay = mode->CrtcHDisplay = info->PanelXRes;
-        if(info->PanelYRes < mode->CrtcVDisplay)
-            mode->VDisplay = mode->CrtcVDisplay = info->PanelYRes;
-        mode->CrtcHTotal = mode->CrtcHDisplay + info->HBlank;
-        mode->CrtcHSyncStart = mode->CrtcHDisplay + info->HOverPlus;
-        mode->CrtcHSyncEnd = mode->CrtcHSyncStart + info->HSyncWidth;
-        mode->CrtcVTotal = mode->CrtcVDisplay + info->VBlank;
-        mode->CrtcVSyncStart = mode->CrtcVDisplay + info->VOverPlus;
-        mode->CrtcVSyncEnd = mode->CrtcVSyncStart + info->VSyncWidth;
-    }
-
-    save->crtc_h_total_disp = ((((mode->CrtcHTotal / 8) - 1) & 0xffff)
-			      | (((mode->CrtcHDisplay / 8) - 1) << 16));
-
-    hsync_wid = (mode->CrtcHSyncEnd - mode->CrtcHSyncStart) / 8;
-    if (!hsync_wid)       hsync_wid = 1;
-    if (hsync_wid > 0x3f) hsync_wid = 0x3f;
-
-    hsync_start = mode->CrtcHSyncStart - 8 + hsync_fudge;
-
-    save->crtc_h_sync_strt_wid = ((hsync_start & 0xfff)
-				 | (hsync_wid << 16)
-				 | ((mode->Flags & V_NHSYNC)
-				    ? R128_CRTC_H_SYNC_POL
-				    : 0));
-
-#if 1
-				/* This works for double scan mode. */
-    save->crtc_v_total_disp = (((mode->CrtcVTotal - 1) & 0xffff)
-			      | ((mode->CrtcVDisplay - 1) << 16));
-#else
-				/* This is what cce/nbmode.c example code
-				   does -- is this correct? */
-    save->crtc_v_total_disp = (((mode->CrtcVTotal - 1) & 0xffff)
-			      | ((mode->CrtcVDisplay
-				  * ((mode->Flags & V_DBLSCAN) ? 2 : 1) - 1)
-				 << 16));
-#endif
-
-    vsync_wid = mode->CrtcVSyncEnd - mode->CrtcVSyncStart;
-    if (!vsync_wid)       vsync_wid = 1;
-    if (vsync_wid > 0x1f) vsync_wid = 0x1f;
-
-    save->crtc_v_sync_strt_wid = (((mode->CrtcVSyncStart - 1) & 0xfff)
-				 | (vsync_wid << 16)
-				 | ((mode->Flags & V_NVSYNC)
-				    ? R128_CRTC_V_SYNC_POL
-				    : 0));
-    save->crtc_offset      = 0;
-    save->crtc_offset_cntl = 0;
-    save->crtc_pitch       = info->CurrentLayout.displayWidth / 8;
-
-    R128TRACE(("Pitch = %d bytes (virtualX = %d, displayWidth = %d)\n",
-	       save->crtc_pitch, pScrn->virtualX, info->CurrentLayout.displayWidth));
-
-#if X_BYTE_ORDER == X_BIG_ENDIAN
-    /* Change the endianness of the aperture */
-    switch (info->CurrentLayout.pixel_code) {
-    case 15:
-    case 16: save->config_cntl |= APER_0_BIG_ENDIAN_16BPP_SWAP; break;
-    case 32: save->config_cntl |= APER_0_BIG_ENDIAN_32BPP_SWAP; break;
-    default: break;
-    }
-#endif
-
-    return TRUE;
-}
-
-/* Define CRTC2 registers for requested video mode. */
-static Bool R128InitCrtc2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
-				  DisplayModePtr mode, R128InfoPtr info)
-{
-    int    format;
-    int    hsync_start;
-    int    hsync_wid;
-    int    hsync_fudge;
-    int    vsync_wid;
-    int    bytpp;
-    int    hsync_fudge_default[] = { 0x00, 0x12, 0x09, 0x09, 0x06, 0x05 };
-
-    switch (info->CurrentLayout.pixel_code) {
-    case 4:  format = 1; bytpp = 0; break;
-    case 8:  format = 2; bytpp = 1; break;
-    case 15: format = 3; bytpp = 2; break;      /*  555 */
-    case 16: format = 4; bytpp = 2; break;      /*  565 */
-    case 24: format = 5; bytpp = 3; break;      /*  RGB */
-    case 32: format = 6; bytpp = 4; break;      /* xRGB */
-    default:
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "Unsupported pixel depth (%d)\n", info->CurrentLayout.bitsPerPixel);
-	return FALSE;
-    }
-    R128TRACE(("Format = %d (%d bytes per pixel)\n", format, bytpp));
-
-    hsync_fudge = hsync_fudge_default[format-1];
-
-    save->crtc2_gen_cntl = (R128_CRTC2_EN
-			  | (format << 8)
-			  | ((mode->Flags & V_DBLSCAN)
-			     ? R128_CRTC2_DBL_SCAN_EN
-			     : 0));
-/*
-    save->crtc2_gen_cntl &= ~R128_CRTC_EXT_DISP_EN;
-    save->crtc2_gen_cntl |= (1 << 21);
-*/
-    save->crtc2_h_total_disp = ((((mode->CrtcHTotal / 8) - 1) & 0xffff)
-			      | (((mode->CrtcHDisplay / 8) - 1) << 16));
-
-    hsync_wid = (mode->CrtcHSyncEnd - mode->CrtcHSyncStart) / 8;
-    if (!hsync_wid)       hsync_wid = 1;
-    if (hsync_wid > 0x3f) hsync_wid = 0x3f;
-
-    hsync_start = mode->CrtcHSyncStart - 8 + hsync_fudge;
-
-    save->crtc2_h_sync_strt_wid = ((hsync_start & 0xfff)
-				 | (hsync_wid << 16)
-				 | ((mode->Flags & V_NHSYNC)
-				    ? R128_CRTC2_H_SYNC_POL
-				    : 0));
-
-#if 1
-				/* This works for double scan mode. */
-    save->crtc2_v_total_disp = (((mode->CrtcVTotal - 1) & 0xffff)
-			      | ((mode->CrtcVDisplay - 1) << 16));
-#else
-				/* This is what cce/nbmode.c example code
-				   does -- is this correct? */
-    save->crtc2_v_total_disp = (((mode->CrtcVTotal - 1) & 0xffff)
-			      | ((mode->CrtcVDisplay
-				  * ((mode->Flags & V_DBLSCAN) ? 2 : 1) - 1)
-				 << 16));
-#endif
-
-    vsync_wid = mode->CrtcVSyncEnd - mode->CrtcVSyncStart;
-    if (!vsync_wid)       vsync_wid = 1;
-    if (vsync_wid > 0x1f) vsync_wid = 0x1f;
-
-    save->crtc2_v_sync_strt_wid = (((mode->CrtcVSyncStart - 1) & 0xfff)
-				 | (vsync_wid << 16)
-				 | ((mode->Flags & V_NVSYNC)
-				    ? R128_CRTC2_V_SYNC_POL
-				    : 0));
-
-    save->crtc2_offset      = 0;
-    save->crtc2_offset_cntl = 0;
-
-    save->crtc2_pitch       = info->CurrentLayout.displayWidth / 8;
-	
-    R128TRACE(("Pitch = %d bytes (virtualX = %d, displayWidth = %d)\n",
-		 save->crtc2_pitch, pScrn->virtualX,
-		 info->CurrentLayout.displayWidth));
-    return TRUE;
-}
-
-/* Define CRTC registers for requested video mode. */
-static void R128InitFPRegisters(R128SavePtr orig, R128SavePtr save,
-				DisplayModePtr mode, R128InfoPtr info)
-{
-    int   xres = mode->CrtcHDisplay;
-    int   yres = mode->CrtcVDisplay;
-    float Hratio, Vratio;
-
-    if (info->BIOSDisplay == R128_BIOS_DISPLAY_CRT) {
-        save->crtc_ext_cntl  |= R128_CRTC_CRT_ON;
-        save->crtc2_gen_cntl  = 0;
-        save->fp_gen_cntl     = orig->fp_gen_cntl;
-        save->fp_gen_cntl    &= ~(R128_FP_FPON |
-            R128_FP_CRTC_USE_SHADOW_VEND |
-            R128_FP_CRTC_HORZ_DIV2_EN |
-            R128_FP_CRTC_HOR_CRT_DIV2_DIS |
-            R128_FP_USE_SHADOW_EN);
-        save->fp_gen_cntl    |= (R128_FP_SEL_CRTC2 |
-                                 R128_FP_CRTC_DONT_SHADOW_VPAR);
-        save->fp_panel_cntl   = orig->fp_panel_cntl & (CARD32)~R128_FP_DIGON;
-        save->lvds_gen_cntl   = orig->lvds_gen_cntl &
-				    (CARD32)~(R128_LVDS_ON | R128_LVDS_BLON);
-        return;
-    }
-
-    if (xres > info->PanelXRes) xres = info->PanelXRes;
-    if (yres > info->PanelYRes) yres = info->PanelYRes;
-
-    Hratio = (float)xres/(float)info->PanelXRes;
-    Vratio = (float)yres/(float)info->PanelYRes;
-
-    save->fp_horz_stretch =
-	(((((int)(Hratio * R128_HORZ_STRETCH_RATIO_MAX + 0.5))
-	   & R128_HORZ_STRETCH_RATIO_MASK) << R128_HORZ_STRETCH_RATIO_SHIFT) |
-       (orig->fp_horz_stretch & (R128_HORZ_PANEL_SIZE |
-                                 R128_HORZ_FP_LOOP_STRETCH |
-                                 R128_HORZ_STRETCH_RESERVED)));
-    save->fp_horz_stretch &= ~R128_HORZ_AUTO_RATIO_FIX_EN;
-    save->fp_horz_stretch &= ~R128_AUTO_HORZ_RATIO;
-    if (xres == info->PanelXRes)
-         save->fp_horz_stretch &= ~(R128_HORZ_STRETCH_BLEND | R128_HORZ_STRETCH_ENABLE);
-    else
-         save->fp_horz_stretch |=  (R128_HORZ_STRETCH_BLEND | R128_HORZ_STRETCH_ENABLE);
-
-    save->fp_vert_stretch =
-	(((((int)(Vratio * R128_VERT_STRETCH_RATIO_MAX + 0.5))
-	   & R128_VERT_STRETCH_RATIO_MASK) << R128_VERT_STRETCH_RATIO_SHIFT) |
-	 (orig->fp_vert_stretch & (R128_VERT_PANEL_SIZE |
-				   R128_VERT_STRETCH_RESERVED)));
-    save->fp_vert_stretch &= ~R128_VERT_AUTO_RATIO_EN;
-    if (yres == info->PanelYRes)
-        save->fp_vert_stretch &= ~(R128_VERT_STRETCH_ENABLE | R128_VERT_STRETCH_BLEND);
-    else
-        save->fp_vert_stretch |=  (R128_VERT_STRETCH_ENABLE | R128_VERT_STRETCH_BLEND);
-
-    save->fp_gen_cntl = (orig->fp_gen_cntl &
-			 (CARD32)~(R128_FP_SEL_CRTC2 |
-				   R128_FP_CRTC_USE_SHADOW_VEND |
-				   R128_FP_CRTC_HORZ_DIV2_EN |
-				   R128_FP_CRTC_HOR_CRT_DIV2_DIS |
-				   R128_FP_USE_SHADOW_EN));
-
-    save->fp_panel_cntl        = orig->fp_panel_cntl;
-    save->lvds_gen_cntl        = orig->lvds_gen_cntl;
-    save->tmds_crc             = orig->tmds_crc;
-
-    /* Disable CRT output by disabling CRT output and setting the CRT
-       DAC to use CRTC2, which we set to 0's.  In the future, we will
-       want to use the dual CRTC capabilities of the R128 to allow both
-       the flat panel and external CRT to either simultaneously display
-       the same image or display two different images. */
-
-
-    if(!info->isDFP){
-        if (info->BIOSDisplay == R128_BIOS_DISPLAY_FP_CRT) {
-		save->crtc_ext_cntl  |= R128_CRTC_CRT_ON;
-	} else if (info->BIOSDisplay == R128_DUALHEAD) {
-		save->crtc_ext_cntl  |= R128_CRTC_CRT_ON;
-		save->dac_cntl       |= R128_DAC_CRT_SEL_CRTC2;
-		save->dac_cntl       |= R128_DAC_PALETTE2_SNOOP_EN;
-        } else {
-		save->crtc_ext_cntl  &= ~R128_CRTC_CRT_ON;
-		save->dac_cntl       |= R128_DAC_CRT_SEL_CRTC2;
-		save->crtc2_gen_cntl  = 0;
-        }
-    }
-
-    /* WARNING: Be careful about turning on the flat panel */
-    if(info->isDFP){
-        save->fp_gen_cntl = orig->fp_gen_cntl;
-
-        save->fp_gen_cntl &= ~(R128_FP_CRTC_USE_SHADOW_VEND |
-                               R128_FP_CRTC_USE_SHADOW_ROWCUR |
-                               R128_FP_CRTC_HORZ_DIV2_EN |
-                               R128_FP_CRTC_HOR_CRT_DIV2_DIS |
-                               R128_FP_CRT_SYNC_SEL |
-                               R128_FP_USE_SHADOW_EN);
-
-        save->fp_panel_cntl  |= (R128_FP_DIGON | R128_FP_BLON);
-        save->fp_gen_cntl    |= (R128_FP_FPON | R128_FP_TDMS_EN |
-             R128_FP_CRTC_DONT_SHADOW_VPAR | R128_FP_CRTC_DONT_SHADOW_HEND);
-        save->tmds_transmitter_cntl = (orig->tmds_transmitter_cntl
-            & ~(CARD32)R128_TMDS_PLLRST) | R128_TMDS_PLLEN;
-    }
-    else
-        save->lvds_gen_cntl  |= (R128_LVDS_ON | R128_LVDS_BLON);
-
-    save->fp_crtc_h_total_disp = save->crtc_h_total_disp;
-    save->fp_crtc_v_total_disp = save->crtc_v_total_disp;
-    save->fp_h_sync_strt_wid   = save->crtc_h_sync_strt_wid;
-    save->fp_v_sync_strt_wid   = save->crtc_v_sync_strt_wid;
-}
-
-/* Define PLL registers for requested video mode. */
-static void R128InitPLLRegisters(ScrnInfoPtr pScrn, R128SavePtr save,
-				R128PLLPtr pll, double dot_clock)
-{
-    unsigned long freq = dot_clock * 100;
-    struct {
-	int divider;
-	int bitvalue;
-    } *post_div,
-      post_divs[]   = {
-				/* From RAGE 128 VR/RAGE 128 GL Register
-				   Reference Manual (Technical Reference
-				   Manual P/N RRG-G04100-C Rev. 0.04), page
-				   3-17 (PLL_DIV_[3:0]).  */
-	{  1, 0 },              /* VCLK_SRC                 */
-	{  2, 1 },              /* VCLK_SRC/2               */
-	{  4, 2 },              /* VCLK_SRC/4               */
-	{  8, 3 },              /* VCLK_SRC/8               */
-
-	{  3, 4 },              /* VCLK_SRC/3               */
-				/* bitvalue = 5 is reserved */
-	{  6, 6 },              /* VCLK_SRC/6               */
-	{ 12, 7 },              /* VCLK_SRC/12              */
-	{  0, 0 }
-    };
-
-    if (freq > pll->max_pll_freq)      freq = pll->max_pll_freq;
-    if (freq * 12 < pll->min_pll_freq) freq = pll->min_pll_freq / 12;
-
-    for (post_div = &post_divs[0]; post_div->divider; ++post_div) {
-	save->pll_output_freq = post_div->divider * freq;
-	if (save->pll_output_freq >= pll->min_pll_freq
-	    && save->pll_output_freq <= pll->max_pll_freq) break;
-    }
-
-    save->dot_clock_freq = freq;
-    save->feedback_div   = R128Div(pll->reference_div * save->pll_output_freq,
-				   pll->reference_freq);
-    save->post_div       = post_div->divider;
-
-    R128TRACE(("dc=%d, of=%d, fd=%d, pd=%d\n",
-	       save->dot_clock_freq,
-	       save->pll_output_freq,
-	       save->feedback_div,
-	       save->post_div));
-
-    save->ppll_ref_div   = pll->reference_div;
-    save->ppll_div_3     = (save->feedback_div | (post_div->bitvalue << 16));
-    save->htotal_cntl    = 0;
-
-}
-
-/* Define PLL2 registers for requested video mode. */
-static void R128InitPLL2Registers(R128SavePtr save, R128PLLPtr pll,
-				   double dot_clock)
-{
-    unsigned long freq = dot_clock * 100;
-    struct {
-	int divider;
-	int bitvalue;
-    } *post_div,
-      post_divs[]   = {
-				/* From RAGE 128 VR/RAGE 128 GL Register
-				   Reference Manual (Technical Reference
-				   Manual P/N RRG-G04100-C Rev. 0.04), page
-				   3-17 (PLL_DIV_[3:0]).  */
-	{  1, 0 },              /* VCLK_SRC                 */
-	{  2, 1 },              /* VCLK_SRC/2               */
-	{  4, 2 },              /* VCLK_SRC/4               */
-	{  8, 3 },              /* VCLK_SRC/8               */
-
-	{  3, 4 },              /* VCLK_SRC/3               */
-				/* bitvalue = 5 is reserved */
-	{  6, 6 },              /* VCLK_SRC/6               */
-	{ 12, 7 },              /* VCLK_SRC/12              */
-	{  0, 0 }
-    };
-
-    if (freq > pll->max_pll_freq)      freq = pll->max_pll_freq;
-    if (freq * 12 < pll->min_pll_freq) freq = pll->min_pll_freq / 12;
-
-    for (post_div = &post_divs[0]; post_div->divider; ++post_div) {
-	save->pll_output_freq_2 = post_div->divider * freq;
-	if (save->pll_output_freq_2 >= pll->min_pll_freq
-	    && save->pll_output_freq_2 <= pll->max_pll_freq) break;
-    }
-
-    save->dot_clock_freq_2 = freq;
-    save->feedback_div_2   = R128Div(pll->reference_div
-				     * save->pll_output_freq_2,
-				     pll->reference_freq);
-    save->post_div_2       = post_div->divider;
-
-    R128TRACE(("dc=%d, of=%d, fd=%d, pd=%d\n",
-	       save->dot_clock_freq_2,
-	       save->pll_output_freq_2,
-	       save->feedback_div_2,
-	       save->post_div_2));
-
-    save->p2pll_ref_div   = pll->reference_div;
-    save->p2pll_div_0    = (save->feedback_div_2 | (post_div->bitvalue<<16));
-    save->htotal_cntl2    = 0;
-}
-
-/* Define DDA registers for requested video mode. */
-static Bool R128InitDDARegisters(ScrnInfoPtr pScrn, R128SavePtr save,
-				 R128PLLPtr pll, R128InfoPtr info,
-                                 DisplayModePtr mode)
-{
-    int         DisplayFifoWidth = 128;
-    int         DisplayFifoDepth = 32;
-    int         XclkFreq;
-    int         VclkFreq;
-    int         XclksPerTransfer;
-    int         XclksPerTransferPrecise;
-    int         UseablePrecision;
-    int         Roff;
-    int         Ron;
-
-    XclkFreq = pll->xclk;
-
-    VclkFreq = R128Div(pll->reference_freq * save->feedback_div,
-		       pll->reference_div * save->post_div);
-
-    if(info->isDFP && !info->isPro2){
-        if(info->PanelXRes != mode->CrtcHDisplay)
-            VclkFreq = (VclkFreq * mode->CrtcHDisplay)/info->PanelXRes;
-	}
-
-    XclksPerTransfer = R128Div(XclkFreq * DisplayFifoWidth,
-			       VclkFreq * (info->CurrentLayout.pixel_bytes * 8));
-
-    UseablePrecision = R128MinBits(XclksPerTransfer) + 1;
-
-    XclksPerTransferPrecise = R128Div((XclkFreq * DisplayFifoWidth)
-				      << (11 - UseablePrecision),
-				      VclkFreq * (info->CurrentLayout.pixel_bytes * 8));
-
-    Roff  = XclksPerTransferPrecise * (DisplayFifoDepth - 4);
-
-    Ron   = (4 * info->ram->MB
-	     + 3 * MAX(info->ram->Trcd - 2, 0)
-	     + 2 * info->ram->Trp
-	     + info->ram->Twr
-	     + info->ram->CL
-	     + info->ram->Tr2w
-	     + XclksPerTransfer) << (11 - UseablePrecision);
-
-    if (Ron + info->ram->Rloop >= Roff) {
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "(Ron = %d) + (Rloop = %d) >= (Roff = %d)\n",
-		   Ron, info->ram->Rloop, Roff);
-	return FALSE;
-    }
-
-    save->dda_config = (XclksPerTransferPrecise
-			| (UseablePrecision << 16)
-			| (info->ram->Rloop << 20));
-
-    save->dda_on_off = (Ron << 16) | Roff;
-
-    R128TRACE(("XclkFreq = %d; VclkFreq = %d; per = %d, %d (useable = %d)\n",
-	       XclkFreq,
-	       VclkFreq,
-	       XclksPerTransfer,
-	       XclksPerTransferPrecise,
-	       UseablePrecision));
-    R128TRACE(("Roff = %d, Ron = %d, Rloop = %d\n",
-	       Roff, Ron, info->ram->Rloop));
-
-    return TRUE;
-}
-
-/* Define DDA2 registers for requested video mode. */
-static Bool R128InitDDA2Registers(ScrnInfoPtr pScrn, R128SavePtr save,
-				 R128PLLPtr pll, R128InfoPtr info,
-                                 DisplayModePtr mode)
-{
-    int         DisplayFifoWidth = 128;
-    int         DisplayFifoDepth = 32;
-    int         XclkFreq;
-    int         VclkFreq;
-    int         XclksPerTransfer;
-    int         XclksPerTransferPrecise;
-    int         UseablePrecision;
-    int         Roff;
-    int         Ron;
-
-    XclkFreq = pll->xclk;
-
-    VclkFreq = R128Div(pll->reference_freq * save->feedback_div_2,
-		       pll->reference_div * save->post_div_2);
-
-    if(info->isDFP && !info->isPro2){
-        if(info->PanelXRes != mode->CrtcHDisplay)
-            VclkFreq = (VclkFreq * mode->CrtcHDisplay)/info->PanelXRes;
-	}
-
-    XclksPerTransfer = R128Div(XclkFreq * DisplayFifoWidth,
-			       VclkFreq * (info->CurrentLayout.pixel_bytes * 8));
-
-    UseablePrecision = R128MinBits(XclksPerTransfer) + 1;
-
-    XclksPerTransferPrecise = R128Div((XclkFreq * DisplayFifoWidth)
-				      << (11 - UseablePrecision),
-				      VclkFreq * (info->CurrentLayout.pixel_bytes * 8));
-
-    Roff  = XclksPerTransferPrecise * (DisplayFifoDepth - 4);
-
-    Ron   = (4 * info->ram->MB
-	     + 3 * MAX(info->ram->Trcd - 2, 0)
-	     + 2 * info->ram->Trp
-	     + info->ram->Twr
-	     + info->ram->CL
-	     + info->ram->Tr2w
-	     + XclksPerTransfer) << (11 - UseablePrecision);
-
-
-    if (Ron + info->ram->Rloop >= Roff) {
-	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-		   "(Ron = %d) + (Rloop = %d) >= (Roff = %d)\n",
-		   Ron, info->ram->Rloop, Roff);
-	return FALSE;
-    }
-
-    save->dda2_config = (XclksPerTransferPrecise
-			| (UseablePrecision << 16)
-			| (info->ram->Rloop << 20));
-
-    /*save->dda2_on_off = (Ron << 16) | Roff;*/
-    /* shift most be 18 otherwise there's corruption on crtc2 */
-    save->dda2_on_off = (Ron << 18) | Roff;
-
-    R128TRACE(("XclkFreq = %d; VclkFreq = %d; per = %d, %d (useable = %d)\n",
-	       XclkFreq,
-	       VclkFreq,
-	       XclksPerTransfer,
-	       XclksPerTransferPrecise,
-	       UseablePrecision));
-    R128TRACE(("Roff = %d, Ron = %d, Rloop = %d\n",
-	       Roff, Ron, info->ram->Rloop));
-
-    return TRUE;
-}
-
-#if 0
-/* Define initial palette for requested video mode.  This doesn't do
-   anything for XFree86 4.0. */
-static void R128InitPalette(R128SavePtr save)
-{
-    save->palette_valid = FALSE;
-}
-#endif
-
-/* Define registers for a requested video mode. */
-static Bool R128Init(ScrnInfoPtr pScrn, DisplayModePtr mode, R128SavePtr save)
-{
-    R128InfoPtr info      = R128PTR(pScrn);
-    double      dot_clock = mode->Clock/1000.0;
-
-#if R128_DEBUG
-    ErrorF("%-12.12s %7.2f  %4d %4d %4d %4d  %4d %4d %4d %4d (%d,%d)",
-	   mode->name,
-	   dot_clock,
-
-	   mode->HDisplay,
-	   mode->HSyncStart,
-	   mode->HSyncEnd,
-	   mode->HTotal,
-
-	   mode->VDisplay,
-	   mode->VSyncStart,
-	   mode->VSyncEnd,
-	   mode->VTotal,
-	   pScrn->depth,
-	   pScrn->bitsPerPixel);
-    if (mode->Flags & V_DBLSCAN)   ErrorF(" D");
-    if (mode->Flags & V_CSYNC)     ErrorF(" C");
-    if (mode->Flags & V_INTERLACE) ErrorF(" I");
-    if (mode->Flags & V_PHSYNC)    ErrorF(" +H");
-    if (mode->Flags & V_NHSYNC)    ErrorF(" -H");
-    if (mode->Flags & V_PVSYNC)    ErrorF(" +V");
-    if (mode->Flags & V_NVSYNC)    ErrorF(" -V");
-    ErrorF("\n");
-    ErrorF("%-12.12s %7.2f  %4d %4d %4d %4d  %4d %4d %4d %4d (%d,%d)",
-	   mode->name,
-	   dot_clock,
-
-	   mode->CrtcHDisplay,
-	   mode->CrtcHSyncStart,
-	   mode->CrtcHSyncEnd,
-	   mode->CrtcHTotal,
-
-	   mode->CrtcVDisplay,
-	   mode->CrtcVSyncStart,
-	   mode->CrtcVSyncEnd,
-	   mode->CrtcVTotal,
-	   pScrn->depth,
-	   pScrn->bitsPerPixel);
-    if (mode->Flags & V_DBLSCAN)   ErrorF(" D");
-    if (mode->Flags & V_CSYNC)     ErrorF(" C");
-    if (mode->Flags & V_INTERLACE) ErrorF(" I");
-    if (mode->Flags & V_PHSYNC)    ErrorF(" +H");
-    if (mode->Flags & V_NHSYNC)    ErrorF(" -H");
-    if (mode->Flags & V_PVSYNC)    ErrorF(" +V");
-    if (mode->Flags & V_NVSYNC)    ErrorF(" -V");
-    ErrorF("\n");
-#endif
-
-    info->Flags = mode->Flags;
-
-    if(info->IsSecondary)
-    {
-        if (!R128InitCrtc2Registers(pScrn, save, 
-             pScrn->currentMode,info)) 
-            return FALSE;
-        R128InitPLL2Registers(save, &info->pll, dot_clock);
-        if (!R128InitDDA2Registers(pScrn, save, &info->pll, info, mode))
-	    return FALSE;
-    }
-    else
-    {
-        R128InitCommonRegisters(save, info);
-        if(!R128InitCrtcRegisters(pScrn, save, mode, info)) 
-            return FALSE;
-        if(dot_clock) 
-        {
-            R128InitPLLRegisters(pScrn, save, &info->pll, dot_clock);
-            if (!R128InitDDARegisters(pScrn, save, &info->pll, info, mode))
-	        return FALSE;
-        }
-        else
-        {
-            save->ppll_ref_div         = info->SavedReg.ppll_ref_div;
-            save->ppll_div_3           = info->SavedReg.ppll_div_3;
-            save->htotal_cntl          = info->SavedReg.htotal_cntl;
-            save->dda_config           = info->SavedReg.dda_config;
-            save->dda_on_off           = info->SavedReg.dda_on_off;
-        }
-        /* not used for now */
-        /*if (!info->PaletteSavedOnVT) RADEONInitPalette(save);*/
-    }
-
-    if (((info->DisplayType == MT_DFP) || 
-        (info->DisplayType == MT_LCD)))
-    {
-        R128InitFPRegisters(&info->SavedReg, save, mode, info);
-    }
-
-    R128TRACE(("R128Init returns %p\n", save));
-    return TRUE;
-}
-
-/* Initialize a new mode. */
-static Bool R128ModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
-{
-    R128InfoPtr info      = R128PTR(pScrn);
-
-    if (!R128Init(pScrn, mode, &info->ModeReg)) return FALSE;
-				/* FIXME?  DRILock/DRIUnlock here? */
-    pScrn->vtSema = TRUE;
-    R128Blank(pScrn);
-    R128RestoreMode(pScrn, &info->ModeReg);
-    R128Unblank(pScrn);
-
-    info->CurrentLayout.mode = mode;
-
-    return TRUE;
-}
-
-static Bool R128SaveScreen(ScreenPtr pScreen, int mode)
-{
-    ScrnInfoPtr   pScrn = xf86Screens[pScreen->myNum];
-    Bool unblank;
-
-    unblank = xf86IsUnblank(mode);
-    if (unblank)
-	SetTimeSinceLastInputEvent();
-
-    if ((pScrn != NULL) && pScrn->vtSema) {
-	if (unblank)
-		R128Unblank(pScrn);
-	else
-		R128Blank(pScrn);
-    }
-    return TRUE;
-}
-
-/*
- * SwitchMode() doesn't work right on crtc2 on some laptops.
- * The workaround is to switch the mode, then switch to another VT, then
- * switch back. --AGD
- */
-Bool R128SwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
-{
-    ScrnInfoPtr   pScrn       = xf86Screens[scrnIndex];
-    R128InfoPtr info        = R128PTR(pScrn);
-    Bool ret;
-
-    info->SwitchingMode = TRUE;
-    ret = R128ModeInit(xf86Screens[scrnIndex], mode);
-    info->SwitchingMode = FALSE;
-    return ret;
-}
-
-/* Used to disallow modes that are not supported by the hardware. */
-ModeStatus R128ValidMode(int scrnIndex, DisplayModePtr mode,
-                                   Bool verbose, int flags)
-{
-    ScrnInfoPtr   pScrn = xf86Screens[scrnIndex];
-    R128InfoPtr   info  = R128PTR(pScrn);
-
-    if (info->BIOSDisplay == R128_BIOS_DISPLAY_CRT)
-	return MODE_OK;
-
-    if(info->isDFP) {
-        if(info->PanelXRes < mode->CrtcHDisplay ||
-           info->PanelYRes < mode->CrtcVDisplay)
-            return MODE_NOMODE;
-        else
-            return MODE_OK;
-    }
-
-    if (info->DisplayType == MT_LCD) {
-	if (mode->Flags & V_INTERLACE) return MODE_NO_INTERLACE;
-	if (mode->Flags & V_DBLSCAN)   return MODE_NO_DBLESCAN;
-    }
-
-    if (info->DisplayType == MT_LCD &&
-	info->VBIOS) {
-	int i;
-	for (i = info->FPBIOSstart+64; R128_BIOS16(i) != 0; i += 2) {
-	    int j = R128_BIOS16(i);
-
-	    if (mode->CrtcHDisplay == R128_BIOS16(j) &&
-		mode->CrtcVDisplay == R128_BIOS16(j+2)) {
-		if ((flags & MODECHECK_FINAL) == MODECHECK_FINAL) {
-		    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-			       "Modifying mode according to VBIOS: %ix%i [pclk %.1f MHz] for FP to: ",
-			       mode->CrtcHDisplay,mode->CrtcVDisplay,
-			       (float)mode->Clock/1000);
-
-		    /* Assume we are using expanded mode */
-		    if (R128_BIOS16(j+5)) j  = R128_BIOS16(j+5);
-		    else                  j += 9;
-
-		    mode->Clock = (CARD32)R128_BIOS16(j) * 10;
-
-		    mode->HDisplay   = mode->CrtcHDisplay   =
-			((R128_BIOS16(j+10) & 0x01ff)+1)*8;
-		    mode->HSyncStart = mode->CrtcHSyncStart =
-			((R128_BIOS16(j+12) & 0x01ff)+1)*8;
-		    mode->HSyncEnd   = mode->CrtcHSyncEnd   =
-			mode->CrtcHSyncStart + (R128_BIOS8(j+14) & 0x1f);
-		    mode->HTotal     = mode->CrtcHTotal     =
-			((R128_BIOS16(j+8)  & 0x01ff)+1)*8;
-
-		    mode->VDisplay   = mode->CrtcVDisplay   =
-			(R128_BIOS16(j+17) & 0x07ff)+1;
-		    mode->VSyncStart = mode->CrtcVSyncStart =
-			(R128_BIOS16(j+19) & 0x07ff)+1;
-		    mode->VSyncEnd   = mode->CrtcVSyncEnd   =
-			mode->CrtcVSyncStart + ((R128_BIOS16(j+19) >> 11) & 0x1f);
-		    mode->VTotal     = mode->CrtcVTotal     =
-			(R128_BIOS16(j+15) & 0x07ff)+1;
-		    xf86ErrorF("%ix%i [pclk %.1f MHz]\n",
-			       mode->CrtcHDisplay,mode->CrtcVDisplay,
-			       (float)mode->Clock/1000);
-		}
-		return MODE_OK;
-	    }
-	}
-	xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 5,
-		       "Mode rejected for FP %ix%i [pclk: %.1f] "
-		       "(not listed in VBIOS)\n",
-		       mode->CrtcHDisplay, mode->CrtcVDisplay,
-		       (float)mode->Clock / 1000);
-	return MODE_NOMODE;
-    }
-
-    return MODE_OK;
-}
-
-/* Adjust viewport into virtual desktop such that (0,0) in viewport space
-   is (x,y) in virtual space. */
-void R128AdjustFrame(int scrnIndex, int x, int y, int flags)
-{
-    ScrnInfoPtr   pScrn     = xf86Screens[scrnIndex];
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           Base;
-
-    if(info->showCache && y && pScrn->vtSema)
-        y += pScrn->virtualY - 1;
-
-    Base = y * info->CurrentLayout.displayWidth + x;
-
-    switch (info->CurrentLayout.pixel_code) {
-    case 15:
-    case 16: Base *= 2; break;
-    case 24: Base *= 3; break;
-    case 32: Base *= 4; break;
-    }
-
-    Base &= ~7;                 /* 3 lower bits are always 0 */
-
-    if (info->CurrentLayout.pixel_code == 24)
-	Base += 8 * (Base % 3); /* Must be multiple of 8 and 3 */
-
-    if(info->IsSecondary)    
-    {
-        Base += pScrn->fbOffset; 
-        OUTREG(R128_CRTC2_OFFSET, Base);
-    }
-    else
-    OUTREG(R128_CRTC_OFFSET, Base);
-
-}
-
-/* Called when VT switching back to the X server.  Reinitialize the video
-   mode. */
-Bool R128EnterVT(int scrnIndex, int flags)
-{
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-    R128InfoPtr info  = R128PTR(pScrn);
-
-    R128TRACE(("R128EnterVT\n"));
-    if (info->FBDev) {
-        if (!fbdevHWEnterVT(scrnIndex,flags)) return FALSE;
-    } else
-        if (!R128ModeInit(pScrn, pScrn->currentMode)) return FALSE;
-    if (info->accelOn)
-	R128EngineInit(pScrn);
-
-#ifdef XF86DRI
-    if (info->directRenderingEnabled) {
-	if (info->irq) {
-	    /* Need to make sure interrupts are enabled */
-	    unsigned char *R128MMIO = info->MMIO;
-	    OUTREG(R128_GEN_INT_CNTL, info->gen_int_cntl);
-	}
-	R128CCE_START(pScrn, info);
-	DRIUnlock(pScrn->pScreen);
-    }
-#endif
-
-    info->PaletteSavedOnVT = FALSE;
-    pScrn->AdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
-
-    return TRUE;
-}
-
-/* Called when VT switching away from the X server.  Restore the original
-   text mode. */
-void R128LeaveVT(int scrnIndex, int flags)
-{
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-    R128InfoPtr info  = R128PTR(pScrn);
-    R128SavePtr save  = &info->ModeReg;
-
-    R128TRACE(("R128LeaveVT\n"));
-#ifdef XF86DRI
-    if (info->directRenderingEnabled) {
-	DRILock(pScrn->pScreen, 0);
-	R128CCE_STOP(pScrn, info);
-    }
-#endif
-    R128SavePalette(pScrn, save);
-    info->PaletteSavedOnVT = TRUE;
-    if (info->FBDev)
-        fbdevHWLeaveVT(scrnIndex,flags);
-    else
-        R128Restore(pScrn);
-}
-
-
-/* Called at the end of each server generation.  Restore the original text
-   mode, unmap video memory, and unwrap and call the saved CloseScreen
-   function.  */
-static Bool R128CloseScreen(int scrnIndex, ScreenPtr pScreen)
-{
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-    R128InfoPtr info  = R128PTR(pScrn);
-
-    R128TRACE(("R128CloseScreen\n"));
-
-#ifdef XF86DRI
-				/* Disable direct rendering */
-    if (info->directRenderingEnabled) {
-	R128DRICloseScreen(pScreen);
-	info->directRenderingEnabled = FALSE;
-    }
-#endif
-
-    if (pScrn->vtSema) {
-	R128Restore(pScrn);
-	R128UnmapMem(pScrn);
-    }
-
-    if (info->accel)             XAADestroyInfoRec(info->accel);
-    info->accel                  = NULL;
-
-    if (info->scratch_save)      xfree(info->scratch_save);
-    info->scratch_save           = NULL;
-
-    if (info->cursor)            xf86DestroyCursorInfoRec(info->cursor);
-    info->cursor                 = NULL;
-
-    if (info->DGAModes)          xfree(info->DGAModes);
-    info->DGAModes               = NULL;
-
-    if (info->adaptor) {
-        xfree(info->adaptor->pPortPrivates[0].ptr);
-	xf86XVFreeVideoAdaptorRec(info->adaptor);
-	info->adaptor = NULL;
-    }
-
-    pScrn->vtSema = FALSE;
-
-    pScreen->BlockHandler = info->BlockHandler;
-    pScreen->CloseScreen = info->CloseScreen;
-    return (*pScreen->CloseScreen)(scrnIndex, pScreen);
-}
-
-void R128FreeScreen(int scrnIndex, int flags)
-{
-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
-    R128InfoPtr   info      = R128PTR(pScrn);
-
-    R128TRACE(("R128FreeScreen\n"));
-#ifdef WITH_VGAHW
-    if (info->VGAAccess && xf86LoaderCheckSymbol("vgaHWFreeHWRec"))
-	vgaHWFreeHWRec(pScrn);
-#endif
-    R128FreeRec(pScrn);
-}
-
-/* Sets VESA Display Power Management Signaling (DPMS) Mode.  */
-static void R128DisplayPowerManagementSet(ScrnInfoPtr pScrn,
-					  int PowerManagementMode, int flags)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           mask      = (R128_CRTC_DISPLAY_DIS
-			       | R128_CRTC_HSYNC_DIS
-			       | R128_CRTC_VSYNC_DIS);
-    int             mask2     = R128_CRTC2_DISP_DIS;
-
-    switch (PowerManagementMode) {
-    case DPMSModeOn:
-	/* Screen: On; HSync: On, VSync: On */
-	if (info->IsSecondary)
-		OUTREGP(R128_CRTC2_GEN_CNTL, 0, ~mask2);
-	else
-		OUTREGP(R128_CRTC_EXT_CNTL, 0, ~mask);
-	break;
-    case DPMSModeStandby:
-	/* Screen: Off; HSync: Off, VSync: On */
-	if (info->IsSecondary)
-		OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_DISP_DIS, ~mask2);
-	    else
-		OUTREGP(R128_CRTC_EXT_CNTL,
-			R128_CRTC_DISPLAY_DIS | R128_CRTC_HSYNC_DIS, ~mask);
-	break;
-    case DPMSModeSuspend:
-	/* Screen: Off; HSync: On, VSync: Off */
-	if (info->IsSecondary)
-		OUTREGP(R128_CRTC2_GEN_CNTL, R128_CRTC2_DISP_DIS, ~mask2);
-	else 
-		OUTREGP(R128_CRTC_EXT_CNTL,
-			R128_CRTC_DISPLAY_DIS | R128_CRTC_VSYNC_DIS, ~mask);
-	break;
-    case DPMSModeOff:
-	/* Screen: Off; HSync: Off, VSync: Off */
-	if (info->IsSecondary)
-		OUTREGP(R128_CRTC2_GEN_CNTL, mask2, ~mask2);
-	else
-		OUTREGP(R128_CRTC_EXT_CNTL, mask, ~mask);
-	break;
-    }
-    if(info->isDFP) {
-	switch (PowerManagementMode) {
-	case DPMSModeOn:
-	    OUTREG(R128_FP_GEN_CNTL, INREG(R128_FP_GEN_CNTL) | (R128_FP_FPON | R128_FP_TDMS_EN));
-	    break;
-	case DPMSModeStandby:
-	case DPMSModeSuspend:
-	case DPMSModeOff:
-	    OUTREG(R128_FP_GEN_CNTL, INREG(R128_FP_GEN_CNTL) & ~(R128_FP_FPON | R128_FP_TDMS_EN));
-	    break;
-	}
-    }
-}
-
-static int r128_set_backlight_enable(ScrnInfoPtr pScrn, int on);
-
-static void R128DisplayPowerManagementSetLCD(ScrnInfoPtr pScrn,
-					  int PowerManagementMode, int flags)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    int           mask      = R128_LVDS_DISPLAY_DIS;
-
-    switch (PowerManagementMode) {
-    case DPMSModeOn:
-	/* Screen: On; HSync: On, VSync: On */
-	OUTREGP(R128_LVDS_GEN_CNTL, 0, ~mask);
-        r128_set_backlight_enable(pScrn, 1);
-	break;
-    case DPMSModeStandby:
-	/* Fall through */
-    case DPMSModeSuspend:
-	/* Fall through */
-	break;
-    case DPMSModeOff:
-	/* Screen: Off; HSync: Off, VSync: Off */
-	OUTREGP(R128_LVDS_GEN_CNTL, mask, ~mask);
-        r128_set_backlight_enable(pScrn, 0);
-	break;
-    }
-}
-
-static int r128_set_backlight_enable(ScrnInfoPtr pScrn, int on)
-{
-        R128InfoPtr info        = R128PTR(pScrn);
-        unsigned char *R128MMIO = info->MMIO;
-	unsigned int lvds_gen_cntl = INREG(R128_LVDS_GEN_CNTL);
-
-	lvds_gen_cntl |= (/*R128_LVDS_BL_MOD_EN |*/ R128_LVDS_BLON);
-	if (on) {
-		lvds_gen_cntl |= R128_LVDS_DIGON;
-		if (!(lvds_gen_cntl & R128_LVDS_ON)) {
-			lvds_gen_cntl &= ~R128_LVDS_BLON;
-			OUTREG(R128_LVDS_GEN_CNTL, lvds_gen_cntl);
-			(void)INREG(R128_LVDS_GEN_CNTL);
-			usleep(10000);
-			lvds_gen_cntl |= R128_LVDS_BLON;
-			OUTREG(R128_LVDS_GEN_CNTL, lvds_gen_cntl);
-		}
-#if 0
-		lvds_gen_cntl &= ~R128_LVDS_BL_MOD_LEVEL_MASK;
-		lvds_gen_cntl |= (0xFF /* backlight_conv[level] */ <<
-				  R128_LVDS_BL_MOD_LEVEL_SHIFT);
-#endif
-		lvds_gen_cntl |= (R128_LVDS_ON | R128_LVDS_EN);
-		lvds_gen_cntl &= ~R128_LVDS_DISPLAY_DIS;
-	} else {
-#if 0
-		lvds_gen_cntl &= ~R128_LVDS_BL_MOD_LEVEL_MASK;
-		lvds_gen_cntl |= (0xFF /* backlight_conv[0] */ <<
-				  R128_LVDS_BL_MOD_LEVEL_SHIFT);
-#endif
-		lvds_gen_cntl |= R128_LVDS_DISPLAY_DIS;
-		OUTREG(R128_LVDS_GEN_CNTL, lvds_gen_cntl);
-		usleep(10);
-		lvds_gen_cntl &= ~(R128_LVDS_ON | R128_LVDS_EN | R128_LVDS_BLON
-				   | R128_LVDS_DIGON);
-	}
-
-	OUTREG(R128_LVDS_GEN_CNTL, lvds_gen_cntl);
-
-	return 0;
-}
diff --git a/src/r128_misc.c b/src/r128_misc.c
deleted file mode 100644
index 2dc6040..0000000
--- a/src/r128_misc.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "r128_probe.h"
-#include "r128_version.h"
-
-#include "xf86.h"
-
-/* Module loader interface for subsidiary driver module */
-
-static XF86ModuleVersionInfo R128VersionRec =
-{
-    R128_DRIVER_NAME,
-    MODULEVENDORSTRING,
-    MODINFOSTRING1,
-    MODINFOSTRING2,
-    XORG_VERSION_CURRENT,
-    R128_VERSION_MAJOR, R128_VERSION_MINOR, R128_VERSION_PATCH,
-    ABI_CLASS_VIDEODRV,
-    ABI_VIDEODRV_VERSION,
-    MOD_CLASS_VIDEODRV,
-    {0, 0, 0, 0}
-};
-
-/*
- * R128Setup --
- *
- * This function is called every time the module is loaded.
- */
-static pointer
-R128Setup
-(
-    pointer Module,
-    pointer Options,
-    int     *ErrorMajor,
-    int     *ErrorMinor
-)
-{
-    static Bool Inited = FALSE;
-
-    if (!Inited)
-    {
-        Inited = TRUE;
-        xf86AddDriver(&R128, Module, HaveDriverFuncs);
-    }
-
-    return (pointer)TRUE;
-}
-
-/* The following record must be called r128ModuleData */
-_X_EXPORT XF86ModuleData r128ModuleData =
-{
-    &R128VersionRec,
-    R128Setup,
-    NULL
-};
diff --git a/src/r128_probe.c b/src/r128_probe.c
deleted file mode 100644
index b1f427a..0000000
--- a/src/r128_probe.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-/*
- * Authors:
- *   Rickard E. Faith <faith at valinux.com>
- *   Kevin E. Martin <martin at valinux.com>
- */
-
-#include "r128_probe.h"
-#include "r128_version.h"
-#include "atipcirename.h"
-
-#include "xf86.h"
-#include "xf86PciInfo.h"
-#include "xf86Resources.h"
-
-#ifndef XSERVER_LIBPCIACCESS
-static Bool R128Probe(DriverPtr drv, int flags);
-#endif
-
-SymTabRec R128Chipsets[] = {
-    { PCI_CHIP_RAGE128LE, "ATI Rage 128 Mobility M3 LE (PCI)" },
-    { PCI_CHIP_RAGE128LF, "ATI Rage 128 Mobility M3 LF (AGP)" },
-    { PCI_CHIP_RAGE128MF, "ATI Rage 128 Mobility M4 MF (AGP)" },
-    { PCI_CHIP_RAGE128ML, "ATI Rage 128 Mobility M4 ML (AGP)" },
-    { PCI_CHIP_RAGE128PA, "ATI Rage 128 Pro GL PA (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PB, "ATI Rage 128 Pro GL PB (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PC, "ATI Rage 128 Pro GL PC (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PD, "ATI Rage 128 Pro GL PD (PCI)" },
-    { PCI_CHIP_RAGE128PE, "ATI Rage 128 Pro GL PE (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PF, "ATI Rage 128 Pro GL PF (AGP)" },
-    { PCI_CHIP_RAGE128PG, "ATI Rage 128 Pro VR PG (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PH, "ATI Rage 128 Pro VR PH (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PI, "ATI Rage 128 Pro VR PI (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PJ, "ATI Rage 128 Pro VR PJ (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PK, "ATI Rage 128 Pro VR PK (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PL, "ATI Rage 128 Pro VR PL (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PM, "ATI Rage 128 Pro VR PM (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PN, "ATI Rage 128 Pro VR PN (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PO, "ATI Rage 128 Pro VR PO (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PP, "ATI Rage 128 Pro VR PP (PCI)" },
-    { PCI_CHIP_RAGE128PQ, "ATI Rage 128 Pro VR PQ (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PR, "ATI Rage 128 Pro VR PR (PCI)" },
-    { PCI_CHIP_RAGE128PS, "ATI Rage 128 Pro VR PS (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PT, "ATI Rage 128 Pro VR PT (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PU, "ATI Rage 128 Pro VR PU (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PV, "ATI Rage 128 Pro VR PV (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PW, "ATI Rage 128 Pro VR PW (PCI/AGP)" },
-    { PCI_CHIP_RAGE128PX, "ATI Rage 128 Pro VR PX (PCI/AGP)" },
-    { PCI_CHIP_RAGE128RE, "ATI Rage 128 GL RE (PCI)" },
-    { PCI_CHIP_RAGE128RF, "ATI Rage 128 GL RF (AGP)" },
-    { PCI_CHIP_RAGE128RG, "ATI Rage 128 RG (AGP)" },
-    { PCI_CHIP_RAGE128RK, "ATI Rage 128 VR RK (PCI)" },
-    { PCI_CHIP_RAGE128RL, "ATI Rage 128 VR RL (AGP)" },
-    { PCI_CHIP_RAGE128SE, "ATI Rage 128 4X SE (PCI/AGP)" },
-    { PCI_CHIP_RAGE128SF, "ATI Rage 128 4X SF (PCI/AGP)" },
-    { PCI_CHIP_RAGE128SG, "ATI Rage 128 4X SG (PCI/AGP)" },
-    { PCI_CHIP_RAGE128SH, "ATI Rage 128 4X SH (PCI/AGP)" },
-    { PCI_CHIP_RAGE128SK, "ATI Rage 128 4X SK (PCI/AGP)" },
-    { PCI_CHIP_RAGE128SL, "ATI Rage 128 4X SL (PCI/AGP)" },
-    { PCI_CHIP_RAGE128SM, "ATI Rage 128 4X SM (AGP)" },
-    { PCI_CHIP_RAGE128SN, "ATI Rage 128 4X SN (PCI/AGP)" },
-    { PCI_CHIP_RAGE128TF, "ATI Rage 128 Pro ULTRA TF (AGP)" },
-    { PCI_CHIP_RAGE128TL, "ATI Rage 128 Pro ULTRA TL (AGP)" },
-    { PCI_CHIP_RAGE128TR, "ATI Rage 128 Pro ULTRA TR (AGP)" },
-    { PCI_CHIP_RAGE128TS, "ATI Rage 128 Pro ULTRA TS (AGP?)" },
-    { PCI_CHIP_RAGE128TT, "ATI Rage 128 Pro ULTRA TT (AGP?)" },
-    { PCI_CHIP_RAGE128TU, "ATI Rage 128 Pro ULTRA TU (AGP?)" },
-    { -1,                 NULL }
-};
-
-static PciChipsets R128PciChipsets[] = {
-    { PCI_CHIP_RAGE128LE, PCI_CHIP_RAGE128LE, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128LF, PCI_CHIP_RAGE128LF, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128MF, PCI_CHIP_RAGE128MF, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128ML, PCI_CHIP_RAGE128ML, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PA, PCI_CHIP_RAGE128PA, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PB, PCI_CHIP_RAGE128PB, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PC, PCI_CHIP_RAGE128PC, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PD, PCI_CHIP_RAGE128PD, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PE, PCI_CHIP_RAGE128PE, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PF, PCI_CHIP_RAGE128PF, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PG, PCI_CHIP_RAGE128PG, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PH, PCI_CHIP_RAGE128PH, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PI, PCI_CHIP_RAGE128PI, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PJ, PCI_CHIP_RAGE128PJ, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PK, PCI_CHIP_RAGE128PK, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PL, PCI_CHIP_RAGE128PL, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PM, PCI_CHIP_RAGE128PM, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PN, PCI_CHIP_RAGE128PN, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PO, PCI_CHIP_RAGE128PO, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PP, PCI_CHIP_RAGE128PP, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PQ, PCI_CHIP_RAGE128PQ, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PR, PCI_CHIP_RAGE128PR, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PS, PCI_CHIP_RAGE128PS, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PT, PCI_CHIP_RAGE128PT, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PU, PCI_CHIP_RAGE128PU, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PV, PCI_CHIP_RAGE128PV, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PW, PCI_CHIP_RAGE128PW, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128PX, PCI_CHIP_RAGE128PX, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128RE, PCI_CHIP_RAGE128RE, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128RF, PCI_CHIP_RAGE128RF, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128RG, PCI_CHIP_RAGE128RG, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128RK, PCI_CHIP_RAGE128RK, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128RL, PCI_CHIP_RAGE128RL, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128SE, PCI_CHIP_RAGE128SE, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128SF, PCI_CHIP_RAGE128SF, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128SG, PCI_CHIP_RAGE128SG, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128SH, PCI_CHIP_RAGE128SH, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128SK, PCI_CHIP_RAGE128SK, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128SL, PCI_CHIP_RAGE128SL, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128SM, PCI_CHIP_RAGE128SM, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128SN, PCI_CHIP_RAGE128SN, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128TF, PCI_CHIP_RAGE128TF, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128TL, PCI_CHIP_RAGE128TL, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128TR, PCI_CHIP_RAGE128TR, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128TS, PCI_CHIP_RAGE128TS, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128TT, PCI_CHIP_RAGE128TT, RES_SHARED_VGA },
-    { PCI_CHIP_RAGE128TU, PCI_CHIP_RAGE128TU, RES_SHARED_VGA },
-    { -1,                 -1,                 RES_UNDEFINED }
-};
-
-#ifdef XSERVER_LIBPCIACCESS
-
-static const struct pci_id_match r128_device_match[] = {
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128LE, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128LF, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128MF, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128ML, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PA, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PB, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PC, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PD, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PE, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PF, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PG, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PH, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PI, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PJ, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PK, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PL, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PM, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PN, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PO, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PP, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PQ, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PR, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PS, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PT, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PU, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PV, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PW, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128PX, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128RE, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128RF, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128RG, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128RK, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128RL, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128SE, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128SF, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128SG, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128SH, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128SK, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128SL, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128SM, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128SN, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128TF, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128TL, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128TR, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128TS, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128TT, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_RAGE128TU, 0 ),
-    { 0, 0, 0 }
-};
-
-#endif /* XSERVER_LIBPCIACCESS */
-
-int gR128EntityIndex = -1;
-
-/* Return the options for supported chipset 'n'; NULL otherwise */
-static const OptionInfoRec *
-R128AvailableOptions(int chipid, int busid)
-{
-    return R128OptionsWeak();
-}
-
-/* Return the string name for supported chipset 'n'; NULL otherwise. */
-static void
-R128Identify(int flags)
-{
-    xf86PrintChipsets(R128_NAME,
-		      "Driver for ATI Rage 128 chipsets",
-		      R128Chipsets);
-}
-
-static Bool
-r128_get_scrninfo(int entity_num)
-{
-    ScrnInfoPtr   pScrn = NULL;
-    EntityInfoPtr pEnt;
-
-    pScrn = xf86ConfigPciEntity(pScrn, 0, entity_num, R128PciChipsets,
-                                NULL,
-                                NULL, NULL, NULL, NULL);
-
-    if (!pScrn)
-        return FALSE;
-
-    pScrn->driverVersion = R128_VERSION_CURRENT;
-    pScrn->driverName    = R128_DRIVER_NAME;
-    pScrn->name          = R128_NAME;
-#ifdef XSERVER_LIBPCIACCESS
-    pScrn->Probe         = NULL;
-#else
-    pScrn->Probe         = R128Probe;
-#endif
-    pScrn->PreInit       = R128PreInit;
-    pScrn->ScreenInit    = R128ScreenInit;
-    pScrn->SwitchMode    = R128SwitchMode;
-    pScrn->AdjustFrame   = R128AdjustFrame;
-    pScrn->EnterVT       = R128EnterVT;
-    pScrn->LeaveVT       = R128LeaveVT;
-    pScrn->FreeScreen    = R128FreeScreen;
-    pScrn->ValidMode     = R128ValidMode;
-
-    pEnt = xf86GetEntityInfo(entity_num);
-
-    /* mobility cards support Dual-Head, mark the entity as sharable*/
-    if (pEnt->chipset == PCI_CHIP_RAGE128LE ||
-        pEnt->chipset == PCI_CHIP_RAGE128LF ||
-        pEnt->chipset == PCI_CHIP_RAGE128MF ||
-        pEnt->chipset == PCI_CHIP_RAGE128ML)
-    {
-        static int instance = 0;
-        DevUnion* pPriv;
-
-        xf86SetEntitySharable(entity_num);
-
-        xf86SetEntityInstanceForScreen(pScrn,
-                                       pScrn->entityList[0],
-                                       instance);
-
-        if (gR128EntityIndex < 0)
-        {
-            gR128EntityIndex = xf86AllocateEntityPrivateIndex();
-
-            pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
-                                         gR128EntityIndex);
-
-            if (!pPriv->ptr)
-            {
-                R128EntPtr pR128Ent;
-                pPriv->ptr = xnfcalloc(sizeof(R128EntRec), 1);
-                pR128Ent = pPriv->ptr;
-                pR128Ent->IsDRIEnabled = FALSE;
-                pR128Ent->BypassSecondary = FALSE;
-                pR128Ent->HasSecondary = FALSE;
-                pR128Ent->IsSecondaryRestored = FALSE;
-            }
-        }
-        instance++;
-    }
-
-    xfree(pEnt);
-
-    return TRUE;
-}
-
-#ifndef XSERVER_LIBPCIACCESS
-
-/* Return TRUE if chipset is present; FALSE otherwise. */
-static Bool
-R128Probe(DriverPtr drv, int flags)
-{
-    int           numUsed;
-    int           numDevSections;
-    int           *usedChips;
-    GDevPtr       *devSections;
-    Bool          foundScreen = FALSE;
-    int           i;
-
-    if (!xf86GetPciVideoInfo()) return FALSE;
-
-    numDevSections = xf86MatchDevice(R128_NAME, &devSections);
-
-    if (!numDevSections) return FALSE;
-
-    numUsed = xf86MatchPciInstances(R128_NAME,
-				    PCI_VENDOR_ATI,
-				    R128Chipsets,
-				    R128PciChipsets,
-				    devSections,
-				    numDevSections,
-				    drv,
-				    &usedChips);
-
-    if (numUsed<=0) return FALSE;
-
-    if (flags & PROBE_DETECT)
-	foundScreen = TRUE;
-    else for (i = 0; i < numUsed; i++) {
-	if (r128_get_scrninfo(usedChips[i]))
-	    foundScreen = TRUE;
-    }
-
-    xfree(usedChips);
-    xfree(devSections);
-
-    return foundScreen;
-}
-
-#else /* XSERVER_LIBPCIACCESS */
-
-static Bool
-r128_pci_probe(
-    DriverPtr          pDriver,
-    int                entity_num,
-    struct pci_device *device,
-    intptr_t           match_data
-)
-{
-    return r128_get_scrninfo(entity_num);
-}
-
-#endif /* XSERVER_LIBPCIACCESS */
-
-_X_EXPORT DriverRec R128 =
-{
-    R128_VERSION_CURRENT,
-    R128_DRIVER_NAME,
-    R128Identify,
-#ifdef XSERVER_LIBPCIACCESS
-    NULL,
-#else
-    R128Probe,
-#endif
-    R128AvailableOptions,
-    NULL,
-    0,
-    NULL,
-#ifdef XSERVER_LIBPCIACCESS
-    r128_device_match,
-    r128_pci_probe
-#endif
-};
diff --git a/src/r128_probe.h b/src/r128_probe.h
deleted file mode 100644
index 59c9a00..0000000
--- a/src/r128_probe.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and
- *                VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, VA LINUX SYSTEMS AND/OR
- * THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Kevin E. Martin <martin at valinux.com>
- *
- * Modified by Marc Aurele La France <tsi at xfree86.org> for ATI driver merge.
- */
-
-#ifndef _R128_PROBE_H_
-#define _R128_PROBE_H_ 1
-
-#include "xf86str.h"
-
-extern DriverRec R128;
-
-typedef struct
-{
-    Bool IsDRIEnabled;
-
-    Bool HasSecondary;
-    Bool BypassSecondary;
-    /*These two registers are used to make sure the CRTC2 is
-      retored before CRTC_EXT, otherwise it could lead to blank screen.*/
-    Bool IsSecondaryRestored;
-    Bool RestorePrimary;
-
-    ScrnInfoPtr pSecondaryScrn;    
-    ScrnInfoPtr pPrimaryScrn;
-} R128EntRec, *R128EntPtr;
-
-/* r128_probe.c */
-extern SymTabRec             R128Chipsets[];
-
-/* r128_driver.c */
-extern Bool                  R128PreInit(ScrnInfoPtr, int);
-extern Bool                  R128ScreenInit(int, ScreenPtr, int, char **);
-extern Bool                  R128SwitchMode(int, DisplayModePtr, int);
-extern void                  R128AdjustFrame(int, int, int, int);
-extern Bool                  R128EnterVT(int, int);
-extern void                  R128LeaveVT(int, int);
-extern void                  R128FreeScreen(int, int);
-extern ModeStatus            R128ValidMode(int, DisplayModePtr, Bool, int);
-
-extern const OptionInfoRec * R128OptionsWeak(void);
-
-#endif /* _R128_PROBE_H_ */
diff --git a/src/r128_reg.h b/src/r128_reg.h
deleted file mode 100644
index dac22e6..0000000
--- a/src/r128_reg.h
+++ /dev/null
@@ -1,1533 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Rickard E. Faith <faith at valinux.com>
- *   Kevin E. Martin <martin at valinux.com>
- *   Gareth Hughes <gareth at valinux.com>
- *
- * References:
- *
- *   RAGE 128 VR/ RAGE 128 GL Register Reference Manual (Technical
- *   Reference Manual P/N RRG-G04100-C Rev. 0.04), ATI Technologies: April
- *   1999.
- *
- *   RAGE 128 Software Development Manual (Technical Reference Manual P/N
- *   SDK-G04000 Rev. 0.01), ATI Technologies: June 1999.
- *
- */
-
-#ifndef _R128_REG_H_
-#define _R128_REG_H_
-
-#include "compiler.h"
-
-				/* Memory mapped register access macros */
-#define INREG8(addr)        MMIO_IN8(R128MMIO, addr)
-#define INREG16(addr)       MMIO_IN16(R128MMIO, addr)
-#define INREG(addr)         MMIO_IN32(R128MMIO, addr)
-#define OUTREG8(addr, val)  MMIO_OUT8(R128MMIO, addr, val)
-#define OUTREG16(addr, val) MMIO_OUT16(R128MMIO, addr, val)
-#define OUTREG(addr, val)   MMIO_OUT32(R128MMIO, addr, val)
-
-#define ADDRREG(addr)       ((volatile CARD32 *)(pointer)(R128MMIO + (addr)))
-
-
-#define OUTREGP(addr, val, mask)   \
-    do {                           \
-	CARD32 tmp = INREG(addr);  \
-	tmp &= (mask);             \
-	tmp |= ((val) & ~(mask));  \
-	OUTREG(addr, tmp);         \
-    } while (0)
-
-#define INPLL(pScrn, addr) R128INPLL(pScrn, addr)
-
-#define OUTPLL(addr, val)                                                 \
-    do {                                                                  \
-	OUTREG8(R128_CLOCK_CNTL_INDEX, ((addr) & 0x3f) | R128_PLL_WR_EN); \
-	OUTREG(R128_CLOCK_CNTL_DATA, val);                                \
-    } while (0)
-
-#define OUTPLLP(pScrn, addr, val, mask)                                   \
-    do {                                                                  \
-	CARD32 tmp = INPLL(pScrn, addr);                                  \
-	tmp &= (mask);                                                    \
-	tmp |= ((val) & ~(mask));                                         \
-	OUTPLL(addr, tmp);                                                \
-    } while (0)
-
-#define OUTPAL_START(idx)                                                 \
-    do {                                                                  \
-	OUTREG8(R128_PALETTE_INDEX, (idx));                               \
-    } while (0)
-
-#define OUTPAL_NEXT(r, g, b)                                              \
-    do {                                                                  \
-	OUTREG(R128_PALETTE_DATA, ((r) << 16) | ((g) << 8) | (b));        \
-    } while (0)
-
-#define OUTPAL_NEXT_CARD32(v)                                             \
-    do {                                                                  \
-	OUTREG(R128_PALETTE_DATA, (v & 0x00ffffff));                      \
-    } while (0)
-
-#define OUTPAL(idx, r, g, b)                                              \
-    do {                                                                  \
-	OUTPAL_START((idx));                                              \
-	OUTPAL_NEXT((r), (g), (b));                                       \
-    } while (0)
-
-#define INPAL_START(idx)                                                  \
-    do {                                                                  \
-	OUTREG(R128_PALETTE_INDEX, (idx) << 16);                          \
-    } while (0)
-
-#define INPAL_NEXT() INREG(R128_PALETTE_DATA)
-
-#define PAL_SELECT(idx)                                                   \
-    do {                                                                  \
-	CARD32 tmp = INREG(R128_DAC_CNTL);                                \
-	if (idx) {                                                        \
-	    OUTREG(R128_DAC_CNTL, tmp | R128_DAC_PALETTE_ACC_CTL);        \
-	} else {                                                          \
-	    OUTREG(R128_DAC_CNTL, tmp &                                   \
-		   (CARD32)~R128_DAC_PALETTE_ACC_CTL);                    \
-	}                                                                 \
-    } while (0)
-
-#define R128_ADAPTER_ID                   0x0f2c /* PCI */
-#define R128_AGP_APER_OFFSET              0x0178
-#define R128_AGP_BASE                     0x0170
-#define R128_AGP_CNTL                     0x0174
-#       define R128_AGP_APER_SIZE_256MB   (0x00 << 0)
-#       define R128_AGP_APER_SIZE_128MB   (0x20 << 0)
-#       define R128_AGP_APER_SIZE_64MB    (0x30 << 0)
-#       define R128_AGP_APER_SIZE_32MB    (0x38 << 0)
-#       define R128_AGP_APER_SIZE_16MB    (0x3c << 0)
-#       define R128_AGP_APER_SIZE_8MB     (0x3e << 0)
-#       define R128_AGP_APER_SIZE_4MB     (0x3f << 0)
-#       define R128_AGP_APER_SIZE_MASK    (0x3f << 0)
-#define R128_AGP_CNTL_B                   0x0b44
-#define R128_AGP_COMMAND                  0x0f58 /* PCI */
-#define R128_AGP_PLL_CNTL                 0x0010 /* PLL */
-#define R128_AGP_STATUS                   0x0f54 /* PCI */
-#       define R128_AGP_1X_MODE           0x01
-#       define R128_AGP_2X_MODE           0x02
-#       define R128_AGP_4X_MODE           0x04
-#       define R128_AGP_MODE_MASK         0x07
-#define R128_AMCGPIO_A_REG                0x01a0
-#define R128_AMCGPIO_EN_REG               0x01a8
-#define R128_AMCGPIO_MASK                 0x0194
-#define R128_AMCGPIO_Y_REG                0x01a4
-#define R128_ATTRDR                       0x03c1 /* VGA */
-#define R128_ATTRDW                       0x03c0 /* VGA */
-#define R128_ATTRX                        0x03c0 /* VGA */
-#define R128_AUX_SC_CNTL                  0x1660
-#       define R128_AUX1_SC_EN            (1 << 0)
-#       define R128_AUX1_SC_MODE_OR       (0 << 1)
-#       define R128_AUX1_SC_MODE_NAND     (1 << 1)
-#       define R128_AUX2_SC_EN            (1 << 2)
-#       define R128_AUX2_SC_MODE_OR       (0 << 3)
-#       define R128_AUX2_SC_MODE_NAND     (1 << 3)
-#       define R128_AUX3_SC_EN            (1 << 4)
-#       define R128_AUX3_SC_MODE_OR       (0 << 5)
-#       define R128_AUX3_SC_MODE_NAND     (1 << 5)
-#define R128_AUX1_SC_BOTTOM               0x1670
-#define R128_AUX1_SC_LEFT                 0x1664
-#define R128_AUX1_SC_RIGHT                0x1668
-#define R128_AUX1_SC_TOP                  0x166c
-#define R128_AUX2_SC_BOTTOM               0x1680
-#define R128_AUX2_SC_LEFT                 0x1674
-#define R128_AUX2_SC_RIGHT                0x1678
-#define R128_AUX2_SC_TOP                  0x167c
-#define R128_AUX3_SC_BOTTOM               0x1690
-#define R128_AUX3_SC_LEFT                 0x1684
-#define R128_AUX3_SC_RIGHT                0x1688
-#define R128_AUX3_SC_TOP                  0x168c
-#define R128_AUX_WINDOW_HORZ_CNTL         0x02d8
-#define R128_AUX_WINDOW_VERT_CNTL         0x02dc
-
-#define R128_BASE_CODE                    0x0f0b
-#define R128_BIOS_0_SCRATCH               0x0010
-#define R128_BIOS_1_SCRATCH               0x0014
-#define R128_BIOS_2_SCRATCH               0x0018
-#define R128_BIOS_3_SCRATCH               0x001c
-#define R128_BIOS_4_SCRATCH               0x0020
-#define R128_BIOS_5_SCRATCH               0x0024
-#       define R128_BIOS_DISPLAY_FP       (1 << 0)
-#       define R128_BIOS_DISPLAY_CRT      (2 << 0)
-#       define R128_BIOS_DISPLAY_FP_CRT   (3 << 0)
-/* R128_DUALHEAD is just a flag for the driver;
-   it doesn't actually correspond to any bits  */
-#	define R128_DUALHEAD		  4
-#define R128_BIOS_6_SCRATCH               0x0028
-#define R128_BIOS_7_SCRATCH               0x002c
-#define R128_BIOS_ROM                     0x0f30 /* PCI */
-#define R128_BIST                         0x0f0f /* PCI */
-#define R128_BM_CHUNK_0_VAL               0x0a18
-#       define R128_BM_PTR_FORCE_TO_PCI    (1 << 21)
-#       define R128_BM_PM4_RD_FORCE_TO_PCI (1 << 22)
-#       define R128_BM_GLOBAL_FORCE_TO_PCI (1 << 23)
-#define R128_BRUSH_DATA0                  0x1480
-#define R128_BRUSH_DATA1                  0x1484
-#define R128_BRUSH_DATA10                 0x14a8
-#define R128_BRUSH_DATA11                 0x14ac
-#define R128_BRUSH_DATA12                 0x14b0
-#define R128_BRUSH_DATA13                 0x14b4
-#define R128_BRUSH_DATA14                 0x14b8
-#define R128_BRUSH_DATA15                 0x14bc
-#define R128_BRUSH_DATA16                 0x14c0
-#define R128_BRUSH_DATA17                 0x14c4
-#define R128_BRUSH_DATA18                 0x14c8
-#define R128_BRUSH_DATA19                 0x14cc
-#define R128_BRUSH_DATA2                  0x1488
-#define R128_BRUSH_DATA20                 0x14d0
-#define R128_BRUSH_DATA21                 0x14d4
-#define R128_BRUSH_DATA22                 0x14d8
-#define R128_BRUSH_DATA23                 0x14dc
-#define R128_BRUSH_DATA24                 0x14e0
-#define R128_BRUSH_DATA25                 0x14e4
-#define R128_BRUSH_DATA26                 0x14e8
-#define R128_BRUSH_DATA27                 0x14ec
-#define R128_BRUSH_DATA28                 0x14f0
-#define R128_BRUSH_DATA29                 0x14f4
-#define R128_BRUSH_DATA3                  0x148c
-#define R128_BRUSH_DATA30                 0x14f8
-#define R128_BRUSH_DATA31                 0x14fc
-#define R128_BRUSH_DATA32                 0x1500
-#define R128_BRUSH_DATA33                 0x1504
-#define R128_BRUSH_DATA34                 0x1508
-#define R128_BRUSH_DATA35                 0x150c
-#define R128_BRUSH_DATA36                 0x1510
-#define R128_BRUSH_DATA37                 0x1514
-#define R128_BRUSH_DATA38                 0x1518
-#define R128_BRUSH_DATA39                 0x151c
-#define R128_BRUSH_DATA4                  0x1490
-#define R128_BRUSH_DATA40                 0x1520
-#define R128_BRUSH_DATA41                 0x1524
-#define R128_BRUSH_DATA42                 0x1528
-#define R128_BRUSH_DATA43                 0x152c
-#define R128_BRUSH_DATA44                 0x1530
-#define R128_BRUSH_DATA45                 0x1534
-#define R128_BRUSH_DATA46                 0x1538
-#define R128_BRUSH_DATA47                 0x153c
-#define R128_BRUSH_DATA48                 0x1540
-#define R128_BRUSH_DATA49                 0x1544
-#define R128_BRUSH_DATA5                  0x1494
-#define R128_BRUSH_DATA50                 0x1548
-#define R128_BRUSH_DATA51                 0x154c
-#define R128_BRUSH_DATA52                 0x1550
-#define R128_BRUSH_DATA53                 0x1554
-#define R128_BRUSH_DATA54                 0x1558
-#define R128_BRUSH_DATA55                 0x155c
-#define R128_BRUSH_DATA56                 0x1560
-#define R128_BRUSH_DATA57                 0x1564
-#define R128_BRUSH_DATA58                 0x1568
-#define R128_BRUSH_DATA59                 0x156c
-#define R128_BRUSH_DATA6                  0x1498
-#define R128_BRUSH_DATA60                 0x1570
-#define R128_BRUSH_DATA61                 0x1574
-#define R128_BRUSH_DATA62                 0x1578
-#define R128_BRUSH_DATA63                 0x157c
-#define R128_BRUSH_DATA7                  0x149c
-#define R128_BRUSH_DATA8                  0x14a0
-#define R128_BRUSH_DATA9                  0x14a4
-#define R128_BRUSH_SCALE                  0x1470
-#define R128_BRUSH_Y_X                    0x1474
-#define R128_BUS_CNTL                     0x0030
-#       define R128_BUS_MASTER_DIS         (1 << 6)
-#       define R128_BUS_RD_DISCARD_EN      (1 << 24)
-#       define R128_BUS_RD_ABORT_EN        (1 << 25)
-#       define R128_BUS_MSTR_DISCONNECT_EN (1 << 28)
-#       define R128_BUS_WRT_BURST          (1 << 29)
-#       define R128_BUS_READ_BURST         (1 << 30)
-#define R128_BUS_CNTL1                    0x0034
-#       define R128_BUS_WAIT_ON_LOCK_EN    (1 << 4)
-
-#define R128_CACHE_CNTL                   0x1724
-#define R128_CACHE_LINE                   0x0f0c /* PCI */
-#define R128_CAP0_TRIG_CNTL               0x0950 /* ? */
-#define R128_CAP1_TRIG_CNTL               0x09c0 /* ? */
-#define R128_CAPABILITIES_ID              0x0f50 /* PCI */
-#define R128_CAPABILITIES_PTR             0x0f34 /* PCI */
-#define R128_CLK_PIN_CNTL                 0x0001 /* PLL */
-#define R128_CLOCK_CNTL_DATA              0x000c
-#define R128_CLOCK_CNTL_INDEX             0x0008
-#       define R128_PLL_WR_EN             (1 << 7)
-#       define R128_PLL_DIV_SEL           (3 << 8)
-#       define R128_PLL2_DIV_SEL_MASK     ~(3 << 8)
-#define R128_CLR_CMP_CLR_3D               0x1a24
-#define R128_CLR_CMP_CLR_DST              0x15c8
-#define R128_CLR_CMP_CLR_SRC              0x15c4
-#define R128_CLR_CMP_CNTL                 0x15c0
-#       define R128_SRC_CMP_EQ_COLOR      (4 <<  0)
-#       define R128_SRC_CMP_NEQ_COLOR     (5 <<  0)
-#       define R128_CLR_CMP_SRC_SOURCE    (1 << 24)
-#define R128_CLR_CMP_MASK                 0x15cc
-#       define R128_CLR_CMP_MSK           0xffffffff
-#define R128_CLR_CMP_MASK_3D              0x1A28
-#define R128_COMMAND                      0x0f04 /* PCI */
-#define R128_COMPOSITE_SHADOW_ID          0x1a0c
-#define R128_CONFIG_APER_0_BASE           0x0100
-#define R128_CONFIG_APER_1_BASE           0x0104
-#define R128_CONFIG_APER_SIZE             0x0108
-#define R128_CONFIG_BONDS                 0x00e8
-#define R128_CONFIG_CNTL                  0x00e0
-#       define APER_0_BIG_ENDIAN_16BPP_SWAP (1 << 0)
-#       define APER_0_BIG_ENDIAN_32BPP_SWAP (2 << 0)
-#define R128_CONFIG_MEMSIZE               0x00f8
-#define R128_CONFIG_MEMSIZE_EMBEDDED      0x0114
-#define R128_CONFIG_REG_1_BASE            0x010c
-#define R128_CONFIG_REG_APER_SIZE         0x0110
-#define R128_CONFIG_XSTRAP                0x00e4
-#define R128_CONSTANT_COLOR_C             0x1d34
-#       define R128_CONSTANT_COLOR_MASK   0x00ffffff
-#       define R128_CONSTANT_COLOR_ONE    0x00ffffff
-#       define R128_CONSTANT_COLOR_ZERO   0x00000000
-#define R128_CRC_CMDFIFO_ADDR             0x0740
-#define R128_CRC_CMDFIFO_DOUT             0x0744
-#define R128_CRTC_CRNT_FRAME              0x0214
-#define R128_CRTC_DEBUG                   0x021c
-#define R128_CRTC_EXT_CNTL                0x0054
-#       define R128_CRTC_VGA_XOVERSCAN    (1 <<  0)
-#       define R128_VGA_ATI_LINEAR        (1 <<  3)
-#       define R128_XCRT_CNT_EN           (1 <<  6)
-#       define R128_CRTC_HSYNC_DIS        (1 <<  8)
-#       define R128_CRTC_VSYNC_DIS        (1 <<  9)
-#       define R128_CRTC_DISPLAY_DIS      (1 << 10)
-#       define R128_CRTC_CRT_ON           (1 << 15)
-#       define R128_FP_OUT_EN             (1 << 22)
-#       define R128_FP_ACTIVE             (1 << 23)
-#define R128_CRTC_EXT_CNTL_DPMS_BYTE      0x0055
-#       define R128_CRTC_HSYNC_DIS_BYTE   (1 <<  0)
-#       define R128_CRTC_VSYNC_DIS_BYTE   (1 <<  1)
-#       define R128_CRTC_DISPLAY_DIS_BYTE (1 <<  2)
-#define R128_CRTC_GEN_CNTL                0x0050
-#       define R128_CRTC_DBL_SCAN_EN      (1 <<  0)
-#       define R128_CRTC_INTERLACE_EN     (1 <<  1)
-#       define R128_CRTC_CSYNC_EN         (1 <<  4)
-#       define R128_CRTC_CUR_EN           (1 << 16)
-#       define R128_CRTC_CUR_MODE_MASK    (7 << 17)
-#       define R128_CRTC_ICON_EN          (1 << 20)
-#       define R128_CRTC_EXT_DISP_EN      (1 << 24)
-#       define R128_CRTC_EN               (1 << 25)
-#       define R128_CRTC_DISP_REQ_EN_B    (1 << 26)
-#define R128_CRTC_GUI_TRIG_VLINE          0x0218
-#define R128_CRTC_H_SYNC_STRT_WID         0x0204
-#       define R128_CRTC_H_SYNC_STRT_PIX        (0x07  <<  0)
-#       define R128_CRTC_H_SYNC_STRT_CHAR       (0x1ff <<  3)
-#       define R128_CRTC_H_SYNC_STRT_CHAR_SHIFT 3
-#       define R128_CRTC_H_SYNC_WID             (0x3f  << 16)
-#       define R128_CRTC_H_SYNC_WID_SHIFT       16
-#       define R128_CRTC_H_SYNC_POL             (1     << 23)
-#define R128_CRTC_H_TOTAL_DISP            0x0200
-#       define R128_CRTC_H_TOTAL          (0x01ff << 0)
-#       define R128_CRTC_H_TOTAL_SHIFT    0
-#       define R128_CRTC_H_DISP           (0x00ff << 16)
-#       define R128_CRTC_H_DISP_SHIFT     16
-#define R128_CRTC_OFFSET                  0x0224
-#define R128_CRTC_OFFSET_CNTL             0x0228
-#define R128_CRTC_PITCH                   0x022c
-#define R128_CRTC_STATUS                  0x005c
-#       define R128_CRTC_VBLANK_SAVE      (1 <<  1)
-#define R128_CRTC_V_SYNC_STRT_WID         0x020c
-#       define R128_CRTC_V_SYNC_STRT       (0x7ff <<  0)
-#       define R128_CRTC_V_SYNC_STRT_SHIFT 0
-#       define R128_CRTC_V_SYNC_WID        (0x1f  << 16)
-#       define R128_CRTC_V_SYNC_WID_SHIFT  16
-#       define R128_CRTC_V_SYNC_POL        (1     << 23)
-#define R128_CRTC_V_TOTAL_DISP            0x0208
-#       define R128_CRTC_V_TOTAL          (0x07ff << 0)
-#       define R128_CRTC_V_TOTAL_SHIFT    0
-#       define R128_CRTC_V_DISP           (0x07ff << 16)
-#       define R128_CRTC_V_DISP_SHIFT     16
-#define R128_CRTC_VLINE_CRNT_VLINE        0x0210
-#       define R128_CRTC_CRNT_VLINE_MASK  (0x7ff << 16)
-#define R128_CRTC2_CRNT_FRAME             0x0314
-#define R128_CRTC2_DEBUG                  0x031c
-#define R128_CRTC2_GEN_CNTL               0x03f8
-#       define R128_CRTC2_DBL_SCAN_EN      (1 <<  0)
-#       define R128_CRTC2_CUR_EN           (1 << 16)
-#       define R128_CRTC2_ICON_EN          (1 << 20)
-#       define R128_CRTC2_DISP_DIS         (1 << 23)
-#       define R128_CRTC2_EN               (1 << 25)
-#       define R128_CRTC2_DISP_REQ_EN_B    (1 << 26)
-#define R128_CRTC2_GUI_TRIG_VLINE         0x0318
-#define R128_CRTC2_H_SYNC_STRT_WID        0x0304
-#       define R128_CRTC2_H_SYNC_STRT_PIX        (0x07  <<  0)
-#       define R128_CRTC2_H_SYNC_STRT_CHAR       (0x1ff <<  3)
-#       define R128_CRTC2_H_SYNC_STRT_CHAR_SHIFT 3
-#       define R128_CRTC2_H_SYNC_WID             (0x3f  << 16)
-#       define R128_CRTC2_H_SYNC_WID_SHIFT       16
-#       define R128_CRTC2_H_SYNC_POL             (1     << 23)
-#define R128_CRTC2_H_TOTAL_DISP           0x0300
-#       define R128_CRTC2_H_TOTAL          (0x01ff << 0)
-#       define R128_CRTC2_H_TOTAL_SHIFT    0
-#       define R128_CRTC2_H_DISP           (0x00ff << 16)
-#       define R128_CRTC2_H_DISP_SHIFT     16
-#define R128_CRTC2_OFFSET                 0x0324
-#define R128_CRTC2_OFFSET_CNTL            0x0328
-#	define R128_CRTC2_TILE_EN         (1 << 15)
-#define R128_CRTC2_PITCH                  0x032c
-#define R128_CRTC2_STATUS                 0x03fc
-#define R128_CRTC2_V_SYNC_STRT_WID        0x030c
-#       define R128_CRTC2_V_SYNC_STRT       (0x7ff <<  0)
-#       define R128_CRTC2_V_SYNC_STRT_SHIFT 0
-#       define R128_CRTC2_V_SYNC_WID        (0x1f  << 16)
-#       define R128_CRTC2_V_SYNC_WID_SHIFT  16
-#       define R128_CRTC2_V_SYNC_POL        (1     << 23)
-#define R128_CRTC2_V_TOTAL_DISP           0x0308
-#       define R128_CRTC2_V_TOTAL          (0x07ff << 0)
-#       define R128_CRTC2_V_TOTAL_SHIFT    0
-#       define R128_CRTC2_V_DISP           (0x07ff << 16)
-#       define R128_CRTC2_V_DISP_SHIFT     16
-#define R128_CRTC2_VLINE_CRNT_VLINE       0x0310
-#define R128_CRTC8_DATA                   0x03d5 /* VGA, 0x3b5 */
-#define R128_CRTC8_IDX                    0x03d4 /* VGA, 0x3b4 */
-#define R128_CUR_CLR0                     0x026c
-#define R128_CUR_CLR1                     0x0270
-#define R128_CUR_HORZ_VERT_OFF            0x0268
-#define R128_CUR_HORZ_VERT_POSN           0x0264
-#define R128_CUR_OFFSET                   0x0260
-#       define R128_CUR_LOCK              (1 << 31)
-#define R128_CUR2_CLR0                    0x036c
-#define R128_CUR2_CLR1                    0x0370
-#define R128_CUR2_HORZ_VERT_OFF           0x0368
-#define R128_CUR2_HORZ_VERT_POSN          0x0364
-#define R128_CUR2_OFFSET                  0x0360
-#       define R128_CUR2_LOCK             (1 << 31)
-
-#define R128_DAC_CNTL                     0x0058
-#       define R128_DAC_RANGE_CNTL        (3 <<  0)
-#       define R128_DAC_BLANKING          (1 <<  2)
-#       define R128_DAC_CRT_SEL_CRTC2     (1 <<  4)
-#       define R128_DAC_PALETTE_ACC_CTL   (1 <<  5)
-#	define R128_DAC_PALETTE2_SNOOP_EN (1 <<  6)
-#       define R128_DAC_8BIT_EN           (1 <<  8)
-#       define R128_DAC_VGA_ADR_EN        (1 << 13)
-#       define R128_DAC_MASK_ALL          (0xff << 24)
-#define R128_DAC_CRC_SIG                  0x02cc
-#define R128_DAC_DATA                     0x03c9 /* VGA */
-#define R128_DAC_MASK                     0x03c6 /* VGA */
-#define R128_DAC_R_INDEX                  0x03c7 /* VGA */
-#define R128_DAC_W_INDEX                  0x03c8 /* VGA */
-#define R128_DDA_CONFIG                   0x02e0
-#define R128_DDA_ON_OFF                   0x02e4
-#define R128_DDA2_CONFIG                  0x03e0
-#define R128_DDA2_ON_OFF                  0x03e4
-#define R128_DEFAULT_OFFSET               0x16e0
-#define R128_DEFAULT_PITCH                0x16e4
-#define R128_DEFAULT_SC_BOTTOM_RIGHT      0x16e8
-#       define R128_DEFAULT_SC_RIGHT_MAX  (0x1fff <<  0)
-#       define R128_DEFAULT_SC_BOTTOM_MAX (0x1fff << 16)
-#define R128_DEFAULT2_OFFSET               0x16f8
-#define R128_DEFAULT2_PITCH                0x16fc
-#define R128_DEFAULT2_SC_BOTTOM_RIGHT      0x16dc
-#define R128_DESTINATION_3D_CLR_CMP_VAL   0x1820
-#define R128_DESTINATION_3D_CLR_CMP_MSK   0x1824
-#define R128_DEVICE_ID                    0x0f02 /* PCI */
-#define R128_DP_BRUSH_BKGD_CLR            0x1478
-#define R128_DP_BRUSH_FRGD_CLR            0x147c
-#define R128_DP_CNTL                      0x16c0
-#       define R128_DST_X_LEFT_TO_RIGHT   (1 <<  0)
-#       define R128_DST_Y_TOP_TO_BOTTOM   (1 <<  1)
-#define R128_DP_CNTL_XDIR_YDIR_YMAJOR     0x16d0
-#       define R128_DST_Y_MAJOR             (1 <<  2)
-#       define R128_DST_Y_DIR_TOP_TO_BOTTOM (1 << 15)
-#       define R128_DST_X_DIR_LEFT_TO_RIGHT (1 << 31)
-#define R128_DP_DATATYPE                  0x16c4
-#       define R128_HOST_BIG_ENDIAN_EN    (1 << 29)
-#define R128_DP_GUI_MASTER_CNTL           0x146c
-#       define R128_GMC_SRC_PITCH_OFFSET_CNTL (1    <<  0)
-#       define R128_GMC_DST_PITCH_OFFSET_CNTL (1    <<  1)
-#       define R128_GMC_SRC_CLIPPING          (1    <<  2)
-#       define R128_GMC_DST_CLIPPING          (1    <<  3)
-#       define R128_GMC_BRUSH_DATATYPE_MASK   (0x0f <<  4)
-#       define R128_GMC_BRUSH_8X8_MONO_FG_BG  (0    <<  4)
-#       define R128_GMC_BRUSH_8X8_MONO_FG_LA  (1    <<  4)
-#       define R128_GMC_BRUSH_1X8_MONO_FG_BG  (4    <<  4)
-#       define R128_GMC_BRUSH_1X8_MONO_FG_LA  (5    <<  4)
-#       define R128_GMC_BRUSH_32x1_MONO_FG_BG (6    <<  4)
-#       define R128_GMC_BRUSH_32x1_MONO_FG_LA (7    <<  4)
-#       define R128_GMC_BRUSH_32x32_MONO_FG_BG (8    <<  4)
-#       define R128_GMC_BRUSH_32x32_MONO_FG_LA (9    <<  4)
-#       define R128_GMC_BRUSH_8x8_COLOR       (10   <<  4)
-#       define R128_GMC_BRUSH_1X8_COLOR       (12   <<  4)
-#       define R128_GMC_BRUSH_SOLID_COLOR     (13   <<  4)
-#       define R128_GMC_BRUSH_NONE            (15   <<  4)
-#       define R128_GMC_DST_8BPP_CI           (2    <<  8)
-#       define R128_GMC_DST_15BPP             (3    <<  8)
-#       define R128_GMC_DST_16BPP             (4    <<  8)
-#       define R128_GMC_DST_24BPP             (5    <<  8)
-#       define R128_GMC_DST_32BPP             (6    <<  8)
-#       define R128_GMC_DST_8BPP_RGB          (7    <<  8)
-#       define R128_GMC_DST_Y8                (8    <<  8)
-#       define R128_GMC_DST_RGB8              (9    <<  8)
-#       define R128_GMC_DST_VYUY              (11   <<  8)
-#       define R128_GMC_DST_YVYU              (12   <<  8)
-#       define R128_GMC_DST_AYUV444           (14   <<  8)
-#       define R128_GMC_DST_ARGB4444          (15   <<  8)
-#       define R128_GMC_DST_DATATYPE_MASK     (0x0f <<  8)
-#       define R128_GMC_DST_DATATYPE_SHIFT    8
-#       define R128_GMC_SRC_DATATYPE_MASK       (3    << 12)
-#       define R128_GMC_SRC_DATATYPE_MONO_FG_BG (0    << 12)
-#       define R128_GMC_SRC_DATATYPE_MONO_FG_LA (1    << 12)
-#       define R128_GMC_SRC_DATATYPE_COLOR      (3    << 12)
-#       define R128_GMC_BYTE_PIX_ORDER        (1    << 14)
-#       define R128_GMC_BYTE_MSB_TO_LSB       (0    << 14)
-#       define R128_GMC_BYTE_LSB_TO_MSB       (1    << 14)
-#       define R128_GMC_CONVERSION_TEMP       (1    << 15)
-#       define R128_GMC_CONVERSION_TEMP_6500  (0    << 15)
-#       define R128_GMC_CONVERSION_TEMP_9300  (1    << 15)
-#       define R128_GMC_ROP3_MASK             (0xff << 16)
-#       define R128_DP_SRC_SOURCE_MASK        (7    << 24)
-#       define R128_DP_SRC_SOURCE_MEMORY      (2    << 24)
-#       define R128_DP_SRC_SOURCE_HOST_DATA   (3    << 24)
-#       define R128_GMC_3D_FCN_EN             (1    << 27)
-#       define R128_GMC_CLR_CMP_CNTL_DIS      (1    << 28)
-#       define R128_GMC_AUX_CLIP_DIS          (1    << 29)
-#       define R128_GMC_WR_MSK_DIS            (1    << 30)
-#       define R128_GMC_LD_BRUSH_Y_X          (1    << 31)
-#       define R128_ROP3_ZERO             0x00000000
-#       define R128_ROP3_DSa              0x00880000
-#       define R128_ROP3_SDna             0x00440000
-#       define R128_ROP3_S                0x00cc0000
-#       define R128_ROP3_DSna             0x00220000
-#       define R128_ROP3_D                0x00aa0000
-#       define R128_ROP3_DSx              0x00660000
-#       define R128_ROP3_DSo              0x00ee0000
-#       define R128_ROP3_DSon             0x00110000
-#       define R128_ROP3_DSxn             0x00990000
-#       define R128_ROP3_Dn               0x00550000
-#       define R128_ROP3_SDno             0x00dd0000
-#       define R128_ROP3_Sn               0x00330000
-#       define R128_ROP3_DSno             0x00bb0000
-#       define R128_ROP3_DSan             0x00770000
-#       define R128_ROP3_ONE              0x00ff0000
-#       define R128_ROP3_DPa              0x00a00000
-#       define R128_ROP3_PDna             0x00500000
-#       define R128_ROP3_P                0x00f00000
-#       define R128_ROP3_DPna             0x000a0000
-#       define R128_ROP3_D                0x00aa0000
-#       define R128_ROP3_DPx              0x005a0000
-#       define R128_ROP3_DPo              0x00fa0000
-#       define R128_ROP3_DPon             0x00050000
-#       define R128_ROP3_PDxn             0x00a50000
-#       define R128_ROP3_PDno             0x00f50000
-#       define R128_ROP3_Pn               0x000f0000
-#       define R128_ROP3_DPno             0x00af0000
-#       define R128_ROP3_DPan             0x005f0000
-
-
-#define R128_DP_GUI_MASTER_CNTL_C         0x1c84
-#define R128_DP_MIX                       0x16c8
-#define R128_DP_SRC_BKGD_CLR              0x15dc
-#define R128_DP_SRC_FRGD_CLR              0x15d8
-#define R128_DP_WRITE_MASK                0x16cc
-#define R128_DST_BRES_DEC                 0x1630
-#define R128_DST_BRES_ERR                 0x1628
-#define R128_DST_BRES_INC                 0x162c
-#define R128_DST_BRES_LNTH                0x1634
-#define R128_DST_BRES_LNTH_SUB            0x1638
-#define R128_DST_HEIGHT                   0x1410
-#define R128_DST_HEIGHT_WIDTH             0x143c
-#define R128_DST_HEIGHT_WIDTH_8           0x158c
-#define R128_DST_HEIGHT_WIDTH_BW          0x15b4
-#define R128_DST_HEIGHT_Y                 0x15a0
-#define R128_DST_OFFSET                   0x1404
-#define R128_DST_PITCH                    0x1408
-#define R128_DST_PITCH_OFFSET             0x142c
-#define R128_DST_PITCH_OFFSET_C           0x1c80
-#       define R128_PITCH_SHIFT               21
-#       define R128_DST_TILE                 (1 << 31)
-#define R128_DST_WIDTH                    0x140c
-#define R128_DST_WIDTH_HEIGHT             0x1598
-#define R128_DST_WIDTH_X                  0x1588
-#define R128_DST_WIDTH_X_INCY             0x159c
-#define R128_DST_X                        0x141c
-#define R128_DST_X_SUB                    0x15a4
-#define R128_DST_X_Y                      0x1594
-#define R128_DST_Y                        0x1420
-#define R128_DST_Y_SUB                    0x15a8
-#define R128_DST_Y_X                      0x1438
-
-#define R128_EXT_MEM_CNTL                 0x0144
-
-#define R128_FCP_CNTL                     0x0012 /* PLL */
-#define R128_FLUSH_1                      0x1704
-#define R128_FLUSH_2                      0x1708
-#define R128_FLUSH_3                      0x170c
-#define R128_FLUSH_4                      0x1710
-#define R128_FLUSH_5                      0x1714
-#define R128_FLUSH_6                      0x1718
-#define R128_FLUSH_7                      0x171c
-#define R128_FOG_3D_TABLE_START           0x1810
-#define R128_FOG_3D_TABLE_END             0x1814
-#define R128_FOG_3D_TABLE_DENSITY         0x181c
-#define R128_FOG_TABLE_INDEX              0x1a14
-#define R128_FOG_TABLE_DATA               0x1a18
-#define R128_FP_CRTC_H_TOTAL_DISP         0x0250
-#define R128_FP_CRTC_V_TOTAL_DISP         0x0254
-#define R128_FP_GEN_CNTL                  0x0284
-#       define R128_FP_FPON                  (1 << 0)
-#       define R128_FP_BLANK_DIS             (1 << 1)
-#       define R128_FP_TDMS_EN               (1 <<  2)
-#       define R128_FP_DETECT_SENSE          (1 <<  8)
-#       define R128_FP_SEL_CRTC2             (1 << 13)
-#       define R128_FP_CRTC_DONT_SHADOW_VPAR (1 << 16)
-#       define R128_FP_CRTC_DONT_SHADOW_HEND (1 << 17)
-#       define R128_FP_CRTC_USE_SHADOW_VEND  (1 << 18)
-#       define R128_FP_CRTC_USE_SHADOW_ROWCUR (1 << 19)
-#       define R128_FP_CRTC_HORZ_DIV2_EN     (1 << 20)
-#       define R128_FP_CRTC_HOR_CRT_DIV2_DIS (1 << 21)
-#       define R128_FP_CRT_SYNC_SEL          (1 << 23)
-#       define R128_FP_USE_SHADOW_EN         (1 << 24)
-#define R128_FP_H_SYNC_STRT_WID           0x02c4
-#define R128_FP_HORZ_STRETCH              0x028c
-#       define R128_HORZ_STRETCH_RATIO_MASK  0xffff
-#       define R128_HORZ_STRETCH_RATIO_SHIFT 0
-#       define R128_HORZ_STRETCH_RATIO_MAX   4096
-#       define R128_HORZ_PANEL_SIZE          (0xff   << 16)
-#       define R128_HORZ_PANEL_SHIFT         16
-#       define R128_AUTO_HORZ_RATIO          (0      << 24)
-#       define R128_HORZ_STRETCH_PIXREP      (0      << 25)
-#       define R128_HORZ_STRETCH_BLEND       (1      << 25)
-#       define R128_HORZ_STRETCH_ENABLE      (1      << 26)
-#       define R128_HORZ_FP_LOOP_STRETCH     (0x7    << 27)
-#       define R128_HORZ_STRETCH_RESERVED    (1      << 30)
-#       define R128_HORZ_AUTO_RATIO_FIX_EN   (1      << 31)
-
-#define R128_FP_PANEL_CNTL                0x0288
-#       define R128_FP_DIGON              (1 << 0)
-#       define R128_FP_BLON               (1 << 1)
-#define R128_FP_V_SYNC_STRT_WID           0x02c8
-#define R128_FP_VERT_STRETCH              0x0290
-#       define R128_VERT_PANEL_SIZE          (0x7ff <<  0)
-#       define R128_VERT_PANEL_SHIFT         0
-#       define R128_VERT_STRETCH_RATIO_MASK  0x3ff
-#       define R128_VERT_STRETCH_RATIO_SHIFT 11
-#       define R128_VERT_STRETCH_RATIO_MAX   1024
-#       define R128_VERT_STRETCH_ENABLE      (1     << 24)
-#       define R128_VERT_STRETCH_LINEREP     (0     << 25)
-#       define R128_VERT_STRETCH_BLEND       (1     << 25)
-#       define R128_VERT_AUTO_RATIO_EN       (1     << 26)
-#       define R128_VERT_STRETCH_RESERVED    0xf8e00000
-
-#define R128_GEN_INT_CNTL                 0x0040
-#define R128_GEN_INT_STATUS               0x0044
-#       define R128_VSYNC_INT_AK          (1 <<  2)
-#       define R128_VSYNC_INT             (1 <<  2)
-#define R128_GEN_RESET_CNTL               0x00f0
-#       define R128_SOFT_RESET_GUI          (1 <<  0)
-#       define R128_SOFT_RESET_VCLK         (1 <<  8)
-#       define R128_SOFT_RESET_PCLK         (1 <<  9)
-#       define R128_SOFT_RESET_DISPENG_XCLK (1 << 11)
-#       define R128_SOFT_RESET_MEMCTLR_XCLK (1 << 12)
-#define R128_GENENB                       0x03c3 /* VGA */
-#define R128_GENFC_RD                     0x03ca /* VGA */
-#define R128_GENFC_WT                     0x03da /* VGA, 0x03ba */
-#define R128_GENMO_RD                     0x03cc /* VGA */
-#define R128_GENMO_WT                     0x03c2 /* VGA */
-#define R128_GENS0                        0x03c2 /* VGA */
-#define R128_GENS1                        0x03da /* VGA, 0x03ba */
-#define R128_GPIO_MONID                   0x0068
-#       define R128_GPIO_MONID_A_0        (1 <<  0)
-#       define R128_GPIO_MONID_A_1        (1 <<  1)
-#       define R128_GPIO_MONID_A_2        (1 <<  2)
-#       define R128_GPIO_MONID_A_3        (1 <<  3)
-#       define R128_GPIO_MONID_Y_0        (1 <<  8)
-#       define R128_GPIO_MONID_Y_1        (1 <<  9)
-#       define R128_GPIO_MONID_Y_2        (1 << 10)
-#       define R128_GPIO_MONID_Y_3        (1 << 11)
-#       define R128_GPIO_MONID_EN_0       (1 << 16)
-#       define R128_GPIO_MONID_EN_1       (1 << 17)
-#       define R128_GPIO_MONID_EN_2       (1 << 18)
-#       define R128_GPIO_MONID_EN_3       (1 << 19)
-#       define R128_GPIO_MONID_MASK_0     (1 << 24)
-#       define R128_GPIO_MONID_MASK_1     (1 << 25)
-#       define R128_GPIO_MONID_MASK_2     (1 << 26)
-#       define R128_GPIO_MONID_MASK_3     (1 << 27)
-#define R128_GPIO_MONIDB                  0x006c
-#define R128_GRPH8_DATA                   0x03cf /* VGA */
-#define R128_GRPH8_IDX                    0x03ce /* VGA */
-#define R128_GUI_DEBUG0                   0x16a0
-#define R128_GUI_DEBUG1                   0x16a4
-#define R128_GUI_DEBUG2                   0x16a8
-#define R128_GUI_DEBUG3                   0x16ac
-#define R128_GUI_DEBUG4                   0x16b0
-#define R128_GUI_DEBUG5                   0x16b4
-#define R128_GUI_DEBUG6                   0x16b8
-#define R128_GUI_PROBE                    0x16bc
-#define R128_GUI_SCRATCH_REG0             0x15e0
-#define R128_GUI_SCRATCH_REG1             0x15e4
-#define R128_GUI_SCRATCH_REG2             0x15e8
-#define R128_GUI_SCRATCH_REG3             0x15ec
-#define R128_GUI_SCRATCH_REG4             0x15f0
-#define R128_GUI_SCRATCH_REG5             0x15f4
-#define R128_GUI_STAT                     0x1740
-#       define R128_GUI_FIFOCNT_MASK      0x0fff
-#       define R128_GUI_ACTIVE            (1 << 31)
-
-#define R128_HEADER                       0x0f0e /* PCI */
-#define R128_HOST_DATA0                   0x17c0
-#define R128_HOST_DATA1                   0x17c4
-#define R128_HOST_DATA2                   0x17c8
-#define R128_HOST_DATA3                   0x17cc
-#define R128_HOST_DATA4                   0x17d0
-#define R128_HOST_DATA5                   0x17d4
-#define R128_HOST_DATA6                   0x17d8
-#define R128_HOST_DATA7                   0x17dc
-#define R128_HOST_DATA_LAST               0x17e0
-#define R128_HOST_PATH_CNTL               0x0130
-#define R128_HTOTAL_CNTL                  0x0009 /* PLL */
-#define R128_HTOTAL2_CNTL                 0x002e /* PLL */
-#define R128_HW_DEBUG                     0x0128
-#define R128_HW_DEBUG2                    0x011c
-
-#define R128_I2C_CNTL_1                   0x0094 /* ? */
-#define R128_INTERRUPT_LINE               0x0f3c /* PCI */
-#define R128_INTERRUPT_PIN                0x0f3d /* PCI */
-#define R128_IO_BASE                      0x0f14 /* PCI */
-
-#define R128_LATENCY                      0x0f0d /* PCI */
-#define R128_LEAD_BRES_DEC                0x1608
-#define R128_LEAD_BRES_ERR                0x1600
-#define R128_LEAD_BRES_INC                0x1604
-#define R128_LEAD_BRES_LNTH               0x161c
-#define R128_LEAD_BRES_LNTH_SUB           0x1624
-#define R128_LVDS_GEN_CNTL                0x02d0
-#       define R128_LVDS_ON               (1   <<  0)
-#       define R128_LVDS_DISPLAY_DIS      (1   <<  1)
-#       define R128_LVDS_EN               (1   <<  7)
-#       define R128_LVDS_DIGON            (1   << 18)
-#       define R128_LVDS_BLON             (1   << 19)
-#       define R128_LVDS_SEL_CRTC2        (1   << 23)
-#       define R128_HSYNC_DELAY_SHIFT     28
-#       define R128_HSYNC_DELAY_MASK      (0xf << 28)
-
-#define R128_MAX_LATENCY                  0x0f3f /* PCI */
-#define R128_MCLK_CNTL                    0x000f /* PLL */
-#       define R128_FORCE_GCP             (1 << 16)
-#       define R128_FORCE_PIPE3D_CP       (1 << 17)
-#       define R128_FORCE_RCP             (1 << 18)
-#define R128_MDGPIO_A_REG                 0x01ac
-#define R128_MDGPIO_EN_REG                0x01b0
-#define R128_MDGPIO_MASK                  0x0198
-#define R128_MDGPIO_Y_REG                 0x01b4
-#define R128_MEM_ADDR_CONFIG              0x0148
-#define R128_MEM_BASE                     0x0f10 /* PCI */
-#define R128_MEM_CNTL                     0x0140
-#define R128_MEM_INIT_LAT_TIMER           0x0154
-#define R128_MEM_INTF_CNTL                0x014c
-#define R128_MEM_SDRAM_MODE_REG           0x0158
-#define R128_MEM_STR_CNTL                 0x0150
-#define R128_MEM_VGA_RP_SEL               0x003c
-#define R128_MEM_VGA_WP_SEL               0x0038
-#define R128_MIN_GRANT                    0x0f3e /* PCI */
-#define R128_MM_DATA                      0x0004
-#define R128_MM_INDEX                     0x0000
-#define R128_MPLL_CNTL                    0x000e /* PLL */
-#define R128_MPP_TB_CONFIG                0x01c0 /* ? */
-#define R128_MPP_GP_CONFIG                0x01c8 /* ? */
-
-#define R128_N_VIF_COUNT                  0x0248
-
-#define R128_OVR_CLR                      0x0230
-#define R128_OVR_WID_LEFT_RIGHT           0x0234
-#define R128_OVR_WID_TOP_BOTTOM           0x0238
-
-/* first overlay unit (there is only one) */
-
-#define R128_OV0_Y_X_START                0x0400
-#define R128_OV0_Y_X_END                  0x0404
-#define R128_OV0_EXCLUSIVE_HORZ           0x0408
-#       define  R128_EXCL_HORZ_START_MASK        0x000000ff
-#       define  R128_EXCL_HORZ_END_MASK          0x0000ff00
-#       define  R128_EXCL_HORZ_BACK_PORCH_MASK   0x00ff0000
-#       define  R128_EXCL_HORZ_EXCLUSIVE_EN      0x80000000
-#define R128_OV0_EXCLUSIVE_VERT           0x040C
-#       define  R128_EXCL_VERT_START_MASK        0x000003ff
-#       define  R128_EXCL_VERT_END_MASK          0x03ff0000
-#define R128_OV0_REG_LOAD_CNTL            0x0410
-#       define  R128_REG_LD_CTL_LOCK                 0x00000001L
-#       define  R128_REG_LD_CTL_VBLANK_DURING_LOCK   0x00000002L
-#       define  R128_REG_LD_CTL_STALL_GUI_UNTIL_FLIP 0x00000004L
-#       define  R128_REG_LD_CTL_LOCK_READBACK        0x00000008L
-#define R128_OV0_SCALE_CNTL               0x0420
-#       define  R128_SCALER_PIX_EXPAND           0x00000001L
-#       define  R128_SCALER_Y2R_TEMP             0x00000002L
-#       define  R128_SCALER_HORZ_PICK_NEAREST    0x00000003L
-#       define  R128_SCALER_VERT_PICK_NEAREST    0x00000004L
-#       define  R128_SCALER_SIGNED_UV            0x00000010L
-#       define  R128_SCALER_GAMMA_SEL_MASK       0x00000060L
-#       define  R128_SCALER_GAMMA_SEL_BRIGHT     0x00000000L
-#       define  R128_SCALER_GAMMA_SEL_G22        0x00000020L
-#       define  R128_SCALER_GAMMA_SEL_G18        0x00000040L
-#       define  R128_SCALER_GAMMA_SEL_G14        0x00000060L
-#       define  R128_SCALER_COMCORE_SHIFT_UP_ONE 0x00000080L
-#       define  R128_SCALER_SURFAC_FORMAT        0x00000f00L
-#       define  R128_SCALER_SOURCE_15BPP         0x00000300L
-#       define  R128_SCALER_SOURCE_16BPP         0x00000400L
-#       define  R128_SCALER_SOURCE_32BPP         0x00000600L
-#       define  R128_SCALER_SOURCE_YUV9          0x00000900L
-#       define  R128_SCALER_SOURCE_YUV12         0x00000A00L
-#       define  R128_SCALER_SOURCE_VYUY422       0x00000B00L
-#       define  R128_SCALER_SOURCE_YVYU422       0x00000C00L
-#       define  R128_SCALER_SMART_SWITCH         0x00008000L
-#       define  R128_SCALER_BURST_PER_PLANE      0x00ff0000L
-#       define  R128_SCALER_DOUBLE_BUFFER        0x01000000L
-#       define  R128_SCALER_DIS_LIMIT            0x08000000L
-#       define  R128_SCALER_PRG_LOAD_START       0x10000000L
-#       define  R128_SCALER_INT_EMU              0x20000000L
-#       define  R128_SCALER_ENABLE               0x40000000L
-#       define  R128_SCALER_SOFT_RESET           0x80000000L
-#define R128_OV0_V_INC                    0x0424
-#define R128_OV0_P1_V_ACCUM_INIT          0x0428
-#       define  R128_OV0_P1_MAX_LN_IN_PER_LN_OUT        0x00000003L
-#       define  R128_OV0_P1_V_ACCUM_INIT_MASK           0x01ff8000L
-#define R128_OV0_P23_V_ACCUM_INIT         0x042C
-#define R128_OV0_P1_BLANK_LINES_AT_TOP    0x0430
-#       define  R128_P1_BLNK_LN_AT_TOP_M1_MASK   0x00000fffL
-#       define  R128_P1_ACTIVE_LINES_M1          0x0fff0000L
-#define R128_OV0_P23_BLANK_LINES_AT_TOP   0x0434
-#       define  R128_P23_BLNK_LN_AT_TOP_M1_MASK  0x000007ffL
-#       define  R128_P23_ACTIVE_LINES_M1         0x07ff0000L
-#define R128_OV0_VID_BUF0_BASE_ADRS       0x0440
-#       define  R128_VIF_BUF0_PITCH_SEL          0x00000001L
-#       define  R128_VIF_BUF0_TILE_ADRS          0x00000002L
-#       define  R128_VIF_BUF0_BASE_ADRS_MASK     0x03fffff0L
-#       define  R128_VIF_BUF0_1ST_LINE_LSBS_MASK 0x48000000L
-#define R128_OV0_VID_BUF1_BASE_ADRS       0x0444
-#       define  R128_VIF_BUF1_PITCH_SEL          0x00000001L
-#       define  R128_VIF_BUF1_TILE_ADRS          0x00000002L
-#       define  R128_VIF_BUF1_BASE_ADRS_MASK     0x03fffff0L
-#       define  R128_VIF_BUF1_1ST_LINE_LSBS_MASK 0x48000000L
-#define R128_OV0_VID_BUF2_BASE_ADRS       0x0448
-#       define  R128_VIF_BUF2_PITCH_SEL          0x00000001L
-#       define  R128_VIF_BUF2_TILE_ADRS          0x00000002L
-#       define  R128_VIF_BUF2_BASE_ADRS_MASK     0x03fffff0L
-#       define  R128_VIF_BUF2_1ST_LINE_LSBS_MASK 0x48000000L
-#define R128_OV0_VID_BUF3_BASE_ADRS       0x044C
-#define R128_OV0_VID_BUF4_BASE_ADRS       0x0450
-#define R128_OV0_VID_BUF5_BASE_ADRS       0x0454
-#define R128_OV0_VID_BUF_PITCH0_VALUE     0x0460
-#define R128_OV0_VID_BUF_PITCH1_VALUE     0x0464
-#define R128_OV0_AUTO_FLIP_CNTL           0x0470
-#define R128_OV0_DEINTERLACE_PATTERN      0x0474
-#define R128_OV0_H_INC                    0x0480
-#define R128_OV0_STEP_BY                  0x0484
-#define R128_OV0_P1_H_ACCUM_INIT          0x0488
-#define R128_OV0_P23_H_ACCUM_INIT         0x048C
-#define R128_OV0_P1_X_START_END           0x0494
-#define R128_OV0_P2_X_START_END           0x0498
-#define R128_OV0_P3_X_START_END           0x049C
-#define R128_OV0_FILTER_CNTL              0x04A0
-#define R128_OV0_FOUR_TAP_COEF_0          0x04B0
-#define R128_OV0_FOUR_TAP_COEF_1          0x04B4
-#define R128_OV0_FOUR_TAP_COEF_2          0x04B8
-#define R128_OV0_FOUR_TAP_COEF_3          0x04BC
-#define R128_OV0_FOUR_TAP_COEF_4          0x04C0
-#define R128_OV0_COLOUR_CNTL              0x04E0
-#define R128_OV0_VIDEO_KEY_CLR            0x04E4
-#define R128_OV0_VIDEO_KEY_MSK            0x04E8
-#define R128_OV0_GRAPHICS_KEY_CLR         0x04EC
-#define R128_OV0_GRAPHICS_KEY_MSK         0x04F0
-#define R128_OV0_KEY_CNTL                 0x04F4
-#       define  R128_VIDEO_KEY_FN_MASK           0x00000007L
-#       define  R128_VIDEO_KEY_FN_FALSE          0x00000000L
-#       define  R128_VIDEO_KEY_FN_TRUE           0x00000001L
-#       define  R128_VIDEO_KEY_FN_EQ             0x00000004L
-#       define  R128_VIDEO_KEY_FN_NE             0x00000005L
-#       define  R128_GRAPHIC_KEY_FN_MASK         0x00000070L
-#       define  R128_GRAPHIC_KEY_FN_FALSE        0x00000000L
-#       define  R128_GRAPHIC_KEY_FN_TRUE         0x00000010L
-#       define  R128_GRAPHIC_KEY_FN_EQ           0x00000040L
-#       define  R128_GRAPHIC_KEY_FN_NE           0x00000050L
-#       define  R128_CMP_MIX_MASK                0x00000100L
-#       define  R128_CMP_MIX_OR                  0x00000000L
-#       define  R128_CMP_MIX_AND                 0x00000100L
-#define R128_OV0_TEST                     0x04F8
-
-
-#define R128_PALETTE_DATA                 0x00b4
-#define R128_PALETTE_INDEX                0x00b0
-#define R128_PC_DEBUG_MODE                0x1760
-#define R128_PC_GUI_CTLSTAT               0x1748
-#define R128_PC_GUI_MODE                  0x1744
-#       define R128_PC_IGNORE_UNIFY       (1 << 5)
-#define R128_PC_MISC_CNTL                 0x0188
-#define R128_PC_NGUI_CTLSTAT              0x0184
-#       define R128_PC_FLUSH_GUI          (3 << 0)
-#       define R128_PC_RI_GUI             (1 << 2)
-#       define R128_PC_FLUSH_ALL          0x00ff
-#       define R128_PC_BUSY               (1 << 31)
-#define R128_PC_NGUI_MODE                 0x0180
-#define R128_PCI_GART_PAGE                0x017c
-#define R128_PLANE_3D_MASK_C              0x1d44
-#define R128_PLL_TEST_CNTL                0x0013 /* PLL */
-#define R128_PMI_CAP_ID                   0x0f5c /* PCI */
-#define R128_PMI_DATA                     0x0f63 /* PCI */
-#define R128_PMI_NXT_CAP_PTR              0x0f5d /* PCI */
-#define R128_PMI_PMC_REG                  0x0f5e /* PCI */
-#define R128_PMI_PMCSR_REG                0x0f60 /* PCI */
-#define R128_PMI_REGISTER                 0x0f5c /* PCI */
-#define R128_PPLL_CNTL                    0x0002 /* PLL */
-#       define R128_PPLL_RESET                (1 <<  0)
-#       define R128_PPLL_SLEEP                (1 <<  1)
-#       define R128_PPLL_ATOMIC_UPDATE_EN     (1 << 16)
-#       define R128_PPLL_VGA_ATOMIC_UPDATE_EN (1 << 17)
-#define R128_PPLL_DIV_0                   0x0004 /* PLL */
-#define R128_PPLL_DIV_1                   0x0005 /* PLL */
-#define R128_PPLL_DIV_2                   0x0006 /* PLL */
-#define R128_PPLL_DIV_3                   0x0007 /* PLL */
-#       define R128_PPLL_FB3_DIV_MASK     0x07ff
-#       define R128_PPLL_POST3_DIV_MASK   0x00070000
-#define R128_PPLL_REF_DIV                 0x0003 /* PLL */
-#       define R128_PPLL_REF_DIV_MASK     0x03ff
-#       define R128_PPLL_ATOMIC_UPDATE_R  (1 << 15) /* same as _W */
-#       define R128_PPLL_ATOMIC_UPDATE_W  (1 << 15) /* same as _R */
-#define R128_P2PLL_CNTL                    0x002a /* P2PLL */
-#       define R128_P2PLL_RESET               (1 <<  0)
-#       define R128_P2PLL_SLEEP               (1 <<  1)
-#       define R128_P2PLL_ATOMIC_UPDATE_EN    (1 << 16)
-#       define R128_P2PLL_VGA_ATOMIC_UPDATE_EN (1 << 17)
-#       define R128_P2PLL_ATOMIC_UPDATE_VSYNC  (1 << 18)
-#define R128_P2PLL_DIV_0                   0x002c
-#       define R128_P2PLL_FB0_DIV_MASK     0x07ff
-#       define R128_P2PLL_POST0_DIV_MASK   0x00070000
-#define R128_P2PLL_REF_DIV                 0x002B /* PLL */
-#       define R128_P2PLL_REF_DIV_MASK     0x03ff
-#       define R128_P2PLL_ATOMIC_UPDATE_R  (1 << 15) /* same as _W */
-#       define R128_P2PLL_ATOMIC_UPDATE_W  (1 << 15) /* same as _R */
-#define R128_PWR_MNGMT_CNTL_STATUS        0x0f60 /* PCI */
-#define R128_REG_BASE                     0x0f18 /* PCI */
-#define R128_REGPROG_INF                  0x0f09 /* PCI */
-#define R128_REVISION_ID                  0x0f08 /* PCI */
-
-#define R128_SC_BOTTOM                    0x164c
-#define R128_SC_BOTTOM_RIGHT              0x16f0
-#define R128_SC_BOTTOM_RIGHT_C            0x1c8c
-#define R128_SC_LEFT                      0x1640
-#define R128_SC_RIGHT                     0x1644
-#define R128_SC_TOP                       0x1648
-#define R128_SC_TOP_LEFT                  0x16ec
-#define R128_SC_TOP_LEFT_C                0x1c88
-#define R128_SEQ8_DATA                    0x03c5 /* VGA */
-#define R128_SEQ8_IDX                     0x03c4 /* VGA */
-#define R128_SNAPSHOT_F_COUNT             0x0244
-#define R128_SNAPSHOT_VH_COUNTS           0x0240
-#define R128_SNAPSHOT_VIF_COUNT           0x024c
-#define R128_SRC_OFFSET                   0x15ac
-#define R128_SRC_PITCH                    0x15b0
-#define R128_SRC_PITCH_OFFSET             0x1428
-#define R128_SRC_SC_BOTTOM                0x165c
-#define R128_SRC_SC_BOTTOM_RIGHT          0x16f4
-#define R128_SRC_SC_RIGHT                 0x1654
-#define R128_SRC_X                        0x1414
-#define R128_SRC_X_Y                      0x1590
-#define R128_SRC_Y                        0x1418
-#define R128_SRC_Y_X                      0x1434
-#define R128_STATUS                       0x0f06 /* PCI */
-#define R128_SUBPIC_CNTL                  0x0540 /* ? */
-#define R128_SUB_CLASS                    0x0f0a /* PCI */
-#define R128_SURFACE_DELAY                0x0b00
-#define R128_SURFACE0_INFO                0x0b0c
-#define R128_SURFACE0_LOWER_BOUND         0x0b04
-#define R128_SURFACE0_UPPER_BOUND         0x0b08
-#define R128_SURFACE1_INFO                0x0b1c
-#define R128_SURFACE1_LOWER_BOUND         0x0b14
-#define R128_SURFACE1_UPPER_BOUND         0x0b18
-#define R128_SURFACE2_INFO                0x0b2c
-#define R128_SURFACE2_LOWER_BOUND         0x0b24
-#define R128_SURFACE2_UPPER_BOUND         0x0b28
-#define R128_SURFACE3_INFO                0x0b3c
-#define R128_SURFACE3_LOWER_BOUND         0x0b34
-#define R128_SURFACE3_UPPER_BOUND         0x0b38
-#define R128_SW_SEMAPHORE                 0x013c
-
-#define R128_TEST_DEBUG_CNTL              0x0120
-#define R128_TEST_DEBUG_MUX               0x0124
-#define R128_TEST_DEBUG_OUT               0x012c
-#define R128_TMDS_CRC                     0x02a0
-#define R128_TMDS_TRANSMITTER_CNTL        0x02a4
-#       define R128_TMDS_PLLEN            (1 << 0)
-#       define R128_TMDS_PLLRST           (1 << 1)
-#define R128_TRAIL_BRES_DEC               0x1614
-#define R128_TRAIL_BRES_ERR               0x160c
-#define R128_TRAIL_BRES_INC               0x1610
-#define R128_TRAIL_X                      0x1618
-#define R128_TRAIL_X_SUB                  0x1620
-
-#define R128_VCLK_ECP_CNTL                0x0008 /* PLL */
-#       define R128_VCLK_SRC_SEL_MASK     0x03
-#       define R128_VCLK_SRC_SEL_CPUCLK   0x00
-#       define R128_VCLK_SRC_SEL_PPLLCLK  0x03
-#       define R128_ECP_DIV_MASK          (3 << 8)
-#define R128_V2CLK_VCLKTV_CNTL            0x002d /* PLL */
-#       define R128_V2CLK_SRC_SEL_MASK    0x03
-#       define R128_V2CLK_SRC_SEL_CPUCLK  0x00
-#       define R128_V2CLK_SRC_SEL_P2PLLCLK 0x03
-#define R128_VENDOR_ID                    0x0f00 /* PCI */
-#define R128_VGA_DDA_CONFIG               0x02e8
-#define R128_VGA_DDA_ON_OFF               0x02ec
-#define R128_VID_BUFFER_CONTROL           0x0900
-#define R128_VIDEOMUX_CNTL                0x0190
-#define R128_VIPH_CONTROL                 0x01D0 /* ? */
-
-#define R128_WAIT_UNTIL                   0x1720
-
-#define R128_X_MPLL_REF_FB_DIV            0x000a /* PLL */
-#define R128_XCLK_CNTL                    0x000d /* PLL */
-#define R128_XDLL_CNTL                    0x000c /* PLL */
-#define R128_XPLL_CNTL                    0x000b /* PLL */
-
-				/* Registers for CCE and Microcode Engine */
-#define R128_PM4_MICROCODE_ADDR           0x07d4
-#define R128_PM4_MICROCODE_RADDR          0x07d8
-#define R128_PM4_MICROCODE_DATAH          0x07dc
-#define R128_PM4_MICROCODE_DATAL          0x07e0
-
-#define R128_PM4_BUFFER_OFFSET            0x0700
-#define R128_PM4_BUFFER_CNTL              0x0704
-#       define R128_PM4_NONPM4                 (0  << 28)
-#       define R128_PM4_192PIO                 (1  << 28)
-#       define R128_PM4_192BM                  (2  << 28)
-#       define R128_PM4_128PIO_64INDBM         (3  << 28)
-#       define R128_PM4_128BM_64INDBM          (4  << 28)
-#       define R128_PM4_64PIO_128INDBM         (5  << 28)
-#       define R128_PM4_64BM_128INDBM          (6  << 28)
-#       define R128_PM4_64PIO_64VCBM_64INDBM   (7  << 28)
-#       define R128_PM4_64BM_64VCBM_64INDBM    (8  << 28)
-#       define R128_PM4_64PIO_64VCPIO_64INDPIO (15 << 28)
-#define R128_PM4_BUFFER_WM_CNTL           0x0708
-#       define R128_WMA_SHIFT                  0
-#       define R128_WMB_SHIFT                  8
-#       define R128_WMC_SHIFT                 16
-#       define R128_WB_WM_SHIFT               24
-#define R128_PM4_BUFFER_DL_RPTR_ADDR      0x070c
-#define R128_PM4_BUFFER_DL_RPTR           0x0710
-#define R128_PM4_BUFFER_DL_WPTR           0x0714
-#       define R128_PM4_BUFFER_DL_DONE    (1 << 31)
-#define R128_PM4_BUFFER_DL_WPTR_DELAY     0x0718
-#       define R128_PRE_WRITE_TIMER_SHIFT      0
-#       define R128_PRE_WRITE_LIMIT_SHIFT     23
-#define R128_PM4_VC_FPU_SETUP             0x071c
-#       define R128_FRONT_DIR_CW          (0 <<  0)
-#       define R128_FRONT_DIR_CCW         (1 <<  0)
-#       define R128_FRONT_DIR_MASK        (1 <<  0)
-#       define R128_BACKFACE_CULL         (0 <<  1)
-#       define R128_BACKFACE_POINTS       (1 <<  1)
-#       define R128_BACKFACE_LINES        (2 <<  1)
-#       define R128_BACKFACE_SOLID        (3 <<  1)
-#       define R128_BACKFACE_MASK         (3 <<  1)
-#       define R128_FRONTFACE_CULL        (0 <<  3)
-#       define R128_FRONTFACE_POINTS      (1 <<  3)
-#       define R128_FRONTFACE_LINES       (2 <<  3)
-#       define R128_FRONTFACE_SOLID       (3 <<  3)
-#       define R128_FRONTFACE_MASK        (3 <<  3)
-#       define R128_FPU_COLOR_SOLID       (0 <<  5)
-#       define R128_FPU_COLOR_FLAT        (1 <<  5)
-#       define R128_FPU_COLOR_GOURAUD     (2 <<  5)
-#       define R128_FPU_COLOR_GOURAUD2    (3 <<  5)
-#       define R128_FPU_COLOR_MASK        (3 <<  5)
-#       define R128_FPU_SUB_PIX_2BITS     (0 <<  7)
-#       define R128_FPU_SUB_PIX_4BITS     (1 <<  7)
-#       define R128_FPU_MODE_2D           (0 <<  8)
-#       define R128_FPU_MODE_3D           (1 <<  8)
-#       define R128_TRAP_BITS_DISABLE     (1 <<  9)
-#       define R128_EDGE_ANTIALIAS        (1 << 10)
-#       define R128_SUPERSAMPLE           (1 << 11)
-#       define R128_XFACTOR_2             (0 << 12)
-#       define R128_XFACTOR_4             (1 << 12)
-#       define R128_YFACTOR_2             (0 << 13)
-#       define R128_YFACTOR_4             (1 << 13)
-#       define R128_FLAT_SHADE_VERTEX_D3D (0 << 14)
-#       define R128_FLAT_SHADE_VERTEX_OGL (1 << 14)
-#       define R128_FPU_ROUND_TRUNCATE    (0 << 15)
-#       define R128_FPU_ROUND_NEAREST     (1 << 15)
-#       define R128_WM_SEL_8DW            (0 << 16)
-#       define R128_WM_SEL_16DW           (1 << 16)
-#       define R128_WM_SEL_32DW           (2 << 16)
-#define R128_PM4_VC_DEBUG_CONFIG          0x07a4
-#define R128_PM4_VC_STAT                  0x07a8
-#define R128_PM4_VC_TIMESTAMP0            0x07b0
-#define R128_PM4_VC_TIMESTAMP1            0x07b4
-#define R128_PM4_STAT                     0x07b8
-#       define R128_PM4_FIFOCNT_MASK      0x0fff
-#       define R128_PM4_BUSY              (1 << 16)
-#       define R128_PM4_GUI_ACTIVE        (1 << 31)
-#define R128_PM4_BUFFER_ADDR              0x07f0
-#define R128_PM4_MICRO_CNTL               0x07fc
-#       define R128_PM4_MICRO_FREERUN     (1 << 30)
-#define R128_PM4_FIFO_DATA_EVEN           0x1000
-#define R128_PM4_FIFO_DATA_ODD            0x1004
-
-#define R128_SCALE_3D_CNTL                0x1a00
-#       define R128_SCALE_DITHER_ERR_DIFF         (0  <<  1)
-#       define R128_SCALE_DITHER_TABLE            (1  <<  1)
-#       define R128_TEX_CACHE_SIZE_FULL           (0  <<  2)
-#       define R128_TEX_CACHE_SIZE_HALF           (1  <<  2)
-#       define R128_DITHER_INIT_CURR              (0  <<  3)
-#       define R128_DITHER_INIT_RESET             (1  <<  3)
-#       define R128_ROUND_24BIT                   (1  <<  4)
-#       define R128_TEX_CACHE_DISABLE             (1  <<  5)
-#       define R128_SCALE_3D_NOOP                 (0  <<  6)
-#       define R128_SCALE_3D_SCALE                (1  <<  6)
-#       define R128_SCALE_3D_TEXMAP_SHADE         (2  <<  6)
-#       define R128_SCALE_PIX_BLEND               (0  <<  8)
-#       define R128_SCALE_PIX_REPLICATE           (1  <<  8)
-#       define R128_TEX_CACHE_SPLIT               (1  <<  9)
-#       define R128_APPLE_YUV_MODE                (1  << 10)
-#       define R128_TEX_CACHE_PALLETE_MODE        (1  << 11)
-#       define R128_ALPHA_COMB_ADD_CLAMP          (0  << 12)
-#       define R128_ALPHA_COMB_ADD_NCLAMP         (1  << 12)
-#       define R128_ALPHA_COMB_SUB_SRC_DST_CLAMP  (2  << 12)
-#       define R128_ALPHA_COMB_SUB_SRC_DST_NCLAMP (3  << 12)
-#       define R128_ALPHA_COMB_FCN_MASK           (3  << 12)
-#       define R128_FOG_VERTEX                    (0  << 14)
-#       define R128_FOG_TABLE                     (1  << 14)
-#       define R128_SIGNED_DST_CLAMP              (1  << 15)
-
-#       define R128_ALPHA_BLEND_ZERO              (0 )
-#       define R128_ALPHA_BLEND_ONE               (1 )
-#       define R128_ALPHA_BLEND_SRCCOLOR          (2 )
-#       define R128_ALPHA_BLEND_INVSRCCOLOR       (3 )
-#       define R128_ALPHA_BLEND_SRCALPHA          (4 )
-#       define R128_ALPHA_BLEND_INVSRCALPHA       (5 )
-#       define R128_ALPHA_BLEND_DSTALPHA          (6 )
-#       define R128_ALPHA_BLEND_INVDSTALPHA       (7 )
-#       define R128_ALPHA_BLEND_DSTCOLOR          (8 )
-#       define R128_ALPHA_BLEND_INVDSTCOLOR       (9 )
-#       define R128_ALPHA_BLEND_SAT               (10) /* aka SRCALPHASAT */
-#       define R128_ALPHA_BLEND_BLEND             (11) /* aka BOTHSRCALPHA */
-#       define R128_ALPHA_BLEND_INVBLEND          (12) /* aka BOTHINVSRCALPHA */
-#       define R128_ALPHA_BLEND_MASK              (15)
-
-#       define R128_ALPHA_BLEND_SRC_SHIFT         (16)
-#       define R128_ALPHA_BLEND_DST_SHIFT         (20)
-
-#       define R128_ALPHA_TEST_NEVER              (0  << 24)
-#       define R128_ALPHA_TEST_LESS               (1  << 24)
-#       define R128_ALPHA_TEST_LESSEQUAL          (2  << 24)
-#       define R128_ALPHA_TEST_EQUAL              (3  << 24)
-#       define R128_ALPHA_TEST_GREATEREQUAL       (4  << 24)
-#       define R128_ALPHA_TEST_GREATER            (5  << 24)
-#       define R128_ALPHA_TEST_NEQUAL             (6  << 24)
-#       define R128_ALPHA_TEST_ALWAYS             (7  << 24)
-#       define R128_ALPHA_TEST_MASK               (7  << 24)
-#       define R128_COMPOSITE_SHADOW_CMP_EQUAL    (0  << 28)
-#       define R128_COMPOSITE_SHADOW_CMP_NEQUAL   (1  << 28)
-#       define R128_COMPOSITE_SHADOW              (1  << 29)
-#       define R128_TEX_MAP_ALPHA_IN_TEXTURE      (1  << 30)
-#       define R128_TEX_CACHE_LINE_SIZE_8QW       (0  << 31)
-#       define R128_TEX_CACHE_LINE_SIZE_4QW       (1  << 31)
-#define R128_SCALE_3D_DATATYPE            0x1a20
-
-#define R128_SETUP_CNTL                   0x1bc4
-#       define R128_DONT_START_TRIANGLE   (1 <<  0)
-#       define R128_Z_BIAS                (0 <<  1)
-#       define R128_DONT_START_ANY_ON     (1 <<  2)
-#       define R128_COLOR_SOLID_COLOR     (0 <<  3)
-#       define R128_COLOR_FLAT_VERT_1     (1 <<  3)
-#       define R128_COLOR_FLAT_VERT_2     (2 <<  3)
-#       define R128_COLOR_FLAT_VERT_3     (3 <<  3)
-#       define R128_COLOR_GOURAUD         (4 <<  3)
-#       define R128_PRIM_TYPE_TRI         (0 <<  7)
-#       define R128_PRIM_TYPE_LINE        (1 <<  7)
-#       define R128_PRIM_TYPE_POINT       (2 <<  7)
-#       define R128_PRIM_TYPE_POLY_EDGE   (3 <<  7)
-#       define R128_TEXTURE_ST_MULT_W     (0 <<  9)
-#       define R128_TEXTURE_ST_DIRECT     (1 <<  9)
-#       define R128_STARTING_VERTEX_1     (1 << 14)
-#       define R128_STARTING_VERTEX_2     (2 << 14)
-#       define R128_STARTING_VERTEX_3     (3 << 14)
-#       define R128_ENDING_VERTEX_1       (1 << 16)
-#       define R128_ENDING_VERTEX_2       (2 << 16)
-#       define R128_ENDING_VERTEX_3       (3 << 16)
-#       define R128_SU_POLY_LINE_LAST     (0 << 18)
-#       define R128_SU_POLY_LINE_NOT_LAST (1 << 18)
-#       define R128_SUB_PIX_2BITS         (0 << 19)
-#       define R128_SUB_PIX_4BITS         (1 << 19)
-#       define R128_SET_UP_CONTINUE       (1 << 31)
-
-#define R128_WINDOW_XY_OFFSET             0x1bcc
-#       define R128_WINDOW_Y_SHIFT        4
-#       define R128_WINDOW_X_SHIFT        20
-
-#define R128_Z_OFFSET_C                   0x1c90
-#define R128_Z_PITCH_C                    0x1c94
-#       define R128_Z_TILE                    (1 << 16)
-#define R128_Z_STEN_CNTL_C                0x1c98
-#       define R128_Z_PIX_WIDTH_16            (0 <<  1)
-#       define R128_Z_PIX_WIDTH_24            (1 <<  1)
-#       define R128_Z_PIX_WIDTH_32            (2 <<  1)
-#       define R128_Z_PIX_WIDTH_MASK          (3 <<  1)
-#       define R128_Z_TEST_NEVER              (0 <<  4)
-#       define R128_Z_TEST_LESS               (1 <<  4)
-#       define R128_Z_TEST_LESSEQUAL          (2 <<  4)
-#       define R128_Z_TEST_EQUAL              (3 <<  4)
-#       define R128_Z_TEST_GREATEREQUAL       (4 <<  4)
-#       define R128_Z_TEST_GREATER            (5 <<  4)
-#       define R128_Z_TEST_NEQUAL             (6 <<  4)
-#       define R128_Z_TEST_ALWAYS             (7 <<  4)
-#       define R128_Z_TEST_MASK               (7 <<  4)
-#       define R128_STENCIL_TEST_NEVER        (0 << 12)
-#       define R128_STENCIL_TEST_LESS         (1 << 12)
-#       define R128_STENCIL_TEST_LESSEQUAL    (2 << 12)
-#       define R128_STENCIL_TEST_EQUAL        (3 << 12)
-#       define R128_STENCIL_TEST_GREATEREQUAL (4 << 12)
-#       define R128_STENCIL_TEST_GREATER      (5 << 12)
-#       define R128_STENCIL_TEST_NEQUAL       (6 << 12)
-#       define R128_STENCIL_TEST_ALWAYS       (7 << 12)
-#       define R128_STENCIL_S_FAIL_KEEP       (0 << 16)
-#       define R128_STENCIL_S_FAIL_ZERO       (1 << 16)
-#       define R128_STENCIL_S_FAIL_REPLACE    (2 << 16)
-#       define R128_STENCIL_S_FAIL_INC        (3 << 16)
-#       define R128_STENCIL_S_FAIL_DEC        (4 << 16)
-#       define R128_STENCIL_S_FAIL_INV        (5 << 16)
-#       define R128_STENCIL_ZPASS_KEEP        (0 << 20)
-#       define R128_STENCIL_ZPASS_ZERO        (1 << 20)
-#       define R128_STENCIL_ZPASS_REPLACE     (2 << 20)
-#       define R128_STENCIL_ZPASS_INC         (3 << 20)
-#       define R128_STENCIL_ZPASS_DEC         (4 << 20)
-#       define R128_STENCIL_ZPASS_INV         (5 << 20)
-#       define R128_STENCIL_ZFAIL_KEEP        (0 << 24)
-#       define R128_STENCIL_ZFAIL_ZERO        (1 << 24)
-#       define R128_STENCIL_ZFAIL_REPLACE     (2 << 24)
-#       define R128_STENCIL_ZFAIL_INC         (3 << 24)
-#       define R128_STENCIL_ZFAIL_DEC         (4 << 24)
-#       define R128_STENCIL_ZFAIL_INV         (5 << 24)
-#define R128_TEX_CNTL_C                   0x1c9c
-#       define R128_Z_ENABLE                   (1 <<  0)
-#       define R128_Z_WRITE_ENABLE             (1 <<  1)
-#       define R128_STENCIL_ENABLE             (1 <<  3)
-#       define R128_SHADE_ENABLE               (0 <<  4)
-#       define R128_TEXMAP_ENABLE              (1 <<  4)
-#       define R128_SEC_TEXMAP_ENABLE          (1 <<  5)
-#       define R128_FOG_ENABLE                 (1 <<  7)
-#       define R128_DITHER_ENABLE              (1 <<  8)
-#       define R128_ALPHA_ENABLE               (1 <<  9)
-#       define R128_ALPHA_TEST_ENABLE          (1 << 10)
-#       define R128_SPEC_LIGHT_ENABLE          (1 << 11)
-#       define R128_TEX_CHROMA_KEY_ENABLE      (1 << 12)
-#       define R128_ALPHA_IN_TEX_COMPLETE_A    (0 << 13)
-#       define R128_ALPHA_IN_TEX_LSB_A         (1 << 13)
-#       define R128_LIGHT_DIS                  (0 << 14)
-#       define R128_LIGHT_COPY                 (1 << 14)
-#       define R128_LIGHT_MODULATE             (2 << 14)
-#       define R128_LIGHT_ADD                  (3 << 14)
-#       define R128_LIGHT_BLEND_CONSTANT       (4 << 14)
-#       define R128_LIGHT_BLEND_TEXTURE        (5 << 14)
-#       define R128_LIGHT_BLEND_VERTEX         (6 << 14)
-#       define R128_LIGHT_BLEND_CONST_COLOR    (7 << 14)
-#       define R128_ALPHA_LIGHT_DIS            (0 << 18)
-#       define R128_ALPHA_LIGHT_COPY           (1 << 18)
-#       define R128_ALPHA_LIGHT_MODULATE       (2 << 18)
-#       define R128_ALPHA_LIGHT_ADD            (3 << 18)
-#       define R128_ANTI_ALIAS                 (1 << 21)
-#       define R128_TEX_CACHE_FLUSH            (1 << 23)
-#       define R128_LOD_BIAS_SHIFT             24
-#       define R128_LOD_BIAS_MASK              (0xff << 24)
-#define R128_MISC_3D_STATE_CNTL_REG       0x1ca0
-#       define R128_REF_ALPHA_MASK                  0xff
-#       define R128_MISC_SCALE_3D_NOOP              (0  <<  8)
-#       define R128_MISC_SCALE_3D_SCALE             (1  <<  8)
-#       define R128_MISC_SCALE_3D_TEXMAP_SHADE      (2  <<  8)
-#       define R128_MISC_SCALE_PIX_BLEND            (0  << 10)
-#       define R128_MISC_SCALE_PIX_REPLICATE        (1  << 10)
-/* Bits [14:12] are the same as R128_SCALE_3D_CNTL */
-/* Bit  [15]    is unknown */
-/* Bits [26:16] are the same as R128_SCALE_3D_CNTL */
-/* Bits [31:27] are unknown */
-
-#define R128_TEXTURE_CLR_CMP_CLR_C        0x1ca4
-#define R128_TEXTURE_CLR_CMP_MSK_C        0x1ca8
-#define R128_FOG_COLOR_C                  0x1cac
-#       define R128_FOG_BLUE_SHIFT             0
-#       define R128_FOG_GREEN_SHIFT            8
-#       define R128_FOG_RED_SHIFT             16
-#define R128_PRIM_TEX_CNTL_C              0x1cb0
-#       define R128_MIN_BLEND_NEAREST          (0  <<  1)
-#       define R128_MIN_BLEND_LINEAR           (1  <<  1)
-#       define R128_MIN_BLEND_MIPNEAREST       (2  <<  1)
-#       define R128_MIN_BLEND_MIPLINEAR        (3  <<  1)
-#       define R128_MIN_BLEND_LINEARMIPNEAREST (4  <<  1)
-#       define R128_MIN_BLEND_LINEARMIPLINEAR  (5  <<  1)
-#       define R128_MIN_BLEND_MASK             (7  <<  1)
-#       define R128_MAG_BLEND_NEAREST          (0  <<  4)
-#       define R128_MAG_BLEND_LINEAR           (1  <<  4)
-#       define R128_MAG_BLEND_MASK             (7  <<  4)
-#       define R128_MIP_MAP_DISABLE            (1  <<  7)
-#       define R128_TEX_CLAMP_S_WRAP           (0  <<  8)
-#       define R128_TEX_CLAMP_S_MIRROR         (1  <<  8)
-#       define R128_TEX_CLAMP_S_CLAMP          (2  <<  8)
-#       define R128_TEX_CLAMP_S_BORDER_COLOR   (3  <<  8)
-#       define R128_TEX_CLAMP_S_MASK           (3  <<  8)
-#       define R128_TEX_WRAP_S                 (1  << 10)
-#       define R128_TEX_CLAMP_T_WRAP           (0  << 11)
-#       define R128_TEX_CLAMP_T_MIRROR         (1  << 11)
-#       define R128_TEX_CLAMP_T_CLAMP          (2  << 11)
-#       define R128_TEX_CLAMP_T_BORDER_COLOR   (3  << 11)
-#       define R128_TEX_CLAMP_T_MASK           (3  << 11)
-#       define R128_TEX_WRAP_T                 (1  << 13)
-#       define R128_TEX_PERSPECTIVE_DISABLE    (1  << 14)
-#       define R128_DATATYPE_VQ                (0  << 16)
-#       define R128_DATATYPE_CI4               (1  << 16)
-#       define R128_DATATYPE_CI8               (2  << 16)
-#       define R128_DATATYPE_ARGB1555          (3  << 16)
-#       define R128_DATATYPE_RGB565            (4  << 16)
-#       define R128_DATATYPE_RGB888            (5  << 16)
-#       define R128_DATATYPE_ARGB8888          (6  << 16)
-#       define R128_DATATYPE_RGB332            (7  << 16)
-#       define R128_DATATYPE_Y8                (8  << 16)
-#       define R128_DATATYPE_RGB8              (9  << 16)
-#       define R128_DATATYPE_CI16              (10 << 16)
-#       define R128_DATATYPE_YVYU422           (11 << 16)
-#       define R128_DATATYPE_VYUY422           (12 << 16)
-#       define R128_DATATYPE_AYUV444           (14 << 16)
-#       define R128_DATATYPE_ARGB4444          (15 << 16)
-#       define R128_PALLETE_EITHER             (0  << 20)
-#       define R128_PALLETE_1                  (1  << 20)
-#       define R128_PALLETE_2                  (2  << 20)
-#       define R128_PSEUDOCOLOR_DT_RGB565      (0  << 24)
-#       define R128_PSEUDOCOLOR_DT_ARGB1555    (1  << 24)
-#       define R128_PSEUDOCOLOR_DT_ARGB4444    (2  << 24)
-#define R128_PRIM_TEXTURE_COMBINE_CNTL_C  0x1cb4
-#       define R128_COMB_DIS                   (0  <<  0)
-#       define R128_COMB_COPY                  (1  <<  0)
-#       define R128_COMB_COPY_INP              (2  <<  0)
-#       define R128_COMB_MODULATE              (3  <<  0)
-#       define R128_COMB_MODULATE2X            (4  <<  0)
-#       define R128_COMB_MODULATE4X            (5  <<  0)
-#       define R128_COMB_ADD                   (6  <<  0)
-#       define R128_COMB_ADD_SIGNED            (7  <<  0)
-#       define R128_COMB_BLEND_VERTEX          (8  <<  0)
-#       define R128_COMB_BLEND_TEXTURE         (9  <<  0)
-#       define R128_COMB_BLEND_CONST           (10 <<  0)
-#       define R128_COMB_BLEND_PREMULT         (11 <<  0)
-#       define R128_COMB_BLEND_PREV            (12 <<  0)
-#       define R128_COMB_BLEND_PREMULT_INV     (13 <<  0)
-#       define R128_COMB_ADD_SIGNED2X          (14 <<  0)
-#       define R128_COMB_BLEND_CONST_COLOR     (15 <<  0)
-#       define R128_COMB_MASK                  (15 <<  0)
-#       define R128_COLOR_FACTOR_CONST_COLOR   (0  <<  4)
-#       define R128_COLOR_FACTOR_NCONST_COLOR  (1  <<  4)
-#       define R128_COLOR_FACTOR_TEX           (4  <<  4)
-#       define R128_COLOR_FACTOR_NTEX          (5  <<  4)
-#       define R128_COLOR_FACTOR_ALPHA         (6  <<  4)
-#       define R128_COLOR_FACTOR_NALPHA        (7  <<  4)
-#       define R128_COLOR_FACTOR_PREV_COLOR    (8  <<  4)
-#       define R128_COLOR_FACTOR_MASK          (15 <<  4)
-#       define R128_COMB_FCN_MSB               (1  <<  8)
-#       define R128_INPUT_FACTOR_CONST_COLOR   (2  << 10)
-#       define R128_INPUT_FACTOR_CONST_ALPHA   (3  << 10)
-#       define R128_INPUT_FACTOR_INT_COLOR     (4  << 10)
-#       define R128_INPUT_FACTOR_INT_ALPHA     (5  << 10)
-#       define R128_INPUT_FACTOR_MASK          (15 << 10)
-#       define R128_COMB_ALPHA_DIS             (0  << 14)
-#       define R128_COMB_ALPHA_COPY            (1  << 14)
-#       define R128_COMB_ALPHA_COPY_INP        (2  << 14)
-#       define R128_COMB_ALPHA_MODULATE        (3  << 14)
-#       define R128_COMB_ALPHA_MODULATE2X      (4  << 14)
-#       define R128_COMB_ALPHA_MODULATE4X      (5  << 14)
-#       define R128_COMB_ALPHA_ADD             (6  << 14)
-#       define R128_COMB_ALPHA_ADD_SIGNED      (7  << 14)
-#       define R128_COMB_ALPHA_ADD_SIGNED2X    (14 << 14)
-#       define R128_COMB_ALPHA_MASK            (15 << 14)
-#       define R128_ALPHA_FACTOR_TEX_ALPHA     (6  << 18)
-#       define R128_ALPHA_FACTOR_NTEX_ALPHA    (7  << 18)
-#       define R128_ALPHA_FACTOR_MASK          (15 << 18)
-#       define R128_INP_FACTOR_A_CONST_ALPHA   (1  << 25)
-#       define R128_INP_FACTOR_A_INT_ALPHA     (2  << 25)
-#       define R128_INP_FACTOR_A_MASK          (7  << 25)
-#define R128_TEX_SIZE_PITCH_C             0x1cb8
-#       define R128_TEX_PITCH_SHIFT           0
-#       define R128_TEX_SIZE_SHIFT            4
-#       define R128_TEX_HEIGHT_SHIFT          8
-#       define R128_TEX_MIN_SIZE_SHIFT       12
-#       define R128_SEC_TEX_PITCH_SHIFT      16
-#       define R128_SEC_TEX_SIZE_SHIFT       20
-#       define R128_SEC_TEX_HEIGHT_SHIFT     24
-#       define R128_SEC_TEX_MIN_SIZE_SHIFT   28
-#       define R128_TEX_PITCH_MASK           (0x0f <<  0)
-#       define R128_TEX_SIZE_MASK            (0x0f <<  4)
-#       define R128_TEX_HEIGHT_MASK          (0x0f <<  8)
-#       define R128_TEX_MIN_SIZE_MASK        (0x0f << 12)
-#       define R128_SEC_TEX_PITCH_MASK       (0x0f << 16)
-#       define R128_SEC_TEX_SIZE_MASK        (0x0f << 20)
-#       define R128_SEC_TEX_HEIGHT_MASK      (0x0f << 24)
-#       define R128_SEC_TEX_MIN_SIZE_MASK    (0x0f << 28)
-#       define R128_TEX_SIZE_PITCH_SHIFT      0
-#       define R128_SEC_TEX_SIZE_PITCH_SHIFT 16
-#       define R128_TEX_SIZE_PITCH_MASK      (0xffff <<  0)
-#       define R128_SEC_TEX_SIZE_PITCH_MASK  (0xffff << 16)
-#define R128_PRIM_TEX_0_OFFSET_C          0x1cbc
-#define R128_PRIM_TEX_1_OFFSET_C          0x1cc0
-#define R128_PRIM_TEX_2_OFFSET_C          0x1cc4
-#define R128_PRIM_TEX_3_OFFSET_C          0x1cc8
-#define R128_PRIM_TEX_4_OFFSET_C          0x1ccc
-#define R128_PRIM_TEX_5_OFFSET_C          0x1cd0
-#define R128_PRIM_TEX_6_OFFSET_C          0x1cd4
-#define R128_PRIM_TEX_7_OFFSET_C          0x1cd8
-#define R128_PRIM_TEX_8_OFFSET_C          0x1cdc
-#define R128_PRIM_TEX_9_OFFSET_C          0x1ce0
-#define R128_PRIM_TEX_10_OFFSET_C         0x1ce4
-#       define R128_TEX_NO_TILE           (0 << 30)
-#       define R128_TEX_TILED_BY_HOST     (1 << 30)
-#       define R128_TEX_TILED_BY_STORAGE  (2 << 30)
-#       define R128_TEX_TILED_BY_STORAGE2 (3 << 30)
-
-#define R128_SEC_TEX_CNTL_C               0x1d00
-#       define R128_SEC_SELECT_PRIM_ST    (0  <<  0)
-#       define R128_SEC_SELECT_SEC_ST     (1  <<  0)
-#define R128_SEC_TEX_COMBINE_CNTL_C       0x1d04
-#       define R128_INPUT_FACTOR_PREV_COLOR (8  << 10)
-#       define R128_INPUT_FACTOR_PREV_ALPHA (9  << 10)
-#       define R128_INP_FACTOR_A_PREV_ALPHA (4  << 25)
-#define R128_SEC_TEX_0_OFFSET_C           0x1d08
-#define R128_SEC_TEX_1_OFFSET_C           0x1d0c
-#define R128_SEC_TEX_2_OFFSET_C           0x1d10
-#define R128_SEC_TEX_3_OFFSET_C           0x1d14
-#define R128_SEC_TEX_4_OFFSET_C           0x1d18
-#define R128_SEC_TEX_5_OFFSET_C           0x1d1c
-#define R128_SEC_TEX_6_OFFSET_C           0x1d20
-#define R128_SEC_TEX_7_OFFSET_C           0x1d24
-#define R128_SEC_TEX_8_OFFSET_C           0x1d28
-#define R128_SEC_TEX_9_OFFSET_C           0x1d2c
-#define R128_SEC_TEX_10_OFFSET_C          0x1d30
-#define R128_CONSTANT_COLOR_C             0x1d34
-#       define R128_CONSTANT_BLUE_SHIFT        0
-#       define R128_CONSTANT_GREEN_SHIFT       8
-#       define R128_CONSTANT_RED_SHIFT        16
-#       define R128_CONSTANT_ALPHA_SHIFT      24
-#define R128_PRIM_TEXTURE_BORDER_COLOR_C  0x1d38
-#       define R128_PRIM_TEX_BORDER_BLUE_SHIFT   0
-#       define R128_PRIM_TEX_BORDER_GREEN_SHIFT  8
-#       define R128_PRIM_TEX_BORDER_RED_SHIFT   16
-#       define R128_PRIM_TEX_BORDER_ALPHA_SHIFT 24
-#define R128_SEC_TEXTURE_BORDER_COLOR_C   0x1d3c
-#       define R128_SEC_TEX_BORDER_BLUE_SHIFT   0
-#       define R128_SEC_TEX_BORDER_GREEN_SHIFT  8
-#       define R128_SEC_TEX_BORDER_RED_SHIFT   16
-#       define R128_SEC_TEX_BORDER_ALPHA_SHIFT 24
-#define R128_STEN_REF_MASK_C              0x1d40
-#       define R128_STEN_REFERENCE_SHIFT       0
-#       define R128_STEN_MASK_SHIFT           16
-#       define R128_STEN_WRITE_MASK_SHIFT     24
-#define R128_PLANE_3D_MASK_C              0x1d44
-#define R128_TEX_CACHE_STAT_COUNT         0x1974
-
-
-				/* Constants */
-#define R128_AGP_TEX_OFFSET               0x02000000
-
-#define R128_LAST_FRAME_REG               R128_GUI_SCRATCH_REG0
-
-				/* CCE packet types */
-#define R128_CCE_PACKET0                         0x00000000
-#define R128_CCE_PACKET0_ONE_REG_WR              0x00008000
-#define R128_CCE_PACKET1                         0x40000000
-#define R128_CCE_PACKET2                         0x80000000
-#define R128_CCE_PACKET3                         0xC0000000
-#define R128_CCE_PACKET3_NOP                     0xC0001000
-#define R128_CCE_PACKET3_PAINT                   0xC0001100
-#define R128_CCE_PACKET3_BITBLT                  0xC0001200
-#define R128_CCE_PACKET3_SMALLTEXT               0xC0001300
-#define R128_CCE_PACKET3_HOSTDATA_BLT            0xC0001400
-#define R128_CCE_PACKET3_POLYLINE                0xC0001500
-#define R128_CCE_PACKET3_SCALING                 0xC0001600
-#define R128_CCE_PACKET3_TRANS_SCALING           0xC0001700
-#define R128_CCE_PACKET3_POLYSCANLINES           0xC0001800
-#define R128_CCE_PACKET3_NEXT_CHAR               0xC0001900
-#define R128_CCE_PACKET3_PAINT_MULTI             0xC0001A00
-#define R128_CCE_PACKET3_BITBLT_MULTI            0xC0001B00
-#define R128_CCE_PACKET3_PLY_NEXTSCAN            0xC0001D00
-#define R128_CCE_PACKET3_SET_SCISSORS            0xC0001E00
-#define R128_CCE_PACKET3_SET_MODE24BPP           0xC0001F00
-#define R128_CCE_PACKET3_CNTL_PAINT              0xC0009100
-#define R128_CCE_PACKET3_CNTL_BITBLT             0xC0009200
-#define R128_CCE_PACKET3_CNTL_SMALLTEXT          0xC0009300
-#define R128_CCE_PACKET3_CNTL_HOSTDATA_BLT       0xC0009400
-#define R128_CCE_PACKET3_CNTL_POLYLINE           0xC0009500
-#define R128_CCE_PACKET3_CNTL_SCALING            0xC0009600
-#define R128_CCE_PACKET3_CNTL_TRANS_SCALING      0xC0009700
-#define R128_CCE_PACKET3_CNTL_POLYSCANLINES      0xC0009800
-#define R128_CCE_PACKET3_CNTL_NEXT_CHAR          0xC0009900
-#define R128_CCE_PACKET3_CNTL_PAINT_MULTI        0xC0009A00
-#define R128_CCE_PACKET3_CNTL_BITBLT_MULTI       0xC0009B00
-#define R128_CCE_PACKET3_CNTL_TRANS_BITBLT       0xC0009C00
-#define R128_CCE_PACKET3_3D_SAVE_CONTEXT         0xC0002000
-#define R128_CCE_PACKET3_3D_PLAY_CONTEXT         0xC0002100
-#define R128_CCE_PACKET3_3D_RNDR_GEN_INDX_PRIM   0xC0002300
-#define R128_CCE_PACKET3_3D_RNDR_GEN_PRIM        0xC0002500
-#define R128_CCE_PACKET3_LOAD_PALETTE            0xC0002C00
-#define R128_CCE_PACKET3_PURGE                   0xC0002D00
-#define R128_CCE_PACKET3_NEXT_VERTEX_BUNDLE      0xC0002E00
-#       define R128_CCE_PACKET_MASK              0xC0000000
-#       define R128_CCE_PACKET_COUNT_MASK        0x3fff0000
-#       define R128_CCE_PACKET_MAX_DWORDS        (1 << 12)
-#       define R128_CCE_PACKET0_REG_MASK         0x000007ff
-#       define R128_CCE_PACKET1_REG0_MASK        0x000007ff
-#       define R128_CCE_PACKET1_REG1_MASK        0x003ff800
-
-#define R128_CCE_VC_FRMT_RHW                     0x00000001
-#define R128_CCE_VC_FRMT_DIFFUSE_BGR             0x00000002
-#define R128_CCE_VC_FRMT_DIFFUSE_A               0x00000004
-#define R128_CCE_VC_FRMT_DIFFUSE_ARGB            0x00000008
-#define R128_CCE_VC_FRMT_SPEC_BGR                0x00000010
-#define R128_CCE_VC_FRMT_SPEC_F                  0x00000020
-#define R128_CCE_VC_FRMT_SPEC_FRGB               0x00000040
-#define R128_CCE_VC_FRMT_S_T                     0x00000080
-#define R128_CCE_VC_FRMT_S2_T2                   0x00000100
-#define R128_CCE_VC_FRMT_RHW2                    0x00000200
-
-#define R128_CCE_VC_CNTL_PRIM_TYPE_NONE          0x00000000
-#define R128_CCE_VC_CNTL_PRIM_TYPE_POINT         0x00000001
-#define R128_CCE_VC_CNTL_PRIM_TYPE_LINE          0x00000002
-#define R128_CCE_VC_CNTL_PRIM_TYPE_POLY_LINE     0x00000003
-#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_LIST      0x00000004
-#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_FAN       0x00000005
-#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_STRIP     0x00000006
-#define R128_CCE_VC_CNTL_PRIM_TYPE_TRI_TYPE2     0x00000007
-#define R128_CCE_VC_CNTL_PRIM_WALK_IND           0x00000010
-#define R128_CCE_VC_CNTL_PRIM_WALK_LIST          0x00000020
-#define R128_CCE_VC_CNTL_PRIM_WALK_RING          0x00000030
-#define R128_CCE_VC_CNTL_NUM_SHIFT               16
-
-/* hmm copyed blindly (no specs) from radeon.h ... */
-#define R128_RE_TOP_LEFT                  0x26c0
-#       define R128_RE_LEFT_SHIFT         0
-#       define R128_RE_TOP_SHIFT          16
-#define R128_RE_WIDTH_HEIGHT              0x1c44
-#       define R128_RE_WIDTH_SHIFT        0
-#       define R128_RE_HEIGHT_SHIFT       16
-
-#endif
diff --git a/src/r128_sarea.h b/src/r128_sarea.h
deleted file mode 100644
index 70f9122..0000000
--- a/src/r128_sarea.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Kevin E. Martin <martin at valinux.com>
- *   Gareth Hughes <gareth at valinux.com>
- *
- */
-
-#ifndef _R128_SAREA_H_
-#define _R128_SAREA_H_
-
-#include <X11/Xmd.h>
-
-/* WARNING: If you change any of these defines, make sure to change the
- * defines in the kernel file (r128_drm.h)
- */
-#ifndef __R128_SAREA_DEFINES__
-#define __R128_SAREA_DEFINES__
-
-/* What needs to be changed for the current vertex buffer?
- */
-#define R128_UPLOAD_CONTEXT		0x001
-#define R128_UPLOAD_SETUP		0x002
-#define R128_UPLOAD_TEX0		0x004
-#define R128_UPLOAD_TEX1		0x008
-#define R128_UPLOAD_TEX0IMAGES		0x010
-#define R128_UPLOAD_TEX1IMAGES		0x020
-#define R128_UPLOAD_CORE		0x040
-#define R128_UPLOAD_MASKS		0x080
-#define R128_UPLOAD_WINDOW		0x100
-#define R128_UPLOAD_CLIPRECTS		0x200	/* handled client-side */
-#define R128_REQUIRE_QUIESCENCE		0x400
-#define R128_UPLOAD_ALL			0x7ff
-
-#define R128_FRONT			0x1
-#define R128_BACK			0x2
-#define R128_DEPTH			0x4
-
-/* Primitive types
- */
-#define R128_POINTS			0x1
-#define R128_LINES			0x2
-#define R128_LINE_STRIP			0x3
-#define R128_TRIANGLES			0x4
-#define R128_TRIANGLE_FAN		0x5
-#define R128_TRIANGLE_STRIP		0x6
-
-/* Vertex/indirect buffer size
- */
-#define R128_BUFFER_SIZE		16384
-
-/* Byte offsets for indirect buffer data
- */
-#define R128_INDEX_PRIM_OFFSET		20
-#define R128_HOSTDATA_BLIT_OFFSET	32
-
-/* Keep these small for testing
- */
-#define R128_NR_SAREA_CLIPRECTS		12
-
-/* There are 2 heaps (local/AGP).  Each region within a heap is a
- * minimum of 64k, and there are at most 64 of them per heap.
- */
-#define R128_CARD_HEAP			0
-#define R128_AGP_HEAP			1
-#define R128_NR_TEX_HEAPS		2
-#define R128_NR_TEX_REGIONS		64
-#define R128_LOG_TEX_GRANULARITY	16
-
-#define R128_NR_CONTEXT_REGS		12
-
-#define R128_MAX_TEXTURE_LEVELS		11
-#define R128_MAX_TEXTURE_UNITS		2
-
-#endif /* __R128_SAREA_DEFINES__ */
-
-typedef struct {
-    /* Context state - can be written in one large chunk */
-    unsigned int dst_pitch_offset_c;
-    unsigned int dp_gui_master_cntl_c;
-    unsigned int sc_top_left_c;
-    unsigned int sc_bottom_right_c;
-    unsigned int z_offset_c;
-    unsigned int z_pitch_c;
-    unsigned int z_sten_cntl_c;
-    unsigned int tex_cntl_c;
-    unsigned int misc_3d_state_cntl_reg;
-    unsigned int texture_clr_cmp_clr_c;
-    unsigned int texture_clr_cmp_msk_c;
-    unsigned int fog_color_c;
-
-    /* Texture state */
-    unsigned int tex_size_pitch_c;
-    unsigned int constant_color_c;
-
-    /* Setup state */
-    unsigned int pm4_vc_fpu_setup;
-    unsigned int setup_cntl;
-
-    /* Mask state */
-    unsigned int dp_write_mask;
-    unsigned int sten_ref_mask_c;
-    unsigned int plane_3d_mask_c;
-
-    /* Window state */
-    unsigned int window_xy_offset;
-
-    /* Core state */
-    unsigned int scale_3d_cntl;
-} r128_context_regs_t;
-
-/* Setup registers for each texture unit
- */
-typedef struct {
-    unsigned int tex_cntl;
-    unsigned int tex_combine_cntl;
-    unsigned int tex_size_pitch;
-    unsigned int tex_offset[R128_MAX_TEXTURE_LEVELS];
-    unsigned int tex_border_color;
-} r128_texture_regs_t;
-
-typedef struct {
-    /* The channel for communication of state information to the kernel
-     * on firing a vertex buffer.
-     */
-    r128_context_regs_t	ContextState;
-    r128_texture_regs_t	TexState[R128_MAX_TEXTURE_UNITS];
-    unsigned int dirty;
-    unsigned int vertsize;
-    unsigned int vc_format;
-
-    /* The current cliprects, or a subset thereof.
-     */
-    drm_clip_rect_t boxes[R128_NR_SAREA_CLIPRECTS];
-    unsigned int nbox;
-
-    /* Counters for throttling of rendering clients.
-     */
-    unsigned int last_frame;
-    unsigned int last_dispatch;
-
-    /* Maintain an LRU of contiguous regions of texture space.  If you
-     * think you own a region of texture memory, and it has an age
-     * different to the one you set, then you are mistaken and it has
-     * been stolen by another client.  If global texAge hasn't changed,
-     * there is no need to walk the list.
-     *
-     * These regions can be used as a proxy for the fine-grained texture
-     * information of other clients - by maintaining them in the same
-     * lru which is used to age their own textures, clients have an
-     * approximate lru for the whole of global texture space, and can
-     * make informed decisions as to which areas to kick out.  There is
-     * no need to choose whether to kick out your own texture or someone
-     * else's - simply eject them all in LRU order.
-     */
-				/* Last elt is sentinal */
-    drmTextureRegion texList[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS+1];
-				/* last time texture was uploaded */
-    unsigned int texAge[R128_NR_TEX_HEAPS];
-
-    int ctxOwner;		/* last context to upload state */
-    int pfAllowPageFlip;	/* set by the 2d driver, read by the client */
-    int pfCurrentPage;		/* set by kernel, read by others */
-} R128SAREAPriv, *R128SAREAPrivPtr;
-
-#endif
diff --git a/src/r128_version.h b/src/r128_version.h
deleted file mode 100644
index 3e02a90..0000000
--- a/src/r128_version.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _R128_VERSION_H_
-#define _R128_VERSION_H_ 1
-
-#undef  R128_NAME
-#undef  R128_DRIVER_NAME
-#undef  R128_VERSION_MAJOR
-#undef  R128_VERSION_MINOR
-#undef  R128_VERSION_PATCH
-#undef  R128_VERSION_CURRENT
-#undef  R128_VERSION_EVALUATE
-#undef  R128_VERSION_STRINGIFY
-#undef  R128_VERSION_NAME
-
-#define R128_NAME          "R128"
-#define R128_DRIVER_NAME   "r128"
-
-#define R128_VERSION_MAJOR 4
-#define R128_VERSION_MINOR 1
-#define R128_VERSION_PATCH 0
-
-#ifndef R128_VERSION_EXTRA
-#define R128_VERSION_EXTRA ""
-#endif
-
-#define R128_VERSION_CURRENT \
-    ((R128_VERSION_MAJOR << 20) | \
-     (R128_VERSION_MINOR << 10) | \
-     (R128_VERSION_PATCH))
-
-#define R128_VERSION_EVALUATE(__x) #__x
-#define R128_VERSION_STRINGIFY(_x) R128_VERSION_EVALUATE(_x)
-#define R128_VERSION_NAME                                         \
-    R128_VERSION_STRINGIFY(R128_VERSION_MAJOR) "."                \
-    R128_VERSION_STRINGIFY(R128_VERSION_MINOR) "."                \
-    R128_VERSION_STRINGIFY(R128_VERSION_MINOR) R128_VERSION_EXTRA
-
-#endif /* _R128_VERSION_H_ */
diff --git a/src/r128_video.c b/src/r128_video.c
deleted file mode 100644
index 8e83323..0000000
--- a/src/r128_video.c
+++ /dev/null
@@ -1,1028 +0,0 @@
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "r128.h"
-#include "r128_reg.h"
-
-#ifdef XF86DRI
-#include "r128_common.h"
-#include "r128_sarea.h"
-#endif
-
-#include "xf86.h"
-#include "dixstruct.h"
-
-#include <X11/extensions/Xv.h>
-#include "fourcc.h"
-
-#define OFF_DELAY       250  /* milliseconds */
-#define FREE_DELAY      15000
-
-#define OFF_TIMER       0x01
-#define FREE_TIMER      0x02
-#define CLIENT_VIDEO_ON 0x04
-
-#define TIMER_MASK      (OFF_TIMER | FREE_TIMER)
-
-static XF86VideoAdaptorPtr R128SetupImageVideo(ScreenPtr);
-static int  R128SetPortAttribute(ScrnInfoPtr, Atom, INT32, pointer);
-static int  R128GetPortAttribute(ScrnInfoPtr, Atom ,INT32 *, pointer);
-static void R128StopVideo(ScrnInfoPtr, pointer, Bool);
-static void R128QueryBestSize(ScrnInfoPtr, Bool, short, short, short, short,
-			unsigned int *, unsigned int *, pointer);
-static int  R128PutImage(ScrnInfoPtr, short, short, short, short, short,
-			short, short, short, int, unsigned char*, short,
-			short, Bool, RegionPtr, pointer, DrawablePtr);
-static int  R128QueryImageAttributes(ScrnInfoPtr, int, unsigned short *,
-			unsigned short *,  int *, int *);
-
-
-static void R128ResetVideo(ScrnInfoPtr);
-
-static void R128VideoTimerCallback(ScrnInfoPtr pScrn, Time now);
-
-
-#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
-
-static Atom xvBrightness, xvColorKey, xvSaturation, xvDoubleBuffer;
-
-
-typedef struct {
-   int           brightness;
-   int           saturation;
-   Bool          doubleBuffer;
-   unsigned char currentBuffer;
-   FBLinearPtr   linear;
-   RegionRec     clip;
-   CARD32        colorKey;
-   CARD32        videoStatus;
-   Time          offTime;
-   Time          freeTime;
-   int           ecp_div;
-} R128PortPrivRec, *R128PortPrivPtr;
-
-static void R128ECP(ScrnInfoPtr pScrn, R128PortPrivPtr pPriv)
-{
-    R128InfoPtr     info      = R128PTR(pScrn);
-    unsigned char   *R128MMIO = info->MMIO;
-    int             dot_clock = info->ModeReg.dot_clock_freq;
-
-    if (dot_clock < 12500)      pPriv->ecp_div = 0;
-    else if (dot_clock < 25000) pPriv->ecp_div = 1;
-    else                        pPriv->ecp_div = 2;
-
-    OUTPLLP(pScrn, R128_VCLK_ECP_CNTL, pPriv->ecp_div<<8, ~R128_ECP_DIV_MASK);
-}
-
-void R128InitVideo(ScreenPtr pScreen)
-{
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-    XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
-    XF86VideoAdaptorPtr newAdaptor = NULL;
-    int num_adaptors;
-
-    newAdaptor = R128SetupImageVideo(pScreen);
-
-    num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors);
-
-    if(newAdaptor) {
-	if(!num_adaptors) {
-	    num_adaptors = 1;
-	    adaptors = &newAdaptor;
-	} else {
-	    newAdaptors =  /* need to free this someplace */
-		xalloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr*));
-	    if(newAdaptors) {
-		memcpy(newAdaptors, adaptors, num_adaptors *
-					sizeof(XF86VideoAdaptorPtr));
-		newAdaptors[num_adaptors] = newAdaptor;
-		adaptors = newAdaptors;
-		num_adaptors++;
-	    }
-	}
-    }
-
-    if(num_adaptors)
-	xf86XVScreenInit(pScreen, adaptors, num_adaptors);
-
-    if(newAdaptors)
-	xfree(newAdaptors);
-}
-
-#define MAXWIDTH 2048
-#define MAXHEIGHT 2048
-
-/* client libraries expect an encoding */
-static XF86VideoEncodingRec DummyEncoding =
-{
-   0,
-   "XV_IMAGE",
-   MAXWIDTH, MAXHEIGHT,
-   {1, 1}
-};
-
-#define NUM_FORMATS 12
-
-static XF86VideoFormatRec Formats[NUM_FORMATS] =
-{
-   {8, TrueColor}, {8, DirectColor}, {8, PseudoColor},
-   {8, GrayScale}, {8, StaticGray}, {8, StaticColor},
-   {15, TrueColor}, {16, TrueColor}, {24, TrueColor},
-   {15, DirectColor}, {16, DirectColor}, {24, DirectColor}
-};
-
-
-#define NUM_ATTRIBUTES 4
-
-static XF86AttributeRec Attributes[NUM_ATTRIBUTES] =
-{
-   {XvSettable | XvGettable, 0, (1 << 24) - 1, "XV_COLORKEY"},
-   {XvSettable | XvGettable, -64, 63, "XV_BRIGHTNESS"},
-   {XvSettable | XvGettable, 0, 31, "XV_SATURATION"},
-   {XvSettable | XvGettable, 0, 1, "XV_DOUBLE_BUFFER"}
-};
-
-#define NUM_IMAGES 4
-
-static XF86ImageRec Images[NUM_IMAGES] =
-{
-	XVIMAGE_YUY2,
-	XVIMAGE_UYVY,
-	XVIMAGE_YV12,
-	XVIMAGE_I420
-};
-
-static void
-R128ResetVideo(ScrnInfoPtr pScrn)
-{
-    R128InfoPtr   info      = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    R128PortPrivPtr pPriv = info->adaptor->pPortPrivates[0].ptr;
-
-
-    OUTREG(R128_OV0_SCALE_CNTL, 0x80000000);
-    OUTREG(R128_OV0_EXCLUSIVE_HORZ, 0);
-    OUTREG(R128_OV0_AUTO_FLIP_CNTL, 0);   /* maybe */
-    OUTREG(R128_OV0_FILTER_CNTL, 0x0000000f);
-    OUTREG(R128_OV0_COLOUR_CNTL, (pPriv->brightness & 0x7f) |
-				 (pPriv->saturation << 8) |
-				 (pPriv->saturation << 16));
-    OUTREG(R128_OV0_GRAPHICS_KEY_MSK, (1 << pScrn->depth) - 1);
-    OUTREG(R128_OV0_GRAPHICS_KEY_CLR, pPriv->colorKey);
-    OUTREG(R128_OV0_KEY_CNTL, R128_GRAPHIC_KEY_FN_NE);
-    OUTREG(R128_OV0_TEST, 0);
-}
-
-
-static XF86VideoAdaptorPtr
-R128AllocAdaptor(ScrnInfoPtr pScrn)
-{
-    XF86VideoAdaptorPtr adapt;
-    R128InfoPtr info = R128PTR(pScrn);
-    R128PortPrivPtr pPriv;
-
-    if(!(adapt = xf86XVAllocateVideoAdaptorRec(pScrn)))
-	return NULL;
-
-    if(!(pPriv = xcalloc(1, sizeof(R128PortPrivRec) + sizeof(DevUnion))))
-    {
-	xfree(adapt);
-	return NULL;
-    }
-
-    adapt->pPortPrivates = (DevUnion*)(&pPriv[1]);
-    adapt->pPortPrivates[0].ptr = (pointer)pPriv;
-
-    xvBrightness   = MAKE_ATOM("XV_BRIGHTNESS");
-    xvSaturation   = MAKE_ATOM("XV_SATURATION");
-    xvColorKey     = MAKE_ATOM("XV_COLORKEY");
-    xvDoubleBuffer = MAKE_ATOM("XV_DOUBLE_BUFFER");
-
-    pPriv->colorKey = info->videoKey;
-    pPriv->doubleBuffer = TRUE;
-    pPriv->videoStatus = 0;
-    pPriv->brightness = 0;
-    pPriv->saturation = 16;
-    pPriv->currentBuffer = 0;
-    R128ECP(pScrn, pPriv);
-
-    return adapt;
-}
-
-static XF86VideoAdaptorPtr
-R128SetupImageVideo(ScreenPtr pScreen)
-{
-    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
-    R128InfoPtr info = R128PTR(pScrn);
-    R128PortPrivPtr pPriv;
-    XF86VideoAdaptorPtr adapt;
-
-    if(!(adapt = R128AllocAdaptor(pScrn)))
-	return NULL;
-
-    adapt->type = XvWindowMask | XvInputMask | XvImageMask;
-    adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
-    adapt->name = "ATI Rage128 Video Overlay";
-    adapt->nEncodings = 1;
-    adapt->pEncodings = &DummyEncoding;
-    adapt->nFormats = NUM_FORMATS;
-    adapt->pFormats = Formats;
-    adapt->nPorts = 1;
-    adapt->nAttributes = NUM_ATTRIBUTES;
-    adapt->pAttributes = Attributes;
-    adapt->nImages = NUM_IMAGES;
-    adapt->pImages = Images;
-    adapt->PutVideo = NULL;
-    adapt->PutStill = NULL;
-    adapt->GetVideo = NULL;
-    adapt->GetStill = NULL;
-    adapt->StopVideo = R128StopVideo;
-    adapt->SetPortAttribute = R128SetPortAttribute;
-    adapt->GetPortAttribute = R128GetPortAttribute;
-    adapt->QueryBestSize = R128QueryBestSize;
-    adapt->PutImage = R128PutImage;
-    adapt->QueryImageAttributes = R128QueryImageAttributes;
-
-    info->adaptor = adapt;
-
-    pPriv = (R128PortPrivPtr)(adapt->pPortPrivates[0].ptr);
-    REGION_NULL(pScreen, &(pPriv->clip));
-
-    R128ResetVideo(pScrn);
-
-    return adapt;
-}
-
-static void
-R128StopVideo(ScrnInfoPtr pScrn, pointer data, Bool cleanup)
-{
-  R128InfoPtr info = R128PTR(pScrn);
-  unsigned char *R128MMIO = info->MMIO;
-  R128PortPrivPtr pPriv = (R128PortPrivPtr)data;
-
-  REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
-
-  if(cleanup) {
-     if(pPriv->videoStatus & CLIENT_VIDEO_ON) {
-	OUTREG(R128_OV0_SCALE_CNTL, 0);
-     }
-     if(pPriv->linear) {
-	xf86FreeOffscreenLinear(pPriv->linear);
-	pPriv->linear = NULL;
-     }
-     pPriv->videoStatus = 0;
-  } else {
-     if(pPriv->videoStatus & CLIENT_VIDEO_ON) {
-	pPriv->videoStatus |= OFF_TIMER;
-	pPriv->offTime = currentTime.milliseconds + OFF_DELAY;
-     }
-  }
-}
-
-static int
-R128SetPortAttribute(
-  ScrnInfoPtr pScrn,
-  Atom attribute,
-  INT32 value,
-  pointer data
-){
-  R128InfoPtr info = R128PTR(pScrn);
-  unsigned char *R128MMIO = info->MMIO;
-  R128PortPrivPtr pPriv = (R128PortPrivPtr)data;
-
-  if(attribute == xvBrightness) {
-	if((value < -64) || (value > 63))
-	   return BadValue;
-	pPriv->brightness = value;
-
-	OUTREG(R128_OV0_COLOUR_CNTL, (pPriv->brightness & 0x7f) |
-				     (pPriv->saturation << 8) |
-				     (pPriv->saturation << 16));
-  } else
-  if(attribute == xvSaturation) {
-	if((value < 0) || (value > 31))
-	   return BadValue;
-	pPriv->saturation = value;
-
-	OUTREG(R128_OV0_COLOUR_CNTL, (pPriv->brightness & 0x7f) |
-				     (pPriv->saturation << 8) |
-				     (pPriv->saturation << 16));
-  } else
-  if(attribute == xvDoubleBuffer) {
-	if((value < 0) || (value > 1))
-	   return BadValue;
-	pPriv->doubleBuffer = value;
-  } else
-  if(attribute == xvColorKey) {
-	pPriv->colorKey = value;
-	OUTREG(R128_OV0_GRAPHICS_KEY_CLR, pPriv->colorKey);
-
-	REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
-  } else return BadMatch;
-
-  return Success;
-}
-
-static int
-R128GetPortAttribute(
-  ScrnInfoPtr pScrn,
-  Atom attribute,
-  INT32 *value,
-  pointer data
-){
-  R128PortPrivPtr pPriv = (R128PortPrivPtr)data;
-
-  if(attribute == xvBrightness) {
-	*value = pPriv->brightness;
-  } else
-  if(attribute == xvSaturation) {
-	*value = pPriv->saturation;
-  } else
-  if(attribute == xvDoubleBuffer) {
-	*value = pPriv->doubleBuffer ? 1 : 0;
-  } else
-  if(attribute == xvColorKey) {
-	*value = pPriv->colorKey;
-  } else return BadMatch;
-
-  return Success;
-}
-
-
-static void
-R128QueryBestSize(
-  ScrnInfoPtr pScrn,
-  Bool motion,
-  short vid_w, short vid_h,
-  short drw_w, short drw_h,
-  unsigned int *p_w, unsigned int *p_h,
-  pointer data
-){
-   if(vid_w > (drw_w << 4))
-	drw_w = vid_w >> 4;
-   if(vid_h > (drw_h << 4))
-	drw_h = vid_h >> 4;
-
-  *p_w = drw_w;
-  *p_h = drw_h;
-}
-
-
-/*
- *
- * R128DMA - abuse the texture blit ioctl to transfer rectangular blocks
- *
- * The block is split into 'passes' pieces of 'hpass' lines which fit entirely
- * into an indirect buffer
- *
- */
-
-static Bool
-R128DMA(
-  R128InfoPtr info,
-  unsigned char *src,
-  unsigned char *dst,
-  int srcPitch,
-  int dstPitch,
-  int h,
-  int w
-){
-
-#ifdef XF86DRI
-
-#define BUFSIZE (R128_BUFFER_SIZE - R128_HOSTDATA_BLIT_OFFSET)
-#define MAXPASSES (MAXHEIGHT/(BUFSIZE/(MAXWIDTH*2))+1)
-
-    unsigned char *fb = (CARD8*)info->FB;
-    unsigned char *buf;
-    int err=-1, i, idx, offset, hpass, passes, srcpassbytes, dstpassbytes;
-    int sizes[MAXPASSES], list[MAXPASSES];
-    drmDMAReq req;
-    drmR128Blit blit;
-
-    /* Verify conditions and bail out as early as possible */
-    if (!info->directRenderingEnabled || !info->DMAForXv)
-        return FALSE;
-
-    if ((hpass = min(h,(BUFSIZE/w))) == 0)
-	return FALSE;
-
-    if ((passes = (h+hpass-1)/hpass) > MAXPASSES)
-        return FALSE;
-
-    /* Request indirect buffers */
-    srcpassbytes = w*hpass;
-
-    req.context		= info->drmCtx;
-    req.send_count	= 0;
-    req.send_list	= NULL;
-    req.send_sizes	= NULL;
-    req.flags		= DRM_DMA_LARGER_OK;
-    req.request_count	= passes;
-    req.request_size	= srcpassbytes + R128_HOSTDATA_BLIT_OFFSET;
-    req.request_list	= &list[0];
-    req.request_sizes	= &sizes[0];
-    req.granted_count	= 0;
-
-    if (drmDMA(info->drmFD, &req))
-        return FALSE;
-
-    if (req.granted_count < passes) {
-        drmFreeBufs(info->drmFD, req.granted_count, req.request_list);
-	return FALSE;
-    }
-
-    /* Copy parts of the block into buffers and fire them */
-    dstpassbytes = hpass*dstPitch;
-    dstPitch /= 8;
-
-    for (i=0, offset=dst-fb; i<passes; i++, offset+=dstpassbytes) {
-        if (i == (passes-1) && (h % hpass) != 0) {
-	    hpass = h % hpass;
-	    srcpassbytes = w*hpass;
-	}
-
-	idx = req.request_list[i];
-	buf = (unsigned char *) info->buffers->list[idx].address + R128_HOSTDATA_BLIT_OFFSET;
-
-	if (srcPitch == w) {
-            memcpy(buf, src, srcpassbytes);
-	    src += srcpassbytes;
-	} else {
-	    int count = hpass;
-	    while(count--) {
-		memcpy(buf, src, w);
-		src += srcPitch;
-		buf += w;
-	    }
-	}
-
-        blit.idx = idx;
-        blit.offset = offset;
-        blit.pitch = dstPitch;
-        blit.format = (R128_DATATYPE_CI8 >> 16);
-        blit.x = (offset % 32);
-        blit.y = 0;
-        blit.width = w;
-        blit.height = hpass;
-
-	if ((err = drmCommandWrite(info->drmFD, DRM_R128_BLIT,
-                                   &blit, sizeof(drmR128Blit))) < 0)
-	    break;
-    }
-
-    drmFreeBufs(info->drmFD, req.granted_count, req.request_list);
-
-    return (err==0) ? TRUE : FALSE;
-
-#else
-
-    /* This is to avoid cluttering the rest of the code with '#ifdef XF86DRI' */
-    return FALSE;
-
-#endif	/* XF86DRI */
-
-}
-
-
-static void
-R128CopyData422(
-  R128InfoPtr info,
-  unsigned char *src,
-  unsigned char *dst,
-  int srcPitch,
-  int dstPitch,
-  int h,
-  int w
-){
-    w <<= 1;
-
-    /* Attempt data transfer with DMA and fall back to memcpy */
-
-    if (!R128DMA(info, src, dst, srcPitch, dstPitch, h, w)) {
-        while(h--) {
-	    memcpy(dst, src, w);
-	    src += srcPitch;
-	    dst += dstPitch;
-	}
-    }
-}
-
-static void
-R128CopyData420(
-   R128InfoPtr info,
-   unsigned char *src1,
-   unsigned char *src2,
-   unsigned char *src3,
-   unsigned char *dst1,
-   unsigned char *dst2,
-   unsigned char *dst3,
-   int srcPitch,
-   int srcPitch2,
-   int dstPitch,
-   int h,
-   int w
-){
-   int count;
-
-   /* Attempt data transfer with DMA and fall back to memcpy */
-
-   if (!R128DMA(info, src1, dst1, srcPitch, dstPitch, h, w)) {
-       count = h;
-       while(count--) {
-	   memcpy(dst1, src1, w);
-	   src1 += srcPitch;
-	   dst1 += dstPitch;
-       }
-   }
-
-   w >>= 1;
-   h >>= 1;
-   dstPitch >>= 1;
-
-   if (!R128DMA(info, src2, dst2, srcPitch2, dstPitch, h, w)) {
-       count = h;
-       while(count--) {
-	   memcpy(dst2, src2, w);
-	   src2 += srcPitch2;
-	   dst2 += dstPitch;
-       }
-   }
-
-   if (!R128DMA(info, src3, dst3, srcPitch2, dstPitch, h, w)) {
-       count = h;
-       while(count--) {
-	   memcpy(dst3, src3, w);
-	   src3 += srcPitch2;
-	   dst3 += dstPitch;
-       }
-   }
-}
-
-
-static FBLinearPtr
-R128AllocateMemory(
-   ScrnInfoPtr pScrn,
-   FBLinearPtr linear,
-   int size
-){
-   ScreenPtr pScreen;
-   FBLinearPtr new_linear;
-
-   if(linear) {
-	if(linear->size >= size)
-	   return linear;
-
-	if(xf86ResizeOffscreenLinear(linear, size))
-	   return linear;
-
-	xf86FreeOffscreenLinear(linear);
-   }
-
-   pScreen = screenInfo.screens[pScrn->scrnIndex];
-
-   new_linear = xf86AllocateOffscreenLinear(pScreen, size, 8,
-						NULL, NULL, NULL);
-
-   if(!new_linear) {
-	int max_size;
-
-	xf86QueryLargestOffscreenLinear(pScreen, &max_size, 8,
-						PRIORITY_EXTREME);
-
-	if(max_size < size)
-	   return NULL;
-
-	xf86PurgeUnlockedOffscreenAreas(pScreen);
-	new_linear = xf86AllocateOffscreenLinear(pScreen, size, 8,
-						NULL, NULL, NULL);
-   }
-
-   return new_linear;
-}
-
-static void
-R128DisplayVideo422(
-    ScrnInfoPtr pScrn,
-    int id,
-    int offset,
-    short width, short height,
-    int pitch,
-    int left, int right, int top,
-    BoxPtr dstBox,
-    short src_w, short src_h,
-    short drw_w, short drw_h
-){
-    R128InfoPtr info = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    R128PortPrivPtr pPriv = info->adaptor->pPortPrivates[0].ptr;
-    int v_inc, h_inc, step_by, tmp;
-    int p1_h_accum_init, p23_h_accum_init;
-    int p1_v_accum_init;
-
-    R128ECP(pScrn, pPriv);
-
-    v_inc = (src_h << 20) / drw_h;
-    h_inc = (src_w << (12 + pPriv->ecp_div)) / drw_w;
-    step_by = 1;
-
-    while(h_inc >= (2 << 12)) {
-	step_by++;
-	h_inc >>= 1;
-    }
-
-    /* keep everything in 16.16 */
-
-    offset += ((left >> 16) & ~7) << 1;
-
-    tmp = (left & 0x0003ffff) + 0x00028000 + (h_inc << 3);
-    p1_h_accum_init = ((tmp <<  4) & 0x000f8000) |
-		      ((tmp << 12) & 0xf0000000);
-
-    tmp = ((left >> 1) & 0x0001ffff) + 0x00028000 + (h_inc << 2);
-    p23_h_accum_init = ((tmp <<  4) & 0x000f8000) |
-		       ((tmp << 12) & 0x70000000);
-
-    tmp = (top & 0x0000ffff) + 0x00018000;
-    p1_v_accum_init = ((tmp << 4) & 0x03ff8000) | 0x00000001;
-
-    left = (left >> 16) & 7;
-
-    OUTREG(R128_OV0_REG_LOAD_CNTL, 1);
-    while(!(INREG(R128_OV0_REG_LOAD_CNTL) & (1 << 3)));
-
-    OUTREG(R128_OV0_H_INC, h_inc | ((h_inc >> 1) << 16));
-    OUTREG(R128_OV0_STEP_BY, step_by | (step_by << 8));
-    OUTREG(R128_OV0_Y_X_START, dstBox->x1 | (dstBox->y1 << 16));
-    OUTREG(R128_OV0_Y_X_END,   dstBox->x2 | (dstBox->y2 << 16));
-    OUTREG(R128_OV0_V_INC, v_inc);
-    OUTREG(R128_OV0_P1_BLANK_LINES_AT_TOP, 0x00000fff | ((src_h - 1) << 16));
-    OUTREG(R128_OV0_VID_BUF_PITCH0_VALUE, pitch);
-    OUTREG(R128_OV0_P1_X_START_END, (width - 1) | (left << 16));
-    left >>= 1; width >>= 1;
-    OUTREG(R128_OV0_P2_X_START_END, (width - 1) | (left << 16));
-    OUTREG(R128_OV0_P3_X_START_END, (width - 1) | (left << 16));
-    OUTREG(R128_OV0_VID_BUF0_BASE_ADRS, offset & 0xfffffff0);
-    OUTREG(R128_OV0_P1_V_ACCUM_INIT, p1_v_accum_init);
-    OUTREG(R128_OV0_P23_V_ACCUM_INIT, 0);
-    OUTREG(R128_OV0_P1_H_ACCUM_INIT, p1_h_accum_init);
-    OUTREG(R128_OV0_P23_H_ACCUM_INIT, p23_h_accum_init);
-
-    if(id == FOURCC_UYVY)
-       OUTREG(R128_OV0_SCALE_CNTL, 0x41FF8C03);
-    else
-       OUTREG(R128_OV0_SCALE_CNTL, 0x41FF8B03);
-
-    OUTREG(R128_OV0_REG_LOAD_CNTL, 0);
-}
-
-static void
-R128DisplayVideo420(
-    ScrnInfoPtr pScrn,
-    short width, short height,
-    int pitch,
-    int offset1, int offset2, int offset3,
-    int left, int right, int top,
-    BoxPtr dstBox,
-    short src_w, short src_h,
-    short drw_w, short drw_h
-){
-    R128InfoPtr info = R128PTR(pScrn);
-    unsigned char *R128MMIO = info->MMIO;
-    R128PortPrivPtr pPriv = info->adaptor->pPortPrivates[0].ptr;
-    int v_inc, h_inc, step_by, tmp, leftUV;
-    int p1_h_accum_init, p23_h_accum_init;
-    int p1_v_accum_init, p23_v_accum_init;
-
-    v_inc = (src_h << 20) / drw_h;
-    h_inc = (src_w << (12 + pPriv->ecp_div)) / drw_w;
-    step_by = 1;
-
-    while(h_inc >= (2 << 12)) {
-	step_by++;
-	h_inc >>= 1;
-    }
-
-    /* keep everything in 16.16 */
-
-    offset1 += (left >> 16) & ~15;
-    offset2 += (left >> 17) & ~15;
-    offset3 += (left >> 17) & ~15;
-
-    tmp = (left & 0x0003ffff) + 0x00028000 + (h_inc << 3);
-    p1_h_accum_init = ((tmp <<  4) & 0x000f8000) |
-		      ((tmp << 12) & 0xf0000000);
-
-    tmp = ((left >> 1) & 0x0001ffff) + 0x00028000 + (h_inc << 2);
-    p23_h_accum_init = ((tmp <<  4) & 0x000f8000) |
-		       ((tmp << 12) & 0x70000000);
-
-    tmp = (top & 0x0000ffff) + 0x00018000;
-    p1_v_accum_init = ((tmp << 4) & 0x03ff8000) | 0x00000001;
-
-    tmp = ((top >> 1) & 0x0000ffff) + 0x00018000;
-    p23_v_accum_init = ((tmp << 4) & 0x01ff8000) | 0x00000001;
-
-    leftUV = (left >> 17) & 15;
-    left = (left >> 16) & 15;
-
-    OUTREG(R128_OV0_REG_LOAD_CNTL, 1);
-    while(!(INREG(R128_OV0_REG_LOAD_CNTL) & (1 << 3)));
-
-    OUTREG(R128_OV0_H_INC, h_inc | ((h_inc >> 1) << 16));
-    OUTREG(R128_OV0_STEP_BY, step_by | (step_by << 8));
-    OUTREG(R128_OV0_Y_X_START, dstBox->x1 | (dstBox->y1 << 16));
-    OUTREG(R128_OV0_Y_X_END,   dstBox->x2 | (dstBox->y2 << 16));
-    OUTREG(R128_OV0_V_INC, v_inc);
-    OUTREG(R128_OV0_P1_BLANK_LINES_AT_TOP, 0x00000fff | ((src_h - 1) << 16));
-    src_h = (src_h + 1) >> 1;
-    OUTREG(R128_OV0_P23_BLANK_LINES_AT_TOP, 0x000007ff | ((src_h - 1) << 16));
-    OUTREG(R128_OV0_VID_BUF_PITCH0_VALUE, pitch);
-    OUTREG(R128_OV0_VID_BUF_PITCH1_VALUE, pitch >> 1);
-    OUTREG(R128_OV0_P1_X_START_END, (width - 1) | (left << 16));
-    width >>= 1;
-    OUTREG(R128_OV0_P2_X_START_END, (width - 1) | (leftUV << 16));
-    OUTREG(R128_OV0_P3_X_START_END, (width - 1) | (leftUV << 16));
-    OUTREG(R128_OV0_VID_BUF0_BASE_ADRS, offset1 & 0xfffffff0);
-    OUTREG(R128_OV0_VID_BUF1_BASE_ADRS, (offset2 & 0xfffffff0) | 0x00000001);
-    OUTREG(R128_OV0_VID_BUF2_BASE_ADRS, (offset3 & 0xfffffff0) | 0x00000001);
-    OUTREG(R128_OV0_P1_V_ACCUM_INIT, p1_v_accum_init);
-    OUTREG(R128_OV0_P23_V_ACCUM_INIT, p23_v_accum_init);
-    OUTREG(R128_OV0_P1_H_ACCUM_INIT, p1_h_accum_init);
-    OUTREG(R128_OV0_P23_H_ACCUM_INIT, p23_h_accum_init);
-    OUTREG(R128_OV0_SCALE_CNTL, 0x41FF8A03);
-
-    OUTREG(R128_OV0_REG_LOAD_CNTL, 0);
-}
-
-
-
-static int
-R128PutImage(
-  ScrnInfoPtr pScrn,
-  short src_x, short src_y,
-  short drw_x, short drw_y,
-  short src_w, short src_h,
-  short drw_w, short drw_h,
-  int id, unsigned char* buf,
-  short width, short height,
-  Bool Sync,
-  RegionPtr clipBoxes, pointer data,
-  DrawablePtr pDraw
-){
-   R128InfoPtr info = R128PTR(pScrn);
-   R128PortPrivPtr pPriv = (R128PortPrivPtr)data;
-   unsigned char *fb = (CARD8*)info->FB;
-   INT32 xa, xb, ya, yb;
-   int new_size, offset, s1offset, s2offset, s3offset;
-   int srcPitch, srcPitch2, dstPitch;
-   int d1line, d2line, d3line, d1offset, d2offset, d3offset;
-   int top, left, npixels, nlines, bpp;
-   BoxRec dstBox;
-   CARD32 tmp;
-#if X_BYTE_ORDER == X_BIG_ENDIAN
-   unsigned char *R128MMIO = info->MMIO;
-   CARD32 config_cntl = INREG(R128_CONFIG_CNTL);
-
-   /* We need to disable byte swapping, or the data gets mangled */
-   OUTREG(R128_CONFIG_CNTL, config_cntl &
-	  ~(APER_0_BIG_ENDIAN_16BPP_SWAP | APER_0_BIG_ENDIAN_32BPP_SWAP));
-#endif
-
-   /*
-    * s1offset, s2offset, s3offset - byte offsets to the Y, U and V planes
-    *                                of the source.
-    *
-    * d1offset, d2offset, d3offset - byte offsets to the Y, U and V planes
-    *                                of the destination.
-    *
-    * offset - byte offset within the framebuffer to where the destination
-    *          is stored.
-    *
-    * d1line, d2line, d3line - byte offsets within the destination to the
-    *                          first displayed scanline in each plane.
-    *
-    */
-
-   if(src_w > (drw_w << 4))
-	drw_w = src_w >> 4;
-   if(src_h > (drw_h << 4))
-	drw_h = src_h >> 4;
-
-   /* Clip */
-   xa = src_x;
-   xb = src_x + src_w;
-   ya = src_y;
-   yb = src_y + src_h;
-
-   dstBox.x1 = drw_x;
-   dstBox.x2 = drw_x + drw_w;
-   dstBox.y1 = drw_y;
-   dstBox.y2 = drw_y + drw_h;
-
-   if(!xf86XVClipVideoHelper(&dstBox, &xa, &xb, &ya, &yb,
-			     clipBoxes, width, height))
-	return Success;
-
-   dstBox.x1 -= pScrn->frameX0;
-   dstBox.x2 -= pScrn->frameX0;
-   dstBox.y1 -= pScrn->frameY0;
-   dstBox.y2 -= pScrn->frameY0;
-
-   bpp = pScrn->bitsPerPixel >> 3;
-
-   switch(id) {
-   case FOURCC_YV12:
-   case FOURCC_I420:
-	srcPitch = (width + 3) & ~3;
-	srcPitch2 = ((width >> 1) + 3) & ~3;
-	dstPitch = (width + 31) & ~31;  /* of luma */
-	new_size = ((dstPitch * (height + (height >> 1))) + bpp - 1) / bpp;
-	s1offset = 0;
-	s2offset = srcPitch * height;
-	s3offset = (srcPitch2 * (height >> 1)) + s2offset;
-	break;
-   case FOURCC_UYVY:
-   case FOURCC_YUY2:
-   default:
-	srcPitch = width << 1;
-	srcPitch2 = 0;
-	dstPitch = ((width << 1) + 15) & ~15;
-	new_size = ((dstPitch * height) + bpp - 1) / bpp;
-	s1offset = 0;
-	s2offset = 0;
-	s3offset = 0;
-	break;
-   }
-
-   if(!(pPriv->linear = R128AllocateMemory(pScrn, pPriv->linear,
-		pPriv->doubleBuffer ? (new_size << 1) : new_size)))
-   {
-	return BadAlloc;
-   }
-
-   pPriv->currentBuffer ^= 1;
-
-    /* copy data */
-   top = ya >> 16;
-   left = (xa >> 16) & ~1;
-   npixels = ((((xb + 0xffff) >> 16) + 1) & ~1) - left;
-
-   offset = pPriv->linear->offset * bpp;
-   if(pPriv->doubleBuffer)
-	offset += pPriv->currentBuffer * new_size * bpp;
-
-   switch(id) {
-    case FOURCC_YV12:
-    case FOURCC_I420:
-	d1line = top * dstPitch;
-	d2line = (height * dstPitch) + ((top >> 1) * (dstPitch >> 1));
-	d3line = d2line + ((height >> 1) * (dstPitch >> 1));
-
-	top &= ~1;
-
-	d1offset = (top * dstPitch) + left + offset;
-	d2offset = d2line + (left >> 1) + offset;
-	d3offset = d3line + (left >> 1) + offset;
-
-	s1offset += (top * srcPitch) + left;
-	tmp = ((top >> 1) * srcPitch2) + (left >> 1);
-	s2offset += tmp;
-	s3offset += tmp;
-	if(id == FOURCC_YV12) {
-	   tmp = s2offset;
-	   s2offset = s3offset;
-	   s3offset = tmp;
-	}
-
-	nlines = ((((yb + 0xffff) >> 16) + 1) & ~1) - top;
-	R128CopyData420(info, buf + s1offset, buf + s2offset, buf + s3offset,
-			fb + d1offset, fb + d2offset, fb + d3offset,
-			srcPitch, srcPitch2, dstPitch, nlines, npixels);
-	break;
-    case FOURCC_UYVY:
-    case FOURCC_YUY2:
-    default:
-	left <<= 1;
-	d1line = top * dstPitch;
-	d2line = 0;
-	d3line = 0;
-	d1offset = d1line + left + offset;
-	d2offset = 0;
-	d3offset = 0;
-	s1offset += (top * srcPitch) + left;
-	nlines = ((yb + 0xffff) >> 16) - top;
-	R128CopyData422(info, buf + s1offset, fb + d1offset,
-			srcPitch, dstPitch, nlines, npixels);
-	break;
-    }
-
-#if X_BYTE_ORDER == X_BIG_ENDIAN
-    /* restore byte swapping */
-    OUTREG(R128_CONFIG_CNTL, config_cntl);
-#endif
-
-    /* update cliplist */
-    if(!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) {
-	REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
-	/* draw these */
-	xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
-    }
-
-
-    switch(id) {
-     case FOURCC_YV12:
-     case FOURCC_I420:
-	R128DisplayVideo420(pScrn, width, height, dstPitch,
-		     offset + d1line, offset + d2line, offset + d3line,
-		     xa, xb, ya, &dstBox, src_w, src_h, drw_w, drw_h);
-	break;
-     case FOURCC_UYVY:
-     case FOURCC_YUY2:
-     default:
-	R128DisplayVideo422(pScrn, id, offset + d1line, width, height, dstPitch,
-		     xa, xb, ya, &dstBox, src_w, src_h, drw_w, drw_h);
-	break;
-    }
-
-    pPriv->videoStatus = CLIENT_VIDEO_ON;
-
-    info->VideoTimerCallback = R128VideoTimerCallback;
-
-    return Success;
-}
-
-
-static int
-R128QueryImageAttributes(
-    ScrnInfoPtr pScrn,
-    int id,
-    unsigned short *w, unsigned short *h,
-    int *pitches, int *offsets
-){
-    int size, tmp;
-
-    if(*w > MAXWIDTH) *w = MAXWIDTH;
-    if(*h > MAXHEIGHT) *h = MAXHEIGHT;
-
-    *w = (*w + 1) & ~1;
-    if(offsets) offsets[0] = 0;
-
-    switch(id) {
-    case FOURCC_YV12:
-    case FOURCC_I420:
-	*h = (*h + 1) & ~1;
-	size = (*w + 3) & ~3;
-	if(pitches) pitches[0] = size;
-	size *= *h;
-	if(offsets) offsets[1] = size;
-	tmp = ((*w >> 1) + 3) & ~3;
-	if(pitches) pitches[1] = pitches[2] = tmp;
-	tmp *= (*h >> 1);
-	size += tmp;
-	if(offsets) offsets[2] = size;
-	size += tmp;
-	break;
-    case FOURCC_UYVY:
-    case FOURCC_YUY2:
-    default:
-	size = *w << 1;
-	if(pitches) pitches[0] = size;
-	size *= *h;
-	break;
-    }
-
-    return size;
-}
-
-static void
-R128VideoTimerCallback(ScrnInfoPtr pScrn, Time now)
-{
-    R128InfoPtr info = R128PTR(pScrn);
-    R128PortPrivPtr pPriv = info->adaptor->pPortPrivates[0].ptr;
-
-    if(pPriv->videoStatus & TIMER_MASK) {
-	if(pPriv->videoStatus & OFF_TIMER) {
-	    if(pPriv->offTime < now) {
-		unsigned char *R128MMIO = info->MMIO;
-		OUTREG(R128_OV0_SCALE_CNTL, 0);
-		pPriv->videoStatus = FREE_TIMER;
-		pPriv->freeTime = now + FREE_DELAY;
-	    }
-	} else {  /* FREE_TIMER */
-	    if(pPriv->freeTime < now) {
-		if(pPriv->linear) {
-		   xf86FreeOffscreenLinear(pPriv->linear);
-		   pPriv->linear = NULL;
-		}
-		pPriv->videoStatus = 0;
-		info->VideoTimerCallback = NULL;
-	    }
-	}
-    } else  /* shouldn't get here */
-	info->VideoTimerCallback = NULL;
-}
commit 873ff2033f1d0b84c91c48e829aa945f41b490b7
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Wed Feb 27 18:40:09 2008 +0200

    drop r128 (build system)

diff --git a/Makefile.am b/Makefile.am
index c8dcab8..87e90ba 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -21,13 +21,7 @@
 AUTOMAKE_OPTIONS = foreign
 SUBDIRS = src man
 
-if BUILD_LINUXDOC
-README.r128: README.r128.sgml
-	$(MAKE_TEXT) README.r128.sgml && mv README.r128.txt README.r128
-
-endif
-
-EXTRA_DIST = README.r128 README.r128.sgml ChangeLog
+EXTRA_DIST = ChangeLog
 CLEANFILES = ChangeLog
 
 .PHONY: ChangeLog
diff --git a/man/Makefile.am b/man/Makefile.am
index 2788428..2d11006 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -27,11 +27,11 @@
 
 drivermandir = $(DRIVER_MAN_DIR)
 
-driverman_PRE = @DRIVER_NAME at .man r128.man radeon.man
+driverman_PRE = @DRIVER_NAME at .man radeon.man
 
 driverman_DATA = $(driverman_PRE:man=@DRIVER_MAN_SUFFIX@)
 
-EXTRA_DIST = @DRIVER_NAME at .man r128.man radeon.man
+EXTRA_DIST = @DRIVER_NAME at .man radeon.man
 
 CLEANFILES = $(driverman_DATA)
 
diff --git a/src/Makefile.am b/src/Makefile.am
index 0ea606d..ea6d770 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -27,7 +27,6 @@
 # TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc.
 
 if DRI
-R128_DRI_SRCS = r128_dri.c
 RADEON_DRI_SRCS = radeon_dri.c
 endif
 
@@ -76,13 +75,6 @@ ati_drv_ladir = @moduledir@/drivers
 ati_drv_la_SOURCES = \
 	ati.c atimodule.c
 
-r128_drv_la_LTLIBRARIES = r128_drv.la
-r128_drv_la_LDFLAGS = -module -avoid-version
-r128_drv_ladir = @moduledir@/drivers
-r128_drv_la_SOURCES = \
-	r128_accel.c r128_cursor.c r128_dga.c r128_driver.c \
-	r128_video.c r128_misc.c r128_probe.c $(R128_DRI_SRCS)
-
 radeon_drv_la_LTLIBRARIES = radeon_drv.la
 radeon_drv_la_LDFLAGS = -module -avoid-version
 radeon_drv_ladir = @moduledir@/drivers
@@ -130,14 +122,6 @@ EXTRA_DIST = \
 	ati.h \
 	ativersion.h \
 	generic_bus.h \
-	r128_common.h \
-	r128_dri.h \
-	r128_dripriv.h \
-	r128.h \
-	r128_probe.h \
-	r128_reg.h \
-	r128_sarea.h \
-	r128_version.h \
 	radeon_common.h \
 	radeon_commonfuncs.c \
 	radeon_dri.h \
commit 2b8b2676e7b2fd2952f5307a934ef0a11006f838
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Wed Feb 27 18:39:49 2008 +0200

    drop mach64

diff --git a/README.ati b/README.ati
deleted file mode 100644
index 7dddbee..0000000
--- a/README.ati
+++ /dev/null
@@ -1,828 +0,0 @@
-  $Id$ Based on
-  XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/ati.sgml,v
-  3.42 2003/01/20 03:43:07 dawes Exp ATI Adapters README file
-  Marc Aurele La France
-  2002 February 12
-
-  This is the README for the XAA ATI driver included in this release.
-  ______________________________________________________________________
-
-  Table of Contents
-
-
-  1. Statement of intent
-  2. A note on acceleration
-  3. Current implementation for ATI adapters
-  4. Current implementation of generic VGA support for non-ATI adapters
-  5. xorg.conf specifications
-     5.1 Driver ``ati''
-     5.2 ChipSet ``name''
-     5.3 ChipID & ChipRev specifications
-     5.4 IOBase
-     5.5 BusID
-     5.6 Clocks
-        5.6.1 Clocks for supported programmable clock generators
-        5.6.2 Clocks for unsupported programmable clock generators
-        5.6.3 Clocks for fixed clock generators on ATI adapters
-        5.6.4 Clocks for non-ATI adapters
-     5.7 Option ``nopanel_display''
-     5.8 Option ``crt_display''
-     5.9 Option ``noaccel''
-     5.10 Option ``nolinear''
-     5.11 Option ``HWCursor'' and Option ``SWCursor''
-     5.12 Option ``SilkenMouse''
-     5.13 Option ``shadowfb''
-     5.14 Option ``dpms''
-     5.15 Option ``backingstore''
-     5.16 MemBase address
-     5.17 Option ``ReferenceClock'' ``frequency''
-     5.18 ClockChip ``name''
-
-  6. Video modes
-  7. Known problems and limitations
-  8. Reporting problems
-  9. Driver history
-  10. Driver versions
-
-
-  ______________________________________________________________________
-
-  1.  Statement of intent
-
-  Generally speaking, the driver is intended for all ATI video adapters,
-  providing maximum video function within hardware limitations.  The
-  driver is also intended to optionally provide the same level of
-  support for generic VGA or 8514/A adapters.  This driver is still
-  being actively developed, meaning that it currently does not yet fully
-  meet these goals.
-
-  The driver will provide
-
-  +o  accelerated support if an ATI accelerator is detected and the user
-     has not requested that this support be disabled;  otherwise
-
-  +o  accelerated support if a non-ATI 8514/A-capable adapter is detected
-     and the user has requested such support;  otherwise
-
-  +o  unaccelerated SuperVGA support if an ATI VGA-capable adapter is
-     detected; otherwise
-
-  +o  generic VGA support if a non-ATI VGA-capable adapter is detected
-     and the user has requested such support.
-
-     Thus, the level of support provided not only depends on what the
-     driver detects in the system, but also, on what the user specifies
-     in the xorg.conf file.  See the ``xorg.conf specifications''
-     section below for details.
-
-  If none of the above conditions are met, the ATI driver will
-  essentially disable itself to allow other drivers to examine the
-  system.
-
-  Note that I am currently considering removing the driver's support for
-  generic VGA.  If you have any concerns about this, please contact me
-  at <tsi at xfree86.org>.
-
-  2.  A note on acceleration
-
-  The meaning of ``acceleration'', as used in this document, needs to be
-  clarified.  Two of the many components in an accelerator are the CRT
-  controller (CRTC) and the Draw Engine.  This is in addition to another
-  CRTC that, generally, is also present in the system (often in the same
-  chip) and typically provides EGA, VGA or SuperVGA functionality.
-
-  A CRTC is the component of a graphics controller that is responsible
-  for reading video memory for output to the screen.  A Draw Engine is
-  an accelerator component that can be programmed to manipulate video
-  memory contents, thus freeing the CPU for other tasks.
-
-  When the VGA CRTC is used, all drawing operations into video memory
-  are the responsibility of the system's CPU, i.e. no Draw Engine can be
-  used.  On the other hand, if the accelerator's CRTC is chosen to drive
-  the screen, the Draw Engine can also be used for drawing operations,
-  although the CPU can still be used for this purpose if it can access
-  the accelerator's video memory.
-
-  Video acceleration refers to the programming of an accelerator's Draw
-  Engine to offload drawing operations from the CPU, and thus also
-  implies the use of the accelerator's CRTC.
-
-
-  3.  Current implementation for ATI adapters
-
-  The driver currently supports the SuperVGA capabilities of all ATI
-  adapters except some early Mach8 and Mach32 adapters that do not
-  provide the required functionality.  This support works for
-  monochrome, 16-colour and 256-colour video modes, if one of the
-  following ATI graphics controller chips is present:
-
-  VGAWonder series:  18800, 18800-1, 28800-2, 28800-4, 28800-5, 28800-6
-     Mach32 series:  68800-3, 68800-6, 68800AX, 68800LX
-     Mach64 series:  88800GX-C, 88800GX-D, 88800GX-E, 88800GX-F, 88800CX,
-                     264CT, 264ET, 264VT, 264GT (3D Rage), 264VT-B, 264VT3,
-                     264VT4, 264GT-B (3D Rage II), 3D Rage IIc, 3D Rage Pro,
-                     3D Rage LT, 3D Rage LT Pro, 3D Rage XL, 3D Rage XC,
-                     3D Rage Mobility (including the -M and -P variants)
-
-
-  The driver also supports 32K, 64K and 16M-colour modes on the 264xT
-  and 3D Rage series of adapters using the accelerator CRTC (but not the
-  VGA CRTC).
-
-
-  The newer Rage 128 and Radeon chips are not yet supported by this
-  driver.  Rage 128's and Radeon's are, however, supported by separate
-  drivers, and owners of such adapters should consult the documentation
-  provided with these drivers.  This driver will also invoke the
-  appropriate driver if it finds Rage 128 and/or Radeon adapter(s) in
-  the system.
-
-  Adapters based on the above chips have been marketed under a rather
-  large number of names over the years.  Among them are:
-
-  VGAWonder series:  VGAWonder V3, VGAWonder V4, VGAWonder V5, VGAWonder+,
-                     VGAWonder XL, VGAWonder XL24, VGAWonder VLB, VGA Basic,
-                     VGA Basic 16, VGA Edge, VGA Edge 16, VGA Integra,
-                     VGA Charger, VGAStereo F/X, VGA 640, VGA 800, VGA 1024,
-                     VGA 1024D, VGA 1024 XL, VGA 1024 DXL, VGA 1024 VLB
-      Mach8 series:  Graphics Ultra, Graphics Vantage, VGAWonder GT
-                     (None of the 8514/Ultra and 8514 Vantage series is
-                      supported at this time)
-     Mach32 series:  Graphics Ultra+, Graphics Ultra Pro, Graphics Wonder,
-                     Graphics Ultra XLR, Graphics Ultra AXO, VLB mach32-D,
-                     PCI mach32-D, ISA mach32
-     Mach64 series:  Graphics Xpression, Graphics Pro Turbo, WinBoost,
-                     WinTurbo, Graphics Pro Turbo 1600, Video Xpression,
-                     3D Xpression, Video Xpression+, 3D Xpression+,
-                     3D Charger, Video Charger, WinCharger, All-In-Wonder,
-                     All-In-Wonder PRO, 3D Pro Turbo, XPERT at Play,
-                     XPERT at Play 98, XPERT at Work, XPERT 98, XPERT LCD,
-                     XPERT XL
-
-
-  Also, a number of mainboards, laptops and notebooks harbour a Mach32
-  or Mach64 controller.
-
-  VGAWonder, Mach8 and Mach32 ISA adapters are available with or without
-  a mouse.
-
-  These adapters are available with a variety of clock generators and
-  RAMDACs.  The 264xT and 3D Rage series of chips are integrated
-  controllers, meaning that they include a programmable clock generator
-  and a RAMDAC.
-
-  For all but Mach64 adapters, this driver still does not provide
-  support for accelerated drawing to the screen.  This means that all
-  drawing is done by the CPU, rather than by any accelerator present in
-  the system.  This can make opaque moves, for example, quite ``jerky''.
-  Also, given that IBM 8514/A and ATI Mach8 do not allow CPU access to
-  their frame buffer, the driver will currently ignore these
-  accelerators.  Most Mach32 adapters provide both accelerated function
-  and SuperVGA functionality, but the driver currently only uses the
-  VGA.
-
-  The driver does however support the accelerator CRTC present in all
-  ATI Mach64 adapters.  For 256-colour, and higher depth modes, this
-  support will be used by default, although an xorg.conf option can be
-  specified to use the SuperVGA CRTC instead.  A linear video memory
-  aperture is also available in 256-colour and higher depth modes and
-  enabled by default if a 264xT or 3D Rage controller is detected or, on
-  88800 controllers, if the accelerator CRTC is used.  xorg.conf options
-  are available to disable this aperture, or (for non-PCI adapters)
-  enable it or move it to some other address.
-
-  By default, the driver provides some acceleration for Mach64 if the
-  accelerator CRTC is used, and modes whose colour depth greater than or
-  equal to 8 are to be used.  This support is as yet incomplete and can
-  be disabled entirely with an xorg.conf option.
-
-  On non-Intel platforms, the driver can, currently, only support PCI
-  Mach64 adapters.
-
-
-  4.  Current implementation of generic VGA support for non-ATI adapters
-
-  Support for generic VGA with non-ATI adapters is also implemented, but
-  has undergone only limited testing.  The driver will intentionally
-  disallow the use of this support with ATI adapters.  This support must
-  be explicitly requested through an xorg.conf ChipSet specification.
-  This prevents the current VGA generic driver from being disabled.
-
-  This driver's generic VGA support is intended as an extension of that
-  provided by the current generic driver.  Specifically, within the
-  architectural bounds defined by IBM's VGA standard, this driver will
-  allow the use of any 256-colour mode, and any dot clock frequencies
-  both of which allow for many more mode possibilities.
-
-  The driver will enforce the following limitations derived from IBM's
-  original VGA implementation:
-
-  +o  There can only be a set of four (non-programmable) clocks to choose
-     from.
-
-  +o  Video memory is limited to 256kB in monochrome and 16-colour modes.
-
-  +o  Video memory is limited to 64kB in 256-colour modes.
-
-  +o  Interlaced modes are not available.
-
-  +o  Colour depths higher than 8 are not available.
-
-  5.  xorg.conf specifications
-
-  The driver recognises a number of xorg.conf options.  In general, all
-  such options should be specified in a ``Device'' section, and affect
-  only that ``Device'' section.
-
-  Those options that affect how the driver associates adapters with
-  ``Device'' sections are described first.  The driver will ignore (with
-  a message) a ``Device'' section if the section cannot be associated
-  with exactly one adapter in the system.  Similarly, the driver will
-  ignore, or disable, (with a message) any adapter that cannot be
-  associated with exactly one ``Device'' section.  Thus, these options
-  will be required in those uncommon cases where such unique
-  associations cannot automatically be made by the driver.
-
-  Other options affect the driver's operation once an adapter has been
-  assigned to the ``Device'' section which contains them.
-
-
-  5.1.  Driver ``ati''
-
-  The use of this specification is highly recommended if the ``Device''
-  section is to be recognised by the driver.  In fact, it is almost (but
-  not quite) mandatory, particularly when using the loader server as it
-  indicates what driver is to be loaded and associated with the
-  ``Device'' section.
-
-
-  5.2.  ChipSet ``name''
-
-  The default ChipSet name for this driver is ``ati''.  In this case,
-  any ATI adapter can be associated with the ``Device'' section.  If an
-  ATI accelerator is detected and the driver supports it, the
-  accelerator's CRTC will be used to drive the screen.  Otherwise, the
-  driver will programme the adapter's SuperVGA CRTC.
-
-  If ``ativga'' is specified instead, the driver will ignore any ATI
-  accelerator it detects, but otherwise operate as if ``ati'' had been
-  specified.  This specification ensures the VGA CRTC is used.
-
-  A ChipSet name of ``ibmvga'' causes any VGA-capable adapter in the
-  system to be associated with the ``Device'' section.  It enables the
-  driver's generic VGA support, but only for non-ATI adapters.  If an
-  ATI adapter is associated with the ``Device'' section, the driver will
-  operate as if ``ativga'' had been specified instead.
-
-  A ChipSet name of ``vgawonder'' is equivalent to ``ativga'', except
-  that only VGAWonder-capable adapters can be assigned to the ``Device''
-  section.  This specifically excludes the newer integrated Mach64
-  controllers.
-
-  In some PCI or AGP systems, the driver will not, by default, probe for
-  non-PCI Mach32's or Mach64's.  This is because, before doing any such
-  probe, the driver attempts to determine if the probe can cause a
-  lockup.  If the driver has enough information to determine that a
-  lockup would occur, it will skip the probe.  In some situations, this
-  determination cannot be accurate, and the driver will err on the side
-  of caution, skipping the probe.  Specifying a ChipSet name of
-  ``mach32'' or ``mach64'', as appropriate, will force the driver to
-  probe for the non-PCI adapter.  These ChipSet names should, therefore,
-  only be used when there is in fact such an adapter in the system.
-  They are otherwise equivalent to ``ati''.
-
-  On non-Intel platforms, only ``ati'' and ``mach64'' ChipSet values are
-  operative.
-
-
-  5.3.  ChipID & ChipRev specifications
-
-  These specifications will cause the driver to associate the ``Device''
-  section only with an adapter having the same attributes, or an adapter
-  whose PCI device ID the driver does not recognise.  In the second
-  case, these options cause the driver to treat the adapter as if it was
-  one with the specified PCI device ID or revision.  ChipID can only be
-  used with Mach32 or Mach64 adapters, and, thus, specifically excludes
-  any other adapter from matching the ``Device'' section.  ChipRev is
-  meaningful only with Mach64 adapters, and then only if ChipID is also
-  specified in the same ``Device'' section.
-
-
-  5.4.  IOBase
-
-  This option limits the adapters that can be associated with the
-  ``Device'' section to the one with the specified I/O base.  This
-  option only applies to Mach64 adapters and specifically excludes other
-  adapters.
-
-
-  5.5.  BusID
-
-  This option limits the adapters that can be associated with the
-  ``Device'' section to the one with the specified PCI Bus ID.  This
-  specification excludes non-PCI adapters.
-
-
-  5.6.  Clocks
-
-  For the purpose of specifying a clock line in your xorg.conf, one of
-  four different situations can occur, as follows.
-
-  Those configuring the driver's generic VGA support for a non-ATI
-  adapter, can skip ahead to the ``Clocks for non-ATI adapters'' section
-  below.  Those not trying to configure the driver for a Mach64 adapter,
-  can skip ahead to the ``Clocks for fixed clock generators on ATI
-  adapters'' section below.
-
-  The very earliest Mach64 adapters use fixed (i.e. non-programmable)
-  clock generators.  Very few of these (mostly prototypes) are known to
-  exist, but if you have one of these, you can also skip ahead to the
-  ``Clocks for fixed clock generators on ATI adapters'' section below.
-
-  The two cases that are left deal with programmable clock generators,
-  which are used on the great majority of Mach64 adapters.
-
-  If you are uncertain which situation applies to your adapter, you can
-  run a clock probe with the command ``X -probeonly''.
-
-
-  5.6.1.  Clocks for supported programmable clock generators
-
-  At bootup, video BIOS initialisation programmes an initial set of
-  frequencies.  Two of these are reserved to allow the setting of modes
-  that do not use a frequency from this initial set.  One of these
-  reserved slots is used by the BIOS mode set routine, the other by the
-  particular driver used (e.g. MS-Windows, AutoCAD, X, etc.).  The clock
-  numbers reserved in this way are dependent on the particular clock
-  generator used by the adapter.
-
-  The driver currently supports all programmable clock generators known
-  to exist on Mach64 adapters.  In this case, the driver will completely
-  ignore any xorg.conf clock specification, and programme the clock
-  generator as needed by the modes used during the X session.
-
-
-  5.6.2.  Clocks for unsupported programmable clock generators
-
-  This case is unlikely to occur, but is documented for the sake of
-  completeness.
-
-  In this situation, the driver will probe the adapter for clock
-  frequencies unless xorg.conf clocks are already specified.  In either
-  case, the driver will then attempt to normalise the clocks to one of
-  the following specifications:
-
-  BIOS setting 1:
-
-    Clocks   0.000 110.000 126.000 135.000  50.350  56.640  63.000  72.000
-             0.000  80.000  75.000  65.000  40.000  44.900  49.500  50.000
-             0.000  55.000  63.000  67.500  25.180  28.320  31.500  36.000
-             0.000  40.000  37.500  32.500  20.000  22.450  24.750  25.000
-
-
-
-  BIOS setting 2:
-
-    Clocks   0.000 110.000 126.000 135.000  25.180  28.320  31.500  36.000
-             0.000  80.000  75.000  65.000  40.000  44.900  49.500  50.000
-             0.000  55.000  63.000  67.500  12.590  14.160  15.750  18.000
-             0.000  40.000  37.500  32.500  20.000  22.450  24.750  25.000
-
-
-
-  BIOS setting 3:
-
-    Clocks   0.000   0.000   0.000   0.000  25.180  28.320   0.000   0.000
-             0.000   0.000   0.000   0.000   0.000   0.000   0.000   0.000
-             0.000   0.000   0.000   0.000  12.590  14.160   0.000   0.000
-             0.000   0.000   0.000   0.000   0.000   0.000   0.000   0.000
-
-
-  If the driver matches the clocks to the third setting above, function-
-  ality will be extremely limited (assuming the driver works at all).
-
-
-  5.6.3.  Clocks for fixed clock generators on ATI adapters
-
-  This section applies to all VGAWonder and Mach32 adapters, and to
-  early Mach64 prototypes.
-
-  One of the following clocks specifications (or an initial subset
-  thereof) can be used depending on what the adapter uses to generate
-  dot clocks:
-
-  Crystals (VGA Wonder V3 and V4 adapters only):
-
-    Clocks  50.000  56.644   0.000  44.900  44.900  50.000   0.000  36.000
-            25.000  28.322   0.000  22.450  22.450  25.000   0.000  18.000
-            16.667  18.881   0.000  14.967  14.967  16.667   0.000  12.000
-            12.500  14.161   0.000  11.225  11.225  12.500   0.000   9.000
-
-
-
-  ATI 18810 clock generator:
-
-    Clocks  30.240  32.000  37.500  39.000  42.954  48.771   0.000  36.000
-            40.000   0.000  75.000  65.000  50.350  56.640   0.000  44.900
-            15.120  16.000  18.750  19.500  21.477  24.386   0.000  18.000
-            20.000   0.000  37.500  32.500  25.175  28.320   0.000  22.450
-            10.080  10.667  12.500  13.000  14.318  16.257   0.000  12.000
-            13.333   0.000  25.000  21.667  16.783  18.880   0.000  14.967
-             7.560   8.000   9.375   9.750  10.739  12.193   0.000   9.000
-            10.000   0.000  18.750  16.250  12.586  14.160   0.000  11.225
-
-
-
-  ATI 18811-0 and ATI 18812-0 clock generators:
-
-    Clocks  30.240  32.000 110.000  80.000  42.954  48.771  92.400  36.000
-            39.910  44.900  75.000  65.000  50.350  56.640   0.000  44.900
-            15.120  16.000  55.000  40.000  21.477  24.386  46.200  18.000
-            19.955  22.450  37.500  32.500  25.175  28.320   0.000  22.450
-            10.080  10.667  36.667  26.667  14.318  16.257  30.800  12.000
-            13.303  14.967  25.000  21.667  16.783  18.880   0.000  14.967
-             7.560   8.000  27.500  20.000  10.739  12.193  23.100   9.000
-             9.978  11.225  18.750  16.250  12.588  14.160   0.000  11.225
-
-
-
-  ATI 18811-1 and ATI 18811-2 clock generators:
-
-    Clocks 135.000  32.000 110.000  80.000 100.000 126.000  92.400  36.000
-            39.910  44.900  75.000  65.000  50.350  56.640   0.000  44.900
-            67.500  16.000  55.000  40.000  50.000  63.000  46.200  18.000
-            19.955  22.450  37.500  32.500  25.175  28.320   0.000  22.450
-            45.000  10.667  36.667  26.667  33.333  42.000  30.800  12.000
-            13.303  14.967  25.000  21.667  16.783  18.880   0.000  14.967
-            33.750   8.000  27.500  20.000  25.000  31.500  23.100   9.000
-             9.978  11.225  18.750  16.250  12.588  14.160   0.000  11.225
-
-
-
-  ICS 2494-AM clock generators (found on some Dell motherboards):
-
-    Clocks  75.000  77.500  80.000  90.000  25.175  28.322  31.500  36.000
-           100.000 110.000 126.000 135.000  40.000  44.900  50.000  65.000
-            37.500  38.750  40.000  45.000  12.588  14.161  15.750  18.000
-            50.000  55.000  63.000  67.500  20.000  22.450  25.000  32.500
-            25.000  25.833  26.667  30.000   8.392   9.441  10.500  12.000
-            33.333  36.667  42.000  45.000  13.333  14.767  16.667  21.667
-            18.750  19.375  20.000  22.500   6.294   7.081   7.875   9.000
-            25.000  27.500  31.500  33.750  10.000  11.225  12.500  16.250
-
-
-  VGAWonder VLB, VGA 1024 VLB, Mach32 and Mach64 owners should only
-  specify up to the first 32 frequencies.  Any more will be ignored.
-
-  Other clock generators that have been used on ATI adapters (which can
-  all be said to be clones of one of the above) might generate non-zero
-  frequencies for those that are zero above, or vice-versa.
-
-  The order of the clocks is very important, although the driver will
-  reorder the specified clocks if it deems it appropriate to do so.
-  Mach32 and Mach64 owners should note that this order is different than
-  what they would use for previous accelerated servers.
-
-
-  5.6.4.  Clocks for non-ATI adapters
-
-  If no clocks are specified in the xorg.conf, the driver will probe for
-  four clocks, the second of which will be assumed to be 28.322 MHz.
-  The first clock will typically be 25.175 MHz, but there are
-  exceptions.  You can include up to four clock frequencies in your
-  xorg.conf to specify the actual values used by the adapter.  Any more
-  will be ignored.
-
-
-  5.7.  Option ``nopanel_display''
-
-  This specification is only effective when the driver detects that the
-  adapter's BIOS has initialised both the digital flat panel and CRT
-  interfaces.  In such a situation, the driver will normally drive both
-  the panel and the CRT.  This specification causes the driver to
-  disable the digital flat panel and display the screen image on the CRT
-  instead, which could potentially allow for larger physical resolutions
-  than the panel can handle.
-
-
-  5.8.  Option ``crt_display''
-
-  This specification is only effective when the driver detects that the
-  adapter's BIOS has initialised the digital flat panel interface, but
-  has disabled the CRT interface.  In such a situation the driver will
-  normally drive only the panel.  This specification causes the driver
-  to instead display the same image on both the panel and the CRT.
-  5.9.  Option ``noaccel''
-
-  By default, the driver will accelerate draw operations if a Mach64
-  CRTC is used to drive the display.  As implemented in this driver,
-  acceleration does not require a linear video memory aperture.  This
-  option disables this acceleration.
-
-
-  5.10.  Option ``nolinear''
-
-  By default, the driver will enable a linear video memory aperture for
-  256-colour and higher depth modes if it is also using a Mach64
-  accelerator CRTC or an integrated Mach64 graphics chip.  This option
-  disables this linear aperture.
-
-  On non-Intel platforms, the driver requires a linear aperture and, so,
-  this option is ignored.
-
-
-  5.11.  Option ``HWCursor''  and Option ``SWCursor''
-
-  Option ``HWCursor'', which is the default, specifies that hardware
-  facilities are to be used to paint the mouse pointer on the screen.
-  Option ``SWCursor'' specifies that the mouse pointer is to be drawn by
-  software, which is much slower.  If both options are specified, option
-  ``SWCursor'' prevails.  Currently, these options are only acted upon
-  for 256-colour or higher depth modes, if a Mach64 accelerator CRTC, or
-  a Mach64 integrated controller is being used.  In all other
-  situations, a software cursor will be used, regardless of what these
-  options specify.
-
-
-  5.12.  Option ``SilkenMouse''
-
-  This option is only acted upon when a hardware cursor is being used.
-  It specifies that the cursor's position on the screen is to be updated
-  as quickly as possible when the mouse is moved.  This is the default
-  behaviour.  If this option is negated, the cursor may lag the mouse
-  when the X server is very busy.
-
-
-  5.13.  Option ``shadowfb''
-
-  If this option is enabled, the driver will cause the CPU to do each
-  drawing operation first into a shadow frame buffer in system virtual
-  memory and then copy the result into video memory.  If this option is
-  not active, the CPU will draw directly into video memory.  Enabling
-  this option is beneficial for those systems where reading from video
-  memory is, on average, slower than the corresponding read/modify/write
-  operation in system virtual memory.  This is normally the case for PCI
-  or AGP adapters, and, so, this option is enabled by default.  For
-  other bus types, the default behaviour is to disable this option.
-
-  Note that, due to various limitations, this option is forcibly
-  disabled when a linear video memory aperture is not enabled, when the
-  frame buffer depth is less than 8, or when acceleration is used.
-
-
-  5.14.  Option ``dpms''
-
-  This option enables the driver's support for VESA's Display Power
-  Management Specification.
-
-
-
-  5.15.  Option ``backingstore''
-
-  This is not specifically a driver option.  It is used to enable the
-  server's support for backing store, a mechanism by which pixel data
-  for occluded window regions is remembered by the server thereby
-  alleviating the need to send expose events to X clients when the data
-  needs to be redisplayed.
-
-
-  5.16.  MemBase address
-
-  This specification is only effective for non-PCI Mach64 adapters, and
-  is used to override the CPU address at which the adapter will map its
-  video memory.  Normally, for non-PCI adapters, this address is set by
-  a DOS install utility provided with the adapter.  The MemBase option
-  can also be used to enable the linear aperture in those cases where
-  ATI's utility was not, or can not be, used.
-
-  For PCI and AGP adapters, this address is determined at system bootup
-  according to the PCI Plug'n'Play specification which arbitrates the
-  resource requirements of most devices in the system.  This means the
-  driver can not easily change the linear aperture address.
-
-
-  5.17.  Option ``ReferenceClock''  ``frequency''
-
-  This option is only applicable to non-Intel platforms, where an
-  adapter BIOS is not available to the driver.  The option specifies the
-  reference frequency used by the adapter's clock generator.  The
-  default is 14.318 MHz, and other typical values are 28.636, or 29.5
-  MHz.
-
-
-  5.18.  ClockChip ``name''
-
-  This option is only applicable to non-Intel platforms, where an
-  adapter BIOS is not available to the driver, and the driver cannot
-  reliably determine whether the clock generator the adapter uses is a
-  variant of an ATI 18818 (a.k.a.  ICS 2595) or an unsupported clock
-  generator.  The only values that are acted upon are ``ATI 18818-0'' or
-  ``ATI 18818-1''.  From this specification, the driver derives a
-  reference divider of 43 or 46 (respectively) for use in clock
-  programming calculations.  The driver's default behaviour, in this
-  case, is to assume an unsupported clock generator, which means it will
-  treat it as a fixed-frequency clock generator, as described under the
-  heading ``Clocks for unsupported programmable clock generators''
-  above.
-
-
-  6.  Video modes
-
-  Mode timings can be derived from the information in X's doc
-  subdirectory.  However, it is no longer required to specify such
-  timings in an xorg.conf's ``Monitor'' section(s), if only standard
-  mode timings are to be used.  The server automatically inserts VESA
-  standard mode timings in every ``Monitor'' section, and these modes
-  will be checked first for mode constraints (monitor sync tolerances,
-  video memory size, etc.).
-
-  Furthermore, it is also no longer required to specify mode names in
-  ``Display'' subsections.  Should no mode names be specified (or those
-  specified do not yield a usable mode), the server will automatically
-  select as a default resolution the largest usable mode, whether or not
-  the chosen mode is specified in the corresponding ``Monitor'' section.
-
-
-  For a digital flat panel, any sync tolerances should be removed from
-  the corresponding ``Monitor'' section.  The driver will automatically
-  calculate these from the mode that is active on server entry.  The
-  driver also inserts timings for a mode called "Native panel mode" that
-  represents the panel's native resolution.
-
-
-  7.  Known problems and limitations
-
-  There are several known problems or limitations related to the ATI
-  driver.  They include:
-
-
-  +o  When using a Mach64's accelerator CRTC, the virtual resolution must
-     be less than 8192 pixels wide.  The VGA CRTC further limits the
-     virtual resolution width to less than 4096 pixels, or to less than
-     2048 pixels for adapters based on 18800-x's (with 256kB of memory)
-     and on Mach64 integrated controllers.  These are hardware limits
-     that cannot be circumvented.
-
-  +o  Virtual resolutions requiring more than 1MB of video memory (256kB
-     in the monochrome case) are not supported by the VGA CRTC on
-     88800GX and 88800CX adapters.  This is a hardware limit that cannot
-     be circumvented.
-
-  +o  Due to hardware limitations, doublescanned modes are not supported
-     by the accelerator CRTC in 88800GX, 88800CX, 264CT and 264ET
-     adapters.
-
-  +o  The ``VScan'' modeline parameter is only supported when using the
-     VGA CRTC.
-
-  +o  Interlaced modes are not supported on 18800-x and 28800-x adapters
-     when using a virtual resolution that is 2048 pixels or wider.  When
-     using a 18800-x with 256kB of video memory in 256-colour modes,
-     this limit is reduced to 1024.  This is yet another hardware
-     limitation that cannot be circumvented.
-
-  +o  Video memory banking does not work in monochrome and 16-colour
-     modes on 18800-x adapters.  This appears to be another hardware
-     limit, but this conclusion cannot be confirmed at this time.  The
-     driver's default behaviour in this case is to limit video memory to
-     256kB.
-
-  +o  Video memory corruption can still occur during mode switches on
-     18800-x adapters.  Symptoms of this problem include garbled fonts
-     on return to text mode, and various effects (snow, dashed lines,
-     etc) on initial entry into a graphics mode.  In the first case, the
-     workaround is to use some other means of restoring the text font.
-     On Linux, this can be accomplished with the kbd or svgalib
-     packages.  In the second case, xrefresh(1) will usually clean up
-     the image.  No complete solution to this problem is currently
-     known.  It appears this corruption occurs due to either video
-     memory bandwidth or RAMDAC limitations, and so the driver will
-     limit mode clocks to 40MHz.
-
-  +o  There is some controversy over what the maximum allowed clock
-     frequency should be on 264xT and 3D Rage adapters.  For now, clocks
-     will, by default, be limited to 80MHz, 135MHz, 170MHz, 200MHz or
-     230MHz, depending on the specific controller.  This limit can only
-     be increased (up to a driver-calculated absolute maximum) through
-     the DACSpeed specification in xorg.conf.  Be aware however that
-     doing so is untested and might damage the adapter.
-
-  +o  Except as in the previous items, clocks are limited to 80MHz on
-     most adapters, although many are capable of higher frequencies.
-     This will eventually be fixed in a future release.
-
-  +o  The use of a laptop's hot-keys to switch displays while this driver
-     is active can cause lockups and/or other woes, and is therefore not
-     recommended.  It is not currently possible to solve this problem.
-
-
-  +o  In situations where the driver is to simultaneously display on both
-     a panel and a CRT, the same image will be seen on both.  In
-     particular, this means the CRT must be able to synchronise with the
-     timings of the panel's native resolution.  This is quite evident
-     when the panel has ``odd-ball'' dimensions, such as 1400x1050, a
-     resolution not commonly possible on CRTs or projection equipment.
-
-     Also, the display of independent images on the panel and CRT is not
-     currently implemented, and might never be, pending resolution of
-     the previous item.
-
-
-     Support for the following will be added in a future release:
-
-  +o  Mach32's accelerator CRTC.  This support is the first step towards
-     accelerated support for Mach32's, Mach8's, 8514/A's and other
-     clones.
-
-  +o  Colour depth greater than 8 on non-integrated controllers, where
-     permitted by the hardware.
-
-  +o  Mach32, Mach8 and 8514/A Draw Engines.
-
-  +o  Hardware cursors where implemented by hardware.  This has already
-     been done for Mach64 integrated controllers.
-
-  +o  TVOut, i.e. the ability to use a television screen as a monitor.
-
-  +o  Motion Video, i.e. displaying an asynchronous data stream (TV
-     signal, DVD, etc.) in a window or full-screen.
-
-  +o  3D operations.
-
-  8.  Reporting problems
-
-  If you are experiencing problems that are not already recorded in this
-  document, first ensure that you have the latest current release of
-  this driver and the Xorg X server..  Check the server's log (usually
-  found in /var/log/Xorg.0.log) and ftp://ftp.freedesktop.org/pub/Xorg
-  if you are uncertain.
-
-  Secondly, please check Xorg's doc directory for additional
-  information.
-
-  Thirdly, a scan through the comp.windows.x.i386unix and
-  comp.os.linux.x newsgroups and the xorg mailing list using your
-  favourite archiving service can also prove useful in resolving
-  problems.
-
-  If you are still experiencing problems, you can send me non-HTMLised
-  e-mail at  <tsi at xfree86.org>.  Please be as specific as possible when
-  describing the problem(s), and include an unedited copy of the
-  server's log and the xorg.conf file used.
-
-
-  9.  Driver history
-
-  The complete history of the driver is rather cloudy.  The following is
-  more than likely to be incomplete and inaccurate.
-  Apparently, Per Lindqvist first got a driver working with an early ATI
-  adapter under X386 1.1a.  This original driver might have actually
-  been based on a non-functional ATI driver written by Thomas Roell
-  (currently of Xi Graphics).
-
-  Then Doug Evans added support for the ATI VGA Wonder XL, trying in the
-  process to make the driver work with all other ATI adapters available
-  at the time.
-
-  Rik Faith obtained the X11R4 driver from Doug Evans in the summer of
-  1992 and ported the code to the X386 part of X11R5.  This subsequently
-  became part of XFree86.
-
-  I (Marc Aurele La France) took over development and maintenance of the
-  driver in the fall of 1993 after Rik got rid of his VGA Wonder
-  adapter.
-
-
-  10.  Driver versions
-
-  Due to the introduction of loadable drivers in XFree86 4.0, it has
-  become necessary to track driver versions separately.  Driver releases
-  use the following version numbering scheme.
-
-  Version 1 of this driver is the one I inherited from Rik Faith.  This
-  is the version found in XFree86 2.0 and 2.1.
-
-  Version 2 is my first rewrite of this code which only ended up being a
-  partially unsuccessful attempt at generalising the driver for all VGA
-  Wonder, Mach32, and early Mach64 adapters.  Various releases of this
-  version of the driver can be found in XFree86 2.1.1, 3.1, 3.1.1 and
-  3.1.2.
-
-  Version 3 represents my second rewrite (although a rather lame one as
-  rewrites go).  Into version 3, I introduced clock programming for
-  Mach64 adapters and merged in the old ati_test debugging tool.  This
-  is the version found in XFree86 3.2, 3.3 and 3.3.1.
-
-  Version 4 is a rather major restructuring of version 3, which became
-  larger than I could comfortably handle in one source file.  This is
-  the version found in XFree86 3.3.2, 3.3.3, 3.3.3.1, 3.3.3.2, 3.3.4,
-  3.3.5 and 3.3.6.
-
-  Version 5 is an almost complete restructuring of version 4 to fit in
-  the newer driver API of XFree86 4.0 and later.
-
-  The introduction of version 6 is a first swipe at porting the driver
-  to non-Intel architectures.
-
-
-
diff --git a/README.ati.sgml b/README.ati.sgml
deleted file mode 100644
index 0ac826a..0000000
--- a/README.ati.sgml
+++ /dev/null
@@ -1,648 +0,0 @@
-<!DOCTYPE linuxdoc PUBLIC "-//Xorg//DTD linuxdoc//EN"[
-<!ENTITY % defs SYSTEM "defs.ent"> %defs;
-]>
-
-<article>
-
-<!-- Title information -->
-
-<title>ATI Adapters README file
-<author>Marc Aurele La France
-<date>2002 February 12
-
-
-
-
-
-<ident>
-$Id$ 
-Based on XFree86: xc/programs/Xserver/hw/xfree86/doc/sgml/ati.sgml,v 3.42 2003/01/20 03:43:07 dawes Exp 
-</ident>
-
-<abstract>
-This is the README for the XAA ATI driver included in this release.
-</abstract>
-
-<!-- Table of contents -->
-<toc>
-
-<!-- Begin the document -->
-
-<sect>Statement of intent<p>
-Generally speaking, the driver is intended for all ATI video adapters
-based on the Mach64 series or older chipsets,
-providing maximum video function within hardware limitations.
-The driver is also intended to optionally provide the same level of support for
-generic VGA or 8514/A adapters.
-The newer Rage 128 and Radeon chips are not yet supported by this driver.
-Rage 128's and Radeon's are, however, supported by separate drivers, and
-owners of such adapters should consult the documentation provided with these
-drivers.
-This driver will also invoke the appropriate driver if it finds Rage 128 and/or
-Radeon adapter(s) in the system.
-This driver is still being actively developed, meaning that it currently does
-not yet fully meet these goals.<p>
-The driver will provide
-<itemize>
-<item>accelerated support if an ATI accelerator is detected <it>and</it> the
-user has not requested that this support be disabled;  otherwise
-<item>accelerated support if a non-ATI 8514/A-capable adapter is detected
-<it>and</it> the user has requested such support;  otherwise
-<item>unaccelerated SuperVGA support if an ATI VGA-capable adapter is detected;
-otherwise
-<item>generic VGA support if a non-ATI VGA-capable adapter is detected
-<it>and</it> the user has requested such support.
-</itemize>
-Thus, the level of support provided not only depends on what the driver detects
-in the system, but also, on what the user specifies in the xorg.conf file.
-See the <bf>``xorg.conf specifications''</bf> section below for details.<p>
-If none of the above conditions are met, the ATI driver will essentially
-disable itself to allow other drivers to examine the system.<p>
-<!-- 
-Note that I am currently considering removing the driver's support for generic
-VGA.
-If you have any concerns about this, please contact me at
-<email>tsi at xfree86.org</email>.
--->
-<sect>A note on acceleration<p>
-The meaning of ``acceleration'', as used in this document, needs to be
-clarified.
-Two of the many components in an accelerator are the CRT controller (CRTC) and
-the Draw Engine.
-This is in addition to another CRTC that, generally, is also present in the
-system (often in the same chip) and typically provides EGA, VGA or SuperVGA
-functionality.<p>
-A CRTC is the component of a graphics controller that is responsible for
-reading video memory for output to the screen.
-A Draw Engine is an accelerator component that can be programmed to manipulate
-video memory contents, thus freeing the CPU for other tasks.<p>
-When the VGA CRTC is used, all drawing operations into video memory are the
-responsibility of the system's CPU, i.e. no Draw Engine can be used.
-On the other hand, if the accelerator's CRTC is chosen to drive the screen,
-the Draw Engine can also be used for drawing operations, although the CPU can
-still be used for this purpose if it can access the accelerator's video
-memory.<p>
-Video acceleration refers to the programming of an accelerator's Draw Engine to
-offload drawing operations from the CPU, and thus also implies the use of the
-accelerator's CRTC.<p>
-<sect>Current implementation for ATI adapters<p>
-The driver currently supports the SuperVGA capabilities of all ATI adapters
-except some early Mach8 and Mach32 adapters that do not provide the required
-functionality.
-This support works for monochrome, 16-colour and 256-colour video modes, if one
-of the following ATI graphics controller chips is present:
-<verb>
-VGAWonder series:  18800, 18800-1, 28800-2, 28800-4, 28800-5, 28800-6
-   Mach32 series:  68800-3, 68800-6, 68800AX, 68800LX
-   Mach64 series:  88800GX-C, 88800GX-D, 88800GX-E, 88800GX-F, 88800CX,
-                   264CT, 264ET, 264VT, 264GT (3D Rage), 264VT-B, 264VT3,
-                   264VT4, 264GT-B (3D Rage II), 3D Rage IIc, 3D Rage Pro,
-                   3D Rage LT, 3D Rage LT Pro, 3D Rage XL, 3D Rage XC,
-                   3D Rage Mobility (including the -M and -P variants)</verb>
-The driver also supports 32K, 64K and 16M-colour modes on the 264xT and 3D Rage
-series of adapters using the accelerator CRTC (but not the VGA CRTC).<p>
-The newer Rage 128 and Radeon chips are not yet supported by this driver.
-Rage 128's and Radeon's are, however, supported by separate drivers, and
-owners of such adapters should consult the documentation provided with these
-drivers.
-This driver will also invoke the appropriate driver if it finds Rage 128 and/or
-Radeon adapter(s) in the system.<p>
-Adapters based on the above chips have been marketed under a rather large
-number of names over the years.
-Among them are:
-<verb>
-VGAWonder series:  VGAWonder V3, VGAWonder V4, VGAWonder V5, VGAWonder+,
-                   VGAWonder XL, VGAWonder XL24, VGAWonder VLB, VGA Basic,
-                   VGA Basic 16, VGA Edge, VGA Edge 16, VGA Integra,
-                   VGA Charger, VGAStereo F/X, VGA 640, VGA 800, VGA 1024,
-                   VGA 1024D, VGA 1024 XL, VGA 1024 DXL, VGA 1024 VLB
-    Mach8 series:  Graphics Ultra, Graphics Vantage, VGAWonder GT
-                   (None of the 8514/Ultra and 8514 Vantage series is
-                    supported at this time)
-   Mach32 series:  Graphics Ultra+, Graphics Ultra Pro, Graphics Wonder,
-                   Graphics Ultra XLR, Graphics Ultra AXO, VLB mach32-D,
-                   PCI mach32-D, ISA mach32
-   Mach64 series:  Graphics Xpression, Graphics Pro Turbo, WinBoost,
-                   WinTurbo, Graphics Pro Turbo 1600, Video Xpression,
-                   3D Xpression, Video Xpression+, 3D Xpression+,
-                   3D Charger, Video Charger, WinCharger, All-In-Wonder,
-                   All-In-Wonder PRO, 3D Pro Turbo, XPERT at Play,
-                   XPERT at Play 98, XPERT at Work, XPERT 98, XPERT LCD,
-                   XPERT XL</verb>
-Also, a number of mainboards, laptops and notebooks harbour a Mach32 or Mach64
-controller.<p>
-VGAWonder, Mach8 and Mach32 ISA adapters are available with or without a
-mouse.<p>
-These adapters are available with a variety of clock generators and RAMDACs.
-The 264xT and 3D Rage series of chips are integrated controllers, meaning that
-they include a programmable clock generator and a RAMDAC.<p>
-For all but Mach64 adapters, this driver still does not provide support for
-accelerated drawing to the screen.
-This means that all drawing is done by the CPU, rather than by any accelerator
-present in the system.
-This can make opaque moves, for example, quite ``jerky''.
-Also, given that IBM 8514/A and ATI Mach8 do not allow CPU access to their
-frame buffer, the driver will currently ignore these accelerators.
-Most Mach32 adapters provide both accelerated function and SuperVGA
-functionality, but the driver currently only uses the VGA.<p>
-The driver <it>does</it> however support the accelerator CRTC present in all
-ATI Mach64 adapters.
-For 256-colour, and higher depth modes, this support will be used by default,
-although an xorg.conf option can be specified to use the SuperVGA CRTC
-instead.
-A linear video memory aperture is also available in 256-colour and higher depth
-modes and enabled by default if a 264xT or 3D Rage controller is detected or,
-on 88800 controllers, if the accelerator CRTC is used.
-xorg.conf options are available to disable this aperture, or (for non-PCI
-adapters) enable it or move it to some other address.<p>
-By default, the driver provides some acceleration for Mach64 if the accelerator
-CRTC is used, and modes whose colour depth greater than or equal to 8 are to be
-used.
-This support is as yet incomplete and can be disabled entirely with an
-xorg.conf option.<p>
-On non-Intel platforms, the driver can, currently, only support PCI Mach64
-adapters.<p>
-<sect>Current implementation of generic VGA support for non-ATI adapters<p>
-Support for generic VGA with non-ATI adapters is also implemented, but has
-undergone only limited testing.
-The driver will intentionally disallow the use of this support with ATI
-adapters.
-This support must be explicitly requested through an xorg.conf ChipSet
-specification.
-This prevents the current VGA generic driver from being disabled.<p>
-This driver's generic VGA support is intended as an extension of that provided
-by the current generic driver.
-Specifically, within the architectural bounds defined by IBM's VGA standard,
-this driver will allow the use of any 256-colour mode, and any dot clock
-frequencies both of which allow for many more mode possibilities.<p>
-The driver will enforce the following limitations derived from IBM's original
-VGA implementation:
-<itemize>
-<item>There can only be a set of four (non-programmable) clocks to choose from.
-<item>Video memory is limited to 256kB in monochrome and 16-colour modes.
-<item>Video memory is limited to 64kB in 256-colour modes.
-<item>Interlaced modes are not available.
-<item>Colour depths higher than 8 are not available.
-</itemize>
-<sect>xorg.conf specifications<p>
-The driver recognises a number of xorg.conf options.
-In general, all such options should be specified in a ``Device'' section, and
-affect only that ``Device'' section.<p>
-Those options that affect how the driver associates adapters with ``Device''
-sections are described first.
-The driver will ignore (with a message) a ``Device'' section if the section
-cannot be associated with exactly one adapter in the system.
-Similarly, the driver will ignore, or disable, (with a message) any adapter
-that cannot be associated with exactly one ``Device'' section.
-Thus, these options will be required in those uncommon cases where such unique
-associations cannot automatically be made by the driver.<p>
-Other options affect the driver's operation once an adapter has been assigned
-to the ``Device'' section which contains them.<p>
-<sect1>Driver ``ati''<p>
-The use of this specification is highly recommended if the ``Device'' section
-is to be recognised by the driver.
-In fact, it is almost (but not quite) mandatory, particularly when using the
-loader server as it indicates what driver is to be loaded and associated with
-the ``Device'' section.<p>
-<sect1>ChipSet ``name''<p>
-The default ChipSet name for this driver is ``<it>ati</it>''.
-In this case, any ATI adapter can be associated with the ``Device'' section.
-If an ATI accelerator is detected and the driver supports it, the accelerator's
-CRTC will be used to drive the screen.
-Otherwise, the driver will programme the adapter's SuperVGA CRTC.<p>
-If ``<it>ativga</it>'' is specified instead, the driver will ignore any ATI
-accelerator it detects, but otherwise operate as if ``<it>ati</it>'' had been
-specified.
-This specification ensures the VGA CRTC is used.<p>
-A ChipSet name of ``<it>ibmvga</it>'' causes any VGA-capable adapter in the
-system to be associated with the ``Device'' section.
-It enables the driver's generic VGA support, but only for non-ATI adapters.
-If an ATI adapter is associated with the ``Device'' section, the driver will
-operate as if ``<it>ativga</it>'' had been specified instead.<p>
-A ChipSet name of ``<it>vgawonder</it>'' is equivalent to ``<it>ativga</it>'',
-except that only VGAWonder-capable adapters can be assigned to the ``Device''
-section.
-This specifically excludes the newer integrated Mach64 controllers.<p>
-In some PCI or AGP systems, the driver will not, by default, probe for non-PCI
-Mach32's or Mach64's.
-This is because, before doing any such probe, the driver attempts to determine
-if the probe can cause a lockup.
-If the driver has enough information to determine that a lockup would occur, it
-will skip the probe.
-In some situations, this determination cannot be accurate, and the driver will
-err on the side of caution, skipping the probe.
-Specifying a ChipSet name of ``<it>mach32</it>'' or ``<it>mach64</it>'', as
-appropriate, will force the driver to probe for the non-PCI adapter.
-These ChipSet names should, therefore, only be used when there is in fact such
-an adapter in the system.
-They are otherwise equivalent to ``<it>ati</it>''.<p>
-On non-Intel platforms, only ``<it>ati</it>'' and ``<it>mach64</it>'' ChipSet
-values are operative.<p>
-<sect1>ChipID & ChipRev specifications<p>
-These specifications will cause the driver to associate the ``Device'' section
-only with an adapter having the same attributes, or an adapter whose PCI device
-ID the driver does not recognise.
-In the second case, these options cause the driver to treat the adapter as if
-it was one with the specified PCI device ID or revision.
-ChipID can only be used with Mach32 or Mach64 adapters, and, thus, specifically
-excludes any other adapter from matching the ``Device'' section.
-ChipRev is meaningful only with Mach64 adapters, and then only if ChipID is
-also specified in the same ``Device'' section.<p>
-<sect1>IOBase<p>
-This option limits the adapters that can be associated with the ``Device''
-section to the one with the specified I/O base.
-This option only applies to Mach64 adapters and specifically excludes other
-adapters.<p>
-<sect1>BusID<p>
-This option limits the adapters that can be associated with the ``Device''
-section to the one with the specified PCI Bus ID.
-This specification excludes non-PCI adapters.<p>
-<sect1>Clocks<p>
-For the purpose of specifying a clock line in your xorg.conf, one of four
-different situations can occur, as follows.<p>
-Those configuring the driver's generic VGA support for a non-ATI adapter,
-can skip ahead to the <bf>``Clocks for non-ATI adapters''</bf> section below.
-Those <it>not</it> trying to configure the driver for a Mach64 adapter, can
-skip ahead to the <bf>``Clocks for fixed clock generators on ATI
-adapters''</bf> section below.<p>
-The very earliest Mach64 adapters use fixed (i.e. non-programmable) clock
-generators.
-Very few of these (mostly prototypes) are known to exist, but if you have one
-of these, you can also skip ahead to the <bf>``Clocks for fixed clock
-generators on ATI adapters''</bf> section below.<p>
-The two cases that are left deal with programmable clock generators, which are
-used on the great majority of Mach64 adapters.<p>
-If you are uncertain which situation applies to your adapter, you can run a
-clock probe with the command ``<tt>X -probeonly</tt>''.<p>
-<sect2>Clocks for supported programmable clock generators<p>
-At bootup, video BIOS initialisation programmes an initial set of frequencies.
-Two of these are reserved to allow the setting of modes that do not use a
-frequency from this initial set.
-One of these reserved slots is used by the BIOS mode set routine, the other by
-the particular driver used (e.g. MS-Windows, AutoCAD, X, etc.).
-The clock numbers reserved in this way are dependent on the particular clock
-generator used by the adapter.<p>
-The driver currently supports all programmable clock generators known to exist
-on Mach64 adapters.
-In this case, the driver will completely ignore any xorg.conf clock
-specification, and programme the clock generator as needed by the modes used
-during the X session.<p>
-<sect2>Clocks for unsupported programmable clock generators<p>
-This case is unlikely to occur, but is documented for the sake of
-completeness.<p>
-In this situation, the driver will probe the adapter for clock frequencies
-unless xorg.conf clocks are already specified.
-In either case, the driver will then attempt to normalise the clocks to one of
-the following specifications:
-<verb>
-BIOS setting 1:
-
-  Clocks   0.000 110.000 126.000 135.000  50.350  56.640  63.000  72.000
-           0.000  80.000  75.000  65.000  40.000  44.900  49.500  50.000
-           0.000  55.000  63.000  67.500  25.180  28.320  31.500  36.000
-           0.000  40.000  37.500  32.500  20.000  22.450  24.750  25.000</verb>
-<verb>
-BIOS setting 2:
-
-  Clocks   0.000 110.000 126.000 135.000  25.180  28.320  31.500  36.000
-           0.000  80.000  75.000  65.000  40.000  44.900  49.500  50.000
-           0.000  55.000  63.000  67.500  12.590  14.160  15.750  18.000
-           0.000  40.000  37.500  32.500  20.000  22.450  24.750  25.000</verb>
-<verb>
-BIOS setting 3:
-
-  Clocks   0.000   0.000   0.000   0.000  25.180  28.320   0.000   0.000
-           0.000   0.000   0.000   0.000   0.000   0.000   0.000   0.000
-           0.000   0.000   0.000   0.000  12.590  14.160   0.000   0.000
-           0.000   0.000   0.000   0.000   0.000   0.000   0.000   0.000</verb>
-If the driver matches the clocks to the third setting above, functionality will
-be <it>extremely</it> limited (assuming the driver works at all).<p>
-<sect2>Clocks for fixed clock generators on ATI adapters<p>
-This section applies to all VGAWonder and Mach32 adapters, and to early Mach64
-prototypes.<p>
-One of the following clocks specifications (or an initial subset thereof) can
-be used depending on what the adapter uses to generate dot clocks:
-<verb>
-Crystals (VGA Wonder V3 and V4 adapters only):
-
-  Clocks  50.000  56.644   0.000  44.900  44.900  50.000   0.000  36.000
-          25.000  28.322   0.000  22.450  22.450  25.000   0.000  18.000
-          16.667  18.881   0.000  14.967  14.967  16.667   0.000  12.000
-          12.500  14.161   0.000  11.225  11.225  12.500   0.000   9.000</verb>
-<verb>
-ATI 18810 clock generator:
-
-  Clocks  30.240  32.000  37.500  39.000  42.954  48.771   0.000  36.000
-          40.000   0.000  75.000  65.000  50.350  56.640   0.000  44.900
-          15.120  16.000  18.750  19.500  21.477  24.386   0.000  18.000
-          20.000   0.000  37.500  32.500  25.175  28.320   0.000  22.450
-          10.080  10.667  12.500  13.000  14.318  16.257   0.000  12.000
-          13.333   0.000  25.000  21.667  16.783  18.880   0.000  14.967
-           7.560   8.000   9.375   9.750  10.739  12.193   0.000   9.000
-          10.000   0.000  18.750  16.250  12.586  14.160   0.000  11.225</verb>
-<verb>
-ATI 18811-0 and ATI 18812-0 clock generators:
-
-  Clocks  30.240  32.000 110.000  80.000  42.954  48.771  92.400  36.000
-          39.910  44.900  75.000  65.000  50.350  56.640   0.000  44.900
-          15.120  16.000  55.000  40.000  21.477  24.386  46.200  18.000
-          19.955  22.450  37.500  32.500  25.175  28.320   0.000  22.450
-          10.080  10.667  36.667  26.667  14.318  16.257  30.800  12.000
-          13.303  14.967  25.000  21.667  16.783  18.880   0.000  14.967
-           7.560   8.000  27.500  20.000  10.739  12.193  23.100   9.000
-           9.978  11.225  18.750  16.250  12.588  14.160   0.000  11.225</verb>
-<verb>
-ATI 18811-1 and ATI 18811-2 clock generators:
-
-  Clocks 135.000  32.000 110.000  80.000 100.000 126.000  92.400  36.000
-          39.910  44.900  75.000  65.000  50.350  56.640   0.000  44.900
-          67.500  16.000  55.000  40.000  50.000  63.000  46.200  18.000
-          19.955  22.450  37.500  32.500  25.175  28.320   0.000  22.450
-          45.000  10.667  36.667  26.667  33.333  42.000  30.800  12.000
-          13.303  14.967  25.000  21.667  16.783  18.880   0.000  14.967
-          33.750   8.000  27.500  20.000  25.000  31.500  23.100   9.000
-           9.978  11.225  18.750  16.250  12.588  14.160   0.000  11.225</verb>
-<verb>
-ICS 2494-AM clock generators (found on some Dell motherboards):
-
-  Clocks  75.000  77.500  80.000  90.000  25.175  28.322  31.500  36.000
-         100.000 110.000 126.000 135.000  40.000  44.900  50.000  65.000
-          37.500  38.750  40.000  45.000  12.588  14.161  15.750  18.000
-          50.000  55.000  63.000  67.500  20.000  22.450  25.000  32.500
-          25.000  25.833  26.667  30.000   8.392   9.441  10.500  12.000
-          33.333  36.667  42.000  45.000  13.333  14.767  16.667  21.667
-          18.750  19.375  20.000  22.500   6.294   7.081   7.875   9.000
-          25.000  27.500  31.500  33.750  10.000  11.225  12.500  16.250</verb>
-VGAWonder VLB, VGA 1024 VLB, Mach32 and Mach64 owners should only specify up to
-the first 32 frequencies.
-Any more will be ignored.<p>
-Other clock generators that have been used on ATI adapters (which can all be
-said to be clones of one of the above) might generate non-zero frequencies for
-those that are zero above, or vice-versa.<p>
-The order of the clocks <it>is</it> very important, although the driver will
-reorder the specified clocks if it deems it appropriate to do so.
-Mach32 and Mach64 owners should note that this order is different than what
-they would use for previous accelerated servers.<p>
-<sect2>Clocks for non-ATI adapters<p>
-If no clocks are specified in the xorg.conf, the driver will probe for four
-clocks, the second of which will be assumed to be 28.322 MHz.
-The first clock will typically be 25.175 MHz, but there are exceptions.
-You can include up to four clock frequencies in your xorg.conf to specify the
-actual values used by the adapter.
-Any more will be ignored.<p>
-<sect1>Option <it>``nopanel_display''</it><p>
-This specification is only effective when the driver detects that the adapter's
-BIOS has initialised both the digital flat panel and CRT interfaces.
-In such a situation, the driver will normally drive both the panel and the CRT.
-This specification causes the driver to disable the digital flat panel and
-display the screen image on the CRT instead, which could potentially allow for
-larger physical resolutions than the panel can handle.<p>
-<sect1>Option <it>``crt_display''</it><p>
-This specification is only effective when the driver detects that the adapter's
-BIOS has initialised the digital flat panel interface, but has disabled the
-CRT interface.
-In such a situation the driver will normally drive only the panel.
-This specification causes the driver to instead display the same image on both
-the panel and the CRT.<p>
-<sect1>Option <it>``noaccel''</it><p>
-By default, the driver will accelerate draw operations if a Mach64 CRTC is used
-to drive the display.
-As implemented in this driver, acceleration does not require a linear video
-memory aperture.
-This option disables this acceleration.<p>
-<sect1>Option <it>``nolinear''</it><p>
-By default, the driver will enable a linear video memory aperture for
-256-colour and higher depth modes if it is also using a Mach64 accelerator CRTC
-or an integrated Mach64 graphics chip.
-This option disables this linear aperture.<p>
-On non-Intel platforms, the driver requires a linear aperture and, so, this
-option is ignored.<p>
-<sect1>Option <it>``HWCursor''</it> and Option <it>``SWCursor''</it><p>
-Option <it>``HWCursor''</it>, which is the default, specifies that hardware
-facilities are to be used to paint the mouse pointer on the screen.
-Option <it>``SWCursor''</it> specifies that the mouse pointer is to be drawn by
-software, which is much slower.
-If both options are specified, option <it>``SWCursor''</it> prevails.
-Currently, these options are only acted upon for 256-colour or higher depth
-modes, if a Mach64 accelerator CRTC, or a Mach64 integrated controller is being
-used.
-In all other situations, a software cursor will be used, regardless of what
-these options specify.<p>
-<sect1>Option <it>``SilkenMouse''</it><p>
-This option is only acted upon when a hardware cursor is being used.
-It specifies that the cursor's position on the screen is to be updated as
-quickly as possible when the mouse is moved.
-This is the default behaviour.
-If this option is negated, the cursor may lag the mouse when the X server is
-very busy.<p>
-<sect1>Option <it>``shadowfb''</it><p>
-If this option is enabled, the driver will cause the CPU to do each drawing
-operation first into a shadow frame buffer in system virtual memory and then
-copy the result into video memory.
-If this option is not active, the CPU will draw directly into video memory.
-Enabling this option is beneficial for those systems where reading from video
-memory is, on average, slower than the corresponding read/modify/write
-operation in system virtual memory.
-This is normally the case for PCI or AGP adapters, and, so, this option is
-enabled by default.
-For other bus types, the default behaviour is to disable this option.<p>
-Note that, due to various limitations, this option is forcibly disabled when a
-linear video memory aperture is not enabled, when the frame buffer depth is
-less than 8, or when acceleration is used.<p>
-<sect1>Option <it>``dpms''</it><p>
-This option enables the driver's support for VESA's Display Power Management
-Specification.<p>
-<sect1>Option <it>``backingstore''</it><p>
-This is not specifically a driver option.
-It is used to enable the server's support for backing store, a mechanism by
-which pixel data for occluded window regions is remembered by the server
-thereby alleviating the need to send expose events to X clients when the data
-needs to be redisplayed.<p>
-<sect1>MemBase <it>address</it><p>
-This specification is only effective for non-PCI Mach64 adapters, and is used
-to override the CPU address at which the adapter will map its video memory.
-Normally, for non-PCI adapters, this address is set by a DOS install utility
-provided with the adapter.
-The MemBase option can also be used to enable the linear aperture in those
-cases where ATI's utility was not, or can not be, used.<p>
-For PCI and AGP adapters, this address is determined at system bootup according
-to the PCI Plug'n'Play specification which arbitrates the resource requirements
-of most devices in the system.
-This means the driver can not easily change the linear aperture address.<p>
-<sect1>Option <it>``ReferenceClock''</it> ``frequency''<p>
-This option is only applicable to non-Intel platforms, where an adapter BIOS is
-not available to the driver.
-The option specifies the reference frequency used by the adapter's clock
-generator.
-The default is 14.318 MHz, and other typical values are 28.636, or 29.5 MHz.<p>
-<sect1>ClockChip <it>``name''</it><p>
-This option is only applicable to non-Intel platforms, where an adapter BIOS is
-not available to the driver, and the driver cannot reliably determine whether
-the clock generator the adapter uses is a variant of an ATI 18818 (a.k.a.
-ICS 2595) or an unsupported clock generator.
-The only values that are acted upon are <it>``ATI 18818-0''</it> or
-<it>``ATI 18818-1''</it>.
-From this specification, the driver derives a reference divider of 43 or 46
-(respectively) for use in clock programming calculations.
-The driver's default behaviour, in this case, is to assume an unsupported clock
-generator, which means it will treat it as a fixed-frequency clock generator,
-as described under the heading <bf>``Clocks for unsupported programmable clock
-generators''</bf> above.<p>
-<sect>Video modes<p>
-Mode timings can be derived from the information in X's doc subdirectory.
-However, it is no longer required to specify such timings in an xorg.conf's
-``Monitor'' section(s), if only standard mode timings are to be used.
-The server automatically inserts VESA standard mode timings in every
-``Monitor'' section, and these modes will be checked first for mode constraints
-(monitor sync tolerances, video memory size, etc.).<p>
-Furthermore, it is also no longer required to specify mode names in ``Display''
-subsections.
-Should no mode names be specified (or those specified do not yield a usable
-mode), the server will automatically select as a default resolution the largest
-usable mode, whether or not the chosen mode is specified in the corresponding
-``Monitor'' section.<p>
-For a digital flat panel, any sync tolerances should be removed from the
-corresponding ``Monitor'' section.
-The driver will automatically calculate these from the mode that is active on
-server entry.
-The driver also inserts timings for a mode called <it>"Native panel mode"</it>
-that represents the panel's native resolution.<p>
-<sect>Known problems and limitations<p>
-There are several known problems or limitations related to the ATI
-driver.
-They include:<p>
-<itemize>
-<item>When using a Mach64's accelerator CRTC, the virtual resolution must be
-less than 8192 pixels wide.
-The VGA CRTC further limits the virtual resolution width to less than 4096
-pixels, or to less than 2048 pixels for adapters based on 18800-x's (with 256kB
-of memory) and on Mach64 integrated controllers.
-These are hardware limits that cannot be circumvented.
-<item>Virtual resolutions requiring more than 1MB of video memory (256kB in the
-monochrome case) are not supported by the VGA CRTC on 88800GX and 88800CX
-adapters.
-This is a hardware limit that cannot be circumvented.
-<item>Due to hardware limitations, doublescanned modes are not supported by the
-accelerator CRTC in 88800GX, 88800CX, 264CT and 264ET adapters.
-<item>The ``VScan'' modeline parameter is only supported when using the VGA
-CRTC.
-<item>Interlaced modes are not supported on 18800-x and 28800-x adapters when
-using a virtual resolution that is 2048 pixels or wider.
-When using a 18800-x with 256kB of video memory in 256-colour modes, this limit
-is reduced to 1024.
-This is yet another hardware limitation that cannot be circumvented.
-<item>Video memory banking does not work in monochrome and 16-colour modes on
-18800-x adapters.
-This appears to be another hardware limit, but this conclusion cannot be
-confirmed at this time.
-The driver's default behaviour in this case is to limit video memory to 256kB.
-<item>Video memory corruption can still occur during mode switches on 18800-x
-adapters.
-Symptoms of this problem include garbled fonts on return to text mode, and
-various effects (snow, dashed lines, etc) on initial entry into a graphics
-mode.
-In the first case, the workaround is to use some other means of restoring the
-text font.
-On Linux, this can be accomplished with the kbd or svgalib packages.
-In the second case, <htmlurl name="xrefresh(1)" url="xrefresh.1.html">
-will usually clean up the image.
-No complete solution to this problem is currently known.
-It appears this corruption occurs due to either video memory bandwidth or
-RAMDAC limitations, and so the driver will limit mode clocks to 40MHz.
-<item>There is some controversy over what the maximum allowed clock frequency
-should be on 264xT and 3D Rage adapters.
-For now, clocks will, by default, be limited to 80MHz, 135MHz, 170MHz, 200MHz
-or 230MHz, depending on the specific controller.
-This limit can only be increased (up to a driver-calculated absolute maximum)
-through the DACSpeed specification in xorg.conf.
-Be aware however that doing so is untested and might damage the adapter.
-<item>Except as in the previous items, clocks are limited to 80MHz on most
-adapters, although many are capable of higher frequencies.
-This will eventually be fixed in a future release.
-<item>The use of a laptop's hot-keys to switch displays while this driver is
-active can cause lockups and/or other woes, and is therefore not recommended.
-It is not currently possible to solve this problem.<p>
-<item>In situations where the driver is to simultaneously display on both a
-panel and a CRT, the same image will be seen on both.
-In particular, this means the CRT must be able to synchronise with the timings
-of the panel's native resolution.
-This is quite evident when the panel has ``odd-ball'' dimensions, such as
-1400x1050, a resolution not commonly possible on CRTs or projection
-equipment.<p>
-Also, the display of independent images on the panel and CRT is not currently
-implemented, and might never be, pending resolution of the previous item.<p>
-</itemize>
-Support for the following will be added in a future release:
-<itemize>
-<item>Mach32's accelerator CRTC.
-This support is the first step towards accelerated support for Mach32's,
-Mach8's, 8514/A's and other clones.
-<item>Colour depth greater than 8 on non-integrated controllers, where
-permitted by the hardware.
-<item>Mach32, Mach8 and 8514/A Draw Engines.
-<item>Hardware cursors where implemented by hardware.
-This has already been done for Mach64 integrated controllers.
-<item>TVOut, i.e. the ability to use a television screen as a monitor.
-<item>Motion Video, i.e. displaying an asynchronous data stream (TV signal,
-DVD, etc.) in a window or full-screen.
-<item>3D operations.
-</itemize>
-<sect>Reporting problems<p>
-If you are experiencing problems that are not already recorded in this
-document, first ensure that you have the latest current release of this driver
-and the Xorg X server.
-Check the server's log (usually found in /var/log/Xorg.0.log) and <htmlurl
-name="ftp://ftp.freedesktop.org/pub/Xorg"
-url="ftp://ftp.freedesktop.org/pub/Xorg"> if you are uncertain.<p>
-Secondly, please check Xorg's doc directory for additional information.<p>
-Thirdly, a scan through the comp.windows.x.i386unix and comp.os.linux.x
-newsgroups, the xorg mailing list archives at <htmlurl
-name="http://lists.freedesktop.org/mailman/listinfo/xorg"
-url="http://lists.freedesktop.org/mailman/listinfo/xorg">, and
-the Xorg bug database at <htmlurl
-name="https://bugs.freedesktop.org/enter_bug.cgi?product=xorg"
-url="https://bugs.freedesktop.org/enter_bug.cgi?product=xorg">
-can also prove useful in resolving problems.<p>
-If you are still experiencing problems, you can send <it>non-HTMLised</it>
-e-mail to <email>xorg at lists.fredesktop.org</email>.
-Please be as specific as possible when describing the problem(s), and include
-an <it>unedited</it> copy of the server's log and the xorg.conf file used.<p>
-<sect>Driver history<p>
-The complete history of the driver is rather cloudy.
-The following is more than likely to be incomplete and inaccurate.<p>
-Apparently, Per Lindqvist first got a driver working with an early ATI adapter
-under X386 1.1a.
-This original driver might have actually been based on a non-functional ATI
-driver written by Thomas Roell (currently of Xi Graphics).<p>
-Then Doug Evans added support for the ATI VGA Wonder XL, trying in the process
-to make the driver work with all other ATI adapters available at the time.<p>
-Rik Faith obtained the X11R4 driver from Doug Evans in the summer of 1992 and
-ported the code to the X386 part of X11R5.
-This subsequently became part of XFree86.<p>
-Marc Aurele La France took over development and maintenance of the driver
-in the fall of 1993 after Rik got rid of his VGA Wonder adapter.<p>
-<sect>Driver versions<p>
-Due to the introduction of loadable drivers in XFree86 4.0, it has become
-necessary to track driver versions separately.
-Driver releases use the following version numbering scheme.<p>
-Version 1 of this driver is the one I inherited from Rik Faith.
-This is the version found in XFree86 2.0 and 2.1.<p>
-Version 2 is my first rewrite of this code which only ended up being a
-partially unsuccessful attempt at generalising the driver for all VGA Wonder,
-Mach32, and early Mach64 adapters.
-Various releases of this version of the driver can be found in XFree86 2.1.1,
-3.1, 3.1.1 and 3.1.2.<p>
-Version 3 represents my second rewrite (although a rather lame one as rewrites
-go).
-Into version 3, I introduced clock programming for Mach64 adapters and merged
-in the old ati_test debugging tool.
-This is the version found in XFree86 3.2, 3.3 and 3.3.1.<p>
-Version 4 is a rather major restructuring of version 3, which became larger
-than I could comfortably handle in one source file.
-This is the version found in XFree86 3.3.2, 3.3.3, 3.3.3.1, 3.3.3.2, 3.3.4,
-3.3.5 and 3.3.6.<p>
-Version 5 is an almost complete restructuring of version 4 to fit in the newer
-driver API of XFree86 4.0 and later.<p>
-The introduction of version 6 is a first swipe at porting the driver to
-non-Intel architectures.<p>
-</article>
diff --git a/src/atiadjust.c b/src/atiadjust.c
deleted file mode 100644
index 267186f..0000000
--- a/src/atiadjust.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atiadjust.h"
-#include "atichip.h"
-#include "atilock.h"
-#include "atimach64io.h"
-#include "atiwonderio.h"
-
-/*
- * The display start address is expressed in units of 32-bit (VGA) or 64-bit
- * (accelerator) words where all planar modes are considered as 4bpp modes.
- * These functions ensure the start address does not exceed architectural
- * limits.  Also, to avoid colour changes while panning, these 32-bit or 64-bit
- * boundaries may not fall within a pixel.
- */
-
-/*
- * ATIAjustPreInit --
- *
- * This function calculates values needed to speed up the setting of the
- * display start address.
- */
-void
-ATIAdjustPreInit
-(
-    ATIPtr      pATI
-)
-{
-    unsigned long MaxBase;
-
-    {
-        pATI->AdjustDepth = (pATI->bitsPerPixel + 7) >> 3;
-
-        pATI->AdjustMask = 64;
-        while (pATI->AdjustMask % (unsigned long)(pATI->AdjustDepth))
-            pATI->AdjustMask += 64;
-        pATI->AdjustMask =
-            ~(((pATI->AdjustMask / (unsigned long)(pATI->AdjustDepth)) >> 3) -
-              1);
-    }
-
-    {
-            pATI->AdjustMaxBase = MaxBits(CRTC_OFFSET) << 3;
-    }
-
-    MaxBase = (pATI->AdjustMaxBase / (unsigned long)pATI->AdjustDepth) |
-        ~pATI->AdjustMask;
-
-    pATI->AdjustMaxX = MaxBase % pATI->displayWidth;
-    pATI->AdjustMaxY = MaxBase / pATI->displayWidth;
-}
-
-/*
- * ATIAdjustFrame --
- *
- * This function is used to initialise the SVGA Start Address - the first
- * displayed location in video memory.  This is used to implement the virtual
- * window.
- */
-void
-ATIAdjustFrame
-(
-    int scrnIndex,
-    int x,
-    int y,
-    int flags
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[scrnIndex];
-    ATIPtr      pATI = ATIPTR(pScreenInfo);
-    int         Base, xy;
-
-    /*
-     * Assume the caller has already done its homework in ensuring the physical
-     * screen is still contained in the virtual resolution.
-     */
-    if (y >= pATI->AdjustMaxY)
-    {
-        y = pATI->AdjustMaxY;
-        if (x > pATI->AdjustMaxX)
-            y--;
-    }
-
-    Base = ((((y * pATI->displayWidth) + x) & pATI->AdjustMask) *
-            pATI->AdjustDepth) >> 3;
-
-    if (!pATI->currentMode)
-    {
-        /*
-         * Not in DGA.  This reverse-calculates pScreenInfo->frame[XY][01] so
-         * that the cursor does not move on mode switches.
-         */
-        xy = (Base << 3) / pATI->AdjustDepth;
-        pScreenInfo->frameX0 = xy % pATI->displayWidth;
-        pScreenInfo->frameY0 = xy / pATI->displayWidth;
-        pScreenInfo->frameX1 =
-            pScreenInfo->frameX0 + pScreenInfo->currentMode->HDisplay - 1;
-        pScreenInfo->frameY1 =
-            pScreenInfo->frameY0 + pScreenInfo->currentMode->VDisplay - 1;
-    }
-
-    /* Unlock registers */
-    ATIUnlock(pATI);
-
-    {
-        outr(CRTC_OFF_PITCH, SetBits(pATI->displayWidth >> 3, CRTC_PITCH) |
-            SetBits(Base, CRTC_OFFSET));
-    }
-}
diff --git a/src/atiadjust.h b/src/atiadjust.h
deleted file mode 100644
index 58c6efc..0000000
--- a/src/atiadjust.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIADJUST_H___
-#define ___ATIADJUST_H___ 1
-
-#include "atipriv.h"
-
-extern void ATIAdjustPreInit(ATIPtr);
-extern void ATIAdjustFrame(int, int, int, int);
-
-#endif /* ___ATIADJUST_H___ */
diff --git a/src/atiaudio.c b/src/atiaudio.c
deleted file mode 100644
index 555a4a7..0000000
--- a/src/atiaudio.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "atiaudio.h"
-
-/*
- * Audio chip definitions.
- */
-const char *ATIAudioNames[] =
-{
-    "Philips TEA5582",
-    "Mono with audio mux",
-    "Philips TDA9850",
-    "Sony CXA2020S",
-    "ITT MSP3410D",
-    "Crystal CS4236B",
-    "Philips TDA9851",
-    "ITT MSP3415",
-    "ITT MSP3430",
-    "Unknown type (9)",
-    "Unknown type (10)",
-    "Unknown type (11)",
-    "Unknown type (12)",
-    "Unknown type (13)",
-    "Unknown type (14)",
-    "No audio"
-};
diff --git a/src/atiaudio.h b/src/atiaudio.h
deleted file mode 100644
index bcea8b4..0000000
--- a/src/atiaudio.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2003 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIAUDIO_H___
-#define ___ATIAUDIO_H___ 1
-
-/*
- * Audio chip definitions.
- */
-typedef enum
-{
-    ATI_AUDIO_TEA5582,
-    ATI_AUDIO_MONO,
-    ATI_AUDIO_TDA9850,
-    ATI_AUDIO_CXA2020S,
-    ATI_AUDIO_MSP3410D,
-    ATI_AUDIO_CS4236B,
-    ATI_AUDIO_TDA9851,
-    ATI_AUDIO_MSP3415,
-    ATI_AUDIO_MSP3430,
-    ATI_AUDIO_9,
-    ATI_AUDIO_10,
-    ATI_AUDIO_11,
-    ATI_AUDIO_12,
-    ATI_AUDIO_13,
-    ATI_AUDIO_14,
-    ATI_AUDIO_NONE
-} ATIAudioType;
-
-extern const char *ATIAudioNames[];
-
-#endif /* ___ATIAUDIO_H___ */
diff --git a/src/atibank.c b/src/atibank.c
deleted file mode 100644
index 514a414..0000000
--- a/src/atibank.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atibank.h"
-#include "atimach64io.h"
-#include "atiwonderio.h"
-
-#ifndef AVOID_CPIO
-
-/*
- * ATIx8800SetBank --
- *
- * Set an ATI 28800's, 68800's or 88800's read and write bank numbers.
- */
-void
-ATIx8800SetBank
-(
-    ATIPtr       pATI,
-    unsigned int iBank
-)
-{
-    (void)iBank; /* always called with iBank = 0 */
-
-    ATIPutExtReg(0xB2U, 0x00U);
-    ATIModifyExtReg(pATI, 0xAEU, -1, (CARD8)(~0x0FU), 0x00U);
-}
-
-/*
- * Functions to simulate a banked VGA aperture using a Mach64's small dual
- * paged apertures.  There are two sets of these:  one for packed modes, the
- * other for planar modes.
- */
-
-static CARD32
-ATIMach64MassagePackedBankNumber
-(
-    CARD8 iBank
-)
-{
-    iBank <<= 1;
-    return ((iBank + 1) << 16) | iBank;
-}
-
-/*
- * ATIMach64SetBankPacked --
- *
- * Set read and write bank numbers for small dual paged apertures.
- */
-void
-ATIMach64SetBankPacked
-(
-    ATIPtr       pATI,
-    unsigned int iBank
-)
-{
-    CARD32 tmp = ATIMach64MassagePackedBankNumber(iBank);
-
-    outr(MEM_VGA_RP_SEL, tmp);
-    outr(MEM_VGA_WP_SEL, tmp);
-}
-
-static CARD32
-ATIMach64MassagePlanarBankNumber
-(
-    CARD8 iBank
-)
-{
-    iBank <<= 3;
-    return ((iBank + 4) << 16) | iBank;
-}
-
-/*
- * ATIMach64SetBankPlanar --
- *
- * Set read and write bank numbers for small dual paged apertures.
- */
-void
-ATIMach64SetBankPlanar
-(
-    ATIPtr       pATI,
-    unsigned int iBank
-)
-{
-    CARD32 tmp = ATIMach64MassagePlanarBankNumber(iBank);
-
-    outr(MEM_VGA_RP_SEL, tmp);
-    outr(MEM_VGA_WP_SEL, tmp);
-}
-
-#endif /* AVOID_CPIO */
diff --git a/src/atibank.h b/src/atibank.h
deleted file mode 100644
index d56da68..0000000
--- a/src/atibank.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIBANK_H___
-#define ___ATIBANK_H___ 1
-
-#include "atipriv.h"
-
-#ifndef AVOID_CPIO
-
-/*
- * The CRT save/restore code also needs a separate banking interface that can
- * used before ATIScreenInit() is called.
- */
-
-typedef void ATIBankProc(ATIPtr, unsigned int);
-typedef ATIBankProc     *ATIBankProcPtr;
-
-extern ATIBankProc       ATIx8800SetBank,
-                         ATIMach64SetBankPacked,
-                         ATIMach64SetBankPlanar;
-
-#endif /* AVOID_CPIO */
-
-#endif /* ___ATIBANK_H___ */
diff --git a/src/atibus.c b/src/atibus.c
deleted file mode 100644
index 69a3089..0000000
--- a/src/atibus.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "ati.h"
-#include "atibus.h"
-#include "atichip.h"
-#include "atimach64io.h"
-#include "atistruct.h"
-
-/*
- * Definitions related to an adapter's system bus interface.
- */
-
-const char *ATIBusNames[] =
-{
-    "PCI",
-    "AGP"
-};
-
-/*
- * ATIClaimResources --
- *
- * This function registers most of the bus resources used by an adapter.  The
- * exceptions are PCI-configured resources and non-PCI non-AGP linear
- * apertures, both of which are registered by ATIPreInit().  This function also
- * attempts to register unshareable resources for inactive PCI adapters,
- * whether or not they are relocatable.
- */
-static void
-ATIClaimResources
-(
-    ATIPtr pATI,
-    Bool   Active
-)
-{
-
-#ifndef AVOID_CPIO
-
-    resRange Resources[2] = {{0, 0, 0}, _END};
-
-    /* Claim VGA and VGAWonder resources */
-    if ((pATI->VGAAdapter) && (Active))
-    {
-        /*
-         * 18800-x's are the only ATI controllers that decode all ISA aliases
-         * of VGA and VGA Wonder I/O ports.  Other x8800's do not decode >any<
-         * VGA aliases, but do decode VGA Wonder aliases whose most significant
-         * nibble is zero.
-         */
-        xf86ClaimFixedResources(resVgaShared, pATI->iEntity);
-
-        if (pATI->CPIO_VGAWonder)
-        {
-            Resources[0].type = ResShrIoSparse | ResBus;
-            Resources[0].rBase = pATI->CPIO_VGAWonder;
-            Resources[0].rMask = 0xF3FEU;
-
-            xf86ClaimFixedResources(Resources, pATI->iEntity);
-
-            (void)memcpy(pATI->VGAWonderResources,
-                Resources, SizeOf(Resources));
-        }
-    }
-
-    if (!Active)
-        return;
-
-    /* Claim Mach64 sparse I/O resources */
-    if ((pATI->CPIODecoding == SPARSE_IO))
-    {
-        Resources[0].type = ResShrIoSparse | ResBus;
-        Resources[0].rBase = pATI->CPIOBase;
-        Resources[0].rMask = 0x03FCU;
-
-        xf86ClaimFixedResources(Resources, pATI->iEntity);
-    }
-
-#endif /* AVOID_CPIO */
-
-}
-
-/*
- * ATIClaimBusSlot --
- *
- * Claim an adapter and register its resources.
- */
-int
-ATIClaimBusSlot
-(
-    Bool      Active,
-    ATIPtr    pATI
-)
-{
-    if (pATI->iEntity >= 0)
-        ATIClaimResources(pATI, Active);
-
-    return pATI->iEntity;
-}
diff --git a/src/atibus.h b/src/atibus.h
deleted file mode 100644
index e5f1afd..0000000
--- a/src/atibus.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIBUS_H___
-
-#if !defined(___ATI_H___) && defined(XFree86Module)
-# error missing #include "ati.h" before #include "atibus.h"
-# undef XFree86Module
-#endif
-
-#define ___ATIBUS_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-/*
- * Definitions related to an adapter's system bus interface.
- */
-typedef enum
-{
-    ATI_BUS_PCI,
-    ATI_BUS_AGP
-} ATIBusType;
-
-extern const char *ATIBusNames[];
-
-extern int  ATIClaimBusSlot(Bool, ATIPtr);
-
-#endif /* ___ATIBUS_H___ */
diff --git a/src/atichip.c b/src/atichip.c
deleted file mode 100644
index aac00e6..0000000
--- a/src/atichip.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atibus.h"
-#include "atichip.h"
-#include "atimach64io.h"
-#include "atimach64version.h"
-
-const char *ATIFoundryNames[] =
-    { "SGS", "NEC", "KCS", "UMC", "TSMC", "5", "6", "UMC" };
-
-/*
- * ATIMach64ChipID --
- *
- * Set variables whose value is dependent upon a Mach64's CONFIG_CHIP_ID
- * register.
- */
-void
-ATIMach64ChipID
-(
-    ATIPtr       pATI,
-    const CARD16 ExpectedChipType
-)
-{
-    pATI->config_chip_id = inr(CONFIG_CHIP_ID);
-    pATI->ChipType       = GetBits(pATI->config_chip_id, CFG_CHIP_TYPE);
-    pATI->ChipClass      = GetBits(pATI->config_chip_id, CFG_CHIP_CLASS);
-    pATI->ChipRev        = GetBits(pATI->config_chip_id, CFG_CHIP_REV);
-    pATI->ChipVersion    = GetBits(pATI->config_chip_id, CFG_CHIP_VERSION);
-    pATI->ChipFoundry    = GetBits(pATI->config_chip_id, CFG_CHIP_FOUNDRY);
-    pATI->ChipRevision   = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION);
-    switch (pATI->ChipType)
-    {
-        case OldChipID('G', 'X'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('G', 'X'):
-            switch (pATI->ChipRev)
-            {
-                case 0x00U:
-                    pATI->Chip = ATI_CHIP_88800GXC;
-                    break;
-
-                case 0x01U:
-                    pATI->Chip = ATI_CHIP_88800GXD;
-                    break;
-
-                case 0x02U:
-                    pATI->Chip = ATI_CHIP_88800GXE;
-                    break;
-
-                case 0x03U:
-                    pATI->Chip = ATI_CHIP_88800GXF;
-                    break;
-
-                default:
-                    pATI->Chip = ATI_CHIP_88800GX;
-                    break;
-            }
-            break;
-
-        case OldChipID('C', 'X'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('C', 'X'):
-            pATI->Chip = ATI_CHIP_88800CX;
-            break;
-
-        case OldChipID('C', 'T'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('C', 'T'):
-            pATI->Chip = ATI_CHIP_264CT;
-            pATI->BusType = ATI_BUS_PCI;
-            break;
-
-        case OldChipID('E', 'T'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('E', 'T'):
-            pATI->Chip = ATI_CHIP_264ET;
-            pATI->BusType = ATI_BUS_PCI;
-            break;
-
-        case OldChipID('V', 'T'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('V', 'T'):
-            pATI->Chip = ATI_CHIP_264VT;
-            pATI->BusType = ATI_BUS_PCI;
-            /* Some early GT's are detected as VT's */
-            if (ExpectedChipType && (pATI->ChipType != ExpectedChipType))
-            {
-                if (ExpectedChipType == NewChipID('G', 'T'))
-                    pATI->Chip = ATI_CHIP_264GT;
-                else
-                    xf86Msg(X_WARNING,
-                            MACH64_NAME ":  Mach64 chip type probe discrepancy"
-                            " detected:  PCI=0x%04X;  CHIP_ID=0x%04X.\n",
-                            ExpectedChipType, pATI->ChipType);
-            }
-            else if (pATI->ChipVersion)
-                pATI->Chip = ATI_CHIP_264VTB;
-            break;
-
-        case OldChipID('G', 'T'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('G', 'T'):
-            pATI->BusType = ATI_BUS_PCI;
-            if (!pATI->ChipVersion)
-                pATI->Chip = ATI_CHIP_264GT;
-            else
-                pATI->Chip = ATI_CHIP_264GTB;
-            break;
-
-        case OldChipID('V', 'U'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('V', 'U'):
-            pATI->Chip = ATI_CHIP_264VT3;
-            pATI->BusType = ATI_BUS_PCI;
-            break;
-
-        case OldChipID('G', 'U'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('G', 'U'):
-            pATI->Chip = ATI_CHIP_264GTDVD;
-            pATI->BusType = ATI_BUS_PCI;
-            break;
-
-        case OldChipID('L', 'G'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('L', 'G'):
-            pATI->Chip = ATI_CHIP_264LT;
-            pATI->BusType = ATI_BUS_PCI;
-            break;
-
-        case OldChipID('V', 'V'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('V', 'V'):
-            pATI->Chip = ATI_CHIP_264VT4;
-            pATI->BusType = ATI_BUS_PCI;
-            break;
-
-        case OldChipID('G', 'V'):
-        case OldChipID('G', 'Y'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('G', 'V'):
-        case NewChipID('G', 'Y'):
-            pATI->Chip = ATI_CHIP_264GT2C;
-            pATI->BusType = ATI_BUS_PCI;
-            break;
-
-        case OldChipID('G', 'W'):
-        case OldChipID('G', 'Z'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('G', 'W'):
-        case NewChipID('G', 'Z'):
-            pATI->Chip = ATI_CHIP_264GT2C;
-            pATI->BusType = ATI_BUS_AGP;
-            break;
-
-        case OldChipID('G', 'I'):
-        case OldChipID('G', 'P'):
-        case OldChipID('G', 'Q'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('G', 'I'):
-        case NewChipID('G', 'P'):
-        case NewChipID('G', 'Q'):
-            pATI->Chip = ATI_CHIP_264GTPRO;
-            pATI->BusType = ATI_BUS_PCI;
-            break;
-
-        case OldChipID('G', 'B'):
-        case OldChipID('G', 'D'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('G', 'B'):
-        case NewChipID('G', 'D'):
-            pATI->Chip = ATI_CHIP_264GTPRO;
-            pATI->BusType = ATI_BUS_AGP;
-            break;
-
-        case OldChipID('L', 'I'):
-        case OldChipID('L', 'P'):
-        case OldChipID('L', 'Q'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('L', 'I'):
-        case NewChipID('L', 'P'):
-        case NewChipID('L', 'Q'):
-            pATI->Chip = ATI_CHIP_264LTPRO;
-            pATI->BusType = ATI_BUS_PCI;
-            pATI->LCDVBlendFIFOSize = 800;
-            break;
-
-        case OldChipID('L', 'B'):
-        case OldChipID('L', 'D'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('L', 'B'):
-        case NewChipID('L', 'D'):
-            pATI->Chip = ATI_CHIP_264LTPRO;
-            pATI->BusType = ATI_BUS_AGP;
-            pATI->LCDVBlendFIFOSize = 800;
-            break;
-
-        case OldChipID('G', 'L'):
-        case OldChipID('G', 'O'):
-        case OldChipID('G', 'R'):
-        case OldChipID('G', 'S'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('G', 'L'):
-        case NewChipID('G', 'O'):
-        case NewChipID('G', 'R'):
-        case NewChipID('G', 'S'):
-            pATI->Chip = ATI_CHIP_264XL;
-            pATI->BusType = ATI_BUS_PCI;
-            pATI->LCDVBlendFIFOSize = 1024;
-            break;
-
-        case OldChipID('G', 'M'):
-        case OldChipID('G', 'N'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('G', 'M'):
-        case NewChipID('G', 'N'):
-            pATI->Chip = ATI_CHIP_264XL;
-            pATI->BusType = ATI_BUS_AGP;
-            pATI->LCDVBlendFIFOSize = 1024;
-            break;
-
-        case OldChipID('L', 'R'):
-        case OldChipID('L', 'S'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('L', 'R'):
-        case NewChipID('L', 'S'):
-            pATI->Chip = ATI_CHIP_MOBILITY;
-            pATI->BusType = ATI_BUS_PCI;
-            pATI->LCDVBlendFIFOSize = 1024;
-            break;
-
-        case OldChipID('L', 'M'):
-        case OldChipID('L', 'N'):
-            pATI->ChipType = OldToNewChipID(pATI->ChipType);
-        case NewChipID('L', 'M'):
-        case NewChipID('L', 'N'):
-            pATI->Chip = ATI_CHIP_MOBILITY;
-            pATI->BusType = ATI_BUS_AGP;
-            pATI->LCDVBlendFIFOSize = 1024;
-            break;
-
-        default:
-            pATI->Chip = ATI_CHIP_Mach64;
-            break;
-    }
-}
diff --git a/src/atichip.h b/src/atichip.h
deleted file mode 100644
index e59d6eb..0000000
--- a/src/atichip.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATICHIP_H___
-#define ___ATICHIP_H___ 1
-
-#include "atipriv.h"
-#include "atiregs.h"
-
-#include <X11/Xmd.h>
-
-/*
- * Chip-related definitions.
- */
-typedef enum
-{
-    ATI_CHIP_NONE = 0,
-    ATI_CHIP_88800GXC,          /* Mach64 */
-    ATI_CHIP_88800GXD,          /* Mach64 */
-    ATI_CHIP_88800GXE,          /* Mach64 */
-    ATI_CHIP_88800GXF,          /* Mach64 */
-    ATI_CHIP_88800GX,           /* Mach64 */
-    ATI_CHIP_88800CX,           /* Mach64 */
-    ATI_CHIP_264CT,             /* Mach64 */
-    ATI_CHIP_264ET,             /* Mach64 */
-    ATI_CHIP_264VT,             /* Mach64 */
-    ATI_CHIP_264GT,             /* Mach64 */
-    ATI_CHIP_264VTB,            /* Mach64 */
-    ATI_CHIP_264GTB,            /* Mach64 */
-    ATI_CHIP_264VT3,            /* Mach64 */
-    ATI_CHIP_264GTDVD,          /* Mach64 */
-    ATI_CHIP_264LT,             /* Mach64 */
-    ATI_CHIP_264VT4,            /* Mach64 */
-    ATI_CHIP_264GT2C,           /* Mach64 */
-    ATI_CHIP_264GTPRO,          /* Mach64 */
-    ATI_CHIP_264LTPRO,          /* Mach64 */
-    ATI_CHIP_264XL,             /* Mach64 */
-    ATI_CHIP_MOBILITY,          /* Mach64 */
-    ATI_CHIP_Mach64,            /* Last among Mach64's */
-} ATIChipType;
-
-/*
- * Foundry codes for 264xT's.
- */
-typedef enum
-{
-    ATI_FOUNDRY_SGS,    /* SGS-Thompson */
-    ATI_FOUNDRY_NEC,    /* NEC */
-    ATI_FOUNDRY_KSC,    /* KSC (?) */
-    ATI_FOUNDRY_UMC,    /* United Microelectronics Corporation */
-    ATI_FOUNDRY_TSMC,   /* Taiwan Semiconductor Manufacturing Company */
-    ATI_FOUNDRY_5,
-    ATI_FOUNDRY_6,
-    ATI_FOUNDRY_UMCA    /* UMC alternate */
-} ATIFoundryType;
-
-extern const char *ATIFoundryNames[];
-
-extern void        ATIMach64ChipID(ATIPtr, const CARD16);
-
-#define OldChipID(_1, _0) \
-    (SetBits(_0 - 'A', CHIP_CODE_0) | SetBits(_1 - 'A', CHIP_CODE_1))
-
-#define NewChipID(_1, _0) \
-    (SetBits(_0, CFG_CHIP_TYPE0) | SetBits(_1, CFG_CHIP_TYPE1))
-
-#define OldToNewChipID(_ChipID) \
-    (SetBits(GetBits(_ChipID, CHIP_CODE_0) + 'A', CFG_CHIP_TYPE0) | \
-     SetBits(GetBits(_ChipID, CHIP_CODE_1) + 'A', CFG_CHIP_TYPE1))
-
-#define NewToOldChipID(_ChipID) \
-    (SetBits(GetBits(_ChipID, CFG_CHIP_TYPE0) - 'A', CHIP_CODE_0) | \
-    (SetBits(GetBits(_ChipID, CFG_CHIP_TYPE1) - 'A', CHIP_CODE_1))
-
-#endif /* ___ATICHIP_H___ */
diff --git a/src/aticlock.c b/src/aticlock.c
deleted file mode 100644
index f4de77f..0000000
--- a/src/aticlock.c
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * For all supported programmable clock generators, the driver will ignore any
- * XF86Config clock line and programme, as needed, the clock number reserved by
- * the BIOS for accelerated drivers.  The driver's mode initialisation routine
- * finds integers N, M and D such that
- *
- *             N
- *      R * -------  MHz
- *           M * D
- *
- * best approximates the mode's clock frequency, where R is the crystal-
- * generated reference frequency (usually 14.318 MHz).  D is a power of 2
- * except for those integrated controllers that also offer odd dividers.
- * Different clock generators have different restrictions on the value N, M and
- * D can assume.  The driver contains an internal table to record these
- * restrictions (among other things).  The resulting values of N, M and D are
- * then encoded in a generator-specific way and used to programme the clock.
- * The Mach64's clock divider is not used in this case.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include "ati.h"
-#include "atichip.h"
-#include "atidac.h"
-#include "atidsp.h"
-#include "atimach64io.h"
-#include "atimode.h"
-#include "atiwonderio.h"
-
-/*
- * Definitions related to programmable clock generators.
- */
-static CARD16 ATIPostDividers[] = {1, 2, 4, 8, 16, 32, 64, 128},
-              ATI264xTPostDividers[] = {1, 2, 4, 8, 3, 0, 6, 12};
-ClockRec ATIClockDescriptors[] =
-{
-    {
-          0,   0,   0, 1, 1,
-          1,   1,   0,
-          0, NULL,
-        "Non-programmable"
-    },
-    {
-        257, 512, 257, 1, 1,
-         46,  46,   0,
-          4, ATIPostDividers,
-        "ATI 18818 or ICS 2595 or similar"
-    },
-    {
-          2, 129,   2, 1, 1,
-          8,  14,   2,
-          8, ATIPostDividers,
-        "SGS-Thompson 1703 or similar"
-    },
-    {
-         16, 263,   8, 8, 9,
-          4,  12,   2,
-          4, ATIPostDividers,
-        "Chrontel 8398 or similar"
-    },
-    {
-          2, 255,   0, 1, 1,
-         45,  45,   0,
-          4, ATI264xTPostDividers,
-        "Internal"
-    },
-    {
-          2, 257,   2, 1, 1,
-          2,  32,   2,
-          4, ATIPostDividers,
-        "AT&T 20C408 or similar"
-    },
-    {
-         65, 128,  65, 1, 1,
-          2,  14,   0,
-          4, ATIPostDividers,
-        "IBM RGB 514 or similar"
-    }
-};
-
-/*
- * ATIClockPreInit --
- *
- * This function is called by ATIPreInit() and handles the XF86Config clocks
- * line (or lack thereof).
- */
-void
-ATIClockPreInit
-(
-    ScrnInfoPtr   pScreenInfo,
-    ATIPtr        pATI
-)
-{
-            /*
-             * Recognise supported clock generators.  This involves telling the
-             * rest of the server about it and (re-)initializing the XF86Config
-             * clocks line.
-             */
-            pScreenInfo->progClock = TRUE;
-
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-                "%s programmable clock generator detected.\n",
-                pATI->ClockDescriptor.ClockName);
-            if (pATI->ReferenceDenominator == 1)
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-                    "Reference clock %.3f MHz.\n",
-                    (double)pATI->ReferenceNumerator / 1000.0);
-            else
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-                    "Reference clock %.6g/%d (%.3f) MHz.\n",
-                    (double)pATI->ReferenceNumerator / 1000.0,
-                    pATI->ReferenceDenominator,
-                    (double)pATI->ReferenceNumerator /
-                        ((double)pATI->ReferenceDenominator * 1000.0));
-
-#if defined(__sparc__)
-            if ((pATI->refclk / 100000) != 286 &&
-                (pATI->refclk / 100000) != 295)
-            {
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-                    "If modes do not work on Ultra 5/10 or Blade 100/150,\n"
-                    "\tset option \"reference_clock\" to \"28.636 MHz\""
-                    " or \"29.5 MHz\"\n");
-            }
-#endif
-
-            if (pATI->ProgrammableClock == ATI_CLOCK_CH8398)
-            {   /* First two are fixed */
-                pScreenInfo->numClocks = 2;
-                pScreenInfo->clock[0] = 25175;
-                pScreenInfo->clock[1] = 28322;
-            }
-            else if (pATI->ProgrammableClock == ATI_CLOCK_INTERNAL)
-            {
-                /*
-                 * The integrated PLL generates clocks as if the reference
-                 * frequency were doubled.
-                 */
-                pATI->ReferenceNumerator <<= 1;
-            }
-}
-
-/*
- * ATIClockCalculate --
- *
- * This function is called to generate, if necessary, the data needed for clock
- * programming, and set clock select bits in various register values.
- */
-Bool
-ATIClockCalculate
-(
-    int            iScreen,
-    ATIPtr         pATI,
-    ATIHWPtr       pATIHW,
-    DisplayModePtr pMode
-)
-{
-    int N, M, D;
-    int ClockSelect, N1, MinimumGap;
-    int Frequency, Multiple;            /* Used as temporaries */
-
-    /* Set default values */
-    pATIHW->FeedbackDivider = pATIHW->ReferenceDivider = pATIHW->PostDivider = 0;
-
-    if (((pATI->ProgrammableClock == ATI_CLOCK_CH8398) &&
-         (pMode->ClockIndex < 2)))
-    {
-        xf86DrvMsg(iScreen, X_ERROR,
-            "First two clocks of Chrontel 8398 clock generator are fixed\n");
-        return FALSE;
-    }
-
-    {
-        /* Generate clock programme word, using units of kHz */
-        MinimumGap = ((unsigned int)(-1)) >> 1;
-
-        /* Loop through reference dividers */
-        for (M = pATI->ClockDescriptor.MinM;
-             M <= pATI->ClockDescriptor.MaxM;
-             M++)
-        {
-            /* Loop through post-dividers */
-            for (D = 0;  D < pATI->ClockDescriptor.NumD;  D++)
-            {
-                if (!pATI->ClockDescriptor.PostDividers[D])
-                    continue;
-
-                /* Limit undivided VCO to maxClock */
-                if (pATI->maxClock &&
-                    ((pATI->maxClock / pATI->ClockDescriptor.PostDividers[D]) <
-                     pMode->Clock))
-                    continue;
-
-                /*
-                 * Calculate closest feedback divider and apply its
-                 * restrictions.
-                 */
-                Multiple = M * pATI->ReferenceDenominator *
-                    pATI->ClockDescriptor.PostDividers[D];
-                N = ATIDivide(pMode->Clock * Multiple,
-                    pATI->ReferenceNumerator, 0, 0);
-                if (N < pATI->ClockDescriptor.MinN)
-                    N = pATI->ClockDescriptor.MinN;
-                else if (N > pATI->ClockDescriptor.MaxN)
-                    N = pATI->ClockDescriptor.MaxN;
-                N -= pATI->ClockDescriptor.NAdjust;
-                N1 = (N / pATI->ClockDescriptor.N1) * pATI->ClockDescriptor.N2;
-                if (N > N1)
-                    N = ATIDivide(N1 + 1, pATI->ClockDescriptor.N1, 0, 1);
-                N += pATI->ClockDescriptor.NAdjust;
-                N1 += pATI->ClockDescriptor.NAdjust;
-
-                for (;  ;  N = N1)
-                {
-                    /* Pick the closest setting */
-                    Frequency = abs(ATIDivide(N * pATI->ReferenceNumerator,
-                        Multiple, 0, 0) - pMode->Clock);
-                    if ((Frequency < MinimumGap) ||
-                        ((Frequency == MinimumGap) &&
-                         (pATIHW->FeedbackDivider < N)))
-                    {
-                        /* Save settings */
-                        pATIHW->FeedbackDivider = N;
-                        pATIHW->ReferenceDivider = M;
-                        pATIHW->PostDivider = D;
-                        MinimumGap = Frequency;
-                    }
-
-                    if (N <= N1)
-                        break;
-                }
-            }
-        }
-
-        Multiple = pATIHW->ReferenceDivider * pATI->ReferenceDenominator *
-            pATI->ClockDescriptor.PostDividers[pATIHW->PostDivider];
-        Frequency = pATIHW->FeedbackDivider * pATI->ReferenceNumerator;
-        Frequency = ATIDivide(Frequency, Multiple, 0, 0);
-        if (abs(Frequency - pMode->Clock) > CLOCK_TOLERANCE)
-        {
-            xf86DrvMsg(iScreen, X_ERROR,
-                "Unable to programme clock %.3fMHz for mode %s.\n",
-                (double)(pMode->Clock) / 1000.0, pMode->name);
-            return FALSE;
-        }
-        pMode->SynthClock = Frequency;
-        ClockSelect = pATI->ClockNumberToProgramme;
-
-        xf86ErrorFVerb(4,
-            "\n Programming clock %d to %.3fMHz for mode %s."
-            "  N=%d, M=%d, D=%d.\n",
-            ClockSelect, (double)Frequency / 1000.0, pMode->name,
-            pATIHW->FeedbackDivider, pATIHW->ReferenceDivider,
-            pATIHW->PostDivider);
-
-        if (pATI->Chip >= ATI_CHIP_264VTB)
-            ATIDSPCalculate(pATI, pATIHW, pMode);
-    }
-
-    /* Set clock select bits */
-    pATIHW->clock = ClockSelect;
-
-    {
-            pATIHW->clock_cntl = CLOCK_STROBE |
-                SetBits(ClockSelect, CLOCK_SELECT | CLOCK_DIVIDER);
-    }
-
-    return TRUE;
-}
-
-/*
- * ATIClockSet --
- *
- * This function is called to programme a clock for the mode being set.
- */
-void
-ATIClockSet
-(
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    CARD32 crtc_gen_cntl, tmp;
-    CARD8 clock_cntl0;
-    CARD8 tmp2;
-    unsigned int Programme;
-    int N = pATIHW->FeedbackDivider - pATI->ClockDescriptor.NAdjust;
-    int M = pATIHW->ReferenceDivider - pATI->ClockDescriptor.MAdjust;
-    int D = pATIHW->PostDivider;
-
-    /* Temporarily switch to accelerator mode */
-    crtc_gen_cntl = inr(CRTC_GEN_CNTL);
-    if (!(crtc_gen_cntl & CRTC_EXT_DISP_EN))
-        outr(CRTC_GEN_CNTL, crtc_gen_cntl | CRTC_EXT_DISP_EN);
-
-    switch (pATI->ProgrammableClock)
-    {
-        case ATI_CLOCK_ICS2595:
-            clock_cntl0 = in8(CLOCK_CNTL);
-
-            Programme = (SetBits(pATIHW->clock, ICS2595_CLOCK) |
-                SetBits(N, ICS2595_FB_DIV) | SetBits(D, ICS2595_POST_DIV)) ^
-                ICS2595_TOGGLE;
-
-            ATIDelay(50000);            /* 50 milliseconds */
-
-            (void)xf86DisableInterrupts();
-
-            /* Send all 20 bits of programme word */
-            while (Programme >= CLOCK_BIT)
-            {
-                tmp = (Programme & CLOCK_BIT) | CLOCK_STROBE;
-                out8(CLOCK_CNTL, tmp);
-                ATIDelay(26);           /* 26 microseconds */
-                out8(CLOCK_CNTL, tmp | CLOCK_PULSE);
-                ATIDelay(26);           /* 26 microseconds */
-                Programme >>= 1;
-            }
-
-            xf86EnableInterrupts();
-
-            /* Restore register */
-            out8(CLOCK_CNTL, clock_cntl0 | CLOCK_STROBE);
-            break;
-
-        case ATI_CLOCK_STG1703:
-            (void)ATIGetDACCmdReg(pATI);
-            (void)in8(M64_DAC_MASK);
-            out8(M64_DAC_MASK, (pATIHW->clock << 1) + 0x20U);
-            out8(M64_DAC_MASK, 0);
-            out8(M64_DAC_MASK, SetBits(N, 0xFFU));
-            out8(M64_DAC_MASK, SetBits(M, 0x1FU) | SetBits(D, 0xE0U));
-            break;
-
-        case ATI_CLOCK_CH8398:
-            tmp = inr(DAC_CNTL) | (DAC_EXT_SEL_RS2 | DAC_EXT_SEL_RS3);
-            outr(DAC_CNTL, tmp);
-            out8(M64_DAC_WRITE, pATIHW->clock);
-            out8(M64_DAC_DATA, SetBits(N, 0xFFU));
-            out8(M64_DAC_DATA, SetBits(M, 0x3FU) | SetBits(D, 0xC0U));
-            out8(M64_DAC_MASK, 0x04U);
-            outr(DAC_CNTL, tmp & ~(DAC_EXT_SEL_RS2 | DAC_EXT_SEL_RS3));
-            tmp2 = in8(M64_DAC_WRITE);
-            out8(M64_DAC_WRITE, (tmp2 & 0x70U) | 0x80U);
-            outr(DAC_CNTL, tmp & ~DAC_EXT_SEL_RS2);
-            break;
-
-        case ATI_CLOCK_INTERNAL:
-            /* Reset VCLK generator */
-            ATIMach64PutPLLReg(PLL_VCLK_CNTL, pATIHW->pll_vclk_cntl);
-
-            /* Set post-divider */
-            tmp2 = pATIHW->clock << 1;
-            tmp = ATIMach64GetPLLReg(PLL_VCLK_POST_DIV);
-            tmp &= ~(0x03U << tmp2);
-            tmp |= SetBits(D, 0x03U) << tmp2;
-            ATIMach64PutPLLReg(PLL_VCLK_POST_DIV, tmp);
-
-            /* Set extended post-divider */
-            tmp = ATIMach64GetPLLReg(PLL_XCLK_CNTL);
-            tmp &= ~(SetBits(1, PLL_VCLK0_XDIV) << pATIHW->clock);
-            tmp |= SetBits(D >> 2, PLL_VCLK0_XDIV) << pATIHW->clock;
-            ATIMach64PutPLLReg(PLL_XCLK_CNTL, tmp);
-
-            /* Set feedback divider */
-            tmp = PLL_VCLK0_FB_DIV + pATIHW->clock;
-            ATIMach64PutPLLReg(tmp, SetBits(N, 0xFFU));
-
-            /* End VCLK generator reset */
-            ATIMach64PutPLLReg(PLL_VCLK_CNTL,
-                pATIHW->pll_vclk_cntl & ~PLL_VCLK_RESET);
-
-            /* Reset write bit */
-            ATIMach64AccessPLLReg(pATI, 0, FALSE);
-            break;
-
-        case ATI_CLOCK_ATT20C408:
-            (void)ATIGetDACCmdReg(pATI);
-            tmp = in8(M64_DAC_MASK);
-            (void)ATIGetDACCmdReg(pATI);
-            out8(M64_DAC_MASK, tmp | 1);
-            out8(M64_DAC_WRITE, 1);
-            out8(M64_DAC_MASK, tmp | 9);
-            ATIDelay(400);              /* 400 microseconds */
-            tmp2 = (pATIHW->clock << 2) + 0x40U;
-            out8(M64_DAC_WRITE, tmp2);
-            out8(M64_DAC_MASK, SetBits(N, 0xFFU));
-            out8(M64_DAC_WRITE, ++tmp2);
-            out8(M64_DAC_MASK, SetBits(M, 0x3FU) | SetBits(D, 0xC0U));
-            out8(M64_DAC_WRITE, ++tmp2);
-            out8(M64_DAC_MASK, 0x77U);
-            ATIDelay(400);              /* 400 microseconds */
-            out8(M64_DAC_WRITE, 1);
-            out8(M64_DAC_MASK, tmp);
-            break;
-
-        case ATI_CLOCK_IBMRGB514:
-            /*
-             * Here, only update in-core data.  It will be written out later by
-             * ATIRGB514Set().
-             */
-            tmp = (pATIHW->clock << 1) + 0x20U;
-            pATIHW->ibmrgb514[tmp] =
-                (SetBits(N, 0x3FU) | SetBits(D, 0xC0U)) ^ 0xC0U;
-            pATIHW->ibmrgb514[tmp + 1] = SetBits(M, 0x3FU);
-            break;
-
-        default:
-            break;
-    }
-
-    (void)in8(M64_DAC_WRITE);    /* Clear DAC counter */
-
-    /* Restore register */
-    if (!(crtc_gen_cntl & CRTC_EXT_DISP_EN))
-        outr(CRTC_GEN_CNTL, crtc_gen_cntl);
-}
diff --git a/src/aticlock.h b/src/aticlock.h
deleted file mode 100644
index 1d3f1b9..0000000
--- a/src/aticlock.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATICLOCK_H___
-#define ___ATICLOCK_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-/*
- * Definitions related to programmable clock generators.
- */
-typedef enum
-{
-    ATI_CLOCK_UNKNOWN = -1,
-    ATI_CLOCK_FIXED = 0,        /* Further described by ATIClockType */
-    ATI_CLOCK_ICS2595,
-    ATI_CLOCK_STG1703,
-    ATI_CLOCK_CH8398,
-    ATI_CLOCK_INTERNAL,
-    ATI_CLOCK_ATT20C408,
-    ATI_CLOCK_IBMRGB514,
-    ATI_CLOCK_MAX               /* Must be last */
-} ATIProgrammableClockType;
-
-typedef struct
-{
-    CARD16 MinN, MaxN;          /* Feedback divider and ... */
-    CARD16 NAdjust;             /* ... its adjustment and ... */
-    CARD16 N1, N2;              /* ... its restrictions */
-    CARD16 MinM, MaxM;          /* Reference divider and ... */
-    CARD16 MAdjust;             /* ... its adjustment */
-    CARD16 NumD, *PostDividers; /* Post-dividers */
-    const char *ClockName;
-} ClockRec, *ClockPtr;
-extern ClockRec ATIClockDescriptors[];
-
-extern void ATIClockPreInit(ScrnInfoPtr, ATIPtr);
-extern Bool ATIClockCalculate(int, ATIPtr, ATIHWPtr, DisplayModePtr);
-extern void ATIClockSet(ATIPtr, ATIHWPtr);
-
-#endif /* ___ATICLOCK_H___ */
diff --git a/src/aticonfig.c b/src/aticonfig.c
deleted file mode 100644
index 9102497..0000000
--- a/src/aticonfig.c
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * DRI support by:
- *    Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "ati.h"
-#include "atichip.h"
-#include "aticursor.h"
-#include "atioption.h"
-#include "atistruct.h"
-
-#include "mach64_common.h"
-
-#ifdef TV_OUT
-
-/*
- * List of supported TV standard names
- */
-const char *ATITVStandardNames[ATI_TV_STDS_MAX_VALID+1] = {
-    "NTSC",
-    "PAL",
-    "PAL-M",
-    "PAL-60",
-    "NTSC-J",
-    "PAL-CN",
-    "PAL-N",
-    "Reserved1",
-    "Reserved2",
-    "SCART-PAL",
-    "None",
-    "Invalid"
-};
-
-#endif /* TV_OUT */
-
-/*
- * Recognised XF86Config options.
- */
-static const OptionInfoRec ATIPublicOptions[] =
-{
-    {
-        ATI_OPTION_PROBE_SPARSE,
-        "probe_sparse",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE
-    },
-    {
-        ATI_OPTION_ACCEL,
-        "accel",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE
-    },
-    {
-        ATI_OPTION_CRT_DISPLAY,
-        "crt_display",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE
-    },
-    {
-        ATI_OPTION_CSYNC,
-        "composite_sync",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE
-    },
-    {
-        ATI_OPTION_HWCURSOR,
-        "hw_cursor",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE,
-    },
-
-#ifdef XF86DRI_DEVEL
-
-    {
-        ATI_OPTION_IS_PCI,
-        "force_pci_mode",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE,
-    },
-    {
-        ATI_OPTION_DMA_MODE,
-        "dma_mode",
-        OPTV_STRING,
-        {0, },
-        FALSE,
-    },
-    {
-        ATI_OPTION_AGP_MODE,
-        "agp_mode",
-        OPTV_INTEGER,
-        {0, },
-        FALSE,
-    },
-    {
-        ATI_OPTION_AGP_SIZE,
-        "agp_size",
-        OPTV_INTEGER,
-        {0, },
-        FALSE,
-    },
-    {
-        ATI_OPTION_LOCAL_TEXTURES,
-        "local_textures",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE,
-    },
-    {
-        ATI_OPTION_BUFFER_SIZE,
-        "buffer_size",
-        OPTV_INTEGER,
-        {0, },
-        FALSE,
-    },
-
-#endif /* XF86DRI_DEVEL */
-
-#ifdef TV_OUT
-    {
-        ATI_OPTION_TV_OUT,
-        "tv_out",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE
-    },
-    {
-        ATI_OPTION_TV_STD,
-        "tv_standard",
-        OPTV_STRING,
-        {0, },
-        FALSE
-    },
-
-#endif /* TV_OUT */
-
-    {
-        ATI_OPTION_MMIO_CACHE,
-        "mmio_cache",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE
-    },
-
-
-    {
-        ATI_OPTION_TEST_MMIO_CACHE,
-        "test_mmio_cache",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE
-    },
-    {
-        ATI_OPTION_PANEL_DISPLAY,
-        "panel_display",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE
-    },
-    {
-        ATI_OPTION_REFERENCE_CLOCK,
-        "reference_clock",
-        OPTV_FREQ,
-        {0, },
-        FALSE
-    },
-    {
-        ATI_OPTION_SHADOW_FB,
-        "shadow_fb",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE
-    },
-    {
-        ATI_OPTION_SWCURSOR,
-        "sw_cursor",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE,
-    },
-    {
-        ATI_OPTION_ACCELMETHOD,
-        "AccelMethod",
-        OPTV_STRING,
-        {0, },
-        FALSE
-    },
-    {
-        ATI_OPTION_RENDER_ACCEL,
-        "RenderAccel",
-        OPTV_BOOLEAN,
-        {0, },
-        FALSE
-    },
-    {
-        -1,
-        NULL,
-        OPTV_NONE,
-        {0, },
-        FALSE
-    }
-};
-
-static const unsigned long ATIPublicOptionSize = SizeOf(ATIPublicOptions);
-
-const OptionInfoRec *
-ATIOptionsWeak(void) { return ATIPublicOptions; }
-
-/*
- * Non-publicised XF86Config options.
- */
-typedef enum
-{
-    ATI_OPTION_BIOS_DISPLAY,    /* Allow BIOS interference */
-    ATI_OPTION_CRT_SCREEN,      /* Legacy negation of "PanelDisplay" */
-    ATI_OPTION_DEVEL,           /* Intentionally undocumented */
-    ATI_OPTION_BLEND,           /* Force horizontal blending of small modes */
-    ATI_OPTION_LCDSYNC          /* Use XF86Config panel mode porches */
-} ATIPrivateOptionType;
-
-/*
- * ATIProcessOptions --
- *
- * This function extracts options from what was parsed out of the XF86Config
- * file.
- */
-void
-ATIProcessOptions
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI
-)
-{
-    OptionInfoPtr PublicOption = xnfalloc(ATIPublicOptionSize);
-    OptionInfoRec PrivateOption[] =
-    {
-        {                       /* ON:  Let BIOS change display(s) */
-            ATI_OPTION_BIOS_DISPLAY,    /* OFF:  Don't */
-            "biosdisplay",
-            OPTV_BOOLEAN,
-            {0, },
-            FALSE
-        },
-        {                       /* Negation of "PanelDisplay" public option */
-            ATI_OPTION_CRT_SCREEN,
-            "crtscreen",
-            OPTV_BOOLEAN,
-            {0, },
-            FALSE
-        },
-        {                       /* ON:   Ease exploration of loose ends */
-            ATI_OPTION_DEVEL,   /* OFF:  Fit for public consumption */
-            "tsi",
-            OPTV_BOOLEAN,
-            {0, },
-            FALSE
-        },
-        {                       /* ON:   Horizontally blend most modes */
-            ATI_OPTION_BLEND,   /* OFF:  Use pixel replication more often */
-            "lcdblend",
-            OPTV_BOOLEAN,
-            {0, },
-            FALSE
-        },
-        {                       /* ON:   Use XF86Config porch timings */
-            ATI_OPTION_LCDSYNC, /* OFF:  Use porches from mode on entry */
-            "lcdsync",
-            OPTV_BOOLEAN,
-            {0, },
-            FALSE
-        },
-        {
-            -1,
-            NULL,
-            OPTV_NONE,
-            {0, },
-            FALSE
-        }
-    };
-
-    (void)memcpy(PublicOption, ATIPublicOptions, ATIPublicOptionSize);
-
-#   define ProbeSparse   PublicOption[ATI_OPTION_PROBE_SPARSE].value.bool
-#   define Accel         PublicOption[ATI_OPTION_ACCEL].value.bool
-#   define BIOSDisplay   PrivateOption[ATI_OPTION_BIOS_DISPLAY].value.bool
-#   define Blend         PrivateOption[ATI_OPTION_BLEND].value.bool
-#   define CRTDisplay    PublicOption[ATI_OPTION_CRT_DISPLAY].value.bool
-#   define CRTScreen     PrivateOption[ATI_OPTION_CRT_SCREEN].value.bool
-#   define CSync         PublicOption[ATI_OPTION_CSYNC].value.bool
-#   define Devel         PrivateOption[ATI_OPTION_DEVEL].value.bool
-#   define HWCursor      PublicOption[ATI_OPTION_HWCURSOR].value.bool
-
-#ifdef XF86DRI_DEVEL
-
-#   define IsPCI       PublicOption[ATI_OPTION_IS_PCI].value.bool
-#   define DMAMode     PublicOption[ATI_OPTION_DMA_MODE].value.str
-#   define AGPMode     PublicOption[ATI_OPTION_AGP_MODE].value.num
-#   define AGPSize     PublicOption[ATI_OPTION_AGP_SIZE].value.num
-#   define LocalTex    PublicOption[ATI_OPTION_LOCAL_TEXTURES].value.bool
-#   define BufferSize  PublicOption[ATI_OPTION_BUFFER_SIZE].value.num
-
-#endif /* XF86DRI_DEVEL */
-
-#ifdef TV_OUT
-
-#   define TvOut        PublicOption[ATI_OPTION_TV_OUT].value.bool
-#   define TvStd        PublicOption[ATI_OPTION_TV_STD].value.str
-
-#endif /* TV_OUT */
-
-#   define CacheMMIO     PublicOption[ATI_OPTION_MMIO_CACHE].value.bool
-#   define TestCacheMMIO PublicOption[ATI_OPTION_TEST_MMIO_CACHE].value.bool
-#   define PanelDisplay  PublicOption[ATI_OPTION_PANEL_DISPLAY].value.bool
-#   define ShadowFB      PublicOption[ATI_OPTION_SHADOW_FB].value.bool
-#   define SWCursor      PublicOption[ATI_OPTION_SWCURSOR].value.bool
-#   define AccelMethod   PublicOption[ATI_OPTION_ACCELMETHOD].value.str
-#   define RenderAccel   PublicOption[ATI_OPTION_RENDER_ACCEL].value.bool
-#   define LCDSync       PrivateOption[ATI_OPTION_LCDSYNC].value.bool
-
-#   define ReferenceClock \
-        PublicOption[ATI_OPTION_REFERENCE_CLOCK].value.freq.freq
-
-    /* Pick up XF86Config options */
-    xf86CollectOptions(pScreenInfo, NULL);
-
-    /* Set non-zero defaults */
-    Accel = CacheMMIO = HWCursor = TRUE;
-
-    ReferenceClock = ((double)157500000.0) / ((double)11.0);
-
-    ShadowFB = TRUE;
-
-    Blend = PanelDisplay = TRUE;
-
-#ifdef USE_EXA
-    RenderAccel = TRUE;
-#endif
-
-#ifdef XF86DRI_DEVEL
-    DMAMode = "async";
-#endif
-
-#ifdef TV_OUT
-    TvStd = "None";  /* No tv standard change requested */
-#endif
-
-    xf86ProcessOptions(pScreenInfo->scrnIndex, pScreenInfo->options,
-        PublicOption);
-    xf86ProcessOptions(pScreenInfo->scrnIndex, pScreenInfo->options,
-        PrivateOption);
-
-    /* Move option values into driver private structure */
-    pATI->OptionProbeSparse = ProbeSparse;
-    pATI->OptionAccel = Accel;
-    pATI->OptionBIOSDisplay = BIOSDisplay;
-    pATI->OptionBlend = Blend;
-    pATI->OptionCRTDisplay = CRTDisplay;
-    pATI->OptionCSync = CSync;
-    pATI->OptionDevel = Devel;
-
-#ifdef TV_OUT
-
-    if (TvOut && pATI->Chip < ATI_CHIP_264GT) {
-       /* Only allow this for 3D Rage (I) or greater chip ID
-	* AFAIK, no chips before this supported TV-Out
-	* mach64VT has support for TV tuner, but no TV-Out
-	*/
-	xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "TV Out not supported for this chip.\n");
-    } else {
-	ATITVStandard std;
-	pATI->OptionTvOut = TvOut;
-	pATI->OptionTvStd = ATI_TV_STD_INVALID;
-	for (std = 0; std < ATI_TV_STDS_MAX_VALID; std++) {
-	    if (std != ATI_TV_STD_RESERVED1 && std != ATI_TV_STD_RESERVED2) {
-		if (strncasecmp(TvStd, ATITVStandardNames[std], ATI_TV_STDS_NAME_MAXLEN)==0) {
-		    pATI->OptionTvStd = std;
-		    break;
-		}
-	    }
-	}
-    }
-
-#endif /* TV_OUT */
-
-    pATI->OptionMMIOCache = CacheMMIO;
-    pATI->OptionTestMMIOCache = TestCacheMMIO;
-    pATI->OptionShadowFB = ShadowFB;
-    pATI->OptionLCDSync = LCDSync;
-
-    /* "CRTScreen" is now "NoPanelDisplay" */
-    if ((PanelDisplay != CRTScreen) ||
-        PublicOption[ATI_OPTION_PANEL_DISPLAY].found)
-        pATI->OptionPanelDisplay = PanelDisplay;
-    else
-        pATI->OptionPanelDisplay = !CRTScreen;
-
-#ifdef XF86DRI_DEVEL
-
-    pATI->OptionIsPCI = IsPCI;
-    pATI->OptionAGPMode = AGPMode;
-    pATI->OptionAGPSize = AGPSize;
-    pATI->OptionLocalTextures = LocalTex;
-    pATI->OptionBufferSize = BufferSize;
-
-    if (strcasecmp(DMAMode, "async")==0)
-        pATI->OptionDMAMode = MACH64_MODE_DMA_ASYNC;
-    else if (strcasecmp(DMAMode, "sync")==0)
-        pATI->OptionDMAMode = MACH64_MODE_DMA_SYNC;
-    else if (strcasecmp(DMAMode, "mmio")==0 )
-        pATI->OptionDMAMode = MACH64_MODE_MMIO;
-    else {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-		   "Unkown dma_mode: '%s'\n", DMAMode);
-	xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-		   "Valid dma_mode options are: 'async','sync','mmio'\n");
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-		   "Defaulting to async DMA mode\n");
-	pATI->OptionDMAMode = MACH64_MODE_DMA_ASYNC;
-    }
-
-#endif /* XF86DRI_DEVEL */
-
-    /* Validate and set cursor options */
-    pATI->Cursor = ATI_CURSOR_SOFTWARE;
-    if (SWCursor || !HWCursor)
-    {
-        if (HWCursor && PublicOption[ATI_OPTION_HWCURSOR].found)
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "Option \"sw_cursor\" overrides Option \"hw_cursor\".\n");
-    }
-    else if (pATI->Chip < ATI_CHIP_264CT)
-    {
-        if (HWCursor && PublicOption[ATI_OPTION_HWCURSOR].found)
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "Option \"hw_cursor\" not supported in this configuration.\n");
-    }
-    else
-    {
-        pATI->Cursor = ATI_CURSOR_HARDWARE;
-    }
-
-    pATI->refclk = (int)ReferenceClock;
-
-    pATI->useEXA = FALSE;
-    if (pATI->OptionAccel)
-    {
-        MessageType from = X_DEFAULT;
-#if defined(USE_EXA)
-#if defined(USE_XAA)
-        if (AccelMethod != NULL)
-        {
-            from = X_CONFIG;
-            if (xf86NameCmp(AccelMethod, "EXA") == 0)
-                pATI->useEXA = TRUE;
-        }
-#else /* USE_XAA */
-        pATI->useEXA = TRUE;
-#endif /* !USE_XAA */
-#endif /* USE_EXA */
-        xf86DrvMsg(pScreenInfo->scrnIndex, from,
-            "Using %s acceleration architecture\n",
-            pATI->useEXA ? "EXA" : "XAA");
-
-#if defined(USE_EXA)
-        if (pATI->useEXA && pATI->Chip >= ATI_CHIP_264GTPRO)
-            pATI->RenderAccelEnabled = TRUE;
-
-        if (pATI->useEXA && !RenderAccel)
-            pATI->RenderAccelEnabled = FALSE;
-#endif
-    }
-
-    xfree(PublicOption);
-}
diff --git a/src/aticonsole.c b/src/aticonsole.c
deleted file mode 100644
index 8efe897..0000000
--- a/src/aticonsole.c
+++ /dev/null
@@ -1,816 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * DRI support by:
- *    Manuel Teira
- *    Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "aticonsole.h"
-#include "atii2c.h"
-#include "atilock.h"
-#include "atimach64.h"
-#include "atimach64io.h"
-#include "atimode.h"
-#include "atistruct.h"
-#include "ativga.h"
-#include "atividmem.h"
-
-#ifdef XF86DRI_DEVEL
-#include "mach64_common.h"
-#include "atidri.h"
-#endif
-
-#ifdef TV_OUT
-
-#include "atichip.h"
-#include "atiprint.h"
-#include "atioption.h"
-#include "vbe.h"
-
-#endif /* TV_OUT */
-
-/*
- * ATISaveScreen --
- *
- * This function is a screen saver hook for DIX.
- */
-Bool
-ATISaveScreen
-(
-    ScreenPtr pScreen,
-    int       Mode
-)
-{
-    ScrnInfoPtr pScreenInfo;
-    ATIPtr      pATI;
-
-    if ((Mode != SCREEN_SAVER_ON) && (Mode != SCREEN_SAVER_CYCLE))
-        SetTimeSinceLastInputEvent();
-
-    if (!pScreen)
-        return TRUE;
-
-    pScreenInfo = xf86Screens[pScreen->myNum];
-    if (!pScreenInfo->vtSema)
-        return TRUE;
-
-    pATI = ATIPTR(pScreenInfo);
-    {
-            ATIMach64SaveScreen(pATI, Mode);
-    }
-
-    return TRUE;
-}
-
-/*
- * ATISetDPMSMode --
- *
- * This function sets the adapter's VESA Display Power Management Signaling
- * mode.
- */
-void
-ATISetDPMSMode
-(
-    ScrnInfoPtr pScreenInfo,
-    int         DPMSMode,
-    int         flags
-)
-{
-    ATIPtr pATI;
-
-    if (!pScreenInfo || !pScreenInfo->vtSema)
-        return;
-
-    pATI = ATIPTR(pScreenInfo);
-
-    {
-            ATIMach64SetDPMSMode(pScreenInfo, pATI, DPMSMode);
-    }
-}
-
-#ifdef TV_OUT
-
-static void
-ATIProbeAndSetActiveDisplays
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI
-)
-{
-    vbeInfoPtr pVbe;
-    Bool tv_attached, crt_attached, lcd_attached;
-    int disp_request;
-    ATITVStandard tv_std, tv_std_request;
-
-    if (xf86GetVerbosity() > 3) {
-	xf86ErrorFVerb(4, "\n Before TV-Out queries\n\n");
-	ATIPrintRegisters(pATI);
-    }
-
-    pATI->tvActive = FALSE;
-    pVbe = pATI->pVBE;
-    if (pVbe) {
-	/* LT Pro, XL, Mobility specific BIOS functions */
-	if (pATI->Chip == ATI_CHIP_264LTPRO ||
-	    pATI->Chip == ATI_CHIP_264XL || 
-	    pATI->Chip == ATI_CHIP_MOBILITY) {
-    
-	    /* Get attached display(s) - LTPro, XL, Mobility */
-	    pVbe->pInt10->num = 0x10;
-	    pVbe->pInt10->ax = 0xa083;
-	    pVbe->pInt10->cx = 0x0700; /* ch=0x07 - probe all, 0x01 CRT, 0x02 TV, 0x04 LCD */
-	    xf86ExecX86int10(pVbe->pInt10);
-
-	    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-		       "Attached displays: ax=0x%04x, cx=0x%04x\n",
-		       pVbe->pInt10->ax, pVbe->pInt10->cx);
-
-	    tv_attached = crt_attached = lcd_attached = FALSE;
-	    if (pVbe->pInt10->ax & 0xff00) {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-			   "Failed to detect attached displays\n");
-	    } else {
-			
-		if (pVbe->pInt10->cx & 0x3)
-		{
-			xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-				   "   CRT attached\n");
-			crt_attached = TRUE;
-		}
-		else
-		    crt_attached = FALSE;
-
-		if ((pVbe->pInt10->cx >> 2) & 0x3)
-		{
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "   DFP/LCD attached\n");
-		    lcd_attached = TRUE;
-		}
-		else
-		    lcd_attached = FALSE;
-
-		switch ((pVbe->pInt10->cx >> 4) & 0x3) {
-		case 0:
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "   No TV attached\n");
-		    break;
-		case 1:
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "   TV attached (composite connector)\n");
-		    tv_attached = TRUE;
-		    break;
-		case 2:
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "   TV attached (S-video connector)\n");
-		    tv_attached = TRUE;
-		    break;
-		case 3:
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "   TV attached (S-video/composite connectors)\n");
-		    tv_attached = TRUE;
-		    break;
-		default:
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-			       "Unrecognized return code: 0x%04x\n", 
-			       pVbe->pInt10->cx);
-		}
-
-	    }
-
-	    /* Get active display  - LTPro, XL, Mobility */
-	    pVbe->pInt10->num = 0x10;
-	    pVbe->pInt10->ax = 0xa084;
-	    pVbe->pInt10->bx = 0x0000; /* bh=0x00 get active, bh=0x01 set active */
-	    xf86ExecX86int10(pVbe->pInt10);
-
-	    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-		       "Active displays: ax=0x%04x, bx=0x%04x, cx=0x%04x\n",
-		       pVbe->pInt10->ax, pVbe->pInt10->bx, pVbe->pInt10->cx);
-
-	    if (pVbe->pInt10->ax & 0xff00) {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-			   "Failed to detect active display\n");
-	    } else {
-		if (pVbe->pInt10->bx & 0x1) 
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 		       
-			       "   DFP/LCD is active\n");
-
-		if (pVbe->pInt10->bx & 0x2) 
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "   CRT is active\n");
-
-		if (pVbe->pInt10->bx & 0x4) {
-		    
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "   TV is active\n");
-
-		    if (!tv_attached) {
-			/* tv not connected - disable tv */
-			disp_request = 0x00;
-			if (crt_attached)
-			    disp_request |= 0x02; /* enable CRT */
-			if (lcd_attached && pATI->OptionPanelDisplay)
-			    disp_request |= 0x01; /* enable DFP/LCD */
-
-			pVbe->pInt10->num = 0x10;
-			pVbe->pInt10->ax = 0xa084;
-			pVbe->pInt10->bx = 0x0100; /* bh=0x01 set active */
-			pVbe->pInt10->cx = disp_request; 
-			xf86ExecX86int10(pVbe->pInt10);
-
-			xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-				   "TV not present, disabling: ax=0x%04x, bx=0x%04x, cx=0x%04x\n",
-				   pVbe->pInt10->ax, pVbe->pInt10->bx, pVbe->pInt10->cx);
-			if (pVbe->pInt10->ax & 0xff00) {
-			    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-				       "Disabling TV failed\n");
-			}
-		    } else {
-			pATI->tvActive = TRUE;
-		    }
-
-		} else if (tv_attached && (pVbe->pInt10->bx & 0x0400)) {
-		    /* tv connected and available - enable TV */
-		    disp_request = 0x04;          /* enable TV */
-
-#if 0
-		    /* This works, but CRT image is vertically compressed */
-		    if (crt_attached)
-			    disp_request |= 0x02; /* enable CRT */
-		    /* NOTE: For me, LCD+TV does NOT work */
-		    /*if (lcd_attached && pATI->OptionPanelDisplay)
-			    disp_request |= 0x01; * enable DFP/LCD */
-#endif
-
-		    pVbe->pInt10->num = 0x10;
-		    pVbe->pInt10->ax = 0xa084;
-		    pVbe->pInt10->bx = 0x0100; /* bh=0x01 set active */
-		    pVbe->pInt10->cx = disp_request; /* try to activate TV */
-		    xf86ExecX86int10(pVbe->pInt10);
-		    
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "Setting TV active: ax=0x%04x, bx=0x%04x, cx=0x%04x\n",
-			       pVbe->pInt10->ax, pVbe->pInt10->bx, pVbe->pInt10->cx);
-		    if (pVbe->pInt10->ax & 0xff00) {
-			xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-				   "Setting TV active failed\n");
-		    } else {
-			pATI->tvActive = TRUE;
-		    }
-		}
-	    }
-
-	} else { /* pATI->Chip < ATI_CHIP_264LTPRO */
-	    /* TVOut Hooks - Check for TVOut BIOS/hardware */
-	    pVbe->pInt10->num = 0x10;
-	    pVbe->pInt10->ax = 0xa019;
-	    pVbe->pInt10->cx = 0x0000; /* TVOut BIOS query */
-	    xf86ExecX86int10(pVbe->pInt10);
-
-	    tv_attached = FALSE;
-
-	    if (pVbe->pInt10->ax & 0xff00) {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-			   "Failed to detect TV-Out BIOS\n");
-	    } else {
-		switch (pVbe->pInt10->ax & 0x0003) {
-		case 3:
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "TV-Out BIOS detected and active\n");
-
-		    /* TV attached query */
-		    pVbe->pInt10->num = 0x10;
-		    pVbe->pInt10->ax = 0xa070;
-		    pVbe->pInt10->bx = 0x0002; /* Sub-function: return tv attached info */
-		    xf86ExecX86int10(pVbe->pInt10);
-
-		    if (pVbe->pInt10->ax & 0xff00) {
-			xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-				   "Failed to detect if TV is attached\n");
-		    } else {
-			switch (pVbe->pInt10->cx & 0x0003) {
-			case 3:
-			    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-				       "TV attached to composite and S-video connectors\n");
-			    tv_attached = TRUE;
-			    break;
-			case 2:
-			    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-				       "TV attached to S-video connector\n");
-			    tv_attached = TRUE;
-			    break;
-			case 1:
-			    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-				       "TV attached to composite connector\n");
-			    tv_attached = TRUE;
-			    break;
-			default:
-			    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-				       "TV is not attached\n");
-			}
-		    }
-		    break;
-		case 1:
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "TV-Out BIOS service is not available due to" 
-			       "a system BIOS error or TV-Out hardware not being installed\n");
-		    break;
-		default:
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "No TV-Out BIOS or hardware detected\n");
-		}
-	    }
-	}
-
-	/* Return TV-Out configuration 
-	 * see Programmer's Guide under "TV Out Specific Functions"
-	 * It's not clear exactly which adapters support these
-	 */
-	pVbe->pInt10->num = 0x10;
-	pVbe->pInt10->ax = 0xa070;
-	pVbe->pInt10->bx = 0x00;
-	xf86ExecX86int10(pVbe->pInt10);
-
-	xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-		   "TV-Out query: ax=0x%04x, bx=0x%04x, cx=0x%04x, dx=0x%04x\n",
-		   pVbe->pInt10->ax, pVbe->pInt10->bx, pVbe->pInt10->cx, pVbe->pInt10->dx);
-
-	if (pVbe->pInt10->ax & 0xff00) {
-
-	    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-		       "Failed to detect TV-Out configuration.\n");
-
-	} else if (pVbe->pInt10->bx == 0) {
-	    if (pVbe->pInt10->dx == 0) {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			   "TV-Out is not detected.\n");
-	    } else {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			   "TV-Out is detected but not supported.\n");
-	    }
-
-	} else if ((pVbe->pInt10->cx & 0xff) == 0) {
-
-	    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-		       "TV-Out is currently disabled.\n");
-	    if (tv_attached && pATI->Chip < ATI_CHIP_264LTPRO) {
-		/* Try to enable TV-Out */
-		pVbe->pInt10->num = 0x10;
-		pVbe->pInt10->ax = 0xa070;
-		pVbe->pInt10->bx = 0x0001; /* Sub-function: Select TV Out */
-		/* cl=0x001 enable, cl=0x000 disable, 
-		 * cl=0x080 disable with feature connector bit preserved 
-		 */
-		pVbe->pInt10->cx = 0x0001;
-			
-		xf86ExecX86int10(pVbe->pInt10);
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			   "Setting TV active: ax=0x%04x, bx=0x%04x, cx=0x%04x\n",
-			   pVbe->pInt10->ax, pVbe->pInt10->bx, pVbe->pInt10->cx);
-
-		if (pVbe->pInt10->ax & 0xff00) {
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-			       "Setting TV active failed\n");
-		} else {
-		    pATI->tvActive = TRUE;
-		}
-	    }
-
-	} else {
-	    pATI->tvActive = TRUE;
-
-	    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-		       "TV-Out is currently enabled (TV-Out revision code: %d).\n",
-		       (pVbe->pInt10->dx >> 8) & 0xff);
-
-	    switch ((pVbe->pInt10->cx >> 8) & 0xff) {
-	    case 0:
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Reference frequency 29.49892\n");
-		break;
-	    case 1:
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Reference frequency 28.63636\n");
-		break;
-	    case 2:
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Reference frequency 14.31818\n");
-		break;
-	    case 3:
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Reference frequency 27.00000\n");
-		break;
-	    default:
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-			   "Unknown reference frequency cx=0x%04x\n", pVbe->pInt10->cx);
-		    
-	    }
-
-	    /* Return TV standard
-	     * see Programmer's Guide under "TV Out Specific Functions"
-	     * It's not clear exactly which adapters support these
-	     */
-	    pVbe->pInt10->num = 0x10;
-	    pVbe->pInt10->ax = 0xa071;
-	    pVbe->pInt10->bx = 0x00;
-	    xf86ExecX86int10(pVbe->pInt10);
-
-	    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-		       "TV standard query result: ax=0x%04x, bx=0x%04x, cx=0x%04x\n",
-		       pVbe->pInt10->ax, pVbe->pInt10->bx, pVbe->pInt10->cx);
-
-	    if (pVbe->pInt10->ax & 0xff00) {
-
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-			   "Failed to return TV standard.\n");
-	    } else {
-		tv_std = pVbe->pInt10->cx & 0x00ff;
-		switch (tv_std) {
-		case ATI_TV_STD_NTSC:
-		case ATI_TV_STD_PAL:
-		case ATI_TV_STD_PALM:
-		case ATI_TV_STD_PAL60:
-		case ATI_TV_STD_NTSCJ:
-		case ATI_TV_STD_PALCN:
-		case ATI_TV_STD_PALN:
-		case ATI_TV_STD_SCARTPAL:
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			       "Current TV standard: %s\n", ATITVStandardNames[tv_std]);
-		    break;
-		default:
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-			       "Unrecognized TV standard return code cx=0x%04x\n", 
-			       pVbe->pInt10->cx);
-		}
-
-		tv_std_request = pATI->OptionTvStd;
-		if (tv_std_request < 0 || 
-		    tv_std_request > ATI_TV_STD_NONE || 
-		    tv_std_request == ATI_TV_STD_RESERVED1 || 
-		    tv_std_request == ATI_TV_STD_RESERVED2) {
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-			       "Invalid TV standard requested, please check configuration file\n");
-		} else if (tv_std_request != ATI_TV_STD_NONE) {
-		    /* Set TV standard if requested (LT Pro not supported) */
-		    if (pATI->Chip != ATI_CHIP_264LTPRO &&
-			tv_std_request != tv_std) {
-				
-			pVbe->pInt10->num = 0x10;
-			pVbe->pInt10->ax = 0xa070;
-			pVbe->pInt10->bx = 0x0003; /* sub-function: set TV standard */
-			pVbe->pInt10->cx = tv_std_request;
-			xf86ExecX86int10(pVbe->pInt10);
-			if (pVbe->pInt10->ax & 0xff00)
-			    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-				       "Failed to set TV standard\n");
-			else
-			    xf86DrvMsg(pScreenInfo->scrnIndex, X_CONFIG, 
-				       "Set TV standard to %s\n", ATITVStandardNames[tv_std_request]);
-		    } else {
-			xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, 
-				   "Setting TV standard not supported on ATI Rage LT Pro\n");
-		    }
-		}
-	    }
-	    
-	}
-    } else {
-	xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "VBE module not loaded\n");
-    }
-}
-
-#endif /* TV_OUT */
-
-/*
- * ATIEnterGraphics --
- *
- * This function sets the hardware to a graphics video state.
- */
-Bool
-ATIEnterGraphics
-(
-    ScreenPtr   pScreen,
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI
-)
-{
-    /* Map apertures */
-    if (!ATIMapApertures(pScreenInfo->scrnIndex, pATI))
-        return FALSE;
-
-    /* Unlock device */
-    ATIUnlock(pATI);
-
-    /* Calculate hardware data */
-    if (pScreen &&
-        !ATIModeCalculate(pScreenInfo->scrnIndex, pATI, &pATI->NewHW,
-            pScreenInfo->currentMode))
-        return FALSE;
-
-    pScreenInfo->vtSema = TRUE;
-
-#ifdef TV_OUT
-    if (pATI->OptionTvOut) {
-
-	if (pATI->pVBE) {
-	    if (VBEGetVBEMode(pATI->pVBE, &pATI->vbemode)) {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Saving VESA mode: 0x%x\n", 
-			   pATI->vbemode);
-	    }
-	}
-    }
-#endif /* TV_OUT */
-
-    /* Save current state */
-    ATIModeSave(pScreenInfo, pATI, &pATI->OldHW);
-
-#ifdef TV_OUT
-    if (pATI->OptionTvOut) 
-	ATIProbeAndSetActiveDisplays(pScreenInfo, pATI);
-#endif /* TV_OUT */
-
-    /* Set graphics state */
-    ATIModeSet(pScreenInfo, pATI, &pATI->NewHW);
-
-    /* Possibly blank the screen */
-    if (pScreen)
-       (void)ATISaveScreen(pScreen, SCREEN_SAVER_ON);
-
-    /* Position the screen */
-    (*pScreenInfo->AdjustFrame)(pScreenInfo->scrnIndex,
-        pScreenInfo->frameX0, pScreenInfo->frameY0, 0);
-
-    SetTimeSinceLastInputEvent();
-
-    return TRUE;
-}
-
-/*
- * ATILeaveGraphics --
- *
- * This function restores the hardware to its previous state.
- */
-void
-ATILeaveGraphics
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI
-)
-{
-    if (pScreenInfo->vtSema)
-    {
-        /* If not exiting, save graphics video state */
-        if (!xf86ServerIsExiting())
-            ATIModeSave(pScreenInfo, pATI, &pATI->NewHW);
-
-#ifdef TV_OUT
-	if (pATI->OptionTvOut) 
-	    ATIProbeAndSetActiveDisplays(pScreenInfo, pATI);
-#endif /* TV_OUT */
-
-        /* Restore mode in effect on server entry */
-        ATIModeSet(pScreenInfo, pATI, &pATI->OldHW);
-
-        pScreenInfo->vtSema = FALSE;
-    }
-
-    /* Lock device */
-    ATILock(pATI);
-
-    /* Unmap apertures */
-
-#ifdef AVOID_DGA
-
-    if (!pATI->Closeable)
-
-#else /* AVOID_DGA */
-
-    if (!pATI->Closeable || !pATI->nDGAMode)
-
-#endif /* AVOID_DGA */
-
-        ATIUnmapApertures(pScreenInfo->scrnIndex, pATI);
-
-    SetTimeSinceLastInputEvent();
-}
-
-/*
- * ATISwitchMode --
- *
- * This function switches to another graphics video state.
- */
-Bool
-ATISwitchMode
-(
-    int            iScreen,
-    DisplayModePtr pMode,
-    int            flags
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[iScreen];
-    ATIPtr      pATI        = ATIPTR(pScreenInfo);
-
-    /* Calculate new hardware data */
-    if (!ATIModeCalculate(iScreen, pATI, &pATI->NewHW, pMode))
-        return FALSE;
-
-    /* Set new hardware state */
-    if (pScreenInfo->vtSema)
-    {
-        pScreenInfo->currentMode = pMode;
-
-#ifdef XF86DRI_DEVEL
-
-        if (pATI->directRenderingEnabled) 
-        {
-            DRILock(pScreenInfo->pScreen,0);
-	    ATIDRIWaitForIdle(pATI);
-        }
-
-#endif /* XF86DRI_DEVEL */
-
-        /* XXX Workaround for X server not hiding the cursor for Xcursor (but
-         * only for core cursor), leaving a 64x64 garbage upper-left.
-         */
-        if (pATI->pCursorInfo)
-            (*pATI->pCursorInfo->HideCursor)(pScreenInfo);
-
-        ATIModeSet(pScreenInfo, pATI, &pATI->NewHW);
-
-#ifdef XF86DRI_DEVEL
-
-        if (pATI->directRenderingEnabled) 
-        {
-            DRIUnlock(pScreenInfo->pScreen);
-        }
-
-#endif /* XF86DRI_DEVEL */
-
-    }
-
-    SetTimeSinceLastInputEvent();
-
-    return TRUE;
-}
-
-/*
- * ATIEnterVT --
- *
- * This function sets the server's virtual console to a graphics video state.
- */
-Bool
-ATIEnterVT
-(
-    int iScreen,
-    int flags
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[iScreen];
-    ScreenPtr   pScreen     = pScreenInfo->pScreen;
-    ATIPtr      pATI        = ATIPTR(pScreenInfo);
-    PixmapPtr   pScreenPixmap;
-    DevUnion    PixmapPrivate;
-    Bool        Entered;
-
-    if (!ATIEnterGraphics(NULL, pScreenInfo, pATI))
-        return FALSE;
-
-    /* The rest of this isn't needed for shadowfb */
-    if (pATI->OptionShadowFB)
-    {
-
-#ifdef XF86DRI_DEVEL
-
-        if (pATI->directRenderingEnabled) 
-        {
-            /* get the Mach64 back into shape after resume */
-            ATIDRIResume(pScreen);
-            DRIUnlock(pScreen);
-        }
-
-#endif /* XF86DRI_DEVEL */
-
-        return TRUE;
-    }
-
-    pScreenPixmap = (*pScreen->GetScreenPixmap)(pScreen);
-    PixmapPrivate = pScreenPixmap->devPrivate;
-    if (!PixmapPrivate.ptr)
-        pScreenPixmap->devPrivate = pScreenInfo->pixmapPrivate;
-
-    /* Tell framebuffer about remapped aperture */
-    Entered = (*pScreen->ModifyPixmapHeader)(pScreenPixmap,
-        -1, -1, -1, -1, -1, pATI->pMemory);
-
-    if (!PixmapPrivate.ptr)
-    {
-        pScreenInfo->pixmapPrivate = pScreenPixmap->devPrivate;
-        pScreenPixmap->devPrivate.ptr = NULL;
-    }
-
-#ifdef XF86DRI_DEVEL
-
-    if (pATI->directRenderingEnabled) 
-    {
-        /* get the Mach64 back into shape after resume */
-        ATIDRIResume(pScreen);
-        DRIUnlock(pScreen);
-    }
-
-#endif /* XF86DRI_DEVEL */
-
-    return Entered;
-}
-
-/*
- * ATILeaveVT --
- *
- * This function restores the server's virtual console to its state on server
- * entry.
- */
-void
-ATILeaveVT
-(
-    int iScreen,
-    int flags
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[iScreen];
-    ScreenPtr   pScreen     = pScreenInfo->pScreen;
-    ATIPtr      pATI        = ATIPTR(pScreenInfo);
-
-#ifdef XF86DRI_DEVEL
-
-    if (pATI->directRenderingEnabled) 
-    {
-        DRILock(pScreen,0);
-        ATIDRIWaitForIdle(pATI);
-    }
-
-#endif /* XF86DRI_DEVEL */
-
-    ATILeaveGraphics(pScreenInfo, ATIPTR(pScreenInfo));
-}
-
-/*
- * ATIFreeScreen --
- *
- * This function frees all driver data related to a screen.
- */
-void
-ATIFreeScreen
-(
-    int iScreen,
-    int flags
-)
-{
-    ScreenPtr   pScreen     = screenInfo.screens[iScreen];
-    ScrnInfoPtr pScreenInfo = xf86Screens[iScreen];
-    ATIPtr      pATI        = ATIPTR(pScreenInfo);
-
-    if (pATI->Closeable || (serverGeneration > 1))
-        ATII2CFreeScreen(iScreen);
-
-    if (pATI->Closeable)
-        (void)(*pScreen->CloseScreen)(iScreen, pScreen);
-
-    ATILeaveGraphics(pScreenInfo, pATI);
-
-#ifndef AVOID_CPIO
-
-    xfree(pATI->OldHW.frame_buffer);
-    xfree(pATI->NewHW.frame_buffer);
-
-#endif /* AVOID_CPIO */
-
-    xfree(pATI->pShadow);
-
-#ifndef AVOID_DGA
-
-    xfree(pATI->pDGAMode);
-
-#endif /* AVOID_DGA */
-
-    xfree(pATI);
-    pScreenInfo->driverPrivate = NULL;
-}
diff --git a/src/aticonsole.h b/src/aticonsole.h
deleted file mode 100644
index 7e1084a..0000000
--- a/src/aticonsole.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATICONSOLE_H___
-#define ___ATICONSOLE_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-extern Bool ATISaveScreen(ScreenPtr, int);
-extern void ATISetDPMSMode(ScrnInfoPtr, int, int);
-
-extern Bool ATIEnterGraphics(ScreenPtr, ScrnInfoPtr, ATIPtr);
-extern void ATILeaveGraphics(ScrnInfoPtr, ATIPtr);
-
-extern Bool ATISwitchMode(int, DisplayModePtr, int);
-
-extern Bool ATIEnterVT(int, int);
-extern void ATILeaveVT(int, int);
-
-extern void ATIFreeScreen(int, int);
-
-#endif /* ___ATICONSOLE_H___ */
diff --git a/src/aticrtc.h b/src/aticrtc.h
deleted file mode 100644
index dd7ddd0..0000000
--- a/src/aticrtc.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 1997 through 2003 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATICRTC_H___
-#define ___ATICRTC_H___ 1
-
-/*
- * CRTC related definitions.
- */
-typedef enum
-{
-
-#ifndef AVOID_CPIO
-
-    ATI_CRTC_VGA,       /* Use VGA CRTC */
-    ATI_CRTC_8514,      /* Use 8514/Mach8/Mach32 accelerator CRTC */
-
-#endif /* AVOID_CPIO */
-
-    ATI_CRTC_MACH64     /* Use Mach64 accelerator CRTC */
-} ATICRTCType;
-
-#endif /* ___ATICRTC_H___ */
diff --git a/src/aticursor.h b/src/aticursor.h
deleted file mode 100644
index 75bd44c..0000000
--- a/src/aticursor.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2001 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATICURSOR_H___
-#define ___ATICURSOR_H___ 1
-
-#include "atipriv.h"
-
-#include "screenint.h"
-
-/*
- * Cursor related definitions.
- */
-typedef enum
-{
-    ATI_CURSOR_SOFTWARE,        /* Software cursor */
-    ATI_CURSOR_HARDWARE,        /* Hardware cursor provided by CRTC */
-    ATI_CURSOR_DAC              /* Hardware cursor provided by RAMDAC */
-} ATICursorType;
-
-extern Bool ATIMach64CursorInit(ScreenPtr);
-
-#endif /* ___ATICURSOR_H___ */
diff --git a/src/atidac.c b/src/atidac.c
deleted file mode 100644
index f94e8ad..0000000
--- a/src/atidac.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "ati.h"
-#include "atidac.h"
-#include "atimach64io.h"
-
-/*
- * RAMDAC-related definitions.
- */
-const SymTabRec ATIDACDescriptors[] =
-{   /* Keep this table in ascending DACType order */
-    {ATI_DAC_ATI68830,      "ATI 68830 or similar"},
-    {ATI_DAC_SC11483,       "Sierra 11483 or similar"},
-    {ATI_DAC_ATI68875,      "ATI 68875 or similar"},
-    {ATI_DAC_TVP3026_A,     "TI ViewPoint3026 or similar"},
-    {ATI_DAC_GENERIC,       "Brooktree 476 or similar"},
-    {ATI_DAC_BT481,         "Brooktree 481 or similar"},
-    {ATI_DAC_ATT20C491,     "AT&T 20C491 or similar"},
-    {ATI_DAC_SC15026,       "Sierra 15026 or similar"},
-    {ATI_DAC_MU9C1880,      "Music 9C1880 or similar"},
-    {ATI_DAC_IMSG174,       "Inmos G174 or similar"},
-    {ATI_DAC_ATI68860_B,    "ATI 68860 (Revision B) or similar"},
-    {ATI_DAC_ATI68860_C,    "ATI 68860 (Revision C) or similar"},
-    {ATI_DAC_TVP3026_B,     "TI ViewPoint3026 or similar"},
-    {ATI_DAC_STG1700,       "SGS-Thompson 1700 or similar"},
-    {ATI_DAC_ATT20C498,     "AT&T 20C498 or similar"},
-    {ATI_DAC_STG1702,       "SGS-Thompson 1702 or similar"},
-    {ATI_DAC_SC15021,       "Sierra 15021 or similar"},
-    {ATI_DAC_ATT21C498,     "AT&T 21C498 or similar"},
-    {ATI_DAC_STG1703,       "SGS-Thompson 1703 or similar"},
-    {ATI_DAC_CH8398,        "Chrontel 8398 or similar"},
-    {ATI_DAC_ATT20C408,     "AT&T 20C408 or similar"},
-    {ATI_DAC_INTERNAL,      "Internal"},
-    {ATI_DAC_IBMRGB514,     "IBM RGB 514 or similar"},
-    {ATI_DAC_UNKNOWN,       "Unknown"}          /* Must be last */
-};
-
-#ifndef AVOID_CPIO
-
-/*
- * ATISetDACIOPorts --
- *
- * This function sets up DAC access I/O port numbers.
- */
-void
-ATISetDACIOPorts
-(
-    ATIPtr      pATI,
-    ATICRTCType crtc
-)
-{
-    switch (crtc)
-    {
-        case ATI_CRTC_VGA:
-            pATI->CPIO_DAC_DATA = VGA_DAC_DATA;
-            pATI->CPIO_DAC_MASK = VGA_DAC_MASK;
-            pATI->CPIO_DAC_READ = VGA_DAC_READ;
-            pATI->CPIO_DAC_WRITE = VGA_DAC_WRITE;
-            pATI->CPIO_DAC_WAIT = GENS1(pATI->CPIO_VGABase);
-            break;
-
-        case ATI_CRTC_8514:
-            pATI->CPIO_DAC_DATA = IBM_DAC_DATA;
-            pATI->CPIO_DAC_MASK = IBM_DAC_MASK;
-            pATI->CPIO_DAC_READ = IBM_DAC_READ;
-            pATI->CPIO_DAC_WRITE = IBM_DAC_WRITE;
-            pATI->CPIO_DAC_WAIT = pATI->CPIO_DAC_MASK;
-            break;
-
-        case ATI_CRTC_MACH64:
-            pATI->CPIO_DAC_DATA = ATIIOPort(DAC_REGS) + 1;
-            pATI->CPIO_DAC_MASK = ATIIOPort(DAC_REGS) + 2;
-            pATI->CPIO_DAC_READ = ATIIOPort(DAC_REGS) + 3;
-            pATI->CPIO_DAC_WRITE = ATIIOPort(DAC_REGS) + 0;
-            pATI->CPIO_DAC_WAIT = pATI->CPIOBase;
-            break;
-
-        default:
-            break;
-    }
-}
-
-#endif /* AVOID_CPIO */
-
-/*
- * ATIGetDACCmdReg --
- *
- * Setup to access a RAMDAC's command register.
- */
-CARD8
-ATIGetDACCmdReg
-(
-    ATIPtr pATI
-)
-{
-
-#ifdef AVOID_CPIO
-
-    (void)in8(M64_DAC_WRITE);           /* Reset to PEL mode */
-    (void)in8(M64_DAC_MASK);
-    (void)in8(M64_DAC_MASK);
-    (void)in8(M64_DAC_MASK);
-    return in8(M64_DAC_MASK);
-
-#else /* AVOID_CPIO */
-
-    (void)inb(pATI->CPIO_DAC_WRITE);    /* Reset to PEL mode */
-    (void)inb(pATI->CPIO_DAC_MASK);
-    (void)inb(pATI->CPIO_DAC_MASK);
-    (void)inb(pATI->CPIO_DAC_MASK);
-    return inb(pATI->CPIO_DAC_MASK);
-
-#endif /* AVOID_CPIO */
-
-}
-
-/*
- * ATIDACPreInit --
- *
- * This function initialises the fields in an ATIHWRec that relate to DACs.
- */
-void
-ATIDACPreInit
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    int Index, Index2;
-    CARD8 maxColour = (1 << pATI->rgbBits) - 1;
-
-    pATIHW->dac_read = pATIHW->dac_write = 0x00U;
-    pATIHW->dac_mask = 0xFFU;
-
-    /*
-     * Set colour lookup table.  The first entry has already been zeroed out.
-     */
-    if (pATI->depth > 8)
-        for (Index = 1;  Index < (NumberOf(pATIHW->lut) / 3);  Index++)
-        {
-            Index2 = Index * 3;
-            pATIHW->lut[Index2 + 0] =
-                pATIHW->lut[Index2 + 1] =
-                pATIHW->lut[Index2 + 2] = Index;
-        }
-    else
-    {
-        /*
-         * Initialise hardware colour map so that use of uninitialised
-         * software colour map entries can easily be seen.  For 256-colour
-         * modes, this doesn't remain effective for very long...
-         */
-        pATIHW->lut[3] = pATIHW->lut[4] = pATIHW->lut[5] = 0xFFU;
-        for (Index = 2;  Index < (NumberOf(pATIHW->lut) / 3);  Index++)
-        {
-            Index2 = Index * 3;
-            pATIHW->lut[Index2 + 0] = maxColour;
-            pATIHW->lut[Index2 + 1] = 0x00U;
-            pATIHW->lut[Index2 + 2] = maxColour;
-        }
-    }
-}
-
-/*
- * ATIDACSave --
- *
- * This function is called to save the current RAMDAC state into an ATIHWRec
- * structure occurrence.
- */
-void
-ATIDACSave
-(
-    ATIPtr   pATI,
-    ATIHWPtr pATIHW
-)
-{
-    int Index;
-
-#ifdef AVOID_CPIO
-
-    pATIHW->dac_read = in8(M64_DAC_READ);
-    DACDelay;
-    pATIHW->dac_write = in8(M64_DAC_WRITE);
-    DACDelay;
-    pATIHW->dac_mask = in8(M64_DAC_MASK);
-    DACDelay;
-
-    /* Save DAC's colour lookup table */
-    out8(M64_DAC_MASK, 0xFFU);
-    DACDelay;
-    out8(M64_DAC_READ, 0x00U);
-    DACDelay;
-    for (Index = 0;  Index < NumberOf(pATIHW->lut);  Index++)
-    {
-        pATIHW->lut[Index] = in8(M64_DAC_DATA);
-        DACDelay;
-    }
-
-    out8(M64_DAC_MASK, pATIHW->dac_mask);
-    DACDelay;
-    out8(M64_DAC_READ, pATIHW->dac_read);
-    DACDelay;
-
-#else /* AVOID_CPIO */
-
-    ATISetDACIOPorts(pATI, pATIHW->crtc);
-
-    pATIHW->dac_read = inb(pATI->CPIO_DAC_READ);
-    DACDelay;
-    pATIHW->dac_write = inb(pATI->CPIO_DAC_WRITE);
-    DACDelay;
-    pATIHW->dac_mask = inb(pATI->CPIO_DAC_MASK);
-    DACDelay;
-
-    /* Save DAC's colour lookup table */
-    outb(pATI->CPIO_DAC_MASK, 0xFFU);
-    DACDelay;
-    outb(pATI->CPIO_DAC_READ, 0x00U);
-    DACDelay;
-    for (Index = 0;  Index < NumberOf(pATIHW->lut);  Index++)
-    {
-        pATIHW->lut[Index] = inb(pATI->CPIO_DAC_DATA);
-        DACDelay;
-    }
-
-    outb(pATI->CPIO_DAC_MASK, pATIHW->dac_mask);
-    DACDelay;
-    outb(pATI->CPIO_DAC_READ, pATIHW->dac_read);
-    DACDelay;
-
-#endif /* AVOID_CPIO */
-
-}
-
-/*
- * ATIDACSet --
- *
- * This function loads RAMDAC data from an ATIHWRec structure occurrence.
- */
-void
-ATIDACSet
-(
-    ATIPtr   pATI,
-    ATIHWPtr pATIHW
-)
-{
-    int Index;
-
-#ifdef AVOID_CPIO
-
-    /* Load DAC's colour lookup table */
-    out8(M64_DAC_MASK, 0xFFU);
-    DACDelay;
-    out8(M64_DAC_WRITE, 0x00U);
-    DACDelay;
-    for (Index = 0;  Index < NumberOf(pATIHW->lut);  Index++)
-    {
-        out8(M64_DAC_DATA, pATIHW->lut[Index]);
-        DACDelay;
-    }
-
-    out8(M64_DAC_MASK, pATIHW->dac_mask);
-    DACDelay;
-    out8(M64_DAC_READ, pATIHW->dac_read);
-    DACDelay;
-    out8(M64_DAC_WRITE, pATIHW->dac_write);
-    DACDelay;
-
-#else /* AVOID_CPIO */
-
-    ATISetDACIOPorts(pATI, pATIHW->crtc);
-
-    /* Load DAC's colour lookup table */
-    outb(pATI->CPIO_DAC_MASK, 0xFFU);
-    DACDelay;
-    outb(pATI->CPIO_DAC_WRITE, 0x00U);
-    DACDelay;
-    for (Index = 0;  Index < NumberOf(pATIHW->lut);  Index++)
-    {
-        outb(pATI->CPIO_DAC_DATA, pATIHW->lut[Index]);
-        DACDelay;
-    }
-
-    outb(pATI->CPIO_DAC_MASK, pATIHW->dac_mask);
-    DACDelay;
-    outb(pATI->CPIO_DAC_READ, pATIHW->dac_read);
-    DACDelay;
-    outb(pATI->CPIO_DAC_WRITE, pATIHW->dac_write);
-    DACDelay;
-
-#endif /* AVOID_CPIO */
-
-}
-
-/*
- * ATISetLUTEntry --
- *
- * This function is called to set one of a DAC's LUT entries.
- */
-static void
-ATISetLUTEntry
-(
-    ATIPtr pATI,
-    int    Index,
-    CARD8  *LUTEntry
-)
-{
-#ifdef AVOID_CPIO
-
-    out8(M64_DAC_WRITE, Index);
-    DACDelay;
-    out8(M64_DAC_DATA, LUTEntry[0]);
-    DACDelay;
-    out8(M64_DAC_DATA, LUTEntry[1]);
-    DACDelay;
-    out8(M64_DAC_DATA, LUTEntry[2]);
-    DACDelay;
-
-#else /* AVOID_CPIO */
-
-    outb(pATI->CPIO_DAC_WRITE, Index);
-    DACDelay;
-    outb(pATI->CPIO_DAC_DATA, LUTEntry[0]);
-    DACDelay;
-    outb(pATI->CPIO_DAC_DATA, LUTEntry[1]);
-    DACDelay;
-    outb(pATI->CPIO_DAC_DATA, LUTEntry[2]);
-    DACDelay;
-
-#endif /* AVOID_CPIO */
-}
-
-/*
- * ATILoadPalette --
- *
- * This function updates the RAMDAC's LUT and the in-memory copy of it in
- * NewHW.
- */
-void
-ATILoadPalette
-(
-    ScrnInfoPtr pScreenInfo,
-    int         nColours,
-    int         *Indices,
-    LOCO        *Colours,
-    VisualPtr   pVisual
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-    CARD8  *LUTEntry;
-    int    i, j, Index;
-
-    if (((pVisual->class | DynamicClass) == DirectColor) &&
-        ((1 << pVisual->nplanes) > (SizeOf(pATI->NewHW.lut) / 3)))
-    {
-        int reds = pVisual->redMask >> pVisual->offsetRed;
-        int greens = pVisual->greenMask >> pVisual->offsetGreen;
-        int blues = pVisual->blueMask >> pVisual->offsetBlue;
-
-        int redShift = 8 - pATI->weight.red;
-        int greenShift = 8 - pATI->weight.green;
-        int blueShift = 8 - pATI->weight.blue;
-
-        int redMult = 3 << redShift;
-        int greenMult = 3 << greenShift;
-        int blueMult = 3 << blueShift;
-
-        int minShift;
-
-        CARD8 fChanged[SizeOf(pATI->NewHW.lut) / 3];
-
-        (void)memset(fChanged, 0, SizeOf(fChanged));
-
-        minShift = redShift;
-        if (minShift > greenShift)
-            minShift = greenShift;
-        if (minShift > blueShift)
-            minShift = blueShift;
-
-        for (i = 0;  i < nColours;  i++)
-        {
-            if((Index = Indices[i]) < 0)
-                continue;
-
-            if (Index <= reds)
-            {
-                j = Index * redMult;
-                pATI->NewHW.lut[j + 0] = Colours[Index].red;
-                fChanged[j / 3] = TRUE;
-            }
-            if (Index <= greens)
-            {
-                j = Index * greenMult;
-                pATI->NewHW.lut[j + 1] = Colours[Index].green;
-                fChanged[j / 3] = TRUE;
-            }
-            if (Index <= blues)
-            {
-                j = Index * blueMult;
-                pATI->NewHW.lut[j + 2] = Colours[Index].blue;
-                fChanged[j / 3] = TRUE;
-            }
-        }
-
-        if (pScreenInfo->vtSema || pATI->currentMode)
-        {
-            /* Rewrite LUT entries that could have been changed */
-            i = 1 << minShift;
-            LUTEntry = pATI->NewHW.lut;
-
-            for (Index = 0;
-                 Index < (SizeOf(pATI->NewHW.lut) / 3);
-                 Index += i, LUTEntry += i * 3)
-                if (fChanged[Index])
-                    ATISetLUTEntry(pATI, Index, LUTEntry);
-        }
-    }
-    else
-    {
-        for (i = 0;  i < nColours;  i++)
-        {
-            Index = Indices[i];
-            if ((Index < 0) || (Index >= (SizeOf(pATI->NewHW.lut) / 3)))
-                continue;
-
-            LUTEntry = &pATI->NewHW.lut[Index * 3];
-            LUTEntry[0] = Colours[Index].red;
-            LUTEntry[1] = Colours[Index].green;
-            LUTEntry[2] = Colours[Index].blue;
-
-            if (pScreenInfo->vtSema || pATI->currentMode)
-                ATISetLUTEntry(pATI, Index, LUTEntry);
-        }
-    }
-}
diff --git a/src/atidac.h b/src/atidac.h
deleted file mode 100644
index ed0198c..0000000
--- a/src/atidac.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIDAC_H___
-
-#if !defined(___ATI_H___) && defined(XFree86Module)
-# error missing #include "ati.h" before #include "atidac.h"
-# undef XFree86Module
-#endif
-
-#define ___ATIDAC_H___ 1
-
-#include "aticrtc.h"
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-#include "colormapst.h"
-
-/*
- * RAMDAC-related definitions.
- */
-#define ATI_DAC_MAX_TYPE         MaxBits(DACTYPE)
-#define ATI_DAC_MAX_SUBTYPE      MaxBits(BIOS_INIT_DAC_SUBTYPE)
-
-#define ATI_DAC(_Type, _Subtype) (((_Type) << 4) | (_Subtype))
-
-#define ATI_DAC_ATI68830         ATI_DAC(0x0U, 0x0U)
-#define ATI_DAC_SC11483          ATI_DAC(0x1U, 0x0U)
-#define ATI_DAC_ATI68875         ATI_DAC(0x2U, 0x0U)
-#define ATI_DAC_TVP3026_A        ATI_DAC(0x2U, 0x7U)
-#define ATI_DAC_GENERIC          ATI_DAC(0x3U, 0x0U)
-#define ATI_DAC_BT481            ATI_DAC(0x4U, 0x0U)
-#define ATI_DAC_ATT20C491        ATI_DAC(0x4U, 0x1U)
-#define ATI_DAC_SC15026          ATI_DAC(0x4U, 0x2U)
-#define ATI_DAC_MU9C1880         ATI_DAC(0x4U, 0x3U)
-#define ATI_DAC_IMSG174          ATI_DAC(0x4U, 0x4U)
-#define ATI_DAC_ATI68860_B       ATI_DAC(0x5U, 0x0U)
-#define ATI_DAC_ATI68860_C       ATI_DAC(0x5U, 0x1U)
-#define ATI_DAC_TVP3026_B        ATI_DAC(0x5U, 0x7U)
-#define ATI_DAC_STG1700          ATI_DAC(0x6U, 0x0U)
-#define ATI_DAC_ATT20C498        ATI_DAC(0x6U, 0x1U)
-#define ATI_DAC_STG1702          ATI_DAC(0x7U, 0x0U)
-#define ATI_DAC_SC15021          ATI_DAC(0x7U, 0x1U)
-#define ATI_DAC_ATT21C498        ATI_DAC(0x7U, 0x2U)
-#define ATI_DAC_STG1703          ATI_DAC(0x7U, 0x3U)
-#define ATI_DAC_CH8398           ATI_DAC(0x7U, 0x4U)
-#define ATI_DAC_ATT20C408        ATI_DAC(0x7U, 0x5U)
-#define ATI_DAC_INTERNAL         ATI_DAC(0x8U, 0x0U)
-#define ATI_DAC_IBMRGB514        ATI_DAC(0x9U, 0x0U)
-#define ATI_DAC_UNKNOWN          ATI_DAC((ATI_DAC_MAX_TYPE << 2) + 3, \
-                                         ATI_DAC_MAX_SUBTYPE)
-extern const SymTabRec ATIDACDescriptors[];
-
-#ifdef AVOID_CPIO
-
-#   define DACDelay     /* Nothing */
-
-#else /* AVOID_CPIO */
-
-#   define DACDelay                         \
-        do                                  \
-        {                                   \
-            (void)inb(pATI->CPIO_DAC_WAIT); \
-            (void)inb(pATI->CPIO_DAC_WAIT); \
-        } while (0)
-
-    extern void ATISetDACIOPorts(ATIPtr, ATICRTCType);
-
-#endif /* AVOID_CPIO */
-
-extern CARD8 ATIGetDACCmdReg(ATIPtr);
-
-extern void ATIDACPreInit(ScrnInfoPtr, ATIPtr, ATIHWPtr);
-extern void ATIDACSave(ATIPtr, ATIHWPtr);
-extern void ATIDACSet(ATIPtr, ATIHWPtr);
-
-extern void ATILoadPalette(ScrnInfoPtr, int, int *, LOCO *, VisualPtr);
-
-#endif /* ___ATIDAC_H___ */
diff --git a/src/atidecoder.c b/src/atidecoder.c
deleted file mode 100644
index 6419fbc..0000000
--- a/src/atidecoder.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "atidecoder.h"
-
-/*
- * Video decoder definitions.
- */
-const char *ATIDecoderNames[] =
-{
-    "No decoder",
-    "BrookTree BT819",
-    "Brooktree BT829",
-    "Brooktree BT829A",
-    "Philips SA7111",
-    "Philips SA7112",
-    "ATI Rage Theater",
-    "Unknown type (7)",
-    "Unknown type (8)",
-    "Unknown type (9)",
-    "Unknown type (10)",
-    "Unknown type (11)",
-    "Unknown type (12)",
-    "Unknown type (13)",
-    "Unknown type (14)",
-    "Unknown type (15)"
-};
diff --git a/src/atidecoder.h b/src/atidecoder.h
deleted file mode 100644
index 6ade55b..0000000
--- a/src/atidecoder.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2003 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIDECODER_H___
-#define ___ATIDECODER_H___ 1
-
-/*
- * Video decoder definitions.
- */
-typedef enum
-{
-    ATI_DECODER_NONE,
-    ATI_DECODER_BT819,
-    ATI_DECODER_BT829,
-    ATI_DECODER_BT829A,
-    ATI_DECODER_SA7111,
-    ATI_DECODER_SA7112,
-    ATI_DECODER_THEATER,
-    ATI_DECODER_7,
-    ATI_DECODER_8,
-    ATI_DECODER_9,
-    ATI_DECODER_10,
-    ATI_DECODER_11,
-    ATI_DECODER_12,
-    ATI_DECODER_13,
-    ATI_DECODER_14,
-    ATI_DECODER_15
-} ATIDecoderType;
-
-extern const char *ATIDecoderNames[];
-
-#endif /* ___ATIDECODER_H___ */
diff --git a/src/atidga.c b/src/atidga.c
deleted file mode 100644
index fb6d1d7..0000000
--- a/src/atidga.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifndef AVOID_DGA
-
-#include <string.h>
-
-#include "ati.h"
-#include "atiadjust.h"
-#include "atichip.h"
-#include "atidac.h"
-#include "atidga.h"
-#include "atimode.h"
-#include "atistruct.h"
-
-#include "dgaproc.h"
-
-/*
- * ATIDGAOpenFramebuffer --
- *
- * This function returns various framebuffer attributes to a DGA client.
- */
-static Bool
-ATIDGAOpenFramebuffer
-(
-    ScrnInfoPtr   pScreenInfo,
-    char          **DeviceName,
-    unsigned char **ApertureBase,
-    int           *ApertureSize,
-    int           *ApertureOffset,
-    int           *flags
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    *DeviceName = NULL;         /* No special device */
-    *ApertureBase = (unsigned char *)(pATI->LinearBase);
-    *ApertureSize = pScreenInfo->videoRam * 1024;
-    *ApertureOffset = 0;        /* Always */
-    *flags = 0;                 /* Root premissions OS-dependent */
-
-    return TRUE;
-}
-
-static int
-BitsSet
-(
-    unsigned long data
-)
-{
-    unsigned long mask = 1;
-    int           set  = 0;
-
-    for (;  mask;  mask <<= 1)
-        if (data & mask)
-            set++;
-
-    return set;
-}
-
-/*
- * ATIDGASetMode --
- *
- * This function sets a graphics mode for a DGA client.
- */
-static Bool
-ATIDGASetMode
-(
-    ScrnInfoPtr pScreenInfo,
-    DGAModePtr  pDGAMode
-)
-{
-    ATIPtr         pATI    = ATIPTR(pScreenInfo);
-    DisplayModePtr pMode;
-    int            iScreen = pScreenInfo->scrnIndex;
-    int            frameX0, frameY0;
-
-    if (pDGAMode)
-    {
-        pMode = pDGAMode->mode;
-        pATI->depth = pDGAMode->depth;
-        pATI->bitsPerPixel = pDGAMode->bitsPerPixel;
-        pATI->displayWidth =
-            pDGAMode->bytesPerScanline * 8 / pATI->bitsPerPixel;
-        pATI->weight.red = BitsSet(pDGAMode->red_mask);
-        pATI->weight.green = BitsSet(pDGAMode->green_mask);
-        pATI->weight.blue = BitsSet(pDGAMode->blue_mask);
-        frameX0 = frameY0 = 0;
-        if (!pATI->currentMode)
-            pATI->currentMode = pScreenInfo->currentMode;
-    }
-    else
-    {
-        if (!(pMode = pATI->currentMode))
-            return TRUE;
-
-        pATI->depth = pScreenInfo->depth;
-        pATI->bitsPerPixel = pScreenInfo->bitsPerPixel;
-        pATI->displayWidth = pScreenInfo->displayWidth;
-        pATI->weight = pScreenInfo->weight;
-        frameX0 = pScreenInfo->frameX0;
-        frameY0 = pScreenInfo->frameY0;
-    }
-
-    pATI->XModifier = pATI->bitsPerPixel / UnitOf(pATI->bitsPerPixel);
-    ATIAdjustPreInit(pATI);
-    ATIModePreInit(pScreenInfo, pATI, &pATI->NewHW);
-
-    if (!(*pScreenInfo->SwitchMode)(iScreen, pMode, 0))
-        return FALSE;
-    if (!pDGAMode)
-        pATI->currentMode = NULL;
-    (*pScreenInfo->AdjustFrame)(iScreen, frameX0, frameY0, 0);
-
-    return TRUE;
-}
-
-/*
- * ATIDGASetViewport --
- *
- * This function sets the display start address for a DGA client.
- */
-static void
-ATIDGASetViewport
-(
-    ScrnInfoPtr pScreenInfo,
-    int         x,
-    int         y,
-    int         flags
-)
-{
-    (*pScreenInfo->AdjustFrame)(pScreenInfo->pScreen->myNum, x, y, flags);
-}
-
-/*
- * ATIDGAGetViewport --
- *
- * This function returns the current status of prior DGA requests to set the
- * adapter's display start address.
- */
-static int
-ATIDGAGetViewport
-(
-    ScrnInfoPtr pScreenInfo
-)
-{
-    return 0;   /* There are never any pending requests */
-}
-
-/*
- * ATIDGAFillRect --
- *
- * This function calls XAA solid fill primitives to fill a rectangle.
- */
-static void
-ATIDGAFillRect
-(
-    ScrnInfoPtr   pScreenInfo,
-    int           x,
-    int           y,
-    int           w,
-    int           h,
-    unsigned long colour
-)
-{
-    ATIPtr        pATI     = ATIPTR(pScreenInfo);
-/*FIXME : use EXA if available */
-#ifdef USE_XAA
-    XAAInfoRecPtr pXAAInfo = pATI->pXAAInfo;
-
-    (*pXAAInfo->SetupForSolidFill)(pScreenInfo, (int)colour, GXcopy,
-                                   (CARD32)(~0));
-    (*pXAAInfo->SubsequentSolidFillRect)(pScreenInfo, x, y, w, h);
-
-    if (pScreenInfo->bitsPerPixel == pATI->bitsPerPixel)
-        SET_SYNC_FLAG(pXAAInfo);
-#endif
-}
-
-/*
- * ATIDGABlitRect --
- *
- * This function calls XAA screen-to-screen copy primitives to copy a
- * rectangle.
- */
-static void
-ATIDGABlitRect
-(
-    ScrnInfoPtr pScreenInfo,
-    int         xSrc,
-    int         ySrc,
-    int         w,
-    int         h,
-    int         xDst,
-    int         yDst
-)
-{
-    ATIPtr        pATI     = ATIPTR(pScreenInfo);
-/*FIXME : use EXA if available */
-#ifdef USE_XAA
-    XAAInfoRecPtr pXAAInfo = pATI->pXAAInfo;
-    int           xdir     = ((xSrc < xDst) && (ySrc == yDst)) ? -1 : 1;
-    int           ydir     = (ySrc < yDst) ? -1 : 1;
-
-    (*pXAAInfo->SetupForScreenToScreenCopy)(pScreenInfo,
-        xdir, ydir, GXcopy, (CARD32)(~0), -1);
-    (*pXAAInfo->SubsequentScreenToScreenCopy)(pScreenInfo,
-        xSrc, ySrc, xDst, yDst, w, h);
-
-    if (pScreenInfo->bitsPerPixel == pATI->bitsPerPixel)
-        SET_SYNC_FLAG(pXAAInfo);
-#endif
-}
-
-/*
- * ATIDGABlitTransRect --
- *
- * This function calls XAA screen-to-screen copy primitives to transparently
- * copy a rectangle.
- */
-static void
-ATIDGABlitTransRect
-(
-    ScrnInfoPtr   pScreenInfo,
-    int           xSrc,
-    int           ySrc,
-    int           w,
-    int           h,
-    int           xDst,
-    int           yDst,
-    unsigned long colour
-)
-{
-    ATIPtr        pATI     = ATIPTR(pScreenInfo);
-/*FIXME : use EXA if available */
-#ifdef USE_XAA
-    XAAInfoRecPtr pXAAInfo = pATI->pXAAInfo;
-    int           xdir     = ((xSrc < xDst) && (ySrc == yDst)) ? -1 : 1;
-    int           ydir     = (ySrc < yDst) ? -1 : 1;
-
-    pATI->XAAForceTransBlit = TRUE;
-
-    (*pXAAInfo->SetupForScreenToScreenCopy)(pScreenInfo,
-        xdir, ydir, GXcopy, (CARD32)(~0), (int)colour);
-
-    pATI->XAAForceTransBlit = FALSE;
-
-    (*pXAAInfo->SubsequentScreenToScreenCopy)(pScreenInfo,
-        xSrc, ySrc, xDst, yDst, w, h);
-
-    if (pScreenInfo->bitsPerPixel == pATI->bitsPerPixel)
-        SET_SYNC_FLAG(pXAAInfo);
-#endif
-}
-
-/*
- * ATIDGAAddModes --
- *
- * This function translates DisplayModeRec's into DGAModeRec's.
- */
-static void
-ATIDGAAddModes
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    int         flags,
-    int         depth,
-    int         bitsPerPixel,
-    int         redMask,
-    int         greenMask,
-    int         blueMask,
-    int         visualClass
-)
-{
-    DisplayModePtr pMode         = pScreenInfo->modes;
-    DGAModePtr     pDGAMode;
-    int            displayWidth  = pScreenInfo->displayWidth;
-    int            videoBits     = pScreenInfo->videoRam * 1024 * 8;
-    int            xViewportStep = 64 / UnitOf(bitsPerPixel);
-    int            modePitch, bitsPerScanline, maxViewportY;
-
-    if (bitsPerPixel != pScreenInfo->bitsPerPixel)
-        displayWidth = 0;
-
-    while (1)
-    {
-        /* Weed out multiscanned modes */
-        if ((pMode->VScan <= 1) ||
-            ((pMode->VScan == 2) && !(pMode->Flags & V_DBLSCAN)))
-        {
-            /*
-             * For code simplicity, ensure DGA mode pitch is a multiple of 64
-             * bytes.
-             */
-            if (!(modePitch = displayWidth))
-            {
-                modePitch = ((64 * 8) / UnitOf(bitsPerPixel)) - 1;
-                modePitch = (pMode->HDisplay + modePitch) & ~modePitch;
-            }
-
-            /* Ensure the mode fits in video memory */
-            if ((modePitch * bitsPerPixel * pMode->VDisplay) <= videoBits)
-            {
-                /* Stop generating modes on out-of-memory conditions */
-                pDGAMode = xrealloc(pATI->pDGAMode,
-                    (pATI->nDGAMode + 1) * SizeOf(DGAModeRec));
-                if (!pDGAMode)
-                    break;
-
-                pATI->pDGAMode = pDGAMode;
-                pDGAMode += pATI->nDGAMode;
-                pATI->nDGAMode++;
-                (void)memset(pDGAMode, 0, SizeOf(DGAModeRec));
-
-                /* Fill in the mode structure */
-                pDGAMode->mode = pMode;
-                pDGAMode->flags = flags;
-                if (bitsPerPixel == pScreenInfo->bitsPerPixel)
-                {
-                    pDGAMode->flags |= DGA_PIXMAP_AVAILABLE;
-                    pDGAMode->address = pATI->pMemory;
-
-#ifdef USE_XAA
-                    if (pATI->pXAAInfo)
-                        pDGAMode->flags &= ~DGA_CONCURRENT_ACCESS;
-#endif
-                }
-                if ((pMode->Flags & V_DBLSCAN) || (pMode->VScan > 1))
-                    pDGAMode->flags |= DGA_DOUBLESCAN;
-                if (pMode->Flags & V_INTERLACE)
-                    pDGAMode->flags |= DGA_INTERLACED;
-
-                pDGAMode->byteOrder = pScreenInfo->imageByteOrder;
-                pDGAMode->depth = depth;
-                pDGAMode->bitsPerPixel = bitsPerPixel;
-                pDGAMode->red_mask = redMask;
-                pDGAMode->green_mask = greenMask;
-                pDGAMode->blue_mask = blueMask;
-                pDGAMode->visualClass = visualClass;
-
-                pDGAMode->viewportWidth = pMode->HDisplay;
-                pDGAMode->viewportHeight = pMode->VDisplay;
-                pDGAMode->xViewportStep = xViewportStep;
-                pDGAMode->yViewportStep = 1;
-
-                bitsPerScanline = modePitch * bitsPerPixel;
-                pDGAMode->bytesPerScanline = bitsPerScanline / 8;
-                pDGAMode->imageWidth = pDGAMode->pixmapWidth = modePitch;
-                pDGAMode->imageHeight = pDGAMode->pixmapHeight =
-                    videoBits / bitsPerScanline;
-
-                pDGAMode->maxViewportX =
-                    pDGAMode->imageWidth - pDGAMode->viewportWidth;
-                pDGAMode->maxViewportY =
-                    pDGAMode->imageHeight - pDGAMode->viewportHeight;
-                maxViewportY =
-                    ((((pATI->AdjustMaxBase * 8) / bitsPerPixel) +
-                      xViewportStep) / modePitch) - 1;
-                if (maxViewportY < pDGAMode->maxViewportY)
-                    pDGAMode->maxViewportY = maxViewportY;
-            }
-        }
-
-        if ((pMode = pMode->next) == pScreenInfo->modes)
-        {
-            if (!displayWidth)
-                break;
-
-            displayWidth = 0;
-        }
-    }
-}
-
-/*
- * ATIDGAInit --
- *
- * This function initialises the driver's support for the DGA extension.
- */
-Bool
-ATIDGAInit
-(
-    ScreenPtr   pScreen,
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI
-)
-{
-#ifdef USE_XAA
-    XAAInfoRecPtr pXAAInfo;
-#endif
-    int           flags;
-
-    if (!pATI->nDGAMode)
-    {
-        /* Set up DGA callbacks */
-        pATI->ATIDGAFunctions.OpenFramebuffer = ATIDGAOpenFramebuffer;
-        pATI->ATIDGAFunctions.SetMode         = ATIDGASetMode;
-        pATI->ATIDGAFunctions.SetViewport     = ATIDGASetViewport;
-        pATI->ATIDGAFunctions.GetViewport     = ATIDGAGetViewport;
-
-        flags = 0;
-#ifdef USE_XAA
-        if ((pXAAInfo = pATI->pXAAInfo))
-        {
-            pATI->ATIDGAFunctions.Sync = pXAAInfo->Sync;
-            if (pXAAInfo->SetupForSolidFill &&
-                pXAAInfo->SubsequentSolidFillRect)
-            {
-                flags |= DGA_FILL_RECT;
-                pATI->ATIDGAFunctions.FillRect = ATIDGAFillRect;
-            }
-            if (pXAAInfo->SetupForScreenToScreenCopy &&
-                pXAAInfo->SubsequentScreenToScreenCopy)
-            {
-                flags |= DGA_BLIT_RECT | DGA_BLIT_RECT_TRANS;
-                pATI->ATIDGAFunctions.BlitRect      = ATIDGABlitRect;
-                pATI->ATIDGAFunctions.BlitTransRect = ATIDGABlitTransRect;
-            }
-        }
-#endif
-        if (!flags)
-            flags = DGA_CONCURRENT_ACCESS;
-
-        ATIDGAAddModes(pScreenInfo, pATI, flags,
-            8, 8, 0, 0, 0, PseudoColor);
-
-        if ((pATI->Chip >= ATI_CHIP_264CT))
-        {
-            ATIDGAAddModes(pScreenInfo, pATI, flags,
-                15, 16, 0x7C00U, 0x03E0U, 0x001FU, TrueColor);
-
-            ATIDGAAddModes(pScreenInfo, pATI, flags,
-                16, 16, 0xF800U, 0x07E0U, 0x001FU, TrueColor);
-
-            ATIDGAAddModes(pScreenInfo, pATI, flags,
-                24, 24, 0x00FF0000U, 0x0000FF00U, 0x000000FFU, TrueColor);
-
-            ATIDGAAddModes(pScreenInfo, pATI, flags,
-                24, 32, 0x00FF0000U, 0x0000FF00U, 0x000000FFU, TrueColor);
-
-            if (pATI->DAC != ATI_DAC_INTERNAL)      /* Not first revision */
-            {
-                ATIDGAAddModes(pScreenInfo, pATI, flags,
-                    15, 16, 0x7C00U, 0x03E0U, 0x001FU, DirectColor);
-
-                ATIDGAAddModes(pScreenInfo, pATI, flags,
-                    16, 16, 0xF800U, 0x07E0U, 0x001FU, DirectColor);
-
-                ATIDGAAddModes(pScreenInfo, pATI, flags,
-                    24, 24, 0x00FF0000U, 0x0000FF00U, 0x000000FFU, DirectColor);
-
-                ATIDGAAddModes(pScreenInfo, pATI, flags,
-                    24, 32, 0x00FF0000U, 0x0000FF00U, 0x000000FFU, DirectColor);
-            }
-        }
-    }
-
-    return DGAInit(pScreen, &pATI->ATIDGAFunctions, pATI->pDGAMode,
-                   pATI->nDGAMode);
-}
-
-#endif /* AVOID_DGA */
diff --git a/src/atidga.h b/src/atidga.h
deleted file mode 100644
index bfc53f4..0000000
--- a/src/atidga.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIDGA_H___
-#define ___ATIDGA_H___ 1
-
-#ifndef AVOID_DGA
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-extern Bool ATIDGAInit(ScreenPtr, ScrnInfoPtr, ATIPtr);
-
-#endif /* AVOID_DGA */
-
-#endif /* ___ATIDGA_H___ */
diff --git a/src/atidri.c b/src/atidri.c
deleted file mode 100644
index 15d0014..0000000
--- a/src/atidri.c
+++ /dev/null
@@ -1,1640 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * GARETH HUGHES BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-/*
- * Authors:
- *   Gareth Hughes <gareth at valinux.com>
- *   Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#include <string.h>
-#include <stdio.h>
-#include <unistd.h>
-
-/* Driver data structures */
-#include "ati.h"
-#include "atibus.h"
-#include "atidri.h"
-#include "atiregs.h"
-#include "atistruct.h"
-
-#include "atimach64io.h"
-#include "atimach64version.h"
-#include "mach64_dri.h"
-#include "mach64_common.h"
-#include "mach64_sarea.h"
-
-/* X and server generic header files */
-#include "xf86.h"
-#include "windowstr.h"
-
-/* GLX/DRI/DRM definitions */
-#define _XF86DRI_SERVER_
-#include "GL/glxtokens.h"
-#include "sarea.h"
-
-static char ATIKernelDriverName[] = "mach64";
-static char ATIClientDriverName[] = "mach64";
-
-/* Initialize the visual configs that are supported by the hardware.
- * These are combined with the visual configs that the indirect
- * rendering core supports, and the intersection is exported to the
- * client.
- */
-static Bool ATIInitVisualConfigs( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   int numConfigs = 0;
-   __GLXvisualConfig *pConfigs = NULL;
-   ATIConfigPrivPtr pATIConfigs = NULL;
-   ATIConfigPrivPtr *pATIConfigPtrs = NULL;
-   int i, accum, stencil, db;
-
-   switch ( pATI->bitsPerPixel ) {
-   case 8:  /* 8bpp mode is not support */
-   case 15: /* FIXME */
-   case 24: /* FIXME */
-      xf86DrvMsg(pScreen->myNum, X_ERROR,
-		 "[dri] ATIInitVisualConfigs failed (%d bpp not supported).  "
-		 "Disabling DRI.\n", pATI->bitsPerPixel);
-      return FALSE;
-
-#define ATI_USE_ACCUM   1
-#define ATI_USE_STENCIL 1
-
-   case 16:
-
-      if ( pATI->depth != 16) {
-	 xf86DrvMsg(pScreen->myNum, X_ERROR,
-		    "[dri] ATIInitVisualConfigs failed (depth %d at 16 bpp not supported).  "
-		     "Disabling DRI.\n", pATI->depth);
-	 return FALSE;
-      }
-
-      numConfigs = 1;
-      if ( ATI_USE_ACCUM )   numConfigs *= 2;
-      if ( ATI_USE_STENCIL ) numConfigs *= 2;
-      numConfigs *= 2; /* single- and double-buffered */
-
-      pConfigs = (__GLXvisualConfig*)
-	 xnfcalloc( sizeof(__GLXvisualConfig), numConfigs );
-      if ( !pConfigs ) {
-	 return FALSE;
-      }
-      pATIConfigs = (ATIConfigPrivPtr)
-	 xnfcalloc( sizeof(ATIConfigPrivRec), numConfigs );
-      if ( !pATIConfigs ) {
-	 xfree( pConfigs );
-	 return FALSE;
-      }
-      pATIConfigPtrs = (ATIConfigPrivPtr*)
-	 xnfcalloc( sizeof(ATIConfigPrivPtr), numConfigs );
-      if ( !pATIConfigPtrs ) {
-	 xfree( pConfigs );
-	 xfree( pATIConfigs );
-	 return FALSE;
-      }
-
-      i = 0;
-      for (db = 1; db >= 0; db--) {
-	 for ( accum = 0 ; accum <= ATI_USE_ACCUM ; accum++ ) {
-	    for ( stencil = 0 ; stencil <= ATI_USE_STENCIL ; stencil++ ) {
-	       pATIConfigPtrs[i] = &pATIConfigs[i];
-
-	       pConfigs[i].vid			= -1;
-	       pConfigs[i].class		= -1;
-	       pConfigs[i].rgba			= TRUE;
-	       pConfigs[i].redSize		= 5;
-	       pConfigs[i].greenSize		= 6;
-	       pConfigs[i].blueSize		= 5;
-	       pConfigs[i].alphaSize		= 0;
-	       pConfigs[i].redMask		= 0x0000F800;
-	       pConfigs[i].greenMask		= 0x000007E0;
-	       pConfigs[i].blueMask		= 0x0000001F;
-	       pConfigs[i].alphaMask		= 0x00000000;
-	       if ( accum ) {	/* Simulated in software */
-		  pConfigs[i].accumRedSize	= 16;
-		  pConfigs[i].accumGreenSize	= 16;
-		  pConfigs[i].accumBlueSize	= 16;
-		  pConfigs[i].accumAlphaSize	= 0;
-	       } else {
-		  pConfigs[i].accumRedSize	= 0;
-		  pConfigs[i].accumGreenSize	= 0;
-		  pConfigs[i].accumBlueSize	= 0;
-		  pConfigs[i].accumAlphaSize	= 0;
-	       }
-	       pConfigs[i].doubleBuffer		= db ? TRUE : FALSE;
-	       pConfigs[i].stereo		= FALSE;
-	       pConfigs[i].bufferSize		= 16;
-	       pConfigs[i].depthSize		= 16;
-	       if ( stencil ) {	/* Simulated in software */
-		  pConfigs[i].stencilSize	= 8;
-	       } else {
-		  pConfigs[i].stencilSize	= 0;
-	       }
-	       pConfigs[i].auxBuffers		= 0;
-	       pConfigs[i].level		= 0;
-	       if ( accum || stencil ) {
-		  pConfigs[i].visualRating	= GLX_SLOW_CONFIG;
-	       } else {
-		  pConfigs[i].visualRating	= GLX_NONE;
-	       }
-	       pConfigs[i].transparentPixel	= GLX_NONE;
-	       pConfigs[i].transparentRed	= 0;
-	       pConfigs[i].transparentGreen	= 0;
-	       pConfigs[i].transparentBlue	= 0;
-	       pConfigs[i].transparentAlpha	= 0;
-	       pConfigs[i].transparentIndex	= 0;
-	       i++;
-	    }
-	 }
-      }
-      break;
-
-   case 32:
-      numConfigs = 1;
-      if ( ATI_USE_ACCUM )   numConfigs *= 2;
-      if ( ATI_USE_STENCIL ) numConfigs *= 2;
-      numConfigs *= 2; /* single- and double-buffered */
-
-      pConfigs = (__GLXvisualConfig*)
-	 xnfcalloc( sizeof(__GLXvisualConfig), numConfigs );
-      if ( !pConfigs ) {
-	 return FALSE;
-      }
-      pATIConfigs = (ATIConfigPrivPtr)
-	 xnfcalloc( sizeof(ATIConfigPrivRec), numConfigs );
-      if ( !pATIConfigs ) {
-	 xfree( pConfigs );
-	 return FALSE;
-      }
-      pATIConfigPtrs = (ATIConfigPrivPtr*)
-	 xnfcalloc( sizeof(ATIConfigPrivPtr), numConfigs );
-      if ( !pATIConfigPtrs ) {
-	 xfree( pConfigs );
-	 xfree( pATIConfigs );
-	 return FALSE;
-      }
-
-      i = 0;
-      for (db = 1; db >= 0; db--) {
-	 for ( accum = 0 ; accum <= ATI_USE_ACCUM ; accum++ ) {
-	    for ( stencil = 0 ; stencil <= ATI_USE_STENCIL ; stencil++ ) {
-	       pATIConfigPtrs[i] = &pATIConfigs[i];
-
-	       pConfigs[i].vid			= -1;
-	       pConfigs[i].class		= -1;
-	       pConfigs[i].rgba			= TRUE;
-	       pConfigs[i].redSize		= 8;
-	       pConfigs[i].greenSize		= 8;
-	       pConfigs[i].blueSize		= 8;
-	       pConfigs[i].alphaSize		= 0;
-	       pConfigs[i].redMask		= 0x00FF0000;
-	       pConfigs[i].greenMask		= 0x0000FF00;
-	       pConfigs[i].blueMask		= 0x000000FF;
-	       pConfigs[i].alphaMask		= 0x00000000;
-	       if ( accum ) {	/* Simulated in software */
-		  pConfigs[i].accumRedSize	= 16;
-		  pConfigs[i].accumGreenSize	= 16;
-		  pConfigs[i].accumBlueSize	= 16;
-		  pConfigs[i].accumAlphaSize	= 0;
-	       } else {
-		  pConfigs[i].accumRedSize	= 0;
-		  pConfigs[i].accumGreenSize	= 0;
-		  pConfigs[i].accumBlueSize	= 0;
-		  pConfigs[i].accumAlphaSize	= 0;
-	       }
-	       pConfigs[i].doubleBuffer		= db ? TRUE : FALSE;
-	       pConfigs[i].stereo		= FALSE;
-	       pConfigs[i].bufferSize		= 24;
-	       if ( stencil ) {	/* Simulated in software */
-		  pConfigs[i].depthSize		= 16;
-		  pConfigs[i].stencilSize	= 8;
-	       } else {
-		  pConfigs[i].depthSize		= 16;
-		  pConfigs[i].stencilSize	= 0;
-	    }
-	       pConfigs[i].auxBuffers		= 0;
-	       pConfigs[i].level		= 0;
-	       if ( accum || stencil ) {
-		  pConfigs[i].visualRating	= GLX_SLOW_CONFIG;
-	       } else {
-		  pConfigs[i].visualRating	= GLX_NONE;
-	    }
-	       pConfigs[i].transparentPixel	= GLX_NONE;
-	       pConfigs[i].transparentRed	= 0;
-	       pConfigs[i].transparentGreen	= 0;
-	       pConfigs[i].transparentBlue	= 0;
-	       pConfigs[i].transparentAlpha	= 0;
-	       pConfigs[i].transparentIndex	= 0;
-	       i++;
-	    }
-	 }
-      }
-      break;
-   }
-
-   pATI->numVisualConfigs = numConfigs;
-   pATI->pVisualConfigs = pConfigs;
-   pATI->pVisualConfigsPriv = pATIConfigs;
-   GlxSetVisualConfigs( numConfigs, pConfigs, (void**)pATIConfigPtrs );
-   return TRUE;
-}
-
-/* Create the ATI-specific context information */
-static Bool ATICreateContext( ScreenPtr pScreen, VisualPtr visual,
-			      drm_context_t hwContext, void *pVisualConfigPriv,
-			      DRIContextType contextStore )
-{
-   /* Nothing yet */
-   return TRUE;
-}
-
-/* Destroy the ATI-specific context information */
-static void ATIDestroyContext( ScreenPtr pScreen, drm_context_t hwContext,
-			       DRIContextType contextStore )
-{
-   /* Nothing yet */
-}
-
-/* Called when the X server is woken up to allow the last client's
- * context to be saved and the X server's context to be loaded.
- * The client detects when it's context is not currently loaded and 
- * then loads it itself.  The X server's context is loaded in the
- * XAA Sync callback if NeedDRISync is set.
- */
-static void ATIEnterServer( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-
-   if ( pATI->directRenderingEnabled ) { 
-      ATIDRIMarkSyncInt(pScreenInfo);
-      ATIDRIMarkSyncExt(pScreenInfo);
-   }
-}
-
-/* Called when the X server goes to sleep to allow the X server's
- * context to be saved and the last client's context to be loaded.
- * The client detects when it's context is not currently loaded and 
- * then loads it itself.  The X server keeps track of it's own state.
- */
-static void ATILeaveServer( ScreenPtr pScreen )
-{
-   /* Nothing yet */
-}
-
-/* Contexts can be swapped by the X server if necessary.  This callback
- * is currently only used to perform any functions necessary when
- * entering or leaving the X server, and in the future might not be
- * necessary.
- */
-static void ATIDRISwapContext( ScreenPtr pScreen,
-			       DRISyncType syncType,
-			       DRIContextType oldContextType,
-			       void *oldContext,
-			       DRIContextType newContextType,
-			       void *newContext )
-{
-   if ( ( syncType == DRI_3D_SYNC ) && ( oldContextType == DRI_2D_CONTEXT ) &&
-	( newContextType == DRI_2D_CONTEXT ) ) {
-      /* Entering from Wakeup */
-      ATIEnterServer( pScreen );
-   }
-   if ( ( syncType == DRI_2D_SYNC ) && ( oldContextType == DRI_NO_CONTEXT ) &&
-	( newContextType == DRI_2D_CONTEXT ) ) {
-      /* Exiting from Block Handler */
-      ATILeaveServer( pScreen );
-   }
-}
-
-#ifdef USE_XAA
-static void ATIDRITransitionTo2d(ScreenPtr pScreen)
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-
-   if (pATI->backArea) {
-      xf86FreeOffscreenArea(pATI->backArea);
-      pATI->backArea = NULL;
-   }
-   if (pATI->depthTexArea) {
-      xf86FreeOffscreenArea(pATI->depthTexArea);
-      pATI->depthTexArea = NULL;
-   }
-   pATI->have3DWindows = FALSE;
-}
-
-static void ATIDRITransitionTo3d(ScreenPtr pScreen)
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   FBAreaPtr fbArea;
-   int width, height;
-
-   xf86PurgeUnlockedOffscreenAreas(pScreen);
-
-   xf86QueryLargestOffscreenArea(pScreen, &width, &height, 0, 0, 0);
-
-   xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-	      "Largest offscreen area available: %d x %d\n",
-	      width, height);
-
-   fbArea = xf86AllocateOffscreenArea(pScreen, pScreenInfo->displayWidth,
-				      height - pATI->depthTexLines - 
-				      pATI->backLines,
-				      pScreenInfo->displayWidth, NULL, NULL, NULL);
-
-   if (!fbArea)
-      xf86DrvMsg(pScreen->myNum, X_ERROR, "Unable to reserve placeholder "
-		 "offscreen area, you might experience screen corruption\n");
-
-   if (!pATI->backArea) {
-      pATI->backArea = 
-	 xf86AllocateOffscreenArea(pScreen, pScreenInfo->displayWidth,
-				   pATI->backLines,
-				   pScreenInfo->displayWidth,
-				   NULL, NULL, NULL);
-   }
-   if (!pATI->backArea)
-      xf86DrvMsg(pScreen->myNum, X_ERROR, "Unable to reserve offscreen area "
-		 "for back buffer, you might experience screen corruption\n");
-
-   if (!pATI->depthTexArea) {
-      pATI->depthTexArea = 
-	 xf86AllocateOffscreenArea(pScreen, pScreenInfo->displayWidth,
-				   pATI->depthTexLines,
-				   pScreenInfo->displayWidth,
-				   NULL, NULL, NULL);
-   }
-   if (!pATI->depthTexArea)
-      xf86DrvMsg(pScreen->myNum, X_ERROR, "Unable to reserve offscreen area "
-		 "for depth buffer and textures, you might experience screen corruption\n");
-
-   if (fbArea)
-      xf86FreeOffscreenArea(fbArea);
-
-   pATI->have3DWindows = TRUE;
-}
-#endif /* USE_XAA */
-
-#ifdef USE_EXA
-static void ATIDRITransitionTo2d_EXA(ScreenPtr pScreen)
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-   exaEnableDisableFBAccess(pScreen->myNum, FALSE);
-
-   pATI->pExa->offScreenBase = pATIDRIServer->backOffset;
-
-   exaEnableDisableFBAccess(pScreen->myNum, TRUE);
-
-   pATI->have3DWindows = FALSE;
-}
-
-static void ATIDRITransitionTo3d_EXA(ScreenPtr pScreen)
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-   exaEnableDisableFBAccess(pScreen->myNum, FALSE);
-
-   pATI->pExa->offScreenBase = pATIDRIServer->textureOffset +
-			       pATIDRIServer->textureSize;
-
-   exaEnableDisableFBAccess(pScreen->myNum, TRUE);
-
-   pATI->have3DWindows = TRUE;
-}
-#endif /* USE_EXA */
-
-/* Initialize the state of the back and depth buffers. */
-static void ATIDRIInitBuffers( WindowPtr pWin, RegionPtr prgn, CARD32 indx )
-{
-#ifdef USE_XAA
-   ScreenPtr   pScreen = pWin->drawable.pScreen;
-   ScrnInfoPtr pScreenInfo   = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-   XAAInfoRecPtr pXAAInfo = pATI->pXAAInfo;
-   BoxPtr      pbox, pboxSave;
-   int         nbox, nboxSave;
-   int         depth;
-
-   depth = 0x0000ffff;
-
-   if (!pXAAInfo)
-      return;
-
-   if (!pXAAInfo->SetupForSolidFill)
-      return;
-   
-   /* FIXME: Only initialize the back and depth buffers for contexts
-      that request them */
-
-   /* FIXME: Use drm clear? (see Radeon driver) */
-
-   pboxSave = pbox = REGION_RECTS(prgn);
-   nboxSave = nbox = REGION_NUM_RECTS(prgn);
-
-   (*pXAAInfo->SetupForSolidFill)(pScreenInfo, 0, GXcopy, (CARD32)(-1));
-   for (; nbox; nbox--, pbox++) {
-      (*pXAAInfo->SubsequentSolidFillRect)(pScreenInfo,
-					      pbox->x1 + pATIDRIServer->fbX,
-					      pbox->y1 + pATIDRIServer->fbY,
-					      pbox->x2 - pbox->x1,
-					      pbox->y2 - pbox->y1);
-      (*pXAAInfo->SubsequentSolidFillRect)(pScreenInfo,
-					      pbox->x1 + pATIDRIServer->backX,
-					      pbox->y1 + pATIDRIServer->backY,
-					      pbox->x2 - pbox->x1,
-					      pbox->y2 - pbox->y1);
-   }
-
-   pbox = pboxSave;
-   nbox = nboxSave;
-
-   (*pXAAInfo->SetupForSolidFill)(pScreenInfo, depth, GXcopy, (CARD32)(-1));
-   for (; nbox; nbox--, pbox++)
-      (*pXAAInfo->SubsequentSolidFillRect)(pScreenInfo,
-					      pbox->x1 + pATIDRIServer->depthX,
-					      pbox->y1 + pATIDRIServer->depthY,
-					      pbox->x2 - pbox->x1,
-					      pbox->y2 - pbox->y1);
-
-   ATIDRIMarkSyncInt(pScreenInfo);
-#endif
-}
-
-/* Copy the back and depth buffers when the X server moves a window.
- * 
- * Note: this function was copied from the Radeon driver...
- * 
- * This routine is a modified form of XAADoBitBlt with the calls to
- * ScreenToScreenBitBlt built in. My routine has the prgnSrc as source
- * instead of destination. My origin is upside down so the ydir cases
- * are reversed.
- */
-static void ATIDRIMoveBuffers( WindowPtr pWin, DDXPointRec ptOldOrg,
-			       RegionPtr prgnSrc, CARD32 indx )
-{
-#ifdef USE_XAA
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-    ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-    XAAInfoRecPtr pXAAInfo = pATI->pXAAInfo;
-
-    int backOffsetPitch =  (((pATI->pDRIServerInfo->backPitch/8) << 22) |
-					   (pATI->pDRIServerInfo->backOffset >> 3));
-#if 0
-    int depthOffsetPitch = (((pATI->pDRIServerInfo->depthPitch/8) << 22) |
-					   (pATI->pDRIServerInfo->depthOffset >> 3));
-#endif
-    BoxPtr        pboxTmp, pboxNext, pboxBase;
-    DDXPointPtr   pptTmp;
-    int           xdir, ydir;
-
-    int           screenwidth = pScreenInfo->virtualX;
-    int           screenheight = pScreenInfo->virtualY;
-
-    BoxPtr        pbox     = REGION_RECTS(prgnSrc);
-    int           nbox     = REGION_NUM_RECTS(prgnSrc);
-
-    BoxPtr        pboxNew1 = NULL;
-    BoxPtr        pboxNew2 = NULL;
-    DDXPointPtr   pptNew1  = NULL;
-    DDXPointPtr   pptNew2  = NULL;
-    DDXPointPtr   pptSrc   = &ptOldOrg;
-
-    int           dx       = pWin->drawable.x - ptOldOrg.x;
-    int           dy       = pWin->drawable.y - ptOldOrg.y;
-
-   if (!pXAAInfo)
-      return;
-
-   if (!pXAAInfo->SetupForScreenToScreenCopy)
-      return;
-
-    /* FIXME: Only move the back and depth buffers for contexts
-     * that request them.
-     */
-
-    /* If the copy will overlap in Y, reverse the order */
-    if (dy > 0) {
-	ydir = -1;
-
-	if (nbox > 1) {
-	    /* Keep ordering in each band, reverse order of bands */
-	    pboxNew1 = (BoxPtr)xalloc(sizeof(BoxRec)*nbox);
-	    if (!pboxNew1) return;
-	    pptNew1 = (DDXPointPtr)xalloc(sizeof(DDXPointRec)*nbox);
-	    if (!pptNew1) {
-		xfree(pboxNew1);
-		return;
-	    }
-	    pboxBase = pboxNext = pbox+nbox-1;
-	    while (pboxBase >= pbox) {
-		while ((pboxNext >= pbox) && (pboxBase->y1 == pboxNext->y1))
-		    pboxNext--;
-		pboxTmp = pboxNext+1;
-		pptTmp  = pptSrc + (pboxTmp - pbox);
-		while (pboxTmp <= pboxBase) {
-		    *pboxNew1++ = *pboxTmp++;
-		    *pptNew1++  = *pptTmp++;
-		}
-		pboxBase = pboxNext;
-	    }
-	    pboxNew1 -= nbox;
-	    pbox      = pboxNew1;
-	    pptNew1  -= nbox;
-	    pptSrc    = pptNew1;
-	}
-    } else {
-	/* No changes required */
-	ydir = 1;
-    }
-
-    /* If the regions will overlap in X, reverse the order */
-    if (dx > 0) {
-	xdir = -1;
-
-	if (nbox > 1) {
-	    /* reverse order of rects in each band */
-	    pboxNew2 = (BoxPtr)xalloc(sizeof(BoxRec)*nbox);
-	    pptNew2  = (DDXPointPtr)xalloc(sizeof(DDXPointRec)*nbox);
-	    if (!pboxNew2 || !pptNew2) {
-		xfree(pptNew2);
-		xfree(pboxNew2);
-		xfree(pptNew1);
-		xfree(pboxNew1);
-		return;
-	    }
-	    pboxBase = pboxNext = pbox;
-	    while (pboxBase < pbox+nbox) {
-		while ((pboxNext < pbox+nbox)
-		       && (pboxNext->y1 == pboxBase->y1))
-		    pboxNext++;
-		pboxTmp = pboxNext;
-		pptTmp  = pptSrc + (pboxTmp - pbox);
-		while (pboxTmp != pboxBase) {
-		    *pboxNew2++ = *--pboxTmp;
-		    *pptNew2++  = *--pptTmp;
-		}
-		pboxBase = pboxNext;
-	    }
-	    pboxNew2 -= nbox;
-	    pbox      = pboxNew2;
-	    pptNew2  -= nbox;
-	    pptSrc    = pptNew2;
-	}
-    } else {
-	/* No changes are needed */
-	xdir = 1;
-    }
-
-    (*pXAAInfo->SetupForScreenToScreenCopy)(pScreenInfo, xdir, ydir, GXcopy,
-					       (CARD32)(-1), -1);
-
-    for (; nbox-- ; pbox++) {
-	int xa    = pbox->x1;
-	int ya    = pbox->y1;
-	int destx = xa + dx;
-	int desty = ya + dy;
-	int w     = pbox->x2 - xa + 1;
-	int h     = pbox->y2 - ya + 1;
-
-	if (destx < 0)                xa -= destx, w += destx, destx = 0;
-	if (desty < 0)                ya -= desty, h += desty, desty = 0;
-	if (destx + w > screenwidth)  w = screenwidth  - destx;
-	if (desty + h > screenheight) h = screenheight - desty;
-
-	if (w <= 0) continue;
-	if (h <= 0) continue;
-
-	ATIMach64WaitForFIFO(pATI, 2);
-	outf(SRC_OFF_PITCH, backOffsetPitch);
-	outf(DST_OFF_PITCH, backOffsetPitch);
-
-	(*pXAAInfo->SubsequentScreenToScreenCopy)(pScreenInfo,
-						     xa, ya,
-						     destx, desty,
-						     w, h);
-#if 0
-	/* FIXME: Move depth buffers? */
-	ATIMach64WaitForFIFO(pATI, 2);
-	outf(SRC_OFF_PITCH, depthOffsetPitch);
-	outf(DST_OFF_PITCH, depthOffsetPitch);
-
-	if (pATI->depthMoves)
-	    ATIScreenToScreenCopyDepth(pScreenInfo,
-					  xa, ya,
-					  destx, desty,
-					  w, h);
-#endif
-    }
-
-    ATIMach64WaitForFIFO(pATI, 2);
-    outf(SRC_OFF_PITCH, pATI->NewHW.dst_off_pitch);
-    outf(DST_OFF_PITCH, pATI->NewHW.src_off_pitch);
-
-    xfree(pptNew2);
-    xfree(pboxNew2);
-    xfree(pptNew1);
-    xfree(pboxNew1);
-
-    ATIDRIMarkSyncInt(pScreenInfo);
-#endif
-}
-
-/* Compute log base 2 of val. */
-static int Mach64MinBits(int val)
-{
-    int bits;
-
-    if (!val) return 1;
-    for (bits = 0; val; val >>= 1, ++bits);
-    return bits;
-}
-
-static Bool ATIDRISetBufSize( ScreenPtr pScreen, unsigned int maxSize )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-   if (pATI->OptionBufferSize) {
-      if (pATI->OptionBufferSize < 1 || pATI->OptionBufferSize > maxSize  ) {
-	 xf86DrvMsg( pScreen->myNum, X_ERROR, "[drm] Illegal DMA buffers size: %d MB\n",
-		     pATI->OptionBufferSize );
-	 return FALSE;
-      }
-      if (pATI->OptionBufferSize > 2) {
-	 xf86DrvMsg( pScreen->myNum, X_WARNING, "[drm] Illegal DMA buffers size: %d MB\n",
-		     pATI->OptionBufferSize );
-	 xf86DrvMsg( pScreen->myNum, X_WARNING, "[drm] Clamping DMA buffers size to 2 MB\n");
-	 pATIDRIServer->bufferSize = 2;
-      } else {
-	 pATIDRIServer->bufferSize = pATI->OptionBufferSize;
-	 xf86DrvMsg( pScreen->myNum, X_CONFIG, "[drm] Using %d MB for DMA buffers\n",
-		     pATIDRIServer->bufferSize );
-      }
-   } else {
-      xf86DrvMsg( pScreen->myNum, X_DEFAULT, "[drm] Using %d MB for DMA buffers\n",
-		  pATIDRIServer->bufferSize );
-   }
-
-   return TRUE;
-}
-
-static Bool ATIDRISetAgpMode( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-   unsigned long mode   = drmAgpGetMode( pATI->drmFD );        /* Default mode */
-   unsigned int vendor = drmAgpVendorId( pATI->drmFD );
-   unsigned int device = drmAgpDeviceId( pATI->drmFD );
-
-   if (pATI->OptionAGPMode > 0 && pATI->OptionAGPMode <= ATI_AGP_MAX_MODE) {
-      pATIDRIServer->agpMode = pATI->OptionAGPMode;
-      xf86DrvMsg( pScreen->myNum, X_CONFIG, "[agp] Using AGP %dx Mode\n", 
-		  pATIDRIServer->agpMode );
-   } else if (pATI->OptionAGPMode > 0) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR, "[agp] Illegal AGP Mode: %d\n", 
-		  pATI->OptionAGPMode );
-      return FALSE;
-   } else {
-      /* If no mode configured, use the default mode obtained from agpgart */
-      if ( mode & AGP_MODE_2X ) {
-	 pATIDRIServer->agpMode = 2;
-      } else if ( mode & AGP_MODE_1X ) {
-	 pATIDRIServer->agpMode = 1;
-      }
-      xf86DrvMsg( pScreen->myNum, X_DEFAULT, "[agp] Using AGP %dx Mode\n", 
-		  pATIDRIServer->agpMode );
-   }
-
-   mode &= ~AGP_MODE_MASK;
-   switch ( pATIDRIServer->agpMode ) {
-   case 2:          mode |= AGP_MODE_2X;
-   case 1: default: mode |= AGP_MODE_1X;
-   }
-
-   if (pATI->OptionAGPSize) {
-      switch (pATI->OptionAGPSize) {
-      case 128:
-      case  64:
-      case  32:
-      case  16:
-      case   8:
-      case   4:
-	 pATIDRIServer->agpSize = pATI->OptionAGPSize;
-	 xf86DrvMsg( pScreen->myNum, X_CONFIG, "[agp] Using %d MB AGP aperture\n", 
-		     pATIDRIServer->agpSize );
-	 break;
-      default:
-	 xf86DrvMsg( pScreen->myNum, X_ERROR,
-		     "[agp] Illegal aperture size %d MB\n", pATI->OptionAGPSize );
-	 return FALSE;
-      }
-   } else {
-      xf86DrvMsg( pScreen->myNum, X_DEFAULT, "[agp] Using %d MB AGP aperture\n", 
-		  pATIDRIServer->agpSize );
-   }
-
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-	       "[agp] Mode 0x%08lx [AGP 0x%04x/0x%04x; Card 0x%04x/0x%04x]\n",
-	       mode, vendor, device,
-	       PCI_DEV_VENDOR_ID(pATI->PCIInfo),
-	       PCI_DEV_DEVICE_ID(pATI->PCIInfo) );
-
-   if ( drmAgpEnable( pATI->drmFD, mode ) < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR, "[agp] AGP not enabled\n" );
-      drmAgpRelease( pATI->drmFD );
-      return FALSE;
-   }
-
-   return TRUE;
-}
-
-/* Initialize the AGP state.  Request memory for use in AGP space, and
- * initialize the Rage Pro registers to point to that memory.
- */
-static Bool ATIDRIAgpInit( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-   int ret;
-   unsigned long cntl;
-   int s, l;
-
-   pATIDRIServer->agpSize = ATI_DEFAULT_AGP_SIZE;
-   pATIDRIServer->agpMode = ATI_DEFAULT_AGP_MODE;
-   pATIDRIServer->bufferSize = ATI_DEFAULT_BUFFER_SIZE;
-   pATIDRIServer->ringSize = 16; /* 16 kB ring */
-
-   if ( drmAgpAcquire( pATI->drmFD ) < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_WARNING, "[agp] AGP not available\n" );
-      return FALSE;
-   }
-
-   if (!ATIDRISetAgpMode( pScreen ))
-      return FALSE;
-
-   pATIDRIServer->agpOffset = 0;
-
-   ret = drmAgpAlloc( pATI->drmFD, pATIDRIServer->agpSize*1024*1024,
-		      0, NULL, &pATIDRIServer->agpHandle );
-   if ( ret < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR, "[agp] Out of memory (%d)\n", ret );
-      drmAgpRelease( pATI->drmFD );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-	       "[agp] %d kB allocated with handle 0x%08x\n",
-	       pATIDRIServer->agpSize*1024, pATIDRIServer->agpHandle );
-
-   if ( drmAgpBind( pATI->drmFD, pATIDRIServer->agpHandle, pATIDRIServer->agpOffset) < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR, "[agp] Could not bind\n" );
-      drmAgpFree( pATI->drmFD, pATIDRIServer->agpHandle );
-      drmAgpRelease( pATI->drmFD );
-      return FALSE;
-   }
-
-   xf86DrvMsg(pScreen->myNum, X_INFO,
-	      "[agp] Using %d kB for DMA descriptor ring\n", pATIDRIServer->ringSize);
-
-   if ( !ATIDRISetBufSize( pScreen, pATIDRIServer->agpSize ) )
-      return FALSE;
-
-   pATIDRIServer->agpTexSize    = pATIDRIServer->agpSize - pATIDRIServer->bufferSize;
-
-   /* Reserve space for the DMA descriptor ring */
-   pATIDRIServer->ringStart   = pATIDRIServer->agpOffset;
-   pATIDRIServer->ringMapSize = pATIDRIServer->ringSize*1024; /* ringSize is in kB */
-
-   /* Reserve space for the vertex buffer */
-   pATIDRIServer->bufferStart   = pATIDRIServer->ringStart + pATIDRIServer->ringMapSize;
-   pATIDRIServer->bufferMapSize = pATIDRIServer->bufferSize*1024*1024;
-    
-   /* Reserve the rest for AGP textures */
-   pATIDRIServer->agpTexStart = pATIDRIServer->bufferStart + pATIDRIServer->bufferMapSize;
-   s = (pATIDRIServer->agpSize*1024*1024 - pATIDRIServer->agpTexStart);
-   l = Mach64MinBits((s-1) / MACH64_NR_TEX_REGIONS);
-   if (l < MACH64_LOG_TEX_GRANULARITY) l = MACH64_LOG_TEX_GRANULARITY;
-   pATIDRIServer->agpTexMapSize   = (s >> l) << l;
-   pATIDRIServer->log2AGPTexGran  = l;
-
-   xf86DrvMsg(pScreen->myNum, X_INFO,
-	      "[agp] Using %d kB for AGP textures\n", pATIDRIServer->agpTexMapSize/1024);
-
-   /* Map DMA descriptor ring */
-   if ( drmAddMap( pATI->drmFD, pATIDRIServer->ringStart, pATIDRIServer->ringMapSize,
-		   DRM_AGP, DRM_RESTRICTED, &pATIDRIServer->ringHandle ) < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[agp] Could not add ring mapping\n" );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-	       "[agp] ring handle = 0x%08x\n",
-	       pATIDRIServer->ringHandle );
-
-   if ( drmMap( pATI->drmFD, pATIDRIServer->ringHandle,
-		pATIDRIServer->ringMapSize, &pATIDRIServer->ringMap ) < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[agp] Could not map ring\n" );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-	       "[agp] Ring mapped at 0x%08lx\n",
-	       (unsigned long)pATIDRIServer->ringMap );
-
-   /* Map vertex buffers */
-   if ( drmAddMap( pATI->drmFD, pATIDRIServer->bufferStart, pATIDRIServer->bufferMapSize,
-		   DRM_AGP, DRM_READ_ONLY, &pATIDRIServer->bufferHandle ) < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[agp] Could not add vertex buffers mapping\n" );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-	       "[agp] vertex buffers handle = 0x%08x\n",
-	       pATIDRIServer->bufferHandle );
-
-   if ( drmMap( pATI->drmFD, pATIDRIServer->bufferHandle,
-		pATIDRIServer->bufferMapSize, &pATIDRIServer->bufferMap ) < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[agp] Could not map vertex buffers\n" );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-	       "[agp] Vertex buffers mapped at 0x%08lx\n",
-	       (unsigned long)pATIDRIServer->bufferMap );
-
-   /* Map AGP Textures */
-   if (drmAddMap(pATI->drmFD, pATIDRIServer->agpTexStart, pATIDRIServer->agpTexMapSize,
-		 DRM_AGP, 0, &pATIDRIServer->agpTexHandle) < 0) {
-      xf86DrvMsg(pScreen->myNum, X_ERROR,
-		 "[agp] Could not add AGP texture region mapping\n");
-      return FALSE;
-   }
-   xf86DrvMsg(pScreen->myNum, X_INFO,
-	      "[agp] AGP texture region handle = 0x%08x\n",
-	      pATIDRIServer->agpTexHandle);
-
-   if (drmMap(pATI->drmFD, pATIDRIServer->agpTexHandle, pATIDRIServer->agpTexMapSize,
-	      &pATIDRIServer->agpTexMap) < 0) {
-      xf86DrvMsg(pScreen->myNum, X_ERROR,
-		 "[agp] Could not map AGP texture region\n");
-      return FALSE;
-   }
-   xf86DrvMsg(pScreen->myNum, X_INFO,
-	      "[agp] AGP Texture region mapped at 0x%08lx\n",
-	      (unsigned long)pATIDRIServer->agpTexMap);
-
-   /* Initialize Mach64's AGP registers */
-   cntl  = inm( AGP_CNTL );
-   cntl &= ~AGP_APER_SIZE_MASK;
-   switch ( pATIDRIServer->agpSize ) {
-   case 256: cntl |= AGP_APER_SIZE_256MB; break;
-   case 128: cntl |= AGP_APER_SIZE_128MB; break;
-   case  64: cntl |= AGP_APER_SIZE_64MB;  break;
-   case  32: cntl |= AGP_APER_SIZE_32MB;  break;
-   case  16: cntl |= AGP_APER_SIZE_16MB;  break;
-   case   8: cntl |= AGP_APER_SIZE_8MB;   break;
-   case   4: cntl |= AGP_APER_SIZE_4MB;   break;
-   default:
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[agp] Illegal aperture size %d kB\n",
-		  pATIDRIServer->agpSize*1024 );
-      return FALSE;
-   }
-
-   /* 1 = DATA comes in clock in which TRDY sampled (default) */
-   /* 0 = DATA comes in clock after TRDY sampled */
-   cntl |= AGP_TRDY_MODE;
-
-   /* 1 = generate all reads as high priority */
-   /* 0 = generate all reads as their default priority (default) */
-   /* Setting this only works for me at AGP 1x mode (LLD) */
-   if (pATIDRIServer->agpMode == 1) {
-      cntl |= HIGH_PRIORITY_READ_EN;
-   } else {
-      cntl &= ~HIGH_PRIORITY_READ_EN;
-   }
-
-   outm( AGP_BASE, drmAgpBase(pATI->drmFD) );
-   outm( AGP_CNTL, cntl );
-
-   return TRUE;
-}
-
-static Bool ATIDRIPciInit( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-   pATIDRIServer->bufferSize = ATI_DEFAULT_BUFFER_SIZE;
-   pATIDRIServer->ringSize = 16; /* 16 kB ring */
-
-   if ( !ATIDRISetBufSize( pScreen, (unsigned)(-1) ) )
-      return FALSE;
-
-   /* Set size of the DMA descriptor ring */
-   pATIDRIServer->ringStart   = 0;
-   pATIDRIServer->ringMapSize = pATIDRIServer->ringSize*1024; /* ringSize is in kB */
-
-   /* Set size of the vertex buffer */
-   pATIDRIServer->bufferStart   = 0;
-   pATIDRIServer->bufferMapSize = pATIDRIServer->bufferSize*1024*1024;
-
-   /* Map DMA descriptor ring */
-   if ( drmAddMap( pATI->drmFD, 0, pATIDRIServer->ringMapSize,
-		   DRM_CONSISTENT, DRM_RESTRICTED, &pATIDRIServer->ringHandle ) < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[pci] Could not add ring mapping\n" );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreen->myNum, X_INFO, "[pci] ring handle = 0x%08x\n",
-	       pATIDRIServer->ringHandle );
-
-   if ( drmMap( pATI->drmFD, pATIDRIServer->ringHandle,
-		pATIDRIServer->ringMapSize, &pATIDRIServer->ringMap ) < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[pci] Could not map ring\n" );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-	       "[pci] Ring mapped at 0x%08lx\n",
-	       (unsigned long)pATIDRIServer->ringMap );
-
-   /* Disable AGP for ForcePCIMode */
-   if ( pATI->BusType != ATI_BUS_PCI ) {
-       outm( AGP_BASE, 0 );
-       outm( AGP_CNTL, 0 );
-   }
-
-   return TRUE;
-}
-
-/* Add a map for the MMIO registers that will be accessed by any
- * DRI-based clients.
- */
-static Bool ATIDRIMapInit( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-   pATIDRIServer->regsSize = getpagesize();
-   if ( drmAddMap( pATI->drmFD, pATI->Block1Base,
-		   pATIDRIServer->regsSize,
-		   DRM_REGISTERS, DRM_READ_ONLY,
-		   &pATIDRIServer->regsHandle ) < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[drm] failed to map registers\n" );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-	       "[drm] register handle = 0x%08x\n",
-	       pATIDRIServer->regsHandle );
-
-   return TRUE;
-}
-
-/* Initialize the kernel data structures. */
-static Bool ATIDRIKernelInit( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-   drmMach64Init info;
-
-   memset( &info, 0, sizeof(drmMach64Init) );
-
-   info.func 			= DRM_MACH64_INIT_DMA;
-   info.sarea_priv_offset	= sizeof(XF86DRISAREARec);
-   info.is_pci			= pATIDRIServer->IsPCI;
-   info.dma_mode                = pATI->OptionDMAMode;
-
-   info.fb_bpp			= pATI->bitsPerPixel;
-   info.front_offset		= pATIDRIServer->frontOffset;
-   info.front_pitch		= pATIDRIServer->frontPitch;
-   info.back_offset		= pATIDRIServer->backOffset;
-   info.back_pitch		= pATIDRIServer->backPitch;
-
-   info.depth_bpp		= 16;
-   info.depth_offset		= pATIDRIServer->depthOffset;
-   info.depth_pitch		= pATIDRIServer->depthPitch;
-
-   info.fb_offset		= pATI->LinearBase;
-   info.mmio_offset		= pATIDRIServer->regsHandle;
-   info.ring_offset		= pATIDRIServer->ringHandle;
-   info.buffers_offset		= pATIDRIServer->bufferHandle;
-   info.agp_textures_offset	= pATIDRIServer->agpTexHandle;
-
-   if ( drmCommandWrite( pATI->drmFD, DRM_MACH64_INIT, 
-			 &info, sizeof(drmMach64Init) ) < 0 ) {
-      return FALSE;
-   } else {
-      return TRUE;
-   }
-}
-
-/* Add a map for the DMA buffers that will be accessed by any
- * DRI-based clients.
- */
-static Bool ATIDRIAddBuffers( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-   /* Initialize vertex buffers */
-   if ( pATIDRIServer->IsPCI ) {
-      pATIDRIServer->numBuffers = drmAddBufs( pATI->drmFD,
-					      pATIDRIServer->bufferMapSize/MACH64_BUFFER_SIZE,
-					      MACH64_BUFFER_SIZE,
-					      DRM_PCI_BUFFER_RO,
-					      0 );
-   } else {
-      pATIDRIServer->numBuffers = drmAddBufs( pATI->drmFD,
-					      pATIDRIServer->bufferMapSize/MACH64_BUFFER_SIZE,
-					      MACH64_BUFFER_SIZE,
-					      DRM_AGP_BUFFER,
-					      pATIDRIServer->bufferStart );
-   }
-   if ( pATIDRIServer->numBuffers <= 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[drm] Could not create DMA buffers list\n" );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-	       "[drm] Added %d %d byte DMA buffers\n",
-	       pATIDRIServer->numBuffers, MACH64_BUFFER_SIZE );
-
-    return TRUE;
-}
-
-static Bool ATIDRIMapBuffers( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-   pATIDRIServer->drmBuffers = drmMapBufs( pATI->drmFD );
-   if ( !pATIDRIServer->drmBuffers ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[drm] Failed to map DMA buffers list\n" );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-	       "[drm] Mapped %d DMA buffers at 0x%08lx\n",
-	       pATIDRIServer->drmBuffers->count,
-	       (unsigned long)pATIDRIServer->drmBuffers->list->address );
-
-   return TRUE;
-}
-
-static Bool ATIDRIIrqInit( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-
-   if ( pATI->irq <= 0 ) {
-      pATI->irq = drmGetInterruptFromBusID(pATI->drmFD,
-					   PCI_CFG_BUS(pATI->PCIInfo),
-					   PCI_CFG_DEV(pATI->PCIInfo),
-					   PCI_CFG_FUNC(pATI->PCIInfo));
-      if ( pATI->irq <= 0 ) {
-	 xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-		    "[drm] Couldn't find IRQ for bus id %d:%d:%d\n",
-		    PCI_CFG_BUS(pATI->PCIInfo),
-		    PCI_CFG_DEV(pATI->PCIInfo),
-		    PCI_CFG_FUNC(pATI->PCIInfo));
-	 pATI->irq = 0;
-      } else if ((drmCtlInstHandler(pATI->drmFD, pATI->irq)) != 0) {
- 	 xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-		    "[drm] Failed to initialize interrupt handler with IRQ %d\n",
-		    pATI->irq);
-	 pATI->irq = 0;
-      }
-
-      if (pATI->irq)
-	 xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-		    "[drm] Installed interrupt handler, using IRQ %d\n",
-		    pATI->irq);
-      else {
-	 xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-		    "[drm] Falling back to irq-free operation\n");
-	 return FALSE;
-      }
-   }
-
-   return TRUE;
-
-}
-
-/* Initialize the screen-specific data structures for the DRI and the
- * Rage Pro.  This is the main entry point to the device-specific
- * initialization code.  It calls device-independent DRI functions to
- * create the DRI data structures and initialize the DRI state.
- */
-Bool ATIDRIScreenInit( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   DRIInfoPtr pDRIInfo;
-   ATIDRIPtr pATIDRI;
-   ATIDRIServerInfoPtr pATIDRIServer;
-   drmVersionPtr version;
-   int major, minor, patch;
-
-   /* Check that the GLX, DRI, and DRM modules have been loaded by testing
-    * for known symbols in each module.
-    */
-   if ( !xf86LoaderCheckSymbol("GlxSetVisualConfigs") ) return FALSE;
-   if ( !xf86LoaderCheckSymbol("drmAvailable") ) return FALSE;
-   if ( !xf86LoaderCheckSymbol("DRIQueryVersion") ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[dri] ATIDRIScreenInit failed (libdri.a too old)\n" );
-      return FALSE;
-   }
-
-   /* Check the DRI version */
-   DRIQueryVersion( &major, &minor, &patch );
-   if ( major != DRIINFO_MAJOR_VERSION || minor < 0 ) {
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[dri] ATIDRIScreenInit failed because of a version mismatch.\n"
-		  "[dri] libdri version is %d.%d.%d but version %d.%d.x is needed.\n"
-		  "[dri] Disabling the DRI.\n",
-		  major, minor, patch,
-                  DRIINFO_MAJOR_VERSION, 0 );
-      return FALSE;
-   }
-
-   switch ( pATI->bitsPerPixel ) {
-   case 8:
-      /* These modes are not supported (yet). */
-   case 15:
-   case 24:
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[dri] Direct rendering only supported in 16 and 32 bpp modes\n");
-      return FALSE;
-
-      /* Only 16 and 32 color depths are supported currently. */
-   case 16:
-      if ( pATI->depth != 16) {
-	 xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[dri] Direct rendering not supported for depth %d at fbbpp 16.\n", pATI->depth );
-	 return FALSE;
-      }
-      break;
-   case 32:
-      break;
-   }
-
-   /* Create the DRI data structure, and fill it in before calling the
-    * DRIScreenInit().
-    */
-   pDRIInfo = DRICreateInfoRec();
-   if ( !pDRIInfo ) return FALSE;
-
-   pATI->pDRIInfo = pDRIInfo;
-   pDRIInfo->drmDriverName = ATIKernelDriverName;
-   pDRIInfo->clientDriverName = ATIClientDriverName;
-   if (xf86LoaderCheckSymbol("DRICreatePCIBusID")) {
-      pDRIInfo->busIdString = DRICreatePCIBusID(pATI->PCIInfo);
-   } else {
-      pDRIInfo->busIdString = xalloc( 64 );
-      sprintf( pDRIInfo->busIdString,
-	       "PCI:%d:%d:%d",
-	       PCI_DEV_BUS(pATI->PCIInfo),
-	       PCI_DEV_DEV(pATI->PCIInfo),
-	       PCI_DEV_FUNC(pATI->PCIInfo) );
-   }
-   pDRIInfo->ddxDriverMajorVersion = MACH64_VERSION_MAJOR;
-   pDRIInfo->ddxDriverMinorVersion = MACH64_VERSION_MINOR;
-   pDRIInfo->ddxDriverPatchVersion = MACH64_VERSION_PATCH;
-   pDRIInfo->frameBufferPhysicalAddress = (void *)pATI->LinearBase;
-   pDRIInfo->frameBufferSize = pATI->LinearSize;
-   pDRIInfo->frameBufferStride = (pScreenInfo->displayWidth *
-				  pATI->FBBytesPerPixel);
-   pDRIInfo->ddxDrawableTableEntry = ATI_MAX_DRAWABLES;
-
-   if ( SAREA_MAX_DRAWABLES < ATI_MAX_DRAWABLES ) {
-      pDRIInfo->maxDrawableTableEntry = SAREA_MAX_DRAWABLES;
-   } else {
-      pDRIInfo->maxDrawableTableEntry = ATI_MAX_DRAWABLES;
-   }
-
-   /* For now the mapping works by using a fixed size defined
-    * in the SAREA header
-    */
-   if ( sizeof(XF86DRISAREARec) + sizeof(ATISAREAPrivRec) > SAREA_MAX ) {
-      ErrorF( "[dri] Data does not fit in SAREA\n" );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreenInfo->scrnIndex, X_INFO, "[drm] SAREA %u+%u: %u\n",
-	       (unsigned)sizeof(XF86DRISAREARec),
-	       (unsigned)sizeof(ATISAREAPrivRec),
-	       (unsigned)(sizeof(XF86DRISAREARec) + sizeof(ATISAREAPrivRec)) );
-   pDRIInfo->SAREASize = SAREA_MAX;
-
-   pATIDRI = (ATIDRIPtr) xnfcalloc( sizeof(ATIDRIRec), 1 );
-   if ( !pATIDRI ) {
-      DRIDestroyInfoRec( pATI->pDRIInfo );
-      pATI->pDRIInfo = NULL;
-      xf86DrvMsg( pScreenInfo->scrnIndex, X_ERROR,
-		  "[dri] Failed to allocate memory for private record\n" );
-      return FALSE;
-   }
-   pATIDRIServer = (ATIDRIServerInfoPtr)
-      xnfcalloc( sizeof(ATIDRIServerInfoRec), 1 );
-   if ( !pATIDRIServer ) {
-      xfree( pATIDRI );
-      DRIDestroyInfoRec( pATI->pDRIInfo );
-      pATI->pDRIInfo = NULL;
-      xf86DrvMsg( pScreenInfo->scrnIndex, X_ERROR,
-		  "[dri] Failed to allocate memory for private record\n" );
-      return FALSE;
-   }
-
-   pATI->pDRIServerInfo = pATIDRIServer;
-
-   pDRIInfo->devPrivate		= pATIDRI;
-   pDRIInfo->devPrivateSize	= sizeof(ATIDRIRec);
-   pDRIInfo->contextSize	= sizeof(ATIDRIContextRec);
-
-   pDRIInfo->CreateContext	= ATICreateContext;
-   pDRIInfo->DestroyContext	= ATIDestroyContext;
-   pDRIInfo->SwapContext	= ATIDRISwapContext;
-   pDRIInfo->InitBuffers	= ATIDRIInitBuffers;
-   pDRIInfo->MoveBuffers	= ATIDRIMoveBuffers;
-#ifdef USE_XAA
-   if (!pATI->useEXA) {
-      pDRIInfo->TransitionTo2d  = ATIDRITransitionTo2d;
-      pDRIInfo->TransitionTo3d  = ATIDRITransitionTo3d;
-   }
-#endif /* USE_XAA */
-#ifdef USE_EXA
-   if (pATI->useEXA) {
-      pDRIInfo->TransitionTo2d  = ATIDRITransitionTo2d_EXA;
-      pDRIInfo->TransitionTo3d  = ATIDRITransitionTo3d_EXA;
-   }
-#endif /* USE_EXA */
-   pDRIInfo->bufferRequests	= DRI_ALL_WINDOWS;
-
-   pDRIInfo->createDummyCtx     = TRUE;
-   pDRIInfo->createDummyCtxPriv = FALSE;
-
-   pATI->have3DWindows = FALSE;
-
-   if ( !DRIScreenInit( pScreen, pDRIInfo, &pATI->drmFD ) ) {
-      xfree( pATIDRIServer );
-      pATI->pDRIServerInfo = NULL;
-      xfree( pDRIInfo->devPrivate );
-      pDRIInfo->devPrivate = NULL;
-      DRIDestroyInfoRec( pDRIInfo );
-      pDRIInfo = NULL;
-      xf86DrvMsg( pScreen->myNum, X_ERROR,
-		  "[dri] DRIScreenInit Failed\n" );
-      return FALSE;
-   }
-   
-   /* Check the DRM lib version.
-      drmGetLibVersion was not supported in version 1.0, so check for
-      symbol first to avoid possible crash or hang.
-   */
-   if (xf86LoaderCheckSymbol("drmGetLibVersion")) {
-      version = drmGetLibVersion(pATI->drmFD);
-   } else {
-      /* drmlib version 1.0.0 didn't have the drmGetLibVersion
-	 entry point.  Fake it by allocating a version record
-	 via drmGetVersion and changing it to version 1.0.0
-      */
-      version = drmGetVersion(pATI->drmFD);
-      version->version_major      = 1;
-      version->version_minor      = 0;
-      version->version_patchlevel = 0;
-   }
-
-   if (version) {
-      if (version->version_major != 1 ||
-	  version->version_minor < 1) {
-	 /* incompatible drm library version */
-	 xf86DrvMsg(pScreen->myNum, X_ERROR,
-		    "[dri] ATIDRIScreenInit failed because of a version mismatch.\n"
-		    "[dri] libdrm.a module version is %d.%d.%d but version 1.1.x is needed.\n"
-		    "[dri] Disabling DRI.\n",
-		    version->version_major,
-		    version->version_minor,
-		    version->version_patchlevel);
-	 drmFreeVersion(version);
-	 ATIDRICloseScreen(pScreen);
-	 return FALSE;
-      }
-      drmFreeVersion(version);
-   }
-
-   /* Check the mach64 DRM version */
-   version = drmGetVersion( pATI->drmFD );
-   if ( version ) {
-      if ( version->version_major != 2 ||
-	   version->version_minor < 0 ) {
-	 /* Incompatible DRM version */
-	 xf86DrvMsg( pScreen->myNum, X_ERROR,
-		     "[dri] ATIDRIScreenInit failed because of a version mismatch.\n"
-		     "[dri] mach64.o kernel module version is %d.%d.%d, but version 2.x is needed (with 2.x >= 2.0).\n"
-		     "[dri] Disabling DRI.\n",
-		     version->version_major,
-		     version->version_minor,
-		     version->version_patchlevel );
-	 drmFreeVersion( version );
-	 ATIDRICloseScreen( pScreen );
-	 return FALSE;
-      }
-      drmFreeVersion( version );
-   }
-
-   switch ( pATI->OptionDMAMode ) {
-   case MACH64_MODE_DMA_ASYNC:
-      xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Will request asynchronous DMA mode\n");
-      break;
-   case MACH64_MODE_DMA_SYNC:
-      xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Will request synchronous DMA mode\n");
-      break;
-   case MACH64_MODE_MMIO:
-      xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Will request pseudo-DMA (MMIO) mode\n");
-      break;
-   default:
-      xf86DrvMsg(pScreen->myNum, X_WARNING, "[drm] Unknown DMA mode\n");
-   }
-
-   pATIDRIServer->IsPCI = (pATI->BusType == ATI_BUS_PCI || pATI->OptionIsPCI) ? TRUE : FALSE;
-
-   if ( pATI->BusType != ATI_BUS_PCI && pATI->OptionIsPCI ) {
-       xf86DrvMsg(pScreen->myNum, X_CONFIG, "[dri] Forcing PCI mode\n");
-   }
-
-   /* Initialize AGP */
-   if ( !pATIDRIServer->IsPCI && !ATIDRIAgpInit( pScreen ) ) {
-      pATIDRIServer->IsPCI = TRUE;
-      xf86DrvMsg( pScreen->myNum, X_WARNING, "[agp] AGP failed to initialize -- falling back to PCI mode.\n" );
-      xf86DrvMsg( pScreen->myNum, X_WARNING, "[agp] Make sure you have the agpgart kernel module loaded.\n" );
-   }
-
-   /* Initialize PCI */
-   if ( pATIDRIServer->IsPCI && !ATIDRIPciInit( pScreen ) ) {
-      ATIDRICloseScreen( pScreen );
-      return FALSE;
-   }
-
-   if ( !ATIDRIMapInit( pScreen ) ) {
-      ATIDRICloseScreen( pScreen );
-      return FALSE;
-   }
-
-   if ( !ATIInitVisualConfigs( pScreen ) ) {
-      ATIDRICloseScreen( pScreen );
-      return FALSE;
-   }
-   xf86DrvMsg( pScreenInfo->scrnIndex, X_INFO,
-	       "[dri] Visual configs initialized\n" );
-
-   xf86DrvMsg( pScreenInfo->scrnIndex, X_INFO,
-	       "[dri] Block 0 base at 0x%08lx\n", pATI->Block0Base );
-
-   return TRUE;
-}
-
-/* Finish initializing the device-dependent DRI state, and call
- * DRIFinishScreenInit() to complete the device-independent DRI
- * initialization.
- */
-Bool ATIDRIFinishScreenInit( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATISAREAPrivPtr pSAREAPriv;
-   ATIDRIPtr pATIDRI;
-   ATIDRIServerInfoPtr pATIDRIServer;
-
-   pATI->pDRIInfo->driverSwapMethod = DRI_HIDE_X_CONTEXT;
-
-   /* NOTE: DRIFinishScreenInit must be called before *DRIKernelInit
-    * because *DRIKernelInit requires that the hardware lock is held by
-    * the X server, and the first time the hardware lock is grabbed is
-    * in DRIFinishScreenInit.
-    */
-   if ( !DRIFinishScreenInit( pScreen ) ) {
-      ATIDRICloseScreen( pScreen );
-      return FALSE;
-   }
-
-   /* Initialize the DMA buffer list */
-   /* Need to do this before ATIDRIKernelInit so we can init the freelist */
-   if ( !ATIDRIAddBuffers( pScreen ) ) {
-      ATIDRICloseScreen( pScreen );
-      return FALSE;
-   }
-
-   /* Initialize the kernel data structures */
-   if ( !ATIDRIKernelInit( pScreen ) ) {
-      xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR, 
-		 "[drm] Failed to initialize the mach64.o kernel module\n");
-      xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR, 
-		 "[drm] Check the system log for more information.\n");
-      ATIDRICloseScreen( pScreen );
-      return FALSE;
-   }
-
-   if ( !ATIDRIMapBuffers( pScreen ) ) {
-      ATIDRICloseScreen( pScreen );
-      return FALSE;
-   }
-
-   /* Initialize IRQ */
-   ATIDRIIrqInit( pScreen );
-
-   pSAREAPriv = (ATISAREAPrivPtr) DRIGetSAREAPrivate( pScreen );
-   memset( pSAREAPriv, 0, sizeof(*pSAREAPriv) );
-
-   pATIDRI = (ATIDRIPtr)pATI->pDRIInfo->devPrivate;
-   pATIDRIServer = pATI->pDRIServerInfo;
-
-   pATIDRI->width = pScreenInfo->virtualX;
-   pATIDRI->height = pScreenInfo->virtualY;
-   pATIDRI->mem = pScreenInfo->videoRam * 1024;
-   pATIDRI->cpp = pScreenInfo->bitsPerPixel / 8;
-
-   pATIDRI->IsPCI = pATIDRIServer->IsPCI;
-   pATIDRI->AGPMode = pATIDRIServer->agpMode;
-
-   pATIDRI->frontOffset = pATIDRIServer->frontOffset;
-   pATIDRI->frontPitch = pATIDRIServer->frontPitch;
-
-   pATIDRI->backOffset = pATIDRIServer->backOffset;
-   pATIDRI->backPitch = pATIDRIServer->backPitch;
-
-   pATIDRI->depthOffset = pATIDRIServer->depthOffset;
-   pATIDRI->depthPitch = pATIDRIServer->depthPitch;
-
-   pATIDRI->textureOffset = pATIDRIServer->textureOffset;
-   pATIDRI->textureSize	= pATIDRIServer->textureSize;
-   pATIDRI->logTextureGranularity = pATIDRIServer->logTextureGranularity;
-
-   pATIDRI->regs = pATIDRIServer->regsHandle;
-   pATIDRI->regsSize = pATIDRIServer->regsSize;
-
-   pATIDRI->agp = pATIDRIServer->agpTexHandle;
-   pATIDRI->agpSize = pATIDRIServer->agpTexMapSize;
-   pATIDRI->logAgpTextureGranularity = pATIDRIServer->log2AGPTexGran;
-   pATIDRI->agpTextureOffset = pATIDRIServer->agpTexStart;
-
-   return TRUE;
-}
-
-/*
- * This function will attempt to get the Mach64 hardware back into shape
- * after a resume from disc. Its an extract from ATIDRIAgpInit and ATIDRIFinishScreenInit
- * This also calls a new ioctl in the mach64 DRM that in its turn is
- * an extraction of the hardware-affecting bits from mach64_do_init_drm()
- * (see atidrm.c)
- * I am assuming here that pATI->pDRIServerInfo doesn't change
- * elsewhere in incomaptible ways.
- * How will this code react to resuming after a failed resumeor pci based dri ?
- */
-void ATIDRIResume( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-   xf86DrvMsg( pScreen->myNum, X_INFO,
-		 "[RESUME] Attempting to re-init Mach64 hardware.\n");
-
-   if (!pATIDRIServer->IsPCI) {
-      if (!ATIDRISetAgpMode(pScreen))
-      return;
-
-      outm( AGP_BASE, drmAgpBase(pATI->drmFD) );
-   }
-}
-
-/* The screen is being closed, so clean up any state and free any
- * resources used by the DRI.
- */
-void ATIDRICloseScreen( ScreenPtr pScreen )
-{
-   ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-   ATIPtr pATI = ATIPTR(pScreenInfo);
-   ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-   drmMach64Init info;
-
-   /* Stop interrupt generation and handling if used */
-   if ( pATI->irq > 0 ) {
-      if ( drmCtlUninstHandler(pATI->drmFD) != 0 ) {
-	 xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-		    "[drm] Error uninstalling interrupt handler for IRQ %d\n", pATI->irq);
-      } else {
-	 xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-		    "[drm] Uninstalled interrupt handler for IRQ %d\n", pATI->irq);
-      }
-      pATI->irq = 0;
-   }
-
-   /* De-allocate DMA buffers */
-   if ( pATIDRIServer->drmBuffers ) {
-      drmUnmapBufs( pATIDRIServer->drmBuffers );
-      pATIDRIServer->drmBuffers = NULL;
-   }
-
-   /* De-allocate all kernel resources */
-   memset(&info, 0, sizeof(drmMach64Init));
-   info.func = DRM_MACH64_CLEANUP_DMA;
-   drmCommandWrite( pATI->drmFD, DRM_MACH64_INIT,
-		    &info, sizeof(drmMach64Init) );
-
-   /* De-allocate all AGP resources */
-   if ( pATIDRIServer->agpTexMap ) {
-      drmUnmap( pATIDRIServer->agpTexMap, pATIDRIServer->agpTexMapSize );
-      pATIDRIServer->agpTexMap = NULL;
-   }
-   if ( pATIDRIServer->bufferMap ) {
-      drmUnmap( pATIDRIServer->bufferMap, pATIDRIServer->bufferMapSize );
-      pATIDRIServer->bufferMap = NULL;
-   }
-   if ( pATIDRIServer->ringMap ) {
-      drmUnmap( pATIDRIServer->ringMap, pATIDRIServer->ringMapSize );
-      pATIDRIServer->ringMap = NULL;
-   }
-   if ( pATIDRIServer->agpHandle ) {
-      drmAgpUnbind( pATI->drmFD, pATIDRIServer->agpHandle );
-      drmAgpFree( pATI->drmFD, pATIDRIServer->agpHandle );
-      pATIDRIServer->agpHandle = 0;
-      drmAgpRelease( pATI->drmFD );
-   }
-
-   /* De-allocate all PCI resources */
-   if ( pATIDRIServer->IsPCI && pATIDRIServer->ringHandle ) {
-      drmRmMap( pATI->drmFD, pATIDRIServer->ringHandle );
-      pATIDRIServer->ringHandle = 0;
-   }
-
-   /* De-allocate all DRI resources */
-   DRICloseScreen( pScreen );
-
-   /* De-allocate all DRI data structures */
-   if ( pATI->pDRIInfo ) {
-      if ( pATI->pDRIInfo->devPrivate ) {
-	 xfree( pATI->pDRIInfo->devPrivate );
-	 pATI->pDRIInfo->devPrivate = NULL;
-      }
-      DRIDestroyInfoRec( pATI->pDRIInfo );
-      pATI->pDRIInfo = NULL;
-   }
-   if ( pATI->pDRIServerInfo ) {
-      xfree( pATI->pDRIServerInfo );
-      pATI->pDRIServerInfo = NULL;
-   }
-   if ( pATI->pVisualConfigs ) {
-      xfree( pATI->pVisualConfigs );
-      pATI->pVisualConfigs = NULL;
-   }
-   if ( pATI->pVisualConfigsPriv ) {
-      xfree( pATI->pVisualConfigsPriv );
-      pATI->pVisualConfigsPriv = NULL;
-   }
-}
diff --git a/src/atidri.h b/src/atidri.h
deleted file mode 100644
index 52d4b44..0000000
--- a/src/atidri.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 2000 Gareth Hughes
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * GARETH HUGHES BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Gareth Hughes <gareth at valinux.com>
- *   Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifndef __ATIDRI_H__
-#define __ATIDRI_H__ 1
-
-/* DRI driver defaults */
-#define ATI_DEFAULT_AGP_SIZE     8 /* MB (must be a power of 2 and > 4MB) */
-#define ATI_DEFAULT_AGP_MODE     1
-#define ATI_DEFAULT_BUFFER_SIZE  2 /* MB (must be page aligned) */
-
-#define ATI_AGP_MAX_MODE	 2
-
-/* Imported from the radeon suspend code writen by cpbotha at ieee.org
- * to enable suspend/resume support for the mach64 card.
- */
-extern void ATIDRIResume(ScreenPtr pScreen);
-extern Bool ATIDRIScreenInit(ScreenPtr);
-extern Bool ATIDRIFinishScreenInit(ScreenPtr);
-extern void ATIDRICloseScreen(ScreenPtr);
-
-#endif /* __ATIDRI_H__ */
diff --git a/src/atidripriv.h b/src/atidripriv.h
deleted file mode 100644
index 28c3ac6..0000000
--- a/src/atidripriv.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- mode: c; c-basic-offset: 3 -*- */
-/*
- * Copyright 1999, 2000 ATI Technologies Inc., Markham, Ontario,
- *                      Precision Insight, Inc., Cedar Park, Texas, and
- *                      VA Linux Systems Inc., Fremont, California.
- *
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation on the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial
- * portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, PRECISION INSIGHT, VA LINUX
- * SYSTEMS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Gareth Hughes <gareth at valinux.com>
- *   Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifndef __ATIDRIPRIV_H__
-#define __ATIDRIPRIV_H__ 1
-
-#include "GL/glxint.h"
-#include "GL/glxtokens.h"
-
-#define ATI_MAX_DRAWABLES	256
-
-typedef struct {
-    /* Nothing here yet */
-    int dummy;
-} ATIConfigPrivRec, *ATIConfigPrivPtr;
-
-typedef struct {
-    /* Nothing here yet */
-    int dummy;
-} ATIDRIContextRec, *ATIDRIContextPtr;
-
-extern void GlxSetVisualConfigs(int, __GLXvisualConfig *, void **);
-
-#endif /* __ATIDRIPRIV_H__ */
diff --git a/src/atidsp.c b/src/atidsp.c
deleted file mode 100644
index adea2cd..0000000
--- a/src/atidsp.c
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ati.h"
-#include "atichip.h"
-#include "atidsp.h"
-#include "atimach64io.h"
-#include "atividmem.h"
-
-/*
- * ATIDSPPreInit --
- *
- * This function initialises global variables used to set DSP registers on a
- * VT-B or later.
- */
-Bool
-ATIDSPPreInit
-(
-    int    iScreen,
-    ATIPtr pATI
-)
-{
-    CARD32 IOValue, dsp_config, dsp_on_off, vga_dsp_config, vga_dsp_on_off;
-    int trp;
-
-    /*
-     * VT-B's and later have additional post-dividers that are not powers of
-     * two.
-     */
-    pATI->ClockDescriptor.NumD = 8;
-
-    /* Retrieve XCLK settings */
-    IOValue = ATIMach64GetPLLReg(PLL_XCLK_CNTL);
-    pATI->XCLKPostDivider = GetBits(IOValue, PLL_XCLK_SRC_SEL);
-    pATI->XCLKReferenceDivider = 1;
-    switch (pATI->XCLKPostDivider)
-    {
-        case 0:  case 1:  case 2:  case 3:
-            break;
-
-        case 4:
-            pATI->XCLKReferenceDivider = 3;
-            pATI->XCLKPostDivider = 0;
-            break;
-
-        default:
-            xf86DrvMsg(iScreen, X_ERROR,
-                "Unsupported XCLK source:  %d.\n", pATI->XCLKPostDivider);
-            return FALSE;
-    }
-
-    pATI->XCLKPostDivider -= GetBits(IOValue, PLL_MFB_TIMES_4_2B);
-    pATI->XCLKFeedbackDivider = ATIMach64GetPLLReg(PLL_MCLK_FB_DIV);
-
-    xf86DrvMsgVerb(iScreen, X_INFO, 2,
-        "Engine XCLK %.3f MHz;  Refresh rate code %ld.\n",
-        ATIDivide(pATI->XCLKFeedbackDivider * pATI->ReferenceNumerator,
-                  pATI->XCLKReferenceDivider * pATI->ClockDescriptor.MaxM *
-                  pATI->ReferenceDenominator, 1 - pATI->XCLKPostDivider, 0) /
-        (double)1000.0,
-        GetBits(pATI->LockData.mem_cntl, CTL_MEM_REFRESH_RATE_B));
-
-    /* Compute maximum RAS delay and friends */
-    trp = GetBits(pATI->LockData.mem_cntl, CTL_MEM_TRP);
-    pATI->XCLKPageFaultDelay = GetBits(pATI->LockData.mem_cntl, CTL_MEM_TRCD) +
-        GetBits(pATI->LockData.mem_cntl, CTL_MEM_TCRD) + trp + 2;
-    pATI->XCLKMaxRASDelay = GetBits(pATI->LockData.mem_cntl, CTL_MEM_TRAS) +
-        trp + 2;
-    pATI->DisplayFIFODepth = 32;
-
-    if (pATI->Chip < ATI_CHIP_264VT4)
-    {
-        pATI->XCLKPageFaultDelay += 2;
-        pATI->XCLKMaxRASDelay += 3;
-        pATI->DisplayFIFODepth = 24;
-    }
-
-    switch (pATI->MemoryType)
-    {
-        case MEM_264_DRAM:
-            if (pATI->VideoRAM <= 1024)
-            {
-                pATI->DisplayLoopLatency = 10;
-            }
-            else
-            {
-                pATI->DisplayLoopLatency = 8;
-                pATI->XCLKPageFaultDelay += 2;
-            }
-            break;
-
-        case MEM_264_EDO:
-        case MEM_264_PSEUDO_EDO:
-            if (pATI->VideoRAM <= 1024)
-            {
-                pATI->DisplayLoopLatency = 9;
-            }
-            else
-            {
-                pATI->DisplayLoopLatency = 8;
-                pATI->XCLKPageFaultDelay++;
-            }
-            break;
-
-        case MEM_264_SDRAM:
-            if (pATI->VideoRAM <= 1024)
-            {
-                pATI->DisplayLoopLatency = 11;
-            }
-            else
-            {
-                pATI->DisplayLoopLatency = 10;
-                pATI->XCLKPageFaultDelay++;
-            }
-            break;
-
-        case MEM_264_SGRAM:
-            pATI->DisplayLoopLatency = 8;
-            pATI->XCLKPageFaultDelay += 3;
-            break;
-
-        default:                /* Set maximums */
-            pATI->DisplayLoopLatency = 11;
-            pATI->XCLKPageFaultDelay += 3;
-            break;
-    }
-
-    if (pATI->XCLKMaxRASDelay <= pATI->XCLKPageFaultDelay)
-        pATI->XCLKMaxRASDelay = pATI->XCLKPageFaultDelay + 1;
-
-    /* Allow BIOS to override */
-    dsp_config = inr(DSP_CONFIG);
-    dsp_on_off = inr(DSP_ON_OFF);
-    vga_dsp_config = inr(VGA_DSP_CONFIG);
-    vga_dsp_on_off = inr(VGA_DSP_ON_OFF);
-
-    if (dsp_config)
-        pATI->DisplayLoopLatency = GetBits(dsp_config, DSP_LOOP_LATENCY);
-
-    if ((!dsp_on_off && (pATI->Chip < ATI_CHIP_264GTPRO)) ||
-        ((dsp_on_off == vga_dsp_on_off) &&
-         (!dsp_config || !((dsp_config ^ vga_dsp_config) & DSP_XCLKS_PER_QW))))
-    {
-        if (ATIDivide(GetBits(vga_dsp_on_off, VGA_DSP_OFF),
-                      GetBits(vga_dsp_config, VGA_DSP_XCLKS_PER_QW), 5, 1) > 24)
-            pATI->DisplayFIFODepth = 32;
-        else
-            pATI->DisplayFIFODepth = 24;
-    }
-
-    return TRUE;
-}
-
-/*
- * ATIDSPSave --
- *
- * This function is called to remember DSP register values on VT-B and later
- * controllers.
- */
-void
-ATIDSPSave
-(
-    ATIPtr   pATI,
-    ATIHWPtr pATIHW
-)
-{
-    pATIHW->dsp_on_off = inr(DSP_ON_OFF);
-    pATIHW->dsp_config = inr(DSP_CONFIG);
-}
-
-
-/*
- * ATIDSPCalculate --
- *
- * This function sets up DSP register values for a VTB or later.  Note that
- * this would be slightly different if VCLK 0 or 1 were used for the mode
- * instead.  In that case, this function would set VGA_DSP_CONFIG and
- * VGA_DSP_ON_OFF, would have to zero out DSP_CONFIG and DSP_ON_OFF, and would
- * have to consider that VGA_DSP_CONFIG is partitioned slightly differently
- * than DSP_CONFIG.
- */
-void
-ATIDSPCalculate
-(
-    ATIPtr         pATI,
-    ATIHWPtr       pATIHW,
-    DisplayModePtr pMode
-)
-{
-    int Multiplier, Divider;
-    int RASMultiplier = pATI->XCLKMaxRASDelay, RASDivider = 1;
-    int dsp_precision, dsp_on, dsp_off, dsp_xclks;
-    int tmp, vshift, xshift;
-
-#   define Maximum_DSP_PRECISION ((int)MaxBits(DSP_PRECISION))
-
-    /* Compute a memory-to-screen bandwidth ratio */
-    Multiplier = pATI->XCLKFeedbackDivider *
-        pATI->ClockDescriptor.PostDividers[pATIHW->PostDivider];
-    Divider = pATIHW->FeedbackDivider * pATI->XCLKReferenceDivider;
-
-    {
-        Divider *= pATI->bitsPerPixel / 4;
-    }
-
-    /* Start by assuming a display FIFO width of 64 bits */
-    vshift = (6 - 2) - pATI->XCLKPostDivider;
-
-    if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))
-    {
-        /* Compensate for horizontal stretching */
-        Multiplier *= pATI->LCDHorizontal;
-        Divider *= pMode->HDisplay & ~7;
-
-        RASMultiplier *= pATI->LCDHorizontal;
-        RASDivider *= pMode->HDisplay & ~7;
-    }
-
-    /* Determine dsp_precision first */
-    tmp = ATIDivide(Multiplier * pATI->DisplayFIFODepth, Divider, vshift, -1);
-    for (dsp_precision = -5;  tmp;  dsp_precision++)
-        tmp >>= 1;
-    if (dsp_precision < 0)
-        dsp_precision = 0;
-    else if (dsp_precision > Maximum_DSP_PRECISION)
-        dsp_precision = Maximum_DSP_PRECISION;
-
-    xshift = 6 - dsp_precision;
-    vshift += xshift;
-
-    /* Move on to dsp_off */
-    dsp_off = ATIDivide(Multiplier * (pATI->DisplayFIFODepth - 1), Divider,
-        vshift, -1) - ATIDivide(1, 1, vshift - xshift, 1);
-
-    /* Next is dsp_on */
-    {
-        dsp_on = ATIDivide(Multiplier, Divider, vshift, 1);
-        tmp = ATIDivide(RASMultiplier, RASDivider, xshift, 1);
-        if (dsp_on < tmp)
-            dsp_on = tmp;
-        dsp_on += (tmp * 2) +
-            ATIDivide(pATI->XCLKPageFaultDelay, 1, xshift, 1);
-    }
-
-    /* Calculate rounding factor and apply it to dsp_on */
-    tmp = ((1 << (Maximum_DSP_PRECISION - dsp_precision)) - 1) >> 1;
-    dsp_on = ((dsp_on + tmp) / (tmp + 1)) * (tmp + 1);
-
-    if (dsp_on >= ((dsp_off / (tmp + 1)) * (tmp + 1)))
-    {
-        dsp_on = dsp_off - ATIDivide(Multiplier, Divider, vshift, -1);
-        dsp_on = (dsp_on / (tmp + 1)) * (tmp + 1);
-    }
-
-    /* Last but not least:  dsp_xclks */
-    dsp_xclks = ATIDivide(Multiplier, Divider, vshift + 5, 1);
-
-    /* Build DSP register contents */
-    pATIHW->dsp_on_off = SetBits(dsp_on, DSP_ON) |
-        SetBits(dsp_off, DSP_OFF);
-    pATIHW->dsp_config = SetBits(dsp_precision, DSP_PRECISION) |
-        SetBits(dsp_xclks, DSP_XCLKS_PER_QW) |
-        SetBits(pATI->DisplayLoopLatency, DSP_LOOP_LATENCY);
-}
-
-/*
- * ATIDSPSet --
- *
- * This function is called to set DSP registers on VT-B and later controllers.
- */
-void
-ATIDSPSet
-(
-    ATIPtr   pATI,
-    ATIHWPtr pATIHW
-)
-{
-    outr(DSP_ON_OFF, pATIHW->dsp_on_off);
-    outr(DSP_CONFIG, pATIHW->dsp_config);
-}
diff --git a/src/atidsp.h b/src/atidsp.h
deleted file mode 100644
index adf533c..0000000
--- a/src/atidsp.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIDSP_H___
-#define ___ATIDSP_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-extern Bool ATIDSPPreInit(int, ATIPtr);
-extern void ATIDSPSave(ATIPtr, ATIHWPtr);
-extern void ATIDSPCalculate(ATIPtr, ATIHWPtr, DisplayModePtr);
-extern void ATIDSPSet(ATIPtr, ATIHWPtr);
-
-#endif /* ___ATIDSP_H___ */
diff --git a/src/atii2c.c b/src/atii2c.c
deleted file mode 100644
index a13d647..0000000
--- a/src/atii2c.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "atii2c.h"
-#include "atimach64i2c.h"
-#include "atistruct.h"
-
-#include "xf86.h"
-
-/* This is derived from GATOS code, with a liberal sprinkling of bug fixes */
-
-/*
- * Some local macros for use by the mid-level I2C functions.
- */
-
-#define ATII2CDelay                                            \
-    (*pI2CBus->I2CUDelay)(pI2CBus, pI2CBus->HoldTime)
-
-
-#define ATII2CSCLDirOff                                        \
-    if (pATII2C->SCLDir != 0)                                  \
-        (*pATII2C->I2CSetBits)(pATII2C, pATI,                  \
-            pATII2C->I2CCur & ~pATII2C->SCLDir)
-
-#define ATII2CSCLDirOn                                         \
-    if (pATII2C->SCLDir != 0)                                  \
-        (*pATII2C->I2CSetBits)(pATII2C, pATI,                  \
-            pATII2C->I2CCur | pATII2C->SCLDir)
-
-#define ATII2CSDADirOff                                        \
-    if (pATII2C->SDADir != 0)                                  \
-        (*pATII2C->I2CSetBits)(pATII2C, pATI,                  \
-            pATII2C->I2CCur & ~pATII2C->SDADir)
-
-#define ATII2CSDADirOn                                         \
-    if (pATII2C->SDADir != 0)                                  \
-        (*pATII2C->I2CSetBits)(pATII2C, pATI,                  \
-            pATII2C->I2CCur | pATII2C->SDADir)
-
-
-#define ATII2CSCLBitGet                                        \
-    ((*pATII2C->I2CGetBits)(pATI) & pATII2C->SCLGet)
-
-#define ATII2CSCLBitOff                                        \
-    do                                                         \
-    {                                                          \
-        (*pATII2C->I2CSetBits)(pATII2C, pATI,                  \
-            pATII2C->I2CCur & ~pATII2C->SCLSet);               \
-        ATII2CDelay;                                           \
-    } while (0)
-
-#define ATII2CSCLBitOn                                         \
-    do                                                         \
-    {                                                          \
-        (*pATII2C->I2CSetBits)(pATII2C, pATI,                  \
-            pATII2C->I2CCur | pATII2C->SCLSet);                \
-        do      /* Wait until all devices have released SCL */ \
-        {                                                      \
-            ATII2CDelay;                                       \
-        } while (ATII2CSCLBitGet == 0);                        \
-    } while (0)
-
-
-#define ATII2CSDABitGet                                        \
-    ((*pATII2C->I2CGetBits)(pATI) & pATII2C->SDAGet)
-
-#define ATII2CSDABitOff                                        \
-    do                                                         \
-    {                                                          \
-        (*pATII2C->I2CSetBits)(pATII2C, pATI,                  \
-            pATII2C->I2CCur & ~pATII2C->SDASet);               \
-        ATII2CDelay;                                           \
-    } while (0)
-
-#define ATII2CSDABitOn                                         \
-    do                                                         \
-    {                                                          \
-        (*pATII2C->I2CSetBits)(pATII2C, pATI,                  \
-            pATII2C->I2CCur | pATII2C->SDASet);                \
-        ATII2CDelay;                                           \
-    } while (0)
-
-#define ATII2CSDABitSet(_flag)                                 \
-    do                                                         \
-    {                                                          \
-        if (_flag)                                             \
-            ATII2CSDABitOn;                                    \
-        else                                                   \
-            ATII2CSDABitOff;                                   \
-    } while (0)
-
-
-/*
- * ATII2CStart --
- *
- * This function puts a start signal on the I2C bus.
- */
-static Bool
-ATII2CStart
-(
-    I2CBusPtr pI2CBus,
-    int       timeout
-)
-{
-    ATII2CPtr pATII2C = pI2CBus->DriverPrivate.ptr;
-    ATIPtr    pATI    = pATII2C->pATI;
-
-    (void)timeout;
-
-    /*
-     * Set I2C line directions to out-bound.  SCL will remain out-bound until
-     * next I2C Stop.
-     */
-    ATII2CSCLDirOn;
-    ATII2CSDADirOn;
-
-    /*
-     * Send Start bit.  This is a pull-down of the data line while the clock
-     * line is pulled up.
-     */
-    ATII2CSDABitOn;
-    ATII2CSCLBitOn;
-    ATII2CSDABitOff;
-    ATII2CSCLBitOff;
-
-    return TRUE;
-}
-
-/*
- * ATII2CAddress --
- *
- * This function puts an 8-bit address on the I2C bus.
- */
-static Bool
-ATII2CAddress
-(
-    I2CDevPtr    pI2CDev,
-    I2CSlaveAddr Address
-)
-{
-    I2CBusPtr pI2CBus = pI2CDev->pI2CBus;
-
-    /* Send low byte of device address */
-    if ((*pI2CBus->I2CPutByte)(pI2CDev, (I2CByte)Address))
-    {
-        /* Send top byte of address, if appropriate */
-        if (((Address & 0x00F8U) != 0x00F0U) &&
-            ((Address & 0x00FEU) != 0x0000U))
-            return TRUE;
-
-        if ((*pI2CBus->I2CPutByte)(pI2CDev, (I2CByte)(Address >> 8)))
-            return TRUE;
-    }
-
-    /* Kill I2C transaction on failure */
-    (*pI2CBus->I2CStop)(pI2CDev);
-    return FALSE;
-}
-
-/*
- * ATII2CStop --
- *
- * This function puts a stop signal on the I2C bus.
- */
-static void
-ATII2CStop
-(
-    I2CDevPtr pI2CDev
-)
-{
-    I2CBusPtr pI2CBus = pI2CDev->pI2CBus;
-    ATII2CPtr pATII2C = pI2CBus->DriverPrivate.ptr;
-    ATIPtr    pATI    = pATII2C->pATI;
-
-    ATII2CSDADirOn;             /* Set data line direction to out-bound */
-
-    /*
-     * Send Stop bit.  This is a pull-up of the data line while the clock line
-     * is pulled up.
-     */
-    ATII2CSDABitOff;
-    ATII2CSCLBitOn;
-    ATII2CSDABitOn;
-    ATII2CSCLBitOff;
-
-    /* Reset I2C line directions to in-bound */
-    ATII2CSCLDirOff;
-    ATII2CSDADirOff;
-}
-
-/*
- * ATII2CPutByte --
- *
- * This function puts an 8-bit value on the I2C bus, starting with its MSB.
- */
-static Bool
-ATII2CPutByte
-(
-    I2CDevPtr pI2CDev,
-    I2CByte   Data
-)
-{
-    I2CBusPtr pI2CBus = pI2CDev->pI2CBus;
-    ATII2CPtr pATII2C = pI2CBus->DriverPrivate.ptr;
-    ATIPtr    pATI    = pATII2C->pATI;
-    int       i;
-    Bool      Result;
-
-    ATII2CSDADirOn;             /* Set data line direction to out-bound */
-
-    /* Send data byte */
-    for (i = 0;  i < 8;  i++)
-    {
-        ATII2CSDABitSet(Data & 0x80U);
-        ATII2CSCLBitOn;
-        ATII2CSCLBitOff;
-
-        Data <<= 1;
-    }
-
-    ATII2CSDABitOn;             /* Release data line */
-
-    ATII2CSDADirOff;            /* Set data line direction to in-bound */
-
-    ATII2CSCLBitOn;             /* Start bit-read clock pulse */
-
-    /* Get [N]ACK bit */
-    if (ATII2CSDABitGet)
-        Result = FALSE;
-    else
-        Result = TRUE;
-
-    ATII2CSCLBitOff;            /* End clock pulse */
-
-    return Result;
-}
-
-/*
- * ATII2CGetByte --
- *
- * This function retrieves an 8-bit value from the I2C bus.
- */
-static Bool
-ATII2CGetByte
-(
-    I2CDevPtr pI2CDev,
-    I2CByte   *pData,
-    Bool      Last
-)
-{
-    I2CBusPtr     pI2CBus = pI2CDev->pI2CBus;
-    ATII2CPtr     pATII2C = pI2CBus->DriverPrivate.ptr;
-    ATIPtr        pATI    = pATII2C->pATI;
-    unsigned long Value   = 1;
-
-    do
-    {
-        ATII2CSCLBitOn;         /* Start bit-read clock pulse */
-
-        /* Accumulate bit into byte value */
-        Value <<= 1;
-        if (ATII2CSDABitGet)
-            Value++;
-
-        ATII2CSCLBitOff;        /* End clock pulse */
-    } while (Value <= (unsigned long)((I2CByte)(-1)));
-
-    *pData = (I2CByte)Value;
-
-    ATII2CSDADirOn;             /* Set data line direction to out-bound */
-
-    /* Send [N]ACK bit */
-    ATII2CSDABitSet(Last);
-    ATII2CSCLBitOn;
-    ATII2CSCLBitOff;
-
-    if (!Last)
-        ATII2CSDABitOn;         /* Release data line */
-
-    ATII2CSDADirOff;            /* Set data line direction to in-bound */
-
-    return TRUE;
-}
-
-/*
- * ATICreateI2CBusRec --
- *
- * This function is called to initialise an I2CBusRec.
- */
-I2CBusPtr
-ATICreateI2CBusRec
-(
-    int    iScreen,
-    ATIPtr pATI,
-    char   *BusName
-)
-{
-    I2CBusPtr pI2CBus;
-    ATII2CPtr pATII2C = xnfcalloc(1, SizeOf(ATII2CRec));
-
-    if (!(pI2CBus = xf86CreateI2CBusRec()))
-    {
-        xf86DrvMsg(iScreen, X_WARNING, "Unable to allocate I2C Bus record.\n");
-        xfree(pATII2C);
-        return NULL;
-    }
-
-    /* Fill in generic structure fields */
-    pI2CBus->BusName           = BusName;
-    pI2CBus->scrnIndex         = iScreen;
-
-    pI2CBus->I2CAddress        = ATII2CAddress;
-    pI2CBus->I2CStart          = ATII2CStart;
-    pI2CBus->I2CStop           = ATII2CStop;
-    pI2CBus->I2CPutByte        = ATII2CPutByte;
-    pI2CBus->I2CGetByte        = ATII2CGetByte;
-
-    pI2CBus->DriverPrivate.ptr = pATII2C;
-
-    pATII2C->pATI              = pATI;
-
-    if (xf86I2CBusInit(pI2CBus))
-        return pI2CBus;
-
-    xf86DrvMsg(iScreen, X_WARNING,
-        "I2C bus %s initialisation failure.\n", BusName);
-    xf86DestroyI2CBusRec(pI2CBus, TRUE, TRUE);
-    xfree(pATII2C);
-    return NULL;
-}
-
-/*
- * ATII2CPreInit --
- *
- * This is called by ATIPreInit() to create I2C bus record(s) for the adapter.
- */
-void
-ATII2CPreInit
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI
-)
-{
-            if (!xf86LoadSubModule(pScreenInfo, "i2c"))
-                return;
-
-            ATIMach64I2CPreInit(pScreenInfo, pATI);
-}
-
-/*
- * ATII2CFreeScreen --
- *
- * This is called by ATIFreeScreen() to remove the driver's I2C interface.
- */
-void
-ATII2CFreeScreen
-(
-    int iScreen
-)
-{
-    I2CBusPtr pI2CBus, *ppI2CBus;
-    ATII2CPtr pATII2C;
-    int nI2CBus;
-
-    nI2CBus = xf86I2CGetScreenBuses(iScreen, &ppI2CBus);
-    while (--nI2CBus >= 0)
-    {
-        pI2CBus = ppI2CBus[nI2CBus];
-        pATII2C = pI2CBus->DriverPrivate.ptr;
-
-        xf86DestroyI2CBusRec(pI2CBus, TRUE, TRUE);
-        xfree(pATII2C);
-    }
-
-    xfree(ppI2CBus);
-}
diff --git a/src/atii2c.h b/src/atii2c.h
deleted file mode 100644
index ba3494e..0000000
--- a/src/atii2c.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATII2C_H___
-#define ___ATII2C_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-#include "xf86i2c.h"
-
-typedef struct _ATII2CRec ATII2CRec, *ATII2CPtr;
-
-struct _ATII2CRec
-{
-    ATIPtr pATI;
-    void   (*I2CSetBits) (ATII2CPtr, ATIPtr, CARD32);
-    CARD32 (*I2CGetBits) (ATIPtr);
-    CARD32 SCLDir, SCLGet, SCLSet;
-    CARD32 SDADir, SDAGet, SDASet;
-    CARD32 I2CCur;
-};
-
-extern void      ATII2CPreInit(ScrnInfoPtr, ATIPtr);
-extern I2CBusPtr ATICreateI2CBusRec(int, ATIPtr, char *);
-extern void      ATII2CFreeScreen(int);
-
-#endif /* ___ATII2C_H___ */
diff --git a/src/atiload.c b/src/atiload.c
deleted file mode 100644
index 621b0b0..0000000
--- a/src/atiload.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "aticursor.h"
-#include "atiload.h"
-#include "atistruct.h"
-
-/*
- * ATILoadModules --
- *
- * This function loads other modules required for a screen.
- */
-pointer
-ATILoadModules
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI
-)
-{
-    pointer fbPtr = NULL;
-
-    /* Load shadow frame buffer code if needed */
-    if (pATI->OptionShadowFB &&
-        !xf86LoadSubModule(pScreenInfo, "shadowfb"))
-        return NULL;
-
-    /* Load depth-specific entry points */
-    switch (pATI->bitsPerPixel)
-    {
-        case 8:
-        case 16:
-        case 24:
-        case 32:
-            fbPtr = xf86LoadSubModule(pScreenInfo, "fb");
-            break;
-
-        default:
-            return NULL;
-    }
-    if (!fbPtr)
-        return NULL;
-
-    /* Load ramdac module if needed */
-    if ((pATI->Cursor > ATI_CURSOR_SOFTWARE) &&
-        !xf86LoadSubModule(pScreenInfo, "ramdac"))
-        return NULL;
-
-#ifdef USE_EXA
-    /* Load EXA if needed */
-    if (pATI->useEXA && pATI->OptionAccel)
-    {
-        XF86ModReqInfo req;
-        int errmaj, errmin;
-
-        memset(&req, 0, sizeof(XF86ModReqInfo));
-        req.majorversion = 2;
-        req.minorversion = 0;
-        if (!LoadSubModule(pScreenInfo->module, "exa", NULL, NULL, NULL, &req,
-            &errmaj, &errmin))
-        {
-            LoaderErrorMsg(NULL, "exa", errmaj, errmin);
-            return NULL;
-        }
-    }
-#endif
-#ifdef USE_XAA
-    /* Load XAA if needed */
-    if (!pATI->useEXA && pATI->OptionAccel &&
-        !xf86LoadSubModule(pScreenInfo, "xaa"))
-        return NULL;
-#endif
-
-    return fbPtr;
-}
diff --git a/src/atiload.h b/src/atiload.h
deleted file mode 100644
index 168224c..0000000
--- a/src/atiload.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATILOAD_H___
-#define ___ATILOAD_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-extern pointer ATILoadModules(ScrnInfoPtr, ATIPtr);
-
-#endif /* ___ATILOAD_H___ */
diff --git a/src/atilock.c b/src/atilock.c
deleted file mode 100644
index ba70087..0000000
--- a/src/atilock.c
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
- * Copyright 1999 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atichip.h"
-#include "atilock.h"
-#include "atimach64io.h"
-#include "atiwonderio.h"
-
-/*
- * ATIUnlock --
- *
- * This function is entered to unlock registers and disable unwanted
- * emulations.  It saves the current state for later restoration by ATILock().
- */
-void
-ATIUnlock
-(
-    ATIPtr pATI
-)
-{
-    CARD32 tmp;
-
-#ifndef AVOID_CPIO
-
-    CARD32 saved_lcd_gen_ctrl = 0, lcd_gen_ctrl = 0;
-
-#endif /* AVOID_CPIO */
-
-    if (pATI->Unlocked)
-        return;
-    pATI->Unlocked = TRUE;
-
-    {
-        /* Reset everything */
-        pATI->LockData.bus_cntl = inr(BUS_CNTL);
-        if (pATI->Chip < ATI_CHIP_264VT4)
-        {
-            pATI->LockData.bus_cntl =
-                (pATI->LockData.bus_cntl & ~BUS_HOST_ERR_INT_EN) |
-                BUS_HOST_ERR_INT;
-            if (pATI->Chip < ATI_CHIP_264VTB)
-                pATI->LockData.bus_cntl =
-                    (pATI->LockData.bus_cntl & ~BUS_FIFO_ERR_INT_EN) |
-                        BUS_FIFO_ERR_INT;
-        }
-        tmp = pATI->LockData.bus_cntl & ~BUS_ROM_DIS;
-        if (pATI->Chip < ATI_CHIP_264VTB)
-            tmp |= SetBits(15, BUS_FIFO_WS);
-        else
-            tmp &= ~BUS_MASTER_DIS;
-        if (pATI->Chip >= ATI_CHIP_264VT)
-            tmp |= BUS_EXT_REG_EN;              /* Enable Block 1 */
-        outr(BUS_CNTL, tmp);
-        pATI->LockData.crtc_int_cntl = inr(CRTC_INT_CNTL);
-        outr(CRTC_INT_CNTL, (pATI->LockData.crtc_int_cntl & ~CRTC_INT_ENS) |
-            CRTC_INT_ACKS);
-
-#ifdef XF86DRI_DEVEL
-
-	if (pATI->irq > 0)
-	    outr(CRTC_INT_CNTL, (inr(CRTC_INT_CNTL) & ~CRTC_INT_ACKS) | 
-		 CRTC_VBLANK_INT_EN); /* Enable VBLANK interrupt - handled by DRM */
-
-#endif /* XF86DRI_DEVEL */
-
-        pATI->LockData.gen_test_cntl = inr(GEN_TEST_CNTL) &
-            (GEN_OVR_OUTPUT_EN | GEN_OVR_POLARITY | GEN_CUR_EN |
-                GEN_BLOCK_WR_EN);
-        tmp = pATI->LockData.gen_test_cntl & ~GEN_CUR_EN;
-        outr(GEN_TEST_CNTL, tmp | GEN_GUI_EN);
-        outr(GEN_TEST_CNTL, tmp);
-        outr(GEN_TEST_CNTL, tmp | GEN_GUI_EN);
-        tmp = pATI->LockData.crtc_gen_cntl = inr(CRTC_GEN_CNTL) &
-            ~(CRTC_EN | CRTC_LOCK_REGS);
-        if (pATI->Chip >= ATI_CHIP_264XL)
-            tmp = (tmp & ~CRTC_INT_ENS_X) | CRTC_INT_ACKS_X;
-        outr(CRTC_GEN_CNTL, tmp | CRTC_EN);
-        outr(CRTC_GEN_CNTL, tmp);
-        outr(CRTC_GEN_CNTL, tmp | CRTC_EN);
-        if ((pATI->LCDPanelID >= 0) && (pATI->Chip != ATI_CHIP_264LT))
-        {
-            pATI->LockData.lcd_index = inr(LCD_INDEX);
-            if (pATI->Chip >= ATI_CHIP_264XL)
-                outr(LCD_INDEX, pATI->LockData.lcd_index &
-                    ~(LCD_MONDET_INT_EN | LCD_MONDET_INT));
-
-            /*
-             * Prevent BIOS initiated display switches on dual-CRT controllers.
-             */
-            if (!pATI->OptionBIOSDisplay && (pATI->Chip != ATI_CHIP_264XL))
-            {
-#ifdef TV_OUT
-		pATI->LockData.scratch_reg3 = inr(SCRATCH_REG3) & ~DISPLAY_SWITCH_DISABLE;
-		outr(SCRATCH_REG3, pATI->LockData.scratch_reg3);
-#else
-		pATI->LockData.scratch_reg3 = inr(SCRATCH_REG3);
-		outr(SCRATCH_REG3,
-		     pATI->LockData.scratch_reg3 | DISPLAY_SWITCH_DISABLE);
-#endif /* TV_OUT */
-            }
-        }
-
-        pATI->LockData.mem_cntl = inr(MEM_CNTL);
-        if (pATI->Chip < ATI_CHIP_264CT)
-            outr(MEM_CNTL, pATI->LockData.mem_cntl &
-                ~(CTL_MEM_BNDRY | CTL_MEM_BNDRY_EN));
-
-        /* Disable feature connector on integrated controllers */
-        tmp = pATI->LockData.dac_cntl = inr(DAC_CNTL);
-        if (pATI->Chip >= ATI_CHIP_264CT)
-            tmp &= ~DAC_FEA_CON_EN;
-
-#ifndef AVOID_CPIO
-
-        /* Ensure VGA aperture is enabled */
-        pATI->LockData.config_cntl = inr(CONFIG_CNTL);
-        tmp |= DAC_VGA_ADR_EN;
-        outr(CONFIG_CNTL, pATI->LockData.config_cntl & ~CFG_VGA_DIS);
-
-#endif /* AVOID_CPIO */
-
-        outr(DAC_CNTL, tmp);
-
-        if (pATI->Chip >= ATI_CHIP_264VTB)
-        {
-            pATI->LockData.mpp_config = inr(MPP_CONFIG);
-            pATI->LockData.mpp_strobe_seq = inr(MPP_STROBE_SEQ);
-            pATI->LockData.tvo_cntl = inr(TVO_CNTL);
-
-            if (pATI->Chip >= ATI_CHIP_264GT2C)
-            {
-                pATI->LockData.hw_debug = inr(HW_DEBUG);
-
-                if (pATI->Chip >= ATI_CHIP_264GTPRO)
-                {
-                    if (!(pATI->LockData.hw_debug & CMDFIFO_SIZE_EN))
-                        outr(HW_DEBUG,
-                            pATI->LockData.hw_debug | CMDFIFO_SIZE_EN);
-
-                    pATI->LockData.i2c_cntl_0 =
-                        inr(I2C_CNTL_0) | (I2C_CNTL_STAT | I2C_CNTL_HPTR_RST);
-                    outr(I2C_CNTL_0,
-                        pATI->LockData.i2c_cntl_0 & ~I2C_CNTL_INT_EN);
-                    pATI->LockData.i2c_cntl_1 = inr(I2C_CNTL_1);
-                }
-                else
-                {
-                    if (pATI->LockData.hw_debug & CMDFIFO_SIZE_DIS)
-                        outr(HW_DEBUG,
-                            pATI->LockData.hw_debug & ~CMDFIFO_SIZE_DIS);
-                }
-            }
-        }
-    }
-
-#ifndef AVOID_CPIO
-
-    if (pATI->VGAAdapter)
-    {
-        if (pATI->CPIO_VGAWonder)
-        {
-            /*
-             * Ensure all registers are read/write and disable all non-VGA
-             * emulations.
-             */
-            pATI->LockData.b1 = ATIGetExtReg(0xB1U);
-            ATIModifyExtReg(pATI, 0xB1U, pATI->LockData.b1, 0xFCU, 0x00U);
-            pATI->LockData.b4 = ATIGetExtReg(0xB4U);
-            ATIModifyExtReg(pATI, 0xB4U, pATI->LockData.b4, 0x00U, 0x00U);
-            pATI->LockData.b5 = ATIGetExtReg(0xB5U);
-            ATIModifyExtReg(pATI, 0xB5U, pATI->LockData.b5, 0xBFU, 0x00U);
-            pATI->LockData.b6 = ATIGetExtReg(0xB6U);
-            ATIModifyExtReg(pATI, 0xB6U, pATI->LockData.b6, 0xDDU, 0x00U);
-            pATI->LockData.b8 = ATIGetExtReg(0xB8U);
-            ATIModifyExtReg(pATI, 0xB8U, pATI->LockData.b8, 0xC0U, 0x00U);
-            pATI->LockData.b9 = ATIGetExtReg(0xB9U);
-            ATIModifyExtReg(pATI, 0xB9U, pATI->LockData.b9, 0x7FU, 0x00U);
-            {
-                pATI->LockData.be = ATIGetExtReg(0xBEU);
-                ATIModifyExtReg(pATI, 0xBEU, pATI->LockData.be, 0xFAU, 0x01U);
-                {
-                    pATI->LockData.a6 = ATIGetExtReg(0xA6U);
-                    ATIModifyExtReg(pATI, 0xA6U, pATI->LockData.a6,
-                        0x7FU, 0x00U);
-                    pATI->LockData.ab = ATIGetExtReg(0xABU);
-                    ATIModifyExtReg(pATI, 0xABU, pATI->LockData.ab,
-                        0xE7U, 0x00U);
-                }
-            }
-        }
-
-        if (pATI->LCDPanelID >= 0)
-        {
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                saved_lcd_gen_ctrl = inr(LCD_GEN_CTRL);
-
-                /* Setup to unlock non-shadow registers */
-                lcd_gen_ctrl = saved_lcd_gen_ctrl & ~SHADOW_RW_EN;
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl);
-            }
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            {
-                saved_lcd_gen_ctrl = ATIMach64GetLCDReg(LCD_GEN_CNTL);
-
-                /* Setup to unlock non-shadow registers */
-                lcd_gen_ctrl = saved_lcd_gen_ctrl &
-                    ~(CRTC_RW_SELECT | SHADOW_RW_EN);
-                ATIMach64PutLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
-            }
-        }
-
-        ATISetVGAIOBase(pATI, inb(R_GENMO));
-
-        /*
-         * There's a bizarre interaction here.  If bit 0x80 of CRTC[17] is on,
-         * then CRTC[3] is read-only.  If bit 0x80 of CRTC[3] is off, then
-         * CRTC[17] is write-only (or a read attempt actually returns bits from
-         * C/EGA's light pen position).  This means that if both conditions are
-         * met, CRTC[17]'s value on server entry cannot be retrieved.
-         */
-
-        pATI->LockData.crt03 = tmp = GetReg(CRTX(pATI->CPIO_VGABase), 0x03U);
-        if ((tmp & 0x80U) ||
-            ((outb(CRTD(pATI->CPIO_VGABase), tmp | 0x80U),
-                tmp = inb(CRTD(pATI->CPIO_VGABase))) & 0x80U))
-        {
-            /* CRTC[16-17] should be readable */
-            pATI->LockData.crt11 = tmp =
-                GetReg(CRTX(pATI->CPIO_VGABase), 0x11U);
-            if (tmp & 0x80U)            /* Unprotect CRTC[0-7] */
-                outb(CRTD(pATI->CPIO_VGABase), tmp & 0x7FU);
-        }
-        else
-        {
-            /*
-             * Could not make CRTC[17] readable, so unprotect CRTC[0-7]
-             * replacing VSyncEnd with zero.  This zero will be replaced after
-             * acquiring the needed access.
-             */
-            unsigned int VSyncEnd, VBlankStart, VBlankEnd;
-            CARD8 crt07, crt09;
-
-            PutReg(CRTX(pATI->CPIO_VGABase), 0x11U, 0x20U);
-            /* Make CRTC[16-17] readable */
-            PutReg(CRTX(pATI->CPIO_VGABase), 0x03U, tmp | 0x80U);
-            /* Make vertical synch pulse as wide as possible */
-            crt07 = GetReg(CRTX(pATI->CPIO_VGABase), 0x07U);
-            crt09 = GetReg(CRTX(pATI->CPIO_VGABase), 0x09U);
-            VBlankStart = (((crt09 & 0x20U) << 4) | ((crt07 & 0x08U) << 5) |
-                GetReg(CRTX(pATI->CPIO_VGABase), 0x15U)) + 1;
-            VBlankEnd = (VBlankStart & 0x0300U) |
-                GetReg(CRTX(pATI->CPIO_VGABase), 0x16U);
-            if (VBlankEnd <= VBlankStart)
-                VBlankEnd += 0x0100U;
-            VSyncEnd = (((crt07 & 0x80U) << 2) | ((crt07 & 0x04U) << 6) |
-                GetReg(CRTX(pATI->CPIO_VGABase), 0x10U)) + 0x0FU;
-            if (VSyncEnd >= VBlankEnd)
-                VSyncEnd = VBlankEnd - 1;
-            pATI->LockData.crt11 = (VSyncEnd & 0x0FU) | 0x20U;
-            PutReg(CRTX(pATI->CPIO_VGABase), 0x11U, pATI->LockData.crt11);
-            pATI->LockData.crt11 |= 0x80U;
-        }
-
-        if (pATI->LCDPanelID >= 0)
-        {
-            /* Setup to unlock shadow registers */
-            lcd_gen_ctrl |= SHADOW_RW_EN;
-
-            if (pATI->Chip == ATI_CHIP_264LT)
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl);
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-                ATIMach64PutLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
-
-            /* Unlock shadow registers */
-            ATISetVGAIOBase(pATI, inb(R_GENMO));
-
-            pATI->LockData.shadow_crt03 = tmp =
-                GetReg(CRTX(pATI->CPIO_VGABase), 0x03U);
-            if ((tmp & 0x80U) ||
-                ((outb(CRTD(pATI->CPIO_VGABase), tmp | 0x80U),
-                    tmp = inb(CRTD(pATI->CPIO_VGABase))) & 0x80U))
-            {
-                /* CRTC[16-17] should be readable */
-                pATI->LockData.shadow_crt11 = tmp =
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x11U);
-                if (tmp & 0x80U)            /* Unprotect CRTC[0-7] */
-                {
-                    outb(CRTD(pATI->CPIO_VGABase), tmp & 0x7FU);
-                }
-                else if (!tmp && pATI->LockData.crt11)
-                {
-                    pATI->LockData.shadow_crt11 = tmp = pATI->LockData.crt11;
-                    outb(CRTD(pATI->CPIO_VGABase), tmp & 0x7FU);
-                }
-            }
-            else
-            {
-                /*
-                 * Could not make CRTC[17] readable, so unprotect CRTC[0-7]
-                 * replacing VSyncEnd with zero.  This zero will be replaced
-                 * after acquiring the needed access.
-                 */
-                unsigned int VSyncEnd, VBlankStart, VBlankEnd;
-                CARD8 crt07, crt09;
-
-                PutReg(CRTX(pATI->CPIO_VGABase), 0x11U, 0x20U);
-                /* Make CRTC[16-17] readable */
-                PutReg(CRTX(pATI->CPIO_VGABase), 0x03U, tmp | 0x80U);
-                /* Make vertical synch pulse as wide as possible */
-                crt07 = GetReg(CRTX(pATI->CPIO_VGABase), 0x07U);
-                crt09 = GetReg(CRTX(pATI->CPIO_VGABase), 0x09U);
-                VBlankStart = (((crt09 & 0x20U) << 4) |
-                    ((crt07 & 0x08U) << 5) |
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x15U)) + 1;
-                VBlankEnd = (VBlankStart & 0x0300U) |
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x16U);
-                if (VBlankEnd <= VBlankStart)
-                    VBlankEnd += 0x0100U;
-                VSyncEnd = (((crt07 & 0x80U) << 2) | ((crt07 & 0x04U) << 6) |
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x10U)) + 0x0FU;
-                if (VSyncEnd >= VBlankEnd)
-                    VSyncEnd = VBlankEnd - 1;
-                pATI->LockData.shadow_crt11 = (VSyncEnd & 0x0FU) | 0x20U;
-                PutReg(CRTX(pATI->CPIO_VGABase), 0x11U,
-                    pATI->LockData.shadow_crt11);
-                pATI->LockData.shadow_crt11 |= 0x80U;
-            }
-
-            /* Restore selection */
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                outr(LCD_GEN_CTRL, saved_lcd_gen_ctrl);
-            }
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            {
-                ATIMach64PutLCDReg(LCD_GEN_CNTL, saved_lcd_gen_ctrl);
-
-                /* Restore LCD index */
-                out8(LCD_INDEX, GetByte(pATI->LockData.lcd_index, 0));
-            }
-        }
-    }
-
-#endif /* AVOID_CPIO */
-
-}
-
-/*
- * ATILock --
- *
- * This function restores the state saved by ATIUnlock() above.
- */
-void
-ATILock
-(
-    ATIPtr pATI
-)
-{
-
-#ifndef AVOID_CPIO
-
-    CARD32 saved_lcd_gen_ctrl = 0, lcd_gen_ctrl = 0;
-
-#endif /* AVOID_CPIO */
-
-    if (!pATI->Unlocked)
-        return;
-    pATI->Unlocked = FALSE;
-
-#ifndef AVOID_CPIO
-
-    if (pATI->VGAAdapter)
-    {
-        if (pATI->LCDPanelID >= 0)
-        {
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                saved_lcd_gen_ctrl = inr(LCD_GEN_CTRL);
-
-                /* Setup to lock non-shadow registers */
-                lcd_gen_ctrl = saved_lcd_gen_ctrl & ~SHADOW_RW_EN;
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl);
-            }
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            {
-                saved_lcd_gen_ctrl = ATIMach64GetLCDReg(LCD_GEN_CNTL);
-
-                /* Setup to lock non-shadow registers */
-                lcd_gen_ctrl = saved_lcd_gen_ctrl &
-                    ~(CRTC_RW_SELECT | SHADOW_RW_EN);
-                ATIMach64PutLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
-            }
-        }
-
-        ATISetVGAIOBase(pATI, inb(R_GENMO));
-
-        /* Restore VGA locks */
-        PutReg(CRTX(pATI->CPIO_VGABase), 0x03U, pATI->LockData.crt03);
-        PutReg(CRTX(pATI->CPIO_VGABase), 0x11U, pATI->LockData.crt11);
-
-        if (pATI->LCDPanelID >= 0)
-        {
-            /* Setup to lock shadow registers */
-            lcd_gen_ctrl |= SHADOW_RW_EN;
-
-            if (pATI->Chip == ATI_CHIP_264LT)
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl);
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-                ATIMach64PutLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
-
-            /* Lock shadow registers */
-            ATISetVGAIOBase(pATI, inb(R_GENMO));
-
-            PutReg(CRTX(pATI->CPIO_VGABase), 0x03U,
-                pATI->LockData.shadow_crt03);
-            PutReg(CRTX(pATI->CPIO_VGABase), 0x11U,
-                pATI->LockData.shadow_crt11);
-
-            /* Restore selection */
-            if (pATI->Chip == ATI_CHIP_264LT)
-                outr(LCD_GEN_CTRL, saved_lcd_gen_ctrl);
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-                ATIMach64PutLCDReg(LCD_GEN_CNTL, saved_lcd_gen_ctrl);
-        }
-
-        if (pATI->CPIO_VGAWonder)
-        {
-            /*
-             * Restore emulation and protection bits in ATI extended VGA
-             * registers.
-             */
-            ATIModifyExtReg(pATI, 0xB1U, -1, 0xFCU, pATI->LockData.b1);
-            ATIModifyExtReg(pATI, 0xB4U, -1, 0x00U, pATI->LockData.b4);
-            ATIModifyExtReg(pATI, 0xB5U, -1, 0xBFU, pATI->LockData.b5);
-            ATIModifyExtReg(pATI, 0xB6U, -1, 0xDDU, pATI->LockData.b6);
-            ATIModifyExtReg(pATI, 0xB8U, -1, 0xC0U, pATI->LockData.b8 & 0x03U);
-            ATIModifyExtReg(pATI, 0xB9U, -1, 0x7FU, pATI->LockData.b9);
-            {
-                ATIModifyExtReg(pATI, 0xBEU, -1, 0xFAU, pATI->LockData.be);
-                {
-                    ATIModifyExtReg(pATI, 0xA6U, -1, 0x7FU, pATI->LockData.a6);
-                    ATIModifyExtReg(pATI, 0xABU, -1, 0xE7U, pATI->LockData.ab);
-                }
-            }
-            ATIModifyExtReg(pATI, 0xB8U, -1, 0xC0U, pATI->LockData.b8);
-        }
-    }
-
-#endif /* AVOID_CPIO */
-
-    {
-        /* Reset everything */
-        outr(BUS_CNTL, pATI->LockData.bus_cntl);
-
-        outr(CRTC_INT_CNTL, pATI->LockData.crtc_int_cntl);
-
-        outr(GEN_TEST_CNTL, pATI->LockData.gen_test_cntl | GEN_GUI_EN);
-        outr(GEN_TEST_CNTL, pATI->LockData.gen_test_cntl);
-        outr(GEN_TEST_CNTL, pATI->LockData.gen_test_cntl | GEN_GUI_EN);
-
-        outr(CRTC_GEN_CNTL, pATI->LockData.crtc_gen_cntl | CRTC_EN);
-        outr(CRTC_GEN_CNTL, pATI->LockData.crtc_gen_cntl);
-        outr(CRTC_GEN_CNTL, pATI->LockData.crtc_gen_cntl | CRTC_EN);
-
-#ifndef AVOID_CPIO
-
-        outr(CONFIG_CNTL, pATI->LockData.config_cntl);
-
-#endif /* AVOID_CPIO */
-
-        outr(DAC_CNTL, pATI->LockData.dac_cntl);
-        if (pATI->Chip < ATI_CHIP_264CT)
-            outr(MEM_CNTL, pATI->LockData.mem_cntl);
-        if ((pATI->LCDPanelID >= 0) && (pATI->Chip != ATI_CHIP_264LT))
-        {
-            outr(LCD_INDEX, pATI->LockData.lcd_index);
-#ifndef TV_OUT
-            if (!pATI->OptionBIOSDisplay && (pATI->Chip != ATI_CHIP_264XL))
-                outr(SCRATCH_REG3, pATI->LockData.scratch_reg3);
-#endif /* TV_OUT */
-        }
-        if (pATI->Chip >= ATI_CHIP_264VTB)
-        {
-            outr(MPP_CONFIG, pATI->LockData.mpp_config);
-            outr(MPP_STROBE_SEQ, pATI->LockData.mpp_strobe_seq);
-#ifndef TV_OUT
-            outr(TVO_CNTL, pATI->LockData.tvo_cntl);
-#endif /* TV_OUT */
-            if (pATI->Chip >= ATI_CHIP_264GT2C)
-            {
-                outr(HW_DEBUG, pATI->LockData.hw_debug);
-                if (pATI->Chip >= ATI_CHIP_264GTPRO)
-                {
-                    outr(I2C_CNTL_0, pATI->LockData.i2c_cntl_0);
-                    outr(I2C_CNTL_1, pATI->LockData.i2c_cntl_1);
-                }
-            }
-        }
-    }
-}
diff --git a/src/atilock.h b/src/atilock.h
deleted file mode 100644
index 9ded601..0000000
--- a/src/atilock.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 1999 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATILOCK_H___
-#define ___ATILOCK_H___ 1
-
-#include "atipriv.h"
-
-extern void ATIUnlock(ATIPtr);
-extern void ATILock(ATIPtr);
-
-#endif /* ___ATILOCK_H___ */
diff --git a/src/atimach64.c b/src/atimach64.c
deleted file mode 100644
index c7b0ecc..0000000
--- a/src/atimach64.c
+++ /dev/null
@@ -1,1341 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-/*
- * Copyright 1999-2000 Precision Insight, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-/* 
- * DRI support by:
- *    Manuel Teira
- *    Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "ati.h"
-#include "atibus.h"
-#include "atichip.h"
-#include "atidac.h"
-#include "atimach64.h"
-#include "atimach64accel.h"
-#include "atimach64io.h"
-#include "atirgb514.h"
-
-#ifndef DPMS_SERVER
-# define DPMS_SERVER
-#endif
-#include <X11/extensions/dpms.h>
-
-/*
- * ATIMach64PreInit --
- *
- * This function fills in the Mach64 portion of an ATIHWRec that is common to
- * all video modes generated by the driver.
- */
-void
-ATIMach64PreInit
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    if ((pATI->LockData.crtc_gen_cntl & CRTC_CSYNC_EN) && !pATI->OptionCSync)
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
-            "Using composite sync to match input timing.\n");
-        pATI->OptionCSync = TRUE;
-    }
-
-    pATIHW->bus_cntl = inr(BUS_CNTL);
-    if (pATI->Chip < ATI_CHIP_264VT4)
-        pATIHW->bus_cntl = (pATIHW->bus_cntl & ~BUS_HOST_ERR_INT_EN) |
-            BUS_HOST_ERR_INT;
-    if (pATI->Chip < ATI_CHIP_264VTB)
-    {
-        pATIHW->bus_cntl &= ~(BUS_FIFO_ERR_INT_EN | BUS_ROM_DIS);
-        pATIHW->bus_cntl |= SetBits(15, BUS_FIFO_WS) | BUS_FIFO_ERR_INT;
-    }
-    else if (pATI->MMIOInLinear)
-    {
-        pATIHW->bus_cntl &= ~BUS_APER_REG_DIS;
-    }
-    else
-    {
-        pATIHW->bus_cntl |= BUS_APER_REG_DIS;
-    }
-    if (pATI->Chip >= ATI_CHIP_264VT)
-        pATIHW->bus_cntl |= BUS_EXT_REG_EN;     /* Enable Block 1 */
-
-#ifdef AVOID_CPIO
-
-    pATIHW->mem_vga_wp_sel = SetBits(0, MEM_VGA_WPS0) |
-        SetBits(1, MEM_VGA_WPS1);
-    pATIHW->mem_vga_rp_sel = SetBits(0, MEM_VGA_RPS0) |
-        SetBits(1, MEM_VGA_RPS1);
-
-#else /* AVOID_CPIO */
-
-    pATIHW->mem_vga_wp_sel = SetBits(0, MEM_VGA_WPS0) |
-        SetBits(pATIHW->nPlane, MEM_VGA_WPS1);
-    pATIHW->mem_vga_rp_sel = SetBits(0, MEM_VGA_RPS0) |
-        SetBits(pATIHW->nPlane, MEM_VGA_RPS1);
-
-#endif /* AVOID_CPIO */
-
-    pATIHW->dac_cntl = inr(DAC_CNTL) &
-        ~(DAC1_CLK_SEL | DAC_PALETTE_ACCESS_CNTL | DAC_8BIT_EN);
-    if (pATI->Chip >= ATI_CHIP_264CT)
-        pATIHW->dac_cntl &= ~DAC_FEA_CON_EN;
-    if (pATI->rgbBits == 8)
-        pATIHW->dac_cntl |= DAC_8BIT_EN;
-
-    pATIHW->gen_test_cntl = pATI->LockData.gen_test_cntl & ~GEN_CUR_EN;
-    if (pATI->DAC == ATI_DAC_IBMRGB514)
-        pATIHW->gen_test_cntl |= GEN_OVR_OUTPUT_EN;
-
-    pATIHW->config_cntl = inr(CONFIG_CNTL);
-
-#ifndef AVOID_CPIO
-
-    if (pATI->VGAAdapter)
-    {
-        pATIHW->config_cntl |= CFG_MEM_VGA_AP_EN;
-    }
-    else
-
-#endif /* AVOID_CPIO */
-
-    {
-        pATIHW->config_cntl &= ~CFG_MEM_VGA_AP_EN;
-    }
-
-    if ((pATI->Chip < ATI_CHIP_264CT))
-    {
-        /* Replace linear aperture size and address */
-        pATIHW->config_cntl &= ~(CFG_MEM_AP_LOC | CFG_MEM_AP_SIZE);
-        pATIHW->config_cntl |= SetBits(pATI->LinearBase >> 22, CFG_MEM_AP_LOC);
-        if ((pATI->Chip < ATI_CHIP_264CT) && (pATI->VideoRAM < 4096))
-            pATIHW->config_cntl |= SetBits(1, CFG_MEM_AP_SIZE);
-        else
-            pATIHW->config_cntl |= SetBits(2, CFG_MEM_AP_SIZE);
-    }
-
-    if (pATI->Chip >= ATI_CHIP_264VTB)
-    {
-        pATIHW->mem_buf_cntl = inr(MEM_BUF_CNTL) | INVALIDATE_RB_CACHE;
-        pATIHW->mem_cntl = (pATI->LockData.mem_cntl &
-            ~(CTL_MEM_LOWER_APER_ENDIAN | CTL_MEM_UPPER_APER_ENDIAN)) |
-            SetBits(CTL_MEM_APER_BYTE_ENDIAN, CTL_MEM_LOWER_APER_ENDIAN);
-
-        switch (pATI->bitsPerPixel)
-        {
-            default:
-                pATIHW->mem_cntl |= SetBits(CTL_MEM_APER_BYTE_ENDIAN,
-                    CTL_MEM_UPPER_APER_ENDIAN);
-                break;
-
-            case 16:
-                pATIHW->mem_cntl |= SetBits(CTL_MEM_APER_WORD_ENDIAN,
-                    CTL_MEM_UPPER_APER_ENDIAN);
-                break;
-
-            case 32:
-                pATIHW->mem_cntl |= SetBits(CTL_MEM_APER_LONG_ENDIAN,
-                    CTL_MEM_UPPER_APER_ENDIAN);
-                break;
-        }
-
-        pATIHW->mpp_config = inr(MPP_CONFIG);
-        pATIHW->mpp_config &=
-            ~(MPP_PRESCALE | MPP_NSTATES | MPP_FORMAT | MPP_WAIT_STATE |
-              MPP_INSERT_WAIT | MPP_TRISTATE_ADDR | MPP_AUTO_INC_EN |
-              MPP_CHKREQ_EN | MPP_BUFFER_SIZE | MPP_BUFFER_MODE | MPP_BUSY);
-        pATIHW->mpp_config |=
-            (MPP_NSTATES_8 | MPP_FORMAT_DA8 | SetBits(4, MPP_WAIT_STATE) |
-             MPP_CHKRDY_EN | MPP_READ_EARLY | MPP_RW_MODE | MPP_EN);
-        pATIHW->mpp_strobe_seq = inr(MPP_STROBE_SEQ);
-        pATIHW->mpp_strobe_seq &= ~(MPP_STB0_SEQ | MPP_STB1_SEQ);
-        pATIHW->mpp_strobe_seq |=
-            SetBits(0x0087U, MPP_STB0_SEQ) | SetBits(0x0083U, MPP_STB1_SEQ);
-        pATIHW->tvo_cntl = 0;
-    }
-
-    /* Draw engine setup */
-    if (pATI->Block0Base)
-    {
-        CARD32 bus_cntl = inr(BUS_CNTL);
-        CARD32 config_cntl = inr(CONFIG_CNTL);
-
-        /* Ensure apertures are enabled */
-        outr(BUS_CNTL, pATIHW->bus_cntl);
-        outr(CONFIG_CNTL, pATIHW->config_cntl);
-
-        /*
-         * When possible, max out command FIFO size.
-         */
-        if (pATI->Chip >= ATI_CHIP_264VT4)
-
-#ifdef XF86DRI_DEVEL
-
-	    /* Changing the FIFO depth seems to interfere with DMA, so use 
-	     * default of 128 entries (0x01)
-	     */
-	    pATIHW->gui_cntl = (inm(GUI_CNTL) & ~CMDFIFO_SIZE_MODE) | 0x01;
-
-#else /* XF86DRI_DEVEL */
-
-            pATIHW->gui_cntl = inm(GUI_CNTL) & ~CMDFIFO_SIZE_MODE;
-
-#endif /* XF86DRI_DEVEL */
-
-        /* Initialise destination registers */
-        pATIHW->dst_off_pitch =
-            SetBits((pATI->displayWidth * pATI->XModifier) >> 3, DST_PITCH);
-        pATIHW->dst_cntl = DST_X_DIR | DST_Y_DIR | DST_LAST_PEL;
-
-        /* Initialise source registers */
-        pATIHW->src_off_pitch = pATIHW->dst_off_pitch;
-        pATIHW->src_width1 = pATIHW->src_height1 =
-            pATIHW->src_width2 = pATIHW->src_height2 = 1;
-        pATIHW->src_cntl = SRC_LINE_X_DIR;
-
-        /* Initialise scissor, allowing for offscreen areas */
-#ifdef USE_XAA
-        if (!pATI->useEXA)
-        {
-            int width, height, total;
-
-            pATIHW->sc_right = (pATI->displayWidth * pATI->XModifier) - 1;
-            width = pATI->displayWidth * pATI->bitsPerPixel;
-            total = pScreenInfo->videoRam * (1024 * 8);
-            height = (total + width - 1) / width;
-            if (height > ATIMach64MaxY + 1)
-                height = ATIMach64MaxY + 1;
-            pATIHW->sc_bottom = height - 1;
-        }
-#endif /* USE_XAA */
-
-#ifdef USE_EXA
-        if (pATI->useEXA)
-        {
-            pATIHW->sc_right = ATIMach64MaxX;
-            pATIHW->sc_bottom = ATIMach64MaxY;
-        }
-#endif /* USE_EXA */
-
-        pATI->sc_left_right = SetWord(pATI->NewHW.sc_right, 1) |
-            SetWord(pATI->NewHW.sc_left, 0);
-        pATI->sc_top_bottom = SetWord(pATI->NewHW.sc_bottom, 1) |
-            SetWord(pATI->NewHW.sc_top, 0);
-
-        /* Initialise data path */
-        pATIHW->dp_frgd_clr = (CARD32)(-1);
-        pATIHW->dp_write_mask = (CARD32)(-1);
-
-        switch (pATI->depth)
-        {
-            case 8:
-                pATIHW->dp_chain_mask = DP_CHAIN_8BPP;
-                pATIHW->dp_pix_width =
-                    SetBits(PIX_WIDTH_8BPP, DP_DST_PIX_WIDTH) |
-                    SetBits(PIX_WIDTH_8BPP, DP_SRC_PIX_WIDTH) |
-                    SetBits(PIX_WIDTH_1BPP, DP_HOST_PIX_WIDTH);
-                break;
-
-            case 15:
-                pATIHW->dp_chain_mask = DP_CHAIN_15BPP_1555;
-                pATIHW->dp_pix_width =
-                    SetBits(PIX_WIDTH_15BPP, DP_DST_PIX_WIDTH) |
-                    SetBits(PIX_WIDTH_15BPP, DP_SRC_PIX_WIDTH) |
-                    SetBits(PIX_WIDTH_1BPP, DP_HOST_PIX_WIDTH);
-                break;
-
-            case 16:
-                pATIHW->dp_chain_mask = DP_CHAIN_16BPP_565;
-                pATIHW->dp_pix_width =
-                    SetBits(PIX_WIDTH_16BPP, DP_DST_PIX_WIDTH) |
-                    SetBits(PIX_WIDTH_16BPP, DP_SRC_PIX_WIDTH) |
-                    SetBits(PIX_WIDTH_1BPP, DP_HOST_PIX_WIDTH);
-                break;
-
-            case 24:
-                if (pATI->bitsPerPixel == 24)
-                {
-                    pATIHW->dp_chain_mask = DP_CHAIN_24BPP_888;
-                    pATIHW->dp_pix_width =
-                        SetBits(PIX_WIDTH_8BPP, DP_DST_PIX_WIDTH) |
-                        SetBits(PIX_WIDTH_8BPP, DP_SRC_PIX_WIDTH) |
-                        SetBits(PIX_WIDTH_1BPP, DP_HOST_PIX_WIDTH);
-                }
-                else
-                {
-                    pATIHW->dp_chain_mask = DP_CHAIN_32BPP_8888;
-                    pATIHW->dp_pix_width =
-                        SetBits(PIX_WIDTH_32BPP, DP_DST_PIX_WIDTH) |
-                        SetBits(PIX_WIDTH_32BPP, DP_SRC_PIX_WIDTH) |
-                        SetBits(PIX_WIDTH_1BPP, DP_HOST_PIX_WIDTH);
-                }
-                break;
-
-            default:
-                break;
-        }
-
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-
-        pATIHW->dp_pix_width |= DP_BYTE_PIX_ORDER;
-
-#endif /* X_BYTE_ORDER */
-
-        pATIHW->dp_mix = SetBits(MIX_SRC, DP_FRGD_MIX) |
-            SetBits(MIX_DST, DP_BKGD_MIX);
-        pATIHW->dp_src = DP_MONO_SRC_ALLONES |
-            SetBits(SRC_FRGD, DP_FRGD_SRC) | SetBits(SRC_BKGD, DP_BKGD_SRC);
-
-        /* Initialise colour compare */
-        pATIHW->clr_cmp_msk = (1 << pATI->depth) - 1;
-
-        if (pATI->Block1Base)
-        {
-            pATIHW->overlay_y_x_start = SetBits(0, OVERLAY_Y_START) |
-                SetBits(0, OVERLAY_X_START) | OVERLAY_LOCK_START;
-            pATIHW->overlay_y_x_end = SetBits(0, OVERLAY_Y_END) |
-                SetBits(0, OVERLAY_X_END) | OVERLAY_LOCK_END;
-
-            pATIHW->overlay_graphics_key_clr =
-                (3 << ((2 * pATI->depth) / 3)) |
-                (2 << ((1 * pATI->depth) / 3)) |
-                (1 << ((0 * pATI->depth) / 3));
-            pATIHW->overlay_graphics_key_msk = (1 << pATI->depth) - 1;
-
-            pATIHW->overlay_key_cntl =
-                SetBits(OVERLAY_MIX_FALSE, OVERLAY_VIDEO_FN) |
-                SetBits(OVERLAY_MIX_EQUAL, OVERLAY_GRAPHICS_FN);
-
-            pATIHW->overlay_scale_cntl = SCALE_EN;
-
-            pATIHW->video_format = VIDEO_IN_VYUY422 | SCALER_IN_VYUY422;
-
-            if (pATI->Chip >= ATI_CHIP_264GTPRO)
-            {
-                /* These values are documented voodoo */
-                pATIHW->scaler_h_coeff0 = SetByte(0x20U, 1);
-                pATIHW->scaler_h_coeff1 = SetByte(0x0DU, 0) |
-                    SetByte(0x20U, 1) | SetByte(0x06U, 2) | SetByte(0x0DU, 3);
-                pATIHW->scaler_h_coeff2 = SetByte(0x0DU, 0) |
-                    SetByte(0x1CU, 1) | SetByte(0x0AU, 2) | SetByte(0x0DU, 3);
-                pATIHW->scaler_h_coeff3 = SetByte(0x0CU, 0) |
-                    SetByte(0x1AU, 1) | SetByte(0x0EU, 2) | SetByte(0x0CU, 3);
-                pATIHW->scaler_h_coeff4 = SetByte(0x0CU, 0) |
-                    SetByte(0x14U, 1) | SetByte(0x14U, 2) | SetByte(0x0CU, 3);
-            }
-        }
-
-        /* Restore aperture enablement */
-        outr(BUS_CNTL, bus_cntl);
-        outr(CONFIG_CNTL, config_cntl);
-    }
-}
-
-/*
- * ATIMach64Save --
- *
- * This function is called to save the Mach64 portion of the current video
- * state.
- */
-void
-ATIMach64Save
-(
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    pATIHW->crtc_h_total_disp = inr(CRTC_H_TOTAL_DISP);
-    pATIHW->crtc_h_sync_strt_wid = inr(CRTC_H_SYNC_STRT_WID);
-    pATIHW->crtc_v_total_disp = inr(CRTC_V_TOTAL_DISP);
-    pATIHW->crtc_v_sync_strt_wid = inr(CRTC_V_SYNC_STRT_WID);
-
-    pATIHW->crtc_off_pitch = inr(CRTC_OFF_PITCH);
-
-    pATIHW->crtc_gen_cntl = inr(CRTC_GEN_CNTL);
-
-    pATIHW->ovr_clr = inr(OVR_CLR);
-    pATIHW->ovr_wid_left_right = inr(OVR_WID_LEFT_RIGHT);
-    pATIHW->ovr_wid_top_bottom = inr(OVR_WID_TOP_BOTTOM);
-
-    pATIHW->cur_clr0 = inr(CUR_CLR0);
-    pATIHW->cur_clr1 = inr(CUR_CLR1);
-    pATIHW->cur_offset = inr(CUR_OFFSET);
-    pATIHW->cur_horz_vert_posn = inr(CUR_HORZ_VERT_POSN);
-    pATIHW->cur_horz_vert_off = inr(CUR_HORZ_VERT_OFF);
-
-    pATIHW->clock_cntl = inr(CLOCK_CNTL);
-
-    pATIHW->bus_cntl = inr(BUS_CNTL);
-
-    pATIHW->mem_vga_wp_sel = inr(MEM_VGA_WP_SEL);
-    pATIHW->mem_vga_rp_sel = inr(MEM_VGA_RP_SEL);
-
-    pATIHW->dac_cntl = inr(DAC_CNTL);
-
-    pATIHW->config_cntl = inr(CONFIG_CNTL);
-
-    pATIHW->gen_test_cntl = inr(GEN_TEST_CNTL) & ~GEN_CUR_EN;
-
-    if (pATI->Chip >= ATI_CHIP_264VTB)
-    {
-        pATIHW->mem_buf_cntl = inr(MEM_BUF_CNTL) | INVALIDATE_RB_CACHE;
-        pATIHW->mem_cntl = inr(MEM_CNTL);
-        pATIHW->mpp_config = inr(MPP_CONFIG);
-        pATIHW->mpp_strobe_seq = inr(MPP_STROBE_SEQ);
-        pATIHW->tvo_cntl = inr(TVO_CNTL);
-    }
-
-    /* Save draw engine state */
-    if (pATI->Block0Base && (pATIHW == &pATI->OldHW))
-    {
-        /* Ensure apertures are enabled */
-        outr(BUS_CNTL, pATI->NewHW.bus_cntl);
-        outr(CONFIG_CNTL, pATI->NewHW.config_cntl);
-
-        ATIMach64WaitForIdle(pATI);
-
-        /* Save FIFO size */
-        if (pATI->Chip >= ATI_CHIP_264VT4)
-            pATIHW->gui_cntl = inm(GUI_CNTL);
-
-        /* Save destination registers */
-        pATIHW->dst_off_pitch = inm(DST_OFF_PITCH);
-        pATIHW->dst_x = inm(DST_X);
-        pATIHW->dst_y = inm(DST_Y);
-        pATIHW->dst_height = inm(DST_HEIGHT);
-        pATIHW->dst_bres_err = inm(DST_BRES_ERR);
-        pATIHW->dst_bres_inc = inm(DST_BRES_INC);
-        pATIHW->dst_bres_dec = inm(DST_BRES_DEC);
-        pATIHW->dst_cntl = inm(DST_CNTL);
-
-        /* Save source registers */
-        pATIHW->src_off_pitch = inm(SRC_OFF_PITCH);
-        pATIHW->src_x = inm(SRC_X);
-        pATIHW->src_y = inm(SRC_Y);
-        pATIHW->src_width1 = inm(SRC_WIDTH1);
-        pATIHW->src_height1 = inm(SRC_HEIGHT1);
-        pATIHW->src_x_start = inm(SRC_X_START);
-        pATIHW->src_y_start = inm(SRC_Y_START);
-        pATIHW->src_width2 = inm(SRC_WIDTH2);
-        pATIHW->src_height2 = inm(SRC_HEIGHT2);
-        pATIHW->src_cntl = inm(SRC_CNTL);
-
-        if (pATI->Chip >= ATI_CHIP_264GTPRO)
-        {
-            CARD32 offset = TEX_LEVEL(inm(TEX_SIZE_PITCH));
-
-            /* Save 3D control & texture registers */
-            pATIHW->tex_offset = inm(TEX_0_OFF + offset);
-            pATIHW->scale_3d_cntl = inm(SCALE_3D_CNTL);
-        }
-
-        /* Save host data register */
-        pATIHW->host_cntl = inm(HOST_CNTL);
-
-        /* Save pattern registers */
-        pATIHW->pat_reg0 = inm(PAT_REG0);
-        pATIHW->pat_reg1 = inm(PAT_REG1);
-        pATIHW->pat_cntl = inm(PAT_CNTL);
-
-        /* Save scissor registers */
-        pATIHW->sc_left = pATI->sc_left = inm(SC_LEFT);
-        pATIHW->sc_right = pATI->sc_right = inm(SC_RIGHT);
-        pATIHW->sc_top = pATI->sc_top = inm(SC_TOP);
-        pATIHW->sc_bottom = pATI->sc_bottom = inm(SC_BOTTOM);
-
-        /* Save data path registers */
-        pATIHW->dp_bkgd_clr = inm(DP_BKGD_CLR);
-        pATIHW->dp_frgd_clr = inm(DP_FRGD_CLR);
-        pATIHW->dp_write_mask = inm(DP_WRITE_MASK);
-        pATIHW->dp_chain_mask = inm(DP_CHAIN_MASK);
-        pATIHW->dp_pix_width = inm(DP_PIX_WIDTH);
-        pATIHW->dp_mix = inm(DP_MIX);
-        pATIHW->dp_src = inm(DP_SRC);
-
-        /* Save colour compare registers */
-        pATIHW->clr_cmp_clr = inm(CLR_CMP_CLR);
-        pATIHW->clr_cmp_msk = inm(CLR_CMP_MSK);
-        pATIHW->clr_cmp_cntl = inm(CLR_CMP_CNTL);
-
-        /* Save context */
-        pATIHW->context_mask = inm(CONTEXT_MASK);
-
-        if (pATI->Chip >= ATI_CHIP_264GTPRO)
-        {
-            /* Save texture setup registers */
-            pATIHW->tex_size_pitch = inm(TEX_SIZE_PITCH);
-            pATIHW->tex_cntl = inm(TEX_CNTL);
-        }
-
-        if (pATI->Block1Base)
-        {
-            /* Save overlay & scaler registers */
-            pATIHW->overlay_y_x_start = inm(OVERLAY_Y_X_START);
-            pATIHW->overlay_y_x_end = inm(OVERLAY_Y_X_END);
-
-            pATIHW->overlay_graphics_key_clr = inm(OVERLAY_GRAPHICS_KEY_CLR);
-            pATIHW->overlay_graphics_key_msk = inm(OVERLAY_GRAPHICS_KEY_MSK);
-
-            pATIHW->overlay_key_cntl = inm(OVERLAY_KEY_CNTL);
-
-            pATIHW->overlay_scale_inc = inm(OVERLAY_SCALE_INC);
-            pATIHW->overlay_scale_cntl = inm(OVERLAY_SCALE_CNTL);
-
-            pATIHW->scaler_height_width = inm(SCALER_HEIGHT_WIDTH);
-
-            pATIHW->scaler_test = inm(SCALER_TEST);
-
-            pATIHW->video_format = inm(VIDEO_FORMAT);
-
-            if (pATI->Chip < ATI_CHIP_264VTB)
-            {
-                pATIHW->buf0_offset = inm(BUF0_OFFSET);
-                pATIHW->buf0_pitch = inm(BUF0_PITCH);
-                pATIHW->buf1_offset = inm(BUF1_OFFSET);
-                pATIHW->buf1_pitch = inm(BUF1_PITCH);
-            }
-            else
-            {
-                pATIHW->scaler_buf0_offset = inm(SCALER_BUF0_OFFSET);
-                pATIHW->scaler_buf1_offset = inm(SCALER_BUF1_OFFSET);
-                pATIHW->scaler_buf_pitch = inm(SCALER_BUF_PITCH);
-
-                pATIHW->overlay_exclusive_horz = inm(OVERLAY_EXCLUSIVE_HORZ);
-                pATIHW->overlay_exclusive_vert = inm(OVERLAY_EXCLUSIVE_VERT);
-
-                if (pATI->Chip >= ATI_CHIP_264GTPRO)
-                {
-                    pATIHW->scaler_colour_cntl = inm(SCALER_COLOUR_CNTL);
-
-                    pATIHW->scaler_h_coeff0 = inm(SCALER_H_COEFF0);
-                    pATIHW->scaler_h_coeff1 = inm(SCALER_H_COEFF1);
-                    pATIHW->scaler_h_coeff2 = inm(SCALER_H_COEFF2);
-                    pATIHW->scaler_h_coeff3 = inm(SCALER_H_COEFF3);
-                    pATIHW->scaler_h_coeff4 = inm(SCALER_H_COEFF4);
-
-                    pATIHW->scaler_buf0_offset_u = inm(SCALER_BUF0_OFFSET_U);
-                    pATIHW->scaler_buf0_offset_v = inm(SCALER_BUF0_OFFSET_V);
-                    pATIHW->scaler_buf1_offset_u = inm(SCALER_BUF1_OFFSET_U);
-                    pATIHW->scaler_buf1_offset_v = inm(SCALER_BUF1_OFFSET_V);
-                }
-            }
-        }
-
-        /* Restore aperture enablement */
-        outr(BUS_CNTL, pATIHW->bus_cntl);
-        outr(CONFIG_CNTL, pATIHW->config_cntl);
-    }
-}
-
-/*
- * ATIMach64ModeAdjust --
- *
- * This function is called to adjust horizontal and vertical timings.
- */
-static void
-ATIMach64ModeAdjust
-(
-    ATIPtr         pATI,
-    ATIHWPtr       pATIHW,
-    DisplayModePtr pMode
-)
-{
-    int VDisplay;
-
-    /* Clobber mode timings */
-    if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))
-    {
-        if (!pMode->CrtcHAdjusted && !pMode->CrtcVAdjusted &&
-            (!pATI->OptionLCDSync || (pMode->type & M_T_BUILTIN)))
-        {
-        int VScan;
-
-        pMode->Clock = pATI->LCDClock;
-        pMode->Flags &= ~(V_DBLSCAN | V_INTERLACE | V_CLKDIV2);
-
-        pMode->VScan = 0;
-
-        /*
-         * Use doublescanning or multiscanning to get around vertical blending
-         * limitations.
-         */
-        VScan = pATI->LCDVertical / pMode->VDisplay;
-        if (VScan > 1)
-        {
-            VScan = 2;
-            pMode->Flags |= V_DBLSCAN;
-        }
-
-        pMode->HSyncStart = pMode->HDisplay + pATI->LCDHSyncStart;
-        pMode->HSyncEnd = pMode->HSyncStart + pATI->LCDHSyncWidth;
-        pMode->HTotal = pMode->HDisplay + pATI->LCDHBlankWidth;
-
-        pMode->VSyncStart = pMode->VDisplay +
-            ATIDivide(pATI->LCDVSyncStart, VScan, 0, 0);
-        pMode->VSyncEnd = pMode->VSyncStart +
-            ATIDivide(pATI->LCDVSyncWidth, VScan, 0, 1);
-        pMode->VTotal = pMode->VDisplay +
-            ATIDivide(pATI->LCDVBlankWidth, VScan, 0, 0);
-        }
-    }
-
-    /* If not already done adjust horizontal timings */
-    if (!pMode->CrtcHAdjusted)
-    {
-        pMode->CrtcHAdjusted = TRUE;
-        /* XXX Deal with Blank Start/End and overscan later */
-        pMode->CrtcHDisplay = (pMode->HDisplay >> 3) - 1;
-        pMode->CrtcHSyncStart = (pMode->HSyncStart >> 3) - 1;
-        pMode->CrtcHSyncEnd = (pMode->HSyncEnd >> 3) - 1;
-        pMode->CrtcHTotal = (pMode->HTotal >> 3) - 1;
-
-        /* Make adjustments if sync pulse width is out-of-bounds */
-        if ((pMode->CrtcHSyncEnd - pMode->CrtcHSyncStart) >
-            (int)MaxBits(CRTC_H_SYNC_WID))
-        {
-            pMode->CrtcHSyncEnd =
-                pMode->CrtcHSyncStart + MaxBits(CRTC_H_SYNC_WID);
-        }
-        else if (pMode->CrtcHSyncStart == pMode->CrtcHSyncEnd)
-        {
-            if (pMode->CrtcHDisplay < pMode->CrtcHSyncStart)
-                pMode->CrtcHSyncStart--;
-            else if (pMode->CrtcHSyncEnd < pMode->CrtcHTotal)
-                pMode->CrtcHSyncEnd++;
-        }
-    }
-
-    /*
-     * Always re-do vertical adjustments.
-     */
-    pMode->CrtcVDisplay = pMode->VDisplay;
-    pMode->CrtcVSyncStart = pMode->VSyncStart;
-    pMode->CrtcVSyncEnd = pMode->VSyncEnd;
-    pMode->CrtcVTotal = pMode->VTotal;
-
-    if ((pATI->Chip >= ATI_CHIP_264CT) &&
-        ((pMode->Flags & V_DBLSCAN) || (pMode->VScan > 1)))
-    {
-        pMode->CrtcVDisplay <<= 1;
-        pMode->CrtcVSyncStart <<= 1;
-        pMode->CrtcVSyncEnd <<= 1;
-        pMode->CrtcVTotal <<= 1;
-    }
-
-    /*
-     * Might as well default to the same as VGA with respect to sync
-     * polarities.
-     */
-    if ((!(pMode->Flags & (V_PHSYNC | V_NHSYNC))) ||
-        (!(pMode->Flags & (V_PVSYNC | V_NVSYNC))))
-    {
-        pMode->Flags &= ~(V_PHSYNC | V_NHSYNC | V_PVSYNC | V_NVSYNC);
-
-        if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))
-            VDisplay = pATI->LCDVertical;
-        else
-            VDisplay = pMode->CrtcVDisplay;
-
-#ifdef TV_OUT
-        if (pATI->tvActive)
-            VDisplay = pMode->CrtcVDisplay;
-#endif
-
-        if (VDisplay < 400)
-            pMode->Flags |= V_PHSYNC | V_NVSYNC;
-        else if (VDisplay < 480)
-            pMode->Flags |= V_NHSYNC | V_PVSYNC;
-        else if (VDisplay < 768)
-            pMode->Flags |= V_NHSYNC | V_NVSYNC;
-        else
-            pMode->Flags |= V_PHSYNC | V_PVSYNC;
-    }
-
-    pMode->CrtcVDisplay--;
-    pMode->CrtcVSyncStart--;
-    pMode->CrtcVSyncEnd--;
-    pMode->CrtcVTotal--;
-    /* Make sure sync pulse is not too wide */
-    if ((pMode->CrtcVSyncEnd - pMode->CrtcVSyncStart) >
-         (int)MaxBits(CRTC_V_SYNC_WID))
-        pMode->CrtcVSyncEnd = pMode->CrtcVSyncStart + MaxBits(CRTC_V_SYNC_WID);
-    pMode->CrtcVAdjusted = TRUE;                /* Redundant */
-}
-
-/*
- * ATIMach64Calculate --
- *
- * This function is called to fill in the Mach64 portion of an ATIHWRec.
- */
-void
-ATIMach64Calculate
-(
-    ATIPtr         pATI,
-    ATIHWPtr       pATIHW,
-    DisplayModePtr pMode
-)
-{
-    ATIMach64ModeAdjust(pATI, pATIHW, pMode);
-
-    /* Build register contents */
-    pATIHW->crtc_h_total_disp =
-        SetBits(pMode->CrtcHTotal, CRTC_H_TOTAL) |
-        SetBits(pMode->CrtcHDisplay, CRTC_H_DISP);
-
-    pATIHW->crtc_h_sync_strt_wid =
-        SetBits(pMode->CrtcHSyncStart, CRTC_H_SYNC_STRT) |
-        SetBits(pMode->CrtcHSkew, CRTC_H_SYNC_DLY) |         /* ? */
-        SetBits(GetBits(pMode->CrtcHSyncStart, 0x0100U), CRTC_H_SYNC_STRT_HI) |
-        SetBits(pMode->CrtcHSyncEnd - pMode->CrtcHSyncStart, CRTC_H_SYNC_WID);
-    if (pMode->Flags & V_NHSYNC)
-        pATIHW->crtc_h_sync_strt_wid |= CRTC_H_SYNC_POL;
-
-    pATIHW->crtc_v_total_disp =
-        SetBits(pMode->CrtcVTotal, CRTC_V_TOTAL) |
-        SetBits(pMode->CrtcVDisplay, CRTC_V_DISP);
-
-    pATIHW->crtc_v_sync_strt_wid =
-        SetBits(pMode->CrtcVSyncStart, CRTC_V_SYNC_STRT) |
-        SetBits(pMode->CrtcVSyncEnd - pMode->CrtcVSyncStart, CRTC_V_SYNC_WID);
-    if (pMode->Flags & V_NVSYNC)
-        pATIHW->crtc_v_sync_strt_wid |= CRTC_V_SYNC_POL;
-
-    pATIHW->crtc_off_pitch = SetBits(pATI->displayWidth >> 3, CRTC_PITCH);
-
-    pATIHW->crtc_gen_cntl = inr(CRTC_GEN_CNTL) &
-        ~(CRTC_DBL_SCAN_EN | CRTC_INTERLACE_EN |
-          CRTC_HSYNC_DIS | CRTC_VSYNC_DIS | CRTC_CSYNC_EN |
-          CRTC_PIX_BY_2_EN | CRTC_DISPLAY_DIS | CRTC_VGA_XOVERSCAN |
-          CRTC_PIX_WIDTH | CRTC_BYTE_PIX_ORDER |
-          CRTC_VGA_128KAP_PAGING | CRTC_VFC_SYNC_TRISTATE |
-          CRTC_LOCK_REGS |              /* Already off, but ... */
-          CRTC_SYNC_TRISTATE | CRTC_DISP_REQ_EN |
-          CRTC_VGA_TEXT_132 | CRTC_CUR_B_TEST);
-    pATIHW->crtc_gen_cntl |=
-        CRTC_EXT_DISP_EN | CRTC_EN | CRTC_VGA_LINEAR | CRTC_CNT_EN;
-    switch (pATI->depth)
-    {
-        case 8:
-            pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_8BPP, CRTC_PIX_WIDTH);
-            break;
-
-        case 15:
-            pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_15BPP, CRTC_PIX_WIDTH);
-            break;
-
-        case 16:
-            pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_16BPP, CRTC_PIX_WIDTH);
-            break;
-
-        case 24:
-            if (pATI->bitsPerPixel == 24)
-            {
-                pATIHW->crtc_gen_cntl |=
-                    SetBits(PIX_WIDTH_24BPP, CRTC_PIX_WIDTH);
-                break;
-            }
-            if (pATI->bitsPerPixel != 32)
-                break;
-            /* Fall through */
-
-        case 32:
-            pATIHW->crtc_gen_cntl |= SetBits(PIX_WIDTH_32BPP, CRTC_PIX_WIDTH);
-            break;
-
-        default:
-            break;
-    }
-    if ((pMode->Flags & V_DBLSCAN) || (pMode->VScan > 1))
-        pATIHW->crtc_gen_cntl |= CRTC_DBL_SCAN_EN;
-    if (pMode->Flags & V_INTERLACE)
-        pATIHW->crtc_gen_cntl |= CRTC_INTERLACE_EN;
-    if (pATI->OptionCSync || (pMode->Flags & (V_CSYNC | V_PCSYNC)))
-        pATIHW->crtc_gen_cntl |= CRTC_CSYNC_EN;
-    /* For now, set display FIFO low water mark as high as possible */
-    if (pATI->Chip < ATI_CHIP_264VTB)
-        pATIHW->crtc_gen_cntl |= CRTC_FIFO_LWM;
-}
-
-/*
- * ATIMach64Set --
- *
- * This function is called to load a Mach64's accelerator CRTC and draw engine.
- */
-void
-ATIMach64Set
-(
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-
-#ifndef AVOID_CPIO
-
-    if (pATIHW->crtc == ATI_CRTC_MACH64)
-
-#endif /* AVOID_CPIO */
-
-    {
-        if ((pATIHW->FeedbackDivider > 0))
-            ATIClockSet(pATI, pATIHW);          /* Programme clock */
-
-        if (pATI->DAC == ATI_DAC_IBMRGB514)
-            ATIRGB514Set(pATI, pATIHW);
-
-        /* Load Mach64 CRTC registers */
-        outr(CRTC_H_TOTAL_DISP, pATIHW->crtc_h_total_disp);
-        outr(CRTC_H_SYNC_STRT_WID, pATIHW->crtc_h_sync_strt_wid);
-        outr(CRTC_V_TOTAL_DISP, pATIHW->crtc_v_total_disp);
-        outr(CRTC_V_SYNC_STRT_WID, pATIHW->crtc_v_sync_strt_wid);
-
-        outr(CRTC_OFF_PITCH, pATIHW->crtc_off_pitch);
-
-        /* Load overscan registers */
-        outr(OVR_CLR, pATIHW->ovr_clr);
-        outr(OVR_WID_LEFT_RIGHT, pATIHW->ovr_wid_left_right);
-        outr(OVR_WID_TOP_BOTTOM, pATIHW->ovr_wid_top_bottom);
-
-        /* Load hardware cursor registers */
-        outr(CUR_CLR0, pATIHW->cur_clr0);
-        outr(CUR_CLR1, pATIHW->cur_clr1);
-        outr(CUR_OFFSET, pATIHW->cur_offset);
-        outr(CUR_HORZ_VERT_POSN, pATIHW->cur_horz_vert_posn);
-        outr(CUR_HORZ_VERT_OFF, pATIHW->cur_horz_vert_off);
-
-        /* Set pixel clock */
-        outr(CLOCK_CNTL, pATIHW->clock_cntl | CLOCK_STROBE);
-
-        outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl | GEN_GUI_EN);
-        outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl);
-        outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl | GEN_GUI_EN);
-
-        /* Finalise CRTC setup and turn on the screen */
-        outr(CRTC_GEN_CNTL, pATIHW->crtc_gen_cntl);
-    }
-
-    /* Load draw engine */
-    if (pATI->Block0Base)
-    {
-        /* Clobber MMIO cache */
-        (void)memset(pATI->MMIOCached, 0, SizeOf(pATI->MMIOCached));
-
-        /* Ensure apertures are enabled */
-        outr(BUS_CNTL, pATI->NewHW.bus_cntl);
-        outr(CONFIG_CNTL, pATI->NewHW.config_cntl);
-
-        pATI->EngineIsBusy = TRUE;      /* Force engine poll */
-        ATIMach64WaitForIdle(pATI);
-
-        /* Load FIFO size */
-        if (pATI->Chip >= ATI_CHIP_264VT4)
-        {
-            outm(GUI_CNTL, pATIHW->gui_cntl);
-            pATI->nAvailableFIFOEntries = 0;
-            ATIMach64PollEngineStatus(pATI);
-        }
-
-        /* Set FIFO depth */
-        pATI->nFIFOEntries = pATI->nAvailableFIFOEntries;
-
-        /* Load destination registers */
-        ATIMach64WaitForFIFO(pATI, 7);
-        outf(DST_OFF_PITCH, pATIHW->dst_off_pitch);
-        outf(DST_Y_X, SetWord(pATIHW->dst_x, 1) | SetWord(pATIHW->dst_y, 0));
-        outf(DST_HEIGHT, pATIHW->dst_height);
-        outf(DST_BRES_ERR, pATIHW->dst_bres_err);
-        outf(DST_BRES_INC, pATIHW->dst_bres_inc);
-        outf(DST_BRES_DEC, pATIHW->dst_bres_dec);
-        outf(DST_CNTL, pATIHW->dst_cntl);
-
-        if (pATI->Chip >= ATI_CHIP_264GTPRO)
-        {
-            /* Load ROP unit registers */
-            ATIMach64WaitForFIFO(pATI, 2);
-            outf(Z_CNTL, 0);
-            outf(ALPHA_TST_CNTL, 0);
-        }
-
-        /* Load source registers */
-        ATIMach64WaitForFIFO(pATI, 6);
-        outf(SRC_OFF_PITCH, pATIHW->src_off_pitch);
-        outf(SRC_Y_X, SetWord(pATIHW->src_x, 1) | SetWord(pATIHW->src_y, 0));
-        outf(SRC_HEIGHT1_WIDTH1,
-            SetWord(pATIHW->src_width1, 1) | SetWord(pATIHW->src_height1, 0));
-        outf(SRC_Y_X_START,
-            SetWord(pATIHW->src_x_start, 1) | SetWord(pATIHW->src_y_start, 0));
-        outf(SRC_HEIGHT2_WIDTH2,
-            SetWord(pATIHW->src_width2, 1) | SetWord(pATIHW->src_height2, 0));
-        outf(SRC_CNTL, pATIHW->src_cntl);
-
-        if (pATI->Chip >= ATI_CHIP_264GTPRO)
-        {
-            CARD32 offset = TEX_LEVEL(pATIHW->tex_size_pitch);
-
-            /* Load 3D control & texture registers */
-            ATIMach64WaitForFIFO(pATI, 2);
-            outf(TEX_0_OFF + offset, pATIHW->tex_offset);
-            outf(SCALE_3D_CNTL, pATIHW->scale_3d_cntl);
-        }
-
-        /* Load host data register */
-        ATIMach64WaitForFIFO(pATI, 1);
-        outf(HOST_CNTL, pATIHW->host_cntl);
-
-        /* Set host transfer window address and size clamp */
-        pATI->pHOST_DATA = ATIHostDataAddr(HOST_DATA_0);
-        pATI->nHostFIFOEntries = pATI->nFIFOEntries >> 1;
-        if (pATI->nHostFIFOEntries > 16)
-            pATI->nHostFIFOEntries = 16;
-
-        /* Load pattern registers */
-        ATIMach64WaitForFIFO(pATI, 3);
-        outf(PAT_REG0, pATIHW->pat_reg0);
-        outf(PAT_REG1, pATIHW->pat_reg1);
-        outf(PAT_CNTL, pATIHW->pat_cntl);
-
-        /* Load scissor registers */
-        ATIMach64WaitForFIFO(pATI, 2);
-        outf(SC_LEFT_RIGHT,
-            SetWord(pATIHW->sc_right, 1) | SetWord(pATIHW->sc_left, 0));
-        outf(SC_TOP_BOTTOM,
-            SetWord(pATIHW->sc_bottom, 1) | SetWord(pATIHW->sc_top, 0));
-        pATI->sc_left = pATIHW->sc_left;
-        pATI->sc_right = pATIHW->sc_right;
-        pATI->sc_top = pATIHW->sc_top;
-        pATI->sc_bottom = pATIHW->sc_bottom;
-
-        /* Load data path registers */
-        ATIMach64WaitForFIFO(pATI, 7);
-        outf(DP_BKGD_CLR, pATIHW->dp_bkgd_clr);
-        outf(DP_FRGD_CLR, pATIHW->dp_frgd_clr);
-        outf(DP_WRITE_MASK, pATIHW->dp_write_mask);
-        outf(DP_CHAIN_MASK, pATIHW->dp_chain_mask);
-        outf(DP_PIX_WIDTH, pATIHW->dp_pix_width);
-        outf(DP_MIX, pATIHW->dp_mix);
-        outf(DP_SRC, pATIHW->dp_src);
-
-        /* Load colour compare registers */
-        ATIMach64WaitForFIFO(pATI, 3);
-        outf(CLR_CMP_CLR, pATIHW->clr_cmp_clr);
-        outf(CLR_CMP_MSK, pATIHW->clr_cmp_msk);
-        outf(CLR_CMP_CNTL, pATIHW->clr_cmp_cntl);
-
-        /* Load context mask */
-        ATIMach64WaitForFIFO(pATI, 1);
-        outf(CONTEXT_MASK, pATIHW->context_mask);
-
-        if (pATI->Chip >= ATI_CHIP_264GTPRO)
-        {
-            /* Load texture setup registers */
-            ATIMach64WaitForFIFO(pATI, 2);
-            outf(TEX_SIZE_PITCH, pATIHW->tex_size_pitch);
-            outf(TEX_CNTL, pATIHW->tex_cntl);
-        }
-
-        if (pATI->Block1Base)
-        {
-            /* Load overlay & scaler registers */
-            ATIMach64WaitForFIFO(pATI, 10);
-            outf(OVERLAY_Y_X_START, pATIHW->overlay_y_x_start);
-            outf(OVERLAY_Y_X_END, pATIHW->overlay_y_x_end);
-
-            outf(OVERLAY_GRAPHICS_KEY_CLR, pATIHW->overlay_graphics_key_clr);
-            outf(OVERLAY_GRAPHICS_KEY_MSK, pATIHW->overlay_graphics_key_msk);
-
-            outf(OVERLAY_KEY_CNTL, pATIHW->overlay_key_cntl);
-
-            outf(OVERLAY_SCALE_INC, pATIHW->overlay_scale_inc);
-            outf(OVERLAY_SCALE_CNTL, pATIHW->overlay_scale_cntl);
-
-            outf(SCALER_HEIGHT_WIDTH, pATIHW->scaler_height_width);
-
-            outf(SCALER_TEST, pATIHW->scaler_test);
-
-            outf(VIDEO_FORMAT, pATIHW->video_format);
-
-            if (pATI->Chip < ATI_CHIP_264VTB)
-            {
-                ATIMach64WaitForFIFO(pATI, 4);
-                outf(BUF0_OFFSET, pATIHW->buf0_offset);
-                outf(BUF0_PITCH, pATIHW->buf0_pitch);
-                outf(BUF1_OFFSET, pATIHW->buf1_offset);
-                outf(BUF1_PITCH, pATIHW->buf1_pitch);
-            }
-            else
-            {
-                ATIMach64WaitForFIFO(pATI, 5);
-                outf(SCALER_BUF0_OFFSET, pATIHW->scaler_buf0_offset);
-                outf(SCALER_BUF1_OFFSET, pATIHW->scaler_buf1_offset);
-                outf(SCALER_BUF_PITCH, pATIHW->scaler_buf_pitch);
-
-                outf(OVERLAY_EXCLUSIVE_HORZ, pATIHW->overlay_exclusive_horz);
-                outf(OVERLAY_EXCLUSIVE_VERT, pATIHW->overlay_exclusive_vert);
-
-                if (pATI->Chip >= ATI_CHIP_264GTPRO)
-                {
-                    ATIMach64WaitForFIFO(pATI, 10);
-                    outf(SCALER_COLOUR_CNTL, pATIHW->scaler_colour_cntl);
-
-                    outf(SCALER_H_COEFF0, pATIHW->scaler_h_coeff0);
-                    outf(SCALER_H_COEFF1, pATIHW->scaler_h_coeff1);
-                    outf(SCALER_H_COEFF2, pATIHW->scaler_h_coeff2);
-                    outf(SCALER_H_COEFF3, pATIHW->scaler_h_coeff3);
-                    outf(SCALER_H_COEFF4, pATIHW->scaler_h_coeff4);
-
-                    outf(SCALER_BUF0_OFFSET_U, pATIHW->scaler_buf0_offset_u);
-                    outf(SCALER_BUF0_OFFSET_V, pATIHW->scaler_buf0_offset_v);
-                    outf(SCALER_BUF1_OFFSET_U, pATIHW->scaler_buf1_offset_u);
-                    outf(SCALER_BUF1_OFFSET_V, pATIHW->scaler_buf1_offset_v);
-                }
-            }
-        }
-
-        ATIMach64WaitForIdle(pATI);
-
-        if (pATI->OptionMMIOCache)
-        {
-            /*
-             * Enable write caching for selected MMIO registers.  This can only
-             * be done for those registers whose value does not change without
-             * driver intervention.
-             */
-
-            CacheRegister(SRC_CNTL);
-
-            if (pATI->Chip >= ATI_CHIP_264GTPRO)
-            {
-                CacheRegister(SCALE_3D_CNTL);
-            }
-
-            CacheRegister(HOST_CNTL);
-
-            CacheRegister(PAT_REG0);
-            CacheRegister(PAT_REG1);
-            CacheRegister(PAT_CNTL);
-
-            CacheRegister(SC_LEFT_RIGHT);
-            CacheRegister(SC_TOP_BOTTOM);
-
-            CacheRegister(DP_BKGD_CLR);
-            CacheRegister(DP_FRGD_CLR);
-            CacheRegister(DP_PIX_WIDTH);
-            CacheRegister(DP_MIX);
-
-            CacheRegister(CLR_CMP_CLR);
-            CacheRegister(CLR_CMP_MSK);
-            CacheRegister(CLR_CMP_CNTL);
-
-            if (pATI->Chip >= ATI_CHIP_264GTPRO)
-            {
-                CacheRegister(TEX_SIZE_PITCH);
-            }
-
-            if (pATI->Block1Base)
-            {
-                CacheRegister(OVERLAY_Y_X_START);
-                CacheRegister(OVERLAY_Y_X_END);
-
-                CacheRegister(OVERLAY_GRAPHICS_KEY_CLR);
-                CacheRegister(OVERLAY_GRAPHICS_KEY_MSK);
-
-                CacheRegister(OVERLAY_KEY_CNTL);
-
-                CacheRegister(OVERLAY_SCALE_INC);
-                CacheRegister(OVERLAY_SCALE_CNTL);
-
-                CacheRegister(SCALER_HEIGHT_WIDTH);
-
-                CacheRegister(SCALER_TEST);
-
-                CacheRegister(VIDEO_FORMAT);
-
-                if (pATI->Chip < ATI_CHIP_264VTB)
-                {
-                    CacheRegister(BUF0_OFFSET);
-                    CacheRegister(BUF0_PITCH);
-                    CacheRegister(BUF1_OFFSET);
-                    CacheRegister(BUF1_PITCH);
-                }
-                else
-                {
-                    CacheRegister(SCALER_BUF0_OFFSET);
-                    CacheRegister(SCALER_BUF1_OFFSET);
-                    CacheRegister(SCALER_BUF_PITCH);
-
-                    CacheRegister(OVERLAY_EXCLUSIVE_HORZ);
-                    CacheRegister(OVERLAY_EXCLUSIVE_VERT);
-
-                    if (pATI->Chip >= ATI_CHIP_264GTPRO)
-                    {
-                        CacheRegister(SCALER_COLOUR_CNTL);
-
-                        CacheRegister(SCALER_H_COEFF0);
-                        CacheRegister(SCALER_H_COEFF1);
-                        CacheRegister(SCALER_H_COEFF2);
-                        CacheRegister(SCALER_H_COEFF3);
-                        CacheRegister(SCALER_H_COEFF4);
-
-                        CacheRegister(SCALER_BUF0_OFFSET_U);
-                        CacheRegister(SCALER_BUF0_OFFSET_V);
-                        CacheRegister(SCALER_BUF1_OFFSET_U);
-                        CacheRegister(SCALER_BUF1_OFFSET_V);
-                    }
-                }
-            }
-        }
-    }
-
-#ifndef AVOID_CPIO
-
-    if (pATIHW->crtc == ATI_CRTC_MACH64)
-
-#endif /* AVOID_CPIO */
-
-    {
-        /* Aperture setup */
-        outr(MEM_VGA_WP_SEL, pATIHW->mem_vga_wp_sel);
-        outr(MEM_VGA_RP_SEL, pATIHW->mem_vga_rp_sel);
-
-        outr(DAC_CNTL, pATIHW->dac_cntl);
-
-        outr(CONFIG_CNTL, pATIHW->config_cntl);
-        outr(BUS_CNTL, pATIHW->bus_cntl);
-
-        if (pATI->Chip >= ATI_CHIP_264VTB)
-        {
-            outr(MEM_BUF_CNTL, pATIHW->mem_buf_cntl);
-            outr(MEM_CNTL, pATIHW->mem_cntl);
-            outr(MPP_CONFIG, pATIHW->mpp_config);
-            outr(MPP_STROBE_SEQ, pATIHW->mpp_strobe_seq);
-            outr(TVO_CNTL, pATIHW->tvo_cntl);
-        }
-    }
-}
-
-/*
- * ATIMach64SaveScreen --
- *
- * This function blanks or unblanks a Mach64 screen.
- */
-void
-ATIMach64SaveScreen
-(
-    ATIPtr pATI,
-    int    Mode
-)
-{
-    CARD32 crtc_gen_cntl = inr(CRTC_GEN_CNTL);
-
-    switch (Mode)
-    {
-        case SCREEN_SAVER_OFF:
-        case SCREEN_SAVER_FORCER:
-            outr(CRTC_GEN_CNTL, crtc_gen_cntl & ~CRTC_DISPLAY_DIS);
-            break;
-
-        case SCREEN_SAVER_ON:
-        case SCREEN_SAVER_CYCLE:
-            outr(CRTC_GEN_CNTL, crtc_gen_cntl | CRTC_DISPLAY_DIS);
-            break;
-
-        default:
-            break;
-    }
-}
-
-/*
- * ATIMach64SetDPMSMode --
- *
- * This function sets a Mach64's VESA Display Power Management Signaling mode.
- */
-void
-ATIMach64SetDPMSMode
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    int         DPMSMode
-)
-{
-    CARD32 crtc_gen_cntl =
-        inr(CRTC_GEN_CNTL) & ~(CRTC_HSYNC_DIS | CRTC_VSYNC_DIS);
-
-    switch (DPMSMode)
-    {
-        case DPMSModeOn:        /* HSync on, VSync on */
-            break;
-
-        case DPMSModeStandby:   /* HSync off, VSync on */
-            crtc_gen_cntl |= CRTC_HSYNC_DIS;
-            break;
-
-        case DPMSModeSuspend:   /* HSync on, VSync off */
-            crtc_gen_cntl |= CRTC_VSYNC_DIS;
-            break;
-
-        case DPMSModeOff:       /* HSync off, VSync off */
-            crtc_gen_cntl |= CRTC_HSYNC_DIS | CRTC_VSYNC_DIS;
-            break;
-
-        default:                /* Muffle compiler */
-            return;
-    }
-
-#ifdef XF86DRI_DEVEL
-
-    /* XAA Sync requires the DRM lock if DRI enabled */
-    ATIDRILock(pScreenInfo);
-
-#endif /* XF86DRI_DEVEL */
-
-    ATIMach64Sync(pScreenInfo);
-
-    outr(CRTC_GEN_CNTL, crtc_gen_cntl);
-
-    if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))
-    {
-        CARD32 lcd_index = 0;
-
-        /*
-         * ATI's BIOS simply turns the panel on and off, so do the same by
-         * default, but keep the previous behaviour around for reference.
-         */
-        if (pATI->OptionDevel)
-        {
-            CARD32 power_management;
-
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                power_management = inr(POWER_MANAGEMENT);
-            }
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            {
-                lcd_index = inr(LCD_INDEX);
-                power_management = ATIMach64GetLCDReg(LCD_POWER_MANAGEMENT);
-            }
-
-            power_management &= ~(STANDBY_NOW | SUSPEND_NOW);
-
-            switch (DPMSMode)
-            {
-                case DPMSModeOn:
-                    break;
-
-                case DPMSModeStandby:
-                    power_management |= STANDBY_NOW;
-                    break;
-
-                case DPMSModeSuspend:
-                    power_management |= SUSPEND_NOW;
-                    break;
-
-                case DPMSModeOff:
-                    power_management |= STANDBY_NOW | SUSPEND_NOW;  /* ? */
-                    break;
-
-                default:        /* Muffle compiler */
-                    return;
-            }
-
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                outr(POWER_MANAGEMENT, power_management);
-            }
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            {
-                ATIMach64PutLCDReg(LCD_POWER_MANAGEMENT, power_management);
-                outr(LCD_INDEX, lcd_index);
-            }
-        }
-        else
-        {
-            CARD32 lcd_gen_ctrl;
-
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                lcd_gen_ctrl = inr(LCD_GEN_CTRL);
-            }
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            {
-                lcd_index = inr(LCD_INDEX);
-                lcd_gen_ctrl = ATIMach64GetLCDReg(LCD_GEN_CNTL);
-            }
-
-            if (DPMSMode == DPMSModeOn)
-                lcd_gen_ctrl |= LCD_ON;
-            else
-                lcd_gen_ctrl &= ~LCD_ON;
-
-            if (pATI->Chip == ATI_CHIP_264LT)
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl);
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            {
-                ATIMach64PutLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
-                outr(LCD_INDEX, lcd_index);
-            }
-        }
-    }
-
-#ifdef XF86DRI_DEVEL
-
-    ATIDRIUnlock(pScreenInfo);
-
-#endif /* XF86DRI_DEVEL */
-
-}
diff --git a/src/atimach64.h b/src/atimach64.h
deleted file mode 100644
index 98b194d..0000000
--- a/src/atimach64.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIMACH64_H___
-#define ___ATIMACH64_H___ 1
-
-#include "atipriv.h"
-
-extern void ATIMach64PreInit(ScrnInfoPtr, ATIPtr, ATIHWPtr);
-extern void ATIMach64Save(ATIPtr, ATIHWPtr);
-extern void ATIMach64Calculate(ATIPtr, ATIHWPtr, DisplayModePtr);
-extern void ATIMach64Set(ATIPtr, ATIHWPtr);
-
-extern void ATIMach64SaveScreen(ATIPtr, int);
-extern void ATIMach64SetDPMSMode(ScrnInfoPtr, ATIPtr, int);
-
-#endif /* ___ATIMACH64_H___ */
diff --git a/src/atimach64accel.c b/src/atimach64accel.c
deleted file mode 100644
index 276fc86..0000000
--- a/src/atimach64accel.c
+++ /dev/null
@@ -1,1068 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-/*
- * Copyright 1999-2000 Precision Insight, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-/* 
- * DRI support by:
- *    Manuel Teira
- *    Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atichip.h"
-#include "atimach64accel.h"
-#include "atimach64io.h"
-#include "atipriv.h"
-#include "atiregs.h"
-
-#ifdef XF86DRI_DEVEL
-#include "mach64_common.h"
-#endif
-
-#include "miline.h"
-
-/* Used to test MMIO cache integrity in ATIMach64Sync() */
-#define TestRegisterCaching(_Register)                   \
-    if (RegisterIsCached(_Register) &&                   \
-        (CacheSlot(_Register) != inm(_Register)))        \
-    {                                                    \
-        UncacheRegister(_Register);                      \
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,    \
-            #_Register " MMIO write cache disabled!\n"); \
-    }
-
-/*
- * X-to-Mach64 mix translation table.
- */
-CARD8 ATIMach64ALU[16] =
-{
-    MIX_0,                       /* GXclear */
-    MIX_AND,                     /* GXand */
-    MIX_SRC_AND_NOT_DST,         /* GXandReverse */
-    MIX_SRC,                     /* GXcopy */
-    MIX_NOT_SRC_AND_DST,         /* GXandInverted */
-    MIX_DST,                     /* GXnoop */
-    MIX_XOR,                     /* GXxor */
-    MIX_OR,                      /* GXor */
-    MIX_NOR,                     /* GXnor */
-    MIX_XNOR,                    /* GXequiv */
-    MIX_NOT_DST,                 /* GXinvert */
-    MIX_SRC_OR_NOT_DST,          /* GXorReverse */
-    MIX_NOT_SRC,                 /* GXcopyInverted */
-    MIX_NOT_SRC_OR_DST,          /* GXorInverted */
-    MIX_NAND,                    /* GXnand */
-    MIX_1                        /* GXset */
-};
-
-/*
- * ATIMach64ValidateClip --
- *
- * This function ensures the current scissor settings do not interfere with
- * the current draw request.
- */
-void
-ATIMach64ValidateClip
-(
-    ATIPtr pATI,
-    int    sc_left,
-    int    sc_right,
-    int    sc_top,
-    int    sc_bottom
-)
-{
-    if ((sc_left < (int)pATI->sc_left) || (sc_right > (int)pATI->sc_right))
-    {
-        outf(SC_LEFT_RIGHT, pATI->sc_left_right);
-        pATI->sc_left = pATI->NewHW.sc_left;
-        pATI->sc_right = pATI->NewHW.sc_right;
-    }
-
-    if ((sc_top < (int)pATI->sc_top) || (sc_bottom > (int)pATI->sc_bottom))
-    {
-        outf(SC_TOP_BOTTOM, pATI->sc_top_bottom);
-        pATI->sc_top = pATI->NewHW.sc_top;
-        pATI->sc_bottom = pATI->NewHW.sc_bottom;
-    }
-}
-
-static __inline__ void TestRegisterCachingDP(ScrnInfoPtr pScreenInfo);
-static __inline__ void TestRegisterCachingXV(ScrnInfoPtr pScreenInfo);
-
-/*
- * ATIMach64Sync --
- *
- * This is called to wait for the draw engine to become idle.
- */
-void
-ATIMach64Sync
-(
-    ScrnInfoPtr pScreenInfo
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-#ifdef XF86DRI_DEVEL
-
-    if ( pATI->directRenderingEnabled && pATI->NeedDRISync )
-    {
-	ATIHWPtr pATIHW = &pATI->NewHW;
-	CARD32 offset;
-
-	if (pATI->OptionMMIOCache) {
-	    /* "Invalidate" the MMIO cache so the cache slots get updated */
-	    UncacheRegister(SRC_CNTL);
-	    UncacheRegister(SCALE_3D_CNTL);
-	    UncacheRegister(HOST_CNTL);
-	    UncacheRegister(PAT_CNTL);
-	    UncacheRegister(SC_LEFT_RIGHT);
-	    UncacheRegister(SC_TOP_BOTTOM);
-	    UncacheRegister(DP_BKGD_CLR);
-	    UncacheRegister(DP_FRGD_CLR);
-	    UncacheRegister(DP_PIX_WIDTH);
-	    UncacheRegister(DP_MIX);
-	    UncacheRegister(CLR_CMP_CNTL);
-	    UncacheRegister(TEX_SIZE_PITCH);
-	}
-
-	ATIDRIWaitForIdle(pATI);
-
-	outr( BUS_CNTL, pATIHW->bus_cntl );
-
-	/* DRI uses GUI_TRAJ_CNTL, which is a composite of 
-	 * src_cntl, dst_cntl, pat_cntl, and host_cntl
-	 */
-	outf( SRC_CNTL, pATIHW->src_cntl );
-	outf( DST_CNTL, pATIHW->dst_cntl );
-	outf( PAT_CNTL, pATIHW->pat_cntl );
-	outf( HOST_CNTL, pATIHW->host_cntl );
-
-	outf( DST_OFF_PITCH, pATIHW->dst_off_pitch );
-	outf( SRC_OFF_PITCH, pATIHW->src_off_pitch );
-	outf( DP_SRC, pATIHW->dp_src );
-	outf( DP_MIX, pATIHW->dp_mix );
-	outf( DP_FRGD_CLR,  pATIHW->dp_frgd_clr );
-	outf( DP_WRITE_MASK, pATIHW->dp_write_mask );
-	outf( DP_PIX_WIDTH, pATIHW->dp_pix_width );
-
-	outf( CLR_CMP_CNTL, pATIHW->clr_cmp_cntl );
-
-	offset = TEX_LEVEL(pATIHW->tex_size_pitch);
-
-	ATIMach64WaitForFIFO(pATI, 6);
-	outf( ALPHA_TST_CNTL, 0 );
-	outf( Z_CNTL, 0 );
-	outf( SCALE_3D_CNTL, pATIHW->scale_3d_cntl );
-	outf( TEX_0_OFF + offset, pATIHW->tex_offset );
-	outf( TEX_SIZE_PITCH, pATIHW->tex_size_pitch );
-	outf( TEX_CNTL, pATIHW->tex_cntl );
-
-	ATIMach64WaitForFIFO(pATI, 2);
-	outf( SC_LEFT_RIGHT,
-	      SetWord(pATIHW->sc_right, 1) | SetWord(pATIHW->sc_left, 0) );
-	outf( SC_TOP_BOTTOM,
-	      SetWord(pATIHW->sc_bottom, 1) | SetWord(pATIHW->sc_top, 0) );
-
-	if (pATI->OptionMMIOCache) {
-	    /* Now that the cache slots reflect the register state, re-enable MMIO cache */
-	    CacheRegister(SRC_CNTL);
-	    CacheRegister(SCALE_3D_CNTL);
-	    CacheRegister(HOST_CNTL);
-	    CacheRegister(PAT_CNTL);
-	    CacheRegister(SC_LEFT_RIGHT);
-	    CacheRegister(SC_TOP_BOTTOM);
-	    CacheRegister(DP_BKGD_CLR);
-	    CacheRegister(DP_FRGD_CLR);
-	    CacheRegister(DP_PIX_WIDTH);
-	    CacheRegister(DP_MIX);
-	    CacheRegister(CLR_CMP_CNTL);
-	    CacheRegister(TEX_SIZE_PITCH);
-	}
-
-	ATIMach64WaitForIdle(pATI);
-
-	if (pATI->OptionMMIOCache && pATI->OptionTestMMIOCache) {
-	  
-	    /* Only check registers we didn't restore */
-	    TestRegisterCaching(PAT_REG0);
-            TestRegisterCaching(PAT_REG1);
-
-            TestRegisterCaching(CLR_CMP_CLR);
-            TestRegisterCaching(CLR_CMP_MSK);
-
-	    TestRegisterCachingXV(pScreenInfo);
-         }
-	pATI->NeedDRISync = FALSE;
-
-    }
-    else
-
-#endif /* XF86DRI_DEVEL */
-    {
-      ATIMach64WaitForIdle(pATI);
-      
-      if (pATI->OptionMMIOCache && pATI->OptionTestMMIOCache)
-      {
-        /*
-         * For debugging purposes, attempt to verify that each cached register
-         * should actually be cached.
-         */
-        TestRegisterCachingDP(pScreenInfo);
-
-        TestRegisterCachingXV(pScreenInfo);
-      }
-    }
-
-#ifdef USE_EXA
-    /* EXA sets pEXA->needsSync to FALSE on its own */
-#endif
-
-#ifdef USE_XAA
-    if (pATI->pXAAInfo)
-        pATI->pXAAInfo->NeedToSync = FALSE;
-#endif
-
-    if (pATI->Chip >= ATI_CHIP_264VTB)
-    {
-        /*
-         * Flush the read-back cache (by turning on INVALIDATE_RB_CACHE),
-         * otherwise the host might get stale data when reading through the
-         * aperture.
-         */
-        outr(MEM_BUF_CNTL, pATI->NewHW.mem_buf_cntl);
-    }
-
-    /*
-     * Note:
-     * Before actually invalidating the read-back cache, the mach64 driver
-     * was using the trick below which is buggy. The code is left here for
-     * reference, DRI uses this trick and needs updating.
-     *
-     * For VTB's and later, the first CPU read of the framebuffer will return
-     * zeroes, so do it here.  This appears to be due to some kind of engine
-     * caching of framebuffer data I haven't found any way of disabling, or
-     * otherwise circumventing.  Thanks to Mark Vojkovich for the suggestion.
-     *
-     * pATI = *(volatile ATIPtr *)pATI->pMemory;
-     */
-}
-
-static __inline__ void
-TestRegisterCachingDP(ScrnInfoPtr pScreenInfo)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    TestRegisterCaching(SRC_CNTL);
-
-    if (pATI->Chip >= ATI_CHIP_264GTPRO)
-    {
-        TestRegisterCaching(SCALE_3D_CNTL);
-    }
-
-    TestRegisterCaching(HOST_CNTL);
-
-    TestRegisterCaching(PAT_REG0);
-    TestRegisterCaching(PAT_REG1);
-    TestRegisterCaching(PAT_CNTL);
-
-    if (RegisterIsCached(SC_LEFT_RIGHT) &&      /* Special case */
-        (CacheSlot(SC_LEFT_RIGHT) !=
-         (SetWord(inm(SC_RIGHT), 1) | SetWord(inm(SC_LEFT), 0))))
-    {
-        UncacheRegister(SC_LEFT_RIGHT);
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-            "SC_LEFT_RIGHT write cache disabled!\n");
-    }
-
-    if (RegisterIsCached(SC_TOP_BOTTOM) &&      /* Special case */
-        (CacheSlot(SC_TOP_BOTTOM) !=
-         (SetWord(inm(SC_BOTTOM), 1) | SetWord(inm(SC_TOP), 0))))
-    {
-        UncacheRegister(SC_TOP_BOTTOM);
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-            "SC_TOP_BOTTOM write cache disabled!\n");
-    }
-
-    TestRegisterCaching(DP_BKGD_CLR);
-    TestRegisterCaching(DP_FRGD_CLR);
-    TestRegisterCaching(DP_PIX_WIDTH);
-    TestRegisterCaching(DP_MIX);
-
-    TestRegisterCaching(CLR_CMP_CLR);
-    TestRegisterCaching(CLR_CMP_MSK);
-    TestRegisterCaching(CLR_CMP_CNTL);
-
-    if (pATI->Chip >= ATI_CHIP_264GTPRO)
-    {
-        TestRegisterCaching(TEX_SIZE_PITCH);
-    }
-}
-
-static __inline__ void
-TestRegisterCachingXV(ScrnInfoPtr pScreenInfo)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    if (!pATI->Block1Base)
-        return;
-
-    TestRegisterCaching(OVERLAY_Y_X_START);
-    TestRegisterCaching(OVERLAY_Y_X_END);
-
-    TestRegisterCaching(OVERLAY_GRAPHICS_KEY_CLR);
-    TestRegisterCaching(OVERLAY_GRAPHICS_KEY_MSK);
-
-    TestRegisterCaching(OVERLAY_KEY_CNTL);
-
-    TestRegisterCaching(OVERLAY_SCALE_INC);
-    TestRegisterCaching(OVERLAY_SCALE_CNTL);
-
-    TestRegisterCaching(SCALER_HEIGHT_WIDTH);
-
-    TestRegisterCaching(SCALER_TEST);
-
-    TestRegisterCaching(VIDEO_FORMAT);
-
-    if (pATI->Chip < ATI_CHIP_264VTB)
-    {
-        TestRegisterCaching(BUF0_OFFSET);
-        TestRegisterCaching(BUF0_PITCH);
-        TestRegisterCaching(BUF1_OFFSET);
-        TestRegisterCaching(BUF1_PITCH);
-
-        return;
-    }
-
-    TestRegisterCaching(SCALER_BUF0_OFFSET);
-    TestRegisterCaching(SCALER_BUF1_OFFSET);
-    TestRegisterCaching(SCALER_BUF_PITCH);
-
-    TestRegisterCaching(OVERLAY_EXCLUSIVE_HORZ);
-    TestRegisterCaching(OVERLAY_EXCLUSIVE_VERT);
-
-    if (pATI->Chip < ATI_CHIP_264GTPRO)
-        return;
-
-    TestRegisterCaching(SCALER_COLOUR_CNTL);
-
-    TestRegisterCaching(SCALER_H_COEFF0);
-    TestRegisterCaching(SCALER_H_COEFF1);
-    TestRegisterCaching(SCALER_H_COEFF2);
-    TestRegisterCaching(SCALER_H_COEFF3);
-    TestRegisterCaching(SCALER_H_COEFF4);
-
-    TestRegisterCaching(SCALER_BUF0_OFFSET_U);
-    TestRegisterCaching(SCALER_BUF0_OFFSET_V);
-    TestRegisterCaching(SCALER_BUF1_OFFSET_U);
-    TestRegisterCaching(SCALER_BUF1_OFFSET_V);
-}
-
-#ifdef USE_XAA
-/*
- * ATIMach64SetupForScreenToScreenCopy --
- *
- * This function sets up the draw engine for a series of screen-to-screen copy
- * operations.
- */
-static void
-ATIMach64SetupForScreenToScreenCopy
-(
-    ScrnInfoPtr  pScreenInfo,
-    int          xdir,
-    int          ydir,
-    int          rop,
-    unsigned int planemask,
-    int          TransparencyColour
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    ATIDRISync(pScreenInfo);
-
-    ATIMach64WaitForFIFO(pATI, 3);
-    outf(DP_WRITE_MASK, planemask);
-    outf(DP_SRC, DP_MONO_SRC_ALLONES |
-        SetBits(SRC_BLIT, DP_FRGD_SRC) | SetBits(SRC_BKGD, DP_BKGD_SRC));
-    outf(DP_MIX, SetBits(ATIMach64ALU[rop], DP_FRGD_MIX));
-
-#ifdef AVOID_DGA
-
-    if (TransparencyColour == -1)
-
-#else /* AVOID_DGA */
-
-    if (!pATI->XAAForceTransBlit && (TransparencyColour == -1))
-
-#endif /* AVOID_DGA */
-
-    {
-        outf(CLR_CMP_CNTL, CLR_CMP_FN_FALSE);
-    }
-    else
-    {
-        ATIMach64WaitForFIFO(pATI, 2);
-        outf(CLR_CMP_CLR, TransparencyColour);
-        outf(CLR_CMP_CNTL, CLR_CMP_FN_EQUAL | CLR_CMP_SRC_2D);
-    }
-
-    pATI->dst_cntl = 0;
-
-    if (ydir > 0)
-        pATI->dst_cntl |= DST_Y_DIR;
-    if (xdir > 0)
-        pATI->dst_cntl |= DST_X_DIR;
-
-    if (pATI->XModifier == 1)
-        outf(DST_CNTL, pATI->dst_cntl);
-    else
-        pATI->dst_cntl |= DST_24_ROT_EN;
-}
-
-/*
- * ATIMach64SubsequentScreenToScreenCopy --
- *
- * This function performs a screen-to-screen copy operation.
- */
-static void
-ATIMach64SubsequentScreenToScreenCopy
-(
-    ScrnInfoPtr pScreenInfo,
-    int         xSrc,
-    int         ySrc,
-    int         xDst,
-    int         yDst,
-    int         w,
-    int         h
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    xSrc *= pATI->XModifier;
-    xDst *= pATI->XModifier;
-    w    *= pATI->XModifier;
-
-    ATIDRISync(pScreenInfo);
-
-    /* Disable clipping if it gets in the way */
-    ATIMach64ValidateClip(pATI, xDst, xDst + w - 1, yDst, yDst + h - 1);
-
-    if (!(pATI->dst_cntl & DST_X_DIR))
-    {
-        xSrc += w - 1;
-        xDst += w - 1;
-    }
-
-    if (!(pATI->dst_cntl & DST_Y_DIR))
-    {
-        ySrc += h - 1;
-        yDst += h - 1;
-    }
-
-    if (pATI->XModifier != 1)
-        outf(DST_CNTL, pATI->dst_cntl | SetBits((xDst / 4) % 6, DST_24_ROT));
-
-    ATIMach64WaitForFIFO(pATI, 4);
-    outf(SRC_Y_X, SetWord(xSrc, 1) | SetWord(ySrc, 0));
-    outf(SRC_WIDTH1, w);
-    outf(DST_Y_X, SetWord(xDst, 1) | SetWord(yDst, 0));
-    outf(DST_HEIGHT_WIDTH, SetWord(w, 1) | SetWord(h, 0));
-
-    /*
-     * On VTB's and later, the engine will randomly not wait for a copy
-     * operation to commit its results to video memory before starting the next
-     * one.  The probability of such occurrences increases with GUI_WB_FLUSH
-     * (or GUI_WB_FLUSH_P) setting, bitsPerPixel and/or CRTC clock.  This
-     * would point to some kind of video memory bandwidth problem were it noti
-     * for the fact that the problem occurs less often (but still occurs) when
-     * copying larger rectangles.
-     */
-    if ((pATI->Chip >= ATI_CHIP_264VTB) && !pATI->OptionDevel)
-        ATIMach64Sync(pScreenInfo);
-}
-
-/*
- * ATIMach64SetupForSolidFill --
- *
- * This function sets up the draw engine for a series of solid fills.
- */
-static void
-ATIMach64SetupForSolidFill
-(
-    ScrnInfoPtr  pScreenInfo,
-    int          colour,
-    int          rop,
-    unsigned int planemask
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    ATIDRISync(pScreenInfo);
-
-    ATIMach64WaitForFIFO(pATI, 5);
-    outf(DP_WRITE_MASK, planemask);
-    outf(DP_SRC, DP_MONO_SRC_ALLONES |
-        SetBits(SRC_FRGD, DP_FRGD_SRC) | SetBits(SRC_BKGD, DP_BKGD_SRC));
-    outf(DP_FRGD_CLR, colour);
-    outf(DP_MIX, SetBits(ATIMach64ALU[rop], DP_FRGD_MIX));
-
-    outf(CLR_CMP_CNTL, CLR_CMP_FN_FALSE);
-
-    if (pATI->XModifier == 1)
-        outf(DST_CNTL, DST_X_DIR | DST_Y_DIR);
-}
-
-/*
- * ATIMach64SubsequentSolidFillRect --
- *
- * This function performs a solid rectangle fill.
- */
-static void
-ATIMach64SubsequentSolidFillRect
-(
-    ScrnInfoPtr pScreenInfo,
-    int         x,
-    int         y,
-    int         w,
-    int         h
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    ATIDRISync(pScreenInfo);
-
-    if (pATI->XModifier != 1)
-    {
-        x *= pATI->XModifier;
-        w *= pATI->XModifier;
-
-        outf(DST_CNTL, SetBits((x / 4) % 6, DST_24_ROT) |
-            (DST_X_DIR | DST_Y_DIR | DST_24_ROT_EN));
-    }
-
-    /* Disable clipping if it gets in the way */
-    ATIMach64ValidateClip(pATI, x, x + w - 1, y, y + h - 1);
-
-    ATIMach64WaitForFIFO(pATI, 2);
-    outf(DST_Y_X, SetWord(x, 1) | SetWord(y, 0));
-    outf(DST_HEIGHT_WIDTH, SetWord(w, 1) | SetWord(h, 0));
-}
-
-/*
- * ATIMach64SetupForSolidLine --
- *
- * This function sets up the draw engine for a series of solid lines.  It is
- * not used for 24bpp because the engine doesn't support it.
- */
-static void
-ATIMach64SetupForSolidLine
-(
-    ScrnInfoPtr  pScreenInfo,
-    int          colour,
-    int          rop,
-    unsigned int planemask
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    ATIDRISync(pScreenInfo);
-
-    ATIMach64WaitForFIFO(pATI, 5);
-    outf(DP_WRITE_MASK, planemask);
-    outf(DP_SRC, DP_MONO_SRC_ALLONES |
-        SetBits(SRC_FRGD, DP_FRGD_SRC) | SetBits(SRC_BKGD, DP_BKGD_SRC));
-    outf(DP_FRGD_CLR, colour);
-    outf(DP_MIX, SetBits(ATIMach64ALU[rop], DP_FRGD_MIX));
-
-    outf(CLR_CMP_CNTL, CLR_CMP_FN_FALSE);
-
-    ATIMach64ValidateClip(pATI, pATI->NewHW.sc_left, pATI->NewHW.sc_right,
-        pATI->NewHW.sc_top, pATI->NewHW.sc_bottom);
-}
-
-/*
- * ATIMach64SubsequentSolidHorVertLine --
- *
- * This is called to draw a solid horizontal or vertical line.  This does a
- * one-pixel wide solid fill.
- */
-static void
-ATIMach64SubsequentSolidHorVertLine
-(
-    ScrnInfoPtr pScreenInfo,
-    int         x,
-    int         y,
-    int         len,
-    int         dir
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    ATIDRISync(pScreenInfo);
-
-    ATIMach64WaitForFIFO(pATI, 3);
-    outf(DST_CNTL, DST_X_DIR | DST_Y_DIR);
-    outf(DST_Y_X, SetWord(x, 1) | SetWord(y, 0));
-
-    if (dir == DEGREES_0)
-        outf(DST_HEIGHT_WIDTH, SetWord(len, 1) | SetWord(1, 0));
-    else /* if (dir == DEGREES_270) */
-        outf(DST_HEIGHT_WIDTH, SetWord(1, 1) | SetWord(len, 0));
-}
-
-/*
- * ATIMach64SubsequentSolidBresenhamLine --
- *
- * This function draws a line using the Bresenham line engine.
- */
-static void
-ATIMach64SubsequentSolidBresenhamLine
-(
-    ScrnInfoPtr pScreenInfo,
-    int         x,
-    int         y,
-    int         major,
-    int         minor,
-    int         err,
-    int         len,
-    int         octant
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-    CARD32 dst_cntl = DST_LAST_PEL;
-
-    if (octant & YMAJOR)
-        dst_cntl |= DST_Y_MAJOR;
-
-    if (!(octant & XDECREASING))
-        dst_cntl |= DST_X_DIR;
-
-    if (!(octant & YDECREASING))
-        dst_cntl |= DST_Y_DIR;
-
-    ATIDRISync(pScreenInfo);
-
-    ATIMach64WaitForFIFO(pATI, 6);
-    outf(DST_CNTL, dst_cntl);
-    outf(DST_Y_X, SetWord(x, 1) | SetWord(y, 0));
-    outf(DST_BRES_ERR, minor + err);
-    outf(DST_BRES_INC, minor);
-    outf(DST_BRES_DEC, minor - major);
-    outf(DST_BRES_LNTH, len);
-}
-
-/*
- * ATIMach64SetupForMono8x8PatternFill --
- *
- * This function sets up the draw engine for a series of 8x8 1bpp pattern
- * fills.
- */
-static void
-ATIMach64SetupForMono8x8PatternFill
-(
-    ScrnInfoPtr  pScreenInfo,
-    int          patx,
-    int          paty,
-    int          fg,
-    int          bg,
-    int          rop,
-    unsigned int planemask
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    ATIDRISync(pScreenInfo);
-
-    ATIMach64WaitForFIFO(pATI, 3);
-    outf(DP_WRITE_MASK, planemask);
-    outf(DP_SRC, DP_MONO_SRC_PATTERN |
-        SetBits(SRC_FRGD, DP_FRGD_SRC) | SetBits(SRC_BKGD, DP_BKGD_SRC));
-    outf(DP_FRGD_CLR, fg);
-
-    if (bg == -1)
-    {
-        outf(DP_MIX, SetBits(ATIMach64ALU[rop], DP_FRGD_MIX) |
-            SetBits(MIX_DST, DP_BKGD_MIX));
-    }
-    else
-    {
-        ATIMach64WaitForFIFO(pATI, 2);
-        outf(DP_BKGD_CLR, bg);
-        outf(DP_MIX, SetBits(ATIMach64ALU[rop], DP_FRGD_MIX) |
-            SetBits(ATIMach64ALU[rop], DP_BKGD_MIX));
-    }
-
-    ATIMach64WaitForFIFO(pATI, 4);
-    outf(PAT_REG0, patx);
-    outf(PAT_REG1, paty);
-    outf(PAT_CNTL, PAT_MONO_EN);
-
-    outf(CLR_CMP_CNTL, CLR_CMP_FN_FALSE);
-
-    if (pATI->XModifier == 1)
-        outf(DST_CNTL, DST_X_DIR | DST_Y_DIR);
-}
-
-/*
- * ATIMach64SubsequentMono8x8PatternFillRect --
- *
- * This function performs an 8x8 1bpp pattern fill.
- */
-static void
-ATIMach64SubsequentMono8x8PatternFillRect
-(
-    ScrnInfoPtr pScreenInfo,
-    int         patx,
-    int         paty,
-    int         x,
-    int         y,
-    int         w,
-    int         h
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    ATIDRISync(pScreenInfo);
-
-    if (pATI->XModifier != 1)
-    {
-        x *= pATI->XModifier;
-        w *= pATI->XModifier;
-
-        outf(DST_CNTL, SetBits((x / 4) % 6, DST_24_ROT) |
-            (DST_X_DIR | DST_Y_DIR | DST_24_ROT_EN));
-    }
-
-    /* Disable clipping if it gets in the way */
-    ATIMach64ValidateClip(pATI, x, x + w - 1, y, y + h - 1);
-
-    ATIMach64WaitForFIFO(pATI, 2);
-    outf(DST_Y_X, SetWord(x, 1) | SetWord(y, 0));
-    outf(DST_HEIGHT_WIDTH, SetWord(w, 1) | SetWord(h, 0));
-}
-
-/*
- * ATIMach64SetupForScanlineCPUToScreenColorExpandFill --
- *
- * This function sets up the engine for a series of colour expansion fills.
- */
-static void
-ATIMach64SetupForScanlineCPUToScreenColorExpandFill
-(
-    ScrnInfoPtr  pScreenInfo,
-    int          fg,
-    int          bg,
-    int          rop,
-    unsigned int planemask
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    ATIDRISync(pScreenInfo);
-
-    ATIMach64WaitForFIFO(pATI, 3);
-    outf(DP_WRITE_MASK, planemask);
-    outf(DP_SRC, DP_MONO_SRC_HOST |
-        SetBits(SRC_FRGD, DP_FRGD_SRC) | SetBits(SRC_BKGD, DP_BKGD_SRC));
-    outf(DP_FRGD_CLR, fg);
-
-    if (bg == -1)
-    {
-        outf(DP_MIX, SetBits(ATIMach64ALU[rop], DP_FRGD_MIX) |
-            SetBits(MIX_DST, DP_BKGD_MIX));
-    }
-    else
-    {
-        ATIMach64WaitForFIFO(pATI, 2);
-        outf(DP_BKGD_CLR, bg);
-        outf(DP_MIX, SetBits(ATIMach64ALU[rop], DP_FRGD_MIX) |
-            SetBits(ATIMach64ALU[rop], DP_BKGD_MIX));
-    }
-
-    outf(CLR_CMP_CNTL, CLR_CMP_FN_FALSE);
-
-    if (pATI->XModifier == 1)
-        outf(DST_CNTL, DST_X_DIR | DST_Y_DIR);
-}
-
-/*
- * ATIMach64SubsequentScanlineCPUToScreenColorExpandFill --
- *
- * This function sets up the engine for a single colour expansion fill.
- */
-static void
-ATIMach64SubsequentScanlineCPUToScreenColorExpandFill
-(
-    ScrnInfoPtr pScreenInfo,
-    int         x,
-    int         y,
-    int         w,
-    int         h,
-    int         skipleft
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    ATIDRISync(pScreenInfo);
-
-    if (pATI->XModifier != 1)
-    {
-        x *= pATI->XModifier;
-        w *= pATI->XModifier;
-        skipleft *= pATI->XModifier;
-
-        outf(DST_CNTL, SetBits((x / 4) % 6, DST_24_ROT) |
-            (DST_X_DIR | DST_Y_DIR | DST_24_ROT_EN));
-    }
-
-    pATI->ExpansionBitmapWidth = (w + 31) / 32;
-
-    ATIMach64WaitForFIFO(pATI, 3);
-    pATI->sc_left = x + skipleft;
-    pATI->sc_right = x + w - 1;
-    outf(SC_LEFT_RIGHT,
-        SetWord(pATI->sc_right, 1) | SetWord(pATI->sc_left, 0));
-    outf(DST_Y_X, SetWord(x, 1) | SetWord(y, 0));
-    outf(DST_HEIGHT_WIDTH,
-        SetWord(pATI->ExpansionBitmapWidth * 32, 1) | SetWord(h, 0));
-}
-
-/*
- * ATIMach64SubsequentColorExpandScanline --
- *
- * This function feeds a bitmap scanline to the engine for a colour expansion
- * fill.  This is written to do burst transfers for those platforms that can do
- * them, and to improve CPU/engine concurrency.
- */
-static void
-ATIMach64SubsequentColorExpandScanline
-(
-    ScrnInfoPtr pScreenInfo,
-    int         iBuffer
-)
-{
-    ATIPtr          pATI         = ATIPTR(pScreenInfo);
-    CARD32          *pBitmapData = pATI->ExpansionBitmapScanlinePtr[iBuffer];
-    int             w            = pATI->ExpansionBitmapWidth;
-    int             nDWord;
-
-    ATIDRISync(pScreenInfo);
-
-    while (w > 0)
-    {
-        /*
-         * Transfers are done in chunks of up to 64 bytes in length (32 on
-         * earlier controllers).
-         */
-        nDWord = w;
-        if (nDWord > pATI->nHostFIFOEntries)
-            nDWord = pATI->nHostFIFOEntries;
-
-        /* Make enough FIFO slots available */
-        ATIMach64WaitForFIFO(pATI, nDWord);
-
-        /*
-         * Always start transfers on a chuck-sized boundary.  Note that
-         * HOST_DATA_0 is actually on a 512-byte boundary, but *pBitmapData can
-         * only be guaranteed to be on a chunk-sized boundary.
-         *
-         * Transfer current chunk.  With any luck, the compiler won't mangle
-         * this too badly...
-         */
-
-#       if defined(ATIMove32)
-
-        {
-            ATIMove32(pATI->pHOST_DATA, pBitmapData, nDWord);
-        }
-
-#       else
-
-        {
-            volatile CARD32 *pDst;
-            CARD32          *pSrc;
-            unsigned int    iDWord;
-
-            iDWord = 16 - nDWord;
-            pDst = (volatile CARD32 *)pATI->pHOST_DATA - iDWord;
-            pSrc = pBitmapData - iDWord;
-
-            switch (iDWord)
-            {
-                case  0:  MMIO_MOVE32(pDst +  0, 0, *(pSrc +  0));
-                case  1:  MMIO_MOVE32(pDst +  1, 0, *(pSrc +  1));
-                case  2:  MMIO_MOVE32(pDst +  2, 0, *(pSrc +  2));
-                case  3:  MMIO_MOVE32(pDst +  3, 0, *(pSrc +  3));
-                case  4:  MMIO_MOVE32(pDst +  4, 0, *(pSrc +  4));
-                case  5:  MMIO_MOVE32(pDst +  5, 0, *(pSrc +  5));
-                case  6:  MMIO_MOVE32(pDst +  6, 0, *(pSrc +  6));
-                case  7:  MMIO_MOVE32(pDst +  7, 0, *(pSrc +  7));
-                case  8:  MMIO_MOVE32(pDst +  8, 0, *(pSrc +  8));
-                case  9:  MMIO_MOVE32(pDst +  9, 0, *(pSrc +  9));
-                case 10:  MMIO_MOVE32(pDst + 10, 0, *(pSrc + 10));
-                case 11:  MMIO_MOVE32(pDst + 11, 0, *(pSrc + 11));
-                case 12:  MMIO_MOVE32(pDst + 12, 0, *(pSrc + 12));
-                case 13:  MMIO_MOVE32(pDst + 13, 0, *(pSrc + 13));
-                case 14:  MMIO_MOVE32(pDst + 14, 0, *(pSrc + 14));
-                case 15:  MMIO_MOVE32(pDst + 15, 0, *(pSrc + 15));
-
-                default:    /* Muffle compiler */
-                    break;
-            }
-        }
-
-#       endif
-
-        /* Step to next chunk */
-        pBitmapData += nDWord;
-        w -= nDWord;
-        pATI->nAvailableFIFOEntries -= nDWord;
-    }
-
-    pATI->EngineIsBusy = TRUE;
-}
-
-/*
- * ATIMach64AccelInit --
- *
- * This function fills in structure fields needed for acceleration on Mach64
- * variants.
- */
-Bool
-ATIMach64AccelInit
-(
-    ScreenPtr pScreen
-)
-{
-    ScrnInfoPtr   pScreenInfo = xf86Screens[pScreen->myNum];
-    ATIPtr        pATI        = ATIPTR(pScreenInfo);
-    XAAInfoRecPtr pXAAInfo;
-
-    if (!(pATI->pXAAInfo = XAACreateInfoRec()))
-        return FALSE;
-
-    pXAAInfo = pATI->pXAAInfo;
-
-    /* This doesn't seem quite right... */
-    if (pATI->XModifier == 1)
-    {
-        pXAAInfo->Flags = PIXMAP_CACHE | OFFSCREEN_PIXMAPS;
-        pXAAInfo->Flags |= LINEAR_FRAMEBUFFER;
-    }
-
-    /* Sync */
-    pXAAInfo->Sync = ATIMach64Sync;
-
-    /* Screen-to-screen copy */
-    pXAAInfo->SetupForScreenToScreenCopy = ATIMach64SetupForScreenToScreenCopy;
-    pXAAInfo->SubsequentScreenToScreenCopy =
-        ATIMach64SubsequentScreenToScreenCopy;
-
-    /* Solid fills */
-    pXAAInfo->SetupForSolidFill = ATIMach64SetupForSolidFill;
-    pXAAInfo->SubsequentSolidFillRect = ATIMach64SubsequentSolidFillRect;
-
-    /* 8x8 mono pattern fills */
-    pXAAInfo->Mono8x8PatternFillFlags =
-
-#if X_BYTE_ORDER != X_LITTLE_ENDIAN
-
-        BIT_ORDER_IN_BYTE_MSBFIRST |
-
-#endif /* X_BYTE_ORDER */
-
-        HARDWARE_PATTERN_PROGRAMMED_BITS | HARDWARE_PATTERN_SCREEN_ORIGIN;
-    pXAAInfo->SetupForMono8x8PatternFill = ATIMach64SetupForMono8x8PatternFill;
-    pXAAInfo->SubsequentMono8x8PatternFillRect =
-        ATIMach64SubsequentMono8x8PatternFillRect;
-
-    /*
-     * Use scanline version of colour expansion, not only for the non-ix86
-     * case, but also to avoid PCI retries.
-     */
-    pXAAInfo->ScanlineCPUToScreenColorExpandFillFlags =
-        LEFT_EDGE_CLIPPING | LEFT_EDGE_CLIPPING_NEGATIVE_X |
-        CPU_TRANSFER_PAD_DWORD | SCANLINE_PAD_DWORD;
-    if (pATI->XModifier != 1)
-        pXAAInfo->ScanlineCPUToScreenColorExpandFillFlags |= TRIPLE_BITS_24BPP;
-    pXAAInfo->NumScanlineColorExpandBuffers = 1;
-
-    /* Align bitmap data on a 64-byte boundary */
-    pATI->ExpansionBitmapWidth =        /* DWord size in bits */
-        ((pATI->displayWidth * pATI->XModifier) + 31) & ~31U;
-    pATI->ExpansionBitmapScanlinePtr[1] =
-        (CARD32 *)xnfalloc((pATI->ExpansionBitmapWidth >> 3) + 63);
-    pATI->ExpansionBitmapScanlinePtr[0] =
-        (pointer)(((unsigned long)pATI->ExpansionBitmapScanlinePtr[1] + 63) &
-                  ~63UL);
-    pXAAInfo->ScanlineColorExpandBuffers =
-        (CARD8 **)pATI->ExpansionBitmapScanlinePtr;
-    pXAAInfo->SetupForScanlineCPUToScreenColorExpandFill =
-        ATIMach64SetupForScanlineCPUToScreenColorExpandFill;
-    pXAAInfo->SubsequentScanlineCPUToScreenColorExpandFill =
-        ATIMach64SubsequentScanlineCPUToScreenColorExpandFill;
-    pXAAInfo->SubsequentColorExpandScanline =
-        ATIMach64SubsequentColorExpandScanline;
-
-    /* The engine does not support the following primitives for 24bpp */
-    if (pATI->XModifier != 1)
-        goto XAAInit;
-
-    /* Solid lines */
-    pXAAInfo->SetupForSolidLine = ATIMach64SetupForSolidLine;
-    pXAAInfo->SubsequentSolidHorVertLine = ATIMach64SubsequentSolidHorVertLine;
-    pXAAInfo->SubsequentSolidBresenhamLine =
-        ATIMach64SubsequentSolidBresenhamLine;
-
-XAAInit:
-    if (!XAAInit(pScreen, pATI->pXAAInfo)) {
-        XAADestroyInfoRec(pATI->pXAAInfo);
-        pATI->pXAAInfo = NULL;
-        return FALSE;
-    }
-
-    return TRUE;
-}
-#endif /* USE_XAA */
diff --git a/src/atimach64accel.h b/src/atimach64accel.h
deleted file mode 100644
index 6a7d5b2..0000000
--- a/src/atimach64accel.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIMACH64ACCEL_H___
-#define ___ATIMACH64ACCEL_H___ 1
-
-#include "atipriv.h"
-
-#include "xaa.h"
-#include "exa.h"
-
-#define ATIMach64MaxX  4095
-#define ATIMach64MaxY 16383
-
-#ifdef USE_EXA
-extern Bool ATIMach64ExaInit(ScreenPtr);
-#endif
-#ifdef USE_XAA
-extern Bool ATIMach64AccelInit(ScreenPtr);
-#endif
-extern void ATIMach64Sync(ScrnInfoPtr);
-
-#endif /* ___ATIMACH64ACCEL_H___ */
diff --git a/src/atimach64cursor.c b/src/atimach64cursor.c
deleted file mode 100644
index a3488bb..0000000
--- a/src/atimach64cursor.c
+++ /dev/null
@@ -1,426 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "aticursor.h"
-#include "atimach64accel.h"
-#include "atimach64io.h"
-
-/*
- * ATIMach64SetCursorColours --
- *
- * Set hardware cursor foreground and background colours.
- */
-static void
-ATIMach64SetCursorColours
-(
-    ScrnInfoPtr pScreenInfo,
-    int         fg,
-    int         bg
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    outr(CUR_CLR0, SetBits(fg, CUR_CLR));
-    outr(CUR_CLR1, SetBits(bg, CUR_CLR));
-}
-
-/*
- * ATIMach64SetCursorPosition --
- *
- * Set position of hardware cursor.
- */
-static void
-ATIMach64SetCursorPosition
-(
-    ScrnInfoPtr pScreenInfo,
-    int         x,
-    int         y
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-    CARD16 CursorXOffset, CursorYOffset;
-
-    /* Adjust x & y when the cursor is partially obscured */
-    if (x < 0)
-    {
-        if ((CursorXOffset = -x) > 63)
-            CursorXOffset = 63;
-        x = 0;
-    }
-    else
-    {
-        CursorXOffset = pScreenInfo->frameX1 - pScreenInfo->frameX0;
-        if (x > CursorXOffset)
-            x = CursorXOffset;
-        CursorXOffset = 0;
-    }
-
-    if (y < 0)
-    {
-        if ((CursorYOffset = -y) > 63)
-            CursorYOffset = 63;
-        y = 0;
-    }
-    else
-    {
-        CursorYOffset = pScreenInfo->frameY1 - pScreenInfo->frameY0;
-        if (y > CursorYOffset)
-            y = CursorYOffset;
-        CursorYOffset = 0;
-    }
-
-    /* Adjust for multiscanned modes */
-    if (pScreenInfo->currentMode->Flags & V_DBLSCAN)
-        y *= 2;
-    if (pScreenInfo->currentMode->VScan > 1)
-        y *= pScreenInfo->currentMode->VScan;
-
-    do
-    {
-        if (CursorYOffset != pATI->CursorYOffset)
-        {
-            pATI->CursorYOffset = CursorYOffset;
-            outr(CUR_OFFSET, ((CursorYOffset << 4) + pATI->CursorOffset) >> 3);
-        }
-        else if (CursorXOffset == pATI->CursorXOffset)
-            break;
-
-        pATI->CursorXOffset = CursorXOffset;
-        outr(CUR_HORZ_VERT_OFF, SetBits(CursorXOffset, CUR_HORZ_OFF) |
-            SetBits(CursorYOffset, CUR_VERT_OFF));
-    } while (0);
-
-    outr(CUR_HORZ_VERT_POSN,
-        SetBits(x, CUR_HORZ_POSN) | SetBits(y, CUR_VERT_POSN));
-}
-
-/*
- * ATIMach64LoadCursorImage --
- *
- * Copy hardware cursor image into offscreen video memory.
- */
-static void
-ATIMach64LoadCursorImage
-(
-    ScrnInfoPtr pScreenInfo,
-    CARD8       *pImage
-)
-{
-    ATIPtr           pATI     = ATIPTR(pScreenInfo);
-    CARD32          *pSrc     = (pointer)pImage;
-    volatile CARD32 *pDst     = pATI->pCursorImage;
-
-#ifdef XF86DRI_DEVEL
-
-    /* XAA Sync requires the DRM lock if DRI enabled */
-    ATIDRILock(pScreenInfo);
-
-#endif /* XF86DRI_DEVEL */
-
-    /* Synchronise video memory accesses */
-    ATIMach64Sync(pScreenInfo);
-
-#   if defined(ATIMove32)
-
-    {
-        ATIMove32(pDst, pSrc, 256);
-    }
-
-#   else
-
-    {
-        /* This is lengthy, but it does maximise burst modes */
-        pDst[  0] = pSrc[  0];  pDst[  1] = pSrc[  1];
-        pDst[  2] = pSrc[  2];  pDst[  3] = pSrc[  3];
-        pDst[  4] = pSrc[  4];  pDst[  5] = pSrc[  5];
-        pDst[  6] = pSrc[  6];  pDst[  7] = pSrc[  7];
-        pDst[  8] = pSrc[  8];  pDst[  9] = pSrc[  9];
-        pDst[ 10] = pSrc[ 10];  pDst[ 11] = pSrc[ 11];
-        pDst[ 12] = pSrc[ 12];  pDst[ 13] = pSrc[ 13];
-        pDst[ 14] = pSrc[ 14];  pDst[ 15] = pSrc[ 15];
-        pDst[ 16] = pSrc[ 16];  pDst[ 17] = pSrc[ 17];
-        pDst[ 18] = pSrc[ 18];  pDst[ 19] = pSrc[ 19];
-        pDst[ 20] = pSrc[ 20];  pDst[ 21] = pSrc[ 21];
-        pDst[ 22] = pSrc[ 22];  pDst[ 23] = pSrc[ 23];
-        pDst[ 24] = pSrc[ 24];  pDst[ 25] = pSrc[ 25];
-        pDst[ 26] = pSrc[ 26];  pDst[ 27] = pSrc[ 27];
-        pDst[ 28] = pSrc[ 28];  pDst[ 29] = pSrc[ 29];
-        pDst[ 30] = pSrc[ 30];  pDst[ 31] = pSrc[ 31];
-        pDst[ 32] = pSrc[ 32];  pDst[ 33] = pSrc[ 33];
-        pDst[ 34] = pSrc[ 34];  pDst[ 35] = pSrc[ 35];
-        pDst[ 36] = pSrc[ 36];  pDst[ 37] = pSrc[ 37];
-        pDst[ 38] = pSrc[ 38];  pDst[ 39] = pSrc[ 39];
-        pDst[ 40] = pSrc[ 40];  pDst[ 41] = pSrc[ 41];
-        pDst[ 42] = pSrc[ 42];  pDst[ 43] = pSrc[ 43];
-        pDst[ 44] = pSrc[ 44];  pDst[ 45] = pSrc[ 45];
-        pDst[ 46] = pSrc[ 46];  pDst[ 47] = pSrc[ 47];
-        pDst[ 48] = pSrc[ 48];  pDst[ 49] = pSrc[ 49];
-        pDst[ 50] = pSrc[ 50];  pDst[ 51] = pSrc[ 51];
-        pDst[ 52] = pSrc[ 52];  pDst[ 53] = pSrc[ 53];
-        pDst[ 54] = pSrc[ 54];  pDst[ 55] = pSrc[ 55];
-        pDst[ 56] = pSrc[ 56];  pDst[ 57] = pSrc[ 57];
-        pDst[ 58] = pSrc[ 58];  pDst[ 59] = pSrc[ 59];
-        pDst[ 60] = pSrc[ 60];  pDst[ 61] = pSrc[ 61];
-        pDst[ 62] = pSrc[ 62];  pDst[ 63] = pSrc[ 63];
-        pDst[ 64] = pSrc[ 64];  pDst[ 65] = pSrc[ 65];
-        pDst[ 66] = pSrc[ 66];  pDst[ 67] = pSrc[ 67];
-        pDst[ 68] = pSrc[ 68];  pDst[ 69] = pSrc[ 69];
-        pDst[ 70] = pSrc[ 70];  pDst[ 71] = pSrc[ 71];
-        pDst[ 72] = pSrc[ 72];  pDst[ 73] = pSrc[ 73];
-        pDst[ 74] = pSrc[ 74];  pDst[ 75] = pSrc[ 75];
-        pDst[ 76] = pSrc[ 76];  pDst[ 77] = pSrc[ 77];
-        pDst[ 78] = pSrc[ 78];  pDst[ 79] = pSrc[ 79];
-        pDst[ 80] = pSrc[ 80];  pDst[ 81] = pSrc[ 81];
-        pDst[ 82] = pSrc[ 82];  pDst[ 83] = pSrc[ 83];
-        pDst[ 84] = pSrc[ 84];  pDst[ 85] = pSrc[ 85];
-        pDst[ 86] = pSrc[ 86];  pDst[ 87] = pSrc[ 87];
-        pDst[ 88] = pSrc[ 88];  pDst[ 89] = pSrc[ 89];
-        pDst[ 90] = pSrc[ 90];  pDst[ 91] = pSrc[ 91];
-        pDst[ 92] = pSrc[ 92];  pDst[ 93] = pSrc[ 93];
-        pDst[ 94] = pSrc[ 94];  pDst[ 95] = pSrc[ 95];
-        pDst[ 96] = pSrc[ 96];  pDst[ 97] = pSrc[ 97];
-        pDst[ 98] = pSrc[ 98];  pDst[ 99] = pSrc[ 99];
-        pDst[100] = pSrc[100];  pDst[101] = pSrc[101];
-        pDst[102] = pSrc[102];  pDst[103] = pSrc[103];
-        pDst[104] = pSrc[104];  pDst[105] = pSrc[105];
-        pDst[106] = pSrc[106];  pDst[107] = pSrc[107];
-        pDst[108] = pSrc[108];  pDst[109] = pSrc[109];
-        pDst[110] = pSrc[110];  pDst[111] = pSrc[111];
-        pDst[112] = pSrc[112];  pDst[113] = pSrc[113];
-        pDst[114] = pSrc[114];  pDst[115] = pSrc[115];
-        pDst[116] = pSrc[116];  pDst[117] = pSrc[117];
-        pDst[118] = pSrc[118];  pDst[119] = pSrc[119];
-        pDst[120] = pSrc[120];  pDst[121] = pSrc[121];
-        pDst[122] = pSrc[122];  pDst[123] = pSrc[123];
-        pDst[124] = pSrc[124];  pDst[125] = pSrc[125];
-        pDst[126] = pSrc[126];  pDst[127] = pSrc[127];
-        pDst[128] = pSrc[128];  pDst[129] = pSrc[129];
-        pDst[130] = pSrc[130];  pDst[131] = pSrc[131];
-        pDst[132] = pSrc[132];  pDst[133] = pSrc[133];
-        pDst[134] = pSrc[134];  pDst[135] = pSrc[135];
-        pDst[136] = pSrc[136];  pDst[137] = pSrc[137];
-        pDst[138] = pSrc[138];  pDst[139] = pSrc[139];
-        pDst[140] = pSrc[140];  pDst[141] = pSrc[141];
-        pDst[142] = pSrc[142];  pDst[143] = pSrc[143];
-        pDst[144] = pSrc[144];  pDst[145] = pSrc[145];
-        pDst[146] = pSrc[146];  pDst[147] = pSrc[147];
-        pDst[148] = pSrc[148];  pDst[149] = pSrc[149];
-        pDst[150] = pSrc[150];  pDst[151] = pSrc[151];
-        pDst[152] = pSrc[152];  pDst[153] = pSrc[153];
-        pDst[154] = pSrc[154];  pDst[155] = pSrc[155];
-        pDst[156] = pSrc[156];  pDst[157] = pSrc[157];
-        pDst[158] = pSrc[158];  pDst[159] = pSrc[159];
-        pDst[160] = pSrc[160];  pDst[161] = pSrc[161];
-        pDst[162] = pSrc[162];  pDst[163] = pSrc[163];
-        pDst[164] = pSrc[164];  pDst[165] = pSrc[165];
-        pDst[166] = pSrc[166];  pDst[167] = pSrc[167];
-        pDst[168] = pSrc[168];  pDst[169] = pSrc[169];
-        pDst[170] = pSrc[170];  pDst[171] = pSrc[171];
-        pDst[172] = pSrc[172];  pDst[173] = pSrc[173];
-        pDst[174] = pSrc[174];  pDst[175] = pSrc[175];
-        pDst[176] = pSrc[176];  pDst[177] = pSrc[177];
-        pDst[178] = pSrc[178];  pDst[179] = pSrc[179];
-        pDst[180] = pSrc[180];  pDst[181] = pSrc[181];
-        pDst[182] = pSrc[182];  pDst[183] = pSrc[183];
-        pDst[184] = pSrc[184];  pDst[185] = pSrc[185];
-        pDst[186] = pSrc[186];  pDst[187] = pSrc[187];
-        pDst[188] = pSrc[188];  pDst[189] = pSrc[189];
-        pDst[190] = pSrc[190];  pDst[191] = pSrc[191];
-        pDst[192] = pSrc[192];  pDst[193] = pSrc[193];
-        pDst[194] = pSrc[194];  pDst[195] = pSrc[195];
-        pDst[196] = pSrc[196];  pDst[197] = pSrc[197];
-        pDst[198] = pSrc[198];  pDst[199] = pSrc[199];
-        pDst[200] = pSrc[200];  pDst[201] = pSrc[201];
-        pDst[202] = pSrc[202];  pDst[203] = pSrc[203];
-        pDst[204] = pSrc[204];  pDst[205] = pSrc[205];
-        pDst[206] = pSrc[206];  pDst[207] = pSrc[207];
-        pDst[208] = pSrc[208];  pDst[209] = pSrc[209];
-        pDst[210] = pSrc[210];  pDst[211] = pSrc[211];
-        pDst[212] = pSrc[212];  pDst[213] = pSrc[213];
-        pDst[214] = pSrc[214];  pDst[215] = pSrc[215];
-        pDst[216] = pSrc[216];  pDst[217] = pSrc[217];
-        pDst[218] = pSrc[218];  pDst[219] = pSrc[219];
-        pDst[220] = pSrc[220];  pDst[221] = pSrc[221];
-        pDst[222] = pSrc[222];  pDst[223] = pSrc[223];
-        pDst[224] = pSrc[224];  pDst[225] = pSrc[225];
-        pDst[226] = pSrc[226];  pDst[227] = pSrc[227];
-        pDst[228] = pSrc[228];  pDst[229] = pSrc[229];
-        pDst[230] = pSrc[230];  pDst[231] = pSrc[231];
-        pDst[232] = pSrc[232];  pDst[233] = pSrc[233];
-        pDst[234] = pSrc[234];  pDst[235] = pSrc[235];
-        pDst[236] = pSrc[236];  pDst[237] = pSrc[237];
-        pDst[238] = pSrc[238];  pDst[239] = pSrc[239];
-        pDst[240] = pSrc[240];  pDst[241] = pSrc[241];
-        pDst[242] = pSrc[242];  pDst[243] = pSrc[243];
-        pDst[244] = pSrc[244];  pDst[245] = pSrc[245];
-        pDst[246] = pSrc[246];  pDst[247] = pSrc[247];
-        pDst[248] = pSrc[248];  pDst[249] = pSrc[249];
-        pDst[250] = pSrc[250];  pDst[251] = pSrc[251];
-        pDst[252] = pSrc[252];  pDst[253] = pSrc[253];
-        pDst[254] = pSrc[254];  pDst[255] = pSrc[255];
-    }
-
-#endif
-
-#ifdef XF86DRI_DEVEL
-
-    ATIDRIUnlock(pScreenInfo);
-
-#endif /* XF86DRI_DEVEL */
-
-}
-
-/*
- * ATIMach64HideCursor --
- *
- * Turn off hardware cursor.
- */
-static void
-ATIMach64HideCursor
-(
-    ScrnInfoPtr pScreenInfo
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    if (!(pATI->NewHW.gen_test_cntl & GEN_CUR_EN))
-        return;
-
-    pATI->NewHW.gen_test_cntl &= ~GEN_CUR_EN;
-    out8(GEN_TEST_CNTL, GetByte(pATI->NewHW.gen_test_cntl, 0));
-}
-
-/*
- * ATIMach64ShowCursor --
- *
- * Turn on hardware cursor.
- */
-static void
-ATIMach64ShowCursor
-(
-    ScrnInfoPtr pScreenInfo
-)
-{
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    if (pATI->NewHW.gen_test_cntl & GEN_CUR_EN)
-        return;
-
-    pATI->NewHW.gen_test_cntl |= GEN_CUR_EN;
-    out8(GEN_TEST_CNTL, GetByte(pATI->NewHW.gen_test_cntl, 0));
-}
-
-/*
- * ATIMach64UseHWCursor --
- *
- * Notify cursor layer whether a hardware cursor is configured.
- */
-static Bool
-ATIMach64UseHWCursor
-(
-    ScreenPtr pScreen,
-    CursorPtr pCursor
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-    ATIPtr      pATI        = ATIPTR(pScreenInfo);
-
-    if (!pATI->CursorBase)
-        return FALSE;
-
-    return TRUE;
-}
-
-/*
- * ATIMach64CursorInit --
- *
- * Initialise xf86CursorInfoRec fields with information specific to Mach64
- * variants.
- */
-Bool
-ATIMach64CursorInit
-(
-    ScreenPtr pScreen
-)
-{
-    ScrnInfoPtr       pScreenInfo = xf86Screens[pScreen->myNum];
-    ATIPtr            pATI        = ATIPTR(pScreenInfo);
-    xf86CursorInfoPtr pCursorInfo;
-
-    /* Initialise software cursor */
-    if (!miDCInitialize(pScreen, xf86GetPointerScreenFuncs()))
-        return FALSE;
-
-    if (pATI->Cursor == ATI_CURSOR_SOFTWARE)
-        return TRUE;
-
-    /* Initialise hardware cursor */
-    if (!(pATI->pCursorInfo = xf86CreateCursorInfoRec()))
-        return FALSE;
-
-    pCursorInfo = pATI->pCursorInfo;
-
-    /*
-     * For Mach64 variants, toggling hardware cursors off and on causes display
-     * artifacts.  Ask the cursor support layers to always paint the cursor
-     * (whether or not it is entirely transparent) and to not hide the cursor
-     * when reloading its image.  The two remaining reasons for turning off the
-     * hardware cursor are when it moves to a different screen or on a switch
-     * to a different virtual console.
-     */
-    pCursorInfo->Flags = HARDWARE_CURSOR_TRUECOLOR_AT_8BPP |
-        HARDWARE_CURSOR_INVERT_MASK |
-        HARDWARE_CURSOR_SHOW_TRANSPARENT |
-        HARDWARE_CURSOR_UPDATE_UNHIDDEN |
-        HARDWARE_CURSOR_AND_SOURCE_WITH_MASK |
-
-#if X_BYTE_ORDER != X_LITTLE_ENDIAN
-
-        HARDWARE_CURSOR_BIT_ORDER_MSBFIRST |
-
-#endif /* X_BYTE_ORDER */
-
-        HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_1;
-    pCursorInfo->MaxWidth = pCursorInfo->MaxHeight = 64;
-
-    pCursorInfo->SetCursorColors = ATIMach64SetCursorColours;
-    pCursorInfo->SetCursorPosition = ATIMach64SetCursorPosition;
-    pCursorInfo->LoadCursorImage = ATIMach64LoadCursorImage;
-    pCursorInfo->HideCursor = ATIMach64HideCursor;
-    pCursorInfo->ShowCursor = ATIMach64ShowCursor;
-    pCursorInfo->UseHWCursor = ATIMach64UseHWCursor;
-
-    if (!xf86InitCursor(pScreen, pATI->pCursorInfo))
-    {
-        xf86DestroyCursorInfoRec(pATI->pCursorInfo);
-        pATI->pCursorInfo = NULL;
-        return FALSE;
-    }
-
-    xf86SetSilkenMouse(pScreen);
-    return TRUE;
-}
diff --git a/src/atimach64exa.c b/src/atimach64exa.c
deleted file mode 100644
index 67c5f22..0000000
--- a/src/atimach64exa.c
+++ /dev/null
@@ -1,696 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-/*
- * Copyright 1999-2000 Precision Insight, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-/* 
- * DRI support by:
- *    Manuel Teira
- *    Leif Delgass <ldelgass at retinalburn.net>
- *
- * EXA support by:
- *    Jakub Stachowski <qbast at go2.pl>
- *    George Sapountzis <gsap7 at yahoo.gr>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "ati.h"
-#include "atichip.h"
-#include "atidri.h"
-#include "atimach64accel.h"
-#include "atimach64io.h"
-#include "atipriv.h"
-#include "atiregs.h"
-
-#ifdef XF86DRI_DEVEL
-#include "mach64_dri.h"
-#include "mach64_sarea.h"
-#endif
-
-#ifdef USE_EXA
-extern CARD8 ATIMach64ALU[];
-
-extern void
-ATIMach64ValidateClip
-(
-    ATIPtr pATI,
-    int sc_left,
-    int sc_right,
-    int sc_top,
-    int sc_bottom
-);
-
-#if 0
-#define MACH64_TRACE(x)				\
-do {						\
-    ErrorF("Mach64(%s): ", __FUNCTION__);	\
-    ErrorF x;					\
-} while(0)
-#else
-#define MACH64_TRACE(x) do { } while(0)
-#endif
-
-#if 0
-#define MACH64_FALLBACK(x)			\
-do {						\
-    ErrorF("Fallback(%s): ", __FUNCTION__);	\
-    ErrorF x;					\
-    return FALSE;				\
-} while (0)
-#else
-#define MACH64_FALLBACK(x) return FALSE
-#endif
-
-static void
-Mach64WaitMarker(ScreenPtr pScreenInfo, int Marker)
-{
-    ATIMach64Sync(xf86Screens[pScreenInfo->myNum]);
-}
-
-static Bool
-Mach64GetDatatypeBpp(PixmapPtr pPix, CARD32 *pix_width)
-{
-	int bpp = pPix->drawable.bitsPerPixel;
-
-	switch (bpp) {
-	case 8:
-		*pix_width =
-			SetBits(PIX_WIDTH_8BPP, DP_DST_PIX_WIDTH) |
-			SetBits(PIX_WIDTH_8BPP, DP_SRC_PIX_WIDTH) |
-			SetBits(PIX_WIDTH_1BPP, DP_HOST_PIX_WIDTH);
-		break;
-	case 16:
-		*pix_width =
-			SetBits(PIX_WIDTH_16BPP, DP_DST_PIX_WIDTH) |
-			SetBits(PIX_WIDTH_16BPP, DP_SRC_PIX_WIDTH) |
-			SetBits(PIX_WIDTH_1BPP, DP_HOST_PIX_WIDTH);
-		break;
-	case 24:
-		*pix_width =
-			SetBits(PIX_WIDTH_8BPP, DP_DST_PIX_WIDTH) |
-			SetBits(PIX_WIDTH_8BPP, DP_SRC_PIX_WIDTH) |
-			SetBits(PIX_WIDTH_1BPP, DP_HOST_PIX_WIDTH);
-		break;
-	case 32:
-		*pix_width =
-			SetBits(PIX_WIDTH_32BPP, DP_DST_PIX_WIDTH) |
-			SetBits(PIX_WIDTH_32BPP, DP_SRC_PIX_WIDTH) |
-			SetBits(PIX_WIDTH_1BPP, DP_HOST_PIX_WIDTH);
-		break;
-	default:
-		MACH64_FALLBACK(("Unsupported bpp: %d\n", bpp));
-	}
-
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-
-        *pix_width |= DP_BYTE_PIX_ORDER;
-
-#endif /* X_BYTE_ORDER */
-
-	return TRUE;
-}
-
-static Bool
-Mach64GetOffsetPitch(PixmapPtr pPix, int bpp, CARD32 *pitch_offset,
-		     unsigned int offset, unsigned int pitch)
-{
-#if 0
-    ScrnInfoPtr pScreenInfo = xf86Screens[pPix->drawable.pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    if (pitch % pATI->pExa->pixmapPitchAlign != 0)
-        MACH64_FALLBACK(("Bad pitch 0x%08x\n", pitch));
-
-    if (offset % pATI->pExa->pixmapOffsetAlign != 0)
-        MACH64_FALLBACK(("Bad offset 0x%08x\n", offset));
-#endif
-
-    /* pixels / 8 = ((bytes * 8) / bpp) / 8 = bytes / bpp */
-    pitch = pitch / bpp;
-
-    /* bytes / 8 */
-    offset = offset >> 3;
-
-    *pitch_offset = ((pitch  << 22) | (offset <<  0));
-
-    return TRUE;
-}
-
-static Bool
-Mach64GetPixmapOffsetPitch(PixmapPtr pPix, CARD32 *pitch_offset)
-{
-    CARD32 pitch, offset;
-    int bpp;
-
-    bpp = pPix->drawable.bitsPerPixel;
-    if (bpp == 24)
-        bpp = 8;
-
-    pitch = exaGetPixmapPitch(pPix);
-    offset = exaGetPixmapOffset(pPix);
-
-    return Mach64GetOffsetPitch(pPix, bpp, pitch_offset, offset, pitch);
-}
-
-static Bool
-Mach64PrepareCopy
-(
-    PixmapPtr pSrcPixmap,
-    PixmapPtr pDstPixmap,
-    int       xdir,
-    int       ydir,
-    int       alu,
-    Pixel     planemask
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-    CARD32 src_pitch_offset, dst_pitch_offset, dp_pix_width;
-
-    ATIDRISync(pScreenInfo);
-
-    if (!Mach64GetDatatypeBpp(pDstPixmap, &dp_pix_width))
-        return FALSE;
-    if (!Mach64GetPixmapOffsetPitch(pSrcPixmap, &src_pitch_offset))
-        return FALSE;
-    if (!Mach64GetPixmapOffsetPitch(pDstPixmap, &dst_pitch_offset))
-        return FALSE;
-
-    ATIMach64WaitForFIFO(pATI, 7);
-    outf(DP_WRITE_MASK, planemask);
-    outf(DP_PIX_WIDTH, dp_pix_width);
-    outf(SRC_OFF_PITCH, src_pitch_offset);
-    outf(DST_OFF_PITCH, dst_pitch_offset); 
-    
-    outf(DP_SRC, DP_MONO_SRC_ALLONES |
-        SetBits(SRC_BLIT, DP_FRGD_SRC) | SetBits(SRC_BKGD, DP_BKGD_SRC));
-    outf(DP_MIX, SetBits(ATIMach64ALU[alu], DP_FRGD_MIX));
-
-    outf(CLR_CMP_CNTL, CLR_CMP_FN_FALSE);
-
-    pATI->dst_cntl = 0;
-
-    if (ydir > 0)
-        pATI->dst_cntl |= DST_Y_DIR;
-    if (xdir > 0)
-        pATI->dst_cntl |= DST_X_DIR;
-
-    if (pATI->XModifier == 1)
-        outf(DST_CNTL, pATI->dst_cntl);
-    else
-        pATI->dst_cntl |= DST_24_ROT_EN;
-
-    return TRUE;
-}
-
-static void
-Mach64Copy
-(
-    PixmapPtr pDstPixmap,
-    int       srcX,
-    int       srcY,
-    int       dstX,
-    int       dstY,
-    int       w,
-    int       h
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    srcX *= pATI->XModifier;
-    dstY *= pATI->XModifier;
-    w    *= pATI->XModifier;
-
-    ATIDRISync(pScreenInfo);
-
-    /* Disable clipping if it gets in the way */
-    ATIMach64ValidateClip(pATI, dstX, dstX + w - 1, dstY, dstY + h - 1);
-
-    if (!(pATI->dst_cntl & DST_X_DIR))
-    {
-        srcX += w - 1;
-        dstX += w - 1;
-    }
-
-    if (!(pATI->dst_cntl & DST_Y_DIR))
-    {
-        srcY += h - 1;
-        dstY += h - 1;
-    }
-
-    if (pATI->XModifier != 1)
-        outf(DST_CNTL, pATI->dst_cntl | SetBits((dstX / 4) % 6, DST_24_ROT));
-
-    ATIMach64WaitForFIFO(pATI, 4);
-    outf(SRC_Y_X, SetWord(srcX, 1) | SetWord(srcY, 0));
-    outf(SRC_WIDTH1, w);
-    outf(DST_Y_X, SetWord(dstX, 1) | SetWord(dstY, 0));
-    outf(DST_HEIGHT_WIDTH, SetWord(w, 1) | SetWord(h, 0));
-
-    /*
-     * On VTB's and later, the engine will randomly not wait for a copy
-     * operation to commit its results to video memory before starting the next
-     * one.  The probability of such occurrences increases with GUI_WB_FLUSH
-     * (or GUI_WB_FLUSH_P) setting, bitsPerPixel and/or CRTC clock.  This
-     * would point to some kind of video memory bandwidth problem were it noti
-     * for the fact that the problem occurs less often (but still occurs) when
-     * copying larger rectangles.
-     */
-    if ((pATI->Chip >= ATI_CHIP_264VTB) && !pATI->OptionDevel)
-    {
-        exaMarkSync(pScreenInfo->pScreen); /* Force sync. */
-        exaWaitSync(pScreenInfo->pScreen); /* Sync and notify EXA. */
-    }
-}
-
-static void Mach64DoneCopy(PixmapPtr pDstPixmap) { }
-
-static Bool
-Mach64PrepareSolid
-(
-    PixmapPtr pPixmap,
-    int       alu, 
-    Pixel     planemask, 
-    Pixel     fg
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pPixmap->drawable.pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-    CARD32 dst_pitch_offset, dp_pix_width;
-
-    ATIDRISync(pScreenInfo);
-
-    if (!Mach64GetDatatypeBpp(pPixmap, &dp_pix_width))
-        return FALSE;
-    if (!Mach64GetPixmapOffsetPitch(pPixmap, &dst_pitch_offset))
-        return FALSE;
-
-    ATIMach64WaitForFIFO(pATI, 7);
-    outf(DP_WRITE_MASK, planemask);
-    outf(DP_PIX_WIDTH, dp_pix_width);
-    outf(DST_OFF_PITCH, dst_pitch_offset); 
-
-    outf(DP_SRC, DP_MONO_SRC_ALLONES |
-        SetBits(SRC_FRGD, DP_FRGD_SRC) | SetBits(SRC_BKGD, DP_BKGD_SRC));
-    outf(DP_FRGD_CLR, fg);
-    outf(DP_MIX, SetBits(ATIMach64ALU[alu], DP_FRGD_MIX));
-
-    outf(CLR_CMP_CNTL, CLR_CMP_FN_FALSE);
-
-    if (pATI->XModifier == 1)
-        outf(DST_CNTL, DST_X_DIR | DST_Y_DIR);
-
-    return TRUE;
-}
-
-static void
-Mach64Solid
-(
-    PixmapPtr pPixmap, 
-    int       x1, 
-    int       y1, 
-    int       x2, 
-    int       y2
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pPixmap->drawable.pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    int x = x1;
-    int y = y1;
-    int w = x2-x1;
-    int h = y2-y1;
-
-    ATIDRISync(pScreenInfo);
-
-    if (pATI->XModifier != 1)
-    {
-        x *= pATI->XModifier;
-        w *= pATI->XModifier;
-
-        outf(DST_CNTL, SetBits((x / 4) % 6, DST_24_ROT) |
-            (DST_X_DIR | DST_Y_DIR | DST_24_ROT_EN));
-    }
-
-    /* Disable clipping if it gets in the way */
-    ATIMach64ValidateClip(pATI, x, x + w - 1, y, y + h - 1);
-
-    ATIMach64WaitForFIFO(pATI, 2);
-    outf(DST_Y_X, SetWord(x, 1) | SetWord(y, 0));
-    outf(DST_HEIGHT_WIDTH, SetWord(w, 1) | SetWord(h, 0));
-}
-
-static void Mach64DoneSolid(PixmapPtr pPixmap) { }
-
-/*
- * Memcpy-based UTS.
- */
-static Bool
-Mach64UploadToScreen(PixmapPtr pDst, int x, int y, int w, int h,
-    char *src, int src_pitch)
-{
-    char  *dst        = pDst->devPrivate.ptr;
-    int    dst_pitch  = exaGetPixmapPitch(pDst);
-
-    int bpp    = pDst->drawable.bitsPerPixel;
-    int cpp    = (bpp + 7) / 8;
-    int wBytes = w * cpp;
-
-    exaWaitSync(pDst->drawable.pScreen);
-
-    dst += (x * cpp) + (y * dst_pitch);
-
-    while (h--) {
-        memcpy(dst, src, wBytes);
-        src += src_pitch;
-        dst += dst_pitch;
-    }
-
-    return TRUE;
-}
-
-/*
- * Memcpy-based DFS.
- */
-static Bool
-Mach64DownloadFromScreen(PixmapPtr pSrc, int x, int y, int w, int h,
-    char *dst, int dst_pitch)
-{
-    char  *src        = pSrc->devPrivate.ptr;
-    int    src_pitch  = exaGetPixmapPitch(pSrc);
-
-    int bpp    = pSrc->drawable.bitsPerPixel;
-    int cpp    = (bpp + 7) / 8;
-    int wBytes = w * cpp;
-
-    exaWaitSync(pSrc->drawable.pScreen);
-
-    src += (x * cpp) + (y * src_pitch);
-
-    while (h--) {
-        memcpy(dst, src, wBytes);
-        src += src_pitch;
-        dst += dst_pitch;
-    }
-
-    return TRUE;
-}
-
-#include "atimach64render.c"
-
-/* Compute log base 2 of val. */
-static __inline__ int Mach64Log2(int val)
-{
-    int bits;
-
-    for (bits = 0; val != 0; val >>= 1, ++bits)
-        ;
-    return bits - 1;
-}
-
-/*
- * Memory layour for EXA with DRI (no local_textures):
- * | front  | back   | depth  | textures | pixmaps, xv | c |
- *
- * 1024x768 at 16bpp with 8 MB:
- * | 1.5 MB | 1.5 MB | 1.5 MB | 0        | ~3.5 MB     | c |
- *
- * 1024x768 at 32bpp with 8 MB:
- * | 3.0 MB | 3.0 MB | 1.5 MB | 0        | ~0.5 MB     | c |
- *
- * "c" is the hw cursor which occupies 1KB
- */
-static void
-Mach64SetupMemEXA(ScreenPtr pScreen)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    int cpp = (pScreenInfo->bitsPerPixel + 7) / 8;
-    /* front and back buffer */
-    int bufferSize = pScreenInfo->virtualY * pScreenInfo->displayWidth * cpp;
-    /* always 16-bit z-buffer */
-    int depthSize  = pScreenInfo->virtualY * pScreenInfo->displayWidth * 2;
-
-    ExaDriverPtr pExa = pATI->pExa;
-
-    pExa->memoryBase = pATI->pMemory;
-    pExa->memorySize = pScreenInfo->videoRam * 1024;
-    pExa->offScreenBase = bufferSize;
-
-#ifdef XF86DRI_DEVEL
-    if (pATI->directRenderingEnabled)
-    {
-	ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-	Bool is_pci = pATIDRIServer->IsPCI;
-
-	int textureSize = 0;
-	int pixmapCache = 0;
-	int next = 0;
-
-	/* front buffer */
-	pATIDRIServer->frontOffset = 0;
-	pATIDRIServer->frontPitch = pScreenInfo->displayWidth;
-	next += bufferSize;
-
-	/* back buffer */
-	pATIDRIServer->backOffset = next;
-	pATIDRIServer->backPitch = pScreenInfo->displayWidth;
-	next += bufferSize;
-
-	/* depth buffer */
-	pATIDRIServer->depthOffset = next;
-	pATIDRIServer->depthPitch = pScreenInfo->displayWidth;
-	next += depthSize;
-
-	/* ATIScreenInit does check for the this condition. */
-	if (next > pExa->memorySize)
-	{
-	    xf86DrvMsg(pScreen->myNum, X_WARNING,
-		"DRI static buffer allocation failed, disabling DRI --"
-		"need at least %d kB video memory\n", next / 1024 );
-	    ATIDRICloseScreen(pScreen);
-	    pATI->directRenderingEnabled = FALSE;
-	}
-
-	/* local textures */
-
-	/* Reserve approx. half of offscreen memory for local textures */
-	textureSize = (pExa->memorySize - next) / 2;
-
-	/* In case DRI requires more offscreen memory than available,
-	 * should not happen as ATIScreenInit would have not enabled DRI */
-	if (textureSize < 0)
-	    textureSize = 0;
-
-	/* Try for enough pixmap cache for a full viewport */
-	pixmapCache = (pExa->memorySize - next) - textureSize;
-	if (pixmapCache < bufferSize)
-	    textureSize = 0;
-
-	/* Don't allocate a local texture heap for AGP unless requested */
-	if ( !is_pci && !pATI->OptionLocalTextures )
-	    textureSize = 0;
-
-	if (textureSize > 0)
-	{
-	    int l = Mach64Log2(textureSize / MACH64_NR_TEX_REGIONS);
-	    if (l < MACH64_LOG_TEX_GRANULARITY)
-		l = MACH64_LOG_TEX_GRANULARITY;
-	    pATIDRIServer->logTextureGranularity = l;
-
-	    /* Round the texture size down to the nearest whole number of
-	     * texture regions.
-	     */
-	    textureSize = (textureSize >> l) << l;
-	}
-
-	/* Set a minimum usable local texture heap size.  This will fit
-	 * two 256x256 textures.  We check this after any rounding of
-	 * the texture area.
-	 */
-	if (textureSize < 256*256 * cpp * 2)
-	    textureSize = 0;
-
-	/* Disable DRI for PCI if cannot allocate a local texture heap */
-	if ( is_pci && textureSize == 0 )
-	{
-	    xf86DrvMsg(pScreen->myNum, X_WARNING,
-		"Not enough memory for local textures, disabling DRI\n");
-	    ATIDRICloseScreen(pScreen);
-	    pATI->directRenderingEnabled = FALSE;
-	}
-
-	pATIDRIServer->textureOffset = next;
-	pATIDRIServer->textureSize = textureSize;
-	next += textureSize;
-
-	/* pExa->offScreenBase is moved to `next' when DRI gets activated */
-    }
-#endif /* XF86DRI_DEVEL */
-
-    xf86DrvMsg(pScreen->myNum, X_INFO,
-        "EXA memory management initialized\n"
-        "\t base     :  %10p\n"
-        "\t offscreen: +%10lx\n"
-        "\t size     : +%10lx\n"
-        "\t cursor   :  %10p\n",
-        pExa->memoryBase,
-        pExa->offScreenBase,
-        pExa->memorySize,
-        pATI->pCursorImage);
-
-    if (TRUE || xf86GetVerbosity() > 1)
-    {
-        int offscreen = pExa->memorySize - pExa->offScreenBase;
-        int viewport = bufferSize;
-        int dvdframe = 720*480*cpp; /* enough for single-buffered DVD */
-
-        xf86DrvMsg(pScreen->myNum, X_INFO,
-            "Will use %d kB of offscreen memory for EXA\n"
-            "\t\t or %5.2f viewports (composite)\n"
-            "\t\t or %5.2f dvdframes (xvideo)\n",
-            offscreen / 1024,
-            1.0 * offscreen / viewport,
-            1.0 * offscreen / dvdframe);
-    }
-
-#ifdef XF86DRI_DEVEL
-    if (pATI->directRenderingEnabled)
-    {
-        ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-
-        xf86DrvMsg(pScreen->myNum, X_INFO,
-                   "Will use back  buffer at offset 0x%x\n",
-                   pATIDRIServer->backOffset);
-
-        xf86DrvMsg(pScreen->myNum, X_INFO,
-                   "Will use depth buffer at offset 0x%x\n",
-                   pATIDRIServer->depthOffset);
-
-        if (pATIDRIServer->textureSize > 0)
-        {
-            xf86DrvMsg(pScreen->myNum, X_INFO,
-                   "Will use %d kB for local textures at offset 0x%x\n",
-                   pATIDRIServer->textureSize/1024,
-                   pATIDRIServer->textureOffset);
-        }
-    }
-#endif /* XF86DRI_DEVEL */
-
-    pExa->pixmapOffsetAlign = 64;
-    pExa->pixmapPitchAlign = 64;
-
-    pExa->flags = EXA_OFFSCREEN_PIXMAPS;
-
-    pExa->maxX = ATIMach64MaxX;
-    pExa->maxY = ATIMach64MaxY;
-}
-
-Bool ATIMach64ExaInit(ScreenPtr pScreen)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-    ExaDriverPtr pExa;
-
-    pExa = exaDriverAlloc();
-    if (!pExa)
-        return FALSE;
-
-    pATI->pExa = pExa;
-
-    pExa->exa_major = 2;
-    pExa->exa_minor = 0;
-
-    Mach64SetupMemEXA(pScreen);
-
-    pExa->WaitMarker = Mach64WaitMarker;
-
-    pExa->PrepareSolid = Mach64PrepareSolid;
-    pExa->Solid = Mach64Solid;
-    pExa->DoneSolid = Mach64DoneSolid;
-
-    pExa->PrepareCopy = Mach64PrepareCopy;
-    pExa->Copy = Mach64Copy;
-    pExa->DoneCopy = Mach64DoneCopy;
-
-    /* EXA hits more optimized paths when it does not have to fallback because
-     * of missing UTS/DFS, hook memcpy-based UTS/DFS.
-     */
-    pExa->UploadToScreen = Mach64UploadToScreen;
-    pExa->DownloadFromScreen = Mach64DownloadFromScreen;
-
-    if (pATI->RenderAccelEnabled) {
-	if (pATI->Chip >= ATI_CHIP_264GTPRO) {
-	    /* 3D Rage Pro does not support NPOT textures. */
-	    pExa->flags |= EXA_OFFSCREEN_ALIGN_POT;
-
-	    pExa->CheckComposite = Mach64CheckComposite;
-	    pExa->PrepareComposite = Mach64PrepareComposite;
-	    pExa->Composite = Mach64Composite;
-	    pExa->DoneComposite = Mach64DoneComposite;
-	} else {
-	    xf86DrvMsg(pScreen->myNum, X_INFO,
-		       "Render acceleration is not supported for ATI chips "
-		       "earlier than the ATI 3D Rage Pro.\n");
-	    pATI->RenderAccelEnabled = FALSE;
-	}
-    }
-
-    xf86DrvMsg(pScreen->myNum, X_INFO, "Render acceleration %s\n",
-	       pATI->RenderAccelEnabled ? "enabled" : "disabled");
-
-    if (!exaDriverInit(pScreen, pATI->pExa)) {
-	xfree(pATI->pExa);
-	pATI->pExa = NULL;
-	return FALSE;
-    }
-
-    return TRUE;
-}
-#endif
diff --git a/src/atimach64i2c.c b/src/atimach64i2c.c
deleted file mode 100644
index 0f7d797..0000000
--- a/src/atimach64i2c.c
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atichip.h"
-#include "atii2c.h"
-#include "atimach64i2c.h"
-#include "atimach64io.h"
-#include "atituner.h"
-
-/* MPP_CONFIG register values */
-#define MPP_INIT     pATI->NewHW.mpp_config
-
-#define MPP_WRITE    (MPP_INIT                                               )
-#define MPP_WRITEINC (MPP_INIT | (MPP_AUTO_INC_EN                           ))
-#define MPP_READ     (MPP_INIT | (                  MPP_BUFFER_MODE_PREFETCH))
-#define MPP_READINC  (MPP_INIT | (MPP_AUTO_INC_EN | MPP_BUFFER_MODE_PREFETCH))
-
-/*
- * ATIMach64MPPWaitForIdle --
- *
- * Support function to wait for the Multimedia Peripheral Port to become idle.
- * Currently, this function's return value indicates whether or not the port
- * became idle within 512 polling iterations.  For now, this value is ignored
- * by the rest of the code, but might be used in the future.
- */
-static Bool
-ATIMach64MPPWaitForIdle
-(
-    ATIPtr pATI
-)
-{
-    CARD32 Count = 0x0200;
-
-    while (in8(MPP_CONFIG + 3) & GetByte(MPP_BUSY, 3))
-    {
-        if (!--Count)
-            return FALSE;
-        usleep(1);              /* XXX Excessive? */
-    }
-
-    return TRUE;
-}
-
-/*
- * ATIMach64MPPSetAddress --
- *
- * Sets a 16-bit ImpacTV address on the Multimedia Peripheral Port.
- */
-static void
-ATIMach64MPPSetAddress
-(
-    ATIPtr pATI,
-    CARD16 Address
-)
-{
-    ATIMach64MPPWaitForIdle(pATI);
-    outr(MPP_CONFIG, MPP_WRITEINC);
-    outr(MPP_ADDR, 0x00000008U);
-    out8(MPP_DATA, (CARD8)Address);
-    ATIMach64MPPWaitForIdle(pATI);
-    out8(MPP_DATA, (CARD8)(Address >> 8));
-    ATIMach64MPPWaitForIdle(pATI);
-    outr(MPP_CONFIG, MPP_WRITE);
-    outr(MPP_ADDR, 0x00000018U);
-    ATIMach64MPPWaitForIdle(pATI);
-}
-
-/*
- * ATIMach64ImpacTVProbe --
- *
- * This probes for an ImpacTV chip and returns its chip ID, or 0.
- */
-static int
-ATIMach64ImpacTVProbe
-(
-    int    iScreen,
-    ATIPtr pATI
-)
-{
-    CARD8 ChipID = 0;
-
-    /* Assume ATIModePreInit() has already been called */
-    outr(MPP_STROBE_SEQ, pATI->NewHW.mpp_strobe_seq);
-    outr(TVO_CNTL, pATI->NewHW.tvo_cntl);
-
-    outr(MPP_CONFIG, MPP_READ);
-    ATIMach64MPPWaitForIdle(pATI);
-    outr(MPP_ADDR, 0x0000000AU);
-    if (!(ChipID = in8(MPP_DATA)))
-    {
-         ATIMach64MPPWaitForIdle(pATI);
-         outr(MPP_ADDR, 0x00000023U);
-         if ((ChipID = in8(MPP_DATA)) != 0x54U)
-         {
-             ATIMach64MPPWaitForIdle(pATI);
-             outr(MPP_ADDR, 0x0000000BU);
-             ChipID = in8(MPP_DATA);
-         }
-    }
-    ATIMach64MPPWaitForIdle(pATI);
-    outr(MPP_CONFIG, MPP_WRITE);
-
-    if (ChipID)
-        xf86DrvMsg(iScreen, X_PROBED, "ImpacTV chip ID 0x%02X detected.\n",
-            ChipID);
-
-    return (int)(CARD16)ChipID;
-}
-
-/*
- * ATIMach64ImpacTVSetBits --
- *
- * Controls I2C SDA and SCL lines through ImpacTV.
- */
-static void
-ATIMach64ImpacTVSetBits
-(
-    ATII2CPtr pATII2C,
-    ATIPtr    pATI,
-    CARD32    Bits
-)
-{
-    pATII2C->I2CCur = Bits;
-
-    ATIMach64MPPSetAddress(pATI, IT_I2C_CNTL);
-
-    outr(MPP_CONFIG, MPP_WRITE);
-
-    out8(MPP_DATA, (CARD8)Bits);
-
-    ATIMach64MPPWaitForIdle(pATI);
-}
-
-/*
- * ATIMach64ImpacTVGetBits --
- *
- * Returns the status of an ImpacTV's I2C control lines.
- */
-static CARD32
-ATIMach64ImpacTVGetBits
-(
-    ATIPtr    pATI
-)
-{
-    ATIMach64MPPSetAddress(pATI, IT_I2C_CNTL);
-
-    outr(MPP_CONFIG, MPP_READ);
-
-    ATIMach64MPPWaitForIdle(pATI);
-
-    return in8(MPP_DATA);
-}
-
-/*
- * ATIMach64I2C_CNTLSetBits --
- *
- * Controls SDA and SCL lines through a 3D Rage Pro's hardware assisted I2C.
- */
-static void
-ATIMach64I2C_CNTLSetBits
-(
-    ATII2CPtr pATII2C,
-    ATIPtr    pATI,
-    CARD32    Bits
-)
-{
-    pATII2C->I2CCur = Bits;
-
-    out8(I2C_CNTL_0 + 1, (CARD8)Bits);
-}
-
-/*
- * ATIMach64I2C_CNTLGetBits --
- *
- * Returns the status of a 3D Rage Pro's hardware assisted I2C control lines.
- */
-static CARD32
-ATIMach64I2C_CNTLGetBits
-(
-    ATIPtr    pATI
-)
-{
-    return in8(I2C_CNTL_0 + 1);
-}
-
-/*
- * ATIMach64GP_IOSetBits --
- *
- * Controls SDA and SCL control lines through a Mach64's GP_IO register.
- */
-static void
-ATIMach64GP_IOSetBits
-(
-    ATII2CPtr pATII2C,
-    ATIPtr    pATI,
-    CARD32    Bits
-)
-{
-    pATII2C->I2CCur = Bits;
-
-    outr(GP_IO, Bits);
-}
-
-/*
- * ATIMach64GP_IOGetBits --
- *
- * Returns the status of I2C control lines through a Mach64's GP_IO register.
- */
-static CARD32
-ATIMach64GP_IOGetBits
-(
-    ATIPtr    pATI
-)
-{
-    return inr(GP_IO);
-}
-
-#define GPIO1_MASK \
-    (DAC_GIO_STATE_1 | DAC_GIO_DIR_1)
-#define GPIO2_MASK \
-    (GEN_GIO2_DATA_OUT | GEN_GIO2_DATA_IN | GEN_GIO2_WRITE)
-
-/*
- * ATIMach64DAC_GENSetBits --
- *
- * Controls SDA and SCL control lines through a Mach64's GEN_TEST_CNTL and
- * DAC_CNTL registers.
- */
-static void
-ATIMach64DAC_GENSetBits
-(
-    ATII2CPtr pATII2C,
-    ATIPtr    pATI,
-    CARD32    Bits
-)
-{
-    CARD32 tmp;
-
-    pATII2C->I2CCur = Bits;
-
-    tmp = inr(DAC_CNTL) & ~GPIO1_MASK;
-    outr(DAC_CNTL, tmp | (Bits & GPIO1_MASK));
-    tmp = inr(GEN_TEST_CNTL) & ~GPIO2_MASK;
-    outr(GEN_TEST_CNTL, tmp | (Bits & GPIO2_MASK));
-}
-
-/*
- * ATIMach64DAC_GENGetBits --
- *
- * Returns the status of I2C control lines through a Mach64's GEN_TEST_CNTL and
- * DAC_CNTL registers.
- */
-static CARD32
-ATIMach64DAC_GENGetBits
-(
-    ATIPtr    pATI
-)
-{
-    return (inr(DAC_CNTL) & GPIO1_MASK) | (inr(GEN_TEST_CNTL) & GPIO2_MASK);
-}
-
-/*
- * ATITVAddOnProbe --
- *
- * Probe for an ATI-TV add-on card at specific addresses on an I2C bus.
- */
-static Bool
-ATITVAddOnProbe
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    I2CBusPtr   pI2CBus
-)
-{
-    I2CDevPtr pI2CDev = xnfcalloc(1, SizeOf(I2CDevRec));
-    int       Index;
-    I2CByte   tmp;
-
-    static const CARD8 ATITVAddOnAddresses[] = {0x70, 0x40, 0x78, 0x72, 0x42};
-
-    pI2CDev->DevName      = "ATI-TV Add-on";
-    pI2CDev->pI2CBus      = pI2CBus;
-    pI2CDev->StartTimeout = pI2CBus->StartTimeout;
-    pI2CDev->BitTimeout   = pI2CBus->BitTimeout;
-    pI2CDev->AcknTimeout  = pI2CBus->AcknTimeout;
-    pI2CDev->ByteTimeout  = pI2CBus->ByteTimeout;
-
-    for (Index = 0;  Index < NumberOf(ATITVAddOnAddresses);  Index++)
-    {
-        pI2CDev->SlaveAddr = ATITVAddOnAddresses[Index];
-
-        if (xf86I2CFindDev(pI2CBus, pI2CDev->SlaveAddr))
-            continue;
-
-        tmp = 0xFFU;
-
-        if (!(*pI2CBus->I2CWriteRead)(pI2CDev, &tmp, 1, NULL, 0) ||
-            !(*pI2CBus->I2CWriteRead)(pI2CDev, NULL, 0, &tmp, 1) ||
-            (tmp == 0xFFU) || ((tmp = tmp & 0x1FU) == /*ATI_TUNER_NONE*/0))
-            continue;
-
-        if (!xf86I2CDevInit(pI2CDev))
-        {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "Failed to register I2C device for ATI-TV add-on.\n");
-            break;
-        }
-
-        if (pATI->Tuner != tmp)
-        {
-            if (pATI->Tuner != ATI_TUNER_NONE)
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                    "Tuner type mismatch:  BIOS 0x%x, ATI-TV 0x%x.\n",
-                    pATI->Tuner, tmp);
-
-            pATI->Tuner = tmp;
-        }
-
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-            "%s tuner detected on ATI-TV add-on adapter at I2C bus address"
-            " 0x%2x.\n", ATITuners[pATI->Tuner].name, pI2CDev->SlaveAddr);
-
-        return TRUE;
-    }
-
-    xfree(pI2CDev);
-    return FALSE;
-}
-
-/*
- * ATIMach64I2CPreInit --
- *
- * This function potentially allocates an I2CBusRec and initialises it with
- * ATI-specific and Mach64-specific information.
- */
-void
-ATIMach64I2CPreInit
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI
-)
-{
-    I2CBusPtr pI2CBus;
-    ATII2CPtr pATII2C;
-
-    if ((pATI->Chip < ATI_CHIP_264CT) || (pATI->Chip >= ATI_CHIP_Mach64))
-        return;
-
-    /* Create an I2CBusRec and generically prime it */
-    if (!(pI2CBus = ATICreateI2CBusRec(pScreenInfo->scrnIndex, pATI, "Mach64")))
-        return;
-
-    pATII2C = pI2CBus->DriverPrivate.ptr;
-
-    switch (pATI->Chip)
-    {
-        case ATI_CHIP_264GTPRO:
-        case ATI_CHIP_264LTPRO:
-        case ATI_CHIP_264XL:
-        case ATI_CHIP_MOBILITY:
-            /*
-             * These have I2C-specific registers.  Assume older I2C access
-             * mechanisms are inoperative.
-             */
-            pATII2C->I2CSetBits = ATIMach64I2C_CNTLSetBits;
-            pATII2C->I2CGetBits = ATIMach64I2C_CNTLGetBits;
-            pATII2C->SCLDir = pATII2C->SDADir = 0;
-            pATII2C->SCLGet = pATII2C->SCLSet = GetByte(I2C_CNTL_SCL, 1);
-            pATII2C->SDAGet = pATII2C->SDASet = GetByte(I2C_CNTL_SDA, 1);
-
-            out8(I2C_CNTL_1 + 2, GetByte(I2C_SEL, 2));
-            out8(I2C_CNTL_0 + 0,
-                GetByte(I2C_CNTL_STAT | I2C_CNTL_HPTR_RST, 0));
-            break;
-
-        case ATI_CHIP_264VTB:
-        case ATI_CHIP_264GTB:
-        case ATI_CHIP_264VT3:
-        case ATI_CHIP_264GTDVD:
-        case ATI_CHIP_264LT:
-        case ATI_CHIP_264VT4:
-        case ATI_CHIP_264GT2C:
-            /* If an ImpacTV chip is found, use it to provide I2C access */
-            if (ATIMach64ImpacTVProbe(pScreenInfo->scrnIndex, pATI))
-            {
-                pATII2C->I2CSetBits = ATIMach64ImpacTVSetBits;
-                pATII2C->I2CGetBits = ATIMach64ImpacTVGetBits;
-                pATII2C->SCLDir = IT_SCL_DIR;
-                pATII2C->SCLGet = IT_SCL_GET;
-                pATII2C->SCLSet = IT_SCL_SET;
-                pATII2C->SDADir = IT_SDA_DIR;
-                pATII2C->SDAGet = IT_SDA_GET;
-                pATII2C->SDASet = IT_SDA_SET;
-
-                ATIMach64MPPSetAddress(pATI, IT_I2C_CNTL);
-                outr(MPP_CONFIG, MPP_WRITEINC);
-                out8(MPP_DATA, 0x00U);
-                out8(MPP_DATA, 0x55U);
-                out8(MPP_DATA, 0x00U);
-                out8(MPP_DATA, 0x00U);
-                ATIMach64MPPWaitForIdle(pATI);
-                break;
-            }
-            /* Otherwise, fall through to the older case */
-
-        case ATI_CHIP_264VT:
-        case ATI_CHIP_264GT:
-            /* First try GIO pins 11 (clock) and 4 (data) */
-            pATII2C->I2CSetBits = ATIMach64GP_IOSetBits;
-            pATII2C->I2CGetBits = ATIMach64GP_IOGetBits;
-            pATII2C->SCLDir = GP_IO_DIR_B;
-            pATII2C->SCLGet = pATII2C->SCLSet = GP_IO_B;
-            pATII2C->SDADir = GP_IO_DIR_4;
-            pATII2C->SDAGet = pATII2C->SDASet = GP_IO_4;
-
-            if (ATITVAddOnProbe(pScreenInfo, pATI, pI2CBus))
-                break;
-
-            /* Next, try pins 10 (clock) and 12 (data) */
-            pATII2C->SCLDir = GP_IO_DIR_A;
-            pATII2C->SCLGet = pATII2C->SCLSet = GP_IO_A;
-            pATII2C->SDADir = GP_IO_DIR_C;
-            pATII2C->SDAGet = pATII2C->SDASet = GP_IO_C;
-
-            if (ATITVAddOnProbe(pScreenInfo, pATI, pI2CBus))
-                break;
-            /* Otherwise, fall back to ATI's first I2C implementation */
-
-        default:
-            /*
-             * First generation integrated controllers access GIO pin 1 (clock)
-             * though DAC_CNTL, and pin 2 (data) through GEN_TEST_CNTL.
-             */
-            pATII2C->I2CSetBits = ATIMach64DAC_GENSetBits;
-            pATII2C->I2CGetBits = ATIMach64DAC_GENGetBits;
-            pATII2C->SCLDir = DAC_GIO_DIR_1;
-            pATII2C->SCLGet = pATII2C->SCLSet = DAC_GIO_STATE_1;
-            pATII2C->SDADir = GEN_GIO2_WRITE;
-            pATII2C->SDAGet = GEN_GIO2_DATA_IN;
-            pATII2C->SDASet = GEN_GIO2_DATA_OUT;
-
-            (void)ATITVAddOnProbe(pScreenInfo, pATI, pI2CBus);
-            break;
-    }
-}
diff --git a/src/atimach64i2c.h b/src/atimach64i2c.h
deleted file mode 100644
index a9f98a9..0000000
--- a/src/atimach64i2c.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIMACH64I2C_H___
-#define ___ATIMACH64I2C_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-extern void ATIMach64I2CPreInit(ScrnInfoPtr, ATIPtr);
-
-#endif /* ___ATIMACH64I2C_H___ */
diff --git a/src/atimach64io.c b/src/atimach64io.c
deleted file mode 100644
index bfbdd3d..0000000
--- a/src/atimach64io.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atichip.h"
-#include "atimach64io.h"
-
-/*
- * ATIMach64AccessPLLReg --
- *
- * This function sets up the addressing required to access, for read or write,
- * a 264xT's PLL registers.
- */
-void
-ATIMach64AccessPLLReg
-(
-    ATIPtr      pATI,
-    const CARD8 Index,
-    const Bool  Write
-)
-{
-    CARD8 clock_cntl1 = in8(CLOCK_CNTL + 1) &
-        ~GetByte(PLL_WR_EN | PLL_ADDR, 1);
-
-    /* Set PLL register to be read or written */
-    out8(CLOCK_CNTL + 1, clock_cntl1 |
-        GetByte(SetBits(Index, PLL_ADDR) | SetBits(Write, PLL_WR_EN), 1));
-}
-
-/*
- * ATIMach64PollEngineStatus --
- *
- * This function refreshes the driver's view of the draw engine's status.  This
- * has been moved into a separate compilation unit to prevent inlining.
- */
-void
-ATIMach64PollEngineStatus
-(
-    ATIPtr pATI
-)
-{
-    CARD32 IOValue;
-    int    Count;
-
-    if (pATI->Chip < ATI_CHIP_264VTB)
-    {
-        /*
-         * TODO:  Deal with locked engines.
-         */
-        IOValue = inm(FIFO_STAT);
-        pATI->EngineIsLocked = GetBits(IOValue, FIFO_ERR);
-
-        /*
-         * The following counts the number of bits in FIFO_STAT_BITS, and is
-         * derived from miSetVisualTypes().
-         */
-        IOValue = GetBits(IOValue, FIFO_STAT_BITS);
-        Count = (IOValue >> 1) & 0x36DBU;
-        Count = IOValue - Count - ((Count >> 1) & 0x36DBU);
-        Count = ((Count + (Count >> 3)) & 0x71C7U) % 0x3FU;
-        Count = pATI->nFIFOEntries - Count;
-        if (Count > pATI->nAvailableFIFOEntries)
-            pATI->nAvailableFIFOEntries = Count;
-
-        /*
-         * If the command FIFO is non-empty, then the engine isn't idle.
-         */
-        if (pATI->nAvailableFIFOEntries < pATI->nFIFOEntries)
-        {
-            pATI->EngineIsBusy = TRUE;
-            return;
-        }
-    }
-
-    IOValue = inm(GUI_STAT);
-    pATI->EngineIsBusy = GetBits(IOValue, GUI_ACTIVE);
-    Count = GetBits(IOValue, GUI_FIFO);
-    if (Count > pATI->nAvailableFIFOEntries)
-        pATI->nAvailableFIFOEntries = Count;
-}
diff --git a/src/atimach64io.h b/src/atimach64io.h
deleted file mode 100644
index d1b14d2..0000000
--- a/src/atimach64io.h
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * DRI support by:
- *    Manuel Teira
- *    Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifndef ___ATIMACH64IO_H___
-
-#if !defined(___ATI_H___) && defined(XFree86Module)
-# error Missing #include "ati.h" before #include "atimach64io.h"
-# undef XFree86Module
-#endif
-
-#define ___ATIMACH64IO_H___ 1
-
-#include "atiregs.h"
-#include "atistruct.h"
-
-#include "compiler.h"
-
-/*
- * A few important notes on some of the I/O statements provided:
- *
- * inl/outl     32-bit R/W through PIO space.  The register is specified as the
- *              actual PIO address.  These are actually defined in compiler.h.
- *
- * inb/outb     8-bit counterparts to inl/outl.
- *
- * inm/outm     32-bit R/W through MMIO space.  The register is specified as
- *              the actual MMIO offset (with Block 1 following Block 0), which,
- *              in this case, is equivalent to the register's IOPortTag from
- *              atiregs.h.  Can be used for those few non-FIFO'ed registers
- *              outside of Block 0's first 256 bytes.  inm() can also be used
- *              for FIFO'ed registers if, and only if, it can be guaranteed to
- *              not have been previously FIFO'ed (e.g. when the engine is
- *              idle).  pATI->pBlock array elements must have been previously
- *              set up by ATIMapApertures().
- *
- * outf         32-bit write through MMIO cache.  Identical to outm() but
- *              intended for FIFO'ed registers.  There is no inf() provided.
- *
- * inr/outr     32-bit R/W through PIO or MMIO.  Which one depends on the
- *              machine architecture.  The register is specified as a IOPortTag
- *              from atiregs.h.  Can only be used for registers in the first
- *              256 bytes of MMIO space (in Block 0).  Note that all of these
- *              registers are non-FIFO'ed.
- *
- * in8/out8     8-bit counterparts to inr/outr.
- *
- * For portability reasons, inr/outr/in8/out8 should be used in preference to
- * inl/outl/inb/outb to/from any register space starting with CRTC_H_TOTAL_DISP
- * but before DST_OFF_PITCH (in the order defined by atiregs.h).  None of
- * inm/outm/outf should ever be used for these registers.
- *
- * outf()'s should be grouped together as much as possible, while respecting
- * any ordering constraints the engine might impose.  Groups larger than 16
- * outf()'s should be split up into two or more groups as needed (but not
- * necessarily wanted).  The outf() groups that result should be immediately
- * preceeded by an ATIMach64WaitForFIFO(n) call, where "n" is the number of
- * outf()'s in the group with the exception that groups containing a single
- * outf() should not be thus preceeded.  This means "n" should not be less than
- * 2, nor larger than 16.
- */
-
-/*
- * Cave canem (or it WILL bite you):  All Mach64 non-VGA registers are
- * ================================   little-endian, no matter how they are
- *                                    accessed (nor by what).
- */
-
-/* I/O decoding definitions */
-typedef enum
-{
-    SPARSE_IO,
-    BLOCK_IO
-} ATIIODecodingType;
-
-#define inm(_Register)                                                   \
-    MMIO_IN32(pATI->pBlock[GetBits(_Register, BLOCK_SELECT)],            \
-              (_Register) & MM_IO_SELECT)
-#define outm(_Register, _Value)                                          \
-    MMIO_OUT32(pATI->pBlock[GetBits(_Register, BLOCK_SELECT)],           \
-               (_Register) & MM_IO_SELECT, _Value)
-
-#ifdef AVOID_CPIO
-
-#   define inr(_Register) \
-        MMIO_IN32(pATI->pBlock[0], (_Register) & MM_IO_SELECT)
-#   define outr(_Register, _Value) \
-        MMIO_OUT32(pATI->pBlock[0], (_Register) & MM_IO_SELECT, _Value)
-
-#   define in8(_Register)                                                \
-        MMIO_IN8(pATI->pBlock[0],                                        \
-                 (_Register) & (MM_IO_SELECT | IO_BYTE_SELECT))
-#   define out8(_Register, _Value)                                       \
-        MMIO_OUT8(pATI->pBlock[0],                                       \
-                  (_Register) & (MM_IO_SELECT | IO_BYTE_SELECT), _Value)
-
-/* Cause a cpp syntax error if any of these are used */
-#undef inb
-#undef inl
-#undef outb
-#undef outl
-
-#define inb()            /* Nothing */
-#define inl()            /* Nothing */
-#define outb()           /* Nothing */
-#define outl()           /* Nothing */
-
-#else /* AVOID_CPIO */
-
-#   define ATIIOPort(_PortTag)                                 \
-        (((pATI->CPIODecoding == SPARSE_IO) ?                  \
-          ((_PortTag) & (SPARSE_IO_SELECT | IO_BYTE_SELECT)) : \
-          ((_PortTag) & (BLOCK_IO_SELECT | IO_BYTE_SELECT))) | \
-         pATI->CPIOBase)
-
-#   define inr(_Register) \
-        inl(ATIIOPort(_Register))
-#   define outr(_Register, _Value) \
-        outl(ATIIOPort(_Register), _Value)
-
-#   define in8(_Register) \
-        inb(ATIIOPort(_Register))
-#   define out8(_Register, _Value) \
-        outb(ATIIOPort(_Register), _Value)
-
-#endif /* AVOID_CPIO */
-
-extern void ATIMach64PollEngineStatus(ATIPtr);
-
-/*
- * MMIO cache definitions.
- *
- * Many FIFO'ed registers can be cached by the driver.  Registers that qualify
- * for caching must not contain values that can change without driver
- * intervention.  Thus registers that contain hardware counters, strobe lines,
- * etc., cannot be cached.  This caching is intended to minimise FIFO use.
- * There is therefore not much point to enable it for non-FIFO'ed registers.
- *
- * The cache for a particular 32-bit register is enabled by coding a
- * CacheRegister() line for that register in the ATIMach64Set() function.  The
- * integrity of the cache for a particular register should be verified by the
- * ATIMach64Sync() function.  This code should be kept in register order, as
- * defined in atiregs.h.
- */
-#define CacheByte(___Register) pATI->MMIOCached[CacheSlotOf(___Register) >> 3]
-#define CacheBit(___Register)  (0x80U >> (CacheSlotOf(___Register) & 0x07U))
-
-#define RegisterIsCached(__Register) \
-    (CacheByte(__Register) & CacheBit(__Register))
-#define CacheSlot(__Register) pATI->MMIOCache[CacheSlotOf(__Register)]
-
-#define CacheRegister(__Register) \
-    CacheByte(__Register) |= CacheBit(__Register)
-#define UncacheRegister(__Register) \
-    CacheByte(__Register) &= ~CacheBit(__Register)
-
-/* This would be quite a bit slower as a function */
-#define outf(_Register, _Value)                                        \
-    do                                                                 \
-    {                                                                  \
-        CARD32 _IOValue = (_Value);                                    \
-                                                                       \
-        if (!RegisterIsCached(_Register) ||                            \
-            (_IOValue != CacheSlot(_Register)))                        \
-        {                                                              \
-            while (!pATI->nAvailableFIFOEntries--)                     \
-                ATIMach64PollEngineStatus(pATI);                       \
-            MMIO_OUT32(pATI->pBlock[GetBits(_Register, BLOCK_SELECT)], \
-                       (_Register) & MM_IO_SELECT, _IOValue);          \
-            CacheSlot(_Register) = _IOValue;                           \
-            pATI->EngineIsBusy = TRUE;                                 \
-        }                                                              \
-    } while (0)
-
-/*
- * This is no longer as critical, especially for _n == 1.  However,
- * there is still a need to ensure _n <= pATI->nFIFOEntries.
- */
-#define ATIMach64WaitForFIFO(_pATI, _n)           \
-    while ((_pATI)->nAvailableFIFOEntries < (_n)) \
-        ATIMach64PollEngineStatus(_pATI)
-
-#define ATIMach64WaitForIdle(_pATI)         \
-    while ((_pATI)->EngineIsBusy)           \
-        ATIMach64PollEngineStatus(_pATI)
-
-#ifdef XF86DRI_DEVEL
- 
-/*
- * DRI Sync and Lock definitions.
- */
-
-#define ATIDRIWaitForIdle(_pATI)                                \
-do {                                                            \
-    ATIDRIServerInfoPtr pATIDRIServer = _pATI->pDRIServerInfo;  \
-    int ret;                                                    \
-                                                                \
-    if (pATIDRIServer && pATI->directRenderingEnabled) {        \
-        /* Wait for DMA to complete */                          \
-        ret = drmCommandNone(_pATI->drmFD, DRM_MACH64_IDLE);    \
-        if (ret) {                                              \
-            drmCommandNone(_pATI->drmFD, DRM_MACH64_RESET);     \
-        }                                                       \
-                                                                \
-        /* Force updating of FIFO entry counters */             \
-        pATI->EngineIsBusy = TRUE;                              \
-        ATIMach64PollEngineStatus(_pATI);                       \
-    } else {                                                    \
-        ATIMach64WaitForIdle(_pATI);                            \
-    }                                                           \
-} while (0)
-
-/*
- * Set upon DRISwapContext and when DRI accesses the GPU engine
- * from within the server, see DRIInitBuffers/DRIMoveBuffers.
- *
- * Forces the EXA/XAA software paths to sync before accessing the FB memory.
- */
-static __inline__ void ATIDRIMarkSyncInt(ScrnInfoPtr _pScrInfo)
-{
-    ATIPtr _pATI=ATIPTR(_pScrInfo);
-#ifdef USE_EXA
-    if (_pATI->useEXA)
-        exaMarkSync(_pScrInfo->pScreen);
-#endif
-#ifdef USE_XAA
-    if (!_pATI->useEXA)
-        SET_SYNC_FLAG(_pATI->pXAAInfo); /* NeedToSync = TRUE */
-#endif
-}
-
-/*
- * Set upon DRISwapContext and when the server acquires the DRI lock.
- *
- * Forces the EXA/XAA accelerated paths to sync before accessing the GPU engine.
- */
-static __inline__ void ATIDRIMarkSyncExt(ScrnInfoPtr _pScrInfo)
-{
-    ATIPtr _pATI=ATIPTR(_pScrInfo);
-    _pATI->NeedDRISync = TRUE;
-}
-
-static __inline__ void ATIDRISync(ScrnInfoPtr _pScrInfo)
-{
-    ATIPtr _pATI=ATIPTR(_pScrInfo);
-#ifdef USE_EXA
-    if (_pATI->directRenderingEnabled && _pATI->pExa)
-    {
-        if (_pATI->NeedDRISync) exaWaitSync(_pScrInfo->pScreen);
-    }
-#endif
-#ifdef USE_XAA
-    if (_pATI->directRenderingEnabled && _pATI->pXAAInfo)
-    {
-        if (_pATI->NeedDRISync) (*_pATI->pXAAInfo->Sync)(_pScrInfo);
-    }
-#endif
-}
-
-#define ATIDRILock(_pScrInfo)                   \
-do                                              \
-{                                               \
-    ATIPtr _pATI=ATIPTR(_pScrInfo);             \
-    if (_pATI->directRenderingEnabled)          \
-    {                                           \
-        DRILock(_pScrInfo->pScreen, 0);         \
-        ATIDRIMarkSyncExt(_pScrInfo);           \
-    }                                           \
-} while (0)
-                                                                                
-#define ATIDRIUnlock(_pScrInfo)                 \
-do                                              \
-{                                               \
-    ATIPtr _pATI=ATIPTR(_pScrInfo);             \
-    if (_pATI->directRenderingEnabled)          \
-    {                                           \
-        DRIUnlock(_pScrInfo->pScreen);          \
-    }                                           \
-} while (0)
-
-#else /* XF86DRI_DEVEL */
-
-                                                                                               
-#define ATIDRIWaitForIdle(_pATI)
-#define ATIDRILock(_pScrInfo)
-#define ATIDRIUnlock(_pScrInfo)
-#define ATIDRISync(_pScrInfo)
-                                                                                               
-#endif /* XF86DRI_DEVEL */
-
-
-/*
- * An outf() variant to write two registers such that the second register is
- * is always written whenever either is to be changed.
- */
-#define outq(_Register1, _Register2, _Value1, _Value2)                  \
-    do                                                                  \
-    {                                                                   \
-        CARD32 _IOValue1 = (_Value1),                                   \
-               _IOValue2 = (_Value2);                                   \
-                                                                        \
-        if (!RegisterIsCached(_Register1) ||                            \
-            (_IOValue1 != CacheSlot(_Register1)))                       \
-        {                                                               \
-            ATIMach64WaitForFIFO(pATI, 2);                              \
-            pATI->nAvailableFIFOEntries -= 2;                           \
-            MMIO_OUT32(pATI->pBlock[GetBits(_Register1, BLOCK_SELECT)], \
-                       (_Register1) & MM_IO_SELECT, _IOValue1);         \
-            MMIO_OUT32(pATI->pBlock[GetBits(_Register2, BLOCK_SELECT)], \
-                       (_Register2) & MM_IO_SELECT, _IOValue2);         \
-            CacheSlot(_Register1) = _IOValue1;                          \
-            CacheSlot(_Register2) = _IOValue2;                          \
-            pATI->EngineIsBusy = TRUE;                                  \
-        }                                                               \
-        else if (!RegisterIsCached(_Register2) ||                       \
-                 (_IOValue2 != CacheSlot(_Register2)))                  \
-        {                                                               \
-            while (!pATI->nAvailableFIFOEntries--)                      \
-                ATIMach64PollEngineStatus(pATI);                        \
-            MMIO_OUT32(pATI->pBlock[GetBits(_Register2, BLOCK_SELECT)], \
-                       (_Register2) & MM_IO_SELECT, _IOValue2);         \
-            CacheSlot(_Register2) = _IOValue2;                          \
-            pATI->EngineIsBusy = TRUE;                                  \
-        }                                                               \
-    } while (0)
-
-extern void ATIMach64AccessPLLReg(ATIPtr, const CARD8, const Bool);
-
-#define ATIMach64GetPLLReg(_Index)                  \
-    (                                               \
-        ATIMach64AccessPLLReg(pATI, _Index, FALSE), \
-        in8(CLOCK_CNTL + 2)                         \
-    )
-#define ATIMach64PutPLLReg(_Index, _Value)          \
-    do                                              \
-    {                                               \
-        ATIMach64AccessPLLReg(pATI, _Index, TRUE);  \
-        out8(CLOCK_CNTL + 2, _Value);               \
-    } while (0)
-
-#define ATIMach64GetLCDReg(_Index)                       \
-    (                                                    \
-        out8(LCD_INDEX, SetBits(_Index, LCD_REG_INDEX)), \
-        inr(LCD_DATA)                                    \
-    )
-#define ATIMach64PutLCDReg(_Index, _Value)               \
-    do                                                   \
-    {                                                    \
-        out8(LCD_INDEX, SetBits(_Index, LCD_REG_INDEX)); \
-        outr(LCD_DATA, _Value);                          \
-    } while (0)
-
-#define ATIMach64GetTVReg(_Index)                          \
-    (                                                      \
-        out8(TV_OUT_INDEX, SetBits(_Index, TV_REG_INDEX)), \
-        inr(TV_OUT_DATA)                                   \
-    )
-#define ATIMach64PutTVReg(_Index, _Value)                  \
-    do                                                     \
-    {                                                      \
-        out8(TV_OUT_INDEX, SetBits(_Index, TV_REG_INDEX)); \
-        outr(TV_OUT_DATA, _Value);                         \
-    } while (0)
-
-/*
- * Block transfer definitions.
- */
-
-#if defined(GCCUSESGAS) && \
-    (defined(i386) || defined(__i386) || defined(__i386__))
-
-#define ATIMove32(_pDst, _pSrc, _nCount) \
-    do                                   \
-    {                                    \
-        long d0, d1, d2;                 \
-        __asm__ __volatile__             \
-        (                                \
-            "cld\n\t"                    \
-            "rep ; movsl"                \
-            : "=&c" (d0),                \
-              "=&D" (d1),                \
-              "=&S" (d2)                 \
-            : "0" (_nCount),             \
-              "1" (_pDst),               \
-              "2" (_pSrc)                \
-            : "memory"                   \
-        );                               \
-    } while (0)
-
-#endif
-
-/*
- * Return the MMIO address of register, used for HOST_DATA_X only.
- */
-#define ATIHostDataAddr(_Register)                             \
-    ((CARD8 *)pATI->pBlock[GetBits(_Register, BLOCK_SELECT)] + \
-              ((_Register) & MM_IO_SELECT))
-
-#endif /* ___ATIMACH64IO_H___ */
diff --git a/src/atimach64probe.c b/src/atimach64probe.c
deleted file mode 100644
index 2d554e1..0000000
--- a/src/atimach64probe.c
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atichip.h"
-#include "atimach64io.h"
-#include "atimach64probe.h"
-#include "atimach64version.h"
-#include "atioption.h"
-
-/* include headers corresponding to ScrnInfoPtr fields */
-#include "atipreinit.h"
-#include "atiscreen.h"
-#include "aticonsole.h"
-#include "atiadjust.h"
-#include "ativalid.h"
-
-#ifndef XSERVER_LIBPCIACCESS
-static Bool Mach64Probe(DriverPtr pDriver, int flags);
-#endif
-
-SymTabRec
-Mach64Chipsets[] = {
-    {ATI_CHIP_88800GXC, "ATI 88800GX-C"},
-    {ATI_CHIP_88800GXD, "ATI 88800GX-D"},
-    {ATI_CHIP_88800GXE, "ATI 88800GX-E"},
-    {ATI_CHIP_88800GXF, "ATI 88800GX-F"},
-    {ATI_CHIP_88800GX,  "ATI 88800GX"},
-    {ATI_CHIP_88800CX,  "ATI 88800CX"},
-    {ATI_CHIP_264CT,    "ATI 264CT"},
-    {ATI_CHIP_264ET,    "ATI 264ET"},
-    {ATI_CHIP_264VT,    "ATI 264VT"},
-    {ATI_CHIP_264VTB,   "ATI 264VT-B"},
-    {ATI_CHIP_264GT,    "ATI 3D Rage"},
-    {ATI_CHIP_264GTB,   "ATI 3D Rage II"},
-    {ATI_CHIP_264VT3,   "ATI 264VT3"},
-    {ATI_CHIP_264GTDVD, "ATI 3D Rage II+DVD"},
-    {ATI_CHIP_264LT,    "ATI 3D Rage LT"},
-    {ATI_CHIP_264VT4,   "ATI 264VT4"},
-    {ATI_CHIP_264GT2C,  "ATI 3D Rage IIc"},
-    {ATI_CHIP_264GTPRO, "ATI 3D Rage Pro"},
-    {ATI_CHIP_264LTPRO, "ATI 3D Rage LT Pro"},
-    {ATI_CHIP_264XL,    "ATI 3D Rage XL or XC"},
-    {ATI_CHIP_MOBILITY, "ATI 3D Rage Mobility"},
-    {-1,      NULL }
-};
-
-/*
- * This table maps a PCI device ID to a chipset family identifier.
- */
-static PciChipsets
-Mach64PciChipsets[] = {
-    {ATI_CHIP_88800GX,   PCI_CHIP_MACH64GX,  RES_SHARED_VGA},
-    {ATI_CHIP_88800CX,   PCI_CHIP_MACH64CX,  RES_SHARED_VGA},
-    {ATI_CHIP_264CT,     PCI_CHIP_MACH64CT,  RES_SHARED_VGA},
-    {ATI_CHIP_264ET,     PCI_CHIP_MACH64ET,  RES_SHARED_VGA},
-    {ATI_CHIP_264VT,     PCI_CHIP_MACH64VT,  RES_SHARED_VGA},
-    {ATI_CHIP_264GT,     PCI_CHIP_MACH64GT,  RES_SHARED_VGA},
-    {ATI_CHIP_264VT3,    PCI_CHIP_MACH64VU,  RES_SHARED_VGA},
-    {ATI_CHIP_264GTDVD,  PCI_CHIP_MACH64GU,  RES_SHARED_VGA},
-    {ATI_CHIP_264LT,     PCI_CHIP_MACH64LG,  RES_SHARED_VGA},
-    {ATI_CHIP_264VT4,    PCI_CHIP_MACH64VV,  RES_SHARED_VGA},
-    {ATI_CHIP_264GT2C,   PCI_CHIP_MACH64GV,  RES_SHARED_VGA},
-    {ATI_CHIP_264GT2C,   PCI_CHIP_MACH64GW,  RES_SHARED_VGA},
-    {ATI_CHIP_264GT2C,   PCI_CHIP_MACH64GY,  RES_SHARED_VGA},
-    {ATI_CHIP_264GT2C,   PCI_CHIP_MACH64GZ,  RES_SHARED_VGA},
-    {ATI_CHIP_264GTPRO,  PCI_CHIP_MACH64GB,  RES_SHARED_VGA},
-    {ATI_CHIP_264GTPRO,  PCI_CHIP_MACH64GD,  RES_SHARED_VGA},
-    {ATI_CHIP_264GTPRO,  PCI_CHIP_MACH64GI,  RES_SHARED_VGA},
-    {ATI_CHIP_264GTPRO,  PCI_CHIP_MACH64GP,  RES_SHARED_VGA},
-    {ATI_CHIP_264GTPRO,  PCI_CHIP_MACH64GQ,  RES_SHARED_VGA},
-    {ATI_CHIP_264LTPRO,  PCI_CHIP_MACH64LB,  RES_SHARED_VGA},
-    {ATI_CHIP_264LTPRO,  PCI_CHIP_MACH64LD,  RES_SHARED_VGA},
-    {ATI_CHIP_264LTPRO,  PCI_CHIP_MACH64LI,  RES_SHARED_VGA},
-    {ATI_CHIP_264LTPRO,  PCI_CHIP_MACH64LP,  RES_SHARED_VGA},
-    {ATI_CHIP_264LTPRO,  PCI_CHIP_MACH64LQ,  RES_SHARED_VGA},
-    {ATI_CHIP_264XL,     PCI_CHIP_MACH64GL,  RES_SHARED_VGA},
-    {ATI_CHIP_264XL,     PCI_CHIP_MACH64GM,  RES_SHARED_VGA},
-    {ATI_CHIP_264XL,     PCI_CHIP_MACH64GN,  RES_SHARED_VGA},
-    {ATI_CHIP_264XL,     PCI_CHIP_MACH64GO,  RES_SHARED_VGA},
-    {ATI_CHIP_264XL,     PCI_CHIP_MACH64GR,  RES_SHARED_VGA},
-    {ATI_CHIP_264XL,     PCI_CHIP_MACH64GS,  RES_SHARED_VGA},
-    {ATI_CHIP_MOBILITY,  PCI_CHIP_MACH64LM,  RES_SHARED_VGA},
-    {ATI_CHIP_MOBILITY,  PCI_CHIP_MACH64LN,  RES_SHARED_VGA},
-    {ATI_CHIP_MOBILITY,  PCI_CHIP_MACH64LR,  RES_SHARED_VGA},
-    {ATI_CHIP_MOBILITY,  PCI_CHIP_MACH64LS,  RES_SHARED_VGA},
-    {-1, -1, RES_UNDEFINED}
-};
-
-#ifdef XSERVER_LIBPCIACCESS
-
-static const struct pci_id_match mach64_device_match[] = {
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GX, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64CX, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64CT, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64ET, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64VT, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GT, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64VU, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GU, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64LG, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64VV, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GV, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GW, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GY, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GZ, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GB, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GD, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GI, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GP, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GQ, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64LB, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64LD, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64LI, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64LP, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64LQ, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GL, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GM, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GN, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GO, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GR, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64GS, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64LM, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64LN, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64LR, 0 ),
-    ATI_DEVICE_MATCH( PCI_CHIP_MACH64LS, 0 ),
-    { 0, 0, 0 }
-};
-
-#endif /* XSERVER_LIBPCIACCESS */
-
-static const OptionInfoRec *
-Mach64AvailableOptions(int chipid, int busid)
-{
-    return ATIOptionsWeak();
-}
-
-/*
- * Mach64Identify --
- *
- * Print the driver's list of chipset names.
- */
-static void
-Mach64Identify
-(
-    int flags
-)
-{
-    xf86Msg(X_INFO, "%s: %s\n", MACH64_NAME,
-            "Driver for ATI Mach64 chipsets");
-}
-
-static Bool
-mach64_get_scrninfo(int entity_num)
-{
-    ScrnInfoPtr pScrn;
-
-    pScrn = xf86ConfigPciEntity(NULL, 0, entity_num, Mach64PciChipsets,
-                                0, 0, 0, 0, NULL);
-
-    if (!pScrn)
-        return FALSE;
-
-    pScrn->driverVersion = MACH64_VERSION_CURRENT;
-    pScrn->driverName    = MACH64_DRIVER_NAME;
-    pScrn->name          = MACH64_NAME;
-#ifdef XSERVER_LIBPCIACCESS
-    pScrn->Probe         = NULL;
-#else
-    pScrn->Probe         = Mach64Probe;
-#endif
-    pScrn->PreInit       = ATIPreInit;
-    pScrn->ScreenInit    = ATIScreenInit;
-    pScrn->SwitchMode    = ATISwitchMode;
-    pScrn->AdjustFrame   = ATIAdjustFrame;
-    pScrn->EnterVT       = ATIEnterVT;
-    pScrn->LeaveVT       = ATILeaveVT;
-    pScrn->FreeScreen    = ATIFreeScreen;
-    pScrn->ValidMode     = ATIValidMode;
-
-    return TRUE;
-}
-
-#ifndef XSERVER_LIBPCIACCESS
-
-/*
- * Mach64Probe --
- *
- * This function is called once, at the start of the first server generation to
- * do a minimal probe for supported hardware.
- */
-static Bool
-Mach64Probe(DriverPtr pDriver, int flags)
-{
-    GDevPtr *devSections;
-    int     *usedChips;
-    int     numDevSections;
-    int     numUsed;
-    Bool    ProbeSuccess = FALSE;
-    int     i;
-
-    if (xf86GetPciVideoInfo() == NULL)
-        return FALSE;
-
-    numDevSections = xf86MatchDevice(MACH64_DRIVER_NAME, &devSections);
-
-    if (numDevSections <= 0)
-        return FALSE;
-
-    numUsed = xf86MatchPciInstances(MACH64_NAME, PCI_VENDOR_ATI,
-                                    Mach64Chipsets, Mach64PciChipsets,
-                                    devSections, numDevSections,
-                                    pDriver, &usedChips);
-    xfree(devSections);
-
-    if (numUsed <= 0)
-        return FALSE;
-
-    if (flags & PROBE_DETECT) {
-        ProbeSuccess = TRUE;
-    } else {
-        for (i = 0; i < numUsed; i++) {
-            if (mach64_get_scrninfo(usedChips[i]))
-                ProbeSuccess = TRUE;
-        }
-    }
-
-    xfree(usedChips);
-
-    return ProbeSuccess;
-}
-
-#else /* XSERVER_LIBPCIACCESS */
-
-static Bool
-mach64_pci_probe(
-    DriverPtr          pDriver,
-    int                entity_num,
-    struct pci_device *device,
-    intptr_t           match_data
-)
-{
-    return mach64_get_scrninfo(entity_num);
-}
-
-#endif /* XSERVER_LIBPCIACCESS */
-
-_X_EXPORT DriverRec MACH64 =
-{
-    MACH64_VERSION_CURRENT,
-    MACH64_DRIVER_NAME,
-    Mach64Identify,
-#ifdef XSERVER_LIBPCIACCESS
-    NULL,
-#else
-    Mach64Probe,
-#endif
-    Mach64AvailableOptions,
-    NULL,
-    0,
-    NULL,
-#ifdef XSERVER_LIBPCIACCESS
-    mach64_device_match,
-    mach64_pci_probe
-#endif
-};
diff --git a/src/atimach64probe.h b/src/atimach64probe.h
deleted file mode 100644
index 7b0b4b6..0000000
--- a/src/atimach64probe.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIMACH64PROBE_H___
-#define ___ATIMACH64PROBE_H___ 1
-
-#include "xf86str.h"
-
-extern DriverRec MACH64;
-
-extern SymTabRec Mach64Chipsets[];
-
-#endif /* ___ATIMACH64PROBE_H___ */
diff --git a/src/atimach64render.c b/src/atimach64render.c
deleted file mode 100644
index dda3938..0000000
--- a/src/atimach64render.c
+++ /dev/null
@@ -1,898 +0,0 @@
-/*
- * Copyright 2006 George Sapountzis
- * All Rights Reserved.
- *
- * Based on the mach64 DRI and DRM drivers:
- * Copyright 2000 Gareth Hughes
- * Copyright 2002-2003 Leif Delgass
- * All Rights Reserved.
- *
- * Based on the ati hw/kdrive driver:
- * Copyright 2003 Eric Anholt, Anders Carlsson
- *
- * Based on the via hw/xfree86 driver:
- * Copyright 2006 Thomas Hellstrom. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- * Authors:
- *    George Sapountzis <gsap7 at yahoo.gr>
- */
-
-/*
- * Interesting cases for RENDER acceleration:
- *
- * cursor      : ARGB8888 (24x24)   Over
- *               RGB565
- *
- * glyph       : A8       (9x10)    Add
- *               A8       (420x13)
- * glyph set   : ARGB8888 (1x1 R)   In
- *               A8       (420x13)  Over
- *               RGB565
- *
- * shadow      : ARGB8888 (1x1 R)   In
- *               A8       (670x362) Over
- *               RGB565
- * translucent : RGB565   (652x344) In
- *               A8       (1x1 R)   Over
- *               RGB565
- *
- * In all interesting cases one of src/mask is "1x1 R".
- */
-
-/*
- * Assumptions and limitations of mach64 RENDER acceleration:
- *
- * RENDER acceleration is supported for GTPRO and later chips using the 3D
- * triangle setup, i.e. the VERTEX_? registers (see the dri driver). According
- * to atiregs.h, SCALE_3D_CNTL and TEX_?_OFF appear in GT, thus chips as old
- * as GT should be capable of RENDER acceleration, using the S_?_INC, T_?_INC
- * registers for texture mapping (see the directfb driver).
- *
- * GTPRO added a triangle setup engine and multitexturing. However, it seems
- * that none of the 8bpp mach64 formats expands the 8bit value to the alpha
- * channel in texture mapping, RGB8 appears to expand to (I,I,I,0). This makes
- * GTPRO multitexturing unsuitable for emulating the IN operation. Moreover,
- * it seems that GT/GTPRO has a muxltiplexer instead of a blender for computing
- * the final alpha channel which forbids destinations with an alpha channel and
- * generic two-pass compositing.
- *
- * A texture unit combines the fragment color (VERTEX_?_ARGB) coming in from
- * triangle rasterization with the texel from the texture according to the
- * texture environment (TEX_LIGHT_FCN_). "1x1 R" textures may come in as frag-
- * ment colors, eliminating the need for multitexturing in all interesting
- * cases (via also uses this optimization).
- *
- * Texture registers are saved/restored and cached (see atimach64.c). TEX_CNTL
- * cannot be cached because it flushes the texture cache. TEX_?_OFF are also
- * not cached because I am not sure whether writing at some offset register
- * affects the value at another offset.
- *
- * Vertex registers are not saved/restored. This shouldn't be a problem though
- * either for DRI or VT switch because vertex registers are set and used within
- * a signle acceleration hook. Synchronization between the DDX and DRI is based
- * on calling ATIDRISync() at the beginning of each DDX acceleration hook,
- * which suggests the assumption that individual acceleration hooks are not
- * interrupted.
- */
-
-#include <string.h>
-#include <stdio.h>
-
-/*
- * Helper functions copied from exa and via.
- */
-
-#if 0
-static void
-Mach64ExaCompositePictDesc(PicturePtr pict, char *string, int n)
-{
-    char format[20];
-    char size[20];
-
-    if (!pict) {
-        snprintf(string, n, "None");
-        return;
-    }
-
-    switch (pict->format) {
-    case PICT_x8r8g8b8:
-        snprintf(format, 20, "RGB8888 ");
-        break;
-    case PICT_x8b8g8r8:
-        snprintf(format, 20, "BGR8888 ");
-        break;
-    case PICT_a8r8g8b8:
-        snprintf(format, 20, "ARGB8888");
-        break;
-    case PICT_a8b8g8r8:
-        snprintf(format, 20, "ABGR8888");
-        break;
-    case PICT_r5g6b5:
-        snprintf(format, 20, "RGB565  ");
-        break;
-    case PICT_x1r5g5b5:
-        snprintf(format, 20, "RGB555  ");
-        break;
-    case PICT_a8:
-        snprintf(format, 20, "A8      ");
-        break;
-    case PICT_a1:
-        snprintf(format, 20, "A1      ");
-        break;
-    default:
-        snprintf(format, 20, "0x%x", (int)pict->format);
-        break;
-    }
-
-    snprintf(size, 20, "%dx%d%s%s",
-        pict->pDrawable->width,
-        pict->pDrawable->height,
-        pict->repeat ? " R" : "",
-        pict->componentAlpha ? " C" : ""
-    );
-
-    snprintf(string, n, "%-10p: fmt %s (%s)", (void *)pict->pDrawable, format, size);
-}
-
-static void
-Mach64ExaPrintComposite(CARD8 op,
-    PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, char *string)
-{
-    char sop[20];
-    char srcdesc[40], maskdesc[40], dstdesc[40];
-
-    switch (op) {
-    case PictOpSrc:
-        sprintf(sop, "Src");
-        break;
-    case PictOpOver:
-        sprintf(sop, "Over");
-        break;
-    case PictOpInReverse:
-        sprintf(sop, "InR");
-        break;
-    case PictOpOutReverse:
-        sprintf(sop, "OutR");
-        break;
-    case PictOpAdd:
-        sprintf(sop, "Add");
-        break;
-    default:
-        sprintf(sop, "0x%x", (int)op);
-        break;
-    }
-
-    Mach64ExaCompositePictDesc(pSrc, srcdesc, 40);
-    Mach64ExaCompositePictDesc(pMask, maskdesc, 40);
-    Mach64ExaCompositePictDesc(pDst, dstdesc, 40);
-
-    sprintf(string, "op %s, \n"
-        "                src  %s\n"
-        "                mask %s\n"
-        "                dst  %s\n", sop, srcdesc, maskdesc, dstdesc);
-}
-#endif
-
-static __inline__ CARD32
-viaBitExpandHelper(CARD32 component, CARD32 bits)
-{
-    CARD32 tmp, mask;
-
-    mask = (1 << (8 - bits)) - 1;
-    tmp = component << (8 - bits);
-    return ((component & 1) ? tmp | mask : tmp);
-}
-
-static __inline__ void
-Mach64PixelARGB(PixmapPtr pPixmap, CARD32 format, CARD32 *argb)
-{
-    CARD32 pixel;
-    CARD8  comp;
-    int    bits, shift;
-
-    /* Ensure that texture drawing has completed. */
-    exaWaitSync(pPixmap->drawable.pScreen);
-
-    /* exaGetPixmapFirstPixel() */
-
-    switch (pPixmap->drawable.bitsPerPixel) {
-    case 32:
-        pixel = *(CARD32 *)(pPixmap->devPrivate.ptr);
-        break;
-    case 16:
-        pixel = *(CARD16 *)(pPixmap->devPrivate.ptr);
-        break;
-    default:
-        pixel = *(CARD8 *)(pPixmap->devPrivate.ptr);
-        break;
-    }
-
-    /* exaGetRGBAFromPixel()/viaPixelARGB8888() */
-
-    switch (PICT_FORMAT_TYPE(format)) {
-    case PICT_TYPE_A:
-        shift = 0;
-        bits = PICT_FORMAT_A(format);
-        comp = (pixel >> shift) & ((1 << bits) - 1);
-        comp = viaBitExpandHelper(comp, bits);
-        *argb = comp << 24;
-        break;
-    case PICT_TYPE_ARGB:
-        shift = 0;
-        bits = PICT_FORMAT_B(format);
-        comp = (pixel >> shift) & ((1 << bits) - 1);
-        comp = viaBitExpandHelper(comp, bits);
-        *argb = comp;
-
-        shift += bits;
-        bits = PICT_FORMAT_G(format);
-        comp = (pixel >> shift) & ((1 << bits) - 1);
-        comp = viaBitExpandHelper(comp, bits);
-        *argb |= comp << 8;
-
-        shift += bits;
-        bits = PICT_FORMAT_R(format);
-        comp = (pixel >> shift) & ((1 << bits) - 1);
-        comp = viaBitExpandHelper(comp, bits);
-        *argb |= comp << 16;
-
-        shift += bits;
-        bits = PICT_FORMAT_A(format);
-        if (bits) {
-            comp = (pixel >> shift) & ((1 << bits) - 1);
-            comp = viaBitExpandHelper(comp, bits);
-        } else {
-            comp = 0xff;
-        }
-        *argb |= comp << 24;
-        break;
-    case PICT_TYPE_ABGR:
-        break;
-    default:
-        break;
-    }
-}
-
-/*
- * RENDER acceleration for mach64
- */
-
-typedef struct {
-    Bool supported;
-    CARD32 scale_3d_cntl;
-} Mach64BlendOp;
-
-static Mach64BlendOp Mach64BlendOps[] = {
-    /* Clear */
-    {1, MACH64_ALPHA_BLEND_SRC_ZERO        | MACH64_ALPHA_BLEND_DST_ZERO},
-    /* Src */
-    {1, MACH64_ALPHA_BLEND_SRC_ONE         | MACH64_ALPHA_BLEND_DST_ZERO},
-    /* Dst */
-    {1, MACH64_ALPHA_BLEND_SRC_ZERO        | MACH64_ALPHA_BLEND_DST_ONE},
-    /* Over */
-    {1, MACH64_ALPHA_BLEND_SRC_ONE         | MACH64_ALPHA_BLEND_DST_INVSRCALPHA},
-    /* OverReverse */
-    {1, MACH64_ALPHA_BLEND_SRC_INVDSTALPHA | MACH64_ALPHA_BLEND_DST_ONE},
-    /* In */
-    {1, MACH64_ALPHA_BLEND_SRC_DSTALPHA    | MACH64_ALPHA_BLEND_DST_ZERO},
-    /* InReverse */
-    {1, MACH64_ALPHA_BLEND_SRC_ZERO        | MACH64_ALPHA_BLEND_DST_SRCALPHA},
-    /* Out */
-    {1, MACH64_ALPHA_BLEND_SRC_INVDSTALPHA | MACH64_ALPHA_BLEND_DST_ZERO},
-    /* OutReverse */
-    {1, MACH64_ALPHA_BLEND_SRC_ZERO        | MACH64_ALPHA_BLEND_DST_INVSRCALPHA},
-    /* Atop */
-    {0, MACH64_ALPHA_BLEND_SRC_DSTALPHA    | MACH64_ALPHA_BLEND_DST_INVSRCALPHA},
-    /* AtopReverse */
-    {0, MACH64_ALPHA_BLEND_SRC_INVDSTALPHA | MACH64_ALPHA_BLEND_DST_SRCALPHA},
-    /* Xor */
-    {1, MACH64_ALPHA_BLEND_SRC_INVDSTALPHA | MACH64_ALPHA_BLEND_DST_INVSRCALPHA},
-    /* Add */
-    {1, MACH64_ALPHA_BLEND_SRC_ONE         | MACH64_ALPHA_BLEND_DST_ONE}
-};
-
-#define MACH64_NR_BLEND_OPS \
-    (sizeof(Mach64BlendOps) / sizeof(Mach64BlendOps[0]))
-
-typedef struct {
-    CARD32 pictFormat;
-    CARD32 dstFormat;
-    CARD32 texFormat;
-} Mach64TexFormat;
-
-static Mach64TexFormat Mach64TexFormats[] = {
-    {PICT_a8r8g8b8, -1,                       MACH64_DATATYPE_ARGB8888},
-    {PICT_x8r8g8b8, MACH64_DATATYPE_ARGB8888, MACH64_DATATYPE_ARGB8888},
-    {PICT_a1r5g5b5, -1,                       MACH64_DATATYPE_ARGB1555},
-    {PICT_x1r5g5b5, MACH64_DATATYPE_ARGB1555, MACH64_DATATYPE_ARGB1555},
-    {PICT_r5g6b5,   MACH64_DATATYPE_RGB565,   MACH64_DATATYPE_RGB565  },
-    {PICT_a8,       MACH64_DATATYPE_RGB8,     MACH64_DATATYPE_RGB8    }
-};
-
-#define MACH64_NR_TEX_FORMATS \
-    (sizeof(Mach64TexFormats) / sizeof(Mach64TexFormats[0]))
-
-#define MACH64_PICT_IS_1x1R(_pPict)      \
-    ((_pPict) &&                         \
-     (_pPict)->pDrawable->width == 1 &&  \
-     (_pPict)->pDrawable->height == 1 && \
-     (_pPict)->repeat)
-
-/*
- * CheckComposite hook helper functions.
- */
-static __inline__ Bool
-Mach64GetOrder(int val, int *shift)
-{
-    *shift = 0;
-
-    while (val > (1 << *shift))
-        (*shift)++;
-
-    return (val == (1 << *shift));
-}
-
-static Bool
-Mach64CheckTexture(PicturePtr pPict)
-{
-    int w = pPict->pDrawable->width;
-    int h = pPict->pDrawable->height;
-    int l2w, l2h, level, i;
-
-    for (i = 0; i < MACH64_NR_TEX_FORMATS; i++) {
-        if (Mach64TexFormats[i].pictFormat == pPict->format)
-            break;
-    }
-
-    if (i == MACH64_NR_TEX_FORMATS)
-        MACH64_FALLBACK(("Unsupported picture format 0x%x\n",
-                        (int)pPict->format));
-
-    /* l2w equals l2p (pitch) for all interesting cases (w >= 64) */
-    Mach64GetOrder(w, &l2w);
-    Mach64GetOrder(h, &l2h);
-
-    level = (l2w > l2h) ? l2w : l2h;
-
-    if (level > 10)
-        MACH64_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
-
-    return TRUE;
-}
-
-/*
- * CheckComposite acceleration hook.
- */
-Bool
-Mach64CheckComposite
-(
-    int        op,
-    PicturePtr pSrcPicture,
-    PicturePtr pMaskPicture,
-    PicturePtr pDstPicture
-)
-{
-    Bool src_solid, mask_solid, mask_comp, op_comp;
-    int i;
-
-    if (op >= MACH64_NR_BLEND_OPS || !Mach64BlendOps[op].supported)
-        return FALSE;
-
-    if (!Mach64CheckTexture(pSrcPicture))
-        return FALSE;
-
-    if (pMaskPicture && !Mach64CheckTexture(pMaskPicture))
-        return FALSE;
-
-    /* Check destination format */
-
-    for (i = 0; i < MACH64_NR_TEX_FORMATS; i++) {
-        if (Mach64TexFormats[i].pictFormat == pDstPicture->format)
-            break;
-    }
-
-    if (i == MACH64_NR_TEX_FORMATS || Mach64TexFormats[i].dstFormat == -1)
-        MACH64_FALLBACK(("Unsupported dst format 0x%x\n",
-                        (int)pDstPicture->format));
-
-    /* Check that A8 src/dst appears only as "A8 ADD A8" */
-
-    if (pDstPicture->format == PICT_a8) {
-        if (pMaskPicture || pSrcPicture->format != PICT_a8 || op != PictOpAdd)
-            MACH64_FALLBACK(("A8 dst with mask or non-A8 src.\n"));
-    }
-
-    if (pDstPicture->format != PICT_a8) {
-        if (pSrcPicture->format == PICT_a8)
-            MACH64_FALLBACK(("A8 src with non-A8 dst.\n"));
-    }
-
-    /* Check that one of src/mask can come in as the fragment color. */
-
-    src_solid = MACH64_PICT_IS_1x1R(pSrcPicture);
-
-    mask_solid = MACH64_PICT_IS_1x1R(pMaskPicture);
-
-    mask_comp = pMaskPicture && pMaskPicture->componentAlpha;
-
-    op_comp = op == PictOpAdd ||
-              op == PictOpInReverse ||
-              op == PictOpOutReverse;
-
-    if (mask_solid && src_solid)
-        MACH64_FALLBACK(("Bad one-pixel IN composite operation.\n"));
-
-    if (pMaskPicture) {
-        if (!mask_solid && !src_solid)
-            MACH64_FALLBACK(("Multitexturing required.\n"));
-
-        if (!mask_solid && !op_comp)
-            MACH64_FALLBACK(("Non-solid mask.\n"));
-
-        if (mask_comp && !src_solid)
-            MACH64_FALLBACK(("Component-alpha mask.\n"));
-
-        if (!mask_comp && pMaskPicture->format != PICT_a8)
-            MACH64_FALLBACK(("Non-A8 mask.\n"));
-
-        if (mask_comp && pMaskPicture->format != PICT_a8r8g8b8)
-            MACH64_FALLBACK(("Non-ARGB mask.\n"));
-    }
-
-    return TRUE;
-}
-
-/*
- * This function setups the fragment color from a solid pixmap in the presence
- * of a mask.
- */
-static __inline__ Bool
-Mach64PrepareMask
-(
-    Mach64ContextRegs3D *m3d,
-    int        op,
-    PicturePtr pSrcPicture,
-    PicturePtr pMaskPicture,
-    PixmapPtr  pSrc,
-    PixmapPtr  pMask
-)
-{
-    Bool mask_solid, src_solid;
-    CARD32 argb = 0;
-
-    mask_solid = MACH64_PICT_IS_1x1R(pMaskPicture);
-
-    src_solid = MACH64_PICT_IS_1x1R(pSrcPicture);
-
-    if (mask_solid) {
-        Mach64PixelARGB(pMask, pMaskPicture->format, &argb);
-        argb >>= 24;
-        argb &= 0xff;
-
-        m3d->frag_mask = TRUE;
-        m3d->frag_color = (argb << 24) | (argb << 16) | (argb << 8) | argb;
-        return TRUE;
-    }
-
-    if (src_solid) {
-        /* We can only handle cases where either the src color (e.g. ADD) or
-         * the src alpha (e.g. IN_REV, OUT_REV) is used but not both.
-         *
-         * (ARGB8888 IN A8) OVER RGB565 is implemented as:
-         * (ARGB8888 IN A8) ADD ((ARGB8888 IN A8) OUT_REV RGB565).
-         */
-        if (op == PictOpInReverse || op == PictOpOutReverse) {
-            Mach64PixelARGB(pSrc, pSrcPicture->format, &argb);
-            argb >>= 24;
-            argb &= 0xff;
-
-            m3d->frag_src = TRUE;
-            m3d->frag_color = (argb << 24) | (argb << 16) | (argb << 8) | argb;
-            m3d->color_alpha = TRUE;
-            return TRUE;
-        }
-
-        if (op == PictOpAdd) {
-            Mach64PixelARGB(pSrc, pSrcPicture->format, &argb);
-
-            m3d->frag_src = TRUE;
-            m3d->frag_color = argb;
-            return TRUE;
-        }
-    }
-
-    return FALSE;
-}
-
-/*
- * This function setups the texturing and blending environments. It also
- * manipulates blend control for non-solid masks.
- */
-static void __inline__
-Mach64BlendCntl(Mach64ContextRegs3D *m3d, int op)
-{
-    m3d->scale_3d_cntl |= MACH64_SCALE_PIX_EXPAND_DYNAMIC_RANGE |
-                          MACH64_SCALE_DITHER_2D_TABLE |
-                          MACH64_DITHER_INIT_RESET;
-
-    m3d->scale_3d_cntl |= Mach64BlendOps[op].scale_3d_cntl;
-
-    if (m3d->color_alpha) {
-        /* A8 uses RGB8 which expands to (I,I,I,0). Thus, we use the color
-         * channels instead of the alpha channel as the alpha factor. We also
-         * use the color channels for ARGB8888 masks with component-alpha.
-         */
-        CARD32 Ad = m3d->scale_3d_cntl & MACH64_ALPHA_BLEND_DST_MASK;
-
-        /* InReverse */
-        if (Ad == MACH64_ALPHA_BLEND_DST_SRCALPHA) {
-            m3d->scale_3d_cntl &= ~MACH64_ALPHA_BLEND_DST_MASK;
-            m3d->scale_3d_cntl |=  MACH64_ALPHA_BLEND_DST_SRCCOLOR;
-        }
-
-        /* OutReverse */
-        if (Ad == MACH64_ALPHA_BLEND_DST_INVSRCALPHA) {
-            m3d->scale_3d_cntl &= ~MACH64_ALPHA_BLEND_DST_MASK;
-            m3d->scale_3d_cntl |=  MACH64_ALPHA_BLEND_DST_INVSRCCOLOR;
-        }
-    }
-
-    /* Can't color mask and blend at the same time */
-    m3d->dp_write_mask = 0xffffffff;
-
-    /* Can't fog and blend at the same time */
-    m3d->scale_3d_cntl |= MACH64_ALPHA_FOG_EN_ALPHA;
-
-    /* Enable texture mapping mode */
-    m3d->scale_3d_cntl |= MACH64_SCALE_3D_FCN_TEXTURE;
-    m3d->scale_3d_cntl |= MACH64_MIP_MAP_DISABLE;
-
-    /* Setup the texture environment */
-    m3d->scale_3d_cntl |= MACH64_TEX_LIGHT_FCN_MODULATE;
-
-    /* Initialize texture unit */
-    m3d->tex_cntl |= MACH64_TEX_ST_DIRECT |
-                     MACH64_TEX_SRC_LOCAL |
-                     MACH64_TEX_UNCOMPRESSED |
-                     MACH64_TEX_CACHE_FLUSH |
-                     MACH64_TEX_CACHE_SIZE_4K;
-}
-
-/*
- * This function setups the texture unit.
- */
-static Bool
-Mach64PrepareTexture(PicturePtr pPict, PixmapPtr pPix)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pPix->drawable.pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-    Mach64ContextRegs3D *m3d = &pATI->m3d;
-
-    CARD32 texFormat;
-
-    int w = pPict->pDrawable->width;
-    int h = pPict->pDrawable->height;
-    int l2w, l2h, l2p, level, pitch, cpp, i;
-
-    /* Prepare picture format */
-    for (i = 0; i < MACH64_NR_TEX_FORMATS; i++) {
-        if (Mach64TexFormats[i].pictFormat == pPict->format)
-            break;
-    }
-    texFormat = Mach64TexFormats[i].texFormat;
-
-    /* Prepare picture size */
-    cpp = PICT_FORMAT_BPP(pPict->format) / 8;
-    pitch = exaGetPixmapPitch(pPix) / cpp;
-
-    Mach64GetOrder(w, &l2w);
-    Mach64GetOrder(h, &l2h);
-    Mach64GetOrder(pitch, &l2p);
-
-    if (pPict->repeat && w == 1 && h == 1)
-        l2p = 0;
-    else if (pPict->repeat)
-        MACH64_FALLBACK(("Repeat not supported for w,h != 1,1\n"));
-
-    l2w = l2p;
-
-    level = (l2w > l2h) ? l2w : l2h;
-
-    m3d->tex_width = (1 << l2w);
-    m3d->tex_height = (1 << l2h);
-
-    /* Update hw state */
-    m3d->dp_pix_width |= SetBits(texFormat, DP_SCALE_PIX_WIDTH);
-
-    m3d->tex_size_pitch = (l2w   << 0) |
-                          (level << 4) |
-                          (l2h   << 8);
-
-    m3d->tex_offset = exaGetPixmapOffset(pPix);
-
-    if (PICT_FORMAT_A(pPict->format))
-        m3d->scale_3d_cntl |= MACH64_TEX_MAP_AEN;
-
-    switch (pPict->filter) {
-    case PictFilterNearest:
-        m3d->scale_3d_cntl |= MACH64_TEX_BLEND_FCN_NEAREST;
-        break;
-    case PictFilterBilinear:
-        /* FIXME */
-#if 0
-        m3d->scale_3d_cntl |= MACH64_TEX_BLEND_FCN_LINEAR;
-        m3d->scale_3d_cntl |= MACH64_BILINEAR_TEX_EN;
-#endif
-        MACH64_FALLBACK(("Bilinear filter 0x%x\n", pPict->filter));
-        break;
-    default:
-        MACH64_FALLBACK(("Bad filter 0x%x\n", pPict->filter));
-    }
-
-    m3d->transform = pPict->transform;
-
-    return TRUE;
-}
-
-/*
- * PrepareComposite acceleration hook.
- */
-Bool
-Mach64PrepareComposite
-(
-    int        op,
-    PicturePtr pSrcPicture,
-    PicturePtr pMaskPicture,
-    PicturePtr pDstPicture,
-    PixmapPtr  pSrc,
-    PixmapPtr  pMask,
-    PixmapPtr  pDst
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pDst->drawable.pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-    Mach64ContextRegs3D *m3d = &pATI->m3d;
-
-    CARD32 dstFormat;
-    int offset, i;
-
-    ATIDRISync(pScreenInfo);
-
-    /* Initialize state */
-    m3d->dp_mix = SetBits(MIX_SRC, DP_BKGD_MIX) |
-                  SetBits(MIX_SRC, DP_FRGD_MIX);
-
-    m3d->dp_src = SetBits(SRC_SCALER_3D, DP_BKGD_SRC) |
-                  SetBits(SRC_SCALER_3D, DP_FRGD_SRC) |
-                  DP_MONO_SRC_ALLONES;
-
-    Mach64GetPixmapOffsetPitch(pDst, &m3d->dst_pitch_offset);
-
-    m3d->scale_3d_cntl = 0;
-    m3d->tex_cntl = 0;
-
-    m3d->frag_src = FALSE;
-    m3d->frag_mask = FALSE;
-    m3d->frag_color = 0xffffffff;
-
-    m3d->color_alpha = FALSE;
-
-    m3d->transform = NULL;
-
-    /* Compute state */
-    if (pMaskPicture && !Mach64PrepareMask(m3d, op, pSrcPicture, pMaskPicture,
-                                           pSrc, pMask))
-        return FALSE;
-
-    Mach64BlendCntl(m3d, op);
-
-    for (i = 0; i < MACH64_NR_TEX_FORMATS; i++) {
-        if (Mach64TexFormats[i].pictFormat == pDstPicture->format)
-            break;
-    }
-    dstFormat = Mach64TexFormats[i].dstFormat;
-
-    m3d->dp_pix_width = SetBits(dstFormat, DP_DST_PIX_WIDTH) |
-                        SetBits(dstFormat, DP_SRC_PIX_WIDTH) |
-                        SetBits(dstFormat, DP_HOST_PIX_WIDTH);
-
-    if (!m3d->frag_src) {
-        if (!Mach64PrepareTexture(pSrcPicture, pSrc))
-            return FALSE;
-    }
-
-    if (pMaskPicture && !m3d->frag_mask) {
-        if (!Mach64PrepareTexture(pMaskPicture, pMask))
-            return FALSE;
-    }
-
-    offset = TEX_LEVEL(m3d->tex_size_pitch);
-
-    /* Emit state */
-    ATIMach64WaitForFIFO(pATI, 12);
-    outf(DP_SRC, m3d->dp_src);
-    outf(DP_MIX, m3d->dp_mix);
-
-    outf(CLR_CMP_CNTL, CLR_CMP_FN_FALSE);
-    outf(DST_CNTL, DST_X_DIR | DST_Y_DIR);
-    outf(DST_OFF_PITCH, m3d->dst_pitch_offset);
-
-    outf(SCALE_3D_CNTL, m3d->scale_3d_cntl);
-    outf(DP_WRITE_MASK, m3d->dp_write_mask);
-    outf(DP_PIX_WIDTH, m3d->dp_pix_width);
-
-    outf(SETUP_CNTL, 0);
-
-    outf(TEX_SIZE_PITCH, m3d->tex_size_pitch);
-    outf(TEX_CNTL, m3d->tex_cntl);
-    outf(TEX_0_OFF + offset, m3d->tex_offset);
-
-    return TRUE;
-}
-
-/*
- * Vertex format, setup and emission.
- */
-typedef struct {
-    float s0;    /* normalized texture coords */
-    float t0;
-    float x;     /* quarter-pixels */
-    float y;
-    CARD32 argb; /* fragment color */
-} Mach64Vertex;
-
-#define VTX_SET(_v, _col, _dstX, _dstY, _srcX, _dx, _srcY, _dy) \
-do {                                                            \
-    _v.s0 = ((float)(_srcX) + _dx) / m3d->tex_width;            \
-    _v.t0 = ((float)(_srcY) + _dy) / m3d->tex_height;           \
-    _v.x  = ((float)(_dstX) * 4.0);                             \
-    _v.y  = ((float)(_dstY) * 4.0);                             \
-    _v.argb = _col;                                             \
-} while (0)
-
-static __inline__ CARD32
-FVAL(float f)
-{
-    union { float f; CARD32 c; } fc;
-
-    fc.f = f;
-    return fc.c;
-}
-
-#define VTX_OUT(_v, n)                    \
-do {                                      \
-    float w = 1.0;                        \
-    CARD32 z = 0xffff << 15;              \
-    CARD32 x_y = ((CARD16)_v.x << 16) |   \
-                 ((CARD16)_v.y & 0xffff); \
-                                          \
-    ATIMach64WaitForFIFO(pATI, 6);        \
-    outf(VERTEX_##n##_S, FVAL(_v.s0));    \
-    outf(VERTEX_##n##_T, FVAL(_v.t0));    \
-    outf(VERTEX_##n##_W, FVAL(w));        \
-                                          \
-    outf(VERTEX_##n##_Z, z);              \
-    outf(VERTEX_##n##_ARGB, _v.argb);     \
-    outf(VERTEX_##n##_X_Y, x_y);          \
-} while (0)
-
-/*
- * Composite acceleration hook.
- */
-void
-Mach64Composite
-(
-    PixmapPtr pDst,
-    int       srcX,
-    int       srcY,
-    int       maskX,
-    int       maskY,
-    int       dstX,
-    int       dstY,
-    int       w,
-    int       h
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pDst->drawable.pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-    Mach64ContextRegs3D *m3d = &pATI->m3d;
-
-    Mach64Vertex v0, v1, v2, v3;
-    float ooa;
-    CARD32 col;
-    PictVector v;
-    int srcXend, srcYend;
-    float dxy = 0.0, dwh = 0.0;
-
-    ATIDRISync(pScreenInfo);
-
-    /* Disable clipping if it gets in the way */
-    ATIMach64ValidateClip(pATI, dstX, dstX + w - 1, dstY, dstY + h - 1);
-
-    /* Handle solid textures which come in as fragment color */
-    col = m3d->frag_color;
-    if (m3d->frag_src) {
-        srcX = maskX;
-        srcY = maskY;
-    }
-
-    /* Handle transform */
-    srcXend = srcX + w;
-    srcYend = srcY + h;
-    if (m3d->transform) {
-        v.vector[0] = IntToxFixed(srcX);
-        v.vector[1] = IntToxFixed(srcY);
-        v.vector[2] = xFixed1;
-        PictureTransformPoint(m3d->transform, &v);
-        srcX = xFixedToInt(v.vector[0]);
-        srcY = xFixedToInt(v.vector[1]);
-
-        v.vector[0] = IntToxFixed(srcXend);
-        v.vector[1] = IntToxFixed(srcYend);
-        v.vector[2] = xFixed1;
-        PictureTransformPoint(m3d->transform, &v);
-        srcXend = xFixedToInt(v.vector[0]);
-        srcYend = xFixedToInt(v.vector[1]);
-
-#if 0
-        /* Bilinear needs manipulation of texture coordinates */
-        if (m3d->scale_3d_cntl & MACH64_BILINEAR_TEX_EN) {
-            dxy =  0.5;
-            dwh = -1.0;
-        }
-#endif
-    }
-
-    /* Create vertices in clock-wise order */
-    VTX_SET(v0, col, dstX,     dstY,     srcX, dxy,    srcY, dxy);
-    VTX_SET(v1, col, dstX + w, dstY,     srcXend, dwh, srcY, dxy);
-    VTX_SET(v2, col, dstX + w, dstY + h, srcXend, dwh, srcYend, dwh);
-    VTX_SET(v3, col, dstX,     dstY + h, srcX, dxy,    srcYend, dwh);
-
-    /* Setup upper triangle (v0, v1, v3) */
-    VTX_OUT(v0, 1);
-    VTX_OUT(v1, 2);
-    VTX_OUT(v3, 3);
-
-    ooa = 1.0 / (w * h);
-    outf(ONE_OVER_AREA, FVAL(ooa));
-
-    /* Setup lower triangle (v2, v1, v3) */
-    VTX_OUT(v2, 1);
-
-    ooa = -ooa;
-    outf(ONE_OVER_AREA, FVAL(ooa));
-}
-
-/*
- * DoneComposite acceleration hook.
- */
-void
-Mach64DoneComposite(PixmapPtr pDst)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[pDst->drawable.pScreen->myNum];
-    ATIPtr pATI = ATIPTR(pScreenInfo);
-
-    ATIDRISync(pScreenInfo);
-
-    outf(SCALE_3D_CNTL, 0);
-}
diff --git a/src/atimach64version.h b/src/atimach64version.h
deleted file mode 100644
index c1848bd..0000000
--- a/src/atimach64version.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _MACH64_VERSION_H_
-#define _MACH64_VERSION_H_ 1
-
-#undef  MACH64_NAME
-#undef  MACH64_DRIVER_NAME
-#undef  MACH64_VERSION_MAJOR
-#undef  MACH64_VERSION_MINOR
-#undef  MACH64_VERSION_PATCH
-#undef  MACH64_VERSION_CURRENT
-#undef  MACH64_VERSION_EVALUATE
-#undef  MACH64_VERSION_STRINGIFY
-#undef  MACH64_VERSION_NAME
-
-#define MACH64_NAME          "MACH64"
-#define MACH64_DRIVER_NAME   "mach64"
-
-#define MACH64_VERSION_MAJOR 6
-#define MACH64_VERSION_MINOR 7
-#define MACH64_VERSION_PATCH 0
-
-#ifndef MACH64_VERSION_EXTRA
-#define MACH64_VERSION_EXTRA ""
-#endif
-
-#define MACH64_VERSION_CURRENT \
-    ((MACH64_VERSION_MAJOR << 20) | \
-     (MACH64_VERSION_MINOR << 10) | \
-     (MACH64_VERSION_PATCH))
-
-#define MACH64_VERSION_EVALUATE(__x) #__x
-#define MACH64_VERSION_STRINGIFY(_x) MACH64_VERSION_EVALUATE(_x)
-#define MACH64_VERSION_NAME                                             \
-    MACH64_VERSION_STRINGIFY(MACH64_VERSION_MAJOR) "."                  \
-    MACH64_VERSION_STRINGIFY(MACH64_VERSION_MINOR) "."                  \
-    MACH64_VERSION_STRINGIFY(MACH64_VERSION_MINOR) MACH64_VERSION_EXTRA
-
-#endif /* _MACH64_VERSION_H_ */
diff --git a/src/atimach64xv.c b/src/atimach64xv.c
deleted file mode 100644
index ef17861..0000000
--- a/src/atimach64xv.c
+++ /dev/null
@@ -1,1686 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "ati.h"
-#include "atichip.h"
-#include "atimach64accel.h"
-#include "atimach64io.h"
-#include "atixv.h"
-
-#include <X11/extensions/Xv.h>
-#include "fourcc.h"
-#include "xf86xv.h"
-
-#define MAKE_ATOM(string) MakeAtom(string, strlen(string), TRUE)
-#define MaxScale          (CARD32)(CARD16)(-1)
-
-static unsigned long ATIMach64XVAtomGeneration = (unsigned long)(-1);
-
-static XF86VideoEncodingRec ATIMach64VideoEncoding[] =
-{
-    { 0, "XV_IMAGE", 720, 2048, {1, 1} }
-};
-#define nATIMach64VideoEncoding NumberOf(ATIMach64VideoEncoding)
-
-static XF86VideoFormatRec ATIMach64VideoFormat[] =
-{
-    { 8, TrueColor},
-    { 8, DirectColor},
-    { 8, PseudoColor},
-    { 8, GrayScale},
-    { 8, StaticGray},
-    { 8, StaticColor},
-    {15, TrueColor},
-    {16, TrueColor},
-    {24, TrueColor},
-    {15, DirectColor},
-    {16, DirectColor},
-    {24, DirectColor}
-};
-#define nATIMach64VideoFormat NumberOf(ATIMach64VideoFormat)
-
-static XF86AttributeRec ATIMach64Attribute[] =
-{
-    /* These are only supported on the Rage Pro and later ... */
-    {
-        XvSettable | XvGettable,
-        -1000, 1000,
-        "XV_SATURATION"
-    },
-    {
-        XvSettable | XvGettable,
-        -1000, 1000,
-        "XV_BRIGHTNESS"
-    },
-    {
-        XvSettable | XvGettable,
-        -1000, 1000,
-        "XV_COLOUR"
-    },
-    {
-        XvSettable | XvGettable,
-        -1000, 1000,
-        "XV_COLOR"
-    },
-
-    /* Local attributes, odds and ends for compatibility, etc... */
-    {
-        XvSettable | XvGettable,
-        0, 1,
-        "XV_AUTOPAINT_COLOURKEY"
-    },
-    {
-        XvSettable | XvGettable,
-        0, 1,
-        "XV_AUTOPAINT_COLORKEY"
-    },
-    {
-        XvSettable | XvGettable,
-        0, (1 << 24) - 1,
-        "XV_COLOURKEY"
-    },
-    {
-        XvSettable | XvGettable,
-        0, (1 << 24) - 1,
-        "XV_COLORKEY"
-    },
-    {
-        XvSettable | XvGettable,
-        0, (1 << 24) - 1,
-        "XV_COLOURKEY_MASK"
-    },
-    {
-        XvSettable | XvGettable,
-        0, (1 << 24) - 1,
-        "XV_COLORKEY_MASK"
-    },
-    {
-        XvSettable,
-        0, 0,
-        "XV_SET_DEFAULTS"
-    },
-    {   /* Keep last */
-        XvSettable | XvGettable,
-        0, 1,
-        "XV_DOUBLE_BUFFER"
-    }
-};
-#define nATIMach64Attribute NumberOf(ATIMach64Attribute)
-
-static XF86ImageRec ATIMach64Image[] =
-{
-    XVIMAGE_YUY2,
-    XVIMAGE_UYVY,
-    XVIMAGE_YV12,
-    XVIMAGE_I420
-};
-#define nATIMach64Image NumberOf(ATIMach64Image)
-
-/* A local XVideo adaptor attribute record */
-typedef struct _ATIMach64Attribute
-{
-    Atom  AttributeID;
-    INT32 MaxValue;             /* ... for the hardware */
-    void  (*SetAttribute) (ATIPtr, INT32);
-    INT32 (*GetAttribute) (ATIPtr);
-} ATIMach64AttributeRec, *ATIMach64AttributePtr;
-
-/* Functions to get/set XVideo adaptor attributes */
-
-static void
-ATIMach64SetSaturationAttribute
-(
-    ATIPtr pATI,
-    INT32  Value
-)
-{
-    /* Set the register */
-    pATI->NewHW.scaler_colour_cntl &=
-        ~(SCALE_SATURATION_U | SCALE_SATURATION_V);
-    pATI->NewHW.scaler_colour_cntl |= SetBits(Value, SCALE_SATURATION_U) |
-        SetBits(Value, SCALE_SATURATION_V);
-    outf(SCALER_COLOUR_CNTL, pATI->NewHW.scaler_colour_cntl);
-}
-
-static INT32
-ATIMach64GetSaturationAttribute
-(
-    ATIPtr pATI
-)
-{
-    return (INT32)GetBits(pATI->NewHW.scaler_colour_cntl, SCALE_SATURATION_U);
-}
-
-static void
-ATIMach64SetBrightnessAttribute
-(
-    ATIPtr pATI,
-    INT32  Value
-)
-{
-    /* Set the register */
-    pATI->NewHW.scaler_colour_cntl &= ~SCALE_BRIGHTNESS;
-    pATI->NewHW.scaler_colour_cntl |= SetBits(Value, SCALE_BRIGHTNESS);
-    outf(SCALER_COLOUR_CNTL, pATI->NewHW.scaler_colour_cntl);
-}
-
-static INT32
-ATIMach64GetBrightnessAttribute
-(
-    ATIPtr pATI
-)
-{
-    return (INT32)GetBits(pATI->NewHW.scaler_colour_cntl, SCALE_BRIGHTNESS);
-}
-
-static void
-ATIMach64SetDoubleBufferAttribute
-(
-    ATIPtr pATI,
-    INT32  Value
-)
-{
-    pATI->DoubleBuffer = Value;
-}
-
-static INT32
-ATIMach64GetDoubleBufferAttribute
-(
-    ATIPtr pATI
-)
-{
-    return (int)pATI->DoubleBuffer;
-}
-
-static void
-ATIMach64SetAutoPaintAttribute
-(
-    ATIPtr pATI,
-    INT32  Value
-)
-{
-    pATI->AutoPaint = Value;
-}
-
-static INT32
-ATIMach64GetAutoPaintAttribute
-(
-    ATIPtr pATI
-)
-{
-    return (int)pATI->AutoPaint;
-}
-
-static void
-ATIMach64SetColourKeyAttribute
-(
-    ATIPtr pATI,
-    INT32  Value
-)
-{
-    pATI->NewHW.overlay_graphics_key_clr =
-        (CARD32)(Value & ((1 << pATI->depth) - 1));
-    outf(OVERLAY_GRAPHICS_KEY_CLR, pATI->NewHW.overlay_graphics_key_clr);
-}
-
-static INT32
-ATIMach64GetColourKeyAttribute
-(
-    ATIPtr pATI
-)
-{
-    return (INT32)pATI->NewHW.overlay_graphics_key_clr;
-}
-
-static void
-ATIMach64SetColourKeyMaskAttribute
-(
-    ATIPtr pATI,
-    INT32  Value
-)
-{
-    pATI->NewHW.overlay_graphics_key_msk =
-        (CARD32)(Value & ((1 << pATI->depth) - 1));
-    outf(OVERLAY_GRAPHICS_KEY_MSK, pATI->NewHW.overlay_graphics_key_msk);
-}
-
-static INT32
-ATIMach64GetColourKeyMaskAttribute
-(
-    ATIPtr pATI
-)
-{
-    return (INT32)pATI->NewHW.overlay_graphics_key_msk;
-}
-
-/*
- * ATIMach64SetDefaultAttributes --
- *
- * This function calls other functions to set default values for the various
- * attributes of an XVideo port.
- */
-static void
-ATIMach64SetDefaultAttributes
-(
-    ATIPtr pATI,
-    INT32  Value
-)
-{
-    ATIMach64SetAutoPaintAttribute(pATI, TRUE);
-    ATIMach64SetDoubleBufferAttribute(pATI, FALSE);
-    ATIMach64SetColourKeyMaskAttribute(pATI, (1 << pATI->depth) - 1);
-    ATIMach64SetColourKeyAttribute(pATI, (3 << ((2 * pATI->depth) / 3)) |
-                                         (2 << ((1 * pATI->depth) / 3)) |
-                                         (1 << ((0 * pATI->depth) / 3)));
-
-    if (pATI->Chip < ATI_CHIP_264GTPRO)
-        return;
-
-    ATIMach64SetBrightnessAttribute(pATI, 32);
-    ATIMach64SetSaturationAttribute(pATI, 16);
-}
-
-/*
- * There is a one-to-one correspondance between elements of the following array
- * and those of ATIMach64Attribute.
- */
-static ATIMach64AttributeRec ATIMach64AttributeInfo[nATIMach64Attribute] =
-{
-    {   /* SATURATION */
-        0, 23,
-        ATIMach64SetSaturationAttribute,
-        ATIMach64GetSaturationAttribute
-    },
-    {   /* BRIGHTNESS */
-        0, 63,
-        ATIMach64SetBrightnessAttribute,
-        ATIMach64GetBrightnessAttribute
-    },
-    {   /* COLOUR */
-        0, 23,
-        ATIMach64SetSaturationAttribute,
-        ATIMach64GetSaturationAttribute
-    },
-    {   /* COLOR */
-        0, 23,
-        ATIMach64SetSaturationAttribute,
-        ATIMach64GetSaturationAttribute
-    },
-    {   /* AUTOPAINT_COLOURKEY */
-        0, 1,
-        ATIMach64SetAutoPaintAttribute,
-        ATIMach64GetAutoPaintAttribute
-    },
-    {   /* AUTOPAINT_COLORKEY */
-        0, 1,
-        ATIMach64SetAutoPaintAttribute,
-        ATIMach64GetAutoPaintAttribute
-    },
-    {   /* COLOURKEY */
-        0, (1 << 24) - 1,
-        ATIMach64SetColourKeyAttribute,
-        ATIMach64GetColourKeyAttribute
-    },
-    {   /* COLORKEY */
-        0, (1 << 24) - 1,
-        ATIMach64SetColourKeyAttribute,
-        ATIMach64GetColourKeyAttribute
-    },
-    {   /* COLOURKEY_MASK */
-        0, (1 << 24) - 1,
-        ATIMach64SetColourKeyMaskAttribute,
-        ATIMach64GetColourKeyMaskAttribute
-    },
-    {   /* COLORKEY_MASK */
-        0, (1 << 24) - 1,
-        ATIMach64SetColourKeyMaskAttribute,
-        ATIMach64GetColourKeyMaskAttribute
-    },
-    {   /* SET_DEFAULTS */
-        0, 0,
-        ATIMach64SetDefaultAttributes,
-        NULL
-    },
-    {   /* DOUBLE_BUFFER */
-        0, 1,
-        ATIMach64SetDoubleBufferAttribute,
-        ATIMach64GetDoubleBufferAttribute
-    }
-};
-
-/*
- * ATIMach64FindAttribute --
- *
- * This function is called to locate an Xv attribute's table entry.
- */
-static int
-ATIMach64FindPortAttribute
-(
-    ATIPtr pATI,
-    Atom   AttributeID
-)
-{
-    int iAttribute;
-
-    if (pATI->Chip < ATI_CHIP_264GTPRO)
-        iAttribute = 4;
-    else
-        iAttribute = 0;
-
-    for (;  iAttribute < nATIMach64Attribute;  iAttribute++)
-        if (AttributeID == ATIMach64AttributeInfo[iAttribute].AttributeID)
-            return iAttribute;
-
-    return -1;
-}
-
-/*
- * ATIMach64SetPortAttribute --
- *
- * This function sets the value of a particular port's attribute.
- */
-static int
-ATIMach64SetPortAttribute
-(
-    ScrnInfoPtr pScreenInfo,
-    Atom        AttributeID,
-    INT32       Value,
-    pointer     pATI
-)
-{
-    INT32 Range;
-    int   iAttribute;
-
-    if (((iAttribute = ATIMach64FindPortAttribute(pATI, AttributeID)) < 0) ||
-        !ATIMach64AttributeInfo[iAttribute].SetAttribute)
-        return BadMatch;
-
-    Range = ATIMach64Attribute[iAttribute].max_value -
-        ATIMach64Attribute[iAttribute].min_value;
-
-    if (Range >= 0)
-    {
-        /* Limit and scale the value */
-        Value -= ATIMach64Attribute[iAttribute].min_value;
-
-        if (Value < 0)
-            Value = 0;
-        else if (Value > Range)
-            Value = Range;
-
-        if (Range != ATIMach64AttributeInfo[iAttribute].MaxValue)
-        {
-            if (ATIMach64AttributeInfo[iAttribute].MaxValue > 0)
-                Value *= ATIMach64AttributeInfo[iAttribute].MaxValue;
-            if (Range > 0)
-                Value /= Range;
-        }
-    }
-
-    (*ATIMach64AttributeInfo[iAttribute].SetAttribute)(pATI, Value);
-
-    return Success;
-}
-
-/*
- * ATIMach64SetPortAttribute --
- *
- * This function retrieves the value of a particular port's attribute.
- */
-static int
-ATIMach64GetPortAttribute
-(
-    ScrnInfoPtr pScreenInfo,
-    Atom        AttributeID,
-    INT32       *Value,
-    pointer     pATI
-)
-{
-    INT32 Range;
-    int   iAttribute;
-
-    if (!Value ||
-        ((iAttribute = ATIMach64FindPortAttribute(pATI, AttributeID)) < 0) ||
-        !ATIMach64AttributeInfo[iAttribute].GetAttribute)
-        return BadMatch;
-
-    *Value = (*ATIMach64AttributeInfo[iAttribute].GetAttribute)(pATI);
-
-    Range = ATIMach64Attribute[iAttribute].max_value -
-        ATIMach64Attribute[iAttribute].min_value;
-
-    if (Range >= 0)
-    {
-        if (Range != ATIMach64AttributeInfo[iAttribute].MaxValue)
-        {
-            /* (Un-)scale the value */
-            if (Range > 0)
-                *Value *= Range;
-            if (ATIMach64AttributeInfo[iAttribute].MaxValue > 0)
-                *Value /= ATIMach64AttributeInfo[iAttribute].MaxValue;
-        }
-
-        *Value += ATIMach64Attribute[iAttribute].min_value;
-    }
-
-    return Success;
-}
-
-static pointer
-ATIMach64XVMemAlloc
-(
-    ScreenPtr pScreen,
-    pointer   pVideo,
-    int       size,
-    int       *offset,
-    ATIPtr    pATI
-);
-
-static void
-ATIMach64XVMemFree
-(
-    ScreenPtr pScreen,
-    pointer   pVideo,
-    ATIPtr    pATI
-);
-
-#ifdef USE_XAA
-/*
- * ATIMach64RemoveLinearCallback --
- *
- * This is called by the framebuffer manager to release the offscreen XVideo
- * buffer after the video has been temporarily disabled due to its window being
- * iconified or completely occluded.
- */
-static void
-ATIMach64RemoveLinearCallback
-(
-    FBLinearPtr pLinear
-)
-{
-    ATIPtr pATI = ATIPTR(xf86Screens[pLinear->pScreen->myNum]);
-
-    pATI->pXVBuffer = NULL;
-    outf(OVERLAY_SCALE_CNTL, SCALE_EN);
-}
-#endif /* USE_XAA */
-
-/*
- * ATIMach64StopVideo --
- *
- * This is called to stop displaying a video.  Note that, to prevent jittering
- * this doesn't actually turn off the overlay unless 'Cleanup' is TRUE, i.e.
- * when the video is to be actually stopped rather than temporarily disabled.
- */
-static void
-ATIMach64StopVideo
-(
-    ScrnInfoPtr pScreenInfo,
-    pointer     Data,
-    Bool        Cleanup
-)
-{
-    ScreenPtr pScreen = pScreenInfo->pScreen;
-    ATIPtr    pATI    = Data;
-
-    if (pATI->ActiveSurface)
-        return;
-
-    REGION_EMPTY(pScreen, &pATI->VideoClip);
-
-#ifdef USE_XAA
-    if (!pATI->useEXA && !Cleanup)
-    {
-        /*
-         * Free offscreen buffer if/when its allocation is needed by XAA's
-         * pixmap cache.
-         */
-        FBLinearPtr linear = (FBLinearPtr)pATI->pXVBuffer;
-        if (linear)
-            linear->RemoveLinearCallback =
-                ATIMach64RemoveLinearCallback;
-        return;
-    }
-#endif /* USE_XAA */
-
-    ATIMach64XVMemFree(pScreen, pATI->pXVBuffer, pATI);
-    pATI->pXVBuffer = NULL;
-    outf(OVERLAY_SCALE_CNTL, SCALE_EN);
-}
-
-/*
- * ATIMach64QueryBestSize --
- *
- * Quoting XVideo docs:
- *
- * This function provides the client with a way to query what the destination
- * dimensions would end up being if they were to request that an area
- * VideoWidth by VideoHeight from the video stream be scaled to rectangle of
- * DrawableWidth by DrawableHeight on the screen.  Since it is not expected
- * that all hardware will be able to get the target dimensions exactly, it is
- * important that the driver provide this function.
- */
-static void
-ATIMach64QueryBestSize
-(
-    ScrnInfoPtr  pScreenInfo,
-    Bool         Motion,
-    short        VideoWidth,
-    short        VideoHeight,
-    short        DrawableWidth,
-    short        DrawableHeight,
-    unsigned int *Width,
-    unsigned int *Height,
-    pointer      pATI
-)
-{
-    *Width  = DrawableWidth;
-    *Height = DrawableHeight;
-}
-
-/*
- * ATIMach64QueryImageAttributes --
- *
- * Quoting XVideo docs:
- *
- * This function is called to let the driver specify how data for a particular
- * image of size Width by Height should be stored.  Sometimes only the size and
- * corrected width and height are needed.  In that case pitches and offsets are
- * NULL.  The size of the memory required for the image is returned by this
- * function.  The width and height of the requested image can be altered by the
- * driver to reflect format limitations (such as component sampling periods
- * that are larger than one).  If pPitch and pOffset are not NULL, these will
- * be arrays with as many elements in them as there are planes in the image
- * format.  The driver should specify the pitch (in bytes) of each scanline in
- * the particular plane as well as the offset to that plane (in bytes) from the
- * beginning of the image.
- */
-static int
-ATIMach64QueryImageAttributes
-(
-    ScrnInfoPtr    pScreenInfo,
-    int            ImageID,
-    unsigned short *Width,
-    unsigned short *Height,
-    int            *pPitch,
-    int            *pOffset
-)
-{
-    int Size, tmp;
-
-    if (!Width || !Height)
-        return 0;
-
-    if (*Width > 2048)
-        *Width = 2048;
-    else
-        *Width = (*Width + 1) & ~1;
-
-    if (*Height > 2048)
-        *Height = 2048;
-
-    if (pOffset)
-        pOffset[0] = 0;
-
-    switch (ImageID)
-    {
-        case FOURCC_YV12:
-        case FOURCC_I420:
-            *Height = (*Height + 1) & ~1;
-            Size = (*Width + 3) & ~3;
-            if (pPitch)
-                pPitch[0] = Size;
-            Size *= *Height;
-            if (pOffset)
-                pOffset[1] = Size;
-            tmp = ((*Width >> 1) + 3) & ~3;
-            if (pPitch)
-                pPitch[1] = pPitch[2] = tmp;
-            tmp *= (*Height >> 1);
-            Size += tmp;
-            if (pOffset)
-                pOffset[2] = Size;
-            Size += tmp;
-            break;
-
-        case FOURCC_UYVY:
-        case FOURCC_YUY2:
-            Size = *Width << 1;
-            if (pPitch)
-                pPitch[0] = Size;
-            Size *= *Height;
-            break;
-
-        default:
-            Size = 0;
-            break;
-    }
-
-    return Size;
-}
-
-/*
- * ATIMach64ScaleVideo --
- *
- * This function is called to calculate overlay scaling factors.
- */
-static void
-ATIMach64ScaleVideo
-(
-    ATIPtr         pATI,
-    DisplayModePtr pMode,
-    int            SrcW,
-    int            SrcH,
-    int            DstW,
-    int            DstH,
-    CARD32         *pHScale,
-    CARD32         *pVScale
-)
-{
-    int Shift;
-
-    *pHScale = ATIDivide(SrcW, DstW,
-        GetBits(pATI->NewHW.pll_vclk_cntl, PLL_ECP_DIV) + 12, 0);
-
-    Shift = 12;
-    if (pMode->Flags & V_INTERLACE)
-        Shift++;
-
-    if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))
-    {
-        if (pMode->VDisplay < pATI->LCDVertical)
-        {
-            SrcH *= pMode->VDisplay;
-            DstH *= pATI->LCDVertical;
-        }
-    }
-    else
-    {
-        if (pMode->Flags & V_DBLSCAN)
-            Shift--;
-        if (pMode->VScan > 1)
-            DstH *= pMode->VScan;
-    }
-
-    *pVScale = ATIDivide(SrcH, DstH, Shift, 0);
-}
-
-/*
- * ATIMach64ClipVideo --
- *
- * Clip the video (both source and destination) and make various other
- * adjustments.
- */
-static Bool
-ATIMach64ClipVideo
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    int         ImageID,
-    short       SrcX,
-    short       SrcY,
-    short       SrcW,
-    short       SrcH,
-    short       DstX,
-    short       DstY,
-    short       *DstW,
-    short       *DstH,
-    short       Width,
-    short       Height,
-    RegionPtr   pClip,
-    BoxPtr      pDstBox,
-    INT32       *SrcX1,
-    INT32       *SrcX2,
-    INT32       *SrcY1,
-    INT32       *SrcY2,
-    int         *SrcLeft,
-    int         *SrcTop
-)
-{
-    CARD32 HScale, VScale;
-
-    /* Check hardware limits */
-    if ((Height <= 0) || (Height > 2048) || (Width <= 0) || (Width > 768) ||
-        ((Width > 384) && (pATI->Chip < ATI_CHIP_264VTB)) ||
-        ((Width > 720) && (pATI->Chip < ATI_CHIP_264GTPRO ||
-                           pATI->Chip > ATI_CHIP_264LTPRO)))
-        return FALSE;
-
-    ATIMach64ScaleVideo(pATI, pScreenInfo->currentMode,
-        SrcW, SrcH, *DstW, *DstH, &HScale, &VScale);
-    if (!HScale || !VScale)
-        return FALSE;
-    if (HScale > MaxScale)
-        *DstW = (*DstW * HScale) / MaxScale;
-    if (VScale > MaxScale)
-        *DstH = (*DstH * HScale) / MaxScale;
-
-    /* Clip both the source and the destination */
-    *SrcX1 = SrcX;
-    *SrcX2 = SrcX + SrcW;
-    *SrcY1 = SrcY;
-    *SrcY2 = SrcY + SrcH;
-
-    pDstBox->x1 = DstX;
-    pDstBox->x2 = DstX + *DstW;
-    pDstBox->y1 = DstY;
-    pDstBox->y2 = DstY + *DstH;
-
-    if (!xf86XVClipVideoHelper(pDstBox, SrcX1, SrcX2, SrcY1, SrcY2,
-                               pClip, Width, Height))
-        return FALSE;
-
-    /*
-     * Reset overlay scaler origin.  This prevents jittering during
-     * viewport panning or while the video is being moved or gradually
-     * obscured/unobscured.
-     */
-    pDstBox->x1 = DstX;
-    pDstBox->y1 = DstY;
-
-    /* Translate to the current viewport */
-    pDstBox->x1 -= pScreenInfo->frameX0;
-    pDstBox->x2 -= pScreenInfo->frameX0;
-    pDstBox->y1 -= pScreenInfo->frameY0;
-    pDstBox->y2 -= pScreenInfo->frameY0;
-
-    *SrcLeft = *SrcTop = 0;
-
-    /*
-     * If the overlay scaler origin ends up outside the current viewport, move
-     * it to the viewport's top left corner.  This unavoidably causes a slight
-     * jittering in the image (even with double-buffering).
-     */
-    if (pDstBox->x1 < 0)
-    {
-        *SrcLeft = ((-pDstBox->x1 * SrcW) / *DstW) & ~1;
-        pDstBox->x1 = 0;
-    }
-
-    if (pDstBox->y1 < 0)
-    {
-        *SrcTop = (-pDstBox->y1 * SrcH) / *DstH;
-        pDstBox->y1 = 0;
-
-        switch (ImageID)
-        {
-            case FOURCC_YV12:
-            case FOURCC_I420:
-                *SrcTop = (*SrcTop + 1) & ~1;
-                break;
-
-            default:
-                break;
-        }
-    }
-
-    return TRUE;
-}
-
-#ifdef ATIMove32
-
-/* A faster intercept */
-#undef  xf86XVCopyPacked
-#define xf86XVCopyPacked ATIMach64XVCopyPacked
-
-static void
-ATIMach64XVCopyPacked
-(
-    const CARD8 *pSrc,
-    CARD8       *pDst,
-    int         SrcPitch,
-    int         DstPitch,
-    int         Height,
-    int         Width
-)
-{
-    Width >>= 1;
-    while (--Height >= 0)
-    {
-        ATIMove32(pDst, pSrc, Width);
-        pSrc += SrcPitch;
-        pDst += DstPitch;
-    }
-}
-
-#endif
-
-/*
- * ATIMach64DisplayVideo --
- *
- * This function programmes Mach64 registers needed to display a video.
- */
-static void
-ATIMach64DisplayVideo
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    BoxPtr      pDstBox,
-    int         ImageID,
-    int         Offset,
-    int         Pitch,
-    short       SrcW,
-    short       SrcH,
-    short       DstW,
-    short       DstH,
-    short       Width,
-    short       Height
-)
-{
-    DisplayModePtr pMode = pScreenInfo->currentMode;
-    CARD32         HScale, VScale;
-
-    if (pMode->VScan > 1)
-    {
-        pDstBox->y1 *= pMode->VScan;
-        pDstBox->y2 *= pMode->VScan;
-    }
-    if (pMode->Flags & V_DBLSCAN)
-    {
-        pDstBox->y1 <<= 1;
-        pDstBox->y2 <<= 1;
-    }
-
-    /* Recalculate overlay scale factors */
-    ATIMach64ScaleVideo(pATI, pMode, SrcW, SrcH, DstW, DstH, &HScale, &VScale);
-
-    pATI->NewHW.video_format &= ~SCALER_IN;
-    if (ImageID == FOURCC_UYVY)
-        pATI->NewHW.video_format |= SCALER_IN_YVYU422;
-    else
-        pATI->NewHW.video_format |= SCALER_IN_VYUY422;
-
-    ATIMach64WaitForFIFO(pATI, 8);
-    outq(OVERLAY_Y_X_START, OVERLAY_Y_X_END, OVERLAY_LOCK_START |
-        SetWord(pDstBox->x1, 1) | SetWord(pDstBox->y1, 0),
-        SetWord(pDstBox->x2 - 1, 1) | SetWord(pDstBox->y2 - 1, 0));
-    outf(OVERLAY_SCALE_INC, SetWord(HScale, 1) | SetWord(VScale, 0));
-    outf(SCALER_HEIGHT_WIDTH, SetWord(Width, 1) | SetWord(Height, 0));
-    outf(VIDEO_FORMAT, pATI->NewHW.video_format);
-
-    if (pATI->Chip < ATI_CHIP_264VTB)
-    {
-        outf(BUF0_OFFSET, Offset);
-        outf(BUF0_PITCH, Pitch);
-    }
-    else
-    {
-        outf(SCALER_BUF0_OFFSET, Offset);
-        outf(SCALER_BUF_PITCH, Pitch);
-    }
-
-    outf(OVERLAY_SCALE_CNTL, SCALE_PIX_EXPAND | OVERLAY_EN | SCALE_EN);
-}
-
-/*
- * ATIMach64PutImage --
- *
- * This function is called to put a video image on the screen.
- */
-static int
-ATIMach64PutImage
-(
-    ScrnInfoPtr   pScreenInfo,
-    short         SrcX,
-    short         SrcY,
-    short         DstX,
-    short         DstY,
-    short         SrcW,
-    short         SrcH,
-    short         DstW,
-    short         DstH,
-    int           ImageID,
-    unsigned char *Buffer,
-    short         Width,
-    short         Height,
-    Bool          Synchronise,
-    RegionPtr     pClip,
-    pointer       Data,
-    DrawablePtr   pDraw
-)
-{
-    ATIPtr    pATI    = Data;
-    ScreenPtr pScreen;
-    INT32     SrcX1, SrcX2, SrcY1, SrcY2;
-    BoxRec    DstBox;
-    int       SrcPitch, SrcPitchUV, DstPitch, DstSize;
-    int       SrcTop, SrcLeft, DstWidth, DstHeight;
-    int       Top, Bottom, Left, Right, nLine, nPixel, Offset;
-    int       OffsetV, OffsetU;
-    int       XVOffset;
-    int       tmp;
-    CARD8     *pDst;
-
-    if (pATI->ActiveSurface)
-        return Success;
-
-    if (DstH < 16)
-	return Success;
-
-    if (!ATIMach64ClipVideo(pScreenInfo, pATI, ImageID,
-                            SrcX, SrcY, SrcW, SrcH,
-                            DstX, DstY, &DstW, &DstH,
-                            Width, Height, pClip, &DstBox,
-                            &SrcX1, &SrcX2, &SrcY1, &SrcY2,
-                            &SrcLeft, &SrcTop))
-        return Success;
-
-    pScreen = pScreenInfo->pScreen;
-
-    DstWidth = Width - SrcLeft;
-    DstHeight = Height - SrcTop;
-
-    /*
-     * Allocate an offscreen buffer for the entire source, even though only a
-     * subset of the source will be copied into it.
-     */
-    DstPitch = /* bytes */
-        (DstWidth + DstWidth + 15) & ~15;
-    DstSize =  /* bytes */
-        (DstPitch * DstHeight);
-
-    pATI->pXVBuffer = ATIMach64XVMemAlloc(pScreen, pATI->pXVBuffer,
-        (pATI->DoubleBuffer + 1) * DstSize, &XVOffset, pATI);
-
-    if (!pATI->pXVBuffer)
-    {
-        if (!pATI->DoubleBuffer)
-            return BadAlloc;
-
-        pATI->pXVBuffer =
-            ATIMach64XVMemAlloc(pScreen, pATI->pXVBuffer, DstSize, &XVOffset, pATI);
-
-        if (!pATI->pXVBuffer)
-            return BadAlloc;
-
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-            "Video image double-buffering downgraded to single-buffering\n due"
-            " to insufficient video memory.\n");
-        pATI->DoubleBuffer = pATI->CurrentBuffer = 0;
-    }
-    else
-    {
-        /* Possibly switch buffers */
-        pATI->CurrentBuffer = pATI->DoubleBuffer - pATI->CurrentBuffer;
-    }
-
-    /* Synchronise video memory accesses */
-    ATIMach64Sync(pScreenInfo);
-
-    Offset = XVOffset + pATI->CurrentBuffer * DstSize;
-    pDst = pATI->pMemoryLE;
-    pDst += Offset;
-
-    switch (ImageID)
-    {
-        case FOURCC_YV12:
-        case FOURCC_I420:
-            Left = (SrcX1 >> 16) & ~1;
-            Right = ((SrcX2 + 0x1FFFF) >> 16) & ~1;
-            Top = (SrcY1 >> 16) & ~1;
-            Bottom = ((SrcY2 + 0x1FFFF) >> 16) & ~1;
-
-            if ((Right < Width) && ((SrcX1 & 0x1FFFF) <= (SrcX2 & 0x1FFFF)))
-                Right += 2;
-            if ((Bottom < Height) && ((SrcY1 & 0x1FFFF) <= (SrcY2 & 0x1FFFF)))
-                Bottom += 2;
-
-            nPixel = Right - Left;
-            nLine = Bottom - Top;
-
-            SrcPitch = (Width + 3) & ~3;
-            OffsetV = SrcPitch * Height;
-            SrcPitchUV = ((Width >> 1) + 3) & ~3;
-            OffsetU = ((Height >> 1) * SrcPitchUV) + OffsetV;
-
-            tmp = ((Top >> 1) * SrcPitchUV) + (Left >> 1);
-            OffsetV += tmp;
-            OffsetU += tmp;
-
-            if (ImageID == FOURCC_I420)
-            {
-                tmp = OffsetV;
-                OffsetV = OffsetU;
-                OffsetU = tmp;
-            }
-
-            pDst += ((Top - SrcTop) * DstPitch) + ((Left - SrcLeft) << 1);
-
-            xf86XVCopyYUV12ToPacked(Buffer + (Top * SrcPitch) + Left,
-                Buffer + OffsetV, Buffer + OffsetU, pDst, SrcPitch, SrcPitchUV,
-                DstPitch, nLine, nPixel);
-            break;
-
-        case FOURCC_UYVY:
-        case FOURCC_YUY2:
-        default:
-            Left = (SrcX1 >> 16) & ~1;
-            Right = ((SrcX2 + 0x1FFFF) >> 16) & ~1;
-            Top = SrcY1 >> 16;
-            Bottom = (SrcY2 + 0x0FFFF) >> 16;
-
-            if ((Right < Width) && ((SrcX1 & 0x1FFFF) <= (SrcX2 & 0x1FFFF)))
-                Right += 2;
-            if ((Bottom < Height) && ((SrcY1 & 0x0FFFF) <= (SrcY2 & 0x0FFFF)))
-                Bottom++;
-
-            nPixel = Right - Left;
-            nLine = Bottom - Top;
-
-            SrcPitch = Width << 1;
-            Buffer += (Top * SrcPitch) + (Left << 1);
-            pDst += ((Top - SrcTop) * DstPitch) + ((Left - SrcLeft) << 1);
-
-            xf86XVCopyPacked(Buffer, pDst, SrcPitch, DstPitch, nLine, nPixel);
-            break;
-    }
-
-    if (!REGION_EQUAL(pScreen, &pATI->VideoClip, pClip))
-    {
-        REGION_COPY(pScreen, &pATI->VideoClip, pClip);
-        if (pATI->AutoPaint)
-            xf86XVFillKeyHelper(pScreen, pATI->NewHW.overlay_graphics_key_clr,
-                pClip);
-    }
-
-    ATIMach64DisplayVideo(pScreenInfo, pATI, &DstBox, ImageID,
-        Offset, DstPitch / 2, SrcW, SrcH, DstW, DstH, DstWidth, DstHeight);
-
-    return Success;
-}
-
-/*
- * ATIMach64AllocateSurface --
- *
- * This function allocates an offscreen buffer (called a "surface") for use by
- * an external driver such as 'v4l'.
- */
-static int
-ATIMach64AllocateSurface
-(
-    ScrnInfoPtr    pScreenInfo,
-    int            ImageID,
-    unsigned short Width,
-    unsigned short Height,
-    XF86SurfacePtr pSurface
-)
-{
-    ScreenPtr pScreen;
-    ATIPtr    pATI = ATIPTR(pScreenInfo);
-    int       XVOffset;
-
-    if (pATI->ActiveSurface)
-        return BadAlloc;
-
-    if ((Height <= 0) || (Height > 2048) || (Width <= 0) || (Width > 768) ||
-        ((Width > 384) && (pATI->Chip < ATI_CHIP_264VTB)) ||
-        ((Width > 720) && (pATI->Chip < ATI_CHIP_264GTPRO ||
-                           pATI->Chip > ATI_CHIP_264LTPRO)))
-        return BadValue;
-
-    Width = (Width + 1) & ~1;
-    pATI->SurfacePitch = ((Width << 1) + 15) & ~15;
-
-    pScreen = pScreenInfo->pScreen;
-
-    pATI->pXVBuffer = ATIMach64XVMemAlloc(pScreen, pATI->pXVBuffer,
-        Height * pATI->SurfacePitch, &XVOffset, pATI);
-    if (!pATI->pXVBuffer)
-        return BadAlloc;
-
-    pATI->SurfaceOffset = XVOffset;
-
-    pSurface->pScrn = pScreenInfo;
-    pSurface->id = ImageID;
-    pSurface->width = Width;
-    pSurface->height = Height;
-    pSurface->pitches = &pATI->SurfacePitch;
-    pSurface->offsets = &pATI->SurfaceOffset;
-    pSurface->devPrivate.ptr = pATI;
-
-    /* Stop the video */
-    outf(OVERLAY_SCALE_CNTL, SCALE_EN);
-    REGION_EMPTY(pScreen, &pATI->VideoClip);
-    pATI->ActiveSurface = TRUE;
-
-    return Success;
-}
-
-/*
- * ATIMach64FreeSurface --
- *
- * This function called to free a surface's offscreen buffer.
- */
-static int
-ATIMach64FreeSurface
-(
-    XF86SurfacePtr pSurface
-)
-{
-    ATIPtr pATI = pSurface->devPrivate.ptr;
-
-    if (!pATI->ActiveSurface)
-        return Success;
-
-    outf(OVERLAY_SCALE_CNTL, SCALE_EN);
-    ATIMach64XVMemFree(pSurface->pScrn->pScreen, pATI->pXVBuffer, pATI);
-    pATI->pXVBuffer = NULL;
-    pATI->ActiveSurface = FALSE;
-
-    return Success;
-}
-
-/*
- * ATIMach64DisplaySurface --
- *
- * This function is called to display a video surface.
- */
-static int
-ATIMach64DisplaySurface
-(
-    XF86SurfacePtr pSurface,
-    short          SrcX,
-    short          SrcY,
-    short          DstX,
-    short          DstY,
-    short          SrcW,
-    short          SrcH,
-    short          DstW,
-    short          DstH,
-    RegionPtr      pClip
-)
-{
-    ATIPtr      pATI = pSurface->devPrivate.ptr;
-    ScrnInfoPtr pScreenInfo;
-    int         ImageID;
-    short       Width, Height;
-    BoxRec      DstBox;
-    INT32       SrcX1, SrcX2, SrcY1, SrcY2;
-    int         SrcLeft, SrcTop, SrcPitch, Offset;
-
-    if (!pATI->ActiveSurface)
-        return Success;
-
-    pScreenInfo = pSurface->pScrn;
-    ImageID = pSurface->id;
-    Width = pSurface->width;
-    Height = pSurface->height;
-
-    if (!ATIMach64ClipVideo(pScreenInfo, pATI, ImageID,
-                            SrcX, SrcY, SrcW, SrcH,
-                            DstX, DstY, &DstW, &DstH,
-                            Width, Height, pClip, &DstBox,
-                            &SrcX1, &SrcX2, &SrcY1, &SrcY2,
-                            &SrcLeft, &SrcTop))
-        return Success;
-
-    xf86XVFillKeyHelper(pScreenInfo->pScreen,
-        pATI->NewHW.overlay_graphics_key_clr, pClip);
-
-    SrcPitch = pSurface->pitches[0];
-    Offset = pSurface->offsets[0] + (SrcTop * SrcPitch) + (SrcLeft << 1);
-    ATIMach64DisplayVideo(pScreenInfo, pATI, &DstBox, ImageID,
-        Offset, SrcPitch, SrcW, SrcH, DstW, DstH, Width, Height);
-
-    return Success;
-}
-
-/*
- * ATIMach64StopSurface --
- *
- * This function is called to stop the overlaid display of a video surface.
- */
-static int
-ATIMach64StopSurface
-(
-    XF86SurfacePtr pSurface
-)
-{
-    ATIPtr pATI = pSurface->devPrivate.ptr;
-
-    if (pATI->ActiveSurface)
-        outf(OVERLAY_SCALE_CNTL, SCALE_EN);
-
-    return Success;
-}
-
-/*
- * ATIMach64GetSurfaceAttribute --
- *
- * Retrieve the value of an XVideo attribute.
- */
-static int
-ATIMach64GetSurfaceAttribute
-(
-    ScrnInfoPtr pScreenInfo,
-    Atom        AttributeID,
-    INT32       *Value
-)
-{
-    return ATIMach64GetPortAttribute(pScreenInfo, AttributeID, Value,
-                                     ATIPTR(pScreenInfo));
-}
-
-/*
- * ATIMach64SetSurfaceAttribute
- *
- * Set the value of an XVideo attribute.
- */
-static int
-ATIMach64SetSurfaceAttribute
-(
-    ScrnInfoPtr pScreenInfo,
-    Atom        AttributeID,
-    INT32       Value
-)
-{
-    return ATIMach64SetPortAttribute(pScreenInfo, AttributeID, Value,
-                                     ATIPTR(pScreenInfo));
-}
-
-/* XVideo surface registration data */
-static XF86OffscreenImageRec ATIMach64Surface[] =
-{
-    {
-        &ATIMach64Image[0],             /* YUY2 */
-        VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT,
-        ATIMach64AllocateSurface,
-        ATIMach64FreeSurface,
-        ATIMach64DisplaySurface,
-        ATIMach64StopSurface,
-        ATIMach64GetSurfaceAttribute,
-        ATIMach64SetSurfaceAttribute,
-        720, 2048,
-        nATIMach64Attribute - 1,        /* No double-buffering */
-        ATIMach64Attribute
-    },
-    {
-        &ATIMach64Image[1],             /* UYVY */
-        VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT,
-        ATIMach64AllocateSurface,
-        ATIMach64FreeSurface,
-        ATIMach64DisplaySurface,
-        ATIMach64StopSurface,
-        ATIMach64GetSurfaceAttribute,
-        ATIMach64SetSurfaceAttribute,
-        720, 2048,
-        nATIMach64Attribute - 1,        /* No double-buffering */
-        ATIMach64Attribute
-    }
-};
-#define nATIMach64Surface NumberOf(ATIMach64Surface)
-
-/*
- * ATIMach64XVInitialiseAdaptor --
- *
- * This function is called to make a Mach64's hardware overlay support
- * available as an XVideo adaptor.
- */
-static int
-ATIMach64XVInitialiseAdaptor
-(
-    ScrnInfoPtr         pScreenInfo,
-    XF86VideoAdaptorPtr **pppAdaptor
-)
-{
-    ScreenPtr           pScreen    = screenInfo.screens[pScreenInfo->scrnIndex];
-    ATIPtr              pATI       = ATIPTR(pScreenInfo);
-    XF86VideoAdaptorPtr *ppAdaptor = NULL;
-    XF86VideoAdaptorPtr pAdaptor;
-    int                 Index;
-
-    XF86VideoEncodingPtr  enc = &(ATIMach64VideoEncoding[0]);
-    XF86OffscreenImagePtr surf0 = &(ATIMach64Surface[0]);
-    XF86OffscreenImagePtr surf1 = &(ATIMach64Surface[1]);
-
-    if (pppAdaptor)
-        *pppAdaptor = NULL;
-
-    if (!pATI->Block1Base)
-        return 0;
-
-    if (!(pAdaptor = xf86XVAllocateVideoAdaptorRec(pScreenInfo)))
-        return 0;
-
-    ppAdaptor = xnfalloc(sizeof(pAdaptor));
-    ppAdaptor[0] = pAdaptor;
-
-    pAdaptor->nPorts = 1;
-    pAdaptor->pPortPrivates = pATI->XVPortPrivate;
-    pATI->XVPortPrivate[0].ptr = pATI;
-
-    pAdaptor->type = XvInputMask | XvImageMask | XvWindowMask;
-    pAdaptor->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
-    pAdaptor->name = "ATI Mach64 Back-end Overlay Scaler";
-
-    if (pATI->Chip < ATI_CHIP_264VTB)
-    {
-        enc->width = 384;
-    }
-    else if (pATI->Chip < ATI_CHIP_264GTPRO ||
-             pATI->Chip > ATI_CHIP_264LTPRO)
-    {
-        enc->width = 720; /* default */
-    }
-    else
-    {
-        enc->width = 768;
-    }
-    pAdaptor->nEncodings = nATIMach64VideoEncoding;
-    pAdaptor->pEncodings = ATIMach64VideoEncoding;
-
-    pAdaptor->nFormats = nATIMach64VideoFormat;
-    pAdaptor->pFormats = ATIMach64VideoFormat;
-
-    pAdaptor->nAttributes = nATIMach64Attribute;
-    pAdaptor->pAttributes = ATIMach64Attribute;
-
-    if (pATI->Chip < ATI_CHIP_264GTPRO)
-    {
-        /* Older controllers don't have brightness or saturation controls */
-        pAdaptor->nAttributes -= 4;
-        pAdaptor->pAttributes += 4;
-    }
-
-    pAdaptor->nImages = nATIMach64Image;
-    pAdaptor->pImages = ATIMach64Image;
-
-    pAdaptor->StopVideo            = ATIMach64StopVideo;
-    pAdaptor->SetPortAttribute     = ATIMach64SetPortAttribute;
-    pAdaptor->GetPortAttribute     = ATIMach64GetPortAttribute;
-    pAdaptor->QueryBestSize        = ATIMach64QueryBestSize;
-    pAdaptor->PutImage             = ATIMach64PutImage;
-    pAdaptor->QueryImageAttributes = ATIMach64QueryImageAttributes;
-
-    REGION_NULL(pScreen, &pATI->VideoClip);
-    pATI->ActiveSurface = FALSE;
-
-    if (ATIMach64XVAtomGeneration != serverGeneration)
-    {
-        /* Refresh static data */
-        ATIMach64XVAtomGeneration = serverGeneration;
-
-        Index = nATIMach64Attribute - pAdaptor->nAttributes;
-        for (;  Index < nATIMach64Attribute;  Index++)
-            ATIMach64AttributeInfo[Index].AttributeID =
-                MAKE_ATOM(ATIMach64Attribute[Index].name);
-    }
-
-    ATIMach64SetDefaultAttributes(pATI, 0);
-
-    if (pATI->Chip < ATI_CHIP_264VTB)
-    {
-        surf0->max_width = 384;
-        surf1->max_width = 384;
-    }
-    else if (pATI->Chip < ATI_CHIP_264GTPRO ||
-             pATI->Chip > ATI_CHIP_264LTPRO)
-    {
-        surf0->max_width = 720; /* default */
-        surf1->max_width = 720;
-    }
-    else
-    {
-        surf0->max_width = 768;
-        surf1->max_width = 768;
-    }
-
-    if (pATI->Chip < ATI_CHIP_264GTPRO)
-    {
-        /* No saturation nor brightness */
-        surf0->num_attributes -= 4;
-        surf1->num_attributes -= 4;
-        surf0->attributes += 4;
-        surf1->attributes += 4;
-    }
-    xf86XVRegisterOffscreenImages(pScreen, ATIMach64Surface, nATIMach64Surface);
-
-    if (pppAdaptor)
-        *pppAdaptor = ppAdaptor;
-    else {
-        xfree(ppAdaptor[0]);
-        xfree(ppAdaptor);
-    }
-
-    return 1;
-}
-
-/*
- * ATIXVPreInit --
- *
- * This function is called by ATIPreInit() to set up the environment required
- * to support the XVideo extension.
- */
-void
-ATIXVPreInit
-(
-    ATIPtr      pATI
-)
-{
-    (void)xf86XVRegisterGenericAdaptorDriver(ATIMach64XVInitialiseAdaptor);
-}
-
-/*
- * ATIXVFreeAdaptorInfo --
- *
- * Free XVideo adaptor information.
- */
-static void
-ATIXVFreeAdaptorInfo
-(
-    XF86VideoAdaptorPtr *ppAdaptor,
-    int                 nAdaptor
-)
-{
-    if (!ppAdaptor)
-        return;
-
-    while (nAdaptor > 0)
-        xfree(ppAdaptor[--nAdaptor]);
-
-    xfree(ppAdaptor);
-}
-
-/*
- * ATIInitializeXVideo --
- *
- * This function is called to initialise XVideo extension support on a screen.
- */
-Bool
-ATIInitializeXVideo
-(
-    ScreenPtr   pScreen,
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI
-)
-{
-    XF86VideoAdaptorPtr *ppAdaptor;
-    int                 nAdaptor;
-    Bool                result;
-
-    pScreenInfo->memPhysBase = pATI->LinearBase;
-    pScreenInfo->fbOffset = 0;
-
-    nAdaptor = xf86XVListGenericAdaptors(pScreenInfo, &ppAdaptor);
-    result = xf86XVScreenInit(pScreen, ppAdaptor, nAdaptor);
-
-    ATIXVFreeAdaptorInfo(ppAdaptor, nAdaptor);
-
-    return result;
-}
-
-/*
- * ATIMach64CloseXVideo --
- *
- * This function is called during screen termination to clean up after
- * initialisation of Mach64 XVideo support.
- */
-void
-ATICloseXVideo
-(
-    ScreenPtr   pScreen,
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI
-)
-{
-    ATIMach64StopVideo(pScreenInfo, pATI, TRUE);
-
-    REGION_UNINIT(pScreen, &pATI->VideoClip);
-}
-
-/* Functions for offscreen memory management */
-
-#ifdef USE_XAA
-static FBLinearPtr
-ATIResizeOffscreenLinear
-(
-    ScreenPtr   pScreen,
-    FBLinearPtr pLinear,
-    int         Size
-)
-{
-    if (Size <= 0)
-    {
-        xf86FreeOffscreenLinear(pLinear);
-        return NULL;
-    }
-
-    if (pLinear)
-    {
-        if ((pLinear->size >= Size) ||
-            xf86ResizeOffscreenLinear(pLinear, Size))
-        {
-            pLinear->MoveLinearCallback = NULL;
-            pLinear->RemoveLinearCallback = NULL;
-            return pLinear;
-        }
-
-        xf86FreeOffscreenLinear(pLinear);
-    }
-
-    pLinear = xf86AllocateOffscreenLinear(pScreen, Size, 16, NULL, NULL, NULL);
-
-    if (!pLinear)
-    {
-        int maxSize;
-
-        xf86QueryLargestOffscreenLinear(pScreen, &maxSize, 16,
-            PRIORITY_EXTREME);
-
-        if (maxSize < Size)
-            return NULL;
-
-        xf86PurgeUnlockedOffscreenAreas(pScreen);
-        pLinear =
-            xf86AllocateOffscreenLinear(pScreen, Size, 16, NULL, NULL, NULL);
-    }
-
-    return pLinear;
-}
-#endif /* USE_XAA */
-
-static pointer
-ATIMach64XVMemAlloc
-(
-    ScreenPtr pScreen,
-    pointer   pVideo,
-    int       size,
-    int       *offset,
-    ATIPtr    pATI
-)
-{
-#ifdef USE_EXA
-    if (pATI->useEXA) {
-        ExaOffscreenArea *area = (ExaOffscreenArea *)pVideo;
-
-        if (area != NULL) {
-            if (area->size >= size) {
-                *offset = area->offset;
-                return area;
-            }
-
-            exaOffscreenFree(pScreen, area);
-        }
-
-        area = exaOffscreenAlloc(pScreen, size, 64, TRUE, NULL, NULL);
-        if (area != NULL) {
-            *offset = area->offset;
-            return area;
-        }
-    }
-#endif /* USE_EXA */
-
-#ifdef USE_XAA
-    if (!pATI->useEXA) {
-        FBLinearPtr linear = (FBLinearPtr)pVideo;
-        int cpp = pATI->AdjustDepth;
-
-        /* XAA allocates in units of pixels at the screen bpp, so adjust size
-         * appropriately.
-         */
-        size = (size + cpp - 1) / cpp;
-
-        linear = ATIResizeOffscreenLinear(pScreen, linear, size);
-        if (linear != NULL) {
-            *offset = linear->offset * cpp;
-            return linear;
-        }
-    }
-#endif /* USE_XAA */
-
-    *offset = 0;
-    return NULL;
-}
-
-static void
-ATIMach64XVMemFree
-(
-    ScreenPtr pScreen,
-    pointer   pVideo,
-    ATIPtr    pATI
-)
-{
-#ifdef USE_EXA
-    if (pATI->useEXA) {
-        ExaOffscreenArea *area = (ExaOffscreenArea *)pVideo;
-
-        if (area != NULL)
-            exaOffscreenFree(pScreen, area);
-    }
-#endif /* USE_EXA */
-
-#ifdef USE_XAA
-    if (!pATI->useEXA) {
-        FBLinearPtr linear = (FBLinearPtr)pVideo;
-
-        if (linear != NULL)
-            ATIResizeOffscreenLinear(pScreen, linear, 0);
-    }
-#endif /* USE_XAA */
-}
-
diff --git a/src/atimisc.c b/src/atimisc.c
deleted file mode 100644
index ebfde54..0000000
--- a/src/atimisc.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atimach64probe.h"
-#include "atimach64version.h"
-
-/* Module loader interface for subsidiary driver module */
-
-static XF86ModuleVersionInfo ATIVersionRec =
-{
-    MACH64_DRIVER_NAME,
-    MODULEVENDORSTRING,
-    MODINFOSTRING1,
-    MODINFOSTRING2,
-    XORG_VERSION_CURRENT,
-    MACH64_VERSION_MAJOR, MACH64_VERSION_MINOR, MACH64_VERSION_PATCH,
-    ABI_CLASS_VIDEODRV,
-    ABI_VIDEODRV_VERSION,
-    MOD_CLASS_VIDEODRV,
-    {0, 0, 0, 0}
-};
-
-/*
- * ATISetup --
- *
- * This function is called every time the module is loaded.
- */
-static pointer
-ATISetup
-(
-    pointer Module,
-    pointer Options,
-    int     *ErrorMajor,
-    int     *ErrorMinor
-)
-{
-    static Bool Inited = FALSE;
-
-    if (!Inited)
-    {
-        Inited = TRUE;
-        xf86AddDriver(&MACH64, Module, HaveDriverFuncs);
-    }
-
-    return (pointer)TRUE;
-}
-
-/* The following record must be called mach64ModuleData */
-_X_EXPORT XF86ModuleData mach64ModuleData =
-{
-    &ATIVersionRec,
-    ATISetup,
-    NULL
-};
diff --git a/src/atimode.c b/src/atimode.c
deleted file mode 100644
index d1b3198..0000000
--- a/src/atimode.c
+++ /dev/null
@@ -1,1084 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "ati.h"
-#include "atichip.h"
-#include "atidac.h"
-#include "atidsp.h"
-#include "atimach64.h"
-#include "atimach64io.h"
-#include "atimode.h"
-#include "atiprint.h"
-#include "atirgb514.h"
-#include "ativga.h"
-#include "atiwonder.h"
-#include "atiwonderio.h"
-
-#ifdef TV_OUT
-
-#include "vbe.h"
-
-#endif /* TV_OUT */
-
-#ifndef AVOID_CPIO
-
-/*
- * ATICopyVGAMemory --
- *
- * This function is called to copy one or all banks of a VGA plane.
- */
-static void
-ATICopyVGAMemory
-(
-    ATIPtr   pATI,
-    ATIHWPtr pATIHW,
-    pointer  *saveptr,
-    pointer  *from,
-    pointer  *to
-)
-{
-    unsigned int iBank;
-
-    for (iBank = 0;  iBank < pATIHW->nBank;  iBank++)
-    {
-        (*pATIHW->SetBank)(pATI, iBank);
-        (void)memcpy(*to, *from, 0x00010000U);
-        *saveptr = (char *)(*saveptr) + 0x00010000U;
-    }
-}
-
-/*
- * ATISwap --
- *
- * This function saves/restores video memory contents during video mode
- * switches.
- */
-static void
-ATISwap
-(
-    int      iScreen,
-    ATIPtr   pATI,
-    ATIHWPtr pATIHW,
-    Bool     ToFB
-)
-{
-    pointer save, *from, *to;
-    unsigned int iPlane = 0, PlaneMask = 1;
-    CARD8 seq2, seq4, gra1, gra3, gra4, gra5, gra6, gra8;
-
-    /*
-     * This is only done for non-accelerator modes.  If the video state on
-     * server entry was an accelerator mode, the application that relinquished
-     * the console had better do the Right Thing (tm) anyway by saving and
-     * restoring its own video memory contents.
-     */
-    if (pATIHW->crtc != ATI_CRTC_VGA)
-        return;
-
-    if (ToFB)
-    {
-        if (!pATIHW->frame_buffer)
-            return;
-
-        from = &save;
-        to = &pATI->pBank;
-    }
-    else
-    {
-        /* Allocate the memory */
-        if (!pATIHW->frame_buffer)
-        {
-            pATIHW->frame_buffer =
-                (pointer)xalloc(pATIHW->nBank * pATIHW->nPlane * 0x00010000U);
-            if (!pATIHW->frame_buffer)
-            {
-                xf86DrvMsg(iScreen, X_WARNING,
-                    "Temporary frame buffer could not be allocated.\n");
-                return;
-            }
-        }
-
-        from = &pATI->pBank;
-        to = &save;
-    }
-
-    /* Turn off screen */
-    ATIVGASaveScreen(pATI, SCREEN_SAVER_ON);
-
-    /* Save register values to be modified */
-    seq2 = GetReg(SEQX, 0x02U);
-    seq4 = GetReg(SEQX, 0x04U);
-    gra1 = GetReg(GRAX, 0x01U);
-    gra3 = GetReg(GRAX, 0x03U);
-    gra5 = GetReg(GRAX, 0x05U);
-    gra6 = GetReg(GRAX, 0x06U);
-    gra8 = GetReg(GRAX, 0x08U);
-
-    save = pATIHW->frame_buffer;
-
-    /* Temporarily normalise the mode */
-    if (gra1 != 0x00U)
-        PutReg(GRAX, 0x01U, 0x00U);
-    if (gra3 != 0x00U)
-        PutReg(GRAX, 0x03U, 0x00U);
-    if (gra6 != 0x05U)
-        PutReg(GRAX, 0x06U, 0x05U);
-    if (gra8 != 0xFFU)
-        PutReg(GRAX, 0x08U, 0xFFU);
-
-    if (seq4 & 0x08U)
-    {
-        /* Setup packed mode memory */
-        if (seq2 != 0x0FU)
-            PutReg(SEQX, 0x02U, 0x0FU);
-        if (seq4 != 0x0AU)
-            PutReg(SEQX, 0x04U, 0x0AU);
-        if (pATI->Chip < ATI_CHIP_264CT)
-        {
-            if (gra5 != 0x00U)
-                PutReg(GRAX, 0x05U, 0x00U);
-        }
-        else
-        {
-            if (gra5 != 0x40U)
-                PutReg(GRAX, 0x05U, 0x40U);
-        }
-
-        ATICopyVGAMemory(pATI, pATIHW, &save, from, to);
-
-        if (seq2 != 0x0FU)
-            PutReg(SEQX, 0x02U, seq2);
-        if (seq4 != 0x0AU)
-            PutReg(SEQX, 0x04U, seq4);
-        if (pATI->Chip < ATI_CHIP_264CT)
-        {
-            if (gra5 != 0x00U)
-                PutReg(GRAX, 0x05U, gra5);
-        }
-        else
-        {
-            if (gra5 != 0x40U)
-                PutReg(GRAX, 0x05U, gra5);
-        }
-    }
-    else
-    {
-        gra4 = GetReg(GRAX, 0x04U);
-
-        /* Setup planar mode memory */
-        if (seq4 != 0x06U)
-            PutReg(SEQX, 0x04U, 0x06U);
-        if (gra5 != 0x00U)
-            PutReg(GRAX, 0x05U, 0x00U);
-
-        for (;  iPlane < pATIHW->nPlane;  iPlane++)
-        {
-            PutReg(SEQX, 0x02U, PlaneMask);
-            PutReg(GRAX, 0x04U, iPlane);
-            ATICopyVGAMemory(pATI, pATIHW, &save, from, to);
-            PlaneMask <<= 1;
-        }
-
-        PutReg(SEQX, 0x02U, seq2);
-        if (seq4 != 0x06U)
-            PutReg(SEQX, 0x04U, seq4);
-        PutReg(GRAX, 0x04U, gra4);
-        if (gra5 != 0x00U)
-            PutReg(GRAX, 0x05U, gra5);
-    }
-
-    /* Restore registers */
-    if (gra1 != 0x00U)
-        PutReg(GRAX, 0x01U, gra1);
-    if (gra3 != 0x00U)
-        PutReg(GRAX, 0x03U, gra3);
-    if (gra6 != 0x05U)
-        PutReg(GRAX, 0x06U, gra6);
-    if (gra8 != 0xFFU)
-        PutReg(GRAX, 0x08U, gra8);
-
-    /* Back to bank 0 */
-    (*pATIHW->SetBank)(pATI, 0);
-}
-
-#endif /* AVOID_CPIO */
-
-/*
- * ATIModePreInit --
- *
- * This function initialises an ATIHWRec with information common to all video
- * states generated by the driver.
- */
-void
-ATIModePreInit
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    CARD32 lcd_index;
-
-#ifndef AVOID_CPIO
-
-    if (pATI->VGAAdapter)
-    {
-        /* Fill in VGA data */
-        ATIVGAPreInit(pATI, pATIHW);
-
-        /* Fill in VGA Wonder data */
-        if (pATI->CPIO_VGAWonder)
-            ATIVGAWonderPreInit(pATI, pATIHW);
-    }
-
-#endif /* AVOID_CPIO */
-
-    {
-        /* Fill in Mach64 data */
-        ATIMach64PreInit(pScreenInfo, pATI, pATIHW);
-
-        if (pATI->Chip >= ATI_CHIP_264CT)
-        {
-            /* Ensure proper VCLK source */
-            pATIHW->pll_vclk_cntl = ATIMach64GetPLLReg(PLL_VCLK_CNTL) |
-                (PLL_VCLK_SRC_SEL | PLL_VCLK_RESET);
-
-            /* Set provisional values for other PLL registers */
-            pATIHW->pll_vclk_post_div = ATIMach64GetPLLReg(PLL_VCLK_POST_DIV);
-            pATIHW->pll_vclk0_fb_div = ATIMach64GetPLLReg(PLL_VCLK0_FB_DIV);
-            pATIHW->pll_vclk1_fb_div = ATIMach64GetPLLReg(PLL_VCLK1_FB_DIV);
-            pATIHW->pll_vclk2_fb_div = ATIMach64GetPLLReg(PLL_VCLK2_FB_DIV);
-            pATIHW->pll_vclk3_fb_div = ATIMach64GetPLLReg(PLL_VCLK3_FB_DIV);
-            pATIHW->pll_xclk_cntl = ATIMach64GetPLLReg(PLL_XCLK_CNTL);
-
-            /* For now disable extended reference and feedback dividers */
-            if (pATI->Chip >= ATI_CHIP_264LT)
-                pATIHW->pll_ext_vpll_cntl =
-                    ATIMach64GetPLLReg(PLL_EXT_VPLL_CNTL) &
-                    ~(PLL_EXT_VPLL_EN | PLL_EXT_VPLL_VGA_EN |
-                      PLL_EXT_VPLL_INSYNC);
-
-            /* Initialise CRTC data for LCD panels */
-            if (pATI->LCDPanelID >= 0)
-            {
-                if (pATI->Chip == ATI_CHIP_264LT)
-                {
-                    pATIHW->lcd_gen_ctrl = inr(LCD_GEN_CTRL);
-                }
-                else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                            (pATI->Chip == ATI_CHIP_264XL) ||
-                            (pATI->Chip == ATI_CHIP_MOBILITY)) */
-                {
-                    lcd_index = inr(LCD_INDEX);
-                    pATIHW->lcd_index = lcd_index &
-                        ~(LCD_REG_INDEX | LCD_DISPLAY_DIS | LCD_SRC_SEL |
-                          LCD_CRTC2_DISPLAY_DIS);
-                    if (pATI->Chip != ATI_CHIP_264XL)
-                        pATIHW->lcd_index |= LCD_CRTC2_DISPLAY_DIS;
-                    pATIHW->config_panel =
-                        ATIMach64GetLCDReg(LCD_CONFIG_PANEL) |
-                        DONT_SHADOW_HEND;
-                    pATIHW->lcd_gen_ctrl =
-                        ATIMach64GetLCDReg(LCD_GEN_CNTL) & ~CRTC_RW_SELECT;
-                    outr(LCD_INDEX, lcd_index);
-                }
-
-                pATIHW->lcd_gen_ctrl &=
-                    ~(HORZ_DIVBY2_EN | DIS_HOR_CRT_DIVBY2 | MCLK_PM_EN |
-                      VCLK_DAC_PM_EN | USE_SHADOWED_VEND |
-                      USE_SHADOWED_ROWCUR | SHADOW_EN | SHADOW_RW_EN);
-                pATIHW->lcd_gen_ctrl |= DONT_SHADOW_VPAR | LOCK_8DOT;
-
-                if (!pATI->OptionPanelDisplay)
-                {
-                    /*
-                     * Use primary CRTC to drive the CRT.  Turn off panel
-                     * interface.
-                     */
-                    pATIHW->lcd_gen_ctrl &= ~LCD_ON;
-                    pATIHW->lcd_gen_ctrl |= CRT_ON;
-                }
-                else
-                {
-                    /* Use primary CRTC to drive the panel */
-                    pATIHW->lcd_gen_ctrl |= LCD_ON;
-
-                    /* If requested, also force CRT on */
-                    if (pATI->OptionCRTDisplay)
-                        pATIHW->lcd_gen_ctrl |= CRT_ON;
-                }
-            }
-        }
-        else if (pATI->DAC == ATI_DAC_IBMRGB514)
-        {
-            ATIRGB514PreInit(pATI, pATIHW);
-        }
-    }
-
-    /* Set RAMDAC data */
-    ATIDACPreInit(pScreenInfo, pATI, pATIHW);
-}
-
-/*
- * ATIModeSave --
- *
- * This function saves the current video state.
- */
-void
-ATIModeSave
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-
-#ifndef AVOID_CPIO
-
-    int Index;
-
-    /* Get back to bank 0 */
-    (*pATIHW->SetBank)(pATI, 0);
-
-#endif /* AVOID_CPIO */
-
-    if (pATI->Chip >= ATI_CHIP_264CT)
-    {
-        pATIHW->pll_vclk_cntl = ATIMach64GetPLLReg(PLL_VCLK_CNTL) |
-            PLL_VCLK_RESET;
-        pATIHW->pll_vclk_post_div = ATIMach64GetPLLReg(PLL_VCLK_POST_DIV);
-        pATIHW->pll_vclk0_fb_div = ATIMach64GetPLLReg(PLL_VCLK0_FB_DIV);
-        pATIHW->pll_vclk1_fb_div = ATIMach64GetPLLReg(PLL_VCLK1_FB_DIV);
-        pATIHW->pll_vclk2_fb_div = ATIMach64GetPLLReg(PLL_VCLK2_FB_DIV);
-        pATIHW->pll_vclk3_fb_div = ATIMach64GetPLLReg(PLL_VCLK3_FB_DIV);
-        pATIHW->pll_xclk_cntl = ATIMach64GetPLLReg(PLL_XCLK_CNTL);
-        if (pATI->Chip >= ATI_CHIP_264LT)
-            pATIHW->pll_ext_vpll_cntl = ATIMach64GetPLLReg(PLL_EXT_VPLL_CNTL);
-
-        /* Save LCD registers */
-        if (pATI->LCDPanelID >= 0)
-        {
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                pATIHW->horz_stretching = inr(HORZ_STRETCHING);
-                pATIHW->vert_stretching = inr(VERT_STRETCHING);
-                pATIHW->lcd_gen_ctrl = inr(LCD_GEN_CTRL);
-
-                /* Set up to save non-shadow registers */
-                outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl & ~SHADOW_RW_EN);
-            }
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            {
-                pATIHW->lcd_index = inr(LCD_INDEX);
-                pATIHW->config_panel = ATIMach64GetLCDReg(LCD_CONFIG_PANEL);
-                pATIHW->lcd_gen_ctrl = ATIMach64GetLCDReg(LCD_GEN_CNTL);
-                pATIHW->horz_stretching =
-                    ATIMach64GetLCDReg(LCD_HORZ_STRETCHING);
-                pATIHW->vert_stretching =
-                    ATIMach64GetLCDReg(LCD_VERT_STRETCHING);
-                pATIHW->ext_vert_stretch =
-                    ATIMach64GetLCDReg(LCD_EXT_VERT_STRETCH);
-
-                /* Set up to save non-shadow registers */
-                ATIMach64PutLCDReg(LCD_GEN_CNTL,
-                    pATIHW->lcd_gen_ctrl & ~(CRTC_RW_SELECT | SHADOW_RW_EN));
-            }
-        }
-    }
-
-#ifndef AVOID_CPIO
-
-    if (pATI->VGAAdapter)
-    {
-        /* Save VGA data */
-        ATIVGASave(pATI, pATIHW);
-
-        /* Save VGA Wonder data */
-        if (pATI->CPIO_VGAWonder)
-            ATIVGAWonderSave(pATI, pATIHW);
-    }
-
-#endif /* AVOID_CPIO */
-
-    {
-        /* Save Mach64 data */
-        ATIMach64Save(pATI, pATIHW);
-
-        if (pATI->Chip >= ATI_CHIP_264VTB)
-        {
-            /* Save DSP data */
-            ATIDSPSave(pATI, pATIHW);
-
-            if (pATI->LCDPanelID >= 0)
-            {
-                /* Switch to shadow registers */
-                if (pATI->Chip == ATI_CHIP_264LT)
-                    outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl | SHADOW_RW_EN);
-                else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                            (pATI->Chip == ATI_CHIP_264XL) ||
-                            (pATI->Chip == ATI_CHIP_MOBILITY)) */
-                    ATIMach64PutLCDReg(LCD_GEN_CNTL,
-                        (pATIHW->lcd_gen_ctrl & ~CRTC_RW_SELECT) |
-                        SHADOW_RW_EN);
-
-#ifndef AVOID_CPIO
-
-                /* Save shadow VGA CRTC registers */
-                for (Index = 0;
-                     Index < NumberOf(pATIHW->shadow_vga);
-                     Index++)
-                    pATIHW->shadow_vga[Index] =
-                        GetReg(CRTX(pATI->CPIO_VGABase), Index);
-
-#endif /* AVOID_CPIO */
-
-                /* Save shadow Mach64 CRTC registers */
-                pATIHW->shadow_h_total_disp = inr(CRTC_H_TOTAL_DISP);
-                pATIHW->shadow_h_sync_strt_wid = inr(CRTC_H_SYNC_STRT_WID);
-                pATIHW->shadow_v_total_disp = inr(CRTC_V_TOTAL_DISP);
-                pATIHW->shadow_v_sync_strt_wid = inr(CRTC_V_SYNC_STRT_WID);
-
-                /* Restore CRTC selection and shadow state */
-                if (pATI->Chip == ATI_CHIP_264LT)
-                {
-                    outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl);
-                }
-                else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                            (pATI->Chip == ATI_CHIP_264XL) ||
-                            (pATI->Chip == ATI_CHIP_MOBILITY)) */
-                {
-                    ATIMach64PutLCDReg(LCD_GEN_CNTL, pATIHW->lcd_gen_ctrl);
-                    outr(LCD_INDEX, pATIHW->lcd_index);
-                }
-            }
-        }
-        else if (pATI->DAC == ATI_DAC_IBMRGB514)
-            ATIRGB514Save(pATI, pATIHW);
-    }
-
-    /* Save RAMDAC state */
-    ATIDACSave(pATI, pATIHW);
-
-    if (pATIHW != &pATI->NewHW)
-    {
-        pATIHW->FeedbackDivider = 0;    /* Don't programme clock */
-    }
-
-#ifndef AVOID_CPIO
-
-        /* Save video memory */
-        ATISwap(pScreenInfo->scrnIndex, pATI, pATIHW, FALSE);
-
-    if (pATI->VGAAdapter)
-        ATIVGASaveScreen(pATI, SCREEN_SAVER_OFF);       /* Turn on screen */
-
-#endif /* AVOID_CPIO */
-
-}
-
-/*
- * ATIModeCalculate --
- *
- * This function fills in an ATIHWRec with all register values needed to enable
- * a video state.  It's important that this be done without modifying the
- * current video state.
- */
-Bool
-ATIModeCalculate
-(
-    int            iScreen,
-    ATIPtr         pATI,
-    ATIHWPtr       pATIHW,
-    DisplayModePtr pMode
-)
-{
-    CARD32 lcd_index;
-    int Index, ECPClock, MaxScalerClock;
-
-    /* Fill in Mach64 data */
-    ATIMach64Calculate(pATI, pATIHW, pMode);
-
-    /* Set up LCD register values */
-    if (pATI->LCDPanelID >= 0)
-    {
-        int VDisplay = pMode->VDisplay;
-
-        if (pMode->Flags & V_DBLSCAN)
-            VDisplay <<= 1;
-        if (pMode->VScan > 1)
-            VDisplay *= pMode->VScan;
-        if (pMode->Flags & V_INTERLACE)
-            VDisplay >>= 1;
-
-        /* Ensure secondary CRTC is completely disabled */
-        pATIHW->crtc_gen_cntl &= ~(CRTC2_EN | CRTC2_PIX_WIDTH);
-
-        if (pATI->Chip == ATI_CHIP_264LT)
-        {
-            pATIHW->horz_stretching = inr(HORZ_STRETCHING);
-        }
-        else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                    (pATI->Chip == ATI_CHIP_264XL) ||
-                    (pATI->Chip == ATI_CHIP_MOBILITY)) */
-        {
-            lcd_index = inr(LCD_INDEX);
-            pATIHW->horz_stretching = ATIMach64GetLCDReg(LCD_HORZ_STRETCHING);
-            pATIHW->ext_vert_stretch =
-                ATIMach64GetLCDReg(LCD_EXT_VERT_STRETCH) &
-                ~(AUTO_VERT_RATIO | VERT_STRETCH_MODE | VERT_STRETCH_RATIO3);
-
-            /*
-             * Don't use vertical blending if the mode is too wide or not
-             * vertically stretched.
-             */
-            if (pATI->OptionPanelDisplay &&
-                (pMode->HDisplay <= pATI->LCDVBlendFIFOSize) &&
-                (VDisplay < pATI->LCDVertical))
-                pATIHW->ext_vert_stretch |= VERT_STRETCH_MODE;
-
-            outr(LCD_INDEX, lcd_index);
-        }
-
-        pATIHW->horz_stretching &=
-            ~(HORZ_STRETCH_RATIO | HORZ_STRETCH_LOOP | AUTO_HORZ_RATIO |
-              HORZ_STRETCH_MODE | HORZ_STRETCH_EN);
-        if (pATI->OptionPanelDisplay &&
-            (pMode->HDisplay < pATI->LCDHorizontal))
-        do
-        {
-            /*
-             * The horizontal blender misbehaves when HDisplay is less than a
-             * a certain threshold (440 for a 1024-wide panel).  It doesn't
-             * stretch such modes enough.  Use pixel replication instead of
-             * blending to stretch modes that can be made to exactly fit the
-             * panel width.  The undocumented "NoLCDBlend" option allows the
-             * pixel-replicated mode to be slightly wider or narrower than the
-             * panel width.  It also causes a mode that is exactly half as wide
-             * as the panel to be pixel-replicated, rather than blended.
-             */
-            int HDisplay  = pMode->HDisplay & ~7;
-            int nStretch  = pATI->LCDHorizontal / HDisplay;
-            int Remainder = pATI->LCDHorizontal % HDisplay;
-
-            if ((!Remainder && ((nStretch > 2) || !pATI->OptionBlend)) ||
-                (((HDisplay * 16) / pATI->LCDHorizontal) < 7))
-            {
-                static const char StretchLoops[] = {10, 12, 13, 15, 16};
-                int horz_stretch_loop = -1, BestRemainder;
-                int Numerator = HDisplay, Denominator = pATI->LCDHorizontal;
-
-                ATIReduceRatio(&Numerator, &Denominator);
-
-                BestRemainder = (Numerator * 16) / Denominator;
-                Index = NumberOf(StretchLoops);
-                while (--Index >= 0)
-                {
-                    Remainder =
-                        ((Denominator - Numerator) * StretchLoops[Index]) %
-                        Denominator;
-                    if (Remainder < BestRemainder)
-                    {
-                        horz_stretch_loop = Index;
-                        if (!(BestRemainder = Remainder))
-                            break;
-                    }
-#if 0
-                    /*
-                     * Enabling this code allows the pixel-replicated mode to
-                     * be slightly wider than the panel width.
-                     */
-                    Remainder = Denominator - Remainder;
-                    if (Remainder < BestRemainder)
-                    {
-                        horz_stretch_loop = Index;
-                        BestRemainder = Remainder;
-                    }
-#endif
-                }
-
-                if ((horz_stretch_loop >= 0) &&
-                    (!BestRemainder || !pATI->OptionBlend))
-                {
-                    int horz_stretch_ratio = 0, Accumulator = 0;
-                    int reuse_previous = 1;
-
-                    Index = StretchLoops[horz_stretch_loop];
-
-                    while (--Index >= 0)
-                    {
-                        if (Accumulator > 0)
-                            horz_stretch_ratio |= reuse_previous;
-                        else
-                            Accumulator += Denominator;
-                        Accumulator -= Numerator;
-                        reuse_previous <<= 1;
-                    }
-
-                    pATIHW->horz_stretching |= HORZ_STRETCH_EN |
-                        SetBits(horz_stretch_loop, HORZ_STRETCH_LOOP) |
-                        SetBits(horz_stretch_ratio, HORZ_STRETCH_RATIO);
-                    break;      /* Out of the do { ... } while (0) */
-                }
-            }
-
-            pATIHW->horz_stretching |= (HORZ_STRETCH_MODE | HORZ_STRETCH_EN) |
-                SetBits((HDisplay * (MaxBits(HORZ_STRETCH_BLEND) + 1)) /
-                        pATI->LCDHorizontal, HORZ_STRETCH_BLEND);
-        } while (0);
-
-        if (!pATI->OptionPanelDisplay || (VDisplay >= pATI->LCDVertical))
-        {
-            pATIHW->vert_stretching = 0;
-        }
-        else
-        {
-            pATIHW->vert_stretching = (VERT_STRETCH_USE0 | VERT_STRETCH_EN) |
-                SetBits((VDisplay * (MaxBits(VERT_STRETCH_RATIO0) + 1)) /
-                        pATI->LCDVertical, VERT_STRETCH_RATIO0);
-        }
-
-#ifndef AVOID_CPIO
-
-        /* Copy non-shadow CRTC register values to the shadow set */
-        for (Index = 0;  Index < NumberOf(pATIHW->shadow_vga);  Index++)
-            pATIHW->shadow_vga[Index] = pATIHW->crt[Index];
-
-#endif /* AVOID_CPIO */
-
-        pATIHW->shadow_h_total_disp = pATIHW->crtc_h_total_disp;
-        pATIHW->shadow_h_sync_strt_wid = pATIHW->crtc_h_sync_strt_wid;
-        pATIHW->shadow_v_total_disp = pATIHW->crtc_v_total_disp;
-        pATIHW->shadow_v_sync_strt_wid = pATIHW->crtc_v_sync_strt_wid;
-    }
-
-    /* Fill in clock data */
-    if (!ATIClockCalculate(iScreen, pATI, pATIHW, pMode))
-        return FALSE;
-
-    /* Setup ECP clock divider */
-    if (pATI->Chip >= ATI_CHIP_264VT)
-    {
-        if (pATI->Chip <= ATI_CHIP_264VT3)
-            MaxScalerClock = 80000;
-        else if (pATI->Chip <= ATI_CHIP_264GT2C)
-            MaxScalerClock = 100000;
-        else if (pATI->Chip == ATI_CHIP_264GTPRO)
-            MaxScalerClock = 125000;
-        else if (pATI->Chip <= ATI_CHIP_MOBILITY)
-            MaxScalerClock = 135000;
-        else
-            MaxScalerClock = 80000;     /* Conservative */
-        pATIHW->pll_vclk_cntl &= ~PLL_ECP_DIV;
-#ifdef TV_OUT
-	if (pATI->OptionTvOut) {
-	   /* XXX Don't do this for TVOut! */
-	}
-	else
-#endif /* TV_OUT */
-	{
-	   ECPClock = pMode->SynthClock;
-	   for (Index = 0;  (ECPClock > MaxScalerClock) && (Index < 2);  Index++)
-	      ECPClock >>= 1;
-	   pATIHW->pll_vclk_cntl |= SetBits(Index, PLL_ECP_DIV);
-	}
-    }
-    else if (pATI->DAC == ATI_DAC_IBMRGB514)
-    {
-        ATIRGB514Calculate(pATI, pATIHW, pMode);
-    }
-
-    return TRUE;
-}
-
-#ifdef TV_OUT
-
-static void
-ATISetVBEMode
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    if (pATIHW->crtc == ATI_CRTC_MACH64) {
-	int vbemode, modekey;
-
-	/* Find a suitable VESA VBE mode, if one exists */
-	modekey = (pScreenInfo->depth << 16) | 
-	    (pScreenInfo->currentMode->HDisplay);
-
-	switch (modekey) {
-	case (15<<16)|(640):
-	    vbemode = 0x110;
-	    break;
-	case (16<<16)|(640):
-	    vbemode = 0x111;
-	    break;
-#if 0
-	case (24<<16)|(640):
-	    vbemode = 0x112;
-	    break;
-#endif
-	case (15<<16)|(800):
-	    vbemode = 0x113;
-	    break;
-	case (16<<16)|(800):
-	    vbemode = 0x114;
-	    break;
-#if 0
-	case (24<<16)|(800):
-	    vbemode = 0x115;
-	    break;
-#endif
-	case (15<<16)|(1024):
-	    vbemode = 0x116;
-	    break;
-	case (16<<16)|(1024):
-	    vbemode = 0x117;
-	    break;
-#if 0
-	case (24<<16)|(1024):
-	    vbemode = 0x118;
-	    break;
-#endif
-	default:
-	    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-		       "Mode not supported for TV-Out: depth: %d HDisplay: %d\n", 
-		       modekey>>16, modekey & 0xffff);
-	    return;
-	}
-
-	if (pATI->pVBE) {
-
-            /* Preserve video memory contents */
-            vbemode |= (1<<15);
-
-	    if (VBESetVBEMode(pATI->pVBE, vbemode, NULL)) {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 
-			   "VBESetMode: 0x%X (width: %d, pitch: %d, depth: %d)\n",
-			   vbemode, 
-			   pScreenInfo->currentMode->HDisplay,     
-			   pScreenInfo->displayWidth,
-			   pScreenInfo->depth);
-		outr(CRTC_OFF_PITCH,
-		     SetBits(pScreenInfo->displayWidth>>3, CRTC_PITCH));
-	    } else {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "VBESetMode failed.\n");
-	    }
-	} else {
-	    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "VBE module not loaded.\n");
-	}
-    } else {
-	/* restore text mode with VBESetMode */
-	if (pATI->pVBE) {
-	    if (VBESetVBEMode(pATI->pVBE, pATI->vbemode, NULL)) {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Restoring VESA mode: 0x%x\n", 
-			   pATI->vbemode);
-	    } else {
-	        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "VBESetMode failed.\n");
-	    }
-	} else {
-	    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "VBE module not loaded.\n");
-	}
-    }
-    if (xf86ServerIsExiting()) {
-	if (pATI->pVBE) vbeFree(pATI->pVBE);
-	if (pATI->pInt10) xf86FreeInt10(pATI->pInt10);
-    }
-}
-
-#endif /* TV_OUT */
-
-/*
- * ATIModeSet --
- *
- * This function sets a video mode.  It writes out all video state data that
- * has been previously calculated or saved.
- */
-void
-ATIModeSet
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-
-#ifndef AVOID_CPIO
-
-    int Index;
-
-    /* Get back to bank 0 */
-    (*pATIHW->SetBank)(pATI, 0);
-
-#endif /* AVOID_CPIO */
-
-    {
-        /* Stop CRTC */
-        outr(CRTC_GEN_CNTL,
-            pATIHW->crtc_gen_cntl & ~(CRTC_EXT_DISP_EN | CRTC_EN));
-
-        if (pATI->Chip >= ATI_CHIP_264CT)
-        {
-            ATIMach64PutPLLReg(PLL_VCLK_CNTL, pATIHW->pll_vclk_cntl);
-            ATIMach64PutPLLReg(PLL_VCLK_POST_DIV, pATIHW->pll_vclk_post_div);
-            ATIMach64PutPLLReg(PLL_VCLK0_FB_DIV, pATIHW->pll_vclk0_fb_div);
-            ATIMach64PutPLLReg(PLL_VCLK1_FB_DIV, pATIHW->pll_vclk1_fb_div);
-            ATIMach64PutPLLReg(PLL_VCLK2_FB_DIV, pATIHW->pll_vclk2_fb_div);
-            ATIMach64PutPLLReg(PLL_VCLK3_FB_DIV, pATIHW->pll_vclk3_fb_div);
-            ATIMach64PutPLLReg(PLL_XCLK_CNTL, pATIHW->pll_xclk_cntl);
-            if (pATI->Chip >= ATI_CHIP_264LT)
-                ATIMach64PutPLLReg(PLL_EXT_VPLL_CNTL,
-                    pATIHW->pll_ext_vpll_cntl);
-            ATIMach64PutPLLReg(PLL_VCLK_CNTL,
-                pATIHW->pll_vclk_cntl & ~PLL_VCLK_RESET);
-
-            /* Load LCD registers */
-            if (pATI->LCDPanelID >= 0)
-            {
-                if (pATI->Chip == ATI_CHIP_264LT)
-                {
-                    /* Update non-shadow registers first */
-                    outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl & ~SHADOW_RW_EN);
-
-                    /* Temporarily disable stretching */
-                    outr(HORZ_STRETCHING, pATIHW->horz_stretching &
-                        ~(HORZ_STRETCH_MODE | HORZ_STRETCH_EN));
-                    outr(VERT_STRETCHING, pATIHW->vert_stretching &
-                        ~(VERT_STRETCH_RATIO1 | VERT_STRETCH_RATIO2 |
-                          VERT_STRETCH_USE0 | VERT_STRETCH_EN));
-                }
-                else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                            (pATI->Chip == ATI_CHIP_264XL) ||
-                            (pATI->Chip == ATI_CHIP_MOBILITY)) */
-                {
-                    /* Update non-shadow registers first */
-                    ATIMach64PutLCDReg(LCD_CONFIG_PANEL, pATIHW->config_panel);
-                    ATIMach64PutLCDReg(LCD_GEN_CNTL, pATIHW->lcd_gen_ctrl &
-                        ~(CRTC_RW_SELECT | SHADOW_RW_EN));
-
-                    /* Temporarily disable stretching */
-                    ATIMach64PutLCDReg(LCD_HORZ_STRETCHING,
-                        pATIHW->horz_stretching &
-                        ~(HORZ_STRETCH_MODE | HORZ_STRETCH_EN));
-                    ATIMach64PutLCDReg(LCD_VERT_STRETCHING,
-                        pATIHW->vert_stretching &
-                        ~(VERT_STRETCH_RATIO1 | VERT_STRETCH_RATIO2 |
-                          VERT_STRETCH_USE0 | VERT_STRETCH_EN));
-                }
-            }
-        }
-    }
-
-    switch (pATIHW->crtc)
-    {
-
-#ifndef AVOID_CPIO
-
-        case ATI_CRTC_VGA:
-            /* Start sequencer reset */
-            PutReg(SEQX, 0x00U, 0x00U);
-
-            /* Set pixel clock */
-            if ((pATIHW->FeedbackDivider > 0))
-                ATIClockSet(pATI, pATIHW);
-
-            /* Set up RAMDAC */
-            if (pATI->DAC == ATI_DAC_IBMRGB514)
-                ATIRGB514Set(pATI, pATIHW);
-
-            /* Load VGA Wonder */
-            if (pATI->CPIO_VGAWonder)
-                ATIVGAWonderSet(pATI, pATIHW);
-
-            /* Load VGA device */
-            ATIVGASet(pATI, pATIHW);
-
-            /* Load Mach64 registers */
-            {
-                /* Load MMIO registers */
-                if (pATI->Block0Base)
-                    ATIMach64Set(pATI, pATIHW);
-
-                outr(CRTC_GEN_CNTL, pATIHW->crtc_gen_cntl);
-                outr(CUR_CLR0, pATIHW->cur_clr0);
-                outr(CUR_CLR1, pATIHW->cur_clr1);
-                outr(CUR_OFFSET, pATIHW->cur_offset);
-                outr(CUR_HORZ_VERT_POSN, pATIHW->cur_horz_vert_posn);
-                outr(CUR_HORZ_VERT_OFF, pATIHW->cur_horz_vert_off);
-                outr(BUS_CNTL, pATIHW->bus_cntl);
-                outr(MEM_VGA_WP_SEL, pATIHW->mem_vga_wp_sel);
-                outr(MEM_VGA_RP_SEL, pATIHW->mem_vga_rp_sel);
-                outr(DAC_CNTL, pATIHW->dac_cntl);
-                outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl | GEN_GUI_EN);
-                outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl);
-                outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl | GEN_GUI_EN);
-                outr(CONFIG_CNTL, pATIHW->config_cntl);
-                if (pATI->Chip >= ATI_CHIP_264CT)
-                {
-                    outr(CRTC_H_TOTAL_DISP, pATIHW->crtc_h_total_disp);
-                    outr(CRTC_H_SYNC_STRT_WID, pATIHW->crtc_h_sync_strt_wid);
-                    outr(CRTC_V_TOTAL_DISP, pATIHW->crtc_v_total_disp);
-                    outr(CRTC_V_SYNC_STRT_WID, pATIHW->crtc_v_sync_strt_wid);
-                    outr(CRTC_OFF_PITCH, pATIHW->crtc_off_pitch);
-                    if (pATI->Chip >= ATI_CHIP_264VTB)
-                    {
-                        outr(MEM_CNTL, pATIHW->mem_cntl);
-                        outr(MPP_CONFIG, pATIHW->mpp_config);
-                        outr(MPP_STROBE_SEQ, pATIHW->mpp_strobe_seq);
-                        outr(TVO_CNTL, pATIHW->tvo_cntl);
-                    }
-                }
-            }
-
-            break;
-
-#endif /* AVOID_CPIO */
-
-        case ATI_CRTC_MACH64:
-            /* Load Mach64 CRTC registers */
-            ATIMach64Set(pATI, pATIHW);
-
-#ifndef AVOID_CPIO
-
-            if (pATI->VGAAdapter)
-            {
-                /* Oddly enough, these need to be set also, maybe others */
-                PutReg(SEQX, 0x02U, pATIHW->seq[2]);
-                PutReg(SEQX, 0x04U, pATIHW->seq[4]);
-                PutReg(GRAX, 0x06U, pATIHW->gra[6]);
-                if (pATI->CPIO_VGAWonder)
-                    ATIModifyExtReg(pATI, 0xB6U, -1, 0x00U, pATIHW->b6);
-            }
-
-#endif /* AVOID_CPIO */
-
-            break;
-
-        default:
-            break;
-    }
-
-    if (pATI->LCDPanelID >= 0)
-    {
-        /* Switch to shadow registers */
-        if (pATI->Chip == ATI_CHIP_264LT)
-            outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl | SHADOW_RW_EN);
-        else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                    (pATI->Chip == ATI_CHIP_264XL) ||
-                    (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            ATIMach64PutLCDReg(LCD_GEN_CNTL,
-                (pATIHW->lcd_gen_ctrl & ~CRTC_RW_SELECT) | SHADOW_RW_EN);
-
-        /* Restore shadow registers */
-        switch (pATIHW->crtc)
-        {
-
-#ifndef AVOID_CPIO
-
-            case ATI_CRTC_VGA:
-                for (Index = 0;
-                     Index < NumberOf(pATIHW->shadow_vga);
-                     Index++)
-                    PutReg(CRTX(pATI->CPIO_VGABase), Index,
-                        pATIHW->shadow_vga[Index]);
-                /* Fall through */
-
-#endif /* AVOID_CPIO */
-
-            case ATI_CRTC_MACH64:
-                outr(CRTC_H_TOTAL_DISP, pATIHW->shadow_h_total_disp);
-                outr(CRTC_H_SYNC_STRT_WID, pATIHW->shadow_h_sync_strt_wid);
-                outr(CRTC_V_TOTAL_DISP, pATIHW->shadow_v_total_disp);
-                outr(CRTC_V_SYNC_STRT_WID, pATIHW->shadow_v_sync_strt_wid);
-                break;
-
-            default:
-                break;
-        }
-
-        /* Restore CRTC selection & shadow state and enable stretching */
-        if (pATI->Chip == ATI_CHIP_264LT)
-        {
-            outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl);
-            outr(HORZ_STRETCHING, pATIHW->horz_stretching);
-            outr(VERT_STRETCHING, pATIHW->vert_stretching);
-        }
-        else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                    (pATI->Chip == ATI_CHIP_264XL) ||
-                    (pATI->Chip == ATI_CHIP_MOBILITY)) */
-        {
-            ATIMach64PutLCDReg(LCD_GEN_CNTL, pATIHW->lcd_gen_ctrl);
-            ATIMach64PutLCDReg(LCD_HORZ_STRETCHING, pATIHW->horz_stretching);
-            ATIMach64PutLCDReg(LCD_VERT_STRETCHING, pATIHW->vert_stretching);
-            ATIMach64PutLCDReg(LCD_EXT_VERT_STRETCH, pATIHW->ext_vert_stretch);
-            outr(LCD_INDEX, pATIHW->lcd_index);
-        }
-    }
-
-    /*
-     * Set DSP registers.  Note that, for some reason, sequencer resets clear
-     * the DSP_CONFIG register on early integrated controllers.
-     */
-    if (pATI->Chip >= ATI_CHIP_264VTB)
-        ATIDSPSet(pATI, pATIHW);
-
-    /* Load RAMDAC */
-    ATIDACSet(pATI, pATIHW);
-
-    /* Reset hardware cursor caching */
-    pATI->CursorXOffset = pATI->CursorYOffset = (CARD16)(-1);
-
-#ifdef TV_OUT
-
-    /* Set VBE mode for TV-Out */
-    if (pATI->OptionTvOut /* && pATI->tvActive */)
-	ATISetVBEMode(pScreenInfo, pATI, pATIHW);
-
-#endif /* TV_OUT */
-
-#ifndef AVOID_CPIO
-
-    /* Restore video memory */
-    ATISwap(pScreenInfo->scrnIndex, pATI, pATIHW, TRUE);
-
-    if (pATI->VGAAdapter)
-        ATIVGASaveScreen(pATI, SCREEN_SAVER_OFF);       /* Turn on screen */
-
-#endif /* AVOID_CPIO */
-
-    if ((xf86GetVerbosity() > 3) && (pATIHW == &pATI->NewHW))
-    {
-        xf86ErrorFVerb(4, "\n After setting mode \"%s\":\n\n",
-            pScreenInfo->currentMode->name);
-        ATIPrintMode(pScreenInfo->currentMode);
-        ATIPrintRegisters(pATI);
-    }
-}
diff --git a/src/atimode.h b/src/atimode.h
deleted file mode 100644
index 8d8f876..0000000
--- a/src/atimode.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIMODE_H___
-#define ___ATIMODE_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-extern void ATIModePreInit(ScrnInfoPtr, ATIPtr, ATIHWPtr);
-extern void ATIModeSave(ScrnInfoPtr, ATIPtr, ATIHWPtr);
-extern Bool ATIModeCalculate(int, ATIPtr, ATIHWPtr, DisplayModePtr);
-extern void ATIModeSet(ScrnInfoPtr, ATIPtr, ATIHWPtr);
-
-#endif /* ___ATIMODE_H___ */
diff --git a/src/atioption.h b/src/atioption.h
deleted file mode 100644
index 37303ef..0000000
--- a/src/atioption.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright 1999 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * DRI support by:
- *    Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifndef ___ATIOPTION_H___
-#define ___ATIOPTION_H___ 1
-
-#include "xf86str.h"
-
-/*
- * Documented XF86Config options.
- */
-typedef enum
-{
-    ATI_OPTION_PROBE_SPARSE,
-    ATI_OPTION_ACCEL,
-    ATI_OPTION_CRT_DISPLAY,
-    ATI_OPTION_CSYNC,
-    ATI_OPTION_HWCURSOR,
-
-#ifdef XF86DRI_DEVEL
-
-    ATI_OPTION_IS_PCI,
-    ATI_OPTION_DMA_MODE,
-    ATI_OPTION_AGP_MODE,
-    ATI_OPTION_AGP_SIZE,
-    ATI_OPTION_LOCAL_TEXTURES,
-    ATI_OPTION_BUFFER_SIZE,
-
-#endif /* XF86DRI_DEVEL */
-
-#ifdef TV_OUT
-
-    ATI_OPTION_TV_OUT,
-    ATI_OPTION_TV_STD,
-
-#endif /* TV_OUT */
-
-    ATI_OPTION_MMIO_CACHE,
-    ATI_OPTION_TEST_MMIO_CACHE,
-    ATI_OPTION_PANEL_DISPLAY,
-    ATI_OPTION_REFERENCE_CLOCK,
-    ATI_OPTION_SHADOW_FB,
-    ATI_OPTION_SWCURSOR,
-    ATI_OPTION_ACCELMETHOD,
-    ATI_OPTION_RENDER_ACCEL
-} ATIPublicOptionType;
-
-#ifdef TV_OUT
-
-#define ATI_TV_STDS_MAX_VALID   11
-#define ATI_TV_STDS_NAME_MAXLEN 9
-
-typedef enum {
-    ATI_TV_STD_NTSC = 0,
-    ATI_TV_STD_PAL,
-    ATI_TV_STD_PALM,
-    ATI_TV_STD_PAL60,
-    ATI_TV_STD_NTSCJ,
-    ATI_TV_STD_PALCN,
-    ATI_TV_STD_PALN,
-    ATI_TV_STD_RESERVED1, /* NOT usable */
-    ATI_TV_STD_RESERVED2, /* NOT usable */
-    ATI_TV_STD_SCARTPAL,
-    ATI_TV_STD_NONE,      /* OK, means no tv standard change requested */
-    ATI_TV_STD_INVALID    /* Invalid tv standard requested */
-} ATITVStandard;
-
-extern const char          * ATITVStandardNames[];
-
-#endif /* TV_OUT */
-
-extern const OptionInfoRec * ATIOptionsWeak(void);
-
-extern void                  ATIProcessOptions(ScrnInfoPtr, ATIPtr);
-
-#endif /* ___ATIOPTION_H___ */
diff --git a/src/atipreinit.c b/src/atipreinit.c
deleted file mode 100644
index f89f5b7..0000000
--- a/src/atipreinit.c
+++ /dev/null
@@ -1,2509 +0,0 @@
-/*
- * Copyright 1999 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <stdio.h>
-
-#include "ati.h"
-#include "atiadjust.h"
-#include "atiaudio.h"
-#include "atibus.h"
-#include "atichip.h"
-#include "aticursor.h"
-#include "atidac.h"
-#include "atidsp.h"
-#include "atii2c.h"
-#include "atiload.h"
-#include "atilock.h"
-#include "atimach64.h"
-#include "atimach64accel.h"
-#include "atimach64io.h"
-#include "atimach64probe.h"
-#include "atimode.h"
-#include "atioption.h"
-#include "atipreinit.h"
-#include "atiprint.h"
-#include "atiprobe.h"
-#include "atividmem.h"
-#include "atiwonderio.h"
-#include "atixv.h"
-
-#include "vbe.h"
-#include "xf86RAC.h"
-
-/*
- * FreeScreen handles the clean-up.
- */
-static Bool
-Mach64GetRec(ScrnInfoPtr pScrn)
-{
-    if (!pScrn->driverPrivate) {
-        pScrn->driverPrivate = xnfcalloc(sizeof(ATIRec), 1);
-        memset(pScrn->driverPrivate, 0, sizeof(ATIRec));
-    }
-
-    return TRUE;
-}
-
-/*
- * ATIReportMemory --
- *
- * This function reports on the amount and type of video memory found.
- */
-static void
-ATIReportMemory
-(
-    ScrnInfoPtr pScreenInfo,
-    ATIPtr      pATI,
-    const char *MemoryTypeName
-)
-{
-    char Buffer[128], *Message;
-
-    Message = Buffer +
-        snprintf(Buffer, SizeOf(Buffer), "%d kB of %s detected",
-            pATI->VideoRAM, MemoryTypeName);
-
-    if (pATI->VideoRAM > pScreenInfo->videoRam)
-    {
-        Message += snprintf(Message, Buffer + SizeOf(Buffer) - Message,
-            " (using %d kB)", pScreenInfo->videoRam);
-    }
-    xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED, "%s.\n", Buffer);
-}
-
-static const int videoRamSizes[] =
-    {512, 1024, 2*1024, 4*1024, 6*1024, 8*1024, 12*1024, 16*1024};
-static const rgb   defaultWeight = {0, 0, 0};
-static const Gamma defaultGamma  = {0.0, 0.0, 0.0};
-
-/*
- * ATIPrintNoiseIfRequested --
- *
- * This function formats debugging information on the server's stderr when
- * requested by the user through the server's verbosity setting.
- */
-static void
-ATIPrintNoiseIfRequested
-(
-    ATIPtr       pATI,
-    CARD8       *BIOS,
-    unsigned int BIOSSize
-)
-{
-    if (xf86GetVerbosity() <= 3)
-        return;
-
-    if (BIOSSize > 0)
-        ATIPrintBIOS(BIOS, BIOSSize);
-    xf86ErrorFVerb(4, "\n On server entry:\n");
-    ATIPrintRegisters(pATI);
-}
-
-#define BIOS_SIZE    0x00010000U     /* 64kB */
-#define BIOSByte(_n) ((CARD8)(BIOS[_n]))
-#define BIOSWord(_n) ((CARD16)(BIOS[_n] |                \
-                               (BIOS[(_n) + 1] << 8)))
-
-/*
- * For Mach64 adapters, pick up, from the BIOS, the type of programmable
- * clock generator (if any), and various information about it.
- */
-static void
-ati_bios_clock
-(
-    ScrnInfoPtr  pScreenInfo,
-    ATIPtr       pATI,
-    CARD8       *BIOS,
-    unsigned int ClockTable,
-    GDevPtr      pGDev
-)
-{
-    CARD16 ClockDac;
-
-    if (ClockTable > 0)
-    {
-        pATI->ProgrammableClock = BIOSByte(ClockTable);
-        pATI->ClockNumberToProgramme = BIOSByte(ClockTable + 0x06U);
-        pATI->refclk = BIOSWord(ClockTable + 0x08U);
-        pATI->refclk *= 10000;
-    }
-    else
-    {
-        /*
-         * Compensate for BIOS absence.  Note that the reference
-         * frequency has already been set by option processing.
-         */
-        if ((pATI->DAC & ~0x0FU) == ATI_DAC_INTERNAL)
-        {
-            pATI->ProgrammableClock = ATI_CLOCK_INTERNAL;
-        }
-        else switch (pATI->DAC)
-        {
-            case ATI_DAC_STG1703:
-                pATI->ProgrammableClock = ATI_CLOCK_STG1703;
-                break;
-
-            case ATI_DAC_CH8398:
-                pATI->ProgrammableClock = ATI_CLOCK_CH8398;
-                break;
-
-            case ATI_DAC_ATT20C408:
-                pATI->ProgrammableClock = ATI_CLOCK_ATT20C408;
-                break;
-
-            case ATI_DAC_IBMRGB514:
-                pATI->ProgrammableClock = ATI_CLOCK_IBMRGB514;
-                break;
-
-            default:        /* Provisional */
-                pATI->ProgrammableClock = ATI_CLOCK_ICS2595;
-                break;
-        }
-
-        /* This should be safe for all generators except IBM's RGB514 */
-        pATI->ClockNumberToProgramme = 3;
-    }
-
-    pATI->ClockDescriptor = ATIClockDescriptors[ATI_CLOCK_FIXED];
-
-    if ((pATI->ProgrammableClock > ATI_CLOCK_FIXED) &&
-        (pATI->ProgrammableClock < ATI_CLOCK_MAX))
-    {
-        /*
-         * Graphics PRO TURBO 1600's are unusual in that an ICS2595 is used
-         * to generate clocks for VGA modes, and an IBM RGB514 is used for
-         * accelerator modes.
-         */
-        if ((pATI->ProgrammableClock == ATI_CLOCK_ICS2595) &&
-            (pATI->DAC == ATI_DAC_IBMRGB514))
-            pATI->ProgrammableClock = ATI_CLOCK_IBMRGB514;
-
-        pATI->ClockDescriptor = ATIClockDescriptors[pATI->ProgrammableClock];
-    }
-
-    ClockDac = pATI->DAC;
-    switch (pATI->ProgrammableClock)
-    {
-        case ATI_CLOCK_ICS2595:
-            /*
-             * Pick up reference divider (43 or 46) appropriate to the chip
-             * revision level.
-             */
-            if (ClockTable > 0)
-                pATI->ClockDescriptor.MinM =
-                pATI->ClockDescriptor.MaxM = BIOSWord(ClockTable + 0x0AU);
-            else if (!xf86NameCmp(pGDev->clockchip, "ATI 18818-0"))
-                pATI->ClockDescriptor.MinM =
-                pATI->ClockDescriptor.MaxM = 43;
-            else if (!xf86NameCmp(pGDev->clockchip, "ATI 18818-1"))
-                pATI->ClockDescriptor.MinM =
-                pATI->ClockDescriptor.MaxM = 46;
-            else
-                pATI->ProgrammableClock = ATI_CLOCK_UNKNOWN;
-            break;
-
-        case ATI_CLOCK_STG1703:
-            /* This one's also a RAMDAC */
-            ClockDac = ATI_DAC_STG1703;
-            break;
-
-        case ATI_CLOCK_CH8398:
-            /* This one's also a RAMDAC */
-            ClockDac = ATI_DAC_CH8398;
-            break;
-
-        case ATI_CLOCK_INTERNAL:
-            /*
-             * The reference divider has already been programmed by BIOS
-             * initialisation.  Because, there is only one reference
-             * divider for all generated frequencies (including MCLK), it
-             * cannot be changed without reprogramming all clocks every
-             * time one of them needs a different reference divider.
-             *
-             * Besides, it's not a good idea to change the reference
-             * divider.  BIOS initialisation sets it to a value that
-             * effectively prevents generating frequencies beyond the
-             * graphics controller's tolerance.
-             */
-            pATI->ClockDescriptor.MinM =
-            pATI->ClockDescriptor.MaxM = ATIMach64GetPLLReg(PLL_REF_DIV);
-
-            /* The DAC is also integrated */
-            if ((pATI->DAC & ~0x0FU) != ATI_DAC_INTERNAL)
-                ClockDac = ATI_DAC_INTERNAL;
-
-            break;
-
-        case ATI_CLOCK_ATT20C408:
-            /* This one's also a RAMDAC */
-            ClockDac = ATI_DAC_ATT20C408;
-            break;
-
-        case ATI_CLOCK_IBMRGB514:
-            /* This one's also a RAMDAC */
-            ClockDac = ATI_DAC_IBMRGB514;
-            pATI->ClockNumberToProgramme = 7;
-            break;
-
-        default:
-            break;
-    }
-
-    /*
-     * We now have up to two indications of what RAMDAC the adapter uses.
-     * They should be the same.  The following test and corresponding
-     * action are under construction.
-     */
-    if (pATI->DAC != ClockDac)
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                   "Mach64 RAMDAC probe discrepancy detected:\n"
-                   "  DAC=0x%02X;  ClockDac=0x%02X.\n",
-                   pATI->DAC, ClockDac);
-
-        if (pATI->DAC == ATI_DAC_IBMRGB514)
-        {
-            pATI->ProgrammableClock = ATI_CLOCK_IBMRGB514;
-            pATI->ClockDescriptor = ATIClockDescriptors[ATI_CLOCK_IBMRGB514];
-            pATI->ClockNumberToProgramme = 7;
-        }
-        else
-        {
-            pATI->DAC = ClockDac;   /* For now */
-        }
-    }
-
-    switch (pATI->refclk / 100000)
-    {
-        case 143:
-            pATI->ReferenceNumerator = 157500;
-            pATI->ReferenceDenominator = 11;
-            break;
-
-        case 286:
-            pATI->ReferenceNumerator = 315000;
-            pATI->ReferenceDenominator = 11;
-            break;
-
-        default:
-            pATI->ReferenceNumerator = pATI->refclk / 1000;
-            pATI->ReferenceDenominator = 1;
-            break;
-    }
-}
-
-/*
- * Pick up multimedia information, which will be at different
- * displacements depending on table revision.
- */
-static void
-ati_bios_mmedia
-(
-    ScrnInfoPtr  pScreenInfo,
-    ATIPtr       pATI,
-    CARD8       *BIOS,
-    unsigned int VideoTable,
-    unsigned int HardwareTable
-)
-{
-    pATI->Audio = ATI_AUDIO_NONE;
-
-    if (VideoTable > 0)
-    {
-        switch (BIOSByte(VideoTable - 0x02U))
-        {
-            case 0x00U:
-                pATI->Tuner = BIOSByte(VideoTable) & 0x1FU;
-
-                /*
-                 * XXX  The VideoTable[1] byte is known to have been
-                 *      omitted in LTPro and Mobility BIOS'es.  Any others?
-                 */
-                switch (pATI->Chip)
-                {
-                    case ATI_CHIP_264LTPRO:
-                    case ATI_CHIP_MOBILITY:
-                        pATI->Decoder = BIOSByte(VideoTable + 0x01U) & 0x07U;
-                        pATI->Audio = BIOSByte(VideoTable + 0x02U) & 0x0FU;
-                        break;
-
-                    default:
-                        pATI->Decoder = BIOSByte(VideoTable + 0x02U) & 0x07U;
-                        pATI->Audio = BIOSByte(VideoTable + 0x03U) & 0x0FU;
-                        break;
-                }
-
-                break;
-
-            case 0x01U:
-                pATI->Tuner = BIOSByte(VideoTable) & 0x1FU;
-                pATI->Audio = BIOSByte(VideoTable + 0x01U) & 0x0FU;
-                pATI->Decoder = BIOSByte(VideoTable + 0x05U) & 0x0FU;
-                break;
-
-            default:
-                break;
-        }
-    }
-
-    if (HardwareTable > 0)
-    {
-        pATI->I2CType = BIOSByte(HardwareTable + 0x06U) & 0x0FU;
-    }
-}
-
-/*
- * Determine panel dimensions and model.
- */
-static void
-ati_bios_panel_info
-(
-    ScrnInfoPtr  pScreenInfo,
-    ATIPtr       pATI,
-    CARD8       *BIOS,
-    unsigned int BIOSSize,
-    unsigned int LCDTable
-)
-{
-    unsigned int LCDPanelInfo = 0;
-    char         Buffer[128];
-    int          i, j;
-
-    if (LCDTable > 0)
-    {
-        LCDPanelInfo = BIOSWord(LCDTable + 0x0AU);
-        if (((LCDPanelInfo + 0x1DU) > BIOSSize) ||
-            ((BIOSByte(LCDPanelInfo) != pATI->LCDPanelID) &&
-             (pATI->LCDPanelID || (BIOSByte(LCDPanelInfo) > 0x1FU) ||
-              (pATI->Chip <= ATI_CHIP_264LTPRO))))
-            LCDPanelInfo = 0;
-    }
-
-    if (!LCDPanelInfo)
-    {
-        /*
-         * Scan BIOS for panel info table.
-         */
-        for (i = 0;  i <= (int)(BIOSSize - 0x1DU);  i++)
-        {
-            /* Look for panel ID ... */
-            if ((BIOSByte(i) != pATI->LCDPanelID) &&
-                (pATI->LCDPanelID || (BIOSByte(i) > 0x1FU) ||
-                 (pATI->Chip <= ATI_CHIP_264LTPRO)))
-                continue;
-
-            /* ... followed by 24-byte panel model name ... */
-            for (j = 0;  j < 24;  j++)
-            {
-                if ((CARD8)(BIOSByte(i + j + 1) - 0x20U) > 0x5FU)
-                {
-                    i += j;
-                    goto NextBIOSByte;
-                }
-            }
-
-            /* ... verify panel width ... */
-            if (pATI->LCDHorizontal &&
-                (pATI->LCDHorizontal != BIOSWord(i + 0x19U)))
-                continue;
-
-            /* ... and verify panel height */
-            if (pATI->LCDVertical &&
-                (pATI->LCDVertical != BIOSWord(i + 0x1BU)))
-                continue;
-
-            if (LCDPanelInfo)
-            {
-                /*
-                 * More than one possibility, but don't care if all
-                 * tables describe panels of the same size.
-                 */
-                if ((BIOSByte(LCDPanelInfo + 0x19U) ==
-                     BIOSByte(i + 0x19U)) &&
-                    (BIOSByte(LCDPanelInfo + 0x1AU) ==
-                     BIOSByte(i + 0x1AU)) &&
-                    (BIOSByte(LCDPanelInfo + 0x1BU) ==
-                     BIOSByte(i + 0x1BU)) &&
-                    (BIOSByte(LCDPanelInfo + 0x1CU) ==
-                     BIOSByte(i + 0x1CU)))
-                    continue;
-
-                LCDPanelInfo = 0;
-                break;
-            }
-
-            LCDPanelInfo = i;
-
-    NextBIOSByte:  ;
-        }
-    }
-
-    if (LCDPanelInfo > 0)
-    {
-        pATI->LCDPanelID = BIOSByte(LCDPanelInfo);
-        pATI->LCDHorizontal = BIOSWord(LCDPanelInfo + 0x19U);
-        pATI->LCDVertical = BIOSWord(LCDPanelInfo + 0x1BU);
-    }
-
-    if (LCDPanelInfo)
-    {
-        for (i = 0;  i < 24;  i++)
-            Buffer[i] = BIOSByte(LCDPanelInfo + 1 + i);
-        for (;  --i >= 0;  )
-            if (Buffer[i] && Buffer[i] != ' ')
-            {
-                Buffer[i + 1] = '\0';
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-                    "Panel model %s.\n", Buffer);
-                break;
-            }
-    }
-}
-
-/*
- * ATIPreInit --
- *
- * This function is only called once per screen at the start of the first
- * server generation.
- */
-Bool
-ATIPreInit
-(
-    ScrnInfoPtr pScreenInfo,
-    int flags
-)
-{
-    CARD8            BIOS[BIOS_SIZE];
-    unsigned int     BIOSSize = 0;
-    unsigned int     ROMTable = 0, ClockTable = 0, FrequencyTable = 0;
-    unsigned int     LCDTable = 0, VideoTable = 0;
-    unsigned int     HardwareTable = 0;
-
-    char             Buffer[128], *Message;
-    ATIPtr           pATI;
-    GDevPtr          pGDev;
-    EntityInfoPtr    pEntity;
-    resPtr           pResources;
-    pciVideoPtr      pVideo;
-    DisplayModePtr   pMode;
-    CARD32           IOValue;
-    int              i, j;
-    int              Numerator, Denominator;
-    int              MinX, MinY;
-    ClockRange       ATIClockRange = {NULL, 0, 80000, -1, TRUE, TRUE, 1, 1, 0};
-    int              DefaultmaxClock = 0;
-    int              minPitch, maxPitch = 0xFFU, pitchInc, maxHeight = 0;
-    int              ApertureSize = 0x00010000U;
-    int              ModeType = M_T_BUILTIN;
-    LookupModeFlags  Strategy = LOOKUP_CLOSEST_CLOCK;
-    int              DefaultDepth;
-    Bool             PreInitSuccess = FALSE;
-
-#   define           pATIHW     (&pATI->OldHW)
-
-#ifndef AVOID_CPIO
-
-    xf86Int10InfoPtr pInt10Info = NULL;
-    vbeInfoPtr       pVBE = NULL;
-    pointer          pInt10Module, pDDCModule = NULL, pVBEModule = NULL;
-
-#endif /* AVOID_CPIO */
-
-    if (pScreenInfo->numEntities != 1)
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-            "Logic error:  Number of attached entities not 1.\n");
-        return FALSE;
-    }
-
-    if (!Mach64GetRec(pScreenInfo))
-        return FALSE;
-
-    pATI = ATIPTR(pScreenInfo);
-
-    /* Register resources */
-    pEntity = xf86GetEntityInfo(pScreenInfo->entityList[0]);
-    pGDev = pEntity->device;
-    pResources = pEntity->resources;
-
-    pATI->iEntity = pEntity->index;
-    pATI->Chip = pEntity->chipset;
-    pVideo = xf86GetPciInfoForEntity(pATI->iEntity);
-
-    xfree(pEntity);
-
-    if (!pResources)
-        pResources = xf86RegisterResources(pATI->iEntity, NULL, ResShared);
-    if (pResources)
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-            "Unable to register the following bus resources:\n");
-        xf86PrintResList(0, pResources);
-        xf86FreeResList(pResources);
-        return FALSE;
-    }
-
-    ConfiguredMonitor = NULL;
-    (void)memset(BIOS, 0, SizeOf(BIOS));
-
-    if (!(flags & PROBE_DETECT))
-    {
-        /* Set monitor */
-        pScreenInfo->monitor = pScreenInfo->confScreen->monitor;
-
-        /* Set depth, bpp, etc. */
-        if ((pATI->Chip < ATI_CHIP_264CT))
-        {
-            i = NoDepth24Support;       /* No support for >8bpp either */
-            DefaultDepth = 8;
-        }
-        else
-        {
-            i = Support24bppFb | Support32bppFb;
-            DefaultDepth = 0;
-        }
-
-        if (!xf86SetDepthBpp(pScreenInfo, DefaultDepth, 0, 0, i))
-            return FALSE;
-
-        for (j = 0;  ;  j++)
-        {
-            static const CARD8 AllowedDepthBpp[][2] =
-            {
-                { 8,  8},
-                {15, 16},
-                {16, 16},
-                {24, 24},
-                {24, 32}
-            };
-
-            if (j < NumberOf(AllowedDepthBpp))
-            {
-                if (pScreenInfo->depth > AllowedDepthBpp[j][0])
-                    continue;
-
-                if (pScreenInfo->depth == AllowedDepthBpp[j][0])
-                {
-                    if (pScreenInfo->bitsPerPixel > AllowedDepthBpp[j][1])
-                        continue;
-
-                    if (pScreenInfo->bitsPerPixel == AllowedDepthBpp[j][1])
-                        break;
-                }
-            }
-
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-                "Driver does not support depth %d at fbbpp %d.\n",
-                pScreenInfo->depth, pScreenInfo->bitsPerPixel);
-            return FALSE;
-        }
-
-        xf86PrintDepthBpp(pScreenInfo);
-
-        if ((i == NoDepth24Support) && (pScreenInfo->depth > 8))
-        {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-                "Depth %d is not supported through this adapter.\n",
-                pScreenInfo->depth);
-            return FALSE;
-        }
-
-        /* Pick up XF86Config options */
-        ATIProcessOptions(pScreenInfo, pATI);
-    }
-
-    if (!ATIMach64ProbeIO(pVideo, pATI))
-        return FALSE;
-
-    ATIClaimBusSlot(pGDev->active, pATI);
-
-#ifndef AVOID_CPIO
-
-#ifdef TV_OUT
-
-    pATI->pVBE = NULL;
-    pATI->pInt10 = NULL;
-
-#endif /* TV_OUT */
-
-    /*
-     * If there is an ix86-style BIOS, ensure its initialisation entry point
-     * has been executed, and retrieve DDC and VBE information from it.
-     */
-    if (!(pInt10Module = xf86LoadSubModule(pScreenInfo, "int10")))
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-            "Unable to load int10 module.\n");
-    }
-    else if (!(pInt10Info = xf86InitInt10(pATI->iEntity)))
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-             "Unable to initialise int10 interface.\n");
-    }
-    else
-    {
-        if (!(pDDCModule = xf86LoadSubModule(pScreenInfo, "ddc")))
-        {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "Unable to load ddc module.\n");
-        }
-        else
-        if (!(pVBEModule = xf86LoadSubModule(pScreenInfo, "vbe")))
-        {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "Unable to load vbe module.\n");
-        }
-        else
-        {
-            if ((pVBE = VBEInit(pInt10Info, pATI->iEntity)))
-            {
-                ConfiguredMonitor = vbeDoEDID(pVBE, pDDCModule);
-            }
-        }
-
-        if (!(flags & PROBE_DETECT))
-        {
-            /* Validate, then make a private copy of, the initialised BIOS */
-            CARD8 *pBIOS = xf86int10Addr(pInt10Info, pInt10Info->BIOSseg << 4);
-
-            if ((pBIOS[0] != 0x55U) || (pBIOS[1] != 0xAAU) || !pBIOS[2])
-            {
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                    "Unable to correctly retrieve adapter BIOS.\n");
-            }
-            else
-            {
-                BIOSSize = pBIOS[2] << 9;
-                if (BIOSSize > BIOS_SIZE)
-                    BIOSSize = BIOS_SIZE;
-                (void)memcpy(BIOS, pBIOS, BIOSSize);
-            }
-        }
-    }
-
-#ifndef TV_OUT
-    /* De-activate VBE */
-    vbeFree(pVBE);
-    xf86UnloadSubModule(pVBEModule);
-
-    /* De-activate int10 */
-    xf86FreeInt10(pInt10Info);
-    xf86UnloadSubModule(pInt10Module);
-#else
-    pATI->pInt10 = pInt10Info;
-    pATI->pVBE = pVBE;
-    pVBE = NULL;
-    pInt10Info = NULL;
-#endif /* TV_OUT */
-
-    if (ConfiguredMonitor && !(flags & PROBE_DETECT))
-    {
-        xf86PrintEDID(ConfiguredMonitor);
-        xf86SetDDCproperties(pScreenInfo, ConfiguredMonitor);
-    }
-
-    /* DDC module is no longer needed at this point */
-    xf86UnloadSubModule(pDDCModule);
-
-#endif /* AVOID_CPIO */
-
-    if (flags & PROBE_DETECT)
-    {
-        return TRUE;
-    }
-
-#ifndef AVOID_CPIO
-
-    /* I/O bases might no longer be valid after BIOS initialisation */
-    {
-        if (pATI->CPIODecoding == BLOCK_IO)
-            pATI->CPIOBase = PCI_REGION_BASE(pVideo, 1, REGION_IO);
-
-        pATI->MMIOInLinear = FALSE;
-
-        /* Set MMIO address from PCI configuration space, if available */
-        if ((pATI->Block0Base = PCI_REGION_BASE(pVideo, 2, REGION_MEM)))
-        {
-            pATI->Block0Base += 0x0400U;
-        }
-    }
-
-#endif /* AVOID_CPIO */
-
-#ifdef AVOID_CPIO
-
-    pScreenInfo->racMemFlags =
-        RAC_FB | RAC_COLORMAP | RAC_VIEWPORT | RAC_CURSOR;
-
-#else /* AVOID_CPIO */
-
-    pScreenInfo->racIoFlags =
-        RAC_FB | RAC_COLORMAP | RAC_VIEWPORT | RAC_CURSOR;
-    pScreenInfo->racMemFlags = RAC_FB | RAC_CURSOR;
-
-#endif /* AVOID_CPIO */
-
-    /* Finish private area initialisation */
-    pATI->nFIFOEntries = 16;                    /* For now */
-
-    /* Finish probing the adapter */
-    {
-        /*
-         * For MMIO register access, the MMIO address is computed when probing
-         * and there are no BIOS calls. This mapping should always succeed.
-         *
-         * For CPIO register access, the MMIO address is computed above in the
-         * presence of an auxiliary aperture. Otherwise, it is set to zero and
-         * gets computed when we read the linear aperture configuration. This
-         * mapping is either irrelevant or a no-op.
-         */
-        if (!ATIMapApertures(pScreenInfo->scrnIndex, pATI))
-            return FALSE;
-
-#ifdef AVOID_CPIO
-
-            if (!pATI->pBlock[0])
-            {
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-                    "Unable to mmap() adapter registers.\n");
-                return FALSE;
-            }
-
-#endif /* AVOID_CPIO */
-
-            /*
-             * Verify register access by comparing against the CONFIG_CHIP_ID
-             * value saved by adapter detection.
-             */
-            if (pATI->config_chip_id != inr(CONFIG_CHIP_ID))
-            {
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-                    "Adapter registers not mapped correctly.\n");
-                ATIUnmapApertures(pScreenInfo->scrnIndex, pATI);
-                return FALSE;
-            }
-
-            pATIHW->crtc_gen_cntl = inr(CRTC_GEN_CNTL);
-            if (!(pATIHW->crtc_gen_cntl & CRTC_EN) &&
-                (pATI->Chip >= ATI_CHIP_264CT))
-            {
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-                    "Adapter has not been initialised.\n");
-                goto bail_locked;
-            }
-
-#ifdef AVOID_CPIO
-
-            if (!(pATIHW->crtc_gen_cntl & CRTC_EXT_DISP_EN))
-            {
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-                    "Adapters found to be in VGA mode on server entry are not"
-                    " supported by the MMIO-only version of this driver.\n");
-                goto bail_locked;
-            }
-
-#endif /* AVOID_CPIO */
-
-            pATIHW->mem_cntl = inr(MEM_CNTL);
-            if (pATI->Chip < ATI_CHIP_264VTB)
-            {
-                IOValue = GetBits(pATIHW->mem_cntl, CTL_MEM_SIZE);
-                pATI->VideoRAM = videoRamSizes[IOValue];
-            }
-            else
-            {
-                pATI->nFIFOEntries =            /* Don't care */
-                    (unsigned int)(-1) >> 1;
-
-                IOValue = GetBits(pATIHW->mem_cntl, CTL_MEM_SIZEB);
-                if (IOValue < 8)
-                    pATI->VideoRAM = (IOValue + 1) * 512;
-                else if (IOValue < 12)
-                    pATI->VideoRAM = (IOValue - 3) * 1024;
-                else
-                    pATI->VideoRAM = (IOValue - 7) * 2048;
-            }
-
-            IOValue = inr(CONFIG_STATUS64_0);
-            if (pATI->Chip >= ATI_CHIP_264CT)
-            {
-                pATI->MemoryType = GetBits(IOValue, CFG_MEM_TYPE_T);
-            }
-            else
-            {
-                pATI->MemoryType = GetBits(IOValue, CFG_MEM_TYPE);
-            }
-
-            pATI->LCDPanelID = -1;
-
-            if (pATI->Chip >= ATI_CHIP_264CT)
-            {
-                /* Get LCD panel id */
-                if (pATI->Chip == ATI_CHIP_264LT)
-                {
-                    pATI->LCDPanelID = GetBits(IOValue, CFG_PANEL_ID);
-
-                    pATIHW->horz_stretching = inr(HORZ_STRETCHING);
-                    pATIHW->vert_stretching = inr(VERT_STRETCHING);
-                    pATIHW->lcd_gen_ctrl = inr(LCD_GEN_CTRL);
-                }
-                else if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                         (pATI->Chip == ATI_CHIP_264XL) ||
-                         (pATI->Chip == ATI_CHIP_MOBILITY))
-                {
-                    pATI->LCDPanelID = GetBits(IOValue, CFG_PANEL_ID);
-
-                    pATIHW->lcd_index = inr(LCD_INDEX);
-                    pATIHW->horz_stretching =
-                        ATIMach64GetLCDReg(LCD_HORZ_STRETCHING);
-                    pATI->LCDHorizontal =
-                        GetBits(pATIHW->horz_stretching, HORZ_PANEL_SIZE);
-                    if (pATI->LCDHorizontal)
-                    {
-                        if (pATI->LCDHorizontal == MaxBits(HORZ_PANEL_SIZE))
-                            pATI->LCDHorizontal = 0;
-                        else
-                            pATI->LCDHorizontal =
-                                (pATI->LCDHorizontal + 1) << 3;
-                    }
-                    pATIHW->ext_vert_stretch =
-                        ATIMach64GetLCDReg(LCD_EXT_VERT_STRETCH);
-                    pATI->LCDVertical =
-                        GetBits(pATIHW->ext_vert_stretch, VERT_PANEL_SIZE);
-                    if (pATI->LCDVertical)
-                    {
-                        if (pATI->LCDVertical == MaxBits(VERT_PANEL_SIZE))
-                            pATI->LCDVertical = 0;
-                        else
-                            pATI->LCDVertical++;
-                    }
-                    pATIHW->vert_stretching =
-                        ATIMach64GetLCDReg(LCD_VERT_STRETCHING);
-                    pATIHW->lcd_gen_ctrl = ATIMach64GetLCDReg(LCD_GEN_CNTL);
-                    outr(LCD_INDEX, pATIHW->lcd_index);
-                }
-
-                /*
-                 * Don't bother with panel support if it hasn't been previously
-                 * enabled.
-                 */
-                if ((pATI->LCDPanelID >= 0) &&
-                    !(pATIHW->horz_stretching & HORZ_STRETCH_EN) &&
-                    !(pATIHW->vert_stretching & VERT_STRETCH_EN) &&
-                    !(pATIHW->lcd_gen_ctrl & LCD_ON))
-                {
-                    /*
-                     * At this point, if an XL or Mobility BIOS hasn't set
-                     * panel dimensions, then there is no panel.  Otherwise,
-                     * keep any panel disabled to allow for modes greater than
-                     * the panel's dimensions.
-                     */
-                    if ((pATI->Chip >= ATI_CHIP_264XL) &&
-                        (!pATI->LCDHorizontal || !pATI->LCDVertical))
-                        pATI->LCDPanelID = -1;
-                    else
-                        pATI->OptionPanelDisplay = FALSE;
-                }
-            }
-
-            /* Get DAC type */
-            pATI->DAC = GetBits(inr(DAC_CNTL), DAC_TYPE);
-
-            if (pATI->Chip < ATI_CHIP_264CT)
-            {
-                /* Factor in what the BIOS says the DAC is */
-                pATI->DAC = ATI_DAC(pATI->DAC,
-                    GetBits(inr(SCRATCH_REG1), BIOS_INIT_DAC_SUBTYPE));
-            }
-
-            /*
-             * RAMDAC types 0 & 1 for Mach64's are different than those for
-             * Mach32's.
-             */
-            if (pATI->DAC < ATI_DAC_ATI68875)
-                pATI->DAC += ATI_DAC_INTERNAL;
-    }
-
-    {
-        ROMTable = BIOSWord(0x48U);
-        if ((ROMTable < 0x0002U) ||
-            (BIOSWord(ROMTable - 0x02U) < 0x0012U) ||
-            ((ROMTable + BIOSWord(ROMTable - 0x02U)) > BIOSSize))
-            ROMTable = 0;
-
-        if (ROMTable > 0)
-        {
-            ClockTable = BIOSWord(ROMTable + 0x10U);
-            if ((ClockTable + 0x20U) > BIOSSize)
-                ClockTable = 0;
-
-            if (BIOSWord(ROMTable - 0x02U) >= 0x0048U)
-            {
-                VideoTable = BIOSWord(ROMTable + 0x46U);
-                if ((VideoTable < 0x08U) ||
-                    (BIOSByte(VideoTable - 0x01U) < 0x08U) ||
-                    (BIOSByte(VideoTable - 0x02U) > 0x01U) ||
-                    ((VideoTable + BIOSByte(VideoTable - 0x01U)) > BIOSSize))
-                    VideoTable = 0;
-            }
-
-            if (BIOSWord(ROMTable - 0x02U) >= 0x004AU)
-            {
-                HardwareTable = BIOSWord(ROMTable + 0x48U);
-                if (((HardwareTable + 0x08U) > BIOSSize) ||
-                    (memcmp(BIOS + HardwareTable, "$ATI", 4) != 0))
-                    HardwareTable = 0;
-            }
-        }
-
-        ati_bios_clock(pScreenInfo, pATI, BIOS, ClockTable, pGDev);
-
-        ati_bios_mmedia(pScreenInfo, pATI, BIOS, VideoTable, HardwareTable);
-
-        if (pATI->LCDPanelID >= 0)
-        {
-            LCDTable = BIOSWord(0x78U);
-            if ((LCDTable + BIOSByte(LCDTable + 5)) > BIOSSize)
-                LCDTable = 0;
-
-            ati_bios_panel_info(pScreenInfo, pATI, BIOS, BIOSSize, LCDTable);
-        }
-
-        xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_INFO, 3,
-            "BIOS Data:  BIOSSize=0x%04X, ROMTable=0x%04X.\n",
-            BIOSSize, ROMTable);
-        xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_INFO, 3,
-            "BIOS Data:  ClockTable=0x%04X, FrequencyTable=0x%04X.\n",
-            ClockTable, FrequencyTable);
-        xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_INFO, 3,
-            "BIOS Data:  LCDTable=0x%04X.\n",
-            LCDTable);
-        xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_INFO, 3,
-            "BIOS Data:  VideoTable=0x%04X, HardwareTable=0x%04X.\n",
-            VideoTable, HardwareTable);
-        xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_INFO, 3,
-            "BIOS Data:  I2CType=0x%02X, Tuner=0x%02X, Decoder=0x%02X,"
-            " Audio=0x%02X.\n",
-            pATI->I2CType, pATI->Tuner, pATI->Decoder, pATI->Audio);
-    }
-
-    ATIUnlock(pATI);            /* Unlock registers */
-
-    /* Report what was found */
-    xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-        "%s graphics controller detected.\n",
-        xf86TokenToString(Mach64Chipsets, pATI->Chip));
-
-    {
-        Message = Buffer + snprintf(Buffer, SizeOf(Buffer), "Chip type %04X",
-            pATI->ChipType);
-        if (!(pATI->ChipType & ~(CHIP_CODE_0 | CHIP_CODE_1)))
-            Message += snprintf(Message, Buffer + SizeOf(Buffer) - Message,
-                " (%c%c)",
-                GetBits(pATI->ChipType, CHIP_CODE_1) + 0x41U,
-                GetBits(pATI->ChipType, CHIP_CODE_0) + 0x41U);
-        else if ((pATI->ChipType & 0x4040U) == 0x4040U)
-            Message += snprintf(Message, Buffer + SizeOf(Buffer) - Message,
-                " \"%c%c\"",
-                GetByte(pATI->ChipType, 1), GetByte(pATI->ChipType, 0));
-        if ((pATI->Chip >= ATI_CHIP_264CT) && (pATI->Chip != ATI_CHIP_Mach64))
-            Message += snprintf(Message, Buffer + SizeOf(Buffer) - Message,
-                ", version %d, foundry %s",
-                pATI->ChipVersion, ATIFoundryNames[pATI->ChipFoundry]);
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-            "%s, class %d, revision 0x%02X.\n",
-            Buffer, pATI->ChipClass, pATI->ChipRevision);
-    }
-
-    {
-        Message = Buffer + snprintf(Buffer, SizeOf(Buffer),
-            "%s bus interface detected", ATIBusNames[pATI->BusType]);
-
-#ifndef AVOID_CPIO
-
-        {
-            Message += snprintf(Message, Buffer + SizeOf(Buffer) - Message,
-                ";  %s I/O base is 0x%04lX",
-                (pATI->CPIODecoding == SPARSE_IO) ? "sparse" : "block",
-                pATI->CPIOBase);
-        }
-
-#endif /* AVOID_CPIO */
-
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED, "%s.\n", Buffer);
-    }
-
-#ifndef AVOID_CPIO
-
-    if (pATI->CPIO_VGAWonder)
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-            "VGA Wonder registers at I/O port 0x%04lX.\n",
-            pATI->CPIO_VGAWonder);
-
-#endif /* AVOID_CPIO */
-
-    xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-        "ATI Mach64 adapter detected.\n");
-
-    if (pATI->Chip >= ATI_CHIP_264GT)
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
-            "For information on using the multimedia capabilities\n\tof this"
-            " adapter, please see http://gatos.sf.net.\n");
-
-    if ((pATI->DAC & ~0x0FU) == ATI_DAC_INTERNAL)
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-            "Internal RAMDAC (subtype %d) detected.\n", pATI->DAC & 0x0FU);
-    }
-    else
-    {
-        const SymTabRec *DAC;
-
-        for (DAC = ATIDACDescriptors;  ;  DAC++)
-        {
-            if (pATI->DAC == DAC->token)
-            {
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-                    "%s RAMDAC detected.\n", DAC->name);
-                break;
-            }
-
-            if (pATI->DAC < DAC->token)
-            {
-                xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_WARNING, 0,
-                    "Unknown RAMDAC type 0x%02X detected.\n", pATI->DAC);
-                break;
-            }
-        }
-    }
-
-    if (!xf86LinearVidMem())
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-            "A linear aperture is not available.\n");
-        goto bail;
-    }
-
-    /*
-     * Set colour weights.
-     */
-
-    if (pATI->Chip < ATI_CHIP_264CT)
-        pScreenInfo->rgbBits = 6;
-    else
-        pScreenInfo->rgbBits = 8;
-    pATI->rgbBits = pScreenInfo->rgbBits;
-    if (!xf86SetWeight(pScreenInfo, defaultWeight, defaultWeight))
-        goto bail;
-
-    if ((pScreenInfo->depth > 8) &&
-        ((pScreenInfo->weight.red != pScreenInfo->weight.blue) ||
-         (pScreenInfo->weight.red != (CARD32)(pScreenInfo->depth / 3)) ||
-         ((CARD32)pScreenInfo->depth != (pScreenInfo->weight.red +
-                                         pScreenInfo->weight.green +
-                                         pScreenInfo->weight.blue))))
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-            "Driver does not support weight %d%d%d for depth %d.\n",
-            (int)pScreenInfo->weight.red, (int)pScreenInfo->weight.green,
-            (int)pScreenInfo->weight.blue, pScreenInfo->depth);
-        goto bail;
-    }
-
-    /*
-     * Set default visual.
-     */
-
-    if (!xf86SetDefaultVisual(pScreenInfo, -1))
-        goto bail;
-
-    if ((pScreenInfo->depth > 8) &&
-        (((pScreenInfo->defaultVisual | DynamicClass) != DirectColor) ||
-         ((pScreenInfo->defaultVisual == DirectColor) &&
-          (pATI->DAC == ATI_DAC_INTERNAL))))
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-            "Driver does not support default visual %s for depth %d.\n",
-            xf86GetVisualName(pScreenInfo->defaultVisual),
-            pScreenInfo->depth);
-        goto bail;
-    }
-
-    /*
-     * Set colour gamma.
-     */
-
-    if (!xf86SetGamma(pScreenInfo, defaultGamma))
-        goto bail;
-
-    pATI->depth = pScreenInfo->depth;
-    pATI->bitsPerPixel = pScreenInfo->bitsPerPixel;
-    pATI->weight = pScreenInfo->weight;
-    pATI->XModifier = pATI->bitsPerPixel / UnitOf(pATI->bitsPerPixel);
-
-    /*
-     * Determine which CRT controller to use for video modes.
-     */
-
-    {
-        pATI->NewHW.crtc = ATI_CRTC_MACH64;
-
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-            "Using Mach64 accelerator CRTC.\n");
-
-#ifndef AVOID_CPIO
-
-        if (pATI->VGAAdapter)
-        {
-            /*
-             * No need for VGA I/O resources during operating state (but they
-             * are still decoded).
-             */
-            pResources =
-                xf86SetOperatingState(resVgaIo, pATI->iEntity, ResUnusedOpr);
-            if (pResources)
-            {
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                    "Logic error setting operating state for VGA I/O.\n");
-                xf86FreeResList(pResources);
-            }
-
-            if (pATI->CPIO_VGAWonder)
-            {
-                pResources = xf86SetOperatingState(pATI->VGAWonderResources,
-                    pATI->iEntity, ResUnusedOpr);
-                if (pResources)
-                {
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                        "Logic error setting operating state for"
-                        " VGAWonder I/O.\n");
-                    xf86FreeResList(pResources);
-                }
-            }
-        }
-
-#endif /* AVOID_CPIO */
-
-    }
-
-    /*
-     * Decide between the CRT and the panel.
-     */
-    if (pATI->LCDPanelID >= 0)
-    {
-        if (!pATI->OptionPanelDisplay)
-        {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_CONFIG,
-                "Using CRT interface and disabling digital flat panel.\n");
-        }
-        else
-        {
-            unsigned HDisplay, VDisplay;
-            CARD8 ClockMask, PostMask;
-
-            /*
-             * Determine porch data.  This groks the mode on entry to extract
-             * the width and position of its sync and blanking pulses, and
-             * considers any overscan as part of the displayed area, given that
-             * the overscan is also stretched.
-             *
-             * This also attempts to determine panel dimensions but cannot do
-             * so for one that is "auto-stretched".
-             */
-
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                pATIHW->lcd_gen_ctrl = inr(LCD_GEN_CTRL);
-
-                /* Set up to read non-shadow registers */
-                if (pATIHW->lcd_gen_ctrl & SHADOW_RW_EN)
-                    outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl & ~SHADOW_RW_EN);
-            }
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            {
-                pATIHW->lcd_index = inr(LCD_INDEX);
-                pATIHW->config_panel = ATIMach64GetLCDReg(LCD_CONFIG_PANEL);
-                pATIHW->lcd_gen_ctrl = ATIMach64GetLCDReg(LCD_GEN_CNTL);
-
-                /* Set up to read non-shadow registers */
-                if (pATIHW->lcd_gen_ctrl & SHADOW_RW_EN)
-                    ATIMach64PutLCDReg(LCD_GEN_CNTL,
-                        pATIHW->lcd_gen_ctrl & ~SHADOW_RW_EN);
-            }
-
-#ifndef AVOID_CPIO
-
-            if (!(pATIHW->crtc_gen_cntl & CRTC_EXT_DISP_EN))
-            {
-                unsigned HBlankStart, HSyncStart, HSyncEnd, HBlankEnd, HTotal;
-                unsigned VBlankStart, VSyncStart, VSyncEnd, VBlankEnd, VTotal;
-
-                pATIHW->clock = (inb(R_GENMO) & 0x0CU) >> 2;
-
-                pATIHW->crt[2] = GetReg(CRTX(pATI->CPIO_VGABase), 0x02U);
-                pATIHW->crt[3] = GetReg(CRTX(pATI->CPIO_VGABase), 0x03U);
-                pATIHW->crt[5] = GetReg(CRTX(pATI->CPIO_VGABase), 0x05U);
-                pATIHW->crt[7] = GetReg(CRTX(pATI->CPIO_VGABase), 0x07U);
-                pATIHW->crt[9] = GetReg(CRTX(pATI->CPIO_VGABase), 0x09U);
-                pATIHW->crt[21] = GetReg(CRTX(pATI->CPIO_VGABase), 0x15U);
-                pATIHW->crt[22] = GetReg(CRTX(pATI->CPIO_VGABase), 0x16U);
-
-                pATIHW->crtc_h_total_disp = inr(CRTC_H_TOTAL_DISP);
-                pATIHW->crtc_h_sync_strt_wid = inr(CRTC_H_SYNC_STRT_WID);
-                pATIHW->crtc_v_total_disp = inr(CRTC_V_TOTAL_DISP);
-                pATIHW->crtc_v_sync_strt_wid = inr(CRTC_V_SYNC_STRT_WID);
-
-                /* Switch to shadow registers */
-                if (pATI->Chip == ATI_CHIP_264LT)
-                    outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl | SHADOW_RW_EN);
-                else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                            (pATI->Chip == ATI_CHIP_264XL) ||
-                            (pATI->Chip == ATI_CHIP_MOBILITY)) */
-                    ATIMach64PutLCDReg(LCD_GEN_CNTL,
-                        pATIHW->lcd_gen_ctrl | SHADOW_RW_EN);
-
-                pATIHW->shadow_vga[2] =
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x02U);
-                pATIHW->shadow_vga[3] =
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x03U);
-                pATIHW->shadow_vga[5] =
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x05U);
-                pATIHW->shadow_vga[7] =
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x07U);
-                pATIHW->shadow_vga[9] =
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x09U);
-                pATIHW->shadow_vga[21] =
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x15U);
-                pATIHW->shadow_vga[22] =
-                    GetReg(CRTX(pATI->CPIO_VGABase), 0x16U);
-
-                pATIHW->shadow_h_total_disp = inr(CRTC_H_TOTAL_DISP);
-                pATIHW->shadow_h_sync_strt_wid = inr(CRTC_H_SYNC_STRT_WID);
-                pATIHW->shadow_v_total_disp = inr(CRTC_V_TOTAL_DISP);
-                pATIHW->shadow_v_sync_strt_wid = inr(CRTC_V_SYNC_STRT_WID);
-
-                /*
-                 * HSyncStart and HSyncEnd should equal their shadow
-                 * counterparts.  Otherwise, due to a chip bug, the panel might
-                 * not sync, regardless of which register set is used to drive
-                 * the panel.  There are certain combinations of register
-                 * values where the panel does in fact sync, but it remains
-                 * impossible to accurately determine the horizontal sync pulse
-                 * timing actually seen by the panel.
-                 *
-                 * Note that this hardware bug does not affect the CRT output.
-                 */
-                if (((pATIHW->crtc_h_sync_strt_wid ^
-                      pATIHW->shadow_h_sync_strt_wid) &
-                     (CRTC_H_SYNC_STRT | CRTC_H_SYNC_STRT_HI |
-                      CRTC_H_SYNC_WID)))
-                {
-                    xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_NOTICE, 0,
-                        "Invalid horizontal sync pulse timing detected in mode"
-                        " on server entry.\n");
-
-                    /* Don't trust input timing */
-                    pATI->OptionLCDSync = TRUE;
-                    ModeType = 0;
-                }
-
-                /* Merge in shadow registers as appropriate */
-                if (pATIHW->lcd_gen_ctrl & SHADOW_EN)
-                {
-                    pATIHW->crt[2] = pATIHW->shadow_vga[2];
-                    pATIHW->crt[3] = pATIHW->shadow_vga[3];
-                    pATIHW->crt[5] = pATIHW->shadow_vga[5];
-
-                    /* XXX Does this apply to VGA?  If so, what about the LT? */
-                    if ((pATI->Chip < ATI_CHIP_264LTPRO) ||
-                        !(pATIHW->config_panel & DONT_SHADOW_HEND))
-                    {
-                        pATIHW->crtc_h_total_disp &= ~CRTC_H_DISP;
-                        pATIHW->crtc_h_total_disp |=
-                            pATIHW->shadow_h_total_disp & CRTC_H_DISP;
-                    }
-
-                    pATIHW->crtc_h_total_disp &= ~CRTC_H_TOTAL;
-                    pATIHW->crtc_h_total_disp |=
-                        pATIHW->shadow_h_total_disp & CRTC_H_TOTAL;
-                    pATIHW->crtc_h_sync_strt_wid =
-                        pATIHW->shadow_h_sync_strt_wid;
-
-                    /* XXX Does this apply to VGA? */
-                    if (pATIHW->lcd_gen_ctrl & USE_SHADOWED_VEND)
-                    {
-                        pATIHW->crtc_v_total_disp &= ~CRTC_V_DISP;
-                        pATIHW->crtc_v_total_disp |=
-                            pATIHW->shadow_v_total_disp & CRTC_V_DISP;
-                    }
-
-                    if (!(pATIHW->lcd_gen_ctrl & DONT_SHADOW_VPAR))
-                    {
-                        pATIHW->crt[7] = pATIHW->shadow_vga[7];
-                        pATIHW->crt[9] = pATIHW->shadow_vga[9];
-                        pATIHW->crt[21] = pATIHW->shadow_vga[21];
-                        pATIHW->crt[22] = pATIHW->shadow_vga[22];
-
-                        pATIHW->crtc_v_total_disp &= ~CRTC_V_TOTAL;
-                        pATIHW->crtc_v_total_disp |=
-                            pATIHW->shadow_v_total_disp & CRTC_V_TOTAL;
-                    }
-                }
-
-                if (!(pATIHW->lcd_gen_ctrl & DONT_SHADOW_VPAR))
-                    pATIHW->crtc_v_sync_strt_wid =
-                        pATIHW->shadow_v_sync_strt_wid;
-
-                /*
-                 * Decipher input timing.  This is complicated by the fact that
-                 * the full width of all timing parameters, except for the
-                 * blanking pulses, is only available through the accelerator
-                 * registers, not the VGA ones.  Blanking pulse boundaries must
-                 * then be interpolated.
-                 *
-                 * Note that, in VGA mode, the accelerator's sync width fields
-                 * are actually end positions, not widths.
-                 */
-                HDisplay = GetBits(pATIHW->crtc_h_total_disp, CRTC_H_DISP);
-                HSyncStart =
-                    (GetBits(pATIHW->crtc_h_sync_strt_wid,
-                        CRTC_H_SYNC_STRT_HI) *
-                     (MaxBits(CRTC_H_SYNC_STRT) + 1)) |
-                    GetBits(pATIHW->crtc_h_sync_strt_wid, CRTC_H_SYNC_STRT);
-                HSyncEnd = (HSyncStart & ~MaxBits(CRTC_H_SYNC_WID)) |
-                    GetBits(pATIHW->crtc_h_sync_strt_wid, CRTC_H_SYNC_WID);
-                if (HSyncStart >= HSyncEnd)
-                    HSyncEnd += MaxBits(CRTC_H_SYNC_WID) + 1;
-                HTotal = GetBits(pATIHW->crtc_h_total_disp, CRTC_H_TOTAL);
-
-                HBlankStart = (HDisplay & ~0xFFU) | pATIHW->crt[2];
-                if (HDisplay > HBlankStart)
-                    HBlankStart += 0x0100U;
-                HBlankEnd = (HSyncEnd & ~0x3FU) |
-                    ((pATIHW->crt[5] >> 2) & 0x20U) |
-                    (pATIHW->crt[3] & 0x1FU);
-                if (HSyncEnd > (HBlankEnd + 1))
-                    HBlankEnd += 0x40U;
-
-                VDisplay = GetBits(pATIHW->crtc_v_total_disp, CRTC_V_DISP);
-                VSyncStart =
-                    GetBits(pATIHW->crtc_v_sync_strt_wid, CRTC_V_SYNC_STRT);
-                VSyncEnd = (VSyncStart & ~MaxBits(CRTC_V_SYNC_END_VGA)) |
-                    GetBits(pATIHW->crtc_v_sync_strt_wid, CRTC_V_SYNC_END_VGA);
-                if (VSyncStart > VSyncEnd)
-                    VSyncEnd += MaxBits(CRTC_V_SYNC_END_VGA) + 1;
-                VTotal = GetBits(pATIHW->crtc_v_total_disp, CRTC_V_TOTAL);
-
-                VBlankStart = (VDisplay & ~0x03FFU) |
-                   ((pATIHW->crt[9] << 4) & 0x0200U) |
-                   ((pATIHW->crt[7] << 5) & 0x0100U) | pATIHW->crt[21];
-                if (VDisplay > VBlankStart)
-                   VBlankStart += 0x0400U;
-                VBlankEnd = (VSyncEnd & ~0x00FFU) | pATIHW->crt[22];
-                if (VSyncEnd > (VBlankEnd + 1))
-                   VBlankEnd += 0x0100U;
-
-                pATI->LCDHBlankWidth = HBlankEnd - HBlankStart;
-                pATI->LCDHSyncStart = HSyncStart - HBlankStart;
-                pATI->LCDHSyncWidth = HSyncEnd - HSyncStart;
-
-                pATI->LCDVBlankWidth = VBlankEnd - VBlankStart;
-                pATI->LCDVSyncStart = VSyncStart - VBlankStart;
-                pATI->LCDVSyncWidth = VSyncEnd - VSyncStart;
-
-                HDisplay = HTotal + 5 - pATI->LCDHBlankWidth;
-                VDisplay = VTotal + 2 - pATI->LCDVBlankWidth;
-            }
-            else
-
-#endif /* AVOID_CPIO */
-
-            {
-                pATIHW->clock = inr(CLOCK_CNTL) & 0x03U;
-
-                pATIHW->crtc_h_total_disp = inr(CRTC_H_TOTAL_DISP);
-                pATIHW->crtc_h_sync_strt_wid = inr(CRTC_H_SYNC_STRT_WID);
-                pATIHW->crtc_v_total_disp = inr(CRTC_V_TOTAL_DISP);
-                pATIHW->crtc_v_sync_strt_wid = inr(CRTC_V_SYNC_STRT_WID);
-                pATIHW->ovr_wid_left_right = inr(OVR_WID_LEFT_RIGHT);
-                pATIHW->ovr_wid_top_bottom = inr(OVR_WID_TOP_BOTTOM);
-
-                /* Switch to shadow registers */
-                if (pATI->Chip == ATI_CHIP_264LT)
-                    outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl | SHADOW_RW_EN);
-                else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                            (pATI->Chip == ATI_CHIP_264XL) ||
-                            (pATI->Chip == ATI_CHIP_MOBILITY)) */
-                    ATIMach64PutLCDReg(LCD_GEN_CNTL,
-                        pATIHW->lcd_gen_ctrl | SHADOW_RW_EN);
-
-                /* Oddly enough, there are no shadow overscan registers */
-                pATIHW->shadow_h_total_disp = inr(CRTC_H_TOTAL_DISP);
-                pATIHW->shadow_h_sync_strt_wid = inr(CRTC_H_SYNC_STRT_WID);
-                pATIHW->shadow_v_total_disp = inr(CRTC_V_TOTAL_DISP);
-                pATIHW->shadow_v_sync_strt_wid = inr(CRTC_V_SYNC_STRT_WID);
-
-                /*
-                 * HSyncStart and HSyncEnd should equal their shadow
-                 * counterparts.  Otherwise, due to a chip bug, the panel might
-                 * not sync, regardless of which register set is used to drive
-                 * the panel.  There are certain combinations of register
-                 * values where the panel does in fact sync, but it remains
-                 * impossible to accurately determine the horizontal sync pulse
-                 * timing actually seen by the panel.
-                 *
-                 * Note that this hardware bug does not affect the CRT output.
-                 */
-                if (((pATIHW->crtc_h_sync_strt_wid ^
-                      pATIHW->shadow_h_sync_strt_wid) &
-                     (CRTC_H_SYNC_STRT | CRTC_H_SYNC_STRT_HI |
-                      CRTC_H_SYNC_WID)))
-                {
-                    xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_NOTICE, 0,
-                        "Invalid horizontal sync pulse timing detected in mode"
-                        " on server entry.\n");
-
-                    /* Don't trust input timing */
-                    pATI->OptionLCDSync = TRUE;
-                    ModeType = 0;
-                }
-
-                /* Merge in shadow registers as appropriate */
-                if (pATIHW->lcd_gen_ctrl & SHADOW_EN)
-                {
-                    /* XXX What about the LT? */
-                    if ((pATI->Chip < ATI_CHIP_264LTPRO) ||
-                        !(pATIHW->config_panel & DONT_SHADOW_HEND))
-                    {
-                        pATIHW->crtc_h_total_disp &= ~CRTC_H_DISP;
-                        pATIHW->crtc_h_total_disp |=
-                            pATIHW->shadow_h_total_disp & CRTC_H_DISP;
-                    }
-
-                    pATIHW->crtc_h_total_disp &= ~CRTC_H_TOTAL;
-                    pATIHW->crtc_h_total_disp |=
-                        pATIHW->shadow_h_total_disp & CRTC_H_TOTAL;
-                    pATIHW->crtc_h_sync_strt_wid =
-                        pATIHW->shadow_h_sync_strt_wid;
-
-                    if (pATIHW->lcd_gen_ctrl & USE_SHADOWED_VEND)
-                    {
-                        pATIHW->crtc_v_total_disp &= ~CRTC_V_DISP;
-                        pATIHW->crtc_v_total_disp |=
-                            pATIHW->shadow_v_total_disp & CRTC_V_DISP;
-                    }
-
-                    if (!(pATIHW->lcd_gen_ctrl & DONT_SHADOW_VPAR))
-                    {
-                        pATIHW->crtc_v_total_disp &= ~CRTC_V_TOTAL;
-                        pATIHW->crtc_v_total_disp |=
-                            pATIHW->shadow_v_total_disp & CRTC_V_TOTAL;
-                    }
-                }
-
-                if (!(pATIHW->lcd_gen_ctrl & DONT_SHADOW_VPAR))
-                    pATIHW->crtc_v_sync_strt_wid =
-                        pATIHW->shadow_v_sync_strt_wid;
-
-                /* Decipher input timing */
-                HDisplay = GetBits(pATIHW->crtc_h_total_disp, CRTC_H_DISP) +
-                    GetBits(pATIHW->ovr_wid_left_right, OVR_WID_LEFT) +
-                    GetBits(pATIHW->ovr_wid_left_right, OVR_WID_RIGHT);
-                VDisplay = GetBits(pATIHW->crtc_v_total_disp, CRTC_V_DISP) +
-                    GetBits(pATIHW->ovr_wid_top_bottom, OVR_WID_TOP) +
-                    GetBits(pATIHW->ovr_wid_top_bottom, OVR_WID_BOTTOM);
-
-                pATI->LCDHSyncStart =
-                    (GetBits(pATIHW->crtc_h_sync_strt_wid,
-                        CRTC_H_SYNC_STRT_HI) *
-                     (MaxBits(CRTC_H_SYNC_STRT) + 1)) +
-                    GetBits(pATIHW->crtc_h_sync_strt_wid, CRTC_H_SYNC_STRT) -
-                    HDisplay;
-                pATI->LCDHSyncWidth =
-                    GetBits(pATIHW->crtc_h_sync_strt_wid, CRTC_H_SYNC_WID);
-                pATI->LCDHBlankWidth =
-                    GetBits(pATIHW->crtc_h_total_disp, CRTC_H_TOTAL) -
-                    HDisplay;
-                pATI->LCDVSyncStart =
-                    GetBits(pATIHW->crtc_v_sync_strt_wid, CRTC_V_SYNC_STRT) -
-                    VDisplay;
-                pATI->LCDVSyncWidth =
-                    GetBits(pATIHW->crtc_v_sync_strt_wid, CRTC_V_SYNC_WID);
-                pATI->LCDVBlankWidth =
-                    GetBits(pATIHW->crtc_v_total_disp, CRTC_V_TOTAL) -
-                    VDisplay;
-
-                HDisplay++;
-                VDisplay++;
-            }
-
-            /* Restore LCD registers */
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl);
-            }
-            else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                        (pATI->Chip == ATI_CHIP_264XL) ||
-                        (pATI->Chip == ATI_CHIP_MOBILITY)) */
-            {
-                ATIMach64PutLCDReg(LCD_GEN_CNTL, pATIHW->lcd_gen_ctrl);
-                outr(LCD_INDEX, pATIHW->lcd_index);
-            }
-
-            HDisplay <<= 3;
-            pATI->LCDHSyncStart <<= 3;
-            pATI->LCDHSyncWidth <<= 3;
-            pATI->LCDHBlankWidth <<= 3;
-
-            /* Calculate panel dimensions implied by the input timing */
-            if ((pATIHW->horz_stretching &
-                 (HORZ_STRETCH_EN | AUTO_HORZ_RATIO)) ==
-                HORZ_STRETCH_EN)
-            {
-                if (pATIHW->horz_stretching & HORZ_STRETCH_MODE)
-                {
-                    if (pATIHW->horz_stretching & HORZ_STRETCH_BLEND)
-                    {
-                        HDisplay =
-                            (HDisplay * (MaxBits(HORZ_STRETCH_BLEND) + 1)) /
-                            GetBits(pATIHW->horz_stretching,
-                                HORZ_STRETCH_BLEND);
-                    }
-                }
-                else if (((pATIHW->horz_stretching & HORZ_STRETCH_LOOP) >
-                          HORZ_STRETCH_LOOP15) ||
-                         (pATIHW->horz_stretching &
-                          SetBits(1, HORZ_STRETCH_RATIO)))
-                {
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                        "Ignoring invalid horizontal stretch ratio in mode on"
-                        " server entry.\n");
-                }
-                else
-                {
-                    IOValue =
-                        GetBits(pATIHW->horz_stretching, HORZ_STRETCH_RATIO);
-
-                    switch (GetBits(pATIHW->horz_stretching,
-                                    HORZ_STRETCH_LOOP))
-                    {
-                        case GetBits(HORZ_STRETCH_LOOP09, HORZ_STRETCH_LOOP):
-                            i = 9;
-                            IOValue &= (1 << 9) - 1;
-                            break;
-
-                        case GetBits(HORZ_STRETCH_LOOP11, HORZ_STRETCH_LOOP):
-                            i = 11;
-                            IOValue &= (1 << 11) - 1;
-                            break;
-
-                        case GetBits(HORZ_STRETCH_LOOP12, HORZ_STRETCH_LOOP):
-                            i = 12;
-                            IOValue &= (1 << 12) - 1;
-                            break;
-
-                        case GetBits(HORZ_STRETCH_LOOP14, HORZ_STRETCH_LOOP):
-                            i = 14;
-                            IOValue &= (1 << 14) - 1;
-                            break;
-
-                        case GetBits(HORZ_STRETCH_LOOP15, HORZ_STRETCH_LOOP):
-                        default:    /* Muffle compiler */
-                            i = 15;
-                            IOValue &= (1 << 15) - 1;
-                            break;
-                    }
-
-                    if (IOValue)
-                    {
-                        /* Count the number of bits in IOValue */
-                        j = (IOValue >> 1) & 0x36DBU;
-                        j = IOValue - j - ((j >> 1) & 0x36DBU);
-                        j = ((j + (j >> 3)) & 0x71C7U) % 0x3FU;
-
-                        HDisplay = (HDisplay * i) / j;
-                    }
-                }
-            }
-
-            if ((pATIHW->vert_stretching & VERT_STRETCH_EN) &&
-                !(pATIHW->ext_vert_stretch & AUTO_VERT_RATIO))
-            {
-                if ((pATIHW->vert_stretching & VERT_STRETCH_USE0) ||
-                    (VDisplay <= 350))
-                    IOValue =
-                        GetBits(pATIHW->vert_stretching, VERT_STRETCH_RATIO0);
-                else if (VDisplay <= 400)
-                    IOValue =
-                        GetBits(pATIHW->vert_stretching, VERT_STRETCH_RATIO1);
-                else if ((VDisplay <= 480) ||
-                         !(pATIHW->ext_vert_stretch & VERT_STRETCH_RATIO3))
-                    IOValue =
-                        GetBits(pATIHW->vert_stretching, VERT_STRETCH_RATIO2);
-                else
-                    IOValue =
-                        GetBits(pATIHW->ext_vert_stretch, VERT_STRETCH_RATIO3);
-
-                if (IOValue)
-                    VDisplay =
-                        (VDisplay * (MaxBits(VERT_STRETCH_RATIO0) + 1)) /
-                        IOValue;
-            }
-
-            /* Match calculated dimensions to probed dimensions */
-            if (!pATI->LCDHorizontal)
-            {
-                if ((pATIHW->horz_stretching &
-                     (HORZ_STRETCH_EN | AUTO_HORZ_RATIO)) !=
-                     (HORZ_STRETCH_EN | AUTO_HORZ_RATIO))
-                    pATI->LCDHorizontal = HDisplay;
-            }
-            else if (pATI->LCDHorizontal != (int)HDisplay)
-            {
-                if ((pATIHW->horz_stretching &
-                    (HORZ_STRETCH_EN | AUTO_HORZ_RATIO)) !=
-                    (HORZ_STRETCH_EN | AUTO_HORZ_RATIO))
-                    xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_WARNING, 4,
-                        "Inconsistent panel horizontal dimension:"
-                        "  %d and %d.\n", pATI->LCDHorizontal, HDisplay);
-                HDisplay = pATI->LCDHorizontal;
-            }
-
-            if (!pATI->LCDVertical)
-            {
-                if (!(pATIHW->vert_stretching & VERT_STRETCH_EN) ||
-                    !(pATIHW->ext_vert_stretch & AUTO_VERT_RATIO))
-                    pATI->LCDVertical = VDisplay;
-            }
-            else if (pATI->LCDVertical != (int)VDisplay)
-            {
-                if (!(pATIHW->vert_stretching & VERT_STRETCH_EN) ||
-                    !(pATIHW->ext_vert_stretch & AUTO_VERT_RATIO))
-                    xf86DrvMsgVerb(pScreenInfo->scrnIndex, X_WARNING, 4,
-                        "Inconsistent panel vertical dimension:  %d and %d.\n",
-                        pATI->LCDVertical, VDisplay);
-                VDisplay = pATI->LCDVertical;
-            }
-
-            if (!pATI->LCDHorizontal || !pATI->LCDVertical)
-            {
-                if (pATI->LCDPanelID || (pATI->Chip <= ATI_CHIP_264LTPRO))
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-                        "Unable to determine dimensions of panel (ID %d).\n",
-                        pATI->LCDPanelID);
-                else
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-                        "Unable to determine dimensions of panel.\n");
-
-                goto bail;
-            }
-
-            /* If the mode on entry wasn't stretched, adjust timings */
-            if (!(pATIHW->horz_stretching & HORZ_STRETCH_EN) &&
-                (pATI->LCDHorizontal > (int)HDisplay))
-            {
-                HDisplay = pATI->LCDHorizontal - HDisplay;
-                if (pATI->LCDHSyncStart >= HDisplay)
-                    pATI->LCDHSyncStart -= HDisplay;
-                else
-                    pATI->LCDHSyncStart = 0;
-                pATI->LCDHBlankWidth -= HDisplay;
-                HDisplay = pATI->LCDHSyncStart + pATI->LCDHSyncWidth;
-                if (pATI->LCDHBlankWidth < HDisplay)
-                    pATI->LCDHBlankWidth = HDisplay;
-            }
-
-            if (!(pATIHW->vert_stretching & VERT_STRETCH_EN) &&
-                (pATI->LCDVertical > (int)VDisplay))
-            {
-                VDisplay = pATI->LCDVertical - VDisplay;
-                if (pATI->LCDVSyncStart >= VDisplay)
-                    pATI->LCDVSyncStart -= VDisplay;
-                else
-                    pATI->LCDVSyncStart = 0;
-                pATI->LCDVBlankWidth -= VDisplay;
-                VDisplay = pATI->LCDVSyncStart + pATI->LCDVSyncWidth;
-                if (pATI->LCDVBlankWidth < VDisplay)
-                    pATI->LCDVBlankWidth = VDisplay;
-            }
-
-            if (pATI->LCDPanelID || (pATI->Chip <= ATI_CHIP_264LTPRO))
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-                    "%dx%d panel (ID %d) detected.\n",
-                    pATI->LCDHorizontal, pATI->LCDVertical, pATI->LCDPanelID);
-            else
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-                    "%dx%d panel detected.\n",
-                    pATI->LCDHorizontal, pATI->LCDVertical);
-
-            /*
-             * Determine panel clock.  This must be done after option
-             * processing so that the adapter's reference frequency is always
-             * available.
-             *
-             * Get post divider.  A GCC bug has caused the following expression
-             * to be broken down into its individual components.
-             */
-            ClockMask = PLL_VCLK0_XDIV << pATIHW->clock;
-            PostMask = PLL_VCLK0_POST_DIV << (pATIHW->clock * 2);
-            i = GetBits(ATIMach64GetPLLReg(PLL_XCLK_CNTL), ClockMask);
-            i *= MaxBits(PLL_VCLK0_POST_DIV) + 1;
-            i |= GetBits(ATIMach64GetPLLReg(PLL_VCLK_POST_DIV), PostMask);
-
-            /* Calculate clock of mode on entry */
-            Numerator = ATIMach64GetPLLReg(PLL_VCLK0_FB_DIV + pATIHW->clock) *
-                pATI->ReferenceNumerator;
-            Denominator = pATI->ClockDescriptor.MinM *
-                pATI->ReferenceDenominator *
-                pATI->ClockDescriptor.PostDividers[i];
-            pATI->LCDClock = ATIDivide(Numerator, Denominator, 1, 0);
-
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_PROBED,
-                "Panel clock is %.3f MHz.\n",
-                (double)(pATI->LCDClock) / 1000.0);
-
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-                "Using digital flat panel interface%s.\n",
-                pATI->OptionCRTDisplay ?
-                    " to display on both CRT and panel" : "");
-        }
-    }
-
-    /*
-     * Finish detecting video RAM size.
-     */
-    pScreenInfo->videoRam = pATI->VideoRAM;
-
-    {
-        {
-            /* Get adapter's linear aperture configuration */
-            pATIHW->config_cntl = inr(CONFIG_CNTL);
-            pATI->LinearBase =
-                GetBits(pATIHW->config_cntl, CFG_MEM_AP_LOC) << 22;
-            if ((pATIHW->config_cntl & CFG_MEM_AP_SIZE) != CFG_MEM_AP_SIZE)
-            {
-                pATI->LinearSize =
-                    GetBits(pATIHW->config_cntl, CFG_MEM_AP_SIZE) << 22;
-
-                /*
-                 * Linear aperture could have been disabled (but still
-                 * assigned) by BIOS initialisation.
-                 */
-                if (pATI->LinearBase && !pATI->LinearSize)
-                {
-                    if ((pATI->Chip <= ATI_CHIP_88800GXD) &&
-                        (pATI->VideoRAM < 4096))
-                        pATI->LinearSize = 4 * 1024 * 1024;
-                    else
-                        pATI->LinearSize = 8 * 1024 * 1024;
-                }
-            }
-
-            if (pATI->LinearBase && pATI->LinearSize)
-            {
-                int AcceleratorVideoRAM = 0, ServerVideoRAM;
-
-#ifndef AVOID_CPIO
-
-                /*
-                 * Unless specified in PCI configuration space, set MMIO
-                 * address to tail end of linear aperture.
-                 */
-                if (!pATI->Block0Base)
-                {
-                    pATI->Block0Base =
-                        pATI->LinearBase + pATI->LinearSize - 0x00000400U;
-                    pATI->MMIOInLinear = TRUE;
-                }
-
-#endif /* AVOID_CPIO */
-
-                AcceleratorVideoRAM = pATI->LinearSize >> 10;
-
-                /*
-                 * Account for MMIO area at the tail end of the linear
-                 * aperture, if it is needed or if it cannot be disabled.
-                 */
-                if (pATI->MMIOInLinear || (pATI->Chip < ATI_CHIP_264VTB))
-                    AcceleratorVideoRAM -= 2;
-
-                ServerVideoRAM = pATI->VideoRAM;
-
-                if (pATI->Cursor > ATI_CURSOR_SOFTWARE)
-                {
-                    /*
-                     * Allocate a 1 kB cursor image area at the top of the
-                     * little-endian aperture, just before any MMIO area that
-                     * might also be there.
-                     */
-                    if (ServerVideoRAM > AcceleratorVideoRAM)
-                        ServerVideoRAM = AcceleratorVideoRAM;
-
-                    ServerVideoRAM--;
-                    pATI->CursorOffset = ServerVideoRAM << 10;
-                    pATI->CursorBase = pATI->LinearBase + pATI->CursorOffset;
-
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-                        "Storing hardware cursor image at 0x%08lX.\n",
-                        pATI->CursorBase);
-                }
-
-                {
-                    CARD32 PageSize = getpagesize() >> 10;
-
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-
-                    /*
-                     * MMIO areas must be mmap()'ed separately to avoid write
-                     * combining them.  Thus, they might not end up still
-                     * adjacent with the little-endian linear aperture after
-                     * mmap()'ing.  So, round down the linear aperture size to
-                     * avoid an overlap.  Any hardware cursor image area might
-                     * not end up being write combined, but this seems
-                     * preferable to further reducing the video memory size
-                     * advertised to the server.
-                     *
-                     * XXX Ideally this should be dealt with in the os-support
-                     *     layer, i.e., it should be possible to reset a
-                     *     subarea's write combining after it has been
-                     *     mmap()'ed, but doing so currently causes the removal
-                     *     of write combining for the entire aperture.
-                     */
-                    if (pATI->MMIOInLinear)
-                        AcceleratorVideoRAM -= AcceleratorVideoRAM % PageSize;
-
-#else /* if X_BYTE_ORDER != X_LITTLE_ENDIAN */
-
-                    /*
-                     * Big-endian apertures are 8 MB higher and don't contain
-                     * an MMIO area.
-                     */
-                    pATI->LinearBase += 0x00800000U;
-                    AcceleratorVideoRAM = pATI->LinearSize >> 10;
-
-#endif /* X_BYTE_ORDER */
-
-                    if (ServerVideoRAM > AcceleratorVideoRAM)
-                        ServerVideoRAM = AcceleratorVideoRAM;
-                    else if (AcceleratorVideoRAM > pATI->VideoRAM)
-                        AcceleratorVideoRAM = pATI->VideoRAM;
-
-                    PageSize--;
-                    AcceleratorVideoRAM =
-                        (AcceleratorVideoRAM + PageSize) & ~PageSize;
-
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-                        "Using %d MB linear aperture at 0x%08lX.\n",
-                        pATI->LinearSize >> 20, pATI->LinearBase);
-
-                    /* Only mmap what is needed */
-                    ApertureSize = pATI->LinearSize =
-                        AcceleratorVideoRAM << 10;
-                }
-
-                if (ServerVideoRAM < pATI->VideoRAM)
-                {
-                    pScreenInfo->videoRam = ServerVideoRAM;
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
-                        "Virtual resolutions will be limited to %d kB\n due to"
-                        " linear aperture size and/or placement of hardware"
-                        " cursor image area.\n",
-                        ServerVideoRAM);
-                }
-            }
-        }
-
-        if (!pATI->LinearBase || !pATI->LinearSize)
-        {
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-                    "Linear aperture not available.\n");
-                goto bail;
-        }
-
-        if (pATI->Block0Base)
-        {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-                "Using Block 0 MMIO aperture at 0x%08lX.\n", pATI->Block0Base);
-
-            /* Set Block1 MMIO address if supported */
-            if (pATI->Chip >= ATI_CHIP_264VT)
-            {
-                pATI->Block1Base = pATI->Block0Base - 0x00000400U;
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-                    "Using Block 1 MMIO aperture at 0x%08lX.\n",
-                    pATI->Block1Base);
-            }
-        }
-    }
-
-#ifndef AVOID_CPIO
-
-        if (pATI->VGAAdapter)
-        {
-            /*
-             * Free VGA memory aperture during operating state (but it is still
-             * decoded).
-             */
-            pResources = xf86SetOperatingState(resVgaMem, pATI->iEntity,
-                ResUnusedOpr);
-            if (pResources)
-            {
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                    "Logic error setting operating state for VGA memory"
-                    " aperture.\n");
-                xf86FreeResList(pResources);
-            }
-        }
-
-#endif /* AVOID_CPIO */
-
-    /*
-     * Remap apertures.  Must lock and re-unlock around this in case the
-     * remapping fails.
-     */
-    ATILock(pATI);
-    ATIUnmapApertures(pScreenInfo->scrnIndex, pATI);
-    if (!ATIMapApertures(pScreenInfo->scrnIndex, pATI))
-        return FALSE;
-
-    ATIUnlock(pATI);
-
-    if (pATI->OptionAccel)
-    {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-                "MMIO write caching %sabled.\n",
-                pATI->OptionMMIOCache ? "en" : "dis");
-    }
-
-    {
-        if (pATI->Chip >= ATI_CHIP_264CT)
-            ATIReportMemory(pScreenInfo, pATI,
-                ATIMemoryTypeNames_264xT[pATI->MemoryType]);
-        else if (pATI->Chip == ATI_CHIP_88800CX)
-            ATIReportMemory(pScreenInfo, pATI,
-                ATIMemoryTypeNames_88800CX[pATI->MemoryType]);
-        else
-            ATIReportMemory(pScreenInfo, pATI,
-                ATIMemoryTypeNames_Mach[pATI->MemoryType]);
-    }
-
-    /*
-     * Finish banking setup.  This needs to be fixed to not assume the mode on
-     * entry is a VGA mode.  XXX
-     */
-
-#ifndef AVOID_CPIO
-
-    if (!pATI->VGAAdapter)
-    {
-        pATI->NewHW.SetBank = ATIx8800SetBank;
-        pATI->NewHW.nPlane = 0;
-
-        pATIHW->crtc = pATI->NewHW.crtc;
-
-        pATIHW->SetBank = (ATIBankProcPtr)NoopDDA;
-    }
-    else
-    {
-        Bool ext_disp_en = (pATI->LockData.crtc_gen_cntl & CRTC_EXT_DISP_EN);
-        Bool vga_ap_en = (pATI->LockData.config_cntl & CFG_MEM_VGA_AP_EN);
-        Bool vga_color_256 = (GetReg(SEQX, 0x04U) & 0x08U);
-
-        pATI->NewHW.SetBank = ATIMach64SetBankPacked;
-        pATI->NewHW.nPlane = 1;
-
-        pATIHW->crtc = ATI_CRTC_VGA;
-
-        if (ext_disp_en)
-            pATIHW->crtc = ATI_CRTC_MACH64;
-
-        if ((pATIHW->crtc != ATI_CRTC_VGA) || vga_color_256)
-            pATIHW->nPlane = 1;
-        else
-            pATIHW->nPlane = 4;
-
-        /* VideoRAM is a multiple of 512kB and BankSize is 64kB */
-        pATIHW->nBank = pATI->VideoRAM / (pATIHW->nPlane * 0x40U);
-
-        if ((pATIHW->crtc == ATI_CRTC_VGA) && !vga_ap_en)
-        {
-            pATIHW->SetBank = (ATIBankProcPtr)NoopDDA;
-            pATIHW->nBank = 1;
-        }
-        else if (pATIHW->nPlane == 1)
-        {
-            pATIHW->SetBank = ATIMach64SetBankPacked;
-        }
-        else
-        {
-            pATIHW->SetBank = ATIMach64SetBankPlanar;
-        }
-    }
-
-#else /* AVOID_CPIO */
-
-    {
-        pATIHW->crtc = pATI->NewHW.crtc;
-    }
-
-#endif /* AVOID_CPIO */
-
-    if (pATI->OptionShadowFB)
-    {
-        /* Until ShadowFB becomes a true screen wrapper, if it ever does... */
-
-        if (pATI->OptionAccel)
-        {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "Cannot shadow an accelerated frame buffer.\n");
-            pATI->OptionShadowFB = FALSE;
-        }
-        else
-        {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-                "Using shadow frame buffer.\n");
-        }
-    }
-
-    /* 264VT-B's and later have DSP registers */
-    if ((pATI->Chip >= ATI_CHIP_264VTB) &&
-        !ATIDSPPreInit(pScreenInfo->scrnIndex, pATI))
-        goto bail;
-
-    /*
-     * Determine minClock and maxClock.  For adapters with supported
-     * programmable clock generators, start with an absolute maximum.
-     */
-    if (pATI->ClockDescriptor.MaxN > 0)
-    {
-        Numerator = pATI->ClockDescriptor.MaxN * pATI->ReferenceNumerator;
-        Denominator = pATI->ClockDescriptor.MinM * pATI->ReferenceDenominator *
-            pATI->ClockDescriptor.PostDividers[0];
-
-        /*
-         * An integrated PLL behaves as though the reference frequency were
-         * doubled.  It also does not appear to care about the colour depth.
-         */
-        if (pATI->ProgrammableClock == ATI_CLOCK_INTERNAL)
-            Numerator <<= 1;
-
-        ATIClockRange.maxClock = (Numerator / (Denominator * 1000)) * 1000;
-
-        Numerator = pATI->ClockDescriptor.MinN * pATI->ReferenceNumerator;
-        Denominator = pATI->ClockDescriptor.MaxM * pATI->ReferenceDenominator *
-            pATI->ClockDescriptor.PostDividers[pATI->ClockDescriptor.NumD - 1];
-
-        if (pATI->ProgrammableClock == ATI_CLOCK_INTERNAL)
-            Numerator <<= 1;
-
-        ATIClockRange.minClock = (Numerator / (Denominator * 1000)) * 1000;
-
-        if (pATI->XCLKFeedbackDivider)
-        {
-            /* Possibly reduce maxClock due to memory bandwidth */
-            Numerator = pATI->XCLKFeedbackDivider * 2 *
-                pATI->ReferenceNumerator;
-            Denominator = pATI->ClockDescriptor.MinM *
-                pATI->XCLKReferenceDivider * pATI->ReferenceDenominator;
-
-            {
-                Denominator *= pATI->bitsPerPixel / 4;
-            }
-
-            i = (6 - 2) - pATI->XCLKPostDivider;
-
-            i = (ATIDivide(Numerator, Denominator, i, -1) / 1000) * 1000;
-            if (i < ATIClockRange.maxClock)
-                ATIClockRange.maxClock = i;
-        }
-    }
-
-    /*
-     * Assume an internal DAC can handle whatever frequency the internal PLL
-     * can produce (with the reference divider set by BIOS initialisation), but
-     * default maxClock to a lower chip-specific default.
-     */
-    if ((pATI->DAC & ~0x0FU) == ATI_DAC_INTERNAL)
-    {
-        int DacSpeed;
-        switch (pATI->bitsPerPixel)
-        {
-            case 15:
-            case 16:
-                DacSpeed = pGDev->dacSpeeds[DAC_BPP16];
-                break;
-
-            case 24:
-                DacSpeed = pGDev->dacSpeeds[DAC_BPP24];
-                break;
-
-            case 32:
-                DacSpeed = pGDev->dacSpeeds[DAC_BPP32];
-                break;
-
-            default:
-                DacSpeed = 0;
-                break;
-        }
-        if (!DacSpeed)
-            DacSpeed = pGDev->dacSpeeds[DAC_BPP8];
-        if (DacSpeed < ATIClockRange.maxClock)
-        {
-            DefaultmaxClock = 135000;
-
-            if (pATI->depth > 8)
-                DefaultmaxClock = 80000;
-
-            if ((pATI->Chip >= ATI_CHIP_264VTB) &&
-                (pATI->Chip != ATI_CHIP_Mach64))
-            {
-                if ((pATI->Chip >= ATI_CHIP_264VT4) &&
-                    (pATI->Chip != ATI_CHIP_264LTPRO))
-                    DefaultmaxClock = 230000;
-                else if (pATI->Chip >= ATI_CHIP_264VT3)
-                    DefaultmaxClock = 200000;
-                else
-                    DefaultmaxClock = 170000;
-            }
-            if (DacSpeed > DefaultmaxClock)
-                ATIClockRange.maxClock = DacSpeed;
-            else if (DefaultmaxClock < ATIClockRange.maxClock)
-                ATIClockRange.maxClock = DefaultmaxClock;
-        }
-    }
-    else
-    {
-        switch(pATI->DAC)
-        {
-            case ATI_DAC_STG1700:
-            case ATI_DAC_STG1702:
-            case ATI_DAC_STG1703:
-                DefaultmaxClock = 110000;
-                break;
-
-            case ATI_DAC_IBMRGB514:
-                pATI->maxClock = 220000;
-                {
-                    DefaultmaxClock = 220000;
-                }
-                break;
-
-            default:
-
-#ifndef AVOID_CPIO
-
-                if (pATI->CPIO_VGAWonder && (pATI->VideoRAM < 1024))
-                {
-                    DefaultmaxClock =
-                        (GetBits(BIOSByte(0x44U), 0x04U) * 5000) + 40000;
-                }
-                else
-
-#endif /* AVOID_CPIO */
-
-                {
-                    DefaultmaxClock = 80000;
-                }
-
-                break;
-        }
-
-        if (DefaultmaxClock < ATIClockRange.maxClock)
-            ATIClockRange.maxClock = DefaultmaxClock;
-    }
-
-    /*
-     * Determine available pixel clock frequencies.
-     */
-
-    if ((pATI->ProgrammableClock <= ATI_CLOCK_FIXED) ||
-        (pATI->ProgrammableClock >= ATI_CLOCK_MAX))
-    {
-        xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-            "Unsupported or non-programmable clock generator.\n");
-        goto bail;
-    }
-
-    ATIClockPreInit(pScreenInfo, pATI);
-    Strategy = LOOKUP_BEST_REFRESH;
-
-    /*
-     * Mode validation.
-     */
-
-    if (pATI->Chip >= ATI_CHIP_264CT)
-    {
-        minPitch = 8;
-    }
-    else
-    {
-        minPitch = 16;
-    }
-
-    pitchInc = minPitch * pATI->bitsPerPixel;
-
-    pScreenInfo->maxHValue = (MaxBits(CRTC_H_TOTAL) + 1) << 3;
-
-    if (pATI->Chip < ATI_CHIP_264VT)
-    {
-        /*
-         * ATI finally fixed accelerated doublescanning in the 264VT
-         * and later.  On 88800's, the bit is documented to exist, but
-         * only doubles the vertical timings.  On the 264CT and 264ET,
-         * the bit is ignored.
-         */
-        ATIClockRange.doubleScanAllowed = FALSE;
-
-        /* CRTC_H_TOTAL is one bit narrower */
-        pScreenInfo->maxHValue >>= 1;
-    }
-
-    pScreenInfo->maxVValue = MaxBits(CRTC_V_TOTAL) + 1;
-
-    maxPitch = minPitch * MaxBits(CRTC_PITCH);
-
-    if (pATI->OptionAccel)
-    {
-        /*
-         * Set engine restrictions on coordinate space.  Use maxPitch for the
-         * horizontal and maxHeight for the vertical.
-         */
-        if (maxPitch > (ATIMach64MaxX / pATI->XModifier))
-            maxPitch = ATIMach64MaxX / pATI->XModifier;
-
-        maxHeight = ATIMach64MaxY;
-
-        /*
-         * For SGRAM & WRAM adapters, the display engine limits the pitch to
-         * multiples of 64 bytes.
-         */
-        if ((pATI->Chip >= ATI_CHIP_264CT) &&
-            ((pATI->Chip >= ATI_CHIP_264VTB) ||
-             (pATI->MemoryType >= MEM_264_SGRAM)))
-            pitchInc = pATI->XModifier * (64 * 8);
-    }
-
-    if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))
-    {
-        /*
-         * Given LCD modes are more tightly controlled than CRT modes, allow
-         * the user the option of not specifying a panel's horizontal sync
-         * and/or vertical refresh tolerances.
-         */
-        Strategy |= LOOKUP_OPTIONAL_TOLERANCES;
-
-        if (ModeType == M_T_BUILTIN)
-        {
-            /*
-             * Add a mode to the end of the monitor's list for the panel's
-             * native resolution.
-             */
-            pMode = (DisplayModePtr)xnfcalloc(1, SizeOf(DisplayModeRec));
-            pMode->name = "Native panel mode";
-            pMode->type = M_T_BUILTIN;
-            pMode->Clock = pATI->LCDClock;
-            pMode->HDisplay = pATI->LCDHorizontal;
-            pMode->VDisplay = pATI->LCDVertical;
-
-            /*
-             * These timings are bogus, but enough to survive sync tolerance
-             * checks.
-             */
-            pMode->HSyncStart = pMode->HDisplay;
-            pMode->HSyncEnd = pMode->HSyncStart + minPitch;
-            pMode->HTotal = pMode->HSyncEnd + minPitch;
-            pMode->VSyncStart = pMode->VDisplay;
-            pMode->VSyncEnd = pMode->VSyncStart + 1;
-            pMode->VTotal = pMode->VSyncEnd + 1;
-
-            pMode->CrtcHDisplay = pMode->HDisplay;
-            pMode->CrtcHBlankStart = pMode->HDisplay;
-            pMode->CrtcHSyncStart = pMode->HSyncStart;
-            pMode->CrtcHSyncEnd = pMode->HSyncEnd;
-            pMode->CrtcHBlankEnd = pMode->HTotal;
-            pMode->CrtcHTotal = pMode->HTotal;
-
-            pMode->CrtcVDisplay = pMode->VDisplay;
-            pMode->CrtcVBlankStart = pMode->VDisplay;
-            pMode->CrtcVSyncStart = pMode->VSyncStart;
-            pMode->CrtcVSyncEnd = pMode->VSyncEnd;
-            pMode->CrtcVBlankEnd = pMode->VTotal;
-            pMode->CrtcVTotal = pMode->VTotal;
-
-            if (!pScreenInfo->monitor->Modes)
-            {
-                pScreenInfo->monitor->Modes = pMode;
-            }
-            else
-            {
-                pScreenInfo->monitor->Last->next = pMode;
-                pMode->prev = pScreenInfo->monitor->Last;
-            }
-
-            pScreenInfo->monitor->Last = pMode;
-        }
-
-        /*
-         * Defeat Xconfigurator brain damage.  Ignore all HorizSync and
-         * VertRefresh specifications.  For now, this does not take
-         * SYNC_TOLERANCE into account.
-         */
-        if (pScreenInfo->monitor->nHsync > 0)
-        {
-            double hsync = (double)pATI->LCDClock /
-                           (pATI->LCDHorizontal + pATI->LCDHBlankWidth);
-
-            for (i = 0;  ;  i++)
-            {
-                if (i >= pScreenInfo->monitor->nHsync)
-                {
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
-                        "Conflicting XF86Config HorizSync specification(s)"
-                        " ignored.\n");
-                    break;
-                }
-
-                if ((hsync >= pScreenInfo->monitor->hsync[i].lo) &&
-                    (hsync <= pScreenInfo->monitor->hsync[i].hi))
-                {
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                        "Extraneous XF86Config HorizSync specification(s)"
-                        " ignored.\n");
-                    break;
-                }
-            }
-
-            pScreenInfo->monitor->nHsync = 0;
-        }
-
-        if (pScreenInfo->monitor->nVrefresh > 0)
-        {
-            double vrefresh = ((double)pATI->LCDClock * 1000.0) /
-                              ((pATI->LCDHorizontal + pATI->LCDHBlankWidth) *
-                               (pATI->LCDVertical + pATI->LCDVBlankWidth));
-
-            for (i = 0;  ;  i++)
-            {
-                if (i >= pScreenInfo->monitor->nVrefresh)
-                {
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_NOTICE,
-                        "Conflicting XF86Config VertRefresh specification(s)"
-                        " ignored.\n");
-                    break;
-                }
-
-                if ((vrefresh >= pScreenInfo->monitor->vrefresh[i].lo) &&
-                    (vrefresh <= pScreenInfo->monitor->vrefresh[i].hi))
-                {
-                    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                        "Extraneous XF86Config VertRefresh specification(s)"
-                        " ignored.\n");
-                    break;
-                }
-            }
-
-            pScreenInfo->monitor->nVrefresh = 0;
-        }
-    }
-
-    i = xf86ValidateModes(pScreenInfo,
-            pScreenInfo->monitor->Modes, pScreenInfo->display->modes,
-            &ATIClockRange, NULL, minPitch, maxPitch,
-            pitchInc, 0, maxHeight,
-            pScreenInfo->display->virtualX, pScreenInfo->display->virtualY,
-            ApertureSize, Strategy);
-    if (i <= 0)
-        goto bail;
-
-    /* Remove invalid modes */
-    xf86PruneDriverModes(pScreenInfo);
-
-    /* Set current mode to the first in the list */
-    pScreenInfo->currentMode = pScreenInfo->modes;
-
-    /* Print mode list */
-    xf86PrintModes(pScreenInfo);
-
-    /* Set display resolution */
-    xf86SetDpi(pScreenInfo, 0, 0);
-
-    /* Load required modules */
-    if (!ATILoadModules(pScreenInfo, pATI))
-        goto bail;
-
-    pATI->displayWidth = pScreenInfo->displayWidth;
-
-    /* Initialise for panning */
-    ATIAdjustPreInit(pATI);
-
-    /*
-     * Warn about modes that are too small, or not aligned, to scroll to the
-     * bottom right corner of the virtual screen.
-     */
-    MinX = pScreenInfo->virtualX - pATI->AdjustMaxX;
-    MinY = pScreenInfo->virtualY - pATI->AdjustMaxY;
-
-    pMode = pScreenInfo->modes;
-    do
-    {
-        if ((pMode->VDisplay <= MinY) &&
-            ((pMode->VDisplay < MinY) || (pMode->HDisplay < MinX)))
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "Mode \"%s\" too small to scroll to bottom right corner of"
-                " virtual resolution.\n", pMode->name);
-        else if ((pMode->HDisplay & ~pATI->AdjustMask) / pScreenInfo->xInc)
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "Mode \"%s\" cannot scroll to bottom right corner of virtual"
-                " resolution.\n Horizontal dimension not a multiple of %ld.\n",
-                pMode->name, ~pATI->AdjustMask + 1);
-    } while ((pMode = pMode->next) != pScreenInfo->modes);
-
-    /* Initialise XVideo extension support */
-    ATIXVPreInit(pATI);
-
-    /* Initialise CRTC code */
-    ATIModePreInit(pScreenInfo, pATI, &pATI->NewHW);
-
-    /* Set up for I2C */
-    ATII2CPreInit(pScreenInfo, pATI);
-
-    if (!pScreenInfo->chipset || !*pScreenInfo->chipset)
-        pScreenInfo->chipset = "mach64";
-
-    PreInitSuccess = TRUE;
-
-bail:
-    ATILock(pATI);
-
-bail_locked:
-    ATIPrintNoiseIfRequested(pATI, BIOS, BIOSSize);
-    ATIUnmapApertures(pScreenInfo->scrnIndex, pATI);
-
-    return PreInitSuccess;
-}
diff --git a/src/atipreinit.h b/src/atipreinit.h
deleted file mode 100644
index cd150c7..0000000
--- a/src/atipreinit.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 1999 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIPREINIT_H___
-#define ___ATIPREINIT_H___ 1
-
-#include "xf86str.h"
-
-extern Bool ATIPreInit(ScrnInfoPtr, int);
-
-#endif /* ___ATIPREINIT_H___ */
diff --git a/src/atiprint.c b/src/atiprint.c
deleted file mode 100644
index 3a1debb..0000000
--- a/src/atiprint.c
+++ /dev/null
@@ -1,784 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include "ati.h"
-#include "atichip.h"
-#include "atidac.h"
-#include "atimach64io.h"
-#include "atiprint.h"
-#include "atiwonderio.h"
-
-/*
- * ATIPrintBIOS --
- *
- * Display various parts of the BIOS when the server is invoked with -verbose.
- */
-void
-ATIPrintBIOS
-(
-    const CARD8        *BIOS,
-    const unsigned int Length   /* A multiple of 512 */
-)
-{
-    unsigned char *Char = NULL;
-    unsigned int  Index;
-    unsigned char Printable[17];
-
-    if (xf86GetVerbosity() <= 4)
-        return;
-
-    (void)memset(Printable, 0, SizeOf(Printable));
-
-    xf86ErrorFVerb(5, "\n BIOS image:");
-
-    for (Index = 0;  Index < Length;  Index++)
-    {
-        if (!(Index & (4U - 1U)))
-        {
-            if (!(Index & (16U - 1U)))
-            {
-                if (Printable[0])
-                    xf86ErrorFVerb(5, "  |%s|", Printable);
-                Char = Printable;
-                xf86ErrorFVerb(5, "\n 0x%08X: ", Index);
-            }
-            xf86ErrorFVerb(5, " ");
-        }
-        xf86ErrorFVerb(5, "%02X", BIOS[Index]);
-        if (isprint(BIOS[Index]))
-            *Char++ = BIOS[Index];
-        else
-            *Char++ = '.';
-    }
-
-    xf86ErrorFVerb(5, "  |%s|\n", Printable);
-}
-
-#ifndef AVOID_CPIO
-
-/*
- * ATIPrintIndexedRegisters --
- *
- * Display a set of indexed byte-size registers when the server is invoked with
- * -verbose.
- */
-static void
-ATIPrintIndexedRegisters
-(
-    const IOADDRESS Port,
-    const CARD8     StartIndex,
-    const CARD8     EndIndex,
-    const char      *Name,
-    const IOADDRESS GenS1
-)
-{
-    int Index;
-
-    xf86ErrorFVerb(4, "\n %s register values:", Name);
-    for (Index = StartIndex;  Index < EndIndex;  Index++)
-    {
-        if (!(Index & (4U - 1U)))
-        {
-            if (!(Index & (16U - 1U)))
-                xf86ErrorFVerb(4, "\n 0x%02X: ", Index);
-            xf86ErrorFVerb(4, " ");
-        }
-        if (Port == ATTRX)
-            (void)inb(GenS1);           /* Reset flip-flop */
-        xf86ErrorFVerb(4, "%02X", GetReg(Port, Index));
-    }
-
-    if (Port == ATTRX)
-    {
-        (void)inb(GenS1);               /* Reset flip-flop */
-        outb(ATTRX, 0x20U);             /* Turn on PAS bit */
-    }
-
-    xf86ErrorFVerb(4, "\n");
-}
-
-#endif /* AVOID_CPIO */
-
-/*
- * ATIMach64PrintRegisters --
- *
- * Display a Mach64's main register bank when the server is invoked with
- * -verbose.
- */
-static void
-ATIMach64PrintRegisters
-(
-    ATIPtr     pATI,
-    CARD8      *crtc,
-    const char *Description
-)
-{
-    CARD32 IOValue;
-    CARD8 dac_read, dac_mask, dac_data, dac_write;
-    int Index, Limit;
-
-#ifndef AVOID_CPIO
-
-    int Step;
-
-#endif /* AVOID_CPIO */
-
-    xf86ErrorFVerb(4, "\n Mach64 %s register values:", Description);
-
-#ifdef AVOID_CPIO
-
-    if (pATI->pBlock[1])
-        Limit = DWORD_SELECT;
-    else
-        Limit = MM_IO_SELECT;
-
-    for (Index = 0;  Index <= Limit;  Index += UnitOf(MM_IO_SELECT))
-    {
-        if (!(Index & SetBits(3, MM_IO_SELECT)))
-            xf86ErrorFVerb(4, "\n 0x%04X: ", Index);
-        if (Index == (DAC_REGS & DWORD_SELECT))
-        {
-            dac_read = in8(DAC_REGS + 3);
-            DACDelay;
-            dac_mask = in8(DAC_REGS + 2);
-            DACDelay;
-            dac_data = in8(DAC_REGS + 1);
-            DACDelay;
-            dac_write = in8(DAC_REGS + 0);
-            DACDelay;
-
-            xf86ErrorFVerb(4, " %02X%02X%02X%02X",
-                dac_read, dac_mask, dac_data, dac_write);
-
-            out8(DAC_REGS + 2, dac_mask);
-            DACDelay;
-            out8(DAC_REGS + 3, dac_read);
-            DACDelay;
-        }
-        else
-        {
-            IOValue = inm(Index);
-
-            if ((Index == (CRTC_GEN_CNTL & DWORD_SELECT)) &&
-                (IOValue & CRTC_EXT_DISP_EN))
-                *crtc = ATI_CRTC_MACH64;
-
-            xf86ErrorFVerb(4, " %08lX", (unsigned long)IOValue);
-        }
-    }
-
-#else /* AVOID_CPIO */
-
-    Limit = ATIIOPort(IOPortTag(0x1FU, 0x3FU));
-    Step = ATIIOPort(IOPortTag(0x01U, 0x01U)) - pATI->CPIOBase;
-    for (Index = pATI->CPIOBase;  Index <= Limit;  Index += Step)
-    {
-        if (!(((Index - pATI->CPIOBase) / Step) & 0x03U))
-            xf86ErrorFVerb(4, "\n 0x%04X: ", Index);
-        if (Index == (int)ATIIOPort(DAC_REGS))
-        {
-            dac_read = in8(DAC_REGS + 3);
-            DACDelay;
-            dac_mask = in8(DAC_REGS + 2);
-            DACDelay;
-            dac_data = in8(DAC_REGS + 1);
-            DACDelay;
-            dac_write = in8(DAC_REGS + 0);
-            DACDelay;
-
-            xf86ErrorFVerb(4, " %02X%02X%02X%02X",
-                dac_read, dac_mask, dac_data, dac_write);
-
-            out8(DAC_REGS + 2, dac_mask);
-            DACDelay;
-            out8(DAC_REGS + 3, dac_read);
-            DACDelay;
-        }
-        else
-        {
-            IOValue = inl(Index);
-
-            if ((Index == (int)ATIIOPort(CRTC_GEN_CNTL)) &&
-                (IOValue & CRTC_EXT_DISP_EN))
-                *crtc = ATI_CRTC_MACH64;
-
-            xf86ErrorFVerb(4, " %08lX", (unsigned long)IOValue);
-        }
-    }
-
-#endif /* AVOID_CPIO */
-
-    xf86ErrorFVerb(4, "\n");
-}
-
-/*
- * ATIMach64PrintPLLRegisters --
- *
- * Display an integrated Mach64's PLL registers when the server is invoked with
- * -verbose.
- */
-static void
-ATIMach64PrintPLLRegisters
-(
-    ATIPtr pATI
-)
-{
-    int Index, Limit;
-    CARD8 PLLReg[MaxBits(PLL_ADDR) + 1];
-
-    for (Limit = 0;  Limit < SizeOf(PLLReg);  Limit++)
-        PLLReg[Limit] = ATIMach64GetPLLReg(Limit);
-
-    /* Determine how many PLL registers there really are */
-    while ((Limit = Limit >> 1))
-        for (Index = 0;  Index < Limit;  Index++)
-            if (PLLReg[Index] != PLLReg[Index + Limit])
-                goto FoundLimit;
-FoundLimit:
-    Limit <<= 1;
-
-    xf86ErrorFVerb(4, "\n Mach64 PLL register values:");
-    for (Index = 0;  Index < Limit;  Index++)
-    {
-        if (!(Index & 3))
-        {
-            if (!(Index & 15))
-                xf86ErrorFVerb(4, "\n 0x%02X: ", Index);
-            xf86ErrorFVerb(4, " ");
-        }
-        xf86ErrorFVerb(4, "%02X", PLLReg[Index]);
-    }
-
-    xf86ErrorFVerb(4, "\n");
-}
-
-/*
- * ATIRGB514PrintRegisters --
- *
- * Display IBM RGB 514 registers when the server is invoked with -verbose.
- */
-static void
-ATIRGB514PrintRegisters
-(
-    ATIPtr pATI
-)
-{
-    CARD32 crtc_gen_cntl, dac_cntl;
-    CARD8  index_lo, index_hi, index_ctl;
-    int    Index;
-
-    /* Temporarily switch to Mach64 CRTC */
-    crtc_gen_cntl = inr(CRTC_GEN_CNTL);
-    if (!(crtc_gen_cntl & CRTC_EXT_DISP_EN))
-        outr(CRTC_GEN_CNTL, crtc_gen_cntl | CRTC_EXT_DISP_EN);
-
-    /* Temporarily switch to IBM RGB 514 registers */
-    dac_cntl = inr(DAC_CNTL);
-    outr(DAC_CNTL, (dac_cntl & ~DAC_EXT_SEL_RS3) | DAC_EXT_SEL_RS2);
-
-    index_lo = in8(M64_DAC_WRITE);
-    index_hi = in8(M64_DAC_DATA);
-    index_ctl = in8(M64_DAC_READ);
-
-    out8(M64_DAC_WRITE, 0x00U);
-    out8(M64_DAC_DATA, 0x00U);
-    out8(M64_DAC_READ, 0x01U);  /* Auto-increment */
-
-    xf86ErrorFVerb(4, "\n IBM RGB 514 registers:");
-    for (Index = 0;  Index < 0x0800;  Index++)
-    {
-        if (!(Index & 3))
-        {
-            if (!(Index & 15))
-            {
-                xf86ErrorFVerb(4, "\n 0x%04X: ", Index);
-
-                /* Need to rewrite index every so often... */
-                if ((Index == 0x0100) || (Index == 0x0500))
-                {
-                    out8(M64_DAC_WRITE, 0x00U);
-                    out8(M64_DAC_DATA, Index >> 8);
-                }
-            }
-
-            xf86ErrorFVerb(4, " ");
-        }
-
-        xf86ErrorFVerb(4, "%02X", in8(M64_DAC_MASK));
-    }
-
-    /* Restore registers */
-    out8(M64_DAC_WRITE, index_lo);
-    out8(M64_DAC_DATA, index_hi);
-    out8(M64_DAC_READ, index_ctl);
-    outr(DAC_CNTL, dac_cntl);
-    if (!(crtc_gen_cntl & CRTC_EXT_DISP_EN))
-        outr(CRTC_GEN_CNTL, crtc_gen_cntl);
-
-    xf86ErrorFVerb(4, "\n");
-}
-
-/*
- * ATIPrintRegisters --
- *
- * Display various registers when the server is invoked with -verbose.
- */
-void
-ATIPrintRegisters
-(
-    ATIPtr pATI
-)
-{
-    int          Index;
-    CARD32       lcd_index, tv_out_index, lcd_gen_ctrl;
-    CARD8        dac_read, dac_mask, dac_write;
-    CARD8        crtc;
-
-#ifndef AVOID_CPIO
-
-    CARD8 genmo;
-
-    crtc = ATI_CRTC_VGA;
-
-    if (pATI->VGAAdapter)
-    {
-        xf86ErrorFVerb(4, "\n Miscellaneous output register value:  0x%02X.\n",
-            genmo = inb(R_GENMO));
-
-        if (genmo & 0x01U)
-        {
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                lcd_gen_ctrl = inr(LCD_GEN_CTRL);
-
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl & ~SHADOW_RW_EN);
-                ATIPrintIndexedRegisters(CRTX(ColourIOBase), 0, 64,
-                    "Non-shadow colour CRT controller", 0);
-
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl | SHADOW_RW_EN);
-                ATIPrintIndexedRegisters(CRTX(ColourIOBase), 0, 64,
-                    "Shadow colour CRT controller", 0);
-
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl);
-            }
-            else if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                     (pATI->Chip == ATI_CHIP_264XL) ||
-                     (pATI->Chip == ATI_CHIP_MOBILITY))
-            {
-                lcd_index = inr(LCD_INDEX);
-                lcd_gen_ctrl = ATIMach64GetLCDReg(LCD_GEN_CNTL);
-
-                ATIMach64PutLCDReg(LCD_GEN_CNTL,
-                    lcd_gen_ctrl & ~(CRTC_RW_SELECT | SHADOW_RW_EN));
-                ATIPrintIndexedRegisters(CRTX(ColourIOBase), 0, 64,
-                    "Non-shadow colour CRT controller", 0);
-
-                ATIMach64PutLCDReg(LCD_GEN_CNTL,
-                    (lcd_gen_ctrl & ~CRTC_RW_SELECT) | SHADOW_RW_EN);
-                ATIPrintIndexedRegisters(CRTX(ColourIOBase), 0, 64,
-                    "Shadow colour CRT controller", 0);
-
-                ATIMach64PutLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
-                outr(LCD_INDEX, lcd_index);
-            }
-            else
-            {
-                ATIPrintIndexedRegisters(CRTX(ColourIOBase), 0, 64,
-                    "Colour CRT controller", 0);
-            }
-
-            ATIPrintIndexedRegisters(ATTRX, 0, 32, "Attribute controller",
-                GENS1(ColourIOBase));
-        }
-        else
-        {
-            if (pATI->Chip == ATI_CHIP_264LT)
-            {
-                lcd_gen_ctrl = inr(LCD_GEN_CTRL);
-
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl & ~SHADOW_RW_EN);
-                ATIPrintIndexedRegisters(CRTX(MonochromeIOBase), 0, 64,
-                    "Non-shadow monochrome CRT controller", 0);
-
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl | SHADOW_RW_EN);
-                ATIPrintIndexedRegisters(CRTX(MonochromeIOBase), 0, 64,
-                    "Shadow monochrome CRT controller", 0);
-
-                outr(LCD_GEN_CTRL, lcd_gen_ctrl);
-            }
-            else if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-                     (pATI->Chip == ATI_CHIP_264XL) ||
-                     (pATI->Chip == ATI_CHIP_MOBILITY))
-            {
-                lcd_index = inr(LCD_INDEX);
-                lcd_gen_ctrl = ATIMach64GetLCDReg(LCD_GEN_CNTL);
-
-                ATIMach64PutLCDReg(LCD_GEN_CNTL,
-                    lcd_gen_ctrl & ~(CRTC_RW_SELECT | SHADOW_RW_EN));
-                ATIPrintIndexedRegisters(CRTX(MonochromeIOBase), 0, 64,
-                    "Non-shadow monochrome CRT controller", 0);
-
-                ATIMach64PutLCDReg(LCD_GEN_CNTL,
-                    (lcd_gen_ctrl & ~CRTC_RW_SELECT) | SHADOW_RW_EN);
-                ATIPrintIndexedRegisters(CRTX(MonochromeIOBase), 0, 64,
-                    "Shadow monochrome CRT controller", 0);
-
-                ATIMach64PutLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
-                outr(LCD_INDEX, lcd_index);
-            }
-            else
-            {
-                ATIPrintIndexedRegisters(CRTX(MonochromeIOBase), 0, 64,
-                    "Monochrome CRT controller", 0);
-            }
-
-            ATIPrintIndexedRegisters(ATTRX, 0, 32, "Attribute controller",
-                GENS1(MonochromeIOBase));
-        }
-
-        ATIPrintIndexedRegisters(GRAX, 0, 16, "Graphics controller", 0);
-        ATIPrintIndexedRegisters(SEQX, 0, 8, "Sequencer", 0);
-
-        if (pATI->CPIO_VGAWonder)
-            ATIPrintIndexedRegisters(pATI->CPIO_VGAWonder, 0x80U, 0xC0U,
-                "ATI extended VGA", 0);
-    }
-
-#endif /* AVOID_CPIO */
-
-    if (pATI->Chip == ATI_CHIP_264LT)
-    {
-        lcd_gen_ctrl = inr(LCD_GEN_CTRL);
-
-        outr(LCD_GEN_CTRL, lcd_gen_ctrl & ~SHADOW_RW_EN);
-        ATIMach64PrintRegisters(pATI, &crtc, "non-shadow");
-
-        outr(LCD_GEN_CTRL, lcd_gen_ctrl | SHADOW_RW_EN);
-        ATIMach64PrintRegisters(pATI, &crtc, "shadow");
-
-        outr(LCD_GEN_CTRL, lcd_gen_ctrl);
-
-        ATIMach64PrintPLLRegisters(pATI);
-    }
-    else if ((pATI->Chip == ATI_CHIP_264LTPRO) ||
-             (pATI->Chip == ATI_CHIP_264XL) ||
-             (pATI->Chip == ATI_CHIP_MOBILITY))
-    {
-        lcd_index = inr(LCD_INDEX);
-        lcd_gen_ctrl = ATIMach64GetLCDReg(LCD_GEN_CNTL);
-
-        ATIMach64PutLCDReg(LCD_GEN_CNTL,
-            lcd_gen_ctrl & ~(CRTC_RW_SELECT | SHADOW_RW_EN));
-        ATIMach64PrintRegisters(pATI, &crtc, "non-shadow");
-
-        ATIMach64PutLCDReg(LCD_GEN_CNTL,
-            (lcd_gen_ctrl & ~CRTC_RW_SELECT) | SHADOW_RW_EN);
-        ATIMach64PrintRegisters(pATI, &crtc, "shadow");
-
-        if (pATI->Chip != ATI_CHIP_264XL)
-        {
-            ATIMach64PutLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl | CRTC_RW_SELECT);
-            ATIMach64PrintRegisters(pATI, &crtc, "secondary");
-        }
-
-        ATIMach64PutLCDReg(LCD_GEN_CNTL, lcd_gen_ctrl);
-
-        ATIMach64PrintPLLRegisters(pATI);
-
-        xf86ErrorFVerb(4, "\n LCD register values:");
-        for (Index = 0;  Index < 64;  Index++)
-        {
-            if (!(Index & 3))
-                xf86ErrorFVerb(4, "\n 0x%02X: ", Index);
-            xf86ErrorFVerb(4, " %08X", ATIMach64GetLCDReg(Index));
-        }
-
-        outr(LCD_INDEX, lcd_index);
-
-        tv_out_index = inr(TV_OUT_INDEX);
-
-        xf86ErrorFVerb(4, "\n\n TV_OUT register values:");
-        for (Index = 0;  Index < 256;  Index++)
-        {
-            if (!(Index & 3))
-                xf86ErrorFVerb(4, "\n 0x%02X: ", Index);
-            xf86ErrorFVerb(4, " %08X", ATIMach64GetTVReg(Index));
-        }
-
-        outr(TV_OUT_INDEX, tv_out_index);
-
-        xf86ErrorFVerb(4, "\n");
-    }
-    else
-    {
-
-#ifdef AVOID_CPIO
-
-        ATIMach64PrintRegisters(pATI, &crtc, "MMIO");
-
-#else /* AVOID_CPIO */
-
-        ATIMach64PrintRegisters(pATI, &crtc,
-            (pATI->CPIODecoding == SPARSE_IO) ? "sparse" : "block");
-
-#endif /* AVOID_CPIO */
-
-        if (pATI->Chip >= ATI_CHIP_264CT)
-            ATIMach64PrintPLLRegisters(pATI);
-
-        if (pATI->DAC == ATI_DAC_IBMRGB514)
-            ATIRGB514PrintRegisters(pATI);
-    }
-
-#ifdef AVOID_CPIO
-
-    dac_read = in8(M64_DAC_READ);
-    DACDelay;
-    dac_write = in8(M64_DAC_WRITE);
-    DACDelay;
-    dac_mask = in8(M64_DAC_MASK);
-    DACDelay;
-
-    xf86ErrorFVerb(4, "\n"
-               " DAC read index:   0x%02X\n"
-               " DAC write index:  0x%02X\n"
-               " DAC mask:         0x%02X\n\n"
-               " DAC colour lookup table:",
-        dac_read, dac_write, dac_mask);
-
-    out8(M64_DAC_MASK, 0xFFU);
-    DACDelay;
-    out8(M64_DAC_READ, 0x00U);
-    DACDelay;
-
-    for (Index = 0;  Index < 256;  Index++)
-    {
-        if (!(Index & 3))
-            xf86ErrorFVerb(4, "\n 0x%02X:", Index);
-        xf86ErrorFVerb(4, "  %02X", in8(M64_DAC_DATA));
-        DACDelay;
-        xf86ErrorFVerb(4, " %02X", in8(M64_DAC_DATA));
-        DACDelay;
-        xf86ErrorFVerb(4, " %02X", in8(M64_DAC_DATA));
-        DACDelay;
-    }
-
-    out8(M64_DAC_MASK, dac_mask);
-    DACDelay;
-    out8(M64_DAC_READ, dac_read);
-    DACDelay;
-
-#else /* AVOID_CPIO */
-
-    ATISetDACIOPorts(pATI, crtc);
-
-    dac_read = inb(pATI->CPIO_DAC_READ);
-    DACDelay;
-    dac_write = inb(pATI->CPIO_DAC_WRITE);
-    DACDelay;
-    dac_mask = inb(pATI->CPIO_DAC_MASK);
-    DACDelay;
-
-    xf86ErrorFVerb(4, "\n"
-               " DAC read index:   0x%02X\n"
-               " DAC write index:  0x%02X\n"
-               " DAC mask:         0x%02X\n\n"
-               " DAC colour lookup table:",
-        dac_read, dac_write, dac_mask);
-
-    outb(pATI->CPIO_DAC_MASK, 0xFFU);
-    DACDelay;
-    outb(pATI->CPIO_DAC_READ, 0x00U);
-    DACDelay;
-
-    for (Index = 0;  Index < 256;  Index++)
-    {
-        if (!(Index & 3))
-            xf86ErrorFVerb(4, "\n 0x%02X:", Index);
-        xf86ErrorFVerb(4, "  %02X", inb(pATI->CPIO_DAC_DATA));
-        DACDelay;
-        xf86ErrorFVerb(4, " %02X", inb(pATI->CPIO_DAC_DATA));
-        DACDelay;
-        xf86ErrorFVerb(4, " %02X", inb(pATI->CPIO_DAC_DATA));
-        DACDelay;
-    }
-
-    outb(pATI->CPIO_DAC_MASK, dac_mask);
-    DACDelay;
-    outb(pATI->CPIO_DAC_READ, dac_read);
-    DACDelay;
-
-#endif /* AVOID_CPIO */
-
-    {
-        xf86ErrorFVerb(4, "\n\n PCI configuration register values:");
-        for (Index = 0;  Index < 256;  Index+= 4)
-        {
-            pciVideoPtr pVideo = pATI->PCIInfo;
-            uint32_t    data;
-
-            PCI_READ_LONG(pVideo, &data, Index);
-
-            if (!(Index & 15))
-                xf86ErrorFVerb(4, "\n 0x%02X: ", Index);
-            xf86ErrorFVerb(4, " 0x%08X", data);
-        }
-    }
-
-    xf86ErrorFVerb(4, "\n");
-
-#ifndef AVOID_CPIO
-
-    if (pATI->pBank)
-        xf86ErrorFVerb(4, "\n Banked aperture at 0x%0lX.",
-            (unsigned long)pATI->pBank);
-    else
-        xf86ErrorFVerb(4, "\n No banked aperture.");
-
-#endif /* AVOID_CPIO */
-
-    if (pATI->pMemory)
-    {
-        xf86ErrorFVerb(4, "\n Linear aperture at %p.\n", pATI->pMemory);
-    }
-
-    if (pATI->pBlock[0])
-    {
-        xf86ErrorFVerb(4, " Block 0 aperture at %p.\n", pATI->pBlock[0]);
-        if (inr(CONFIG_CHIP_ID) == pATI->config_chip_id)
-            xf86ErrorFVerb(4, " MMIO registers are correctly mapped.\n");
-        else
-            xf86ErrorFVerb(4, " MMIO mapping is in error!\n");
-        if (pATI->pBlock[1])
-            xf86ErrorFVerb(4, " Block 1 aperture at %p.\n",
-                pATI->pBlock[1]);
-    }
-    else
-    {
-        xf86ErrorFVerb(4, " No MMIO aperture.\n");
-    }
-
-    if (pATI->pCursorImage)
-        xf86ErrorFVerb(4, " Hardware cursor image aperture at %p.\n",
-            pATI->pCursorImage);
-    else
-        xf86ErrorFVerb(4, " No hardware cursor image aperture.\n");
-
-    xf86ErrorFVerb(4, "\n");
-}
-
-/*
- * A table to associate mode attributes with character strings.
- */
-static const SymTabRec ModeAttributeNames[] =
-{
-    {V_PHSYNC,    "+hsync"},
-    {V_NHSYNC,    "-hsync"},
-    {V_PVSYNC,    "+vsync"},
-    {V_NVSYNC,    "-vsync"},
-    {V_PCSYNC,    "+csync"},
-    {V_NCSYNC,    "-csync"},
-    {V_INTERLACE, "interlace"},
-    {V_DBLSCAN,   "doublescan"},
-    {V_CSYNC,     "composite"},
-    {V_DBLCLK,    "dblclk"},
-    {V_CLKDIV2,   "clkdiv2"},
-    {0,           NULL}
-};
-
-/*
- * ATIPrintMode --
- *
- * This function displays a mode's timing information.
- */
-void
-ATIPrintMode
-(
-    DisplayModePtr pMode
-)
-{
-    const SymTabRec *pSymbol  = ModeAttributeNames;
-    int             flags     = pMode->Flags;
-    double          mClock, hSync, vRefresh;
-
-    mClock = (double)pMode->SynthClock;
-    if (pMode->HSync > 0.0)
-        hSync = pMode->HSync;
-    else
-        hSync = mClock / pMode->HTotal;
-    if (pMode->VRefresh > 0.0)
-    {
-        vRefresh = pMode->VRefresh;
-    }
-    else
-    {
-        vRefresh = (hSync * 1000.0) / pMode->VTotal;
-        if (flags & V_INTERLACE)
-            vRefresh *= 2.0;
-        if (flags & V_DBLSCAN)
-            vRefresh /= 2.0;
-        if (pMode->VScan > 1)
-            vRefresh /= pMode->VScan;
-    }
-
-    xf86ErrorFVerb(4, " Dot clock:           %7.3f MHz\n", mClock / 1000.0);
-    xf86ErrorFVerb(4, " Horizontal sync:     %7.3f kHz\n", hSync);
-    xf86ErrorFVerb(4, " Vertical refresh:    %7.3f Hz (%s)\n", vRefresh,
-        (flags & V_INTERLACE) ? "I" : "NI");
-    if ((pMode->ClockIndex >= 0) && (pMode->ClockIndex < MAXCLOCKS))
-        xf86ErrorFVerb(4, " Clock index:         %d\n", pMode->ClockIndex);
-    xf86ErrorFVerb(4, " Horizontal timings:  %4d %4d %4d %4d\n"
-                      " Vertical timings:    %4d %4d %4d %4d\n",
-        pMode->HDisplay, pMode->HSyncStart, pMode->HSyncEnd, pMode->HTotal,
-        pMode->VDisplay, pMode->VSyncStart, pMode->VSyncEnd, pMode->VTotal);
-
-    if (flags & V_HSKEW)
-    {
-        flags &= ~V_HSKEW;
-        xf86ErrorFVerb(4, " Horizontal skew:     %4d\n", pMode->HSkew);
-    }
-
-    if (pMode->VScan >= 1)
-        xf86ErrorFVerb(4, " Vertical scan:       %4d\n", pMode->VScan);
-
-    xf86ErrorFVerb(4, " Flags:              ");
-    for (;  pSymbol->token;  pSymbol++)
-    {
-        if (flags & pSymbol->token)
-        {
-            xf86ErrorFVerb(4, " %s", pSymbol->name);
-            flags &= ~pSymbol->token;
-            if (!flags)
-                break;
-        }
-    }
-
-    xf86ErrorFVerb(4, "\n");
-}
diff --git a/src/atiprint.h b/src/atiprint.h
deleted file mode 100644
index 0a5a3ce..0000000
--- a/src/atiprint.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIPRINT_H___
-#define ___ATIPRINT_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-extern void ATIPrintBIOS(const CARD8 *, const unsigned int);
-extern void ATIPrintRegisters(ATIPtr);
-extern void ATIPrintMode(DisplayModePtr);
-
-#endif /* ___ATIPRINT_H___ */
diff --git a/src/atipriv.h b/src/atipriv.h
deleted file mode 100644
index 4a83af1..0000000
--- a/src/atipriv.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 1999 through 2003 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIPRIV_H___
-#define ___ATIPRIV_H___ 1
-
-/* Forward pointer definitions */
-typedef struct _ATIHWRec *ATIHWPtr;
-typedef struct _ATIRec   *ATIPtr;
-
-#endif /* ___ATIPRIV_H___ */
diff --git a/src/atiprobe.c b/src/atiprobe.c
deleted file mode 100644
index 5092073..0000000
--- a/src/atiprobe.c
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include <stdio.h>
-#include <stdint.h>
-
-#include "ati.h"
-#include "atibus.h"
-#include "atichip.h"
-#include "atimach64io.h"
-#include "atimach64version.h"
-#include "atiprobe.h"
-#include "atividmem.h"
-#include "atiwonderio.h"
-
-#ifndef AVOID_CPIO
-
-/*
- * ATIVGAWonderProbe --
- *
- * This function determines if ATI extended VGA registers can be accessed
- * through the I/O port specified by pATI->CPIO_VGAWonder.  If not, the
- * function resets pATI->CPIO_VGAWonder to zero.
- */
-static void
-ATIVGAWonderProbe
-(
-    pciVideoPtr pVideo,
-    ATIPtr      pATI
-)
-{
-    CARD8 IOValue1, IOValue2, IOValue3, IOValue4, IOValue5, IOValue6;
-
-            if (!pATI->OptionProbeSparse)
-            {
-                xf86Msg(X_WARNING,
-                    MACH64_NAME ":  Expected VGA Wonder capability at I/O port"
-                    " 0x%04lX will not be probed\n"
-                    "set option \"probe_sparse\" to force probing.\n",
-                    pATI->CPIO_VGAWonder);
-
-                pATI->CPIO_VGAWonder = 0;
-                return;
-            }
-
-            if (pVideo && !xf86IsPrimaryPci(pVideo) &&
-                (pATI->Chip <= ATI_CHIP_88800GXD))
-            {
-                /* Set up extended VGA register addressing */
-                PutReg(GRAX, 0x50U, GetByte(pATI->CPIO_VGAWonder, 0));
-                PutReg(GRAX, 0x51U, GetByte(pATI->CPIO_VGAWonder, 1) | 0x80U);
-            }
-            /*
-             * Register 0xBB is used by the BIOS to keep track of various
-             * things (monitor type, etc.).  Except for 18800-x's, register
-             * 0xBC must be zero and causes the adapter to enter a test mode
-             * when written to with a non-zero value.
-             */
-            IOValue1 = inb(pATI->CPIO_VGAWonder);
-            IOValue2 = ATIGetExtReg(IOValue1);
-            IOValue3 = ATIGetExtReg(0xBBU);
-            ATIPutExtReg(0xBBU, IOValue3 ^ 0xAAU);
-            IOValue4 = ATIGetExtReg(0xBBU);
-            ATIPutExtReg(0xBBU, IOValue3 ^ 0x55U);
-            IOValue5 = ATIGetExtReg(0xBBU);
-            ATIPutExtReg(0xBBU, IOValue3);
-            IOValue6 = ATIGetExtReg(0xBCU);
-            ATIPutExtReg(IOValue1, IOValue2);
-
-            if ((IOValue4 == (IOValue3 ^ 0xAAU)) &&
-                (IOValue5 == (IOValue3 ^ 0x55U)) &&
-                (IOValue6 == 0))
-            {
-                xf86MsgVerb(X_INFO, 3,
-                    MACH64_NAME ":  VGA Wonder at I/O port 0x%04lX detected.\n",
-                    pATI->CPIO_VGAWonder);
-            }
-            else
-            {
-                xf86Msg(X_WARNING,
-                    MACH64_NAME ":  Expected VGA Wonder capability at I/O port"
-                    " 0x%04lX was not detected.\n", pATI->CPIO_VGAWonder);
-                pATI->CPIO_VGAWonder = 0;
-            }
-}
-
-#endif /* AVOID_CPIO */
-
-/*
- * ATIMach64Detect --
- *
- * This function determines if a Mach64 is detectable at a particular base
- * address.
- */
-static Bool
-ATIMach64Detect
-(
-    ATIPtr            pATI,
-    const CARD16      ChipType,
-    const ATIChipType Chip
-)
-{
-    CARD32 IOValue, bus_cntl, gen_test_cntl;
-    Bool DetectSuccess = FALSE;
-
-    (void)ATIMapApertures(-1, pATI);    /* Ignore errors */
-
-#ifdef AVOID_CPIO
-
-    if (!pATI->pBlock[0])
-    {
-        ATIUnmapApertures(-1, pATI);
-        return FALSE;
-    }
-
-#endif /* AVOID_CPIO */
-
-    /* Make sure any Mach64 is not in some weird state */
-    bus_cntl = inr(BUS_CNTL);
-    if (Chip < ATI_CHIP_264VTB)
-        outr(BUS_CNTL,
-             (bus_cntl & ~(BUS_HOST_ERR_INT_EN | BUS_FIFO_ERR_INT_EN)) |
-             (BUS_HOST_ERR_INT | BUS_FIFO_ERR_INT));
-    else if (Chip < ATI_CHIP_264VT4)
-        outr(BUS_CNTL, (bus_cntl & ~BUS_HOST_ERR_INT_EN) | BUS_HOST_ERR_INT);
-
-    gen_test_cntl = inr(GEN_TEST_CNTL);
-    IOValue = gen_test_cntl &
-        (GEN_OVR_OUTPUT_EN | GEN_OVR_POLARITY | GEN_CUR_EN | GEN_BLOCK_WR_EN);
-    outr(GEN_TEST_CNTL, IOValue | GEN_GUI_EN);
-    outr(GEN_TEST_CNTL, IOValue);
-    outr(GEN_TEST_CNTL, IOValue | GEN_GUI_EN);
-
-    /* See if a Mach64 answers */
-    IOValue = inr(SCRATCH_REG0);
-
-    /* Test odd bits */
-    outr(SCRATCH_REG0, 0x55555555U);
-    if (inr(SCRATCH_REG0) == 0x55555555U)
-    {
-        /* Test even bits */
-        outr(SCRATCH_REG0, 0xAAAAAAAAU);
-        if (inr(SCRATCH_REG0) == 0xAAAAAAAAU)
-        {
-            /*
-             * *Something* has a R/W 32-bit register at this address.  Try to
-             * make sure it's a Mach64.  The following assumes that ATI will
-             * not be producing any more adapters that do not register
-             * themselves in PCI configuration space.
-             */
-            ATIMach64ChipID(pATI, ChipType);
-            if ((pATI->Chip != ATI_CHIP_Mach64) ||
-                (pATI->CPIODecoding == BLOCK_IO))
-                DetectSuccess = TRUE;
-        }
-    }
-
-    /* Restore clobbered register value */
-    outr(SCRATCH_REG0, IOValue);
-
-    /* If no Mach64 was detected, return now */
-    if (!DetectSuccess)
-    {
-        outr(GEN_TEST_CNTL, gen_test_cntl);
-        outr(BUS_CNTL, bus_cntl);
-        ATIUnmapApertures(-1, pATI);
-        return FALSE;
-    }
-
-    ATIUnmapApertures(-1, pATI);
-    return TRUE;
-}
-
-#ifdef AVOID_CPIO
-
-/*
- * ATIMach64Probe --
- *
- * This function looks for a Mach64 at a particular MMIO address and returns an
- * ATIRec if one is found.
- */
-static ATIPtr
-ATIMach64Probe
-(
-    ATIPtr            pATI,
-    pciVideoPtr       pVideo,
-    const ATIChipType Chip
-)
-{
-    CARD16 ChipType = PCI_DEV_DEVICE_ID(pVideo);
-
-        pATI->MMIOInLinear = FALSE;
-
-        /*
-         * Probe through auxiliary MMIO aperture if one exists.  Because such
-         * apertures can be enabled/disabled only through PCI, this probes no
-         * further.
-         */
-        if ((PCI_REGION_SIZE(pVideo, 2) >= (1 << 12)) &&
-            (pATI->Block0Base = PCI_REGION_BASE(pVideo, 2, REGION_MEM)))
-        {
-            pATI->Block0Base += 0x00000400U;
-            if (ATIMach64Detect(pATI, ChipType, Chip))
-                return pATI;
-
-            return NULL;
-        }
-
-        /*
-         * Probe through the primary MMIO aperture that exists at the tail end
-         * of the linear aperture.  Test for both 8MB and 4MB linear apertures.
-         */
-        if ((PCI_REGION_SIZE(pVideo, 0) >= (1 << 22)) &&
-            (pATI->Block0Base = PCI_REGION_BASE(pVideo, 0, REGION_MEM)))
-        {
-            pATI->MMIOInLinear = TRUE;
-
-            pATI->Block0Base += 0x007FFC00U;
-            if ((PCI_REGION_SIZE(pVideo, 0) >= (1 << 23)) &&
-                ATIMach64Detect(pATI, ChipType, Chip))
-                return pATI;
-
-            pATI->Block0Base -= 0x00400000U;
-            if (ATIMach64Detect(pATI, ChipType, Chip))
-                return pATI;
-        }
-
-    return NULL;
-}
-
-#else /* AVOID_CPIO */
-
-/*
- * ATIMach64Probe --
- *
- * This function looks for a Mach64 at a particular PIO address and returns an
- * ATIRec if one is found.
- */
-static ATIPtr
-ATIMach64Probe
-(
-    ATIPtr            pATI,
-    pciVideoPtr       pVideo,
-    const ATIChipType Chip
-)
-{
-    CARD32 IOValue;
-    CARD16 ChipType = PCI_DEV_DEVICE_ID(pVideo);
-
-        if ((pATI->CPIODecoding == BLOCK_IO) &&
-            (PCI_REGION_SIZE(pVideo, 1) < (1 << 8)))
-            return NULL;
-
-    if (!ATIMach64Detect(pATI, ChipType, Chip))
-    {
-        return NULL;
-    }
-
-    /*
-     * Determine VGA capability.  VGA can always be enabled on integrated
-     * controllers.  For the GX/CX, it's a board strap.
-     */
-    if (pATI->Chip >= ATI_CHIP_264CT)
-    {
-        pATI->VGAAdapter = TRUE;
-    }
-    else
-    {
-        IOValue = inr(CONFIG_STATUS64_0);
-        pATI->BusType = GetBits(IOValue, CFG_BUS_TYPE);
-        IOValue &= (CFG_VGA_EN | CFG_CHIP_EN);
-        if (pATI->Chip == ATI_CHIP_88800CX)
-            IOValue |= CFG_VGA_EN;
-        if (IOValue == (CFG_VGA_EN | CFG_CHIP_EN))
-        {
-            pATI->VGAAdapter = TRUE;
-            pATI->CPIO_VGAWonder = 0x01CEU;
-        }
-    }
-
-    return pATI;
-}
-
-static void
-ATIAssignVGA
-(
-    pciVideoPtr pVideo,
-    ATIPtr      pATI
-)
-{
-    if (pATI->CPIO_VGAWonder)
-    {
-        ATIVGAWonderProbe(pVideo, pATI);
-        if (!pATI->CPIO_VGAWonder)
-        {
-            /*
-             * Some adapters are reputed to append ATI extended VGA registers
-             * to the VGA Graphics controller registers.  In particular, 0x01CE
-             * cannot, in general, be used in a PCI environment due to routing
-             * of I/O through the bus tree.
-             */
-            pATI->CPIO_VGAWonder = GRAX;
-            ATIVGAWonderProbe(pVideo, pATI);
-        }
-    }
-}
-
-/*
- * ATIFindVGA --
- *
- * This function determines if a VGA associated with an ATI PCI adapter is
- * shareable.
- */
-static void
-ATIFindVGA
-(
-    pciVideoPtr pVideo,
-    ATIPtr      pATI
-)
-{
-        /*
-         * An ATI PCI adapter has been detected at this point, and its VGA, if
-         * any, is shareable.  Ensure the VGA isn't in sleep mode.
-         */
-        outb(GENENA, 0x16U);
-        outb(GENVS, 0x01U);
-        outb(GENENA, 0x0EU);
-
-    ATIAssignVGA(pVideo, pATI);
-}
-
-#endif /* AVOID_CPIO */
-
-/*
- * ATIMach64ProbeIO --
- *
- * This function determines the IO method and IO base of the ATI PCI adapter.
- */
-Bool
-ATIMach64ProbeIO
-(
-    pciVideoPtr pVideo,
-    ATIPtr      pATI
-)
-{
-    /* Next, look for sparse I/O Mach64's */
-    if (!PCI_REGION_SIZE(pVideo, 1))
-    {
-
-#ifndef AVOID_CPIO
-
-        static const IOADDRESS Mach64SparseIOBases[] = {
-            0x02ECU,
-            0x01CCU,
-            0x01C8U
-        };
-        uint32_t PciReg;
-        uint32_t j;
-
-#ifndef XSERVER_LIBPCIACCESS
-        pciConfigPtr pPCI = pVideo->thisCard;
-
-        if (pPCI == NULL)
-            return FALSE;
-#endif
-
-        PCI_READ_LONG(pVideo, &PciReg, PCI_REG_USERCONFIG);
-        j = PciReg & 0x03U;
-
-        if (j == 0x03U)
-        {
-            xf86Msg(X_WARNING, MACH64_NAME ": "
-                "PCI Mach64 in slot %d:%d:%d cannot be enabled\n"
-                "because it has neither a block, nor a sparse, I/O base.\n",
-                PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo));
-
-            return FALSE;
-        }
-
-        /* Possibly fix block I/O indicator */
-        if (PciReg & 0x00000004U)
-        {
-            PciReg &= ~0x00000004U;
-            PCI_WRITE_LONG(pVideo, PciReg, PCI_REG_USERCONFIG);
-        }
-
-        /* FIXME:
-         * Should not probe at sparse I/O bases which have been registered to
-         * other PCI devices. The old ATIProbe() would scan the PCI space and
-         * build a list of registered I/O ports. If there was a conflict
-         * between a mach64 sparse I/O base and a registered I/0 port, probing
-         * that port was not allowed...
-         *
-         * We just add an option and let the user decide, this will not work
-         * with "X -configure" though...
-         */
-        if (!pATI->OptionProbeSparse)
-        {
-            xf86Msg(X_WARNING, MACH64_NAME ": "
-                "PCI Mach64 in slot %d:%d:%d will not be probed\n"
-                "set option \"probe_sparse\" to force sparse I/O probing.\n",
-                PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo));
-
-            return FALSE;
-        }
-
-        pATI->CPIOBase = Mach64SparseIOBases[j];
-        pATI->CPIODecoding = SPARSE_IO;
-        pATI->PCIInfo = pVideo;
-
-#else /* AVOID_CPIO */
-
-        /* The adapter's CPIO base is of little concern here */
-        pATI->CPIOBase = 0;
-        pATI->CPIODecoding = SPARSE_IO;
-        pATI->PCIInfo = pVideo;
-
-#endif /* AVOID_CPIO */
-
-    }
-
-    /* Lastly, look for block I/O devices */
-    if (PCI_REGION_SIZE(pVideo, 1))
-    {
-        pATI->CPIOBase = PCI_REGION_BASE(pVideo, 1, REGION_IO);
-        pATI->CPIODecoding = BLOCK_IO;
-        pATI->PCIInfo = pVideo;
-    }
-
-    if (!ATIMach64Probe(pATI, pVideo, pATI->Chip))
-    {
-        xf86Msg(X_WARNING, MACH64_NAME ": "
-            "Mach64 in slot %d:%d:%d could not be detected!\n",
-            PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo));
-
-        return FALSE;
-    }
-
-    xf86Msg(X_INFO, MACH64_NAME ": "
-        "Mach64 in slot %d:%d:%d detected.\n",
-        PCI_DEV_BUS(pVideo), PCI_DEV_DEV(pVideo), PCI_DEV_FUNC(pVideo));
-
-#ifndef AVOID_CPIO
-
-    if (pATI->VGAAdapter)
-        ATIFindVGA(pVideo, pATI);
-
-#endif /* AVOID_CPIO */
-
-    return TRUE;
-}
diff --git a/src/atiprobe.h b/src/atiprobe.h
deleted file mode 100644
index 6195eb4..0000000
--- a/src/atiprobe.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIPROBE_H___
-#define ___ATIPROBE_H___ 1
-
-#include "xf86str.h"
-
-extern Bool ATIMach64ProbeIO(pciVideoPtr, ATIPtr);
-
-#endif /* ___ATIPROBE_H___ */
diff --git a/src/atiregs.h b/src/atiregs.h
deleted file mode 100644
index 8ab8340..0000000
--- a/src/atiregs.h
+++ /dev/null
@@ -1,2882 +0,0 @@
-/*
- * Copyright 1994 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Acknowledgements:
- *    Jake Richter, Panacea Inc., Londonderry, New Hampshire, U.S.A.
- *    Kevin E. Martin, martin at cs.unc.edu
- *    Tiago Gons, tiago at comosjn.hobby.nl
- *    Rickard E. Faith, faith at cs.unc.edu
- *    Scott Laird, lair at kimbark.uchicago.edu
- *
- * The intent here is to list all I/O ports for VGA (and its predecessors),
- * ATI VGA Wonder, 8514/A, ATI Mach8, ATI Mach32 and ATI Mach64 video adapters,
- * not just the ones in use by the ATI driver.
- */
-
-#ifndef ___ATIREGS_H___
-#define ___ATIREGS_H___ 1
-
-#include "atiutil.h"
-
-/* I/O decoding definitions */
-#define SPARSE_IO_BASE		0x03fcu
-#define SPARSE_IO_SELECT	0xfc00u
-
-#define BLOCK_IO_BASE		0xff00u
-#define BLOCK_IO_SELECT		0x00fcu
-
-#define MM_IO_SELECT		0x03fcu
-#define BLOCK_SELECT		0x0400u
-#define DWORD_SELECT		(BLOCK_SELECT | MM_IO_SELECT)
-
-#define IO_BYTE_SELECT		0x0003u
-
-#define SPARSE_IO_PORT		(SPARSE_IO_BASE | IO_BYTE_SELECT)
-#define BLOCK_IO_PORT		(BLOCK_IO_BASE | IO_BYTE_SELECT)
-
-#define IOPortTag(_SparseIOSelect, _BlockIOSelect)	\
-	(SetBits(_SparseIOSelect, SPARSE_IO_SELECT) |	\
-	 SetBits(_BlockIOSelect, DWORD_SELECT))
-#define SparseIOTag(_IOSelect)	IOPortTag(_IOSelect, 0)
-#define BlockIOTag(_IOSelect)	IOPortTag(0, _IOSelect)
-
-/* MDA/[M]CGA/EGA/VGA I/O ports */
-#define GENVS			0x0102u		/* Write (and Read on uC only) */
-
-#define R_GENLPS		0x03b9u		/* Read */
-
-#define GENHP			0x03bfu
-
-#define ATTRX			0x03c0u
-#define ATTRD			0x03c1u
-#define GENS0			0x03c2u		/* Read */
-#define GENMO			0x03c2u		/* Write */
-#define GENENB			0x03c3u		/* Read */
-#define SEQX			0x03c4u
-#define SEQD			0x03c5u
-#define VGA_DAC_MASK		0x03c6u
-#define VGA_DAC_READ		0x03c7u
-#define VGA_DAC_WRITE		0x03c8u
-#define VGA_DAC_DATA		0x03c9u
-#define R_GENFC			0x03cau		/* Read */
-/*	?			0x03cbu */
-#define R_GENMO			0x03ccu		/* Read */
-/*	?			0x03cdu */
-#define GRAX			0x03ceu
-#define GRAD			0x03cfu
-
-#define GENB			0x03d9u
-
-#define GENLPS			0x03dcu		/* Write */
-#define KCX			0x03ddu
-#define KCD			0x03deu
-
-#define GENENA			0x46e8u		/* Write */
-
-/* I/O port base numbers */
-#define MonochromeIOBase	0x03b0u
-#define ColourIOBase		0x03d0u
-
-/* Other MDA/[M]CGA/EGA/VGA I/O ports */
-/*	?(_IOBase)		((_IOBase) + 0x00u) */	/* CRTX synonym */
-/*	?(_IOBase)		((_IOBase) + 0x01u) */	/* CRTD synonym */
-/*	?(_IOBase)		((_IOBase) + 0x02u) */	/* CRTX synonym */
-/*	?(_IOBase)		((_IOBase) + 0x03u) */	/* CRTD synonym */
-#define CRTX(_IOBase)		((_IOBase) + 0x04u)
-#define CRTD(_IOBase)		((_IOBase) + 0x05u)
-/*	?(_IOBase)		((_IOBase) + 0x06u) */
-/*	?(_IOBase)		((_IOBase) + 0x07u) */
-#define GENMC(_IOBase)		((_IOBase) + 0x08u)
-/*	?(_IOBase)		((_IOBase) + 0x09u) */	/* R_GENLPS/GENB */
-#define GENS1(_IOBase)		((_IOBase) + 0x0au)	/* Read */
-#define GENFC(_IOBase)		((_IOBase) + 0x0au)	/* Write */
-#define GENLPC(_IOBase)		((_IOBase) + 0x0bu)
-/*	?(_IOBase)		((_IOBase) + 0x0cu) */	/* /GENLPS */
-/*	?(_IOBase)		((_IOBase) + 0x0du) */	/* /KCX */
-/*	?(_IOBase)		((_IOBase) + 0x0eu) */	/* /KCD */
-/*	?(_IOBase)		((_IOBase) + 0x0fu) */	/* GENHP/ */
-
-/* 8514/A VESA approved register definitions */
-#define DISP_STAT		0x02e8u		/* Read */
-#define SENSE				0x0001u	/* Presumably belong here */
-#define VBLANK				0x0002u
-#define HORTOG				0x0004u
-#define H_TOTAL			0x02e8u		/* Write */
-#define IBM_DAC_MASK		0x02eau
-#define IBM_DAC_READ		0x02ebu
-#define IBM_DAC_WRITE		0x02ecu
-#define IBM_DAC_DATA		0x02edu
-#define H_DISP			0x06e8u		/* Write */
-#define H_SYNC_STRT		0x0ae8u		/* Write */
-#define H_SYNC_WID		0x0ee8u		/* Write */
-#define HSYNCPOL_POS			0x0000u
-#define HSYNCPOL_NEG			0x0020u
-#define H_POLARITY_POS			HSYNCPOL_POS	/* Sigh */
-#define H_POLARITY_NEG			HSYNCPOL_NEG	/* Sigh */
-#define V_TOTAL			0x12e8u		/* Write */
-#define V_DISP			0x16e8u		/* Write */
-#define V_SYNC_STRT		0x1ae8u		/* Write */
-#define V_SYNC_WID		0x1ee8u		/* Write */
-#define VSYNCPOL_POS			0x0000u
-#define VSYNCPOL_NEG			0x0020u
-#define V_POLARITY_POS			VSYNCPOL_POS	/* Sigh */
-#define V_POLARITY_NEG			VSYNCPOL_NEG	/* Sigh */
-#define DISP_CNTL		0x22e8u		/* Write */
-#define ODDBNKENAB			0x0001u
-#define MEMCFG_2			0x0000u
-#define MEMCFG_4			0x0002u
-#define MEMCFG_6			0x0004u
-#define MEMCFG_8			0x0006u
-#define DBLSCAN				0x0008u
-#define INTERLACE			0x0010u
-#define DISPEN_NC			0x0000u
-#define DISPEN_ENAB			0x0020u
-#define DISPEN_DISAB			0x0040u
-#define R_H_TOTAL		0x26e8u		/* Read */
-/*	?			0x2ae8u */
-/*	?			0x2ee8u */
-/*	?			0x32e8u */
-/*	?			0x36e8u */
-/*	?			0x3ae8u */
-/*	?			0x3ee8u */
-#define SUBSYS_STAT		0x42e8u		/* Read */
-#define VBLNKFLG			0x0001u
-#define PICKFLAG			0x0002u
-#define INVALIDIO			0x0004u
-#define GPIDLE				0x0008u
-#define MONITORID_MASK			0x0070u
-/*	MONITORID_?				0x0000u */
-#define MONITORID_8507				0x0010u
-#define MONITORID_8514				0x0020u
-/*	MONITORID_?				0x0030u */
-/*	MONITORID_?				0x0040u */
-#define MONITORID_8503				0x0050u
-#define MONITORID_8512				0x0060u
-#define MONITORID_8513				0x0060u
-#define MONITORID_NONE				0x0070u
-#define _8PLANE				0x0080u
-#define SUBSYS_CNTL		0x42e8u		/* Write */
-#define RVBLNKFLG			0x0001u
-#define RPICKFLAG			0x0002u
-#define RINVALIDIO			0x0004u
-#define RGPIDLE				0x0008u
-#define IVBLNKFLG			0x0100u
-#define IPICKFLAG			0x0200u
-#define IINVALIDIO			0x0400u
-#define IGPIDLE				0x0800u
-#define CHPTEST_NC			0x0000u
-#define CHPTEST_NORMAL			0x1000u
-#define CHPTEST_ENAB			0x2000u
-#define GPCTRL_NC			0x0000u
-#define GPCTRL_ENAB			0x4000u
-#define GPCTRL_RESET			0x8000u
-#define ROM_PAGE_SEL		0x46e8u		/* Write */
-#define ADVFUNC_CNTL		0x4ae8u		/* Write */
-#define DISABPASSTHRU			0x0001u
-#define CLOKSEL				0x0004u
-/*	?			0x4ee8u */
-#define EXT_CONFIG_0		0x52e8u		/* C & T 82C480 */
-#define EXT_CONFIG_1		0x56e8u		/* C & T 82C480 */
-#define EXT_CONFIG_2		0x5ae8u		/* C & T 82C480 */
-#define EXT_CONFIG_3		0x5ee8u		/* C & T 82C480 */
-/*	?			0x62e8u */
-/*	?			0x66e8u */
-/*	?			0x6ae8u */
-/*	?			0x6ee8u */
-/*	?			0x72e8u */
-/*	?			0x76e8u */
-/*	?			0x7ae8u */
-/*	?			0x7ee8u */
-#define CUR_Y			0x82e8u
-#define CUR_X			0x86e8u
-#define DESTY_AXSTP		0x8ae8u		/* Write */
-#define DESTX_DIASTP		0x8ee8u		/* Write */
-#define ERR_TERM		0x92e8u
-#define MAJ_AXIS_PCNT		0x96e8u		/* Write */
-#define GP_STAT			0x9ae8u		/* Read */
-#define GE_STAT			0x9ae8u		/* Alias */
-#define DATARDY				0x0100u
-#define DATA_READY			DATARDY	/* Alias */
-#define GPBUSY				0x0200u
-#define CMD			0x9ae8u		/* Write */
-#define WRTDATA				0x0001u
-#define PLANAR				0x0002u
-#define LASTPIX				0x0004u
-#define LINETYPE			0x0008u
-#define DRAW				0x0010u
-#define INC_X				0x0020u
-#define YMAJAXIS			0x0040u
-#define INC_Y				0x0080u
-#define PCDATA				0x0100u
-#define _16BIT				0x0200u
-#define CMD_NOP				0x0000u
-#define CMD_OP_MSK			0xf000u
-#define BYTSEQ					0x1000u
-#define CMD_LINE				0x2000u
-#define CMD_RECT				0x4000u
-#define CMD_RECTV1				0x6000u
-#define CMD_RECTV2				0x8000u
-#define CMD_LINEAF				0xa000u
-#define CMD_BITBLT				0xc000u
-#define SHORT_STROKE		0x9ee8u		/* Write */
-#define SSVDRAW				0x0010u
-#define VECDIR_000			0x0000u
-#define VECDIR_045			0x0020u
-#define VECDIR_090			0x0040u
-#define VECDIR_135			0x0060u
-#define VECDIR_180			0x0080u
-#define VECDIR_225			0x00a0u
-#define VECDIR_270			0x00c0u
-#define VECDIR_315			0x00e0u
-#define BKGD_COLOR		0xa2e8u		/* Write */
-#define FRGD_COLOR		0xa6e8u		/* Write */
-#define WRT_MASK		0xaae8u		/* Write */
-#define RD_MASK			0xaee8u		/* Write */
-#define COLOR_CMP		0xb2e8u		/* Write */
-#define BKGD_MIX		0xb6e8u		/* Write */
-/*					0x001fu	See MIX_* definitions below */
-#define BSS_BKGDCOL			0x0000u
-#define BSS_FRGDCOL			0x0020u
-#define BSS_PCDATA			0x0040u
-#define BSS_BITBLT			0x0060u
-#define FRGD_MIX		0xbae8u		/* Write */
-/*					0x001fu	See MIX_* definitions below */
-#define FSS_BKGDCOL			0x0000u
-#define FSS_FRGDCOL			0x0020u
-#define FSS_PCDATA			0x0040u
-#define FSS_BITBLT			0x0060u
-#define MULTIFUNC_CNTL		0xbee8u		/* Write */
-#define MIN_AXIS_PCNT			0x0000u
-#define SCISSORS_T			0x1000u
-#define SCISSORS_L			0x2000u
-#define SCISSORS_B			0x3000u
-#define SCISSORS_R			0x4000u
-#define M32_MEM_CNTL			0x5000u
-#define HORCFG_4				0x0000u
-#define HORCFG_5				0x0001u
-#define HORCFG_8				0x0002u
-#define HORCFG_10				0x0003u
-#define VRTCFG_2				0x0000u
-#define VRTCFG_4				0x0004u
-#define VRTCFG_6				0x0008u
-#define VRTCFG_8				0x000cu
-#define BUFSWP					0x0010u
-#define PATTERN_L			0x8000u
-#define PATTERN_H			0x9000u
-#define PIX_CNTL			0xa000u
-#define PLANEMODE				0x0004u
-#define COLCMPOP_F				0x0000u
-#define COLCMPOP_T				0x0008u
-#define COLCMPOP_GE				0x0010u
-#define COLCMPOP_LT				0x0018u
-#define COLCMPOP_NE				0x0020u
-#define COLCMPOP_EQ				0x0028u
-#define COLCMPOP_LE				0x0030u
-#define COLCMPOP_GT				0x0038u
-#define MIXSEL_FRGDMIX				0x0000u
-#define MIXSEL_PATT				0x0040u
-#define MIXSEL_EXPPC				0x0080u
-#define MIXSEL_EXPBLT				0x00c0u
-/*	?			0xc2e8u */
-/*	?			0xc6e8u */
-/*	?			0xcae8u */
-/*	?			0xcee8u */
-/*	?			0xd2e8u */
-/*	?			0xd6e8u */
-/*	?			0xdae8u */
-/*	?			0xdee8u */
-#define PIX_TRANS		0xe2e8u
-/*	?			0xe6e8u */
-/*	?			0xeae8u */
-/*	?			0xeee8u */
-/*	?			0xf2e8u */
-/*	?			0xf6e8u */
-/*	?			0xfae8u */
-/*	?			0xfee8u */
-
-/* ATI Mach8 & Mach32 register definitions */
-#define OVERSCAN_COLOR_8	0x02eeu		/* Write */	/* Mach32 */
-#define OVERSCAN_BLUE_24	0x02efu		/* Write */	/* Mach32 */
-#define OVERSCAN_GREEN_24	0x06eeu		/* Write */	/* Mach32 */
-#define OVERSCAN_RED_24		0x06efu		/* Write */	/* Mach32 */
-#define CURSOR_OFFSET_LO	0x0aeeu		/* Write */	/* Mach32 */
-#define CURSOR_OFFSET_HI	0x0eeeu		/* Write */	/* Mach32 */
-#define CONFIG_STATUS_1		0x12eeu		/* Read */
-#define CLK_MODE			0x0001u			/* Mach8 */
-#define BUS_16				0x0002u			/* Mach8 */
-#define MC_BUS				0x0004u			/* Mach8 */
-#define EEPROM_ENA			0x0008u			/* Mach8 */
-#define DRAM_ENA			0x0010u			/* Mach8 */
-#define MEM_INSTALLED			0x0060u			/* Mach8 */
-#define ROM_ENA				0x0080u			/* Mach8 */
-#define ROM_PAGE_ENA			0x0100u			/* Mach8 */
-#define ROM_LOCATION			0xfe00u			/* Mach8 */
-#define _8514_ONLY			0x0001u			/* Mach32 */
-#define BUS_TYPE			0x000eu			/* Mach32 */
-#define ISA_16_BIT				0x0000u		/* Mach32 */
-#define EISA					0x0002u		/* Mach32 */
-#define MICRO_C_16_BIT				0x0004u		/* Mach32 */
-#define MICRO_C_8_BIT				0x0006u		/* Mach32 */
-#define LOCAL_386SX				0x0008u		/* Mach32 */
-#define LOCAL_386DX				0x000au		/* Mach32 */
-#define LOCAL_486				0x000cu		/* Mach32 */
-#define PCI					0x000eu		/* Mach32 */
-#define MEM_TYPE			0x0070u			/* Mach32 */
-#define CHIP_DIS			0x0080u			/* Mach32 */
-#define TST_VCTR_ENA			0x0100u			/* Mach32 */
-#define DACTYPE				0x0e00u			/* Mach32 */
-#define MC_ADR_DECODE			0x1000u			/* Mach32 */
-#define CARD_ID				0xe000u			/* Mach32 */
-#define HORZ_CURSOR_POSN	0x12eeu		/* Write */	/* Mach32 */
-#define CONFIG_STATUS_2		0x16eeu		/* Read */
-#define SHARE_CLOCK			0x0001u			/* Mach8 */
-#define HIRES_BOOT			0x0002u			/* Mach8 */
-#define EPROM_16_ENA			0x0004u			/* Mach8 */
-#define WRITE_PER_BIT			0x0008u			/* Mach8 */
-#define FLASH_ENA			0x0010u			/* Mach8 */
-#define SLOW_SEQ_EN			0x0001u			/* Mach32 */
-#define MEM_ADDR_DIS			0x0002u			/* Mach32 */
-#define ISA_16_ENA			0x0004u			/* Mach32 */
-#define KOR_TXT_MODE_ENA		0x0008u			/* Mach32 */
-#define LOCAL_BUS_SUPPORT		0x0030u			/* Mach32 */
-#define LOCAL_BUS_CONFIG_2		0x0040u			/* Mach32 */
-#define LOCAL_BUS_RD_DLY_ENA		0x0080u			/* Mach32 */
-#define LOCAL_DAC_EN			0x0100u			/* Mach32 */
-#define LOCAL_RDY_EN			0x0200u			/* Mach32 */
-#define EEPROM_ADR_SEL			0x0400u			/* Mach32 */
-#define GE_STRAP_SEL			0x0800u			/* Mach32 */
-#define VESA_RDY			0x1000u			/* Mach32 */
-#define Z4GB				0x2000u			/* Mach32 */
-#define LOC2_MDRAM			0x4000u			/* Mach32 */
-#define VERT_CURSOR_POSN	0x16eeu		/* Write */	/* Mach32 */
-#define FIFO_TEST_DATA		0x1aeeu		/* Read */	/* Mach32 */
-#define CURSOR_COLOR_0		0x1aeeu		/* Write */	/* Mach32 */
-#define CURSOR_COLOR_1		0x1aefu		/* Write */	/* Mach32 */
-#define HORZ_CURSOR_OFFSET	0x1eeeu		/* Write */	/* Mach32 */
-#define VERT_CURSOR_OFFSET	0x1eefu		/* Write */	/* Mach32 */
-#define PCI_CNTL		0x22eeu				/* Mach32-PCI */
-#define CRT_PITCH		0x26eeu		/* Write */
-#define CRT_OFFSET_LO		0x2aeeu		/* Write */
-#define CRT_OFFSET_HI		0x2eeeu		/* Write */
-#define LOCAL_CNTL		0x32eeu				/* Mach32 */
-#define FIFO_OPT		0x36eeu		/* Write */	/* Mach8 */
-#define MISC_OPTIONS		0x36eeu				/* Mach32 */
-#define W_STATE_ENA			0x0000u			/* Mach32 */
-#define HOST_8_ENA			0x0001u			/* Mach32 */
-#define MEM_SIZE_ALIAS			0x000cu			/* Mach32 */
-#define MEM_SIZE_512K				0x0000u		/* Mach32 */
-#define MEM_SIZE_1M				0x0004u		/* Mach32 */
-#define MEM_SIZE_2M				0x0008u		/* Mach32 */
-#define MEM_SIZE_4M				0x000cu		/* Mach32 */
-#define DISABLE_VGA			0x0010u			/* Mach32 */
-#define _16_BIT_IO			0x0020u			/* Mach32 */
-#define DISABLE_DAC			0x0040u			/* Mach32 */
-#define DLY_LATCH_ENA			0x0080u			/* Mach32 */
-#define TEST_MODE			0x0100u			/* Mach32 */
-#define BLK_WR_ENA			0x0400u			/* Mach32 */
-#define _64_DRAW_ENA			0x0800u			/* Mach32 */
-#define FIFO_TEST_TAG		0x3aeeu		/* Read */	/* Mach32 */
-#define EXT_CURSOR_COLOR_0	0x3aeeu		/* Write */	/* Mach32 */
-#define EXT_CURSOR_COLOR_1	0x3eeeu		/* Write */	/* Mach32 */
-#define MEM_BNDRY		0x42eeu				/* Mach32 */
-#define MEM_PAGE_BNDRY			0x000fu			/* Mach32 */
-#define MEM_BNDRY_ENA			0x0010u			/* Mach32 */
-#define SHADOW_CTL		0x46eeu		/* Write */
-#define CLOCK_SEL		0x4aeeu
-/*	DISABPASSTHRU			0x0001u	See ADVFUNC_CNTL */
-#define VFIFO_DEPTH_1			0x0100u			/* Mach32 */
-#define VFIFO_DEPTH_2			0x0200u			/* Mach32 */
-#define VFIFO_DEPTH_3			0x0300u			/* Mach32 */
-#define VFIFO_DEPTH_4			0x0400u			/* Mach32 */
-#define VFIFO_DEPTH_5			0x0500u			/* Mach32 */
-#define VFIFO_DEPTH_6			0x0600u			/* Mach32 */
-#define VFIFO_DEPTH_7			0x0700u			/* Mach32 */
-#define VFIFO_DEPTH_8			0x0800u			/* Mach32 */
-#define VFIFO_DEPTH_9			0x0900u			/* Mach32 */
-#define VFIFO_DEPTH_A			0x0a00u			/* Mach32 */
-#define VFIFO_DEPTH_B			0x0b00u			/* Mach32 */
-#define VFIFO_DEPTH_C			0x0c00u			/* Mach32 */
-#define VFIFO_DEPTH_D			0x0d00u			/* Mach32 */
-#define VFIFO_DEPTH_E			0x0e00u			/* Mach32 */
-#define VFIFO_DEPTH_F			0x0f00u			/* Mach32 */
-#define COMPOSITE_SYNC			0x1000u
-/*	?			0x4eeeu */
-#define ROM_ADDR_1		0x52eeu
-#define BIOS_BASE_SEGMENT		0x007fu			/* Mach32 */
-/*	?				0xff80u */		/* Mach32 */
-#define ROM_ADDR_2		0x56eeu		/* Sick ... */
-#define SHADOW_SET		0x5aeeu		/* Write */
-#define MEM_CFG			0x5eeeu				/* Mach32 */
-#define MEM_APERT_SEL			0x0003u			/* Mach32 */
-#define MEM_APERT_PAGE			0x000cu			/* Mach32 */
-#define MEM_APERT_LOC			0xfff0u			/* Mach32 */
-#define EXT_GE_STATUS		0x62eeu		/* Read */	/* Mach32 */
-#define HORZ_OVERSCAN		0x62eeu		/* Write */	/* Mach32 */
-#define VERT_OVERSCAN		0x66eeu		/* Write */	/* Mach32 */
-#define MAX_WAITSTATES		0x6aeeu
-#define GE_OFFSET_LO		0x6eeeu		/* Write */
-#define BOUNDS_LEFT		0x72eeu		/* Read */
-#define GE_OFFSET_HI		0x72eeu		/* Write */
-#define BOUNDS_TOP		0x76eeu		/* Read */
-#define GE_PITCH		0x76eeu		/* Write */
-#define BOUNDS_RIGHT		0x7aeeu		/* Read */
-#define EXT_GE_CONFIG		0x7aeeu		/* Write */	/* Mach32 */
-#define MONITOR_ALIAS			0x0007u			/* Mach32 */
-/*	MONITOR_?				0x0000u */	/* Mach32 */
-#define MONITOR_8507				0x0001u		/* Mach32 */
-#define MONITOR_8514				0x0002u		/* Mach32 */
-/*	MONITOR_?				0x0003u */	/* Mach32 */
-/*	MONITOR_?				0x0004u */	/* Mach32 */
-#define MONITOR_8503				0x0005u		/* Mach32 */
-#define MONITOR_8512				0x0006u		/* Mach32 */
-#define MONITOR_8513				0x0006u		/* Mach32 */
-#define MONITOR_NONE				0x0007u		/* Mach32 */
-#define ALIAS_ENA			0x0008u			/* Mach32 */
-#define PIXEL_WIDTH_4			0x0000u			/* Mach32 */
-#define PIXEL_WIDTH_8			0x0010u			/* Mach32 */
-#define PIXEL_WIDTH_16			0x0020u			/* Mach32 */
-#define PIXEL_WIDTH_24			0x0030u			/* Mach32 */
-#define RGB16_555			0x0000u			/* Mach32 */
-#define RGB16_565			0x0040u			/* Mach32 */
-#define RGB16_655			0x0080u			/* Mach32 */
-#define RGB16_664			0x00c0u			/* Mach32 */
-#define MULTIPLEX_PIXELS		0x0100u			/* Mach32 */
-#define RGB24				0x0000u			/* Mach32 */
-#define RGBx24				0x0200u			/* Mach32 */
-#define BGR24				0x0400u			/* Mach32 */
-#define xBGR24				0x0600u			/* Mach32 */
-#define DAC_8_BIT_EN			0x4000u			/* Mach32 */
-#define ORDER_16BPP_565			RGB16_565		/* Mach32 */
-#define BOUNDS_BOTTOM		0x7eeeu		/* Read */
-#define MISC_CNTL		0x7eeeu		/* Write */	/* Mach32 */
-#define PATT_DATA_INDEX		0x82eeu
-/*	?			0x86eeu */
-/*	?			0x8aeeu */
-#define R_EXT_GE_CONFIG		0x8eeeu		/* Read */	/* Mach32 */
-#define PATT_DATA		0x8eeeu		/* Write */
-#define R_MISC_CNTL		0x92eeu		/* Read */	/* Mach32 */
-#define BRES_COUNT		0x96eeu
-#define EXT_FIFO_STATUS		0x9aeeu		/* Read */
-#define LINEDRAW_INDEX		0x9aeeu		/* Write */
-/*	?			0x9eeeu */
-#define LINEDRAW_OPT		0xa2eeu
-#define BOUNDS_RESET			0x0100u
-#define CLIP_MODE_0			0x0000u	/* Clip exception disabled */
-#define CLIP_MODE_1			0x0200u	/* Line segments */
-#define CLIP_MODE_2			0x0400u	/* Polygon boundary lines */
-#define CLIP_MODE_3			0x0600u	/* Patterned lines */
-#define DEST_X_START		0xa6eeu		/* Write */
-#define DEST_X_END		0xaaeeu		/* Write */
-#define DEST_Y_END		0xaeeeu		/* Write */
-#define R_H_TOTAL_DISP		0xb2eeu		/* Read */	/* Mach32 */
-#define SRC_X_STRT		0xb2eeu		/* Write */
-#define R_H_SYNC_STRT		0xb6eeu		/* Read */	/* Mach32 */
-#define ALU_BG_FN		0xb6eeu		/* Write */
-#define R_H_SYNC_WID		0xbaeeu		/* Read */	/* Mach32 */
-#define ALU_FG_FN		0xbaeeu		/* Write */
-#define SRC_X_END		0xbeeeu		/* Write */
-#define R_V_TOTAL		0xc2eeu		/* Read */
-#define SRC_Y_DIR		0xc2eeu		/* Write */
-#define R_V_DISP		0xc6eeu		/* Read */	/* Mach32 */
-#define EXT_SHORT_STROKE	0xc6eeu		/* Write */
-#define R_V_SYNC_STRT		0xcaeeu		/* Read */	/* Mach32 */
-#define SCAN_X			0xcaeeu		/* Write */
-#define VERT_LINE_CNTR		0xceeeu		/* Read */	/* Mach32 */
-#define DP_CONFIG		0xceeeu		/* Write */
-#define READ_WRITE			0x0001u
-#define DATA_WIDTH			0x0200u
-#define DATA_ORDER			0x1000u
-#define FG_COLOR_SRC_FG			0x2000u
-#define FG_COLOR_SRC_BLIT		0x6000u
-#define R_V_SYNC_WID		0xd2eeu		/* Read */
-#define PATT_LENGTH		0xd2eeu		/* Write */
-#define PATT_INDEX		0xd6eeu		/* Write */
-#define READ_SRC_X		0xdaeeu		/* Read */	/* Mach32 */
-#define EXT_SCISSOR_L		0xdaeeu		/* Write */
-#define READ_SRC_Y		0xdeeeu		/* Read */	/* Mach32 */
-#define EXT_SCISSOR_T		0xdeeeu		/* Write */
-#define EXT_SCISSOR_R		0xe2eeu		/* Write */
-#define EXT_SCISSOR_B		0xe6eeu		/* Write */
-/*	?			0xeaeeu */
-#define DEST_COMP_FN		0xeeeeu		/* Write */
-#define DEST_COLOR_CMP_MASK	0xf2eeu		/* Write */	/* Mach32 */
-/*	?			0xf6eeu */
-#define CHIP_ID			0xfaeeu		/* Read */	/* Mach32 */
-#define CHIP_CODE_0			0x001fu			/* Mach32 */
-#define CHIP_CODE_1			0x03e0u			/* Mach32 */
-#define CHIP_CLASS			0x0c00u			/* Mach32 */
-#define CHIP_REV			0xf000u			/* Mach32 */
-#define LINEDRAW		0xfeeeu		/* Write */
-
-/* ATI Mach64 register definitions */
-#define CRTC_H_TOTAL_DISP	IOPortTag(0x00u, 0x00u)
-#define CRTC_H_TOTAL			0x000001fful
-/*	?				0x0000fe00ul */
-#define CRTC_H_DISP			0x01ff0000ul
-/*	?				0xfe000000ul */
-#define CRTC_H_SYNC_STRT_WID	IOPortTag(0x01u, 0x01u)
-#define CRTC_H_SYNC_STRT		0x000000fful
-#define CRTC_H_SYNC_DLY			0x00000700ul
-/*	?				0x00000800ul */
-#define CRTC_H_SYNC_STRT_HI		0x00001000ul
-/*	?				0x0000e000ul */
-#define CRTC_H_SYNC_WID			0x001f0000ul
-#define CRTC_H_SYNC_POL			0x00200000ul
-/*	?				0xffc00000ul */
-#define CRTC_V_TOTAL_DISP	IOPortTag(0x02u, 0x02u)
-#define CRTC_V_TOTAL			0x000007fful
-/*	?				0x0000f800ul */
-#define CRTC_V_DISP			0x07ff0000ul
-/*	?				0xf8000000ul */
-#define CRTC_V_SYNC_STRT_WID	IOPortTag(0x03u, 0x03u)
-#define CRTC_V_SYNC_STRT		0x000007fful
-/*	?				0x0000f800ul */
-#define CRTC_V_SYNC_WID			0x001f0000ul
-#define CRTC_V_SYNC_END_VGA		0x000f0000ul
-#define CRTC_V_SYNC_POL			0x00200000ul
-/*	?				0xffc00000ul */
-#define CRTC_VLINE_CRNT_VLINE	IOPortTag(0x04u, 0x04u)
-#define CRTC_VLINE			0x000007fful
-/*	?				0x0000f800ul */
-#define CRTC_CRNT_VLINE			0x07ff0000ul
-/*	?				0xf8000000ul */
-#define CRTC_OFF_PITCH		IOPortTag(0x05u, 0x05u)
-#define CRTC_OFFSET			0x000ffffful
-#define CRTC_OFFSET_VGA			0x0003fffful
-#define CRTC_OFFSET_LOCK		0x00100000ul	/* XC/XL */
-/*	?				0x00200000ul */
-#define CRTC_PITCH			0xffc00000ul
-#define CRTC_INT_CNTL		IOPortTag(0x06u, 0x06u)
-#define CRTC_VBLANK			0x00000001ul
-#define CRTC_VBLANK_INT_EN		0x00000002ul
-#define CRTC_VBLANK_INT			0x00000004ul
-#define CRTC_VLINE_INT_EN		0x00000008ul
-#define CRTC_VLINE_INT			0x00000010ul
-#define CRTC_VLINE_SYNC			0x00000020ul
-#define CRTC_FRAME			0x00000040ul
-#define CRTC_SNAPSHOT_INT_EN		0x00000080ul	/* GTPro */
-#define CRTC_SNAPSHOT_INT		0x00000100ul	/* GTPro */
-#define CRTC_I2C_INT_EN			0x00000200ul	/* GTPro */
-#define CRTC_I2C_INT			0x00000400ul	/* GTPro */
-#define CRTC2_VBLANK			0x00000800ul	/* LTPro */
-#define CRTC2_VBLANK_INT_EN		0x00001000ul	/* LTPro */
-#define CRTC2_VBLANK_INT		0x00002000ul	/* LTPro */
-#define CRTC2_VLINE_INT_EN		0x00004000ul	/* LTPro */
-#define CRTC2_VLINE_INT			0x00008000ul	/* LTPro */
-#define CRTC_CAPBUF0_INT_EN		0x00010000ul	/* VT/GT */
-#define CRTC_CAPBUF0_INT		0x00020000ul	/* VT/GT */
-#define CRTC_CAPBUF1_INT_EN		0x00040000ul	/* VT/GT */
-#define CRTC_CAPBUF1_INT		0x00080000ul	/* VT/GT */
-#define CRTC_OVERLAY_EOF_INT_EN		0x00100000ul	/* VT/GT */
-#define CRTC_OVERLAY_EOF_INT		0x00200000ul	/* VT/GT */
-#define CRTC_ONESHOT_CAP_INT_EN		0x00400000ul	/* VT/GT */
-#define CRTC_ONESHOT_CAP_INT		0x00800000ul	/* VT/GT */
-#define CRTC_BUSMASTER_EOL_INT_EN	0x01000000ul	/* VTB/GTB/LT */
-#define CRTC_BUSMASTER_EOL_INT		0x02000000ul	/* VTB/GTB/LT */
-#define CRTC_GP_INT_EN			0x04000000ul	/* VTB/GTB/LT */
-#define CRTC_GP_INT			0x08000000ul	/* VTB/GTB/LT */
-#define CRTC2_VLINE_SYNC		0x10000000ul	/* LTPro */
-#define CRTC_SNAPSHOT2_INT_EN		0x20000000ul	/* LTPro */
-#define CRTC_SNAPSHOT2_INT		0x40000000ul	/* LTPro */
-#define CRTC_VBLANK_BIT2_INT		0x80000000ul	/* GTPro */
-#define CRTC_INT_ENS	/* *** UPDATE ME *** */		\
-		(					\
-			CRTC_VBLANK_INT_EN |		\
-			CRTC_VLINE_INT_EN |		\
-			CRTC_SNAPSHOT_INT_EN |		\
-			CRTC_I2C_INT_EN |		\
-			CRTC2_VBLANK_INT_EN |		\
-			CRTC2_VLINE_INT_EN |		\
-			CRTC_CAPBUF0_INT_EN |		\
-			CRTC_CAPBUF1_INT_EN |		\
-			CRTC_OVERLAY_EOF_INT_EN |	\
-			CRTC_ONESHOT_CAP_INT_EN |	\
-			CRTC_BUSMASTER_EOL_INT_EN |	\
-			CRTC_GP_INT_EN |		\
-			CRTC_SNAPSHOT2_INT_EN |		\
-			0				\
-		)
-#define CRTC_INT_ACKS	/* *** UPDATE ME *** */		\
-		(					\
-			CRTC_VBLANK_INT |		\
-			CRTC_VLINE_INT |		\
-			CRTC_SNAPSHOT_INT |		\
-			CRTC_I2C_INT |			\
-			CRTC2_VBLANK_INT |		\
-			CRTC2_VLINE_INT |		\
-			CRTC_CAPBUF0_INT |		\
-			CRTC_CAPBUF1_INT |		\
-			CRTC_OVERLAY_EOF_INT |		\
-			CRTC_ONESHOT_CAP_INT |		\
-			CRTC_BUSMASTER_EOL_INT |	\
-			CRTC_GP_INT |			\
-			CRTC_SNAPSHOT2_INT |		\
-			CRTC_VBLANK_BIT2_INT |		\
-			0				\
-		)
-#define CRTC_GEN_CNTL		IOPortTag(0x07u, 0x07u)
-#define CRTC_DBL_SCAN_EN		0x00000001ul
-#define CRTC_INTERLACE_EN		0x00000002ul
-#define CRTC_HSYNC_DIS			0x00000004ul
-#define CRTC_VSYNC_DIS			0x00000008ul
-#define CRTC_CSYNC_EN			0x00000010ul
-#define CRTC_PIX_BY_2_EN		0x00000020ul
-#define CRTC2_DBL_SCAN_EN		0x00000020ul	/* LTPro */
-#define CRTC_DISPLAY_DIS		0x00000040ul
-#define CRTC_VGA_XOVERSCAN		0x00000080ul
-#define CRTC_PIX_WIDTH			0x00000700ul
-#define CRTC_BYTE_PIX_ORDER		0x00000800ul
-#define CRTC_VSYNC_INT_EN		0x00001000ul	/* XC/XL */
-#define CRTC_VSYNC_INT			0x00002000ul	/* XC/XL */
-#define CRTC_FIFO_OVERFILL		0x0000c000ul	/* VT/GT */
-#define CRTC2_VSYNC_INT_EN		0x00004000ul	/* XC/XL */
-#define CRTC2_VSYNC_INT			0x00008000ul	/* XC/XL */
-#define CRTC_FIFO_LWM			0x000f0000ul
-#define CRTC_HVSYNC_IO_DRIVE		0x00010000ul	/* XC/XL */
-#define CRTC2_PIX_WIDTH			0x000e0000ul	/* LTPro */
-#define CRTC_VGA_128KAP_PAGING		0x00100000ul	/* VT/GT */
-#define CRTC_DISPREQ_ONLY		0x00200000ul	/* VT/GT */
-#define CRTC_VFC_SYNC_TRISTATE		0x00200000ul	/* VTB/GTB/LT */
-#define CRTC2_EN			0x00200000ul	/* LTPro */
-#define CRTC_LOCK_REGS			0x00400000ul	/* VT/GT */
-#define CRTC_SYNC_TRISTATE		0x00800000ul	/* VT/GT */
-#define CRTC_EXT_DISP_EN		0x01000000ul
-#define CRTC_EN				0x02000000ul
-#define CRTC_DISP_REQ_EN		0x04000000ul
-#define CRTC_VGA_LINEAR			0x08000000ul
-#define CRTC_VSYNC_FALL_EDGE		0x10000000ul
-#define CRTC_VGA_TEXT_132		0x20000000ul
-#define CRTC_CNT_EN			0x40000000ul
-#define CRTC_CUR_B_TEST			0x80000000ul
-#define CRTC_INT_ENS_X	/* *** UPDATE ME *** */		\
-		(					\
-			CRTC_VSYNC_INT_EN |		\
-			CRTC2_VSYNC_INT_EN |		\
-			0				\
-		)
-#define CRTC_INT_ACKS_X	/* *** UPDATE ME *** */		\
-		(					\
-			CRTC_VSYNC_INT |		\
-			CRTC2_VSYNC_INT |		\
-			0				\
-		)
-#define DSP_CONFIG		BlockIOTag(0x08u)	/* VTB/GTB/LT */
-#define DSP_XCLKS_PER_QW		0x00003ffful
-/*	?				0x00004000ul */
-#define DSP_FLUSH_WB			0x00008000ul
-#define DSP_LOOP_LATENCY		0x000f0000ul
-#define DSP_PRECISION			0x00700000ul
-/*	?				0xff800000ul */
-#define DSP_ON_OFF		BlockIOTag(0x09u)	/* VTB/GTB/LT */
-#define DSP_OFF				0x000007fful
-/*	?				0x0000f800ul */
-#define DSP_ON				0x07ff0000ul
-/*	?				0xf8000000ul */
-#define TIMER_CONFIG		BlockIOTag(0x0au)	/* VTB/GTB/LT */
-#define MEM_BUF_CNTL		BlockIOTag(0x0bu)	/* VTB/GTB/LT */
-#define Z_WB_FLUSH			0x00000007ul
-#define Z_WB_FLUSH_P			0x0000000ful	/* GTPro */
-#define VID_WB_FLUSH_P			0x000000f0ul	/* GTPro */
-#define VID_WB_FLUSH_MSB		0x00000100ul
-#define GUI_WB_FLUSH_P			0x00001f00ul	/* GTPro */
-#define HST_WB_FLUSH_P			0x0000e000ul	/* GTPro */
-#define SCL_MIN_BURST_LEN		0x001f0000ul
-#define SCL_THRESH			0x003f0000ul	/* GTPro */
-/*	?				0x00400000ul */
-#define INVALIDATE_RB_CACHE		0x00800000ul
-#define HST_WB_FLUSH			0x03000000ul
-#define VID_WB_FLUSH			0x1c000000ul
-#define GUI_WB_FLUSH			0xe0000000ul
-#define SHARED_CNTL		BlockIOTag(0x0cu)	/* VTB/GTB/LT */
-#define SHARED_MEM_CONFIG	BlockIOTag(0x0du)	/* VTB/GTB/LT */
-#define MEM_ADDR_CONFIG		BlockIOTag(0x0du)	/* GTPro */
-#define SHARED_CNTL_CTD		BlockIOTag(0x0eu)	/* CTD */
-/*	?				0x00fffffful */
-#define CTD_FIFO5			0x01000000ul
-/*	?				0xfe000000ul */
-#define CRT_TRAP		BlockIOTag(0x0eu)	/* VTB/GTB/LT */
-#define DSTN_CONTROL		BlockIOTag(0x0fu)	/* LT */
-#define I2C_CNTL_0		BlockIOTag(0x0fu)	/* GTPro */
-#define I2C_CNTL_STAT			0x0000000ful
-#define I2C_CNTL_DONE				0x00000001ul
-#define I2C_CNTL_NACK				0x00000002ul
-#define I2C_CNTL_HALT				0x00000004ul
-#define I2C_CNTL_FULL				0x00000008ul
-/*	?				0x00000010ul */
-#define I2C_CNTL_HPTR_RST		0x00000020ul
-/*	?				0x000000c0ul */
-#define I2C_CNTL_START			0x00000100ul
-#define I2C_CNTL_STOP			0x00000200ul
-#define I2C_CNTL_GO			0x00000400ul
-#define I2C_CNTL_RECEIVE		0x00000800ul
-#define I2C_CNTL_ABORT			0x00001000ul
-#define I2C_CNTL_INT_EN			0x00002000ul
-#define I2C_CNTL_SCL			0x00004000ul
-#define I2C_CNTL_SDA			0x00008000ul
-#define I2C_CNTL_M_FACTOR		0x00ff0000ul
-#define I2C_CNTL_N_FACTOR		0xff000000ul
-#define OVR_CLR			IOPortTag(0x08u, 0x10u)
-#define OVR_CLR_8			0x000000fful
-#define OVR_CLR_B			0x0000ff00ul
-#define OVR_CLR_G			0x00ff0000ul
-#define OVR_CLR_R			0xff000000ul
-#define OVR_WID_LEFT_RIGHT	IOPortTag(0x09u, 0x11u)
-#define OVR_WID_LEFT			0x0000003ful	/* 0x0f on <LT */
-/*	?				0x0000ffc0ul */
-#define OVR_WID_RIGHT			0x003f0000ul	/* 0x0f0000 on <LT */
-/*	?				0xffc00000ul */
-#define OVR_WID_TOP_BOTTOM	IOPortTag(0x0au, 0x12u)
-#define OVR_WID_TOP			0x000001fful	/* 0x00ff on <LT */
-/*	?				0x0000fe00ul */
-#define OVR_WID_BOTTOM			0x01ff0000ul	/* 0x00ff0000 on <LT */
-/*	?				0xfe000000ul */
-#define VGA_DSP_CONFIG		BlockIOTag(0x13u)	/* VTB/GTB/LT */
-#define VGA_DSP_XCLKS_PER_QW		DSP_XCLKS_PER_QW
-/*	?				0x000fc000ul */
-#define VGA_DSP_PREC_PCLKBY2		0x00700000ul
-/*	?				0x00800000ul */
-#define VGA_DSP_PREC_PCLK		0x07000000ul
-/*	?				0xf8000000ul */
-#define VGA_DSP_ON_OFF		BlockIOTag(0x14u)	/* VTB/GTB/LT */
-#define VGA_DSP_OFF			DSP_OFF
-/*	?				0x0000f800ul */
-#define VGA_DSP_ON			DSP_ON
-/*	?				0xf8000000ul */
-#define DSP2_CONFIG		BlockIOTag(0x15u)	/* LTPro */
-#define DSP2_ON_OFF		BlockIOTag(0x16u)	/* LTPro */
-#define EXT_CRTC_GEN_CNTL	BlockIOTag(0x17u)	/* VT-A4 (W) */
-#define CRTC2_OFF_PITCH		BlockIOTag(0x17u)	/* LTPro */
-#define CUR_CLR0		IOPortTag(0x0bu, 0x18u)
-#define CUR_CLR1		IOPortTag(0x0cu, 0x19u)
-/* These are for both CUR_CLR0 and CUR_CLR1 */
-#define CUR_CLR_I			0x000000fful
-#define CUR_CLR_B			0x0000ff00ul
-#define CUR_CLR_G			0x00ff0000ul
-#define CUR_CLR_R			0xff000000ul
-#define CUR_CLR				(CUR_CLR_R | CUR_CLR_G | CUR_CLR_B)
-#define CUR_OFFSET		IOPortTag(0x0du, 0x1au)
-#define CUR_HORZ_VERT_POSN	IOPortTag(0x0eu, 0x1bu)
-#define CUR_HORZ_POSN			0x000007fful
-/*	?				0x0000f800ul */
-#define CUR_VERT_POSN			0x07ff0000ul
-/*	?				0xf8000000ul */
-#define CUR_HORZ_VERT_OFF	IOPortTag(0x0fu, 0x1cu)
-#define CUR_HORZ_OFF			0x0000007ful
-/*	?				0x0000ff80ul */
-#define CUR_VERT_OFF			0x007f0000ul
-/*	?				0xff800000ul */
-#define CONFIG_PANEL		BlockIOTag(0x1du)	/* LT */
-#define PANEL_FORMAT			0x00000007ul
-/*	?				0x00000008ul */
-#define PANEL_TYPE			0x000000f0ul
-#define NO_OF_GREY			0x00000700ul
-#define MOD_GEN				0x00001800ul
-#define EXT_LVDS_CLK			0x00001800ul	/* LTPro */
-#define BLINK_RATE			0x00006000ul
-#define BLINK_RATE_PRO			0x00002000ul	/* LTPro */
-#define DONT_SHADOW_HEND		0x00004000ul	/* LTPro */
-#define DONT_USE_F32KHZ			0x00008000ul
-#define LCD_IO_DRIVE			0x00008000ul	/* XC/XL */
-#define FP_POL				0x00010000ul
-#define LP_POL				0x00020000ul
-#define DTMG_POL			0x00040000ul
-#define SCK_POL				0x00080000ul
-#define DITHER_SEL			0x00300000ul
-#define INVERSE_VIDEO_EN		0x00400000ul
-#define BL_CLK_SEL			0x01800000ul
-#define BL_LEVEL			0x0e000000ul
-#define BL_CLK_SEL_PRO			0x00800000ul	/* LTPro */
-#define BL_LEVEL_PRO			0x03000000ul	/* LTPro */
-#define BIAS_LEVEL_PRO			0x0c000000ul	/* LTPro */
-#define HSYNC_DELAY			0xf0000000ul
-#define TV_OUT_INDEX		BlockIOTag(0x1du)	/* LTPro */
-#define TV_REG_INDEX			0x000000fful
-#define TV_ON				0x00000100ul
-/*	?				0xfffffe00ul */
-#define GP_IO			IOPortTag(0x1eu, 0x1eu)	/* VT/GT */
-#define GP_IO_0				0x00000001ul
-#define GP_IO_1				0x00000002ul
-#define GP_IO_2				0x00000004ul
-#define GP_IO_3				0x00000008ul
-#define GP_IO_4				0x00000010ul
-#define GP_IO_5				0x00000020ul
-#define GP_IO_6				0x00000040ul
-#define GP_IO_7				0x00000080ul
-#define GP_IO_8				0x00000100ul
-#define GP_IO_9				0x00000200ul
-#define GP_IO_A				0x00000400ul
-#define GP_IO_B				0x00000800ul
-#define GP_IO_C				0x00001000ul
-#define GP_IO_D				0x00002000ul
-#define GP_IO_E				0x00004000ul
-#define GP_IO_F				0x00008000ul
-#define GP_IO_DIR_0			0x00010000ul
-#define GP_IO_DIR_1			0x00020000ul
-#define GP_IO_DIR_2			0x00040000ul
-#define GP_IO_DIR_3			0x00080000ul
-#define GP_IO_DIR_4			0x00100000ul
-#define GP_IO_DIR_5			0x00200000ul
-#define GP_IO_DIR_6			0x00400000ul
-#define GP_IO_DIR_7			0x00800000ul
-#define GP_IO_DIR_8			0x01000000ul
-#define GP_IO_DIR_9			0x02000000ul
-#define GP_IO_DIR_A			0x04000000ul
-#define GP_IO_DIR_B			0x08000000ul
-#define GP_IO_DIR_C			0x10000000ul
-#define GP_IO_DIR_D			0x20000000ul
-#define GP_IO_DIR_E			0x40000000ul
-#define GP_IO_DIR_F			0x80000000ul
-#define GP_IO_CNTL		BlockIOTag(0x1fu)	/* VT/GT */
-#define GP_IO_MODE			0x0000000ful
-/*	?				0x7ffffff0ul */
-#define GP_IO_EN			0x80000000ul
-#define HW_DEBUG		BlockIOTag(0x1fu)	/* VTB/GTB/LT */
-#define FAST_SRCCOPY_DIS		0x00000001ul
-#define BYPASS_SUBPIC_DBF		0x00000001ul	/* XL/XC */
-#define SRC_AUTONA_FIX_DIS		0x00000002ul
-#define SYNC_PD_EN			0x00000002ul	/* Mobility */
-#define DISP_QW_FIX_DIS			0x00000004ul
-#define GUIDST_WB_EXP_DIS		0x00000008ul
-#define CYC_ALL_FIX_DIS			0x00000008ul	/* GTPro */
-#define AGPPLL_FIX_EN			0x00000008ul	/* Mobility */
-#define SRC_AUTONA_ALWAYS_EN		0x00000010ul
-#define GUI_BEATS_HOST_P		0x00000010ul	/* GTPro */
-#define DRV_CNTL_DQMB_WEB		0x00000020ul
-#define FAST_FILL_SCISSOR_DIS		0x00000020ul	/* GT2c/VT4 */
-#define INTER_BLIT_FIX_DIS		0x00000020ul	/* GTPro */
-#define DRV_CNTL_MA			0x00000040ul
-#define AUTO_BLKWRT_COLOR_DIS		0x00000040ul	/* GT2c/VT4 */
-#define INTER_PRIM_DIS			0x00000040ul	/* GTPro */
-#define DRV_CNTL_MD			0x00000080ul
-#define CHG_DEV_ID			0x00000100ul
-#define SRC_TRACK_DST_FIX_DIS		0x00000200ul
-#define HCLK_FB_SKEW			0x00000380ul	/* GT2c/VT4 */
-#define SRC_TRACK_DST_FIX_DIS_P		0x00000080ul	/* GTPro */
-#define AUTO_BLKWRT_COLOR_DIS_P		0x00000100ul	/* GTPro */
-#define INTER_LINE_OVERLAP_DIS		0x00000200ul	/* GTPro */
-#define MEM_OE_PULLBACK			0x00000400ul
-#define DBL_BUFFER_EN			0x00000400ul	/* GTPro */
-#define MEM_WE_FIX_DIS			0x00000800ul
-#define MEM_OE_PULLBACK_B		0x00000800ul	/* GT2c/VT4 */
-#define CMDFIFO_SIZE_EN			0x00000800ul	/* GTPro */
-#define RD_EN_FIX_DIS			0x00001000ul
-#define MEM_WE_FIX_DIS_B		0x00001000ul
-#define AUTO_FF_DIS			0x00001000ul	/* GTPro */
-#define CMDFIFO_SIZE_DIS		0x00002000ul	/* GT2c/VT4 */
-#define AUTO_BLKWRT_DIS			0x00002000ul	/* GTPro */
-#define GUI_BEATS_HOST			0x00004000ul	/* GT2c/VT4 */
-#define ORED_INVLD_RB_CACHE		0x00004000ul	/* GTPro */
-#define BLOCK_DBL_BUF			0x00008000ul	/* GTPro */
-#define R2W_TURNAROUND_DELAY		0x00020000ul	/* GT2c/VT4 */
-#define ENA_32BIT_DATA_BUS		0x00040000ul	/* GT2c/VT4 */
-#define HCLK_FB_SKEW_P			0x00070000ul	/* GTPro */
-#define ENA_FLASH_ROM			0x00080000ul	/* GT2c/VT4 */
-#define DISABLE_SWITCH_FIX		0x00080000ul	/* GTPro */
-#define MCLK_START_EN			0x00080000ul	/* LTPro */
-#define SEL_VBLANK_BDL_BUF		0x00100000ul	/* GTPro */
-#define CMDFIFO_64EN			0x00200000ul	/* GTPro */
-#define BM_FIX_DIS			0x00400000ul	/* GTPro */
-#define Z_SWITCH_EN			0x00800000ul	/* LTPro */
-#define FLUSH_HOST_WB			0x01000000ul	/* GTPro */
-#define HW_DEBUG_WRITE_MSK_FIX_DIS	0x02000000ul	/* LTPro */
-#define Z_NO_WRITE_EN			0x04000000ul	/* LTPro */
-#define DISABLE_PCLK_RESET_P		0x08000000ul	/* LTPro */
-#define PM_D3_SUPPORT_ENABLE_P		0x10000000ul	/* LTPro */
-#define STARTCYCLE_FIX_ENABLE		0x20000000ul	/* LTPro */
-#define DONT_RST_CHAREN			0x20000000ul	/* XL/XC */
-#define C3_FIX_ENABLE			0x40000000ul	/* LTPro */
-#define BM_HOSTRA_EN			0x40000000ul	/* XL/XC */
-#define PKGBGAb				0x80000000ul	/* XL/XC */
-#define AUTOEXP_HORZ_FIX		0x80000000ul	/* Mobility */
-#define SCRATCH_REG0		IOPortTag(0x10u, 0x20u)
-#define SCRATCH_REG1		IOPortTag(0x11u, 0x21u)
-/*	BIOS_BASE_SEGMENT		0x0000007ful */	/* As above */
-/*	?				0x00000f80ul */
-#define BIOS_INIT_DAC_SUBTYPE		0x0000f000ul
-/*	?				0xffff0000ul */
-#define SCRATCH_REG2		BlockIOTag(0x22u)	/* LT */
-#define SCRATCH_REG3		BlockIOTag(0x23u)	/* GTPro */
-/*	Not described here		0x07fffffful */
-#define DISPLAY_SWITCH_DISABLE		0x08000000ul
-/*	Not described here		0xf0000000ul */
-#define CLOCK_CNTL		IOPortTag(0x12u, 0x24u)
-#define CLOCK_BIT			0x00000004ul	/* For ICS2595 */
-#define CLOCK_PULSE			0x00000008ul	/* For ICS2595 */
-#define CLOCK_SELECT			0x0000000ful
-#define CLOCK_DIVIDER			0x00000030ul
-#define CLOCK_STROBE			0x00000040ul
-#define CLOCK_DATA			0x00000080ul
-/*	?				0x00000100ul */
-#define PLL_WR_EN			0x00000200ul	/* For internal PLL */
-#define PLL_ADDR			0x0000fc00ul	/* For internal PLL */
-#define PLL_DATA			0x00ff0000ul	/* For internal PLL */
-/*	?				0xff000000ul */
-#define CONFIG_STAT64_1		BlockIOTag(0x25u)	/* GTPro */
-#define CFG_SUBSYS_DEV_ID		0x000000fful
-#define CFG_SUBSYS_VEN_ID		0x00ffff00ul
-/*	?				0x1f000000ul */
-#define CFG_DIMM_TYPE			0xe0000000ul
-#define CFG_PCI_SUBSYS_DEV_ID		0x0000fffful	/* XC/XL */
-#define CFG_PCI_SUBSYS_VEN_ID		0xffff0000ul	/* XC/XL */
-#define CONFIG_STAT64_2		BlockIOTag(0x26u)	/* GTPro */
-#define CFG_DIMM_TYPE_3			0x00000001ul
-/*	?				0x0000001eul */
-#define CFG_ROMWRTEN			0x00000020ul
-#define CFG_AGPVCOGAIN			0x000000c0ul
-#define CFG_PCI_TYPE			0x00000100ul
-#define CFG_AGPSKEW			0x00000e00ul
-#define CFG_X1CLKSKEW			0x00007000ul
-#define CFG_PANEL_ID_P			0x000f8000ul	/* LTPro */
-/*	?				0x00100000ul */
-#define CFG_PREFETCH_EN			0x00200000ul
-#define CFG_ID_DISABLE			0x00400000ul
-#define CFG_PRE_TESTEN			0x00800000ul
-/*	?				0x01000000ul */
-#define CFG_PCI5VEN			0x02000000ul	/* LTPro */
-#define CFG_VGA_DISABLE			0x04000000ul
-#define CFG_ENINTB			0x08000000ul
-/*	?				0x10000000ul */
-#define CFG_ROM_REMAP_2			0x20000000ul
-#define CFG_IDSEL			0x40000000ul
-/*	?				0x80000000ul */
-#define TV_OUT_DATA		BlockIOTag(0x27u)	/* LTPro */
-#define BUS_CNTL		IOPortTag(0x13u, 0x28u)
-#define BUS_WS				0x0000000ful
-#define BUS_DBL_RESYNC			0x00000001ul	/* VTB/GTB/LT */
-#define BUS_MSTR_RESET			0x00000002ul	/* VTB/GTB/LT */
-#define BUS_FLUSH_BUF			0x00000004ul	/* VTB/GTB/LT */
-#define BUS_STOP_REQ_DIS		0x00000008ul	/* VTB/GTB/LT */
-#define BUS_ROM_WS			0x000000f0ul
-#define BUS_APER_REG_DIS		0x00000010ul	/* VTB/GTB/LT */
-#define BUS_EXTRA_PIPE_DIS		0x00000020ul	/* VTB/GTB/LT */
-#define BUS_MASTER_DIS			0x00000040ul	/* VTB/GTB/LT */
-#define BUS_ROM_WRT_EN			0x00000080ul	/* GTPro */
-#define BUS_ROM_PAGE			0x00000f00ul
-#define BUS_MINOR_REV_ID		0x00000700ul	/* LTPro */
-/*		First silicom - Prototype (A11)	0x00000000ul */
-/*		Metal mask spin (A12 & A13)	0x00000100ul */
-/*		All layer spin (A21)		0x00000200ul */
-/*		Fast metal spin (A22) - Prod.	0x00000300ul */
-/*		All layer spin (A31)		0x00000700ul */
-/*	?				0x00000800ul */	/* LTPro */
-#define BUS_CHIP_HIDDEN_REV		0x00000300ul	/* XC/XL */
-/*	?				0x00001c00ul */	/* XC/XL */
-#define BUS_ROM_DIS			0x00001000ul
-#define BUS_IO_16_EN			0x00002000ul	/* GX */
-#define BUS_PCI_READ_RETRY_EN		0x00002000ul	/* VTB/GTB/LT */
-#define BUS_DAC_SNOOP_EN		0x00004000ul
-#define BUS_PCI_RETRY_EN		0x00008000ul	/* VT/GT */
-#define BUS_PCI_WRT_RETRY_EN		0x00008000ul	/* VTB/GTB/LT */
-#define BUS_FIFO_WS			0x000f0000ul
-#define BUS_RETRY_WS			0x000f0000ul	/* VTB/GTB/LT */
-#define BUS_FIFO_ERR_INT_EN		0x00100000ul
-#define BUS_MSTR_RD_MULT		0x00100000ul	/* VTB/GTB/LT */
-#define BUS_FIFO_ERR_INT		0x00200000ul
-#define BUS_MSTR_RD_LINE		0x00200000ul	/* VTB/GTB/LT */
-#define BUS_HOST_ERR_INT_EN		0x00400000ul
-#define BUS_SUSPEND			0x00400000ul	/* GTPro */
-#define BUS_HOST_ERR_INT		0x00800000ul
-#define BUS_LAT16X			0x00800000ul	/* GTPro */
-#define BUS_PCI_DAC_WS			0x07000000ul
-#define BUS_RD_DISCARD_EN		0x01000000ul	/* VTB/GTB/LT */
-#define BUS_RD_ABORT_EN			0x02000000ul	/* VTB/GTB/LT */
-#define BUS_MSTR_WS			0x04000000ul	/* VTB/GTB/LT */
-#define BUS_PCI_DAC_DLY			0x08000000ul
-#define BUS_EXT_REG_EN			0x08000000ul	/* VT/GT */
-#define BUS_PCI_MEMW_WS			0x10000000ul
-#define BUS_MSTR_DISCONNECT_EN		0x10000000ul	/* VTB/GTB/LT */
-#define BUS_PCI_BURST_DEC		0x20000000ul	/* GX/CX */
-#define BUS_BURST			0x20000000ul	/* 264xT */
-#define BUS_WRT_BURST			0x20000000ul	/* VTB/GTB/LT */
-#define BUS_RDY_READ_DLY		0xc0000000ul
-#define BUS_READ_BURST			0x40000000ul	/* VTB/GTB/LT */
-#define BUS_RDY_READ_DLY_B		0x80000000ul	/* VTB/GTB/LT */
-#define LCD_INDEX		BlockIOTag(0x29u)	/* LTPro */
-#define LCD_REG_INDEX			0x0000003ful
-/*	?				0x000000c0ul */
-#define LCD_DISPLAY_DIS			0x00000100ul
-#define LCD_SRC_SEL			0x00000200ul
-#define LCD_SRC_SEL_CRTC1			0x00000000ul
-#define LCD_SRC_SEL_CRTC2			0x00000200ul
-#define LCD_CRTC2_DISPLAY_DIS		0x00000400ul
-#define LCD_GUI_ACTIVE			0x00000800ul	/* XC/XL */
-/*	?				0x00fff000ul */
-#define LCD_MONDET_SENSE		0x01000000ul	/* XC/XL */
-#define LCD_MONDET_INT_POL		0x02000000ul	/* XC/XL */
-#define LCD_MONDET_INT_EN		0x04000000ul	/* XC/XL */
-#define LCD_MONDET_INT			0x08000000ul	/* XC/XL */
-#define LCD_MONDET_EN			0x10000000ul	/* XC/XL */
-#define LCD_EN_PL			0x20000000ul	/* XC/XL */
-/*	?				0xc0000000ul */
-#define HFB_PITCH_ADDR		BlockIOTag(0x2au)	/* LT */
-#define LCD_DATA		BlockIOTag(0x2au)	/* LTPro */
-#define EXT_MEM_CNTL		BlockIOTag(0x2bu)	/* VTB/GTB/LT */
-#define MEM_CNTL		IOPortTag(0x14u, 0x2cu)
-#define CTL_MEM_SIZE			0x00000007ul
-/*	?				0x00000008ul */
-#define CTL_MEM_REFRESH			0x00000078ul	/* VT/GT */
-#define CTL_MEM_SIZEB			0x0000000ful	/* VTB/GTB/LT */
-#define CTL_MEM_RD_LATCH_EN		0x00000010ul
-#define CTL_MEM_RD_LATCH_DLY		0x00000020ul
-#define CTL_MEM_LATENCY			0x00000030ul	/* VTB/GTB/LT */
-#define CTL_MEM_SD_LATCH_EN		0x00000040ul
-#define CTL_MEM_SD_LATCH_DLY		0x00000080ul
-#define CTL_MEM_LATCH			0x000000c0ul	/* VTB/GTB/LT */
-#define CTL_MEM_WDOE_CNTL		0x000000c0ul	/* XC/XL */
-#define CTL_MEM_FULL_PLS		0x00000100ul
-#define CTL_MEM_CYC_LNTH_AUX		0x00000180ul	/* VT/GT */
-#define CTL_MEM_TRP			0x00000300ul	/* VTB/GTB/LT */
-#define CTL_MEM_CYC_LNTH		0x00000600ul
-#define CTL_MEM_REFRESH_RATE		0x00001800ul	/* 264xT */
-#define CTL_MEM_TRCD			0x00000c00ul	/* VTB/GTB/LT */
-#define CTL_MEM_WR_RDY_SEL		0x00000800ul	/* GX/CX */
-#define CTL_MEM_EXT_RMW_CYC_EN		0x00001000ul	/* GX/CX */
-#define CTL_MEM_TCRD			0x00001000ul	/* VTB/GTB/LT */
-#define CTL_MEM_DLL_RESET		0x00002000ul	/* VT/GT */
-#define CTL_MEM_TR2W			0x00002000ul	/* GTPro */
-#define CTL_MEM_ACTV_PRE		0x0000c000ul	/* VT/GT */
-#define CTL_MEM_CAS_PHASE		0x00004000ul	/* GTPro */
-#define CTL_MEM_OE_PULLBACK		0x00008000ul	/* GTPro */
-#define CTL_MEM_TWR			0x0000c000ul	/* XC/XL */
-#define CTL_MEM_BNDRY			0x00030000ul
-#define CTL_MEM_BNDRY_0K			0x00000000ul
-#define CTL_MEM_BNDRY_256K			0x00010000ul
-#define CTL_MEM_BNDRY_512K			0x00020000ul
-#define CTL_MEM_BNDRY_1024K			0x00030000ul
-#define CTL_MEM_DLL_GAIN_CNTL		0x00030000ul	/* VT/GT */
-#define CTL_MEM_BNDRY_EN		0x00040000ul
-#define CTL_MEM_SDRAM_RESET		0x00040000ul	/* VT/GT */
-#define CTL_MEM_TRAS			0x00070000ul	/* VTB/GTB/LT */
-#define CTL_MEM_TILE_SELECT		0x00180000ul	/* VT/GT */
-#define CTL_MEM_REFRESH_DIS		0x00080000ul	/* VTB/GTB/LT */
-#define CTL_MEM_LOW_LATENCY_MODE	0x00200000ul	/* VT/GT */
-#define CTL_MEM_CDE_PULLBACK		0x00400000ul	/* VT/GT */
-#define CTL_MEM_REFRESH_RATE_B		0x00f00000ul	/* VTB/GTB/LT */
-#define CTL_MEM_PIX_WIDTH		0x07000000ul
-#define CTL_MEM_LOWER_APER_ENDIAN	0x03000000ul	/* VTB/GTB/LT */
-#define CTL_MEM_OE_SELECT		0x18000000ul	/* VT/GT */
-#define CTL_MEM_UPPER_APER_ENDIAN	0x0c000000ul	/* VTB/GTB/LT */
-/*	?				0xe0000000ul */
-#define CTL_MEM_PAGE_SIZE		0x30000000ul	/* VTB/GTB/LT */
-#define MEM_VGA_WP_SEL		IOPortTag(0x15u, 0x2du)
-#define MEM_VGA_WPS0			0x0000fffful
-#define MEM_VGA_WPS1			0xffff0000ul
-#define MEM_VGA_RP_SEL		IOPortTag(0x16u, 0x2eu)
-#define MEM_VGA_RPS0			0x0000fffful
-#define MEM_VGA_RPS1			0xffff0000ul
-#define LT_GIO			BlockIOTag(0x2fu)	/* LT */
-#define I2C_CNTL_1		BlockIOTag(0x2fu)	/* GTPro */
-#define I2C_DATA_PORT			0x000000fful
-#define I2C_DATA_COUNT			0x0000ff00ul
-#define I2C_ADDR_COUNT			0x00070000ul
-/*	?				0x00380000ul */
-#define I2C_SEL				0x00400000ul
-/*	?				0x00800000ul */
-#define I2C_TIME_LIMIT			0xff000000ul
-#define DAC_REGS		IOPortTag(0x17u, 0x30u)	/* 4 separate bytes */
-#define M64_DAC_WRITE			(DAC_REGS + 0)
-#define M64_DAC_DATA			(DAC_REGS + 1)
-#define M64_DAC_MASK			(DAC_REGS + 2)
-#define M64_DAC_READ			(DAC_REGS + 3)
-#define DAC_CNTL		IOPortTag(0x18u, 0x31u)
-#define DAC_EXT_SEL			0x00000003ul
-#define DAC_EXT_SEL_RS2				0x000000001ul
-#define DAC_EXT_SEL_RS3				0x000000002ul
-#define DAC_RANGE_CTL			0x00000003ul	/* VTB/GTB/LT */
-#define DAC_BLANKING			0x00000004ul	/* 264xT */
-#define DAC_CMP_DIS			0x00000008ul	/* 264xT */
-#define DAC1_CLK_SEL			0x00000010ul	/* LTPro */
-#define DAC_PALETTE_ACCESS_CNTL		0x00000020ul	/* LTPro */
-#define DAC_PALETTE2_SNOOP_EN		0x00000040ul	/* LTPro */
-#define DAC_CMP_OUTPUT			0x00000080ul	/* 264xT */
-#define DAC_8BIT_EN			0x00000100ul
-#define DAC_PIX_DLY			0x00000600ul
-#define DAC_DIRECT			0x00000400ul	/* VTB/GTB/LT */
-#define DAC_BLANK_ADJ			0x00001800ul
-#define DAC_PAL_CLK_SEL			0x00000800ul	/* VTB/GTB/LT */
-#define DAC_CRT_SENSE			0x00000800ul	/* XC/XL */
-#define DAC_CRT_DETECTION_ON		0x00001000ul	/* XC/XL */
-#define DAC_VGA_ADR_EN			0x00002000ul
-#define DAC_FEA_CON_EN			0x00004000ul	/* 264xT */
-#define DAC_PDMN			0x00008000ul	/* 264xT */
-#define DAC_TYPE			0x00070000ul
-/*	?				0x00f80000ul */
-#define DAC_MON_ID_STATE0		0x01000000ul	/* GX-E+/CX */
-#define DAC_GIO_STATE_1			0x01000000ul	/* 264xT */
-#define DAC_MON_ID_STATE1		0x02000000ul	/* GX-E+/CX */
-#define DAC_GIO_STATE_0			0x02000000ul	/* 264xT */
-#define DAC_MON_ID_STATE2		0x04000000ul	/* GX-E+/CX */
-#define DAC_GIO_STATE_4			0x04000000ul	/* 264xT */
-#define DAC_MON_ID_DIR0			0x08000000ul	/* GX-E+/CX */
-#define DAC_GIO_DIR_1			0x08000000ul	/* 264xT */
-#define DAC_MON_ID_DIR1			0x10000000ul	/* GX-E+/CX */
-#define DAC_GIO_DIR_0			0x10000000ul	/* 264xT */
-#define DAC_MON_ID_DIR2			0x20000000ul	/* GX-E+/CX */
-#define DAC_GIO_DIR_4			0x20000000ul	/* 264xT */
-#define DAC_MAN_CMP_STATE		0x40000000ul	/* GX-E+ */
-#define DAC_RW_WS			0x80000000ul	/* VT/GT */
-#define HORZ_STRETCHING		BlockIOTag(0x32u)	/* LT */
-#define HORZ_STRETCH_BLEND		0x00000ffful
-#define HORZ_STRETCH_RATIO		0x0000fffful
-#define HORZ_STRETCH_LOOP		0x00070000ul
-#define HORZ_STRETCH_LOOP09			0x00000000ul
-#define HORZ_STRETCH_LOOP11			0x00010000ul
-#define HORZ_STRETCH_LOOP12			0x00020000ul
-#define HORZ_STRETCH_LOOP14			0x00030000ul
-#define HORZ_STRETCH_LOOP15			0x00040000ul
-/*	?					0x00050000ul */
-/*	?					0x00060000ul */
-/*	?					0x00070000ul */
-/*	?				0x00080000ul */
-#define HORZ_PANEL_SIZE			0x0ff00000ul	/* XC/XL */
-/*	?				0x10000000ul */
-#define AUTO_HORZ_RATIO			0x20000000ul	/* XC/XL */
-#define HORZ_STRETCH_MODE		0x40000000ul
-#define HORZ_STRETCH_EN			0x80000000ul
-#define EXT_DAC_REGS		BlockIOTag(0x32u)	/* GTPro */
-#define EXT_DAC_REG_SEL			0x0000000ful
-/*	?				0x000000f0ul */
-#define EXT_DAC_DATA			0x0000ff00ul
-#define EXT_DAC_EN			0x00010000ul
-#define EXT_DAC_WID			0x00020000ul
-/*	?				0xfffc0000ul */
-#define VERT_STRETCHING		BlockIOTag(0x33u)	/* LT */
-#define VERT_STRETCH_RATIO0		0x000003fful
-#define VERT_STRETCH_RATIO1		0x000ffc00ul
-#define VERT_STRETCH_RATIO2		0x3ff00000ul
-#define VERT_STRETCH_USE0		0x40000000ul
-#define VERT_STRETCH_EN			0x80000000ul
-#define GEN_TEST_CNTL		IOPortTag(0x19u, 0x34u)
-#define GEN_EE_DATA_OUT			0x00000001ul	/* GX/CX */
-#define GEN_GIO2_DATA_OUT		0x00000001ul	/* 264xT */
-#define GEN_EE_CLOCK			0x00000002ul	/* GX/CX */
-/*	?				0x00000002ul */	/* 264xT */
-#define GEN_EE_CHIP_SEL			0x00000004ul	/* GX/CX */
-#define GEN_GIO3_DATA_OUT		0x00000004ul	/* 264xT */
-#define GEN_EE_DATA_IN			0x00000008ul	/* GX/CX */
-#define GEN_GIO2_DATA_IN		0x00000008ul	/* 264xT */
-#define GEN_EE_EN			0x00000010ul	/* GX/CX */
-#define GEN_GIO2_ENABLE			0x00000010ul	/* 264xT */
-#define GEN_ICON2_ENABLE		0x00000010ul	/* XC/XL */
-#define GEN_OVR_OUTPUT_EN		0x00000020ul	/* GX/CX */
-#define GEN_GIO2_WRITE			0x00000020ul	/* 264xT */
-#define GEN_CUR2_ENABLE			0x00000020ul	/* XC/XL */
-#define GEN_OVR_POLARITY		0x00000040ul	/* GX/CX */
-#define GEN_ICON_ENABLE			0x00000040ul	/* XC/XL */
-#define GEN_CUR_EN			0x00000080ul
-#define GEN_GUI_EN			0x00000100ul	/* GX/CX */
-#define GEN_GUI_RESETB			0x00000100ul	/* 264xT */
-#define GEN_BLOCK_WR_EN			0x00000200ul	/* GX */
-/*	?				0x00000200ul */	/* CX/264xT */
-#define GEN_SOFT_RESET			0x00000200ul	/* VTB/GTB/LT */
-#define GEN_MEM_TRISTATE		0x00000400ul	/* GTPro */
-/*	?				0x00000800ul */
-#define GEN_TEST_VECT_MODE		0x00003000ul	/* VT/GT */
-/*	?				0x0000c000ul */
-#define GEN_TEST_FIFO_EN		0x00010000ul	/* GX/CX */
-#define GEN_TEST_GUI_REGS_EN		0x00020000ul	/* GX/CX */
-#define GEN_TEST_VECT_EN		0x00040000ul	/* GX/CX */
-#define GEN_TEST_CRC_STR		0x00080000ul	/* GX-C/-D */
-/*	?				0x00080000ul */	/* GX-E+/CX */
-#define GEN_TEST_MODE_T			0x000f0000ul	/* 264xT */
-#define GEN_TEST_MODE			0x00700000ul	/* GX/CX */
-#define GEN_TEST_CNT_EN			0x00100000ul	/* 264xT */
-#define GEN_TEST_CRC_EN			0x00200000ul	/* 264xT */
-/*	?				0x00400000ul */	/* 264xT */
-/*	?				0x00800000ul */
-#define GEN_TEST_MEM_WR			0x01000000ul	/* GX-C/-D */
-#define GEN_TEST_MEM_STROBE		0x02000000ul	/* GX-C/-D */
-#define GEN_TEST_DST_SS_EN		0x04000000ul	/* GX/CX */
-#define GEN_TEST_DST_SS_STROBE		0x08000000ul	/* GX/CX */
-#define GEN_TEST_SRC_SS_EN		0x10000000ul	/* GX/CX */
-#define GEN_TEST_SRC_SS_STROBE		0x20000000ul	/* GX/CX */
-#define GEN_TEST_CNT_VALUE		0x3f000000ul	/* 264xT */
-#define GEN_TEST_CC_EN			0x40000000ul	/* GX/CX */
-#define GEN_TEST_CC_STROBE		0x80000000ul	/* GX/CX */
-/*	?				0xc0000000ul */	/* 264xT */
-#define GEN_DEBUG_MODE			0xff000000ul	/* VTB/GTB/LT */
-#define LCD_GEN_CTRL		BlockIOTag(0x35u)	/* LT */
-#define CRT_ON				0x00000001ul
-#define LCD_ON				0x00000002ul
-#define HORZ_DIVBY2_EN			0x00000004ul
-#define TRISTATE_MEM_EN			0x00000008ul
-#define DONT_DS_ICON			0x00000008ul	/* LTPro */
-#define LOCK_8DOT			0x00000010ul
-#define ICON_ENABLE			0x00000020ul
-#define DONT_SHADOW_VPAR		0x00000040ul
-#define TOGGLE_EN			0x00000080ul
-#define V2CLK_PM_EN			0x00000080ul	/* LTPro */
-#define RST_FM				0x00000100ul
-#define DISABLE_PCLK_RESET		0x00000200ul	/* XC/XL */
-#define DIS_HOR_CRT_DIVBY2		0x00000400ul
-#define SCLK_SEL			0x00000800ul
-#define SCLK_DELAY			0x0000f000ul
-#define MCLK_PM_EN			0x00010000ul
-#define TVCLK_PM_EN			0x00010000ul	/* LTPro */
-#define VCLK_DAC_PM_EN			0x00020000ul
-#define VCLK_LCD_OFF			0x00040000ul
-#define SLOWDOWN_XMCLK			0x00080000ul
-#define SELECT_WAIT_4MS			0x00080000ul	/* LTPro */
-#define XTALIN_PM_EN			0x00080000ul	/* XC/XL */
-#define LCD_CLK_RATIO			0x00100000ul
-#define V2CLK_DAC_PM_EN			0x00100000ul	/* LTPro */
-#define LVDS_EN				0x00200000ul
-#define LVDS_PLL_EN			0x00400000ul
-#define LVDS_PLL_RESET			0x00800000ul
-#define LVDS_RESERVED_BITS		0x07000000ul
-#define CRTC_RW_SELECT			0x08000000ul	/* LTPro */
-#define USE_SHADOWED_VEND		0x10000000ul
-#define USE_SHADOWED_ROWCUR		0x20000000ul
-#define SHADOW_EN			0x40000000ul
-#define SHADOW_RW_EN			0x80000000ul
-#define CUSTOM_MACRO_CNTL	BlockIOTag(0x35u)	/* GTPro */
-#define POWER_MANAGEMENT	BlockIOTag(0x36u)	/* LT */
-#define PWR_MGT_ON			0x00000001ul
-#define PWR_MGT_MODE			0x00000006ul
-#define AUTO_PWRUP_EN			0x00000008ul
-#define ACTIVITY_PIN_ON			0x00000010ul
-#define STANDBY_POL			0x00000020ul
-#define SUSPEND_POL			0x00000040ul
-#define SELF_REFRESH			0x00000080ul
-#define ACTIVITY_PIN_EN			0x00000100ul
-#define KEYBD_SNOOP			0x00000200ul
-#define USE_F32KHZ			0x00000400ul	/* LTPro */
-#define DONT_USE_XTALIN			0x00000400ul	/* XC/XL */
-#define TRISTATE_MEM_EN_P		0x00000800ul	/* LTPro */
-#define LCDENG_TEST_MODE		0x0000f000ul
-#define STANDBY_COUNT			0x000f0000ul
-#define SUSPEND_COUNT			0x00f00000ul
-#define BAISON				0x01000000ul
-#define BLON				0x02000000ul
-#define DIGON				0x04000000ul
-#define PM_D3_SUPPORT_ENABLE		0x08000000ul	/* XC/XL */
-#define STANDBY_NOW			0x10000000ul
-#define SUSPEND_NOW			0x20000000ul
-#define PWR_MGT_STATUS			0xc0000000ul
-#define CONFIG_CNTL		IOPortTag(0x1au, 0x37u)
-#define CFG_MEM_AP_SIZE			0x00000003ul
-#define CFG_MEM_VGA_AP_EN		0x00000004ul
-/*	?				0x00000008ul */
-#define CFG_MEM_AP_LOC			0x00003ff0ul
-/*	?				0x0000c000ul */
-#define CFG_CARD_ID			0x00070000ul
-#define CFG_VGA_DIS			0x00080000ul
-/*	?				0x00f00000ul */
-#define CFG_CDE_WINDOW			0x3f000000ul	/* VT/GT */
-/*	?				0xc0000000ul */
-#define CONFIG_CHIP_ID		IOPortTag(0x1bu, 0x38u)	/* Read */
-#define CFG_CHIP_TYPE0			0x000000fful
-#define CFG_CHIP_TYPE1			0x0000ff00ul
-#define CFG_CHIP_TYPE			0x0000fffful
-#define CFG_CHIP_CLASS			0x00ff0000ul
-#define CFG_CHIP_REV			0xff000000ul
-#define CFG_CHIP_VERSION		0x07000000ul	/* 264xT */
-#define CFG_CHIP_FOUNDRY		0x38000000ul	/* 264xT */
-#define CFG_CHIP_REVISION		0xc0000000ul	/* 264xT */
-#define CONFIG_STATUS64_0	IOPortTag(0x1cu, 0x39u)	/* Read (R/W (264xT)) */
-#define CFG_BUS_TYPE			0x00000007ul	/* GX/CX */
-#define CFG_MEM_TYPE_T			0x00000007ul	/* 264xT */
-#define CFG_MEM_TYPE			0x00000038ul	/* GX/CX */
-#define CFG_DUAL_CAS_EN_T		0x00000008ul	/* 264xT */
-#define CFG_ROM_128K_EN			0x00000008ul	/* VTB/GTB/LT */
-#define CFG_ROM_REMAP			0x00000008ul	/* GTPro */
-#define CFG_VGA_EN_T			0x00000010ul	/* VT/GT */
-#define CFG_CLOCK_EN			0x00000020ul	/* 264xT */
-#define CFG_DUAL_CAS_EN			0x00000040ul	/* GX/CX */
-#define CFG_VMC_SENSE			0x00000040ul	/* VT/GT */
-#define CFG_SHARED_MEM_EN		0x00000040ul	/* VTB/GTB/LT */
-#define CFG_LOCAL_BUS_OPTION		0x00000180ul	/* GX/CX */
-#define CFG_VFC_SENSE			0x00000080ul	/* VT/GT */
-#define CFG_INIT_DAC_TYPE		0x00000e00ul	/* GX/CX */
-#define CFG_INIT_CARD_ID		0x00007000ul	/* GX-C/-D */
-#define CFG_BLK_WR_SIZE			0x00001000ul	/* GX-E+ */
-#define CFG_INT_QSF_EN			0x00002000ul	/* GX-E+ */
-/*	?				0x00004000ul */	/* GX-E+ */
-/*	?				0x00007000ul */	/* CX */
-#define CFG_TRI_BUF_DIS			0x00008000ul	/* GX/CX */
-#define CFG_BOARD_ID			0x0000ff00ul	/* VT/GT */
-#define CFG_EXT_RAM_ADDR		0x003f0000ul	/* GX/CX */
-#define CFG_PANEL_ID			0x001f0000ul	/* LT */
-#define CFG_MACROVISION_EN		0x00200000ul	/* GTPro */
-#define CFG_ROM_DIS			0x00400000ul	/* GX/CX */
-#define CFG_PCI33EN			0x00400000ul	/* GTPro */
-#define CFG_VGA_EN			0x00800000ul	/* GX/CX */
-#define CFG_FULLAGP			0x00800000ul	/* GTPro */
-#define CFG_ARITHMOS_ENABLE		0x00800000ul	/* XC/XL */
-#define CFG_LOCAL_BUS_CFG		0x01000000ul	/* GX/CX */
-#define CFG_CHIP_EN			0x02000000ul	/* GX/CX */
-#define CFG_LOCAL_READ_DLY_DIS		0x04000000ul	/* GX/CX */
-#define CFG_ROM_OPTION			0x08000000ul	/* GX/CX */
-#define CFG_BUS_OPTION			0x10000000ul	/* GX/CX */
-#define CFG_LOCAL_DAC_WR_EN		0x20000000ul	/* GX/CX */
-#define CFG_VLB_RDY_DIS			0x40000000ul	/* GX/CX */
-#define CFG_AP_4GBYTE_DIS		0x80000000ul	/* GX/CX */
-#define CONFIG_STATUS64_1	IOPortTag(0x1du, 0x3au)	/* Read */
-#define CFG_PCI_DAC_CFG			0x00000001ul	/* GX/CX */
-/*	?				0x0000001eul */	/* GX/CX */
-#define CFG_1C8_IO_SEL			0x00000020ul	/* GX/CX */
-/*	?				0xffffffc0ul */	/* GX/CX */
-#define CRC_SIG				0xfffffffful	/* 264xT */
-#define MPP_CONFIG		BlockIOTag(0x3bu)	/* VTB/GTB/LT */
-#define MPP_PRESCALE			0x00000007ul
-/*	?				0x00000008ul */
-#define MPP_NSTATES			0x00000030ul
-/*	?					0x00000000ul */
-#define MPP_NSTATES_2				0x00000010ul
-#define MPP_NSTATES_4				0x00000020ul
-#define MPP_NSTATES_8				0x00000030ul
-#define MPP_FORMAT			0x000000c0ul
-#define MPP_FORMAT_DO8				0x00000000ul
-#define MPP_FORMAT_DO16				0x00000040ul
-#define MPP_FORMAT_DA8				0x00000080ul
-#define MPP_FORMAT_DA16				0x000000c0ul
-#define MPP_WAIT_STATE			0x00000700ul
-#define MPP_CHKRDY_EN			0x00000800ul
-#define MPP_INSERT_WAIT			0x00001000ul
-#define MPP_TRISTATE_ADDR		0x00002000ul
-/*	?				0x00004000ul */
-#define MPP_READ_EARLY			0x00008000ul
-#define MPP_RW_MODE			0x00030000ul
-#define MPP_INT_MASK			0x000c0000ul
-#define MPP_AUTO_INC_EN			0x00300000ul
-#define MPP_CHKREQ_EN			0x00400000ul
-#define MPP_CHKREQ_MODE			0x00800000ul
-#define MPP_BUFFER_SIZE			0x03000000ul
-#define MPP_BUFFER_MODE			0x0c000000ul
-#define MPP_BUFFER_MODE_NORMAL			0x00000000ul
-#define MPP_BUFFER_MODE_PREFETCH		0x04000000ul
-#define MPP_BUFFER_MODE_BUS_MASTER		0x08000000ul
-/*	?					0x0c000000ul */
-/*	?				0x30000000ul */
-#define MPP_BUSY			0x40000000ul
-#define MPP_EN				0x80000000ul
-#define MPP_STROBE_SEQ		BlockIOTag(0x3cu)	/* VTB/GTB/LT */
-#define MPP_STB0_SEQ			0x000000fful
-#define MPP_STB1_SEQ			0x0000ff00ul
-/*	?				0xffff0000ul */
-#define MPP_ADDR		BlockIOTag(0x3du)	/* VTB/GTB/LT */
-#define MPP_DATA		BlockIOTag(0x3eu)	/* VTB/GTB/LT */
-#define TVO_CNTL		BlockIOTag(0x3fu)	/* VTB/GTB/LT */
-#define TVO_H_TOT_PIX			0x00000007ul
-#define TVO_PC_OVR_DIS			0x00000008ul
-#define TVO_H_TOT_EDGE			0x00000010ul
-/*	?				0x00000060ul */
-#define TVO_VBLANK_ONLY			0x00000080ul
-/*	?				0x0000ff00ul */
-#define TVO_MPEG_CLR_SRC		0x00030000ul
-/*	?				0x1ffc0000ul */
-#define TVO_MPEG_CLK_EN			0x20000000ul
-#define TVO_OVERRIDE_EN			0x40000000ul
-#define TVO_EN				0x80000000ul
-/*	GP_IO			IOPortTag(0x1eu, 0x1eu) */	/* See above */
-/*	CRTC_H_TOTAL_DISP	IOPortTag(0x1fu, 0x00u) */	/* Duplicate */
-#define DST_OFF_PITCH		BlockIOTag(0x40u)
-#define DST_OFFSET			0x000ffffful
-/*	?				0x00300000ul */
-#define DST_PITCH			0xffc00000ul
-#define DST_X			BlockIOTag(0x41u)
-#define DST_Y			BlockIOTag(0x42u)
-#define DST_Y_X			BlockIOTag(0x43u)
-#define DST_WIDTH		BlockIOTag(0x44u)
-#define DST_HEIGHT		BlockIOTag(0x45u)
-#define DST_HEIGHT_WIDTH	BlockIOTag(0x46u)
-#define DST_X_WIDTH		BlockIOTag(0x47u)
-#define DST_BRES_LNTH		BlockIOTag(0x48u)
-#define DST_BRES_ERR		BlockIOTag(0x49u)
-#define DST_BRES_INC		BlockIOTag(0x4au)
-#define DST_BRES_DEC		BlockIOTag(0x4bu)
-#define DST_CNTL		BlockIOTag(0x4cu)
-#define DST_X_DIR			0x00000001ul
-#define DST_Y_DIR			0x00000002ul
-#define DST_Y_MAJOR			0x00000004ul
-#define DST_X_TILE			0x00000008ul
-#define DST_Y_TILE			0x00000010ul
-#define DST_LAST_PEL			0x00000020ul
-#define DST_POLYGON_EN			0x00000040ul
-#define DST_24_ROT_EN			0x00000080ul
-#define DST_24_ROT			0x00000700ul
-#define DST_BRES_SIGN			0x00000800ul	/* GX/CX */
-#define DST_BRES_ZERO			0x00000800ul	/* CT */
-#define DST_POLYGON_RTEDGE_DIS		0x00001000ul	/* CT */
-#define TRAIL_X_DIR			0x00002000ul	/* GT */
-#define TRAP_FILL_DIR			0x00004000ul	/* GT */
-#define TRAIL_BRES_SIGN			0x00008000ul	/* GT */
-/*	?				0x00010000ul */
-#define BRES_SIGN_AUTO			0x00020000ul	/* GT */
-/*	?				0x00040000ul */
-#define ALPHA_OVERLAP_ENB		0x00080000ul	/* GTPro */
-#define SUB_PIX_ON			0x00100000ul	/* GTPro */
-/*	?				0xffe00000ul */
-/*	DST_Y_X			BlockIOTag(0x4du) */	/* Duplicate */
-#define TRAIL_BRES_ERR		BlockIOTag(0x4eu)	/* GT */
-#define TRAIL_BRES_INC		BlockIOTag(0x4fu)	/* GT */
-#define TRAIL_BRES_DEC		BlockIOTag(0x50u)	/* GT */
-#define LEAD_BRES_LNTH		BlockIOTag(0x51u)	/* GT */
-#define Z_OFF_PITCH		BlockIOTag(0x52u)	/* GT */
-#define Z_CNTL			BlockIOTag(0x53u)	/* GT */
-#define ALPHA_TST_CNTL		BlockIOTag(0x54u)	/* GTPro */
-/*	?			BlockIOTag(0x55u) */
-#define SECONDARY_STW_EXP	BlockIOTag(0x56u)	/* GTPro */
-#define SECONDARY_S_X_INC	BlockIOTag(0x57u)	/* GTPro */
-#define SECONDARY_S_Y_INC	BlockIOTag(0x58u)	/* GTPro */
-#define SECONDARY_S_START	BlockIOTag(0x59u)	/* GTPro */
-#define SECONDARY_W_X_INC	BlockIOTag(0x5au)	/* GTPro */
-#define SECONDARY_W_Y_INC	BlockIOTag(0x5bu)	/* GTPro */
-#define SECONDARY_W_START	BlockIOTag(0x5cu)	/* GTPro */
-#define SECONDARY_T_X_INC	BlockIOTag(0x5du)	/* GTPro */
-#define SECONDARY_T_Y_INC	BlockIOTag(0x5eu)	/* GTPro */
-#define SECONDARY_T_START	BlockIOTag(0x5fu)	/* GTPro */
-#define SRC_OFF_PITCH		BlockIOTag(0x60u)
-#define SRC_OFFSET			0x000ffffful
-/*	?				0x00300000ul */
-#define SRC_PITCH			0xffc00000ul
-#define SRC_X			BlockIOTag(0x61u)
-#define SRC_Y			BlockIOTag(0x62u)
-#define SRC_Y_X			BlockIOTag(0x63u)
-#define SRC_WIDTH1		BlockIOTag(0x64u)
-#define SRC_HEIGHT1		BlockIOTag(0x65u)
-#define SRC_HEIGHT1_WIDTH1	BlockIOTag(0x66u)
-#define SRC_X_START		BlockIOTag(0x67u)
-#define SRC_Y_START		BlockIOTag(0x68u)
-#define SRC_Y_X_START		BlockIOTag(0x69u)
-#define SRC_WIDTH2		BlockIOTag(0x6au)
-#define SRC_HEIGHT2		BlockIOTag(0x6bu)
-#define SRC_HEIGHT2_WIDTH2	BlockIOTag(0x6cu)
-#define SRC_CNTL		BlockIOTag(0x6du)
-#define SRC_PATT_EN			0x00000001ul
-#define SRC_PATT_ROT_EN			0x00000002ul
-#define SRC_LINEAR_EN			0x00000004ul
-#define SRC_BYTE_ALIGN			0x00000008ul
-#define SRC_LINE_X_DIR			0x00000010ul
-#define SRC_8X8X8_BRUSH			0x00000020ul	/* VTB/GTB */
-#define FAST_FILL_EN			0x00000040ul	/* VTB/GTB */
-#define SRC_TRACK_DST			0x00000080ul	/* VTB/GTB */
-#define BUS_MASTER_EN			0x00000100ul	/* VTB/GTB */
-#define BUS_MASTER_SYNC			0x00000200ul	/* VTB/GTB */
-#define BUS_MASTER_OP			0x00000c00ul	/* VTB/GTB */
-#define SRC_8X8X8_BRUSH_LOADED		0x00001000ul	/* VTB/GTB */
-#define COLOR_REG_WRITE_EN		0x00002000ul	/* VTB/GTB */
-#define BLOCK_WRITE_EN			0x00004000ul	/* VTB/GTB */
-/*	?				0xffff8000ul */
-/*	?			BlockIOTag(0x6eu) */
-/*	?			BlockIOTag(0x6fu) */
-#define SCALE_Y_OFF		BlockIOTag(0x70u)	/* GT */
-#define SCALE_OFF		BlockIOTag(0x70u)	/* GTPro */
-#define SECONDARY_SCALE_OFF	BlockIOTag(0x70u)	/* GTPro */
-#define TEX_0_OFF		BlockIOTag(0x70u)	/* GT */
-#define TEX_1_OFF		BlockIOTag(0x71u)	/* GT */
-#define TEX_2_OFF		BlockIOTag(0x72u)	/* GT */
-#define TEX_3_OFF		BlockIOTag(0x73u)	/* GT */
-#define TEX_4_OFF		BlockIOTag(0x74u)	/* GT */
-#define TEX_5_OFF		BlockIOTag(0x75u)	/* GT */
-#define TEX_6_OFF		BlockIOTag(0x76u)	/* GT */
-#define SCALE_WIDTH		BlockIOTag(0x77u)	/* GT */
-#define TEX_7_OFF		BlockIOTag(0x77u)	/* GT */
-#define SCALE_HEIGHT		BlockIOTag(0x78u)	/* GT */
-#define TEX_8_OFF		BlockIOTag(0x78u)	/* GT */
-#define TEX_9_OFF		BlockIOTag(0x79u)	/* GT */
-#define TEX_10_OFF		BlockIOTag(0x7au)	/* GT */
-#define S_Y_INC			BlockIOTag(0x7bu)	/* GT */
-#define SCALE_Y_PITCH		BlockIOTag(0x7bu)	/* GT */
-#define SCALE_X_INC		BlockIOTag(0x7cu)	/* GT */
-#define RED_X_INC		BlockIOTag(0x7cu)	/* GT */
-#define GREEN_X_INC		BlockIOTag(0x7du)	/* GT */
-#define SCALE_Y_INC		BlockIOTag(0x7du)	/* GT */
-#define SCALE_VACC		BlockIOTag(0x7eu)	/* GT */
-#define SCALE_3D_CNTL		BlockIOTag(0x7fu)	/* GT */
-#define HOST_DATA_0		BlockIOTag(0x80u)
-#define HOST_DATA_1		BlockIOTag(0x81u)
-#define HOST_DATA_2		BlockIOTag(0x82u)
-#define HOST_DATA_3		BlockIOTag(0x83u)
-#define HOST_DATA_4		BlockIOTag(0x84u)
-#define HOST_DATA_5		BlockIOTag(0x85u)
-#define HOST_DATA_6		BlockIOTag(0x86u)
-#define HOST_DATA_7		BlockIOTag(0x87u)
-#define HOST_DATA_8		BlockIOTag(0x88u)
-#define HOST_DATA_9		BlockIOTag(0x89u)
-#define HOST_DATA_A		BlockIOTag(0x8au)
-#define HOST_DATA_B		BlockIOTag(0x8bu)
-#define HOST_DATA_C		BlockIOTag(0x8cu)
-#define HOST_DATA_D		BlockIOTag(0x8du)
-#define HOST_DATA_E		BlockIOTag(0x8eu)
-#define HOST_DATA_F		BlockIOTag(0x8fu)
-#define HOST_CNTL		BlockIOTag(0x90u)
-#define HOST_BYTE_ALIGN			0x00000001ul
-#define HOST_BIG_ENDIAN_EN		0x00000002ul	/* GX-E/CT */
-/*	?				0xfffffffcul */
-#define BM_HOSTDATA		BlockIOTag(0x91u)	/* VTB/GTB */
-#define BM_ADDR			BlockIOTag(0x92u)	/* VTB/GTB */
-#define BM_DATA			BlockIOTag(0x92u)	/* VTB/GTB */
-#define BM_GUI_TABLE_CMD	BlockIOTag(0x93u)	/* GTPro */
-/*	?			BlockIOTag(0x94u) */
-/*	?			BlockIOTag(0x95u) */
-/*	?			BlockIOTag(0x96u) */
-/*	?			BlockIOTag(0x97u) */
-/*	?			BlockIOTag(0x98u) */
-/*	?			BlockIOTag(0x99u) */
-/*	?			BlockIOTag(0x9au) */
-/*	?			BlockIOTag(0x9bu) */
-/*	?			BlockIOTag(0x9cu) */
-/*	?			BlockIOTag(0x9du) */
-/*	?			BlockIOTag(0x9eu) */
-/*	?			BlockIOTag(0x9fu) */
-#define PAT_REG0		BlockIOTag(0xa0u)
-#define PAT_REG1		BlockIOTag(0xa1u)
-#define PAT_CNTL		BlockIOTag(0xa2u)
-#define PAT_MONO_EN			0x00000001ul
-#define PAT_CLR_4x2_EN			0x00000002ul
-#define PAT_CLR_8x1_EN			0x00000004ul
-/*	?				0xfffffff8ul */
-/*	?			BlockIOTag(0xa3u) */
-/*	?			BlockIOTag(0xa4u) */
-/*	?			BlockIOTag(0xa5u) */
-/*	?			BlockIOTag(0xa6u) */
-/*	?			BlockIOTag(0xa7u) */
-#define SC_LEFT			BlockIOTag(0xa8u)
-#define SC_RIGHT		BlockIOTag(0xa9u)
-#define SC_LEFT_RIGHT		BlockIOTag(0xaau)
-#define SC_TOP			BlockIOTag(0xabu)
-#define SC_BOTTOM		BlockIOTag(0xacu)
-#define SC_TOP_BOTTOM		BlockIOTag(0xadu)
-#define USR1_DST_OFF_PITCH	BlockIOTag(0xaeu)	/* LTPro */
-#define USR2_DST_OFF_PITCH	BlockIOTag(0xafu)	/* LTPro */
-#define DP_BKGD_CLR		BlockIOTag(0xb0u)
-#define DP_FRGD_CLR		BlockIOTag(0xb1u)
-#define DP_WRITE_MASK		BlockIOTag(0xb2u)
-#define DP_CHAIN_MASK		BlockIOTag(0xb3u)
-#define DP_CHAIN_1BPP			0x00000000ul	/* Irrelevant */
-#define DP_CHAIN_4BPP			0x00008888ul
-#define DP_CHAIN_8BPP			0x00008080ul
-#define DP_CHAIN_8BPP_332		0x00009292ul
-#define DP_CHAIN_15BPP_1555		0x00004210ul
-#define DP_CHAIN_16BPP_565		0x00008410ul
-#define DP_CHAIN_24BPP_888		0x00008080ul
-#define DP_CHAIN_32BPP_8888		0x00008080ul
-/*	?				0xffff0000ul */
-#define DP_PIX_WIDTH		BlockIOTag(0xb4u)
-#define DP_DST_PIX_WIDTH		0x0000000ful
-#define COMPOSITE_PIX_WIDTH		0x000000f0ul	/* GTPro */
-#define DP_SRC_PIX_WIDTH		0x00000f00ul
-/*	?				0x00001000ul */
-#define DP_HOST_TRIPLE_EN		0x00002000ul	/* GT2c/VT4 */
-#define DP_SRC_AUTONA_FIX_DIS		0x00004000ul	/* GTB */
-#define DP_FAST_SRCCOPY_DIS		0x00008000ul	/* GTB */
-#define DP_HOST_PIX_WIDTH		0x000f0000ul
-#define DP_CI4_RGB_INDEX		0x00f00000ul	/* GTB */
-#define DP_BYTE_PIX_ORDER		0x01000000ul
-#define DP_CONVERSION_TEMP		0x02000000ul	/* GTB */
-#define DP_CI4_RGB_LOW_NIBBLE		0x04000000ul	/* GTB */
-#define DP_C14_RGB_HIGH_NIBBLE		0x08000000ul	/* GTB */
-#define DP_SCALE_PIX_WIDTH		0xf0000000ul	/* GTB */
-#define DP_MIX			BlockIOTag(0xb5u)
-#define DP_BKGD_MIX			0x0000001ful
-/*	?				0x0000ffe0ul */
-#define DP_FRGD_MIX			0x001f0000ul
-/*	?				0xffe00000ul */
-#define DP_SRC			BlockIOTag(0xb6u)
-#define DP_BKGD_SRC			0x00000007ul
-/*	?				0x000000feul */
-#define DP_FRGD_SRC			0x00000700ul
-/*	?				0x0000fe00ul */
-#define DP_MONO_SRC			0x00030000ul
-#define DP_MONO_SRC_ALLONES			0x00000000ul
-#define DP_MONO_SRC_PATTERN			0x00010000ul
-#define DP_MONO_SRC_HOST			0x00020000ul
-#define DP_MONO_SRC_BLIT			0x00030000ul
-/*	?				0xfffc0000ul */
-#define DP_FRGD_CLR_MIX		BlockIOTag(0xb7u)	/* VTB/GTB */
-#define DP_FRGD_BKGD_CLR	BlockIOTag(0xb8u)	/* VTB/GTB */
-/*	?			BlockIOTag(0xb9u) */
-#define DST_X_Y			BlockIOTag(0xbau)	/* VTB/GTB */
-#define DST_WIDTH_HEIGHT	BlockIOTag(0xbbu)	/* VTB/GTB */
-#define USR_DST_PITCH		BlockIOTag(0xbcu)	/* GTPro */
-/*	?			BlockIOTag(0xbdu) */
-#define DP_SET_GUI_ENGINE2	BlockIOTag(0xbeu)	/* GTPro */
-#define DP_SET_GUI_ENGINE	BlockIOTag(0xbfu)	/* VTB/GTB */
-#define CLR_CMP_CLR		BlockIOTag(0xc0u)
-#define CLR_CMP_MSK		BlockIOTag(0xc1u)
-#define CLR_CMP_CNTL		BlockIOTag(0xc2u)
-#define CLR_CMP_FN			0x00000007ul
-#define CLR_CMP_FN_FALSE			0x00000000ul
-#define CLR_CMP_FN_TRUE				0x00000001ul
-/*	?					0x00000002ul */
-/*	?					0x00000003ul */
-#define CLR_CMP_FN_NOT_EQUAL			0x00000004ul
-#define CLR_CMP_FN_EQUAL			0x00000005ul
-/*	?					0x00000006ul */
-/*	?					0x00000007ul */
-/*	?				0x00fffff8ul */
-#define CLR_CMP_SRC			0x03000000ul
-#define CLR_CMP_SRC_DST				0x00000000ul
-#define CLR_CMP_SRC_2D				0x01000000ul
-#define CLR_CMP_SRC_TEXEL			0x02000000ul
-/*	?					0x03000000ul */
-/*	?				0xfc000000ul */
-/*	?			BlockIOTag(0xc3u) */
-#define FIFO_STAT		BlockIOTag(0xc4u)
-#define FIFO_STAT_BITS			0x0000fffful
-/*	?				0x7fff0000ul */
-#define FIFO_ERR			0x80000000ul
-/*	?			BlockIOTag(0xc5u) */
-/*	?			BlockIOTag(0xc6u) */
-/*	?			BlockIOTag(0xc7u) */
-#define CONTEXT_MASK		BlockIOTag(0xc8u)
-/*	?			BlockIOTag(0xc9u) */
-/*	?			BlockIOTag(0xcau) */
-#define CONTEXT_LOAD_CNTL	BlockIOTag(0xcbu)
-#define CONTEXT_LOAD_PTR		0x00007ffful
-/*	?				0x00008000ul */
-#define CONTEXT_LOAD_CMD		0x00030000ul
-#define CONTEXT_LOAD_NONE			0x00000000ul
-#define CONTEXT_LOAD_ONLY			0x00010000ul
-#define CONTEXT_LOAD_FILL			0x00020000ul
-#define CONTEXT_LOAD_LINE			0x00030000ul
-/*	?				0x7ffc0000ul */
-#define CONTEXT_LOAD_DIS		0x80000000ul
-#define GUI_TRAJ_CNTL		BlockIOTag(0xccu)
-/*	?			BlockIOTag(0xcdu) */
-#define GUI_STAT		BlockIOTag(0xceu)
-#define GUI_ACTIVE			0x00000001ul
-/*	?				0x000000feul */
-#define DSTX_LT_SCISSOR_LEFT		0x00000100ul
-#define DSTX_GT_SCISSOR_RIGHT		0x00000200ul
-#define DSTY_LT_SCISSOR_TOP		0x00000400ul
-#define DSTY_GT_SCISSOR_BOTTOM		0x00000800ul
-/*	?				0x0000f000ul */
-#define GUI_FIFO			0x03ff0000ul	/* VTB/GTB */
-/*	?				0xfc000000ul */
-/*	?			BlockIOTag(0xcfu) */
-#define S_X_INC2		BlockIOTag(0xd0u)	/* GTB */
-#define TEX_PALETTE_INDEX	BlockIOTag(0xd0u)	/* GTPro */
-#define S_Y_INC2		BlockIOTag(0xd1u)	/* GTB */
-#define STW_EXP			BlockIOTag(0xd1u)	/* GTPro */
-#define S_XY_INC2		BlockIOTag(0xd2u)	/* GTB */
-#define LOG_MAX_INC		BlockIOTag(0xd2u)	/* GTPro */
-#define S_XINC_START		BlockIOTag(0xd3u)	/* GTB */
-/*	S_Y_INC			BlockIOTag(0xd4u) */	/* Duplicate */
-/*	SCALE_Y_PITCH		BlockIOTag(0xd4u) */	/* Duplicate */
-#define S_START			BlockIOTag(0xd5u)	/* GTB */
-#define T_X_INC2		BlockIOTag(0xd6u)	/* GTB */
-#define W_X_INC			BlockIOTag(0xd6u)	/* GTPro */
-#define T_Y_INC2		BlockIOTag(0xd7u)	/* GTB */
-#define W_Y_INC			BlockIOTag(0xd7u)	/* GTPro */
-#define T_XY_INC2		BlockIOTag(0xd8u)	/* GTB */
-#define W_START			BlockIOTag(0xd8u)	/* GTPro */
-#define T_XINC_START		BlockIOTag(0xd9u)	/* GTB */
-#define T_Y_INC			BlockIOTag(0xdau)	/* GTB */
-#define SECONDARY_SCALE_PITCH	BlockIOTag(0xdau)	/* GTPro */
-#define T_START			BlockIOTag(0xdbu)	/* GTB */
-#define TEX_SIZE_PITCH		BlockIOTag(0xdcu)	/* GTB */
-#define TEX_CNTL		BlockIOTag(0xddu)	/* GTPro */
-#define SECONDARY_TEX_OFFSET	BlockIOTag(0xdeu)	/* GTPro */
-#define TEX_PAL_WR		BlockIOTag(0xdfu)	/* GTB */
-#define TEX_PALETTE		BlockIOTag(0xdfu)	/* GTPro */
-#define SCALE_PITCH_BOTH	BlockIOTag(0xe0u)	/* GTPro */
-#define SECONDARY_SCALE_OFF_ACC	BlockIOTag(0xe1u)	/* GTPro */
-#define SCALE_OFF_ACC		BlockIOTag(0xe2u)	/* GTPro */
-#define SCALE_DST_Y_X		BlockIOTag(0xe3u)	/* GTPro */
-/*	?			BlockIOTag(0xe4u) */
-/*	?			BlockIOTag(0xe5u) */
-#define COMPOSITE_SHADOW_ID	BlockIOTag(0xe6u)	/* GTPro */
-#define SECONDARY_SCALE_X_INC	BlockIOTag(0xe7u)	/* GTPro */
-#define SPECULAR_RED_X_INC	BlockIOTag(0xe7u)	/* GTPro */
-#define SPECULAR_RED_Y_INC	BlockIOTag(0xe8u)	/* GTPro */
-#define SPECULAR_RED_START	BlockIOTag(0xe9u)	/* GTPro */
-#define SECONDARY_SCALE_HACC	BlockIOTag(0xe9u)	/* GTPro */
-#define SPECULAR_GREEN_X_INC	BlockIOTag(0xeau)	/* GTPro */
-#define SPECULAR_GREEN_Y_INC	BlockIOTag(0xebu)	/* GTPro */
-#define SPECULAR_GREEN_START	BlockIOTag(0xecu)	/* GTPro */
-#define SPECULAR_BLUE_X_INC	BlockIOTag(0xedu)	/* GTPro */
-#define SPECULAR_BLUE_Y_INC	BlockIOTag(0xeeu)	/* GTPro */
-#define SPECULAR_BLUE_START	BlockIOTag(0xefu)	/* GTPro */
-/*	SCALE_X_INC		BlockIOTag(0xf0u) */	/* Duplicate */
-/*	RED_X_INC		BlockIOTag(0xf0u) */	/* Duplicate */
-#define RED_Y_INC		BlockIOTag(0xf1u)	/* GTB */
-#define SCALE_HACC		BlockIOTag(0xf2u)	/* GTB */
-#define RED_START		BlockIOTag(0xf2u)	/* GTB */
-/*	GREEN_X_INC		BlockIOTag(0xf3u) */	/* Duplicate */
-/*	SCALE_Y_INC		BlockIOTag(0xf3u) */	/* Duplicate */
-#define GREEN_Y_INC		BlockIOTag(0xf4u)	/* GTB */
-#define SECONDARY_SCALE_Y_INC	BlockIOTag(0xf4u)	/* GTPro */
-#define SECONDARY_SCALE_VACC	BlockIOTag(0xf5u)	/* GTPro */
-#define GREEN_START		BlockIOTag(0xf5u)	/* GTB */
-#define BLUE_X_INC		BlockIOTag(0xf6u)	/* GTB */
-#define SCALE_XUV_INC		BlockIOTag(0xf6u)	/* GTB */
-#define BLUE_Y_INC		BlockIOTag(0xf7u)	/* GTB */
-#define BLUE_START		BlockIOTag(0xf8u)	/* GTB */
-#define SCALE_UV_HACC		BlockIOTag(0xf8u)	/* GTB */
-#define Z_X_INC			BlockIOTag(0xf9u)	/* GTB */
-#define Z_Y_INC			BlockIOTag(0xfau)	/* GTB */
-#define Z_START			BlockIOTag(0xfbu)	/* GTB */
-#define ALPHA_FOG_X_INC		BlockIOTag(0xfcu)	/* GTB */
-#define ALPHA_FOG_Y_INC		BlockIOTag(0xfdu)	/* GTB */
-#define ALPHA_FOG_START		BlockIOTag(0xfeu)	/* GTB */
-/*	?			BlockIOTag(0xffu) */
-#define OVERLAY_Y_X_START	BlockIOTag(0x100u)
-#define OVERLAY_Y_START			0x000003fful
-/*	?				0x0000fc00ul */
-#define OVERLAY_X_START			0x03ff0000ul
-/*	?				0x7c000000ul */
-#define OVERLAY_LOCK_START		0x80000000ul
-#define OVERLAY_Y_X_END		BlockIOTag(0x101u)
-#define OVERLAY_Y_END			0x000003fful
-/*	?				0x0000fc00ul */
-#define OVERLAY_X_END			0x03ff0000ul
-/*	?				0x7c000000ul */
-#define OVERLAY_LOCK_END		0x80000000ul
-#define OVERLAY_VIDEO_KEY_CLR	BlockIOTag(0x102u)
-#define OVERLAY_VIDEO_KEY_MSK	BlockIOTag(0x103u)
-#define OVERLAY_GRAPHICS_KEY_CLR BlockIOTag(0x104u)
-#define OVERLAY_GRAPHICS_KEY_MSK BlockIOTag(0x105u)
-#define OVERLAY_KEY_CNTL	BlockIOTag(0x106u)
-#define OVERLAY_VIDEO_FN		0x00000007ul
-/*	?				0x00000008ul */
-#define OVERLAY_GRAPHICS_FN		0x00000070ul
-/*	?				0x00000080ul */
-#define OVERLAY_CMP_MIX			0x00000100ul
-/*	?				0xfffffe00ul */
-/*	?			BlockIOTag(0x107u) */
-#define OVERLAY_SCALE_INC	BlockIOTag(0x108u)
-#define OVERLAY_SCALE_CNTL	BlockIOTag(0x109u)
-#define SCALE_PIX_EXPAND		0x00000001ul
-#define SCALE_Y2R_TEMP			0x00000002ul
-#define SCALE_HORZ_MODE			0x00000004ul
-#define SCALE_VERT_MODE			0x00000008ul
-#define SCALE_SIGNED_UV			0x00000010ul
-#define SCALE_GAMMA_SEL			0x00000060ul
-/*	?				0x03ffff80ul */
-#define SCALE_BANDWIDTH			0x04000000ul
-#define SCALE_DIS_LIMIT			0x08000000ul
-/*	?				0x10000000ul */
-#define SCALE_CLK_FORCE_ON		0x20000000ul
-#define OVERLAY_EN			0x40000000ul
-#define SCALE_EN			0x80000000ul
-#define SCALER_HEIGHT_WIDTH	BlockIOTag(0x10au)
-#define SCALER_TEST		BlockIOTag(0x10bu)
-/*	?				0x00000001ul */
-#define SCALE_Y2R_DIS			0x00000002ul
-/*	?				0xfffffffcul */
-#define SCALER_THRESHOLD	BlockIOTag(0x10cu)
-#define SCALER_BUF0_OFFSET	BlockIOTag(0x10du)	/* VTB/GTB */
-#define SCALER_BUF1_OFFSET	BlockIOTag(0x10eu)	/* VTB/GTB */
-#define SCALER_BUF_PITCH	BlockIOTag(0x10fu)	/* VTB/GTB */
-#define CAPTURE_Y_X		BlockIOTag(0x110u)
-#define CAPTURE_START_END	BlockIOTag(0x110u)	/* VTB/GTB */
-#define CAPTURE_HEIGHT_WIDTH	BlockIOTag(0x111u)
-#define CAPTURE_X_WIDTH		BlockIOTag(0x111u)	/* VTB/GTB */
-#define VIDEO_FORMAT		BlockIOTag(0x112u)
-#define VIDEO_IN			0x0000000ful
-/*	?					0x00000000ul */
-/*	?					0x00000001ul */
-/*	?					0x00000002ul */
-/*	?					0x00000003ul */
-/*	?					0x00000004ul */
-/*	?					0x00000005ul */
-/*	?					0x00000006ul */
-/*	?					0x00000007ul */
-/*	?					0x00000008ul */
-/*	?					0x00000009ul */
-/*	?					0x0000000aul */
-#define VIDEO_IN_VYUY422			0x0000000bul
-#define VIDEO_IN_YVYU422			0x0000000cul
-/*	?					0x0000000dul */
-/*	?					0x0000000eul */
-/*	?					0x0000000ful */
-#define VIDEO_SIGNED_UV			0x00000010ul
-/*	?				0x0000ffe0ul */
-#define SCALER_IN			0x000f0000ul
-/*	?					0x00000000ul */
-/*	?					0x00010000ul */
-/*	?					0x00020000ul */
-#define SCALER_IN_15BPP				0x00030000ul
-#define SCALER_IN_16BPP				0x00040000ul
-/*	?					0x00050000ul */
-#define SCALER_IN_32BPP				0x00060000ul
-/*	?					0x00070000ul */
-/*	?					0x00080000ul */
-#define SCALER_IN_YUV9				0x00090000ul
-#define SCALER_IN_YUV12				0x000a0000ul
-#define SCALER_IN_VYUY422			0x000b0000ul
-#define SCALER_IN_YVYU422			0x000c0000ul
-/*	?					0x000d0000ul */
-/*	?					0x000e0000ul */
-/*	?					0x000f0000ul */
-/*	?				0x0ff00000ul */
-#define HOST_BYTE_SHIFT_EN		0x10000000ul
-#define HOST_YUV_APER			0x20000000ul
-#define HOST_MEM_MODE			0xc0000000ul
-#define HOST_MEM_MODE_NORMAL			0x00000000ul
-#define HOST_MEM_MODE_Y				0x40000000ul
-#define HOST_MEM_MODE_U				0x80000000ul
-#define HOST_MEM_MODE_V				0xc0000000ul
-#define VIDEO_CONFIG		BlockIOTag(0x113u)
-#define VBI_START_END		BlockIOTag(0x113u)	/* VTB/GTB */
-#define CAPTURE_CONFIG		BlockIOTag(0x114u)
-#define CAP_INPUT_MODE			0x00000001ul
-#define CAP_START_FIELD			0x00000002ul
-#define CAP_BUF_MODE			0x00000004ul
-#define CAP_START_BUF			0x00000008ul
-#define CAP_BUF_TYPE			0x00000030ul
-#define CAP_BUF_FIELD				0x00000000ul
-#define CAP_BUF_ALTERNATING			0x00000010ul
-#define CAP_BUF_FRAME				0x00000020ul
-/*	?					0x00000030ul */
-#define CAP_FIELD_FLIP			0x00000040ul
-#define CAP_CCIR656_EN			0x00000080ul
-/*	?				0x00000f00ul */
-#define CAP_MIRROR_EN			0x00001000ul
-#define ONESHOT_MIRROR_EN		0x00002000ul
-#define ONESHOT_MODE			0x00004000ul
-/*	?				0x00008000ul */
-#define CAP_HORZ_DOWN			0x00030000ul
-#define CAP_VERT_DOWN			0x000c0000ul
-#define ONESHOT_HORZ_DOWN		0x00300000ul
-#define ONESHOT_VERT_DOWN		0x00c00000ul
-/*	?				0x0f000000ul */
-#define OVL_BUF_MODE			0x10000000ul
-#define OVL_BUF_NEXT			0x20000000ul
-/*	?				0xc0000000ul */
-#define TRIG_CNTL		BlockIOTag(0x115u)
-#define CAP_TRIGGER			0x00000003ul
-#define CAP_TRIGGER_NEXT			0x00000001ul
-/*	?				0x0000001cul */
-#define OVL_CUR_BUF			0x00000020ul
-#define OVL_BUF_STATUS			0x00000040ul
-#define CAP_BUF_STATUS			0x00000080ul
-/*	?				0x7fffff00ul */
-#define CAPTURE_EN			0x80000000ul
-#define VIDEO_SYNC_TEST		BlockIOTag(0x116u)
-#define OVERLAY_EXCLUSIVE_HORZ	BlockIOTag(0x116u)	/* VTB/GTB */
-#define EXCLUSIVE_HORZ_START		0x000000fful
-#define EXCLUSIVE_HORZ_END		0x0000ff00ul
-#define EXCLUSIVE_HORZ_PORCH		0x00ff0000ul
-/*	?				0x7f000000ul */
-#define EXCLUSIVE_EN			0x80000000ul
-#define EXT_CRTC_GEN_CNTL_R	BlockIOTag(0x117u)	/* VT-A4 (R) */
-#define OVERLAY_EXCLUSIVE_VERT	BlockIOTag(0x117u)	/* VTB/GTB */
-#define EXCLUSIVE_VERT_START		0x000003fful
-/*	?				0x0000fc00ul */
-#define EXCLUSIVE_VERT_END		0x03ff0000ul
-/*	?				0xfc000000ul */
-#define VMC_CONFIG		BlockIOTag(0x118u)
-#define VBI_WIDTH		BlockIOTag(0x118u)	/* VTB/GTB */
-#define VMC_STATUS		BlockIOTag(0x119u)
-#define CAPTURE_DEBUG		BlockIOTag(0x119u)	/* VTB/GTB */
-#define VMC_CMD			BlockIOTag(0x11au)
-#define VIDEO_SYNC_TEST_B	BlockIOTag(0x11au)	/* VTB/GTB */
-#define VMC_ARG0		BlockIOTag(0x11bu)
-#define VMC_ARG1		BlockIOTag(0x11cu)
-#define SNAPSHOT_VH_COUNTS	BlockIOTag(0x11cu)	/* GTPro */
-#define VMC_SNOOP_ARG0		BlockIOTag(0x11du)
-#define SNAPSHOT_F_COUNT	BlockIOTag(0x11du)	/* GTPro */
-#define VMC_SNOOP_ARG1		BlockIOTag(0x11eu)
-#define N_VIF_COUNT		BlockIOTag(0x11eu)	/* GTPro */
-#define SNAPSHOT_VIF_COUNT	BlockIOTag(0x11fu)	/* GTPro */
-#define BUF0_OFFSET		BlockIOTag(0x120u)
-#define CAPTURE_BUF0_OFFSET	BlockIOTag(0x120u)	/* VTB/GTB */
-#define CAPTURE_BUF1_OFFSET	BlockIOTag(0x121u)	/* VTB/GTB */
-#define ONESHOT_BUF_OFFSET	BlockIOTag(0x122u)	/* VTB/GTB */
-#define BUF0_PITCH		BlockIOTag(0x123u)
-/*	?			BlockIOTag(0x124u) */
-/*	?			BlockIOTag(0x125u) */
-#define BUF1_OFFSET		BlockIOTag(0x126u)
-/*	?			BlockIOTag(0x127u) */
-/*	?			BlockIOTag(0x128u) */
-#define BUF1_PITCH		BlockIOTag(0x129u)
-/*	?			BlockIOTag(0x12au) */
-#define BUF0_CAP_ODD_OFFSET	BlockIOTag(0x12bu)
-#define BUF1_CAP_ODD_OFFSET	BlockIOTag(0x12cu)
-#define SNAPSHOT2_VH_COUNTS	BlockIOTag(0x12cu)	/* LTPro */
-#define SNAPSHOT2_F_COUNT	BlockIOTag(0x12du)	/* LTPro */
-#define N_VIF2_COUNT		BlockIOTag(0x12eu)	/* LTPro */
-#define SNAPSHOT2_VIF_COUNT	BlockIOTag(0x12fu)	/* LTPro */
-#define VMC_STRM_DATA_0		BlockIOTag(0x130u)
-/*	MPP_CONFIG		BlockIOTag(0x130u) */	/* See 0x3bu */
-#define VMC_STRM_DATA_1		BlockIOTag(0x131u)
-/*	MPP_STROBE_SEQ		BlockIOTag(0x131u) */	/* See 0x3cu */
-#define VMC_STRM_DATA_2		BlockIOTag(0x132u)
-/*	MPP_ADDR		BlockIOTag(0x132u) */	/* See 0x3du */
-#define VMC_STRM_DATA_3		BlockIOTag(0x133u)
-/*	MPP_DATA		BlockIOTag(0x133u) */	/* See 0x3eu */
-#define VMC_STRM_DATA_4		BlockIOTag(0x134u)
-#define VMC_STRM_DATA_5		BlockIOTag(0x135u)
-#define VMC_STRM_DATA_6		BlockIOTag(0x136u)
-#define VMC_STRM_DATA_7		BlockIOTag(0x137u)
-#define VMC_STRM_DATA_8		BlockIOTag(0x138u)
-#define VMC_STRM_DATA_9		BlockIOTag(0x139u)
-#define VMC_STRM_DATA_A		BlockIOTag(0x13au)
-#define VMC_STRM_DATA_B		BlockIOTag(0x13bu)
-#define VMC_STRM_DATA_C		BlockIOTag(0x13cu)
-#define VMC_STRM_DATA_D		BlockIOTag(0x13du)
-#define VMC_STRM_DATA_E		BlockIOTag(0x13eu)
-#define VMC_STRM_DATA_F		BlockIOTag(0x13fu)
-/*	TVO_CNTL		BlockIOTag(0x140u) */	/* See 0x3fu */
-/*	?			BlockIOTag(0x141u) */
-/*	?			BlockIOTag(0x142u) */
-/*	?			BlockIOTag(0x143u) */
-/*	?			BlockIOTag(0x144u) */
-/*	?			BlockIOTag(0x145u) */
-/*	?			BlockIOTag(0x146u) */
-/*	?			BlockIOTag(0x147u) */
-/*	?			BlockIOTag(0x148u) */
-/*	?			BlockIOTag(0x149u) */
-/*	?			BlockIOTag(0x14au) */
-/*	?			BlockIOTag(0x14bu) */
-/*	?			BlockIOTag(0x14cu) */
-/*	?			BlockIOTag(0x14du) */
-/*	?			BlockIOTag(0x14eu) */
-/*	?			BlockIOTag(0x14fu) */
-/*	?			BlockIOTag(0x150u) */
-#define CRT_HORZ_VERT_LOAD	BlockIOTag(0x151u)	/* VTB/GTB */
-#define AGP_BASE		BlockIOTag(0x152u)	/* GTPro */
-#define AGP_CNTL		BlockIOTag(0x153u)	/* GTPro */
-#define AGP_MODE_1X                     0x00000001ul
-#define AGP_MODE_2X                     0x00000002ul
-#define AGP_MODE_MASK                   0x00000003ul
-#define AGP_APER_SIZE_MASK              0x0000003ful
-#define AGP_APER_SIZE_4MB               0x0000003ful
-#define AGP_APER_SIZE_8MB               0x0000003eul
-#define AGP_APER_SIZE_16MB              0x0000003cul
-#define AGP_APER_SIZE_32MB              0x00000038ul
-#define AGP_APER_SIZE_64MB              0x00000030ul
-#define AGP_APER_SIZE_128MB             0x00000020ul
-#define AGP_APER_SIZE_256MB             0x00000000ul
-#define HIGH_PRIORITY_READ_EN           0x00010000ul
-#define AGP_TRDY_MODE                   0x00020000ul
-#define SCALER_COLOUR_CNTL	BlockIOTag(0x154u)	/* GTPro */
-#define SCALE_BRIGHTNESS		0x0000007ful
-/*	?				0x00000080ul */
-#define SCALE_SATURATION_U		0x00001f00ul
-/*	?				0x0000e000ul */
-#define SCALE_SATURATION_V		0x001f0000ul
-#define SCALE_VERT_ADJ_UV		0x0fe00000ul
-#define SCALE_HORZ_ADJ_UV		0xf0000000ul
-#define SCALER_H_COEFF0		BlockIOTag(0x155u)	/* GTPro */
-#define SCALER_H_COEFF1		BlockIOTag(0x156u)	/* GTPro */
-#define SCALER_H_COEFF2		BlockIOTag(0x157u)	/* GTPro */
-#define SCALER_H_COEFF3		BlockIOTag(0x158u)	/* GTPro */
-#define SCALER_H_COEFF4		BlockIOTag(0x159u)	/* GTPro */
-/*	?			BlockIOTag(0x15au) */
-/*	?			BlockIOTag(0x15bu) */
-#define GUI_CMDFIFO_DEBUG	BlockIOTag(0x15cu)	/* GT2c/VT4 */
-#define GUI_CMDFIFO_DATA	BlockIOTag(0x15du)	/* GT2c/VT4 */
-#define GUI_CNTL		BlockIOTag(0x15eu)	/* GT2c/VT4 */
-#define CMDFIFO_SIZE_MODE		0x00000003ul
-/*	?				0x0000fffcul */
-#define IDCT_PRSR_MODE			0x00010000ul	/* XL/XC */
-#define IDCT_BLOCK_GUI_INITIATOR	0x00020000ul	/* XL/XC */
-/*	?				0xfffc0000ul */
-/*	?			BlockIOTag(0x15fu) */
-#define BM_FRAME_BUF_OFFSET	BlockIOTag(0x160u)	/* VTB/GTB */
-#define BM_SYSTEM_MEM_ADDR	BlockIOTag(0x161u)	/* VTB/GTB */
-#define BM_COMMAND		BlockIOTag(0x162u)	/* VTB/GTB */
-#define BM_STATUS		BlockIOTag(0x163u)	/* VTB/GTB */
-/*	?			BlockIOTag(0x164u) */
-/*	?			BlockIOTag(0x165u) */
-/*	?			BlockIOTag(0x166u) */
-/*	?			BlockIOTag(0x167u) */
-/*	?			BlockIOTag(0x168u) */
-/*	?			BlockIOTag(0x169u) */
-/*	?			BlockIOTag(0x16au) */
-/*	?			BlockIOTag(0x16bu) */
-/*	?			BlockIOTag(0x16cu) */
-/*	?			BlockIOTag(0x16du) */
-#define BM_GUI_TABLE		BlockIOTag(0x16eu)	/* VTB/GTB */
-#define BM_SYSTEM_TABLE		BlockIOTag(0x16fu)	/* VTB/GTB */
-/*	?			BlockIOTag(0x170u) */
-/*	?			BlockIOTag(0x171u) */
-/*	?			BlockIOTag(0x172u) */
-/*	?			BlockIOTag(0x173u) */
-/*	?			BlockIOTag(0x174u) */
-#define SCALER_BUF0_OFFSET_U	BlockIOTag(0x175u)	/* GTPro */
-#define SCALER_BUF0_OFFSET_V	BlockIOTag(0x176u)	/* GTPro */
-#define SCALER_BUF1_OFFSET_U	BlockIOTag(0x177u)	/* GTPro */
-#define SCALER_BUF1_OFFSET_V	BlockIOTag(0x178u)	/* GTPro */
-/*	?			BlockIOTag(0x179u) */
-/*	?			BlockIOTag(0x17au) */
-/*	?			BlockIOTag(0x17bu) */
-/*	?			BlockIOTag(0x17cu) */
-/*	?			BlockIOTag(0x17du) */
-/*	?			BlockIOTag(0x17eu) */
-/*	?			BlockIOTag(0x17fu) */
-/*	?			BlockIOTag(0x180u) */
-/*	?			BlockIOTag(0x181u) */
-/*	?			BlockIOTag(0x182u) */
-/*	?			BlockIOTag(0x183u) */
-/*	?			BlockIOTag(0x184u) */
-/*	?			BlockIOTag(0x185u) */
-/*	?			BlockIOTag(0x186u) */
-/*	?			BlockIOTag(0x187u) */
-/*	?			BlockIOTag(0x188u) */
-/*	?			BlockIOTag(0x189u) */
-/*	?			BlockIOTag(0x18au) */
-/*	?			BlockIOTag(0x18bu) */
-/*	?			BlockIOTag(0x18cu) */
-/*	?			BlockIOTag(0x18du) */
-/*	?			BlockIOTag(0x18eu) */
-/*	?			BlockIOTag(0x18fu) */
-#define VERTEX_1_S		BlockIOTag(0x190u)	/* GTPro */
-#define VERTEX_1_T		BlockIOTag(0x191u)	/* GTPro */
-#define VERTEX_1_W		BlockIOTag(0x192u)	/* GTPro */
-#define VERTEX_1_SPEC_ARGB	BlockIOTag(0x193u)	/* GTPro */
-#define VERTEX_1_Z		BlockIOTag(0x194u)	/* GTPro */
-#define VERTEX_1_ARGB		BlockIOTag(0x195u)	/* GTPro */
-#define VERTEX_1_X_Y		BlockIOTag(0x196u)	/* GTPro */
-#define ONE_OVER_AREA		BlockIOTag(0x197u)	/* GTPro */
-#define VERTEX_2_S		BlockIOTag(0x198u)	/* GTPro */
-#define VERTEX_2_T		BlockIOTag(0x199u)	/* GTPro */
-#define VERTEX_2_W		BlockIOTag(0x19au)	/* GTPro */
-#define VERTEX_2_SPEC_ARGB	BlockIOTag(0x19bu)	/* GTPro */
-#define VERTEX_2_Z		BlockIOTag(0x19cu)	/* GTPro */
-#define VERTEX_2_ARGB		BlockIOTag(0x19du)	/* GTPro */
-#define VERTEX_2_X_Y		BlockIOTag(0x19eu)	/* GTPro */
-/*	ONE_OVER_AREA		BlockIOTag(0x19fu) */	/* Duplicate */
-#define VERTEX_3_S		BlockIOTag(0x1a0u)	/* GTPro */
-#define VERTEX_3_T		BlockIOTag(0x1a1u)	/* GTPro */
-#define VERTEX_3_W		BlockIOTag(0x1a2u)	/* GTPro */
-#define VERTEX_3_SPEC_ARGB	BlockIOTag(0x1a3u)	/* GTPro */
-#define VERTEX_3_Z		BlockIOTag(0x1a4u)	/* GTPro */
-#define VERTEX_3_ARGB		BlockIOTag(0x1a5u)	/* GTPro */
-#define VERTEX_3_X_Y		BlockIOTag(0x1a6u)	/* GTPro */
-/*	ONE_OVER_AREA		BlockIOTag(0x1a7u) */	/* Duplicate */
-#define VERTEX_3_SECONDARY_S	BlockIOTag(0x1a8u)	/* GTPro */
-#define VERTEX_3_SECONDARY_T	BlockIOTag(0x1a9u)	/* GTPro */
-#define VERTEX_3_SECONDARY_W	BlockIOTag(0x1aau)	/* GTPro */
-/*	VERTEX_1_S		BlockIOTag(0x1abu) */	/* Duplicate */
-/*	VERTEX_1_T		BlockIOTag(0x1acu) */	/* Duplicate */
-/*	VERTEX_1_W		BlockIOTag(0x1adu) */	/* Duplicate */
-/*	VERTEX_2_S		BlockIOTag(0x1aeu) */	/* Duplicate */
-/*	VERTEX_2_T		BlockIOTag(0x1afu) */	/* Duplicate */
-/*	VERTEX_2_W		BlockIOTag(0x1b0u) */	/* Duplicate */
-/*	VERTEX_3_S		BlockIOTag(0x1b1u) */	/* Duplicate */
-/*	VERTEX_3_T		BlockIOTag(0x1b2u) */	/* Duplicate */
-/*	VERTEX_3_W		BlockIOTag(0x1b3u) */	/* Duplicate */
-/*	VERTEX_1_SPEC_ARGB	BlockIOTag(0x1b4u) */	/* Duplicate */
-/*	VERTEX_2_SPEC_ARGB	BlockIOTag(0x1b5u) */	/* Duplicate */
-/*	VERTEX_3_SPEC_ARGB	BlockIOTag(0x1b6u) */	/* Duplicate */
-/*	VERTEX_1_Z		BlockIOTag(0x1b7u) */	/* Duplicate */
-/*	VERTEX_2_Z		BlockIOTag(0x1b8u) */	/* Duplicate */
-/*	VERTEX_3_Z		BlockIOTag(0x1b9u) */	/* Duplicate */
-/*	VERTEX_1_ARGB		BlockIOTag(0x1bau) */	/* Duplicate */
-/*	VERTEX_2_ARGB		BlockIOTag(0x1bbu) */	/* Duplicate */
-/*	VERTEX_3_ARGB		BlockIOTag(0x1bcu) */	/* Duplicate */
-/*	VERTEX_1_X_Y		BlockIOTag(0x1bdu) */	/* Duplicate */
-/*	VERTEX_2_X_Y		BlockIOTag(0x1beu) */	/* Duplicate */
-/*	VERTEX_3_X_Y		BlockIOTag(0x1bfu) */	/* Duplicate */
-#define ONE_OVER_AREA_UC	BlockIOTag(0x1c0u)	/* GTPro */
-#define SETUP_CNTL		BlockIOTag(0x1c1u)	/* GTPro */
-/*	?			BlockIOTag(0x1c2u) */
-/*	?			BlockIOTag(0x1c3u) */
-/*	?			BlockIOTag(0x1c4u) */
-/*	?			BlockIOTag(0x1c5u) */
-/*	?			BlockIOTag(0x1c6u) */
-/*	?			BlockIOTag(0x1c7u) */
-/*	?			BlockIOTag(0x1c8u) */
-/*	?			BlockIOTag(0x1c9u) */
-#define VERTEX_1_SECONDARY_S	BlockIOTag(0x1cau)	/* GTPro */
-#define VERTEX_1_SECONDARY_T	BlockIOTag(0x1cbu)	/* GTPro */
-#define VERTEX_1_SECONDARY_W	BlockIOTag(0x1ccu)	/* GTPro */
-#define VERTEX_2_SECONDARY_S	BlockIOTag(0x1cdu)	/* GTPro */
-#define VERTEX_2_SECONDARY_T	BlockIOTag(0x1ceu)	/* GTPro */
-#define VERTEX_2_SECONDARY_W	BlockIOTag(0x1cfu)	/* GTPro */
-/*	?			BlockIOTag(0x1d0u) */
-/*	?			BlockIOTag(0x1d1u) */
-/*	?			BlockIOTag(0x1d2u) */
-/*	?			BlockIOTag(0x1d3u) */
-/*	?			BlockIOTag(0x1d4u) */
-/*	?			BlockIOTag(0x1d5u) */
-/*	?			BlockIOTag(0x1d6u) */
-/*	?			BlockIOTag(0x1d7u) */
-/*	?			BlockIOTag(0x1d8u) */
-/*	?			BlockIOTag(0x1d9u) */
-/*	?			BlockIOTag(0x1dau) */
-/*	?			BlockIOTag(0x1dbu) */
-/*	?			BlockIOTag(0x1dcu) */
-/*	?			BlockIOTag(0x1ddu) */
-/*	?			BlockIOTag(0x1deu) */
-/*	?			BlockIOTag(0x1dfu) */
-/*	?			BlockIOTag(0x1e0u) */
-/*	?			BlockIOTag(0x1e1u) */
-/*	?			BlockIOTag(0x1e2u) */
-/*	?			BlockIOTag(0x1e3u) */
-/*	?			BlockIOTag(0x1e4u) */
-/*	?			BlockIOTag(0x1e5u) */
-/*	?			BlockIOTag(0x1e6u) */
-/*	?			BlockIOTag(0x1e7u) */
-/*	?			BlockIOTag(0x1e8u) */
-/*	?			BlockIOTag(0x1e9u) */
-/*	?			BlockIOTag(0x1eau) */
-/*	?			BlockIOTag(0x1ebu) */
-/*	?			BlockIOTag(0x1ecu) */
-/*	?			BlockIOTag(0x1edu) */
-/*	?			BlockIOTag(0x1eeu) */
-/*	?			BlockIOTag(0x1efu) */
-/*	?			BlockIOTag(0x1f0u) */
-/*	?			BlockIOTag(0x1f1u) */
-/*	?			BlockIOTag(0x1f2u) */
-/*	?			BlockIOTag(0x1f3u) */
-/*	?			BlockIOTag(0x1f4u) */
-/*	?			BlockIOTag(0x1f5u) */
-/*	?			BlockIOTag(0x1f6u) */
-/*	?			BlockIOTag(0x1f7u) */
-/*	?			BlockIOTag(0x1f8u) */
-/*	?			BlockIOTag(0x1f9u) */
-/*	?			BlockIOTag(0x1fau) */
-/*	?			BlockIOTag(0x1fbu) */
-/*	?			BlockIOTag(0x1fcu) */
-/*	?			BlockIOTag(0x1fdu) */
-/*	?			BlockIOTag(0x1feu) */
-/*	?			BlockIOTag(0x1ffu) */
-
-/* Definitions for MEM_CNTL's CTL_MEM_?????_APER_ENDIAN fields */
-#define CTL_MEM_APER_BYTE_ENDIAN	0x00u
-#define CTL_MEM_APER_WORD_ENDIAN	0x01u
-#define CTL_MEM_APER_LONG_ENDIAN	0x02u
-/*	?				0x03u */
-
-/* Definitions for an ICS2595's programme word */
-#define ICS2595_CLOCK		0x000001f0ul
-#define ICS2595_FB_DIV		0x0001fe00ul		/* Feedback divider */
-#define ICS2595_POST_DIV	0x000c0000ul		/* Post-divider */
-#define ICS2595_STOP		0x00300000ul		/* Stop bits */
-#define ICS2595_TOGGLE		(ICS2595_POST_DIV | ICS2595_STOP)
-
-/* Definitions for internal PLL registers on a 264xT */
-#define PLL_MPLL_CNTL		0x00u
-#define MPLL_PC_GAIN			0x07u
-#define MPLL_VC_GAIN			0x18u
-#define MPLL_D_CYC			0x60u
-#define MPLL_RANGE			0x80u
-#define VPLL_CNTL		0x01u
-#define VPLL_PC_GAIN			0x07u
-#define VPLL_VC_GAIN			0x18u
-#define VPLL_D_CYC			0x60u
-#define VPLL_RANGE			0x80u
-#define PLL_REF_DIV		0x02u
-#define PLL_GEN_CNTL		0x03u
-#define PLL_OVERRIDE			0x01u
-#define PLL_SLEEP			0x01u	/* GTPro */
-#define PLL_MCLK_RESET			0x02u
-#define PLL_OSC_EN			0x04u
-#define PLL_EXT_CLK_EN			0x08u
-#define PLL_MCLK_SRC_SEL		0x70u
-#define PLL_EXT_CLK_CNTL		0x80u	/* CT/ET */
-#define PLL_DLL_PWDN			0x80u	/* VTB/GTB/LT */
-#define PLL_MCLK_FB_DIV		0x04u
-#define PLL_VCLK_CNTL		0x05u
-#define PLL_VCLK_SRC_SEL		0x03u
-#define PLL_VCLK_RESET			0x04u
-#define PLL_VCLK_INVERT			0x08u
-#define PLL_ECP_DIV			0x30u	/* VT/GT */
-#define PLL_ERATE_GT_XRATE		0x40u	/* VT/GT */
-#define PLL_SCALER_LOCK_EN		0x80u	/* VT/GT */
-#define PLL_VCLK_POST_DIV	0x06u
-#define PLL_VCLK0_POST_DIV		0x03u
-#define PLL_VCLK1_POST_DIV		0x0cu
-#define PLL_VCLK2_POST_DIV		0x30u
-#define PLL_VCLK3_POST_DIV		0xc0u
-#define PLL_VCLK0_FB_DIV	0x07u
-#define PLL_VCLK1_FB_DIV	0x08u
-#define PLL_VCLK2_FB_DIV	0x09u
-#define PLL_VCLK3_FB_DIV	0x0au
-#define PLL_XCLK_CNTL		0x0bu		/* VT/GT */
-#define PLL_XCLK_MCLK_RATIO		0x03u
-#define PLL_XCLK_SRC_SEL		0x07u	/* VTB/GTB/LT */
-#define PLL_MFB_TIMES_4_2B		0x08u
-#define PLL_VCLK0_XDIV			0x10u
-#define PLL_VCLK1_XDIV			0x20u
-#define PLL_VCLK2_XDIV			0x40u
-#define PLL_VCLK3_XDIV			0x80u
-#define PLL_FCP_CNTL		0x0cu		/* VT/GT */
-#define PLL_FCP_POST_DIV		0x0fu
-#define PLL_FCP_SRC_SEL			0x70u
-#define PLL_DCLK_BY2_EN			0x80u
-#define PLL_DLL_CNTL		0x0cu		/* VTB/GTB/LT */
-#define PLL_DLL_REF_SRC			0x03u
-#define PLL_DLL_FB_SRC			0x0cu
-#define PLL_DLL_GAIN			0x30u
-#define PLL_DLL_RESET			0x40u
-#define PLL_DLL_HCLK_OUT_EN		0x80u
-#define PLL_VFC_CNTL		0x0du		/* VT/GT */
-#define PLL_DCLK_INVB			0x01u
-#define PLL_DCLKBY2_EN			0x02u
-#define PLL_VFC_2PHASE			0x04u
-#define PLL_VFC_DELAY			0x18u
-#define PLL_VFC_DCLKBY2_SHIFT		0x20u
-/*	?				0x40u */
-#define PLL_TST_SRC_SEL_BIT5		0x80u	/* VTB/GTB/LT */
-#define PLL_TEST_CNTL		0x0eu
-#define PLL_TST_SRC_SEL			0x1fu
-#define PLL_TST_DIVIDERS		0x20u
-#define PLL_TST_MASK_READ		0x40u
-#define PLL_TST_ANALOG_MON_EN		0x80u
-#define PLL_TEST_COUNT		0x0fu
-#define PLL_LVDSPLL_CNTL0	0x10u		/* LT */
-#define PLL_FPDI_NS_TIMING		0x01u
-#define PLL_CURR_LEVEL			0x0eu
-#define PLL_LVDS_TEST_MODE		0xf0u
-#define PLL_LVDSPLL_CNTL1	0x11u		/* LT */
-#define PLL_LPPL_RANGE			0x01u
-#define PLL_LPLL_DUTY			0x06u
-#define PLL_LPLL_VC_GAIN		0x18u
-#define PLL_LPLL_CP_GAIN		0xe0u
-#define PLL_AGP1_CNTL		0x12u		/* GTPro */
-#define PLL_AGP2_CNTL		0x13u		/* GTPro */
-#define PLL_DLL2_CNTL		0x14u		/* GTPro */
-#define PLL_SCLK_FB_DIV		0x15u		/* GTPro */
-#define PLL_SPLL_CNTL1		0x16u		/* GTPro */
-#define PLL_SPLL_CNTL2		0x17u		/* GTPro */
-#define PLL_APLL_STRAPS		0x18u		/* GTPro */
-#define PLL_EXT_VPLL_CNTL	0x19u		/* GTPro */
-#define PLL_EXT_VPLL_REF_SRC		0x03u
-#define PLL_EXT_VPLL_EN			0x04u
-#define PLL_EXT_VPLL_VGA_EN		0x08u
-#define PLL_EXT_VPLL_INSYNC		0x10u
-/*	?				0x60u */
-#define PLL_EXT_V2PLL_EN		0x80u
-#define PLL_EXT_VPLL_REF_DIV	0x1au		/* GTPro */
-#define PLL_EXT_VPLL_FB_DIV	0x1bu		/* GTPro */
-#define PLL_EXT_VPLL_MSB	0x1cu		/* GTPro */
-#define PLL_HTOTAL_CNTL		0x1du		/* GTPro */
-#define PLL_BYTE_CLK_CNTL	0x1eu		/* GTPro */
-#define PLL_TV_REF_DIV		0x1fu		/* LTPro */
-#define PLL_TV_FB_DIV		0x20u		/* LTPro */
-#define PLL_TV_CNTL		0x21u		/* LTPro */
-#define PLL_TV_GEN_CNTL		0x22u		/* LTPro */
-#define PLL_V2_CNTL		0x23u		/* LTPro */
-#define PLL_V2_GEN_CNTL		0x24u		/* LTPro */
-#define PLL_V2_REF_DIV		0x25u		/* LTPro */
-#define PLL_V2_FB_DIV		0x26u		/* LTPro */
-#define PLL_V2_MSB		0x27u		/* LTPro */
-#define PLL_HTOTAL2_CNTL	0x28u		/* LTPro */
-#define PLL_YCLK_CNTL		0x29u		/* XC/XL */
-#define PM_DYN_CLK_CNTL		0x2au		/* XC/XL */
-/*	?			0x2bu */
-/*	?			0x2cu */
-/*	?			0x2du */
-/*	?			0x2eu */
-/*	?			0x2fu */
-/*	?			0x30u */
-/*	?			0x31u */
-/*	?			0x32u */
-/*	?			0x33u */
-/*	?			0x34u */
-/*	?			0x35u */
-/*	?			0x36u */
-/*	?			0x37u */
-/*	?			0x38u */
-/*	?			0x39u */
-/*	?			0x3au */
-/*	?			0x3bu */
-/*	?			0x3cu */
-/*	?			0x3du */
-/*	?			0x3eu */
-/*	?			0x3fu */
-
-/* Definitions for an LTPro's 32-bit LCD registers */
-#define LCD_CONFIG_PANEL	0x00u	/* See LT's CONFIG_PANEL (0x1d) */
-#define LCD_GEN_CNTL		0x01u	/* See LT's LCD_GEN_CTRL (0x35) */
-#define LCD_DSTN_CONTROL	0x02u	/* See LT's DSTN_CONTROL (0x1f) */
-#define LCD_HFB_PITCH_ADDR	0x03u	/* See LT's HFB_PITCH_ADDR (0x2a) */
-#define LCD_HORZ_STRETCHING	0x04u	/* See LT's HORZ_STRETCHING (0x32) */
-#define LCD_VERT_STRETCHING	0x05u	/* See LT's VERT_STRETCHING (0x33) */
-#define LCD_EXT_VERT_STRETCH	0x06u
-#define VERT_STRETCH_RATIO3		0x000003fful
-#define FORCE_DAC_DATA			0x000000fful
-#define FORCE_DAC_DATA_SEL		0x00000300ul
-#define VERT_STRETCH_MODE		0x00000400ul
-#define VERT_PANEL_SIZE			0x003ff800ul
-#define AUTO_VERT_RATIO			0x00400000ul
-#define USE_AUTO_FP_POS			0x00800000ul
-#define USE_AUTO_LCD_VSYNC		0x01000000ul
-/*	?				0xfe000000ul */
-#define LCD_LT_GIO		0x07u	/* See LT's LT_GIO (0x2f) */
-#define LCD_POWER_MANAGEMENT	0x08u	/* See LT's POWER_MANAGEMENT (0x36) */
-#define LCD_ZVGPIO		0x09u
-#define LCD_ICON_CLR0		0x0au			/* Mobility */
-#define LCD_ICON_CLR1		0x0bu			/* Mobility */
-#define LCD_ICON_OFFSET		0x0cu			/* Mobility */
-#define LCD_ICON_HORZ_VERT_POSN	0x0du			/* Mobility */
-#define LCD_ICON_HORZ_VERT_OFF	0x0eu			/* Mobility */
-#define LCD_ICON2_CLR0		0x0fu			/* Mobility */
-#define LCD_ICON2_CLR1		0x10u			/* Mobility */
-#define LCD_ICON2_OFFSET	0x11u			/* Mobility */
-#define LCD_ICON2_HORZ_VERT_POSN 0x12u			/* Mobility */
-#define LCD_ICON2_HORZ_VERT_OFF	0x13u			/* Mobility */
-#define LCD_MISC_CNTL		0x14u			/* XC/XL */
-#define BL_MOD_LEVEL			0x000000fful
-#define BIAS_MOD_LEVEL			0x0000ff00ul
-#define BLMOD_EN			0x00010000ul
-#define BIASMOD_EN			0x00020000ul
-/*	?				0x00040000ul */
-#define PWRSEQ_MODE			0x00080000ul
-#define APC_EN				0x00100000ul
-#define MONITOR_DET_EN			0x00200000ul
-#define FORCE_DAC_DATA_SEL_X		0x00c00000ul
-#define FORCE_DAC_DATA_X		0xff000000ul
-#define LCD_TMDS_CNTL		0x15u			/* XC/XL */
-#define LCD_SCRATCH_PAD_4M	0x15u			/* Mobility */
-#define LCD_TMDS_SYNC_CHAR_SETA	0x16u			/* XC/XL */
-#define LCD_SCRATCH_PAD_5M	0x16u			/* Mobility */
-#define LCD_TMDS_SYNC_CHAR_SETB	0x17u			/* XC/XL */
-#define LCD_SCRATCH_PAD_6M	0x17u			/* Mobility */
-#define LCD_TMDS_SRC		0x18u			/* XC/XL */
-#define LCD_SCRATCH_PAD_7M	0x18u			/* Mobility */
-#define LCD_PLTSTBLK_CNTL	0x19u			/* XC/XL */
-#define LCD_SCRATCH_PAD_8M	0x19u			/* Mobility */
-#define LCD_SYNC_GEN_CNTL	0x1au			/* XC/XL */
-#define LCD_PATTERN_GEN_SEED	0x1bu			/* XC/XL */
-#define LCD_APC_CNTL		0x1cu			/* XC/XL */
-#define LCD_POWER_MANAGEMENT_2	0x1du			/* XC/XL */
-#define LCD_XCLK_DISP_PM_EN		0x00000001ul
-#define LCD_XCLK_DISP2_PM_EN		0x00000002ul	/* Mobility */
-#define LCD_XCLK_VID_PM_EN		0x00000004ul
-#define LCD_XCLK_SCL_PM_EN		0x00000008ul
-#define LCD_XCLK_GUI_PM_EN		0x00000010ul
-#define LCD_XCLK_SUB_PM_EN		0x00000020ul
-/*	?				0x000000c0ul */
-#define LCD_MCLK_PM_EN			0x00000100ul
-#define LCD_SS_EN			0x00000200ul
-#define LCD_BLON_DIGON_EN		0x00000400ul
-/*	?				0x00000800ul */
-#define LCD_PM_DYN_XCLK_SYNC		0x00003000ul
-#define LCD_SEL_W4MS			0x00004000ul
-/*	?				0x00008000ul */
-#define LCD_PM_DYN_XCLK_EN		0x00010000ul
-#define LCD_PM_XCLK_ALWAYS		0x00020000ul
-#define LCD_PM_DYN_XCLK_STATUS		0x00040000ul
-#define LCD_PCI_ACC_DIS			0x00080000ul
-#define LCD_PM_DYN_XCLK_DISP		0x00100000ul
-#define LCD_PM_DYN_XCLK_DISP2		0x00200000ul	/* Mobility */
-#define LCD_PM_DYN_XCLK_VID		0x00400000ul
-#define LCD_PM_DYN_XCLK_HFB		0x00800000ul
-#define LCD_PM_DYN_XCLK_SCL		0x01000000ul
-#define LCD_PM_DYN_XCLK_SUB		0x02000000ul
-#define LCD_PM_DYN_XCLK_GUI		0x04000000ul
-#define LCD_PM_DYN_XCLK_HOST		0x08000000ul
-/*	?				0xf0000000ul */
-#define LCD_PRI_ERR_PATTERN	0x1eu			/* XC/XL */
-#define LCD_CUR_ERR_PATTERN	0x1fu			/* XC/XL */
-#define LCD_PLTSTBLK_RPT	0x20u			/* XC/XL */
-#define LCD_SYNC_RPT		0x21u			/* XC/XL */
-#define LCD_CRC_PATTERN_RPT	0x22u			/* XC/XL */
-#define LCD_PL_TRANSMITTER_CNTL	0x23u			/* XC/XL */
-#define LCD_PL_PLL_CNTL		0x24u			/* XC/XL */
-#define LCD_ALPHA_BLENDING	0x25u			/* Mobility */
-#define LCD_PORTRAIT_GEN_CNTL	0x26u			/* Mobility */
-#define LCD_APC_CTRL_IO		0x27u			/* Mobility */
-#define LCD_TEST_IO		0x28u			/* XC/XL */
-/*	?			0x29u */
-#define LCD_DP1_MEM_ACCESS	0x2au			/* XC/XL */
-#define LCD_DP0_MEM_ACCESS	0x2bu			/* XC/XL */
-#define LCD_DP0_DEBUG_A		0x2cu			/* XC/XL */
-#define LCD_DP0_DEBUG_B		0x2du			/* XC/XL */
-#define LCD_DP1_DEBUG_A		0x2eu			/* XC/XL */
-#define LCD_DP1_DEBUG_B		0x2fu			/* XC/XL */
-#define LCD_DPCTRL_DEBUG_A	0x30u			/* XC/XL */
-#define LCD_DPCTRL_DEBUG_B	0x31u			/* XC/XL */
-#define LCD_MEMBLK_DEBUG	0x32u			/* XC/XL */
-#define LCD_APC_LUT_AB		0x33u			/* Mobility */
-#define LCD_SCRATCH_PAD_4X	0x33u			/* XL/XC */
-#define LCD_APC_LUT_CD		0x34u			/* Mobility */
-#define LCD_SCRATCH_PAD_5X	0x34u			/* XL/XC */
-#define LCD_APC_LUT_EF		0x35u			/* Mobility */
-#define LCD_SCRATCH_PAD_6X	0x35u			/* XL/XC */
-#define LCD_APC_LUT_GH		0x36u			/* Mobility */
-#define LCD_SCRATCH_PAD_7X	0x36u			/* XL/XC */
-#define LCD_APC_LUT_IJ		0x37u			/* Mobility */
-#define LCD_SCRATCH_PAD_8X	0x37u			/* XL/XC */
-#define LCD_APC_LUT_KL		0x38u			/* Mobility */
-#define LCD_APC_LUT_MN		0x39u			/* Mobility */
-#define LCD_APC_LUT_OP		0x3au			/* Mobility */
-/*	?			0x3bu */
-/*	?			0x3cu */
-/*	?			0x3du */
-/*	?			0x3eu */
-/*	?			0x3fu */
-
-/* Definitions for an LTPro's TV registers */
-/*	?			0x00u */
-/*	?			0x01u */
-/*	?			0x02u */
-/*	?			0x03u */
-/*	?			0x04u */
-/*	?			0x05u */
-/*	?			0x06u */
-/*	?			0x07u */
-/*	?			0x08u */
-/*	?			0x09u */
-/*	?			0x0au */
-/*	?			0x0bu */
-/*	?			0x0cu */
-/*	?			0x0du */
-/*	?			0x0eu */
-/*	?			0x0fu */
-#define TV_MASTER_CNTL		0x10u
-/*	?			0x11u */
-#define TV_RGB_CNTL		0x12u
-/*	?			0x13u */
-#define TV_SYNC_CNTL		0x14u
-/*	?			0x15u */
-/*	?			0x16u */
-/*	?			0x17u */
-/*	?			0x18u */
-/*	?			0x19u */
-/*	?			0x1au */
-/*	?			0x1bu */
-/*	?			0x1cu */
-/*	?			0x1du */
-/*	?			0x1eu */
-/*	?			0x1fu */
-#define TV_HTOTAL		0x20u
-#define TV_HDISP		0x21u
-#define TV_HSIZE		0x22u
-#define TV_HSTART		0x23u
-#define TV_HCOUNT		0x24u
-#define TV_VTOTAL		0x25u
-#define TV_VDISP		0x26u
-#define TV_VCOUNT		0x27u
-#define TV_FTOTAL		0x28u
-#define TV_FCOUNT		0x29u
-#define TV_FRESTART		0x2au
-#define TV_HRESTART		0x2bu
-#define TV_VRESTART		0x2cu
-/*	?			0x2du */
-/*	?			0x2eu */
-/*	?			0x2fu */
-/*	?			0x30u */
-/*	?			0x31u */
-/*	?			0x32u */
-/*	?			0x33u */
-/*	?			0x34u */
-/*	?			0x35u */
-/*	?			0x36u */
-/*	?			0x37u */
-/*	?			0x38u */
-/*	?			0x39u */
-/*	?			0x3au */
-/*	?			0x3bu */
-/*	?			0x3cu */
-/*	?			0x3du */
-/*	?			0x3eu */
-/*	?			0x3fu */
-/*	?			0x40u */
-/*	?			0x41u */
-/*	?			0x42u */
-/*	?			0x43u */
-/*	?			0x44u */
-/*	?			0x45u */
-/*	?			0x46u */
-/*	?			0x47u */
-/*	?			0x48u */
-/*	?			0x49u */
-/*	?			0x4au */
-/*	?			0x4bu */
-/*	?			0x4cu */
-/*	?			0x4du */
-/*	?			0x4eu */
-/*	?			0x4fu */
-/*	?			0x50u */
-/*	?			0x51u */
-/*	?			0x52u */
-/*	?			0x53u */
-/*	?			0x54u */
-/*	?			0x55u */
-/*	?			0x56u */
-/*	?			0x57u */
-/*	?			0x58u */
-/*	?			0x59u */
-/*	?			0x5au */
-/*	?			0x5bu */
-/*	?			0x5cu */
-/*	?			0x5du */
-/*	?			0x5eu */
-/*	?			0x5fu */
-#define TV_HOST_READ_DATA	0x60u
-#define TV_HOST_WRITE_DATA	0x61u
-#define TV_HOST_RD_WT_CNTL	0x62u
-/*	?			0x63u */
-/*	?			0x64u */
-/*	?			0x65u */
-/*	?			0x66u */
-/*	?			0x67u */
-/*	?			0x68u */
-/*	?			0x69u */
-/*	?			0x6au */
-/*	?			0x6bu */
-/*	?			0x6cu */
-/*	?			0x6du */
-/*	?			0x6eu */
-/*	?			0x6fu */
-#define TV_VSCALER_CNTL		0x70u
-#define TV_TIMING_CNTL		0x71u
-#define TV_GAMMA_CNTL		0x72u
-#define TV_Y_FALL_CNTL		0x73u
-#define TV_Y_RISE_CNTL		0x74u
-#define TV_Y_SAW_TOOTH_CNTL	0x75u
-/*	?			0x76u */
-/*	?			0x77u */
-/*	?			0x78u */
-/*	?			0x79u */
-/*	?			0x7au */
-/*	?			0x7bu */
-/*	?			0x7cu */
-/*	?			0x7du */
-/*	?			0x7eu */
-/*	?			0x7fu */
-#define TV_MODULATOR_CNTL1	0x80u
-#define TV_MODULATOR_CNTL2	0x81u
-/*	?			0x82u */
-/*	?			0x83u */
-/*	?			0x84u */
-/*	?			0x85u */
-/*	?			0x86u */
-/*	?			0x87u */
-/*	?			0x88u */
-/*	?			0x89u */
-/*	?			0x8au */
-/*	?			0x8bu */
-/*	?			0x8cu */
-/*	?			0x8du */
-/*	?			0x8eu */
-/*	?			0x8fu */
-#define TV_PRE_DAC_MUX_CNTL	0x90u
-/*	?			0x91u */
-/*	?			0x92u */
-/*	?			0x93u */
-/*	?			0x94u */
-/*	?			0x95u */
-/*	?			0x96u */
-/*	?			0x97u */
-/*	?			0x98u */
-/*	?			0x99u */
-/*	?			0x9au */
-/*	?			0x9bu */
-/*	?			0x9cu */
-/*	?			0x9du */
-/*	?			0x9eu */
-/*	?			0x9fu */
-#define TV_DAC_CNTL		0xa0u
-/*	?			0xa1u */
-/*	?			0xa2u */
-/*	?			0xa3u */
-/*	?			0xa4u */
-/*	?			0xa5u */
-/*	?			0xa6u */
-/*	?			0xa7u */
-/*	?			0xa8u */
-/*	?			0xa9u */
-/*	?			0xaau */
-/*	?			0xabu */
-/*	?			0xacu */
-/*	?			0xadu */
-/*	?			0xaeu */
-/*	?			0xafu */
-#define TV_CRC_CNTL		0xb0u
-#define TV_VIDEO_PORT_SIG	0xb1u
-/*	?			0xb2u */
-/*	?			0xb3u */
-/*	?			0xb4u */
-/*	?			0xb5u */
-/*	?			0xb6u */
-/*	?			0xb7u */
-#define TV_VBI_CC_CNTL		0xb8u
-#define TV_VBI_EDS_CNTL		0xb9u
-#define TV_VBI_20BIT_CNTL	0xbau
-/*	?			0xbbu */
-/*	?			0xbcu */
-#define TV_VBI_DTO_CNTL		0xbdu
-#define TV_VBI_LEVEL_CNTL	0xbeu
-/*	?			0xbfu */
-#define TV_UV_ADR		0xc0u
-#define TV_FIFO_TEST_CNTL	0xc1u
-/*	?			0xc2u */
-/*	?			0xc3u */
-/*	?			0xc4u */
-/*	?			0xc5u */
-/*	?			0xc6u */
-/*	?			0xc7u */
-/*	?			0xc8u */
-/*	?			0xc9u */
-/*	?			0xcau */
-/*	?			0xcbu */
-/*	?			0xccu */
-/*	?			0xcdu */
-/*	?			0xceu */
-/*	?			0xcfu */
-/*	?			0xd0u */
-/*	?			0xd1u */
-/*	?			0xd2u */
-/*	?			0xd3u */
-/*	?			0xd4u */
-/*	?			0xd5u */
-/*	?			0xd6u */
-/*	?			0xd7u */
-/*	?			0xd8u */
-/*	?			0xd9u */
-/*	?			0xdau */
-/*	?			0xdbu */
-/*	?			0xdcu */
-/*	?			0xddu */
-/*	?			0xdeu */
-/*	?			0xdfu */
-/*	?			0xe0u */
-/*	?			0xe1u */
-/*	?			0xe2u */
-/*	?			0xe3u */
-/*	?			0xe4u */
-/*	?			0xe5u */
-/*	?			0xe6u */
-/*	?			0xe7u */
-/*	?			0xe8u */
-/*	?			0xe9u */
-/*	?			0xeau */
-/*	?			0xebu */
-/*	?			0xecu */
-/*	?			0xedu */
-/*	?			0xeeu */
-/*	?			0xefu */
-/*	?			0xf0u */
-/*	?			0xf1u */
-/*	?			0xf2u */
-/*	?			0xf3u */
-/*	?			0xf4u */
-/*	?			0xf5u */
-/*	?			0xf6u */
-/*	?			0xf7u */
-/*	?			0xf8u */
-/*	?			0xf9u */
-/*	?			0xfau */
-/*	?			0xfbu */
-/*	?			0xfcu */
-/*	?			0xfdu */
-/*	?			0xfeu */
-/*	?			0xffu */
-
-/* Some ImpacTV definitions */
-#define IT_SDA_GET		0x40u
-#define IT_SDA_SET		0x20u
-#define IT_SDA_DIR		0x10u
-#define IT_SCL_GET		0x04u
-#define IT_SCL_SET		0x02u
-#define IT_SCL_DIR		0x01u
-
-#define IT_I2C_CNTL		0x0015u
-
-/* Miscellaneous */
-
-/* Current X, Y & Dest X, Y mask */
-#define COORD_MASK	0x07ffu
-
-/* Pixel widths */
-#define PIX_WIDTH_1BPP			0x00u
-#define PIX_WIDTH_4BPP			0x01u	/* CRTC2: 8bpp */
-#define PIX_WIDTH_8BPP			0x02u	/* CRTC2: Undefined */
-#define PIX_WIDTH_15BPP			0x03u
-#define PIX_WIDTH_16BPP			0x04u
-#define PIX_WIDTH_24BPP			0x05u
-#define PIX_WIDTH_32BPP			0x06u
-#define PIX_WIDTH_YUV422		0x07u	/* CRTC2 only */
-
-/* Source definitions */
-#define SRC_BKGD			0x00u
-#define SRC_FRGD			0x01u
-#define SRC_HOST			0x02u
-#define SRC_BLIT			0x03u
-#define SRC_PATTERN			0x04u
-#define SRC_SCALER_3D			0x05u
-/*	?				0x06u */
-/*	?				0x07u */
-
-/* The Mixes */
-#define MIX_MASK			0x001fu
-
-#define MIX_NOT_DST			0x0000u
-#define MIX_0				0x0001u
-#define MIX_1				0x0002u
-#define MIX_DST				0x0003u
-#define MIX_NOT_SRC			0x0004u
-#define MIX_XOR				0x0005u
-#define MIX_XNOR			0x0006u
-#define MIX_SRC				0x0007u
-#define MIX_NAND			0x0008u
-#define MIX_NOT_SRC_OR_DST		0x0009u
-#define MIX_SRC_OR_NOT_DST		0x000au
-#define MIX_OR				0x000bu
-#define MIX_AND				0x000cu
-#define MIX_SRC_AND_NOT_DST		0x000du
-#define MIX_NOT_SRC_AND_DST		0x000eu
-#define MIX_NOR				0x000fu
-
-#define MIX_MIN				0x0010u
-#define MIX_DST_MINUS_SRC		0x0011u
-#define MIX_SRC_MINUS_DST		0x0012u
-#define MIX_PLUS			0x0013u
-#define MIX_MAX				0x0014u
-#define MIX_HALF__DST_MINUS_SRC		0x0015u
-#define MIX_HALF__SRC_MINUS_DST		0x0016u
-#define MIX_AVERAGE			0x0017u
-#define MIX_DST_MINUS_SRC_SAT		0x0018u
-#define MIX_SRC_MINUS_DST_SAT		0x001au
-#define MIX_HALF__DST_MINUS_SRC_SAT	0x001cu
-#define MIX_HALF__SRC_MINUS_DST_SAT	0x001eu
-#define MIX_AVERAGE_SAT			0x001fu
-#define MIX_FN_PAINT			MIX_SRC
-
-/* Video/Graphics mix functions for overlay */
-#define OVERLAY_MIX_FALSE		0x00u
-#define OVERLAY_MIX_TRUE		0x01u
-/*	?				0x02u */
-/*	?				0x03u */
-#define OVERLAY_MIX_NOT_EQUAL		0x04u
-#define OVERLAY_MIX_EQUAL		0x05u
-/*	?				0x06u */
-/*	?				0x07u */
-
-/* 3D Engine for render acceleration (from Mach64 DRI driver) */
-
-/* SCALE_3D_CNTL */
-#define MACH64_SCALE_PIX_EXPAND_ZERO_EXTEND	(0 << 0)
-#define MACH64_SCALE_PIX_EXPAND_DYNAMIC_RANGE	(1 << 0)
-#define MACH64_SCALE_DITHER_ERROR_DIFFUSE	(0 << 1)
-#define MACH64_SCALE_DITHER_2D_TABLE		(1 << 1)
-#define MACH64_DITHER_EN			(1 << 2)
-#define MACH64_DITHER_INIT_CURRENT		(O << 3)
-#define MACH64_DITHER_INIT_RESET		(1 << 3)
-#define MACH64_ROUND_EN				(1 << 4)
-
-#define MACH64_TEX_CACHE_DIS			(1 << 5)
-
-#define MACH64_SCALE_3D_FCN_MASK		(3 << 6)
-#define MACH64_SCALE_3D_FCN_NOP			(0 << 6)
-#define MACH64_SCALE_3D_FCN_SCALE		(1 << 6)
-#define MACH64_SCALE_3D_FCN_TEXTURE		(2 << 6)
-#define MACH64_SCALE_3D_FCN_SHADE		(3 << 6)
-#define MACH64_TEXTURE_DISABLE			(1 << 6)
-
-#define MACH64_EDGE_ANTI_ALIAS			(1 << 8)
-#define MACH64_TEX_CACHE_SPLIT			(1 << 9)
-#define MACH64_APPLE_YUV_MODE			(1 << 10)
-
-#define MACH64_ALPHA_FOG_EN_MASK		(3 << 11)
-#define MACH64_ALPHA_FOG_DIS			(0 << 11)
-#define MACH64_ALPHA_FOG_EN_ALPHA		(1 << 11)
-#define MACH64_ALPHA_FOG_EN_FOG			(2 << 11)
-
-#define MACH64_ALPHA_BLEND_SAT			(1 << 13)
-#define MACH64_RED_DITHER_MAX			(1 << 14)
-#define MACH64_SIGNED_DST_CLAMP			(1 << 15)
-
-#define MACH64_ALPHA_BLEND_SRC_MASK		(7 << 16)
-#define MACH64_ALPHA_BLEND_SRC_ZERO		(0 << 16)
-#define MACH64_ALPHA_BLEND_SRC_ONE		(1 << 16)
-#define MACH64_ALPHA_BLEND_SRC_DSTCOLOR		(2 << 16)
-#define MACH64_ALPHA_BLEND_SRC_INVDSTCOLOR	(3 << 16)
-#define MACH64_ALPHA_BLEND_SRC_SRCALPHA		(4 << 16)
-#define MACH64_ALPHA_BLEND_SRC_INVSRCALPHA	(5 << 16)
-#define MACH64_ALPHA_BLEND_SRC_DSTALPHA		(6 << 16)
-#define MACH64_ALPHA_BLEND_SRC_INVDSTALPHA	(7 << 16)
-#define MACH64_ALPHA_BLEND_DST_MASK		(7 << 19)
-#define MACH64_ALPHA_BLEND_DST_ZERO		(0 << 19)
-#define MACH64_ALPHA_BLEND_DST_ONE		(1 << 19)
-#define MACH64_ALPHA_BLEND_DST_SRCCOLOR		(2 << 19)
-#define MACH64_ALPHA_BLEND_DST_INVSRCCOLOR	(3 << 19)
-#define MACH64_ALPHA_BLEND_DST_SRCALPHA		(4 << 19)
-#define MACH64_ALPHA_BLEND_DST_INVSRCALPHA	(5 << 19)
-#define MACH64_ALPHA_BLEND_DST_DSTALPHA		(6 << 19)
-#define MACH64_ALPHA_BLEND_DST_INVDSTALPHA	(7 << 19)
-
-#define MACH64_TEX_LIGHT_FCN_MASK		(3 << 22)
-#define MACH64_TEX_LIGHT_FCN_REPLACE		(0 << 22)
-#define MACH64_TEX_LIGHT_FCN_MODULATE		(1 << 22)
-#define MACH64_TEX_LIGHT_FCN_ALPHA_DECAL	(2 << 22)
-
-#define MACH64_MIP_MAP_DISABLE			(1 << 24)
-
-#define MACH64_BILINEAR_TEX_EN			(1 << 25)
-#define MACH64_TEX_BLEND_FCN_MASK		(3 << 26)
-#define MACH64_TEX_BLEND_FCN_NEAREST		(0 << 26)
-#define MACH64_TEX_BLEND_FCN_LINEAR		(2 << 26)
-#define MACH64_TEX_BLEND_FCN_TRILINEAR		(3 << 26)
-
-#define MACH64_TEX_AMASK_AEN			(1 << 28)
-#define MACH64_TEX_AMASK_BLEND_EDGE		(1 << 29)
-#define MACH64_TEX_MAP_AEN			(1 << 30)
-#define MACH64_SRC_3D_HOST_FIFO			(1 << 31)
-
-/* TEX_CNTL */
-#define MACH64_LOD_BIAS_SHIFT			0
-#define MACH64_LOD_BIAS_MASK			(0xf << 0)
-#define MACH64_COMP_FACTOR_SHIFT		4
-#define MACH64_COMP_FACTOR_MASK			(0xf << 4)
-
-#define MACH64_TEXTURE_COMPOSITE		(1 << 8)
-
-#define MACH64_COMP_COMBINE_BLEND		(0 << 9)
-#define MACH64_COMP_COMBINE_MODULATE		(1 << 9)
-#define MACH64_COMP_BLEND_NEAREST		(0 << 11)
-#define MACH64_COMP_BLEND_BILINEAR		(1 << 11)
-#define MACH64_COMP_FILTER_NEAREST		(0 << 12)
-#define MACH64_COMP_FILTER_BILINEAR		(1 << 12)
-#define MACH64_COMP_ALPHA			(1 << 13)
-
-#define MACH64_TEXTURE_TILING			(1 << 14)
-#define MACH64_COMPOSITE_TEX_TILING		(1 << 15)
-#define MACH64_TEX_COLLISION_DISABLE		(1 << 16)
-
-#define MACH64_TEXTURE_CLAMP_S			(1 << 17)
-#define MACH64_TEXTURE_CLAMP_T			(1 << 18)
-#define MACH64_TEX_ST_MULT_W			(0 << 19)
-#define MACH64_TEX_ST_DIRECT			(1 << 19)
-#define MACH64_TEX_SRC_LOCAL			(0 << 20)
-#define MACH64_TEX_SRC_AGP			(1 << 20)
-#define MACH64_TEX_UNCOMPRESSED			(0 << 21)
-#define MACH64_TEX_VQ_COMPRESSED		(1 << 21)
-#define MACH64_COMP_TEX_UNCOMPRESSED		(0 << 22)
-#define MACH64_COMP_TEX_VQ_COMPRESSED		(1 << 22)
-#define MACH64_TEX_CACHE_FLUSH			(1 << 23)
-#define MACH64_SEC_TEX_CLAMP_S			(1 << 24)
-#define MACH64_SEC_TEX_CLAMP_T			(1 << 25)
-#define MACH64_TEX_WRAP_S			(1 << 28)
-#define MACH64_TEX_WRAP_T			(1 << 29)
-#define MACH64_TEX_CACHE_SIZE_4K		(1 << 30)
-#define MACH64_TEX_CACHE_SIZE_2K		(1 << 30)
-#define MACH64_SECONDARY_STW			(1 << 31)
-
-/* DP_PIX_WIDTH (superset of PIX_WIDTH_?BPP) */
-#define MACH64_DATATYPE_CI8                             2
-#define MACH64_DATATYPE_ARGB1555                        3
-#define MACH64_DATATYPE_RGB565                          4
-#define MACH64_DATATYPE_ARGB8888                        6
-#define MACH64_DATATYPE_RGB332                          7
-#define MACH64_DATATYPE_Y8                              8
-#define MACH64_DATATYPE_RGB8                            9
-#define MACH64_DATATYPE_VYUY422                         11
-#define MACH64_DATATYPE_YVYU422                         12
-#define MACH64_DATATYPE_AYUV444                         14
-#define MACH64_DATATYPE_ARGB4444                        15
-
-/* Extract texture level from TEX_SIZE_PITCH and shift appropriately for
- * addition to TEX_0_OFF.
- */
-#define TEX_LEVEL(_tex_size_pitch) (((_tex_size_pitch) & 0xf0) >> 2)
-
-#endif /* ___ATIREGS_H___ */
diff --git a/src/atirgb514.c b/src/atirgb514.c
deleted file mode 100644
index cc7c0ea..0000000
--- a/src/atirgb514.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright 2001 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "aticrtc.h"
-#include "atimach64io.h"
-#include "atirgb514.h"
-
-/*
- * ATIRGB514PreInit --
- *
- * This function fills in the IBM RGB 514 portion of an ATIHWRec that is common
- * to all video modes generated by the server.
- */
-void
-ATIRGB514PreInit
-(
-    ATIPtr   pATI,
-    ATIHWPtr pATIHW
-)
-{
-    /* Get a work copy of IBM RGB 514 registers */
-    ATIRGB514Save(pATI, pATIHW);
-
-    /* Miscellaneous Clock Control */
-    pATIHW->ibmrgb514[0x0002U] = 0x01U;
-
-    /* Sync Control */
-    pATIHW->ibmrgb514[0x0003U] &= ~0x80U;
-
-    /* Horizontal Sync Control */
-    pATIHW->ibmrgb514[0x0004U] = 0x00U;
-
-    /* Power Management */
-    pATIHW->ibmrgb514[0x0005U] = 0x00U;
-
-    /* DAC Operation */
-    pATIHW->ibmrgb514[0x0006U] &= ~0x04U;
-
-    /* Palette Control */
-    pATIHW->ibmrgb514[0x0007U] = 0x00U;
-
-    /* PLL Control */
-    pATIHW->ibmrgb514[0x0010U] = 0x01U;
-
-    /* Cursor control */
-    pATIHW->ibmrgb514[0x0030U] &= ~0x03U;       /* For now */
-
-    /* Border (i.e. overscan) */
-    pATIHW->ibmrgb514[0x0060U] = 0x00U;
-    pATIHW->ibmrgb514[0x0061U] = 0x00U;
-    pATIHW->ibmrgb514[0x0062U] = 0x00U;
-
-    /* Miscellaneous Control */
-    pATIHW->ibmrgb514[0x0070U] &= ~0x20U;
-    pATIHW->ibmrgb514[0x0071U] = 0x41U; /* See workaround in ATIRGB514Set() */
-
-#ifndef AVOID_CPIO
-
-    if (pATIHW->crtc == ATI_CRTC_VGA)
-    {
-        /* Pixel Format */
-        pATIHW->ibmrgb514[0x000AU] = 0x03U;
-
-        /* Miscellaneous Control */
-        pATIHW->ibmrgb514[0x0070U] |= 0x40U;
-
-        /* VRAM Mask */
-        pATIHW->ibmrgb514[0x0090U] = 0x03U;
-    }
-    else
-
-#endif /* AVOID_CPIO */
-
-    {
-        /* Miscellaneous Control */
-        pATIHW->ibmrgb514[0x0070U] &= ~0x40U;
-
-        /* VRAM Mask */
-        pATIHW->ibmrgb514[0x0090U] = 0x00U;
-        pATIHW->ibmrgb514[0x0091U] = 0x00U;
-
-        /* Pixel Format */
-        switch (pATI->depth)
-        {
-            case 8:
-                pATIHW->ibmrgb514[0x000AU] = 0x03U;
-                pATIHW->ibmrgb514[0x000BU] = 0x00U;
-                break;
-
-            case 15:
-                pATIHW->ibmrgb514[0x000AU] = 0x04U;
-                pATIHW->ibmrgb514[0x000CU] = 0xC4U;
-                break;
-
-            case 16:
-                pATIHW->ibmrgb514[0x000AU] = 0x04U;
-                pATIHW->ibmrgb514[0x000CU] = 0xC6U;
-                break;
-
-            case 24:
-                if (pATI->bitsPerPixel == 24)
-                {
-                    pATIHW->ibmrgb514[0x000AU] = 0x05U;
-                    pATIHW->ibmrgb514[0x000DU] = 0x01U;
-                }
-                else
-                {
-                    pATIHW->ibmrgb514[0x000AU] = 0x06U;
-                    pATIHW->ibmrgb514[0x000EU] = 0x03U;
-                }
-                break;
-
-            default:
-                break;
-        }
-    }
-
-    if (pATI->rgbBits == 8)
-        pATIHW->ibmrgb514[0x0071U] |= 0x04U;
-}
-
-/*
- * ATIRGB514Save --
- *
- * This function saves IBM RGB514 related data into an ATIHWRec.
- */
-void
-ATIRGB514Save
-(
-    ATIPtr   pATI,
-    ATIHWPtr pATIHW
-)
-{
-    CARD32 crtc_gen_cntl, dac_cntl;
-    CARD8  index_lo, index_hi, index_ctl;
-    int    Index;
-
-    /* Temporarily switch to Mach64 CRTC */
-    crtc_gen_cntl = inr(CRTC_GEN_CNTL);
-    if (!(crtc_gen_cntl & CRTC_EXT_DISP_EN))
-        outr(CRTC_GEN_CNTL, crtc_gen_cntl | CRTC_EXT_DISP_EN);
-
-    /* Temporarily switch to IBM RGB 514 registers */
-    dac_cntl = inr(DAC_CNTL) & ~(DAC_EXT_SEL_RS2 | DAC_EXT_SEL_RS3);
-    outr(DAC_CNTL, dac_cntl | DAC_EXT_SEL_RS2);
-
-    index_lo = in8(M64_DAC_WRITE);
-    index_hi = in8(M64_DAC_DATA);
-    index_ctl = in8(M64_DAC_READ);
-
-    out8(M64_DAC_WRITE, 0x00U);
-    out8(M64_DAC_DATA, 0x00U);
-    out8(M64_DAC_READ, 0x01U);  /* Auto-increment */
-
-    /* Save IBM RGB 514 registers */
-    for (Index = 0;  Index < NumberOf(pATIHW->ibmrgb514);  Index++)
-    {
-        /* Need to rewrite the index every so often... */
-        if ((Index == 0x0100) || (Index == 0x0500))
-        {
-            out8(M64_DAC_WRITE, 0);
-            out8(M64_DAC_DATA, Index >> 8);
-        }
-        pATIHW->ibmrgb514[Index] = in8(M64_DAC_MASK);
-    }
-
-    /* Restore registers */
-    out8(M64_DAC_WRITE, index_lo);
-    out8(M64_DAC_DATA, index_hi);
-    out8(M64_DAC_READ, index_ctl);
-    outr(DAC_CNTL, dac_cntl);
-    if (!(crtc_gen_cntl & CRTC_EXT_DISP_EN))
-        outr(CRTC_GEN_CNTL, crtc_gen_cntl);
-}
-
-/*
- * ATIRGB514Calculate --
- *
- * This function fills in the IBM RGB 514 portion of an ATIHWRec that is
- * specific to a display mode.  pATIHW->ibmrgb514 has already been
- * initialised by a previous call to ATIRGB514PreInit().
- */
-void
-ATIRGB514Calculate
-(
-    ATIPtr         pATI,
-    ATIHWPtr       pATIHW,
-    DisplayModePtr pMode
-)
-{
-    if (pATI->OptionCSync || (pMode->Flags & (V_CSYNC | V_PCSYNC)))
-        pATIHW->ibmrgb514[0x0006U] |= 0x08U;
-    else
-        pATIHW->ibmrgb514[0x0006U] &= ~0x08U;
-
-    if (pMode->Flags & V_INTERLACE)
-        pATIHW->ibmrgb514[0x0071U] |= 0x20U;
-    else
-        pATIHW->ibmrgb514[0x0071U] &= ~0x20U;
-}
-
-/*
- * ATIRGB514Set --
- *
- * This function is called to set an IBM RGB514's registers.
- */
-void
-ATIRGB514Set
-(
-    ATIPtr   pATI,
-    ATIHWPtr pATIHW
-)
-{
-    CARD32 crtc_gen_cntl, dac_cntl;
-    CARD8  index_lo, index_hi, index_ctl;
-    int    Index;
-
-    /* Temporarily switch to Mach64 CRTC */
-    crtc_gen_cntl = inr(CRTC_GEN_CNTL);
-    if (!(crtc_gen_cntl & CRTC_EXT_DISP_EN))
-        outr(CRTC_GEN_CNTL, crtc_gen_cntl | CRTC_EXT_DISP_EN);
-
-    /* Temporarily switch to IBM RGB 514 registers */
-    dac_cntl = inr(DAC_CNTL) & ~(DAC_EXT_SEL_RS2 | DAC_EXT_SEL_RS3);
-    outr(DAC_CNTL, dac_cntl | DAC_EXT_SEL_RS2);
-
-    index_lo = in8(M64_DAC_WRITE);
-    index_hi = in8(M64_DAC_DATA);
-    index_ctl = in8(M64_DAC_READ);
-
-    out8(M64_DAC_WRITE, 0x00U);
-    out8(M64_DAC_DATA, 0x00U);
-    out8(M64_DAC_READ, 0x01U);  /* Auto-increment */
-
-    /* Load IBM RGB 514 registers */
-    for (Index = 0;  Index < NumberOf(pATIHW->ibmrgb514);  Index++)
-         out8(M64_DAC_MASK, pATIHW->ibmrgb514[Index]);
-
-#ifndef AVOID_CPIO
-
-    /* Deal with documented anomaly */
-    if (pATIHW->crtc == ATI_CRTC_VGA)
-    {
-        /* Reset Miscellaneous Control 2 */
-        out8(M64_DAC_WRITE, 0x71U);
-        out8(M64_DAC_DATA, 0x00U);
-        out8(M64_DAC_MASK, pATIHW->ibmrgb514[0x0071U] & ~0x41U);
-    }
-
-#endif /* AVOID_CPIO */
-
-    /* Restore registers */
-    out8(M64_DAC_WRITE, index_lo);
-    out8(M64_DAC_DATA, index_hi);
-    out8(M64_DAC_READ, index_ctl);
-    outr(DAC_CNTL, dac_cntl);
-    if (!(crtc_gen_cntl & CRTC_EXT_DISP_EN))
-        outr(CRTC_GEN_CNTL, crtc_gen_cntl);
-}
diff --git a/src/atirgb514.h b/src/atirgb514.h
deleted file mode 100644
index bd7c09e..0000000
--- a/src/atirgb514.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2001 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIRGB514_H___
-#define ___ATIRGB514_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-extern void ATIRGB514PreInit(ATIPtr, ATIHWPtr);
-extern void ATIRGB514Save(ATIPtr, ATIHWPtr);
-extern void ATIRGB514Calculate(ATIPtr, ATIHWPtr, DisplayModePtr);
-extern void ATIRGB514Set(ATIPtr, ATIHWPtr);
-
-#endif /* ___ATIRGB514_H___ */
diff --git a/src/atiscreen.c b/src/atiscreen.c
deleted file mode 100644
index bc57934..0000000
--- a/src/atiscreen.c
+++ /dev/null
@@ -1,692 +0,0 @@
-/*
- * Copyright 1999 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * DRI support by:
- *    Gareth Hughes <gareth at valinux.com>
- *    José Fonseca <j_r_fonseca at yahoo.co.uk>
- *    Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "ati.h"
-#include "atibus.h"
-#include "atichip.h"
-#include "aticonsole.h"
-#include "aticursor.h"
-#include "atidac.h"
-#include "atidga.h"
-#include "atidri.h"
-#include "atimach64.h"
-#include "atimode.h"
-#include "atiscreen.h"
-#include "atistruct.h"
-#include "atixv.h"
-#include "atimach64accel.h"
-
-#ifdef XF86DRI_DEVEL
-#include "mach64_dri.h"
-#include "mach64_sarea.h"
-#endif
-
-#ifdef TV_OUT
-
-#include "atichip.h"
-
-#endif /* TV_OUT */
-
-#include "shadowfb.h"
-#include "xf86cmap.h"
-
-#include "fb.h"
-
-#include "micmap.h"
-#include "mipointer.h"
-
-/*
- * ATIRefreshArea --
- *
- * This function is called by the shadow frame buffer code to refresh the
- * hardware frame buffer.
- */
-static void
-ATIRefreshArea
-(
-    ScrnInfoPtr pScreenInfo,
-    int         nBox,
-    BoxPtr      pBox
-)
-{
-    ATIPtr  pATI = ATIPTR(pScreenInfo);
-    pointer pSrc, pDst;
-    int     offset, w, h;
-
-    while (nBox-- > 0)
-    {
-        w = (pBox->x2 - pBox->x1) * pATI->AdjustDepth;
-        h = pBox->y2 - pBox->y1;
-        offset = (pBox->y1 * pATI->FBPitch) + (pBox->x1 * pATI->AdjustDepth);
-        pSrc = (char *)pATI->pShadow + offset;
-        pDst = (char *)pATI->pMemory + offset;
-
-        while (h-- > 0)
-        {
-            (void)memcpy(pDst, pSrc, w);
-            pSrc = (char *)pSrc + pATI->FBPitch;
-            pDst = (char *)pDst + pATI->FBPitch;
-        }
-
-        pBox++;
-    }
-}
-
-/*
- * ATIMinBits --
- *
- * Compute log base 2 of val.
- */
-static int
-ATIMinBits
-(
-    int val
-)
-{
-    int bits;
-
-    if (!val) return 1;
-    for (bits = 0; val; val >>= 1, ++bits);
-    return bits;
-}
-
-#ifdef USE_XAA
-static Bool
-ATIMach64SetupMemXAA_NoDRI
-(
-    int       iScreen,
-    ScreenPtr pScreen
-)
-{
-    ScrnInfoPtr  pScreenInfo = xf86Screens[iScreen];
-    ATIPtr       pATI        = ATIPTR(pScreenInfo);
-
-    int maxScanlines = ATIMach64MaxY;
-    int maxPixelArea, PixelArea;
-
-    {
-        /*
-         * Note:  If PixelArea exceeds the engine's maximum, the excess is
-         *        never used, even though it would be useful for such things
-         *        as XVideo buffers.
-         */
-        maxPixelArea = maxScanlines * pScreenInfo->displayWidth;
-        PixelArea = pScreenInfo->videoRam * 1024 * 8 / pATI->bitsPerPixel;
-        if (PixelArea > maxPixelArea)
-            PixelArea = maxPixelArea;
-        xf86InitFBManagerArea(pScreen, PixelArea, 2);
-    }
-
-    return TRUE;
-}
-
-#ifdef XF86DRI_DEVEL
-/*
- * Memory layour for XAA with DRI (no local_textures):
- * | front  | pixmaps, xv | back   | depth  | textures | c |
- *
- * 1024x768 at 16bpp with 8 MB:
- * | 1.5 MB | ~3.5 MB     | 1.5 MB | 1.5 MB | 0        | c |
- *
- * 1024x768 at 32bpp with 8 MB:
- * | 3.0 MB | ~0.5 MB     | 3.0 MB | 1.5 MB | 0        | c |
- *
- * "c" is the hw cursor which occupies 1KB
- */
-static Bool
-ATIMach64SetupMemXAA
-(
-    int       iScreen,
-    ScreenPtr pScreen
-)
-{
-	ScrnInfoPtr  pScreenInfo = xf86Screens[iScreen];
-	ATIPtr       pATI        = ATIPTR(pScreenInfo);
-
-	ATIDRIServerInfoPtr pATIDRIServer = pATI->pDRIServerInfo;
-	int cpp = pATI->bitsPerPixel >> 3;
-	int widthBytes = pScreenInfo->displayWidth * cpp;
-	int zWidthBytes = pScreenInfo->displayWidth * 2; /* always 16-bit z-buffer */
-	int fbSize = pScreenInfo->videoRam * 1024;
-	int bufferSize = pScreenInfo->virtualY * widthBytes;
-	int zBufferSize = pScreenInfo->virtualY * zWidthBytes;
-	int offscreenBytes, total, scanlines;
-
-	pATIDRIServer->fbX = 0;
-	pATIDRIServer->fbY = 0;
-	pATIDRIServer->frontOffset = 0;
-	pATIDRIServer->frontPitch = pScreenInfo->displayWidth;
-
-	/* Calculate memory remaining for pixcache and textures after 
-	 * front, back, and depth buffers
-	 */
-	offscreenBytes = fbSize - ( 2 * bufferSize + zBufferSize );
-
-	if ( !pATIDRIServer->IsPCI && !pATI->OptionLocalTextures ) {
-	    /* Don't allocate a local texture heap for AGP unless requested */
-	    pATIDRIServer->textureSize = 0;
-	} else {
-	    int l, maxPixcache;
-
-#ifdef XvExtension
-
-	    int xvBytes;
-
-	    /* Try for enough pixmap cache for DVD and a full viewport
-	     */
-	    xvBytes = 720*480*cpp; /* enough for single-buffered DVD */
-	    maxPixcache = xvBytes > bufferSize ? xvBytes : bufferSize;
-
-#else /* XvExtension */
-
-	    /* Try for one viewport */
-	    maxPixcache = bufferSize;
-
-#endif /* XvExtension */
-
-	    pATIDRIServer->textureSize = offscreenBytes - maxPixcache;
-
-	    /* If that gives us less than half the offscreen mem available for textures, split 
-	     * the available mem between textures and pixmap cache
-	     */
-	    if (pATIDRIServer->textureSize < (offscreenBytes/2)) {
-		pATIDRIServer->textureSize = offscreenBytes/2;
-	    }
-
-	    if (pATIDRIServer->textureSize <= 0)
-		pATIDRIServer->textureSize = 0;
-
-	    l = ATIMinBits((pATIDRIServer->textureSize-1) / MACH64_NR_TEX_REGIONS);
-	    if (l < MACH64_LOG_TEX_GRANULARITY) l = MACH64_LOG_TEX_GRANULARITY;
-
-	    /* Round the texture size up to the nearest whole number of
-	     * texture regions.  Again, be greedy about this, don't round
-	     * down.
-	     */
-	    pATIDRIServer->logTextureGranularity = l;
-	    pATIDRIServer->textureSize =
-		(pATIDRIServer->textureSize >> l) << l;
-	}
-
-	total = fbSize - pATIDRIServer->textureSize;
-	scanlines = total / widthBytes;
-	if (scanlines > ATIMach64MaxY) scanlines = ATIMach64MaxY;
-
-	/* Recalculate the texture offset and size to accomodate any
-	 * rounding to a whole number of scanlines.
-	 * FIXME: Is this actually needed?
-	 */
-	pATIDRIServer->textureOffset = scanlines * widthBytes;
-	pATIDRIServer->textureSize = fbSize - pATIDRIServer->textureOffset;
-
-	/* Set a minimum usable local texture heap size.  This will fit
-	 * two 256x256 textures.  We check this after any rounding of
-	 * the texture area.
-	 */
-	if (pATIDRIServer->textureSize < 256*256 * cpp * 2) {
-	    pATIDRIServer->textureOffset = 0;
-	    pATIDRIServer->textureSize = 0;
-	    scanlines = fbSize / widthBytes;
-	    if (scanlines > ATIMach64MaxY) scanlines = ATIMach64MaxY;
-	}
-
-	pATIDRIServer->depthOffset = scanlines * widthBytes - zBufferSize;
-	pATIDRIServer->depthPitch = pScreenInfo->displayWidth;
-	pATIDRIServer->depthY = pATIDRIServer->depthOffset/widthBytes;
-	pATIDRIServer->depthX =  (pATIDRIServer->depthOffset - 
-				  (pATIDRIServer->depthY * widthBytes)) / cpp;
-
-	pATIDRIServer->backOffset = pATIDRIServer->depthOffset - bufferSize;
-	pATIDRIServer->backPitch = pScreenInfo->displayWidth;
-	pATIDRIServer->backY = pATIDRIServer->backOffset/widthBytes;
-	pATIDRIServer->backX =  (pATIDRIServer->backOffset - 
-				  (pATIDRIServer->backY * widthBytes)) / cpp;
-
-	scanlines = fbSize / widthBytes;
-	if (scanlines > ATIMach64MaxY) scanlines = ATIMach64MaxY;
-
-	if ( pATIDRIServer->IsPCI && pATIDRIServer->textureSize == 0 ) {
-	    xf86DrvMsg(iScreen, X_WARNING,
-		       "Not enough memory for local textures, disabling DRI\n");
-	    ATIDRICloseScreen(pScreen);
-	    pATI->directRenderingEnabled = FALSE;
-	} else {
-	    BoxRec ScreenArea;
-
-	    ScreenArea.x1 = 0;
-	    ScreenArea.y1 = 0;
-	    ScreenArea.x2 = pATI->displayWidth;
-	    ScreenArea.y2 = scanlines;
-
-	    if (!xf86InitFBManager(pScreen, &ScreenArea)) {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR,
-			   "Memory manager initialization to (%d,%d) (%d,%d) failed\n",
-			   ScreenArea.x1, ScreenArea.y1,
-			   ScreenArea.x2, ScreenArea.y2);
-		return FALSE;
-	    } else {
-		int width, height;
-
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-			   "Memory manager initialized to (%d,%d) (%d,%d)\n",
-			   ScreenArea.x1, ScreenArea.y1, ScreenArea.x2, ScreenArea.y2);
-
-		if (xf86QueryLargestOffscreenArea(pScreen, &width, &height, 0, 0, 0)) {
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-			       "Largest offscreen area available: %d x %d\n",
-			       width, height);
-
-		    /* lines in offscreen area needed for depth buffer and textures */
-		    pATI->depthTexLines = scanlines
-			- pATIDRIServer->depthOffset / widthBytes;
-		    pATI->backLines     = scanlines
-			- pATIDRIServer->backOffset / widthBytes
-			- pATI->depthTexLines;
-		    pATI->depthTexArea  = NULL;
-		    pATI->backArea      = NULL;
-		} else {
-		    xf86DrvMsg(pScreenInfo->scrnIndex, X_ERROR, 
-			       "Unable to determine largest offscreen area available\n");
-		    return FALSE;
-		}
-
-	    }
-
-	    xf86DrvMsg(iScreen, X_INFO, "Will use %d kB of offscreen memory for XAA\n", 
-		       (offscreenBytes - pATIDRIServer->textureSize)/1024);
-
-	    xf86DrvMsg(iScreen, X_INFO, "Will use back buffer at offset 0x%x\n",
-		       pATIDRIServer->backOffset);
-
-	    xf86DrvMsg(iScreen, X_INFO, "Will use depth buffer at offset 0x%x\n",
-		       pATIDRIServer->depthOffset);
-
-	    if (pATIDRIServer->textureSize > 0) {
-		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-			   "Will use %d kB for local textures at offset 0x%x\n",
-			   pATIDRIServer->textureSize/1024,
-			   pATIDRIServer->textureOffset);
-	    }
-	}
-
-	return TRUE;
-}
-#endif /* XF86DRI_DEVEL */
-#endif /* USE_XAA */
-  	 
-/*
- * ATIScreenInit --
- *
- * This function is called by DIX to initialise the screen.
- */
-Bool
-ATIScreenInit
-(
-    int       iScreen,
-    ScreenPtr pScreen,
-    int       argc,
-    char      **argv
-)
-{
-    ScrnInfoPtr  pScreenInfo = xf86Screens[iScreen];
-    ATIPtr       pATI        = ATIPTR(pScreenInfo);
-    pointer      pFB;
-    int          VisualMask;
-
-    /* Set video hardware state */
-    if (!ATIEnterGraphics(pScreen, pScreenInfo, pATI))
-        return FALSE;
-
-    /* Re-initialise mi's visual list */
-    miClearVisualTypes();
-
-    if ((pATI->depth > 8) && (pATI->DAC == ATI_DAC_INTERNAL))
-        VisualMask = TrueColorMask;
-    else
-        VisualMask = miGetDefaultVisualMask(pATI->depth);
-
-    if (!miSetVisualTypes(pATI->depth, VisualMask, pATI->rgbBits,
-                          pScreenInfo->defaultVisual))
-        return FALSE;
-
-    if (!miSetPixmapDepths())
-        return FALSE;
-
-    pFB = pATI->pMemory;
-    pATI->FBPitch = PixmapBytePad(pATI->displayWidth, pATI->depth);
-    if (pATI->OptionShadowFB)
-    {
-        pATI->FBBytesPerPixel = pATI->bitsPerPixel >> 3;
-        pATI->FBPitch = PixmapBytePad(pATI->displayWidth, pATI->depth);
-        if ((pATI->pShadow = xalloc(pATI->FBPitch * pScreenInfo->virtualY)))
-        {
-            pFB = pATI->pShadow;
-        }
-        else
-        {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "Insufficient virtual memory for shadow frame buffer.\n");
-            pATI->OptionShadowFB = FALSE;
-        }
-    }
-
-#ifdef XF86DRI_DEVEL
-
-    /* Setup DRI after visuals have been established, but before
-     * fbScreenInit is called.  fbScreenInit will eventually call the
-     * driver's InitGLXVisuals call back.
-     */
-
-    /* According to atiregs.h, GTPro (3D Rage Pro) is the first chip type with
-     * 3D triangle setup (the VERTEX_* registers)
-     */
-    if (pATI->Chip < ATI_CHIP_264GTPRO) {
-	xf86DrvMsg(iScreen, X_WARNING,
-		   "Direct rendering is not supported for ATI chips earlier than "
-		   "the ATI 3D Rage Pro.\n");
-	pATI->directRenderingEnabled = FALSE;
-    } else {
-	/* FIXME: When we move to dynamic allocation of back and depth
-	 * buffers, we will want to revisit the following check for 3
-	 * times the virtual size (or 2.5 times for 24-bit depth) of the screen below.
-	 */
-	int cpp = pATI->bitsPerPixel >> 3;
-	int maxY = pScreenInfo->videoRam * 1024 / (pATI->displayWidth * cpp);
-	int requiredY;
-
-	requiredY = pScreenInfo->virtualY * 2     /* front, back buffers */
-	    + (pScreenInfo->virtualY * 2 / cpp);  /* depth buffer (always 16-bit) */
-
-	if (!pATI->OptionAccel) {
-	    xf86DrvMsg(iScreen, X_WARNING,
-		       "Acceleration disabled, not initializing the DRI\n");
-	    pATI->directRenderingEnabled = FALSE;
-	} else if ( maxY > requiredY ) {
-	    pATI->directRenderingEnabled = ATIDRIScreenInit(pScreen);
-	} else {
-	    xf86DrvMsg(iScreen, X_WARNING,
-		       "DRI static buffer allocation failed -- "
-		       "need at least %d kB video memory\n",
-		       (pScreenInfo->displayWidth * requiredY * cpp ) / 1024);
-	    pATI->directRenderingEnabled = FALSE;
-	}
-    }
-
-#endif /* XF86DRI_DEVEL */
-
-    /* Initialise framebuffer layer */
-    switch (pATI->bitsPerPixel)
-    {
-        case 8:
-        case 16:
-        case 24:
-        case 32:
-            pATI->Closeable = fbScreenInit(pScreen, pFB,
-                pScreenInfo->virtualX, pScreenInfo->virtualY,
-                pScreenInfo->xDpi, pScreenInfo->yDpi, pATI->displayWidth,
-                pATI->bitsPerPixel);
-            break;
-
-        default:
-            return FALSE;
-    }
-
-    if (!pATI->Closeable)
-        return FALSE;
-
-    /* Fixup RGB ordering */
-    if (pATI->depth > 8)
-    {
-        VisualPtr pVisual = pScreen->visuals + pScreen->numVisuals;
-
-        while (--pVisual >= pScreen->visuals)
-        {
-            if ((pVisual->class | DynamicClass) != DirectColor)
-                continue;
-
-            pVisual->offsetRed = pScreenInfo->offset.red;
-            pVisual->offsetGreen = pScreenInfo->offset.green;
-            pVisual->offsetBlue = pScreenInfo->offset.blue;
-
-            pVisual->redMask = pScreenInfo->mask.red;
-            pVisual->greenMask = pScreenInfo->mask.green;
-            pVisual->blueMask = pScreenInfo->mask.blue;
-        }
-    }
-
-    /* If applicable, initialise RENDER extension */
-    {
-        if (pATI->OptionShadowFB)
-        {
-            if (serverGeneration == 1)
-                xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                    "RENDER extension not supported with a shadowed"
-                    " framebuffer.\n");
-        }
-        else if (!fbPictureInit(pScreen, NULL, 0) &&
-                 (serverGeneration == 1))
-        {
-            xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING,
-                "RENDER extension initialisation failed.\n");
-        }
-    }
-
-    xf86SetBlackWhitePixels(pScreen);
-
-#ifdef USE_XAA
-
-    if (!pATI->useEXA) {
-
-    /* Memory manager setup */
-
-#ifdef XF86DRI_DEVEL
-    if (pATI->directRenderingEnabled)
-    {
-        if (!ATIMach64SetupMemXAA(iScreen, pScreen))
-            return FALSE;
-    }
-    else
-#endif /* XF86DRI_DEVEL */
-    {
-        if (!ATIMach64SetupMemXAA_NoDRI(iScreen, pScreen))
-            return FALSE;
-    }
-
-    /* Setup acceleration */
-
-    if (pATI->OptionAccel && !ATIMach64AccelInit(pScreen))
-        return FALSE;
-
-    }
-
-#endif /* USE_XAA */
-
-#ifdef USE_EXA
-
-    if (pATI->useEXA) {
-        /* EXA setups both memory manager and acceleration here */
-
-        if (pATI->OptionAccel && !ATIMach64ExaInit(pScreen))
-            return FALSE;
-    }
-
-#endif /* USE_EXA */
-
-#ifndef AVOID_DGA
-
-    /* Initialise DGA support */
-    (void)ATIDGAInit(pScreen, pScreenInfo, pATI);
-
-#endif /* AVOID_DGA */
-
-    /* Initialise backing store */
-    miInitializeBackingStore(pScreen);
-    xf86SetBackingStore(pScreen);
-
-    /* Initialise cursor */
-    if (!ATIMach64CursorInit(pScreen))
-        return FALSE;
-
-    /* Create default colourmap */
-    if (!miCreateDefColormap(pScreen))
-        return FALSE;
-
-    if (!xf86HandleColormaps(pScreen, 256, pATI->rgbBits, ATILoadPalette, NULL,
-                             CMAP_PALETTED_TRUECOLOR |
-                             CMAP_LOAD_EVEN_IF_OFFSCREEN))
-            return FALSE;
-
-    /* Initialise shadow framebuffer */
-    if (pATI->OptionShadowFB &&
-        !ShadowFBInit(pScreen, ATIRefreshArea))
-        return FALSE;
-
-    /* Initialise DPMS support */
-    (void)xf86DPMSInit(pScreen, ATISetDPMSMode, 0);
-
-    /* Initialise XVideo support */
-    (void)ATIInitializeXVideo(pScreen, pScreenInfo, pATI);
-
-    /* Set pScreen->SaveScreen and wrap CloseScreen vector */
-    pScreen->SaveScreen = ATISaveScreen;
-    pATI->CloseScreen = pScreen->CloseScreen;
-    pScreen->CloseScreen = ATICloseScreen;
-
-    if (serverGeneration == 1)
-        xf86ShowUnusedOptions(pScreenInfo->scrnIndex, pScreenInfo->options);
-
-#ifdef TV_OUT
-    /* Fix-up TV out after ImpacTV probe */
-    if (pATI->OptionTvOut && pATI->Chip < ATI_CHIP_264GTPRO)
-        ATISwitchMode(0, pScreenInfo->currentMode, 0);
-#endif /* TV_OUT */
-
-#ifdef XF86DRI_DEVEL
-
-    /* DRI finalization */
-    if (pATI->directRenderingEnabled) {
-	/* Now that mi, fb, drm and others have done their thing,
-	 * complete the DRI setup.
-	 */
-	pATI->directRenderingEnabled = ATIDRIFinishScreenInit(pScreen);
-    }
-    if (pATI->directRenderingEnabled) {
-	xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-		   "Direct rendering enabled\n");
-    } else {
-        /* FIXME: Release unused offscreen mem here? */
-	xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO,
-		   "Direct rendering disabled\n");
-    }
-
-#endif /* XF86DRI_DEVEL */
-
-    return TRUE;
-}
-
-/*
- * ATICloseScreen --
- *
- * This function is called by DIX to close the screen.
- */
-Bool
-ATICloseScreen
-(
-    int       iScreen,
-    ScreenPtr pScreen
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[iScreen];
-    ATIPtr      pATI        = ATIPTR(pScreenInfo);
-    Bool        Closed      = TRUE;
-
-#ifdef XF86DRI_DEVEL
-
-    /* Disable direct rendering */
-    if (pATI->directRenderingEnabled)
-    {
-	ATIDRICloseScreen(pScreen);
-	pATI->directRenderingEnabled = FALSE;
-    }
-
-#endif /* XF86DRI_DEVEL */
-
-    ATICloseXVideo(pScreen, pScreenInfo, pATI);
-
-#ifdef USE_EXA
-    if (pATI->pExa)
-    {
-        exaDriverFini(pScreen);
-        xfree(pATI->pExa);
-        pATI->pExa = NULL;
-    }
-#endif
-#ifdef USE_XAA
-    if (pATI->pXAAInfo)
-    {
-        XAADestroyInfoRec(pATI->pXAAInfo);
-        pATI->pXAAInfo = NULL;
-    }
-#endif
-
-    if ((pScreen->CloseScreen = pATI->CloseScreen))
-    {
-        pATI->CloseScreen = NULL;
-        Closed = (*pScreen->CloseScreen)(iScreen, pScreen);
-    }
-
-    pATI->Closeable = FALSE;
-
-    if (pATI->pCursorInfo)
-    {
-        xf86DestroyCursorInfoRec(pATI->pCursorInfo);
-        pATI->pCursorInfo = NULL;
-    }
-
-    ATILeaveGraphics(pScreenInfo, pATI);
-
-#ifdef USE_XAA
-    if (!pATI->useEXA)
-    {
-        xfree(pATI->ExpansionBitmapScanlinePtr[1]);
-        pATI->ExpansionBitmapScanlinePtr[0] = NULL;
-        pATI->ExpansionBitmapScanlinePtr[1] = NULL;
-    }
-#endif
-
-    xfree(pATI->pShadow);
-    pATI->pShadow = NULL;
-    pScreenInfo->pScreen = NULL;
-
-    return Closed;
-}
diff --git a/src/atiscreen.h b/src/atiscreen.h
deleted file mode 100644
index cf2b23d..0000000
--- a/src/atiscreen.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 1999 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATISCREEN_H___
-#define ___ATISCREEN_H___ 1
-
-#include "screenint.h"
-
-extern Bool ATIScreenInit(int, ScreenPtr, int, char **);
-extern Bool ATICloseScreen(int, ScreenPtr);
-
-#endif /* ___ATISCREEN_H___ */
diff --git a/src/atistruct.h b/src/atistruct.h
deleted file mode 100644
index b9f4d08..0000000
--- a/src/atistruct.h
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
- * Copyright 1999 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * DRI support by:
- *    Gareth Hughes <gareth at valinux.com>
- *    Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifndef ___ATISTRUCT_H___
-#define ___ATISTRUCT_H___ 1
-
-#include "atibank.h"
-#include "aticlock.h"
-#include "atiregs.h"
-
-#ifdef XF86DRI_DEVEL
-
-/*
- * DRI support
- */
-#define _XF86DRI_SERVER_
-#include "atidripriv.h"
-#include "mach64_dri.h"
-#include "sarea.h"
-#include "xf86drm.h"
-#include "dri.h"
- 
-#endif /* XF86DRI_DEVEL */
-
-#ifdef TV_OUT
-
-#include "vbe.h"
-
-#endif /* TV_OUT */
-
-#ifdef USE_EXA
-#include "exa.h"
-#endif
-#ifdef USE_XAA
-#include "xaa.h"
-#endif
-#include "xf86Cursor.h"
-#include "xf86Pci.h"
-#include "xf86Resources.h"
-
-#include "atipcirename.h"
-
-#define CacheSlotOf(____Register) ((____Register) / UnitOf(DWORD_SELECT))
-
-/*
- * This is probably as good a place as any to put this note, as it applies to
- * the entire driver, but especially here.  CARD8's are used rather than the
- * appropriate enum types because the latter would nearly quadruple storage
- * requirements (they are stored as int's).  This reduces the usefulness of
- * enum types to their ability to declare index values.  I've also elected to
- * forgo the strong typing capabilities of enum types.  C is not terribly adept
- * at strong typing anyway.
- */
-
-/* A structure for local data related to video modes */
-typedef struct _ATIHWRec
-{
-    /* Clock number for mode */
-    CARD8 clock;
-
-    /* The CRTC used to drive the screen (VGA, 8514, Mach64) */
-    CARD8 crtc;
-
-    /* Colour lookup table */
-    CARD8 lut[256 * 3];
-
-#ifndef AVOID_CPIO
-
-    /* VGA registers */
-    CARD8 genmo, crt[25], seq[5], gra[9], attr[21];
-
-    /* VGA Wonder registers */
-    CARD8             a3,         a6, a7,             ab, ac, ad, ae,
-          b0, b1, b2, b3,     b5, b6,     b8, b9, ba,         bd, be, bf;
-
-    /* Shadow VGA CRTC registers */
-    CARD8 shadow_vga[25];
-
-#endif /* AVOID_CPIO */
-
-    /* Generic DAC registers */
-    CARD8 dac_read, dac_write, dac_mask;
-
-    /* IBM RGB 514 registers */
-    CARD8 ibmrgb514[0x0092U];   /* All that's needed for now */
-
-    /* Mach64 PLL registers */
-    CARD8 pll_vclk_cntl, pll_vclk_post_div,
-          pll_vclk0_fb_div, pll_vclk1_fb_div,
-          pll_vclk2_fb_div, pll_vclk3_fb_div,
-          pll_xclk_cntl, pll_ext_vpll_cntl;
-
-    /* Mach64 CPIO registers */
-    CARD32 crtc_h_total_disp, crtc_h_sync_strt_wid,
-           crtc_v_total_disp, crtc_v_sync_strt_wid,
-           crtc_off_pitch, crtc_gen_cntl, dsp_config, dsp_on_off, mem_buf_cntl,
-           ovr_clr, ovr_wid_left_right, ovr_wid_top_bottom,
-           cur_clr0, cur_clr1, cur_offset,
-           cur_horz_vert_posn, cur_horz_vert_off,
-           clock_cntl, bus_cntl, mem_cntl, mem_vga_wp_sel, mem_vga_rp_sel,
-           dac_cntl, gen_test_cntl, config_cntl, mpp_config, mpp_strobe_seq,
-           tvo_cntl;
-
-    /* LCD registers */
-    CARD32 lcd_index, config_panel, lcd_gen_ctrl,
-           horz_stretching, vert_stretching, ext_vert_stretch;
-
-    /* Shadow Mach64 CRTC registers */
-    CARD32 shadow_h_total_disp, shadow_h_sync_strt_wid,
-           shadow_v_total_disp, shadow_v_sync_strt_wid;
-
-    /* Mach64 MMIO Block 0 registers and related subfields */
-    CARD32 dst_off_pitch;
-    CARD16 dst_x, dst_y, dst_height;
-    CARD32 dst_bres_err, dst_bres_inc, dst_bres_dec, dst_cntl;
-    CARD32 src_off_pitch;
-    CARD16 src_x, src_y, src_width1, src_height1,
-           src_x_start, src_y_start, src_width2, src_height2;
-    CARD32 src_cntl;
-    CARD32 host_cntl;
-    CARD32 pat_reg0, pat_reg1, pat_cntl;
-    CARD16 sc_left, sc_right, sc_top, sc_bottom;
-    CARD32 dp_bkgd_clr, dp_frgd_clr, dp_write_mask, dp_chain_mask,
-           dp_pix_width, dp_mix, dp_src;
-    CARD32 clr_cmp_clr, clr_cmp_msk, clr_cmp_cntl;
-    CARD32 context_mask, context_load_cntl;
-
-    CARD32 scale_3d_cntl, tex_size_pitch, tex_cntl, tex_offset;
-
-    /* Mach64 MMIO Block 1 registers */
-    CARD32 overlay_y_x_start, overlay_y_x_end, overlay_graphics_key_clr,
-           overlay_graphics_key_msk, overlay_key_cntl, overlay_scale_inc,
-           overlay_scale_cntl, scaler_height_width, scaler_test,
-           scaler_buf0_offset, scaler_buf1_offset, scaler_buf_pitch,
-           video_format, overlay_exclusive_horz, overlay_exclusive_vert,
-           buf0_offset, buf0_pitch, buf1_offset, buf1_pitch,
-           scaler_colour_cntl, scaler_h_coeff0, scaler_h_coeff1,
-           scaler_h_coeff2, scaler_h_coeff3, scaler_h_coeff4, gui_cntl,
-           scaler_buf0_offset_u, scaler_buf0_offset_v, scaler_buf1_offset_u,
-           scaler_buf1_offset_v;
-
-    /* Clock programming data */
-    int FeedbackDivider, ReferenceDivider, PostDivider;
-
-#ifndef AVOID_CPIO
-
-    /* This is used by ATISwap() */
-    pointer frame_buffer;
-    ATIBankProcPtr SetBank;
-    unsigned int nBank, nPlane;
-
-#endif /* AVOID_CPIO */
-
-} ATIHWRec;
-
-#ifdef USE_EXA
-/*
- * Card engine state for communication across RENDER acceleration hooks.
- */
-typedef struct _Mach64ContextRegs3D
-{
-    CARD32	dp_mix;
-    CARD32	dp_src;
-    CARD32	dp_write_mask;
-    CARD32	dp_pix_width;
-    CARD32	dst_pitch_offset;
-
-    CARD32	scale_3d_cntl;
-
-    CARD32	tex_cntl;
-    CARD32	tex_size_pitch;
-    CARD32	tex_offset;
-
-    int		tex_width;	/* src/mask texture width (pixels) */
-    int		tex_height;	/* src/mask texture height (pixels) */
-
-    Bool	frag_src;	/* solid src uses fragment color */
-    Bool	frag_mask;	/* solid mask uses fragment color */
-    CARD32	frag_color;	/* solid src/mask color */
-
-    Bool	color_alpha;	/* the alpha value is contained in the color
-				   channels instead of the alpha channel */
-
-    PictTransform *transform;
-} Mach64ContextRegs3D;
-#endif /* USE_EXA */
-
-/*
- * This structure defines the driver's private area.
- */
-typedef struct _ATIRec
-{
-
-#ifndef AVOID_CPIO
-
-    CARD8 VGAAdapter;
-
-#endif /* AVOID_CPIO */
-
-    /*
-     * Chip-related definitions.
-     */
-    CARD32 config_chip_id;
-    CARD16 ChipType;
-    CARD8 Chip;
-    CARD8 ChipClass, ChipRevision, ChipRev, ChipVersion, ChipFoundry;
-
-    /*
-     * Processor I/O decoding definitions.
-     */
-    CARD8 CPIODecoding;
-    IOADDRESS CPIOBase;
-
-#ifndef AVOID_CPIO
-
-    /*
-     * Processor I/O port definition for VGA.
-     */
-    IOADDRESS CPIO_VGABase;
-
-    /*
-     * Processor I/O port definitions for VGA Wonder.
-     */
-    IOADDRESS CPIO_VGAWonder;
-
-#endif /* AVOID_CPIO */
-
-    /*
-     * DAC-related definitions.
-     */
-
-#ifndef AVOID_CPIO
-
-    IOADDRESS CPIO_DAC_MASK, CPIO_DAC_DATA, CPIO_DAC_READ, CPIO_DAC_WRITE,
-              CPIO_DAC_WAIT;
-
-#endif /* AVOID_CPIO */
-
-    CARD16 DAC;
-    CARD8 rgbBits;
-
-    /*
-     * Definitions related to system bus interface.
-     */
-    pciVideoPtr PCIInfo;
-    CARD8 BusType;
-
-#ifndef AVOID_CPIO
-
-    resRange VGAWonderResources[2];
-
-#endif /* AVOID_CPIO */
-
-    /*
-     * Definitions related to video memory.
-     */
-    CARD8 MemoryType;
-    int VideoRAM;
-
-    /*
-     * BIOS-related definitions.
-     */
-    CARD8 I2CType, Tuner, Decoder, Audio;
-
-    /*
-     * Definitions related to video memory apertures.
-     */
-    pointer pMemory, pShadow;
-    pointer pMemoryLE;          /* Always little-endian */
-    unsigned long LinearBase;
-    int LinearSize, FBPitch, FBBytesPerPixel;
-
-#ifndef AVOID_CPIO
-
-    /*
-     * Banking interface.
-     */
-    pointer pBank;
-
-#endif /* AVOID_CPIO */
-
-    /*
-     * Definitions related to MMIO register apertures.
-     */
-    pointer pMMIO, pBlock[2];
-    unsigned long Block0Base, Block1Base;
-
-    /*
-     * XAA interface.
-     */
-    Bool useEXA;
-#ifdef USE_EXA
-    ExaDriverPtr pExa;
-#endif
-#ifdef USE_XAA
-    XAAInfoRecPtr pXAAInfo;
-#endif
-    int nAvailableFIFOEntries, nFIFOEntries, nHostFIFOEntries;
-    CARD8 EngineIsBusy, EngineIsLocked, XModifier;
-    CARD32 dst_cntl;    /* For SetupFor/Subsequent communication */
-    CARD32 sc_left_right, sc_top_bottom;
-    CARD16 sc_left, sc_right, sc_top, sc_bottom;        /* Current scissors */
-    pointer pHOST_DATA; /* Current HOST_DATA_* transfer window address */
-#ifdef USE_XAA
-    CARD32 *ExpansionBitmapScanlinePtr[2];
-    int ExpansionBitmapWidth;
-#endif
-#ifdef USE_EXA
-    Bool RenderAccelEnabled;
-    Mach64ContextRegs3D m3d;
-#endif
-
-    /*
-     * Cursor-related definitions.
-     */
-    xf86CursorInfoPtr pCursorInfo;
-    pointer pCursorPage, pCursorImage;
-    unsigned long CursorBase;
-    CARD32 CursorOffset;
-    CARD16 CursorXOffset, CursorYOffset;
-    CARD8 Cursor;
-
-    /*
-     * MMIO cache.
-     */
-    CARD32 MMIOCache[CacheSlotOf(DWORD_SELECT) + 1];
-    CARD8  MMIOCached[(CacheSlotOf(DWORD_SELECT) + 8) >> 3];
-
-    /*
-     * Clock-related definitions.
-     */
-    int refclk;
-    int ClockNumberToProgramme, ReferenceNumerator, ReferenceDenominator;
-    int ProgrammableClock, maxClock;
-    ClockRec ClockDescriptor;
-
-    /*
-     * DSP register data.
-     */
-    int XCLKFeedbackDivider, XCLKReferenceDivider, XCLKPostDivider;
-    CARD16 XCLKMaxRASDelay, XCLKPageFaultDelay,
-           DisplayLoopLatency, DisplayFIFODepth;
-
-    /*
-     * LCD panel data.
-     */
-    int LCDPanelID, LCDClock, LCDHorizontal, LCDVertical;
-    unsigned LCDHSyncStart, LCDHSyncWidth, LCDHBlankWidth;
-    unsigned LCDVSyncStart, LCDVSyncWidth, LCDVBlankWidth;
-    int LCDVBlendFIFOSize;
-
-    /*
-     * Data used by ATIAdjustFrame().
-     */
-    int AdjustDepth, AdjustMaxX, AdjustMaxY;
-    unsigned long AdjustMask, AdjustMaxBase;
-
-    /*
-     * DGA and non-DGA common data.
-     */
-    DisplayModePtr currentMode;
-    CARD8 depth, bitsPerPixel;
-    short int displayWidth;
-    rgb weight;
-
-#ifndef AVOID_DGA
-
-    /*
-     * DGA-related data.
-     */
-    DGAModePtr pDGAMode;
-    DGAFunctionRec ATIDGAFunctions;
-    int nDGAMode;
-
-    /*
-     * XAAForceTransBlit alters the behavior of 'SetupForScreenToScreenCopy',
-     * such that ~0 is interpreted as a legitimate transparency key.
-     */
-    CARD8 XAAForceTransBlit;
-
-#endif /* AVOID_DGA */
-
-    /*
-     * XVideo-related data.
-     */
-    DevUnion XVPortPrivate[1];
-    pointer pXVBuffer;		/* USE_EXA: ExaOffscreenArea*
-				   USE_XAA: FBLinearPtr */
-    RegionRec VideoClip;
-    int SurfacePitch, SurfaceOffset;
-    CARD8 AutoPaint, DoubleBuffer, CurrentBuffer, ActiveSurface;
-
-    /*
-     * Data saved by ATIUnlock() and restored by ATILock().
-     */
-    struct
-    {
-        /* Mach64 registers */
-        CARD32 crtc_int_cntl, crtc_gen_cntl, i2c_cntl_0, hw_debug,
-               scratch_reg3, bus_cntl, lcd_index, mem_cntl, i2c_cntl_1,
-               dac_cntl, gen_test_cntl, mpp_config, mpp_strobe_seq, tvo_cntl;
-
-#ifndef AVOID_CPIO
-
-        CARD32 config_cntl;
-
-        /* VGA Wonder registers */
-        CARD8 a6, ab, b1, b4, b5, b6, b8, b9, be;
-
-        /* VGA registers */
-        CARD8 crt03, crt11;
-
-        /* VGA shadow registers */
-        CARD8 shadow_crt03, shadow_crt11;
-
-#endif /* AVOID_CPIO */
-
-    } LockData;
-
-    /* Mode data */
-    ATIHWRec OldHW, NewHW;
-
-    /*
-     * Resource Access Control entity index.
-     */
-    int iEntity;
-
-    /*
-     * Driver options.
-     */
-    unsigned int OptionProbeSparse:1;  /* Force probe for fixed (sparse) I/O */
-    unsigned int OptionAccel:1;        /* Use hardware draw engine */
-    unsigned int OptionBIOSDisplay:1;  /* Allow BIOS interference */
-    unsigned int OptionBlend:1;        /* Force horizontal blending */
-    unsigned int OptionCRTDisplay:1;   /* Display on both CRT & DFP */
-    unsigned int OptionCSync:1;        /* Use composite sync */
-    unsigned int OptionDevel:1;        /* Intentionally undocumented */
-
-#ifdef TV_OUT
-
-    CARD8 OptionTvOut;          /* Enable TV out if TV is connected */
-    CARD8 OptionTvStd;          /* Requested TV standard - see ATITVStandard enum in atioption.h */
-
-#endif /* TV_OUT */
-
-    unsigned int OptionMMIOCache:1;    /* Cache MMIO writes */
-    unsigned int OptionTestMMIOCache:1;/* Test MMIO cache integrity */
-    unsigned int OptionPanelDisplay:1; /* Prefer digital panel over CRT */
-    unsigned int OptionShadowFB:1;     /* Use shadow frame buffer */
-    unsigned int OptionLCDSync:1;      /* Temporary */
-
-    /*
-     * State flags.
-     */
-    CARD8 Unlocked, Mapped, Closeable;
-    CARD8 MMIOInLinear;
-
-    /*
-     * Wrapped functions.
-     */
-    CloseScreenProcPtr CloseScreen;
-
-#ifdef XF86DRI_DEVEL
-
-    /*
-     * DRI data.
-     */
-    int directRenderingEnabled;
-    DRIInfoPtr pDRIInfo;
-    int drmFD;
-    int irq;
-    int numVisualConfigs;
-    __GLXvisualConfig *pVisualConfigs;
-    ATIConfigPrivPtr pVisualConfigsPriv;
-    ATIDRIServerInfoPtr pDRIServerInfo;
-    Bool NeedDRISync;
-    Bool have3DWindows;
-                                                                                
-    /* offscreen memory management */
-#ifdef USE_XAA
-    int               backLines;
-    FBAreaPtr         backArea;
-    int               depthTexLines;
-    FBAreaPtr         depthTexArea;
-#endif
-    CARD8 OptionIsPCI;           /* Force PCI mode */
-    CARD8 OptionDMAMode;         /* async, sync, mmio */
-    CARD8 OptionAGPMode;         /* AGP mode */
-    CARD8 OptionAGPSize;         /* AGP size in MB */
-    CARD8 OptionLocalTextures;   /* Use local textures + AGP textures (only valid for AGP) */
-    CARD8 OptionBufferSize;      /* Command/dma buffer size in MB */
-
-#endif /* XF86DRI_DEVEL */
-
-#ifdef TV_OUT
-    /* TV out */
-    vbeInfoPtr pVBE;
-    xf86Int10InfoPtr pInt10;
-    int vbemode; /* saved text mode */
-    Bool tvActive;
-#endif /* TV_OUT */
-} ATIRec;
-
-#define ATIPTR(_p) ((ATIPtr)((_p)->driverPrivate))
-
-#endif /* ___ATISTRUCT_H___ */
diff --git a/src/atituner.c b/src/atituner.c
deleted file mode 100644
index df2cdc5..0000000
--- a/src/atituner.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright 2003 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "atituner.h"
-
-/* Temporary interface glitch */
-#if 0
-# include "fi12x6.h"
-#else
-    typedef enum {
-        FI12x6_TYPE_UNKNOWN = -1,
-        FI12x6_TYPE_FI1236 = 0,
-        FI12x6_TYPE_FI1216,
-        FI12x6_TYPE_FI1216MF,
-        FI12x6_TYPE_TEMIC_FN5AL,
-        FI12x6_TYPE_MT2032,
-        FI12x6_TYPE_MAX             /* Must be last */
-    } FI12x6TunerType;
-#endif
-
-/*
- * TV tuner definitions.
- */
-const SymTabRec ATITuners[] =
-{
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "No tuner"
-    },
-    {
-        FI12x6_TYPE_FI1236,
-        "Philips FI1236 MK1 NTSC M/N North America"
-    },
-    {
-        FI12x6_TYPE_FI1236,
-        "Philips FI1236 MK2 NTSC M/N Japan"
-    },
-    {
-        FI12x6_TYPE_FI1216,
-        "Philips FI1216 MK2 PAL B/G"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Philips FI1246 MK2 PAL I"
-    },
-    {
-        FI12x6_TYPE_FI1216MF,
-        "Philips FI1216 MF MK2 PAL B/G, SECAM L/L"
-    },
-    {
-        FI12x6_TYPE_FI1236,
-        "Philips FI1236 MK2 NTSC M/N North America"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Philips FI1256 MK2 SECAM D/K"
-    },
-    {
-        FI12x6_TYPE_FI1236,
-        "Philips FM1236 MK2 NTSC M/N North America"
-    },
-    {
-        FI12x6_TYPE_FI1216,
-        "Philips FI1216 MK2 PAL B/G - External Tuner POD"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Philips FI1246 MK2 PAL I - External Tuner POD"
-    },
-    {
-        FI12x6_TYPE_FI1216MF,
-        "Philips FI1216 MF MK2 PAL B/G, SECAM L/L - External Tuner POD"
-    },
-    {
-        FI12x6_TYPE_FI1236,
-        "Philips FI1236 MK2 NTSC M/N North America - External Tuner POD"
-    },
-    {
-        FI12x6_TYPE_TEMIC_FN5AL,
-        "Temic FN5AL.RF3X7595 PAL I/B/G/DK & SECAM DK"
-    },
-    {
-        FI12x6_TYPE_FI1216MF,
-        "Philips FQ1216 ME/P"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (15)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Alps TSBH5 NTSC M/N North America"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Alps TSC?? NTSC M/N North America"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Alps TSCH5 NTSC M/N North America with FM"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (19)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (20)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (21)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (22)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (23)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (24)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (25)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (26)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (27)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (28)"
-    },
-    {
-        FI12x6_TYPE_MT2032,
-        "Microtune MT2032"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (30)"
-    },
-    {
-        FI12x6_TYPE_UNKNOWN,
-        "Unknown type (31)"
-    }
-};
diff --git a/src/atituner.h b/src/atituner.h
deleted file mode 100644
index dc4f016..0000000
--- a/src/atituner.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2003 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATITUNER_H___
-#define ___ATITUNER_H___ 1
-
-#include "xf86str.h"
-
-/*
- * TV Tuner definitions.  Most of these are from Philips.
- */
-typedef enum
-{
-    ATI_TUNER_NONE,
-    ATI_TUNER_FI1236MK1NA,
-    ATI_TUNER_FI1236MK2J,
-    ATI_TUNER_FI1216MK2BG,
-    ATI_TUNER_FI1246MK2I,
-    ATI_TUNER_FI1216MFMK2,
-    ATI_TUNER_FI1236MK2NA,
-    ATI_TUNER_FI1256MK2DK,
-    ATI_TUNER_FM1236MK2NA,
-    ATI_TUNER_FI1216MK2BGEXT,
-    ATI_TUNER_FI1246MK2IEXT,
-    ATI_TUNER_FI1216MFMK2EXT,
-    ATI_TUNER_FI1236MK2NAEXT,
-    ATI_TUNER_TEMIC_FN5AL,
-    ATI_TUNER_FQ1216MEP,
-    ATI_TUNER_15,
-    ATI_TUNER_ALPS_TSBH5,
-    ATI_TUNER_ALPS_TSCXX,
-    ATI_TUNER_ALPS_TSCH5,
-    ATI_TUNER_19,
-    ATI_TUNER_20,
-    ATI_TUNER_21,
-    ATI_TUNER_22,
-    ATI_TUNER_23,
-    ATI_TUNER_24,
-    ATI_TUNER_25,
-    ATI_TUNER_26,
-    ATI_TUNER_27,
-    ATI_TUNER_28,
-    ATI_TUNER_MT2032,
-    ATI_TUNER_30,
-    ATI_TUNER_31
-} ATITunerType;
-
-extern const SymTabRec ATITuners[];
-
-#endif /* ___ATITUNER_H___ */
diff --git a/src/atiutil.c b/src/atiutil.c
deleted file mode 100644
index 06e0cdb..0000000
--- a/src/atiutil.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "atiutil.h"
-
-/*
- * ATIReduceRatio --
- *
- * Reduce a fraction by factoring out the largest common divider of the
- * fraction's numerator and denominator.
- */
-void
-ATIReduceRatio
-(
-    int *Numerator,
-    int *Denominator
-)
-{
-    int Multiplier, Divider, Remainder;
-
-    Multiplier = *Numerator;
-    Divider = *Denominator;
-
-    while ((Remainder = Multiplier % Divider))
-    {
-        Multiplier = Divider;
-        Divider = Remainder;
-    }
-
-    *Numerator /= Divider;
-    *Denominator /= Divider;
-}
-
-/*
- * ATIDivide --
- *
- * Using integer arithmetic and avoiding overflows, this function finds the
- * rounded integer that best approximates
- *
- *         Numerator      Shift
- *        ----------- * 2
- *        Denominator
- *
- * using the specified rounding (floor (<0), nearest (=0) or ceiling (>0)).
- */
-int
-ATIDivide
-(
-    int       Numerator,
-    int       Denominator,
-    int       Shift,
-    const int RoundingKind
-)
-{
-    int Rounding = 0;                           /* Default to floor */
-
-#define MaxInt ((int)((unsigned int)(-1) >> 2))
-
-    ATIReduceRatio(&Numerator, &Denominator);
-
-    /* Deal with left shifts but try to keep the denominator even */
-    if (Denominator & 1)
-    {
-        if (Denominator <= MaxInt)
-        {
-            Denominator <<= 1;
-            Shift++;
-        }
-    }
-    else while ((Shift > 0) && !(Denominator & 3))
-    {
-        Denominator >>= 1;
-        Shift--;
-    }
-
-    /* Deal with right shifts */
-    while (Shift < 0)
-    {
-        if ((Numerator & 1) && (Denominator <= MaxInt))
-            Denominator <<= 1;
-        else
-            Numerator >>= 1;
-
-        Shift++;
-    }
-
-    if (!RoundingKind)                          /* Nearest */
-        Rounding = Denominator >> 1;
-    else if (RoundingKind > 0)                  /* Ceiling */
-        Rounding = Denominator - 1;
-
-    return ((Numerator / Denominator) << Shift) +
-            ((((Numerator % Denominator) << Shift) + Rounding) / Denominator);
-}
diff --git a/src/atiutil.h b/src/atiutil.h
deleted file mode 100644
index caa4b70..0000000
--- a/src/atiutil.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIUTIL_H___
-#define ___ATIUTIL_H___ 1
-
-/*
- * Prevent the C standard's insistence on unsigned long sizeof's from causing
- * counter-intuitive results.
- */
-#define SizeOf(_object) ((int)sizeof(_object))
-#define NumberOf(_what) (SizeOf(_what) / SizeOf(_what[0]))
-
-#define __ONE_MICROSECOND__ 100         /* This'll need calibration */
-
-#define ATIDelay(_microseconds)                            \
-    {                                                      \
-        unsigned int _i, _j;                               \
-        for (_i = 0;  _i < _microseconds;  _i++)           \
-            for (_j = 0;  _j < __ONE_MICROSECOND__;  _j++) \
-                /* Nothing */;                             \
-    }
-
-/*
- * Macros to get/set a contiguous bit field.  Arguments should not be
- * self-modifying.
- */
-#define UnitOf(___Value)                                \
-        (((((___Value) ^ ((___Value) - 1)) + 1) >> 1) | \
-         ((((___Value) ^ ((___Value) - 1)) >> 1) + 1))
-
-#define GetBits(__Value, _Mask) (((__Value) & (_Mask)) / UnitOf(_Mask))
-#define SetBits(__Value, _Mask) (((__Value) * UnitOf(_Mask)) & (_Mask))
-
-#define MaxBits(__Mask)         GetBits(__Mask, __Mask)
-
-#define _ByteMask(__Byte)       ((CARD8)(-1) << (8 * (__Byte)))
-#define GetByte(_Value, _Byte)  GetBits(_Value, _ByteMask(_Byte))
-#define SetByte(_Value, _Byte)  SetBits(_Value, _ByteMask(_Byte))
-
-#define _WordMask(__Word)       ((CARD16)(-1) << (16 * (__Word)))
-#define GetWord(_Value, _Word)  GetBits(_Value, _WordMask(_Word))
-#define SetWord(_Value, _Word)  SetBits(_Value, _WordMask(_Word))
-
-extern void ATIReduceRatio(int *, int *);
-extern int  ATIDivide(int, int, int, const int);
-
-#endif /* ___ATIUTIL_H___ */
diff --git a/src/ativalid.c b/src/ativalid.c
deleted file mode 100644
index 51cf5ae..0000000
--- a/src/ativalid.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "atichip.h"
-#include "atistruct.h"
-#include "ativalid.h"
-
-#include "xf86.h"
-
-/*
- * ATIValidMode --
- *
- * This checks for hardware-related limits on mode timings.
- */
-ModeStatus
-ATIValidMode
-(
-    int iScreen,
-    DisplayModePtr pMode,
-    Bool Verbose,
-    int flags
-)
-{
-    ScrnInfoPtr pScreenInfo = xf86Screens[iScreen];
-    ATIPtr      pATI        = ATIPTR(pScreenInfo);
-    int         HBlankWidth, HAdjust, VScan, VInterlace;
-
-    if (flags & MODECHECK_FINAL)
-    {
-        return MODE_OK;
-    }
-
-    /*
-     * The following is done for every mode in the monitor section that
-     * survives the common layer's basic checks.
-     */
-    if (pMode->VScan <= 1)
-        VScan = 1;
-    else
-        VScan = pMode->VScan;
-
-    if (pMode->Flags & V_DBLSCAN)
-        VScan <<= 1;
-
-    if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))
-    {
-        if ((pMode->CrtcHDisplay > pATI->LCDHorizontal) ||
-            (pMode->CrtcVDisplay > pATI->LCDVertical))
-            return MODE_PANEL;
-
-        if (!pATI->OptionLCDSync || (pMode->type & M_T_BUILTIN))
-        {
-            if ((pMode->HDisplay > pATI->LCDHorizontal) ||
-                (pMode->VDisplay > pATI->LCDVertical))
-                return MODE_PANEL;
-
-            return MODE_OK;
-        }
-
-        /*
-         * Adjust effective timings for monitor checks.  Here the modeline
-         * clock is ignored.  Horizontal timings are scaled by the stretch
-         * ratio used for the displayed area.  The vertical porch is scaled by
-         * the native resolution's aspect ratio.  This seems rather arbitrary,
-         * and it is, but it does make all applicable VESA modes sync on a
-         * panel after stretching.  This has the unfortunate, but necessary,
-         * side-effect of changing the mode's horizontal sync and vertical
-         * refresh rates.  With some exceptions, this tends to increase the
-         * mode's horizontal sync rate, and decrease its vertical refresh rate.
-         */
-        pMode->SynthClock = pATI->LCDClock;
-
-        pMode->CrtcHTotal = pMode->CrtcHBlankEnd =
-            ATIDivide(pMode->CrtcHTotal * pATI->LCDHorizontal,
-                pMode->CrtcHDisplay, -3, 1) << 3;
-        pMode->CrtcHSyncEnd =
-            ATIDivide(pMode->CrtcHSyncEnd * pATI->LCDHorizontal,
-                pMode->CrtcHDisplay, -3, 1) << 3;
-        pMode->CrtcHSyncStart =
-            ATIDivide(pMode->CrtcHSyncStart * pATI->LCDHorizontal,
-                pMode->CrtcHDisplay, -3, -1) << 3;
-        pMode->CrtcHDisplay = pMode->CrtcHBlankStart = pATI->LCDHorizontal;
-
-        pMode->CrtcVTotal = pMode->CrtcVBlankEnd =
-            ATIDivide((pMode->CrtcVTotal - pMode->CrtcVDisplay) *
-                pATI->LCDVertical, pATI->LCDHorizontal, 0, 1) +
-                pATI->LCDVertical;
-        pMode->CrtcVSyncEnd =
-            ATIDivide((pMode->CrtcVSyncEnd - pMode->CrtcVDisplay) *
-                pATI->LCDVertical, pATI->LCDHorizontal, 0, 1) +
-                pATI->LCDVertical;
-        pMode->CrtcVSyncStart =
-            ATIDivide((pMode->CrtcVSyncStart - pMode->CrtcVDisplay) *
-                pATI->LCDVertical, pATI->LCDHorizontal, 0, -1) +
-                pATI->LCDVertical;
-        pMode->CrtcVDisplay = pMode->CrtcVBlankStart = pATI->LCDVertical;
-
-        /*
-         * The CRTC only stretches the mode's displayed area, not its porches.
-         * Reverse-engineer the mode's timings back into the user specified
-         * values so that the stretched mode is produced when the CRTC is
-         * eventually programmed.  The reverse-engineered mode is then checked
-         * against CRTC limits below.
-         */
-        pMode->Clock = pATI->LCDClock;
-
-        HAdjust = pATI->LCDHorizontal - pMode->HDisplay;
-#       define ATIReverseHorizontal(_x) \
-            (pMode->_x - HAdjust)
-
-        pMode->HSyncStart = ATIReverseHorizontal(CrtcHSyncStart);
-        pMode->HSyncEnd = ATIReverseHorizontal(CrtcHSyncEnd);
-        pMode->HTotal = ATIReverseHorizontal(CrtcHTotal);
-
-        VInterlace = GetBits(pMode->Flags, V_INTERLACE) + 1;
-#       define ATIReverseVertical(_y) \
-            ((((pMode->_y - pATI->LCDVertical) * VInterlace) / VScan) + \
-             pMode->VDisplay)
-
-        pMode->VSyncStart = ATIReverseVertical(CrtcVSyncStart);
-        pMode->VSyncEnd = ATIReverseVertical(CrtcVSyncEnd);
-        pMode->VTotal = ATIReverseVertical(CrtcVTotal);
-
-#       undef ATIReverseHorizontal
-#       undef ATIReverseVertical
-    }
-
-    HBlankWidth = (pMode->HTotal >> 3) - (pMode->HDisplay >> 3);
-    if (!HBlankWidth)
-        return MODE_HBLANK_NARROW;
-
-    {
-            if (VScan > 2)
-                return MODE_NO_VSCAN;
-    }
-
-    return MODE_OK;
-}
diff --git a/src/ativalid.h b/src/ativalid.h
deleted file mode 100644
index 608e1b5..0000000
--- a/src/ativalid.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIVALID_H___
-#define ___ATIVALID_H___ 1
-
-#include "xf86str.h"
-
-extern ModeStatus ATIValidMode(int, DisplayModePtr, Bool, int);
-
-#endif /* ___ATIVALID_H___ */
diff --git a/src/ativga.c b/src/ativga.c
deleted file mode 100644
index 8f4b0da..0000000
--- a/src/ativga.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atichip.h"
-#include "atistruct.h"
-#include "ativga.h"
-#include "ativgaio.h"
-
-#ifndef AVOID_CPIO
-
-/*
- * ATIVGAPreInit --
- *
- * This function is called to set up VGA-related data that is common to all
- * video modes generated by the driver.
- */
-void
-ATIVGAPreInit
-(
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    int Index;
-
-    /* Initialise sequencer register values */
-    pATIHW->seq[0] = 0x03U;
-        pATIHW->seq[2] = 0x0FU;
-        pATIHW->seq[4] = 0x0AU;
-
-    /* Initialise CRTC register values */
-    if (((pATI->Chip >= ATI_CHIP_264CT)))
-        pATIHW->crt[19] = pATI->displayWidth >> 3;
-    else
-        pATIHW->crt[19] = pATI->displayWidth >> 4;
-
-        pATIHW->crt[23] = 0xE3U;
-    pATIHW->crt[24] = 0xFFU;
-
-    /* Initialise attribute controller register values */
-    {
-        for (Index = 0;  Index < 16;  Index++)
-            pATIHW->attr[Index] = Index;
-
-            pATIHW->attr[16] = 0x01U;
-        pATIHW->attr[17] = 0xFFU;
-    }
-    pATIHW->attr[18] = 0x0FU;
-
-    /* Initialise graphics controller register values */
-    if (pATI->Chip >= ATI_CHIP_264CT)
-        pATIHW->gra[5] = 0x40U;
-    if (pATI->Chip >= ATI_CHIP_264VT)
-        pATIHW->gra[6] = 0x01U;         /* 128kB aperture */
-    else
-        pATIHW->gra[6] = 0x05U;         /* 64kB aperture */
-    pATIHW->gra[7] = 0x0FU;
-    pATIHW->gra[8] = 0xFFU;
-}
-
-/*
- * ATIVGASave --
- *
- * This function is called to save the VGA portion of the current video state.
- */
-void
-ATIVGASave
-(
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    int Index;
-
-    /* Save miscellaneous output register */
-    pATIHW->genmo = inb(R_GENMO);
-    ATISetVGAIOBase(pATI, pATIHW->genmo);
-
-    /* Save sequencer registers */
-    for (Index = 0;  Index < NumberOf(pATIHW->seq);  Index++)
-        pATIHW->seq[Index] = GetReg(SEQX, Index);
-
-    /* Save CRTC registers */
-    for (Index = 0;  Index < NumberOf(pATIHW->crt);  Index++)
-        pATIHW->crt[Index] = GetReg(CRTX(pATI->CPIO_VGABase), Index);
-
-    /* Save attribute controller registers */
-    for (Index = 0;  Index < NumberOf(pATIHW->attr);  Index++)
-    {
-        (void)inb(GENS1(pATI->CPIO_VGABase));   /* Reset flip-flop */
-        pATIHW->attr[Index] = GetReg(ATTRX, Index);
-    }
-
-    /* Save graphics controller registers */
-    for (Index = 0;  Index < NumberOf(pATIHW->gra);  Index++)
-        pATIHW->gra[Index] = GetReg(GRAX, Index);
-}
-
-/*
- * ATIVGASet --
- *
- * This function is called to load the VGA portion of a video state.
- */
-void
-ATIVGASet
-(
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    int Index;
-
-    /* Set VGA I/O base */
-    ATISetVGAIOBase(pATI, pATIHW->genmo);
-
-    /* Load miscellaneous output register */
-    outb(GENMO, pATIHW->genmo);
-
-    /* Load sequencer in reverse index order;  this also ends its reset */
-    for (Index = NumberOf(pATIHW->seq);  --Index >= 0;  )
-        PutReg(SEQX, Index, pATIHW->seq[Index]);
-
-    /* Load CRTC registers */
-    for (Index = 0;  Index < NumberOf(pATIHW->crt);  Index++)
-        PutReg(CRTX(pATI->CPIO_VGABase), Index, pATIHW->crt[Index]);
-
-    /* Load attribute controller registers */
-    for (Index = 0;  Index < NumberOf(pATIHW->attr);  Index++)
-    {
-        (void)inb(GENS1(pATI->CPIO_VGABase));   /* Reset flip-flop & delay */
-        outb(ATTRX, Index);
-        outb(ATTRX, pATIHW->attr[Index]);
-    }
-
-    /* Load graphics controller registers */
-    for (Index = 0;  Index < NumberOf(pATIHW->gra);  Index++)
-        PutReg(GRAX, Index, pATIHW->gra[Index]);
-}
-
-/*
- * ATIVGASaveScreen --
- *
- * This function blanks or unblanks a VGA screen.
- */
-void
-ATIVGASaveScreen
-(
-    ATIPtr pATI,
-    int    Mode
-)
-{
-    (void)inb(GENS1(pATI->CPIO_VGABase));       /* Reset flip-flop */
-
-    switch (Mode)
-    {
-        case SCREEN_SAVER_OFF:
-        case SCREEN_SAVER_FORCER:
-            outb(ATTRX, 0x20U);                /* Turn PAS on */
-            break;
-
-        case SCREEN_SAVER_ON:
-        case SCREEN_SAVER_CYCLE:
-            outb(ATTRX, 0x00U);                /* Turn PAS off */
-            break;
-
-        default:
-            break;
-    }
-}
-
-#endif /* AVOID_CPIO */
diff --git a/src/ativga.h b/src/ativga.h
deleted file mode 100644
index 3dd6f0e..0000000
--- a/src/ativga.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIVGA_H___
-#define ___ATIVGA_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-#ifndef AVOID_CPIO
-
-extern void ATIVGAPreInit(ATIPtr, ATIHWPtr);
-extern void ATIVGASave(ATIPtr, ATIHWPtr);
-extern void ATIVGASet(ATIPtr, ATIHWPtr);
-
-extern void ATIVGASaveScreen(ATIPtr, int);
-
-#endif /* AVOID_CPIO */
-
-#endif /* ___ATIVGA_H___ */
diff --git a/src/ativgaio.c b/src/ativgaio.c
deleted file mode 100644
index 3b66ee3..0000000
--- a/src/ativgaio.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atistruct.h"
-#include "ativgaio.h"
-
-#ifndef AVOID_CPIO
-
-/*
- * ATISetVGAIOBase --
- *
- * This sets vgaIOBase according to the value of the passed value of the
- * miscellaneous output register.
- */
-void
-ATISetVGAIOBase
-(
-    ATIPtr      pATI,
-    const CARD8 misc
-)
-{
-    pATI->CPIO_VGABase = (misc & 0x01U) ? ColourIOBase : MonochromeIOBase;
-}
-
-#endif /* AVOID_CPIO */
diff --git a/src/ativgaio.h b/src/ativgaio.h
deleted file mode 100644
index c73e8ae..0000000
--- a/src/ativgaio.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIVGAIO_H___
-
-#if !defined(___ATI_H___) && defined(XFree86Module)
-# error missing #include "ati.h" before #include "ativgaio.h"
-# undef XFree86Module
-#endif
-
-#define ___ATIVGAIO_H___ 1
-
-#include "atiregs.h"
-#include "atipriv.h"
-
-#include "compiler.h"
-
-#ifndef AVOID_CPIO
-
-extern void ATISetVGAIOBase(ATIPtr, const CARD8);
-
-/* Odds and ends to ease reading and writting of indexed registers */
-#define GetReg(_Register, _Index) \
-    (                             \
-        outb(_Register, _Index),  \
-        inb((_Register) + 1)      \
-    )
-#define PutReg(_Register, _Index, _Value) \
-    do                                    \
-    {                                     \
-        outb(_Register, _Index);          \
-        outb((_Register) + 1, _Value);    \
-    } while (0)
-
-#endif /* AVOID_CPIO */
-
-#endif /* ___ATIVGAIO_H___ */
diff --git a/src/atividmem.c b/src/atividmem.c
deleted file mode 100644
index 986ac0f..0000000
--- a/src/atividmem.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atistruct.h"
-#include "atividmem.h"
-
-/* Memory types for 68800's and 88800GX's */
-const char *ATIMemoryTypeNames_Mach[] =
-{
-    "DRAM (256Kx4)",
-    "VRAM (256Kx4, x8, x16)",
-    "VRAM (256Kx16 with short shift register)",
-    "DRAM (256Kx16)",
-    "Graphics DRAM (256Kx16)",
-    "Enhanced VRAM (256Kx4, x8, x16)",
-    "Enhanced VRAM (256Kx16 with short shift register)",
-    "Unknown video memory type"
-};
-
-/* Memory types for 88800CX's */
-const char *ATIMemoryTypeNames_88800CX[] =
-{
-    "DRAM (256Kx4, x8, x16)",
-    "EDO DRAM (256Kx4, x8, x16)",
-    "Unknown video memory type",
-    "DRAM (256Kx16 with assymetric RAS/CAS)",
-    "Unknown video memory type",
-    "Unknown video memory type",
-    "Unknown video memory type",
-    "Unknown video memory type"
-};
-
-/* Memory types for 264xT's */
-const char *ATIMemoryTypeNames_264xT[] =
-{
-    "Disabled video memory",
-    "DRAM",
-    "EDO DRAM",
-    "Pseudo-EDO DRAM",
-    "SDRAM (1:1)",
-    "SGRAM (1:1)",
-    "SGRAM (2:1) 32-bit",
-    "Unknown video memory type"
-};
-
-#ifndef AVOID_CPIO
-
-/*
- * ATIUnmapVGA --
- *
- * Unmap VGA aperture.
- */
-static void
-ATIUnmapVGA
-(
-    int    iScreen,
-    ATIPtr pATI
-)
-{
-    if (!pATI->pBank)
-        return;
-
-    xf86UnMapVidMem(iScreen, pATI->pBank, 0x00010000U);
-
-    pATI->pBank = NULL;
-}
-
-#endif /* AVOID_CPIO */
-
-/*
- * ATIUnmapLinear --
- *
- * Unmap linear aperture.
- */
-static void
-ATIUnmapLinear
-(
-    int    iScreen,
-    ATIPtr pATI
-)
-{
-    if (pATI->pMemory)
-    {
-#ifndef XSERVER_LIBPCIACCESS
-        xf86UnMapVidMem(iScreen, pATI->pMemory, pATI->LinearSize);
-#else
-        pci_device_unmap_range(pATI->PCIInfo, pATI->pMemory, pATI->LinearSize);
-#endif
-
-#if X_BYTE_ORDER != X_LITTLE_ENDIAN
-
-        if (pATI->pMemoryLE)
-        {
-#ifndef XSERVER_LIBPCIACCESS
-            xf86UnMapVidMem(iScreen, pATI->pMemoryLE, pATI->LinearSize);
-#else
-            pci_device_unmap_range(pATI->PCIInfo, pATI->pMemoryLE, pATI->LinearSize);
-#endif
-        }
-
-#endif /* X_BYTE_ORDER */
-
-    }
-
-    pATI->pMemory = pATI->pMemoryLE = NULL;
-}
-
-/*
- * ATIUnmapMMIO --
- *
- * Unmap MMIO registers.
- */
-static void
-ATIUnmapMMIO
-(
-    int    iScreen,
-    ATIPtr pATI
-)
-{
-    if (pATI->pMMIO)
-    {
-#ifndef XSERVER_LIBPCIACCESS
-        xf86UnMapVidMem(iScreen, pATI->pMMIO, getpagesize());
-#else
-        pci_device_unmap_range(pATI->PCIInfo, pATI->pMMIO, getpagesize());
-#endif
-    }
-
-    pATI->pMMIO = pATI->pBlock[0] = pATI->pBlock[1] = NULL;
-}
-
-/*
- * ATIUnmapCursor --
- *
- * Unmap hardware cursor image area.
- */
-static void
-ATIUnmapCursor
-(
-    int    iScreen,
-    ATIPtr pATI
-)
-{
-    if (pATI->pCursorPage)
-    {
-#ifndef XSERVER_LIBPCIACCESS
-        xf86UnMapVidMem(iScreen, pATI->pCursorPage, getpagesize());
-#else
-        pci_device_unmap_range(pATI->PCIInfo, pATI->pCursorPage, getpagesize());
-#endif
-    }
-
-    pATI->pCursorPage = pATI->pCursorImage = NULL;
-}
-
-/*
- * ATIMapApertures --
- *
- * This function maps all apertures used by the driver.
- *
- * It is called three times:
- * - to setup MMIO for an MMIO-only driver during Probe
- * - to setup MMIO for an MMIO-only driver during PreInit
- * - to setup MMIO (with Block0Base set) and FB (with LinearBase set)
- */
-Bool
-ATIMapApertures
-(
-    int    iScreen,
-    ATIPtr pATI
-)
-{
-    pciVideoPtr   pVideo = pATI->PCIInfo;
-#ifndef XSERVER_LIBPCIACCESS
-    PCITAG        Tag = PCI_CFG_TAG(pVideo);
-#else
-    pciVideoPtr   Tag = pVideo;
-#endif
-    unsigned long PageSize = getpagesize();
-
-    if (pATI->Mapped)
-        return TRUE;
-
-#ifndef AVOID_CPIO
-
-    /* Map VGA aperture */
-    if (pATI->VGAAdapter)
-    {
-        /*
-         * No relocation, resizing, caching or write-combining of this
-         * aperture is supported.  Hence, the hard-coded values here...
-         */
-            pATI->pBank = xf86MapDomainMemory(iScreen, VIDMEM_MMIO_32BIT,
-                Tag, 0x000A0000U, 0x00010000U);
-
-        if (!pATI->pBank)
-            return FALSE;
-
-        pATI->Mapped = TRUE;
-    }
-
-#endif /* AVOID_CPIO */
-
-    /* Map linear aperture */
-    if (pATI->LinearBase)
-    {
-
-#ifndef XSERVER_LIBPCIACCESS
-
-            pATI->pMemory = xf86MapPciMem(iScreen, VIDMEM_FRAMEBUFFER,
-                Tag, pATI->LinearBase, pATI->LinearSize);
-
-#else /* XSERVER_LIBPCIACCESS */
-
-        int mode = PCI_DEV_MAP_FLAG_WRITABLE | PCI_DEV_MAP_FLAG_WRITE_COMBINE;
-
-        int err = pci_device_map_range(pVideo,
-                                       pATI->LinearBase,
-                                       pATI->LinearSize,
-                                       mode, &pATI->pMemory);
-
-        if (err)
-        {
-            xf86DrvMsg (iScreen, X_ERROR,
-                    "Unable to map linear aperture. %s (%d)\n",
-                    strerror (err), err);
-        }
-
-#endif /* XSERVER_LIBPCIACCESS */
-
-        if (!pATI->pMemory)
-        {
-
-#ifndef AVOID_CPIO
-
-            ATIUnmapVGA(iScreen, pATI);
-
-#endif /* AVOID_CPIO */
-
-            pATI->Mapped = FALSE;
-            return FALSE;
-        }
-
-        pATI->Mapped = TRUE;
-
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-
-        if ((pATI->CursorBase >= pATI->LinearBase) &&
-            ((pATI->CursorOffset + 0x00000400UL) <= (CARD32)pATI->LinearSize))
-            pATI->pCursorImage = (char *)pATI->pMemory + pATI->CursorOffset;
-
-        pATI->pMemoryLE = pATI->pMemory;
-
-#else /* if X_BYTE_ORDER != X_LITTLE_ENDIAN */
-
-        /*
-         * Map the little-endian aperture (used for video, etc.).  Note that
-         * caching of this area is _not_ wanted.
-         */
-        {
-
-#ifndef XSERVER_LIBPCIACCESS
-
-            pATI->pMemoryLE = xf86MapPciMem(iScreen, VIDMEM_MMIO, Tag,
-                pATI->LinearBase - 0x00800000U, pATI->LinearSize);
-
-
-#else /* XSERVER_LIBPCIACCESS */
-
-        int mode = PCI_DEV_MAP_FLAG_WRITABLE;
-
-        int err = pci_device_map_range(pVideo,
-                                       pATI->LinearBase - 0x00800000U,
-                                       pATI->LinearSize,
-                                       mode, &pATI->pMemoryLE);
-
-        if (err)
-        {
-            xf86DrvMsg (iScreen, X_ERROR,
-                    "Unable to map extended linear aperture. %s (%d)\n",
-                    strerror (err), err);
-        }
-
-#endif /* XSERVER_LIBPCIACCESS */
-
-            if (!pATI->pMemoryLE)
-            {
-                ATIUnmapLinear(iScreen, pATI);
-
-#ifndef AVOID_CPIO
-
-                ATIUnmapVGA(iScreen, pATI);
-
-#endif /* AVOID_CPIO */
-
-                pATI->Mapped = FALSE;
-                return FALSE;
-            }
-        }
-
-#endif /* X_BYTE_ORDER */
-
-    }
-
-    /* Map MMIO aperture */
-    if (pATI->Block0Base)
-    {
-        unsigned long MMIOBase = pATI->Block0Base & ~(PageSize - 1);
-
-#ifndef XSERVER_LIBPCIACCESS
-
-            pATI->pMMIO = xf86MapPciMem(iScreen, VIDMEM_MMIO,
-                Tag, MMIOBase, PageSize);
-
-#else /* XSERVER_LIBPCIACCESS */
-
-        int mode = PCI_DEV_MAP_FLAG_WRITABLE;
-
-        int err = pci_device_map_range(pVideo,
-                                       MMIOBase,
-                                       PageSize,
-                                       mode, &pATI->pMMIO);
-
-        if (err)
-        {
-            xf86DrvMsg (iScreen, X_ERROR,
-                    "Unable to map mmio aperture. %s (%d)\n",
-                    strerror (err), err);
-        }
-
-#endif /* XSERVER_LIBPCIACCESS */
-
-        if (!pATI->pMMIO)
-        {
-
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-
-            ATIUnmapCursor(iScreen, pATI);
-
-#endif /* X_BYTE_ORDER */
-
-            ATIUnmapLinear(iScreen, pATI);
-
-#ifndef AVOID_CPIO
-
-            ATIUnmapVGA(iScreen, pATI);
-
-#endif /* AVOID_CPIO */
-
-            pATI->Mapped = FALSE;
-            return FALSE;
-        }
-
-        pATI->Mapped = TRUE;
-
-        pATI->pBlock[0] = (char *)pATI->pMMIO +
-            (pATI->Block0Base - MMIOBase);
-
-        if (pATI->Block1Base)
-            pATI->pBlock[1] = (char *)pATI->pBlock[0] - 0x00000400U;
-
-#if X_BYTE_ORDER == X_LITTLE_ENDIAN
-
-        if (!pATI->pCursorImage)
-
-#endif /* X_BYTE_ORDER */
-
-        {
-            if ((pATI->CursorBase >= MMIOBase) &&
-                ((pATI->CursorBase + 0x00000400UL) <= (MMIOBase + PageSize)))
-                pATI->pCursorImage = (char *)pATI->pMMIO +
-                    (pATI->CursorBase - MMIOBase);
-        }
-    }
-
-    /* Map hardware cursor image area */
-    if (pATI->CursorBase && !pATI->pCursorImage)
-    {
-        unsigned long CursorBase = pATI->CursorBase & ~(PageSize - 1);
-
-#ifndef XSERVER_LIBPCIACCESS
-
-            pATI->pCursorPage = xf86MapPciMem(iScreen, VIDMEM_FRAMEBUFFER,
-                Tag, CursorBase, PageSize);
-
-#else /* XSERVER_LIBPCIACCESS */
-
-        int mode = PCI_DEV_MAP_FLAG_WRITABLE | PCI_DEV_MAP_FLAG_WRITE_COMBINE;
-
-        int err = pci_device_map_range(pVideo,
-                                       CursorBase,
-                                       PageSize,
-                                       mode, &pATI->pCursorPage);
-
-        if (err)
-        {
-            xf86DrvMsg (iScreen, X_ERROR,
-                    "Unable to map cursor aperture. %s (%d)\n",
-                    strerror (err), err);
-        }
-
-#endif /* XSERVER_LIBPCIACCESS */
-
-        if (!pATI->pCursorPage)
-        {
-            ATIUnmapCursor(iScreen, pATI);
-            ATIUnmapMMIO(iScreen, pATI);
-            ATIUnmapLinear(iScreen, pATI);
-
-#ifndef AVOID_CPIO
-
-            ATIUnmapVGA(iScreen, pATI);
-
-#endif /* AVOID_CPIO */
-
-            pATI->Mapped = FALSE;
-            return FALSE;
-        }
-
-        pATI->pCursorImage = (char *)pATI->pCursorPage +
-            (pATI->CursorBase - CursorBase);
-    }
-
-    return TRUE;
-}
-
-/*
- * ATIUnmapApertures --
- *
- * This function unmaps all apertures used by the driver.
- */
-void
-ATIUnmapApertures
-(
-    int    iScreen,
-    ATIPtr pATI
-)
-{
-    if (!pATI->Mapped)
-        return;
-    pATI->Mapped = FALSE;
-
-    /* Unmap hardware cursor image area */
-    ATIUnmapCursor(iScreen, pATI);
-
-    /* Unmap MMIO area */
-    ATIUnmapMMIO(iScreen, pATI);
-
-    /* Unmap linear aperture */
-    ATIUnmapLinear(iScreen, pATI);
-
-#ifndef AVOID_CPIO
-
-    /* Unmap VGA aperture */
-    ATIUnmapVGA(iScreen, pATI);
-
-#endif /* AVOID_CPIO */
-
-}
diff --git a/src/atividmem.h b/src/atividmem.h
deleted file mode 100644
index 22b1a1d..0000000
--- a/src/atividmem.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIVIDMEM_H___
-#define ___ATIVIDMEM_H___ 1
-
-#include "atipriv.h"
-
-/* Memory types for 68800's and 88800GX's */
-typedef enum
-{
-    MEM_MACH_DRAMx4,
-    MEM_MACH_VRAM,
-    MEM_MACH_VRAMssr,
-    MEM_MACH_DRAMx16,
-    MEM_MACH_GDRAM,
-    MEM_MACH_EVRAM,
-    MEM_MACH_EVRAMssr,
-    MEM_MACH_TYPE_7
-} ATIMachMemoryType;
-extern const char *ATIMemoryTypeNames_Mach[];
-
-/* Memory types for 88800CX's */
-typedef enum
-{
-    MEM_CX_DRAM,
-    MEM_CX_EDO,
-    MEM_CX_TYPE_2,
-    MEM_CX_DRAM_A,
-    MEM_CX_TYPE_4,
-    MEM_CX_TYPE_5,
-    MEM_CX_TYPE_6,
-    MEM_CX_TYPE_7
-} ATICXMemoryType;
-extern const char *ATIMemoryTypeNames_88800CX[];
-
-/* Memory types for 264xT's */
-typedef enum
-{
-    MEM_264_NONE,
-    MEM_264_DRAM,
-    MEM_264_EDO,
-    MEM_264_PSEUDO_EDO,
-    MEM_264_SDRAM,
-    MEM_264_SGRAM,
-    MEM_264_SGRAM32,
-    MEM_264_TYPE_7
-} ATI264MemoryType;
-extern const char *ATIMemoryTypeNames_264xT[];
-
-extern Bool ATIMapApertures(int, ATIPtr);
-extern void ATIUnmapApertures(int, ATIPtr);
-
-#endif /* ___ATIVIDMEM_H___ */
diff --git a/src/atiwonder.c b/src/atiwonder.c
deleted file mode 100644
index 371e251..0000000
--- a/src/atiwonder.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/*
- * The ATI x8800 chips use special registers for their extended VGA features.
- * These registers are accessible through an index I/O port and a data I/O
- * port.  BIOS initialisation stores the index port number in the Graphics
- * register bank (0x03CE), indices 0x50 and 0x51.  Unfortunately, for all but
- * the 18800-x series of adapters, these registers are write-only (a.k.a. black
- * holes).  On all but 88800's, the index port number can be found in the short
- * integer at offset 0x10 in the BIOS.  For 88800's, this driver will use
- * 0x01CE or 0x03CE as the index port number, depending on the I/O port
- * decoding used.  The data port number is one more than the index port number
- * (i.e. 0x01CF).  These ports differ slightly in their I/O behaviour from the
- * normal VGA ones:
- *
- *    write:  outw(0x01CE, (data << 8) | index);        (16-bit, not used)
- *            outb(0x01CE, index);  outb(0x01CF, data); (8-bit)
- *    read:   outb(0x01CE, index);  data = inb(0x01CF);
- *
- * Two consecutive byte-writes to the data port will not work.  Furthermore an
- * index written to 0x01CE is usable only once.  Note also that the setting of
- * ATI extended registers (especially those with clock selection bits) should
- * be bracketed by a sequencer reset.
- *
- * The number of these extended VGA registers varies by chipset.  The 18800
- * series have 16, the 28800 series have 32, while 68800's and 88800's have 64.
- * The last 16 on each have almost identical definitions.  Thus, the BIOS sets
- * up an indexing scheme whereby the last 16 extended VGA registers are
- * accessed at indices 0xB0 through 0xBF on all chipsets.
- */
-
-#include "ati.h"
-#include "atichip.h"
-#include "atiwonder.h"
-#include "atiwonderio.h"
-
-#ifndef AVOID_CPIO
-
-/*
- * ATIVGAWonderPreInit --
- *
- * This function is called to initialise the VGA Wonder part of an ATIHWRec
- * that is common to all modes generated by the driver.
- */
-void
-ATIVGAWonderPreInit
-(
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    pATIHW->b3 = ATIGetExtReg(0xB3U) & 0x20U;
-        pATIHW->b6 = 0x04U;
-        pATIHW->b6 |= 0x01U;
-        pATIHW->bf = ATIGetExtReg(0xBFU) & 0x5FU;
-        pATIHW->a3 = ATIGetExtReg(0xA3U) & 0x67U;
-        pATIHW->ab = ATIGetExtReg(0xABU) & 0xE7U;
-        pATIHW->ae = ATIGetExtReg(0xAEU) & 0xE0U;
-}
-
-/*
- * ATIVGAWonderSave --
- *
- * This function is called to save the VGA Wonder portion of the current video
- * state.
- */
-void
-ATIVGAWonderSave
-(
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    pATIHW->b0 = ATIGetExtReg(0xB0U);
-    pATIHW->b1 = ATIGetExtReg(0xB1U);
-    pATIHW->b2 = ATIGetExtReg(0xB2U);
-    pATIHW->b3 = ATIGetExtReg(0xB3U);
-    pATIHW->b5 = ATIGetExtReg(0xB5U);
-    pATIHW->b6 = ATIGetExtReg(0xB6U);
-    pATIHW->b8 = ATIGetExtReg(0xB8U);
-    pATIHW->b9 = ATIGetExtReg(0xB9U);
-    pATIHW->ba = ATIGetExtReg(0xBAU);
-    pATIHW->bd = ATIGetExtReg(0xBDU);
-    {
-        pATIHW->be = ATIGetExtReg(0xBEU);
-        {
-            pATIHW->bf = ATIGetExtReg(0xBFU);
-            pATIHW->a3 = ATIGetExtReg(0xA3U);
-            pATIHW->a6 = ATIGetExtReg(0xA6U);
-            pATIHW->a7 = ATIGetExtReg(0xA7U);
-            pATIHW->ab = ATIGetExtReg(0xABU);
-            pATIHW->ac = ATIGetExtReg(0xACU);
-            pATIHW->ad = ATIGetExtReg(0xADU);
-            pATIHW->ae = ATIGetExtReg(0xAEU);
-        }
-    }
-}
-
-/*
- * ATIVGAWonderSet --
- *
- * This function loads the VGA Wonder portion of a video state.
- */
-void
-ATIVGAWonderSet
-(
-    ATIPtr      pATI,
-    ATIHWPtr    pATIHW
-)
-{
-    {
-        ATIModifyExtReg(pATI, 0xBEU, -1, 0x00U, pATIHW->be);
-        {
-            ATIModifyExtReg(pATI, 0xBFU, -1, 0x00U, pATIHW->bf);
-            ATIModifyExtReg(pATI, 0xA3U, -1, 0x00U, pATIHW->a3);
-            ATIModifyExtReg(pATI, 0xA6U, -1, 0x00U, pATIHW->a6);
-            ATIModifyExtReg(pATI, 0xA7U, -1, 0x00U, pATIHW->a7);
-            ATIModifyExtReg(pATI, 0xABU, -1, 0x00U, pATIHW->ab);
-            ATIModifyExtReg(pATI, 0xACU, -1, 0x00U, pATIHW->ac);
-            ATIModifyExtReg(pATI, 0xADU, -1, 0x00U, pATIHW->ad);
-            ATIModifyExtReg(pATI, 0xAEU, -1, 0x00U, pATIHW->ae);
-        }
-    }
-    ATIModifyExtReg(pATI, 0xB0U, -1, 0x00U, pATIHW->b0);
-    ATIModifyExtReg(pATI, 0xB1U, -1, 0x00U, pATIHW->b1);
-    ATIModifyExtReg(pATI, 0xB3U, -1, 0x00U, pATIHW->b3);
-    ATIModifyExtReg(pATI, 0xB5U, -1, 0x00U, pATIHW->b5);
-    ATIModifyExtReg(pATI, 0xB6U, -1, 0x00U, pATIHW->b6);
-    ATIModifyExtReg(pATI, 0xB8U, -1, 0x00U, pATIHW->b8);
-    ATIModifyExtReg(pATI, 0xB9U, -1, 0x00U, pATIHW->b9);
-    ATIModifyExtReg(pATI, 0xBAU, -1, 0x00U, pATIHW->ba);
-    ATIModifyExtReg(pATI, 0xBDU, -1, 0x00U, pATIHW->bd);
-}
-
-#endif /* AVOID_CPIO */
diff --git a/src/atiwonder.h b/src/atiwonder.h
deleted file mode 100644
index 2fe5e5e..0000000
--- a/src/atiwonder.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIWONDER_H___
-#define ___ATIWONDER_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-#ifndef AVOID_CPIO
-
-extern void ATIVGAWonderPreInit(ATIPtr, ATIHWPtr);
-extern void ATIVGAWonderSave(ATIPtr, ATIHWPtr);
-extern void ATIVGAWonderSet(ATIPtr, ATIHWPtr);
-
-#endif /* AVOID_CPIO */
-
-#endif /* ___ATIWONDER_H___ */
diff --git a/src/atiwonderio.c b/src/atiwonderio.c
deleted file mode 100644
index e6c0db7..0000000
--- a/src/atiwonderio.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "ati.h"
-#include "atichip.h"
-#include "atiwonderio.h"
-
-#ifndef AVOID_CPIO
-
-/*
- * ATIModifyExtReg --
- *
- * This function is called to modify certain bits in an ATI extended VGA
- * register while preserving its other bits.  The function will not write the
- * register if it turns out its value would not change.  This helps prevent
- * server hangs on older adapters.
- */
-void
-ATIModifyExtReg
-(
-    ATIPtr      pATI,
-    const CARD8 Index,
-    int         CurrentValue,
-    const CARD8 CurrentMask,
-    CARD8       NewValue
-)
-{
-    /* Possibly retrieve the current value */
-    if (CurrentValue < 0)
-        CurrentValue = ATIGetExtReg(Index);
-
-    /* Compute new value */
-    NewValue &= (CARD8)(~CurrentMask);
-    NewValue |= CurrentValue & CurrentMask;
-
-    /* Check if value will be changed */
-    if (CurrentValue == NewValue)
-        return;
-
-        ATIPutExtReg(Index, NewValue);
-}
-
-#endif /* AVOID_CPIO */
diff --git a/src/atiwonderio.h b/src/atiwonderio.h
deleted file mode 100644
index 515cd4d..0000000
--- a/src/atiwonderio.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2000 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIWONDERIO_H___
-
-#if !defined(___ATI_H___) && defined(XFree86Module)
-# error missing #include "ati.h" before #include "atiwonderio.h"
-# undef XFree86Module
-#endif
-
-#define ___ATIWONDERIO_H___ 1
-
-#include "atistruct.h"
-#include "ativgaio.h"
-
-#ifndef AVOID_CPIO
-
-extern void ATIModifyExtReg(ATIPtr, const CARD8, int, const CARD8, CARD8);
-
-#define ATIGetExtReg(_Index)                    \
-    GetReg(pATI->CPIO_VGAWonder, _Index)
-#define ATIPutExtReg(_Index, _Value)            \
-    PutReg(pATI->CPIO_VGAWonder, _Index, _Value)
-
-#endif /* AVOID_CPIO */
-
-#endif /* ___ATIWONDERIO_H___ */
diff --git a/src/atixv.h b/src/atixv.h
deleted file mode 100644
index a33106f..0000000
--- a/src/atixv.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2001 through 2004 by Marc Aurele La France (TSI @ UQV), tsi at xfree86.org
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of Marc Aurele La France not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  Marc Aurele La France makes no representations
- * about the suitability of this software for any purpose.  It is provided
- * "as-is" without express or implied warranty.
- *
- * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO
- * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ___ATIXV_H___
-#define ___ATIXV_H___ 1
-
-#include "atipriv.h"
-
-#include "xf86str.h"
-
-extern void ATIXVPreInit(ATIPtr);
-extern Bool ATIInitializeXVideo(ScreenPtr, ScrnInfoPtr, ATIPtr);
-extern void ATICloseXVideo(ScreenPtr, ScrnInfoPtr, ATIPtr);
-
-#endif /* ___ATIXV_H___ */
diff --git a/src/mach64_common.h b/src/mach64_common.h
deleted file mode 100644
index f1f765a..0000000
--- a/src/mach64_common.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* mach64_common.h -- common header definitions for Rage Pro 2D/3D/DRM suite
- * Created: Sun Dec 03 11:34:16 2000 by gareth at valinux.com
- *
- * Copyright 2000 Gareth Hughes
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * GARETH HUGHES BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Author:
- *	Gareth Hughes <gareth at valinux.com>
- *      Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifndef __MACH64_COMMON_H__
-#define __MACH64_COMMON_H__ 1
-
-/* WARNING: If you change any of these defines, make sure to change
- * the kernel include file as well (mach64_drm.h)
- */
-
-/* Driver specific DRM command indices
- * NOTE: these are not OS specific, but they are driver specific
- */
-#define DRM_MACH64_INIT           0x00
-#define DRM_MACH64_IDLE           0x01
-#define DRM_MACH64_RESET          0x02
-#define DRM_MACH64_SWAP           0x03
-#define DRM_MACH64_CLEAR          0x04
-#define DRM_MACH64_VERTEX         0x05
-#define DRM_MACH64_BLIT           0x06
-#define DRM_MACH64_FLUSH          0x07
-#define DRM_MACH64_GETPARAM       0x08
-
-/* Buffer flags for clears
- */
-#define MACH64_FRONT	          0x1
-#define MACH64_BACK	          0x2
-#define MACH64_DEPTH	          0x4
-
-/* Primitive types for vertex buffers
- */
-#define MACH64_PRIM_POINTS		0x00000000
-#define MACH64_PRIM_LINES		0x00000001
-#define MACH64_PRIM_LINE_LOOP		0x00000002
-#define MACH64_PRIM_LINE_STRIP		0x00000003
-#define MACH64_PRIM_TRIANGLES		0x00000004
-#define MACH64_PRIM_TRIANGLE_STRIP	0x00000005
-#define MACH64_PRIM_TRIANGLE_FAN	0x00000006
-#define MACH64_PRIM_QUADS		0x00000007
-#define MACH64_PRIM_QUAD_STRIP		0x00000008
-#define MACH64_PRIM_POLYGON		0x00000009
-
-
-typedef enum _drmMach64DMAMode {
-   MACH64_MODE_DMA_ASYNC,
-   MACH64_MODE_DMA_SYNC,
-   MACH64_MODE_MMIO
-} drmMach64DMAMode;
-
-typedef struct {
-   enum {
-      DRM_MACH64_INIT_DMA    = 0x01,
-      DRM_MACH64_CLEANUP_DMA = 0x02
-   } func;
-   unsigned long sarea_priv_offset;
-   int is_pci;
-   drmMach64DMAMode dma_mode;
-
-   unsigned int fb_bpp;
-   unsigned int front_offset, front_pitch;
-   unsigned int back_offset, back_pitch;
-
-   unsigned int depth_bpp;
-   unsigned int depth_offset, depth_pitch;
-
-   unsigned long fb_offset;
-   unsigned long mmio_offset;
-   unsigned long ring_offset;
-   unsigned long buffers_offset;
-   unsigned long agp_textures_offset;
-} drmMach64Init;
-
-typedef struct {
-   unsigned int flags;
-   int x, y, w, h;
-   unsigned int clear_color;
-   unsigned int clear_depth;
-} drmMach64Clear;
-
-typedef struct {
-   int prim;
-   void *buf;			/* Address of vertex buffer */
-   unsigned long used;		/* Number of bytes in buffer */
-   int discard;			/* Client finished with buffer? */
-} drmMach64Vertex;
-
-typedef struct {
-   void *buf;
-   int pitch;
-   int offset;
-   int format;
-   unsigned short x, y;
-   unsigned short width, height;
-} drmMach64Blit;
-
-typedef struct {
-   int param;
-   int *value;
-} drmMach64GetParam;
-
-#define MACH64_PARAM_FRAMES_QUEUED 1
-#define MACH64_PARAM_IRQ_NR       2
-
-#endif /* __MACH64_COMMON_H__ */
diff --git a/src/mach64_dri.h b/src/mach64_dri.h
deleted file mode 100644
index 7061931..0000000
--- a/src/mach64_dri.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright 2000 Gareth Hughes
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * GARETH HUGHES BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Gareth Hughes <gareth at valinux.com>
- *   Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifndef __MACH64_DRI_H__
-#define __MACH64_DRI_H__ 1
-
-#include "xf86drm.h"
-
-typedef struct {
-   drm_handle_t fbHandle;
-
-   drm_handle_t regsHandle;
-   drmSize regsSize;
-
-   int IsPCI;
-
-   drm_handle_t agpHandle;            /* Handle from drmAgpAlloc */
-   unsigned long agpOffset;
-   drmSize agpSize;
-   int agpMode;
-
-   /* DMA descriptor ring */
-   unsigned long     ringStart;        /* Offset into AGP space */
-   drm_handle_t         ringHandle;       /* Handle from drmAddMap */
-   drmSize           ringMapSize;      /* Size of map */
-   int               ringSize;         /* Size of ring (in kB) */
-   drmAddress        ringMap;          /* Map */
-
-   /* vertex buffer data */
-   unsigned long     bufferStart;      /* Offset into AGP space */
-   drm_handle_t         bufferHandle;     /* Handle from drmAddMap */
-   drmSize           bufferMapSize;    /* Size of map */
-   int               bufferSize;       /* Size of buffers (in MB) */
-   drmAddress        bufferMap;        /* Map */
-
-   drmBufMapPtr      drmBuffers;       /* Buffer map */
-   int               numBuffers;       /* Number of buffers */
-
-   /* AGP Texture data */
-   unsigned long     agpTexStart;      /* Offset into AGP space */
-   drm_handle_t         agpTexHandle;     /* Handle from drmAddMap */
-   drmSize           agpTexMapSize;    /* Size of map */
-   int               agpTexSize;       /* Size of AGP tex space (in MB) */
-   drmAddress        agpTexMap;        /* Map */
-   int               log2AGPTexGran;
-
-   int fbX;
-   int fbY;
-   int backX;
-   int backY;
-   int depthX;
-   int depthY;
-
-   int frontOffset;
-   int frontPitch;
-   int backOffset;
-   int backPitch;
-   int depthOffset;
-   int depthPitch;
-
-   int textureOffset;
-   int textureSize;
-   int logTextureGranularity;
-} ATIDRIServerInfoRec, *ATIDRIServerInfoPtr;
-
-typedef struct {
-   int chipset;
-   int width;
-   int height;
-   int mem;
-   int cpp;
-
-   int IsPCI;
-   int AGPMode;
-
-   unsigned int frontOffset;
-   unsigned int frontPitch;
-
-   unsigned int backOffset;
-   unsigned int backPitch;
-
-   unsigned int depthOffset;
-   unsigned int depthPitch;
-
-   unsigned int textureOffset;
-   unsigned int textureSize;
-   int logTextureGranularity;
-
-   drm_handle_t regs;
-   drmSize regsSize;
-
-   drm_handle_t agp;
-   drmSize agpSize;
-   unsigned int agpTextureOffset;
-   unsigned int agpTextureSize;
-   int logAgpTextureGranularity;
-} ATIDRIRec, *ATIDRIPtr;
-
-#endif /* __MACH64_DRI_H__ */
diff --git a/src/mach64_sarea.h b/src/mach64_sarea.h
deleted file mode 100644
index 718b896..0000000
--- a/src/mach64_sarea.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2000 Gareth Hughes
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * GARETH HUGHES BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Authors:
- *   Gareth Hughes <gareth at valinux.com>
- *   Leif Delgass <ldelgass at retinalburn.net>
- */
-
-#ifndef __MACH64_SAREA_H__
-#define __MACH64_SAREA_H__ 1
-
-#include <X11/Xmd.h>
-
-/* WARNING: If you change any of these defines, make sure to change the
- * defines in the kernel file (mach64_drm.h)
- */
-#ifndef __MACH64_SAREA_DEFINES__
-#define __MACH64_SAREA_DEFINES__ 1
-
-/* What needs to be changed for the current vertex buffer?
- * GH: We're going to be pedantic about this.  We want the card to do as
- * little as possible, so let's avoid having it fetch a whole bunch of
- * register values that don't change all that often, if at all.
- */
-#define MACH64_UPLOAD_DST_OFF_PITCH	0x0001
-#define MACH64_UPLOAD_Z_OFF_PITCH	0x0002
-#define MACH64_UPLOAD_Z_ALPHA_CNTL	0x0004
-#define MACH64_UPLOAD_SCALE_3D_CNTL	0x0008
-#define MACH64_UPLOAD_DP_FOG_CLR	0x0010
-#define MACH64_UPLOAD_DP_WRITE_MASK	0x0020
-#define MACH64_UPLOAD_DP_PIX_WIDTH	0x0040
-#define MACH64_UPLOAD_SETUP_CNTL	0x0080
-#define MACH64_UPLOAD_MISC		0x0100
-#define MACH64_UPLOAD_TEXTURE		0x0200
-#define MACH64_UPLOAD_TEX0IMAGE		0x0400
-#define MACH64_UPLOAD_TEX1IMAGE		0x0800
-#define MACH64_UPLOAD_CLIPRECTS		0x1000 /* handled client-side */
-#define MACH64_UPLOAD_CONTEXT		0x00ff
-#define MACH64_UPLOAD_ALL		0x1fff
-
-/* DMA buffer size
- */
-#define MACH64_BUFFER_SIZE		16384
-
-/* Max number of swaps allowed on the ring
- * before the client must wait
- */
-#define MACH64_MAX_QUEUED_FRAMES        3
-
-/* Byte offsets for host blit buffer data
- */
-#define MACH64_HOSTDATA_BLIT_OFFSET	104
-
-/* Keep these small for testing.
- */
-#define MACH64_NR_SAREA_CLIPRECTS	8
-
-
-#define MACH64_CARD_HEAP		0
-#define MACH64_AGP_HEAP			1
-#define MACH64_NR_TEX_HEAPS		2
-#define MACH64_NR_TEX_REGIONS		64
-#define MACH64_LOG_TEX_GRANULARITY	16
-
-#define MACH64_TEX_MAXLEVELS		1
-
-#define MACH64_NR_CONTEXT_REGS		15
-#define MACH64_NR_TEXTURE_REGS		4
-
-#endif /* __MACH64_SAREA_DEFINES__ */
-
-typedef struct {
-   /* Context state */
-   unsigned int dst_off_pitch;		/* 0x500 */
-
-   unsigned int z_off_pitch;		/* 0x548 */ /* ****** */
-   unsigned int z_cntl;			/* 0x54c */
-   unsigned int alpha_tst_cntl;		/* 0x550 */
-
-   unsigned int scale_3d_cntl;		/* 0x5fc */
-
-   unsigned int sc_left_right;		/* 0x6a8 */
-   unsigned int sc_top_bottom;		/* 0x6b4 */
-
-   unsigned int dp_fog_clr;		/* 0x6c4 */
-   unsigned int dp_write_mask;		/* 0x6c8 */
-   unsigned int dp_pix_width;		/* 0x6d0 */
-   unsigned int dp_mix;			/* 0x6d4 */ /* ****** */
-   unsigned int dp_src;			/* 0x6d8 */ /* ****** */
-
-   unsigned int clr_cmp_cntl;		/* 0x708 */ /* ****** */
-   unsigned int gui_traj_cntl;		/* 0x730 */ /* ****** */
-
-   unsigned int setup_cntl;		/* 0x304 */
-
-   /* Texture state */
-   unsigned int tex_size_pitch;		/* 0x770 */
-   unsigned int tex_cntl;		/* 0x774 */
-   unsigned int secondary_tex_off;	/* 0x778 */
-   unsigned int tex_offset;		/* 0x5c0 */
-} mach64_context_regs_t;
-
-typedef struct {
-   /* The channel for communication of state information to the kernel
-    * on firing a vertex buffer.
-    */
-   mach64_context_regs_t ContextState;
-   unsigned int dirty;
-   unsigned int vertsize;
-
-#ifdef XF86DRI
-   /* The current cliprects, or a subset thereof.
-    */
-   drm_clip_rect_t boxes[MACH64_NR_SAREA_CLIPRECTS];
-   unsigned int nbox;
-#endif
-   /* Counter for throttling of rendering clients.
-    */
-   unsigned int frames_queued;
-
-   /* Maintain an LRU of contiguous regions of texture space.  If you
-    * think you own a region of texture memory, and it has an age
-    * different to the one you set, then you are mistaken and it has
-    * been stolen by another client.  If global texAge hasn't changed,
-    * there is no need to walk the list.
-    *
-    * These regions can be used as a proxy for the fine-grained texture
-    * information of other clients - by maintaining them in the same
-    * lru which is used to age their own textures, clients have an
-    * approximate lru for the whole of global texture space, and can
-    * make informed decisions as to which areas to kick out.  There is
-    * no need to choose whether to kick out your own texture or someone
-    * else's - simply eject them all in LRU order.
-    */
-   drmTextureRegion texList[MACH64_NR_TEX_HEAPS][MACH64_NR_TEX_REGIONS+1];
-   unsigned int texAge[MACH64_NR_TEX_HEAPS];
-
-   int ctxOwner;     /* last context to upload state */
-} ATISAREAPrivRec, *ATISAREAPrivPtr;
-
-#endif /* __MACH64_SAREA_H__ */
commit 05bbbec11a04e7f6321b92c9dbec4ad4c0d130ff
Author: George Sapountzis <gsap7 at yahoo.gr>
Date:   Wed Feb 27 18:39:32 2008 +0200

    drop mach64 (build system)

diff --git a/Makefile.am b/Makefile.am
index ea2e4a3..c8dcab8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -22,15 +22,12 @@ AUTOMAKE_OPTIONS = foreign
 SUBDIRS = src man
 
 if BUILD_LINUXDOC
-README.ati: README.ati.sgml
-	$(MAKE_TEXT) README.ati.sgml && mv README.ati.txt README.ati
-
 README.r128: README.r128.sgml
 	$(MAKE_TEXT) README.r128.sgml && mv README.r128.txt README.r128
 
 endif
 
-EXTRA_DIST = README.ati README.r128 README.ati.sgml README.r128.sgml ChangeLog
+EXTRA_DIST = README.r128 README.r128.sgml ChangeLog
 CLEANFILES = ChangeLog
 
 .PHONY: ChangeLog
diff --git a/configure.ac b/configure.ac
index fe4c057..560b935 100644
--- a/configure.ac
+++ b/configure.ac
@@ -122,58 +122,6 @@ CFLAGS="$XORG_CFLAGS"
 AC_CHECK_HEADER(xf86Modes.h,[XMODES=yes],[XMODES=no],[#include "xorg-server.h"])
 CFLAGS="$save_CFLAGS"
 
-# Note that this is sort of inverted from drivers/ati/Imakefile in
-# the monolith.  We test for foo, not for !foo (i.e. ATMISC_CPIO, not
-# ATIMISC_AVOID_CPIO), but the defines are negative.  So beware.  Oh yeah,
-# TV_OUT is the special case where it's a positive define, not AVOID_TV_OUT.
-
-# AVOID_CPIO: Only x86, amd64, and alpha are cool with CPIO.  It needs a
-# little-endian, undirected PIO space of at least 64kB.
-# AVOID_DGA: ???
-# ATI_TV_OUT: This only works on x86.
-
-ATIMISC_CPIO=no
-ATIMISC_DGA=yes
-ATIMISC_TV_OUT=no
-
-case $host_cpu in
-  i*86)
-    ATIMISC_TV_OUT=yes
-    ATIMISC_CPIO=yes
-    ;;
-  x86_64|amd64|alpha|ia64)
-    ATIMISC_CPIO=yes
-    ;;
-  sparc)
-    ATIMISC_DGA=no
-    ;;
-  *)
-    ;;
-esac
-
-AC_MSG_CHECKING([whether to include PIO support])
-AM_CONDITIONAL(ATIMISC_CPIO, test "x$ATIMISC_CPIO" = xyes)
-if test "x$ATIMISC_CPIO" = xyes; then
-	AC_MSG_RESULT([yes, PIO])
-else
-	AC_DEFINE(AVOID_CPIO, 1, [Avoid PIO and use MMIO for atimisc.])
-	AC_MSG_RESULT([no, MMIO])
-fi
-
-AC_MSG_CHECKING([whether to include DGA support])
-AC_MSG_RESULT([$ATIMISC_DGA])
-AM_CONDITIONAL(ATIMISC_DGA, test "x$ATIMISC_DGA" = xyes)
-if ! test "x$ATIMISC_DGA" = xyes; then
-	AC_DEFINE(AVOID_DGA, 1, [Do not build DGA support.])
-fi
-
-AC_MSG_CHECKING([whether to include TV Out support])
-AC_MSG_RESULT([$ATIMISC_TV_OUT])
-AM_CONDITIONAL(ATIMISC_TV_OUT, test "x$ATIMISC_TV_OUT" = xyes)
-if test "x$ATIMISC_TV_OUT" = xyes; then
-	AC_DEFINE(TV_OUT, 1, [Build TV-Out support for atimisc.])
-fi
-
 AC_DEFINE(USE_XAA, 1, [Build support for XAA])
 
 # Properly handle EXA.
diff --git a/src/Makefile.am b/src/Makefile.am
index e0799a5..0ea606d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -27,7 +27,6 @@
 # TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc.
 
 if DRI
-ATIMISC_DRI_SRCS = atidri.c
 R128_DRI_SRCS = r128_dri.c
 RADEON_DRI_SRCS = radeon_dri.c
 endif
@@ -64,16 +63,7 @@ XMODE_SRCS=\
         modes/xf86Rotate.c \
         modes/xf86DiDGA.c
 
-if ATIMISC_CPIO
-ATIMISC_CPIO_SOURCES = ativga.c ativgaio.c atibank.c atiwonder.c atiwonderio.c
-endif
-
-if ATIMISC_DGA
-ATIMISC_DGA_SOURCES = atidga.c
-endif
-
 if USE_EXA
-ATIMISC_EXA_SOURCES = atimach64exa.c
 RADEON_EXA_SOURCES = radeon_exa.c
 endif
 
@@ -86,19 +76,6 @@ ati_drv_ladir = @moduledir@/drivers
 ati_drv_la_SOURCES = \
 	ati.c atimodule.c
 
-mach64_drv_la_LTLIBRARIES = mach64_drv.la
-mach64_drv_la_LDFLAGS = -module -avoid-version
-mach64_drv_ladir = @moduledir@/drivers
-mach64_drv_la_SOURCES = \
-	atibus.c atichip.c atiprobe.c atividmem.c \
-	atiadjust.c atiaudio.c aticlock.c aticonfig.c aticonsole.c \
-	atidac.c atidecoder.c atidsp.c atii2c.c \
-	atilock.c atimach64.c atimach64accel.c atimach64cursor.c \
-	atimach64i2c.c atimach64io.c atimach64xv.c atimode.c atipreinit.c \
-	atiprint.c atirgb514.c atiscreen.c atituner.c atiutil.c ativalid.c \
-	atiload.c atimisc.c atimach64probe.c $(ATIMISC_CPIO_SOURCES) \
-	$(ATIMISC_DGA_SOURCES) $(ATIMISC_DRI_SRCS) $(ATIMISC_EXA_SOURCES)
-
 r128_drv_la_LTLIBRARIES = r128_drv.la
 r128_drv_la_LDFLAGS = -module -avoid-version
 r128_drv_ladir = @moduledir@/drivers
@@ -147,59 +124,12 @@ theatre200_drv_la_SOURCES = \
 
 EXTRA_DIST = \
 	$(XMODE_SRCS) \
-	atimach64render.c \
 	radeon_render.c \
 	radeon_accelfuncs.c \
 	\
-	atiadjust.h \
-	atiaudio.h \
-	atibank.h \
-	atibus.h \
-	atichip.h \
-	aticlock.h \
-	aticonsole.h \
-	aticrtc.h \
-	aticursor.h \
-	atidac.h \
-	atidecoder.h \
-	atidga.h \
-	atidri.h \
-	atidripriv.h \
-	atidsp.h \
 	ati.h \
-	atii2c.h \
-	atiload.h \
-	atilock.h \
-	atimach64accel.h \
-	atimach64.h \
-	atimach64i2c.h \
-	atimach64io.h \
-	atimach64probe.h \
-	atimach64version.h \
-	atimode.h \
-	atioption.h \
-	atipreinit.h \
-	atiprint.h \
-	atipriv.h \
-	atiprobe.h \
-	atiregs.h \
-	atirgb514.h \
-	atiscreen.h \
-	atistruct.h \
-	atituner.h \
-	atiutil.h \
-	ativalid.h \
 	ativersion.h \
-	ativga.h \
-	ativgaio.h \
-	atividmem.h \
-	atiwonder.h \
-	atiwonderio.h \
-	atixv.h \
 	generic_bus.h \
-	mach64_common.h \
-	mach64_dri.h \
-	mach64_sarea.h \
 	r128_common.h \
 	r128_dri.h \
 	r128_dripriv.h \


More information about the xorg-commit mailing list