summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac13
-rw-r--r--hw/kdrive/Makefile.am8
-rw-r--r--hw/kdrive/Xkdrive.man20
-rw-r--r--hw/kdrive/ati/Makefile.am74
-rw-r--r--hw/kdrive/ati/ati.c761
-rw-r--r--hw/kdrive/ati/ati.h409
-rw-r--r--hw/kdrive/ati/ati_cursor.c559
-rw-r--r--hw/kdrive/ati/ati_dma.c1037
-rw-r--r--hw/kdrive/ati/ati_dma.h141
-rw-r--r--hw/kdrive/ati/ati_draw.c918
-rw-r--r--hw/kdrive/ati/ati_draw.h93
-rw-r--r--hw/kdrive/ati/ati_drawtmp.h237
-rw-r--r--hw/kdrive/ati/ati_dri.c1138
-rw-r--r--hw/kdrive/ati/ati_dri.h97
-rw-r--r--hw/kdrive/ati/ati_dripriv.h57
-rw-r--r--hw/kdrive/ati/ati_microcode.c857
-rw-r--r--hw/kdrive/ati/ati_reg.h1927
-rw-r--r--hw/kdrive/ati/ati_sarea.h38
-rw-r--r--hw/kdrive/ati/ati_stub.c77
-rw-r--r--hw/kdrive/ati/ati_video.c988
-rw-r--r--hw/kdrive/ati/r128_blendtmp.h134
-rw-r--r--hw/kdrive/ati/r128_common.h170
-rw-r--r--hw/kdrive/ati/r128_composite.c564
-rw-r--r--hw/kdrive/ati/r128_sarea.h185
-rw-r--r--hw/kdrive/ati/radeon_common.h460
-rw-r--r--hw/kdrive/ati/radeon_composite.c875
-rw-r--r--hw/kdrive/ati/radeon_sarea.h221
-rw-r--r--hw/kdrive/chips/Makefile.am36
-rw-r--r--hw/kdrive/chips/chips.c334
-rw-r--r--hw/kdrive/chips/chips.h117
-rw-r--r--hw/kdrive/chips/chipsdraw.c491
-rw-r--r--hw/kdrive/chips/chipsstub.c67
-rw-r--r--hw/kdrive/epson/Makefile.am36
-rw-r--r--hw/kdrive/epson/Xepson.man26
-rw-r--r--hw/kdrive/epson/epson13806.c604
-rw-r--r--hw/kdrive/epson/epson13806.h132
-rw-r--r--hw/kdrive/epson/epson13806draw.c649
-rw-r--r--hw/kdrive/epson/epson13806draw.h119
-rw-r--r--hw/kdrive/epson/epson13806reg.h183
-rw-r--r--hw/kdrive/epson/epson13806stub.c69
-rw-r--r--hw/kdrive/i810/Makefile.am39
-rw-r--r--hw/kdrive/i810/i810.c2112
-rw-r--r--hw/kdrive/i810/i810.h511
-rw-r--r--hw/kdrive/i810/i810_cursor.c435
-rw-r--r--hw/kdrive/i810/i810_reg.h695
-rw-r--r--hw/kdrive/i810/i810_video.c1136
-rw-r--r--hw/kdrive/i810/i810draw.c352
-rw-r--r--hw/kdrive/i810/i810draw.h46
-rw-r--r--hw/kdrive/i810/i810stub.c92
-rw-r--r--hw/kdrive/igs/igs.c667
-rw-r--r--hw/kdrive/igs/igs.h327
-rw-r--r--hw/kdrive/igs/igscmap.c62
-rw-r--r--hw/kdrive/igs/igscurs.c345
-rw-r--r--hw/kdrive/igs/igsdraw.c1463
-rw-r--r--hw/kdrive/igs/igsdraw.h258
-rw-r--r--hw/kdrive/igs/igsreg.c969
-rw-r--r--hw/kdrive/igs/igsreg.h155
-rw-r--r--hw/kdrive/igs/igsstub.c71
-rw-r--r--hw/kdrive/ipaq/ipaq.c70
-rw-r--r--hw/kdrive/itsy/itsy.c325
-rw-r--r--hw/kdrive/itsy/itsy.h39
-rw-r--r--hw/kdrive/itsy/kbd.c251
-rw-r--r--hw/kdrive/itsy/ts.c210
-rw-r--r--hw/kdrive/mach64/Makefile.am43
-rw-r--r--hw/kdrive/mach64/mach64.c433
-rw-r--r--hw/kdrive/mach64/mach64.h653
-rw-r--r--hw/kdrive/mach64/mach64curs.c389
-rw-r--r--hw/kdrive/mach64/mach64draw.c590
-rw-r--r--hw/kdrive/mach64/mach64draw.h69
-rw-r--r--hw/kdrive/mach64/mach64stub.c75
-rw-r--r--hw/kdrive/mach64/mach64video.c994
-rw-r--r--hw/kdrive/mga/Makefile.am38
-rw-r--r--hw/kdrive/mga/g400_common.h185
-rw-r--r--hw/kdrive/mga/g400_composite.c510
-rw-r--r--hw/kdrive/mga/mga.c240
-rw-r--r--hw/kdrive/mga/mga.h164
-rw-r--r--hw/kdrive/mga/mgadraw.c324
-rw-r--r--hw/kdrive/mga/mgastub.c64
-rw-r--r--hw/kdrive/neomagic/Makefile.am49
-rw-r--r--hw/kdrive/neomagic/README15
-rw-r--r--hw/kdrive/neomagic/neo_draw.c210
-rw-r--r--hw/kdrive/neomagic/neomagic.c335
-rw-r--r--hw/kdrive/neomagic/neomagic.h210
-rw-r--r--hw/kdrive/neomagic/neomagicstub.c73
-rw-r--r--hw/kdrive/nvidia/Makefile.am39
-rw-r--r--hw/kdrive/nvidia/nvidia.c361
-rw-r--r--hw/kdrive/nvidia/nvidia.h247
-rw-r--r--hw/kdrive/nvidia/nvidiacurs.c389
-rw-r--r--hw/kdrive/nvidia/nvidiadraw.c238
-rw-r--r--hw/kdrive/nvidia/nvidiadraw.h69
-rw-r--r--hw/kdrive/nvidia/nvidiastub.c65
-rw-r--r--hw/kdrive/nvidia/nvidiavideo.c1016
-rw-r--r--hw/kdrive/pcmcia/modes.h65
-rw-r--r--hw/kdrive/pcmcia/pcmcia.c1199
-rw-r--r--hw/kdrive/pcmcia/pcmcia.h267
-rw-r--r--hw/kdrive/pcmcia/pcmciacurs.c451
-rw-r--r--hw/kdrive/pcmcia/pcmciarotate.c333
-rw-r--r--hw/kdrive/pcmcia/pcmciashadow.c199
-rw-r--r--hw/kdrive/pcmcia/pcmciastub.c63
-rw-r--r--hw/kdrive/pm2/Makefile.am37
-rw-r--r--hw/kdrive/pm2/glint_regs.h1370
-rw-r--r--hw/kdrive/pm2/pm2.c295
-rw-r--r--hw/kdrive/pm2/pm2.h162
-rw-r--r--hw/kdrive/pm2/pm2_draw.c318
-rw-r--r--hw/kdrive/pm2/pm2stub.c54
-rw-r--r--hw/kdrive/r128/Makefile.am36
-rw-r--r--hw/kdrive/r128/r128.c250
-rw-r--r--hw/kdrive/r128/r128.h123
-rw-r--r--hw/kdrive/r128/r128draw.c296
-rw-r--r--hw/kdrive/r128/r128stub.c67
-rw-r--r--hw/kdrive/savage/s3.c1835
-rw-r--r--hw/kdrive/savage/s3.h533
-rw-r--r--hw/kdrive/savage/s3.nick41
-rw-r--r--hw/kdrive/savage/s3clock.c84
-rw-r--r--hw/kdrive/savage/s3cmap.c122
-rw-r--r--hw/kdrive/savage/s3curs.c422
-rw-r--r--hw/kdrive/savage/s3draw.c3114
-rw-r--r--hw/kdrive/savage/s3draw.h468
-rw-r--r--hw/kdrive/savage/s3gc.c299
-rw-r--r--hw/kdrive/savage/s3reg.c1301
-rw-r--r--hw/kdrive/savage/s3reg.h227
-rw-r--r--hw/kdrive/savage/s3rtst.c141
-rw-r--r--hw/kdrive/savage/s3stub.c93
-rw-r--r--hw/kdrive/sis300/Makefile.am51
-rw-r--r--hw/kdrive/sis300/sis.c311
-rw-r--r--hw/kdrive/sis300/sis.h160
-rw-r--r--hw/kdrive/sis300/sis_draw.c320
-rw-r--r--hw/kdrive/sis300/sis_reg.h902
-rw-r--r--hw/kdrive/sis300/sis_stub.c77
-rw-r--r--hw/kdrive/sis530/sis.c921
-rw-r--r--hw/kdrive/sis530/sis.h1215
-rw-r--r--hw/kdrive/sis530/sisclock.c232
-rw-r--r--hw/kdrive/sis530/siscmap.c64
-rw-r--r--hw/kdrive/sis530/siscurs.c364
-rw-r--r--hw/kdrive/sis530/sisdraw.c1649
-rw-r--r--hw/kdrive/sis530/sisdraw.h180
-rw-r--r--hw/kdrive/sis530/sisio.c30
-rw-r--r--hw/kdrive/sis530/sisstub.c67
-rw-r--r--hw/kdrive/smi/Makefile.am41
-rw-r--r--hw/kdrive/smi/smi.c343
-rw-r--r--hw/kdrive/smi/smi.h257
-rw-r--r--hw/kdrive/smi/smidraw.c340
-rw-r--r--hw/kdrive/smi/smidraw.h69
-rw-r--r--hw/kdrive/smi/smistub.c67
-rw-r--r--hw/kdrive/smi/smivideo.c1015
-rw-r--r--hw/kdrive/trident/trident.c612
-rw-r--r--hw/kdrive/trident/trident.h269
-rw-r--r--hw/kdrive/trident/tridentcurs.c389
-rw-r--r--hw/kdrive/trident/tridentdraw.c496
-rw-r--r--hw/kdrive/trident/tridentdraw.h69
-rw-r--r--hw/kdrive/trident/tridentstub.c94
-rw-r--r--hw/kdrive/trio/s3.c1013
-rw-r--r--hw/kdrive/trio/s3.h1200
-rw-r--r--hw/kdrive/trio/s3clock.c85
-rw-r--r--hw/kdrive/trio/s3cmap.c70
-rw-r--r--hw/kdrive/trio/s3curs.c408
-rw-r--r--hw/kdrive/trio/s3stub.c66
-rw-r--r--hw/kdrive/ts300/ts300.c136
-rw-r--r--hw/kdrive/via/Makefile.am37
-rw-r--r--hw/kdrive/via/via.c435
-rw-r--r--hw/kdrive/via/via.h129
-rw-r--r--hw/kdrive/via/via_regs.h154
-rw-r--r--hw/kdrive/via/viadraw.c499
-rw-r--r--hw/kdrive/via/viadraw.h45
-rw-r--r--hw/kdrive/via/viastub.c135
-rw-r--r--hw/kdrive/vxworks/vxkbd.c263
-rw-r--r--hw/kdrive/vxworks/vxmouse.c122
-rw-r--r--hw/kdrive/vxworks/vxworks.c42
168 files changed, 3 insertions, 63343 deletions
diff --git a/configure.ac b/configure.ac
index 8716ba51d..403ce8c89 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2102,25 +2102,12 @@ hw/xquartz/doc/Makefile
hw/xquartz/mach-startup/Makefile
hw/xquartz/xpr/Makefile
hw/kdrive/Makefile
-hw/kdrive/ati/Makefile
-hw/kdrive/chips/Makefile
hw/kdrive/ephyr/Makefile
-hw/kdrive/epson/Makefile
hw/kdrive/fake/Makefile
hw/kdrive/fbdev/Makefile
-hw/kdrive/i810/Makefile
hw/kdrive/linux/Makefile
-hw/kdrive/mach64/Makefile
-hw/kdrive/mga/Makefile
-hw/kdrive/neomagic/Makefile
-hw/kdrive/nvidia/Makefile
-hw/kdrive/pm2/Makefile
-hw/kdrive/r128/Makefile
hw/kdrive/sdl/Makefile
-hw/kdrive/sis300/Makefile
-hw/kdrive/smi/Makefile
hw/kdrive/src/Makefile
hw/kdrive/vesa/Makefile
-hw/kdrive/via/Makefile
xorg-server.pc
])
diff --git a/hw/kdrive/Makefile.am b/hw/kdrive/Makefile.am
index 767e1c40d..c30a157c7 100644
--- a/hw/kdrive/Makefile.am
+++ b/hw/kdrive/Makefile.am
@@ -1,10 +1,9 @@
if KDRIVEVESA
-VESA_SUBDIRS = vesa ati chips i810 mach64 mga nvidia pm2 r128 \
- smi via
+VESA_SUBDIRS = vesa
endif
if BUILD_KDRIVEFBDEVLIB
-FBDEV_SUBDIRS = fbdev epson
+FBDEV_SUBDIRS = fbdev
endif
if XFAKESERVER
@@ -35,8 +34,7 @@ SUBDIRS = \
$(LINUX_SUBDIRS) \
$(SERVER_SUBDIRS)
-DIST_SUBDIRS = vesa ati chips epson i810 mach64 mga neomagic nvidia pm2 r128 \
- smi via fbdev sdl ephyr src linux fake sis300
+DIST_SUBDIRS = vesa fbdev sdl ephyr src linux fake
relink:
@for i in $(SERVER_SUBDIRS) ; do make -C $$i relink ; done
diff --git a/hw/kdrive/Xkdrive.man b/hw/kdrive/Xkdrive.man
index b4f1a977d..b37f9f10a 100644
--- a/hw/kdrive/Xkdrive.man
+++ b/hw/kdrive/Xkdrive.man
@@ -11,26 +11,6 @@ Xkdrive \- tiny X server
.B Xfbdev
.RI [ :display ]
.RI [ option ...]
-
-.B Xigs
-.RI [ :display ]
-.RI [ option ...]
-
-.B Xtrident
-.RI [ :display ]
-.RI [ option ...]
-
-.B Xsis530
-.RI [ :display ]
-.RI [ option ...]
-
-.B Xtrio
-.RI [ :display ]
-.RI [ option ...]
-
-.B Xitsy
-.RI [ :display ]
-.RI [ option ...]
.SH DESCRIPTION
.B Xkdrive
is a family of X servers designed to be particularly small. This
diff --git a/hw/kdrive/ati/Makefile.am b/hw/kdrive/ati/Makefile.am
deleted file mode 100644
index 31462bb04..000000000
--- a/hw/kdrive/ati/Makefile.am
+++ /dev/null
@@ -1,74 +0,0 @@
-#if DRI
-#DRI_INCLUDES = -I$(top_srcdir)/dri \
-# -I$(top_srcdir)/drm
-#DRI_LIBS = $(top_builddir)/dri/libdri.a \
-# $(top_builddir)/drm/libdrm.a
-#DRI_SOURCES = ati_dri.c \
-# ati_dri.h \
-# ati_dripriv.h \
-# r128_common.h \
-# r128_sarea.h \
-# radeon_common.h \
-# radeon_sarea.h
-#endif
-
-if KDRIVEFBDEV
-FBDEV_INCLUDES =-I$(top_srcdir)/hw/kdrive/fbdev
-FBDEV_LIBS = $(top_builddir)/hw/kdrive/fbdev/libfbdev.a
-endif
-
-if KDRIVEVESA
-VESA_INCLUDES = -I$(top_srcdir)/hw/kdrive/vesa
-VESA_LIBS = $(top_builddir)/hw/kdrive/vesa/libvesa.a
-endif
-
-INCLUDES = \
- @KDRIVE_INCS@ \
- $(DRI_INCLUDES) \
- $(FBDEV_INCLUDES) \
- $(VESA_INCLUDES) \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xati
-
-noinst_LIBRARIES = libati.a
-
-libati_a_SOURCES = \
- ati_cursor.c \
- ati_dma.c \
- ati_dma.h \
- ati_draw.c \
- ati_draw.h \
- ati_microcode.c \
- ati.c \
- ati.h \
- ati_reg.h \
- r128_composite.c \
- ati_video.c \
- radeon_composite.c \
- $(DRI_SOURCES)
-
-Xati_SOURCES = \
- ati_stub.c
-
-ATI_LIBS = \
- libati.a \
- $(FBDEV_LIBS) \
- $(VESA_LIBS) \
- $(DRI_LIBS) \
- @KDRIVE_LIBS@
-
-if GLX
-Xati_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xati_LDADD = \
- $(ATI_LIBS) \
- @KDRIVE_LIBS@
-
-Xati_DEPENDENCIES = \
- libati.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/ati/ati.c b/hw/kdrive/ati/ati.c
deleted file mode 100644
index c4f67e171..000000000
--- a/hw/kdrive/ati/ati.c
+++ /dev/null
@@ -1,761 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "ati.h"
-#include "ati_reg.h"
-#if defined(USE_DRI) && defined(GLXEXT)
-#include "ati_sarea.h"
-#endif
-
-static Bool ATIIsAGP(ATICardInfo *atic);
-
-#define CAP_SERIESMASK 0xf
-#define CAP_R128 0x1 /* If it's a Rage 128 */
-#define CAP_R100 0x2 /* If it's an r100 series radeon. */
-#define CAP_R200 0x3 /* If it's an r200 series radeon. */
-#define CAP_R300 0x4 /* If it's an r300 series radeon. */
-
-#define CAP_FEATURESMASK 0xf0
-#define CAP_NOAGP 0x10 /* If it's a PCI-only card. */
-
-struct pci_id_entry ati_pci_ids[] = {
- {0x1002, 0x4136, 0x2, "ATI Radeon RS100"},
- {0x1002, 0x4137, 0x2, "ATI Radeon RS200"},
- {0x1002, 0x4237, 0x2, "ATI Radeon RS250"},
- {0x1002, 0x4144, 0x4, "ATI Radeon R300 AD"},
- {0x1002, 0x4145, 0x4, "ATI Radeon R300 AE"},
- {0x1002, 0x4146, 0x4, "ATI Radeon R300 AF"},
- {0x1002, 0x4147, 0x4, "ATI Radeon R300 AG"},
- {0x1002, 0x4148, 0x4, "ATI Radeon R350 AH"},
- {0x1002, 0x4149, 0x4, "ATI Radeon R350 AI"},
- {0x1002, 0x414a, 0x4, "ATI Radeon R350 AJ"},
- {0x1002, 0x414b, 0x4, "ATI Radeon R350 AK"},
- {0x1002, 0x4150, 0x4, "ATI Radeon RV350 AP"},
- {0x1002, 0x4151, 0x4, "ATI Radeon RV350 AQ"},
- {0x1002, 0x4152, 0x4, "ATI Radeon RV350 AR"},
- {0x1002, 0x4153, 0x4, "ATI Radeon RV350 AS"},
- {0x1002, 0x4154, 0x4, "ATI Radeon RV350 AT"},
- {0x1002, 0x4156, 0x4, "ATI Radeon RV350 AV"},
- {0x1002, 0x4242, 0x3, "ATI Radeon R200 BB"},
- {0x1002, 0x4243, 0x3, "ATI Radeon R200 BC"},
- {0x1002, 0x4336, 0x2, "ATI Radeon RS100"},
- {0x1002, 0x4337, 0x2, "ATI Radeon RS200"},
- {0x1002, 0x4437, 0x2, "ATI Radeon RS250"},
- {0x1002, 0x4964, 0x2, "ATI Radeon RV250 Id"},
- {0x1002, 0x4965, 0x2, "ATI Radeon RV250 Ie"},
- {0x1002, 0x4966, 0x2, "ATI Radeon RV250 If"},
- {0x1002, 0x4967, 0x2, "ATI Radeon R250 Ig"},
- {0x1002, 0x4c45, 0x11, "ATI Rage 128 LE"},
- {0x1002, 0x4c46, 0x1, "ATI Rage 128 LF"},
- {0x1002, 0x4c57, 0x2, "ATI Radeon Mobiliy M7 RV200 LW (7500)"},
- {0x1002, 0x4c58, 0x2, "ATI Radeon Mobiliy M7 RV200 LX (7500)"},
- {0x1002, 0x4c59, 0x2, "ATI Radeon Mobility M6 LY"},
- {0x1002, 0x4c5a, 0x2, "ATI Radeon Mobility M6 LZ"},
- {0x1002, 0x4c64, 0x3, "ATI Radeon RV250 Ld"},
- {0x1002, 0x4c65, 0x3, "ATI Radeon RV250 Le"},
- {0x1002, 0x4c66, 0x3, "ATI Radeon Mobility M9 RV250 Lf"},
- {0x1002, 0x4c67, 0x3, "ATI Radeon RV250 Lg"},
- {0x1002, 0x4d46, 0x1, "ATI Rage 128 MF"},
- {0x1002, 0x4d46, 0x1, "ATI Rage 128 ML"},
- {0x1002, 0x4e44, 0x4, "ATI Radeon R300 ND"},
- {0x1002, 0x4e45, 0x4, "ATI Radeon R300 NE"},
- {0x1002, 0x4e46, 0x4, "ATI Radeon R300 NF"},
- {0x1002, 0x4e47, 0x4, "ATI Radeon R300 NG"},
- {0x1002, 0x4e48, 0x4, "ATI Radeon R350 NH"},
- {0x1002, 0x4e49, 0x4, "ATI Radeon R350 NI"},
- {0x1002, 0x4e4a, 0x4, "ATI Radeon R350 NJ"},
- {0x1002, 0x4e4b, 0x4, "ATI Radeon R350 NK"},
- {0x1002, 0x4e50, 0x4, "ATI Radeon Mobility RV350 NP"},
- {0x1002, 0x4e51, 0x4, "ATI Radeon Mobility RV350 NQ"},
- {0x1002, 0x4e52, 0x4, "ATI Radeon Mobility RV350 NR"},
- {0x1002, 0x4e53, 0x4, "ATI Radeon Mobility RV350 NS"},
- {0x1002, 0x4e54, 0x4, "ATI Radeon Mobility RV350 NT"},
- {0x1002, 0x4e56, 0x4, "ATI Radeon Mobility RV350 NV"},
- {0x1002, 0x5041, 0x1, "ATI Rage 128 PA"},
- {0x1002, 0x5042, 0x1, "ATI Rage 128 PB"},
- {0x1002, 0x5043, 0x1, "ATI Rage 128 PC"},
- {0x1002, 0x5044, 0x11, "ATI Rage 128 PD"},
- {0x1002, 0x5045, 0x1, "ATI Rage 128 PE"},
- {0x1002, 0x5046, 0x1, "ATI Rage 128 PF"},
- {0x1002, 0x5047, 0x1, "ATI Rage 128 PG"},
- {0x1002, 0x5048, 0x1, "ATI Rage 128 PH"},
- {0x1002, 0x5049, 0x1, "ATI Rage 128 PI"},
- {0x1002, 0x504a, 0x1, "ATI Rage 128 PJ"},
- {0x1002, 0x504b, 0x1, "ATI Rage 128 PK"},
- {0x1002, 0x504c, 0x1, "ATI Rage 128 PL"},
- {0x1002, 0x504d, 0x1, "ATI Rage 128 PM"},
- {0x1002, 0x504e, 0x1, "ATI Rage 128 PN"},
- {0x1002, 0x504f, 0x1, "ATI Rage 128 PO"},
- {0x1002, 0x5050, 0x11, "ATI Rage 128 PP"},
- {0x1002, 0x5051, 0x1, "ATI Rage 128 PQ"},
- {0x1002, 0x5052, 0x11, "ATI Rage 128 PR"},
- {0x1002, 0x5053, 0x1, "ATI Rage 128 PS"},
- {0x1002, 0x5054, 0x1, "ATI Rage 128 PT"},
- {0x1002, 0x5055, 0x1, "ATI Rage 128 PU"},
- {0x1002, 0x5056, 0x1, "ATI Rage 128 PV"},
- {0x1002, 0x5057, 0x1, "ATI Rage 128 PW"},
- {0x1002, 0x5058, 0x1, "ATI Rage 128 PX"},
- {0x1002, 0x5144, 0x2, "ATI Radeon R100 QD"},
- {0x1002, 0x5145, 0x2, "ATI Radeon R100 QE"},
- {0x1002, 0x5146, 0x2, "ATI Radeon R100 QF"},
- {0x1002, 0x5147, 0x2, "ATI Radeon R100 QG"},
- {0x1002, 0x5148, 0x3, "ATI Radeon R200 QH"},
- {0x1002, 0x514c, 0x3, "ATI Radeon R200 QL"},
- {0x1002, 0x514d, 0x3, "ATI Radeon R200 QM"},
- {0x1002, 0x5157, 0x2, "ATI Radeon RV200 QW (7500)"},
- {0x1002, 0x5158, 0x2, "ATI Radeon RV200 QX (7500)"},
- {0x1002, 0x5159, 0x2, "ATI Radeon RV100 QY"},
- {0x1002, 0x515a, 0x2, "ATI Radeon RV100 QZ"},
- {0x1002, 0x5245, 0x11, "ATI Rage 128 RE"},
- {0x1002, 0x5246, 0x1, "ATI Rage 128 RF"},
- {0x1002, 0x5247, 0x1, "ATI Rage 128 RG"},
- {0x1002, 0x524b, 0x11, "ATI Rage 128 RK"},
- {0x1002, 0x524c, 0x1, "ATI Rage 128 RL"},
- {0x1002, 0x5345, 0x1, "ATI Rage 128 SE"},
- {0x1002, 0x5346, 0x1, "ATI Rage 128 SF"},
- {0x1002, 0x5347, 0x1, "ATI Rage 128 SG"},
- {0x1002, 0x5348, 0x1, "ATI Rage 128 SH"},
- {0x1002, 0x534b, 0x1, "ATI Rage 128 SK"},
- {0x1002, 0x534c, 0x1, "ATI Rage 128 SL"},
- {0x1002, 0x534d, 0x1, "ATI Rage 128 SM"},
- {0x1002, 0x534e, 0x1, "ATI Rage 128 SN"},
- {0x1002, 0x5446, 0x1, "ATI Rage 128 TF"},
- {0x1002, 0x544c, 0x1, "ATI Rage 128 TL"},
- {0x1002, 0x5452, 0x1, "ATI Rage 128 TR"},
- {0x1002, 0x5453, 0x1, "ATI Rage 128 TS"},
- {0x1002, 0x5454, 0x1, "ATI Rage 128 TT"},
- {0x1002, 0x5455, 0x1, "ATI Rage 128 TU"},
- {0x1002, 0x5834, 0x3, "ATI Radeon RS300"},
- {0x1002, 0x5835, 0x3, "ATI Radeon RS300 Mobility"},
- {0x1002, 0x5941, 0x3, "ATI Radeon RV280 (9200)"},
- {0x1002, 0x5961, 0x3, "ATI Radeon RV280 (9200 SE)"},
- {0x1002, 0x5964, 0x3, "ATI Radeon RV280 (9200 SE)"},
- {0x1002, 0x5c60, 0x3, "ATI Radeon RV280"},
- {0x1002, 0x5c61, 0x3, "ATI Radeon RV280 Mobility"},
- {0x1002, 0x5c62, 0x3, "ATI Radeon RV280"},
- {0x1002, 0x5c63, 0x3, "ATI Radeon RV280 Mobility"},
- {0x1002, 0x5c64, 0x3, "ATI Radeon RV280"},
- {0, 0, 0, NULL}
-};
-
-static char *
-make_busid(KdCardAttr *attr)
-{
- char *busid;
-
- busid = xalloc(20);
- if (busid == NULL)
- return NULL;
- snprintf(busid, 20, "pci:%04x:%02x:%02x.%d", attr->domain, attr->bus,
- attr->slot, attr->func);
- return busid;
-}
-
-static Bool
-ATICardInit(KdCardInfo *card)
-{
- ATICardInfo *atic;
- int i;
- Bool initialized = FALSE;
-
- atic = xcalloc(sizeof(ATICardInfo), 1);
- if (atic == NULL)
- return FALSE;
-
-#ifdef KDRIVEFBDEV
- if (!initialized && fbdevInitialize(card, &atic->backend_priv.fbdev)) {
- atic->use_fbdev = TRUE;
- initialized = TRUE;
- atic->backend_funcs.cardfini = fbdevCardFini;
- atic->backend_funcs.scrfini = fbdevScreenFini;
- atic->backend_funcs.initScreen = fbdevInitScreen;
- atic->backend_funcs.finishInitScreen = fbdevFinishInitScreen;
- atic->backend_funcs.createRes = fbdevCreateResources;
- atic->backend_funcs.preserve = fbdevPreserve;
- atic->backend_funcs.restore = fbdevRestore;
- atic->backend_funcs.dpms = fbdevDPMS;
- atic->backend_funcs.enable = fbdevEnable;
- atic->backend_funcs.disable = fbdevDisable;
- atic->backend_funcs.getColors = fbdevGetColors;
- atic->backend_funcs.putColors = fbdevPutColors;
-#ifdef RANDR
- atic->backend_funcs.randrSetConfig = fbdevRandRSetConfig;
-#endif
- }
-#endif
-#ifdef KDRIVEVESA
- if (!initialized && vesaInitialize(card, &atic->backend_priv.vesa)) {
- atic->use_vesa = TRUE;
- initialized = TRUE;
- atic->backend_funcs.cardfini = vesaCardFini;
- atic->backend_funcs.scrfini = vesaScreenFini;
- atic->backend_funcs.initScreen = vesaInitScreen;
- atic->backend_funcs.finishInitScreen = vesaFinishInitScreen;
- atic->backend_funcs.createRes = vesaCreateResources;
- atic->backend_funcs.preserve = vesaPreserve;
- atic->backend_funcs.restore = vesaRestore;
- atic->backend_funcs.dpms = vesaDPMS;
- atic->backend_funcs.enable = vesaEnable;
- atic->backend_funcs.disable = vesaDisable;
- atic->backend_funcs.getColors = vesaGetColors;
- atic->backend_funcs.putColors = vesaPutColors;
-#ifdef RANDR
- atic->backend_funcs.randrSetConfig = vesaRandRSetConfig;
-#endif
- }
-#endif
-
- if (!initialized || !ATIMapReg(card, atic)) {
- xfree(atic);
- return FALSE;
- }
-
- atic->busid = make_busid(&card->attr);
- if (atic->busid == NULL) {
- xfree(atic);
- return FALSE;
- }
-
-#ifdef USE_DRI
- /* We demand identification by busid, not driver name */
- atic->drmFd = drmOpen(NULL, atic->busid);
- if (atic->drmFd < 0)
- ErrorF("Failed to open DRM, DRI disabled.\n");
-#endif /* USE_DRI */
-
- card->driver = atic;
-
- for (i = 0; ati_pci_ids[i].name != NULL; i++) {
- if (ati_pci_ids[i].device == card->attr.deviceID) {
- atic->pci_id = &ati_pci_ids[i];
- break;
- }
- }
-
- if ((atic->pci_id->caps & CAP_SERIESMASK) != CAP_R128)
- atic->is_radeon = TRUE;
- if ((atic->pci_id->caps & CAP_SERIESMASK) == CAP_R100)
- atic->is_r100 = TRUE;
- if ((atic->pci_id->caps & CAP_SERIESMASK) == CAP_R200)
- atic->is_r200 = TRUE;
- if ((atic->pci_id->caps & CAP_SERIESMASK) == CAP_R300)
- atic->is_r300 = TRUE;
-
- atic->is_agp = ATIIsAGP(atic);
-
- ErrorF("Using ATI card: %s (%s) at %s\n", atic->pci_id->name,
- atic->is_agp ? "AGP" : "PCI", atic->busid);
-
- return TRUE;
-}
-
-static void
-ATICardFini(KdCardInfo *card)
-{
- ATICardInfo *atic = (ATICardInfo *)card->driver;
-
- ATIUnmapReg(card, atic);
- atic->backend_funcs.cardfini(card);
-}
-
-/*
- * Once screen->off_screen_base is set, this function
- * allocates the remaining memory appropriately
- */
-
-static void
-ATISetOffscreen (KdScreenInfo *screen)
-{
- ATICardInfo(screen);
-#if defined(USE_DRI) && defined(GLXEXT)
- ATIScreenInfo *atis = (ATIScreenInfo *)screen->driver;
- int l;
-#endif
- int screen_size;
- char *mmio = atic->reg_base;
-
- /* check (and adjust) pitch */
- if (mmio)
- {
- int byteStride = screen->fb[0].byteStride;
- int bitStride;
- int pixelStride;
- int bpp = screen->fb[0].bitsPerPixel;
-
- /*
- * Ensure frame buffer is correctly aligned
- */
- if (byteStride & 0x3f)
- {
- byteStride = (byteStride + 0x3f) & ~0x3f;
- bitStride = byteStride * 8;
- pixelStride = bitStride / bpp;
-
- screen->fb[0].byteStride = byteStride;
- screen->fb[0].pixelStride = pixelStride;
- }
- }
-
- screen_size = screen->fb[0].byteStride * screen->height;
-
- screen->off_screen_base = screen_size;
-
-#if defined(USE_DRI) && defined(GLXEXT)
- /* Reserve a static area for the back buffer the same size as the
- * visible screen. XXX: This would be better initialized in ati_dri.c
- * when GLX is set up, but the offscreen memory manager's allocations
- * don't last through VT switches, while the kernel's understanding of
- * offscreen locations does.
- */
- atis->frontOffset = 0;
- atis->frontPitch = screen->fb[0].byteStride;
-
- if (screen->off_screen_base + screen_size <= screen->memory_size) {
- atis->backOffset = screen->off_screen_base;
- atis->backPitch = screen->fb[0].byteStride;
- screen->off_screen_base += screen_size;
- }
-
- /* Reserve the depth span for Rage 128 */
- if (!atic->is_radeon && screen->off_screen_base +
- screen->fb[0].byteStride <= screen->memory_size) {
- atis->spanOffset = screen->off_screen_base;
- screen->off_screen_base += screen->fb[0].byteStride;
- }
-
- /* Reserve the static depth buffer, which happens to be the same
- * bitsPerPixel as the screen.
- */
- if (screen->off_screen_base + screen_size <= screen->memory_size) {
- atis->depthOffset = screen->off_screen_base;
- atis->depthPitch = screen->fb[0].byteStride;
- screen->off_screen_base += screen_size;
- }
-
- /* Reserve approx. half of remaining offscreen memory for local
- * textures. Round down to a whole number of texture regions.
- */
- atis->textureSize = (screen->memory_size - screen->off_screen_base) / 2;
- l = ATILog2(atis->textureSize / ATI_NR_TEX_REGIONS);
- if (l < ATI_LOG_TEX_GRANULARITY)
- l = ATI_LOG_TEX_GRANULARITY;
- atis->textureSize = (atis->textureSize >> l) << l;
- if (atis->textureSize >= 512 * 1024) {
- atis->textureOffset = screen->off_screen_base;
- screen->off_screen_base += atis->textureSize;
- } else {
- /* Minimum texture size is for 2 256x256x32bpp textures */
- atis->textureSize = 0;
- }
-#endif /* USE_DRI && GLXEXT */
-}
-
-static void
-ATISetPitch (KdScreenInfo *screen)
-{
- ATICardInfo(screen);
-#if defined(USE_DRI) && defined(GLXEXT)
- ATIScreenInfo *atis = (ATIScreenInfo *)screen->driver;
- int l;
-#endif
- char *mmio = atic->reg_base;
-
- /* check (and adjust) pitch for radeon */
- if (mmio)
- {
- int byteStride = screen->fb[0].byteStride;
- int bitStride;
- int pixelStride;
- int bpp = screen->fb[0].bitsPerPixel;
- CARD32 crtc_pitch;
- CARD32 crtc2_pitch;
-#if 0
- CARD32 crtc_ext_cntl;
- CARD32 dac_cntl;
-#endif
- bitStride = byteStride * 8;
- pixelStride = bitStride / bpp;
-
- crtc_pitch = (pixelStride >> 3);
- crtc_pitch |= crtc_pitch << 16;
- crtc2_pitch = (pixelStride >> 3);
- crtc2_pitch |= crtc2_pitch << 16;
-#if 0
- crtc_ext_cntl = MMIO_IN32 (mmio, ATI_REG_CRTC_EXT_CNTL);
- dac_cntl = MMIO_IN32 (mmio, ATI_REG_DAC_CNTL);
- /* Turn off the screen */
- MMIO_OUT32 (mmio, ATI_REG_CRTC_EXT_CNTL,
- crtc_ext_cntl |
- ATI_CRTC_VSYNC_DIS |
- ATI_CRTC_HSYNC_DIS |
- ATI_CRTC_DISPLAY_DIS);
- MMIO_OUT32 (mmio, ATI_REG_DAC_CNTL,
- dac_cntl |
- ATI_DAC_RANGE_CNTL |
- ATI_DAC_BLANKING);
-#endif
- MMIO_OUT32 (mmio, ATI_REG_CRTC_PITCH, crtc_pitch);
- MMIO_OUT32 (mmio, ATI_REG_CRTC2_PITCH, crtc2_pitch);
-#if 0
- /* Turn the screen back on */
- MMIO_OUT32 (mmio, ATI_REG_CRTC_EXT_CNTL,
- crtc_ext_cntl);
- MMIO_OUT32 (mmio, ATI_REG_DAC_CNTL,
- dac_cntl);
-#endif
- }
-}
-
-static Bool
-ATIScreenInit(KdScreenInfo *screen)
-{
- ATIScreenInfo *atis;
- ATICardInfo(screen);
- Bool success = FALSE;
-
- atis = xcalloc(sizeof(ATIScreenInfo), 1);
- if (atis == NULL)
- return FALSE;
-
- atis->atic = atic;
- atis->screen = screen;
- screen->driver = atis;
-
- if (screen->fb[0].depth == 0)
- screen->fb[0].depth = 16;
-#ifdef KDRIVEFBDEV
- if (atic->use_fbdev) {
- success = fbdevScreenInitialize(screen,
- &atis->backend_priv.fbdev);
- }
-#endif
-#ifdef KDRIVEVESA
- if (atic->use_vesa) {
- success = vesaScreenInitialize(screen,
- &atis->backend_priv.vesa);
- }
-#endif
-
- if (!success) {
- screen->driver = NULL;
- xfree(atis);
- return FALSE;
- }
-
- ATISetOffscreen (screen);
-
- return TRUE;
-}
-
-#ifdef RANDR
-static Bool
-ATIRandRSetConfig (ScreenPtr pScreen,
- Rotation randr,
- int rate,
- RRScreenSizePtr pSize)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- ATICardInfo *atic = screen->card->driver;
- Bool ret;
-
- ATIDrawDisable (pScreen);
- ret = atic->backend_funcs.randrSetConfig(pScreen, randr, rate, pSize);
- ATISetOffscreen (screen);
- ATISetPitch (screen);
- /*
- * Set frame buffer mapping
- */
- (*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen),
- pScreen->width,
- pScreen->height,
- screen->fb[0].depth,
- screen->fb[0].bitsPerPixel,
- screen->fb[0].byteStride,
- screen->fb[0].frameBuffer);
-
- ATIDrawEnable (pScreen);
- return ret;
-}
-
-static Bool
-ATIRandRInit (ScreenPtr pScreen)
-{
- rrScrPrivPtr pScrPriv;
-
- pScrPriv = rrGetScrPriv(pScreen);
- pScrPriv->rrSetConfig = ATIRandRSetConfig;
- return TRUE;
-}
-#endif
-
-static void
-ATIScreenFini(KdScreenInfo *screen)
-{
- ATIScreenInfo *atis = (ATIScreenInfo *)screen->driver;
- ATICardInfo *atic = screen->card->driver;
-
-#ifdef XV
- ATIFiniVideo(screen->pScreen);
-#endif
-
- atic->backend_funcs.scrfini(screen);
- xfree(atis);
- screen->driver = 0;
-}
-
-Bool
-ATIMapReg(KdCardInfo *card, ATICardInfo *atic)
-{
- atic->reg_base = (char *)KdMapDevice(ATI_REG_BASE(card),
- ATI_REG_SIZE(card));
-
- if (atic->reg_base == NULL)
- return FALSE;
-
- KdSetMappedMode(ATI_REG_BASE(card), ATI_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
-
- return TRUE;
-}
-
-void
-ATIUnmapReg(KdCardInfo *card, ATICardInfo *atic)
-{
- if (atic->reg_base) {
- KdResetMappedMode(ATI_REG_BASE(card), ATI_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- KdUnmapDevice((void *)atic->reg_base, ATI_REG_SIZE(card));
- atic->reg_base = 0;
- }
-}
-
-static Bool
-ATIInitScreen(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
-
-#ifdef XV
- ATIInitVideo(pScreen);
-#endif
- return atic->backend_funcs.initScreen(pScreen);
-}
-
-static Bool
-ATIFinishInitScreen(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
-
- if (!atic->backend_funcs.finishInitScreen(pScreen))
- return FALSE;
-#ifdef RANDR
- if (!ATIRandRInit (pScreen))
- return FALSE;
-#endif
- return TRUE;
-}
-
-static Bool
-ATICreateResources(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
-
- return atic->backend_funcs.createRes(pScreen);
-}
-
-static void
-ATIPreserve(KdCardInfo *card)
-{
- ATICardInfo *atic = card->driver;
- char *mmio = atic->reg_base;
-
- atic->backend_funcs.preserve(card);
- if (atic->is_radeon && mmio)
- {
- atic->crtc_pitch = MMIO_IN32(mmio, ATI_REG_CRTC_PITCH);
- atic->crtc2_pitch = MMIO_IN32(mmio, ATI_REG_CRTC2_PITCH);
-
- }
-}
-
-static void
-ATIRestore(KdCardInfo *card)
-{
- ATICardInfo *atic = card->driver;
- char *mmio = atic->reg_base;
-
- if (mmio)
- {
- MMIO_OUT32(mmio, ATI_REG_CRTC_PITCH, atic->crtc_pitch);
- MMIO_OUT32(mmio, ATI_REG_CRTC2_PITCH, atic->crtc2_pitch);
- }
- ATIUnmapReg(card, atic);
-
- atic->backend_funcs.restore(card);
-}
-
-static Bool
-ATIDPMS(ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
-
- return atic->backend_funcs.dpms(pScreen, mode);
-}
-
-static Bool
-ATIEnable(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
-
- if (!atic->backend_funcs.enable(pScreen))
- return FALSE;
-
- if ((atic->reg_base == NULL) && !ATIMapReg(pScreenPriv->screen->card,
- atic))
- return FALSE;
-
- ATISetOffscreen (pScreenPriv->screen);
-
- ATISetPitch (pScreenPriv->screen);
-
- return TRUE;
-}
-
-static void
-ATIDisable(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
-#if defined(USE_DRI) && defined(GLXEXT)
- ATIScreenInfo(pScreenPriv);
-#endif /* USE_DRI && GLXEXT */
- ATICardInfo(pScreenPriv);
-
- ATIUnmapReg(pScreenPriv->card, atic);
-
- atic->backend_funcs.disable(pScreen);
-}
-
-static void
-ATIGetColors(ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
-
- atic->backend_funcs.getColors(pScreen, fb, n, pdefs);
-}
-
-static void
-ATIPutColors(ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
-
- atic->backend_funcs.putColors(pScreen, fb, n, pdefs);
-}
-
-/* Compute log base 2 of val. */
-int
-ATILog2(int val)
-{
- int bits;
-
- for (bits = 0; val != 0; val >>= 1, ++bits)
- ;
- return bits - 1;
-}
-
-static Bool
-ATIIsAGP(ATICardInfo *atic)
-{
- char *mmio = atic->reg_base;
- CARD32 cap_ptr, cap_id;
-
- if (mmio == NULL)
- return FALSE;
-
- if (MMIO_IN32(mmio, ATI_REG_PCI_CFG_STATUS) & ATI_CAP_LIST) {
- cap_ptr = MMIO_IN32(mmio, ATI_REG_PCI_CFG_CAPABILITIES_PTR) &
- ATI_CAP_PTR_MASK;
- while (cap_ptr != ATI_CAP_ID_NULL) {
- cap_id = MMIO_IN32(mmio, ATI_PCI_CFG_OFFSET + cap_ptr);
- if ((cap_id & 0xff) == ATI_CAP_ID_AGP)
- return TRUE;
- cap_ptr = (cap_id >> 8) & ATI_CAP_PTR_MASK;
- }
- }
-
- return FALSE;
-}
-
-/* This function is required to work around a hardware bug in some (all?)
- * revisions of the R300. This workaround should be called after every
- * CLOCK_CNTL_INDEX register access. If not, register reads afterward
- * may not be correct.
- */
-void R300CGWorkaround(ATIScreenInfo *atis) {
- ATICardInfo *atic = atis->atic;
- char *mmio = atic->reg_base;
- CARD32 save;
-
- save = MMIO_IN32(mmio, ATI_REG_CLOCK_CNTL_INDEX);
- MMIO_OUT32(mmio, ATI_REG_CLOCK_CNTL_INDEX, save & ~(0x3f |
- ATI_PLL_WR_EN));
- MMIO_IN32(mmio, ATI_REG_CLOCK_CNTL_INDEX);
- MMIO_OUT32(mmio, ATI_REG_CLOCK_CNTL_INDEX, save);
-}
-
-KdCardFuncs ATIFuncs = {
- ATICardInit, /* cardinit */
- ATIScreenInit, /* scrinit */
- ATIInitScreen, /* initScreen */
- ATIFinishInitScreen, /* finishInitScreen */
- ATICreateResources, /* createRes */
- ATIPreserve, /* preserve */
- ATIEnable, /* enable */
- ATIDPMS, /* dpms */
- ATIDisable, /* disable */
- ATIRestore, /* restore */
- ATIScreenFini, /* scrfini */
- ATICardFini, /* cardfini */
-
- ATICursorInit, /* initCursor */
- ATICursorEnable, /* enableCursor */
- ATICursorDisable, /* disableCursor */
- ATICursorFini, /* finiCursor */
- ATIRecolorCursor, /* recolorCursor */
-
- ATIDrawInit, /* initAccel */
- ATIDrawEnable, /* enableAccel */
- ATIDrawDisable, /* disableAccel */
- ATIDrawFini, /* finiAccel */
-
- ATIGetColors, /* getColors */
- ATIPutColors, /* putColors */
-};
diff --git a/hw/kdrive/ati/ati.h b/hw/kdrive/ati/ati.h
deleted file mode 100644
index 3ff3e3ff3..000000000
--- a/hw/kdrive/ati/ati.h
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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 _ATI_H_
-#define _ATI_H_
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-
-#ifdef KDRIVEFBDEV
-#include <fbdev.h>
-#endif
-#ifdef KDRIVEVESA
-#include <vesa.h>
-#endif
-
-#include "kxv.h"
-
-#undef XF86DRI
-#ifdef XF86DRI
-#define USE_DRI
-#include "xf86drm.h"
-#include "dri.h"
-#ifdef GLXEXT
-#include "GL/glxint.h"
-#include "GL/glxtokens.h"
-#include "ati_dripriv.h"
-#endif
-#endif
-
-#define ATI_REG_BASE(c) ((c)->attr.address[1])
-#define ATI_REG_SIZE(c) (0x4000)
-
-#ifdef __powerpc__
-
-static __inline__ void
-MMIO_OUT32(__volatile__ void *base, const unsigned long offset,
- const unsigned int val)
-{
- __asm__ __volatile__(
- "stwbrx %1,%2,%3\n\t"
- "eieio"
- : "=m" (*((volatile unsigned char *)base+offset))
- : "r" (val), "b" (base), "r" (offset));
-}
-
-static __inline__ CARD32
-MMIO_IN32(__volatile__ void *base, const unsigned long offset)
-{
- register unsigned int val;
- __asm__ __volatile__(
- "lwbrx %0,%1,%2\n\t"
- "eieio"
- : "=r" (val)
- : "b" (base), "r" (offset),
- "m" (*((volatile unsigned char *)base+offset)));
- return val;
-}
-
-#else
-
-#define MMIO_OUT32(mmio, a, v) (*(VOL32 *)((mmio) + (a)) = (v))
-#define MMIO_IN32(mmio, a) (*(VOL32 *)((mmio) + (a)))
-
-#endif
-
-#define MMIO_OUT8(mmio, a, v) (*(VOL8 *)((mmio) + (a)) = (v))
-#define MMIO_IN8(mmio, a, v) (*(VOL8 *)((mmio) + (a)))
-
-#define INPLL(mmio, addr) \
- (MMIO_OUT8(mmio, ATI_REG_CLOCK_CNTL_INDEX, addr), \
- MMIO_IN32(mmio, ATI_REG_CLOCK_CNTL_DATA))
-
-#define OUTPLL(mmio, addr, val) do { \
- MMIO_OUT8(mmio, ATI_REG_CLOCK_CNTL_INDEX, (addr) | ATI_PLL_WR_EN); \
- MMIO_OUT32(mmio, ATI_REG_CLOCK_CNTL_DATA, val); \
-} while (0)
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-struct pci_id_entry {
- CARD16 vendor;
- CARD16 device;
- CARD8 caps;
- char *name;
-};
-
-struct backend_funcs {
- void (*cardfini)(KdCardInfo *);
- void (*scrfini)(KdScreenInfo *);
- Bool (*initScreen)(ScreenPtr);
- Bool (*finishInitScreen)(ScreenPtr pScreen);
- Bool (*createRes)(ScreenPtr);
- void (*preserve)(KdCardInfo *);
- void (*restore)(KdCardInfo *);
- Bool (*dpms)(ScreenPtr, int);
- Bool (*enable)(ScreenPtr);
- void (*disable)(ScreenPtr);
- void (*getColors)(ScreenPtr, int, int, xColorItem *);
- void (*putColors)(ScreenPtr, int, int, xColorItem *);
-#ifdef RANDR
- Bool (*randrSetConfig) (ScreenPtr, Rotation, int, RRScreenSizePtr);
-#endif
-};
-
-typedef struct _ATICardInfo {
- union {
-#ifdef KDRIVEFBDEV
- FbdevPriv fbdev;
-#endif
-#ifdef KDRIVEVESA
- VesaCardPrivRec vesa;
-#endif
- } backend_priv;
- struct backend_funcs backend_funcs;
-
- struct pci_id_entry *pci_id;
- char *reg_base;
- Bool is_radeon;
- Bool is_r100;
- Bool is_r200;
- Bool is_r300;
- Bool is_agp;
- char *busid;
- CARD32 crtc_pitch;
- CARD32 crtc2_pitch;
-#ifdef USE_DRI
- int drmFd;
-#endif /* USE_DRI */
- Bool use_fbdev, use_vesa;
-} ATICardInfo;
-
-#define getATICardInfo(kd) ((ATICardInfo *) ((kd)->card->driver))
-#define ATICardInfo(kd) ATICardInfo *atic = getATICardInfo(kd)
-
-typedef struct _ATICursor {
- int width, height;
- int xhot, yhot;
-
- Bool has_cursor;
- CursorPtr pCursor;
- Pixel source, mask;
- KdOffscreenArea *area;
-} ATICursor;
-
-typedef struct _ATIPortPriv {
- int brightness;
- int saturation;
- RegionRec clip;
- CARD32 size;
- KdOffscreenArea *off_screen;
- DrawablePtr pDraw;
- PixmapPtr pPixmap;
-
- CARD32 src_offset;
- CARD32 src_pitch;
- CARD8 *src_addr;
-
- int id;
- int src_x1, src_y1, src_x2, src_y2;
- int dst_x1, dst_y1, dst_x2, dst_y2;
- int src_w, src_h, dst_w, dst_h;
-} ATIPortPrivRec, *ATIPortPrivPtr;
-
-typedef struct _dmaBuf {
- int size;
- int used;
- void *address;
-#ifdef USE_DRI
- drmBufPtr drmBuf;
-#endif
-} dmaBuf;
-
-typedef struct _ATIScreenInfo {
- union {
-#ifdef KDRIVEFBDEV
- FbdevScrPriv fbdev;
-#endif
-#ifdef KDRIVEVESA
- VesaScreenPrivRec vesa;
-#endif
- } backend_priv;
- KaaScreenInfoRec kaa;
-
- ATICardInfo *atic;
- KdScreenInfo *screen;
-
- int scratch_offset;
- int scratch_next;
- KdOffscreenArea *scratch_area;
-
- ATICursor cursor;
-
- KdVideoAdaptorPtr pAdaptor;
- int num_texture_ports;
-
- Bool using_pio; /* If we use decode DMA packets to MMIO. */
- Bool using_pseudo; /* If we use MMIO to submit DMA packets. */
- Bool using_dma; /* If we use non-DRI DMA to submit packets. */
- Bool using_dri; /* If we use the DRM for DMA. */
- Bool using_agp; /* If we are using AGP or not for DMA. */
-
- KdOffscreenArea *dma_space; /* For "DMA" from framebuffer. */
- void *agp_addr; /* Mapped AGP aperture */
- int agp_size;
- int agp_key; /* Key of AGP memory for DMA */
- CARD32 *ring_addr; /* Beginning of ring buffer. */
- int ring_write; /* Index of write ptr in ring. */
- int ring_read; /* Index of read ptr in ring. */
- int ring_len;
-
-
- dmaBuf *indirectBuffer;
- int indirectStart;
-
- int mmio_avail;
- int cce_pri_size;
- int cce_pri_avail;
-
-#ifdef USE_DRI
- Bool dma_started;
-
- drmSize registerSize;
- drmHandle registerHandle;
- drmHandle fbHandle;
-
- drmSize gartSize;
- drmHandle agpMemHandle; /* Handle from drmAgpAlloc */
- unsigned long gartOffset;
- unsigned char *AGP; /* Map */
- int agpMode;
- drmSize pciSize;
- drmHandle pciMemHandle;
-
- /* ring buffer data */
- unsigned long ringStart; /* Offset into AGP space */
- drmHandle ringHandle; /* Handle from drmAddMap */
- drmSize ringMapSize; /* Size of map */
- int ringSize; /* Size of ring (MB) */
- unsigned char *ring; /* Map */
-
- unsigned long ringReadOffset; /* Offset into AGP space */
- drmHandle ringReadPtrHandle; /* Handle from drmAddMap */
- drmSize ringReadMapSize; /* Size of map */
- unsigned char *ringReadPtr; /* Map */
-
- /* vertex/indirect buffer data */
- unsigned long bufStart; /* Offset into AGP space */
- drmHandle bufHandle; /* Handle from drmAddMap */
- drmSize bufMapSize; /* Size of map */
- int bufSize; /* Size of buffers (MB) */
- unsigned char *buf; /* Map */
- int bufNumBufs; /* Number of buffers */
- drmBufMapPtr buffers; /* Buffer map */
-
- /* AGP Texture data */
- unsigned long gartTexStart; /* Offset into AGP space */
- drmHandle gartTexHandle; /* Handle from drmAddMap */
- drmSize gartTexMapSize; /* Size of map */
- int gartTexSize; /* Size of AGP tex space (MB) */
- unsigned char *gartTex; /* Map */
- int log2GARTTexGran;
-
- int DMAusecTimeout; /* CCE timeout in usecs */
-
- /* DRI screen private data */
- int frontOffset;
- int frontPitch;
- int backOffset;
- int backPitch;
- int depthOffset;
- int depthPitch;
- int spanOffset;
- int textureOffset;
- int textureSize;
- int log2TexGran;
-
- int irqEnabled;
-
- int serverContext;
-
- DRIInfoPtr pDRIInfo;
-#ifdef GLXEXT
- int numVisualConfigs;
- __GLXvisualConfig *pVisualConfigs;
- ATIConfigPrivPtr pVisualConfigsPriv;
-#endif /* GLXEXT */
-#endif /* USE_DRI */
-} ATIScreenInfo;
-
-#define getATIScreenInfo(kd) ((ATIScreenInfo *) ((kd)->screen->driver))
-#define ATIScreenInfo(kd) ATIScreenInfo *atis = getATIScreenInfo(kd)
-
-typedef union { float f; CARD32 i; } fi_type;
-
-/* Surely there's a better way to go about this */
-static inline CARD32
-ATIFloatAsInt(float val)
-{
- fi_type fi;
-
- fi.f = val;
- return fi.i;
-}
-
-#define GET_FLOAT_BITS(x) ATIFloatAsInt(x)
-
-/* ati.c */
-Bool
-ATIMapReg(KdCardInfo *card, ATICardInfo *atic);
-
-void
-ATIUnmapReg(KdCardInfo *card, ATICardInfo *atic);
-
-void
-R300CGWorkaround(ATIScreenInfo *atis);
-
-/* ati_draw.c */
-void
-ATIDrawSetup(ScreenPtr pScreen);
-
-Bool
-ATIDrawInit(ScreenPtr pScreen);
-
-void
-ATIDrawEnable(ScreenPtr pScreen);
-
-void
-ATIDrawDisable(ScreenPtr pScreen);
-
-void
-ATIDrawFini(ScreenPtr pScreen);
-
-/* ati_dri.c */
-#ifdef USE_DRI
-Bool
-ATIDRIScreenInit(ScreenPtr pScreen);
-
-void
-ATIDRICloseScreen(ScreenPtr pScreen);
-
-void
-ATIDRIDMAStart(ATIScreenInfo *atis);
-
-void
-ATIDRIDMAStop(ATIScreenInfo *atis);
-
-void
-ATIDRIDMAReset(ATIScreenInfo *atis);
-
-void
-ATIDRIDispatchIndirect(ATIScreenInfo *atis, Bool discard);
-
-drmBufPtr
-ATIDRIGetBuffer(ATIScreenInfo *atis);
-
-#endif /* USE_DRI */
-
-/* ati_cursor.c */
-Bool
-ATICursorInit(ScreenPtr pScreen);
-
-void
-ATICursorEnable(ScreenPtr pScreen);
-
-void
-ATICursorDisable(ScreenPtr pScreen);
-
-void
-ATICursorFini(ScreenPtr pScreen);
-
-void
-ATIRecolorCursor(ScreenPtr pScreen, int ndef, xColorItem *pdef);
-
-int
-ATILog2(int val);
-
-/* ati_video.c */
-Bool
-ATIInitVideo(ScreenPtr pScreen);
-
-void
-ATIFiniVideo(ScreenPtr pScreen);
-
-extern KdCardFuncs ATIFuncs;
-
-#endif /* _ATI_H_ */
diff --git a/hw/kdrive/ati/ati_cursor.c b/hw/kdrive/ati/ati_cursor.c
deleted file mode 100644
index d2ce686df..000000000
--- a/hw/kdrive/ati/ati_cursor.c
+++ /dev/null
@@ -1,559 +0,0 @@
-/*
- * Copyright © 2004 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "ati.h"
-#include "ati_reg.h"
-#include "cursorstr.h"
-#include "ati_draw.h"
-
-static void
-ATIMoveCursor(ScreenPtr pScreen, int x, int y)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
- CARD16 xoff, yoff;
- char *mmio = atic->reg_base;
- int stride = atic->is_radeon ? 256 : 16;
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- x -= pCurPriv->xhot;
- xoff = 0;
- if (x < 0) {
- xoff = -x;
- x = 0;
- }
- y -= pCurPriv->yhot;
- yoff = 0;
- if (y < 0) {
- yoff = -y;
- y = 0;
- }
-
- MMIO_OUT32(mmio, ATI_REG_CUR_HORZ_VERT_OFF, ATI_CUR_LOCK |
- (xoff << 16) | yoff);
- MMIO_OUT32(mmio, ATI_REG_CUR_HORZ_VERT_POSN, ATI_CUR_LOCK |
- (x << 16) | y);
- MMIO_OUT32(mmio, ATI_REG_CUR_OFFSET, (pCurPriv->area->offset + yoff *
- stride));
-}
-
-static void
-ClassicAllocCursorColors(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
- CursorPtr pCursor = pCurPriv->pCursor;
-
- KdAllocateCursorPixels(pScreen, 0, pCursor, &pCurPriv->source,
- &pCurPriv->mask);
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 4:
- pCurPriv->source |= pCurPriv->source << 4;
- pCurPriv->mask |= pCurPriv->mask << 4;
- /* FALLTHROUGH */
- case 8:
- pCurPriv->source |= pCurPriv->source << 8;
- pCurPriv->mask |= pCurPriv->mask << 8;
- /* FALLTHROUGH */
- case 16:
- pCurPriv->source |= pCurPriv->source << 16;
- pCurPriv->mask |= pCurPriv->mask << 16;
- }
-}
-
-static void
-ClassicSetCursorColors(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
- char *mmio = atic->reg_base;
-
- MMIO_OUT32(mmio, ATI_REG_CUR_CLR0, pCurPriv->mask);
- MMIO_OUT32(mmio, ATI_REG_CUR_CLR1, pCurPriv->source);
-}
-
-static void
-ClassicRecolorCursor(ScreenPtr pScreen, int ndef, xColorItem *pdef)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
- CursorPtr pCursor = pCurPriv->pCursor;
-
- if (!pCurPriv->has_cursor || !pCursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pdef) {
- while (ndef != 0) {
- if (pdef->pixel == pCurPriv->source ||
- pdef->pixel == pCurPriv->mask)
- break;
- ndef--;
- }
-
- if (ndef == 0)
- return;
- }
- ClassicAllocCursorColors(pScreen);
- ClassicSetCursorColors(pScreen);
-}
-
-#define InvertBits32(v) do { \
- v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \
- v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \
- v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \
-} while (0)
-
-static void
-ClassicLoadCursor(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- int h;
- CARD32 *ram, *msk, *mskLine, *src, *srcLine;
- int i;
- int lwsrc;
- CARD32 tmp;
- char *mmio = atic->reg_base;
-
- ClassicAllocCursorColors(pScreen);
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- /* Stick new image into cursor memory */
- ram = (CARD32 *)(pScreenPriv->screen->memory_base +
- pCurPriv->area->offset);
- mskLine = (CARD32 *)bits->mask;
- srcLine = (CARD32 *)bits->source;
-
- h = bits->height;
- if (h > ATI_CURSOR_HEIGHT)
- h = ATI_CURSOR_HEIGHT;
-
- lwsrc = BitmapBytePad(bits->width) / 4; /* words per line */
-
- tmp = MMIO_IN32(mmio, ATI_REG_GEN_CNTL);
- MMIO_OUT32(mmio, ATI_REG_GEN_CNTL, tmp & ~ATI_CRTC_CUR_EN);
-
- for (i = 0; i < ATI_CURSOR_HEIGHT; i++) {
- CARD32 m1, m2, s1, s2;
-
- msk = mskLine;
- src = srcLine;
- mskLine += lwsrc;
- srcLine += lwsrc;
-
- if (i < h && 0 < lwsrc) {
- m1 = ~*msk++;
- s1 = *src++;
- InvertBits32(m1);
- InvertBits32(s1);
- } else {
- m1 = 0xffffffff;
- s1 = 0x0;
- }
- if (i < h && 1 < lwsrc) {
- m2 = ~*msk++;
- s2 = *src++;
- InvertBits32(m2);
- InvertBits32(s2);
- } else {
- m2 = 0xffffffff;
- s2 = 0x0;
- }
-
- *ram++ = m1;
- *ram++ = m2;
- *ram++ = s1;
- *ram++ = s2;
- }
-
- /* Not sure why this is necessary, but it prevents some cursor
- * corruption. Not even all of it.
- */
- for (i = 0; i < ATI_CURSOR_HEIGHT; i++) {
- *ram++ = 0xffffffff;
- *ram++ = 0xffffffff;
- *ram++ = 0x0;
- *ram++ = 0x0;
- }
-
- /* Enable the cursor */
- tmp = MMIO_IN32(mmio, ATI_REG_GEN_CNTL);
- MMIO_OUT32(mmio, ATI_REG_GEN_CNTL, tmp | ATI_CRTC_CUR_EN);
-
- /* Set new color */
- ClassicSetCursorColors(pScreen);
-
-}
-
-static void
-RadeonLoadCursor(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- int h, w;
- int x, y;
- CARD32 *ram, *msk, *mskLine, *src, *srcLine;
- int lwsrc;
- CARD32 tmp;
- char *mmio = atic->reg_base;
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- w = bits->width;
- if (w > ATI_CURSOR_WIDTH)
- w = ATI_CURSOR_WIDTH;
-
- h = bits->height;
- if (h > ATI_CURSOR_HEIGHT)
- h = ATI_CURSOR_HEIGHT;
-
- tmp = MMIO_IN32(mmio, 0x7c);
- tmp = 0x00010f80;
- MMIO_OUT32 (mmio, 0x7c, tmp);
-
- tmp = MMIO_IN32(mmio, ATI_REG_GEN_CNTL);
- tmp &= ~(ATI_CRTC_CUR_EN | ATI_CRTC_ICON_EN | ATI_CRTC_ARGB_EN);
- MMIO_OUT32(mmio, ATI_REG_GEN_CNTL, tmp);
-
- /* Stick new image into cursor memory */
- ram = (CARD32 *)(pScreenPriv->screen->memory_base +
- pCurPriv->area->offset);
- if (pCursor->bits->argb)
- {
- srcLine = pCursor->bits->argb;
- for (y = 0; y < h; y++)
- {
- src = srcLine;
- srcLine += pCursor->bits->width;
- for (x = 0; x < w; x++)
- *ram++ = *src++;
- for (; x < ATI_CURSOR_WIDTH; x++)
- *ram++ = 0;
- }
- for (; y < ATI_CURSOR_HEIGHT; y++)
- for (x = 0; x < ATI_CURSOR_WIDTH; x++)
- *ram++ = 0;
- }
- else
- {
- CARD32 colors[4];
-
- colors[0] = 0;
- colors[1] = 0;
- colors[2] = (((pCursor->backRed >> 8) << 16) |
- ((pCursor->backGreen >> 8) << 8) |
- ((pCursor->backBlue >> 8) << 0) |
- 0xff000000);
- colors[3] = (((pCursor->foreRed >> 8) << 16) |
- ((pCursor->foreGreen >> 8) << 8) |
- ((pCursor->foreBlue >> 8) << 0) |
- 0xff000000);
-
- mskLine = (CARD32 *)bits->mask;
- srcLine = (CARD32 *)bits->source;
-
- /* words per line */
- lwsrc = BitmapBytePad(bits->width) / 4;
-
- for (y = 0; y < ATI_CURSOR_HEIGHT; y++)
- {
- CARD32 m, s;
-
- msk = mskLine;
- src = srcLine;
- mskLine += lwsrc;
- srcLine += lwsrc;
-
- for (x = 0; x < ATI_CURSOR_WIDTH / 32; x++)
- {
- int k;
- if (y < h && x < lwsrc)
- {
- m = *msk++;
- s = *src++;
- }
- else
- {
- m = 0x0;
- s = 0x0;
- }
-
- for (k = 0; k < 32; k++)
- {
- CARD32 bits = (s & 1) | ((m & 1) << 1);
- *ram++ = colors[bits];
- s >>= 1;
- m >>= 1;
- }
- }
- }
- }
-
- /* Enable the cursor */
- tmp &= ~(ATI_CRTC_ICON_EN);
- tmp |= ATI_CRTC_ARGB_EN;
- tmp |= ATI_CRTC_CUR_EN;
- MMIO_OUT32(mmio, ATI_REG_GEN_CNTL, tmp);
-}
-
-static void
-ATIUnloadCursor(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- char *mmio = atic->reg_base;
- CARD32 tmp;
-
- tmp = MMIO_IN32(mmio, ATI_REG_GEN_CNTL);
- tmp &= ~(ATI_CRTC_CUR_EN | ATI_CRTC_ICON_EN | ATI_CRTC_ARGB_EN);
- MMIO_OUT32(mmio, ATI_REG_GEN_CNTL, tmp);
-}
-
-static Bool
-ATIRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
-
- if (!pScreenPriv->enabled)
- return TRUE;
-
- /* miRecolorCursor does this */
- if (pCursor && pCurPriv->pCursor == pCursor)
- {
- int x, y;
-
- miPointerPosition(&x, &y);
- if (atic->is_radeon)
- RadeonLoadCursor (pScreen);
- else
- ClassicLoadCursor(pScreen);
- /* Move to new position */
- ATIMoveCursor(pScreen, x, y);
- }
-
- return TRUE;
-}
-
-static Bool
-ATIUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
-{
- return TRUE;
-}
-
-static void
-ATISetCursor(ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
-
- pCurPriv->pCursor = pCursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCursor)
- {
- if (atic->is_radeon)
- RadeonLoadCursor (pScreen);
- else
- ClassicLoadCursor(pScreen);
- /* Move to new position */
- ATIMoveCursor(pScreen, x, y);
- }
- else
- ATIUnloadCursor(pScreen);
-}
-
-miPointerSpriteFuncRec ATIPointerSpriteFuncs = {
- ATIRealizeCursor,
- ATIUnrealizeCursor,
- ATISetCursor,
- ATIMoveCursor,
-};
-
-static void
-ATIQueryBestSize(int class, unsigned short *pwidth, unsigned short *pheight,
- ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
-
- switch (class)
- {
- case CursorShape:
- if (*pwidth > pCurPriv->width)
- *pwidth = pCurPriv->width;
- if (*pheight > pCurPriv->height)
- *pheight = pCurPriv->height;
- if (*pwidth > pScreen->width)
- *pwidth = pScreen->width;
- if (*pheight > pScreen->height)
- *pheight = pScreen->height;
- break;
- default:
- fbQueryBestSize(class, pwidth, pheight, pScreen);
- break;
- }
-}
-
-static void
-ATICursorSave(ScreenPtr pScreen, KdOffscreenArea *area)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
-
- pCurPriv->area = NULL;
-}
-
-void
-ATICursorEnable(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (pCurPriv->area == NULL) {
- if (atic->is_radeon)
- pCurPriv->area = KdOffscreenAlloc(pScreen,
- ATI_CURSOR_HEIGHT * ATI_CURSOR_WIDTH * 4,
- 128, TRUE, ATICursorSave, atis);
- else
- pCurPriv->area = KdOffscreenAlloc(pScreen,
- ATI_CURSOR_HEIGHT * ATI_CURSOR_PITCH * 2,
- 32, TRUE, ATICursorSave, atis);
- }
- if (pCurPriv->area == NULL)
- FatalError("Couldn't allocate offscreen memory for cursor.\n");
-
- if (pCurPriv->pCursor) {
- int x, y;
-
- miPointerPosition(&x, &y);
- if (atic->is_radeon)
- RadeonLoadCursor(pScreen);
- else
- ClassicLoadCursor(pScreen);
- /* Move to new position */
- ATIMoveCursor(pScreen, x, y);
- }
- else
- ATIUnloadCursor(pScreen);
-}
-
-void
-ATICursorDisable(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
-
- if (!pScreenPriv->enabled || !pCurPriv->has_cursor)
- return;
-
- if (pCurPriv->pCursor)
- ATIUnloadCursor(pScreen);
-}
-
-Bool
-ATICursorInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
-
- pCurPriv->has_cursor = FALSE;
-
- if (atic->reg_base == NULL)
- return FALSE;
-
- pCurPriv->width = ATI_CURSOR_WIDTH;
- pCurPriv->height= ATI_CURSOR_HEIGHT;
- pScreen->QueryBestSize = ATIQueryBestSize;
- miPointerInitialize(pScreen, &ATIPointerSpriteFuncs,
- &kdPointerScreenFuncs, FALSE);
- pCurPriv->has_cursor = TRUE;
- pCurPriv->pCursor = NULL;
- return TRUE;
-}
-
-void
-ATIRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
-
- if (!atic->is_radeon)
- ClassicRecolorCursor (pScreen, ndef, pdef);
-}
-
-void
-ATICursorFini(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICursor *pCurPriv = &atis->cursor;
-
- pCurPriv->has_cursor = FALSE;
- pCurPriv->pCursor = NULL;
-}
diff --git a/hw/kdrive/ati/ati_dma.c b/hw/kdrive/ati/ati_dma.c
deleted file mode 100644
index b97d79b25..000000000
--- a/hw/kdrive/ati/ati_dma.c
+++ /dev/null
@@ -1,1037 +0,0 @@
-/*
- * Copyright © 2004 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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.
- */
-
-#include <sys/time.h>
-
-#include "ati.h"
-#include "ati_reg.h"
-#include "ati_dma.h"
-#include "ati_draw.h"
-
-#ifdef USE_DRI
-#include "radeon_common.h"
-#include "r128_common.h"
-#include "ati_sarea.h"
-#endif /* USE_DRI */
-
-#include "agp.h"
-
-#define DEBUG_FIFO 0
-
-extern CARD32 r128_cce_microcode[];
-extern CARD32 radeon_cp_microcode[][2];
-extern CARD32 r200_cp_microcode[][2];
-extern CARD32 r300_cp_microcode[][2];
-
-#if DEBUG_FIFO
-static void
-ATIDebugFifo(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- char *mmio = atic->reg_base;
-
- if (atic->is_radeon) {
- ErrorF("RADEON_REG_CP_CSQ_CNTL: 0x%08x\n",
- MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL));
- ErrorF("RADEON_REG_CP_CSQ_STAT: 0x%08x\n",
- MMIO_IN32(mmio, RADEON_REG_CP_CSQ_STAT));
- ErrorF("RADEON_REG_RBBM_STATUS: 0x%08x\n",
- MMIO_IN32(mmio, RADEON_REG_RBBM_STATUS));
- ErrorF("RADEON_REG_RB3D_DSTCACHE_CTLSTAT: 0x%08x\n",
- MMIO_IN32(mmio, RADEON_REG_RB3D_DSTCACHE_CTLSTAT));
- } else {
- ErrorF("R128_REG_PM4_BUFFER_CNTL: 0x%08x\n",
- MMIO_IN32(mmio, R128_REG_PM4_BUFFER_CNTL));
- ErrorF("R128_REG_PM4_STAT: 0x%08x\n",
- MMIO_IN32(mmio, R128_REG_PM4_STAT));
- ErrorF("R128_REG_GUI_STAT: 0x%08x\n",
- MMIO_IN32(mmio, R128_REG_GUI_STAT));
- ErrorF("R128_REG_PC_NGUI_CTLSTAT: 0x%08x\n",
- MMIO_IN32(mmio, R128_REG_PC_NGUI_CTLSTAT));
- }
-}
-#endif
-
-static void
-ATIUploadMicrocode(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- char *mmio = atic->reg_base;
- int i;
-
- MMIO_OUT32(mmio, ATI_REG_MICROCODE_RAM_ADDR, 0);
- if (atic->is_radeon && atic->is_r300) {
- for (i = 0; i < 256; i++) {
- MMIO_OUT32(mmio, ATI_REG_MICROCODE_RAM_DATAH,
- r300_cp_microcode[i][1]);
- MMIO_OUT32(mmio, ATI_REG_MICROCODE_RAM_DATAL,
- r300_cp_microcode[i][0]);
- }
- } else if (atic->is_radeon && atic->is_r200) {
- for (i = 0; i < 256; i++) {
- MMIO_OUT32(mmio, ATI_REG_MICROCODE_RAM_DATAH,
- r200_cp_microcode[i][1]);
- MMIO_OUT32(mmio, ATI_REG_MICROCODE_RAM_DATAL,
- r200_cp_microcode[i][0]);
- }
- } else if (atic->is_radeon && atic->is_r100) {
- for (i = 0; i < 256; i++) {
- MMIO_OUT32(mmio, ATI_REG_MICROCODE_RAM_DATAH,
- radeon_cp_microcode[i][1]);
- MMIO_OUT32(mmio, ATI_REG_MICROCODE_RAM_DATAL,
- radeon_cp_microcode[i][0]);
- }
- } else {
- for (i = 0; i < 256; i++) {
- MMIO_OUT32(mmio, ATI_REG_MICROCODE_RAM_DATAH,
- r128_cce_microcode[i * 2]);
- MMIO_OUT32(mmio, ATI_REG_MICROCODE_RAM_DATAL,
- r128_cce_microcode[i * 2 + 1]);
- }
- }
-}
-
-/* Required when reading from video memory after acceleration to make sure all
- * data has been flushed to video memory from the pixel cache.
- */
-static void
-ATIFlushPixelCache(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- char *mmio = atic->reg_base;
- CARD32 temp;
- TIMEOUT_LOCALS;
-
- if (atic->is_radeon) {
- temp = MMIO_IN32(mmio, RADEON_REG_RB3D_DSTCACHE_CTLSTAT);
- temp |= RADEON_RB3D_DC_FLUSH_ALL;
- MMIO_OUT32(mmio, RADEON_REG_RB3D_DSTCACHE_CTLSTAT, temp);
-
- WHILE_NOT_TIMEOUT(.2) {
- if ((MMIO_IN32(mmio, RADEON_REG_RB3D_DSTCACHE_CTLSTAT) &
- RADEON_RB3D_DC_BUSY) == 0)
- break;
- }
- } else {
- temp = MMIO_IN32(mmio, R128_REG_PC_NGUI_CTLSTAT);
- temp |= R128_PC_FLUSH_ALL;
- MMIO_OUT32(mmio, R128_REG_PC_NGUI_CTLSTAT, temp);
-
- WHILE_NOT_TIMEOUT(.2) {
- if ((MMIO_IN32(mmio, R128_REG_PC_NGUI_CTLSTAT) &
- R128_PC_BUSY) != R128_PC_BUSY)
- break;
- }
- }
- if (TIMEDOUT())
- ErrorF("Timeout flushing pixel cache.\n");
-}
-
-static void
-ATIEngineReset(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- char *mmio = atic->reg_base;
- CARD32 clockcntlindex, mclkcntl;
-
-#if DEBUG_FIFO
- ErrorF("Engine Reset!\n");
- ATIDebugFifo(atis);
-#endif
-
- ATIFlushPixelCache(atis);
-
- clockcntlindex = MMIO_IN32(mmio, ATI_REG_CLOCK_CNTL_INDEX);
- if (atic->is_r300)
- R300CGWorkaround(atis);
-
- if (atic->is_radeon) {
- CARD32 host_path_cntl;
-
- mclkcntl = INPLL(mmio, RADEON_REG_MCLK_CNTL);
-
- OUTPLL(mmio, RADEON_REG_MCLK_CNTL, mclkcntl |
- RADEON_FORCEON_MCLKA |
- RADEON_FORCEON_MCLKB |
- RADEON_FORCEON_YCLKA |
- RADEON_FORCEON_YCLKB |
- RADEON_FORCEON_MC |
- RADEON_FORCEON_AIC);
-
- host_path_cntl = MMIO_IN32(mmio, RADEON_REG_HOST_PATH_CNTL);
-
- if (atic->is_r300) {
- MMIO_OUT32(mmio, RADEON_REG_RBBM_SOFT_RESET,
- RADEON_SOFT_RESET_CP |
- RADEON_SOFT_RESET_HI |
- RADEON_SOFT_RESET_E2);
- } else {
- MMIO_OUT32(mmio, RADEON_REG_RBBM_SOFT_RESET,
- RADEON_SOFT_RESET_CP |
- RADEON_SOFT_RESET_SE |
- RADEON_SOFT_RESET_RE |
- RADEON_SOFT_RESET_PP |
- RADEON_SOFT_RESET_E2 |
- RADEON_SOFT_RESET_RB);
- }
- MMIO_IN32(mmio, RADEON_REG_RBBM_SOFT_RESET);
- MMIO_OUT32(mmio, RADEON_REG_RBBM_SOFT_RESET, 0);
-
- MMIO_OUT32(mmio, RADEON_REG_HOST_PATH_CNTL, host_path_cntl |
- RADEON_HDP_SOFT_RESET);
- MMIO_IN32(mmio, RADEON_REG_HOST_PATH_CNTL);
- MMIO_OUT32(mmio, RADEON_REG_HOST_PATH_CNTL, host_path_cntl);
-
- MMIO_OUT32(mmio, ATI_REG_CLOCK_CNTL_INDEX, clockcntlindex);
- OUTPLL(mmio, RADEON_REG_MCLK_CNTL, mclkcntl);
- if (atic->is_r300)
- R300CGWorkaround(atis);
- } else {
- CARD32 temp;
-
- mclkcntl = INPLL(mmio, R128_REG_MCLK_CNTL);
-
- OUTPLL(mmio, R128_REG_MCLK_CNTL,
- mclkcntl | R128_FORCE_GCP | R128_FORCE_PIPE3D_CP);
-
- temp = MMIO_IN32(mmio, R128_REG_GEN_RESET_CNTL);
- MMIO_OUT32(mmio, R128_REG_GEN_RESET_CNTL,
- temp | R128_SOFT_RESET_GUI);
- temp = MMIO_IN32(mmio, R128_REG_GEN_RESET_CNTL);
- MMIO_OUT32(mmio, R128_REG_GEN_RESET_CNTL,
- temp & ~R128_SOFT_RESET_GUI);
- temp = MMIO_IN32(mmio, R128_REG_GEN_RESET_CNTL);
-
- OUTPLL(mmio, R128_REG_MCLK_CNTL, mclkcntl);
- MMIO_OUT32(mmio, ATI_REG_CLOCK_CNTL_INDEX, clockcntlindex);
- }
-#ifdef USE_DRI
- if (atis->using_dri) {
- ATIDRIDMAReset(atis);
- ATIDRIDMAStart(atis);
- }
-#endif
-}
-
-static void
-ATIWaitAvailMMIO(ATIScreenInfo *atis, int n)
-{
- ATICardInfo *atic = atis->atic;
- char *mmio = atic->reg_base;
- TIMEOUT_LOCALS;
-
- if (atis->mmio_avail >= n) {
- atis->mmio_avail -= n;
- return;
- }
- if (atic->is_radeon) {
- WHILE_NOT_TIMEOUT(.2) {
- atis->mmio_avail = MMIO_IN32(mmio,
- RADEON_REG_RBBM_STATUS) & RADEON_RBBM_FIFOCNT_MASK;
- if (atis->mmio_avail >= n)
- break;
- }
- } else {
- WHILE_NOT_TIMEOUT(.2) {
- atis->mmio_avail = MMIO_IN32(mmio, R128_REG_GUI_STAT) &
- 0xfff;
- if (atis->mmio_avail >= n)
- break;
- }
- }
- if (TIMEDOUT()) {
- ErrorF("Timeout waiting for %d MMIO slots.\n", n);
- ATIEngineReset(atis);
- ATIDrawSetup(atis->screen->pScreen);
- }
- atis->mmio_avail -= n;
-}
-
-static int
-ATIGetAvailPrimary(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- char *mmio = atic->reg_base;
-
- if (atic->is_radeon) {
- int csq_stat, diff;
-
- csq_stat = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_STAT);
- if (atic->is_r200)
- diff = ((csq_stat & R200_CSQ_WPTR_PRIMARY_MASK) >> 9) -
- (csq_stat & R200_CSQ_RPTR_PRIMARY_MASK);
- else
- diff = ((csq_stat & RADEON_CSQ_WPTR_PRIMARY_MASK) >> 8) -
- (csq_stat & RADEON_CSQ_RPTR_PRIMARY_MASK);
-
- if (diff < 0)
- return -diff;
- else
- return atis->cce_pri_size - diff;
- } else {
- return MMIO_IN32(mmio, R128_REG_PM4_STAT) &
- R128_PM4_FIFOCNT_MASK;
- }
-}
-
-static void
-ATIWaitAvailPrimary(ATIScreenInfo *atis, int n)
-{
- TIMEOUT_LOCALS;
-
- if (atis->cce_pri_avail >= n) {
- atis->cce_pri_avail -= n;
- return;
- }
-
- WHILE_NOT_TIMEOUT(.2) {
- if (atis->cce_pri_avail >= n)
- break;
- atis->cce_pri_avail = ATIGetAvailPrimary(atis);
- if (atis->cce_pri_avail >= n)
- break;
- }
- if (TIMEDOUT()) {
- ErrorF("Timeout waiting for %d CCE slots (%d avail).\n", n,
- atis->cce_pri_avail);
- ATIEngineReset(atis);
- ATIDrawSetup(atis->screen->pScreen);
- }
- atis->cce_pri_avail -= n;
-}
-
-void
-ATIWaitIdle(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- char *mmio = atic->reg_base;
- TIMEOUT_LOCALS;
-
- if (atis->indirectBuffer != NULL)
- ATIFlushIndirect(atis, 0);
-
-#ifdef USE_DRI
- if (atis->using_dri) {
- int ret = 0;
- int cmd = (atic->is_radeon ? DRM_RADEON_CP_IDLE :
- DRM_R128_CCE_IDLE);
- WHILE_NOT_TIMEOUT(2) {
- ret = drmCommandNone(atic->drmFd, cmd);
- if (ret != -EBUSY)
- break;
- }
- if (TIMEDOUT()) {
- ATIDebugFifo(atis);
- FatalError("Timed out idling CCE (card hung)\n");
- }
- if (ret != 0)
- ErrorF("Failed to idle DMA, returned %d\n", ret);
- return;
- }
-#endif
-
- if (!atic->is_radeon && (atis->using_pseudo || atis->using_dma)) {
- ATIWaitAvailPrimary(atis, atis->cce_pri_size);
-
- WHILE_NOT_TIMEOUT(.2) {
- if ((MMIO_IN32(mmio, R128_REG_PM4_STAT) &
- (R128_PM4_BUSY | R128_PM4_GUI_ACTIVE)) == 0)
- break;
- }
- if (TIMEDOUT()) {
- ErrorF("Timeout idling CCE, resetting...\n");
- ATIEngineReset(atis);
- ATIDrawSetup(atis->screen->pScreen);
- }
- }
-
- /* Radeon CP idle is the same as MMIO idle. */
- if (atis->using_pio || atic->is_radeon) {
- /* Empty the fifo */
- ATIWaitAvailMMIO(atis, 64);
-
- if (atic->is_radeon) {
- WHILE_NOT_TIMEOUT(.2) {
- if ((MMIO_IN32(mmio, RADEON_REG_RBBM_STATUS) &
- RADEON_RBBM_ACTIVE) == 0)
- break;
- }
- } else {
- WHILE_NOT_TIMEOUT(.2) {
- if ((MMIO_IN32(mmio, R128_REG_GUI_STAT) &
- R128_GUI_ACTIVE) == 0)
- break;
- }
- }
- if (TIMEDOUT()) {
- ErrorF("Timeout idling accelerator, resetting...\n");
- ATIEngineReset(atis);
- ATIDrawSetup(atis->screen->pScreen);
- }
- }
-
- ATIFlushPixelCache(atis);
-
-#if DEBUG_FIFO
- ErrorF("Idle?\n");
- ATIDebugFifo(atis);
-#endif
-}
-
-dmaBuf *
-ATIGetDMABuffer(ATIScreenInfo *atis)
-{
- dmaBuf *buf;
-
- buf = (dmaBuf *)xalloc(sizeof(dmaBuf));
- if (buf == NULL)
- return NULL;
-
-#ifdef USE_DRI
- if (atis->using_dri) {
- buf->drmBuf = ATIDRIGetBuffer(atis);
- if (buf->drmBuf == NULL) {
- xfree(buf);
- return NULL;
- }
- buf->size = buf->drmBuf->total;
- buf->used = buf->drmBuf->used;
- buf->address = buf->drmBuf->address;
- return buf;
- }
-#endif /* USE_DRI */
-
- if (atis->using_dma)
- buf->size = atis->ring_len / 2;
- else
- buf->size = 512 * 1024;
- buf->address = xalloc(buf->size);
- if (buf->address == NULL) {
- xfree(buf);
- return NULL;
- }
- buf->used = 0;
-
- return buf;
-}
-
-/* Decode a type-3 packet into MMIO register writes. Only some type-3 packets
- * supported, and only partially.
- */
-static void
-ATIDispatchPacket3MMIO(ATIScreenInfo *atis, CARD32 header, CARD32 *addr,
- int count)
-{
- ATICardInfo *atic = atis->atic;
- char *mmio = atic->reg_base;
- CARD32 settings;
- int i = 0;
-
- settings = addr[i++];
-
- if ((settings & ATI_GMC_SRC_PITCH_OFFSET_CNTL) != 0)
- MMIO_OUT32(mmio, ATI_REG_SRC_PITCH_OFFSET, addr[i++]);
- if ((settings & ATI_GMC_DST_PITCH_OFFSET_CNTL) != 0)
- MMIO_OUT32(mmio, ATI_REG_DST_PITCH_OFFSET, addr[i++]);
- if ((settings & ATI_GMC_BRUSH_MASK) == ATI_GMC_BRUSH_SOLID_COLOR)
- MMIO_OUT32(mmio, ATI_REG_DP_BRUSH_FRGD_CLR, addr[i++]);
-
- switch (header & (ATI_CCE_PACKETTYPE_MASK |
- ATI_CCE_PACKET3_IT_OPCODE_MASK))
- {
- case ATI_CCE_PACKET3_PAINT_MULTI:
- while (i < count) {
- MMIO_OUT32(mmio, ATI_REG_DST_Y_X,
- (addr[i] >> 16) | (addr[i] << 16));
- i++;
- MMIO_OUT32(mmio, ATI_REG_DST_HEIGHT_WIDTH,
- (addr[i] >> 16) | (addr[i] << 16));
- i++;
- }
- break;
- case ATI_CCE_PACKET3_BITBLT_MULTI:
- while (i < count) {
- MMIO_OUT32(mmio, ATI_REG_SRC_Y_X,
- (addr[i] >> 16) | (addr[i] << 16));
- i++;
- MMIO_OUT32(mmio, ATI_REG_DST_Y_X,
- (addr[i] >> 16) | (addr[i] << 16));
- i++;
- MMIO_OUT32(mmio, ATI_REG_DST_HEIGHT_WIDTH,
- (addr[i] >> 16) | (addr[i] << 16));
- i++;
- }
- break;
- default:
- ErrorF("Unsupported packet: 0x%x\n", header);
- }
-}
-
-/* Dispatch packets by decoding them and writing to registers. Doesn't support
- * the type 3 packets.
- */
-static void
-ATIDispatchIndirectMMIO(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- dmaBuf *buf = atis->indirectBuffer;
- char *mmio = atic->reg_base;
- CARD32 *addr;
- CARD32 reg;
- int i, n, count;
-
- addr = (CARD32 *)((char *)buf->address + atis->indirectStart);
- count = (buf->used - atis->indirectStart) / 4;
-
- for (i = 0; i < count; i++) {
- CARD32 header = addr[i];
-
- switch (header & ATI_CCE_PACKETTYPE_MASK)
- {
- case ATI_CCE_PACKET0:
- n = ((header & ATI_CCE_PACKET0_COUNT_MASK) >> 16) + 1;
- reg = (header & ATI_CCE_PACKET0_REG_MASK) << 2;
- ATIWaitAvailMMIO(atis, n);
- while (n > 0) {
- i++;
- MMIO_OUT32(mmio, reg, addr[i]);
- if ((header & ATI_CCE_PACKET0_ONE_REG_WR) == 0)
- reg += 4;
- n--;
- }
- break;
- case ATI_CCE_PACKET1:
- reg = (header & ATI_CCE_PACKET1_REG_1) << 2;
- MMIO_OUT32(mmio, reg, addr[++i]);
- reg = ((header & ATI_CCE_PACKET1_REG_2) >>
- ATI_CCE_PACKET1_REG_2_SHIFT) << 2;
- MMIO_OUT32(mmio, reg, addr[++i]);
- break;
- case ATI_CCE_PACKET2:
- /* PACKET2 is a no-op packet. */
- break;
- case ATI_CCE_PACKET3:
- n = ((header & ATI_CCE_PACKET3_COUNT_MASK) >> 16) + 1;
- ATIDispatchPacket3MMIO(atis, header, &addr[i], n);
- i += n;
- break;
- default:
- ErrorF("Unsupported packet: 0x%x\n", addr[i]);
- }
- }
-}
-
-/* Dispatch packets by sending them through the MMIO aperture. */
-static void
-R128DispatchIndirectPDMA(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- dmaBuf *buf = atis->indirectBuffer;
- char *mmio = atic->reg_base;
- CARD32 *addr;
- int count;
-
- addr = (CARD32 *)((char *)buf->address + atis->indirectStart);
- count = (buf->used - atis->indirectStart) / 4;
-
- while (count > 1) {
- ATIWaitAvailPrimary(atis, 2);
- MMIO_OUT32(mmio, R128_REG_PM4_FIFO_DATA_EVEN, *addr++);
- MMIO_OUT32(mmio, R128_REG_PM4_FIFO_DATA_ODD, *addr++);
- count -= 2;
- }
-
- /* Submit last DWORD if necessary. */
- if (count != 0) {
- ATIWaitAvailPrimary(atis, 2);
- MMIO_OUT32(mmio, R128_REG_PM4_FIFO_DATA_EVEN, *addr++);
- MMIO_OUT32(mmio, R128_REG_PM4_FIFO_DATA_ODD, ATI_CCE_PACKET2);
- }
-}
-
-/* Dispatch packets by sending them through the MMIO aperture, using the
- * primary CCE ring. */
-static void
-RadeonDispatchIndirectPDMA(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- dmaBuf *buf = atis->indirectBuffer;
- char *mmio = atic->reg_base;
- CARD32 *addr;
- int count, avail, reg, i;
- TIMEOUT_LOCALS;
-
- addr = (CARD32 *)((char *)buf->address + atis->indirectStart);
- count = (buf->used - atis->indirectStart) / 4;
-
- reg = RADEON_REG_CSQ_APER_PRIMARY;
- WHILE_NOT_TIMEOUT(3) {
- /* 3 seconds is empirical, using render_bench on an r100. */
- if (count <= 0)
- break;
- avail = ATIGetAvailPrimary(atis);
- for (i = 0; i < min(count, avail); i++) {
- MMIO_OUT32(mmio, reg, *addr++);
- if (reg == RADEON_REG_CSQ_APER_PRIMARY_END)
- reg = RADEON_REG_CSQ_APER_PRIMARY;
- else
- reg += 4;
- }
- count -= i;
- }
- if (TIMEDOUT()) {
- ErrorF("Timeout submitting packets, resetting...\n");
- ATIEngineReset(atis);
- ATIDrawSetup(atis->screen->pScreen);
- }
-}
-
-
-/* Dispatch packets by writing them to the (primary) ring buffer, which happens
- * to be in framebuffer memory.
- */
-static void
-R128DispatchIndirectDMA(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- dmaBuf *buf = atis->indirectBuffer;
- char *mmio = atic->reg_base;
- CARD32 *addr;
- int count, ring_count;
- TIMEOUT_LOCALS;
-
- addr = (CARD32 *)((char *)buf->address + atis->indirectStart);
- count = (buf->used - atis->indirectStart) / 4;
- ring_count = atis->ring_len / 4;
-
- WHILE_NOT_TIMEOUT(.2) {
- if (count <= 0)
- break;
-
- atis->ring_addr[atis->ring_write++] = *addr++;
- if (atis->ring_write >= ring_count)
- atis->ring_write = 0;
- while (atis->ring_write == atis->ring_read) {
- atis->ring_read = MMIO_IN32(mmio, ATI_REG_CCE_RPTR);
- }
- count--;
- }
- if (TIMEDOUT()) {
- ErrorF("Timeout submitting packets, resetting...\n");
- ATIEngineReset(atis);
- ATIDrawSetup(atis->screen->pScreen);
- }
-
- /* Workaround for some early Rage 128 ASIC spins where the CCE parser
- * may read up to 32 DWORDS beyond the end of the ring buffer memory
- * before wrapping around, if the ring buffer was empty and a <32 DWORD
- * packet that wraps around the end of the ring buffer is submitted.
- * To work around that, copy the beginning of the ring buffer past the
- * end if that may happen.
- */
- if (atis->ring_write < 32)
- memcpy(atis->ring_addr + ring_count, atis->ring_addr, 32 * 4);
-
- /* Update write pointer */
- MMIO_OUT32(mmio, ATI_REG_CCE_WPTR, atis->ring_write);
-}
-
-void
-ATIFlushIndirect(ATIScreenInfo *atis, Bool discard)
-{
- ATICardInfo *atic = atis->atic;
- dmaBuf *buf = atis->indirectBuffer;
-
- if ((atis->indirectStart == buf->used) && !discard)
- return;
-
-#if DEBUG_FIFO
- ErrorF("Dispatching %d DWORDS\n", (buf->used - atis->indirectStart) /
- 4);
-#endif
-
-#ifdef USE_DRI
- if (atis->using_dri) {
- buf->drmBuf->used = buf->used;
- ATIDRIDispatchIndirect(atis, discard);
- if (discard) {
- buf->drmBuf = ATIDRIGetBuffer(atis);
- buf->size = buf->drmBuf->total;
- buf->used = buf->drmBuf->used;
- buf->address = buf->drmBuf->address;
- atis->indirectStart = 0;
- } else {
- /* Start on a double word boundary */
- atis->indirectStart = buf->used = (buf->used + 7) & ~7;
- }
- return;
- }
-#endif /* USE_DRI */
-
- if (atis->using_dma && !atic->is_radeon)
- R128DispatchIndirectDMA(atis);
- else if (atis->using_pseudo) {
- if (atic->is_radeon)
- RadeonDispatchIndirectPDMA(atis);
- else
- R128DispatchIndirectPDMA(atis);
- } else
- ATIDispatchIndirectMMIO(atis);
-
- buf->used = 0;
- atis->indirectStart = 0;
-}
-
-static Bool
-ATIInitAGP(ScreenPtr pScreen, int size)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- AgpInfoPtr agp_info;
- int screennum = atis->screen->mynum;
-
- if (atic->is_radeon)
- return FALSE;
-
- if (!KdAgpGARTSupported())
- return FALSE;
-
- if (!KdAcquireGART(screennum))
- return FALSE;
-
- atis->agp_key = KdAllocateGARTMemory(screennum, size, 0, NULL);
- if (atis->agp_key == -1) {
- ErrorF("Failed to allocate %dKB GART memory\n", size/1024);
- KdReleaseGART(screennum);
- return FALSE;
- }
-
- if (!KdBindGARTMemory(screennum, atis->agp_key, 0)) {
- ErrorF("Failed to bind GART memory\n");
- KdReleaseGART(screennum);
- return FALSE;
- }
-
- agp_info = KdGetAGPInfo(screennum);
- if (agp_info == NULL) {
- KdUnbindGARTMemory(screennum, atis->agp_key);
- KdReleaseGART(screennum);
- return FALSE;
- }
-
- atis->agp_addr = KdMapDevice(agp_info->base, agp_info->size);
- if (atis->agp_addr == NULL) {
- ErrorF("Failed to map GART memory\n");
- KdUnbindGARTMemory(screennum, atis->agp_key);
- KdReleaseGART(screennum);
- free(agp_info);
- return FALSE;
- }
- KdSetMappedMode(agp_info->base, agp_info->size,
- KD_MAPPED_MODE_FRAMEBUFFER);
-
- atis->agp_size = size;
- free(agp_info);
-
- return TRUE;
-}
-
-static void
-ATIFiniAGP(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- int screennum = atis->screen->mynum;
-
- KdUnbindGARTMemory(screennum, atis->agp_key);
- KdReleaseGART(screennum);
- atis->agp_addr = NULL;
- atis->agp_size = 0;
-}
-
-static Bool
-ATIPseudoDMAInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- char *mmio = atic->reg_base;
-
- if (atic->is_r300)
- return FALSE;
-
- ATIUploadMicrocode(atis);
- ATIEngineReset(atis);
-
- if (atic->is_r200) {
- MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL,
- RADEON_CSQ_PRIPIO_INDDIS);
- atis->cce_pri_size = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL) &
- R200_CSQ_CNT_PRIMARY_MASK;
- MMIO_OUT32(mmio, RADEON_REG_ME_CNTL, RADEON_ME_MODE_FREE_RUN);
- } else if (atic->is_radeon) {
- MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL,
- RADEON_CSQ_PRIPIO_INDDIS);
- atis->cce_pri_size = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL) &
- RADEON_CSQ_CNT_PRIMARY_MASK;
- MMIO_OUT32(mmio, RADEON_REG_ME_CNTL, RADEON_ME_MODE_FREE_RUN);
- } else {
- MMIO_OUT32(mmio, R128_REG_PM4_BUFFER_CNTL, R128_PM4_192PIO |
- R128_PM4_BUFFER_CNTL_NOUPDATE);
- atis->cce_pri_size = 192;
- MMIO_OUT32(mmio, R128_REG_PM4_MICRO_CNTL,
- R128_PM4_MICRO_FREERUN);
- }
-
- return TRUE;
-}
-
-static Bool
-ATIPseudoDMAFini(ScreenPtr pScreen)
-{ KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- char *mmio = atic->reg_base;
-
- if (atic->is_radeon) {
- MMIO_OUT32(mmio, RADEON_REG_ME_CNTL, 0);
- MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL,
- RADEON_CSQ_PRIDIS_INDDIS);
- } else {
- MMIO_OUT32(mmio, R128_REG_PM4_MICRO_CNTL, 0);
- MMIO_OUT32(mmio, R128_REG_PM4_BUFFER_CNTL,
- R128_PM4_NONPM4 | R128_PM4_BUFFER_CNTL_NOUPDATE);
- }
- atis->cce_pri_size = 0;
-
- ATIEngineReset(atis);
-
- return TRUE;
-}
-
-static Bool
-ATIDMAInit(ScreenPtr pScreen, Bool use_agp)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- char *mmio = atic->reg_base;
- int dma_offset;
- CARD32 tmp;
-
- /* XXX: Not for radeons. Yet? */
- if (atic->is_radeon)
- return FALSE;
-
- if (use_agp) {
- if (1)
- return FALSE; /* XXX */
- /* Allocate a 1MB AGP space, but only use 128k + 128 for DMA.
- * XXX: Should use the rest for things like scratch space.
- */
- if (!ATIInitAGP(pScreen, 1024 * 1024))
- return FALSE;
- atis->ring_addr = atis->agp_addr;
- atis->ring_len = 128 * 1024;
- dma_offset = R128_AGP_OFFSET;
- } else {
- if (1)
- return FALSE; /* XXX */
- /* Allocate a 128K buffer, plus 32 DWORDS to give space for the
- * R128 ASIC bug workaround.
- */
- atis->dma_space = KdOffscreenAlloc(pScreen, 128 * 1024 + 128,
- 128, TRUE, NULL, NULL);
- if (atis->dma_space == NULL)
- return FALSE;
- atis->ring_addr = (CARD32 *)(atis->dma_space->offset +
- pScreenPriv->screen->memory_base);
- atis->ring_len = 128 * 1024;
- dma_offset = atis->dma_space->offset;
- }
-
- ATIUploadMicrocode(atis);
- ATIEngineReset(atis);
-
- atis->ring_read = 0;
- atis->ring_write = 0;
-
- tmp = MMIO_IN32(mmio, ATI_REG_BUS_CNTL);
- MMIO_OUT32(mmio, ATI_REG_BUS_CNTL, tmp & ~ATI_BUS_MASTER_DIS);
-
- MMIO_OUT32(mmio, ATI_REG_CCE_RB_BASE, dma_offset);
- MMIO_OUT32(mmio, ATI_REG_CCE_WPTR, atis->ring_write);
- MMIO_OUT32(mmio, ATI_REG_CCE_RPTR, atis->ring_read);
- MMIO_OUT32(mmio, ATI_REG_CCE_RPTR_ADDR, 0 /* XXX? */);
-
- if (atic->is_r200) {
- MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL,
- RADEON_CSQ_PRIBM_INDBM);
- atis->cce_pri_size = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL) &
- R200_CSQ_CNT_PRIMARY_MASK;
- MMIO_OUT32(mmio, RADEON_REG_ME_CNTL, RADEON_ME_MODE_FREE_RUN);
- } else if (atic->is_radeon) {
- MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL,
- RADEON_CSQ_PRIBM_INDBM);
- atis->cce_pri_size = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL) &
- RADEON_CSQ_CNT_PRIMARY_MASK;
- MMIO_OUT32(mmio, RADEON_REG_ME_CNTL, RADEON_ME_MODE_FREE_RUN);
- } else {
- MMIO_OUT32(mmio, R128_REG_PM4_BUFFER_WM_CNTL,
- ((R128_WATERMARK_L/4) << R128_WMA_SHIFT) |
- ((R128_WATERMARK_M/4) << R128_WMB_SHIFT) |
- ((R128_WATERMARK_N/4) << R128_WMC_SHIFT) |
- ((R128_WATERMARK_K/64) << R128_WB_WM_SHIFT));
- /* The sample code reads from an undocumneted register
- * (PM4_BUFFER_ADDR). Perhaps it's a write posting thing? Do
- * a read in case that's it.
- */
- MMIO_IN32(mmio, R128_REG_PM4_BUFFER_CNTL);
- if (use_agp) {
- /* XXX Magic num */
- MMIO_OUT32(mmio, R128_REG_PCI_GART_PAGE, 1);
- MMIO_OUT32(mmio, R128_REG_PM4_BUFFER_CNTL,
- ATILog2(atis->ring_len) |
- R128_PM4_192BM |
- R128_PM4_BUFFER_CNTL_NOUPDATE);
- } else {
- MMIO_OUT32(mmio, R128_REG_PM4_BUFFER_CNTL,
- ATILog2(atis->ring_len) |
- R128_PM4_192BM |
- R128_PM4_BUFFER_CNTL_NOUPDATE |
- R128_PM4_IN_FRAME_BUFFER);
- }
- atis->cce_pri_size = 192;
- MMIO_IN32(mmio, R128_REG_PM4_BUFFER_CNTL);
- MMIO_OUT32(mmio, R128_REG_PM4_MICRO_CNTL,
- R128_PM4_MICRO_FREERUN);
- }
-
- return TRUE;
-}
-
-static Bool
-ATIDMAFini(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- char *mmio = atic->reg_base;
-
- if (atic->is_radeon) {
- MMIO_OUT32(mmio, RADEON_REG_ME_CNTL, 0);
- MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL,
- RADEON_CSQ_PRIDIS_INDDIS);
- } else {
- MMIO_OUT32(mmio, ATI_REG_CCE_WPTR,
- atis->ring_write | R128_PM4_BUFFER_DL_DONE);
- MMIO_OUT32(mmio, R128_REG_PM4_MICRO_CNTL, 0);
- MMIO_OUT32(mmio, R128_REG_PM4_BUFFER_CNTL,
- R128_PM4_NONPM4 | R128_PM4_BUFFER_CNTL_NOUPDATE);
- }
- atis->cce_pri_size = 0;
-
- ATIEngineReset(atis);
-
- if (atis->using_agp)
- ATIFiniAGP(pScreen);
- else
- KdOffscreenFree(pScreen, atis->dma_space);
-
- return TRUE;
-}
-
-void
-ATIDMASetup(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
-
-#ifdef USE_DRI
- if (atis->using_dri)
- ATIDRIDMAStart(atis);
-#endif /* USE_DRI */
-
- if (!atis->using_dri) {
- atis->using_agp = FALSE;
- if (atic->is_agp && ATIDMAInit(pScreen, TRUE)) {
- atis->using_agp = TRUE;
- atis->using_dma = TRUE;
- } else if (ATIDMAInit(pScreen, FALSE)) {
- atis->using_agp = FALSE;
- atis->using_dma = TRUE;
- } else if (ATIPseudoDMAInit(pScreen))
- atis->using_pseudo = TRUE;
- else
- atis->using_pio = TRUE;
- }
-
- atis->indirectBuffer = ATIGetDMABuffer(atis);
- if (atis->indirectBuffer == FALSE)
- FatalError("Failed to allocate DMA buffer.\n");
-
- if (atis->using_dri)
- ErrorF("Initialized %s DRI DMA\n",
- atis->using_agp ? "AGP" : "PCI");
- else if (atis->using_dma && atis->using_agp)
- ErrorF("Initialized AGP DMA\n");
- else if (atis->using_dma)
- ErrorF("Initialized framebuffer pseudo-DMA\n");
- else if (atis->using_pseudo)
- ErrorF("Initialized pseudo-DMA\n");
- else if (atis->using_pio)
- ErrorF("Initialized PIO\n");
-}
-
-void
-ATIDMATeardown(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
-
- ATIWaitIdle(atis);
-
-#ifdef USE_DRI
- if (atis->using_dri)
- ATIDRIDMAStop(atis);
-#endif /* USE_DRI */
-
- if (atis->using_dma)
- ATIDMAFini(pScreen);
-
- if (atis->using_pseudo)
- ATIPseudoDMAFini(pScreen);
-
- if (atis->using_pio || atis->using_pseudo || atis->using_dma) {
- xfree(atis->indirectBuffer->address);
- xfree(atis->indirectBuffer);
- }
- atis->indirectBuffer = NULL;
-
- atis->using_pio = FALSE;
- atis->using_pseudo = FALSE;
- atis->using_dma = FALSE;
- atis->using_agp = FALSE;
-}
-
diff --git a/hw/kdrive/ati/ati_dma.h b/hw/kdrive/ati/ati_dma.h
deleted file mode 100644
index 4c2092b2c..000000000
--- a/hw/kdrive/ati/ati_dma.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright © 2004 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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 _ATI_DMA_H_
-#define _ATI_DMA_H_
-
-#define CCE_DEBUG 1
-
-#if !CCE_DEBUG
-#define DMA_PACKET0(reg, count) \
- (ATI_CCE_PACKET0 | (((count) - 1) << 16) | ((reg) >> 2))
-#else
-#define DMA_PACKET0(reg, count) \
- (__packet0count = (count), __reg = (reg), \
- ATI_CCE_PACKET0 | (((count) - 1) << 16) | ((reg) >> 2))
-#endif
-#define DMA_PACKET1(reg1, reg2) \
- (ATI_CCE_PACKET1 | \
- (((reg2) >> 2) << ATI_CCE_PACKET1_REG_2_SHIFT) | ((reg1) >> 2))
-#define DMA_PACKET3(type, count) \
- ((type) | (((count) - 1) << 16))
-
-#if !CCE_DEBUG
-
-#define RING_LOCALS CARD32 *__head; int __count
-#define BEGIN_DMA(n) \
-do { \
- if ((atis->indirectBuffer->used + 4*(n)) > \
- atis->indirectBuffer->size) { \
- ATIFlushIndirect(atis, 1); \
- } \
- __head = (CARD32 *)((char *)atis->indirectBuffer->address + \
- atis->indirectBuffer->used); \
- __count = 0; \
-} while (0)
-#define END_DMA() do { \
- atis->indirectBuffer->used += __count * 4; \
-} while (0)
-
-#else
-
-#define RING_LOCALS \
- CARD32 *__head; int __count, __total, __reg, __packet0count
-#define BEGIN_DMA(n) \
-do { \
- if ((atis->indirectBuffer->used + 4*(n)) > \
- atis->indirectBuffer->size) { \
- ATIFlushIndirect(atis, 1); \
- } \
- __head = (CARD32 *)((char *)atis->indirectBuffer->address + \
- atis->indirectBuffer->used); \
- __count = 0; \
- __total = n; \
- __reg = 0; \
- __packet0count = 0; \
-} while (0)
-#define END_DMA() do { \
- if (__count != __total) \
- FatalError("count != total (%d vs %d) at %s:%d\n", \
- __count, __total, __FILE__, __LINE__); \
- atis->indirectBuffer->used += __count * 4; \
-} while (0)
-
-#endif
-
-#define OUT_RING(val) do { \
- __head[__count++] = (val); \
-} while (0)
-
-#define OUT_RING_REG(reg, val) do { \
- if (__reg != reg) \
- FatalError("unexpected reg (0x%x vs 0x%x) at %s:%d\n", \
- reg, __reg, __FILE__, __LINE__); \
- if (__packet0count-- <= 0) \
- FatalError("overrun of packet0 at %s:%d\n", \
- __FILE__, __LINE__); \
- __head[__count++] = (val); \
- __reg += 4; \
-} while (0)
-
-#define OUT_RING_F(x) OUT_RING(GET_FLOAT_BITS(x))
-
-#define OUT_REG(reg, val) \
-do { \
- OUT_RING(DMA_PACKET0(reg, 1)); \
- OUT_RING(val); \
-} while (0)
-
-#define TIMEOUT_LOCALS struct timeval _target, _curtime
-
-static inline Bool
-tv_le(struct timeval *tv1, struct timeval *tv2)
-{
- if (tv1->tv_sec < tv2->tv_sec ||
- (tv1->tv_sec == tv2->tv_sec && tv1->tv_usec < tv2->tv_usec))
- return TRUE;
- else
- return FALSE;
-}
-
-#define WHILE_NOT_TIMEOUT(_timeout) \
- gettimeofday(&_target, NULL); \
- _target.tv_usec += ((_timeout) * 1000000); \
- _target.tv_sec += _target.tv_usec / 1000000; \
- _target.tv_usec = _target.tv_usec % 1000000; \
- while (gettimeofday(&_curtime, NULL), tv_le(&_curtime, &_target))
-
-#define TIMEDOUT() (!tv_le(&_curtime, &_target))
-
-dmaBuf *
-ATIGetDMABuffer(ATIScreenInfo *atis);
-
-void
-ATIFlushIndirect(ATIScreenInfo *atis, Bool discard);
-
-void
-ATIDMASetup(ScreenPtr pScreen);
-
-void
-ATIDMATeardown(ScreenPtr pScreen);
-
-#endif /* _ATI_DMA_H_ */
diff --git a/hw/kdrive/ati/ati_draw.c b/hw/kdrive/ati/ati_draw.c
deleted file mode 100644
index c10fea471..000000000
--- a/hw/kdrive/ati/ati_draw.c
+++ /dev/null
@@ -1,918 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "ati.h"
-#include "ati_reg.h"
-#include "ati_dma.h"
-#include "ati_draw.h"
-#include "kaa.h"
-
-CARD8 ATISolidRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0xa0, /* src AND dst */
- /* GXandReverse */ 0x50, /* src AND NOT dst */
- /* GXcopy */ 0xf0, /* src */
- /* GXandInverted*/ 0x0a, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x5a, /* src XOR dst */
- /* GXor */ 0xfa, /* src OR dst */
- /* GXnor */ 0x05, /* NOT src AND NOT dst */
- /* GXequiv */ 0xa5, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xf5, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x0f, /* NOT src */
- /* GXorInverted */ 0xaf, /* NOT src OR dst */
- /* GXnand */ 0x5f, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-CARD8 ATIBltRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0x88, /* src AND dst */
- /* GXandReverse */ 0x44, /* src AND NOT dst */
- /* GXcopy */ 0xcc, /* src */
- /* GXandInverted*/ 0x22, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x66, /* src XOR dst */
- /* GXor */ 0xee, /* src OR dst */
- /* GXnor */ 0x11, /* NOT src AND NOT dst */
- /* GXequiv */ 0x99, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xdd, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x33, /* NOT src */
- /* GXorInverted */ 0xbb, /* NOT src OR dst */
- /* GXnand */ 0x77, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-int copydx, copydy;
-ATIScreenInfo *accel_atis;
-/* If is_24bpp is set, then we are using the accelerator in 8-bit mode due
- * to it being broken for 24bpp, so coordinates have to be multiplied by 3.
- */
-Bool is_24bpp;
-CARD32 settings, color, src_pitch_offset, dst_pitch_offset;
-
-int sample_count;
-float sample_offsets_x[255];
-float sample_offsets_y[255];
-
-#define DRAW_USING_PACKET3 0
-
-void
-ATIDrawSetup(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- RING_LOCALS;
-
- /* XXX: this shouldn't be necessary, but fixes some R128 composite
- * issues.
- */
- /*if (!atic->is_radeon) {
- char *mmio = atic->reg_base;
- ATIWaitIdle(atis);
- MMIO_OUT32(mmio, R128_REG_PC_GUI_MODE,
- R128_PC_BYPASS_EN);
- }*/
-
- BEGIN_DMA(2);
- OUT_REG(ATI_REG_DEFAULT_SC_BOTTOM_RIGHT,
- ATI_DEFAULT_SC_RIGHT_MAX | ATI_DEFAULT_SC_BOTTOM_MAX);
- END_DMA();
-
- if (!atic->is_radeon) {
- /* Setup for R128 Composite */
- BEGIN_DMA(12);
- OUT_REG(R128_REG_SCALE_3D_CNTL,
- R128_SCALE_3D_TEXMAP_SHADE |
- R128_SCALE_PIX_REPLICATE |
- R128_TEX_CACHE_SPLIT |
- R128_TEX_MAP_ALPHA_IN_TEXTURE |
- R128_TEX_CACHE_LINE_SIZE_4QW);
- OUT_REG(R128_REG_SETUP_CNTL,
- R128_COLOR_SOLID_COLOR |
- R128_PRIM_TYPE_TRI |
- R128_TEXTURE_ST_MULT_W |
- R128_STARTING_VERTEX_1 |
- R128_ENDING_VERTEX_3 |
- R128_SUB_PIX_4BITS);
- OUT_REG(R128_REG_PM4_VC_FPU_SETUP,
- R128_FRONT_DIR_CCW |
- R128_BACKFACE_CULL |
- R128_FRONTFACE_SOLID |
- R128_FPU_COLOR_SOLID |
- R128_FPU_SUB_PIX_4BITS |
- R128_FPU_MODE_3D |
- R128_TRAP_BITS_DISABLE |
- R128_XFACTOR_2 |
- R128_YFACTOR_2 |
- R128_FLAT_SHADE_VERTEX_OGL |
- R128_FPU_ROUND_TRUNCATE |
- R128_WM_SEL_8DW);
- OUT_REG(R128_REG_PLANE_3D_MASK_C, 0xffffffff);
- OUT_REG(R128_REG_CONSTANT_COLOR_C, 0xff000000);
- OUT_REG(R128_REG_WINDOW_XY_OFFSET, 0x00000000);
- END_DMA();
- } else if (!atic->is_r300) {
- /* Setup for R100/R200 Composite */
- BEGIN_DMA(8);
- OUT_REG(RADEON_REG_RE_TOP_LEFT, 0);
- OUT_REG(RADEON_REG_RE_WIDTH_HEIGHT, 0xffffffff);
- OUT_REG(RADEON_REG_RB3D_PLANEMASK, 0xffffffff);
- OUT_REG(RADEON_REG_SE_CNTL,
- RADEON_FFACE_CULL_CCW |
- RADEON_FFACE_SOLID |
- RADEON_VTX_PIX_CENTER_OGL);
- END_DMA();
-
- if (atic->is_r100) {
- BEGIN_DMA(6);
- OUT_REG(RADEON_REG_SE_CNTL_STATUS, RADEON_TCL_BYPASS);
- OUT_REG(RADEON_REG_SE_COORD_FMT,
- RADEON_VTX_XY_PRE_MULT_1_OVER_W0 |
- RADEON_VTX_ST0_NONPARAMETRIC |
- RADEON_VTX_ST1_NONPARAMETRIC |
- RADEON_TEX1_W_ROUTING_USE_W0);
- OUT_REG(RADEON_REG_RB3D_DSTCACHE_MODE,
- RADEON_RB3D_DC_2D_CACHE_AUTOFLUSH |
- RADEON_RB3D_DC_3D_CACHE_AUTOFLUSH);
- END_DMA();
- } else {
- BEGIN_DMA(18);
- /* XXX: The 0 below should be RADEON_TCL_BYPASS on
- * RS300s.
- */
- OUT_REG(R200_REG_SE_VAP_CNTL_STATUS, 0);
- OUT_REG(R200_REG_PP_CNTL_X, 0);
- OUT_REG(R200_REG_PP_TXMULTI_CTL_0, 0);
- OUT_REG(R200_REG_SE_VTX_STATE_CNTL, 0);
- OUT_REG(R200_REG_RE_CNTL, 0);
- /* XXX: VTX_ST_DENORMALIZED is illegal for the case of
- * repeating textures.
- */
- OUT_REG(R200_REG_SE_VTE_CNTL, R200_VTX_ST_DENORMALIZED);
- OUT_REG(R200_REG_SE_VAP_CNTL,
- R200_VAP_FORCE_W_TO_ONE |
- R200_VAP_VF_MAX_VTX_NUM);
- OUT_REG(R200_REG_RE_AUX_SCISSOR_CNTL, 0);
- OUT_REG(RADEON_REG_RB3D_DSTCACHE_MODE,
- RADEON_RB3D_DC_2D_CACHE_AUTOFLUSH |
- RADEON_RB3D_DC_3D_CACHE_AUTOFLUSH |
- R200_RB3D_DC_2D_CACHE_AUTOFREE |
- R200_RB3D_DC_3D_CACHE_AUTOFREE);
- END_DMA();
- }
- }
-}
-
-static void
-ATIWaitMarker(ScreenPtr pScreen, int marker)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
-
- ENTER_DRAW(0);
- ATIWaitIdle(atis);
- LEAVE_DRAW(0);
-}
-
-void
-RadeonSwitchTo2D(ATIScreenInfo *atis)
-{
- RING_LOCALS;
-
- ENTER_DRAW(0);
- BEGIN_DMA(4);
- OUT_REG(RADEON_REG_RB3D_DSTCACHE_CTLSTAT, RADEON_RB3D_DC_FLUSH);
- OUT_REG(ATI_REG_WAIT_UNTIL,
- RADEON_WAIT_HOST_IDLECLEAN | RADEON_WAIT_3D_IDLECLEAN);
- END_DMA();
- LEAVE_DRAW(0);
-}
-
-void
-RadeonSwitchTo3D(ATIScreenInfo *atis)
-{
- RING_LOCALS;
-
- ENTER_DRAW(0);
- BEGIN_DMA(4);
- OUT_REG(RADEON_REG_RB3D_DSTCACHE_CTLSTAT, RADEON_RB3D_DC_FLUSH);
- /* We must wait for 3d to idle, in case source was just written as a dest. */
- OUT_REG(ATI_REG_WAIT_UNTIL,
- RADEON_WAIT_HOST_IDLECLEAN | RADEON_WAIT_2D_IDLECLEAN | RADEON_WAIT_3D_IDLECLEAN);
- END_DMA();
- LEAVE_DRAW(0);
-}
-
-#if ATI_TRACE_DRAW
-void
-ATIEnterDraw (PixmapPtr pPix, char *function)
-{
- if (pPix != NULL) {
- KdScreenPriv(pPix->drawable.pScreen);
- CARD32 offset;
-
- offset = ((CARD8 *)pPix->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
-
- ErrorF ("Enter %s 0x%x (%dx%dx%d/%d)\n", function, offset,
- pPix->drawable.width, pPix->drawable.height, pPix->drawable.depth,
- pPix->drawable.bitsPerPixel);
- } else
- ErrorF ("Enter %s\n", function);
-}
-
-void
-ATILeaveDraw (PixmapPtr pPix, char *function)
-{
- if (pPix != NULL) {
- KdScreenPriv(pPix->drawable.pScreen);
- CARD32 offset;
-
- offset = ((CARD8 *)pPix->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
-
- ErrorF ("Leave %s 0x%x\n", function, offset);
- } else
- ErrorF ("Leave %s\n", function);
-}
-#endif
-
-/* Assumes that depth 15 and 16 can be used as depth 16, which is okay since we
- * require src and dest datatypes to be equal.
- */
-static Bool
-ATIGetDatatypeBpp(int bpp, CARD32 *type)
-{
- switch (bpp) {
- case 8:
- *type = R128_DATATYPE_CI8;
- return TRUE;
- case 16:
- *type = R128_DATATYPE_RGB565;
- return TRUE;
- case 24:
- *type = R128_DATATYPE_CI8;
- return TRUE;
- case 32:
- *type = R128_DATATYPE_ARGB8888;
- return TRUE;
- default:
- ATI_FALLBACK(("Unsupported bpp: %d\n", bpp));
- return FALSE;
- }
-}
-
-Bool
-ATIGetOffsetPitch(ATIScreenInfo *atis, int bpp, CARD32 *pitch_offset,
- int offset, int pitch)
-{
- ATICardInfo *atic = atis->atic;
-
- /* On the R128, depending on the bpp the screen can be set up so that it
- * doesn't meet the pitchAlign requirement but can still be
- * accelerated, so we check the specific pitch requirement of alignment
- * to 8 pixels.
- */
- if (atic->is_radeon) {
- if (pitch % atis->kaa.pitchAlign != 0)
- ATI_FALLBACK(("Bad pitch 0x%08x\n", pitch));
- *pitch_offset = ((pitch >> 6) << 22) | (offset >> 10);
-
- } else {
- if (pitch % bpp != 0)
- ATI_FALLBACK(("Bad pitch 0x%08x\n", pitch));
- *pitch_offset = ((pitch / bpp) << 21) | (offset >> 5);
- }
-
- if (offset % atis->kaa.offsetAlign != 0)
- ATI_FALLBACK(("Bad offset 0x%08x\n", offset));
-
- return TRUE;
-}
-
-Bool
-ATIGetPixmapOffsetPitch(PixmapPtr pPix, CARD32 *pitch_offset)
-{
- KdScreenPriv(pPix->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- CARD32 pitch, offset;
- int bpp;
-
- bpp = pPix->drawable.bitsPerPixel;
- if (bpp == 24)
- bpp = 8;
-
- offset = ((CARD8 *)pPix->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
- pitch = pPix->devKind;
-
- return ATIGetOffsetPitch(atis, bpp, pitch_offset, offset, pitch);
-}
-
-static Bool
-ATIPrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
-{
- KdScreenPriv(pPix->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- CARD32 datatype;
- RING_LOCALS;
-
- is_24bpp = (pPix->drawable.bitsPerPixel == 24);
- accel_atis = atis;
-
- if (is_24bpp) {
- /* Solid fills in fake-24bpp mode only work if the pixel color
- * and planemask are all the same byte.
- */
- if ((fg & 0xffffff) != (((fg & 0xff) << 16) | ((fg >> 8) &
- 0xffff)))
- ATI_FALLBACK(("Can't do solid color 0x%08x in 24bpp\n",
- fg));
- if ((pm & 0xffffff) != (((pm & 0xff) << 16) | ((pm >> 8) &
- 0xffff)))
- ATI_FALLBACK(("Can't do planemask 0x%08x in 24bpp\n",
- pm));
- }
-
- if (!ATIGetDatatypeBpp(pPix->drawable.bitsPerPixel, &datatype))
- return FALSE;
- if (!ATIGetPixmapOffsetPitch(pPix, &dst_pitch_offset))
- return FALSE;
-
- ENTER_DRAW(pPix);
-
- if (atic->is_radeon)
- RadeonSwitchTo2D(atis);
-
- settings =
- ATI_GMC_DST_PITCH_OFFSET_CNTL |
- ATI_GMC_BRUSH_SOLID_COLOR |
- (datatype << 8) |
- ATI_GMC_SRC_DATATYPE_COLOR |
- (ATISolidRop[alu] << 16) |
- ATI_GMC_CLR_CMP_CNTL_DIS |
- R128_GMC_AUX_CLIP_DIS;
- color = fg;
-
-#if DRAW_USING_PACKET3
- BEGIN_DMA(6);
- OUT_REG(ATI_REG_DEFAULT_SC_BOTTOM_RIGHT,
- ATI_DEFAULT_SC_RIGHT_MAX | ATI_DEFAULT_SC_BOTTOM_MAX);
- OUT_REG(ATI_REG_DP_WRITE_MASK, pm);
- OUT_REG(ATI_REG_DP_CNTL, ATI_DST_X_LEFT_TO_RIGHT |
- ATI_DST_Y_TOP_TO_BOTTOM);
- END_DMA();
-#else
- BEGIN_DMA(12);
- OUT_REG(ATI_REG_DEFAULT_SC_BOTTOM_RIGHT,
- ATI_DEFAULT_SC_RIGHT_MAX | ATI_DEFAULT_SC_BOTTOM_MAX);
- OUT_REG(ATI_REG_DST_PITCH_OFFSET, dst_pitch_offset);
- OUT_REG(ATI_REG_DP_GUI_MASTER_CNTL, settings);
- OUT_REG(ATI_REG_DP_BRUSH_FRGD_CLR, fg);
- OUT_REG(ATI_REG_DP_WRITE_MASK, pm);
- OUT_REG(ATI_REG_DP_CNTL, ATI_DST_X_LEFT_TO_RIGHT |
- ATI_DST_Y_TOP_TO_BOTTOM);
- END_DMA();
-#endif
-
- LEAVE_DRAW(pPix);
- return TRUE;
-}
-
-static void
-ATISolid(int x1, int y1, int x2, int y2)
-{
- ENTER_DRAW(0);
- ATIScreenInfo *atis = accel_atis;
- RING_LOCALS;
-
- if (is_24bpp) {
- x1 *= 3;
- x2 *= 3;
- }
-#if DRAW_USING_PACKET3
- BEGIN_DMA(6);
- OUT_RING(DMA_PACKET3(ATI_CCE_PACKET3_PAINT_MULTI, 5));
- OUT_RING(settings);
- OUT_RING(dst_pitch_offset);
- OUT_RING(color);
- OUT_RING((x1 << 16) | y1);
- OUT_RING(((x2 - x1) << 16) | (y2 - y1));
- END_DMA();
-#else
- BEGIN_DMA(3);
- OUT_RING(DMA_PACKET0(ATI_REG_DST_Y_X, 2));
- OUT_RING_REG(ATI_REG_DST_Y_X, (y1 << 16) | x1);
- OUT_RING_REG(ATI_REG_DST_HEIGHT_WIDTH, ((y2 - y1) << 16) | (x2 - x1));
- END_DMA();
-#endif
- LEAVE_DRAW(0);
-}
-
-static void
-ATIDoneSolid(void)
-{
- ENTER_DRAW(0);
- LEAVE_DRAW(0);
-}
-
-static Bool
-ATIPrepareCopy(PixmapPtr pSrc, PixmapPtr pDst, int dx, int dy, int alu, Pixel pm)
-{
- KdScreenPriv(pDst->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- CARD32 datatype;
- RING_LOCALS;
-
- copydx = dx;
- copydy = dy;
- is_24bpp = pDst->drawable.bitsPerPixel == 24;
- accel_atis = atis;
-
- if (is_24bpp && ((pm & 0xffffff) != (((pm & 0xff) << 16) | ((pm >> 8) &
- 0xffff))))
- ATI_FALLBACK(("Can't do planemask 0x%08x in 24bpp\n", pm));
-
- if (!ATIGetDatatypeBpp(pDst->drawable.bitsPerPixel, &datatype))
- return FALSE;
- if (!ATIGetPixmapOffsetPitch(pSrc, &src_pitch_offset))
- return FALSE;
- if (!ATIGetPixmapOffsetPitch(pDst, &dst_pitch_offset))
- return FALSE;
-
- ENTER_DRAW (pDst);
- if (atic->is_radeon)
- RadeonSwitchTo2D(atis);
-
- settings =
- ATI_GMC_SRC_PITCH_OFFSET_CNTL |
- ATI_GMC_DST_PITCH_OFFSET_CNTL |
- ATI_GMC_BRUSH_NONE |
- (datatype << 8) |
- ATI_GMC_SRC_DATATYPE_COLOR |
- (ATIBltRop[alu] << 16) |
- ATI_DP_SRC_SOURCE_MEMORY |
- ATI_GMC_CLR_CMP_CNTL_DIS |
- R128_GMC_AUX_CLIP_DIS;
-
-#if DRAW_USING_PACKET3
- BEGIN_DMA(6);
- OUT_REG(ATI_REG_DEFAULT_SC_BOTTOM_RIGHT,
- ATI_DEFAULT_SC_RIGHT_MAX | ATI_DEFAULT_SC_BOTTOM_MAX);
- OUT_REG(ATI_REG_DP_WRITE_MASK, pm);
- OUT_REG(ATI_REG_DP_CNTL,
- (dx >= 0 ? ATI_DST_X_LEFT_TO_RIGHT : 0) |
- (dy >= 0 ? ATI_DST_Y_TOP_TO_BOTTOM : 0));
- END_DMA();
-
-#else
- BEGIN_DMA(12);
- OUT_REG(ATI_REG_DEFAULT_SC_BOTTOM_RIGHT,
- ATI_DEFAULT_SC_RIGHT_MAX | ATI_DEFAULT_SC_BOTTOM_MAX);
- OUT_REG(ATI_REG_SRC_PITCH_OFFSET, src_pitch_offset);
- OUT_REG(ATI_REG_DST_PITCH_OFFSET, dst_pitch_offset);
- OUT_REG(ATI_REG_DP_GUI_MASTER_CNTL, settings);
- OUT_REG(ATI_REG_DP_WRITE_MASK, pm);
- OUT_REG(ATI_REG_DP_CNTL,
- (dx >= 0 ? ATI_DST_X_LEFT_TO_RIGHT : 0) |
- (dy >= 0 ? ATI_DST_Y_TOP_TO_BOTTOM : 0));
- END_DMA();
-#endif
- LEAVE_DRAW(pDst);
-
- return TRUE;
-}
-
-static void
-ATICopy(int srcX, int srcY, int dstX, int dstY, int w, int h)
-{
- ATIScreenInfo *atis = accel_atis;
- RING_LOCALS;
-
- if (is_24bpp) {
- srcX *= 3;
- dstX *= 3;
- w *= 3;
- }
-
-#if !DRAW_USING_PACKET3
- if (copydx < 0) {
- srcX += w - 1;
- dstX += w - 1;
- }
-
- if (copydy < 0) {
- srcY += h - 1;
- dstY += h - 1;
- }
-#endif
-
-#if DRAW_USING_PACKET3
- BEGIN_DMA(7);
- OUT_RING(DMA_PACKET3(ATI_CCE_PACKET3_BITBLT_MULTI, 6));
- OUT_RING(settings);
- OUT_RING(src_pitch_offset);
- OUT_RING(dst_pitch_offset);
- OUT_RING((srcX << 16) | srcY);
- OUT_RING((dstX << 16) | dstY);
- OUT_RING((w << 16) | h);
- END_DMA();
-#else
- BEGIN_DMA(4);
- OUT_RING(DMA_PACKET0(ATI_REG_SRC_Y_X, 3));
- OUT_RING_REG(ATI_REG_SRC_Y_X, (srcY << 16) | srcX);
- OUT_RING_REG(ATI_REG_DST_Y_X, (dstY << 16) | dstX);
- OUT_RING_REG(ATI_REG_DST_HEIGHT_WIDTH, (h << 16) | w);
- END_DMA();
-#endif
-}
-
-static void
-ATIDoneCopy(void)
-{
-}
-
-static Bool
-ATIUploadToScreen(PixmapPtr pDst, char *src, int src_pitch)
-{
- ScreenPtr pScreen = pDst->drawable.pScreen;
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- int width, height, bpp, i, dwords;
- int dst_pitch, dst_offset;
- CARD32 dst_pitch_offset, datatype;
- Bool success;
- RING_LOCALS;
-
- ENTER_DRAW (pDst);
-
- LEAVE_DRAW (pDst);
- /* XXX: Hostdata uploads aren't working yet. */
- return FALSE;
-
- dst_offset = ((CARD8 *)pDst->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
- dst_pitch = pDst->devKind;
- width = pDst->drawable.width;
- height = pDst->drawable.height;
- bpp = pDst->drawable.bitsPerPixel;
-
- success = ATIGetDatatypeBpp(bpp, &datatype);
-
- if (bpp == 24) {
- is_24bpp = TRUE;
- bpp = 8;
- } else
- is_24bpp = FALSE;
-
- if (!ATIGetOffsetPitch(atis, bpp, &dst_pitch_offset, dst_offset,
- dst_pitch))
- return FALSE;
-
- if (src_pitch != (width * bpp / 8))
- return FALSE;
-
- /* No PACKET3 packets when in PIO mode. */
- if (atis->using_pio)
- return FALSE;
-
- dwords = (width * height * (bpp / 8) + 3) / 4;
-
- /* Flush pixel cache so nothing being written to the destination
- * previously gets mixed up with the hostdata blit.
- */
- if (atic->is_radeon) {
- BEGIN_DMA(4);
- OUT_REG(RADEON_REG_RB3D_DSTCACHE_CTLSTAT, RADEON_RB3D_DC_FLUSH);
- OUT_REG(ATI_REG_WAIT_UNTIL,
- RADEON_WAIT_2D_IDLECLEAN |
- RADEON_WAIT_3D_IDLECLEAN |
- RADEON_WAIT_HOST_IDLECLEAN);
- END_DMA();
- } else {
- BEGIN_DMA(2);
- OUT_REG(R128_REG_PC_GUI_CTLSTAT,
- R128_PC_FLUSH_GUI | R128_PC_RI_GUI);
- END_DMA();
- }
-
- BEGIN_DMA(8);
- OUT_RING(DMA_PACKET3(ATI_CCE_PACKET3_HOSTDATA_BLT, 7 + dwords));
- OUT_RING(ATI_GMC_DST_PITCH_OFFSET_CNTL |
- ATI_GMC_BRUSH_NONE |
- (datatype << 8) |
- ATI_GMC_SRC_DATATYPE_COLOR |
- (ATISolidRop[GXcopy] << 16) |
- ATI_DP_SRC_SOURCE_HOST_DATA |
- ATI_GMC_CLR_CMP_CNTL_DIS |
- R128_GMC_AUX_CLIP_DIS |
- ATI_GMC_WR_MSK_DIS);
- OUT_RING(dst_pitch_offset);
- OUT_RING(0xffffffff);
- OUT_RING(0xffffffff);
- OUT_RING((0 << 16) | 0);
- OUT_RING((height << 16) | width);
- OUT_RING(dwords);
- END_DMA();
-
- for (i = 0; i < dwords; i++) {
- BEGIN_DMA(1);
- OUT_RING(((CARD32 *)src)[i]);
- END_DMA();
- }
-
- if (atic->is_radeon) {
- BEGIN_DMA(4);
- OUT_REG(RADEON_REG_RB3D_DSTCACHE_CTLSTAT,
- RADEON_RB3D_DC_FLUSH_ALL);
- OUT_REG(ATI_REG_WAIT_UNTIL,
- RADEON_WAIT_2D_IDLECLEAN |
- RADEON_WAIT_HOST_IDLECLEAN);
- END_DMA();
- } else {
- BEGIN_DMA(2);
- OUT_REG(R128_REG_PC_GUI_CTLSTAT, R128_PC_FLUSH_GUI);
- END_DMA();
- }
-
- kaaMarkSync(pScreen);
-
- ErrorF("hostdata upload %d,%d %dbpp\n", width, height, bpp);
-
- return TRUE;
-}
-
-
-static Bool
-ATIUploadToScratch(PixmapPtr pSrc, PixmapPtr pDst)
-{
- KdScreenPriv(pSrc->drawable.pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- int dst_pitch, src_pitch, w, i, size, bytes;
- unsigned char *dst, *src;
- RING_LOCALS;
-
- ENTER_DRAW(pSrc);
- /* Align width to log 2, useful for R128 composite. This should be a
- * KAA flag we check for (and supported in kaa.c in general) since many
- * older bits of hardware are going to want POT pitches.
- */
- w = pSrc->drawable.width;
- if (atis->kaa.flags & KAA_OFFSCREEN_ALIGN_POT)
- w = 1 << (ATILog2(w - 1) + 1);
- dst_pitch = (w * pSrc->drawable.bitsPerPixel / 8 +
- atis->kaa.pitchAlign - 1) & ~(atis->kaa.pitchAlign - 1);
-
- size = dst_pitch * pSrc->drawable.height;
- if (size > atis->scratch_area->size)
- ATI_FALLBACK(("Pixmap too large for scratch (%d,%d)\n",
- pSrc->drawable.width, pSrc->drawable.height));
-
- atis->scratch_next = (atis->scratch_next + atis->kaa.offsetAlign - 1) &
- ~(atis->kaa.offsetAlign - 1);
- if (atis->scratch_next + size > atis->scratch_area->offset +
- atis->scratch_area->size) {
- /* Only sync when we've used all of the scratch area. */
- kaaWaitSync(pSrc->drawable.pScreen);
- atis->scratch_next = atis->scratch_area->offset;
- }
- memcpy(pDst, pSrc, sizeof(*pDst));
- pDst->devKind = dst_pitch;
- pDst->devPrivate.ptr = pScreenPriv->screen->memory_base +
- atis->scratch_next;
- atis->scratch_next += size;
-
- src = pSrc->devPrivate.ptr;
- src_pitch = pSrc->devKind;
- dst = pDst->devPrivate.ptr;
- bytes = src_pitch < dst_pitch ? src_pitch : dst_pitch;
-
- i = pSrc->drawable.height;
- while (i--) {
- memcpy(dst, src, bytes);
- dst += dst_pitch;
- src += src_pitch;
- }
-
- /* Flush the pixel cache */
- if (atic->is_radeon) {
- BEGIN_DMA(4);
- OUT_REG(RADEON_REG_RB3D_DSTCACHE_CTLSTAT,
- RADEON_RB3D_DC_FLUSH_ALL);
- OUT_REG(ATI_REG_WAIT_UNTIL, RADEON_WAIT_HOST_IDLECLEAN);
- END_DMA();
- } else {
- BEGIN_DMA(2);
- OUT_REG(R128_REG_PC_GUI_CTLSTAT, R128_PC_FLUSH_ALL);
- END_DMA();
- }
-
- LEAVE_DRAW(pSrc);
- return TRUE;
-}
-
-static void
-ATIBlockHandler(pointer blockData, OSTimePtr timeout, pointer readmask)
-{
- ScreenPtr pScreen = (ScreenPtr) blockData;
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
-
- /* When the server is going to sleep, make sure that all DMA data has
- * been flushed.
- */
- if (atis->indirectBuffer)
- ATIFlushIndirect(atis, 1);
-}
-
-static void
-ATIWakeupHandler(pointer blockData, int result, pointer readmask)
-{
-}
-
-Bool
-ATIDrawInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
-
- ErrorF("Screen: %d/%d depth/bpp\n", pScreenPriv->screen->fb[0].depth,
- pScreenPriv->screen->fb[0].bitsPerPixel);
-
- RegisterBlockAndWakeupHandlers(ATIBlockHandler, ATIWakeupHandler,
- pScreen);
-
-#ifdef USE_DRI
- atis->using_dri = ATIDRIScreenInit(pScreen);
-#endif /* USE_DRI */
-
- memset(&atis->kaa, 0, sizeof(KaaScreenInfoRec));
- atis->kaa.waitMarker = ATIWaitMarker;
- atis->kaa.PrepareSolid = ATIPrepareSolid;
- atis->kaa.Solid = ATISolid;
- atis->kaa.DoneSolid = ATIDoneSolid;
- atis->kaa.PrepareCopy = ATIPrepareCopy;
- atis->kaa.Copy = ATICopy;
- atis->kaa.DoneCopy = ATIDoneCopy;
- /* Other acceleration will be hooked in in DrawEnable depending on
- * what type of DMA gets initialized.
- */
-
- atis->kaa.flags = KAA_OFFSCREEN_PIXMAPS;
- if (atic->is_radeon) {
- atis->kaa.offsetAlign = 1024;
- atis->kaa.pitchAlign = 64;
- } else {
- /* Rage 128 compositing wants power-of-two pitches. */
- atis->kaa.flags |= KAA_OFFSCREEN_ALIGN_POT;
- atis->kaa.offsetAlign = 32;
- /* Pitch alignment is in sets of 8 pixels, and we need to cover
- * 32bpp, so 32 bytes.
- */
- atis->kaa.pitchAlign = 32;
- }
-
- kaaInitTrapOffsets(8, sample_offsets_x, sample_offsets_y, 0.0, 0.0);
- sample_count = (1 << 8) - 1;
-
- if (!kaaDrawInit(pScreen, &atis->kaa))
- return FALSE;
-
- return TRUE;
-}
-
-static void
-ATIScratchSave(ScreenPtr pScreen, KdOffscreenArea *area)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
-
- atis->scratch_area = NULL;
-}
-
-void
-ATIDrawEnable(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
-
- ATIDMASetup(pScreen);
- ATIDrawSetup(pScreen);
-
- atis->scratch_area = NULL;
- atis->kaa.PrepareBlend = NULL;
- atis->kaa.Blend = NULL;
- atis->kaa.DoneBlend = NULL;
- atis->kaa.CheckComposite = NULL;
- atis->kaa.PrepareComposite = NULL;
- atis->kaa.Composite = NULL;
- atis->kaa.DoneComposite = NULL;
- atis->kaa.UploadToScreen = NULL;
- atis->kaa.UploadToScratch = NULL;
-
- /* We can't dispatch 3d commands in PIO mode. */
- if (!atis->using_pio) {
- if (!atic->is_radeon) {
- atis->kaa.CheckComposite = R128CheckComposite;
- atis->kaa.PrepareComposite = R128PrepareComposite;
- atis->kaa.Composite = R128Composite;
- atis->kaa.DoneComposite = R128DoneComposite;
- } else if (atic->is_r100) {
- atis->kaa.CheckComposite = R100CheckComposite;
- atis->kaa.PrepareComposite = R100PrepareComposite;
- atis->kaa.Composite = RadeonComposite;
- atis->kaa.DoneComposite = RadeonDoneComposite;
- } else if (atic->is_r200) {
- atis->kaa.CheckComposite = R200CheckComposite;
- atis->kaa.PrepareComposite = R200PrepareComposite;
- atis->kaa.Composite = RadeonComposite;
- atis->kaa.DoneComposite = RadeonDoneComposite;
- }
- }
-#ifdef USE_DRI
- if (atis->using_dri) {
- if (!atic->is_radeon) {
- /*atis->kaa.PrepareTrapezoids = R128PrepareTrapezoids;
- atis->kaa.Trapezoids = R128Trapezoids;
- atis->kaa.DoneTrapezoids = R128DoneTrapezoids;*/
- } else if (atic->is_r100 || atic->is_r200) {
- atis->kaa.PrepareTrapezoids = RadeonPrepareTrapezoids;
- atis->kaa.Trapezoids = RadeonTrapezoids;
- atis->kaa.DoneTrapezoids = RadeonDoneTrapezoids;
- }
- }
-#endif /* USE_DRI */
-
- atis->kaa.UploadToScreen = ATIUploadToScreen;
-
- /* Reserve a scratch area. It'll be used for storing glyph data during
- * Composite operations, because glyphs aren't in real pixmaps and thus
- * can't be migrated.
- */
- atis->scratch_area = KdOffscreenAlloc(pScreen, 131072,
- atis->kaa.offsetAlign, TRUE, ATIScratchSave, atis);
- if (atis->scratch_area != NULL) {
- atis->scratch_next = atis->scratch_area->offset;
- atis->kaa.UploadToScratch = ATIUploadToScratch;
- }
-
- kaaMarkSync(pScreen);
-}
-
-void
-ATIDrawDisable(ScreenPtr pScreen)
-{
- kaaWaitSync(pScreen);
- ATIDMATeardown(pScreen);
-}
-
-void
-ATIDrawFini(ScreenPtr pScreen)
-{
-#ifdef USE_DRI
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- if (atis->using_dri) {
- ATIDRICloseScreen(pScreen);
- atis->using_dri = FALSE;
- }
-#endif /* USE_DRI */
-
- RemoveBlockAndWakeupHandlers(ATIBlockHandler, ATIWakeupHandler,
- pScreen);
-
- kaaDrawFini(pScreen);
-}
-
diff --git a/hw/kdrive/ati/ati_draw.h b/hw/kdrive/ati/ati_draw.h
deleted file mode 100644
index 98a130a7b..000000000
--- a/hw/kdrive/ati/ati_draw.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright © 2004 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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 _ATI_DRAW_H_
-#define _ATI_DRAW_H_
-
-Bool ATIGetOffsetPitch(ATIScreenInfo *atis, int bpp, CARD32 *pitch_offset,
- int offset, int pitch);
-Bool ATIGetPixmapOffsetPitch(PixmapPtr pPix, CARD32 *pitch_offset);
-
-Bool R128CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture);
-Bool R128PrepareComposite(int op, PicturePtr pSrcPicture,
- PicturePtr pMaskPicture, PicturePtr pDstPicture, PixmapPtr pSrc,
- PixmapPtr pMask, PixmapPtr pDst);
-void R128Composite(int srcX, int srcY, int maskX, int maskY, int dstX, int dstY,
- int w, int h);
-void R128DoneComposite(void);
-
-Bool R128PrepareTrapezoids(PicturePtr pDstPicture, PixmapPtr pDst);
-void R128Trapezoids(KaaTrapezoid *traps, int ntraps);
-void R128DoneTrapezoids(void);
-
-Bool R100CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture);
-Bool R100PrepareComposite(int op, PicturePtr pSrcPicture,
- PicturePtr pMaskPicture, PicturePtr pDstPicture, PixmapPtr pSrc,
- PixmapPtr pMask, PixmapPtr pDst);
-Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture);
-Bool R200PrepareComposite(int op, PicturePtr pSrcPicture,
- PicturePtr pMaskPicture, PicturePtr pDstPicture, PixmapPtr pSrc,
- PixmapPtr pMask, PixmapPtr pDst);
-void RadeonComposite(int srcX, int srcY, int maskX, int maskY, int dstX,
- int dstY, int w, int h);
-void RadeonDoneComposite(void);
-
-Bool RadeonPrepareTrapezoids(PicturePtr pDstPicture, PixmapPtr pDst);
-void RadeonTrapezoids(KaaTrapezoid *traps, int ntraps);
-void RadeonDoneTrapezoids(void);
-
-void RadeonSwitchTo2D(ATIScreenInfo *atis);
-void RadeonSwitchTo3D(ATIScreenInfo *atis);
-void ATIWaitIdle(ATIScreenInfo *atis);
-
-#define ATI_TRACE_FALL 0
-#define ATI_TRACE_DRAW 0
-
-#if ATI_TRACE_FALL
-#define ATI_FALLBACK(x) \
-do { \
- ErrorF("%s: ", __FUNCTION__); \
- ErrorF x; \
- return FALSE; \
-} while (0)
-#else
-#define ATI_FALLBACK(x) return FALSE
-#endif
-
-#if ATI_TRACE_DRAW
-#define ENTER_DRAW(pix) ATIEnterDraw(pix, __FUNCTION__)
-#define LEAVE_DRAW(pix) ATILeaveDraw(pix, __FUNCTION__)
-
-void
-ATIEnterDraw (PixmapPtr pPixmap, char *function);
-
-void
-ATILeaveDraw (PixmapPtr pPixmap, char *function);
-#else /* ATI_TRACE */
-#define ENTER_DRAW(pix)
-#define LEAVE_DRAW(pix)
-#endif /* !ATI_TRACE */
-
-#endif /* _ATI_DRAW_H_ */
diff --git a/hw/kdrive/ati/ati_drawtmp.h b/hw/kdrive/ati/ati_drawtmp.h
deleted file mode 100644
index 82c99ac4d..000000000
--- a/hw/kdrive/ati/ati_drawtmp.h
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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 USE_DMA
-#define TAG(x) x##DMA
-#define LOCALS RING_LOCALS; \
- (void)atic
-#define BEGIN(x) BEGIN_RING(x * 2)
-#define OUT_REG(reg, val) OUT_RING_REG(reg, val)
-#define END() ADVANCE_RING()
-#else
-#define TAG(x) x##MMIO
-#define LOCALS char *mmio = atic->reg_base; \
- (void)atis
-#define BEGIN(x) ATIWaitAvailMMIO(x)
-#define OUT_REG(reg, val) MMIO_OUT32((mmio), (reg), (val))
-#define END()
-#endif
-
-static Bool
-TAG(ATISetup)(PixmapPtr pDst, PixmapPtr pSrc)
-{
- KdScreenPriv(pDst->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- int dst_offset, dst_pitch;
- int bpp = pDst->drawable.bitsPerPixel;
- LOCALS;
-
- accel_atis = atis;
-
- dst_pitch = pDst->devKind;
- dst_offset = ((CARD8 *)pDst->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
- if ((dst_pitch & (atis->kaa.offscreenPitch - 1)) != 0)
- ATI_FALLBACK(("Bad dst pitch 0x%x\n", dst_pitch));
- if ((dst_offset & (atis->kaa.offscreenByteAlign - 1)) != 0)
- ATI_FALLBACK(("Bad dst offset 0x%x\n", dst_offset));
-
- if (pSrc != NULL) {
- src_pitch = pSrc->devKind;
- src_offset = ((CARD8 *)pSrc->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
- if ((src_pitch & (atis->kaa.offscreenPitch - 1)) != 0)
- ATI_FALLBACK(("Bad src pitch 0x%x\n", src_pitch));
- if ((src_offset & (atis->kaa.offscreenByteAlign - 1)) != 0)
- ATI_FALLBACK(("Bad src offset 0x%x\n", src_offset));
- }
-
-#ifdef USE_DMA
- if (atic->is_radeon && !atic->is_r200)
- RadeonSwitchTo2D();
-#endif
- BEGIN((pSrc != NULL) ? 3 : 2);
- if (atic->is_radeon) {
- OUT_REG(RADEON_REG_DST_PITCH_OFFSET,
- ((dst_pitch >> 6) << 22) | (dst_offset >> 10));
- if (pSrc != NULL) {
- OUT_REG(RADEON_REG_SRC_PITCH_OFFSET,
- ((src_pitch >> 6) << 22) | (src_offset >> 10));
- }
- } else {
- if (is_24bpp) {
- dst_pitch *= 3;
- src_pitch *= 3;
- }
- /* R128 pitch is in units of 8 pixels, offset in 32 bytes */
- OUT_REG(RADEON_REG_DST_PITCH_OFFSET,
- ((dst_pitch/bpp) << 21) | (dst_offset >> 5));
- if (pSrc != NULL) {
- OUT_REG(RADEON_REG_SRC_PITCH_OFFSET,
- ((src_pitch/bpp) << 21) | (src_offset >> 5));
- }
- }
- OUT_REG(RADEON_REG_DEFAULT_SC_BOTTOM_RIGHT,
- (RADEON_DEFAULT_SC_RIGHT_MAX | RADEON_DEFAULT_SC_BOTTOM_MAX));
- END();
-
- return TRUE;
-}
-
-static Bool
-TAG(ATIPrepareSolid)(PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg)
-{
- KdScreenPriv(pPixmap->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- CARD32 datatype;
- LOCALS;
-
- if (is_24bpp) {
- /* Solid fills in fake-24bpp mode only work if the pixel color
- * and planemask are all the same byte.
- */
- if ((fg & 0xffffff) != (((fg & 0xff) << 16) | ((fg >> 8) &
- 0xffff)))
- ATI_FALLBACK(("Can't do solid color %d in 24bpp\n"));
- if ((pm & 0xffffff) != (((pm & 0xff) << 16) | ((pm >> 8) &
- 0xffff)))
- ATI_FALLBACK(("Can't do planemask %d in 24bpp\n"));
- }
-
- if (!ATIGetDatatypeBpp(pPixmap->drawable.bitsPerPixel, &datatype))
- return FALSE;
- if (!TAG(ATISetup)(pPixmap, NULL))
- return FALSE;
-
- BEGIN(4);
- OUT_REG(RADEON_REG_DP_GUI_MASTER_CNTL,
- (datatype << 8) |
- RADEON_GMC_CLR_CMP_CNTL_DIS |
- RADEON_GMC_AUX_CLIP_DIS |
- RADEON_GMC_BRUSH_SOLID_COLOR |
- RADEON_GMC_DST_PITCH_OFFSET_CNTL |
- RADEON_GMC_SRC_DATATYPE_COLOR |
- (ATISolidRop[alu] << 16));
- OUT_REG(RADEON_REG_DP_BRUSH_FRGD_CLR, fg);
- OUT_REG(RADEON_REG_DP_WRITE_MASK, pm);
- OUT_REG(RADEON_REG_DP_CNTL, RADEON_DST_X_LEFT_TO_RIGHT |
- RADEON_DST_Y_TOP_TO_BOTTOM);
- END();
-
- return TRUE;
-}
-
-static void
-TAG(ATISolid)(int x1, int y1, int x2, int y2)
-{
- ATIScreenInfo *atis = accel_atis;
- ATICardInfo *atic = atis->atic;
- LOCALS;
-
- if (is_24bpp) {
- x1 *= 3;
- x2 *= 3;
- }
- BEGIN(2);
- OUT_REG(RADEON_REG_DST_Y_X, (y1 << 16) | x1);
- OUT_REG(RADEON_REG_DST_WIDTH_HEIGHT, ((x2 - x1) << 16) | (y2 - y1));
- END();
-}
-
-static Bool
-TAG(ATIPrepareCopy)(PixmapPtr pSrc, PixmapPtr pDst, int dx, int dy, int alu, Pixel pm)
-{
- KdScreenPriv(pDst->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- CARD32 datatype;
- LOCALS;
-
- copydx = dx;
- copydy = dy;
-
- if (is_24bpp && ((pm & 0xffffff) != (((pm & 0xff) << 16) | ((pm >> 8) &
- 0xffff))))
- ATI_FALLBACK(("Can't do planemask %d in 24bpp\n"));
-
- if (!ATIGetDatatypeBpp(pDst->drawable.bitsPerPixel, &datatype))
- return FALSE;
- if (!TAG(ATISetup)(pDst, pSrc))
- return FALSE;
-
- BEGIN(3);
- OUT_REG(RADEON_REG_DP_GUI_MASTER_CNTL,
- (datatype << 8) |
- RADEON_GMC_CLR_CMP_CNTL_DIS |
- RADEON_GMC_AUX_CLIP_DIS |
- RADEON_GMC_BRUSH_SOLID_COLOR |
- RADEON_GMC_SRC_DATATYPE_COLOR |
- (ATIBltRop[alu] << 16) |
- RADEON_GMC_SRC_PITCH_OFFSET_CNTL |
- RADEON_GMC_DST_PITCH_OFFSET_CNTL |
- RADEON_DP_SRC_SOURCE_MEMORY);
- OUT_REG(RADEON_REG_DP_WRITE_MASK, pm);
- OUT_REG(RADEON_REG_DP_CNTL,
- (dx >= 0 ? RADEON_DST_X_LEFT_TO_RIGHT : 0) |
- (dy >= 0 ? RADEON_DST_Y_TOP_TO_BOTTOM : 0));
- END();
-
- return TRUE;
-}
-
-static void
-TAG(ATICopy)(int srcX, int srcY, int dstX, int dstY, int w, int h)
-{
- ATIScreenInfo *atis = accel_atis;
- ATICardInfo *atic = atis->atic;
- LOCALS;
-
- if (is_24bpp) {
- srcX *= 3;
- dstX *= 3;
- w *= 3;
- }
-
- if (copydx < 0) {
- srcX += w - 1;
- dstX += w - 1;
- }
-
- if (copydy < 0) {
- srcY += h - 1;
- dstY += h - 1;
- }
-
- BEGIN(3);
- OUT_REG(RADEON_REG_SRC_Y_X, (srcY << 16) | srcX);
- OUT_REG(RADEON_REG_DST_Y_X, (dstY << 16) | dstX);
- OUT_REG(RADEON_REG_DST_HEIGHT_WIDTH, (h << 16) | w);
- END();
-}
-
-#undef TAG
-#undef LOCALS
-#undef BEGIN
-#undef OUT_REG
-#undef END
diff --git a/hw/kdrive/ati/ati_dri.c b/hw/kdrive/ati/ati_dri.c
deleted file mode 100644
index edef72030..000000000
--- a/hw/kdrive/ati/ati_dri.c
+++ /dev/null
@@ -1,1138 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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.
- */
-
-#include <sys/time.h>
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-
-#include "ati.h"
-#include "ati_reg.h"
-#include "ati_dma.h"
-#include "ati_dri.h"
-#include "ati_dripriv.h"
-#include "sarea.h"
-#include "ati_sarea.h"
-#include "ati_draw.h"
-#include "r128_common.h"
-#include "radeon_common.h"
-#include "kaa.h"
-
-/* ?? HACK - for now, put this here... */
-/* ?? Alpha - this may need to be a variable to handle UP1x00 vs TITAN */
-#if defined(__alpha__)
-# define DRM_PAGE_SIZE 8192
-#elif defined(__ia64__)
-# define DRM_PAGE_SIZE getpagesize()
-#else
-# define DRM_PAGE_SIZE 4096
-#endif
-
-#ifdef GLXEXT
-/* 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)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- int numConfigs = 0;
- __GLXvisualConfig *pConfigs = NULL;
- ATIConfigPrivPtr pATIConfigs = NULL;
- ATIConfigPrivPtr *pATIConfigPtrs = NULL;
- int i, accum, stencil, db, use_db;
- int depth = pScreenPriv->screen->fb[0].depth;
- int bpp = pScreenPriv->screen->fb[0].bitsPerPixel;
-
- if (depth != 16 && (depth != 24 || bpp != 32))
- ErrorF("DRI GLX unsupported at %d/%d depth/bpp\n", depth, bpp);
-
- if (atis->depthOffset != 0)
- use_db = 1;
- else
- use_db = 0;
-
- numConfigs = 4;
- if (use_db)
- numConfigs *= 2;
-
- pConfigs = xcalloc(sizeof(__GLXvisualConfig), numConfigs);
- pATIConfigs = xcalloc(sizeof(ATIConfigPrivRec), numConfigs);
- pATIConfigPtrs = xcalloc(sizeof(ATIConfigPrivPtr), numConfigs);
- if (pConfigs == NULL || pATIConfigs == NULL || pATIConfigPtrs == NULL) {
- xfree(pConfigs);
- xfree(pATIConfigs);
- xfree(pATIConfigPtrs);
- return FALSE;
- }
-
- i = 0;
- for (db = 0; db <= use_db; db++) {
- for (accum = 0; accum <= 1; accum++) {
- for (stencil = 0; stencil <= 1; stencil++) {
- pATIConfigPtrs[i] = &pATIConfigs[i];
-
- pConfigs[i].vid = (VisualID)(-1);
- pConfigs[i].class = -1;
- pConfigs[i].rgba = TRUE;
- if (depth == 16) {
- 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;
- } else {
- pConfigs[i].redSize = 8;
- pConfigs[i].greenSize = 8;
- pConfigs[i].blueSize = 8;
- pConfigs[i].alphaSize = 8;
- pConfigs[i].redMask = 0x00FF0000;
- pConfigs[i].greenMask = 0x0000FF00;
- pConfigs[i].blueMask = 0x000000FF;
- pConfigs[i].alphaMask = 0xFF000000;
- }
- if (accum) { /* Simulated in software */
- pConfigs[i].accumRedSize = 16;
- pConfigs[i].accumGreenSize = 16;
- pConfigs[i].accumBlueSize = 16;
- if (depth == 16)
- pConfigs[i].accumAlphaSize = 0;
- else
- pConfigs[i].accumAlphaSize = 16;
- } 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;
- if (depth == 16) {
- pConfigs[i].bufferSize = 16;
- pConfigs[i].depthSize = 16;
- if (stencil)
- pConfigs[i].stencilSize = 8;
- else
- pConfigs[i].stencilSize = 0;
- } else {
- pConfigs[i].bufferSize = 32;
- 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++;
- }
- }
- }
-
- atis->numVisualConfigs = numConfigs;
- atis->pVisualConfigs = pConfigs;
- atis->pVisualConfigsPriv = pATIConfigs;
- GlxSetVisualConfigs(numConfigs, pConfigs, (void**)pATIConfigPtrs);
- return TRUE;
-}
-#endif /* GLXEXT */
-
-static void
-ATIDRIInitGARTValues(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- int s, l;
-
- atis->gartOffset = 0;
-
- /* Initialize the ring buffer data */
- atis->ringStart = atis->gartOffset;
- atis->ringMapSize = atis->ringSize * 1024 * 1024 + DRM_PAGE_SIZE;
-
- atis->ringReadOffset = atis->ringStart + atis->ringMapSize;
- atis->ringReadMapSize = DRM_PAGE_SIZE;
-
- /* Reserve space for vertex/indirect buffers */
- atis->bufStart = atis->ringReadOffset + atis->ringReadMapSize;
- atis->bufMapSize = atis->bufSize * 1024 * 1024;
-
- /* Reserve the rest for GART textures */
- atis->gartTexStart = atis->bufStart + atis->bufMapSize;
- s = (atis->gartSize * 1024 * 1024 - atis->gartTexStart);
- l = ATILog2((s-1) / ATI_NR_TEX_REGIONS);
- if (l < ATI_LOG_TEX_GRANULARITY) l = ATI_LOG_TEX_GRANULARITY;
- atis->gartTexMapSize = (s >> l) << l;
- atis->log2GARTTexGran = l;
-}
-
-static int
-ATIDRIAddAndMap(int fd, drmHandle offset, drmSize size,
- drmMapType type, drmMapFlags flags, drmHandlePtr handle,
- drmAddressPtr address, char *desc)
-{
- char *name;
-
- name = (type == DRM_AGP) ? "agp" : "pci";
-
- if (drmAddMap(fd, offset, size, type, flags, handle) < 0) {
- ErrorF("[%s] Could not add %s mapping\n", name, desc);
- return FALSE;
- }
- ErrorF("[%s] %s handle = 0x%08lx\n", name, desc, *handle);
-
- if (drmMap(fd, *handle, size, address) < 0) {
- ErrorF("[%s] Could not map %s\n", name, desc);
- return FALSE;
- }
- ErrorF("[%s] %s mapped at 0x%08lx\n", name, desc, *address);
-
- return TRUE;
-}
-
-/* Initialize the AGP state. Request memory for use in AGP space, and
- initialize the Rage 128 registers to point to that memory. */
-static Bool
-ATIDRIAgpInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- unsigned char *mmio = atic->reg_base;
- unsigned long mode;
- int ret;
- CARD32 cntl, chunk;
-
- if (drmAgpAcquire(atic->drmFd) < 0) {
- ErrorF("[agp] AGP not available\n");
- return FALSE;
- }
-
- ATIDRIInitGARTValues(pScreen);
-
- mode = drmAgpGetMode(atic->drmFd);
- if (atic->is_radeon) {
- mode &= ~RADEON_AGP_MODE_MASK;
- mode |= RADEON_AGP_1X_MODE;
- } else {
- mode &= ~R128_AGP_MODE_MASK;
- mode |= R128_AGP_1X_MODE;
- }
-
- if (drmAgpEnable(atic->drmFd, mode) < 0) {
- ErrorF("[agp] AGP not enabled\n");
- drmAgpRelease(atic->drmFd);
- return FALSE;
- }
- ErrorF("[agp] Mode 0x%08x selected\n", drmAgpGetMode(atic->drmFd));
-
- if ((ret = drmAgpAlloc(atic->drmFd, atis->gartSize * 1024 * 1024, 0,
- NULL, &atis->agpMemHandle)) < 0) {
- ErrorF("[agp] Out of memory (%d)\n", ret);
- drmAgpRelease(atic->drmFd);
- return FALSE;
- }
- ErrorF("[agp] %d kB allocated with handle 0x%08lx\n",
- atis->gartSize * 1024, (long)atis->agpMemHandle);
-
- if (drmAgpBind(atic->drmFd, atis->agpMemHandle, atis->gartOffset) < 0) {
- ErrorF("[agp] Could not bind\n");
- drmAgpFree(atic->drmFd, atis->agpMemHandle);
- drmAgpRelease(atic->drmFd);
- return FALSE;
- }
-
- if (!ATIDRIAddAndMap(atic->drmFd, atis->ringStart, atis->ringMapSize,
- DRM_AGP, DRM_READ_ONLY, &atis->ringHandle,
- (drmAddressPtr)&atis->ring, "ring"))
- return FALSE;
-
- if (!ATIDRIAddAndMap(atic->drmFd, atis->ringReadOffset,
- atis->ringReadMapSize, DRM_AGP, DRM_READ_ONLY,
- &atis->ringReadPtrHandle, (drmAddressPtr)&atis->ringReadPtr,
- "ring read ptr"))
- return FALSE;
-
- if (!ATIDRIAddAndMap(atic->drmFd, atis->bufStart, atis->bufMapSize,
- DRM_AGP, 0, &atis->bufHandle, (drmAddressPtr)&atis->buf,
- "vertex/indirect buffers"))
- return FALSE;
-
- if (!ATIDRIAddAndMap(atic->drmFd, atis->gartTexStart,
- atis->gartTexMapSize, DRM_AGP, 0, &atis->gartTexHandle,
- (drmAddressPtr)&atis->gartTex, "AGP texture map"))
- return FALSE;
-
- if (atic->is_r100) {
- /* Workaround for some hardware bugs */
- cntl = MMIO_IN32(mmio, ATI_REG_AGP_CNTL);
- MMIO_OUT32(mmio, ATI_REG_AGP_CNTL, cntl |
- RADEON_PENDING_SLOTS_VAL | RADEON_PENDING_SLOTS_SEL);
- } else if (!atic->is_radeon) {
- cntl = MMIO_IN32(mmio, ATI_REG_AGP_CNTL);
- cntl &= ~R128_AGP_APER_SIZE_MASK;
- switch (atis->gartSize) {
- 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:
- ErrorF("[agp] Illegal aperture size %d kB\n", atis->gartSize *
- 1024);
- return FALSE;
- }
- MMIO_OUT32(mmio, ATI_REG_AGP_CNTL, cntl);
-
- /* Disable Rage 128 PCIGART registers */
- chunk = MMIO_IN32(mmio, R128_REG_BM_CHUNK_0_VAL);
- chunk &= ~(R128_BM_PTR_FORCE_TO_PCI |
- R128_BM_PM4_RD_FORCE_TO_PCI |
- R128_BM_GLOBAL_FORCE_TO_PCI);
- MMIO_OUT32(mmio, R128_REG_BM_CHUNK_0_VAL, chunk);
-
- /* Ensure AGP GART is used (for now) */
- MMIO_OUT32(mmio, R128_REG_PCI_GART_PAGE, 1);
- }
-
- MMIO_OUT32(mmio, ATI_REG_AGP_BASE, drmAgpBase(atic->drmFd));
-
- return TRUE;
-}
-
-static Bool
-ATIDRIPciInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- unsigned char *mmio = atic->reg_base;
- CARD32 chunk;
- int ret;
-
- ATIDRIInitGARTValues(pScreen);
-
- ret = drmScatterGatherAlloc(atic->drmFd, atis->gartSize * 1024 * 1024,
- &atis->pciMemHandle);
- if (ret < 0) {
- ErrorF("[pci] Out of memory (%d)\n", ret);
- return FALSE;
- }
- ErrorF("[pci] %d kB allocated with handle 0x%08lx\n",
- atis->gartSize * 1024, (long)atis->pciMemHandle);
-
- if (!ATIDRIAddAndMap(atic->drmFd, atis->ringStart, atis->ringMapSize,
- DRM_SCATTER_GATHER, DRM_READ_ONLY | DRM_LOCKED | DRM_KERNEL,
- &atis->ringHandle, (drmAddressPtr)&atis->ring, "ring"))
- return FALSE;
-
- if (!ATIDRIAddAndMap(atic->drmFd, atis->ringReadOffset,
- atis->ringReadMapSize, DRM_SCATTER_GATHER,
- DRM_READ_ONLY | DRM_LOCKED | DRM_KERNEL,
- &atis->ringReadPtrHandle, (drmAddressPtr)&atis->ringReadPtr,
- "ring read ptr"))
- return FALSE;
-
- if (!ATIDRIAddAndMap(atic->drmFd, atis->bufStart, atis->bufMapSize,
- DRM_SCATTER_GATHER, 0, &atis->bufHandle, (drmAddressPtr)&atis->buf,
- "vertex/indirect buffers"))
- return FALSE;
-
- if (!ATIDRIAddAndMap(atic->drmFd, atis->gartTexStart,
- atis->gartTexMapSize, DRM_SCATTER_GATHER, 0, &atis->gartTexHandle,
- (drmAddressPtr)&atis->gartTex, "PCI texture map"))
- return FALSE;
-
- if (!atic->is_radeon) {
- /* Force PCI GART mode */
- chunk = MMIO_IN32(mmio, R128_REG_BM_CHUNK_0_VAL);
- chunk |= (R128_BM_PTR_FORCE_TO_PCI |
- R128_BM_PM4_RD_FORCE_TO_PCI | R128_BM_GLOBAL_FORCE_TO_PCI);
- MMIO_OUT32(mmio, R128_REG_BM_CHUNK_0_VAL, chunk);
- /* Ensure PCI GART is used */
- MMIO_OUT32(mmio, R128_REG_PCI_GART_PAGE, 0);
- }
- return TRUE;
-}
-
-
-/* Initialize the kernel data structures. */
-static int
-R128DRIKernelInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- drmR128Init drmInfo;
- int bpp = pScreenPriv->screen->fb[0].bitsPerPixel;
-
- memset(&drmInfo, 0, sizeof(drmR128Init) );
-
- drmInfo.func = DRM_R128_INIT_CCE;
- drmInfo.sarea_priv_offset = sizeof(XF86DRISAREARec);
- drmInfo.is_pci = !atis->using_agp;
- drmInfo.cce_mode = R128_PM4_64BM_64VCBM_64INDBM;
- drmInfo.cce_secure = TRUE;
- drmInfo.ring_size = atis->ringSize * 1024 * 1024;
- drmInfo.usec_timeout = atis->DMAusecTimeout;
-
- drmInfo.front_offset = atis->frontOffset;
- drmInfo.front_pitch = atis->frontPitch / (bpp / 8);
- drmInfo.back_offset = atis->backOffset;
- drmInfo.back_pitch = atis->backPitch / (bpp / 8);
- drmInfo.fb_bpp = bpp;
-
- drmInfo.depth_offset = atis->depthOffset;
- drmInfo.depth_pitch = atis->depthPitch / (bpp / 8);
- drmInfo.depth_bpp = bpp;
-
- drmInfo.span_offset = atis->spanOffset;
-
- drmInfo.fb_offset = atis->fbHandle;
- drmInfo.mmio_offset = atis->registerHandle;
- drmInfo.ring_offset = atis->ringHandle;
- drmInfo.ring_rptr_offset = atis->ringReadPtrHandle;
- drmInfo.buffers_offset = atis->bufHandle;
- drmInfo.agp_textures_offset = atis->gartTexHandle;
-
- if (drmCommandWrite(atic->drmFd, DRM_R128_INIT, &drmInfo,
- sizeof(drmR128Init)) < 0)
- return FALSE;
-
- return TRUE;
-}
-
-/* Initialize the kernel data structures */
-static int
-RadeonDRIKernelInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- drmRadeonInit drmInfo;
-
- memset(&drmInfo, 0, sizeof(drmRadeonInit));
-
- if (atic->is_r200)
- drmInfo.func = DRM_RADEON_INIT_R200_CP;
- else
- drmInfo.func = DRM_RADEON_INIT_CP;
-
- drmInfo.sarea_priv_offset = sizeof(XF86DRISAREARec);
- drmInfo.is_pci = !atis->using_agp;
- drmInfo.cp_mode = RADEON_CSQ_PRIBM_INDBM;
- drmInfo.gart_size = atis->gartSize * 1024 * 1024;
- drmInfo.ring_size = atis->ringSize * 1024 * 1024;
- drmInfo.usec_timeout = atis->DMAusecTimeout;
-
- drmInfo.front_offset = atis->frontOffset;
- drmInfo.front_pitch = atis->frontPitch;
- drmInfo.back_offset = atis->backOffset;
- drmInfo.back_pitch = atis->backPitch;
- drmInfo.fb_bpp = pScreenPriv->screen->fb[0].bitsPerPixel;
- drmInfo.depth_offset = atis->depthOffset;
- drmInfo.depth_pitch = atis->depthPitch;
- drmInfo.depth_bpp = pScreenPriv->screen->fb[0].bitsPerPixel;
-
- drmInfo.fb_offset = atis->fbHandle;
- drmInfo.mmio_offset = atis->registerHandle;
- drmInfo.ring_offset = atis->ringHandle;
- drmInfo.ring_rptr_offset = atis->ringReadPtrHandle;
- drmInfo.buffers_offset = atis->bufHandle;
- drmInfo.gart_textures_offset = atis->gartTexHandle;
-
- if (drmCommandWrite(atic->drmFd, DRM_RADEON_CP_INIT,
- &drmInfo, sizeof(drmRadeonInit)) < 0)
- return FALSE;
-
- return TRUE;
-}
-
-/* Add a map for the vertex buffers that will be accessed by any
- DRI-based clients. */
-static Bool
-ATIDRIBufInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- int type, size;
-
- if (atic->is_radeon)
- size = RADEON_BUFFER_SIZE;
- else
- size = R128_BUFFER_SIZE;
-
- if (atis->using_agp)
- type = DRM_AGP_BUFFER;
- else
- type = DRM_SG_BUFFER;
-
- /* Initialize vertex buffers */
- atis->bufNumBufs = drmAddBufs(atic->drmFd, atis->bufMapSize / size,
- size, type, atis->bufStart);
-
- if (atis->bufNumBufs <= 0) {
- ErrorF("[drm] Could not create vertex/indirect buffers list\n");
- return FALSE;
- }
- ErrorF("[drm] Added %d %d byte vertex/indirect buffers\n",
- atis->bufNumBufs, size);
-
- atis->buffers = drmMapBufs(atic->drmFd);
- if (atis->buffers == NULL) {
- ErrorF("[drm] Failed to map vertex/indirect buffers list\n");
- return FALSE;
- }
- ErrorF("[drm] Mapped %d vertex/indirect buffers\n",
- atis->buffers->count);
-
- return TRUE;
-}
-
-static int
-ATIDRIIrqInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
-
- if (atis->irqEnabled)
- return FALSE;
-
- atis->irqEnabled = drmCtlInstHandler(atic->drmFd, 0);
-
- if (!atis->irqEnabled)
- return FALSE;
-
- return TRUE;
-}
-
-static void ATIDRISwapContext(ScreenPtr pScreen, DRISyncType syncType,
- DRIContextType oldContextType, void *oldContext,
- DRIContextType newContextType, void *newContext)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
-
- if ((syncType==DRI_3D_SYNC) && (oldContextType==DRI_2D_CONTEXT) &&
- (newContextType==DRI_2D_CONTEXT)) {
- /* Entering from Wakeup */
- kaaMarkSync(pScreen);
- }
- if ((syncType==DRI_2D_SYNC) && (oldContextType==DRI_NO_CONTEXT) &&
- (newContextType==DRI_2D_CONTEXT)) {
- /* Exiting from Block Handler */
- if (atis->dma_started)
- ATIFlushIndirect(atis, 1);
- }
-}
-
-static Bool ATIDRIFinishScreenInit(ScreenPtr pScreen);
-
-/* Initialize the screen-specific data structures for the Radeon or
- 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
-ATIDRIScreenInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- void *scratch_ptr;
- int scratch_int;
- DRIInfoPtr pDRIInfo;
- int devSareaSize;
- drmSetVersion sv;
-
- if (pScreenPriv->screen->fb[0].depth < 16 ||
- pScreenPriv->screen->fb[0].bitsPerPixel == 24) {
- ErrorF("DRI unsupported at this depth/bpp, disabling.\n");
- return FALSE;
- }
-
- atis->agpMode = 1;
- atis->gartSize = 8;
- atis->ringSize = 1;
- atis->bufSize = 2;
- atis->gartTexSize = 1;
- atis->DMAusecTimeout = 10000;
-
- if (atic->drmFd < 0)
- return FALSE;
-
- sv.drm_di_major = -1;
- sv.drm_dd_major = -1;
- drmSetInterfaceVersion(atic->drmFd, &sv);
- if (atic->is_radeon) {
- if (sv.drm_dd_major != 1 || sv.drm_dd_minor < 6) {
- ErrorF("[dri] radeon kernel module version is %d.%d "
- "but version 1.6 or greater is needed.\n",
- sv.drm_dd_major, sv.drm_dd_minor);
- return FALSE;
- }
- } else {
- if (sv.drm_dd_major != 2 || sv.drm_dd_minor < 2) {
- ErrorF("[dri] r128 kernel module version is %d.%d "
- "but version 2.2 or greater is needed.\n",
- sv.drm_dd_major, sv.drm_dd_minor);
- return FALSE;
- }
- }
-
- /* Create the DRI data structure, and fill it in before calling the
- * DRIScreenInit().
- */
- pDRIInfo = DRICreateInfoRec();
- if (pDRIInfo == NULL)
- return FALSE;
-
- atis->pDRIInfo = pDRIInfo;
- pDRIInfo->busIdString = atic->busid;
- if (atic->is_radeon) {
- pDRIInfo->drmDriverName = "radeon";
- if (atic->is_r100)
- pDRIInfo->clientDriverName = "radeon";
- else
- pDRIInfo->clientDriverName = "r200";
- } else {
- pDRIInfo->drmDriverName = "r128";
- pDRIInfo->clientDriverName = "r128";
- }
- pDRIInfo->ddxDriverMajorVersion = 4;
- pDRIInfo->ddxDriverMinorVersion = 0;
- pDRIInfo->ddxDriverPatchVersion = 0;
- pDRIInfo->frameBufferPhysicalAddress =
- pScreenPriv->card->attr.address[0] & 0xfc000000;
- pDRIInfo->frameBufferSize = pScreenPriv->screen->memory_size;
- pDRIInfo->frameBufferStride = pScreenPriv->screen->fb[0].byteStride;
- pDRIInfo->ddxDrawableTableEntry = SAREA_MAX_DRAWABLES;
- pDRIInfo->maxDrawableTableEntry = SAREA_MAX_DRAWABLES;
-
- /* For now the mapping works by using a fixed size defined
- * in the SAREA header
- */
- pDRIInfo->SAREASize = SAREA_MAX;
-
- if (atic->is_radeon) {
- pDRIInfo->devPrivateSize = sizeof(RADEONDRIRec);
- devSareaSize = sizeof(RADEONSAREAPriv);
- } else {
- pDRIInfo->devPrivateSize = sizeof(R128DRIRec);
- devSareaSize = sizeof(R128SAREAPriv);
- }
-
- if (sizeof(XF86DRISAREARec) + devSareaSize > SAREA_MAX) {
- ErrorF("[dri] Data does not fit in SAREA. Disabling DRI.\n");
- return FALSE;
- }
-
- pDRIInfo->devPrivate = xcalloc(pDRIInfo->devPrivateSize, 1);
- if (pDRIInfo->devPrivate == NULL) {
- DRIDestroyInfoRec(atis->pDRIInfo);
- atis->pDRIInfo = NULL;
- return FALSE;
- }
-
- pDRIInfo->contextSize = sizeof(ATIDRIContextRec);
-
- pDRIInfo->SwapContext = ATIDRISwapContext;
- /*pDRIInfo->InitBuffers = R128DRIInitBuffers;*/ /* XXX Appears unnecessary */
- /*pDRIInfo->MoveBuffers = R128DRIMoveBuffers;*/ /* XXX Badness */
- 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, &atic->drmFd)) {
- ErrorF("[dri] DRIScreenInit failed. Disabling DRI.\n");
- xfree(pDRIInfo->devPrivate);
- pDRIInfo->devPrivate = NULL;
- DRIDestroyInfoRec(pDRIInfo);
- pDRIInfo = NULL;
- return FALSE;
- }
-
- /* Add a map for the MMIO registers that will be accessed by any
- * DRI-based clients.
- */
- atis->registerSize = ATI_REG_SIZE(pScreenPriv->screen->card);
- if (drmAddMap(atic->drmFd, ATI_REG_BASE(pScreenPriv->screen->card),
- atis->registerSize, DRM_REGISTERS, DRM_READ_ONLY,
- &atis->registerHandle) < 0) {
- ATIDRICloseScreen(pScreen);
- return FALSE;
- }
- ErrorF("[drm] register handle = 0x%08lx\n", atis->registerHandle);
-
- /* DRIScreenInit adds the frame buffer map, but we need it as well */
- DRIGetDeviceInfo(pScreen, &atis->fbHandle, &scratch_int, &scratch_int,
- &scratch_int, &scratch_int, &scratch_ptr);
-
- /* Initialize AGP */
- atis->using_agp = atic->is_agp;
- if (atic->is_agp && !ATIDRIAgpInit(pScreen)) {
- atis->using_agp = FALSE;
- ErrorF("[agp] AGP failed to initialize; falling back to PCI mode.\n");
- ErrorF("[agp] Make sure your kernel's AGP support is loaded and functioning.\n");
- }
-
- /* Initialize PCIGART */
- if (!atis->using_agp && !ATIDRIPciInit(pScreen)) {
- ATIDRICloseScreen(pScreen);
- return FALSE;
- }
-
-#ifdef GLXEXT
- if (!ATIInitVisualConfigs(pScreen)) {
- ATIDRICloseScreen(pScreen);
- return FALSE;
- }
- ErrorF("[dri] Visual configs initialized\n");
-#endif
-
- atis->serverContext = DRIGetContext(pScreen);
-
- return ATIDRIFinishScreenInit(pScreen);
-}
-
-/* Finish initializing the device-dependent DRI state, and call
- DRIFinishScreenInit() to complete the device-independent DRI
- initialization. */
-static Bool
-R128DRIFinishScreenInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- R128SAREAPrivPtr pSAREAPriv;
- R128DRIPtr pR128DRI;
- int bpp = pScreenPriv->screen->fb[0].bitsPerPixel;
-
- /* Initialize the kernel data structures */
- if (!R128DRIKernelInit(pScreen)) {
- ATIDRICloseScreen(pScreen);
- return FALSE;
- }
-
- /* Initialize the vertex buffers list */
- if (!ATIDRIBufInit(pScreen)) {
- ATIDRICloseScreen(pScreen);
- return FALSE;
- }
-
- /* Initialize IRQ */
- ATIDRIIrqInit(pScreen);
-
- pSAREAPriv = (R128SAREAPrivPtr)DRIGetSAREAPrivate(pScreen);
- memset(pSAREAPriv, 0, sizeof(*pSAREAPriv));
-
- pR128DRI = (R128DRIPtr)atis->pDRIInfo->devPrivate;
-
- pR128DRI->deviceID = pScreenPriv->screen->card->attr.deviceID;
- pR128DRI->width = pScreenPriv->screen->width;
- pR128DRI->height = pScreenPriv->screen->height;
- pR128DRI->depth = pScreenPriv->screen->fb[0].depth;
- pR128DRI->bpp = pScreenPriv->screen->fb[0].bitsPerPixel;
-
- pR128DRI->IsPCI = !atis->using_agp;
- pR128DRI->AGPMode = atis->agpMode;
-
- pR128DRI->frontOffset = atis->frontOffset;
- pR128DRI->frontPitch = atis->frontPitch / (bpp / 8);
- pR128DRI->backOffset = atis->backOffset;
- pR128DRI->backPitch = atis->backPitch / (bpp / 8);
- pR128DRI->depthOffset = atis->depthOffset;
- pR128DRI->depthPitch = atis->depthPitch / (bpp / 8);
- pR128DRI->spanOffset = atis->spanOffset;
- pR128DRI->textureOffset = atis->textureOffset;
- pR128DRI->textureSize = atis->textureSize;
- pR128DRI->log2TexGran = atis->log2TexGran;
-
- pR128DRI->registerHandle = atis->registerHandle;
- pR128DRI->registerSize = atis->registerSize;
-
- pR128DRI->gartTexHandle = atis->gartTexHandle;
- pR128DRI->gartTexMapSize = atis->gartTexMapSize;
- pR128DRI->log2AGPTexGran = atis->log2GARTTexGran;
- pR128DRI->gartTexOffset = atis->gartTexStart;
- pR128DRI->sarea_priv_offset = sizeof(XF86DRISAREARec);
-
- return TRUE;
-}
-
-/* Finish initializing the device-dependent DRI state, and call
- * DRIFinishScreenInit() to complete the device-independent DRI
- * initialization.
- */
-static Bool
-RadeonDRIFinishScreenInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- RADEONSAREAPrivPtr pSAREAPriv;
- RADEONDRIPtr pRADEONDRI;
- drmRadeonMemInitHeap drmHeap;
-
- /* Initialize the kernel data structures */
- if (!RadeonDRIKernelInit(pScreen)) {
- ATIDRICloseScreen(pScreen);
- return FALSE;
- }
-
- /* Initialize the vertex buffers list */
- if (!ATIDRIBufInit(pScreen)) {
- ATIDRICloseScreen(pScreen);
- return FALSE;
- }
-
- /* Initialize IRQ */
- ATIDRIIrqInit(pScreen);
-
- drmHeap.region = RADEON_MEM_REGION_GART;
- drmHeap.start = 0;
- drmHeap.size = atis->gartTexMapSize;
-
- if (drmCommandWrite(atic->drmFd, DRM_RADEON_INIT_HEAP, &drmHeap,
- sizeof(drmHeap))) {
- ErrorF("[drm] Failed to initialize GART heap manager\n");
- }
-
- /* Initialize the SAREA private data structure */
- pSAREAPriv = (RADEONSAREAPrivPtr)DRIGetSAREAPrivate(pScreen);
- memset(pSAREAPriv, 0, sizeof(*pSAREAPriv));
-
- pRADEONDRI = (RADEONDRIPtr)atis->pDRIInfo->devPrivate;
-
- pRADEONDRI->deviceID = pScreenPriv->screen->card->attr.deviceID;
- pRADEONDRI->width = pScreenPriv->screen->width;
- pRADEONDRI->height = pScreenPriv->screen->height;
- pRADEONDRI->depth = pScreenPriv->screen->fb[0].depth;
- pRADEONDRI->bpp = pScreenPriv->screen->fb[0].bitsPerPixel;
-
- pRADEONDRI->IsPCI = !atis->using_agp;
- pRADEONDRI->AGPMode = atis->agpMode;
-
- pRADEONDRI->frontOffset = atis->frontOffset;
- pRADEONDRI->frontPitch = atis->frontPitch;
- pRADEONDRI->backOffset = atis->backOffset;
- pRADEONDRI->backPitch = atis->backPitch;
- pRADEONDRI->depthOffset = atis->depthOffset;
- pRADEONDRI->depthPitch = atis->depthPitch;
- pRADEONDRI->textureOffset = atis->textureOffset;
- pRADEONDRI->textureSize = atis->textureSize;
- pRADEONDRI->log2TexGran = atis->log2TexGran;
-
- pRADEONDRI->registerHandle = atis->registerHandle;
- pRADEONDRI->registerSize = atis->registerSize;
-
- pRADEONDRI->statusHandle = atis->ringReadPtrHandle;
- pRADEONDRI->statusSize = atis->ringReadMapSize;
-
- pRADEONDRI->gartTexHandle = atis->gartTexHandle;
- pRADEONDRI->gartTexMapSize = atis->gartTexMapSize;
- pRADEONDRI->log2GARTTexGran = atis->log2GARTTexGran;
- pRADEONDRI->gartTexOffset = atis->gartTexStart;
-
- pRADEONDRI->sarea_priv_offset = sizeof(XF86DRISAREARec);
-
- return TRUE;
-}
-
-static Bool
-ATIDRIFinishScreenInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo (pScreenPriv);
-
- atis->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;
- }
-
- if (atic->is_radeon) {
- if (!RadeonDRIFinishScreenInit(pScreen)) {
- ATIDRICloseScreen(pScreen);
- return FALSE;
- }
- } else {
- if (!R128DRIFinishScreenInit(pScreen)) {
- ATIDRICloseScreen(pScreen);
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-/* The screen is being closed, so clean up any state and free any
- resources used by the DRI. */
-void
-ATIDRICloseScreen(ScreenPtr pScreen)
-{
- KdScreenPriv (pScreen);
- ATIScreenInfo (pScreenPriv);
- ATICardInfo (pScreenPriv);
- drmR128Init drmR128Info;
- drmRadeonInit drmRadeonInfo;
-
- if (atis->indirectBuffer != NULL) {
- /* Flush any remaining commands and free indirect buffers.
- * Two steps are used because ATIFlushIndirect gets a
- * new buffer after discarding.
- */
- ATIFlushIndirect(atis, 1);
- ATIDRIDispatchIndirect(atis, 1);
- xfree(atis->indirectBuffer);
- atis->indirectBuffer = NULL;
- atis->indirectStart = 0;
- }
- ATIDRIDMAStop(atis);
-
- if (atis->irqEnabled) {
- drmCtlUninstHandler(atic->drmFd);
- atis->irqEnabled = FALSE;
- }
-
- /* De-allocate vertex buffers */
- if (atis->buffers) {
- drmUnmapBufs(atis->buffers);
- atis->buffers = NULL;
- }
-
- /* De-allocate all kernel resources */
- if (!atic->is_radeon) {
- memset(&drmR128Info, 0, sizeof(drmR128Init));
- drmR128Info.func = DRM_R128_CLEANUP_CCE;
- drmCommandWrite(atic->drmFd, DRM_R128_INIT, &drmR128Info,
- sizeof(drmR128Init));
- } else {
- memset(&drmRadeonInfo, 0, sizeof(drmRadeonInfo));
- drmRadeonInfo.func = DRM_RADEON_CLEANUP_CP;
- drmCommandWrite(atic->drmFd, DRM_RADEON_CP_INIT, &drmRadeonInfo,
- sizeof(drmR128Init));
- }
-
- /* De-allocate all AGP resources */
- if (atis->gartTex) {
- drmUnmap(atis->gartTex, atis->gartTexMapSize);
- atis->gartTex = NULL;
- }
- if (atis->buf) {
- drmUnmap(atis->buf, atis->bufMapSize);
- atis->buf = NULL;
- }
- if (atis->ringReadPtr) {
- drmUnmap(atis->ringReadPtr, atis->ringReadMapSize);
- atis->ringReadPtr = NULL;
- }
- if (atis->ring) {
- drmUnmap(atis->ring, atis->ringMapSize);
- atis->ring = NULL;
- }
- if (atis->agpMemHandle != DRM_AGP_NO_HANDLE) {
- drmAgpUnbind(atic->drmFd, atis->agpMemHandle);
- drmAgpFree(atic->drmFd, atis->agpMemHandle);
- atis->agpMemHandle = DRM_AGP_NO_HANDLE;
- drmAgpRelease(atic->drmFd);
- }
- if (atis->pciMemHandle) {
- drmScatterGatherFree(atic->drmFd, atis->pciMemHandle);
- atis->pciMemHandle = 0;
- }
-
- /* De-allocate all DRI resources */
- DRICloseScreen(pScreen);
-
- /* De-allocate all DRI data structures */
- if (atis->pDRIInfo) {
- if (atis->pDRIInfo->devPrivate) {
- xfree(atis->pDRIInfo->devPrivate);
- atis->pDRIInfo->devPrivate = NULL;
- }
- DRIDestroyInfoRec(atis->pDRIInfo);
- atis->pDRIInfo = NULL;
- }
-
-#ifdef GLXEXT
- if (atis->pVisualConfigs) {
- xfree(atis->pVisualConfigs);
- atis->pVisualConfigs = NULL;
- }
- if (atis->pVisualConfigsPriv) {
- xfree(atis->pVisualConfigsPriv);
- atis->pVisualConfigsPriv = NULL;
- }
-#endif /* GLXEXT */
- atic->drmFd = -1;
-}
-
-void
-ATIDRIDMAStart(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- int ret;
-
- if (atic->is_radeon)
- ret = drmCommandNone(atic->drmFd, DRM_RADEON_CP_START);
- else
- ret = drmCommandNone(atic->drmFd, DRM_R128_CCE_START);
-
- if (ret == 0)
- atis->dma_started = TRUE;
- else
- FatalError("%s: DMA start returned %d\n", __FUNCTION__, ret);
-}
-
-/* Attempts to idle the DMA engine and stops it. Note that the ioctl is the
- * same for both R128 and Radeon, so we can just use the name of one of them.
- */
-void
-ATIDRIDMAStop(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- drmRadeonCPStop stop;
- int ret;
-
- stop.flush = 1;
- stop.idle = 1;
- ret = drmCommandWrite(atic->drmFd, DRM_RADEON_CP_STOP, &stop,
- sizeof(drmRadeonCPStop));
-
- if (ret != 0 && errno == EBUSY) {
- ErrorF("Failed to idle the DMA engine\n");
-
- stop.idle = 0;
- ret = drmCommandWrite(atic->drmFd, DRM_RADEON_CP_STOP, &stop,
- sizeof(drmRadeonCPStop));
- }
- atis->dma_started = FALSE;
-}
-
-void
-ATIDRIDMAReset(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- int ret;
-
- ret = drmCommandNone(atic->drmFd, atic->is_radeon ?
- DRM_RADEON_CP_RESET : DRM_R128_CCE_RESET);
-
- if (ret != 0)
- FatalError("Failed to reset CCE/CP\n");
-
- atis->dma_started = FALSE;
-}
-
-/* The R128 and Radeon Indirect ioctls differ only in the ioctl number */
-void
-ATIDRIDispatchIndirect(ATIScreenInfo *atis, Bool discard)
-{
- ATICardInfo *atic = atis->atic;
- drmBufPtr buffer = atis->indirectBuffer->drmBuf;
- drmR128Indirect indirect;
- int cmd;
-
- indirect.idx = buffer->idx;
- indirect.start = atis->indirectStart;
- indirect.end = buffer->used;
- indirect.discard = discard;
- cmd = atic->is_radeon ? DRM_RADEON_INDIRECT : DRM_R128_INDIRECT;
- drmCommandWriteRead(atic->drmFd, cmd, &indirect,
- sizeof(drmR128Indirect));
-}
-
-/* Get an indirect buffer for the DMA 2D acceleration commands */
-drmBufPtr
-ATIDRIGetBuffer(ATIScreenInfo *atis)
-{
- ATICardInfo *atic = atis->atic;
- drmDMAReq dma;
- drmBufPtr buf = NULL;
- int indx = 0, size = 0, ret = 0;
- TIMEOUT_LOCALS;
-
- dma.context = atis->serverContext;
- dma.send_count = 0;
- dma.send_list = NULL;
- dma.send_sizes = NULL;
- dma.flags = 0;
- dma.request_count = 1;
- if (atic->is_radeon)
- dma.request_size = RADEON_BUFFER_SIZE;
- else
- dma.request_size = R128_BUFFER_SIZE;
- dma.request_list = &indx;
- dma.request_sizes = &size;
- dma.granted_count = 0;
-
- WHILE_NOT_TIMEOUT(.2) {
- ret = drmDMA(atic->drmFd, &dma);
- if (ret != -EBUSY)
- break;
- }
- if (TIMEDOUT())
- FatalError("Timeout fetching DMA buffer (card hung)\n");
- if (ret != 0)
- FatalError("Error fetching DMA buffer: %d\n", ret);
-
- buf = &atis->buffers->list[indx];
- buf->used = 0;
- return buf;
-}
diff --git a/hw/kdrive/ati/ati_dri.h b/hw/kdrive/ati/ati_dri.h
deleted file mode 100644
index 985f7eb43..000000000
--- a/hw/kdrive/ati/ati_dri.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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 _ATI_DRI_H_
-#define _ATI_DRI_H_
-
-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 */
- drmHandle registerHandle;
- drmSize registerSize;
-
- /* CCE AGP Texture data */
- drmHandle gartTexHandle;
- drmSize gartTexMapSize;
- int log2AGPTexGran;
- int gartTexOffset;
- unsigned int sarea_priv_offset;
-} R128DRIRec, *R128DRIPtr;
-
-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 textureOffset; /* Start of texture data in frame buffer */
- int textureSize;
- int log2TexGran;
-
- /* MMIO register data */
- drmHandle registerHandle;
- drmSize registerSize;
-
- /* CP in-memory status information */
- drmHandle statusHandle;
- drmSize statusSize;
-
- /* CP GART Texture data */
- drmHandle gartTexHandle;
- drmSize gartTexMapSize;
- int log2GARTTexGran;
- int gartTexOffset;
- unsigned int sarea_priv_offset;
-} RADEONDRIRec, *RADEONDRIPtr;
-
-#endif /* _ATI_DRI_H_ */
diff --git a/hw/kdrive/ati/ati_dripriv.h b/hw/kdrive/ati/ati_dripriv.h
deleted file mode 100644
index f0e139383..000000000
--- a/hw/kdrive/ati/ati_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@valinux.com>
- * Kevin E. Martin <martin@valinux.com>
- *
- */
-
-#ifndef _ATI_DRIPRIV_H_
-#define _ATI_DRIPRIV_H_
-
-#ifdef GLXEXT
-#include "GL/glxint.h"
-
-extern void GlxSetVisualConfigs(int nconfigs, __GLXvisualConfig *configs,
- void **configprivs);
-#endif
-
-typedef struct {
- /* Nothing here yet */
- int dummy;
-} ATIConfigPrivRec, *ATIConfigPrivPtr;
-
-typedef struct {
- /* Nothing here yet */
- int dummy;
-} ATIDRIContextRec, *ATIDRIContextPtr;
-
-#endif
diff --git a/hw/kdrive/ati/ati_microcode.c b/hw/kdrive/ati/ati_microcode.c
deleted file mode 100644
index f8829e823..000000000
--- a/hw/kdrive/ati/ati_microcode.c
+++ /dev/null
@@ -1,857 +0,0 @@
-/* r128_cce.c -- ATI Rage 128 driver -*- linux-c -*-
- * radeon_cp.c -- CP support for Radeon -*- linux-c -*-
- *
- * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas.
- * Copyright 2000 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
- * 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.
- *
- * Authors:
- * Kevin E. Martin <martin@valinux.com>
- * Gareth Hughes <gareth@valinux.com>
- */
-
-/* CCE microcode (from ATI) */
-
-#include "ati.h"
-
-CARD32 r128_cce_microcode[] = {
- 0, 276838400, 0, 268449792, 2, 142, 2, 145, 0, 1076765731, 0,
- 1617039951, 0, 774592877, 0, 1987540286, 0, 2307490946U, 0,
- 599558925, 0, 589505315, 0, 596487092, 0, 589505315, 1,
- 11544576, 1, 206848, 1, 311296, 1, 198656, 2, 912273422, 11,
- 262144, 0, 0, 1, 33559837, 1, 7438, 1, 14809, 1, 6615, 12, 28,
- 1, 6614, 12, 28, 2, 23, 11, 18874368, 0, 16790922, 1, 409600, 9,
- 30, 1, 147854772, 16, 420483072, 3, 8192, 0, 10240, 1, 198656,
- 1, 15630, 1, 51200, 10, 34858, 9, 42, 1, 33559823, 2, 10276, 1,
- 15717, 1, 15718, 2, 43, 1, 15936948, 1, 570480831, 1, 14715071,
- 12, 322123831, 1, 33953125, 12, 55, 1, 33559908, 1, 15718, 2,
- 46, 4, 2099258, 1, 526336, 1, 442623, 4, 4194365, 1, 509952, 1,
- 459007, 3, 0, 12, 92, 2, 46, 12, 176, 1, 15734, 1, 206848, 1,
- 18432, 1, 133120, 1, 100670734, 1, 149504, 1, 165888, 1,
- 15975928, 1, 1048576, 6, 3145806, 1, 15715, 16, 2150645232U, 2,
- 268449859, 2, 10307, 12, 176, 1, 15734, 1, 15735, 1, 15630, 1,
- 15631, 1, 5253120, 6, 3145810, 16, 2150645232U, 1, 15864, 2, 82,
- 1, 343310, 1, 1064207, 2, 3145813, 1, 15728, 1, 7817, 1, 15729,
- 3, 15730, 12, 92, 2, 98, 1, 16168, 1, 16167, 1, 16002, 1, 16008,
- 1, 15974, 1, 15975, 1, 15990, 1, 15976, 1, 15977, 1, 15980, 0,
- 15981, 1, 10240, 1, 5253120, 1, 15720, 1, 198656, 6, 110, 1,
- 180224, 1, 103824738, 2, 112, 2, 3145839, 0, 536885440, 1,
- 114880, 14, 125, 12, 206975, 1, 33559995, 12, 198784, 0,
- 33570236, 1, 15803, 0, 15804, 3, 294912, 1, 294912, 3, 442370,
- 1, 11544576, 0, 811612160, 1, 12593152, 1, 11536384, 1,
- 14024704, 7, 310382726, 0, 10240, 1, 14796, 1, 14797, 1, 14793,
- 1, 14794, 0, 14795, 1, 268679168, 1, 9437184, 1, 268449792, 1,
- 198656, 1, 9452827, 1, 1075854602, 1, 1075854603, 1, 557056, 1,
- 114880, 14, 159, 12, 198784, 1, 1109409213, 12, 198783, 1,
- 1107312059, 12, 198784, 1, 1109409212, 2, 162, 1, 1075854781, 1,
- 1073757627, 1, 1075854780, 1, 540672, 1, 10485760, 6, 3145894,
- 16, 274741248, 9, 168, 3, 4194304, 3, 4209949, 0, 0, 0, 256, 14,
- 174, 1, 114857, 1, 33560007, 12, 176, 0, 10240, 1, 114858, 1,
- 33560018, 1, 114857, 3, 33560007, 1, 16008, 1, 114874, 1,
- 33560360, 1, 114875, 1, 33560154, 0, 15963, 0, 256, 0, 4096, 1,
- 409611, 9, 188, 0, 10240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-CARD32 radeon_cp_microcode[][2] = {
- { 0x21007000, 0000000000 },
- { 0x20007000, 0000000000 },
- { 0x000000b4, 0x00000004 },
- { 0x000000b8, 0x00000004 },
- { 0x6f5b4d4c, 0000000000 },
- { 0x4c4c427f, 0000000000 },
- { 0x5b568a92, 0000000000 },
- { 0x4ca09c6d, 0000000000 },
- { 0xad4c4c4c, 0000000000 },
- { 0x4ce1af3d, 0000000000 },
- { 0xd8afafaf, 0000000000 },
- { 0xd64c4cdc, 0000000000 },
- { 0x4cd10d10, 0000000000 },
- { 0x000f0000, 0x00000016 },
- { 0x362f242d, 0000000000 },
- { 0x00000012, 0x00000004 },
- { 0x000f0000, 0x00000016 },
- { 0x362f282d, 0000000000 },
- { 0x000380e7, 0x00000002 },
- { 0x04002c97, 0x00000002 },
- { 0x000f0001, 0x00000016 },
- { 0x333a3730, 0000000000 },
- { 0x000077ef, 0x00000002 },
- { 0x00061000, 0x00000002 },
- { 0x00000021, 0x0000001a },
- { 0x00004000, 0x0000001e },
- { 0x00061000, 0x00000002 },
- { 0x00000021, 0x0000001a },
- { 0x00004000, 0x0000001e },
- { 0x00061000, 0x00000002 },
- { 0x00000021, 0x0000001a },
- { 0x00004000, 0x0000001e },
- { 0x00000017, 0x00000004 },
- { 0x0003802b, 0x00000002 },
- { 0x040067e0, 0x00000002 },
- { 0x00000017, 0x00000004 },
- { 0x000077e0, 0x00000002 },
- { 0x00065000, 0x00000002 },
- { 0x000037e1, 0x00000002 },
- { 0x040067e1, 0x00000006 },
- { 0x000077e0, 0x00000002 },
- { 0x000077e1, 0x00000002 },
- { 0x000077e1, 0x00000006 },
- { 0xffffffff, 0000000000 },
- { 0x10000000, 0000000000 },
- { 0x0003802b, 0x00000002 },
- { 0x040067e0, 0x00000006 },
- { 0x00007675, 0x00000002 },
- { 0x00007676, 0x00000002 },
- { 0x00007677, 0x00000002 },
- { 0x00007678, 0x00000006 },
- { 0x0003802c, 0x00000002 },
- { 0x04002676, 0x00000002 },
- { 0x00007677, 0x00000002 },
- { 0x00007678, 0x00000006 },
- { 0x0000002f, 0x00000018 },
- { 0x0000002f, 0x00000018 },
- { 0000000000, 0x00000006 },
- { 0x00000030, 0x00000018 },
- { 0x00000030, 0x00000018 },
- { 0000000000, 0x00000006 },
- { 0x01605000, 0x00000002 },
- { 0x00065000, 0x00000002 },
- { 0x00098000, 0x00000002 },
- { 0x00061000, 0x00000002 },
- { 0x64c0603e, 0x00000004 },
- { 0x000380e6, 0x00000002 },
- { 0x040025c5, 0x00000002 },
- { 0x00080000, 0x00000016 },
- { 0000000000, 0000000000 },
- { 0x0400251d, 0x00000002 },
- { 0x00007580, 0x00000002 },
- { 0x00067581, 0x00000002 },
- { 0x04002580, 0x00000002 },
- { 0x00067581, 0x00000002 },
- { 0x00000049, 0x00000004 },
- { 0x00005000, 0000000000 },
- { 0x000380e6, 0x00000002 },
- { 0x040025c5, 0x00000002 },
- { 0x00061000, 0x00000002 },
- { 0x0000750e, 0x00000002 },
- { 0x00019000, 0x00000002 },
- { 0x00011055, 0x00000014 },
- { 0x00000055, 0x00000012 },
- { 0x0400250f, 0x00000002 },
- { 0x0000504f, 0x00000004 },
- { 0x000380e6, 0x00000002 },
- { 0x040025c5, 0x00000002 },
- { 0x00007565, 0x00000002 },
- { 0x00007566, 0x00000002 },
- { 0x00000058, 0x00000004 },
- { 0x000380e6, 0x00000002 },
- { 0x040025c5, 0x00000002 },
- { 0x01e655b4, 0x00000002 },
- { 0x4401b0e4, 0x00000002 },
- { 0x01c110e4, 0x00000002 },
- { 0x26667066, 0x00000018 },
- { 0x040c2565, 0x00000002 },
- { 0x00000066, 0x00000018 },
- { 0x04002564, 0x00000002 },
- { 0x00007566, 0x00000002 },
- { 0x0000005d, 0x00000004 },
- { 0x00401069, 0x00000008 },
- { 0x00101000, 0x00000002 },
- { 0x000d80ff, 0x00000002 },
- { 0x0080006c, 0x00000008 },
- { 0x000f9000, 0x00000002 },
- { 0x000e00ff, 0x00000002 },
- { 0000000000, 0x00000006 },
- { 0x0000008f, 0x00000018 },
- { 0x0000005b, 0x00000004 },
- { 0x000380e6, 0x00000002 },
- { 0x040025c5, 0x00000002 },
- { 0x00007576, 0x00000002 },
- { 0x00065000, 0x00000002 },
- { 0x00009000, 0x00000002 },
- { 0x00041000, 0x00000002 },
- { 0x0c00350e, 0x00000002 },
- { 0x00049000, 0x00000002 },
- { 0x00051000, 0x00000002 },
- { 0x01e785f8, 0x00000002 },
- { 0x00200000, 0x00000002 },
- { 0x0060007e, 0x0000000c },
- { 0x00007563, 0x00000002 },
- { 0x006075f0, 0x00000021 },
- { 0x20007073, 0x00000004 },
- { 0x00005073, 0x00000004 },
- { 0x000380e6, 0x00000002 },
- { 0x040025c5, 0x00000002 },
- { 0x00007576, 0x00000002 },
- { 0x00007577, 0x00000002 },
- { 0x0000750e, 0x00000002 },
- { 0x0000750f, 0x00000002 },
- { 0x00a05000, 0x00000002 },
- { 0x00600083, 0x0000000c },
- { 0x006075f0, 0x00000021 },
- { 0x000075f8, 0x00000002 },
- { 0x00000083, 0x00000004 },
- { 0x000a750e, 0x00000002 },
- { 0x000380e6, 0x00000002 },
- { 0x040025c5, 0x00000002 },
- { 0x0020750f, 0x00000002 },
- { 0x00600086, 0x00000004 },
- { 0x00007570, 0x00000002 },
- { 0x00007571, 0x00000002 },
- { 0x00007572, 0x00000006 },
- { 0x000380e6, 0x00000002 },
- { 0x040025c5, 0x00000002 },
- { 0x00005000, 0x00000002 },
- { 0x00a05000, 0x00000002 },
- { 0x00007568, 0x00000002 },
- { 0x00061000, 0x00000002 },
- { 0x00000095, 0x0000000c },
- { 0x00058000, 0x00000002 },
- { 0x0c607562, 0x00000002 },
- { 0x00000097, 0x00000004 },
- { 0x000380e6, 0x00000002 },
- { 0x040025c5, 0x00000002 },
- { 0x00600096, 0x00000004 },
- { 0x400070e5, 0000000000 },
- { 0x000380e6, 0x00000002 },
- { 0x040025c5, 0x00000002 },
- { 0x000380e5, 0x00000002 },
- { 0x000000a8, 0x0000001c },
- { 0x000650aa, 0x00000018 },
- { 0x040025bb, 0x00000002 },
- { 0x000610ab, 0x00000018 },
- { 0x040075bc, 0000000000 },
- { 0x000075bb, 0x00000002 },
- { 0x000075bc, 0000000000 },
- { 0x00090000, 0x00000006 },
- { 0x00090000, 0x00000002 },
- { 0x000d8002, 0x00000006 },
- { 0x00007832, 0x00000002 },
- { 0x00005000, 0x00000002 },
- { 0x000380e7, 0x00000002 },
- { 0x04002c97, 0x00000002 },
- { 0x00007820, 0x00000002 },
- { 0x00007821, 0x00000002 },
- { 0x00007800, 0000000000 },
- { 0x01200000, 0x00000002 },
- { 0x20077000, 0x00000002 },
- { 0x01200000, 0x00000002 },
- { 0x20007000, 0x00000002 },
- { 0x00061000, 0x00000002 },
- { 0x0120751b, 0x00000002 },
- { 0x8040750a, 0x00000002 },
- { 0x8040750b, 0x00000002 },
- { 0x00110000, 0x00000002 },
- { 0x000380e5, 0x00000002 },
- { 0x000000c6, 0x0000001c },
- { 0x000610ab, 0x00000018 },
- { 0x844075bd, 0x00000002 },
- { 0x000610aa, 0x00000018 },
- { 0x840075bb, 0x00000002 },
- { 0x000610ab, 0x00000018 },
- { 0x844075bc, 0x00000002 },
- { 0x000000c9, 0x00000004 },
- { 0x804075bd, 0x00000002 },
- { 0x800075bb, 0x00000002 },
- { 0x804075bc, 0x00000002 },
- { 0x00108000, 0x00000002 },
- { 0x01400000, 0x00000002 },
- { 0x006000cd, 0x0000000c },
- { 0x20c07000, 0x00000020 },
- { 0x000000cf, 0x00000012 },
- { 0x00800000, 0x00000006 },
- { 0x0080751d, 0x00000006 },
- { 0000000000, 0000000000 },
- { 0x0000775c, 0x00000002 },
- { 0x00a05000, 0x00000002 },
- { 0x00661000, 0x00000002 },
- { 0x0460275d, 0x00000020 },
- { 0x00004000, 0000000000 },
- { 0x01e00830, 0x00000002 },
- { 0x21007000, 0000000000 },
- { 0x6464614d, 0000000000 },
- { 0x69687420, 0000000000 },
- { 0x00000073, 0000000000 },
- { 0000000000, 0000000000 },
- { 0x00005000, 0x00000002 },
- { 0x000380d0, 0x00000002 },
- { 0x040025e0, 0x00000002 },
- { 0x000075e1, 0000000000 },
- { 0x00000001, 0000000000 },
- { 0x000380e0, 0x00000002 },
- { 0x04002394, 0x00000002 },
- { 0x00005000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0x00000008, 0000000000 },
- { 0x00000004, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
-};
-
-CARD32 r200_cp_microcode[][2] = {
- { 0x21007000, 0000000000 },
- { 0x20007000, 0000000000 },
- { 0x000000ab, 0x00000004 },
- { 0x000000af, 0x00000004 },
- { 0x66544a49, 0000000000 },
- { 0x49494174, 0000000000 },
- { 0x54517d83, 0000000000 },
- { 0x498d8b64, 0000000000 },
- { 0x49494949, 0000000000 },
- { 0x49da493c, 0000000000 },
- { 0x49989898, 0000000000 },
- { 0xd34949d5, 0000000000 },
- { 0x9dc90e11, 0000000000 },
- { 0xce9b9b9b, 0000000000 },
- { 0x000f0000, 0x00000016 },
- { 0x352e232c, 0000000000 },
- { 0x00000013, 0x00000004 },
- { 0x000f0000, 0x00000016 },
- { 0x352e272c, 0000000000 },
- { 0x000f0001, 0x00000016 },
- { 0x3239362f, 0000000000 },
- { 0x000077ef, 0x00000002 },
- { 0x00061000, 0x00000002 },
- { 0x00000020, 0x0000001a },
- { 0x00004000, 0x0000001e },
- { 0x00061000, 0x00000002 },
- { 0x00000020, 0x0000001a },
- { 0x00004000, 0x0000001e },
- { 0x00061000, 0x00000002 },
- { 0x00000020, 0x0000001a },
- { 0x00004000, 0x0000001e },
- { 0x00000016, 0x00000004 },
- { 0x0003802a, 0x00000002 },
- { 0x040067e0, 0x00000002 },
- { 0x00000016, 0x00000004 },
- { 0x000077e0, 0x00000002 },
- { 0x00065000, 0x00000002 },
- { 0x000037e1, 0x00000002 },
- { 0x040067e1, 0x00000006 },
- { 0x000077e0, 0x00000002 },
- { 0x000077e1, 0x00000002 },
- { 0x000077e1, 0x00000006 },
- { 0xffffffff, 0000000000 },
- { 0x10000000, 0000000000 },
- { 0x0003802a, 0x00000002 },
- { 0x040067e0, 0x00000006 },
- { 0x00007675, 0x00000002 },
- { 0x00007676, 0x00000002 },
- { 0x00007677, 0x00000002 },
- { 0x00007678, 0x00000006 },
- { 0x0003802b, 0x00000002 },
- { 0x04002676, 0x00000002 },
- { 0x00007677, 0x00000002 },
- { 0x00007678, 0x00000006 },
- { 0x0000002e, 0x00000018 },
- { 0x0000002e, 0x00000018 },
- { 0000000000, 0x00000006 },
- { 0x0000002f, 0x00000018 },
- { 0x0000002f, 0x00000018 },
- { 0000000000, 0x00000006 },
- { 0x01605000, 0x00000002 },
- { 0x00065000, 0x00000002 },
- { 0x00098000, 0x00000002 },
- { 0x00061000, 0x00000002 },
- { 0x64c0603d, 0x00000004 },
- { 0x00080000, 0x00000016 },
- { 0000000000, 0000000000 },
- { 0x0400251d, 0x00000002 },
- { 0x00007580, 0x00000002 },
- { 0x00067581, 0x00000002 },
- { 0x04002580, 0x00000002 },
- { 0x00067581, 0x00000002 },
- { 0x00000046, 0x00000004 },
- { 0x00005000, 0000000000 },
- { 0x00061000, 0x00000002 },
- { 0x0000750e, 0x00000002 },
- { 0x00019000, 0x00000002 },
- { 0x00011055, 0x00000014 },
- { 0x00000055, 0x00000012 },
- { 0x0400250f, 0x00000002 },
- { 0x0000504a, 0x00000004 },
- { 0x00007565, 0x00000002 },
- { 0x00007566, 0x00000002 },
- { 0x00000051, 0x00000004 },
- { 0x01e655b4, 0x00000002 },
- { 0x4401b0dc, 0x00000002 },
- { 0x01c110dc, 0x00000002 },
- { 0x2666705d, 0x00000018 },
- { 0x040c2565, 0x00000002 },
- { 0x0000005d, 0x00000018 },
- { 0x04002564, 0x00000002 },
- { 0x00007566, 0x00000002 },
- { 0x00000054, 0x00000004 },
- { 0x00401060, 0x00000008 },
- { 0x00101000, 0x00000002 },
- { 0x000d80ff, 0x00000002 },
- { 0x00800063, 0x00000008 },
- { 0x000f9000, 0x00000002 },
- { 0x000e00ff, 0x00000002 },
- { 0000000000, 0x00000006 },
- { 0x00000080, 0x00000018 },
- { 0x00000054, 0x00000004 },
- { 0x00007576, 0x00000002 },
- { 0x00065000, 0x00000002 },
- { 0x00009000, 0x00000002 },
- { 0x00041000, 0x00000002 },
- { 0x0c00350e, 0x00000002 },
- { 0x00049000, 0x00000002 },
- { 0x00051000, 0x00000002 },
- { 0x01e785f8, 0x00000002 },
- { 0x00200000, 0x00000002 },
- { 0x00600073, 0x0000000c },
- { 0x00007563, 0x00000002 },
- { 0x006075f0, 0x00000021 },
- { 0x20007068, 0x00000004 },
- { 0x00005068, 0x00000004 },
- { 0x00007576, 0x00000002 },
- { 0x00007577, 0x00000002 },
- { 0x0000750e, 0x00000002 },
- { 0x0000750f, 0x00000002 },
- { 0x00a05000, 0x00000002 },
- { 0x00600076, 0x0000000c },
- { 0x006075f0, 0x00000021 },
- { 0x000075f8, 0x00000002 },
- { 0x00000076, 0x00000004 },
- { 0x000a750e, 0x00000002 },
- { 0x0020750f, 0x00000002 },
- { 0x00600079, 0x00000004 },
- { 0x00007570, 0x00000002 },
- { 0x00007571, 0x00000002 },
- { 0x00007572, 0x00000006 },
- { 0x00005000, 0x00000002 },
- { 0x00a05000, 0x00000002 },
- { 0x00007568, 0x00000002 },
- { 0x00061000, 0x00000002 },
- { 0x00000084, 0x0000000c },
- { 0x00058000, 0x00000002 },
- { 0x0c607562, 0x00000002 },
- { 0x00000086, 0x00000004 },
- { 0x00600085, 0x00000004 },
- { 0x400070dd, 0000000000 },
- { 0x000380dd, 0x00000002 },
- { 0x00000093, 0x0000001c },
- { 0x00065095, 0x00000018 },
- { 0x040025bb, 0x00000002 },
- { 0x00061096, 0x00000018 },
- { 0x040075bc, 0000000000 },
- { 0x000075bb, 0x00000002 },
- { 0x000075bc, 0000000000 },
- { 0x00090000, 0x00000006 },
- { 0x00090000, 0x00000002 },
- { 0x000d8002, 0x00000006 },
- { 0x00005000, 0x00000002 },
- { 0x00007821, 0x00000002 },
- { 0x00007800, 0000000000 },
- { 0x00007821, 0x00000002 },
- { 0x00007800, 0000000000 },
- { 0x01665000, 0x00000002 },
- { 0x000a0000, 0x00000002 },
- { 0x000671cc, 0x00000002 },
- { 0x0286f1cd, 0x00000002 },
- { 0x000000a3, 0x00000010 },
- { 0x21007000, 0000000000 },
- { 0x000000aa, 0x0000001c },
- { 0x00065000, 0x00000002 },
- { 0x000a0000, 0x00000002 },
- { 0x00061000, 0x00000002 },
- { 0x000b0000, 0x00000002 },
- { 0x38067000, 0x00000002 },
- { 0x000a00a6, 0x00000004 },
- { 0x20007000, 0000000000 },
- { 0x01200000, 0x00000002 },
- { 0x20077000, 0x00000002 },
- { 0x01200000, 0x00000002 },
- { 0x20007000, 0000000000 },
- { 0x00061000, 0x00000002 },
- { 0x0120751b, 0x00000002 },
- { 0x8040750a, 0x00000002 },
- { 0x8040750b, 0x00000002 },
- { 0x00110000, 0x00000002 },
- { 0x000380dd, 0x00000002 },
- { 0x000000bd, 0x0000001c },
- { 0x00061096, 0x00000018 },
- { 0x844075bd, 0x00000002 },
- { 0x00061095, 0x00000018 },
- { 0x840075bb, 0x00000002 },
- { 0x00061096, 0x00000018 },
- { 0x844075bc, 0x00000002 },
- { 0x000000c0, 0x00000004 },
- { 0x804075bd, 0x00000002 },
- { 0x800075bb, 0x00000002 },
- { 0x804075bc, 0x00000002 },
- { 0x00108000, 0x00000002 },
- { 0x01400000, 0x00000002 },
- { 0x006000c4, 0x0000000c },
- { 0x20c07000, 0x00000020 },
- { 0x000000c6, 0x00000012 },
- { 0x00800000, 0x00000006 },
- { 0x0080751d, 0x00000006 },
- { 0x000025bb, 0x00000002 },
- { 0x000040c0, 0x00000004 },
- { 0x0000775c, 0x00000002 },
- { 0x00a05000, 0x00000002 },
- { 0x00661000, 0x00000002 },
- { 0x0460275d, 0x00000020 },
- { 0x00004000, 0000000000 },
- { 0x00007999, 0x00000002 },
- { 0x00a05000, 0x00000002 },
- { 0x00661000, 0x00000002 },
- { 0x0460299b, 0x00000020 },
- { 0x00004000, 0000000000 },
- { 0x01e00830, 0x00000002 },
- { 0x21007000, 0000000000 },
- { 0x00005000, 0x00000002 },
- { 0x00038042, 0x00000002 },
- { 0x040025e0, 0x00000002 },
- { 0x000075e1, 0000000000 },
- { 0x00000001, 0000000000 },
- { 0x000380d9, 0x00000002 },
- { 0x04007394, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
-};
-
-/* Microcode from http://volodya-project.sourceforge.net/ */
-
-CARD32 r300_cp_microcode[][2] = {
- { 0x4200e000, 0000000000 },
- { 0x4000e000, 0000000000 },
- { 0x000000af, 0x00000008 },
- { 0x000000b3, 0x00000008 },
- { 0x6c5a504f, 0000000000 },
- { 0x4f4f497a, 0000000000 },
- { 0x5a578288, 0000000000 },
- { 0x4f91906a, 0000000000 },
- { 0x4f4f4f4f, 0000000000 },
- { 0x4fe24f44, 0000000000 },
- { 0x4f9c9c9c, 0000000000 },
- { 0xdc4f4fde, 0000000000 },
- { 0xa1cd4f4f, 0000000000 },
- { 0xd29d9d9d, 0000000000 },
- { 0x4f0f9fd7, 0000000000 },
- { 0x000ca000, 0x00000004 },
- { 0x000d0012, 0x00000038 },
- { 0x0000e8b4, 0x00000004 },
- { 0x000d0014, 0x00000038 },
- { 0x0000e8b6, 0x00000004 },
- { 0x000d0016, 0x00000038 },
- { 0x0000e854, 0x00000004 },
- { 0x000d0018, 0x00000038 },
- { 0x0000e855, 0x00000004 },
- { 0x000d001a, 0x00000038 },
- { 0x0000e856, 0x00000004 },
- { 0x000d001c, 0x00000038 },
- { 0x0000e857, 0x00000004 },
- { 0x000d001e, 0x00000038 },
- { 0x0000e824, 0x00000004 },
- { 0x000d0020, 0x00000038 },
- { 0x0000e825, 0x00000004 },
- { 0x000d0022, 0x00000038 },
- { 0x0000e830, 0x00000004 },
- { 0x000d0024, 0x00000038 },
- { 0x0000f0c0, 0x00000004 },
- { 0x000d0026, 0x00000038 },
- { 0x0000f0c1, 0x00000004 },
- { 0x000d0028, 0x00000038 },
- { 0x0000f041, 0x00000004 },
- { 0x000d002a, 0x00000038 },
- { 0x0000f184, 0x00000004 },
- { 0x000d002c, 0x00000038 },
- { 0x0000f185, 0x00000004 },
- { 0x000d002e, 0x00000038 },
- { 0x0000f186, 0x00000004 },
- { 0x000d0030, 0x00000038 },
- { 0x0000f187, 0x00000004 },
- { 0x000d0032, 0x00000038 },
- { 0x0000f180, 0x00000004 },
- { 0x000d0034, 0x00000038 },
- { 0x0000f393, 0x00000004 },
- { 0x000d0036, 0x00000038 },
- { 0x0000f38a, 0x00000004 },
- { 0x000d0038, 0x00000038 },
- { 0x0000f38e, 0x00000004 },
- { 0x0000e821, 0x00000004 },
- { 0x0140a000, 0x00000004 },
- { 0x00000043, 0x00000018 },
- { 0x00cce800, 0x00000004 },
- { 0x001b0001, 0x00000004 },
- { 0x08004800, 0x00000004 },
- { 0x001b0001, 0x00000004 },
- { 0x08004800, 0x00000004 },
- { 0x001b0001, 0x00000004 },
- { 0x08004800, 0x00000004 },
- { 0x0000003a, 0x00000008 },
- { 0x0000a000, 0000000000 },
- { 0x02c0a000, 0x00000004 },
- { 0x000ca000, 0x00000004 },
- { 0x00130000, 0x00000004 },
- { 0x000c2000, 0x00000004 },
- { 0xc980c045, 0x00000008 },
- { 0x2000451d, 0x00000004 },
- { 0x0000e580, 0x00000004 },
- { 0x000ce581, 0x00000004 },
- { 0x08004580, 0x00000004 },
- { 0x000ce581, 0x00000004 },
- { 0x0000004c, 0x00000008 },
- { 0x0000a000, 0000000000 },
- { 0x000c2000, 0x00000004 },
- { 0x0000e50e, 0x00000004 },
- { 0x00032000, 0x00000004 },
- { 0x00022056, 0x00000028 },
- { 0x00000056, 0x00000024 },
- { 0x0800450f, 0x00000004 },
- { 0x0000a050, 0x00000008 },
- { 0x0000e565, 0x00000004 },
- { 0x0000e566, 0x00000004 },
- { 0x00000057, 0x00000008 },
- { 0x03cca5b4, 0x00000004 },
- { 0x05432000, 0x00000004 },
- { 0x00022000, 0x00000004 },
- { 0x4ccce063, 0x00000030 },
- { 0x08274565, 0x00000004 },
- { 0x00000063, 0x00000030 },
- { 0x08004564, 0x00000004 },
- { 0x0000e566, 0x00000004 },
- { 0x0000005a, 0x00000008 },
- { 0x00802066, 0x00000010 },
- { 0x00202000, 0x00000004 },
- { 0x001b00ff, 0x00000004 },
- { 0x01000069, 0x00000010 },
- { 0x001f2000, 0x00000004 },
- { 0x001c00ff, 0x00000004 },
- { 0000000000, 0x0000000c },
- { 0x00000085, 0x00000030 },
- { 0x0000005a, 0x00000008 },
- { 0x0000e576, 0x00000004 },
- { 0x000ca000, 0x00000004 },
- { 0x00012000, 0x00000004 },
- { 0x00082000, 0x00000004 },
- { 0x1800650e, 0x00000004 },
- { 0x00092000, 0x00000004 },
- { 0x000a2000, 0x00000004 },
- { 0x000f0000, 0x00000004 },
- { 0x00400000, 0x00000004 },
- { 0x00000079, 0x00000018 },
- { 0x0000e563, 0x00000004 },
- { 0x00c0e5f9, 0x000000c2 },
- { 0x0000006e, 0x00000008 },
- { 0x0000a06e, 0x00000008 },
- { 0x0000e576, 0x00000004 },
- { 0x0000e577, 0x00000004 },
- { 0x0000e50e, 0x00000004 },
- { 0x0000e50f, 0x00000004 },
- { 0x0140a000, 0x00000004 },
- { 0x0000007c, 0x00000018 },
- { 0x00c0e5f9, 0x000000c2 },
- { 0x0000007c, 0x00000008 },
- { 0x0014e50e, 0x00000004 },
- { 0x0040e50f, 0x00000004 },
- { 0x00c0007f, 0x00000008 },
- { 0x0000e570, 0x00000004 },
- { 0x0000e571, 0x00000004 },
- { 0x0000e572, 0x0000000c },
- { 0x0000a000, 0x00000004 },
- { 0x0140a000, 0x00000004 },
- { 0x0000e568, 0x00000004 },
- { 0x000c2000, 0x00000004 },
- { 0x00000089, 0x00000018 },
- { 0x000b0000, 0x00000004 },
- { 0x18c0e562, 0x00000004 },
- { 0x0000008b, 0x00000008 },
- { 0x00c0008a, 0x00000008 },
- { 0x000700e4, 0x00000004 },
- { 0x00000097, 0x00000038 },
- { 0x000ca099, 0x00000030 },
- { 0x080045bb, 0x00000004 },
- { 0x000c209a, 0x00000030 },
- { 0x0800e5bc, 0000000000 },
- { 0x0000e5bb, 0x00000004 },
- { 0x0000e5bc, 0000000000 },
- { 0x00120000, 0x0000000c },
- { 0x00120000, 0x00000004 },
- { 0x001b0002, 0x0000000c },
- { 0x0000a000, 0x00000004 },
- { 0x0000e821, 0x00000004 },
- { 0x0000e800, 0000000000 },
- { 0x0000e821, 0x00000004 },
- { 0x0000e82e, 0000000000 },
- { 0x02cca000, 0x00000004 },
- { 0x00140000, 0x00000004 },
- { 0x000ce1cc, 0x00000004 },
- { 0x050de1cd, 0x00000004 },
- { 0x000000a7, 0x00000020 },
- { 0x4200e000, 0000000000 },
- { 0x000000ae, 0x00000038 },
- { 0x000ca000, 0x00000004 },
- { 0x00140000, 0x00000004 },
- { 0x000c2000, 0x00000004 },
- { 0x00160000, 0x00000004 },
- { 0x700ce000, 0x00000004 },
- { 0x001400aa, 0x00000008 },
- { 0x4000e000, 0000000000 },
- { 0x02400000, 0x00000004 },
- { 0x400ee000, 0x00000004 },
- { 0x02400000, 0x00000004 },
- { 0x4000e000, 0000000000 },
- { 0x000c2000, 0x00000004 },
- { 0x0240e51b, 0x00000004 },
- { 0x0080e50a, 0x00000005 },
- { 0x0080e50b, 0x00000005 },
- { 0x00220000, 0x00000004 },
- { 0x000700e4, 0x00000004 },
- { 0x000000c1, 0x00000038 },
- { 0x000c209a, 0x00000030 },
- { 0x0880e5bd, 0x00000005 },
- { 0x000c2099, 0x00000030 },
- { 0x0800e5bb, 0x00000005 },
- { 0x000c209a, 0x00000030 },
- { 0x0880e5bc, 0x00000005 },
- { 0x000000c4, 0x00000008 },
- { 0x0080e5bd, 0x00000005 },
- { 0x0000e5bb, 0x00000005 },
- { 0x0080e5bc, 0x00000005 },
- { 0x00210000, 0x00000004 },
- { 0x02800000, 0x00000004 },
- { 0x00c000c8, 0x00000018 },
- { 0x4180e000, 0x00000040 },
- { 0x000000ca, 0x00000024 },
- { 0x01000000, 0x0000000c },
- { 0x0100e51d, 0x0000000c },
- { 0x000045bb, 0x00000004 },
- { 0x000080c4, 0x00000008 },
- { 0x0000f3ce, 0x00000004 },
- { 0x0140a000, 0x00000004 },
- { 0x00cc2000, 0x00000004 },
- { 0x08c053cf, 0x00000040 },
- { 0x00008000, 0000000000 },
- { 0x0000f3d2, 0x00000004 },
- { 0x0140a000, 0x00000004 },
- { 0x00cc2000, 0x00000004 },
- { 0x08c053d3, 0x00000040 },
- { 0x00008000, 0000000000 },
- { 0x0000f39d, 0x00000004 },
- { 0x0140a000, 0x00000004 },
- { 0x00cc2000, 0x00000004 },
- { 0x08c0539e, 0x00000040 },
- { 0x00008000, 0000000000 },
- { 0x03c00830, 0x00000004 },
- { 0x4200e000, 0000000000 },
- { 0x0000a000, 0x00000004 },
- { 0x200045e0, 0x00000004 },
- { 0x0000e5e1, 0000000000 },
- { 0x00000001, 0000000000 },
- { 0x000700e1, 0x00000004 },
- { 0x0800e394, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
- { 0000000000, 0000000000 },
-};
diff --git a/hw/kdrive/ati/ati_reg.h b/hw/kdrive/ati/ati_reg.h
deleted file mode 100644
index 3089cba04..000000000
--- a/hw/kdrive/ati/ati_reg.h
+++ /dev/null
@@ -1,1927 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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.
- */
-
-/* Many of the Radeon and Rage 128 registers are the same.
- * ATI_ should denote registers and values that are common for R128 and Radeon.
- *
- * The information in this file comes from many sources, including the Rage 128
- * DDK, Rage 128 register reference, the XFree86 and kernel Rage 128 and Radeon
- * register definition headers, and bits from the Radeon DDK and RV200 register
- * specs supplied by others.
- */
-
-#define ATI_REG_CLOCK_CNTL_INDEX 0x0008
-# define ATI_PLL_WR_EN (1 << 7)
-# define ATI_PLL_DIV_SEL (3 << 8)
-
-#define ATI_REG_CLOCK_CNTL_DATA 0x000c
-
-#define ATI_REG_BUS_CNTL 0x0030
-# define ATI_BUS_MASTER_DIS (1 << 6)
-
-#define ATI_REG_GEN_INT_CNTL 0x0040
-
-#define ATI_REG_GEN_CNTL 0x0050
-# define ATI_CRTC_DBL_SCAN_EN (1 << 0) /* 0x00000001 */
-# define ATI_CRTC_INTERLACE_EN (1 << 1) /* 0x00000002 */
-# define ATI_CRTC_CSYNC_EN (1 << 4) /* 0x00000010 */
-# define ATI_CRTC_PIX_WIDTH_MASK (7 << 8) /* 0x00000700 */
-# define ATI_CRTC_CUR_EN (1 << 16) /* 0x00010000 */
-# define ATI_CRTC_CUR_MODE_MASK (7 << 17) /* 0x000e0000 */
-# define ATI_CRTC_ICON_EN (1 << 20) /* 0x00100000 */
-# define ATI_CRTC_ARGB_EN (2 << 20) /* 0x00200000 */
-# define ATI_CRTC_EXT_DISP_EN (1 << 24) /* 0x01000000 */
-# define ATI_CRTC_EN (1 << 25) /* 0x02000000 */
-# define ATI_CRTC_DISP_REQ_EN_B (1 << 26) /* 0x04000000 */
-
-#define ATI_REG_CRTC_EXT_CNTL 0x0054
-# define ATI_CRTC_EN (1 << 25)
-# define ATI_CRTC_VGA_XOVERSCAN (1 << 0)
-# define ATI_VGA_ATI_LINEAR (1 << 3)
-# define ATI_XCRT_CNT_EN (1 << 6)
-# define ATI_CRTC_HSYNC_DIS (1 << 8)
-# define ATI_CRTC_VSYNC_DIS (1 << 9)
-# define ATI_CRTC_DISPLAY_DIS (1 << 10)
-# define RADEON_CRTC_SYNC_TRISTAT (1 << 11)
-# define ATI_CRTC_CRT_ON (1 << 15)
-# define R128_FP_OUT_EN (1 << 22)
-# define R128_FP_ACTIVE (1 << 23)
-
-#define ATI_REG_DAC_CNTL 0x0058
-# define ATI_DAC_RANGE_CNTL (3 << 0)
-# define ATI_DAC_BLANKING (1 << 2)
-# define R128_DAC_CRT_SEL_CRTC2 (1 << 4)
-# define ATI_DAC_CMP_EN (1 << 3)
-# define R128_DAC_PALETTE_ACC_CTL (1 << 5)
-# define ATI_DAC_CMP_OUTPUT (1 << 7)
-# define ATI_DAC_8BIT_EN (1 << 8)
-# define ATI_DAC_VGA_ADR_EN (1 << 13)
-# define ATI_DAC_PDWN (1 << 15)
-# define ATI_DAC_MASK_ALL (0xff << 24)
-
-#define ATI_REG_I2C_CNTL_1 0x0094
-
-#define R128_REG_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 RADEON_REG_RBBM_SOFT_RESET 0x00f0
-# define RADEON_SOFT_RESET_CP (1 << 0)
-# define RADEON_SOFT_RESET_HI (1 << 1)
-# define RADEON_SOFT_RESET_SE (1 << 2)
-# define RADEON_SOFT_RESET_RE (1 << 3)
-# define RADEON_SOFT_RESET_PP (1 << 4)
-# define RADEON_SOFT_RESET_E2 (1 << 5)
-# define RADEON_SOFT_RESET_RB (1 << 6)
-# define RADEON_SOFT_RESET_HDP (1 << 7)
-
-#define RADEON_REG_HOST_PATH_CNTL 0x0130
-# define RADEON_HDP_SOFT_RESET (1 << 26)
-
-#define ATI_REG_AGP_BASE 0x0170
-
-#define ATI_REG_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 RADEON_PENDING_SLOTS_VAL 0x00060000
-# define RADEON_PENDING_SLOTS_SEL 0x00080000
-
-#define R128_REG_PCI_GART_PAGE 0x017c
-
-#define R128_REG_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_REG_VIPH_CONTROL 0x01d0
-
-#define ATI_REG_CRTC_H_TOTAL_DISP 0x0200
-#define ATI_REG_CRTC2_H_TOTAL_DISP 0x0300
-# define ATI_CRTC_H_TOTAL (0x01ff << 0)
-# define ATI_CRTC_H_TOTAL_SHIFT 0
-# define ATI_CRTC_H_DISP (0x00ff << 16)
-# define ATI_CRTC_H_DISP_SHIFT 16
-
-#define ATI_REG_CRTC_H_SYNC_STRT_WID 0x0204
-#define ATI_REG_CRTC2_H_SYNC_STRT_WID 0x0304
-# define RADEON_CRTC_H_SYNC_STRT_PIX (0x07 << 0)
-# define RADEON_CRTC_H_SYNC_STRT_CHAR (0x3ff << 3)
-# define RADEON_CRTC_H_SYNC_STRT_CHAR_SHIFT 3
-# define RADEON_CRTC_H_SYNC_WID (0x3f << 16)
-# define RADEON_CRTC_H_SYNC_WID_SHIFT 16
-# define RADEON_CRTC_H_SYNC_POL (1 << 23)
-
-#define ATI_REG_CRTC_OFFSET 0x0224
-#define ATI_REG_CRTC2_OFFSET 0x0324
-#define ATI_REG_CRTC_OFFSET_CNTL 0x0228
-#define ATI_REG_CRTC2_OFFSET_CNTL 0x0328
-#define ATI_REG_CRTC_PITCH 0x022c
-#define ATI_REG_CRTC2_PITCH 0x032c
-
-#define ATI_REG_OVR_CLR 0x0230
-#define ATI_REG_OVR_WID_LEFT_RIGHT 0x0234
-#define ATI_REG_OVR_WID_TOP_BOTTOM 0x0238
-
-#define ATI_REG_CUR_OFFSET 0x0260
-#define ATI_REG_CUR_HORZ_VERT_POSN 0x0264
-#define ATI_REG_CUR_HORZ_VERT_OFF 0x0268
-# define ATI_CUR_LOCK (1 << 31)
-# define ATI_CURSOR_WIDTH 64
-# define ATI_CURSOR_HEIGHT 64
-# define ATI_CURSOR_PITCH 16
-
-#define ATI_REG_CUR_CLR0 0x026c
-#define ATI_REG_CUR_CLR1 0x0270
-#define ATI_REG_OV0_SCALE_CNTL 0x0420
-#define ATI_REG_SUBPIC_CNTL 0x0540
-#define ATI_REG_CAP0_TRIG_CNTL 0x0950
-#define RADEON_REG_VIPH_CONTROL 0x0c50
-
-#define RADEON_REG_RBBM_STATUS 0x0e40
-# define RADEON_RBBM_FIFOCNT_MASK 0x007f
-# define RADEON_RBBM_ACTIVE (1 << 31)
-
-#define ATI_REG_CCE_RB_BASE 0x0700
-
-#define R128_REG_PM4_BUFFER_CNTL 0x0704
-# define R128_PM4_IN_FRAME_BUFFER (1 << 26)
-# define R128_PM4_BUFFER_CNTL_NOUPDATE (1 << 27)
-# 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 RADEON_REG_CP_RB_CNTL 0x0704
-
-#define R128_REG_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 ATI_REG_CCE_RPTR_ADDR 0x070c
-#define ATI_REG_CCE_RPTR 0x0710
-#define ATI_REG_CCE_WPTR 0x0714
-# define R128_PM4_BUFFER_DL_DONE (1 << 31)
-
-#define R128_REG_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_REG_PM4_IW_INDOFF 0x0738
-#define R128_REG_PM4_IW_INDSIZE 0x073c
-
-#define RADEON_REG_CP_CSQ_CNTL 0x0740
-# define RADEON_CSQ_CNT_PRIMARY_MASK 0x000000ff
-# define RADEON_CSQ_CNT_INDIRECT_MASK 0x0000ff00
-# define R200_CSQ_CNT_PRIMARY_MASK 0x000001ff
-# define R200_CSQ_CNT_INDIRECT_MASK 0x0003fe00
-# define RADEON_CSQ_PRIDIS_INDDIS (0 << 28)
-# define RADEON_CSQ_PRIPIO_INDDIS (1 << 28)
-# define RADEON_CSQ_PRIBM_INDDIS (2 << 28)
-# define RADEON_CSQ_PRIPIO_INDBM (3 << 28)
-# define RADEON_CSQ_PRIBM_INDBM (4 << 28)
-# define RADEON_CSQ_PRIPIO_INDPIO (15 << 28)
-
-#define R128_REG_PM4_STAT 0x07b8
-# define R128_PM4_FIFOCNT_MASK 0x00000fff
-# define R128_PM4_BUSY (1 << 16)
-# define R128_PM4_GUI_ACTIVE (1 << 31)
-
-#define RADEON_REG_CP_STAT 0x07c0
-# define RADEON_CSQ_PRIMARY_BUSY (1 << 10)
-# define RADEON_CSQ_INDIRECT_BUSY (1 << 11)
-
-#define RADEON_REG_ME_CNTL 0x07d0
-# define RADEON_ME_MODE_FREE_RUN (1 << 30)
-
-#define ATI_REG_MICROCODE_RAM_ADDR 0x07d4
-#define ATI_REG_MICROCODE_RAM_RADDR 0x07d8
-#define ATI_REG_MICROCODE_RAM_DATAH 0x07dc
-#define ATI_REG_MICROCODE_RAM_DATAL 0x07e0
-#define R128_REG_PM4_BUFFER_ADDR 0x07f0
-
-#define RADEON_REG_CP_CSQ_STAT 0x07f8
-# define RADEON_CSQ_RPTR_PRIMARY_MASK (0xff << 0)
-# define RADEON_CSQ_WPTR_PRIMARY_MASK (0xff << 8)
-# define RADEON_CSQ_RPTR_INDIRECT_MASK (0xff << 16)
-# define RADEON_CSQ_WPTR_INDIRECT_MASK (0xff << 24)
-# define R200_CSQ_RPTR_PRIMARY_MASK (0x1ff << 0)
-# define R200_CSQ_WPTR_PRIMARY_MASK (0x1ff << 9)
-
-#define R128_REG_PM4_MICRO_CNTL 0x07fc
-# define R128_PM4_MICRO_FREERUN (1 << 30)
-
-#define RADEON_TV_MASTER_CNTL 0x0800
-# define RADEON_TV_MACROVISION (1 << 5)
-# define RADEON_TVCLK_ALWAYS_ON (1 << 30)
-
-#define R128_REG_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)
-
-/* Offset of the PCI config space mirror */
-#define ATI_PCI_CFG_OFFSET 0x0f00
-
-#define ATI_REG_PCI_CFG_STATUS 0x0f06
-# define ATI_CAP_LIST 0x0010
-
-#define ATI_REG_PCI_CFG_CAPABILITIES_PTR 0x0f34
-# define ATI_CAP_PTR_MASK 0x00fc
-# define ATI_CAP_ID_NULL 0x0000 /* End of capability list */
-# define ATI_CAP_ID_AGP 0x0002 /* AGP capability ID */
-
-#define R128_REG_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_REG_AGP_COMMAND 0x0f58
-# define R128_AGP_ENABLE (1 << 8)
-
-#define RADEON_REG_AGP_STATUS 0x0f5c /* PCI */
-# define RADEON_AGP_1X_MODE 0x01
-# define RADEON_AGP_2X_MODE 0x02
-# define RADEON_AGP_4X_MODE 0x04
-# define RADEON_AGP_FW_MODE 0x10
-# define RADEON_AGP_MODE_MASK 0x17
-
-#define RADEON_REG_AGP_COMMAND 0x0f60
-# define RADEON_AGP_ENABLE (1 << 8)
-
-#define R128_REG_PM4_FIFO_DATA_EVEN 0x1000
-#define R128_REG_PM4_FIFO_DATA_ODD 0x1004
-
-#define RADEON_REG_CSQ_APER_PRIMARY 0x1000
-#define RADEON_REG_CSQ_APER_PRIMARY_END 0x11fc
-#define RADEON_REG_CSQ_APER_INDIRECT 0x1300
-#define RADEON_REG_CSQ_APER_INDIRECT_END 0x13fc
-#define ATI_REG_SRC_PITCH_OFFSET 0x1428
-#define ATI_REG_DST_PITCH_OFFSET 0x142c
-#define ATI_REG_SRC_Y_X 0x1434
-#define ATI_REG_DST_Y_X 0x1438
-#define ATI_REG_DST_HEIGHT_WIDTH 0x143c
-
-#define ATI_REG_DP_GUI_MASTER_CNTL 0x146c
-# define ATI_GMC_SRC_PITCH_OFFSET_CNTL (1 << 0)
-# define ATI_GMC_DST_PITCH_OFFSET_CNTL (1 << 1)
-# define ATI_GMC_SRC_CLIPPING (1 << 2)
-# define ATI_GMC_DST_CLIPPING (1 << 3)
-# define ATI_GMC_BRUSH_SOLID_COLOR (13 << 4)
-# define ATI_GMC_BRUSH_NONE (15 << 4)
-# define ATI_GMC_BRUSH_MASK (15 << 4)
-# define ATI_GMC_DST_DATATYPE_MASK (0xf << 8)
-# define ATI_GMC_SRC_DATATYPE_COLOR (3 << 12)
-# define R128_GMC_CONVERSION_TEMP (1 << 15)
-# define R128_GMC_CONVERSION_TEMP_6500 (0 << 15)
-# define R128_GMC_CONVERSION_TEMP_9300 (1 << 15)
-# define ATI_GMC_ROP3_MASK (0xff << 16)
-# define ATI_DP_SRC_SOURCE_MEMORY (2 << 24)
-# define ATI_DP_SRC_SOURCE_HOST_DATA (3 << 24)
-# define R128_GMC_3D_FCN_EN (1 << 27)
-# define ATI_GMC_CLR_CMP_CNTL_DIS (1 << 28)
-# define R128_GMC_AUX_CLIP_DIS (1 << 29)
-# define ATI_GMC_WR_MSK_DIS (1 << 30)
-# define R128_GMC_LD_BRUSH_Y_X (1 << 31)
-
-#define ATI_REG_DP_BRUSH_FRGD_CLR 0x147c
-#define ATI_REG_DST_WIDTH_HEIGHT 0x1598
-#define ATI_REG_CLR_CMP_CNTL 0x15c0
-
-#define R128_REG_AUX_SC_CNTL 0x1660
-# define R128_AUX1_SC_ENB (1 << 0)
-# define R128_AUX1_SC_MODE_SUB (1 << 1)
-# define R128_AUX2_SC_ENB (1 << 0)
-# define R128_AUX2_SC_MODE_SUB (1 << 1)
-# define R128_AUX3_SC_ENB (1 << 0)
-# define R128_AUX3_SC_MODE_SUB (1 << 1)
-
-#define R128_REG_AUX1_SC_LEFT 0x1664
-#define R128_REG_AUX1_SC_RIGHT 0x1668
-#define R128_REG_AUX1_SC_TOP 0x166c
-#define R128_REG_AUX1_SC_BOTTOM 0x1670
-#define R128_REG_AUX2_SC_LEFT 0x1674
-#define R128_REG_AUX2_SC_RIGHT 0x1678
-#define R128_REG_AUX2_SC_TOP 0x167c
-#define R128_REG_AUX2_SC_BOTTOM 0x1680
-#define R128_REG_AUX3_SC_LEFT 0x1684
-#define R128_REG_AUX3_SC_RIGHT 0x1688
-#define R128_REG_AUX3_SC_TOP 0x168c
-#define R128_REG_AUX3_SC_BOTTOM 0x1690
-
-#define ATI_REG_DP_CNTL 0x16c0
-# define ATI_DST_X_LEFT_TO_RIGHT (1 << 0)
-# define ATI_DST_Y_TOP_TO_BOTTOM (1 << 1)
-
-#define ATI_REG_DP_MIX 0x16c8
-#define ATI_REG_DP_WRITE_MASK 0x16cc
-#define ATI_REG_DEFAULT_OFFSET 0x16e0
-#define ATI_REG_DEFAULT_PITCH 0x16e4
-
-#define ATI_REG_DEFAULT_SC_BOTTOM_RIGHT 0x16e8
-# define ATI_DEFAULT_SC_RIGHT_MAX 0x00001fff
-# define ATI_DEFAULT_SC_BOTTOM_MAX 0x1fff0000
-
-#define ATI_REG_SC_TOP_LEFT 0x16ec
-#define ATI_REG_SC_BOTTOM_RIGHT 0x16f0
-
-#define ATI_REG_WAIT_UNTIL 0x1720
-# define ATI_WAIT_CRTC_PFLIP (1 << 0)
-# define ATI_WAIT_RE_CRTC_VLINE (1 << 1)
-# define ATI_WAIT_FE_CRTC_VLINE (1 << 2)
-# define ATI_WAIT_CRTC_VLINE (1 << 3)
-# define ATI_WAIT_DMA_VIPH0_IDLE (1 << 4)
-# define ATI_WAIT_DMA_VIPH1_IDLE (1 << 5)
-# define ATI_WAIT_DMA_VIPH2_IDLE (1 << 6)
-# define ATI_WAIT_DMA_VIPH3_IDLE (1 << 7)
-# define ATI_WAIT_DMA_VID_IDLE (1 << 8)
-# define ATI_WAIT_DMA_GUI_IDLE (1 << 9)
-# define ATI_WAIT_CMDFIFO (1 << 10)
-# define ATI_WAIT_OV0_FLIP (1 << 11)
-# define RADEON_WAIT_OV0_SLICEDONE (1 << 12)
-# define RADEON_WAIT_2D_IDLE (1 << 14)
-# define RADEON_WAIT_3D_IDLE (1 << 15)
-# define RADEON_WAIT_2D_IDLECLEAN (1 << 16)
-# define RADEON_WAIT_3D_IDLECLEAN (1 << 17)
-# define RADEON_WAIT_HOST_IDLECLEAN (1 << 18)
-# define ATI_WAIT_CMDFIFO_ENTRIES (0x07f00000)
-# define RADEON_WAIT_BOTH_CRTC_PFLIP (1 << 30)
-# define RADEON_ENG_DISPLAY_SELECT (1 << 31)
-
-#define RADEON_REG_ISYNC_CNTL 0x1724
-#define ISYNC_ANY2D_IDLE3D 0x1
-#define ISYNC_ANY3D_IDLE2D 0x2
-
-#define R128_REG_GUI_STAT 0x1740
-# define R128_GUI_ACTIVE (1 << 31)
-
-#define R128_REG_PC_GUI_MODE 0x1744
-#define R128_PC_GUI_PRIORITY (1 << 0)
-#define R128_PC_RISE_DF_EN (1 << 1)
-#define R128_PC_FALL_DF_EN (1 << 2)
-#define R128_PC_BYPASS_EN (1 << 3)
-#define R128_PC_CACHE_SIZE (1 << 4)
-#define R128_PC_IGNORE_UNIFY (1 << 5)
-#define R128_PC_IGNORE_WRHINT (1 << 6)
-#define R128_PC_IGNORE_RDHINT (1 << 7)
-#define R128_PC_RISE_DP_EN (1 << 8)
-
-#define R128_REG_PC_GUI_CTLSTAT 0x1748
-/* bits match R128_REG_PC_NGUI_CTLSTAT */
-
-#define R128_REG_TEX_CNTL 0x1800
-#define R128_REG_SECONDARY_SCALE_OFFSET 0x1980
-#define R128_REG_SECONDARY_SCALE_PITCH 0x1980
-#define R128_REG_SECONDARY_SCALE_X_INC 0x1984
-#define R128_REG_SECONDARY_SCALE_Y_INC 0x1988
-#define R128_REG_SECONDARY_SCALE_HACC 0x198c
-#define R128_REG_SECONDARY_SCALE_VACC 0x1990
-#define R128_REG_SCALE_SRC_HEIGHT_WIDTH 0x1994
-#define R128_REG_SCALE_OFFSET_0 0x1998
-#define R128_REG_SCALE_PITCH 0x199c
-#define R128_REG_SCALE_X_INC 0x19a0
-#define R128_REG_SCALE_Y_INC 0x19a4
-#define R128_REG_SCALE_HACC 0x19a8
-#define R128_REG_SCALE_VACC 0x19ac
-#define R128_REG_SCALE_DST_X_Y 0x19b0
-#define R128_REG_SCALE_DST_HEIGHT_WIDTH 0x19b4
-
-#define R128_REG_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_DST_SRC_CLAMP (2 << 12)
-# define R128_ALPHA_COMB_SUB_DST_SRC_NCLAMP (3 << 12)
-# define R128_FOG_TABLE (1 << 14)
-# define R128_SIGNED_DST_CLAMP (1 << 15)
-/* Alpha bits from R128_REG_MISC_3D_CNTL */
-# 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_REG_SCALE_3D_DATATYPE 0x1a20
-
-#define R128_REG_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_REG_WINDOW_XY_OFFSET 0x1bcc
-
-#define RADEON_REG_RB3D_BLENDCNTL 0x1c20
-# define RADEON_COMB_FCN_MASK (3 << 12)
-# define RADEON_COMB_FCN_ADD_CLAMP (0 << 12)
-# define RADEON_COMB_FCN_ADD_NOCLAMP (1 << 12)
-# define RADEON_COMB_FCN_SUB_CLAMP (2 << 12)
-# define RADEON_COMB_FCN_SUB_NOCLAMP (3 << 12)
-# define R200_COMB_FCN_MIN (4 << 12)
-# define R200_COMB_FCN_MAX (5 << 12)
-# define R200_COMB_FCN_RSUB_CLAMP (6 << 12)
-# define R200_COMB_FCN_RSUB_NOCLAMP (7 << 12)
-# define RADEON_SBLEND_GL_ZERO (32 << 16)
-# define RADEON_SBLEND_GL_ONE (33 << 16)
-# define RADEON_SBLEND_GL_SRC_COLOR (34 << 16)
-# define RADEON_SBLEND_GL_INV_SRC_COLOR (35 << 16)
-# define RADEON_SBLEND_GL_DST_COLOR (36 << 16)
-# define RADEON_SBLEND_GL_INV_DST_COLOR (37 << 16)
-# define RADEON_SBLEND_GL_SRC_ALPHA (38 << 16)
-# define RADEON_SBLEND_GL_INV_SRC_ALPHA (39 << 16)
-# define RADEON_SBLEND_GL_DST_ALPHA (40 << 16)
-# define RADEON_SBLEND_GL_INV_DST_ALPHA (41 << 16)
-# define RADEON_SBLEND_GL_SRC_ALPHA_SATURATE (42 << 16)
-# define R200_SBLEND_GL_CONST_COLOR (43 << 16)
-# define R200_SBLEND_GL_ONE_MINUS_CONST_COLOR (44 << 16)
-# define R200_SBLEND_GL_CONST_ALPHA (45 << 16)
-# define R200_SBLEND_GL_ONE_MINUS_CONST_ALPHA (46 << 16)
-# define RADEON_SBLEND_MASK (63 << 16)
-# define RADEON_DBLEND_GL_ZERO (32 << 24)
-# define RADEON_DBLEND_GL_ONE (33 << 24)
-# define RADEON_DBLEND_GL_SRC_COLOR (34 << 24)
-# define RADEON_DBLEND_GL_INV_SRC_COLOR (35 << 24)
-# define RADEON_DBLEND_GL_DST_COLOR (36 << 24)
-# define RADEON_DBLEND_GL_INV_DST_COLOR (37 << 24)
-# define RADEON_DBLEND_GL_SRC_ALPHA (38 << 24)
-# define RADEON_DBLEND_GL_INV_SRC_ALPHA (39 << 24)
-# define RADEON_DBLEND_GL_DST_ALPHA (40 << 24)
-# define RADEON_DBLEND_GL_INV_DST_ALPHA (41 << 24)
-# define R200_DBLEND_GL_CONST_COLOR (43 << 24)
-# define R200_DBLEND_GL_ONE_MINUS_CONST_COLOR (44 << 24)
-# define R200_DBLEND_GL_CONST_ALPHA (45 << 24)
-# define R200_DBLEND_GL_ONE_MINUS_CONST_ALPHA (46 << 24)
-# define RADEON_DBLEND_MASK (63 << 24)
-
-#define RADEON_REG_PP_CNTL 0x1c38
-# define RADEON_STIPPLE_ENABLE (1 << 0)
-# define RADEON_SCISSOR_ENABLE (1 << 1)
-# define RADEON_PATTERN_ENABLE (1 << 2)
-# define RADEON_SHADOW_ENABLE (1 << 3)
-# define RADEON_TEX_ENABLE_MASK (0xf << 4)
-# define RADEON_TEX_0_ENABLE (1 << 4)
-# define RADEON_TEX_1_ENABLE (1 << 5)
-# define RADEON_TEX_2_ENABLE (1 << 6)
-# define RADEON_TEX_3_ENABLE (1 << 7)
-# define R200_TEX_4_ENABLE (1 << 8)
-# define R200_TEX_5_ENABLE (1 << 9)
-# define RADEON_TEX_BLEND_ENABLE_MASK (0xf << 12)
-# define RADEON_TEX_BLEND_0_ENABLE (1 << 12)
-# define RADEON_TEX_BLEND_1_ENABLE (1 << 13)
-# define RADEON_TEX_BLEND_2_ENABLE (1 << 14)
-# define RADEON_TEX_BLEND_3_ENABLE (1 << 15)
-# define R200_TEX_BLEND_4_ENABLE (1 << 16)
-# define R200_TEX_BLEND_5_ENABLE (1 << 17)
-# define R200_TEX_BLEND_6_ENABLE (1 << 18)
-# define RADEON_PLANAR_YUV_ENABLE (1 << 20)
-# define RADEON_SPECULAR_ENABLE (1 << 21)
-# define RADEON_FOG_ENABLE (1 << 22)
-# define RADEON_ALPHA_TEST_ENABLE (1 << 23)
-# define RADEON_ANTI_ALIAS_NONE (0 << 24)
-# define RADEON_ANTI_ALIAS_LINE (1 << 24)
-# define RADEON_ANTI_ALIAS_POLY (2 << 24)
-# define RADEON_ANTI_ALIAS_LINE_POLY (3 << 24)
-# define RADEON_BUMP_MAP_ENABLE (1 << 26)
-# define RADEON_BUMPED_MAP_T0 (0 << 27)
-# define RADEON_BUMPED_MAP_T1 (1 << 27)
-# define RADEON_BUMPED_MAP_T2 (2 << 27)
-# define RADEON_TEX_3D_ENABLE_0 (1 << 29)
-# define RADEON_TEX_3D_ENABLE_1 (1 << 30)
-# define RADEON_MC_ENABLE (1 << 31)
-
-#define RADEON_REG_RB3D_CNTL 0x1c3c
-# define RADEON_ALPHA_BLEND_ENABLE (1 << 0)
-# define RADEON_PLANE_MASK_ENABLE (1 << 1)
-# define RADEON_DITHER_ENABLE (1 << 2)
-# define RADEON_ROUND_ENABLE (1 << 3)
-# define RADEON_SCALE_DITHER_ENABLE (1 << 4)
-# define RADEON_DITHER_INIT (1 << 5)
-# define RADEON_ROP_ENABLE (1 << 6)
-# define RADEON_STENCIL_ENABLE (1 << 7)
-# define RADEON_Z_ENABLE (1 << 8)
-# define RADEON_DEPTH_XZ_OFFEST_ENABLE (1 << 9)
-# define RADEON_COLOR_FORMAT_ARGB1555 (3 << 10)
-# define RADEON_COLOR_FORMAT_RGB565 (4 << 10)
-# define RADEON_COLOR_FORMAT_ARGB8888 (6 << 10)
-# define RADEON_COLOR_FORMAT_RGB332 (7 << 10)
-# define RADEON_COLOR_FORMAT_Y8 (8 << 10)
-# define RADEON_COLOR_FORMAT_RGB8 (9 << 10)
-# define RADEON_COLOR_FORMAT_YUV422_VYUY (11 << 10)
-# define RADEON_COLOR_FORMAT_YUV422_YVYU (12 << 10)
-# define RADEON_COLOR_FORMAT_aYUV444 (14 << 10)
-# define RADEON_COLOR_FORMAT_ARGB4444 (15 << 10)
-# define RADEON_CLRCMP_FLIP_ENABLE (1 << 14)
-
-#define RADEON_REG_RB3D_COLOROFFSET 0x1c40
-# define RADEON_COLOROFFSET_MASK 0xfffffff0
-
-#define RADEON_REG_RE_WIDTH_HEIGHT 0x1c44
-
-#define RADEON_REG_RB3D_COLORPITCH 0x1c48
-# define RADEON_COLORPITCH_MASK 0x000001ff8
-# define RADEON_COLOR_TILE_ENABLE (1 << 16)
-# define RADEON_COLOR_MICROTILE_ENABLE (1 << 17)
-# define RADEON_COLOR_ENDIAN_NO_SWAP (0 << 18)
-# define RADEON_COLOR_ENDIAN_WORD_SWAP (1 << 18)
-# define RADEON_COLOR_ENDIAN_DWORD_SWAP (2 << 18)
-
-#define RADEON_REG_SE_CNTL 0x1c4c
-# define RADEON_FFACE_CULL_CW (0 << 0)
-# define RADEON_FFACE_CULL_CCW (1 << 0)
-# define RADEON_FFACE_CULL_DIR_MASK (1 << 0)
-# define RADEON_BFACE_CULL (0 << 1)
-# define RADEON_BFACE_SOLID (3 << 1)
-# define RADEON_FFACE_CULL (0 << 3)
-# define RADEON_FFACE_SOLID (3 << 3)
-# define RADEON_FFACE_CULL_MASK (3 << 3)
-# define RADEON_BADVTX_CULL_DISABLE (1 << 5)
-# define RADEON_FLAT_SHADE_VTX_0 (0 << 6)
-# define RADEON_FLAT_SHADE_VTX_1 (1 << 6)
-# define RADEON_FLAT_SHADE_VTX_2 (2 << 6)
-# define RADEON_FLAT_SHADE_VTX_LAST (3 << 6)
-# define RADEON_DIFFUSE_SHADE_SOLID (0 << 8)
-# define RADEON_DIFFUSE_SHADE_FLAT (1 << 8)
-# define RADEON_DIFFUSE_SHADE_GOURAUD (2 << 8)
-# define RADEON_DIFFUSE_SHADE_MASK (3 << 8)
-# define RADEON_ALPHA_SHADE_SOLID (0 << 10)
-# define RADEON_ALPHA_SHADE_FLAT (1 << 10)
-# define RADEON_ALPHA_SHADE_GOURAUD (2 << 10)
-# define RADEON_ALPHA_SHADE_MASK (3 << 10)
-# define RADEON_SPECULAR_SHADE_SOLID (0 << 12)
-# define RADEON_SPECULAR_SHADE_FLAT (1 << 12)
-# define RADEON_SPECULAR_SHADE_GOURAUD (2 << 12)
-# define RADEON_SPECULAR_SHADE_MASK (3 << 12)
-# define RADEON_FOG_SHADE_SOLID (0 << 14)
-# define RADEON_FOG_SHADE_FLAT (1 << 14)
-# define RADEON_FOG_SHADE_GOURAUD (2 << 14)
-# define RADEON_FOG_SHADE_MASK (3 << 14)
-# define RADEON_ZBIAS_ENABLE_POINT (1 << 16)
-# define RADEON_ZBIAS_ENABLE_LINE (1 << 17)
-# define RADEON_ZBIAS_ENABLE_TRI (1 << 18)
-# define RADEON_WIDELINE_ENABLE (1 << 20)
-# define RADEON_VPORT_XY_XFORM_ENABLE (1 << 24)
-# define RADEON_VPORT_Z_XFORM_ENABLE (1 << 25)
-# define RADEON_VTX_PIX_CENTER_D3D (0 << 27)
-# define RADEON_VTX_PIX_CENTER_OGL (1 << 27)
-# define RADEON_ROUND_MODE_TRUNC (0 << 28)
-# define RADEON_ROUND_MODE_ROUND (1 << 28)
-# define RADEON_ROUND_MODE_ROUND_EVEN (2 << 28)
-# define RADEON_ROUND_MODE_ROUND_ODD (3 << 28)
-# define RADEON_ROUND_PREC_16TH_PIX (0 << 30)
-# define RADEON_ROUND_PREC_8TH_PIX (1 << 30)
-# define RADEON_ROUND_PREC_4TH_PIX (2 << 30)
-# define RADEON_ROUND_PREC_HALF_PIX (3 << 30)
-
-#define R200_REG_RE_CNTL 0x1c50
-
-#define RADEON_REG_SE_COORD_FMT 0x1c50
-# define RADEON_VTX_XY_PRE_MULT_1_OVER_W0 (1 << 0)
-# define RADEON_VTX_Z_PRE_MULT_1_OVER_W0 (1 << 1)
-# define RADEON_VTX_ST0_NONPARAMETRIC (1 << 8)
-# define RADEON_VTX_ST1_NONPARAMETRIC (1 << 9)
-# define RADEON_VTX_ST2_NONPARAMETRIC (1 << 10)
-# define RADEON_VTX_ST3_NONPARAMETRIC (1 << 11)
-# define RADEON_VTX_W0_NORMALIZE (1 << 12)
-# define RADEON_VTX_W0_IS_NOT_1_OVER_W0 (1 << 16)
-# define RADEON_VTX_ST0_PRE_MULT_1_OVER_W0 (1 << 17)
-# define RADEON_VTX_ST1_PRE_MULT_1_OVER_W0 (1 << 19)
-# define RADEON_VTX_ST2_PRE_MULT_1_OVER_W0 (1 << 21)
-# define RADEON_VTX_ST3_PRE_MULT_1_OVER_W0 (1 << 23)
-# define RADEON_TEX1_W_ROUTING_USE_W0 (0 << 26)
-# define RADEON_TEX1_W_ROUTING_USE_Q1 (1 << 26)
-
-#define RADEON_REG_PP_TXFILTER_0 0x1c54
-#define RADEON_REG_PP_TXFILTER_1 0x1c6c
-#define RADEON_REG_PP_TXFILTER_2 0x1c84
-# define RADEON_MAG_FILTER_NEAREST (0 << 0)
-# define RADEON_MAG_FILTER_LINEAR (1 << 0)
-# define RADEON_MAG_FILTER_MASK (1 << 0)
-# define RADEON_MIN_FILTER_NEAREST (0 << 1)
-# define RADEON_MIN_FILTER_LINEAR (1 << 1)
-# define RADEON_MIN_FILTER_NEAREST_MIP_NEAREST (2 << 1)
-# define RADEON_MIN_FILTER_NEAREST_MIP_LINEAR (3 << 1)
-# define RADEON_MIN_FILTER_LINEAR_MIP_NEAREST (6 << 1)
-# define RADEON_MIN_FILTER_LINEAR_MIP_LINEAR (7 << 1)
-# define RADEON_MIN_FILTER_ANISO_NEAREST (8 << 1)
-# define RADEON_MIN_FILTER_ANISO_LINEAR (9 << 1)
-# define RADEON_MIN_FILTER_ANISO_NEAREST_MIP_NEAREST (10 << 1)
-# define RADEON_MIN_FILTER_ANISO_NEAREST_MIP_LINEAR (11 << 1)
-# define RADEON_MIN_FILTER_MASK (15 << 1)
-# define RADEON_MAX_ANISO_1_TO_1 (0 << 5)
-# define RADEON_MAX_ANISO_2_TO_1 (1 << 5)
-# define RADEON_MAX_ANISO_4_TO_1 (2 << 5)
-# define RADEON_MAX_ANISO_8_TO_1 (3 << 5)
-# define RADEON_MAX_ANISO_16_TO_1 (4 << 5)
-# define RADEON_MAX_ANISO_MASK (7 << 5)
-# define RADEON_LOD_BIAS_MASK (0xff << 8)
-# define RADEON_LOD_BIAS_SHIFT 8
-# define RADEON_MAX_MIP_LEVEL_MASK (0x0f << 16)
-# define RADEON_MAX_MIP_LEVEL_SHIFT 16
-# define RADEON_YUV_TO_RGB (1 << 20)
-# define RADEON_YUV_TEMPERATURE_COOL (0 << 21)
-# define RADEON_YUV_TEMPERATURE_HOT (1 << 21)
-# define RADEON_YUV_TEMPERATURE_MASK (1 << 21)
-# define RADEON_WRAPEN_S (1 << 22)
-# define RADEON_CLAMP_S_WRAP (0 << 23)
-# define RADEON_CLAMP_S_MIRROR (1 << 23)
-# define RADEON_CLAMP_S_CLAMP_LAST (2 << 23)
-# define RADEON_CLAMP_S_MIRROR_CLAMP_LAST (3 << 23)
-# define RADEON_CLAMP_S_CLAMP_BORDER (4 << 23)
-# define RADEON_CLAMP_S_MIRROR_CLAMP_BORDER (5 << 23)
-# define RADEON_CLAMP_S_CLAMP_GL (6 << 23)
-# define RADEON_CLAMP_S_MIRROR_CLAMP_GL (7 << 23)
-# define RADEON_CLAMP_S_MASK (7 << 23)
-# define RADEON_WRAPEN_T (1 << 26)
-# define RADEON_CLAMP_T_WRAP (0 << 27)
-# define RADEON_CLAMP_T_MIRROR (1 << 27)
-# define RADEON_CLAMP_T_CLAMP_LAST (2 << 27)
-# define RADEON_CLAMP_T_MIRROR_CLAMP_LAST (3 << 27)
-# define RADEON_CLAMP_T_CLAMP_BORDER (4 << 27)
-# define RADEON_CLAMP_T_MIRROR_CLAMP_BORDER (5 << 27)
-# define RADEON_CLAMP_T_CLAMP_GL (6 << 27)
-# define RADEON_CLAMP_T_MIRROR_CLAMP_GL (7 << 27)
-# define RADEON_CLAMP_T_MASK (7 << 27)
-# define RADEON_BORDER_MODE_OGL (0 << 31)
-# define RADEON_BORDER_MODE_D3D (1 << 31)
-
-#define RADEON_REG_PP_TXFORMAT_0 0x1c58
-#define RADEON_REG_PP_TXFORMAT_1 0x1c70
-#define RADEON_REG_PP_TXFORMAT_2 0x1c88
-# define RADEON_TXFORMAT_I8 (0 << 0)
-# define RADEON_TXFORMAT_AI88 (1 << 0)
-# define RADEON_TXFORMAT_RGB332 (2 << 0)
-# define RADEON_TXFORMAT_ARGB1555 (3 << 0)
-# define RADEON_TXFORMAT_RGB565 (4 << 0)
-# define RADEON_TXFORMAT_ARGB4444 (5 << 0)
-# define RADEON_TXFORMAT_ARGB8888 (6 << 0)
-# define RADEON_TXFORMAT_RGBA8888 (7 << 0)
-# define RADEON_TXFORMAT_Y8 (8 << 0)
-# define RADEON_TXFORMAT_AYUV444 (9 << 0)
-# define RADEON_TXFORMAT_VYUY422 (10 << 0)
-# define RADEON_TXFORMAT_YVYU422 (11 << 0)
-# define RADEON_TXFORMAT_DXT1 (12 << 0)
-# define RADEON_TXFORMAT_DXT23 (14 << 0)
-# define RADEON_TXFORMAT_DXT45 (15 << 0)
-# define RADEON_TXFORMAT_FORMAT_MASK (31 << 0)
-# define RADEON_TXFORMAT_FORMAT_SHIFT 0
-# define RADEON_TXFORMAT_APPLE_YUV_MODE (1 << 5)
-# define RADEON_TXFORMAT_ALPHA_IN_MAP (1 << 6)
-# define RADEON_TXFORMAT_NON_POWER2 (1 << 7)
-# define RADEON_TXFORMAT_WIDTH_MASK (15 << 8)
-# define RADEON_TXFORMAT_WIDTH_SHIFT 8
-# define RADEON_TXFORMAT_HEIGHT_MASK (15 << 12)
-# define RADEON_TXFORMAT_HEIGHT_SHIFT 12
-# define RADEON_TXFORMAT_F5_WIDTH_MASK (15 << 16)
-# define RADEON_TXFORMAT_F5_WIDTH_SHIFT 16
-# define RADEON_TXFORMAT_F5_HEIGHT_MASK (15 << 20)
-# define RADEON_TXFORMAT_F5_HEIGHT_SHIFT 20
-# define RADEON_TXFORMAT_ST_ROUTE_STQ0 (0 << 24)
-# define RADEON_TXFORMAT_ST_ROUTE_STQ1 (1 << 24)
-# define RADEON_TXFORMAT_ST_ROUTE_STQ2 (2 << 24)
-# define RADEON_TXFORMAT_ST_ROUTE_MASK (3 << 24)
-# define RADEON_TXFORMAT_ENDIAN_NO_SWAP (0 << 26)
-# define RADEON_TXFORMAT_ENDIAN_16BPP_SWAP (1 << 26)
-# define RADEON_TXFORMAT_ENDIAN_32BPP_SWAP (2 << 26)
-# define RADEON_TXFORMAT_ENDIAN_HALFDW_SWAP (3 << 26)
-# define RADEON_TXFORMAT_ALPHA_MASK_ENABLE (1 << 28)
-# define RADEON_TXFORMAT_CHROMA_KEY_ENABLE (1 << 29)
-# define RADEON_TXFORMAT_CUBIC_MAP_ENABLE (1 << 30)
-# define RADEON_TXFORMAT_PERSPECTIVE_ENABLE (1 << 31)
-
-#define RADEON_REG_PP_TXOFFSET_0 0x1c5c
-#define RADEON_REG_PP_TXOFFSET_1 0x1c74
-#define RADEON_REG_PP_TXOFFSET_2 0x1c8c
-# define RADEON_TXO_ENDIAN_NO_SWAP (0 << 0)
-# define RADEON_TXO_ENDIAN_BYTE_SWAP (1 << 0)
-# define RADEON_TXO_ENDIAN_WORD_SWAP (2 << 0)
-# define RADEON_TXO_ENDIAN_HALFDW_SWAP (3 << 0)
-# define RADEON_TXO_MACRO_LINEAR (0 << 2)
-# define RADEON_TXO_MACRO_TILE (1 << 2)
-# define RADEON_TXO_MICRO_LINEAR (0 << 3)
-# define RADEON_TXO_MICRO_TILE_X2 (1 << 3)
-# define RADEON_TXO_MICRO_TILE_OPT (2 << 3)
-# define RADEON_TXO_OFFSET_MASK 0xffffffe0
-# define RADEON_TXO_OFFSET_SHIFT 5
-
-#define RADEON_REG_PP_TXCBLEND_0 0x1c60
-#define RADEON_REG_PP_TXCBLEND_1 0x1c78
-#define RADEON_REG_PP_TXCBLEND_2 0x1c90
-# define RADEON_COLOR_ARG_A_SHIFT 0
-# define RADEON_COLOR_ARG_A_MASK (0x1f << 0)
-# define RADEON_COLOR_ARG_A_ZERO (0 << 0)
-# define RADEON_COLOR_ARG_A_CURRENT_COLOR (2 << 0)
-# define RADEON_COLOR_ARG_A_CURRENT_ALPHA (3 << 0)
-# define RADEON_COLOR_ARG_A_DIFFUSE_COLOR (4 << 0)
-# define RADEON_COLOR_ARG_A_DIFFUSE_ALPHA (5 << 0)
-# define RADEON_COLOR_ARG_A_SPECULAR_COLOR (6 << 0)
-# define RADEON_COLOR_ARG_A_SPECULAR_ALPHA (7 << 0)
-# define RADEON_COLOR_ARG_A_TFACTOR_COLOR (8 << 0)
-# define RADEON_COLOR_ARG_A_TFACTOR_ALPHA (9 << 0)
-# define RADEON_COLOR_ARG_A_T0_COLOR (10 << 0)
-# define RADEON_COLOR_ARG_A_T0_ALPHA (11 << 0)
-# define RADEON_COLOR_ARG_A_T1_COLOR (12 << 0)
-# define RADEON_COLOR_ARG_A_T1_ALPHA (13 << 0)
-# define RADEON_COLOR_ARG_A_T2_COLOR (14 << 0)
-# define RADEON_COLOR_ARG_A_T2_ALPHA (15 << 0)
-# define RADEON_COLOR_ARG_A_T3_COLOR (16 << 0)
-# define RADEON_COLOR_ARG_A_T3_ALPHA (17 << 0)
-# define RADEON_COLOR_ARG_B_SHIFT 5
-# define RADEON_COLOR_ARG_B_MASK (0x1f << 5)
-# define RADEON_COLOR_ARG_B_ZERO (0 << 5)
-# define RADEON_COLOR_ARG_B_CURRENT_COLOR (2 << 5)
-# define RADEON_COLOR_ARG_B_CURRENT_ALPHA (3 << 5)
-# define RADEON_COLOR_ARG_B_DIFFUSE_COLOR (4 << 5)
-# define RADEON_COLOR_ARG_B_DIFFUSE_ALPHA (5 << 5)
-# define RADEON_COLOR_ARG_B_SPECULAR_COLOR (6 << 5)
-# define RADEON_COLOR_ARG_B_SPECULAR_ALPHA (7 << 5)
-# define RADEON_COLOR_ARG_B_TFACTOR_COLOR (8 << 5)
-# define RADEON_COLOR_ARG_B_TFACTOR_ALPHA (9 << 5)
-# define RADEON_COLOR_ARG_B_T0_COLOR (10 << 5)
-# define RADEON_COLOR_ARG_B_T0_ALPHA (11 << 5)
-# define RADEON_COLOR_ARG_B_T1_COLOR (12 << 5)
-# define RADEON_COLOR_ARG_B_T1_ALPHA (13 << 5)
-# define RADEON_COLOR_ARG_B_T2_COLOR (14 << 5)
-# define RADEON_COLOR_ARG_B_T2_ALPHA (15 << 5)
-# define RADEON_COLOR_ARG_B_T3_COLOR (16 << 5)
-# define RADEON_COLOR_ARG_B_T3_ALPHA (17 << 5)
-# define RADEON_COLOR_ARG_C_SHIFT 10
-# define RADEON_COLOR_ARG_C_MASK (0x1f << 10)
-# define RADEON_COLOR_ARG_C_ZERO (0 << 10)
-# define RADEON_COLOR_ARG_C_CURRENT_COLOR (2 << 10)
-# define RADEON_COLOR_ARG_C_CURRENT_ALPHA (3 << 10)
-# define RADEON_COLOR_ARG_C_DIFFUSE_COLOR (4 << 10)
-# define RADEON_COLOR_ARG_C_DIFFUSE_ALPHA (5 << 10)
-# define RADEON_COLOR_ARG_C_SPECULAR_COLOR (6 << 10)
-# define RADEON_COLOR_ARG_C_SPECULAR_ALPHA (7 << 10)
-# define RADEON_COLOR_ARG_C_TFACTOR_COLOR (8 << 10)
-# define RADEON_COLOR_ARG_C_TFACTOR_ALPHA (9 << 10)
-# define RADEON_COLOR_ARG_C_T0_COLOR (10 << 10)
-# define RADEON_COLOR_ARG_C_T0_ALPHA (11 << 10)
-# define RADEON_COLOR_ARG_C_T1_COLOR (12 << 10)
-# define RADEON_COLOR_ARG_C_T1_ALPHA (13 << 10)
-# define RADEON_COLOR_ARG_C_T2_COLOR (14 << 10)
-# define RADEON_COLOR_ARG_C_T2_ALPHA (15 << 10)
-# define RADEON_COLOR_ARG_C_T3_COLOR (16 << 10)
-# define RADEON_COLOR_ARG_C_T3_ALPHA (17 << 10)
-# define RADEON_COMP_ARG_A (1 << 15)
-# define RADEON_COMP_ARG_A_SHIFT 15
-# define RADEON_COMP_ARG_B (1 << 16)
-# define RADEON_COMP_ARG_B_SHIFT 16
-# define RADEON_COMP_ARG_C (1 << 17)
-# define RADEON_COMP_ARG_C_SHIFT 17
-# define RADEON_BLEND_CTL_MASK (7 << 18)
-# define RADEON_BLEND_CTL_ADD (0 << 18)
-# define RADEON_BLEND_CTL_SUBTRACT (1 << 18)
-# define RADEON_BLEND_CTL_ADDSIGNED (2 << 18)
-# define RADEON_BLEND_CTL_BLEND (3 << 18)
-# define RADEON_BLEND_CTL_DOT3 (4 << 18)
-# define RADEON_SCALE_SHIFT 21
-# define RADEON_SCALE_MASK (3 << 21)
-# define RADEON_SCALE_1X (0 << 21)
-# define RADEON_SCALE_2X (1 << 21)
-# define RADEON_SCALE_4X (2 << 21)
-# define RADEON_CLAMP_TX (1 << 23)
-# define RADEON_T0_EQ_TCUR (1 << 24)
-# define RADEON_T1_EQ_TCUR (1 << 25)
-# define RADEON_T2_EQ_TCUR (1 << 26)
-# define RADEON_T3_EQ_TCUR (1 << 27)
-# define RADEON_COLOR_ARG_MASK 0x1f
-# define RADEON_COMP_ARG_SHIFT 15
-
-#define RADEON_REG_PP_TXABLEND_0 0x1c64
-#define RADEON_REG_PP_TXABLEND_1 0x1c7c
-#define RADEON_REG_PP_TXABLEND_2 0x1c94
-# define RADEON_ALPHA_ARG_A_SHIFT 0
-# define RADEON_ALPHA_ARG_A_MASK (0xf << 0)
-# define RADEON_ALPHA_ARG_A_ZERO (0 << 0)
-# define RADEON_ALPHA_ARG_A_CURRENT_ALPHA (1 << 0)
-# define RADEON_ALPHA_ARG_A_DIFFUSE_ALPHA (2 << 0)
-# define RADEON_ALPHA_ARG_A_SPECULAR_ALPHA (3 << 0)
-# define RADEON_ALPHA_ARG_A_TFACTOR_ALPHA (4 << 0)
-# define RADEON_ALPHA_ARG_A_T0_ALPHA (5 << 0)
-# define RADEON_ALPHA_ARG_A_T1_ALPHA (6 << 0)
-# define RADEON_ALPHA_ARG_A_T2_ALPHA (7 << 0)
-# define RADEON_ALPHA_ARG_A_T3_ALPHA (8 << 0)
-# define RADEON_ALPHA_ARG_B_SHIFT 4
-# define RADEON_ALPHA_ARG_B_MASK (0xf << 4)
-# define RADEON_ALPHA_ARG_B_ZERO (0 << 4)
-# define RADEON_ALPHA_ARG_B_CURRENT_ALPHA (1 << 4)
-# define RADEON_ALPHA_ARG_B_DIFFUSE_ALPHA (2 << 4)
-# define RADEON_ALPHA_ARG_B_SPECULAR_ALPHA (3 << 4)
-# define RADEON_ALPHA_ARG_B_TFACTOR_ALPHA (4 << 4)
-# define RADEON_ALPHA_ARG_B_T0_ALPHA (5 << 4)
-# define RADEON_ALPHA_ARG_B_T1_ALPHA (6 << 4)
-# define RADEON_ALPHA_ARG_B_T2_ALPHA (7 << 4)
-# define RADEON_ALPHA_ARG_B_T3_ALPHA (8 << 4)
-# define RADEON_ALPHA_ARG_C_SHIFT 8
-# define RADEON_ALPHA_ARG_C_MASK (0xf << 8)
-# define RADEON_ALPHA_ARG_C_ZERO (0 << 8)
-# define RADEON_ALPHA_ARG_C_CURRENT_ALPHA (1 << 8)
-# define RADEON_ALPHA_ARG_C_DIFFUSE_ALPHA (2 << 8)
-# define RADEON_ALPHA_ARG_C_SPECULAR_ALPHA (3 << 8)
-# define RADEON_ALPHA_ARG_C_TFACTOR_ALPHA (4 << 8)
-# define RADEON_ALPHA_ARG_C_T0_ALPHA (5 << 8)
-# define RADEON_ALPHA_ARG_C_T1_ALPHA (6 << 8)
-# define RADEON_ALPHA_ARG_C_T2_ALPHA (7 << 8)
-# define RADEON_ALPHA_ARG_C_T3_ALPHA (8 << 8)
-# define RADEON_DOT_ALPHA_DONT_REPLICATE (1 << 9)
-/* COMP_ARG, BLEND_CNTL, CLAMP_TX same as for CBLEND, T*_EQ_TCUR */
-# define RADEON_ALPHA_ARG_MASK 0xf
-
-#define RADEON_REG_PP_TFACTOR_0 0x1c68
-#define RADEON_REG_PP_TFACTOR_1 0x1c80
-#define RADEON_REG_PP_TFACTOR_2 0x1c98
-
-#define R128_REG_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_REG_MISC_3D_STATE_CNTL 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)
-# define R128_ALPHA_COMB_ADD_CLAMP (0 << 12)
-# define R128_ALPHA_COMB_ADD_NO_CLAMP (1 << 12)
-# define R128_ALPHA_COMB_SUB_SRC_DST_CLAMP (2 << 12)
-# define R128_ALPHA_COMB_SUB_SRC_DST_NO_CLAMP (3 << 12)
-# define R128_FOG_VERTEX (0 << 14)
-# define R128_FOG_TABLE (1 << 14)
-# define R128_SBLEND_ZERO (0 << 16)
-# define R128_SBLEND_ONE (1 << 16)
-# define R128_SBLEND_SRCCOLOR (2 << 16)
-# define R128_SBLEND_INVSRCCOLOR (3 << 16)
-# define R128_SBLEND_SRC_ALPHA (4 << 16)
-# define R128_SBLEND_INV_SRC_ALPHA (5 << 16)
-# define R128_SBLEND_DST_ALPHA (6 << 16)
-# define R128_SBLEND_INV_DST_ALPHA (7 << 16)
-# define R128_SBLEND_DSTCOLOR (8 << 16)
-# define R128_SBLEND_INVDSTCOLOR (9 << 16)
-# define R128_SBLEND_SRC_ALPHASAT (10 << 16)
-# define R128_SBLEND_BOTHSRC_ALPHA (11 << 16)
-# define R128_SBLEND_BOTHINV_SRC_ALPHA (12 << 16)
-# define R128_SBLEND_MASK (15 << 16)
-# define R128_DBLEND_ZERO (0 << 20)
-# define R128_DBLEND_ONE (1 << 20)
-# define R128_DBLEND_SRCCOLOR (2 << 20)
-# define R128_DBLEND_INVSRCCOLOR (3 << 20)
-# define R128_DBLEND_SRC_ALPHA (4 << 20)
-# define R128_DBLEND_INV_SRC_ALPHA (5 << 20)
-# define R128_DBLEND_DST_ALPHA (6 << 20)
-# define R128_DBLEND_INV_DST_ALPHA (7 << 20)
-# define R128_DBLEND_DSTCOLOR (8 << 20)
-# define R128_DBLEND_INVDSTCOLOR (9 << 20)
-# define R128_DBLEND_SRC_ALPHASAT (10 << 20)
-# define R128_DBLEND_MASK (15 << 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_REG_PRIM_TEX_CNTL_C 0x1cb0
-#define R128_REG_SEC_TEX_CNTL_C 0x1d00
-# define R128_SEC_SELECT_PRIM_ST (0 << 0)
-# define R128_SEC_SELECT_SEC_ST (1 << 0)
-# 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_TEX_DATATYPE_SHIFT 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_REG_PRIM_TEXTURE_COMBINE_CNTL_C 0x1cb4
-#define R128_REG_SEC_TEXTURE_COMBINE_CNTL_C 0x1d04
-# 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_PREV_COLOR (8 << 10) /* SEC only */
-# define R128_INPUT_FACTOR_PREV_ALPHA (9 << 10) /* SEC only */
-# 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_PREV_ALPHA (4 << 25) /* SEC only */
-# define R128_INP_FACTOR_A_MASK (7 << 25)
-
-#define R128_REG_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_REG_PRIM_TEX_0_OFFSET_C 0x1cbc
-#define R128_REG_PRIM_TEX_1_OFFSET_C 0x1cc0
-#define R128_REG_PRIM_TEX_2_OFFSET_C 0x1cc4
-#define R128_REG_PRIM_TEX_3_OFFSET_C 0x1cc8
-#define R128_REG_PRIM_TEX_4_OFFSET_C 0x1ccc
-#define R128_REG_PRIM_TEX_5_OFFSET_C 0x1cd0
-#define R128_REG_PRIM_TEX_6_OFFSET_C 0x1cd4
-#define R128_REG_PRIM_TEX_7_OFFSET_C 0x1cd8
-#define R128_REG_PRIM_TEX_8_OFFSET_C 0x1cdc
-#define R128_REG_PRIM_TEX_9_OFFSET_C 0x1ce0
-#define R128_REG_PRIM_TEX_10_OFFSET_C 0x1ce4
-#define R128_REG_SEC_TEX_0_OFFSET_C 0x1d08
-#define R128_REG_SEC_TEX_1_OFFSET_C 0x1d0c
-#define R128_REG_SEC_TEX_2_OFFSET_C 0x1d10
-#define R128_REG_SEC_TEX_3_OFFSET_C 0x1d14
-#define R128_REG_SEC_TEX_4_OFFSET_C 0x1d18
-#define R128_REG_SEC_TEX_5_OFFSET_C 0x1d1c
-#define R128_REG_SEC_TEX_6_OFFSET_C 0x1d20
-#define R128_REG_SEC_TEX_7_OFFSET_C 0x1d24
-#define R128_REG_SEC_TEX_8_OFFSET_C 0x1d28
-#define R128_REG_SEC_TEX_9_OFFSET_C 0x1d2c
-#define R128_REG_SEC_TEX_10_OFFSET_C 0x1d30
-# 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_REG_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 RADEON_REG_PP_TEX_SIZE_0 0x1d04 /* NPOT */
-#define RADEON_REG_PP_TEX_SIZE_1 0x1d0c /* NPOT */
-#define RADEON_REG_PP_TEX_SIZE_2 0x1d14 /* NPOT */
-# define RADEON_TEX_USIZE_MASK (0x7ff << 0)
-# define RADEON_TEX_USIZE_SHIFT 0
-# define RADEON_TEX_VSIZE_MASK (0x7ff << 16)
-# define RADEON_TEX_VSIZE_SHIFT 16
-# define RADEON_SIGNED_RGB_MASK (1 << 30)
-# define RADEON_SIGNED_RGB_SHIFT 30
-# define RADEON_SIGNED_ALPHA_MASK (1 << 31)
-# define RADEON_SIGNED_ALPHA_SHIFT 31
-
-#define RADEON_REG_PP_TEX_PITCH_0 0x1d08 /* NPOT */
-#define RADEON_REG_PP_TEX_PITCH_1 0x1d10 /* NPOT */
-#define RADEON_REG_PP_TEX_PITCH_2 0x1d18 /* NPOT */
-/* note: bits 13-5: 32 byte aligned stride of texture map */
-
-#define R128_REG_PLANE_3D_MASK_C 0x1d44
-
-#define RADEON_REG_RB3D_PLANEMASK 0x1d84
-
-#define R200_REG_SE_VAP_CNTL 0x2080
-# define R200_VAP_TCL_ENABLE 0x00000001
-# define R200_VAP_SINGLE_BUF_STATE_ENABLE 0x00000010
-# define R200_VAP_FORCE_W_TO_ONE 0x00010000
-# define R200_VAP_D3D_TEX_DEFAULT 0x00020000
-# define R200_VAP_VF_MAX_VTX_NUM__SHIFT 18
-# define R200_VAP_VF_MAX_VTX_NUM (9 << 18)
-# define R200_VAP_DX_CLIP_SPACE_DEF 0x00400000
-
-#define R200_REG_SE_VTX_FMT_0 0x2088
-# define R200_VTX_XY 0 /* always have xy */
-# define R200_VTX_Z0 (1 << 0)
-# define R200_VTX_W0 (1 << 1)
-# define R200_VTX_WEIGHT_COUNT_SHIFT (2)
-# define R200_VTX_PV_MATRIX_SEL (1 << 5)
-# define R200_VTX_N0 (1 << 6)
-# define R200_VTX_POINT_SIZE (1 << 7)
-# define R200_VTX_DISCRETE_FOG (1 << 8)
-# define R200_VTX_SHININESS_0 (1 << 9)
-# define R200_VTX_SHININESS_1 (1 << 10)
-# define R200_VTX_COLOR_NOT_PRESENT 0
-# define R200_VTX_PK_RGBA 1
-# define R200_VTX_FP_RGB 2
-# define R200_VTX_FP_RGBA 3
-# define R200_VTX_COLOR_MASK 3
-# define R200_VTX_COLOR_0_SHIFT 11
-# define R200_VTX_COLOR_1_SHIFT 13
-# define R200_VTX_COLOR_2_SHIFT 15
-# define R200_VTX_COLOR_3_SHIFT 17
-# define R200_VTX_COLOR_4_SHIFT 19
-# define R200_VTX_COLOR_5_SHIFT 21
-# define R200_VTX_COLOR_6_SHIFT 23
-# define R200_VTX_COLOR_7_SHIFT 25
-# define R200_VTX_XY1 (1 << 28)
-# define R200_VTX_Z1 (1 << 29)
-# define R200_VTX_W1 (1 << 30)
-# define R200_VTX_N1 (1 << 31)
-
-#define R200_REG_SE_VTX_FMT_1 0x208c
-# define R200_VTX_TEX0_COMP_CNT_SHIFT 0
-# define R200_VTX_TEX1_COMP_CNT_SHIFT 3
-# define R200_VTX_TEX2_COMP_CNT_SHIFT 6
-# define R200_VTX_TEX3_COMP_CNT_SHIFT 9
-# define R200_VTX_TEX4_COMP_CNT_SHIFT 12
-# define R200_VTX_TEX5_COMP_CNT_SHIFT 15
-
-#define R200_REG_SE_VTE_CNTL 0x20b0
-# define R200_VPORT_X_SCALE_ENA 0x00000001
-# define R200_VPORT_X_OFFSET_ENA 0x00000002
-# define R200_VPORT_Y_SCALE_ENA 0x00000004
-# define R200_VPORT_Y_OFFSET_ENA 0x00000008
-# define R200_VPORT_Z_SCALE_ENA 0x00000010
-# define R200_VPORT_Z_OFFSET_ENA 0x00000020
-# define R200_VTX_XY_FMT 0x00000100
-# define R200_VTX_Z_FMT 0x00000200
-# define R200_VTX_W0_FMT 0x00000400
-# define R200_VTX_W0_NORMALIZE 0x00000800
-# define R200_VTX_ST_DENORMALIZED 0x00001000
-
-#define R200_REG_SE_VAP_CNTL_STATUS 0x2140
-#define RADEON_REG_SE_CNTL_STATUS 0x2140
-# define RADEON_VC_NO_SWAP (0 << 0)
-# define RADEON_VC_16BIT_SWAP (1 << 0)
-# define RADEON_VC_32BIT_SWAP (2 << 0)
-# define RADEON_VC_HALF_DWORD_SWAP (3 << 0)
-# define RADEON_TCL_BYPASS (1 << 8)
-
-#define R200_REG_SE_VTX_STATE_CNTL 0x2180
-
-#define RADEON_REG_RE_TOP_LEFT 0x26c0
-
-#define R200_REG_RE_AUX_SCISSOR_CNTL 0x26f0
-
-#define R200_REG_PP_TXFILTER_0 0x2c00
-#define R200_REG_PP_TXFILTER_1 0x2c20
-#define R200_REG_PP_TXFILTER_2 0x2c40
-#define R200_REG_PP_TXFILTER_3 0x2c60
-#define R200_REG_PP_TXFILTER_4 0x2c80
-#define R200_REG_PP_TXFILTER_5 0x2ca0
-# define R200_MAG_FILTER_NEAREST (0 << 0)
-# define R200_MAG_FILTER_LINEAR (1 << 0)
-# define R200_MAG_FILTER_MASK (1 << 0)
-# define R200_MIN_FILTER_NEAREST (0 << 1)
-# define R200_MIN_FILTER_LINEAR (1 << 1)
-# define R200_MIN_FILTER_NEAREST_MIP_NEAREST (2 << 1)
-# define R200_MIN_FILTER_NEAREST_MIP_LINEAR (3 << 1)
-# define R200_MIN_FILTER_LINEAR_MIP_NEAREST (6 << 1)
-# define R200_MIN_FILTER_LINEAR_MIP_LINEAR (7 << 1)
-# define R200_MIN_FILTER_ANISO_NEAREST (8 << 1)
-# define R200_MIN_FILTER_ANISO_LINEAR (9 << 1)
-# define R200_MIN_FILTER_ANISO_NEAREST_MIP_NEAREST (10 << 1)
-# define R200_MIN_FILTER_ANISO_NEAREST_MIP_LINEAR (11 << 1)
-# define R200_MIN_FILTER_MASK (15 << 1)
-# define R200_MAX_ANISO_1_TO_1 (0 << 5)
-# define R200_MAX_ANISO_2_TO_1 (1 << 5)
-# define R200_MAX_ANISO_4_TO_1 (2 << 5)
-# define R200_MAX_ANISO_8_TO_1 (3 << 5)
-# define R200_MAX_ANISO_16_TO_1 (4 << 5)
-# define R200_MAX_ANISO_MASK (7 << 5)
-# define R200_MAX_MIP_LEVEL_MASK (0x0f << 16)
-# define R200_MAX_MIP_LEVEL_SHIFT 16
-# define R200_YUV_TO_RGB (1 << 20)
-# define R200_YUV_TEMPERATURE_COOL (0 << 21)
-# define R200_YUV_TEMPERATURE_HOT (1 << 21)
-# define R200_YUV_TEMPERATURE_MASK (1 << 21)
-# define R200_WRAPEN_S (1 << 22)
-# define R200_CLAMP_S_WRAP (0 << 23)
-# define R200_CLAMP_S_MIRROR (1 << 23)
-# define R200_CLAMP_S_CLAMP_LAST (2 << 23)
-# define R200_CLAMP_S_MIRROR_CLAMP_LAST (3 << 23)
-# define R200_CLAMP_S_CLAMP_BORDER (4 << 23)
-# define R200_CLAMP_S_MIRROR_CLAMP_BORDER (5 << 23)
-# define R200_CLAMP_S_CLAMP_GL (6 << 23)
-# define R200_CLAMP_S_MIRROR_CLAMP_GL (7 << 23)
-# define R200_CLAMP_S_MASK (7 << 23)
-# define R200_WRAPEN_T (1 << 26)
-# define R200_CLAMP_T_WRAP (0 << 27)
-# define R200_CLAMP_T_MIRROR (1 << 27)
-# define R200_CLAMP_T_CLAMP_LAST (2 << 27)
-# define R200_CLAMP_T_MIRROR_CLAMP_LAST (3 << 27)
-# define R200_CLAMP_T_CLAMP_BORDER (4 << 27)
-# define R200_CLAMP_T_MIRROR_CLAMP_BORDER (5 << 27)
-# define R200_CLAMP_T_CLAMP_GL (6 << 27)
-# define R200_CLAMP_T_MIRROR_CLAMP_GL (7 << 27)
-# define R200_CLAMP_T_MASK (7 << 27)
-# define R200_KILL_LT_ZERO (1 << 30)
-# define R200_BORDER_MODE_OGL (0 << 31)
-# define R200_BORDER_MODE_D3D (1 << 31)
-
-#define R200_REG_PP_TXFORMAT_0 0x2c04
-#define R200_REG_PP_TXFORMAT_1 0x2c24
-#define R200_REG_PP_TXFORMAT_2 0x2c44
-#define R200_REG_PP_TXFORMAT_3 0x2c64
-#define R200_REG_PP_TXFORMAT_4 0x2c84
-#define R200_REG_PP_TXFORMAT_5 0x2ca4
-# define R200_TXFORMAT_I8 (0 << 0)
-# define R200_TXFORMAT_AI88 (1 << 0)
-# define R200_TXFORMAT_RGB332 (2 << 0)
-# define R200_TXFORMAT_ARGB1555 (3 << 0)
-# define R200_TXFORMAT_RGB565 (4 << 0)
-# define R200_TXFORMAT_ARGB4444 (5 << 0)
-# define R200_TXFORMAT_ARGB8888 (6 << 0)
-# define R200_TXFORMAT_RGBA8888 (7 << 0)
-# define R200_TXFORMAT_Y8 (8 << 0)
-# define R200_TXFORMAT_AVYU4444 (9 << 0)
-# define R200_TXFORMAT_VYUY422 (10 << 0)
-# define R200_TXFORMAT_YVYU422 (11 << 0)
-# define R200_TXFORMAT_DXT1 (12 << 0)
-# define R200_TXFORMAT_DXT23 (14 << 0)
-# define R200_TXFORMAT_DXT45 (15 << 0)
-# define R200_TXFORMAT_FORMAT_MASK (31 << 0)
-# define R200_TXFORMAT_FORMAT_SHIFT 0
-# define R200_TXFORMAT_ALPHA_IN_MAP (1 << 6)
-# define R200_TXFORMAT_NON_POWER2 (1 << 7)
-# define R200_TXFORMAT_WIDTH_MASK (15 << 8)
-# define R200_TXFORMAT_WIDTH_SHIFT 8
-# define R200_TXFORMAT_HEIGHT_MASK (15 << 12)
-# define R200_TXFORMAT_HEIGHT_SHIFT 12
-# define R200_TXFORMAT_F5_WIDTH_MASK (15 << 16) /* cube face 5 */
-# define R200_TXFORMAT_F5_WIDTH_SHIFT 16
-# define R200_TXFORMAT_F5_HEIGHT_MASK (15 << 20)
-# define R200_TXFORMAT_F5_HEIGHT_SHIFT 20
-# define R200_TXFORMAT_ST_ROUTE_STQ0 (0 << 24)
-# define R200_TXFORMAT_ST_ROUTE_STQ1 (1 << 24)
-# define R200_TXFORMAT_ST_ROUTE_STQ2 (2 << 24)
-# define R200_TXFORMAT_ST_ROUTE_STQ3 (3 << 24)
-# define R200_TXFORMAT_ST_ROUTE_STQ4 (4 << 24)
-# define R200_TXFORMAT_ST_ROUTE_STQ5 (5 << 24)
-# define R200_TXFORMAT_ST_ROUTE_MASK (7 << 24)
-# define R200_TXFORMAT_ST_ROUTE_SHIFT 24
-# define R200_TXFORMAT_ALPHA_MASK_ENABLE (1 << 28)
-# define R200_TXFORMAT_CHROMA_KEY_ENABLE (1 << 29)
-# define R200_TXFORMAT_CUBIC_MAP_ENABLE (1 << 30)
-
-#define R200_REG_PP_TXFORMAT_X_0 0x2c08
-#define R200_REG_PP_TXFORMAT_X_1 0x2c28
-#define R200_REG_PP_TXFORMAT_X_2 0x2c48
-#define R200_REG_PP_TXFORMAT_X_3 0x2c68
-#define R200_REG_PP_TXFORMAT_X_4 0x2c88
-#define R200_REG_PP_TXFORMAT_X_5 0x2ca8
-# define R200_DEPTH_LOG2_MASK (0xf << 0)
-# define R200_DEPTH_LOG2_SHIFT 0
-# define R200_VOLUME_FILTER_SHIFT 4
-# define R200_VOLUME_FILTER_MASK (1 << 4)
-# define R200_VOLUME_FILTER_NEAREST (0 << 4)
-# define R200_VOLUME_FILTER_LINEAR (1 << 4)
-# define R200_WRAPEN_Q (1 << 8)
-# define R200_CLAMP_Q_WRAP (0 << 9)
-# define R200_CLAMP_Q_MIRROR (1 << 9)
-# define R200_CLAMP_Q_CLAMP_LAST (2 << 9)
-# define R200_CLAMP_Q_MIRROR_CLAMP_LAST (3 << 9)
-# define R200_CLAMP_Q_CLAMP_BORDER (4 << 9)
-# define R200_CLAMP_Q_MIRROR_CLAMP_BORDER (5 << 9)
-# define R200_CLAMP_Q_CLAMP_GL (6 << 9)
-# define R200_CLAMP_Q_MIRROR_CLAMP_GL (7 << 9)
-# define R200_CLAMP_Q_MASK (7 << 9)
-# define R200_MIN_MIP_LEVEL_MASK (0xff << 12)
-# define R200_MIN_MIP_LEVEL_SHIFT 12
-# define R200_TEXCOORD_NONPROJ (0 << 16)
-# define R200_TEXCOORD_CUBIC_ENV (1 << 16)
-# define R200_TEXCOORD_VOLUME (2 << 16)
-# define R200_TEXCOORD_PROJ (3 << 16)
-# define R200_TEXCOORD_DEPTH (4 << 16)
-# define R200_TEXCOORD_1D_PROJ (5 << 16)
-# define R200_TEXCOORD_1D (6 << 16)
-# define R200_TEXCOORD_ZERO (7 << 16)
-# define R200_TEXCOORD_MASK (7 << 16)
-# define R200_LOD_BIAS_MASK (0xfff80000)
-# define R200_LOD_BIAS_SHIFT 19
-
-#define R200_REG_PP_TXSIZE_0 0x2c0c /* NPOT only */
-#define R200_REG_PP_TXSIZE_1 0x2c2c /* NPOT only */
-#define R200_REG_PP_TXSIZE_2 0x2c4c /* NPOT only */
-#define R200_REG_PP_TXSIZE_3 0x2c6c /* NPOT only */
-#define R200_REG_PP_TXSIZE_4 0x2c8c /* NPOT only */
-#define R200_REG_PP_TXSIZE_5 0x2cac /* NPOT only */
-
-#define R200_REG_PP_TXPITCH_0 0x2c10 /* NPOT only */
-#define R200_REG_PP_TXPITCH_1 0x2c30 /* NPOT only */
-#define R200_REG_PP_TXPITCH_2 0x2c50 /* NPOT only */
-#define R200_REG_PP_TXPITCH_3 0x2c70 /* NPOT only */
-#define R200_REG_PP_TXPITCH_4 0x2c90 /* NPOT only */
-#define R200_REG_PP_TXPITCH_5 0x2cb0 /* NPOT only */
-
-#define R200_REG_PP_BORDER_COLOR_0 0x2c14
-#define R200_REG_PP_TXMULTI_CTL_0 0x2c1c
-
-#define R200_REG_PP_CNTL_X 0x2cc4
-
-#define R200_PP_TXOFFSET_0 0x2d00
-#define R200_PP_TXOFFSET_1 0x2d18
-#define R200_PP_TXOFFSET_2 0x2d30
-#define R200_PP_TXOFFSET_3 0x2d48
-#define R200_PP_TXOFFSET_4 0x2d60
-#define R200_PP_TXOFFSET_5 0x2d78
-# define R200_TXO_ENDIAN_NO_SWAP (0 << 0)
-# define R200_TXO_ENDIAN_BYTE_SWAP (1 << 0)
-# define R200_TXO_ENDIAN_WORD_SWAP (2 << 0)
-# define R200_TXO_ENDIAN_HALFDW_SWAP (3 << 0)
-# define R200_TXO_OFFSET_MASK 0xffffffe0
-# define R200_TXO_OFFSET_SHIFT 5
-
-#define R200_PP_CUBIC_OFFSET_F1_0 0x2d04
-#define R200_PP_CUBIC_OFFSET_F2_0 0x2d08
-#define R200_PP_CUBIC_OFFSET_F3_0 0x2d0c
-#define R200_PP_CUBIC_OFFSET_F4_0 0x2d10
-#define R200_PP_CUBIC_OFFSET_F5_0 0x2d14
-#define R200_PP_CUBIC_OFFSET_F1_1 0x2d1c
-#define R200_PP_CUBIC_OFFSET_F2_1 0x2d20
-#define R200_PP_CUBIC_OFFSET_F3_1 0x2d24
-#define R200_PP_CUBIC_OFFSET_F4_1 0x2d28
-#define R200_PP_CUBIC_OFFSET_F5_1 0x2d2c
-#define R200_PP_CUBIC_OFFSET_F1_2 0x2d34
-#define R200_PP_CUBIC_OFFSET_F2_2 0x2d38
-#define R200_PP_CUBIC_OFFSET_F3_2 0x2d3c
-#define R200_PP_CUBIC_OFFSET_F4_2 0x2d40
-#define R200_PP_CUBIC_OFFSET_F5_2 0x2d44
-#define R200_PP_CUBIC_OFFSET_F1_3 0x2d4c
-#define R200_PP_CUBIC_OFFSET_F2_3 0x2d50
-#define R200_PP_CUBIC_OFFSET_F3_3 0x2d54
-#define R200_PP_CUBIC_OFFSET_F4_3 0x2d58
-#define R200_PP_CUBIC_OFFSET_F5_3 0x2d5c
-#define R200_PP_CUBIC_OFFSET_F1_4 0x2d64
-#define R200_PP_CUBIC_OFFSET_F2_4 0x2d68
-#define R200_PP_CUBIC_OFFSET_F3_4 0x2d6c
-#define R200_PP_CUBIC_OFFSET_F4_4 0x2d70
-#define R200_PP_CUBIC_OFFSET_F5_4 0x2d74
-#define R200_PP_CUBIC_OFFSET_F1_5 0x2d7c
-#define R200_PP_CUBIC_OFFSET_F2_5 0x2d80
-#define R200_PP_CUBIC_OFFSET_F3_5 0x2d84
-#define R200_PP_CUBIC_OFFSET_F4_5 0x2d88
-#define R200_PP_CUBIC_OFFSET_F5_5 0x2d8c
-
-/* AKA PIXSHADER_I0_C0 */
-#define R200_REG_PP_TXCBLEND_0 0x2f00
-# define R200_TXC_ARG_A_ZERO (0)
-# define R200_TXC_ARG_A_CURRENT_COLOR (2)
-# define R200_TXC_ARG_A_CURRENT_ALPHA (3)
-# define R200_TXC_ARG_A_DIFFUSE_COLOR (4)
-# define R200_TXC_ARG_A_DIFFUSE_ALPHA (5)
-# define R200_TXC_ARG_A_SPECULAR_COLOR (6)
-# define R200_TXC_ARG_A_SPECULAR_ALPHA (7)
-# define R200_TXC_ARG_A_TFACTOR_COLOR (8)
-# define R200_TXC_ARG_A_TFACTOR_ALPHA (9)
-# define R200_TXC_ARG_A_R0_COLOR (10)
-# define R200_TXC_ARG_A_R0_ALPHA (11)
-# define R200_TXC_ARG_A_R1_COLOR (12)
-# define R200_TXC_ARG_A_R1_ALPHA (13)
-# define R200_TXC_ARG_A_R2_COLOR (14)
-# define R200_TXC_ARG_A_R2_ALPHA (15)
-# define R200_TXC_ARG_A_R3_COLOR (16)
-# define R200_TXC_ARG_A_R3_ALPHA (17)
-# define R200_TXC_ARG_A_R4_COLOR (18)
-# define R200_TXC_ARG_A_R4_ALPHA (19)
-# define R200_TXC_ARG_A_R5_COLOR (20)
-# define R200_TXC_ARG_A_R5_ALPHA (21)
-# define R200_TXC_ARG_A_TFACTOR1_COLOR (26)
-# define R200_TXC_ARG_A_TFACTOR1_ALPHA (27)
-# define R200_TXC_ARG_A_MASK (31 << 0)
-# define R200_TXC_ARG_A_SHIFT 0
-# define R200_TXC_ARG_B_ZERO (0 << 5)
-# define R200_TXC_ARG_B_CURRENT_COLOR (2 << 5)
-# define R200_TXC_ARG_B_CURRENT_ALPHA (3 << 5)
-# define R200_TXC_ARG_B_DIFFUSE_COLOR (4 << 5)
-# define R200_TXC_ARG_B_DIFFUSE_ALPHA (5 << 5)
-# define R200_TXC_ARG_B_SPECULAR_COLOR (6 << 5)
-# define R200_TXC_ARG_B_SPECULAR_ALPHA (7 << 5)
-# define R200_TXC_ARG_B_TFACTOR_COLOR (8 << 5)
-# define R200_TXC_ARG_B_TFACTOR_ALPHA (9 << 5)
-# define R200_TXC_ARG_B_R0_COLOR (10 << 5)
-# define R200_TXC_ARG_B_R0_ALPHA (11 << 5)
-# define R200_TXC_ARG_B_R1_COLOR (12 << 5)
-# define R200_TXC_ARG_B_R1_ALPHA (13 << 5)
-# define R200_TXC_ARG_B_R2_COLOR (14 << 5)
-# define R200_TXC_ARG_B_R2_ALPHA (15 << 5)
-# define R200_TXC_ARG_B_R3_COLOR (16 << 5)
-# define R200_TXC_ARG_B_R3_ALPHA (17 << 5)
-# define R200_TXC_ARG_B_R4_COLOR (18 << 5)
-# define R200_TXC_ARG_B_R4_ALPHA (19 << 5)
-# define R200_TXC_ARG_B_R5_COLOR (20 << 5)
-# define R200_TXC_ARG_B_R5_ALPHA (21 << 5)
-# define R200_TXC_ARG_B_TFACTOR1_COLOR (26 << 5)
-# define R200_TXC_ARG_B_TFACTOR1_ALPHA (27 << 5)
-# define R200_TXC_ARG_B_MASK (31 << 5)
-# define R200_TXC_ARG_B_SHIFT 5
-# define R200_TXC_ARG_C_ZERO (0 << 10)
-# define R200_TXC_ARG_C_CURRENT_COLOR (2 << 10)
-# define R200_TXC_ARG_C_CURRENT_ALPHA (3 << 10)
-# define R200_TXC_ARG_C_DIFFUSE_COLOR (4 << 10)
-# define R200_TXC_ARG_C_DIFFUSE_ALPHA (5 << 10)
-# define R200_TXC_ARG_C_SPECULAR_COLOR (6 << 10)
-# define R200_TXC_ARG_C_SPECULAR_ALPHA (7 << 10)
-# define R200_TXC_ARG_C_TFACTOR_COLOR (8 << 10)
-# define R200_TXC_ARG_C_TFACTOR_ALPHA (9 << 10)
-# define R200_TXC_ARG_C_R0_COLOR (10 << 10)
-# define R200_TXC_ARG_C_R0_ALPHA (11 << 10)
-# define R200_TXC_ARG_C_R1_COLOR (12 << 10)
-# define R200_TXC_ARG_C_R1_ALPHA (13 << 10)
-# define R200_TXC_ARG_C_R2_COLOR (14 << 10)
-# define R200_TXC_ARG_C_R2_ALPHA (15 << 10)
-# define R200_TXC_ARG_C_R3_COLOR (16 << 10)
-# define R200_TXC_ARG_C_R3_ALPHA (17 << 10)
-# define R200_TXC_ARG_C_R4_COLOR (18 << 10)
-# define R200_TXC_ARG_C_R4_ALPHA (19 << 10)
-# define R200_TXC_ARG_C_R5_COLOR (20 << 10)
-# define R200_TXC_ARG_C_R5_ALPHA (21 << 10)
-# define R200_TXC_ARG_C_TFACTOR1_COLOR (26 << 10)
-# define R200_TXC_ARG_C_TFACTOR1_ALPHA (27 << 10)
-# define R200_TXC_ARG_C_MASK (31 << 10)
-# define R200_TXC_ARG_C_SHIFT 10
-# define R200_TXC_COMP_ARG_A (1 << 16)
-# define R200_TXC_COMP_ARG_A_SHIFT (16)
-# define R200_TXC_BIAS_ARG_A (1 << 17)
-# define R200_TXC_SCALE_ARG_A (1 << 18)
-# define R200_TXC_NEG_ARG_A (1 << 19)
-# define R200_TXC_COMP_ARG_B (1 << 20)
-# define R200_TXC_COMP_ARG_B_SHIFT (20)
-# define R200_TXC_BIAS_ARG_B (1 << 21)
-# define R200_TXC_SCALE_ARG_B (1 << 22)
-# define R200_TXC_NEG_ARG_B (1 << 23)
-# define R200_TXC_COMP_ARG_C (1 << 24)
-# define R200_TXC_COMP_ARG_C_SHIFT (24)
-# define R200_TXC_BIAS_ARG_C (1 << 25)
-# define R200_TXC_SCALE_ARG_C (1 << 26)
-# define R200_TXC_NEG_ARG_C (1 << 27)
-# define R200_TXC_OP_MADD (0 << 28)
-# define R200_TXC_OP_CND0 (2 << 28)
-# define R200_TXC_OP_LERP (3 << 28)
-# define R200_TXC_OP_DOT3 (4 << 28)
-# define R200_TXC_OP_DOT4 (5 << 28)
-# define R200_TXC_OP_CONDITIONAL (6 << 28)
-# define R200_TXC_OP_DOT2_ADD (7 << 28)
-# define R200_TXC_OP_MASK (7 << 28)
-
-/* AKA PIXSHADER_I0_C1 */
-#define R200_REG_PP_TXCBLEND2_0 0x2f04
-# define R200_TXC_TFACTOR_SEL_SHIFT 0
-# define R200_TXC_TFACTOR_SEL_MASK 0x7
-# define R200_TXC_TFACTOR1_SEL_SHIFT 4
-# define R200_TXC_TFACTOR1_SEL_MASK (0x7 << 4)
-# define R200_TXC_SCALE_SHIFT 8
-# define R200_TXC_SCALE_MASK (7 << 8)
-# define R200_TXC_SCALE_1X (0 << 8)
-# define R200_TXC_SCALE_2X (1 << 8)
-# define R200_TXC_SCALE_4X (2 << 8)
-# define R200_TXC_SCALE_8X (3 << 8)
-# define R200_TXC_SCALE_INV2 (5 << 8)
-# define R200_TXC_SCALE_INV4 (6 << 8)
-# define R200_TXC_SCALE_INV8 (7 << 8)
-# define R200_TXC_CLAMP_SHIFT 12
-# define R200_TXC_CLAMP_MASK (3 << 12)
-# define R200_TXC_CLAMP_WRAP (0 << 12)
-# define R200_TXC_CLAMP_0_1 (1 << 12)
-# define R200_TXC_CLAMP_8_8 (2 << 12)
-# define R200_TXC_OUTPUT_REG_MASK (7 << 16)
-# define R200_TXC_OUTPUT_REG_NONE (0 << 16)
-# define R200_TXC_OUTPUT_REG_R0 (1 << 16)
-# define R200_TXC_OUTPUT_REG_R1 (2 << 16)
-# define R200_TXC_OUTPUT_REG_R2 (3 << 16)
-# define R200_TXC_OUTPUT_REG_R3 (4 << 16)
-# define R200_TXC_OUTPUT_REG_R4 (5 << 16)
-# define R200_TXC_OUTPUT_REG_R5 (6 << 16)
-# define R200_TXC_OUTPUT_MASK_MASK (7 << 20)
-# define R200_TXC_OUTPUT_MASK_RGB (0 << 20)
-# define R200_TXC_OUTPUT_MASK_RG (1 << 20)
-# define R200_TXC_OUTPUT_MASK_RB (2 << 20)
-# define R200_TXC_OUTPUT_MASK_R (3 << 20)
-# define R200_TXC_OUTPUT_MASK_GB (4 << 20)
-# define R200_TXC_OUTPUT_MASK_G (5 << 20)
-# define R200_TXC_OUTPUT_MASK_B (6 << 20)
-# define R200_TXC_OUTPUT_MASK_NONE (7 << 20)
-# define R200_TXC_REPL_NORMAL 0
-# define R200_TXC_REPL_RED 1
-# define R200_TXC_REPL_GREEN 2
-# define R200_TXC_REPL_BLUE 3
-# define R200_TXC_REPL_ARG_A_SHIFT 26
-# define R200_TXC_REPL_ARG_A_MASK (3 << 26)
-# define R200_TXC_REPL_ARG_B_SHIFT 28
-# define R200_TXC_REPL_ARG_B_MASK (3 << 28)
-# define R200_TXC_REPL_ARG_C_SHIFT 30
-# define R200_TXC_REPL_ARG_C_MASK (3 << 30)
-
-/* AKA PIXSHADER_I0_A0 */
-#define R200_REG_PP_TXABLEND_0 0x2f08
-# define R200_TXA_ARG_A_ZERO (0)
-# define R200_TXA_ARG_A_CURRENT_ALPHA (2) /* guess */
-# define R200_TXA_ARG_A_CURRENT_BLUE (3) /* guess */
-# define R200_TXA_ARG_A_DIFFUSE_ALPHA (4)
-# define R200_TXA_ARG_A_DIFFUSE_BLUE (5)
-# define R200_TXA_ARG_A_SPECULAR_ALPHA (6)
-# define R200_TXA_ARG_A_SPECULAR_BLUE (7)
-# define R200_TXA_ARG_A_TFACTOR_ALPHA (8)
-# define R200_TXA_ARG_A_TFACTOR_BLUE (9)
-# define R200_TXA_ARG_A_R0_ALPHA (10)
-# define R200_TXA_ARG_A_R0_BLUE (11)
-# define R200_TXA_ARG_A_R1_ALPHA (12)
-# define R200_TXA_ARG_A_R1_BLUE (13)
-# define R200_TXA_ARG_A_R2_ALPHA (14)
-# define R200_TXA_ARG_A_R2_BLUE (15)
-# define R200_TXA_ARG_A_R3_ALPHA (16)
-# define R200_TXA_ARG_A_R3_BLUE (17)
-# define R200_TXA_ARG_A_R4_ALPHA (18)
-# define R200_TXA_ARG_A_R4_BLUE (19)
-# define R200_TXA_ARG_A_R5_ALPHA (20)
-# define R200_TXA_ARG_A_R5_BLUE (21)
-# define R200_TXA_ARG_A_TFACTOR1_ALPHA (26)
-# define R200_TXA_ARG_A_TFACTOR1_BLUE (27)
-# define R200_TXA_ARG_A_MASK (31 << 0)
-# define R200_TXA_ARG_A_SHIFT 0
-# define R200_TXA_ARG_B_ZERO (0 << 5)
-# define R200_TXA_ARG_B_CURRENT_ALPHA (2 << 5) /* guess */
-# define R200_TXA_ARG_B_CURRENT_BLUE (3 << 5) /* guess */
-# define R200_TXA_ARG_B_DIFFUSE_ALPHA (4 << 5)
-# define R200_TXA_ARG_B_DIFFUSE_BLUE (5 << 5)
-# define R200_TXA_ARG_B_SPECULAR_ALPHA (6 << 5)
-# define R200_TXA_ARG_B_SPECULAR_BLUE (7 << 5)
-# define R200_TXA_ARG_B_TFACTOR_ALPHA (8 << 5)
-# define R200_TXA_ARG_B_TFACTOR_BLUE (9 << 5)
-# define R200_TXA_ARG_B_R0_ALPHA (10 << 5)
-# define R200_TXA_ARG_B_R0_BLUE (11 << 5)
-# define R200_TXA_ARG_B_R1_ALPHA (12 << 5)
-# define R200_TXA_ARG_B_R1_BLUE (13 << 5)
-# define R200_TXA_ARG_B_R2_ALPHA (14 << 5)
-# define R200_TXA_ARG_B_R2_BLUE (15 << 5)
-# define R200_TXA_ARG_B_R3_ALPHA (16 << 5)
-# define R200_TXA_ARG_B_R3_BLUE (17 << 5)
-# define R200_TXA_ARG_B_R4_ALPHA (18 << 5)
-# define R200_TXA_ARG_B_R4_BLUE (19 << 5)
-# define R200_TXA_ARG_B_R5_ALPHA (20 << 5)
-# define R200_TXA_ARG_B_R5_BLUE (21 << 5)
-# define R200_TXA_ARG_B_TFACTOR1_ALPHA (26 << 5)
-# define R200_TXA_ARG_B_TFACTOR1_BLUE (27 << 5)
-# define R200_TXA_ARG_B_MASK (31 << 5)
-# define R200_TXA_ARG_B_SHIFT 5
-# define R200_TXA_ARG_C_ZERO (0 << 10)
-# define R200_TXA_ARG_C_CURRENT_ALPHA (2 << 10) /* guess */
-# define R200_TXA_ARG_C_CURRENT_BLUE (3 << 10) /* guess */
-# define R200_TXA_ARG_C_DIFFUSE_ALPHA (4 << 10)
-# define R200_TXA_ARG_C_DIFFUSE_BLUE (5 << 10)
-# define R200_TXA_ARG_C_SPECULAR_ALPHA (6 << 10)
-# define R200_TXA_ARG_C_SPECULAR_BLUE (7 << 10)
-# define R200_TXA_ARG_C_TFACTOR_ALPHA (8 << 10)
-# define R200_TXA_ARG_C_TFACTOR_BLUE (9 << 10)
-# define R200_TXA_ARG_C_R0_ALPHA (10 << 10)
-# define R200_TXA_ARG_C_R0_BLUE (11 << 10)
-# define R200_TXA_ARG_C_R1_ALPHA (12 << 10)
-# define R200_TXA_ARG_C_R1_BLUE (13 << 10)
-# define R200_TXA_ARG_C_R2_ALPHA (14 << 10)
-# define R200_TXA_ARG_C_R2_BLUE (15 << 10)
-# define R200_TXA_ARG_C_R3_ALPHA (16 << 10)
-# define R200_TXA_ARG_C_R3_BLUE (17 << 10)
-# define R200_TXA_ARG_C_R4_ALPHA (18 << 10)
-# define R200_TXA_ARG_C_R4_BLUE (19 << 10)
-# define R200_TXA_ARG_C_R5_ALPHA (20 << 10)
-# define R200_TXA_ARG_C_R5_BLUE (21 << 10)
-# define R200_TXA_ARG_C_TFACTOR1_ALPHA (26 << 10)
-# define R200_TXA_ARG_C_TFACTOR1_BLUE (27 << 10)
-# define R200_TXA_ARG_C_MASK (31 << 10)
-# define R200_TXA_ARG_C_SHIFT 10
-# define R200_TXA_COMP_ARG_A (1 << 16)
-# define R200_TXA_COMP_ARG_A_SHIFT (16)
-# define R200_TXA_BIAS_ARG_A (1 << 17)
-# define R200_TXA_SCALE_ARG_A (1 << 18)
-# define R200_TXA_NEG_ARG_A (1 << 19)
-# define R200_TXA_COMP_ARG_B (1 << 20)
-# define R200_TXA_COMP_ARG_B_SHIFT (20)
-# define R200_TXA_BIAS_ARG_B (1 << 21)
-# define R200_TXA_SCALE_ARG_B (1 << 22)
-# define R200_TXA_NEG_ARG_B (1 << 23)
-# define R200_TXA_COMP_ARG_C (1 << 24)
-# define R200_TXA_COMP_ARG_C_SHIFT (24)
-# define R200_TXA_BIAS_ARG_C (1 << 25)
-# define R200_TXA_SCALE_ARG_C (1 << 26)
-# define R200_TXA_NEG_ARG_C (1 << 27)
-# define R200_TXA_OP_MADD (0 << 28)
-# define R200_TXA_OP_CND0 (2 << 28)
-# define R200_TXA_OP_LERP (3 << 28)
-# define R200_TXA_OP_CONDITIONAL (6 << 28)
-# define R200_TXA_OP_MASK (7 << 28)
-
-/* AKA PIXSHADER_I0_A1 */
-#define R200_REG_PP_TXABLEND2_0 0x2f0c
-# define R200_TXA_TFACTOR_SEL_SHIFT 0
-# define R200_TXA_TFACTOR_SEL_MASK 0x7
-# define R200_TXA_TFACTOR1_SEL_SHIFT 4
-# define R200_TXA_TFACTOR1_SEL_MASK (0x7 << 4)
-# define R200_TXA_SCALE_SHIFT 8
-# define R200_TXA_SCALE_MASK (7 << 8)
-# define R200_TXA_SCALE_1X (0 << 8)
-# define R200_TXA_SCALE_2X (1 << 8)
-# define R200_TXA_SCALE_4X (2 << 8)
-# define R200_TXA_SCALE_8X (3 << 8)
-# define R200_TXA_SCALE_INV2 (5 << 8)
-# define R200_TXA_SCALE_INV4 (6 << 8)
-# define R200_TXA_SCALE_INV8 (7 << 8)
-# define R200_TXA_CLAMP_SHIFT 12
-# define R200_TXA_CLAMP_MASK (3 << 12)
-# define R200_TXA_CLAMP_WRAP (0 << 12)
-# define R200_TXA_CLAMP_0_1 (1 << 12)
-# define R200_TXA_CLAMP_8_8 (2 << 12)
-# define R200_TXA_OUTPUT_REG_MASK (7 << 16)
-# define R200_TXA_OUTPUT_REG_NONE (0 << 16)
-# define R200_TXA_OUTPUT_REG_R0 (1 << 16)
-# define R200_TXA_OUTPUT_REG_R1 (2 << 16)
-# define R200_TXA_OUTPUT_REG_R2 (3 << 16)
-# define R200_TXA_OUTPUT_REG_R3 (4 << 16)
-# define R200_TXA_OUTPUT_REG_R4 (5 << 16)
-# define R200_TXA_OUTPUT_REG_R5 (6 << 16)
-# define R200_TXA_DOT_ALPHA (1 << 20)
-# define R200_TXA_REPL_NORMAL 0
-# define R200_TXA_REPL_RED 1
-# define R200_TXA_REPL_GREEN 2
-# define R200_TXA_REPL_ARG_A_SHIFT 26
-# define R200_TXA_REPL_ARG_A_MASK (3 << 26)
-# define R200_TXA_REPL_ARG_B_SHIFT 28
-# define R200_TXA_REPL_ARG_B_MASK (3 << 28)
-# define R200_TXA_REPL_ARG_C_SHIFT 30
-# define R200_TXA_REPL_ARG_C_MASK (3 << 30)
-
-#define RADEON_REG_RB2D_DSTCACHE_MODE 0x3428
-/* This is a read-only mirror of RADEON_REG_RB3D_DSTCACHE_MODE */
-
-#define RADEON_REG_RB2D_DSTCACHE_CTLSTAT 0x342C
-/* This is a read-only mirror of RADEON_REG_RB3D_DSTCACHE_CTLSTAT */
-
-#define RADEON_REG_RB3D_DSTCACHE_MODE 0x3258
-# define RADEON_RB3D_DC_CACHE_ENABLE (0)
-# define RADEON_RB3D_DC_2D_CACHE_DISABLE (1)
-# define RADEON_RB3D_DC_3D_CACHE_DISABLE (2)
-# define RADEON_RB3D_DC_CACHE_DISABLE (3)
-# define RADEON_RB3D_DC_2D_CACHE_LINESIZE_128 (1 << 2)
-# define RADEON_RB3D_DC_3D_CACHE_LINESIZE_128 (2 << 2)
-# define RADEON_RB3D_DC_2D_CACHE_AUTOFLUSH (1 << 8)
-# define RADEON_RB3D_DC_3D_CACHE_AUTOFLUSH (2 << 8)
-# define R200_RB3D_DC_2D_CACHE_AUTOFREE (1 << 10)
-# define R200_RB3D_DC_3D_CACHE_AUTOFREE (2 << 10)
-# define RADEON_RB3D_DC_FORCE_RMW (1 << 16)
-# define RADEON_RB3D_DC_DISABLE_RI_FILL (1 << 24)
-# define RADEON_RB3D_DC_DISABLE_RI_READ (1 << 25)
-# define RADEON_RB3D_DC_DISABLE_MASK_CHK (1 << 26)
-
-#define RADEON_REG_RB3D_DSTCACHE_CTLSTAT 0x325C
-# define RADEON_RB3D_DC_FLUSH (3 << 0)
-# define RADEON_RB3D_DC_FREE (3 << 2)
-# define RADEON_RB3D_DC_FLUSH_ALL 0xf
-# define RADEON_RB3D_DC_BUSY (1 << 31)
-
-/* PLL register defines */
-#define R128_REG_MCLK_CNTL 0x000f
-# define R128_FORCE_GCP (1 << 16)
-# define R128_FORCE_PIPE3D_CP (1 << 17)
-# define R128_FORCE_RCP (1 << 18)
-#define RADEON_REG_MCLK_CNTL 0x0012
-# define RADEON_FORCEON_MCLKA (1 << 16)
-# define RADEON_FORCEON_MCLKB (1 << 17)
-# define RADEON_FORCEON_YCLKA (1 << 18)
-# define RADEON_FORCEON_YCLKB (1 << 19)
-# define RADEON_FORCEON_MC (1 << 20)
-# define RADEON_FORCEON_AIC (1 << 21)
-
-/* CCE packet defines */
-
-#define ATI_CCE_PACKETTYPE_MASK 0xc0000000
-#define ATI_CCE_PACKET0 0x00000000
-#define ATI_CCE_PACKET0_COUNT_MASK 0x3fff0000
-#define ATI_CCE_PACKET0_ONE_REG_WR 0x00008000
-#define ATI_CCE_PACKET0_REG_MASK 0x000007ff
-#define ATI_CCE_PACKET1 0x40000000
-#define ATI_CCE_PACKET1_REG_1 0x000007ff
-#define ATI_CCE_PACKET1_REG_2 0x003ff800
-#define ATI_CCE_PACKET1_REG_2_SHIFT 10
-#define ATI_CCE_PACKET2 0x80000000
-#define ATI_CCE_PACKET3 0xc0000000
-#define ATI_CCE_PACKET3_COUNT_MASK 0x3fff0000
-#define ATI_CCE_PACKET3_IT_OPCODE_MASK 0x0000ff00
-#define ATI_CCE_PACKET3_NOP 0xc0001000
-#define ATI_CCE_PACKET3_NEXT_CHAR 0xc0001900
-#define ATI_CCE_PACKET3_PLY_NEXTSCAN 0xc0001d00
-#define ATI_CCE_PACKET3_SET_SCISSORS 0xc0001e00
-#define R128_CCE_PACKET3_SET_MODE_24BPP 0xc0001f00
-#define R128_CCE_PACKET3_3D_SAVE_CONTEXT 0xc0002000
-#define R128_CCE_PACKET3_3D_PLAY_CONTEXT 0xc0002100
-#define ATI_CCE_PACKET3_3D_RNDR_GEN_INDX_PRIM 0xc0002300
-#define RADEON_CP_PACKET3_LOAD_MICROCODE 0xc0002400
-#define ATI_CCE_PACKET3_3D_RNDR_GEN_PRIM 0xc0002500
-#define RADEON_CP_PACKET3_WAIT_FOR_IDLE 0xc0002600
-#define RADEON_CP_PACKET3_3D_DRAW_VBUF 0xc0002800
-#define RADEON_CP_PACKET3_3D_DRAW_IMMD 0xc0002900
-#define RADEON_CP_PACKET3_3D_DRAW_INDX 0xc0002a00
-#define ATI_CCE_PACKET3_LOAD_PALETTE 0xc0002c00
-#define R128_CCE_PACKET3_PURGE 0xc0002d00
-#define R128_CCE_PACKET3_NEXT_VERTEX_BUNDLE 0xc0002e00
-#define RADEON_CP_PACKET3_3D_LOAD_VBPNTR 0xc0002f00
-#define RADEON_CP_PACKET3_3D_CLEAR_ZMASK 0xc0003200
-#define R200_CP_PACKET3_3D_DRAW_IMMD_2 0xc0003500
-#define ATI_CCE_PACKET3_CNTL_PAINT 0xc0009100
-#define ATI_CCE_PACKET3_CNTL_BITBLT 0xc0009200
-#define ATI_CCE_PACKET3_CNTL_SMALLTEXT 0xc0009300
-#define ATI_CCE_PACKET3_HOSTDATA_BLT 0xc0009400
-#define ATI_CCE_PACKET3_CNTL_POLYLINE 0xc0009500
-#define R128_CCE_PACKET3_SCALE 0xc0009600
-#define R128_CCE_PACKET3_TRANS_SCALE 0xc0009700
-#define ATI_CCE_PACKET3_CNTL_POLYSCANLINES 0xc0009800
-#define ATI_CCE_PACKET3_PAINT_MULTI 0xc0009a00
-#define ATI_CCE_PACKET3_BITBLT_MULTI 0xc0009b00
-#define ATI_CCE_PACKET3_CNTL_TRANS_BITBLT 0xc0009c00
-
-#define RADEON_CP_VC_FRMT_XY 0x00000000
-#define RADEON_CP_VC_FRMT_W0 0x00000001
-#define RADEON_CP_VC_FRMT_FPCOLOR 0x00000002
-#define RADEON_CP_VC_FRMT_FPALPHA 0x00000004
-#define RADEON_CP_VC_FRMT_PKCOLOR 0x00000008
-#define RADEON_CP_VC_FRMT_FPSPEC 0x00000010
-#define RADEON_CP_VC_FRMT_FPFOG 0x00000020
-#define RADEON_CP_VC_FRMT_PKSPEC 0x00000040
-#define RADEON_CP_VC_FRMT_ST0 0x00000080
-#define RADEON_CP_VC_FRMT_ST1 0x00000100
-#define RADEON_CP_VC_FRMT_Q1 0x00000200
-#define RADEON_CP_VC_FRMT_ST2 0x00000400
-#define RADEON_CP_VC_FRMT_Q2 0x00000800
-#define RADEON_CP_VC_FRMT_ST3 0x00001000
-#define RADEON_CP_VC_FRMT_Q3 0x00002000
-#define RADEON_CP_VC_FRMT_Q0 0x00004000
-#define RADEON_CP_VC_FRMT_BLND_WEIGHT_CNT_MASK 0x00038000
-#define RADEON_CP_VC_FRMT_N0 0x00040000
-#define RADEON_CP_VC_FRMT_XY1 0x08000000
-#define RADEON_CP_VC_FRMT_Z1 0x10000000
-#define RADEON_CP_VC_FRMT_W1 0x20000000
-#define RADEON_CP_VC_FRMT_N1 0x40000000
-#define RADEON_CP_VC_FRMT_Z 0x80000000
-
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_NONE 0x00000000
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_POINT 0x00000001
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_LINE 0x00000002
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_LINE_STRIP 0x00000003
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_LIST 0x00000004
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_FAN 0x00000005
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_STRIP 0x00000006
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_TYPE_2 0x00000007
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_RECT_LIST 0x00000008
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_3VRT_POINT_LIST 0x00000009
-#define RADEON_CP_VC_CNTL_PRIM_TYPE_3VRT_LINE_LIST 0x0000000a
-#define RADEON_CP_VC_CNTL_PRIM_WALK_IND 0x00000010
-#define RADEON_CP_VC_CNTL_PRIM_WALK_LIST 0x00000020
-#define RADEON_CP_VC_CNTL_PRIM_WALK_RING 0x00000030
-#define RADEON_CP_VC_CNTL_COLOR_ORDER_BGRA 0x00000000
-#define RADEON_CP_VC_CNTL_COLOR_ORDER_RGBA 0x00000040
-#define RADEON_CP_VC_CNTL_MAOS_ENABLE 0x00000080
-#define RADEON_CP_VC_CNTL_VTX_FMT_NON_RADEON_MODE 0x00000000
-#define RADEON_CP_VC_CNTL_VTX_FMT_RADEON_MODE 0x00000100
-#define RADEON_CP_VC_CNTL_TCL_DISABLE 0x00000000
-#define RADEON_CP_VC_CNTL_TCL_ENABLE 0x00000200
-#define RADEON_CP_VC_CNTL_NUM_SHIFT 16
-
-#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
-
-#define R128_DATATYPE_VQ 0
-#define R128_DATATYPE_CI4 1
-#define R128_DATATYPE_CI8 2
-#define R128_DATATYPE_ARGB1555 3
-#define R128_DATATYPE_RGB565 4
-#define R128_DATATYPE_RGB888 5
-#define R128_DATATYPE_ARGB8888 6
-#define R128_DATATYPE_RGB332 7
-#define R128_DATATYPE_Y8 8
-#define R128_DATATYPE_RGB8 9
-#define R128_DATATYPE_CI16 10
-#define R128_DATATYPE_VYUY_422 11
-#define R128_DATATYPE_YVYU_422 12
-#define R128_DATATYPE_AYUV_444 14
-#define R128_DATATYPE_ARGB4444 15
-
-#define R128_AGP_OFFSET 0x02000000
-
-#define R128_WATERMARK_L 16
-#define R128_WATERMARK_M 8
-#define R128_WATERMARK_N 8
-#define R128_WATERMARK_K 128
diff --git a/hw/kdrive/ati/ati_sarea.h b/hw/kdrive/ati/ati_sarea.h
deleted file mode 100644
index 2f04c7be0..000000000
--- a/hw/kdrive/ati/ati_sarea.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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 _ATI_SAREA_H_
-#define _ATI_SAREA_H_
-
-/* 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 ATI_CARD_HEAP 0
-#define ATI_GART_HEAP 1
-#define ATI_NR_TEX_HEAPS 2
-#define ATI_NR_TEX_REGIONS 64
-#define ATI_LOG_TEX_GRANULARITY 16
-
-#include "r128_sarea.h"
-#include "radeon_sarea.h"
-
-#endif /* _ATI_SAREA_H_ */
diff --git a/hw/kdrive/ati/ati_stub.c b/hw/kdrive/ati/ati_stub.c
deleted file mode 100644
index f881b7f7b..000000000
--- a/hw/kdrive/ati/ati_stub.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "ati.h"
-#include "klinux.h"
-
-extern struct pci_id_entry ati_pci_ids[];
-
-void
-InitCard(char *name)
-{
- struct pci_id_entry *id;
- KdCardAttr attr;
-
- for (id = ati_pci_ids; id->name != NULL; id++) {
- int j = 0;
- while (LinuxFindPci(id->vendor, id->device, j++, &attr))
- KdCardInfoAdd(&ATIFuncs, &attr, 0);
- }
-}
-
-void
-InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput(pScreenInfo, argc, argv);
-}
-
-void
-InitInput(int argc, char **argv)
-{
- KdOsAddInputDrivers();
- KdInitInput();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
-#ifdef KDRIVEVESA
- vesaUseMsg();
-#endif
-}
-
-int
-ddxProcessArgument(int argc, char **argv, int i)
-{
- int ret;
-
-#ifdef KDRIVEVESA
- if (!(ret = vesaProcessArgument (argc, argv, i)))
-#endif
- ret = KdProcessArgument(argc, argv, i);
-
- return ret;
-}
diff --git a/hw/kdrive/ati/ati_video.c b/hw/kdrive/ati/ati_video.c
deleted file mode 100644
index ca0ab464a..000000000
--- a/hw/kdrive/ati/ati_video.c
+++ /dev/null
@@ -1,988 +0,0 @@
-/*
- * Copyright © 2004 Keith Packard
- * Copyright © 2005 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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.
- *
- * Based on mach64video.c by Keith Packard.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "ati.h"
-#include "ati_dma.h"
-#include "ati_draw.h"
-#include "ati_reg.h"
-#include "kaa.h"
-
-#include <X11/extensions/Xv.h>
-#include "fourcc.h"
-
-#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
-
-static Atom xvBrightness, xvSaturation;
-
-extern CARD8 ATIBltRop[16];
-
-#define IMAGE_MAX_WIDTH 2048
-#define IMAGE_MAX_HEIGHT 2048
-
-static void
-ATIStopVideo(KdScreenInfo *screen, pointer data, Bool exit)
-{
- ScreenPtr pScreen = screen->pScreen;
- ATIPortPrivPtr pPortPriv = (ATIPortPrivPtr)data;
-
- REGION_EMPTY(screen->pScreen, &pPortPriv->clip);
-
- if (pPortPriv->off_screen) {
- KdOffscreenFree (pScreen, pPortPriv->off_screen);
- pPortPriv->off_screen = 0;
- }
-}
-
-static int
-ATISetPortAttribute(KdScreenInfo *screen, Atom attribute, int value,
- pointer data)
-{
- return BadMatch;
-}
-
-static int
-ATIGetPortAttribute(KdScreenInfo *screen, Atom attribute, int *value,
- pointer data)
-{
- return BadMatch;
-}
-
-static void
-ATIQueryBestSize(KdScreenInfo *screen, Bool motion, short vid_w, short vid_h,
- short drw_w, short drw_h, unsigned int *p_w, unsigned int *p_h,
- pointer data)
-{
- *p_w = drw_w;
- *p_h = drw_h;
-}
-
-/* ATIClipVideo -
-
- Takes the dst box in standard X BoxRec form (top and left
- edges inclusive, bottom and right exclusive). The new dst
- box is returned. The source boundaries are given (x1, y1
- inclusive, x2, y2 exclusive) and returned are the new source
- boundaries in 16.16 fixed point.
-*/
-
-static void
-ATIClipVideo(BoxPtr dst, INT32 *x1, INT32 *x2, INT32 *y1, INT32 *y2,
- BoxPtr extents, INT32 width, INT32 height)
-{
- INT32 vscale, hscale, delta;
- int diff;
-
- hscale = ((*x2 - *x1) << 16) / (dst->x2 - dst->x1);
- vscale = ((*y2 - *y1) << 16) / (dst->y2 - dst->y1);
-
- *x1 <<= 16; *x2 <<= 16;
- *y1 <<= 16; *y2 <<= 16;
-
- diff = extents->x1 - dst->x1;
- if (diff > 0) {
- dst->x1 = extents->x1;
- *x1 += diff * hscale;
- }
- diff = dst->x2 - extents->x2;
- if (diff > 0) {
- dst->x2 = extents->x2;
- *x2 -= diff * hscale;
- }
- diff = extents->y1 - dst->y1;
- if (diff > 0) {
- dst->y1 = extents->y1;
- *y1 += diff * vscale;
- }
- diff = dst->y2 - extents->y2;
- if (diff > 0) {
- dst->y2 = extents->y2;
- *y2 -= diff * vscale;
- }
-
- if (*x1 < 0) {
- diff = (- *x1 + hscale - 1)/ hscale;
- dst->x1 += diff;
- *x1 += diff * hscale;
- }
- delta = *x2 - (width << 16);
- if (delta > 0) {
- diff = (delta + hscale - 1)/ hscale;
- dst->x2 -= diff;
- *x2 -= diff * hscale;
- }
- if (*y1 < 0) {
- diff = (- *y1 + vscale - 1)/ vscale;
- dst->y1 += diff;
- *y1 += diff * vscale;
- }
- delta = *y2 - (height << 16);
- if (delta > 0) {
- diff = (delta + vscale - 1)/ vscale;
- dst->y2 -= diff;
- *y2 -= diff * vscale;
- }
-}
-
-static void
-R128DisplayVideo(KdScreenInfo *screen, ATIPortPrivPtr pPortPriv)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- CARD32 dstDatatype, srcDatatype;
- CARD32 dst_offset, dst_pitch;
- int dstxoff, dstyoff;
- PixmapPtr pPixmap = pPortPriv->pPixmap;
- int bpp = pPixmap->drawable.bitsPerPixel;
- RING_LOCALS;
-
- BoxPtr pBox = REGION_RECTS(&pPortPriv->clip);
- int nBox = REGION_NUM_RECTS(&pPortPriv->clip);
-
- if (pPortPriv->id == FOURCC_UYVY)
- srcDatatype = R128_DATATYPE_YVYU_422;
- else
- srcDatatype = R128_DATATYPE_VYUY_422;
-
- switch (bpp)
- {
- case 16:
- if (pPixmap->drawable.depth == 15)
- dstDatatype = R128_DATATYPE_ARGB1555;
- else
- dstDatatype = R128_DATATYPE_RGB565;
- break;
- case 32:
- dstDatatype = R128_DATATYPE_ARGB8888;
- break;
- default:
- return;
- }
-
- dst_offset = ((CARD8 *)pPixmap->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
- dst_pitch = pPixmap->devKind;
-#ifdef COMPOSITE
- dstxoff = -pPixmap->screen_x + pPixmap->drawable.x;
- dstyoff = -pPixmap->screen_y + pPixmap->drawable.y;
-#else
- dstxoff = 0;
- dstyoff = 0;
-#endif
-
- BEGIN_DMA(18);
- OUT_REG(ATI_REG_DST_PITCH_OFFSET,
- ((dst_pitch / bpp) << 21) | (dst_offset >> 5));
- OUT_REG(ATI_REG_DP_GUI_MASTER_CNTL,
- ATI_GMC_DST_PITCH_OFFSET_CNTL |
- ATI_GMC_BRUSH_NONE |
- (dstDatatype << 8) |
- ATI_GMC_SRC_DATATYPE_COLOR |
- (ATIBltRop[GXcopy] << 16) |
- R128_GMC_3D_FCN_EN |
- ATI_GMC_CLR_CMP_CNTL_DIS |
- R128_GMC_AUX_CLIP_DIS);
- OUT_REG(ATI_REG_DP_CNTL,
- ATI_DST_X_LEFT_TO_RIGHT | ATI_DST_Y_TOP_TO_BOTTOM );
- OUT_REG(R128_REG_SCALE_3D_CNTL,
- R128_SCALE_3D_SCALE |
- R128_SBLEND_ONE |
- R128_DBLEND_ZERO);
- OUT_REG(R128_REG_TEX_CNTL_C, R128_TEX_CACHE_FLUSH);
- OUT_REG(R128_REG_SCALE_3D_DATATYPE, srcDatatype);
-
- OUT_RING(DMA_PACKET0(R128_REG_SCALE_PITCH, 5));
- OUT_RING_REG(R128_REG_SCALE_PITCH, pPortPriv->src_pitch / 16);
- OUT_RING_REG(R128_REG_SCALE_X_INC,
- (pPortPriv->src_w << 16) / pPortPriv->dst_w);
- OUT_RING_REG(R128_REG_SCALE_Y_INC,
- (pPortPriv->src_h << 16) / pPortPriv->dst_h);
- OUT_RING_REG(R128_REG_SCALE_HACC, 0x0);
- OUT_RING_REG(R128_REG_SCALE_VACC, 0x0);
-
- END_DMA();
-
- while (nBox--) {
- int srcX, srcY, dstX, dstY, srcw, srch, dstw, dsth;
-
- dstX = pBox->x1 + dstxoff;
- dstY = pBox->y1 + dstyoff;
- dstw = pBox->x2 - pBox->x1;
- dsth = pBox->y2 - pBox->y1;
- srcX = (pBox->x1 - pPortPriv->dst_x1) *
- pPortPriv->src_w / pPortPriv->dst_w;
- srcY = (pBox->y1 - pPortPriv->dst_y1) *
- pPortPriv->src_h / pPortPriv->dst_h;
- srcw = pPortPriv->src_w - srcX;
- srch = pPortPriv->src_h - srcY;
-
- BEGIN_DMA(6);
- OUT_RING(DMA_PACKET0(R128_REG_SCALE_SRC_HEIGHT_WIDTH, 2));
- OUT_RING_REG(R128_REG_SCALE_SRC_HEIGHT_WIDTH,
- (srch << 16) | srcw);
- OUT_RING_REG(R128_REG_SCALE_OFFSET_0, pPortPriv->src_offset +
- srcY * pPortPriv->src_pitch + srcX * 2);
-
- OUT_RING(DMA_PACKET0(R128_REG_SCALE_DST_X_Y, 2));
- OUT_RING_REG(R128_REG_SCALE_DST_X_Y, (dstX << 16) | dstY);
- OUT_RING_REG(R128_REG_SCALE_DST_HEIGHT_WIDTH,
- (dsth << 16) | dstw);
- END_DMA();
- pBox++;
- }
-#ifdef DAMAGEEXT
- /* XXX: Shouldn't this be in kxv.c instead? */
- DamageDamageRegion(pPortPriv->pDraw, &pPortPriv->clip);
-#endif
- kaaMarkSync(pScreen);
-}
-
-union intfloat {
- float f;
- CARD32 i;
-};
-
-struct blend_vertex {
- union intfloat x, y;
- union intfloat s0, t0;
-};
-
-#define VTX_DWORD_COUNT 4
-
-#define VTX_OUT(vtx) \
-do { \
- OUT_RING(vtx.x.i); \
- OUT_RING(vtx.y.i); \
- OUT_RING(vtx.s0.i); \
- OUT_RING(vtx.t0.i); \
-} while (0)
-
-static void
-RadeonDisplayVideo(KdScreenInfo *screen, ATIPortPrivPtr pPortPriv)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- struct blend_vertex vtx[4];
- PixmapPtr pPixmap = pPortPriv->pPixmap;
- CARD32 txformat;
- CARD32 dst_offset, dst_pitch, dst_format;
- int dstxoff, dstyoff, pixel_shift;
- RING_LOCALS;
-
- BoxPtr pBox = REGION_RECTS(&pPortPriv->clip);
- int nBox = REGION_NUM_RECTS(&pPortPriv->clip);
-
- switch (pPixmap->drawable.bitsPerPixel) {
- case 16:
- if (pPixmap->drawable.depth == 15)
- dst_format = RADEON_COLOR_FORMAT_ARGB1555;
- else
- dst_format = RADEON_COLOR_FORMAT_RGB565;
- pixel_shift = 1;
- break;
- case 32:
- dst_format = RADEON_COLOR_FORMAT_ARGB8888;
- pixel_shift = 2;
- break;
- default:
- return;
- }
-
- dst_offset = ((CARD8 *)pPixmap->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
- dst_pitch = pPixmap->devKind;
-
-#ifdef COMPOSITE
- dstxoff = -pPixmap->screen_x + pPixmap->drawable.x;
- dstyoff = -pPixmap->screen_y + pPixmap->drawable.y;
-#else
- dstxoff = 0;
- dstyoff = 0;
-#endif
-
- /* Same for R100/R200 */
- if (pPortPriv->id == FOURCC_UYVY)
- txformat = RADEON_TXFORMAT_YVYU422;
- else
- txformat = RADEON_TXFORMAT_VYUY422;
-
- txformat |= RADEON_TXFORMAT_NON_POWER2;
-
- RadeonSwitchTo3D(atis);
-
- BEGIN_DMA(8);
-
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_CNTL, 3));
- OUT_RING_REG(RADEON_REG_PP_CNTL,
- RADEON_TEX_0_ENABLE | RADEON_TEX_BLEND_0_ENABLE);
- OUT_RING_REG(RADEON_REG_RB3D_CNTL,
- dst_format | RADEON_ALPHA_BLEND_ENABLE);
- OUT_RING_REG(RADEON_REG_RB3D_COLOROFFSET, dst_offset);
-
- OUT_REG(RADEON_REG_RB3D_COLORPITCH, dst_pitch >> pixel_shift);
-
- OUT_REG(RADEON_REG_RB3D_BLENDCNTL,
- RADEON_SBLEND_GL_ONE | RADEON_DBLEND_GL_ZERO);
-
- END_DMA();
-
- if (atic->is_r200) {
- BEGIN_DMA(17);
-
- OUT_REG(R200_REG_SE_VTX_FMT_0, R200_VTX_XY);
- OUT_REG(R200_REG_SE_VTX_FMT_1,
- (2 << R200_VTX_TEX0_COMP_CNT_SHIFT));
-
- OUT_RING(DMA_PACKET0(R200_REG_PP_TXFILTER_0, 5));
- OUT_RING_REG(R200_REG_PP_TXFILTER_0,
- R200_MAG_FILTER_LINEAR |
- R200_MIN_FILTER_LINEAR |
- R200_YUV_TO_RGB);
- OUT_RING_REG(R200_REG_PP_TXFORMAT_0, txformat);
- OUT_RING_REG(R200_REG_PP_TXFORMAT_X_0, 0);
- OUT_RING_REG(R200_REG_PP_TXSIZE_0,
- (pPixmap->drawable.width - 1) |
- ((pPixmap->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT));
- OUT_RING_REG(R200_REG_PP_TXPITCH_0, pPortPriv->src_pitch - 32);
-
- OUT_REG(R200_PP_TXOFFSET_0, pPortPriv->src_offset);
-
- OUT_RING(DMA_PACKET0(R200_REG_PP_TXCBLEND_0, 4));
- OUT_RING_REG(R200_REG_PP_TXCBLEND_0,
- R200_TXC_ARG_A_ZERO |
- R200_TXC_ARG_B_ZERO |
- R200_TXC_ARG_C_R0_COLOR |
- R200_TXC_OP_MADD);
- OUT_RING_REG(R200_REG_PP_TXCBLEND2_0,
- R200_TXC_CLAMP_0_1 | R200_TXC_OUTPUT_REG_R0);
- OUT_RING_REG(R200_REG_PP_TXABLEND_0,
- R200_TXA_ARG_A_ZERO |
- R200_TXA_ARG_B_ZERO |
- R200_TXA_ARG_C_R0_ALPHA |
- R200_TXA_OP_MADD);
- OUT_RING_REG(R200_REG_PP_TXABLEND2_0,
- R200_TXA_CLAMP_0_1 | R200_TXA_OUTPUT_REG_R0);
-
- END_DMA();
- } else {
-// BEGIN_DMA(11);
- BEGIN_DMA(9);
-
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_TXFILTER_0, 5));
- OUT_RING_REG(RADEON_REG_PP_TXFILTER_0, RADEON_MAG_FILTER_LINEAR |
- RADEON_MIN_FILTER_LINEAR |
- RADEON_YUV_TO_RGB);
- OUT_RING_REG(RADEON_REG_PP_TXFORMAT_0, txformat);
- OUT_RING_REG(RADEON_REG_PP_TXOFFSET_0, pPortPriv->src_offset);
- OUT_RING_REG(RADEON_REG_PP_TXCBLEND_0,
- RADEON_COLOR_ARG_A_ZERO |
- RADEON_COLOR_ARG_B_ZERO |
- RADEON_COLOR_ARG_C_T0_COLOR |
- RADEON_BLEND_CTL_ADD |
- RADEON_CLAMP_TX);
- OUT_RING_REG(RADEON_REG_PP_TXABLEND_0,
- RADEON_ALPHA_ARG_A_ZERO |
- RADEON_ALPHA_ARG_B_ZERO |
- RADEON_ALPHA_ARG_C_T0_ALPHA |
- RADEON_BLEND_CTL_ADD |
- RADEON_CLAMP_TX);
-
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_TEX_SIZE_0, 2));
- OUT_RING_REG(RADEON_REG_PP_TEX_SIZE_0,
- (pPixmap->drawable.width - 1) |
- ((pPixmap->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT));
- OUT_RING_REG(RADEON_REG_PP_TEX_PITCH_0,
- pPortPriv->src_pitch - 32);
-
-// OUT_RING_REG(ATI_REG_WAIT_UNTIL, ATI_WAIT_CRTC_VLINE);
-
- END_DMA();
- }
-
- while (nBox--) {
- float srcX, srcY, dstX, dstY, srcw, srch, dstw, dsth;
-
- dstX = pBox->x1 + dstxoff;
- dstY = pBox->y1 + dstyoff;
- dstw = pBox->x2 - pBox->x1;
- dsth = pBox->y2 - pBox->y1;
- srcX = (pBox->x1 - pPortPriv->dst_x1) *
- pPortPriv->src_w / pPortPriv->dst_w;
- srcY = (pBox->y1 - pPortPriv->dst_y1) *
- pPortPriv->src_h / pPortPriv->dst_h;
- srcw = pPortPriv->src_w * (dstw / pPortPriv->dst_w);
- srch = pPortPriv->src_h * (dsth / pPortPriv->dst_h);
-
- /*
- * rectangle:
- *
- * +---------2
- * | |
- * | |
- * 0---------1
- */
-
- vtx[0].x.f = dstX;
- vtx[0].y.f = dstY + dsth;
- vtx[0].s0.f = srcX;
- vtx[0].t0.f = srcY + srch;
-
- vtx[1].x.f = dstX + dstw;
- vtx[1].y.f = dstY + dsth;
- vtx[1].s0.f = srcX + srcw;
- vtx[1].t0.f = srcY + srch;
-
- vtx[2].x.f = dstX + dstw;
- vtx[2].y.f = dstY;
- vtx[2].s0.f = srcX + srcw;
- vtx[2].t0.f = srcY;
-
- if (atic->is_r100) {
- BEGIN_DMA(3 * VTX_DWORD_COUNT + 3);
- OUT_RING(DMA_PACKET3(RADEON_CP_PACKET3_3D_DRAW_IMMD,
- 3 * VTX_DWORD_COUNT + 2));
- OUT_RING(RADEON_CP_VC_FRMT_XY |
- RADEON_CP_VC_FRMT_ST0);
- OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_RECT_LIST |
- RADEON_CP_VC_CNTL_PRIM_WALK_RING |
- RADEON_CP_VC_CNTL_MAOS_ENABLE |
- RADEON_CP_VC_CNTL_VTX_FMT_RADEON_MODE |
- (3 << RADEON_CP_VC_CNTL_NUM_SHIFT));
- } else {
- BEGIN_DMA(3 * VTX_DWORD_COUNT + 2);
- OUT_RING(DMA_PACKET3(R200_CP_PACKET3_3D_DRAW_IMMD_2,
- 3 * VTX_DWORD_COUNT + 1));
- OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_RECT_LIST |
- RADEON_CP_VC_CNTL_PRIM_WALK_RING |
- (3 << RADEON_CP_VC_CNTL_NUM_SHIFT));
- }
-
- VTX_OUT(vtx[0]);
- VTX_OUT(vtx[1]);
- VTX_OUT(vtx[2]);
- END_DMA();
-
- pBox++;
- }
-#ifdef DAMAGEEXT
- /* XXX: Shouldn't this be in kxv.c instead? */
- DamageDamageRegion(pPortPriv->pDraw, &pPortPriv->clip);
-#endif
- kaaMarkSync(pScreen);
-}
-
-static void
-ATIVideoSave(ScreenPtr pScreen, KdOffscreenArea *area)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATIPortPrivPtr pPortPriv = atis->pAdaptor->pPortPrivates[0].ptr;
-
- if (pPortPriv->off_screen == area)
- pPortPriv->off_screen = 0;
-}
-
-static int
-ATIPutImage(KdScreenInfo *screen, DrawablePtr pDraw,
- 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)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIScreenInfo(pScreenPriv);
- ATIPortPrivPtr pPortPriv = (ATIPortPrivPtr)data;
- char *mmio = atic->reg_base;
- INT32 x1, x2, y1, y2;
- int randr = RR_Rotate_0 /* XXX */;
- int srcPitch, srcPitch2, dstPitch;
- int top, left, npixels, nlines, size;
- BoxRec dstBox;
- int dst_width = width, dst_height = height;
- int rot_x1, rot_y1, rot_x2, rot_y2;
- int dst_x1, dst_y1, dst_x2, dst_y2;
- int rot_src_w, rot_src_h, rot_drw_w, rot_drw_h;
-
- /* Clip */
- x1 = src_x;
- x2 = src_x + src_w;
- y1 = src_y;
- y2 = src_y + src_h;
-
- dstBox.x1 = drw_x;
- dstBox.x2 = drw_x + drw_w;
- dstBox.y1 = drw_y;
- dstBox.y2 = drw_y + drw_h;
-
- ATIClipVideo(&dstBox, &x1, &x2, &y1, &y2,
- REGION_EXTENTS(pScreen, clipBoxes), width, height);
-
- src_w = (x2 - x1) >> 16;
- src_h = (y2 - y1) >> 16;
- drw_w = dstBox.x2 - dstBox.x1;
- drw_h = dstBox.y2 - dstBox.y1;
-
- if ((x1 >= x2) || (y1 >= y2))
- return Success;
-
- if (mmio == NULL)
- return BadAlloc;
-
- if (randr & (RR_Rotate_0|RR_Rotate_180)) {
- dst_width = width;
- dst_height = height;
- rot_src_w = src_w;
- rot_src_h = src_h;
- rot_drw_w = drw_w;
- rot_drw_h = drw_h;
- } else {
- dst_width = height;
- dst_height = width;
- rot_src_w = src_h;
- rot_src_h = src_w;
- rot_drw_w = drw_h;
- rot_drw_h = drw_w;
- }
-
- switch (randr & RR_Rotate_All) {
- case RR_Rotate_0:
- default:
- dst_x1 = dstBox.x1;
- dst_y1 = dstBox.y1;
- dst_x2 = dstBox.x2;
- dst_y2 = dstBox.y2;
- rot_x1 = x1;
- rot_y1 = y1;
- rot_x2 = x2;
- rot_y2 = y2;
- break;
- case RR_Rotate_90:
- dst_x1 = dstBox.y1;
- dst_y1 = screen->height - dstBox.x2;
- dst_x2 = dstBox.y2;
- dst_y2 = screen->height - dstBox.x1;
- rot_x1 = y1;
- rot_y1 = (src_w << 16) - x2;
- rot_x2 = y2;
- rot_y2 = (src_w << 16) - x1;
- break;
- case RR_Rotate_180:
- dst_x1 = screen->width - dstBox.x2;
- dst_y1 = screen->height - dstBox.y2;
- dst_x2 = screen->width - dstBox.x1;
- dst_y2 = screen->height - dstBox.y1;
- rot_x1 = (src_w << 16) - x2;
- rot_y1 = (src_h << 16) - y2;
- rot_x2 = (src_w << 16) - x1;
- rot_y2 = (src_h << 16) - y1;
- break;
- case RR_Rotate_270:
- dst_x1 = screen->width - dstBox.y2;
- dst_y1 = dstBox.x1;
- dst_x2 = screen->width - dstBox.y1;
- dst_y2 = dstBox.x2;
- rot_x1 = (src_h << 16) - y2;
- rot_y1 = x1;
- rot_x2 = (src_h << 16) - y1;
- rot_y2 = x2;
- break;
- }
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- dstPitch = ((dst_width << 1) + 15) & ~15;
- srcPitch = (width + 3) & ~3;
- srcPitch2 = ((width >> 1) + 3) & ~3;
- size = dstPitch * dst_height;
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- dstPitch = ((dst_width << 1) + 15) & ~15;
- srcPitch = (width << 1);
- srcPitch2 = 0;
- size = dstPitch * dst_height;
- break;
- }
-
- if (pPortPriv->off_screen != NULL && size != pPortPriv->size) {
- KdOffscreenFree(screen->pScreen, pPortPriv->off_screen);
- pPortPriv->off_screen = 0;
- }
-
- if (pPortPriv->off_screen == NULL) {
- pPortPriv->off_screen = KdOffscreenAlloc(screen->pScreen,
- size * 2, 64, TRUE, ATIVideoSave, pPortPriv);
- if (pPortPriv->off_screen == NULL)
- return BadAlloc;
- }
-
-
- if (pDraw->type == DRAWABLE_WINDOW)
- pPortPriv->pPixmap =
- (*pScreen->GetWindowPixmap)((WindowPtr)pDraw);
- else
- pPortPriv->pPixmap = (PixmapPtr)pDraw;
-
- /* Migrate the pixmap to offscreen if necessary. */
- if (!kaaPixmapIsOffscreen(pPortPriv->pPixmap))
- kaaMoveInPixmap(pPortPriv->pPixmap);
-
- if (!kaaPixmapIsOffscreen(pPortPriv->pPixmap)) {
- return BadAlloc;
- }
-
- pPortPriv->src_offset = pPortPriv->off_screen->offset;
- pPortPriv->src_addr = (CARD8 *)(pScreenPriv->screen->memory_base +
- pPortPriv->src_offset);
- pPortPriv->src_pitch = dstPitch;
- pPortPriv->size = size;
- pPortPriv->pDraw = pDraw;
-
- /* copy data */
- top = rot_y1 >> 16;
- left = (rot_x1 >> 16) & ~1;
- npixels = ((((rot_x2 + 0xffff) >> 16) + 1) & ~1) - left;
-
- /* Since we're probably overwriting the area that might still be used
- * for the last PutImage request, wait for idle.
- */
- ATIWaitIdle(atis);
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- top &= ~1;
- nlines = ((((rot_y2 + 0xffff) >> 16) + 1) & ~1) - top;
- KdXVCopyPlanarData(screen, buf, pPortPriv->src_addr, randr,
- srcPitch, srcPitch2, dstPitch, rot_src_w, rot_src_h,
- height, top, left, nlines, npixels, id);
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- nlines = ((rot_y2 + 0xffff) >> 16) - top;
- KdXVCopyPackedData(screen, buf, pPortPriv->src_addr, randr,
- srcPitch, dstPitch, rot_src_w, rot_src_h, top, left,
- nlines, npixels);
- break;
- }
-
- /* update cliplist */
- if (!REGION_EQUAL(screen->pScreen, &pPortPriv->clip, clipBoxes)) {
- REGION_COPY(screen->pScreen, &pPortPriv->clip, clipBoxes);
- }
-
- pPortPriv->id = id;
- pPortPriv->src_x1 = rot_x1;
- pPortPriv->src_y1 = rot_y1;
- pPortPriv->src_x2 = rot_x2;
- pPortPriv->src_y2 = rot_y2;
- pPortPriv->src_w = rot_src_w;
- pPortPriv->src_h = rot_src_h;
- pPortPriv->dst_x1 = dst_x1;
- pPortPriv->dst_y1 = dst_y1;
- pPortPriv->dst_x2 = dst_x2;
- pPortPriv->dst_y2 = dst_y2;
- pPortPriv->dst_w = rot_drw_w;
- pPortPriv->dst_h = rot_drw_h;
-
- if (atic->is_radeon)
- RadeonDisplayVideo(screen, pPortPriv);
- else
- R128DisplayVideo(screen, pPortPriv);
-
- return Success;
-}
-
-static int
-ATIReputImage(KdScreenInfo *screen, DrawablePtr pDraw, short drw_x, short drw_y,
- RegionPtr clipBoxes, pointer data)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- ATICardInfo(pScreenPriv);
- ATIPortPrivPtr pPortPriv = (ATIPortPrivPtr)data;
- BoxPtr pOldExtents = REGION_EXTENTS(screen->pScreen, &pPortPriv->clip);
- BoxPtr pNewExtents = REGION_EXTENTS(screen->pScreen, clipBoxes);
-
- if (pOldExtents->x1 != pNewExtents->x1 ||
- pOldExtents->x2 != pNewExtents->x2 ||
- pOldExtents->y1 != pNewExtents->y1 ||
- pOldExtents->y2 != pNewExtents->y2)
- return BadMatch;
-
- if (pDraw->type == DRAWABLE_WINDOW)
- pPortPriv->pPixmap =
- (*pScreen->GetWindowPixmap)((WindowPtr)pDraw);
- else
- pPortPriv->pPixmap = (PixmapPtr)pDraw;
-
- if (!kaaPixmapIsOffscreen(pPortPriv->pPixmap))
- kaaMoveInPixmap(pPortPriv->pPixmap);
-
- if (!kaaPixmapIsOffscreen(pPortPriv->pPixmap)) {
- ErrorF("err\n");
- return BadAlloc;
- }
-
-
- /* update cliplist */
- if (!REGION_EQUAL(screen->pScreen, &pPortPriv->clip, clipBoxes))
- REGION_COPY(screen->pScreen, &pPortPriv->clip, clipBoxes);
-
- /* XXX: What do the drw_x and drw_y here mean for us? */
-
- if (atic->is_radeon)
- RadeonDisplayVideo(screen, pPortPriv);
- else
- R128DisplayVideo(screen, pPortPriv);
-
- return Success;
-}
-
-static int
-ATIQueryImageAttributes(KdScreenInfo *screen, int id, unsigned short *w,
- unsigned short *h, int *pitches, int *offsets)
-{
- int size, tmp;
-
- if (*w > IMAGE_MAX_WIDTH)
- *w = IMAGE_MAX_WIDTH;
- if (*h > IMAGE_MAX_HEIGHT)
- *h = IMAGE_MAX_HEIGHT;
-
- *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;
-}
-
-
-/* client libraries expect an encoding */
-static KdVideoEncodingRec DummyEncoding[1] =
-{
- {
- 0,
- "XV_IMAGE",
- IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT,
- {1, 1}
- }
-};
-
-#define NUM_FORMATS 3
-
-static KdVideoFormatRec Formats[NUM_FORMATS] =
-{
- {15, TrueColor}, {16, TrueColor}, {24, TrueColor}
-};
-
-#define NUM_ATTRIBUTES 0
-
-static KdAttributeRec Attributes[NUM_ATTRIBUTES] =
-{
-};
-
-#define NUM_IMAGES 4
-
-static KdImageRec Images[NUM_IMAGES] =
-{
- XVIMAGE_YUY2,
- XVIMAGE_YV12,
- XVIMAGE_I420,
- XVIMAGE_UYVY
-};
-
-static KdVideoAdaptorPtr
-ATISetupImageVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- KdVideoAdaptorPtr adapt;
- ATIPortPrivPtr pPortPriv;
- int i;
-
- atis->num_texture_ports = 16;
-
- adapt = xcalloc(1, sizeof(KdVideoAdaptorRec) + atis->num_texture_ports *
- (sizeof(ATIPortPrivRec) + sizeof(DevUnion)));
- if (adapt == NULL)
- return NULL;
-
- adapt->type = XvWindowMask | XvInputMask | XvImageMask;
- adapt->flags = VIDEO_CLIP_TO_VIEWPORT;
- adapt->name = "ATI Texture Video";
- adapt->nEncodings = 1;
- adapt->pEncodings = DummyEncoding;
- adapt->nFormats = NUM_FORMATS;
- adapt->pFormats = Formats;
- adapt->nPorts = atis->num_texture_ports;
- adapt->pPortPrivates = (DevUnion*)(&adapt[1]);
-
- pPortPriv =
- (ATIPortPrivPtr)(&adapt->pPortPrivates[atis->num_texture_ports]);
-
- for (i = 0; i < atis->num_texture_ports; i++)
- adapt->pPortPrivates[i].ptr = &pPortPriv[i];
-
- adapt->nAttributes = NUM_ATTRIBUTES;
- adapt->pAttributes = Attributes;
- adapt->pImages = Images;
- adapt->nImages = NUM_IMAGES;
- adapt->PutVideo = NULL;
- adapt->PutStill = NULL;
- adapt->GetVideo = NULL;
- adapt->GetStill = NULL;
- adapt->StopVideo = ATIStopVideo;
- adapt->SetPortAttribute = ATISetPortAttribute;
- adapt->GetPortAttribute = ATIGetPortAttribute;
- adapt->QueryBestSize = ATIQueryBestSize;
- adapt->PutImage = ATIPutImage;
- adapt->ReputImage = ATIReputImage;
- adapt->QueryImageAttributes = ATIQueryImageAttributes;
-
- /* gotta uninit this someplace */
- REGION_INIT(pScreen, &pPortPriv->clip, NullBox, 0);
-
- atis->pAdaptor = adapt;
-
- xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
- xvSaturation = MAKE_ATOM("XV_SATURATION");
-
- return adapt;
-}
-
-Bool ATIInitVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdVideoAdaptorPtr *adaptors, *newAdaptors = NULL;
- KdVideoAdaptorPtr newAdaptor = NULL;
- int num_adaptors;
-
- atis->pAdaptor = NULL;
-
- if (atic->reg_base == NULL)
- return FALSE;
- if (atic->is_r300)
- return FALSE;
-
- num_adaptors = KdXVListGenericAdaptors(screen, &adaptors);
-
- newAdaptor = ATISetupImageVideo(pScreen);
-
- if (newAdaptor) {
- if (!num_adaptors) {
- num_adaptors = 1;
- adaptors = &newAdaptor;
- } else {
- newAdaptors = xalloc((num_adaptors + 1) *
- sizeof(KdVideoAdaptorPtr *));
- if (newAdaptors) {
- memcpy(newAdaptors, adaptors, num_adaptors *
- sizeof(KdVideoAdaptorPtr));
- newAdaptors[num_adaptors] = newAdaptor;
- adaptors = newAdaptors;
- num_adaptors++;
- }
- }
- }
-
- if (num_adaptors)
- KdXVScreenInit(pScreen, adaptors, num_adaptors);
-
- if (newAdaptors)
- xfree(newAdaptors);
-
- return TRUE;
-}
-
-void
-ATIFiniVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ATIScreenInfo(pScreenPriv);
- KdVideoAdaptorPtr adapt = atis->pAdaptor;
- ATIPortPrivPtr pPortPriv;
- int i;
-
- if (!adapt)
- return;
-
- for (i = 0; i < atis->num_texture_ports; i++) {
- pPortPriv = (ATIPortPrivPtr)(&adapt->pPortPrivates[i].ptr);
- REGION_UNINIT(pScreen, &pPortPriv->clip);
- }
- xfree(adapt);
- atis->pAdaptor = NULL;
-}
diff --git a/hw/kdrive/ati/r128_blendtmp.h b/hw/kdrive/ati/r128_blendtmp.h
deleted file mode 100644
index b663eac95..000000000
--- a/hw/kdrive/ati/r128_blendtmp.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt, Anders Carlsson
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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 USE_DMA
-#define TAG(x) x##DMA
-#define LOCALS RING_LOCALS; \
- (void)atic
-#define BEGIN(x) BEGIN_RING(x * 2)
-#define OUT_REG(reg, val) OUT_RING_REG(reg, val)
-#define END() ADVANCE_RING()
-#else
-#define TAG(x) x##MMIO
-#define LOCALS char *mmio = atic->reg_base
-#define BEGIN(x) ATIWaitAvailMMIO(x)
-#define OUT_REG(reg, val) MMIO_OUT32(mmio, (reg), (val))
-#define END()
-#endif
-
-static Bool
-TAG(R128PrepareBlend)(int op, PicturePtr pSrcPicture, PicturePtr pDstPicture,
- PixmapPtr pSrc, PixmapPtr pDst)
-{
- KdScreenPriv(pDst->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- CARD32 dstDatatype, srcDatatype;
- LOCALS;
-
- accel_atis = atis;
-
- if (!TAG(ATISetup)(pDst, pSrc))
- return FALSE;
-
- src_bpp = pSrc->drawable.bitsPerPixel;
- is_repeat = pSrcPicture->repeat;
-
- if (op >= sizeof(R128BlendOp)/sizeof(R128BlendOp[0]))
- ATI_FALLBACK(("Unsupported op 0x%x\n", op));
- if (pSrcPicture->repeat && (pSrc->drawable.width != 1 ||
- pSrc->drawable.height != 1))
- ATI_FALLBACK(("repeat unsupported\n"));
- if (pSrcPicture->transform != NULL)
- ATI_FALLBACK(("transform unsupported\n"));
- if (!R128GetDatatypePict(pDstPicture->format, &dstDatatype))
- ATI_FALLBACK(("Unsupported dest format 0x%x\n",
- pDstPicture->format));
- if (!R128GetDatatypePict(pSrcPicture->format, &srcDatatype))
- ATI_FALLBACK(("Unsupported src format 0x%x\n",
- pSrcPicture->format));
-
- BEGIN(11);
- OUT_REG(RADEON_REG_DP_GUI_MASTER_CNTL,
- (dstDatatype << 8) |
- RADEON_GMC_SRC_DATATYPE_COLOR |
- RADEON_GMC_DST_PITCH_OFFSET_CNTL |
- RADEON_GMC_CLR_CMP_CNTL_DIS |
- RADEON_GMC_AUX_CLIP_DIS |
- (ATIBltRop[3] << 16) |
- RADEON_GMC_3D_FCN_EN);
- OUT_REG(R128_REG_TEX_CNTL_C, R128_TEX_ALPHA_EN | R128_TEX_CACHE_FLUSH);
- OUT_REG(R128_REG_PRIM_TEXTURE_COMBINE_CNTL_C, 0);
- OUT_REG(R128_REG_SCALE_3D_CNTL,
- R128_SCALE_3D_SCALE |
- R128BlendOp[op] |
- R128_TEX_MAP_ALPHA_IN_TEXTURE);
- OUT_REG(R128_REG_SCALE_3D_DATATYPE, srcDatatype);
- OUT_REG(R128_REG_SCALE_PITCH, src_pitch / src_bpp);
- /* 4.16 fixed point scaling factor? */
- if (is_repeat) {
- OUT_REG(R128_REG_SCALE_X_INC, 0);
- OUT_REG(R128_REG_SCALE_Y_INC, 0);
- } else {
- OUT_REG(R128_REG_SCALE_X_INC, 65536);
- OUT_REG(R128_REG_SCALE_Y_INC, 65536);
- }
- OUT_REG(R128_REG_SCALE_HACC, 0x00000000);
- OUT_REG(R128_REG_SCALE_VACC, 0x00000000);
- OUT_REG(RADEON_REG_DP_CNTL,
- RADEON_DST_X_LEFT_TO_RIGHT | RADEON_DST_Y_TOP_TO_BOTTOM );
- END();
-
- return TRUE;
-}
-
-static void
-TAG(R128Blend)(int srcX, int srcY, int dstX, int dstY, int width, int height)
-{
- ATIScreenInfo *atis = accel_atis;
- ATICardInfo *atic = atis->atic;
- LOCALS;
-
- if (is_repeat) {
- srcX = 0;
- srcY = 0;
- }
-
- BEGIN(4);
- OUT_REG(R128_REG_SCALE_OFFSET_0, src_offset + srcY * src_pitch + srcX *
- (src_bpp >> 3));
- OUT_REG(R128_REG_SCALE_SRC_HEIGHT_WIDTH, (height << 16) | width);
- OUT_REG(R128_REG_SCALE_DST_X_Y, (dstX << 16) | dstY);
- OUT_REG(R128_REG_SCALE_DST_HEIGHT_WIDTH, (height << 16) | width);
- END();
-}
-
-static void
-TAG(R128DoneBlend)(void)
-{
-}
-
-#undef TAG
-#undef LOCALS
-#undef BEGIN
-#undef OUT_REG
-#undef END
diff --git a/hw/kdrive/ati/r128_common.h b/hw/kdrive/ati/r128_common.h
deleted file mode 100644
index 862fea599..000000000
--- a/hw/kdrive/ati/r128_common.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/* r128_common.h -- common header definitions for R128 2D/3D/DRM suite
- * Created: Sun Apr 9 18:16:28 2000 by kevin@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@valinux.com>
- * Kevin E. Martin <martin@valinux.com>
- *
- * Converted to common header format:
- * Jens Owen <jens@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/hw/kdrive/ati/r128_composite.c b/hw/kdrive/ati/r128_composite.c
deleted file mode 100644
index 0d18ebff7..000000000
--- a/hw/kdrive/ati/r128_composite.c
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt, Anders Carlsson
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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.
- */
-
-#include "ati.h"
-#include "ati_reg.h"
-#include "ati_dma.h"
-#include "ati_draw.h"
-
-extern ATIScreenInfo *accel_atis;
-extern int sample_count;
-extern float sample_offsets_x[255];
-extern float sample_offsets_y[255];
-extern CARD8 ATIBltRop[16];
-
-static int widths[2] = {1,1};
-static int heights[2] = {1,1};
-static Bool is_transform[2];
-static PictTransform *transform[2];
-
-struct blendinfo {
- Bool dst_alpha;
- Bool src_alpha;
- CARD32 blendctl;
-};
-
-static struct blendinfo R128BlendOp[] = {
- /* Clear */
- {0, 0, R128_SBLEND_ZERO | R128_DBLEND_ZERO},
- /* Src */
- {0, 0, R128_SBLEND_ONE | R128_DBLEND_ZERO},
- /* Dst */
- {0, 0, R128_SBLEND_ZERO | R128_DBLEND_ONE},
- /* Over */
- {0, 1, R128_SBLEND_ONE | R128_DBLEND_INV_SRC_ALPHA},
- /* OverReverse */
- {1, 0, R128_SBLEND_INV_DST_ALPHA | R128_DBLEND_ONE},
- /* In */
- {1, 0, R128_SBLEND_DST_ALPHA | R128_DBLEND_ZERO},
- /* InReverse */
- {0, 1, R128_SBLEND_ZERO | R128_DBLEND_SRC_ALPHA},
- /* Out */
- {1, 0, R128_SBLEND_INV_DST_ALPHA | R128_DBLEND_ZERO},
- /* OutReverse */
- {0, 1, R128_SBLEND_ZERO | R128_DBLEND_INV_SRC_ALPHA},
- /* Atop */
- {1, 1, R128_SBLEND_DST_ALPHA | R128_DBLEND_INV_SRC_ALPHA},
- /* AtopReverse */
- {1, 1, R128_SBLEND_INV_DST_ALPHA | R128_DBLEND_SRC_ALPHA},
- /* Xor */
- {1, 1, R128_SBLEND_INV_DST_ALPHA | R128_DBLEND_INV_SRC_ALPHA},
- /* Add */
- {0, 0, R128_SBLEND_ONE | R128_DBLEND_ONE},
-};
-
-static Bool
-R128GetDatatypePict(CARD32 format, CARD32 *type)
-{
- switch (format) {
- case PICT_a1r5g5b5:
- case PICT_x1r5g5b5:
- *type = R128_DATATYPE_ARGB1555;
- return TRUE;
- case PICT_r5g6b5:
- *type = R128_DATATYPE_RGB565;
- return TRUE;
- case PICT_a8r8g8b8:
- case PICT_x8r8g8b8:
- *type = R128_DATATYPE_ARGB8888;
- return TRUE;
- default:
- return FALSE;
- }
-
-}
-
-static Bool
-R128CheckCompositeTexture(PicturePtr pPict)
-{
- int w = pPict->pDrawable->width;
- int h = pPict->pDrawable->height;
-
- if (w > (1 << 10) || h > (1 << 10))
- ATI_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
- if (pPict->repeat && ((w & (w - 1)) != 0 || (h & (h - 1)) != 0))
- ATI_FALLBACK(("NPOT repeat unsupported (%dx%d)\n", w, h));
-
- switch (pPict->format) {
- case PICT_a8:
- case PICT_a1r5g5b5:
- case PICT_a4r4g4b4:
- case PICT_r5g6b5:
- case PICT_a8r8g8b8:
- break;
- default:
- ATI_FALLBACK(("Unsupported picture format 0x%x\n",
- pPict->format));
- }
-
- return TRUE;
-}
-
-Bool
-R128CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture)
-{
- CARD32 dstDatatype;
-
- if (op >= sizeof(R128BlendOp)/sizeof(R128BlendOp[0]))
- ATI_FALLBACK(("Unsupported op 0x%x\n", op));
- if (pDstPicture->format == PICT_a8) {
- if (R128BlendOp[op].src_alpha || R128BlendOp[op].dst_alpha ||
- pMaskPicture != NULL)
- ATI_FALLBACK(("alpha blending unsupported with "
- "A8 dst?\n"));
- } else if (!R128GetDatatypePict(pDstPicture->format, &dstDatatype)) {
- ATI_FALLBACK(("Unsupported dest format 0x%x\n",
- pDstPicture->format));
- }
- if (pMaskPicture != NULL && pMaskPicture->componentAlpha &&
- R128BlendOp[op].src_alpha)
- ATI_FALLBACK(("Component alpha not supported with source alpha "
- "blending.\n"));
-
- if (!R128CheckCompositeTexture(pSrcPicture))
- return FALSE;
- if (pMaskPicture != NULL && !R128CheckCompositeTexture(pMaskPicture))
- return FALSE;
-
- return TRUE;
-}
-
-static Bool
-R128TextureSetup(PicturePtr pPict, PixmapPtr pPix, int unit, CARD32 *txsize,
- CARD32 *tex_cntl_c)
-{
- int w = pPict->pDrawable->width;
- int h = pPict->pDrawable->height;
- int bytepp, shift, l2w, l2h, l2p;
- int pitch;
-
- pitch = pPix->devKind;
- if ((pitch & (pitch - 1)) != 0)
- ATI_FALLBACK(("NPOT pitch 0x%x unsupported\n", pitch));
-
- switch (pPict->format) {
- case PICT_a8:
- /* DATATYPE_RGB8 appears to expand the value into the alpha
- * channel like we want. We then blank out the R,G,B channels
- * as necessary using the combiners.
- */
- *tex_cntl_c = R128_DATATYPE_RGB8 << R128_TEX_DATATYPE_SHIFT;
- break;
- case PICT_a1r5g5b5:
- *tex_cntl_c = R128_DATATYPE_ARGB1555 << R128_TEX_DATATYPE_SHIFT;
- break;
- case PICT_a4r4g4b4:
- *tex_cntl_c = R128_DATATYPE_ARGB4444 << R128_TEX_DATATYPE_SHIFT;
- break;
- case PICT_r5g6b5:
- *tex_cntl_c = R128_DATATYPE_RGB565 << R128_TEX_DATATYPE_SHIFT;
- break;
- case PICT_a8r8g8b8:
- *tex_cntl_c = R128_DATATYPE_ARGB8888 << R128_TEX_DATATYPE_SHIFT;
- break;
- default:
- return FALSE;
- }
- bytepp = PICT_FORMAT_BPP(pPict->format) / 8;
-
- *tex_cntl_c |= R128_MIP_MAP_DISABLE;
-
- if (pPict->filter == PictFilterBilinear)
- *tex_cntl_c |= R128_MIN_BLEND_LINEAR | R128_MAG_BLEND_LINEAR;
-
- if (unit == 0)
- shift = 0;
- else {
- shift = 16;
- *tex_cntl_c |= R128_SEC_SELECT_SEC_ST;
- }
-
- /* ATILog2 returns -1 for value of 0 */
- l2w = ATILog2(w - 1) + 1;
- l2h = ATILog2(h - 1) + 1;
- l2p = ATILog2(pPix->devKind / bytepp);
-
- if (pPict->repeat && w == 1 && h == 1)
- l2p = 0;
- else if (pPict->repeat && l2p != l2w)
- ATI_FALLBACK(("Repeat not supported for pitch != width\n"));
- l2w = l2p;
-
- widths[unit] = 1 << l2w;
- heights[unit] = 1 << l2h;
- *txsize |= l2p << (R128_TEX_PITCH_SHIFT + shift);
- *txsize |= ((l2w > l2h) ? l2w : l2h) << (R128_TEX_SIZE_SHIFT + shift);
- *txsize |= l2h << (R128_TEX_HEIGHT_SHIFT + shift);
-
- if (pPict->transform != 0) {
- is_transform[unit] = TRUE;
- transform[unit] = pPict->transform;
- } else {
- is_transform[unit] = FALSE;
- }
-
- return TRUE;
-}
-
-Bool
-R128PrepareComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture, PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
-{
- KdScreenPriv(pDst->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- CARD32 txsize = 0, prim_tex_cntl_c, sec_tex_cntl_c = 0, dstDatatype;
- CARD32 dst_pitch_offset, color_factor, in_color_factor, alpha_comb;
- CARD32 blend_cntl;
- int i;
- RING_LOCALS;
-
- accel_atis = atis;
-
- if (pDstPicture->format == PICT_a8)
- dstDatatype = R128_DATATYPE_Y8;
- else
- R128GetDatatypePict(pDstPicture->format, &dstDatatype);
-
- if (!R128TextureSetup(pSrcPicture, pSrc, 0, &txsize, &prim_tex_cntl_c))
- return FALSE;
- if (pMask != NULL && !R128TextureSetup(pMaskPicture, pMask, 1, &txsize,
- &sec_tex_cntl_c))
- return FALSE;
- else if (pMask == NULL)
- is_transform[1] = FALSE;
-
- if (!ATIGetPixmapOffsetPitch(pDst, &dst_pitch_offset))
- return FALSE;
-
- blend_cntl = R128BlendOp[op].blendctl;
- if (PICT_FORMAT_A(pDstPicture->format) == 0 &&
- R128BlendOp[op].dst_alpha) {
- if ((blend_cntl & R128_SBLEND_MASK) ==
- R128_SBLEND_DST_ALPHA)
- blend_cntl = (blend_cntl & ~R128_SBLEND_MASK) |
- R128_SBLEND_ONE;
- else if ((blend_cntl & R128_SBLEND_MASK) ==
- R128_SBLEND_INV_DST_ALPHA)
- blend_cntl = (blend_cntl & ~R128_SBLEND_MASK) |
- R128_SBLEND_ZERO;
- }
-
- BEGIN_DMA(12);
- OUT_REG(R128_REG_SCALE_3D_CNTL,
- R128_SCALE_3D_TEXMAP_SHADE |
- R128_SCALE_PIX_REPLICATE |
- R128_TEX_CACHE_SPLIT |
- R128_TEX_MAP_ALPHA_IN_TEXTURE |
- R128_TEX_CACHE_LINE_SIZE_4QW);
- OUT_REG(ATI_REG_DST_PITCH_OFFSET, dst_pitch_offset);
- OUT_REG(ATI_REG_DP_GUI_MASTER_CNTL,
- ATI_GMC_DST_PITCH_OFFSET_CNTL |
- ATI_GMC_BRUSH_SOLID_COLOR |
- (dstDatatype << 8) |
- ATI_GMC_SRC_DATATYPE_COLOR |
- (ATIBltRop[GXcopy] << 16) |
- ATI_DP_SRC_SOURCE_MEMORY |
- R128_GMC_3D_FCN_EN |
- ATI_GMC_CLR_CMP_CNTL_DIS |
- R128_GMC_AUX_CLIP_DIS |
- ATI_GMC_WR_MSK_DIS);
- OUT_REG(R128_REG_MISC_3D_STATE_CNTL,
- R128_MISC_SCALE_3D_TEXMAP_SHADE |
- R128_MISC_SCALE_PIX_REPLICATE |
- R128_ALPHA_COMB_ADD_CLAMP |
- blend_cntl);
- OUT_REG(R128_REG_TEX_CNTL_C,
- R128_TEXMAP_ENABLE |
- ((pMask != NULL) ? R128_SEC_TEXMAP_ENABLE : 0) |
- R128_ALPHA_ENABLE |
- R128_TEX_CACHE_FLUSH);
- OUT_REG(R128_REG_PC_GUI_CTLSTAT, R128_PC_FLUSH_GUI);
- END_DMA();
-
- /* IN operator: Without a mask, only the first texture unit is enabled.
- * With a mask, we put the source in the first unit and have it pass
- * through as input to the 2nd. The 2nd unit takes the incoming source
- * pixel and modulates it with either the alpha or each of the channels
- * in the mask, depending on componentAlpha.
- */
- BEGIN_DMA(15);
- OUT_RING(DMA_PACKET0(R128_REG_PRIM_TEX_CNTL_C, 14));
- OUT_RING_REG(R128_REG_PRIM_TEX_CNTL_C, prim_tex_cntl_c);
-
- /* If this is the only stage and the dest is a8, route the alpha result
- * to the color (red channel, in particular), too. Otherwise, be sure
- * to zero out color channels of an a8 source.
- */
- if (pMaskPicture == NULL && pDstPicture->format == PICT_a8)
- color_factor = R128_COLOR_FACTOR_ALPHA;
- else if (pSrcPicture->format == PICT_a8)
- color_factor = R128_COLOR_FACTOR_CONST_COLOR;
- else
- color_factor = R128_COLOR_FACTOR_TEX;
-
- if (PICT_FORMAT_A(pSrcPicture->format) == 0)
- alpha_comb = R128_COMB_ALPHA_COPY_INP;
- else
- alpha_comb = R128_COMB_ALPHA_DIS;
-
- OUT_RING_REG(R128_REG_PRIM_TEXTURE_COMBINE_CNTL_C,
- R128_COMB_COPY |
- color_factor |
- R128_INPUT_FACTOR_INT_COLOR |
- alpha_comb |
- R128_ALPHA_FACTOR_TEX_ALPHA |
- R128_INP_FACTOR_A_CONST_ALPHA);
- OUT_RING_REG(R128_REG_TEX_SIZE_PITCH_C, txsize);
- /* We could save some output by only writing the offset register that
- * will actually be used. On the other hand, this is easy.
- */
- for (i = 0; i <= 10; i++) {
- OUT_RING_REG(R128_REG_PRIM_TEX_0_OFFSET_C + 4 * i,
- ((CARD8 *)pSrc->devPrivate.ptr -
- pScreenPriv->screen->memory_base));
- }
- END_DMA();
-
- if (pMask != NULL) {
- BEGIN_DMA(14);
- OUT_RING(DMA_PACKET0(R128_REG_SEC_TEX_CNTL_C, 13));
- OUT_RING_REG(R128_REG_SEC_TEX_CNTL_C, sec_tex_cntl_c);
-
- if (pDstPicture->format == PICT_a8) {
- color_factor = R128_COLOR_FACTOR_ALPHA;
- in_color_factor = R128_INPUT_FACTOR_PREV_ALPHA;
- } else if (pMaskPicture->componentAlpha) {
- color_factor = R128_COLOR_FACTOR_TEX;
- in_color_factor = R128_INPUT_FACTOR_PREV_COLOR;
- } else {
- color_factor = R128_COLOR_FACTOR_ALPHA;
- in_color_factor = R128_INPUT_FACTOR_PREV_COLOR;
- }
-
- OUT_RING_REG(R128_REG_SEC_TEXTURE_COMBINE_CNTL_C,
- R128_COMB_MODULATE |
- color_factor |
- in_color_factor |
- R128_COMB_ALPHA_MODULATE |
- R128_ALPHA_FACTOR_TEX_ALPHA |
- R128_INP_FACTOR_A_PREV_ALPHA);
- for (i = 0; i <= 10; i++) {
- OUT_RING_REG(R128_REG_SEC_TEX_0_OFFSET_C + 4 * i,
- ((CARD8 *)pMask->devPrivate.ptr -
- pScreenPriv->screen->memory_base));
- }
- END_DMA();
- }
-
- return TRUE;
-}
-#define VTX_RING_COUNT 8
-
-#define VTX_OUT(_dstX, _dstY, _srcX, _srcY, _maskX, _maskY) \
-do { \
- OUT_RING_F((_dstX)); \
- OUT_RING_F(((float)(_dstY)) + .125); \
- OUT_RING_F(0.0); \
- OUT_RING_F(1.0); \
- OUT_RING_F((((float)(_srcX)) + 0.5) / (widths[0])); \
- OUT_RING_F((((float)(_srcY)) + 0.5) / (heights[0])); \
- OUT_RING_F((((float)(_maskX)) + 0.5) / (widths[1])); \
- OUT_RING_F((((float)(_maskY)) + 0.5) / (heights[1])); \
-} while (0)
-
-void
-R128Composite(int srcX, int srcY, int maskX, int maskY, int dstX, int dstY,
- int w, int h)
-{
- ATIScreenInfo *atis = accel_atis;
- int srcXend, srcYend, maskXend, maskYend;
- PictVector v;
- RING_LOCALS;
-
- /*ErrorF("R128Composite (%d,%d) (%d,%d) (%d,%d) (%d,%d)\n",
- srcX, srcY, maskX, maskY,dstX, dstY, w, h);*/
-
- srcXend = srcX + w;
- srcYend = srcY + h;
- maskXend = maskX + w;
- maskYend = maskY + h;
- if (is_transform[0]) {
- v.vector[0] = IntToxFixed(srcX);
- v.vector[1] = IntToxFixed(srcY);
- v.vector[2] = xFixed1;
- PictureTransformPoint(transform[0], &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(transform[0], &v);
- srcXend = xFixedToInt(v.vector[0]);
- srcYend = xFixedToInt(v.vector[1]);
- }
- if (is_transform[1]) {
- v.vector[0] = IntToxFixed(maskX);
- v.vector[1] = IntToxFixed(maskY);
- v.vector[2] = xFixed1;
- PictureTransformPoint(transform[1], &v);
- maskX = xFixedToInt(v.vector[0]);
- maskY = xFixedToInt(v.vector[1]);
- v.vector[0] = IntToxFixed(maskXend);
- v.vector[1] = IntToxFixed(maskYend);
- v.vector[2] = xFixed1;
- PictureTransformPoint(transform[1], &v);
- maskXend = xFixedToInt(v.vector[0]);
- maskYend = xFixedToInt(v.vector[1]);
- }
-
- BEGIN_DMA(3 + 4 * VTX_RING_COUNT);
- OUT_RING(DMA_PACKET3(ATI_CCE_PACKET3_3D_RNDR_GEN_PRIM,
- 2 + 4 * VTX_RING_COUNT));
- OUT_RING(R128_CCE_VC_FRMT_RHW |
- R128_CCE_VC_FRMT_S_T |
- R128_CCE_VC_FRMT_S2_T2);
- OUT_RING(R128_CCE_VC_CNTL_PRIM_TYPE_TRI_FAN |
- R128_CCE_VC_CNTL_PRIM_WALK_RING |
- (4 << R128_CCE_VC_CNTL_NUM_SHIFT));
-
- VTX_OUT(dstX, dstY, srcX, srcY, maskX, maskY);
- VTX_OUT(dstX, dstY + h, srcX, srcYend, maskX, maskYend);
- VTX_OUT(dstX + w, dstY + h, srcXend, srcYend, maskXend, maskYend);
- VTX_OUT(dstX + w, dstY, srcXend, srcY, maskXend, maskY);
-
- END_DMA();
-}
-
-void
-R128DoneComposite(void)
-{
-}
-
-Bool
-R128PrepareTrapezoids(PicturePtr pDstPicture, PixmapPtr pDst)
-{
- KdScreenPriv(pDst->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- CARD32 dst_pitch_offset;
- RING_LOCALS;
-
- accel_atis = atis;
-
- if (!ATIGetPixmapOffsetPitch(pDst, &dst_pitch_offset))
- return FALSE;
-
- BEGIN_DMA(18);
- OUT_REG(R128_REG_SCALE_3D_CNTL,
- R128_SCALE_3D_TEXMAP_SHADE |
- R128_SCALE_PIX_REPLICATE |
- R128_TEX_CACHE_SPLIT |
- R128_TEX_CACHE_LINE_SIZE_4QW);
- OUT_REG(ATI_REG_DST_PITCH_OFFSET, dst_pitch_offset);
- OUT_REG(ATI_REG_DP_GUI_MASTER_CNTL,
- ATI_GMC_DST_PITCH_OFFSET_CNTL |
- ATI_GMC_BRUSH_SOLID_COLOR |
- (R128_DATATYPE_RGB8 << 8) |
- ATI_GMC_SRC_DATATYPE_COLOR |
- (ATIBltRop[GXcopy] << 16) |
- ATI_DP_SRC_SOURCE_MEMORY |
- R128_GMC_3D_FCN_EN |
- ATI_GMC_CLR_CMP_CNTL_DIS |
- ATI_GMC_WR_MSK_DIS);
- OUT_REG(R128_REG_MISC_3D_STATE_CNTL,
- R128_MISC_SCALE_3D_TEXMAP_SHADE |
- R128_MISC_SCALE_PIX_REPLICATE |
- R128_ALPHA_COMB_ADD_CLAMP |
- R128BlendOp[PictOpAdd].blendctl);
- OUT_REG(R128_REG_TEX_CNTL_C,
- R128_ALPHA_ENABLE);
- OUT_REG(R128_REG_PC_GUI_CTLSTAT, R128_PC_FLUSH_GUI);
-
- OUT_RING(DMA_PACKET0(R128_REG_AUX_SC_CNTL, 5));
- OUT_RING_REG(R128_REG_AUX_SC_CNTL, R128_AUX1_SC_ENB);
- OUT_RING_REG(R128_REG_AUX1_SC_LEFT, 0);
- OUT_RING_REG(R128_REG_AUX1_SC_RIGHT, pDst->drawable.width);
- OUT_RING_REG(R128_REG_AUX1_SC_TOP, 0);
- OUT_RING_REG(R128_REG_AUX1_SC_BOTTOM, pDst->drawable.height);
- END_DMA();
-
- return TRUE;
-}
-
-#define TRAP_VERT_RING_COUNT 4
-
-#define TRAP_VERT(_x, _y) \
-do { \
- OUT_RING_F((_x) + sample_x); \
- OUT_RING_F((_y) + 0.125 + sample_y); \
- OUT_RING_F(0.0); \
- OUT_RING(0x01010101); \
-} while (0)
-
-void
-R128Trapezoids(KaaTrapezoid *traps, int ntraps)
-{
- ATIScreenInfo *atis = accel_atis;
- RING_LOCALS;
-
- while (ntraps > 0) {
- int i, sample, count, vertcount;
-
- count = 0xffff / 4 / sample_count;
- if (count > ntraps)
- count = ntraps;
- vertcount = count * sample_count * 4;
-
- BEGIN_DMA(3 + vertcount * TRAP_VERT_RING_COUNT);
- OUT_RING(DMA_PACKET3(ATI_CCE_PACKET3_3D_RNDR_GEN_PRIM,
- 2 + vertcount * TRAP_VERT_RING_COUNT));
- OUT_RING(R128_CCE_VC_FRMT_DIFFUSE_ARGB);
- OUT_RING(R128_CCE_VC_CNTL_PRIM_TYPE_TRI_FAN |
- R128_CCE_VC_CNTL_PRIM_WALK_RING |
- (vertcount << R128_CCE_VC_CNTL_NUM_SHIFT));
-
- for (i = 0; i < count; i++) {
- for (sample = 0; sample < sample_count; sample++) {
- float sample_x = sample_offsets_x[sample];
- float sample_y = sample_offsets_y[sample];
- TRAP_VERT(traps[i].tl, traps[i].ty);
- TRAP_VERT(traps[i].bl, traps[i].by);
- TRAP_VERT(traps[i].br, traps[i].by);
- TRAP_VERT(traps[i].tr, traps[i].ty);
- }
- }
- END_DMA();
-
- ntraps -= count;
- traps += count;
- }
-}
-
-void
-R128DoneTrapezoids(void)
-{
-}
diff --git a/hw/kdrive/ati/r128_sarea.h b/hw/kdrive/ati/r128_sarea.h
deleted file mode 100644
index 6fbd05ecb..000000000
--- a/hw/kdrive/ati/r128_sarea.h
+++ /dev/null
@@ -1,185 +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@valinux.com>
- * Gareth Hughes <gareth@valinux.com>
- *
- */
-
-#ifndef _R128_SAREA_H_
-#define _R128_SAREA_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
-
-#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;
-
-#ifdef XF86DRI
- /* The current cliprects, or a subset thereof.
- */
- XF86DRIClipRectRec boxes[R128_NR_SAREA_CLIPRECTS];
- unsigned int nbox;
-#endif
-
- /* 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[ATI_NR_TEX_HEAPS][ATI_NR_TEX_REGIONS+1];
- /* last time texture was uploaded */
- unsigned int texAge[ATI_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/hw/kdrive/ati/radeon_common.h b/hw/kdrive/ati/radeon_common.h
deleted file mode 100644
index 6c416c6b1..000000000
--- a/hw/kdrive/ati/radeon_common.h
+++ /dev/null
@@ -1,460 +0,0 @@
-/* radeon_common.h -- common header definitions for Radeon 2D/3D/DRM suite
- *
- * Copyright 2000 VA Linux Systems, Inc., Fremont, California.
- * 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@valinux.com>
- * Kevin E. Martin <martin@valinux.com>
- * Keith Whitwell <keith@tungstengraphics.com>
- *
- * Converted to common header format:
- * Jens Owen <jens@tungstengraphics.com>
- *
- *
- */
-
-#ifndef _RADEON_COMMON_H_
-#define _RADEON_COMMON_H_
-
-#include <inttypes.h>
-
-/* WARNING: If you change any of these defines, make sure to change
- * the kernel include file as well (radeon_drm.h)
- */
-
-/* Driver specific DRM command indices
- * NOTE: these are not OS specific, but they are driver specific
- */
-#define DRM_RADEON_CP_INIT 0x00
-#define DRM_RADEON_CP_START 0x01
-#define DRM_RADEON_CP_STOP 0x02
-#define DRM_RADEON_CP_RESET 0x03
-#define DRM_RADEON_CP_IDLE 0x04
-#define DRM_RADEON_RESET 0x05
-#define DRM_RADEON_FULLSCREEN 0x06
-#define DRM_RADEON_SWAP 0x07
-#define DRM_RADEON_CLEAR 0x08
-#define DRM_RADEON_VERTEX 0x09
-#define DRM_RADEON_INDICES 0x0a
-#define DRM_RADEON_STIPPLE 0x0c
-#define DRM_RADEON_INDIRECT 0x0d
-#define DRM_RADEON_TEXTURE 0x0e
-#define DRM_RADEON_VERTEX2 0x0f
-#define DRM_RADEON_CMDBUF 0x10
-#define DRM_RADEON_GETPARAM 0x11
-#define DRM_RADEON_FLIP 0x12
-#define DRM_RADEON_ALLOC 0x13
-#define DRM_RADEON_FREE 0x14
-#define DRM_RADEON_INIT_HEAP 0x15
-#define DRM_RADEON_IRQ_EMIT 0x16
-#define DRM_RADEON_IRQ_WAIT 0x17
-#define DRM_RADEON_CP_RESUME 0x18
-#define DRM_RADEON_SETPARAM 0x19
-#define DRM_RADEON_MAX_DRM_COMMAND_INDEX 0x39
-
-
-#define RADEON_FRONT 0x1
-#define RADEON_BACK 0x2
-#define RADEON_DEPTH 0x4
-#define RADEON_STENCIL 0x8
-
-#define RADEON_CLEAR_X1 0
-#define RADEON_CLEAR_Y1 1
-#define RADEON_CLEAR_X2 2
-#define RADEON_CLEAR_Y2 3
-#define RADEON_CLEAR_DEPTH 4
-
-
-typedef struct {
- enum {
- DRM_RADEON_INIT_CP = 0x01,
- DRM_RADEON_CLEANUP_CP = 0x02,
- DRM_RADEON_INIT_R200_CP = 0x03
- } func;
- unsigned long sarea_priv_offset;
- int is_pci;
- int cp_mode;
- int gart_size;
- 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 long fb_offset;
- unsigned long mmio_offset;
- unsigned long ring_offset;
- unsigned long ring_rptr_offset;
- unsigned long buffers_offset;
- unsigned long gart_textures_offset;
-} drmRadeonInit;
-
-typedef struct {
- int flush;
- int idle;
-} drmRadeonCPStop;
-
-typedef struct {
- int idx;
- int start;
- int end;
- int discard;
-} drmRadeonIndirect;
-
-typedef union drmRadeonClearR {
- float f[5];
- unsigned int ui[5];
-} drmRadeonClearRect;
-
-typedef struct drmRadeonClearT {
- unsigned int flags;
- unsigned int clear_color;
- unsigned int clear_depth;
- unsigned int color_mask;
- unsigned int depth_mask; /* misnamed field: should be stencil */
- drmRadeonClearRect *depth_boxes;
-} drmRadeonClearType;
-
-typedef struct drmRadeonFullscreenT {
- enum {
- RADEON_INIT_FULLSCREEN = 0x01,
- RADEON_CLEANUP_FULLSCREEN = 0x02
- } func;
-} drmRadeonFullscreenType;
-
-typedef struct {
- unsigned int *mask;
-} drmRadeonStipple;
-
-typedef struct {
- unsigned int x;
- unsigned int y;
- unsigned int width;
- unsigned int height;
- const void *data;
-} drmRadeonTexImage;
-
-typedef struct {
- unsigned int offset;
- int pitch;
- int format;
- int width; /* Texture image coordinates */
- int height;
- drmRadeonTexImage *image;
-} drmRadeonTexture;
-
-
-#define RADEON_MAX_TEXTURE_UNITS 3
-
-/* Layout matches drm_radeon_state_t in linux drm_radeon.h.
- */
-typedef struct {
- struct {
- unsigned int pp_misc; /* 0x1c14 */
- unsigned int pp_fog_color;
- unsigned int re_solid_color;
- unsigned int rb3d_blendcntl;
- unsigned int rb3d_depthoffset;
- unsigned int rb3d_depthpitch;
- unsigned int rb3d_zstencilcntl;
- unsigned int pp_cntl; /* 0x1c38 */
- unsigned int rb3d_cntl;
- unsigned int rb3d_coloroffset;
- unsigned int re_width_height;
- unsigned int rb3d_colorpitch;
- } context;
- struct {
- unsigned int se_cntl;
- } setup1;
- struct {
- unsigned int se_coord_fmt; /* 0x1c50 */
- } vertex;
- struct {
- unsigned int re_line_pattern; /* 0x1cd0 */
- unsigned int re_line_state;
- unsigned int se_line_width; /* 0x1db8 */
- } line;
- struct {
- unsigned int pp_lum_matrix; /* 0x1d00 */
- unsigned int pp_rot_matrix_0; /* 0x1d58 */
- unsigned int pp_rot_matrix_1;
- } bumpmap;
- struct {
- unsigned int rb3d_stencilrefmask; /* 0x1d7c */
- unsigned int rb3d_ropcntl;
- unsigned int rb3d_planemask;
- } mask;
- struct {
- unsigned int se_vport_xscale; /* 0x1d98 */
- unsigned int se_vport_xoffset;
- unsigned int se_vport_yscale;
- unsigned int se_vport_yoffset;
- unsigned int se_vport_zscale;
- unsigned int se_vport_zoffset;
- } viewport;
- struct {
- unsigned int se_cntl_status; /* 0x2140 */
- } setup2;
- struct {
- unsigned int re_top_left; /*ignored*/ /* 0x26c0 */
- unsigned int re_misc;
- } misc;
- struct {
- unsigned int pp_txfilter;
- unsigned int pp_txformat;
- unsigned int pp_txoffset;
- unsigned int pp_txcblend;
- unsigned int pp_txablend;
- unsigned int pp_tfactor;
- unsigned int pp_border_color;
- } texture[RADEON_MAX_TEXTURE_UNITS];
- struct {
- unsigned int se_zbias_factor;
- unsigned int se_zbias_constant;
- } zbias;
- unsigned int dirty;
-} drmRadeonState;
-
-/* 1.1 vertex ioctl. Used in compatibility modes.
- */
-typedef struct {
- int prim;
- int idx; /* Index of vertex buffer */
- int count; /* Number of vertices in buffer */
- int discard; /* Client finished with buffer? */
-} drmRadeonVertex;
-
-typedef struct {
- unsigned int start;
- unsigned int finish;
- unsigned int prim:8;
- unsigned int stateidx:8;
- unsigned int numverts:16; /* overloaded as offset/64 for elt prims */
- unsigned int vc_format;
-} drmRadeonPrim;
-
-typedef struct {
- int idx; /* Index of vertex buffer */
- int discard; /* Client finished with buffer? */
- int nr_states;
- drmRadeonState *state;
- int nr_prims;
- drmRadeonPrim *prim;
-} drmRadeonVertex2;
-
-#define RADEON_MAX_STATES 16
-#define RADEON_MAX_PRIMS 64
-
-/* Command buffer. Replace with true dma stream?
- */
-typedef struct {
- int bufsz;
- char *buf;
- int nbox;
- drmClipRect *boxes;
-} drmRadeonCmdBuffer;
-
-/* New style per-packet identifiers for use in cmd_buffer ioctl with
- * the RADEON_EMIT_PACKET command. Comments relate new packets to old
- * state bits and the packet size:
- */
-#define RADEON_EMIT_PP_MISC 0 /* context/7 */
-#define RADEON_EMIT_PP_CNTL 1 /* context/3 */
-#define RADEON_EMIT_RB3D_COLORPITCH 2 /* context/1 */
-#define RADEON_EMIT_RE_LINE_PATTERN 3 /* line/2 */
-#define RADEON_EMIT_SE_LINE_WIDTH 4 /* line/1 */
-#define RADEON_EMIT_PP_LUM_MATRIX 5 /* bumpmap/1 */
-#define RADEON_EMIT_PP_ROT_MATRIX_0 6 /* bumpmap/2 */
-#define RADEON_EMIT_RB3D_STENCILREFMASK 7 /* masks/3 */
-#define RADEON_EMIT_SE_VPORT_XSCALE 8 /* viewport/6 */
-#define RADEON_EMIT_SE_CNTL 9 /* setup/2 */
-#define RADEON_EMIT_SE_CNTL_STATUS 10 /* setup/1 */
-#define RADEON_EMIT_RE_MISC 11 /* misc/1 */
-#define RADEON_EMIT_PP_TXFILTER_0 12 /* tex0/6 */
-#define RADEON_EMIT_PP_BORDER_COLOR_0 13 /* tex0/1 */
-#define RADEON_EMIT_PP_TXFILTER_1 14 /* tex1/6 */
-#define RADEON_EMIT_PP_BORDER_COLOR_1 15 /* tex1/1 */
-#define RADEON_EMIT_PP_TXFILTER_2 16 /* tex2/6 */
-#define RADEON_EMIT_PP_BORDER_COLOR_2 17 /* tex2/1 */
-#define RADEON_EMIT_SE_ZBIAS_FACTOR 18 /* zbias/2 */
-#define RADEON_EMIT_SE_TCL_OUTPUT_VTX_FMT 19 /* tcl/11 */
-#define RADEON_EMIT_SE_TCL_MATERIAL_EMMISSIVE_RED 20 /* material/17 */
-#define R200_EMIT_PP_TXCBLEND_0 21 /* tex0/4 */
-#define R200_EMIT_PP_TXCBLEND_1 22 /* tex1/4 */
-#define R200_EMIT_PP_TXCBLEND_2 23 /* tex2/4 */
-#define R200_EMIT_PP_TXCBLEND_3 24 /* tex3/4 */
-#define R200_EMIT_PP_TXCBLEND_4 25 /* tex4/4 */
-#define R200_EMIT_PP_TXCBLEND_5 26 /* tex5/4 */
-#define R200_EMIT_PP_TXCBLEND_6 27 /* /4 */
-#define R200_EMIT_PP_TXCBLEND_7 28 /* /4 */
-#define R200_EMIT_TCL_LIGHT_MODEL_CTL_0 29 /* tcl/6 */
-#define R200_EMIT_TFACTOR_0 30 /* tf/6 */
-#define R200_EMIT_VTX_FMT_0 31 /* vtx/4 */
-#define R200_EMIT_VAP_CTL 32 /* vap/1 */
-#define R200_EMIT_MATRIX_SELECT_0 33 /* msl/5 */
-#define R200_EMIT_TEX_PROC_CTL_2 34 /* tcg/5 */
-#define R200_EMIT_TCL_UCP_VERT_BLEND_CTL 35 /* tcl/1 */
-#define R200_EMIT_PP_TXFILTER_0 36 /* tex0/6 */
-#define R200_EMIT_PP_TXFILTER_1 37 /* tex1/6 */
-#define R200_EMIT_PP_TXFILTER_2 38 /* tex2/6 */
-#define R200_EMIT_PP_TXFILTER_3 39 /* tex3/6 */
-#define R200_EMIT_PP_TXFILTER_4 40 /* tex4/6 */
-#define R200_EMIT_PP_TXFILTER_5 41 /* tex5/6 */
-#define R200_EMIT_PP_TXOFFSET_0 42 /* tex0/1 */
-#define R200_EMIT_PP_TXOFFSET_1 43 /* tex1/1 */
-#define R200_EMIT_PP_TXOFFSET_2 44 /* tex2/1 */
-#define R200_EMIT_PP_TXOFFSET_3 45 /* tex3/1 */
-#define R200_EMIT_PP_TXOFFSET_4 46 /* tex4/1 */
-#define R200_EMIT_PP_TXOFFSET_5 47 /* tex5/1 */
-#define R200_EMIT_VTE_CNTL 48 /* vte/1 */
-#define R200_EMIT_OUTPUT_VTX_COMP_SEL 49 /* vtx/1 */
-#define R200_EMIT_PP_TAM_DEBUG3 50 /* tam/1 */
-#define R200_EMIT_PP_CNTL_X 51 /* cst/1 */
-#define R200_EMIT_RB3D_DEPTHXY_OFFSET 52 /* cst/1 */
-#define R200_EMIT_RE_AUX_SCISSOR_CNTL 53 /* cst/1 */
-#define R200_EMIT_RE_SCISSOR_TL_0 54 /* cst/2 */
-#define R200_EMIT_RE_SCISSOR_TL_1 55 /* cst/2 */
-#define R200_EMIT_RE_SCISSOR_TL_2 56 /* cst/2 */
-#define R200_EMIT_SE_VAP_CNTL_STATUS 57 /* cst/1 */
-#define R200_EMIT_SE_VTX_STATE_CNTL 58 /* cst/1 */
-#define R200_EMIT_RE_POINTSIZE 59 /* cst/1 */
-#define R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0 60 /* cst/4 */
-#define R200_EMIT_PP_CUBIC_FACES_0 61
-#define R200_EMIT_PP_CUBIC_OFFSETS_0 62
-#define R200_EMIT_PP_CUBIC_FACES_1 63
-#define R200_EMIT_PP_CUBIC_OFFSETS_1 64
-#define R200_EMIT_PP_CUBIC_FACES_2 65
-#define R200_EMIT_PP_CUBIC_OFFSETS_2 66
-#define R200_EMIT_PP_CUBIC_FACES_3 67
-#define R200_EMIT_PP_CUBIC_OFFSETS_3 68
-#define R200_EMIT_PP_CUBIC_FACES_4 69
-#define R200_EMIT_PP_CUBIC_OFFSETS_4 70
-#define R200_EMIT_PP_CUBIC_FACES_5 71
-#define R200_EMIT_PP_CUBIC_OFFSETS_5 72
-#define RADEON_EMIT_PP_TEX_SIZE_0 73
-#define RADEON_EMIT_PP_TEX_SIZE_1 74
-#define RADEON_EMIT_PP_TEX_SIZE_2 75
-#define RADEON_MAX_STATE_PACKETS 76
-
-
-/* Commands understood by cmd_buffer ioctl. More can be added but
- * obviously these can't be removed or changed:
- */
-#define RADEON_CMD_PACKET 1 /* emit one of the register packets above */
-#define RADEON_CMD_SCALARS 2 /* emit scalar data */
-#define RADEON_CMD_VECTORS 3 /* emit vector data */
-#define RADEON_CMD_DMA_DISCARD 4 /* discard current dma buf */
-#define RADEON_CMD_PACKET3 5 /* emit hw packet */
-#define RADEON_CMD_PACKET3_CLIP 6 /* emit hw packet wrapped in cliprects */
-#define RADEON_CMD_SCALARS2 7 /* R200 stopgap */
-#define RADEON_CMD_WAIT 8 /* synchronization */
-
-typedef union {
- int i;
- struct {
- unsigned char cmd_type, pad0, pad1, pad2;
- } header;
- struct {
- unsigned char cmd_type, packet_id, pad0, pad1;
- } packet;
- struct {
- unsigned char cmd_type, offset, stride, count;
- } scalars;
- struct {
- unsigned char cmd_type, offset, stride, count;
- } vectors;
- struct {
- unsigned char cmd_type, buf_idx, pad0, pad1;
- } dma;
- struct {
- unsigned char cmd_type, flags, pad0, pad1;
- } wait;
-} drmRadeonCmdHeader;
-
-
-#define RADEON_WAIT_2D 0x1
-#define RADEON_WAIT_3D 0x2
-
-
-typedef struct drm_radeon_getparam {
- int param;
- int *value;
-} drmRadeonGetParam;
-
-#define RADEON_PARAM_GART_BUFFER_OFFSET 1
-#define RADEON_PARAM_LAST_FRAME 2
-#define RADEON_PARAM_LAST_DISPATCH 3
-#define RADEON_PARAM_LAST_CLEAR 4
-#define RADEON_PARAM_IRQ_NR 5
-#define RADEON_PARAM_GART_BASE 6
-
-
-#define RADEON_MEM_REGION_GART 1
-#define RADEON_MEM_REGION_FB 2
-
-typedef struct drm_radeon_mem_alloc {
- int region;
- int alignment;
- int size;
- int *region_offset; /* offset from start of fb or GART */
-} drmRadeonMemAlloc;
-
-typedef struct drm_radeon_mem_free {
- int region;
- int region_offset;
-} drmRadeonMemFree;
-
-typedef struct drm_radeon_mem_init_heap {
- int region;
- int size;
- int start;
-} drmRadeonMemInitHeap;
-
-/* 1.6: Userspace can request & wait on irq's:
- */
-typedef struct drm_radeon_irq_emit {
- int *irq_seq;
-} drmRadeonIrqEmit;
-
-typedef struct drm_radeon_irq_wait {
- int irq_seq;
-} drmRadeonIrqWait;
-
-
-/* 1.10: Clients tell the DRM where they think the framebuffer is located in
- * the card's address space, via a new generic ioctl to set parameters
- */
-
-typedef struct drm_radeon_set_param {
- unsigned int param;
- int64_t value;
-} drmRadeonSetParam;
-
-#define RADEON_SETPARAM_FB_LOCATION 1
-
-
-#endif
diff --git a/hw/kdrive/ati/radeon_composite.c b/hw/kdrive/ati/radeon_composite.c
deleted file mode 100644
index ddad343e3..000000000
--- a/hw/kdrive/ati/radeon_composite.c
+++ /dev/null
@@ -1,875 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "ati.h"
-#include "ati_reg.h"
-#include "ati_dma.h"
-#include "ati_draw.h"
-
-extern ATIScreenInfo *accel_atis;
-extern int sample_count;
-extern float sample_offsets_x[255];
-extern float sample_offsets_y[255];
-static Bool is_transform[2];
-static PictTransform *transform[2];
-
-struct blendinfo {
- Bool dst_alpha;
- Bool src_alpha;
- CARD32 blend_cntl;
-};
-
-static struct blendinfo RadeonBlendOp[] = {
- /* Clear */
- {0, 0, RADEON_SBLEND_GL_ZERO | RADEON_DBLEND_GL_ZERO},
- /* Src */
- {0, 0, RADEON_SBLEND_GL_ONE | RADEON_DBLEND_GL_ZERO},
- /* Dst */
- {0, 0, RADEON_SBLEND_GL_ZERO | RADEON_DBLEND_GL_ONE},
- /* Over */
- {0, 1, RADEON_SBLEND_GL_ONE | RADEON_DBLEND_GL_INV_SRC_ALPHA},
- /* OverReverse */
- {1, 0, RADEON_SBLEND_GL_INV_DST_ALPHA | RADEON_DBLEND_GL_ONE},
- /* In */
- {1, 0, RADEON_SBLEND_GL_DST_ALPHA | RADEON_DBLEND_GL_ZERO},
- /* InReverse */
- {0, 1, RADEON_SBLEND_GL_ZERO | RADEON_DBLEND_GL_SRC_ALPHA},
- /* Out */
- {1, 0, RADEON_SBLEND_GL_INV_DST_ALPHA | RADEON_DBLEND_GL_ZERO},
- /* OutReverse */
- {0, 1, RADEON_SBLEND_GL_ZERO | RADEON_DBLEND_GL_INV_SRC_ALPHA},
- /* Atop */
- {1, 1, RADEON_SBLEND_GL_DST_ALPHA | RADEON_DBLEND_GL_INV_SRC_ALPHA},
- /* AtopReverse */
- {1, 1, RADEON_SBLEND_GL_INV_DST_ALPHA | RADEON_DBLEND_GL_SRC_ALPHA},
- /* Xor */
- {1, 1, RADEON_SBLEND_GL_INV_DST_ALPHA | RADEON_DBLEND_GL_INV_SRC_ALPHA},
- /* Add */
- {0, 0, RADEON_SBLEND_GL_ONE | RADEON_DBLEND_GL_ONE},
-};
-
-struct formatinfo {
- int fmt;
- Bool byte_swap;
- CARD32 card_fmt;
-};
-
-/* Note on texture formats:
- * TXFORMAT_Y8 expands to (Y,Y,Y,1). TXFORMAT_I8 expands to (I,I,I,I)
- */
-static struct formatinfo R100TexFormats[] = {
- {PICT_a8r8g8b8, 0, RADEON_TXFORMAT_ARGB8888 | RADEON_TXFORMAT_ALPHA_IN_MAP},
- {PICT_x8r8g8b8, 0, RADEON_TXFORMAT_ARGB8888},
- {PICT_a8b8g8r8, 1, RADEON_TXFORMAT_RGBA8888 | RADEON_TXFORMAT_ALPHA_IN_MAP},
- {PICT_x8b8g8r8, 1, RADEON_TXFORMAT_RGBA8888},
- {PICT_r5g6b5, 0, RADEON_TXFORMAT_RGB565},
- {PICT_a1r5g5b5, 0, RADEON_TXFORMAT_ARGB1555 | RADEON_TXFORMAT_ALPHA_IN_MAP},
- {PICT_x1r5g5b5, 0, RADEON_TXFORMAT_ARGB1555},
- {PICT_a8, 0, RADEON_TXFORMAT_I8 | RADEON_TXFORMAT_ALPHA_IN_MAP},
-};
-
-static struct formatinfo R200TexFormats[] = {
- {PICT_a8r8g8b8, 0, R200_TXFORMAT_ARGB8888 | R200_TXFORMAT_ALPHA_IN_MAP},
- {PICT_x8r8g8b8, 0, R200_TXFORMAT_ARGB8888},
- {PICT_a8r8g8b8, 1, R200_TXFORMAT_RGBA8888 | R200_TXFORMAT_ALPHA_IN_MAP},
- {PICT_x8r8g8b8, 1, R200_TXFORMAT_RGBA8888},
- {PICT_r5g6b5, 0, R200_TXFORMAT_RGB565},
- {PICT_a1r5g5b5, 0, R200_TXFORMAT_ARGB1555 | R200_TXFORMAT_ALPHA_IN_MAP},
- {PICT_x1r5g5b5, 0, R200_TXFORMAT_ARGB1555},
- {PICT_a8, 0, R200_TXFORMAT_I8 | R200_TXFORMAT_ALPHA_IN_MAP},
-};
-
-/* Common Radeon setup code */
-
-static Bool
-RadeonGetDestFormat(PicturePtr pDstPicture, CARD32 *dst_format)
-{
- switch (pDstPicture->format) {
- case PICT_a8r8g8b8:
- case PICT_x8r8g8b8:
- *dst_format = RADEON_COLOR_FORMAT_ARGB8888;
- break;
- case PICT_r5g6b5:
- *dst_format = RADEON_COLOR_FORMAT_RGB565;
- break;
- case PICT_a1r5g5b5:
- case PICT_x1r5g5b5:
- *dst_format = RADEON_COLOR_FORMAT_ARGB1555;
- break;
- case PICT_a8:
- *dst_format = RADEON_COLOR_FORMAT_RGB8;
- break;
- default:
- ATI_FALLBACK(("Unsupported dest format 0x%x\n",
- pDstPicture->format));
- }
-
- return TRUE;
-}
-
-/* R100-specific code */
-
-static Bool
-R100CheckCompositeTexture(PicturePtr pPict, int unit)
-{
- int w = pPict->pDrawable->width;
- int h = pPict->pDrawable->height;
- int i;
-
- if ((w > 0x7ff) || (h > 0x7ff))
- ATI_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
-
- for (i = 0; i < sizeof(R100TexFormats) / sizeof(R100TexFormats[0]); i++)
- {
- if (R100TexFormats[i].fmt == pPict->format)
- break;
- }
- if (i == sizeof(R100TexFormats) / sizeof(R100TexFormats[0]))
- ATI_FALLBACK(("Unsupported picture format 0x%x\n",
- pPict->format));
-
- if (pPict->repeat && ((w & (w - 1)) != 0 || (h & (h - 1)) != 0))
- ATI_FALLBACK(("NPOT repeat unsupported (%dx%d)\n", w, h));
-
- if (pPict->filter != PictFilterNearest &&
- pPict->filter != PictFilterBilinear)
- ATI_FALLBACK(("Unsupported filter 0x%x\n", pPict->filter));
-
- return TRUE;
-}
-
-static Bool
-R100TextureSetup(PicturePtr pPict, PixmapPtr pPix, int unit)
-{
- ATIScreenInfo *atis = accel_atis;
- KdScreenPriv(pPix->drawable.pScreen);
- CARD32 txfilter, txformat, txoffset, txpitch;
- int w = pPict->pDrawable->width;
- int h = pPict->pDrawable->height;
- int i;
- RING_LOCALS;
-
- txpitch = pPix->devKind;
- txoffset = ((CARD8 *)pPix->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
-
- for (i = 0; i < sizeof(R100TexFormats) / sizeof(R100TexFormats[0]); i++)
- {
- if (R100TexFormats[i].fmt == pPict->format)
- break;
- }
- txformat = R100TexFormats[i].card_fmt;
- if (R100TexFormats[i].byte_swap)
- txoffset |= RADEON_TXO_ENDIAN_BYTE_SWAP;
-
- if (pPict->repeat) {
- txformat |= ATILog2(w) << RADEON_TXFORMAT_WIDTH_SHIFT;
- txformat |= ATILog2(h) << RADEON_TXFORMAT_HEIGHT_SHIFT;
- } else
- txformat |= RADEON_TXFORMAT_NON_POWER2;
- txformat |= unit << 24; /* RADEON_TXFORMAT_ST_ROUTE_STQX */
-
-
- if ((txoffset & 0x1f) != 0)
- ATI_FALLBACK(("Bad texture offset 0x%x\n", txoffset));
- if ((txpitch & 0x1f) != 0)
- ATI_FALLBACK(("Bad texture pitch 0x%x\n", txpitch));
-
- switch (pPict->filter) {
- case PictFilterNearest:
- txfilter = (RADEON_MAG_FILTER_NEAREST |
- RADEON_MIN_FILTER_NEAREST);
- break;
- case PictFilterBilinear:
- txfilter = (RADEON_MAG_FILTER_LINEAR |
- RADEON_MIN_FILTER_LINEAR);
- break;
- default:
- ATI_FALLBACK(("Bad filter 0x%x\n", pPict->filter));
- }
-
- BEGIN_DMA(7);
- if (unit == 0) {
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_TXFILTER_0, 3));
- OUT_RING_REG(RADEON_REG_PP_TXFILTER_0, txfilter);
- OUT_RING_REG(RADEON_REG_PP_TXFORMAT_0, txformat);
- OUT_RING_REG(RADEON_REG_PP_TXOFFSET_0, txoffset);
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_TEX_SIZE_0, 2));
- OUT_RING_REG(RADEON_REG_PP_TEX_SIZE_0,
- (pPix->drawable.width - 1) |
- ((pPix->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT));
- OUT_RING_REG(RADEON_REG_PP_TEX_PITCH_0, txpitch - 32);
- } else {
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_TXFILTER_1, 3));
- OUT_RING_REG(RADEON_REG_PP_TXFILTER_1, txfilter);
- OUT_RING_REG(RADEON_REG_PP_TXFORMAT_1, txformat);
- OUT_RING_REG(RADEON_REG_PP_TXOFFSET_1, txoffset);
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_TEX_SIZE_1, 2));
- OUT_RING_REG(RADEON_REG_PP_TEX_SIZE_1,
- (pPix->drawable.width - 1) |
- ((pPix->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT));
- OUT_RING_REG(RADEON_REG_PP_TEX_PITCH_1, txpitch - 32);
- }
- END_DMA();
-
- if (pPict->transform != 0) {
- is_transform[unit] = TRUE;
- transform[unit] = pPict->transform;
- } else {
- is_transform[unit] = FALSE;
- }
-
- return TRUE;
-}
-
-Bool
-R100CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture)
-{
- CARD32 tmp1;
-
- /* Check for unsupported compositing operations. */
- if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0]))
- ATI_FALLBACK(("Unsupported Composite op 0x%x\n", op));
- if (pMaskPicture != NULL && pMaskPicture->componentAlpha &&
- RadeonBlendOp[op].src_alpha)
- ATI_FALLBACK(("Component alpha not supported with source "
- "alpha blending.\n"));
- if (pDstPicture->pDrawable->width >= (1 << 11) ||
- pDstPicture->pDrawable->height >= (1 << 11))
- ATI_FALLBACK(("Dest w/h too large (%d,%d).\n",
- pDstPicture->pDrawable->width,
- pDstPicture->pDrawable->height));
-
- if (!R100CheckCompositeTexture(pSrcPicture, 0))
- return FALSE;
- if (pMaskPicture != NULL && !R100CheckCompositeTexture(pMaskPicture, 1))
- return FALSE;
-
- if (pDstPicture->componentAlpha)
- return FALSE;
-
- if (!RadeonGetDestFormat(pDstPicture, &tmp1))
- return FALSE;
-
- return TRUE;
-}
-
-Bool
-R100PrepareComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture, PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
-{
- KdScreenPriv(pDst->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- CARD32 dst_format, dst_offset, dst_pitch;
- CARD32 pp_cntl, blendcntl, cblend, ablend;
- int pixel_shift;
- RING_LOCALS;
-
- accel_atis = atis;
-
- RadeonGetDestFormat(pDstPicture, &dst_format);
- pixel_shift = pDst->drawable.bitsPerPixel >> 4;
-
- dst_offset = ((CARD8 *)pDst->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
- dst_pitch = pDst->devKind;
- if ((dst_offset & 0x0f) != 0)
- ATI_FALLBACK(("Bad destination offset 0x%x\n", dst_offset));
- if (((dst_pitch >> pixel_shift) & 0x7) != 0)
- ATI_FALLBACK(("Bad destination pitch 0x%x\n", dst_pitch));
-
- if (!R100TextureSetup(pSrcPicture, pSrc, 0))
- return FALSE;
- pp_cntl = RADEON_TEX_0_ENABLE | RADEON_TEX_BLEND_0_ENABLE;
-
- if (pMask != NULL) {
- if (!R100TextureSetup(pMaskPicture, pMask, 1))
- return FALSE;
- pp_cntl |= RADEON_TEX_1_ENABLE;
- } else {
- is_transform[1] = FALSE;
- }
-
- ENTER_DRAW(pDst);
-
- RadeonSwitchTo3D(atis);
-
- BEGIN_DMA(12);
-
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_CNTL, 3));
- OUT_RING_REG(RADEON_REG_PP_CNTL, pp_cntl);
- OUT_RING_REG(RADEON_REG_RB3D_CNTL,
- dst_format | RADEON_ALPHA_BLEND_ENABLE);
- OUT_RING_REG(RADEON_REG_RB3D_COLOROFFSET, dst_offset);
-
- OUT_REG(RADEON_REG_RB3D_COLORPITCH, dst_pitch >> pixel_shift);
-
- /* IN operator: Multiply src by mask components or mask alpha.
- * BLEND_CTL_ADD is A * B + C.
- * If a picture is a8, we have to explicitly zero its color values.
- * If the destination is a8, we have to route the alpha to red, I think.
- */
- cblend = RADEON_BLEND_CTL_ADD | RADEON_CLAMP_TX |
- RADEON_COLOR_ARG_C_ZERO;
- ablend = RADEON_BLEND_CTL_ADD | RADEON_CLAMP_TX |
- RADEON_ALPHA_ARG_C_ZERO;
-
- if (pDstPicture->format == PICT_a8)
- cblend |= RADEON_COLOR_ARG_A_T0_ALPHA;
- else if (pSrcPicture->format == PICT_a8)
- cblend |= RADEON_COLOR_ARG_A_ZERO;
- else
- cblend |= RADEON_COLOR_ARG_A_T0_COLOR;
- ablend |= RADEON_ALPHA_ARG_A_T0_ALPHA;
-
- if (pMask) {
- if (pMaskPicture->componentAlpha &&
- pDstPicture->format != PICT_a8)
- cblend |= RADEON_COLOR_ARG_B_T1_COLOR;
- else
- cblend |= RADEON_COLOR_ARG_B_T1_ALPHA;
- ablend |= RADEON_ALPHA_ARG_B_T1_ALPHA;
- } else {
- cblend |= RADEON_COLOR_ARG_B_ZERO | RADEON_COMP_ARG_B;
- ablend |= RADEON_ALPHA_ARG_B_ZERO | RADEON_COMP_ARG_B;
- }
-
- OUT_REG(RADEON_REG_PP_TXCBLEND_0, cblend);
- OUT_REG(RADEON_REG_PP_TXABLEND_0, ablend);
-
- /* Op operator. */
- blendcntl = RadeonBlendOp[op].blend_cntl;
- if (PICT_FORMAT_A(pDstPicture->format) == 0 &&
- RadeonBlendOp[op].dst_alpha) {
- if ((blendcntl & RADEON_SBLEND_MASK) ==
- RADEON_SBLEND_GL_DST_ALPHA)
- blendcntl = (blendcntl & ~RADEON_SBLEND_MASK) |
- RADEON_SBLEND_GL_ONE;
- else if ((blendcntl & RADEON_SBLEND_MASK) ==
- RADEON_SBLEND_GL_INV_DST_ALPHA)
- blendcntl = (blendcntl & ~RADEON_SBLEND_MASK) |
- RADEON_SBLEND_GL_ZERO;
- }
- OUT_REG(RADEON_REG_RB3D_BLENDCNTL, blendcntl);
- END_DMA();
-
- LEAVE_DRAW(pDst);
-
- return TRUE;
-}
-
-static Bool
-R200CheckCompositeTexture(PicturePtr pPict, int unit)
-{
- int w = pPict->pDrawable->width;
- int h = pPict->pDrawable->height;
- int i;
-
- if ((w > 0x7ff) || (h > 0x7ff))
- ATI_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
-
- for (i = 0; i < sizeof(R200TexFormats) / sizeof(R200TexFormats[0]); i++)
- {
- if (R200TexFormats[i].fmt == pPict->format)
- break;
- }
- if (i == sizeof(R200TexFormats) / sizeof(R200TexFormats[0]))
- ATI_FALLBACK(("Unsupported picture format 0x%x\n",
- pPict->format));
-
- if (pPict->repeat && ((w & (w - 1)) != 0 || (h & (h - 1)) != 0))
- ATI_FALLBACK(("NPOT repeat unsupported (%dx%d)\n", w, h));
-
- if (pPict->filter != PictFilterNearest &&
- pPict->filter != PictFilterBilinear)
- ATI_FALLBACK(("Unsupported filter 0x%x\n", pPict->filter));
-
- return TRUE;
-}
-
-static Bool
-R200TextureSetup(PicturePtr pPict, PixmapPtr pPix, int unit)
-{
- ATIScreenInfo *atis = accel_atis;
- KdScreenPriv(pPix->drawable.pScreen);
- CARD32 txfilter, txformat, txoffset, txpitch;
- int w = pPict->pDrawable->width;
- int h = pPict->pDrawable->height;
- int i;
- RING_LOCALS;
-
- txpitch = pPix->devKind;
- txoffset = ((CARD8 *)pPix->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
-
- for (i = 0; i < sizeof(R200TexFormats) / sizeof(R200TexFormats[0]); i++)
- {
- if (R200TexFormats[i].fmt == pPict->format)
- break;
- }
- txformat = R200TexFormats[i].card_fmt;
- if (R200TexFormats[i].byte_swap)
- txoffset |= R200_TXO_ENDIAN_BYTE_SWAP;
-
- if (pPict->repeat) {
- txformat |= ATILog2(w) << R200_TXFORMAT_WIDTH_SHIFT;
- txformat |= ATILog2(h) << R200_TXFORMAT_HEIGHT_SHIFT;
- } else
- txformat |= R200_TXFORMAT_NON_POWER2;
- txformat |= unit << R200_TXFORMAT_ST_ROUTE_SHIFT;
-
- if ((txoffset & 0x1f) != 0)
- ATI_FALLBACK(("Bad texture offset 0x%x\n", txoffset));
- if ((txpitch & 0x1f) != 0)
- ATI_FALLBACK(("Bad texture pitch 0x%x\n", txpitch));
-
- switch (pPict->filter) {
- case PictFilterNearest:
- txfilter = (R200_MAG_FILTER_NEAREST |
- R200_MIN_FILTER_NEAREST);
- break;
- case PictFilterBilinear:
- txfilter = (R200_MAG_FILTER_LINEAR |
- R200_MIN_FILTER_LINEAR);
- break;
- default:
- ATI_FALLBACK(("Bad filter 0x%x\n", pPict->filter));
- }
-
- if (unit == 0) {
- BEGIN_DMA(6);
- OUT_RING(DMA_PACKET0(R200_REG_PP_TXFILTER_0 + 0x20 * unit, 5));
- OUT_RING_REG(R200_REG_PP_TXFILTER_0, txfilter);
- OUT_RING_REG(R200_REG_PP_TXFORMAT_0, txformat);
- OUT_RING_REG(R200_REG_PP_TXFORMAT_X_0, 0);
- OUT_RING_REG(R200_REG_PP_TXSIZE_0,
- (pPix->drawable.width - 1) |
- ((pPix->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT));
- OUT_RING_REG(R200_REG_PP_TXPITCH_0, txpitch - 32);
- END_DMA();
- } else {
- BEGIN_DMA(6);
- OUT_RING(DMA_PACKET0(R200_REG_PP_TXFILTER_1, 5));
- OUT_RING_REG(R200_REG_PP_TXFILTER_1, txfilter);
- OUT_RING_REG(R200_REG_PP_TXFORMAT_1, txformat);
- OUT_RING_REG(R200_REG_PP_TXFORMAT_X_1, 0);
- OUT_RING_REG(R200_REG_PP_TXSIZE_1,
- (pPix->drawable.width - 1) |
- ((pPix->drawable.height - 1) << RADEON_TEX_VSIZE_SHIFT));
- OUT_RING_REG(R200_REG_PP_TXPITCH_1, txpitch - 32);
- END_DMA();
- }
-
- BEGIN_DMA(2);
- OUT_REG(R200_PP_TXOFFSET_0 + 0x18 * unit, txoffset);
- END_DMA();
-
- if (pPict->transform != 0) {
- is_transform[unit] = TRUE;
- transform[unit] = pPict->transform;
- } else {
- is_transform[unit] = FALSE;
- }
-
- return TRUE;
-}
-
-Bool
-R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture)
-{
- CARD32 tmp1;
-
- /* Check for unsupported compositing operations. */
- if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0]))
- ATI_FALLBACK(("Unsupported Composite op 0x%x\n", op));
- if (pMaskPicture != NULL && pMaskPicture->componentAlpha &&
- RadeonBlendOp[op].src_alpha)
- ATI_FALLBACK(("Component alpha not supported with source "
- "alpha blending.\n"));
-
- if (!R200CheckCompositeTexture(pSrcPicture, 0))
- return FALSE;
- if (pMaskPicture != NULL && !R200CheckCompositeTexture(pMaskPicture, 1))
- return FALSE;
-
- if (!RadeonGetDestFormat(pDstPicture, &tmp1))
- return FALSE;
-
- return TRUE;
-}
-
-Bool
-R200PrepareComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture, PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
-{
- KdScreenPriv(pDst->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- CARD32 dst_format, dst_offset, dst_pitch;
- CARD32 pp_cntl, blendcntl, cblend, ablend;
- int pixel_shift;
- RING_LOCALS;
-
- RadeonGetDestFormat(pDstPicture, &dst_format);
- pixel_shift = pDst->drawable.bitsPerPixel >> 4;
-
- accel_atis = atis;
-
- dst_offset = ((CARD8 *)pDst->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
- dst_pitch = pDst->devKind;
- if ((dst_offset & 0x0f) != 0)
- ATI_FALLBACK(("Bad destination offset 0x%x\n", dst_offset));
- if (((dst_pitch >> pixel_shift) & 0x7) != 0)
- ATI_FALLBACK(("Bad destination pitch 0x%x\n", dst_pitch));
-
- if (!R200TextureSetup(pSrcPicture, pSrc, 0))
- return FALSE;
- pp_cntl = RADEON_TEX_0_ENABLE | RADEON_TEX_BLEND_0_ENABLE;
-
- if (pMask != NULL) {
- if (!R200TextureSetup(pMaskPicture, pMask, 1))
- return FALSE;
- pp_cntl |= RADEON_TEX_1_ENABLE;
- } else {
- is_transform[1] = FALSE;
- }
-
- RadeonSwitchTo3D(atis);
-
- BEGIN_DMA(17);
-
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_CNTL, 3));
- OUT_RING_REG(RADEON_REG_PP_CNTL, pp_cntl);
- OUT_RING_REG(RADEON_REG_RB3D_CNTL, dst_format | RADEON_ALPHA_BLEND_ENABLE);
- OUT_RING_REG(RADEON_REG_RB3D_COLOROFFSET, dst_offset);
-
- OUT_REG(R200_REG_SE_VTX_FMT_0, R200_VTX_XY);
- OUT_REG(R200_REG_SE_VTX_FMT_1,
- (2 << R200_VTX_TEX0_COMP_CNT_SHIFT) |
- (2 << R200_VTX_TEX1_COMP_CNT_SHIFT));
-
- OUT_REG(RADEON_REG_RB3D_COLORPITCH, dst_pitch >> pixel_shift);
-
- /* IN operator: Multiply src by mask components or mask alpha.
- * BLEND_CTL_ADD is A * B + C.
- * If a picture is a8, we have to explicitly zero its color values.
- * If the destination is a8, we have to route the alpha to red, I think.
- */
- cblend = R200_TXC_OP_MADD | R200_TXC_ARG_C_ZERO;
- ablend = R200_TXA_OP_MADD | R200_TXA_ARG_C_ZERO;
-
- if (pDstPicture->format == PICT_a8)
- cblend |= R200_TXC_ARG_A_R0_ALPHA;
- else if (pSrcPicture->format == PICT_a8)
- cblend |= R200_TXC_ARG_A_ZERO;
- else
- cblend |= R200_TXC_ARG_A_R0_COLOR;
- ablend |= R200_TXA_ARG_A_R0_ALPHA;
-
- if (pMask) {
- if (pMaskPicture->componentAlpha &&
- pDstPicture->format != PICT_a8)
- cblend |= R200_TXC_ARG_B_R1_COLOR;
- else
- cblend |= R200_TXC_ARG_B_R1_ALPHA;
- ablend |= R200_TXA_ARG_B_R1_ALPHA;
- } else {
- cblend |= R200_TXC_ARG_B_ZERO | R200_TXC_COMP_ARG_B;
- ablend |= R200_TXA_ARG_B_ZERO | R200_TXA_COMP_ARG_B;
- }
-
- OUT_RING(DMA_PACKET0(R200_REG_PP_TXCBLEND_0, 4));
- OUT_RING_REG(R200_REG_PP_TXCBLEND_0, cblend);
- OUT_RING_REG(R200_REG_PP_TXCBLEND2_0,
- R200_TXC_CLAMP_0_1 | R200_TXC_OUTPUT_REG_R0);
- OUT_RING_REG(R200_REG_PP_TXABLEND_0, ablend);
- OUT_RING_REG(R200_REG_PP_TXABLEND2_0,
- R200_TXA_CLAMP_0_1 | R200_TXA_OUTPUT_REG_R0);
-
- /* Op operator. */
- blendcntl = RadeonBlendOp[op].blend_cntl;
- if (PICT_FORMAT_A(pDstPicture->format) == 0 &&
- RadeonBlendOp[op].dst_alpha) {
- if ((blendcntl & RADEON_SBLEND_MASK) ==
- RADEON_SBLEND_GL_DST_ALPHA)
- blendcntl = (blendcntl & ~RADEON_SBLEND_MASK) |
- RADEON_SBLEND_GL_ONE;
- else if ((blendcntl & RADEON_SBLEND_MASK) ==
- RADEON_SBLEND_GL_INV_DST_ALPHA)
- blendcntl = (blendcntl & ~RADEON_SBLEND_MASK) |
- RADEON_SBLEND_GL_ZERO;
- }
- OUT_REG(RADEON_REG_RB3D_BLENDCNTL, blendcntl);
- END_DMA();
-
- return TRUE;
-}
-
-union intfloat {
- float f;
- CARD32 i;
-};
-
-struct blend_vertex {
- union intfloat x, y;
- union intfloat s0, t0;
- union intfloat s1, t1;
-};
-
-#define VTX_DWORD_COUNT 6
-
-#define VTX_OUT(_dstX, _dstY, _srcX, _srcY, _maskX, _maskY) \
-do { \
- OUT_RING_F(_dstX); \
- OUT_RING_F(_dstY); \
- OUT_RING_F(_srcX); \
- OUT_RING_F(_srcY); \
- OUT_RING_F(_maskX); \
- OUT_RING_F(_maskY); \
-} while (0)
-
-void
-RadeonComposite(int srcX, int srcY, int maskX, int maskY, int dstX, int dstY,
- int w, int h)
-{
- ATIScreenInfo *atis = accel_atis;
- ATICardInfo *atic = atis->atic;
- int srcXend, srcYend, maskXend, maskYend;
- RING_LOCALS;
- PictVector v;
-
- ENTER_DRAW(0);
-
- /*ErrorF("RadeonComposite (%d,%d) (%d,%d) (%d,%d) (%d,%d)\n",
- srcX, srcY, maskX, maskY,dstX, dstY, w, h);*/
-
- srcXend = srcX + w;
- srcYend = srcY + h;
- maskXend = maskX + w;
- maskYend = maskY + h;
- if (is_transform[0]) {
- v.vector[0] = IntToxFixed(srcX);
- v.vector[1] = IntToxFixed(srcY);
- v.vector[2] = xFixed1;
- PictureTransformPoint(transform[0], &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(transform[0], &v);
- srcXend = xFixedToInt(v.vector[0]);
- srcYend = xFixedToInt(v.vector[1]);
- }
- if (is_transform[1]) {
- v.vector[0] = IntToxFixed(maskX);
- v.vector[1] = IntToxFixed(maskY);
- v.vector[2] = xFixed1;
- PictureTransformPoint(transform[1], &v);
- maskX = xFixedToInt(v.vector[0]);
- maskY = xFixedToInt(v.vector[1]);
- v.vector[0] = IntToxFixed(maskXend);
- v.vector[1] = IntToxFixed(maskYend);
- v.vector[2] = xFixed1;
- PictureTransformPoint(transform[1], &v);
- maskXend = xFixedToInt(v.vector[0]);
- maskYend = xFixedToInt(v.vector[1]);
- }
-
- if (atic->is_r100) {
- BEGIN_DMA(4 * VTX_DWORD_COUNT + 3);
- OUT_RING(DMA_PACKET3(RADEON_CP_PACKET3_3D_DRAW_IMMD,
- 4 * VTX_DWORD_COUNT + 2));
- OUT_RING(RADEON_CP_VC_FRMT_XY |
- RADEON_CP_VC_FRMT_ST0 |
- RADEON_CP_VC_FRMT_ST1);
- OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_FAN |
- RADEON_CP_VC_CNTL_PRIM_WALK_RING |
- RADEON_CP_VC_CNTL_MAOS_ENABLE |
- RADEON_CP_VC_CNTL_VTX_FMT_RADEON_MODE |
- (4 << RADEON_CP_VC_CNTL_NUM_SHIFT));
- } else {
- BEGIN_DMA(4 * VTX_DWORD_COUNT + 2);
- OUT_RING(DMA_PACKET3(R200_CP_PACKET3_3D_DRAW_IMMD_2,
- 4 * VTX_DWORD_COUNT + 1));
- OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_FAN |
- RADEON_CP_VC_CNTL_PRIM_WALK_RING |
- (4 << RADEON_CP_VC_CNTL_NUM_SHIFT));
- }
-
- VTX_OUT(dstX, dstY, srcX, srcY, maskX, maskY);
- VTX_OUT(dstX, dstY + h, srcX, srcYend, maskX, maskYend);
- VTX_OUT(dstX + w, dstY + h, srcXend, srcYend, maskXend, maskYend);
- VTX_OUT(dstX + w, dstY, srcXend, srcY, maskXend, maskY);
-
- LEAVE_DRAW(0);
-
- END_DMA();
-}
-
-void
-RadeonDoneComposite(void)
-{
- ENTER_DRAW(0);
- LEAVE_DRAW(0);
-}
-
-Bool
-RadeonPrepareTrapezoids(PicturePtr pDstPicture, PixmapPtr pDst)
-{
- KdScreenPriv(pDst->drawable.pScreen);
- ATIScreenInfo(pScreenPriv);
- ATICardInfo(pScreenPriv);
- CARD32 dst_offset, dst_pitch;
- int pixel_shift;
- RING_LOCALS;
-
- pixel_shift = pDst->drawable.bitsPerPixel >> 4;
-
- accel_atis = atis;
-
- dst_offset = ((CARD8 *)pDst->devPrivate.ptr -
- pScreenPriv->screen->memory_base);
- dst_pitch = pDst->devKind;
- if ((dst_offset & 0x0f) != 0)
- ATI_FALLBACK(("Bad destination offset 0x%x\n", dst_offset));
- if (((dst_pitch >> pixel_shift) & 0x7) != 0)
- ATI_FALLBACK(("Bad destination pitch 0x%x\n", dst_pitch));
-
- RadeonSwitchTo3D(atis);
-
- BEGIN_DMA(8);
-
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_CNTL, 5));
- OUT_RING_REG(RADEON_REG_PP_CNTL, RADEON_TEX_BLEND_0_ENABLE);
- OUT_RING_REG(RADEON_REG_RB3D_CNTL,
- RADEON_COLOR_FORMAT_RGB8 | RADEON_ALPHA_BLEND_ENABLE);
- OUT_RING_REG(RADEON_REG_RB3D_COLOROFFSET, dst_offset);
- OUT_RING_REG(RADEON_REG_RE_WIDTH_HEIGHT,
- ((pDst->drawable.height - 1) << 16) |
- (pDst->drawable.width - 1));
- OUT_RING_REG(RADEON_REG_RB3D_COLORPITCH, dst_pitch >> pixel_shift);
- OUT_REG(RADEON_REG_RB3D_BLENDCNTL, RadeonBlendOp[PictOpAdd].blend_cntl);
- END_DMA();
-
- if (atic->is_r100) {
- BEGIN_DMA(4);
- OUT_RING(DMA_PACKET0(RADEON_REG_PP_TXCBLEND_0, 3));
- OUT_RING_REG(RADEON_REG_PP_TXCBLEND_0,
- RADEON_BLEND_CTL_ADD | RADEON_CLAMP_TX |
- RADEON_COLOR_ARG_C_TFACTOR_ALPHA);
- OUT_RING_REG(RADEON_REG_PP_TXABLEND_0,
- RADEON_BLEND_CTL_ADD | RADEON_CLAMP_TX |
- RADEON_ALPHA_ARG_C_TFACTOR_ALPHA);
- OUT_RING_REG(RADEON_REG_PP_TFACTOR_0, 0x01000000);
- END_DMA();
- } else if (atic->is_r200) {
- BEGIN_DMA(14);
- OUT_REG(R200_REG_SE_VTX_FMT_0, R200_VTX_XY);
- OUT_REG(R200_REG_SE_VTX_FMT_1, 0);
- OUT_REG(R200_REG_PP_TXCBLEND_0,
- R200_TXC_ARG_C_TFACTOR_COLOR);
- OUT_REG(R200_REG_PP_TXABLEND_0,
- R200_TXA_ARG_C_TFACTOR_ALPHA);
- OUT_REG(R200_REG_PP_TXCBLEND2_0, R200_TXC_OUTPUT_REG_R0);
- OUT_REG(R200_REG_PP_TXABLEND2_0, R200_TXA_OUTPUT_REG_R0);
- OUT_REG(RADEON_REG_PP_TFACTOR_0, 0x01000000);
- END_DMA();
- }
-
- return TRUE;
-}
-
-#define TRAP_VERT_RING_COUNT 2
-
-#define TRAP_VERT(_x, _y) \
-do { \
- OUT_RING_F((_x) + sample_x); \
- OUT_RING_F((_y) + sample_y); \
-} while (0)
-
-void
-RadeonTrapezoids(KaaTrapezoid *traps, int ntraps)
-{
- ATIScreenInfo *atis = accel_atis;
- ATICardInfo *atic = atis->atic;
- RING_LOCALS;
-
- while (ntraps > 0) {
- int i, sample, count, vertcount;
-
- count = 0xffff / 4 / sample_count;
- if (count > ntraps)
- count = ntraps;
- vertcount = count * sample_count * 4;
-
- if (atic->is_r100) {
- BEGIN_DMA(3 + vertcount * TRAP_VERT_RING_COUNT);
- OUT_RING(DMA_PACKET3(RADEON_CP_PACKET3_3D_DRAW_IMMD,
- 2 + vertcount * TRAP_VERT_RING_COUNT));
- OUT_RING(RADEON_CP_VC_FRMT_XY);
- OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_FAN |
- RADEON_CP_VC_CNTL_PRIM_WALK_RING |
- RADEON_CP_VC_CNTL_MAOS_ENABLE |
- RADEON_CP_VC_CNTL_VTX_FMT_RADEON_MODE |
- (vertcount << RADEON_CP_VC_CNTL_NUM_SHIFT));
- } else {
- BEGIN_DMA(2 + vertcount * TRAP_VERT_RING_COUNT);
- OUT_RING(DMA_PACKET3(R200_CP_PACKET3_3D_DRAW_IMMD_2,
- 1 + vertcount * TRAP_VERT_RING_COUNT));
- OUT_RING(RADEON_CP_VC_CNTL_PRIM_TYPE_TRI_FAN |
- RADEON_CP_VC_CNTL_PRIM_WALK_RING |
- (vertcount << RADEON_CP_VC_CNTL_NUM_SHIFT));
- }
-
- for (i = 0; i < count; i++) {
- for (sample = 0; sample < sample_count; sample++) {
- float sample_x = sample_offsets_x[sample];
- float sample_y = sample_offsets_y[sample];
- TRAP_VERT(traps[i].tl, traps[i].ty);
- TRAP_VERT(traps[i].bl, traps[i].by);
- TRAP_VERT(traps[i].br, traps[i].by);
- TRAP_VERT(traps[i].tr, traps[i].ty);
- }
- }
- END_DMA();
-
- ntraps -= count;
- traps += count;
- }
-}
-
-void
-RadeonDoneTrapezoids(void)
-{
- ATIScreenInfo *atis = accel_atis;
- RING_LOCALS;
-
- BEGIN_DMA(2);
- OUT_REG(RADEON_REG_RE_WIDTH_HEIGHT, 0xffffffff);
- END_DMA();
-}
diff --git a/hw/kdrive/ati/radeon_sarea.h b/hw/kdrive/ati/radeon_sarea.h
deleted file mode 100644
index 1d39bca52..000000000
--- a/hw/kdrive/ati/radeon_sarea.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright 2000 ATI Technologies Inc., Markham, Ontario,
- * 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@xfree86.org>
- * Gareth Hughes <gareth@valinux.com>
- *
- */
-
-#ifndef _RADEON_SAREA_H_
-#define _RADEON_SAREA_H_
-
-/* WARNING: If you change any of these defines, make sure to change the
- * defines in the kernel file (radeon_drm.h)
- */
-#ifndef __RADEON_SAREA_DEFINES__
-#define __RADEON_SAREA_DEFINES__
-
-/* What needs to be changed for the current vertex buffer? */
-#define RADEON_UPLOAD_CONTEXT 0x00000001
-#define RADEON_UPLOAD_VERTFMT 0x00000002
-#define RADEON_UPLOAD_LINE 0x00000004
-#define RADEON_UPLOAD_BUMPMAP 0x00000008
-#define RADEON_UPLOAD_MASKS 0x00000010
-#define RADEON_UPLOAD_VIEWPORT 0x00000020
-#define RADEON_UPLOAD_SETUP 0x00000040
-#define RADEON_UPLOAD_TCL 0x00000080
-#define RADEON_UPLOAD_MISC 0x00000100
-#define RADEON_UPLOAD_TEX0 0x00000200
-#define RADEON_UPLOAD_TEX1 0x00000400
-#define RADEON_UPLOAD_TEX2 0x00000800
-#define RADEON_UPLOAD_TEX0IMAGES 0x00001000
-#define RADEON_UPLOAD_TEX1IMAGES 0x00002000
-#define RADEON_UPLOAD_TEX2IMAGES 0x00004000
-#define RADEON_UPLOAD_CLIPRECTS 0x00008000 /* handled client-side */
-#define RADEON_REQUIRE_QUIESCENCE 0x00010000
-#define RADEON_UPLOAD_ZBIAS 0x00020000
-#define RADEON_UPLOAD_ALL 0x0002ffff
-#define RADEON_UPLOAD_CONTEXT_ALL 0x000201ff
-
-#define RADEON_FRONT 0x1
-#define RADEON_BACK 0x2
-#define RADEON_DEPTH 0x4
-#define RADEON_STENCIL 0x8
-
-/* Primitive types */
-#define RADEON_POINTS 0x1
-#define RADEON_LINES 0x2
-#define RADEON_LINE_STRIP 0x3
-#define RADEON_TRIANGLES 0x4
-#define RADEON_TRIANGLE_FAN 0x5
-#define RADEON_TRIANGLE_STRIP 0x6
-#define RADEON_3VTX_POINTS 0x9
-#define RADEON_3VTX_LINES 0xa
-
-/* Vertex/indirect buffer size */
-#define RADEON_BUFFER_SIZE 65536
-
-/* Byte offsets for indirect buffer data */
-#define RADEON_INDEX_PRIM_OFFSET 20
-#define RADEON_HOSTDATA_BLIT_OFFSET 32
-
-#define RADEON_SCRATCH_REG_OFFSET 32
-
-/* Keep these small for testing */
-#define RADEON_NR_SAREA_CLIPRECTS 12
-
-#define RADEON_MAX_TEXTURE_LEVELS 12
-#define RADEON_MAX_TEXTURE_UNITS 3
-
-/* Blits have strict offset rules. All blit offset must be aligned on
- * a 1K-byte boundary.
- */
-#define RADEON_OFFSET_SHIFT 10
-#define RADEON_OFFSET_ALIGN (1 << RADEON_OFFSET_SHIFT)
-#define RADEON_OFFSET_MASK (RADEON_OFFSET_ALIGN - 1)
-
-#endif /* __RADEON_SAREA_DEFINES__ */
-
-typedef struct {
- unsigned int red;
- unsigned int green;
- unsigned int blue;
- unsigned int alpha;
-} radeon_color_regs_t;
-
-typedef struct {
- /* Context state */
- unsigned int pp_misc;
- unsigned int pp_fog_color;
- unsigned int re_solid_color;
- unsigned int rb3d_blendcntl;
- unsigned int rb3d_depthoffset;
- unsigned int rb3d_depthpitch;
- unsigned int rb3d_zstencilcntl;
-
- unsigned int pp_cntl;
- unsigned int rb3d_cntl;
- unsigned int rb3d_coloroffset;
- unsigned int re_width_height;
- unsigned int rb3d_colorpitch;
- unsigned int se_cntl;
-
- /* Vertex format state */
- unsigned int se_coord_fmt;
-
- /* Line state */
- unsigned int re_line_pattern;
- unsigned int re_line_state;
-
- unsigned int se_line_width;
-
- /* Bumpmap state */
- unsigned int pp_lum_matrix;
-
- unsigned int pp_rot_matrix_0;
- unsigned int pp_rot_matrix_1;
-
- /* Mask state */
- unsigned int rb3d_stencilrefmask;
- unsigned int rb3d_ropcntl;
- unsigned int rb3d_planemask;
-
- /* Viewport state */
- unsigned int se_vport_xscale;
- unsigned int se_vport_xoffset;
- unsigned int se_vport_yscale;
- unsigned int se_vport_yoffset;
- unsigned int se_vport_zscale;
- unsigned int se_vport_zoffset;
-
- /* Setup state */
- unsigned int se_cntl_status;
-
- /* Misc state */
- unsigned int re_top_left;
- unsigned int re_misc;
-} radeon_context_regs_t;
-
-/* Setup registers for each texture unit */
-typedef struct {
- unsigned int pp_txfilter;
- unsigned int pp_txformat;
- unsigned int pp_txoffset;
- unsigned int pp_txcblend;
- unsigned int pp_txablend;
- unsigned int pp_tfactor;
- unsigned int pp_border_color;
-} radeon_texture_regs_t;
-
-typedef struct {
- /* The channel for communication of state information to the kernel
- * on firing a vertex buffer.
- */
- radeon_context_regs_t ContextState;
- radeon_texture_regs_t TexState[RADEON_MAX_TEXTURE_UNITS];
- unsigned int dirty;
- unsigned int vertsize;
- unsigned int vc_format;
-
- /* The current cliprects, or a subset thereof */
- XF86DRIClipRectRec boxes[RADEON_NR_SAREA_CLIPRECTS];
- unsigned int nbox;
-
- /* Counters for throttling of rendering clients */
- unsigned int last_frame;
- unsigned int last_dispatch;
- unsigned int last_clear;
-
- /* 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[ATI_NR_TEX_HEAPS][ATI_NR_TEX_REGIONS+1];
- /* last time texture was uploaded */
- unsigned int texAge[ATI_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 */
- int crtc2_base; /* for pageflipping with CloneMode */
-} RADEONSAREAPriv, *RADEONSAREAPrivPtr;
-
-#endif
diff --git a/hw/kdrive/chips/Makefile.am b/hw/kdrive/chips/Makefile.am
deleted file mode 100644
index 46e176051..000000000
--- a/hw/kdrive/chips/Makefile.am
+++ /dev/null
@@ -1,36 +0,0 @@
-INCLUDES = \
- @KDRIVE_INCS@ \
- -I$(top_srcdir)/hw/kdrive/vesa \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xchips
-
-noinst_LIBRARIES = libchips.a
-
-libchips_a_SOURCES = \
- chipsdraw.c \
- chips.c \
- chips.h
-
-Xchips_SOURCES = \
- chipsstub.c
-
-CHIPS_LIBS = \
- libchips.a \
- $(top_builddir)/hw/kdrive/vesa/libvesa.a \
- @KDRIVE_LIBS@
-
-if GLX
-Xchips_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xchips_LDADD = \
- $(CHIPS_LIBS) \
- @KDRIVE_LIBS@
-
-Xchips_DEPENDENCIES = \
- libchips.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/chips/chips.c b/hw/kdrive/chips/chips.c
deleted file mode 100644
index b419863eb..000000000
--- a/hw/kdrive/chips/chips.c
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "chips.h"
-#include "kaa.h"
-#include <sys/io.h>
-
-#undef CHIPS_DEBUG
-
-static Bool
-chipsCardInit (KdCardInfo *card)
-{
- ChipsCardInfo *chipsc;
-
- chipsc = (ChipsCardInfo *) xalloc (sizeof (ChipsCardInfo));
- if (!chipsc)
- return FALSE;
-
- iopl (3);
-
- if (!vesaInitialize (card, &chipsc->vesa))
- {
- xfree (chipsc);
- return FALSE;
- }
-
-#ifdef USE_PCI
- chipsc->window = (CARD32 *) (chipsc->cop_base + 0x10000);
-#else
- chipsc->window = 0;
-#endif
- card->driver = chipsc;
-
- return TRUE;
-}
-
-static Bool
-chipsScreenInit (KdScreenInfo *screen)
-{
- ChipsScreenInfo *chipss;
- int screen_size, memory;
-
- chipss = (ChipsScreenInfo *) xalloc (sizeof (ChipsScreenInfo));
- if (!chipss)
- return FALSE;
- memset (chipss, '\0', sizeof (ChipsScreenInfo));
- if (!vesaScreenInitialize (screen, &chipss->vesa))
- {
- xfree (chipss);
- return FALSE;
- }
-
- if (chipss->vesa.mapping != VESA_LINEAR)
- screen->dumb = TRUE;
- if (!screen->dumb)
- {
- chipss->mmio_base = (CARD8 *) KdMapDevice (CHIPS_MMIO_BASE(chipss),
- CHIPS_MMIO_SIZE(chipss));
-
- if (chipss->mmio_base)
- {
- KdSetMappedMode (CHIPS_MMIO_BASE(chipss),
- CHIPS_MMIO_SIZE(chipss),
- KD_MAPPED_MODE_REGISTERS);
- }
- else
- screen->dumb = TRUE;
- }
- else
- chipss->mmio_base = 0;
-
- chipss->screen = chipss->vesa.fb;
- memory = chipss->vesa.fb_size;
-
- screen_size = screen->fb[0].byteStride * screen->height;
-
- if (chipss->screen && memory >= screen_size + 2048)
- {
- memory -= 2048;
- chipss->cursor_base = chipss->screen + memory - 2048;
- }
- else
- chipss->cursor_base = 0;
- memory -= screen_size;
- if (memory > screen->fb[0].byteStride)
- {
- chipss->off_screen = chipss->screen + screen_size;
- chipss->off_screen_size = memory;
- }
- else
- {
- chipss->off_screen = 0;
- chipss->off_screen_size = 0;
- }
- screen->driver = chipss;
- return TRUE;
-}
-
-static Bool
-chipsInitScreen (ScreenPtr pScreen)
-{
- return vesaInitScreen (pScreen);
-}
-
-#ifdef RANDR
-static Bool
-chipsRandRSetConfig (ScreenPtr pScreen,
- Rotation rotation,
- int rate,
- RRScreenSizePtr pSize)
-{
- kaaWaitSync (pScreen);
-
- if (!vesaRandRSetConfig (pScreen, rotation, rate, pSize))
- return FALSE;
-
- return TRUE;
-}
-
-static void
-chipsRandRInit (ScreenPtr pScreen)
-{
- rrScrPriv(pScreen);
-
- pScrPriv->rrSetConfig = chipsRandRSetConfig;
-}
-#endif
-
-static Bool
-chipsFinishInitScreen (ScreenPtr pScreen)
-{
- Bool ret;
- ret = vesaFinishInitScreen (pScreen);
-#ifdef RANDR
- chipsRandRInit (pScreen);
-#endif
- return ret;
-}
-
-static Bool
-chipsCreateResources (ScreenPtr pScreen)
-{
- return vesaCreateResources (pScreen);
-}
-
-CARD8
-chipsReadXR (ChipsScreenInfo *chipss, CARD8 index)
-{
- CARD8 value;
- outb (index, 0x3d6);
- value = inb (0x3d7);
- return value;
-}
-
-void
-chipsWriteXR (ChipsScreenInfo *chipss, CARD8 index, CARD8 value)
-{
- outb (index, 0x3d6);
- outb (value, 0x3d7);
-}
-
-#if 0
-static CARD8
-chipsReadFR (ChipsScreenInfo *chipss, CARD8 index)
-{
- CARD8 value;
- outb (index, 0x3d0);
- value = inb (0x3d1);
- return value;
-}
-
-static void
-chipsWriteFR (ChipsScreenInfo *chipss, CARD8 index, CARD8 value)
-{
- outb (index, 0x3d0);
- outb (value, 0x3d1);
-}
-
-static CARD8
-chipsReadSeq (ChipsScreenInfo *chipss, CARD8 index)
-{
- CARD8 value;
- outb (index, 0x3c4);
- value = inb (0x3c5);
- return value;
-}
-
-static void
-chipsWriteSeq (ChipsScreenInfo *chipss, CARD8 index, CARD8 value)
-{
- outb (index, 0x3c4);
- outb (value, 0x3c5);
-}
-#endif
-
-static void
-chipsPreserve (KdCardInfo *card)
-{
- vesaPreserve(card);
-}
-
-static void
-chipsSetMMIO (ChipsCardInfo *chipsc)
-{
-}
-
-static void
-chipsResetMMIO (ChipsCardInfo *chipsc)
-{
-}
-
-static Bool
-chipsEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- ChipsCardInfo *chipsc = pScreenPriv->card->driver;
-
- if (!vesaEnable (pScreen))
- return FALSE;
- chipsSetMMIO (chipsc);
- return TRUE;
-}
-
-#if 0
-static Bool
-chipsDPMS (ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- chipsScreenInfo(pScreenPriv);
-
- ErrorF ("seqreg 0x01 0x%x\n", chipsReadSeq (chipss, 0x1));
- ErrorF ("dpmsreg XR61 0x%x\n", chipsReadXR (chipss, 0x61));
- ErrorF ("dpmsreg XR73 0x%x\n", chipsReadXR (chipss, 0x73));
-
- ErrorF ("flat panel FR05 0x%x\n", chipsReadFR (chipss, 0x5));
- ErrorF ("flat panel XR52 0x%x\n", chipsReadXR (chipss, 0x52));
- return TRUE;
-}
-#endif
-
-static void
-chipsDisable (ScreenPtr pScreen)
-{
- vesaDisable (pScreen);
-}
-
-static void
-chipsRestore (KdCardInfo *card)
-{
- ChipsCardInfo *chipsc = card->driver;
-
- chipsResetMMIO (chipsc);
- vesaRestore (card);
-}
-
-static void
-chipsScreenFini (KdScreenInfo *screen)
-{
- ChipsScreenInfo *chipss = (ChipsScreenInfo *) screen->driver;
-
- if (chipss->mmio_base)
- {
- KdUnmapDevice ((void *) chipss->mmio_base, CHIPS_MMIO_SIZE(chipss));
- KdResetMappedMode (CHIPS_MMIO_BASE(chipss),
- CHIPS_MMIO_SIZE(chipss),
- KD_MAPPED_MODE_REGISTERS);
- }
- vesaScreenFini (screen);
- xfree (chipss);
- screen->driver = 0;
-}
-
-static void
-chipsCardFini (KdCardInfo *card)
-{
- vesaCardFini (card);
-}
-
-#define chipsCursorInit (void *) 0
-#define chipsCursorEnable (void *) 0
-#define chipsCursorDisable (void *) 0
-#define chipsCursorFini (void *) 0
-#define chipsRecolorCursor (void *) 0
-
-KdCardFuncs chipsFuncs = {
- chipsCardInit, /* cardinit */
- chipsScreenInit, /* scrinit */
- chipsInitScreen, /* initScreen */
- chipsFinishInitScreen, /* finishInitScreen */
- chipsCreateResources, /* createRes */
- chipsPreserve, /* preserve */
- chipsEnable, /* enable */
- vesaDPMS, /* dpms */
- chipsDisable, /* disable */
- chipsRestore, /* restore */
- chipsScreenFini, /* scrfini */
- chipsCardFini, /* cardfini */
-
- chipsCursorInit, /* initCursor */
- chipsCursorEnable, /* enableCursor */
- chipsCursorDisable, /* disableCursor */
- chipsCursorFini, /* finiCursor */
- chipsRecolorCursor, /* recolorCursor */
-
- chipsDrawInit, /* initAccel */
- chipsDrawEnable, /* enableAccel */
- chipsDrawDisable, /* disableAccel */
- chipsDrawFini, /* finiAccel */
-
- vesaGetColors, /* getColors */
- vesaPutColors, /* putColors */
-};
diff --git a/hw/kdrive/chips/chips.h b/hw/kdrive/chips/chips.h
deleted file mode 100644
index 6ad17fe25..000000000
--- a/hw/kdrive/chips/chips.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _CHIPS_H_
-#define _CHIPS_H_
-#include <vesa.h>
-
-/*
- * offset from ioport beginning
- */
-
-#define HIQV
-#ifdef HIQV
-#define CHIPS_MMIO_BASE(c) ((c)->vesa.fb_phys + 0x400000)
-#else
-#define CHIPS_MMIO_BASE(c) ((c)->vesa.fb_phys + 0x200000)
-#endif
-#define CHIPS_MMIO_SIZE(c) (0x20000)
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-typedef struct _chipsSave {
- int dummy;
-} ChipsSave;
-
-typedef struct _chipsCardInfo {
- VesaCardPrivRec vesa;
- CARD32 *window;
- Bool mmio;
- ChipsSave save;
-} ChipsCardInfo;
-
-#define getChipsCardInfo(kd) ((ChipsCardInfo *) ((kd)->card->driver))
-#define chipsCardInfo(kd) ChipsCardInfo *chipsc = getChipsCardInfo(kd)
-
-typedef struct _chipsCursor {
- int width, height;
- int xhot, yhot;
- Bool has_cursor;
- CursorPtr pCursor;
- Pixel source, mask;
-} ChipsCursor;
-
-#define CHIPS_CURSOR_WIDTH 64
-#define CHIPS_CURSOR_HEIGHT 64
-
-typedef struct _chipsScreenInfo {
- VesaScreenPrivRec vesa;
- CARD8 *mmio_base;
- CARD8 *cursor_base;
- CARD8 *screen;
- CARD8 *off_screen;
- int off_screen_size;
- ChipsCursor cursor;
- KaaScreenInfoRec kaa;
-} ChipsScreenInfo;
-
-#define getChipsScreenInfo(kd) ((ChipsScreenInfo *) ((kd)->screen->driver))
-#define chipsScreenInfo(kd) ChipsScreenInfo *chipss = getChipsScreenInfo(kd)
-
-Bool
-chipsDrawInit (ScreenPtr pScreen);
-
-void
-chipsDrawEnable (ScreenPtr pScreen);
-
-void
-chipsDrawDisable (ScreenPtr pScreen);
-
-void
-chipsDrawFini (ScreenPtr pScreen);
-
-CARD8
-chipsReadXR (ChipsScreenInfo *chipsc, CARD8 index);
-
-void
-chipsWriteXR (ChipsScreenInfo *chipsc, CARD8 index, CARD8 value);
-
-Bool
-chipsCursorInit (ScreenPtr pScreen);
-
-void
-chipsCursorEnable (ScreenPtr pScreen);
-
-void
-chipsCursorDisable (ScreenPtr pScreen);
-
-void
-chipsCursorFini (ScreenPtr pScreen);
-
-void
-chipsRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef);
-
-extern KdCardFuncs chipsFuncs;
-
-#endif /* _CHIPS_H_ */
diff --git a/hw/kdrive/chips/chipsdraw.c b/hw/kdrive/chips/chipsdraw.c
deleted file mode 100644
index b1c35f901..000000000
--- a/hw/kdrive/chips/chipsdraw.c
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "chips.h"
-
-#include <X11/Xmd.h>
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-#include "kaa.h"
-
-CARD8 chipsBltRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0x88, /* src AND dst */
- /* GXandReverse */ 0x44, /* src AND NOT dst */
- /* GXcopy */ 0xcc, /* src */
- /* GXandInverted*/ 0x22, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x66, /* src XOR dst */
- /* GXor */ 0xee, /* src OR dst */
- /* GXnor */ 0x11, /* NOT src AND NOT dst */
- /* GXequiv */ 0x99, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xdd, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x33, /* NOT src */
- /* GXorInverted */ 0xbb, /* NOT src OR dst */
- /* GXnand */ 0x77, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-CARD8 chipsSolidRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0xa0, /* src AND dst */
- /* GXandReverse */ 0x50, /* src AND NOT dst */
- /* GXcopy */ 0xf0, /* src */
- /* GXandInverted*/ 0x0a, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x5a, /* src XOR dst */
- /* GXor */ 0xfa, /* src OR dst */
- /* GXnor */ 0x05, /* NOT src AND NOT dst */
- /* GXequiv */ 0xa5, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xf5, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x0f, /* NOT src */
- /* GXorInverted */ 0xaf, /* NOT src OR dst */
- /* GXnand */ 0x5f, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-/* Definitions for the Chips and Technology BitBLT engine communication. */
-/* These are done using Memory Mapped IO, of the registers */
-/* BitBLT modes for register 93D0. */
-
-#ifdef HIQV
-#define ctPATCOPY 0xF0
-#define ctLEFT2RIGHT 0x000
-#define ctRIGHT2LEFT 0x100
-#define ctTOP2BOTTOM 0x000
-#define ctBOTTOM2TOP 0x200
-#define ctSRCSYSTEM 0x400
-#define ctDSTSYSTEM 0x800
-#define ctSRCMONO 0x1000
-#define ctBGTRANSPARENT 0x22000
-#define ctCOLORTRANSENABLE 0x4000
-#define ctCOLORTRANSDISABLE 0x0
-#define ctCOLORTRANSDST 0x8000
-#define ctCOLORTRANSROP 0x0
-#define ctCOLORTRANSEQUAL 0x10000L
-#define ctCOLORTRANSNEQUAL 0x0
-#define ctPATMONO 0x40000L
-#define ctPATSOLID 0x80000L
-#define ctPATSTART0 0x000000L
-#define ctPATSTART1 0x100000L
-#define ctPATSTART2 0x200000L
-#define ctPATSTART3 0x300000L
-#define ctPATSTART4 0x400000L
-#define ctPATSTART5 0x500000L
-#define ctPATSTART6 0x600000L
-#define ctPATSTART7 0x700000L
-#define ctSRCFG 0x000000L /* Where is this for the 65550?? */
-#else
-#define ctPATCOPY 0xF0
-#define ctTOP2BOTTOM 0x100
-#define ctBOTTOM2TOP 0x000
-#define ctLEFT2RIGHT 0x200
-#define ctRIGHT2LEFT 0x000
-#define ctSRCFG 0x400
-#define ctSRCMONO 0x800
-#define ctPATMONO 0x1000
-#define ctBGTRANSPARENT 0x2000
-#define ctSRCSYSTEM 0x4000
-#define ctPATSOLID 0x80000L
-#define ctPATSTART0 0x00000L
-#define ctPATSTART1 0x10000L
-#define ctPATSTART2 0x20000L
-#define ctPATSTART3 0x30000L
-#define ctPATSTART4 0x40000L
-#define ctPATSTART5 0x50000L
-#define ctPATSTART6 0x60000L
-#define ctPATSTART7 0x70000L
-#endif
-
-#define chipsFillPix(bpp,pixel) {\
- if (bpp == 8) \
- { \
- pixel = pixel & 0xff; \
- } \
- else if (bpp == 16) \
- { \
- pixel = pixel & 0xffff; \
- } \
-}
-
-static VOL8 *mmio;
-static CARD32 byteStride;
-static CARD32 bytesPerPixel;
-static CARD32 pixelStride;
-
-static void
-chipsSet (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- chipsScreenInfo(pScreenPriv);
-
- mmio = chipss->mmio_base;
- byteStride = pScreenPriv->screen->fb[0].byteStride;
- bytesPerPixel = pScreenPriv->screen->fb[0].bitsPerPixel >> 3;
- pixelStride = pScreenPriv->screen->fb[0].pixelStride;
-}
-
-#ifdef HIQV
-#define CHIPS_BR0 0x00 /* offset */
-#define CHIPS_BR1 0x04 /* bg */
-#define CHIPS_BR2 0x08 /* fg */
-#define CHIPS_BR3 0x0c /* monochrome */
-#define CHIPS_BR4 0x10 /* bitblt */
-#define CHIPS_BR5 0x14 /* pattern addr */
-#define CHIPS_BR6 0x18 /* source addr */
-#define CHIPS_BR7 0x1c /* dst addr */
-#define CHIPS_BR8 0x20 /* dst w/h */
-#else
-#define CHIPS_DR0 0x83d0
-#define CHIPS_DR1 0x87d0
-#define CHIPS_DR2 0x8bd0
-#define CHIPS_DR3 0x8fd0
-#define CHIPS_DR4 0x93d0
-#define CHIPS_DR5 0x97d0
-#define CHIPS_DR6 0x9bd0
-#define CHIPS_DR7 0x9fd0
-#endif
-
-#define DBG(x)
-
-static void
-chipsPitch (int src, int dst)
-{
- CARD32 p;
-
- p = ((dst & 0xffff) << 16) | (src & 0xffff);
- DBG(ErrorF ("\tpitch 0x%x\n", p));
-#ifdef HIQV
- *(VOL32 *) (mmio + CHIPS_BR0) = p;
-#else
- *(VOL32 *) (mmio + CHIPS_DR0) = p;
-#endif
-}
-
-static void
-chipsBg (Pixel bg)
-{
- DBG(ErrorF ("\tbg 0x%x\n", bg));
-#ifdef HIQV
- *(VOL32 *) (mmio + CHIPS_BR1) = bg & 0xffff;
-#else
- *(VOL32 *) (mmio + CHIPS_DR2) = bg;
-#endif
-}
-
-static void
-chipsFg (Pixel fg)
-{
- DBG(ErrorF ("\tfg 0x%x\n", fg));
-#ifdef HIQV
- *(VOL32 *) (mmio + CHIPS_BR2) = fg;
-#else
- *(VOL32 *) (mmio + CHIPS_DR3) = fg;
-#endif
-}
-
-static void
-chipsOp (CARD32 op)
-{
- DBG(ErrorF ("\top 0x%x\n", op));
-#ifdef HIQV
- *(VOL32 *) (mmio + CHIPS_BR4) = op;
-#else
- *(VOL32 *) (mmio + CHIPS_DR4) = op;
-#endif
-}
-
-static void
-chipsRopSolid (int rop)
-{
- CARD32 op;
-
- op = chipsSolidRop[rop] | ctTOP2BOTTOM | ctLEFT2RIGHT | ctPATSOLID | ctPATMONO;
- chipsOp (op);
-}
-
-static void
-chipsSrc (int addr)
-{
- DBG(ErrorF ("\tsrc 0x%x\n", addr));
-#ifdef HIQV
- *(VOL32 *) (mmio + CHIPS_BR6) = addr;
-#else
- *(VOL32 *) (mmio + CHIPS_DR5) = addr;
-#endif
-}
-
-static void
-chipsDst (int addr)
-{
- DBG(ErrorF ("\tdst 0x%x\n", addr));
-#ifdef HIQV
- *(VOL32 *) (mmio + CHIPS_BR7) = addr;
-#else
- *(VOL32 *) (mmio + CHIPS_DR6) = addr;
-#endif
-}
-
-static void
-chipsWidthHeightGo (int w, int h)
-{
- DBG(ErrorF ("\twidth height %d/%d\n", w, h));
-#ifdef HIQV
- *(VOL32 *) (mmio + CHIPS_BR8) = ((h & 0xffff) << 16) | (w & 0xffff);
-#else
- *(VOL32 *) (mmio + CHIPS_DR7) = ((h & 0xffff) << 16) | (w & 0xffff);
-#endif
-}
-
-static void
-chipsWaitIdle (void)
-{
-#ifdef HIQV
- int timeout = 0;
- CARD8 tmp;
- VOL32 *br4 = (VOL32 *) (mmio + CHIPS_BR4);
-
- DBG(ErrorF ("\tBR4 0x%x 0x%x\n", mmio + CHIPS_BR4, *br4));
- DBG(ErrorF ("\tXR20 0x%x\n", chipsReadXR (0, 0x20)));
- for (;;)
- {
- if ((*br4 & 0x80000000) == 0)
- break;
- tmp = chipsReadXR (0, 0x20);
- if ((tmp & 1) == 0)
- break;
- if (++timeout > 1000000)
- {
- ErrorF ("timeout\n");
- tmp = chipsReadXR (0, 0x20);
- chipsWriteXR (0, 0x20, tmp | 2);
- sleep (1);
- chipsWriteXR (0, 0x20, tmp);
- sleep (1);
- }
- }
-#else
- while (*(VOL32 *) (mmio + CHIPS_DR4) & 0x00100000)
- ;
-#endif
-}
-
-static void
-chipsWaitMarker (ScreenPtr pScreen, int marker)
-{
- chipsSet (pScreen);
- chipsWaitIdle ();
-}
-
-static Bool
-chipsPrepareSolid (PixmapPtr pPixmap,
- int alu,
- Pixel pm,
- Pixel fg)
-{
- FbBits depthMask;
-
- DBG(ErrorF ("PrepareSolid %d 0x%x\n", alu, fg));
- depthMask = FbFullMask(pPixmap->drawable.depth);
- if ((pm & depthMask) != depthMask)
- return FALSE;
- else
- {
- chipsSet (pPixmap->drawable.pScreen);
- chipsWaitIdle ();
- chipsFillPix(pPixmap->drawable.bitsPerPixel,fg);
- chipsFg (fg);
- chipsBg (fg);
- chipsRopSolid (alu);
- chipsPitch (byteStride, byteStride);
- return TRUE;
- }
-}
-
-static void
-chipsSolid (int x1, int y1, int x2, int y2)
-{
- CARD32 dst;
- int w, h;
-
- DBG(ErrorF (" Solid %dx%d %dx%d\n", x1, y1, x2, y2));
- dst = y1 * byteStride + x1 * bytesPerPixel;
- w = (x2 - x1) * bytesPerPixel;
- h = (y2 - y1);
- chipsWaitIdle ();
- chipsDst (dst);
- chipsWidthHeightGo (w, h);
-}
-
-static void
-chipsDoneSolid (void)
-{
-}
-
-static CARD32 copyOp;
-
-static Bool
-chipsPrepareCopy (PixmapPtr pSrcPixmap,
- PixmapPtr pDstPixmap,
- int dx,
- int dy,
- int alu,
- Pixel pm)
-{
- FbBits depthMask;
-
- DBG(ErrorF ("PrepareSolid %d 0x%x\n", alu, fg));
- depthMask = FbFullMask(pDstPixmap->drawable.depth);
- if ((pm & depthMask) != depthMask)
- return FALSE;
- else
- {
- copyOp = chipsBltRop[alu];
- if (dy >= 0)
- copyOp |= ctTOP2BOTTOM;
- else
- copyOp |= ctBOTTOM2TOP;
- if (dx >= 0)
- copyOp |= ctLEFT2RIGHT;
- else
- copyOp |= ctRIGHT2LEFT;
- chipsSet (pDstPixmap->drawable.pScreen);
- chipsWaitIdle ();
- chipsOp (copyOp);
- chipsPitch (byteStride, byteStride);
- return TRUE;
- }
-}
-
-static void
-chipsCopy (int srcX,
- int srcY,
- int dstX,
- int dstY,
- int w,
- int h)
-{
- int src, dst;
- if ((copyOp & (ctTOP2BOTTOM|ctBOTTOM2TOP)) == ctBOTTOM2TOP)
- {
- src = (srcY + h - 1) * byteStride;
- dst = (dstY + h - 1) * byteStride;
- }
- else
- {
- src = srcY * byteStride;
- dst = dstY * byteStride;
- }
- if ((copyOp & (ctLEFT2RIGHT|ctRIGHT2LEFT)) == ctRIGHT2LEFT)
- {
- src = src + (srcX + w) * bytesPerPixel - 1;
- dst = dst + (dstX + w) * bytesPerPixel - 1;
- }
- else
- {
- src = src + srcX * bytesPerPixel;
- dst = dst + dstX * bytesPerPixel;
- }
- chipsWaitIdle ();
- chipsSrc (src);
- chipsDst (dst);
- chipsWidthHeightGo (w * bytesPerPixel, h);
-}
-
-static void
-chipsDoneCopy (void)
-{
-}
-
-Bool
-chipsDrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- chipsScreenInfo(pScreenPriv);
-
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 8:
- case 16:
- break;
- default:
- return FALSE;
- }
-
- memset(&chipss->kaa, 0, sizeof(KaaScreenInfoRec));
- chipss->kaa.waitMarker = chipsWaitMarker;
- chipss->kaa.PrepareSolid = chipsPrepareSolid;
- chipss->kaa.Solid = chipsSolid;
- chipss->kaa.DoneSolid = chipsDoneSolid;
- chipss->kaa.PrepareCopy = chipsPrepareCopy;
- chipss->kaa.Copy = chipsCopy;
- chipss->kaa.DoneCopy = chipsDoneCopy;
-
- if (!kaaDrawInit (pScreen, &chipss->kaa))
- return FALSE;
-
- return TRUE;
-}
-
-void
-chipsDrawEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- chipsScreenInfo(pScreenPriv);
- CARD8 mode = 0x00;
-
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 8:
- mode = 0x00;
- break;
- case 16:
- mode = 0x10;
- break;
- }
- chipsSet (pScreen);
- chipsWaitIdle ();
- chipsWriteXR (chipss, 0x20, mode);
-
- kaaMarkSync (pScreen);
-}
-
-void
-chipsDrawDisable (ScreenPtr pScreen)
-{
-}
-
-void
-chipsDrawFini (ScreenPtr pScreen)
-{
-}
-
diff --git a/hw/kdrive/chips/chipsstub.c b/hw/kdrive/chips/chipsstub.c
deleted file mode 100644
index 9024a7d44..000000000
--- a/hw/kdrive/chips/chipsstub.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "chips.h"
-
-extern int chips_clk, chips_mclk;
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
-
- KdCardInfoAdd (&chipsFuncs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
- vesaUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- if (!(ret = vesaProcessArgument (argc, argv, i)))
- ret = KdProcessArgument(argc, argv, i);
- return ret;
-}
diff --git a/hw/kdrive/epson/Makefile.am b/hw/kdrive/epson/Makefile.am
deleted file mode 100644
index 14bb04996..000000000
--- a/hw/kdrive/epson/Makefile.am
+++ /dev/null
@@ -1,36 +0,0 @@
-INCLUDES = \
- @KDRIVE_INCS@ \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xepson
-
-noinst_LIBRARIES = libepson.a
-
-libepson_a_SOURCES = \
- epson13806.c \
- epson13806.h \
- epson13806draw.c\
- epson13806draw.h\
- epson13806reg.h
-
-Xepson_SOURCES = \
- epson13806stub.c
-
-EPSON_LIBS = \
- libepson.a \
- @KDRIVE_LIBS@
-
-if GLX
-Xepson_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xepson_LDADD = \
- $(EPSON_LIBS) \
- @KDRIVE_LIBS@
-
-Xepson_DEPENDENCIES = \
- libepson.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/epson/Xepson.man b/hw/kdrive/epson/Xepson.man
deleted file mode 100644
index 96aab813e..000000000
--- a/hw/kdrive/epson/Xepson.man
+++ /dev/null
@@ -1,26 +0,0 @@
-.\" $XFree86: xc/programs/Xserver/hw/kdrive/epson/Xepson.man,v 1.5 2001/02/13 21:15:15 dawes Exp $
-.\"
-.TH Xepson 1 __vendorversion__
-.SH NAME
-Xepson \- Epson 13806 accelerated framebuffer device tiny X server
-.SH SYNOPSIS
-.B Xepson
-.RI [ :display ]
-.RI [ option ...]
-.SH DESCRIPTION
-.B Xepson
-is a driver for the Epson LCD 13806 framebuffer.
-.B Xepson
-is heavily based upon the Kdrive Xfbdev driver, and behaves very similarly, except for accelerated operations targetted at the Epson chip.
-.SH OPTIONS
-.B Xepson
-accepts the common options of the Xkdrive family of servers. Please
-see Xkdrive(1).
-.SH KEYBOARD
-To be written.
-.SH SEE ALSO
-X(__miscmansuffix__), Xserver(1), Xkdrive(1), xdm(1), xinit(1).
-.SH AUTHORS
-The
-.B Xepson
-server was written by Costas Stylianou based on the Xfbdev sources with some contributions from Phil Blundell & Peter Naulls.
diff --git a/hw/kdrive/epson/epson13806.c b/hw/kdrive/epson/epson13806.c
deleted file mode 100644
index 6cf8c9ad9..000000000
--- a/hw/kdrive/epson/epson13806.c
+++ /dev/null
@@ -1,604 +0,0 @@
-/*
- * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
- *
- * 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 Costas Sylianou not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Costas Stylianou makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL COSTAS STYLIANOU 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.
- */
-/*
- * epson13806.c - Implementation of hardware accelerated functions for
- * Epson S1D13806 graphics controller.
- *
- * History:
- * 28-Jan-04 C.Stylianou PRJ NBL: Created from fbdev.c.
- * 30-Mar-04 Phil Blundell/Peter Naulls Integration with XFree 4.3
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-
-#include <sys/ioctl.h>
-
-#include "epson13806.h"
-#include "epson13806reg.h"
-
-extern int KdTsPhyScreen;
-
-Bool
-epsonInitialize (KdCardInfo *card, EpsonPriv *priv)
-{
- int k;
- unsigned long off;
- if ((priv->fd = open("/dev/fb0", O_RDWR)) < 0) {
- perror("Error opening /dev/fb0\n");
- return FALSE;
- }
-
- if ((k=ioctl(priv->fd, FBIOGET_FSCREENINFO, &priv->fix)) < 0) {
- perror("Error with /dev/fb ioctl FIOGET_FSCREENINFO");
- close (priv->fd);
- return FALSE;
- }
-
- if ((k=ioctl(priv->fd, FBIOGET_VSCREENINFO, &priv->var)) < 0) {
- perror("Error with /dev/fb ioctl FIOGET_VSCREENINFO");
- close (priv->fd);
- return FALSE;
- }
-
- priv->fb_base = KdMapDevice (EPSON13806_PHYSICAL_VMEM_ADDR, EPSON13806_VMEM_SIZE);
-
-
- if (priv->fb_base == (char *)-1) {
- perror("ERROR: mmap framebuffer fails!");
- close (priv->fd);
- return FALSE;
- }
-
- off = (unsigned long) priv->fix.smem_start % (unsigned long) getpagesize();
- priv->fb = priv->fb_base + off;
- return TRUE;
-}
-
-Bool
-epsonCardInit (KdCardInfo *card)
-{
- EpsonPriv *priv;
-
- priv = (EpsonPriv *) xalloc (sizeof (EpsonPriv));
- if (!priv)
- return FALSE;
-
- if (!epsonInitialize (card, priv))
- {
- xfree (priv);
- return FALSE;
- }
- card->driver = priv;
-
- // Call InitEpson to map onto Epson registers
- initEpson13806();
-
- return TRUE;
-}
-
-#define FBDEV_KLUDGE_FORMAT
-#ifdef FBDEV_KLUDGE_FORMAT
-static Pixel
-epsonMakeContig (Pixel orig, Pixel others)
-{
- Pixel low;
-
- low = lowbit (orig) >> 1;
- while (low && (others & low) == 0)
- {
- orig |= low;
- low >>= 1;
- }
- return orig;
-}
-#endif
-
-Bool
-epsonScreenInitialize (KdScreenInfo *screen, EpsonScrPriv *scrpriv)
-{
- EpsonPriv *priv = screen->card->driver;
- Pixel allbits;
- int depth;
- Bool gray;
- depth = priv->var.bits_per_pixel;
- gray = priv->var.grayscale;
-
-
- screen->fb[0].visuals = (1 << TrueColor);
-#define Mask(o,l) (((1 << l) - 1) << o)
- screen->fb[0].redMask = Mask (priv->var.red.offset, priv->var.red.length);
- screen->fb[0].greenMask = Mask (priv->var.green.offset, priv->var.green.length);
- screen->fb[0].blueMask = Mask (priv->var.blue.offset, priv->var.blue.length);
-#ifdef FBDEV_KLUDGE_FORMAT
- /*
- * This is a kludge so that Render will work -- fill in the gaps
- * in the pixel
- */
- screen->fb[0].redMask = epsonMakeContig (screen->fb[0].redMask,
- screen->fb[0].greenMask|
- screen->fb[0].blueMask);
-
- screen->fb[0].greenMask = epsonMakeContig (screen->fb[0].greenMask,
- screen->fb[0].redMask|
- screen->fb[0].blueMask);
-
- screen->fb[0].blueMask = epsonMakeContig (screen->fb[0].blueMask,
- screen->fb[0].redMask|
- screen->fb[0].greenMask);
-
-#endif
- allbits = screen->fb[0].redMask | screen->fb[0].greenMask | screen->fb[0].blueMask;
- depth = 32;
- while (depth && !(allbits & (1 << (depth - 1))))
- depth--;
-
- screen->rate = 60;
- scrpriv->randr = screen->randr;
-
- {
- screen->fb[0].depth = depth;
- screen->fb[0].bitsPerPixel = priv->var.bits_per_pixel;
- screen->width = priv->var.xres;
- screen->height = priv->var.yres;
- screen->fb[0].byteStride = priv->fix.line_length;
- screen->fb[0].pixelStride = (priv->fix.line_length * 8 /
- priv->var.bits_per_pixel);
- screen->fb[0].frameBuffer = (CARD8 *) (priv->fb);
- screen->off_screen_base = screen->fb[0].byteStride * screen->height;
- screen->memory_base = priv->fb;
- screen->memory_size = EPSON13806_VMEM_SIZE;
- }
- return TRUE;
-}
-
-Bool
-epsonScreenInit (KdScreenInfo *screen)
-{
- EpsonScrPriv *scrpriv;
-
- scrpriv = xalloc (sizeof (EpsonScrPriv));
- if (!scrpriv)
- return FALSE;
- memset (scrpriv, '\0', sizeof (EpsonScrPriv));
- screen->driver = scrpriv;
- if (!epsonScreenInitialize (screen, scrpriv)) {
- screen->driver = 0;
- xfree (scrpriv);
- return FALSE;
- }
- return TRUE;
-}
-
-static void *
-epsonWindowLinear (ScreenPtr pScreen,
- CARD32 row,
- CARD32 offset,
- int mode,
- CARD32 *size,
- void *closure)
-{
- KdScreenPriv(pScreen);
- EpsonPriv *priv = pScreenPriv->card->driver;
-
- if (!pScreenPriv->enabled)
- return 0;
- *size = priv->fix.line_length;
- return (CARD8 *) priv->fb + row * priv->fix.line_length + offset;
-}
-
-
-#ifdef RANDR
-static Bool
-epsonRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- EpsonScrPriv *scrpriv = screen->driver;
-#if 0
- RRVisualGroupPtr pVisualGroup;
- RRGroupOfVisualGroupPtr pGroupOfVisualGroup;
-#endif
- RRScreenSizePtr pSize;
- Rotation randr;
- int n;
-
- *rotations = RR_Rotate_0|RR_Rotate_90|RR_Rotate_180|RR_Rotate_270;
-
- for (n = 0; n < pScreen->numDepths; n++)
- if (pScreen->allowedDepths[n].numVids)
- break;
- if (n == pScreen->numDepths)
- return FALSE;
-
-#if 0
- pVisualGroup = RRCreateVisualGroup (pScreen);
- if (!pVisualGroup)
- return FALSE;
-
- if (!RRAddDepthToVisualGroup (pScreen, pVisualGroup, &pScreen->allowedDepths[n])) {
- RRDestroyVisualGroup (pScreen, pVisualGroup);
- return FALSE;
- }
-
- pVisualGroup = RRRegisterVisualGroup (pScreen, pVisualGroup);
- if (!pVisualGroup)
- return FALSE;
-
- pGroupOfVisualGroup = RRCreateGroupOfVisualGroup (pScreen);
-
- if (!RRAddVisualGroupToGroupOfVisualGroup (pScreen,
- pGroupOfVisualGroup,
- pVisualGroup))
- {
- RRDestroyGroupOfVisualGroup (pScreen, pGroupOfVisualGroup);
- /* pVisualGroup left until screen closed */
- return FALSE;
- }
-
- pGroupOfVisualGroup = RRRegisterGroupOfVisualGroup (pScreen, pGroupOfVisualGroup);
- if (!pGroupOfVisualGroup)
- return FALSE;
-#endif
-
- pSize = RRRegisterSize (pScreen,
- screen->width,
- screen->height,
- screen->width_mm,
- screen->height_mm);
-
- randr = KdSubRotation (scrpriv->randr, screen->randr);
-
- RRSetCurrentConfig (pScreen, randr, RR_Rotate_0, pSize);
-
- return TRUE;
-}
-
-static Bool
-epsonRandRSetConfig (ScreenPtr pScreen,
- Rotation randr,
- int rate,
- RRScreenSizePtr pSize)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- EpsonScrPriv *scrpriv = screen->driver;
- Bool wasEnabled = pScreenPriv->enabled;
-
- randr = KdAddRotation (randr, screen->randr);
-
- if (scrpriv->randr != randr)
- {
- if (wasEnabled)
- KdDisableScreen (pScreen);
-
- scrpriv->randr = randr;
-
- if (wasEnabled)
- KdEnableScreen (pScreen);
- }
- return TRUE;
-}
-
-static Bool
-epsonRandRInit (ScreenPtr pScreen)
-{
- rrScrPrivPtr pScrPriv;
-
- if (!RRScreenInit (pScreen))
- return FALSE;
-
- pScrPriv = rrGetScrPriv(pScreen);
- pScrPriv->rrGetInfo = epsonRandRGetInfo;
- pScrPriv->rrSetConfig = epsonRandRSetConfig;
- return TRUE;
-}
-#endif
-
-static Bool
-epsonCreateColormap (ColormapPtr pmap)
-{
- ScreenPtr pScreen = pmap->pScreen;
- KdScreenPriv(pScreen);
- EpsonPriv *priv = pScreenPriv->card->driver;
- VisualPtr pVisual;
- int i;
- int nent;
- xColorItem *pdefs;
-
- switch (priv->fix.visual) {
- case FB_VISUAL_STATIC_PSEUDOCOLOR:
- pVisual = pmap->pVisual;
- nent = pVisual->ColormapEntries;
- pdefs = xalloc (nent * sizeof (xColorItem));
- if (!pdefs)
- return FALSE;
- for (i = 0; i < nent; i++)
- pdefs[i].pixel = i;
- epsonGetColors (pScreen, 0, nent, pdefs);
- for (i = 0; i < nent; i++)
- {
- pmap->red[i].co.local.red = pdefs[i].red;
- pmap->red[i].co.local.green = pdefs[i].green;
- pmap->red[i].co.local.blue = pdefs[i].blue;
- }
- xfree (pdefs);
- return TRUE;
-
- default:
- return fbInitializeColormap (pmap);
- }
-}
-
-Bool
-epsonInitScreen (ScreenPtr pScreen)
-{
-#ifdef TOUCHSCREEN
- KdTsPhyScreen = pScreen->myNum;
-#endif
-
- pScreen->CreateColormap = epsonCreateColormap;
-
- return TRUE;
-}
-
-static Bool
-epsonFinishInitScreen (ScreenPtr pScreen)
-{
- if (!shadowSetup (pScreen))
- return FALSE;
-
-#ifdef RANDR
- if (!epsonRandRInit (pScreen))
- return FALSE;
-#endif
-
- return TRUE;
-}
-
-static Bool
-epsonSetShadow (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- EpsonScrPriv *scrpriv = screen->driver;
- ShadowUpdateProc update;
- ShadowWindowProc window;
-
- window = epsonWindowLinear;
- update = shadowUpdatePacked;
-
- return KdShadowSet (pScreen, scrpriv->randr, update, window);
-}
-
-static Bool
-epsonCreateResources (ScreenPtr pScreen)
-{
- return epsonSetShadow (pScreen);
-}
-
-void
-epsonPreserve (KdCardInfo *card)
-{
-}
-
-Bool
-epsonEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- EpsonPriv *priv = pScreenPriv->card->driver;
- int k;
-
- priv->var.activate = FB_ACTIVATE_NOW|FB_CHANGE_CMAP_VBL;
-
- /* display it on the LCD */
- k = ioctl (priv->fd, FBIOPUT_VSCREENINFO, &priv->var);
- if (k < 0) {
- perror ("FBIOPUT_VSCREENINFO");
- return FALSE;
- }
-
- k = ioctl (priv->fd, FBIOGET_FSCREENINFO, &priv->fix);
- if (k < 0) {
- perror ("FBIOGET_FSCREENINFO");
- return FALSE;
- }
-
- if (priv->fix.visual == FB_VISUAL_DIRECTCOLOR) {
- struct fb_cmap cmap;
- int i;
-
- for (i = 0;
- i < (1 << priv->var.red.length) ||
- i < (1 << priv->var.green.length) ||
- i < (1 << priv->var.blue.length); i++) {
- priv->red[i] = i * 65535 / ((1 << priv->var.red.length) - 1);
- priv->green[i] = i * 65535 / ((1 << priv->var.green.length) - 1);
- priv->blue[i] = i * 65535 / ((1 << priv->var.blue.length) - 1);
- }
- cmap.start = 0;
- cmap.len = i;
- cmap.red = &priv->red[0];
- cmap.green = &priv->green[0];
- cmap.blue = &priv->blue[0];
- cmap.transp = 0;
- ioctl (priv->fd, FBIOPUTCMAP, &cmap);
- }
- return TRUE;
-}
-
-Bool
-epsonDPMS (ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- EpsonPriv *priv = pScreenPriv->card->driver;
- static int oldmode = -1;
-
- if (mode == oldmode)
- return TRUE;
-#ifdef FBIOPUT_POWERMODE
- if (ioctl (priv->fd, FBIOPUT_POWERMODE, &mode) >= 0) {
- oldmode = mode;
- return TRUE;
- }
-#endif
-#ifdef FBIOBLANK
- if (ioctl (priv->fd, FBIOBLANK, mode ? mode + 1 : 0) >= 0) {
- oldmode = mode;
- return TRUE;
- }
-#endif
- return FALSE;
-}
-
-void
-epsonDisable (ScreenPtr pScreen)
-{
-}
-
-void
-epsonRestore (KdCardInfo *card)
-{
-}
-
-void
-epsonScreenFini (KdScreenInfo *screen)
-{
-}
-
-void
-epsonCardFini (KdCardInfo *card)
-{
- EpsonPriv *priv = card->driver;
-
- munmap (priv->fb_base, priv->fix.smem_len);
- close (priv->fd);
- xfree (priv);
-}
-
-void
-epsonGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- EpsonPriv *priv = pScreenPriv->card->driver;
- struct fb_cmap cmap;
- int p;
- int k;
- int min, max;
-
- min = 256;
- max = 0;
- for (k = 0; k < n; k++) {
- if (pdefs[k].pixel < min)
- min = pdefs[k].pixel;
- if (pdefs[k].pixel > max)
- max = pdefs[k].pixel;
- }
- cmap.start = min;
- cmap.len = max - min + 1;
- cmap.red = &priv->red[min];
- cmap.green = &priv->green[min];;
- cmap.blue = &priv->blue[min];
- cmap.transp = 0;
- k = ioctl (priv->fd, FBIOGETCMAP, &cmap);
- if (k < 0) {
- perror ("can't get colormap");
- return;
- }
- while (n--) {
- p = pdefs->pixel;
- pdefs->red = priv->red[p];
- pdefs->green = priv->green[p];
- pdefs->blue = priv->blue[p];
- pdefs++;
- }
-}
-
-void
-epsonPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- EpsonPriv *priv = pScreenPriv->card->driver;
- struct fb_cmap cmap;
- int p;
- int min, max;
-
- min = 256;
- max = 0;
- while (n--) {
- p = pdefs->pixel;
- priv->red[p] = pdefs->red;
- priv->green[p] = pdefs->green;
- priv->blue[p] = pdefs->blue;
- if (p < min)
- min = p;
- if (p > max)
- max = p;
- pdefs++;
- }
- cmap.start = min;
- cmap.len = max - min + 1;
- cmap.red = &priv->red[min];
- cmap.green = &priv->green[min];
- cmap.blue = &priv->blue[min];
- cmap.transp = 0;
- ioctl (priv->fd, FBIOPUTCMAP, &cmap);
-}
-
-
-
-KdCardFuncs epsonFuncs = {
- epsonCardInit, /* cardinit */
- epsonScreenInit, /* scrinit */
- epsonInitScreen, /* initScreen */
- epsonFinishInitScreen,
- epsonCreateResources,
- epsonPreserve, /* preserve */
- epsonEnable, /* enable */
- epsonDPMS, /* dpms */
- epsonDisable, /* disable */
- epsonRestore, /* restore */
- epsonScreenFini, /* scrfini */
- epsonCardFini, /* cardfini */
-
- 0, /* initCursor */
- 0, /* enableCursor */
- 0, /* disableCursor */
- 0, /* finiCursor */
- 0, /* recolorCursor */
-
- /*
- * History:
- * 28-Jan-04 C.Stylianou NBL: Added the following for h/w accel.
- *
- */
-
- epsonDrawInit, /* initAccel */
- epsonDrawEnable, /* enableAccel */
- epsonDrawDisable, /* disableAccel */
- epsonDrawFini, /* finiAccel */
-
- epsonGetColors, /* getColors */
- epsonPutColors, /* putColors */
-};
diff --git a/hw/kdrive/epson/epson13806.h b/hw/kdrive/epson/epson13806.h
deleted file mode 100644
index b28d7c085..000000000
--- a/hw/kdrive/epson/epson13806.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
- *
- * 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 Costas Sylianou not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Costas Stylianou makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL COSTAS STYLIANOU 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.
- */
-/*
- * epson13806draw.h - Implementation of hard ware accelerated functions for epson S1D13806
- * Graphic controller.
- *
- * History:
- * 28-Jan-04 C.Stylianou PRJ NBL: Created from fbdev.h
- *
- */
-
-#ifndef _EPSON13806_H_
-#define _EPSON13806_H_
-
-#include <stdio.h>
-#include <linux/fb.h>
-#include <unistd.h>
-#include <sys/mman.h>
-
-#include "kdrive.h"
-
-#ifdef RANDR
-#include "randrstr.h"
-#endif
-
-typedef struct _epsonPriv {
- struct fb_var_screeninfo var;
- struct fb_fix_screeninfo fix;
- __u16 red[256];
- __u16 green[256];
- __u16 blue[256];
- int fd;
- char *fb;
- char *fb_base;
-} EpsonPriv;
-
-typedef struct _epsonScrPriv {
- Rotation randr;
- Bool shadow;
- KaaScreenInfoRec kaa;
-} EpsonScrPriv;
-
-extern KdCardFuncs epsonFuncs;
-
-Bool
-epsonInitialize (KdCardInfo *card, EpsonPriv *priv);
-
-Bool
-epsonCardInit (KdCardInfo *card);
-
-Bool
-epsonScreenInit (KdScreenInfo *screen);
-
-Bool
-epsonScreenInitialize (KdScreenInfo *screen, EpsonScrPriv *scrpriv);
-
-Bool
-epsonInitScreen (ScreenPtr pScreen);
-
-void
-epsonPreserve (KdCardInfo *card);
-
-Bool
-epsonEnable (ScreenPtr pScreen);
-
-Bool
-epsonDPMS (ScreenPtr pScreen, int mode);
-
-void
-epsonDisable (ScreenPtr pScreen);
-
-void
-epsonRestore (KdCardInfo *card);
-
-void
-epsonScreenFini (KdScreenInfo *screen);
-
-void
-epsonCardFini (KdCardInfo *card);
-
-void
-epsonGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
-
-void
-epsonPutColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
-
-/*
- * History:
- * 28-Jan-04 C.Stylianou NBL: Added the following prototypes for h/w accel.
- *
- */
-Bool
-epsonDrawInit (ScreenPtr pScreen);
-
-void
-epsonDrawEnable (ScreenPtr pScreen);
-
-void
-epsonDrawDisable (ScreenPtr pScreen);
-
-void
-epsonDrawFini (ScreenPtr pScreen);
-
-/*
- * History:
- * 28-Jan-04 C.Stylianou NBL: Maps to Epson registers
- *
- */
-void
-initEpson13806(void);
-
-
-#endif /* __EPSON13806_H_ */
diff --git a/hw/kdrive/epson/epson13806draw.c b/hw/kdrive/epson/epson13806draw.c
deleted file mode 100644
index 3222353a3..000000000
--- a/hw/kdrive/epson/epson13806draw.c
+++ /dev/null
@@ -1,649 +0,0 @@
-/*
- * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
- *
- * 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 Costas Sylianou not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Costas Stylianou makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL COSTAS STYLIANOU 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.
- */
-/*
- * epson13806draw.c - Implementation of hardware accelerated functions for epson S1D13806
- * Graphic controller.
- *
- * History:
- * 28-Jan-04 C.Stylianou PRJ NBL: Created from chipsdraw.c
- *
- */
-
-#include "epson13806.h"
-#include "epson13806draw.h"
-#include "epson13806reg.h"
-
-#include "kaa.h"
-
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-
-
-// Functionality of BitBLT ROP register for Epson S1D13806 Graphics controller
-CARD8 epson13806Rop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0x08, /* src AND dst */
- /* GXandReverse */ 0x04, /* src AND NOT dst */
- /* GXcopy */ 0x0C, /* src */
- /* GXandInverted*/ 0x02, /* NOT src AND dst */
- /* GXnoop */ 0x0A, /* dst */
- /* GXxor */ 0x06, /* src XOR dst */
- /* GXor */ 0x0E, /* src OR dst */
- /* GXnor */ 0x01, /* NOT src AND NOT dst */
- /* GXequiv */ 0x09, /* NOT src XOR dst */
- /* GXinvert */ 0x05, /* NOT dst */
- /* GXorReverse */ 0x0D, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x03, /* NOT src */
- /* GXorInverted */ 0x0B, /* NOT src OR dst */
- /* GXnand */ 0x07, /* NOT src OR NOT dst */
- /* GXset */ 0x0F, /* 1 */
-};
-
-
-
-#undef __DEBUG_EPSON__
-#undef __DEBUG_EPSON_FBSET__
-#undef __DEBUG_EPSON_SOLID__
-#undef __DEBUG_EPSON_COPY__
-
-
-#ifdef __DEBUG_EPSON__
- #define EPSON_DEBUG(a) a
-#else
- #define EPSON_DEBUG(a)
-#endif
-
-#ifdef __DEBUG_EPSON_FBSET__
- #define EPSON_DEBUG_FBSET(a) a
-#else
- #define EPSON_DEBUG_FBSET(a)
-#endif
-
-#ifdef __DEBUG_EPSON_SOLID__
- #define EPSON_DEBUG_SOLID(a) a
-#else
- #define EPSON_DEBUG_SOLID(a)
-#endif
-
-#ifdef __DEBUG_EPSON_COPY__
- #define EPSON_DEBUG_COPY(a) a
-#else
- #define EPSON_DEBUG_COPY(a)
-#endif
-
-
-static unsigned int byteStride; // Distance between lines in the frame buffer (in bytes)
-static unsigned int bytesPerPixel;
-static unsigned int pixelStride;
-
-static unsigned char *regbase;
-
-/*
- * epsonSet
- *
- * Description: Sets Epson variables
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static void
-epsonSet (ScreenPtr pScreen)
-{
- EPSON_DEBUG_FBSET (fprintf(stderr,"+epsonSet\n"));
-
- KdScreenPriv(pScreen);
-
- byteStride = pScreenPriv->screen->fb[0].byteStride;
- bytesPerPixel = pScreenPriv->screen->fb[0].bitsPerPixel >> 3;
- pixelStride = pScreenPriv->screen->fb[0].pixelStride;
-
- EPSON_DEBUG_FBSET (fprintf(stderr,"byteStride: [%x]\n", pScreenPriv->screen->fb[0].byteStride));
- EPSON_DEBUG_FBSET (fprintf(stderr,"bytesPerPixel: [%x]\n", pScreenPriv->screen->fb[0].bitsPerPixel >> 3));
- EPSON_DEBUG_FBSET (fprintf(stderr,"pixelStride: [%x]\n", pScreenPriv->screen->fb[0].pixelStride));
-
- EPSON_DEBUG_FBSET (fprintf(stderr,"-epsonSet\n"));
-}
-
-
-/*
- * epsonBg
- *
- * Description: Sets background colour
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static void
-epsonBg (Pixel bg)
-{
- EPSON13806_REG16(EPSON13806_BLTBGCOLOR) = bg;
-}
-
-
-/*
- * epsonFg
- *
- * Description: Sets foreground colour
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static void
-epsonFg (Pixel fg)
-{
- EPSON13806_REG16(EPSON13806_BLTFGCOLOR) = fg;
-}
-
-
-/*
- * epsonWaitForHwBltDone
- *
- * Description: Wait for previous blt to be done before programming any blt registers
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static void
-epsonWaitForHwBltDone (void)
-{
- while (EPSON13806_REG (EPSON13806_BLTCTRL0) & EPSON13806_BLTCTRL0_ACTIVE) {}
-}
-
-
-/*
- * epsonDrawSync
- *
- * Description: Sync hardware acceleration
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static void
-epsonWaitMarker (ScreenPtr pScreen, int marker)
-{
- EPSON_DEBUG (fprintf(stderr,"+epsonDrawSync\n"));
-
- epsonWaitForHwBltDone ();
-
- EPSON_DEBUG (fprintf(stderr,"-epsonDrawSync\n"));
-}
-
-
-/*
- * epsonPrepareSolid
- *
- * Description: Prepare Solid Fill i.e, can it be accelerated
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static Bool
-epsonPrepareSolid (PixmapPtr pPixmap,
- int alu,
- Pixel pm,
- Pixel fg)
-{
- EPSON_DEBUG_SOLID (fprintf(stderr,"+epsonPrepareSolid\n"));
-
- FbBits depthMask;
-
- depthMask = FbFullMask(pPixmap->drawable.depth);
- if ((pm & depthMask) != depthMask)
- return FALSE;
-
- epsonSet (pPixmap->drawable.pScreen);
- fg &= 0xffff;
- epsonFg (fg);
- epsonBg (fg);
-
- epsonWaitForHwBltDone ();
-
- EPSON_DEBUG_SOLID (fprintf(stderr,"Solid.alu [0x%x], [%d]\n", alu ,epson13806Rop[alu]));
- EPSON13806_REG(EPSON13806_BLTROP) = epson13806Rop[alu];
-
- if (epson13806Rop[alu] == GXnoop)
- {
- EPSON13806_REG(EPSON13806_BLTOPERATION) = EPSON13806_BLTOPERATION_PATFILLROP;
- }
- else
- {
- EPSON13806_REG(EPSON13806_BLTOPERATION) = EPSON13806_BLTOPERATION_SOLIDFILL;
- }
-
-
- EPSON_DEBUG_SOLID (fprintf(stderr,"-epsonPrepareSolid\n"));
- return TRUE;
-
-}
-
-
-/*
- * epsonSolid
- *
- * Description: Executes Solid Fill
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static void
-epsonSolid (int x1, int y1, int x2, int y2)
-{
-
- EPSON_DEBUG_SOLID (fprintf(stderr,"+epsonSolid\n"));
-
- CARD32 dst_addr;
- int width, height;
-
- EPSON_DEBUG_SOLID (fprintf(stderr,"Solid X1 [%d] Y1 [%d] X2 [%d] Y2 [%d]\n", x1, y1, x2, y2));
-
- dst_addr = y1 * byteStride + x1 * bytesPerPixel;
- width = ((x2 - x1)-1);
- height = ((y2 - y1)-1);
-
- // program dst address
- EPSON13806_REG16(EPSON13806_BLTDSTSTART01) = dst_addr;
- EPSON13806_REG(EPSON13806_BLTDSTSTART2) = dst_addr >> 16;
-
- // program width and height of blit
- EPSON13806_REG16(EPSON13806_BLTWIDTH) = width;
- EPSON13806_REG16(EPSON13806_BLTHEIGHT) = height;
-
- EPSON13806_REG(EPSON13806_BLTCTRL0) = EPSON13806_BLTCTRL0_ACTIVE;
-
- // Wait for operation to complete
- while (EPSON13806_REG(EPSON13806_BLTCTRL0) & EPSON13806_BLTCTRL0_ACTIVE) {}
-
- EPSON_DEBUG_SOLID (fprintf(stderr,"-epsonSolid\n"));
-}
-
-
-/*
- * epsonDoneSolid
- *
- * Description: Done Solid
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static void
-epsonDoneSolid (void)
-{
- EPSON_DEBUG_SOLID (fprintf(stderr,"+epsonDoneSolid\n"));
-
- // Read from BitBLT data offset 0 to shut it down
- //(void)EPSON13806_REG(EPSON13806_BITBLTDATA);
-
- EPSON_DEBUG_SOLID (fprintf(stderr,"-epsonDoneSolid\n"));
-
-}
-
-
-/*
- * epsonPrepareCopy
- *
- * Description: Prepares BitBLT, i.e, can it be accelerated
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static Bool
-epsonPrepareCopy (PixmapPtr pSrcPixmap,
- PixmapPtr pDstPixmap,
- int dx,
- int dy,
- int alu,
- Pixel pm)
-{
- EPSON_DEBUG_COPY (fprintf(stderr,"+epsonPrepareCopy dx [0x%x] dy [0x%x]\n", dx, dy));
-
- FbBits depthMask;
-
- depthMask = FbFullMask(pDstPixmap->drawable.depth);
-
- if ((pm & depthMask) != depthMask)
- return FALSE;
-
- epsonSet (pDstPixmap->drawable.pScreen);
- epsonWaitForHwBltDone ();
- EPSON13806_REG(EPSON13806_BLTROP) = epson13806Rop[alu];
-
- EPSON_DEBUG_COPY (fprintf(stderr,"-epsonPrepareCopy\n"));
-
- return TRUE;
-}
-
-
-/*
- * epsonCopy
- *
- * Description: Executes BitBLT
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static void
-epsonCopy (int srcX,
- int srcY,
- int dstX,
- int dstY,
- int width,
- int height)
-{
- EPSON_DEBUG_COPY (fprintf(stderr,"+epsonCopy\n"));
- int src_addr, dst_addr;
- int neg_dir = FALSE;
-
- if (!width || !height)
- return;
-
- src_addr = srcX * bytesPerPixel + srcY * byteStride;
- dst_addr = dstX * bytesPerPixel + dstY * byteStride;
-
- /*
- * See if regions overlap and dest region is beyond source region.
- * If so, we need to do a move BLT in negative direction. Only applies
- * if the BLT is not transparent.
- */
-
- if ((srcX + width > dstX) && (srcX < dstX + width) &&
- (srcY + height > dstY) && (srcY < dstY + height) &&
- (dst_addr > src_addr))
- {
- neg_dir = TRUE;
-
- // negative direction : get the coords of lower right corner
- src_addr += byteStride * (height-1) + bytesPerPixel * (width-1);
- dst_addr += byteStride * (height-1) + bytesPerPixel * (width-1);
- }
-
- // program BLIT memory offset
- EPSON13806_REG16(EPSON13806_BLTSTRIDE) = byteStride/2;
-
- // program src and dst addresses
- EPSON13806_REG16(EPSON13806_BLTSRCSTART01) = src_addr;
- EPSON13806_REG(EPSON13806_BLTSRCSTART2) = src_addr >> 16;
- EPSON13806_REG16(EPSON13806_BLTDSTSTART01) = dst_addr;
- EPSON13806_REG(EPSON13806_BLTDSTSTART2) = dst_addr >> 16;
-
- // program width and height of blit
- EPSON13806_REG16(EPSON13806_BLTWIDTH) = width-1;
- EPSON13806_REG16(EPSON13806_BLTHEIGHT) = height-1;
-
- // select pos/neg move BLIT
- EPSON13806_REG(EPSON13806_BLTOPERATION) = neg_dir ?
- EPSON13806_BLTOPERATION_MOVENEGROP : EPSON13806_BLTOPERATION_MOVEPOSROP;
-
- EPSON13806_REG(EPSON13806_BLTCTRL0) = EPSON13806_BLTCTRL0_ACTIVE;
-
- // Wait for operation to complete
- while (EPSON13806_REG(EPSON13806_BLTCTRL0) & EPSON13806_BLTCTRL0_ACTIVE) {}
-
- EPSON_DEBUG_COPY (fprintf(stderr,"-epsonCopy\n"));
-}
-
-
-/*
- * epsonDoneCopy
- *
- * Description: Done Copy
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-static void
-epsonDoneCopy (void)
-{
- EPSON_DEBUG_COPY (fprintf(stderr,"+epsonDoneCopy\n"));
-
- // Read from BitBLT data offset 0 to shut it down
- //(void)EPSON13806_REG(EPSON13806_BITBLTDATA);
-
- EPSON_DEBUG_COPY (fprintf(stderr,"-epsonDoneCopy\n"));
-}
-
-
-/*
- * epsonDrawInit
- *
- * Description: Configure the Epson S1D13806 for a 800x600 TFT colour display
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-Bool
-epsonDrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- EpsonScrPriv *epsons = screen->driver;
-
- EPSON_DEBUG (fprintf(stderr,"+epsonDrawInit\n"));
-
- epsonSet(pScreen);
-
-#if 0
- EPSON13806_REG(EPSON13806_MISC) = 0x00;
- EPSON13806_REG(EPSON13806_DISPMODE) = 0x00;
- EPSON13806_REG16(EPSON13806_GPIOCFG) = 0xffff;
- EPSON13806_REG16(EPSON13806_GPIOCTRL) = 0x0001;
-
- EPSON13806_REG(EPSON13806_MEMCLKCFG) = 0x01;
- EPSON13806_REG(EPSON13806_LCDPCLKCFG) = 0x00;
- EPSON13806_REG(EPSON13806_CRTPCLKCFG) = 0x02;
- EPSON13806_REG(EPSON13806_MPCLKCFG) = 0x02;
- EPSON13806_REG(EPSON13806_CPUMEMWAITSEL) = 0x01;
- EPSON13806_REG(EPSON13806_MEMCFG) = 0x80;
- EPSON13806_REG(EPSON13806_DRAMREFRESH) = 0x03;
- EPSON13806_REG16(EPSON13806_DRAMTIMINGCTRL) = 0x0100;
-
- // 5ms delay for internal LCD SDRAM to initialize
- usleep(5000);
-
- EPSON13806_REG(EPSON13806_PANELTYPE) = 0x25;
- EPSON13806_REG(EPSON13806_MODRATE) = 0x00;
- EPSON13806_REG(EPSON13806_LCDHDP) = 0x63;
- EPSON13806_REG(EPSON13806_LCDHNDP) = 0x1f;
- EPSON13806_REG(EPSON13806_TFTFPLINESTART) = 0x01;
- EPSON13806_REG(EPSON13806_TFTFPLINEPULSE) = 0x0b;
- EPSON13806_REG16(EPSON13806_LCDVDP0) = 0x0257;
- EPSON13806_REG(EPSON13806_LCDVNDP) = 0x1b;
- EPSON13806_REG(EPSON13806_TFTFPFRAMESTART) = 0x0a;
- EPSON13806_REG(EPSON13806_TFTFPFRAMEPULSE) = 0x01;
- EPSON13806_REG(EPSON13806_LCDDISPMODE) = 0x85;
- EPSON13806_REG(EPSON13806_LCDMISC) = 0x00;
- EPSON13806_REG16(EPSON13806_LCDSTART01) = 0x0000;
- EPSON13806_REG(EPSON13806_LCDSTART2) = 0x00;
- EPSON13806_REG16(EPSON13806_LCDSTRIDE) = byteStride>>1;
- EPSON13806_REG(EPSON13806_LCDPIXELPAN) = 0x00;
- EPSON13806_REG(EPSON13806_LCDFIFOHIGH) = 0x00;
- EPSON13806_REG(EPSON13806_LCDFIFOLOW) = 0x00;
-#endif
-
-
- EPSON13806_REG(EPSON13806_BLTCTRL0) = 0x00;
- EPSON13806_REG(EPSON13806_BLTCTRL1) = 0x01; // We're using 16 bpp
- EPSON13806_REG16(EPSON13806_BLTSTRIDE) = byteStride>>1; // program BLIT memory offset
-
-#if 0
- EPSON13806_REG(EPSON13806_LUTMODE) = 0x00;
- EPSON13806_REG(EPSON13806_LUTADDR) = 0x00;
- EPSON13806_REG(EPSON13806_PWRSAVECFG) = 0x10;
- EPSON13806_REG(EPSON13806_PWRSAVESTATUS) = 0x00;
- EPSON13806_REG(EPSON13806_CPUMEMWATCHDOG) = 0x00;
- EPSON13806_REG(EPSON13806_DISPMODE) = 0x01;
-
- // Enable backlight voltage
- EPSON13806_REG16(EPSON13806_GPIOCTRL) |= 1<<1;
- // 10ms delay after turning on LCD.
- usleep(10000);
-#endif
-
- // Instruct the BitBLT unit to fill the screen with black, i.e clear fb.
- static int addr = 0x00000000;
- EPSON13806_REG16(EPSON13806_BLTDSTSTART01) = addr;
- EPSON13806_REG(EPSON13806_BLTDSTSTART2) = addr >> 16;
- EPSON13806_REG16(EPSON13806_BLTFGCOLOR) = 0x0000;
- EPSON13806_REG(EPSON13806_BLTOPERATION) = EPSON13806_BLTOPERATION_SOLIDFILL; // solid fill blt
- EPSON13806_REG16(EPSON13806_BLTWIDTH) = (0x0320-1);
- EPSON13806_REG16(EPSON13806_BLTHEIGHT) = (0x0258-1);
- EPSON13806_REG(EPSON13806_BLTCTRL0) = EPSON13806_BLTCTRL0_ACTIVE;
-
-#if 0
- // Enable LCD data
- EPSON13806_REG(EPSON13806_LCDDISPMODE) &= ~(1<<7);
-
- // Turn on backlight full
- EPSON13806_REG16(EPSON13806_GPIOCTRL) |= 0x00fc;
-#endif
-
- memset(&epsons->kaa, 0, sizeof(KaaScreenInfoRec));
- epsons->kaa.waitMarker = epsonWaitMarker;
- epsons->kaa.PrepareSolid = epsonPrepareSolid;
- epsons->kaa.Solid = epsonSolid;
- epsons->kaa.DoneSolid = epsonDoneSolid;
- epsons->kaa.PrepareCopy = epsonPrepareCopy;
- epsons->kaa.Copy = epsonCopy;
- epsons->kaa.DoneCopy = epsonDoneCopy;
- epsons->kaa.flags = KAA_OFFSCREEN_PIXMAPS;
-
- if (!kaaDrawInit (pScreen, &epsons->kaa))
- return FALSE;
-
- EPSON_DEBUG (fprintf(stderr,"-epsonDrawInit\n"));
- return TRUE;
-}
-
-
-/*
- * epsonDrawEnable
- *
- * Description: Enables hardware acceleration
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-void
-epsonDrawEnable (ScreenPtr pScreen)
-{
- EPSON_DEBUG (fprintf(stderr,"+epsonDrawEnable\n"));
- epsonWaitForHwBltDone ();
- kaaMarkSync (pScreen);
- EPSON_DEBUG (fprintf(stderr,"-epsonDrawEnable\n"));
-}
-
-
-/*
- * epsonDrawDisable
- *
- * Description: Disables hardware acceleration
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-void
-epsonDrawDisable (ScreenPtr pScreen)
-{
- EPSON_DEBUG (fprintf(stderr,"+epsonDrawDisable\n"));
-}
-
-
-/*
- * epsonDrawFini
- *
- * Description: Finish hardware acceleration
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-void
-epsonDrawFini (ScreenPtr pScreen)
-{
- EPSON_DEBUG (fprintf(stderr,"+epsonDrawFini\n"));
-}
-
-
-/*
- * initEpson13806
- *
- * Description: Maps Epson S1D13806 registers
- *
- * History:
- * 11-Feb-04 C.Stylianou NBL: Created.
- *
- */
-
-void
-initEpson13806(void)
-{
- EPSON_DEBUG (fprintf(stderr,"+initEpson\n"));
-
- // Map Epson S1D13806 registers
- regbase = KdMapDevice (EPSON13806_PHYSICAL_REG_ADDR, EPSON13806_GPIO_REGSIZE);
- if (!regbase)
- perror("ERROR: regbase\n"); // Sets up register mappings in header files.
-
-#if 0
- CARD8 rev_code;
- rev_code = EPSON13806_REG (EPSON13806_REVCODE);
- if ((rev_code >> 2) != 0x07)
- perror("ERROR: EPSON13806 Display Controller NOT FOUND!\n");
-#endif
-
- EPSON_DEBUG (fprintf(stderr,"-initEpson\n"));
-}
diff --git a/hw/kdrive/epson/epson13806draw.h b/hw/kdrive/epson/epson13806draw.h
deleted file mode 100644
index b5f1bf5c2..000000000
--- a/hw/kdrive/epson/epson13806draw.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
- *
- * 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 Costas Sylianou not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Costas Stylianou makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL COSTAS STYLIANOU 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.
- */
-/*
- * epson13806draw.h - Implementation of hard ware accelerated functions for epson S1D13806
- * Graphic controller.
- *
- * History:
- * 28-Jan-04 C.Stylianou PRJ NBL: Created from chipsdraw.h
- *
- */
-
-#ifndef _EPSON13806DRAW_H_
-#define _EPSON13806DRAW_H_
-
-
-/*
- * offset from ioport beginning
- */
-
-
-#define SetupEpson(s) KdScreenPriv(s); \
- epsonCardInfo(pScreenPriv); \
- EpsonPtr epson = epsonc->epson
-
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-typedef struct _epsonSave {
- int dummy;
-} EpsonSave;
-
-typedef struct _epsonCardInfo {
- EpsonPriv epson;
- CARD32 *window;
- Bool mmio;
- EpsonSave save;
-} epsonCardInfo;
-
-#define getEpsonCardInfo(kd) ((epsonCardInfo *) ((kd)->card->driver))
-#define epsonCardInfo(kd) epsonCardInfo *epsonc = getEpsonCardInfo(kd)
-
-typedef struct _epsonCursor {
- int width, height;
- int xhot, yhot;
- Bool has_cursor;
- CursorPtr pCursor;
- Pixel source, mask;
-} EpsonCursor;
-
-#define epson_CURSOR_WIDTH 64
-#define epson_CURSOR_HEIGHT 64
-
-typedef struct _epsonScreenInfo {
- EpsonScrPriv epson;
- CARD8 *cursor_base;
- CARD8 *screen;
- CARD8 *off_screen;
- int off_screen_size;
- EpsonCursor cursor;
- void *regbase_virt;
-} EpsonScreenInfo;
-
-#define getEpsonScreenInfo(kd) ((EpsonScreenInfo *) ((kd)->screen->driver))
-#define epsonScreenInfo(kd) EpsonScreenInfo *epsons = getEpsonScreenInfo(kd)
-
-Bool
-epsonDrawInit (ScreenPtr pScreen);
-
-void
-epsonDrawEnable (ScreenPtr pScreen);
-
-void
-epsonDrawSync (ScreenPtr pScreen);
-
-void
-epsonDrawDisable (ScreenPtr pScreen);
-
-void
-epsonDrawFini (ScreenPtr pScreen);
-
-Bool
-epsonCursorInit (ScreenPtr pScreen);
-
-void
-epsonCursorEnable (ScreenPtr pScreen);
-
-void
-epsonCursorDisable (ScreenPtr pScreen);
-
-void
-epsonCursorFini (ScreenPtr pScreen);
-
-void
-epsonRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef);
-
-extern KdCardFuncs epsonFuncs;
-
-#endif
diff --git a/hw/kdrive/epson/epson13806reg.h b/hw/kdrive/epson/epson13806reg.h
deleted file mode 100644
index ee745a08f..000000000
--- a/hw/kdrive/epson/epson13806reg.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
- *
- * 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 Costas Sylianou not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Costas Stylianou makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL COSTAS STYLIANOU 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.
- */
-/*
- * epson13806reg.h Epson S1D13806 LCD controller header file.
- *
- * History:
- * 15-Feb-04 C.Stylianou PRJ NBL: Created.
- *
- */
-
-
-#ifndef EPSON13806REG_H
-#define EPSON13806REG_H
-
-
-#define TT_UNUSED(x) ((void) (x))
-
-
-#define EPSON13806_PHYSICAL_REG_ADDR 0x14000000
-#define EPSON13806_GPIO_REGSIZE 0x001f0000
-
-#define EPSON13806_PHYSICAL_VMEM_ADDR 0x14200000
-#define EPSON13806_VMEM_SIZE 0x140000
-
-#define PLATFORM_EPSON13806_BASE (regbase)
-#define EPSON13806_REG_BASE (PLATFORM_EPSON13806_BASE + 0x000000) // Register base address
-#define EPSON13806_SDRAM_BASE (PLATFORM_EPSON13806_BASE + 0x200000) // SDRAM base address
-
-//////////////////////////////////////////////////////////////////////////////////////////
-// Register Offsets
-//////////////////////////////////////////////////////////////////////////////////////////
-#define EPSON13806_REVCODE (EPSON13806_REG_BASE + 0x0000) // Revision Code Register
-#define EPSON13806_MISC (EPSON13806_REG_BASE + 0x0001) // Miscellaneous Register
-#define EPSON13806_GPIOCFG (EPSON13806_REG_BASE + 0x0004) // General IO Pins Configuration Register (16 bits)
-#define EPSON13806_GPIOCFG0 (EPSON13806_REG_BASE + 0x0004) // General IO Pins Configuration Register 0
-#define EPSON13806_GPIOCFG1 (EPSON13806_REG_BASE + 0x0005) // General IO Pins Configuration Register 1
-#define EPSON13806_GPIOCTRL (EPSON13806_REG_BASE + 0x0008) // General IO Pins Control Register (16 bits)
-#define EPSON13806_GPIOCTRL0 (EPSON13806_REG_BASE + 0x0008) // General IO Pins Control Register 0
-#define EPSON13806_GPIOCTRL1 (EPSON13806_REG_BASE + 0x0009) // General IO Pins Control Register 1
-#define EPSON13806_MDCFGSTATUS (EPSON13806_REG_BASE + 0x000C) // Configuration Status Register
-#define EPSON13806_MEMCLKCFG (EPSON13806_REG_BASE + 0x0010) // Memory Clock Configuration Register
-#define EPSON13806_LCDPCLKCFG (EPSON13806_REG_BASE + 0x0014) // LCD Pixel Clock Configuration Register
-#define EPSON13806_CRTPCLKCFG (EPSON13806_REG_BASE + 0x0018) // CRT/TV Clock Configuration Register
-#define EPSON13806_MPCLKCFG (EPSON13806_REG_BASE + 0x001C) // MediaPlug Clock Configuration Register
-#define EPSON13806_CPUMEMWAITSEL (EPSON13806_REG_BASE + 0x001E) // CPU To Memory Wait State Select Register
-#define EPSON13806_MEMCFG (EPSON13806_REG_BASE + 0x0020) // Memory Configuration Register
-#define EPSON13806_DRAMREFRESH (EPSON13806_REG_BASE + 0x0021) // DRAM Refresh Rate Register
-#define EPSON13806_DRAMTIMINGCTRL (EPSON13806_REG_BASE + 0x002A) // DRAM Timings Control Register (16 bits)
-#define EPSON13806_DRAMTIMINGCTRL0 (EPSON13806_REG_BASE + 0x002A) // DRAM Timings Control Register 0
-#define EPSON13806_DRAMTIMINGCTRL1 (EPSON13806_REG_BASE + 0x002B) // DRAM Timings Control Register 1
-#define EPSON13806_PANELTYPE (EPSON13806_REG_BASE + 0x0030) // Panel Type Register
-#define EPSON13806_MODRATE (EPSON13806_REG_BASE + 0x0031) // MOD Rate Register
-#define EPSON13806_LCDHDP (EPSON13806_REG_BASE + 0x0032) // LCD Horizontal Display Width Register
-#define EPSON13806_LCDHNDP (EPSON13806_REG_BASE + 0x0034) // LCD Horizontal Non-Display Period Register
-#define EPSON13806_TFTFPLINESTART (EPSON13806_REG_BASE + 0x0035) // TFT FPLINE Start Position Register
-#define EPSON13806_TFTFPLINEPULSE (EPSON13806_REG_BASE + 0x0036) // TFT FPLINE Pulse Width Register
-#define EPSON13806_LCDVDP (EPSON13806_REG_BASE + 0x0038) // LCD Vertical Display Height Register (16 bits)
-#define EPSON13806_LCDVDP0 (EPSON13806_REG_BASE + 0x0038) // LCD Vertical Display Height Register 0
-#define EPSON13806_LCDVDP1 (EPSON13806_REG_BASE + 0x0039) // LCD Vertical Display Height Register 1
-#define EPSON13806_LCDVNDP (EPSON13806_REG_BASE + 0x003A) // LCD Vertical Non-Display Period Register
-#define EPSON13806_TFTFPFRAMESTART (EPSON13806_REG_BASE + 0x003B) // TFT FPFRAME Start Position Register
-#define EPSON13806_TFTFPFRAMEPULSE (EPSON13806_REG_BASE + 0x003C) // TFT FPFRAME Pulse Width Register
-#define EPSON13806_LCDLINECOUNT (EPSON13806_REG_BASE + 0x003E) // LCD Line Count Register (16 bits)
-#define EPSON13806_LCDLINECOUNT0 (EPSON13806_REG_BASE + 0x003E) // LCD Line Count Register 0
-#define EPSON13806_LCDLINECOUNT1 (EPSON13806_REG_BASE + 0x003F) // LCD Line Count Register 1
-#define EPSON13806_LCDDISPMODE (EPSON13806_REG_BASE + 0x0040) // LCD Display Mode Register
-#define EPSON13806_LCDMISC (EPSON13806_REG_BASE + 0x0041) // LCD Miscellaneous Register
-#define EPSON13806_LCDSTART01 (EPSON13806_REG_BASE + 0x0042) // LCD Display Start Address Register 0 and 1 (16 bits)
-#define EPSON13806_LCDSTART0 (EPSON13806_REG_BASE + 0x0042) // LCD Display Start Address Register 0
-#define EPSON13806_LCDSTART1 (EPSON13806_REG_BASE + 0x0043) // LCD Display Start Address Register 1
-#define EPSON13806_LCDSTART2 (EPSON13806_REG_BASE + 0x0044) // LCD Display Start Address Register 2
-#define EPSON13806_LCDSTRIDE (EPSON13806_REG_BASE + 0x0046) // LCD Memory Address Offset Register (16 bits)
-#define EPSON13806_LCDSTRIDE0 (EPSON13806_REG_BASE + 0x0046) // LCD Memory Address Offset Register 0
-#define EPSON13806_LCDSTRIDE1 (EPSON13806_REG_BASE + 0x0047) // LCD Memory Address Offset Register 1
-#define EPSON13806_LCDPIXELPAN (EPSON13806_REG_BASE + 0x0048) // LCD Pixel Panning Register
-#define EPSON13806_LCDFIFOHIGH (EPSON13806_REG_BASE + 0x004A) // LCD Display FIFO High Threshold Control Register
-#define EPSON13806_LCDFIFOLOW (EPSON13806_REG_BASE + 0x004B) // LCD Display FIFO Low Threshold Control Register
-
-#define EPSON13806_LCDINKCURSCTRL (EPSON13806_REG_BASE + 0x0070) // LCD INK/Cursor Control Register
-#define EPSON13806_LCDINKCURSSTART (EPSON13806_REG_BASE + 0x0071) // LCD INK/Cursor Start Address Register
-#define EPSON13806_LCDCURSORXPOS (EPSON13806_REG_BASE + 0x0072) // LCD Cursor X Position Register (16 bits)
-#define EPSON13806_LCDCURSORXPOS0 (EPSON13806_REG_BASE + 0x0072) // LCD Cursor X Position Register 0
-#define EPSON13806_LCDCURSORXPOS1 (EPSON13806_REG_BASE + 0x0073) // LCD Cursor X Position Register 1
-#define EPSON13806_LCDCURSORYPOS (EPSON13806_REG_BASE + 0x0074) // LCD Cursor Y Position Register (16 bits)
-#define EPSON13806_LCDCURSORYPOS0 (EPSON13806_REG_BASE + 0x0074) // LCD Cursor Y Position Register 0
-#define EPSON13806_LCDCURSORYPOS1 (EPSON13806_REG_BASE + 0x0075) // LCD Cursor Y Position Register 1
-#define EPSON13806_LCDINKCURSBLUE0 (EPSON13806_REG_BASE + 0x0076) // LCD INK/Cursor Blue Color 0 Register
-#define EPSON13806_LCDINKCURSGREEN0 (EPSON13806_REG_BASE + 0x0077) // LCD INK/Cursor Green Color 0 Register
-#define EPSON13806_LCDINKCURSRED0 (EPSON13806_REG_BASE + 0x0078) // LCD INK/Cursor Red Color 0 Register
-#define EPSON13806_LCDINKCURSBLUE1 (EPSON13806_REG_BASE + 0x007A) // LCD INK/Cursor Blue Color 1 Register
-#define EPSON13806_LCDINKCURSGREEN1 (EPSON13806_REG_BASE + 0x007B) // LCD INK/Cursor Green Colour 1 Register
-#define EPSON13806_LCDINKCURSRED1 (EPSON13806_REG_BASE + 0x007C) // LCD INK/Cursor Red Color 1 Register
-#define EPSON13806_LCDINKCURSFIFO (EPSON13806_REG_BASE + 0x007E) // LCD INK/Cursor FIFO Threshold Register
-
-#define EPSON13806_BLTCTRL0 (EPSON13806_REG_BASE + 0x0100) // BitBlt Control Register 0
-#define EPSON13806_BLTCTRL1 (EPSON13806_REG_BASE + 0x0101) // BitBlt Control Register 1
-#define EPSON13806_BLTROP (EPSON13806_REG_BASE + 0x0102) // BitBlt ROP Code/Color Expansion Register
-#define EPSON13806_BLTOPERATION (EPSON13806_REG_BASE + 0x0103) // BitBlt Operation Register
-#define EPSON13806_BLTSRCSTART01 (EPSON13806_REG_BASE + 0x0104) // BitBlt Source Start Address Register 0 and 1 (16 bits)
-#define EPSON13806_BLTSRCSTART0 (EPSON13806_REG_BASE + 0x0104) // BitBlt Source Start Address Register 0
-#define EPSON13806_BLTSRCSTART1 (EPSON13806_REG_BASE + 0x0105) // BitBlt Source Start Address Register 1
-#define EPSON13806_BLTSRCSTART2 (EPSON13806_REG_BASE + 0x0106) // BitBlt Source Start Address Register 2
-#define EPSON13806_BLTDSTSTART01 (EPSON13806_REG_BASE + 0x0108) // BitBlt Destination Start Address Register 0 and 1 (16 bits)
-#define EPSON13806_BLTDSTSTART0 (EPSON13806_REG_BASE + 0x0108) // BitBlt Destination Start Address Register 0
-#define EPSON13806_BLTDSTSTART1 (EPSON13806_REG_BASE + 0x0109) // BitBlt Destination Start Address Register 1
-#define EPSON13806_BLTDSTSTART2 (EPSON13806_REG_BASE + 0x010A) // BitBlt Destination Start Address Register 2
-#define EPSON13806_BLTSTRIDE (EPSON13806_REG_BASE + 0x010C) // BitBlt Memory Address Offset Register (16 bits)
-#define EPSON13806_BLTSTRIDE0 (EPSON13806_REG_BASE + 0x010C) // BitBlt Memory Address Offset Register 0
-#define EPSON13806_BLTSTRIDE1 (EPSON13806_REG_BASE + 0x010D) // BitBlt Memory Address Offset Register 1
-#define EPSON13806_BLTWIDTH (EPSON13806_REG_BASE + 0x0110) // BitBlt Width Register (16 bits)
-#define EPSON13806_BLTWIDTH0 (EPSON13806_REG_BASE + 0x0110) // BitBlt Width Register 0
-#define EPSON13806_BLTWIDTH1 (EPSON13806_REG_BASE + 0x0111) // BitBlt Width Register 1
-#define EPSON13806_BLTHEIGHT (EPSON13806_REG_BASE + 0x0112) // BitBlt Height Register (16 bits)
-#define EPSON13806_BLTHEIGHT0 (EPSON13806_REG_BASE + 0x0112) // BitBlt Height Register 0
-#define EPSON13806_BLTHEIGHT1 (EPSON13806_REG_BASE + 0x0113) // BitBlt Height Register 1
-#define EPSON13806_BLTBGCOLOR (EPSON13806_REG_BASE + 0x0114) // BitBlt Background Color Register (16 bits)
-#define EPSON13806_BLTBGCOLOR0 (EPSON13806_REG_BASE + 0x0114) // BitBlt Background Color Register 0
-#define EPSON13806_BLTBGCOLOR1 (EPSON13806_REG_BASE + 0x0115) // BitBlt Background Color Register 1
-#define EPSON13806_BLTFGCOLOR (EPSON13806_REG_BASE + 0x0118) // BitBlt Foreground Color Register (16 bits)
-#define EPSON13806_BLTFGCOLOR0 (EPSON13806_REG_BASE + 0x0118) // BitBlt Foreground Color Register 0
-#define EPSON13806_BLTFGCOLOR1 (EPSON13806_REG_BASE + 0x0119) // BitBlt Foreground Color Register 0
-
-#define EPSON13806_LUTMODE (EPSON13806_REG_BASE + 0x01E0) // Look-Up Table Mode Register
-#define EPSON13806_LUTADDR (EPSON13806_REG_BASE + 0x01E2) // Look-Up Table Address Register
-#define EPSON13806_LUTDATA (EPSON13806_REG_BASE + 0x01E4) // Look-Up Table Data Register
-#define EPSON13806_PWRSAVECFG (EPSON13806_REG_BASE + 0x01F0) // Power Save Configuration Register
-#define EPSON13806_PWRSAVESTATUS (EPSON13806_REG_BASE + 0x01F1) // Power Save Status Register
-#define EPSON13806_CPUMEMWATCHDOG (EPSON13806_REG_BASE + 0x01F4) // CPU-to-Memory Access Watchdog Timer Register
-#define EPSON13806_DISPMODE (EPSON13806_REG_BASE + 0x01FC) // Display Mode Register
-
-#define EPSON13806_MEDIALCMD (EPSON13806_REG_BASE + 0x1000) // MediaPlug LCMD Register
-#define EPSON13806_MEDIARESERVEDLCMD (EPSON13806_REG_BASE + 0x1002) // MediaPlug Reserved LCMD Register
-#define EPSON13806_MEDIACMD (EPSON13806_REG_BASE + 0x1004) // MediaPlug CMD Register
-#define EPSON13806_MEDIARESERVEDCMD (EPSON13806_REG_BASE + 0x1006) // MediaPlug Reserved CMD Register
-#define EPSON13806_MEDIADATA (EPSON13806_REG_BASE + 0x1008) // MediaPlug Data Registers (base)
-
-#define EPSON13806_BITBLTDATA (EPSON13806_REG_BASE + 0x100000) // BitBLT Data Registers (base)
-
-// BLTCTRL0 register defines
-#define EPSON13806_BLTCTRL0_ACTIVE (1<<7) // Read: 1=busy, 0=idle / Write: 1=start, 0=no change
-
-// BLTOPERATION register defines
-#define EPSON13806_BLTOPERATION_WRITEROP (0x00) // Write BitBLT with ROP
-#define EPSON13806_BLTOPERATION_READ (0x01) // Read BitBLT
-#define EPSON13806_BLTOPERATION_MOVEPOSROP (0x02) // Move BitBLT in positive direction with ROP
-#define EPSON13806_BLTOPERATION_MOVENEGROP (0x03) // Move BitBLT in negative direction with ROP
-#define EPSON13806_BLTOPERATION_TRANSWRITE (0x04) // Transparent Write BitBLT
-#define EPSON13806_BLTOPERATION_TRANSMOVEPOS (0x05) // Transparent Move BitBLT in positive direction
-#define EPSON13806_BLTOPERATION_PATFILLROP (0x06) // Pattern fill with ROP
-#define EPSON13806_BLTOPERATION_PATFILLTRANS (0x07) // Pattern fill with transparency
-#define EPSON13806_BLTOPERATION_COLOREXP (0x08) // Color expansion
-#define EPSON13806_BLTOPERATION_COLOREXPTRANS (0x09) // Color expansion with transparency
-#define EPSON13806_BLTOPERATION_MOVECOLOREXP (0x0A) // Move BitBLT with color expansion
-#define EPSON13806_BLTOPERATION_MOVECOLOREXPTRANS (0x0B) // Move BitBLT with color expansion and transparency
-#define EPSON13806_BLTOPERATION_SOLIDFILL (0x0C) // Solid fill
-
-//////////////////////////////////////////////////////////////////////////////////////////
-// Epson register access macros
-//////////////////////////////////////////////////////////////////////////////////////////
-#define EPSON13806_REG(address) *(VOL8 *)(address)
-#define EPSON13806_REG16(address) *(VOL16 *)(address)
-
-
-#endif // EPSON13806
diff --git a/hw/kdrive/epson/epson13806stub.c b/hw/kdrive/epson/epson13806stub.c
deleted file mode 100644
index 087a30fc7..000000000
--- a/hw/kdrive/epson/epson13806stub.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2004 by Costas Stylianou <costas.stylianou@psion.com> +44(0)7850 394095
- *
- * 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 Costas Sylianou not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Costas Stylianou makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL COSTAS STYLIANOU 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.
- */
-/*
- * epson13806stub.c
- *
- * History:
- * 28-Jan-04 C.Stylianou PRJ NBL: Created from fbdevinit.c
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-
-#include <epson13806.h>
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
-
- fprintf(stderr, "Epson 13806 Tiny X Driver ver 1.01\n");
-
- KdCardInfoAdd (&epsonFuncs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- return KdProcessArgument (argc, argv, i);
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
-}
diff --git a/hw/kdrive/i810/Makefile.am b/hw/kdrive/i810/Makefile.am
deleted file mode 100644
index 30919fad9..000000000
--- a/hw/kdrive/i810/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-INCLUDES = \
- @KDRIVE_INCS@ \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xi810
-
-noinst_LIBRARIES = libi810.a
-
-
-libi810_a_SOURCES = \
- i810_cursor.c \
- i810_video.c \
- i810draw.c \
- i810draw.h \
- i810_reg.h \
- i810.c \
- i810.h
-
-Xi810_SOURCES = \
- i810stub.c
-
-I810_LIBS = \
- libi810.a \
- @KDRIVE_LIBS@
-
-if GLX
-Xi810_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xi810_LDADD = \
- $(I810_LIBS) \
- @KDRIVE_LIBS@
-
-Xi810_DEPENDENCIES = \
- libi810.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/i810/i810.c b/hw/kdrive/i810/i810.c
deleted file mode 100644
index 49090f9eb..000000000
--- a/hw/kdrive/i810/i810.c
+++ /dev/null
@@ -1,2112 +0,0 @@
-/* COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 2000, 2001 Nokia Home Communications
-
-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, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-
-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
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
-
-X Window System is a trademark of The Open Group */
-
-/*
- * i810.c - KDrive driver for the i810 chipset
- *
- * Authors:
- * Pontus Lidman <pontus.lidman@nokia.com>
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include "kxv.h"
-#include "klinux.h"
-
-#include "i810.h"
-#include "agp.h"
-
-#include "i810draw.h"
-
-#ifndef I810_DEBUG
-int I810_DEBUG = (0
-/* | DEBUG_ALWAYS_SYNC */
-/* | DEBUG_VERBOSE_ACCEL */
-/* | DEBUG_VERBOSE_SYNC */
-/* | DEBUG_VERBOSE_VGA */
-/* | DEBUG_VERBOSE_RING */
-/* | DEBUG_VERBOSE_OUTREG */
-/* | DEBUG_VERBOSE_MEMORY */
-/* | DEBUG_VERBOSE_CURSOR */
- );
-#endif
-
-
-static Bool
-i810ModeInit(KdScreenInfo *screen, const KdMonitorTiming *t);
-
-static void
-i810PrintMode( vgaRegPtr vgaReg, I810RegPtr mode );
-
-Bool
-i810CardInit (KdCardInfo *card)
-{
- int i;
-
- I810CardInfo *i810c;
-
-/* fprintf(stderr,"i810CardInit\n"); */
-
- i810c = (I810CardInfo *) xalloc (sizeof (I810CardInfo));
-
- if (!i810c)
- return FALSE;
-
- /* 2MB Video RAM */
- i810c->videoRam=2048;
-
- /* Find FB address */
-
- if (card->attr.address[1] != 0) {
- i810c->LinearAddr = card->attr.address[0] & 0xFF000000;
-
- if (!i810c->LinearAddr) {
- fprintf(stderr,"No valid FB address in PCI config space(1)\n");
- xfree(i810c);
- return FALSE;
- } else {
-/* fprintf(stderr,"Linear framebuffer at %lx\n",i810c->LinearAddr); */
- }
- } else {
- fprintf(stderr,"No valid FB address in PCI config space(2)\n");
- xfree(i810c);
- return FALSE;
- }
-
- if (card->attr.address[1]) {
-
- i810c->MMIOAddr = card->attr.address[1] & 0xFFF80000;
-
- i810c->MMIOBase =
- KdMapDevice (i810c->MMIOAddr, I810_REG_SIZE);
- if (!i810c->MMIOBase) {
- fprintf(stderr,"No valid MMIO address in PCI config space(1)\n");
- xfree(i810c);
- return FALSE;
- } else {
-
- }
- } else {
- fprintf(stderr,"No valid MMIO address in PCI config space(2)\n");
- xfree(i810c);
- return FALSE;
- }
-
-/* fprintf(stderr,"Mapped 0x%x bytes of MMIO regs at phys 0x%lx virt %p\n", */
-/* I810_REG_SIZE,i810c->MMIOAddr,i810c->MMIOBase); */
-
- /* Find out memory bus frequency.
- */
-
- {
- unsigned long *p;
-
- if (!(p= (unsigned long *) LinuxGetPciCfg(&card->attr)))
- return FALSE;
-
-/* fprintf(stderr,"Frequency long %lx\n",p[WHTCFG_PAMR_DRP]); */
-
- if ( (p[WHTCFG_PAMR_DRP] & LM_FREQ_MASK) == LM_FREQ_133 )
- i810c->LmFreqSel = 133;
- else
- i810c->LmFreqSel = 100;
-
- xfree(p);
-
-/* fprintf(stderr,"Selected frequency %d\n",i810c->LmFreqSel); */
- }
-
-/* fprintf(stderr,"Will alloc AGP framebuffer: %d kByte\n",i810c->videoRam); */
-
- /* Since we always want write combining on first 32 mb of framebuffer
- * we pass a mapsize of 32 mb */
- i810c->FbMapSize = 32*1024*1024;
-
- for (i = 2 ; i < i810c->FbMapSize ; i <<= 1);
- i810c->FbMapSize = i;
-
- i810c->FbBase =
- KdMapDevice (i810c->LinearAddr, i810c->FbMapSize);
-
- if (!i810c->FbBase) return FALSE;
-/* fprintf(stderr,"Mapped 0x%lx bytes of framebuffer at %p\n", */
-/* i810c->FbMapSize,i810c->FbBase); */
-
- card->driver=i810c;
-
- return TRUE;
-}
-
-static void
-i810ScreenFini (KdScreenInfo *screen)
-{
- I810ScreenInfo *i810s = (I810ScreenInfo *) screen->driver;
-
- xfree (i810s);
- screen->driver = 0;
-}
-
-static Bool
-i810InitScreen (ScreenPtr pScreen) {
-
-#ifdef XV
- i810InitVideo(pScreen);
-#endif
- return TRUE;
-}
-
-static Bool
-i810FinishInitScreen(ScreenPtr pScreen)
-{
- /* XXX: RandR init */
- return TRUE;
-}
-
-static void
-i810CardFini (KdCardInfo *card)
-{
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
-
- KdUnmapDevice (i810c->FbBase, i810c->FbMapSize);
- KdUnmapDevice (i810c->MMIOBase, I810_REG_SIZE);
- xfree (i810c);
- card->driver = 0;
-}
-
-struct wm_info {
- double freq;
- unsigned int wm;
-};
-
-struct wm_info i810_wm_8_100[] = {
- { 0, 0x22003000 },
- { 25.2, 0x22003000 },
- { 28.0, 0x22003000 },
- { 31.5, 0x22003000 },
- { 36.0, 0x22007000 },
- { 40.0, 0x22007000 },
- { 45.0, 0x22007000 },
- { 49.5, 0x22008000 },
- { 50.0, 0x22008000 },
- { 56.3, 0x22008000 },
- { 65.0, 0x22008000 },
- { 75.0, 0x22008000 },
- { 78.8, 0x22008000 },
- { 80.0, 0x22008000 },
- { 94.0, 0x22008000 },
- { 96.0, 0x22107000 },
- { 99.0, 0x22107000 },
- { 108.0, 0x22107000 },
- { 121.0, 0x22107000 },
- { 128.9, 0x22107000 },
- { 132.0, 0x22109000 },
- { 135.0, 0x22109000 },
- { 157.5, 0x2210b000 },
- { 162.0, 0x2210b000 },
- { 175.5, 0x2210b000 },
- { 189.0, 0x2220e000 },
- { 202.5, 0x2220e000 }
-};
-
-struct wm_info i810_wm_16_100[] = {
- { 0, 0x22004000 },
- { 25.2, 0x22006000 },
- { 28.0, 0x22006000 },
- { 31.5, 0x22007000 },
- { 36.0, 0x22007000 },
- { 40.0, 0x22007000 },
- { 45.0, 0x22007000 },
- { 49.5, 0x22009000 },
- { 50.0, 0x22009000 },
- { 56.3, 0x22108000 },
- { 65.0, 0x2210e000 },
- { 75.0, 0x2210e000 },
- { 78.8, 0x2210e000 },
- { 80.0, 0x22210000 },
- { 94.5, 0x22210000 },
- { 96.0, 0x22210000 },
- { 99.0, 0x22210000 },
- { 108.0, 0x22210000 },
- { 121.0, 0x22210000 },
- { 128.9, 0x22210000 },
- { 132.0, 0x22314000 },
- { 135.0, 0x22314000 },
- { 157.5, 0x22415000 },
- { 162.0, 0x22416000 },
- { 175.5, 0x22416000 },
- { 189.0, 0x22416000 },
- { 195.0, 0x22416000 },
- { 202.5, 0x22416000 }
-};
-
-
-struct wm_info i810_wm_24_100[] = {
- { 0, 0x22006000 },
- { 25.2, 0x22009000 },
- { 28.0, 0x22009000 },
- { 31.5, 0x2200a000 },
- { 36.0, 0x2210c000 },
- { 40.0, 0x2210c000 },
- { 45.0, 0x2210c000 },
- { 49.5, 0x22111000 },
- { 50.0, 0x22111000 },
- { 56.3, 0x22111000 },
- { 65.0, 0x22214000 },
- { 75.0, 0x22214000 },
- { 78.8, 0x22215000 },
- { 80.0, 0x22216000 },
- { 94.5, 0x22218000 },
- { 96.0, 0x22418000 },
- { 99.0, 0x22418000 },
- { 108.0, 0x22418000 },
- { 121.0, 0x22418000 },
- { 128.9, 0x22419000 },
- { 132.0, 0x22519000 },
- { 135.0, 0x4441d000 },
- { 157.5, 0x44419000 },
- { 162.0, 0x44419000 },
- { 175.5, 0x44419000 },
- { 189.0, 0x44419000 },
- { 195.0, 0x44419000 },
- { 202.5, 0x44419000 }
-};
-
-struct wm_info i810_wm_32_100[] = {
- { 0, 0x2210b000 },
- { 60, 0x22415000 }, /* 0x314000 works too */
- { 80, 0x22419000 } /* 0x518000 works too */
-};
-
-
-struct wm_info i810_wm_8_133[] = {
- { 0, 0x22003000 },
- { 25.2, 0x22003000 },
- { 28.0, 0x22003000 },
- { 31.5, 0x22003000 },
- { 36.0, 0x22007000 },
- { 40.0, 0x22007000 },
- { 45.0, 0x22007000 },
- { 49.5, 0x22008000 },
- { 50.0, 0x22008000 },
- { 56.3, 0x22008000 },
- { 65.0, 0x22008000 },
- { 75.0, 0x22008000 },
- { 78.8, 0x22008000 },
- { 80.0, 0x22008000 },
- { 94.0, 0x22008000 },
- { 96.0, 0x22107000 },
- { 99.0, 0x22107000 },
- { 108.0, 0x22107000 },
- { 121.0, 0x22107000 },
- { 128.9, 0x22107000 },
- { 132.0, 0x22109000 },
- { 135.0, 0x22109000 },
- { 157.5, 0x2210b000 },
- { 162.0, 0x2210b000 },
- { 175.5, 0x2210b000 },
- { 189.0, 0x2220e000 },
- { 202.5, 0x2220e000 }
-};
-
-
-struct wm_info i810_wm_16_133[] = {
- { 0, 0x22004000 },
- { 25.2, 0x22006000 },
- { 28.0, 0x22006000 },
- { 31.5, 0x22007000 },
- { 36.0, 0x22007000 },
- { 40.0, 0x22007000 },
- { 45.0, 0x22007000 },
- { 49.5, 0x22009000 },
- { 50.0, 0x22009000 },
- { 56.3, 0x22108000 },
- { 65.0, 0x2210e000 },
- { 75.0, 0x2210e000 },
- { 78.8, 0x2210e000 },
- { 80.0, 0x22210000 },
- { 94.5, 0x22210000 },
- { 96.0, 0x22210000 },
- { 99.0, 0x22210000 },
- { 108.0, 0x22210000 },
- { 121.0, 0x22210000 },
- { 128.9, 0x22210000 },
- { 132.0, 0x22314000 },
- { 135.0, 0x22314000 },
- { 157.5, 0x22415000 },
- { 162.0, 0x22416000 },
- { 175.5, 0x22416000 },
- { 189.0, 0x22416000 },
- { 195.0, 0x22416000 },
- { 202.5, 0x22416000 }
-};
-
-struct wm_info i810_wm_24_133[] = {
- { 0, 0x22006000 },
- { 25.2, 0x22009000 },
- { 28.0, 0x22009000 },
- { 31.5, 0x2200a000 },
- { 36.0, 0x2210c000 },
- { 40.0, 0x2210c000 },
- { 45.0, 0x2210c000 },
- { 49.5, 0x22111000 },
- { 50.0, 0x22111000 },
- { 56.3, 0x22111000 },
- { 65.0, 0x22214000 },
- { 75.0, 0x22214000 },
- { 78.8, 0x22215000 },
- { 80.0, 0x22216000 },
- { 94.5, 0x22218000 },
- { 96.0, 0x22418000 },
- { 99.0, 0x22418000 },
- { 108.0, 0x22418000 },
- { 121.0, 0x22418000 },
- { 128.9, 0x22419000 },
- { 132.0, 0x22519000 },
- { 135.0, 0x4441d000 },
- { 157.5, 0x44419000 },
- { 162.0, 0x44419000 },
- { 175.5, 0x44419000 },
- { 189.0, 0x44419000 },
- { 195.0, 0x44419000 },
- { 202.5, 0x44419000 }
-};
-
-static void
-i810WriteControlMMIO(I810CardInfo *i810c, int addr, CARD8 index, CARD8 val) {
- moutb(addr, index);
- moutb(addr+1, val);
-}
-
-static CARD8
-i810ReadControlMMIO(I810CardInfo *i810c, int addr, CARD8 index) {
- moutb(addr, index);
- return minb(addr+1);
-}
-
-static Bool
-i810ModeSupported (KdScreenInfo *screen, const KdMonitorTiming *t)
-{
- /* This is just a guess. */
- if (t->horizontal > 1600 || t->horizontal < 640) return FALSE;
- if (t->vertical > 1200 || t->horizontal < 350) return FALSE;
- return TRUE;
-}
-
-static Bool
-i810ModeUsable (KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
- int byte_width, pixel_width, screen_size;
-
-/* fprintf(stderr,"i810ModeUsable\n"); */
-
- if (screen->fb[0].depth >= 24)
- {
- screen->fb[0].depth = 24;
- screen->fb[0].bitsPerPixel = 24;
- screen->dumb = TRUE;
- }
- else if (screen->fb[0].depth >= 16)
- {
- screen->fb[0].depth = 16;
- screen->fb[0].bitsPerPixel = 16;
- }
- else if (screen->fb[0].depth >= 15)
- {
- screen->fb[0].depth = 15;
- screen->fb[0].bitsPerPixel = 16;
- }
- else
- {
- screen->fb[0].depth = 8;
- screen->fb[0].bitsPerPixel = 8;
- }
- byte_width = screen->width * (screen->fb[0].bitsPerPixel >> 3);
- pixel_width = screen->width;
-
- screen->fb[0].pixelStride = pixel_width;
- screen->fb[0].byteStride = byte_width;
-
- screen_size = byte_width * screen->height;
-
- return screen_size <= (i810c->videoRam * 1024);
-}
-
-static int i810AllocateGARTMemory( KdScreenInfo *screen )
-{
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
- unsigned long size = i810c->videoRam * 1024;
-
- int key;
- long tom = 0;
- unsigned long physical;
-
- if (!KdAgpGARTSupported())
- return FALSE;
-
- if (!KdAcquireGART(screen->mynum))
- return FALSE;
-
- /* This allows the 2d only Xserver to regen */
- i810c->agpAcquired2d = TRUE;
-
- /* Treat the gart like video memory - we assume we own all that is
- * there, so ignore EBUSY errors. Don't try to remove it on
- * failure, either, as other X server may be using it.
- */
-
- if ((key = KdAllocateGARTMemory(screen->mynum, size, 0, NULL)) == -1)
- return FALSE;
-
- i810c->VramOffset = 0;
- i810c->VramKey = key;
-
- if (!KdBindGARTMemory(screen->mynum, key, 0))
- return FALSE;
-
-
- i810c->SysMem.Start = 0;
- i810c->SysMem.Size = size;
- i810c->SysMem.End = size;
- i810c->SavedSysMem = i810c->SysMem;
-
- tom = i810c->SysMem.End;
-
- i810c->DcacheMem.Start = 0;
- i810c->DcacheMem.End = 0;
- i810c->DcacheMem.Size = 0;
- i810c->CursorPhysical = 0;
-
- /* Dcache - half the speed of normal ram, so not really useful for
- * a 2d server. Don't bother reporting its presence. This is
- * mapped in addition to the requested amount of system ram.
- */
- size = 1024 * 4096;
-
- /* Keep it 512K aligned for the sake of tiled regions.
- */
- tom += 0x7ffff;
- tom &= ~0x7ffff;
-
- if ((key = KdAllocateGARTMemory(screen->mynum, size, AGP_DCACHE_MEMORY, NULL)) != -1) {
- i810c->DcacheOffset= tom;
- i810c->DcacheKey = key;
- if (!KdBindGARTMemory(screen->mynum, key, tom)) {
- fprintf(stderr,"Allocation of %ld bytes for DCACHE failed\n", size);
- i810c->DcacheKey = -1;
- } else {
- i810c->DcacheMem.Start = tom;
- i810c->DcacheMem.Size = size;
- i810c->DcacheMem.End = i810c->DcacheMem.Start + i810c->DcacheMem.Size;
- tom = i810c->DcacheMem.End;
- }
- } else {
- fprintf(stderr,
- "No physical memory available for %ld bytes of DCACHE\n",
- size);
- i810c->DcacheKey = -1;
- }
-
- /* Mouse cursor -- The i810 (crazy) needs a physical address in
- * system memory from which to upload the cursor. We get this from
- * the agpgart module using a special memory type.
- */
-
- /* 4k for the cursor is excessive, I'm going to steal 3k for
- * overlay registers later
- */
-
- size = 4096;
-
- if ((key = KdAllocateGARTMemory(screen->mynum, size, AGP_PHYS_MEMORY,
- &physical)) == -1) {
- fprintf(stderr,
- "No physical memory available for HW cursor\n");
- i810c->HwcursKey = -1;
- } else {
- i810c->HwcursOffset= tom;
- i810c->HwcursKey = key;
- if (!KdBindGARTMemory(screen->mynum, key, tom)) {
- fprintf(stderr,
- "Allocation of %ld bytes for HW cursor failed\n",
- size);
- i810c->HwcursKey = -1;
- } else {
- i810c->CursorPhysical = physical;
- i810c->CursorStart = tom;
- tom += size;
- }
- }
-
- /* Overlay register buffer -- Just like the cursor, the i810 needs a
- * physical address in system memory from which to upload the overlay
- * registers.
- */
- if (i810c->CursorStart != 0) {
- i810c->OverlayPhysical = i810c->CursorPhysical + 1024;
- i810c->OverlayStart = i810c->CursorStart + 1024;
- }
-
-
- i810c->GttBound = 1;
-
- return TRUE;
-}
-
-/* Allocate from a memrange, returns success */
-
-static int i810AllocLow( I810MemRange *result, I810MemRange *pool, int size )
-{
- if (size > pool->Size) return FALSE;
-
- pool->Size -= size;
- result->Size = size;
- result->Start = pool->Start;
- result->End = pool->Start += size;
- return TRUE;
-}
-
-static int i810AllocHigh( I810MemRange *result, I810MemRange *pool, int size )
-{
- if (size > pool->Size) return 0;
-
- pool->Size -= size;
- result->Size = size;
- result->End = pool->End;
- result->Start = pool->End -= size;
- return 1;
-}
-
-static Bool
-i810AllocateFront(KdScreenInfo *screen) {
-
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
-
- int cache_lines = -1;
-
- if(i810c->DoneFrontAlloc)
- return TRUE;
-
- memset(&(i810c->FbMemBox), 0, sizeof(BoxRec));
- /* Alloc FrontBuffer/Ring/Accel memory */
- i810c->FbMemBox.x1=0;
- i810c->FbMemBox.x2=screen->width;
- i810c->FbMemBox.y1=0;
- i810c->FbMemBox.y2=screen->height;
-
- /* This could be made a command line option */
- cache_lines = 0;
-
- if(cache_lines >= 0)
- i810c->FbMemBox.y2 += cache_lines;
- else {
- /* make sure there is enough for two DVD sized YUV buffers */
- i810c->FbMemBox.y2 += (screen->fb[0].depth == 24) ? 256 : 384;
- if (screen->width <= 1024)
- i810c->FbMemBox.y2 += (screen->fb[0].depth == 24) ? 256 : 384;
- cache_lines = i810c->FbMemBox.y2 - screen->height;
- }
-
- if (I810_DEBUG)
- ErrorF("Adding %i scanlines for pixmap caching\n", cache_lines);
-
- /* Reserve room for the framebuffer and pixcache. Put at the top
- * of memory so we can have nice alignment for the tiled regions at
- * the start of memory.
- */
- i810AllocLow( &(i810c->FrontBuffer),
- &(i810c->SysMem),
- ((i810c->FbMemBox.x2 *
- i810c->FbMemBox.y2 *
- i810c->cpp) + 4095) & ~4095);
-
- memset( &(i810c->LpRing), 0, sizeof( I810RingBuffer ) );
- if(i810AllocLow( &(i810c->LpRing.mem), &(i810c->SysMem), 16*4096 )) {
- if (I810_DEBUG & DEBUG_VERBOSE_MEMORY)
- ErrorF( "ring buffer at local %lx\n",
- i810c->LpRing.mem.Start);
-
- i810c->LpRing.tail_mask = i810c->LpRing.mem.Size - 1;
- i810c->LpRing.virtual_start = i810c->FbBase + i810c->LpRing.mem.Start;
- i810c->LpRing.head = 0;
- i810c->LpRing.tail = 0;
- i810c->LpRing.space = 0;
- }
-
- if ( i810AllocLow( &i810c->Scratch, &(i810c->SysMem), 64*1024 ) ||
- i810AllocLow( &i810c->Scratch, &(i810c->SysMem), 16*1024 ) ) {
- if (I810_DEBUG & DEBUG_VERBOSE_MEMORY)
- ErrorF("Allocated Scratch Memory\n");
- }
-
-#ifdef XV
- /* 720x720 is just how much memory the mpeg player needs for overlays */
-
- if ( i810AllocHigh( &i810c->XvMem, &(i810c->SysMem), 720*720*2 )) {
- if (I810_DEBUG & DEBUG_VERBOSE_MEMORY)
- ErrorF("Allocated overlay Memory\n");
- }
-#endif
-
- i810c->DoneFrontAlloc = TRUE;
- return TRUE;
-}
-
-static Bool
-i810MapMem(KdScreenInfo *screen)
-{
-
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
-
- i810c->LpRing.virtual_start = i810c->FbBase + i810c->LpRing.mem.Start;
-
- return TRUE;
-}
-
-
-Bool
-i810ScreenInit (KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
- I810ScreenInfo *i810s;
-
- int i;
-
- const KdMonitorTiming *t;
-
-/* fprintf(stderr,"i810ScreenInit\n"); */
-
- i810s = (I810ScreenInfo *) xalloc (sizeof (I810ScreenInfo));
- if (!i810s)
- return FALSE;
-
- memset (i810s, '\0', sizeof (I810ScreenInfo));
-
- i810s->i810c = i810c;
-
- /* Default dimensions */
- if (!screen->width || !screen->height)
- {
- screen->width = 720;
- screen->height = 576;
- screen->rate = 52;
-#if 0
- screen->width = 1024;
- screen->height = 768;
- screen->rate = 72;
-#endif
- }
-
- if (!screen->fb[0].depth)
- screen->fb[0].depth = 16;
-
- t = KdFindMode (screen, i810ModeSupported);
-
- screen->rate = t->rate;
- screen->width = t->horizontal;
- screen->height = t->vertical;
-
- if (!KdTuneMode (screen, i810ModeUsable, i810ModeSupported))
- {
- xfree (i810c);
- return FALSE;
- }
-
-/* fprintf(stderr,"Screen rate %d horiz %d vert %d\n",t->rate,t->horizontal,t->vertical); */
-
- switch (screen->fb[0].depth) {
- case 8:
- screen->fb[0].visuals = ((1 << StaticGray) |
- (1 << GrayScale) |
- (1 << StaticColor) |
- (1 << PseudoColor) |
- (1 << TrueColor) |
- (1 << DirectColor));
- screen->fb[0].blueMask = 0x00;
- screen->fb[0].greenMask = 0x00;
- screen->fb[0].redMask = 0x00;
- break;
- case 15:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x001f;
- screen->fb[0].greenMask = 0x03e0;
- screen->fb[0].redMask = 0x7c00;
-
- i810c->colorKey = 0x043f;
-
- break;
- case 16:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x001f;
- screen->fb[0].greenMask = 0x07e0;
- screen->fb[0].redMask = 0xf800;
-
- i810c->colorKey = 0x083f;
-
- break;
- case 24:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x0000ff;
- screen->fb[0].greenMask = 0x00ff00;
- screen->fb[0].redMask = 0xff0000;
-
- i810c->colorKey = 0x0101ff;
-
- break;
- default:
- fprintf(stderr,"Unsupported depth %d\n",screen->fb[0].depth);
- return FALSE;
- }
-
-
-
- /* Set all colours to black */
- for (i=0; i<768; i++) i810c->vga.ModeReg.DAC[i] = 0x00;
-
- /* ... and the overscan */
- if (screen->fb[0].depth >= 4)
- i810c->vga.ModeReg.Attribute[OVERSCAN] = 0xFF;
-
- /* Could be made a command-line option */
-
-#ifdef I810CFG_SHOW_OVERSCAN
- i810c->vga.ModeReg.DAC[765] = 0x3F;
- i810c->vga.ModeReg.DAC[766] = 0x00;
- i810c->vga.ModeReg.DAC[767] = 0x3F;
- i810c->vga.ModeReg.Attribute[OVERSCAN] = 0xFF;
- i810c->vga.ShowOverscan = TRUE;
-#else
- i810c->vga.ShowOverscan = FALSE;
-#endif
-
- i810c->vga.paletteEnabled = FALSE;
- i810c->vga.cmapSaved = FALSE;
- i810c->vga.MMIOBase = i810c->MMIOBase;
-
- i810c->cpp = screen->fb[0].bitsPerPixel/8;
-
- /* move to initscreen? */
-
- switch (screen->fb[0].bitsPerPixel) {
- case 8:
- i810c->MaxClock = 203000;
- break;
- case 16:
- i810c->MaxClock = 163000;
- break;
- case 24:
- i810c->MaxClock = 136000;
- break;
- case 32: /* not supported */
- i810c->MaxClock = 86000;
- default:
- fprintf(stderr,"Unsupported bpp %d\n",screen->fb[0].bitsPerPixel);
- return FALSE;
- }
-
- if (!i810AllocateGARTMemory( screen )) {
- return FALSE;
- }
-
- i810AllocateFront(screen);
-
- /* Map LpRing memory */
- if (!i810MapMem(screen)) return FALSE;
-
- screen->fb[0].frameBuffer = i810c->FbBase;
-
- screen->driver = i810s;
-
- return TRUE;
-}
-
-/*
- * I810Save --
- *
- * This function saves the video state. It reads all of the SVGA registers
- * into the vgaI810Rec data structure. There is in general no need to
- * mask out bits here - just read the registers.
- */
-static void
-DoSave(KdCardInfo *card, vgaRegPtr vgaReg, I810RegPtr i810Reg, Bool saveFonts)
-{
-
- I810CardInfo *i810c = card->driver;
- i810VGAPtr vgap = &i810c->vga;
-
- int i;
-
- /* Save VGA registers */
-
- vgaReg->MiscOutReg = mmioReadMiscOut(vgap);
- if (vgaReg->MiscOutReg & 0x01)
- vgap->IOBase = VGA_IOBASE_COLOR;
- else
- vgap->IOBase = VGA_IOBASE_MONO;
-
- for (i = 0; i < VGA_NUM_CRTC; i++) {
- vgaReg->CRTC[i] = mmioReadCrtc(vgap, i);
- }
-
- mmioEnablePalette(vgap);
- for (i = 0; i < VGA_NUM_ATTR; i++) {
- vgaReg->Attribute[i] = mmioReadAttr(vgap, i);
- }
- mmioDisablePalette(vgap);
-
- for (i = 0; i < VGA_NUM_GFX; i++) {
- vgaReg->Graphics[i] = mmioReadGr(vgap, i);
- }
-
- for (i = 1; i < VGA_NUM_SEQ; i++) {
- vgaReg->Sequencer[i] = mmioReadSeq(vgap, i);
- }
-
- /*
- * The port I/O code necessary to read in the extended registers
- * into the fields of the I810Rec structure goes here.
- */
- i810Reg->IOControl = mmioReadCrtc(vgap, IO_CTNL);
- i810Reg->AddressMapping = i810ReadControlMMIO(i810c, GRX, ADDRESS_MAPPING);
- i810Reg->BitBLTControl = INREG8(BITBLT_CNTL);
- i810Reg->VideoClk2_M = INREG16(VCLK2_VCO_M);
- i810Reg->VideoClk2_N = INREG16(VCLK2_VCO_N);
- i810Reg->VideoClk2_DivisorSel = INREG8(VCLK2_VCO_DIV_SEL);
-
- i810Reg->ExtVertTotal=mmioReadCrtc(vgap, EXT_VERT_TOTAL);
- i810Reg->ExtVertDispEnd=mmioReadCrtc(vgap, EXT_VERT_DISPLAY);
- i810Reg->ExtVertSyncStart=mmioReadCrtc(vgap, EXT_VERT_SYNC_START);
- i810Reg->ExtVertBlankStart=mmioReadCrtc(vgap, EXT_VERT_BLANK_START);
- i810Reg->ExtHorizTotal=mmioReadCrtc(vgap, EXT_HORIZ_TOTAL);
- i810Reg->ExtHorizBlank=mmioReadCrtc(vgap, EXT_HORIZ_BLANK);
- i810Reg->ExtOffset=mmioReadCrtc(vgap, EXT_OFFSET);
- i810Reg->InterlaceControl=mmioReadCrtc(vgap, INTERLACE_CNTL);
-
- i810Reg->PixelPipeCfg0 = INREG8(PIXPIPE_CONFIG_0);
- i810Reg->PixelPipeCfg1 = INREG8(PIXPIPE_CONFIG_1);
- i810Reg->PixelPipeCfg2 = INREG8(PIXPIPE_CONFIG_2);
- i810Reg->DisplayControl = INREG8(DISPLAY_CNTL);
- i810Reg->LMI_FIFO_Watermark = INREG(FWATER_BLC);
-
- for (i = 0 ; i < 8 ; i++)
- i810Reg->Fence[i] = INREG(FENCE+i*4);
-
- i810Reg->LprbTail = INREG(LP_RING + RING_TAIL);
- i810Reg->LprbHead = INREG(LP_RING + RING_HEAD);
- i810Reg->LprbStart = INREG(LP_RING + RING_START);
- i810Reg->LprbLen = INREG(LP_RING + RING_LEN);
-
- if ((i810Reg->LprbTail & TAIL_ADDR) != (i810Reg->LprbHead & HEAD_ADDR) &&
- i810Reg->LprbLen & RING_VALID) {
- i810PrintErrorState( i810c );
- FatalError( "Active ring not flushed\n");
- }
-
- if (I810_DEBUG) {
- fprintf(stderr,"Got mode in I810Save:\n");
- i810PrintMode( vgaReg, i810Reg );
- }
-}
-
-static void
-i810Preserve(KdCardInfo *card)
-{
- I810CardInfo *i810c = card->driver;
- i810VGAPtr vgap = &i810c->vga;
-
-/* fprintf(stderr,"i810Preserve\n"); */
- DoSave(card, &vgap->SavedReg, &i810c->SavedReg, TRUE);
-}
-
-/* Famous last words
- */
-void
-i810PrintErrorState(i810CardInfo *i810c)
-{
-
- fprintf(stderr, "pgetbl_ctl: 0x%lx pgetbl_err: 0x%lx\n",
- INREG(PGETBL_CTL),
- INREG(PGE_ERR));
-
- fprintf(stderr, "ipeir: %lx iphdr: %lx\n",
- INREG(IPEIR),
- INREG(IPEHR));
-
- fprintf(stderr, "LP ring tail: %lx head: %lx len: %lx start %lx\n",
- INREG(LP_RING + RING_TAIL),
- INREG(LP_RING + RING_HEAD) & HEAD_ADDR,
- INREG(LP_RING + RING_LEN),
- INREG(LP_RING + RING_START));
-
- fprintf(stderr, "eir: %x esr: %x emr: %x\n",
- INREG16(EIR),
- INREG16(ESR),
- INREG16(EMR));
-
- fprintf(stderr, "instdone: %x instpm: %x\n",
- INREG16(INST_DONE),
- INREG8(INST_PM));
-
- fprintf(stderr, "memmode: %lx instps: %lx\n",
- INREG(MEMMODE),
- INREG(INST_PS));
-
- fprintf(stderr, "hwstam: %x ier: %x imr: %x iir: %x\n",
- INREG16(HWSTAM),
- INREG16(IER),
- INREG16(IMR),
- INREG16(IIR));
-}
-
-static Bool
-i810BindGARTMemory( KdScreenInfo *screen )
-{
-
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = card->driver;
-
- if (!i810c->GttBound) {
- if (!KdAcquireGART(screen->mynum))
- return FALSE;
- if (!KdBindGARTMemory(screen->mynum, i810c->VramKey,
- i810c->VramOffset))
-
- return FALSE;
- if (i810c->DcacheKey != -1) {
- if (!KdBindGARTMemory(screen->mynum, i810c->DcacheKey,
- i810c->DcacheOffset))
- return FALSE;
- }
- if (i810c->HwcursKey != -1) {
- if (!KdBindGARTMemory(screen->mynum, i810c->HwcursKey,
- i810c->HwcursOffset))
- return FALSE;
- }
- i810c->GttBound = 1;
- }
- return TRUE;
-}
-
-static Bool
-i810UnbindGARTMemory(KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = card->driver;
-
-
- if (KdAgpGARTSupported() && i810c->GttBound) {
- if (!KdUnbindGARTMemory(screen->mynum, i810c->VramKey))
- return FALSE;
- if (i810c->DcacheKey != -1) {
- if (!KdUnbindGARTMemory(screen->mynum, i810c->DcacheKey))
- return FALSE;
- }
- if (i810c->HwcursKey != -1) {
- if (!KdUnbindGARTMemory(screen->mynum, i810c->HwcursKey))
- return FALSE;
- }
- if (!KdReleaseGART(screen->mynum))
- return FALSE;
- i810c->GttBound = 0;
- }
- return TRUE;
-}
-
-/*
- * I810CalcVCLK --
- *
- * Determine the closest clock frequency to the one requested.
- */
-
-#define MAX_VCO_FREQ 600.0
-#define TARGET_MAX_N 30
-#define REF_FREQ 24.0
-
-#define CALC_VCLK(m,n,p) \
- (double)m / ((double)n * (1 << p)) * 4 * REF_FREQ
-
-static void
-i810CalcVCLK( KdScreenInfo *screen, double freq )
-{
-
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = card->driver;
- I810RegPtr i810Reg = &i810c->ModeReg;
-
- int m, n, p;
- double f_out, f_best;
- double f_err;
- double f_vco;
- int m_best = 0, n_best = 0, p_best = 0;
- double f_target = freq;
- double err_max = 0.005;
- double err_target = 0.001;
- double err_best = 999999.0;
-
- p_best = p = log(MAX_VCO_FREQ/f_target)/log((double)2);
- f_vco = f_target * (1 << p);
-
- n = 2;
- do {
- n++;
- m = f_vco / (REF_FREQ / (double)n) / (double)4.0 + 0.5;
- if (m < 3) m = 3;
- f_out = CALC_VCLK(m,n,p);
- f_err = 1.0 - (f_target/f_out);
- if (fabs(f_err) < err_max) {
- m_best = m;
- n_best = n;
- f_best = f_out;
- err_best = f_err;
- }
- } while ((fabs(f_err) >= err_target) &&
- ((n <= TARGET_MAX_N) || (fabs(err_best) > err_max)));
-
- if (fabs(f_err) < err_target) {
- m_best = m;
- n_best = n;
- }
-
- i810Reg->VideoClk2_M = (m_best-2) & 0x3FF;
- i810Reg->VideoClk2_N = (n_best-2) & 0x3FF;
- i810Reg->VideoClk2_DivisorSel = (p_best << 4);
-
-/* fprintf(stderr, "Setting dot clock to %.1f MHz " */
-/* "[ 0x%x 0x%x 0x%x ] " */
-/* "[ %d %d %d ]\n", */
-/* CALC_VCLK(m_best,n_best,p_best), */
-/* i810Reg->VideoClk2_M, */
-/* i810Reg->VideoClk2_N, */
-/* i810Reg->VideoClk2_DivisorSel, */
-/* m_best, n_best, p_best); */
-}
-
-/*
- * I810CalcFIFO --
- *
- * Calculate burst length and FIFO watermark.
- */
-
-#define Elements(x) (sizeof(x)/sizeof(*x))
-
-static unsigned int
-i810CalcWatermark( KdScreenInfo *screen, double freq, Bool dcache )
-{
-
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = card->driver;
-
-
- struct wm_info *tab;
- int nr;
- int i;
-
- if (i810c->LmFreqSel == 100) {
- switch(screen->fb[0].bitsPerPixel) {
- case 8:
- tab = i810_wm_8_100;
- nr = Elements(i810_wm_8_100);
- break;
- case 16:
- tab = i810_wm_16_100;
- nr = Elements(i810_wm_16_100);
- break;
- case 24:
- tab = i810_wm_24_100;
- nr = Elements(i810_wm_24_100);
- break;
- default:
- return 0;
- }
- } else {
- switch(screen->fb[0].bitsPerPixel) {
- case 8:
- tab = i810_wm_8_133;
- nr = Elements(i810_wm_8_133);
- break;
- case 16:
- tab = i810_wm_16_133;
- nr = Elements(i810_wm_16_133);
- break;
- case 24:
- tab = i810_wm_24_133;
- nr = Elements(i810_wm_24_133);
- break;
- default:
- return 0;
- }
- }
-
- for (i = 0 ; i < nr && tab[i].freq < freq ; i++);
-
- if (i == nr)
- i--;
-
-/* fprintf(stderr,"chose watermark 0x%x: (tab.freq %.1f)\n", */
-/* tab[i].wm, tab[i].freq); */
-
- /* None of these values (sourced from intel) have watermarks for
- * the dcache memory. Fake it for now by using the same watermark
- * for both...
- *
- * Update: this is probably because dcache isn't real useful as
- * framebuffer memory, so intel's drivers don't need watermarks
- * for that memory because they never use it to feed the ramdacs.
- * We do use it in the fallback mode, so keep the watermarks for
- * now.
- */
- if (dcache)
- return (tab[i].wm & ~0xffffff) | ((tab[i].wm>>12) & 0xfff);
- else
- return tab[i].wm;
-}
-
-static void i810PrintMode( vgaRegPtr vgaReg, I810RegPtr mode )
-{
- int i;
-
- fprintf(stderr," MiscOut: %x\n", vgaReg->MiscOutReg);
-
-
- fprintf(stderr,"SEQ: ");
- for (i = 0 ; i < VGA_NUM_SEQ ; i++) {
- if ((i&7)==0) fprintf(stderr,"\n");
- fprintf(stderr," %d: %x", i, vgaReg->Sequencer[i]);
- }
- fprintf(stderr,"\n");
-
- fprintf(stderr,"CRTC: ");
- for (i = 0 ; i < VGA_NUM_CRTC ; i++) {
- if ((i&3)==0) fprintf(stderr,"\n");
- fprintf(stderr," CR%02x: %2x", i, vgaReg->CRTC[i]);
- }
- fprintf(stderr,"\n");
-
- fprintf(stderr,"GFX: ");
- for (i = 0 ; i < VGA_NUM_GFX ; i++) {
- if ((i&3)==0) fprintf(stderr,"\n");
- fprintf(stderr," GR%02x: %02x", i, vgaReg->Graphics[i]);
- }
- fprintf(stderr,"\n");
-
- fprintf(stderr,"ATTR: ");
- for (i = 0 ; i < VGA_NUM_ATTR ; i++) {
- if ((i&7)==0) fprintf(stderr,"\n");
- fprintf(stderr," %d: %x", i, vgaReg->Attribute[i]);
- }
- fprintf(stderr,"\n");
-
-
- fprintf(stderr," DisplayControl: %x\n", mode->DisplayControl);
- fprintf(stderr," PixelPipeCfg0: %x\n", mode->PixelPipeCfg0);
- fprintf(stderr," PixelPipeCfg1: %x\n", mode->PixelPipeCfg1);
- fprintf(stderr," PixelPipeCfg2: %x\n", mode->PixelPipeCfg2);
- fprintf(stderr," VideoClk2_M: %x\n", mode->VideoClk2_M);
- fprintf(stderr," VideoClk2_N: %x\n", mode->VideoClk2_N);
- fprintf(stderr," VideoClk2_DivisorSel: %x\n", mode->VideoClk2_DivisorSel);
- fprintf(stderr," AddressMapping: %x\n", mode->AddressMapping);
- fprintf(stderr," IOControl: %x\n", mode->IOControl);
- fprintf(stderr," BitBLTControl: %x\n", mode->BitBLTControl);
- fprintf(stderr," ExtVertTotal: %x\n", mode->ExtVertTotal);
- fprintf(stderr," ExtVertDispEnd: %x\n", mode->ExtVertDispEnd);
- fprintf(stderr," ExtVertSyncStart: %x\n", mode->ExtVertSyncStart);
- fprintf(stderr," ExtVertBlankStart: %x\n", mode->ExtVertBlankStart);
- fprintf(stderr," ExtHorizTotal: %x\n", mode->ExtHorizTotal);
- fprintf(stderr," ExtHorizBlank: %x\n", mode->ExtHorizBlank);
- fprintf(stderr," ExtOffset: %x\n", mode->ExtOffset);
- fprintf(stderr," InterlaceControl: %x\n", mode->InterlaceControl);
- fprintf(stderr," LMI_FIFO_Watermark: %x\n", mode->LMI_FIFO_Watermark);
- fprintf(stderr," LprbTail: %x\n", mode->LprbTail);
- fprintf(stderr," LprbHead: %x\n", mode->LprbHead);
- fprintf(stderr," LprbStart: %x\n", mode->LprbStart);
- fprintf(stderr," LprbLen: %x\n", mode->LprbLen);
- fprintf(stderr," OverlayActiveStart: %x\n", mode->OverlayActiveStart);
- fprintf(stderr," OverlayActiveEnd: %x\n", mode->OverlayActiveEnd);
-}
-
-
-/*
- * i810VGASeqReset
- * perform a sequencer reset.
- *
- * The i815 documentation states that these bits are not used by the
- * HW, but still warns about not programming them...
- */
-
-static void
-i810VGASeqReset(i810VGAPtr vgap, Bool start)
-{
- if (start)
- {
- mmioWriteSeq(vgap, 0x00, 0x01); /* Synchronous Reset */
- }
- else
- {
- mmioWriteSeq(vgap, 0x00, 0x03); /* End Reset */
- }
-}
-
-static void
-i810VGAProtect(KdCardInfo *card, Bool on)
-{
-
- I810CardInfo *i810c = card->driver;
- i810VGAPtr vgap = &i810c->vga;
-
- unsigned char tmp;
-
- if (on) {
- /*
- * Turn off screen and disable sequencer.
- */
- tmp = mmioReadSeq(vgap, 0x01);
-
- i810VGASeqReset(vgap, TRUE); /* start synchronous reset */
- mmioWriteSeq(vgap, 0x01, tmp | 0x20); /* disable the display */
-
- mmioEnablePalette(vgap);
- } else {
- /*
- * Reenable sequencer, then turn on screen.
- */
-
- tmp = mmioReadSeq(vgap, 0x01);
-
- mmioWriteSeq(vgap, 0x01, tmp & ~0x20); /* reenable display */
- i810VGASeqReset(vgap, FALSE); /* clear synchronousreset */
-
- mmioDisablePalette(vgap);
- }
-}
-
-/*
- * i810VGABlankScreen -- blank the screen.
- */
-
-void
-i810VGABlankScreen(KdCardInfo *card, Bool on)
-{
- I810CardInfo *i810c = card->driver;
- i810VGAPtr vgap = &i810c->vga;
-
- unsigned char scrn;
-
- scrn = mmioReadSeq(vgap, 0x01);
-
- if (on) {
- scrn &= ~0x20; /* enable screen */
- } else {
- scrn |= 0x20; /* blank screen */
- }
-
- mmioWriteSeq(vgap,0x00,0x01);
- mmioWriteSeq(vgap, 0x01, scrn); /* change mode */
- mmioWriteSeq(vgap,0x00,0x03);
-}
-
-/* Restore hardware state */
-
-static void
-DoRestore(KdCardInfo *card, vgaRegPtr vgaReg, I810RegPtr i810Reg,
- Bool restoreFonts) {
-
-
- I810CardInfo *i810c = card->driver;
-
- i810VGAPtr vgap = &i810c->vga;
-
- unsigned char temp;
- unsigned int itemp;
- int i;
-
- if (I810_DEBUG & DEBUG_VERBOSE_VGA) {
- fprintf(stderr,"Setting mode in DoRestore:\n");
- i810PrintMode( vgaReg, i810Reg );
- }
-
- /* Blank screen (i810vgaprotect) */
- i810VGAProtect(card, TRUE);
-
- /* Should wait for at least two hsync and no more than two vsync
- before writing PIXCONF and turning the display on (?) */
- usleep(50000);
-
- /* Turn off DRAM Refresh */
- temp = INREG8( DRAM_ROW_CNTL_HI );
- temp &= ~DRAM_REFRESH_RATE;
- temp |= DRAM_REFRESH_DISABLE;
- OUTREG8( DRAM_ROW_CNTL_HI, temp );
-
- usleep(1000); /* Wait 1 ms */
-
- /* Write the M, N and P values */
- OUTREG16( VCLK2_VCO_M, i810Reg->VideoClk2_M);
- OUTREG16( VCLK2_VCO_N, i810Reg->VideoClk2_N);
- OUTREG8( VCLK2_VCO_DIV_SEL, i810Reg->VideoClk2_DivisorSel);
-
- /*
- * Turn on 8 bit dac mode, if requested. This is needed to make
- * sure that vgaHWRestore writes the values into the DAC properly.
- * The problem occurs if 8 bit dac mode is requested and the HW is
- * in 6 bit dac mode. If this happens, all the values are
- * automatically shifted left twice by the HW and incorrect colors
- * will be displayed on the screen. The only time this can happen
- * is at server startup time and when switching back from a VT.
- */
- temp = INREG8(PIXPIPE_CONFIG_0);
- temp &= 0x7F; /* Save all but the 8 bit dac mode bit */
- temp |= (i810Reg->PixelPipeCfg0 & DAC_8_BIT);
- OUTREG8( PIXPIPE_CONFIG_0, temp );
-
- /*
- * Code to restore any SVGA registers that have been saved/modified
- * goes here. Note that it is allowable, and often correct, to
- * only modify certain bits in a register by a read/modify/write cycle.
- *
- * A special case - when using an external clock-setting program,
- * this function must not change bits associated with the clock
- * selection. This condition can be checked by the condition:
- *
- * if (i810Reg->std.NoClock >= 0)
- * restore clock-select bits.
- */
-
- /* VGA restore */
- if (vgaReg->MiscOutReg & 0x01)
- vgap->IOBase = VGA_IOBASE_COLOR;
- else
- vgap->IOBase = VGA_IOBASE_MONO;
-
- mmioWriteMiscOut(vgap, vgaReg->MiscOutReg);
-
- for (i = 1; i < VGA_NUM_SEQ; i++)
- mmioWriteSeq(vgap, i, vgaReg->Sequencer[i]);
-
- /* Ensure CRTC registers 0-7 are unlocked by clearing bit 7 or CRTC[17] */
- /* = CR11 */
- mmioWriteCrtc(vgap, 17, vgaReg->CRTC[17] & ~0x80);
-
- for (i = 0; i < VGA_NUM_CRTC; i++) {
- mmioWriteCrtc(vgap, i, vgaReg->CRTC[i]);
- }
-
- for (i = 0; i < VGA_NUM_GFX; i++)
- mmioWriteGr(vgap, i, vgaReg->Graphics[i]);
-
- mmioEnablePalette(vgap);
- for (i = 0; i < VGA_NUM_ATTR; i++)
- mmioWriteAttr(vgap, i, vgaReg->Attribute[i]);
- mmioDisablePalette(vgap);
-
-
- mmioWriteCrtc(vgap, EXT_VERT_TOTAL, i810Reg->ExtVertTotal);
- mmioWriteCrtc(vgap, EXT_VERT_DISPLAY, i810Reg->ExtVertDispEnd);
- mmioWriteCrtc(vgap, EXT_VERT_SYNC_START, i810Reg->ExtVertSyncStart);
- mmioWriteCrtc(vgap, EXT_VERT_BLANK_START, i810Reg->ExtVertBlankStart);
- mmioWriteCrtc(vgap, EXT_HORIZ_TOTAL, i810Reg->ExtHorizTotal);
- mmioWriteCrtc(vgap, EXT_HORIZ_BLANK, i810Reg->ExtHorizBlank);
-
- /* write CR40, CR42 first etc to get CR13 written as described in PRM */
-
- mmioWriteCrtc(vgap, EXT_START_ADDR_HI, 0);
- mmioWriteCrtc(vgap, EXT_START_ADDR, EXT_START_ADDR_ENABLE);
-
- mmioWriteCrtc(vgap, EXT_OFFSET, i810Reg->ExtOffset);
- mmioWriteCrtc(vgap, 0x13, vgaReg->CRTC[0x13]);
-
- temp=mmioReadCrtc(vgap, INTERLACE_CNTL);
- temp &= ~INTERLACE_ENABLE;
- temp |= i810Reg->InterlaceControl;
- mmioWriteCrtc(vgap, INTERLACE_CNTL, temp);
-
- temp=i810ReadControlMMIO(i810c, GRX, ADDRESS_MAPPING);
- temp &= 0xE0; /* Save reserved bits 7:5 */
- temp |= i810Reg->AddressMapping;
- i810WriteControlMMIO(i810c, GRX, ADDRESS_MAPPING, temp);
-
- /* Setting the OVRACT Register for video overlay*/
- OUTREG(0x6001C, (i810Reg->OverlayActiveEnd << 16) | i810Reg->OverlayActiveStart);
-
- /* Turn on DRAM Refresh */
- temp = INREG8( DRAM_ROW_CNTL_HI );
- temp &= ~DRAM_REFRESH_RATE;
- temp |= DRAM_REFRESH_60HZ;
- OUTREG8( DRAM_ROW_CNTL_HI, temp );
-
- temp = INREG8( BITBLT_CNTL );
- temp &= ~COLEXP_MODE;
- temp |= i810Reg->BitBLTControl;
- OUTREG8( BITBLT_CNTL, temp );
-
- temp = INREG8( DISPLAY_CNTL );
- temp &= ~(VGA_WRAP_MODE | GUI_MODE);
- temp |= i810Reg->DisplayControl;
- OUTREG8( DISPLAY_CNTL, temp );
-
-
- temp = INREG8( PIXPIPE_CONFIG_0 );
- temp &= 0x64; /* Save reserved bits 6:5,2 */
- temp |= i810Reg->PixelPipeCfg0;
- OUTREG8( PIXPIPE_CONFIG_0, temp );
-
- temp = INREG8( PIXPIPE_CONFIG_2 );
- temp &= 0xF3; /* Save reserved bits 7:4,1:0 */
- temp |= i810Reg->PixelPipeCfg2;
- OUTREG8( PIXPIPE_CONFIG_2, temp );
-
- temp = INREG8( PIXPIPE_CONFIG_1 );
- temp &= ~DISPLAY_COLOR_MODE;
- temp &= 0xEF; /* Restore the CRT control bit */
- temp |= i810Reg->PixelPipeCfg1;
- OUTREG8( PIXPIPE_CONFIG_1, temp );
-
- OUTREG16(EIR, 0);
-
- itemp = INREG(FWATER_BLC);
- itemp &= ~(LM_BURST_LENGTH | LM_FIFO_WATERMARK |
- MM_BURST_LENGTH | MM_FIFO_WATERMARK );
- itemp |= i810Reg->LMI_FIFO_Watermark;
- OUTREG(FWATER_BLC, itemp);
-
-
- for (i = 0 ; i < 8 ; i++) {
- OUTREG( FENCE+i*4, i810Reg->Fence[i] );
- if (I810_DEBUG & DEBUG_VERBOSE_VGA)
- fprintf(stderr,"Fence Register : %x\n", i810Reg->Fence[i]);
- }
-
- /* First disable the ring buffer (Need to wait for empty first?, if so
- * should probably do it before entering this section)
- */
- itemp = INREG(LP_RING + RING_LEN);
- itemp &= ~RING_VALID_MASK;
- OUTREG(LP_RING + RING_LEN, itemp );
-
- /* Set up the low priority ring buffer.
- */
- OUTREG(LP_RING + RING_TAIL, 0 );
- OUTREG(LP_RING + RING_HEAD, 0 );
-
- i810c->LpRing.head = 0;
- i810c->LpRing.tail = 0;
-
- itemp = INREG(LP_RING + RING_START);
- itemp &= ~(START_ADDR);
- itemp |= i810Reg->LprbStart;
- OUTREG(LP_RING + RING_START, itemp );
-
- itemp = INREG(LP_RING + RING_LEN);
- itemp &= ~(RING_NR_PAGES | RING_REPORT_MASK | RING_VALID_MASK);
- itemp |= i810Reg->LprbLen;
- OUTREG(LP_RING + RING_LEN, itemp );
-
- i810VGAProtect(card, FALSE);
-
- temp=mmioReadCrtc(vgap, IO_CTNL);
- temp &= ~(EXTENDED_ATTR_CNTL | EXTENDED_CRTC_CNTL);
- temp |= i810Reg->IOControl;
- mmioWriteCrtc(vgap, IO_CTNL, temp);
- /* Protect CRTC[0-7] */
- mmioWriteCrtc(vgap, 0x11, mmioReadCrtc(vgap, 0x11) | 0x80);
-}
-
-
-static Bool
-i810SetMode(KdScreenInfo *screen, const KdMonitorTiming *t)
-{
-
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = card->driver;
- i810VGAPtr vgap = &i810c->vga;
-
- I810RegPtr i810Reg = &i810c->ModeReg;
- vgaRegPtr pVga = &vgap->ModeReg;
-
- double dclk = t->clock/1000.0;
-
- switch (screen->fb[0].bitsPerPixel) {
- case 8:
- pVga->CRTC[0x13] = screen->width >> 3;
- i810Reg->ExtOffset = screen->width >> 11;
- i810Reg->PixelPipeCfg1 = DISPLAY_8BPP_MODE;
- i810Reg->BitBLTControl = COLEXP_8BPP;
- break;
- case 16:
- i810Reg->PixelPipeCfg1 = DISPLAY_16BPP_MODE;
- pVga->CRTC[0x13] = screen->width >> 2;
- i810Reg->ExtOffset = screen->width >> 10;
- i810Reg->BitBLTControl = COLEXP_16BPP;
- break;
- case 24:
- pVga->CRTC[0x13] = (screen->width * 3) >> 3;
- i810Reg->ExtOffset = (screen->width * 3) >> 11;
-
- i810Reg->PixelPipeCfg1 = DISPLAY_24BPP_MODE;
- i810Reg->BitBLTControl = COLEXP_24BPP;
- break;
- default:
- break;
- }
-
- i810Reg->PixelPipeCfg0 = DAC_8_BIT;
-
- /* Do not delay CRT Blank: needed for video overlay */
- i810Reg->PixelPipeCfg1 |= 0x10;
-
- /* Turn on Extended VGA Interpretation */
- i810Reg->IOControl = EXTENDED_CRTC_CNTL;
-
- /* Turn on linear and page mapping */
- i810Reg->AddressMapping = (LINEAR_MODE_ENABLE |
- GTT_MEM_MAP_ENABLE);
-
- /* Turn on GUI mode */
- i810Reg->DisplayControl = HIRES_MODE;
-
- i810Reg->OverlayActiveStart = t->horizontal + t->hblank - 32;
- i810Reg->OverlayActiveEnd = t->horizontal - 32;
-
- /* Turn on interlaced mode if necessary (it's not) */
- i810Reg->InterlaceControl = INTERLACE_DISABLE;
-
- /*
- * Set the overscan color to 0.
- * NOTE: This only affects >8bpp mode.
- */
- pVga->Attribute[0x11] = 0;
-
- /*
- * Calculate the VCLK that most closely matches the requested dot
- * clock.
- */
- i810CalcVCLK(screen, dclk);
-
- /* Since we program the clocks ourselves, always use VCLK2. */
- pVga->MiscOutReg |= 0x0C;
-
- /* Calculate the FIFO Watermark and Burst Length. */
- i810Reg->LMI_FIFO_Watermark = i810CalcWatermark(screen, dclk, FALSE);
-
- /* Setup the ring buffer */
- i810Reg->LprbTail = 0;
- i810Reg->LprbHead = 0;
- i810Reg->LprbStart = i810c->LpRing.mem.Start;
-
- if (i810Reg->LprbStart)
- i810Reg->LprbLen = ((i810c->LpRing.mem.Size-4096) |
- RING_NO_REPORT | RING_VALID);
- else
- i810Reg->LprbLen = RING_INVALID;
-
- return TRUE;
-}
-
-static Bool
-i810ModeInit(KdScreenInfo *screen, const KdMonitorTiming *t)
-{
-
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = card->driver;
- i810VGAPtr vgap = &i810c->vga;
- vgaRegPtr pVga;
-
-/* fprintf(stderr,"i810ModeInit\n"); */
-
- i810VGAUnlock(vgap);
-
- if (!i810VGAInit(screen, t)) return FALSE;
- pVga = &vgap->ModeReg;
-
- if (!i810SetMode(screen, t)) return FALSE;
-
- DoRestore(screen->card, &vgap->ModeReg, &i810c->ModeReg, FALSE);
-
- return TRUE;
-}
-
-Bool
-i810VGAInit(KdScreenInfo *screen, const KdMonitorTiming *t)
-{
- unsigned int i;
-
- int hactive, hblank, hbp, hfp;
- int vactive, vblank, vbp, vfp;
- int h_screen_off = 0, h_adjust = 0, h_total, h_display_end, h_blank_start;
- int h_blank_end, h_sync_start, h_sync_end, v_total, v_retrace_start;
- int v_retrace_end, v_display_end, v_blank_start, v_blank_end;
-
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = card->driver;
-
- i810VGAPtr vgap = &i810c->vga;
- I810RegPtr ireg = &i810c->ModeReg;
-
-
- vgaRegPtr regp;
- int depth = screen->fb[0].depth;
-
- regp = &vgap->ModeReg;
-
- /*
- * compute correct Hsync & Vsync polarity
- */
-
- regp->MiscOutReg = 0x23;
- if (t->vpol == KdSyncNegative) regp->MiscOutReg |= 0x40;
- if (t->hpol == KdSyncNegative) regp->MiscOutReg |= 0x80;
-
- /*
- * Time Sequencer
- */
- if (depth == 4)
- regp->Sequencer[0] = 0x02;
- else
- regp->Sequencer[0] = 0x00;
- /* No support for 320 or 360 x resolution */
- regp->Sequencer[1] = 0x01;
-
- if (depth == 1)
- regp->Sequencer[2] = 1 << BIT_PLANE;
- else
- regp->Sequencer[2] = 0x0F;
-
- regp->Sequencer[3] = 0x00; /* Font select */
-
- if (depth < 8)
- regp->Sequencer[4] = 0x06; /* Misc */
- else
- regp->Sequencer[4] = 0x0E; /* Misc */
-
- hactive = t->horizontal;
- hblank = t->hblank;
- hbp = t->hbp;
- hfp = t->hfp;
-
- vactive = t->vertical;
- vblank = t->vblank;
- vbp = t->vbp;
- vfp = t->vfp;
-
- switch (screen->fb[0].bitsPerPixel) {
- case 8:
- hactive /= 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
- h_screen_off = hactive;
- h_adjust = 1;
- break;
- case 16:
- hactive /= 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
-
- h_screen_off = hactive * 2;
- h_adjust = 1;
- break;
- case 24:
- hactive /= 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
-
- h_screen_off = hactive * 3;
- h_adjust = 1;
- break;
- case 32:
- hactive /= 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
-
- h_screen_off = hactive * 4;
- h_adjust = 1;
- break;
- }
-
- /*
- * Compute horizontal register values from timings
- */
- h_total = hactive + hblank - 5;
- h_display_end = hactive - 1;
- h_blank_start = h_display_end;
- h_blank_end = h_blank_start + hblank;
-
- h_sync_start = hactive + hfp + h_adjust;
- h_sync_end = h_sync_start + hblank - hbp - hfp;
-
- /* Set CRTC regs for horizontal timings */
- regp->CRTC[0x0] = h_total;
- ireg->ExtHorizTotal=(h_total & 0x100) >> 8;
-
- regp->CRTC[0x1] = h_display_end;
-
- regp->CRTC[0x2] = h_blank_start;
-
- regp->CRTC[0x3] = 0x80 | (h_blank_end & 0x1f);
- regp->CRTC[0x5] = (h_blank_end & 0x20) << 2;
-
- regp->CRTC[0x4] = h_sync_start;
-
- regp->CRTC[0x5] |= h_sync_end & 0x1f;
-
- regp->CRTC[0x13] = h_screen_off;
- ireg->ExtOffset = h_screen_off >> 8;
-
- /* Compute vertical timings */
- v_total = vactive + vblank - 2;
- v_retrace_start = vactive + vfp - 1;
- v_retrace_end = v_retrace_start + vblank - vbp - vfp;
- v_display_end = vactive - 1;
- v_blank_start = vactive - 1;
- v_blank_end = v_blank_start + vblank /* - 1 */;
-
- regp->CRTC[0x6] = v_total;
- ireg->ExtVertTotal = v_total >> 8;
-
- regp->CRTC[0x10] = v_retrace_start;
- ireg->ExtVertSyncStart = v_retrace_start >> 8;
-
- regp->CRTC[0x11] = v_retrace_end;
-
- regp->CRTC[0x12] = v_display_end;
- ireg->ExtVertDispEnd = v_display_end >> 8;
-
- regp->CRTC[0x15] = v_blank_start;
- ireg->ExtVertBlankStart = v_blank_start >> 8;
-
- regp->CRTC[0x16] = v_blank_end;
-
- if (depth < 8)
- regp->CRTC[23] = 0xE3;
- else
- regp->CRTC[23] = 0xC3;
- regp->CRTC[24] = 0xFF;
-
- /*
- * Graphics Display Controller
- */
- regp->Graphics[0] = 0x00;
- regp->Graphics[1] = 0x00;
- regp->Graphics[2] = 0x00;
- regp->Graphics[3] = 0x00;
- if (depth == 1) {
- regp->Graphics[4] = BIT_PLANE;
- regp->Graphics[5] = 0x00;
- } else {
- regp->Graphics[4] = 0x00;
- if (depth == 4)
- regp->Graphics[5] = 0x02;
- else
- regp->Graphics[5] = 0x40;
- }
- regp->Graphics[6] = 0x05;
- regp->Graphics[7] = 0x0F;
- regp->Graphics[8] = 0xFF;
-
- if (depth == 1) {
- /* Initialise the Mono map according to which bit-plane gets used */
-
- Bool flipPixels = FALSE; /* maybe support this in the future? */
-
- for (i=0; i<16; i++)
- if (((i & (1 << BIT_PLANE)) != 0) != flipPixels)
- regp->Attribute[i] = WHITE_VALUE;
- else
- regp->Attribute[i] = BLACK_VALUE;
-
- regp->Attribute[16] = 0x01; /* -VGA2- */
- if (!vgap->ShowOverscan)
- regp->Attribute[OVERSCAN] = OVERSCAN_VALUE; /* -VGA2- */
- } else {
- regp->Attribute[0] = 0x00; /* standard colormap translation */
- regp->Attribute[1] = 0x01;
- regp->Attribute[2] = 0x02;
- regp->Attribute[3] = 0x03;
- regp->Attribute[4] = 0x04;
- regp->Attribute[5] = 0x05;
- regp->Attribute[6] = 0x06;
- regp->Attribute[7] = 0x07;
- regp->Attribute[8] = 0x08;
- regp->Attribute[9] = 0x09;
- regp->Attribute[10] = 0x0A;
- regp->Attribute[11] = 0x0B;
- regp->Attribute[12] = 0x0C;
- regp->Attribute[13] = 0x0D;
- regp->Attribute[14] = 0x0E;
- regp->Attribute[15] = 0x0F;
- if (depth == 4)
- regp->Attribute[16] = 0x81;
- else
- regp->Attribute[16] = 0x41;
- /* Attribute[17] (overscan) was initialised earlier */
- }
- regp->Attribute[18] = 0x0F;
- regp->Attribute[19] = 0x00;
- regp->Attribute[20] = 0x00;
-
- return(TRUE);
-}
-
-void
-i810VGALock(i810VGAPtr vgap)
-{
- /* Protect CRTC[0-7] */
- mmioWriteCrtc(vgap, 0x11, mmioReadCrtc(vgap, 0x11) & ~0x80);
-}
-
-void
-i810VGAUnlock(i810VGAPtr vgap)
-{
- /* Unprotect CRTC[0-7] */
- mmioWriteCrtc(vgap, 0x11, mmioReadCrtc(vgap, 0x11) | 0x80);
-}
-
-static void
-i810Restore(KdCardInfo *card) {
-
- I810CardInfo *i810c = card->driver;
-
- i810VGAPtr vgap = &i810c->vga;
-
- if (I810_DEBUG)
- fprintf(stderr,"i810Restore\n");
-
- DoRestore(card, &vgap->SavedReg, &i810c->SavedReg, TRUE);
-}
-
-static Bool
-i810Enable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdCardInfo *card = pScreenPriv->card;
- I810CardInfo *i810c = card->driver;
- i810VGAPtr vgap = &i810c->vga;
- const KdMonitorTiming *t;
-
- if (I810_DEBUG)
- fprintf(stderr,"i810Enable\n");
-
- vgap->IOBase = (mmioReadMiscOut(vgap) & 0x01) ?
- VGA_IOBASE_COLOR : VGA_IOBASE_MONO;
-
- {
- I810RegPtr i810Reg = &i810c->ModeReg;
- int i;
-
- for (i = 0 ; i < 8 ; i++)
- i810Reg->Fence[i] = 0;
- }
-
- t = KdFindMode (screen, i810ModeSupported);
-
- if (!i810BindGARTMemory(screen))
- return FALSE;
-
- if (!i810ModeInit(screen, t)) return FALSE;
-
- {
- /* DPMS power on state */
-
- unsigned char SEQ01=0;
- int DPMSSyncSelect=0;
-
- SEQ01 = 0x00;
- DPMSSyncSelect = HSYNC_ON | VSYNC_ON;
-
- SEQ01 |= i810ReadControlMMIO(i810c, SRX, 0x01) & ~0x20;
- i810WriteControlMMIO(i810c, SRX, 0x01, SEQ01);
-
- /* Set the DPMS mode */
- OUTREG8(DPMS_SYNC_SELECT, DPMSSyncSelect);
- }
-#ifdef XV
- KdXVEnable (pScreen);
-#endif
- return TRUE;
-}
-
-
-static void
-i810Disable(ScreenPtr pScreen) {
-
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdCardInfo *card = pScreenPriv->card;
- I810CardInfo *i810c = card->driver;
-
- i810VGAPtr vgap = &i810c->vga;
-
- if (I810_DEBUG)
- fprintf(stderr,"i810Disable\n");
-
-#ifdef XV
- KdXVDisable (pScreen);
-#endif
- i810Restore(screen->card);
-
- if (!i810UnbindGARTMemory(screen))
- return;
-
- i810VGALock(vgap);
-}
-
-
-static Bool
-i810DPMS(ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- I810CardInfo *i810c = card->driver;
-
- unsigned char SEQ01=0;
- int DPMSSyncSelect=0;
-
- if (I810_DEBUG)
- fprintf(stderr,"i810DPMS: %d\n",mode);
-
- switch (mode) {
- case KD_DPMS_NORMAL:
- /* Screen: On; HSync: On, VSync: On */
- SEQ01 = 0x00;
- DPMSSyncSelect = HSYNC_ON | VSYNC_ON;
- break;
- case KD_DPMS_STANDBY:
- /* Screen: Off; HSync: Off, VSync: On */
- SEQ01 = 0x20;
- DPMSSyncSelect = HSYNC_OFF | VSYNC_ON;
- break;
- case KD_DPMS_SUSPEND:
- /* Screen: Off; HSync: On, VSync: Off */
- SEQ01 = 0x20;
- DPMSSyncSelect = HSYNC_ON | VSYNC_OFF;
- break;
- case KD_DPMS_POWERDOWN:
- /* Screen: Off; HSync: Off, VSync: Off */
- SEQ01 = 0x20;
- DPMSSyncSelect = HSYNC_OFF | VSYNC_OFF;
- break;
- }
-
- /* Turn the screen on/off */
- SEQ01 |= i810ReadControlMMIO(i810c, SRX, 0x01) & ~0x20;
- i810WriteControlMMIO(i810c, SRX, 0x01, SEQ01);
-
- /* Set the DPMS mode */
- OUTREG8(DPMS_SYNC_SELECT, DPMSSyncSelect);
- return TRUE;
-}
-
-
-static void
-i810GetColors (ScreenPtr pScreen, int fb, int ndefs, xColorItem *c)
-{
-
- if (I810_DEBUG)
- fprintf(stderr,"i810GetColors (NOT IMPLEMENTED)\n");
-}
-
-#define DACDelay(hw) \
- do { \
- unsigned char temp = Vminb((hw)->IOBase + VGA_IN_STAT_1_OFFSET); \
- temp = Vminb((hw)->IOBase + VGA_IN_STAT_1_OFFSET); \
- } while (0)
-
-static void
-i810PutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
-
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
-
- i810VGAPtr vgap = &i810c->vga;
-
- if (I810_DEBUG)
- fprintf(stderr,"i810PutColors\n");
-
- while (ndef--)
- {
- mmioWriteDacWriteAddr(vgap, pdefs->pixel);
- DACDelay(vgap);
- mmioWriteDacData(vgap, pdefs->red);
- DACDelay(vgap);
- mmioWriteDacData(vgap, pdefs->green);
- DACDelay(vgap);
- mmioWriteDacData(vgap, pdefs->blue);
- DACDelay(vgap);
-
- pdefs++;
- }
-}
-
-
-KdCardFuncs i810Funcs = {
- i810CardInit, /* cardinit */
- i810ScreenInit, /* scrinit */
- i810InitScreen, /* initScreen */
- i810FinishInitScreen, /* finishInitScreen */
- NULL, /* createResources */
- i810Preserve, /* preserve */
- i810Enable, /* enable */
- i810DPMS, /* dpms */
- i810Disable, /* disable */
- i810Restore, /* restore */
- i810ScreenFini, /* scrfini */
- i810CardFini, /* cardfini */
-
- i810CursorInit, /* initCursor */
- i810CursorEnable, /* enableCursor */
- i810CursorDisable, /* disableCursor */
- i810CursorFini, /* finiCursor */
- NULL, /* recolorCursor */
-
- i810InitAccel, /* initAccel */
- i810EnableAccel, /* enableAccel */
- i810DisableAccel, /* disableAccel */
- i810FiniAccel, /* finiAccel */
-
- i810GetColors, /* getColors */
- i810PutColors, /* putColors */
-};
diff --git a/hw/kdrive/i810/i810.h b/hw/kdrive/i810/i810.h
deleted file mode 100644
index 8fc2d56be..000000000
--- a/hw/kdrive/i810/i810.h
+++ /dev/null
@@ -1,511 +0,0 @@
-/* COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 2000, 2001 Nokia Home Communications
-
-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, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-
-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
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
-
-X Window System is a trademark of The Open Group */
-
-/*
- * Author:
- * Pontus Lidman <pontus.lidman@nokia.com>
- */
-
-#ifndef _I810_H_
-#define _I810_H_
-
-#include "i810_reg.h"
-
-/* Globals */
-
-typedef struct _I810Rec *I810Ptr;
-
-/* Linear region allocated in framebuffer.
- */
-typedef struct {
- unsigned long Start;
- unsigned long End;
- unsigned long Size;
-} I810MemRange;
-
-typedef struct {
- int tail_mask;
- I810MemRange mem;
- unsigned char *virtual_start;
- int head;
- int tail;
- int space;
-} I810RingBuffer;
-
-typedef struct {
- unsigned char DisplayControl;
- unsigned char PixelPipeCfg0;
- unsigned char PixelPipeCfg1;
- unsigned char PixelPipeCfg2;
- unsigned short VideoClk2_M;
- unsigned short VideoClk2_N;
- unsigned char VideoClk2_DivisorSel;
- unsigned char AddressMapping;
- unsigned char IOControl;
- unsigned char BitBLTControl;
- unsigned char ExtVertTotal;
- unsigned char ExtVertDispEnd;
- unsigned char ExtVertSyncStart;
- unsigned char ExtVertBlankStart;
- unsigned char ExtHorizTotal;
- unsigned char ExtHorizBlank;
- unsigned char ExtOffset;
- unsigned char InterlaceControl;
- unsigned int LMI_FIFO_Watermark;
-
- unsigned int LprbTail;
- unsigned int LprbHead;
- unsigned int LprbStart;
- unsigned int LprbLen;
-
- unsigned int Fence[8];
-
- unsigned short OverlayActiveStart;
- unsigned short OverlayActiveEnd;
-
-
-} I810RegRec, *I810RegPtr;
-
-#define minb(p) *(volatile CARD8 *)(i810c->MMIOBase + (p))
-#define moutb(p,v) *(volatile CARD8 *)(i810c->MMIOBase + (p)) = (v)
-
-#define OUT_RING(n) { \
- if (I810_DEBUG & DEBUG_VERBOSE_RING) \
- ErrorF( "OUT_RING %x: %x\n", outring, n); \
- *(volatile unsigned int *)(virt + outring) = n; \
- outring += 4; \
- outring &= ringmask; \
-}
-
-#define ADVANCE_LP_RING() { \
- i810c->LpRing.tail = outring; \
- OUTREG(LP_RING + RING_TAIL, outring); \
-}
-
-#ifdef __GNUC__
-#define LP_RING_MESSAGE(n) \
- ErrorF("BEGIN_LP_RING %d in %s\n", n, __FUNCTION__)
-#else
-#define LP_RING_MESSAGE(n) \
- ErrorF("BEGIN_LP_RING %d in %s:%d\n", n, __FILE__, __LINE__)
-#endif
-
-#define LP_RING_LOCALS \
- unsigned int outring, ringmask; \
- volatile unsigned char *virt
-
-#define BEGIN_LP_RING(n) \
- if (n>2 && (I810_DEBUG&DEBUG_ALWAYS_SYNC)) \
- i810Sync(i810s); \
- if (i810c->LpRing.space < n*4) i810WaitLpRing(i810s, n*4, 0); \
- i810c->LpRing.space -= n*4; \
- if (I810_DEBUG & DEBUG_VERBOSE_RING) \
- LP_RING_MESSAGE(n); \
- outring = i810c->LpRing.tail; \
- ringmask = i810c->LpRing.tail_mask; \
- virt = i810c->LpRing.virtual_start;
-
-/* Memory mapped register access macros */
-#define INREG8(addr) *(volatile CARD8 *)(i810c->MMIOBase + (addr))
-#define INREG16(addr) *(volatile CARD16 *)(i810c->MMIOBase + (addr))
-#define INREG(addr) *(volatile CARD32 *)(i810c->MMIOBase + (addr))
-
-#define OUTREG8(addr, val) do { \
- *(volatile CARD8 *)(i810c->MMIOBase + (addr)) = (val); \
- if (I810_DEBUG&DEBUG_VERBOSE_OUTREG) \
- ErrorF( "OUTREG8(%x, %x)\n", addr, val); \
-} while (0)
-
-#define OUTREG16(addr, val) do { \
- *(volatile CARD16 *)(i810c->MMIOBase + (addr)) = (val); \
- if (I810_DEBUG&DEBUG_VERBOSE_OUTREG) \
- ErrorF( "OUTREG16(%x, %x)\n", addr, val); \
-} while (0)
-
-#define OUTREG(addr, val) do { \
- *(volatile CARD32 *)(i810c->MMIOBase + (addr)) = (val); \
- if (I810_DEBUG&DEBUG_VERBOSE_OUTREG) \
- ErrorF( "OUTREG(%x, %x)\n", addr, val); \
-} while (0)
-
-/* To remove all debugging, make sure I810_DEBUG is defined as a
- * preprocessor symbol, and equal to zero.
- */
-
-#define I810_DEBUG 0
-
-#ifndef I810_DEBUG
-#warning "Debugging enabled - expect reduced performance"
-extern int I810_DEBUG;
-#endif
-
-#define DEBUG_VERBOSE_ACCEL 0x1
-#define DEBUG_VERBOSE_SYNC 0x2
-#define DEBUG_VERBOSE_VGA 0x4
-#define DEBUG_VERBOSE_RING 0x8
-#define DEBUG_VERBOSE_OUTREG 0x10
-#define DEBUG_VERBOSE_MEMORY 0x20
-#define DEBUG_VERBOSE_CURSOR 0x40
-#define DEBUG_ALWAYS_SYNC 0x80
-#define DEBUG_VERBOSE_DRI 0x100
-
-
-/* Size of the mmio region.
- */
-#define I810_REG_SIZE 0x80000
-
-/* PCI identifiers */
-#ifndef PCI_CHIP_I810
-#define PCI_CHIP_I810 0x7121
-#define PCI_CHIP_I810_DC100 0x7123
-#define PCI_CHIP_I810_E 0x7125
-#define PCI_CHIP_I815 0x1132
-#define PCI_CHIP_I810_BRIDGE 0x7120
-#define PCI_CHIP_I810_DC100_BRIDGE 0x7122
-#define PCI_CHIP_I810_E_BRIDGE 0x7124
-#define PCI_CHIP_I815_BRIDGE 0x1130
-#define PCI_CHIP_I845G 0x2562
-#endif
-
-
-#define IS_I810(i810c) (i810c->PciInfo->chipType == PCI_CHIP_I810 || \
- i810c->PciInfo->chipType == PCI_CHIP_I810_DC100 || \
- i810c->PciInfo->chipType == PCI_CHIP_I810_E)
-#define IS_I815(i810c) (i810c->PciInfo->chipType == PCI_CHIP_I815)
-
-
-/* default number of VGA registers stored internally */
-#define VGA_NUM_CRTC 25 /* 0x19 */
-#define VGA_NUM_SEQ 5
-#define VGA_NUM_GFX 9
-#define VGA_NUM_ATTR 21
-
-/*
- * Settings of standard VGA registers.
- */
-typedef struct {
- unsigned char MiscOutReg; /* */
- unsigned char CRTC[VGA_NUM_CRTC]; /* Crtc Controller */
- unsigned char Sequencer[VGA_NUM_SEQ]; /* Video Sequencer */
- unsigned char Graphics[VGA_NUM_GFX]; /* Video Graphics */
- unsigned char Attribute[VGA_NUM_ATTR]; /* Video Atribute */
- unsigned char DAC[768]; /* Internal Colorlookuptable */
-} vgaRegRec, *vgaRegPtr;
-
-
-typedef struct _i810VGARec *i810VGAPtr;
-
-/* VGA registers */
-typedef struct _i810VGARec {
- int IOBase; /* I/O Base address */
- CARD8 * MMIOBase; /* Pointer to MMIO start */
- vgaRegRec SavedReg; /* saved registers */
- vgaRegRec ModeReg; /* register settings for
- current mode */
- Bool ShowOverscan;
- Bool paletteEnabled;
- Bool cmapSaved;
-} i810VGARec;
-
-typedef struct _i810CardInfo {
- int videoRam;
- int MaxClock;
- long FbMapSize;
- int cpp; /* chars per pixel */
-
- unsigned long LinearAddr;
- unsigned long MMIOAddr;
-
- unsigned char *MMIOBase;
- unsigned char *FbBase;
-
- Bool GttBound;
- Bool agpAcquired2d;
- int VramKey;
- unsigned long VramOffset;
- int DcacheKey;
- unsigned long DcacheOffset;
- int HwcursKey;
- unsigned long HwcursOffset;
-
- I810MemRange DcacheMem;
- I810MemRange SysMem;
-
- I810MemRange SavedDcacheMem;
- I810MemRange SavedSysMem;
-
- unsigned int bufferOffset; /* for I810SelectBuffer */
- Bool DoneFrontAlloc;
- BoxRec FbMemBox;
- I810MemRange FrontBuffer;
- I810MemRange Scratch;
- I810MemRange XvMem;
-
- int LmFreqSel;
-
- i810VGARec vga;
-
- I810RegRec SavedReg;
- I810RegRec ModeReg;
- I810RingBuffer LpRing;
-
- unsigned int BR[20];
-
- int CursorOffset;
- unsigned long CursorPhysical;
- unsigned long CursorStart;
- unsigned long OverlayPhysical;
- unsigned long OverlayStart;
- int colorKey;
-
- int nextColorExpandBuf;
-
- ScreenBlockHandlerProcPtr BlockHandler;
-
-#ifdef XV
- KdVideoAdaptorPtr adaptor;
-#endif
-
-} i810CardInfo;
-
-typedef struct _i810CardInfo I810CardInfo; /* compatibility */
-
-#define getI810CardInfo(kd) ((I810CardInfo *) ((kd)->card->driver))
-#define i810CardInfo(kd) I810CardInfo *i810c = getI810CardInfo(kd)
-
-#define getI810ScreenInfo(kd) ((I810ScreenInfo *) ((kd)->screen->driver))
-#define i810ScreenInfo(kd) I810ScreenInfo *i810s = getI810ScreenInfo(kd)
-
-typedef struct _i810Cursor {
- int width, height;
- int xhot, yhot;
- Bool has_cursor;
- CursorPtr pCursor;
-} i810Cursor, *i810CursorPtr;
-
-typedef struct _i810ScreenInfo {
- i810CardInfo *i810c;
- i810Cursor cursor;
-
- int pitch;
- KaaScreenInfoRec kaa;
-} i810ScreenInfo;
-
-typedef struct _i810ScreenInfo I810ScreenInfo; /* compatibility */
-
-#define I810_CURSOR_HEIGHT 64
-#define I810_CURSOR_WIDTH 64
-
-/* init functions (i810.c) */
-
-Bool
-i810CardInit (KdCardInfo *card);
-
-Bool
-i810ScreenInit (KdScreenInfo *screen);
-
-/* The cursor functions (i810_cursor.c) */
-
-Bool
-i810CursorInit(ScreenPtr pScreen);
-
-void
-i810CursorEnable (ScreenPtr pScreen);
-
-void
-i810CursorDisable (ScreenPtr pScreen);
-
-void
-i810CursorFini (ScreenPtr pScreen);
-
-/* Accel functions (i810draw.c) */
-
-Bool
-i810InitAccel(ScreenPtr);
-
-void
-i810EnableAccel (ScreenPtr);
-
-void
-i810DisableAccel (ScreenPtr);
-
-void
-i810FiniAccel (ScreenPtr);
-
-void
-i810FillBoxSolid (KdScreenInfo *screen, int nBox, BoxPtr pBox,
- unsigned long pixel, int alu, unsigned long planemask);
-
-
-extern KdCardFuncs i810Funcs;
-
-/* Standard VGA registers */
-
-#define VGA_ATTR_INDEX 0x3C0
-#define VGA_ATTR_DATA_W 0x3C0
-#define VGA_ATTR_DATA_R 0x3C1
-#define VGA_IN_STAT_0 0x3C2 /* read */
-#define VGA_MISC_OUT_W 0x3C2 /* write */
-#define VGA_ENABLE 0x3C3
-#define VGA_SEQ_INDEX 0x3C4
-#define VGA_SEQ_DATA 0x3C5
-#define VGA_DAC_MASK 0x3C6
-#define VGA_DAC_READ_ADDR 0x3C7
-#define VGA_DAC_WRITE_ADDR 0x3C8
-#define VGA_DAC_DATA 0x3C9
-#define VGA_FEATURE_R 0x3CA /* read */
-#define VGA_MISC_OUT_R 0x3CC /* read */
-#define VGA_GRAPH_INDEX 0x3CE
-#define VGA_GRAPH_DATA 0x3CF
-
-#define VGA_IOBASE_MONO 0x3B0
-#define VGA_IOBASE_COLOR 0x3D0
-
-#define VGA_CRTC_INDEX_OFFSET 0x04
-#define VGA_CRTC_DATA_OFFSET 0x05
-#define VGA_IN_STAT_1_OFFSET 0x0A /* read */
-#define VGA_FEATURE_W_OFFSET 0x0A /* write */
-
-/* VGA stuff */
-#define BIT_PLANE 3 /* Which plane we write to in mono mode */
-
-/* DAC indices for white and black */
-#define WHITE_VALUE 0x3F
-#define BLACK_VALUE 0x00
-#define OVERSCAN_VALUE 0x01
-
-#define OVERSCAN 0x11 /* Index of OverScan register */
-
-void
-i810VGAUnlock(i810VGAPtr vgap);
-
-void
-i810VGALock(i810VGAPtr vgap);
-
-Bool
-i810VGAInit(KdScreenInfo *scrninfp, const KdMonitorTiming *t);
-
-void
-i810VGABlankScreen(KdCardInfo *card, Bool on);
-
-void
-i810AdjustFrame(KdScreenInfo *screen, int x, int y, int flags);
-
-Bool
-i810VGAMapMem(KdCardInfo *card);
-
-void
-i810VGASave(KdCardInfo *card, vgaRegPtr save, int flags);
-
-void
-i810PrintErrorState(i810CardInfo *i810c);
-
-void
-i810VGAGetIOBase(i810VGAPtr vgap);
-
-Bool
-i810InitVideo(ScreenPtr pScreen);
-
-/*
- * MMIO versions of the register access functions. These require
- * hwp->MemBase to be set in such a way that when the standard VGA port
- * address is added the correct memory address results.
- */
-
-#define Vminb(p) ( *(volatile CARD8 *)(vgap->MMIOBase + (p)))
-#define Vmoutb(p,v) ( *(volatile CARD8 *)(vgap->MMIOBase + (p)) = (v))
-
-#define mmioWriteCrtc(vgap, index, value) { \
- Vmoutb(vgap->IOBase + VGA_CRTC_INDEX_OFFSET, index); \
- Vmoutb(vgap->IOBase + VGA_CRTC_DATA_OFFSET, value); \
-}
-
-#define mmioReadCrtc(vgap, index) ( \
- Vmoutb(vgap->IOBase + VGA_CRTC_INDEX_OFFSET, index), \
- Vminb(vgap->IOBase + VGA_CRTC_DATA_OFFSET) \
-)
-
-#define mmioWriteGr(vgap, index, value) { \
- Vmoutb(VGA_GRAPH_INDEX, index); \
- Vmoutb(VGA_GRAPH_DATA, value); \
-}
-
-#define mmioReadGr(vgap, index) ( \
- Vmoutb(VGA_GRAPH_INDEX, index), \
- Vminb(VGA_GRAPH_DATA) \
-)
-
-#define mmioWriteSeq(vgap, index, value) {\
- Vmoutb(VGA_SEQ_INDEX, index); \
- Vmoutb(VGA_SEQ_DATA, value); \
-}
-
-#define mmioReadSeq(vgap, index) ( \
- Vmoutb(VGA_SEQ_INDEX, index), \
- Vminb(VGA_SEQ_DATA) \
-)
-
-#define mmioWriteAttr(vgap, index, value) { \
- (void) Vminb(vgap->IOBase + VGA_IN_STAT_1_OFFSET); \
- Vmoutb(VGA_ATTR_INDEX, index); \
- Vmoutb(VGA_ATTR_DATA_W, value); \
-}
-
-#define mmioReadAttr(vgap, index) ( \
- (void) Vminb(vgap->IOBase + VGA_IN_STAT_1_OFFSET), \
- Vmoutb(VGA_ATTR_INDEX, index), \
- Vminb(VGA_ATTR_DATA_R) \
-)
-
-#define mmioWriteMiscOut(vgap, value) Vmoutb(VGA_MISC_OUT_W, value)
-
-
-#define mmioReadMiscOut(vgap) Vminb(VGA_MISC_OUT_R)
-
-#define mmioEnablePalette(vgap) { \
- (void) Vminb(vgap->IOBase + VGA_IN_STAT_1_OFFSET); \
- Vmoutb(VGA_ATTR_INDEX, 0x00); \
- vgap->paletteEnabled = TRUE; \
-}
-
-#define mmioDisablePalette(vgap) { \
- (void) Vminb(vgap->IOBase + VGA_IN_STAT_1_OFFSET); \
- Vmoutb(VGA_ATTR_INDEX, 0x20); \
- vgap->paletteEnabled = FALSE; \
-}
-
-#define mmioWriteDacWriteAddr(vgap, value) Vmoutb(VGA_DAC_WRITE_ADDR, value)
-
-#define mmioWriteDacData(vgap, value) Vmoutb(VGA_DAC_DATA, value)
-
-#endif /* _I810_H_ */
diff --git a/hw/kdrive/i810/i810_cursor.c b/hw/kdrive/i810/i810_cursor.c
deleted file mode 100644
index 434fc4087..000000000
--- a/hw/kdrive/i810/i810_cursor.c
+++ /dev/null
@@ -1,435 +0,0 @@
-/* COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 2000, 2001 Nokia Home Communications
-
-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, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-
-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
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
-
-X Window System is a trademark of The Open Group */
-
-/**************************************************************************
-
-Copyright 1998-1999 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, sub license, 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.
-
-**************************************************************************/
-
-/* i810_cursor.c: KDrive hardware cursor routines for the i810 chipset */
-
-/*
- * Authors:
- * Keith Whitwell <keith@tungstengraphics.com>
- * Pontus Lidman <pontus.lidman@nokia.com>
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include "kxv.h"
-#include "i810.h"
-#include "cursorstr.h"
-
-#define SetupCursor(s) KdScreenPriv(pScreen); \
- i810CardInfo(pScreenPriv); \
- i810ScreenInfo(pScreenPriv); \
- i810Cursor *pCurPriv = &i810s->cursor
-
-
-static void
-writeStandardMMIO(I810CardInfo *i810c, int addr, CARD8 val)
-{
- moutb(addr, val);
-}
-
-static void
-_i810MoveCursor(ScreenPtr pScreen, int x, int y)
-{
- KdScreenPriv(pScreen);
- i810CardInfo(pScreenPriv);
- int flag;
-
- if (I810_DEBUG & DEBUG_VERBOSE_CURSOR)
- ErrorF( "I810SetCursorPosition %d %d\n", x, y);
-
- x += i810c->CursorOffset;
-
- if (x >= 0) flag = CURSOR_X_POS;
- else {
- flag = CURSOR_X_NEG;
- x=-x;
- }
-
- OUTREG8( CURSOR_X_LO, x&0xFF);
- OUTREG8( CURSOR_X_HI, (((x >> 8) & 0x07) | flag));
-
- if (y >= 0) flag = CURSOR_Y_POS;
- else {
- flag = CURSOR_Y_NEG;
- y=-y;
- }
- OUTREG8( CURSOR_Y_LO, y&0xFF);
- OUTREG8( CURSOR_Y_HI, (((y >> 8) & 0x07) | flag));
-
- /* Enable cursor */
- OUTREG( CURSOR_BASEADDR, i810c->CursorPhysical);
- OUTREG8( CURSOR_CONTROL, CURSOR_ORIGIN_DISPLAY | CURSOR_MODE_64_3C);
-
-}
-
-static void i810LoadCursor(ScreenPtr pScreen, int x, int y);
-
-static void
-i810MoveCursor (ScreenPtr pScreen, int x, int y)
-{
- KdScreenPriv(pScreen);
- i810ScreenInfo(pScreenPriv);
- i810Cursor *pCurPriv = &i810s->cursor;
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- _i810MoveCursor (pScreen, x, y);
-
- i810LoadCursor(pScreen, x, y);
-}
-
-static void
-_i810SetCursorColors(ScreenPtr pScreen)
-{
-
- KdScreenPriv(pScreen);
- i810CardInfo(pScreenPriv);
- int tmp;
-
- int bg = 0xffffff;
- int fg = 0x000000;
-
- tmp=INREG8(PIXPIPE_CONFIG_0);
- tmp |= EXTENDED_PALETTE;
- OUTREG8( PIXPIPE_CONFIG_0, tmp);
-
- writeStandardMMIO(i810c, DACMASK, 0xFF);
- writeStandardMMIO(i810c, DACWX, 0x04);
-
- writeStandardMMIO(i810c, DACDATA, (bg & 0x00FF0000) >> 16);
- writeStandardMMIO(i810c, DACDATA, (bg & 0x0000FF00) >> 8);
- writeStandardMMIO(i810c, DACDATA, (bg & 0x000000FF));
-
- writeStandardMMIO(i810c, DACDATA, (fg & 0x00FF0000) >> 16);
- writeStandardMMIO(i810c, DACDATA, (fg & 0x0000FF00) >> 8);
- writeStandardMMIO(i810c, DACDATA, (fg & 0x000000FF));
-
- tmp=INREG8( PIXPIPE_CONFIG_0 );
- tmp &= ~EXTENDED_PALETTE;
- OUTREG8( PIXPIPE_CONFIG_0, tmp );
-}
-
-#define InvertBits32(v) { \
- v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \
- v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \
- v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \
-}
-
-static void i810LoadCursor(ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
-
- int h;
- unsigned int *msk, *mskLine, *src, *srcLine;
-
- int i, j;
- int src_stride, src_width;
-
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- CARD8 tmp;
- unsigned int *ram, *ramLine;
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- ramLine = (unsigned int *) (i810c->FbBase + i810c->CursorStart);
- mskLine = (unsigned int *) (bits->mask);
- srcLine = (unsigned int *) (bits->source);
-
- h = bits->height;
- if (h > I810_CURSOR_HEIGHT)
- h = I810_CURSOR_HEIGHT;
-
- src_stride = BitmapBytePad(bits->width); /* bytes per line */
- src_stride = (src_stride +3) >> 2;
- src_width = (bits->width + 31) >> 5;
-
- for (i = 0; i < I810_CURSOR_HEIGHT; i++) {
-
- msk = mskLine;
- src = srcLine;
- ram = ramLine;
- mskLine += src_stride;
- srcLine += src_stride;
- ramLine += I810_CURSOR_WIDTH / 16;
-
- for (j = 0; j < I810_CURSOR_WIDTH / 32; j++) {
-
- unsigned long m, s;
-
- if (i < h && j < src_width)
- {
- m = *msk++;
- s = *src++ & m;
- m = ~m;
- /* mask off right side */
- if (j == src_width - 1 && (bits->width & 31))
- {
- m |= 0xffffffff << (bits->width & 31);
- }
- }
- else
- {
- m = 0xffffffff;
- s = 0x00000000;
- }
-
- InvertBits32(s);
- InvertBits32(m);
-
- ram[2+j]=s;
- ram[0+j]=m;
- }
- }
- /* Set new color */
- _i810SetCursorColors (pScreen);
-
- /* Move to new position */
- _i810MoveCursor (pScreen, x, y);
-
- /* Enable cursor */
- OUTREG( CURSOR_BASEADDR, i810c->CursorPhysical);
- OUTREG8( CURSOR_CONTROL, CURSOR_ORIGIN_DISPLAY | CURSOR_MODE_64_3C);
-
- tmp = INREG8( PIXPIPE_CONFIG_0 );
- tmp |= HW_CURSOR_ENABLE;
- OUTREG8( PIXPIPE_CONFIG_0, tmp);
-}
-
-static void
-i810UnloadCursor(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- i810CardInfo(pScreenPriv);
-
- unsigned char tmp;
-
- tmp=INREG8( PIXPIPE_CONFIG_0 );
- tmp &= ~HW_CURSOR_ENABLE;
- OUTREG8( PIXPIPE_CONFIG_0, tmp);
-}
-
-
-static Bool
-i810RealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- KdScreenPriv(pScreen);
- i810ScreenInfo(pScreenPriv);
- i810Cursor *pCurPriv = &i810s->cursor;
-
- if (!pScreenPriv->enabled)
- return TRUE;
-
- /* miRecolorCursor does this */
- if (pCurPriv->pCursor == pCursor)
- {
- if (pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- i810LoadCursor (pScreen, x, y);
- }
- }
- return TRUE;
-}
-
-static Bool
-i810UnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- return TRUE;
-}
-
-static void
-i810SetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
-{
- KdScreenPriv(pScreen);
- i810ScreenInfo(pScreenPriv);
- i810Cursor *pCurPriv = &i810s->cursor;
-
- pCurPriv->pCursor = pCursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCursor)
- i810LoadCursor (pScreen, x, y);
- else
- i810UnloadCursor (pScreen);
-}
-
-miPointerSpriteFuncRec i810PointerSpriteFuncs = {
- i810RealizeCursor,
- i810UnrealizeCursor,
- i810SetCursor,
- i810MoveCursor,
-};
-
-static void
-i810QueryBestSize (int class,
- unsigned short *pwidth, unsigned short *pheight,
- ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- i810ScreenInfo(pScreenPriv);
- i810Cursor *pCurPriv = &i810s->cursor;
-
- switch (class)
- {
- case CursorShape:
- if (*pwidth > pCurPriv->width)
- *pwidth = pCurPriv->width;
- if (*pheight > pCurPriv->height)
- *pheight = pCurPriv->height;
- if (*pwidth > pScreen->width)
- *pwidth = pScreen->width;
- if (*pheight > pScreen->height)
- *pheight = pScreen->height;
- break;
- default:
- fbQueryBestSize (class, pwidth, pheight, pScreen);
- break;
- }
-}
-
-Bool
-i810CursorInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- i810ScreenInfo(pScreenPriv);
- i810CardInfo(pScreenPriv);
- i810Cursor *pCurPriv = &i810s->cursor;
-
- if (!i810c->CursorStart) {
- pCurPriv->has_cursor = FALSE;
- return FALSE;
- }
-
- pCurPriv->width = I810_CURSOR_WIDTH;
- pCurPriv->height= I810_CURSOR_HEIGHT;
- pScreen->QueryBestSize = i810QueryBestSize;
- miPointerInitialize (pScreen,
- &i810PointerSpriteFuncs,
- &kdPointerScreenFuncs,
- FALSE);
- pCurPriv->has_cursor = TRUE;
- pCurPriv->pCursor = NULL;
- return TRUE;
-}
-
-void
-i810CursorEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- i810ScreenInfo(pScreenPriv);
- i810Cursor *pCurPriv = &i810s->cursor;
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- i810LoadCursor (pScreen, x, y);
- }
- else
- i810UnloadCursor (pScreen);
- }
-}
-
-void
-i810CursorDisable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- i810ScreenInfo(pScreenPriv);
- i810Cursor *pCurPriv = &i810s->cursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- i810UnloadCursor (pScreen);
- }
- }
-}
-
-void
-i810CursorFini (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- i810ScreenInfo(pScreenPriv);
- i810Cursor *pCurPriv = &i810s->cursor;
-
- pCurPriv->pCursor = NULL;
-}
-
diff --git a/hw/kdrive/i810/i810_reg.h b/hw/kdrive/i810/i810_reg.h
deleted file mode 100644
index d9f4c8f48..000000000
--- a/hw/kdrive/i810/i810_reg.h
+++ /dev/null
@@ -1,695 +0,0 @@
-/* COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 2000, 2001 Nokia Home Communications
-
-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, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-
-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
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
-
-X Window System is a trademark of The Open Group */
-
-/**************************************************************************
-
-Copyright 1998-1999 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, sub license, 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.
-
-**************************************************************************/
-
-/*
- * Authors:
- * Keith Whitwell <keith@tungstengraphics.com>
- * Pontus Lidman <pontus.lidman@nokia.com>
- *
- * based on the i740 driver by
- * Kevin E. Martin <kevin@precisioninsight.com>
- *
- *
- */
-
-/* I/O register offsets
- */
-#define SRX 0x3C4 /* p208 */
-#define GRX 0x3CE /* p213 */
-#define ARX 0x3C0 /* p224 */
-
-/* VGA Color Palette Registers */
-#define DACMASK 0x3C6 /* p232 */
-#define DACSTATE 0x3C7 /* p232 */
-#define DACRX 0x3C7 /* p233 */
-#define DACWX 0x3C8 /* p233 */
-#define DACDATA 0x3C9 /* p233 */
-
-/* CRT Controller Registers (CRX) */
-#define START_ADDR_HI 0x0C /* p246 */
-#define START_ADDR_LO 0x0D /* p247 */
-#define VERT_SYNC_END 0x11 /* p249 */
-#define EXT_VERT_TOTAL 0x30 /* p257 */
-#define EXT_VERT_DISPLAY 0x31 /* p258 */
-#define EXT_VERT_SYNC_START 0x32 /* p259 */
-#define EXT_VERT_BLANK_START 0x33 /* p260 */
-#define EXT_HORIZ_TOTAL 0x35 /* p261 */
-#define EXT_HORIZ_BLANK 0x39 /* p261 */
-#define EXT_START_ADDR 0x40 /* p262 */
-#define EXT_START_ADDR_ENABLE 0x80
-#define EXT_OFFSET 0x41 /* p263 */
-#define EXT_START_ADDR_HI 0x42 /* p263 */
-#define INTERLACE_CNTL 0x70 /* p264 */
-#define INTERLACE_ENABLE 0x80
-#define INTERLACE_DISABLE 0x00
-
-/* Miscellaneous Output Register
- */
-#define MSR_R 0x3CC /* p207 */
-#define MSR_W 0x3C2 /* p207 */
-#define IO_ADDR_SELECT 0x01
-
-#define MDA_BASE 0x3B0 /* p207 */
-#define CGA_BASE 0x3D0 /* p207 */
-
-/* CR80 - IO Control, p264
- */
-#define IO_CTNL 0x80
-#define EXTENDED_ATTR_CNTL 0x02
-#define EXTENDED_CRTC_CNTL 0x01
-
-/* GR10 - Address mapping, p221
- */
-#define ADDRESS_MAPPING 0x10
-#define PAGE_TO_LOCAL_MEM_ENABLE 0x10
-#define GTT_MEM_MAP_ENABLE 0x08
-#define PACKED_MODE_ENABLE 0x04
-#define LINEAR_MODE_ENABLE 0x02
-#define PAGE_MAPPING_ENABLE 0x01
-
-/* Blitter control, p378
- */
-#define BITBLT_CNTL 0x7000c
-#define COLEXP_MODE 0x30
-#define COLEXP_8BPP 0x00
-#define COLEXP_16BPP 0x10
-#define COLEXP_24BPP 0x20
-#define COLEXP_RESERVED 0x30
-#define BITBLT_STATUS 0x01
-
-/* p375.
- */
-#define DISPLAY_CNTL 0x70008
-#define VGA_WRAP_MODE 0x02
-#define VGA_WRAP_AT_256KB 0x00
-#define VGA_NO_WRAP 0x02
-#define GUI_MODE 0x01
-#define STANDARD_VGA_MODE 0x00
-#define HIRES_MODE 0x01
-
-/* p375
- */
-#define PIXPIPE_CONFIG_0 0x70009
-#define DAC_8_BIT 0x80
-#define DAC_6_BIT 0x00
-#define HW_CURSOR_ENABLE 0x10
-#define EXTENDED_PALETTE 0x01
-
-/* p375
- */
-#define PIXPIPE_CONFIG_1 0x7000a
-#define DISPLAY_COLOR_MODE 0x0F
-#define DISPLAY_VGA_MODE 0x00
-#define DISPLAY_8BPP_MODE 0x02
-#define DISPLAY_15BPP_MODE 0x04
-#define DISPLAY_16BPP_MODE 0x05
-#define DISPLAY_24BPP_MODE 0x06
-#define DISPLAY_32BPP_MODE 0x07
-
-/* p375
- */
-#define PIXPIPE_CONFIG_2 0x7000b
-#define DISPLAY_GAMMA_ENABLE 0x08
-#define DISPLAY_GAMMA_DISABLE 0x00
-#define OVERLAY_GAMMA_ENABLE 0x04
-#define OVERLAY_GAMMA_DISABLE 0x00
-
-
-/* p380
- */
-#define DISPLAY_BASE 0x70020
-#define DISPLAY_BASE_MASK 0x03fffffc
-
-
-/* Cursor control registers, pp383-384
- */
-#define CURSOR_CONTROL 0x70080
-#define CURSOR_ORIGIN_SCREEN 0x00
-#define CURSOR_ORIGIN_DISPLAY 0x10
-#define CURSOR_MODE 0x07
-#define CURSOR_MODE_DISABLE 0x00
-#define CURSOR_MODE_32_4C_AX 0x01
-#define CURSOR_MODE_64_3C 0x04
-#define CURSOR_MODE_64_4C_AX 0x05
-#define CURSOR_MODE_64_4C 0x06
-#define CURSOR_MODE_RESERVED 0x07
-#define CURSOR_BASEADDR 0x70084
-#define CURSOR_BASEADDR_MASK 0x1FFFFF00
-#define CURSOR_X_LO 0x70088
-#define CURSOR_X_HI 0x70089
-#define CURSOR_X_POS 0x00
-#define CURSOR_X_NEG 0x80
-#define CURSOR_Y_LO 0x7008A
-#define CURSOR_Y_HI 0x7008B
-#define CURSOR_Y_POS 0x00
-#define CURSOR_Y_NEG 0x80
-
-
-
-/* Similar registers exist in Device 0 on the i810 (pp55-65), but I'm
- * not sure they refer to local (graphics) memory.
- *
- * These details are for the local memory control registers,
- * (pp301-310). The test machines are not equiped with local memory,
- * so nothing is tested. Only a single row seems to be supported.
- */
-#define DRAM_ROW_TYPE 0x3000
-#define DRAM_ROW_0 0x01
-#define DRAM_ROW_0_SDRAM 0x01
-#define DRAM_ROW_0_EMPTY 0x00
-#define DRAM_ROW_CNTL_LO 0x3001
-#define DRAM_PAGE_MODE_CTRL 0x10
-#define DRAM_RAS_TO_CAS_OVRIDE 0x08
-#define DRAM_CAS_LATENCY 0x04
-#define DRAM_RAS_TIMING 0x02
-#define DRAM_RAS_PRECHARGE 0x01
-#define DRAM_ROW_CNTL_HI 0x3002
-#define DRAM_REFRESH_RATE 0x18
-#define DRAM_REFRESH_DISABLE 0x00
-#define DRAM_REFRESH_60HZ 0x08
-#define DRAM_REFRESH_FAST_TEST 0x10
-#define DRAM_REFRESH_RESERVED 0x18
-#define DRAM_SMS 0x07
-#define DRAM_SMS_NORMAL 0x00
-#define DRAM_SMS_NOP_ENABLE 0x01
-#define DRAM_SMS_ABPCE 0x02
-#define DRAM_SMS_MRCE 0x03
-#define DRAM_SMS_CBRCE 0x04
-
-/* p307
- */
-#define DPMS_SYNC_SELECT 0x5002
-#define VSYNC_CNTL 0x08
-#define VSYNC_ON 0x00
-#define VSYNC_OFF 0x08
-#define HSYNC_CNTL 0x02
-#define HSYNC_ON 0x00
-#define HSYNC_OFF 0x02
-
-
-
-/* p317, 319
- */
-#define VCLK2_VCO_M 0x6008 /* treat as 16 bit? (includes msbs) */
-#define VCLK2_VCO_N 0x600a
-#define VCLK2_VCO_DIV_SEL 0x6012
-#define POST_DIV_SELECT 0x70
-#define POST_DIV_1 0x00
-#define POST_DIV_2 0x10
-#define POST_DIV_4 0x20
-#define POST_DIV_8 0x30
-#define POST_DIV_16 0x40
-#define POST_DIV_32 0x50
-#define VCO_LOOP_DIV_BY_4M 0x00
-#define VCO_LOOP_DIV_BY_16M 0x04
-
-
-/* Instruction Parser Mode Register
- * - p281
- * - 2 new bits.
- */
-#define INST_PM 0x20c0
-#define AGP_SYNC_PACKET_FLUSH_ENABLE 0x20 /* reserved */
-#define SYNC_PACKET_FLUSH_ENABLE 0x10
-#define TWO_D_INST_DISABLE 0x08
-#define THREE_D_INST_DISABLE 0x04
-#define STATE_VAR_UPDATE_DISABLE 0x02
-#define PAL_STIP_DISABLE 0x01
-
-#define INST_DONE 0x2090
-#define INST_PS 0x20c4
-
-#define MEMMODE 0x20dc
-
-
-/* Instruction parser error register. p279
- */
-#define IPEIR 0x2088
-#define IPEHR 0x208C
-
-
-/* General error reporting regs, p296
- */
-#define EIR 0x20B0
-#define EMR 0x20B4
-#define ESR 0x20B8
-#define IP_ERR 0x0001
-#define ERROR_RESERVED 0xffc6
-
-
-/* Interrupt Control Registers
- * - new bits for i810
- * - new register hwstam (mask)
- */
-#define HWSTAM 0x2098 /* p290 */
-#define IER 0x20a0 /* p291 */
-#define IIR 0x20a4 /* p292 */
-#define IMR 0x20a8 /* p293 */
-#define ISR 0x20ac /* p294 */
-#define HW_ERROR 0x8000
-#define SYNC_STATUS_TOGGLE 0x1000
-#define DPY_0_FLIP_PENDING 0x0800
-#define DPY_1_FLIP_PENDING 0x0400 /* not implemented on i810 */
-#define OVL_0_FLIP_PENDING 0x0200
-#define OVL_1_FLIP_PENDING 0x0100 /* not implemented on i810 */
-#define DPY_0_VBLANK 0x0080
-#define DPY_0_EVENT 0x0040
-#define DPY_1_VBLANK 0x0020 /* not implemented on i810 */
-#define DPY_1_EVENT 0x0010 /* not implemented on i810 */
-#define HOST_PORT_EVENT 0x0008 /* */
-#define CAPTURE_EVENT 0x0004 /* */
-#define USER_DEFINED 0x0002
-#define BREAKPOINT 0x0001
-
-
-#define INTR_RESERVED (0x6000 | \
- DPY_1_FLIP_PENDING | \
- OVL_1_FLIP_PENDING | \
- DPY_1_VBLANK | \
- DPY_1_EVENT | \
- HOST_PORT_EVENT | \
- CAPTURE_EVENT )
-
-/* FIFO Watermark and Burst Length Control Register
- *
- * - different offset and contents on i810 (p299) (fewer bits per field)
- * - some overlay fields added
- * - what does it all mean?
- */
-#define FWATER_BLC 0x20d8
-#define MM_BURST_LENGTH 0x00700000
-#define MM_FIFO_WATERMARK 0x0001F000
-#define LM_BURST_LENGTH 0x00000700
-#define LM_FIFO_WATERMARK 0x0000001F
-
-
-/* Fence/Tiling ranges [0..7]
- */
-#define FENCE 0x2000
-#define FENCE_NR 8
-
-#define FENCE_START_MASK 0x03F80000
-#define FENCE_X_MAJOR 0x00000000
-#define FENCE_Y_MAJOR 0x00001000
-#define FENCE_SIZE_MASK 0x00000700
-#define FENCE_SIZE_512K 0x00000000
-#define FENCE_SIZE_1M 0x00000100
-#define FENCE_SIZE_2M 0x00000200
-#define FENCE_SIZE_4M 0x00000300
-#define FENCE_SIZE_8M 0x00000400
-#define FENCE_SIZE_16M 0x00000500
-#define FENCE_SIZE_32M 0x00000600
-#define FENCE_PITCH_MASK 0x00000070
-#define FENCE_PITCH_1 0x00000000
-#define FENCE_PITCH_2 0x00000010
-#define FENCE_PITCH_4 0x00000020
-#define FENCE_PITCH_8 0x00000030
-#define FENCE_PITCH_16 0x00000040
-#define FENCE_PITCH_32 0x00000050
-#define FENCE_VALID 0x00000001
-
-
-/* Registers to control page table, p274
- */
-#define PGETBL_CTL 0x2020
-#define PGETBL_ADDR_MASK 0xFFFFF000
-#define PGETBL_ENABLE_MASK 0x00000001
-#define PGETBL_ENABLED 0x00000001
-
-/* Register containing pge table error results, p276
- */
-#define PGE_ERR 0x2024
-#define PGE_ERR_ADDR_MASK 0xFFFFF000
-#define PGE_ERR_ID_MASK 0x00000038
-#define PGE_ERR_CAPTURE 0x00000000
-#define PGE_ERR_OVERLAY 0x00000008
-#define PGE_ERR_DISPLAY 0x00000010
-#define PGE_ERR_HOST 0x00000018
-#define PGE_ERR_RENDER 0x00000020
-#define PGE_ERR_BLITTER 0x00000028
-#define PGE_ERR_MAPPING 0x00000030
-#define PGE_ERR_CMD_PARSER 0x00000038
-#define PGE_ERR_TYPE_MASK 0x00000007
-#define PGE_ERR_INV_TABLE 0x00000000
-#define PGE_ERR_INV_PTE 0x00000001
-#define PGE_ERR_MIXED_TYPES 0x00000002
-#define PGE_ERR_PAGE_MISS 0x00000003
-#define PGE_ERR_ILLEGAL_TRX 0x00000004
-#define PGE_ERR_LOCAL_MEM 0x00000005
-#define PGE_ERR_TILED 0x00000006
-
-
-
-/* Page table entries loaded via mmio region, p323
- */
-#define PTE_BASE 0x10000
-#define PTE_ADDR_MASK 0x3FFFF000
-#define PTE_TYPE_MASK 0x00000006
-#define PTE_LOCAL 0x00000002
-#define PTE_MAIN_UNCACHED 0x00000000
-#define PTE_MAIN_CACHED 0x00000006
-#define PTE_VALID_MASK 0x00000001
-#define PTE_VALID 0x00000001
-
-
-/* Ring buffer registers, p277, overview p19
- */
-#define LP_RING 0x2030
-#define HP_RING 0x2040
-
-#define RING_TAIL 0x00
-#define TAIL_ADDR 0x000FFFF8
-
-#define RING_HEAD 0x04
-#define HEAD_WRAP_COUNT 0xFFE00000
-#define HEAD_WRAP_ONE 0x00200000
-#define HEAD_ADDR 0x001FFFFC
-
-#define RING_START 0x08
-#define START_ADDR 0x00FFFFF8
-
-#define RING_LEN 0x0C
-#define RING_NR_PAGES 0x000FF000
-#define RING_REPORT_MASK 0x00000006
-#define RING_REPORT_64K 0x00000002
-#define RING_REPORT_128K 0x00000004
-#define RING_NO_REPORT 0x00000000
-#define RING_VALID_MASK 0x00000001
-#define RING_VALID 0x00000001
-#define RING_INVALID 0x00000000
-
-
-
-/* BitBlt Instructions
- *
- * There are many more masks & ranges yet to add.
- */
-#define BR00_BITBLT_CLIENT 0x40000000
-#define BR00_OP_COLOR_BLT 0x10000000
-#define BR00_OP_SRC_COPY_BLT 0x10C00000
-#define BR00_OP_FULL_BLT 0x11400000
-#define BR00_OP_MONO_SRC_BLT 0x11800000
-#define BR00_OP_MONO_SRC_COPY_BLT 0x11000000
-#define BR00_OP_MONO_PAT_BLT 0x11C00000
-#define BR00_OP_MONO_SRC_COPY_IMMEDIATE_BLT (0x61 << 22)
-#define BR00_OP_TEXT_IMMEDIATE_BLT 0xc000000
-
-
-#define BR00_TPCY_DISABLE 0x00000000
-#define BR00_TPCY_ENABLE 0x00000010
-
-#define BR00_TPCY_ROP 0x00000000
-#define BR00_TPCY_NO_ROP 0x00000020
-#define BR00_TPCY_EQ 0x00000000
-#define BR00_TPCY_NOT_EQ 0x00000040
-
-#define BR00_PAT_MSB_FIRST 0x00000000 /* ? */
-
-#define BR00_PAT_VERT_ALIGN 0x000000e0
-
-#define BR00_LENGTH 0x0000000F
-
-#define BR09_DEST_ADDR 0x03FFFFFF
-
-#define BR11_SOURCE_PITCH 0x00003FFF
-
-#define BR12_SOURCE_ADDR 0x03FFFFFF
-
-#define BR13_SOLID_PATTERN 0x80000000
-#define BR13_RIGHT_TO_LEFT 0x40000000
-#define BR13_LEFT_TO_RIGHT 0x00000000
-#define BR13_MONO_TRANSPCY 0x20000000
-#define BR13_USE_DYN_DEPTH 0x04000000
-#define BR13_DYN_8BPP 0x00000000
-#define BR13_DYN_16BPP 0x01000000
-#define BR13_DYN_24BPP 0x02000000
-#define BR13_ROP_MASK 0x00FF0000
-#define BR13_DEST_PITCH 0x0000FFFF
-#define BR13_PITCH_SIGN_BIT 0x00008000
-
-#define BR14_DEST_HEIGHT 0xFFFF0000
-#define BR14_DEST_WIDTH 0x0000FFFF
-
-#define BR15_PATTERN_ADDR 0x03FFFFFF
-
-#define BR16_SOLID_PAT_COLOR 0x00FFFFFF
-#define BR16_BACKGND_PAT_CLR 0x00FFFFFF
-
-#define BR17_FGND_PAT_CLR 0x00FFFFFF
-
-#define BR18_SRC_BGND_CLR 0x00FFFFFF
-#define BR19_SRC_FGND_CLR 0x00FFFFFF
-
-
-/* Instruction parser instructions
- */
-
-#define INST_PARSER_CLIENT 0x00000000
-#define INST_OP_FLUSH 0x02000000
-#define INST_FLUSH_MAP_CACHE 0x00000001
-
-#define INST_DEST_BUFFER_INFO 0x06800000
-
-#define INST_FRONT_BUFFER_INFO 0x06000000
-#define FRONT_INFO_ASYNC_FLIP 1<<6
-#define FRONT_INFO_PITCH_B 8
-
-#define GFX_OP_USER_INTERRUPT ((0<<29)|(2<<23))
-
-
-/* Registers in the i810 host-pci bridge pci config space which affect
- * the i810 graphics operations.
- */
-#define SMRAM_MISCC 0x70
-#define GMS 0x000000c0
-#define GMS_DISABLE 0x00000000
-#define GMS_ENABLE_BARE 0x00000040
-#define GMS_ENABLE_512K 0x00000080
-#define GMS_ENABLE_1M 0x000000c0
-#define USMM 0x00000030
-#define USMM_DISABLE 0x00000000
-#define USMM_TSEG_ZERO 0x00000010
-#define USMM_TSEG_512K 0x00000020
-#define USMM_TSEG_1M 0x00000030
-#define GFX_MEM_WIN_SIZE 0x00010000
-#define GFX_MEM_WIN_32M 0x00010000
-#define GFX_MEM_WIN_64M 0x00000000
-
-/* Overkill? I don't know. Need to figure out top of mem to make the
- * SMRAM calculations come out. Linux seems to have problems
- * detecting it all on its own, so this seems a reasonable double
- * check to any user supplied 'mem=...' boot param.
- *
- * ... unfortunately this reg doesn't work according to spec on the
- * test hardware.
- */
-#define WHTCFG_PAMR_DRP 0x50
-#define SYS_DRAM_ROW_0_SHIFT 16
-#define SYS_DRAM_ROW_1_SHIFT 20
-#define DRAM_MASK 0x0f
-#define DRAM_VALUE_0 0
-#define DRAM_VALUE_1 8
-/* No 2 value defined */
-#define DRAM_VALUE_3 16
-#define DRAM_VALUE_4 16
-#define DRAM_VALUE_5 24
-#define DRAM_VALUE_6 32
-#define DRAM_VALUE_7 32
-#define DRAM_VALUE_8 48
-#define DRAM_VALUE_9 64
-#define DRAM_VALUE_A 64
-#define DRAM_VALUE_B 96
-#define DRAM_VALUE_C 128
-#define DRAM_VALUE_D 128
-#define DRAM_VALUE_E 192
-#define DRAM_VALUE_F 256 /* nice one, geezer */
-#define LM_FREQ_MASK 0x10
-#define LM_FREQ_133 0x10
-#define LM_FREQ_100 0x00
-
-
-
-
-/* These are 3d state registers, but the state is invarient, so we let
- * the X server handle it:
- */
-
-
-
-/* GFXRENDERSTATE_COLOR_CHROMA_KEY, p135
- */
-#define GFX_OP_COLOR_CHROMA_KEY ((0x3<<29)|(0x1d<<24)|(0x2<<16)|0x1)
-#define CC1_UPDATE_KILL_WRITE (1<<28)
-#define CC1_ENABLE_KILL_WRITE (1<<27)
-#define CC1_DISABLE_KILL_WRITE 0
-#define CC1_UPDATE_COLOR_IDX (1<<26)
-#define CC1_UPDATE_CHROMA_LOW (1<<25)
-#define CC1_UPDATE_CHROMA_HI (1<<24)
-#define CC1_CHROMA_LOW_MASK ((1<<24)-1)
-#define CC2_COLOR_IDX_SHIFT 24
-#define CC2_COLOR_IDX_MASK (0xff<<24)
-#define CC2_CHROMA_HI_MASK ((1<<24)-1)
-
-
-#define GFX_CMD_CONTEXT_SEL ((0<<29)|(0x5<<23))
-#define CS_UPDATE_LOAD (1<<17)
-#define CS_UPDATE_USE (1<<16)
-#define CS_UPDATE_LOAD (1<<17)
-#define CS_LOAD_CTX0 0
-#define CS_LOAD_CTX1 (1<<8)
-#define CS_USE_CTX0 0
-#define CS_USE_CTX1 (1<<0)
-
-/* 3D Rendering Engine */
-
-#define RENDER_CLIENT 0x60000000
-
-/* Primitive rendering instruction */
-
-#define GFX_PRIMITIVE 0x1f000000
-#define PRIMITIVE_TRIANGLE 0 << 18
-#define PRIMITIVE_TRI_STRIP 1 << 18
-#define PRIMITIVE_TRI_REV_STRIP 2 << 18
-#define PRIMITIVE_TRI_FAN 3 << 18
-#define PRIMITIVE_POLYGON 4 << 18
-#define PRIMITIVE_LINE 5 << 18
-#define PRIMITIVE_LINE_STRIP 6 << 18
-#define PRIMITIVE_RECTANGLE 7 << 18
-
-/* Vertex format instruction */
-#define GFX_VERTEX_FORMAT 0x05000000
-#define VERTEX_0_TEXCOORDS 0 << 8
-#define VERTEX_1_TEXCOORDS 1 << 8
-#define VERTEX_2_TEXCOORDS 2 << 8
-#define VERTEX_SPECULAR_FOG 1 << 7
-#define VERTEX_DIFFUSE_ALPHA 1 << 6
-#define VERTEX_Z_OFFSET 1 << 5
-#define VERTEX_POS_XYZ 1 << 1
-#define VERTEX_POS_XYZ_RHW 2 << 1
-#define VERTEX_POS_XY 3 << 1
-#define VERTEX_POS_XY_RHW 4 << 1
-
-/* Drawing Rectangle Info instruction */
-
-#define GFX_DRAWING_RECTANGLE_INFO 0x1d800003
-#define GFX_DRAWING_CLIP_DISABLE 1<<31
-
-/* Boolean enable 1 */
-#define GFX_BOOLEAN_ENA_1 0x03000000
-#define BOOL1_ALPHA_SETUP_MASK 1<<17
-#define BOOL1_ALPHA_SETUP_BIT 1<<16
-#define BOOL1_FOG_ENABLE_MASK 1<<7
-#define BOOL1_FOG_ENABLE_BIT 1<<6
-#define BOOL1_ALPHA_TEST_MASK 1<<5
-#define BOOL1_ALPHA_TEST_BIT 1<<4
-#define BOOL1_BLEND_ENABLE_MASK 1<<3
-#define BOOL1_BLEND_ENABLE_BIT 1<<2
-#define BOOL1_Z_ENABLE_MASK 1<<1
-#define BOOL1_Z_ENABLE_BIT 1<<0
-
-/* Boolean enable 2 */
-#define GFX_BOOLEAN_ENA_2 0x04000000
-#define BOOL2_MAPPING_CACHE_MASK 1<<17
-#define BOOL2_MAPPING_CACHE_BIT 1<<16
-#define BOOL2_ALPHA_DITHER_MASK 1<<15
-#define BOOL2_ALPHA_DITHER_BIT 1<<14
-#define BOOL2_FOG_DITHER_MASK 1<<13
-#define BOOL2_FOG_DITHER_BIT 1<<12
-#define BOOL2_SPECULAR_DITHER_MASK 1<<11
-#define BOOL2_SPECULAR_DITHER_BIT 1<<10
-#define BOOL2_COLOR_DITHER_MASK 1<<9
-#define BOOL2_COLOR_DITHER_BIT 1<<8
-#define BOOL2_FB_WRITE_MASK 1<<3
-#define BOOL2_FB_WRITE_BIT 1<<2
-#define BOOL2_Z_WRITE_MASK 1<<1
-#define BOOL2_Z_WRITE_BIT 1<<0
-
-/* Dest buffer variables */
-
-#define GFX_DEST_BUFFER_VARIABLES 0x1d850000
-
-#define DEST_BUF_VAR_8BIT 0 << 8
-#define DEST_BUF_VAR_555 1 << 8
-#define DEST_BUF_VAR_565 2 << 8
-
-/* map color blend stages */
-
-#define GFX_MAP_COLOR_BLEND_STAGES 0
-
-#define MAP_BLEND_STAGE_B 20
-#define MAP_BLEND_ACC_SEL_MASK 1<<19
-#define MAP_BLEND_ACC_SEL_BIT 1<<18
-#define MAP_BLEND_ARG1_MASK 1<<17
-#define MAP_BLEND_ARG1_B 14
-#define MAP_BLEND_REPLICATE_ARG1 1<<13
-#define MAP_BLEND_INVERT_ARG1 1<<12
-
-#define MAP_BLEND_ARG2_MASK 1<<11
-#define MAP_BLEND_ARG2_B 8
-#define MAP_BLEND_REPLICATE_ARG2 1<<7
-#define MAP_BLEND_INVERT_ARG2 1<<6
-
-#define MAP_BLEND_COLOR_OP_MASK 1<<5
-#define MAP_BLEND_COLOR_OP_B 0
-
-#define GFX_SCISSOR_ENABLE 0x1c800000
-
-#define SCISSOR_ENABLE_MASK 1<<1
-#define SCISSOR_ENABLE_BIT 1<<0
diff --git a/hw/kdrive/i810/i810_video.c b/hw/kdrive/i810/i810_video.c
deleted file mode 100644
index ac881d51d..000000000
--- a/hw/kdrive/i810/i810_video.c
+++ /dev/null
@@ -1,1136 +0,0 @@
-/* COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 2000, 2001 Nokia Home Communications
-
-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, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-
-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
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
-
-X Window System is a trademark of The Open Group */
-
-/***************************************************************************
-
-Copyright 2000 Intel Corporation. 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, sub license, 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 INTEL, 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.
-
-**************************************************************************/
-
-
-/*
- * i810_video.c: i810 KDrive Xv driver.
- * Based on the XFree86 i810 Xv driver by Jonathan Bian.
- *
- * Authors:
- * Jonathan Bian <jonathan.bian@intel.com>
- * Pontus Lidman <pontus.lidman@nokia.com>
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include "kxv.h"
-#include "i810.h"
-
-#include <X11/extensions/Xv.h>
-
-#include "fourcc.h"
-
-typedef struct {
- CARD32 size;
- CARD32 offset;
-} FBLinearRec, *FBLinearPtr;
-
-#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 KdVideoAdaptorPtr i810SetupImageVideo(ScreenPtr);
-static void i810StopVideo(KdScreenInfo *, pointer, Bool);
-static int i810SetPortAttribute(KdScreenInfo *, Atom, int, pointer);
-static int i810GetPortAttribute(KdScreenInfo *, Atom, int *, pointer);
-static void i810QueryBestSize(KdScreenInfo *, Bool,
- short, short, short, short, unsigned int *, unsigned int *, pointer);
-static int i810PutImage( KdScreenInfo *, DrawablePtr,
- short, short, short, short, short, short, short, short,
- int, unsigned char*, short, short, Bool, RegionPtr, pointer);
-static int i810QueryImageAttributes(KdScreenInfo *,
- int, unsigned short *, unsigned short *, int *, int *);
-
-static void i810BlockHandler(int, pointer, pointer, pointer);
-
-#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
-
-static Atom xvBrightness, xvContrast, xvColorKey;
-
-#define IMAGE_MAX_WIDTH 720
-#define IMAGE_MAX_HEIGHT 576
-#define Y_BUF_SIZE (IMAGE_MAX_WIDTH * IMAGE_MAX_HEIGHT)
-
-#define OVERLAY_UPDATE(p) OUTREG(0x30000, p | 0x80000000);
-
-/*
- * OV0CMD - Overlay Command Register
- */
-#define VERTICAL_CHROMINANCE_FILTER 0x70000000
-#define VC_SCALING_OFF 0x00000000
-#define VC_LINE_REPLICATION 0x10000000
-#define VC_UP_INTERPOLATION 0x20000000
-#define VC_PIXEL_DROPPING 0x50000000
-#define VC_DOWN_INTERPOLATION 0x60000000
-#define VERTICAL_LUMINANCE_FILTER 0x0E000000
-#define VL_SCALING_OFF 0x00000000
-#define VL_LINE_REPLICATION 0x02000000
-#define VL_UP_INTERPOLATION 0x04000000
-#define VL_PIXEL_DROPPING 0x0A000000
-#define VL_DOWN_INTERPOLATION 0x0C000000
-#define HORIZONTAL_CHROMINANCE_FILTER 0x01C00000
-#define HC_SCALING_OFF 0x00000000
-#define HC_LINE_REPLICATION 0x00400000
-#define HC_UP_INTERPOLATION 0x00800000
-#define HC_PIXEL_DROPPING 0x01400000
-#define HC_DOWN_INTERPOLATION 0x01800000
-#define HORIZONTAL_LUMINANCE_FILTER 0x00380000
-#define HL_SCALING_OFF 0x00000000
-#define HL_LINE_REPLICATION 0x00080000
-#define HL_UP_INTERPOLATION 0x00100000
-#define HL_PIXEL_DROPPING 0x00280000
-#define HL_DOWN_INTERPOLATION 0x00300000
-
-#define Y_ADJUST 0x00010000
-#define OV_BYTE_ORDER 0x0000C000
-#define UV_SWAP 0x00004000
-#define Y_SWAP 0x00008000
-#define Y_AND_UV_SWAP 0x0000C000
-#define SOURCE_FORMAT 0x00003C00
-#define RGB_555 0x00000800
-#define RGB_565 0x00000C00
-#define YUV_422 0x00002000
-#define YUV_411 0x00002400
-#define YUV_420 0x00003000
-#define YUV_410 0x00003800
-#define BUFFER_AND_FIELD 0x00000006
-#define BUFFER0_FIELD0 0x00000000
-#define BUFFER1_FIELD0 0x00000004
-#define OVERLAY_ENABLE 0x00000001
-
-/*
- * DOV0STA - Display/Overlay 0 Status Register
- */
-#define DOV0STA 0x30008
-
-#define MINUV_SCALE 0x1
-
-#define RGB16ToColorKey(c) \
- (((c & 0xF800) << 8) | ((c & 0x07E0) << 5) | ((c & 0x001F) << 3))
-
-#define RGB15ToColorKey(c) \
- (((c & 0x7c00) << 9) | ((c & 0x03E0) << 6) | ((c & 0x001F) << 3))
-
-Bool i810InitVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdVideoAdaptorPtr *adaptors, *newAdaptors = NULL;
- KdVideoAdaptorPtr newAdaptor = NULL;
- int num_adaptors;
-
-/* fprintf(stderr,"i810InitVideo\n"); */
-
- if (screen->fb[0].bitsPerPixel != 8)
- {
- newAdaptor = i810SetupImageVideo(pScreen);
- }
-
- num_adaptors = KdXVListGenericAdaptors(screen, &adaptors);
-
- if(newAdaptor) {
- if(!num_adaptors) {
- num_adaptors = 1;
- adaptors = &newAdaptor;
- } else {
- newAdaptors = /* need to free this someplace */
- xalloc((num_adaptors + 1) * sizeof(KdVideoAdaptorPtr*));
- if(newAdaptors) {
- memcpy(newAdaptors, adaptors, num_adaptors *
- sizeof(KdVideoAdaptorPtr));
- newAdaptors[num_adaptors] = newAdaptor;
- adaptors = newAdaptors;
- num_adaptors++;
- }
- }
- }
-
- if(num_adaptors)
- KdXVScreenInit(pScreen, adaptors, num_adaptors);
-
- if(newAdaptors)
- xfree(newAdaptors);
- return TRUE;
-}
-
-/* client libraries expect an encoding */
-static KdVideoEncodingRec DummyEncoding[1] =
-{
- {
- 0,
- "XV_IMAGE",
- IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT,
- {1, 1}
- }
-};
-
-#define NUM_FORMATS 3
-
-static KdVideoFormatRec Formats[NUM_FORMATS] =
-{
- {15, TrueColor}, {16, TrueColor}, {24, TrueColor}
-};
-
-#define NUM_ATTRIBUTES 3
-
-static KdAttributeRec Attributes[NUM_ATTRIBUTES] =
-{
- {XvSettable | XvGettable, 0, (1 << 24) - 1, "XV_COLORKEY"},
- {XvSettable | XvGettable, -128, 127, "XV_BRIGHTNESS"},
- {XvSettable | XvGettable, 0, 255, "XV_CONTRAST"}
-};
-
-#define NUM_IMAGES 4
-
-static KdImageRec Images[NUM_IMAGES] =
-{
- XVIMAGE_YUY2,
- XVIMAGE_YV12,
- XVIMAGE_I420,
- XVIMAGE_UYVY
-};
-
-typedef struct {
- CARD32 OBUF_0Y;
- CARD32 OBUF_1Y;
- CARD32 OBUF_0U;
- CARD32 OBUF_0V;
- CARD32 OBUF_1U;
- CARD32 OBUF_1V;
- CARD32 OV0STRIDE;
- CARD32 YRGB_VPH;
- CARD32 UV_VPH;
- CARD32 HORZ_PH;
- CARD32 INIT_PH;
- CARD32 DWINPOS;
- CARD32 DWINSZ;
- CARD32 SWID;
- CARD32 SWIDQW;
- CARD32 SHEIGHT;
- CARD32 YRGBSCALE;
- CARD32 UVSCALE;
- CARD32 OV0CLRC0;
- CARD32 OV0CLRC1;
- CARD32 DCLRKV;
- CARD32 DCLRKM;
- CARD32 SCLRKVH;
- CARD32 SCLRKVL;
- CARD32 SCLRKM;
- CARD32 OV0CONF;
- CARD32 OV0CMD;
-} I810OverlayRegRec, *I810OverlayRegPtr;
-
-typedef struct {
- CARD32 YBuf0offset;
- CARD32 UBuf0offset;
- CARD32 VBuf0offset;
-
- CARD32 YBuf1offset;
- CARD32 UBuf1offset;
- CARD32 VBuf1offset;
-
- unsigned char currentBuf;
-
- unsigned char brightness;
- unsigned char contrast;
-
- RegionRec clip;
- CARD32 colorKey;
-
- CARD32 videoStatus;
- Time offTime;
- Time freeTime;
- FBLinearPtr linear;
-} I810PortPrivRec, *I810PortPrivPtr;
-
-#define GET_PORT_PRIVATE(screen) \
- (I810PortPrivPtr)(((I810CardInfo *) (screen->card->driver))->adaptor->pPortPrivates[0].ptr)
-
-static void i810ResetVideo(KdScreenInfo *screen)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
-
- I810PortPrivPtr pPriv = i810c->adaptor->pPortPrivates[0].ptr;
- I810OverlayRegPtr overlay = (I810OverlayRegPtr) (i810c->FbBase + i810c->OverlayStart);
-
- /*
- * Default to maximum image size in YV12
- */
-
- overlay->YRGB_VPH = 0;
- overlay->UV_VPH = 0;
- overlay->HORZ_PH = 0;
- overlay->INIT_PH = 0;
- overlay->DWINPOS = 0;
- overlay->DWINSZ = (IMAGE_MAX_HEIGHT << 16) | IMAGE_MAX_WIDTH;
- overlay->SWID = IMAGE_MAX_WIDTH | (IMAGE_MAX_WIDTH << 15);
- overlay->SWIDQW = (IMAGE_MAX_WIDTH >> 3) | (IMAGE_MAX_WIDTH << 12);
- overlay->SHEIGHT = IMAGE_MAX_HEIGHT | (IMAGE_MAX_HEIGHT << 15);
- overlay->YRGBSCALE = 0x80004000; /* scale factor 1 */
- overlay->UVSCALE = 0x80004000; /* scale factor 1 */
- overlay->OV0CLRC0 = 0x4000; /* brightness: 0 contrast: 1.0 */
- overlay->OV0CLRC1 = 0x80; /* saturation: bypass */
-
- /*
- * Enable destination color keying
- */
- switch(screen->fb[0].depth) {
- case 16: overlay->DCLRKV = RGB16ToColorKey(pPriv->colorKey);
- overlay->DCLRKM = 0x80070307;
- break;
- case 15: overlay->DCLRKV = RGB15ToColorKey(pPriv->colorKey);
- overlay->DCLRKM = 0x80070707;
- break;
- default: overlay->DCLRKV = pPriv->colorKey;
- overlay->DCLRKM = 0x80000000;
- break;
- }
-
- overlay->SCLRKVH = 0;
- overlay->SCLRKVL = 0;
- overlay->SCLRKM = 0; /* source color key disable */
- overlay->OV0CONF = 0; /* two 720 pixel line buffers */
-
- overlay->OV0CMD = VC_UP_INTERPOLATION | HC_UP_INTERPOLATION | Y_ADJUST |
- YUV_420;
-
- OVERLAY_UPDATE(i810c->OverlayPhysical);
-}
-
-
-static KdVideoAdaptorPtr
-i810SetupImageVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdCardInfo *card = pScreenPriv->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
-
-
- KdVideoAdaptorPtr adapt;
- I810PortPrivPtr pPriv;
-
-/* fprintf(stderr,"i810SetupImageVideo\n"); */
-
- if(!(adapt = xcalloc(1, sizeof(KdVideoAdaptorRec) +
- sizeof(I810PortPrivRec) +
- sizeof(DevUnion))))
- return NULL;
-
- adapt->type = XvWindowMask | XvInputMask | XvImageMask;
- adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
- adapt->name = "I810 Video Overlay";
- adapt->nEncodings = 1;
- adapt->pEncodings = DummyEncoding;
- adapt->nFormats = NUM_FORMATS;
- adapt->pFormats = Formats;
- adapt->nPorts = 1;
- adapt->pPortPrivates = (DevUnion*)(&adapt[1]);
-
- pPriv = (I810PortPrivPtr)(&adapt->pPortPrivates[1]);
-
- adapt->pPortPrivates[0].ptr = (pointer)(pPriv);
- adapt->pAttributes = Attributes;
- adapt->nImages = NUM_IMAGES;
- adapt->nAttributes = NUM_ATTRIBUTES;
- adapt->pImages = Images;
- adapt->PutVideo = NULL;
- adapt->PutStill = NULL;
- adapt->GetVideo = NULL;
- adapt->GetStill = NULL;
- adapt->StopVideo = i810StopVideo;
- adapt->SetPortAttribute = i810SetPortAttribute;
- adapt->GetPortAttribute = i810GetPortAttribute;
- adapt->QueryBestSize = i810QueryBestSize;
- adapt->PutImage = i810PutImage;
- adapt->QueryImageAttributes = i810QueryImageAttributes;
-
- pPriv->colorKey = i810c->colorKey & ((1 << screen->fb[0].depth) - 1);
- pPriv->videoStatus = 0;
- pPriv->brightness = 0;
- pPriv->contrast = 128;
- pPriv->linear = NULL;
- pPriv->currentBuf = 0;
-
- /* gotta uninit this someplace */
- REGION_INIT(pScreen, &pPriv->clip, NullBox, 0);
-
- i810c->adaptor = adapt;
-
- i810c->BlockHandler = pScreen->BlockHandler;
- pScreen->BlockHandler = i810BlockHandler;
-
- xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
- xvContrast = MAKE_ATOM("XV_CONTRAST");
- xvColorKey = MAKE_ATOM("XV_COLORKEY");
-
- i810ResetVideo(screen);
-
- return adapt;
-}
-
-
-/* I810ClipVideo -
-
- Takes the dst box in standard X BoxRec form (top and left
- edges inclusive, bottom and right exclusive). The new dst
- box is returned. The source boundaries are given (x1, y1
- inclusive, x2, y2 exclusive) and returned are the new source
- boundaries in 16.16 fixed point.
-*/
-
-static void
-I810ClipVideo(
- BoxPtr dst,
- INT32 *x1,
- INT32 *x2,
- INT32 *y1,
- INT32 *y2,
- BoxPtr extents, /* extents of the clip region */
- INT32 width,
- INT32 height
-){
- INT32 vscale, hscale, delta;
- int diff;
-
- hscale = ((*x2 - *x1) << 16) / (dst->x2 - dst->x1);
- vscale = ((*y2 - *y1) << 16) / (dst->y2 - dst->y1);
-
- *x1 <<= 16; *x2 <<= 16;
- *y1 <<= 16; *y2 <<= 16;
-
- diff = extents->x1 - dst->x1;
- if(diff > 0) {
- dst->x1 = extents->x1;
- *x1 += diff * hscale;
- }
- diff = dst->x2 - extents->x2;
- if(diff > 0) {
- dst->x2 = extents->x2;
- *x2 -= diff * hscale;
- }
- diff = extents->y1 - dst->y1;
- if(diff > 0) {
- dst->y1 = extents->y1;
- *y1 += diff * vscale;
- }
- diff = dst->y2 - extents->y2;
- if(diff > 0) {
- dst->y2 = extents->y2;
- *y2 -= diff * vscale;
- }
-
- if(*x1 < 0) {
- diff = (- *x1 + hscale - 1)/ hscale;
- dst->x1 += diff;
- *x1 += diff * hscale;
- }
- delta = *x2 - (width << 16);
- if(delta > 0) {
- diff = (delta + hscale - 1)/ hscale;
- dst->x2 -= diff;
- *x2 -= diff * hscale;
- }
- if(*y1 < 0) {
- diff = (- *y1 + vscale - 1)/ vscale;
- dst->y1 += diff;
- *y1 += diff * vscale;
- }
- delta = *y2 - (height << 16);
- if(delta > 0) {
- diff = (delta + vscale - 1)/ vscale;
- dst->y2 -= diff;
- *y2 -= diff * vscale;
- }
-}
-
-static void
-i810StopVideo(KdScreenInfo *screen, pointer data, Bool exit)
-{
- I810PortPrivPtr pPriv = (I810PortPrivPtr)data;
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
-
- I810OverlayRegPtr overlay = (I810OverlayRegPtr) (i810c->FbBase + i810c->OverlayStart);
-
- REGION_EMPTY(screen->pScreen, &pPriv->clip);
-
- if(exit) {
- if(pPriv->videoStatus & CLIENT_VIDEO_ON) {
- overlay->OV0CMD &= 0xFFFFFFFE;
- OVERLAY_UPDATE(i810c->OverlayPhysical);
- }
- if(pPriv->linear) {
- xfree(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
-i810SetPortAttribute(
- KdScreenInfo *screen,
- Atom attribute,
- int value,
- pointer data
-){
- I810PortPrivPtr pPriv = (I810PortPrivPtr)data;
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
-
- I810OverlayRegPtr overlay = (I810OverlayRegPtr) (i810c->FbBase + i810c->OverlayStart);
-
- if(attribute == xvBrightness) {
- if((value < -128) || (value > 127))
- return BadValue;
- pPriv->brightness = value;
- overlay->OV0CLRC0 &= 0xFFFFFF00;
- overlay->OV0CLRC0 |= value;
- OVERLAY_UPDATE(i810c->OverlayPhysical);
- } else
- if(attribute == xvContrast) {
- if((value < 0) || (value > 255))
- return BadValue;
- pPriv->contrast = value;
- overlay->OV0CLRC0 &= 0xFFFE00FF;
- overlay->OV0CLRC0 |= value << 9;
- OVERLAY_UPDATE(i810c->OverlayPhysical);
- } else
- if(attribute == xvColorKey) {
- pPriv->colorKey = value;
- switch(screen->fb[0].depth) {
- case 16: overlay->DCLRKV = RGB16ToColorKey(pPriv->colorKey);
- break;
- case 15: overlay->DCLRKV = RGB15ToColorKey(pPriv->colorKey);
- break;
- default: overlay->DCLRKV = pPriv->colorKey;
- break;
- }
- OVERLAY_UPDATE(i810c->OverlayPhysical);
- REGION_EMPTY(screen->pScreen, &pPriv->clip);
- } else return BadMatch;
-
- return Success;
-}
-
-static int
-i810GetPortAttribute(
- KdScreenInfo *screen,
- Atom attribute,
- int *value,
- pointer data
-){
- I810PortPrivPtr pPriv = (I810PortPrivPtr)data;
-
- if(attribute == xvBrightness) {
- *value = pPriv->brightness;
- } else
- if(attribute == xvContrast) {
- *value = pPriv->contrast;
- } else
- if(attribute == xvColorKey) {
- *value = pPriv->colorKey;
- } else return BadMatch;
-
- return Success;
-}
-
-static void
-i810QueryBestSize(
- KdScreenInfo *screen,
- Bool motion,
- short vid_w, short vid_h,
- short drw_w, short drw_h,
- unsigned int *p_w, unsigned int *p_h,
- pointer data
-){
- *p_w = drw_w;
- *p_h = drw_h;
-}
-
-
-static void
-I810CopyPackedData(
- KdScreenInfo *screen,
- unsigned char *buf,
- int srcPitch,
- int dstPitch,
- int top,
- int left,
- int h,
- int w
- )
-{
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
- I810PortPrivPtr pPriv = i810c->adaptor->pPortPrivates[0].ptr;
- unsigned char *src, *dst;
-
- src = buf + (top*srcPitch) + (left<<1);
-
- if (pPriv->currentBuf == 0)
- dst = i810c->FbBase + pPriv->YBuf0offset;
- else
- dst = i810c->FbBase + pPriv->YBuf1offset;
-
- w <<= 1;
- while(h--) {
- memcpy(dst, src, w);
- src += srcPitch;
- dst += dstPitch;
- }
-}
-
-static void
-i810CopyPlanarData(
- KdScreenInfo *screen,
- unsigned char *buf,
- int srcPitch,
- int dstPitch, /* of chroma */
- int srcH,
- int top,
- int left,
- int h,
- int w,
- int id
- )
-{
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
- I810PortPrivPtr pPriv = i810c->adaptor->pPortPrivates[0].ptr;
- int i;
- unsigned char *src1, *src2, *src3, *dst1, *dst2, *dst3;
-
- /* Copy Y data */
- src1 = buf + (top*srcPitch) + left;
- if (pPriv->currentBuf == 0)
- dst1 = i810c->FbBase + pPriv->YBuf0offset;
- else
- dst1 = i810c->FbBase + pPriv->YBuf1offset;
-
- for (i = 0; i < h; i++) {
- memcpy(dst1, src1, w);
- src1 += srcPitch;
- dst1 += dstPitch << 1;
- }
-
- /* Copy V data for YV12, or U data for I420 */
- src2 = buf + (srcH*srcPitch) + ((top*srcPitch)>>2) + (left>>1);
- if (pPriv->currentBuf == 0) {
- if (id == FOURCC_I420)
- dst2 = i810c->FbBase + pPriv->UBuf0offset;
- else
- dst2 = i810c->FbBase + pPriv->VBuf0offset;
- } else {
- if (id == FOURCC_I420)
- dst2 = i810c->FbBase + pPriv->UBuf1offset;
- else
- dst2 = i810c->FbBase + pPriv->VBuf1offset;
- }
-
- for (i = 0; i < h/2; i++) {
- memcpy(dst2, src2, w/2);
- src2 += srcPitch>>1;
- dst2 += dstPitch;
- }
-
- /* Copy U data for YV12, or V data for I420 */
- src3 = buf + (srcH*srcPitch) + ((srcH*srcPitch)>>2) + ((top*srcPitch)>>2) + (left>>1);
- if (pPriv->currentBuf == 0) {
- if (id == FOURCC_I420)
- dst3 = i810c->FbBase + pPriv->VBuf0offset;
- else
- dst3 = i810c->FbBase + pPriv->UBuf0offset;
- } else {
- if (id == FOURCC_I420)
- dst3 = i810c->FbBase + pPriv->VBuf1offset;
- else
- dst3 = i810c->FbBase + pPriv->UBuf1offset;
- }
-
- for (i = 0; i < h/2; i++) {
- memcpy(dst3, src3, w/2);
- src3 += srcPitch>>1;
- dst3 += dstPitch;
- }
-}
-
-static void
-i810DisplayVideo(
- KdScreenInfo *screen,
- int id,
- short width, short height,
- int dstPitch, /* of chroma for 4:2:0 */
- int x1, int y1, int x2, int y2,
- BoxPtr dstBox,
- short src_w, short src_h,
- short drw_w, short drw_h
-){
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
- I810PortPrivPtr pPriv = i810c->adaptor->pPortPrivates[0].ptr;
- I810OverlayRegPtr overlay = (I810OverlayRegPtr) (i810c->FbBase + i810c->OverlayStart);
- int xscaleInt, xscaleFract, yscaleInt, yscaleFract;
- int xscaleIntUV = 0, xscaleFractUV = 0, yscaleIntUV = 0, yscaleFractUV = 0;
- unsigned int swidth;
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- swidth = (width + 7) & ~7;
- overlay->SWID = (swidth << 15) | swidth;
- overlay->SWIDQW = (swidth << 12) | (swidth >> 3);
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- swidth = ((width + 3) & ~3) << 1;
- overlay->SWID = swidth;
- overlay->SWIDQW = swidth >> 3;
- break;
- }
-
- overlay->SHEIGHT = height | (height << 15);
- overlay->DWINPOS = (dstBox->y1 << 16) | dstBox->x1;
- overlay->DWINSZ = ((dstBox->y2 - dstBox->y1) << 16) |
- (dstBox->x2 - dstBox->x1);
-
- /* buffer locations */
- overlay->OBUF_0Y = pPriv->YBuf0offset;
- overlay->OBUF_1Y = pPriv->YBuf1offset;
- overlay->OBUF_0U = pPriv->UBuf0offset;
- overlay->OBUF_0V = pPriv->VBuf0offset;
- overlay->OBUF_1U = pPriv->UBuf1offset;
- overlay->OBUF_1V = pPriv->VBuf1offset;
-
- /*
- * Calculate horizontal and vertical scaling factors, default to 1:1
- */
- overlay->YRGBSCALE = 0x80004000;
- overlay->UVSCALE = 0x80004000;
-
- /*
- * Initially, YCbCr and Overlay Enable and
- * vertical chrominance up interpolation and horozontal chrominance
- * up interpolation
- */
- overlay->OV0CMD = VC_UP_INTERPOLATION | HC_UP_INTERPOLATION | Y_ADJUST |
- OVERLAY_ENABLE;
-
- if ((drw_w != src_w) || (drw_h != src_h))
- {
- xscaleInt = (src_w / drw_w) & 0x3;
- xscaleFract = (src_w << 12) / drw_w;
- yscaleInt = (src_h / drw_h) & 0x3;
- yscaleFract = (src_h << 12) / drw_h;
-
- overlay->YRGBSCALE = (xscaleInt << 15) |
- ((xscaleFract & 0xFFF) << 3) |
- (yscaleInt) |
- ((yscaleFract & 0xFFF) << 20);
-
- if (drw_w > src_w)
- {
- /* horizontal up-scaling */
- overlay->OV0CMD &= ~HORIZONTAL_CHROMINANCE_FILTER;
- overlay->OV0CMD &= ~HORIZONTAL_LUMINANCE_FILTER;
- overlay->OV0CMD |= (HC_UP_INTERPOLATION | HL_UP_INTERPOLATION);
- }
-
- if (drw_h > src_h)
- {
- /* vertical up-scaling */
- overlay->OV0CMD &= ~VERTICAL_CHROMINANCE_FILTER;
- overlay->OV0CMD &= ~VERTICAL_LUMINANCE_FILTER;
- overlay->OV0CMD |= (VC_UP_INTERPOLATION | VL_UP_INTERPOLATION);
- }
-
- if (drw_w < src_w)
- {
- /* horizontal down-scaling */
- overlay->OV0CMD &= ~HORIZONTAL_CHROMINANCE_FILTER;
- overlay->OV0CMD &= ~HORIZONTAL_LUMINANCE_FILTER;
- overlay->OV0CMD |= (HC_DOWN_INTERPOLATION | HL_DOWN_INTERPOLATION);
- }
-
- if (drw_h < src_h)
- {
- /* vertical down-scaling */
- overlay->OV0CMD &= ~VERTICAL_CHROMINANCE_FILTER;
- overlay->OV0CMD &= ~VERTICAL_LUMINANCE_FILTER;
- overlay->OV0CMD |= (VC_DOWN_INTERPOLATION | VL_DOWN_INTERPOLATION);
- }
-
- /* now calculate the UV scaling factor */
-
- if (xscaleFract)
- {
- xscaleFractUV = xscaleFract >> MINUV_SCALE;
- overlay->OV0CMD &= ~HC_DOWN_INTERPOLATION;
- overlay->OV0CMD |= HC_UP_INTERPOLATION;
- }
-
- if (xscaleInt)
- {
- xscaleIntUV = xscaleInt >> MINUV_SCALE;
- if (xscaleIntUV)
- {
- overlay->OV0CMD &= ~HC_UP_INTERPOLATION;
- }
- }
-
- if (yscaleFract)
- {
- yscaleFractUV = yscaleFract >> MINUV_SCALE;
- overlay->OV0CMD &= ~VC_DOWN_INTERPOLATION;
- overlay->OV0CMD |= VC_UP_INTERPOLATION;
- }
-
- if (yscaleInt)
- {
- yscaleIntUV = yscaleInt >> MINUV_SCALE;
- if (yscaleIntUV)
- {
- overlay->OV0CMD &= ~VC_UP_INTERPOLATION;
- overlay->OV0CMD |= VC_DOWN_INTERPOLATION;
- }
- }
-
- overlay->UVSCALE = yscaleIntUV | ((xscaleFractUV & 0xFFF) << 3) |
- ((yscaleFractUV & 0xFFF) << 20);
- }
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- overlay->OV0STRIDE = (dstPitch << 1) | (dstPitch << 16);
- overlay->OV0CMD &= ~SOURCE_FORMAT;
- overlay->OV0CMD |= YUV_420;
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- overlay->OV0STRIDE = dstPitch;
- overlay->OV0CMD &= ~SOURCE_FORMAT;
- overlay->OV0CMD |= YUV_422;
- overlay->OV0CMD &= ~OV_BYTE_ORDER;
- if (id == FOURCC_UYVY)
- overlay->OV0CMD |= Y_SWAP;
- break;
- }
-
- overlay->OV0CMD &= ~BUFFER_AND_FIELD;
- if (pPriv->currentBuf == 0)
- overlay->OV0CMD |= BUFFER0_FIELD0;
- else
- overlay->OV0CMD |= BUFFER1_FIELD0;
-
- OVERLAY_UPDATE(i810c->OverlayPhysical);
-
-}
-
-static FBLinearPtr
-i810AllocateMemory(
- KdScreenInfo *screen,
- FBLinearPtr linear,
- int size
-){
- KdCardInfo *card=screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
- FBLinearPtr new_linear;
-
- if(linear) {
- if(linear->size >= size)
- return linear;
- else
- ErrorF("Ran out of memory for overlay buffer, requested size = %d\n",size);
- }
-
- new_linear = xalloc(sizeof(FBLinearRec));
- new_linear->size = i810c->XvMem.Size;
- new_linear->offset = i810c->XvMem.Start;
-
-/* fprintf(stderr,"Overlay mem offset %lx\n",new_linear->offset); */
-
- return new_linear;
-}
-
-static int
-i810PutImage(KdScreenInfo *screen,
- DrawablePtr pDraw,
- 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)
-{
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
- I810PortPrivPtr pPriv = (I810PortPrivPtr)data;
- INT32 x1, x2, y1, y2;
- int srcPitch, dstPitch;
- int top, left, npixels, nlines, size;
- BoxRec dstBox;
-
- /* Clip */
- x1 = src_x;
- x2 = src_x + src_w;
- y1 = src_y;
- y2 = src_y + src_h;
-
- dstBox.x1 = drw_x;
- dstBox.x2 = drw_x + drw_w;
- dstBox.y1 = drw_y;
- dstBox.y2 = drw_y + drw_h;
-
- I810ClipVideo(&dstBox, &x1, &x2, &y1, &y2,
- REGION_EXTENTS(pScreen, clipBoxes), width, height);
-
- if((x1 >= x2) || (y1 >= y2))
- return Success;
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- srcPitch = (width + 3) & ~3;
- dstPitch = ((width >> 1) + 7) & ~7; /* of chroma */
- size = dstPitch * height * 3;
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- srcPitch = (width << 1);
- dstPitch = (srcPitch + 7) & ~7;
- size = dstPitch * height;
- break;
- }
-
- if(!(pPriv->linear = i810AllocateMemory(screen, pPriv->linear,
- (screen->fb[0].bitsPerPixel == 16) ? size : (size >> 1))))
- return BadAlloc;
-
- /* fixup pointers */
- pPriv->YBuf0offset = pPriv->linear->offset;
- pPriv->UBuf0offset = pPriv->YBuf0offset + (dstPitch * 2 * height);
- pPriv->VBuf0offset = pPriv->UBuf0offset + (dstPitch * height >> 1);
-
- pPriv->YBuf1offset = pPriv->linear->offset + size;
- pPriv->UBuf1offset = pPriv->YBuf1offset + (dstPitch * 2 * height);
- pPriv->VBuf1offset = pPriv->UBuf1offset + (dstPitch * height >> 1);
-
- /* wait for the last rendered buffer to be flipped in */
- while (((INREG(DOV0STA)&0x00100000)>>20) != pPriv->currentBuf);
-
- /* buffer swap */
- if (pPriv->currentBuf == 0)
- pPriv->currentBuf = 1;
- else
- pPriv->currentBuf = 0;
-
- /* copy data */
- top = y1 >> 16;
- left = (x1 >> 16) & ~1;
- npixels = ((((x2 + 0xffff) >> 16) + 1) & ~1) - left;
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- top &= ~1;
- nlines = ((((y2 + 0xffff) >> 16) + 1) & ~1) - top;
- i810CopyPlanarData(screen, buf, srcPitch, dstPitch, height, top, left,
- nlines, npixels, id);
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- nlines = ((y2 + 0xffff) >> 16) - top;
- I810CopyPackedData(screen, buf, srcPitch, dstPitch, top, left, nlines,
- npixels);
- break;
- }
-
- /* update cliplist */
- if(!REGION_EQUAL(screen->pScreen, &pPriv->clip, clipBoxes)) {
- REGION_COPY(screen->pScreen, &pPriv->clip, clipBoxes);
- KXVPaintRegion (pDraw, &pPriv->clip, pPriv->colorKey);
- }
-
-
- i810DisplayVideo(screen, id, width, height, dstPitch,
- x1, y1, x2, y2, &dstBox, src_w, src_h, drw_w, drw_h);
-
- pPriv->videoStatus = CLIENT_VIDEO_ON;
-
- return Success;
-}
-
-
-static int
-i810QueryImageAttributes(
- KdScreenInfo *screen,
- int id,
- unsigned short *w, unsigned short *h,
- int *pitches, int *offsets
-){
- int size, tmp;
-
- if(*w > 720) *w = 720;
- if(*h > 576) *h = 576;
-
- *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
-i810BlockHandler (
- int i,
- pointer blockData,
- pointer pTimeout,
- pointer pReadmask
-){
- ScreenPtr pScreen = screenInfo.screens[i];
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdCardInfo *card = screen->card;
- I810CardInfo *i810c = (I810CardInfo *) card->driver;
- I810PortPrivPtr pPriv = GET_PORT_PRIVATE(screen);
- I810OverlayRegPtr overlay = (I810OverlayRegPtr) (i810c->FbBase + i810c->OverlayStart);
-
- pScreen->BlockHandler = i810c->BlockHandler;
-
- (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
-
- pScreen->BlockHandler = i810BlockHandler;
-
- if(pPriv->videoStatus & TIMER_MASK) {
- UpdateCurrentTime();
- if(pPriv->videoStatus & OFF_TIMER) {
- if(pPriv->offTime < currentTime.milliseconds) {
- /* Turn off the overlay */
- overlay->OV0CMD &= 0xFFFFFFFE;
- OVERLAY_UPDATE(i810c->OverlayPhysical);
-
- pPriv->videoStatus = FREE_TIMER;
- pPriv->freeTime = currentTime.milliseconds + FREE_DELAY;
- }
- } else { /* FREE_TIMER */
- if(pPriv->freeTime < currentTime.milliseconds) {
- if(pPriv->linear) {
- xfree(pPriv->linear);
- pPriv->linear = NULL;
- }
- pPriv->videoStatus = 0;
- }
- }
- }
-}
diff --git a/hw/kdrive/i810/i810draw.c b/hw/kdrive/i810/i810draw.c
deleted file mode 100644
index b571efbe0..000000000
--- a/hw/kdrive/i810/i810draw.c
+++ /dev/null
@@ -1,352 +0,0 @@
-/* COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 2000, 2001 Nokia Home Communications
-
-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, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-
-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
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
-
-X Window System is a trademark of The Open Group */
-
-/* Hardware accelerated drawing for KDrive i810 driver.
- Author: Pontus Lidman <pontus.lidman@nokia.com>
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include "kaa.h"
-#ifdef XV
-#include "kxv.h"
-#endif
-#include "i810.h"
-#include "i810_reg.h"
-
-//#include "Xmd.h"
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-#include "picturestr.h"
-
-#define NUM_STACK_RECTS 1024
-
-i810ScreenInfo *accel_i810s;
-
-static int
-i810WaitLpRing(i810ScreenInfo *i810s, int n, int timeout_millis)
-{
- i810CardInfo *i810c = i810s->i810c;
- I810RingBuffer *ring = &(i810c->LpRing);
- int iters = 0;
- int start = 0;
- int now = 0;
- int last_head = 0;
- int first = 0;
-
- /* If your system hasn't moved the head pointer in 2 seconds, I'm going to
- * call it crashed.
- */
- if (timeout_millis == 0)
- timeout_millis = 2000;
-
- if (I810_DEBUG) {
- fprintf(stderr, "i810WaitLpRing %d\n", n);
- first = GetTimeInMillis();
- }
-
- while (ring->space < n)
- {
- int i;
-
- ring->head = INREG(LP_RING + RING_HEAD) & HEAD_ADDR;
- ring->space = ring->head - (ring->tail+8);
-
- if (ring->space < 0)
- ring->space += ring->mem.Size;
-
- iters++;
- now = GetTimeInMillis();
- if ( start == 0 || now < start || ring->head != last_head) {
- if (I810_DEBUG)
- if (now > start)
- fprintf(stderr, "space: %d wanted %d\n", ring->space, n );
- start = now;
- last_head = ring->head;
- } else if ( now - start > timeout_millis ) {
-
- i810PrintErrorState(i810c);
- fprintf(stderr, "space: %d wanted %d\n", ring->space, n );
- FatalError("lockup\n");
- }
-
- for (i = 0 ; i < 2000 ; i++)
- ;
- }
-
- if (I810_DEBUG)
- {
- now = GetTimeInMillis();
- if (now - first) {
- fprintf(stderr,"Elapsed %d ms\n", now - first);
- fprintf(stderr, "space: %d wanted %d\n", ring->space, n );
- }
- }
-
- return iters;
-}
-
-static void
-i810Sync(i810ScreenInfo *i810s)
-{
- i810CardInfo *i810c = i810s->i810c;
- LP_RING_LOCALS;
-
- if (I810_DEBUG)
- fprintf(stderr, "i810Sync\n");
-
- /* Send a flush instruction and then wait till the ring is empty.
- * This is stronger than waiting for the blitter to finish as it also
- * flushes the internal graphics caches.
- */
- BEGIN_LP_RING(2);
- OUT_RING( INST_PARSER_CLIENT | INST_OP_FLUSH | INST_FLUSH_MAP_CACHE );
- OUT_RING( 0 ); /* pad to quadword */
- ADVANCE_LP_RING();
-
- i810WaitLpRing(i810s, i810c->LpRing.mem.Size - 8, 0);
-
- i810c->LpRing.space = i810c->LpRing.mem.Size - 8;
- i810c->nextColorExpandBuf = 0;
-}
-
-static void
-i810WaitMarker(ScreenPtr pScreen, int marker)
-{
- KdScreenPriv(pScreen);
- i810ScreenInfo(pScreenPriv);
-
- i810Sync(i810s);
-}
-
-#if 0
-static void
-i810EmitInvarientState(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- i810CardInfo(pScreenPriv);
- i810ScreenInfo(pScreenPriv);
- LP_RING_LOCALS;
-
- BEGIN_LP_RING( 10 );
-
- OUT_RING( INST_PARSER_CLIENT | INST_OP_FLUSH | INST_FLUSH_MAP_CACHE );
- OUT_RING( GFX_CMD_CONTEXT_SEL | CS_UPDATE_USE | CS_USE_CTX0 );
- OUT_RING( INST_PARSER_CLIENT | INST_OP_FLUSH | INST_FLUSH_MAP_CACHE);
- OUT_RING( 0 );
-
-
- OUT_RING( GFX_OP_COLOR_CHROMA_KEY );
- OUT_RING( CC1_UPDATE_KILL_WRITE |
- CC1_DISABLE_KILL_WRITE |
- CC1_UPDATE_COLOR_IDX |
- CC1_UPDATE_CHROMA_LOW |
- CC1_UPDATE_CHROMA_HI |
- 0);
- OUT_RING( 0 );
- OUT_RING( 0 );
-
- /* No depth buffer in KDrive yet */
- /* OUT_RING( CMD_OP_Z_BUFFER_INFO ); */
- /* OUT_RING( pI810->DepthBuffer.Start | pI810->auxPitchBits); */
-
- ADVANCE_LP_RING();
-}
-#endif
-
-static unsigned int i810PatternRop[16] = {
- 0x00, /* GXclear */
- 0xA0, /* GXand */
- 0x50, /* GXandReverse */
- 0xF0, /* GXcopy */
- 0x0A, /* GXandInvert */
- 0xAA, /* GXnoop */
- 0x5A, /* GXxor */
- 0xFA, /* GXor */
- 0x05, /* GXnor */
- 0xA5, /* GXequiv */
- 0x55, /* GXinvert */
- 0xF5, /* GXorReverse */
- 0x0F, /* GXcopyInvert */
- 0xAF, /* GXorInverted */
- 0x5F, /* GXnand */
- 0xFF /* GXset */
-};
-
-static Bool
-i810PrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg)
-{
- KdScreenPriv(pPix->drawable.pScreen);
- i810ScreenInfo(pScreenPriv);
- i810CardInfo(pScreenPriv);
-
- if (I810_DEBUG & DEBUG_VERBOSE_ACCEL)
- ErrorF( "i810PrepareSolid color: %x rop: %x mask: %x\n",
- fg, alu, pm);
-
- /* Color blit, p166 */
- i810c->BR[13] = BR13_SOLID_PATTERN |
- (i810PatternRop[alu] << 16) |
- (pPix->drawable.pScreen->width * i810c->cpp);
- i810c->BR[16] = fg;
-
- accel_i810s = i810s;
-
- return TRUE;
-}
-
-static void
-i810Solid(int x1, int y1, int x2, int y2)
-{
- I810ScreenInfo *i810s = accel_i810s;
- I810CardInfo *i810c = i810s->i810c;
- LP_RING_LOCALS;
-
- if (I810_DEBUG & DEBUG_VERBOSE_ACCEL)
- ErrorF( "i810SubsequentFillRectSolid %d,%d %d,%d\n", x1, y1, x2, y2);
-
- BEGIN_LP_RING(6);
-
- OUT_RING( BR00_BITBLT_CLIENT | BR00_OP_COLOR_BLT | 0x3 );
- OUT_RING( i810c->BR[13] );
- OUT_RING( ((y2 - y1) << 16) | ((x2 - x1) * i810c->cpp));
- OUT_RING( i810c->bufferOffset + y1 * i810s->pitch + x1 * i810c->cpp );
-
- OUT_RING( i810c->BR[16]);
- OUT_RING( 0 ); /* pad to quadword */
-
- ADVANCE_LP_RING();
-}
-
-static void
-i810DoneSolid(void)
-{
-}
-
-static Bool
-i810PrepareCopy(PixmapPtr pSrc, PixmapPtr pDst, int dx, int dy, int alu, Pixel pm)
-{
- return FALSE;
-}
-
-static void
-i810RefreshRing(i810CardInfo *i810c)
-{
- i810c->LpRing.head = INREG(LP_RING + RING_HEAD) & HEAD_ADDR;
- i810c->LpRing.tail = INREG(LP_RING + RING_TAIL);
- i810c->LpRing.space = i810c->LpRing.head - (i810c->LpRing.tail+8);
- if (i810c->LpRing.space < 0)
- i810c->LpRing.space += i810c->LpRing.mem.Size;
-}
-
-
-static void
-i810SetRingRegs(i810CardInfo *i810c)
-{
- unsigned int itemp;
-
- OUTREG(LP_RING + RING_TAIL, 0 );
- OUTREG(LP_RING + RING_HEAD, 0 );
-
- itemp = INREG(LP_RING + RING_START);
- itemp &= ~(START_ADDR);
- itemp |= i810c->LpRing.mem.Start;
- OUTREG(LP_RING + RING_START, itemp );
-
- itemp = INREG(LP_RING + RING_LEN);
- itemp &= ~(RING_NR_PAGES | RING_REPORT_MASK | RING_VALID_MASK);
- itemp |= ((i810c->LpRing.mem.Size-4096) | RING_NO_REPORT | RING_VALID);
- OUTREG(LP_RING + RING_LEN, itemp );
-}
-
-Bool
-i810InitAccel(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- i810ScreenInfo(pScreenPriv);
- i810CardInfo(pScreenPriv);
-
- memset(&i810s->kaa, 0, sizeof(KaaScreenInfoRec));
- i810s->kaa.waitMarker = i810WaitMarker;
- i810s->kaa.PrepareSolid = i810PrepareSolid;
- i810s->kaa.Solid = i810Solid;
- i810s->kaa.DoneSolid = i810DoneSolid;
- i810s->kaa.PrepareCopy = i810PrepareCopy;
- i810s->kaa.Copy = NULL;
- i810s->kaa.DoneCopy = NULL;
-
- i810s->pitch = pScreen->width * i810c->cpp;
-
- return FALSE;
-}
-
-void
-i810EnableAccel(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- i810CardInfo(pScreenPriv);
-
- if (i810c->LpRing.mem.Size == 0) {
- ErrorF("No memory for LpRing!! Acceleration not functional!!\n");
- }
-
- i810SetRingRegs(i810c);
-
- kaaMarkSync (pScreen);
-}
-
-
-void
-i810DisableAccel(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- i810CardInfo(pScreenPriv);
- i810ScreenInfo(pScreenPriv);
-
- i810RefreshRing(i810c);
- i810Sync(i810s);
-}
-
-void
-i810FiniAccel(ScreenPtr pScreen)
-{
-}
diff --git a/hw/kdrive/i810/i810draw.h b/hw/kdrive/i810/i810draw.h
deleted file mode 100644
index 7c8c04489..000000000
--- a/hw/kdrive/i810/i810draw.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 2000, 2001 Nokia Home Communications
-
-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, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-
-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
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
-
-X Window System is a trademark of The Open Group */
-
-/* Hardware accelerated drawing for KDrive i810 driver, header file.
- Author: Pontus Lidman <pontus.lidman@nokia.com>
-*/
-
-
-#ifndef _I810DRAW_H_
-#define _I810DRAW_H_
-
-void i810RefreshRing(KdScreenInfo *screen);
-int i810WaitLpRing( KdScreenInfo *screen, int n, int timeout_millis );
-void i810Sync( KdScreenInfo *screen );
-
-#endif /* _I810DRAW_H_ */
diff --git a/hw/kdrive/i810/i810stub.c b/hw/kdrive/i810/i810stub.c
deleted file mode 100644
index 3109984e0..000000000
--- a/hw/kdrive/i810/i810stub.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 2000, 2001 Nokia Home Communications
-
-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, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-
-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
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR 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.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
-
-X Window System is a trademark of The Open Group */
-
-/* Stub functions for the i810 KDrive driver
- Author: Pontus Lidman <pontus.lidman@nokia.com>
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include "kxv.h"
-#include "i810.h"
-#include "klinux.h"
-
-static const int i810Cards[]={
- PCI_CHIP_I810,
- PCI_CHIP_I810_DC100,
- PCI_CHIP_I810_E
-};
-
-#define numI810Cards (sizeof(i810Cards) / sizeof(i810Cards[0]))
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
- int i;
-
- for (i = 0; i < numI810Cards; i++)
- if (LinuxFindPci (0x8086, i810Cards[i], 0, &attr))
- KdCardInfoAdd (&i810Funcs, &attr, (void *) i810Cards[i]);
-}
-
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- ret = KdProcessArgument(argc, argv, i);
- return ret;
-}
diff --git a/hw/kdrive/igs/igs.c b/hw/kdrive/igs/igs.c
deleted file mode 100644
index 1c446f782..000000000
--- a/hw/kdrive/igs/igs.c
+++ /dev/null
@@ -1,667 +0,0 @@
-/*
- * Copyright © 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "igs.h"
-
-Bool
-igsCardInit (KdCardInfo *card)
-{
- int k;
- char *pixels;
- IgsCardInfo *igsc;
-
- igsc = (IgsCardInfo *) xalloc (sizeof (IgsCardInfo));
- if (!igsc)
- return FALSE;
-
- memset (igsc, '\0', sizeof (IgsCardInfo));
-
- igsc->frameBuffer = (CARD8 *) KdMapDevice (card->attr.address[0] +
- IGS_FB,
- IGS_MEM);
-
- igsc->vga = (VOL8 *) KdMapDevice (card->attr.address[0] +
- IGS_VGA,
- 64 * 1024);
-
- igsc->cop = (Cop5xxx *) KdMapDevice (card->attr.address[0] +
- IGS_COP_OFFSET,
- sizeof (Cop5xxx));
-
- igsc->copData = (VOL32 *) KdMapDevice (card->attr.address[0] +
- IGS_COP_DATA,
- IGS_COP_DATA_LEN);
-
- igsRegInit (&igsc->igsvga, igsc->vga);
-
- card->driver = igsc;
-
- return TRUE;
-}
-
-Bool
-igsModeSupported (KdScreenInfo *screen,
- const KdMonitorTiming *t)
-{
- /* make sure the clock isn't too fast */
- if (t->clock > IGS_MAX_CLOCK)
- return FALSE;
- /* width must be a multiple of 16 */
- if (t->horizontal & 0xf)
- return FALSE;
- return TRUE;
-}
-
-Bool
-igsModeUsable (KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- int screen_size;
- int pixel_width;
- int byte_width;
- int fb = 0;
-
- screen_size = 0;
- if (screen->fb[fb].depth >= 24)
- {
- screen->fb[fb].depth = 24;
- if (screen->fb[fb].bitsPerPixel != 24)
- screen->fb[fb].bitsPerPixel = 32;
- }
- else if (screen->fb[fb].depth >= 16)
- {
- screen->fb[fb].depth = 16;
- screen->fb[fb].bitsPerPixel = 16;
- }
- else if (screen->fb[fb].depth >= 15)
- {
- screen->fb[fb].depth = 15;
- screen->fb[fb].bitsPerPixel = 16;
- }
- else if (screen->fb[fb].depth >= 12)
- {
- screen->fb[fb].depth = 12;
- screen->fb[fb].bitsPerPixel = 16;
- }
- else
- {
- screen->fb[fb].depth = 8;
- screen->fb[fb].bitsPerPixel = 8;
- }
-
- byte_width = screen->width * (screen->fb[fb].bitsPerPixel >> 3);
- pixel_width = screen->width;
- screen->fb[fb].pixelStride = pixel_width;
- screen->fb[fb].byteStride = byte_width;
- screen_size += byte_width * screen->height;
-
- return TRUE;
-}
-
-Bool
-igsScreenInit (KdScreenInfo *screen)
-{
- IgsCardInfo *igsc = screen->card->driver;
- int fb = 0;
- IgsScreenInfo *igss;
- int screen_size, memory;
- int pattern_size;
- int tile_size;
- int stipple_size;
- int poffset, boffset;
- const KdMonitorTiming *t;
-
- if (!screen->width || !screen->height)
- {
- screen->width = 800;
- screen->height = 600;
- screen->rate = 72;
- }
- if (!screen->fb[0].depth)
- screen->fb[0].depth = 8;
-
- t = KdFindMode (screen, igsModeSupported);
-
- screen->rate = t->rate;
- screen->width = t->horizontal;
- screen->height = t->vertical;
-
- if (!KdTuneMode (screen, igsModeUsable, igsModeSupported))
- {
- return FALSE;
- }
-
- igss = (IgsScreenInfo *) xalloc (sizeof (IgsScreenInfo));
- if (!igss)
- return FALSE;
-
- memset (igss, '\0', sizeof (IgsScreenInfo));
-
- screen_size = screen->fb[fb].byteStride * screen->height;
- memory = IGS_MEM;
- memory -= screen_size;
- if (memory >= 1024)
- {
- igss->cursor_offset = memory - 1024;
-#if BITMAP_BIT_ORDER == MSBFirst
- igss->cursor_base = (CARD8 *) KdMapDevice (card->attr.address[0] +
- igss->cursor_offset,
- 1024);
-#else
- igss->cursor_base = igsc->frameBuffer + igss->cursor_offset;
-#endif
- memory -= 1024;
- }
- else
- igss->cursor_base = 0;
-
- tile_size = IgsTileSize(screen->fb[fb].bitsPerPixel) * IGS_NUM_PATTERN;
- stipple_size = IgsStippleSize(screen->fb[fb].bitsPerPixel) * IGS_NUM_PATTERN;
- pattern_size = tile_size + stipple_size;
- if (memory >= pattern_size)
- {
- boffset = screen_size;
- poffset = boffset * 8 / screen->fb[fb].bitsPerPixel;
- igss->tile.offset = poffset;
- igss->tile.base = igsc->frameBuffer + boffset;
-
- boffset = screen_size + tile_size;
- poffset = boffset * 8 / screen->fb[fb].bitsPerPixel;
- igss->stipple.offset = poffset;
- igss->stipple.base = igsc->frameBuffer + boffset;
-
- memory -= pattern_size;
- }
- else
- {
- igss->tile.base = 0;
- igss->stipple.base = 0;
- }
-
- switch (screen->fb[fb].depth) {
- case 8:
- screen->fb[fb].visuals = ((1 << StaticGray) |
- (1 << GrayScale) |
- (1 << StaticColor) |
- (1 << PseudoColor) |
- (1 << TrueColor) |
- (1 << DirectColor));
- screen->fb[fb].blueMask = 0x00;
- screen->fb[fb].greenMask = 0x00;
- screen->fb[fb].redMask = 0x00;
- break;
- case 15:
- screen->fb[fb].visuals = (1 << TrueColor);
- screen->fb[fb].blueMask = 0x001f;
- screen->fb[fb].greenMask = 0x03e0;
- screen->fb[fb].redMask = 0x7c00;
- break;
- case 16:
- screen->fb[fb].visuals = (1 << TrueColor);
- screen->fb[fb].blueMask = 0x001f;
- screen->fb[fb].greenMask = 0x07e0;
- screen->fb[fb].redMask = 0xf800;
- break;
- case 24:
- screen->fb[fb].visuals = (1 << TrueColor);
- screen->fb[fb].blueMask = 0x0000ff;
- screen->fb[fb].greenMask = 0x00ff00;
- screen->fb[fb].redMask = 0xff0000;
- break;
- }
-
- screen->fb[fb].pixelStride = screen->width;
- screen->fb[fb].byteStride = screen->width * (screen->fb[fb].bitsPerPixel >> 3);
- screen->fb[fb].frameBuffer = igsc->frameBuffer;
- if (!igsc->cop)
- screen->dumb = TRUE;
- screen->driver = igss;
- return TRUE;
-}
-
-Bool
-igsInitScreen(ScreenPtr pScreen)
-{
- return TRUE;
-}
-
-void
-igsPreserve (KdCardInfo *card)
-{
- IgsCardInfo *igsc = card->driver;
- IgsVga *igsvga = &igsc->igsvga;
-
- igsSave (igsvga);
-}
-
-void
-igsSetBlank (IgsVga *igsvga, Bool blank)
-{
- igsSetImm(igsvga, igs_screen_off, blank ? 1 : 0);
-}
-
-void
-igsSetSync (IgsCardInfo *igsc, int hsync, int vsync)
-{
- IgsVga *igsvga = &igsc->igsvga;
-
- igsSet (igsvga, igs_mexhsyn, hsync);
- igsSet (igsvga, igs_mexvsyn, vsync);
- VgaFlush (&igsvga->card);
-}
-
-
-/*
- * Clock synthesis:
- *
- * scale = p ? (2 * p) : 1
- * f_out = f_ref * ((M + 1) / ((N + 1) * scale))
- *
- * Constraints:
- *
- * 1. 115MHz <= f_ref * ((M + 1) / (N + 1)) <= 260 MHz
- * 2. N >= 1
- *
- * Vertical refresh rate = clock / ((hsize + hblank) * (vsize + vblank))
- * Horizontal refresh rate = clock / (hsize + hblank)
- */
-
-/* all in kHz */
-
-void
-igsGetClock (int target, int *Mp, int *Np, int *Pp, int maxM, int maxN, int maxP, int minVco)
-{
- int M, N, P, bestM, bestN;
- int f_vco, f_out;
- int err, abserr, besterr;
-
- /*
- * Compute correct P value to keep VCO in range
- */
- for (P = 0; P <= maxP; P++)
- {
- f_vco = target * IGS_SCALE(P);
- if (f_vco >= minVco)
- break;
- }
-
- /* M = f_out / f_ref * ((N + 1) * IGS_SCALE(P)); */
- besterr = target;
- for (N = 1; N <= maxN; N++)
- {
- M = ((target * (N + 1) * IGS_SCALE(P) + (IGS_CLOCK_REF/2)) + IGS_CLOCK_REF/2) / IGS_CLOCK_REF - 1;
- if (0 <= M && M <= maxM)
- {
- f_out = IGS_CLOCK(M,N,P);
- err = target - f_out;
- if (err < 0)
- err = -err;
- if (err < besterr)
- {
- besterr = err;
- bestM = M;
- bestN = N;
- }
- }
- }
- *Mp = bestM;
- *Np = bestN;
- *Pp = P;
-}
-
-Bool
-igsEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- KdScreenInfo *screen = pScreenPriv->screen;
- IgsCardInfo *igsc = card->driver;
- IgsVga *igsvga = &igsc->igsvga;
- const KdMonitorTiming *t;
- int hactive, hblank, hfp, hbp;
- int vactive, vblank, vfp, vbp;
- int hsize;
- int fb = 0;
- int m, n, r;
- int h_total;
- int h_display_end;
- int h_blank_start;
- int h_blank_end;
- int h_sync_start;
- int h_sync_end;
- int h_screen_off;
- int v_total;
- int v_retrace_start;
- int v_retrace_end;
- int v_display_end;
- int v_blank_start;
- int v_blank_end;
- int offset;
- int num_fetch;
- int m_m, m_n, m_r;
-
-
- igsSetBlank (igsvga, TRUE);
-
- t = KdFindMode (screen, igsModeSupported);
-
- igsGetClock (t->clock, &m, &n, &r, 2047, 255, 7, IGS_MIN_VCO);
-
- /*
- * Set the chip so that 0x400000 is a big-endian frame buffer
- * with the correct byte swapping enabled
- */
- igsSet (igsvga, igs_biga22force, 0);
- igsSet (igsvga, igs_biga22en, 1);
- igsSet (igsvga, igs_biga24en, 1);
- /*
- * Enable 8-bit DACs
- */
- igsSet (igsvga, igs_rampwdn, 0);
- igsSet (igsvga, igs_dac6_8, 1);
- igsSet (igsvga, igs_dacpwdn, 0);
- /*
- * Set overscan to black
- */
- igsSet (igsvga, igs_overscan_red, 0x00);
- igsSet (igsvga, igs_overscan_green, 0x00);
- igsSet (igsvga, igs_overscan_blue, 0x00);
- /*
- * Enable PCI retries
- */
- igsSet (igsvga, igs_iow_retry, 1);
- igsSet (igsvga, igs_mw_retry, 1);
- igsSet (igsvga, igs_mr_retry, 1);
- igsSet (igsvga, igs_pci_burst_write, 1);
- igsSet (igsvga, igs_pci_burst_read, 1);
- /*
- * Set FIFO
- */
- igsSet (igsvga, igs_memgopg, 1);
- igsSet (igsvga, igs_memr2wpg, 0);
- igsSet (igsvga, igs_crtff16, 0);
- igsSet (igsvga, igs_fifomust, 0xff);
- igsSet (igsvga, igs_fifogen, 0xff);
- /*
- * Enable CRT reg access
- */
- igsSetImm (igsvga, igs_ena_vr_access, 1);
- igsSetImm (igsvga, igs_crt_protect, 0);
-
- hfp = t->hfp;
- hbp = t->hbp;
- hblank = t->hblank;
- hactive = t->horizontal;
- offset = screen->fb[0].byteStride;
-
- vfp = t->vfp;
- vbp = t->vbp;
- vblank = t->vblank;
- vactive = t->vertical;
-
- /*
- * Compute character lengths for horizontal timing values
- */
- hactive = screen->width / 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
- offset /= 8;
-
- switch (screen->fb[fb].bitsPerPixel) {
- case 8:
- igsSet (igsvga, igs_overscan_red, pScreen->blackPixel);
- igsSet (igsvga, igs_overscan_green, pScreen->blackPixel);
- igsSet (igsvga, igs_overscan_blue, pScreen->blackPixel);
- igsSet (igsvga, igs_bigswap, IGS_BIGSWAP_8);
- igsSet (igsvga, igs_mode_sel, IGS_MODE_8);
- igsSet (igsvga, igs_ramdacbypass, 0);
- break;
- case 16:
- igsSet (igsvga, igs_bigswap, IGS_BIGSWAP_16);
- igsSet (igsvga, igs_ramdacbypass, 1);
- switch (screen->fb[fb].depth) {
- case 12:
- igsSet (igsvga, igs_mode_sel, IGS_MODE_4444);
- break;
- case 15:
- igsSet (igsvga, igs_mode_sel, IGS_MODE_5551);
- break;
- case 16:
- igsSet (igsvga, igs_mode_sel, IGS_MODE_565);
- break;
- }
- break;
- case 24:
- igsSet (igsvga, igs_ramdacbypass, 1);
- igsSet (igsvga, igs_bigswap, IGS_BIGSWAP_8);
- igsSet (igsvga, igs_mode_sel, IGS_MODE_888);
- break;
- case 32:
- igsSet (igsvga, igs_ramdacbypass, 1);
- igsSet (igsvga, igs_bigswap, IGS_BIGSWAP_32);
- igsSet (igsvga, igs_mode_sel, IGS_MODE_8888);
- break;
- }
-
- /*
- * Compute horizontal register values from timings
- */
- h_total = hactive + hblank - 5;
- h_display_end = hactive - 1;
-
- h_sync_start = hactive + hfp;
- h_sync_end = hactive + hblank - hbp;
- /*
- * pad the blank values narrow a bit and use the border_select to
- * eliminate the remaining border; don't know why, but it doesn't
- * work in the documented fashion
- */
- h_blank_start = hactive - 1;
- h_blank_end = hactive + hblank - 1 - 1;
-
- num_fetch = (t->horizontal * screen->fb[fb].bitsPerPixel / 64) + 1;
-
- v_total = vactive + vblank - 2;
- v_display_end = vactive - 1;
-
- v_blank_start = vactive - 1;
- v_blank_end = v_blank_start + vblank - 1;
-
- v_retrace_start = vactive + vfp;
- v_retrace_end = vactive + vblank - vbp;
-
-#if 0
-#define chk(a,b,c) fprintf (stderr, "%20.20s: BIOS %6d X %6d\n", a, igsGet(igsvga, b), c);
-
- chk("h_total", igs_h_total, h_total);
- chk("h_display_end", igs_h_de_end, h_display_end);
- chk("h_sync_start", igs_h_rstart, h_sync_start);
- chk("h_sync_end", igs_h_rend, h_sync_end&0x1f);
- chk("h_blank_start", igs_h_bstart, h_blank_start);
- chk("h_blank_end", igs_h_bend, h_blank_end&0x3f);
- chk("offset", igs_offset, offset);
- chk("num_fetch", igs_num_fetch, num_fetch);
-
- chk("v_total", igs_v_total, v_total);
- chk("v_display_end", igs_v_de_end, v_display_end);
- chk("v_blank_start", igs_v_bstart, v_blank_start);
- chk("v_blank_end", igs_v_bend, v_blank_end&0xf);
- chk("v_retrace_start", igs_v_rstart, v_retrace_start);
- chk("v_retrace_end", igs_v_rend, v_retrace_end&0xf);
- chk("vclk_m", igs_vclk_m, m);
- chk("vclk_n", igs_vclk_n, n);
- chk("vclk_p", igs_vclk_p, r);
-
- fprintf (stderr, "%20.20s: BIOS %6d X %6d\n", "vclk",
- IGS_CLOCK(igsGet(igsvga,igs_vclk_m),
- igsGet(igsvga,igs_vclk_n),
- igsGet(igsvga,igs_vclk_p)),
- IGS_CLOCK(m,n,r));
-#endif
- igsSet (igsvga, igs_h_total, h_total);
- igsSet (igsvga, igs_h_de_end, h_display_end);
- igsSet (igsvga, igs_h_rstart, h_sync_start);
- igsSet (igsvga, igs_h_rend, h_sync_end);
- igsSet (igsvga, igs_h_bstart, h_blank_start);
- igsSet (igsvga, igs_h_bend, h_blank_end);
- igsSet (igsvga, igs_offset, offset);
- igsSet (igsvga, igs_num_fetch, num_fetch);
-
- igsSet (igsvga, igs_v_total, v_total);
- igsSet (igsvga, igs_v_de_end, v_display_end);
- igsSet (igsvga, igs_v_bstart, v_blank_start);
- igsSet (igsvga, igs_v_bend, v_blank_end&0xf);
- igsSet (igsvga, igs_v_rstart, v_retrace_start);
- igsSet (igsvga, igs_v_rend, v_retrace_end&0xf);
-
- igsSet (igsvga, igs_vclk_m, m);
- igsSet (igsvga, igs_vclk_n, n);
- igsSet (igsvga, igs_vclk_p, r);
- igsSet (igsvga, igs_vfsel, IGS_CLOCK(m, n, 0) >= 180000);
- VgaFlush (&igsvga->card);
-
- igsSetImm (igsvga, igs_frqlat, 0);
- igsSetImm (igsvga, igs_frqlat, 1);
- igsSetImm (igsvga, igs_frqlat, 0);
-
- igsSetBlank (igsvga, FALSE);
-#if 0
-#define dbg(a,b) fprintf(stderr, "%20.20s = 0x%x\n", a, igsGet(igsvga,b))
-
-#include "reg.dbg"
-
- {
- VGA16 reg;
- char buf[128];
-
- for (reg = 0; reg < IGS_NREG; reg++)
- fprintf(stderr, "%20.20s = 0x%02x\n", igsRegName(buf, reg),
- VgaFetch (&igsvga->card, reg));
- }
-#endif
- return TRUE;
-}
-
-Bool
-igsDPMS (ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- IgsCardInfo *igsc = pScreenPriv->card->driver;
- IgsVga *igsvga = &igsc->igsvga;
-
- switch (mode) {
- case KD_DPMS_NORMAL:
- igsSetSync (igsc, 0, 0);
- igsSetBlank (igsvga, FALSE);
- break;
- case KD_DPMS_STANDBY:
- igsSetBlank (igsvga, TRUE);
- igsSetSync (igsc, 1, 0);
- break;
- case KD_DPMS_SUSPEND:
- igsSetBlank (igsvga, TRUE);
- igsSetSync (igsc, 0, 1);
- break;
- case KD_DPMS_POWERDOWN:
- igsSetBlank (igsvga, TRUE);
- igsSetSync (igsc, 1, 1);
- break;
- }
- return TRUE;
-}
-
-void
-igsDisable (ScreenPtr pScreen)
-{
-}
-
-void
-igsRestore (KdCardInfo *card)
-{
- IgsCardInfo *igsc = card->driver;
- IgsVga *igsvga = &igsc->igsvga;
-
- igsReset (igsvga);
-}
-
-void
-igsScreenFini (KdScreenInfo *screen)
-{
- IgsScreenInfo *igss = (IgsScreenInfo *) screen->driver;
-
-#if BITMAP_BIT_ORDER == MSBFirst
- if (igss->cursor_base)
- KdUnmapDevice ((void *) igss->cursor_base, 1024);
-#endif
- xfree (igss);
- screen->driver = 0;
-}
-
-void
-igsCardFini (KdCardInfo *card)
-{
- IgsCardInfo *igsc = card->driver;
-
- if (igsc->copData)
- KdUnmapDevice ((void *) igsc->copData, IGS_COP_DATA_LEN);
- if (igsc->cop)
- KdUnmapDevice ((void *) igsc->cop, sizeof (Cop5xxx));
- if (igsc->vga)
- KdUnmapDevice ((void *) igsc->vga, 64 * 1024);
- if (igsc->frameBuffer)
- KdUnmapDevice (igsc->frameBuffer, IGS_MEM);
- xfree (igsc);
- card->driver = 0;
-}
-
-KdCardFuncs igsFuncs = {
- igsCardInit, /* cardinit */
- igsScreenInit, /* scrinit */
- igsInitScreen,
- igsPreserve, /* preserve */
- igsEnable, /* enable */
- igsDPMS, /* dpms */
- igsDisable, /* disable */
- igsRestore, /* restore */
- igsScreenFini, /* scrfini */
- igsCardFini, /* cardfini */
-
- igsCursorInit, /* initCursor */
- igsCursorEnable, /* enableCursor */
- igsCursorDisable, /* disableCursor */
- igsCursorFini, /* finiCursor */
- 0, /* recolorCursor */
-
- igsDrawInit, /* initAccel */
- igsDrawEnable, /* enableAccel */
- igsDrawSync, /* drawSync */
- igsDrawDisable, /* disableAccel */
- igsDrawFini, /* finiAccel */
-
- igsGetColors, /* getColors */
- igsPutColors, /* putColors */
-};
diff --git a/hw/kdrive/igs/igs.h b/hw/kdrive/igs/igs.h
deleted file mode 100644
index 9f0336b7d..000000000
--- a/hw/kdrive/igs/igs.h
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Copyright © 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifndef _IGS_H_
-#define _IGS_H_
-
-#include "kdrive.h"
-#include "igsreg.h"
-
-extern KdCardFuncs igsFuncs;
-
-/*
- * FB 0x00000000
- * VGA 0x00800000
- * Blt window 0x008a0000
- * Coprocessor 0x008bf000
- */
-
-#if BITMAP_BIT_ORDER == MSBFirst
-#define IGS_FB 0x00400000
-#else
-#define IGS_FB 0x00000000
-#endif
-#define IGS_VGA 0x00800000
-#define IGS_COP_DATA 0x008a0000
-#define IGS_COP_DATA_LEN 0x00010000
-#define IGS_COP_OFFSET 0x008bf000
-/* give audio 1/2 meg at end */
-#if 1
-#define IGS_MEM ((4096-512)*1024)
-#else
-#define IGS_MEM ((4096)*1024)
-#endif
-
-#define IGS_CLOCK_REF 24576 /* KHz */
-
-#define IGS_SCALE(p) ((p) ? (2 * (p)) : 1)
-
-#define IGS_CLOCK(m,n,p) ((IGS_CLOCK_REF * ((m) + 1)) / (((n) + 1) * IGS_SCALE(p)))
-
-#define IGS_MAX_CLOCK 260000
-
-#define IGS_MIN_VCO 115000
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-typedef struct _Cop5xxx {
- VOL8 pad000[0x10]; /* 0x000 */
-
- VOL32 control; /* 0x010 */
-#define IGS_CONTROL_HBLTW_RDYZ 0x0100
-#define IGS_CONTROL_MALLWBEPTZ 0x0200
-#define IGS_CONTROL_CMDFF 0x0400
-#define IGS_CONTROL_SOP 0x0800
-#define IGS_CONTROL_OPS 0x1000
-#define IGS_CONTROL_TER 0x2000
-#define IGS_CONTROL_HBACKZ 0x4000
-#define IGS_CONTROL_BUSY 0x8000
-
- VOL8 pad014[0x04]; /* 0x014 */
-
- VOL32 src1_stride; /* 0x018 */
-
- VOL32 format; /* 0x01c */
-
-#define IGS_FORMAT_8BPP 0
-#define IGS_FORMAT_16BPP 1
-#define IGS_FORMAT_24BPP 2
-#define IGS_FORMAT_32BPP 3
-
- VOL32 bres_error; /* 0x020 */
- VOL32 bres_k1; /* 0x024 */
- VOL32 bres_k2; /* 0x028 */
- VOL8 pad02c[0x1c]; /* 0x02c */
-
- VOL32 mix; /* 0x048 */
-#define IGS_MIX_FG 0x00ff
-#define IGS_MIX_BG 0xff00
-#define IGS_MAKE_MIX(fg,bg) ((fg) | ((bg) << 8))
-
-#define IGS_MIX_ZERO 0x0
-#define IGS_MIX_SRC_AND_DST 0x1
-#define IGS_MIX_SRC_AND_NOT_DST 0x2
-#define IGS_MIX_SRC 0x3
-#define IGS_MIX_NOT_SRC_AND_DST 0x4
-#define IGS_MIX_DST 0x5
-#define IGS_MIX_SRC_XOR_DST 0x6
-#define IGS_MIX_SRC_OR_DST 0x7
-#define IGS_MIX_NOT_SRC_AND_NOT_DST 0x8
-#define IGS_MIX_SRC_XOR_NOT_DST 0x9
-#define IGS_MIX_NOT_DST 0xa
-#define IGS_MIX_SRC_OR_NOT_DST 0xb
-#define IGS_MIX_NOT_SRC 0xc
-#define IGS_MIX_NOT_SRC_OR_DST 0xd
-#define IGS_MIX_NOT_SRC_OR_NOT_DST 0xe
-#define IGS_MIX_ONE 0xf
-
- VOL32 colorComp; /* 0x04c */
- VOL32 planemask; /* 0x050 */
-
- VOL8 pad054[0x4]; /* 0x054 */
-
- VOL32 fg; /* 0x058 */
- VOL32 bg; /* 0x05c */
- VOL32 dim; /* 0x060 */
-#define IGS_MAKE_DIM(w,h) ((w) | ((h) << 16))
- VOL8 pad5[0x0c]; /* 0x064 */
-
- VOL32 src1_base_address; /* 0x070 */
- VOL8 pad074[0x04]; /* 0x074 */
-
- VOL32 rotate; /* 0x078 */
-#define IGS_MAKE_ROTATE(x,y) ((x) | ((y) << 16))
- VOL32 operation; /* 0x07c */
-
-/* OCT[2:0] */
-#define IGS_DRAW_X_MAJOR 0x00000000
-#define IGS_DRAW_Y_MAJOR 0x00000001
-#define IGS_DRAW_T_B 0x00000000
-#define IGS_DRAW_B_T 0x00000002
-#define IGS_DRAW_L_R 0x00000000
-#define IGS_DRAW_R_L 0x00000004
-
-/* Draw_Mode[1:0] */
-#define IGS_DRAW_ALL 0x00000000
-#define IGS_DRAW_NOT_FIRST 0x00000010
-#define IGS_DRAW_NOT_LAST 0x00000020
-#define IGS_DRAW_NOT_FIRST_LAST 0x00000030
-
-/* TRPS[1:0] */
-#define IGS_TRANS_SRC1 0x00000000
-#define IGS_TRANS_SRC2 0x00000100
-#define IGS_TRANS_DST 0x00000200
-/* TRPS2 Transparent Invert */
-#define IGS_TRANS_INVERT 0x00000400
-/* TRPS3, Transparent Enable */
-#define IGS_TRANS_ENABLE 0x00000800
-
-/* PPS[3:0], Pattern Pixel Select */
-#define IGS_PIXEL_TEXT_OPAQUE 0x00001000
-#define IGS_PIXEL_STIP_OPAQUE 0x00002000
-#define IGS_PIXEL_LINE_OPAQUE 0x00003000
-#define IGS_PIXEL_TEXT_TRANS 0x00005000
-#define IGS_PIXEL_STIP_TRANS 0x00006000
-#define IGS_PIXEL_LINE_TRANS 0x00007000
-#define IGS_PIXEL_FG 0x00008000
-#define IGS_PIXEL_TILE 0x00009000
-#define IGS_PIXEL_TILE_OPAQUE 0x0000d000
-
-/* HostBltEnable[1:0] */
-#define IGS_HBLT_DISABLE 0x00000000
-#define IGS_HBLT_READ 0x00010000
-#define IGS_HBLT_WRITE_1 0x00020000
-#define IGS_HBLT_WRITE_2 0x00030000
-
-/* Src2MapSelect[2:0], Src2 map select mode */
-#define IGS_SRC2_NORMAL 0x00000000
-#define IGS_SRC2_MONO_OPAQUE 0x00100000
-#define IGS_SRC2_FG 0x00200000
-#define IGS_SRC2_MONO_TRANS 0x00500000
-
-/* StepFunction[3:0], Step function select */
-#define IGS_STEP_DRAW_AND_STEP 0x04000000
-#define IGS_STEP_LINE_DRAW 0x05000000
-#define IGS_STEP_PXBLT 0x08000000
-#define IGS_STEP_INVERT_PXBLT 0x09000000
-#define IGS_STEP_TERNARY_PXBLT 0x0b000000
-
-/* FGS */
-#define IGS_FGS_FG 0x00000000
-#define IGS_FGS_SRC 0x20000000
-
-/* BGS */
-#define IGS_BGS_BG 0x00000000
-#define IGS_BGS_SRC 0x80000000
- VOL8 pad080[0x90]; /* 0x080 */
-
- VOL32 debug_control; /* 0x110 */
- VOL8 pad114[0x04]; /* 0x114 */
-
- VOL32 src2_stride; /* 0x118 */
- VOL8 pad11c[0x14]; /* 0x11c */
-
- VOL32 extension; /* 0x130 */
-
-#define IGS_BURST_ENABLE 0x01
-#define IGS_STYLE_LINE 0x02
-#define IGS_ADDITIONAL_WAIT 0x04
-#define IGS_BLOCK_COP_REG 0x08
-#define IGS_TURBO_MONO 0x10
-#define IGS_SELECT_SAMPLE 0x40
-#define IGS_MDSBL_RD_B_WR 0x80
-#define IGS_WRMRSTZ 0x100
-#define IGS_TEST_MTST 0x200
-
- VOL32 style_line; /* 0x134 */
-#define IGS_MAKE_STILE_LINE(roll_over,inc,pattern,accumulator) \
- ((roll_over) | \
- ((style_line_inc) << 8) | \
- ((style_line_patern) << 16) | \
- ((style_line_accumullator) << 24))
- VOL32 style_line_pattern_index; /* 0x138 */
-
- VOL32 mono_burst_total; /* 0x13c */
- VOL8 pad140[0x10]; /* 0x140 */
-
- VOL32 pat_x_rotate; /* 0x150 */
- VOL8 pad154[0x1c]; /* 0x154 */
-
- VOL32 src1_start; /* 0x170 */
- VOL32 src2_start; /* 0x174 */
- VOL32 dst_start; /* 0x178 */
- VOL8 pad17c[0x9c]; /* 0x17c */
-
- VOL32 dst_stride; /* 0x218 */
-} Cop5xxx;
-
-typedef struct _igsCardInfo {
- Cop5xxx *cop;
- VOL8 *vga;
- VOL32 *copData;
- CARD8 *frameBuffer;
- IgsVga igsvga;
-} IgsCardInfo;
-
-#define getIgsCardInfo(kd) ((IgsCardInfo *) ((kd)->card->driver))
-#define igsCardInfo(kd) IgsCardInfo *igsc = getIgsCardInfo(kd)
-
-typedef struct _igsCursor {
- int width, height;
- int xhot, yhot;
- Bool has_cursor;
- CursorPtr pCursor;
- Pixel source, mask;
-} IgsCursor;
-
-#define IGS_CURSOR_WIDTH 64
-#define IGS_CURSOR_HEIGHT 64
-
-typedef struct _igsPattern {
- INT32 xrot, yrot;
- CARD32 serial_number;
- CARD8 *base;
- CARD32 offset;
-} IgsPattern;
-
-#define IGS_NUM_PATTERN 8
-#define IGS_PATTERN_WIDTH 8
-#define IGS_PATTERN_HEIGHT 8
-
-typedef struct _igsPatternCache {
- CARD8 *base;
- CARD32 offset;
- IgsPattern pattern[IGS_NUM_PATTERN];
- int next;
-} IgsPatternCache;
-
-typedef struct _igsScreenInfo {
- CARD8 *cursor_base;
- CARD32 cursor_offset;
- IgsCursor cursor;
- IgsPatternCache tile;
- IgsPatternCache stipple;
-} IgsScreenInfo;
-
-#define IgsTileSize(bpp) (IGS_PATTERN_WIDTH*(bpp)/8*IGS_PATTERN_HEIGHT)
-#define IgsStippleSize(bpp) (IGS_PATTERN_WIDTH/8*IGS_PATTERN_HEIGHT)
-
-#define getIgsScreenInfo(kd) ((IgsScreenInfo *) ((kd)->screen->driver))
-#define igsScreenInfo(kd) IgsScreenInfo *igss = getIgsScreenInfo(kd)
-
-Bool
-igsDrawInit (ScreenPtr pScreen);
-
-void
-igsDrawEnable (ScreenPtr pScreen);
-
-void
-igsDrawDisable (ScreenPtr pScreen);
-
-void
-igsDrawSync (ScreenPtr pScreen);
-
-void
-igsDrawFini (ScreenPtr pScreen);
-
-void
-igsGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs);
-
-void
-igsPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs);
-
-Bool
-igsCursorInit (ScreenPtr pScreen);
-
-void
-igsCursorEnable (ScreenPtr pScreen);
-
-void
-igsCursorDisable (ScreenPtr pScreen);
-
-void
-igsCursorFini (ScreenPtr pScreen);
-
-#endif /* _IGS_H_ */
diff --git a/hw/kdrive/igs/igscmap.c b/hw/kdrive/igs/igscmap.c
deleted file mode 100644
index dff028e7d..000000000
--- a/hw/kdrive/igs/igscmap.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "igs.h"
-
-#define IGS_DAC_SHIFT 8
-void
-igsGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- igsCardInfo(pScreenPriv);
- IgsVga *igsvga = &igsc->igsvga;
-
- while (ndef--)
- {
- igsSetImm (igsvga, igs_dac_read_index, pdefs->pixel);
- pdefs->red = igsGetImm (igsvga, igs_dac_data) << IGS_DAC_SHIFT;
- pdefs->green = igsGetImm (igsvga, igs_dac_data) << IGS_DAC_SHIFT;
- pdefs->blue = igsGetImm (igsvga, igs_dac_data) << IGS_DAC_SHIFT;
- pdefs++;
- }
-}
-
-void
-igsPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- igsCardInfo(pScreenPriv);
- IgsVga *igsvga = &igsc->igsvga;
-
- while (ndef--)
- {
- igsSetImm (igsvga, igs_dac_write_index, pdefs->pixel);
- igsSetImm (igsvga, igs_dac_data, pdefs->red >> IGS_DAC_SHIFT);
- igsSetImm (igsvga, igs_dac_data, pdefs->green >> IGS_DAC_SHIFT);
- igsSetImm (igsvga, igs_dac_data, pdefs->blue >> IGS_DAC_SHIFT);
- pdefs++;
- }
-}
-
diff --git a/hw/kdrive/igs/igscurs.c b/hw/kdrive/igs/igscurs.c
deleted file mode 100644
index b8bd50956..000000000
--- a/hw/kdrive/igs/igscurs.c
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "igs.h"
-#include "cursorstr.h"
-
-#define SetupCursor(s) KdScreenPriv(s); \
- igsCardInfo(pScreenPriv); \
- igsScreenInfo(pScreenPriv); \
- IgsCursor *pCurPriv = &igss->cursor; \
- IgsVga *igsvga = &igsc->igsvga
-
-static void
-_igsMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CARD8 xoff, yoff;
-
- x -= pCurPriv->xhot;
- xoff = 0;
- if (x < 0)
- {
- xoff = -x;
- x = 0;
- }
- y -= pCurPriv->yhot;
- yoff = 0;
- if (y < 0)
- {
- yoff = -y;
- y = 0;
- }
-
- igsSet (igsvga, igs_sprite_x, x);
- igsSet (igsvga, igs_sprite_preset_x, xoff);
- igsSet (igsvga, igs_sprite_y, y);
- igsSet (igsvga, igs_sprite_preset_y, yoff);
-}
-
-static void
-igsMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor (pScreen);
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- _igsMoveCursor (pScreen, x, y);
- VgaFlush (&igsvga->card);
-}
-
-
-static void
-igsSetCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
-
- igsSetImm (igsvga, igs_cursor_write_index, 0);
- igsSetImm (igsvga, igs_cursor_data, pCursor->backRed >> 8);
- igsSetImm (igsvga, igs_cursor_data, pCursor->backGreen >> 8);
- igsSetImm (igsvga, igs_cursor_data, pCursor->backBlue >> 8);
- igsSetImm (igsvga, igs_cursor_write_index, 1);
- igsSetImm (igsvga, igs_cursor_data, pCursor->foreRed >> 8);
- igsSetImm (igsvga, igs_cursor_data, pCursor->foreGreen >> 8);
- igsSetImm (igsvga, igs_cursor_data, pCursor->foreBlue >> 8);
-}
-
-#if BITMAP_BIT_ORDER == MSBFirst
-#define IgsAdjustCursor(v) { \
- v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \
- v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \
- v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \
- v = ((v & 0x00ff00ff) << 8) | ((v >> 8) & 0x00ff00ff); \
- v = ((v & 0x0000ffff) <<16) | ((v >>16) & 0x0000ffff); \
-}
-#else
-#define IgsAdjustCursor(v)
-#endif
-
-#define ExplodeBits2(v) (((v) & 1) | (((v) & 2) << 1))
-#define ExplodeBits4(v) ((ExplodeBits2((v) >> 2) << 4) | \
- (ExplodeBits2((v) & 0x3)))
-#define ExplodeBits8(v) ((ExplodeBits4((v) >> 4) << 8) | \
- (ExplodeBits4((v) & 0xf)))
-#define ExplodeBits16(v) ((ExplodeBits8((v) >> 8) << 16) | \
- (ExplodeBits8((v) & 0xff)))
-static void
-igsLoadCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- int w, h;
- CARD32 *ram, *msk, *mskLine, *src, *srcLine;
- int i, j;
- int cursor_address;
- int lwsrc;
- unsigned char ramdac_control_;
- CARD32 offset;
- CARD32 b0, b1;
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- /*
- * Stick new image into cursor memory
- */
- ram = (CARD32 *) igss->cursor_base;
- mskLine = (CARD32 *) bits->mask;
- srcLine = (CARD32 *) bits->source;
-
- h = bits->height;
- if (h > IGS_CURSOR_HEIGHT)
- h = IGS_CURSOR_HEIGHT;
-
- lwsrc = BitmapBytePad(bits->width) / 4; /* words per line */
-
- for (i = 0; i < IGS_CURSOR_HEIGHT; i++) {
- msk = mskLine;
- src = srcLine;
- mskLine += lwsrc;
- srcLine += lwsrc;
- for (j = 0; j < IGS_CURSOR_WIDTH / 32; j++) {
-
- CARD32 m, s;
-
- if (i < h && j < lwsrc)
- {
- m = *msk++;
- s = *src++;
- IgsAdjustCursor(m);
- IgsAdjustCursor(s);
- }
- else
- {
- m = 0;
- s = 0;
- }
- s &= m;
- m = ~m;
- b0 = ExplodeBits16(s&0xffff) | (ExplodeBits16(m&0xffff)<<1);
- b1 = ExplodeBits16(s>>16) | (ExplodeBits16(m>>16)<<1);
- *ram++ = b0;
- *ram++ = b1;
- }
- }
-
- /* Set new color */
- igsSetCursorColors (pScreen);
-
- /* Set address for cursor bits */
- offset = igss->cursor_offset;
- offset >>= 10;
- igsSet (igsvga, igs_sprite_addr, offset);
-
- /* Assume TV interpolation off */
- igsSet (igsvga, igs_hcshf, 3);
- /* Enable the cursor */
- igsSet (igsvga, igs_sprite_visible, 1);
- igsSet (igsvga, igs_sprite_64x64, 1);
- /* Move to new position */
- _igsMoveCursor (pScreen, x, y);
-
- VgaFlush (&igsvga->card);
-}
-
-static void
-igsUnloadCursor (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- /* Disable cursor */
- igsSet (igsvga, igs_sprite_visible, 0);
- VgaFlush (&igsvga->card);
-}
-
-static Bool
-igsRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- SetupCursor(pScreen);
-
- if (!pScreenPriv->enabled)
- return TRUE;
-
- /* miRecolorCursor does this */
- if (pCurPriv->pCursor == pCursor)
- {
- if (pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- igsLoadCursor (pScreen, x, y);
- }
- }
- return TRUE;
-}
-
-static Bool
-igsUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- return TRUE;
-}
-
-static void
-igsSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
-{
- SetupCursor(pScreen);
-
- pCurPriv->pCursor = pCursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCursor)
- igsLoadCursor (pScreen, x, y);
- else
- igsUnloadCursor (pScreen);
-}
-
-miPointerSpriteFuncRec igsPointerSpriteFuncs = {
- igsRealizeCursor,
- igsUnrealizeCursor,
- igsSetCursor,
- igsMoveCursor,
-};
-
-static void
-igsQueryBestSize (int class,
- unsigned short *pwidth, unsigned short *pheight,
- ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- switch (class)
- {
- case CursorShape:
- if (*pwidth > pCurPriv->width)
- *pwidth = pCurPriv->width;
- if (*pheight > pCurPriv->height)
- *pheight = pCurPriv->height;
- if (*pwidth > pScreen->width)
- *pwidth = pScreen->width;
- if (*pheight > pScreen->height)
- *pheight = pScreen->height;
- break;
- default:
- fbQueryBestSize (class, pwidth, pheight, pScreen);
- break;
- }
-}
-
-Bool
-igsCursorInit (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!igss->cursor_base)
- {
- pCurPriv->has_cursor = FALSE;
- return FALSE;
- }
-
- pCurPriv->width = IGS_CURSOR_WIDTH;
- pCurPriv->height= IGS_CURSOR_HEIGHT;
- pScreen->QueryBestSize = igsQueryBestSize;
- miPointerInitialize (pScreen,
- &igsPointerSpriteFuncs,
- &kdPointerScreenFuncs,
- FALSE);
- pCurPriv->has_cursor = TRUE;
- pCurPriv->pCursor = NULL;
- return TRUE;
-}
-
-void
-igsCursorEnable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- igsLoadCursor (pScreen, x, y);
- }
- else
- igsUnloadCursor (pScreen);
- }
-}
-
-void
-igsCursorDisable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- igsUnloadCursor (pScreen);
- }
- }
-}
-
-void
-igsCursorFini (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- pCurPriv->pCursor = NULL;
-}
diff --git a/hw/kdrive/igs/igsdraw.c b/hw/kdrive/igs/igsdraw.c
deleted file mode 100644
index 677436be5..000000000
--- a/hw/kdrive/igs/igsdraw.c
+++ /dev/null
@@ -1,1463 +0,0 @@
-/*
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "igs.h"
-#include "igsdraw.h"
-
-#include "Xmd.h"
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "fontstruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-
-CARD8 igsPatRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0xa0, /* src AND dst */
- /* GXandReverse */ 0x50, /* src AND NOT dst */
- /* GXcopy */ 0xf0, /* src */
- /* GXandInverted*/ 0x0a, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x5a, /* src XOR dst */
- /* GXor */ 0xfa, /* src OR dst */
- /* GXnor */ 0x05, /* NOT src AND NOT dst */
- /* GXequiv */ 0xa5, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xf5, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x0f, /* NOT src */
- /* GXorInverted */ 0xaf, /* NOT src OR dst */
- /* GXnand */ 0x5f, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-/*
- * Handle pixel transfers
- */
-
-#define BURST
-#ifdef BURST
-#define PixTransDeclare VOL32 *pix_trans_base = igsc->copData,\
- *pix_trans = pix_trans_base
-#define PixTransStart(n) if (pix_trans + (n) > pix_trans_base + 16384) pix_trans = pix_trans_base
-#define PixTransStore(t) *pix_trans++ = (t)
-#else
-#define PixTransDeclare VOL32 *pix_trans = igsc->copData
-#define PixTransStart(n)
-#define PixTransStore(t) *pix_trans = (t)
-#endif
-
-static IgsPattern *
-igsSetPattern (ScreenPtr pScreen,
- PixmapPtr pPixmap,
- CARD8 fillStyle,
- INT32 xrot,
- INT32 yrot)
-{
- KdScreenPriv(pScreen);
- igsCardInfo(pScreenPriv);
- igsScreenInfo(pScreenPriv);
- int i;
- IgsPatternCache *c;
- IgsPattern *p;
-
- if (fillStyle == FillTiled)
- c = &igss->tile;
- else
- c = &igss->stipple;
- for (i = 0; i < IGS_NUM_PATTERN; i++)
- {
- p = &c->pattern[i];
- if (p->serial_number == pPixmap->drawable.serialNumber &&
- p->xrot == xrot &&
- p->yrot == yrot)
- {
- return p;
- }
- }
- p = &c->pattern[c->next];
- if (++c->next == IGS_NUM_PATTERN)
- c->next = 0;
- p->serial_number = pPixmap->drawable.serialNumber;
- p->xrot = xrot;
- p->yrot = yrot;
-
- if (fillStyle != FillTiled)
- {
- FbStip *pix;
- FbStride pixStride;
- int pixBpp;
- int pixXoff, pixYoff;
- CARD8 tmp[8];
- CARD32 *pat;
- int stipX, stipY;
- int y;
- FbStip bits;
-
- fbGetStipDrawable (&pPixmap->drawable, pix, pixStride, pixBpp, pixXoff, pixYoff);
-
- modulus (-yrot - pixYoff, pPixmap->drawable.height, stipY);
- modulus (-xrot - pixXoff, FB_UNIT, stipX);
-
- pat = (CARD32 *) p->base;
-
- for (y = 0; y < 8; y++)
- {
- bits = pix[stipY * pixStride];
- FbRotLeft (bits, stipX);
- tmp[y] = (CARD8) bits;
- stipY++;
- if (stipY == pPixmap->drawable.height)
- stipY = 0;
- }
- for (i = 0; i < 2; i++)
- {
- bits = (tmp[i*4+0] |
- (tmp[i*4+1] << 8) |
- (tmp[i*4+2] << 16) |
- (tmp[i*4+3] << 24));
- IgsAdjustBits32 (bits);
- *pat++ = bits;
- }
- }
- else
- {
- FbBits *pix;
- FbStride pixStride;
- int pixBpp;
- FbBits *pat;
- FbStride patStride;
- int patBpp;
- int patXoff, patYoff;
-
- fbGetDrawable (&pPixmap->drawable, pix, pixStride, pixBpp, patXoff, patYoff);
-
- pat = (FbBits *) p->base;
- patBpp = pixBpp;
- patStride = (patBpp * IGS_PATTERN_WIDTH) / (8 * sizeof (FbBits));
-
- fbTile (pat, patStride, 0,
- patBpp * IGS_PATTERN_WIDTH, IGS_PATTERN_HEIGHT,
-
- pix, pixStride,
- pPixmap->drawable.width * pixBpp,
- pPixmap->drawable.height,
- GXcopy, FB_ALLONES, pixBpp,
- (xrot - patXoff) * pixBpp, yrot - patYoff);
- }
- return p;
-}
-
-void
-igsFillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox,
- unsigned long pixel, int alu, unsigned long planemask)
-{
- SetupIgs(pDrawable->pScreen);
- CARD32 cmd;
-
- _igsSetSolidRect(cop,alu,planemask,pixel,cmd);
- while (nBox--)
- {
- _igsRect(cop,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd);
- pBox++;
- }
- KdMarkSync (pDrawable->pScreen);
-}
-
-void
-igsFillBoxTiled (DrawablePtr pDrawable, int nBox, BoxPtr pBox,
- PixmapPtr pPixmap, int xrot, int yrot, int alu)
-{
- SetupIgs(pDrawable->pScreen);
- CARD32 cmd;
- IgsPattern *p = igsSetPattern (pDrawable->pScreen,
- pPixmap,
- FillTiled,
- xrot, yrot);
-
- _igsSetTiledRect(cop,alu,planemask,p->offset,cmd);
- while (nBox--)
- {
- _igsPatRect(cop,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd);
- pBox++;
- }
- KdMarkSync (pDrawable->pScreen);
-}
-
-void
-igsFillBoxStippled (DrawablePtr pDrawable, GCPtr pGC,
- int nBox, BoxPtr pBox)
-{
- SetupIgs(pDrawable->pScreen);
- CARD32 cmd;
- int xrot = pGC->patOrg.x + pDrawable->x;
- int yrot = pGC->patOrg.y + pDrawable->y;
- IgsPattern *p = igsSetPattern (pDrawable->pScreen,
- pGC->stipple,
- pGC->fillStyle,
- xrot, yrot);
- if (pGC->fillStyle == FillStippled)
- {
- _igsSetStippledRect (cop,pGC->alu,planemask,pGC->fgPixel,p->offset,cmd);
- }
- else
- {
- _igsSetOpaqueStippledRect (cop,pGC->alu,planemask,
- pGC->fgPixel,pGC->bgPixel,p->offset,cmd);
- }
- while (nBox--)
- {
- _igsPatRect(cop,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd);
- pBox++;
- }
- KdMarkSync (pDrawable->pScreen);
-}
-
-
-void
-igsStipple (ScreenPtr pScreen,
- CARD32 cmd,
- FbStip *psrcBase,
- FbStride widthSrc,
- int srcx,
- int srcy,
- int dstx,
- int dsty,
- int width,
- int height)
-{
- SetupIgs(pScreen);
- FbStip *psrcLine, *psrc;
- FbStride widthRest;
- FbStip bits, tmp, lastTmp;
- int leftShift, rightShift;
- int nl, nlMiddle;
- int r;
- PixTransDeclare;
-
- /* Compute blt address and parameters */
- psrc = psrcBase + srcy * widthSrc + (srcx >> 5);
- nlMiddle = (width + 31) >> 5;
- leftShift = srcx & 0x1f;
- rightShift = 32 - leftShift;
- widthRest = widthSrc - nlMiddle;
-
- _igsPlaneBlt(cop,dstx,dsty,width,height,cmd);
-
- if (leftShift == 0)
- {
- while (height--)
- {
- nl = nlMiddle;
- PixTransStart(nl);
- while (nl--)
- {
- tmp = *psrc++;
- IgsAdjustBits32 (tmp);
- PixTransStore (tmp);
- }
- psrc += widthRest;
- }
- }
- else
- {
- widthRest--;
- while (height--)
- {
- bits = *psrc++;
- nl = nlMiddle;
- PixTransStart(nl);
- while (nl--)
- {
- tmp = FbStipLeft(bits, leftShift);
- bits = *psrc++;
- tmp |= FbStipRight(bits, rightShift);
- IgsAdjustBits32(tmp);
- PixTransStore (tmp);
- }
- psrc += widthRest;
- }
- }
-}
-
-void
-igsCopyNtoN (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- GCPtr pGC,
- BoxPtr pbox,
- int nbox,
- int dx,
- int dy,
- Bool reverse,
- Bool upsidedown,
- Pixel bitplane,
- void *closure)
-{
- SetupIgs(pDstDrawable->pScreen);
- int srcX, srcY, dstX, dstY;
- int w, h;
- CARD32 flags;
- CARD32 cmd;
- CARD8 alu;
-
- if (pGC)
- {
- alu = pGC->alu;
- if (sourceInvarient (pGC->alu))
- {
- igsFillBoxSolid (pDstDrawable, nbox, pbox, 0, pGC->alu, pGC->planemask);
- return;
- }
- }
- else
- alu = GXcopy;
-
- _igsSetBlt(cop,alu,pGC->planemask,reverse,upsidedown,cmd);
- while (nbox--)
- {
- w = pbox->x2 - pbox->x1;
- h = pbox->y2 - pbox->y1;
- if (reverse)
- dstX = pbox->x2 - 1;
- else
- dstX = pbox->x1;
- srcX = dstX + dx;
-
- if (upsidedown)
- dstY = pbox->y2 - 1;
- else
- dstY = pbox->y1;
-
- srcY = dstY + dy;
-
- _igsBlt (cop, srcX, srcY, dstX, dstY, w, h, cmd);
- pbox++;
- }
- KdMarkSync (pDstDrawable->pScreen);
-}
-
-RegionPtr
-igsCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
- int srcx, int srcy, int width, int height, int dstx, int dsty)
-{
- KdScreenPriv(pDstDrawable->pScreen);
- FbBits depthMask;
-
- depthMask = FbFullMask (pDstDrawable->depth);
- if ((pGC->planemask & depthMask) == depthMask &&
- pSrcDrawable->type == DRAWABLE_WINDOW &&
- pDstDrawable->type == DRAWABLE_WINDOW)
- {
- return fbDoCopy (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, igsCopyNtoN, 0, 0);
- }
- return KdCheckCopyArea (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height, dstx, dsty);
-}
-
-typedef struct _igs1toNargs {
- unsigned long copyPlaneFG, copyPlaneBG;
- Bool opaque;
-} igs1toNargs;
-
-void
-igsCopy1toN (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- GCPtr pGC,
- BoxPtr pbox,
- int nbox,
- int dx,
- int dy,
- Bool reverse,
- Bool upsidedown,
- Pixel bitplane,
- void *closure)
-{
- SetupIgs(pDstDrawable->pScreen);
-
- igs1toNargs *args = closure;
- int dstx, dsty;
- FbStip *psrcBase;
- FbStride widthSrc;
- int srcBpp;
- int srcXoff, srcYoff;
- CARD32 cmd;
-
- if (args->opaque && sourceInvarient (pGC->alu))
- {
- igsFillBoxSolid (pDstDrawable, nbox, pbox,
- pGC->bgPixel, pGC->alu, pGC->planemask);
- return;
- }
-
- fbGetStipDrawable (pSrcDrawable, psrcBase, widthSrc, srcBpp, srcXoff, srcYoff);
-
- if (args->opaque)
- {
- _igsSetOpaquePlaneBlt (cop, pGC->alu, pGC->planemask, args->copyPlaneFG,
- args->copyPlaneBG, cmd);
- }
- else
- {
- _igsSetTransparentPlaneBlt (cop, pGC->alu, pGC->planemask,
- args->copyPlaneFG, cmd);
- }
-
- while (nbox--)
- {
- dstx = pbox->x1;
- dsty = pbox->y1;
-
- igsStipple (pDstDrawable->pScreen, cmd,
- psrcBase, widthSrc,
- dstx + dx - srcXoff, dsty + dy - srcYoff,
- dstx, dsty,
- pbox->x2 - dstx, pbox->y2 - dsty);
- pbox++;
- }
- KdMarkSync (pDstDrawable->pScreen);
-}
-
-RegionPtr
-igsCopyPlane (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- GCPtr pGC,
- int srcx,
- int srcy,
- int width,
- int height,
- int dstx,
- int dsty,
- unsigned long bitPlane)
-{
- RegionPtr ret;
- igs1toNargs args;
- FbBits depthMask;
-
- depthMask = FbFullMask (pDstDrawable->depth);
- if ((pGC->planemask & depthMask) == depthMask &&
- pDstDrawable->type == DRAWABLE_WINDOW &&
- pSrcDrawable->depth == 1)
- {
- args.copyPlaneFG = pGC->fgPixel;
- args.copyPlaneBG = pGC->bgPixel;
- args.opaque = TRUE;
- return fbDoCopy (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, igsCopy1toN, bitPlane, &args);
- }
- return KdCheckCopyPlane(pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, bitPlane);
-}
-
-#if 0
-/* would you believe this is slower than fb? */
-void
-igsPushPixels (GCPtr pGC,
- PixmapPtr pBitmap,
- DrawablePtr pDrawable,
- int w,
- int h,
- int x,
- int y)
-{
- igs1toNargs args;
- FbBits depthMask;
-
- depthMask = FbFullMask (pDstDrawable->depth);
- if ((pGC->planemask & depthMask) == depthMask &&
- pDrawable->type == DRAWABLE_WINDOW &&
- pGC->fillStyle == FillSolid)
- {
- args.opaque = FALSE;
- args.copyPlaneFG = pGC->fgPixel;
- (void) fbDoCopy ((DrawablePtr) pBitmap, pDrawable, pGC,
- 0, 0, w, h, x, y, igsCopy1toN, 1, &args);
- }
- else
- {
- KdCheckPushPixels (pGC, pBitmap, pDrawable, w, h, x, y);
- }
-}
-#else
-#define igsPushPixels KdCheckPushPixels
-#endif
-
-BOOL
-igsFillOk (GCPtr pGC)
-{
- FbBits depthMask;
-
- depthMask = FbFullMask(pGC->depth);
- if ((pGC->planemask & depthMask) != depthMask)
- return FALSE;
- switch (pGC->fillStyle) {
- case FillSolid:
- return TRUE;
- case FillTiled:
- return (igsPatternDimOk (pGC->tile.pixmap->drawable.width) &&
- igsPatternDimOk (pGC->tile.pixmap->drawable.height));
- case FillStippled:
- case FillOpaqueStippled:
- return (igsPatternDimOk (pGC->stipple->drawable.width) &&
- igsPatternDimOk (pGC->stipple->drawable.height));
- }
- return FALSE;
-}
-
-void
-igsFillSpans (DrawablePtr pDrawable, GCPtr pGC, int n,
- DDXPointPtr ppt, int *pwidth, int fSorted)
-{
- SetupIgs(pDrawable->pScreen);
- DDXPointPtr pptFree;
- FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC);
- int *pwidthFree;/* copies of the pointers to free */
- CARD32 cmd;
- int nTmp;
- INT16 x, y;
- int width;
- IgsPattern *p;
-
- if (!igsFillOk (pGC))
- {
- KdCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
- return;
- }
- nTmp = n * miFindMaxBand(fbGetCompositeClip(pGC));
- pwidthFree = (int *)xalloc(nTmp * sizeof(int));
- pptFree = (DDXPointRec *)xalloc(nTmp * sizeof(DDXPointRec));
- if(!pptFree || !pwidthFree)
- {
- if (pptFree) xfree(pptFree);
- if (pwidthFree) xfree(pwidthFree);
- return;
- }
- n = miClipSpans(fbGetCompositeClip(pGC),
- ppt, pwidth, n,
- pptFree, pwidthFree, fSorted);
- pwidth = pwidthFree;
- ppt = pptFree;
- switch (pGC->fillStyle) {
- case FillSolid:
- _igsSetSolidRect(cop,pGC->alu,pGC->planemask,pGC->fgPixel,cmd);
- break;
- case FillTiled:
- p = igsSetPattern (pDrawable->pScreen,
- pGC->tile.pixmap,
- FillTiled,
- pGC->patOrg.x + pDrawable->x,
- pGC->patOrg.y + pDrawable->y);
- _igsSetTiledRect (cop,pGC->alu,pGC->planemask,p->offset,cmd);
- break;
- default:
- p = igsSetPattern (pDrawable->pScreen,
- pGC->stipple,
- pGC->fillStyle,
- pGC->patOrg.x + pDrawable->x,
- pGC->patOrg.y + pDrawable->y);
- if (pGC->fillStyle == FillStippled)
- {
- _igsSetStippledRect (cop,pGC->alu,pGC->planemask,
- pGC->fgPixel,p->offset,cmd);
- }
- else
- {
- _igsSetOpaqueStippledRect (cop,pGC->alu,pGC->planemask,
- pGC->fgPixel,pGC->bgPixel,p->offset,cmd);
- }
- break;
- }
- while (n--)
- {
- x = ppt->x;
- y = ppt->y;
- ppt++;
- width = *pwidth++;
- if (width)
- {
- _igsPatRect(cop,x,y,width,1,cmd);
- }
- }
- xfree(pptFree);
- xfree(pwidthFree);
- KdMarkSync (pDrawable->pScreen);
-}
-
-#define NUM_STACK_RECTS 1024
-
-void
-igsPolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
- int nrectFill, xRectangle *prectInit)
-{
- SetupIgs(pDrawable->pScreen);
- xRectangle *prect;
- RegionPtr prgnClip;
- register BoxPtr pbox;
- register BoxPtr pboxClipped;
- BoxPtr pboxClippedBase;
- BoxPtr pextent;
- BoxRec stackRects[NUM_STACK_RECTS];
- FbGCPrivPtr fbPriv = fbGetGCPrivate (pGC);
- int numRects;
- int n;
- int xorg, yorg;
- int x, y;
-
- if (!igsFillOk (pGC))
- {
- KdCheckPolyFillRect (pDrawable, pGC, nrectFill, prectInit);
- return;
- }
- prgnClip = fbGetCompositeClip (pGC);
- xorg = pDrawable->x;
- yorg = pDrawable->y;
-
- if (xorg || yorg)
- {
- prect = prectInit;
- n = nrectFill;
- while(n--)
- {
- prect->x += xorg;
- prect->y += yorg;
- prect++;
- }
- }
-
- prect = prectInit;
-
- numRects = REGION_NUM_RECTS(prgnClip) * nrectFill;
- if (numRects > NUM_STACK_RECTS)
- {
- pboxClippedBase = (BoxPtr)xalloc(numRects * sizeof(BoxRec));
- if (!pboxClippedBase)
- return;
- }
- else
- pboxClippedBase = stackRects;
-
- pboxClipped = pboxClippedBase;
-
- if (REGION_NUM_RECTS(prgnClip) == 1)
- {
- int x1, y1, x2, y2, bx2, by2;
-
- pextent = REGION_RECTS(prgnClip);
- x1 = pextent->x1;
- y1 = pextent->y1;
- x2 = pextent->x2;
- y2 = pextent->y2;
- while (nrectFill--)
- {
- if ((pboxClipped->x1 = prect->x) < x1)
- pboxClipped->x1 = x1;
-
- if ((pboxClipped->y1 = prect->y) < y1)
- pboxClipped->y1 = y1;
-
- bx2 = (int) prect->x + (int) prect->width;
- if (bx2 > x2)
- bx2 = x2;
- pboxClipped->x2 = bx2;
-
- by2 = (int) prect->y + (int) prect->height;
- if (by2 > y2)
- by2 = y2;
- pboxClipped->y2 = by2;
-
- prect++;
- if ((pboxClipped->x1 < pboxClipped->x2) &&
- (pboxClipped->y1 < pboxClipped->y2))
- {
- pboxClipped++;
- }
- }
- }
- else
- {
- int x1, y1, x2, y2, bx2, by2;
-
- pextent = REGION_EXTENTS(pGC->pScreen, prgnClip);
- x1 = pextent->x1;
- y1 = pextent->y1;
- x2 = pextent->x2;
- y2 = pextent->y2;
- while (nrectFill--)
- {
- BoxRec box;
-
- if ((box.x1 = prect->x) < x1)
- box.x1 = x1;
-
- if ((box.y1 = prect->y) < y1)
- box.y1 = y1;
-
- bx2 = (int) prect->x + (int) prect->width;
- if (bx2 > x2)
- bx2 = x2;
- box.x2 = bx2;
-
- by2 = (int) prect->y + (int) prect->height;
- if (by2 > y2)
- by2 = y2;
- box.y2 = by2;
-
- prect++;
-
- if ((box.x1 >= box.x2) || (box.y1 >= box.y2))
- continue;
-
- n = REGION_NUM_RECTS (prgnClip);
- pbox = REGION_RECTS(prgnClip);
-
- /* clip the rectangle to each box in the clip region
- this is logically equivalent to calling Intersect()
- */
- while(n--)
- {
- pboxClipped->x1 = max(box.x1, pbox->x1);
- pboxClipped->y1 = max(box.y1, pbox->y1);
- pboxClipped->x2 = min(box.x2, pbox->x2);
- pboxClipped->y2 = min(box.y2, pbox->y2);
- pbox++;
-
- /* see if clipping left anything */
- if(pboxClipped->x1 < pboxClipped->x2 &&
- pboxClipped->y1 < pboxClipped->y2)
- {
- pboxClipped++;
- }
- }
- }
- }
- if (pboxClipped != pboxClippedBase)
- {
- switch (pGC->fillStyle) {
- case FillSolid:
- igsFillBoxSolid(pDrawable,
- pboxClipped-pboxClippedBase, pboxClippedBase,
- pGC->fgPixel, pGC->alu, pGC->planemask);
- break;
- case FillTiled:
- igsFillBoxTiled(pDrawable,
- pboxClipped-pboxClippedBase, pboxClippedBase,
- pGC->tile.pixmap,
- pGC->patOrg.x + pDrawable->x,
- pGC->patOrg.y + pDrawable->y,
- pGC->alu);
- break;
- case FillStippled:
- case FillOpaqueStippled:
- igsFillBoxStippled (pDrawable, pGC,
- pboxClipped-pboxClippedBase, pboxClippedBase);
- break;
- }
- }
- if (pboxClippedBase != stackRects)
- xfree(pboxClippedBase);
-}
-
-int
-igsTextInRegion (GCPtr pGC,
- int x,
- int y,
- unsigned int nglyph,
- CharInfoPtr *ppci)
-{
- int w;
- FontPtr pfont = pGC->font;
- BoxRec bbox;
-
- if (FONTCONSTMETRICS(pfont))
- w = FONTMAXBOUNDS(pfont,characterWidth) * nglyph;
- else
- {
- w = 0;
- while (nglyph--)
- w += (*ppci++)->metrics.characterWidth;
- }
- if (w < 0)
- {
- bbox.x1 = x + w;
- bbox.x2 = x;
- }
- else
- {
- bbox.x1 = x;
- bbox.x2 = x + w;
- }
- w = FONTMINBOUNDS(pfont,leftSideBearing);
- if (w < 0)
- bbox.x1 += w;
- w = FONTMAXBOUNDS(pfont, rightSideBearing) - FONTMINBOUNDS(pfont, characterWidth);
- if (w > 0)
- bbox.x2 += w;
- bbox.y1 = y - FONTMAXBOUNDS(pfont,ascent);
- bbox.y2 = y + FONTMAXBOUNDS(pfont,descent);
-
- return RECT_IN_REGION(pGC->pScreen, fbGetCompositeClip(pGC), &bbox);
-}
-
-void
-igsGlyphBltClipped (DrawablePtr pDrawable,
- GCPtr pGC,
- int x,
- int y,
- unsigned int nglyph,
- CharInfoPtr *ppciInit,
- Bool image)
-{
- SetupIgs(pDrawable->pScreen);
- CARD32 cmd;
- int h;
- int w;
- int xBack, yBack;
- int hBack, wBack;
- int lw;
- FontPtr pfont = pGC->font;
- CharInfoPtr pci;
- unsigned long *bits;
- BoxPtr extents;
- BoxRec bbox;
- CARD32 b;
- CharInfoPtr *ppci;
- FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC);
- RegionPtr pClip = fbGetCompositeClip(pGC);
- BoxPtr pBox;
- int nbox;
- int x1, y1, x2, y2;
- unsigned char alu;
- Bool set;
- PixTransDeclare;
-
- if (image)
- {
- xBack = x;
- yBack = y - FONTASCENT(pGC->font);
- wBack = 0;
- hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font);
- if (hBack)
- {
- h = nglyph;
- ppci = ppciInit;
- while (h--)
- wBack += (*ppci++)->metrics.characterWidth;
- }
- if (wBack < 0)
- {
- xBack = xBack + wBack;
- wBack = -wBack;
- }
- if (hBack < 0)
- {
- yBack = yBack + hBack;
- hBack = -hBack;
- }
- alu = GXcopy;
- if (wBack)
- {
- _igsSetSolidRect (cop, GXcopy, pGC->planemask, pGC->bgPixel, cmd);
- for (nbox = REGION_NUM_RECTS (pClip),
- pBox = REGION_RECTS (pClip);
- nbox--;
- pBox++)
- {
- x1 = xBack;
- x2 = xBack + wBack;
- y1 = yBack;
- y2 = yBack + hBack;
- if (x1 < pBox->x1) x1 = pBox->x1;
- if (x2 > pBox->x2) x2 = pBox->x2;
- if (y1 < pBox->y1) y1 = pBox->y1;
- if (y2 > pBox->y2) y2 = pBox->y2;
- if (x1 < x2 && y1 < y2)
- {
- _igsRect (cop, x1, y1, x2 - x1, y2 - y1, cmd);
- }
- }
- KdMarkSync (pDrawable->pScreen);
- }
- }
- else
- {
- wBack = 0;
- alu = pGC->alu;
- }
-
- ppci = ppciInit;
- set = FALSE;
- while (nglyph--)
- {
- pci = *ppci++;
- h = pci->metrics.ascent + pci->metrics.descent;
- w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
- x1 = x + pci->metrics.leftSideBearing;
- y1 = y - pci->metrics.ascent;
- bbox.x1 = x1;
- bbox.y1 = y1;
- bbox.x2 = x1 + w;
- bbox.y2 = y1 + h;
- switch (RECT_IN_REGION(pGC->pScreen, pClip, &bbox))
- {
- case rgnIN:
- lw = h * ((w + 31) >> 5);
- if (lw)
- {
- if (!set)
- {
- _igsSetTransparentPlaneBlt (cop, alu, pGC->planemask, pGC->fgPixel, cmd);
- set = TRUE;
- }
- _igsPlaneBlt(cop,
- x + pci->metrics.leftSideBearing,
- y - pci->metrics.ascent,
- w, h, cmd);
- bits = (unsigned long *) pci->bits;
- PixTransStart (lw);
- while (lw--)
- {
- b = *bits++;
- IgsAdjustBits32 (b);
- PixTransStore(b);
- }
- KdMarkSync (pDrawable->pScreen);
- }
- break;
- case rgnPART:
- set = FALSE;
- KdCheckSync (pDrawable->pScreen);
- fbPutXYImage (pDrawable,
- pClip,
- fbPriv->fg,
- fbPriv->bg,
- fbPriv->pm,
- alu,
- FALSE,
- x1, y1,
- w, h,
- (FbStip *) pci->bits,
- (w + 31) >> 5,
- 0);
- break;
- case rgnOUT:
- break;
- }
- x += pci->metrics.characterWidth;
- }
-}
-
-void
-igsGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int x,
- int y,
- unsigned int nglyph,
- CharInfoPtr *ppciInit,
- Bool image)
-{
- SetupIgs(pDrawable->pScreen);
- CARD32 cmd;
- int h;
- int w;
- int xBack, yBack;
- int hBack, wBack;
- int lw;
- FontPtr pfont = pGC->font;
- CharInfoPtr pci;
- unsigned long *bits;
- BoxPtr extents;
- BoxRec bbox;
- CARD32 b;
- CharInfoPtr *ppci;
- unsigned char alu;
- PixTransDeclare;
-
- /*
- * Paint background for image text
- */
- if (image)
- {
- xBack = x;
- yBack = y - FONTASCENT(pGC->font);
- wBack = 0;
- hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font);
- if (hBack)
- {
- h = nglyph;
- ppci = ppciInit;
- while (h--)
- wBack += (*ppci++)->metrics.characterWidth;
- }
- if (wBack < 0)
- {
- xBack = xBack + wBack;
- wBack = -wBack;
- }
- if (hBack < 0)
- {
- yBack = yBack + hBack;
- hBack = -hBack;
- }
- alu = GXcopy;
- if (wBack)
- {
- _igsSetSolidRect (cop, GXcopy, pGC->planemask, pGC->bgPixel, cmd);
- _igsRect (cop, xBack, yBack, wBack, hBack, cmd);
- }
- }
- else
- {
- wBack = 0;
- alu = pGC->alu;
- }
-
- _igsSetTransparentPlaneBlt (cop, alu, pGC->planemask, pGC->fgPixel, cmd);
- ppci = ppciInit;
- while (nglyph--)
- {
- pci = *ppci++;
- h = pci->metrics.ascent + pci->metrics.descent;
- w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
- lw = h * ((w + 31) >> 5);
- if (lw)
- {
- _igsPlaneBlt(cop,
- x + pci->metrics.leftSideBearing,
- y - pci->metrics.ascent,
- w, h, cmd);
- bits = (unsigned long *) pci->bits;
- PixTransStart(lw);
- while (lw--)
- {
- b = *bits++;
- IgsAdjustBits32 (b);
- PixTransStore(b);
- }
- }
- x += pci->metrics.characterWidth;
- }
- KdMarkSync (pDrawable->pScreen);
-}
-
-void
-igsTEGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int xInit,
- int yInit,
- unsigned int nglyph,
- CharInfoPtr *ppci,
- Bool image)
-{
- SetupIgs(pDrawable->pScreen);
- CARD32 cmd;
- int x, y;
- int h, lw, lwTmp;
- int w;
- FontPtr pfont = pGC->font;
- unsigned long *char1, *char2, *char3, *char4;
- int widthGlyphs, widthGlyph;
- BoxRec bbox;
- CARD32 tmp;
- PixTransDeclare;
-
- widthGlyph = FONTMAXBOUNDS(pfont,characterWidth);
- if (!widthGlyph)
- return;
-
- h = FONTASCENT(pfont) + FONTDESCENT(pfont);
- if (!h)
- return;
-
- x = xInit + FONTMAXBOUNDS(pfont,leftSideBearing);
- y = yInit - FONTASCENT(pfont);
-
- if (image)
- {
- _igsSetOpaquePlaneBlt (cop, GXcopy, pGC->planemask, pGC->fgPixel, pGC->bgPixel, cmd);
- }
- else
- {
- _igsSetTransparentPlaneBlt (cop, pGC->alu, pGC->planemask, pGC->fgPixel, cmd);
- }
-
-#if BITMAP_BIT_ORDER == LSBFirst
-#define SHIFT <<
-#else
-#define SHIFT >>
-#endif
-
-#define LoopIt(count, w, loadup, fetch) \
- while (nglyph >= count) \
- { \
- nglyph -= count; \
- _igsPlaneBlt (cop, x, y, w, h, cmd); \
- x += w; \
- loadup \
- lwTmp = h; \
- PixTransStart(h); \
- while (lwTmp--) { \
- tmp = fetch; \
- IgsAdjustBits32(tmp); \
- PixTransStore(tmp); \
- } \
- }
-
- if (widthGlyph <= 8)
- {
- widthGlyphs = widthGlyph << 2;
- LoopIt(4, widthGlyphs,
- char1 = (unsigned long *) (*ppci++)->bits;
- char2 = (unsigned long *) (*ppci++)->bits;
- char3 = (unsigned long *) (*ppci++)->bits;
- char4 = (unsigned long *) (*ppci++)->bits;,
- (*char1++ | ((*char2++ | ((*char3++ | (*char4++
- SHIFT widthGlyph))
- SHIFT widthGlyph))
- SHIFT widthGlyph)))
- }
- else if (widthGlyph <= 10)
- {
- widthGlyphs = (widthGlyph << 1) + widthGlyph;
- LoopIt(3, widthGlyphs,
- char1 = (unsigned long *) (*ppci++)->bits;
- char2 = (unsigned long *) (*ppci++)->bits;
- char3 = (unsigned long *) (*ppci++)->bits;,
- (*char1++ | ((*char2++ | (*char3++ SHIFT widthGlyph)) SHIFT widthGlyph)))
- }
- else if (widthGlyph <= 16)
- {
- widthGlyphs = widthGlyph << 1;
- LoopIt(2, widthGlyphs,
- char1 = (unsigned long *) (*ppci++)->bits;
- char2 = (unsigned long *) (*ppci++)->bits;,
- (*char1++ | (*char2++ SHIFT widthGlyph)))
- }
- lw = h * ((widthGlyph + 31) >> 5);
- while (nglyph--)
- {
- _igsPlaneBlt (cop, x, y, widthGlyph, h, cmd);
- x += widthGlyph;
- char1 = (unsigned long *) (*ppci++)->bits;
- lwTmp = lw;
- PixTransStart(lw);
- while (lwTmp--)
- {
- tmp = *char1++;
- IgsAdjustBits32(tmp);
- PixTransStore(tmp);
- }
- }
- KdMarkSync (pDrawable->pScreen);
-}
-
-/*
- * Blt glyphs using image transfer window
- */
-
-void
-igsPolyGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int x,
- int y,
- unsigned int nglyph,
- CharInfoPtr *ppci,
- pointer pglyphBase)
-{
- if (pGC->fillStyle != FillSolid ||
- fbGetGCPrivate(pGC)->pm != FB_ALLONES)
- {
- KdCheckPolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
- return;
- }
- x += pDrawable->x;
- y += pDrawable->y;
-
- switch (igsTextInRegion (pGC, x, y, nglyph, ppci)) {
- case rgnIN:
- if (TERMINALFONT(pGC->font))
- igsTEGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, FALSE);
- else
- igsGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, FALSE);
- break;
- case rgnPART:
- igsGlyphBltClipped (pDrawable, pGC, x, y, nglyph, ppci, FALSE);
- break;
- case rgnOUT:
- break;
- }
-}
-
-void
-igsImageGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int x, int y,
- unsigned int nglyph,
- CharInfoPtr *ppci,
- pointer pglyphBase)
-{
- if (fbGetGCPrivate(pGC)->pm != FB_ALLONES)
- {
- KdCheckImageGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
- return;
- }
- x += pDrawable->x;
- y += pDrawable->y;
-
- switch (igsTextInRegion (pGC, x, y, nglyph, ppci)) {
- case rgnIN:
- if (TERMINALFONT(pGC->font))
- igsTEGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, TRUE);
- else
- igsGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, TRUE);
- break;
- case rgnPART:
- igsGlyphBltClipped (pDrawable, pGC, x, y, nglyph, ppci, TRUE);
- break;
- case rgnOUT:
- break;
- }
-}
-
-static void
-igsInvalidatePattern (IgsPatternCache *c,
- PixmapPtr pPixmap)
-{
- int i;
-
- if (c->base)
- {
- for (i = 0; i < IGS_NUM_PATTERN; i++)
- {
- if (c->pattern[i].serial_number == pPixmap->drawable.serialNumber)
- c->pattern[i].serial_number = ~0;
- }
- }
-}
-
-static void
-igsInitPattern (IgsPatternCache *c, int bsize, int psize)
-{
- int i;
- int boffset;
- int poffset;
-
- for (i = 0; i < IGS_NUM_PATTERN; i++)
- {
- boffset = i * bsize;
- poffset = i * psize;
- c->pattern[i].xrot = -1;
- c->pattern[i].yrot = -1;
- c->pattern[i].serial_number = ~0;
- c->pattern[i].offset = c->offset + poffset;
- c->pattern[i].base = c->base + boffset;
- }
- c->next = 0;
-}
-
-static const GCOps igsOps = {
- igsFillSpans,
- KdCheckSetSpans,
- KdCheckPutImage,
- igsCopyArea,
- igsCopyPlane,
- KdCheckPolyPoint,
- KdCheckPolylines,
- KdCheckPolySegment,
- miPolyRectangle,
- KdCheckPolyArc,
- miFillPolygon,
- igsPolyFillRect,
- KdCheckPolyFillArc,
- miPolyText8,
- miPolyText16,
- miImageText8,
- miImageText16,
- igsImageGlyphBlt,
- igsPolyGlyphBlt,
- igsPushPixels,
-};
-
-void
-igsValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
-{
- FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC);
-
- fbValidateGC (pGC, changes, pDrawable);
-
- if (pDrawable->type == DRAWABLE_WINDOW)
- pGC->ops = (GCOps *) &igsOps;
- else
- pGC->ops = (GCOps *) &fbGCOps;
-}
-
-GCFuncs igsGCFuncs = {
- igsValidateGC,
- miChangeGC,
- miCopyGC,
- miDestroyGC,
- miChangeClip,
- miDestroyClip,
- miCopyClip
-};
-
-int
-igsCreateGC (GCPtr pGC)
-{
- if (!fbCreateGC (pGC))
- return FALSE;
-
- if (pGC->depth != 1)
- pGC->funcs = &igsGCFuncs;
-
- return TRUE;
-}
-
-void
-igsCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
-{
- ScreenPtr pScreen = pWin->drawable.pScreen;
- KdScreenPriv(pScreen);
- RegionRec rgnDst;
- int dx, dy;
- WindowPtr pwinRoot;
-
- pwinRoot = WindowTable[pWin->drawable.pScreen->myNum];
-
- dx = ptOldOrg.x - pWin->drawable.x;
- dy = ptOldOrg.y - pWin->drawable.y;
- REGION_TRANSLATE(pWin->drawable.pScreen, prgnSrc, -dx, -dy);
-
- REGION_INIT (pWin->drawable.pScreen, &rgnDst, NullBox, 0);
-
- REGION_INTERSECT(pWin->drawable.pScreen, &rgnDst, &pWin->borderClip, prgnSrc);
-
- fbCopyRegion ((DrawablePtr)pwinRoot, (DrawablePtr)pwinRoot,
- 0,
- &rgnDst, dx, dy, igsCopyNtoN, 0, 0);
-
- REGION_UNINIT(pWin->drawable.pScreen, &rgnDst);
-}
-
-
-Bool
-igsDrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- igsCardInfo(pScreenPriv);
- igsScreenInfo(pScreenPriv);
- int i;
- int pattern_size;
- int boffset, poffset;
-
- KdScreenInitAsync (pScreen);
-
- /*
- * Replace various fb screen functions
- */
- pScreen->CreateGC = igsCreateGC;
- pScreen->CopyWindow = igsCopyWindow;
-
- /*
- * Initialize patterns
- */
- if (igss->tile.base)
- {
- pattern_size = IgsTileSize(pScreenPriv->screen->fb[0].bitsPerPixel);
- igsInitPattern (&igss->tile,
- pattern_size,
- pattern_size * 8 / pScreenPriv->screen->fb[0].bitsPerPixel);
- pattern_size = IgsStippleSize(pScreenPriv->screen->fb[0].bitsPerPixel);
- igsInitPattern (&igss->stipple,
- pattern_size,
- pattern_size * 8 / pScreenPriv->screen->fb[0].bitsPerPixel);
- }
- return TRUE;
-}
-
-void
-igsDrawEnable (ScreenPtr pScreen)
-{
- SetupIgs(pScreen);
- CARD32 cmd;
- CARD32 base;
- CARD16 stride;
- CARD32 format;
-
- stride = pScreenPriv->screen->fb[0].pixelStride;
- _igsWaitIdleEmpty(cop);
- _igsReset(cop);
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 8:
- format = IGS_FORMAT_8BPP;
- break;
- case 16:
- format = IGS_FORMAT_16BPP;
- break;
- case 24:
- format = IGS_FORMAT_24BPP;
- break;
- case 32:
- format = IGS_FORMAT_32BPP;
- break;
- }
- cop->format = format;
- cop->dst_stride = stride - 1;
- cop->src1_stride = stride - 1;
- cop->src2_stride = stride - 1;
- cop->src1_start = 0;
- cop->src2_start = 0;
- cop->extension |= IGS_BLOCK_COP_REG | IGS_BURST_ENABLE;
-
- _igsSetSolidRect(cop, GXcopy, ~0, pScreen->blackPixel, cmd);
- _igsRect (cop, 0, 0,
- pScreenPriv->screen->width, pScreenPriv->screen->height,
- cmd);
- _igsWaitIdleEmpty (cop);
-}
-
-void
-igsDrawDisable (ScreenPtr pScreen)
-{
-}
-
-void
-igsDrawFini (ScreenPtr pScreen)
-{
-}
-
-void
-igsDrawSync (ScreenPtr pScreen)
-{
- SetupIgs(pScreen);
-
- _igsWaitIdleEmpty(cop);
-}
diff --git a/hw/kdrive/igs/igsdraw.h b/hw/kdrive/igs/igsdraw.h
deleted file mode 100644
index ab80f9acd..000000000
--- a/hw/kdrive/igs/igsdraw.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _IGSDRAW_H_
-#define _IGSDRAW_H_
-
-extern CARD8 igsPatRop[];
-
-#define SetupIgs(s) KdScreenPriv(s); \
- igsCardInfo(pScreenPriv); \
- Cop5xxx *cop = igsc->cop; \
- int cop_stride = pScreenPriv->screen->fb[0].pixelStride
-
-#define _igsWaitLoop(cop,mask,value) { \
- int __loop = 1000000; \
- while (((cop)->control & (mask)) != (value)) { \
- if (--__loop <= 0) { \
- FatalError("Warning: igsWaitLoop 0x%x 0x%x failed\n", mask, value); \
- } \
- } \
-}
-
-#define _igsWaitDone(cop) _igsWaitLoop(cop, \
- (IGS_CONTROL_BUSY| \
- IGS_CONTROL_MALLWBEPTZ), \
- 0)
-
-#if 1
-#define _igsWaitFull(cop) _igsWaitLoop(cop, \
- IGS_CONTROL_CMDFF, \
- 0)
-#else
-#define _igsWaitFull(cop) _igsWaitDone(cop)
-#endif
-
-#define _igsWaitIdleEmpty(cop) _igsWaitDone(cop)
-#define _igsWaitHostBltAck(cop) _igsWaitLoop(cop, \
- (IGS_CONTROL_HBACKZ| \
- IGS_CONTROL_CMDFF), \
- 0)
-
-#define _igsReset(cop) ((cop)->control = 0)
-
-#define IgsInvertBits32(v) { \
- v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \
- v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \
- v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \
-}
-
-#define IgsInvertBits16(v) { \
- v = ((v & 0x5555) << 1) | ((v >> 1) & 0x5555); \
- v = ((v & 0x3333) << 2) | ((v >> 2) & 0x3333); \
- v = ((v & 0x0f0f) << 4) | ((v >> 4) & 0x0f0f); \
-}
-
-#define IgsInvertBits8(v) { \
- v = ((v & 0x55) << 1) | ((v >> 1) & 0x55); \
- v = ((v & 0x33) << 2) | ((v >> 2) & 0x33); \
- v = ((v & 0x0f) << 4) | ((v >> 4) & 0x0f); \
-}
-
-#define IgsByteSwap32(x) ((x) = (((x) >> 24) | \
- (((x) >> 8) & 0xff00) | \
- (((x) << 8) & 0xff0000) | \
- ((x) << 24)))
-
-#define IgsByteSwap16(x) ((x) = ((x) << 8) | ((x) >> 8))
-
-#define igsPatternDimOk(d) ((d) <= IGS_PATTERN_WIDTH && (((d) & ((d) - 1)) == 0))
-
-#if BITMAP_BIT_ORDER == LSBFirst
-#define IgsAdjustBits32(b) IgsInvertBits32(b)
-#define IgsAdjustBits16(x) IgsInvertBits16(x)
-#else
-#define IgsAdjustBits32(x) IgsByteSwap32(x)
-#define IgsAdjustBits16(x) IgsByteSwap16(x)
-#endif
-
-#define _igsSetSolidRect(cop,alu,pm,pix,cmd) {\
- _igsWaitFull(cop); \
- (cop)->mix = IGS_MAKE_MIX(alu,alu); \
- (cop)->fg = (pix); \
- (cmd) = (IGS_DRAW_T_B | \
- IGS_DRAW_L_R | \
- IGS_DRAW_ALL | \
- IGS_PIXEL_FG | \
- IGS_HBLT_DISABLE | \
- IGS_SRC2_NORMAL | \
- IGS_STEP_PXBLT | \
- IGS_FGS_FG | \
- IGS_BGS_BG); \
-}
-
-#define _igsSetTiledRect(cop,alu,pm,base,cmd) {\
- _igsWaitFull(cop); \
- (cop)->mix = IGS_MAKE_MIX(alu,alu); \
- (cop)->src1_stride = IGS_PATTERN_WIDTH - 1; \
- (cop)->src1_start = (base); \
- (cmd) = (IGS_DRAW_T_B | \
- IGS_DRAW_L_R | \
- IGS_DRAW_ALL | \
- IGS_PIXEL_TILE | \
- IGS_HBLT_DISABLE | \
- IGS_SRC2_NORMAL | \
- IGS_STEP_PXBLT | \
- IGS_FGS_SRC | \
- IGS_BGS_BG); \
-}
-
-#define _igsSetStippledRect(cop,alu,pm,pix,base,cmd) {\
- _igsWaitFull(cop); \
- (cop)->mix = IGS_MAKE_MIX(alu,alu); \
- (cop)->src1_start = (base); \
- (cop)->fg = (pix); \
- (cmd) = (IGS_DRAW_T_B | \
- IGS_DRAW_L_R | \
- IGS_DRAW_ALL | \
- IGS_PIXEL_STIP_TRANS | \
- IGS_HBLT_DISABLE | \
- IGS_SRC2_NORMAL | \
- IGS_STEP_PXBLT | \
- IGS_FGS_FG | \
- IGS_BGS_BG); \
-}
-
-#define _igsSetOpaqueStippledRect(cop,alu,pm,_fg,_bg,base,cmd) {\
- _igsWaitFull(cop); \
- (cop)->mix = IGS_MAKE_MIX(alu,alu); \
- (cop)->src1_start = (base); \
- (cop)->fg = (_fg); \
- (cop)->bg = (_bg); \
- (cmd) = (IGS_DRAW_T_B | \
- IGS_DRAW_L_R | \
- IGS_DRAW_ALL | \
- IGS_PIXEL_STIP_OPAQUE | \
- IGS_HBLT_DISABLE | \
- IGS_SRC2_NORMAL | \
- IGS_STEP_PXBLT | \
- IGS_FGS_FG | \
- IGS_BGS_BG); \
-}
-
-#define _igsRect(cop,x,y,w,h,cmd) { \
- _igsWaitFull(cop); \
- (cop)->dst_start = (x) + (y) * (cop_stride); \
- (cop)->dim = IGS_MAKE_DIM(w-1,h-1); \
- (cop)->operation = (cmd); \
-}
-
-#define _igsPatRect(cop,x,y,w,h,cmd) { \
- _igsWaitFull(cop); \
- (cop)->dst_start = (x) + (y) * (cop_stride); \
- (cop)->rotate = IGS_MAKE_ROTATE(x&7,y&7); \
- (cop)->dim = IGS_MAKE_DIM(w-1,h-1); \
- (cop)->operation = (cmd); \
-}
-
-#define _igsSetBlt(cop,alu,pm,backwards,upsidedown,cmd) { \
- _igsWaitFull(cop); \
- (cop)->mix = IGS_MAKE_MIX(alu,alu); \
- (cop)->src1_stride = cop_stride - 1; \
- (cmd) = (IGS_DRAW_ALL | \
- IGS_PIXEL_FG | \
- IGS_HBLT_DISABLE | \
- IGS_SRC2_NORMAL | \
- IGS_STEP_PXBLT | \
- IGS_FGS_SRC | \
- IGS_BGS_BG); \
- if (backwards) (cmd) |= IGS_DRAW_R_L; \
- if (upsidedown) (cmd) |= IGS_DRAW_B_T; \
-}
-
-#if 0
-#define _igsPreparePlaneBlt(cop) { \
- _igsReset(cop); \
- (cop)->dst_stride = cop_stride - 1; \
- (cop)->src1_stride = cop_stride - 1; \
- (cop)->src2_stride = cop_stride - 1; \
- (cop)->format = IGS_FORMAT_16BPP; \
- (cop)->src1_start = 0; \
- (cop)->src2_start = 0; \
-}
-#else
-#define _igsPreparePlaneBlt(cop)
-#endif
-
-#define _igsSetTransparentPlaneBlt(cop,alu,pm,fg_pix,cmd) { \
- _igsWaitIdleEmpty(cop); \
- _igsPreparePlaneBlt(cop); \
- (cop)->mix = IGS_MAKE_MIX(igsPatRop[alu],igsPatRop[alu]); \
- (cop)->fg = (fg_pix); \
- (cmd) = (IGS_DRAW_T_B | \
- IGS_DRAW_L_R | \
- IGS_DRAW_ALL | \
- IGS_PIXEL_FG | \
- IGS_HBLT_WRITE_2 | \
- IGS_SRC2_MONO_TRANS | \
- IGS_STEP_TERNARY_PXBLT | \
- IGS_FGS_FG | \
- IGS_BGS_BG); \
-}
-
-#define _igsSetOpaquePlaneBlt(cop,alu,pm,fg_pix,bg_pix,cmd) { \
- _igsWaitIdleEmpty(cop); \
- _igsPreparePlaneBlt(cop); \
- (cop)->mix = IGS_MAKE_MIX(igsPatRop[alu],igsPatRop[alu]); \
- (cop)->fg = (fg_pix); \
- (cop)->bg = (bg_pix); \
- (cmd) = (IGS_DRAW_T_B | \
- IGS_DRAW_L_R | \
- IGS_DRAW_ALL | \
- IGS_PIXEL_FG | \
- IGS_HBLT_WRITE_2 | \
- IGS_SRC2_MONO_OPAQUE | \
- IGS_STEP_TERNARY_PXBLT | \
- IGS_FGS_FG | \
- IGS_BGS_BG); \
-}
-
-#define _igsPlaneBlt(cop,x,y,w,h,cmd) { \
-/* _igsWaitFull(cop); */ \
- (cop)->dst_start = (x) + (y) * (cop_stride); \
- (cop)->dim = IGS_MAKE_DIM((w)-1,(h)-1); \
- (cop)->operation = (cmd); \
-/* _igsWaitHostBltAck(cop); */ \
-}
-
-#define _igsBlt(cop,sx,sy,dx,dy,w,h,cmd) { \
- _igsWaitFull(cop); \
- (cop)->dst_start = (dx) + (dy) * cop_stride; \
- (cop)->src1_start = (sx) + (sy) * cop_stride; \
- (cop)->src1_stride = cop_stride - 1; \
- (cop)->dim = IGS_MAKE_DIM(w-1,h-1); \
- (cop)->operation = (cmd); \
-}
-
-#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3))
-
-#endif
diff --git a/hw/kdrive/igs/igsreg.c b/hw/kdrive/igs/igsreg.c
deleted file mode 100644
index 6d6f28b73..000000000
--- a/hw/kdrive/igs/igsreg.c
+++ /dev/null
@@ -1,969 +0,0 @@
-/*
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "igsreg.h"
-#include <stdio.h>
-
-#define CR00 IGS_CR+0x00
-#define CR01 IGS_CR+0x01
-#define CR02 IGS_CR+0x02
-#define CR03 IGS_CR+0x03
-#define CR04 IGS_CR+0x04
-#define CR05 IGS_CR+0x05
-#define CR06 IGS_CR+0x06
-#define CR07 IGS_CR+0x07
-#define CR08 IGS_CR+0x08
-#define CR09 IGS_CR+0x09
-#define CR0A IGS_CR+0x0A
-#define CR0B IGS_CR+0x0B
-#define CR0C IGS_CR+0x0C
-#define CR0D IGS_CR+0x0D
-#define CR0E IGS_CR+0x0E
-#define CR0F IGS_CR+0x0F
-#define CR10 IGS_CR+0x10
-#define CR11 IGS_CR+0x11
-#define CR12 IGS_CR+0x12
-#define CR13 IGS_CR+0x13
-#define CR14 IGS_CR+0x14
-#define CR15 IGS_CR+0x15
-#define CR16 IGS_CR+0x16
-#define CR17 IGS_CR+0x17
-#define CR18 IGS_CR+0x18
-#define CR19 IGS_CR+0x19
-#define CR1A IGS_CR+0x1A
-#define CR1B IGS_CR+0x1B
-#define CR1C IGS_CR+0x1C
-#define CR1D IGS_CR+0x1D
-#define CR1E IGS_CR+0x1E
-#define CR1F IGS_CR+0x1F
-#define CR20 IGS_CR+0x20
-#define CR21 IGS_CR+0x21
-#define CR22 IGS_CR+0x22
-#define CR23 IGS_CR+0x23
-#define CR24 IGS_CR+0x24
-#define CR25 IGS_CR+0x25
-#define CR26 IGS_CR+0x26
-#define CR27 IGS_CR+0x27
-#define CR28 IGS_CR+0x28
-#define CR29 IGS_CR+0x29
-#define CR2A IGS_CR+0x2A
-#define CR2B IGS_CR+0x2B
-#define CR2C IGS_CR+0x2C
-#define CR2D IGS_CR+0x2D
-#define CR2E IGS_CR+0x2E
-#define CR2F IGS_CR+0x2F
-#define CR30 IGS_CR+0x30
-#define CR31 IGS_CR+0x31
-#define CR32 IGS_CR+0x32
-#define CR33 IGS_CR+0x33
-#define CR34 IGS_CR+0x34
-#define CR35 IGS_CR+0x35
-#define CR36 IGS_CR+0x36
-#define CR37 IGS_CR+0x37
-#define CR38 IGS_CR+0x38
-#define CR39 IGS_CR+0x39
-#define CR3A IGS_CR+0x3A
-#define CR3B IGS_CR+0x3B
-#define CR3C IGS_CR+0x3C
-#define CR3D IGS_CR+0x3D
-#define CR3E IGS_CR+0x3E
-#define CR3F IGS_CR+0x3F
-#define CR40 IGS_CR+0x40
-#define CR41 IGS_CR+0x41
-#define CR42 IGS_CR+0x42
-#define CR43 IGS_CR+0x43
-#define CR44 IGS_CR+0x44
-#define CR45 IGS_CR+0x45
-#define CR46 IGS_CR+0x46
-#define CR47 IGS_CR+0x47
-#define CR48 IGS_CR+0x48
-
-#define CR_FIRST CR00
-#define CR_LAST CR48
-
-#define SR00 IGS_SR+0x00
-#define SR01 IGS_SR+0x01
-#define SR02 IGS_SR+0x02
-#define SR03 IGS_SR+0x03
-#define SR04 IGS_SR+0x04
-
-#define SR_FIRST SR00
-#define SR_LAST SR04
-
-#define AR00 IGS_AR+0x00
-#define AR01 IGS_AR+0x01
-#define AR02 IGS_AR+0x02
-#define AR03 IGS_AR+0x03
-#define AR04 IGS_AR+0x04
-#define AR05 IGS_AR+0x05
-#define AR06 IGS_AR+0x06
-#define AR07 IGS_AR+0x07
-#define AR08 IGS_AR+0x08
-#define AR09 IGS_AR+0x09
-#define AR0A IGS_AR+0x0A
-#define AR0B IGS_AR+0x0B
-#define AR0C IGS_AR+0x0C
-#define AR0D IGS_AR+0x0D
-#define AR0E IGS_AR+0x0E
-#define AR0F IGS_AR+0x0F
-#define AR10 IGS_AR+0x10
-#define AR11 IGS_AR+0x11
-#define AR12 IGS_AR+0x12
-#define AR13 IGS_AR+0x13
-#define AR14 IGS_AR+0x14
-
-#define AR_FIRST AR00
-#define AR_LAST AR14
-
-#define GR00 IGS_GR+0x00
-#define GR01 IGS_GR+0x01
-#define GR02 IGS_GR+0x02
-#define GR03 IGS_GR+0x03
-#define GR04 IGS_GR+0x04
-#define GR05 IGS_GR+0x05
-#define GR06 IGS_GR+0x06
-#define GR07 IGS_GR+0x07
-#define GR08 IGS_GR+0x08
-#define GR09 IGS_GR+0x09
-#define GR0A IGS_GR+0x0A
-#define GR0B IGS_GR+0x0B
-#define GR0C IGS_GR+0x0C
-#define GR0D IGS_GR+0x0D
-#define GR0E IGS_GR+0x0E
-#define GR0F IGS_GR+0x0F
-#define GR10 IGS_GR+0x10
-#define GR11 IGS_GR+0x11
-#define GR12 IGS_GR+0x12
-#define GR13 IGS_GR+0x13
-#define GR14 IGS_GR+0x14
-#define GR15 IGS_GR+0x15
-#define GR16 IGS_GR+0x16
-#define GR17 IGS_GR+0x17
-#define GR18 IGS_GR+0x18
-#define GR19 IGS_GR+0x19
-#define GR1A IGS_GR+0x1A
-#define GR1B IGS_GR+0x1B
-#define GR1C IGS_GR+0x1C
-#define GR1D IGS_GR+0x1D
-#define GR1E IGS_GR+0x1E
-#define GR1F IGS_GR+0x1F
-#define GR20 IGS_GR+0x20
-#define GR21 IGS_GR+0x21
-#define GR22 IGS_GR+0x22
-#define GR23 IGS_GR+0x23
-#define GR24 IGS_GR+0x24
-#define GR25 IGS_GR+0x25
-#define GR26 IGS_GR+0x26
-#define GR27 IGS_GR+0x27
-#define GR28 IGS_GR+0x28
-#define GR29 IGS_GR+0x29
-#define GR2A IGS_GR+0x2A
-#define GR2B IGS_GR+0x2B
-#define GR2C IGS_GR+0x2C
-#define GR2D IGS_GR+0x2D
-#define GR2E IGS_GR+0x2E
-#define GR2F IGS_GR+0x2F
-#define GR30 IGS_GR+0x30
-#define GR31 IGS_GR+0x31
-#define GR32 IGS_GR+0x32
-#define GR33 IGS_GR+0x33
-#define GR34 IGS_GR+0x34
-#define GR35 IGS_GR+0x35
-#define GR36 IGS_GR+0x36
-#define GR37 IGS_GR+0x37
-#define GR38 IGS_GR+0x38
-#define GR39 IGS_GR+0x39
-#define GR3A IGS_GR+0x3A
-#define GR3B IGS_GR+0x3B
-#define GR3C IGS_GR+0x3C
-#define GR3D IGS_GR+0x3D
-#define GR3E IGS_GR+0x3E
-#define GR3F IGS_GR+0x3F
-#define GR40 IGS_GR+0x40
-#define GR41 IGS_GR+0x41
-#define GR42 IGS_GR+0x42
-#define GR43 IGS_GR+0x43
-#define GR44 IGS_GR+0x44
-#define GR45 IGS_GR+0x45
-#define GR46 IGS_GR+0x46
-#define GR47 IGS_GR+0x47
-#define GR48 IGS_GR+0x48
-#define GR49 IGS_GR+0x49
-#define GR4A IGS_GR+0x4A
-#define GR4B IGS_GR+0x4B
-#define GR4C IGS_GR+0x4C
-#define GR4D IGS_GR+0x4D
-#define GR4E IGS_GR+0x4E
-#define GR4F IGS_GR+0x4F
-#define GR50 IGS_GR+0x50
-#define GR51 IGS_GR+0x51
-#define GR52 IGS_GR+0x52
-#define GR53 IGS_GR+0x53
-#define GR54 IGS_GR+0x54
-#define GR55 IGS_GR+0x55
-#define GR56 IGS_GR+0x56
-#define GR57 IGS_GR+0x57
-#define GR58 IGS_GR+0x58
-#define GR59 IGS_GR+0x59
-#define GR5A IGS_GR+0x5A
-#define GR5B IGS_GR+0x5B
-#define GR5C IGS_GR+0x5C
-#define GR5D IGS_GR+0x5D
-#define GR5E IGS_GR+0x5E
-#define GR5F IGS_GR+0x5F
-#define GR60 IGS_GR+0x60
-#define GR61 IGS_GR+0x61
-#define GR62 IGS_GR+0x62
-#define GR63 IGS_GR+0x63
-#define GR64 IGS_GR+0x64
-#define GR65 IGS_GR+0x65
-#define GR66 IGS_GR+0x66
-#define GR67 IGS_GR+0x67
-#define GR68 IGS_GR+0x68
-#define GR69 IGS_GR+0x69
-#define GR6A IGS_GR+0x6A
-#define GR6B IGS_GR+0x6B
-#define GR6C IGS_GR+0x6C
-#define GR6D IGS_GR+0x6D
-#define GR6E IGS_GR+0x6E
-#define GR6F IGS_GR+0x6F
-#define GR70 IGS_GR+0x70
-#define GR71 IGS_GR+0x71
-#define GR72 IGS_GR+0x72
-#define GR73 IGS_GR+0x73
-#define GR74 IGS_GR+0x74
-#define GR75 IGS_GR+0x75
-#define GR76 IGS_GR+0x76
-#define GR77 IGS_GR+0x77
-#define GR78 IGS_GR+0x78
-#define GR79 IGS_GR+0x79
-#define GR7A IGS_GR+0x7A
-#define GR7B IGS_GR+0x7B
-#define GR7C IGS_GR+0x7C
-#define GR7D IGS_GR+0x7D
-#define GR7E IGS_GR+0x7E
-#define GR7F IGS_GR+0x7F
-#define GR80 IGS_GR+0x80
-#define GR81 IGS_GR+0x81
-#define GR82 IGS_GR+0x82
-#define GR83 IGS_GR+0x83
-#define GR84 IGS_GR+0x84
-#define GR85 IGS_GR+0x85
-#define GR86 IGS_GR+0x86
-#define GR87 IGS_GR+0x87
-#define GR88 IGS_GR+0x88
-#define GR89 IGS_GR+0x89
-#define GR8A IGS_GR+0x8A
-#define GR8B IGS_GR+0x8B
-#define GR8C IGS_GR+0x8C
-#define GR8D IGS_GR+0x8D
-#define GR8E IGS_GR+0x8E
-#define GR8F IGS_GR+0x8F
-#define GR90 IGS_GR+0x90
-#define GR91 IGS_GR+0x91
-#define GR92 IGS_GR+0x92
-#define GR93 IGS_GR+0x93
-#define GR94 IGS_GR+0x94
-#define GR95 IGS_GR+0x95
-#define GR96 IGS_GR+0x96
-#define GR97 IGS_GR+0x97
-#define GR98 IGS_GR+0x98
-#define GR99 IGS_GR+0x99
-#define GR9A IGS_GR+0x9A
-#define GR9B IGS_GR+0x9B
-#define GR9C IGS_GR+0x9C
-#define GR9D IGS_GR+0x9D
-#define GR9E IGS_GR+0x9E
-#define GR9F IGS_GR+0x9F
-#define GRA0 IGS_GR+0xA0
-#define GRA1 IGS_GR+0xA1
-#define GRA2 IGS_GR+0xA2
-#define GRA3 IGS_GR+0xA3
-#define GRA4 IGS_GR+0xA4
-#define GRA5 IGS_GR+0xA5
-#define GRA6 IGS_GR+0xA6
-#define GRA7 IGS_GR+0xA7
-#define GRA8 IGS_GR+0xA8
-#define GRA9 IGS_GR+0xA9
-#define GRAA IGS_GR+0xAA
-#define GRAB IGS_GR+0xAB
-#define GRAC IGS_GR+0xAC
-#define GRAD IGS_GR+0xAD
-#define GRAE IGS_GR+0xAE
-#define GRAF IGS_GR+0xAF
-#define GRB0 IGS_GR+0xB0
-#define GRB1 IGS_GR+0xB1
-#define GRB2 IGS_GR+0xB2
-#define GRB3 IGS_GR+0xB3
-#define GRB4 IGS_GR+0xB4
-#define GRB5 IGS_GR+0xB5
-#define GRB6 IGS_GR+0xB6
-#define GRB7 IGS_GR+0xB7
-#define GRB8 IGS_GR+0xB8
-#define GRB9 IGS_GR+0xB9
-#define GRBA IGS_GR+0xBA
-#define GRBB IGS_GR+0xBB
-#define GRBC IGS_GR+0xBC
-#define GRBD IGS_GR+0xBD
-#define GRBE IGS_GR+0xBE
-#define GRBF IGS_GR+0xBF
-
-#define GR_FIRST GR00
-#define GR_LAST GRBF
-
-#define GREX3C IGS_GREX+(0x3c-IGS_GREXBASE)
-
-VgaReg igs_h_total[] = {
- CR00, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_h_de_end[] = {
- CR01, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_h_bstart[] = {
- CR02, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_h_bend[] = {
- CR03, 0, 5,
- CR05, 7, 1,
- VGA_REG_END
-};
-
-VgaReg igs_de_skew[] = {
- CR03, 5, 2,
- VGA_REG_END
-};
-
-VgaReg igs_ena_vr_access[] = {
- CR03, 7, 1,
- VGA_REG_END
-};
-
-VgaReg igs_h_rstart[] = {
- CR04, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_h_rend[] = {
- CR05, 0, 5,
- VGA_REG_END
-};
-
-VgaReg igs_h_rdelay[] = {
- CR05, 5, 2,
- VGA_REG_END
-};
-
-VgaReg igs_v_total[] = {
- CR06, 0, 8,
- CR07, 0, 1,
- CR07, 5, 1,
- GR11, 0, 1,
- VGA_REG_END
-};
-
-VgaReg igs_v_rstart[] = {
- CR10, 0, 8,
- CR07, 2, 1,
- CR07, 7, 1,
- GR11, 2, 1,
- VGA_REG_END
-};
-
-VgaReg igs_v_rend[] = {
- CR11, 0, 4,
- VGA_REG_END
-};
-
-VgaReg igs_clear_v_int[] = {
- CR11, 4, 1,
- VGA_REG_END
-};
-
-VgaReg igs_disable_v_int[] = {
- CR11, 5, 1,
- VGA_REG_END
-};
-
-VgaReg igs_bandwidth[] = {
- CR11, 6, 1,
- VGA_REG_END
-};
-
-VgaReg igs_crt_protect[] = {
- CR11, 7, 1,
- VGA_REG_END
-};
-
-VgaReg igs_v_de_end[] = {
- CR12, 0, 8,
- CR07, 1, 1,
- CR07, 6, 1,
- GR11, 1, 1,
- VGA_REG_END
-};
-
-VgaReg igs_offset[] = {
- CR13, 0, 8,
- GR15, 4, 2,
- VGA_REG_END
-};
-
-VgaReg igs_v_bstart[] = {
- CR15, 0, 8,
- CR07, 3, 1,
- CR09, 5, 1,
- GR11, 3, 1,
- VGA_REG_END
-};
-
-VgaReg igs_v_bend[] = {
- CR16, 0, 7,
- VGA_REG_END
-};
-
-VgaReg igs_linecomp[] = {
- CR18, 0, 8,
- CR07, 4, 1,
- CR09, 6, 1,
- GR11, 4, 1,
- VGA_REG_END
-};
-
-VgaReg igs_ivideo[] = {
- GR11, 5, 1,
- VGA_REG_END
-};
-
-VgaReg igs_num_fetch[] = {
- GR14, 0, 8,
- GR15, 0, 2,
- VGA_REG_END
-};
-
-VgaReg igs_wcrt0[] = {
- CR1F, 0, 1,
- VGA_REG_END
-};
-
-VgaReg igs_wcrt1[] = {
- CR1F, 1, 1,
- VGA_REG_END
-};
-
-VgaReg igs_rcrts1[] = {
- CR1F, 4, 1,
- VGA_REG_END
-};
-
-VgaReg igs_selwk[] = {
- CR1F, 6, 1,
- VGA_REG_END
-};
-
-VgaReg igs_dot_clock_8[] = {
- SR01, 0, 1,
- VGA_REG_END
-};
-
-VgaReg igs_screen_off[] = {
- SR01, 5, 1,
- VGA_REG_END
-};
-
-VgaReg igs_enable_write_plane[] = {
- SR02, 0, 4,
- VGA_REG_END
-};
-
-VgaReg igs_mexhsyn[] = {
- GR16, 0, 2,
- VGA_REG_END
-};
-
-VgaReg igs_mexvsyn[] = {
- GR16, 2, 2,
- VGA_REG_END
-};
-
-VgaReg igs_pci_burst_write[] = {
- GR30, 5, 1,
- VGA_REG_END
-};
-
-VgaReg igs_pci_burst_read[] = {
- GR30, 7, 1,
- VGA_REG_END
-};
-
-VgaReg igs_iow_retry[] = {
- GREX3C, 0, 1,
- VGA_REG_END
-};
-
-VgaReg igs_mw_retry[] = {
- GREX3C, 1, 1,
- VGA_REG_END
-};
-
-VgaReg igs_mr_retry[] = {
- GREX3C, 2, 1,
- VGA_REG_END
-};
-
-
-
-VgaReg igs_biga22en[] = {
- GR3D, 4, 1,
- VGA_REG_END
-};
-
-VgaReg igs_biga24en[] = {
- GR3D, 5, 1,
- VGA_REG_END
-};
-
-VgaReg igs_biga22force[] = {
- GR3D, 6, 1,
- VGA_REG_END
-};
-
-VgaReg igs_bigswap[] = {
- GR3F, 0, 6,
- VGA_REG_END
-};
-
-/* #define IGS_BIGSWAP_8 0x3f */
-/* #define IGS_BIGSWAP_16 0x2a */
-/* #define IGS_BIGSWAP_32 0x00 */
-
-VgaReg igs_sprite_x[] = {
- GR50, 0, 8,
- GR51, 0, 3,
- VGA_REG_END
-};
-
-VgaReg igs_sprite_preset_x[] = {
- GR52, 0, 6,
- VGA_REG_END
-};
-
-VgaReg igs_sprite_y[] = {
- GR53, 0, 8,
- GR54, 0, 3,
- VGA_REG_END
-};
-
-VgaReg igs_sprite_preset_y[] = {
- GR55, 0, 6,
- VGA_REG_END
-};
-
-VgaReg igs_sprite_visible[] = {
- GR56, 0, 1,
- VGA_REG_END
-};
-
-VgaReg igs_sprite_64x64[] = {
- GR56, 1, 1,
- VGA_REG_END
-};
-
-VgaReg igs_mgrext[] = {
- GR57, 0, 1,
- VGA_REG_END
-};
-
-VgaReg igs_hcshf[] = {
- GR57, 4, 2,
- VGA_REG_END
-};
-
-VgaReg igs_mbpfix[] = {
- GR57, 6, 2,
- VGA_REG_END
-};
-
-VgaReg igs_overscan_red[] = {
- GR58, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_overscan_green[] = {
- GR59, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_overscan_blue[] = {
- GR5A, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_memgopg[] = {
- GR73, 2, 1,
- VGA_REG_END
-};
-
-VgaReg igs_memr2wpg[] = {
- GR73, 1, 1,
- VGA_REG_END
-};
-
-VgaReg igs_crtff16[] = {
- GR73, 3, 1,
- VGA_REG_END
-};
-
-VgaReg igs_fifomust[] = {
- GR74, 0, 5,
- VGA_REG_END
-};
-
-VgaReg igs_fifogen[] = {
- GR75, 0, 5,
- VGA_REG_END
-};
-
-VgaReg igs_mode_sel[] = {
- GR77, 0, 4,
- VGA_REG_END
-};
-
-/* #define IGS_MODE_TEXT 0 */
-/* #define IGS_MODE_8 1 */
-/* #define IGS_MODE_565 2 */
-/* #define IGS_MODE_5551 6 */
-/* #define IGS_MODE_8888 3 */
-/* #define IGS_MODE_888 4 */
-/* #define IGS_MODE_332 9 */
-/* #define IGS_MODE_4444 10 */
-
-VgaReg igs_sprite_addr[] = {
- GR7E, 0, 8,
- GR7F, 0, 4,
- VGA_REG_END
-};
-
-VgaReg igs_fastmpie[] = {
- GR9E, 0, 1,
- VGA_REG_END
-};
-
-VgaReg igs_vclk_m[] = {
- GRB0, 0, 8,
- GRBA, 0, 3,
- VGA_REG_END
-};
-
-VgaReg igs_vclk_n[] = {
- GRB1, 0, 5,
- GRBA, 3, 3,
- VGA_REG_END
-};
-
-VgaReg igs_vfsel[] = {
- GRB1, 5, 1,
- VGA_REG_END
-};
-
-VgaReg igs_vclk_p[] = {
- GRB1, 6, 2,
- GRBA, 6, 1,
- VGA_REG_END
-};
-
-VgaReg igs_frqlat[] = {
- GRB9, 7, 1,
- VGA_REG_END
-};
-
-
-VgaReg igs_dac_mask[] = {
- IGS_DAC + 0, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_dac_read_index[] = {
- IGS_DAC + 1, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_dac_write_index[] = {
- IGS_DAC + 2, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_dac_data[] = {
- IGS_DAC + 3, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_rampwdn[] = {
- IGS_DACEX + 0, 0, 1,
- VGA_REG_END
-};
-
-VgaReg igs_dac6_8[] = {
- IGS_DACEX + 0, 1, 1,
- VGA_REG_END
-};
-
-VgaReg igs_ramdacbypass[] = {
- IGS_DACEX + 0, 4, 1,
- VGA_REG_END
-};
-
-VgaReg igs_dacpwdn[] = {
- IGS_DACEX + 0, 6, 1,
- VGA_REG_END
-};
-
-VgaReg igs_cursor_read_index[] = {
- IGS_DACEX + 1, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_cursor_write_index[] = {
- IGS_DACEX + 2, 0, 8,
- VGA_REG_END
-};
-
-VgaReg igs_cursor_data[] = {
- IGS_DACEX + 3, 0, 8,
- VGA_REG_END
-};
-
-VGA8
-_igsInb (VgaCard *card, VGA16 port)
-{
- VGAVOL8 *reg;
-
- if (card->closure)
- return VgaReadMemb ((VGA32) card->closure + port);
- else
- return VgaInb (port);
-}
-
-void
-_igsOutb (VgaCard *card, VGA8 value, VGA16 port)
-{
- if (card->closure)
- VgaWriteMemb (value, (VGA32) card->closure + port);
- else
- VgaOutb (value, port);
-}
-
-void
-_igsRegMap (VgaCard *card, VGA16 reg, VgaMap *map, VGABOOL write)
-{
- if (reg < IGS_SR + IGS_NSR)
- {
- map->access = VgaAccessIndIo;
- map->port = 0x3c4;
- map->addr = 0;
- map->value = 1;
- map->index = reg - IGS_SR;
- }
- else if (reg < IGS_GR + IGS_NGR)
- {
- map->access = VgaAccessIndIo;
- map->port = 0x3ce;
- map->addr = 0;
- map->value = 1;
- map->index = reg - IGS_GR;
- }
- else if (reg < IGS_GREX + IGS_NGREX)
- {
- VGA8 gr33;
-
- map->access = VgaAccessDone;
- _igsOutb (card, 0x33, 0x3ce);
- gr33 = _igsInb (card, 0x3cf);
- _igsOutb (card, gr33 | 0x40, 0x3cf);
- _igsOutb (card, IGS_GREXBASE + reg - IGS_GREX, 0x3ce);
- if (write)
- _igsOutb (card, map->value, 0x3cf);
- else
- map->value = _igsInb (card, 0x3cf);
- _igsOutb (card, 0x33, 0x3ce);
- _igsOutb (card, gr33, 0x3cf);
- return;
- }
- else if (reg < IGS_AR + IGS_NAR)
- {
- reg -= IGS_AR;
- map->access = VgaAccessDone;
- /* reset AFF to index */
- (void) _igsInb (card, 0x3da);
- if (reg >= 16)
- reg |= 0x20;
- _igsOutb (card, reg, 0x3c0);
- if (write)
- _igsOutb (card, map->value, 0x3c0);
- else
- map->value = _igsInb (card, 0x3c1);
- if (!(reg & 0x20))
- {
- /* enable video display again */
- (void) _igsInb (card, 0x3da);
- _igsOutb (card, 0x20, 0x3c0);
- }
- return;
- }
- else if (reg < IGS_CR + IGS_NCR)
- {
- map->access = VgaAccessIndIo;
- map->port = 0x3d4;
- map->addr = 0;
- map->value = 1;
- map->index = reg - IGS_CR;
- }
- else if (reg < IGS_DAC + IGS_NDAC)
- {
- map->access = VgaAccessIo;
- map->port = 0x3c6 + reg - IGS_DAC;
- }
- else if (reg < IGS_DACEX + IGS_NDACEX)
- {
- VGA8 gr56;
- reg = 0x3c6 + reg - IGS_DACEX;
- map->access = VgaAccessDone;
- _igsOutb (card, 0x56, 0x3ce);
- gr56 = _igsInb (card, 0x3cf);
- _igsOutb (card, gr56 | 4, 0x3cf);
- if (write)
- _igsOutb (card, map->value, reg);
- else
- map->value = _igsInb (card, reg);
- _igsOutb (card, gr56, 0x3cf);
- return;
- }
- else switch (reg) {
- case IGS_MISC_OUT:
- map->access = VgaAccessIo;
- if (write)
- map->port = 0x3c2;
- else
- map->port = 0x3cc;
- break;
- case IGS_INPUT_STATUS_1:
- map->access = VgaAccessIo;
- map->port = 0x3da;
- break;
- }
- if (card->closure)
- {
- map->port = map->port + (VGA32) card->closure;
- if (map->access == VgaAccessIo)
- map->access = VgaAccessMem;
- if (map->access == VgaAccessIndIo)
- map->access = VgaAccessIndMem;
- }
-}
-
-VgaSave igsSaves[] = {
- CR00, CR18,
- SR01, SR02,
- GR11, GRBA,
- IGS_MISC_OUT, IGS_MISC_OUT,
- VGA_SAVE_END
-};
-
-void
-igsRegInit (IgsVga *igsvga, VGAVOL8 *mmio)
-{
- igsvga->card.map = _igsRegMap;
- igsvga->card.closure = (void *) mmio;
- igsvga->card.max = IGS_NREG;
- igsvga->card.values = igsvga->values;
- igsvga->card.saves = igsSaves;
-}
-
-void
-igsSave (IgsVga *igsvga)
-{
- igsSetImm (igsvga, igs_wcrt0, 1);
- igsSetImm (igsvga, igs_wcrt1, 1);
- igsSetImm (igsvga, igs_rcrts1, 1);
- igsSetImm (igsvga, igs_selwk, 1);
- VgaPreserve (&igsvga->card);
-}
-
-void
-igsReset (IgsVga *igsvga)
-{
- VgaRestore (&igsvga->card);
- igsSetImm (igsvga, igs_frqlat, 0);
- igsSetImm (igsvga, igs_frqlat, 1);
- igsSetImm (igsvga, igs_frqlat, 0);
- VgaFinish (&igsvga->card);
-}
-
-char *
-igsRegName(char *buf, VGA16 reg)
-{
- if (reg < IGS_SR + IGS_NSR)
- {
- sprintf (buf, " SR%02X", reg - IGS_SR);
- }
- else if (reg < IGS_GR + IGS_NGR)
- {
- sprintf (buf, " GR%02X", reg - IGS_GR);
- }
- else if (reg < IGS_GREX + IGS_NGREX)
- {
- sprintf (buf, " GRX%02X", reg - IGS_GREX + IGS_GREXBASE);
- }
- else if (reg < IGS_AR + IGS_NAR)
- {
- sprintf (buf, " AR%02X", reg - IGS_AR);
- }
- else if (reg < IGS_CR + IGS_NCR)
- {
- sprintf (buf, " CR%02X", reg - IGS_CR);
- }
- else if (reg < IGS_DAC + IGS_NDAC)
- {
- sprintf (buf, " DAC%02X", reg - IGS_DAC);
- }
- else if (reg < IGS_DACEX + IGS_NDACEX)
- {
- sprintf (buf, "DACX%02X", reg - IGS_DACEX);
- }
- else switch (reg) {
- case IGS_MISC_OUT:
- sprintf (buf, "MISC_O");
- break;
- case IGS_INPUT_STATUS_1:
- sprintf (buf, "IN_S_1");
- break;
- }
- return buf;
-}
diff --git a/hw/kdrive/igs/igsreg.h b/hw/kdrive/igs/igsreg.h
deleted file mode 100644
index 2230ff01b..000000000
--- a/hw/kdrive/igs/igsreg.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _IGSREG_H_
-#define _IGSREG_H_
-
-#include "vga.h"
-
-#define IGS_SR 0
-#define IGS_NSR 5
-#define IGS_GR (IGS_SR+IGS_NSR)
-#define IGS_NGR 0xC0
-#define IGS_GREX (IGS_GR+IGS_NGR)
-#define IGS_GREXBASE 0x3c
-#define IGS_NGREX 1
-#define IGS_AR (IGS_GREX+IGS_NGREX)
-#define IGS_NAR 0x15
-#define IGS_CR (IGS_AR+IGS_NAR)
-#define IGS_NCR 0x48
-#define IGS_DAC (IGS_CR+IGS_NCR)
-#define IGS_NDAC 4
-#define IGS_DACEX (IGS_DAC+IGS_NDAC)
-#define IGS_NDACEX 4
-#define IGS_MISC_OUT (IGS_DACEX + IGS_NDACEX)
-#define IGS_INPUT_STATUS_1 (IGS_MISC_OUT+1)
-#define IGS_NREG (IGS_INPUT_STATUS_1+1)
-
-extern VgaReg igs_h_total[];
-extern VgaReg igs_h_de_end[];
-extern VgaReg igs_h_bstart[];
-extern VgaReg igs_h_bend[];
-extern VgaReg igs_de_skew[];
-extern VgaReg igs_ena_vr_access[];
-extern VgaReg igs_h_rstart[];
-extern VgaReg igs_h_rend[];
-extern VgaReg igs_h_rdelay[];
-extern VgaReg igs_v_total[];
-extern VgaReg igs_v_rstart[];
-extern VgaReg igs_v_rend[];
-extern VgaReg igs_clear_v_int[];
-extern VgaReg igs_disable_v_int[];
-extern VgaReg igs_bandwidth[];
-extern VgaReg igs_crt_protect[];
-extern VgaReg igs_v_de_end[];
-extern VgaReg igs_offset[];
-extern VgaReg igs_v_bstart[];
-extern VgaReg igs_v_bend[];
-extern VgaReg igs_linecomp[];
-extern VgaReg igs_ivideo[];
-extern VgaReg igs_num_fetch[];
-extern VgaReg igs_wcrt0[];
-extern VgaReg igs_wcrt1[];
-extern VgaReg igs_rcrts1[];
-extern VgaReg igs_selwk[];
-extern VgaReg igs_dot_clock_8[];
-extern VgaReg igs_screen_off[];
-extern VgaReg igs_enable_write_plane[];
-extern VgaReg igs_mexhsyn[];
-extern VgaReg igs_mexvsyn[];
-extern VgaReg igs_pci_burst_write[];
-extern VgaReg igs_pci_burst_read[];
-extern VgaReg igs_iow_retry[];
-extern VgaReg igs_mw_retry[];
-extern VgaReg igs_mr_retry[];
-extern VgaReg igs_biga22en[];
-extern VgaReg igs_biga24en[];
-extern VgaReg igs_biga22force[];
-extern VgaReg igs_bigswap[];
-#define IGS_BIGSWAP_8 0x3f
-#define IGS_BIGSWAP_16 0x2a
-#define IGS_BIGSWAP_32 0x00
-extern VgaReg igs_sprite_x[];
-extern VgaReg igs_sprite_preset_x[];
-extern VgaReg igs_sprite_y[];
-extern VgaReg igs_sprite_preset_y[];
-extern VgaReg igs_sprite_visible[];
-extern VgaReg igs_sprite_64x64[];
-extern VgaReg igs_mgrext[];
-extern VgaReg igs_hcshf[];
-extern VgaReg igs_mbpfix[];
-extern VgaReg igs_overscan_red[];
-extern VgaReg igs_overscan_green[];
-extern VgaReg igs_overscan_blue[];
-extern VgaReg igs_memgopg[];
-extern VgaReg igs_memr2wpg[];
-extern VgaReg igs_crtff16[];
-extern VgaReg igs_fifomust[];
-extern VgaReg igs_fifogen[];
-extern VgaReg igs_mode_sel[];
-#define IGS_MODE_TEXT 0
-#define IGS_MODE_8 1
-#define IGS_MODE_565 2
-#define IGS_MODE_5551 6
-#define IGS_MODE_8888 3
-#define IGS_MODE_888 4
-#define IGS_MODE_332 9
-#define IGS_MODE_4444 10
-extern VgaReg igs_sprite_addr[];
-extern VgaReg igs_fastmpie[];
-extern VgaReg igs_vclk_m[];
-extern VgaReg igs_vclk_n[];
-extern VgaReg igs_vfsel[];
-extern VgaReg igs_vclk_p[];
-extern VgaReg igs_frqlat[];
-extern VgaReg igs_dac_mask[];
-extern VgaReg igs_dac_read_index[];
-extern VgaReg igs_dac_write_index[];
-extern VgaReg igs_dac_data[];
-extern VgaReg igs_rampwdn[];
-extern VgaReg igs_dac6_8[];
-extern VgaReg igs_ramdacbypass[];
-extern VgaReg igs_dacpwdn[];
-extern VgaReg igs_cursor_read_index[];
-extern VgaReg igs_cursor_write_index[];
-extern VgaReg igs_cursor_data[];
-
-#define igsGet(sv,r) VgaGet(&(sv)->card, (r))
-#define igsGetImm(sv,r) VgaGetImm(&(sv)->card, (r))
-#define igsSet(sv,r,v) VgaSet(&(sv)->card, (r), (v))
-#define igsSetImm(sv,r,v) VgaSetImm(&(sv)->card, (r), (v))
-
-typedef struct _igsVga {
- VgaCard card;
- VgaValue values[IGS_NREG];
-} IgsVga;
-
-void
-igsRegInit (IgsVga *igsvga, VGAVOL8 *mmio);
-
-void
-igsSave (IgsVga *igsvga);
-
-void
-igsReset (IgsVga *igsvga);
-
-#endif /* _IGSREG_H_ */
diff --git a/hw/kdrive/igs/igsstub.c b/hw/kdrive/igs/igsstub.c
deleted file mode 100644
index 1c588271c..000000000
--- a/hw/kdrive/igs/igsstub.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "igs.h"
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
- CARD32 count;
-
- count = 0;
-#ifdef EMBED
- attr.address[0] = 0x10000000; /* Adomo Wing video base address */
- attr.io = 0;
- attr.naddr = 1;
-#else
- while (LinuxFindPci (0x10ea, 0x5000, count, &attr))
-#endif
- {
- KdCardInfoAdd (&igsFuncs, &attr, 0);
- count++;
- }
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg ();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- return KdProcessArgument (argc, argv, i);
-}
diff --git a/hw/kdrive/ipaq/ipaq.c b/hw/kdrive/ipaq/ipaq.c
deleted file mode 100644
index 057b799f4..000000000
--- a/hw/kdrive/ipaq/ipaq.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * Adapted from ts300.c by Alan Hourihane <alanh@fairlite.demon.co.uk>
- * For the Compaq IPAQ handheld, with the HP VGA Out Card (F1252A).
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "pcmcia.h"
-
-extern KdCardFuncs pcmciaFuncs;
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
- if (name && !strcmp(name, "pcmcia"))
- KdCardInfoAdd (&pcmciaFuncs, &attr, 0);
- else
- KdCardInfoAdd (&fbdevFuncs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
-#ifdef TOUCHSCREEN
- KdAddMouseDriver (&TsFuncs);
-#endif
-}
-
-extern pcmciaDisplayModeRec pcmciaDefaultModes[];
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- return KdProcessArgument (argc, argv, i);
-}
diff --git a/hw/kdrive/itsy/itsy.c b/hw/kdrive/itsy/itsy.c
deleted file mode 100644
index 47cc05041..000000000
--- a/hw/kdrive/itsy/itsy.c
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "itsy.h"
-
-/* struct with LCD characteristics defined in fb_brutus.h */
-static struct FbLcdParamsStruct fbLcdParams;
-static int fb_d;
-static int fbn;
-Bool
-itsyCardInit (KdCardInfo *card)
-{
- int k;
- char *fb;
- char *pixels;
-
- if ((fb_d = open("/dev/fbclone", O_RDWR)) < 0) {
- perror("Error opening /dev/fb\n");
- return FALSE;
- }
- if ((k=ioctl(fb_d, FB_LCD_PARAMS, &fbLcdParams)) != 0) {
- perror("Error with /dev/fb ioctl FB_LCD_PARAMS call");
- return FALSE;
- }
-
- fb = (char *) mmap ((caddr_t) NULL, fbLcdParams.frameBufferSize,
- PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fb_d, 0);
-
- fprintf (stderr, "fb mapped at 0x%x\n", fb);
- if (fb == (char *)-1) {
- perror("ERROR: mmap framebuffer fails!");
- return FALSE;
- }
-
- card->driver = fb;
-
- return TRUE;
-}
-
-Bool
-itsyScreenInit (KdScreenInfo *screen)
-{
- CARD8 *fb = screen->card->driver;
-
- screen->width = fbLcdParams.screenSizeH;
- screen->height = fbLcdParams.screenSizeV;
- screen->depth = fbLcdParams.bitsPerPixel;
- screen->bitsPerPixel = fbLcdParams.bitsPerPixel;
- screen->byteStride = fbLcdParams.frameBufferSizeH;
- screen->pixelStride = (fbLcdParams.frameBufferSizeH * 8 /
- fbLcdParams.bitsPerPixel);
- fprintf (stderr, "width %d height %d depth %d pstride %d bstride %d\n",
- screen->width, screen->height, screen->depth,
- screen->pixelStride, screen->byteStride);
- screen->dumb = FALSE;
- screen->softCursor = TRUE;
- screen->blueMask = 0;
- screen->greenMask = 0;
- screen->redMask = 0;
- screen->visuals = 1 << StaticGray;
- screen->rate = 72;
- screen->frameBuffer = (CARD8 *) (fb +
- fbLcdParams.pixelDataOffset +
- (fbLcdParams.reserveTopRows *
- screen->byteStride));
- fprintf (stderr, "Frame buffer 0x%x\n", screen->frameBuffer);
- return TRUE;
-}
-
-static unsigned short itsyIntensity[16] = {
- 0xffff,
- 0xffff,
- 0xedb6,
- 0xdb6d,
- 0xc924,
- 0xb6db,
- 0xa492,
- 0x9249,
- 0x8000,
- 0x6db6,
- 0x5b6d,
- 0x4924,
- 0x36db,
- 0x2492,
- 0x1249,
- 0x0000,
-};
-
-Bool
-itsyCreateColormap (ColormapPtr pmap)
-{
- int i;
-
- for (i = 0; i < 16; i++)
- {
- pmap->red[i].co.local.red = itsyIntensity[i];
- pmap->red[i].co.local.green = itsyIntensity[i];
- pmap->red[i].co.local.blue = itsyIntensity[i];
- }
- return TRUE;
-}
-
-Bool
-itsyInitScreen (ScreenPtr pScreen)
-{
- pScreen->CreateColormap = itsyCreateColormap;
- return TRUE;
-}
-
-void
-itsyPreserve (KdCardInfo *card)
-{
-}
-
-void
-itsyEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
-
- fprintf (stderr, "Enabling LCD display\n");
- /* display it on the LCD */
- ioctl(fb_d, FB_LCD_SHOW, 0);
-}
-
-Bool
-itsyDPMS (ScreenPtr pScreen, int mode)
-{
- if (mode)
- ioctl (fb_d, FB_LCD_OFF, 0);
- else
- ioctl (fb_d, FB_LCD_ON, 0);
- return TRUE;
-}
-
-void
-itsyDisable (ScreenPtr pScreen)
-{
-/* ioctl (fb_d, FB_LCD_SWITCH, 0); */
-/* fprintf (stderr, "Disabling LCD display\n");*/
-}
-
-void
-itsyRestore (KdCardInfo *card)
-{
-}
-
-void
-itsyScreenFini (KdScreenInfo *screen)
-{
-}
-
-void
-itsyCardFini (KdCardInfo *card)
-{
- int k;
-
- fprintf (stderr, "Unmapping driver at 0x%x\n", card->driver);
- munmap (card->driver, fbLcdParams.frameBufferSize);
- fprintf (stderr, "Releasing fbn %d\n", fbn);
- /* release it */
- if (ioctl(fb_d, FB_LCD_FREE, fbn) != 0) {
- printf("FB_LCD_FREE of %d fails!\n", fbn);
- }
- close (fb_d);
- fprintf (stderr, "itsyFini done\n");
-}
-
-KdCardFuncs itsyFuncs = {
- itsyCardInit, /* cardinit */
- itsyScreenInit, /* scrinit */
- itsyInitScreen, /* initScreen */
- itsyPreserve, /* preserve */
- itsyEnable, /* enable */
- itsyDPMS, /* dpms */
- itsyDisable, /* disable */
- itsyRestore, /* restore */
- itsyScreenFini, /* scrfini */
- itsyCardFini, /* cardfini */
-
- 0, /* initCursor */
- 0, /* enableCursor */
- 0, /* disableCursor */
- 0, /* finiCursor */
- 0, /* recolorCursor */
-
- 0, /* initAccel */
- 0, /* enableAccel */
- 0, /* disableAccel */
- 0, /* finiAccel */
-
- 0, /* getColors */
- 0, /* putColors */
-};
-
-void
-InitCard (void)
-{
- KdCardAttr attr;
-
- KdCardInfoAdd (&itsyFuncs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdInitInput (&itsyTsMouseFuncs, &itsyKeyboardFuncs);
-}
-
-int itsySessionFd = -1;
-
-int
-ItsyOsInit (void)
-{
- pid_t sid;
- int i;
- itsy_session_info info;
-
- if (itsySessionFd < 0)
- {
- itsySessionFd = open ("/dev/session", 0);
- ErrorF("itsySessionFD %d\n", itsySessionFd);
- }
-
- (void) setsid ();
- sid = getsid (0);
- ErrorF ("Session ID %d PID %d\n", sid, getpid ());
- info.sid = sid;
- strcpy (info.name, "X");
- if (itsySessionFd >= 0)
- {
- i = ioctl (itsySessionFd, SESSION_SET_INFO, &info);
- if (i < 0)
- perror ("SESSION_SET_INFO");
- }
- return 1;
-}
-
-void
-ItsyOsEnable (void)
-{
- itsy_session_request req;
- int i;
-
-#define MANAGER_SID_TO_FOREGROUND 2
-
- req.operation = MANAGER_SID_TO_FOREGROUND;
- req.data = 0;
- if (itsySessionFd >= 0)
- {
- i = ioctl (itsySessionFd, SESSION_MANAGER_REQUEST, &req);
- if (i < 0)
- perror ("SESSION_MANAGER_REQUEST");
- }
-}
-
-Bool
-ItsyOsSpecialKey (KeySym sym)
-{
- return FALSE;
-}
-
-void
-ItsyOsDisable (void)
-{
-}
-
-void
-ItsyOsFini (void)
-{
-}
-
-KdOsFuncs ItsyOsFuncs = {
- ItsyOsInit,
- ItsyOsEnable,
- ItsyOsSpecialKey,
- ItsyOsDisable,
- ItsyOsFini,
- 0
-};
-
-void
-OsVendorInit (void)
-{
- KdOsInit (&ItsyOsFuncs);
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- return KdProcessArgument (argc, argv, i);
-}
diff --git a/hw/kdrive/itsy/itsy.h b/hw/kdrive/itsy/itsy.h
deleted file mode 100644
index fc8fb8f4f..000000000
--- a/hw/kdrive/itsy/itsy.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "kdrive.h"
-#include <stdio.h>
-#include <sys/ioctl.h>
-#include <linux/itsy_fb.h>
-#include <linux/itsy_ts.h>
-#include <linux/itsy_buttons.h>
-#include <linux/itsy_session.h>
-#include <unistd.h>
-#include <sys/mman.h>
-
-#define FB_HEIGHT 200
-#define FB_WIDTH 320
-#define FB_DEPTH 4
-#define FB_PALETTE_SIZE 16
-
-extern KdMouseFuncs itsyTsMouseFuncs;
-extern KdKeyboardFuncs itsyKeyboardFuncs;
diff --git a/hw/kdrive/itsy/kbd.c b/hw/kdrive/itsy/kbd.c
deleted file mode 100644
index 83ed49e72..000000000
--- a/hw/kdrive/itsy/kbd.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "itsy.h"
-#include <X11/keysym.h>
-#include <linux/itsy_buttons.h>
-
-#define ITSY_WIDTH 2
-
-KeySym ItsyKeymap[] = {
-/* 1 8 */ XK_Escape, NoSymbol,
-/* 2 9 */ XK_1, XK_exclam,
-/* 3 10 */ XK_2, XK_at,
-/* 4 11 */ XK_3, XK_numbersign,
-/* 5 12 */ XK_4, XK_dollar,
-/* 6 13 */ XK_5, XK_percent,
-/* 7 14 */ XK_6, XK_asciicircum,
-/* 8 15 */ XK_7, XK_ampersand,
-/* 9 16 */ XK_8, XK_asterisk,
-/* 10 17 */ XK_9, XK_parenleft,
-/* 11 18 */ XK_0, XK_parenright,
-/* 12 19 */ XK_minus, XK_underscore,
-/* 13 20 */ XK_equal, XK_plus,
-/* 14 21 */ XK_BackSpace, NoSymbol,
-/* 15 22 */ XK_Tab, NoSymbol,
-/* 16 23 */ XK_Q, NoSymbol,
-/* 17 24 */ XK_W, NoSymbol,
-/* 18 25 */ XK_E, NoSymbol,
-/* 19 26 */ XK_R, NoSymbol,
-/* 20 27 */ XK_T, NoSymbol,
-/* 21 28 */ XK_Y, NoSymbol,
-/* 22 29 */ XK_U, NoSymbol,
-/* 23 30 */ XK_I, NoSymbol,
-/* 24 31 */ XK_O, NoSymbol,
-/* 25 32 */ XK_P, NoSymbol,
-/* 26 33 */ XK_bracketleft, XK_braceleft,
-/* 27 34 */ XK_bracketright, XK_braceright,
-/* 28 35 */ XK_Return, NoSymbol,
-/* 29 36 */ XK_Control_L, NoSymbol,
-/* 30 37 */ XK_A, NoSymbol,
-/* 31 38 */ XK_S, NoSymbol,
-/* 32 39 */ XK_D, NoSymbol,
-/* 33 40 */ XK_F, NoSymbol,
-/* 34 41 */ XK_G, NoSymbol,
-/* 35 42 */ XK_H, NoSymbol,
-/* 36 43 */ XK_J, NoSymbol,
-/* 37 44 */ XK_K, NoSymbol,
-/* 38 45 */ XK_L, NoSymbol,
-/* 39 46 */ XK_semicolon, XK_colon,
-/* 40 47 */ XK_apostrophe, XK_quotedbl,
-/* 41 48 */ XK_grave, XK_asciitilde,
-/* 42 49 */ XK_Shift_L, NoSymbol,
-/* 43 50 */ XK_backslash, XK_bar,
-/* 44 51 */ XK_Z, NoSymbol,
-/* 45 52 */ XK_X, NoSymbol,
-/* 46 53 */ XK_C, NoSymbol,
-/* 47 54 */ XK_V, NoSymbol,
-/* 48 55 */ XK_B, NoSymbol,
-/* 49 56 */ XK_N, NoSymbol,
-/* 50 57 */ XK_M, NoSymbol,
-/* 51 58 */ XK_comma, XK_less,
-/* 52 59 */ XK_period, XK_greater,
-/* 53 60 */ XK_slash, XK_question,
-/* 54 61 */ XK_Shift_R, NoSymbol,
-/* 55 62 */ XK_KP_Multiply, NoSymbol,
-/* 56 63 */ XK_Alt_L, XK_Meta_L,
-/* 57 64 */ XK_space, NoSymbol,
-/* 58 65 */ XK_Caps_Lock, NoSymbol,
-/* 59 66 */ XK_F1, NoSymbol,
-/* 60 67 */ XK_F2, NoSymbol,
-/* 61 68 */ XK_F3, NoSymbol,
-/* 62 69 */ XK_F4, NoSymbol,
-/* 63 70 */ XK_F5, NoSymbol,
-/* 64 71 */ XK_F6, NoSymbol,
-/* 65 72 */ XK_F7, NoSymbol,
-/* 66 73 */ XK_F8, NoSymbol,
-/* 67 74 */ XK_F9, NoSymbol,
-/* 68 75 */ XK_F10, NoSymbol,
-/* 69 76 */ XK_Break, XK_Pause,
-/* 70 77 */ XK_Scroll_Lock, NoSymbol,
-/* 71 78 */ XK_KP_Home, XK_KP_7,
-/* 72 79 */ XK_KP_Up, XK_KP_8,
-/* 73 80 */ XK_KP_Page_Up, XK_KP_9,
-/* 74 81 */ XK_KP_Subtract, NoSymbol,
-/* 75 82 */ XK_KP_Left, XK_KP_4,
-/* 76 83 */ XK_KP_5, NoSymbol,
-/* 77 84 */ XK_KP_Right, XK_KP_6,
-/* 78 85 */ XK_KP_Add, NoSymbol,
-/* 79 86 */ XK_KP_End, XK_KP_1,
-/* 80 87 */ XK_KP_Down, XK_KP_2,
-/* 81 88 */ XK_KP_Page_Down, XK_KP_3,
-/* 82 89 */ XK_KP_Insert, XK_KP_0,
-/* 83 90 */ XK_KP_Delete, XK_KP_Decimal,
-/* 84 91 */ NoSymbol, NoSymbol,
-/* 85 92 */ NoSymbol, NoSymbol,
-/* 86 93 */ NoSymbol, NoSymbol,
-/* 87 94 */ XK_F11, NoSymbol,
-/* 88 95 */ XK_F12, NoSymbol,
-
-/* These are remapped from the extended set (using ExtendMap) */
-
-/* 89 96 */ XK_Control_R, NoSymbol,
-/* 90 97 */ XK_KP_Enter, NoSymbol,
-/* 91 98 */ XK_KP_Divide, NoSymbol,
-/* 92 99 */ XK_Sys_Req, XK_Print,
-/* 93 100 */ XK_Alt_R, XK_Meta_R,
-/* 94 101 */ XK_Num_Lock, NoSymbol,
-/* 95 102 */ XK_Home, NoSymbol,
-/* 96 103 */ XK_Up, NoSymbol,
-/* 97 104 */ XK_Page_Up, NoSymbol,
-/* 98 105 */ XK_Left, NoSymbol,
-/* 99 106 */ XK_Right, NoSymbol,
-/* 100 107 */ XK_End, NoSymbol,
-/* 101 108 */ XK_Down, NoSymbol,
-/* 102 109 */ XK_Page_Down, NoSymbol,
-/* 103 110 */ XK_Insert, NoSymbol,
-/* 104 111 */ XK_Delete, NoSymbol,
-/* 105 112 */ XK_Super_L, NoSymbol,
-/* 106 113 */ XK_Super_R, NoSymbol,
-/* 107 114 */ XK_Menu, NoSymbol,
-
-/* Itsy hardware buttons */
-#define ITSY_BUTTON_FIRST 108
-#define ITSY_BUTTON_LAST 116
-
-/* 108 115 */ XK_Next, NoSymbol, /* right button on side */
-/* 109 116 */ XK_Prior, NoSymbol, /* left button on side */
-/* 110 117 */ XK_Up, NoSymbol, /* joypad */
-/* 111 118 */ XK_Down, NoSymbol,
-/* 112 119 */ XK_Left, NoSymbol,
-/* 113 120 */ XK_Right, NoSymbol,
-/* 114 121 */ NoSymbol, NoSymbol, /* left near speaker */
-/* 115 122 */ NoSymbol, NoSymbol, /* right near speaker */
-/* 116 123 */ NoSymbol, NoSymbol, /* tiny button */
-};
-
-static unsigned long itsyButtonState;
-
-void
-ItsyKeyboardLoad (void)
-{
- KeySym *k;
-
-}
-
-static Status
-ItsyKeyboardInit (KdKeyboardInfo *ki)
-{
- if (!ki)
- return BadImplementation;
-
- ki->driverPrivate = open ("/dev/buttons", 0);
-
- itsyButtonState = 0;
- ki->keySyms.minKeyCode = 1;
- ki->keySyms.maxKeyCode = (sizeof (ItsyKeymap) / sizeof (ItsyKeymap[0])) / ITSY_WIDTH;
- ki->minScanCode = ki->keySyms.minKeyCode;
- ki->maxScanCode = ki->keySyms.maxKeyCode;
- ki->keySyms.mapWidth = ITSY_WIDTH;
-
- if (ki->keySyms.map)
- xfree(ki->keySyms.map);
- ki->keySyms.map = xalloc(sizeof(ItsyKeymap));
- if (!ki->keySyms.map)
- return BadAlloc;
- memcpy (kdKeymap, ItsyKeymap, sizeof (ItsyKeymap));
-
- return Success;
-}
-
-static void
-ItsyKeyboardDisable (KdKeybdInfo *ki)
-{
- if (fd >= 0)
- close ((int)ki->driverPrivate);
-}
-
-static void
-ItsyKeyboardFini (KdKeybdInfo *ki)
-{
- return;
-}
-
-void
-ItsyKeyboardRead (int fd)
-{
- itsy_buttons_event event;
- int b;
- unsigned long bit;
- unsigned long change;
- unsigned long buttons;
-
- if (read (fd, &event, sizeof (event)) == sizeof (event))
- {
- buttons = event.state;
- change = buttons ^ itsyButtonState;
- if (!change)
- return;
- for (b = ITSY_BUTTON_FIRST; b <= ITSY_BUTTON_LAST; b++)
- {
- bit = (1 << (b - ITSY_BUTTON_FIRST));
- if (change & bit)
- KdEnqueueKeyboardEvent (b, (buttons & bit) == 0);
- }
- itsyButtonState = buttons;
- }
-}
-
-void
-ItsyKeyboardLeds (int leds)
-{
-}
-
-void
-ItsyKeyboardBell (int volume, int frequency, int duration)
-{
-}
-
-KdKeyboardFuncs itsyKeyboardFuncs = {
- "itsy",
- ItsyKeyboardInit,
- ItsyKeyboardEnable,
- ItsyKeyboardRead,
- ItsyKeyboardLeds,
- ItsyKeyboardBell,
- ItsyKeyboardDisable
- ItsyKeyboardFini,
- NULL,
-};
diff --git a/hw/kdrive/itsy/ts.c b/hw/kdrive/itsy/ts.c
deleted file mode 100644
index 34ff6a880..000000000
--- a/hw/kdrive/itsy/ts.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#define NEED_EVENTS
-#include "itsy.h"
-#include <X11/Xproto.h>
-#include "inputstr.h"
-#include "Xpoll.h"
-
-int
-itsyTsReadBytes (int fd, char *buf, int len, int min)
-{
- int n, tot;
- fd_set set;
- struct timeval tv;
-
- tot = 0;
- while (len)
- {
- n = read (fd, buf, len);
- if (n > 0)
- {
- tot += n;
- buf += n;
- len -= n;
- }
- if (tot % min == 0)
- break;
- FD_ZERO (&set);
- FD_SET (fd, &set);
- tv.tv_sec = 0;
- tv.tv_usec = 100 * 1000;
- n = select (fd + 1, &set, 0, 0, &tv);
- if (n <= 0)
- break;
- }
- return tot;
-}
-
-void
-itsyTsRead (KdPointerInfo *pi, int tsPort)
-{
- ts_event event;
- long buf[3];
- int n;
- long pressure;
- long x, y;
- unsigned long flags;
- unsigned long buttons;
-
- n = itsyTsReadBytes (tsPort, (char *) &event,
- sizeof (event), sizeof (event));
- if (n == sizeof (event))
- {
- if (event.pressure)
- {
- flags = KD_BUTTON_1;
- x = event.point.x;
- y = event.point.y;
- }
- else
- {
- flags = KD_MOUSE_DELTA;
- x = 0;
- y = 0;
- }
- KdEnqueuePointerEvent (pi, flags, x, y, 0);
- }
-}
-
-#if 0
-#define ITSY_DEBUG_LOW 1
-
-//
-// Touch screen parameters are stored
-// in the flash. This code is taken from 'wm1'.
-//
-void itsySetTouchCalibration (int mou_filedsc,
- int xs, int xt, int ys, int yt, int xys)
-{
- int k, ibuf[10];
-
- ibuf[0] = xs;
- ibuf[1] = xt;
- ibuf[2] = ys;
- ibuf[3] = yt;
- ibuf[4] = xys;
- if ((k=ioctl(mou_filedsc, TS_SET_CALM, ibuf)) != 0) {
- fprintf(stderr, "ERROR: ioctl TS_SET_CALM returns %d\n", k);
- }
-}
-
-
-int itsyReadFlashBlock(int location, signed char *data, int dbytes)
-{
- int offset, bytes;
- int flashfd;
-
- flashfd = open("/dev/flash1", O_RDONLY);
- if (flashfd < 0) return(0);
-
- offset = lseek(flashfd, location, SEEK_SET);
- if (offset != location) {
- close(flashfd);
- return(0);
- }
-
- bytes = read(flashfd, data, dbytes);
- if (bytes != dbytes) {
- close(flashfd);
- return(0);
- }
-
- close(flashfd);
- return(1);
-}
-
-/**********************************************************************/
-#define RAMSIZE (0x400000)
-#define MONITOR_BLOCKSIZE (32)
-/**********************************************************************/
-
-/* code for storing calibration into flash */
-
-#define CALIBRATE_BLOCKSIZE (32)
-#define CALIBRATE_OFFSET (RAMSIZE-MONITOR_BLOCKSIZE-CALIBRATE_BLOCKSIZE)
-#define CALIBRATE_MAGIC_NUM (0x0babedee)
-
-
-static int check_if_calibrated_and_set(int mou_filedsc)
-{
- signed char cal_data[CALIBRATE_BLOCKSIZE];
- int *iptr;
-
- if (itsyReadFlashBlock(CALIBRATE_OFFSET,
- cal_data, CALIBRATE_BLOCKSIZE) == 0) {
- if ( ITSY_DEBUG_LOW ) {
- fprintf(stderr,"unable to read calibration data for touch screen\n");
- }
- return(0);
- }
-
- iptr = (int *) cal_data;
- if (iptr[0] == CALIBRATE_MAGIC_NUM) {
- if ( ITSY_DEBUG_LOW ) {
- fprintf(stderr,"Calibrating touch screen using %d, %d, %d, %d, %d\n",
- iptr[1], iptr[2], iptr[3], iptr[4], iptr[5]);
- }
- itsySetTouchCalibration(mou_filedsc, iptr[1], iptr[2], iptr[3], iptr[4], iptr[5]);
- return(1);
- }
- else {
- if ( ITSY_DEBUG_LOW ) {
- fprintf(stderr,"Couldn't calibrate screen\n");
- }
- return(0);
- }
-}
-#endif
-
-int
-itsyTsInit (void)
-{
- int tsPort;
-
- tsPort = open ("/dev/ts", 0);
- fprintf (stderr, "tsPort %d\n", tsPort);
-#if 0
- if (tsPort >= 0)
- check_if_calibrated_and_set (tsPort);
-#endif
- return tsPort;
-}
-
-void
-itsyTsFini (int tsPort)
-{
- if (tsPort >= 0)
- close (tsPort);
-}
-
-KdPointerDriver itsyTsMouseDriver = {
- "itsyts",
- itsyTsInit,
- itsyTsRead,
- itsyTsFini
-};
-
diff --git a/hw/kdrive/mach64/Makefile.am b/hw/kdrive/mach64/Makefile.am
deleted file mode 100644
index 6ca376ab2..000000000
--- a/hw/kdrive/mach64/Makefile.am
+++ /dev/null
@@ -1,43 +0,0 @@
-INCLUDES = \
- @KDRIVE_INCS@ \
- -I$(top_srcdir)/hw/kdrive/vesa \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xmach64
-
-if TSLIB
-TSLIB_FLAG = -lts
-endif
-
-
-noinst_LIBRARIES = libmach64.a
-
-libmach64_a_SOURCES = \
- mach64.c \
- mach64draw.c \
- mach64video.c \
- mach64.h \
- mach64draw.h
-
-Xmach64_SOURCES = \
- mach64stub.c
-
-MACH64_LIBS = \
- libmach64.a \
- $(top_builddir)/hw/kdrive/vesa/libvesa.a
-
-
-if GLX
-Xmach64_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xmach64_LDADD = \
- $(MACH64_LIBS) \
- @KDRIVE_LIBS@
-
-Xmach64_DEPENDENCIES = \
- libmach64.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/mach64/mach64.c b/hw/kdrive/mach64/mach64.c
deleted file mode 100644
index 3c513ba17..000000000
--- a/hw/kdrive/mach64/mach64.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "mach64.h"
-#include "kaa.h"
-
-static Bool
-mach64CardInit (KdCardInfo *card)
-{
- Mach64CardInfo *mach64c;
-
- mach64c = (Mach64CardInfo *) xalloc (sizeof (Mach64CardInfo));
- if (!mach64c)
- return FALSE;
-
- (void) mach64MapReg (card, mach64c);
- mach64c->lcdEnabled = FALSE;
-
- if (!vesaInitialize (card, &mach64c->vesa))
- {
- xfree (mach64c);
- return FALSE;
- }
-
- card->driver = mach64c;
-
- return TRUE;
-}
-
-static Bool
-mach64ScreenInit (KdScreenInfo *screen)
-{
- Mach64CardInfo *mach64c = screen->card->driver;
- Mach64ScreenInfo *mach64s;
-
- mach64s = (Mach64ScreenInfo *) xalloc (sizeof (Mach64ScreenInfo));
- if (!mach64s)
- return FALSE;
- memset (mach64s, '\0', sizeof (Mach64ScreenInfo));
- if (!vesaScreenInitialize (screen, &mach64s->vesa))
- {
- xfree (mach64s);
- return FALSE;
- }
- if (!mach64c->reg)
- screen->dumb = TRUE;
- if (mach64s->vesa.mapping != VESA_LINEAR)
- screen->dumb = TRUE;
- switch (screen->fb[0].depth) {
- case 8:
- mach64s->colorKey = 0xff;
- break;
- case 15:
- case 16:
- mach64s->colorKey = 0x001e;
- break;
- case 24:
- mach64s->colorKey = 0x0000fe;
- break;
- default:
- mach64s->colorKey = 1;
- break;
- }
- screen->driver = mach64s;
- return TRUE;
-}
-
-static Bool
-mach64InitScreen (ScreenPtr pScreen)
-{
-#ifdef XV
- mach64InitVideo(pScreen);
-#endif
- return vesaInitScreen (pScreen);
-}
-
-#ifdef RANDR
-static Bool
-mach64RandRSetConfig (ScreenPtr pScreen,
- Rotation rotation,
- int rate,
- RRScreenSizePtr pSize)
-{
- kaaWaitSync (pScreen);
-
- if (!vesaRandRSetConfig (pScreen, rotation, rate, pSize))
- return FALSE;
-
- return TRUE;
-}
-
-static void
-mach64RandRInit (ScreenPtr pScreen)
-{
- rrScrPriv(pScreen);
-
- pScrPriv->rrSetConfig = mach64RandRSetConfig;
-}
-#endif
-
-static Bool
-mach64FinishInitScreen (ScreenPtr pScreen)
-{
- Bool ret;
- ret = vesaFinishInitScreen (pScreen);
-#ifdef RANDR
- mach64RandRInit (pScreen);
-#endif
- return ret;
-}
-
-static Bool
-mach64CreateResources (ScreenPtr pScreen)
-{
- return vesaCreateResources (pScreen);
-}
-
-CARD32
-mach64ReadLCD (Reg *reg, int id)
-{
- CARD32 LCD_INDEX;
-
- LCD_INDEX = reg->LCD_INDEX & ~(0x3f);
- reg->LCD_INDEX = (LCD_INDEX | id);
- return reg->LCD_DATA;
-}
-
-void
-mach64WriteLCD (Reg *reg, int id, CARD32 data)
-{
- CARD32 LCD_INDEX;
-
- LCD_INDEX = reg->LCD_INDEX & ~(0x3f);
- reg->LCD_INDEX = (LCD_INDEX | id);
- reg->LCD_DATA = data;
-}
-
-void
-mach64Preserve (KdCardInfo *card)
-{
- Mach64CardInfo *mach64c = card->driver;
- Reg *reg = mach64c->reg;
-
- vesaPreserve(card);
- if (reg)
- {
- mach64c->save.LCD_GEN_CTRL = mach64ReadLCD (reg, 1);
- }
-}
-
-Bool
-mach64MapReg (KdCardInfo *card, Mach64CardInfo *mach64c)
-{
- mach64c->reg_base = (CARD8 *) KdMapDevice (MACH64_REG_BASE(card),
- MACH64_REG_SIZE(card));
-
- if (!mach64c->reg_base)
- {
- mach64c->reg = 0;
- mach64c->media_reg = 0;
- return FALSE;
- }
-
- KdSetMappedMode (MACH64_REG_BASE(card),
- MACH64_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- mach64c->reg = (Reg *) (mach64c->reg_base + MACH64_REG_OFF(card));
- mach64c->media_reg = (MediaReg *) (mach64c->reg_base + MACH64_MEDIA_REG_OFF(card));
- return TRUE;
-}
-
-void
-mach64UnmapReg (KdCardInfo *card, Mach64CardInfo *mach64c)
-{
- if (mach64c->reg_base)
- {
- KdResetMappedMode (MACH64_REG_BASE(card),
- MACH64_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- KdUnmapDevice ((void *) mach64c->reg_base, MACH64_REG_SIZE(card));
- mach64c->reg_base = 0;
- mach64c->reg = 0;
- mach64c->media_reg = 0;
- }
-}
-
-void
-mach64SetMMIO (KdCardInfo *card, Mach64CardInfo *mach64c)
-{
- if (!mach64c->reg_base)
- mach64MapReg (card, mach64c);
- if (mach64c->reg)
- {
- if (mach64c->reg->GUI_STAT == 0xffffffff)
- FatalError ("Mach64 REG not visible\n");
- }
-}
-
-void
-mach64ResetMMIO (KdCardInfo *card, Mach64CardInfo *mach64c)
-{
- mach64UnmapReg (card, mach64c);
-}
-
-Bool
-mach64Enable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- Mach64CardInfo *mach64c = pScreenPriv->card->driver;
-
- if (!vesaEnable (pScreen))
- return FALSE;
-
- mach64SetMMIO (pScreenPriv->card, mach64c);
- mach64DPMS (pScreen, KD_DPMS_NORMAL);
-#ifdef XV
- KdXVEnable (pScreen);
-#endif
- return TRUE;
-}
-
-void
-mach64Disable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- Mach64CardInfo *mach64c = pScreenPriv->card->driver;
-
-#ifdef XV
- KdXVDisable (pScreen);
-#endif
- mach64ResetMMIO (pScreenPriv->card, mach64c);
- vesaDisable (pScreen);
-}
-
-const CARD8 mach64DPMSModes[4] = {
- 0x80, /* KD_DPMS_NORMAL */
- 0x8c, /* KD_DPMS_STANDBY */
- 0x8c, /* KD_DPMS_STANDBY */
- 0x8c, /* KD_DPMS_STANDBY */
-/* 0xb0, KD_DPMS_SUSPEND */
-/* 0xbc, KD_DPMS_POWERDOWN */
-};
-
-#define PWR_MGT_ON (1 << 0)
-#define PWR_MGT_MODE (3 << 1)
-#define PWR_MGT_MODE_PIN (0 << 1)
-#define PWR_MGT_MODE_REG (1 << 1)
-#define PWR_MGT_MODE_TIMER (2 << 1)
-#define PWR_MGR_MODE_PCI (3 << 1)
-#define AUTO_PWRUP_EN (1 << 3)
-#define ACTIVITY_PIN_ON (1 << 4)
-#define STANDBY_POL (1 << 5)
-#define SUSPEND_POL (1 << 6)
-#define SELF_REFRESH (1 << 7)
-#define ACTIVITY_PIN_EN (1 << 8)
-#define KEYBD_SNOOP (1 << 9)
-#define DONT_USE_F32KHZ (1 << 10)
-#define TRISTATE_MEM_EN (1 << 11)
-#define LCDENG_TEST_MODE (0xf << 12)
-#define STANDBY_COUNT (0xf << 16)
-#define SUSPEND_COUNT (0xf << 20)
-#define BIASON (1 << 24)
-#define BLON (1 << 25)
-#define DIGON (1 << 26)
-#define PM_D3_RST_ENB (1 << 27)
-#define STANDBY_NOW (1 << 28)
-#define SUSPEND_NOW (1 << 29)
-#define PWR_MGT_STATUS (3 << 30)
-#define PWR_MGT_STATUS_ON (0 << 30)
-#define PWR_MGT_STATUS_STANDBY (1 << 30)
-#define PWR_MGT_STATUS_SUSPEND (2 << 30)
-#define PWR_MGT_STATUS_TRANSITION (3 << 30)
-
-Bool
-mach64DPMS (ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- Mach64CardInfo *mach64c = pScreenPriv->card->driver;
- int hsync_off = 0, vsync_off = 0, blank = 0;
- CARD32 CRTC_GEN_CNTL;
- CARD32 LCD_GEN_CTRL;
- Reg *reg = mach64c->reg;
-
- if (!reg)
- return FALSE;
-
- CRTC_GEN_CNTL = reg->CRTC_GEN_CNTL;
- LCD_GEN_CTRL = mach64ReadLCD (reg, 1);
-
- switch (mode) {
- case KD_DPMS_NORMAL:
- hsync_off = 0;
- vsync_off = 0;
- blank = 0;
- break;
- case KD_DPMS_STANDBY:
- hsync_off = 1;
- vsync_off = 0;
- blank = 1;
- break;
- case KD_DPMS_SUSPEND:
- hsync_off = 0;
- vsync_off = 1;
- blank = 1;
- break;
- case KD_DPMS_POWERDOWN:
- hsync_off = 1;
- vsync_off = 1;
- blank = 1;
- }
-
- if (hsync_off)
- CRTC_GEN_CNTL |= (1 << 2);
- else
- CRTC_GEN_CNTL &= ~(1 << 2);
- if (vsync_off)
- CRTC_GEN_CNTL |= (1 << 3);
- else
- CRTC_GEN_CNTL &= ~(1 << 3);
- if (blank)
- {
- mach64c->lcdEnabled = (LCD_GEN_CTRL & (1 << 1)) != 0;
- LCD_GEN_CTRL &= ~(1 << 1);
- CRTC_GEN_CNTL |= (1 << 6);
-
- }
- else
- {
- if (!(LCD_GEN_CTRL & 3) || mach64c->lcdEnabled)
- LCD_GEN_CTRL |= (1 << 1);
- CRTC_GEN_CNTL &= ~(1 << 6);
- }
-
- kaaWaitSync (pScreen);
-
- mach64WriteLCD (reg, 1, LCD_GEN_CTRL);
-
- reg->CRTC_GEN_CNTL = CRTC_GEN_CNTL;
- return TRUE;
-}
-
-static void
-mach64Restore (KdCardInfo *card)
-{
- Mach64CardInfo *mach64c = card->driver;
- Reg *reg = mach64c->reg;
-
- if (reg)
- {
- mach64WriteLCD (reg, 1, mach64c->save.LCD_GEN_CTRL);
- }
- mach64ResetMMIO (card, mach64c);
- vesaRestore (card);
-}
-
-static void
-mach64ScreenFini (KdScreenInfo *screen)
-{
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
-#ifdef XV
- mach64FiniVideo(screen->pScreen);
-#endif
- vesaScreenFini (screen);
- xfree (mach64s);
- screen->driver = 0;
-}
-
-static void
-mach64CardFini (KdCardInfo *card)
-{
- Mach64CardInfo *mach64c = card->driver;
-
- mach64UnmapReg (card, mach64c);
- vesaCardFini (card);
- xfree (mach64c);
-}
-
-#define mach64CursorInit 0 /* initCursor */
-#define mach64CursorEnable 0 /* enableCursor */
-#define mach64CursorDisable 0 /* disableCursor */
-#define mach64CursorFini 0 /* finiCursor */
-#define mach64RecolorCursor 0 /* recolorCursor */
-
-KdCardFuncs mach64Funcs = {
- mach64CardInit, /* cardinit */
- mach64ScreenInit, /* scrinit */
- mach64InitScreen, /* initScreen */
- mach64FinishInitScreen, /* finishInitScreen */
- mach64CreateResources, /* createRes */
- mach64Preserve, /* preserve */
- mach64Enable, /* enable */
- mach64DPMS, /* dpms */
- mach64Disable, /* disable */
- mach64Restore, /* restore */
- mach64ScreenFini, /* scrfini */
- mach64CardFini, /* cardfini */
-
- mach64CursorInit, /* initCursor */
- mach64CursorEnable, /* enableCursor */
- mach64CursorDisable, /* disableCursor */
- mach64CursorFini, /* finiCursor */
- mach64RecolorCursor, /* recolorCursor */
-
- mach64DrawInit, /* initAccel */
- mach64DrawEnable, /* enableAccel */
- mach64DrawDisable, /* disableAccel */
- mach64DrawFini, /* finiAccel */
-
- vesaGetColors, /* getColors */
- vesaPutColors, /* putColors */
-};
diff --git a/hw/kdrive/mach64/mach64.h b/hw/kdrive/mach64/mach64.h
deleted file mode 100644
index fbb10b2ba..000000000
--- a/hw/kdrive/mach64/mach64.h
+++ /dev/null
@@ -1,653 +0,0 @@
-/*
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _MACH64_H_
-#define _MACH64_H_
-#include <vesa.h>
-#include "kxv.h"
-
-/*
- * offset from ioport beginning
- */
-
-#define MACH64_REG_BASE(c) ((c)->attr.address[1])
-#define MACH64_REG_SIZE(c) (4096)
-
-#define MACH64_REG_OFF(c) (1024)
-#define MACH64_MEDIA_REG_OFF(c) (0)
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-typedef struct _Reg {
- VOL32 CRTC_H_TOTAL_DISP; /* 0x00 */
- VOL32 CRTC_H_SYNC_STRT_WID; /* 0x01 */
- VOL32 CRTC_V_TOTAL_DISP; /* 0x02 */
- VOL32 CRTC_V_SYNC_STRT_WID; /* 0x03 */
- VOL32 CRTC_VLINE_CRNT_VLINE; /* 0x04 */
- VOL32 CRTC_OFF_PITCH; /* 0x05 */
- VOL32 CRTC_INT_CNTL; /* 0x06 */
- VOL32 CRTC_GEN_CNTL; /* 0x07 */
- VOL32 DSP_CONFIG; /* 0x08 */
- VOL32 DSP_ON_OFF; /* 0x09 */
- VOL32 TIMER_CONFIG; /* 0x0a */
- VOL32 MEM_BUF_CNTL; /* 0x0b */
- VOL32 unused0; /* 0x0c */
- VOL32 MEM_ADDR_CONFIG; /* 0x0d */
- VOL32 CRT_TRAP; /* 0x0e */
- VOL32 I2C_CNTL_0; /* 0x0f */
- VOL32 OVR_CLR; /* 0x10 */
- VOL32 OVR_WID_LEFT_RIGHT; /* 0x11 */
- VOL32 OVR_WID_TOP_BOTTOM; /* 0x12 */
- VOL32 VGA_DSP_CONFIG; /* 0x13 */
- VOL32 VGA_DSP_ON_OFF; /* 0x14 */
- VOL32 DSP2_CONFIG; /* 0x15 */
- VOL32 DSP2_ON_OFF; /* 0x16 */
- VOL32 CRTC2_OFF_PITCH; /* 0x17 */
- VOL32 CUR_CLR0; /* 0x18 */
- VOL32 CUR_CLR1; /* 0x19 */
- VOL32 CUR_OFFSET; /* 0x1a */
- VOL32 CUR_HORZ_VERT_POSN; /* 0x1b */
- VOL32 CUR_HORZ_VERT_OFF; /* 0x1c */
- VOL32 TV_OUT_INDEX; /* 0x1d */
- VOL32 GP_IO; /* 0x1e */
- VOL32 HW_DEBUG; /* 0x1f */
- VOL32 SCRATCH_REG0; /* 0x20 */
- VOL32 SCRATCH_REG1;
- VOL32 SCRATCH_REG2;
- VOL32 SCRATCH_REG3;
- VOL32 CLOCK_CNTL;
- VOL32 CONFIG_STAT1;
- VOL32 CONFIG_STAT2;
- VOL32 TV_OUT_DATA;
- VOL32 BUS_CNTL; /* 0x28 */
- VOL32 LCD_INDEX; /* 0x29 */
- VOL32 LCD_DATA; /* 0x2a */
- VOL32 EXT_MEM_CNTL;
- VOL32 MEM_CNTL;
- VOL32 MEM_VGA_WP_SEL;
- VOL32 MEM_VGA_RP_SEL;
- VOL32 I2C_CNTL_1;
- VOL32 DAC_REGS; /* 0x30 */
- VOL32 DAC_CNTL; /* 0x31 */
- VOL32 unused_32;
- VOL32 unused_33;
- VOL32 GEN_TEST_CNTL; /* 0x34 */
- VOL32 CUSTOM_MACRO_CNTL;
- VOL32 unused36;
- VOL32 CONFIG_CNTL;
- VOL32 CONFIG_CHIP_ID;
- VOL32 CONFIG_STAT0;
- VOL32 CRC_SIG;
- VOL32 unused_3b;
- VOL32 unused_3c;
- VOL32 unused_3d;
- VOL32 unused_3e;
- VOL32 unused_3f;
- VOL32 DST_OFF_PITCH; /* 0x40 */
- VOL32 DST_X;
- VOL32 DST_Y;
- VOL32 DST_Y_X;
- VOL32 DST_WIDTH;
- VOL32 DST_HEIGHT;
- VOL32 DST_HEIGHT_WIDTH;
- VOL32 DST_X_WIDTH;
- VOL32 DST_BRES_LNTH;
- VOL32 DST_BRES_ERR;
- VOL32 DST_BRES_INC;
- VOL32 DST_BRES_DEC;
- VOL32 DST_CNTL;
- VOL32 DST_Y_X_ALIAS;
- VOL32 TRAIL_BRES_ERR;
- VOL32 TRAIL_BRES_INC;
- VOL32 TRAIL_BRES_DEC;
- VOL32 LEAD_BRES_LNTH;
- VOL32 Z_OFF_PITCH;
- VOL32 Z_CNTL;
- VOL32 ALPHA_TST_CNTL;
- VOL32 unused55;
- VOL32 SECONDARY_STW_EXP;
- VOL32 SECONDARY_S_X_INC;
- VOL32 SECONDARY_S_Y_INC;
- VOL32 SECONDARY_S_START;
- VOL32 SECONDARY_W_X_INC;
- VOL32 SECONDARY_W_Y_INC;
- VOL32 SECONDARY_W_START;
- VOL32 SECONDARY_T_X_INC;
- VOL32 SECONDARY_T_Y_INC;
- VOL32 SECONDARY_T_START;
- VOL32 SRC_OFF_PITCH;
- VOL32 SRC_X;
- VOL32 SRC_Y;
- VOL32 SRC_Y_X;
- VOL32 SRC_WIDTH1;
- VOL32 SRC_HEIGHT1;
- VOL32 SRC_HEIGHT1_WIDTH1;
- VOL32 SRC_X_START;
- VOL32 SRC_Y_START;
- VOL32 SRC_Y_X_START;
- VOL32 SRC_WIDTH2;
- VOL32 SRC_HEIGHT2;
- VOL32 SRC_HEIGHT2_WIDTH2;
- VOL32 SRC_CNTL;
- VOL32 unused6e;
- VOL32 unused6f;
- union {
- struct {
- VOL32 SCALE_OFF; /* 0x70 */
- VOL32 unused71;
- VOL32 unused72;
- VOL32 unused73;
- VOL32 unused74;
- VOL32 unused75;
- VOL32 unused76;
- VOL32 SCALE_WIDTH;
- VOL32 SCALE_HEIGHT;
- VOL32 unused79;
- VOL32 unused7a;
- VOL32 SCALE_PITCH;
- VOL32 SCALE_X_INC;
- VOL32 SCALE_Y_INC;
- VOL32 SCALE_VACC;
- VOL32 SCALE_3D_CNTL; /* 0x7f */
- } scaler;
- struct {
- VOL32 TEX_0_OFF; /* 0x70 */
- VOL32 TEX_1_OFF;
- VOL32 TEX_2_OFF;
- VOL32 TEX_3_OFF;
- VOL32 TEX_4_OFF;
- VOL32 TEX_5_OFF;
- VOL32 TEX_6_OFF;
- VOL32 TEX_7_OFF;
- VOL32 TEX_8_OFF;
- VOL32 TEX_9_OFF;
- VOL32 TEX_10_OFF;
- VOL32 S_Y_INC;
- VOL32 RED_X_INC;
- VOL32 GREEN_X_INC; /* 0x7d */
- VOL32 unused7e;
- VOL32 unused7f;
- } texture;
- } u;
- VOL32 HOST_DATA[16]; /* 0x80 */
- VOL32 HOST_CNTL; /* 0x90 */
- VOL32 BM_HOSTDATA; /* 0x91 */
- VOL32 BM_ADDR; /* 0x92 */
- VOL32 BM_GUI_TABLE_CMD; /* 0x93 */
- VOL32 unused94; /* 0x94 */
- VOL32 unused95; /* 0x95 */
- VOL32 unused96; /* 0x96 */
- VOL32 FOG_TABLE_INDEX; /* 0x97 */
- VOL32 FOG_TABLE_DATA[8]; /* 0x98 */
- VOL32 PAT_REG0; /* 0xa0 */
- VOL32 PAT_REG1;
- VOL32 PAT_CNTL;
- VOL32 unused_0a3;
- VOL32 unused_0a4;
- VOL32 unused_0a5;
- VOL32 unused_0a6;
- VOL32 unused_0a7;
- VOL32 SC_LEFT;
- VOL32 SC_RIGHT;
- VOL32 SC_LEFT_RIGHT;
- VOL32 SC_TOP;
- VOL32 SC_BOTTOM;
- VOL32 SC_TOP_BOTTOM;
- VOL32 USR1_DST_OFF_PITCH;
- VOL32 USR2_DST_OFF_PITCH;
- VOL32 DP_BKGD_CLR; /* 0xb0 */
- VOL32 DP_FRGD_CLR;
- VOL32 DP_WRITE_MSK;
- VOL32 unused_0b3;
- VOL32 DP_PIX_WIDTH;
- VOL32 DP_MIX;
- VOL32 DP_SRC;
- VOL32 DP_FRGD_CLR_MIX;
- VOL32 DP_FRGD_BKGD_CLR;
- VOL32 unused_0b9;
- VOL32 DST_X_Y;
- VOL32 DST_WIDTH_HEIGHT;
- VOL32 USR_DST_PITCH;
- VOL32 unused_0bd;
- VOL32 DP_SET_GUI_ENGINE2;
- VOL32 DP_SET_GUI_ENGINE;
- VOL32 CLR_CMP_CLR; /* 0xc0 */
- VOL32 CLR_CMP_MSK;
- VOL32 CLR_CMP_CNTL;
- VOL32 unused_0c3;
- VOL32 FIFO_STAT;
- VOL32 unused_0c5;
- VOL32 unused_0c6;
- VOL32 unused_0c7;
- VOL32 unused_0c8;
- VOL32 unused_0c9;
- VOL32 unused_0ca;
- VOL32 unused_0cb;
- VOL32 GUI_TRAJ_CNTL;
- VOL32 unused_0cd;
- VOL32 GUI_STAT;
- VOL32 unused_0cf;
- VOL32 TEX_PALETTE_INDEX;
- VOL32 STW_EXP;
- VOL32 LOG_MAX_INC;
- VOL32 S_X_INC;
- VOL32 S_Y_INC_2_SCALE_PITCH;
- VOL32 S_START;
- VOL32 W_X_INC;
- VOL32 W_Y_INC;
- VOL32 W_START;
- VOL32 T_X_INC;
- VOL32 T_Y_INC_SECONDARY_SCALE_PITCH;
- VOL32 T_START;
- VOL32 TEX_SIZE_PITCH;
- VOL32 TEX_CNTL;
- VOL32 SECONDARY_TEX_OFFSET_SECONDARY_SCALE_OFF;
- VOL32 TEX_PALETTE;
- VOL32 SCALE_PITCH_BOTH; /* 0xe0 */
- VOL32 SECONDARY_SCALE_OFF_ACC;
- VOL32 SCALE_OFF_ACC;
- VOL32 SCALE_DST_Y_X;
- VOL32 unused_0e4;
- VOL32 unused_0e5;
- VOL32 COMPOSITE_SHADOW_ID;
- VOL32 SECONDARY_SCALE_X_INC_SPECULAR_RED_X_INC;
- VOL32 SPECULAR_RED_Y_INC;
- VOL32 SPECULAR_RED_START_SECONDARY_SCALE_HACC;;
- VOL32 SPECULAR_GREEN_X_INC;
- VOL32 SPECULAR_GREEN_Y_INC;
- VOL32 SPECULAR_GREEN_START;
- VOL32 SPECULAR_BLUE_X_INC;
- VOL32 SPECULAR_BLUE_Y_INC;
- VOL32 SPECULAR_BLUE_START;
- VOL32 RED_X_INC_SCALE_X_INC;
- VOL32 RED_Y_INC;
- VOL32 RED_START_SCALE_HACC;
- VOL32 GREEN_X_INC_SCALE_Y_INC;
- VOL32 GREEN_Y_INC_SECONDARY_SCALE_Y_INC;
- VOL32 GREEN_START_SECONDARY_SCALE_VACC;
- VOL32 BLUE_X_INC;
- VOL32 BLUE_Y_INC;
- VOL32 BLUE_START;
- VOL32 Z_X_INC;
- VOL32 Z_Y_INC;
- VOL32 Z_START;
- VOL32 ALPHA_X_INC;
- VOL32 FOG_X_INC;
- VOL32 ALPHA_Y_INC;
- VOL32 FOG_Y_INC;
- VOL32 ALPHA_START;
- VOL32 FOG_START;
- VOL32 unused_0ff;
-} Reg; /* 0x100 */
-
-#define DST_X_DIR (1 << 0)
-#define DST_Y_DIR (1 << 1)
-#define DST_Y_MAJOR (1 << 2)
-#define DST_X_TILE (1 << 3)
-#define DST_Y_TILE (1 << 4)
-#define DST_LAST_PEL (1 << 5)
-#define DST_POLYGON_EN (1 << 6)
-#define DST_24_ROT_EN (1 << 7)
-#define DST_24_ROT(n) ((n) << 8)
-#define DST_BRES_ZERO (1 << 11)
-#define DST_POLYGON_RTEDGE_DIS (1 << 12)
-#define TRAIL_X_DIR (1 << 13)
-#define TRAP_FILL_DIR (1 << 14)
-#define TRAIL_BRES_SIGN (1 << 15)
-#define SRC_PATT_EN (1 << 16)
-#define SRC_PATT_ROT_EN (1 << 17)
-#define SRC_LINEAR_EN (1 << 18)
-#define SRC_BYTE_ALIGN (1 << 19)
-#define SRC_LINE_X_DIR (1 << 20)
-#define SRC_8x8x8_BRUSH (1 << 21)
-#define FAST_FILL_EN (1 << 22)
-#define SRC_TRACK_DST (1 << 23)
-#define PAT_MONO_EN (1 << 24)
-#define PAT_CLR_4x2_EN (1 << 25)
-#define PAT_CLR_8x1_EN (1 << 26)
-#define HOST_BYTE_ALIGN (1 << 28)
-#define HOST_BIG_ENDIAN_EN (1 << 29)
-
-/* BUS_CNTL bits */
-#define BUS_DBL_RESYNC (1 << 0)
-#define BUS_MSTR_RESET (1 << 1)
-#define BUS_FLUSH_BUF (1 << 2)
-#define BUS_STOP_REQ_DIS (1 << 3)
-#define BUS_APER_REG_DIS (1 << 4)
-#define BUS_EXTRA_PIPE_DIS (1 << 5)
-#define BUS_MASTER_DIS (1 << 6)
-#define ROM_WRT_EN (1 << 7)
-#define CHIP_HIDDEN_REV (3 << 8)
-#define BUS_PCI_READ_RETRY_EN (1 << 13)
-#define BUS_PCI_WRT_RETRY_EN (1 << 15)
-#define BUS_RETRY_WS (0xf << 16)
-#define BUS_MSTR_RD_MULT (1 << 20)
-#define BUS_MSTR_RD_LINE (1 << 21)
-#define BUS_SUSPEND (1 << 22)
-#define LAT16X (1 << 23)
-#define BUS_RD_DISCARD_EN (1 << 24)
-#define BUS_RD_ABORT_EN (1 << 25)
-#define BUS_MSTR_WS (1 << 26)
-#define BUS_EXT_REG_EN (1 << 27)
-#define BUS_MSTR_DISCONNECT_EN (1 << 28)
-#define BUS_WRT_BURST (1 << 29)
-#define BUS_READ_BURST (1 << 30)
-#define BUS_RDY_READ_DLY (1 << 31)
-
-#define SCALE_PIX_EXPAND (1 << 0)
-#define SCALE_Y2R_TEMP (1 << 1)
-#define SCALE_HORZ_MODE (1 << 2)
-#define SCALE_VERT_MODE (1 << 3)
-#define SCALE_SIGNED_UV (1 << 4)
-#define SCALE_GAMMA_SEL (3 << 5)
-#define SCALE_GAMMA_BRIGHT (0 << 5)
-#define SCALE_GAMMA_22 (1 << 5)
-#define SCALE_GAMMA_18 (2 << 5)
-#define SCALE_GAMMA_14 (3 << 5)
-#define SCALE_DISP_SEL (1 << 7)
-#define SCALE_BANDWIDTH (1 << 26)
-#define SCALE_DIS_LIMIT (1 << 27)
-#define SCALE_CLK_FORCE_ON (1 << 29)
-#define SCALE_OVERLAY_EN (1 << 30)
-#define SCALE_EN (1 << 31)
-
-#define VIDEO_IN_VYUY422 (0xb)
-#define VIDEO_IN_YVYU422 (0xc)
-#define SCALER_IN_15bpp (0x3 << 16)
-#define SCALER_IN_16bpp (0x4 << 16)
-#define SCALER_IN_32bpp (0x6 << 16)
-#define SCALER_IN_YUV_9 (0x9 << 16)
-#define SCALER_IN_YUV_12 (0xa << 16)
-#define SCALER_IN_VYUY422 (0xb << 16)
-#define SCALER_IN_YVYU422 (0xc << 16)
-
-#define CAP_INPUT_MODE (1 << 0)
-#define CAP_BUF_MODE (1 << 2)
-#define CAP_START_BUF (1 << 3)
-#define CAP_BUF_TYPE_FIELD (0 << 4)
-#define CAP_BUF_TYPE_ALTERNATING (1 << 4)
-#define CAP_BUF_TYPE_FRAME (2 << 4)
-
-#define OVL_BUF_MODE (1 << 28)
-#define OVL_BUF_NEXT (1 << 29)
-
-#define CAP_TRIGGER (3 << 0)
-#define OVL_CUR_BUF (1 << 5)
-#define OVL_BUF_STATUS (1 << 6)
-#define CAP_BUF_STATUS (1 << 7)
-#define CAPTURE_EN (1 << 31)
-
-typedef struct _MediaReg {
- VOL32 OVERLAY_Y_X_START; /* 0x100 */
- VOL32 OVERLAY_Y_X_END;
- VOL32 OVERLAY_VIDEO_KEY_CLR;
- VOL32 OVERLAY_VIDEO_KEY_MSK;
- VOL32 OVERLAY_GRAPHICS_KEY_CLR;
- VOL32 OVERLAY_GRAPHICS_KEY_MSK;
- VOL32 OVERLAY_KEY_CNTL;
- VOL32 unused_107;
- VOL32 OVERLAY_SCALE_INC;
- VOL32 OVERLAY_SCALE_CNTL;
- VOL32 SCALER_HEIGHT_WIDTH;
- VOL32 SCALER_TEST;
- VOL32 unused_10c;
- VOL32 SCALER_BUF0_OFFSET;
- VOL32 SCALER_BUF1_OFFSET;
- VOL32 SCALER_BUF_PITCH;
- VOL32 CAPTURE_START_END; /* 0x110 */
- VOL32 CAPTURE_X_WIDTH;
- VOL32 VIDEO_FORMAT;
- VOL32 VBI_START_END;
- VOL32 CAPTURE_CONFIG;
- VOL32 TRIG_CNTL;
- VOL32 OVERLAY_EXCLUSIVE_HORZ;
- VOL32 OVERLAY_EXCLUSIVE_VERT;
- VOL32 VBI_WIDTH;
- VOL32 CAPTURE_DEBUG;
- VOL32 VIDEO_SYNC_TEST;
- VOL32 unused_11b;
- VOL32 SNAPSHOT_VH_COUNTS;
- VOL32 SNAPSHOT_F_COUNT;
- VOL32 N_VIF_COUNT;
- VOL32 SNAPSHOT_VIF_COUNT;
- VOL32 CAPTURE_BUF0_OFFSET; /* 0x120 */
- VOL32 CAPTURE_BUF1_OFFSET;
- VOL32 ONESHOT_BUF_OFFSET;
- VOL32 unused_123;
- VOL32 unused_124;
- VOL32 unused_125;
- VOL32 unused_126;
- VOL32 unused_127;
- VOL32 unused_128;
- VOL32 unused_129;
- VOL32 unused_12a;
- VOL32 unused_12b;
- VOL32 SNAPSHOT2_VH_COUNTS;
- VOL32 SNAPSHOT2_F_COUNT;
- VOL32 N_VIF2_COUNT;
- VOL32 SNAPSHOT2_VIF_COUNT;
- VOL32 MPP_CONFIG; /* 0x130 */
- VOL32 MPP_STROBE_SEQ;
- VOL32 MPP_ADDR;
- VOL32 MPP_DATA;
- VOL32 unused_134;
- VOL32 unused_135;
- VOL32 unused_136;
- VOL32 unused_137;
- VOL32 unused_138;
- VOL32 unused_139;
- VOL32 unused_13a;
- VOL32 unused_13b;
- VOL32 unused_13c;
- VOL32 unused_13d;
- VOL32 unused_13e;
- VOL32 unused_13f;
- VOL32 TVO_CNTL; /* 0x140 */
- VOL32 unused_141[15];
- VOL32 unused_150; /* 0x150 */
- VOL32 CRT_HORZ_VERT_LOAD; /* 0x151 */
- VOL32 AGP_BASE; /* 0x152 */
- VOL32 AGP_CNTL; /* 0x153 */
- VOL32 SCALER_COLOUR_CNTL; /* 0x154 */
- VOL32 SCALER_H_COEFF0; /* 0x155 */
- VOL32 SCALER_H_COEFF1; /* 0x156 */
- VOL32 SCALER_H_COEFF2; /* 0x157 */
- VOL32 SCALER_H_COEFF3; /* 0x158 */
- VOL32 SCALER_H_COEFF4; /* 0x159 */
- VOL32 unused_15a;
- VOL32 unused_15b;
- VOL32 GUI_CMDFIFO_DEBUG;
- VOL32 GUI_CMDFIFO_DATA;
- VOL32 GUI_CNTL;
- VOL32 unused_15f;
- VOL32 BM_FRAME_BUF_OFFSET; /* 0x160 */
- VOL32 BM_SYSTEM_MEM_ADDR;
- VOL32 BM_COMMAND;
- VOL32 BM_STATUS;
- VOL32 unused_164[10];
- VOL32 BM_GUI_TABLE;
- VOL32 BM_SYSTEM_TABLE;
- VOL32 unused_170[5]; /* 0x170 */
- VOL32 SCALER_BUF0_OFFSET_U;
- VOL32 SCALER_BUF0_OFFSET_V;
- VOL32 SCALER_BUF1_OFFSET_U;
- VOL32 SCALER_BUF1_OFFSET_V;
- VOL32 unused_179[7];
- VOL32 unused_180[16]; /* 0x180 */
- VOL32 setup_engine[0x40]; /* 0x190 */
- VOL32 dvd_subpicture[0x30]; /* 0x1d0 */
-} MediaReg;
-
-#define MACH64_XY(x,y) (((x) & 0x7fff) | (((y) & 0x7fff) << 16))
-#define MACH64_YX(x,y) (((y) & 0x7fff) | (((x) & 0x7fff) << 16))
-
-typedef struct _mach64Save {
- CARD32 LCD_GEN_CTRL;
-} Mach64Save;
-
-typedef struct _mach64CardInfo {
- VesaCardPrivRec vesa;
- CARD8 *reg_base;
- Reg *reg;
- MediaReg *media_reg;
- Mach64Save save;
- Bool lcdEnabled;
-} Mach64CardInfo;
-
-#define getMach64CardInfo(kd) ((Mach64CardInfo *) ((kd)->card->driver))
-#define mach64CardInfo(kd) Mach64CardInfo *mach64c = getMach64CardInfo(kd)
-
-typedef struct _mach64Cursor {
- int width, height;
- int xhot, yhot;
- Bool has_cursor;
- CursorPtr pCursor;
- Pixel source, mask;
-} Mach64Cursor;
-
-#define MACH64_CURSOR_WIDTH 64
-#define MACH64_CURSOR_HEIGHT 64
-
-/*
- * Xv information, optional
- */
-typedef struct _mach64PortPriv {
- CARD32 YBuf0Offset;
-
- CARD32 YBuf1Offset;
-
- CARD8 currentBuf;
-
- int brightness;
- int saturation;
-
- RegionRec clip;
- CARD32 colorKey;
-
- Bool videoOn;
- Time offTime;
- Time freeTime;
- CARD32 size;
- CARD32 offset;
- KdOffscreenArea *off_screen;
-} Mach64PortPrivRec, *Mach64PortPrivPtr;
-
-Bool mach64InitVideo(ScreenPtr pScreen);
-void mach64FiniVideo(ScreenPtr pScreen);
-
-/*
- * These values are per-format, which is essentially per-depth/per-bpp.
- * Because bpp is fixed for the screen by depth, they're computed
- * per-screen per-depth.
- */
-
-typedef struct _mach64ScreenInfo {
- VesaScreenPrivRec vesa;
- Mach64Cursor cursor;
- CARD32 colorKey;
- KdVideoAdaptorPtr pAdaptor;
- KaaScreenInfoRec kaa;
-} Mach64ScreenInfo;
-
-#define getMach64ScreenInfo(kd) ((Mach64ScreenInfo *) ((kd)->screen->driver))
-#define mach64ScreenInfo(kd) Mach64ScreenInfo *mach64s = getMach64ScreenInfo(kd)
-
-CARD32
-mach64ReadLCD (Reg *reg, int id);
-
-void
-mach64WriteLCD (Reg *reg, int id, CARD32 data);
-
-void
-mach64Preserve (KdCardInfo *card);
-
-Bool
-mach64MapReg (KdCardInfo *card, Mach64CardInfo *mach64c);
-
-void
-mach64UnmapReg (KdCardInfo *card, Mach64CardInfo *mach64c);
-
-void
-mach64SetMMIO (KdCardInfo *card, Mach64CardInfo *mach64c);
-
-void
-mach64ResetMMIO (KdCardInfo *card, Mach64CardInfo *mach64c);
-
-Bool
-mach64Enable (ScreenPtr pScreen);
-
-void
-mach64Disable (ScreenPtr pScreen);
-
-Bool
-mach64DPMS (ScreenPtr pScreen, int mode);
-
-void
-mach64WaitAvail(Reg *reg, int n);
-
-void
-mach64WaitIdle (Reg *reg);
-
-Bool
-mach64DrawSetup (ScreenPtr pScreen);
-
-Bool
-mach64DrawInit (ScreenPtr pScreen);
-
-void
-mach64DrawReinit (ScreenPtr pScreen);
-
-void
-mach64DrawEnable (ScreenPtr pScreen);
-
-void
-mach64DrawDisable (ScreenPtr pScreen);
-
-void
-mach64DrawFini (ScreenPtr pScreen);
-
-CARD8
-mach64ReadIndex (Mach64CardInfo *mach64c, CARD16 port, CARD8 index);
-
-void
-mach64WriteIndex (Mach64CardInfo *mach64c, CARD16 port, CARD8 index, CARD8 value);
-
-Bool
-mach64CursorInit (ScreenPtr pScreen);
-
-void
-mach64CursorEnable (ScreenPtr pScreen);
-
-void
-mach64CursorDisable (ScreenPtr pScreen);
-
-void
-mach64CursorFini (ScreenPtr pScreen);
-
-void
-mach64RecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef);
-
-extern KdCardFuncs mach64Funcs;
-
-#endif /* _MACH64_H_ */
diff --git a/hw/kdrive/mach64/mach64curs.c b/hw/kdrive/mach64/mach64curs.c
deleted file mode 100644
index 4a5938162..000000000
--- a/hw/kdrive/mach64/mach64curs.c
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "trident.h"
-#include "cursorstr.h"
-
-#define SetupCursor(s) KdScreenPriv(s); \
- tridentCardInfo(pScreenPriv); \
- tridentScreenInfo(pScreenPriv); \
- TridentCursor *pCurPriv = &tridents->cursor
-
-static void
-_tridentMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CARD8 xlow, xhigh, ylow, yhigh;
- CARD8 xoff, yoff;
-
- x -= pCurPriv->xhot;
- xoff = 0;
- if (x < 0)
- {
- xoff = -x;
- x = 0;
- }
- y -= pCurPriv->yhot;
- yoff = 0;
- if (y < 0)
- {
- yoff = -y;
- y = 0;
- }
- xlow = (CARD8) x;
- xhigh = (CARD8) (x >> 8);
- ylow = (CARD8) y;
- yhigh = (CARD8) (y >> 8);
-
-
- /* This is the recommended order to move the cursor */
-
- tridentWriteIndex (tridentc, 0x3d4, 0x41, xhigh);
- tridentWriteIndex (tridentc, 0x3d4, 0x40, xlow);
- tridentWriteIndex (tridentc, 0x3d4, 0x42, ylow);
- tridentWriteIndex (tridentc, 0x3d4, 0x46, xoff);
- tridentWriteIndex (tridentc, 0x3d4, 0x47, yoff);
- tridentWriteIndex (tridentc, 0x3d4, 0x43, yhigh);
-}
-
-static void
-tridentMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor (pScreen);
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- _tridentMoveCursor (pScreen, x, y);
-}
-
-static void
-tridentAllocCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
-
- KdAllocateCursorPixels (pScreen, 0, pCursor,
- &pCurPriv->source, &pCurPriv->mask);
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 4:
- pCurPriv->source |= pCurPriv->source << 4;
- pCurPriv->mask |= pCurPriv->mask << 4;
- case 8:
- pCurPriv->source |= pCurPriv->source << 8;
- pCurPriv->mask |= pCurPriv->mask << 8;
- case 16:
- pCurPriv->source |= pCurPriv->source << 16;
- pCurPriv->mask |= pCurPriv->mask << 16;
- }
-}
-
-static void
-tridentSetCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CARD32 fg, bg;
-
- fg = pCurPriv->source;
- bg = pCurPriv->mask;
- tridentWriteIndex (tridentc, 0x3d4, 0x48, fg);
- tridentWriteIndex (tridentc, 0x3d4, 0x49, fg >> 8);
- tridentWriteIndex (tridentc, 0x3d4, 0x4a, fg >> 16);
-
- tridentWriteIndex (tridentc, 0x3d4, 0x4c, bg);
- tridentWriteIndex (tridentc, 0x3d4, 0x4d, bg >> 8);
- tridentWriteIndex (tridentc, 0x3d4, 0x4e, bg >> 16);
-}
-
-void
-tridentRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- xColorItem sourceColor, maskColor;
-
- if (!pCurPriv->has_cursor || !pCursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pdef)
- {
- while (ndef)
- {
- if (pdef->pixel == pCurPriv->source ||
- pdef->pixel == pCurPriv->mask)
- break;
- ndef--;
- }
- if (!ndef)
- return;
- }
- tridentAllocCursorColors (pScreen);
- tridentSetCursorColors (pScreen);
-}
-
-#define InvertBits32(v) { \
- v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \
- v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \
- v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \
-}
-
-static void
-tridentLoadCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- int w, h;
- CARD32 *ram, *msk, *mskLine, *src, *srcLine;
- int i, j;
- int cursor_address;
- int lwsrc;
- unsigned char ramdac_control_;
- CARD32 offset;
-
- /*
- * Allocate new colors
- */
- tridentAllocCursorColors (pScreen);
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- /*
- * Stick new image into cursor memory
- */
- ram = (CARD32 *) tridents->cursor_base;
- mskLine = (CARD32 *) bits->mask;
- srcLine = (CARD32 *) bits->source;
-
- h = bits->height;
- if (h > TRIDENT_CURSOR_HEIGHT)
- h = TRIDENT_CURSOR_HEIGHT;
-
- lwsrc = BitmapBytePad(bits->width) / 4; /* words per line */
-
- for (i = 0; i < TRIDENT_CURSOR_HEIGHT; i++) {
- msk = mskLine;
- src = srcLine;
- mskLine += lwsrc;
- srcLine += lwsrc;
- for (j = 0; j < TRIDENT_CURSOR_WIDTH / 32; j++) {
-
- CARD32 m, s;
-
-#if 1
- if (i < h && j < lwsrc)
- {
- m = *msk++;
- s = *src++;
- InvertBits32(m);
- InvertBits32(s);
- }
- else
- {
- m = 0;
- s = 0;
- }
-#endif
- *ram++ = m;
- *ram++ = s;
- }
- }
-
- /* Set address for cursor bits */
- offset = tridents->cursor_base - (CARD8 *) tridents->screen;
- offset >>= 10;
- tridentWriteIndex (tridentc, 0x3d4, 0x44, (CARD8) (offset & 0xff));
- tridentWriteIndex (tridentc, 0x3d4, 0x45, (CARD8) (offset >> 8));
-
- /* Set new color */
- tridentSetCursorColors (pScreen);
-
- /* Enable the cursor */
- tridentWriteIndex (tridentc, 0x3d4, 0x50, 0xc1);
-
- /* Move to new position */
- tridentMoveCursor (pScreen, x, y);
-}
-
-static void
-tridentUnloadCursor (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- /* Disable cursor */
- tridentWriteIndex (tridentc, 0x3d4, 0x50, 0);
-}
-
-static Bool
-tridentRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- SetupCursor(pScreen);
-
- if (!pScreenPriv->enabled)
- return TRUE;
-
- /* miRecolorCursor does this */
- if (pCurPriv->pCursor == pCursor)
- {
- if (pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- tridentLoadCursor (pScreen, x, y);
- }
- }
- return TRUE;
-}
-
-static Bool
-tridentUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- return TRUE;
-}
-
-static void
-tridentSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
-{
- SetupCursor(pScreen);
-
- pCurPriv->pCursor = pCursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCursor)
- tridentLoadCursor (pScreen, x, y);
- else
- tridentUnloadCursor (pScreen);
-}
-
-miPointerSpriteFuncRec tridentPointerSpriteFuncs = {
- tridentRealizeCursor,
- tridentUnrealizeCursor,
- tridentSetCursor,
- tridentMoveCursor,
-};
-
-static void
-tridentQueryBestSize (int class,
- unsigned short *pwidth, unsigned short *pheight,
- ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- switch (class)
- {
- case CursorShape:
- if (*pwidth > pCurPriv->width)
- *pwidth = pCurPriv->width;
- if (*pheight > pCurPriv->height)
- *pheight = pCurPriv->height;
- if (*pwidth > pScreen->width)
- *pwidth = pScreen->width;
- if (*pheight > pScreen->height)
- *pheight = pScreen->height;
- break;
- default:
- fbQueryBestSize (class, pwidth, pheight, pScreen);
- break;
- }
-}
-
-Bool
-tridentCursorInit (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!tridents->cursor_base)
- {
- pCurPriv->has_cursor = FALSE;
- return FALSE;
- }
-
- pCurPriv->width = TRIDENT_CURSOR_WIDTH;
- pCurPriv->height= TRIDENT_CURSOR_HEIGHT;
- pScreen->QueryBestSize = tridentQueryBestSize;
- miPointerInitialize (pScreen,
- &tridentPointerSpriteFuncs,
- &kdPointerScreenFuncs,
- FALSE);
- pCurPriv->has_cursor = TRUE;
- pCurPriv->pCursor = NULL;
- return TRUE;
-}
-
-void
-tridentCursorEnable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- tridentLoadCursor (pScreen, x, y);
- }
- else
- tridentUnloadCursor (pScreen);
- }
-}
-
-void
-tridentCursorDisable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- tridentUnloadCursor (pScreen);
- }
- }
-}
-
-void
-tridentCursorFini (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- pCurPriv->pCursor = NULL;
-}
diff --git a/hw/kdrive/mach64/mach64draw.c b/hw/kdrive/mach64/mach64draw.c
deleted file mode 100644
index 15d4d417a..000000000
--- a/hw/kdrive/mach64/mach64draw.c
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "mach64.h"
-#include "mach64draw.h"
-
-#include <X11/Xmd.h>
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-#include "picturestr.h"
-#include "kaa.h"
-
-CARD8 mach64Rop[16] = {
- /* GXclear */ 0x01, /* 0 */
- /* GXand */ 0x0c, /* src AND dst */
- /* GXandReverse */ 0x0d, /* src AND NOT dst */
- /* GXcopy */ 0x07, /* src */
- /* GXandInverted*/ 0x0e, /* NOT src AND dst */
- /* GXnoop */ 0x03, /* dst */
- /* GXxor */ 0x05, /* src XOR dst */
- /* GXor */ 0x0b, /* src OR dst */
- /* GXnor */ 0x0f, /* NOT src AND NOT dst */
- /* GXequiv */ 0x06, /* NOT src XOR dst */
- /* GXinvert */ 0x00, /* NOT dst */
- /* GXorReverse */ 0x0a, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x04, /* NOT src */
- /* GXorInverted */ 0x09, /* NOT src OR dst */
- /* GXnand */ 0x08, /* NOT src OR NOT dst */
- /* GXset */ 0x02, /* 1 */
-};
-
-#define MACH64_DRAW_COMBO_SOLID 0x1
-#define MACH64_DRAW_COMBO_COPY 0x8
-
-#define SYNC_ALWAYS 0
-static Reg *reg;
-static CARD32 avail;
-static CARD32 triple;
-
-#define IDX(reg,n) (&(reg)->n - &(reg)->CRTC_H_TOTAL_DISP)
-
-void
-mach64WaitAvail(Reg *reg, int n)
-{
- if (avail < n)
- {
- while ((avail = ((reg->GUI_STAT) >> 16) & 0x3ff) < n)
- ;
- }
- avail -= n;
-}
-
-void
-mach64WaitIdle (Reg *reg)
-{
- while (reg->GUI_STAT & 1)
- ;
-}
-
-#define PIX_FORMAT_MONO 0
-#define PIX_FORMAT_PSEUDO_8 2
-#define PIX_FORMAT_TRUE_1555 3
-#define PIX_FORMAT_TRUE_565 4
-#define PIX_FORMAT_TRUE_8888 6
-#define PIX_FORMAT_TRUE_332 7
-#define PIX_FORMAT_GRAY_8 8
-#define PIX_FORMAT_YUV_422 0xb
-#define PIX_FORMAT_YUV_444 0xe
-#define PIX_FORMAT_TRUE_4444 0xf
-
-typedef struct _mach64AccelReg {
- int depth;
- int bitsPerPixel;
- CARD32 DP_PIX_WIDTH;
- CARD32 DP_SET_GUI_ENGINE;
-} Mach64AccelReg;
-
-static const Mach64AccelReg mach64AccelReg[] = {
- { 1, 1,
- /* DP_PIX_WIDTH */
- ((PIX_FORMAT_MONO << 0) | /* DP_DST_PIX_WIDTH */
- (PIX_FORMAT_MONO << 4) | /* COMPOSITE_PIX_WIDTH */
- (PIX_FORMAT_MONO << 8) | /* DP_SRC_PIX_WIDTH */
- (0 << 13) | /* DP_HOST_TRIPLE_EN */
- (0 << 14) | /* DP_PALETTE_TYPE */
- (PIX_FORMAT_MONO << 16) | /* DP_HOST_PIX_WIDTH */
- (0 << 20) | /* DP_C14_RGB_INDEX */
- (0 << 24) | /* DP_BYTE_PIX_ORDER */
- (0 << 25) | /* DP_CONVERSION_TEMP */
- (0 << 26) | /* DP_C14_RGB_LOW_NIBBLE */
- (0 << 27) | /* DP_C14_RGB_HIGH_NIBBLE */
- (PIX_FORMAT_MONO << 28) | /* DP_SCALE_PIX_WIDTH */
- 0),
- /* DP_SET_GUI_ENGINE */
- ((PIX_FORMAT_MONO << 3) |
- (1 << 6) | /* SET_DP_SRC_PIX_WIDTH */
- (6 << 7) | /* SET_DST_OFFSET */
- (0 << 10) | /* SET_DST_PITCH */
- (0 << 14) | /* SET_DST_PITCH_BY_2 */
- (0 << 15) | /* SET_SRC_OFFPITCH_COPY */
- (0 << 16) | /* SET_SRC_HGTWID1_2 */
- (0 << 20) | /* SET_DRAWING_COMBO */
- (1 << 24) | /* SET_BUS_MASTER_OP */
- (0 << 26) | /* SET_BUS_MASTER_EN */
- (0 << 27) | /* SET_BUS_MASTER_SYNC */
- (0 << 28) | /* DP_HOST_TRIPLE_EN */
- (0 << 29) | /* FAST_FILL_EN */
- (0 << 30) | /* BLOCK_WRITE_EN */
- 0)
- },
- { 8, 8,
- /* DP_PIX_WIDTH */
- ((PIX_FORMAT_PSEUDO_8 << 0) | /* DP_DST_PIX_WIDTH */
- (PIX_FORMAT_PSEUDO_8 << 4) | /* COMPOSITE_PIX_WIDTH */
- (PIX_FORMAT_PSEUDO_8 << 8) | /* DP_SRC_PIX_WIDTH */
- (0 << 13) | /* DP_HOST_TRIPLE_EN */
- (0 << 14) | /* DP_PALETTE_TYPE */
- (PIX_FORMAT_PSEUDO_8 << 16) | /* DP_HOST_PIX_WIDTH */
- (0 << 20) | /* DP_C14_RGB_INDEX */
- (0 << 24) | /* DP_BYTE_PIX_ORDER */
- (0 << 25) | /* DP_CONVERSION_TEMP */
- (0 << 26) | /* DP_C14_RGB_LOW_NIBBLE */
- (0 << 27) | /* DP_C14_RGB_HIGH_NIBBLE */
- (PIX_FORMAT_PSEUDO_8 << 28) | /* DP_SCALE_PIX_WIDTH */
- 0),
- /* DP_SET_GUI_ENGINE */
- ((PIX_FORMAT_PSEUDO_8 << 3) |
- (1 << 6) | /* SET_DP_SRC_PIX_WIDTH */
- (6 << 7) | /* SET_DST_OFFSET */
- (0 << 10) | /* SET_DST_PITCH */
- (0 << 14) | /* SET_DST_PITCH_BY_2 */
- (0 << 15) | /* SET_SRC_OFFPITCH_COPY */
- (0 << 16) | /* SET_SRC_HGTWID1_2 */
- (0 << 20) | /* SET_DRAWING_COMBO */
- (1 << 24) | /* SET_BUS_MASTER_OP */
- (0 << 26) | /* SET_BUS_MASTER_EN */
- (0 << 27) | /* SET_BUS_MASTER_SYNC */
- (0 << 28) | /* DP_HOST_TRIPLE_EN */
- (0 << 29) | /* FAST_FILL_EN */
- (0 << 30) | /* BLOCK_WRITE_EN */
- 0)
- },
- { 15, 16,
- /* DP_PIX_WIDTH */
- ((PIX_FORMAT_TRUE_1555 << 0) | /* DP_DST_PIX_WIDTH */
- (PIX_FORMAT_TRUE_1555 << 4) | /* COMPOSITE_PIX_WIDTH */
- (PIX_FORMAT_TRUE_1555 << 8) | /* DP_SRC_PIX_WIDTH */
- (0 << 13) | /* DP_HOST_TRIPLE_EN */
- (0 << 14) | /* DP_PALETTE_TYPE */
- (PIX_FORMAT_TRUE_1555 << 16) | /* DP_HOST_PIX_WIDTH */
- (0 << 20) | /* DP_C14_RGB_INDEX */
- (0 << 24) | /* DP_BYTE_PIX_ORDER */
- (0 << 25) | /* DP_CONVERSION_TEMP */
- (0 << 26) | /* DP_C14_RGB_LOW_NIBBLE */
- (0 << 27) | /* DP_C14_RGB_HIGH_NIBBLE */
- (PIX_FORMAT_TRUE_1555 << 28) | /* DP_SCALE_PIX_WIDTH */
- 0),
- /* DP_SET_GUI_ENGINE */
- ((PIX_FORMAT_TRUE_1555 << 3) |
- (1 << 6) | /* SET_DP_SRC_PIX_WIDTH */
- (6 << 7) | /* SET_DST_OFFSET */
- (0 << 10) | /* SET_DST_PITCH */
- (0 << 14) | /* SET_DST_PITCH_BY_2 */
- (0 << 15) | /* SET_SRC_OFFPITCH_COPY */
- (0 << 16) | /* SET_SRC_HGTWID1_2 */
- (0 << 20) | /* SET_DRAWING_COMBO */
- (1 << 24) | /* SET_BUS_MASTER_OP */
- (0 << 26) | /* SET_BUS_MASTER_EN */
- (0 << 27) | /* SET_BUS_MASTER_SYNC */
- (0 << 28) | /* DP_HOST_TRIPLE_EN */
- (0 << 29) | /* FAST_FILL_EN */
- (0 << 30) | /* BLOCK_WRITE_EN */
- 0)
- },
- { 16, 16,
- /* DP_PIX_WIDTH */
- ((PIX_FORMAT_TRUE_565 << 0) | /* DP_DST_PIX_WIDTH */
- (PIX_FORMAT_TRUE_565 << 4) | /* COMPOSITE_PIX_WIDTH */
- (PIX_FORMAT_TRUE_565 << 8) | /* DP_SRC_PIX_WIDTH */
- (0 << 13) | /* DP_HOST_TRIPLE_EN */
- (0 << 14) | /* DP_PALETTE_TYPE */
- (PIX_FORMAT_TRUE_565 << 16) | /* DP_HOST_PIX_WIDTH */
- (0 << 20) | /* DP_C14_RGB_INDEX */
- (0 << 24) | /* DP_BYTE_PIX_ORDER */
- (0 << 25) | /* DP_CONVERSION_TEMP */
- (0 << 26) | /* DP_C14_RGB_LOW_NIBBLE */
- (0 << 27) | /* DP_C14_RGB_HIGH_NIBBLE */
- (PIX_FORMAT_TRUE_565 << 28) | /* DP_SCALE_PIX_WIDTH */
- 0),
- /* DP_SET_GUI_ENGINE */
- ((PIX_FORMAT_TRUE_565 << 3) |
- (1 << 6) | /* SET_DP_SRC_PIX_WIDTH */
- (6 << 7) | /* SET_DST_OFFSET */
- (0 << 10) | /* SET_DST_PITCH */
- (0 << 14) | /* SET_DST_PITCH_BY_2 */
- (0 << 15) | /* SET_SRC_OFFPITCH_COPY */
- (0 << 16) | /* SET_SRC_HGTWID1_2 */
- (0 << 20) | /* SET_DRAWING_COMBO */
- (1 << 24) | /* SET_BUS_MASTER_OP */
- (0 << 26) | /* SET_BUS_MASTER_EN */
- (0 << 27) | /* SET_BUS_MASTER_SYNC */
- (0 << 28) | /* DP_HOST_TRIPLE_EN */
- (0 << 29) | /* FAST_FILL_EN */
- (0 << 30) | /* BLOCK_WRITE_EN */
- 0)
- },
- { 24, 24,
- /* DP_PIX_WIDTH */
- ((PIX_FORMAT_PSEUDO_8 << 0) | /* DP_DST_PIX_WIDTH */
- (PIX_FORMAT_PSEUDO_8 << 4) | /* COMPOSITE_PIX_WIDTH */
- (PIX_FORMAT_PSEUDO_8 << 8) | /* DP_SRC_PIX_WIDTH */
- (0 << 13) | /* DP_HOST_TRIPLE_EN */
- (0 << 14) | /* DP_PALETTE_TYPE */
- (PIX_FORMAT_PSEUDO_8 << 16) | /* DP_HOST_PIX_WIDTH */
- (0 << 20) | /* DP_C14_RGB_INDEX */
- (0 << 24) | /* DP_BYTE_PIX_ORDER */
- (0 << 25) | /* DP_CONVERSION_TEMP */
- (0 << 26) | /* DP_C14_RGB_LOW_NIBBLE */
- (0 << 27) | /* DP_C14_RGB_HIGH_NIBBLE */
- (PIX_FORMAT_PSEUDO_8 << 28) | /* DP_SCALE_PIX_WIDTH */
- 0),
- /* DP_SET_GUI_ENGINE */
- ((PIX_FORMAT_PSEUDO_8 << 3) |
- (1 << 6) | /* SET_DP_SRC_PIX_WIDTH */
- (6 << 7) | /* SET_DST_OFFSET */
- (0 << 10) | /* SET_DST_PITCH */
- (0 << 14) | /* SET_DST_PITCH_BY_2 */
- (0 << 15) | /* SET_SRC_OFFPITCH_COPY */
- (0 << 16) | /* SET_SRC_HGTWID1_2 */
- (0 << 20) | /* SET_DRAWING_COMBO */
- (1 << 24) | /* SET_BUS_MASTER_OP */
- (0 << 26) | /* SET_BUS_MASTER_EN */
- (0 << 27) | /* SET_BUS_MASTER_SYNC */
- (0 << 28) | /* DP_HOST_TRIPLE_EN */
- (0 << 29) | /* FAST_FILL_EN */
- (0 << 30) | /* BLOCK_WRITE_EN */
- 0)
- },
- { 24, 32,
- /* DP_PIX_WIDTH */
- ((PIX_FORMAT_TRUE_8888 << 0) | /* DP_DST_PIX_WIDTH */
- (PIX_FORMAT_TRUE_8888 << 4) | /* COMPOSITE_PIX_WIDTH */
- (PIX_FORMAT_TRUE_8888 << 8) | /* DP_SRC_PIX_WIDTH */
- (0 << 13) | /* DP_HOST_TRIPLE_EN */
- (0 << 14) | /* DP_PALETTE_TYPE */
- (PIX_FORMAT_TRUE_8888 << 16) | /* DP_HOST_PIX_WIDTH */
- (0 << 20) | /* DP_C14_RGB_INDEX */
- (0 << 24) | /* DP_BYTE_PIX_ORDER */
- (0 << 25) | /* DP_CONVERSION_TEMP */
- (0 << 26) | /* DP_C14_RGB_LOW_NIBBLE */
- (0 << 27) | /* DP_C14_RGB_HIGH_NIBBLE */
- (PIX_FORMAT_TRUE_8888 << 28) | /* DP_SCALE_PIX_WIDTH */
- 0),
- /* DP_SET_GUI_ENGINE */
- ((PIX_FORMAT_TRUE_8888 << 3) |
- (1 << 6) | /* SET_DP_SRC_PIX_WIDTH */
- (6 << 7) | /* SET_DST_OFFSET */
- (0 << 10) | /* SET_DST_PITCH */
- (0 << 14) | /* SET_DST_PITCH_BY_2 */
- (0 << 15) | /* SET_SRC_OFFPITCH_COPY */
- (0 << 16) | /* SET_SRC_HGTWID1_2 */
- (0 << 20) | /* SET_DRAWING_COMBO */
- (1 << 24) | /* SET_BUS_MASTER_OP */
- (0 << 26) | /* SET_BUS_MASTER_EN */
- (0 << 27) | /* SET_BUS_MASTER_SYNC */
- (0 << 28) | /* DP_HOST_TRIPLE_EN */
- (0 << 29) | /* FAST_FILL_EN */
- (0 << 30) | /* BLOCK_WRITE_EN */
- 0)
- },
- { 32, 32,
- /* DP_PIX_WIDTH */
- ((PIX_FORMAT_TRUE_8888 << 0) | /* DP_DST_PIX_WIDTH */
- (PIX_FORMAT_TRUE_8888 << 4) | /* COMPOSITE_PIX_WIDTH */
- (PIX_FORMAT_TRUE_8888 << 8) | /* DP_SRC_PIX_WIDTH */
- (0 << 13) | /* DP_HOST_TRIPLE_EN */
- (0 << 14) | /* DP_PALETTE_TYPE */
- (PIX_FORMAT_TRUE_8888 << 16) | /* DP_HOST_PIX_WIDTH */
- (0 << 20) | /* DP_C14_RGB_INDEX */
- (0 << 24) | /* DP_BYTE_PIX_ORDER */
- (0 << 25) | /* DP_CONVERSION_TEMP */
- (0 << 26) | /* DP_C14_RGB_LOW_NIBBLE */
- (0 << 27) | /* DP_C14_RGB_HIGH_NIBBLE */
- (PIX_FORMAT_TRUE_8888 << 28) | /* DP_SCALE_PIX_WIDTH */
- 0),
- /* DP_SET_GUI_ENGINE */
- ((PIX_FORMAT_TRUE_8888 << 3) |
- (1 << 6) | /* SET_DP_SRC_PIX_WIDTH */
- (6 << 7) | /* SET_DST_OFFSET */
- (0 << 10) | /* SET_DST_PITCH */
- (0 << 14) | /* SET_DST_PITCH_BY_2 */
- (0 << 15) | /* SET_SRC_OFFPITCH_COPY */
- (0 << 16) | /* SET_SRC_HGTWID1_2 */
- (0 << 20) | /* SET_DRAWING_COMBO */
- (1 << 24) | /* SET_BUS_MASTER_OP */
- (0 << 26) | /* SET_BUS_MASTER_EN */
- (0 << 27) | /* SET_BUS_MASTER_SYNC */
- (0 << 28) | /* DP_HOST_TRIPLE_EN */
- (0 << 29) | /* FAST_FILL_EN */
- (0 << 30) | /* BLOCK_WRITE_EN */
- 0)
- }
-};
-
-#define NACCELREG (sizeof mach64AccelReg / sizeof mach64AccelReg[0])
-
-static void
-mach64WaitMarker (ScreenPtr pScreen, int marker)
-{
- KdScreenPriv(pScreen);
- mach64CardInfo(pScreenPriv);
- reg = mach64c->reg;
-
- mach64WaitIdle (reg);
-}
-
-static Bool
-mach64Setup (PixmapPtr pDst, PixmapPtr pSrc, CARD32 combo, int wait)
-{
- ScreenPtr pScreen = pDst->drawable.pScreen;
- KdScreenPriv(pScreen);
- mach64CardInfo(pScreenPriv);
- CARD32 DST_PITCH;
- CARD32 DST_OFFSET;
- CARD32 SRC_PITCH;
- CARD32 SRC_OFFSET;
- CARD32 DP_PIX_WIDTH;
- CARD32 DP_SET_GUI_ENGINE;
- int i;
-
- for (i = 0; i < NACCELREG; i++)
- if (mach64AccelReg[i].depth == pDst->drawable.depth &&
- mach64AccelReg[i].bitsPerPixel == pDst->drawable.bitsPerPixel)
- break;
- if (i == NACCELREG)
- return FALSE;
- DP_PIX_WIDTH = mach64AccelReg[i].DP_PIX_WIDTH;
- DP_SET_GUI_ENGINE = mach64AccelReg[i].DP_SET_GUI_ENGINE;
-
- reg = mach64c->reg;
- if (!reg)
- return FALSE;
-
- triple = (pDst->drawable.bitsPerPixel == 24);
-
- if (triple)
- {
- /* bytes / 8 = bytes >> 3 */
- DST_PITCH = pDst->devKind >> 3;
- }
- else
- {
- /* pixels / 8 = ((bytes * 8) / bpp) / 8 = bytes / bpp */
- DST_PITCH = pDst->devKind / pDst->drawable.bitsPerPixel;
- }
-
- /* bytes / 8 */
- DST_OFFSET = ((CARD8 *) pDst->devPrivate.ptr - pScreenPriv->screen->memory_base) >> 3;
-
- mach64WaitAvail(reg, wait + (pSrc ? 5 : 4));
- reg->DP_SET_GUI_ENGINE = DP_SET_GUI_ENGINE | (combo << 20);
- reg->DP_PIX_WIDTH = DP_PIX_WIDTH;
- reg->DST_OFF_PITCH = ((DST_OFFSET << 0) | /* USR1_DST_OFFSET */
- (DST_PITCH << 22) | /* USR1_DST_PITCH */
- 0);
- if (pSrc)
- {
- if (triple)
- {
- SRC_PITCH = pSrc->devKind >> 3;
- }
- else
- {
- /* pixels / 8 = ((bytes * 8) / bpp) / 8 = bytes / bpp */
- SRC_PITCH = pSrc->devKind / pSrc->drawable.bitsPerPixel;
- }
- /* bytes / 8 */
- SRC_OFFSET = ((CARD8 *) pSrc->devPrivate.ptr - pScreenPriv->screen->memory_base) >> 3;
-
- reg->SRC_OFF_PITCH = ((SRC_OFFSET << 0) |
- (SRC_PITCH << 22) |
- 0);
- }
- return TRUE;
-}
-
-static Bool
-mach64PrepareSolid (PixmapPtr pPixmap,
- int alu,
- Pixel pm,
- Pixel fg)
-{
- if (!mach64Setup (pPixmap, 0, 1, 3))
- return FALSE;
- reg->DP_MIX = (mach64Rop[alu] << 16) | 0;
- reg->DP_WRITE_MSK = pm;
- reg->DP_FRGD_CLR = fg;
- return TRUE;
-}
-
-static void
-mach64Solid (int x1, int y1, int x2, int y2)
-{
- if (triple)
- {
- CARD32 traj;
-
- x1 *= 3;
- x2 *= 3;
-
- traj = (DST_X_DIR |
- DST_Y_DIR |
- DST_24_ROT_EN |
- DST_24_ROT((x1 / 4) % 6));
- mach64WaitAvail (reg, 1);
- reg->GUI_TRAJ_CNTL = traj;
- }
- mach64WaitAvail(reg,2);
- reg->DST_X_Y = MACH64_XY(x1,y1);
- reg->DST_WIDTH_HEIGHT = MACH64_XY(x2-x1,y2-y1);
-}
-
-static void
-mach64DoneSolid (void)
-{
-#if SYNC_ALWAYS
- mach64WaitIdle (reg);
-#endif
-}
-
-static int copyDx;
-static int copyDy;
-static CARD32 copyCombo;
-
-static Bool
-mach64PrepareCopy (PixmapPtr pSrcPixmap,
- PixmapPtr pDstPixmap,
- int dx,
- int dy,
- int alu,
- Pixel pm)
-{
- copyCombo = 8 | 2 | 1;
- copyDx = dx;
- copyDy = dy;
-
- /*
- * Avoid going backwards when copying pixmaps to the screen.
- * This should reduce tearing somewhat
- */
- if (pSrcPixmap == pDstPixmap)
- {
- if (dx <= 0)
- copyCombo &= ~1;
- if (dy <= 0)
- copyCombo &= ~2;
- }
-
- if (!mach64Setup (pDstPixmap, pSrcPixmap, copyCombo, 2))
- return FALSE;
-
- reg->DP_MIX = (mach64Rop[alu] << 16) | 0;
- reg->DP_WRITE_MSK = pm;
- return TRUE;
-}
-
-static void
-mach64Copy (int srcX,
- int srcY,
- int dstX,
- int dstY,
- int w,
- int h)
-{
- if (triple)
- {
- CARD32 traj;
-
- srcX *= 3;
- dstX *= 3;
- w *= 3;
-
- traj = DST_24_ROT_EN | DST_24_ROT((dstX / 4) % 6);
-
- if (copyCombo & 1)
- traj |= 1;
- if (copyCombo & 2)
- traj |= 2;
-
- mach64WaitAvail (reg, 1);
- reg->GUI_TRAJ_CNTL = traj;
- }
- if ((copyCombo & 1) == 0)
- {
- srcX += w - 1;
- dstX += w - 1;
- }
- if ((copyCombo & 2) == 0)
- {
- srcY += h - 1;
- dstY += h - 1;
- }
- mach64WaitAvail (reg, 4);
- reg->SRC_Y_X = MACH64_YX(srcX, srcY);
- reg->SRC_WIDTH1 = w;
- reg->DST_Y_X = MACH64_YX(dstX, dstY);
- reg->DST_HEIGHT_WIDTH = MACH64_YX(w,h);
-}
-
-static void
-mach64DoneCopy (void)
-{
-#if SYNC_ALWAYS
- mach64WaitIdle (reg);
-#endif
-}
-
-
-Bool
-mach64DrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- mach64ScreenInfo(pScreenPriv);
-
- memset(&mach64s->kaa, 0, sizeof(KaaScreenInfoRec));
- mach64s->kaa.waitMarker = mach64WaitMarker;
- mach64s->kaa.PrepareSolid = mach64PrepareSolid;
- mach64s->kaa.Solid = mach64Solid;
- mach64s->kaa.DoneSolid = mach64DoneSolid;
- mach64s->kaa.PrepareCopy = mach64PrepareCopy;
- mach64s->kaa.Copy = mach64Copy;
- mach64s->kaa.DoneCopy = mach64DoneCopy;
- mach64s->kaa.offsetAlign = 64;
- mach64s->kaa.pitchAlign = 64;
- mach64s->kaa.flags = KAA_OFFSCREEN_PIXMAPS;
-
- if (pScreenPriv->screen->fb[0].depth == 4)
- return FALSE;
-
- if (!kaaDrawInit (pScreen, &mach64s->kaa))
- return FALSE;
-
- return TRUE;
-}
-
-void
-mach64DrawEnable (ScreenPtr pScreen)
-{
- kaaMarkSync (pScreen);
-}
-
-void
-mach64DrawDisable (ScreenPtr pScreen)
-{
-}
-
-void
-mach64DrawFini (ScreenPtr pScreen)
-{
- kaaDrawFini (pScreen);
-}
diff --git a/hw/kdrive/mach64/mach64draw.h b/hw/kdrive/mach64/mach64draw.h
deleted file mode 100644
index bac11c2a6..000000000
--- a/hw/kdrive/mach64/mach64draw.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _TRIDENTDRAW_H_
-#define _TRIDENTDRAW_H_
-
-#define SetupTrident(s) KdScreenPriv(s); \
- tridentCardInfo(pScreenPriv); \
- Cop *cop = tridentc->cop
-
-#define TridentAlpha (COP_MULTI_ALPHA|COP_ALPHA_WRITE_ENABLE)
-
-#define _tridentInit(cop,tridentc) { \
- if ((cop)->status == 0xffffffff) tridentSetMMIO(tridentc); \
- (cop)->multi = (tridentc)->cop_depth; \
- (cop)->multi = (tridentc)->cop_stride; \
- (cop)->multi = TridentAlpha; \
-} \
-
-#define _tridentSetSolidRect(cop,pix,alu,cmd) {\
- cop->multi = COP_MULTI_PATTERN; \
- cop->multi = COP_MULTI_ROP | tridentRop[alu]; \
- cop->fg = (pix); \
- cmd = COP_OP_BLT | COP_SCL_OPAQUE | COP_OP_ROP | COP_OP_FG; \
-}
-
-#define _tridentRect(cop,x1,y1,x2,y2,cmd) { \
- (cop)->dst_start_xy = TRI_XY (x1,y1); \
- (cop)->dst_end_xy = TRI_XY(x2,y2); \
- _tridentWaitDone(cop); \
- (cop)->command = (cmd); \
-}
-
-#define COP_STATUS_BUSY (COP_STATUS_BE_BUSY | \
- COP_STATUS_DPE_BUSY | \
- COP_STATUS_MI_BUSY)
-
-#define _tridentWaitDone(cop) { \
- int __q__ = 500000; \
- while (__q__-- && (cop)->status & COP_STATUS_BUSY) \
- ; \
- if (!__q__) \
- (cop)->status = 0; \
-}
-
-#define _tridentWaitIdleEmpty(cop) _tridentWaitDone(cop)
-
-#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3))
-
-#endif
diff --git a/hw/kdrive/mach64/mach64stub.c b/hw/kdrive/mach64/mach64stub.c
deleted file mode 100644
index 5895a3cb7..000000000
--- a/hw/kdrive/mach64/mach64stub.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "mach64.h"
-#include <klinux.h>
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
-
- if (LinuxFindPci (0x1002, 0x4750, 0, &attr))
- KdCardInfoAdd (&mach64Funcs, &attr, 0);
- else if (LinuxFindPci (0x1002, 0x4c42, 0, &attr))
- KdCardInfoAdd (&mach64Funcs, &attr, 0);
- else if (LinuxFindPci (0x1002, 0x4c46, 0, &attr))
- KdCardInfoAdd (&mach64Funcs, &attr, 0);
- else if (LinuxFindPci (0x1002, 0x4c49, 0, &attr))
- KdCardInfoAdd (&mach64Funcs, &attr, 0);
- else if (LinuxFindPci (0x1002, 0x4c4d, 0, &attr))
- KdCardInfoAdd (&mach64Funcs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
- vesaUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- if (!(ret = vesaProcessArgument (argc, argv, i)))
- ret = KdProcessArgument(argc, argv, i);
- return ret;
-}
diff --git a/hw/kdrive/mach64/mach64video.c b/hw/kdrive/mach64/mach64video.c
deleted file mode 100644
index 38fcef7eb..000000000
--- a/hw/kdrive/mach64/mach64video.c
+++ /dev/null
@@ -1,994 +0,0 @@
-/*
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "mach64.h"
-
-#include <X11/extensions/Xv.h>
-#include "fourcc.h"
-
-#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
-
-static Atom xvBrightness, xvSaturation, xvColorKey;
-
-#define IMAGE_MAX_WIDTH 720
-#define IMAGE_MAX_HEIGHT 576
-
-static void
-mach64StopVideo(KdScreenInfo *screen, pointer data, Bool exit)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
- Reg *reg = mach64c->reg;
- MediaReg *media = mach64c->media_reg;
-
- REGION_EMPTY(screen->pScreen, &pPortPriv->clip);
-
- if (!media)
- return;
-
- if(pPortPriv->videoOn)
- {
- mach64WaitIdle (reg);
- /* wait for buffer to be displayed */
- while (((media->TRIG_CNTL >> 5) & 1) != pPortPriv->currentBuf)
- ;
- /* wait for buffer to be finished */
- while (((media->TRIG_CNTL >> 6) & 1) != 0)
- ;
- mach64WaitAvail (reg, 1);
- media->OVERLAY_SCALE_CNTL = 0;
- pPortPriv->videoOn = FALSE;
- mach64WaitIdle (reg);
- }
- if (pPortPriv->off_screen)
- {
- KdOffscreenFree (pScreen, pPortPriv->off_screen);
- pPortPriv->off_screen = 0;
- }
-}
-
-static int
-mach64SetPortAttribute(KdScreenInfo *screen,
- Atom attribute,
- int value,
- pointer data)
-{
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
-
- if(attribute == xvBrightness)
- {
- if(value < -1000)
- value = -1000;
- if (value > 1000)
- value = 1000;
- pPortPriv->brightness = value;
- }
- else if(attribute == xvSaturation)
- {
- if (value < -1000)
- value = -1000;
- if (value > 1000)
- value = 1000;
- pPortPriv->saturation = value;
- }
- else if(attribute == xvColorKey)
- {
- if (pPortPriv->colorKey != value)
- {
- pPortPriv->colorKey = value;
- REGION_EMPTY(screen->pScreen, &pPortPriv->clip);
- }
- }
- else
- return BadMatch;
-
- return Success;
-}
-
-static int
-mach64GetPortAttribute(KdScreenInfo *screen,
- Atom attribute,
- int *value,
- pointer data)
-{
- Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)data;
-
- if(attribute == xvBrightness)
- *value = pPortPriv->brightness;
- else if(attribute == xvSaturation)
- *value = pPortPriv->saturation;
- else if(attribute == xvColorKey)
- *value = pPortPriv->colorKey;
- else
- return BadMatch;
-
- return Success;
-}
-
-static void
-mach64QueryBestSize(KdScreenInfo *screen,
- Bool motion,
- short vid_w,
- short vid_h,
- short drw_w,
- short drw_h,
- unsigned int *p_w,
- unsigned int *p_h,
- pointer data)
-{
- *p_w = drw_w;
- *p_h = drw_h;
-}
-
-
-static void
-mach64CopyPackedData(KdScreenInfo *screen,
- unsigned char *buf,
- int randr,
- int srcPitch,
- int dstPitch,
- int srcW,
- int srcH,
- int top,
- int left,
- int h,
- int w)
-{
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
- CARD8 *src = buf, *dst;
- int srcDown = srcPitch, srcRight = 2, srcNext;
- int p;
-
- switch (randr & RR_Rotate_All) {
- case RR_Rotate_0:
- src = buf;
- srcDown = srcPitch;
- srcRight = 2;
- break;
- case RR_Rotate_90:
- src = buf + (srcH - 1) * 2;
- srcDown = -2;
- srcRight = srcPitch;
- break;
- case RR_Rotate_180:
- src = buf + srcPitch * (srcH - 1) + (srcW - 1) * 2;
- srcDown = -srcPitch;
- srcRight = -2;
- break;
- case RR_Rotate_270:
- src = buf + srcPitch * (srcW - 1);
- srcDown = 2;
- srcRight = -srcPitch;
- break;
- }
-
- src = src + top*srcDown + left*srcRight;
-
- if (pPortPriv->currentBuf == 0)
- dst = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf0Offset;
- else
- dst = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf1Offset;
-
- w >>= 1;
- srcRight >>= 1;
- srcNext = srcRight >> 1;
- while(h--)
- {
- CARD16 *s = (CARD16 *) src;
- CARD32 *d = (CARD32 *) dst;
- p = w;
- while (p--)
- {
- *d++ = s[0] | (s[srcNext] << 16);
- s += srcRight;
- }
- src += srcPitch;
- dst += dstPitch;
- }
-}
-
-static void
-mach64CopyPlanarData(KdScreenInfo *screen,
- unsigned char *buf,
- int randr,
- int srcPitch,
- int srcPitch2,
- int dstPitch, /* of chroma */
- int srcW,
- int srcH,
- int height,
- int top,
- int left,
- int h,
- int w,
- int id)
-{
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
- int i, j;
- CARD8 *src1, *src2, *src3, *dst1;
- int srcDown = srcPitch, srcDown2 = srcPitch2;
- int srcRight = 2, srcRight2 = 1, srcNext = 1;
-
- /* compute source data pointers */
- src1 = buf;
- src2 = src1 + height * srcPitch;
- src3 = src2 + (height >> 1) * srcPitch2;
- switch (randr & RR_Rotate_All) {
- case RR_Rotate_0:
- srcDown = srcPitch;
- srcDown2 = srcPitch2;
- srcRight = 2;
- srcRight2 = 1;
- srcNext = 1;
- break;
- case RR_Rotate_90:
- src1 = src1 + srcH - 1;
- src2 = src2 + (srcH >> 1) - 1;
- src3 = src3 + (srcH >> 1) - 1;
- srcDown = -1;
- srcDown2 = -1;
- srcRight = srcPitch * 2;
- srcRight2 = srcPitch2;
- srcNext = srcPitch;
- break;
- case RR_Rotate_180:
- src1 = src1 + srcPitch * (srcH - 1) + (srcW - 1);
- src2 = src2 + srcPitch2 * ((srcH >> 1) - 1) + ((srcW >> 1) - 1);
- src3 = src3 + srcPitch2 * ((srcH >> 1) - 1) + ((srcW >> 1) - 1);
- srcDown = -srcPitch;
- srcDown2 = -srcPitch2;
- srcRight = -2;
- srcRight2 = -1;
- srcNext = -1;
- break;
- case RR_Rotate_270:
- src1 = src1 + srcPitch * (srcW - 1);
- src2 = src2 + srcPitch2 * ((srcW >> 1) - 1);
- src3 = src3 + srcPitch2 * ((srcW >> 1) - 1);
- srcDown = 1;
- srcDown2 = 1;
- srcRight = -srcPitch * 2;
- srcRight2 = -srcPitch2;
- srcNext = -srcPitch;
- break;
- }
-
- /* adjust for origin */
- src1 += top * srcDown + left * srcNext;
- src2 += (top >> 1) * srcDown2 + (left >> 1) * srcRight2;
- src3 += (top >> 1) * srcDown2 + (left >> 1) * srcRight2;
-
- if (id == FOURCC_I420)
- {
- CARD8 *srct = src2;
- src2 = src3;
- src3 = srct;
- }
-
- if (pPortPriv->currentBuf == 0)
- dst1 = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf0Offset;
- else
- dst1 = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf1Offset;
-
- w >>= 1;
- for (j = 0; j < h; j++)
- {
- CARD32 *dst = (CARD32 *) dst1;
- CARD8 *s1l = src1;
- CARD8 *s1r = src1 + srcNext;
- CARD8 *s2 = src2;
- CARD8 *s3 = src3;
-
- for (i = 0; i < w; i++)
- {
- *dst++ = *s1l | (*s1r << 16) | (*s3 << 8) | (*s2 << 24);
- s1l += srcRight;
- s1r += srcRight;
- s2 += srcRight2;
- s3 += srcRight2;
- }
- src1 += srcDown;
- dst1 += dstPitch;
- if (j & 1)
- {
- src2 += srcDown2;
- src3 += srcDown2;
- }
- }
-}
-
-
-/* Mach64ClipVideo -
-
- Takes the dst box in standard X BoxRec form (top and left
- edges inclusive, bottom and right exclusive). The new dst
- box is returned. The source boundaries are given (x1, y1
- inclusive, x2, y2 exclusive) and returned are the new source
- boundaries in 16.16 fixed point.
-*/
-
-static void
-Mach64ClipVideo(BoxPtr dst,
- INT32 *x1,
- INT32 *x2,
- INT32 *y1,
- INT32 *y2,
- BoxPtr extents, /* extents of the clip region */
- INT32 width,
- INT32 height)
-{
- INT32 vscale, hscale, delta;
- int diff;
-
- hscale = ((*x2 - *x1) << 16) / (dst->x2 - dst->x1);
- vscale = ((*y2 - *y1) << 16) / (dst->y2 - dst->y1);
-
- *x1 <<= 16; *x2 <<= 16;
- *y1 <<= 16; *y2 <<= 16;
-
- diff = extents->x1 - dst->x1;
- if(diff > 0) {
- dst->x1 = extents->x1;
- *x1 += diff * hscale;
- }
- diff = dst->x2 - extents->x2;
- if(diff > 0) {
- dst->x2 = extents->x2;
- *x2 -= diff * hscale;
- }
- diff = extents->y1 - dst->y1;
- if(diff > 0) {
- dst->y1 = extents->y1;
- *y1 += diff * vscale;
- }
- diff = dst->y2 - extents->y2;
- if(diff > 0) {
- dst->y2 = extents->y2;
- *y2 -= diff * vscale;
- }
-
- if(*x1 < 0) {
- diff = (- *x1 + hscale - 1)/ hscale;
- dst->x1 += diff;
- *x1 += diff * hscale;
- }
- delta = *x2 - (width << 16);
- if(delta > 0) {
- diff = (delta + hscale - 1)/ hscale;
- dst->x2 -= diff;
- *x2 -= diff * hscale;
- }
- if(*y1 < 0) {
- diff = (- *y1 + vscale - 1)/ vscale;
- dst->y1 += diff;
- *y1 += diff * vscale;
- }
- delta = *y2 - (height << 16);
- if(delta > 0) {
- diff = (delta + vscale - 1)/ vscale;
- dst->y2 -= diff;
- *y2 -= diff * vscale;
- }
-}
-
-static void
-mach64DisplayVideo(KdScreenInfo *screen,
- int id,
- int dstPitch, /* of chroma for 4:2:0 */
- int x1,
- int y1,
- int x2,
- int y2,
- int dst_x1,
- int dst_y1,
- int dst_x2,
- int dst_y2,
- short src_w,
- short src_h,
- short drw_w,
- short drw_h)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
- Reg *reg = mach64c->reg;
- MediaReg *media = mach64c->media_reg;
- int HORZ_INC, VERT_INC;
- CARD32 SCALER_IN;
- int bright;
- int sat;
-
- if (id == FOURCC_UYVY)
- SCALER_IN = SCALER_IN_YVYU422;
- else
- SCALER_IN = SCALER_IN_VYUY422;
-
- mach64WaitAvail (reg, 4);
-
- media->VIDEO_FORMAT = SCALER_IN | VIDEO_IN_VYUY422;
-
- /* color key */
- media->OVERLAY_GRAPHICS_KEY_MSK = (1 << screen->fb[0].depth) - 1;
- media->OVERLAY_GRAPHICS_KEY_CLR = pPortPriv->colorKey;
- /* set key control to obey only graphics color key */
- media->OVERLAY_KEY_CNTL = 0x50;
-
- mach64WaitAvail (reg, 9);
- media->CAPTURE_DEBUG = 0;
- /* no exclusive video region */
- media->OVERLAY_EXCLUSIVE_HORZ = 0;
- media->OVERLAY_EXCLUSIVE_VERT = 0;
- /* scaling coefficients */
- media->SCALER_H_COEFF0 = 0x00002000;
- media->SCALER_H_COEFF1 = 0x0D06200D;
- media->SCALER_H_COEFF2 = 0x0D0A1C0D;
- media->SCALER_H_COEFF3 = 0x0C0E1A0C;
- media->SCALER_H_COEFF4 = 0x0C14140C;
- media->SCALER_TEST = 0;
-
- mach64WaitAvail (reg, 2);
- media->OVERLAY_SCALE_CNTL = (SCALE_PIX_EXPAND |
- SCALE_GAMMA_BRIGHT |
- SCALE_BANDWIDTH |
- SCALE_OVERLAY_EN |
- SCALE_EN);
-
- bright = (pPortPriv->brightness * 64 / 1000);
- if (bright < -0x40)
- bright = -0x40;
- if (bright > 0x3f)
- bright = 0x3f;
- bright = bright & 0x7f;
- sat = ((pPortPriv->saturation * 31 + 31000) / 2000);
- if (sat > 0x1f)
- sat = 0x1f;
- if (sat < 0)
- sat = 0;
-
- media->SCALER_COLOUR_CNTL = ((bright << 0) | /* BRIGHTNESS */
- (sat << 8) | /* SATURATION_U */
- (sat << 16) | /* SATURATION_V */
- (0 << 21) | /* SCALER_VERT_ADJ_UV */
- (0 << 28)); /* SCALER_HORZ_ADJ_UV */
-
- VERT_INC = (src_h << 12) / drw_h;
- HORZ_INC = (src_w << 12) / drw_w;
-
- mach64WaitAvail (reg, 13);
-
- /* lock registers to prevent non-atomic update */
- media->OVERLAY_Y_X_START = 0x80000000 | MACH64_YX (dst_x1, dst_y1);
- /* ending screen coordinate */
- media->OVERLAY_Y_X_END = 0x80000000 | MACH64_YX (dst_x2, dst_y2);
-
- media->OVERLAY_SCALE_INC = MACH64_YX(HORZ_INC, VERT_INC);
-
- media->SCALER_BUF0_OFFSET = pPortPriv->YBuf0Offset;
- media->SCALER_BUF1_OFFSET = pPortPriv->YBuf1Offset;
-
- media->SCALER_BUF0_OFFSET_U = pPortPriv->YBuf0Offset;
- media->SCALER_BUF1_OFFSET_U = pPortPriv->YBuf1Offset;
-
- media->SCALER_BUF0_OFFSET_V = pPortPriv->YBuf0Offset;
- media->SCALER_BUF1_OFFSET_V = pPortPriv->YBuf1Offset;
-
- media->SCALER_BUF_PITCH = dstPitch >> 1;
- media->SCALER_HEIGHT_WIDTH = MACH64_YX(src_w - (x1 >> 16), src_h - (y1 >> 16));
-
- media->CAPTURE_CONFIG = pPortPriv->currentBuf << 28;
-
- /* set XY location and unlock */
- media->OVERLAY_Y_X_START = MACH64_YX (dst_x1, dst_y1);
-}
-
-static void
-mach64VideoSave (ScreenPtr pScreen, KdOffscreenArea *area)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
-
- if (pPortPriv->off_screen == area)
- pPortPriv->off_screen = 0;
-}
-
-static int
-mach64PutImage(KdScreenInfo *screen,
- DrawablePtr pDraw,
- 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)
-{
- KdCardInfo *card = screen->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)data;
- MediaReg *media = mach64c->media_reg;
- INT32 x1, x2, y1, y2;
- int randr = mach64s->vesa.randr;
- int srcPitch, srcPitch2, dstPitch;
- int top, left, npixels, nlines, size;
- BoxRec dstBox;
- int dst_width = width, dst_height = height;
- int rot_x1, rot_y1, rot_x2, rot_y2;
- int dst_x1, dst_y1, dst_x2, dst_y2;
- int rot_src_w, rot_src_h, rot_drw_w, rot_drw_h;
-
- /* Clip */
- x1 = src_x;
- x2 = src_x + src_w;
- y1 = src_y;
- y2 = src_y + src_h;
-
- dstBox.x1 = drw_x;
- dstBox.x2 = drw_x + drw_w;
- dstBox.y1 = drw_y;
- dstBox.y2 = drw_y + drw_h;
-
- Mach64ClipVideo(&dstBox, &x1, &x2, &y1, &y2,
- REGION_EXTENTS(pScreen, clipBoxes), width, height);
-
- if((x1 >= x2) || (y1 >= y2))
- return Success;
-
- if (!media)
- return BadAlloc;
-
- if (randr & (RR_Rotate_0|RR_Rotate_180))
- {
- dst_width = width;
- dst_height = height;
- rot_src_w = src_w;
- rot_src_h = src_h;
- rot_drw_w = drw_w;
- rot_drw_h = drw_h;
- }
- else
- {
- dst_width = height;
- dst_height = width;
- rot_src_w = src_h;
- rot_src_h = src_w;
- rot_drw_w = drw_h;
- rot_drw_h = drw_w;
- }
-
- switch (randr & RR_Rotate_All) {
- case RR_Rotate_0:
- default:
- dst_x1 = dstBox.x1;
- dst_y1 = dstBox.y1;
- dst_x2 = dstBox.x2;
- dst_y2 = dstBox.y2;
- rot_x1 = x1;
- rot_y1 = y1;
- rot_x2 = x2;
- rot_y2 = y2;
- break;
- case RR_Rotate_90:
- dst_x1 = dstBox.y1;
- dst_y1 = screen->height - dstBox.x2;
- dst_x2 = dstBox.y2;
- dst_y2 = screen->height - dstBox.x1;
-
- rot_x1 = y1;
- rot_y1 = (src_w << 16) - x2;
- rot_x2 = y2;
- rot_y2 = (src_w << 16) - x1;
- break;
- case RR_Rotate_180:
- dst_x1 = screen->width - dstBox.x2;
- dst_y1 = screen->height - dstBox.y2;
- dst_x2 = screen->width - dstBox.x1;
- dst_y2 = screen->height - dstBox.y1;
- rot_x1 = (src_w << 16) - x2;
- rot_y1 = (src_h << 16) - y2;
- rot_x2 = (src_w << 16) - x1;
- rot_y2 = (src_h << 16) - y1;
- break;
- case RR_Rotate_270:
- dst_x1 = screen->width - dstBox.y2;
- dst_y1 = dstBox.x1;
- dst_x2 = screen->width - dstBox.y1;
- dst_y2 = dstBox.x2;
- rot_x1 = (src_h << 16) - y2;
- rot_y1 = x1;
- rot_x2 = (src_h << 16) - y1;
- rot_y2 = x2;
- break;
- }
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- dstPitch = ((dst_width << 1) + 15) & ~15;
- srcPitch = (width + 3) & ~3;
- srcPitch2 = ((width >> 1) + 3) & ~3;
- size = dstPitch * (int) dst_height;
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- dstPitch = ((dst_width << 1) + 15) & ~15;
- srcPitch = (width << 1);
- srcPitch2 = 0;
- size = dstPitch * (int) dst_height;
- break;
- }
-
- if (pPortPriv->off_screen && size != pPortPriv->size)
- {
- KdOffscreenFree (screen->pScreen, pPortPriv->off_screen);
- pPortPriv->off_screen = 0;
- }
-
- if (!pPortPriv->off_screen)
- {
- pPortPriv->off_screen = KdOffscreenAlloc (screen->pScreen, size * 2, 64,
- TRUE, mach64VideoSave,
- pPortPriv);
- if (!pPortPriv->off_screen)
- return BadAlloc;
- }
-
- pPortPriv->offset = pPortPriv->off_screen->offset;
- pPortPriv->size = size;
- /* fixup pointers */
-
- pPortPriv->YBuf0Offset = pPortPriv->offset;
- pPortPriv->YBuf1Offset = pPortPriv->offset + size;
-
-#if 0
- mach64WaitIdle (reg);
-
- if (pPortPriv->videoOn)
- {
- /* wait for buffer to be displayed */
- while (((media->TRIG_CNTL >> 5) & 1) != pPortPriv->currentBuf)
- ;
- }
-#endif
- /*
- * Use the other buffer
- */
- pPortPriv->currentBuf = 1 - pPortPriv->currentBuf;
-
- /* copy data */
- top = rot_y1 >> 16;
- left = (rot_x1 >> 16) & ~1;
- npixels = ((((rot_x2 + 0xffff) >> 16) + 1) & ~1) - left;
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- top &= ~1;
- nlines = ((((rot_y2 + 0xffff) >> 16) + 1) & ~1) - top;
- mach64CopyPlanarData(screen, buf, randr,
- srcPitch, srcPitch2, dstPitch,
- rot_src_w, rot_src_h, height,
- top, left, nlines, npixels, id);
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- nlines = ((rot_y2 + 0xffff) >> 16) - top;
- mach64CopyPackedData(screen, buf, randr,
- srcPitch, dstPitch,
- rot_src_w, rot_src_h,
- top, left, nlines,
- npixels);
- break;
- }
-
- mach64DisplayVideo(screen, id, dstPitch,
- rot_x1, rot_y1, rot_x2, rot_y2,
- dst_x1, dst_y1,
- dst_x2, dst_y2,
- rot_src_w, rot_src_h, rot_drw_w, rot_drw_h);
-
- /* update cliplist */
- if (!REGION_EQUAL (screen->pScreen, &pPortPriv->clip, clipBoxes))
- {
- REGION_COPY (screen->pScreen, &pPortPriv->clip, clipBoxes);
- KXVPaintRegion (pDraw, &pPortPriv->clip, pPortPriv->colorKey);
- }
-
- pPortPriv->videoOn = TRUE;
-
- return Success;
-}
-
-static int
-mach64QueryImageAttributes(KdScreenInfo *screen,
- int id,
- unsigned short *w,
- unsigned short *h,
- int *pitches,
- int *offsets)
-{
- int size, tmp;
-
- if(*w > IMAGE_MAX_WIDTH)
- *w = IMAGE_MAX_WIDTH;
- if(*h > IMAGE_MAX_HEIGHT)
- *h = IMAGE_MAX_HEIGHT;
-
- *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;
-}
-
-
-/* client libraries expect an encoding */
-static KdVideoEncodingRec DummyEncoding[1] =
-{
- {
- 0,
- "XV_IMAGE",
- IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT,
- {1, 1}
- }
-};
-
-#define NUM_FORMATS 3
-
-static KdVideoFormatRec Formats[NUM_FORMATS] =
-{
- {15, TrueColor}, {16, TrueColor}, {24, TrueColor}
-};
-
-#define NUM_ATTRIBUTES 3
-
-static KdAttributeRec Attributes[NUM_ATTRIBUTES] =
-{
- {XvSettable | XvGettable, 0, ~0, "XV_COLORKEY"},
- {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"},
- {XvSettable | XvGettable, -1000, 1000, "XV_SATURATION"}
-};
-
-#define NUM_IMAGES 4
-
-static KdImageRec Images[NUM_IMAGES] =
-{
- XVIMAGE_YUY2,
- XVIMAGE_YV12,
- XVIMAGE_I420,
- XVIMAGE_UYVY
-};
-
-static void mach64ResetVideo(KdScreenInfo *screen)
-{
-}
-
-static int
-mach64ReputImage (KdScreenInfo *screen,
- DrawablePtr pDraw,
- short drw_x,
- short drw_y,
- RegionPtr clipBoxes,
- pointer data)
-{
- Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)data;
- BoxPtr pOldExtents = REGION_EXTENTS (screen->pScreen, &pPortPriv->clip);
- BoxPtr pNewExtents = REGION_EXTENTS (screen->pScreen, clipBoxes);
-
- if (pOldExtents->x1 == pNewExtents->x1 &&
- pOldExtents->x2 == pNewExtents->x2 &&
- pOldExtents->y1 == pNewExtents->y1 &&
- pOldExtents->y2 == pNewExtents->y2)
- {
- /* update cliplist */
- if (!REGION_EQUAL (screen->pScreen, &pPortPriv->clip, clipBoxes))
- {
- REGION_COPY (screen->pScreen, &pPortPriv->clip, clipBoxes);
- KXVPaintRegion (pDraw, &pPortPriv->clip, pPortPriv->colorKey);
- }
- return Success;
- }
- return BadMatch;
-}
-
-static KdVideoAdaptorPtr
-mach64SetupImageVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- mach64ScreenInfo(pScreenPriv);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdVideoAdaptorPtr adapt;
- Mach64PortPrivPtr pPortPriv;
-
- if(!(adapt = xcalloc(1, sizeof(KdVideoAdaptorRec) +
- sizeof(Mach64PortPrivRec) +
- sizeof(DevUnion))))
- return NULL;
-
- adapt->type = XvWindowMask | XvInputMask | XvImageMask;
- adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
- adapt->name = "Mach64 Video Overlay";
- adapt->nEncodings = 1;
- adapt->pEncodings = DummyEncoding;
- adapt->nFormats = NUM_FORMATS;
- adapt->pFormats = Formats;
- adapt->nPorts = 1;
- adapt->pPortPrivates = (DevUnion*)(&adapt[1]);
-
- pPortPriv = (Mach64PortPrivPtr)(&adapt->pPortPrivates[1]);
-
- adapt->pPortPrivates[0].ptr = (pointer)(pPortPriv);
- adapt->pAttributes = Attributes;
- adapt->nImages = NUM_IMAGES;
- adapt->nAttributes = NUM_ATTRIBUTES;
- adapt->pImages = Images;
- adapt->PutVideo = NULL;
- adapt->PutStill = NULL;
- adapt->GetVideo = NULL;
- adapt->GetStill = NULL;
- adapt->StopVideo = mach64StopVideo;
- adapt->SetPortAttribute = mach64SetPortAttribute;
- adapt->GetPortAttribute = mach64GetPortAttribute;
- adapt->QueryBestSize = mach64QueryBestSize;
- adapt->PutImage = mach64PutImage;
- adapt->ReputImage = mach64ReputImage;
- adapt->QueryImageAttributes = mach64QueryImageAttributes;
-
- pPortPriv->colorKey = mach64s->colorKey;
- pPortPriv->videoOn = FALSE;
- pPortPriv->brightness = 0;
- pPortPriv->saturation = 0;
- pPortPriv->currentBuf = 0;
- pPortPriv->off_screen = 0;
- pPortPriv->size = 0;
- pPortPriv->offset = 0;
-
- /* gotta uninit this someplace */
- REGION_INIT(pScreen, &pPortPriv->clip, NullBox, 0);
-
- mach64s->pAdaptor = adapt;
-
- xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
- xvSaturation = MAKE_ATOM("XV_SATURATION");
- xvColorKey = MAKE_ATOM("XV_COLORKEY");
-
- mach64ResetVideo(screen);
-
- return adapt;
-}
-
-Bool mach64InitVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdVideoAdaptorPtr *adaptors, *newAdaptors = NULL;
- KdVideoAdaptorPtr newAdaptor = NULL;
- int num_adaptors;
- KdCardInfo *card = pScreenPriv->card;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
-
- mach64s->pAdaptor = NULL;
-
- if (!mach64c->media_reg)
- return FALSE;
-
- newAdaptor = mach64SetupImageVideo(pScreen);
-
- num_adaptors = KdXVListGenericAdaptors(screen, &adaptors);
-
- if(newAdaptor)
- {
- if(!num_adaptors)
- {
- num_adaptors = 1;
- adaptors = &newAdaptor;
- }
- else
- {
- newAdaptors = xalloc((num_adaptors + 1) *
- sizeof(KdVideoAdaptorPtr*));
- if(newAdaptors)
- {
- memcpy(newAdaptors, adaptors,
- num_adaptors * sizeof(KdVideoAdaptorPtr));
- newAdaptors[num_adaptors] = newAdaptor;
- adaptors = newAdaptors;
- num_adaptors++;
- }
- }
- }
-
- if(num_adaptors)
- KdXVScreenInit(pScreen, adaptors, num_adaptors);
-
- if(newAdaptors)
- xfree(newAdaptors);
- return TRUE;
-}
-
-void
-mach64FiniVideo (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- mach64ScreenInfo(pScreenPriv);
- KdVideoAdaptorPtr adapt = mach64s->pAdaptor;
-
- if (adapt)
- {
- Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)(&adapt->pPortPrivates[1]);
- REGION_UNINIT (pScreen, &pPortPriv->clip);
- xfree (adapt);
- }
-}
diff --git a/hw/kdrive/mga/Makefile.am b/hw/kdrive/mga/Makefile.am
deleted file mode 100644
index a7dd2cbf6..000000000
--- a/hw/kdrive/mga/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-INCLUDES = \
- @KDRIVE_INCS@ \
- -I$(top_srcdir)/hw/kdrive/vesa \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xmga
-
-noinst_LIBRARIES = libmga.a
-
-libmga_a_SOURCES = \
- mgadraw.c \
- g400_composite.c \
- g400_common.h \
- mga.c \
- mga.h
-
-Xmga_SOURCES = \
- mgastub.c
-
-MGA_LIBS = \
- libmga.a \
- $(top_builddir)/hw/kdrive/vesa/libvesa.a \
- @KDRIVE_LIBS@
-
-if GLX
-Xmga_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xmga_LDADD = \
- $(MGA_LIBS) \
- @KDRIVE_LIBS@
-
-Xmga_DEPENDENCIES = \
- libmga.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/mga/g400_common.h b/hw/kdrive/mga/g400_common.h
deleted file mode 100644
index 9f16d2431..000000000
--- a/hw/kdrive/mga/g400_common.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright © 2004 Damien Ciabrini
- *
- * 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 Anders Carlsson not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Anders Carlsson makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * DAMIEN CIABRINI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ANDERS CARLSSON 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 __G400_COMMON_H__
-#define __G400_COMMON_H__
-
-/* Color registers */
-#define MGA_REG_DR4 (0x1CD0)
-#define MGA_REG_DR6 (0x1CD8)
-#define MGA_REG_DR7 (0x1CDC)
-#define MGA_REG_DR8 (0x1CE0)
-#define MGA_REG_DR10 (0x1CE8)
-#define MGA_REG_DR11 (0x1CEC)
-#define MGA_REG_DR12 (0x1CF0)
-#define MGA_REG_DR14 (0x1CF8)
-#define MGA_REG_DR15 (0x1CFC)
-
-/* Alpha registers */
-#define MGA_REG_ALPHASTART (0x2C70)
-#define MGA_REG_ALPHAXINC (0x2C74)
-#define MGA_REG_ALPHAYINC (0x2C78)
-#define MGA_REG_ALPHACTRL (0x2C7C)
-# define MGA_SRC_ZERO (0x00000000)
-# define MGA_SRC_ONE (0x00000001)
-# define MGA_SRC_DST_COLOR (0x00000002)
-# define MGA_SRC_ONE_MINUS_DST_COLOR (0x00000003)
-# define MGA_SRC_ALPHA (0x00000004)
-# define MGA_SRC_ONE_MINUS_SRC_ALPHA (0x00000005)
-# define MGA_SRC_DST_ALPHA (0x00000006)
-# define MGA_SRC_ONE_MINUS_DST_ALPHA (0x00000007)
-# define MGA_SRC_SRC_ALPHA_SATURATE (0x00000008)
-# define MGA_SRC_BLEND_MASK (0x0000000f)
-
-# define MGA_DST_ZERO (0x00000000)
-# define MGA_DST_ONE (0x00000010)
-# define MGA_DST_SRC_COLOR (0x00000020)
-# define MGA_DST_ONE_MINUS_SRC_COLOR (0x00000030)
-# define MGA_DST_SRC_ALPHA (0x00000040)
-# define MGA_DST_ONE_MINUS_SRC_ALPHA (0x00000050)
-# define MGA_DST_DST_ALPHA (0x00000060)
-# define MGA_DST_ONE_MINUS_DST_ALPHA (0x00000070)
-# define MGA_DST_BLEND_MASK (0x00000070)
-
-# define MGA_ALPHACHANNEL (0x00000100)
-# define MGA_VIDEOALPHA (0x00000200)
-# define MGA_DIFFUSEDALPHA (0x01000000)
-# define MGA_MODULATEDALPHA (0x02000000)
-
-/* Textures registers */
-#define MGA_REG_TEXORG (0x2c24)
-#define MGA_REG_TEXORG1 (0x2ca4)
-#define MGA_REG_TEXWIDTH (0x2C28)
-#define MGA_REG_TEXHEIGHT (0x2C2C)
-#define MGA_REG_TMR0 (0x2C00)
-#define MGA_REG_TMR1 (0x2C04)
-#define MGA_REG_TMR2 (0x2C08)
-#define MGA_REG_TMR3 (0x2C0C)
-#define MGA_REG_TMR4 (0x2C10)
-#define MGA_REG_TMR5 (0x2C14)
-#define MGA_REG_TMR6 (0x2C18)
-#define MGA_REG_TMR7 (0x2C1C)
-#define MGA_REG_TMR8 (0x2C20)
-
-/* Texture Control Registers */
-#define MGA_REG_TEXCTL (0x2C30)
-# define MGA_TW4 (0x00000000)
-# define MGA_TW8 (0x00000001)
-# define MGA_TW15 (0x00000002)
-# define MGA_TW16 (0x00000003)
-# define MGA_TW12 (0x00000004)
-# define MGA_TW32 (0x00000006)
-# define MGA_TW8A (0x00000007)
-# define MGA_TW8AL (0x00000008)
-# define MGA_TW422 (0x0000000A)
-# define MGA_TW422UYVY (0x0000000B)
-# define MGA_PITCHLIN (0x00000100)
-# define MGA_NOPERSPECTIVE (0x00200000)
-# define MGA_TAKEY (0x02000000)
-# define MGA_TAMASK (0x04000000)
-# define MGA_CLAMPUV (0x18000000)
-#define MGA_REG_TEXCTL2 (0x2C3C)
-# define MGA_G400_TC2_MAGIC (0x00008000)
-# define MGA_TC2_DECALBLEND (0x00000001)
-# define MGA_TC2_IDECAL (0x00000002)
-# define MGA_TC2_DECALDIS (0x00000004)
-# define MGA_TC2_CKSTRANSDIS (0x00000010)
-# define MGA_TC2_BORDEREN (0x00000020)
-# define MGA_TC2_SPECEN (0x00000040)
-# define MGA_TC2_DUALTEX (0x00000080)
-# define MGA_TC2_TABLEFOG (0x00000100)
-# define MGA_TC2_BUMPMAP (0x00000200)
-# define MGA_TC2_SELECT_TMU1 (0x80000000)
-#define MGA_REG_TEXFILTER (0x2C58)
-# define MGA_MIN_NRST (0x00000000)
-# define MGA_MIN_BILIN (0x00000002)
-# define MGA_MIN_ANISO (0x0000000D)
-# define MGA_MAG_NRST (0x00000000)
-# define MGA_MAG_BILIN (0x00000020)
-
-/* Multi-Textures Control Registers */
-#define MGA_REG_TDUALSTAGE0 (0x2CF8)
-#define MGA_REG_TDUALSTAGE1 (0x2CFC)
-# define MGA_TDS_COLOR_ARG2_DIFFUSE (0x00000000)
-# define MGA_TDS_COLOR_ARG2_SPECULAR (0x00000001)
-# define MGA_TDS_COLOR_ARG2_FCOL (0x00000002)
-# define MGA_TDS_COLOR_ARG2_PREVSTAGE (0x00000003)
-# define MGA_TDS_COLOR_ALPHA_DIFFUSE (0x00000000)
-# define MGA_TDS_COLOR_ALPHA_FCOL (0x00000004)
-# define MGA_TDS_COLOR_ALPHA_CURRTEX (0x00000008)
-# define MGA_TDS_COLOR_ALPHA_PREVTEX (0x0000000c)
-# define MGA_TDS_COLOR_ALPHA_PREVSTAGE (0x00000010)
-# define MGA_TDS_COLOR_ARG1_REPLICATEALPHA (0x00000020)
-# define MGA_TDS_COLOR_ARG1_INV (0x00000040)
-# define MGA_TDS_COLOR_ARG2_REPLICATEALPHA (0x00000080)
-# define MGA_TDS_COLOR_ARG2_INV (0x00000100)
-# define MGA_TDS_COLOR_ALPHA1INV (0x00000200)
-# define MGA_TDS_COLOR_ALPHA2INV (0x00000400)
-# define MGA_TDS_COLOR_ARG1MUL_ALPHA1 (0x00000800)
-# define MGA_TDS_COLOR_ARG2MUL_ALPHA2 (0x00001000)
-# define MGA_TDS_COLOR_ARG1ADD_MULOUT (0x00002000)
-# define MGA_TDS_COLOR_ARG2ADD_MULOUT (0x00004000)
-# define MGA_TDS_COLOR_MODBRIGHT_2X (0x00008000)
-# define MGA_TDS_COLOR_MODBRIGHT_4X (0x00010000)
-# define MGA_TDS_COLOR_ADD_SUB (0x00000000)
-# define MGA_TDS_COLOR_ADD_ADD (0x00020000)
-# define MGA_TDS_COLOR_ADD2X (0x00040000)
-# define MGA_TDS_COLOR_ADDBIAS (0x00080000)
-# define MGA_TDS_COLOR_BLEND (0x00100000)
-# define MGA_TDS_COLOR_SEL_ARG1 (0x00000000)
-# define MGA_TDS_COLOR_SEL_ARG2 (0x00200000)
-# define MGA_TDS_COLOR_SEL_ADD (0x00400000)
-# define MGA_TDS_COLOR_SEL_MUL (0x00600000)
-# define MGA_TDS_ALPHA_ARG1_INV (0x00800000)
-# define MGA_TDS_ALPHA_ARG2_DIFFUSE (0x00000000)
-# define MGA_TDS_ALPHA_ARG2_FCOL (0x01000000)
-# define MGA_TDS_ALPHA_ARG2_PREVTEX (0x02000000)
-# define MGA_TDS_ALPHA_ARG2_PREVSTAGE (0x03000000)
-# define MGA_TDS_ALPHA_ARG2_INV (0x04000000)
-# define MGA_TDS_ALPHA_ADD (0x08000000)
-# define MGA_TDS_ALPHA_ADDBIAS (0x10000000)
-# define MGA_TDS_ALPHA_ADD2X (0x20000000)
-# define MGA_TDS_ALPHA_SEL_ARG1 (0x00000000)
-# define MGA_TDS_ALPHA_SEL_ARG2 (0x40000000)
-# define MGA_TDS_ALPHA_SEL_ADD (0x80000000)
-# define MGA_TDS_ALPHA_SEL_MUL (0xc0000000)
-
-
-
-/* Composition Prototypes. MMIO Access */
-Bool
-mgaCheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture);
-
-Bool
-mgaPrepareComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture, PixmapPtr pSrc,
- PixmapPtr pMask, PixmapPtr pDst);
-
-void
-mgaComposite(int srcX, int srcY, int maskX, int maskY,
- int dstX, int dstY, int w, int h);
-
-void
-mgaDoneComposite(void);
-
-#endif
diff --git a/hw/kdrive/mga/g400_composite.c b/hw/kdrive/mga/g400_composite.c
deleted file mode 100644
index dda9d9347..000000000
--- a/hw/kdrive/mga/g400_composite.c
+++ /dev/null
@@ -1,510 +0,0 @@
-/*
- * Copyright © 2004 Damien Ciabrini
- *
- * 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 Anders Carlsson not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Anders Carlsson makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * DAMIEN CIABRINI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-
-#include "mga.h"
-#include "g400_common.h"
-
-
-static PicturePtr currentSrcPicture;
-static PicturePtr currentMaskPicture;
-static PixmapPtr currentSrc;
-static PixmapPtr currentMask;
-static int src_w2;
-static int src_h2;
-static int mask_w2;
-static int mask_h2;
-
-struct blendinfo {
- Bool dst_alpha;
- Bool src_alpha;
- CARD32 blend_cntl;
-};
-
-static struct blendinfo mgaBlendOP[] = {
- /* Clear */
- {0, 0, MGA_SRC_ZERO | MGA_DST_ZERO},
- /* Src */
- {0, 0, MGA_SRC_ONE | MGA_DST_ZERO},
- /* Dst */
- {0, 0, MGA_SRC_ZERO | MGA_DST_ONE},
- /* Over */
- {0, 1, MGA_SRC_ONE | MGA_DST_ONE_MINUS_SRC_ALPHA},
- /* OverReverse */
- {1, 0, MGA_SRC_ONE_MINUS_DST_ALPHA | MGA_DST_ONE},
- /* In */
- {1, 0, MGA_SRC_DST_ALPHA | MGA_DST_ZERO},
- /* InReverse */
- {0, 1, MGA_SRC_ZERO | MGA_DST_SRC_ALPHA},
- /* Out */
- {1, 0, MGA_SRC_ONE_MINUS_DST_ALPHA | MGA_DST_ZERO},
- /* OutReverse */
- {0, 1, MGA_SRC_ZERO | MGA_DST_ONE_MINUS_SRC_ALPHA},
- /* Atop */
- {1, 1, MGA_SRC_DST_ALPHA | MGA_DST_ONE_MINUS_SRC_ALPHA},
- /* AtopReverse */
- {1, 1, MGA_SRC_ONE_MINUS_DST_ALPHA | MGA_DST_SRC_ALPHA},
- /* Xor */
- {1, 1, MGA_SRC_ONE_MINUS_DST_ALPHA | MGA_DST_ONE_MINUS_SRC_ALPHA},
- /* Add */
- {0, 0, MGA_SRC_ONE | MGA_DST_ONE},
-};
-
-struct formatinfo {
- int fmt;
- CARD32 card_fmt;
-};
-
-static struct formatinfo texformats[] = {
- {PICT_a8r8g8b8, MGA_TW32},
- {PICT_x8r8g8b8, MGA_TW32},
- {PICT_r5g6b5, MGA_TW16},
- {PICT_a1r5g5b5, MGA_TW15},
- {PICT_x1r5g5b5, MGA_TW15},
- {PICT_a4r4g4b4, MGA_TW12},
- {PICT_x4r4g4b4, MGA_TW12},
- {PICT_a8, MGA_TW8A},
-};
-
-static int
-MGA_LOG2( int val )
-{
- int ret = 0;
- if (val==1) return 0;
- while (val >> ret)
- ret++;
-
- return ((1 << (ret-1)) == val) ? (ret-1) : ret;
-}
-
-
-static Bool
-mgaCheckSourceTexture (int tmu,
- PicturePtr pPict)
-{
- int w = pPict->pDrawable->width;
- int h = pPict->pDrawable->height;
- int i;
- CARD32 texctl = 0;
-
- if ((w > 2047) || (h > 2047))
- MGA_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
-
- for (i = 0; i < sizeof(texformats) / sizeof(texformats[0]); i++) {
- if (texformats[i].fmt == pPict->format) {
- texctl = texformats[i].card_fmt;
- break;
- }
- }
- if (texctl == 0) {
- MGA_FALLBACK(("Unsupported picture format 0x%x\n", pPict->format));
- }
-
- if (pPict->repeat && ((w & (w - 1)) != 0 || (h & (h - 1)) != 0))
- MGA_FALLBACK(("NPOT repeat unsupported (%dx%d)\n", w, h));
-
- if (pPict->filter != PictFilterNearest &&
- pPict->filter != PictFilterBilinear)
- MGA_FALLBACK(("Unsupported filter 0x%x\n", pPict->filter));
-
- return TRUE;
-}
-
-static Bool
-PrepareSourceTexture (int tmu,
- PicturePtr pSrcPicture,
- PixmapPtr pSrc)
-{
- KdScreenPriv (pSrc->drawable.pScreen);
- int mem_base=(int)pScreenPriv->screen->memory_base;
- int pitch = pSrc->devKind / (pSrc->drawable.bitsPerPixel >> 3);
- int i;
-
- int w = pSrc->drawable.width;
- int h = pSrc->drawable.height;
- int w_log2 = MGA_LOG2(w);
- int h_log2 = MGA_LOG2(h);
-
- int texctl = MGA_PITCHLIN | ((pitch & (2048 - 1)) << 9) |
- MGA_CLAMPUV | MGA_NOPERSPECTIVE;
- int flags = 0;
- int texctl2 = MGA_G400_TC2_MAGIC | flags;
-
- for (i = 0; i < sizeof(texformats) / sizeof(texformats[0]); i++) {
- if (texformats[i].fmt == pSrcPicture->format) {
- texctl |= texformats[i].card_fmt;
- break;
- }
- }
-
- if (PICT_FORMAT_A(pSrcPicture->format) != 0) {
- texctl |= MGA_TAKEY;
- } else {
- texctl |= MGA_TAMASK | MGA_TAKEY;
- }
-
- if (pSrcPicture->repeat) {
- texctl &= ~MGA_CLAMPUV;
- }
-
- if (tmu == 1)
- texctl2 |= MGA_TC2_DUALTEX | MGA_TC2_SELECT_TMU1 | flags;
-
- mgaWaitAvail (6);
- MGA_OUT32 (mmio, MGA_REG_TEXCTL2, texctl2);
- MGA_OUT32 (mmio, MGA_REG_TEXCTL, texctl);
- /* Source (texture) address + pitch */
- MGA_OUT32 (mmio, MGA_REG_TEXORG, ((int)pSrc->devPrivate.ptr - mem_base));
- MGA_OUT32 (mmio, MGA_REG_TEXWIDTH, (w-1)<<18 | ((8-w_log2)&63)<<9 | w_log2);
- MGA_OUT32 (mmio, MGA_REG_TEXHEIGHT, (h-1)<<18 | ((8-h_log2)&63)<<9 | h_log2);
- /* Set blit filtering flags */
- if (pSrcPicture->filter == PictFilterBilinear) {
- MGA_OUT32 (mmio, MGA_REG_TEXFILTER,
- (0x10<<21) | MGA_MAG_BILIN | MGA_MIN_BILIN);
- } else {
- MGA_OUT32 (mmio, MGA_REG_TEXFILTER,
- (0x10<<21) | MGA_MAG_NRST | MGA_MIN_NRST);
- }
-
- if (tmu == 1) {
- mgaWaitAvail (1);
- MGA_OUT32 (mmio, MGA_REG_TEXCTL2, MGA_G400_TC2_MAGIC | MGA_TC2_DUALTEX | flags);
- }
-
- return TRUE;
-}
-
-
-/*
- * The formals params are the elements of the following matrix:
- *
- * Dest Transform Src
- * coords coords
- * / Xdst \ / X_incx X_incy X_init \ / Xsrc \
- * | Ydst | = | Y_incx Y_incy Y_init | x | Ysrc |
- * \ 1 / \ H_incx H_incy H_init / \ 1 /
- *
- * matrix elements are 32bits fixed points (16.16)
- * mga_fx_* is the size of the fixed point for the TMU
- */
-static void
-setTMIncrementsRegs(int X_incx,
- int X_incy,
- int X_init,
- int Y_incx,
- int Y_incy,
- int Y_init,
- int H_incx,
- int H_incy,
- int H_init,
- int mga_fx_width_size,
- int mga_fx_height_size) {
- int decalw = mga_fx_width_size - 16;
- int decalh = mga_fx_height_size - 16;
-
- /* Convert 16 bits fixpoint -> MGA variable size fixpoint */
- if (decalw >= 0) {
- X_incx = X_incx << decalw;
- X_incy = X_incy << decalw;
- X_init = X_init << decalw;
- } else {
- decalw =- decalw;
- X_incx = X_incx >> decalw;
- X_incy = X_incy >> decalw;
- X_init = X_init >> decalw;
- }
-
- /* Convert 16 bits fixpoint -> MGA variable size fixpoint */
- if (decalh >= 0) {
- Y_incx = Y_incx << decalh;
- Y_incy = Y_incy << decalh;
- Y_init = Y_init << decalh;
- } else {
- decalh =- decalh;
- Y_incx = Y_incx >> decalh;
- Y_incy = Y_incy >> decalh;
- Y_init = Y_init >> decalh;
- }
-
- /* Set TM registers */
- mgaWaitAvail (9);
- MGA_OUT32 (mmio, MGA_REG_TMR0, X_incx);
- MGA_OUT32 (mmio, MGA_REG_TMR1, Y_incx);
- MGA_OUT32 (mmio, MGA_REG_TMR2, X_incy);
- MGA_OUT32 (mmio, MGA_REG_TMR3, Y_incy);
- MGA_OUT32 (mmio, MGA_REG_TMR4, H_incx);
- MGA_OUT32 (mmio, MGA_REG_TMR5, H_incy);
- MGA_OUT32 (mmio, MGA_REG_TMR6, X_init);
- MGA_OUT32 (mmio, MGA_REG_TMR7, Y_init);
- MGA_OUT32 (mmio, MGA_REG_TMR8, H_init);
-}
-
-
-
-
-Bool
-mgaCheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskPicture,
- PicturePtr pDstPicture)
-{
- if (op >= sizeof(mgaBlendOP) / sizeof(mgaBlendOP[0]))
- MGA_FALLBACK(("unsupported op %x", op));
- if (!mgaCheckSourceTexture (0, pSrcPicture))
- return FALSE;
-
- if (pMaskPicture != NULL) {
- if (PICT_FORMAT_A(pMaskPicture->format) == 0)
- MGA_FALLBACK(("Mask without alpha unsupported"));
- if (!mgaCheckSourceTexture (1, pMaskPicture))
- return FALSE;
- }
-
- if (pMaskPicture->componentAlpha)
- MGA_FALLBACK(("Component alpha unsupported"));
-
- if (pDstPicture->format == PICT_a8)
- MGA_FALLBACK(("render to A8 unsupported"));
-
- return TRUE;
-}
-
-#define C_ARG1_CUR 0x0
-#define C_ARG1_ALPHA MGA_TDS_COLOR_ARG1_REPLICATEALPHA
-#define C_ARG2_DIFFUSE MGA_TDS_COLOR_ARG2_DIFFUSE
-#define C_ARG2_FCOL MGA_TDS_COLOR_ARG2_FCOL
-#define C_ARG2_PREV MGA_TDS_COLOR_ARG2_PREVSTAGE
-#define C_ARG1_INV MGA_TDS_COLOR_ARG1_INV
-#define C_ARG2_INV MGA_TDS_COLOR_ARG2_INV
-#define COLOR_MUL MGA_TDS_COLOR_SEL_MUL
-#define COLOR_ARG1 MGA_TDS_COLOR_SEL_ARG1
-#define COLOR_ARG2 MGA_TDS_COLOR_SEL_ARG2
-#define A_ARG1_CUR 0x0
-#define A_ARG2_IGN A_ARG2_DIFFUSE
-#define A_ARG2_FCOL MGA_TDS_ALPHA_ARG2_FCOL
-#define A_ARG2_DIFFUSE MGA_TDS_ALPHA_ARG2_DIFFUSE
-#define A_ARG2_PREV MGA_TDS_ALPHA_ARG2_PREVSTAGE
-#define ALPHA_MUL MGA_TDS_ALPHA_SEL_MUL
-#define ALPHA_ARG1 MGA_TDS_ALPHA_SEL_ARG1
-#define ALPHA_ARG2 MGA_TDS_ALPHA_SEL_ARG2
-
-
-Bool
-mgaPrepareComposite (int op,
- PicturePtr pSrcPicture,
- PicturePtr pMaskPicture,
- PicturePtr pDstPicture,
- PixmapPtr pSrc,
- PixmapPtr pMask,
- PixmapPtr pDst)
-{
- KdScreenPriv (pSrc->drawable.pScreen);
- int mem_base=(int)pScreenPriv->screen->memory_base;
- int cmd, blendcntl;
- int ds0, ds1;
-
- /* Init MGA (clipping) */
- mgaSetup (pSrc->drawable.pScreen, pDst->drawable.bitsPerPixel, 1);
-
- /* Initialize fg color to 0, used in the src = A8 case */
- MGA_OUT32 (mmio, MGA_REG_FCOL, 0xff000000);
-
- /* Destination flags */
- mgaWaitAvail (2);
- MGA_OUT32 (mmio, MGA_REG_DSTORG, ((int)pDst->devPrivate.ptr - mem_base));
- MGA_OUT32 (mmio, MGA_REG_PITCH,
- pDst->devKind / (pDst->drawable.bitsPerPixel >> 3));
-
-
- /* Source(s) flags */
- if (!PrepareSourceTexture (0, pSrcPicture, pSrc)) return FALSE;
- if (pMask != NULL) {
- if (!PrepareSourceTexture (1, pMaskPicture, pMask)) return FALSE;
- }
-
- /* Prepare multi-texture registers */
- ds0=ds1=0;
-
- if (pSrcPicture->format == PICT_a8) {
- /* C = 0 A = As */
- /* MGA HW: A8 format makes RGB white. We use FCOL for the black
- * If FCOL was not 0, it would have been be premultiplied (RENDER)
- * color component would have been:
- * C_ARG1_ALPHA | C_ARG2_FCOL | COLOR_MUL
- */
- ds0=C_ARG2_FCOL | COLOR_ARG2 |
- A_ARG1_CUR | ALPHA_ARG1;
- /* MGA HW: TMU1 must be enabled when DUALSTAGE0 contains something */
- if (pMask == NULL) {
- if (!PrepareSourceTexture (1, pSrcPicture, pSrc)) return FALSE;
- ds1=C_ARG2_PREV | COLOR_ARG2 |
- A_ARG2_PREV | ALPHA_ARG2;
- }
- } else {
- /* C = Cs A = As */
- ds0=C_ARG1_CUR | COLOR_ARG1 |
- A_ARG1_CUR | ALPHA_ARG1;
- }
-
- if (pMask != NULL) {
- /* As or Am might be NULL. in this case we don't multiply because,
- * the alpha component holds garbage.
- */
- int color,alpha;
- if (PICT_FORMAT_A (pMaskPicture->format) == 0) {
- /* C = Cs */
- color = C_ARG2_PREV | COLOR_ARG2;
- } else {
- /* C = Am * Cs */
- color = C_ARG1_ALPHA | C_ARG2_PREV | COLOR_MUL;
- }
-
- if (PICT_FORMAT_A (pMaskPicture->format) == 0) {
- /* A = As */
- alpha = A_ARG2_PREV | ALPHA_ARG2;
- } else if (PICT_FORMAT_A (pSrcPicture->format) == 0) {
- /* A = Am */
- alpha = A_ARG1_CUR | ALPHA_ARG1;
- } else {
- /* A = Am * As */
- alpha = A_ARG1_CUR | A_ARG2_PREV | ALPHA_MUL;
- }
-
- ds1 = color | alpha;
- }
-
- /* MultiTexture modulation */
- mgaWaitAvail (2);
- MGA_OUT32 (mmio, MGA_REG_TDUALSTAGE0, ds0);
- MGA_OUT32 (mmio, MGA_REG_TDUALSTAGE1, ds1);
-
-
- cmd = MGA_OPCOD_TEXTURE_TRAP | MGA_ATYPE_RSTR | 0x000c0000 |
- MGA_DWGCTL_SHIFTZERO | MGA_DWGCTL_SGNZERO | MGA_DWGCTL_ARZERO |
- MGA_ATYPE_I;
-
- blendcntl = mgaBlendOP[op].blend_cntl;
- if (PICT_FORMAT_A(pDstPicture->format) == 0 && mgaBlendOP[op].dst_alpha) {
- if ((blendcntl & MGA_SRC_BLEND_MASK) == MGA_SRC_DST_ALPHA)
- blendcntl = (blendcntl & ~MGA_SRC_BLEND_MASK) | MGA_SRC_ONE;
- else if ((blendcntl & MGA_SRC_BLEND_MASK) == MGA_SRC_ONE_MINUS_DST_ALPHA)
- blendcntl = (blendcntl & ~MGA_SRC_BLEND_MASK) | MGA_SRC_ZERO;
- }
-
- mgaWaitAvail (2);
- MGA_OUT32 (mmio, MGA_REG_DWGCTL, cmd);
- MGA_OUT32 (mmio, MGA_REG_ALPHACTRL, MGA_ALPHACHANNEL | blendcntl);
-
- currentSrcPicture = pSrcPicture;
- currentMaskPicture = pMaskPicture;
- currentSrc = pSrc;
- currentMask = pMask;
- src_w2 = MGA_LOG2 (currentSrc->drawable.width);
- src_h2 = MGA_LOG2 (currentSrc->drawable.height);
- mask_w2 = MGA_LOG2 (currentMask->drawable.width);
- mask_h2 = MGA_LOG2 (currentMask->drawable.height);
-
- return TRUE;
-}
-
-
-void
-mgaComposite (int srcX,
- int srcY,
- int maskX,
- int maskY,
- int dstX,
- int dstY,
- int width,
- int height)
-{
- /* Source positions can be outside source textures' boundaries.
- * We clamp the values here to avoid rendering glitches.
- */
- srcX=srcX % currentSrc->drawable.width;
- srcY=srcY % currentSrc->drawable.height;
- maskX=maskX % currentMask->drawable.width;
- maskY=maskY % currentMask->drawable.height;
-
- if (currentSrcPicture->transform) {
- setTMIncrementsRegs (currentSrcPicture->transform->matrix[0][0],
- currentSrcPicture->transform->matrix[0][1],
- currentSrcPicture->transform->matrix[0][2] +
- (srcX << 16),
- currentSrcPicture->transform->matrix[1][0],
- currentSrcPicture->transform->matrix[1][1],
- currentSrcPicture->transform->matrix[1][2] +
- (srcY << 16),
- currentSrcPicture->transform->matrix[2][0],
- currentSrcPicture->transform->matrix[2][1],
- currentSrcPicture->transform->matrix[2][2],
- 20-src_w2, 20-src_h2);
- } else {
- setTMIncrementsRegs (1 << 16, 0, srcX << 16,
- 0, 1 << 16, srcY << 16,
- 0, 0, 0x10000,
- 20-src_w2, 20-src_h2);
- }
-
- if (currentMask != NULL) {
- mgaWaitAvail (1);
- MGA_OUT32 (mmio, MGA_REG_TEXCTL2,
- MGA_G400_TC2_MAGIC | MGA_TC2_DUALTEX | MGA_TC2_SELECT_TMU1);
- if (currentMaskPicture->transform) {
- setTMIncrementsRegs (currentMaskPicture->transform->matrix[0][0],
- currentMaskPicture->transform->matrix[0][1],
- currentMaskPicture->transform->matrix[0][2] +
- (maskX << 16),
- currentMaskPicture->transform->matrix[1][0],
- currentMaskPicture->transform->matrix[1][1],
- currentMaskPicture->transform->matrix[1][2] +
- (maskY << 16),
- currentMaskPicture->transform->matrix[2][0],
- currentMaskPicture->transform->matrix[2][1],
- currentMaskPicture->transform->matrix[2][2],
- 20-mask_w2, 20-mask_h2);
- } else {
- setTMIncrementsRegs (1 << 16, 0, maskX << 16,
- 0, 1 << 16, maskY << 16,
- 0, 0, 0x10000,
- 20-mask_w2, 20-mask_h2);
- }
-
- mgaWaitAvail (1);
- MGA_OUT32 (mmio, MGA_REG_TEXCTL2, MGA_G400_TC2_MAGIC | MGA_TC2_DUALTEX);
- }
-
- /* Destination Bounding Box
- * (Boundary Right | Boundary Left, Y dest | Height)
- */
- mgaWaitAvail (2);
- MGA_OUT32 (mmio, MGA_REG_FXBNDRY,
- ((dstX + width) << 16) | (dstX & 0xffff));
- MGA_OUT32 (mmio, MGA_REG_YDSTLEN | MGA_REG_EXEC,
- (dstY << 16) | (height & 0xffff));
-}
-
-void
-mgaDoneComposite (void)
-{
-}
diff --git a/hw/kdrive/mga/mga.c b/hw/kdrive/mga/mga.c
deleted file mode 100644
index 2ae35d143..000000000
--- a/hw/kdrive/mga/mga.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright © 2003 Anders Carlsson
- *
- * 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 Anders Carlsson not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Anders Carlsson makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "mga.h"
-
-static Bool
-mgaCardInit (KdCardInfo *card)
-{
- MgaCardInfo *mgac;
-
- mgac = (MgaCardInfo *) xalloc (sizeof (MgaCardInfo));
- if (!mgac)
- return FALSE;
-
- mgaMapReg (card, mgac);
-
- if (!vesaInitialize (card, &mgac->vesa))
- {
- xfree (mgac);
- return FALSE;
- }
-
- mgac->fifo_size = 0;
-
- card->driver = mgac;
-
- return TRUE;
-}
-
-static Bool
-mgaScreenInit (KdScreenInfo *screen)
-{
- MgaScreenInfo *mgas;
-
- mgas = (MgaScreenInfo *) xalloc (sizeof (MgaScreenInfo));
- if (!mgas)
- return FALSE;
- memset (mgas, '\0', sizeof (MgaScreenInfo));
- if (!vesaScreenInitialize (screen, &mgas->vesa))
- {
- xfree (mgas);
- return FALSE;
- }
-#if 0
- /* if (!mgac->reg)
- screen->dumb = TRUE; */
-
- if (mgas->vesa.mapping != VESA_LINEAR)
- screen->dumb = TRUE;
-
- fprintf (stderr, "vesa mapping is %d\n", mgas->vesa.mapping);
-#endif
- screen->driver = mgas;
- return TRUE;
-}
-
-static Bool
-mgaInitScreen (ScreenPtr pScreen)
-{
- return vesaInitScreen (pScreen);
-}
-
-static Bool
-mgaFinishInitScreen (ScreenPtr pScreen)
-{
- Bool ret;
-
- ret = vesaFinishInitScreen (pScreen);
-
- return ret;
-}
-
-static Bool
-mgaCreateResources (ScreenPtr pScreen)
-{
- return vesaCreateResources (pScreen);
-}
-
-static void
-mgaPreserve (KdCardInfo *card)
-{
- vesaPreserve (card);
-}
-
-Bool
-mgaMapReg (KdCardInfo *card, MgaCardInfo *mgac)
-{
- mgac->reg_base = (CARD8 *) KdMapDevice (MGA_REG_BASE (card),
- MGA_REG_SIZE (card));
-
- if (!mgac->reg_base)
- {
- return FALSE;
- }
-
- KdSetMappedMode (MGA_REG_BASE (card),
- MGA_REG_SIZE (card),
- KD_MAPPED_MODE_REGISTERS);
-
- return TRUE;
-}
-
-void
-mgaUnmapReg (KdCardInfo *card, MgaCardInfo *mgac)
-{
- if (mgac->reg_base)
- {
- KdResetMappedMode (MGA_REG_BASE (card),
- MGA_REG_SIZE (card),
- KD_MAPPED_MODE_REGISTERS);
- KdUnmapDevice ((void *) mgac->reg_base, MGA_REG_SIZE (card));
- mgac->reg_base = 0;
- /* mgac->reg = 0; */
- }
-}
-
-void
-mgaSetMMIO (KdCardInfo *card, MgaCardInfo *mgac)
-{
- if (!mgac->reg_base)
- mgaMapReg (card, mgac);
-}
-
-void
-mgaResetMMIO (KdCardInfo *card, MgaCardInfo *mgac)
-{
- mgaUnmapReg (card, mgac);
-}
-
-static Bool
-mgaDPMS (ScreenPtr pScreen, int mode)
-{
- /* XXX */
- return TRUE;
-}
-
-static Bool
-mgaEnable (ScreenPtr pScreen)
-{
- KdScreenPriv (pScreen);
- MgaCardInfo *mgac = pScreenPriv->card->driver;
-
- if (!vesaEnable (pScreen))
- return FALSE;
-
- mgaSetMMIO (pScreenPriv->card, mgac);
- mgaDPMS (pScreen, KD_DPMS_NORMAL);
-
- return TRUE;
-}
-
-static void
-mgaDisable (ScreenPtr pScreen)
-{
- KdScreenPriv (pScreen);
- MgaCardInfo *mgac = pScreenPriv->card->driver;
-
- mgaResetMMIO (pScreenPriv->card, mgac);
-
- vesaDisable (pScreen);
-}
-
-static void
-mgaRestore (KdCardInfo *card)
-{
- MgaCardInfo *mgac = card->driver;
-
- mgaResetMMIO (card, mgac);
- vesaRestore (card);
-}
-
-static void
-mgaScreenFini (KdScreenInfo *screen)
-{
- MgaScreenInfo *mgas = (MgaScreenInfo *) screen->driver;
-
- vesaScreenFini (screen);
- xfree (mgas);
- screen->driver = 0;
-}
-
-static void
-mgaCardFini (KdCardInfo *card)
-{
- MgaCardInfo *mgac = (MgaCardInfo *)card->driver;
-
- mgaUnmapReg (card, mgac);
- vesaCardFini (card);
-}
-
-KdCardFuncs mgaFuncs = {
- mgaCardInit, /* cardinit */
- mgaScreenInit, /* scrinit */
- mgaInitScreen, /* initScreen */
- mgaFinishInitScreen, /* finishInitScreen */
- mgaCreateResources, /* createRes */
- mgaPreserve, /* preserve */
- mgaEnable, /* enable */
- mgaDPMS, /* dpms */
- mgaDisable, /* disable */
- mgaRestore, /* restore */
- mgaScreenFini, /* scrfini */
- mgaCardFini, /* cardfini */
-
- 0, /* initCursor */
- 0, /* enableCursor */
- 0, /* disableCursor */
- 0, /* finiCursor */
- 0, /* recolorCursor */
-
- mgaDrawInit, /* initAccel */
- mgaDrawEnable, /* enableAccel */
- mgaDrawDisable, /* disableAccel */
- mgaDrawFini, /* finiAccel */
-
- vesaGetColors, /* getColors */
- vesaPutColors, /* putColors */
-};
-
diff --git a/hw/kdrive/mga/mga.h b/hw/kdrive/mga/mga.h
deleted file mode 100644
index 8fa956096..000000000
--- a/hw/kdrive/mga/mga.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright © 2003-2004 Anders Carlsson
- *
- * 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 Anders Carlsson not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Anders Carlsson makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ANDERS CARLSSON 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 _MGA_H_
-#define _MGA_H_
-#include <vesa.h>
-#include <klinux.h>
-
-#define MGA_REG_BASE(c) ((c)->attr.address[1])
-#define MGA_REG_SIZE(c) (0x4000)
-
-#define MGA_OUT32(mmio, a, v) (*(VOL32 *) ((mmio) + (a)) = (v))
-#define MGA_IN32(mmio, a) (*(VOL32 *) ((mmio) + (a)))
-
-#define MGA_REG_EXEC (0x0100)
-#define MGA_REG_DWGCTL (0x1c00)
-#define MGA_REG_PLNWT (0x1c1c)
-#define MGA_REG_FCOL (0x1c24)
-#define MGA_REG_MACCESS (0x1c04)
-#define MGA_REG_SGN (0x1c58)
-#define MGA_REG_AR0 (0x1c60)
-#define MGA_REG_AR1 (0x1c64)
-#define MGA_REG_AR2 (0x1c68)
-#define MGA_REG_AR3 (0x1c6C)
-#define MGA_REG_AR4 (0x1c70)
-#define MGA_REG_AR5 (0x1c74)
-#define MGA_REG_AR6 (0x1c78)
-
-#define MGA_REG_CXBNDRY (0x1c80)
-#define MGA_REG_FXBNDRY (0x1c84)
-#define MGA_REG_YDSTLEN (0x1c88)
-#define MGA_REG_PITCH (0x1c8c)
-#define MGA_REG_YTOP (0x1c98)
-#define MGA_REG_YBOT (0x1c9c)
-#define MGA_REG_FIFOSTATUS (0x1e10)
-#define MGA_REG_STATUS (0x1e14)
-#define MGA_REG_CACHEFLUSH (0x1fff)
-#define MGA_REG_SRCORG (0x2cb4)
-#define MGA_REG_DSTORG (0x2cb8)
-
-#define MGA_G4XX_DEVICE_ID (0x0525)
-
-#define MGA_PW8 (0)
-#define MGA_PW16 (1)
-#define MGA_PW24 (2)
-#define MGA_PW32 (3)
-
-/* Drawing opcodes */
-#define MGA_OPCOD_TRAP (4)
-#define MGA_OPCOD_TEXTURE_TRAP (6)
-#define MGA_OPCOD_BITBLT (8)
-
-#define MGA_DWGCTL_SOLID (1 << 11)
-#define MGA_DWGCTL_ARZERO (1 << 12)
-#define MGA_DWGCTL_SGNZERO (1 << 13)
-#define MGA_DWGCTL_SHIFTZERO (1 << 14)
-
-#define MGA_DWGCTL_BFCOL (2 << 25)
-
-#define MGA_ATYPE_RPL (0 << 4)
-#define MGA_ATYPE_RSTR (1 << 4)
-#define MGA_ATYPE_ZI (3 << 4)
-#define MGA_ATYPE_BLK (4 << 4)
-#define MGA_ATYPE_I (7 << 4)
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-typedef struct _mgaCardInfo {
- VesaCardPrivRec vesa;
- CARD8 *reg_base;
- int fifo_size;
-} MgaCardInfo;
-
-#define getMgaCardInfo(kd) ((MgaCardInfo *) ((kd)->card->driver))
-#define mgaCardInfo(kd) MgaCardInfo *mgac = getMgaCardInfo(kd)
-
-typedef struct _mgaScreenInfo {
- VesaScreenPrivRec vesa;
-
- KaaScreenInfoRec kaa;
-
- int pitch;
- int pw;
-} MgaScreenInfo;
-
-#define getMgaScreenInfo(kd) ((MgaScreenInfo *) ((kd)->screen->driver))
-#define mgaScreenInfo(kd) MgaScreenInfo *mgas = getMgaScreenInfo(kd)
-
-
-VOL8 *mmio;
-
-
-Bool
-mgaMapReg (KdCardInfo *card, MgaCardInfo *mgac);
-
-void
-mgaUnmapReg (KdCardInfo *card, MgaCardInfo *mgac);
-
-void
-mgaSetMMIO (KdCardInfo *card, MgaCardInfo *mgac);
-
-void
-mgaResetMMIO (KdCardInfo *card, MgaCardInfo *mgac);
-
-Bool
-mgaDrawSetup (ScreenPtr pScreen);
-
-Bool
-mgaDrawInit (ScreenPtr pScreen);
-
-void
-mgaDrawEnable (ScreenPtr pScreen);
-
-void
-mgaDrawDisable (ScreenPtr pScreen);
-
-void
-mgaDrawFini (ScreenPtr pScreen);
-
-extern KdCardFuncs mgaFuncs;
-
-
-void
-mgaWaitAvail (int n);
-
-void
-mgaWaitIdle (void);
-
-Bool
-mgaSetup (ScreenPtr pScreen, int dest_bpp, int wait);
-
-
-#if 0
-#define MGA_FALLBACK(x) \
-do { \
- ErrorF x; \
- return FALSE; \
-} while (0);
-#else
-#define MGA_FALLBACK(x) return FALSE;
-#endif
-
-#endif /* _MGA_H_ */
diff --git a/hw/kdrive/mga/mgadraw.c b/hw/kdrive/mga/mgadraw.c
deleted file mode 100644
index d27e8c9cc..000000000
--- a/hw/kdrive/mga/mgadraw.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * Copyright © 2003-2004 Anders Carlsson
- *
- * 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 Anders Carlsson not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Anders Carlsson makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "mga.h"
-#include "g400_common.h"
-#include "kaa.h"
-#include <unistd.h>
-
-CARD32 mgaRop[16] = {
- /* GXclear */ MGA_ATYPE_RPL | 0x00000000, /* 0 */
- /* GXand */ MGA_ATYPE_RSTR | 0x00080000, /* src AND dst */
- /* GXandReverse */ MGA_ATYPE_RSTR | 0x00040000, /* src AND NOT dst */
- /* GXcopy */ MGA_ATYPE_RSTR | 0x000c0000, /* src */
- /* GXandInverted */ MGA_ATYPE_RSTR | 0x00020000, /* NOT src AND dst */
- /* GXnoop */ MGA_ATYPE_RSTR | 0x000a0000, /* dst */
- /* GXxor */ MGA_ATYPE_RSTR | 0x00060000, /* src XOR dst */
- /* GXor */ MGA_ATYPE_RSTR | 0x000e0000, /* src OR dst */
- /* GXnor */ MGA_ATYPE_RSTR | 0x00010000, /* NOT src AND NOT dst */
- /* GXequiv */ MGA_ATYPE_RSTR | 0x00090000, /* NOT src XOR dst */
- /* GXinvert */ MGA_ATYPE_RSTR | 0x00050000, /* NOT dst */
- /* GXorReverse */ MGA_ATYPE_RSTR | 0x000d0000, /* src OR NOT dst */
- /* GXcopyInverted */ MGA_ATYPE_RPL | 0x00030000, /* NOT src */
- /* GXorInverted */ MGA_ATYPE_RSTR | 0x000b0000, /* NOT src OR dst */
- /* GXnand */ MGA_ATYPE_RSTR | 0x00070000, /* NOT src OR NOT dst */
- /* GXset */ MGA_ATYPE_RPL | 0x000f0000 /* 1 */
-};
-
-VOL8 *mmio;
-int fifo_size;
-int pitch, src_pitch;
-int dir;
-
-void
-mgaWaitAvail (int n)
-{
- if (fifo_size < n) {
- while ((fifo_size = MGA_IN32 (mmio, MGA_REG_FIFOSTATUS) & 0xff) < n)
- ;
- }
-
- fifo_size -= n;
-}
-
-#define MGA_OUT8(mmio, a, v) (*(VOL8 *) ((mmio) + (a)) = (v))
-#define MGA_REG_CRTC_INDEX (0x1fd4)
-
-void
-mgaWaitIdle (void)
-{
-
- mgaWaitAvail (2);
- MGA_OUT32(mmio, MGA_REG_CACHEFLUSH, 0);
- /* MGA_OUT8 (mmio, MGA_REG_CRTC_INDEX, 0); */
- while (MGA_IN32 (mmio, MGA_REG_STATUS) & 0x10000)
- ;
-}
-
-static void
-mgaWaitMarker (ScreenPtr pScreen, int marker)
-{
- KdScreenPriv (pScreen);
- mgaCardInfo (pScreenPriv);
-
- mmio = mgac->reg_base;
-
- mgaWaitIdle ();
-}
-
-Bool
-mgaSetup (ScreenPtr pScreen, int dest_bpp, int wait)
-{
- KdScreenPriv (pScreen);
- mgaScreenInfo (pScreenPriv);
- mgaCardInfo (pScreenPriv);
-
- fifo_size = 0;
- mmio = mgac->reg_base;
- pitch = mgas->pitch;
-
- if (!mmio)
- return FALSE;
-
- mgaWaitAvail (wait + 4);
- /* Set the format of the destination pixmap */
- switch (dest_bpp) {
- case 8:
- MGA_OUT32 (mmio, MGA_REG_MACCESS, MGA_PW8);
- break;
- case 16:
- MGA_OUT32 (mmio, MGA_REG_MACCESS, MGA_PW16);
- break;
- case 24:
- case 32:
- MGA_OUT32 (mmio, MGA_REG_MACCESS, MGA_PW24);
- break;
- }
- MGA_OUT32 (mmio, MGA_REG_CXBNDRY, 0xffff0000);
- MGA_OUT32 (mmio, MGA_REG_YTOP, 0x00000000);
- MGA_OUT32 (mmio, MGA_REG_YBOT, 0x007fffff);
-
- return TRUE;
-}
-
-static Bool
-mgaPrepareSolid (PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg)
-{
-
- KdScreenPriv(pPixmap->drawable.pScreen);
- int cmd;
- int dst_org;
- /* We must pad pm and fg depending on the format of the
- * destination pixmap
- */
- switch (pPixmap->drawable.bitsPerPixel) {
- case 16:
- fg |= fg << 16;
- pm |= pm << 16;
- break;
- case 8:
- fg |= (fg << 8) | (fg << 16) | (fg << 24);
- pm |= (pm << 8) | (pm << 16) | (pm << 24);
- break;
- }
-
- cmd = MGA_OPCOD_TRAP | MGA_DWGCTL_SOLID | MGA_DWGCTL_ARZERO | MGA_DWGCTL_SGNZERO |
- MGA_DWGCTL_SHIFTZERO | mgaRop[alu];
-
- dst_org = (int)pPixmap->devPrivate.ptr - (int)pScreenPriv->screen->memory_base;
-
- mgaSetup (pPixmap->drawable.pScreen, pPixmap->drawable.bitsPerPixel, 5);
- MGA_OUT32 (mmio, MGA_REG_DSTORG, dst_org);
- MGA_OUT32 (mmio, MGA_REG_PITCH, pPixmap->devKind / (pPixmap->drawable.bitsPerPixel >> 3));
- MGA_OUT32 (mmio, MGA_REG_DWGCTL, cmd);
- MGA_OUT32 (mmio, MGA_REG_FCOL, fg);
- MGA_OUT32 (mmio, MGA_REG_PLNWT, pm);
-
- return TRUE;
-}
-
-static void
-mgaSolid (int x1, int y1, int x2, int y2)
-{
- mgaWaitAvail (2);
- MGA_OUT32 (mmio, MGA_REG_FXBNDRY, (x2 << 16) | (x1 & 0xffff));
- MGA_OUT32 (mmio, MGA_REG_YDSTLEN | MGA_REG_EXEC, (y1 << 16) | (y2 - y1));
-}
-
-static void
-mgaDoneSolid (void)
-{
-}
-
-#define BLIT_LEFT 1
-#define BLIT_UP 4
-
-static Bool
-mgaPrepareCopy (PixmapPtr pSrcPixmap, PixmapPtr pDstPixmap,
- int dx, int dy, int alu, Pixel pm)
-{
- KdScreenPriv(pSrcPixmap->drawable.pScreen);
- int cmd;
-
- cmd = MGA_OPCOD_BITBLT | MGA_DWGCTL_BFCOL | MGA_DWGCTL_SHIFTZERO | mgaRop[alu];
-
- dir = 0;
-
- if (dy < 0)
- dir |= BLIT_UP;
- if (dx < 0)
- dir |= BLIT_LEFT;
-
- mgaSetup (pSrcPixmap->drawable.pScreen,
- pDstPixmap->drawable.bitsPerPixel, 7);
-
- MGA_OUT32 (mmio, MGA_REG_SRCORG, ((int)pSrcPixmap->devPrivate.ptr -
- (int)pScreenPriv->screen->memory_base));
- MGA_OUT32 (mmio, MGA_REG_DSTORG, ((int)pDstPixmap->devPrivate.ptr -
- (int)pScreenPriv->screen->memory_base));
- MGA_OUT32 (mmio, MGA_REG_PITCH, (pDstPixmap->devKind /
- (pDstPixmap->drawable.bitsPerPixel >> 3)));
- src_pitch = pSrcPixmap->devKind / (pSrcPixmap->drawable.bitsPerPixel >> 3);
-
- MGA_OUT32 (mmio, MGA_REG_DWGCTL, cmd);
- MGA_OUT32 (mmio, MGA_REG_SGN, dir);
- MGA_OUT32 (mmio, MGA_REG_PLNWT, pm);
- MGA_OUT32 (mmio, MGA_REG_AR5, src_pitch * (dy < 0 ? -1 : 1) );
-
- return TRUE;
-}
-
-static void
-mgaCopy (int srcX, int srcY, int dstX, int dstY, int w, int h)
-{
- int start, end;
- if (dir & BLIT_UP)
- {
- srcY += h - 1;
- dstY += h - 1;
- }
-
- w--;
- start = end = srcY * src_pitch + srcX;
-
- if (dir & BLIT_LEFT)
- start += w;
- else
- end += w;
-
- mgaWaitAvail (4);
- MGA_OUT32 (mmio, MGA_REG_AR0, end);
- MGA_OUT32 (mmio, MGA_REG_AR3, start);
- MGA_OUT32 (mmio, MGA_REG_FXBNDRY, ((dstX + w) << 16) | (dstX & 0xffff));
- MGA_OUT32 (mmio, MGA_REG_YDSTLEN | MGA_REG_EXEC, (dstY << 16) | h);
-}
-
-static void
-mgaDoneCopy (void)
-{
-}
-
-#if 0
-static Bool
-mgaUploadToScreen(PixmapPtr pDst, char *src, int src_pitch) {
- /*fprintf(stderr,"Upload to Screen %p [%d]\n",src,src_pitch);*/
- return TRUE;
-}
-#endif
-
-Bool
-mgaDrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- mgaScreenInfo (pScreenPriv);
- KdCardInfo *card = pScreenPriv->card;
-
- memset(&mgas->kaa, 0, sizeof(KaaScreenInfoRec));
- mgas->kaa.waitMarker = mgaWaitMarker;
- mgas->kaa.PrepareSolid = mgaPrepareSolid;
- mgas->kaa.Solid = mgaSolid;
- mgas->kaa.DoneSolid = mgaDoneSolid;
- mgas->kaa.PrepareCopy = mgaPrepareCopy;
- mgas->kaa.Copy = mgaCopy;
- mgas->kaa.DoneCopy = mgaDoneCopy;
- /* In PW24 mode, we need to align to "3 64-bytes" */
- mgas->kaa.offsetAlign = 192;
- /* Pitch alignment is in sets of 32 pixels, and we need to cover 32bpp, so
- * 128 bytes
- */
- mgas->kaa.pitchAlign = 128;
- mgas->kaa.flags = KAA_OFFSCREEN_PIXMAPS;
-
- if (card->attr.deviceID == MGA_G4XX_DEVICE_ID) {
- mgas->kaa.CheckComposite = mgaCheckComposite;
- mgas->kaa.PrepareComposite = mgaPrepareComposite;
- mgas->kaa.Composite = mgaComposite;
- mgas->kaa.DoneComposite = mgaDoneComposite;
- }
-
- /*mgas->kaa.UploadToScreen=mgaUploadToScreen;*/
-
- if (!kaaDrawInit (pScreen, &mgas->kaa))
- return FALSE;
-
- return TRUE;
-}
-
-void
-mgaDrawEnable (ScreenPtr pScreen)
-{
- KdScreenPriv (pScreen);
- mgaScreenInfo (pScreenPriv);
-
- mgas->pitch = pScreenPriv->screen->width;
-
- switch (pScreenPriv->screen->fb[0].depth) {
- case 8:
- mgas->pw = MGA_PW8;
- break;
- case 16:
- mgas->pw = MGA_PW16;
- break;
- case 24:
- case 32:
- mgas->pw = MGA_PW24;
- break;
- default:
- FatalError ("unsupported pixel format");
- }
-
- kaaMarkSync (pScreen);
-}
-
-void
-mgaDrawDisable (ScreenPtr pScreen)
-{
- kaaWaitSync(pScreen);
-}
-
-void
-mgaDrawFini (ScreenPtr pScreen)
-{
-}
-
diff --git a/hw/kdrive/mga/mgastub.c b/hw/kdrive/mga/mgastub.c
deleted file mode 100644
index 61e6963b8..000000000
--- a/hw/kdrive/mga/mgastub.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright © 2003 Anders Carlsson
- *
- * 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 Anders Carlsson not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Anders Carlsson makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "mga.h"
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
-
- if (LinuxFindPci (0x102b, 0x0525, 0, &attr))
- KdCardInfoAdd (&mgaFuncs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
- vesaUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- if (!(ret = vesaProcessArgument (argc, argv, i)))
- ret = KdProcessArgument(argc, argv, i);
- return ret;
-}
diff --git a/hw/kdrive/neomagic/Makefile.am b/hw/kdrive/neomagic/Makefile.am
deleted file mode 100644
index b449c37c5..000000000
--- a/hw/kdrive/neomagic/Makefile.am
+++ /dev/null
@@ -1,49 +0,0 @@
-if KDRIVEFBDEV
-FBDEV_INCLUDES =-I$(top_srcdir)/hw/kdrive/fbdev
-FBDEV_LIBS = $(top_builddir)/hw/kdrive/fbdev/libfbdev.a
-endif
-
-if KDRIVEVESA
-VESA_INCLUDES = -I$(top_srcdir)/hw/kdrive/vesa
-VESA_LIBS = $(top_builddir)/hw/kdrive/vesa/libvesa.a
-endif
-
-INCLUDES = \
- @KDRIVE_INCS@ \
- $(FBDEV_INCLUDES) \
- $(VESA_INCLUDES) \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xneomagic
-
-noinst_LIBRARIES = libneomagic.a
-
-libneomagic_a_SOURCES = \
- neomagic.c \
- neomagic.h \
- neo_draw.c
-
-Xneomagic_SOURCES = \
- neomagicstub.c
-
-NEOMAGIC_LIBS = \
- libneomagic.a \
- ${FBDEV_LIBS} \
- ${VESA_LIBS} \
- @KDRIVE_LIBS@
-
-if GLX
-Xneomagic_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xneomagic_LDADD = \
- $(NEOMAGIC_LIBS) \
- @KDRIVE_LIBS@ \
- @XSERVER_LIBS@
-
-Xneomagic_DEPENDENCIES = \
- libneomagic.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/neomagic/README b/hw/kdrive/neomagic/README
deleted file mode 100644
index 2b086d75c..000000000
--- a/hw/kdrive/neomagic/README
+++ /dev/null
@@ -1,15 +0,0 @@
-Neomagic KDrive driver for xserver
-
-This is a very simple implementation for Neomagic based cards.
-Almost all functions are handled by the VESA driver, and
-only solid drawing and bitblt are done with acceleration,
-
-This driver has been tested in MagicGraph 256AV+(NM2230) card
-but it should work on other cards as well.
-
-The only warning is to choose a working mode. You can ask
-for supported modes using -listmodes. I use -mode 0x117.
-
---
-Franco Catrin L.
-fcatrin@tuxpan.com
diff --git a/hw/kdrive/neomagic/neo_draw.c b/hw/kdrive/neomagic/neo_draw.c
deleted file mode 100644
index 89452b3d8..000000000
--- a/hw/kdrive/neomagic/neo_draw.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- *
- * Copyright © 2004 Franco Catrin
- *
- * 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 Franco Catrin not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Franco Catrin makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * FRANCO CATRIN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL FRANCO CATRIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "neomagic.h"
-
-#include <X11/Xmd.h>
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-#include "picturestr.h"
-
-NeoMMIO *mmio;
-NeoScreenInfo *screen;
-NeoCardInfo *card;
-CARD32 fgColor;
-CARD32 rop;
-
-CARD32 neoRop[16] = {
- 0x000000, /* GXclear */
- 0x080000, /* GXand */
- 0x040000, /* GXandReverse */
- 0x0c0000, /* GXcopy */
- 0x020000, /* GXandInvert */
- 0x0a0000, /* GXnoop */
- 0x060000, /* GXxor */
- 0x0e0000, /* GXor */
- 0x010000, /* GXnor */
- 0x090000, /* GXequiv */
- 0x050000, /* GXinvert */
- 0x0d0000, /* GXorReverse */
- 0x030000, /* GXcopyInvert */
- 0x0b0000, /* GXorInverted */
- 0x070000, /* GXnand */
- 0x0f0000 /* GXset */
-};
-
-static void neoWaitIdle(NeoCardInfo *neoc)
-{
- // if MMIO is not working it may halt the machine
- unsigned int i = 0;
- while ((mmio->bltStat & 1) && ++i<100000);
-}
-
-static void neoWaitMarker (ScreenPtr pScreen, int marker)
-{
- KdScreenPriv(pScreen);
- neoCardInfo(pScreenPriv);
-
- neoWaitIdle(neoc);
-}
-
-
-static Bool neoPrepareSolid(PixmapPtr pPixmap,
- int alu,
- Pixel pm,
- Pixel fg)
-{
- FbBits depthMask = FbFullMask(pPixmap->drawable.depth);
- if ((pm & depthMask) != depthMask) {
- return FALSE;
- } else {
- fgColor = fg;
- if (alu!=3) DBGOUT("used ROP %i\n", alu);
- rop = neoRop[alu];
- return TRUE;
- }
-}
-
-static void neoSolid (int x1, int y1, int x2, int y2)
-{
- int x, y, w, h;
- x = x1;
- y = y1;
- w = x2-x1;
- h = y2-y1;
- neoWaitIdle(card);
- mmio->fgColor = fgColor;
- mmio->bltCntl =
- NEO_BC3_FIFO_EN |
- NEO_BC0_SRC_IS_FG |
- NEO_BC3_SKIP_MAPPING | rop;
- mmio->dstStart = y * screen->pitch + x * screen->depth;
-
- mmio->xyExt = (unsigned long)(h << 16) | (w & 0xffff);
-
-}
-
-
-static void neoDoneSolid(void)
-{
-}
-
-static Bool neoPrepareCopy (PixmapPtr pSrcPixpam, PixmapPtr pDstPixmap,
- int dx, int dy, int alu, Pixel pm)
-{
- rop = neoRop[alu];
- return TRUE;
-}
-
-static void neoCopy (int srcX, int srcY, int dstX, int dstY, int w, int h)
-{
- neoWaitIdle(card);
-
- if ((dstY < srcY) || ((dstY == srcY) && (dstX < srcX))) {
- mmio->bltCntl =
- NEO_BC3_FIFO_EN |
- NEO_BC3_SKIP_MAPPING | rop;
- mmio->srcStart = srcY * screen->pitch + srcX * screen->depth;
- mmio->dstStart = dstY * screen->pitch + dstX * screen->depth;
-
- mmio->xyExt = (unsigned long)(h << 16) | (w & 0xffff);
- } else {
- mmio->bltCntl = NEO_BC0_X_DEC |
- NEO_BC0_DST_Y_DEC |
- NEO_BC0_SRC_Y_DEC |
- NEO_BC3_FIFO_EN |
- NEO_BC3_SKIP_MAPPING | rop;
- srcX+=w-1;
- dstX+=w-1;
- srcY+=h-1;
- dstY+=h-1;
- mmio->srcStart = srcY * screen->pitch + srcX * screen->depth;
- mmio->dstStart = dstY * screen->pitch + dstX * screen->depth;
- mmio->xyExt = (unsigned long)(h << 16) | (w & 0xffff);
- }
-
-}
-
-static void neoDoneCopy (void)
-{
-}
-
-
-Bool neoDrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- neoScreenInfo(pScreenPriv);
-
- ENTER();
-
- memset(&neos->kaa, 0, sizeof(KaaScreenInfoRec));
- neos->kaa.waitMarker = neoWaitMarker;
- neos->kaa.PrepareSolid = neoPrepareSolid;
- neos->kaa.Solid = neoSolid;
- neos->kaa.DoneSolid = neoDoneSolid;
- neos->kaa.PrepareCopy = neoPrepareCopy;
- neos->kaa.Copy = neoCopy;
- neos->kaa.DoneCopy = neoDoneCopy;
-
- if (!kaaDrawInit (pScreen, &neos->kaa)) {
- return FALSE;
- }
- LEAVE();
- return TRUE;
-}
-
-void neoDrawEnable (ScreenPtr pScreen)
-{
- ENTER();
- SetupNeo(pScreen);
- screen = neos;
- card = neoc;
- mmio = neoc->mmio;
- screen->depth = (screen->backendScreen.mode.BitsPerPixel+7)/8;
- screen->pitch = screen->backendScreen.mode.BytesPerScanLine;
- DBGOUT("NEO depth=%x, pitch=%x\n", screen->depth, screen->pitch);
- LEAVE();
-}
-
-void neoDrawDisable (ScreenPtr pScreen)
-{
- ENTER();
- LEAVE();
-}
-
-void neoDrawFini (ScreenPtr pScreen)
-{
- ENTER();
- LEAVE();
-}
-
diff --git a/hw/kdrive/neomagic/neomagic.c b/hw/kdrive/neomagic/neomagic.c
deleted file mode 100644
index ac0c7569a..000000000
--- a/hw/kdrive/neomagic/neomagic.c
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- *
- * Copyright © 2004 Franco Catrin
- *
- * 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 Franco Catrin not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Franco Catrin makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * FRANCO CATRIN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL FRANCO CATRIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "neomagic.h"
-#include <sys/io.h>
-
-struct NeoChipInfo neoChips[] = {
- {NEO_VENDOR, 0x0001, CAP_NM2070, "MagicGraph 128(NM2070)",
- 896, 65000, 2048, 0x100, 1024, 1024, 1024},
- {NEO_VENDOR, 0x0002, CAP_NM2090, "MagicGraph 128V(NM2090)",
- 1152, 80000, 2048, 0x100, 2048, 1024, 1024},
- {NEO_VENDOR, 0x0003, CAP_NM2090, "MagicGraph 128ZV(NM2093)",
- 1152, 80000, 2048, 0x100, 2048, 1024, 1024},
- {NEO_VENDOR, 0x0083, CAP_NM2097, "MagicGraph 128ZV+(NM2097)",
- 1152, 80000, 1024, 0x100, 2048, 1024, 1024},
- {NEO_VENDOR, 0x0004, CAP_NM2097, "MagicGraph 128XD(NM2160)",
- 2048, 90000, 1024, 0x100, 2048, 1024, 1024},
- {NEO_VENDOR, 0x0005, CAP_NM2200, "MagicGraph 256AV(NM2200)",
- 2560, 110000, 1024, 0x1000, 4096, 1280, 1024},
- {NEO_VENDOR, 0x0025, CAP_NM2200, "MagicGraph 256AV+(NM2230)",
- 3008, 110000, 1024, 0x1000, 4096, 1280, 1024},
- {NEO_VENDOR, 0x0006, CAP_NM2200, "MagicGraph 256ZX(NM2360)",
- 4096, 110000, 1024, 0x1000, 4096, 1280, 1024},
- {NEO_VENDOR, 0x0016, CAP_NM2200, "MagicGraph 256XL+(NM2380)",
- 6144, 110000, 1024, 0x1000, 8192, 1280, 1024},
- {0, 0, 0, NULL},
-};
-
-static Bool
-neoCardInit(KdCardInfo *card)
-{
- NeoCardInfo *neoc;
- struct NeoChipInfo *chip;
-
- neoc =(NeoCardInfo *) xalloc(sizeof(NeoCardInfo));
- if(!neoc) {
- return FALSE;
- }
-
- if(!vesaInitialize(card, &neoc->backendCard)) {
- xfree(neoc);
- return FALSE;
- }
-
- for(chip = neoChips; chip->name != NULL; ++chip) {
- if(chip->device == card->attr.deviceID) {
- neoc->chip = chip;
- break;
- }
- }
-
- ErrorF("Using Neomagic card: %s\n", neoc->chip->name);
-
- neoMapReg(card, neoc);
-
- card->driver = neoc;
-
- return TRUE;
-}
-
-static Bool
-neoScreenInit(KdScreenInfo *screen)
-{
- NeoScreenInfo *neos;
- int screen_size, memory;
-
- neos = xcalloc(sizeof(NeoScreenInfo), 1);
- if(neos == NULL) {
- return FALSE;
- }
-
- memset (neos, '\0', sizeof (NeoScreenInfo));
-
-
- if(!vesaScreenInitialize(screen, &neos->backendScreen)) {
- xfree(neos);
- return FALSE;
- }
-
- screen->softCursor = TRUE; // no hardware color cursor available
-
- neos->screen = neos->backendScreen.fb;
-
- memory = neos->backendScreen.fb_size;
- screen_size = screen->fb[0].byteStride * screen->height;
- memory -= screen_size;
-
- if(memory > screen->fb[0].byteStride) {
- neos->off_screen = neos->screen + screen_size;
- neos->off_screen_size = memory;
- } else {
- neos->off_screen = 0;
- neos->off_screen_size = 0;
- }
-
- screen->driver = neos;
-
- return TRUE;
-}
-
-static Bool
-neoInitScreen(ScreenPtr pScreen)
-{
- return vesaInitScreen(pScreen);
-}
-
-static Bool
-neoFinishInitScreen(ScreenPtr pScreen)
-{
- return vesaFinishInitScreen(pScreen);
-}
-
-static Bool
-neoCreateResources(ScreenPtr pScreen)
-{
- return vesaCreateResources(pScreen);
-}
-
-void
-neoPreserve(KdCardInfo *card)
-{
- vesaPreserve(card);
-}
-
-CARD8
-neoGetIndex(NeoCardInfo *nvidiac, CARD16 addr, CARD8 index)
-{
- outb(index, addr);
-
- return inb(addr+1);
-}
-
-void
-neoSetIndex(NeoCardInfo *nvidiac, CARD16 addr, CARD8 index, CARD8 val)
-{
- outb(index, addr);
- outb(val, addr+1);
-}
-
-static void neoLock(NeoCardInfo *neoc){
- CARD8 cr11;
- neoSetIndex(neoc, 0x3ce, 0x09, 0x00);
- neoSetIndex(neoc, 0x3ce, 0x11, 0x0); // disable MMIO and linear mode
- cr11 = neoGetIndex(neoc, 0x3d4, 0x11);
- neoSetIndex(neoc, 0x3d4, 0x11, cr11 | 0x80);
-}
-
-static void neoUnlock(NeoCardInfo *neoc){
- CARD8 cr11;
- cr11 = neoGetIndex(neoc, 0x3d4, 0x11);
- neoSetIndex(neoc, 0x3d4, 0x11, cr11 & 0x7F);
- neoSetIndex(neoc, 0x3ce, 0x09, 0x26);
- neoSetIndex(neoc, 0x3ce, 0x11, 0xc0); // enable MMIO and linear mode
-}
-
-
-Bool
-neoMapReg(KdCardInfo *card, NeoCardInfo *neoc)
-{
- neoc->reg_base = card->attr.address[1] & 0xFFF80000;
- if(!neoc->reg_base) {
- return FALSE;
- }
-
- neoc->mmio = KdMapDevice(neoc->reg_base, NEO_REG_SIZE(card));
- if(!neoc->mmio) {
- return FALSE;
- }
-
- KdSetMappedMode(neoc->reg_base, NEO_REG_SIZE(card), KD_MAPPED_MODE_REGISTERS);
-
- return TRUE;
-}
-
-void
-neoUnmapReg(KdCardInfo *card, NeoCardInfo *neoc)
-{
- if(neoc->reg_base)
- {
- neoSetIndex(neoc, 0x3ce, 0x82,0);
- KdResetMappedMode(neoc->reg_base, NEO_REG_SIZE(card), KD_MAPPED_MODE_REGISTERS);
- KdUnmapDevice((void *)neoc->mmio, NEO_REG_SIZE(card));
- neoc->reg_base = 0;
- }
-}
-
-static void
-neoSetMMIO(KdCardInfo *card, NeoCardInfo *neoc)
-{
- if(!neoc->reg_base)
- neoMapReg(card, neoc);
- neoUnlock(neoc);
-}
-
-static void
-neoResetMMIO(KdCardInfo *card, NeoCardInfo *neoc)
-{
- neoUnmapReg(card, neoc);
- neoLock(neoc);
-}
-
-
-Bool
-neoEnable(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- neoCardInfo(pScreenPriv);
-
- if(!vesaEnable(pScreen)) {
- return FALSE;
- }
-
- neoSetMMIO(pScreenPriv->card, neoc);
- return TRUE;
-}
-
-void
-neoDisable(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- neoCardInfo(pScreenPriv);
-
- neoResetMMIO(pScreenPriv->card, neoc);
-
- vesaDisable(pScreen);
-}
-
-static void
-neoGetColors(ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
-{
- vesaGetColors(pScreen, fb, n, pdefs);
-}
-
-static void
-neoPutColors(ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
-{
- vesaPutColors(pScreen, fb, n, pdefs);
-}
-
-static Bool
-neoDPMS(ScreenPtr pScreen, int mode)
-{
- return vesaDPMS(pScreen, mode);
-}
-
-static void
-neoRestore(KdCardInfo *card)
-{
- NeoCardInfo *neoc = card->driver;
-
- neoResetMMIO(card, neoc);
- vesaRestore(card);
-}
-
-static void
-neoScreenFini(KdScreenInfo *screen)
-{
- NeoScreenInfo *neos =(NeoScreenInfo *) screen->driver;
-
- vesaScreenFini(screen);
- xfree(neos);
- screen->driver = 0;
-}
-
-static void
-neoCardFini(KdCardInfo *card)
-{
- NeoCardInfo *neoc = card->driver;
-
- neoUnmapReg(card, neoc);
- vesaCardFini(card);
-}
-
-#define neoCursorInit 0 // initCursor
-#define neoCursorEnable 0 // enableCursor
-#define neoCursorDisable 0 // disableCursor
-#define neoCursorFini 0 // finiCursor */
-#define neoRecolorCursor 0 // recolorCursor */
-//#define neoDrawInit 0 // initAccel
-//#define neoDrawEnable 0 // enableAccel
-//#define neoDrawSync 0 // syncAccel
-//#define neoDrawDisable 0 // disableAccel
-//#define neoDrawFini 0 // finiAccel
-
-KdCardFuncs neoFuncs = {
- neoCardInit, // cardinit
- neoScreenInit, // scrinit
- neoInitScreen, // initScreen
- neoFinishInitScreen, // finishInitScreen
- neoCreateResources, // createRes
- neoPreserve, // preserve
- neoEnable, // enable
- neoDPMS, // dpms
- neoDisable, // disable
- neoRestore, // restore
- neoScreenFini, // scrfini
- neoCardFini, // cardfini
-
- neoCursorInit, // initCursor
- neoCursorEnable, // enableCursor
- neoCursorDisable, // disableCursor
- neoCursorFini, // finiCursor
- neoRecolorCursor, // recolorCursor
-
- neoDrawInit, // initAccel
- neoDrawEnable, // enableAccel
- neoDrawDisable, // disableAccel
- neoDrawFini, // finiAccel
-
- neoGetColors, // getColors
- neoPutColors, // putColors
-};
diff --git a/hw/kdrive/neomagic/neomagic.h b/hw/kdrive/neomagic/neomagic.h
deleted file mode 100644
index 9b100051b..000000000
--- a/hw/kdrive/neomagic/neomagic.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- *
- * Copyright © 2004 Franco Catrin
- *
- * 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 Franco Catrin not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Franco Catrin makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * FRANCO CATRIN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL FRANCO CATRIN 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 _NEOMAGIC_H_
-#define _NEOMAGIC_H_
-#include <backend.h>
-#include "kxv.h"
-#include "klinux.h"
-#include "vesa.h"
-
-
-#define DBGOUT DebugF
-
-#define ENTER() DBGOUT("Enter %s\n", __FUNCTION__)
-#define LEAVE() DBGOUT("Leave %s\n", __FUNCTION__)
-
-#define NEO_VENDOR 0x10c8
-#define CAP_NM2070 0x01 /* If it's a NM2070 series */
-#define CAP_NM2090 0x02 /* If it's a NM2090 series */
-#define CAP_NM2097 0x03 /* If it's a NM2097 series */
-#define CAP_NM2200 0x04 /* If it's a NM2200 series */
-
-#define NEO_BS0_BLT_BUSY 0x00000001
-#define NEO_BS0_FIFO_AVAIL 0x00000002
-#define NEO_BS0_FIFO_PEND 0x00000004
-
-#define NEO_BC0_DST_Y_DEC 0x00000001
-#define NEO_BC0_X_DEC 0x00000002
-#define NEO_BC0_SRC_TRANS 0x00000004
-#define NEO_BC0_SRC_IS_FG 0x00000008
-#define NEO_BC0_SRC_Y_DEC 0x00000010
-#define NEO_BC0_FILL_PAT 0x00000020
-#define NEO_BC0_SRC_MONO 0x00000040
-#define NEO_BC0_SYS_TO_VID 0x00000080
-
-#define NEO_BC1_DEPTH8 0x00000100
-#define NEO_BC1_DEPTH16 0x00000200
-#define NEO_BC1_X_320 0x00000400
-#define NEO_BC1_X_640 0x00000800
-#define NEO_BC1_X_800 0x00000c00
-#define NEO_BC1_X_1024 0x00001000
-#define NEO_BC1_X_1152 0x00001400
-#define NEO_BC1_X_1280 0x00001800
-#define NEO_BC1_X_1600 0x00001c00
-#define NEO_BC1_DST_TRANS 0x00002000
-#define NEO_BC1_MSTR_BLT 0x00004000
-#define NEO_BC1_FILTER_Z 0x00008000
-
-#define NEO_BC2_WR_TR_DST 0x00800000
-
-#define NEO_BC3_SRC_XY_ADDR 0x01000000
-#define NEO_BC3_DST_XY_ADDR 0x02000000
-#define NEO_BC3_CLIP_ON 0x04000000
-#define NEO_BC3_FIFO_EN 0x08000000
-#define NEO_BC3_BLT_ON_ADDR 0x10000000
-#define NEO_BC3_SKIP_MAPPING 0x80000000
-
-#define NEO_MODE1_DEPTH8 0x0100
-#define NEO_MODE1_DEPTH16 0x0200
-#define NEO_MODE1_DEPTH24 0x0300
-#define NEO_MODE1_X_320 0x0400
-#define NEO_MODE1_X_640 0x0800
-#define NEO_MODE1_X_800 0x0c00
-#define NEO_MODE1_X_1024 0x1000
-#define NEO_MODE1_X_1152 0x1400
-#define NEO_MODE1_X_1280 0x1800
-#define NEO_MODE1_X_1600 0x1c00
-#define NEO_MODE1_BLT_ON_ADDR 0x2000
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-#define NEO_REG_SIZE(c) (0x200000L)
-
-typedef volatile struct {
- CARD32 bltStat;
- CARD32 bltCntl;
- CARD32 xpColor;
- CARD32 fgColor;
- CARD32 bgColor;
- CARD32 pitch;
- CARD32 clipLT;
- CARD32 clipRB;
- CARD32 srcBitOffset;
- CARD32 srcStart;
- CARD32 reserved0;
- CARD32 dstStart;
- CARD32 xyExt;
-
- CARD32 reserved1[19];
-
- CARD32 pageCntl;
- CARD32 pageBase;
- CARD32 postBase;
- CARD32 postPtr;
- CARD32 dataPtr;
-} NeoMMIO;
-
-typedef struct _neoCardInfo {
- VesaCardPrivRec backendCard;
-
- CARD32 reg_base;
- NeoMMIO *mmio;
- int dstOrg;
- int dstPitch;
- int dstPixelWidth;
-
- int srcOrg;
- int srcPitch;
- int srcPixelWidth;
-
- struct NeoChipInfo *chip;
-
- CARD32 bltCntl;
-
-} NeoCardInfo;
-
-struct NeoChipInfo {
- CARD16 vendor;
- CARD16 device;
- CARD8 caps;
- char *name;
- int videoRam;
- int maxClock;
- int cursorMem;
- int cursorOff;
- int linearSize;
- int maxWidth;
- int maxHeight;
-};
-
-#define getNeoCardInfo(kd) ((NeoCardInfo *) ((kd)->card->driver))
-#define neoCardInfo(kd) NeoCardInfo *neoc = getNeoCardInfo(kd)
-
-typedef struct _neoScreenInfo {
- VesaScreenPrivRec backendScreen;
-
- CARD8 *screen;
- CARD8 *off_screen;
- int off_screen_size;
- int pitch;
- int depth;
- KdVideoAdaptorPtr pAdaptor;
- KaaScreenInfoRec kaa;
-} NeoScreenInfo;
-
-#define getNeoScreenInfo(kd) ((NeoScreenInfo *) ((kd)->screen->driver))
-#define neoScreenInfo(kd) NeoScreenInfo *neos = getNeoScreenInfo(kd)
-
-#define SetupNeo(s) KdScreenPriv(s); \
- neoCardInfo(pScreenPriv); \
- neoScreenInfo(pScreenPriv);
-
-void
-neoPreserve (KdCardInfo *card);
-
-Bool
-neoEnable (ScreenPtr pScreen);
-
-void
-neoDisable (ScreenPtr pScreen);
-
-Bool
-neoMapReg (KdCardInfo *card, NeoCardInfo *nvidiac);
-
-void
-neoUnmapReg (KdCardInfo *card, NeoCardInfo *nvidiac);
-
-CARD8
-neoGetIndex (NeoCardInfo *nvidiac, CARD16 addr, CARD8 id);
-
-void
-neoSetIndex (NeoCardInfo *nvidiac, CARD16 addr, CARD8 id, CARD8 val);
-
-Bool
-neoDrawInit (ScreenPtr pScreen);
-
-void
-neoDrawEnable (ScreenPtr pScreen);
-
-void
-neoDrawDisable (ScreenPtr pScreen);
-
-void
-neoDrawFini (ScreenPtr pScreen);
-
-extern KdCardFuncs neoFuncs;
-
-#endif /* _NEOMAGIC_H_ */
diff --git a/hw/kdrive/neomagic/neomagicstub.c b/hw/kdrive/neomagic/neomagicstub.c
deleted file mode 100644
index c7ec83b44..000000000
--- a/hw/kdrive/neomagic/neomagicstub.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- *
- * Copyright © 2004 Franco Catrin
- *
- * 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 Franco Catrin not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Franco Catrin makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * FRANCO CATRIN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL FRANCO CATRIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "neomagic.h"
-
-extern struct NeoChipInfo neoChips[];
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
- struct NeoChipInfo *chip;
-
- for (chip = neoChips; chip->name != NULL; ++chip) {
- int j = 0;
- while (LinuxFindPci(chip->vendor, chip->device, j++, &attr)) {
- KdCardInfoAdd(&neoFuncs, &attr, 0);
- }
- }
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
- vesaUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- if (!(ret = vesaProcessArgument (argc, argv, i)))
- ret = KdProcessArgument(argc, argv, i);
- return ret;
-}
diff --git a/hw/kdrive/nvidia/Makefile.am b/hw/kdrive/nvidia/Makefile.am
deleted file mode 100644
index 81736c311..000000000
--- a/hw/kdrive/nvidia/Makefile.am
+++ /dev/null
@@ -1,39 +0,0 @@
-INCLUDES = \
- @KDRIVE_INCS@ \
- -I$(top_srcdir)/hw/kdrive/vesa \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xnvidia
-
-noinst_LIBRARIES = libnvidia.a
-
-# nvidiavideo.c
-
-libnvidia_a_SOURCES = \
- nvidia.c \
- nvidiadraw.c \
- nvidia.h \
- nvidiadraw.h
-
-Xnvidia_SOURCES = \
- nvidiastub.c
-
-NVIDIA_LIBS = \
- libnvidia.a \
- $(top_builddir)/hw/kdrive/vesa/libvesa.a \
- @KDRIVE_LIBS@
-
-if GLX
-Xnvidia_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xnvidia_LDADD = \
- $(NVIDIA_LIBS) \
- @KDRIVE_LIBS@
-
-Xnvidia_DEPENDENCIES = \
- libnvidia.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/nvidia/nvidia.c b/hw/kdrive/nvidia/nvidia.c
deleted file mode 100644
index be42e561a..000000000
--- a/hw/kdrive/nvidia/nvidia.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "nvidia.h"
-#include "kaa.h"
-#include <sys/io.h>
-
-static Bool
-nvidiaCardInit (KdCardInfo *card)
-{
- NvidiaCardInfo *nvidiac;
-
- nvidiac = (NvidiaCardInfo *) xalloc (sizeof (NvidiaCardInfo));
- if (!nvidiac)
- return FALSE;
-
- (void) nvidiaMapReg (card, nvidiac);
-
- if (!vesaInitialize (card, &nvidiac->vesa))
- {
- xfree (nvidiac);
- return FALSE;
- }
-
- card->driver = nvidiac;
-
- return TRUE;
-}
-
-static Bool
-nvidiaScreenInit (KdScreenInfo *screen)
-{
- NvidiaCardInfo *nvidiac = screen->card->driver;
- NvidiaScreenInfo *nvidias;
- int screen_size, memory;
-
- nvidias = (NvidiaScreenInfo *) xalloc (sizeof (NvidiaScreenInfo));
- if (!nvidias)
- return FALSE;
- memset (nvidias, '\0', sizeof (NvidiaScreenInfo));
- if (!vesaScreenInitialize (screen, &nvidias->vesa))
- {
- xfree (nvidias);
- return FALSE;
- }
- if (!nvidiac->reg_base)
- screen->dumb = TRUE;
- if (nvidias->vesa.mapping != VESA_LINEAR)
- screen->dumb = TRUE;
- nvidias->screen = nvidias->vesa.fb;
- memory = nvidias->vesa.fb_size;
- screen_size = screen->fb[0].byteStride * screen->height;
- if (nvidias->screen && memory >= screen_size + 2048)
- {
- memory -= 2048;
- nvidias->cursor_base = nvidias->screen + memory - 2048;
- }
- else
- nvidias->cursor_base = 0;
- screen->softCursor = TRUE; /* XXX for now */
- memory -= screen_size;
- if (memory > screen->fb[0].byteStride)
- {
- nvidias->off_screen = nvidias->screen + screen_size;
- nvidias->off_screen_size = memory;
- }
- else
- {
- nvidias->off_screen = 0;
- nvidias->off_screen_size = 0;
- }
- screen->driver = nvidias;
- return TRUE;
-}
-
-static Bool
-nvidiaInitScreen (ScreenPtr pScreen)
-{
-#if 0
-#ifdef XV
- KdScreenPriv(pScreen);
- NvidiaCardInfo *nvidiac = pScreenPriv->screen->card->driver;
- if (nvidiac->media_reg && nvidiac->reg)
- nvidiaInitVideo(pScreen);
-#endif
-#endif
- return vesaInitScreen (pScreen);
-}
-
-#ifdef RANDR
-static Bool
-nvidiaRandRSetConfig (ScreenPtr pScreen,
- Rotation rotation,
- int rate,
- RRScreenSizePtr pSize)
-{
- kaaWaitSync (pScreen);
-
- if (!vesaRandRSetConfig (pScreen, rotation, rate, pSize))
- return FALSE;
-
- return TRUE;
-}
-
-static void
-nvidiaRandRInit (ScreenPtr pScreen)
-{
- rrScrPriv(pScreen);
-
- pScrPriv->rrSetConfig = nvidiaRandRSetConfig;
-}
-#endif
-
-static Bool
-nvidiaFinishInitScreen (ScreenPtr pScreen)
-{
- Bool ret;
- ret = vesaFinishInitScreen (pScreen);
-#ifdef RANDR
- nvidiaRandRInit (pScreen);
-#endif
- return ret;
-}
-
-void
-nvidiaPreserve (KdCardInfo *card)
-{
- vesaPreserve(card);
-}
-
-void
-nvidiaOutb (NvidiaCardInfo *nvidiac, CARD16 port, CARD8 val)
-{
- asm volatile ("outb %b0,%w1" : : "a" (val), "d" (port));
-}
-
-CARD8
-nvidiaInb (NvidiaCardInfo *nvidiac, CARD16 port)
-{
- CARD8 v;
- asm volatile ("inb %w1,%b0" : "=a" (v) : "d" (port));
- return v;
-}
-
-CARD8
-nvidiaGetIndex (NvidiaCardInfo *nvidiac, CARD16 addr, CARD16 data, CARD8 id)
-{
- CARD8 ret;
- DBGOUT ("nvidiaGetIndex(0x%x,0x%x)\n", addr, id);
- nvidiaOutb (nvidiac, addr, id);
- ret = nvidiaInb (nvidiac, data);
- DBGOUT (" -> 0x%x\n", ret);
- return ret;
-}
-
-void
-nvidiaSetIndex (NvidiaCardInfo *nvidiac, CARD16 addr, CARD16 data, CARD8 id, CARD8 val)
-{
- DBGOUT ("nvidiaSetIndex(0x%x,0x%x) = 0x%x\n", addr, id, val);
- nvidiaOutb (nvidiac, addr, id);
- nvidiaOutb (nvidiac, data, val);
-}
-
-static void vgaLockUnlock (NvidiaCardInfo *nvidiac, Bool lock)
-{
- CARD8 cr11;
- ENTER ();
- cr11 = nvidiaGetIndex (nvidiac, 0x3d4, 0x3d5, 0x11);
- if (lock) cr11 |= 0x80;
- else cr11 &= ~0x80;
- nvidiaSetIndex (nvidiac, 0x3d4, 0x3d5, 0x11, cr11);
- LEAVE ();
-}
-
-static void nvidiaLockUnlock (NvidiaCardInfo *nvidiac, Bool lock)
-{
- if (NVIDIA_IS_3(nvidiac))
- nvidiaSetIndex (nvidiac, 0x3c4, 0x3c5, 0x06, lock ? 0x99 : 0x57);
- else
- nvidiaSetIndex (nvidiac, 0x3c4, 0x3c5, 0x1f, lock ? 0x99 : 0x57);
- vgaLockUnlock(nvidiac, lock);
-}
-
-Bool
-nvidiaMapReg (KdCardInfo *card, NvidiaCardInfo *nvidiac)
-{
- nvidiac->reg_base = (CARD8 *) KdMapDevice (NVIDIA_REG_BASE(card),
- NVIDIA_REG_SIZE(card));
-
- if (!nvidiac->reg_base)
- {
- nvidiac->mmio = 0;
- nvidiac->rop = 0;
- nvidiac->blt = 0;
- nvidiac->rect = 0;
- return FALSE;
- }
-
- nvidiac->mmio = (CARD8 *) (nvidiac->reg_base + NVIDIA_MMIO_OFF(card));
- nvidiac->rop = (NvidiaRop *) (nvidiac->reg_base + NVIDIA_ROP_OFF(card));
- nvidiac->rect = (NvidiaRectangle *) (nvidiac->reg_base + NVIDIA_RECTANGLE_OFF(card));
- nvidiac->blt = (NvidiaScreenBlt *) (nvidiac->reg_base + NVIDIA_BLT_OFF(card));
- nvidiac->busy = (NvidiaBusy *) (nvidiac->reg_base + NVIDIA_BUSY_OFF(card));
- KdSetMappedMode (NVIDIA_REG_BASE(card),
- NVIDIA_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- return TRUE;
-}
-
-void
-nvidiaUnmapReg (KdCardInfo *card, NvidiaCardInfo *nvidiac)
-{
- if (nvidiac->reg_base)
- {
- KdResetMappedMode (NVIDIA_REG_BASE(card),
- NVIDIA_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- KdUnmapDevice ((void *) nvidiac->reg_base, NVIDIA_REG_SIZE(card));
- nvidiac->reg_base = 0;
- nvidiac->rop = 0;
- nvidiac->blt = 0;
- nvidiac->rect = 0;
- }
-}
-
-void
-nvidiaSetMMIO (KdCardInfo *card, NvidiaCardInfo *nvidiac)
-{
- if (!nvidiac->reg_base)
- nvidiaMapReg (card, nvidiac);
- nvidiaLockUnlock (nvidiac, FALSE);
- nvidiac->fifo_free = 0;
- nvidiac->fifo_size = nvidiac->rop->FifoFree.FifoFree;
-}
-
-void
-nvidiaResetMMIO (KdCardInfo *card, NvidiaCardInfo *nvidiac)
-{
- nvidiaUnmapReg (card, nvidiac);
- nvidiaLockUnlock (nvidiac, TRUE);
-}
-
-Bool
-nvidiaEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- NvidiaCardInfo *nvidiac = pScreenPriv->card->driver;
-
- if (!vesaEnable (pScreen))
- return FALSE;
-
- nvidiaSetMMIO (pScreenPriv->card, nvidiac);
-#ifdef XV
- KdXVEnable (pScreen);
-#endif
- return TRUE;
-}
-
-void
-nvidiaDisable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- NvidiaCardInfo *nvidiac = pScreenPriv->card->driver;
-
-#ifdef XV
- KdXVDisable (pScreen);
-#endif
- nvidiaResetMMIO (pScreenPriv->card, nvidiac);
- vesaDisable (pScreen);
-}
-
-static Bool
-nvidiaDPMS (ScreenPtr pScreen, int mode)
-{
- return vesaDPMS (pScreen, mode);
-}
-
-static void
-nvidiaRestore (KdCardInfo *card)
-{
- NvidiaCardInfo *nvidiac = card->driver;
-
- nvidiaResetMMIO (card, nvidiac);
- vesaRestore (card);
-}
-
-static void
-nvidiaScreenFini (KdScreenInfo *screen)
-{
- NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
-
- vesaScreenFini (screen);
- xfree (nvidias);
- screen->driver = 0;
-}
-
-static void
-nvidiaCardFini (KdCardInfo *card)
-{
- NvidiaCardInfo *nvidiac = card->driver;
-
- nvidiaUnmapReg (card, nvidiac);
- vesaCardFini (card);
-}
-
-#define nvidiaCursorInit 0 /* initCursor */
-#define nvidiaCursorEnable 0 /* enableCursor */
-#define nvidiaCursorDisable 0 /* disableCursor */
-#define nvidiaCursorFini 0 /* finiCursor */
-#define nvidiaRecolorCursor 0 /* recolorCursor */
-
-KdCardFuncs nvidiaFuncs = {
- nvidiaCardInit, /* cardinit */
- nvidiaScreenInit, /* scrinit */
- nvidiaInitScreen, /* initScreen */
- nvidiaFinishInitScreen, /* finishInitScreen */
- vesaCreateResources, /* createRes */
- nvidiaPreserve, /* preserve */
- nvidiaEnable, /* enable */
- nvidiaDPMS, /* dpms */
- nvidiaDisable, /* disable */
- nvidiaRestore, /* restore */
- nvidiaScreenFini, /* scrfini */
- nvidiaCardFini, /* cardfini */
-
- nvidiaCursorInit, /* initCursor */
- nvidiaCursorEnable, /* enableCursor */
- nvidiaCursorDisable, /* disableCursor */
- nvidiaCursorFini, /* finiCursor */
- nvidiaRecolorCursor, /* recolorCursor */
-
- nvidiaDrawInit, /* initAccel */
- nvidiaDrawEnable, /* enableAccel */
- nvidiaDrawDisable, /* disableAccel */
- nvidiaDrawFini, /* finiAccel */
-
- vesaGetColors, /* getColors */
- vesaPutColors, /* putColors */
-};
diff --git a/hw/kdrive/nvidia/nvidia.h b/hw/kdrive/nvidia/nvidia.h
deleted file mode 100644
index 026233cc1..000000000
--- a/hw/kdrive/nvidia/nvidia.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _NVIDIA_H_
-#define _NVIDIA_H_
-#include <vesa.h>
-#include "kxv.h"
-#include "klinux.h"
-
-/*
- * offset from ioport beginning
- */
-
-#define DEBUG
-#ifdef DEBUG
-#define DBGOUT(fmt,a...) fprintf (stderr, fmt, ##a)
-#else
-#define DBGOUT(fmt,a...)
-#endif
-
-#define ENTER() DBGOUT("Enter %s\n", __FUNCTION__)
-#define LEAVE() DBGOUT("Leave %s\n", __FUNCTION__)
-
-#define NVIDIA_REG_BASE(c) ((c)->attr.address[0])
-#define NVIDIA_REG_SIZE(c) (16 * 1024 * 1024)
-
-#define NVIDIA_PCIO_OFF(c) (0x601000)
-#define NVIDIA_MMIO_OFF(c) (NVIDIA_PCIO_OFF(c) + 0)
-#define NVIDIA_FIFO_OFF(c) (0x800000)
-#define NVIDIA_ROP_OFF(c) (NVIDIA_FIFO_OFF(c) + 0)
-#define NVIDIA_CLIP_OFF(c) (NVIDIA_FIFO_OFF(c) + 0x2000)
-#define NVIDIA_PATT_OFF(c) (NVIDIA_FIFO_OFF(c) + 0x4000)
-#define NVIDIA_PIXMAP_OFF(c) (NVIDIA_FIFO_OFF(c) + 0x6000)
-#define NVIDIA_BLT_OFF(c) (NVIDIA_FIFO_OFF(c) + 0x8000)
-#define NVIDIA_RECTANGLE_OFF(c) (NVIDIA_FIFO_OFF(c) + 0xa000)
-#define NVIDIA_LINE_OFF(c) (NVIDIA_FIFO_OFF(c) + 0xc000)
-#define NVIDIA_IS_3(c) (0)
-#define NVIDIA_BUSY(c) (NVIDIA_IS_3(c) ? 0x6b0 : 0x700)
-#define NVIDIA_BUSY_OFF(c) (0x400000 + NVIDIA_BUSY(c))
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-#define NVIDIA_XY(x,y) ((x) | ((y) << 16))
-
-typedef struct {
-#if X_BYTE_ORDER == X_BIG_ENDIAN
- VOL32 FifoFree;
-#else
- VOL16 FifoFree;
- VOL16 Nop;
-#endif
-} NvidiaFifoFree;
-
-/*
- * Raster OPeration. Windows style ROP3.
- */
-typedef struct {
- VOL32 reserved00[4];
- NvidiaFifoFree FifoFree;
- VOL32 reserved01[0x0BB];
- VOL32 Rop3;
-} NvidiaRop;
-
-/*
- * 2D filled rectangle.
- */
-typedef struct {
- VOL32 reserved00[4];
- NvidiaFifoFree FifoFree;
- VOL32 reserved01[0x0BB];
- VOL32 reserved03[(0x040)-1];
- VOL32 Color1A;
- VOL32 TopLeft;
- VOL32 WidthHeight;
-} NvidiaRectangle;
-
-/*
- * 2D screen-screen BLT.
- */
-typedef struct {
- VOL32 reserved00[4];
- NvidiaFifoFree FifoFree;
- VOL32 reserved01[0x0BB];
- VOL32 TopLeftSrc;
- VOL32 TopLeftDst;
- VOL32 WidthHeight;
-} NvidiaScreenBlt;
-
-typedef struct {
- VOL32 busy;
-} NvidiaBusy;
-
-typedef struct _nvidiaCardInfo {
- VesaCardPrivRec vesa;
- CARD8 *reg_base;
- int fifo_free;
- int fifo_size;
- CARD8 *mmio;
- NvidiaRop *rop;
- NvidiaRectangle *rect;
- NvidiaScreenBlt *blt;
- NvidiaBusy *busy;
-} NvidiaCardInfo;
-
-#define getNvidiaCardInfo(kd) ((NvidiaCardInfo *) ((kd)->card->driver))
-#define nvidiaCardInfo(kd) NvidiaCardInfo *nvidiac = getNvidiaCardInfo(kd)
-
-/*
- * Xv information, optional
- */
-typedef struct _nvidiaPortPriv {
- CARD32 YBuf0Offset;
-
- CARD32 YBuf1Offset;
-
- CARD8 currentBuf;
-
- int brightness;
- int saturation;
-
- RegionRec clip;
- CARD32 colorKey;
-
- Bool videoOn;
- Time offTime;
- Time freeTime;
- CARD32 size;
- CARD32 offset;
-} NvidiaPortPrivRec, *NvidiaPortPrivPtr;
-
-Bool nvidiaInitVideo(ScreenPtr pScreen);
-
-typedef struct _nvidiaScreenInfo {
- VesaScreenPrivRec vesa;
- CARD8 *cursor_base;
- CARD8 *screen;
- CARD8 *off_screen;
- int off_screen_size;
- KdVideoAdaptorPtr pAdaptor;
- KaaScreenInfoRec kaa;
-} NvidiaScreenInfo;
-
-#define getNvidiaScreenInfo(kd) ((NvidiaScreenInfo *) ((kd)->screen->driver))
-#define nvidiaScreenInfo(kd) NvidiaScreenInfo *nvidias = getNvidiaScreenInfo(kd)
-
-void
-nvidiaPreserve (KdCardInfo *card);
-
-void
-nvidiaOutb (NvidiaCardInfo *nvidiac, CARD16 port, CARD8 val);
-
-CARD8
-nvidiaInb (NvidiaCardInfo *nvidiac, CARD16 port);
-
-CARD8
-nvidiaGetIndex (NvidiaCardInfo *nvidiac, CARD16 addr, CARD16 data, CARD8 id);
-
-void
-nvidiaSetIndex (NvidiaCardInfo *nvidiac, CARD16 addr, CARD16 data, CARD8 id, CARD8 val);
-
-Bool
-nvidiaMapReg (KdCardInfo *card, NvidiaCardInfo *nvidiac);
-
-void
-nvidiaUnmapReg (KdCardInfo *card, NvidiaCardInfo *nvidiac);
-
-void
-nvidiaSetMMIO (KdCardInfo *card, NvidiaCardInfo *nvidiac);
-
-void
-nvidiaResetMMIO (KdCardInfo *card, NvidiaCardInfo *nvidiac);
-
-Bool
-nvidiaEnable (ScreenPtr pScreen);
-
-void
-nvidiaDisable (ScreenPtr pScreen);
-
-void
-nvidiaWait (NvidiaCardInfo *card, NvidiaFifoFree *free, int n);
-
-void
-nvidiaWaitIdle (NvidiaCardInfo *card);
-
-Bool
-nvidiaDrawSetup (ScreenPtr pScreen);
-
-Bool
-nvidiaDrawInit (ScreenPtr pScreen);
-
-void
-nvidiaDrawReinit (ScreenPtr pScreen);
-
-void
-nvidiaDrawEnable (ScreenPtr pScreen);
-
-void
-nvidiaDrawDisable (ScreenPtr pScreen);
-
-void
-nvidiaDrawFini (ScreenPtr pScreen);
-
-CARD8
-nvidiaReadIndex (NvidiaCardInfo *nvidiac, CARD16 port, CARD8 index);
-
-void
-nvidiaWriteIndex (NvidiaCardInfo *nvidiac, CARD16 port, CARD8 index, CARD8 value);
-
-Bool
-nvidiaCursorInit (ScreenPtr pScreen);
-
-void
-nvidiaCursorEnable (ScreenPtr pScreen);
-
-void
-nvidiaCursorDisable (ScreenPtr pScreen);
-
-void
-nvidiaCursorFini (ScreenPtr pScreen);
-
-void
-nvidiaRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef);
-
-extern KdCardFuncs nvidiaFuncs;
-
-#endif /* _NVIDIA_H_ */
diff --git a/hw/kdrive/nvidia/nvidiacurs.c b/hw/kdrive/nvidia/nvidiacurs.c
deleted file mode 100644
index 4a5938162..000000000
--- a/hw/kdrive/nvidia/nvidiacurs.c
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "trident.h"
-#include "cursorstr.h"
-
-#define SetupCursor(s) KdScreenPriv(s); \
- tridentCardInfo(pScreenPriv); \
- tridentScreenInfo(pScreenPriv); \
- TridentCursor *pCurPriv = &tridents->cursor
-
-static void
-_tridentMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CARD8 xlow, xhigh, ylow, yhigh;
- CARD8 xoff, yoff;
-
- x -= pCurPriv->xhot;
- xoff = 0;
- if (x < 0)
- {
- xoff = -x;
- x = 0;
- }
- y -= pCurPriv->yhot;
- yoff = 0;
- if (y < 0)
- {
- yoff = -y;
- y = 0;
- }
- xlow = (CARD8) x;
- xhigh = (CARD8) (x >> 8);
- ylow = (CARD8) y;
- yhigh = (CARD8) (y >> 8);
-
-
- /* This is the recommended order to move the cursor */
-
- tridentWriteIndex (tridentc, 0x3d4, 0x41, xhigh);
- tridentWriteIndex (tridentc, 0x3d4, 0x40, xlow);
- tridentWriteIndex (tridentc, 0x3d4, 0x42, ylow);
- tridentWriteIndex (tridentc, 0x3d4, 0x46, xoff);
- tridentWriteIndex (tridentc, 0x3d4, 0x47, yoff);
- tridentWriteIndex (tridentc, 0x3d4, 0x43, yhigh);
-}
-
-static void
-tridentMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor (pScreen);
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- _tridentMoveCursor (pScreen, x, y);
-}
-
-static void
-tridentAllocCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
-
- KdAllocateCursorPixels (pScreen, 0, pCursor,
- &pCurPriv->source, &pCurPriv->mask);
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 4:
- pCurPriv->source |= pCurPriv->source << 4;
- pCurPriv->mask |= pCurPriv->mask << 4;
- case 8:
- pCurPriv->source |= pCurPriv->source << 8;
- pCurPriv->mask |= pCurPriv->mask << 8;
- case 16:
- pCurPriv->source |= pCurPriv->source << 16;
- pCurPriv->mask |= pCurPriv->mask << 16;
- }
-}
-
-static void
-tridentSetCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CARD32 fg, bg;
-
- fg = pCurPriv->source;
- bg = pCurPriv->mask;
- tridentWriteIndex (tridentc, 0x3d4, 0x48, fg);
- tridentWriteIndex (tridentc, 0x3d4, 0x49, fg >> 8);
- tridentWriteIndex (tridentc, 0x3d4, 0x4a, fg >> 16);
-
- tridentWriteIndex (tridentc, 0x3d4, 0x4c, bg);
- tridentWriteIndex (tridentc, 0x3d4, 0x4d, bg >> 8);
- tridentWriteIndex (tridentc, 0x3d4, 0x4e, bg >> 16);
-}
-
-void
-tridentRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- xColorItem sourceColor, maskColor;
-
- if (!pCurPriv->has_cursor || !pCursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pdef)
- {
- while (ndef)
- {
- if (pdef->pixel == pCurPriv->source ||
- pdef->pixel == pCurPriv->mask)
- break;
- ndef--;
- }
- if (!ndef)
- return;
- }
- tridentAllocCursorColors (pScreen);
- tridentSetCursorColors (pScreen);
-}
-
-#define InvertBits32(v) { \
- v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \
- v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \
- v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \
-}
-
-static void
-tridentLoadCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- int w, h;
- CARD32 *ram, *msk, *mskLine, *src, *srcLine;
- int i, j;
- int cursor_address;
- int lwsrc;
- unsigned char ramdac_control_;
- CARD32 offset;
-
- /*
- * Allocate new colors
- */
- tridentAllocCursorColors (pScreen);
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- /*
- * Stick new image into cursor memory
- */
- ram = (CARD32 *) tridents->cursor_base;
- mskLine = (CARD32 *) bits->mask;
- srcLine = (CARD32 *) bits->source;
-
- h = bits->height;
- if (h > TRIDENT_CURSOR_HEIGHT)
- h = TRIDENT_CURSOR_HEIGHT;
-
- lwsrc = BitmapBytePad(bits->width) / 4; /* words per line */
-
- for (i = 0; i < TRIDENT_CURSOR_HEIGHT; i++) {
- msk = mskLine;
- src = srcLine;
- mskLine += lwsrc;
- srcLine += lwsrc;
- for (j = 0; j < TRIDENT_CURSOR_WIDTH / 32; j++) {
-
- CARD32 m, s;
-
-#if 1
- if (i < h && j < lwsrc)
- {
- m = *msk++;
- s = *src++;
- InvertBits32(m);
- InvertBits32(s);
- }
- else
- {
- m = 0;
- s = 0;
- }
-#endif
- *ram++ = m;
- *ram++ = s;
- }
- }
-
- /* Set address for cursor bits */
- offset = tridents->cursor_base - (CARD8 *) tridents->screen;
- offset >>= 10;
- tridentWriteIndex (tridentc, 0x3d4, 0x44, (CARD8) (offset & 0xff));
- tridentWriteIndex (tridentc, 0x3d4, 0x45, (CARD8) (offset >> 8));
-
- /* Set new color */
- tridentSetCursorColors (pScreen);
-
- /* Enable the cursor */
- tridentWriteIndex (tridentc, 0x3d4, 0x50, 0xc1);
-
- /* Move to new position */
- tridentMoveCursor (pScreen, x, y);
-}
-
-static void
-tridentUnloadCursor (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- /* Disable cursor */
- tridentWriteIndex (tridentc, 0x3d4, 0x50, 0);
-}
-
-static Bool
-tridentRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- SetupCursor(pScreen);
-
- if (!pScreenPriv->enabled)
- return TRUE;
-
- /* miRecolorCursor does this */
- if (pCurPriv->pCursor == pCursor)
- {
- if (pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- tridentLoadCursor (pScreen, x, y);
- }
- }
- return TRUE;
-}
-
-static Bool
-tridentUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- return TRUE;
-}
-
-static void
-tridentSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
-{
- SetupCursor(pScreen);
-
- pCurPriv->pCursor = pCursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCursor)
- tridentLoadCursor (pScreen, x, y);
- else
- tridentUnloadCursor (pScreen);
-}
-
-miPointerSpriteFuncRec tridentPointerSpriteFuncs = {
- tridentRealizeCursor,
- tridentUnrealizeCursor,
- tridentSetCursor,
- tridentMoveCursor,
-};
-
-static void
-tridentQueryBestSize (int class,
- unsigned short *pwidth, unsigned short *pheight,
- ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- switch (class)
- {
- case CursorShape:
- if (*pwidth > pCurPriv->width)
- *pwidth = pCurPriv->width;
- if (*pheight > pCurPriv->height)
- *pheight = pCurPriv->height;
- if (*pwidth > pScreen->width)
- *pwidth = pScreen->width;
- if (*pheight > pScreen->height)
- *pheight = pScreen->height;
- break;
- default:
- fbQueryBestSize (class, pwidth, pheight, pScreen);
- break;
- }
-}
-
-Bool
-tridentCursorInit (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!tridents->cursor_base)
- {
- pCurPriv->has_cursor = FALSE;
- return FALSE;
- }
-
- pCurPriv->width = TRIDENT_CURSOR_WIDTH;
- pCurPriv->height= TRIDENT_CURSOR_HEIGHT;
- pScreen->QueryBestSize = tridentQueryBestSize;
- miPointerInitialize (pScreen,
- &tridentPointerSpriteFuncs,
- &kdPointerScreenFuncs,
- FALSE);
- pCurPriv->has_cursor = TRUE;
- pCurPriv->pCursor = NULL;
- return TRUE;
-}
-
-void
-tridentCursorEnable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- tridentLoadCursor (pScreen, x, y);
- }
- else
- tridentUnloadCursor (pScreen);
- }
-}
-
-void
-tridentCursorDisable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- tridentUnloadCursor (pScreen);
- }
- }
-}
-
-void
-tridentCursorFini (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- pCurPriv->pCursor = NULL;
-}
diff --git a/hw/kdrive/nvidia/nvidiadraw.c b/hw/kdrive/nvidia/nvidiadraw.c
deleted file mode 100644
index a39f79888..000000000
--- a/hw/kdrive/nvidia/nvidiadraw.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "nvidia.h"
-#include "nvidiadraw.h"
-
-#include <X11/Xmd.h>
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-#include "picturestr.h"
-#include "kaa.h"
-
-CARD8 nvidiaRop[16] = {
- /* GXclear */ 0x01, /* 0 */
- /* GXand */ 0x0c, /* src AND dst */
- /* GXandReverse */ 0x0d, /* src AND NOT dst */
- /* GXcopy */ 0x07, /* src */
- /* GXandInverted*/ 0x0e, /* NOT src AND dst */
- /* GXnoop */ 0x03, /* dst */
- /* GXxor */ 0x05, /* src XOR dst */
- /* GXor */ 0x0b, /* src OR dst */
- /* GXnor */ 0x0f, /* NOT src AND NOT dst */
- /* GXequiv */ 0x06, /* NOT src XOR dst */
- /* GXinvert */ 0x00, /* NOT dst */
- /* GXorReverse */ 0x0a, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x04, /* NOT src */
- /* GXorInverted */ 0x09, /* NOT src OR dst */
- /* GXnand */ 0x08, /* NOT src OR NOT dst */
- /* GXset */ 0x02, /* 1 */
-};
-
-static NvidiaCardInfo *card;
-
-void
-nvidiaWait (NvidiaCardInfo *card, NvidiaFifoFree *free, int n)
-{
- while (card->fifo_free < n)
- {
- card->fifo_free = free->FifoFree >> 2;
- }
- card->fifo_free -= n;
-}
-
-void
-nvidiaWaitIdle (NvidiaCardInfo *card)
-{
- while (card->fifo_free < card->fifo_size || (card->busy->busy & 1))
- {
- card->fifo_free = card->rop->FifoFree.FifoFree >> 2;
- }
-}
-
-static void
-nvidiaWaitMarker (ScreenPtr pScreen, int marker)
-{
- KdScreenPriv(pScreen);
- nvidiaCardInfo(pScreenPriv);
-
- nvidiaWaitIdle (nvidiac);
-}
-
-static Bool
-nvidiaPrepareSolid (PixmapPtr pPixmap,
- int alu,
- Pixel pm,
- Pixel fg)
-{
- ScreenPtr pScreen = pPixmap->drawable.pScreen;
- KdScreenPriv(pScreen);
- nvidiaCardInfo(pScreenPriv);
-
- card = nvidiac;
- if (~pm & FbFullMask(pPixmap->drawable.depth))
- return FALSE;
- nvidiaWait (nvidiac, &nvidiac->rop->FifoFree, 1);
- nvidiac->rop->Rop3 = nvidiaRop[alu];
- nvidiaWait (nvidiac, &nvidiac->rect->FifoFree, 1);
- nvidiac->rect->Color1A = fg;
- return TRUE;
-}
-
-static void
-nvidiaSolid (int x1, int y1, int x2, int y2)
-{
- nvidiaWait (card, &card->rect->FifoFree, 2);
- card->rect->TopLeft = NVIDIA_XY(x1,y1);
- card->rect->WidthHeight = NVIDIA_XY(x2-x1,y2-y1);
-}
-
-static void
-nvidiaDoneSolid (void)
-{
-}
-
-
-static Bool
-nvidiaPrepareCopy (PixmapPtr pSrcPixmap,
- PixmapPtr pDstPixmap,
- int dx,
- int dy,
- int alu,
- Pixel pm)
-{
- ScreenPtr pScreen = pDstPixmap->drawable.pScreen;
- KdScreenPriv(pScreen);
- nvidiaCardInfo(pScreenPriv);
-
- card = nvidiac;
- if (~pm & FbFullMask(pDstPixmap->drawable.depth))
- return FALSE;
- nvidiaWait (nvidiac, &card->rop->FifoFree, 1);
- nvidiac->rop->Rop3 = nvidiaRop[alu];
- return TRUE;
-}
-
-static void
-nvidiaCopy (int srcX,
- int srcY,
- int dstX,
- int dstY,
- int w,
- int h)
-{
- nvidiaWait (card, &card->blt->FifoFree, 3);
- card->blt->TopLeftSrc = NVIDIA_XY(srcX, srcY);
- card->blt->TopLeftDst = NVIDIA_XY(dstX, dstY);
- card->blt->WidthHeight = NVIDIA_XY(w, h);
-}
-
-static void
-nvidiaDoneCopy (void)
-{
-}
-
-Bool
-nvidiaDrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- nvidiaCardInfo(pScreenPriv);
- nvidiaScreenInfo(pScreenPriv);
- Bool ret = TRUE;
-
- ENTER ();
- if (pScreenPriv->screen->fb[0].depth == 4)
- ret = FALSE;
-
- memset(&nvidias->kaa, 0, sizeof(KaaScreenInfoRec));
- nvidias->kaa.waitMarker = nvidiaWaitMarker;
- nvidias->kaa.PrepareSolid = nvidiaPrepareSolid;
- nvidias->kaa.Solid = nvidiaSolid;
- nvidias->kaa.DoneSolid = nvidiaDoneSolid;
- nvidias->kaa.PrepareCopy = nvidiaPrepareCopy;
- nvidias->kaa.Copy = nvidiaCopy;
- nvidias->kaa.DoneCopy = nvidiaDoneCopy;
-
- if (ret && !nvidiac->rop)
- {
- ErrorF ("Failed to map fifo registers\n");
- ret = FALSE;
- }
- if (ret && !nvidiac->rop->FifoFree.FifoFree)
- {
- ErrorF ("Fifo appears broken\n");
- ret = FALSE;
- }
- if (ret && !kaaDrawInit (pScreen, &nvidias->kaa))
- {
- ErrorF ("kaaDrawInit failed\n");
- ret = FALSE;
- }
-
- LEAVE ();
- return ret;
-}
-
-#define PIX_FORMAT_MONO 0
-#define PIX_FORMAT_PSEUDO_8 2
-#define PIX_FORMAT_TRUE_1555 3
-#define PIX_FORMAT_TRUE_565 4
-#define PIX_FORMAT_TRUE_8888 6
-#define PIX_FORMAT_TRUE_332 7
-#define PIX_FORMAT_GRAY_8 8
-#define PIX_FORMAT_YUV_422 0xb
-#define PIX_FORMAT_YUV_444 0xe
-#define PIX_FORMAT_TRUE_4444 0xf
-
-void
-nvidiaDrawEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- nvidiaCardInfo(pScreenPriv);
-
- ENTER ();
- nvidiac->fifo_size = nvidiac->rop->FifoFree.FifoFree;
- nvidiac->fifo_free = 0;
- kaaMarkSync (pScreen);
- LEAVE ();
-}
-
-void
-nvidiaDrawDisable (ScreenPtr pScreen)
-{
-}
-
-void
-nvidiaDrawFini (ScreenPtr pScreen)
-{
-}
-
diff --git a/hw/kdrive/nvidia/nvidiadraw.h b/hw/kdrive/nvidia/nvidiadraw.h
deleted file mode 100644
index bac11c2a6..000000000
--- a/hw/kdrive/nvidia/nvidiadraw.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _TRIDENTDRAW_H_
-#define _TRIDENTDRAW_H_
-
-#define SetupTrident(s) KdScreenPriv(s); \
- tridentCardInfo(pScreenPriv); \
- Cop *cop = tridentc->cop
-
-#define TridentAlpha (COP_MULTI_ALPHA|COP_ALPHA_WRITE_ENABLE)
-
-#define _tridentInit(cop,tridentc) { \
- if ((cop)->status == 0xffffffff) tridentSetMMIO(tridentc); \
- (cop)->multi = (tridentc)->cop_depth; \
- (cop)->multi = (tridentc)->cop_stride; \
- (cop)->multi = TridentAlpha; \
-} \
-
-#define _tridentSetSolidRect(cop,pix,alu,cmd) {\
- cop->multi = COP_MULTI_PATTERN; \
- cop->multi = COP_MULTI_ROP | tridentRop[alu]; \
- cop->fg = (pix); \
- cmd = COP_OP_BLT | COP_SCL_OPAQUE | COP_OP_ROP | COP_OP_FG; \
-}
-
-#define _tridentRect(cop,x1,y1,x2,y2,cmd) { \
- (cop)->dst_start_xy = TRI_XY (x1,y1); \
- (cop)->dst_end_xy = TRI_XY(x2,y2); \
- _tridentWaitDone(cop); \
- (cop)->command = (cmd); \
-}
-
-#define COP_STATUS_BUSY (COP_STATUS_BE_BUSY | \
- COP_STATUS_DPE_BUSY | \
- COP_STATUS_MI_BUSY)
-
-#define _tridentWaitDone(cop) { \
- int __q__ = 500000; \
- while (__q__-- && (cop)->status & COP_STATUS_BUSY) \
- ; \
- if (!__q__) \
- (cop)->status = 0; \
-}
-
-#define _tridentWaitIdleEmpty(cop) _tridentWaitDone(cop)
-
-#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3))
-
-#endif
diff --git a/hw/kdrive/nvidia/nvidiastub.c b/hw/kdrive/nvidia/nvidiastub.c
deleted file mode 100644
index 0e8250e31..000000000
--- a/hw/kdrive/nvidia/nvidiastub.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "nvidia.h"
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
-
- if (LinuxFindPci (0x10de, 0x0112, 0, &attr))
- KdCardInfoAdd (&nvidiaFuncs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
- vesaUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- if (!(ret = vesaProcessArgument (argc, argv, i)))
- ret = KdProcessArgument(argc, argv, i);
- return ret;
-}
diff --git a/hw/kdrive/nvidia/nvidiavideo.c b/hw/kdrive/nvidia/nvidiavideo.c
deleted file mode 100644
index 2ab41edfd..000000000
--- a/hw/kdrive/nvidia/nvidiavideo.c
+++ /dev/null
@@ -1,1016 +0,0 @@
-/*
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "nvidia.h"
-
-#include <X11/extensions/Xv.h>
-#include "fourcc.h"
-
-#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
-
-static Atom xvBrightness, xvSaturation, xvColorKey;
-
-#define IMAGE_MAX_WIDTH 720
-#define IMAGE_MAX_HEIGHT 576
-
-static void
-nvidiaStopVideo(KdScreenInfo *screen, pointer data, Bool exit)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
- NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver;
- NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr;
- Reg *reg = nvidiac->reg;
- MediaReg *media = nvidiac->media_reg;
-
- REGION_EMPTY(screen->pScreen, &pPortPriv->clip);
-
- if (!media)
- return;
-
- if(pPortPriv->videoOn)
- {
- nvidiaWaitIdle (reg);
- /* wait for buffer to be displayed */
- while (((media->TRIG_CNTL >> 5) & 1) != pPortPriv->currentBuf)
- ;
- /* wait for buffer to be finished */
- while (((media->TRIG_CNTL >> 6) & 1) != 0)
- ;
- nvidiaWaitAvail (reg, 1);
- media->OVERLAY_SCALE_CNTL = 0;
- pPortPriv->videoOn = FALSE;
- nvidiaWaitIdle (reg);
- }
-}
-
-static int
-nvidiaSetPortAttribute(KdScreenInfo *screen,
- Atom attribute,
- int value,
- pointer data)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
- NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver;
- NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr;
- MediaReg *media = nvidiac->media_reg;
-
- if(attribute == xvBrightness)
- {
- if(value < -1000)
- value = -1000;
- if (value > 1000)
- value = 1000;
- pPortPriv->brightness = value;
- }
- else if(attribute == xvSaturation)
- {
- if (value < -1000)
- value = -1000;
- if (value > 1000)
- value = 1000;
- pPortPriv->saturation = value;
- }
- else if(attribute == xvColorKey)
- {
- if (pPortPriv->colorKey != value)
- {
- pPortPriv->colorKey = value;
- REGION_EMPTY(screen->pScreen, &pPortPriv->clip);
- }
- }
- else
- return BadMatch;
-
- return Success;
-}
-
-static int
-nvidiaGetPortAttribute(KdScreenInfo *screen,
- Atom attribute,
- int *value,
- pointer data)
-{
- NvidiaPortPrivPtr pPortPriv = (NvidiaPortPrivPtr)data;
-
- if(attribute == xvBrightness)
- *value = pPortPriv->brightness;
- else if(attribute == xvSaturation)
- *value = pPortPriv->saturation;
- else if(attribute == xvColorKey)
- *value = pPortPriv->colorKey;
- else
- return BadMatch;
-
- return Success;
-}
-
-static void
-nvidiaQueryBestSize(KdScreenInfo *screen,
- Bool motion,
- short vid_w,
- short vid_h,
- short drw_w,
- short drw_h,
- unsigned int *p_w,
- unsigned int *p_h,
- pointer data)
-{
- *p_w = drw_w;
- *p_h = drw_h;
-}
-
-
-static void
-nvidiaCopyPackedData(KdScreenInfo *screen,
- unsigned char *buf,
- int randr,
- int srcPitch,
- int dstPitch,
- int srcW,
- int srcH,
- int top,
- int left,
- int h,
- int w)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
- NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver;
- NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr;
- CARD8 *src, *dst;
- int srcDown, srcRight, srcNext;
- int p;
-
- switch (randr & RR_Rotate_All) {
- case RR_Rotate_0:
- src = buf;
- srcDown = srcPitch;
- srcRight = 2;
- break;
- case RR_Rotate_90:
- src = buf + (srcH - 1) * 2;
- srcDown = -2;
- srcRight = srcPitch;
- break;
- case RR_Rotate_180:
- src = buf + srcPitch * (srcH - 1) + (srcW - 1) * 2;
- srcDown = -srcPitch;
- srcRight = -2;
- break;
- case RR_Rotate_270:
- src = buf + srcPitch * (srcW - 1);
- srcDown = 2;
- srcRight = -srcPitch;
- break;
- }
-
- src = src + top*srcDown + left*srcRight;
-
- if (pPortPriv->currentBuf == 0)
- dst = (CARD8 *) nvidias->vesa.fb + pPortPriv->YBuf0Offset;
- else
- dst = (CARD8 *) nvidias->vesa.fb + pPortPriv->YBuf1Offset;
-
- w >>= 1;
- srcRight >>= 1;
- srcNext = srcRight >> 1;
- while(h--)
- {
- CARD16 *s = (CARD16 *) src;
- CARD32 *d = (CARD32 *) dst;
- p = w;
- while (p--)
- {
- *d++ = s[0] | (s[srcNext] << 16);
- s += srcRight;
- }
- src += srcPitch;
- dst += dstPitch;
- }
-}
-
-static void
-nvidiaCopyPlanarData(KdScreenInfo *screen,
- unsigned char *buf,
- int randr,
- int srcPitch,
- int srcPitch2,
- int dstPitch, /* of chroma */
- int srcW,
- int srcH,
- int height,
- int top,
- int left,
- int h,
- int w,
- int id)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
- NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver;
- NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr;
- int i, j;
- CARD8 *src1, *src2, *src3, *dst1;
- int srcDown, srcDown2, srcRight, srcRight2, srcNext;
-
- /* compute source data pointers */
- src1 = buf;
- src2 = src1 + height * srcPitch;
- src3 = src2 + (height >> 1) * srcPitch2;
- switch (randr & RR_Rotate_All) {
- case RR_Rotate_0:
- srcDown = srcPitch;
- srcDown2 = srcPitch2;
- srcRight = 2;
- srcRight2 = 1;
- srcNext = 1;
- break;
- case RR_Rotate_90:
- src1 = src1 + srcH - 1;
- src2 = src2 + (srcH >> 1) - 1;
- src3 = src3 + (srcH >> 1) - 1;
- srcDown = -1;
- srcDown2 = -1;
- srcRight = srcPitch * 2;
- srcRight2 = srcPitch2;
- srcNext = srcPitch;
- break;
- case RR_Rotate_180:
- src1 = src1 + srcPitch * (srcH - 1) + (srcW - 1);
- src2 = src2 + srcPitch2 * ((srcH >> 1) - 1) + ((srcW >> 1) - 1);
- src3 = src3 + srcPitch2 * ((srcH >> 1) - 1) + ((srcW >> 1) - 1);
- srcDown = -srcPitch;
- srcDown2 = -srcPitch2;
- srcRight = -2;
- srcRight2 = -1;
- srcNext = -1;
- break;
- case RR_Rotate_270:
- src1 = src1 + srcPitch * (srcW - 1);
- src2 = src2 + srcPitch2 * ((srcW >> 1) - 1);
- src3 = src3 + srcPitch2 * ((srcW >> 1) - 1);
- srcDown = 1;
- srcDown2 = 1;
- srcRight = -srcPitch * 2;
- srcRight2 = -srcPitch2;
- srcNext = -srcPitch;
- break;
- }
-
- /* adjust for origin */
- src1 += top * srcDown + left * srcNext;
- src2 += (top >> 1) * srcDown2 + (left >> 1) * srcRight2;
- src3 += (top >> 1) * srcDown2 + (left >> 1) * srcRight2;
-
- if (id == FOURCC_I420)
- {
- CARD8 *srct = src2;
- src2 = src3;
- src3 = srct;
- }
-
- if (pPortPriv->currentBuf == 0)
- dst1 = (CARD8 *) nvidias->vesa.fb + pPortPriv->YBuf0Offset;
- else
- dst1 = (CARD8 *) nvidias->vesa.fb + pPortPriv->YBuf1Offset;
-
- w >>= 1;
- for (j = 0; j < h; j++)
- {
- CARD32 *dst = (CARD32 *) dst1;
- CARD8 *s1l = src1;
- CARD8 *s1r = src1 + srcNext;
- CARD8 *s2 = src2;
- CARD8 *s3 = src3;
-
- for (i = 0; i < w; i++)
- {
- *dst++ = *s1l | (*s1r << 16) | (*s3 << 8) | (*s2 << 24);
- s1l += srcRight;
- s1r += srcRight;
- s2 += srcRight2;
- s3 += srcRight2;
- }
- src1 += srcDown;
- dst1 += dstPitch;
- if (j & 1)
- {
- src2 += srcDown2;
- src3 += srcDown2;
- }
- }
-}
-
-static void
-nvidiaPaintRegion (ScreenPtr pScreen, RegionPtr pRgn, Pixel fg)
-{
- WindowPtr pRoot = WindowTable[pScreen->myNum];
- GCPtr pGC;
- CARD32 val[2];
- xRectangle *rects, *r;
- BoxPtr pBox = REGION_RECTS (pRgn);
- int nBox = REGION_NUM_RECTS (pRgn);
-
- rects = xalloc (nBox * sizeof (xRectangle));
- if (!rects)
- goto bail0;
- r = rects;
- while (nBox--)
- {
- r->x = pBox->x1;
- r->y = pBox->y1;
- r->width = pBox->x2 - pBox->x1;
- r->height = pBox->y2 - pBox->y1;
- r++;
- pBox++;
- }
-
- pGC = GetScratchGC (pRoot->drawable.depth, pScreen);
- if (!pGC)
- goto bail1;
-
- val[0] = fg;
- val[1] = IncludeInferiors;
- ChangeGC (pGC, GCForeground|GCSubwindowMode, val);
-
- ValidateGC (&pRoot->drawable, pGC);
-
- (*pGC->ops->PolyFillRect) (&pRoot->drawable, pGC,
- REGION_NUM_RECTS (pRgn), rects);
-
- FreeScratchGC (pGC);
-bail1:
- xfree (rects);
-bail0:
- ;
-}
-
-/* NvidiaClipVideo -
-
- Takes the dst box in standard X BoxRec form (top and left
- edges inclusive, bottom and right exclusive). The new dst
- box is returned. The source boundaries are given (x1, y1
- inclusive, x2, y2 exclusive) and returned are the new source
- boundaries in 16.16 fixed point.
-*/
-
-static void
-NvidiaClipVideo(BoxPtr dst,
- INT32 *x1,
- INT32 *x2,
- INT32 *y1,
- INT32 *y2,
- BoxPtr extents, /* extents of the clip region */
- INT32 width,
- INT32 height)
-{
- INT32 vscale, hscale, delta;
- int diff;
-
- hscale = ((*x2 - *x1) << 16) / (dst->x2 - dst->x1);
- vscale = ((*y2 - *y1) << 16) / (dst->y2 - dst->y1);
-
- *x1 <<= 16; *x2 <<= 16;
- *y1 <<= 16; *y2 <<= 16;
-
- diff = extents->x1 - dst->x1;
- if(diff > 0) {
- dst->x1 = extents->x1;
- *x1 += diff * hscale;
- }
- diff = dst->x2 - extents->x2;
- if(diff > 0) {
- dst->x2 = extents->x2;
- *x2 -= diff * hscale;
- }
- diff = extents->y1 - dst->y1;
- if(diff > 0) {
- dst->y1 = extents->y1;
- *y1 += diff * vscale;
- }
- diff = dst->y2 - extents->y2;
- if(diff > 0) {
- dst->y2 = extents->y2;
- *y2 -= diff * vscale;
- }
-
- if(*x1 < 0) {
- diff = (- *x1 + hscale - 1)/ hscale;
- dst->x1 += diff;
- *x1 += diff * hscale;
- }
- delta = *x2 - (width << 16);
- if(delta > 0) {
- diff = (delta + hscale - 1)/ hscale;
- dst->x2 -= diff;
- *x2 -= diff * hscale;
- }
- if(*y1 < 0) {
- diff = (- *y1 + vscale - 1)/ vscale;
- dst->y1 += diff;
- *y1 += diff * vscale;
- }
- delta = *y2 - (height << 16);
- if(delta > 0) {
- diff = (delta + vscale - 1)/ vscale;
- dst->y2 -= diff;
- *y2 -= diff * vscale;
- }
-}
-
-static void
-nvidiaDisplayVideo(KdScreenInfo *screen,
- int id,
- int dstPitch, /* of chroma for 4:2:0 */
- int x1,
- int y1,
- int x2,
- int y2,
- int dst_x1,
- int dst_y1,
- int dst_x2,
- int dst_y2,
- short src_w,
- short src_h,
- short drw_w,
- short drw_h)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
- NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver;
- NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr;
- Reg *reg = nvidiac->reg;
- MediaReg *media = nvidiac->media_reg;
- int xscaleInt, xscaleFract, yscaleInt, yscaleFract;
- int xscaleIntUV = 0, xscaleFractUV = 0;
- int yscaleIntUV = 0, yscaleFractUV = 0;
- int randr = nvidias->vesa.randr;
- int HORZ_INC, VERT_INC;
- CARD32 SCALER_IN;
- CARD32 OVERLAY_SCALE_CNTL;
- int tmp;
- int left;
- int bright;
- int sat;
-
- if (id == FOURCC_UYVY)
- SCALER_IN = SCALER_IN_YVYU422;
- else
- SCALER_IN = SCALER_IN_VYUY422;
-
- nvidiaWaitAvail (reg, 4);
-
- media->VIDEO_FORMAT = SCALER_IN | VIDEO_IN_VYUY422;
-
- /* color key */
- media->OVERLAY_GRAPHICS_KEY_MSK = (1 << screen->fb[0].depth) - 1;
- media->OVERLAY_GRAPHICS_KEY_CLR = pPortPriv->colorKey;
- /* set key control to obey only graphics color key */
- media->OVERLAY_KEY_CNTL = 0x50;
-
- nvidiaWaitAvail (reg, 9);
- media->CAPTURE_DEBUG = 0;
- /* no exclusive video region */
- media->OVERLAY_EXCLUSIVE_HORZ = 0;
- media->OVERLAY_EXCLUSIVE_VERT = 0;
- /* scaling coefficients */
- media->SCALER_H_COEFF0 = 0x00002000;
- media->SCALER_H_COEFF1 = 0x0D06200D;
- media->SCALER_H_COEFF2 = 0x0D0A1C0D;
- media->SCALER_H_COEFF3 = 0x0C0E1A0C;
- media->SCALER_H_COEFF4 = 0x0C14140C;
- media->SCALER_TEST = 0;
-
- nvidiaWaitAvail (reg, 2);
- media->OVERLAY_SCALE_CNTL = (SCALE_PIX_EXPAND |
- SCALE_GAMMA_BRIGHT |
- SCALE_BANDWIDTH |
- SCALE_OVERLAY_EN |
- SCALE_EN);
-
- bright = (pPortPriv->brightness * 64 / 1000);
- if (bright < -0x40)
- bright = -0x40;
- if (bright > 0x3f)
- bright = 0x3f;
- bright = bright & 0x7f;
- sat = ((pPortPriv->saturation * 31 + 31000) / 2000);
- if (sat > 0x1f)
- sat = 0x1f;
- if (sat < 0)
- sat = 0;
-
- media->SCALER_COLOUR_CNTL = ((bright << 0) | /* BRIGHTNESS */
- (sat << 8) | /* SATURATION_U */
- (sat << 16) | /* SATURATION_V */
- (0 << 21) | /* SCALER_VERT_ADJ_UV */
- (0 << 28)); /* SCALER_HORZ_ADJ_UV */
-
- VERT_INC = (src_h << 12) / drw_h;
- HORZ_INC = (src_w << 12) / drw_w;
-
- nvidiaWaitAvail (reg, 13);
-
- /* lock registers to prevent non-atomic update */
- media->OVERLAY_Y_X_START = 0x80000000 | NVIDIA_YX (dst_x1, dst_y1);
- /* ending screen coordinate */
- media->OVERLAY_Y_X_END = 0x80000000 | NVIDIA_YX (dst_x2, dst_y2);
-
- media->OVERLAY_SCALE_INC = NVIDIA_YX(HORZ_INC, VERT_INC);
-
- media->SCALER_BUF0_OFFSET = pPortPriv->YBuf0Offset;
- media->SCALER_BUF1_OFFSET = pPortPriv->YBuf1Offset;
-
- media->SCALER_BUF0_OFFSET_U = pPortPriv->YBuf0Offset;
- media->SCALER_BUF1_OFFSET_U = pPortPriv->YBuf1Offset;
-
- media->SCALER_BUF0_OFFSET_V = pPortPriv->YBuf0Offset;
- media->SCALER_BUF1_OFFSET_V = pPortPriv->YBuf1Offset;
-
- media->SCALER_BUF_PITCH = dstPitch >> 1;
- media->SCALER_HEIGHT_WIDTH = NVIDIA_YX(src_w - (x1 >> 16), src_h - (y1 >> 16));
-
- media->CAPTURE_CONFIG = pPortPriv->currentBuf << 28;
-
- /* set XY location and unlock */
- media->OVERLAY_Y_X_START = NVIDIA_YX (dst_x1, dst_y1);
-}
-
-static int
-nvidiaPutImage(KdScreenInfo *screen,
- 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)
-{
- KdCardInfo *card = screen->card;
- NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
- NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver;
- NvidiaPortPrivPtr pPortPriv = (NvidiaPortPrivPtr)data;
- Reg *reg = nvidiac->reg;
- MediaReg *media = nvidiac->media_reg;
- INT32 x1, x2, y1, y2;
- int randr = nvidias->vesa.randr;
- int srcPitch, srcPitch2, dstPitch;
- int top, left, npixels, nlines, size;
- BoxRec dstBox;
- int dst_width = width, dst_height = height;
- int rot_x1, rot_y1, rot_x2, rot_y2;
- int dst_x1, dst_y1, dst_x2, dst_y2;
- int rot_src_w, rot_src_h, rot_drw_w, rot_drw_h;
-
- /* Clip */
- x1 = src_x;
- x2 = src_x + src_w;
- y1 = src_y;
- y2 = src_y + src_h;
-
- dstBox.x1 = drw_x;
- dstBox.x2 = drw_x + drw_w;
- dstBox.y1 = drw_y;
- dstBox.y2 = drw_y + drw_h;
-
- NvidiaClipVideo(&dstBox, &x1, &x2, &y1, &y2,
- REGION_EXTENTS(pScreen, clipBoxes), width, height);
-
- if((x1 >= x2) || (y1 >= y2))
- return Success;
-
- if (!media)
- return BadAlloc;
-
- if (randr & (RR_Rotate_0|RR_Rotate_180))
- {
- dst_width = width;
- dst_height = height;
- rot_src_w = src_w;
- rot_src_h = src_h;
- rot_drw_w = drw_w;
- rot_drw_h = drw_h;
- }
- else
- {
- dst_width = height;
- dst_height = width;
- rot_src_w = src_h;
- rot_src_h = src_w;
- rot_drw_w = drw_h;
- rot_drw_h = drw_w;
- }
-
- switch (randr & RR_Rotate_All) {
- case RR_Rotate_0:
- dst_x1 = dstBox.x1;
- dst_y1 = dstBox.y1;
- dst_x2 = dstBox.x2;
- dst_y2 = dstBox.y2;
- rot_x1 = x1;
- rot_y1 = y1;
- rot_x2 = x2;
- rot_y2 = y2;
- break;
- case RR_Rotate_90:
- dst_x1 = dstBox.y1;
- dst_y1 = screen->height - dstBox.x2;
- dst_x2 = dstBox.y2;
- dst_y2 = screen->height - dstBox.x1;
-
- rot_x1 = y1;
- rot_y1 = (src_w << 16) - x2;
- rot_x2 = y2;
- rot_y2 = (src_w << 16) - x1;
- break;
- case RR_Rotate_180:
- dst_x1 = screen->width - dstBox.x2;
- dst_y1 = screen->height - dstBox.y2;
- dst_x2 = screen->width - dstBox.x1;
- dst_y2 = screen->height - dstBox.y1;
- rot_x1 = (src_w << 16) - x2;
- rot_y1 = (src_h << 16) - y2;
- rot_x2 = (src_w << 16) - x1;
- rot_y2 = (src_h << 16) - y1;
- break;
- case RR_Rotate_270:
- dst_x1 = screen->width - dstBox.y2;
- dst_y1 = dstBox.x1;
- dst_x2 = screen->width - dstBox.y1;
- dst_y2 = dstBox.x2;
- rot_x1 = (src_h << 16) - y2;
- rot_y1 = x1;
- rot_x2 = (src_h << 16) - y1;
- rot_y2 = x2;
- break;
- }
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- dstPitch = ((dst_width << 1) + 15) & ~15;
- srcPitch = (width + 3) & ~3;
- srcPitch2 = ((width >> 1) + 3) & ~3;
- size = dstPitch * (int) dst_height;
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- dstPitch = ((dst_width << 1) + 15) & ~15;
- srcPitch = (width << 1);
- size = dstPitch * (int) dst_height;
- break;
- }
-
- pPortPriv->offset = nvidias->off_screen - (CARD8 *) nvidias->vesa.fb;
- /* fixup pointers */
-
- pPortPriv->YBuf0Offset = pPortPriv->offset;
- pPortPriv->YBuf1Offset = pPortPriv->offset + size;
-
-#if 0
- nvidiaWaitIdle (reg);
-
- if (pPortPriv->videoOn)
- {
- /* wait for buffer to be displayed */
- while (((media->TRIG_CNTL >> 5) & 1) != pPortPriv->currentBuf)
- ;
- }
-#endif
- /*
- * Use the other buffer
- */
- pPortPriv->currentBuf = 1 - pPortPriv->currentBuf;
-
- /* copy data */
- top = rot_y1 >> 16;
- left = (rot_x1 >> 16) & ~1;
- npixels = ((((rot_x2 + 0xffff) >> 16) + 1) & ~1) - left;
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- top &= ~1;
- nlines = ((((rot_y2 + 0xffff) >> 16) + 1) & ~1) - top;
- nvidiaCopyPlanarData(screen, buf, randr,
- srcPitch, srcPitch2, dstPitch,
- rot_src_w, rot_src_h, height,
- top, left, nlines, npixels, id);
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- nlines = ((rot_y2 + 0xffff) >> 16) - top;
- nvidiaCopyPackedData(screen, buf, randr,
- srcPitch, dstPitch,
- rot_src_w, rot_src_h,
- top, left, nlines,
- npixels);
- break;
- }
-
- nvidiaDisplayVideo(screen, id, dstPitch,
- rot_x1, rot_y1, rot_x2, rot_y2,
- dst_x1, dst_y1,
- dst_x2, dst_y2,
- rot_src_w, rot_src_h, rot_drw_w, rot_drw_h);
-
- /* update cliplist */
- if (!REGION_EQUAL (screen->pScreen, &pPortPriv->clip, clipBoxes))
- {
- REGION_COPY (screen->pScreen, &pPortPriv->clip, clipBoxes);
- nvidiaPaintRegion (screen->pScreen, &pPortPriv->clip, pPortPriv->colorKey);
- }
-
- pPortPriv->videoOn = TRUE;
-
- return Success;
-}
-
-static int
-nvidiaQueryImageAttributes(KdScreenInfo *screen,
- int id,
- unsigned short *w,
- unsigned short *h,
- int *pitches,
- int *offsets)
-{
- int size, tmp;
-
- if(*w > IMAGE_MAX_WIDTH)
- *w = IMAGE_MAX_WIDTH;
- if(*h > IMAGE_MAX_HEIGHT)
- *h = IMAGE_MAX_HEIGHT;
-
- *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;
-}
-
-
-/* client libraries expect an encoding */
-static KdVideoEncodingRec DummyEncoding[1] =
-{
- {
- 0,
- "XV_IMAGE",
- IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT,
- {1, 1}
- }
-};
-
-#define NUM_FORMATS 3
-
-static KdVideoFormatRec Formats[NUM_FORMATS] =
-{
- {15, TrueColor}, {16, TrueColor}, {24, TrueColor}
-};
-
-#define NUM_ATTRIBUTES 3
-
-static KdAttributeRec Attributes[NUM_ATTRIBUTES] =
-{
- {XvSettable | XvGettable, 0, ~0, "XV_COLORKEY"},
- {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"},
- {XvSettable | XvGettable, -1000, 1000, "XV_SATURATION"}
-};
-
-#define NUM_IMAGES 4
-
-static KdImageRec Images[NUM_IMAGES] =
-{
- XVIMAGE_YUY2,
- XVIMAGE_YV12,
- XVIMAGE_I420,
- XVIMAGE_UYVY
-};
-
-static void nvidiaResetVideo(KdScreenInfo *screen)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
- NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver;
- NvidiaPortPrivPtr pPortPriv = nvidias->pAdaptor->pPortPrivates[0].ptr;
- MediaReg *media = nvidiac->media_reg;
-
- /*
- * Default to maximum image size in YV12
- */
-
-}
-
-static int
-nvidiaReputImage (KdScreenInfo *screen,
- short drw_x,
- short drw_y,
- RegionPtr clipBoxes,
- pointer data)
-{
- ScreenPtr pScreen = screen->pScreen;
- NvidiaPortPrivPtr pPortPriv = (NvidiaPortPrivPtr)data;
- BoxPtr pOldExtents = REGION_EXTENTS (pScreen, &pPortPriv->clip);
- BoxPtr pNewExtents = REGION_EXTENTS (pScreen, clipBoxes);
-
- if (pOldExtents->x1 == pNewExtents->x1 &&
- pOldExtents->x2 == pNewExtents->x2 &&
- pOldExtents->y1 == pNewExtents->y1 &&
- pOldExtents->y2 == pNewExtents->y2)
- {
- /* update cliplist */
- if (!REGION_EQUAL (screen->pScreen, &pPortPriv->clip, clipBoxes))
- {
- REGION_COPY (screen->pScreen, &pPortPriv->clip, clipBoxes);
- nvidiaPaintRegion (screen->pScreen, &pPortPriv->clip, pPortPriv->colorKey);
- }
- return Success;
- }
- return BadMatch;
-}
-
-static KdVideoAdaptorPtr
-nvidiaSetupImageVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- nvidiaCardInfo(pScreenPriv);
- nvidiaScreenInfo(pScreenPriv);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdCardInfo *card = pScreenPriv->card;
- KdVideoAdaptorPtr adapt;
- NvidiaPortPrivPtr pPortPriv;
-
- if(!(adapt = xcalloc(1, sizeof(KdVideoAdaptorRec) +
- sizeof(NvidiaPortPrivRec) +
- sizeof(DevUnion))))
- return NULL;
-
- adapt->type = XvWindowMask | XvInputMask | XvImageMask;
- adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
- adapt->name = "Nvidia Video Overlay";
- adapt->nEncodings = 1;
- adapt->pEncodings = DummyEncoding;
- adapt->nFormats = NUM_FORMATS;
- adapt->pFormats = Formats;
- adapt->nPorts = 1;
- adapt->pPortPrivates = (DevUnion*)(&adapt[1]);
-
- pPortPriv = (NvidiaPortPrivPtr)(&adapt->pPortPrivates[1]);
-
- adapt->pPortPrivates[0].ptr = (pointer)(pPortPriv);
- adapt->pAttributes = Attributes;
- adapt->nImages = NUM_IMAGES;
- adapt->nAttributes = NUM_ATTRIBUTES;
- adapt->pImages = Images;
- adapt->PutVideo = NULL;
- adapt->PutStill = NULL;
- adapt->GetVideo = NULL;
- adapt->GetStill = NULL;
- adapt->StopVideo = nvidiaStopVideo;
- adapt->SetPortAttribute = nvidiaSetPortAttribute;
- adapt->GetPortAttribute = nvidiaGetPortAttribute;
- adapt->QueryBestSize = nvidiaQueryBestSize;
- adapt->PutImage = nvidiaPutImage;
- adapt->ReputImage = nvidiaReputImage;
- adapt->QueryImageAttributes = nvidiaQueryImageAttributes;
-
- pPortPriv->colorKey = nvidias->colorKey;
- pPortPriv->videoOn = FALSE;
- pPortPriv->brightness = 0;
- pPortPriv->saturation = 0;
- pPortPriv->currentBuf = 0;
-
- /* gotta uninit this someplace */
- REGION_INIT(pScreen, &pPortPriv->clip, NullBox, 0);
-
- nvidias->pAdaptor = adapt;
-
- xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
- xvSaturation = MAKE_ATOM("XV_SATURATION");
- xvColorKey = MAKE_ATOM("XV_COLORKEY");
-
- nvidiaResetVideo(screen);
-
- return adapt;
-}
-
-Bool nvidiaInitVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdVideoAdaptorPtr *adaptors, *newAdaptors = NULL;
- KdVideoAdaptorPtr newAdaptor = NULL;
- int num_adaptors;
- KdCardInfo *card = pScreenPriv->card;
- NvidiaScreenInfo *nvidias = (NvidiaScreenInfo *) screen->driver;
- NvidiaCardInfo *nvidiac = (NvidiaCardInfo *) card->driver;
-
- if (!nvidiac->media_reg)
- return FALSE;
-
- newAdaptor = nvidiaSetupImageVideo(pScreen);
-
- num_adaptors = KdXVListGenericAdaptors(screen, &adaptors);
-
- if(newAdaptor)
- {
- if(!num_adaptors)
- {
- num_adaptors = 1;
- adaptors = &newAdaptor;
- }
- else
- {
- newAdaptors = xalloc((num_adaptors + 1) *
- sizeof(KdVideoAdaptorPtr*));
- if(newAdaptors)
- {
- memcpy(newAdaptors, adaptors,
- num_adaptors * sizeof(KdVideoAdaptorPtr));
- newAdaptors[num_adaptors] = newAdaptor;
- adaptors = newAdaptors;
- num_adaptors++;
- }
- }
- }
-
- if(num_adaptors)
- KdXVScreenInit(pScreen, adaptors, num_adaptors);
-
- if(newAdaptors)
- xfree(newAdaptors);
- return TRUE;
-}
diff --git a/hw/kdrive/pcmcia/modes.h b/hw/kdrive/pcmcia/modes.h
deleted file mode 100644
index 0a078736f..000000000
--- a/hw/kdrive/pcmcia/modes.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK.
- *
- * 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 Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Alan Hourihane makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE 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.
- *
- * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk>
- */
-
-#define V_NHSYNC 0x01
-#define V_NVSYNC 0x02
-#define V_PHSYNC 0x04
-#define V_PVSYNC 0x08
-#define V_INTERLACE 0x10
-
-pcmciaDisplayModeRec pcmciaDefaultModes [] = {
-/* 640x400 @ 70Hz (VGA) hsync: 37.9kHz */
- {640, 400, 70 ,31500, 640,672,736,832,0, 400,401,404,445,0, V_NHSYNC | V_PVSYNC},
-/* 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz */
- {640, 480, 60 ,25200, 640,656,752,800,0, 480,490,492,525,0, V_NHSYNC | V_NVSYNC},
-/* 640x480 @ 72Hz (VESA) hsync: 37.9kHz */
- {640, 480, 72 ,31500, 640,664,704,832,0, 480,489,491,520,0, V_NHSYNC | V_NVSYNC},
-/* 640x480 @ 75Hz (VESA) hsync: 37.5kHz */
- {640, 480, 75 ,31500, 640,656,720,840,0, 480,481,484,500,0, V_NHSYNC | V_NVSYNC},
-/* 640x480 @ 85Hz (VESA) hsync: 43.3kHz */
- {640, 480, 85 ,36000, 640,696,752,832,0, 480,481,484,509,0, V_NHSYNC | V_NVSYNC},
-/* 800x600 @ 56Hz (VESA) hsync: 35.2kHz */
- {800, 600, 56 ,36000, 800,824,896,1024,0, 600,601,603,625,0, V_PHSYNC | V_PVSYNC},
-/* 800x600 @ 60Hz (VESA) hsync: 37.9kHz */
- {800, 600, 60 ,40000, 800,840,968,1056,0, 600,601,605,628,0, V_PHSYNC | V_PVSYNC},
-/* 800x600 @ 72Hz (VESA) hsync: 48.1kHz */
- {800, 600, 72 ,50000, 800,856,976,1040,0, 600,637,643,666,0, V_PHSYNC | V_PVSYNC},
-/* 800x600 @ 75Hz (VESA) hsync: 46.9kHz */
- {800, 600, 75 ,49500, 800,816,896,1056,0, 600,601,604,625,0, V_PHSYNC | V_PVSYNC},
-/* 800x600 @ 85Hz (VESA) hsync: 53.7kHz */
- {800, 600, 85 ,56300, 800,832,896,1048,0, 600,601,604,631,0, V_PHSYNC | V_PVSYNC},
-/* 1024x768i @ 43Hz (industry standard) hsync: 35.5kHz */
- {1024, 768, 43 ,44900, 1024,1032,1208,1264,0, 768,768,776,817,0, V_PHSYNC | V_PVSYNC | V_INTERLACE},
-/* 1024x768 @ 60Hz (VESA) hsync: 48.4kHz */
- {1024, 768, 60 ,65000, 1024,1048,1184,1344,0, 768,771,777,806,0, V_NHSYNC | V_NVSYNC},
-/* 1024x768 @ 70Hz (VESA) hsync: 56.5kHz */
- {1024, 768, 70 ,75000, 1024,1048,1184,1328,0, 768,771,777,806,0, V_NHSYNC | V_NVSYNC},
-/* 1024x768 @ 75Hz (VESA) hsync: 60.0kHz */
- {1024, 768, 75 ,78800, 1024,1040,1136,1312,0, 768,769,772,800,0, V_PHSYNC | V_PVSYNC},
-/* 1024x768 @ 85Hz (VESA) hsync: 68.7kHz */
- {1024, 768, 85 ,94500, 1024,1072,1168,1376,0, 768,769,772,808,0, V_PHSYNC | V_PVSYNC},
-/* 1152x864 @ 75Hz (VESA) hsync: 67.5kHz */
- {1152, 864, 75 ,108000, 1152,1216,1344,1600,0, 864,865,868,900,0, V_PHSYNC | V_PVSYNC},
- {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
-};
diff --git a/hw/kdrive/pcmcia/pcmcia.c b/hw/kdrive/pcmcia/pcmcia.c
deleted file mode 100644
index a1728c783..000000000
--- a/hw/kdrive/pcmcia/pcmcia.c
+++ /dev/null
@@ -1,1199 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK.
- *
- * 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 Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Alan Hourihane makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE 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.
- *
- * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk>
- *
- * A driver for the following PCMCIA cards...
- * Hewlett Packards HP VGA Out (Model F1252A)
- * Colorgraphics Voyager VGA
- *
- * Tested running under a Compaq IPAQ Pocket PC running Linux
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "pcmcia.h"
-#define extern
-#include <asm/io.h>
-#undef extern
-
-#define CLOCK 14318 /* KHz */
-#define CLK_N(a,b) (a & 0xff)
-#define CLK_M(a,b) ((b) & 0x3f)
-#define CLK_K(a,b) (((b) >> 6) & 3)
-#define CLK_FREQ(a,b) (((CLK_N(a,b) + 8) * CLOCK) / ((CLK_M(a,b)+2) << CLK_K(a,b)))
-
-extern void
-tridentUpdatePacked (ScreenPtr pScreen,
- shadowBufPtr pBuf);
-extern void
-cirrusUpdatePacked (ScreenPtr pScreen,
- shadowBufPtr pBuf);
-
-static Bool
-tridentSetCLK(int clock, CARD8 *a, CARD8 *b);
-
-static Bool
-CirrusFindClock(int freq, int *num_out, int *den_out);
-
-Bool
-pcmciaCardInit (KdCardInfo *card)
-{
- pcmciaCardInfo *pcmciac;
- CARD8 r9;
-
- pcmciac = (pcmciaCardInfo *) xalloc (sizeof (pcmciaCardInfo));
- if (!pcmciac)
- return FALSE;
-
- pcmciac->cop_base = (CARD8 *) KdMapDevice (PCMCIA_COP_BASE(card),
- PCMCIA_COP_SIZE(card));
-
- r9 = pcmciaReadIndex (pcmciac, 0x3c4, 0x09);
- /*
- * Crude detection....
- * The trident chip has a read only register at 0x09, which returns 0x4.
- * If it's not that, we assume the cirrus chip.
- * BREAKAGE.! If we have an anonymous PCMCIA card inserted, we could
- * potentially smash something here. FIXME !
- */
- if (r9 == 0x04) {
- ErrorF("PCMCIA: Found HP VGA card\n");
- pcmciac->HP = TRUE; /* Select HP VGA Out Card */
- } else {
- ErrorF("PCMCIA: Found Voyager VGA card\n");
- pcmciac->HP = FALSE; /* Select Voyager VGA Card */
- }
-
- if (pcmciac->HP) {
- /* needed by the accelerator - later */
- pcmciac->cop = (Cop *) (pcmciac->cop_base + TRIDENT_COP_OFF(card));
- }
-
- /*
- * Map frame buffer
- */
- if (pcmciac->HP)
- pcmciac->fb = KdMapDevice (0x2ce00000, 0x80000);
- else
- pcmciac->fb = KdMapDevice (0x2c0a0000, 0x10000); /*64K bank switched*/
-
- if (!pcmciac->fb)
- return FALSE;
-
- pcmciac->window = 0;
-
- card->driver = pcmciac;
-
- return TRUE;
-}
-
-Bool
-pcmciaModeSupported (KdScreenInfo *screen,
- const KdMonitorTiming *t)
-{
- KdCardInfo *card = screen->card;
- pcmciaCardInfo *pcmciac = (pcmciaCardInfo *) card->driver;
-
- if (pcmciac->HP)
- {
- CARD8 a, b;
- if (!tridentSetCLK (t->clock, &a, &b))
- return FALSE;
- }
- else
- {
- int a, b;
- if (!CirrusFindClock (t->clock, &a, &b))
- return FALSE;
- }
-
- /* width must be a multiple of 16 */
- if (t->horizontal & 0xf)
- return FALSE;
- return TRUE;
-}
-
-Bool
-pcmciaModeUsable (KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- pcmciaCardInfo *pcmciac = (pcmciaCardInfo *) card->driver;
- int screen_size;
- int pixel_width;
- int byte_width;
- int fb;
-
- if (screen->fb[0].depth == 8)
- screen->fb[0].bitsPerPixel = 8;
- else if (screen->fb[0].depth == 15 || screen->fb[0].depth == 16)
- screen->fb[0].bitsPerPixel = 16;
- else
- return FALSE;
-
- screen_size = 0;
- screen->fb[0].pixelStride = screen->width;
- screen->fb[0].byteStride = screen->width * (screen->fb[0].bitsPerPixel >>3);
- screen->fb[0].frameBuffer = pcmciac->fb;
- screen_size = screen->fb[0].byteStride * screen->height;
-
- return screen_size <= pcmciac->memory;
-}
-
-Bool
-pcmciaScreenInit (KdScreenInfo *screen)
-{
- pcmciaCardInfo *pcmciac = screen->card->driver;
- pcmciaScreenInfo *pcmcias;
- int screen_size, memory;
- int i;
- const KdMonitorTiming *t;
-
- pcmcias = (pcmciaScreenInfo *) xalloc (sizeof (pcmciaScreenInfo));
- if (!pcmcias)
- return FALSE;
- memset (pcmcias, '\0', sizeof (pcmciaScreenInfo));
-
- /* if (!pcmciac->cop) */
- screen->dumb = TRUE;
-
- if (screen->fb[0].depth < 8)
- screen->fb[0].depth = 8;
-
- /* default to 16bpp */
- if (!screen->fb[0].depth)
- screen->fb[0].depth = 16;
-
- /* default to 60Hz refresh */
- if (!screen->width || !screen->height)
- {
- screen->width = 640;
- screen->height = 400;
- screen->rate = 60;
- }
-
- pcmciac->memory = 512 * 1024;
- if (pcmciac->HP && !screen->softCursor && screen->fb[0].depth == 8)
- {
- /* ack, bail on the HW cursor for everything -- no ARGB falback */
- pcmcias->cursor_base = 0;
-#if 0
- /* Let's do hw cursor for the HP card, only in 8bit mode though */
- pcmcias->cursor_base = pcmcias->screen + pcmciac->memory - 4096;
- pcmciac->memory -= 4096;
-#endif
- }
-
- pcmcias->screen = pcmciac->fb;
- screen->driver = pcmcias;
-
- t = KdFindMode (screen, pcmciaModeSupported);
-
- screen->rate = t->rate;
- screen->width = t->horizontal;
- screen->height = t->vertical;
-
- pcmcias->randr = screen->randr;
-
- if (!KdTuneMode (screen, pcmciaModeUsable, pcmciaModeSupported))
- {
- xfree (pcmcias);
- return FALSE;
- }
-
- switch (screen->fb[0].depth) {
- case 4:
- screen->fb[0].visuals = ((1 << StaticGray) |
- (1 << GrayScale) |
- (1 << StaticColor));
- screen->fb[0].blueMask = 0x00;
- screen->fb[0].greenMask = 0x00;
- screen->fb[0].redMask = 0x00;
- break;
- case 8:
- screen->fb[0].visuals = ((1 << StaticGray) |
- (1 << GrayScale) |
- (1 << StaticColor) |
- (1 << PseudoColor) |
- (1 << TrueColor) |
- (1 << DirectColor));
- screen->fb[0].blueMask = 0x00;
- screen->fb[0].greenMask = 0x00;
- screen->fb[0].redMask = 0x00;
- break;
- case 15:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x001f;
- screen->fb[0].greenMask = 0x03e0;
- screen->fb[0].redMask = 0x7c00;
- break;
- case 16:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x001f;
- screen->fb[0].greenMask = 0x07e0;
- screen->fb[0].redMask = 0xf800;
- break;
- }
-
- return TRUE;
-}
-
-void *
-tridentWindowLinear (ScreenPtr pScreen,
- CARD32 row,
- CARD32 offset,
- int mode,
- CARD32 *size,
- void *closure)
-{
- KdScreenPriv(pScreen);
- pcmciaCardInfo *pcmciac = pScreenPriv->card->driver;
-
- if (!pScreenPriv->enabled)
- return 0;
-
- *size = pScreenPriv->screen->fb[0].byteStride;
- return (CARD8 *) pcmciac->fb + row * pScreenPriv->screen->fb[0].byteStride + offset;
-}
-
-void *
-cirrusWindowWindowed (ScreenPtr pScreen,
- CARD32 row,
- CARD32 offset,
- int mode,
- CARD32 *size,
- void *closure)
-{
- KdScreenPriv(pScreen);
- pcmciaCardInfo *pcmciac = pScreenPriv->card->driver;
- int bank, boffset;
-
- if (!pScreenPriv->enabled)
- return 0;
-
- bank = (row * pScreenPriv->screen->fb[0].byteStride) / 0x1000;
- pcmciaWriteIndex(pcmciac, 0x3ce, 0x0B, 0x0c);
- pcmciaWriteIndex(pcmciac, 0x3ce, 0x09, bank);
- pcmciaWriteIndex(pcmciac, 0x3ce, 0x0A, bank);
- *size = pScreenPriv->screen->fb[0].byteStride;
- return (CARD8 *) pcmciac->fb + (row * pScreenPriv->screen->fb[0].byteStride) - (bank * 0x1000) + offset;
-}
-
-LayerPtr
-pcmciaLayerCreate (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- pcmciaCardInfo *pcmciac = pScreenPriv->card->driver;
- pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) pScreenPriv->screen->driver;
- ShadowUpdateProc update;
- ShadowWindowProc window;
- PixmapPtr pPixmap;
- int kind;
-
- if (pcmciac->HP) {
- window = tridentWindowLinear;
- if (pcmcias->randr == RR_Rotate_0)
- update = tridentUpdatePacked;
- else
- update = pcmciaUpdateRotatePacked;
- } else {
- window = cirrusWindowWindowed;
- if (pcmcias->randr == RR_Rotate_0)
- update = cirrusUpdatePacked;
- else
- update = pcmciaUpdateRotatePacked;
- }
-
- if (!update)
- abort ();
-
- kind = LAYER_SHADOW;
- pPixmap = 0;
-
- return LayerCreate (pScreen, kind, screen->fb[0].depth,
- pPixmap, update, window, pcmcias->randr, 0);
-}
-
-void
-pcmciaConfigureScreen (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- FbdevPriv *priv = pScreenPriv->card->driver;
- pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) screen->driver;
- KdMouseMatrix m;
-
- KdComputeMouseMatrix (&m, pcmcias->randr,
- screen->width, screen->height);
-
- if (m.matrix[0][0])
- {
- pScreen->width = screen->width;
- pScreen->height = screen->height;
- pScreen->mmWidth = screen->width_mm;
- pScreen->mmHeight = screen->height_mm;
- }
- else
- {
- pScreen->width = screen->height;
- pScreen->height = screen->width;
- pScreen->mmWidth = screen->height_mm;
- pScreen->mmHeight = screen->width_mm;
- }
- KdSetMouseMatrix (&m);
-}
-
-#ifdef RANDR
-
-Bool
-pcmciaRandRSupported (ScreenPtr pScreen,
- const KdMonitorTiming *t)
-{
- KdScreenPriv(pScreen);
- pcmciaCardInfo *pcmciac = pScreenPriv->card->driver;
- KdScreenInfo *screen = pScreenPriv->screen;
- int screen_size;
- int byteStride;
-
- /* Make sure the clock is supported */
- if (!pcmciaModeSupported (screen, t))
- return FALSE;
- /* Check for sufficient memory */
- byteStride = screen->width * (screen->fb[0].bitsPerPixel >>3);
- screen_size = byteStride * screen->height;
-
- return screen_size <= pcmciac->memory;
-}
-
-Bool
-pcmciaRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
-{
- KdScreenPriv(pScreen);
- pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) pScreenPriv->screen->driver;
-
- *rotations = (RR_Rotate_0|RR_Rotate_90|RR_Rotate_180|RR_Rotate_270|
- RR_Reflect_X|RR_Reflect_Y);
-
- return KdRandRGetInfo (pScreen, pcmcias->randr, pcmciaRandRSupported);
-}
-
-int
-pcmciaLayerAdd (WindowPtr pWin, pointer value)
-{
- ScreenPtr pScreen = pWin->drawable.pScreen;
- LayerPtr pLayer = (LayerPtr) value;
-
- if (!LayerWindowAdd (pScreen, pLayer, pWin))
- return WT_STOPWALKING;
-
- return WT_WALKCHILDREN;
-}
-
-int
-pcmciaLayerRemove (WindowPtr pWin, pointer value)
-{
- ScreenPtr pScreen = pWin->drawable.pScreen;
- LayerPtr pLayer = (LayerPtr) value;
-
- LayerWindowRemove (pScreen, pLayer, pWin);
-
- return WT_WALKCHILDREN;
-}
-
-pcmciaRandRSetConfig (ScreenPtr pScreen,
- Rotation randr,
- int rate,
- RRScreenSizePtr pSize)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- FbdevPriv *priv = pScreenPriv->card->driver;
- pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) pScreenPriv->screen->driver;
- Bool wasEnabled = pScreenPriv->enabled;
- int newwidth, newheight;
- LayerPtr pNewLayer;
- int kind;
- int oldrandr = pcmcias->randr;
- PixmapPtr pPixmap;
- const KdMonitorTiming *t;
-
- randr = KdAddRotation (screen->randr, randr);
-
- t = KdRandRGetTiming (pScreen, pcmciaRandRSupported, rate, pSize);
-
- if (wasEnabled)
- KdDisableScreen (pScreen);
-
- screen->rate = t->rate;
- screen->width = t->horizontal;
- screen->height = t->vertical;
-
- pcmcias->randr = randr;
- pcmciaConfigureScreen (pScreen);
-
- pNewLayer = pcmciaLayerCreate (pScreen);
-
- if (!pNewLayer)
- {
- pcmcias->randr = oldrandr;
- pcmciaConfigureScreen (pScreen);
- if (wasEnabled)
- KdEnableScreen (pScreen);
- return FALSE;
- }
-
- if (WalkTree (pScreen, pcmciaLayerAdd, (pointer) pNewLayer) == WT_STOPWALKING)
- {
- WalkTree (pScreen, pcmciaLayerRemove, (pointer) pNewLayer);
- LayerDestroy (pScreen, pNewLayer);
- pcmcias->randr = oldrandr;
- pcmciaConfigureScreen (pScreen);
- if (wasEnabled)
- KdEnableScreen (pScreen);
- return FALSE;
- }
- WalkTree (pScreen, pcmciaLayerRemove, (pointer) pcmcias->pLayer);
- LayerDestroy (pScreen, pcmcias->pLayer);
- pcmcias->pLayer = pNewLayer;
- if (wasEnabled)
- KdEnableScreen (pScreen);
- return TRUE;
-}
-
-Bool
-pcmciaRandRInit (ScreenPtr pScreen)
-{
- rrScrPrivPtr pScrPriv;
-
- if (!RRScreenInit (pScreen))
- return FALSE;
-
- pScrPriv = rrGetScrPriv(pScreen);
- pScrPriv->rrGetInfo = pcmciaRandRGetInfo;
- pScrPriv->rrSetConfig = pcmciaRandRSetConfig;
- return TRUE;
-}
-#endif
-
-Bool
-pcmciaInitScreen (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- FbdevPriv *priv = pScreenPriv->card->driver;
- pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) pScreenPriv->screen->driver;
-
- if (!LayerStartInit (pScreen))
- return FALSE;
- if (!LayerFinishInit (pScreen))
- return FALSE;
-
- pcmciaConfigureScreen (pScreen);
-
- pcmcias->pLayer = pcmciaLayerCreate (pScreen);
- if (!pcmcias->pLayer)
- return FALSE;
-#ifdef RANDR
- if (!pcmciaRandRInit (pScreen))
- return FALSE;
-#endif
- return TRUE;
-}
-
-CARD8
-pcmciaReadIndex (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 index)
-{
- CARD8 value;
-
- pcmciac->cop_base[port] = index;
- value = pcmciac->cop_base[port+1];
- return value;
-}
-
-void
-pcmciaWriteIndex (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 index, CARD8 value)
-{
- pcmciac->cop_base[port] = index;
- pcmciac->cop_base[port+1] = value;
-}
-
-CARD8
-pcmciaReadReg (pcmciaCardInfo *pcmciac, CARD16 port)
-{
- CARD8 value;
-
- value = pcmciac->cop_base[port];
-
- return value;
-}
-
-void
-pcmciaWriteReg (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 value)
-{
- pcmciac->cop_base[port] = value;
-}
-
-
-void
-pcmciaPause ()
-{
- struct timeval tv;
-
- tv.tv_sec = 0;
- tv.tv_usec = 50 * 1000;
- select (1, 0, 0, 0, &tv);
-}
-
-void
-pcmciaPreserve (KdCardInfo *card)
-{
-}
-
-/* CLOCK_FACTOR is double the osc freq in kHz (osc = 14.31818 MHz) */
-#define CLOCK_FACTOR 28636
-
-/* stability constraints for internal VCO -- MAX_VCO also determines the maximum Video pixel clock */
-#define MIN_VCO CLOCK_FACTOR
-#define MAX_VCO 111000
-
-/* clock in kHz is (numer * CLOCK_FACTOR / (denom & 0x3E)) >> (denom & 1) */
-#define VCOVAL(n, d) \
- ((((n) & 0x7F) * CLOCK_FACTOR / ((d) & 0x3E)) )
-
-#define CLOCKVAL(n, d) \
- (VCOVAL(n, d) >> ((d) & 1))
-
-static Bool
-CirrusFindClock(int freq, int *num_out, int *den_out)
-{
- int n;
- int num = 0, den = 0;
- int mindiff;
-
- /*
- * If max_clock is greater than the MAX_VCO default, ignore
- * MAX_VCO. On the other hand, if MAX_VCO is higher than max_clock,
- * make use of the higher MAX_VCO value.
- */
-
- mindiff = freq;
- for (n = 0x10; n < 0x7f; n++) {
- int d;
- for (d = 0x14; d < 0x3f; d++) {
- int c, diff;
- /* Avoid combinations that can be unstable. */
- if ((VCOVAL(n, d) < MIN_VCO) || (VCOVAL(n, d) > MAX_VCO))
- continue;
- c = CLOCKVAL(n, d);
- diff = abs(c - freq);
- if (diff < mindiff) {
- mindiff = diff;
- num = n;
- den = d;
- }
- }
- }
- if (n == 0x80)
- return FALSE;
-
- *num_out = num;
- *den_out = den;
-
- return TRUE;
-}
-
-
-static Bool
-tridentSetCLK(int clock, CARD8 *a, CARD8 *b)
-{
- int powerup[4] = { 1,2,4,8 };
- int clock_diff = 750;
- int freq, ffreq;
- int m, n, k;
- int p, q, r, s;
- int startn, endn;
- int endm, endk;
-
- p = q = r = s = 0;
-
- startn = 0;
- endn = 121;
- endm = 31;
- endk = 1;
-
- freq = clock;
-
- for (k=0;k<=endk;k++)
- for (n=startn;n<=endn;n++)
- for (m=1;m<=endm;m++)
- {
- ffreq = ( ( ((n + 8) * CLOCK) / ((m + 2) * powerup[k]) ));
- if ((ffreq > freq - clock_diff) && (ffreq < freq + clock_diff))
- {
- clock_diff = (freq > ffreq) ? freq - ffreq : ffreq - freq;
- p = n; q = m; r = k; s = ffreq;
- }
- }
-
-#if 0
- ErrorF ("ffreq %d clock %d\n", s, clock);
-#endif
- if (s == 0)
- return FALSE;
-
- /* N is first 7bits, first M bit is 8th bit */
- *a = ((1 & q) << 7) | p;
- /* first 4bits are rest of M, 1bit for K value */
- *b = (((q & 0xFE) >> 1) | (r << 4));
- return TRUE;
-}
-
-Bool
-pcmciaEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- pcmciaCardInfo *pcmciac = pScreenPriv->card->driver;
- pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) screen->driver;
- int i,j;
- unsigned char Sequencer[6];
- unsigned char CRTC[31];
- unsigned char Graphics[9];
- unsigned char Attribute[21];
- unsigned char MiscOutReg;
- const KdMonitorTiming *t;
- int hactive, hblank, hfp, hbp;
- int vactive, vblank, vfp, vbp;
-
- int h_active;
- int h_total;
- int h_display_end;
- int h_sync_start;
- int h_sync_end;
- int h_skew = 0;
-
- int v_active;
- int v_total;
- int v_sync_start;
- int v_sync_end;
- int v_skew = 0;
-
- t = KdFindMode (screen, pcmciaModeSupported);
-
- hactive = t->horizontal;
- hfp = t->hfp;
- hbp = t->hbp;
- hblank = t->hblank;
-
- h_active = hactive;
- h_sync_start = hactive + hfp;
- h_sync_end = hactive + hblank - hbp;
- h_total = hactive + hblank;
-
- vactive = t->vertical;
- vfp = t->vfp;
- vbp = t->vbp;
- vblank = t->vblank;
-
- v_active = vactive;
- v_sync_start = vactive + vfp;
- v_sync_end = vactive + vblank - vbp;
- v_total = vactive + vblank;
-
- /*
- * compute correct Hsync & Vsync polarity
- */
-
- MiscOutReg = 0x23;
- if (t->hpol == KdSyncNegative)
- MiscOutReg |= 0x40;
- if (t->vpol == KdSyncNegative)
- MiscOutReg |= 0x80;
-
- /*
- * Time Sequencer
- */
- if (pScreenPriv->screen->fb[0].depth == 4)
- Sequencer[0] = 0x02;
- else
- Sequencer[0] = 0x00;
- Sequencer[1] = 0x01;
- Sequencer[2] = 0x0F;
- Sequencer[3] = 0x00; /* Font select */
- if (pScreenPriv->screen->fb[0].depth < 8)
- Sequencer[4] = 0x06; /* Misc */
- else
- Sequencer[4] = 0x0E; /* Misc */
- Sequencer[5] = 0x00;
-
- /*
- * CRTC Controller
- */
- CRTC[0] = ((h_total) >> 3) - 5;
- CRTC[1] = (hactive >> 3) - 1;
- CRTC[2] = ((min(h_sync_start,h_active)) >> 3) - 1;
- CRTC[3] = ((((min(h_sync_end,h_total)) >> 3) - 1) & 0x1F) | 0x80;
- i = (((h_skew << 2) + 0x10) & ~0x1F);
- if (i < 0x80)
- CRTC[3] |= i;
- CRTC[4] = (h_sync_start >> 3);
- CRTC[5] = (((((min(h_sync_end,h_total)) >> 3) - 1) & 0x20) << 2)
- | (((h_sync_end >> 3)) & 0x1F);
-
- CRTC[6] = (v_total - 2) & 0xFF;
- CRTC[7] = (((v_total - 2) & 0x100) >> 8)
- | (((v_active - 1) & 0x100) >> 7)
- | ((v_sync_start & 0x100) >> 6)
- | ((((min(v_sync_start,v_active)) - 1) & 0x100) >> 5)
- | 0x10
- | (((v_total - 2) & 0x200) >> 4)
- | (((v_active - 1) & 0x200) >> 3)
- | ((v_sync_start & 0x200) >> 2);
- CRTC[8] = 0x00;
- CRTC[9] = ((((min(v_sync_start,v_active))-1) & 0x200) >> 4) | 0x40;
- CRTC[10] = 0x00;
- CRTC[11] = 0x00;
- CRTC[12] = 0x00;
- CRTC[13] = 0x00;
- CRTC[14] = 0x00;
- CRTC[15] = 0x00;
- CRTC[16] = v_sync_start & 0xFF;
- CRTC[17] = (v_sync_end & 0x0F) | 0x20;
- CRTC[18] = (v_active - 1) & 0xFF;
- if (pScreenPriv->screen->fb[0].depth == 4)
- CRTC[19] = pScreenPriv->screen->fb[0].pixelStride >> 4;
- else
- if (pScreenPriv->screen->fb[0].depth == 8)
- CRTC[19] = pScreenPriv->screen->fb[0].pixelStride >> 3;
- else
- if (pScreenPriv->screen->fb[0].depth == 16 ||
- pScreenPriv->screen->fb[0].depth == 15)
- CRTC[19] = pScreenPriv->screen->fb[0].pixelStride >> 2;
- CRTC[20] = 0x00;
- CRTC[21] = ((min(v_sync_end,v_active)) - 1) & 0xFF;
- CRTC[22] = ((min(v_sync_end,v_active)) - 1) & 0xFF;
- if (pScreenPriv->screen->fb[0].depth < 8)
- CRTC[23] = 0xE3;
- else
- CRTC[23] = 0xC3;
- CRTC[24] = 0xFF;
- CRTC[25] = 0x00;
- CRTC[26] = 0x00;
-#if 0
- if (!pcmciac->HP)
- if (mode.Flags & V_INTERLACE) CRTC[26] |= 0x01;
-#endif
- if (pcmciac->HP)
- CRTC[27] = 0x00;
- else
- CRTC[27] = 0x22;
- CRTC[28] = 0x00;
- CRTC[29] = 0x00;
- CRTC[30] = 0x80;
-#if 0
- if (pcmciac->HP)
- if (mode.Flags & V_INTERLACE) CRTC[30] |= 0x04;
-#endif
-
-{
- int nExtBits = 0;
- CARD32 ExtBits;
- CARD32 ExtBitMask = ((1 << nExtBits) - 1) << 6;
-
- CRTC[3] = (CRTC[3] & ~0x1F)
- | ((((min(h_sync_end,h_total)) >> 3) - 1) & 0x1F);
- CRTC[5] = (CRTC[5] & ~0x80)
- | (((((min(h_sync_end,h_total)) >> 3) - 1) & 0x20) << 2);
- ExtBits = (((min(h_sync_end,h_total)) >> 3) - 1) & ExtBitMask;
-
- /* First the horizontal case */
- if ((((min(h_sync_end,h_total)) >> 3) == (h_total >> 3)))
- {
- int i = (CRTC[3] & 0x1F)
- | ((CRTC[5] & 0x80) >> 2)
- | ExtBits;
- if ((i-- > ((((min(h_sync_start,h_active)) >> 3) - 1)
- & (0x3F | ExtBitMask)))
- && ((min(h_sync_end,h_total)) == h_total))
- i = 0;
- CRTC[3] = (CRTC[3] & ~0x1F) | (i & 0x1F);
- CRTC[5] = (CRTC[5] & ~0x80) | ((i << 2) & 0x80);
- ExtBits = i & ExtBitMask;
- }
-}
-{
- CARD32 ExtBits;
- CARD32 ExtBitMask = 0;
- /* If width is not known nBits should be 0. In this
- * case BitMask is set to 0 so we can check for it. */
- CARD32 BitMask = 0;
- int VBlankStart = ((min(v_sync_start,v_active)) - 1) & 0xFF;
- CRTC[22] = ((min(v_sync_end,v_total)) - 1) & 0xFF;
- ExtBits = ((min(v_sync_end,v_total)) - 1) & ExtBitMask;
-
- if ((min(v_sync_end,v_total)) == v_total)
- /* Null top overscan */
- {
- int i = CRTC[22] | ExtBits;
- if (((BitMask && ((i & BitMask) > (VBlankStart & BitMask)))
- || ((i > VBlankStart) && /* 8-bit case */
- ((i & 0x7F) > (VBlankStart & 0x7F)))) && /* 7-bit case */
- !(CRTC[9] & 0x9F)) /* 1 scanline/row */
- i = 0;
- else
- i = (i - 1);
- CRTC[22] = i & 0xFF;
- ExtBits = i & 0xFF00;
- }
-}
-
- /*
- * Graphics Display Controller
- */
- Graphics[0] = 0x00;
- Graphics[1] = 0x00;
- Graphics[2] = 0x00;
- Graphics[3] = 0x00;
- Graphics[4] = 0x00;
- if (pScreenPriv->screen->fb[0].depth == 4)
- Graphics[5] = 0x02;
- else
- Graphics[5] = 0x40;
- Graphics[6] = 0x05; /* only map 64k VGA memory !!!! */
- Graphics[7] = 0x0F;
- Graphics[8] = 0xFF;
-
- Attribute[0] = 0x00; /* standard colormap translation */
- Attribute[1] = 0x01;
- Attribute[2] = 0x02;
- Attribute[3] = 0x03;
- Attribute[4] = 0x04;
- Attribute[5] = 0x05;
- Attribute[6] = 0x06;
- Attribute[7] = 0x07;
- Attribute[8] = 0x08;
- Attribute[9] = 0x09;
- Attribute[10] = 0x0A;
- Attribute[11] = 0x0B;
- Attribute[12] = 0x0C;
- Attribute[13] = 0x0D;
- Attribute[14] = 0x0E;
- Attribute[15] = 0x0F;
- if (pScreenPriv->screen->fb[0].depth == 4)
- Attribute[16] = 0x81;
- else
- Attribute[16] = 0x41;
- if (pScreenPriv->screen->fb[0].bitsPerPixel == 16)
- Attribute[17] = 0x00;
- else
- Attribute[17] = 0xFF;
- Attribute[18] = 0x0F;
- Attribute[19] = 0x00;
- Attribute[20] = 0x00;
-
- /* Wake up the card */
- if (pcmciac->HP) {
- pcmciaWriteReg(pcmciac, 0x3c3, 0x1);
- pcmciaWriteReg(pcmciac, 0x46e8, 0x10);
- } else {
- pcmciaWriteReg(pcmciac, 0x105, 0x1);
- pcmciaWriteReg(pcmciac, 0x46e8, 0x1f);
- pcmciaWriteReg(pcmciac, 0x102, 0x1);
- pcmciaWriteReg(pcmciac, 0x46e8, 0xf);
- pcmciaWriteReg(pcmciac, 0x3c3, 0x1);
- }
-
- if (pcmciac->HP) {
- /* unlock */
- pcmciaWriteIndex(pcmciac, 0x3c4, 0x11, 0x92);
- j = pcmciaReadIndex(pcmciac, 0x3c4, 0xb);
- pcmciaWriteIndex(pcmciac, 0x3c4, 0xe, 0xc2);
-
- /* switch on dac */
- pcmciaWriteIndex(pcmciac, 0x3d4, 0x29, 0x24);
- /* switch on the accelerator */
- pcmciaWriteIndex(pcmciac, 0x3d4, 0x36, 0x80);
-
- /* bump up memory clk */
- pcmciaWriteReg(pcmciac, 0x43c6, 0x65);
- pcmciaWriteReg(pcmciac, 0x43c7, 0x00);
- } else {
- /* unlock */
- pcmciaWriteIndex(pcmciac, 0x3c4, 0x06, 0x12);
- pcmciaWriteReg(pcmciac, 0x3c2, MiscOutReg);
- }
-
- /* synchronous reset */
- pcmciaWriteIndex(pcmciac, 0x3c4, 0, 0);
-
- pcmciaWriteReg(pcmciac, 0x3da, 0x10);
-
- for (i=0;i<6;i++)
- pcmciaWriteIndex(pcmciac, 0x3c4, i, Sequencer[i]);
-
- if (pcmciac->HP) {
- /* Stick chip into color mode */
- pcmciaWriteIndex(pcmciac, 0x3ce, 0x2f, 0x06);
- /* Switch on Linear addressing */
- pcmciaWriteIndex(pcmciac, 0x3d4, 0x21, 0x2e);
- } else {
- /* Stick chip into 8bit access mode - ugh! */
- pcmciaWriteIndex(pcmciac, 0x3c4, 0x0F, 0x20); /* 0x26 ? */
- /* reset mclk */
- pcmciaWriteIndex(pcmciac, 0x3c4, 0x1F, 0);
- }
-
- pcmciaWriteIndex(pcmciac, 0x3c4, 0, 0x3);
-
- for (i=0;i<31;i++)
- pcmciaWriteIndex(pcmciac, 0x3d4, i, CRTC[i]);
-
- for (i=0;i<9;i++)
- pcmciaWriteIndex(pcmciac, 0x3ce, i, Graphics[i]);
-
- j = pcmciaReadReg(pcmciac, 0x3da);
-
- for (i=0;i<21;i++) {
- pcmciaWriteReg(pcmciac, 0x3c0, i);
- pcmciaWriteReg(pcmciac, 0x3c0, Attribute[i]);
- }
-
- j = pcmciaReadReg(pcmciac, 0x3da);
- pcmciaWriteReg(pcmciac, 0x3c0, 0x20);
-
- j = pcmciaReadReg(pcmciac, 0x3c8);
- j = pcmciaReadReg(pcmciac, 0x3c6);
- j = pcmciaReadReg(pcmciac, 0x3c6);
- j = pcmciaReadReg(pcmciac, 0x3c6);
- j = pcmciaReadReg(pcmciac, 0x3c6);
- switch (pScreenPriv->screen->fb[0].depth) {
- /* This is here for completeness, when/if we ever do 4bpp */
- case 4:
- pcmciaWriteReg(pcmciac, 0x3c6, 0x0);
- if (pcmciac->HP) {
- pcmciaWriteIndex(pcmciac, 0x3ce, 0x0f, 0x90);
- pcmciaWriteIndex(pcmciac, 0x3d4, 0x38, 0x00);
- } else
- pcmciaWriteIndex(pcmciac, 0x3c4, 0x07, 0x00);
- break;
- case 8:
- pcmciaWriteReg(pcmciac, 0x3c6, 0x0);
- if (pcmciac->HP) {
- pcmciaWriteIndex(pcmciac, 0x3ce, 0x0f, 0x92);
- pcmciaWriteIndex(pcmciac, 0x3d4, 0x38, 0x00);
- } else
- pcmciaWriteIndex(pcmciac, 0x3c4, 0x07, 0x01);
- break;
- case 15:
- if (pcmciac->HP) {
- pcmciaWriteReg(pcmciac, 0x3c6, 0x10);
- pcmciaWriteIndex(pcmciac, 0x3ce, 0x0f, 0x9a);
- pcmciaWriteIndex(pcmciac, 0x3d4, 0x38, 0x04);
- } else {
- pcmciaWriteReg(pcmciac, 0x3c6, 0xC0);
- pcmciaWriteIndex(pcmciac, 0x3c4, 0x07, 0x03);
- }
- break;
- case 16:
- if (pcmciac->HP) {
- pcmciaWriteReg(pcmciac, 0x3c6, 0x30);
- pcmciaWriteIndex(pcmciac, 0x3ce, 0x0f, 0x9a);
- pcmciaWriteIndex(pcmciac, 0x3d4, 0x38, 0x04);
- } else {
- pcmciaWriteReg(pcmciac, 0x3c6, 0xC1);
- pcmciaWriteIndex(pcmciac, 0x3c4, 0x07, 0x03);
- }
- break;
- }
- j = pcmciaReadReg(pcmciac, 0x3c8);
-
- pcmciaWriteReg(pcmciac, 0x3c6, 0xff);
-
- for (i=0;i<256;i++) {
- pcmciaWriteReg(pcmciac, 0x3c8, i);
- pcmciaWriteReg(pcmciac, 0x3c9, i);
- pcmciaWriteReg(pcmciac, 0x3c9, i);
- pcmciaWriteReg(pcmciac, 0x3c9, i);
- }
-
- /* Set the Clock */
- if (pcmciac->HP) {
- CARD8 a,b;
- int clock = t->clock;
- if (pScreenPriv->screen->fb[0].bitsPerPixel == 16)
- clock *= 2;
- tridentSetCLK(clock, &a, &b);
- pcmciaWriteReg(pcmciac, 0x43c8, a);
- pcmciaWriteReg(pcmciac, 0x43c9, b);
- } else {
- int num, den;
- unsigned char tmp;
- int clock = t->clock;
- if (pScreenPriv->screen->fb[0].bitsPerPixel == 16)
- clock *= 2;
-
- CirrusFindClock(clock, &num, &den);
-
- tmp = pcmciaReadIndex(pcmciac, 0x3c4, 0x0d);
- pcmciaWriteIndex(pcmciac, 0x3c4, 0x0d, (tmp & 0x80) | num);
- tmp = pcmciaReadIndex(pcmciac, 0x3c4, 0x1d);
- pcmciaWriteIndex(pcmciac, 0x3c4, 0x1d, (tmp & 0xc0) | den);
- }
- pcmciaWriteReg(pcmciac, 0x3c2, MiscOutReg | 0x08);
-
-#if 1
- for (i=1;i<0x3f;i++)
- ErrorF("0x3c4:%02x: 0x%x\n",i,pcmciaReadIndex(pcmciac, 0x3c4, i));
-
- ErrorF("\n");
-
- for (i=0;i<0x3f;i++)
- ErrorF("0x3ce:%02x: 0x%x\n",i,pcmciaReadIndex(pcmciac, 0x3ce, i));
-
- ErrorF("\n");
-
- for (i=0;i<0x3f;i++)
- ErrorF("0x3d4:%02x: 0x%x\n",i,pcmciaReadIndex(pcmciac, 0x3d4, i));
-#endif
-
- return TRUE;
-}
-
-void
-pcmciaDisable (ScreenPtr pScreen)
-{
-}
-
-const CARD8 tridentDPMSModes[4] = {
- 0x00, /* KD_DPMS_NORMAL */
- 0x01, /* KD_DPMS_STANDBY */
- 0x02, /* KD_DPMS_SUSPEND */
- 0x03, /* KD_DPMS_POWERDOWN */
-};
-
-Bool
-pcmciaDPMS (ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- pcmciaCardInfo *pcmciac = pScreenPriv->card->driver;
-
- if (pcmciac->HP) {
- pcmciaWriteIndex (pcmciac, 0x3ce, 0x23, tridentDPMSModes[mode]);
- pcmciaPause ();
- } else {
- /* Voyager */
- }
-
- return TRUE;
-}
-
-void
-pcmciaRestore (KdCardInfo *card)
-{
-}
-
-void
-pcmciaScreenFini (KdScreenInfo *screen)
-{
- pcmciaScreenInfo *pcmcias = (pcmciaScreenInfo *) screen->driver;
-
- xfree (pcmcias);
- screen->driver = 0;
-}
-
-void
-pcmciaCardFini (KdCardInfo *card)
-{
- pcmciaCardInfo *pcmciac = card->driver;
-
- if (pcmciac->cop_base)
- KdUnmapDevice ((void *) pcmciac->cop_base, PCMCIA_COP_SIZE(card));
-}
-
-void
-pcmciaGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- pcmciaCardInfo *pcmciac = pScreenPriv->card->driver;
-
- while (ndef--)
- {
- pcmciaWriteReg (pcmciac, 0x3C7, pdefs->pixel);
- pdefs->red = pcmciaReadReg (pcmciac, 0x3C9) << 10;
- pdefs->green = pcmciaReadReg (pcmciac, 0x3C9) << 10;
- pdefs->blue = pcmciaReadReg (pcmciac, 0x3C9) << 10;
- pdefs++;
- }
-}
-
-void
-pcmciaPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- pcmciaCardInfo *pcmciac = pScreenPriv->card->driver;
-
- while (ndef--)
- {
- pcmciaWriteReg (pcmciac, 0x3C8, pdefs->pixel);
- pcmciaWriteReg (pcmciac, 0x3C9, pdefs->red >> 10);
- pcmciaWriteReg (pcmciac, 0x3C9, pdefs->green >> 10);
- pcmciaWriteReg (pcmciac, 0x3C9, pdefs->blue >> 10);
- pdefs++;
- }
-}
-
-
-KdCardFuncs pcmciaFuncs = {
- pcmciaCardInit, /* cardinit */
- pcmciaScreenInit, /* scrinit */
- pcmciaInitScreen, /* initScreen */
- pcmciaPreserve, /* preserve */
- pcmciaEnable, /* enable */
- pcmciaDPMS, /* dpms */
- pcmciaDisable, /* disable */
- pcmciaRestore, /* restore */
- pcmciaScreenFini, /* scrfini */
- pcmciaCardFini, /* cardfini */
-
- pcmciaCursorInit, /* initCursor */
- pcmciaCursorEnable, /* enableCursor */
- pcmciaCursorDisable, /* disableCursor */
- pcmciaCursorFini, /* finiCursor */
- pcmciaRecolorCursor, /* recolorCursor */
-
-#if 0 /* not yet */
- pcmciaDrawInit, /* initAccel */
- pcmciaDrawEnable, /* enableAccel */
- pcmciaDrawSync, /* syncAccel */
- pcmciaDrawDisable, /* disableAccel */
- pcmciaDrawFini, /* finiAccel */
-#else
- 0,
- 0,
- 0,
- 0,
- 0,
-#endif
-
- pcmciaGetColors, /* getColors */
- pcmciaPutColors, /* putColors */
-};
diff --git a/hw/kdrive/pcmcia/pcmcia.h b/hw/kdrive/pcmcia/pcmcia.h
deleted file mode 100644
index 245e51b77..000000000
--- a/hw/kdrive/pcmcia/pcmcia.h
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK.
- *
- * 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 Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Alan Hourihane makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE 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.
- *
- * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk>
- */
-
-#ifndef _PCMCIA_H_
-#define _PCMCIA_H_
-
-#include <fbdev.h>
-
-/*
- * offset from ioport beginning
- */
-
-#define PCMCIA_COP_BASE(c) 0x20000000
-#define PCMCIA_COP_SIZE(c) 0x10000
-#define TRIDENT_COP_OFF(c) 0x2100
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-typedef struct _cop {
- VOL32 src_start_xy; /* 0x00 */
- VOL32 src_end_xy; /* 0x04 */
- VOL32 dst_start_xy; /* 0x08 */
- VOL32 dst_end_xy; /* 0x0c */
- VOL32 alpha; /* 0x10 */
- CARD8 pad14[0xc]; /* 0x14 */
- VOL32 multi; /* 0x20 */
-
-#define COP_MULTI_CLIP_TOP_LEFT 0x10000000
-#define COP_MULTI_DEPTH 0x40000000
-#define COP_MULTI_COLOR_KEY 0x70000000
-#define COP_MULTI_STYLE 0x50000000
-#define COP_MULTI_PATTERN 0x80000000
-#define COP_MULTI_ROP 0x90000000
-#define COP_MULTI_STRIDE 0x60000000
-#define COP_MULTI_Z 0xa0000000
-#define COP_MULTI_ALPHA 0xb0000000
-#define COP_MULTI_TEXTURE 0xd0000000
-#define COP_MULTI_TEXTURE_BOUND 0xe0000000
-#define COP_MULTI_TEXTURE_ADVANCED 0x20000000
-#define COP_MULTI_MASK 0xf0000000
-
-#define COP_DEPTH_8 0x00000000
-#define COP_DEPTH_16 0x00000001
-#define COP_DEPTH_24_32 0x00000002
-#define COP_DEPTH_15 0x00000005
-#define COP_DEPTH_DITHER_DISABLE 0x00000008
-
-
-#define COP_ALPHA_SRC_BLEND_0 0x00000000
-#define COP_ALPHA_SRC_BLEND_1 0x00000001
-#define COP_ALPHA_SRC_BLEND_SRC_C 0x00000002
-#define COP_ALPHA_SRC_BLEND_1_SRC_C 0x00000003
-#define COP_ALPHA_SRC_BLEND_SRC_A 0x00000004
-#define COP_ALPHA_SRC_BLEND_1_SRC_A 0x00000005
-#define COP_ALPHA_SRC_BLEND_DST_A 0x00000006
-#define COP_ALPHA_SRC_BLEND_1_DST_A 0x00000007
-#define COP_ALPHA_SRC_BLEND_DST_C 0x00000008
-#define COP_ALPHA_SRC_BLEND_1_DST_C 0x00000009
-#define COP_ALPHA_SRC_BLEND_SAT 0x0000000A
-#define COP_ALPHA_SRC_BLEND_BG 0x0000000B
-
-#define COP_ALPHA_DST_BLEND_0 0x00000000
-#define COP_ALPHA_DST_BLEND_1 0x00000010
-#define COP_ALPHA_DST_BLEND_SRC_C 0x00000020
-#define COP_ALPHA_DST_BLEND_1_SRC_C 0x00000030
-#define COP_ALPHA_DST_BLEND_SRC_A 0x00000040
-#define COP_ALPHA_DST_BLEND_1_SRC_A 0x00000050
-#define COP_ALPHA_DST_BLEND_DST_A 0x00000060
-#define COP_ALPHA_DST_BLEND_1_DST_A 0x00000070
-#define COP_ALPHA_DST_BLEND_DST_C 0x00000080
-#define COP_ALPHA_DST_BLEND_1_DST_C 0x00000090
-#define COP_ALPHA_DST_BLEND_OTHER 0x000000A0
-
-#define COP_ALPHA_RESULT_ALPHA 0x00100000
-#define COP_ALPHA_DEST_ALPHA 0x00200000
-#define COP_ALPHA_SOURCE_ALPHA 0x00400000
-#define COP_ALPHA_WRITE_ENABLE 0x00800000
-#define COP_ALPHA_TEST_ENABLE 0x01000000
-#define COP_ALPHA_BLEND_ENABLE 0x02000000
-#define COP_ALPHA_DEST_VALUE 0x04000000
-#define COP_ALPHA_SOURCE_VALUE 0x08000000
-
- VOL32 command; /* 0x24 */
-#define COP_OP_NULL 0x00000000
-#define COP_OP_LINE 0x20000000
-#define COP_OP_BLT 0x80000000
-#define COP_OP_TEXT 0x90000000
-#define COP_OP_POLY 0xb0000000
-#define COP_OP_POLY2 0xe0000000
-#define COP_SCL_EXPAND 0x00800000
-#define COP_SCL_OPAQUE 0x00400000
-#define COP_SCL_REVERSE 0x00200000
-#define COP_SCL_MONO_OFF 0x001c0000
-#define COP_LIT_TEXTURE 0x00004000
-#define COP_BILINEAR 0x00002000
-#define COP_OP_ZBUF 0x00000800
-#define COP_OP_ROP 0x00000400
-#define COP_OP_FG 0x00000200
-#define COP_OP_FB 0x00000080
-#define COP_X_REVERSE 0x00000004
-#define COP_CLIP 0x00000001
- VOL32 texture_format; /* 0x28 */
- CARD8 pad2c[0x4]; /* 0x2c */
-
- VOL32 clip_bottom_right; /* 0x30 */
- VOL32 dataIII; /* 0x34 */
- VOL32 dataIV; /* 0x38 */
- CARD8 pad3c[0x8]; /* 0x3c */
-
- VOL32 fg; /* 0x44 */
- VOL32 bg; /* 0x48 */
- CARD8 pad4c[0x4]; /* 0x4c */
-
- VOL32 pattern_fg; /* 0x50 */
- VOL32 pattern_bg; /* 0x54 */
- CARD8 pad58[0xc]; /* 0x58 */
-
- VOL32 status; /* 0x64 */
-#define COP_STATUS_BE_BUSY 0x80000000
-#define COP_STATUS_DPE_BUSY 0x20000000
-#define COP_STATUS_MI_BUSY 0x10000000
-#define COP_STATUS_FIFO_BUSY 0x08000000
-#define COP_STATUS_WB_BUSY 0x00800000
-#define COP_STATUS_Z_FAILED 0x00400000
-#define COP_STATUS_EFFECTIVE 0x00200000
-#define COP_STATUS_LEFT_VIEW 0x00080000
-
- CARD8 pad68[0x4]; /* 0x68 */
-
- VOL32 src_offset; /* 0x6c */
- VOL32 z_offset; /* 0x70 */
- CARD8 pad74[0x4]; /* 0x74 */
-
- VOL32 display_offset; /* 0x78 */
- VOL32 dst_offset; /* 0x7c */
- CARD8 pad80[0x34]; /* 0x80 */
-
- VOL32 semaphore; /* 0xb4 */
-} Cop;
-
-#define TRI_XY(x,y) ((y) << 16 | (x))
-
-typedef struct _pcmciaCardInfo {
- CARD8 *fb;
- Bool HP;
- CARD32 memory;
- CARD8 *cop_base;
- Cop *cop;
- CARD32 *window;
- CARD32 cop_depth;
- CARD32 cop_stride;
-} pcmciaCardInfo;
-
-#define getpcmciaCardInfo(kd) ((pcmciaCardInfo *) ((kd)->card->driver))
-#define pcmciaCardInfo(kd) pcmciaCardInfo *pcmciac = getpcmciaCardInfo(kd)
-
-typedef struct _pcmciaCursor {
- int width, height;
- int xhot, yhot;
- Bool has_cursor;
- CursorPtr pCursor;
- Pixel source, mask;
-} pcmciaCursor;
-
-#define PCMCIA_CURSOR_WIDTH 64
-#define PCMCIA_CURSOR_HEIGHT 64
-
-typedef struct _pcmciaScreenInfo {
- CARD8 *cursor_base;
- CARD8 *screen;
- CARD8 *off_screen;
- int off_screen_size;
- int randr;
- LayerPtr pLayer;
- pcmciaCursor cursor;
-} pcmciaScreenInfo;
-
-#define getpcmciaScreenInfo(kd) ((pcmciaScreenInfo *) ((kd)->screen->driver))
-#define pcmciaScreenInfo(kd) pcmciaScreenInfo *pcmcias = getpcmciaScreenInfo(kd)
-
-Bool
-pcmciaDrawInit (ScreenPtr pScreen);
-
-void
-pcmciaDrawEnable (ScreenPtr pScreen);
-
-void
-pcmciaDrawSync (ScreenPtr pScreen);
-
-void
-pcmciaDrawDisable (ScreenPtr pScreen);
-
-void
-pcmciaDrawFini (ScreenPtr pScreen);
-
-CARD8
-pcmciaReadIndex (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 index);
-
-void
-pcmciaWriteIndex (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 index, CARD8 value);
-
-void
-pcmciaWriteReg (pcmciaCardInfo *pcmciac, CARD16 port, CARD8 value);
-
-Bool
-pcmciaCursorInit (ScreenPtr pScreen);
-
-void
-pcmciaCursorEnable (ScreenPtr pScreen);
-
-void
-pcmciaCursorDisable (ScreenPtr pScreen);
-
-void
-pcmciaCursorFini (ScreenPtr pScreen);
-
-void
-pcmciaRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef);
-
-void
-pcmciaUpdateRotatePacked (ScreenPtr pScreen,
- shadowBufPtr pBuf);
-
-typedef struct _pcmciaDisplayModeRec {
- int Width;
- int Height;
- int Refresh;
- int Clock; /* pixel clock freq */
- int HDisplay; /* horizontal timing */
- int HSyncStart;
- int HSyncEnd;
- int HTotal;
- int HSkew;
- int VDisplay; /* vertical timing */
- int VSyncStart;
- int VSyncEnd;
- int VTotal;
- int VScan;
- int Flags;
-} pcmciaDisplayModeRec, *pcmciaDisplayModePtr;
-
-extern KdCardFuncs pcmciaFuncs;
-
-#endif /* _PCMCIA_H_ */
diff --git a/hw/kdrive/pcmcia/pcmciacurs.c b/hw/kdrive/pcmcia/pcmciacurs.c
deleted file mode 100644
index 21d2d4adb..000000000
--- a/hw/kdrive/pcmcia/pcmciacurs.c
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK.
- *
- * 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 Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Alan Hourihane makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE 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.
- *
- * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "pcmcia.h"
-#include "cursorstr.h"
-
-#define SetupCursor(s) KdScreenPriv(s); \
- pcmciaCardInfo(pScreenPriv); \
- pcmciaScreenInfo(pScreenPriv); \
- pcmciaCursor *pCurPriv = &pcmcias->cursor
-
-static void
-_pcmciaMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CARD8 xlow, xhigh, ylow, yhigh;
- CARD8 xoff, yoff;
-
- x -= pCurPriv->xhot;
- xoff = 0;
- if (x < 0)
- {
- xoff = -x;
- x = 0;
- }
- y -= pCurPriv->yhot;
- yoff = 0;
- if (y < 0)
- {
- yoff = -y;
- y = 0;
- }
-
- /* This is the recommended order to move the cursor */
- if (pcmciac->HP) {
- xlow = (CARD8) x;
- xhigh = (CARD8) (x >> 8);
- ylow = (CARD8) y;
- yhigh = (CARD8) (y >> 8);
- pcmciaWriteIndex (pcmciac, 0x3d4, 0x40, xlow);
- pcmciaWriteIndex (pcmciac, 0x3d4, 0x41, xhigh);
- pcmciaWriteIndex (pcmciac, 0x3d4, 0x42, ylow);
- pcmciaWriteIndex (pcmciac, 0x3d4, 0x43, yhigh);
- pcmciaWriteIndex (pcmciac, 0x3d4, 0x46, xoff);
- pcmciaWriteIndex (pcmciac, 0x3d4, 0x47, yoff);
- } else {
- x >>= 3;
- y >>= 3;
- xlow = (CARD8) x;
- xhigh = (CARD8) (x >> 8);
- ylow = (CARD8) y;
- yhigh = (CARD8) (y >> 8);
- /* Don't be alarmed, yes the upper 3bits of the index are correct */
- pcmciaWriteIndex (pcmciac, 0x3c4, 0x10 | xhigh << 5, xlow);
- pcmciaWriteIndex (pcmciac, 0x3c4, 0x11 | yhigh << 5, ylow);
- }
-}
-
-static void
-pcmciaMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor (pScreen);
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- _pcmciaMoveCursor (pScreen, x, y);
-}
-
-static void
-pcmciaAllocCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
-
- KdAllocateCursorPixels (pScreen, 0, pCursor,
- &pCurPriv->source, &pCurPriv->mask);
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 4:
- pCurPriv->source |= pCurPriv->source << 4;
- pCurPriv->mask |= pCurPriv->mask << 4;
- case 8:
- pCurPriv->source |= pCurPriv->source << 8;
- pCurPriv->mask |= pCurPriv->mask << 8;
- case 16:
- pCurPriv->source |= pCurPriv->source << 16;
- pCurPriv->mask |= pCurPriv->mask << 16;
- }
-}
-
-static void
-pcmciaSetCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CARD32 fg, bg;
-
- fg = pCurPriv->source;
- bg = pCurPriv->mask;
-
- if (pcmciac->HP) {
- /*
- * This trident chip uses the palette for it's cursor colors - ouch!
- * We enforce it to always stay the black/white colors as we don't
- * want it to muck with the overscan color. Tough. Use softCursor
- * if you want to change cursor colors.
- */
- pcmciaWriteReg (pcmciac, 0x3c8, 0xff); /* DAC 0 */
- pcmciaWriteReg (pcmciac, 0x3c9, 0x00);
- pcmciaWriteReg (pcmciac, 0x3c9, 0x00);
- pcmciaWriteReg (pcmciac, 0x3c9, 0x00);
- pcmciaWriteReg (pcmciac, 0x3c8, 0x00); /* DAC 255 */
- pcmciaWriteReg (pcmciac, 0x3c9, 0x3f);
- pcmciaWriteReg (pcmciac, 0x3c9, 0x3f);
- pcmciaWriteReg (pcmciac, 0x3c9, 0x3f);
- } else {
- CARD8 temp;
- temp = pcmciaReadIndex(pcmciac, 0x3c4, 0x12);
- pcmciaWriteIndex (pcmciac, 0x3c4, 0x12, (temp & 0xFE) | 0x02);
-
- pcmciaWriteReg (pcmciac, 0x3c8, 0x00); /* DAC 256 */
- pcmciaWriteReg (pcmciac, 0x3c9, fg);
- pcmciaWriteReg (pcmciac, 0x3c9, fg >> 8);
- pcmciaWriteReg (pcmciac, 0x3c9, fg >> 16);
- pcmciaWriteReg (pcmciac, 0x3c8, 0x00); /* DAC 257 */
- pcmciaWriteReg (pcmciac, 0x3c9, bg);
- pcmciaWriteReg (pcmciac, 0x3c9, bg >> 8);
- pcmciaWriteReg (pcmciac, 0x3c9, bg >> 16);
-
- pcmciaWriteIndex (pcmciac, 0x3c4, 0x12, temp);
- }
-}
-
-void
-pcmciaRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- xColorItem sourceColor, maskColor;
-
- if (!pCurPriv->has_cursor || !pCursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pdef)
- {
- while (ndef)
- {
- if (pdef->pixel == pCurPriv->source ||
- pdef->pixel == pCurPriv->mask)
- break;
- ndef--;
- }
- if (!ndef)
- return;
- }
- pcmciaAllocCursorColors (pScreen);
- pcmciaSetCursorColors (pScreen);
-}
-
-#define InvertBits32(v) { \
- v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \
- v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \
- v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \
-}
-
-static void
-pcmciaLoadCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- int w, h;
- CARD8 *ram;
- CARD32 *msk, *mskLine, *src, *srcLine;
- int i, j;
- int cursor_address;
- int lwsrc;
- unsigned char ramdac_control_;
- CARD32 offset;
-
- /*
- * Allocate new colors
- */
- pcmciaAllocCursorColors (pScreen);
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- /*
- * Stick new image into cursor memory
- */
- if (pcmciac->HP) {
- ram = (CARD8 *) pcmcias->cursor_base;
- } else {
- /* The last bank */
- ram = (CARD8 *) pcmciac->fb;
- pcmciaWriteIndex (pcmciac, 0x3ce, 0x09, 0x7f);
- pcmciaWriteIndex (pcmciac, 0x3ce, 0x0A, 0x7f);
- }
-
- mskLine = (CARD32 *) bits->mask;
- srcLine = (CARD32 *) bits->source;
-
- h = bits->height;
- if (h > PCMCIA_CURSOR_HEIGHT)
- h = PCMCIA_CURSOR_HEIGHT;
-
- lwsrc = BitmapBytePad(bits->width) / 4;
-
- for (i = 0; i < PCMCIA_CURSOR_HEIGHT; i++) {
- msk = mskLine;
- src = srcLine;
- mskLine += lwsrc;
- srcLine += lwsrc;
- for (j = 0; j < PCMCIA_CURSOR_WIDTH / 32; j++) {
-
- CARD32 m, s;
-
- if (i < h && j < lwsrc)
- {
- m = *msk++;
- s = *src++;
- InvertBits32(m);
- InvertBits32(s);
- }
- else
- {
- m = 0;
- s = 0;
- }
-
- /* Do 8bit access */
- *ram++ = (m & 0xff);
- *ram++ = (m & 0xff00) >> 8;
- *ram++ = (m & 0xff0000) >> 16;
- *ram++ = (m & 0xff000000) >> 24;
- *ram++ = (s & 0xff);
- *ram++ = (s & 0xff00) >> 8;
- *ram++ = (s & 0xff0000) >> 16;
- *ram++ = (s & 0xff000000) >> 24;
- }
- }
-
- /* Set address for cursor bits */
- if (pcmciac->HP) {
- offset = pcmcias->cursor_base - (CARD8 *) pcmcias->screen;
- offset >>= 10;
- pcmciaWriteIndex (pcmciac, 0x3d4, 0x44, (CARD8) (offset & 0xff));
- pcmciaWriteIndex (pcmciac, 0x3d4, 0x45, (CARD8) (offset >> 8));
- } else {
- pcmciaWriteIndex (pcmciac, 0x3c4, 0x13, 15); /* ?? */
- }
-
- /* Set new color */
- pcmciaSetCursorColors (pScreen);
-
- /* Enable the cursor */
- if (pcmciac->HP)
- pcmciaWriteIndex (pcmciac, 0x3d4, 0x50, 0xc1);
- else
- pcmciaWriteIndex (pcmciac, 0x3c4, 0x12, 0x05);
-
- /* Move to new position */
- pcmciaMoveCursor (pScreen, x, y);
-}
-
-static void
-pcmciaUnloadCursor (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- /* Disable cursor */
- if (pcmciac->HP)
- pcmciaWriteIndex (pcmciac, 0x3d4, 0x50, 0);
- else
- pcmciaWriteIndex (pcmciac, 0x3c4, 0x12, 0);
-}
-
-static Bool
-pcmciaRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- SetupCursor(pScreen);
-
- if (!pScreenPriv->enabled)
- return TRUE;
-
- /* miRecolorCursor does this */
- if (pCurPriv->pCursor == pCursor)
- {
- if (pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- pcmciaLoadCursor (pScreen, x, y);
- }
- }
- return TRUE;
-}
-
-static Bool
-pcmciaUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- return TRUE;
-}
-
-static void
-pcmciaSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
-{
- SetupCursor(pScreen);
-
- pCurPriv->pCursor = pCursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCursor)
- pcmciaLoadCursor (pScreen, x, y);
- else
- pcmciaUnloadCursor (pScreen);
-}
-
-miPointerSpriteFuncRec pcmciaPointerSpriteFuncs = {
- pcmciaRealizeCursor,
- pcmciaUnrealizeCursor,
- pcmciaSetCursor,
- pcmciaMoveCursor,
-};
-
-static void
-pcmciaQueryBestSize (int class,
- unsigned short *pwidth, unsigned short *pheight,
- ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- switch (class)
- {
- case CursorShape:
- if (*pwidth > pCurPriv->width)
- *pwidth = pCurPriv->width;
- if (*pheight > pCurPriv->height)
- *pheight = pCurPriv->height;
- if (*pwidth > pScreen->width)
- *pwidth = pScreen->width;
- if (*pheight > pScreen->height)
- *pheight = pScreen->height;
- break;
- default:
- fbQueryBestSize (class, pwidth, pheight, pScreen);
- break;
- }
-}
-
-Bool
-pcmciaCursorInit (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!pcmcias->cursor_base)
- {
- pCurPriv->has_cursor = FALSE;
- return FALSE;
- }
-
- pCurPriv->width = PCMCIA_CURSOR_WIDTH;
- pCurPriv->height= PCMCIA_CURSOR_HEIGHT;
- pScreen->QueryBestSize = pcmciaQueryBestSize;
- miPointerInitialize (pScreen,
- &pcmciaPointerSpriteFuncs,
- &kdPointerScreenFuncs,
- FALSE);
- pCurPriv->has_cursor = TRUE;
- pCurPriv->pCursor = NULL;
- return TRUE;
-}
-
-void
-pcmciaCursorEnable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- pcmciaLoadCursor (pScreen, x, y);
- }
- else
- pcmciaUnloadCursor (pScreen);
- }
-}
-
-void
-pcmciaCursorDisable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- pcmciaUnloadCursor (pScreen);
- }
- }
-}
-
-void
-pcmciaCursorFini (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- pCurPriv->pCursor = NULL;
-}
diff --git a/hw/kdrive/pcmcia/pcmciarotate.c b/hw/kdrive/pcmcia/pcmciarotate.c
deleted file mode 100644
index e5dc1cb41..000000000
--- a/hw/kdrive/pcmcia/pcmciarotate.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "windowstr.h"
-#include "font.h"
-#include "dixfontstr.h"
-#include "fontstruct.h"
-#include "mi.h"
-#include "regionstr.h"
-#include "globals.h"
-#include "gcstruct.h"
-#include "shadow.h"
-#include "fb.h"
-
-/*
- * These indicate which way the source (shadow) is scanned when
- * walking the screen in a particular direction
- */
-
-#define LEFT_TO_RIGHT 1
-#define RIGHT_TO_LEFT -1
-#define TOP_TO_BOTTOM 2
-#define BOTTOM_TO_TOP -2
-
-typedef CARD16 PcBits;
-typedef INT32 PcStride;
-
-#define PC_SHIFT 4
-#define PC_UNIT (1 << PC_SHIFT)
-#define PC_HALFUNIT (1 << (PC_SHIFT-1))
-#define PC_MASK (PC_UNIT - 1)
-#define PC_ALLONES ((PcBits) -1)
-
-#define PcScrRight(x,b) FbScrRight(x,b)
-#define PcScrLeft(x,b) FbScrLeft(x,b)
-#define PcBitsMask(x,w) (PcScrRight(PC_ALLONES,(x) & PC_MASK) & \
- PcScrLeft(PC_ALLONES,(PC_UNIT - ((x) + (w))) & PC_MASK))
-
-#define pcGetDrawable(pDrawable, pointer, stride, bpp, xoff, yoff) { \
- PixmapPtr _pPix; \
- if ((pDrawable)->type != DRAWABLE_PIXMAP) \
- _pPix = fbGetWindowPixmap(pDrawable); \
- else \
- _pPix = (PixmapPtr) (pDrawable); \
- (pointer) = (PcBits *) _pPix->devPrivate.ptr; \
- (stride) = ((int) _pPix->devKind) / sizeof (PcBits); \
- (bpp) = _pPix->drawable.bitsPerPixel; \
- (xoff) = 0; \
- (yoff) = 0; \
-}
-
-void
-pcmciaUpdateRotatePacked (ScreenPtr pScreen,
- shadowBufPtr pBuf)
-{
- RegionPtr damage = &pBuf->damage;
- PixmapPtr pShadow = pBuf->pPixmap;
- int nbox = REGION_NUM_RECTS (damage);
- BoxPtr pbox = REGION_RECTS (damage);
- PcBits *shaBits;
- PcStride shaStride;
- int shaBpp;
- int shaXoff, shaYoff;
- int box_x1, box_x2, box_y1, box_y2;
- int sha_x1, sha_y1;
- int scr_x1, scr_x2, scr_y1, scr_y2, scr_w, scr_h;
- int scr_x, scr_y;
- int w;
- int pixelsPerBits;
- int pixelsMask;
- PcStride shaStepOverY, shaStepDownY, shaStepOverX, shaStepDownX;
- PcBits *shaLine, *sha;
- int shaHeight = pShadow->drawable.height;
- int shaWidth = pShadow->drawable.width;
- PcBits shaMask;
- int shaFirstShift, shaShift;
- int o_x_dir;
- int o_y_dir;
- int x_dir;
- int y_dir;
-
- pcGetDrawable (&pShadow->drawable, shaBits, shaStride, shaBpp, shaXoff, shaYoff);
- pixelsPerBits = (sizeof (PcBits) * 8) / shaBpp;
- pixelsMask = ~(pixelsPerBits - 1);
- shaMask = PcBitsMask (PC_UNIT-shaBpp, shaBpp);
- /*
- * Compute rotation related constants to walk the shadow
- */
- o_x_dir = LEFT_TO_RIGHT;
- o_y_dir = TOP_TO_BOTTOM;
- if (pBuf->randr & SHADOW_REFLECT_X)
- o_x_dir = -o_x_dir;
- if (pBuf->randr & SHADOW_REFLECT_Y)
- o_y_dir = -o_y_dir;
- switch (pBuf->randr & (SHADOW_ROTATE_ALL)) {
- case SHADOW_ROTATE_0: /* upper left shadow -> upper left screen */
- default:
- x_dir = o_x_dir;
- y_dir = o_y_dir;
- break;
- case SHADOW_ROTATE_90: /* upper right shadow -> upper left screen */
- x_dir = o_y_dir;
- y_dir = -o_x_dir;
- break;
- case SHADOW_ROTATE_180: /* lower right shadow -> upper left screen */
- x_dir = -o_x_dir;
- y_dir = -o_y_dir;
- break;
- case SHADOW_ROTATE_270: /* lower left shadow -> upper left screen */
- x_dir = -o_y_dir;
- y_dir = o_x_dir;
- break;
- }
- switch (x_dir) {
- case LEFT_TO_RIGHT:
- shaStepOverX = shaBpp;
- shaStepOverY = 0;
- break;
- case TOP_TO_BOTTOM:
- shaStepOverX = 0;
- shaStepOverY = shaStride;
- break;
- case RIGHT_TO_LEFT:
- shaStepOverX = -shaBpp;
- shaStepOverY = 0;
- break;
- case BOTTOM_TO_TOP:
- shaStepOverX = 0;
- shaStepOverY = -shaStride;
- break;
- }
- switch (y_dir) {
- case TOP_TO_BOTTOM:
- shaStepDownX = 0;
- shaStepDownY = shaStride;
- break;
- case RIGHT_TO_LEFT:
- shaStepDownX = -shaBpp;
- shaStepDownY = 0;
- break;
- case BOTTOM_TO_TOP:
- shaStepDownX = 0;
- shaStepDownY = -shaStride;
- break;
- case LEFT_TO_RIGHT:
- shaStepDownX = shaBpp;
- shaStepDownY = 0;
- break;
- }
-
- while (nbox--)
- {
- box_x1 = pbox->x1;
- box_y1 = pbox->y1;
- box_x2 = pbox->x2;
- box_y2 = pbox->y2;
- pbox++;
-
- /*
- * Compute screen and shadow locations for this box
- */
- switch (x_dir) {
- case LEFT_TO_RIGHT:
- scr_x1 = box_x1 & pixelsMask;
- scr_x2 = (box_x2 + pixelsPerBits - 1) & pixelsMask;
-
- sha_x1 = scr_x1;
- break;
- case TOP_TO_BOTTOM:
- scr_x1 = box_y1 & pixelsMask;
- scr_x2 = (box_y2 + pixelsPerBits - 1) & pixelsMask;
-
- sha_y1 = scr_x1;
- break;
- case RIGHT_TO_LEFT:
- scr_x1 = (shaWidth - box_x2) & pixelsMask;
- scr_x2 = (shaWidth - box_x1 + pixelsPerBits - 1) & pixelsMask;
-
- sha_x1 = (shaWidth - scr_x1 - 1);
- break;
- case BOTTOM_TO_TOP:
- scr_x1 = (shaHeight - box_y2) & pixelsMask;
- scr_x2 = (shaHeight - box_y1 + pixelsPerBits - 1) & pixelsMask;
-
- sha_y1 = (shaHeight - scr_x1 - 1);
- break;
- }
- switch (y_dir) {
- case TOP_TO_BOTTOM:
- scr_y1 = box_y1;
- scr_y2 = box_y2;
-
- sha_y1 = scr_y1;
- break;
- case RIGHT_TO_LEFT:
- scr_y1 = (shaWidth - box_x2);
- scr_y2 = (shaWidth - box_x1);
-
- sha_x1 = box_x2 - 1;
- break;
- case BOTTOM_TO_TOP:
- scr_y1 = shaHeight - box_y2;
- scr_y2 = shaHeight - box_y1;
-
- sha_y1 = box_y2 - 1;
- break;
- case LEFT_TO_RIGHT:
- scr_y1 = box_x1;
- scr_y2 = box_x2;
-
- sha_x1 = box_x1;
- break;
- }
- scr_w = ((scr_x2 - scr_x1) * shaBpp) >> PC_SHIFT;
- scr_h = scr_y2 - scr_y1;
- scr_y = scr_y1;
-
- /* shift amount for first pixel on screen */
- shaFirstShift = PC_UNIT - ((sha_x1 * shaBpp) & PC_MASK) - shaBpp;
-
- /* pointer to shadow data first placed on screen */
- shaLine = (shaBits +
- sha_y1 * shaStride +
- ((sha_x1 * shaBpp) >> PC_SHIFT));
-
- /*
- * Copy the bits, always write across the physical frame buffer
- * to take advantage of write combining.
- */
- while (scr_h--)
- {
- int p;
- PcBits bits;
- PcBits *win;
- int i;
- CARD32 winSize;
-
- sha = shaLine;
- shaShift = shaFirstShift;
- w = scr_w;
- scr_x = scr_x1 * shaBpp >> PC_SHIFT;
-
- while (w)
- {
- /*
- * Map some of this line
- */
- win = (PcBits *) (*pBuf->window) (pScreen,
- scr_y,
- scr_x << 1,
- SHADOW_WINDOW_WRITE,
- &winSize,
- pBuf->closure);
- i = (winSize >> 1);
- if (i > w)
- i = w;
- w -= i;
- scr_x += i;
- /*
- * Copy the portion of the line mapped
- */
- while (i--)
- {
- bits = 0;
- p = pixelsPerBits;
- /*
- * Build one word of output from multiple inputs
- *
- * Note that for 90/270 rotations, this will walk
- * down the shadow hitting each scanline once.
- * This is probably not very efficient.
- */
- while (p--)
- {
- bits = PcScrLeft(bits, shaBpp);
- bits |= PcScrRight (*sha, shaShift) & shaMask;
-
- shaShift -= shaStepOverX;
- if (shaShift >= PC_UNIT)
- {
- shaShift -= PC_UNIT;
- sha--;
- }
- else if (shaShift < 0)
- {
- shaShift += PC_UNIT;
- sha++;
- }
- sha += shaStepOverY;
- }
- *win++ = bits;
- }
- }
- scr_y++;
- shaFirstShift -= shaStepDownX;
- if (shaFirstShift >= PC_UNIT)
- {
- shaFirstShift -= PC_UNIT;
- shaLine--;
- }
- else if (shaFirstShift < 0)
- {
- shaFirstShift += PC_UNIT;
- shaLine++;
- }
- shaLine += shaStepDownY;
- }
- }
-}
diff --git a/hw/kdrive/pcmcia/pcmciashadow.c b/hw/kdrive/pcmcia/pcmciashadow.c
deleted file mode 100644
index f578f1bff..000000000
--- a/hw/kdrive/pcmcia/pcmciashadow.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK.
- *
- * 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 Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Alan Hourihane makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE 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.
- *
- * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include <X11/X.h>
-#include "scrnintstr.h"
-#include "windowstr.h"
-#include "font.h"
-#include "dixfontstr.h"
-#include "fontstruct.h"
-#include "mi.h"
-#include "regionstr.h"
-#include "globals.h"
-#include "gcstruct.h"
-#include "shadow.h"
-#include "fb.h"
-
-void
-tridentUpdatePacked (ScreenPtr pScreen,
- shadowBufPtr pBuf)
-{
- RegionPtr damage = &pBuf->damage;
- PixmapPtr pShadow = pBuf->pPixmap;
- shadowScrPriv(pScreen);
- int nbox = REGION_NUM_RECTS (damage);
- BoxPtr pbox = REGION_RECTS (damage);
- FbBits *shaBase, *shaLine, *sha;
- FbStride shaStride;
- int scrBase, scrLine, scr;
- int shaBpp;
- int shaXoff, shaYoff; /* XXX assumed to be zero */
- int x, y, w, h, width;
- int i;
- FbBits *winBase, *win;
- CARD32 winSize;
-
- fbGetDrawable (&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff, shaYoff);
- while (nbox--)
- {
- x = pbox->x1 * shaBpp;
- y = pbox->y1;
- w = (pbox->x2 - pbox->x1) * shaBpp;
- h = pbox->y2 - pbox->y1;
-
- scrLine = (x >> FB_SHIFT);
- shaLine = shaBase + y * shaStride + (x >> FB_SHIFT);
-
- x &= FB_MASK;
- w = (w + x + FB_MASK) >> FB_SHIFT;
-
- while (h--)
- {
- winSize = 0;
- scrBase = 0;
- width = w;
- scr = scrLine;
- sha = shaLine;
- while (width) {
- /* how much remains in this window */
- i = scrBase + winSize - scr;
- if (i <= 0 || scr < scrBase)
- {
- winBase = (FbBits *) (*pBuf->window) (pScreen,
- y,
- scr * sizeof (FbBits),
- SHADOW_WINDOW_WRITE,
- &winSize,
- pBuf->closure);
- if(!winBase)
- return;
- scrBase = scr;
- winSize /= sizeof (FbBits);
- i = winSize;
- }
- win = winBase + (scr - scrBase);
- if (i > width)
- i = width;
- width -= i;
- scr += i;
- {
- CARD16 *sha16 = (CARD16*)sha;
- CARD16 *win16 = (CARD16*)win;
- while (i--)
- {
- *win16++ = *sha16++;
- *win16++ = *sha16++;
- }
- }
- }
- shaLine += shaStride;
- y++;
- }
- pbox++;
- }
-}
-
-void
-cirrusUpdatePacked (ScreenPtr pScreen,
- shadowBufPtr pBuf)
-{
- RegionPtr damage = &pBuf->damage;
- PixmapPtr pShadow = pBuf->pPixmap;
- shadowScrPriv(pScreen);
- int nbox = REGION_NUM_RECTS (damage);
- BoxPtr pbox = REGION_RECTS (damage);
- FbBits *shaBase, *shaLine, *sha;
- FbStride shaStride;
- int scrBase, scrLine, scr;
- int shaBpp;
- int shaXoff, shaYoff; /* XXX assumed to be zero */
- int x, y, w, h, width;
- int i;
- FbBits *winBase, *win;
- CARD32 winSize;
-
- fbGetDrawable (&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff, shaYoff);
- while (nbox--)
- {
- x = pbox->x1 * shaBpp;
- y = pbox->y1;
- w = (pbox->x2 - pbox->x1) * shaBpp;
- h = pbox->y2 - pbox->y1;
-
- scrLine = (x >> FB_SHIFT);
- shaLine = shaBase + y * shaStride + (x >> FB_SHIFT);
-
- x &= FB_MASK;
- w = (w + x + FB_MASK) >> FB_SHIFT;
-
- while (h--)
- {
- winSize = 0;
- scrBase = 0;
- width = w;
- scr = scrLine;
- sha = shaLine;
- while (width) {
- /* how much remains in this window */
- i = scrBase + winSize - scr;
- if (i <= 0 || scr < scrBase)
- {
- winBase = (FbBits *) (*pBuf->window) (pScreen,
- y,
- scr * sizeof (FbBits),
- SHADOW_WINDOW_WRITE,
- &winSize,
- pBuf->closure);
- if(!winBase)
- return;
- scrBase = scr;
- winSize /= sizeof (FbBits);
- i = winSize;
- }
- win = winBase + (scr - scrBase);
- if (i > width)
- i = width;
- width -= i;
- scr += i;
- {
- CARD8 *sha8 = (CARD8*)sha;
- CARD8 *win8 = (CARD8*)win;
- while (i--)
- {
- *win8++ = *sha8++;
- *win8++ = *sha8++;
- *win8++ = *sha8++;
- *win8++ = *sha8++;
- }
- }
- }
- shaLine += shaStride;
- y++;
- }
- pbox++;
- }
-}
diff --git a/hw/kdrive/pcmcia/pcmciastub.c b/hw/kdrive/pcmcia/pcmciastub.c
deleted file mode 100644
index 779ad7f1b..000000000
--- a/hw/kdrive/pcmcia/pcmciastub.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2001 by Alan Hourihane, Sychdyn, North Wales, UK.
- *
- * 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 Alan Hourihane not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Alan Hourihane makes no representations
- * about the suitability of this software for any purpose. It is provided
- * "as is" without express or implied warranty.
- *
- * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ALAN HOURIHANE 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.
- *
- * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk>
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "pcmcia.h"
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
-
- KdCardInfoAdd (&pcmciaFuncs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-extern pcmciaDisplayModeRec pcmciaDefaultModes[];
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- return KdProcessArgument (argc, argv, i);
-}
diff --git a/hw/kdrive/pm2/Makefile.am b/hw/kdrive/pm2/Makefile.am
deleted file mode 100644
index cb28de6cb..000000000
--- a/hw/kdrive/pm2/Makefile.am
+++ /dev/null
@@ -1,37 +0,0 @@
-INCLUDES = \
- @KDRIVE_INCS@ \
- -I$(top_srcdir)/hw/kdrive/vesa \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xpm2
-
-noinst_LIBRARIES = libpm2.a
-
-libpm2_a_SOURCES = \
- glint_regs.h \
- pm2.c \
- pm2_draw.c \
- pm2.h
-
-Xpm2_SOURCES = \
- pm2stub.c
-
-PM2_LIBS = \
- libpm2.a \
- $(top_builddir)/hw/kdrive/vesa/libvesa.a \
- @KDRIVE_LIBS@
-
-if GLX
-Xpm2_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xpm2_LDADD = \
- $(PM2_LIBS) \
- @KDRIVE_LIBS@
-
-Xpm2_DEPENDENCIES = \
- libpm2.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/pm2/glint_regs.h b/hw/kdrive/pm2/glint_regs.h
deleted file mode 100644
index 84f220298..000000000
--- a/hw/kdrive/pm2/glint_regs.h
+++ /dev/null
@@ -1,1370 +0,0 @@
-
-/*
- * glint register file
- *
- * Copyright by Stefan Dirsch, Dirk Hohndel, Alan Hourihane
- * Authors: Alan Hourihane, <alanh@fairlite.demon.co.uk>
- * Dirk Hohndel, <hohndel@suse.de>
- * Stefan Dirsch, <sndirsch@suse.de>
- * Simon P., <sim@suse.de>
- *
- * this work is sponsored by S.u.S.E. GmbH, Fuerth, Elsa GmbH, Aachen and
- * Siemens Nixdorf Informationssysteme
- *
- */
-
-#ifndef _GLINTREG_H_
-#define _GLINTREG_H_
-
-/* The chips we know */
-#define PCI_CHIP_3DLABS_300SX 0x01
-#define PCI_CHIP_3DLABS_500TX 0x02
-#define PCI_CHIP_3DLABS_DELTA 0x03
-#define PCI_CHIP_3DLABS_PERMEDIA 0x04
-#define PCI_CHIP_3DLABS_MX 0x06
-#define PCI_CHIP_3DLABS_PERMEDIA2 0x07
-#define PCI_CHIP_3DLABS_GAMMA 0x08
-#define PCI_CHIP_3DLABS_PERMEDIA2V 0x09
-#define PCI_CHIP_3DLABS_PERMEDIA3 0x0A
-#define PCI_CHIP_3DLABS_PERMEDIA4 0x0C
-#define PCI_CHIP_3DLABS_R4 0x0D
-#define PCI_CHIP_3DLABS_GAMMA2 0x0E
-
-/* The boards we know */
-#define IS_GLORIAXXL ((pGlint->PciInfo->subsysVendor == 0x1048) && \
- (pGlint->PciInfo->subsysCard == 0x0a42))
-
-#define IS_GLORIASYNERGY ((pGlint->PciInfo->subsysVendor == 0x1048) && \
- (pGlint->PciInfo->subsysCard == 0x0a32))
-
-#define IS_GMX2000 ((pGlint->PciInfo->subsysVendor == 0x3d3d) && \
- (pGlint->PciInfo->subsysCard == 0x0106))
-
-#define IS_J2000 ((pGlint->PciInfo->subsysVendor == 0x1097) && \
- (pGlint->PciInfo->subsysCard == 0x3d32))
-
-#define IS_JPRO ((pGlint->PciInfo->subsysVendor == 0x1097) && \
- (pGlint->PciInfo->subsysCard == 0x3db3))
-
-/* COMPAQ OEM VX1 PCI
- * subsys == 0x0121 if VGA is enabled
- * subsys == 0x000a if VGA has never been enabled
- */
-#define IS_PCI_QVX1 (pGlint->PciInfo->subsysVendor == 0x3d3d && \
- ((pGlint->PciInfo->subsysCard == 0x0121) || \
- (pGlint->PciInfo->subsysCard == 0x000a)))
-
-/* COMPAQ OEM VX1 AGP
- * subsys == 0x0144 if VGA is enabled
- * subsys == 0x000c if VGA has never been enabled
- */
-#define IS_AGP_QVX1 (pGlint->PciInfo->subsysVendor == 0x3d3d && \
- ((pGlint->PciInfo->subsysCard == 0x0144) || \
- (pGlint->PciInfo->subsysCard == 0x000c)))
-
-#define IS_QVX1 (IS_PCI_QVX1 || IS_AGP_QVX1)
-
-#define IS_ELSA_SYNERGY ((pGlint->PciInfo->subsysVendor == 0x1048) && \
- (pGlint->PciInfo->subsysCard == 0x0a32))
-
-/* COMPAQ OEM Permedia 2V with VGA disable jumper - 0x13e9 ? */
-#define IS_QPM2V ((pGlint->PciInfo->subsysVendor == 0x13e9) && \
- ((pGlint->PciInfo->subsysCard == 0x0100) || \
- (pGlint->PciInfo->subsysCard == 0x0002)))
-
-/**********************************************
-* GLINT 500TX Configuration Region Registers *
-***********************************************/
-
-/* Device Identification */
-#define CFGVendorId 0x0000
-#define PCI_VENDOR_3DLABS 0x3D3D
-#define PCI_VENDOR_TI 0x104C
-#define CFGDeviceId 0x0002
-
-#define CFGRevisionId 0x08
-#define CFGClassCode 0x09
-#define CFGHeaderType 0x0E
-
-/* Device Control/Status */
-#define CFGCommand 0x04
-#define CFGStatus 0x06
-
-/* Miscellaneous Functions */
-#define CFGBist 0x0f
-#define CFGLatTimer 0x0d
-#define CFGCacheLine 0x0c
-#define CFGMaxLat 0x3f
-#define CFGMinGrant 0x3e
-#define CFGIntPin 0x3d
-#define CFGIntLine 0x3c
-
-/* Base Adresses */
-#define CFGBaseAddr0 0x10
-#define CFGBaseAddr1 0x14
-#define CFGBaseAddr2 0x18
-#define CFGBaseAddr3 0x1C
-#define CFGBaseAddr4 0x20
-#define CFGRomAddr 0x30
-
-
-
-/**********************************
- * GLINT 500TX Region 0 Registers *
- **********************************/
-
-/* Control Status Registers */
-#define ResetStatus 0x0000
-#define IntEnable 0x0008
-#define IntFlags 0x0010
-#define InFIFOSpace 0x0018
-#define OutFIFOWords 0x0020
-#define DMAAddress 0x0028
-#define DMACount 0x0030
-#define ErrorFlags 0x0038
-#define VClkCtl 0x0040
-#define TestRegister 0x0048
-#define Aperture0 0x0050
-#define Aperture1 0x0058
-#define DMAControl 0x0060
-#define FIFODis 0x0068
-
-/* GLINT PerMedia Region 0 additional Registers */
-#define ChipConfig 0x0070
-# define SCLK_SEL_MASK (3 << 10)
-# define SCLK_SEL_MCLK_HALF (3 << 10)
-
-#define ByDMAControl 0x00D8
-
-/* GLINT 500TX LocalBuffer Registers */
-#define LBMemoryCtl 0x1000
-# define LBNumBanksMask 0x00000001
-# define LBNumBanks1 (0)
-# define LBNumBanks2 (1)
-# define LBPageSizeMask 0x00000006
-# define LBPageSize256 (0<<1)
-# define LBPageSize512 (1<<1)
-# define LBPageSize1024 (2<<1)
-# define LBPageSize2048 (3<<1)
-# define LBRASCASLowMask 0x00000018
-# define LBRASCASLow2 (0<<3)
-# define LBRASCASLow3 (1<<3)
-# define LBRASCASLow4 (2<<3)
-# define LBRASCASLow5 (3<<3)
-# define LBRASPrechargeMask 0x00000060
-# define LBRASPrecharge2 (0<<5)
-# define LBRASPrecharge3 (1<<5)
-# define LBRASPrecharge4 (2<<5)
-# define LBRASPrecharge5 (3<<5)
-# define LBCASLowMask 0x00000180
-# define LBCASLow1 (0<<7)
-# define LBCASLow2 (1<<7)
-# define LBCASLow3 (2<<7)
-# define LBCASLow4 (3<<7)
-# define LBPageModeMask 0x00000200
-# define LBPageModeEnabled (0<<9)
-# define LBPageModeDisabled (1<<9)
-# define LBRefreshCountMask 0x0003fc00
-# define LBRefreshCountShift 10
-
-#define LBMemoryEDO 0x1008
-# define LBEDOMask 0x00000001
-# define LBEDODisabled (0)
-# define LBEDOEnabled (1)
-# define LBEDOBankSizeMask 0x0000000e
-# define LBEDOBankSizeDiabled (0<<1)
-# define LBEDOBankSize256K (1<<1)
-# define LBEDOBankSize512K (2<<1)
-# define LBEDOBankSize1M (3<<1)
-# define LBEDOBankSize2M (4<<1)
-# define LBEDOBankSize4M (5<<1)
-# define LBEDOBankSize8M (6<<1)
-# define LBEDOBankSize16M (7<<1)
-# define LBTwoPageDetectorMask 0x00000010
-# define LBSinglePageDetector (0<<4)
-# define LBTwoPageDetector (1<<4)
-
-/* GLINT PerMedia Memory Control Registers */
-#define PMReboot 0x1000
-#define PMRomControl 0x1040
-#define PMBootAddress 0x1080
-#define PMMemConfig 0x10C0
-# define RowCharge8 1 << 10
-# define TimeRCD8 1 << 7
-# define TimeRC8 0x6 << 3
-# define TimeRP8 1
-# define CAS3Latency8 0 << 16
-# define BootAdress8 0x10
-# define NumberBanks8 0x3 << 29
-# define RefreshCount8 0x41 << 21
-# define TimeRASMin8 1 << 13
-# define DeadCycle8 1 << 17
-# define BankDelay8 0 << 18
-# define Burst1Cycle8 1 << 31
-# define SDRAM8 0 << 4
-
-# define RowCharge6 1 << 10
-# define TimeRCD6 1 << 7
-# define TimeRC6 0x6 << 3
-# define TimeRP6 0x2
-# define CAS3Latency6 1 << 16
-# define BootAdress6 0x60
-# define NumberBanks6 0x2 << 29
-# define RefreshCount6 0x41 << 21
-# define TimeRASMin6 1 << 13
-# define DeadCycle6 1 << 17
-# define BankDelay6 0 << 18
-# define Burst1Cycle6 1 << 31
-# define SDRAM6 0 << 4
-
-# define RowCharge4 0 << 10
-# define TimeRCD4 0 << 7
-# define TimeRC4 0x4 << 3
-# define TimeRP4 1
-# define CAS3Latency4 0 << 16
-# define BootAdress4 0x10
-# define NumberBanks4 1 << 29
-# define RefreshCount4 0x30 << 21
-# define TimeRASMin4 1 << 13
-# define DeadCycle4 0 << 17
-# define BankDelay4 0 << 18
-# define Burst1Cycle4 1 << 31
-# define SDRAM4 0 << 4
-
-/* Permedia 2 Control */
-#define MemControl 0x1040
-
-#define PMBypassWriteMask 0x1100
-#define PMFramebufferWriteMask 0x1140
-#define PMCount 0x1180
-
-/* Framebuffer Registers */
-#define FBMemoryCtl 0x1800
-#define FBModeSel 0x1808
-#define FBGCWrMask 0x1810
-#define FBGCColorLower 0x1818
-#define FBTXMemCtl 0x1820
-#define FBWrMaskk 0x1830
-#define FBGCColorUpper 0x1838
-
-/* Core FIFO */
-#define OutputFIFO 0x2000
-
-/* 500TX Internal Video Registers */
-#define VTGHLimit 0x3000
-#define VTGHSyncStart 0x3008
-#define VTGHSyncEnd 0x3010
-#define VTGHBlankEnd 0x3018
-#define VTGVLimit 0x3020
-#define VTGVSyncStart 0x3028
-#define VTGVSyncEnd 0x3030
-#define VTGVBlankEnd 0x3038
-#define VTGHGateStart 0x3040
-#define VTGHGateEnd 0x3048
-#define VTGVGateStart 0x3050
-#define VTGVGateEnd 0x3058
-#define VTGPolarity 0x3060
-#define VTGFrameRowAddr 0x3068
-#define VTGVLineNumber 0x3070
-#define VTGSerialClk 0x3078
-#define VTGModeCtl 0x3080
-
-/* Permedia Video Control Registers */
-#define PMScreenBase 0x3000
-#define PMScreenStride 0x3008
-#define PMHTotal 0x3010
-#define PMHgEnd 0x3018
-#define PMHbEnd 0x3020
-#define PMHsStart 0x3028
-#define PMHsEnd 0x3030
-#define PMVTotal 0x3038
-#define PMVbEnd 0x3040
-#define PMVsStart 0x3048
-#define PMVsEnd 0x3050
-#define PMVideoControl 0x3058
-#define PMInterruptLine 0x3060
-#define PMDDCData 0x3068
-# define DataIn (1<<0)
-# define ClkIn (1<<1)
-# define DataOut (1<<2)
-# define ClkOut (1<<3)
-#define PMLineCount 0x3070
-#define PMFifoControl 0x3078
-
-/* Permedia 2 RAMDAC Registers */
-#define PM2DACWriteAddress 0x4000
-#define PM2DACIndexReg 0x4000
-#define PM2DACData 0x4008
-#define PM2DACReadMask 0x4010
-#define PM2DACReadAddress 0x4018
-#define PM2DACCursorColorAddress 0x4020
-#define PM2DACCursorColorData 0x4028
-#define PM2DACIndexData 0x4050
-#define PM2DACCursorData 0x4058
-#define PM2DACCursorXLsb 0x4060
-#define PM2DACCursorXMsb 0x4068
-#define PM2DACCursorYLsb 0x4070
-#define PM2DACCursorYMsb 0x4078
-#define PM2DACCursorControl 0x06
-
-#define PM2DACIndexCMR 0x18
-# define PM2DAC_TRUECOLOR 0x80
-# define PM2DAC_RGB 0x20
-# define PM2DAC_GRAPHICS 0x10
-# define PM2DAC_PACKED 0x09
-# define PM2DAC_8888 0x08
-# define PM2DAC_565 0x06
-# define PM2DAC_4444 0x05
-# define PM2DAC_5551 0x04
-# define PM2DAC_2321 0x03
-# define PM2DAC_2320 0x02
-# define PM2DAC_332 0x01
-# define PM2DAC_CI8 0x00
-
-#define PM2DACIndexMDCR 0x19
-#define PM2DACIndexPalettePage 0x1c
-#define PM2DACIndexMCR 0x1e
-#define PM2DACIndexClockAM 0x20
-#define PM2DACIndexClockAN 0x21
-#define PM2DACIndexClockAP 0x22
-#define PM2DACIndexClockBM 0x23
-#define PM2DACIndexClockBN 0x24
-#define PM2DACIndexClockBP 0x25
-#define PM2DACIndexClockCM 0x26
-#define PM2DACIndexClockCN 0x27
-#define PM2DACIndexClockCP 0x28
-#define PM2DACIndexClockStatus 0x29
-#define PM2DACIndexMemClockM 0x30
-#define PM2DACIndexMemClockN 0x31
-#define PM2DACIndexMemClockP 0x32
-#define PM2DACIndexMemClockStatus 0x33
-#define PM2DACIndexColorKeyControl 0x40
-#define PM2DACIndexColorKeyOverlay 0x41
-#define PM2DACIndexColorKeyRed 0x42
-#define PM2DACIndexColorKeyGreen 0x43
-#define PM2DACIndexColorKeyBlue 0x44
-
-/* Permedia 2V extensions */
-#define PM2VDACRDMiscControl 0x000
-#define PM2VDACRDSyncControl 0x001
-#define PM2VDACRDDACControl 0x002
-#define PM2VDACRDPixelSize 0x003
-#define PM2VDACRDColorFormat 0x004
-#define PM2VDACRDCursorMode 0x005
-#define PM2VDACRDCursorXLow 0x007
-#define PM2VDACRDCursorXHigh 0x008
-#define PM2VDACRDCursorYLow 0x009
-#define PM2VDACRDCursorYHigh 0x00A
-#define PM2VDACRDCursorHotSpotX 0x00B
-#define PM2VDACRDCursorHotSpotY 0x00C
-#define PM2VDACRDOverlayKey 0x00D
-#define PM2VDACRDPan 0x00E
-#define PM2VDACRDSense 0x00F
-#define PM2VDACRDCheckControl 0x018
-#define PM2VDACIndexClockControl 0x200
-#define PM2VDACRDDClk0PreScale 0x201
-#define PM2VDACRDDClk0FeedbackScale 0x202
-#define PM2VDACRDDClk0PostScale 0x203
-#define PM2VDACRDDClk1PreScale 0x204
-#define PM2VDACRDDClk1FeedbackScale 0x205
-#define PM2VDACRDDClk1PostScale 0x206
-#define PM2VDACRDMClkControl 0x20D
-#define PM2VDACRDMClkPreScale 0x20E
-#define PM2VDACRDMClkFeedbackScale 0x20F
-#define PM2VDACRDMClkPostScale 0x210
-#define PM2VDACRDCursorPalette 0x303
-#define PM2VDACRDCursorPattern 0x400
-#define PM2VDACIndexRegLow 0x4020
-#define PM2VDACIndexRegHigh 0x4028
-#define PM2VDACIndexData 0x4030
-
-#define PM2VDACRDIndexControl 0x4038
-/* Permedia 2 Video Streams Unit Registers */
-# define VSBIntFlag (1<<8)
-# define VSAIntFlag (1<<9)
-
-#define VSConfiguration 0x5800
-# define VS_UnitMode_ROM 0
-# define VS_UnitMode_AB8 3
-# define VS_UnitMode_Mask 7
-# define VS_GPBusMode_A (1<<3)
-# define VS_HRefPolarityA (1<<9)
-# define VS_VRefPolarityA (1<<10)
-# define VS_VActivePolarityA (1<<11)
-# define VS_UseFieldA (1<<12)
-# define VS_FieldPolarityA (1<<13)
-# define VS_FieldEdgeA (1<<14)
-# define VS_VActiveVBIA (1<<15)
-# define VS_InterlaceA (1<<16)
-# define VS_ReverseDataA (1<<17)
-# define VS_HRefPolarityB (1<<18)
-# define VS_VRefPolarityB (1<<19)
-# define VS_VActivePolarityB (1<<20)
-# define VS_UseFieldB (1<<21)
-# define VS_FieldPolarityB (1<<22)
-# define VS_FieldEdgeB (1<<23)
-# define VS_VActiveVBIB (1<<24)
-# define VS_InterlaceB (1<<25)
-# define VS_ColorSpaceB_RGB (1<<26)
-# define VS_ReverseDataB (1<<27)
-# define VS_DoubleEdgeB (1<<28)
-
-#define VSStatus 0x5808
-# define VS_FieldOne0A (1<<9)
-# define VS_FieldOne1A (1<<10)
-# define VS_FieldOne2A (1<<11)
-# define VS_InvalidInterlaceA (1<<12)
-# define VS_FieldOne0B (1<<17)
-# define VS_FieldOne1B (1<<18)
-# define VS_FieldOne2B (1<<19)
-# define VS_InvalidInterlaceB (1<<20)
-
-#define VSSerialBusControl 0x5810
-
-#define VSABase 0x5900
-# define VSA_Video (1<<0)
-# define VSA_VBI (1<<1)
-# define VSA_BufferCtl (1<<2)
-# define VSA_MirrorX (1<<7)
-# define VSA_MirrorY (1<<8)
-# define VSA_Discard_None (0<<9)
-# define VSA_Discard_FieldOne (1<<9)
-# define VSA_Discard_FieldTwo (2<<9)
-# define VSA_CombineFields (1<<11)
-# define VSA_LockToStreamB (1<<12)
-
-#define VSBBase 0x5A00
-# define VSB_Video (1<<0)
-# define VSB_VBI (1<<1)
-# define VSB_BufferCtl (1<<2)
-# define VSB_CombineFields (1<<3)
-# define VSB_RGBOrder (1<<11)
-# define VSB_GammaCorrect (1<<12)
-# define VSB_LockToStreamA (1<<13)
-
-#define VSControl 0x0000
-#define VSInterrupt 0x0008
-#define VSCurrentLine 0x0010
-#define VSVideoAddressHost 0x0018
-#define VSVideoAddressIndex 0x0020
-#define VSVideoAddress0 0x0028
-#define VSVideoAddress1 0x0030
-#define VSVideoAddress2 0x0038
-#define VSVideoStride 0x0040
-#define VSVideoStartLine 0x0048
-#define VSVideoEndLine 0x0050
-#define VSVideoStartData 0x0058
-#define VSVideoEndData 0x0060
-#define VSVBIAddressHost 0x0068
-#define VSVBIAddressIndex 0x0070
-#define VSVBIAddress0 0x0078
-#define VSVBIAddress1 0x0080
-#define VSVBIAddress2 0x0088
-#define VSVBIStride 0x0090
-#define VSVBIStartLine 0x0098
-#define VSVBIEndLine 0x00A0
-#define VSVBIStartData 0x00A8
-#define VSVBIEndData 0x00B0
-#define VSFifoControl 0x00B8
-
-/**********************************
- * GLINT Delta Region 0 Registers *
- **********************************/
-
-/* Control Status Registers */
-#define DResetStatus 0x0800
-#define DIntEnable 0x0808
-#define DIntFlags 0x0810
-#define DErrorFlags 0x0838
-#define DTestRegister 0x0848
-#define DFIFODis 0x0868
-
-
-
-/**********************************
- * GLINT Gamma Region 0 Registers *
- **********************************/
-
-/* Control Status Registers */
-#define GInFIFOSpace 0x0018
-#define GDMAAddress 0x0028
-#define GDMACount 0x0030
-#define GDMAControl 0x0060
-#define GOutDMA 0x0080
-#define GOutDMACount 0x0088
-#define GResetStatus 0x0800
-#define GIntEnable 0x0808
-#define GIntFlags 0x0810
-#define GErrorFlags 0x0838
-#define GTestRegister 0x0848
-#define GFIFODis 0x0868
-
-#define GChipConfig 0x0870
-# define GChipAGPCapable 1 << 0
-# define GChipAGPSideband 1 << 1
-# define GChipMultiGLINTApMask 3 << 19
-# define GChipMultiGLINTAp_0M 0 << 19
-# define GChipMultiGLINTAp_16M 1 << 19
-# define GChipMultiGLINTAp_32M 2 << 19
-# define GChipMultiGLINTAp_64M 3 << 19
-
-#define GCSRAperture 0x0878
-# define GCSRSecondaryGLINTMapEn 1 << 0
-# define GCSRBitSwap 1 << 1
-
-#define GPageTableAddr 0x0c00
-#define GPageTableLength 0x0c08
-#define GDelayTimer 0x0c38
-#define GCommandMode 0x0c40
-#define GCommandIntEnable 0x0c48
-#define GCommandIntFlags 0x0c50
-#define GCommandErrorFlags 0x0c58
-#define GCommandStatus 0x0c60
-#define GCommandFaultingAddr 0x0c68
-#define GVertexFaultingAddr 0x0c70
-#define GWriteFaultingAddr 0x0c88
-#define GFeedbackSelectCount 0x0c98
-#define GGammaProcessorMode 0x0cb8
-#define GVGAShadow 0x0d00
-#define GMultGLINTAperture 0x0d08
-#define GMultGLINT1 0x0d10
-#define GMultGLINT2 0x0d18
-
-/************************
- * GLINT Core Registers *
- ************************/
-
-#define GLINT_TAG(major,offset) (((major) << 7) | ((offset) << 3))
-#define GLINT_TAG_ADDR(major,offset) (0x8000 | GLINT_TAG((major),(offset)))
-
-#define UNIT_DISABLE 0
-#define UNIT_ENABLE 1
-
-#define StartXDom GLINT_TAG_ADDR(0x00,0x00)
-#define dXDom GLINT_TAG_ADDR(0x00,0x01)
-#define StartXSub GLINT_TAG_ADDR(0x00,0x02)
-#define dXSub GLINT_TAG_ADDR(0x00,0x03)
-#define StartY GLINT_TAG_ADDR(0x00,0x04)
-#define dY GLINT_TAG_ADDR(0x00,0x05)
-#define GLINTCount GLINT_TAG_ADDR(0x00,0x06)
-
-#define Render GLINT_TAG_ADDR(0x00,0x07)
-# define AreaStippleEnable 0x00001
-# define LineStippleEnable 0x00002
-# define ResetLineStipple 0x00004
-# define FastFillEnable 0x00008
-# define PrimitiveLine 0
-# define PrimitiveTrapezoid 0x00040
-# define PrimitivePoint 0x00080
-# define PrimitiveRectangle 0x000C0
-# define AntialiasEnable 0x00100
-# define AntialiasingQuality 0x00200
-# define UsePointTable 0x00400
-# define SyncOnBitMask 0x00800
-# define SyncOnHostData 0x01000
-# define TextureEnable 0x02000
-# define FogEnable 0x04000
-# define CoverageEnable 0x08000
-# define SubPixelCorrectionEnable 0x10000
-# define SpanOperation 0x40000
-# define XPositive 1<<21
-# define YPositive 1<<22
-
-#define ContinueNewLine GLINT_TAG_ADDR(0x00,0x08)
-#define ContinueNewDom GLINT_TAG_ADDR(0x00,0x09)
-#define ContinueNewSub GLINT_TAG_ADDR(0x00,0x0a)
-#define Continue GLINT_TAG_ADDR(0x00,0x0b)
-#define FlushSpan GLINT_TAG_ADDR(0x00,0x0c)
-#define BitMaskPattern GLINT_TAG_ADDR(0x00,0x0d)
-
-#define PointTable0 GLINT_TAG_ADDR(0x01,0x00)
-#define PointTable1 GLINT_TAG_ADDR(0x01,0x01)
-#define PointTable2 GLINT_TAG_ADDR(0x01,0x02)
-#define PointTable3 GLINT_TAG_ADDR(0x01,0x03)
-
-#define RasterizerMode GLINT_TAG_ADDR(0x01,0x04)
-#define RMMultiGLINT 1<<17
-#define BitMaskPackingEachScanline 1<<9
-#define ForceBackgroundColor 1<<6
-#define InvertBitMask 1<<1
-
-#define YLimits GLINT_TAG_ADDR(0x01,0x05)
-#define ScanLineOwnership GLINT_TAG_ADDR(0x01,0x06)
-#define WaitForCompletion GLINT_TAG_ADDR(0x01,0x07)
-#define PixelSize GLINT_TAG_ADDR(0x01,0x08)
-#define XLimits GLINT_TAG_ADDR(0x01,0x09) /* PM only */
-
-#define RectangleOrigin GLINT_TAG_ADDR(0x01,0x0A) /* PM2 only */
-#define RectangleSize GLINT_TAG_ADDR(0x01,0x0B) /* PM2 only */
-
-#define PackedDataLimits GLINT_TAG_ADDR(0x02,0x0a) /* PM only */
-
-#define ScissorMode GLINT_TAG_ADDR(0x03,0x00)
-# define SCI_USER 0x01
-# define SCI_SCREEN 0x02
-# define SCI_USERANDSCREEN 0x03
-
-#define ScissorMinXY GLINT_TAG_ADDR(0x03,0x01)
-#define ScissorMaxXY GLINT_TAG_ADDR(0x03,0x02)
-#define ScreenSize GLINT_TAG_ADDR(0x03,0x03)
-#define AreaStippleMode GLINT_TAG_ADDR(0x03,0x04)
- /* 0: */
- /* NoMirrorY */
- /* NoMirrorX */
- /* NoInvertPattern */
- /* YAddress_1bit */
- /* XAddress_1bit */
- /* UNIT_DISABLE */
-
-# define ASM_XAddress_2bit 1 << 1
-# define ASM_XAddress_3bit 2 << 1
-# define ASM_XAddress_4bit 3 << 1
-# define ASM_XAddress_5bit 4 << 1
-# define ASM_YAddress_2bit 1 << 4
-# define ASM_YAddress_3bit 2 << 4
-# define ASM_YAddress_4bit 3 << 4
-# define ASM_YAddress_5bit 4 << 4
-# define ASM_InvertPattern 1 << 17
-# define ASM_MirrorX 1 << 18
-# define ASM_MirrorY 1 << 19
-
-#define LineStippleMode GLINT_TAG_ADDR(0x03,0x05)
-#define LoadLineStippleCounters GLINT_TAG_ADDR(0x03,0x06)
-#define UpdateLineStippleCounters GLINT_TAG_ADDR(0x03,0x07)
-#define SaveLineStippleState GLINT_TAG_ADDR(0x03,0x08)
-#define WindowOrigin GLINT_TAG_ADDR(0x03,0x09)
-
-#define AreaStipplePattern0 GLINT_TAG_ADDR(0x04,0x00)
-#define AreaStipplePattern1 GLINT_TAG_ADDR(0x04,0x01)
-#define AreaStipplePattern2 GLINT_TAG_ADDR(0x04,0x02)
-#define AreaStipplePattern3 GLINT_TAG_ADDR(0x04,0x03)
-#define AreaStipplePattern4 GLINT_TAG_ADDR(0x04,0x04)
-#define AreaStipplePattern5 GLINT_TAG_ADDR(0x04,0x05)
-#define AreaStipplePattern6 GLINT_TAG_ADDR(0x04,0x06)
-#define AreaStipplePattern7 GLINT_TAG_ADDR(0x04,0x07)
-
-#define TextureAddressMode GLINT_TAG_ADDR(0x07,0x00)
-#define SStart GLINT_TAG_ADDR(0x07,0x01)
-#define dSdx GLINT_TAG_ADDR(0x07,0x02)
-#define dSdyDom GLINT_TAG_ADDR(0x07,0x03)
-#define TStart GLINT_TAG_ADDR(0x07,0x04)
-#define dTdx GLINT_TAG_ADDR(0x07,0x05)
-#define dTdyDom GLINT_TAG_ADDR(0x07,0x06)
-#define QStart GLINT_TAG_ADDR(0x07,0x07)
-#define dQdx GLINT_TAG_ADDR(0x07,0x08)
-#define dQdyDom GLINT_TAG_ADDR(0x07,0x09)
-#define LOD GLINT_TAG_ADDR(0x07,0x0A)
-#define dSdy GLINT_TAG_ADDR(0x07,0x0B)
-#define dTdy GLINT_TAG_ADDR(0x07,0x0C)
-#define dQdy GLINT_TAG_ADDR(0x07,0x0D)
-
-#define TextureReadMode GLINT_TAG_ADDR(0x09,0x00)
-
-#define TextureFormat GLINT_TAG_ADDR(0x09,0x01)
-# define Texture_4_Components 3 << 3
-# define Texture_Texel 0
-
-#define TextureCacheControl GLINT_TAG_ADDR(0x09,0x02)
-# define TextureCacheControlEnable 2
-# define TextureCacheControlInvalidate 1
-
-#define GLINTBorderColor GLINT_TAG_ADDR(0x09,0x05)
-
-#define TexelLUTIndex GLINT_TAG_ADDR(0x09,0x08)
-#define TexelLUTData GLINT_TAG_ADDR(0x09,0x09)
-#define TexelLUTAddress GLINT_TAG_ADDR(0x09,0x0A)
-#define TexelLUTTransfer GLINT_TAG_ADDR(0x09,0x0B)
-
-#define TextureFilterMode GLINT_TAG_ADDR(0x09,0x0C)
-
-#define TextureChromaUpper GLINT_TAG_ADDR(0x09,0x0D)
-#define TextureChromaLower GLINT_TAG_ADDR(0x09,0x0E)
-
-#define TxBaseAddr0 GLINT_TAG_ADDR(0x0A,0x00)
-#define TxBaseAddr1 GLINT_TAG_ADDR(0x0A,0x01)
-#define TxBaseAddr2 GLINT_TAG_ADDR(0x0A,0x02)
-#define TxBaseAddr3 GLINT_TAG_ADDR(0x0A,0x03)
-#define TxBaseAddr4 GLINT_TAG_ADDR(0x0A,0x04)
-#define TxBaseAddr5 GLINT_TAG_ADDR(0x0A,0x05)
-#define TxBaseAddr6 GLINT_TAG_ADDR(0x0A,0x06)
-#define TxBaseAddr7 GLINT_TAG_ADDR(0x0A,0x07)
-#define TxBaseAddr8 GLINT_TAG_ADDR(0x0A,0x08)
-#define TxBaseAddr9 GLINT_TAG_ADDR(0x0A,0x09)
-#define TxBaseAddr10 GLINT_TAG_ADDR(0x0A,0x0A)
-#define TxBaseAddr11 GLINT_TAG_ADDR(0x0A,0x0B)
-
-#define PMTextureBaseAddress GLINT_TAG_ADDR(0x0b,0x00)
-#define PMTextureMapFormat GLINT_TAG_ADDR(0x0b,0x01)
-#define PMTextureDataFormat GLINT_TAG_ADDR(0x0b,0x02)
-
-#define Texel0 GLINT_TAG_ADDR(0x0c,0x00)
-#define Texel1 GLINT_TAG_ADDR(0x0c,0x01)
-#define Texel2 GLINT_TAG_ADDR(0x0c,0x02)
-#define Texel3 GLINT_TAG_ADDR(0x0c,0x03)
-#define Texel4 GLINT_TAG_ADDR(0x0c,0x04)
-#define Texel5 GLINT_TAG_ADDR(0x0c,0x05)
-#define Texel6 GLINT_TAG_ADDR(0x0c,0x06)
-#define Texel7 GLINT_TAG_ADDR(0x0c,0x07)
-
-#define Interp0 GLINT_TAG_ADDR(0x0c,0x08)
-#define Interp1 GLINT_TAG_ADDR(0x0c,0x09)
-#define Interp2 GLINT_TAG_ADDR(0x0c,0x0a)
-#define Interp3 GLINT_TAG_ADDR(0x0c,0x0b)
-#define Interp4 GLINT_TAG_ADDR(0x0c,0x0c)
-
-#define TextureFilter GLINT_TAG_ADDR(0x0c,0x0d)
-#define PMTextureReadMode GLINT_TAG_ADDR(0x0c,0x0e)
-#define TexelLUTMode GLINT_TAG_ADDR(0x0c,0x0f)
-
-#define TextureColorMode GLINT_TAG_ADDR(0x0d,0x00)
-# define TextureTypeOpenGL 0
-# define TextureTypeApple 1 << 4
-# define TextureKsDDA 1 << 5 /* only Apple-Mode */
-# define TextureKdDDA 1 << 6 /* only Apple-Mode */
-
-#define TextureEnvColor GLINT_TAG_ADDR(0x0d,0x01)
-#define FogMode GLINT_TAG_ADDR(0x0d,0x02)
- /* 0: */
- /* FOG RGBA */
- /* UNIT_DISABLE */
-# define FOG_CI 0x0002
-
-#define FogColor GLINT_TAG_ADDR(0x0d,0x03)
-#define FStart GLINT_TAG_ADDR(0x0d,0x04)
-#define dFdx GLINT_TAG_ADDR(0x0d,0x05)
-#define dFdyDom GLINT_TAG_ADDR(0x0d,0x06)
-#define KsStart GLINT_TAG_ADDR(0x0d,0x09)
-#define dKsdx GLINT_TAG_ADDR(0x0d,0x0a)
-#define dKsdyDom GLINT_TAG_ADDR(0x0d,0x0b)
-#define KdStart GLINT_TAG_ADDR(0x0d,0x0c)
-#define dKdStart GLINT_TAG_ADDR(0x0d,0x0d)
-#define dKddyDom GLINT_TAG_ADDR(0x0d,0x0e)
-
-#define RStart GLINT_TAG_ADDR(0x0f,0x00)
-#define dRdx GLINT_TAG_ADDR(0x0f,0x01)
-#define dRdyDom GLINT_TAG_ADDR(0x0f,0x02)
-#define GStart GLINT_TAG_ADDR(0x0f,0x03)
-#define dGdx GLINT_TAG_ADDR(0x0f,0x04)
-#define dGdyDom GLINT_TAG_ADDR(0x0f,0x05)
-#define BStart GLINT_TAG_ADDR(0x0f,0x06)
-#define dBdx GLINT_TAG_ADDR(0x0f,0x07)
-#define dBdyDom GLINT_TAG_ADDR(0x0f,0x08)
-#define AStart GLINT_TAG_ADDR(0x0f,0x09)
-#define dAdx GLINT_TAG_ADDR(0x0f,0x0a)
-#define dAdyDom GLINT_TAG_ADDR(0x0f,0x0b)
-#define ColorDDAMode GLINT_TAG_ADDR(0x0f,0x0c)
- /* 0:*/
- /* UNIT_DISABLE */
-# define CDDA_FlatShading 0
-# define CDDA_GouraudShading 0x0002
-
-
-#define ConstantColor GLINT_TAG_ADDR(0x0f,0x0d)
-#define GLINTColor GLINT_TAG_ADDR(0x0f,0x0e)
-#define AlphaTestMode GLINT_TAG_ADDR(0x10,0x00)
-#define AntialiasMode GLINT_TAG_ADDR(0x10,0x01)
-#define AlphaBlendMode GLINT_TAG_ADDR(0x10,0x02)
- /* 0: */
- /* SrcZERO */
- /* DstZERO */
- /* ColorFormat8888 */
- /* AlphaBuffer present */
- /* ColorOrderBGR */
- /* TypeOpenGL */
- /* DstFBData */
- /* UNIT_DISABLE */
-
-# define ABM_SrcONE 1 << 1
-# define ABM_SrcDST_COLOR 2 << 1
-# define ABM_SrcONE_MINUS_DST_COLOR 3 << 1
-# define ABM_SrcSRC_ALPHA 4 << 1
-# define ABM_SrcONE_MINUS_SRC_ALPHA 5 << 1
-# define ABM_SrcDST_ALPHA 6 << 1
-# define ABM_SrcONE_MINUS_DST_ALPHA 7 << 1
-# define ABM_SrcSRC_ALPHA_SATURATE 8 << 1
-# define ABM_DstONE 1 << 5
-# define ABM_DstSRC_COLOR 2 << 5
-# define ABM_DstONE_MINUS_SRC_COLOR 3 << 5
-# define ABM_DstSRC_ALPHA 4 << 5
-# define ABM_DstONE_MINUS_SRC_ALPHA 5 << 5
-# define ABM_DstDST_ALPHA 6 << 5
-# define ABM_DstONE_MINUS_DST_ALPHA 7 << 5
-# define ABM_ColorFormat5555 1 << 8
-# define ABM_ColorFormat4444 2 << 8
-# define ABM_ColorFormat4444_Front 3 << 8
-# define ABM_ColorFormat4444_Back 4 << 8
-# define ABM_ColorFormat332_Front 5 << 8
-# define ABM_ColorFormat332_Back 6 << 8
-# define ABM_ColorFormat121_Front 7 << 8
-# define ABM_ColorFormat121_Back 8 << 8
-# define ABM_ColorFormat555_Back 13 << 8
-# define ABM_ColorFormat_CI8 14 << 8
-# define ABM_ColorFormat_CI4 15 << 8
-# define ABM_NoAlphaBuffer 0x1000
-# define ABM_ColorOrderRGB 0x2000
-# define ABM_TypeQuickDraw3D 0x4000
-# define ABM_DstFBSourceData 0x8000
-
-#define DitherMode GLINT_TAG_ADDR(0x10,0x03)
- /* 0: */
- /* ColorOrder BGR */
- /* AlphaDitherDefault */
- /* ColorFormat8888 */
- /* TruncateMode */
- /* DitherDisable */
- /* UNIT_DISABLE */
-
-# define DTM_DitherEnable 1 << 1
-# define DTM_ColorFormat5555 1 << 2
-# define DTM_ColorFormat4444 2 << 2
-# define DTM_ColorFormat4444_Front 3 << 2
-# define DTM_ColorFormat4444_Back 4 << 2
-# define DTM_ColorFormat332_Front 5 << 2
-# define DTM_ColorFormat332_Back 6 << 2
-# define DTM_ColorFormat121_Front 7 << 2
-# define DTM_ColorFormat121_Back 8 << 2
-# define DTM_ColorFormat555_Back 13 << 2
-# define DTM_ColorFormat_CI8 14 << 2
-# define DTM_ColorFormat_CI4 15 << 2
-# define DTM_ColorOrderRGB 1 << 10
-# define DTM_NoAlphaDither 1 << 14
-# define DTM_RoundMode 1 << 15
-
-#define FBSoftwareWriteMask GLINT_TAG_ADDR(0x10,0x04)
-#define LogicalOpMode GLINT_TAG_ADDR(0x10,0x05)
-# define Use_ConstantFBWriteData 0x40
-
-
-#define FBWriteData GLINT_TAG_ADDR(0x10,0x06)
-#define RouterMode GLINT_TAG_ADDR(0x10,0x08)
-# define ROUTER_Depth_Texture 1
-# define ROUTER_Texture_Depth 0
-
-
-#define LBReadMode GLINT_TAG_ADDR(0x11,0x00)
- /* 0: */
- /* SrcNoRead */
- /* DstNoRead */
- /* DataLBDefault */
- /* WinTopLeft */
- /* NoPatch */
- /* ScanlineInterval1 */
-
-# define LBRM_SrcEnable 1 << 9
-# define LBRM_DstEnable 1 << 10
-# define LBRM_DataLBStencil 1 << 16
-# define LBRM_DataLBDepth 2 << 16
-# define LBRM_WinBottomLeft 1 << 18
-# define LBRM_DoPatch 1 << 19
-
-# define LBRM_ScanlineInt2 1 << 20
-# define LBRM_ScanlineInt4 2 << 20
-# define LBRM_ScanlineInt8 3 << 20
-
-
-#define LBReadFormat GLINT_TAG_ADDR(0x11,0x01)
-# define LBRF_DepthWidth15 0x03 /* only permedia */
-# define LBRF_DepthWidth16 0x00
-# define LBRF_DepthWidth24 0x01
-# define LBRF_DepthWidth32 0x02
-
-# define LBRF_StencilWidth0 (0 << 2)
-# define LBRF_StencilWidth4 (1 << 2)
-# define LBRF_StencilWidth8 (2 << 2)
-
-# define LBRF_StencilPos16 (0 << 4)
-# define LBRF_StencilPos20 (1 << 4)
-# define LBRF_StencilPos24 (2 << 4)
-# define LBRF_StencilPos28 (3 << 4)
-# define LBRF_StencilPos32 (4 << 4)
-
-# define LBRF_FrameCount0 (0 << 7)
-# define LBRF_FrameCount4 (1 << 7)
-# define LBRF_FrameCount8 (2 << 7)
-
-# define LBRF_FrameCountPos16 (0 << 9)
-# define LBRF_FrameCountPos20 (1 << 9)
-# define LBRF_FrameCountPos24 (2 << 9)
-# define LBRF_FrameCountPos28 (3 << 9)
-# define LBRF_FrameCountPos32 (4 << 9)
-# define LBRF_FrameCountPos36 (5 << 9)
-# define LBRF_FrameCountPos40 (6 << 9)
-
-# define LBRF_GIDWidth0 (0 << 12)
-# define LBRF_GIDWidth4 (1 << 12)
-
-# define LBRF_GIDPos16 (0 << 13)
-# define LBRF_GIDPos20 (1 << 13)
-# define LBRF_GIDPos24 (2 << 13)
-# define LBRF_GIDPos28 (3 << 13)
-# define LBRF_GIDPos32 (4 << 13)
-# define LBRF_GIDPos36 (5 << 13)
-# define LBRF_GIDPos40 (6 << 13)
-# define LBRF_GIDPos44 (7 << 13)
-# define LBRF_GIDPos48 (8 << 13)
-
-# define LBRF_Compact32 (1 << 17)
-
-
-
-#define LBSourceOffset GLINT_TAG_ADDR(0x11,0x02)
-#define LBStencil GLINT_TAG_ADDR(0x11,0x05)
-#define LBDepth GLINT_TAG_ADDR(0x11,0x06)
-#define LBWindowBase GLINT_TAG_ADDR(0x11,0x07)
-#define LBWriteMode GLINT_TAG_ADDR(0x11,0x08)
-# define LBWM_WriteEnable 0x1
-# define LBWM_UpLoad_LBDepth 0x2
-# define LBWM_UpLoad_LBStencil 0x4
-
-#define LBWriteFormat GLINT_TAG_ADDR(0x11,0x09)
-
-
-#define TextureData GLINT_TAG_ADDR(0x11,0x0d)
-#define TextureDownloadOffset GLINT_TAG_ADDR(0x11,0x0e)
-#define LBWindowOffset GLINT_TAG_ADDR(0x11,0x0f)
-
-#define GLINTWindow GLINT_TAG_ADDR(0x13,0x00)
-# define GWIN_UnitEnable (1 << 0)
-# define GWIN_ForceLBUpdate (1 << 3)
-# define GWIN_LBUpdateSourceREG (1 << 4)
-# define GWIN_LBUpdateSourceLB (0 << 4)
-# define GWIN_StencilFCP (1 << 17)
-# define GWIN_DepthFCP (1 << 18)
-# define GWIN_OverrideWriteFilter (1 << 19)
-# define GWIN_DisableLBUpdate 0x40000 /* ??? is this needed, set by permedia (2) modules */
-
-#define StencilMode GLINT_TAG_ADDR(0x13,0x01)
-#define StencilData GLINT_TAG_ADDR(0x13,0x02)
-#define GLINTStencil GLINT_TAG_ADDR(0x13,0x03)
-#define DepthMode GLINT_TAG_ADDR(0x13,0x04)
- /* 0: */
- /* WriteDisable */
- /* SrcCompFragment */
- /* CompFuncNEVER */
- /* UNIT_DISABLE */
-
-# define DPM_WriteEnable 1 << 1
-# define DPM_SrcCompLBData 1 << 2
-# define DPM_SrcCompDregister 2 << 2
-# define DPM_SrcCompLBSourceData 3 << 2
-# define DPM_CompFuncLESS 1 << 4
-# define DPM_CompFuncEQUAL 2 << 4
-# define DPM_CompFuncLESS_OR_EQ 3 << 4
-# define DPM_CompFuncGREATER 4 << 4
-# define DPM_CompFuncNOT_EQ 5 << 4
-# define DPM_CompFuncGREATER_OR_EQ 6 << 4
-# define DPM_CompFuncALWAYS 7 << 4
-
-#define GLINTDepth GLINT_TAG_ADDR(0x13,0x05)
-#define ZStartU GLINT_TAG_ADDR(0x13,0x06)
-#define ZStartL GLINT_TAG_ADDR(0x13,0x07)
-#define dZdxU GLINT_TAG_ADDR(0x13,0x08)
-#define dZdxL GLINT_TAG_ADDR(0x13,0x09)
-#define dZdyDomU GLINT_TAG_ADDR(0x13,0x0a)
-#define dZdyDomL GLINT_TAG_ADDR(0x13,0x0b)
-#define FastClearDepth GLINT_TAG_ADDR(0x13,0x0c)
-
-#define FBReadMode GLINT_TAG_ADDR(0x15,0x00)
- /* 0: */
- /* SrcNoRead */
- /* DstNoRead */
- /* DataFBDefault */
- /* WinTopLeft */
- /* ScanlineInterval1 */
-
-# define FBRM_SrcEnable 1 << 9
-# define FBRM_DstEnable 1 << 10
-# define FBRM_DataFBColor 1 << 15
-# define FBRM_WinBottomLeft 1 << 16
-# define FBRM_Packed 1 << 19
-# define FBRM_ScanlineInt2 1 << 23
-# define FBRM_ScanlineInt4 2 << 23
-# define FBRM_ScanlineInt8 3 << 23
-
-
-#define FBSourceOffset GLINT_TAG_ADDR(0x15,0x01)
-#define FBPixelOffset GLINT_TAG_ADDR(0x15,0x02)
-#define FBColor GLINT_TAG_ADDR(0x15,0x03)
-#define FBData GLINT_TAG_ADDR(0x15,0x04)
-#define FBSourceData GLINT_TAG_ADDR(0x15,0x05)
-
-#define FBWindowBase GLINT_TAG_ADDR(0x15,0x06)
-#define FBWriteMode GLINT_TAG_ADDR(0x15,0x07)
- /* 0: */
- /* FBWM_NoColorUpload */
- /* FBWM_WriteDisable */
-# define FBWM_WriteEnable 1
-# define FBWM_UploadColor 1 << 3
-# define FBWM_Enable0 1 << 12 /* PM3 */
-
-#define FBHardwareWriteMask GLINT_TAG_ADDR(0x15,0x08)
-#define FBBlockColor GLINT_TAG_ADDR(0x15,0x09)
-#define FBReadPixel GLINT_TAG_ADDR(0x15,0x0a) /* PM */
-#define PatternRamMode GLINT_TAG_ADDR(0x15,0x0f)
-
-#define PatternRamData0 GLINT_TAG_ADDR(0x16,0x00)
-#define PatternRamData1 GLINT_TAG_ADDR(0x16,0x01)
-#define PatternRamData2 GLINT_TAG_ADDR(0x16,0x02)
-#define PatternRamData3 GLINT_TAG_ADDR(0x16,0x03)
-#define PatternRamData4 GLINT_TAG_ADDR(0x16,0x04)
-#define PatternRamData5 GLINT_TAG_ADDR(0x16,0x05)
-#define PatternRamData6 GLINT_TAG_ADDR(0x16,0x06)
-#define PatternRamData7 GLINT_TAG_ADDR(0x16,0x07)
-
-#define FilterMode GLINT_TAG_ADDR(0x18,0x00)
- /* 0: */
- /* CullDepthTags */
- /* CullDepthData */
- /* CullStencilTags */
- /* CullStencilData */
- /* CullColorTag */
- /* CullColorData */
- /* CullSyncTag */
- /* CullSyncData */
- /* CullStatisticTag */
- /* CullStatisticData */
-
-# define FM_PassDepthTags 0x0010
-# define FM_PassDepthData 0x0020
-# define FM_PassStencilTags 0x0040
-# define FM_PassStencilData 0x0080
-# define FM_PassColorTag 0x0100
-# define FM_PassColorData 0x0200
-# define FM_PassSyncTag 0x0400
-# define FM_PassSyncData 0x0800
-# define FM_PassStatisticTag 0x1000
-# define FM_PassStatisticData 0x2000
-
-#define Sync_tag 0x0188
-
-#define StatisticMode GLINT_TAG_ADDR(0x18,0x01)
-#define MinRegion GLINT_TAG_ADDR(0x18,0x02)
-#define MaxRegion GLINT_TAG_ADDR(0x18,0x03)
-#define ResetPickResult GLINT_TAG_ADDR(0x18,0x04)
-#define MitHitRegion GLINT_TAG_ADDR(0x18,0x05)
-#define MaxHitRegion GLINT_TAG_ADDR(0x18,0x06)
-#define PickResult GLINT_TAG_ADDR(0x18,0x07)
-#define GlintSync GLINT_TAG_ADDR(0x18,0x08)
-
-#define FBBlockColorU GLINT_TAG_ADDR(0x18,0x0d)
-#define FBBlockColorL GLINT_TAG_ADDR(0x18,0x0e)
-#define SuspendUntilFrameBlank GLINT_TAG_ADDR(0x18,0x0f)
-
-#define KsRStart GLINT_TAG_ADDR(0x19,0x00)
-#define dKsRdx GLINT_TAG_ADDR(0x19,0x01)
-#define dKsRdyDom GLINT_TAG_ADDR(0x19,0x02)
-#define KsGStart GLINT_TAG_ADDR(0x19,0x03)
-#define dKsGdx GLINT_TAG_ADDR(0x19,0x04)
-#define dKsGdyDom GLINT_TAG_ADDR(0x19,0x05)
-#define KsBStart GLINT_TAG_ADDR(0x19,0x06)
-#define dKsBdx GLINT_TAG_ADDR(0x19,0x07)
-#define dKsBdyDom GLINT_TAG_ADDR(0x19,0x08)
-
-#define KdRStart GLINT_TAG_ADDR(0x1A,0x00)
-#define dKdRdx GLINT_TAG_ADDR(0x1A,0x01)
-#define dKdRdyDom GLINT_TAG_ADDR(0x1A,0x02)
-#define KdGStart GLINT_TAG_ADDR(0x1A,0x03)
-#define dKdGdx GLINT_TAG_ADDR(0x1A,0x04)
-#define dKdGdyDom GLINT_TAG_ADDR(0x1A,0x05)
-#define KdBStart GLINT_TAG_ADDR(0x1A,0x06)
-#define dKdBdx GLINT_TAG_ADDR(0x1A,0x07)
-#define dKdBdyDom GLINT_TAG_ADDR(0x1A,0x08)
-
-#define FBSourceBase GLINT_TAG_ADDR(0x1B,0x00)
-#define FBSourceDelta GLINT_TAG_ADDR(0x1B,0x01)
-#define Config GLINT_TAG_ADDR(0x1B,0x02)
-#define CFBRM_SrcEnable 1<<0
-#define CFBRM_DstEnable 1<<1
-#define CFBRM_Packed 1<<2
-#define CWM_Enable 1<<3
-#define CCDDA_Enable 1<<4
-#define CLogOp_Enable 1<<5
-#define ContextDump GLINT_TAG_ADDR(0x1B,0x08)
-#define ContextRestore GLINT_TAG_ADDR(0x1B,0x09)
-#define ContextData GLINT_TAG_ADDR(0x1B,0x0a)
-
-#define TexelLUT0 GLINT_TAG_ADDR(0x1D,0x00)
-#define TexelLUT1 GLINT_TAG_ADDR(0x1D,0x01)
-#define TexelLUT2 GLINT_TAG_ADDR(0x1D,0x02)
-#define TexelLUT3 GLINT_TAG_ADDR(0x1D,0x03)
-#define TexelLUT4 GLINT_TAG_ADDR(0x1D,0x04)
-#define TexelLUT5 GLINT_TAG_ADDR(0x1D,0x05)
-#define TexelLUT6 GLINT_TAG_ADDR(0x1D,0x06)
-#define TexelLUT7 GLINT_TAG_ADDR(0x1D,0x07)
-#define TexelLUT8 GLINT_TAG_ADDR(0x1D,0x08)
-#define TexelLUT9 GLINT_TAG_ADDR(0x1D,0x09)
-#define TexelLUT10 GLINT_TAG_ADDR(0x1D,0x0A)
-#define TexelLUT11 GLINT_TAG_ADDR(0x1D,0x0B)
-#define TexelLUT12 GLINT_TAG_ADDR(0x1D,0x0C)
-#define TexelLUT13 GLINT_TAG_ADDR(0x1D,0x0D)
-#define TexelLUT14 GLINT_TAG_ADDR(0x1D,0x0E)
-#define TexelLUT15 GLINT_TAG_ADDR(0x1D,0x0F)
-
-#define YUVMode GLINT_TAG_ADDR(0x1E,0x00)
-#define ChromaUpper GLINT_TAG_ADDR(0x1E,0x01)
-#define ChromaLower GLINT_TAG_ADDR(0x1E,0x02)
-#define ChromaTestMode GLINT_TAG_ADDR(0x1E,0x03)
-
-
-/******************************
- * GLINT Delta Core Registers *
- ******************************/
-
-#define V0FixedTag GLINT_TAG_ADDR(0x20,0x00)
-#define V1FixedTag GLINT_TAG_ADDR(0x21,0x00)
-#define V2FixedTag GLINT_TAG_ADDR(0x22,0x00)
-#define V0FloatTag GLINT_TAG_ADDR(0x23,0x00)
-#define V1FloatTag GLINT_TAG_ADDR(0x24,0x00)
-#define V2FloatTag GLINT_TAG_ADDR(0x25,0x00)
-
-#define VPAR_s 0x00
-#define VPAR_t 0x08
-#define VPAR_q 0x10
-#define VPAR_Ks 0x18
-#define VPAR_Kd 0x20
-
-/* have changed colors in ramdac !
-#define VPAR_R 0x28
-#define VPAR_G 0x30
-#define VPAR_B 0x38
-#define VPAR_A 0x40
-*/
-#define VPAR_B 0x28
-#define VPAR_G 0x30
-#define VPAR_R 0x38
-#define VPAR_A 0x40
-
-#define VPAR_f 0x48
-
-#define VPAR_x 0x50
-#define VPAR_y 0x58
-#define VPAR_z 0x60
-
-#define DeltaModeTag GLINT_TAG_ADDR(0x26,0x00)
- /* 0: */
- /* GLINT_300SX */
-
- /* DeltaMode Register Bit Field Assignments */
-# define DM_GLINT_300SX 0x0000
-# define DM_GLINT_500TX 0x0001
-# define DM_PERMEDIA 0x0002
-# define DM_Depth_16BPP (1 << 2)
-# define DM_Depth_24BPP (2 << 2)
-# define DM_Depth_32BPP (3 << 2)
-# define DM_FogEnable 0x0010
-# define DM_TextureEnable 0x0020
-# define DM_SmoothShadingEnable 0x0040
-# define DM_DepthEnable 0x0080
-# define DM_SpecularTextureEnable 0x0100
-# define DM_DiffuseTextureEnable 0x0200
-# define DM_SubPixelCorrectionEnable 0x0400
-# define DM_DiamondExit 0x0800
-# define DM_NoDraw 0x1000
-# define DM_ClampEnable 0x2000
-# define DM_ClampedTexParMode 0x4000
-# define DM_NormalizedTexParMode 0xC000
-
-
-# define DDCMD_AreaStrippleEnable 0x0001
-# define DDCMD_LineStrippleEnable 0x0002
-# define DDCMD_ResetLineStripple 1 << 2
-# define DDCMD_FastFillEnable 1 << 3
- /* 2 Bits reserved */
-# define DDCMD_PrimitiveType_Point 2 << 6
-# define DDCMD_PrimitiveType_Line 0 << 6
-# define DDCMD_PrimitiveType_Trapezoid 1 << 6
-# define DDCMD_AntialiasEnable 1 << 8
-# define DDCMD_AntialiasingQuality 1 << 9
-# define DDCMD_UsePointTable 1 << 10
-# define DDCMD_SyncOnBitMask 1 << 11
-# define DDCMD_SyncOnHostDate 1 << 12
-# define DDCMD_TextureEnable 1 << 13
-# define DDCMD_FogEnable 1 << 14
-# define DDCMD_CoverageEnable 1 << 15
-# define DDCMD_SubPixelCorrectionEnable 1 << 16
-
-
-
-#define DrawTriangle GLINT_TAG_ADDR(0x26,0x01)
-#define RepeatTriangle GLINT_TAG_ADDR(0x26,0x02)
-#define DrawLine01 GLINT_TAG_ADDR(0x26,0x03)
-#define DrawLine10 GLINT_TAG_ADDR(0x26,0x04)
-#define RepeatLine GLINT_TAG_ADDR(0x26,0x05)
-#define BroadcastMask GLINT_TAG_ADDR(0x26,0x0F)
-
-/* Permedia 3 - Accelerator Extensions */
-#define FillRectanglePosition 0x8348
-#define FillRender2D 0x8350
-#define FBDstReadBufAddr0 0xAE80
-#define FBDstReadBufOffset0 0xAEA0
-#define FBDstReadBufWidth0 0xAEC0
-#define FBDstReadMode 0xAEE0
-#define FBDRM_Enable0 1<<8
-#define FBDRM_Blocking 1<<24
-#define FBDstReadEnables 0xAEE8
-#define FBSrcReadMode 0xAF00
-#define FBSRM_Blocking 1<<11
-#define FBSrcReadBufAddr 0xAF08
-#define FBSrcReadBufOffset0 0xAF10
-#define FBSrcReadBufWidth 0xAF18
-#define FBWriteBufAddr0 0xB000
-#define FBWriteBufOffset0 0xB020
-#define FBWriteBufWidth0 0xB040
-#define FBBlockColorBack 0xB0A0
-#define ForegroundColor 0xB0C0
-#define BackgroundColor 0xB0C8
-#define RectanglePosition 0xB600
-#define Render2D 0xB640
-
-/* Colorformats */
-#define BGR555 1
-#define BGR565 16
-#define CI8 14
-#define CI4 15
-
-#if 0
-
-#ifdef DEBUG
-#define GLINT_WRITE_REG(v,r) \
- GLINT_VERB_WRITE_REG(pGlint,v,r,__FILE__,__LINE__)
-#define GLINT_READ_REG(r) \
- GLINT_VERB_READ_REG(pGlint,r,__FILE__,__LINE__)
-#else
-
-#define GLINT_WRITE_REG(v,r) \
- MMIO_OUT32(pGlint->IOBase + pGlint->IOOffset,(unsigned long)(r), (v))
-#define GLINT_READ_REG(r) \
- MMIO_IN32(pGlint->IOBase + pGlint->IOOffset,(unsigned long)(r))
-
-#endif /* DEBUG */
-
-#define GLINT_WAIT(n) \
-do{ \
- if (pGlint->InFifoSpace>=(n)) \
- pGlint->InFifoSpace -= (n); \
- else { \
- int tmp; \
- while((tmp=GLINT_READ_REG(InFIFOSpace))<(n)); \
- /* Clamp value due to bugs in PM3 */ \
- if (tmp > pGlint->FIFOSize) \
- tmp = pGlint->FIFOSize; \
- pGlint->InFifoSpace = tmp - (n); \
- } \
-}while(0)
-
-#define GLINTDACDelay(x) do { \
- int delay = x; \
- while(delay--){(void)GLINT_READ_REG(InFIFOSpace);}; \
- } while(0)
-
-#define GLINT_MASK_WRITE_REG(v,m,r) \
- GLINT_WRITE_REG((GLINT_READ_REG(r)&(m))|(v),r)
-
-#define GLINT_SLOW_WRITE_REG(v,r) \
-do{ \
- mem_barrier(); \
- GLINT_WAIT(pGlint->FIFOSize); \
- mem_barrier(); \
- GLINT_WRITE_REG(v,r); \
-}while(0)
-
-#define GLINT_SET_INDEX(index) \
-do{ \
- GLINT_SLOW_WRITE_REG(((index)>>8)&0xff,PM2VDACIndexRegHigh); \
- GLINT_SLOW_WRITE_REG((index)&0xff,PM2VDACIndexRegLow); \
-} while(0)
-
-#define REPLICATE(r) \
-{ \
- if (pScrn->bitsPerPixel == 16) { \
- r &= 0xFFFF; \
- r |= (r<<16); \
- } else \
- if (pScrn->bitsPerPixel == 8) { \
- r &= 0xFF; \
- r |= (r<<8); \
- r |= (r<<16); \
- } \
-}
-
-#ifndef XF86DRI
-#define LOADROP(rop) \
-{ \
- if (pGlint->ROP != rop) { \
- GLINT_WRITE_REG(rop<<1|UNIT_ENABLE, LogicalOpMode); \
- pGlint->ROP = rop; \
- } \
-}
-#else
-#define LOADROP(rop) \
- { \
- GLINT_WRITE_REG(rop<<1|UNIT_ENABLE, LogicalOpMode); \
- pGlint->ROP = rop; \
- }
-#endif
-
-#define CHECKCLIPPING \
-{ \
- if (pGlint->ClippingOn) { \
- pGlint->ClippingOn = FALSE; \
- GLINT_WAIT(1); \
- GLINT_WRITE_REG(0, ScissorMode); \
- } \
-}
-
-#ifndef XF86DRI
-#define DO_PLANEMASK(planemask) \
-{ \
- if (planemask != pGlint->planemask) { \
- pGlint->planemask = planemask; \
- REPLICATE(planemask); \
- GLINT_WRITE_REG(planemask, FBHardwareWriteMask);\
- } \
-}
-#else
-#define DO_PLANEMASK(planemask) \
- { \
- pGlint->planemask = planemask; \
- REPLICATE(planemask); \
- GLINT_WRITE_REG(planemask, FBHardwareWriteMask);\
- }
-#endif
-
-/* Permedia Save/Restore functions */
-
-#define STOREREG(address,value) \
- pReg->glintRegs[address >> 3] = value;
-
-#define SAVEREG(address) \
- pReg->glintRegs[address >> 3] = GLINT_READ_REG(address);
-
-#define RESTOREREG(address) \
- GLINT_SLOW_WRITE_REG(pReg->glintRegs[address >> 3], address);
-
-#define STOREDAC(address,value) \
- pReg->DacRegs[address] = value;
-
-#define P2VOUT(address) \
- Permedia2vOutIndReg(pScrn, address, 0x00, pReg->DacRegs[address]);
-
-#define P2VIN(address) \
- pReg->DacRegs[address] = Permedia2vInIndReg(pScrn, address);
-
-/* RamDac Save/Restore functions, used by external DAC's */
-
-#define STORERAMDAC(address,value) \
- ramdacReg->DacRegs[address] = value;
-
-/* Multi Chip access */
-
-#define ACCESSCHIP1() \
- pGlint->IOOffset = 0;
-
-#define ACCESSCHIP2() \
- pGlint->IOOffset = 0x10000;
-
-#endif /* 0 */
-
-#define GLINT_XY(x,y) (((x) & 0x0FFF) | (((y) & 0x0FFF) << 16))
-
-#endif
diff --git a/hw/kdrive/pm2/pm2.c b/hw/kdrive/pm2/pm2.c
deleted file mode 100644
index 148f03abd..000000000
--- a/hw/kdrive/pm2/pm2.c
+++ /dev/null
@@ -1,295 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include "kaa.h"
-
-#include "pm2.h"
-
-#define PARTPROD(a,b,c) (((a)<<6) | ((b)<<3) | (c))
-
-char bppand[4] = { 0x03, /* 8bpp */
- 0x01, /* 16bpp */
- 0x00, /* 24bpp */
- 0x00 /* 32bpp */};
-
-int partprodPermedia[] = {
- -1,
- PARTPROD(0,0,1), PARTPROD(0,1,1), PARTPROD(1,1,1), PARTPROD(1,1,2),
- PARTPROD(1,2,2), PARTPROD(2,2,2), PARTPROD(1,2,3), PARTPROD(2,2,3),
- PARTPROD(1,3,3), PARTPROD(2,3,3), PARTPROD(1,2,4), PARTPROD(3,3,3),
- PARTPROD(1,3,4), PARTPROD(2,3,4), -1, PARTPROD(3,3,4),
- PARTPROD(1,4,4), PARTPROD(2,4,4), -1, PARTPROD(3,4,4),
- -1, PARTPROD(2,3,5), -1, PARTPROD(4,4,4),
- PARTPROD(1,4,5), PARTPROD(2,4,5), PARTPROD(3,4,5), -1,
- -1, -1, -1, PARTPROD(4,4,5),
- PARTPROD(1,5,5), PARTPROD(2,5,5), -1, PARTPROD(3,5,5),
- -1, -1, -1, PARTPROD(4,5,5),
- -1, -1, -1, PARTPROD(3,4,6),
- -1, -1, -1, PARTPROD(5,5,5),
- PARTPROD(1,5,6), PARTPROD(2,5,6), -1, PARTPROD(3,5,6),
- -1, -1, -1, PARTPROD(4,5,6),
- -1, -1, -1, -1,
- -1, -1, -1, PARTPROD(5,5,6),
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- -1, -1, -1, -1,
- 0};
-
-static Bool
-pmMapReg(KdCardInfo *card, PM2CardInfo *pm2c)
-{
- pm2c->reg_base = (CARD8 *)KdMapDevice(PM2_REG_BASE(card),
- PM2_REG_SIZE(card));
-
- if (pm2c->reg_base == NULL)
- return FALSE;
-
- KdSetMappedMode(PM2_REG_BASE(card), PM2_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
-
- return TRUE;
-}
-
-static void
-pmUnmapReg(KdCardInfo *card, PM2CardInfo *pm2c)
-{
- if (pm2c->reg_base) {
- KdResetMappedMode(PM2_REG_BASE(card), PM2_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- KdUnmapDevice((void *)pm2c->reg_base, PM2_REG_SIZE(card));
- pm2c->reg_base = 0;
- }
-}
-
-Bool
-pmCardInit (KdCardInfo *card)
-{
- PM2CardInfo *pm2c;
-
- pm2c = (PM2CardInfo *) xalloc (sizeof (PM2CardInfo));
- if (!pm2c)
- return FALSE;
- memset (pm2c, '\0', sizeof (PM2CardInfo));
-
- (void) pmMapReg (card, pm2c);
-
- if (!vesaInitialize (card, &pm2c->vesa))
- {
- xfree (pm2c);
- return FALSE;
- }
-
- pm2c->InFifoSpace = 0;
-
- card->driver = pm2c;
-
- return TRUE;
-}
-
-static void
-pmCardFini (KdCardInfo *card)
-{
- PM2CardInfo *pm2c = (PM2CardInfo *) card->driver;
-
- pmUnmapReg (card, pm2c);
- vesaCardFini (card);
-}
-
-Bool
-pmScreenInit (KdScreenInfo *screen)
-{
- PM2CardInfo *pm2c = screen->card->driver;
- PM2ScreenInfo *pm2s;
- int screen_size, memory;
-
- pm2s = (PM2ScreenInfo *) xalloc (sizeof (PM2ScreenInfo));
- if (!pm2s)
- return FALSE;
- memset (pm2s, '\0', sizeof (PM2ScreenInfo));
-
- if (!vesaScreenInitialize (screen, &pm2s->vesa))
- {
- xfree (pm2s);
- return FALSE;
- }
-
- pm2c->pprod = partprodPermedia[screen->width >> 5];
- pm2c->bppalign = bppand[(screen->fb[0].bitsPerPixel>>3)-1];
-
- pm2s->screen = pm2s->vesa.fb;
- memory = pm2s->vesa.fb_size;
-
- screen_size = screen->fb[0].byteStride * screen->height;
-
- if (pm2s->screen && memory >= screen_size + 2048)
- {
- memory -= 2048;
- pm2s->cursor_base = pm2s->screen + memory - 2048;
- }
- else
- pm2s->cursor_base = 0;
- memory -= screen_size;
- if (memory > screen->fb[0].byteStride)
- {
- pm2s->off_screen = pm2s->screen + screen_size;
- pm2s->off_screen_size = memory;
- }
- else
- {
- pm2s->off_screen = 0;
- pm2s->off_screen_size = 0;
- }
-
- switch (screen->fb[0].bitsPerPixel) {
- case 8:
- pm2c->BppShift = 2;
- break;
- case 16:
- pm2c->BppShift = 1;
- break;
- case 24:
- pm2c->BppShift = 2;
- break;
- case 32:
- pm2c->BppShift = 0;
- break;
- }
-
- screen->driver = pm2s;
-
- return TRUE;
-}
-
-static void
-pmScreenFini (KdScreenInfo *screen)
-{
- PM2ScreenInfo *pm2s = (PM2ScreenInfo *) screen->driver;
-
- vesaScreenFini (screen);
- xfree (pm2s);
- screen->driver = 0;
-}
-
-static Bool
-pmInitScreen (ScreenPtr pScreen)
-{
- return vesaInitScreen (pScreen);
-}
-
-#ifdef RANDR
-static Bool
-pmRandRSetConfig (ScreenPtr pScreen,
- Rotation rotation,
- int rate,
- RRScreenSizePtr pSize)
-{
- kaaWaitSync (pScreen);
-
- if (!vesaRandRSetConfig (pScreen, rotation, rate, pSize))
- return FALSE;
-
- return TRUE;
-}
-
-static void
-pmRandRInit (ScreenPtr pScreen)
-{
- rrScrPriv(pScreen);
-
- pScrPriv->rrSetConfig = pmRandRSetConfig;
-}
-#endif
-
-static Bool
-pmFinishInitScreen (ScreenPtr pScreen)
-{
- Bool ret;
- ret = vesaFinishInitScreen (pScreen);
-#ifdef RANDR
- pmRandRInit (pScreen);
-#endif
- return ret;
-}
-
-static void
-pmPreserve(KdCardInfo *card)
-{
- vesaPreserve(card);
-}
-
-static void
-pmRestore(KdCardInfo *card)
-{
- vesaRestore (card);
-}
-
-static Bool
-pmEnable (ScreenPtr pScreen)
-{
- if (!vesaEnable (pScreen))
- return FALSE;
-
-#ifdef XV
- KdXVEnable (pScreen);
-#endif
-
- return TRUE;
-}
-
-static void
-pmDisable(ScreenPtr pScreen)
-{
-#ifdef XV
- KdXVDisable (pScreen);
-#endif
- vesaDisable (pScreen);
-}
-
-static Bool
-pmDPMS(ScreenPtr pScreen, int mode)
-{
- return vesaDPMS (pScreen, mode);
-}
-
-KdCardFuncs PM2Funcs = {
- pmCardInit, /* cardinit */
- pmScreenInit, /* scrinit */
- pmInitScreen, /* initScreen */
- pmFinishInitScreen, /* finishInitScreen */
- vesaCreateResources, /* createRes */
- pmPreserve, /* preserve */
- pmEnable, /* enable */
- pmDPMS, /* dpms */
- pmDisable, /* disable */
- pmRestore, /* restore */
- pmScreenFini, /* scrfini */
- pmCardFini, /* cardfini */
-
- 0, /* initCursor */
- 0, /* enableCursor */
- 0, /* disableCursor */
- 0, /* finiCursor */
- NULL, /* recolorCursor */
-
- pmDrawInit, /* initAccel */
- pmDrawEnable, /* enableAccel */
- pmDrawDisable, /* disableAccel */
- pmDrawFini, /* finiAccel */
-
- vesaGetColors, /* getColors */
- vesaPutColors, /* putColors */
-};
diff --git a/hw/kdrive/pm2/pm2.h b/hw/kdrive/pm2/pm2.h
deleted file mode 100644
index e05903365..000000000
--- a/hw/kdrive/pm2/pm2.h
+++ /dev/null
@@ -1,162 +0,0 @@
-#ifndef _PM2_H_
-#define _PM2_H_
-#include <vesa.h>
-#include "kxv.h"
-#include "klinux.h"
-
-#include "glint_regs.h"
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-#define PM2_REG_BASE(c) ((c)->attr.address[0] & 0xFFFFC000)
-#define PM2_REG_SIZE(c) (0x10000)
-
-typedef struct _PM2CardInfo {
- VesaCardPrivRec vesa;
- CARD8 *reg_base;
-
- int InFifoSpace;
- int FIFOSize;
-
- int pprod;
- int bppalign;
-
- int ClippingOn;
-
- int ROP;
-
- int x;
- int y;
- int w;
- int h;
-
- int FrameBufferReadMode;
- int BppShift;
- int BltScanDirection;
-
- int RasterizerSwap;
- int PixelWidth;
- int TexMapFormat;
- int startxdom;
- int startxsub;
- int starty;
- int count;
- int dy;
- int dxdom;
-
- int planemask;
-} PM2CardInfo;
-
-#define getPM2CardInfo(kd) ((PM2CardInfo *) ((kd)->card->driver))
-#define pmCardInfo(kd) PM2CardInfo *pm2c = getPM2CardInfo(kd)
-
-typedef struct _PM2ScreenInfo {
- VesaScreenPrivRec vesa;
- CARD8 *cursor_base;
- CARD8 *screen;
- CARD8 *off_screen;
- int off_screen_size;
- KdVideoAdaptorPtr pAdaptor;
- KaaScreenInfoRec kaa;
-} PM2ScreenInfo;
-
-#define getPM2ScreenInfo(kd) ((PM2ScreenInfo *) ((kd)->screen->driver))
-#define pmScreenInfo(kd) PM2ScreenInfo *pm2s = getPM2ScreenInfo(kd)
-
-Bool
-pmCardInit (KdCardInfo *card);
-
-Bool
-pmScreenInit (KdScreenInfo *screen);
-
-Bool
-pmDrawInit(ScreenPtr);
-
-void
-pmDrawEnable (ScreenPtr);
-
-void
-pmDrawDisable (ScreenPtr);
-
-void
-pmDrawFini (ScreenPtr);
-
-
-extern KdCardFuncs PM2Funcs;
-
-#define MMIO_OUT32(base, offset, val) \
-do { \
- *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset)) = (val); \
-} while (0)
-
-# define MMIO_IN32(base, offset) \
- *(volatile CARD32 *)(void *)(((CARD8*)(base)) + (offset))
-
-#define GLINT_WRITE_REG(v,r) \
- MMIO_OUT32(mmio,(unsigned long)(r), (v))
-
-#define GLINT_READ_REG(r) \
- MMIO_IN32(mmio,(unsigned long)(r))
-
-#define GLINT_SLOW_WRITE_REG(v,r) \
-do{ \
- GLINT_WAIT(card->FIFOSize); \
- GLINT_WRITE_REG(v,r); \
-}while(0)
-
-#define REPLICATE(r) \
-{ \
- if (pScreenPriv->screen->fb[0].bitsPerPixel == 16) { \
- r &= 0xFFFF; \
- r |= (r<<16); \
- } else \
- if (pScreenPriv->screen->fb[0].bitsPerPixel == 8) { \
- r &= 0xFF; \
- r |= (r<<8); \
- r |= (r<<16); \
- } \
-}
-
-#define DO_PLANEMASK(planemask) \
-{ \
- if (planemask != card->planemask) { \
- card->planemask = planemask; \
- REPLICATE(planemask); \
- GLINT_WRITE_REG(planemask, FBHardwareWriteMask);\
- } \
-}
-
-#define LOADROP(rop) \
-{ \
- if (card->ROP != rop) { \
- GLINT_WRITE_REG(rop<<1|UNIT_ENABLE, LogicalOpMode); \
- card->ROP = rop; \
- } \
-}
-
-#define GLINT_WAIT(n) \
-do{ \
- if (card->InFifoSpace>=(n)) \
- card->InFifoSpace -= (n); \
- else { \
- int tmp; \
- while((tmp=GLINT_READ_REG(InFIFOSpace))<(n)); \
- /* Clamp value due to bugs in PM3 */ \
- if (tmp > card->FIFOSize) \
- tmp = card->FIFOSize; \
- card->InFifoSpace = tmp - (n); \
- } \
-}while(0)
-
-#define CHECKCLIPPING \
-{ \
- if (card->ClippingOn) { \
- card->ClippingOn = FALSE; \
- GLINT_WAIT(1); \
- GLINT_WRITE_REG(0, ScissorMode); \
- } \
-}
-
-#endif /* _PM2_H_ */
diff --git a/hw/kdrive/pm2/pm2_draw.c b/hw/kdrive/pm2/pm2_draw.c
deleted file mode 100644
index 332fc8c8a..000000000
--- a/hw/kdrive/pm2/pm2_draw.c
+++ /dev/null
@@ -1,318 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include "kaa.h"
-
-#include "pm2.h"
-
-static PM2CardInfo *card;
-static VOL8 *mmio;
-
-static void Permedia2LoadCoord(int x, int y, int w, int h);
-
-static void
-pmWaitMarker (ScreenPtr pScreen, int marker)
-{
- CHECKCLIPPING;
-
- while (GLINT_READ_REG(DMACount) != 0);
- GLINT_WAIT(2);
- GLINT_WRITE_REG(0x400, FilterMode);
- GLINT_WRITE_REG(0, GlintSync);
- do {
- while(GLINT_READ_REG(OutFIFOWords) == 0);
- } while (GLINT_READ_REG(OutputFIFO) != Sync_tag);
-}
-
-static Bool
-pmPrepareSolid (PixmapPtr pPixmap,
- int rop,
- Pixel planemask,
- Pixel color)
-{
- ScreenPtr pScreen = pPixmap->drawable.pScreen;
- KdScreenPriv(pScreen);
- pmCardInfo(pScreenPriv);
-
- card = pm2c;
- mmio = pm2c->reg_base;
-
- if (~planemask & FbFullMask(pPixmap->drawable.depth))
- return FALSE;
-
- REPLICATE(color);
-
- GLINT_WAIT(6);
- DO_PLANEMASK(planemask);
- if (rop == GXcopy) {
- GLINT_WRITE_REG(UNIT_DISABLE, ColorDDAMode);
- GLINT_WRITE_REG(card->pprod, FBReadMode);
- GLINT_WRITE_REG(color, FBBlockColor);
- } else {
- GLINT_WRITE_REG(UNIT_ENABLE, ColorDDAMode);
- GLINT_WRITE_REG(color, ConstantColor);
- /* We can use Packed mode for filling solid non-GXcopy rasters */
- GLINT_WRITE_REG(card->pprod|FBRM_DstEnable|FBRM_Packed, FBReadMode);
- }
- LOADROP(rop);
-
- return TRUE;
-}
-
-static void
-pmSolid (int x1, int y1, int x2, int y2)
-{
- int speed = 0;
-
- if (card->ROP == GXcopy) {
- GLINT_WAIT(3);
- Permedia2LoadCoord(x1, y1, x2-x1, y2-y1);
- speed = FastFillEnable;
- } else {
- GLINT_WAIT(4);
- Permedia2LoadCoord(x1>>card->BppShift, y1,
- ((x2-x1)+7)>>card->BppShift, y2-y1);
- GLINT_WRITE_REG(x1<<16|(x1+(x2-x1)), PackedDataLimits);
- speed = 0;
- }
- GLINT_WRITE_REG(PrimitiveRectangle | XPositive | YPositive | speed, Render);
-}
-
-static void
-pmDoneSolid (void)
-{
-}
-
-static Bool
-pmPrepareCopy (PixmapPtr pSrcPixmap,
- PixmapPtr pDstPixmap,
- int dx,
- int dy,
- int rop,
- Pixel planemask)
-{
- ScreenPtr pScreen = pDstPixmap->drawable.pScreen;
- KdScreenPriv(pScreen);
- pmCardInfo(pScreenPriv);
-
- card = pm2c;
- mmio = pm2c->reg_base;
-
- if (~planemask & FbFullMask(pDstPixmap->drawable.depth))
- return FALSE;
-
- card->BltScanDirection = ((dx >= 0 ? XPositive : 0) | (dy >= 0 ? YPositive : 0));
-
- GLINT_WAIT(4);
- DO_PLANEMASK(planemask);
-
- GLINT_WRITE_REG(UNIT_DISABLE, ColorDDAMode);
- if ((rop == GXset) || (rop == GXclear)) {
- card->FrameBufferReadMode = card->pprod;
- } else
- if ((rop == GXcopy) || (rop == GXcopyInverted)) {
- card->FrameBufferReadMode = card->pprod |FBRM_SrcEnable;
- } else {
- card->FrameBufferReadMode = card->pprod | FBRM_SrcEnable |
- FBRM_DstEnable;
- }
- LOADROP(rop);
-
- return TRUE;
-}
-
-
-static void
-pmCopy (int x1,
- int y1,
- int x2,
- int y2,
- int w,
- int h)
-{
- char align;
-
- /* We can only use GXcopy for Packed modes */
- if (card->ROP != GXcopy) {
- GLINT_WAIT(5);
- GLINT_WRITE_REG(card->FrameBufferReadMode, FBReadMode);
- Permedia2LoadCoord(x2, y2, w, h);
- GLINT_WRITE_REG(((y1-y2)&0x0FFF)<<16 | ((x1-x2)&0x0FFF), FBSourceDelta);
- } else {
- align = (x2 & card->bppalign) - (x1 & card->bppalign);
- GLINT_WAIT(6);
- GLINT_WRITE_REG(card->FrameBufferReadMode|FBRM_Packed, FBReadMode);
- Permedia2LoadCoord(x2>>card->BppShift, y2,
- (w+7)>>card->BppShift, h);
- GLINT_WRITE_REG(align<<29|x2<<16|(x2+w), PackedDataLimits);
- GLINT_WRITE_REG(((y1-y2)&0x0FFF)<<16 | (((x1 & ~card->bppalign)-(x2 & ~card->bppalign))&0x0FFF), FBSourceDelta);
- }
-
- GLINT_WRITE_REG(PrimitiveRectangle | card->BltScanDirection, Render);
-}
-
-
-static void
-pmDoneCopy (void)
-{
-}
-
-static void
-Permedia2LoadCoord(int x, int y,
- int w, int h)
-{
- if ((h != card->h) || (w != card->w)) {
- card->w = w;
- card->h = h;
- GLINT_WRITE_REG(((h&0x0FFF)<<16)|(w&0x0FFF), RectangleSize);
- }
- if ((y != card->y) || (x != card->x)) {
- card->x = x;
- card->y = y;
- GLINT_WRITE_REG(((y&0x0FFF)<<16)|(x&0x0FFF), RectangleOrigin);
- }
-}
-
-
-Bool
-pmDrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- pmCardInfo(pScreenPriv);
- pmScreenInfo(pScreenPriv);
- Bool ret = TRUE;
-
- card = pm2c;
- mmio = pm2c->reg_base;
-
- memset(&pm2s->kaa, 0, sizeof(KaaScreenInfoRec));
- pm2s->kaa.waitMarker = pmWaitMarker;
- pm2s->kaa.PrepareSolid = pmPrepareSolid;
- pm2s->kaa.Solid = pmSolid;
- pm2s->kaa.DoneSolid = pmDoneSolid;
- pm2s->kaa.PrepareCopy = pmPrepareCopy;
- pm2s->kaa.Copy = pmCopy;
- pm2s->kaa.DoneCopy = pmDoneCopy;
-
- if (ret && !kaaDrawInit (pScreen, &pm2s->kaa))
- {
- ErrorF ("kaaDrawInit failed\n");
- ret = FALSE;
- }
-
- return ret;
-}
-
-
-void
-pmDrawEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- pmCardInfo(pScreenPriv);
-
- card = pm2c;
- mmio = pm2c->reg_base;
-
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, ScissorMode);
- GLINT_SLOW_WRITE_REG(UNIT_ENABLE, FBWriteMode);
- GLINT_SLOW_WRITE_REG(0, dXSub);
- GLINT_SLOW_WRITE_REG(GWIN_DisableLBUpdate, GLINTWindow);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, DitherMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, AlphaBlendMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, ColorDDAMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, TextureColorMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, TextureAddressMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, PMTextureReadMode);
- GLINT_SLOW_WRITE_REG(card->pprod, LBReadMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, AlphaBlendMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, TexelLUTMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, YUVMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, DepthMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, RouterMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, FogMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, AntialiasMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, AlphaTestMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, StencilMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, AreaStippleMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, LogicalOpMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, DepthMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, StatisticMode);
- GLINT_SLOW_WRITE_REG(0x400, FilterMode);
- GLINT_SLOW_WRITE_REG(0xffffffff, FBHardwareWriteMask);
- GLINT_SLOW_WRITE_REG(0xffffffff, FBSoftwareWriteMask);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, RasterizerMode);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, GLINTDepth);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, FBSourceOffset);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, FBPixelOffset);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, LBSourceOffset);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, WindowOrigin);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, FBWindowBase);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, FBSourceBase);
- GLINT_SLOW_WRITE_REG(UNIT_DISABLE, LBWindowBase);
-
-#if X_BYTE_ORDER == X_BIG_ENDIAN
- card->RasterizerSwap = 1;
-#else
- card->RasterizerSwap = 0;
-#endif
-
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 8:
- card->PixelWidth = 0x0; /* 8 Bits */
- card->TexMapFormat = card->pprod;
-#if X_BYTE_ORDER == X_BIG_ENDIAN
- card->RasterizerSwap |= 3<<15; /* Swap host data */
-#endif
- break;
- case 16:
- card->PixelWidth = 0x1; /* 16 Bits */
- card->TexMapFormat = card->pprod | 1<<19;
-#if X_BYTE_ORDER == X_BIG_ENDIAN
- card->RasterizerSwap |= 2<<15; /* Swap host data */
-#endif
- break;
- case 24:
- card->PixelWidth = 0x4; /* 24 Bits */
- card->TexMapFormat = card->pprod | 2<<19;
- break;
- case 32:
- card->PixelWidth = 0x2; /* 32 Bits */
- card->TexMapFormat = card->pprod | 2<<19;
- break;
- }
- card->ClippingOn = FALSE;
- card->startxdom = 0;
- card->startxsub = 0;
- card->starty = 0;
- card->count = 0;
- card->dy = 1<<16;
- card->dxdom = 0;
- card->x = 0;
- card->y = 0;
- card->h = 0;
- card->w = 0;
- card->ROP = 0xFF;
- GLINT_SLOW_WRITE_REG(card->PixelWidth, FBReadPixel);
- GLINT_SLOW_WRITE_REG(card->TexMapFormat, PMTextureMapFormat);
- GLINT_SLOW_WRITE_REG(0, RectangleSize);
- GLINT_SLOW_WRITE_REG(0, RectangleOrigin);
- GLINT_SLOW_WRITE_REG(0, dXDom);
- GLINT_SLOW_WRITE_REG(1<<16, dY);
- GLINT_SLOW_WRITE_REG(0, StartXDom);
- GLINT_SLOW_WRITE_REG(0, StartXSub);
- GLINT_SLOW_WRITE_REG(0, StartY);
- GLINT_SLOW_WRITE_REG(0, GLINTCount);
-
- kaaMarkSync (pScreen);
-}
-
-void
-pmDrawDisable (ScreenPtr pScreen)
-{
-}
-
-void
-pmDrawFini (ScreenPtr pScreen)
-{
-}
diff --git a/hw/kdrive/pm2/pm2stub.c b/hw/kdrive/pm2/pm2stub.c
deleted file mode 100644
index 1f824b347..000000000
--- a/hw/kdrive/pm2/pm2stub.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include "klinux.h"
-
-#include "pm2.h"
-
-static const int PM2Cards[]={ PCI_CHIP_3DLABS_PERMEDIA2, PCI_CHIP_3DLABS_PERMEDIA2V };
-
-
-#define numPM2Cards (sizeof(PM2Cards) / sizeof(PM2Cards[0]))
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
- int i;
-
- for (i = 0; i < numPM2Cards; i++)
- if (LinuxFindPci (0x3d3d, PM2Cards[i], 0, &attr))
- KdCardInfoAdd (&PM2Funcs, &attr, (void *) PM2Cards[i]);
-}
-
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
- vesaUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- if (!(ret = vesaProcessArgument (argc, argv, i)))
- ret = KdProcessArgument(argc, argv, i);
- return ret;
-}
diff --git a/hw/kdrive/r128/Makefile.am b/hw/kdrive/r128/Makefile.am
deleted file mode 100644
index 344fbebf7..000000000
--- a/hw/kdrive/r128/Makefile.am
+++ /dev/null
@@ -1,36 +0,0 @@
-INCLUDES = \
- @KDRIVE_INCS@ \
- -I$(top_srcdir)/hw/kdrive/vesa \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xr128
-
-noinst_LIBRARIES = libr128.a
-
-libr128_a_SOURCES = \
- r128draw.c \
- r128.c \
- r128.h
-
-Xr128_SOURCES = \
- r128stub.c
-
-R128_LIBS = \
- libr128.a \
- $(top_builddir)/hw/kdrive/vesa/libvesa.a \
- @KDRIVE_LIBS@
-
-if GLX
-Xr128_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xr128_LDADD = \
- $(R128_LIBS) \
- @KDRIVE_LIBS@
-
-Xr128_DEPENDENCIES = \
- libr128.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/r128/r128.c b/hw/kdrive/r128/r128.c
deleted file mode 100644
index 9e7f312e0..000000000
--- a/hw/kdrive/r128/r128.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright © 2003 Anders Carlsson
- *
- * 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 Anders Carlsson not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Anders Carlsson makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "r128.h"
-
-static Bool
-r128CardInit (KdCardInfo *card)
-{
- R128CardInfo *r128c;
-
- r128c = (R128CardInfo *) xalloc (sizeof (R128CardInfo));
- if (!r128c)
- return FALSE;
-
- r128MapReg (card, r128c);
-
- if (!vesaInitialize (card, &r128c->vesa))
- {
- xfree (r128c);
- return FALSE;
- }
-
- r128c->fifo_size = 0;
-
- card->driver = r128c;
-
- return TRUE;
-}
-
-static Bool
-r128ScreenInit (KdScreenInfo *screen)
-{
- R128ScreenInfo *r128s;
- int screen_size, memory;
-
- r128s = (R128ScreenInfo *) xalloc (sizeof (R128ScreenInfo));
- if (!r128s)
- return FALSE;
- memset (r128s, '\0', sizeof (R128ScreenInfo));
- if (!vesaScreenInitialize (screen, &r128s->vesa))
- {
- xfree (r128s);
- return FALSE;
- }
-#if 0
- /* if (!r128c->reg)
- screen->dumb = TRUE; */
-
- if (r128s->vesa.mapping != VESA_LINEAR)
- screen->dumb = TRUE;
-
- fprintf (stderr, "vesa mapping is %d\n", r128s->vesa.mapping);
-#endif
- r128s->screen = r128s->vesa.fb;
-
- memory = r128s->vesa.fb_size;
- screen_size = screen->fb[0].byteStride * screen->height;
-
- memory -= screen_size;
- if (memory > screen->fb[0].byteStride)
- {
- r128s->off_screen = r128s->screen + screen_size;
- r128s->off_screen_size = memory;
- }
- else
- {
- r128s->off_screen = 0;
- r128s->off_screen_size = 0;
- }
- screen->driver = r128s;
- return TRUE;
-}
-
-static Bool
-r128InitScreen (ScreenPtr pScreen)
-{
- return vesaInitScreen (pScreen);
-}
-
-static Bool
-r128FinishInitScreen (ScreenPtr pScreen)
-{
- Bool ret;
-
- ret = vesaFinishInitScreen (pScreen);
-
- return ret;
-}
-
-static void
-r128Preserve (KdCardInfo *card)
-{
- vesaPreserve (card);
-}
-
-Bool
-r128MapReg (KdCardInfo *card, R128CardInfo *r128c)
-{
- r128c->reg_base = (CARD8 *) KdMapDevice (R128_REG_BASE (card),
- R128_REG_SIZE (card));
-
- if (!r128c->reg_base)
- {
- return FALSE;
- }
-
- KdSetMappedMode (R128_REG_BASE (card),
- R128_REG_SIZE (card),
- KD_MAPPED_MODE_REGISTERS);
-
- return TRUE;
-}
-
-void
-r128UnmapReg (KdCardInfo *card, R128CardInfo *r128c)
-{
- if (r128c->reg_base)
- {
- KdResetMappedMode (R128_REG_BASE (card),
- R128_REG_SIZE (card),
- KD_MAPPED_MODE_REGISTERS);
- KdUnmapDevice ((void *) r128c->reg_base, R128_REG_SIZE (card));
- r128c->reg_base = 0;
- }
-}
-
-void
-r128SetMMIO (KdCardInfo *card, R128CardInfo *r128c)
-{
- if (!r128c->reg_base)
- r128MapReg (card, r128c);
-}
-
-void
-r128ResetMMIO (KdCardInfo *card, R128CardInfo *r128c)
-{
- r128UnmapReg (card, r128c);
-}
-
-
-static Bool
-r128DPMS (ScreenPtr pScreen, int mode)
-{
- /* XXX */
- return TRUE;
-}
-
-static Bool
-r128Enable (ScreenPtr pScreen)
-{
- KdScreenPriv (pScreen);
- R128CardInfo *r128c = pScreenPriv->card->driver;
-
- if (!vesaEnable (pScreen))
- return FALSE;
-
- r128SetMMIO (pScreenPriv->card, r128c);
- r128DPMS (pScreen, KD_DPMS_NORMAL);
-
- return TRUE;
-}
-
-static void
-r128Disable (ScreenPtr pScreen)
-{
- KdScreenPriv (pScreen);
- R128CardInfo *r128c = pScreenPriv->card->driver;
-
- r128ResetMMIO (pScreenPriv->card, r128c);
- vesaDisable (pScreen);
-}
-
-static void
-r128Restore (KdCardInfo *card)
-{
- R128CardInfo *r128c = card->driver;
-
- r128ResetMMIO (card, r128c);
- vesaRestore (card);
-}
-
-static void
-r128ScreenFini (KdScreenInfo *screen)
-{
- R128ScreenInfo *r128s = (R128ScreenInfo *) screen->driver;
-
- vesaScreenFini (screen);
- xfree (r128s);
- screen->driver = 0;
-}
-
-static void
-r128CardFini (KdCardInfo *card)
-{
- R128CardInfo *r128c = (R128CardInfo *)card->driver;
-
- r128UnmapReg (card, r128c);
- vesaCardFini (card);
-}
-
-KdCardFuncs r128Funcs = {
- r128CardInit, /* cardinit */
- r128ScreenInit, /* scrinit */
- r128InitScreen, /* initScreen */
- r128FinishInitScreen, /* finishInitScreen */
- vesaCreateResources,/* createRes */
- r128Preserve, /* preserve */
- r128Enable, /* enable */
- r128DPMS, /* dpms */
- r128Disable, /* disable */
- r128Restore, /* restore */
- r128ScreenFini, /* scrfini */
- r128CardFini, /* cardfini */
-
- 0, /* initCursor */
- 0, /* enableCursor */
- 0, /* disableCursor */
- 0, /* finiCursor */
- 0, /* recolorCursor */
-
- r128DrawInit, /* initAccel */
- r128DrawEnable, /* enableAccel */
- r128DrawDisable, /* disableAccel */
- r128DrawFini, /* finiAccel */
-
- vesaGetColors, /* getColors */
- vesaPutColors, /* putColors */
-};
-
diff --git a/hw/kdrive/r128/r128.h b/hw/kdrive/r128/r128.h
deleted file mode 100644
index ae9ae03aa..000000000
--- a/hw/kdrive/r128/r128.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright © 2003 Anders Carlsson
- *
- * 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 Anders Carlsson not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Anders Carlsson makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ANDERS CARLSSON 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_H_
-#define _R128_H_
-#include <vesa.h>
-
-#define R128_REG_BASE(c) ((c)->attr.address[1])
-#define R128_REG_SIZE(c) (0x4000)
-
-#define R128_OUT32(mmio, a, v) (*(VOL32 *) ((mmio) + (a)) = (v))
-#define R128_IN32(mmio, a) (*(VOL32 *) ((mmio) + (a)))
-
-#define R128_REG_GUI_STAT 0x1740
-#define R128_REG_DEFAULT_OFFSET 0x16e0
-#define R128_REG_DEFAULT_PITCH 0x16e4
-#define R128_REG_DP_GUI_MASTER_CNTL 0x146c
-#define R128_REG_DP_BRUSH_FRGD_CLR 0x147c
-#define R128_REG_DP_WRITE_MASK 0x16cc
-#define R128_REG_DP_CNTL 0x16c0
-#define R128_REG_DST_WIDTH_HEIGHT 0x1598
-#define R128_REG_DST_Y_X 0x1438
-#define R128_REG_PC_NGUI_CTLSTAT 0x0184
-#define R128_REG_DST_HEIGHT_WIDTH 0x143c
-#define R128_REG_SRC_Y_X 0x1434
-#define R128_DEFAULT_SC_BOTTOM_RIGHT 0x16e8
-#define R128_AUX_SC_CNTL 0x1660
-#define R128_SC_TOP_LEFT 0x16ec
-#define R128_SC_BOTTOM_RIGHT 0x16f0
-
-#define R128_GMC_DST_DATATYPE_SHIFT 8
-#define R128_GMC_CLR_CMP_CNTL_DIS (1 << 28)
-#define R128_GMC_AUX_CLIP_DIS (1 << 29)
-#define R128_GMC_BRUSH_SOLID_COLOR (13 << 4)
-#define R128_GMC_SRC_DATATYPE_COLOR (3 << 12)
-#define R128_GMC_ROP3_SHIFT 16
-#define R128_DST_X_LEFT_TO_RIGHT (1 << 0)
-#define R128_DST_Y_TOP_TO_BOTTOM (1 << 1)
-#define R128_GUI_ACTIVE (1 << 31)
-#define R128_PC_BUSY (1 << 31)
-#define R128_DP_SRC_SOURCE_MEMORY (2 << 24)
-#define R128_DEFAULT_SC_RIGHT_MAX (0x1fff << 0)
-#define R128_DEFAULT_SC_BOTTOM_MAX (0x1fff << 16)
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-typedef struct _r128CardInfo {
- VesaCardPrivRec vesa;
- CARD8 *reg_base;
- int fifo_size;
-} R128CardInfo;
-
-#define getR128CardInfo(kd) ((R128CardInfo *) ((kd)->card->driver))
-#define r128CardInfo(kd) R128CardInfo *r128c = getR128CardInfo(kd)
-
-typedef struct _r128ScreenInfo {
- VesaScreenPrivRec vesa;
- CARD8 *screen;
- CARD8 *off_screen;
- int off_screen_size;
-
- KaaScreenInfoRec kaa;
-
- int pitch;
- int datatype;
-
- int dp_gui_master_cntl;
-} R128ScreenInfo;
-
-#define getR128ScreenInfo(kd) ((R128ScreenInfo *) ((kd)->screen->driver))
-#define r128ScreenInfo(kd) R128ScreenInfo *r128s = getR128ScreenInfo(kd)
-
-Bool
-r128MapReg (KdCardInfo *card, R128CardInfo *r128c);
-
-void
-r128UnmapReg (KdCardInfo *card, R128CardInfo *r128c);
-
-void
-r128SetMMIO (KdCardInfo *card, R128CardInfo *r128c);
-
-void
-r128ResetMMIO (KdCardInfo *card, R128CardInfo *r128c);
-
-Bool
-r128DrawSetup (ScreenPtr pScreen);
-
-Bool
-r128DrawInit (ScreenPtr pScreen);
-
-void
-r128DrawEnable (ScreenPtr pScreen);
-
-void
-r128DrawDisable (ScreenPtr pScreen);
-
-void
-r128DrawFini (ScreenPtr pScreen);
-
-extern KdCardFuncs r128Funcs;
-
-#endif /* _R128_H_ */
diff --git a/hw/kdrive/r128/r128draw.c b/hw/kdrive/r128/r128draw.c
deleted file mode 100644
index 142cc8b3e..000000000
--- a/hw/kdrive/r128/r128draw.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Copyright © 2003 Anders Carlsson
- *
- * 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 Anders Carlsson not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Anders Carlsson makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "r128.h"
-#include "kaa.h"
-
-CARD8 r128SolidRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0xa0, /* src AND dst */
- /* GXandReverse */ 0x50, /* src AND NOT dst */
- /* GXcopy */ 0xf0, /* src */
- /* GXandInverted*/ 0x0a, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x5a, /* src XOR dst */
- /* GXor */ 0xfa, /* src OR dst */
- /* GXnor */ 0x05, /* NOT src AND NOT dst */
- /* GXequiv */ 0xa5, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xf5, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x0f, /* NOT src */
- /* GXorInverted */ 0xaf, /* NOT src OR dst */
- /* GXnand */ 0x5f, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-CARD8 r128BltRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0x88, /* src AND dst */
- /* GXandReverse */ 0x44, /* src AND NOT dst */
- /* GXcopy */ 0xcc, /* src */
- /* GXandInverted*/ 0x22, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x66, /* src XOR dst */
- /* GXor */ 0xee, /* src OR dst */
- /* GXnor */ 0x11, /* NOT src AND NOT dst */
- /* GXequiv */ 0x99, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xdd, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x33, /* NOT src */
- /* GXorInverted */ 0xbb, /* NOT src OR dst */
- /* GXnand */ 0x77, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-int copydx, copydy;
-int fifo_size;
-char *mmio;
-
-static void
-r128WaitAvail (int n)
-{
- if (fifo_size < n)
- {
- while ((fifo_size = R128_IN32 (mmio, R128_REG_GUI_STAT) & 0xfff) < n)
- ;
- }
-
- fifo_size -= n;
-}
-
-static void
-r128WaitIdle (void)
-{
- int tries;
-
- r128WaitAvail (64);
-
- tries = 1000000;
- while (tries--)
- {
- if ((R128_IN32 (mmio, R128_REG_GUI_STAT) & R128_GUI_ACTIVE) == 0)
- break;
- }
-
- R128_OUT32 (mmio, R128_REG_PC_NGUI_CTLSTAT,
- R128_IN32 (mmio, R128_REG_PC_NGUI_CTLSTAT | 0xff));
-
- tries = 1000000;
- while (tries--)
- {
- if ((R128_IN32 (mmio, R128_REG_PC_NGUI_CTLSTAT) & R128_PC_BUSY) != R128_PC_BUSY)
- break;
- }
-
-}
-
-static void
-r128WaitMarker (ScreenPtr pScreen, int marker)
-{
- KdScreenPriv (pScreen);
- r128CardInfo (pScreenPriv);
-
- mmio = r128c->reg_base;
-
- r128WaitIdle ();
-}
-
-static Bool
-r128Setup (ScreenPtr pScreen, int wait)
-{
- KdScreenPriv (pScreen);
- r128ScreenInfo (pScreenPriv);
- r128CardInfo (pScreenPriv);
-
- fifo_size = 0;
-
- mmio = r128c->reg_base;
-
- if (!mmio)
- return FALSE;
-
- r128WaitAvail (2);
- R128_OUT32 (mmio, R128_REG_DEFAULT_OFFSET, 0);
- R128_OUT32 (mmio, R128_REG_DEFAULT_PITCH, r128s->pitch);
-
- r128WaitAvail (4);
- R128_OUT32 (mmio, R128_AUX_SC_CNTL, 0);
- R128_OUT32 (mmio, R128_DEFAULT_SC_BOTTOM_RIGHT, (R128_DEFAULT_SC_RIGHT_MAX
- | R128_DEFAULT_SC_BOTTOM_MAX));
- R128_OUT32 (mmio, R128_SC_TOP_LEFT, 0);
- R128_OUT32 (mmio, R128_SC_BOTTOM_RIGHT, (R128_DEFAULT_SC_RIGHT_MAX
- | R128_DEFAULT_SC_BOTTOM_MAX));
- r128WaitAvail (wait);
- return TRUE;
-}
-
-static Bool
-r128PrepareSolid (PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg)
-{
- KdScreenPriv (pPixmap->drawable.pScreen);
- r128ScreenInfo (pScreenPriv);
-
- r128Setup (pPixmap->drawable.pScreen, 4);
- R128_OUT32 (mmio, R128_REG_DP_GUI_MASTER_CNTL, r128s->dp_gui_master_cntl
- | R128_GMC_BRUSH_SOLID_COLOR
- | R128_GMC_SRC_DATATYPE_COLOR
- | (r128SolidRop[alu] << R128_GMC_ROP3_SHIFT));
- R128_OUT32 (mmio, R128_REG_DP_BRUSH_FRGD_CLR, fg);
- R128_OUT32 (mmio, R128_REG_DP_WRITE_MASK, pm);
- R128_OUT32 (mmio, R128_REG_DP_CNTL,
- (R128_DST_X_LEFT_TO_RIGHT | R128_DST_Y_TOP_TO_BOTTOM));
-
- return TRUE;
-}
-
-static void
-r128Solid (int x1, int y1, int x2, int y2)
-{
- r128WaitAvail (2);
- R128_OUT32 (mmio, R128_REG_DST_Y_X, (y1 << 16) | x1);
- R128_OUT32 (mmio, R128_REG_DST_WIDTH_HEIGHT, ((x2 - x1) << 16) | (y2 - y1));
-
-}
-
-static void
-r128DoneSolid (void)
-{
-}
-
-static Bool
-r128PrepareCopy (PixmapPtr pSrc, PixmapPtr pDst, int dx, int dy, int alu, Pixel pm)
-{
- KdScreenPriv (pSrc->drawable.pScreen);
- r128ScreenInfo (pScreenPriv);
-
- copydx = dx;
- copydy = dy;
-
- r128Setup (pSrc->drawable.pScreen, 3);
- R128_OUT32 (mmio, R128_REG_DP_GUI_MASTER_CNTL, r128s->dp_gui_master_cntl
- | R128_GMC_BRUSH_SOLID_COLOR
- | R128_GMC_SRC_DATATYPE_COLOR
- | (r128BltRop[alu] << R128_GMC_ROP3_SHIFT)
- | R128_DP_SRC_SOURCE_MEMORY);
- R128_OUT32 (mmio, R128_REG_DP_WRITE_MASK, pm);
- R128_OUT32 (mmio, R128_REG_DP_CNTL,
- ((dx >= 0 ? R128_DST_X_LEFT_TO_RIGHT : 0)
- | (dy >= 0 ? R128_DST_Y_TOP_TO_BOTTOM : 0)));
-
-
- return TRUE;
-}
-
-static void
-r128Copy (int srcX, int srcY, int dstX, int dstY, int w, int h)
-{
- if (copydx < 0)
- {
- srcX += w - 1;
- dstX += w - 1;
- }
-
- if (copydy < 0)
- {
- srcY += h - 1;
- dstY += h - 1;
- }
-
- r128WaitAvail (3);
- R128_OUT32 (mmio, R128_REG_SRC_Y_X, (srcY << 16) | srcX);
- R128_OUT32 (mmio, R128_REG_DST_Y_X, (dstY << 16) | dstX);
- R128_OUT32 (mmio, R128_REG_DST_HEIGHT_WIDTH, (h << 16) | w);
-}
-
-static void
-r128DoneCopy (void)
-{
-}
-
-
-Bool
-r128DrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv (pScreen);
- r128ScreenInfo (pScreenPriv);
-
- memset(&r128s->kaa, 0, sizeof(KaaScreenInfoRec));
- r128s->kaa.waitMarker = r128WaitMarker;
- r128s->kaa.PrepareSolid = r128PrepareSolid;
- r128s->kaa.Solid = r128Solid;
- r128s->kaa.DoneSolid = r128DoneSolid;
- r128s->kaa.PrepareCopy = r128PrepareCopy;
- r128s->kaa.Copy = r128Copy;
- r128s->kaa.DoneCopy = r128DoneCopy;
-
- if (!kaaDrawInit (pScreen, &r128s->kaa))
- return FALSE;
-
- return TRUE;
-}
-
-void
-r128DrawEnable (ScreenPtr pScreen)
-{
- KdScreenPriv (pScreen);
- r128ScreenInfo (pScreenPriv);
-
- r128s->pitch = pScreenPriv->screen->width >> 3;
-
- switch (pScreenPriv->screen->fb[0].depth) {
- case 8:
- r128s->datatype = 2;
- break;
- case 15:
- r128s->datatype = 3;
- break;
- case 16:
- r128s->datatype = 4;
- break;
- case 24:
- r128s->datatype = 5;
- break;
- case 32:
- r128s->datatype = 6;
- break;
- default:
- FatalError ("unsupported pixel format");
- }
-
- r128s->dp_gui_master_cntl = ((r128s->datatype << R128_GMC_DST_DATATYPE_SHIFT)
- | R128_GMC_CLR_CMP_CNTL_DIS
- | R128_GMC_AUX_CLIP_DIS);
-
- kaaMarkSync (pScreen);
-}
-
-void
-r128DrawDisable (ScreenPtr pScreen)
-{
-}
-
-void
-r128DrawFini (ScreenPtr pScreen)
-{
-}
diff --git a/hw/kdrive/r128/r128stub.c b/hw/kdrive/r128/r128stub.c
deleted file mode 100644
index b5ffd9d77..000000000
--- a/hw/kdrive/r128/r128stub.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright © 2003 Anders Carlsson
- *
- * 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 Anders Carlsson not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Anders Carlsson makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ANDERS CARLSSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "r128.h"
-#include "klinux.h"
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
-
- if (LinuxFindPci (0x1002, 0x4c46, 0, &attr))
- KdCardInfoAdd (&r128Funcs, &attr, 0);
- else if (LinuxFindPci (0x1002, 0x5046, 0, &attr))
- KdCardInfoAdd (&r128Funcs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
- vesaUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- if (!(ret = vesaProcessArgument (argc, argv, i)))
- ret = KdProcessArgument(argc, argv, i);
- return ret;
-}
diff --git a/hw/kdrive/savage/s3.c b/hw/kdrive/savage/s3.c
deleted file mode 100644
index c1b01e701..000000000
--- a/hw/kdrive/savage/s3.c
+++ /dev/null
@@ -1,1835 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-
-#define REGISTERS_OFFSET (0x1000000)
-#define PACKED_OFFSET (0x8100)
-#define IOMAP_OFFSET (0x8000)
-
-#define S3_MIN_CLOCK 250000
-
-static void
-_s3SetBlank (S3Ptr s3, S3Vga *s3vga, Bool blank)
-{
- CARD8 clock_mode;
-
- s3SetImm(s3vga, s3_screen_off, blank ? 1 : 0);
-}
-
-Bool
-s3CardInit (KdCardInfo *card)
-{
- S3CardInfo *s3c;
- S3Ptr s3;
- S3Vga *s3vga;
- int size;
- CARD8 *registers;
- CARD32 s3FrameBuffer;
- CARD32 s3Registers;
- CARD8 *temp_buffer;
- CARD32 max_memory;
- VGA32 save_linear_window_size;
- VGA32 save_enable_linear;
- VGA32 save_register_lock_2;
- VGA32 save_misc_output;
-
- s3c = (S3CardInfo *) xalloc (sizeof (S3CardInfo));
- if (!s3c)
- {
- goto bail0;
- }
-
- memset (s3c, '\0', sizeof (S3CardInfo));
-
- card->driver = s3c;
-
-#ifdef VXWORKS
- s3c->bios_initialized = 0;
-#else
- s3c->bios_initialized = 1;
-#endif
-
- if (card->attr.naddr > 1 && card->attr.address[1])
- {
- s3FrameBuffer = card->attr.address[1];
- s3Registers = card->attr.address[0];
- max_memory = 32 * 1024 * 1024;
- }
- else
- {
- s3FrameBuffer = card->attr.address[0];
- s3Registers = s3FrameBuffer + REGISTERS_OFFSET;
- max_memory = 16 * 1024 * 1024;
- }
-
-#ifdef DEBUG
- fprintf (stderr, "S3 at 0x%x/0x%x\n", s3Registers, s3FrameBuffer);
-#endif
- registers = KdMapDevice (s3Registers,
- sizeof (S3) + PACKED_OFFSET);
- if (!registers)
- {
- ErrorF ("Can't map s3 device\n");
- goto bail2;
- }
- s3 = (S3Ptr) (registers + PACKED_OFFSET);
- s3c->registers = registers;
- s3c->s3 = s3;
-
- s3vga = &s3c->s3vga;
- s3RegInit (s3vga, (VGAVOL8 *) (registers + IOMAP_OFFSET));
-
- if (!s3c->bios_initialized)
- {
- volatile CARD32 *wakeup;
-
- wakeup = (volatile CARD32 *) (registers + 0x8510);
- ErrorF ("Wakeup S3 chip at 0x%x\n", wakeup);
- ErrorF ("Wakeup was 0x%x\n", *wakeup);
- /* wakeup the chip */
- *(volatile CARD32 *) (registers + 0x8510) = 1;
- ErrorF ("Wakeup is 0x%x\n", *wakeup);
- }
- s3Set (s3vga, s3_io_addr_select, 1);
- s3Set (s3vga, s3_enable_ram, 1);
- VgaFlush (&s3vga->card);
-
- save_register_lock_2 = s3Get (s3vga, s3_register_lock_2);
- s3SetImm (s3vga, s3_register_lock_2, 0xa0);
- save_linear_window_size = s3Get (s3vga, s3_linear_window_size);
- save_enable_linear = s3Get (s3vga, s3_enable_linear);
- s3Set (s3vga, s3_linear_window_size, 3);
- s3Set (s3vga, s3_enable_linear, 1);
- VgaFlush (&s3vga->card);
- VgaFinish (&s3vga->card);
-
- /*
- * Can't trust S3 register value for frame buffer amount, must compute
- */
- temp_buffer = KdMapDevice (s3FrameBuffer, max_memory);
-
- s3c->memory = KdFrameBufferSize (temp_buffer, max_memory);
-
- s3Set (s3vga, s3_linear_window_size, save_linear_window_size);
- s3Set (s3vga, s3_enable_linear, save_enable_linear);
- VgaFlush (&s3vga->card);
- s3SetImm (s3vga, s3_register_lock_2, save_register_lock_2);
- VgaFinish (&s3vga->card);
-#ifdef DEBUG
- fprintf (stderr, "Frame buffer 0x%x\n", s3c->memory);
-#endif
- KdUnmapDevice (temp_buffer, max_memory);
-
- if (!s3c->memory)
- {
- ErrorF ("Can't detect s3 frame buffer at 0x%x\n", s3FrameBuffer);
- goto bail3;
- }
-
- s3c->frameBuffer = KdMapDevice (s3FrameBuffer, s3c->memory);
- if (!s3c->frameBuffer)
- {
- ErrorF ("Can't map s3 frame buffer\n");
- goto bail3;
- }
-
- card->driver = s3c;
-
- return TRUE;
-bail3:
- KdUnmapDevice ((void *) s3, sizeof (S3));
-bail2:
-bail1:
- xfree (s3c);
-bail0:
- return FALSE;
-}
-
-Bool
-s3ModeSupported (KdScreenInfo *screen,
- const KdMonitorTiming *t)
-{
- if (screen->fb[1].depth)
- {
- /*
- * Must have at least one true color stream
- */
- if (screen->fb[0].depth <= 8 &&
- screen->fb[1].depth <= 8)
- return FALSE;
- }
- /* make sure the clock isn't too fast */
- if (t->clock > S3_MAX_CLOCK * 2)
- return FALSE;
- /* width must be a multiple of 16 */
- if (t->horizontal & 0xf)
- return FALSE;
- return TRUE;
-}
-
-Bool
-s3ModeUsable (KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- S3CardInfo *s3c = (S3CardInfo *) card->driver;
- int screen_size;
- int pixel_width;
- int byte_width;
- int fb;
-
- screen_size = 0;
- for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++)
- {
- if (screen->fb[fb].depth >= 24)
- {
- screen->fb[fb].depth = 24;
- if (screen->fb[fb].bitsPerPixel != 24)
- screen->fb[fb].bitsPerPixel = 32;
- }
- else if (screen->fb[fb].depth >= 16)
- {
- screen->fb[fb].depth = 16;
- screen->fb[fb].bitsPerPixel = 16;
- }
- else if (screen->fb[fb].depth >= 15)
- {
- screen->fb[fb].depth = 15;
- screen->fb[fb].bitsPerPixel = 16;
- }
- else
- {
- screen->fb[fb].depth = 8;
- screen->fb[fb].bitsPerPixel = 8;
- }
-
- /*
- * SGRAM requires stride % 64 == 0
- */
- screen->fb[fb].pixelStride = (screen->width + 63) & ~63;
- screen->fb[fb].byteStride = screen->fb[fb].pixelStride * (screen->fb[fb].bitsPerPixel >> 3);
- screen_size += screen->fb[fb].byteStride * screen->height;
- }
-
- return screen_size <= s3c->memory;
-}
-
-Bool
-s3ScreenInit (KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- S3CardInfo *s3c = (S3CardInfo *) card->driver;
- S3ScreenInfo *s3s;
- int memory;
- int requested_memory;
- int v_total, h_total;
- int m, n, r;
- int i;
- const KdMonitorTiming *t;
- int screen_size;
- int fb;
- int ma;
-
- s3s = (S3ScreenInfo *) xalloc (sizeof (S3ScreenInfo));
- if (!s3s)
- return FALSE;
-
- memset (s3s, '\0', sizeof (S3ScreenInfo));
-
-#ifdef PHOENIX
- screen->width = 1152;
- screen->height = 900;
- screen->rate = 85;
- screen->depth = 32;
-#endif
- if (!screen->width || !screen->height)
- {
- screen->width = 800;
- screen->height = 600;
- screen->rate = 72;
- }
- if (!screen->fb[0].depth)
- screen->fb[0].depth = 8;
-
- t = KdFindMode (screen, s3ModeSupported);
- screen->rate = t->rate;
- screen->width = t->horizontal;
- screen->height = t->vertical;
- s3GetClock (t->clock, &m, &n, &r, 511, 127, 4, 250000);
-#ifdef DEBUG
- fprintf (stderr, "computed %d,%d,%d (%d)\n",
- m, n, r, S3_CLOCK(m,n,r));
-#endif
-#if 0
- /*
- * Can only operate in pixel-doubled mode at 8 or 16 bits per pixel
- */
- if (screen->depth > 16 && S3_CLOCK(m,n,r) > S3_MAX_CLOCK)
- screen->depth = 16;
-#endif
-
- if (!KdTuneMode (screen, s3ModeUsable, s3ModeSupported))
- {
- xfree (s3s);
- return FALSE;
- }
-
- s3s->fbmap[2] = -1;
- if (screen->fb[1].depth)
- {
- if (screen->fb[0].bitsPerPixel >= 16)
- {
- s3s->fbmap[0] = 1;
- s3s->fbmap[1] = 0;
- }
- else
- {
- s3s->fbmap[0] = 0;
- s3s->fbmap[1] = 1;
- }
- }
- else
- {
- s3s->fbmap[0] = 0;
- s3s->fbmap[1] = -1;
- }
-
- screen_size = 0;
- for (fb = 0; fb < KD_MAX_FB && screen->fb[fb].depth; fb++)
- screen_size += screen->fb[fb].byteStride * screen->height;
-
- memory = s3c->memory - screen_size;
-
- /*
- * Stick cursor at end of memory
- */
- if (memory >= 2048)
- {
- s3s->cursor_base = s3c->frameBuffer + (s3c->memory - 2048);
- memory -= 2048;
- }
- else
- s3s->cursor_base = 0;
-
- screen_size = 0;
- for (ma = 0; s3s->fbmap[ma] >= 0; ma++)
- {
- fb = s3s->fbmap[ma];
- screen->fb[fb].frameBuffer = s3c->frameBuffer + screen_size;
- screen_size += screen->fb[fb].byteStride * screen->height;
-
- REGION_INIT(pScreen, (&s3s->region[fb]), NullBox, 0);
- if (screen->fb[fb].bitsPerPixel == 8)
- s3s->fb[ma].chroma_key = 0xff;
- else
- s3s->fb[ma].chroma_key = 0;
-
- /*
- * Use remaining memory for off-screen storage, but only use
- * one piece (either right or bottom).
- */
- if (memory >= screen->fb[fb].byteStride * S3_TILE_SIZE)
- {
- s3s->fb[ma].offscreen = screen->fb[fb].frameBuffer;
- s3s->fb[ma].offscreen_x = 0;
- s3s->fb[ma].offscreen_y = screen->height;
- s3s->fb[ma].offscreen_width = screen->fb[fb].pixelStride;
- s3s->fb[ma].offscreen_height = S3_TILE_SIZE;
- memory -= s3s->fb[ma].offscreen_height * screen->fb[fb].byteStride;
- screen_size += s3s->fb[ma].offscreen_height * screen->fb[fb].byteStride;
- }
- else
- s3s->fb[ma].offscreen = 0;
-
- switch (screen->fb[fb].depth) {
- case 8:
- screen->fb[fb].visuals = ((1 << StaticGray) |
- (1 << GrayScale) |
- (1 << StaticColor) |
- (1 << PseudoColor) |
- (1 << TrueColor) |
- (1 << DirectColor));
- screen->fb[fb].blueMask = 0x00;
- screen->fb[fb].greenMask = 0x00;
- screen->fb[fb].redMask = 0x00;
- break;
- case 15:
- screen->fb[fb].visuals = (1 << TrueColor);
- screen->fb[fb].blueMask = 0x001f;
- screen->fb[fb].greenMask = 0x03e0;
- screen->fb[fb].redMask = 0x7c00;
- break;
- case 16:
- screen->fb[fb].visuals = (1 << TrueColor);
- screen->fb[fb].blueMask = 0x001f;
- screen->fb[fb].greenMask = 0x07e0;
- screen->fb[fb].redMask = 0xf800;
- break;
- case 24:
- screen->fb[fb].visuals = (1 << TrueColor);
- screen->fb[fb].blueMask = 0x0000ff;
- screen->fb[fb].greenMask = 0x00ff00;
- screen->fb[fb].redMask = 0xff0000;
- break;
- }
- }
-
- screen->driver = s3s;
-
- return TRUE;
-}
-
-typedef struct _biosInit {
- VGA16 reg;
- VGA8 value;
-} s3BiosInit;
-
-s3BiosInit s3BiosReg[] = {
- S3_SR +0x15, 0x23,
- S3_MISC_OUT, 0x2f,
- 0xffff, 1,
- S3_SR +0x15, 0x03,
-
- S3_SR + 0x0, 0x03,
- S3_SR + 0x1, 0x00,
- S3_SR + 0x2, 0x03,
- S3_SR + 0x3, 0x00,
- S3_SR + 0x4, 0x02,
- S3_SR + 0x5, 0x05,
- S3_SR + 0x6, 0x06,
- S3_SR + 0x7, 0x07,
-/* S3_SR + 0x8, 0x06, */
- S3_SR + 0x9, 0x00,
- S3_SR + 0xa, 0x0a,
- S3_SR + 0xb, 0x00,
- S3_SR + 0xc, 0x0c,
- S3_SR + 0xd, 0x00,
- S3_SR + 0xe, 0x0e,
- S3_SR + 0xf, 0x0f,
-
-/* S3_SR +0x10, 0x00, */
-/* S3_SR +0x11, 0x0c, */
- S3_SR +0x12, 0x01,
- S3_SR +0x13, 0x52,
- S3_SR +0x14, 0x00,
-
-/* S3_SR +0x15, 0x03, */
-
- S3_SR +0x16, 0xc5,
- S3_SR +0x17, 0xfc,
- S3_SR +0x18, 0x40,
- S3_SR +0x19, 0x00,
- S3_SR +0x1a, 0x01,
- S3_SR +0x1b, 0x02,
- S3_SR +0x1c, 0x5d,
- S3_SR +0x1d, 0x00,
- S3_SR +0x1e, 0x00,
- S3_SR +0x1f, 0x00,
- S3_SR +0x20, 0x20,
- S3_SR +0x21, 0x21,
- S3_SR +0x22, 0x22,
- S3_SR +0x23, 0x23,
- S3_SR +0x24, 0x24,
- S3_SR +0x25, 0x25,
- S3_SR +0x26, 0x26,
- S3_SR +0x27, 0x04,
- S3_SR +0x28, 0xff,
- S3_SR +0x29, 0x00,
- S3_SR +0x2a, 0x2a,
- S3_SR +0x2b, 0x2b,
- S3_SR +0x2c, 0x2c,
- S3_SR +0x2d, 0x2d,
- S3_SR +0x2e, 0x2e,
- S3_SR +0x2f, 0x2f,
- S3_SR +0x30, 0x00,
- S3_SR +0x31, 0x06,
- S3_SR +0x32, 0x41,
- S3_SR +0x33, 0x67,
- S3_SR +0x34, 0x00,
- S3_SR +0x35, 0x00,
- S3_SR +0x36, 0x01,
- S3_SR +0x37, 0x52,
- S3_SR +0x38, 0x5d,
- S3_SR +0x39, 0x05,
- S3_SR +0x3a, 0x3a,
- S3_SR +0x3b, 0x3b,
- S3_SR +0x3c, 0x3c,
- S3_SR +0x3d, 0x00,
- S3_SR +0x3e, 0x3e,
- S3_SR +0x3f, 0x00,
- S3_SR +0x40, 0x40,
- S3_SR +0x41, 0x41,
- S3_SR +0x42, 0x42,
- S3_SR +0x43, 0x43,
- S3_SR +0x44, 0x44,
- S3_SR +0x45, 0x45,
- S3_SR +0x46, 0x46,
- S3_SR +0x47, 0x47,
- S3_SR +0x48, 0x48,
- S3_SR +0x49, 0x49,
- S3_SR +0x4a, 0x4a,
- S3_SR +0x4b, 0x4b,
- S3_SR +0x4c, 0x4c,
- S3_SR +0x4d, 0x4d,
- S3_SR +0x4e, 0x4e,
- S3_SR +0x4f, 0x4f,
- S3_SR +0x50, 0x00,
- S3_SR +0x51, 0x00,
- S3_SR +0x52, 0x00,
- S3_SR +0x53, 0x00,
- S3_SR +0x54, 0x00,
- S3_SR +0x55, 0x00,
- S3_SR +0x56, 0x00,
- S3_SR +0x57, 0x00,
- S3_SR +0x58, 0x00,
- S3_SR +0x59, 0x70,
- S3_SR +0x5a, 0x38,
- S3_SR +0x5b, 0x08,
- S3_SR +0x5c, 0x77,
- S3_SR +0x5d, 0x77,
- S3_SR +0x5e, 0x00,
- S3_SR +0x5f, 0x00,
- S3_SR +0x60, 0xff,
- S3_SR +0x61, 0xbf,
- S3_SR +0x62, 0xff,
- S3_SR +0x63, 0xff,
- S3_SR +0x64, 0xf7,
- S3_SR +0x65, 0xff,
- S3_SR +0x66, 0xff,
- S3_SR +0x67, 0xff,
- S3_SR +0x68, 0xff,
- S3_SR +0x69, 0xff,
- S3_SR +0x6a, 0xff,
- S3_SR +0x6b, 0xff,
- S3_SR +0x6c, 0xff,
- S3_SR +0x6d, 0xff,
- S3_SR +0x6e, 0x9b,
- S3_SR +0x6f, 0xbf,
-
- S3_AR + 0x00, 0x00,
- S3_AR + 0x01, 0x01,
- S3_AR + 0x02, 0x02,
- S3_AR + 0x03, 0x03,
- S3_AR + 0x04, 0x04,
- S3_AR + 0x05, 0x05,
- S3_AR + 0x06, 0x06,
- S3_AR + 0x07, 0x07,
- S3_AR + 0x08, 0x08,
- S3_AR + 0x09, 0x09,
- S3_AR + 0x0a, 0x0a,
- S3_AR + 0x0b, 0x0b,
- S3_AR + 0x0c, 0x0c,
- S3_AR + 0x0d, 0x0d,
- S3_AR + 0x0e, 0x0e,
- S3_AR + 0x0f, 0x0f,
- S3_AR + 0x10, 0x05,
- S3_AR + 0x11, 0x00,
- S3_AR + 0x12, 0x0f,
- S3_AR + 0x13, 0x08,
- S3_AR + 0x14, 0x00,
-
- S3_GR + 0x00, 0x00,
- S3_GR + 0x01, 0x00,
- S3_GR + 0x02, 0x00,
- S3_GR + 0x03, 0x00,
- S3_GR + 0x04, 0x00,
- S3_GR + 0x05, 0x10,
- S3_GR + 0x06, 0x0e,
- S3_GR + 0x07, 0x00,
-
- S3_CR + 0x00, 0x5f,
- S3_CR + 0x01, 0x4f,
- S3_CR + 0x02, 0x50,
- S3_CR + 0x03, 0x82,
- S3_CR + 0x04, 0x55,
- S3_CR + 0x05, 0x81,
- S3_CR + 0x06, 0xbf,
- S3_CR + 0x07, 0x1f,
- S3_CR + 0x08, 0x00,
- S3_CR + 0x09, 0x4f,
- S3_CR + 0x0a, 0x0d,
- S3_CR + 0x0b, 0x0e,
- S3_CR + 0x0c, 0x00,
- S3_CR + 0x0d, 0x00,
- S3_CR + 0x0e, 0x3f,
- S3_CR + 0x0f, 0xff,
- S3_CR + 0x10, 0x9c,
- S3_CR + 0x11, 0x0e,
- S3_CR + 0x12, 0x8f,
- S3_CR + 0x13, 0x28,
- S3_CR + 0x14, 0x1f,
- S3_CR + 0x15, 0x96,
- S3_CR + 0x16, 0xb9,
- S3_CR + 0x17, 0xa3,
- S3_CR + 0x18, 0xff,
- S3_CR + 0x19, 0xdf,
- S3_CR + 0x1a, 0xdf,
- S3_CR + 0x1b, 0xdf,
- S3_CR + 0x1c, 0xdf,
- S3_CR + 0x1d, 0xdf,
- S3_CR + 0x1e, 0xdf,
- S3_CR + 0x1f, 0xdf,
- S3_CR + 0x20, 0xdf,
- S3_CR + 0x21, 0x00,
-/* S3_CR + 0x22, 0x07, */
- S3_CR + 0x23, 0x00,
- S3_CR + 0x24, 0xdf,
- S3_CR + 0x25, 0xdf,
- S3_CR + 0x26, 0x00,
- S3_CR + 0x27, 0xdf,
- S3_CR + 0x28, 0xdf,
- S3_CR + 0x29, 0xdf,
- S3_CR + 0x2a, 0xdf,
- S3_CR + 0x2b, 0xdf,
- S3_CR + 0x2c, 0xdf,
- S3_CR + 0x2d, 0x8a,
- S3_CR + 0x2e, 0x22,
- S3_CR + 0x2f, 0x02,
- S3_CR + 0x30, 0xe1,
- S3_CR + 0x31, 0x05,
- S3_CR + 0x32, 0x40,
- S3_CR + 0x33, 0x08,
- S3_CR + 0x34, 0x00,
- S3_CR + 0x35, 0x00,
- S3_CR + 0x36, 0xbf,
- S3_CR + 0x37, 0x9b,
-/* S3_CR + 0x38, 0x7b, */
-/* S3_CR + 0x39, 0xb8, */
- S3_CR + 0x3a, 0x45,
- S3_CR + 0x3b, 0x5a,
- S3_CR + 0x3c, 0x10,
- S3_CR + 0x3d, 0x00,
- S3_CR + 0x3e, 0xfd,
- S3_CR + 0x3f, 0x00,
- S3_CR + 0x40, 0x00,
- S3_CR + 0x41, 0x92,
- S3_CR + 0x42, 0xc0,
- S3_CR + 0x43, 0x68,
- S3_CR + 0x44, 0xff,
- S3_CR + 0x45, 0xe8,
- S3_CR + 0x46, 0xff,
- S3_CR + 0x47, 0xff,
- S3_CR + 0x48, 0xf8,
- S3_CR + 0x49, 0xff,
- S3_CR + 0x4a, 0xfe,
- S3_CR + 0x4b, 0xff,
- S3_CR + 0x4c, 0xff,
- S3_CR + 0x4d, 0xff,
- S3_CR + 0x4e, 0xff,
- S3_CR + 0x4f, 0xff,
- S3_CR + 0x50, 0x00,
- S3_CR + 0x51, 0x00,
- S3_CR + 0x52, 0x00,
- S3_CR + 0x53, 0x00,
- S3_CR + 0x54, 0x00,
- S3_CR + 0x55, 0x00,
- S3_CR + 0x56, 0x00,
- S3_CR + 0x57, 0x00,
-#if 0
- S3_CR + 0x58, 0x00,
- S3_CR + 0x59, 0xf0,
-#endif
- S3_CR + 0x5a, 0x00,
- S3_CR + 0x5b, 0x00,
-#if 0
- S3_CR + 0x5c, 0x00,
-#endif
- S3_CR + 0x5d, 0x00,
- S3_CR + 0x5e, 0x00,
- S3_CR + 0x5f, 0x00,
- S3_CR + 0x60, 0x09,
- S3_CR + 0x61, 0x9d,
- S3_CR + 0x62, 0xff,
- S3_CR + 0x63, 0x00,
- S3_CR + 0x64, 0xfd,
- S3_CR + 0x65, 0x04,
- S3_CR + 0x66, 0x88,
- S3_CR + 0x67, 0x00,
- S3_CR + 0x68, 0x7f,
- S3_CR + 0x69, 0x00,
- S3_CR + 0x6a, 0x00,
- S3_CR + 0x6b, 0x00,
- S3_CR + 0x6c, 0x00,
- S3_CR + 0x6d, 0x11,
- S3_CR + 0x6e, 0xff,
- S3_CR + 0x6f, 0xfe,
-
- S3_CR + 0x70, 0x30,
- S3_CR + 0x71, 0xc0,
- S3_CR + 0x72, 0x07,
- S3_CR + 0x73, 0x1f,
- S3_CR + 0x74, 0x1f,
- S3_CR + 0x75, 0x1f,
- S3_CR + 0x76, 0x0f,
- S3_CR + 0x77, 0x1f,
- S3_CR + 0x78, 0x01,
- S3_CR + 0x79, 0x01,
- S3_CR + 0x7a, 0x1f,
- S3_CR + 0x7b, 0x1f,
- S3_CR + 0x7c, 0x17,
- S3_CR + 0x7d, 0x17,
- S3_CR + 0x7e, 0x17,
- S3_CR + 0x7f, 0xfd,
- S3_CR + 0x80, 0x00,
- S3_CR + 0x81, 0x92,
- S3_CR + 0x82, 0x10,
- S3_CR + 0x83, 0x07,
- S3_CR + 0x84, 0x42,
- S3_CR + 0x85, 0x00,
- S3_CR + 0x86, 0x00,
- S3_CR + 0x87, 0x00,
- S3_CR + 0x88, 0x10,
- S3_CR + 0x89, 0xfd,
- S3_CR + 0x8a, 0xfd,
- S3_CR + 0x8b, 0xfd,
- S3_CR + 0x8c, 0xfd,
- S3_CR + 0x8d, 0xfd,
- S3_CR + 0x8e, 0xfd,
- S3_CR + 0x8f, 0xfd,
- S3_CR + 0x90, 0x00,
- S3_CR + 0x91, 0x4f,
- S3_CR + 0x92, 0x10,
- S3_CR + 0x93, 0x00,
- S3_CR + 0x94, 0xfd,
- S3_CR + 0x95, 0xfd,
- S3_CR + 0x96, 0xfd,
- S3_CR + 0x97, 0xfd,
- S3_CR + 0x98, 0xfd,
- S3_CR + 0x99, 0xff,
- S3_CR + 0x9a, 0xfd,
- S3_CR + 0x9b, 0xff,
- S3_CR + 0x9c, 0xfd,
- S3_CR + 0x9d, 0xfd,
- S3_CR + 0x9e, 0xfd,
- S3_CR + 0x9f, 0xff,
- S3_CR + 0xa0, 0x0f,
-#if 0
- S3_CR + 0xa1, 0x00,
- S3_CR + 0xa2, 0x00,
- S3_CR + 0xa3, 0x00,
- S3_CR + 0xa4, 0x55,
-#endif
- S3_CR + 0xa5, 0x09,
- S3_CR + 0xa6, 0x20,
-#if 0
- S3_CR + 0xa7, 0x00,
- S3_CR + 0xa8, 0x00,
- S3_CR + 0xa9, 0x00,
- S3_CR + 0xaa, 0x00,
- S3_CR + 0xab, 0x00,
- S3_CR + 0xac, 0x00,
- S3_CR + 0xad, 0x00,
- S3_CR + 0xae, 0x00,
- S3_CR + 0xaf, 0x00,
- S3_CR + 0xb0, 0xff,
-#endif
- S3_CR + 0xb1, 0x0e,
-#if 0
- S3_CR + 0xb2, 0x55,
- S3_CR + 0xb3, 0x00,
- S3_CR + 0xb4, 0x55,
- S3_CR + 0xb5, 0x00,
- S3_CR + 0xb6, 0x00,
-#endif
- S3_CR + 0xb7, 0x84,
-#if 0
- S3_CR + 0xb8, 0xff,
- S3_CR + 0xb9, 0xff,
- S3_CR + 0xba, 0xff,
- S3_CR + 0xbb, 0xff,
- S3_CR + 0xbc, 0xff,
- S3_CR + 0xbd, 0xff,
- S3_CR + 0xbe, 0xff,
- S3_CR + 0xbf, 0xff,
-#endif
-
- S3_SR +0x15, 0x23,
- 0xffff, 1,
- S3_SR +0x15, 0x03,
- 0xffff, 1,
-};
-
-#define S3_NUM_BIOS_REG (sizeof (s3BiosReg) / sizeof (s3BiosReg[0]))
-
-typedef struct _bios32Init {
- VGA16 offset;
- VGA32 value;
-} s3Bios32Init;
-
-s3Bios32Init s3Bios32Reg[] = {
- 0x8168, 0x00000000,
- 0x816c, 0x00000001,
- 0x8170, 0x00000000,
- 0x8174, 0x00000000,
- 0x8178, 0x00000000,
- 0x817c, 0x00000000,
-#if 0
- 0x8180, 0x00140000,
- 0x8184, 0x00000000,
- 0x8188, 0x00000000,
- 0x8190, 0x00000000,
- 0x8194, 0x00000000,
- 0x8198, 0x00000000,
- 0x819c, 0x00000000,
- 0x81a0, 0x00000000,
-#endif
- 0x81c0, 0x00000000,
- 0x81c4, 0x01fbffff,
- 0x81c8, 0x00f7ffbf,
- 0x81cc, 0x00f7ff00,
- 0x81d0, 0x11ffff7f,
- 0x81d4, 0x7fffffdf,
- 0x81d8, 0xfdfff9ff,
- 0x81e0, 0xfd000000,
- 0x81e4, 0x00000000,
- 0x81e8, 0x00000000,
- 0x81ec, 0x00010000,
- 0x81f0, 0x07ff057f,
- 0x81f4, 0x07ff07ff,
- 0x81f8, 0x00000000,
- 0x81fc, 0x00000000,
- 0x8200, 0x00000000,
- 0x8204, 0x00000000,
- 0x8208, 0x33000000,
- 0x820c, 0x7f000000,
- 0x8210, 0x80000000,
- 0x8214, 0x00000000,
- 0x8218, 0xffffffff,
- 0x8300, 0xff007fef,
- 0x8304, 0xfffdf7bf,
- 0x8308, 0xfdfffbff,
-};
-
-#define S3_NUM_BIOS32_REG (sizeof (s3Bios32Reg) / sizeof (s3Bios32Reg[0]))
-
-/*
- * Initialize the card precisely as the bios does
- */
-s3DoBiosInit (KdCardInfo *card)
-{
- S3CardInfo *s3c = card->driver;
- CARD32 *regs = (CARD32 *) s3c->registers;
- S3Vga *s3vga = &s3c->s3vga;
- int r;
-
- for (r = 0; r < S3_NUM_BIOS_REG; r++)
- {
- if (s3BiosReg[r].reg == 0xffff)
- sleep (s3BiosReg[r].value);
- else
- VgaStore (&s3vga->card, s3BiosReg[r].reg, s3BiosReg[r].value);
- }
- VgaStore (&s3vga->card, S3_SR+0x10, 0x22);
- VgaStore (&s3vga->card, S3_SR+0x11, 0x44);
- VgaStore (&s3vga->card, S3_SR+0x15, 0x01);
- sleep (1);
- VgaStore (&s3vga->card, S3_SR+0x15, 0x03);
- VgaStore (&s3vga->card, S3_CR+0x6f, 0xff);
- VgaStore (&s3vga->card, S3_CR+0x3f, 0x3f);
- sleep (1);
- VgaStore (&s3vga->card, S3_CR+0x3f, 0x00);
- VgaStore (&s3vga->card, S3_CR+0x6f, 0xfe);
- VgaInvalidate (&s3vga->card);
- for (r = 0; r < S3_NUM_BIOS32_REG; r++)
- regs[s3Bios32Reg[r].offset/4] = s3Bios32Reg[r].value;
-}
-
-void
-s3Preserve (KdCardInfo *card)
-{
- S3CardInfo *s3c = card->driver;
- S3Ptr s3 = s3c->s3;
- S3Vga *s3vga = &s3c->s3vga;
- S3Save *save = &s3c->save;
- CARD8 t1, t2;
- CARD8 *cursor_base;
- CARD8 streams_mode;
-
- s3Save (s3vga);
- if (!s3c->bios_initialized)
- s3DoBiosInit (card);
-
- _s3SetBlank (s3, s3vga, TRUE);
- /*
- * Preserve the first part of the frame buffer which holds
- * the text mode fonts and data
- */
- s3Set (s3vga, s3_linear_window_size, 3);
- s3Set (s3vga, s3_enable_linear, 1);
- VgaFlush (&s3vga->card);
- memcpy (save->text_save, s3c->frameBuffer, S3_TEXT_SAVE);
- /*
- * Preserve graphics engine state
- */
- save->alt_mix = s3->alt_mix;
- save->write_mask = s3->write_mask;
- save->fg = s3->fg;
- save->bg = s3->bg;
- /*
- * Preserve streams processor state
- */
- streams_mode = s3Get (s3vga, s3_streams_mode);
- s3SetImm (s3vga, s3_streams_mode, 3);
- save->global_bitmap_1 = s3->global_bitmap_1;
- save->global_bitmap_2 = s3->global_bitmap_2;
- save->adv_func_cntl = s3->adv_func_cntl;
- save->primary_bitmap_1 = s3->primary_bitmap_1;
- save->primary_bitmap_2 = s3->primary_bitmap_2;
- save->secondary_bitmap_1 = s3->secondary_bitmap_1;
- save->secondary_bitmap_2 = s3->secondary_bitmap_2;
- save->primary_stream_control = s3->primary_stream_control;
- save->blend_control = s3->blend_control;
- save->primary_stream_addr_0 = s3->primary_stream_addr_0;
- save->primary_stream_addr_1 = s3->primary_stream_addr_1;
- save->primary_stream_stride = s3->primary_stream_stride;
- save->primary_stream_xy = s3->primary_stream_xy;
- save->primary_stream_size = s3->primary_stream_size;
- save->primary_stream_mem = s3->primary_stream_mem;
- save->secondary_stream_xy = s3->secondary_stream_xy;
- save->secondary_stream_size = s3->secondary_stream_size;
- save->streams_fifo = s3->streams_fifo;
- s3SetImm (s3vga, s3_streams_mode, streams_mode);
- _s3SetBlank (s3, s3vga, FALSE);
-}
-
-/*
- * Enable the card for rendering. Manipulate the initial settings
- * of the card here.
- */
-int s3CpuTimeout, s3AccelTimeout;
-
-void
-s3SetGlobalBitmap (ScreenPtr pScreen, int ma)
-{
- KdScreenPriv(pScreen);
- s3ScreenInfo (pScreenPriv);
-
- if (s3s->current_ma != ma)
- {
- s3CardInfo (pScreenPriv);
- S3Vga *s3vga = &s3c->s3vga;
- S3Ptr s3 = s3c->s3;
- CARD32 gb1, gb2;
- int depth;
- int length;
- KdCheckSync (pScreen);
- switch (s3s->fb[ma].accel_bpp) {
- case 8:
- case 24:
- length = 0;
- break;
- case 16:
- length = 1;
- break;
- case 32:
- length = 3;
- break;
- }
- s3SetImm (s3vga, s3_pixel_length, length);
- gb1 = s3s->fb[ma].bitmap_offset;
- gb2 = ((1 << 0) |
- (0 << 2) |
- (1 << 3) |
- ((s3s->fb[ma].accel_stride >> 4) << 4) |
- (s3s->fb[ma].accel_bpp << 16) |
- (0 << 24) |
- (1 << 28));
- s3->global_bitmap_1 = gb1;
- s3->global_bitmap_2 = gb2;
- s3->global_bitmap_2 = gb2;
- s3s->current_ma = ma;
- }
-}
-
-Bool
-s3Enable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- KdScreenInfo *screen = pScreenPriv->screen;
- s3CardInfo (pScreenPriv);
- s3ScreenInfo (pScreenPriv);
-
- S3Vga *s3vga = &s3c->s3vga;
- S3Ptr s3 = s3c->s3;
- int hactive, hblank, hfp, hbp;
- int vactive, vblank, vfp, vbp;
- int hsize;
-
- int h_total;
- int h_display_end;
- int h_blank_start;
- int h_blank_end;
- int h_sync_start;
- int h_sync_end;
- int h_screen_off;
- int h_start_fifo_fetch;
-
- int primary_stream_l1[KD_MAX_FB];
-
- int v_total;
- int v_retrace_start;
- int v_retrace_end;
- int v_display_end;
- int v_blank_start;
- int v_blank_end;
- int v_blank_start_adjust = 0;
- int v_blank_end_adjust = 0;
-
- int h_blank_start_adjust = 0;
- int h_blank_end_adjust = 0;
- int h_sync_start_adjust = 0;
- int h_sync_end_adjust = 0;
- int h_start_fifo_fetch_adjust = 0;
- int h_sync_extend;
- int h_blank_extend;
- int i;
- CARD16 cursor_address;
- const KdMonitorTiming *t;
- int m, n, r;
- Bool clock_double;
- int cpu_timeout;
- int accel_timeout;
- int bytes_per_ms;
- CARD32 control[2];
- int fb;
- int ma;
-
- s3s->primary_depth = screen->fb[s3s->fbmap[0]].depth;
-
- s3s->use_streams = TRUE;
-
- t = KdFindMode (screen, s3ModeSupported);
-
- hfp = t->hfp;
- hbp = t->hbp;
- hblank = t->hblank;
- hactive = t->horizontal;
-
- vfp = t->vfp;
- vbp = t->vbp;
- vblank = t->vblank;
- vactive = t->vertical;
-
-
- m = s3Get (s3vga, s3_dclk_m);
- n = s3Get (s3vga, s3_dclk_n);
- r = s3Get (s3vga, s3_dclk_r);
-#define DEBUG_CLOCK
-#ifdef DEBUG_CLOCK
- fprintf (stderr, "old clock %d, %d, %d (%d)\n", m, n, r, S3_CLOCK(m,n,r));
-#endif
- clock_double = FALSE;
- s3GetClock (t->clock, &m, &n, &r, 511, 127, 4, 250000);
- if (S3_CLOCK(m,n,r) > S3_MAX_CLOCK && !s3s->use_streams)
- clock_double = TRUE;
- s3Set (s3vga, s3_clock_select, 3);
- s3Set (s3vga, s3_dclk_m, m);
- s3Set (s3vga, s3_dclk_n, n);
- s3Set (s3vga, s3_dclk_r, r);
-#ifdef DEBUG_CLOCK
- fprintf (stderr, "new clock %d, %d, %d (%d)\n", m, n, r, S3_CLOCK(m,n,r));
-#endif
-
- if (s3s->use_streams)
- {
- s3Set (s3vga, s3_streams_mode, 3);
- s3Set (s3vga, s3_enable_l1_parameter, 1);
- }
- else
- {
- s3Set (s3vga, s3_streams_mode, 0);
- s3Set (s3vga, s3_enable_l1_parameter, 0);
- }
- s3Set (s3vga, s3_flat_panel_output_control_1, 0);
- s3Set (s3vga, s3_flat_panel_output_control_2, 0);
- s3Set (s3vga, s3_select_graphics_mode, 1);
- s3Set (s3vga, s3_enable_blinking, 0);
- s3Set (s3vga, s3_enable_vga_16bit, 0);
- s3Set (s3vga, s3_enhanced_memory_mapping, 1);
- s3Set (s3vga, s3_enable_sff, 1);
- s3Set (s3vga, s3_enable_2d_access, 1);
- s3Set (s3vga, s3_2bk_cga, 1);
- s3Set (s3vga, s3_4bk_hga, 1);
- s3Set (s3vga, s3_v_total_double, 0);
- s3Set (s3vga, s3_address_16k_wrap, 1);
- s3Set (s3vga, s3_word_mode, 0);
- s3Set (s3vga, s3_byte_mode, 1);
- s3Set (s3vga, s3_hardware_reset, 1);
- s3Set (s3vga, s3_max_scan_line, 0);
- s3Set (s3vga, s3_linear_window_size, 3);
- s3Set (s3vga, s3_enable_linear, 1);
- s3Set (s3vga, s3_enable_2d_3d, 1);
- s3Set (s3vga, s3_refresh_control, 1);
- s3Set (s3vga, s3_disable_pci_read_bursts, 0);
- s3Set (s3vga, s3_pci_disconnect_enable, 1);
- s3Set (s3vga, s3_primary_load_control, 0);
- s3Set (s3vga, s3_secondary_load_control, 0);
- s3Set (s3vga, s3_pci_retry_enable, 1);
- s3Set (s3vga, s3_enable_256, 1);
- s3Set (s3vga, s3_border_select, 1); /* eliminate white border */
- s3SetImm (s3vga, s3_lock_palette, 0); /* unlock palette/border regs */
- s3Set (s3vga, s3_disable_v_retrace_int, 1);
- if (t->hpol == KdSyncPositive)
- s3Set (s3vga, s3_horz_sync_neg, 0);
- else
- s3Set (s3vga, s3_horz_sync_neg, 1);
- if (t->vpol == KdSyncPositive)
- s3Set (s3vga, s3_vert_sync_neg, 0);
- else
- s3Set (s3vga, s3_vert_sync_neg, 1);
-
- s3Set (s3vga, s3_dot_clock_8, 1);
- s3Set (s3vga, s3_enable_write_plane, 0xf);
- s3Set (s3vga, s3_extended_memory_access, 1);
- s3Set (s3vga, s3_sequential_addressing_mode, 1);
- s3Set (s3vga, s3_select_chain_4_mode, 1);
- s3Set (s3vga, s3_linear_addressing_control, 1);
-
- s3Set (s3vga, s3_enable_gamma_correction, 0);
-
- s3Set (s3vga, s3_enable_8_bit_luts, 1);
-
- s3Set (s3vga, s3_dclk_invert, 0);
- s3Set (s3vga, s3_enable_clock_double, 0);
- s3Set (s3vga, s3_dclk_over_2, 0);
-
- s3Set (s3vga, s3_delay_h_enable, 0);
- s3Set (s3vga, s3_sdclk_skew, 0);
-
- s3Set (s3vga, s3_dac_mask, 0xff);
-
-#if 0
-#ifdef DEBUG_CLOCK
- m = s3Get (s3vga, s3_mclk_m);
- n = s3Get (s3vga, s3_mclk_n);
- r = s3Get (s3vga, s3_mclk_r);
- fprintf (stderr, "old mclk %d, %d, %d (%d)\n", m, n, r, S3_CLOCK(m,n,r));
-#endif
-
- s3GetClock (125282, &m, &n, &r, 127, 31, 3, 250000);
-
-#ifdef DEBUG_CLOCK
- fprintf (stderr, "new mclk %d, %d, %d (%d)\n", m, n, r,S3_CLOCK(m,n,r));
-#endif
-
- s3Set (s3vga, s3_mclk_m, m);
- s3Set (s3vga, s3_mclk_n, n);
- s3Set (s3vga, s3_mclk_r, r);
-
-#ifdef DEBUG_CLOCK
- m = s3Get (s3vga, s3_eclk_m);
- n = s3Get (s3vga, s3_eclk_n);
- r = s3Get (s3vga, s3_eclk_r);
- fprintf (stderr, "old eclk %d, %d, %d (%d)\n", m, n, r, S3_CLOCK(m,n,r));
-#endif
-
-#define S3_ECLK 125282
-
- s3GetClock (S3_ECLK, &m, &n, &r, 127, 31, 3, 250000);
-
-#ifdef DEBUG_CLOCK
- fprintf (stderr, "new eclk %d, %d, %d (%d)\n", m, n, r,S3_CLOCK(m,n,r));
-#endif
-
- s3Set (s3vga, s3_eclk_m, m);
- s3Set (s3vga, s3_eclk_n, n);
- s3Set (s3vga, s3_eclk_r, r);
-#endif
-
- /*
- * Compute character lengths for horizontal timing values
- */
- hactive = screen->width / 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
- /*
- * Set pixel size, choose clock doubling mode
- */
-
- bytes_per_ms = 0;
-
- for (ma = 0; s3s->fbmap[ma] >= 0; ma++)
- {
- fb = s3s->fbmap[ma];
- s3s->fb[ma].accel_bpp = screen->fb[fb].bitsPerPixel;
- s3s->fb[ma].accel_stride = screen->fb[fb].pixelStride;
- s3s->fb[ma].bitmap_offset = screen->fb[fb].frameBuffer - s3c->frameBuffer;
- switch (s3s->fb[ma].accel_bpp) {
- case 8:
- h_screen_off = hactive;
- s3Set (s3vga, s3_pixel_length, 0);
- s3Set (s3vga, s3_color_mode, 0);
- control[ma] = 0;
- /*
- * Set up for double-pixel mode, switch color modes,
- * divide the dclk and delay h blank by 2 dclks
- */
- if (clock_double)
- {
- s3Set (s3vga, s3_color_mode, 1);
- s3Set (s3vga, s3_dclk_over_2, 1);
- s3Set (s3vga, s3_enable_clock_double, 1);
- s3Set (s3vga, s3_h_skew, 1);
- h_blank_start_adjust = -3;
- h_blank_end_adjust = -4;
- s3Set (s3vga, s3_border_select, 0);
- }
- break;
- case 16:
- h_screen_off = hactive * 2;
- s3Set (s3vga, s3_pixel_length, 1);
- if (screen->fb[fb].depth == 15)
- control[ma] = 3 << 24;
- else
- control[ma] = 5 << 24;
- if (clock_double)
- {
- if (screen->fb[fb].depth == 15)
- s3Set (s3vga, s3_color_mode, 3);
- else
- s3Set (s3vga, s3_color_mode, 5);
- s3Set (s3vga, s3_dclk_over_2, 1);
- s3Set (s3vga, s3_enable_clock_double, 1);
- s3Set (s3vga, s3_border_select, 0);
- h_blank_start_adjust = 4;
- h_blank_end_adjust = -4;
- }
- else
- {
- if (screen->fb[fb].depth == 15)
- s3Set (s3vga, s3_color_mode, 2);
- else
- s3Set (s3vga, s3_color_mode, 4);
- s3Set (s3vga, s3_dclk_over_2, 0);
- s3Set (s3vga, s3_enable_clock_double, 0);
- s3Set (s3vga, s3_delay_blank, 0);
- }
- break;
- case 24:
- control[ma] = 6 << 24;
- h_screen_off = hactive * 3;
- s3s->fb[ma].accel_bpp = 8;
- s3s->fb[ma].accel_stride = screen->fb[fb].pixelStride * 3;
- break;
- case 32:
- control[ma] = 7 << 24;
- h_screen_off = hactive * 4;
- s3Set (s3vga, s3_pixel_length, 3);
- s3Set (s3vga, s3_color_mode, 0xd);
- break;
- }
- bytes_per_ms += t->clock * (screen->fb[fb].bitsPerPixel / 8);
- primary_stream_l1[ma] = (screen->width * screen->fb[fb].bitsPerPixel / (8 * 8)) - 1;
- }
-
- /*
- * X server starts frame buffer at top of memory
- */
- s3Set (s3vga, s3_start_address, 0);
-
- /*
- * Set various registers to avoid snow on the screen
- */
-
- fprintf (stderr, "bytes_per_ms %d\n", bytes_per_ms);
- fprintf (stderr, "primary 0x%x master 0x%x command 0x%x lpb 0x%x cpu 0x%x 2d 0x%x\n",
- s3Get (s3vga, s3_primary_stream_timeout),
- s3Get (s3vga, s3_master_control_unit_timeout),
- s3Get (s3vga, s3_command_buffer_timeout),
- s3Get (s3vga, s3_lpb_timeout),
- s3Get (s3vga, s3_cpu_timeout),
- s3Get (s3vga, s3_2d_graphics_engine_timeout));
-
- /*
- * Test:
- * accel x11perf -line500
- * cpu x11perf -circle500
- *
- * cpu accel
- * 1600x1200x32x85 (918000) 1 1 not enough
- * 1600x1200x32x75 (810000) 3 2
- * 1600x1200x32x70 (756000) 4 3
- * 1600x1200x32x60 (648000) 6 5
- *
- * 1280x1024x32x85 (630000) 6 4
- * 1280x1024x32x75 (540000) a 6
- * 1280x1024x32x60 (432000) 1f a
- *
- * 1152x900x32x85 (490000) a 6
- * 1152x900x32x75 (433000) 1f 8
- * 1152x900x32x70 (401000) 1f a
- * 1152x900x32x66 (380000) 1f a
- *
- * 1024x768x32x85 (378000) 1f a
- * 1024x768x32x75 (315000) 1f b
- * 1024x768x32x70 (300000) 1f b
- * 1024x768x32x60 (260000) 1f 12
- *
- * 800x600x32x85 (225000) 1f 1a
- * 800x600x32x72 (200000) 1f 1d
- * 800x600x32x75 (198000) 1f 1d
- *
- * 1600x1200x16x85 (459000) 1f 8
- * 1600x1200x16x75 (405000) 1f a
- * 1600x1200x16x70 (378000) 1f b
- * 1600x1200x16x60 (324000) 1f f
- *
- * 1280x1024x16x85 (315000) 1f 12
- * 1280x1024x16x75 (270000) 1f 16
- * 1280x1024x16x60 (216000) 1f 1d
- *
- * 1600x1200x8x85 (229000) 1f 1f
- *
- */
-
- if (s3CpuTimeout)
- {
- if (s3CpuTimeout < 0)
- cpu_timeout = 0;
- else
- cpu_timeout = s3CpuTimeout;
- if (s3AccelTimeout < 0)
- accel_timeout = 0;
- else if (s3AccelTimeout)
- accel_timeout = s3AccelTimeout;
- else
- accel_timeout = s3CpuTimeout;
- }
- else if (bytes_per_ms >= 900000)
- {
- cpu_timeout = 0x01;
- accel_timeout = 0x01;
- }
- else if (bytes_per_ms >= 800000)
- {
- cpu_timeout = 0x03;
- accel_timeout = 0x02;
- }
- else if (bytes_per_ms >= 700000)
- {
- cpu_timeout = 0x04;
- accel_timeout = 0x03;
- }
- else if (bytes_per_ms >= 600000)
- {
- cpu_timeout = 0x06;
- accel_timeout = 0x04;
- }
- else if (bytes_per_ms >= 475000)
- {
- cpu_timeout = 0x0a;
- accel_timeout = 0x06;
- }
- else if (bytes_per_ms >= 425000)
- {
- cpu_timeout = 0x1f;
- accel_timeout = 0x8;
- }
- else if (bytes_per_ms >= 300000)
- {
- cpu_timeout = 0x1f;
- accel_timeout = 0x0a;
- }
- else if (bytes_per_ms >= 250000)
- {
- cpu_timeout = 0x1f;
- accel_timeout = 0x12;
- }
- else if (bytes_per_ms >= 200000)
- {
- cpu_timeout = 0x1f;
- accel_timeout = 0x1a;
- }
- else
- {
- cpu_timeout = 0x1f;
- accel_timeout = 0x1f;
- }
-
- fprintf (stderr, "cpu 0x%x accel 0x%x\n", cpu_timeout, accel_timeout);
-
- s3Set (s3vga, s3_primary_stream_timeout, 0xc0);
- s3Set (s3vga, s3_master_control_unit_timeout, 0xf);
- s3Set (s3vga, s3_command_buffer_timeout, 0x1f);
- s3Set (s3vga, s3_lpb_timeout, 0xf);
- s3Set (s3vga, s3_2d_graphics_engine_timeout, accel_timeout);
- s3Set (s3vga, s3_cpu_timeout, cpu_timeout);
-
- s3Set (s3vga, s3_fifo_fetch_timing, 1);
- s3Set (s3vga, s3_fifo_drain_delay, 2);
-
- /*
- * Compute horizontal register values from timings
- */
- h_total = hactive + hblank - 5;
- h_display_end = hactive - 1;
-
- h_sync_start = hactive + hfp + h_sync_start_adjust;
- h_sync_end = hactive + hblank - hbp + h_sync_end_adjust;
- /*
- * pad the blank values narrow a bit and use the border_select to
- * eliminate the remaining border; don't know why, but it doesn't
- * work in the documented fashion
- */
- h_blank_start = hactive + 1 + h_blank_start_adjust;
- h_blank_end = hactive + hblank - 2 + h_blank_end_adjust;
- /*
- * The manual says h_total - 5, but the
- * bios does differently...
- */
- if (screen->width >= 1600)
- h_start_fifo_fetch = h_total - 24;
- else if (screen->width >= 1280)
- h_start_fifo_fetch = h_total - 19;
- else if (screen->width >= 1024)
- h_start_fifo_fetch = h_total - 14;
- else if (screen->width >= 800)
- h_start_fifo_fetch = h_total - 10;
- else
- h_start_fifo_fetch = h_total - 5;
-
- h_start_fifo_fetch += h_start_fifo_fetch_adjust;
- if (h_blank_end - h_blank_start >= 0x40)
- h_blank_extend = 1;
- else
- h_blank_extend = 0;
-
- if (h_sync_end - h_sync_start >= 0x20)
- h_sync_extend = 1;
- else
- h_sync_extend = 0;
-
-#ifdef DEBUG
- fprintf (stderr, "h_total %d h_display_end %d\n",
- h_total, h_display_end);
- fprintf (stderr, "h_sync_start %d h_sync_end %d h_sync_extend %d\n",
- h_sync_start, h_sync_end, h_sync_extend);
- fprintf (stderr, "h_blank_start %d h_blank_end %d h_blank_extend %d\n",
- h_blank_start, h_blank_end, h_blank_extend);
-#endif
-
- s3Set (s3vga, s3_h_total, h_total);
- s3Set (s3vga, s3_h_display_end, h_display_end);
- s3Set (s3vga, s3_h_blank_start, h_blank_start);
- s3Set (s3vga, s3_h_blank_end, h_blank_end);
- s3Set (s3vga, s3_h_sync_start, h_sync_start);
- s3Set (s3vga, s3_h_sync_end, h_sync_end);
- s3Set (s3vga, s3_screen_offset, h_screen_off);
- s3Set (s3vga, s3_h_start_fifo_fetch, h_start_fifo_fetch);
- s3Set (s3vga, s3_h_sync_extend, h_sync_extend);
- s3Set (s3vga, s3_h_blank_extend, h_blank_extend);
-
- s3Set (s3vga, s3_dac_power_saving_disable, 0);
- s3Set (s3vga, s3_dac_power_up_time, hactive + hblank);
-
- s3Set (s3vga, s3_primary_stream_l1, primary_stream_l1[0]);
-
- s3Set (s3vga, s3_streams_fifo_delay, 0);
-
- v_total = vactive + vblank - 2;
- v_display_end = vactive - 1;
-
- v_blank_start = vactive - 1 + v_blank_start_adjust;
- v_blank_end = v_blank_start + vblank - 1 + v_blank_end_adjust;
-
- v_retrace_start = vactive + vfp;
- v_retrace_end = vactive + vblank - vbp;
-
- s3Set (s3vga, s3_v_total, v_total);
- s3Set (s3vga, s3_v_retrace_start, v_retrace_start);
- s3Set (s3vga, s3_v_retrace_end, v_retrace_end);
- s3Set (s3vga, s3_v_display_end, v_display_end);
- s3Set (s3vga, s3_v_blank_start, v_blank_start);
- s3Set (s3vga, s3_v_blank_end, v_blank_end);
-
- if (vactive >= 1024)
- s3Set (s3vga, s3_line_compare, 0x7ff);
- else
- s3Set (s3vga, s3_line_compare, 0x3ff);
-
- /*
- * Set cursor
- */
- if (!screen->softCursor)
- {
- cursor_address = (s3s->cursor_base - s3c->frameBuffer) / 1024;
-
- s3Set (s3vga, s3_cursor_address, cursor_address);
- s3Set (s3vga, s3_cursor_ms_x11, 0);
- s3Set (s3vga, s3_cursor_enable, 1);
- }
- else
- s3Set (s3vga, s3_cursor_enable, 0);
-
-#define MAKE_GBF(bds,be,stride,bpp,tile) (\
- ((bds) << 0) | \
- ((be) << 3) | \
- ((stride) << 4) | \
- ((bpp) << 16) | \
- ((tile) << 24))
- /*
- * Set accelerator
- */
- switch (screen->width) {
-#if 0
- case 640: s3Set (s3vga, s3_ge_screen_width, 1); break;
- case 800: s3Set (s3vga, s3_ge_screen_width, 2); break;
- case 1024: s3Set (s3vga, s3_ge_screen_width, 0); break;
- case 1152: s3Set (s3vga, s3_ge_screen_width, 4); break;
- case 1280: s3Set (s3vga, s3_ge_screen_width, 3); break;
- case 1600: s3Set (s3vga, s3_ge_screen_width, 6); break;
-#endif
- default:
- s3Set (s3vga, s3_ge_screen_width, 7); /* use global bitmap descriptor */
- }
-
-#if 0
- crtc->l_parm_0_7 = screen->width / 4; /* Undocumented. */
-#endif
-
- /*
- * Set DPMS to normal
- */
- s3Set (s3vga, s3_hsync_control, 0);
- s3Set (s3vga, s3_vsync_control, 0);
-
- _s3SetBlank (s3, s3vga, TRUE);
- if (s3s->use_streams)
- s3Set (s3vga, s3_primary_stream_definition, 1);
- else
- s3Set (s3vga, s3_primary_stream_definition, 0);
-
- VgaFlush(&s3vga->card);
- VgaSetImm (&s3vga->card, s3_clock_load_imm, 1);
- VgaSetImm(&s3vga->card, s3_clock_load_imm, 0);
-
-
- if (s3s->use_streams)
- {
- fb = s3s->fbmap[0];
- s3->primary_stream_control = control[0];
- s3->primary_stream_addr_0 =
- s3->primary_stream_addr_1 = s3s->fb[0].bitmap_offset;
- s3->primary_stream_stride = screen->fb[fb].byteStride;
- s3->primary_stream_xy = (1 << 16) | 1;
- s3->primary_stream_size = ((screen->fb[fb].pixelStride - 1) << 16) | screen->height;
- s3->primary_stream_mem = (screen->fb[fb].byteStride * screen->height) / 8 - 1;
- if (s3s->fbmap[1] >= 0)
- {
- fb = s3s->fbmap[1];
- s3->blend_control = 5 << 24;
- if (s3s->fb[0].accel_bpp == 8)
- s3->chroma_key_control = 0x33000000 | s3s->fb[0].chroma_key;
- else
- s3->chroma_key_control = 0x13010101;
- s3->secondary_stream_control = control[1] | screen->width;
- s3->secondary_stream_h_scale = (1 << 15);
- s3->color_adjustment = 0;
- s3->secondary_stream_vscale = (1 << 15);
- s3->secondary_stream_vinit = 0;
- s3->secondary_stream_mbuf = 0;
- s3->secondary_stream_addr_0 =
- s3->secondary_stream_addr_1 = s3s->fb[1].bitmap_offset;
- s3->secondary_stream_stride = screen->fb[fb].byteStride;
- s3->secondary_stream_scount = screen->height;
- s3->secondary_stream_xy = (1 << 16) | 1;
- s3->secondary_stream_size = ((screen->fb[fb].pixelStride - 1) << 16) | screen->height;
- s3->secondary_stream_mem = (1 << 22) | ((screen->fb[fb].byteStride * screen->height) / 8 - 1);
- }
- else
- {
- s3->blend_control = 1 << 24;
- s3->secondary_stream_xy = 0x07ff07ff;
- s3->secondary_stream_size = 0x00010001;
- }
- s3->streams_fifo = (0x20 << 11) | (0x20 << 5) | 0x2;
- }
- s3->mult_misc_read_sel = (((1 << 9) |
- (1 << 11) |
- (0xe << 12)) |
- (((0xe << 0) |
- (0xf << 12)) << 16));
-
- s3->cmd_overflow_buf_ptr = (1 << 3);
- s3->bci_power_management = (1 << 9);
- s3->adv_func_cntl = (3 << 8) | (1 << 4) | (1 << 2) | 1;
- s3->primary_bitmap_1 = 0;
- s3->primary_bitmap_2 = 0;
- s3->secondary_bitmap_1 = 0;
- s3->secondary_bitmap_2 = 0;
- s3s->current_ma = -1;
- _s3SetBlank (s3, s3vga, FALSE);
-#if 0
- {
- VGA16 r;
- static CARD32 streams[][2] = {
- /* PCI registers */
- 0x8000, 0x8024,
- 0x802c, 0x8034,
- 0x803c, 0x8040,
-#if 0
- 0x8080, 0x808c, /* AGP */
-#endif
- 0x80dc, 0x80e0,
-
- /* 2D registers */
- 0x8168, 0x8188,
- 0x8190, 0x81a0,
- 0x81c0, 0x81d8,
- 0x81e0, 0x8218,
- 0x8300, 0x8308,
- 0x8504, 0x8510,
-
- /* LPB/VIP registers */
- 0xff00, 0xff18,
- 0xff20, 0xff38,
- 0xff40, 0xff40,
- 0xff70, 0xff78,
- 0xff8c, 0xffa0,
-
-#if 0
- /* 3D registers */
- 0x48508, 0x48508,
- 0x48528, 0x48528,
- 0x48548, 0x48548,
- 0x48584, 0x485f0,
-#endif
-
- /* motion compensation registers */
- 0x48900, 0x48924,
-#if 0
- 0x48928, 0x48928,
-#endif
-
- /* Mastered data transfer registers */
- 0x48a00, 0x48a1c,
-
- /* configuation/status registers */
- 0x48c00, 0x48c18,
- 0x48c20, 0x48c24,
- 0x48c40, 0x48c50,
- 0x48c60, 0x48c64,
-
- 0, 0,
- };
-#ifdef PHOENIX
-#undef stderr
-#define stderr stdout
-#endif
- CARD32 *regs = (CARD32 *) s3c->registers;
- int i;
- CARD32 reg;
-
-
- for (r = S3_SR + 0; r < S3_SR + S3_NSR; r++)
- fprintf (stderr, "SR%02x = %02x\n", r-S3_SR, VgaFetch (&s3vga->card, r));
- for (r = S3_GR + 0; r < S3_GR + S3_NGR; r++)
- fprintf (stderr, "GR%02x = %02x\n", r-S3_GR, VgaFetch (&s3vga->card, r));
- for (r = S3_AR + 0; r < S3_AR + S3_NAR; r++)
- fprintf (stderr, "AR%02x = %02x\n", r-S3_AR, VgaFetch (&s3vga->card, r));
- for (r = S3_CR + 0; r < S3_CR + S3_NCR; r++)
- fprintf (stderr, "CR%02x = %02x\n", r-S3_CR, VgaFetch (&s3vga->card, r));
- for (r = S3_DAC + 0; r < S3_DAC + S3_NDAC; r++)
- fprintf (stderr, "DAC%02x = %02x\n", r-S3_DAC, VgaFetch (&s3vga->card, r));
- fprintf (stderr, "MISC_OUT = %02x\n", VgaFetch (&s3vga->card, S3_MISC_OUT));
- fprintf (stderr, "INPUT_STATUS = %02x\n", VgaFetch (&s3vga->card, S3_INPUT_STATUS_1));
-
-
- for (i = 0; streams[i][0]; i++)
- {
- for (reg = streams[i][0]; reg <= streams[i][1]; reg += 4)
- fprintf (stderr, "0x%4x: 0x%08x\n", reg, regs[reg/4]);
- }
- }
-#endif
- return TRUE;
-}
-
-void
-s3Disable (ScreenPtr pScreen)
-{
-}
-
-void
-s3Restore (KdCardInfo *card)
-{
- S3CardInfo *s3c = card->driver;
- S3Ptr s3 = s3c->s3;
- S3Vga *s3vga = &s3c->s3vga;
- S3Save *save = &s3c->save;
- CARD8 *cursor_base;
- CARD8 streams_mode;
-
- _s3SetBlank (s3, s3vga, TRUE);
- /* streams processor state */
- streams_mode = s3Get (s3vga, s3_streams_mode);
- s3SetImm (s3vga, s3_streams_mode, 3);
- s3->global_bitmap_1 = save->global_bitmap_1;
- s3->global_bitmap_2 = save->global_bitmap_2;
- s3->adv_func_cntl = save->adv_func_cntl;
- s3->primary_bitmap_1 = save->primary_bitmap_1;
- s3->primary_bitmap_2 = save->primary_bitmap_2;
- s3->secondary_bitmap_1 = save->secondary_bitmap_1;
- s3->secondary_bitmap_2 = save->secondary_bitmap_2;
- s3->primary_stream_control = save->primary_stream_control;
- s3->blend_control = save->blend_control;
- s3->primary_stream_addr_0 = save->primary_stream_addr_0;
- s3->primary_stream_addr_0 = save->primary_stream_addr_0;
- s3->primary_stream_stride = save->primary_stream_stride;
- s3->primary_stream_xy = save->primary_stream_xy;
- s3->primary_stream_size = save->primary_stream_size;
- s3->primary_stream_mem = save->primary_stream_mem;
- s3->secondary_stream_xy = save->secondary_stream_xy;
- s3->secondary_stream_size = save->secondary_stream_size;
- s3->streams_fifo = save->streams_fifo;
- s3SetImm (s3vga, s3_streams_mode, streams_mode);
- /* graphics engine state */
- s3->alt_mix = save->alt_mix;
- s3->write_mask = save->write_mask;
- s3->fg = save->fg;
- s3->bg = save->bg;
- /* XXX should save and restore real values? */
- s3->scissors_tl = 0x00000000;
- s3->scissors_br = 0x0fff0fff;
-
- VgaRestore (&s3vga->card);
- s3Set (s3vga, s3_linear_window_size, 3);
- s3Set (s3vga, s3_enable_linear, 1);
- VgaFlush (&s3vga->card);
- memcpy (s3c->frameBuffer, save->text_save, S3_TEXT_SAVE);
- s3Reset (s3vga);
- _s3SetBlank (s3, s3vga, FALSE);
-}
-
-void
-_s3SetSync (S3CardInfo *s3c, int hsync, int vsync)
-{
- /* this abuses the macros defined to access the crtc structure */
- S3Ptr s3 = s3c->s3;
- S3Vga *s3vga = &s3c->s3vga;
-
- s3Set (s3vga, s3_hsync_control, hsync);
- s3Set (s3vga, s3_vsync_control, vsync);
- VgaFlush (&s3vga->card);
-}
-
-Bool
-s3DPMS (ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- s3CardInfo(pScreenPriv);
- S3Vga *s3vga = &s3c->s3vga;
-
- switch (mode) {
- case KD_DPMS_NORMAL:
- _s3SetSync (s3c, 0, 0);
- _s3SetBlank (s3c->s3, s3vga, FALSE);
- break;
- case KD_DPMS_STANDBY:
- _s3SetBlank (s3c->s3, s3vga, TRUE);
- _s3SetSync (s3c, 1, 0);
- break;
- case KD_DPMS_SUSPEND:
- _s3SetBlank (s3c->s3, s3vga, TRUE);
- _s3SetSync (s3c, 0, 1);
- break;
- case KD_DPMS_POWERDOWN:
- _s3SetBlank (s3c->s3, s3vga, TRUE);
- _s3SetSync (s3c, 1, 1);
- break;
- }
- return TRUE;
-}
-
-Bool
-s3InitScreen(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- KdScreenInfo *screen = pScreenPriv->screen;
- s3CardInfo (pScreenPriv);
- s3ScreenInfo (pScreenPriv);
- int ma, fb;
-
- if (screen->fb[1].depth)
- {
- FbOverlayScrPrivPtr pScrPriv = fbOverlayGetScrPriv(pScreen);
-
- for (ma = 0; s3s->fbmap[ma] >= 0; ma++)
- {
- fb = s3s->fbmap[ma];
- pScrPriv->layer[fb].key = s3s->fb[ma].chroma_key;
- }
- }
- return TRUE;
-}
-
-void
-s3ScreenFini (KdScreenInfo *screen)
-{
- S3ScreenInfo *s3s = (S3ScreenInfo *) screen->driver;
-
- xfree (s3s);
- screen->driver = 0;
-}
-
-void
-s3CardFini (KdCardInfo *card)
-{
- S3CardInfo *s3c = (S3CardInfo *) card->driver;
-
- KdUnmapDevice (s3c->frameBuffer, s3c->memory);
- KdUnmapDevice (s3c->registers, sizeof (S3) + PACKED_OFFSET);
- xfree (s3c);
- card->driver = 0;
-}
-
-KdCardFuncs s3Funcs = {
- s3CardInit,
- s3ScreenInit,
- s3InitScreen,
- s3Preserve,
- s3Enable,
- s3DPMS,
- s3Disable,
- s3Restore,
- s3ScreenFini,
- s3CardFini,
- s3CursorInit,
- s3CursorEnable,
- s3CursorDisable,
- s3CursorFini,
- s3RecolorCursor,
- s3DrawInit,
- s3DrawEnable,
- s3DrawSync,
- s3DrawDisable,
- s3DrawFini,
- s3GetColors,
- s3PutColors,
-};
diff --git a/hw/kdrive/savage/s3.h b/hw/kdrive/savage/s3.h
deleted file mode 100644
index d8db0ebbf..000000000
--- a/hw/kdrive/savage/s3.h
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifndef _S3_H_
-#define _S3_H_
-
-#include "kdrive.h"
-#include "s3reg.h"
-
-/* VESA Approved Register Definitions */
-
-/*
- * Linear Addressing 000 0000 - 0ff ffff (16m)
- * Image data transfer 100 0000 - 100 7fff (32k)
- * PCI config 100 8000 - 100 8043
- * Packed enhanced regs 100 8100 - 100 814a
- * Streams regs 100 8180 - 100 81ff
- * Current Y pos 100 82e8
- * CRT VGA 3b? regs 100 83b0 - 100 83bf
- * CRT VGA 3c? regs 100 83c0 - 100 83cf
- * CRT VGA 3d? regs 100 83d0 - 100 83df
- * Subsystem status (42e8h) 100 8504
- * Advanced function (42e8h) 100 850c
- * Enhanced regs 100 86e8 - 100 eeea
- * Local peripheral bus 100 ff00 - 100 ff5c
- *
- * We don't care about the image transfer or PCI regs, so
- * this structure starts at the packed enhanced regs
- */
-
-typedef volatile CARD32 VOL32;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD8 VOL8;
-
-typedef volatile struct _s3 {
- VOL32 alt_curxy; /* 8100 */
- VOL32 _pad0; /* 8104 */
- VOL32 alt_step; /* 8108 */
- VOL32 _pad1; /* 810c */
- VOL32 err_term; /* 8110 */
- VOL32 _pad2; /* 8114 */
- VOL32 cmd_gp_stat; /* 8118 */
- VOL32 short_stroke; /* 811c */
- VOL32 bg; /* 8120 */
- VOL32 fg; /* 8124 */
- VOL32 write_mask; /* 8128 */
- VOL32 read_mask; /* 812c */
- VOL32 color_cmp; /* 8130 */
- VOL32 alt_mix; /* 8134 */
- VOL32 scissors_tl; /* 8138 */
- VOL32 scissors_br; /* 813c */
-#if 0
- VOL16 pix_cntl; /* 8140 */
- VOL16 mult_misc2; /* 8142 */
-#else
- VOL32 pix_cntl_mult_misc2; /* 8140 */
-#endif
- VOL32 mult_misc_read_sel; /* 8144 */
- VOL32 alt_pcnt; /* 8148 min_axis_pcnt, maj_axis_pcnt */
- VOL8 _pad3a[0x1c]; /* 814c */
- VOL32 global_bitmap_1; /* 8168 */
- VOL32 global_bitmap_2; /* 816c */
- VOL32 primary_bitmap_1; /* 8170 */
- VOL32 primary_bitmap_2; /* 8174 */
- VOL32 secondary_bitmap_1; /* 8178 */
- VOL32 secondary_bitmap_2; /* 817c */
- VOL32 primary_stream_control; /* 8180 */
- VOL32 chroma_key_control; /* 8184 */
- VOL32 genlocking_control; /* 8188 */
- VOL8 _pad3b[0x4]; /* 818c */
- VOL32 secondary_stream_control; /* 8190 */
- VOL32 chroma_key_upper_bound; /* 8194 */
- VOL32 secondary_stream_h_scale; /* 8198 */
- VOL32 color_adjustment; /* 819c */
- VOL32 blend_control; /* 81a0 */
- VOL8 _pad3c[0x1c]; /* 81a4 */
- VOL32 primary_stream_addr_0; /* 81c0 */
- VOL32 primary_stream_addr_1; /* 81c4 */
- VOL32 primary_stream_stride; /* 81c8 */
- VOL32 secondary_stream_mbuf; /* 81cc */
- VOL32 secondary_stream_addr_0;/* 81d0 */
- VOL32 secondary_stream_addr_1;/* 81d4 */
- VOL32 secondary_stream_stride;/* 81d8 */
- VOL8 _pad81dc[4]; /* 81dc */
- VOL32 secondary_stream_vscale;/* 81e0 */
- VOL32 secondary_stream_vinit; /* 81e4 */
- VOL32 secondary_stream_scount;/* 81e8 */
- VOL32 streams_fifo; /* 81ec */
- VOL32 primary_stream_xy; /* 81f0 */
- VOL32 primary_stream_size; /* 81f4 */
- VOL32 secondary_stream_xy; /* 81f8 */
- VOL32 secondary_stream_size; /* 81fc */
- VOL8 _pad8200[0xe8]; /* 8200 */
- VOL32 cur_y; /* 82e8 */
- VOL8 _pad4[0x14]; /* 82ec */
- VOL32 primary_stream_mem; /* 8300 */
- VOL32 secondary_stream_mem; /* 8304 */
- VOL8 _pad8308[0xD2]; /* 8308 */
- VOL8 input_status_1; /* 83da */
- VOL8 _pad83db[0x131]; /* 83db */
- VOL32 adv_func_cntl; /* 850c */
- VOL8 _pad8510[0x5dd8]; /* 8510 */
- VOL32 pix_trans; /* e2e8 */
- VOL8 _pade2ec[0x3a92c]; /* e2ec */
- VOL32 cmd_overflow_buf_ptr; /* 48c18 */
- VOL8 _pad48c1c[0x8]; /* 48c1c */
- VOL32 bci_power_management; /* 48c24 */
- VOL8 _pad48c28[0x38]; /* 48c28 */
- VOL32 alt_status_0; /* 48c60 */
- VOL32 alt_status_1; /* 48c64 */
-} S3, *S3Ptr;
-
-#define VGA_STATUS_1_DTM 0x01
-#define VGA_STATUS_1_VSY 0x08
-
-#define DAC_MASK 0x03c6
-#define DAC_R_INDEX 0x03c7
-#define DAC_W_INDEX 0x03c8
-#define DAC_DATA 0x03c9
-#define DISP_STAT 0x02e8
-#define H_TOTAL 0x02e8
-#define H_DISP 0x06e8
-#define H_SYNC_STRT 0x0ae8
-#define H_SYNC_WID 0x0ee8
-#define V_TOTAL 0x12e8
-#define V_DISP 0x16e8
-#define V_SYNC_STRT 0x1ae8
-#define V_SYNC_WID 0x1ee8
-#define DISP_CNTL 0x22e8
-#define ADVFUNC_CNTL 0x4ae8
-#define SUBSYS_STAT 0x42e8
-#define SUBSYS_CNTL 0x42e8
-#define ROM_PAGE_SEL 0x46e8
-#define CUR_Y 0x82e8
-#define CUR_X 0x86e8
-#define DESTY_AXSTP 0x8ae8
-#define DESTX_DIASTP 0x8ee8
-#define ERR_TERM 0x92e8
-#define MAJ_AXIS_PCNT 0x96e8
-#define GP_STAT 0x9ae8
-#define CMD 0x9ae8
-#define SHORT_STROKE 0x9ee8
-#define BKGD_COLOR 0xa2e8
-#define FRGD_COLOR 0xa6e8
-#define WRT_MASK 0xaae8
-#define RD_MASK 0xaee8
-#define COLOR_CMP 0xb2e8
-#define BKGD_MIX 0xb6e8
-#define FRGD_MIX 0xbae8
-#define MULTIFUNC_CNTL 0xbee8
-#define MIN_AXIS_PCNT 0x0000
-#define SCISSORS_T 0x1000
-#define SCISSORS_L 0x2000
-#define SCISSORS_B 0x3000
-#define SCISSORS_R 0x4000
-#define MEM_CNTL 0x5000
-#define PATTERN_L 0x8000
-#define PATTERN_H 0x9000
-#define PIX_CNTL 0xa000
-#define CONTROL_MISC2 0xd000
-#define PIX_TRANS 0xe2e8
-
-/* Advanced Function Control Regsiter */
-#define CLKSEL 0x0004
-#define DISABPASSTHRU 0x0001
-
-/* Graphics Processor Status Register */
-
-#define GPNSLOT 13
-
-#define GPBUSY_1 0x0080
-#define GPBUSY_2 0x0040
-#define GPBUSY_3 0x0020
-#define GPBUSY_4 0x0010
-#define GPBUSY_5 0x0008
-#define GPBUSY_6 0x0004
-#define GPBUSY_7 0x0002
-#define GPBUSY_8 0x0001
-#define GPBUSY_9 0x8000
-#define GPBUSY_10 0x4000
-#define GPBUSY_11 0x2000
-#define GPBUSY_12 0x1000
-#define GPBUSY_13 0x0800
-
-#define GPEMPTY 0x0400
-#define GPBUSY 0x0200
-#define DATDRDY 0x0100
-
-/* Command Register */
-#define CMD_NOP 0x0000
-#define CMD_LINE 0x2000
-#define CMD_RECT 0x4000
-#define CMD_RECTV1 0x6000
-#define CMD_RECTV2 0x8000
-#define CMD_LINEAF 0xa000
-#define CMD_BITBLT 0xc000
-#define CMD_PATBLT 0xe000
-#define CMD_OP_MSK 0xe000
-#define BYTSEQ 0x1000
-#define _32BITNOPAD 0x0600
-#define _32BIT 0x0400
-#define _16BIT 0x0200
-#define _8BIT 0x0000
-#define PCDATA 0x0100
-#define INC_Y 0x0080
-#define YMAJAXIS 0x0040
-#define INC_X 0x0020
-#define DRAW 0x0010
-#define LINETYPE 0x0008
-#define LASTPIX 0x0004 /* Draw last pixel in line */
-#define PLANAR 0x0002
-#define WRTDATA 0x0001
-
-/* Background Mix Register */
-#define BSS_BKGDCOL 0x0000
-#define BSS_FRGDCOL 0x0020
-#define BSS_PCDATA 0x0040
-#define BSS_BITBLT 0x0060
-
-/* Foreground Mix Register */
-#define FSS_BKGDCOL 0x0000
-#define FSS_FRGDCOL 0x0020
-#define FSS_PCDATA 0x0040
-#define FSS_BITBLT 0x0060
-
-/* The Mixes */
-#define MIX_MASK 0x001f
-
-#define MIX_NOT_DST 0x0000
-#define MIX_0 0x0001
-#define MIX_1 0x0002
-#define MIX_DST 0x0003
-#define MIX_NOT_SRC 0x0004
-#define MIX_XOR 0x0005
-#define MIX_XNOR 0x0006
-#define MIX_SRC 0x0007
-#define MIX_NAND 0x0008
-#define MIX_NOT_SRC_OR_DST 0x0009
-#define MIX_SRC_OR_NOT_DST 0x000a
-#define MIX_OR 0x000b
-#define MIX_AND 0x000c
-#define MIX_SRC_AND_NOT_DST 0x000d
-#define MIX_NOT_SRC_AND_DST 0x000e
-#define MIX_NOR 0x000f
-
-#define MIX_MIN 0x0010
-#define MIX_DST_MINUS_SRC 0x0011
-#define MIX_SRC_MINUS_DST 0x0012
-#define MIX_PLUS 0x0013
-#define MIX_MAX 0x0014
-#define MIX_HALF__DST_MINUS_SRC 0x0015
-#define MIX_HALF__SRC_MINUS_DST 0x0016
-#define MIX_AVERAGE 0x0017
-#define MIX_DST_MINUS_SRC_SAT 0x0018
-#define MIX_SRC_MINUS_DST_SAT 0x001a
-#define MIX_HALF__DST_MINUS_SRC_SAT 0x001c
-#define MIX_HALF__SRC_MINUS_DST_SAT 0x001e
-#define MIX_AVERAGE_SAT 0x001f
-
-/* Pixel Control Register */
-#define MIXSEL_FRGDMIX 0x0000
-#define MIXSEL_PATT 0x0040
-#define MIXSEL_EXPPC 0x0080
-#define MIXSEL_EXPBLT 0x00c0
-#define COLCMPOP_F 0x0000
-#define COLCMPOP_T 0x0008
-#define COLCMPOP_GE 0x0010
-#define COLCMPOP_LT 0x0018
-#define COLCMPOP_NE 0x0020
-#define COLCMPOP_EQ 0x0028
-#define COLCMPOP_LE 0x0030
-#define COLCMPOP_GT 0x0038
-#define PLANEMODE 0x0004
-
-/* Multifunction Control Misc 8144 */
-#define MISC_DST_BA_0 (0x0 << 0)
-#define MISC_DST_BA_1 (0x1 << 0)
-#define MISC_DST_BA_2 (0x2 << 0)
-#define MISC_DST_BA_3 (0x3 << 0)
-#define MISC_SRC_BA_0 (0x0 << 2)
-#define MISC_SRC_BA_1 (0x1 << 2)
-#define MISC_SRC_BA_2 (0x2 << 2)
-#define MISC_SRC_BA_3 (0x3 << 2)
-#define MISC_RSF (1 << 4)
-#define MISC_EXT_CLIP (1 << 5)
-#define MISC_SRC_NE (1 << 7)
-#define MISC_ENB_CMP (1 << 8)
-#define MISC_32B (1 << 9)
-#define MISC_DC (1 << 11)
-#define MISC_INDEX_E (0xe << 12)
-
-#define S3_SAVAGE4_SLOTS 0x0001ffff
-#define S3_SAVAGE4_2DI 0x00800000
-
-#define _s3WaitLoop(s3,mask,value){ \
- int __loop = 1000000; \
- while (((s3)->alt_status_0 & (mask)) != (value)) \
- if (--__loop == 0) { \
- ErrorF ("savage wait loop failed 0x%x\n", s3->alt_status_0); \
- break; \
- } \
-}
-
-#define S3_SAVAGE4_ROOM 10
-
-#define _s3WaitSlots(s3,n) { \
- int __loop = 1000000; \
- while (((s3)->alt_status_0 & S3_SAVAGE4_SLOTS) >= S3_SAVAGE4_ROOM-(n)) \
- if (--__loop == 0) { \
- ErrorF ("savage wait loop failed 0x%x\n", s3->alt_status_0); \
- break; \
- } \
-}
-
-#define _s3WaitEmpty(s3) _s3WaitLoop(s3,S3_SAVAGE4_SLOTS, 0)
-#define _s3WaitIdleEmpty(s3) _s3WaitLoop(s3,S3_SAVAGE4_SLOTS|S3_SAVAGE4_2DI, S3_SAVAGE4_2DI)
-#define _s3WaitIdle(s3) _s3WaitLoop(s3,S3_SAVAGE4_2DI, S3_SAVAGE4_2DI)
-
-typedef struct _s3Cursor {
- int width, height;
- int xhot, yhot;
- Bool has_cursor;
- CursorPtr pCursor;
- Pixel source, mask;
-} S3Cursor;
-
-typedef struct _s3PatternCache {
- int id;
- int x, y;
-} S3PatternCache;
-
-typedef struct _s3Patterns {
- S3PatternCache *cache;
- int ncache;
- int last_used;
- int last_id;
-} S3Patterns;
-
-#define S3_CLOCK_REF 14318 /* KHz */
-
-#define S3_CLOCK(m,n,r) ((S3_CLOCK_REF * ((m) + 2)) / (((n) + 2) * (1 << (r))))
-
-#define S3_MAX_CLOCK 150000 /* KHz */
-
-typedef struct _s3Timing {
- /* label */
- int horizontal;
- int vertical;
- int rate;
- /* horizontal timing */
- int hfp; /* front porch */
- int hbp; /* back porch */
- int hblank; /* blanking */
- /* vertical timing */
- int vfp; /* front porch */
- int vbp; /* back porch */
- int vblank; /* blanking */
- /* clock values */
- int dac_m;
- int dac_n;
- int dac_r;
-} S3Timing;
-
-#define S3_TEXT_SAVE (64*1024)
-
-typedef struct _s3Save {
- CARD8 cursor_fg;
- CARD8 cursor_bg;
- CARD8 lock1;
- CARD8 lock2;
- CARD8 locksrtc;
- CARD8 clock_mode;
- CARD32 alt_mix;
- CARD32 write_mask;
- CARD32 fg;
- CARD32 bg;
- CARD32 global_bitmap_1;
- CARD32 global_bitmap_2;
- CARD32 adv_func_cntl;
- CARD32 primary_bitmap_1;
- CARD32 primary_bitmap_2;
- CARD32 secondary_bitmap_1;
- CARD32 secondary_bitmap_2;
- CARD32 primary_stream_control;
- CARD32 blend_control;
- CARD32 primary_stream_addr_0;
- CARD32 primary_stream_addr_1;
- CARD32 primary_stream_stride;
- CARD32 primary_stream_xy;
- CARD32 primary_stream_size;
- CARD32 primary_stream_mem;
- CARD32 secondary_stream_xy;
- CARD32 secondary_stream_size;
- CARD32 streams_fifo;
- CARD8 text_save[S3_TEXT_SAVE];
-} S3Save;
-
-typedef struct _s3CardInfo {
- S3Ptr s3; /* pointer to register structure */
- int memory; /* amount of memory */
- CARD8 *frameBuffer; /* pointer to frame buffer */
- CARD8 *registers; /* pointer to register map */
- S3Vga s3vga;
- S3Save save;
- Bool need_sync;
- Bool bios_initialized; /* whether the bios has been run */
-} S3CardInfo;
-
-typedef struct _s3FbInfo {
- CARD8 *offscreen; /* pointer to offscreen area */
- int offscreen_y; /* top y coordinate of offscreen area */
- int offscreen_x; /* top x coordinate of offscreen area */
- int offscreen_width; /* width of offscreen area */
- int offscreen_height; /* height of offscreen area */
- S3Patterns patterns;
- CARD32 bitmap_offset;
- int accel_stride;
- int accel_bpp;
- CARD32 chroma_key;
-} S3FBInfo;
-
-typedef struct _s3ScreenInfo {
- CARD8 *cursor_base; /* pointer to cursor area */
- S3Cursor cursor;
- Bool managing_border;
- Bool use_streams;
- int primary_depth;
- int current_ma;
- CARD32 border_pixel;
- S3FBInfo fb[KD_MAX_FB];
- RegionRec region[KD_MAX_FB];
- int fbmap[KD_MAX_FB+1]; /* map from fb to stream */
-} S3ScreenInfo;
-
-#define getS3CardInfo(kd) ((S3CardInfo *) ((kd)->card->driver))
-#define s3CardInfo(kd) S3CardInfo *s3c = getS3CardInfo(kd)
-
-#define getS3ScreenInfo(kd) ((S3ScreenInfo *) ((kd)->screen->driver))
-#define s3ScreenInfo(kd) S3ScreenInfo *s3s = getS3ScreenInfo(kd)
-
-Bool s3CardInit (KdCardInfo *);
-Bool s3ScreenInit (KdScreenInfo *);
-Bool s3Enable (ScreenPtr pScreen);
-void s3Disable (ScreenPtr pScreen);
-void s3Fini (ScreenPtr pScreen);
-
-Bool s3CursorInit (ScreenPtr pScreen);
-void s3CursorEnable (ScreenPtr pScreen);
-void s3CursorDisable (ScreenPtr pScreen);
-void s3CursorFini (ScreenPtr pScreen);
-void s3RecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdefs);
-
-void s3DumbCopyWindow (WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc);
-
-Bool s3DrawInit (ScreenPtr pScreen);
-void s3DrawEnable (ScreenPtr pScreen);
-void s3DrawSync (ScreenPtr pScreen);
-void s3DrawDisable (ScreenPtr pScreen);
-void s3DrawFini (ScreenPtr pScreen);
-
-void s3GetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs);
-void s3PutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs);
-
-void S3InitCard (KdCardAttr *attr);
-
-void s3GetClock (int target, int *Mp, int *Np, int *Rp, int maxM, int maxN, int maxR, int minVco);
-
-extern KdCardFuncs s3Funcs;
-
-/*
- * Wait for the begining of the retrace interval
- */
-
-#define S3_RETRACE_LOOP_CHECK if (++_loop_count > 300000) {\
- DRAW_DEBUG ((DEBUG_FAILURE, "S3 wait loop failed at %s:%d", \
- __FILE__, __LINE__)); \
- break; \
-}
-
-#define DRAW_DEBUG(a)
-
-#define _s3WaitVRetrace(s3vga) { \
- int _loop_count; \
- _loop_count = 0; \
- while (s3GetImm(s3vga, s3_vertical_sync_active) != 0) S3_RETRACE_LOOP_CHECK; \
- _loop_count = 0; \
- while (s3GetImm(s3vga, s3_vertical_sync_active) == 0) S3_RETRACE_LOOP_CHECK; \
-}
-#define _s3WaitVRetraceFast(s3) { \
- int _loop_count; \
- _loop_count = 0; \
- while (s3->input_status_1 & 8) S3_RETRACE_LOOP_CHECK; \
- _loop_count = 0; \
- while ((s3->input_status_1 & 8) == 0) S3_RETRACE_LOOP_CHECK; \
-}
-/*
- * Wait for the begining of the retrace interval
- */
-#define _s3WaitVRetraceEnd(s3vga) { \
- int _loop_count; \
- _loop_count = 0; \
- while (s3GetImm(s3vga, s3_vertical_sync_active) == 0) S3_RETRACE_LOOP_CHECK; \
- _loop_count = 0; \
- while (s3GetImm(s3vga, s3_vertical_sync_active) != 0) S3_RETRACE_LOOP_CHECK; \
-}
-
-#define S3_CURSOR_WIDTH 64
-#define S3_CURSOR_HEIGHT 64
-#define S3_CURSOR_SIZE ((S3_CURSOR_WIDTH * S3_CURSOR_HEIGHT + 7) / 8)
-
-#define S3_TILE_SIZE 8
-
-#endif /* _S3_H_ */
diff --git a/hw/kdrive/savage/s3.nick b/hw/kdrive/savage/s3.nick
deleted file mode 100644
index 8f6791f87..000000000
--- a/hw/kdrive/savage/s3.nick
+++ /dev/null
@@ -1,41 +0,0 @@
-/* $RCSId: $ */
-
-global f_ref = 14318000;
-
-function s3_clock (m, n, r)
-{
- return f_ref * (m + 2) / ((n + 2) * (2 ^ r));
-}
-
-function s3_near (f1, f2)
-{
- return abs (f1 - f2) < f1 / 10;
-}
-
-function s3_clocks (f)
-{
- auto m, n, r, ft;
- auto dist, min_dist;
- auto min_m, min_n, min_r;
-
- min_dist = f / 5;
- for (r = 0; r <= 3; r++)
- for (n = 0; n <= 31; n++)
- for (m = 0; m <= 127; m++)
- {
- ft = s3_clock (m, n, r);
- if (s3_near (ft, f))
- printf ("m %d n %d r %d = %d\n",
- m, n, r, ft);
- dist = abs (f - ft);
- if (dist < min_dist)
- {
- min_dist = dist;
- min_m = m;
- min_n = n;
- min_r = r;
- }
- }
- printf ("m %d n %d r %d f %d dist %d\n",
- min_m, min_n, min_r, s3_clock(min_m, min_n, min_r), min_dist);
-}
diff --git a/hw/kdrive/savage/s3clock.c b/hw/kdrive/savage/s3clock.c
deleted file mode 100644
index 9e3f8b3e0..000000000
--- a/hw/kdrive/savage/s3clock.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-
-/*
- * Clock synthesis:
- *
- * f_out = f_ref * ((M + 2) / ((N + 2) * (1 << R)))
- *
- * Constraints:
- *
- * 1. 135MHz <= f_ref * ((M + 2) / (N + 2)) <= 270 MHz
- * 2. N >= 1
- *
- * Vertical refresh rate = clock / ((hsize + hblank) * (vsize + vblank))
- * Horizontal refresh rate = clock / (hsize + hblank)
- */
-
-/* all in kHz */
-
-void
-s3GetClock (int target, int *Mp, int *Np, int *Rp, int maxM, int maxN, int maxR, int minVco)
-{
- int M, N, R, bestM, bestN;
- int f_vco, f_out;
- int err, abserr, besterr;
-
- /*
- * Compute correct R value to keep VCO in range
- */
- for (R = 0; R <= maxR; R++)
- {
- f_vco = target * (1 << R);
- if (f_vco >= minVco)
- break;
- }
-
- /* M = f_out / f_ref * ((N + 2) * (1 << R)); */
- besterr = target;
- for (N = 1; N <= maxN; N++)
- {
- M = ((target * (N + 2) * (1 << R) + (S3_CLOCK_REF/2)) + S3_CLOCK_REF/2) / S3_CLOCK_REF - 2;
- if (0 <= M && M <= maxM)
- {
- f_out = S3_CLOCK(M,N,R);
- err = target - f_out;
- if (err < 0)
- err = -err;
- if (err < besterr)
- {
- besterr = err;
- bestM = M;
- bestN = N;
- }
- }
- }
- *Mp = bestM;
- *Np = bestN;
- *Rp = R;
-}
diff --git a/hw/kdrive/savage/s3cmap.c b/hw/kdrive/savage/s3cmap.c
deleted file mode 100644
index 094a24755..000000000
--- a/hw/kdrive/savage/s3cmap.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-
-void
-s3GetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- s3CardInfo(pScreenPriv);
- S3Vga *s3vga = &s3c->s3vga;
-
- while (ndef--)
- {
- s3SetImm (s3vga, s3_dac_read_index, pdefs->pixel);
- pdefs->red = s3GetImm (s3vga, s3_dac_data) << 8;
- pdefs->green = s3GetImm (s3vga, s3_dac_data) << 8;
- pdefs->blue = s3GetImm (s3vga, s3_dac_data) << 8;
- pdefs++;
- }
-}
-
-#ifndef S3_TRIO
-#define Shift(v,d) ((d) < 0 ? ((v) >> (-d)) : ((v) << (d)))
-
-void
-s3SetTrueChromaKey (ScreenPtr pScreen, int pfb, xColorItem *pdef)
-{
- FbOverlayScrPrivPtr pScrPriv = fbOverlayGetScrPriv(pScreen);
- KdScreenPriv(pScreen);
- s3ScreenInfo(pScreenPriv);
- int fb, ma;
- CARD32 key;
- int r, g, b;
-
- for (ma = 0; s3s->fbmap[ma] >= 0; ma++)
- {
- fb = s3s->fbmap[ma];
- if (fb != pfb && pScreenPriv->screen->fb[fb].redMask)
- {
- r = KdComputeCmapShift (pScreenPriv->screen->fb[fb].redMask);
- g = KdComputeCmapShift (pScreenPriv->screen->fb[fb].greenMask);
- b = KdComputeCmapShift (pScreenPriv->screen->fb[fb].blueMask);
- key = ((Shift(pdef->red,r) & pScreenPriv->screen->fb[fb].redMask) |
- (Shift(pdef->green,g) & pScreenPriv->screen->fb[fb].greenMask) |
- (Shift(pdef->blue,b) & pScreenPriv->screen->fb[fb].blueMask));
- if (pScrPriv->layer[fb].key != key)
- {
- pScrPriv->layer[fb].key = key;
- (*pScrPriv->PaintKey) (&pScrPriv->layer[fb].u.run.pixmap->drawable,
- &pScrPriv->layer[pfb].u.run.region,
- pScrPriv->layer[fb].key, fb);
- }
- }
- }
-}
-#endif
-
-void
-s3PutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- s3CardInfo(pScreenPriv);
- s3ScreenInfo(pScreenPriv);
- S3Vga *s3vga = &s3c->s3vga;
- xColorItem *chroma = 0;
- CARD32 key;
-
-#if 0
- _s3WaitVRetrace (s3vga);
-#else
- S3Ptr s3 = s3c->s3;
- _s3WaitVRetraceFast(s3);
-#endif
-#ifndef S3_TRIO
- if (pScreenPriv->screen->fb[1].depth)
- {
- FbOverlayScrPrivPtr pScrPriv = fbOverlayGetScrPriv(pScreen);
- key = pScrPriv->layer[fb].key;
- }
-#endif
- else
- key = ~0;
- while (ndef--)
- {
- if (pdefs->pixel == key)
- chroma = pdefs;
- s3SetImm (s3vga, s3_dac_write_index, pdefs->pixel);
- s3SetImm (s3vga, s3_dac_data, pdefs->red >> 8);
- s3SetImm (s3vga, s3_dac_data, pdefs->green >> 8);
- s3SetImm (s3vga, s3_dac_data, pdefs->blue >> 8);
- pdefs++;
- }
-#ifndef S3_TRIO
- if (chroma && !pScreenPriv->closed)
- s3SetTrueChromaKey (pScreen, fb, chroma);
-#endif
-}
-
diff --git a/hw/kdrive/savage/s3curs.c b/hw/kdrive/savage/s3curs.c
deleted file mode 100644
index 5928989a6..000000000
--- a/hw/kdrive/savage/s3curs.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-#include "s3draw.h"
-#include "cursorstr.h"
-
-#define SetupCursor(s) KdScreenPriv(s); \
- s3CardInfo(pScreenPriv); \
- s3ScreenInfo(pScreenPriv); \
- S3Ptr s3 = s3c->s3; \
- S3Vga *s3vga = &s3c->s3vga; \
- S3Cursor *pCurPriv = &s3s->cursor
-
-static void
-_s3MoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CARD8 xlow, xhigh, ylow, yhigh;
- CARD8 xoff, yoff;
-
- DRAW_DEBUG ((DEBUG_CURSOR, "s3MoveCursor %d %d", x, y));
-
- x -= pCurPriv->xhot;
- xoff = 0;
- if (x < 0)
- {
- xoff = -x;
- x = 0;
- }
- y -= pCurPriv->yhot;
- yoff = 0;
- if (y < 0)
- {
- yoff = -y;
- y = 0;
- }
- xlow = (CARD8) x;
- xhigh = (CARD8) (x >> 8);
- ylow = (CARD8) y;
- yhigh = (CARD8) (y >> 8);
-
-
- /* This is the recommended order to move the cursor */
-
- s3SetImm (s3vga, s3_cursor_xhigh, xhigh);
- s3SetImm (s3vga, s3_cursor_xlow, xlow);
- s3SetImm (s3vga, s3_cursor_ylow, ylow);
- s3SetImm (s3vga, s3_cursor_xoff, xoff);
- s3SetImm (s3vga, s3_cursor_yoff, yoff);
- s3SetImm (s3vga, s3_cursor_yhigh, yhigh);
-
- DRAW_DEBUG ((DEBUG_CURSOR, "s3MoveCursor done"));
-}
-
-static void
-s3MoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor (pScreen);
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- _s3MoveCursor (pScreen, x, y);
-}
-
-#define S3Trunc(c) (((c) >> 8) & 0xff)
-
-#define S3CursColor(r,g,b) ((S3Trunc(r) << 16) | \
- (S3Trunc(g) << 8) | \
- (S3Trunc(b)))
-
-static void
-s3AllocCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
-
- if (s3s->use_streams)
- {
- pCurPriv->source = S3CursColor(pCursor->foreRed,
- pCursor->foreGreen,
- pCursor->foreBlue);
- pCurPriv->mask = S3CursColor(pCursor->backRed,
- pCursor->backGreen,
- pCursor->backBlue);
- }
- else
- {
- KdAllocateCursorPixels (pScreen, 0, pCursor,
- &pCurPriv->source, &pCurPriv->mask);
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 4:
- pCurPriv->source |= pCurPriv->source << 4;
- pCurPriv->mask |= pCurPriv->mask << 4;
- case 8:
- pCurPriv->source |= pCurPriv->source << 8;
- pCurPriv->mask |= pCurPriv->mask << 8;
- case 16:
- pCurPriv->source |= pCurPriv->source << 16;
- pCurPriv->mask |= pCurPriv->mask << 16;
- }
- }
-}
-
-static void
-_s3SetCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- /* set foreground */
- /* Reset cursor color stack pointers */
- (void) s3GetImm (s3vga, s3_cursor_enable);
- s3SetImm (s3vga, s3_cursor_fg, pCurPriv->source);
- s3SetImm (s3vga, s3_cursor_fg, pCurPriv->source >> 8);
- s3SetImm (s3vga, s3_cursor_fg, pCurPriv->source >> 16);
-
- /* set background */
- /* Reset cursor color stack pointers */
- (void) s3GetImm (s3vga, s3_cursor_enable);
- s3SetImm (s3vga, s3_cursor_bg, pCurPriv->mask);
- s3SetImm (s3vga, s3_cursor_bg, pCurPriv->mask >> 8);
- s3SetImm (s3vga, s3_cursor_bg, pCurPriv->mask >> 16);
-}
-
-void
-s3RecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- xColorItem sourceColor, maskColor;
-
- if (!pCurPriv->has_cursor || !pCursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pdef)
- {
- while (ndef)
- {
- if (pdef->pixel == pCurPriv->source ||
- pdef->pixel == pCurPriv->mask)
- break;
- ndef--;
- }
- if (!ndef)
- return;
- }
- s3AllocCursorColors (pScreen);
- _s3SetCursorColors (pScreen);
-}
-
-static void
-s3LoadCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- int w, h;
- unsigned char r[2], g[2], b[2];
- unsigned long *ram;
- unsigned long *msk, *mskLine, *src, *srcLine;
- unsigned long and, xor;
- int i, j;
- int cursor_address;
- int wsrc;
- unsigned char ramdac_control_;
-
- /*
- * Allocate new colors
- */
- s3AllocCursorColors (pScreen);
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- /*
- * Stick new image into cursor memory
- */
- ram = (unsigned long *) s3s->cursor_base;
- mskLine = (unsigned long *) bits->mask;
- srcLine = (unsigned long *) bits->source;
-
- h = bits->height;
- if (h > S3_CURSOR_HEIGHT)
- h = S3_CURSOR_HEIGHT;
-
- wsrc = BitmapBytePad(bits->width) / 4; /* ulongs per line */
-
- for (i = 0; i < S3_CURSOR_HEIGHT; i++) {
- msk = mskLine;
- src = srcLine;
- mskLine += wsrc;
- srcLine += wsrc;
- for (j = 0; j < S3_CURSOR_WIDTH / 32; j++) {
-
- unsigned long m, s;
-
- if (i < h && j < wsrc)
- {
- m = *msk++;
- s = *src++;
- xor = m & s;
- and = ~m;
- }
- else
- {
- and = 0xffffffff;
- xor = 0x00000000;
- }
-
- S3AdjustBits32(and);
- S3AdjustBits32(xor);
-#define S3SwapNibbles(x) ((x) = (((x) & 0x0f0f0f0f) << 4 | \
- ((x) >> 4) & 0x0f0f0f0f))
- if (s3s->use_streams)
- {
- S3SwapNibbles(and);
- S3SwapNibbles(xor);
- }
- *ram++ = (and & 0xffff) | (xor << 16);
- *ram++ = (and >> 16) | (xor & 0xffff0000);
- }
- }
-
- _s3WaitIdle (s3);
-
- /* Set new color */
- _s3SetCursorColors (pScreen);
-
- /* Enable the cursor */
- s3SetImm (s3vga, s3_cursor_ms_x11, 0);
- s3SetImm (s3vga, s3_cursor_enable, 1);
-
- /* Wait for VRetrace to make sure the position is read */
- _s3WaitVRetrace (s3vga);
-
- /* Move to new position */
- _s3MoveCursor (pScreen, x, y);
-}
-
-static void
-s3UnloadCursor (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- /* Disable cursor */
- s3SetImm (s3vga, s3_cursor_enable, 0);
-}
-
-static Bool
-s3RealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- SetupCursor(pScreen);
-
- if (!pScreenPriv->enabled)
- return TRUE;
-
- /* miRecolorCursor does this */
- if (pCurPriv->pCursor == pCursor)
- {
- if (pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- s3LoadCursor (pScreen, x, y);
- }
- }
- return TRUE;
-}
-
-static Bool
-s3UnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- return TRUE;
-}
-
-static void
-s3SetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
-{
- SetupCursor(pScreen);
-
- pCurPriv->pCursor = pCursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCursor)
- s3LoadCursor (pScreen, x, y);
- else
- s3UnloadCursor (pScreen);
-}
-
-miPointerSpriteFuncRec s3PointerSpriteFuncs = {
- s3RealizeCursor,
- s3UnrealizeCursor,
- s3SetCursor,
- s3MoveCursor,
-};
-
-static void
-s3QueryBestSize (int class,
- unsigned short *pwidth, unsigned short *pheight,
- ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- switch (class)
- {
- case CursorShape:
- if (*pwidth > pCurPriv->width)
- *pwidth = pCurPriv->width;
- if (*pheight > pCurPriv->height)
- *pheight = pCurPriv->height;
- if (*pwidth > pScreen->width)
- *pwidth = pScreen->width;
- if (*pheight > pScreen->height)
- *pheight = pScreen->height;
- break;
- default:
- fbQueryBestSize (class, pwidth, pheight, pScreen);
- break;
- }
-}
-
-Bool
-s3CursorInit (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!s3s->cursor_base)
- {
- DRAW_DEBUG ((DEBUG_CURSOR,"Not enough screen memory for cursor %d", s3d->memory));
- pCurPriv->has_cursor = FALSE;
- return FALSE;
- }
-
- pCurPriv->width = S3_CURSOR_WIDTH;
- pCurPriv->height= S3_CURSOR_HEIGHT;
- pScreen->QueryBestSize = s3QueryBestSize;
- miPointerInitialize (pScreen,
- &s3PointerSpriteFuncs,
- &kdPointerScreenFuncs,
- FALSE);
- pCurPriv->has_cursor = TRUE;
- pCurPriv->pCursor = NULL;
- return TRUE;
-}
-
-void
-s3CursorEnable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- DRAW_DEBUG ((DEBUG_INIT, "s3CursorEnable"));
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- s3LoadCursor (pScreen, x, y);
- }
- else
- s3UnloadCursor (pScreen);
- }
-}
-
-void
-s3CursorDisable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- s3UnloadCursor (pScreen);
- }
- }
-}
-
-void
-s3CursorFini (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- pCurPriv->pCursor = NULL;
-}
diff --git a/hw/kdrive/savage/s3draw.c b/hw/kdrive/savage/s3draw.c
deleted file mode 100644
index da0d6849f..000000000
--- a/hw/kdrive/savage/s3draw.c
+++ /dev/null
@@ -1,3114 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-#include "s3draw.h"
-
-#include "Xmd.h"
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "fontstruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-
-/*
- * Map X rops to S3 rops
- */
-
-short s3alu[16] = {
- MIX_0,
- MIX_AND,
- MIX_SRC_AND_NOT_DST,
- MIX_SRC,
- MIX_NOT_SRC_AND_DST,
- MIX_DST,
- MIX_XOR,
- MIX_OR,
- MIX_NOR,
- MIX_XNOR,
- MIX_NOT_DST,
- MIX_SRC_OR_NOT_DST,
- MIX_NOT_SRC,
- MIX_NOT_SRC_OR_DST,
- MIX_NAND,
- MIX_1
-};
-
-/*
- * Handle pixel transfers
- */
-
-#define BURST
-#ifdef BURST
-#define PixTransDeclare VOL32 *pix_trans_base = (VOL32 *) (s3c->registers),\
- *pix_trans = pix_trans_base
-#define PixTransStart(n) if (pix_trans + (n) > pix_trans_base + 8192) pix_trans = pix_trans_base
-#define PixTransStore(t) *pix_trans++ = (t)
-#else
-#define PixTransDeclare VOL32 *pix_trans = &s3->pix_trans
-#define PixTransStart(n)
-#define PixTransStore(t) *pix_trans = (t)
-#endif
-
-DevPrivateKey s3GCPrivateKey = &s3GCPrivateKey;
-DevPrivateKey s3WindowPrivateKey = &s3WindowPrivateKey;
-
-/*
- s3DoBitBlt
- =============
- Bit Blit for all window to window blits.
-*/
-
-#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3))
-
-void
-s3CopyNtoN (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- GCPtr pGC,
- BoxPtr pbox,
- int nbox,
- int dx,
- int dy,
- Bool reverse,
- Bool upsidedown,
- Pixel bitplane,
- void *closure)
-{
- SetupS3(pDstDrawable->pScreen);
- int srcX, srcY, dstX, dstY;
- int w, h;
- int flags;
-
- if (sourceInvarient (pGC->alu))
- {
- s3FillBoxSolid (pDstDrawable, nbox, pbox, 0, pGC->alu, pGC->planemask);
- return;
- }
-
- s3SetGlobalBitmap (pDstDrawable->pScreen, s3GCMap (pGC));
- _s3SetBlt(s3,pGC->alu,pGC->planemask);
- DRAW_DEBUG ((DEBUG_RENDER, "s3CopyNtoN alu %d planemask 0x%x",
- pGC->alu, pGC->planemask));
- while (nbox--)
- {
- w = pbox->x2 - pbox->x1;
- h = pbox->y2 - pbox->y1;
- flags = 0;
- if (reverse)
- {
- dstX = pbox->x2 - 1;
- }
- else
- {
- dstX = pbox->x1;
- flags |= INC_X;
- }
- srcX = dstX + dx;
-
- if (upsidedown)
- {
- dstY = pbox->y2 - 1;
- }
- else
- {
- dstY = pbox->y1;
- flags |= INC_Y;
- }
- srcY = dstY + dy;
-
- _s3Blt (s3, srcX, srcY, dstX, dstY, w, h, flags);
- pbox++;
- }
- MarkSyncS3 (pSrcDrawable->pScreen);
-}
-
-RegionPtr
-s3CopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
- int srcx, int srcy, int width, int height, int dstx, int dsty)
-{
- SetupS3(pDstDrawable->pScreen);
-
- if (pSrcDrawable->type == DRAWABLE_WINDOW &&
- pDstDrawable->type == DRAWABLE_WINDOW)
- {
- return fbDoCopy (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, s3CopyNtoN, 0, 0);
- }
- return KdCheckCopyArea (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height, dstx, dsty);
-}
-
-typedef struct _s31toNargs {
- unsigned long copyPlaneFG, copyPlaneBG;
- Bool opaque;
-} s31toNargs;
-
-void
-_s3Stipple (S3CardInfo *s3c,
- FbStip *psrcBase,
- FbStride widthSrc,
- int srcx,
- int srcy,
- int dstx,
- int dsty,
- int width,
- int height)
-{
- S3Ptr s3 = s3c->s3;
- FbStip *psrcLine, *psrc;
- FbStride widthRest;
- FbStip bits, tmp, lastTmp;
- int leftShift, rightShift;
- int nl, nlMiddle;
- int r;
- PixTransDeclare;
-
- /* Compute blt address and parameters */
- psrc = psrcBase + srcy * widthSrc + (srcx >> 5);
- nlMiddle = (width + 31) >> 5;
- leftShift = srcx & 0x1f;
- rightShift = 32 - leftShift;
- widthRest = widthSrc - nlMiddle;
-
- _s3PlaneBlt(s3,dstx,dsty,width,height);
-
- if (leftShift == 0)
- {
- while (height--)
- {
- nl = nlMiddle;
- PixTransStart(nl);
- while (nl--)
- {
- tmp = *psrc++;
- S3AdjustBits32 (tmp);
- PixTransStore (tmp);
- }
- psrc += widthRest;
- }
- }
- else
- {
- widthRest--;
- while (height--)
- {
- bits = *psrc++;
- nl = nlMiddle;
- PixTransStart(nl);
- while (nl--)
- {
- tmp = FbStipLeft(bits, leftShift);
- bits = *psrc++;
- tmp |= FbStipRight(bits, rightShift);
- S3AdjustBits32(tmp);
- PixTransStore (tmp);
- }
- psrc += widthRest;
- }
- }
-}
-
-void
-s3Copy1toN (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- GCPtr pGC,
- BoxPtr pbox,
- int nbox,
- int dx,
- int dy,
- Bool reverse,
- Bool upsidedown,
- Pixel bitplane,
- void *closure)
-{
- SetupS3(pDstDrawable->pScreen);
-
- s31toNargs *args = closure;
- int dstx, dsty;
- FbStip *psrcBase;
- FbStride widthSrc;
- int srcBpp;
- int srcXoff, srcYoff;
-
- if (args->opaque && sourceInvarient (pGC->alu))
- {
- s3FillBoxSolid (pDstDrawable, nbox, pbox,
- pGC->bgPixel, pGC->alu, pGC->planemask);
- return;
- }
-
- s3SetGlobalBitmap (pDstDrawable->pScreen, s3GCMap (pGC));
- fbGetStipDrawable (pSrcDrawable, psrcBase, widthSrc, srcBpp, srcXoff, srcYoff);
-
- if (args->opaque)
- {
- _s3SetOpaquePlaneBlt(s3,pGC->alu,pGC->planemask,args->copyPlaneFG,
- args->copyPlaneBG);
- }
- else
- {
- _s3SetTransparentPlaneBlt (s3, pGC->alu,
- pGC->planemask, args->copyPlaneFG);
- }
-
- while (nbox--)
- {
- dstx = pbox->x1;
- dsty = pbox->y1;
-
- _s3Stipple (s3c,
- psrcBase, widthSrc,
- dstx + dx - srcXoff, dsty + dy - srcYoff,
- dstx, dsty,
- pbox->x2 - dstx, pbox->y2 - dsty);
- pbox++;
- }
- MarkSyncS3 (pDstDrawable->pScreen);
-}
-
-RegionPtr
-s3CopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
- int srcx, int srcy, int width, int height,
- int dstx, int dsty, unsigned long bitPlane)
-{
- SetupS3 (pDstDrawable->pScreen);
- RegionPtr ret;
- s31toNargs args;
-
- if (pDstDrawable->type == DRAWABLE_WINDOW &&
- pSrcDrawable->depth == 1)
- {
- args.copyPlaneFG = pGC->fgPixel;
- args.copyPlaneBG = pGC->bgPixel;
- args.opaque = TRUE;
- return fbDoCopy (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, s3Copy1toN, bitPlane, &args);
- }
- return KdCheckCopyPlane(pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, bitPlane);
-}
-
-void
-s3PushPixels (GCPtr pGC, PixmapPtr pBitmap,
- DrawablePtr pDrawable,
- int w, int h, int x, int y)
-{
- SetupS3 (pDrawable->pScreen);
- s31toNargs args;
-
- if (pDrawable->type == DRAWABLE_WINDOW && pGC->fillStyle == FillSolid)
- {
- args.opaque = FALSE;
- args.copyPlaneFG = pGC->fgPixel;
- (void) fbDoCopy ((DrawablePtr) pBitmap, pDrawable, pGC,
- 0, 0, w, h, x, y, s3Copy1toN, 1, &args);
- }
- else
- {
- KdCheckPushPixels (pGC, pBitmap, pDrawable, w, h, x, y);
- }
-}
-
-void
-s3FillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox,
- unsigned long pixel, int alu, unsigned long planemask)
-{
- SetupS3(pDrawable->pScreen);
- register int r;
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3DrawMap (pDrawable));
- _s3SetSolidFill(s3,pixel,alu,planemask);
-
- while (nBox--) {
- _s3SolidRect(s3,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1);
- pBox++;
- }
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-void
-_s3SetPattern (ScreenPtr pScreen, int ma,
- int alu, unsigned long planemask, s3PatternPtr pPattern)
-{
- SetupS3(pScreen);
- S3PatternCache *cache;
-
- _s3LoadPattern (pScreen, ma, pPattern);
- cache = pPattern->cache;
-
- switch (pPattern->fillStyle) {
- case FillTiled:
- _s3SetTile(s3,alu,planemask);
- break;
- case FillStippled:
- _s3SetStipple(s3,alu,planemask,pPattern->fore);
- break;
- case FillOpaqueStippled:
- _s3SetOpaqueStipple(s3,alu,planemask,pPattern->fore,pPattern->back);
- break;
- }
-}
-
-void
-s3FillBoxPattern (DrawablePtr pDrawable, int nBox, BoxPtr pBox,
- int alu, unsigned long planemask, s3PatternPtr pPattern)
-{
- SetupS3(pDrawable->pScreen);
- S3PatternCache *cache;
- int patx, paty;
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3DrawMap (pDrawable));
- _s3SetPattern (pDrawable->pScreen, s3DrawMap(pDrawable), alu, planemask, pPattern);
- cache = pPattern->cache;
- while (nBox--)
- {
- _s3PatRect(s3,cache->x, cache->y,
- pBox->x1, pBox->y1,
- pBox->x2-pBox->x1, pBox->y2-pBox->y1);
- pBox++;
- }
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-void
-s3FillBoxLargeStipple (DrawablePtr pDrawable, GCPtr pGC,
- int nBox, BoxPtr pBox)
-{
- SetupS3(pDrawable->pScreen);
- DrawablePtr pStipple = &pGC->stipple->drawable;
- int xRot = pGC->patOrg.x + pDrawable->x;
- int yRot = pGC->patOrg.y + pDrawable->y;
- FbStip *stip;
- FbStride stipStride;
- int stipBpp;
- int stipXoff, stipYoff;
- int stipWidth, stipHeight;
- int dstX, dstY, width, height;
-
- stipWidth = pStipple->width;
- stipHeight = pStipple->height;
- fbGetStipDrawable (pStipple, stip, stipStride, stipBpp, stipXoff, stipYoff);
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3DrawMap (pDrawable));
- if (pGC->fillStyle == FillOpaqueStippled)
- {
- _s3SetOpaquePlaneBlt(s3,pGC->alu,pGC->planemask,
- pGC->fgPixel, pGC->bgPixel);
-
- }
- else
- {
- _s3SetTransparentPlaneBlt(s3,pGC->alu,pGC->planemask, pGC->fgPixel);
- }
-
- while (nBox--)
- {
- int stipX, stipY, sx;
- int widthTmp;
- int h, w;
- int x, y;
-
- dstX = pBox->x1;
- dstY = pBox->y1;
- width = pBox->x2 - pBox->x1;
- height = pBox->y2 - pBox->y1;
- pBox++;
- modulus (dstY - yRot - stipYoff, stipHeight, stipY);
- modulus (dstX - xRot - stipXoff, stipWidth, stipX);
- y = dstY;
- while (height)
- {
- h = stipHeight - stipY;
- if (h > height)
- h = height;
- height -= h;
- widthTmp = width;
- x = dstX;
- sx = stipX;
- while (widthTmp)
- {
- w = (stipWidth - sx);
- if (w > widthTmp)
- w = widthTmp;
- widthTmp -= w;
- _s3Stipple (s3c,
- stip,
- stipStride,
- sx, stipY,
- x, y,
- w, h);
- x += w;
- sx = 0;
- }
- y += h;
- stipY = 0;
- }
- }
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-#define NUM_STACK_RECTS 1024
-
-void
-s3PolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
- int nrectFill, xRectangle *prectInit)
-{
- s3GCPrivate(pGC);
- xRectangle *prect;
- RegionPtr prgnClip;
- register BoxPtr pbox;
- register BoxPtr pboxClipped;
- BoxPtr pboxClippedBase;
- BoxPtr pextent;
- BoxRec stackRects[NUM_STACK_RECTS];
- int numRects;
- int n;
- int xorg, yorg;
- int x, y;
-
- prgnClip = fbGetCompositeClip(pGC);
- xorg = pDrawable->x;
- yorg = pDrawable->y;
-
- if (xorg || yorg)
- {
- prect = prectInit;
- n = nrectFill;
- while(n--)
- {
- prect->x += xorg;
- prect->y += yorg;
- prect++;
- }
- }
-
- prect = prectInit;
-
- numRects = REGION_NUM_RECTS(prgnClip) * nrectFill;
- if (numRects > NUM_STACK_RECTS)
- {
- pboxClippedBase = (BoxPtr)xalloc(numRects * sizeof(BoxRec));
- if (!pboxClippedBase)
- return;
- }
- else
- pboxClippedBase = stackRects;
-
- pboxClipped = pboxClippedBase;
-
- if (REGION_NUM_RECTS(prgnClip) == 1)
- {
- int x1, y1, x2, y2, bx2, by2;
-
- pextent = REGION_RECTS(prgnClip);
- x1 = pextent->x1;
- y1 = pextent->y1;
- x2 = pextent->x2;
- y2 = pextent->y2;
- while (nrectFill--)
- {
- if ((pboxClipped->x1 = prect->x) < x1)
- pboxClipped->x1 = x1;
-
- if ((pboxClipped->y1 = prect->y) < y1)
- pboxClipped->y1 = y1;
-
- bx2 = (int) prect->x + (int) prect->width;
- if (bx2 > x2)
- bx2 = x2;
- pboxClipped->x2 = bx2;
-
- by2 = (int) prect->y + (int) prect->height;
- if (by2 > y2)
- by2 = y2;
- pboxClipped->y2 = by2;
-
- prect++;
- if ((pboxClipped->x1 < pboxClipped->x2) &&
- (pboxClipped->y1 < pboxClipped->y2))
- {
- pboxClipped++;
- }
- }
- }
- else
- {
- int x1, y1, x2, y2, bx2, by2;
-
- pextent = REGION_EXTENTS(pGC->pScreen, prgnClip);
- x1 = pextent->x1;
- y1 = pextent->y1;
- x2 = pextent->x2;
- y2 = pextent->y2;
- while (nrectFill--)
- {
- BoxRec box;
-
- if ((box.x1 = prect->x) < x1)
- box.x1 = x1;
-
- if ((box.y1 = prect->y) < y1)
- box.y1 = y1;
-
- bx2 = (int) prect->x + (int) prect->width;
- if (bx2 > x2)
- bx2 = x2;
- box.x2 = bx2;
-
- by2 = (int) prect->y + (int) prect->height;
- if (by2 > y2)
- by2 = y2;
- box.y2 = by2;
-
- prect++;
-
- if ((box.x1 >= box.x2) || (box.y1 >= box.y2))
- continue;
-
- n = REGION_NUM_RECTS (prgnClip);
- pbox = REGION_RECTS(prgnClip);
-
- /* clip the rectangle to each box in the clip region
- this is logically equivalent to calling Intersect()
- */
- while(n--)
- {
- pboxClipped->x1 = max(box.x1, pbox->x1);
- pboxClipped->y1 = max(box.y1, pbox->y1);
- pboxClipped->x2 = min(box.x2, pbox->x2);
- pboxClipped->y2 = min(box.y2, pbox->y2);
- pbox++;
-
- /* see if clipping left anything */
- if(pboxClipped->x1 < pboxClipped->x2 &&
- pboxClipped->y1 < pboxClipped->y2)
- {
- pboxClipped++;
- }
- }
- }
- }
- if (pboxClipped != pboxClippedBase)
- {
- if (pGC->fillStyle == FillSolid)
- s3FillBoxSolid(pDrawable,
- pboxClipped-pboxClippedBase, pboxClippedBase,
- pGC->fgPixel, pGC->alu, pGC->planemask);
- else if (s3Priv->pPattern)
- s3FillBoxPattern (pDrawable,
- pboxClipped-pboxClippedBase, pboxClippedBase,
- pGC->alu, pGC->planemask,
- s3Priv->pPattern);
- else
- s3FillBoxLargeStipple (pDrawable, pGC,
- pboxClipped-pboxClippedBase,
- pboxClippedBase);
- }
- if (pboxClippedBase != stackRects)
- xfree(pboxClippedBase);
-}
-
-void
-_s3FillSpanLargeStipple (DrawablePtr pDrawable, GCPtr pGC,
- int n, DDXPointPtr ppt, int *pwidth)
-{
- SetupS3 (pDrawable->pScreen);
- DrawablePtr pStipple = &pGC->stipple->drawable;
- int xRot = pGC->patOrg.x + pDrawable->x;
- int yRot = pGC->patOrg.y + pDrawable->y;
- FbStip *stip;
- FbStride stipStride;
- int stipBpp;
- int stipXoff, stipYoff;
- int stipWidth, stipHeight;
- int dstX, dstY, width, height;
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC));
- stipWidth = pStipple->width;
- stipHeight = pStipple->height;
- fbGetStipDrawable (pStipple, stip, stipStride, stipBpp, stipXoff, stipYoff);
- if (pGC->fillStyle == FillOpaqueStippled)
- {
- _s3SetOpaquePlaneBlt(s3,pGC->alu,pGC->planemask,
- pGC->fgPixel, pGC->bgPixel);
-
- }
- else
- {
- _s3SetTransparentPlaneBlt(s3,pGC->alu,pGC->planemask, pGC->fgPixel);
- }
- while (n--)
- {
- int stipX, stipY, sx;
- int w;
- int x, y;
-
- dstX = ppt->x;
- dstY = ppt->y;
- ppt++;
- width = *pwidth++;
- modulus (dstY - yRot - stipYoff, stipHeight, stipY);
- modulus (dstX - xRot - stipXoff, stipWidth, stipX);
- y = dstY;
- x = dstX;
- sx = stipX;
- while (width)
- {
- w = (stipWidth - sx);
- if (w > width)
- w = width;
- width -= w;
- _s3Stipple (s3c,
- stip,
- stipStride,
- sx, stipY,
- x, y,
- w, 1);
- x += w;
- sx = 0;
- }
- }
-}
-
-void
-s3FillSpans (DrawablePtr pDrawable, GCPtr pGC, int n,
- DDXPointPtr ppt, int *pwidth, int fSorted)
-{
- s3GCPrivate(pGC);
- SetupS3(pDrawable->pScreen);
- int x, y, x1, y1, x2, y2;
- int width;
- /* next three parameters are post-clip */
- int nTmp;
- int *pwidthFree;/* copies of the pointers to free */
- DDXPointPtr pptFree;
- BoxPtr extents;
- S3PatternCache *cache;
- RegionPtr pClip = fbGetCompositeClip (pGC);
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC));
- if (REGION_NUM_RECTS(pClip) == 1 &&
- (pGC->fillStyle == FillSolid || s3Priv->pPattern))
- {
- extents = REGION_RECTS(pClip);
- x1 = extents->x1;
- x2 = extents->x2;
- y1 = extents->y1;
- y2 = extents->y2;
- if (pGC->fillStyle == FillSolid)
- {
- _s3SetSolidFill(s3,pGC->fgPixel,pGC->alu,pGC->planemask);
- cache = 0;
- }
- else
- {
- _s3SetPattern (pDrawable->pScreen, s3GCMap(pGC), pGC->alu, pGC->planemask,
- s3Priv->pPattern);
- cache = s3Priv->pPattern->cache;
- }
- while (n--)
- {
- y = ppt->y;
- if (y1 <= y && y < y2)
- {
- x = ppt->x;
- width = *pwidth;
- if (x < x1)
- {
- width -= (x1 - x);
- x = x1;
- }
- if (x2 < x + width)
- width = x2 - x;
- if (width > 0)
- {
- if (cache)
- {
- _s3PatRect(s3, cache->x, cache->y, x, y, width, 1);
- }
- else
- {
- _s3SolidRect(s3,x,y,width,1);
- }
- }
- }
- ppt++;
- pwidth++;
- }
- }
- else
- {
- nTmp = n * miFindMaxBand(pClip);
- pwidthFree = (int *)xalloc(nTmp * sizeof(int));
- pptFree = (DDXPointRec *)xalloc(nTmp * sizeof(DDXPointRec));
- if(!pptFree || !pwidthFree)
- {
- if (pptFree) xfree(pptFree);
- if (pwidthFree) xfree(pwidthFree);
- return;
- }
- n = miClipSpans(fbGetCompositeClip(pGC),
- ppt, pwidth, n,
- pptFree, pwidthFree, fSorted);
- pwidth = pwidthFree;
- ppt = pptFree;
- if (pGC->fillStyle == FillSolid)
- {
- _s3SetSolidFill(s3,pGC->fgPixel,pGC->alu,pGC->planemask);
- while (n--)
- {
- x = ppt->x;
- y = ppt->y;
- ppt++;
- width = *pwidth++;
- if (width)
- {
- _s3SolidRect(s3,x,y,width,1);
- }
- }
- }
- else if (s3Priv->pPattern)
- {
- _s3SetPattern (pDrawable->pScreen, s3GCMap(pGC), pGC->alu, pGC->planemask,
- s3Priv->pPattern);
- cache = s3Priv->pPattern->cache;
- while (n--)
- {
- x = ppt->x;
- y = ppt->y;
- ppt++;
- width = *pwidth++;
- if (width)
- {
- _s3PatRect(s3, cache->x, cache->y, x, y, width, 1);
- }
- }
- }
- else
- {
- _s3FillSpanLargeStipple (pDrawable, pGC, n, ppt, pwidth);
- }
- xfree(pptFree);
- xfree(pwidthFree);
- }
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-#include "mifillarc.h"
-
-#define FILLSPAN(s3,y,__x1,__x2) {\
- DRAW_DEBUG ((DEBUG_ARCS, "FILLSPAN %d: %d->%d", y, __x1, __x2)); \
- if ((__x2) >= (__x1)) {\
- _s3SolidRect(s3,(__x1),(y),(__x2)-(__x1)+1,1); \
- } \
-}
-
-#define FILLSLICESPANS(flip,__y) \
- if (!flip) \
- { \
- FILLSPAN(s3,__y,xl,xr) \
- } \
- else \
- { \
- xc = xorg - x; \
- FILLSPAN(s3, __y, xc, xr) \
- xc += slw - 1; \
- FILLSPAN(s3, __y, xl, xc) \
- }
-
-static void
-_s3FillEllipse (DrawablePtr pDraw, S3Ptr s3, xArc *arc)
-{
- KdScreenPriv(pDraw->pScreen);
- int x, y, e;
- int yk, xk, ym, xm, dx, dy, xorg, yorg;
- int y_top, y_bot;
- miFillArcRec info;
- register int xpos;
- int slw;
-
- s3SetGlobalBitmap (pDraw->pScreen, s3DrawMap (pDraw));
- miFillArcSetup(arc, &info);
- MIFILLARCSETUP();
- y_top = pDraw->y + yorg - y;
- y_bot = pDraw->y + yorg + y + dy;
- xorg += pDraw->x;
- while (y)
- {
- y_top++;
- y_bot--;
- MIFILLARCSTEP(slw);
- if (!slw)
- continue;
- xpos = xorg - x;
- _s3SolidRect (s3,xpos,y_top,slw,1);
- if (miFillArcLower(slw))
- _s3SolidRect (s3,xpos,y_bot,slw,1);
- }
-}
-
-
-static void
-_s3FillArcSlice (DrawablePtr pDraw, GCPtr pGC, S3Ptr s3, xArc *arc)
-{
- KdScreenPriv(pDraw->pScreen);
- int yk, xk, ym, xm, dx, dy, xorg, yorg, slw;
- register int x, y, e;
- miFillArcRec info;
- miArcSliceRec slice;
- int xl, xr, xc;
- int y_top, y_bot;
-
- s3SetGlobalBitmap (pDraw->pScreen, s3DrawMap (pDraw));
- DRAW_DEBUG ((DEBUG_ARCS, "slice %dx%d+%d+%d %d->%d",
- arc->width, arc->height, arc->x, arc->y,
- arc->angle1, arc->angle2));
- miFillArcSetup(arc, &info);
- miFillArcSliceSetup(arc, &slice, pGC);
- DRAW_DEBUG ((DEBUG_ARCS, "edge1.x %d edge2.x %d",
- slice.edge1.x, slice.edge2.x));
- MIFILLARCSETUP();
- DRAW_DEBUG ((DEBUG_ARCS, "xorg %d yorg %d",
- xorg, yorg));
- xorg += pDraw->x;
- yorg += pDraw->y;
- y_top = yorg - y;
- y_bot = yorg + y + dy;
- slice.edge1.x += pDraw->x;
- slice.edge2.x += pDraw->x;
- DRAW_DEBUG ((DEBUG_ARCS, "xorg %d y_top %d y_bot %d",
- xorg, y_top, y_bot));
- while (y > 0)
- {
- y_top++;
- y_bot--;
- MIFILLARCSTEP(slw);
- MIARCSLICESTEP(slice.edge1);
- MIARCSLICESTEP(slice.edge2);
- if (miFillSliceUpper(slice))
- {
- MIARCSLICEUPPER(xl, xr, slice, slw);
- FILLSLICESPANS(slice.flip_top, y_top);
- }
- if (miFillSliceLower(slice))
- {
- MIARCSLICELOWER(xl, xr, slice, slw);
- FILLSLICESPANS(slice.flip_bot, y_bot);
- }
- }
-}
-
-void
-s3PolyFillArcSolid (DrawablePtr pDraw, GCPtr pGC, int narcs, xArc *parcs)
-{
- SetupS3(pDraw->pScreen);
- xArc *arc;
- int i;
- int x, y;
- BoxRec box;
- RegionPtr pClip = fbGetCompositeClip(pGC);
- BOOL set;
-
- set = FALSE;
- for (; --narcs >= 0; parcs++)
- {
- if (miFillArcEmpty(parcs))
- continue;
- if (miCanFillArc(parcs))
- {
- box.x1 = parcs->x + pDraw->x;
- box.y1 = parcs->y + pDraw->y;
- box.x2 = box.x1 + (int)parcs->width + 1;
- box.y2 = box.y1 + (int)parcs->height + 1;
- switch (RECT_IN_REGION(pDraw->pScreen, pClip, &box))
- {
- case rgnIN:
- if (!set)
- {
- _s3SetSolidFill (s3, pGC->fgPixel, pGC->alu, pGC->planemask);
- set = TRUE;
- }
- if ((parcs->angle2 >= FULLCIRCLE) ||
- (parcs->angle2 <= -FULLCIRCLE))
- {
- DRAW_DEBUG ((DEBUG_ARCS, "Full circle ellipse %dx%d",
- parcs->width, parcs->height));
- _s3FillEllipse (pDraw, s3, parcs);
- }
- else
- {
- DRAW_DEBUG ((DEBUG_ARCS, "Partial ellipse %dx%d",
- parcs->width, parcs->height));
- _s3FillArcSlice (pDraw, pGC, s3, parcs);
- }
- /* fall through ... */
- case rgnOUT:
- continue;
- case rgnPART:
- break;
- }
- }
- if (set)
- {
- MarkSyncS3 (pDraw->pScreen);
- set = FALSE;
- }
- KdCheckPolyFillArc(pDraw, pGC, 1, parcs);
- }
- if (set)
- {
- MarkSyncS3 (pDraw->pScreen);
- set = FALSE;
- }
-}
-
-void
-s3FillPoly (DrawablePtr pDrawable, GCPtr pGC, int shape,
- int mode, int countInit, DDXPointPtr ptsIn)
-{
- SetupS3(pDrawable->pScreen);
- int nwidth;
- int maxy;
- int origin;
- int count;
- register int vertex1, vertex2;
- int c;
- RegionPtr pClip = fbGetCompositeClip(pGC);
- BoxPtr extents;
- int clip;
- int y, sy;
- int *vertex1p, *vertex2p;
- int *endp;
- int x1, x2, sx;
- int dx1, dx2;
- int dy1, dy2;
- int e1, e2;
- int step1, step2;
- int sign1, sign2;
- int h;
- int l, r;
- int nmiddle;
-
- if (mode == CoordModePrevious || REGION_NUM_RECTS(pClip) != 1)
- {
- KdCheckFillPolygon (pDrawable, pGC, shape, mode, countInit, ptsIn);
- return;
- }
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC));
- sy = pDrawable->y;
- sx = pDrawable->x;
- origin = *((int *) &pDrawable->x);
- origin -= (origin & 0x8000) << 1;
- extents = &pClip->extents;
- vertex1 = *((int *) &extents->x1) - origin;
- vertex2 = *((int *) &extents->x2) - origin - 0x00010001;
- clip = 0;
-
- y = 32767;
- maxy = 0;
- vertex2p = (int *) ptsIn;
- endp = vertex2p + countInit;
- if (shape == Convex)
- {
- count = countInit;
- while (count--)
- {
- c = *vertex2p;
- clip |= (c - vertex1) | (vertex2 - c);
- c = intToY(c);
- DRAW_DEBUG ((DEBUG_POLYGON, "Y coordinate %d", c));
- if (c < y)
- {
- y = c;
- vertex1p = vertex2p;
- }
- vertex2p++;
- if (c > maxy)
- maxy = c;
- }
- }
- else
- {
- int yFlip = 0;
- dx1 = 1;
- x2 = -1;
- x1 = -1;
- count = countInit;
- while (count--)
- {
- c = *vertex2p;
- clip |= (c - vertex1) | (vertex2 - c);
- c = intToY(c);
- DRAW_DEBUG ((DEBUG_POLYGON, "Y coordinate %d", c));
- if (c < y)
- {
- y = c;
- vertex1p = vertex2p;
- }
- vertex2p++;
- if (c > maxy)
- maxy = c;
- if (c == x1)
- continue;
- if (dx1 > 0)
- {
- if (x2 < 0)
- x2 = c;
- else
- dx2 = dx1 = (c - x1) >> 31;
- }
- else
- if ((c - x1) >> 31 != dx1)
- {
- dx1 = ~dx1;
- yFlip++;
- }
- x1 = c;
- }
- x1 = (x2 - c) >> 31;
- if (x1 != dx1)
- yFlip++;
- if (x1 != dx2)
- yFlip++;
- if (yFlip != 2)
- clip = 0x8000;
- }
- if (y == maxy)
- return;
-
- if (clip & 0x80008000)
- {
- KdCheckFillPolygon (pDrawable, pGC, shape, mode, countInit, ptsIn);
- return;
- }
- _s3SetSolidFill(s3,pGC->fgPixel,pGC->alu,pGC->planemask);
-
- vertex2p = vertex1p;
- vertex2 = vertex1 = *vertex2p++;
- if (vertex2p == endp)
- vertex2p = (int *) ptsIn;
-#define Setup(c,x,vertex,dx,dy,e,sign,step) {\
- x = intToX(vertex); \
- if (dy = intToY(c) - y) { \
- dx = intToX(c) - x; \
- step = 0; \
- if (dx >= 0) \
- { \
- e = 0; \
- sign = 1; \
- if (dx >= dy) {\
- step = dx / dy; \
- dx = dx % dy; \
- } \
- } \
- else \
- { \
- e = 1 - dy; \
- sign = -1; \
- dx = -dx; \
- if (dx >= dy) { \
- step = - (dx / dy); \
- dx = dx % dy; \
- } \
- } \
- } \
- x += sx; \
- vertex = c; \
-}
-
-#define Step(x,dx,dy,e,sign,step) {\
- x += step; \
- if ((e += dx) > 0) \
- { \
- x += sign; \
- e -= dy; \
- } \
-}
- sy += y;
- DRAW_DEBUG ((DEBUG_POLYGON, "Starting polygon at %d", sy));
- for (;;)
- {
- DRAW_DEBUG ((DEBUG_POLYGON, "vertex1 0x%x vertex2 0x%x y %d vy1 %d vy2 %d",
- vertex1, vertex2,
- y, intToY(vertex1), intToY (vertex2)));
- if (y == intToY(vertex1))
- {
- DRAW_DEBUG ((DEBUG_POLYGON, "Find next -- vertext"));
- do
- {
- if (vertex1p == (int *) ptsIn)
- vertex1p = endp;
- c = *--vertex1p;
- Setup (c,x1,vertex1,dx1,dy1,e1,sign1,step1);
- DRAW_DEBUG ((DEBUG_POLYGON, "-- vertex 0x%x y %d",
- vertex1, intToY(vertex1)));
- } while (y >= intToY(vertex1));
- h = dy1;
- }
- else
- {
- Step(x1,dx1,dy1,e1,sign1,step1)
- h = intToY(vertex1) - y;
- }
- if (y == intToY(vertex2))
- {
- DRAW_DEBUG ((DEBUG_POLYGON, "Find next ++ vertext"));
- do
- {
- c = *vertex2p++;
- if (vertex2p == endp)
- vertex2p = (int *) ptsIn;
- Setup (c,x2,vertex2,dx2,dy2,e2,sign2,step2)
- DRAW_DEBUG ((DEBUG_POLYGON, "++ vertex 0x%x y %d",
- vertex1, intToY(vertex1)));
- } while (y >= intToY(vertex2));
- if (dy2 < h)
- h = dy2;
- }
- else
- {
- Step(x2,dx2,dy2,e2,sign2,step2)
- if ((c = (intToY(vertex2) - y)) < h)
- h = c;
- }
- DRAW_DEBUG ((DEBUG_POLYGON, "This band %d", h));
- /* fill spans for this segment */
- for (;;)
- {
- nmiddle = x2 - x1;
- DRAW_DEBUG ((DEBUG_POLYGON, "This span %d->%d", x1, x2));
- if (nmiddle)
- {
- l = x1;
- if (nmiddle < 0)
- {
- nmiddle = -nmiddle;
- l = x2;
- }
- _s3SolidRect(s3,l,sy,nmiddle,1);
- }
- y++;
- sy++;
- if (!--h)
- break;
- Step(x1,dx1,dy1,e1,sign1,step1)
- Step(x2,dx2,dy2,e2,sign2,step2)
- }
- if (y == maxy)
- break;
- }
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-void
-s3PolyGlyphBltClipped (DrawablePtr pDrawable,
- GCPtr pGC,
- int x, int y,
- unsigned int nglyph,
- CharInfoPtr *ppciInit,
- pointer pglyphBase)
-{
- SetupS3(pDrawable->pScreen);
- int h;
- int w;
- int xBack, yBack;
- int hBack, wBack;
- int lw;
- FontPtr pfont = pGC->font;
- CharInfoPtr pci;
- unsigned long *bits;
- BoxPtr extents;
- BoxRec bbox;
- CARD32 b;
- CharInfoPtr *ppci;
- FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC);
- RegionPtr pClip = fbGetCompositeClip(pGC);
- BoxPtr pBox;
- int nbox;
- int x1, y1, x2, y2;
- unsigned char alu;
- Bool set;
- PixTransDeclare;
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC));
- x += pDrawable->x;
- y += pDrawable->y;
-
- if (pglyphBase == (pointer) 1)
- {
- xBack = x;
- yBack = y - FONTASCENT(pGC->font);
- wBack = 0;
- hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font);
- if (hBack)
- {
- h = nglyph;
- ppci = ppciInit;
- while (h--)
- wBack += (*ppci++)->metrics.characterWidth;
- }
- if (wBack < 0)
- {
- xBack = xBack + wBack;
- wBack = -wBack;
- }
- if (hBack < 0)
- {
- yBack = yBack + hBack;
- hBack = -hBack;
- }
- alu = GXcopy;
- }
- else
- {
- wBack = 0;
- alu = pGC->alu;
- }
-
- if (wBack)
- {
- _s3SetSolidFill (s3, pGC->bgPixel, GXcopy, pGC->planemask);
- for (nbox = REGION_NUM_RECTS (pClip),
- pBox = REGION_RECTS (pClip);
- nbox--;
- pBox++)
- {
- x1 = xBack;
- x2 = xBack + wBack;
- y1 = yBack;
- y2 = yBack + hBack;
- if (x1 < pBox->x1) x1 = pBox->x1;
- if (x2 > pBox->x2) x2 = pBox->x2;
- if (y1 < pBox->y1) y1 = pBox->y1;
- if (y2 > pBox->y2) y2 = pBox->y2;
- if (x1 < x2 && y1 < y2)
- {
- _s3SolidRect (s3, x1, y1, x2 - x1, y2 - y1);
- }
- }
- MarkSyncS3 (pDrawable->pScreen);
- }
- ppci = ppciInit;
- set = FALSE;
- while (nglyph--)
- {
- pci = *ppci++;
- h = pci->metrics.ascent + pci->metrics.descent;
- w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
- x1 = x + pci->metrics.leftSideBearing;
- y1 = y - pci->metrics.ascent;
- bbox.x1 = x1;
- bbox.y1 = y1;
- bbox.x2 = x1 + w;
- bbox.y2 = y1 + h;
- switch (RECT_IN_REGION(pGC->pScreen, pClip, &bbox))
- {
- case rgnIN:
-#if 1
- lw = h * ((w + 31) >> 5);
- if (lw)
- {
- if (!set)
- {
- _s3SetTransparentPlaneBlt (s3, alu, pGC->planemask, pGC->fgPixel);
- set = TRUE;
- }
- _s3PlaneBlt(s3,
- x + pci->metrics.leftSideBearing,
- y - pci->metrics.ascent,
- w, h);
- bits = (unsigned long *) pci->bits;
- PixTransStart (lw);
- while (lw--)
- {
- b = *bits++;
- S3AdjustBits32 (b);
- PixTransStore(b);
- }
- MarkSyncS3 (pDrawable->pScreen);
- }
- break;
-#endif
- case rgnPART:
- set = FALSE;
- CheckSyncS3 (pDrawable->pScreen);
- fbPutXYImage (pDrawable,
- pClip,
- fbPriv->fg,
- fbPriv->bg,
- fbPriv->pm,
- alu,
- FALSE,
- x1, y1,
- w, h,
- (FbStip *) pci->bits,
- (w + 31) >> 5,
- 0);
- break;
- case rgnOUT:
- break;
- }
- x += pci->metrics.characterWidth;
- }
-}
-
-/*
- * Blt glyphs using S3 image transfer register, this does both
- * poly glyph blt and image glyph blt (when pglyphBase == 1)
- */
-
-void
-s3PolyGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int x, int y,
- unsigned int nglyph,
- CharInfoPtr *ppciInit,
- pointer pglyphBase)
-{
- SetupS3(pDrawable->pScreen);
- int h;
- int w;
- int xBack, yBack;
- int hBack, wBack;
- int lw;
- FontPtr pfont = pGC->font;
- CharInfoPtr pci;
- unsigned long *bits;
- BoxPtr extents;
- BoxRec bbox;
- CARD32 b;
- CharInfoPtr *ppci;
- unsigned char alu;
- PixTransDeclare;
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC));
- x += pDrawable->x;
- y += pDrawable->y;
-
- /* compute an approximate (but covering) bounding box */
- ppci = ppciInit;
- w = 0;
- h = nglyph;
- while (h--)
- w += (*ppci++)->metrics.characterWidth;
- if (w < 0)
- {
- bbox.x1 = x + w;
- bbox.x2 = x;
- }
- else
- {
- bbox.x1 = x;
- bbox.x2 = x + w;
- }
- w = FONTMINBOUNDS(pfont,leftSideBearing);
- if (w < 0)
- bbox.x1 += w;
- w = FONTMAXBOUNDS(pfont, rightSideBearing) - FONTMINBOUNDS(pfont, characterWidth);
- if (w > 0)
- bbox.x2 += w;
- bbox.y1 = y - FONTMAXBOUNDS(pfont,ascent);
- bbox.y2 = y + FONTMAXBOUNDS(pfont,descent);
-
- DRAW_DEBUG ((DEBUG_TEXT, "PolyGlyphBlt %d box is %d %d", nglyph,
- bbox.x1, bbox.x2));
- switch (RECT_IN_REGION(pGC->pScreen, fbGetCompositeClip(pGC), &bbox))
- {
- case rgnIN:
- break;
- case rgnPART:
- s3PolyGlyphBltClipped(pDrawable, pGC, x - pDrawable->x,
- y - pDrawable->y,
- nglyph, ppciInit, pglyphBase);
- case rgnOUT:
- return;
- }
-
- if (pglyphBase == (pointer) 1)
- {
- xBack = x;
- yBack = y - FONTASCENT(pGC->font);
- wBack = 0;
- hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font);
- if (hBack)
- {
- h = nglyph;
- ppci = ppciInit;
- while (h--)
- wBack += (*ppci++)->metrics.characterWidth;
- }
- if (wBack < 0)
- {
- xBack = xBack + wBack;
- wBack = -wBack;
- }
- if (hBack < 0)
- {
- yBack = yBack + hBack;
- hBack = -hBack;
- }
- alu = GXcopy;
- }
- else
- {
- wBack = 0;
- alu = pGC->alu;
- }
-
- if (wBack)
- {
- _s3SetSolidFill (s3, pGC->bgPixel, GXcopy, pGC->planemask);
- _s3SolidRect (s3, xBack, yBack, wBack, hBack);
- }
- _s3SetTransparentPlaneBlt (s3, alu, pGC->planemask, pGC->fgPixel);
- ppci = ppciInit;
- while (nglyph--)
- {
- pci = *ppci++;
- h = pci->metrics.ascent + pci->metrics.descent;
- w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
- lw = h * ((w + 31) >> 5);
- if (lw)
- {
- _s3PlaneBlt(s3,
- x + pci->metrics.leftSideBearing,
- y - pci->metrics.ascent,
- w, h);
- bits = (unsigned long *) pci->bits;
- PixTransStart(lw);
- while (lw--)
- {
- b = *bits++;
- S3AdjustBits32 (b);
- PixTransStore(b);
- }
- }
- x += pci->metrics.characterWidth;
- }
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-void
-s3ImageGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int x, int y,
- unsigned int nglyph,
- CharInfoPtr *ppci,
- pointer pglyphBase)
-{
- s3PolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, (pointer) 1);
-}
-
-/*
- * Blt TE fonts using S3 image transfer. Differs from
- * above in that it doesn't need to fill a solid rect for
- * the background and it can draw multiple characters at a time
- */
-
-void
-s3ImageTEGlyphBlt (DrawablePtr pDrawable, GCPtr pGC,
- int xInit, int yInit,
- unsigned int nglyph,
- CharInfoPtr *ppci,
- pointer pglyphBase)
-{
- SetupS3(pDrawable->pScreen);
- int x, y;
- int h, lw, lwTmp;
- int w;
- FontPtr pfont = pGC->font;
- unsigned long *char1, *char2, *char3, *char4;
- int widthGlyphs, widthGlyph;
- BoxRec bbox;
- CARD32 tmp;
- PixTransDeclare;
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC));
- widthGlyph = FONTMAXBOUNDS(pfont,characterWidth);
- if (!widthGlyph)
- return;
-
- h = FONTASCENT(pfont) + FONTDESCENT(pfont);
- if (!h)
- return;
-
- DRAW_DEBUG ((DEBUG_TEXT, "ImageTEGlyphBlt chars are %d %d",
- widthGlyph, h));
-
- x = xInit + FONTMAXBOUNDS(pfont,leftSideBearing) + pDrawable->x;
- y = yInit - FONTASCENT(pfont) + pDrawable->y;
-
- bbox.x1 = x;
- bbox.x2 = x + (widthGlyph * nglyph);
- bbox.y1 = y;
- bbox.y2 = y + h;
-
- switch (RECT_IN_REGION(pGC->pScreen, fbGetCompositeClip(pGC), &bbox))
- {
- case rgnIN:
- break;
- case rgnPART:
- if (pglyphBase == (pointer) 1)
- pglyphBase = 0;
- else
- pglyphBase = (pointer) 1;
- s3PolyGlyphBltClipped(pDrawable, pGC,
- xInit,
- yInit,
- nglyph, ppci,
- pglyphBase);
- case rgnOUT:
- return;
- }
-
- if (pglyphBase == (pointer) 1)
- {
- _s3SetTransparentPlaneBlt (s3, pGC->alu, pGC->planemask, pGC->fgPixel);
- }
- else
- {
- _s3SetOpaquePlaneBlt (s3, GXcopy, pGC->planemask, pGC->fgPixel, pGC->bgPixel);
- }
-
-#if BITMAP_BIT_ORDER == LSBFirst
-#define SHIFT <<
-#else
-#define SHIFT >>
-#endif
-
-#define LoopIt(count, w, loadup, fetch) \
- while (nglyph >= count) \
- { \
- nglyph -= count; \
- _s3PlaneBlt (s3, x, y, w, h); \
- x += w; \
- loadup \
- lwTmp = h; \
- PixTransStart(h); \
- while (lwTmp--) { \
- tmp = fetch; \
- S3AdjustBits32(tmp); \
- PixTransStore(tmp); \
- } \
- }
-
- if (widthGlyph <= 8)
- {
- widthGlyphs = widthGlyph << 2;
- LoopIt(4, widthGlyphs,
- char1 = (unsigned long *) (*ppci++)->bits;
- char2 = (unsigned long *) (*ppci++)->bits;
- char3 = (unsigned long *) (*ppci++)->bits;
- char4 = (unsigned long *) (*ppci++)->bits;,
- (*char1++ | ((*char2++ | ((*char3++ | (*char4++
- SHIFT widthGlyph))
- SHIFT widthGlyph))
- SHIFT widthGlyph)))
- }
- else if (widthGlyph <= 10)
- {
- widthGlyphs = (widthGlyph << 1) + widthGlyph;
- LoopIt(3, widthGlyphs,
- char1 = (unsigned long *) (*ppci++)->bits;
- char2 = (unsigned long *) (*ppci++)->bits;
- char3 = (unsigned long *) (*ppci++)->bits;,
- (*char1++ | ((*char2++ | (*char3++ SHIFT widthGlyph)) SHIFT widthGlyph)))
- }
- else if (widthGlyph <= 16)
- {
- widthGlyphs = widthGlyph << 1;
- LoopIt(2, widthGlyphs,
- char1 = (unsigned long *) (*ppci++)->bits;
- char2 = (unsigned long *) (*ppci++)->bits;,
- (*char1++ | (*char2++ SHIFT widthGlyph)))
- }
- lw = h * ((widthGlyph + 31) >> 5);
- while (nglyph--)
- {
- _s3PlaneBlt (s3, x, y, widthGlyph, h);
- x += widthGlyph;
- char1 = (unsigned long *) (*ppci++)->bits;
- lwTmp = lw;
- PixTransStart(lw);
- while (lwTmp--)
- {
- tmp = *char1++;
- S3AdjustBits32(tmp);
- PixTransStore(tmp);
- }
- }
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-void
-s3PolyTEGlyphBlt (DrawablePtr pDrawable, GCPtr pGC,
- int x, int y,
- unsigned int nglyph, CharInfoPtr *ppci,
- pointer pglyphBase)
-{
- s3ImageTEGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, (pointer) 1);
-}
-
-Bool
-_s3Segment (DrawablePtr pDrawable,
- GCPtr pGC,
- int x1,
- int y1,
- int x2,
- int y2,
- Bool drawLast,
- Bool s3Set)
-{
- SetupS3(pDrawable->pScreen);
- FbGCPrivPtr pPriv = fbGetGCPrivate(pGC);
- RegionPtr pClip = fbGetCompositeClip(pGC);
- BoxPtr pBox;
- int nBox;
- int adx; /* abs values of dx and dy */
- int ady;
- int signdx; /* sign of dx and dy */
- int signdy;
- int e, e1, e2; /* bresenham error and increments */
- int len; /* length of segment */
- int axis; /* major axis */
- int octant;
- int cmd;
- unsigned int bias = miGetZeroLineBias(pDrawable->pScreen);
- unsigned int oc1; /* outcode of point 1 */
- unsigned int oc2; /* outcode of point 2 */
-
- CalcLineDeltas(x1, y1, x2, y2, adx, ady, signdx, signdy,
- 1, 1, octant);
-
- cmd = LASTPIX;
-
- if (adx > ady)
- {
- axis = X_AXIS;
- e1 = ady << 1;
- e2 = e1 - (adx << 1);
- e = e1 - adx;
- len = adx;
- }
- else
- {
- cmd |= YMAJAXIS;
- axis = Y_AXIS;
- e1 = adx << 1;
- e2 = e1 - (ady << 1);
- e = e1 - ady;
- SetYMajorOctant(octant);
- len = ady;
- }
-
- /* S3 line drawing hardware has limited resolution for error terms */
- if (len >= 4096)
- {
- int dashOff = 0;
-
- KdCheckSync (pDrawable->pScreen);
- fbSegment (pDrawable, pGC, x1, y1, x2, y2, drawLast, &dashOff);
- return FALSE;
- }
-
- FIXUP_ERROR (e, octant, bias);
-
- nBox = REGION_NUM_RECTS (pClip);
- pBox = REGION_RECTS (pClip);
-
- if (signdx > 0)
- cmd |= INC_X;
- if (signdy > 0)
- cmd |= INC_Y;
-
- /* we have bresenham parameters and two points.
- all we have to do now is clip and draw.
- */
-
- if (drawLast)
- len++;
- while(nBox--)
- {
- oc1 = 0;
- oc2 = 0;
- OUTCODES(oc1, x1, y1, pBox);
- OUTCODES(oc2, x2, y2, pBox);
- if ((oc1 | oc2) == 0)
- {
- if (!s3Set)
- {
- s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC));
- _s3SetSolidFill (s3, pGC->fgPixel, pGC->alu, pGC->planemask);
- s3Set = TRUE;
- }
- _s3SetCur (s3, x1, y1);
- _s3ClipLine (s3, cmd, e1, e2, e, len);
- break;
- }
- else if (oc1 & oc2)
- {
- pBox++;
- }
- else
- {
- int new_x1 = x1, new_y1 = y1, new_x2 = x2, new_y2 = y2;
- int clip1 = 0, clip2 = 0;
- int clipdx, clipdy;
- int err;
-
- if (miZeroClipLine(pBox->x1, pBox->y1, pBox->x2-1,
- pBox->y2-1,
- &new_x1, &new_y1, &new_x2, &new_y2,
- adx, ady, &clip1, &clip2,
- octant, bias, oc1, oc2) == -1)
- {
- pBox++;
- continue;
- }
-
- if (axis == X_AXIS)
- len = abs(new_x2 - new_x1);
- else
- len = abs(new_y2 - new_y1);
- if (clip2 != 0 || drawLast)
- len++;
- if (len)
- {
- /* unwind bresenham error term to first point */
- err = e;
- if (clip1)
- {
- clipdx = abs(new_x1 - x1);
- clipdy = abs(new_y1 - y1);
- if (axis == X_AXIS)
- err += (e2 - e1) * clipdy + e1 * clipdx;
- else
- err += (e2 - e1) * clipdx + e1 * clipdy;
- }
- if (!s3Set)
- {
- s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC));
- _s3SetSolidFill (s3, pGC->fgPixel, pGC->alu, pGC->planemask);
- s3Set = TRUE;
- }
- _s3SetCur (s3, new_x1, new_y1);
- _s3ClipLine (s3, cmd, e1, e2, err, len);
- }
- pBox++;
- }
- } /* while (nBox--) */
- return s3Set;
-}
-
-void
-s3Polylines (DrawablePtr pDrawable, GCPtr pGC,
- int mode, int npt, DDXPointPtr ppt)
-{
- SetupS3(pDrawable->pScreen);
- int x, y, nx, ny;
- int ox = pDrawable->x, oy = pDrawable->y;
- Bool s3Set = FALSE;
-
- if (!npt)
- return;
-
- x = ppt->x + ox;
- y = ppt->y + oy;
- while (--npt)
- {
- ++ppt;
- if (mode == CoordModePrevious)
- {
- nx = x + ppt->x;
- ny = y + ppt->y;
- }
- else
- {
- nx = ppt->x + ox;
- ny = ppt->y + oy;
- }
- s3Set = _s3Segment (pDrawable, pGC, x, y, nx, ny,
- npt == 1 && pGC->capStyle != CapNotLast,
- s3Set);
- x = nx;
- y = ny;
- }
- if (s3Set)
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-void
-s3PolySegment (DrawablePtr pDrawable, GCPtr pGC,
- int nsegInit, xSegment *pSegInit)
-{
- SetupS3(pDrawable->pScreen);
- int x, y;
- int ox = pDrawable->x, oy = pDrawable->y;
- RegionPtr pClip = fbGetCompositeClip (pGC);
- BoxPtr pBox;
- int nbox;
- int nseg;
- xSegment *pSeg;
- int dx, dy;
- int maj, min, len, inc;
- int t;
- CARD32 cmd;
- CARD32 init_cmd;
- Bool drawLast;
- Bool s3Set = FALSE;
-
- drawLast = pGC->capStyle != CapNotLast;
-
- for (nseg = nsegInit, pSeg = pSegInit; nseg--; pSeg++)
- {
- s3Set = _s3Segment (pDrawable, pGC, pSeg->x1 + ox, pSeg->y1 + oy,
- pSeg->x2 + ox, pSeg->y2 + oy, drawLast, s3Set);
-
- }
- if (s3Set)
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-/*
- * Check to see if a pattern can be painted with the S3
- */
-
-#define _s3CheckPatternSize(s) ((s) <= S3_TILE_SIZE && ((s) & ((s) - 1)) == 0)
-#define s3CheckPattern(w,h) (_s3CheckPatternSize(w) && _s3CheckPatternSize(h))
-
-Bool
-s3AllocPattern (ScreenPtr pScreen,
- int ma,
- PixmapPtr pPixmap,
- int xorg, int yorg,
- int fillStyle, Pixel fg, Pixel bg,
- s3PatternPtr *ppPattern)
-{
- KdScreenPriv(pScreen);
- s3ScreenInfo(pScreenPriv);
- s3PatternPtr pPattern;
-
- if (s3s->fb[ma].patterns.cache && fillStyle != FillSolid &&
- s3CheckPattern (pPixmap->drawable.width, pPixmap->drawable.height))
- {
- if (!(pPattern = *ppPattern))
- {
- pPattern = (s3PatternPtr) xalloc (sizeof (s3PatternRec));
- if (!pPattern)
- return FALSE;
- *ppPattern = pPattern;
- }
-
- pPattern->cache = 0;
- pPattern->id = 0;
- pPattern->pPixmap = pPixmap;
- pPattern->fillStyle = fillStyle;
- pPattern->xrot = (-xorg) & (S3_TILE_SIZE-1);
- pPattern->yrot = (-yorg) & (S3_TILE_SIZE-1);
- pPattern->fore = fg;
- pPattern->back = bg;
- return TRUE;
- }
- else
- {
- if (*ppPattern)
- {
- xfree (*ppPattern);
- *ppPattern = 0;
- }
- return FALSE;
- }
-}
-
-void
-s3CheckGCFill (GCPtr pGC)
-{
- s3PrivGCPtr s3Priv = s3GetGCPrivate (pGC);
- PixmapPtr pPixmap;
-
- switch (pGC->fillStyle) {
- case FillSolid:
- pPixmap = 0;
- break;
- case FillOpaqueStippled:
- case FillStippled:
- pPixmap = pGC->stipple;
- break;
- case FillTiled:
- pPixmap = pGC->tile.pixmap;
- break;
- }
- s3AllocPattern (pGC->pScreen,
- s3GCMap(pGC),
- pPixmap,
- pGC->patOrg.x + pGC->lastWinOrg.x,
- pGC->patOrg.y + pGC->lastWinOrg.y,
- pGC->fillStyle, pGC->fgPixel, pGC->bgPixel,
- &s3Priv->pPattern);
-}
-
-void
-s3MoveGCFill (GCPtr pGC)
-{
- s3PrivGCPtr s3Priv = s3GetGCPrivate (pGC);
- int xorg, yorg;
- s3PatternPtr pPattern;
-
- if (pPattern = s3Priv->pPattern)
- {
- /*
- * Reset origin
- */
- xorg = pGC->patOrg.x + pGC->lastWinOrg.x;
- yorg = pGC->patOrg.y + pGC->lastWinOrg.y;
- pPattern->xrot = (-xorg) & (S3_TILE_SIZE - 1);
- pPattern->yrot = (-yorg) & (S3_TILE_SIZE - 1);
- /*
- * Invalidate cache entry
- */
- pPattern->id = 0;
- pPattern->cache = 0;
- }
-}
-
-/*
- * S3 Patterns. These are always full-depth images, stored in off-screen
- * memory.
- */
-
-Pixel
-s3FetchPatternPixel (s3PatternPtr pPattern, int x, int y)
-{
- CARD8 *src;
- CARD16 *src16;
- CARD32 *src32;
- PixmapPtr pPixmap = pPattern->pPixmap;
-
- x = (x + pPattern->xrot) % pPixmap->drawable.width;
- y = (y + pPattern->yrot) % pPixmap->drawable.height;
- src = (CARD8 *) pPixmap->devPrivate.ptr + y * pPixmap->devKind;
- switch (pPixmap->drawable.bitsPerPixel) {
- case 1:
- return (src[x>>3] >> (x & 7)) & 1 ? 0xffffffff : 0x00;
- case 4:
- if (x & 1)
- return src[x>>1] >> 4;
- else
- return src[x>>1] & 0xf;
- case 8:
- return src[x];
- case 16:
- src16 = (CARD16 *) src;
- return src16[x];
- case 32:
- src32 = (CARD32 *) src;
- return src32[x];
- }
-}
-
-/*
- * Place pattern image on screen; done with S3 locked
- */
-void
-_s3PutPattern (ScreenPtr pScreen, int ma, s3PatternPtr pPattern)
-{
- SetupS3(pScreen);
- s3ScreenInfo(pScreenPriv);
- int x, y;
- CARD8 *dstLine, *dst8;
- CARD16 *dst16;
- CARD32 *dst32;
- S3PatternCache *cache = pPattern->cache;
-#ifdef S3_TRIO
- int fb = 0;
-#else
- int fb = s3s->fbmap[ma];
-#endif
-
- DRAW_DEBUG ((DEBUG_PATTERN, "_s3PutPattern 0x%x id %d to %d %d",
- pPattern, pPattern->id, cache->x, cache->y));
-
- dstLine = (pScreenPriv->screen->fb[fb].frameBuffer +
- cache->y * pScreenPriv->screen->fb[fb].byteStride +
- cache->x * pScreenPriv->bytesPerPixel[fb]);
-
- CheckSyncS3 (pScreen);
-
- for (y = 0; y < S3_TILE_SIZE; y++)
- {
- switch (pScreenPriv->screen->fb[fb].bitsPerPixel) {
- case 8:
- dst8 = dstLine;
- for (x = 0; x < S3_TILE_SIZE; x++)
- *dst8++ = s3FetchPatternPixel (pPattern, x, y);
- DRAW_DEBUG ((DEBUG_PATTERN, "%c%c%c%c%c%c%c%c",
- dstLine[0] ? 'X' : ' ',
- dstLine[1] ? 'X' : ' ',
- dstLine[2] ? 'X' : ' ',
- dstLine[3] ? 'X' : ' ',
- dstLine[4] ? 'X' : ' ',
- dstLine[5] ? 'X' : ' ',
- dstLine[6] ? 'X' : ' ',
- dstLine[7] ? 'X' : ' '));
- break;
- case 16:
- dst16 = (CARD16 *) dstLine;
- for (x = 0; x < S3_TILE_SIZE; x++)
- *dst16++ = s3FetchPatternPixel (pPattern, x, y);
- break;
- case 32:
- dst32 = (CARD32 *) dstLine;
- for (x = 0; x < S3_TILE_SIZE; x++)
- *dst32++ = s3FetchPatternPixel (pPattern, x, y);
- break;
- }
- dstLine += pScreenPriv->screen->fb[fb].byteStride;
- }
-}
-
-/*
- * Load a stipple to off-screen memory; done with S3 locked
- */
-void
-_s3LoadPattern (ScreenPtr pScreen, int ma, s3PatternPtr pPattern)
-{
- SetupS3(pScreen);
- s3ScreenInfo(pScreenPriv);
- S3PatternCache *cache;
-
- DRAW_DEBUG((DEBUG_PATTERN,
- "s3LoadPattern 0x%x id %d cache 0x%x cacheid %d",
- pPattern, pPattern->id, pPattern->cache,
- pPattern->cache ? pPattern->cache->id : -1));
- /*
- * Check to see if its still loaded
- */
- cache = pPattern->cache;
- if (cache && cache->id == pPattern->id)
- return;
- /*
- * Lame replacement strategy; assume we'll have plenty of room.
- */
- cache = &s3s->fb[ma].patterns.cache[s3s->fb[ma].patterns.last_used];
- if (++s3s->fb[ma].patterns.last_used == s3s->fb[ma].patterns.ncache)
- s3s->fb[ma].patterns.last_used = 0;
- cache->id = ++s3s->fb[ma].patterns.last_id;
- pPattern->id = cache->id;
- pPattern->cache = cache;
- _s3PutPattern (pScreen, ma, pPattern);
-}
-
-void
-s3DestroyGC (GCPtr pGC)
-{
- s3PrivGCPtr s3Priv = s3GetGCPrivate (pGC);
-
- if (s3Priv->pPattern)
- xfree (s3Priv->pPattern);
- miDestroyGC (pGC);
-}
-
-GCFuncs s3GCFuncs = {
- s3ValidateGC,
- miChangeGC,
- miCopyGC,
- s3DestroyGC,
- miChangeClip,
- miDestroyClip,
- miCopyClip
-};
-
-int
-s3CreateGC (GCPtr pGC)
-{
- KdScreenPriv(pGC->pScreen);
- s3ScreenInfo(pScreenPriv);
- s3PrivGCPtr s3Priv;
-
- if (!fbCreateGC (pGC))
- return FALSE;
-
- if (pGC->depth != 1)
- pGC->funcs = &s3GCFuncs;
-
- s3Priv = s3GetGCPrivate(pGC);
- s3Priv->type = DRAWABLE_PIXMAP;
- s3Priv->pPattern = 0;
-#ifndef S3_TRIO
- if (pGC->depth == s3s->primary_depth)
- s3Priv->ma = 0;
- else
- s3Priv->ma = 1;
-#endif
- return TRUE;
-}
-
-Bool
-s3CreateWindow (WindowPtr pWin)
-{
- KdScreenPriv(pWin->drawable.pScreen);
- s3ScreenInfo(pScreenPriv);
-
- dixSetPrivate(&pWin->devPrivates, s3WindowPrivateKey, NULL);
- return KdCreateWindow (pWin);
-}
-
-Bool
-s3DestroyWindow (WindowPtr pWin)
-{
- s3PatternPtr pPattern;
- if (pPattern = s3GetWindowPrivate(pWin))
- xfree (pPattern);
- return fbDestroyWindow (pWin);
-}
-
-Bool
-s3ChangeWindowAttributes (WindowPtr pWin, Mask mask)
-{
- KdScreenPriv(pWin->drawable.pScreen);
- Bool ret;
- s3PatternPtr pPattern;
- PixmapPtr pPixmap;
- int fillStyle;
-
- ret = fbChangeWindowAttributes (pWin, mask);
- if (mask & CWBackPixmap)
- {
- if (pWin->backgroundState == BackgroundPixmap)
- {
- pPixmap = pWin->background.pixmap;
- fillStyle = FillTiled;
- }
- else
- {
- pPixmap = 0;
- fillStyle = FillSolid;
- }
- pPattern = s3GetWindowPrivate(pWin);
- s3AllocPattern (pWin->drawable.pScreen,
- s3DrawMap (&pWin->drawable),
- pPixmap,
- pWin->drawable.x, pWin->drawable.y,
- fillStyle, 0, 0, &pPattern);
- DRAW_DEBUG ((DEBUG_PAINT_WINDOW, "Background pattern 0x%x pixmap 0x%x style %d",
- pPattern, pPixmap, fillStyle));
- s3SetWindowPrivate (pWin, pPattern);
- }
- return ret;
-}
-
-
-#ifndef S3_TRIO
-void
-s3PaintKey (DrawablePtr pDrawable,
- RegionPtr pRegion,
- CARD32 pixel,
- int fb)
-{
- SetupS3 (pDrawable->pScreen);
- s3ScreenInfo (pScreenPriv);
- int nBox = REGION_NUM_RECTS(pRegion);
- BoxPtr pBox = REGION_RECTS(pRegion);
- int ma;
-
- if (!nBox)
- return;
-
- for (ma = 0; s3s->fbmap[ma] >= 0; ma++)
- if (s3s->fbmap[ma] == fb)
- break;
- s3SetGlobalBitmap (pDrawable->pScreen, ma);
- _s3SetSolidFill (s3, pixel, GXcopy, 0xffffffff);
- while (nBox--)
- {
- _s3SolidRect(s3,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1);
- pBox++;
- }
- MarkSyncS3 (pDrawable->pScreen);
-}
-#endif
-
-void
-s3CopyWindowProc (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- GCPtr pGC,
- BoxPtr pboxOrig,
- int nboxOrig,
- int dx,
- int dy,
- Bool reverse,
- Bool upsidedown,
- Pixel bitplane,
- void *closure)
-{
- SetupS3(pDstDrawable->pScreen);
- s3ScreenInfo(pScreenPriv);
- KdScreenInfo *screen = pScreenPriv->screen;
- int srcX, srcY, dstX, dstY;
- int x1, x2;
- int w, h;
- int flags;
- int fb = (int) closure;
- int ma;
- BoxPtr pbox;
- int nbox;
- int bitsPerPixel;
-
-#ifdef S3_TRIO
- ma = 0;
-#else
- for (ma = 0; s3s->fbmap[ma] >= 0; ma++)
- if (s3s->fbmap[ma] == fb)
- break;
-#endif
- bitsPerPixel = screen->fb[fb].bitsPerPixel;
- if (bitsPerPixel == 24)
- dx *= 3;
- nbox = nboxOrig;
- pbox = pboxOrig;
- s3SetGlobalBitmap (pDstDrawable->pScreen, ma);
- _s3SetBlt(s3,GXcopy,~0);
- while (nbox--)
- {
- x1 = pbox->x1;
- x2 = pbox->x2;
- if (bitsPerPixel == 24)
- {
- x1 *= 3;
- x2 *= 3;
- }
-
- w = x2 - x1;
- h = pbox->y2 - pbox->y1;
- flags = 0;
- if (reverse)
- {
- dstX = x2 - 1;
- }
- else
- {
- dstX = x1;
- flags |= INC_X;
- }
- srcX = dstX + dx;
-
- if (upsidedown)
- {
- dstY = pbox->y2 - 1;
- }
- else
- {
- dstY = pbox->y1;
- flags |= INC_Y;
- }
- srcY = dstY + dy;
-
- _s3Blt (s3, srcX, srcY, dstX, dstY, w, h, flags);
- pbox++;
- }
- MarkSyncS3 (pDstDrawable->pScreen);
-}
-
-void
-s3CopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
-{
- ScreenPtr pScreen = pWin->drawable.pScreen;
- KdScreenPriv (pScreen);
- s3ScreenInfo (pScreenPriv);
- KdScreenInfo *screen = pScreenPriv->screen;
- RegionRec rgnDst;
- int dx, dy;
- WindowPtr pwinRoot;
-
- pwinRoot = WindowTable[pWin->drawable.pScreen->myNum];
-
- dx = ptOldOrg.x - pWin->drawable.x;
- dy = ptOldOrg.y - pWin->drawable.y;
-
- REGION_TRANSLATE(pWin->drawable.pScreen, prgnSrc, -dx, -dy);
-
- REGION_INIT (pWin->drawable.pScreen, &rgnDst, NullBox, 0);
-
- REGION_INTERSECT(pWin->drawable.pScreen, &rgnDst,
- &pWin->borderClip, prgnSrc);
-
- fbCopyRegion ((DrawablePtr)pwinRoot, (DrawablePtr)pwinRoot,
- 0,
- &rgnDst, dx, dy, s3CopyWindowProc, 0, 0);
-
- REGION_UNINIT(pWin->drawable.pScreen, &rgnDst);
-}
-
-void
-s3_24FillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox,
- unsigned long pixel, int alu, unsigned long planemask)
-{
- SetupS3(pDrawable->pScreen);
- register int r;
- int x1, x2;
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3DrawMap (pDrawable));
- _s3SetSolidFill(s3,pixel,alu,planemask);
-
- while (nBox--) {
- x1 = pBox->x1 * 3;
- x2 = pBox->x2 * 3;
- _s3SolidRect(s3,x1,pBox->y1,x2-x1,pBox->y2-pBox->y1);
- pBox++;
- }
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-#define ok24(p) (((p) & 0xffffff) == ((((p) & 0xff) << 16) | (((p) >> 8) & 0xffff)))
-
-void
-s3_24FillSpans (DrawablePtr pDrawable, GCPtr pGC, int n,
- DDXPointPtr ppt, int *pwidth, int fSorted)
-{
- SetupS3(pDrawable->pScreen);
- int x, y, x1, y1, x2, y2;
- int width;
- /* next three parameters are post-clip */
- int nTmp;
- int *pwidthFree;/* copies of the pointers to free */
- DDXPointPtr pptFree;
- BoxPtr extents;
- RegionPtr pClip = fbGetCompositeClip (pGC);
-
- if (pGC->fillStyle != FillSolid || !ok24 (pGC->fgPixel) || !ok24(pGC->planemask))
- {
- KdCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
- return;
- }
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3GCMap (pGC));
- if (REGION_NUM_RECTS(pClip) == 1)
- {
- extents = REGION_RECTS(pClip);
- x1 = extents->x1;
- x2 = extents->x2;
- y1 = extents->y1;
- y2 = extents->y2;
- _s3SetSolidFill(s3,pGC->fgPixel,pGC->alu,pGC->planemask);
- while (n--)
- {
- y = ppt->y;
- if (y1 <= y && y < y2)
- {
- x = ppt->x;
- width = *pwidth;
- if (x < x1)
- {
- width -= (x1 - x);
- x = x1;
- }
- if (x2 < x + width)
- width = x2 - x;
- if (width > 0)
- {
- _s3SolidRect(s3,x*3,y,width*3,1);
- }
- }
- ppt++;
- pwidth++;
- }
- }
- else
- {
- nTmp = n * miFindMaxBand(pClip);
- pwidthFree = (int *)xalloc(nTmp * sizeof(int));
- pptFree = (DDXPointRec *)xalloc(nTmp * sizeof(DDXPointRec));
- if(!pptFree || !pwidthFree)
- {
- if (pptFree) xfree(pptFree);
- if (pwidthFree) xfree(pwidthFree);
- return;
- }
- n = miClipSpans(fbGetCompositeClip(pGC),
- ppt, pwidth, n,
- pptFree, pwidthFree, fSorted);
- pwidth = pwidthFree;
- ppt = pptFree;
- _s3SetSolidFill(s3,pGC->fgPixel,pGC->alu,pGC->planemask);
- while (n--)
- {
- x = ppt->x;
- y = ppt->y;
- ppt++;
- width = *pwidth++;
- if (width)
- {
- _s3SolidRect(s3,x*3,y,width*3,1);
- }
- }
- xfree(pptFree);
- xfree(pwidthFree);
- }
- MarkSyncS3 (pDrawable->pScreen);
-}
-
-void
-s3_24CopyNtoN (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- GCPtr pGC,
- BoxPtr pbox,
- int nbox,
- int dx,
- int dy,
- Bool reverse,
- Bool upsidedown,
- Pixel bitplane,
- void *closure)
-{
- SetupS3(pDstDrawable->pScreen);
- int srcX, srcY, dstX, dstY;
- int w, h;
- int flags;
- int x1, x2;
-
- if (sourceInvarient (pGC->alu))
- {
- s3_24FillBoxSolid (pDstDrawable, nbox, pbox, 0, pGC->alu, pGC->planemask);
- return;
- }
-
- s3SetGlobalBitmap (pDstDrawable->pScreen, s3GCMap (pGC));
- _s3SetBlt(s3,pGC->alu,pGC->planemask);
- DRAW_DEBUG ((DEBUG_RENDER, "s3CopyNtoN alu %d planemask 0x%x",
- pGC->alu, pGC->planemask));
- dx *= 3;
- while (nbox--)
- {
- x1 = pbox->x1 * 3;
- x2 = pbox->x2 * 3;
- w = x2 - x1;
- h = pbox->y2 - pbox->y1;
- flags = 0;
- if (reverse)
- {
- dstX = x2 - 1;
- }
- else
- {
- dstX = x1;
- flags |= INC_X;
- }
- srcX = dstX + dx;
-
- if (upsidedown)
- {
- dstY = pbox->y2 - 1;
- }
- else
- {
- dstY = pbox->y1;
- flags |= INC_Y;
- }
- srcY = dstY + dy;
-
- _s3Blt (s3, srcX, srcY, dstX, dstY, w, h, flags);
- pbox++;
- }
- MarkSyncS3 (pSrcDrawable->pScreen);
-}
-
-RegionPtr
-s3_24CopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
- int srcx, int srcy, int width, int height, int dstx, int dsty)
-{
- SetupS3(pDstDrawable->pScreen);
-
- if (pSrcDrawable->type == DRAWABLE_WINDOW &&
- pDstDrawable->type == DRAWABLE_WINDOW &&
- ok24(pGC->planemask))
- {
- return fbDoCopy (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, s3_24CopyNtoN, 0, 0);
- }
- return KdCheckCopyArea (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height, dstx, dsty);
-}
-
-
-#define NUM_STACK_RECTS 1024
-
-void
-s3_24PolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
- int nrectFill, xRectangle *prectInit)
-{
- s3GCPrivate(pGC);
- xRectangle *prect;
- RegionPtr prgnClip;
- register BoxPtr pbox;
- register BoxPtr pboxClipped;
- BoxPtr pboxClippedBase;
- BoxPtr pextent;
- BoxRec stackRects[NUM_STACK_RECTS];
- int numRects;
- int n;
- int xorg, yorg;
- int x, y;
-
- if (pGC->fillStyle != FillSolid || !ok24 (pGC->fgPixel) || !ok24(pGC->planemask))
- {
- KdCheckPolyFillRect (pDrawable, pGC, nrectFill, prectInit);
- return;
- }
-
- prgnClip = fbGetCompositeClip(pGC);
- xorg = pDrawable->x;
- yorg = pDrawable->y;
-
- if (xorg || yorg)
- {
- prect = prectInit;
- n = nrectFill;
- while(n--)
- {
- prect->x += xorg;
- prect->y += yorg;
- prect++;
- }
- }
-
- prect = prectInit;
-
- numRects = REGION_NUM_RECTS(prgnClip) * nrectFill;
- if (numRects > NUM_STACK_RECTS)
- {
- pboxClippedBase = (BoxPtr)xalloc(numRects * sizeof(BoxRec));
- if (!pboxClippedBase)
- return;
- }
- else
- pboxClippedBase = stackRects;
-
- pboxClipped = pboxClippedBase;
-
- if (REGION_NUM_RECTS(prgnClip) == 1)
- {
- int x1, y1, x2, y2, bx2, by2;
-
- pextent = REGION_RECTS(prgnClip);
- x1 = pextent->x1;
- y1 = pextent->y1;
- x2 = pextent->x2;
- y2 = pextent->y2;
- while (nrectFill--)
- {
- if ((pboxClipped->x1 = prect->x) < x1)
- pboxClipped->x1 = x1;
-
- if ((pboxClipped->y1 = prect->y) < y1)
- pboxClipped->y1 = y1;
-
- bx2 = (int) prect->x + (int) prect->width;
- if (bx2 > x2)
- bx2 = x2;
- pboxClipped->x2 = bx2;
-
- by2 = (int) prect->y + (int) prect->height;
- if (by2 > y2)
- by2 = y2;
- pboxClipped->y2 = by2;
-
- prect++;
- if ((pboxClipped->x1 < pboxClipped->x2) &&
- (pboxClipped->y1 < pboxClipped->y2))
- {
- pboxClipped++;
- }
- }
- }
- else
- {
- int x1, y1, x2, y2, bx2, by2;
-
- pextent = REGION_EXTENTS(pGC->pScreen, prgnClip);
- x1 = pextent->x1;
- y1 = pextent->y1;
- x2 = pextent->x2;
- y2 = pextent->y2;
- while (nrectFill--)
- {
- BoxRec box;
-
- if ((box.x1 = prect->x) < x1)
- box.x1 = x1;
-
- if ((box.y1 = prect->y) < y1)
- box.y1 = y1;
-
- bx2 = (int) prect->x + (int) prect->width;
- if (bx2 > x2)
- bx2 = x2;
- box.x2 = bx2;
-
- by2 = (int) prect->y + (int) prect->height;
- if (by2 > y2)
- by2 = y2;
- box.y2 = by2;
-
- prect++;
-
- if ((box.x1 >= box.x2) || (box.y1 >= box.y2))
- continue;
-
- n = REGION_NUM_RECTS (prgnClip);
- pbox = REGION_RECTS(prgnClip);
-
- /* clip the rectangle to each box in the clip region
- this is logically equivalent to calling Intersect()
- */
- while(n--)
- {
- pboxClipped->x1 = max(box.x1, pbox->x1);
- pboxClipped->y1 = max(box.y1, pbox->y1);
- pboxClipped->x2 = min(box.x2, pbox->x2);
- pboxClipped->y2 = min(box.y2, pbox->y2);
- pbox++;
-
- /* see if clipping left anything */
- if(pboxClipped->x1 < pboxClipped->x2 &&
- pboxClipped->y1 < pboxClipped->y2)
- {
- pboxClipped++;
- }
- }
- }
- }
- if (pboxClipped != pboxClippedBase)
- {
- s3_24FillBoxSolid(pDrawable,
- pboxClipped-pboxClippedBase, pboxClippedBase,
- pGC->fgPixel, pGC->alu, pGC->planemask);
- }
- if (pboxClippedBase != stackRects)
- xfree(pboxClippedBase);
-}
-
-void
-s3_24SolidBoxClipped (DrawablePtr pDrawable,
- RegionPtr pClip,
- int x1,
- int y1,
- int x2,
- int y2,
- FbBits fg)
-{
- SetupS3 (pDrawable->pScreen);
- BoxPtr pbox;
- int nbox;
- int partX1, partX2, partY1, partY2;
-
- s3SetGlobalBitmap (pDrawable->pScreen, s3DrawMap (pDrawable));
- _s3SetSolidFill(s3,fg,GXcopy,~0);
-
- for (nbox = REGION_NUM_RECTS(pClip), pbox = REGION_RECTS(pClip);
- nbox--;
- pbox++)
- {
- partX1 = pbox->x1;
- if (partX1 < x1)
- partX1 = x1;
-
- partX2 = pbox->x2;
- if (partX2 > x2)
- partX2 = x2;
-
- if (partX2 <= partX1)
- continue;
-
- partY1 = pbox->y1;
- if (partY1 < y1)
- partY1 = y1;
-
- partY2 = pbox->y2;
- if (partY2 > y2)
- partY2 = y2;
-
- if (partY2 <= partY1)
- continue;
-
- partX1 *= 3;
- partX2 *= 3;
- _s3SolidRect(s3,partX1, partY1, partX2-partX1, partY2-partY1);
- }
- MarkSyncS3(pDrawable->pScreen);
-}
-
-void
-s3_24ImageGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int x,
- int y,
- unsigned int nglyph,
- CharInfoPtr *ppciInit,
- pointer pglyphBase)
-{
- FbGCPrivPtr pPriv = fbGetGCPrivate(pGC);
- CharInfoPtr *ppci;
- CharInfoPtr pci;
- unsigned char *pglyph; /* pointer bits in glyph */
- int gWidth, gHeight; /* width and height of glyph */
- FbStride gStride; /* stride of glyph */
- Bool opaque;
- int n;
- int gx, gy;
- FbBits *dst;
- FbStride dstStride;
- int dstBpp;
- int dstXoff, dstYoff;
- FbBits depthMask;
- int xBack, widthBack;
- int yBack, heightBack;
-
- depthMask = FbFullMask(pDrawable->depth);
- if (!ok24 (pGC->fgPixel) ||
- !ok24(pGC->bgPixel) ||
- !ok24(pGC->planemask))
- {
- KdCheckImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppciInit, pglyphBase);
- return;
- }
- fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff);
-
- x += pDrawable->x;
- y += pDrawable->y;
-
- ppci = ppciInit;
- n = nglyph;
- widthBack = 0;
- while (n--)
- widthBack += (*ppci++)->metrics.characterWidth;
-
- xBack = x;
- if (widthBack < 0)
- {
- xBack += widthBack;
- widthBack = -widthBack;
- }
- yBack = y - FONTASCENT(pGC->font);
- heightBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font);
- s3_24SolidBoxClipped (pDrawable,
- fbGetCompositeClip(pGC),
- xBack,
- yBack,
- xBack + widthBack,
- yBack + heightBack,
- pPriv->bg);
-
- KdCheckSync (pDrawable->pScreen);
-
- ppci = ppciInit;
- while (nglyph--)
- {
- pci = *ppci++;
- pglyph = FONTGLYPHBITS(pglyphBase, pci);
- gWidth = GLYPHWIDTHPIXELS(pci);
- gHeight = GLYPHHEIGHTPIXELS(pci);
- if (gWidth && gHeight)
- {
- gx = x + pci->metrics.leftSideBearing;
- gy = y - pci->metrics.ascent;
- if (gWidth <= sizeof (FbStip) * 8 &&
- fbGlyphIn (fbGetCompositeClip(pGC), gx, gy, gWidth, gHeight))
- {
- fbGlyph24 (dst + (gy - dstYoff) * dstStride,
- dstStride,
- dstBpp,
- (FbStip *) pglyph,
- pPriv->fg,
- gx - dstXoff,
- gHeight);
- }
- else
- {
- gStride = GLYPHWIDTHBYTESPADDED(pci) / sizeof (FbStip);
- fbPutXYImage (pDrawable,
- fbGetCompositeClip(pGC),
- pPriv->fg,
- pPriv->bg,
- pPriv->pm,
- GXcopy,
- FALSE,
-
- gx,
- gy,
- gWidth, gHeight,
-
- (FbStip *) pglyph,
- gStride,
- 0);
- }
- }
- x += pci->metrics.characterWidth;
- }
-}
-
-static const GCOps s3_24GCOps = {
- s3_24FillSpans,
- KdCheckSetSpans,
- KdCheckPutImage,
- KdCheckCopyArea,
- KdCheckCopyPlane,
- KdCheckPolyPoint,
- KdCheckPolylines,
- KdCheckPolySegment,
- KdCheckPolyRectangle,
- KdCheckPolyArc,
- KdCheckFillPolygon,
- s3_24PolyFillRect,
- KdCheckPolyFillArc,
- miPolyText8,
- miPolyText16,
- miImageText8,
- miImageText16,
- s3_24ImageGlyphBlt,
- KdCheckPolyGlyphBlt,
- KdCheckPushPixels,
-};
-
-void
-s3_24ValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
-{
- if (pDrawable->type != DRAWABLE_WINDOW)
- pGC->ops = (GCOps *) &kdAsyncPixmapGCOps;
- else
- pGC->ops = (GCOps *) &s3_24GCOps;
- fbValidateGC (pGC, changes, pDrawable);
-}
-
-GCFuncs s3_24GCFuncs = {
- s3_24ValidateGC,
- miChangeGC,
- miCopyGC,
- miDestroyGC,
- miChangeClip,
- miDestroyClip,
- miCopyClip
-};
-
-Bool
-s3_24CreateGC (GCPtr pGC)
-{
- if (!fbCreateGC (pGC))
- return FALSE;
-
- if (pGC->depth != 1)
- pGC->funcs = &s3_24GCFuncs;
-
- return TRUE;
-}
-
-Bool
-s3_24CreateWindow(WindowPtr pWin)
-{
- return fbCreateWindow (pWin);
-}
-
-
-Bool
-s3DrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- s3ScreenInfo(pScreenPriv);
- int ncache_w, ncache_h, ncache;
- int px, py;
- S3PatternCache *cache;
- Bool dumb = FALSE;
- int ma;
-
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 8:
- case 16:
- case 32:
- break;
- case 24:
- dumb = TRUE;
- break;
- default:
- return FALSE;
- }
- /*
- * Hook up asynchronous drawing
- */
- RegisterSync (pScreen);
- /*
- * Replace various fb screen functions
- */
- if (dumb)
- {
- pScreen->CreateGC = s3_24CreateGC;
- pScreen->CreateWindow = s3_24CreateWindow;
- pScreen->CopyWindow = s3CopyWindow;
- }
- else
- {
- if (!dixRequestPrivate(s3GCPrivateKey, sizeof (s3PrivGCRec)))
- return FALSE;
- pScreen->CreateGC = s3CreateGC;
- pScreen->CreateWindow = s3CreateWindow;
- pScreen->ChangeWindowAttributes = s3ChangeWindowAttributes;
- pScreen->DestroyWindow = s3DestroyWindow;
-#ifndef S3_TRIO
- if (pScreenPriv->screen->fb[1].depth)
- {
- FbOverlayScrPrivPtr pScrPriv = fbOverlayGetScrPriv(pScreen);
-
- pScrPriv->PaintKey = s3PaintKey;
- pScrPriv->CopyWindow = s3CopyWindowProc;
- pScreen->CopyWindow = fbOverlayCopyWindow;
- }
- else
-#endif
- pScreen->CopyWindow = s3CopyWindow;
-
- /*
- * Initialize patterns
- */
-#ifdef S3_TRIO
- ma = 0;
-#else
- for (ma = 0; s3s->fbmap[ma] >= 0; ma++)
-#endif
- {
- ncache_w = s3s->fb[ma].offscreen_width / S3_TILE_SIZE;
- ncache_h = s3s->fb[ma].offscreen_height / S3_TILE_SIZE;
- ncache = ncache_w * ncache_h;
- if (ncache > 64)
- ncache = 64;
- DRAW_DEBUG ((DEBUG_S3INIT, "ncache_w %d ncache_h %d ncache %d",
- ncache_w, ncache_h, ncache));
- s3s->fb[ma].patterns.cache = (S3PatternCache *) xalloc (ncache * sizeof (S3PatternCache));
- if (s3s->fb[ma].patterns.cache)
- {
- DRAW_DEBUG ((DEBUG_S3INIT, "Have pattern cache"));
- s3s->fb[ma].patterns.ncache = ncache;
- s3s->fb[ma].patterns.last_used = 0;
- s3s->fb[ma].patterns.last_id = 0;
- cache = s3s->fb[ma].patterns.cache;
- for (py = 0; py < ncache_h && ncache; py++)
- for (px = 0; px < ncache_w && ncache; px++)
- {
- cache->id = 0;
- cache->x = s3s->fb[ma].offscreen_x + px * S3_TILE_SIZE;
- cache->y = s3s->fb[ma].offscreen_y + py * S3_TILE_SIZE;
- cache++;
- ncache--;
- }
- }
- }
- }
- return TRUE;
-}
-
-void
-s3DrawEnable (ScreenPtr pScreen)
-{
- SetupS3(pScreen);
- s3ScreenInfo(pScreenPriv);
- int c;
- int ma;
-
- s3SetGlobalBitmap (pScreen, 0);
- _s3WaitIdleEmpty (s3);
- if (pScreenPriv->screen->fb[0].bitsPerPixel == 24)
- {
- _s3SetScissorsTl(s3, 0, 0);
- _s3SetScissorsBr(s3, pScreenPriv->screen->width*3 - 1, pScreenPriv->screen->height - 1);
- _s3SetSolidFill(s3, pScreen->whitePixel, GXcopy, ~0);
- _s3SolidRect (s3, 0, 0, pScreenPriv->screen->width*3, pScreenPriv->screen->height);
- }
- else
- {
- /*
- * Flush pattern cache
- */
-#ifdef S3_TRIO
- ma = 0;
-#else
- for (ma = 0; s3s->fbmap[ma] >= 0; ma++)
-#endif
- {
- for (c = 0; c < s3s->fb[ma].patterns.ncache; c++)
- s3s->fb[ma].patterns.cache[c].id = 0;
- }
-
- _s3SetScissorsTl(s3, 0, 0);
- _s3SetScissorsBr(s3, pScreenPriv->screen->width - 1, pScreenPriv->screen->height - 1);
- _s3SetSolidFill(s3, pScreen->blackPixel, GXcopy, ~0);
- _s3SolidRect (s3, 0, 0, pScreenPriv->screen->width, pScreenPriv->screen->height);
- }
- MarkSyncS3 (pScreen);
-}
-
-void
-s3DrawDisable (ScreenPtr pScreen)
-{
- SetupS3 (pScreen);
- _s3WaitIdleEmpty (s3);
-}
-
-void
-s3DrawFini (ScreenPtr pScreen)
-{
- SetupS3(pScreen);
- s3ScreenInfo(pScreenPriv);
- int ma;
-
-#ifdef S3_TRIO
- ma = 0;
-#else
- for (ma = 0; s3s->fbmap[ma] >= 0; ma++)
-#endif
- {
- if (s3s->fb[ma].patterns.cache)
- {
- xfree (s3s->fb[ma].patterns.cache);
- s3s->fb[ma].patterns.cache = 0;
- s3s->fb[ma].patterns.ncache = 0;
- }
- }
-}
-
-void
-s3DrawSync (ScreenPtr pScreen)
-{
- SetupS3(pScreen);
-
- _s3WaitIdleEmpty(s3c->s3);
-}
diff --git a/hw/kdrive/savage/s3draw.h b/hw/kdrive/savage/s3draw.h
deleted file mode 100644
index eab8e395e..000000000
--- a/hw/kdrive/savage/s3draw.h
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifndef _S3DRAW_H_
-#define _S3DRAW_H_
-
-extern DevPrivateKey s3GCPrivateKey;
-extern DevPrivateKey s3WindowPrivateKey;
-
-typedef struct _s3Pattern {
- S3PatternCache *cache;
- int id;
- PixmapPtr pPixmap;
- int fillStyle;
- int xrot, yrot;
- unsigned int fore, back;
-} s3PatternRec, *s3PatternPtr;
-
-typedef struct _s3PrivGC {
- int type; /* type of drawable validated against */
- int ma; /* stream descriptor */
- s3PatternPtr pPattern; /* pattern */
-} s3PrivGCRec, *s3PrivGCPtr;
-
-#define s3GetGCPrivate(g) ((s3PrivGCPtr) \
- dixLookupPrivate(&(g)->devPrivates, s3GCPrivateKey))
-
-#define s3GCPrivate(g) s3PrivGCPtr s3Priv = s3GetGCPrivate(g)
-
-#define s3GetWindowPrivate(w) ((s3PatternPtr) \
- dixLookupPrivate(&(w)->devPrivates, s3WindowPrivateKey))
-
-#define s3SetWindowPrivate(w,p) \
- dixSetPrivate(&(w)->devPrivates, s3WindowPrivateKey, p)
-
-void _s3LoadPattern (ScreenPtr pScreen, int fb, s3PatternPtr pPattern);
-
-#define SetupS3(s) KdScreenPriv(s); \
- s3CardInfo(pScreenPriv); \
- S3Ptr s3 = s3c->s3
-
-#ifdef S3_SYNC_DEBUG
-#define SYNC_DEBUG() fprintf (stderr, "Sync at %s:%d\n", __FILE__,__LINE__)
-#else
-#define SYNC_DEBUG()
-#endif
-
-#define S3_ASYNC
-#ifdef S3_ASYNC
-#define CheckSyncS3(s) KdCheckSync(s)
-#define MarkSyncS3(s) KdMarkSync(s)
-#define RegisterSync(screen) KdScreenInitAsync (screen)
-#else
-#define CheckSyncS3(s3c)
-#define MarkSyncS3(s3c) _s3WaitIdleEmpty(s3c->s3)
-#define RegisterSync(screen)
-#endif
-
-#define WIDEN(x) ((unsigned long) (x))
-#define MERGE(a,b) ((WIDEN(a) << 16) | WIDEN(b))
-
-#define s3BitmapDescriptor(_stream) ((_stream) + 1)
-
-#ifdef S3_TRIO
-#define s3DrawMap(pDraw) 0
-#define s3SetGlobalBitmap(s,d)
-#else
-#define s3DrawMap(pDraw) ((pDraw)->depth == \
- getS3ScreenInfo(pScreenPriv)->primary_depth ? 0 : 1)
-#endif
-
-#define s3GCMap(pGC) (s3GetGCPrivate(pGC)->ma)
-
-/*
- * Ok, so the S3 is broken -- it expects bitmaps to come MSB bit order,
- * but it's willing to take them in LSB byte order. These macros
- * flip bits around without flipping bytes. Instead of using a table
- * and burning memory bandwidth, do them in place with the CPU.
- */
-
-/* The MIPS compiler automatically places these constants in registers */
-#define S3InvertBits32(v) { \
- v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \
- v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \
- v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \
-}
-
-#define S3InvertBits16(v) { \
- v = ((v & 0x5555) << 1) | ((v >> 1) & 0x5555); \
- v = ((v & 0x3333) << 2) | ((v >> 2) & 0x3333); \
- v = ((v & 0x0f0f) << 4) | ((v >> 4) & 0x0f0f); \
-}
-
-#define S3InvertBits8(v) { \
- v = ((v & 0x55) << 1) | ((v >> 1) & 0x55); \
- v = ((v & 0x33) << 2) | ((v >> 2) & 0x33); \
- v = ((v & 0x0f) << 4) | ((v >> 4) & 0x0f); \
-}
-
-#define S3ByteSwap32(x) ((x) = (((x) >> 24) | \
- (((x) >> 8) & 0xff00) | \
- (((x) << 8) & 0xff0000) | \
- ((x) << 24)))
-
-#define S3ByteSwap16(x) ((x) = ((x) << 8) | ((x) >> 8))
-
-#if BITMAP_BIT_ORDER == LSBFirst
-#define S3AdjustBits32(x) S3InvertBits32(x)
-#define S3AdjustBits16(x) S3InvertBits16(x)
-#else
-#define S3AdjustBits32(x) S3ByteSwap32(x)
-#define S3AdjustBits16(x) S3ByteSwap16(x)
-#endif
-
-#define _s3WaitSlot(s3) _s3WaitSlots(s3,1)
-
-#define _s3SetFg(s3,_fg) { \
- DRAW_DEBUG ((DEBUG_REGISTERS, " fg <- 0x%x", _fg));\
- s3->fg = (_fg); \
-}
-
-#define _s3SetBg(s3,_bg) { \
- DRAW_DEBUG ((DEBUG_REGISTERS, " bg <- 0x%x", _bg));\
- s3->bg = (_bg); \
-}
-
-#define _s3SetWriteMask(s3,_mask) {\
- DRAW_DEBUG((DEBUG_REGISTERS," write_mask <- 0x%x", _mask)); \
- s3->write_mask = (_mask); \
-}
-
-#define _s3SetReadMask(s3,_mask) {\
- DRAW_DEBUG((DEBUG_REGISTERS," read_mask <- 0x%x", _mask)); \
- s3->read_mask = (_mask); \
-}
-
-#define _s3SetPixelControl(s3,_ctl) { \
- DRAW_DEBUG((DEBUG_REGISTERS, " pix_cntl <- 0x%x", PIX_CNTL | (_ctl))); \
- s3->pix_cntl_mult_misc2 = MERGE (CONTROL_MISC2, PIX_CNTL | (_ctl)); \
-}
-
-#define _s3SetFgMix(s3,_mix) { \
- DRAW_DEBUG((DEBUG_REGISTERS, " fg_mix <- 0x%x", _mix)); \
- s3->enh_fg_mix = (_mix); \
-}
-
-#define _s3SetBgMix(s3,_mix) { \
- DRAW_DEBUG((DEBUG_REGISTERS, " bg_mix <- 0x%x", _mix)); \
- s3->enh_bg_mix = (_mix); \
-}
-
-#define _s3SetMix(s3,fg_mix,bg_mix) { \
- DRAW_DEBUG((DEBUG_REGISTERS, " alt_mix <- 0x%x", MERGE(fg_mix,bg_mix))); \
- s3->alt_mix = MERGE(fg_mix,bg_mix); \
-}
-
-#define _s3SetCur(s3,_x,_y) { \
- DRAW_DEBUG ((DEBUG_REGISTERS, " alt_curxy <- 0x%x", MERGE(_x,_y))); \
- s3->alt_curxy = MERGE(_x,_y); \
-}
-
-#define _s3SetStep(s3,_x,_y) { \
- DRAW_DEBUG ((DEBUG_REGISTERS, " alt_step <- 0x%x", MERGE(_x,_y))); \
- s3->alt_step = MERGE(_x,_y); \
-}
-
-#define _s3SetErr(s3,_e) { \
- DRAW_DEBUG ((DEBUG_REGISTERS, " err_term <- 0x%x", _e)); \
- s3->err_term = (_e); \
-}
-
-#define _s3SetPcnt(s3,_x,_y) { \
- DRAW_DEBUG ((DEBUG_REGISTERS, " alt_pcnt <- 0x%x", MERGE(_x,_y))); \
- s3->alt_pcnt = MERGE(_x,_y); \
-}
-
-#define _s3SetScissorsTl(s3,t,l) {\
- DRAW_DEBUG ((DEBUG_REGISTERS, " scissors_tl <- 0x%x", MERGE(t,l))); \
- s3->scissors_tl = MERGE(t,l); \
-}
-
-#define _s3SetScissorsBr(s3,b,r) {\
- DRAW_DEBUG ((DEBUG_REGISTERS, " scissors_br <- 0x%x", MERGE(b,r))); \
- s3->scissors_br = MERGE(b,r); \
-}
-
-#define _s3CmdWait(s3)
-
-#define _s3SetCmd(s3,_cmd) { \
- DRAW_DEBUG((DEBUG_REGISTERS, " cmd <- 0x%x", _cmd)); \
- _s3CmdWait(s3); \
- s3->cmd_gp_stat = (_cmd); \
- /* { CARD32 __junk__; __junk__ = s3->cmd_gp_stat; } */ \
-}
-
-#define _s3SetSolidFill(s3,pix,alu,mask) { \
- DRAW_DEBUG((DEBUG_SET,"set fill 0x%x %d 0x%x",pix,alu,mask)); \
- _s3WaitSlots(s3,4); \
- _s3SetFg (s3, pix); \
- _s3SetWriteMask(s3,mask); \
- _s3SetMix (s3, FSS_FRGDCOL | s3alu[alu], BSS_BKGDCOL | MIX_SRC); \
- _s3SetPixelControl (s3, MIXSEL_FRGDMIX); \
- DRAW_DEBUG((DEBUG_SET," done")); \
-}
-
-#define _s3SolidRect(s3,x,y,w,h) {\
- DRAW_DEBUG((DEBUG_RENDER,"solid rect %d,%d %dx%d",x,y,w,h)); \
- _s3WaitSlots(s3,3); \
- _s3SetCur(s3, x, y); \
- _s3SetPcnt (s3, (w)-1, (h)-1); \
- _s3SetCmd (s3, CMD_RECT|INC_X|INC_Y|DRAW|WRTDATA); \
- DRAW_DEBUG((DEBUG_RENDER," done")); \
-}
-
-#define _s3SolidLine(s3,maj,min,len,cmd) { \
- DRAW_DEBUG ((DEBUG_RENDER, "solid line 0x%x 0x%x 0x%x", maj, min, cmd)); \
- _s3WaitSlots(s3,4); \
- _s3SetPcnt(s3, (len), 0); \
- _s3SetStep(s3, 2*((min) - (maj)), 2*(min)); \
- _s3SetErr(s3, 2*(min) - (maj)); \
- _s3SetCmd (s3, CMD_LINE | (cmd) | DRAW | WRTDATA); \
-}
-
-#define _s3ClipLine(s3,cmd,e1,e2,e,len) {\
- DRAW_DEBUG ((DEBUG_RENDER, "clip line 0x%x 0x%x 0x%x 0x%x 0x%x", cmd,e1,e2,e,len)); \
- _s3WaitSlots(s3, 4); \
- _s3SetPcnt (s3, (len), 0); \
- _s3SetStep (s3, e2, e1); \
- _s3SetErr (s3, e); \
- _s3SetCmd (s3, CMD_LINE | (cmd) | DRAW | WRTDATA); \
-}
-
-#define _s3SetTile(s3,alu,mask) { \
- DRAW_DEBUG ((DEBUG_SET,"set tile %d 0x%x", alu, mask)); \
- _s3WaitSlots(s3,3); \
- _s3SetWriteMask(s3, mask); \
- _s3SetMix(s3, FSS_BITBLT | s3alu[alu], BSS_BITBLT|s3alu[alu]); \
- _s3SetPixelControl (s3, MIXSEL_FRGDMIX); \
- DRAW_DEBUG((DEBUG_SET," done")); \
-}
-
-/*
- * For some reason, MIX_DST doesn't work in this mode; use MIX_OR with
- * an explicit 0 pixel value
- */
-#define _s3SetStipple(s3,alu,mask,_fg) {\
- DRAW_DEBUG ((DEBUG_SET,"set stipple 0x%x %d 0x%x", _fg, alu, mask)); \
- _s3WaitSlots(s3,5); \
- _s3SetFg (s3, _fg); \
- _s3SetBg (s3, 0); \
- _s3SetWriteMask(s3,mask); \
- _s3SetMix (s3, FSS_FRGDCOL | s3alu[alu], BSS_BKGDCOL|MIX_OR); \
- _s3SetPixelControl (s3, MIXSEL_EXPBLT); \
- DRAW_DEBUG((DEBUG_SET," done")); \
-}
-
-#define _s3SetOpaqueStipple(s3,alu,mask,_fg,_bg) {\
- DRAW_DEBUG ((DEBUG_SET,"set opaque stipple 0x%x 0x%x %d 0x%x", _fg, _bg, alu, mask)); \
- _s3WaitSlots(s3,5); \
- _s3SetFg (s3, _fg); \
- _s3SetBg (s3, _bg); \
- _s3SetWriteMask(s3,mask); \
- _s3SetMix (s3, FSS_FRGDCOL | s3alu[alu], BSS_BKGDCOL|s3alu[alu]); \
- _s3SetPixelControl (s3, MIXSEL_EXPBLT); \
- DRAW_DEBUG((DEBUG_SET," done")); \
-}
-
-#define _s3PatRect(s3,px,py,x,y,w,h) {\
- DRAW_DEBUG ((DEBUG_RENDER, "pat rect %d,%d %dx%d", x,y,w,h)); \
- _s3WaitSlots(s3, 4); \
- _s3SetCur (s3, px, py); \
- _s3SetStep (s3, x, y); \
- _s3SetPcnt (s3, (w)-1, (h)-1); \
- _s3SetCmd (s3, CMD_PATBLT|INC_X|INC_Y|DRAW|PLANAR|WRTDATA); \
- DRAW_DEBUG((DEBUG_RENDER," done")); \
-}
-
-#define _s3SetBlt(s3,alu,mask) { \
- DRAW_DEBUG ((DEBUG_SET,"set blt %d 0x%x", alu, mask)); \
- _s3WaitSlots(s3,3); \
- _s3SetPixelControl (s3, MIXSEL_FRGDMIX); \
- _s3SetMix(s3, FSS_BITBLT | s3alu[alu], BSS_BITBLT | s3alu[alu]); \
- _s3SetWriteMask(s3, mask); \
- DRAW_DEBUG((DEBUG_SET," done")); \
-}
-
-#define _s3Blt(s3,_sx,_sy,_dx,_dy,_w,_h,_dir) { \
- DRAW_DEBUG ((DEBUG_RENDER, "blt %d,%d -> %d,%d %dx%d 0x%x", \
- _sx,_sy,_dx,_dy,_w,_h,_dir)); \
- _s3WaitSlots(s3,4); \
- _s3SetCur(s3,_sx,_sy); \
- _s3SetStep(s3,_dx,_dy); \
- _s3SetPcnt(s3,(_w)-1,(_h)-1); \
- _s3SetCmd (s3, CMD_BITBLT | (_dir) | DRAW | WRTDATA); \
- DRAW_DEBUG((DEBUG_RENDER," done")); \
-}
-
-#define _s3SetOpaquePlaneBlt(s3,alu,mask,_fg,_bg) {\
- DRAW_DEBUG ((DEBUG_SET,"set opaque plane blt 0x%x 0x%x %d 0x%x", \
- _fg, _bg, alu, mask)); \
- /* _s3WaitSlots(s3, 5); */ \
- _s3WaitIdleEmpty (s3); \
- _s3SetFg(s3,_fg); \
- _s3SetBg(s3,_bg); \
- _s3SetWriteMask(s3,mask); \
- _s3SetMix(s3,FSS_FRGDCOL|s3alu[alu], BSS_BKGDCOL|s3alu[alu]); \
- _s3SetPixelControl(s3,MIXSEL_EXPPC); \
- DRAW_DEBUG((DEBUG_SET," done")); \
-}
-
-#define _s3SetTransparentPlaneBlt(s3,alu,mask,_fg) {\
- DRAW_DEBUG ((DEBUG_SET,"set transparent plane blt 0x%x %d 0x%x", \
- _fg, alu, mask)); \
- /*_s3WaitSlots(s3, 4); */ \
- _s3WaitIdleEmpty (s3); \
- _s3SetFg(s3,_fg); \
- _s3SetWriteMask(s3,mask); \
- _s3SetMix(s3,FSS_FRGDCOL|s3alu[alu], BSS_BKGDCOL|MIX_DST); \
- _s3SetPixelControl(s3,MIXSEL_EXPPC); \
- DRAW_DEBUG((DEBUG_SET," done")); \
-}
-
-/* Across the plane blt */
-#define _s3PlaneBlt(s3,x,y,w,h) {\
- DRAW_DEBUG ((DEBUG_RENDER, "plane blt %d,%d %dx%d", x,y,w,h)); \
- _s3WaitSlots(s3, 4); \
- _s3SetPixelControl(s3,MIXSEL_EXPPC); \
- _s3SetCur(s3, x, y); \
- _s3SetPcnt (s3, (w)-1, (h)-1); \
- _s3SetCmd (s3, \
- CMD_RECT| /* Fill rectangle */ \
- BYTSEQ| /* LSB byte order */ \
- _32BIT| /* 32 bit data on 32 bit boundaries */ \
- PCDATA| /* Data from CPU */ \
- INC_X|INC_Y| /* X and Y both increasing */ \
- DRAW| /* Draw, not move */ \
- PLANAR| /* multi pixel */ \
- WRTDATA); \
- DRAW_DEBUG((DEBUG_RENDER," done")); \
-}
-
-#define _s3SetClip(s3,pbox) {\
- DRAW_DEBUG ((DEBUG_SET, "set clip %dx%d -> %dx%d ", \
- pbox->x1, pbox->y1, pbox->x2, pbox->y2)); \
- _s3WaitSlots(s3, 2); \
- _s3SetScissorsTl(s3,(pbox)->x1, (pbox)->y1); \
- _s3SetScissorsBr(s3,(pbox)->x2 - 1, (pbox)->y2 - 1); \
- DRAW_DEBUG((DEBUG_SET," done")); \
-}
-
-#define _s3ResetClip(s3,pScreen) { \
- DRAW_DEBUG ((DEBUG_SET, "reset clip")); \
- _s3WaitSlots(s3, 2); \
- _s3SetScissorsTl(s3,0,0); \
- _s3SetScissorsBr(s3,pScreen->width - 1, pScreen->height - 1); \
- DRAW_DEBUG((DEBUG_SET," done")); \
-}
-
-RegionPtr
-s3CopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
- int srcx, int srcy, int width, int height, int dstx, int dsty);
-
-RegionPtr
-s3CopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
- int srcx, int srcy, int width, int height,
- int dstx, int dsty, unsigned long bitPlane);
-
-void
-s3PushPixels (GCPtr pGC, PixmapPtr pBitmap,
- DrawablePtr pDrawable,
- int w, int h, int x, int y);
-
-void
-s3FillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox,
- unsigned long pixel, int alu, unsigned long planemask);
-
-void
-s3FillBoxPattern (DrawablePtr pDrawable, int nBox, BoxPtr pBox,
- int alu, unsigned long planemask, s3PatternPtr pPattern);
-
-void
-s3PolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
- int nrectFill, xRectangle *prectInit);
-
-void
-s3FillSpans (DrawablePtr pDrawable, GCPtr pGC, int n,
- DDXPointPtr ppt, int *pwidth, int fSorted);
-
-void
-s3PolyFillArcSolid (DrawablePtr pDraw, GCPtr pGC, int narcs, xArc *parcs);
-
-void
-s3FillPoly (DrawablePtr pDrawable, GCPtr pGC, int shape,
- int mode, int count, DDXPointPtr ptsIn);
-
-void
-s3PolyGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int xInit, int y,
- unsigned int nglyphInit,
- CharInfoPtr *ppciInit,
- pointer pglyphBase);
-
-void
-s3ImageGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int x, int y,
- unsigned int nglyph,
- CharInfoPtr *ppci,
- pointer pglyphBase);
-
-void
-s3ImageTEGlyphBlt (DrawablePtr pDrawable, GCPtr pGC,
- int xInit, int y,
- unsigned int nglyphInit,
- CharInfoPtr *ppciInit,
- pointer pglyphBase);
-
-void
-s3PolyTEGlyphBlt (DrawablePtr pDrawable, GCPtr pGC,
- int x, int y,
- unsigned int nglyph, CharInfoPtr *ppci,
- pointer pglyphBase);
-
-void
-s3Polylines (DrawablePtr pDrawable, GCPtr pGC,
- int mode, int nptInit, DDXPointPtr pptInit);
-
-void
-s3PolySegment (DrawablePtr pDrawable, GCPtr pGC,
- int nsegInit, xSegment *pSegInit);
-
-void
-s3FillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox,
- unsigned long pixel, int alu, unsigned long planemask);
-
-void s3ValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable);
-
-void
-s3CheckGCFill (GCPtr pGC);
-
-void
-s3MoveGCFill (GCPtr pGC);
-
-void
-s3SyncProc (DrawablePtr pDrawable);
-
-#endif
diff --git a/hw/kdrive/savage/s3gc.c b/hw/kdrive/savage/s3gc.c
deleted file mode 100644
index ade14fa1f..000000000
--- a/hw/kdrive/savage/s3gc.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-#include "s3draw.h"
-
-#include "Xmd.h"
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "fontstruct.h"
-#include "dixfontstr.h"
-#include "migc.h"
-
-/*
- * Common op groups. Common assumptions:
- *
- * lineWidth 0
- * lineStyle LineSolid
- * fillStyle FillSolid
- * rop GXcopy
- * font <= 32 pixels wide
- */
-
-/* TE font */
-static const GCOps s3TEOps = {
- s3FillSpans,
- KdCheckSetSpans,
- KdCheckPutImage,
- s3CopyArea,
- s3CopyPlane,
- KdCheckPolyPoint,
- s3Polylines,
- s3PolySegment,
- KdCheckPolyRectangle,
- KdCheckPolyArc,
- s3FillPoly,
- s3PolyFillRect,
- s3PolyFillArcSolid,
- miPolyText8,
- miPolyText16,
- miImageText8,
- miImageText16,
- s3ImageTEGlyphBlt,
- s3PolyTEGlyphBlt,
- s3PushPixels
-};
-
-/* Non TE font */
-static const GCOps s3NonTEOps = {
- s3FillSpans,
- KdCheckSetSpans,
- KdCheckPutImage,
- s3CopyArea,
- s3CopyPlane,
- KdCheckPolyPoint,
- s3Polylines,
- s3PolySegment,
- KdCheckPolyRectangle,
- KdCheckPolyArc,
- s3FillPoly,
- s3PolyFillRect,
- s3PolyFillArcSolid,
- miPolyText8,
- miPolyText16,
- miImageText8,
- miImageText16,
- s3ImageGlyphBlt,
- s3PolyGlyphBlt,
- s3PushPixels
-};
-
-static GCOps *
-s3MatchCommon (DrawablePtr pDraw, GCPtr pGC, FbGCPrivPtr fbPriv)
-{
- KdScreenPriv (pDraw->pScreen);
-
- if (!REGION_NOTEMPTY(pDraw->pScreen,fbGetCompositeClip(pGC)))
- {
- DRAW_DEBUG ((DEBUG_CLIP, "Empty composite clip, clipping all ops"));
- return &kdNoopOps;
- }
-
- if (pDraw->type != DRAWABLE_WINDOW)
- return (GCOps *) &kdAsyncPixmapGCOps;
-
- if (pGC->lineWidth != 0)
- return 0;
- if (pGC->lineStyle != LineSolid)
- return 0;
- if (pGC->fillStyle != FillSolid)
- return 0;
- if (fbPriv->and != 0)
- return 0;
- if (pGC->font)
- {
- if (TERMINALFONT(pGC->font))
- return (GCOps *) &s3TEOps;
- else
- return (GCOps *) &s3NonTEOps;
- }
- return 0;
-}
-
-void
-s3ValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
-{
- int new_type; /* drawable type has changed */
- int new_origin;
-
- /* flags for changing the proc vector */
- FbGCPrivPtr fbPriv;
- s3PrivGCPtr s3Priv;
- int oneRect;
- GCOps *newops;
-
- fbPriv = fbGetGCPrivate(pGC);
- s3Priv = s3GetGCPrivate(pGC);
-
- new_type = FALSE;
- new_origin = FALSE;
-
- /*
- * If the type of drawable has changed, fix up accelerated functions
- */
- if (s3Priv->type != pDrawable->type)
- {
- new_type = TRUE;
- s3Priv->type = pDrawable->type;
- }
-
- /*
- * Check tile/stipple origin
- */
- if (pGC->lastWinOrg.x != pDrawable->x || pGC->lastWinOrg.y != pDrawable->y)
- new_origin = TRUE;
-
- /*
- * Call down to FB to set clip list and rrop values
- */
-
- fbValidateGC (pGC, changes, pDrawable);
-
- /*
- * Check accelerated pattern if necessary
- */
- if (changes & (GCFillStyle|GCStipple|GCTile))
- s3CheckGCFill (pGC);
- else if (s3Priv->pPattern &&
- (new_origin || changes & (GCTileStipXOrigin|GCTileStipYOrigin)))
- s3MoveGCFill (pGC);
-
- /*
- * Try to match common vector
- */
-
- if (newops = s3MatchCommon (pDrawable, pGC, fbPriv))
- {
- if (pGC->ops->devPrivate.val)
- miDestroyGCOps (pGC->ops);
- pGC->ops = newops;
- return;
- }
-
- /*
- * No common vector matched, create private ops vector and
- * fill it in
- */
- if (!pGC->ops->devPrivate.val)
- {
- /*
- * Switch from noop vector by first switching to fb
- * vector and fixing it up
- */
- if (pGC->ops == &kdNoopOps)
- {
- pGC->ops = (GCOps *) &kdAsyncPixmapGCOps;
- new_type = TRUE;
- }
- pGC->ops = miCreateGCOps (pGC->ops);
- pGC->ops->devPrivate.val = 1;
- }
-
- /*
- * Fills
- */
- if (new_type || (changes & (GCFillStyle|GCTile|GCStipple)))
- {
- pGC->ops->FillSpans = KdCheckFillSpans;
- pGC->ops->PolyFillRect = KdCheckPolyFillRect;
- if (s3Priv->type == DRAWABLE_WINDOW &&
- (pGC->fillStyle != FillTiled || s3Priv->pPattern))
- {
- pGC->ops->FillSpans = s3FillSpans;
- pGC->ops->PolyFillRect = s3PolyFillRect;
- }
- }
-
- /*
- * Blt
- */
- if (new_type)
- {
- pGC->ops->CopyArea = s3CopyArea;
- pGC->ops->CopyPlane = s3CopyPlane;
- pGC->ops->PushPixels = s3PushPixels;
- }
-
- /*
- * Lines
- */
- if (new_type || (changes & (GCLineStyle|GCLineWidth|GCFillStyle)))
- {
- pGC->ops->Polylines = KdCheckPolylines;
- pGC->ops->PolySegment = KdCheckPolySegment;
- if (pGC->lineStyle == LineSolid &&
- pGC->lineWidth == 0 &&
- pGC->fillStyle == FillSolid &&
- s3Priv->type == DRAWABLE_WINDOW)
- {
- pGC->ops->Polylines = s3Polylines;
- pGC->ops->PolySegment = s3PolySegment;
- }
- }
-
- /*
- * Polygons
- */
- if (new_type || (changes & (GCFillStyle)))
- {
- pGC->ops->FillPolygon = KdCheckFillPolygon;
- if (s3Priv->type == DRAWABLE_WINDOW &&
- pGC->fillStyle == FillSolid)
- {
- pGC->ops->FillPolygon = s3FillPoly;
- }
- }
-
- /*
- * Filled arcs
- */
- if (new_type || (changes & GCFillStyle))
- {
- pGC->ops->PolyFillArc = KdCheckPolyFillArc;
- if (s3Priv->type == DRAWABLE_WINDOW &&
- pGC->fillStyle == FillSolid)
- {
- pGC->ops->PolyFillArc = s3PolyFillArcSolid;
- }
- }
-
- /*
- * Text
- */
- if (new_type || (changes & (GCFont|GCFillStyle)))
- {
- pGC->ops->PolyGlyphBlt = KdCheckPolyGlyphBlt;
- pGC->ops->ImageGlyphBlt = KdCheckImageGlyphBlt;
- if (s3Priv->type == DRAWABLE_WINDOW && pGC->font)
- {
- if (pGC->fillStyle == FillSolid)
- {
- if (TERMINALFONT(pGC->font))
- pGC->ops->PolyGlyphBlt = s3PolyTEGlyphBlt;
- else
- pGC->ops->PolyGlyphBlt = s3PolyGlyphBlt;
- }
- if (TERMINALFONT(pGC->font))
- pGC->ops->ImageGlyphBlt = s3ImageTEGlyphBlt;
- else
- pGC->ops->ImageGlyphBlt = s3ImageGlyphBlt;
- }
- }
-}
diff --git a/hw/kdrive/savage/s3reg.c b/hw/kdrive/savage/s3reg.c
deleted file mode 100644
index 673a2ac8f..000000000
--- a/hw/kdrive/savage/s3reg.c
+++ /dev/null
@@ -1,1301 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3reg.h"
-
-#define CR00 S3_CR+0x00
-#define CR01 S3_CR+0x01
-#define CR02 S3_CR+0x02
-#define CR03 S3_CR+0x03
-#define CR04 S3_CR+0x04
-#define CR05 S3_CR+0x05
-#define CR06 S3_CR+0x06
-#define CR07 S3_CR+0x07
-#define CR08 S3_CR+0x08
-#define CR09 S3_CR+0x09
-#define CR0A S3_CR+0x0A
-#define CR0B S3_CR+0x0B
-#define CR0C S3_CR+0x0C
-#define CR0D S3_CR+0x0D
-#define CR0E S3_CR+0x0E
-#define CR0F S3_CR+0x0F
-#define CR10 S3_CR+0x10
-#define CR11 S3_CR+0x11
-#define CR12 S3_CR+0x12
-#define CR13 S3_CR+0x13
-#define CR14 S3_CR+0x14
-#define CR15 S3_CR+0x15
-#define CR16 S3_CR+0x16
-#define CR17 S3_CR+0x17
-#define CR18 S3_CR+0x18
-#define CR19 S3_CR+0x19
-#define CR1A S3_CR+0x1A
-#define CR1B S3_CR+0x1B
-#define CR1C S3_CR+0x1C
-#define CR1D S3_CR+0x1D
-#define CR1E S3_CR+0x1E
-#define CR1F S3_CR+0x1F
-#define CR20 S3_CR+0x20
-#define CR21 S3_CR+0x21
-#define CR22 S3_CR+0x22
-#define CR23 S3_CR+0x23
-#define CR24 S3_CR+0x24
-#define CR25 S3_CR+0x25
-#define CR26 S3_CR+0x26
-#define CR27 S3_CR+0x27
-#define CR28 S3_CR+0x28
-#define CR29 S3_CR+0x29
-#define CR2A S3_CR+0x2A
-#define CR2B S3_CR+0x2B
-#define CR2C S3_CR+0x2C
-#define CR2D S3_CR+0x2D
-#define CR2E S3_CR+0x2E
-#define CR2F S3_CR+0x2F
-#define CR30 S3_CR+0x30
-#define CR31 S3_CR+0x31
-#define CR32 S3_CR+0x32
-#define CR33 S3_CR+0x33
-#define CR34 S3_CR+0x34
-#define CR35 S3_CR+0x35
-#define CR36 S3_CR+0x36
-#define CR37 S3_CR+0x37
-#define CR38 S3_CR+0x38
-#define CR39 S3_CR+0x39
-#define CR3A S3_CR+0x3A
-#define CR3B S3_CR+0x3B
-#define CR3C S3_CR+0x3C
-#define CR3D S3_CR+0x3D
-#define CR3E S3_CR+0x3E
-#define CR3F S3_CR+0x3F
-#define CR40 S3_CR+0x40
-#define CR41 S3_CR+0x41
-#define CR42 S3_CR+0x42
-#define CR43 S3_CR+0x43
-#define CR44 S3_CR+0x44
-#define CR45 S3_CR+0x45
-#define CR46 S3_CR+0x46
-#define CR47 S3_CR+0x47
-#define CR48 S3_CR+0x48
-#define CR49 S3_CR+0x49
-#define CR4A S3_CR+0x4A
-#define CR4B S3_CR+0x4B
-#define CR4C S3_CR+0x4C
-#define CR4D S3_CR+0x4D
-#define CR4E S3_CR+0x4E
-#define CR4F S3_CR+0x4F
-#define CR50 S3_CR+0x50
-#define CR51 S3_CR+0x51
-#define CR52 S3_CR+0x52
-#define CR53 S3_CR+0x53
-#define CR54 S3_CR+0x54
-#define CR55 S3_CR+0x55
-#define CR56 S3_CR+0x56
-#define CR57 S3_CR+0x57
-#define CR58 S3_CR+0x58
-#define CR59 S3_CR+0x59
-#define CR5A S3_CR+0x5A
-#define CR5B S3_CR+0x5B
-#define CR5C S3_CR+0x5C
-#define CR5D S3_CR+0x5D
-#define CR5E S3_CR+0x5E
-#define CR5F S3_CR+0x5F
-#define CR60 S3_CR+0x60
-#define CR61 S3_CR+0x61
-#define CR62 S3_CR+0x62
-#define CR63 S3_CR+0x63
-#define CR64 S3_CR+0x64
-#define CR65 S3_CR+0x65
-#define CR66 S3_CR+0x66
-#define CR67 S3_CR+0x67
-#define CR68 S3_CR+0x68
-#define CR69 S3_CR+0x69
-#define CR6A S3_CR+0x6A
-#define CR6B S3_CR+0x6B
-#define CR6C S3_CR+0x6C
-#define CR6D S3_CR+0x6D
-#define CR6E S3_CR+0x6E
-#define CR6F S3_CR+0x6F
-#define CR70 S3_CR+0x70
-#define CR71 S3_CR+0x71
-#define CR72 S3_CR+0x72
-#define CR73 S3_CR+0x73
-#define CR74 S3_CR+0x74
-#define CR75 S3_CR+0x75
-#define CR76 S3_CR+0x76
-#define CR77 S3_CR+0x77
-#define CR78 S3_CR+0x78
-#define CR79 S3_CR+0x79
-#define CR7A S3_CR+0x7A
-#define CR7B S3_CR+0x7B
-#define CR7C S3_CR+0x7C
-#define CR7D S3_CR+0x7D
-#define CR7E S3_CR+0x7E
-#define CR7F S3_CR+0x7F
-#define CR80 S3_CR+0x80
-#define CR81 S3_CR+0x81
-#define CR82 S3_CR+0x82
-#define CR83 S3_CR+0x83
-#define CR84 S3_CR+0x84
-#define CR85 S3_CR+0x85
-#define CR86 S3_CR+0x86
-#define CR87 S3_CR+0x87
-#define CR88 S3_CR+0x88
-#define CR89 S3_CR+0x89
-#define CR8A S3_CR+0x8A
-#define CR8B S3_CR+0x8B
-#define CR8C S3_CR+0x8C
-#define CR8D S3_CR+0x8D
-#define CR8E S3_CR+0x8E
-#define CR8F S3_CR+0x8F
-#define CR90 S3_CR+0x90
-#define CR91 S3_CR+0x91
-#define CR92 S3_CR+0x92
-#define CR93 S3_CR+0x93
-#define CR94 S3_CR+0x94
-#define CR95 S3_CR+0x95
-#define CR96 S3_CR+0x96
-#define CR97 S3_CR+0x97
-#define CR98 S3_CR+0x98
-#define CR99 S3_CR+0x99
-#define CR9A S3_CR+0x9A
-#define CR9B S3_CR+0x9B
-#define CR9C S3_CR+0x9C
-#define CR9D S3_CR+0x9D
-#define CR9E S3_CR+0x9E
-#define CR9F S3_CR+0x9F
-#define CRA0 S3_CR+0xA0
-#define CRA1 S3_CR+0xA1
-#define CRA2 S3_CR+0xA2
-#define CRA3 S3_CR+0xA3
-#define CRA4 S3_CR+0xA4
-#define CRA5 S3_CR+0xA5
-#define CRA6 S3_CR+0xA6
-#define CRA7 S3_CR+0xA7
-#define CRA8 S3_CR+0xA8
-#define CRA9 S3_CR+0xA9
-#define CRAA S3_CR+0xAA
-#define CRAB S3_CR+0xAB
-#define CRAC S3_CR+0xAC
-#define CRAD S3_CR+0xAD
-#define CRAE S3_CR+0xAE
-#define CRAF S3_CR+0xAF
-#define CRB0 S3_CR+0xB0
-#define CRB1 S3_CR+0xB1
-#define CRB2 S3_CR+0xB2
-#define CRB3 S3_CR+0xB3
-#define CRB4 S3_CR+0xB4
-#define CRB5 S3_CR+0xB5
-#define CRB6 S3_CR+0xB6
-#define CRB7 S3_CR+0xB7
-#define CRB8 S3_CR+0xB8
-#define CRB9 S3_CR+0xB9
-#define CRBA S3_CR+0xBA
-#define CRBB S3_CR+0xBB
-#define CRBC S3_CR+0xBC
-#define CRBD S3_CR+0xBD
-#define CRBE S3_CR+0xBE
-#define CRBF S3_CR+0xBF
-
-#define CR_FIRST CR00
-
-VgaReg s3_h_total[] = {
- CR00, 0, 8,
- CR5D, 0, 1,
- CR5F, 0, 2,
- VGA_REG_END
-};
-
-VgaReg s3_h_display_end[] = {
- CR01, 0, 8,
- CR5D, 1, 1,
- CR5F, 2, 2,
- VGA_REG_END
-};
-
-VgaReg s3_h_blank_start[] = {
- CR02, 0, 8,
- CR5D, 2, 1,
- CR5F, 4, 2,
- VGA_REG_END
-};
-
-VgaReg s3_h_blank_end[] = {
- CR03, 0, 5,
- CR05, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_display_skew[] = {
- CR03, 5, 2,
- VGA_REG_END
-};
-
-VgaReg s3_h_sync_start[] = {
- CR04, 0, 8,
- CR5D, 4, 1,
- CR5F, 6, 2,
- VGA_REG_END
-};
-
-VgaReg s3_h_sync_end[] = {
- CR05, 0, 5,
- VGA_REG_END
-};
-
-VgaReg s3_h_skew[] = {
- CR05, 5, 2,
- VGA_REG_END
-};
-
-VgaReg s3_v_total[] = {
- CR06, 0, 8,
- CR07, 0, 1,
- CR07, 5, 1,
- CR5E, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_preset_row_scan[] = {
- CR08, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_max_scan_line[] = {
- CR09, 0, 5,
- VGA_REG_END
-};
-
-VgaReg s3_start_address[] = {
- CR0D, 0, 8,
- CR0C, 0, 8,
- CR69, 0, 7,
- VGA_REG_END
-};
-
-VgaReg s3_v_retrace_start[] = {
- CR10, 0, 8,
- CR07, 2, 1,
- CR07, 7, 1,
- CR5E, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_v_retrace_end[] = {
- CR11, 0, 4,
- VGA_REG_END
-};
-
-VgaReg s3_clear_v_retrace_int[] = {
- CR11, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_disable_v_retrace_int[] = {
- CR11, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_lock_crtc[] = {
- CR11, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_v_display_end[] = {
- CR12, 0, 8,
- CR07, 1, 1,
- CR07, 6, 1,
- CR5E, 1, 1,
- VGA_REG_END
-};
-
-VgaReg s3_screen_offset[] = {
- CR13, 0, 8,
- CR51, 4, 2,
- VGA_REG_END
-};
-
-VgaReg s3_count_by_4_mode[] = {
- CR14, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_doubleword_mode[] = {
- CR14, 6, 1,
- VGA_REG_END
-};
-
-VgaReg s3_v_blank_start[] = {
- CR15, 0, 8,
- CR07, 3, 1,
- CR09, 5, 1,
- CR5E, 2, 1,
- VGA_REG_END
-};
-
-VgaReg s3_v_blank_end[] = {
- CR16, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_2bk_cga[] = {
- CR17, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_4bk_hga[] = {
- CR17, 1, 1,
- VGA_REG_END
-};
-
-VgaReg s3_v_total_double[] = {
- CR17, 2, 1,
- VGA_REG_END
-};
-
-VgaReg s3_word_mode[] = {
- CR17, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_address_16k_wrap[] = {
- CR17, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_byte_mode[] = {
- CR17, 6, 1,
- VGA_REG_END
-};
-
-VgaReg s3_hardware_reset[] = {
- CR17, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_line_compare[] = {
- CR18, 0, 8,
- CR07, 4, 1,
- CR09, 6, 1,
- CR5E, 6, 1,
- VGA_REG_END
-};
-
-VgaReg s3_delay_primary_load[] = {
- CR21, 1, 1,
- VGA_REG_END
-};
-
-VgaReg s3_device_id[] = {
- CR2E, 0, 8,
- CR2D, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_revision[] = {
- CR2F, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_enable_vga_16bit[] = {
- CR31, 2, 1,
- VGA_REG_END
-};
-
-VgaReg s3_enhanced_memory_mapping[] = {
- CR31, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_lock_dac_writes[] = {
- CR33, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_border_select[] = {
- CR33, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_lock_palette[] = {
- CR33, 6, 1,
- VGA_REG_END
-};
-
-VgaReg s3_enable_sff[] = {
- CR34, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_lock_vert[] = {
- CR35, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_lock_horz[] = {
- CR35, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_io_disable[] = {
- CR36, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_mem_size[] = {
- CR36, 5, 3,
- VGA_REG_END
-};
-
-VgaReg s3_register_lock_1 [] = {
- CR38, 0, 8, /* load with 0x48 */
- VGA_REG_END
-};
-
-VgaReg s3_register_lock_2 [] = {
- CR39, 0, 8, /* load with 0xa0 */
- VGA_REG_END
-};
-
-VgaReg s3_refresh_control[] = {
- CR3A, 0, 2,
- VGA_REG_END
-};
-
-VgaReg s3_enable_256[] = {
- CR3A, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_disable_pci_read_bursts[] = {
- CR3A, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_h_start_fifo_fetch[] = {
- CR3B, 0, 8,
- CR5D, 6, 1,
- CR5B, 2, 2,
- VGA_REG_END
-};
-
-VgaReg s3_enable_2d_access[] = {
- CR40, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_interlace[] = {
- CR42, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_old_screen_off_8[] = {
- CR43, 2, 1,
- VGA_REG_END
-};
-
-VgaReg s3_h_counter_double_mode[] = {
- CR43, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_enable[] = {
- CR45, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_right[] = {
- CR45, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_xhigh[] = {
- CR46, 0, 3,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_xlow[] = {
- CR47, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_yhigh[] = {
- CR48, 0, 3,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_ylow[] = {
- CR49, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_fg[] = {
- CR4A, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_bg[] = {
- CR4B, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_address[] = {
- CR4D, 0, 8,
- CR4C, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_xoff[] = {
- CR4E, 0, 6,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_yoff[] = {
- CR4F, 0, 6,
- VGA_REG_END
-};
-
-VgaReg s3_ge_screen_width[] = {
- CR50, 6, 2,
- CR50, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_pixel_length[] = {
- CR50, 4, 2,
- VGA_REG_END
-};
-
-VgaReg s3_big_endian_linear[] = {
- CR53, 1, 2,
- VGA_REG_END
-};
-
-VgaReg s3_mmio_select[] = {
- CR53, 3, 2,
- VGA_REG_END
-};
-
-VgaReg s3_mmio_window[] = {
- CR53, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_swap_nibbles[] = {
- CR53, 6, 1,
- VGA_REG_END
-};
-
-VgaReg s3_cursor_ms_x11[] = {
- CR55, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_linear_window_size[] = {
- CR58, 0, 2,
- VGA_REG_END
-};
-
-VgaReg s3_enable_linear[] = {
- CR58, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_h_blank_extend[] = {
- CR5D, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_h_sync_extend[] = {
- CR5D, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_sdclk_skew[] = {
- CR60, 0, 4,
- VGA_REG_END
-};
-
-VgaReg s3_delay_blank[] = {
- CR65, 3, 2,
- VGA_REG_END
-};
-
-VgaReg s3_delay_h_enable[] = {
- CR65, 6, 2,
- CR65, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_enable_2d_3d[] = {
- CR66, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_pci_disconnect_enable[] = {
- CR66, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_primary_load_control[] = {
- CR66, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_secondary_load_control[] = {
- CR66, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_pci_retry_enable[] = {
- CR66, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_streams_mode[] = {
- CR67, 2, 2,
- VGA_REG_END
-};
-
-VgaReg s3_color_mode[] = {
- CR67, 4, 4,
- VGA_REG_END
-};
-
-VgaReg s3_primary_stream_definition[] = {
- CR69, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_primary_stream_timeout[] = {
- CR71, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_master_control_unit_timeout[] = {
- CR74, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_command_buffer_timeout[] = {
- CR75, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_lpb_timeout[] = {
- CR76, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_cpu_timeout[] = {
- CR78, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_2d_graphics_engine_timeout[] = {
- CR79, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_fifo_drain_delay[] = {
- CR85, 0, 3,
- VGA_REG_END
-};
-
-VgaReg s3_fifo_fetch_timing[] = {
- CR85, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_dac_power_up_time[] = {
- CR86, 0, 7,
- VGA_REG_END
-};
-
-VgaReg s3_dac_power_saving_disable[] = {
- CR86, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_flat_panel_output_control_1[] = {
- CR90, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_streams_fifo_delay[] = {
- CR90, 4, 2,
- VGA_REG_END
-};
-
-VgaReg s3_flat_panel_output_control_2[] = {
- CR90, 6, 1,
- VGA_REG_END
-};
-
-VgaReg s3_enable_l1_parameter[] = {
- CR90, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_primary_stream_l1[] = {
- CR91, 0, 8,
- CR90, 0, 3,
- VGA_REG_END
-};
-
-#define CR_LAST CR91
-
-#define SR00 S3_SR+0x00
-#define SR01 S3_SR+0x01
-#define SR02 S3_SR+0x02
-#define SR03 S3_SR+0x03
-#define SR04 S3_SR+0x04
-#define SR05 S3_SR+0x05
-#define SR06 S3_SR+0x06
-#define SR07 S3_SR+0x07
-#define SR08 S3_SR+0x08
-#define SR09 S3_SR+0x09
-#define SR0A S3_SR+0x0A
-#define SR0B S3_SR+0x0B
-#define SR0C S3_SR+0x0C
-#define SR0D S3_SR+0x0D
-#define SR0E S3_SR+0x0E
-#define SR0F S3_SR+0x0F
-#define SR10 S3_SR+0x10
-#define SR11 S3_SR+0x11
-#define SR12 S3_SR+0x12
-#define SR13 S3_SR+0x13
-#define SR14 S3_SR+0x14
-#define SR15 S3_SR+0x15
-#define SR16 S3_SR+0x16
-#define SR17 S3_SR+0x17
-#define SR18 S3_SR+0x18
-#define SR19 S3_SR+0x19
-#define SR1A S3_SR+0x1A
-#define SR1B S3_SR+0x1B
-#define SR1C S3_SR+0x1C
-#define SR1D S3_SR+0x1D
-#define SR1E S3_SR+0x1E
-#define SR1F S3_SR+0x1F
-#define SR20 S3_SR+0x20
-#define SR21 S3_SR+0x21
-#define SR22 S3_SR+0x22
-#define SR23 S3_SR+0x23
-#define SR24 S3_SR+0x24
-#define SR25 S3_SR+0x25
-#define SR26 S3_SR+0x26
-#define SR27 S3_SR+0x27
-#define SR28 S3_SR+0x28
-#define SR29 S3_SR+0x29
-#define SR2A S3_SR+0x2A
-#define SR2B S3_SR+0x2B
-#define SR2C S3_SR+0x2C
-#define SR2D S3_SR+0x2D
-#define SR2E S3_SR+0x2E
-#define SR2F S3_SR+0x2F
-#define SR30 S3_SR+0x30
-#define SR31 S3_SR+0x31
-#define SR32 S3_SR+0x32
-#define SR33 S3_SR+0x33
-#define SR34 S3_SR+0x34
-#define SR35 S3_SR+0x35
-#define SR36 S3_SR+0x36
-#define SR37 S3_SR+0x37
-#define SR38 S3_SR+0x38
-#define SR39 S3_SR+0x39
-#define SR3A S3_SR+0x3A
-#define SR3B S3_SR+0x3B
-#define SR3C S3_SR+0x3C
-#define SR3D S3_SR+0x3D
-#define SR3E S3_SR+0x3E
-#define SR3F S3_SR+0x3F
-#define SR40 S3_SR+0x40
-#define SR41 S3_SR+0x41
-#define SR42 S3_SR+0x42
-#define SR43 S3_SR+0x43
-#define SR44 S3_SR+0x44
-#define SR45 S3_SR+0x45
-#define SR46 S3_SR+0x46
-#define SR47 S3_SR+0x47
-#define SR48 S3_SR+0x48
-#define SR49 S3_SR+0x49
-#define SR4A S3_SR+0x4A
-#define SR4B S3_SR+0x4B
-#define SR4C S3_SR+0x4C
-#define SR4D S3_SR+0x4D
-#define SR4E S3_SR+0x4E
-#define SR4F S3_SR+0x4F
-#define SR50 S3_SR+0x50
-#define SR51 S3_SR+0x51
-#define SR52 S3_SR+0x52
-#define SR53 S3_SR+0x53
-#define SR54 S3_SR+0x54
-#define SR55 S3_SR+0x55
-#define SR56 S3_SR+0x56
-#define SR57 S3_SR+0x57
-#define SR58 S3_SR+0x58
-#define SR59 S3_SR+0x59
-#define SR5A S3_SR+0x5A
-#define SR5B S3_SR+0x5B
-#define SR5C S3_SR+0x5C
-#define SR5D S3_SR+0x5D
-#define SR5E S3_SR+0x5E
-#define SR5F S3_SR+0x5F
-#define SR60 S3_SR+0x60
-#define SR61 S3_SR+0x61
-#define SR62 S3_SR+0x62
-#define SR63 S3_SR+0x63
-#define SR64 S3_SR+0x64
-#define SR65 S3_SR+0x65
-#define SR66 S3_SR+0x66
-#define SR67 S3_SR+0x67
-#define SR68 S3_SR+0x68
-#define SR69 S3_SR+0x69
-#define SR6A S3_SR+0x6A
-#define SR6B S3_SR+0x6B
-#define SR6C S3_SR+0x6C
-#define SR6D S3_SR+0x6D
-#define SR6E S3_SR+0x6E
-#define SR6F S3_SR+0x6F
-
-#define SR_FIRST SR02
-
-VgaReg s3_dot_clock_8[] = {
- SR01, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_screen_off[] = {
- SR01, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_enable_write_plane[] = {
- SR02, 0, 4,
- VGA_REG_END
-};
-
-VgaReg s3_extended_memory_access[] = {
- SR04, 1, 1,
- VGA_REG_END
-};
-
-VgaReg s3_sequential_addressing_mode[] = {
- SR04, 2, 1,
- VGA_REG_END
-};
-
-VgaReg s3_select_chain_4_mode[] = {
- SR04, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_unlock_extended_sequencer[] = {
- SR08, 0, 8, /* write 0x06 */
- VGA_REG_END
-};
-
-VgaReg s3_linear_addressing_control[] = {
- SR09, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_disable_io_ports[] = {
- SR09, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_hsync_control[] = {
- SR0D, 4, 2,
- VGA_REG_END
-};
-
-VgaReg s3_vsync_control[] = {
- SR0D, 6, 2,
- VGA_REG_END
-};
-
-VgaReg s3_mclk_n[] = {
- SR10, 0, 5,
- VGA_REG_END
-};
-
-VgaReg s3_mclk_r[] = {
- SR10, 5, 2,
- VGA_REG_END
-};
-
-VgaReg s3_mclk_m[] = {
- SR11, 0, 7,
- VGA_REG_END
-};
-
-VgaReg s3_dclk_n[] = {
- SR12, 0, 6,
- SR29, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_dclk_r[] = {
- SR12, 6, 2,
- SR29, 2, 1,
- VGA_REG_END
-};
-
-VgaReg s3_dclk_m[] = {
- SR13, 0, 8,
- SR29, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_mclk_load[] = {
- SR15, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_dclk_load[] = {
- SR15, 1, 1,
- VGA_REG_END
-};
-
-VgaReg s3_dclk_over_2[] = {
- SR15, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_clock_load_imm[] = {
- SR15, 5, 1,
- VGA_REG_END
-};
-
-VgaReg s3_dclk_invert[] = {
- SR15, 6, 1,
- VGA_REG_END
-};
-
-VgaReg s3_enable_clock_double[] = {
- SR18, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_dclk_double_15_16_invert[] = {
- SR1A, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_enable_gamma_correction[] = {
- SR1B, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_enable_8_bit_luts[] = {
- SR1B, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_dclk_control[] = {
- SR1B, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_eclk_n[] = {
- SR32, 0, 5,
- VGA_REG_END
-};
-
-VgaReg s3_eclk_r[] = {
- SR32, 5, 2,
- VGA_REG_END
-};
-
-VgaReg s3_eclk_m[] = {
- SR32, 0, 5,
- VGA_REG_END
-};
-
-VgaReg s3_vga_dclk_n[] = {
- SR36, 0, 6,
- SR39, 4, 1,
- VGA_REG_END
-};
-
-VgaReg s3_vga_dclk_r[] = {
- SR36, 6, 2,
- SR39, 2, 1,
- VGA_REG_END
-};
-
-VgaReg s3_vga_dclk_m1[] = {
- SR37, 0, 8,
- SR39, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_vga_dclk_m2[] = {
- SR38, 0, 8,
- SR39, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_vga_clk_select[] = {
- SR39, 0, 1,
- VGA_REG_END
-};
-
-#define SR_LAST SR39
-
-#define AR00 (S3_AR+0x00)
-#define AR10 (S3_AR+0x10)
-#define AR11 (S3_AR+0x11)
-#define AR12 (S3_AR+0x12)
-#define AR13 (S3_AR+0x13)
-#define AR14 (S3_AR+0x14)
-
-#define AR_FIRST AR00
-
-VgaReg s3_select_graphics_mode[] = {
- AR10, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_enable_blinking[] = {
- AR10, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_border_color[] = {
- AR11, 0, 8,
- VGA_REG_END
-};
-
-#define AR_LAST AR11
-
-VgaReg s3_io_addr_select[] = {
- S3_MISC_OUT, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_enable_ram[] = {
- S3_MISC_OUT, 1, 1,
- VGA_REG_END
-};
-
-VgaReg s3_clock_select[] = {
- S3_MISC_OUT, 2, 2,
- VGA_REG_END
-};
-
-VgaReg s3_horz_sync_neg[] = {
- S3_MISC_OUT, 6, 1,
- VGA_REG_END
-};
-
-VgaReg s3_vert_sync_neg[] = {
- S3_MISC_OUT, 7, 1,
- VGA_REG_END
-};
-
-VgaReg s3_display_mode_inactive[] = {
- S3_INPUT_STATUS_1, 0, 1,
- VGA_REG_END
-};
-
-VgaReg s3_vertical_sync_active[] = {
- S3_INPUT_STATUS_1, 3, 1,
- VGA_REG_END
-};
-
-VgaReg s3_dac_mask[] = {
- S3_DAC + 0, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_dac_read_index[] = {
- S3_DAC + 1, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_dac_write_index[] = {
- S3_DAC + 2, 0, 8,
- VGA_REG_END
-};
-
-VgaReg s3_dac_data[] = {
- S3_DAC + 3, 0, 8,
- VGA_REG_END
-};
-
-VGA8
-_s3Inb (VgaCard *card, VGA16 port)
-{
- VGAVOL8 *reg;
-
- if (card->closure)
- return VgaReadMemb ((VGA32) card->closure + port);
- else
- return VgaInb (port);
-}
-
-void
-_s3Outb (VgaCard *card, VGA8 value, VGA16 port)
-{
- if (card->closure)
- VgaWriteMemb (value, (VGA32) card->closure + port);
- else
- VgaOutb (value, port);
-}
-
-void
-_s3RegMap (VgaCard *card, VGA16 reg, VgaMap *map, VGABOOL write)
-{
-
- if (reg < S3_SR + S3_NSR)
- {
- map->access = VgaAccessIndIo;
- map->port = 0x3c4;
- map->addr = 0;
- map->value = 1;
- map->index = reg - S3_SR;
- }
- else if (reg < S3_GR + S3_NGR)
- {
- map->access = VgaAccessIndIo;
- map->port = 0x3ce;
- map->addr = 0;
- map->value = 1;
- map->index = reg - S3_GR;
- }
- else if (reg < S3_AR + S3_NAR)
- {
- reg -= S3_AR;
- map->access = VgaAccessDone;
- /* reset AFF to index */
- (void) _s3Inb (card, 0x3da);
- if (reg >= 16)
- reg |= 0x20;
- _s3Outb (card, reg, 0x3c0);
- if (write)
- _s3Outb (card, map->value, 0x3c0);
- else
- map->value = _s3Inb (card, 0x3c1);
- if (!(reg & 0x20))
- {
- /* enable video display again */
- (void) _s3Inb (card, 0x3da);
- _s3Outb (card, 0x20, 0x3c0);
- }
- return;
- }
- else if (reg < S3_CR + S3_NCR)
- {
- map->access = VgaAccessIndIo;
- map->port = 0x3d4;
- map->addr = 0;
- map->value = 1;
- map->index = reg - S3_CR;
- }
- else if (reg < S3_DAC + S3_NDAC)
- {
- map->access = VgaAccessIo;
- map->port = 0x3c6 + reg - S3_DAC;
- }
- else switch (reg) {
- case S3_MISC_OUT:
- map->access = VgaAccessIo;
- if (write)
- map->port = 0x3c2;
- else
- map->port = 0x3cc;
- break;
- case S3_INPUT_STATUS_1:
- map->access = VgaAccessIo;
- map->port = 0x3da;
- break;
- }
- if (card->closure)
- {
- map->port = map->port + (VGA32) card->closure;
- if (map->access == VgaAccessIo)
- map->access = VgaAccessMem;
- if (map->access == VgaAccessIndIo)
- map->access = VgaAccessIndMem;
- }
-}
-
-VgaSave s3Saves[] = {
- CR_FIRST, CR18,
- CR31, CR_LAST,
- SR_FIRST, SR15,
- SR18, SR_LAST,
- AR_FIRST, AR_LAST,
- S3_MISC_OUT, S3_MISC_OUT,
- VGA_SAVE_END
-};
-
-void
-s3RegInit (S3Vga *s3vga, VGAVOL8 *mmio)
-{
- s3vga->card.map = _s3RegMap;
- s3vga->card.closure = (void *) mmio;
- s3vga->card.max = S3_NREG;
- s3vga->card.values = s3vga->values;
- s3vga->card.saves = s3Saves;
-}
-
-void
-s3Save (S3Vga *s3vga)
-{
- s3vga->save_lock_crtc = s3Get(s3vga, s3_lock_crtc);
- s3SetImm (s3vga, s3_lock_crtc, 0);
- s3vga->save_register_lock_1 = s3Get (s3vga, s3_register_lock_1);
- s3SetImm (s3vga, s3_register_lock_1, 0x48);
- s3vga->save_register_lock_2 = s3Get (s3vga, s3_register_lock_2);
- s3SetImm (s3vga, s3_register_lock_2, 0xa5);
- s3vga->save_unlock_extended_sequencer = s3Get (s3vga, s3_unlock_extended_sequencer);
- s3SetImm (s3vga, s3_unlock_extended_sequencer, 0x06);
- s3vga->save_lock_horz = s3Get (s3vga, s3_lock_horz);
- s3SetImm (s3vga, s3_lock_horz, 0);
- s3vga->save_lock_vert = s3Get (s3vga, s3_lock_vert);
- s3SetImm (s3vga, s3_lock_vert, 0);
- s3vga->save_dot_clock_8 = s3Get (s3vga, s3_dot_clock_8);
- VgaPreserve (&s3vga->card);
-}
-
-void
-s3Reset (S3Vga *s3vga)
-{
- VgaRestore (&s3vga->card);
- s3SetImm (s3vga, s3_clock_load_imm, 1);
- s3SetImm (s3vga, s3_clock_load_imm, 0);
- s3SetImm (s3vga, s3_dot_clock_8, s3vga->save_dot_clock_8);
- s3SetImm (s3vga, s3_lock_vert, s3vga->save_lock_vert);
- s3SetImm (s3vga, s3_lock_horz, s3vga->save_lock_horz);
- s3SetImm (s3vga, s3_lock_dac_writes, s3vga->save_lock_dac_writes);
- s3SetImm (s3vga, s3_unlock_extended_sequencer, s3vga->save_unlock_extended_sequencer);
- s3SetImm (s3vga, s3_register_lock_2, s3vga->save_register_lock_2);
- s3SetImm (s3vga, s3_register_lock_1, s3vga->save_register_lock_1);
- s3SetImm (s3vga, s3_lock_crtc, s3vga->save_lock_crtc);
- VgaFinish (&s3vga->card);
-}
diff --git a/hw/kdrive/savage/s3reg.h b/hw/kdrive/savage/s3reg.h
deleted file mode 100644
index 5c5b09f6d..000000000
--- a/hw/kdrive/savage/s3reg.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifndef _S3REG_H_
-#define _S3REG_H_
-
-#include "vga.h"
-
-#define S3_SR 0
-#define S3_NSR 0x70
-#define S3_GR (S3_SR+S3_NSR)
-#define S3_NGR 0x09
-#define S3_AR (S3_GR+S3_NGR)
-#define S3_NAR 0x15
-#define S3_CR (S3_AR+S3_NAR)
-#define S3_NCR 0xc0
-#define S3_DAC (S3_CR+S3_NCR)
-#define S3_NDAC 4
-#define S3_MISC_OUT (S3_DAC + S3_NDAC)
-#define S3_INPUT_STATUS_1 (S3_MISC_OUT+1)
-#define S3_NREG (S3_INPUT_STATUS_1+1)
-
-extern VgaReg s3_h_total[];
-extern VgaReg s3_h_display_end[];
-extern VgaReg s3_h_blank_start[];
-extern VgaReg s3_h_blank_end[];
-extern VgaReg s3_display_skew[];
-extern VgaReg s3_h_sync_start[];
-extern VgaReg s3_h_sync_end[];
-extern VgaReg s3_h_skew[];
-extern VgaReg s3_v_total[];
-extern VgaReg s3_preset_row_scan[];
-extern VgaReg s3_max_scan_line[];
-extern VgaReg s3_start_address[];
-extern VgaReg s3_v_retrace_start[];
-extern VgaReg s3_v_retrace_end[];
-extern VgaReg s3_clear_v_retrace_int[];
-extern VgaReg s3_disable_v_retrace_int[];
-extern VgaReg s3_lock_crtc[];
-extern VgaReg s3_v_display_end[];
-extern VgaReg s3_screen_offset[];
-extern VgaReg s3_count_by_4_mode[];
-extern VgaReg s3_doubleword_mode[];
-extern VgaReg s3_v_blank_start[];
-extern VgaReg s3_v_blank_end[];
-extern VgaReg s3_2bk_cga[];
-extern VgaReg s3_4bk_hga[];
-extern VgaReg s3_v_total_double[];
-extern VgaReg s3_address_16k_wrap[];
-extern VgaReg s3_word_mode[];
-extern VgaReg s3_byte_mode[];
-extern VgaReg s3_hardware_reset[];
-extern VgaReg s3_line_compare[];
-extern VgaReg s3_delay_primary_load[];
-extern VgaReg s3_device_id[];
-extern VgaReg s3_revision[];
-extern VgaReg s3_enable_vga_16bit[];
-extern VgaReg s3_enhanced_memory_mapping[];
-extern VgaReg s3_enable_sff[];
-extern VgaReg s3_lock_dac_writes[];
-extern VgaReg s3_border_select[];
-extern VgaReg s3_lock_palette[];
-extern VgaReg s3_lock_vert[];
-extern VgaReg s3_lock_horz[];
-extern VgaReg s3_io_disable[];
-extern VgaReg s3_mem_size[];
-extern VgaReg s3_register_lock_1 [];
-extern VgaReg s3_register_lock_2 [];
-extern VgaReg s3_refresh_control[];
-extern VgaReg s3_enable_256[];
-extern VgaReg s3_disable_pci_read_bursts[];
-extern VgaReg s3_h_start_fifo_fetch[];
-extern VgaReg s3_enable_2d_access[];
-extern VgaReg s3_interlace[];
-extern VgaReg s3_old_screen_off_8[];
-extern VgaReg s3_h_counter_double_mode[];
-extern VgaReg s3_cursor_enable[];
-extern VgaReg s3_cursor_right[];
-extern VgaReg s3_cursor_xhigh[];
-extern VgaReg s3_cursor_xlow[];
-extern VgaReg s3_cursor_yhigh[];
-extern VgaReg s3_cursor_ylow[];
-extern VgaReg s3_cursor_fg[];
-extern VgaReg s3_cursor_bg[];
-extern VgaReg s3_cursor_address[];
-extern VgaReg s3_cursor_xoff[];
-extern VgaReg s3_cursor_yoff[];
-extern VgaReg s3_ge_screen_width[];
-extern VgaReg s3_pixel_length[];
-extern VgaReg s3_big_endian_linear[];
-extern VgaReg s3_mmio_select[];
-extern VgaReg s3_mmio_window[];
-extern VgaReg s3_swap_nibbles[];
-extern VgaReg s3_cursor_ms_x11[];
-extern VgaReg s3_linear_window_size[];
-extern VgaReg s3_enable_linear[];
-extern VgaReg s3_h_blank_extend[];
-extern VgaReg s3_h_sync_extend[];
-extern VgaReg s3_sdclk_skew[];
-extern VgaReg s3_delay_blank[];
-extern VgaReg s3_delay_h_enable[];
-extern VgaReg s3_enable_2d_3d[];
-extern VgaReg s3_pci_disconnect_enable[];
-extern VgaReg s3_primary_load_control[];
-extern VgaReg s3_secondary_load_control[];
-extern VgaReg s3_pci_retry_enable[];
-extern VgaReg s3_streams_mode[];
-extern VgaReg s3_color_mode[];
-extern VgaReg s3_primary_stream_definition[];
-extern VgaReg s3_primary_stream_timeout[];
-extern VgaReg s3_master_control_unit_timeout[];
-extern VgaReg s3_command_buffer_timeout[];
-extern VgaReg s3_lpb_timeout[];
-extern VgaReg s3_cpu_timeout[];
-extern VgaReg s3_2d_graphics_engine_timeout[];
-extern VgaReg s3_fifo_drain_delay[];
-extern VgaReg s3_fifo_fetch_timing[];
-extern VgaReg s3_dac_power_up_time[];
-extern VgaReg s3_dac_power_saving_disable[];
-extern VgaReg s3_flat_panel_output_control_1[];
-extern VgaReg s3_streams_fifo_delay[];
-extern VgaReg s3_flat_panel_output_control_2[];
-extern VgaReg s3_enable_l1_parameter[];
-extern VgaReg s3_primary_stream_l1[];
-
-extern VgaReg s3_dot_clock_8[];
-extern VgaReg s3_screen_off[];
-extern VgaReg s3_enable_write_plane[];
-extern VgaReg s3_extended_memory_access[];
-extern VgaReg s3_sequential_addressing_mode[];
-extern VgaReg s3_select_chain_4_mode[];
-
-extern VgaReg s3_unlock_extended_sequencer[];
-extern VgaReg s3_linear_addressing_control[];
-extern VgaReg s3_disable_io_ports[];
-extern VgaReg s3_hsync_control[];
-extern VgaReg s3_vsync_control[];
-extern VgaReg s3_mclk_n[];
-extern VgaReg s3_mclk_r[];
-extern VgaReg s3_mclk_m[];
-extern VgaReg s3_dclk_n[];
-extern VgaReg s3_dclk_r[];
-extern VgaReg s3_dclk_m[];
-extern VgaReg s3_mclk_load[];
-extern VgaReg s3_dclk_load[];
-extern VgaReg s3_dclk_over_2[];
-extern VgaReg s3_clock_load_imm[];
-extern VgaReg s3_dclk_invert[];
-extern VgaReg s3_enable_clock_double[];
-extern VgaReg s3_dclk_double_15_16_invert[];
-extern VgaReg s3_enable_gamma_correction[];
-extern VgaReg s3_enable_8_bit_luts[];
-extern VgaReg s3_dclk_control[];
-extern VgaReg s3_eclk_n[];
-extern VgaReg s3_eclk_r[];
-extern VgaReg s3_eclk_m[];
-extern VgaReg s3_vga_dclk_n[];
-extern VgaReg s3_vga_dclk_r[];
-extern VgaReg s3_vga_dclk_m1[];
-extern VgaReg s3_vga_dclk_m2[];
-extern VgaReg s3_vga_clk_select[];
-extern VgaReg s3_select_graphics_mode[];
-extern VgaReg s3_enable_blinking[];
-extern VgaReg s3_border_color[];
-
-extern VgaReg s3_io_addr_select[];
-extern VgaReg s3_enable_ram[];
-extern VgaReg s3_clock_select[];
-extern VgaReg s3_horz_sync_neg[];
-extern VgaReg s3_vert_sync_neg[];
-
-extern VgaReg s3_display_mode_inactive[];
-extern VgaReg s3_vertical_sync_active[];
-
-extern VgaReg s3_dac_mask[];
-extern VgaReg s3_dac_read_index[];
-extern VgaReg s3_dac_write_index[];
-extern VgaReg s3_dac_data[];
-
-#define s3Get(sv,r) VgaGet(&(sv)->card, (r))
-#define s3GetImm(sv,r) VgaGetImm(&(sv)->card, (r))
-#define s3Set(sv,r,v) VgaSet(&(sv)->card, (r), (v))
-#define s3SetImm(sv,r,v) VgaSetImm(&(sv)->card, (r), (v))
-
-typedef struct _s3Vga {
- VgaCard card;
- VgaValue values[S3_NREG];
- VGA32 save_lock_crtc;
- VGA32 save_register_lock_1;
- VGA32 save_register_lock_2;
- VGA32 save_unlock_extended_sequencer;
- VGA32 save_lock_dac_writes;
- VGA32 save_lock_horz;
- VGA32 save_lock_vert;
- VGA32 save_dot_clock_8;
-} S3Vga;
-
-void
-s3RegInit (S3Vga *s3vga, VGAVOL8 *mmio);
-
-void
-s3Save (S3Vga *s3vga);
-
-void
-s3Reset (S3Vga *s3vga);
-
-#endif /* _S3REG_H_ */
diff --git a/hw/kdrive/savage/s3rtst.c b/hw/kdrive/savage/s3rtst.c
deleted file mode 100644
index c24b860ac..000000000
--- a/hw/kdrive/savage/s3rtst.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include <stdio.h>
-#include "s3reg.h"
-
-typedef struct {
- VgaReg *reg;
- char *name;
-} NamedVgaReg;
-
-NamedVgaReg s3VRegs[] = {
- s3_h_total, "h_total",
- s3_h_display_end, "h_display_end",
- s3_h_blank_start, "h_blank_start",
- s3_h_blank_end, "h_blank_end",
- s3_display_skew, "display_skew",
- s3_h_sync_start, "h_sync_start",
- s3_h_sync_end, "h_sync_end",
- s3_h_skew, "h_skew",
- s3_v_total, "v_total",
- s3_preset_row_scan, "preset_row_scan",
- s3_max_scan_line, "max_scan_line",
- s3_start_address, "start_address",
- s3_v_retrace_start, "v_retrace_start",
- s3_v_retrace_end, "v_retrace_end",
- s3_clear_v_retrace_int, "clear_v_retrace_int",
- s3_disable_v_retrace_int, "disable_v_retrace_int",
- s3_lock_crtc, "lock_crtc",
- s3_v_display_end, "v_display_end",
- s3_screen_offset, "screen_offset",
- s3_count_by_4_mode, "count_by_4_mode",
- s3_doubleword_mode, "doubleword_mode",
- s3_v_blank_start, "v_blank_start",
- s3_v_blank_end, "v_blank_end",
- s3_v_total_double, "v_total_double",
- s3_word_mode, "word_mode",
- s3_byte_mode, "byte_mode",
- s3_line_compare, "line_compare",
- s3_device_id, "device_id",
- s3_revision, "revision",
- s3_lock_vert, "lock_vert",
- s3_lock_horz, "lock_horz",
- s3_io_disable, "io_disable",
- s3_mem_size, "mem_size",
- s3_register_lock_1 , "register_lock_1 ",
- s3_register_lock_2 , "register_lock_2 ",
- s3_refresh_control, "refresh_control",
- s3_enable_256, "enable_256",
- s3_enable_pci_read_bursts, "enable_pci_read_bursts",
- s3_h_start_fifo_fetch, "h_start_fifo_fetch",
- s3_interlace, "interlace",
- s3_old_screen_off_8, "old_screen_off_8",
- s3_h_counter_double_mode, "h_counter_double_mode",
- s3_hardware_cursor_enable, "hardware_cursor_enable",
- s3_hardware_cursor_right, "hardware_cursor_right",
- s3_hardware_cursor_x, "hardware_cursor_x",
- s3_hardware_cursor_y, "hardware_cursor_y",
- s3_hardware_cursor_fg, "hardware_cursor_fg",
- s3_cursor_address, "cursor_address",
- s3_cursor_start_x, "cursor_start_x",
- s3_cursor_start_y, "cursor_start_y",
- s3_ge_screen_width, "ge_screen_width",
- s3_pixel_length, "pixel_length",
- s3_big_endian_linear, "big_endian_linear",
- s3_mmio_select, "mmio_select",
- s3_mmio_window, "mmio_window",
- s3_swap_nibbles, "swap_nibbles",
- s3_hardware_cursor_ms_x11, "hardware_cursor_ms_x11",
- s3_h_blank_extend, "h_blank_extend",
- s3_h_sync_extend, "h_sync_extend",
- s3_enable_2d_3d, "enable_2d_3d",
- s3_pci_disconnect_enable, "pci_disconnect_enable",
- s3_pci_retry_enable, "pci_retry_enable",
- s3_color_mode, "color_mode",
- s3_screen_off, "screen_off",
- s3_unlock_extended_sequencer, "unlock_extended_sequencer",
- s3_disable_io_ports, "disable_io_ports",
- s3_hsync_control, "hsync_control",
- s3_vsync_control, "vsync_control",
- s3_mclk_n, "mclk_n",
- s3_mclk_r, "mclk_r",
- s3_mclk_m, "mclk_m",
- s3_dclk_n, "dclk_n",
- s3_dclk_r, "dclk_r",
- s3_dclk_m, "dclk_m",
- s3_mclk_load, "mclk_load",
- s3_dclk_load, "dclk_load",
- s3_dclk_over_2, "dclk_over_2",
- s3_clock_load_imm, "clock_load_imm",
- s3_dclk_invert, "dclk_invert",
- s3_enable_clock_double, "enable_clock_double",
- s3_dclk_double_15_16_invert, "dclk_double_15_16_invert",
- s3_enable_gamma_correction, "enable_gamma_correction",
- s3_enable_8_bit_luts, "enable_8_bit_luts",
- s3_dclk_control, "dclk_control",
- s3_vga_dclk_n, "vga_dclk_n",
- s3_vga_dclk_r, "vga_dclk_r",
- s3_vga_dclk_m1, "vga_dclk_m1",
- s3_vga_dclk_m2, "vga_dclk_m2",
- s3_vga_clk_select, "vga_clk_select",
- s3_clock_select, "clock_select",
-};
-
-#define NUM_S3_VREGS (sizeof (s3VRegs)/ sizeof (s3VRegs[0]))
-
-main (int argc, char **argv)
-{
- int i;
-
- iopl(3);
- s3SetImm(s3_register_lock_1, 0x48);
- s3SetImm(s3_register_lock_2, 0xa0);
- s3SetImm(s3_unlock_extended_sequencer, 0x06);
- for (i = 0; i < NUM_S3_VREGS; i++)
- printf ("%-20.20s %8x\n", s3VRegs[i].name, s3Get (s3VRegs[i].reg));
- s3Restore ();
-}
diff --git a/hw/kdrive/savage/s3stub.c b/hw/kdrive/savage/s3stub.c
deleted file mode 100644
index 145c5c1f6..000000000
--- a/hw/kdrive/savage/s3stub.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
-#ifdef VXWORKS
- attr.naddr = 2;
- attr.io = 0;
- attr.address[0] = 0xbc000000; /* registers */
- attr.address[1] = 0xba000000; /* frame buffer */
- KdCardInfoAdd (&s3Funcs, &attr, 0);
-#else
- CARD32 count;
-
- count = 0;
- while (LinuxFindPci (0x5333, 0x8a22, count, &attr))
- {
- KdCardInfoAdd (&s3Funcs, &attr, 0);
- count++;
- }
-#endif
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-extern int s3CpuTimeout;
-extern int s3AccelTimeout;
-
-void
-ddxUseMsg (void)
-{
- ErrorF("\nSavage Driver Options:\n");
- ErrorF("-cpu Sets CPU timout\n");
- ErrorF("-accel Sets acceleration timout\n");
-
- KdUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- if (!strcmp (argv[i], "-cpu"))
- {
- s3CpuTimeout = strtol(argv[i+1], NULL, 0);
- return 2;
- }
- if (!strcmp (argv[i], "-accel"))
- {
- s3AccelTimeout = strtol (argv[i+1], NULL, 0);
- return 2;
- }
- return KdProcessArgument (argc, argv, i);
-}
diff --git a/hw/kdrive/sis300/Makefile.am b/hw/kdrive/sis300/Makefile.am
deleted file mode 100644
index af2500aee..000000000
--- a/hw/kdrive/sis300/Makefile.am
+++ /dev/null
@@ -1,51 +0,0 @@
-if KDRIVEFBDEV
-FBDEV_INCLUDES =-I$(top_srcdir)/hw/kdrive/fbdev
-FBDEV_LIBS = $(top_builddir)/hw/kdrive/fbdev/libfbdev.a
-endif
-
-if KDRIVEVESA
-VESA_INCLUDES = -I$(top_srcdir)/hw/kdrive/vesa
-VESA_LIBS = $(top_builddir)/hw/kdrive/vesa/libvesa.a
-endif
-
-INCLUDES = \
- @KDRIVE_INCS@ \
- $(DRI_INCLUDES) \
- $(FBDEV_INCLUDES) \
- $(VESA_INCLUDES) \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xsis
-
-noinst_LIBRARIES = libsis.a
-
-libsis_a_SOURCES = \
- sis.c \
- sis.h \
- sis_draw.c \
- sis_reg.h
-
-Xsis_SOURCES = \
- sis_stub.c
-
-SIS_LIBS = \
- libsis.a \
- $(FBDEV_LIBS) \
- $(VESA_LIBS) \
- @KDRIVE_LIBS@
-
-if GLX
-Xsis_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xsis_LDADD = \
- $(SIS_LIBS) \
- @KDRIVE_LIBS@ \
- $(TSLIB_FLAG)
-
-Xsis_DEPENDENCIES = \
- libsis.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/sis300/sis.c b/hw/kdrive/sis300/sis.c
deleted file mode 100644
index 30b7ac2c5..000000000
--- a/hw/kdrive/sis300/sis.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "sis.h"
-#include "sis_reg.h"
-
-struct pci_id_entry sis_pci_ids[] = {
- {0x1039, 0x0300, 0x1, "SiS 300/305"},
- {0x1039, 0x5300, 0x1, "SiS 540"},
- {0x1039, 0x6300, 0x1, "SiS 630"},
- {0x1039, 0x7300, 0x1, "SiS 730"},
- {0, 0, 0, NULL}
-};
-
-static Bool
-SiSCardInit(KdCardInfo *card)
-{
- SiSCardInfo *sisc;
- Bool initialized = FALSE;
-
- sisc = xcalloc(sizeof(SiSCardInfo), 1);
- if (sisc == NULL)
- return FALSE;
-
-#ifdef KDRIVEFBDEV
- if (!initialized && fbdevInitialize(card, &sisc->backend_priv.fbdev)) {
- sisc->use_fbdev = TRUE;
- initialized = TRUE;
- sisc->backend_funcs.cardfini = fbdevCardFini;
- sisc->backend_funcs.scrfini = fbdevScreenFini;
- sisc->backend_funcs.initScreen = fbdevInitScreen;
- sisc->backend_funcs.finishInitScreen = fbdevFinishInitScreen;
- sisc->backend_funcs.createRes = fbdevCreateResources;
- sisc->backend_funcs.preserve = fbdevPreserve;
- sisc->backend_funcs.restore = fbdevRestore;
- sisc->backend_funcs.dpms = fbdevDPMS;
- sisc->backend_funcs.enable = fbdevEnable;
- sisc->backend_funcs.disable = fbdevDisable;
- sisc->backend_funcs.getColors = fbdevGetColors;
- sisc->backend_funcs.putColors = fbdevPutColors;
- }
-#endif
-#ifdef KDRIVEVESA
- if (!initialized && vesaInitialize(card, &sisc->backend_priv.vesa)) {
- sisc->use_vesa = TRUE;
- initialized = TRUE;
- sisc->backend_funcs.cardfini = vesaCardFini;
- sisc->backend_funcs.scrfini = vesaScreenFini;
- sisc->backend_funcs.initScreen = vesaInitScreen;
- sisc->backend_funcs.finishInitScreen = vesaFinishInitScreen;
- sisc->backend_funcs.createRes = vesaCreateResources;
- sisc->backend_funcs.preserve = vesaPreserve;
- sisc->backend_funcs.restore = vesaRestore;
- sisc->backend_funcs.dpms = vesaDPMS;
- sisc->backend_funcs.enable = vesaEnable;
- sisc->backend_funcs.disable = vesaDisable;
- sisc->backend_funcs.getColors = vesaGetColors;
- sisc->backend_funcs.putColors = vesaPutColors;
- }
-#endif
-
- if (!initialized || !SiSMapReg(card, sisc)) {
- xfree(sisc);
- return FALSE;
- }
-
- card->driver = sisc;
-
- return TRUE;
-}
-
-static void
-SiSCardFini(KdCardInfo *card)
-{
- SiSCardInfo *sisc = (SiSCardInfo *)card->driver;
-
- SiSUnmapReg(card, sisc);
- sisc->backend_funcs.cardfini(card);
-}
-
-static Bool
-SiSScreenInit(KdScreenInfo *screen)
-{
- SiSScreenInfo *siss;
- SiSCardInfo(screen);
- int success = FALSE;
-
- siss = xcalloc(sizeof(SiSScreenInfo), 1);
- if (siss == NULL)
- return FALSE;
-
- siss->sisc = sisc;
-
- screen->driver = siss;
-
-#ifdef KDRIVEFBDEV
- if (sisc->use_fbdev) {
- success = fbdevScreenInitialize(screen,
- &siss->backend_priv.fbdev);
- screen->memory_size = sisc->backend_priv.fbdev.fix.smem_len;
- screen->off_screen_base =
- sisc->backend_priv.fbdev.var.yres_virtual *
- screen->fb[0].byteStride;
- }
-#endif
-#ifdef KDRIVEVESA
- if (sisc->use_vesa) {
- if (screen->fb[0].depth == 0)
- screen->fb[0].depth = 16;
- success = vesaScreenInitialize(screen,
- &siss->backend_priv.vesa);
- }
-#endif
- if (!success) {
- screen->driver = NULL;
- xfree(siss);
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-SiSScreenFini(KdScreenInfo *screen)
-{
- SiSScreenInfo *siss = (SiSScreenInfo *)screen->driver;
- SiSCardInfo *sisc = screen->card->driver;
-
- sisc->backend_funcs.scrfini(screen);
- xfree(siss);
- screen->driver = 0;
-}
-
-Bool
-SiSMapReg(KdCardInfo *card, SiSCardInfo *sisc)
-{
- sisc->reg_base = (CARD8 *)KdMapDevice(SIS_REG_BASE(card),
- SIS_REG_SIZE(card));
-
- if (sisc->reg_base == NULL)
- return FALSE;
-
- KdSetMappedMode(SIS_REG_BASE(card), SIS_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
-
- return TRUE;
-}
-
-void
-SiSUnmapReg(KdCardInfo *card, SiSCardInfo *sisc)
-{
- if (sisc->reg_base) {
- KdResetMappedMode(SIS_REG_BASE(card), SIS_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- KdUnmapDevice((void *)sisc->reg_base, SIS_REG_SIZE(card));
- sisc->reg_base = 0;
- }
-}
-
-static Bool
-SiSInitScreen(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- SiSCardInfo(pScreenPriv);
-
- return sisc->backend_funcs.initScreen(pScreen);
-}
-
-static Bool
-SiSFinishInitScreen(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- SiSCardInfo(pScreenPriv);
-
- return sisc->backend_funcs.finishInitScreen(pScreen);
-}
-
-static Bool
-SiSCreateResources(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- SiSCardInfo(pScreenPriv);
-
- return sisc->backend_funcs.createRes(pScreen);
-}
-
-static void
-SiSPreserve(KdCardInfo *card)
-{
- SiSCardInfo *sisc = card->driver;
-
- sisc->backend_funcs.preserve(card);
-}
-
-static void
-SiSRestore(KdCardInfo *card)
-{
- SiSCardInfo *sisc = card->driver;
-
- SiSUnmapReg(card, sisc);
-
- sisc->backend_funcs.restore(card);
-}
-
-static Bool
-SiSDPMS(ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- SiSCardInfo(pScreenPriv);
-
- return sisc->backend_funcs.dpms(pScreen, mode);
-}
-
-static Bool
-SiSEnable(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- SiSCardInfo(pScreenPriv);
-
- if (!sisc->backend_funcs.enable(pScreen))
- return FALSE;
-
- if ((sisc->reg_base == NULL) && !SiSMapReg(pScreenPriv->screen->card,
- sisc))
- return FALSE;
-
- SiSDPMS(pScreen, KD_DPMS_NORMAL);
-
- return TRUE;
-}
-
-static void
-SiSDisable(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- SiSCardInfo(pScreenPriv);
-
- SiSUnmapReg(pScreenPriv->card, sisc);
-
- sisc->backend_funcs.disable(pScreen);
-}
-
-static void
-SiSGetColors(ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- SiSCardInfo(pScreenPriv);
-
- sisc->backend_funcs.getColors(pScreen, fb, n, pdefs);
-}
-
-static void
-SiSPutColors(ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- SiSCardInfo(pScreenPriv);
-
- sisc->backend_funcs.putColors(pScreen, fb, n, pdefs);
-}
-
-KdCardFuncs SiSFuncs = {
- SiSCardInit, /* cardinit */
- SiSScreenInit, /* scrinit */
- SiSInitScreen, /* initScreen */
- SiSFinishInitScreen, /* finishInitScreen */
- SiSCreateResources, /* createRes */
- SiSPreserve, /* preserve */
- SiSEnable, /* enable */
- SiSDPMS, /* dpms */
- SiSDisable, /* disable */
- SiSRestore, /* restore */
- SiSScreenFini, /* scrfini */
- SiSCardFini, /* cardfini */
-
- 0, /* initCursor */
- 0, /* enableCursor */
- 0, /* disableCursor */
- 0, /* finiCursor */
- 0, /* recolorCursor */
-
- SiSDrawInit, /* initAccel */
- SiSDrawEnable, /* enableAccel */
- SiSDrawSync, /* syncAccel */
- SiSDrawDisable, /* disableAccel */
- SiSDrawFini, /* finiAccel */
-
- SiSGetColors, /* getColors */
- SiSPutColors, /* putColors */
-};
diff --git a/hw/kdrive/sis300/sis.h b/hw/kdrive/sis300/sis.h
deleted file mode 100644
index 25d55be31..000000000
--- a/hw/kdrive/sis300/sis.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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 _SIS_H_
-#define _SIS_H_
-
-#include "kdrive-config.h"
-
-#ifdef KDRIVEFBDEV
-#include <fbdev.h>
-#endif
-#ifdef KDRIVEVESA
-#include <vesa.h>
-#endif
-
-/* XXX */
-#define SIS_REG_BASE(c) ((c)->attr.address[1])
-#define SIS_REG_SIZE(c) (0x10000)
-
-#ifdef __powerpc__
-
-static __inline__ void
-MMIO_OUT32(__volatile__ void *base, const unsigned long offset,
- const unsigned int val)
-{
- __asm__ __volatile__(
- "stwbrx %1,%2,%3\n\t"
- "eieio"
- : "=m" (*((volatile unsigned char *)base+offset))
- : "r" (val), "b" (base), "r" (offset));
-}
-
-static __inline__ CARD32
-MMIO_IN32(__volatile__ void *base, const unsigned long offset)
-{
- register unsigned int val;
- __asm__ __volatile__(
- "lwbrx %0,%1,%2\n\t"
- "eieio"
- : "=r" (val)
- : "b" (base), "r" (offset),
- "m" (*((volatile unsigned char *)base+offset)));
- return val;
-}
-
-#else
-
-#define MMIO_OUT32(mmio, a, v) (*(VOL32 *)((mmio) + (a)) = (v))
-#define MMIO_IN32(mmio, a) (*(VOL32 *)((mmio) + (a)))
-
-#endif
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-struct pci_id_entry {
- CARD16 vendor;
- CARD16 device;
- CARD8 caps;
- char *name;
-};
-
-struct backend_funcs {
- void (*cardfini)(KdCardInfo *);
- void (*scrfini)(KdScreenInfo *);
- Bool (*initScreen)(ScreenPtr);
- Bool (*finishInitScreen)(ScreenPtr pScreen);
- Bool (*createRes)(ScreenPtr);
- void (*preserve)(KdCardInfo *);
- void (*restore)(KdCardInfo *);
- Bool (*dpms)(ScreenPtr, int);
- Bool (*enable)(ScreenPtr);
- void (*disable)(ScreenPtr);
- void (*getColors)(ScreenPtr, int, int, xColorItem *);
- void (*putColors)(ScreenPtr, int, int, xColorItem *);
-};
-
-typedef struct _SiSCardInfo {
- union {
-#ifdef KDRIVEFBDEV
- FbdevPriv fbdev;
-#endif
-#ifdef KDRIVEVESA
- VesaCardPrivRec vesa;
-#endif
- } backend_priv;
- struct backend_funcs backend_funcs;
-
- struct pci_id_entry *pci_id;
- CARD8 *reg_base;
- Bool use_fbdev, use_vesa;
-} SiSCardInfo;
-
-#define getSiSCardInfo(kd) ((SiSCardInfo *) ((kd)->card->driver))
-#define SiSCardInfo(kd) SiSCardInfo *sisc = getSiSCardInfo(kd)
-
-typedef struct _SiSScreenInfo {
- union {
-#ifdef KDRIVEFBDEV
- FbdevScrPriv fbdev;
-#endif
-#ifdef KDRIVEVESA
- VesaScreenPrivRec vesa;
-#endif
- } backend_priv;
- CARD32 depthSet; /* depth value for REG_BLT_SRCPITCH */
- KaaScreenInfoRec kaa;
- SiSCardInfo *sisc;
-} SiSScreenInfo;
-
-#define getSiSScreenInfo(kd) ((SiSScreenInfo *) ((kd)->screen->driver))
-#define SiSScreenInfo(kd) SiSScreenInfo *siss = getSiSScreenInfo(kd)
-
-Bool
-SiSMapReg(KdCardInfo *card, SiSCardInfo *sisc);
-
-void
-SiSUnmapReg(KdCardInfo *card, SiSCardInfo *sisc);
-
-Bool
-SiSDrawSetup(ScreenPtr pScreen);
-
-Bool
-SiSDrawInit(ScreenPtr pScreen);
-
-void
-SiSDrawEnable(ScreenPtr pScreen);
-
-void
-SiSDrawSync(ScreenPtr pScreen);
-
-void
-SiSDrawDisable(ScreenPtr pScreen);
-
-void
-SiSDrawFini(ScreenPtr pScreen);
-
-extern KdCardFuncs SiSFuncs;
-
-#endif /* _SIS_H_ */
diff --git a/hw/kdrive/sis300/sis_draw.c b/hw/kdrive/sis300/sis_draw.c
deleted file mode 100644
index bbc905e1d..000000000
--- a/hw/kdrive/sis300/sis_draw.c
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT 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.
- */
-
-#include <sys/io.h>
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-
-#include "sis.h"
-#include "sis_reg.h"
-
-#if 0
-#define SIS_FALLBACK(x) \
-do { \
- ErrorF x; \
- return FALSE; \
-} while (0)
-#else
-#define SIS_FALLBACK(x) return FALSE
-#endif
-
-CARD8 SiSSolidRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0xa0, /* src AND dst */
- /* GXandReverse */ 0x50, /* src AND NOT dst */
- /* GXcopy */ 0xf0, /* src */
- /* GXandInverted*/ 0x0a, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x5a, /* src XOR dst */
- /* GXor */ 0xfa, /* src OR dst */
- /* GXnor */ 0x05, /* NOT src AND NOT dst */
- /* GXequiv */ 0xa5, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xf5, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x0f, /* NOT src */
- /* GXorInverted */ 0xaf, /* NOT src OR dst */
- /* GXnand */ 0x5f, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-CARD8 SiSBltRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0x88, /* src AND dst */
- /* GXandReverse */ 0x44, /* src AND NOT dst */
- /* GXcopy */ 0xcc, /* src */
- /* GXandInverted*/ 0x22, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x66, /* src XOR dst */
- /* GXor */ 0xee, /* src OR dst */
- /* GXnor */ 0x11, /* NOT src AND NOT dst */
- /* GXequiv */ 0x99, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xdd, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x33, /* NOT src */
- /* GXorInverted */ 0xbb, /* NOT src OR dst */
- /* GXnand */ 0x77, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-int copydx, copydy;
-int fifo_size;
-SiSScreenInfo *accel_siss;
-char *mmio;
-CARD32 sis_color = 0;
-CARD32 blitCmd;
-
-static void
-SiSWaitAvailMMIO(int n)
-{
- while (fifo_size < n) {
- fifo_size = MMIO_IN32(mmio, REG_CommandQueue) & MASK_QueueLen;
- }
- fifo_size -= n;
-}
-
-static void
-SiSWaitIdle(void)
-{
- CARD32 engineState;
- do {
- engineState = MMIO_IN32(mmio, REG_CommandQueue);
- } while ((engineState & SiS_EngIdle) != SiS_EngIdle);
-}
-
-static Bool
-SiSPrepareSolid(PixmapPtr pPixmap, int alu, Pixel pm, Pixel fg)
-{
- KdScreenPriv(pPixmap->drawable.pScreen);
- SiSScreenInfo(pScreenPriv);
- SiSCardInfo(pScreenPriv);
-
- /* No acceleration for other formats (yet) */
- if (pPixmap->drawable.bitsPerPixel !=
- pScreenPriv->screen->fb[0].bitsPerPixel)
- return FALSE;
-
- if ((pm & 0x00ffffff) != 0x00ffffff) /* XXX */
- SIS_FALLBACK(("Unsupported planemask 0x%x\n", pm));
-
- accel_siss = siss;
- mmio = sisc->reg_base;
-
- SiSWaitAvailMMIO(4);
- MMIO_OUT32(mmio, REG_BLT_PATFG, fg);
- MMIO_OUT32(mmio, REG_BLT_DSTRECT, (-1 << 16) | pPixmap->devKind);
- MMIO_OUT32(mmio, REG_BLT_SRCPITCH, siss->depthSet);
- MMIO_OUT32(mmio, REG_BLT_DSTBASE, ((CARD8 *)pPixmap->devPrivate.ptr -
- pScreenPriv->screen->memory_base));
-
- blitCmd = BLT_CMD_BITBLT | BLT_PAT_FG | BLT_X_INC | BLT_Y_INC |
- BLT_NOCLIP | (SiSSolidRop[alu] << 8);
-
- return TRUE;
-}
-
-static void
-SiSSolid(int x1, int y1, int x2, int y2)
-{
- SiSWaitAvailMMIO(3);
- MMIO_OUT32(mmio, REG_BLT_DSTXY, (x1 << 16) | y1);
- MMIO_OUT32(mmio, REG_BLT_H_W, ((y2 - y1) << 16) | (x2 - x1));
- MMIO_OUT32(mmio, REG_BLT_CMD, blitCmd);
-}
-
-static void
-SiSDoneSolid(void)
-{
-}
-
-static Bool
-SiSPrepareCopy(PixmapPtr pSrc, PixmapPtr pDst, int dx, int dy, int alu,
- Pixel pm)
-{
- KdScreenPriv(pDst->drawable.pScreen);
- SiSScreenInfo(pScreenPriv);
- SiSCardInfo(pScreenPriv);
-
- /* No acceleration for other formats (yet) */
- if (pDst->drawable.bitsPerPixel !=
- pScreenPriv->screen->fb[0].bitsPerPixel)
- return FALSE;
-
- if ((pm & 0x00ffffff) != 0x00ffffff) /* XXX */
- SIS_FALLBACK(("Unsupported pixel mask 0x%x\n", pm));
-
- accel_siss = siss;
- mmio = sisc->reg_base;
-
- SiSWaitAvailMMIO(4);
- MMIO_OUT32(mmio, REG_BLT_SRCPITCH, siss->depthSet | pSrc->devKind);
- MMIO_OUT32(mmio, REG_BLT_DSTRECT, (-1 << 16) | pDst->devKind);
- MMIO_OUT32(mmio, REG_BLT_SRCBASE, ((CARD8 *)pSrc->devPrivate.ptr -
- pScreenPriv->screen->memory_base));
- MMIO_OUT32(mmio, REG_BLT_DSTBASE, ((CARD8 *)pDst->devPrivate.ptr -
- pScreenPriv->screen->memory_base));
-
- blitCmd = BLT_CMD_BITBLT | BLT_PAT_FG | BLT_NOCLIP |
- (SiSBltRop[alu] << 8);
-
- if (pSrc != pDst || dx >= 0)
- blitCmd |= BLT_X_INC;
- if (pSrc != pDst || dy >= 0)
- blitCmd |= BLT_Y_INC;
-
- return TRUE;
-}
-
-static void
-SiSCopy(int srcX, int srcY, int dstX, int dstY, int w, int h)
-{
- if (!(blitCmd & BLT_X_INC)) {
- srcX += w - 1;
- dstX += w - 1;
- }
-
- if (!(blitCmd & BLT_Y_INC)) {
- srcY += h - 1;
- dstY += h - 1;
- }
-
- SiSWaitAvailMMIO(4);
- MMIO_OUT32(mmio, REG_BLT_H_W, (h << 16) | w);
- MMIO_OUT32(mmio, REG_BLT_SRCXY, (srcX << 16) | srcY);
- MMIO_OUT32(mmio, REG_BLT_DSTXY, (dstX << 16) | dstY);
- MMIO_OUT32(mmio, REG_BLT_CMD, blitCmd);
-}
-
-static void
-SiSDoneCopy(void)
-{
-}
-
-KaaScreenInfoRec SiSKaa = {
- SiSPrepareSolid,
- SiSSolid,
- SiSDoneSolid,
- SiSPrepareCopy,
- SiSCopy,
- SiSDoneCopy,
- KAA_OFFSCREEN_PIXMAPS,
- 8,
- 8
-};
-
-#define USE_TURBOQUEUE 0
-
-Bool
-SiSDrawInit(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- SiSScreenInfo(pScreenPriv);
- CARD8 tmp;
-#if USE_TURBOQUEUE
- int tqsize;
-#endif
-
- switch (pScreenPriv->screen->fb[0].depth)
- {
- case 8:
- siss->depthSet = 0x00000000;
- break;
- case 15:
- siss->depthSet = 0x40000000;
- break;
- case 16:
- siss->depthSet = 0x80000000;
- break;
- case 24:
- if (pScreenPriv->screen->fb[0].bitsPerPixel == 32) {
- siss->depthSet = 0xc0000000;
- break;
- }
- /* FALLTHROUGH*/
- default:
- ErrorF("Unsupported depth/bpp %d/%d\n",
- pScreenPriv->screen->fb[0].depth,
- pScreenPriv->screen->fb[0].bitsPerPixel);
- return FALSE;
- }
-
- outb(0x05, 0x3c4);
- outb(0x86, 0x3c5); /* unlock registers */
-
- outb(0x20, 0x3c4);
- outb(0xA1, 0x3c5); /* enable pci linear addressing, MMIO, PCI_IO */
-
- outb(0x1e, 0x3c4);
- tmp = inb(0x3c5);
- outb(tmp | 0x42 | 0x18, 0x3c5); /* Enable 2d and 3d */
-
-#if USE_TURBOQUEUE
- tqsize = (pScreenPriv->screen->memory_size / 1024) / 64 - 8;
- /* Enable TQ */
- outb(0x26, 0x3c4);
- outb(tqsize & 0xff, 0x3c5);
- outb(0x27, 0x3c4);
- tmp = inb(0x3c5);
- outb(((tqsize >> 8) & 0x03) | (tmp & 0x0c) | 0xF0, 0x3c5);
-
- /* XXX: Adjust offscreen size to avoid TQ area (last 512k) */
-#endif
-
- ErrorF("Screen: %d/%d depth/bpp\n", pScreenPriv->screen->fb[0].depth,
- pScreenPriv->screen->fb[0].bitsPerPixel);
-
- if (!kaaDrawInit(pScreen, &SiSKaa))
- return FALSE;
-
- return TRUE;
-}
-
-void
-SiSDrawEnable(ScreenPtr pScreen)
-{
- KdMarkSync(pScreen);
-}
-
-void
-SiSDrawDisable(ScreenPtr pScreen)
-{
-}
-
-void
-SiSDrawFini(ScreenPtr pScreen)
-{
- kaaDrawFini (pScreen);
-}
-
-void
-SiSDrawSync(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- SiSScreenInfo(pScreenPriv);
- SiSCardInfo(pScreenPriv);
-
- accel_siss = siss;
- mmio = sisc->reg_base;
-
- SiSWaitIdle();
-}
diff --git a/hw/kdrive/sis300/sis_reg.h b/hw/kdrive/sis300/sis_reg.h
deleted file mode 100644
index 6e5a8f6d5..000000000
--- a/hw/kdrive/sis300/sis_reg.h
+++ /dev/null
@@ -1,902 +0,0 @@
-/**************************************************************************
-
-Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
-Copyright 2003 Eric Anholt
-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, sub license, 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
-ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP 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:
- * Sung-Ching Lin <sclin@sis.com.tw>
- * Eric Anholt <anholt@FreeBSD.org>
- */
-
-#ifndef _sis_reg_h_
-#define _sis_reg_h_
-
-/*
- * Define All the Register Address of 6327
- */
-
-#define REG_BLT_SRCBASE 0x8200
-#define REG_BLT_SRCPITCH 0x8204
-#define REG_BLT_SRCXY 0x8208
-#define REG_BLT_DSTXY 0x820c
-#define REG_BLT_DSTBASE 0x8210
-#define REG_BLT_DSTRECT 0x8214
-#define REG_BLT_H_W 0x8218
-#define REG_BLT_PATFG 0x821c
-#define REG_BLT_PATBG 0x8220
-#define REG_BLT_SRCFG 0x8224
-#define REG_BLT_SRCBG 0x8228
-#define REG_BLT_MONOPAT0 0x822c
-#define REG_BLT_MONOPAT1 0x8230
-#define REG_BLT_CLIPLT 0x8234
-#define REG_BLT_CLIBRB 0x8238
-#define REG_BLT_CMD 0x823c
-#define REG_CommandQueue 0x8240
-
-#define REG_3D_TSFSa 0x8800
-#define REG_3D_TSZa 0x8804
-#define REG_3D_TSXa 0x8808
-#define REG_3D_TSYa 0x880C
-#define REG_3D_TSARGBa 0x8810
-#define REG_3D_TSWGa 0x8814
-#define REG_3D_TSUAa 0x8818
-#define REG_3D_TSVAa 0x881C
-#define REG_3D_TSUBa 0x8820
-#define REG_3D_TSVBa 0x8824
-#define REG_3D_TSUCa 0x8828
-#define REG_3D_TSVCa 0x882C
-
-#define REG_3D_TSFSb 0x8830
-#define REG_3D_TSZb 0x8834
-#define REG_3D_TSXb 0x8838
-#define REG_3D_TSYb 0x883C
-#define REG_3D_TSARGBb 0x8840
-#define REG_3D_TSWGb 0x8844
-#define REG_3D_TSUAb 0x8848
-#define REG_3D_TSVAb 0x884C
-#define REG_3D_TSUBb 0x8850
-#define REG_3D_TSVBb 0x8854
-#define REG_3D_TSUCb 0x8858
-#define REG_3D_TSVCb 0x885C
-
-#define REG_3D_TSFSc 0x8860
-#define REG_3D_TSZc 0x8864
-#define REG_3D_TSXc 0x8868
-#define REG_3D_TSYc 0x886C
-#define REG_3D_TSARGBc 0x8870
-#define REG_3D_TSWGc 0x8874
-#define REG_3D_TSUAc 0x8878
-#define REG_3D_TSVAc 0x887C
-#define REG_3D_TSUBc 0x8880
-#define REG_3D_TSVBc 0x8884
-#define REG_3D_TSUCc 0x8888
-#define REG_3D_TSVCc 0x888C
-
-/*
- * REG_3D_AGPCmdSetting (89e4h-89f7)
- */
-#define REG_3D_AGPCmBase 0x89E4
-#define REG_3D_AGPRmDwNum 0x89E8
-#define REG_3D_AGPTtDwNum 0x89EC
-#define REG_3D_AGPCmFire 0x89F0
-
-#define REG_3D_ParsingSet 0x89F4
-#define REG_3D_PrimitiveSet 0x89F8
-#define REG_3D_ShadeMode 0x89F8
-#define REG_3D_EngineFire 0x89FC
-#define REG_3D_EngineStatus 0x89FC
-#define REG_3D_TEnable 0x8A00
-#define REG_3D_TEnable2 0x8A04
-
-#define REG_3D_ZSet 0x8A08
-#define REG_3D_ZBias 0x8A0C
-#define REG_3D_ZStWriteMask 0x8A10
-
-#define REG_3D_ZAddress 0x8A14
-#define REG_3D_AlphaSet 0x8A18
-#define REG_3D_AlphaAddress 0x8A1C
-#define REG_3D_DstSet 0x8A20
-#define REG_3D_DstAlphaWriteMask 0x8A24
-
-#define REG_3D_DstAddress 0x8A28
-
-#define REG_3D_LinePattern 0x8A2C
-
-#define REG_3D_FogSet 0x8A30
-
-#define REG_3D_FogFarDistance 0x8A34
-#define REG_3D_FogInverseDistance 0x8A38
-#define REG_3D_FogFactorDensity 0x8A3C
-
-#define REG_3D_StencilSet 0x8A44
-#define REG_3D_StencilSet2 0x8A48
-#define REG_3D_StencilAddress 0x8A4C
-
-#define REG_3D_DstBlendMode 0x8A50
-#define REG_3D_SrcBlendMode 0x8A50
-#define REG_3D_ClipTopBottom 0x8A54
-#define REG_3D_ClipLeftRight 0x8A58
-
-#define REG_3D_Brightness 0x8A5C
-
-#define REG_3D_BumpMapSet 0x8A68
-#define REG_3D_BumpMapAddress 0x8A6C
-#define REG_3D_BumpMapPitch 0x8A70
-#define REG_3D_BumpMapMatrix0 0x8A74
-#define REG_3D_BumpMapMatrix1 0x8A78
-
-/*
- * Define the Texture Register Address of 6326
- */
-#define REG_3D_TextureSet 0x8A7C
-#define REG_3D_TextureWidthHeight 0x8A7C
-#define REG_3D_TextureMip 0x8A80
-
-#define REG_3D_TextureTransparencyColorHigh 0x8A84
-#define REG_3D_TextureTransparencyColorLow 0x8A88
-#define REG_3D_TextureBorderColor 0x8A8C
-#define REG_3D_TextureAddress0 0x8A90
-#define REG_3D_TextureAddress1 0x8A94
-#define REG_3D_TextureAddress2 0x8A98
-#define REG_3D_TextureAddress3 0x8A9C
-#define REG_3D_TextureAddress4 0x8AA0
-#define REG_3D_TextureAddress5 0x8AA4
-#define REG_3D_TextureAddress6 0x8AA8
-#define REG_3D_TextureAddress7 0x8AAC
-#define REG_3D_TextureAddress8 0x8AB0
-#define REG_3D_TextureAddress9 0x8AB4
-#define REG_3D_TextureAddress10 0x8AB8
-#define REG_3D_TextureAddress11 0x8ABC
-#define REG_3D_TexturePitch0 0x8AC0
-#define REG_3D_TexturePitch1 0x8AC0
-#define REG_3D_TexturePitch2 0x8AC4
-#define REG_3D_TexturePitch3 0x8AC4
-#define REG_3D_TexturePitch4 0x8AC8
-#define REG_3D_TexturePitch5 0x8AC8
-#define REG_3D_TexturePitch6 0x8ACC
-#define REG_3D_TexturePitch7 0x8ACC
-#define REG_3D_TexturePitch8 0x8AD0
-#define REG_3D_TexturePitch9 0x8AD0
-#define REG_3D_TexturePitch10 0x8AD4
-
-#define REG_3D_Texture1Set 0x8ADC
-#define REG_3D_Texture1WidthHeight 0x8ADC
-#define REG_3D_Texture1Mip 0x8AE0
-
-#define REG_3D_Texture1TransparencyColorHigh 0x8AE4
-#define REG_3D_Texture1TransparencyColorLow 0x8AE8
-#define REG_3D_Texture1BorderColor 0x8AEC
-#define REG_3D_Texture1Address0 0x8AF0
-#define REG_3D_Texture1Address1 0x8AF4
-#define REG_3D_Texture1Address2 0x8AF8
-#define REG_3D_Texture1Address3 0x8AFC
-#define REG_3D_Texture1Address4 0x8B00
-#define REG_3D_Texture1Address5 0x8B04
-#define REG_3D_Texture1Address6 0x8B08
-#define REG_3D_Texture1Address7 0x8B0C
-#define REG_3D_Texture1Address8 0x8B10
-#define REG_3D_Texture1Address9 0x8B14
-#define REG_3D_Texture1Address10 0x8B18
-#define REG_3D_Texture1Address11 0x8B1C
-#define REG_3D_Texture1Pitch0 0x8B20
-#define REG_3D_Texture1Pitch1 0x8B20
-#define REG_3D_Texture1Pitch2 0x8B24
-#define REG_3D_Texture1Pitch3 0x8B24
-#define REG_3D_Texture1Pitch4 0x8B28
-#define REG_3D_Texture1Pitch5 0x8B28
-#define REG_3D_Texture1Pitch6 0x8B2C
-#define REG_3D_Texture1Pitch7 0x8B2C
-#define REG_3D_Texture1Pitch8 0x8B30
-#define REG_3D_Texture1Pitch9 0x8B30
-#define REG_3D_Texture1Pitch10 0x8B34
-
-#define REG_3D_TextureBlendFactor 0x8B3C
-#define REG_3D_TextureColorBlendSet0 0x8B40
-#define REG_3D_TextureColorBlendSet1 0x8B44
-#define REG_3D_TextureAlphaBlendSet0 0x8B48
-#define REG_3D_TextureAlphaBlendSet1 0x8B4C
-/*
- * Define the End of Primitive List of 6326
- */
-#define REG_3D_EndPrimitiveList 0X8B50
-
-
-/*
- * Define the Stipple Register Address of 6326
- */
-#define REG_3D_Stipple0 0X8B60
-
-#define REG_3D_TexturePalette 0x8C00
-
-/*
- * REG_BLT_CMD -- (8x823c-0x823f)
- */
-#define BLT_CMD_BITBLT 0x00000000
-#define BLT_CMD_COLOREXP 0x00000001
-#define BLT_CMD_ENCOLOREXP 0x00000002
-#define BLT_CMD_MULTIPLE_SCANLINE 0x00000003
-#define BLT_CMD_LINE 0x00000004
-#define BLT_CMD_TRAPAZOID_FILL 0x00000005
-#define BLT_CMD_TRANSPARENT_BITBLT 0x00000006
-
-#define BLT_X_INC 0x00010000
-#define BLT_Y_INC 0x00020000
-
-#define BLT_SRC_VIDEO 0x00000000
-#define BLT_SRC_SYSTEM 0x00000010
-#define BLT_SRC_CPUBLITBUF BLT_SRC_SYSTEM
-#define BLT_SRC_AGP 0x00000020
-
-#define BLT_PAT_FG 0x00000000
-#define BLT_PAT_PATREG 0x00000040
-#define BLT_PAT_MONO 0x00000080
-
-/* Clipping flags */
-#define BLT_NOCLIP 0x00000000
-#define BLT_NOMERGECLIP 0x04000000
-#define BLT_CLIPENABLE 0x00040000
-#define BLT_CLIPWITHOUTMERGE 0x04040000
-
-/*
- * REG_CommandQueue -- (8240h-8243h)
- */
-#define MASK_QueueLen 0x0000ffff
-#define SiS_EngIdle2d 0x80000000
-#define SiS_EngIdle 0xe0000000
-#define MASK_EngState 0xf0000000
-
-/*
- * REG_3D_ParsingSet -- Define Parsing Mask (89F4h-89F7h)
- */
-#define MASK_VertexDWSize 0xF0000000
-#define MASK_VertexDataFormat 0x0FFF0000
-#define MASK_PsVertex_HAS_RHW 0x08000000
-#define MASK_PsVertex_HAS_NORMALXYZ 0x04000000
-#define MASK_PsVertex_HAS_DIFFUSE 0x02000000
-#define MASK_PsVertex_HAS_SPECULAR 0x01000000
-#define MASK_PsUVSet 0x00FF0000
-#define MASK_PsVertex_HAS_1SetUV 0x00800000
-#define MASK_PsVertex_HAS_2SetUV 0x00C00000
-#define MASK_PsVertex_HAS_3SetUV 0x00E00000
-#define MASK_PsVertex_HAS_UVSet1 0x00800000
-#define MASK_PsVertex_HAS_UVSet2 0x00400000
-#define MASK_PsVertex_HAS_UVSet3 0x00200000
-#define MASK_PsCullDirection_CCW 0x00008000
-#define MASK_PsShadingMode 0x00007000
-/* XXX Shading modes just a guess, but seem to work*/
-#define MASK_PsShadingFlatA 0x00001000
-#define MASK_PsShadingFlatB 0x00002000
-#define MASK_PsShadingFlatC 0x00003000
-#define MASK_PsShadingSmooth 0x00004000
-#define MASK_PsTextureFrom 0x000003F0
-#define MASK_PsTexture0FromA 0x00000000
-#define MASK_PsTexture1FromA 0x00000000
-#define MASK_PsTexture1FromB 0x00000040
-#define MASK_PsBumpTextureFromA 0x00000000
-#define MASK_PsBumpTextureFromB 0x00000010
-#define MASK_PsBumpTextureFromC 0x00000020
-#define MASK_PsDataType 0x0000000F
-#define MASK_PsPointList 0x00000000
-#define MASK_PsLineList 0x00000004
-#define MASK_PsLineStrip 0x00000005
-#define MASK_PsTriangleList 0x00000008
-#define MASK_PsTriangleStrip 0x00000009
-#define MASK_PsTriangleFan 0x0000000A
-
-/*
- * REG_3D_PrimitiveSet -- Define Fire Primitive Mask (89F8h-89FBh)
- */
-#define MASK_DrawPrimitiveCommand 0x00000007
-#define MASK_SetFirePosition 0x00001F00
-#define MASK_BumpTextureFrom 0x00030000
-#define MASK_Texture1From 0x000C0000
-#define MASK_Texture0From 0x00300000
-#define MASK_ShadingMode 0x07000000
-#define MASK_CullDirection 0x08000000
-
-#define OP_3D_POINT_DRAW 0x00000000
-#define OP_3D_LINE_DRAW 0x00000001
-#define OP_3D_TRIANGLE_DRAW 0x00000002
-
-#define OP_3D_DIRECTION_RIGHT 0x00000000
-#define OP_3D_DIRECTION_LEFT 0x00000100
-#define OP_3D_DIRECTION_HORIZONTAL 0x00000000
-#define OP_3D_DIRECTION_VERTICAL 0x00000100
-
-#define OP_3D_FIRE_TFIRE 0x00000000
-#define OP_3D_FIRE_TSARGBa 0x00000100
-#define OP_3D_FIRE_TSWa 0x00000200
-#define OP_3D_FIRE_TSVAa 0x00000300
-#define OP_3D_FIRE_TSVBa 0x00000400
-#define OP_3D_FIRE_TSVCa 0x00000500
-
-#define OP_3D_FIRE_TSARGBb 0x00000900
-#define OP_3D_FIRE_TSWb 0x00000a00
-#define OP_3D_FIRE_TSVAb 0x00000b00
-#define OP_3D_FIRE_TSVBb 0x00000c00
-#define OP_3D_FIRE_TSVCb 0x00000d00
-
-#define OP_3D_FIRE_TSARGBc 0x00001100
-#define OP_3D_FIRE_TSWc 0x00001200
-#define OP_3D_FIRE_TSVAc 0x00001300
-#define OP_3D_FIRE_TSVBc 0x00001400
-#define OP_3D_FIRE_TSVCc 0x00001500
-
-#define OP_3D_Texture0FromA 0x00000000
-#define OP_3D_Texture0FromB 0x00100000
-#define OP_3D_Texture0FromC 0x00200000
-#define OP_3D_Texture1FromA 0x00000000
-#define OP_3D_Texture1FromB 0x00040000
-#define OP_3D_Texture1FromC 0x00080000
-#define OP_3D_TextureBumpFromA 0x00000000
-#define OP_3D_TextureBumpFromB 0x00010000
-#define OP_3D_TextureBumpFromC 0x00020000
-
-#define OP_3D_CullDirection_CCW 0x08000000
-
-#define SHADE_FLAT_VertexA 0x01000000
-#define SHADE_FLAT_VertexB 0x02000000
-#define SHADE_FLAT_VertexC 0x03000000
-#define SHADE_GOURAUD 0x04000000
-
-/*
- * Define Command Queue Length Mask (89FCh-89FF)
- */
-#define MASK_CmdQueueLen 0x0FFF0000
-
-/*
- * REG_3D_TEnable -- Define Capility Enable Mask (8A00h-8A03h)
- */
-#define MASK_DitherEnable 0x00000001
-#define MASK_BlendEnable 0x00000002
-#define MASK_FogTestEnable 0x00000004
-#define MASK_FogEnable 0x00000008
-#define MASK_SpecularEnable 0x00000010
-#define MASK_FogPerspectiveEnable 0x00000020
-#define MASK_TextureCacheClear 0x00000040
-#define MASK_TextureCacheEnable 0x00000080
-#define MASK_BumpMapEnable 0x00000100
-#define MASK_TexturePerspectiveEnable 0x00000200
-#define MASK_TextureEnable 0x00000400
-#define MASK_CullEnable 0x00000800
-#define MASK_TextureNumUsed 0x0000F000
-#define MASK_AlphaBufferEnable 0x00010000
-#define MASK_AlphaTestEnable 0x00020000
-#define MASK_AlphaWriteEnable 0x00040000
-#define MASK_ZTestEnable 0x00080000
-#define MASK_ZWriteEnable 0x00100000
-#define MASK_StencilBufferEnable 0x00200000
-#define MASK_StencilTestEnable 0x00400000
-#define MASK_StencilWriteEnable 0x00800000
-#define MASK_Texture0TransparencyEnable 0x01000000
-#define MASK_Texture1TransparencyEnable 0x02000000
-#define MASK_TextureAWrapUCorrection 0x04000000
-#define MASK_TextureAWrapVCorrection 0x08000000
-#define MASK_TextureBWrapUCorrection 0x10000000
-#define MASK_TextureBWrapVCorrection 0x20000000
-#define MASK_TextureCWrapUCorrection 0x40000000
-#define MASK_TextureCWrapVCorrection 0x80000000
-
-/*
- * REG_3D_TEnable2 -- Define Capility Enable Mask2 (8A04h-8A07h)
- */
-#define MASK_Texture0BlockTextureEnable 0x00000001
-#define MASK_Texture1BlockTextureEnable 0x00000002
-#define MASK_Texture0AnisotropicEnable 0x00000010
-#define MASK_Texture1AnisotropicEnable 0x00000020
-#define MASK_TextureMipmapBiasEnable 0x00000040
-#define MASK_LinePatternEnable 0x00000100
-#define MASK_StippleAlphaEnable 0x00000200
-#define MASK_StippleEnable 0x00000400
-#define MASK_AntiAliasEnable 0x00000800
-#define MASK_ZMaskWriteEnable 0x00001000
-#define MASK_StencilMaskWriteEnable 0x00002000
-#define MASK_AlphaMaskWriteEnable 0x00004000
-#define MASK_ColorMaskWriteEnable 0x00008000
-#define MASK_ZCacheClear 0x00010000
-#define MASK_ZCacheEnable 0x00020000
-#define MASK_StencilCacheClear 0x00040000
-#define MASK_StencilCacheEnable 0x00080000
-#define MASK_AlphaCacheClear 0x00100000
-#define MASK_AlphaCacheEnable 0x00200000
-#define MASK_ColorCacheClear 0x00400000
-#define MASK_ColorCacheEnable 0x00800000
-
-/*
- * REG_3D_ZSet -- Define Z Buffer Setting Mask (8A08h-8A0Bh)
- */
-#define MASK_ZBufferPitch 0x00000FFF
-#define MASK_ZTestMode 0x00070000
-#define MASK_ZBufferInSystem 0x00080000
-#define MASK_ZBufferFormat 0x01F00000
-
-#define SiS_Z_COMP_NEVER 0x00000000
-#define SiS_Z_COMP_S_LT_B 0x00010000
-#define SiS_Z_COMP_S_EQ_B 0x00020000
-#define SiS_Z_COMP_S_LE_B 0x00030000
-#define SiS_Z_COMP_S_GT_B 0x00040000
-#define SiS_Z_COMP_S_NE_B 0x00050000
-#define SiS_Z_COMP_S_GE_B 0x00060000
-#define SiS_Z_COMP_ALWAYS 0x00070000
-
-#define SiS_ZFORMAT_Z16 0x00000000
-#define SiS_ZFORMAT_Z16_INT 0x00100000
-#define SiS_ZFORMAT_S1Z15 0x00400000
-#define SiS_ZFORMAT_S1Z15_INT 0x00500000
-#define SiS_ZFORMAT_Z32 0x00800000
-#define SiS_ZFORMAT_S1Z31 0x00C00000
-#define SiS_ZFORMAT_S2Z30 0x00D00000
-#define SiS_ZFORMAT_S4Z28 0x00E00000
-#define SiS_ZFORMAT_S8Z24 0x00F00000
-#define SiS_ZFORMAT_FZ30 0x01800000
-#define SiS_ZFORMAT_FS1Z30 0x01C00000
-#define SiS_ZFORMAT_FS2Z30 0x01D00000
-
-/*
- * REG_3D_ZBias -- Define Z Buffer Setting Mask (8A0Ch-8A0Fh)
- */
-#define MASK_ZBias 0xFFFFFFFF
-
-/*
- * REG_3D_ZStWriteMask -- Define Z and Stencil Buffer Mask (8A10h-8A13h)
- */
-#define MASK_ZWriteMask 0x00FFFFFF
-
-/*
- * REG_3D_ZAddress -- Define Z Buffer Base Address(8A14h-8A17h)
- */
-#define MASK_ZAddress 0xFFFFFFFF
-
-/*
- * REG_3D_AlphaSet -- Define Alpha Buffer Setting Mask (8A18h-8A1Bh)
- */
-#define MASK_AlphaBufferPitch 0x000003FF
-#define MASK_AlphaRefValue 0x00FF0000
-#define MASK_AlphaTestMode 0x07000000
-#define MASK_AlphaBufferInSystem 0x08000000
-#define MASK_AlphaBufferFormat 0x30000000
-
-#define SiS_ALPHA_NEVER 0x00000000
-#define SiS_ALPHA_LESS 0x01000000
-#define SiS_ALPHA_EQUAL 0x02000000
-#define SiS_ALPHA_LEQUAL 0x03000000
-#define SiS_ALPHA_GREATER 0x04000000
-#define SiS_ALPHA_NOTEQUAL 0x05000000
-#define SiS_ALPHA_GEQUAL 0x06000000
-#define SiS_ALPHA_ALWAYS 0x07000000
-
-/*
- * REG_3D_AlphaAddress -- Define Alpha Buffer Base Address(8A1Ch-8A1Fh)
- */
-#define MASK_AlphaAddress 0xFFFFFFFF
-
-/*
- * REG_3D_DstSet -- Define Destination Buffer Setting Mask (8A20h-8A23h)
- */
-#define MASK_DstBufferPitch 0x00000FFF
-#define MASK_DstBufferFormat 0x000F0000
-#define MASK_DstBufferBitDepth 0x00300000
-#define MASK_DstBufferRgbOrder 0x00400000
-#define MASK_DstBufferInSystem 0x00800000
-#define MASK_Dst7BitFormat 0x007F0000
-#define MASK_ROP2 0x0F000000
-
-#define DST_FORMAT_RGB_555 0x00100000
-#define DST_FORMAT_RGB_565 0x00110000
-#define DST_FORMAT_ARGB_1555 0x00120000
-#define DST_FORMAT_ARGB_4444 0x00130000
-#define DST_FORMAT_ARGB_1888 0x00300000
-#define DST_FORMAT_ARGB_2888 0x00310000
-#define DST_FORMAT_ARGB_4888 0x00320000
-#define DST_FORMAT_ARGB_8888 0x00330000
-#define DST_FORMAT_ARGB_0888 0x00340000
-
-#define DST_FORMAT_BGR_555 0x00500000
-#define DST_FORMAT_BGR_565 0x00510000
-#define DST_FORMAT_ABGR_1555 0x00520000
-#define DST_FORMAT_ABGR_4444 0x00530000
-#define DST_FORMAT_ABGR_1888 0x00700000
-#define DST_FORMAT_ABGR_2888 0x00710000
-#define DST_FORMAT_ABGR_4888 0x00720000
-#define DST_FORMAT_ABGR_8888 0x00730000
-#define DST_FORMAT_ABGR_0888 0x00740000
-
-#define LOP_CLEAR 0x00000000
-#define LOP_NOR 0x01000000
-#define LOP_AND_INVERTED 0x02000000
-#define LOP_COPY_INVERTED 0x03000000
-#define LOP_AND_REVERSE 0x04000000
-#define LOP_INVERT 0x05000000
-#define LOP_XOR 0x06000000
-#define LOP_NAND 0x07000000
-#define LOP_AND 0x08000000
-#define LOP_EQUIV 0x09000000
-#define LOP_NOOP 0x0a000000
-#define LOP_OR_INVERTED 0x0b000000
-#define LOP_COPY 0x0c000000
-#define LOP_OR_REVERSE 0x0d000000
-#define LOP_OR 0x0e000000
-#define LOP_SET 0x0f000000
-
-/*
- * REG_3D_DstAlphaWriteMask -- Define Destination/Alpha Buffer Write Mask (8A24h-8A27h)
- */
-#define MASK_ColorWriteMask 0x00FFFFFF
-#define MASK_AlphaWriteMask 0xFF000000
-
-/*
- * REG_3D_DstAddress -- Define Destination Buffer Base Address(8A1Ch-8A1Fh)
- */
-#define MASK_DstAddress 0xFFFFFFFF
-
-/*
- * REG_3D_LinePattern -- Define Line Pattern (8A2Ch-8A2Fh)
- */
-#define MASK_LinePatternRepeatFactor 0x00007FFF
-#define MASK_LinePatternLastPixelFlag 0x00008000
-#define MASK_LinePattern 0xFFFF0000
-
-/*
- * REG_3D_FogSet -- Define Fog Mask (8A30h-8A33h)
- */
-#define MASK_FogColor 0x00FFFFFF
-#define MASK_FogMode 0x07000000
-#define MASK_FogZLookup 0x08000000
-
-#define FOGMODE_CHEAP 0x04000000
-#define FOGMODE_LINEAR 0x05000000
-#define FOGMODE_EXP 0x06000000
-#define FOGMODE_EXP2 0x07000000
-
-/*
- * REG_3D_FogStartEnd -- Define Fog Start End Setting (0x8A34 - 0x8A37)
- */
-#define MASK_FogFarDistance 0x0007FFFF
-
-/*
- * REG_3D_FogStartEnd -- Define Fog End Setting (0x8A38 - 0x8A3B)
- */
-#define MASK_FogInvFarDistance 0x0007FFFF
-
-/*
- * REG_3D_FogFactorDensity (0x8A3C - 0x8A3F)
- */
-#define MASK_FogDensity 0x0003FFFF
-#define MASK_FogFactor 0xFF000000
-
-/*
- * REG_3D_StencilSet -- Define stencil test (8A44h-8A47h)
- */
-#define MASK_StencilValueMask 0x000000ff
-#define MASK_StencilRefMask 0x0000ff00
-#define MASK_StencilTestMode 0x07000000
-#define MASK_StencilBufferInSystem 0x08000000
-#define MASK_StencilFormat 0x30000000
-
-#define SiS_STENCIL_NEVER 0x00000000
-#define SiS_STENCIL_LESS 0x01000000
-#define SiS_STENCIL_EQUAL 0x02000000
-#define SiS_STENCIL_LEQUAL 0x03000000
-#define SiS_STENCIL_GREATER 0x04000000
-#define SiS_STENCIL_NOTEQUAL 0x05000000
-#define SiS_STENCIL_GEQUAL 0x06000000
-#define SiS_STENCIL_ALWAYS 0x07000000
-
-#define STENCIL_FORMAT_1 0x00000000
-#define STENCIL_FORMAT_2 0x10000000
-#define STENCIL_FORMAT_4 0x20000000
-#define STENCIL_FORMAT_8 0x30000000
-
-/*
- * REG_3D_StencilSet2 -- Define stencil test (8A4h-8A47h)
- */
-#define MASK_StencilBufferPitch 0x00000FFF
-#define MASK_StencilZPassOp 0x00007000
-#define MASK_StencilZFailOp 0x00070000
-#define MASK_StencilFailOp 0x00700000
-#define MASK_StencilWriteMask 0xFF000000
-
-#define SiS_SFAIL_KEEP 0x00000000
-#define SiS_SFAIL_ZERO 0x00100000
-#define SiS_SFAIL_REPLACE 0x00200000
-#define SiS_SFAIL_INVERT 0x00500000
-#define SiS_SFAIL_INCR 0x00600000
-#define SiS_SFAIL_DECR 0x00700000
-
-#define SiS_SPASS_ZFAIL_KEEP 0x00000000
-#define SiS_SPASS_ZFAIL_ZERO 0x00010000
-#define SiS_SPASS_ZFAIL_REPLACE 0x00020000
-#define SiS_SPASS_ZFAIL_INVERT 0x00050000
-#define SiS_SPASS_ZFAIL_INCR 0x00060000
-#define SiS_SPASS_ZFAIL_DECR 0x00070000
-
-#define SiS_SPASS_ZPASS_KEEP 0x00000000
-#define SiS_SPASS_ZPASS_ZERO 0x00001000
-#define SiS_SPASS_ZPASS_REPLACE 0x00002000
-#define SiS_SPASS_ZPASS_INVERT 0x00005000
-#define SiS_SPASS_ZPASS_INCR 0x00006000
-#define SiS_SPASS_ZPASS_DECR 0x00007000
-
-/*
- * REG_3D_DstBlendMode (0x8A50 - 0x8A53)
- */
-#define MASK_SrcBlendMode 0x0000000F
-#define MASK_DstBlendMode 0x000000F0
-
-#define SiS_D_ZERO 0x00000000
-#define SiS_D_ONE 0x00000010
-#define SiS_D_SRC_COLOR 0x00000020
-#define SiS_D_ONE_MINUS_SRC_COLOR 0x00000030
-#define SiS_D_SRC_ALPHA 0x00000040
-#define SiS_D_ONE_MINUS_SRC_ALPHA 0x00000050
-#define SiS_D_DST_ALPHA 0x00000060
-#define SiS_D_ONE_MINUS_DST_ALPHA 0x00000070
-#define SiS_D_DST_COLOR 0x00000080
-#define SiS_D_ONE_MINUS_DST_COLOR 0x00000090
-#define SiS_D_SRC_ALPHA_SAT 0x000000a0
-
-#define SiS_S_ZERO 0x00000000
-#define SiS_S_ONE 0x00000001
-#define SiS_S_SRC_COLOR 0x00000002
-#define SiS_S_ONE_MINUS_SRC_COLOR 0x00000003
-#define SiS_S_SRC_ALPHA 0x00000004
-#define SiS_S_ONE_MINUS_SRC_ALPHA 0x00000005
-#define SiS_S_DST_ALPHA 0x00000006
-#define SiS_S_ONE_MINUS_DST_ALPHA 0x00000007
-#define SiS_S_DST_COLOR 0x00000008
-#define SiS_S_ONE_MINUS_DST_COLOR 0x00000009
-#define SiS_S_SRC_ALPHA_SATURATE 0x0000000a
-#define SiS_S_BOTH_SRC_ALPHA 0x0000000b
-#define SiS_S_BOTH_ONE_MINUS_SRC_ALPHA 0x0000000c
-
-/*
- * REG_3D_DstBlendMode (0x8A54 - 0x8A57)
- */
-#define MASK_BottomClip 0x00001FFF
-#define MASK_TopClip 0x03FFE000
-
-/*
- * REG_3D_DstBlendMode (0x8A58 - 0x8A5B)
- */
-#define MASK_RightClip 0x00001FFF
-#define MASK_LeftClip 0x03FFE000
-
-/*
- * REG_3D_TextureSet (0x8A7C - 0x8A7F)
- * REG_3D_Texture1Set (0x8ADC - 0x8ADF)
- */
-#define MASK_TextureHeight 0x0000000F
-#define MASK_TextureWidth 0x000000F0
-#define MASK_TextureLevel 0x00000F00
-#define MASK_TextureSignYUVFormat 0x00001000
-#define MASK_TextureMappingMode 0x00FF0000
-#define MASK_TextureWrapU 0x00010000
-#define MASK_TextureWrapV 0x00020000
-#define MASK_TextureMirrorU 0x00040000
-#define MASK_TextureMirrorV 0x00080000
-#define MASK_TextureClampU 0x00100000
-#define MASK_TextureClampV 0x00200000
-#define MASK_TextureBorderU 0x00400000
-#define MASK_TextureBorderV 0x00800000
-#define MASK_TextureFormat 0xFF000000
-#define MASK_TextureBitDepth 0x70000000
-#define MASK_TextureRgbOrder 0x80000000
-
-#define TEXEL_INDEX1 0x00000000
-#define TEXEL_INDEX2 0x01000000
-#define TEXEL_INDEX4 0x02000000
-#define TEXEL_INDEX8 0x03000000
-
-#define TEXEL_INDEX1WithAlpha 0x04000000
-#define TEXEL_INDEX2WithAlpha 0x05000000
-#define TEXEL_INDEX4WithAlpha 0x06000000
-#define TEXEL_INDEX8WithAlpha 0x07000000
-
-#define TEXEL_I1 0x10000000
-#define TEXEL_I2 0x11000000
-#define TEXEL_I4 0x12000000
-#define TEXEL_I8 0x13000000
-
-#define TEXEL_DXT1 0x19000000
-#define TEXEL_DXT2 0x1A000000
-#define TEXEL_DXT3 0x1B000000
-
-#define TEXEL_YUV422 0x20000000
-#define TEXEL_YVU422 0x21000000
-#define TEXEL_UVY422 0x22000000
-#define TEXEL_VUY422 0x23000000
-#define TEXEL_YUV411 0x24000000
-
-#define TEXEL_L1 0x30000000
-#define TEXEL_L2 0x31000000
-#define TEXEL_L4 0x32000000
-#define TEXEL_L8 0x33000000
-
-#define TEXEL_AL11 0x34000000
-#define TEXEL_AL44 0x35000000
-#define TEXEL_AL26 0x37000000
-#define TEXEL_AL88 0x38000000
-
-#define TEXEL_A1 0x40000000
-#define TEXEL_A2 0x41000000
-#define TEXEL_A4 0x42000000
-#define TEXEL_A8 0x43000000
-
-#define TEXEL_RGB_332_8 0x50000000
-#define TEXEL_RGB_233_8 0x51000000
-#define TEXEL_RGB_232_8 0x52000000
-#define TEXEL_ARGB_1232_8 0x53000000
-#define TEXEL_ARGB_2222_8 0x54000000
-
-#define TEXEL_RGB_555_16 0x60000000
-#define TEXEL_RGB_565_16 0x61000000
-#define TEXEL_ARGB_1555_16 0x62000000
-#define TEXEL_ARGB_4444_16 0x63000000
-
-#define TEXEL_ARGB_1888_32 0x70000000
-#define TEXEL_ARGB_2888_32 0x71000000
-#define TEXEL_ARGB_4888_32 0x72000000
-#define TEXEL_ARGB_8888_32 0x73000000
-#define TEXEL_ARGB_0888_32 0x74000000
-
-#define TEXEL_BGR_332_8 0xD0000000
-#define TEXEL_BGR_233_8 0xD1000000
-#define TEXEL_BGR_232_8 0xD2000000
-#define TEXEL_ABGR_1232_8 0xD3000000
-#define TEXEL_ABGR_2222_8 0xD4000000
-
-#define TEXEL_BGR_555_16 0xE0000000
-#define TEXEL_BGR_565_16 0xE1000000
-#define TEXEL_ABGR_1555_16 0xE2000000
-#define TEXEL_ABGR_4444_16 0xE3000000
-
-#define TEXEL_ABGR_1888_32 0xF0000000
-#define TEXEL_ABGR_2888_32 0xF1000000
-#define TEXEL_ABGR_4888_32 0xF2000000
-#define TEXEL_ABGR_8888_32 0xF3000000
-#define TEXEL_ABGR_0888_32 0xF4000000
-
-#define TEXEL_VU88 0x00000000
-#define TEXEL_LVU655 0x00800000
-#define TEXEL_LVU888 0x01000000
-#define TEXEL_UV88 0x02000000
-#define TEXEL_LUV655 0x02800000
-#define TEXEL_LUV888 0x03000000
-
-/*
- * REG_3D_TextureMip (0x8A80 - 0x8A83)
- * REG_3D_Texture1Mip (0x8AE0 - 0x8AE3)
- */
-#define MASK_TextureAnisotropyRatio 0x0000000F
-#define MASK_TextureMipmapLodBias 0x00003FF0
-#define MASK_TextureFilterMin 0x0001C000
-#define MASK_TextureFilterMag 0x00020000
-#define MASK_TextureFilter 0x0003C000
-#define MASK_TextureLevelInSystem 0x3FFC0000
-#define MASK_TextureLevel0InSystem 0x00040000
-#define MASK_TextureBlockLength 0xF0000000
-
-#define TEXTURE_FILTER_NEAREST 0x00000000
-#define TEXTURE_FILTER_LINEAR 0x00004000
-#define TEXTURE_FILTER_NEAREST_MIP_NEAREST 0x00008000
-#define TEXTURE_FILTER_NEAREST_MIP_LINEAR 0x00010000
-#define TEXTURE_FILTER_LINEAR_MIP_NEAREST 0x0000c000
-#define TEXTURE_FILTER_LINEAR_MIP_LINEAR 0x00014000
-
-/*
- * REG_3D_TextureTransparencyColorHigh (0x8A84 - 0x8A87)
- * REG_3D_Texture1TransparencyColorHigh (0x8AE4 - 0x8AE7)
- */
-#define MASK_TextureTransparencyColorHighB 0x000000FF
-#define MASK_TextureTransparencyColorHighG 0x0000FF00
-#define MASK_TextureTransparencyColorHighR 0x00FF0000
-#define MASK_TextureAlphaTransparencyMode 0x08000000
-
-/*
- * REG_3D_TextureTransparencyColorLow (0x8A88 - 0x8A8B)
- * REG_3D_Texture1TransparencyColorLow (0x8AE8 - 0x8AEB)
- */
-#define MASK_TextureTransparencyColorLowB 0x000000FF
-#define MASK_TextureTransparencyColorLowG 0x0000FF00
-#define MASK_TextureTransparencyColorLowR 0x00FF0000
-#define MASK_TextureBlockHeight 0x07000000
-#define MASK_TextureBlockWidth 0x70000000
-
-/*
- * REG_3D_TextureTransparencyColorLow (0x8A8C - 0x8A8F)
- * REG_3D_Texture1TransparencyColorLow (0x8AEC - 0x8AEF)
- */
-#define MASK_TextureBorderColorB 0x000000FF
-#define MASK_TextureBorderColorG 0x0000FF00
-#define MASK_TextureBorderColorR 0x00FF0000
-#define MASK_TextureBorderColorA 0xFF000000
-
-/*
- * REG_3D_TexturePitch0-10 (0x8AC0 - 0x8AD7)
- * REG_3D_Texture1Pitch0-10 (0x8B20 - 0x8B37)
- */
-#define MASK_TexturePitchOdd 0x000003FF
-#define MASK_TexturePitchEven 0x03FF0000
-#define SHIFT_TexturePitchEven 16
-
-/*
- * REG_3D_TextureColorBlendSet0 (0x8B40 - 0x8B43)
- * REG_3D_TextureColorBlendSet1 (0x8B44 - 0x8B46)
- * REG_3D_TextureAlphaBlendSet0 (0x8B40 - 0x8B43)
- * REG_3D_TextureAlphaBlendSet1 (0x8B44 - 0x8B46)
- */
-#define STAGE0_C_CF 0xa1485000
-#define STAGE0_C_CS 0xc1485000
-#define STAGE0_C_CFCS 0xa1705000
-#define STAGE0_C_CFOMAS_CSAS 0xc534c001
-#define STAGE0_C_CFOMCS_CCCS 0x4530c001
-
-#define STAGE0_A_AF 0x63230000
-#define STAGE0_A_AS 0xc3230000
-#define STAGE0_A_AFAS 0x63c30000
-#define STAGE0_A_AFOMAS_ACAS 0x46c60001
-
-#define STAGE1_C_CF 0xa1485000
-#define STAGE1_C_CS 0xe1485000
-#define STAGE1_C_CFCS 0xa1785000
-#define STAGE1_C_CFOMAS_CSAS 0xe5394001
-#define STAGE1_C_CFOMCS_CCCS 0x45394001
-
-#define STAGE1_A_AF 0xa3230000
-#define STAGE1_A_AS 0xe3230000
-#define STAGE1_A_AFAS 0xa3e30000
-#define STAGE1_A_AFOMAS_ACAS 0x4aea0001
-
-/* What registers are these associated with? */
-#define MASK_BMMemoryInSystem 0x00000080
-#define MASK_BMHeight 0x00000F00
-#define MASK_BMWidth 0x0000F000
-#define MASK_BMFilter 0x00010000
-#define MASK_BMMappingMode 0x007E0000
-#define MASK_BMFormat 0x07800000
-#define MASK_BMTxBumpmap 0x08000000
-
-#define MASK_BMAddress 0xFFFFFFFC
-
-#define MASK_BMOffset 0xFF800000
-#define MASK_BMScale 0x007FE000
-#define MASK_BMPitch 0x00001FFF
-
-#define MASK_BMMatrix00 0x000007FF
-#define MASK_BMMatrix01 0x07FF0000
-#define MASK_BMMatrix10 0x000007FF
-#define MASK_BMMatrix11 0x07FF0000
-
-#define MASK_TextureRealInSystem 0x00000001
-#define MASK_TextureDowngrade 0x00000002
-
-#define ALPHA_BUFFER_FORMAT_1 0x00000000
-#define ALPHA_BUFFER_FORMAT_2 0x10000000
-#define ALPHA_BUFFER_FORMAT_4 0x20000000
-#define ALPHA_BUFFER_FORMAT_8 0x30000000
-
-#endif
diff --git a/hw/kdrive/sis300/sis_stub.c b/hw/kdrive/sis300/sis_stub.c
deleted file mode 100644
index bce7d02d2..000000000
--- a/hw/kdrive/sis300/sis_stub.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright © 2003 Eric Anholt
- *
- * 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 Eric Anholt not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Eric Anholt makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * ERIC ANHOLT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL ERIC ANHOLT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "sis.h"
-#include "klinux.h"
-
-extern struct pci_id_entry sis_pci_ids[];
-
-void
-InitCard(char *name)
-{
- struct pci_id_entry *id;
- KdCardAttr attr;
-
- for (id = sis_pci_ids; id->name != NULL; id++) {
- int j = 0;
- while (LinuxFindPci(id->vendor, id->device, j++, &attr))
- KdCardInfoAdd(&SiSFuncs, &attr, 0);
- }
-}
-
-void
-InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput(pScreenInfo, argc, argv);
-}
-
-void
-InitInput(int argc, char **argv)
-{
- KdOsAddInputDrivers();
- KdInitInput();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
-#ifdef KDRIVEVESA
- vesaUseMsg();
-#endif
-}
-
-int
-ddxProcessArgument(int argc, char **argv, int i)
-{
- int ret;
-
-#ifdef KDRIVEVESA
- if (!(ret = vesaProcessArgument (argc, argv, i)))
-#endif
- ret = KdProcessArgument(argc, argv, i);
-
- return ret;
-}
diff --git a/hw/kdrive/sis530/sis.c b/hw/kdrive/sis530/sis.c
deleted file mode 100644
index e1deb3b28..000000000
--- a/hw/kdrive/sis530/sis.c
+++ /dev/null
@@ -1,921 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "sis.h"
-
-#define MAX_FB_SIZE (4096 * 1024)
-
-#define MMIO_SIZE (64 * 1024)
-
-int sisMemoryTable[8] = {
- 1, 2, 4, 0, 0, 2, 4, 8
-};
-
-Bool
-sisCardInit (KdCardInfo *card)
-{
- SisCardInfo *sisc;
- SisPtr sis;
- int size;
- CARD8 *registers;
- CARD8 *temp_buffer;
- CARD8 save_sr5;
-
- sisc = (SisCardInfo *) xalloc (sizeof (SisCardInfo));
- if (!sisc)
- goto bail0;
-
- sisc->io_base = card->attr.io;
- /*
- * enable access to SiS ports (no MMIO available)
- */
- iopl(3);
- save_sr5 = GetSrtc(sisc,0x5);
- if (save_sr5 != 0x21)
- save_sr5 = 0x86;
- PutSrtc(sisc,0x5,0x86);
-#if 0
- {
- int i;
-
- for (i = 0; i <= 0x3f; i++)
- fprintf (stderr, "SR%02x = %02x\n", i, GetSrtc(sisc,i));
- }
-#endif
- sisc->memory = sisMemoryTable[GetSrtc(sisc,0xc)&0x7] * 1024 * 1024;
-
- PutSrtc(sisc,0x5,save_sr5);
-
- if (!sisc->memory)
- {
- ErrorF ("Can't detect SiS530 frame buffer\n");
- goto bail1;
- }
-
- /*
- * Map frame buffer and MMIO registers
- */
- sisc->frameBuffer = KdMapDevice (card->attr.address[0], sisc->memory);
- if (!sisc->frameBuffer)
- goto bail1;
-
- sisc->registers = KdMapDevice (card->attr.address[1], MMIO_SIZE);
- if (!sisc->registers)
- goto bail2;
-
- /*
- * Offset from base of MMIO to registers
- */
- sisc->sis = (SisPtr) (sisc->registers + SIS_MMIO_OFFSET);
- sisc->cpu_bitblt = (VOL32 *) sisc->registers;
-
- card->driver = sisc;
-
- return TRUE;
-bail2:
- KdUnmapDevice (sisc->frameBuffer, sisc->memory);
-bail1:
- xfree (sisc);
-bail0:
- return FALSE;
-}
-
-Bool
-sisModeSupported (KdScreenInfo *screen, const KdMonitorTiming *t)
-{
- if (t->horizontal != 1600 &&
- t->horizontal != 1280 &&
- t->horizontal != 1152 &&
- t->horizontal != 1024 &&
- t->horizontal != 800 &&
- t->horizontal != 640)
- return FALSE;
- return TRUE;
-}
-
-Bool
-sisModeUsable (KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- SisCardInfo *sisc = (SisCardInfo *) card->driver;
- SisScreenInfo *siss;
- int i;
- KdMonitorTiming *t;
- CARD32 memory;
- int byte_width, pixel_width, screen_size;
-
- if (screen->fb[0].depth >= 24)
- {
- screen->fb[0].depth = 24;
- screen->fb[0].bitsPerPixel = 24;
- screen->dumb = TRUE;
- }
- else if (screen->fb[0].depth >= 16)
- {
- screen->fb[0].depth = 16;
- screen->fb[0].bitsPerPixel = 16;
- }
- else if (screen->fb[0].depth >= 15)
- {
- screen->fb[0].depth = 15;
- screen->fb[0].bitsPerPixel = 16;
- }
- else
- {
- screen->fb[0].depth = 8;
- screen->fb[0].bitsPerPixel = 8;
- }
- byte_width = screen->width * (screen->fb[0].bitsPerPixel >> 3);
- pixel_width = screen->width;
- screen->fb[0].pixelStride = pixel_width;
- screen->fb[0].byteStride = byte_width;
-
- screen_size = byte_width * screen->height;
-
- return screen_size <= sisc->memory;
-}
-
-Bool
-sisScreenInit (KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- SisCardInfo *sisc = (SisCardInfo *) card->driver;
- SisScreenInfo *siss;
- int i;
- const KdMonitorTiming *t;
- CARD32 memory;
- int byte_width, pixel_width, screen_size;
-
- siss = (SisScreenInfo *) xalloc (sizeof (SisScreenInfo));
- if (!siss)
- return FALSE;
-
- memset (siss, '\0', sizeof (SisScreenInfo));
-
- if (!screen->width || !screen->height)
- {
- screen->width = 800;
- screen->height = 600;
- screen->rate = 72;
- }
- if (!screen->fb[0].depth)
- screen->fb[0].depth = 8;
-
- t = KdFindMode (screen, sisModeSupported);
-
- screen->rate = t->rate;
- screen->width = t->horizontal;
- screen->height = t->vertical;
-
- if (!KdTuneMode (screen, sisModeUsable, sisModeSupported))
- {
- xfree (sisc);
- return FALSE;
- }
-
- memory = sisc->memory - screen_size;
-
- screen->fb[0].frameBuffer = sisc->frameBuffer;
-
- /*
- * Cursor lives in the last 16k of memory
- */
- if (memory >= 16384 && !screen->softCursor)
- {
- siss->cursor_base = sisc->frameBuffer + (sisc->memory - 16384);
- siss->cursor_off = siss->cursor_base - sisc->frameBuffer;
- memory -= 16384;
- }
- else
- {
- screen->softCursor = TRUE;
- siss->cursor_base = 0;
- siss->cursor_off = 0;
- }
-
- if (memory > 8192)
- {
- siss->expand = screen->fb[0].frameBuffer + screen_size;
- siss->expand_off = siss->expand - sisc->frameBuffer;
- siss->expand_len = memory;
- memory = 0;
- }
- else
- {
- siss->expand = 0;
- siss->expand_len = 0;
- }
-
- switch (screen->fb[0].depth) {
- case 8:
- screen->fb[0].visuals = ((1 << StaticGray) |
- (1 << GrayScale) |
- (1 << StaticColor) |
- (1 << PseudoColor) |
- (1 << TrueColor) |
- (1 << DirectColor));
- screen->fb[0].blueMask = 0x00;
- screen->fb[0].greenMask = 0x00;
- screen->fb[0].redMask = 0x00;
- break;
- case 15:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x001f;
- screen->fb[0].greenMask = 0x03e0;
- screen->fb[0].redMask = 0x7c00;
- break;
- case 16:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x001f;
- screen->fb[0].greenMask = 0x07e0;
- screen->fb[0].redMask = 0xf800;
- break;
- case 24:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x0000ff;
- screen->fb[0].greenMask = 0x00ff00;
- screen->fb[0].redMask = 0xff0000;
- break;
- }
-
- screen->driver = siss;
-
- return TRUE;
-}
-
-static void
-_sisGetCrtc (SisCardInfo *sisc, SisCrtc *crtc)
-{
- crtc->misc_output = _sisInb(sisc->io_base+0x4c);
- crtc->h_total_0_7 = GetCrtc (sisc, 0x00);
- crtc->h_display_end_0_7 = GetCrtc (sisc, 0x01);
- crtc->h_blank_start_0_7 = GetCrtc (sisc, 0x02);
- crtc->_h_blank_end = GetCrtc (sisc, 0x03);
- crtc->h_sync_start_0_7 = GetCrtc (sisc, 0x04);
- crtc->_h_sync_end = GetCrtc (sisc, 0x05);
- crtc->v_total_0_7 = GetCrtc (sisc, 0x06);
- crtc->crtc_overflow = GetCrtc (sisc, 0x07);
- crtc->preset_row_scan = GetCrtc (sisc, 0x08);
- crtc->_max_scan_line = GetCrtc (sisc, 0x09);
- crtc->cursor_start = GetCrtc (sisc, 0x0a);
- crtc->cursor_end = GetCrtc (sisc, 0x0a);
- crtc->start_address_8_15 = GetCrtc (sisc, 0x0c);
- crtc->start_address_0_7 = GetCrtc (sisc, 0x0d);
- crtc->text_cursor_15_8 = GetCrtc (sisc, 0x0e);
- crtc->text_cursor_7_0 = GetCrtc (sisc, 0x0f);
- crtc->v_retrace_start_0_7 = GetCrtc (sisc, 0x10);
- crtc->_v_retrace_end = GetCrtc (sisc, 0x11);
- crtc->v_display_end_0_7 = GetCrtc (sisc, 0x12);
- crtc->screen_off_0_7 = GetCrtc (sisc, 0x13);
- crtc->_underline_location = GetCrtc (sisc, 0x14);
- crtc->v_blank_start_0_7 = GetCrtc (sisc, 0x15);
- crtc->v_blank_end_0_7 = GetCrtc (sisc, 0x16);
- crtc->crtc_mode = GetCrtc (sisc, 0x17);
-
- crtc->line_compare_0_7 = GetCrtc (sisc, 0x18);
-
- crtc->mode_control = GetArtc (sisc, 0x10);
- crtc->screen_border_color = GetArtc (sisc, 0x11);
- crtc->enable_color_plane = GetArtc (sisc, 0x12);
- crtc->horizontal_pixel_pan = GetArtc (sisc, 0x13);
-
- crtc->mode_register = GetGrtc (sisc, 0x5);
- crtc->misc_register = GetGrtc (sisc, 0x6);
- crtc->color_dont_care = GetGrtc (sisc, 0x7);
-
- crtc->clock_mode = GetSrtc (sisc, 0x1);
- crtc->color_plane_w_enable = GetSrtc (sisc, 0x2);
- crtc->memory_mode = GetSrtc (sisc, 0x4);
-
- crtc->graphics_mode = GetSrtc (sisc, 0x6);
- crtc->misc_control_0 = GetSrtc (sisc, 0x7);
- crtc->crt_cpu_threshold_control_0 = GetSrtc (sisc, 0x8);
- crtc->crt_cpu_threshold_control_1 = GetSrtc (sisc, 0x9);
- crtc->extended_crt_overflow = GetSrtc (sisc, 0xa);
- crtc->misc_control_1 = GetSrtc (sisc, 0xb);
- crtc->misc_control_2 = GetSrtc (sisc, 0xc);
-
- crtc->ddc_and_power_control = GetSrtc (sisc, 0x11);
- crtc->extended_horizontal_overflow = GetSrtc (sisc, 0x12);
- crtc->extended_clock_generator = GetSrtc (sisc, 0x13);
- crtc->cursor_0_red = GetSrtc (sisc, 0x14);
- crtc->cursor_0_green = GetSrtc (sisc, 0x15);
- crtc->cursor_0_blue = GetSrtc (sisc, 0x16);
- crtc->cursor_1_red = GetSrtc (sisc, 0x17);
- crtc->cursor_1_green = GetSrtc (sisc, 0x18);
- crtc->cursor_1_blue = GetSrtc (sisc, 0x19);
- crtc->cursor_h_start_0_7 = GetSrtc (sisc, 0x1a);
- crtc->cursor_h_start_1 = GetSrtc (sisc, 0x1b);
- crtc->cursor_h_preset_0_5 = GetSrtc (sisc, 0x1c);
- crtc->cursor_v_start_0_7 = GetSrtc (sisc, 0x1d);
- crtc->cursor_v_start_1 = GetSrtc (sisc, 0x1e);
- crtc->cursor_v_preset_0_5 = GetSrtc (sisc, 0x1f);
- crtc->linear_base_19_26 = GetSrtc (sisc, 0x20);
- crtc->linear_base_1 = GetSrtc (sisc, 0x21);
-
- crtc->graphics_engine_0 = GetSrtc (sisc, 0x26);
- crtc->graphics_engine_1 = GetSrtc (sisc, 0x27);
- crtc->internal_mclk_0 = GetSrtc (sisc, 0x28);
- crtc->internal_mclk_1 = GetSrtc (sisc, 0x29);
- crtc->internal_vclk_0 = GetSrtc (sisc, 0x2A);
- crtc->internal_vclk_1 = GetSrtc (sisc, 0x2B);
-
- crtc->misc_control_7 = GetSrtc (sisc, 0x38);
-
- crtc->misc_control_11 = GetSrtc (sisc, 0x3E);
- crtc->misc_control_12 = GetSrtc (sisc, 0x3F);
-}
-
-static void
-_sisSetBlank (SisCardInfo *sisc, Bool blank)
-{
- CARD8 clock;
-
- clock = GetSrtc (sisc, 0x01);
- if (blank)
- clock |= 0x20;
- else
- clock &= ~0x20;
- PutSrtc (sisc, 0x01, clock);
-}
-
-static void
-_sisSetCrtc (SisCardInfo *sisc, SisCrtc *crtc)
-{
- _sisSetBlank (sisc, TRUE);
- PutCrtc (sisc, 0x00, crtc->h_total_0_7);
- PutCrtc (sisc, 0x01, crtc->h_display_end_0_7);
- PutCrtc (sisc, 0x02, crtc->h_blank_start_0_7);
- PutCrtc (sisc, 0x03, crtc->_h_blank_end);
- PutCrtc (sisc, 0x04, crtc->h_sync_start_0_7);
- PutCrtc (sisc, 0x05, crtc->_h_sync_end);
- PutCrtc (sisc, 0x06, crtc->v_total_0_7);
- PutCrtc (sisc, 0x07, crtc->crtc_overflow);
- PutCrtc (sisc, 0x08, crtc->preset_row_scan);
- PutCrtc (sisc, 0x09, crtc->_max_scan_line);
- PutCrtc (sisc, 0x0a, crtc->cursor_start);
- PutCrtc (sisc, 0x0b, crtc->cursor_end);
- PutCrtc (sisc, 0x0c, crtc->start_address_8_15);
- PutCrtc (sisc, 0x0d, crtc->start_address_0_7);
- PutCrtc (sisc, 0x0e, crtc->text_cursor_15_8);
- PutCrtc (sisc, 0x0f, crtc->text_cursor_7_0);
- PutCrtc (sisc, 0x10, crtc->v_retrace_start_0_7);
- PutCrtc (sisc, 0x11, crtc->_v_retrace_end);
- PutCrtc (sisc, 0x12, crtc->v_display_end_0_7);
- PutCrtc (sisc, 0x13, crtc->screen_off_0_7);
- PutCrtc (sisc, 0x14, crtc->_underline_location);
- PutCrtc (sisc, 0x15, crtc->v_blank_start_0_7);
- PutCrtc (sisc, 0x16, crtc->v_blank_end_0_7);
- PutCrtc (sisc, 0x17, crtc->crtc_mode);
- PutCrtc (sisc, 0x18, crtc->line_compare_0_7);
-
- PutArtc (sisc, 0x10, crtc->mode_control);
- PutArtc (sisc, 0x11, crtc->screen_border_color);
- PutArtc (sisc, 0x12, crtc->enable_color_plane);
- PutArtc (sisc, 0x13, crtc->horizontal_pixel_pan);
-
- PutGrtc (sisc, 0x5, crtc->mode_register);
- PutGrtc (sisc, 0x6, crtc->misc_register);
- PutGrtc (sisc, 0x7, crtc->color_dont_care);
-
- PutSrtc (sisc, 0x1, crtc->clock_mode | 0x20);
- PutSrtc (sisc, 0x2, crtc->color_plane_w_enable);
- PutSrtc (sisc, 0x4, crtc->memory_mode);
-
- PutSrtc (sisc, 0x6, crtc->graphics_mode);
- PutSrtc (sisc, 0x7, crtc->misc_control_0);
- PutSrtc (sisc, 0x8, crtc->crt_cpu_threshold_control_0);
- PutSrtc (sisc, 0x9, crtc->crt_cpu_threshold_control_1);
- PutSrtc (sisc, 0xa, crtc->extended_crt_overflow);
- PutSrtc (sisc, 0xb, crtc->misc_control_1);
- PutSrtc (sisc, 0xc, crtc->misc_control_2);
-
- PutSrtc (sisc, 0x11, crtc->ddc_and_power_control);
- PutSrtc (sisc, 0x12, crtc->extended_horizontal_overflow);
- PutSrtc (sisc, 0x13, crtc->extended_clock_generator);
- PutSrtc (sisc, 0x14, crtc->cursor_0_red);
- PutSrtc (sisc, 0x15, crtc->cursor_0_green);
- PutSrtc (sisc, 0x16, crtc->cursor_0_blue);
- PutSrtc (sisc, 0x17, crtc->cursor_1_red);
- PutSrtc (sisc, 0x18, crtc->cursor_1_green);
- PutSrtc (sisc, 0x19, crtc->cursor_1_blue);
- PutSrtc (sisc, 0x1a, crtc->cursor_h_start_0_7);
- PutSrtc (sisc, 0x1b, crtc->cursor_h_start_1);
- PutSrtc (sisc, 0x1c, crtc->cursor_h_preset_0_5);
- PutSrtc (sisc, 0x1d, crtc->cursor_v_start_0_7);
- PutSrtc (sisc, 0x1e, crtc->cursor_v_start_1);
- PutSrtc (sisc, 0x1f, crtc->cursor_v_preset_0_5);
- PutSrtc (sisc, 0x20, crtc->linear_base_19_26);
- PutSrtc (sisc, 0x21, crtc->linear_base_1);
-
- PutSrtc (sisc, 0x26, crtc->graphics_engine_0);
- PutSrtc (sisc, 0x27, crtc->graphics_engine_1);
- PutSrtc (sisc, 0x28, crtc->internal_mclk_0);
- PutSrtc (sisc, 0x29, crtc->internal_mclk_1);
- PutSrtc (sisc, 0x2A, crtc->internal_vclk_0);
- PutSrtc (sisc, 0x2B, crtc->internal_vclk_1);
-
- PutSrtc (sisc, 0x38, crtc->misc_control_7);
-
- PutSrtc (sisc, 0x3E, crtc->misc_control_11);
- PutSrtc (sisc, 0x3F, crtc->misc_control_12);
-
-#if 0
- PutCrtc (sisc, 0x5b, 0x27);
- PutCrtc (sisc, 0x5c, 0xe1);
- PutCrtc (sisc, 0x5d, 0x00);
-
- PutSrtc (sisc, 0x5a, 0xe6);
- PutSrtc (sisc, 0x5d, 0xa1);
- PutSrtc (sisc, 0x9a, 0xe6);
- PutSrtc (sisc, 0x9d, 0xa1);
- PutSrtc (sisc, 0xda, 0xe6);
- PutSrtc (sisc, 0xdd, 0x6c);
-#endif
-
- _sisOutb(crtc->misc_output, sisc->io_base+0x42);
-
- outw (0x3c4, 0x0100);
- outw (0x3c4, 0x0300);
-
- _sisSetBlank (sisc, FALSE);
-}
-
-CARD8
-_sisReadIndexRegister (CARD32 base, CARD8 index)
-{
- CARD8 ret;
-
- _sisOutb (index, base);
- ret = _sisInb (base+1);
- return ret;
-}
-
-void
-_sisWriteIndexRegister (CARD32 base, CARD8 index, CARD8 value)
-{
- _sisOutb (index, base);
- _sisOutb (value, base+1);
-}
-
-CARD8
-_sisReadArtc (CARD32 base, CARD8 index)
-{
- CARD8 ret;
-
- _sisInb (base+0x1a);
- _sisOutb (index,base);
- ret = _sisInb (base+1);
- _sisInb (base+0x1a);
- _sisOutb (0x20,base);
- return ret;
-}
-
-void
-_sisWriteArtc (CARD32 base, CARD8 index, CARD8 value)
-{
- _sisInb (base+0x1a);
- _sisOutb (index|0x20,base);
- _sisOutb (value,base);
- _sisInb (base+0x1a);
- _sisOutb (0x20,base);
-}
-
-void
-sisPreserve (KdCardInfo *card)
-{
- SisCardInfo *sisc = card->driver;
- CARD8 *r = sisc->registers;
- int a, i, l;
- CARD8 line[16];
- CARD8 prev[16];
- BOOL gotone;
-
- sisc->save.sr5 = GetSrtc(sisc,0x5);
- if (sisc->save.sr5 != 0x21)
- sisc->save.sr5 = 0x86;
- /* unlock extension registers */
- PutSrtc(sisc,0x5,0x86);
- /* unlock CRTC registers */
- PutCrtc(sisc,0x11,GetCrtc(sisc,0x11)&~0x80);
- /* enable vga */
- _sisOutb(0x1,sisc->io_base+0x43);
-
- /* enable MMIO access to registers */
- sisc->save.srb = GetSrtc(sisc,0xb);
- PutSrtc(sisc, 0xb, sisc->save.srb | 0x60);
- _sisGetCrtc (sisc, &sisc->save.crtc);
- memcpy (sisc->save.text_save, sisc->frameBuffer, SIS_TEXT_SAVE);
-}
-
-Bool
-sisEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdCardInfo *card = pScreenPriv->card;
- SisCardInfo *sisc = card->driver;
- SisScreenInfo *siss = screen->driver;
- const KdMonitorTiming *t;
- SisCrtc crtc;
- unsigned long pixel;
-
- int hactive;
- int hblank;
- int hfp;
- int hbp;
-
- int vactive;
- int vblank;
- int vfp;
- int vbp;
-
- int h_total;
- int h_display_end;
- int h_blank_start;
- int h_blank_end;
- int h_sync_start;
- int h_sync_end;
- int h_screen_off;
-
- int h_adjust;
-
- int v_total;
- int v_retrace_start;
- int v_retrace_end;
- int v_display_end;
- int v_blank_start;
- int v_blank_end;
-
- crtc = sisc->save.crtc;
-
- t = KdFindMode (screen, sisModeSupported);
-
- /* CR9 */
- crtc.max_scan_line = 0;
-
- /* CRA */
- crtc.cursor_start = 0;
-
- /* CRB */
- crtc.cursor_end = 0;
-
- /* CRE */
- crtc.text_cursor_15_8 = 0;
-
- /* CRF */
- crtc.text_cursor_7_0 = 0;
-
- /* CR11 */
- crtc.disable_v_retrace_int = 1;
-
- /* CR14 */
- crtc.underline_location = 0;
- crtc.count_by_four = 0;
- crtc.doubleword_mode = 1;
-
- /* 3CC/3C2 */
- crtc.io_address_select = 1;
- crtc.display_ram_enable = 1;
- crtc.clock_select = 3;
-
- /* SR1 */
- crtc.clock_mode = 0;
- crtc.dot_clock_8_9 = 1;
-
- /* SR2 */
- crtc.color_plane_w_enable = 0xf;
-
- /* SR4 */
- crtc.memory_mode = 0;
- crtc.chain_4_enable = 1;
- crtc.odd_even_disable = 1;
- crtc.extended_memory_sz = 1;
-
- /* SR6 */
- crtc.graphics_mode_linear = 1;
- crtc.enhanced_graphics_mode = 1;
-
- /* SR9 */
- crtc.crt_cpu_threshold_control_1 = 0;
-
- /* SRB */
-#if 0
- crtc.cpu_bitblt_enable = 1;
-#endif
- crtc.memory_mapped_mode = 3;
-
- /* SRC */
- crtc.graphics_mode_32bit_enable = 1;
- crtc.read_ahead_enable = 1;
-
- /* SR11 */
- crtc.acpi_enable = 0;
- crtc.kbd_cursor_activate = 0;
- crtc.video_memory_activate = 0;
- crtc.vga_standby = 0;
- crtc.vga_suspend = 0;
-
- crtc.cursor_0_red = 0x3f;
- crtc.cursor_0_green = 0x3f;
- crtc.cursor_0_blue = 0x3f;
-
- /* SR20 */
- crtc.linear_base_19_26 = (card->attr.address[0] & 0x07f80000) >> 19;
-
- /* SR21 */
- crtc.linear_base_27_31 = (card->attr.address[0] & 0xf8000000) >> 27;
- crtc.linear_aperture = SIS_LINEAR_APERTURE_4M;
-
- /* SR27 */
- crtc.logical_screen_width = 3;
- crtc.graphics_prog_enable = 1;
-
- /* SR38 */
- crtc.extended_clock_select = 0;
-
- /* AR10 */
- crtc.mode_control = 0;
- crtc.graphics_mode_enable = 1;
- /* AR11 */
- crtc.screen_border_color = 0;
- /* AR12 */
- crtc.enable_color_plane = 0xf;
- /* AR13 */
- crtc.horizontal_pixel_pan = 0;
-
- /* GR5 */
- crtc.mode_register = 0;
-
- /* GR6 */
- crtc.graphics_enable = 1;
- crtc.chain_odd_even = 0;
- crtc.memory_address_select = 1;
-
- /* GR7 */
- crtc.color_dont_care = 0xf;
- if (siss->cursor_base)
- {
- crtc_set_cursor_start_addr (&crtc, siss->cursor_off);
- crtc.graphics_mode_hw_cursor = 0;
- }
-
- hactive = t->horizontal;
- hblank = t->hblank;
- hbp = t->hbp;
- hfp = t->hfp;
-
- vactive = t->vertical;
- vblank = t->vblank;
- vbp = t->vbp;
- vfp = t->vfp;
-
- pixel = (hactive + hblank) * (vactive + vblank) * t->rate;
-
- switch (screen->fb[0].bitsPerPixel) {
- case 8:
- hactive /= 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
-
- crtc.color_mode_256 = 1;
- h_screen_off = hactive;
- h_adjust = 1;
-
- break;
- case 16:
- hactive /= 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
-
- h_screen_off = hactive * 2;
- h_adjust = 1;
-
- crtc.color_mode_256 = 0;
-
- if (screen->fb[0].depth == 15)
- crtc.graphics_mode_32k = 1;
- else
- crtc.graphics_mode_64k = 1;
- break;
- case 24:
- hactive /= 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
-
- h_screen_off = hactive * 3;
- h_adjust = 1;
-
- crtc.color_mode_256 = 0;
-
- /* SR6 */
- crtc.graphics_mode_true = 1;
- /* SR7 */
- crtc.direct_color_24bit = 0;
- /* SR9 */
- crtc.true_color_32bpp = 0;
- /* SRB */
- crtc.true_color_order = 1;
- break;
- case 32:
- hactive /= 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
-
- h_screen_off = hactive * 4;
- h_adjust = 1;
-
- crtc.color_mode_256 = 0;
-
- /* SR6 */
- crtc.graphics_mode_true = 1;
- /* SR7 */
- crtc.direct_color_24bit = 0;
- /* SR9 */
- crtc.true_color_32bpp = 1;
- /* SRB */
- crtc.true_color_order = 1;
- break;
- }
-
- sisGetClock (pixel, &crtc);
-
- crtc.high_speed_dac_0 = crtc.high_speed_dac_1 = pixel > 135000000;
-
- sisEngThresh (&crtc, pixel, screen->fb[0].bitsPerPixel);
-
- /*
- * Compute horizontal register values from timings
- */
- h_total = hactive + hblank - 5;
- h_display_end = hactive - 1;
- h_blank_start = h_display_end;
- h_blank_end = h_blank_start + hblank;
-
- h_sync_start = hactive + hfp + h_adjust;
- h_sync_end = h_sync_start + hblank - hbp - hfp;
-
- crtc_set_h_total(&crtc, h_total);
- crtc_set_h_display_end (&crtc, h_display_end);
- crtc_set_h_blank_start (&crtc, h_blank_start);
- crtc_set_h_blank_end (&crtc, h_blank_end);
- crtc_set_h_sync_start (&crtc, h_sync_start);
- crtc_set_h_sync_end (&crtc, h_sync_end);
- crtc_set_screen_off (&crtc, h_screen_off);
-
- v_total = vactive + vblank - 2;
- v_retrace_start = vactive + vfp - 1;
- v_retrace_end = v_retrace_start + vblank - vbp - vfp;
- v_display_end = vactive - 1;
- v_blank_start = vactive - 1;
- v_blank_end = v_blank_start + vblank /* - 1 */;
-
- crtc_set_v_total(&crtc, v_total);
- crtc_set_v_retrace_start (&crtc, v_retrace_start);
- crtc.v_retrace_end_0_3 = v_retrace_end;
- crtc_set_v_display_end (&crtc, v_display_end);
- crtc_set_v_blank_start (&crtc, v_blank_start);
- crtc.v_blank_end_0_7 = v_blank_end;
-
-#if 0
- crtc.h_blank_start_0_7 = 0x6a;
- crtc._h_blank_end = 0x9a;
- crtc.h_sync_start_0_7 = 0x6b;
- crtc._h_sync_end = 0x9a;
-
- crtc.v_retrace_start_0_7 = 0x7d;
- crtc._v_retrace_end = 0x23;
- crtc.v_blank_start_0_7 = 0x7d;
- crtc.v_blank_end_0_7 = 0x84;
-
- crtc.crt_cpu_threshold_control_0 = 0xdf; /* SR8 */
- crtc.crt_cpu_threshold_control_1 = 0x00; /* SR9 */
- crtc.extended_clock_generator = 0x40; /* SR13 */
-
- crtc.cursor_h_start_0_7 = 0x83;
- crtc.cursor_v_start_0_7 = 0x6c;
-
- crtc.internal_vclk_0 = 0x68;
- crtc.internal_vclk_1 = 0xc4;
- crtc.misc_control_7 = 0x70;
-#endif
-
- _sisSetCrtc (sisc, &crtc);
- return TRUE;
-}
-
-Bool
-sisDPMS (ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- sisCardInfo(pScreenPriv);
- union ddc_and_power_control_u _ddc_and_power_control_u;
-
- ddc_and_power_control = sisc->save.crtc.ddc_and_power_control;
-
- kbd_cursor_activate = 0;
- video_memory_activate = 0;
- vga_standby = 0;
- vga_suspend = 0;
- acpi_enable = 0;
- switch (mode) {
- case KD_DPMS_NORMAL:
- break;
- case KD_DPMS_STANDBY:
- vga_standby = 1;
- break;
- case KD_DPMS_SUSPEND:
- vga_suspend = 1;
- break;
- case KD_DPMS_POWERDOWN:
- acpi_enable = 1;
- break;
- }
- PutSrtc (sisc, 0x11, ddc_and_power_control);
- return TRUE;
-}
-
-void
-sisDisable (ScreenPtr pScreen)
-{
-}
-
-void
-sisRestore (KdCardInfo *card)
-{
- SisCardInfo *sisc = (SisCardInfo *) card->driver;
-
- memcpy (sisc->frameBuffer, sisc->save.text_save, SIS_TEXT_SAVE);
- _sisSetCrtc (sisc, &sisc->save.crtc);
- PutSrtc (sisc, 0xb, sisc->save.srb);
- PutSrtc (sisc, 0x5, sisc->save.sr5);
-}
-
-void
-sisScreenFini (KdScreenInfo *screen)
-{
- SisScreenInfo *siss = (SisScreenInfo *) screen->driver;
-
- xfree (siss);
- screen->driver = 0;
-}
-
-void
-sisCardFini (KdCardInfo *card)
-{
- SisCardInfo *sisc = (SisCardInfo *) card->driver;
-
- KdUnmapDevice (sisc->frameBuffer, sisc->memory);
- KdUnmapDevice (sisc->registers, sizeof (SisRec));
-}
-
-KdCardFuncs sisFuncs = {
- sisCardInit,
- sisScreenInit,
- 0,
- sisPreserve,
- sisEnable,
- sisDPMS,
- sisDisable,
- sisRestore,
- sisScreenFini,
- sisCardFini,
- sisCursorInit,
- sisCursorEnable,
- sisCursorDisable,
- sisCursorFini,
- 0,
- sisDrawInit,
- sisDrawEnable,
- sisDrawSync,
- sisDrawDisable,
- sisDrawFini,
- sisGetColors,
- sisPutColors,
-};
diff --git a/hw/kdrive/sis530/sis.h b/hw/kdrive/sis530/sis.h
deleted file mode 100644
index 194c33c02..000000000
--- a/hw/kdrive/sis530/sis.h
+++ /dev/null
@@ -1,1215 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _SIS_H_
-#define _SIS_H_
-#include "kdrive.h"
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/mman.h>
-#include <asm/io.h>
-#include <stdio.h>
-
-/*
- * Linear Addressing 000 0000 - 0ff ffff (16m)
- * Image data transfer 100 0000 - 100 7fff (32k)
- * Empty 100 8000 - 100 81ff
- * MMIO registers 100 8200 - 100 8480
- *
- * We don't care about the image transfer or PCI regs, so
- * this structure starts at the MMIO regs
- */
-
-typedef volatile CARD32 VOL32;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD8 VOL8;
-
-#define SIS_MMIO_OFFSET 0x8200
-
-typedef struct _sis530General {
- VOL32 src_base; /* 8200 */
- VOL16 src_pitch; /* 8204 */
- VOL16 _pad0; /* 8206 */
- VOL16 src_y; /* 8208 */
- VOL16 src_x; /* 820a */
- VOL16 dst_y; /* 820c */
- VOL16 dst_x; /* 820e */
- VOL32 dst_base; /* 8210 */
- VOL16 dst_pitch; /* 8214 */
- VOL16 dst_height; /* 8216 */
- VOL16 rect_width; /* 8218 */
- VOL16 rect_height; /* 821a */
- VOL32 pattern_fg; /* 821c */
- VOL32 pattern_bg; /* 8220 */
- VOL32 src_fg; /* 8224 */
- VOL32 src_bg; /* 8228 */
- VOL8 mask[8]; /* 822c */
- VOL16 clip_left; /* 8234 */
- VOL16 clip_top; /* 8236 */
- VOL16 clip_right; /* 8238 */
- VOL16 clip_bottom; /* 823a */
- VOL32 command; /* 823c */
- VOL32 status; /* 8240 */
- VOL8 _pad1[0xbc]; /* 8244 */
- VOL8 pattern[256]; /* 8300 */
- /* 8400 */
-} SisGeneral;
-
-typedef struct _sis530Line {
- VOL8 _pad0[8]; /* 8200 */
- VOL16 x0; /* 8208 */
- VOL16 y0; /* 820a */
- VOL16 x1; /* 820c */
- VOL16 y1; /* 820e */
- VOL32 dst_base; /* 8210 */
- VOL16 dst_pitch; /* 8214 */
- VOL16 dst_height; /* 8216 */
- VOL16 count; /* 8218 */
- VOL16 style_period; /* 821a */
- VOL32 fg; /* 821c */
- VOL32 bg; /* 8220 */
- VOL8 _pad1[8]; /* 8224 */
- VOL32 style0; /* 822c */
- VOL32 style1; /* 8228 */
- VOL16 clip_left; /* 8234 */
- VOL16 clip_top; /* 8236 */
- VOL16 clip_right; /* 8238 */
- VOL16 clip_bottom; /* 823a */
- VOL32 command; /* 823c */
- VOL32 status; /* 8240 */
- VOL8 _pad2[0xbc]; /* 8244 */
- struct {
- VOL16 x;
- VOL16 y;
- } data[96]; /* 8300 */
- /* 8480 */
-} SisLine;
-
-typedef struct _sis530Transparent {
- VOL32 src_base; /* 8200 */
- VOL16 src_pitch; /* 8204 */
- VOL16 _pad0; /* 8206 */
- VOL16 src_y; /* 8208 */
- VOL16 src_x; /* 820a */
- VOL16 dst_y; /* 820c */
- VOL16 dst_x; /* 820e */
- VOL32 dst_base; /* 8210 */
- VOL16 dst_pitch; /* 8214 */
- VOL16 dst_height; /* 8216 */
- VOL16 rect_width; /* 8218 */
- VOL16 rect_height; /* 821a */
- VOL32 dst_key_high; /* 821c */
- VOL32 dst_key_low; /* 8220 */
- VOL32 src_key_high; /* 8224 */
- VOL32 src_key_low; /* 8228 */
- VOL8 _pad1[8]; /* 822c */
- VOL16 clip_left; /* 8234 */
- VOL16 clip_top; /* 8236 */
- VOL16 clip_right; /* 8238 */
- VOL16 clip_bottom; /* 823a */
- VOL32 command; /* 823c */
- VOL32 status; /* 8240 */
- /* 8244 */
-} SisTransparent;
-
-typedef struct _sis530Multiple {
- VOL8 _pad0[8]; /* 8200 */
- VOL16 count; /* 8208 */
- VOL16 y; /* 820a */
- VOL16 x0_start; /* 820c */
- VOL16 x0_end; /* 820e */
- VOL32 dst_base; /* 8210 */
- VOL16 dst_pitch; /* 8214 */
- VOL16 dst_height; /* 8216 */
- VOL8 _pad1[4]; /* 8218 */
- VOL32 fg; /* 821c */
- VOL32 bg; /* 8220 */
- VOL8 _pad2[8]; /* 8224 */
- VOL8 mask[8]; /* 822c */
- VOL16 clip_left; /* 8234 */
- VOL16 clip_top; /* 8236 */
- VOL16 clip_right; /* 8238 */
- VOL16 clip_bottom; /* 823a */
- VOL32 command; /* 823c */
- VOL32 status; /* 8240 */
- VOL16 x1_start; /* 8244 */
- VOL16 x1_end; /* 8246 */
- VOL8 _pad3[0xb8]; /* 8248 */
- VOL8 pattern[64]; /* 8300 */
- struct {
- VOL16 x_start;
- VOL16 y_end;
- } data[80]; /* 8340 */
- /* 8480 */
-} SisMultiple;
-
-typedef struct _sis530Trapezoid {
- VOL8 _pad0[8]; /* 8200 */
- VOL16 height; /* 8208 */
- VOL16 y; /* 820a */
- VOL16 left_x; /* 820c */
- VOL16 right_x; /* 820e */
- VOL32 dst_base; /* 8210 */
- VOL16 dst_pitch; /* 8214 */
- VOL16 dst_height; /* 8216 */
- VOL8 _pad1[4]; /* 8218 */
- VOL32 fg; /* 821c */
- VOL32 bg; /* 8220 */
- VOL8 _pad2[8]; /* 8224 */
- VOL8 mask[8]; /* 822c */
- VOL16 clip_left; /* 8234 */
- VOL16 clip_top; /* 8236 */
- VOL16 clip_right; /* 8238 */
- VOL16 clip_bottom; /* 823a */
- VOL32 command; /* 823c */
- VOL32 status; /* 8240 */
- VOL16 left_dx; /* 8244 */
- VOL16 left_dy; /* 8246 */
- VOL16 right_dx; /* 8248 */
- VOL16 right_dy; /* 824a */
- VOL32 left_error; /* 824c */
- VOL32 right_error; /* 8250 */
- /* 8254 */
-} SisTrapezoid;
-
-typedef struct _sisAccel {
- VOL8 pad[0x80]; /* 8200 */
- VOL32 src_addr; /* 8280 */
- VOL32 dst_addr; /* 8284 */
- VOL32 pitch; /* 8288 */
- VOL32 dimension; /* 828c */
- VOL32 fg; /* 8290 */
- VOL32 bg; /* 8294 */
-
-
- VOL32 clip_ul; /* 82a0 */
- VOL32 clip_br; /* 82a4 */
-
- VOL16 cmd; /* 82aa */
-
- VOL8 pattern[256]; /* 82ac */
-
-} SisAccel;
-
-typedef struct _sis530 {
- union {
- SisGeneral general;
- SisLine line;
- SisTransparent transparent;
- SisMultiple multiple;
- SisTrapezoid trapezoid;
- SisAccel accel;
- } u;
-} SisRec, *SisPtr;
-
-typedef struct _sisCursor {
- int width, height;
- int xhot, yhot;
- Bool has_cursor;
- CursorPtr pCursor;
-} SisCursor;
-
-#define SIS_CURSOR_WIDTH 64
-#define SIS_CURSOR_HEIGHT 64
-
-typedef struct _sisClock {
- CARD32 vclk_numerator;
- BOOL vclk_divide_by_2;
- CARD32 vclk_denominator;
- CARD32 vclk_post_scale;
- BOOL vclk_post_scale_2;
- BOOL high_speed_dac;
-} SisClockRec, *SisClockPtr;
-
-typedef struct _crtc {
-
- union {
- struct {
- CARD8 _io_address_select : 1;
- CARD8 _display_ram_enable : 1;
- CARD8 _clock_select : 2;
- CARD8 : 1;
- CARD8 _odd_even_page : 1;
- CARD8 _h_sync_polarity : 1;
- CARD8 _v_sync_polarity : 1;
- } _misc_output_s;
- CARD8 _misc_output;
- } _misc_output_u; /* 3CC/3C2 */
-
-#define misc_output _misc_output_u._misc_output
-#define io_address_select _misc_output_u._misc_output_s._io_address_select
-#define display_ram_enable _misc_output_u._misc_output_s._display_ram_enable
-#define clock_select _misc_output_u._misc_output_s._clock_select
-#define odd_even_page _misc_output_u._misc_output_s._odd_even_page
-#define h_sync_polarity _misc_output_u._misc_output_s._h_sync_polarity
-#define v_sync_polarity _misc_output_u._misc_output_s._v_sync_polarity
-
- CARD8 h_total_0_7; /* CR0 */
- CARD8 h_display_end_0_7; /* CR1 */
- CARD8 h_blank_start_0_7; /* CR2 */
- union {
- struct {
- CARD8 _h_blank_end_0_4 : 5;
- CARD8 _display_skew : 2;
- CARD8 : 1;
- } _h_blank_end_s;
- CARD8 __h_blank_end; /* CR3 */
- } _h_blank_end_u;
-#define h_blank_end_0_4 _h_blank_end_u._h_blank_end_s._h_blank_end_0_4
-#define display_skew _h_blank_end_u._h_blank_end_s._display_skew
-#define _h_blank_end _h_blank_end_u.__h_blank_end
-
- CARD8 h_sync_start_0_7; /* CR4 */
-
- union {
- struct {
- CARD8 _h_sync_end_0_4 : 5;
- CARD8 _horizontal_skew : 2;
- CARD8 _h_blank_end_5 : 1;
- } _h_sync_end_s;
- CARD8 __h_sync_end; /* CR5 */
- } _h_sync_end_u;
-
-#define h_sync_end_0_4 _h_sync_end_u._h_sync_end_s._h_sync_end_0_4
-#define horizontal_skew _h_sync_end_u._h_sync_end_s._horizontal_skew
-#define h_blank_end_5 _h_sync_end_u._h_sync_end_s._h_blank_end_5
-#define _h_sync_end _h_sync_end_u.__h_sync_end
-
- CARD8 v_total_0_7; /* CR6 */
-
- union {
- struct {
- CARD8 _v_total_8 : 1;
- CARD8 _v_display_end_8 : 1;
- CARD8 _v_retrace_start_8 : 1;
- CARD8 _v_blank_start_8 : 1;
- CARD8 _line_compare_8 : 1;
- CARD8 _v_total_9 : 1;
- CARD8 _v_display_end_9 : 1;
- CARD8 _v_retrace_start_9 : 1;
- } _crtc_overflow_s;
- CARD8 _crtc_overflow; /* CR7 */
- } _crtc_overflow_u;
-
-#define v_total_8 _crtc_overflow_u._crtc_overflow_s._v_total_8
-#define v_display_end_8 _crtc_overflow_u._crtc_overflow_s._v_display_end_8
-#define v_retrace_start_8 _crtc_overflow_u._crtc_overflow_s._v_retrace_start_8
-#define v_blank_start_8 _crtc_overflow_u._crtc_overflow_s._v_blank_start_8
-#define line_compare_8 _crtc_overflow_u._crtc_overflow_s._line_compare_8
-#define v_total_9 _crtc_overflow_u._crtc_overflow_s._v_total_9
-#define v_display_end_9 _crtc_overflow_u._crtc_overflow_s._v_display_end_9
-#define v_retrace_start_9 _crtc_overflow_u._crtc_overflow_s._v_retrace_start_9
-#define crtc_overflow _crtc_overflow_u._crtc_overflow
-
- CARD8 preset_row_scan; /* CR8 (unused) */
-
- union {
- struct {
- CARD8 ___max_scan_line : 5;
- CARD8 _v_blank_start_9 : 1;
- CARD8 _line_compare_9 : 1;
- CARD8 _double_scan : 1;
- } _max_scan_line_s;
- CARD8 __max_scan_line; /* CR9 */
- } _max_scan_line_u;
-
-#define max_scan_line _max_scan_line_u._max_scan_line_s.___max_scan_line
-#define v_blank_start_9 _max_scan_line_u._max_scan_line_s._v_blank_start_9
-#define line_compare_9 _max_scan_line_u._max_scan_line_s._line_compare_9
-#define double_scan _max_scan_line_u._max_scan_line_s._double_scan
-#define _max_scan_line _max_scan_line_u.__max_scan_line
-
- CARD8 cursor_start; /* CRA */
- CARD8 cursor_end; /* CRB */
-
- CARD8 start_address_8_15; /* CRC */
- CARD8 start_address_0_7; /* CRD */
-
- CARD8 text_cursor_15_8; /* CRE */
- CARD8 text_cursor_7_0; /* CRF */
-
- CARD8 cursor_loc_high;
- CARD8 cursor_loc_low;
-
- CARD8 v_retrace_start_0_7; /* CR10 */
- union {
- struct {
- CARD8 _v_retrace_end_0_3 : 4;
- CARD8 _clear_v_retrace_int : 1;
- CARD8 _disable_v_retrace_int : 1;
- CARD8 _refresh_cycle_select : 1;
- CARD8 _lock_crtc : 1;
- } _v_retrace_end_s;
- CARD8 __v_retrace_end; /* CR11 */
- } _v_retrace_end_u;
-
-#define v_retrace_end_0_3 _v_retrace_end_u._v_retrace_end_s._v_retrace_end_0_3
-#define clear_v_retrace_int _v_retrace_end_u._v_retrace_end_s._clear_v_retrace_int
-#define disable_v_retrace_int _v_retrace_end_u._v_retrace_end_s._disable_v_retrace_int
-#define refresh_cycle_select _v_retrace_end_u._v_retrace_end_s._refresh_cycle_select
-#define lock_crtc _v_retrace_end_u._v_retrace_end_s._lock_crtc
-#define _v_retrace_end _v_retrace_end_u.__v_retrace_end
-
- CARD8 v_display_end_0_7; /* CR12 */
-
- CARD8 screen_off_0_7; /* CR13 */
-
- union {
- struct {
- CARD8 ___underline_location : 5;
- CARD8 _count_by_four : 1;
- CARD8 _doubleword_mode : 1;
- CARD8 : 1;
- } _underline_location_s;
- CARD8 __underline_location; /* CR14 */
- } _underline_location_u;
-
-#define underline_location _underline_location_u._underline_location_s.___underline_location
-#define count_by_four _underline_location_u._underline_location_s._count_by_four
-#define doubleword_mode _underline_location_u._underline_location_s._doubleword_mode
-#define _underline_location _underline_location_u.__underline_location
-
- CARD8 v_blank_start_0_7; /* CR15 */
- CARD8 v_blank_end_0_7; /* CR16 */
-
- union {
- struct {
- CARD8 _two_bk_cga : 1;
- CARD8 _four_bk_cga : 1;
- CARD8 _v_total_double : 1;
- CARD8 _count_by_two : 1;
- CARD8 : 1;
- CARD8 _address_wrap : 1;
- CARD8 _byte_mode : 1;
- CARD8 _hardware_reset : 1;
- } _crtc_mode_s;
- CARD8 _crtc_mode; /* CR17 */
- } _crtc_mode_u;
-
-#define crtc_mode _crtc_mode_u._crtc_mode
-#define two_bk_cga _crtc_mode_u._crtc_mode_s._two_bk_cga
-#define four_bk_cga _crtc_mode_u._crtc_mode_s._four_bk_cga
-#define v_total_double _crtc_mode_u._crtc_mode_s._v_total_double
-#define count_by_two _crtc_mode_u._crtc_mode_s._count_by_two
-#define address_wrap _crtc_mode_u._crtc_mode_s._address_wrap
-#define byte_mode _crtc_mode_u._crtc_mode_s._byte_mode
-#define hardware_reset _crtc_mode_u._crtc_mode_s._hardware_reset
-
- CARD8 line_compare_0_7; /* CR18 (unused) */
-
- union {
- struct {
- CARD8 _graphics_mode_enable : 1;
- CARD8 _attribute_byte_mda : 1;
- CARD8 _line_graphics_enable : 1;
- CARD8 _background_blink : 1;
- CARD8 : 1;
- CARD8 _pel_panning_compat : 1;
- CARD8 _pixel_clock_double : 1;
- CARD8 p4_p5_source_select : 1;
- } _mode_control_s;
- CARD8 _mode_control;
- } _mode_control_u; /* AR10 */
-
-#define mode_control _mode_control_u._mode_control
-#define graphics_mode_enable _mode_control_u._mode_control_s._graphics_mode_enable
-#define pixel_clock_double _mode_control_u._mode_control_s._pixel_clock_double
-
- CARD8 screen_border_color; /* AR11 */
- CARD8 enable_color_plane; /* AR12 */
- CARD8 horizontal_pixel_pan; /* AR13 */
-
- union {
- struct {
- CARD8 _write_mode : 2;
- CARD8 : 1;
- CARD8 _read_mode : 1;
- CARD8 _odd_even_addressing : 1;
- CARD8 _shift_register_mode : 1;
- CARD8 _color_mode_256 : 1;
- CARD8 : 1;
- } _mode_register_s;
- CARD8 _mode_register;
- } _mode_register_u; /* GR5 */
-
-#define mode_register _mode_register_u._mode_register
-#define color_mode_256 _mode_register_u._mode_register_s._color_mode_256
-#define odd_even_addressing _mode_register_u._mode_register_s._odd_even_addressing
-
- union {
- struct {
- CARD8 _graphics_enable : 1;
- CARD8 _chain_odd_even : 1;
- CARD8 _memory_address_select : 2;
- CARD8 : 4;
- } _misc_register_s;
- CARD8 _misc_register;
- } _misc_register_u; /* GR6 */
-
-#define misc_register _misc_register_u._misc_register
-#define graphics_enable _misc_register_u._misc_register_s._graphics_enable
-#define chain_odd_even _misc_register_u._misc_register_s._chain_odd_even
-#define memory_address_select _misc_register_u._misc_register_s._memory_address_select
-
- CARD8 color_dont_care; /* GR7 */
-
- union {
- struct {
- CARD8 _dot_clock_8_9 : 1;
- CARD8 : 1;
- CARD8 _shifter_load_16 : 1;
- CARD8 _dot_clock_divide_2 : 1;
- CARD8 _shifter_load_32 : 1;
- CARD8 _display_off : 1;
- CARD8 : 2;
- } _clock_mode_s;
- CARD8 _clock_mode;
- } _clock_mode_u; /* SR1 */
-
-#define clock_mode _clock_mode_u._clock_mode
-#define dot_clock_8_9 _clock_mode_u._clock_mode_s._dot_clock_8_9
-#define shifter_load_16 _clock_mode_u._clock_mode_s._shifter_load_16
-#define dot_clock_divide_2 _clock_mode_u._clock_mode_s._dot_clock_divide_2
-#define shifter_load_32 _clock_mode_u._clock_mode_s._shifter_load_32
-#define display_off _clock_mode_u._clock_mode_s._display_off
-
- CARD8 color_plane_w_enable; /* SR2 */
-
- union {
- struct {
- CARD8 : 1;
- CARD8 _extended_memory_size : 1;
- CARD8 _odd_even_disable : 1;
- CARD8 _chain_4_enable : 1;
- CARD8 : 4;
- } _memory_mode_s;
- CARD8 _memory_mode;
- } _memory_mode_u; /* SR4 */
-
-#define memory_mode _memory_mode_u._memory_mode
-#define extended_memory_sz _memory_mode_u._memory_mode_s._extended_memory_size
-#define odd_even_disable _memory_mode_u._memory_mode_s._odd_even_disable
-#define chain_4_enable _memory_mode_u._memory_mode_s._chain_4_enable
-
- union {
- struct {
- CARD8 _enhanced_text_mode : 1;
- CARD8 _enhanced_graphics_mode : 1;
- CARD8 _graphics_mode_32k : 1;
- CARD8 _graphics_mode_64k : 1;
- CARD8 _graphics_mode_true : 1;
- CARD8 _graphics_mode_interlaced: 1;
- CARD8 _graphics_mode_hw_cursor: 1;
- CARD8 _graphics_mode_linear : 1;
- } _graphics_mode_s;
- CARD8 _graphics_mode;
- } _graphics_mode_u; /* SR6 */
-
-#define graphics_mode _graphics_mode_u._graphics_mode
-#define enhanced_text_mode _graphics_mode_u._graphics_mode_s._enhanced_text_mode
-#define enhanced_graphics_mode _graphics_mode_u._graphics_mode_s._enhanced_graphics_mode
-#define graphics_mode_32k _graphics_mode_u._graphics_mode_s._graphics_mode_32k
-#define graphics_mode_64k _graphics_mode_u._graphics_mode_s._graphics_mode_64k
-#define graphics_mode_true _graphics_mode_u._graphics_mode_s._graphics_mode_true
-#define graphics_mode_interlaced _graphics_mode_u._graphics_mode_s._graphics_mode_interlaced
-#define graphics_mode_hw_cursor _graphics_mode_u._graphics_mode_s._graphics_mode_hw_cursor
-#define graphics_mode_linear _graphics_mode_u._graphics_mode_s._graphics_mode_linear
-
- union {
- struct {
- CARD8 _external_dac_reference : 1;
- CARD8 _high_speed_dac_0 : 1;
- CARD8 _direct_color_24bit : 1;
- CARD8 _multi_line_prefetch : 1;
- CARD8 _extended_video_div_2 : 1;
- CARD8 _ramdac_power_save : 1;
- CARD8 : 1;
- CARD8 _merge_video_fifo : 1;
- } _misc_control_0_s;
- CARD8 _misc_control_0;
- } _misc_control_0_u; /* SR7 */
-
-#define misc_control_0 _misc_control_0_u._misc_control_0
-#define external_dac_reference _misc_control_0_u._misc_control_0_s._external_dac_reference
-#define high_speed_dac_0 _misc_control_0_u._misc_control_0_s._high_speed_dac_0
-#define direct_color_24bit _misc_control_0_u._misc_control_0_s._direct_color_24bit
-#define multi_line_prefetch _misc_control_0_u._misc_control_0_s._multi_line_prefetch
-#define extended_video_div_2 _misc_control_0_u._misc_control_0_s._extended_video_div_2
-#define ramdac_power_save _misc_control_0_u._misc_control_0_s._ramdac_power_save
-#define merge_video_fifo _misc_control_0_u._misc_control_0_s._merge_video_fifo
-
- union {
- struct {
- CARD8 _crt_engine_threshold_high_0_3 : 4;
- CARD8 _crt_cpu_threshold_low_0_3 : 4;
- } _crt_cpu_threshold_control_0_s;
- CARD8 _crt_cpu_threshold_control_0;
- } _crt_cpu_threshold_control_0_u; /* SR8 */
-
-#define crt_cpu_threshold_control_0 _crt_cpu_threshold_control_0_u._crt_cpu_threshold_control_0
-#define crt_engine_threshold_high_0_3 _crt_cpu_threshold_control_0_u._crt_cpu_threshold_control_0_s._crt_engine_threshold_high_0_3
-#define crt_cpu_threshold_low_0_3 _crt_cpu_threshold_control_0_u._crt_cpu_threshold_control_0_s._crt_cpu_threshold_low_0_3
-
- union {
- struct {
- CARD8 _crt_cpu_threshold_high_0_3 : 4;
- CARD8 _ascii_attribute_threshold_0_2 : 3;
- CARD8 _true_color_32bpp : 1;
- } _crt_cpu_threshold_control_1_s;
- CARD8 _crt_cpu_threshold_control_1;
- } _crt_cpu_threshold_control_1_u; /* SR9 */
-
-#define crt_cpu_threshold_control_1 _crt_cpu_threshold_control_1_u._crt_cpu_threshold_control_1
-#define crt_cpu_threshold_high_0_3 _crt_cpu_threshold_control_1_u._crt_cpu_threshold_control_1_s._crt_cpu_threshold_high_0_3
-#define ascii_attribute_threshold_0_2 _crt_cpu_threshold_control_1_u._crt_cpu_threshold_control_1_s._ascii_attribute_threshold_0_2
-#define true_color_32bpp _crt_cpu_threshold_control_1_u._crt_cpu_threshold_control_1_s._true_color_32bpp
-
- union {
- struct {
- CARD8 _v_total_10 : 1;
- CARD8 _v_display_end_10 : 1;
- CARD8 _v_blank_start_10 : 1;
- CARD8 _v_retrace_start_10 : 1;
- CARD8 _screen_off_8_11 : 4;
- } _extended_crt_overflow_s;
- CARD8 _extended_crt_overflow;
- } _extended_crt_overflow_u; /* SRA */
-
-#define extended_crt_overflow _extended_crt_overflow_u._extended_crt_overflow
-#define v_total_10 _extended_crt_overflow_u._extended_crt_overflow_s._v_total_10
-#define v_display_end_10 _extended_crt_overflow_u._extended_crt_overflow_s._v_display_end_10
-#define v_blank_start_10 _extended_crt_overflow_u._extended_crt_overflow_s._v_blank_start_10
-#define v_retrace_start_10 _extended_crt_overflow_u._extended_crt_overflow_s._v_retrace_start_10
-#define screen_off_8_11 _extended_crt_overflow_u._extended_crt_overflow_s._screen_off_8_11
-
- union {
- struct {
- CARD8 _cpu_bitblt_enable : 1; /* enable CPU bitblt */
- CARD8 _packed_16_color_enable : 1; /* 2 pixels per byte? */
- CARD8 _io_gating : 1; /* when write buffer not empty */
- CARD8 _dual_segment_enable : 1; /* ? */
- CARD8 _true_color_modulation : 1; /* ? */
- CARD8 _memory_mapped_mode : 2; /* mmio enable */
- CARD8 _true_color_order : 1; /* 0: RGB 1: BGR */
- } _misc_control_1_s;
- CARD8 _misc_control_1; /* SRB */
- } _misc_control_1_u;
-
-#define misc_control_1 _misc_control_1_u._misc_control_1
-#define cpu_bitblt_enable _misc_control_1_u._misc_control_1_s._cpu_bitblt_enable
-#define memory_mapped_mode _misc_control_1_u._misc_control_1_s._memory_mapped_mode
-#define true_color_modulation _misc_control_1_u._misc_control_1_s._true_color_modulation
-#define true_color_order _misc_control_1_u._misc_control_1_s._true_color_order
-
- union {
- struct {
- CARD8 _sync_reset_enable : 1;
- CARD8 _memory_configuration : 3;
-#define SIS_MEMORY_CONFIG_1M_1BANK 0
-#define SIS_MEMORY_CONFIG_2M_2BANK 1
-#define SIS_MEMORY_CONFIG_4M_2BANK 2
-#define SIS_MEMORY_CONFIG_2M_1BANK 5
-#define SIS_MEMORY_CONFIG_4M_1BANK 6
-#define SIS_MEMORY_CONFIG_8M_2BANK 7
- CARD8 _test_mode_enable : 1;
- CARD8 _read_ahead_enable : 1;
- CARD8 _text_mode_16bit_enable : 1;
- CARD8 _graphics_mode_32bit_enable : 1;
- } _misc_control_2_s;
- CARD8 _misc_control_2;
- } _misc_control_2_u; /* SRC */
-
-#define misc_control_2 _misc_control_2_u._misc_control_2
-#define sync_reset_enable _misc_control_2_u._misc_control_2_s._sync_reset_enable
-#define memory_configuration _misc_control_2_u._misc_control_2_s._memory_configuration
-#define test_mode_enable _misc_control_2_u._misc_control_2_s._test_mode_enable
-#define read_ahead_enable _misc_control_2_u._misc_control_2_s._read_ahead_enable
-#define text_mode_16bit_enable _misc_control_2_u._misc_control_2_s._text_mode_16bit_enable
-#define graphics_mode_32bit_enable _misc_control_2_u._misc_control_2_s._graphics_mode_32bit_enable
-
- union ddc_and_power_control_u {
- struct {
- CARD8 _ddc_clk_programming : 1;
- CARD8 _ddc_data_programming : 1;
- CARD8 : 1;
- CARD8 _acpi_enable : 1;
- CARD8 _kbd_cursor_activate : 1;
- CARD8 _video_memory_activate : 1;
- CARD8 _vga_standby : 1;
- CARD8 _vga_suspend : 1;
- } _ddc_and_power_control_s;
- CARD8 _ddc_and_power_control;
- } _ddc_and_power_control_u; /* SR11 */
-
-#define ddc_and_power_control _ddc_and_power_control_u._ddc_and_power_control
-#define ddc_clk_programming _ddc_and_power_control_u._ddc_and_power_control_s._ddc_clk_programming
-#define ddc_data_programming _ddc_and_power_control_u._ddc_and_power_control_s._ddc_data_programming
-#define acpi_enable _ddc_and_power_control_u._ddc_and_power_control_s._acpi_enable
-#define kbd_cursor_activate _ddc_and_power_control_u._ddc_and_power_control_s._kbd_cursor_activate
-#define video_memory_activate _ddc_and_power_control_u._ddc_and_power_control_s._video_memory_activate
-#define vga_standby _ddc_and_power_control_u._ddc_and_power_control_s._vga_standby
-#define vga_suspend _ddc_and_power_control_u._ddc_and_power_control_s._vga_suspend
-
- union {
- struct {
- CARD8 _h_total_8 : 1;
- CARD8 _h_display_end_8 : 1;
- CARD8 _h_blank_start_8 : 1;
- CARD8 _h_sync_start_8 : 1;
- CARD8 _h_blank_end_6 : 1;
- CARD8 _h_retrace_skew : 3;
- } _extended_horizontal_overflow_s;
- CARD8 _extended_horizontal_overflow;
- } _extended_horizontal_overflow_u; /* SR12 */
-#define extended_horizontal_overflow _extended_horizontal_overflow_u._extended_horizontal_overflow
-#define h_total_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_total_8
-#define h_display_end_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_display_end_8
-#define h_blank_start_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_blank_start_8
-#define h_sync_start_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_sync_start_8
-#define h_blank_end_6 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_blank_end_6
-#define h_retrace_skew _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_retrace_skew
-
- union {
- struct {
- CARD8 : 6;
- CARD8 _vclk_post_scale_2 : 1;
- CARD8 _mclk_post_scale_2 : 1;
- } _extended_clock_generator_s;
- CARD8 _extended_clock_generator;
- } _extended_clock_generator_u; /* SR13 */
-
-#define extended_clock_generator _extended_clock_generator_u._extended_clock_generator
-#define vclk_post_scale_2 _extended_clock_generator_u._extended_clock_generator_s._vclk_post_scale_2
-#define mclk_post_scale_2 _extended_clock_generator_u._extended_clock_generator_s._mclk_post_scale_2
-
- CARD8 cursor_0_red; /* SR14 */
- CARD8 cursor_0_green; /* SR15 */
- CARD8 cursor_0_blue; /* SR16 */
-
- CARD8 cursor_1_red; /* SR17 */
- CARD8 cursor_1_green; /* SR18 */
- CARD8 cursor_1_blue; /* SR19 */
-
- CARD8 cursor_h_start_0_7; /* SR1A */
- union {
- struct {
- CARD8 _cursor_h_start_8_11 : 4;
- CARD8 : 3;
- CARD8 _cursor_mmio_enable : 1;
- } _cusor_h_start_1_s;
- CARD8 _cursor_h_start_1;
- } _cursor_h_start_1_u; /* SR1B */
-
-#define cursor_h_start_1 _cursor_h_start_1_u._cursor_h_start_1
-#define cursor_h_start_8_11 _cursor_h_start_1_u._cursor_h_start_1_s._cursor_h_start_8_11
-
- CARD8 cursor_h_preset_0_5; /* SR1C */
-
- CARD8 cursor_v_start_0_7; /* SR1D */
-
- union {
- struct {
- CARD8 _cursor_v_start_8_10 : 3;
- CARD8 _cursor_side_pattern : 1;
- CARD8 _cursor_pattern : 4;
- } _cusor_v_start_1_s;
- CARD8 _cursor_v_start_1;
- } _cursor_v_start_1_u; /* SR1E */
-
-#define cursor_v_start_1 _cursor_v_start_1_u._cursor_v_start_1
-
- CARD8 cursor_v_preset_0_5; /* SR1F */
-
- CARD8 linear_base_19_26; /* SR20 */
-
- union {
- struct {
- CARD8 _linear_base_27_31 : 5;
- CARD8 _linear_aperture : 3;
-#define SIS_LINEAR_APERTURE_512K 0
-#define SIS_LINEAR_APERTURE_1M 1
-#define SIS_LINEAR_APERTURE_2M 2
-#define SIS_LINEAR_APERTURE_4M 3
-#define SIS_LINEAR_APERTURE_8M 4
- } _linear_base_1_s;
- CARD8 _linear_base_1;
- } _linear_base_1_u; /* SR21 */
-
-#define linear_base_1 _linear_base_1_u._linear_base_1
-#define linear_base_27_31 _linear_base_1_u._linear_base_1_s._linear_base_27_31
-#define linear_aperture _linear_base_1_u._linear_base_1_s._linear_aperture
-
- union {
- struct {
- CARD8 _screen_start_addr_20 : 1;
- CARD8 : 3;
- CARD8 _continuous_mem_access : 1;
- CARD8 : 1;
- CARD8 _power_down_dac : 1;
- CARD8 : 1;
- } _graphics_engine_0_s;
- CARD8 _graphics_engine_0;
- } _graphics_engine_0_u; /* SR26 */
-
-#define graphics_engine_0 _graphics_engine_0_u._graphics_engine_0
-
-
- union {
- struct {
- CARD8 _screen_start_addr_16_19: 4;
- CARD8 _logical_screen_width : 2;
-#define SIS_LOG_SCREEN_WIDTH_1024 0
-#define SIS_LOG_SCREEN_WIDTH_2048 1
-#define SIS_LOG_SCREEN_WIDTH_4096 2
- CARD8 _graphics_prog_enable : 1;
- CARD8 _turbo_queue_enable : 1;
- } _graphics_engine_1_s;
- CARD8 _graphics_engine_1;
- } _graphics_engine_1_u; /* SR27 */
-
-#define graphics_engine_1 _graphics_engine_1_u._graphics_engine_1
-#define screen_start_addr_16_19 _graphics_engine_1_u._graphics_engine_1_s._screen_start_addr_16_19
-#define logical_screen_width _graphics_engine_1_u._graphics_engine_1_s._logical_screen_width
-#define graphics_prog_enable _graphics_engine_1_u._graphics_engine_1_s._graphics_prog_enable
-#define turbo_queue_enable _graphics_engine_1_u._graphics_engine_1_s._turbo_queue_enable
-
-
- union {
- struct {
- CARD8 _mclk_numerator : 7;
- CARD8 _mclk_divide_by_2 : 1;
- } _internal_mclk_0_s;
- CARD8 _internal_mclk_0;
- } _internal_mclk_0_u; /* SR28 */
-
-#define internal_mclk_0 _internal_mclk_0_u._internal_mclk_0
-#define mclk_numerator _internal_mclk_0_u._internal_mclk_0_s._mclk_numerator
-#define mclk_divide_by_2 _internal_mclk_0_u._internal_mclk_0_s._mclk_divide_by_2
-
- union {
- struct {
- CARD8 _mclk_denominator : 5;
- CARD8 _mclk_post_scale : 2;
-#define SIS_MCLK_POST_SCALE_1 0
-#define SIS_MCLK_POST_SCALE_2 1
-#define SIS_MCLK_POST_SCALE_3 2
-#define SIS_MCLK_POST_SCALE_4 3
- CARD8 _mclk_vco_gain : 1;
- } _internal_mclk_1_s;
- CARD8 _internal_mclk_1;
- } _internal_mclk_1_u; /* SR29 */
-
-#define internal_mclk_1 _internal_mclk_1_u._internal_mclk_1
-#define mclk_denominator _internal_mclk_1_u._internal_mclk_1_s._mclk_denominator
-#define mclk_post_scale _internal_mclk_1_u._internal_mclk_1_s._mclk_post_scale
-#define mclk_vco_gain _internal_mclk_1_u._internal_mclk_1_s._mclk_vco_gain
-
- union {
- struct {
- CARD8 _vclk_numerator : 7;
- CARD8 _vclk_divide_by_2 : 1;
- } _internal_vclk_0_s;
- CARD8 _internal_vclk_0;
- } _internal_vclk_0_u; /* SR2A */
-
-#define internal_vclk_0 _internal_vclk_0_u._internal_vclk_0
-#define vclk_numerator _internal_vclk_0_u._internal_vclk_0_s._vclk_numerator
-#define vclk_divide_by_2 _internal_vclk_0_u._internal_vclk_0_s._vclk_divide_by_2
-
- union {
- struct {
- CARD8 _vclk_denominator : 5;
- CARD8 _vclk_post_scale : 2;
-#define SIS_VCLK_POST_SCALE_1 0
-#define SIS_VCLK_POST_SCALE_2 1
-#define SIS_VCLK_POST_SCALE_3 2
-#define SIS_VCLK_POST_SCALE_4 3
- CARD8 _vclk_vco_gain : 1;
- } _internal_vclk_1_s;
- CARD8 _internal_vclk_1;
- } _internal_vclk_1_u; /* SR2B */
-
-#define internal_vclk_1 _internal_vclk_1_u._internal_vclk_1
-#define vclk_denominator _internal_vclk_1_u._internal_vclk_1_s._vclk_denominator
-#define vclk_post_scale _internal_vclk_1_u._internal_vclk_1_s._vclk_post_scale
-#define vclk_vco_gain _internal_vclk_1_u._internal_vclk_1_s._vclk_vco_gain
-
- union {
- struct {
- CARD8 _extended_clock_select : 2;
-#define SIS_CLOCK_SELECT_INTERNAL 0
-#define SIS_CLOCK_SELECT_25MHZ 1
-#define SIS_CLOCK_SELECT_28MHZ 2
- CARD8 _disable_line_compare : 1;
- CARD8 _disable_pci_read_t_o : 1;
- CARD8 _cursor_start_addr_18_21: 4;
- } _misc_control_7_s;
- CARD8 _misc_control_7;
- } _misc_control_7_u; /* SR38 */
-
-#define misc_control_7 _misc_control_7_u._misc_control_7
-#define extended_clock_select _misc_control_7_u._misc_control_7_s._extended_clock_select
-#define disable_line_compare _misc_control_7_u._misc_control_7_s._disable_line_compare
-#define disable_pci_read_t_o _misc_control_7_u._misc_control_7_s._disable_pci_read_t_o
-#define cursor_start_addr_18_21 _misc_control_7_u._misc_control_7_s._cursor_start_addr_18_21
-
- union {
- struct {
- CARD8 _high_speed_dclk : 1;
- CARD8 _sgram_block_write : 1;
- CARD8 _cursor_start_addr_22 : 1;
- CARD8 _dram_texture_read : 1;
- CARD8 _sgram_16mb : 1;
- CARD8 _agp_signal_delay : 2;
- CARD8 _dclk_off : 1;
- } _misc_control_11_s;
- CARD8 _misc_control_11;
- } _misc_control_11_u; /* SR3E */
-
-#define misc_control_11 _misc_control_11_u._misc_control_11
-#define high_speed_dclk _misc_control_11_u._misc_control_11_s._high_speed_dclk
-#define sgram_block_write _misc_control_11_u._misc_control_11_s.__sgram_block_write
-#define cursor_start_addr_22 _misc_control_11_u._misc_control_11_s._cursor_start_addr_22
-#define dram_texture_read _misc_control_11_u._misc_control_11_s._dram_texture_read
-#define sgram_16mb _misc_control_11_u._misc_control_11_s._sgram_16mb
-#define agp_signal_delay _misc_control_11_u._misc_control_11_s._agp_signal_delay
-#define dclk_off _misc_control_11_u._misc_control_11_s._dclk_off
-
- union {
- struct {
- CARD8 : 1;
- CARD8 _flat_panel_low_enable : 1;
- CARD8 _crt_cpu_threshold_low_4: 1;
- CARD8 _crt_engine_threshold_high_4: 1;
- CARD8 _crt_cpu_threshold_high_4 : 1;
- CARD8 _crt_threshold_full_control : 2;
-#define SIS_CRT_32_STAGE_THRESHOLD 0
-#define SIS_CRT_64_STAGE_THRESHOLD 1
-#define SIS_CRT_63_STAGE_THRESHOLD 2
-#define SIS_CRT_256_STAGE_THRESHOLD 3
- CARD8 _high_speed_dac_1 : 1;
- } _misc_control_12_s;
- CARD8 _misc_control_12;
- } _misc_control_12_u; /* SR3F */
-#define misc_control_12 _misc_control_12_u._misc_control_12
-#define flat_panel_low_enable _misc_control_12_u._misc_control_12_s._flat_panel_low_enable
-#define crt_cpu_threshold_low_4 _misc_control_12_u._misc_control_12_s._crt_cpu_threshold_low_4
-#define crt_engine_threshold_high_4 _misc_control_12_u._misc_control_12_s._crt_engine_threshold_high_4
-#define crt_cpu_threshold_high_4 _misc_control_12_u._misc_control_12_s._crt_cpu_threshold_high_4
-#define crt_threshold_full_control _misc_control_12_u._misc_control_12_s._crt_threshold_full_control
-#define high_speed_dac_1 _misc_control_12_u._misc_control_12_s._high_speed_dac_1
-
- /* computed values */
- CARD16 ge_screen_pitch;
- CARD8 bits_per_pixel;
- CARD8 depth;
- CARD8 double_pixel_mode;
- CARD16 pixel_width;
-} SisCrtc;
-
-#define crtc_v_total(crtc) ((crtc)->v_total_0_7 | \
- ((crtc)->v_total_8 << 8) | \
- ((crtc)->v_total_9 << 9) | \
- ((crtc)->v_total_10 << 10))
-
-#define crtc_set_v_total(crtc,v) { \
- ((crtc))->v_total_0_7 = (v); \
- ((crtc))->v_total_8 = (v) >> 8; \
- ((crtc))->v_total_9 = (v) >> 9; \
- ((crtc))->v_total_10 = (v) >> 10; \
-}
-
-#define crtc_v_display_end(crtc) ((crtc)->v_display_end_0_7 | \
- ((crtc)->v_display_end_8 << 8) | \
- ((crtc)->v_display_end_9 << 9) | \
- ((crtc)->v_display_end_10 << 10))
-
-#define crtc_set_v_display_end(crtc,v) {\
- ((crtc))->v_display_end_0_7 = (v); \
- ((crtc))->v_display_end_8 = (v) >> 8; \
- ((crtc))->v_display_end_9 = (v) >> 9; \
- ((crtc))->v_display_end_10 = (v) >> 10; \
-}
-
-#define crtc_v_retrace_start(crtc) ((crtc)->v_retrace_start_0_7 | \
- ((crtc)->v_retrace_start_8 << 8) | \
- ((crtc)->v_retrace_start_9 << 9) | \
- ((crtc)->v_retrace_start_10 << 10))
-
-#define crtc_set_v_retrace_start(crtc,v) {\
- ((crtc))->v_retrace_start_0_7 = (v); \
- ((crtc))->v_retrace_start_8 = (v) >> 8; \
- ((crtc))->v_retrace_start_9 = (v) >> 9; \
- ((crtc))->v_retrace_start_10 = (v) >> 10; \
-}
-
-#define crtc_v_blank_start(crtc) ((crtc)->v_blank_start_0_7 | \
- ((crtc)->v_blank_start_8 << 8) | \
- ((crtc)->v_blank_start_9 << 9) | \
- ((crtc)->v_blank_start_10 << 10))
-
-#define crtc_set_v_blank_start(crtc,v) {\
- ((crtc))->v_blank_start_0_7 = (v); \
- ((crtc))->v_blank_start_8 = (v) >> 8; \
- ((crtc))->v_blank_start_9 = (v) >> 9; \
- ((crtc))->v_blank_start_10 = (v) >> 10; \
-}
-
-#define crtc_h_total(crtc) ((crtc)->h_total_0_7 | \
- ((crtc)->h_total_8 << 8))
-
-#define crtc_set_h_total(crtc,v) {\
- ((crtc))->h_total_0_7 = (v); \
- ((crtc))->h_total_8 = (v) >> 8; \
-}
-
-#define crtc_h_display_end(crtc) ((crtc)->h_display_end_0_7 | \
- ((crtc)->h_display_end_8 << 8))
-
-#define crtc_set_h_display_end(crtc,v) {\
- ((crtc))->h_display_end_0_7 = (v); \
- ((crtc))->h_display_end_8 = (v) >> 8; \
-}
-
-#define crtc_h_blank_start(crtc) ((crtc)->h_blank_start_0_7 | \
- ((crtc)->h_blank_start_8 << 8))
-
-#define crtc_set_h_blank_start(crtc,v) {\
- ((crtc))->h_blank_start_0_7 = (v); \
- ((crtc))->h_blank_start_8 = (v) >> 8; \
-}
-
-#define crtc_h_blank_end(crtc) ((crtc)->h_blank_end_0_4 | \
- ((crtc)->h_blank_end_5 << 5))
-
-#define crtc_set_h_blank_end(crtc,v) {\
- ((crtc))->h_blank_end_0_4 = (v); \
- ((crtc))->h_blank_end_5 = (v) >> 5; \
-}
-
-#define crtc_h_sync_start(crtc) ((crtc)->h_sync_start_0_7 | \
- ((crtc)->h_sync_start_8 << 8))
-
-#define crtc_set_h_sync_start(crtc,v) {\
- ((crtc))->h_sync_start_0_7 = (v); \
- ((crtc))->h_sync_start_8 = (v) >> 8; \
-}
-
-#define crtc_h_sync_end(crtc) ((crtc)->h_sync_end_0_4)
-
-#define crtc_set_h_sync_end(crtc,v) {\
- ((crtc))->h_sync_end_0_4 = (v); \
-}
-
-#define crtc_screen_off(crtc) ((crtc)->screen_off_0_7 | \
- ((crtc)->screen_off_8_11 << 8))
-
-#define crtc_set_screen_off(crtc,v) {\
- ((crtc))->screen_off_0_7 = (v); \
- ((crtc))->screen_off_8_11 = (v) >> 8; \
-}
-
-#define crtc_ge_screen_width(crtc) ((crtc)->ge_screen_width_0_1 | \
- ((crtc)->ge_screen_width_2 << 2))
-
-#define crtc_set_ge_screen_width(crtc,v) { \
- (crtc)->ge_screen_width_0_1 = (v); \
- (crtc)->ge_screen_width_2 = (v) >> 2; \
-}
-
-#define crtc_h_start_fifo_fetch(crtc) ((crtc)->h_start_fifo_fetch_0_7 | \
- ((crtc)->h_start_fifo_fetch_8 << 8))
-
-#define crtc_set_h_start_fifo_fetch(crtc,v) {\
- (crtc)->h_start_fifo_fetch_0_7 = (v); \
- (crtc)->h_start_fifo_fetch_8 = (v) >> 8; \
-}
-
-#define crtc_start_address(crtc) ((crtc)->start_address_0_7 | \
- ((crtc)->start_address_8_15 << 8) | \
- ((crtc)->start_address_16_19 << 16))
-
-#define crtc_set_start_address(crtc,v) {\
- (crtc)->start_address_0_7 = (v); \
- (crtc)->start_address_8_15 = (v) >> 8; \
- (crtc)->start_address_16_19 = (v) >> 16; \
-}
-
-#define crtc_line_compare(crtc) ((crtc)->line_compare_0_7 | \
- ((crtc)->line_compare_8 << 8) | \
- ((crtc)->line_compare_9 << 9) | \
- ((crtc)->line_compare_10 << 10))
-
-#define crtc_set_line_compare(crtc,v) { \
- ((crtc))->line_compare_0_7 = (v); \
- ((crtc))->line_compare_8 = (v) >> 8; \
- ((crtc))->line_compare_9 = (v) >> 9; \
- ((crtc))->line_compare_10 = (v) >> 10; \
-}
-
-#define crtc_set_cursor_start_addr(crtc,v) { \
- (crtc)->cursor_start_addr_18_21 = (v) >> 18; \
- (crtc)->cursor_start_addr_22 = (v) >> 22; \
-}
-
-#define _sisOutb(v,r) outb(v,r)
-#define _sisInb(r) inb(r)
-
-#define SIS_DAC_INDEX_READ 0x47
-#define SIS_DAC_INDEX_WRITE 0x48
-#define SIS_DAC_DATA 0x49
-
-#define GetCrtc(sisc,i) _sisReadIndexRegister ((sisc)->io_base+0x54,i)
-#define PutCrtc(sisc,i,v) _sisWriteIndexRegister ((sisc)->io_base+0x54,i,v)
-
-#define GetSrtc(sisc,i) _sisReadIndexRegister ((sisc)->io_base+0x44,i)
-#define PutSrtc(sisc,i,v) _sisWriteIndexRegister ((sisc)->io_base+0x44,i,v)
-
-#define GetArtc(sisc,i) _sisReadArtc ((sisc)->io_base+0x40,i)
-#define PutArtc(sisc,i,v) _sisWriteArtc ((sisc)->io_base+0x40,i,v)
-
-#define GetGrtc(sisc,i) _sisReadIndexRegister ((sisc)->io_base+0x4e,i)
-#define PutGrtc(sisc,i,v) _sisWriteIndexRegister ((sisc)->io_base+0x4e,i,v)
-
-#define _sisWaitVRetrace(sisc)
-
-#define LockSis(sisc)
-#define UnlockSis(sisc)
-
-typedef struct _sisTiming {
- /* label */
- int horizontal;
- int vertical;
- int rate;
- /* horizontal timing */
- int hfp; /* front porch */
- int hbp; /* back porch */
- int hblank; /* blanking */
- /* vertical timing */
- int vfp; /* front porch */
- int vbp; /* back porch */
- int vblank; /* blanking */
-} SisTiming;
-
-#define SIS_TEXT_SAVE (64*1024)
-
-typedef struct _sisSave {
- CARD8 srb;
- CARD8 sr5;
- SisCrtc crtc;
- CARD8 text_save[SIS_TEXT_SAVE];
-} SisSave;
-
-typedef struct _sisCardInfo {
- SisPtr sis;
- int memory;
- CARD8 *frameBuffer;
- CARD8 *registers;
- VOL32 *cpu_bitblt;
- CARD32 io_base;
- SisSave save;
-} SisCardInfo;
-
-typedef struct _sisScreenInfo {
- CARD8 *cursor_base;
- CARD32 cursor_off;
- CARD8 *expand;
- CARD32 expand_off;
- int expand_len;
- SisCursor cursor;
-} SisScreenInfo;
-
-#define getSisCardInfo(kd) ((SisCardInfo *) ((kd)->card->driver))
-#define sisCardInfo(kd) SisCardInfo *sisc = getSisCardInfo(kd)
-
-#define getSisScreenInfo(kd) ((SisScreenInfo *) ((kd)->screen->driver))
-#define sisScreenInfo(kd) SisScreenInfo *siss = getSisScreenInfo(kd)
-
-Bool sisCardInit (KdCardInfo *);
-Bool sisScreenInit (KdScreenInfo *);
-Bool sisEnable (ScreenPtr pScreen);
-void sisDisable (ScreenPtr pScreen);
-void sisFini (ScreenPtr pScreen);
-
-Bool sisCursorInit (ScreenPtr pScreen);
-void sisCursorEnable (ScreenPtr pScreen);
-void sisCursorDisable (ScreenPtr pScreen);
-void sisCursorFini (ScreenPtr pScreen);
-void sisRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdefs);
-
-Bool sisDrawInit (ScreenPtr pScreen);
-void sisDrawEnable (ScreenPtr pScreen);
-void sisDrawSync (ScreenPtr pScreen);
-void sisDrawDisable (ScreenPtr pScreen);
-void sisDrawFini (ScreenPtr pScreen);
-
-void sisGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs);
-void sisPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs);
-
-void SISInitCard (KdCardAttr *attr);
-
-CARD8 _sisReadIndexRegister (CARD32 base, CARD8 index);
-void _sisWriteIndexRegister (CARD32 base, CARD8 index, CARD8 value);
-CARD8 _sisReadArtc (CARD32 base, CARD8 index);
-void _sisWriteArtc (CARD32 base, CARD8 index, CARD8 value);
-
-extern KdCardFuncs sisFuncs;
-
-/*
- * sisclock.c
- */
-void
-sisGetClock (unsigned long clock, SisCrtc *crtc);
-
-void
-sisEngThresh (SisCrtc *crtc, unsigned long vclk, int bpp);
-
-/*
- * siscurs.c
- */
-
-Bool
-sisCursorInit (ScreenPtr pScreen);
-
-void
-sisCursorEnable (ScreenPtr pScreen);
-
-void
-sisCursorDisable (ScreenPtr pScreen);
-
-void
-sisCursorFini (ScreenPtr pScreen);
-
-/* sisdraw.c */
-Bool
-sisDrawInit (ScreenPtr pScreen);
-
-void
-sisDrawEnable (ScreenPtr pScreen);
-
-void
-sisDrawDisable (ScreenPtr pScreen);
-
-void
-sisDrawFini (ScreenPtr pScreen);
-
-#endif /* _SIS_H_ */
diff --git a/hw/kdrive/sis530/sisclock.c b/hw/kdrive/sis530/sisclock.c
deleted file mode 100644
index f73cdac9d..000000000
--- a/hw/kdrive/sis530/sisclock.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "sis.h"
-#include <stdio.h>
-
-#define FREF 14318180
-#define MIN_VCO FREF
-#define MAX_VCO 230000000
-#define MAX_PSN 0 /* no pre scaler for this chip */
-#define TOLERANCE 0.01 /* search smallest M and N in this tolerance */
-#define max_VLD 1
-
-/*
- * Compute clock values given target frequency
- */
-void
-sisGetClock (unsigned long clock, SisCrtc *crtc)
-{
- unsigned char reg7, reg13, reg2a, reg2b;
- int M, N, P, VLD;
-
- int bestM, bestN, bestP, bestPSN, bestVLD;
- double bestError, abest = 42.0, bestFout;
-
- double Fvco, Fout;
- double error, aerror;
-
- double target = (double) clock;
-
- int M_min = 2;
- int M_max = 128;
-
- int low_N = 2;
- int high_N = 32;
- int PSN = 1;
-
- /*
- * fd = fref*(Numerator/Denumerator)*(Divider/PostScaler)
- *
- * M = Numerator [1:128]
- * N = DeNumerator [1:32]
- * VLD = Divider (Vco Loop Divider) : divide by 1, 2
- * P = Post Scaler : divide by 1, 2, 3, 4
- * PSN = Pre Scaler (Reference Divisor Select)
- *
- * result in vclk[]
- */
-
- P = 1;
- if (target < MAX_VCO / 2)
- P = 2;
- if (target < MAX_VCO / 3)
- P = 3;
- if (target < MAX_VCO / 4)
- P = 4;
- if (target < MAX_VCO / 6)
- P = 6;
- if (target < MAX_VCO / 8)
- P = 8;
-
- Fvco = P * target;
-
- for (N = low_N; N <= high_N; N++)
- {
- double M_desired = Fvco / FREF * N;
-
- if (M_desired > M_max * max_VLD)
- continue;
-
- if ( M_desired > M_max )
- {
- M = (int)(M_desired / 2 + 0.5);
- VLD = 2;
- }
- else
- {
- M = (int)(M_desired + 0.5);
- VLD = 1;
- }
-
- Fout = (double)FREF * (M * VLD)/(N * P);
- error = (target - Fout) / target;
- aerror = (error < 0) ? -error : error;
- if (aerror < abest)
- {
- abest = aerror;
- bestError = error;
- bestM = M;
- bestN = N;
- bestP = P;
- bestPSN = PSN;
- bestVLD = VLD;
- bestFout = Fout;
- }
- }
-
- crtc->vclk_numerator = bestM - 1;
- crtc->vclk_divide_by_2 = bestVLD == 2;
-
- crtc->vclk_denominator = bestN - 1;
- switch (bestP) {
- case 1:
- crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_1;
- crtc->vclk_post_scale_2 = 0;
- break;
- case 2:
- crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_2;
- crtc->vclk_post_scale_2 = 0;
- break;
- case 3:
- crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_3;
- crtc->vclk_post_scale_2 = 0;
- break;
- case 4:
- crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_4;
- crtc->vclk_post_scale_2 = 0;
- break;
- case 6:
- crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_3;
- crtc->vclk_post_scale_2 = 1;
- break;
- case 8:
- crtc->vclk_post_scale = SIS_VCLK_POST_SCALE_4;
- crtc->vclk_post_scale_2 = 1;
- break;
- }
-
- crtc->vclk_vco_gain = 1;
-
- /*
- * Don't know how to set mclk for local frame buffer; for
- * shared frame buffer, mclk is hardwired to bus speed (100MHz)?
- */
-}
-
-sisCalcMclk (SisCrtc *crtc)
-{
- int mclk, Numer, DeNumer;
- double Divider, Scalar;
-
- Numer = crtc->mclk_numerator;
- DeNumer = crtc->mclk_denominator;
- Divider = crtc->mclk_divide_by_2 ? 2.0 : 1.0;
- Scalar = 1.0;
- if (crtc->mclk_post_scale_2)
- {
- switch (crtc->mclk_post_scale) {
- case 2:
- Scalar = 6.0;
- break;
- case 3:
- Scalar = 8.0;
- break;
- }
- }
- else
- {
- switch (crtc->mclk_post_scale) {
- case 0:
- Scalar = 1.0;
- break;
- case 1:
- Scalar = 2.0;
- break;
- case 2:
- Scalar = 3.0;
- break;
- case 3:
- Scalar = 4.0;
- break;
- }
- }
-
- mclk = (int)(FREF*((double)(Numer+1)/(double)(DeNumer+1))*(Divider/Scalar));
-
- return(mclk);
-}
-
-#define UMA_FACTOR 60
-#define LFB_FACTOR 30 // Only if local frame buffer
-#define SIS_SAYS_SO 0x1F // But how is the performance??
-#define CRT_ENG_THRESH 0x0F // But how is the performance??
-#define BUS_WIDTH 64
-#define DFP_BUS_WIDTH 32 // rumour has it for digital flat panel ??
-#define MEGAHZ (1<<20)
-
-void
-sisEngThresh (SisCrtc *crtc, unsigned long vclk, int bpp)
-{
- int threshlow, mclk;
-
- mclk = sisCalcMclk(crtc) / 1000000;
- vclk = vclk / 1000000;
- threshlow = ((((UMA_FACTOR*vclk*bpp)/
- (mclk*BUS_WIDTH))+1)/2)+4;
-
- crtc->crt_cpu_threshold_low_0_3 = threshlow;
- crtc->crt_cpu_threshold_low_4 = threshlow >> 4;
-
- crtc->crt_cpu_threshold_high_0_3 = (SIS_SAYS_SO & 0xf);
- crtc->crt_cpu_threshold_high_4 = 0;
-
- crtc->crt_engine_threshold_high_0_3 = CRT_ENG_THRESH;
- crtc->crt_engine_threshold_high_4 = 1;
-
- crtc->ascii_attribute_threshold_0_2 = (SIS_SAYS_SO >> 4);
-
- crtc->crt_threshold_full_control = SIS_CRT_64_STAGE_THRESHOLD;
-}
diff --git a/hw/kdrive/sis530/siscmap.c b/hw/kdrive/sis530/siscmap.c
deleted file mode 100644
index 2a28420c8..000000000
--- a/hw/kdrive/sis530/siscmap.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "sis.h"
-
-void
-sisGetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- sisCardInfo(pScreenPriv);
-
- LockSis (sisc);
- while (ndef--)
- {
- _sisOutb (pdefs->pixel, sisc->io_base+SIS_DAC_INDEX_READ);
- pdefs->red = _sisInb (sisc->io_base+SIS_DAC_DATA) << 10;
- pdefs->green = _sisInb (sisc->io_base+SIS_DAC_DATA) << 10;
- pdefs->blue = _sisInb (sisc->io_base+SIS_DAC_DATA) << 10;
- pdefs++;
- }
- UnlockSis (sisc);
-}
-
-void
-sisPutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- sisCardInfo(pScreenPriv);
-
- LockSis(sisc);
- _sisWaitVRetrace (sisc);
- while (ndef--)
- {
- _sisOutb (pdefs->pixel, sisc->io_base+SIS_DAC_INDEX_WRITE);
- _sisOutb (pdefs->red >> 10, sisc->io_base+SIS_DAC_DATA);
- _sisOutb (pdefs->green >> 10, sisc->io_base+SIS_DAC_DATA);
- _sisOutb (pdefs->blue >> 10, sisc->io_base+SIS_DAC_DATA);
- pdefs++;
- }
- UnlockSis(sisc);
-}
-
diff --git a/hw/kdrive/sis530/siscurs.c b/hw/kdrive/sis530/siscurs.c
deleted file mode 100644
index dad44471c..000000000
--- a/hw/kdrive/sis530/siscurs.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "sis.h"
-#include "cursorstr.h"
-
-#define SetupCursor(s) KdScreenPriv(s); \
- sisCardInfo(pScreenPriv); \
- sisScreenInfo(pScreenPriv); \
- SisPtr sis = sisc->sis; \
- SisCursor *pCurPriv = &siss->cursor
-
-static void
-_sisMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CARD8 xlow, xhigh, ylow, yhigh;
- CARD8 xoff, yoff;
-
- x -= pCurPriv->xhot;
- xoff = 0;
- if (x < 0)
- {
- xoff = -x;
- x = 0;
- }
- y -= pCurPriv->yhot;
- yoff = 0;
- if (y < 0)
- {
- yoff = -y;
- y = 0;
- }
- xlow = (CARD8) x;
- xhigh = (CARD8) (x >> 8);
- ylow = (CARD8) y;
- yhigh = (CARD8) (y >> 8);
-
- PutSrtc (sisc, 0x5, 0x86);
- PutSrtc (sisc, 0x1c, xoff & 0x3f);
- PutSrtc (sisc, 0x1f, yoff & 0x3f);
-
- PutSrtc (sisc, 0x1a, xlow);
- PutSrtc (sisc, 0x1b, xhigh & 0xf);
-
- PutSrtc (sisc, 0x1d, ylow);
- PutSrtc (sisc, 0x1e, yhigh & 0x7);
-}
-
-static void
-sisMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor (pScreen);
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- LockSis(sisc);
- _sisMoveCursor (pScreen, x, y);
- UnlockSis(sisc);
-}
-
-static void
-_sisSetCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- /* set foreground */
- PutSrtc (sisc, 0x17, pCursor->foreRed >> 10);
- PutSrtc (sisc, 0x18, pCursor->foreGreen >> 10);
- PutSrtc (sisc, 0x19, pCursor->foreBlue >> 10);
-
- /* set background */
- PutSrtc (sisc, 0x14, pCursor->backRed >> 10);
- PutSrtc (sisc, 0x15, pCursor->backGreen >> 10);
- PutSrtc (sisc, 0x16, pCursor->backBlue >> 10);
-}
-
-static void
-sisLoadCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- int w, h;
- unsigned short *ram, r;
- unsigned char *msk, *mskLine, *src, *srcLine;
- unsigned short m, s;
-
- int i, j;
- int cursor_address;
- int src_stride, src_width;
-
- CARD8 sr6;
-
- /*
- * Lock Sis so the cursor doesn't move while we're setting it
- */
- LockSis(sisc);
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- /*
- * Stick new image into cursor memory
- */
- ram = (unsigned short *) siss->cursor_base;
- mskLine = (unsigned char *) bits->mask;
- srcLine = (unsigned char *) bits->source;
-
- h = bits->height;
- if (h > SIS_CURSOR_HEIGHT)
- h = SIS_CURSOR_HEIGHT;
-
- src_stride = BitmapBytePad(bits->width); /* bytes per line */
- src_width = (bits->width + 7) >> 3;
-
- for (i = 0; i < SIS_CURSOR_HEIGHT; i++) {
- msk = mskLine;
- src = srcLine;
- mskLine += src_stride;
- srcLine += src_stride;
- for (j = 0; j < SIS_CURSOR_WIDTH / 8; j++) {
-
- unsigned short m, s;
-
- if (i < h && j < src_width)
- {
- m = *msk++;
- s = *src++ & m;
- m = ~m;
- /* mask off right side */
- if (j == src_width - 1 && (bits->width & 7))
- {
- m |= 0xff << (bits->width & 7);
- }
- }
- else
- {
- m = 0xff;
- s = 0x00;
- }
-
- /*
- * The SIS530 HW cursor format is: source(AND) bit,
- * then a mask(XOR) bit, etc.
- * byte swapping in sis530 is:
- * abcd ==> cdab
- */
-
-#define bit(a,n) (((a) >> (n)) & 0x1)
-
- r = ((bit(m, 0) << 7) | (bit(s, 0) << 6) |
- (bit(m, 1) << 5) | (bit(s, 1) << 4) |
- (bit(m, 2) << 3) | (bit(s, 2) << 2) |
- (bit(m, 3) << 1) | (bit(s, 3) << 0) |
- (bit(m, 4) << 15) | (bit(s, 4) << 14) |
- (bit(m, 5) << 13) | (bit(s, 5) << 12) |
- (bit(m, 6) << 11) | (bit(s, 6) << 10) |
- (bit(m, 7) << 9) | (bit(s, 7) << 8));
-
- *ram++ = r;
- }
- }
-
- /* Set new color */
- _sisSetCursorColors (pScreen);
-
- /* Move to new position */
- _sisMoveCursor (pScreen, x, y);
-
- /* Enable cursor */
- sr6 = GetSrtc (sisc, 0x6);
- sr6 |= 0x40;
- PutSrtc (sisc, 0x6, sr6);
-
- UnlockSis(sisc);
-}
-
-static void
-sisUnloadCursor (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CARD8 sr6;
-
- LockSis (sisc);
-
- /* Disable cursor */
- sr6 = GetSrtc (sisc, 0x6);
- sr6 &= ~0x40;
- PutSrtc (sisc, 0x6, sr6);
- PutSrtc (sisc, 0x1b, 0x00);
-
- UnlockSis (sisc);
-}
-
-static Bool
-sisRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- SetupCursor(pScreen);
-
- if (!pScreenPriv->enabled)
- return TRUE;
-
- /* miRecolorCursor does this */
- if (pCurPriv->pCursor == pCursor)
- {
- if (pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- sisLoadCursor (pScreen, x, y);
- }
- }
- return TRUE;
-}
-
-static Bool
-sisUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- return TRUE;
-}
-
-static void
-sisSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
-{
- SetupCursor(pScreen);
-
- pCurPriv->pCursor = pCursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCursor)
- sisLoadCursor (pScreen, x, y);
- else
- sisUnloadCursor (pScreen);
-}
-
-miPointerSpriteFuncRec sisPointerSpriteFuncs = {
- sisRealizeCursor,
- sisUnrealizeCursor,
- sisSetCursor,
- sisMoveCursor,
-};
-
-static void
-sisQueryBestSize (int class,
- unsigned short *pwidth, unsigned short *pheight,
- ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- switch (class)
- {
- case CursorShape:
- if (*pwidth > pCurPriv->width)
- *pwidth = pCurPriv->width;
- if (*pheight > pCurPriv->height)
- *pheight = pCurPriv->height;
- if (*pwidth > pScreen->width)
- *pwidth = pScreen->width;
- if (*pheight > pScreen->height)
- *pheight = pScreen->height;
- break;
- default:
- fbQueryBestSize (class, pwidth, pheight, pScreen);
- break;
- }
-}
-
-Bool
-sisCursorInit (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!siss->cursor_base)
- {
- pCurPriv->has_cursor = FALSE;
- return FALSE;
- }
-
- pCurPriv->width = SIS_CURSOR_WIDTH;
- pCurPriv->height= SIS_CURSOR_HEIGHT;
- pScreen->QueryBestSize = sisQueryBestSize;
- miPointerInitialize (pScreen,
- &sisPointerSpriteFuncs,
- &kdPointerScreenFuncs,
- FALSE);
- pCurPriv->has_cursor = TRUE;
- pCurPriv->pCursor = NULL;
- return TRUE;
-}
-
-void
-sisCursorEnable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- sisLoadCursor (pScreen, x, y);
- }
- else
- sisUnloadCursor (pScreen);
- }
-}
-
-void
-sisCursorDisable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- sisUnloadCursor (pScreen);
- }
- }
-}
-
-void
-sisCursorFini (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- pCurPriv->pCursor = NULL;
-}
diff --git a/hw/kdrive/sis530/sisdraw.c b/hw/kdrive/sis530/sisdraw.c
deleted file mode 100644
index 595544348..000000000
--- a/hw/kdrive/sis530/sisdraw.c
+++ /dev/null
@@ -1,1649 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "sis.h"
-#include "sisdraw.h"
-
-#include "Xmd.h"
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "fontstruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-
-CARD8 sisPatRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0xa0, /* src AND dst */
- /* GXandReverse */ 0x50, /* src AND NOT dst */
- /* GXcopy */ 0xf0, /* src */
- /* GXandInverted*/ 0x0a, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x5a, /* src XOR dst */
- /* GXor */ 0xfa, /* src OR dst */
- /* GXnor */ 0x05, /* NOT src AND NOT dst */
- /* GXequiv */ 0xa5, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xf5, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x0f, /* NOT src */
- /* GXorInverted */ 0xaf, /* NOT src OR dst */
- /* GXnand */ 0x5f, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-CARD8 sisBltRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0x88, /* src AND dst */
- /* GXandReverse */ 0x44, /* src AND NOT dst */
- /* GXcopy */ 0xcc, /* src */
- /* GXandInverted*/ 0x22, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x66, /* src XOR dst */
- /* GXor */ 0xee, /* src OR dst */
- /* GXnor */ 0x11, /* NOT src AND NOT dst */
- /* GXequiv */ 0x99, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xdd, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x33, /* NOT src */
- /* GXorInverted */ 0xbb, /* NOT src OR dst */
- /* GXnand */ 0x77, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-/* Align blts to this boundary or risk trashing an in-progress expand */
-#define SIS_MIN_PATTERN 8
-
-/* Do plane bits in this increment to balance CPU and graphics engine */
-#define SIS_PATTERN_INC 1024
-
-typedef struct _SisExpand {
- SisCardInfo *sisc;
- SisScreenInfo *siss;
- CARD32 off;
- int last;
-} SisExpand;
-
-static void
-sisExpandInit (ScreenPtr pScreen,
- SisExpand *e)
-{
- KdScreenPriv(pScreen);
- sisCardInfo(pScreenPriv);
- sisScreenInfo(pScreenPriv);
-
- e->sisc = sisc;
- e->siss = siss;
- e->off = siss->expand_off;
- e->last = 0;
-}
-
-static CARD32 *
-sisExpandAlloc (SisExpand *e,
- int nb)
-{
- SisCardInfo *sisc = e->sisc;
- SisScreenInfo *siss = e->siss;
- SisPtr sis = sisc->sis;
- CARD32 off;
-
- /* round up to alignment boundary */
- nb = (nb + SIS_MIN_PATTERN-1) & ~(SIS_MIN_PATTERN-1);
-
- off = e->off + e->last;
- if (off + nb > siss->expand_off + siss->expand_len)
- {
- _sisWaitIdleEmpty (sis);
- off = siss->expand_off;
- }
- e->off = off;
- e->last = nb;
- return (CARD32 *) (sisc->frameBuffer + off);
-}
-
-void
-sisGlyphBltClipped (DrawablePtr pDrawable,
- GCPtr pGC,
- int x,
- int y,
- unsigned int nglyph,
- CharInfoPtr *ppciInit,
- Bool imageBlt)
-{
- SetupSis(pDrawable->pScreen);
- FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC);
- int height;
- int width;
- int xBack, yBack;
- int hBack, wBack;
- int nb, bwidth, nl;
- FontPtr pfont = pGC->font;
- CharInfoPtr pci;
- CARD8 *bits8, b;
- CARD16 *bits16;
- CARD32 *bits32;
- BoxPtr extents;
- BoxRec bbox;
- unsigned char alu;
- CARD32 cmd;
- SisExpand expand;
- CARD32 *dst, d;
- int nbytes;
- int shift;
- int x1, y1, x2, y2;
- RegionPtr pClip = fbGetCompositeClip(pGC);
- BoxPtr pBox;
- int nbox;
- int rect_in;
- int widthBlt;
- CharInfoPtr *ppci;
-
- x += pDrawable->x;
- y += pDrawable->y;
-
- if (imageBlt)
- {
- xBack = x;
- yBack = y - FONTASCENT(pGC->font);
- wBack = 0;
- hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font);
- if (hBack)
- {
- height = nglyph;
- ppci = ppciInit;
- while (height--)
- wBack += (*ppci++)->metrics.characterWidth;
- }
- if (wBack < 0)
- {
- xBack = xBack + wBack;
- wBack = -wBack;
- }
- if (hBack < 0)
- {
- yBack = yBack + hBack;
- hBack = -hBack;
- }
- alu = GXcopy;
- }
- else
- {
- wBack = 0;
- alu = pGC->alu;
- }
-
- if (wBack)
- {
- _sisSetSolidRect (sis, pGC->bgPixel, GXcopy, cmd);
- for (nbox = REGION_NUM_RECTS (pClip),
- pBox = REGION_RECTS (pClip);
- nbox--;
- pBox++)
- {
- x1 = xBack;
- x2 = xBack + wBack;
- y1 = yBack;
- y2 = yBack + hBack;
- if (x1 < pBox->x1) x1 = pBox->x1;
- if (x2 > pBox->x2) x2 = pBox->x2;
- if (y1 < pBox->y1) y1 = pBox->y1;
- if (y2 > pBox->y2) y2 = pBox->y2;
- if (x1 < x2 && y1 < y2)
- {
- _sisRect (sis, x1, y1, x2 - x1, y2 - y1, cmd);
- }
- }
- }
-
- sisExpandInit (pDrawable->pScreen, &expand);
-
- sis->u.general.src_fg = pGC->fgPixel;
- sis->u.general.src_pitch = 0;
- sis->u.general.src_x = 0;
- sis->u.general.src_y = 0;
-
- cmd = (SIS_CMD_ENH_COLOR_EXPAND |
- SIS_CMD_SRC_SCREEN |
- SIS_CMD_PAT_FG |
- (sisBltRop[alu] << 8) |
- SIS_CMD_INC_X |
- SIS_CMD_INC_Y |
- SIS_CMD_RECT_CLIP_ENABLE |
- SIS_CMD_TRANSPARENT);
-
- ppci = ppciInit;
- while (nglyph--)
- {
- pci = *ppci++;
- height = pci->metrics.ascent + pci->metrics.descent;
- width = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
- widthBlt = (width + 31) & ~31;
- nb = (widthBlt >> 3) * height;
- if (nb)
- {
- x1 = x + pci->metrics.leftSideBearing;
- y1 = y - pci->metrics.ascent;
- bbox.x1 = x1;
- bbox.y1 = y1;
- bbox.x2 = x1 + width;
- bbox.y2 = y1 + height;
- rect_in = RECT_IN_REGION(pGC->pScreen, pClip, &bbox);
- if (rect_in != rgnOUT)
- {
- dst = sisExpandAlloc (&expand, nb);
-
- sis->u.general.src_base = expand.off;
- sis->u.general.dst_x = x1;
- sis->u.general.dst_y = y1;
- sis->u.general.rect_width = widthBlt;
- sis->u.general.rect_height = height;
- nb >>= 2;
- bits32 = (CARD32 *) pci->bits;
- while (nb--)
- {
- d = *bits32++;
- SisInvertBits32 (d);
- *dst++ = d;
- }
- if (rect_in == rgnPART)
- {
- for (nbox = REGION_NUM_RECTS (pClip),
- pBox = REGION_RECTS (pClip);
- nbox--;
- pBox++)
- {
- _sisClip (sis, pBox->x1, pBox->y1, pBox->x2, pBox->y2);
- sis->u.general.command = cmd;
- }
- }
- else
- {
- _sisClip (sis, 0, 0, x1+width, pScreenPriv->screen->height);
- sis->u.general.command = cmd;
- }
- }
- }
- x += pci->metrics.characterWidth;
- }
- _sisClip (sis, 0, 0,
- pScreenPriv->screen->width, pScreenPriv->screen->height);
- KdMarkSync (pDrawable->pScreen);
-}
-
-Bool
-sisTEGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int xInit,
- int yInit,
- unsigned int nglyph,
- CharInfoPtr *ppci,
- Bool imageBlt)
-{
- SetupSis(pDrawable->pScreen);
- int x, y;
- int widthGlyphs, widthGlyph;
- int widthBlt;
- FbBits depthMask;
- int glyphsPer;
- FontPtr pfont = pGC->font;
- unsigned long *char1, *char2, *char3, *char4, *char5;
- CARD8 alu;
- CARD32 *dst, tmp;
- CARD8 *dst8, *bits8;
- int nb;
- int bwidth;
- CARD32 cmd;
- int h;
- BoxRec bbox;
- SisExpand expand;
- int lwTmp, lw;
- int extra, n;
-
- widthGlyph = FONTMAXBOUNDS(pfont,characterWidth);
- if (!widthGlyph)
- return TRUE;
-
- h = FONTASCENT(pfont) + FONTDESCENT(pfont);
- if (!h)
- return TRUE;
-
- x = xInit + FONTMAXBOUNDS(pfont,leftSideBearing) + pDrawable->x;
- y = yInit - FONTASCENT(pfont) + pDrawable->y;
-
- bbox.x1 = x;
- bbox.x2 = x + (widthGlyph * nglyph);
- bbox.y1 = y;
- bbox.y2 = y + h;
-
- switch (RECT_IN_REGION(pGC->pScreen, fbGetCompositeClip(pGC), &bbox))
- {
- case rgnPART:
- if (x < 0 || y < 0)
- return FALSE;
- sisGlyphBltClipped (pDrawable, pGC, xInit, yInit, nglyph, ppci, imageBlt);
- case rgnOUT:
- return TRUE;
- }
-
- if (widthGlyph <= 6)
- glyphsPer = 5;
- else if (widthGlyph <= 8)
- glyphsPer = 4;
- else if (widthGlyph <= 10)
- glyphsPer = 3;
- else if (widthGlyph <= 16)
- glyphsPer = 2;
- else
- glyphsPer = 1;
-
- widthGlyphs = widthGlyph * glyphsPer;
- widthBlt = widthGlyphs;
-
- /* make sure scanlines are 32-bit aligned */
- if (widthGlyphs <= 24)
- widthBlt = 25;
-
- cmd = (SIS_CMD_ENH_COLOR_EXPAND |
- SIS_CMD_SRC_SCREEN |
- SIS_CMD_PAT_FG |
- SIS_CMD_INC_X |
- SIS_CMD_INC_Y);
-
- if (imageBlt)
- {
- sis->u.general.clip_right = bbox.x2;
- cmd |= ((sisBltRop[GXcopy] << 8) |
- SIS_CMD_OPAQUE |
- SIS_CMD_RECT_CLIP_ENABLE);
- }
- else
- {
- cmd |= ((sisBltRop[pGC->alu] << 8) |
- SIS_CMD_TRANSPARENT |
- SIS_CMD_RECT_CLIP_DISABLE);
- }
-
- sisExpandInit (pDrawable->pScreen, &expand);
-
- sis->u.general.src_fg = pGC->fgPixel;
- sis->u.general.src_bg = pGC->bgPixel;
-
- bwidth = (widthBlt + 7) >> 3;
-
- nb = bwidth * h;
-
-#define LoopIt(count, loadup, fetch) \
- while (nglyph >= count) \
- { \
- nglyph -= count; \
- dst = sisExpandAlloc (&expand, nb); \
- sis->u.general.src_base = expand.off; \
- sis->u.general.src_pitch = 0; \
- sis->u.general.src_x = 0; \
- sis->u.general.src_y = 0; \
- sis->u.general.dst_x = x; \
- sis->u.general.dst_y = y; \
- sis->u.general.rect_width = widthBlt; \
- sis->u.general.rect_height = h; \
- x += widthGlyphs; \
- loadup \
- lwTmp = h; \
- while (lwTmp--) { \
- tmp = fetch; \
- SisInvertBits32(tmp); \
- *dst++ = tmp; \
- } \
- sis->u.general.command = cmd; \
- }
-
- switch (glyphsPer) {
- case 5:
- LoopIt(5,
- char1 = (unsigned long *) (*ppci++)->bits;
- char2 = (unsigned long *) (*ppci++)->bits;
- char3 = (unsigned long *) (*ppci++)->bits;
- char4 = (unsigned long *) (*ppci++)->bits;
- char5 = (unsigned long *) (*ppci++)->bits;,
- (*char1++ | ((*char2++ | ((*char3++ | ((*char4++ | (*char5++
- << widthGlyph))
- << widthGlyph))
- << widthGlyph))
- << widthGlyph)));
- break;
- case 4:
- LoopIt(4,
- char1 = (unsigned long *) (*ppci++)->bits;
- char2 = (unsigned long *) (*ppci++)->bits;
- char3 = (unsigned long *) (*ppci++)->bits;
- char4 = (unsigned long *) (*ppci++)->bits;,
- (*char1++ | ((*char2++ | ((*char3++ | (*char4++
- << widthGlyph))
- << widthGlyph))
- << widthGlyph)));
- break;
- case 3:
- LoopIt(3,
- char1 = (unsigned long *) (*ppci++)->bits;
- char2 = (unsigned long *) (*ppci++)->bits;
- char3 = (unsigned long *) (*ppci++)->bits;,
- (*char1++ | ((*char2++ | (*char3++ << widthGlyph)) << widthGlyph)));
- break;
- case 2:
- LoopIt(2,
- char1 = (unsigned long *) (*ppci++)->bits;
- char2 = (unsigned long *) (*ppci++)->bits;,
- (*char1++ | (*char2++ << widthGlyph)));
- break;
- }
-
- widthBlt = (widthGlyph + 31) & ~31;
-
- bwidth = widthBlt >> 3;
-
- nb = bwidth * h;
-
- lw = (widthBlt >> 5) * h;
-
- while (nglyph--)
- {
- dst = (CARD32 *) sisExpandAlloc (&expand, nb);
- char1 = (CARD32 *) (*ppci++)->bits;
- sis->u.general.src_base = expand.off;
- sis->u.general.src_pitch = 0;
- sis->u.general.src_x = 0;
- sis->u.general.src_y = 0;
- sis->u.general.dst_x = x;
- sis->u.general.dst_y = y;
- sis->u.general.rect_width = widthBlt;
- sis->u.general.rect_height = h;
- lwTmp = lw;
- while (lwTmp--)
- {
- tmp = *char1++;
- SisInvertBits32 (tmp);
- *dst++ = tmp;
- }
- sis->u.general.command = cmd;
- x += widthGlyph;
- }
- if (imageBlt)
- sis->u.general.clip_right = pScreenPriv->screen->width;
- KdMarkSync (pDrawable->pScreen);
- return TRUE;
-}
-
-Bool
-sisGlyphBlt(DrawablePtr pDrawable,
- GCPtr pGC,
- int x,
- int y,
- unsigned int nglyph,
- CharInfoPtr *ppciInit,
- Bool imageBlt)
-{
- SetupSis(pDrawable->pScreen);
- int height;
- int width;
- int xBack, yBack;
- int hBack, wBack;
- int nb, bwidth, nl;
- FontPtr pfont = pGC->font;
- CharInfoPtr pci;
- CARD8 *bits8, b;
- CARD16 *bits16;
- CARD32 *bits32;
- BoxPtr extents;
- BoxRec bbox;
- CharInfoPtr *ppci;
- unsigned char alu;
- CARD32 cmd;
- SisExpand expand;
- CARD32 *dst, d;
- int nbytes;
- int shift;
-
- x += pDrawable->x;
- y += pDrawable->y;
-
- /* compute an approximate (but covering) bounding box */
- ppci = ppciInit;
- width = 0;
- height = nglyph;
- while (height--)
- width += (*ppci++)->metrics.characterWidth;
- if (width < 0)
- {
- bbox.x1 = x + width;
- bbox.x2 = x;
- }
- else
- {
- bbox.x1 = x;
- bbox.x2 = x + width;
- }
- width = FONTMINBOUNDS(pfont,leftSideBearing);
- if (width < 0)
- bbox.x1 += width;
- width = FONTMAXBOUNDS(pfont, rightSideBearing) - FONTMINBOUNDS(pfont, characterWidth);
- if (width > 0)
- bbox.x2 += width;
- bbox.y1 = y - FONTMAXBOUNDS(pfont,ascent);
- bbox.y2 = y + FONTMAXBOUNDS(pfont,descent);
-
- switch (RECT_IN_REGION(pGC->pScreen, fbGetCompositeClip(pGC), &bbox))
- {
- case rgnPART:
- if (bbox.x1 < 0 || bbox.y1 < 0)
- return FALSE;
- sisGlyphBltClipped (pDrawable, pGC,
- x - pDrawable->x, y - pDrawable->y,
- nglyph, ppciInit, imageBlt);
- case rgnOUT:
- return TRUE;
- }
-
- if (imageBlt)
- {
- xBack = x;
- yBack = y - FONTASCENT(pGC->font);
- wBack = 0;
- hBack = FONTASCENT(pGC->font) + FONTDESCENT(pGC->font);
- if (hBack)
- {
- height = nglyph;
- ppci = ppciInit;
- while (height--)
- wBack += (*ppci++)->metrics.characterWidth;
- }
- if (wBack < 0)
- {
- xBack = xBack + wBack;
- wBack = -wBack;
- }
- if (hBack < 0)
- {
- yBack = yBack + hBack;
- hBack = -hBack;
- }
- alu = GXcopy;
- }
- else
- {
- wBack = 0;
- alu = pGC->alu;
- }
-
- if (wBack)
- {
- _sisSetSolidRect (sis, pGC->bgPixel, GXcopy, cmd);
- _sisRect (sis, xBack, yBack, wBack, hBack, cmd);
- }
-
- sisExpandInit (pDrawable->pScreen, &expand);
-
- sis->u.general.src_fg = pGC->fgPixel;
-
- cmd = (SIS_CMD_ENH_COLOR_EXPAND |
- SIS_CMD_SRC_SCREEN |
- SIS_CMD_PAT_FG |
- (sisBltRop[alu] << 8) |
- SIS_CMD_INC_X |
- SIS_CMD_INC_Y |
- SIS_CMD_RECT_CLIP_DISABLE |
- SIS_CMD_TRANSPARENT);
-
- ppci = ppciInit;
- while (nglyph--)
- {
- pci = *ppci++;
- height = pci->metrics.ascent + pci->metrics.descent;
- width = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
- /*
- * For glyphs wider than 16 pixels, expand the blt to the nearest multiple
- * of 32; this allows the scanlines to be padded to a 32-bit boundary
- * instead of requiring byte packing
- */
- if (width > 16)
- width = (width + 31) & ~31;
- bwidth = (width + 7) >> 3;
- nb = bwidth * height;
- if (nb)
- {
- dst = sisExpandAlloc (&expand, nb);
-
- sis->u.general.src_base = expand.off;
- sis->u.general.src_pitch = 0;
- sis->u.general.src_x = 0;
- sis->u.general.src_y = 0;
- sis->u.general.dst_x = x + pci->metrics.leftSideBearing;
- sis->u.general.dst_y = y - pci->metrics.ascent;
- sis->u.general.rect_width = width;
- sis->u.general.rect_height = height;
- switch (bwidth) {
- case 1:
- bits8 = (CARD8 *) pci->bits;
- while (height >= 4)
- {
- d = (bits8[0] | (bits8[4] << 8) |
- (bits8[8] << 16) | (bits8[12] << 24));
- SisInvertBits32(d);
- *dst++ = d;
- bits8 += 16;
- height -= 4;
- }
- if (height)
- {
- switch (height) {
- case 3:
- d = bits8[0] | (bits8[4] << 8) | (bits8[8] << 16);
- break;
- case 2:
- d = bits8[0] | (bits8[4] << 8);
- break;
- case 1:
- d = bits8[0];
- break;
- }
- SisInvertBits32(d);
- *dst++ = d;
- }
- break;
- case 2:
- bits16 = (CARD16 *) pci->bits;
- while (height >= 2)
- {
- d = bits16[0] | (bits16[2] << 16);
- SisInvertBits32(d);
- *dst++ = d;
- bits16 += 4;
- height -= 2;
- }
- if (height)
- {
- d = bits16[0];
- SisInvertBits32(d);
- *dst++ = d;
- }
- break;
- default:
- nb >>= 2;
- bits32 = (CARD32 *) pci->bits;
- while (nb--)
- {
- d = *bits32++;
- SisInvertBits32 (d);
- *dst++ = d;
- }
- }
- sis->u.general.command = cmd;
- }
- x += pci->metrics.characterWidth;
- }
- KdMarkSync (pDrawable->pScreen);
- return TRUE;
-}
-/*
- * Blt glyphs using Sis image transfer register, this does both
- * poly glyph blt and image glyph blt (when pglyphBase == 1)
- */
-
-void
-sisPolyGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int x, int y,
- unsigned int nglyph,
- CharInfoPtr *ppci,
- pointer pglyphBase)
-{
- FbBits depthMask;
-
- depthMask = FbFullMask (pDrawable->depth);
- if ((pGC->planemask & depthMask) == depthMask &&
- pGC->fillStyle == FillSolid)
- {
- if (TERMINALFONT(pGC->font))
- {
- if (sisTEGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, FALSE))
- return;
- }
- else
- {
- if (sisGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, FALSE))
- return;
- }
- }
- KdCheckPolyGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
-}
-
-void
-sisImageGlyphBlt (DrawablePtr pDrawable,
- GCPtr pGC,
- int x, int y,
- unsigned int nglyph,
- CharInfoPtr *ppci,
- pointer pglyphBase)
-{
- FbBits depthMask;
-
- depthMask = FbFullMask (pDrawable->depth);
- if ((pGC->planemask & depthMask) == depthMask)
- {
- if (TERMINALFONT(pGC->font))
- {
- if (sisTEGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, TRUE))
- return;
- }
- else
- {
- if (sisGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, TRUE))
- return;
- }
- }
- KdCheckImageGlyphBlt (pDrawable, pGC, x, y, nglyph, ppci, pglyphBase);
-}
-
-#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3))
-
-#define sisPatternDimOk(d) ((d) <= 8 && (((d) & ((d) - 1)) == 0))
-
-BOOL
-sisFillOk (GCPtr pGC)
-{
- FbBits depthMask;
-
- depthMask = FbFullMask(pGC->depth);
- if ((pGC->planemask & depthMask) != depthMask)
- return FALSE;
- switch (pGC->fillStyle) {
- case FillSolid:
- return TRUE;
- case FillTiled:
- return (sisPatternDimOk (pGC->tile.pixmap->drawable.width) &&
- sisPatternDimOk (pGC->tile.pixmap->drawable.height));
- case FillStippled:
- case FillOpaqueStippled:
- return (sisPatternDimOk (pGC->stipple->drawable.width) &&
- sisPatternDimOk (pGC->stipple->drawable.height));
- }
-}
-
-CARD32
-sisStipplePrepare (DrawablePtr pDrawable, GCPtr pGC)
-{
- SetupSis(pGC->pScreen);
- PixmapPtr pStip = pGC->stipple;
- int stipHeight = pStip->drawable.height;
- int xRot, yRot;
- int rot, stipX, stipY;
- FbStip *stip, *stipEnd, bits;
- FbStride stipStride;
- int stipBpp;
- int stipXoff, stipYoff; /* XXX assumed to be zero */
- int y;
- CARD32 cmd;
-
- xRot = pGC->patOrg.x + pDrawable->x;
- yRot = pGC->patOrg.y + pDrawable->y;
- modulus (- yRot, stipHeight, stipY);
- modulus (- xRot, FB_UNIT, stipX);
- rot = stipX;
-
- fbGetStipDrawable (&pStip->drawable, stip, stipStride, stipBpp, stipXoff, stipYoff);
- for (y = 0; y < 8; y++)
- {
- bits = stip[stipY<<1];
- FbRotLeft(bits, rot);
- SisInvertBits32(bits);
- sis->u.general.mask[y] = (CARD8) bits;
- stipY++;
- if (stipY == stipHeight)
- stipY = 0;
- }
- sis->u.general.pattern_fg = pGC->fgPixel;
-
- cmd = (SIS_CMD_BITBLT |
- SIS_CMD_SRC_SCREEN |
- SIS_CMD_PAT_MONO |
- (sisPatRop[pGC->alu] << 8) |
- SIS_CMD_INC_X |
- SIS_CMD_INC_Y |
- SIS_CMD_RECT_CLIP_DISABLE |
- SIS_CMD_RECT_CLIP_DONT_MERGE);
- if (pGC->fillStyle == FillOpaqueStippled)
- {
- sis->u.general.pattern_bg = pGC->bgPixel;
- cmd |= SIS_CMD_OPAQUE;
- }
- else
- cmd |= SIS_CMD_TRANSPARENT;
- return cmd;
-}
-
-CARD32
-sisTilePrepare (PixmapPtr pTile, int xRot, int yRot, CARD8 alu)
-{
- SetupSis(pTile->drawable.pScreen);
- int tileHeight = pTile->drawable.height;
- int tileWidth = pTile->drawable.width;
- FbBits *tile;
- FbStride tileStride;
- int tileBpp;
- int tileXoff, tileYoff; /* XXX assumed to be zero */
-
- fbGetDrawable (&pTile->drawable, tile, tileStride, tileBpp, tileXoff, tileYoff);
-
- /*
- * Tile the pattern register
- */
- fbTile ((FbBits *) sis->u.general.pattern,
- (8 * tileBpp) >> FB_SHIFT,
- 0,
-
- 8 * tileBpp, 8,
-
- tile,
- tileStride,
- tileWidth * tileBpp,
- tileHeight,
- GXcopy, FB_ALLONES, tileBpp,
- xRot * tileBpp,
- yRot);
-
- return (SIS_CMD_BITBLT |
- SIS_CMD_SRC_SCREEN |
- SIS_CMD_PAT_PATTERN |
- (sisPatRop[alu] << 8) |
- SIS_CMD_INC_X |
- SIS_CMD_INC_Y |
- SIS_CMD_RECT_CLIP_DISABLE |
- SIS_CMD_RECT_CLIP_DONT_MERGE);
-}
-
-void
-sisFillBoxSolid (DrawablePtr pDrawable, int nBox, BoxPtr pBox,
- unsigned long pixel, int alu)
-{
- SetupSis(pDrawable->pScreen);
- CARD32 cmd;
-
- _sisSetSolidRect(sis,pixel,alu,cmd);
-
- while (nBox--)
- {
- _sisRect(sis,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd);
- pBox++;
- }
- KdMarkSync (pDrawable->pScreen);
-}
-
-void
-sisFillBoxStipple (DrawablePtr pDrawable, GCPtr pGC,
- int nBox, BoxPtr pBox)
-{
- SetupSis(pDrawable->pScreen);
- CARD32 cmd;
-
- cmd = sisStipplePrepare (pDrawable, pGC);
-
- while (nBox--)
- {
- _sisRect(sis,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd);
- pBox++;
- }
- KdMarkSync (pDrawable->pScreen);
-}
-
-void
-sisFillBoxTiled (DrawablePtr pDrawable,
- int nBox, BoxPtr pBox,
- PixmapPtr pTile, int xRot, int yRot, CARD8 alu)
-{
- SetupSis (pDrawable->pScreen);
- CARD32 cmd;
-
- cmd = sisTilePrepare (pTile, xRot, yRot, alu);
-
- while (nBox--)
- {
- _sisRect(sis,pBox->x1,pBox->y1,pBox->x2-pBox->x1,pBox->y2-pBox->y1,cmd);
- pBox++;
- }
- KdMarkSync (pDrawable->pScreen);
-}
-
-/*
- sisDoBitBlt
- =============
- Bit Blit for all window to window blits.
-*/
-
-void
-sisCopyNtoN (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- GCPtr pGC,
- BoxPtr pbox,
- int nbox,
- int dx,
- int dy,
- Bool reverse,
- Bool upsidedown,
- Pixel bitplane,
- void *closure)
-{
- SetupSis(pDstDrawable->pScreen);
- int srcX, srcY, dstX, dstY;
- int w, h;
- CARD32 flags;
- CARD32 cmd;
- CARD8 alu;
-
- if (pGC)
- {
- alu = pGC->alu;
- if (sourceInvarient (pGC->alu))
- {
- sisFillBoxSolid (pDstDrawable, nbox, pbox, 0, pGC->alu);
- return;
- }
- }
- else
- alu = GXcopy;
-
- _sisSetBlt(sis,alu,cmd);
- while (nbox--)
- {
- w = pbox->x2 - pbox->x1;
- h = pbox->y2 - pbox->y1;
- flags = 0;
- if (reverse)
- {
- dstX = pbox->x2 - 1;
- }
- else
- {
- dstX = pbox->x1;
- flags |= SIS_CMD_INC_X;
- }
- srcX = dstX + dx;
-
- if (upsidedown)
- {
- dstY = pbox->y2 - 1;
- }
- else
- {
- dstY = pbox->y1;
- flags |= SIS_CMD_INC_Y;
- }
- srcY = dstY + dy;
-
- _sisBlt (sis, srcX, srcY, dstX, dstY, w, h, cmd|flags);
- pbox++;
- }
- KdMarkSync (pDstDrawable->pScreen);
-}
-
-RegionPtr
-sisCopyArea(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
- int srcx, int srcy, int width, int height, int dstx, int dsty)
-{
- KdScreenPriv(pDstDrawable->pScreen);
- FbBits depthMask;
-
- depthMask = FbFullMask (pDstDrawable->depth);
- if ((pGC->planemask & depthMask) == depthMask &&
- pSrcDrawable->type == DRAWABLE_WINDOW &&
- pDstDrawable->type == DRAWABLE_WINDOW)
- {
- return fbDoCopy (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, sisCopyNtoN, 0, 0);
- }
- return KdCheckCopyArea (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height, dstx, dsty);
-}
-
-typedef struct _sis1toNargs {
- unsigned long copyPlaneFG, copyPlaneBG;
-} sis1toNargs;
-
-void
-_sisStipple (ScreenPtr pScreen,
- FbStip *psrcBase,
- FbStride widthSrc,
- CARD8 alu,
- int srcx,
- int srcy,
- int dstx,
- int dsty,
- int width,
- int height)
-{
- SetupSis(pScreen);
- FbStip *psrcLine, *psrc;
- FbStride widthRest;
- FbStip bits, tmp, lastTmp;
- int leftShift, rightShift;
- int nl, nlMiddle;
- int r;
- SisExpand expand;
- CARD32 *dst;
- int hthis;
- int hper;
- int bwidth;
- CARD32 cmd;
-
- sisExpandInit (pScreen, &expand);
-
- /* Compute blt address and parameters */
- psrc = psrcBase + srcy * widthSrc + (srcx >> 5);
- nlMiddle = (width + 31) >> 5;
- leftShift = srcx & 0x1f;
- rightShift = 32 - leftShift;
- widthRest = widthSrc - nlMiddle;
-
- cmd = (SIS_CMD_ENH_COLOR_EXPAND |
- SIS_CMD_SRC_SCREEN |
- SIS_CMD_PAT_FG |
- (sisBltRop[alu] << 8) |
- SIS_CMD_INC_X |
- SIS_CMD_INC_Y |
- SIS_CMD_OPAQUE |
- SIS_CMD_RECT_CLIP_ENABLE);
-
- if (leftShift != 0)
- widthRest--;
-
- sis->u.general.src_x = 0;
- sis->u.general.src_y = 0;
- sis->u.general.dst_x = dstx;
- sis->u.general.rect_width = (width + 31) & ~31;
- sis->u.general.clip_right = (dstx + width);
-
- bwidth = nlMiddle << 2;
- hper = SIS_PATTERN_INC / bwidth;
- if (hper == 0)
- hper = 1;
-
- while (height)
- {
- hthis = hper;
- if (hthis > height)
- hthis = height;
- dst = sisExpandAlloc (&expand, bwidth * hthis);
- sis->u.general.src_base = expand.off;
- sis->u.general.dst_y = dsty;
- sis->u.general.rect_height = hthis;
-
- dsty += hthis;
- height -= hthis;
-
- if (leftShift == 0)
- {
- while (hthis--)
- {
- nl = nlMiddle;
- while (nl--)
- {
- tmp = *psrc++;
- SisInvertBits32(tmp);
- *dst++ = tmp;
- }
- psrc += widthRest;
- }
- }
- else
- {
- while (hthis--)
- {
- bits = *psrc++;
- nl = nlMiddle;
- while (nl--)
- {
- tmp = FbStipLeft(bits, leftShift);
- bits = *psrc++;
- tmp |= FbStipRight(bits, rightShift);
- SisInvertBits32(tmp);
- *dst++ = tmp;
- }
- psrc += widthRest;
- }
- }
- sis->u.general.command = cmd;
- }
- sis->u.general.clip_right = pScreenPriv->screen->width;
-}
-
-void
-sisCopy1toN (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- GCPtr pGC,
- BoxPtr pbox,
- int nbox,
- int dx,
- int dy,
- Bool reverse,
- Bool upsidedown,
- Pixel bitplane,
- void *closure)
-{
- SetupSis(pDstDrawable->pScreen);
-
- sis1toNargs *args = closure;
- int dstx, dsty;
- FbStip *psrcBase;
- FbStride widthSrc;
- int srcBpp;
- int srcXoff, srcYoff;
-
- if (sourceInvarient (pGC->alu))
- {
- sisFillBoxSolid (pDstDrawable, nbox, pbox,
- pGC->bgPixel, pGC->alu);
- return;
- }
-
- fbGetStipDrawable (pSrcDrawable, psrcBase, widthSrc, srcBpp, srcXoff, srcYoff);
-
- sis->u.general.src_fg = args->copyPlaneFG;
- sis->u.general.src_bg = args->copyPlaneBG;
-
- while (nbox--)
- {
- dstx = pbox->x1;
- dsty = pbox->y1;
-
- _sisStipple (pDstDrawable->pScreen,
- psrcBase, widthSrc,
- pGC->alu,
- dstx + dx - srcXoff, dsty + dy - srcYoff,
- dstx, dsty,
- pbox->x2 - dstx, pbox->y2 - dsty);
- pbox++;
- }
- KdMarkSync (pDstDrawable->pScreen);
-}
-
-RegionPtr
-sisCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable, GCPtr pGC,
- int srcx, int srcy, int width, int height,
- int dstx, int dsty, unsigned long bitPlane)
-{
- KdScreenPriv (pDstDrawable->pScreen);
- RegionPtr ret;
- sis1toNargs args;
- FbBits depthMask;
-
- depthMask = FbFullMask (pDstDrawable->depth);
- if ((pGC->planemask & depthMask) == depthMask &&
- pDstDrawable->type == DRAWABLE_WINDOW &&
- pSrcDrawable->depth == 1)
- {
- args.copyPlaneFG = pGC->fgPixel;
- args.copyPlaneBG = pGC->bgPixel;
- return fbDoCopy (pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, sisCopy1toN, bitPlane, &args);
- }
- return KdCheckCopyPlane(pSrcDrawable, pDstDrawable, pGC,
- srcx, srcy, width, height,
- dstx, dsty, bitPlane);
-}
-
-void
-sisFillSpans (DrawablePtr pDrawable, GCPtr pGC, int n,
- DDXPointPtr ppt, int *pwidth, int fSorted)
-{
- SetupSis(pDrawable->pScreen);
- DDXPointPtr pptFree;
- FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC);
- int *pwidthFree;/* copies of the pointers to free */
- CARD32 cmd;
- int nTmp;
- INT16 x, y;
- int width;
-
- if (!sisFillOk (pGC))
- {
- KdCheckFillSpans (pDrawable, pGC, n, ppt, pwidth, fSorted);
- return;
- }
- nTmp = n * miFindMaxBand(fbGetCompositeClip(pGC));
- pwidthFree = (int *)xalloc(nTmp * sizeof(int));
- pptFree = (DDXPointRec *)xalloc(nTmp * sizeof(DDXPointRec));
- if(!pptFree || !pwidthFree)
- {
- if (pptFree) xfree(pptFree);
- if (pwidthFree) xfree(pwidthFree);
- return;
- }
- n = miClipSpans(fbGetCompositeClip(pGC),
- ppt, pwidth, n,
- pptFree, pwidthFree, fSorted);
- pwidth = pwidthFree;
- ppt = pptFree;
- switch (pGC->fillStyle) {
- case FillSolid:
- _sisSetSolidRect(sis,pGC->fgPixel,pGC->alu,cmd);
- break;
- case FillTiled:
- cmd = sisTilePrepare (pGC->tile.pixmap,
- pGC->patOrg.x + pDrawable->x,
- pGC->patOrg.y + pDrawable->y,
- pGC->alu);
- break;
- default:
- cmd = sisStipplePrepare (pDrawable, pGC);
- break;
- }
- while (n--)
- {
- x = ppt->x;
- y = ppt->y;
- ppt++;
- width = *pwidth++;
- if (width)
- {
- _sisRect(sis,x,y,width,1,cmd);
- }
- }
- KdMarkSync (pDrawable->pScreen);
- xfree(pptFree);
- xfree(pwidthFree);
-}
-
-#define NUM_STACK_RECTS 1024
-
-void
-sisPolyFillRect (DrawablePtr pDrawable, GCPtr pGC,
- int nrectFill, xRectangle *prectInit)
-{
- SetupSis(pDrawable->pScreen);
- xRectangle *prect;
- RegionPtr prgnClip;
- register BoxPtr pbox;
- register BoxPtr pboxClipped;
- BoxPtr pboxClippedBase;
- BoxPtr pextent;
- BoxRec stackRects[NUM_STACK_RECTS];
- FbGCPrivPtr fbPriv = fbGetGCPrivate (pGC);
- int numRects;
- int n;
- int xorg, yorg;
- int x, y;
-
- if (!sisFillOk (pGC))
- {
- KdCheckPolyFillRect (pDrawable, pGC, nrectFill, prectInit);
- return;
- }
- prgnClip = fbGetCompositeClip(pGC);
- xorg = pDrawable->x;
- yorg = pDrawable->y;
-
- if (xorg || yorg)
- {
- prect = prectInit;
- n = nrectFill;
- while(n--)
- {
- prect->x += xorg;
- prect->y += yorg;
- prect++;
- }
- }
-
- prect = prectInit;
-
- numRects = REGION_NUM_RECTS(prgnClip) * nrectFill;
- if (numRects > NUM_STACK_RECTS)
- {
- pboxClippedBase = (BoxPtr)xalloc(numRects * sizeof(BoxRec));
- if (!pboxClippedBase)
- return;
- }
- else
- pboxClippedBase = stackRects;
-
- pboxClipped = pboxClippedBase;
-
- if (REGION_NUM_RECTS(prgnClip) == 1)
- {
- int x1, y1, x2, y2, bx2, by2;
-
- pextent = REGION_RECTS(prgnClip);
- x1 = pextent->x1;
- y1 = pextent->y1;
- x2 = pextent->x2;
- y2 = pextent->y2;
- while (nrectFill--)
- {
- if ((pboxClipped->x1 = prect->x) < x1)
- pboxClipped->x1 = x1;
-
- if ((pboxClipped->y1 = prect->y) < y1)
- pboxClipped->y1 = y1;
-
- bx2 = (int) prect->x + (int) prect->width;
- if (bx2 > x2)
- bx2 = x2;
- pboxClipped->x2 = bx2;
-
- by2 = (int) prect->y + (int) prect->height;
- if (by2 > y2)
- by2 = y2;
- pboxClipped->y2 = by2;
-
- prect++;
- if ((pboxClipped->x1 < pboxClipped->x2) &&
- (pboxClipped->y1 < pboxClipped->y2))
- {
- pboxClipped++;
- }
- }
- }
- else
- {
- int x1, y1, x2, y2, bx2, by2;
-
- pextent = REGION_EXTENTS(pGC->pScreen, prgnClip);
- x1 = pextent->x1;
- y1 = pextent->y1;
- x2 = pextent->x2;
- y2 = pextent->y2;
- while (nrectFill--)
- {
- BoxRec box;
-
- if ((box.x1 = prect->x) < x1)
- box.x1 = x1;
-
- if ((box.y1 = prect->y) < y1)
- box.y1 = y1;
-
- bx2 = (int) prect->x + (int) prect->width;
- if (bx2 > x2)
- bx2 = x2;
- box.x2 = bx2;
-
- by2 = (int) prect->y + (int) prect->height;
- if (by2 > y2)
- by2 = y2;
- box.y2 = by2;
-
- prect++;
-
- if ((box.x1 >= box.x2) || (box.y1 >= box.y2))
- continue;
-
- n = REGION_NUM_RECTS (prgnClip);
- pbox = REGION_RECTS(prgnClip);
-
- /* clip the rectangle to each box in the clip region
- this is logically equivalent to calling Intersect()
- */
- while(n--)
- {
- pboxClipped->x1 = max(box.x1, pbox->x1);
- pboxClipped->y1 = max(box.y1, pbox->y1);
- pboxClipped->x2 = min(box.x2, pbox->x2);
- pboxClipped->y2 = min(box.y2, pbox->y2);
- pbox++;
-
- /* see if clipping left anything */
- if(pboxClipped->x1 < pboxClipped->x2 &&
- pboxClipped->y1 < pboxClipped->y2)
- {
- pboxClipped++;
- }
- }
- }
- }
- if (pboxClipped != pboxClippedBase)
- {
- switch (pGC->fillStyle) {
- case FillSolid:
- sisFillBoxSolid(pDrawable,
- pboxClipped-pboxClippedBase, pboxClippedBase,
- pGC->fgPixel, pGC->alu);
- break;
- case FillTiled:
- sisFillBoxTiled(pDrawable,
- pboxClipped-pboxClippedBase, pboxClippedBase,
- pGC->tile.pixmap,
- pGC->patOrg.x + pDrawable->x,
- pGC->patOrg.y + pDrawable->y,
- pGC->alu);
- break;
- case FillStippled:
- case FillOpaqueStippled:
- sisFillBoxStipple (pDrawable, pGC,
- pboxClipped-pboxClippedBase, pboxClippedBase);
- break;
- }
- }
- if (pboxClippedBase != stackRects)
- xfree(pboxClippedBase);
-}
-
-static const GCOps sisOps = {
- sisFillSpans,
- KdCheckSetSpans,
- KdCheckPutImage,
- sisCopyArea,
- sisCopyPlane,
- KdCheckPolyPoint,
- KdCheckPolylines,
- KdCheckPolySegment,
- miPolyRectangle,
- KdCheckPolyArc,
- miFillPolygon,
- sisPolyFillRect,
- KdCheckPolyFillArc,
- miPolyText8,
- miPolyText16,
- miImageText8,
- miImageText16,
- sisImageGlyphBlt,
- sisPolyGlyphBlt,
- KdCheckPushPixels,
-};
-
-void
-sisValidateGC (GCPtr pGC, Mask changes, DrawablePtr pDrawable)
-{
- FbGCPrivPtr fbPriv = fbGetGCPrivate(pGC);
-
- fbValidateGC (pGC, changes, pDrawable);
-
- if (pDrawable->type == DRAWABLE_WINDOW)
- pGC->ops = (GCOps *) &sisOps;
- else
- pGC->ops = (GCOps *) &kdAsyncPixmapGCOps;
-}
-
-GCFuncs sisGCFuncs = {
- sisValidateGC,
- miChangeGC,
- miCopyGC,
- miDestroyGC,
- miChangeClip,
- miDestroyClip,
- miCopyClip
-};
-
-int
-sisCreateGC (GCPtr pGC)
-{
- if (!fbCreateGC (pGC))
- return FALSE;
-
- if (pGC->depth != 1)
- pGC->funcs = &sisGCFuncs;
-
- pGC->ops = (GCOps *) &kdAsyncPixmapGCOps;
-
- return TRUE;
-}
-
-void
-sisCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
-{
- ScreenPtr pScreen = pWin->drawable.pScreen;
- KdScreenPriv(pScreen);
- RegionRec rgnDst;
- int dx, dy;
- WindowPtr pwinRoot;
-
- pwinRoot = WindowTable[pWin->drawable.pScreen->myNum];
-
- dx = ptOldOrg.x - pWin->drawable.x;
- dy = ptOldOrg.y - pWin->drawable.y;
- REGION_TRANSLATE(pWin->drawable.pScreen, prgnSrc, -dx, -dy);
-
- REGION_INIT (pWin->drawable.pScreen, &rgnDst, NullBox, 0);
-
- REGION_INTERSECT(pWin->drawable.pScreen, &rgnDst, &pWin->borderClip, prgnSrc);
-
- fbCopyRegion ((DrawablePtr)pwinRoot, (DrawablePtr)pwinRoot,
- 0,
- &rgnDst, dx, dy, sisCopyNtoN, 0, 0);
-
- REGION_UNINIT(pWin->drawable.pScreen, &rgnDst);
-}
-
-Bool
-sisDrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- sisScreenInfo(pScreenPriv);
-
- /*
- * Hook up asynchronous drawing
- */
- KdScreenInitAsync (pScreen);
- /*
- * Replace various fb screen functions
- */
- pScreen->CreateGC = sisCreateGC;
- pScreen->CopyWindow = sisCopyWindow;
-
- return TRUE;
-}
-
-void
-sisDrawEnable (ScreenPtr pScreen)
-{
- SetupSis(pScreen);
- sisScreenInfo(pScreenPriv);
- CARD32 cmd;
- CARD32 base;
- CARD16 stride;
- CARD16 op;
-
- base = pScreenPriv->screen->fb[0].frameBuffer - sisc->frameBuffer;
- stride = pScreenPriv->screen->fb[0].byteStride;
-#if 0
- sis->u.general.dst_base = base;
- sis->u.general.dst_pitch = stride;
- sis->u.general.src_pitch = stride;
- sis->u.general._pad0 = stride;
- sis->u.general.dst_height = pScreenPriv->screen->height;
- _sisClip (sis, 0, 0,
- pScreenPriv->screen->width, pScreenPriv->screen->height);
- _sisSetSolidRect(sis, pScreen->blackPixel, GXcopy, cmd);
- _sisRect (sis, 0, 0,
- pScreenPriv->screen->width, pScreenPriv->screen->height,
- cmd);
-#endif
- base = (CARD32) (pScreenPriv->screen->fb[0].frameBuffer);
- fprintf (stderr, "src 0x%x\n", sis->u.accel.src_addr);
- sis->u.accel.src_addr = (base & 0x3fffff);
- fprintf (stderr, "src 0x%x\n", sis->u.accel.src_addr);
- sis->u.accel.dst_addr = (base & 0x3fffff);
- sis->u.accel.pitch = (stride << 16) | stride;
- sis->u.accel.dimension = ((pScreenPriv->screen->height-1) << 16 |
- (pScreenPriv->screen->width - 1));
- sis->u.accel.fg = (sisBltRop[GXcopy] << 24) | 0xf800;
- sis->u.accel.bg = (sisBltRop[GXcopy] << 24) | 0x00;
-
-#define sisLEFT2RIGHT 0x10
-#define sisRIGHT2LEFT 0x00
-#define sisTOP2BOTTOM 0x20
-#define sisBOTTOM2TOP 0x00
-
-#define sisSRCSYSTEM 0x03
-#define sisSRCVIDEO 0x02
-#define sisSRCFG 0x01
-#define sisSRCBG 0x00
-
-#define sisCMDBLT 0x0000
-#define sisCMDBLTMSK 0x0100
-#define sisCMDCOLEXP 0x0200
-#define sisCMDLINE 0x0300
-
-#define sisCMDENHCOLEXP 0x2000
-
-#define sisXINCREASE 0x10
-#define sisYINCREASE 0x20
-#define sisCLIPENABL 0x40
-#define sisCLIPINTRN 0x80
-#define sisCLIPEXTRN 0x00
-
-
-#define sisPATREG 0x08
-#define sisPATFG 0x04
-#define sisPATBG 0x00
-
-#define sisLASTPIX 0x0800
-#define sisXMAJOR 0x0400
-
- op = sisCMDBLT | sisLEFT2RIGHT | sisTOP2BOTTOM | sisSRCFG | sisPATFG;
-
- sis->u.accel.cmd = op;
-
- KdMarkSync (pScreen);
-}
-
-void
-sisDrawSync (ScreenPtr pScreen)
-{
- SetupSis(pScreen);
-
- _sisWaitIdleEmpty (sis);
-}
-
-void
-sisDrawDisable (ScreenPtr pScreen)
-{
-}
-
-void
-sisDrawFini (ScreenPtr pScreen)
-{
-}
diff --git a/hw/kdrive/sis530/sisdraw.h b/hw/kdrive/sis530/sisdraw.h
deleted file mode 100644
index 971ad64ac..000000000
--- a/hw/kdrive/sis530/sisdraw.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _SISDRAW_H_
-#define _SISDRAW_H_
-
-#define SetupSis(s) KdScreenPriv(s); \
- sisCardInfo(pScreenPriv); \
- SisPtr sis = sisc->sis
-
-#define SIS_CMD_BITBLT (0)
-#define SIS_CMD_COLOR_EXPAND (1)
-#define SIS_CMD_ENH_COLOR_EXPAND (2)
-#define SIS_CMD_MULTI_SCANLINE (3)
-#define SIS_CMD_LINE (4)
-#define SIS_CMD_TRAPEZOID (5)
-#define SIS_CMD_TRANSPARENT_BITBLT (6)
-
-#define SIS_CMD_SRC_SCREEN (0 << 4)
-#define SIS_CMD_SRC_CPU (1 << 4)
-
-#define SIS_CMD_PAT_FG (0 << 6)
-#define SIS_CMD_PAT_PATTERN (1 << 6)
-#define SIS_CMD_PAT_MONO (2 << 6)
-
-/* 8->15 rop */
-
-#define SIS_CMD_DEC_X (0 << 16)
-#define SIS_CMD_INC_X (1 << 16)
-
-#define SIS_CMD_DEC_Y (0 << 17)
-#define SIS_CMD_INC_Y (1 << 17)
-
-#define SIS_CMD_RECT_CLIP_DISABLE (0 << 18)
-#define SIS_CMD_RECT_CLIP_ENABLE (1 << 18)
-
-#define SIS_CMD_OPAQUE (0 << 20)
-#define SIS_CMD_TRANSPARENT (1 << 20)
-
-#define SIS_CMD_RECT_CLIP_MERGE (0 << 26)
-#define SIS_CMD_RECT_CLIP_DONT_MERGE (1 << 26)
-
-#define SIS_STAT_2D_IDLE (1 << 31)
-#define SIS_STAT_3D_IDLE (1 << 30)
-#define SIS_STAT_EMPTY (1 << 29)
-#define SIS_STAT_CPU_BITBLT (0xf << 24)
-#define SIS_STAT_ENH_COLOR_EXPAND (1 << 23)
-#define SIS_STAT_AVAIL (0x1fff)
-
-extern CARD8 sisPatRop[16];
-extern CARD8 sisBltRop[16];
-
-#define _sisSetSolidRect(sis,pix,alu,cmd) {\
- (sis)->u.general.pattern_fg = (pix); \
- (cmd) = (SIS_CMD_BITBLT | \
- SIS_CMD_SRC_SCREEN | \
- SIS_CMD_PAT_FG | \
- (sisPatRop[alu] << 8) | \
- SIS_CMD_INC_X | \
- SIS_CMD_INC_Y | \
- SIS_CMD_RECT_CLIP_DISABLE | \
- SIS_CMD_OPAQUE | \
- SIS_CMD_RECT_CLIP_DONT_MERGE); \
-}
-
-#define _sisClip(sis,x1,y1,x2,y2) { \
- (sis)->u.general.clip_left = (x1); \
- (sis)->u.general.clip_top = (y1); \
- (sis)->u.general.clip_right = (x2); \
- (sis)->u.general.clip_bottom = (y2); \
-}
-
-#define _sisRect(sis,x,y,w,h,cmd) { \
- (sis)->u.general.dst_x = (x); \
- (sis)->u.general.dst_y = (y); \
- (sis)->u.general.rect_width = (w); \
- (sis)->u.general.rect_height = (h); \
- (sis)->u.general.command = (cmd); \
-}
-
-#define _sisSetTransparentPlaneBlt(sis, alu, fg, cmd) { \
- (sis)->u.general.src_fg = (fg); \
- (cmd) = (SIS_CMD_ENH_COLOR_EXPAND | \
- SIS_CMD_SRC_CPU | \
- SIS_CMD_PAT_FG | \
- (sisBltRop[alu] << 8) | \
- SIS_CMD_INC_X | \
- SIS_CMD_INC_Y | \
- SIS_CMD_RECT_CLIP_DISABLE | \
- SIS_CMD_TRANSPARENT | \
- SIS_CMD_RECT_CLIP_DONT_MERGE); \
-}
-
-#define _sisSetOpaquePlaneBlt(sis, alu, fg, bg, cmd) { \
- (sis)->u.general.src_fg = (fg); \
- (sis)->u.general.src_bg = (bg); \
- (cmd) = (SIS_CMD_ENH_COLOR_EXPAND | \
- SIS_CMD_SRC_CPU | \
- SIS_CMD_PAT_FG | \
- (sisBltRop[alu] << 8) | \
- SIS_CMD_INC_X | \
- SIS_CMD_INC_Y | \
- SIS_CMD_RECT_CLIP_DISABLE | \
- SIS_CMD_OPAQUE | \
- SIS_CMD_RECT_CLIP_DONT_MERGE); \
-}
-
-#define _sisPlaneBlt(sis,x,y,w,h,cmd) _sisSolidRect(sis,x,y,w,h,cmd)
-
-#define _sisSetBlt(sis,alu,cmd) { \
- (sis)->u.general.src_base = (sis)->u.general.dst_base; \
- (sis)->u.general.src_pitch = (sis)->u.general.dst_pitch; \
- (cmd) = (SIS_CMD_RECT_CLIP_DONT_MERGE |\
- (sisBltRop[alu] << 8) |\
- SIS_CMD_PAT_FG |\
- SIS_CMD_SRC_SCREEN |\
- SIS_CMD_BITBLT); \
-}
-
-#define _sisBlt(sis,sx,sy,dx,dy,w,h,cmd) { \
- (sis)->u.general.src_x = (sx); \
- (sis)->u.general.src_y = (sy); \
- (sis)->u.general.dst_x = (dx); \
- (sis)->u.general.dst_y = (dy); \
- (sis)->u.general.rect_width = (w); \
- (sis)->u.general.rect_height = (h); \
- (sis)->u.general.command = (cmd); \
-}
-
-#define SIS_IE (SIS_STAT_2D_IDLE|SIS_STAT_EMPTY)
-
-#define _sisWaitIdleEmpty(sis) \
- while (((sis)->u.general.status & SIS_IE) != SIS_IE)
-
-/*
- * Ok, so the Sis530 is broken -- it expects bitmaps to come MSB bit order,
- * but it's willing to take them in LSB byte order. These macros
- * flip bits around without flipping bytes. Instead of using a table
- * and burning memory bandwidth, do them in place with the CPU.
- */
-
-/* The MIPS compiler automatically places these constants in registers */
-#define SisInvertBits32(v) { \
- v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \
- v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \
- v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \
-}
-
-#define SisInvertBits16(v) { \
- v = ((v & 0x5555) << 1) | ((v >> 1) & 0x5555); \
- v = ((v & 0x3333) << 2) | ((v >> 2) & 0x3333); \
- v = ((v & 0x0f0f) << 4) | ((v >> 4) & 0x0f0f); \
-}
-
-#define SisInvertBits8(v) { \
- v = ((v & 0x55) << 1) | ((v >> 1) & 0x55); \
- v = ((v & 0x33) << 2) | ((v >> 2) & 0x33); \
- v = ((v & 0x0f) << 4) | ((v >> 4) & 0x0f); \
-}
-
-#endif
diff --git a/hw/kdrive/sis530/sisio.c b/hw/kdrive/sis530/sisio.c
deleted file mode 100644
index 4741937a4..000000000
--- a/hw/kdrive/sis530/sisio.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#ifdef linux
-#define extern
-#include <asm/io.h>
-#undef extern
-#endif
diff --git a/hw/kdrive/sis530/sisstub.c b/hw/kdrive/sis530/sisstub.c
deleted file mode 100644
index 960510bff..000000000
--- a/hw/kdrive/sis530/sisstub.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "sis.h"
-
-static const int sisCards[] = { 0x6306, 0x0200 };
-
-#define numSisCards (sizeof (sisCards) / sizeof (sisCards[0]))
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
- int i;
-
- for (i = 0; i < numSisCards; i++)
- if (LinuxFindPci (0x1039, sisCards[i], 0, &attr))
- KdCardInfoAdd (&sisFuncs, &attr, (void *) sisCards[i]);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- return KdProcessArgument (argc, argv, i);
-}
diff --git a/hw/kdrive/smi/Makefile.am b/hw/kdrive/smi/Makefile.am
deleted file mode 100644
index bd7077c56..000000000
--- a/hw/kdrive/smi/Makefile.am
+++ /dev/null
@@ -1,41 +0,0 @@
-INCLUDES = \
- -I$(top_srcdir)/hw/kdrive/fbdev \
- -I$(top_srcdir)/hw/kdrive/vesa \
- @KDRIVE_INCS@ \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xsmi
-
-noinst_LIBRARIES = libsmi.a
-
-# smivideo.c # not ready yet
-
-libsmi_a_SOURCES = \
- smi.c \
- smi.h \
- smidraw.c \
- smidraw.h
-
-Xsmi_SOURCES = \
- smistub.c
-
-SMI_LIBS = \
- libsmi.a \
- $(top_builddir)/hw/kdrive/fbdev/libfbdev.a \
- $(top_builddir)/hw/kdrive/vesa/libvesa.a \
- @KDRIVE_LIBS@
-
-if GLX
-Xsmi_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xsmi_LDADD = \
- $(SMI_LIBS) \
- @KDRIVE_LIBS@
-
-Xsmi_DEPENDENCIES = \
- libsmi.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/smi/smi.c b/hw/kdrive/smi/smi.c
deleted file mode 100644
index 7d4d725c7..000000000
--- a/hw/kdrive/smi/smi.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "smi.h"
-#include "kaa.h"
-#include <sys/io.h>
-
-static Bool
-smiCardInit (KdCardInfo *card)
-{
- SmiCardInfo *smic;
-
- ENTER ();
- smic = (SmiCardInfo *) xalloc (sizeof (SmiCardInfo));
- if (!smic)
- return FALSE;
- memset (smic, '\0', sizeof (SmiCardInfo));
-
- (void) smiMapReg (card, smic);
-
- if (!subInitialize (card, &smic->sub))
- {
- xfree (smic);
- return FALSE;
- }
-
- card->driver = smic;
- LEAVE();
- return TRUE;
-}
-
-static Bool
-smiScreenInit (KdScreenInfo *screen)
-{
- SmiCardInfo *smic = screen->card->driver;
- SmiScreenInfo *smis;
-
- ENTER();
- smis = (SmiScreenInfo *) xalloc (sizeof (SmiScreenInfo));
- if (!smis)
- return FALSE;
- memset (smis, '\0', sizeof (SmiScreenInfo));
- screen->driver = smis;
- if (!subScreenInitialize (screen, &smis->sub))
- {
- xfree (smis);
- return FALSE;
- }
- if (!smic->reg_base)
- screen->dumb = TRUE;
- screen->softCursor = TRUE;
-#if SMI_VESA
- smis->screen = smis->sub.fb;
-#else
- smis->screen = smic->sub.fb;
-#endif
- LEAVE();
- return TRUE;
-}
-
-static Bool
-smiInitScreen (ScreenPtr pScreen)
-{
- Bool ret;
- ENTER ();
-#if 0
-#ifdef XV
- KdScreenPriv(pScreen);
- SmiCardInfo *smic = pScreenPriv->screen->card->driver;
- if (smic->media_reg && smic->reg)
- smiInitVideo(pScreen);
-#endif
-#endif
- ret = subInitScreen (pScreen);
- LEAVE();
- return ret;
-}
-
-#ifdef RANDR
-static Bool
-smiRandRSetConfig (ScreenPtr pScreen,
- Rotation randr,
- int rate,
- RRScreenSizePtr pSize)
-{
- Bool ret;
-
- ENTER ();
- kaaWaitSync (pScreen);
-
- ret = subRandRSetConfig (pScreen, randr, rate, pSize);
- LEAVE();
- return ret;
-}
-
-static Bool
-smiRandRInit (ScreenPtr pScreen)
-{
- rrScrPriv(pScreen);
-
- ENTER ();
- pScrPriv->rrSetConfig = smiRandRSetConfig;
- LEAVE ();
- return TRUE;
-}
-#endif
-
-static Bool
-smiFinishInitScreen (ScreenPtr pScreen)
-{
- Bool ret;
- ret = subFinishInitScreen (pScreen);
-#ifdef RANDR
- smiRandRInit (pScreen);
-#endif
- return ret;
-}
-
-void
-smiPreserve (KdCardInfo *card)
-{
- ENTER ();
- subPreserve(card);
- LEAVE();
-}
-
-Bool
-smiMapReg (KdCardInfo *card, SmiCardInfo *smic)
-{
- ENTER ();
- smic->io_base = 0; /* only handles one SMI card at standard VGA address */
- smic->reg_base = (CARD8 *) KdMapDevice (SMI_REG_BASE(card),
- SMI_REG_SIZE(card));
-
- if (!smic->reg_base)
- {
- smic->dpr = 0;
- return FALSE;
- }
-
- KdSetMappedMode (SMI_REG_BASE(card),
- SMI_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- smic->dpr = (DPR *) (smic->reg_base + SMI_DPR_OFF(card));
- LEAVE ();
- return TRUE;
-}
-
-void
-smiUnmapReg (KdCardInfo *card, SmiCardInfo *smic)
-{
- ENTER ();
- if (smic->reg_base)
- {
- KdResetMappedMode (SMI_REG_BASE(card),
- SMI_REG_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- KdUnmapDevice ((void *) smic->reg_base, SMI_REG_SIZE(card));
- smic->reg_base = 0;
- smic->dpr = 0;
- }
- LEAVE ();
-}
-
-void
-smiOutb (CARD16 port, CARD8 val)
-{
- asm volatile ("outb %b0,%w1" : : "a" (val), "d" (port));
-}
-
-CARD8
-smiInb (CARD16 port)
-{
- CARD8 v;
- asm volatile ("inb %w1,%b0" : "=a" (v) : "d" (port));
- return v;
-}
-
-CARD8
-smiGetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id)
-{
- smiOutb (smic->io_base + addr, id);
- return smiInb (smic->io_base + data);
-}
-
-void
-smiSetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id, CARD8 val)
-{
- smiOutb (smic->io_base + addr, id);
- smiOutb (smic->io_base + data, val);
-}
-
-void
-smiSetMMIO (KdCardInfo *card, SmiCardInfo *smic)
-{
- ENTER ();
- if (!smic->reg_base)
- smiMapReg (card, smic);
- LEAVE();
-}
-
-void
-smiResetMMIO (KdCardInfo *card, SmiCardInfo *smic)
-{
- smiUnmapReg (card, smic);
-}
-
-static Bool
-smiDPMS (ScreenPtr pScreen, int mode)
-{
- Bool ret;
- ENTER ();
- ret = subDPMS (pScreen, mode);
- LEAVE ();
- return ret;
-}
-
-Bool
-smiEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- SmiCardInfo *smic = pScreenPriv->card->driver;
-
- ENTER ();
- iopl (3);
- if (!subEnable (pScreen))
- return FALSE;
-
- smiSetMMIO (pScreenPriv->card, smic);
- smiDPMS (pScreen, KD_DPMS_NORMAL);
-#if 0
-#ifdef XV
- KdXVEnable (pScreen);
-#endif
-#endif
- LEAVE ();
- return TRUE;
-}
-
-void
-smiDisable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- SmiCardInfo *smic = pScreenPriv->card->driver;
-
- ENTER ();
-#if 0
-#ifdef XV
- KdXVDisable (pScreen);
-#endif
-#endif
- smiResetMMIO (pScreenPriv->card, smic);
- subDisable (pScreen);
- LEAVE ();
-}
-
-static void
-smiRestore (KdCardInfo *card)
-{
- ENTER ();
- subRestore (card);
- LEAVE();
-}
-
-static void
-smiScreenFini (KdScreenInfo *screen)
-{
- SmiScreenInfo *smis = (SmiScreenInfo *) screen->driver;
-
- ENTER ();
- subScreenFini (screen);
- xfree (smis);
- screen->driver = 0;
- LEAVE ();
-}
-
-static void
-smiCardFini (KdCardInfo *card)
-{
- SmiCardInfo *smic = card->driver;
-
- ENTER ();
- smiUnmapReg (card, smic);
- subCardFini (card);
- LEAVE ();
-}
-
-#define smiCursorInit 0 /* initCursor */
-#define smiCursorEnable 0 /* enableCursor */
-#define smiCursorDisable 0 /* disableCursor */
-#define smiCursorFini 0 /* finiCursor */
-#define smiRecolorCursor 0 /* recolorCursor */
-
-KdCardFuncs smiFuncs = {
- smiCardInit, /* cardinit */
- smiScreenInit, /* scrinit */
- smiInitScreen, /* initScreen */
- smiFinishInitScreen, /* finishInitScreen */
- subCreateResources, /* createRes */
- smiPreserve, /* preserve */
- smiEnable, /* enable */
- smiDPMS, /* dpms */
- smiDisable, /* disable */
- smiRestore, /* restore */
- smiScreenFini, /* scrfini */
- smiCardFini, /* cardfini */
-
- smiCursorInit, /* initCursor */
- smiCursorEnable, /* enableCursor */
- smiCursorDisable, /* disableCursor */
- smiCursorFini, /* finiCursor */
- smiRecolorCursor, /* recolorCursor */
-
- smiDrawInit, /* initAccel */
- smiDrawEnable, /* enableAccel */
- smiDrawDisable, /* disableAccel */
- smiDrawFini, /* finiAccel */
-
- subGetColors, /* getColors */
- subPutColors, /* putColors */
-};
diff --git a/hw/kdrive/smi/smi.h b/hw/kdrive/smi/smi.h
deleted file mode 100644
index ef0fd110a..000000000
--- a/hw/kdrive/smi/smi.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _SMI_H_
-#define _SMI_H_
-
-#define SMI_VESA 0
-
-#if SMI_VESA
-#include <vesa.h>
-#define subGetColors vesaGetColors
-#define subPutColors vesaPutColors
-#define subInitialize vesaInitialize
-#define subScreenInitialize vesaScreenInitialize
-#define subInitScreen vesaInitScreen
-#define subFinishInitScreen vesaFinishInitScreen
-#define subCreateResources vesaCreateResources
-#define subRandRSetConfig vesaRandRSetConfig
-#define subPreserve vesaPreserve
-#define subEnable vesaEnable
-#define subDPMS vesaDPMS
-#define subRestore vesaRestore
-#define subScreenFini vesaScreenFini
-#define subCardFini vesaCardFini
-#define subDisable vesaDisable
-#define SubCardPrivRec VesaCardPrivRec
-#define SubScreenPrivRec VesaScreenPrivRec
-#define subUseMsg() vesaUseMsg()
-#define subProcessArgument(c,v,i) vesaProcessArgument(c,v,i)
-#else
-#include <fbdev.h>
-#define subGetColors fbdevGetColors
-#define subPutColors fbdevPutColors
-#define subInitialize fbdevInitialize
-#define subScreenInitialize fbdevScreenInitialize
-#define subInitScreen fbdevInitScreen
-#define subFinishInitScreen fbdevFinishInitScreen
-#define subCreateResources fbdevCreateResources
-#define subRandRSetConfig fbdevRandRSetConfig
-#define subPreserve fbdevPreserve
-#define subEnable fbdevEnable
-#define subDPMS fbdevDPMS
-#define subRestore fbdevRestore
-#define subScreenFini fbdevScreenFini
-#define subCardFini fbdevCardFini
-#define subDisable fbdevDisable
-#define SubCardPrivRec FbdevPriv
-#define SubScreenPrivRec FbdevScrPriv
-#define subUseMsg()
-#define subProcessArgument(c,v,i) 0
-#endif
-
-#include "kxv.h"
-
-#define SMI_DEBUG 0
-#if SMI_DEBUG
-#define DBGOUT(fmt,a...) fprintf (stderr, fmt, ##a)
-#else
-#define DBGOUT(fmt,a...)
-#endif
-
-#define ENTER() DBGOUT("Enter %s\n", __FUNCTION__)
-#define LEAVE() DBGOUT("Leave %s\n", __FUNCTION__)
-
-/*
- * offset from ioport beginning
- */
-
-#define SMI_IO_BASE(c) ((c)->attr.io)
-#define SMI_REG_BASE(c) ((c)->attr.address[0])
-#define SMI_REG_SIZE(c) (4096)
-
-#define SMI_DPR_OFF(c) (0x00000)
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-/* DPR reg */
-typedef struct _DPR {
- VOL32 src_xy; /* 0x00 */
- VOL32 dst_xy; /* 0x04 */
- VOL32 dst_wh; /* 0x08 */
- VOL32 accel_cmd; /* 0x0c */
- VOL32 src_stride; /* 0x10 */
- VOL32 fg; /* 0x14 */
- VOL32 bg; /* 0x18 */
- VOL32 data_format; /* 0x1c */
- VOL32 transparent; /* 0x20 */
- VOL32 mask1; /* 0x24 ? */
- VOL32 mask2; /* 0x28 ? */
- VOL32 scissors_ul; /* 0x2c */
- VOL32 scissors_lr; /* 0x30 */
- VOL32 mask3; /* 0x34 */
- VOL32 mask4; /* 0x38 */
- VOL32 dst_stride; /* 0x3c */
- VOL32 unknown_40; /* 0x40 */
- VOL32 unknown_44; /* 0x44 */
-} DPR;
-
-#define SMI_XY(x,y) (((y) & 0x7fff) | (((x) & 0x7fff) << 16))
-
-/* 2D Engine commands */
-#define SMI_TRANSPARENT_SRC 0x00000100
-#define SMI_TRANSPARENT_DEST 0x00000300
-
-#define SMI_OPAQUE_PXL 0x00000000
-#define SMI_TRANSPARENT_PXL 0x00000400
-
-#define SMI_MONO_PACK_8 0x00001000
-#define SMI_MONO_PACK_16 0x00002000
-#define SMI_MONO_PACK_32 0x00003000
-
-#define SMI_ROP2_SRC 0x00008000
-#define SMI_ROP2_PAT 0x0000C000
-#define SMI_ROP3 0x00000000
-
-#define SMI_BITBLT 0x00000000
-#define SMI_RECT_FILL 0x00010000
-#define SMI_TRAPEZOID_FILL 0x00030000
-#define SMI_SHORT_STROKE 0x00060000
-#define SMI_BRESENHAM_LINE 0x00070000
-#define SMI_HOSTBLT_WRITE 0x00080000
-#define SMI_HOSTBLT_READ 0x00090000
-#define SMI_ROTATE_BLT 0x000B0000
-
-#define SMI_SRC_COLOR 0x00000000
-#define SMI_SRC_MONOCHROME 0x00400000
-
-#define SMI_GRAPHICS_STRETCH 0x00800000
-
-#define SMI_ROTATE_CW 0x01000000
-#define SMI_ROTATE_CCW 0x02000000
-
-#define SMI_MAJOR_X 0x00000000
-#define SMI_MAJOR_Y 0x04000000
-
-#define SMI_LEFT_TO_RIGHT 0x00000000
-#define SMI_RIGHT_TO_LEFT 0x08000000
-
-#define SMI_COLOR_PATTERN 0x40000000
-#define SMI_MONO_PATTERN 0x00000000
-
-#define SMI_QUICK_START 0x10000000
-#define SMI_START_ENGINE 0x80000000
-
-#define VGA_SEQ_INDEX 0x3C4
-#define VGA_SEQ_DATA 0x3C5
-
-typedef struct _smiCardInfo {
- SubCardPrivRec sub;
- CARD16 io_base;
- CARD8 *reg_base;
- DPR *dpr;
- int avail;
-} SmiCardInfo;
-
-#define getSmiCardInfo(kd) ((SmiCardInfo *) ((kd)->card->driver))
-#define smiCardInfo(kd) SmiCardInfo *smic = getSmiCardInfo(kd)
-
-typedef struct _smiScreenInfo {
- SubScreenPrivRec sub;
- CARD8 *screen;
- CARD32 stride;
- CARD32 data_format;
- CARD8 dpr_vpr_enable;
- KaaScreenInfoRec kaa;
-} SmiScreenInfo;
-
-#define getSmiScreenInfo(kd) ((SmiScreenInfo *) ((kd)->screen->driver))
-#define smiScreenInfo(kd) SmiScreenInfo *smis = getSmiScreenInfo(kd)
-
-void
-smiPreserve (KdCardInfo *card);
-
-Bool
-smiMapReg (KdCardInfo *card, SmiCardInfo *smic);
-
-void
-smiUnmapReg (KdCardInfo *card, SmiCardInfo *smic);
-
-void
-smiOutb (CARD16 port, CARD8 val);
-
-CARD8
-smiInb (CARD16 port);
-
-CARD8
-smiGetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id);
-
-void
-smiSetIndex (SmiCardInfo *smic, CARD16 addr, CARD16 data, CARD8 id, CARD8 val);
-
-void
-smiSetMMIO (KdCardInfo *card, SmiCardInfo *smic);
-
-void
-smiResetMMIO (KdCardInfo *card, SmiCardInfo *smic);
-
-Bool
-smiEnable (ScreenPtr pScreen);
-
-void
-smiDisable (ScreenPtr pScreen);
-
-void
-smiWaitAvail(SmiCardInfo *smic, int n);
-
-void
-smiWaitIdle (SmiCardInfo *smic);
-
-Bool
-smiDrawSetup (ScreenPtr pScreen);
-
-Bool
-smiDrawInit (ScreenPtr pScreen);
-
-void
-smiDrawReinit (ScreenPtr pScreen);
-
-void
-smiDrawEnable (ScreenPtr pScreen);
-
-void
-smiDrawDisable (ScreenPtr pScreen);
-
-void
-smiDrawFini (ScreenPtr pScreen);
-
-CARD8
-smiReadIndex (SmiCardInfo *smic, CARD16 port, CARD8 index);
-
-void
-smiWriteIndex (SmiCardInfo *smic, CARD16 port, CARD8 index, CARD8 value);
-
-extern KdCardFuncs smiFuncs;
-
-#endif /* _SMI_H_ */
diff --git a/hw/kdrive/smi/smidraw.c b/hw/kdrive/smi/smidraw.c
deleted file mode 100644
index ba4e3904d..000000000
--- a/hw/kdrive/smi/smidraw.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "smi.h"
-#include "smidraw.h"
-
-#include <X11/Xmd.h>
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-#include "picturestr.h"
-#include "kaa.h"
-
-CARD8 smiBltRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0x88, /* src AND dst */
- /* GXandReverse */ 0x44, /* src AND NOT dst */
- /* GXcopy */ 0xcc, /* src */
- /* GXandInverted*/ 0x22, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x66, /* src XOR dst */
- /* GXor */ 0xee, /* src OR dst */
- /* GXnor */ 0x11, /* NOT src AND NOT dst */
- /* GXequiv */ 0x99, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xdd, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x33, /* NOT src */
- /* GXorInverted */ 0xbb, /* NOT src OR dst */
- /* GXnand */ 0x77, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-CARD8 smiSolidRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0xa0, /* src AND dst */
- /* GXandReverse */ 0x50, /* src AND NOT dst */
- /* GXcopy */ 0xf0, /* src */
- /* GXandInverted*/ 0x0a, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x5a, /* src XOR dst */
- /* GXor */ 0xfa, /* src OR dst */
- /* GXnor */ 0x05, /* NOT src AND NOT dst */
- /* GXequiv */ 0xa5, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xf5, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x0f, /* NOT src */
- /* GXorInverted */ 0xaf, /* NOT src OR dst */
- /* GXnand */ 0x5f, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-
-#define GET_STATUS(smic) smiGetIndex (smic, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x16)
-
-#define ENGINE_IDLE_EMPTY(smic) ((GET_STATUS(smic) & 0x18) == 0x10)
-#define FIFO_EMPTY(smic) ((GET_STATUS(smic) & 0x10) == 0x10)
-
-#define MAX_FIFO 16
-
-void
-smiWaitAvail(SmiCardInfo *smic, int n)
-{
- if (smic->avail < n)
- {
- while (!FIFO_EMPTY (smic))
- ;
- smic->avail = MAX_FIFO;
- }
- smic->avail -= n;
-}
-
-void
-smiWaitIdle (SmiCardInfo *smic)
-{
- while (!ENGINE_IDLE_EMPTY (smic))
- ;
- smic->avail = MAX_FIFO;
-}
-
-static SmiCardInfo *smic;
-static SmiScreenInfo *smis;
-static DPR *dpr;
-static CARD32 accel_cmd;
-
-static Bool
-smiSetup (ScreenPtr pScreen, int wait)
-{
- KdScreenPriv(pScreen);
-
- smis = getSmiScreenInfo (pScreenPriv);
- smic = getSmiCardInfo(pScreenPriv);
- dpr = smic->dpr;
-
- if (!dpr)
- return FALSE;
-
- /* enable DPR/VPR registers */
- smiSetIndex (smic, VGA_SEQ_INDEX, VGA_SEQ_DATA, 0x21,
- smis->dpr_vpr_enable);
-
- smiWaitAvail (smic, wait + 9);
- dpr->src_stride = (smis->stride << 16) | smis->stride;
- dpr->data_format = smis->data_format;
- dpr->mask1 = 0xffffffff;
- dpr->mask2 = 0xffffffff;
- dpr->dst_stride = (smis->stride << 16) | smis->stride;
- dpr->unknown_40 = 0x0;
- dpr->unknown_44 = 0x0;
- dpr->scissors_ul = 0x0;
- dpr->scissors_lr = SMI_XY(4095,4095);
-
- return TRUE;
-}
-
-static void
-smiWaitMarker (ScreenPtr pScreen, int marker)
-{
- KdScreenPriv(pScreen);
- smic = getSmiCardInfo(pScreenPriv);
-
- smiWaitIdle (smic);
-}
-
-static Bool
-smiPrepareSolid (PixmapPtr pPixmap,
- int alu,
- Pixel pm,
- Pixel fg)
-{
- if (~pm & FbFullMask(pPixmap->drawable.depth))
- return FALSE;
-
- if (!smiSetup (pPixmap->drawable.pScreen, 3))
- return FALSE;
-
- accel_cmd = smiSolidRop[alu] | SMI_BITBLT | SMI_START_ENGINE;
- dpr->fg = fg;
- dpr->mask3 = 0xffffffff;
- dpr->mask4 = 0xffffffff;
- return TRUE;
-}
-
-static void
-smiSolid (int x1, int y1, int x2, int y2)
-{
- smiWaitAvail(smic,3);
- dpr->dst_xy = SMI_XY(x1,y1);
- dpr->dst_wh = SMI_XY(x2-x1,y2-y1);
- dpr->accel_cmd = accel_cmd;
-}
-
-static void
-smiDoneSolid (void)
-{
-}
-
-static int copyDx;
-static int copyDy;
-
-static Bool
-smiPrepareCopy (PixmapPtr pSrcPixmap,
- PixmapPtr pDstPixmap,
- int dx,
- int dy,
- int alu,
- Pixel pm)
-{
- if (~pm & FbFullMask(pSrcPixmap->drawable.depth))
- return FALSE;
-
- if (!smiSetup (pSrcPixmap->drawable.pScreen, 0))
- return FALSE;
-
- accel_cmd = smiBltRop[alu] | SMI_BITBLT | SMI_START_ENGINE;
-
- copyDx = dx;
- copyDy = dy;
- if (dy < 0 || (dy == 0 && dx < 0))
- accel_cmd |= SMI_RIGHT_TO_LEFT;
- return TRUE;
-}
-
-static void
-smiCopy (int srcX,
- int srcY,
- int dstX,
- int dstY,
- int w,
- int h)
-{
- if (accel_cmd & SMI_RIGHT_TO_LEFT)
- {
- srcX += w - 1;
- dstX += w - 1;
- srcY += h - 1;
- dstY += h - 1;
- }
- smiWaitAvail (smic, 4);
- dpr->src_xy = SMI_XY (srcX, srcY);
- dpr->dst_xy = SMI_XY (dstX, dstY);
- dpr->dst_wh = SMI_XY (w, h);
- dpr->accel_cmd = accel_cmd;
-}
-
-static void
-smiDoneCopy (void)
-{
-}
-
-
-Bool
-smiDrawInit (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- smiCardInfo (pScreenPriv);
-
- ENTER ();
- if (pScreenPriv->screen->fb[0].depth == 4)
- {
- LEAVE ();
- return FALSE;
- }
-
- if (!smic->dpr)
- {
- LEAVE ();
- return FALSE;
- }
-
- memset(&smis->kaa, 0, sizeof(KaaScreenInfoRec));
- smis->kaa.PrepareSolid = smiPrepareSolid;
- smis->kaa.Solid = smiSolid;
- smis->kaa.DoneSolid = smiDoneSolid;
- smis->kaa.PrepareCopy = smiPrepareCopy;
- smis->kaa.Copy = smiCopy;
- smis->kaa.DoneCopy = smiDoneCopy;
- smis->kaa.waitMarker = smiWaitMarker;
-
- if (!kaaDrawInit (pScreen, &smis->kaa))
- {
- LEAVE ();
- return FALSE;
- }
-
- LEAVE ();
- return TRUE;
-}
-
-void
-smiDrawEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- int i;
- static const int xyAddress[] = { 320, 400, 512, 640, 800, 1024, 1280, 1600, 2048 };
-
- ENTER ();
- smis = getSmiScreenInfo (pScreenPriv);
- smic = getSmiCardInfo(pScreenPriv);
- dpr = smic->dpr;
-
- smis->stride = pScreenPriv->screen->fb[0].byteStride;
- smis->dpr_vpr_enable = smiGetIndex (smic, VGA_SEQ_INDEX,
- VGA_SEQ_DATA, 0x21) & ~0x03;
-
- switch (pScreenPriv->screen->fb[0].depth) {
- case 8:
- smis->data_format = 0x00000000;
- break;
- case 15:
- case 16:
- smis->data_format = 0x00100000;
- smis->stride >>= 1;
- break;
- case 24:
- smis->data_format = 0x00300000;
- break;
- case 32:
- smis->data_format = 0x00200000;
- smis->stride >>= 2;
- break;
- }
- for (i = 0; i < sizeof(xyAddress) / sizeof(xyAddress[0]); i++)
- {
- if (xyAddress[i] == pScreenPriv->screen->fb[0].pixelStride)
- {
- smis->data_format |= i << 16;
- break;
- }
- }
-
- smiSetup (pScreen, 0);
- kaaMarkSync (pScreen);
- LEAVE ();
-}
-
-void
-smiDrawDisable (ScreenPtr pScreen)
-{
- ENTER ();
- smic = 0;
- smis = 0;
- dpr = 0;
- accel_cmd = 0;
- LEAVE ();
-}
-
-void
-smiDrawFini (ScreenPtr pScreen)
-{
- ENTER ();
- LEAVE ();
-}
diff --git a/hw/kdrive/smi/smidraw.h b/hw/kdrive/smi/smidraw.h
deleted file mode 100644
index 4165c7406..000000000
--- a/hw/kdrive/smi/smidraw.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _SMIDRAW_H_
-#define _SMIDRAW_H_
-
-#define SetupSmi(s) KdScreenPriv(s); \
- smiCardInfo(pScreenPriv); \
- Cop *cop = smic->cop
-
-#define SmiAlpha (COP_MULTI_ALPHA|COP_ALPHA_WRITE_ENABLE)
-
-#define _smiInit(cop,smic) { \
- if ((cop)->status == 0xffffffff) smiSetMMIO(smic); \
- (cop)->multi = (smic)->cop_depth; \
- (cop)->multi = (smic)->cop_stride; \
- (cop)->multi = SmiAlpha; \
-} \
-
-#define _smiSetSolidRect(cop,pix,alu,cmd) {\
- cop->multi = COP_MULTI_PATTERN; \
- cop->multi = COP_MULTI_ROP | smiRop[alu]; \
- cop->fg = (pix); \
- cmd = COP_OP_BLT | COP_SCL_OPAQUE | COP_OP_ROP | COP_OP_FG; \
-}
-
-#define _smiRect(cop,x1,y1,x2,y2,cmd) { \
- (cop)->dst_start_xy = TRI_XY (x1,y1); \
- (cop)->dst_end_xy = TRI_XY(x2,y2); \
- _smiWaitDone(cop); \
- (cop)->command = (cmd); \
-}
-
-#define COP_STATUS_BUSY (COP_STATUS_BE_BUSY | \
- COP_STATUS_DPE_BUSY | \
- COP_STATUS_MI_BUSY)
-
-#define _smiWaitDone(cop) { \
- int __q__ = 500000; \
- while (__q__-- && (cop)->status & COP_STATUS_BUSY) \
- ; \
- if (!__q__) \
- (cop)->status = 0; \
-}
-
-#define _smiWaitIdleEmpty(cop) _smiWaitDone(cop)
-
-#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3))
-
-#endif
diff --git a/hw/kdrive/smi/smistub.c b/hw/kdrive/smi/smistub.c
deleted file mode 100644
index 59faf2839..000000000
--- a/hw/kdrive/smi/smistub.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "smi.h"
-#include "klinux.h"
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
-
- if (LinuxFindPci (0x126f, 0x0720, 0, &attr))
- KdCardInfoAdd (&smiFuncs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
- subUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- if (!(ret = subProcessArgument (argc, argv, i)))
- ret = KdProcessArgument(argc, argv, i);
- return ret;
-}
diff --git a/hw/kdrive/smi/smivideo.c b/hw/kdrive/smi/smivideo.c
deleted file mode 100644
index f372498c0..000000000
--- a/hw/kdrive/smi/smivideo.c
+++ /dev/null
@@ -1,1015 +0,0 @@
-/*
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "mach64.h"
-
-#include "Xv.h"
-#include "../../xfree86/common/fourcc.h"
-
-#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
-
-static Atom xvBrightness, xvSaturation, xvColorKey;
-
-#define IMAGE_MAX_WIDTH 720
-#define IMAGE_MAX_HEIGHT 576
-
-static void
-mach64StopVideo(KdScreenInfo *screen, pointer data, Bool exit)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
- Reg *reg = mach64c->reg;
- MediaReg *media = mach64c->media_reg;
-
- REGION_EMPTY(screen->pScreen, &pPortPriv->clip);
-
- if (!media)
- return;
-
- if(pPortPriv->videoOn)
- {
- mach64WaitIdle (reg);
- /* wait for buffer to be displayed */
- while (((media->TRIG_CNTL >> 5) & 1) != pPortPriv->currentBuf)
- ;
- /* wait for buffer to be finished */
- while (((media->TRIG_CNTL >> 6) & 1) != 0)
- ;
- mach64WaitAvail (reg, 1);
- media->OVERLAY_SCALE_CNTL = 0;
- pPortPriv->videoOn = FALSE;
- mach64WaitIdle (reg);
- }
-}
-
-static int
-mach64SetPortAttribute(KdScreenInfo *screen,
- Atom attribute,
- int value,
- pointer data)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
- MediaReg *media = mach64c->media_reg;
-
- if(attribute == xvBrightness)
- {
- if(value < -1000)
- value = -1000;
- if (value > 1000)
- value = 1000;
- pPortPriv->brightness = value;
- }
- else if(attribute == xvSaturation)
- {
- if (value < -1000)
- value = -1000;
- if (value > 1000)
- value = 1000;
- pPortPriv->saturation = value;
- }
- else if(attribute == xvColorKey)
- {
- if (pPortPriv->colorKey != value)
- {
- pPortPriv->colorKey = value;
- REGION_EMPTY(screen->pScreen, &pPortPriv->clip);
- }
- }
- else
- return BadMatch;
-
- return Success;
-}
-
-static int
-mach64GetPortAttribute(KdScreenInfo *screen,
- Atom attribute,
- int *value,
- pointer data)
-{
- Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)data;
-
- if(attribute == xvBrightness)
- *value = pPortPriv->brightness;
- else if(attribute == xvSaturation)
- *value = pPortPriv->saturation;
- else if(attribute == xvColorKey)
- *value = pPortPriv->colorKey;
- else
- return BadMatch;
-
- return Success;
-}
-
-static void
-mach64QueryBestSize(KdScreenInfo *screen,
- Bool motion,
- short vid_w,
- short vid_h,
- short drw_w,
- short drw_h,
- unsigned int *p_w,
- unsigned int *p_h,
- pointer data)
-{
- *p_w = drw_w;
- *p_h = drw_h;
-}
-
-
-static void
-mach64CopyPackedData(KdScreenInfo *screen,
- unsigned char *buf,
- int randr,
- int srcPitch,
- int dstPitch,
- int srcW,
- int srcH,
- int top,
- int left,
- int h,
- int w)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
- CARD8 *src, *dst;
- int srcDown, srcRight, srcNext;
- int p;
-
- switch (randr & RR_Rotate_All) {
- case RR_Rotate_0:
- src = buf;
- srcDown = srcPitch;
- srcRight = 2;
- break;
- case RR_Rotate_90:
- src = buf + (srcH - 1) * 2;
- srcDown = -2;
- srcRight = srcPitch;
- break;
- case RR_Rotate_180:
- src = buf + srcPitch * (srcH - 1) + (srcW - 1) * 2;
- srcDown = -srcPitch;
- srcRight = -2;
- break;
- case RR_Rotate_270:
- src = buf + srcPitch * (srcW - 1);
- srcDown = 2;
- srcRight = -srcPitch;
- break;
- }
-
- src = src + top*srcDown + left*srcRight;
-
- if (pPortPriv->currentBuf == 0)
- dst = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf0Offset;
- else
- dst = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf1Offset;
-
- w >>= 1;
- srcRight >>= 1;
- srcNext = srcRight >> 1;
- while(h--)
- {
- CARD16 *s = (CARD16 *) src;
- CARD32 *d = (CARD32 *) dst;
- p = w;
- while (p--)
- {
- *d++ = s[0] | (s[srcNext] << 16);
- s += srcRight;
- }
- src += srcPitch;
- dst += dstPitch;
- }
-}
-
-static void
-mach64CopyPlanarData(KdScreenInfo *screen,
- unsigned char *buf,
- int randr,
- int srcPitch,
- int srcPitch2,
- int dstPitch, /* of chroma */
- int srcW,
- int srcH,
- int height,
- int top,
- int left,
- int h,
- int w,
- int id)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
- int i, j;
- CARD8 *src1, *src2, *src3, *dst1;
- int srcDown, srcDown2, srcRight, srcRight2, srcNext;
-
- /* compute source data pointers */
- src1 = buf;
- src2 = src1 + height * srcPitch;
- src3 = src2 + (height >> 1) * srcPitch2;
- switch (randr & RR_Rotate_All) {
- case RR_Rotate_0:
- srcDown = srcPitch;
- srcDown2 = srcPitch2;
- srcRight = 2;
- srcRight2 = 1;
- srcNext = 1;
- break;
- case RR_Rotate_90:
- src1 = src1 + srcH - 1;
- src2 = src2 + (srcH >> 1) - 1;
- src3 = src3 + (srcH >> 1) - 1;
- srcDown = -1;
- srcDown2 = -1;
- srcRight = srcPitch * 2;
- srcRight2 = srcPitch2;
- srcNext = srcPitch;
- break;
- case RR_Rotate_180:
- src1 = src1 + srcPitch * (srcH - 1) + (srcW - 1);
- src2 = src2 + srcPitch2 * ((srcH >> 1) - 1) + ((srcW >> 1) - 1);
- src3 = src3 + srcPitch2 * ((srcH >> 1) - 1) + ((srcW >> 1) - 1);
- srcDown = -srcPitch;
- srcDown2 = -srcPitch2;
- srcRight = -2;
- srcRight2 = -1;
- srcNext = -1;
- break;
- case RR_Rotate_270:
- src1 = src1 + srcPitch * (srcW - 1);
- src2 = src2 + srcPitch2 * ((srcW >> 1) - 1);
- src3 = src3 + srcPitch2 * ((srcW >> 1) - 1);
- srcDown = 1;
- srcDown2 = 1;
- srcRight = -srcPitch * 2;
- srcRight2 = -srcPitch2;
- srcNext = -srcPitch;
- break;
- }
-
- /* adjust for origin */
- src1 += top * srcDown + left * srcNext;
- src2 += (top >> 1) * srcDown2 + (left >> 1) * srcRight2;
- src3 += (top >> 1) * srcDown2 + (left >> 1) * srcRight2;
-
- if (id == FOURCC_I420)
- {
- CARD8 *srct = src2;
- src2 = src3;
- src3 = srct;
- }
-
- if (pPortPriv->currentBuf == 0)
- dst1 = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf0Offset;
- else
- dst1 = (CARD8 *) mach64s->vesa.fb + pPortPriv->YBuf1Offset;
-
- w >>= 1;
- for (j = 0; j < h; j++)
- {
- CARD32 *dst = (CARD32 *) dst1;
- CARD8 *s1l = src1;
- CARD8 *s1r = src1 + srcNext;
- CARD8 *s2 = src2;
- CARD8 *s3 = src3;
-
- for (i = 0; i < w; i++)
- {
- *dst++ = *s1l | (*s1r << 16) | (*s3 << 8) | (*s2 << 24);
- s1l += srcRight;
- s1r += srcRight;
- s2 += srcRight2;
- s3 += srcRight2;
- }
- src1 += srcDown;
- dst1 += dstPitch;
- if (j & 1)
- {
- src2 += srcDown2;
- src3 += srcDown2;
- }
- }
-}
-
-static void
-mach64PaintRegion (ScreenPtr pScreen, RegionPtr pRgn, Pixel fg)
-{
- WindowPtr pRoot = WindowTable[pScreen->myNum];
- GCPtr pGC;
- CARD32 val[2];
- xRectangle *rects, *r;
- BoxPtr pBox = REGION_RECTS (pRgn);
- int nBox = REGION_NUM_RECTS (pRgn);
-
- rects = xalloc (nBox * sizeof (xRectangle));
- if (!rects)
- goto bail0;
- r = rects;
- while (nBox--)
- {
- r->x = pBox->x1;
- r->y = pBox->y1;
- r->width = pBox->x2 - pBox->x1;
- r->height = pBox->y2 - pBox->y1;
- r++;
- pBox++;
- }
-
- pGC = GetScratchGC (pRoot->drawable.depth, pScreen);
- if (!pGC)
- goto bail1;
-
- val[0] = fg;
- val[1] = IncludeInferiors;
- ChangeGC (pGC, GCForeground|GCSubwindowMode, val);
-
- ValidateGC (&pRoot->drawable, pGC);
-
- (*pGC->ops->PolyFillRect) (&pRoot->drawable, pGC,
- REGION_NUM_RECTS (pRgn), rects);
-
- FreeScratchGC (pGC);
-bail1:
- xfree (rects);
-bail0:
- ;
-}
-
-/* Mach64ClipVideo -
-
- Takes the dst box in standard X BoxRec form (top and left
- edges inclusive, bottom and right exclusive). The new dst
- box is returned. The source boundaries are given (x1, y1
- inclusive, x2, y2 exclusive) and returned are the new source
- boundaries in 16.16 fixed point.
-*/
-
-static void
-Mach64ClipVideo(BoxPtr dst,
- INT32 *x1,
- INT32 *x2,
- INT32 *y1,
- INT32 *y2,
- BoxPtr extents, /* extents of the clip region */
- INT32 width,
- INT32 height)
-{
- INT32 vscale, hscale, delta;
- int diff;
-
- hscale = ((*x2 - *x1) << 16) / (dst->x2 - dst->x1);
- vscale = ((*y2 - *y1) << 16) / (dst->y2 - dst->y1);
-
- *x1 <<= 16; *x2 <<= 16;
- *y1 <<= 16; *y2 <<= 16;
-
- diff = extents->x1 - dst->x1;
- if(diff > 0) {
- dst->x1 = extents->x1;
- *x1 += diff * hscale;
- }
- diff = dst->x2 - extents->x2;
- if(diff > 0) {
- dst->x2 = extents->x2;
- *x2 -= diff * hscale;
- }
- diff = extents->y1 - dst->y1;
- if(diff > 0) {
- dst->y1 = extents->y1;
- *y1 += diff * vscale;
- }
- diff = dst->y2 - extents->y2;
- if(diff > 0) {
- dst->y2 = extents->y2;
- *y2 -= diff * vscale;
- }
-
- if(*x1 < 0) {
- diff = (- *x1 + hscale - 1)/ hscale;
- dst->x1 += diff;
- *x1 += diff * hscale;
- }
- delta = *x2 - (width << 16);
- if(delta > 0) {
- diff = (delta + hscale - 1)/ hscale;
- dst->x2 -= diff;
- *x2 -= diff * hscale;
- }
- if(*y1 < 0) {
- diff = (- *y1 + vscale - 1)/ vscale;
- dst->y1 += diff;
- *y1 += diff * vscale;
- }
- delta = *y2 - (height << 16);
- if(delta > 0) {
- diff = (delta + vscale - 1)/ vscale;
- dst->y2 -= diff;
- *y2 -= diff * vscale;
- }
-}
-
-static void
-mach64DisplayVideo(KdScreenInfo *screen,
- int id,
- int dstPitch, /* of chroma for 4:2:0 */
- int x1,
- int y1,
- int x2,
- int y2,
- int dst_x1,
- int dst_y1,
- int dst_x2,
- int dst_y2,
- short src_w,
- short src_h,
- short drw_w,
- short drw_h)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
- Reg *reg = mach64c->reg;
- MediaReg *media = mach64c->media_reg;
- int xscaleInt, xscaleFract, yscaleInt, yscaleFract;
- int xscaleIntUV = 0, xscaleFractUV = 0;
- int yscaleIntUV = 0, yscaleFractUV = 0;
- int randr = mach64s->vesa.randr;
- int HORZ_INC, VERT_INC;
- CARD32 SCALER_IN;
- CARD32 OVERLAY_SCALE_CNTL;
- int tmp;
- int left;
- int bright;
- int sat;
-
- if (id == FOURCC_UYVY)
- SCALER_IN = SCALER_IN_YVYU422;
- else
- SCALER_IN = SCALER_IN_VYUY422;
-
- mach64WaitAvail (reg, 4);
-
- media->VIDEO_FORMAT = SCALER_IN | VIDEO_IN_VYUY422;
-
- /* color key */
- media->OVERLAY_GRAPHICS_KEY_MSK = (1 << screen->fb[0].depth) - 1;
- media->OVERLAY_GRAPHICS_KEY_CLR = pPortPriv->colorKey;
- /* set key control to obey only graphics color key */
- media->OVERLAY_KEY_CNTL = 0x50;
-
- mach64WaitAvail (reg, 9);
- media->CAPTURE_DEBUG = 0;
- /* no exclusive video region */
- media->OVERLAY_EXCLUSIVE_HORZ = 0;
- media->OVERLAY_EXCLUSIVE_VERT = 0;
- /* scaling coefficients */
- media->SCALER_H_COEFF0 = 0x00002000;
- media->SCALER_H_COEFF1 = 0x0D06200D;
- media->SCALER_H_COEFF2 = 0x0D0A1C0D;
- media->SCALER_H_COEFF3 = 0x0C0E1A0C;
- media->SCALER_H_COEFF4 = 0x0C14140C;
- media->SCALER_TEST = 0;
-
- mach64WaitAvail (reg, 2);
- media->OVERLAY_SCALE_CNTL = (SCALE_PIX_EXPAND |
- SCALE_GAMMA_BRIGHT |
- SCALE_BANDWIDTH |
- SCALE_OVERLAY_EN |
- SCALE_EN);
-
- bright = (pPortPriv->brightness * 64 / 1000);
- if (bright < -0x40)
- bright = -0x40;
- if (bright > 0x3f)
- bright = 0x3f;
- bright = bright & 0x7f;
- sat = ((pPortPriv->saturation * 31 + 31000) / 2000);
- if (sat > 0x1f)
- sat = 0x1f;
- if (sat < 0)
- sat = 0;
-
- media->SCALER_COLOUR_CNTL = ((bright << 0) | /* BRIGHTNESS */
- (sat << 8) | /* SATURATION_U */
- (sat << 16) | /* SATURATION_V */
- (0 << 21) | /* SCALER_VERT_ADJ_UV */
- (0 << 28)); /* SCALER_HORZ_ADJ_UV */
-
- VERT_INC = (src_h << 12) / drw_h;
- HORZ_INC = (src_w << 12) / drw_w;
-
- mach64WaitAvail (reg, 13);
-
- /* lock registers to prevent non-atomic update */
- media->OVERLAY_Y_X_START = 0x80000000 | MACH64_YX (dst_x1, dst_y1);
- /* ending screen coordinate */
- media->OVERLAY_Y_X_END = 0x80000000 | MACH64_YX (dst_x2, dst_y2);
-
- media->OVERLAY_SCALE_INC = MACH64_YX(HORZ_INC, VERT_INC);
-
- media->SCALER_BUF0_OFFSET = pPortPriv->YBuf0Offset;
- media->SCALER_BUF1_OFFSET = pPortPriv->YBuf1Offset;
-
- media->SCALER_BUF0_OFFSET_U = pPortPriv->YBuf0Offset;
- media->SCALER_BUF1_OFFSET_U = pPortPriv->YBuf1Offset;
-
- media->SCALER_BUF0_OFFSET_V = pPortPriv->YBuf0Offset;
- media->SCALER_BUF1_OFFSET_V = pPortPriv->YBuf1Offset;
-
- media->SCALER_BUF_PITCH = dstPitch >> 1;
- media->SCALER_HEIGHT_WIDTH = MACH64_YX(src_w - (x1 >> 16), src_h - (y1 >> 16));
-
- media->CAPTURE_CONFIG = pPortPriv->currentBuf << 28;
-
- /* set XY location and unlock */
- media->OVERLAY_Y_X_START = MACH64_YX (dst_x1, dst_y1);
-}
-
-static int
-mach64PutImage(KdScreenInfo *screen,
- 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)
-{
- KdCardInfo *card = screen->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)data;
- Reg *reg = mach64c->reg;
- MediaReg *media = mach64c->media_reg;
- INT32 x1, x2, y1, y2;
- int randr = mach64s->vesa.randr;
- int srcPitch, srcPitch2, dstPitch;
- int top, left, npixels, nlines, size;
- BoxRec dstBox;
- int dst_width = width, dst_height = height;
- int rot_x1, rot_y1, rot_x2, rot_y2;
- int dst_x1, dst_y1, dst_x2, dst_y2;
- int rot_src_w, rot_src_h, rot_drw_w, rot_drw_h;
-
- /* Clip */
- x1 = src_x;
- x2 = src_x + src_w;
- y1 = src_y;
- y2 = src_y + src_h;
-
- dstBox.x1 = drw_x;
- dstBox.x2 = drw_x + drw_w;
- dstBox.y1 = drw_y;
- dstBox.y2 = drw_y + drw_h;
-
- Mach64ClipVideo(&dstBox, &x1, &x2, &y1, &y2,
- REGION_EXTENTS(pScreen, clipBoxes), width, height);
-
- if((x1 >= x2) || (y1 >= y2))
- return Success;
-
- if (!media)
- return BadAlloc;
-
- if (randr & (RR_Rotate_0|RR_Rotate_180))
- {
- dst_width = width;
- dst_height = height;
- rot_src_w = src_w;
- rot_src_h = src_h;
- rot_drw_w = drw_w;
- rot_drw_h = drw_h;
- }
- else
- {
- dst_width = height;
- dst_height = width;
- rot_src_w = src_h;
- rot_src_h = src_w;
- rot_drw_w = drw_h;
- rot_drw_h = drw_w;
- }
-
- switch (randr & RR_Rotate_All) {
- case RR_Rotate_0:
- dst_x1 = dstBox.x1;
- dst_y1 = dstBox.y1;
- dst_x2 = dstBox.x2;
- dst_y2 = dstBox.y2;
- rot_x1 = x1;
- rot_y1 = y1;
- rot_x2 = x2;
- rot_y2 = y2;
- break;
- case RR_Rotate_90:
- dst_x1 = dstBox.y1;
- dst_y1 = screen->height - dstBox.x2;
- dst_x2 = dstBox.y2;
- dst_y2 = screen->height - dstBox.x1;
-
- rot_x1 = y1;
- rot_y1 = (src_w << 16) - x2;
- rot_x2 = y2;
- rot_y2 = (src_w << 16) - x1;
- break;
- case RR_Rotate_180:
- dst_x1 = screen->width - dstBox.x2;
- dst_y1 = screen->height - dstBox.y2;
- dst_x2 = screen->width - dstBox.x1;
- dst_y2 = screen->height - dstBox.y1;
- rot_x1 = (src_w << 16) - x2;
- rot_y1 = (src_h << 16) - y2;
- rot_x2 = (src_w << 16) - x1;
- rot_y2 = (src_h << 16) - y1;
- break;
- case RR_Rotate_270:
- dst_x1 = screen->width - dstBox.y2;
- dst_y1 = dstBox.x1;
- dst_x2 = screen->width - dstBox.y1;
- dst_y2 = dstBox.x2;
- rot_x1 = (src_h << 16) - y2;
- rot_y1 = x1;
- rot_x2 = (src_h << 16) - y1;
- rot_y2 = x2;
- break;
- }
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- dstPitch = ((dst_width << 1) + 15) & ~15;
- srcPitch = (width + 3) & ~3;
- srcPitch2 = ((width >> 1) + 3) & ~3;
- size = dstPitch * (int) dst_height;
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- dstPitch = ((dst_width << 1) + 15) & ~15;
- srcPitch = (width << 1);
- size = dstPitch * (int) dst_height;
- break;
- }
-
- pPortPriv->offset = mach64s->off_screen - (CARD8 *) mach64s->vesa.fb;
- /* fixup pointers */
-
- pPortPriv->YBuf0Offset = pPortPriv->offset;
- pPortPriv->YBuf1Offset = pPortPriv->offset + size;
-
-#if 0
- mach64WaitIdle (reg);
-
- if (pPortPriv->videoOn)
- {
- /* wait for buffer to be displayed */
- while (((media->TRIG_CNTL >> 5) & 1) != pPortPriv->currentBuf)
- ;
- }
-#endif
- /*
- * Use the other buffer
- */
- pPortPriv->currentBuf = 1 - pPortPriv->currentBuf;
-
- /* copy data */
- top = rot_y1 >> 16;
- left = (rot_x1 >> 16) & ~1;
- npixels = ((((rot_x2 + 0xffff) >> 16) + 1) & ~1) - left;
-
- switch(id) {
- case FOURCC_YV12:
- case FOURCC_I420:
- top &= ~1;
- nlines = ((((rot_y2 + 0xffff) >> 16) + 1) & ~1) - top;
- mach64CopyPlanarData(screen, buf, randr,
- srcPitch, srcPitch2, dstPitch,
- rot_src_w, rot_src_h, height,
- top, left, nlines, npixels, id);
- break;
- case FOURCC_UYVY:
- case FOURCC_YUY2:
- default:
- nlines = ((rot_y2 + 0xffff) >> 16) - top;
- mach64CopyPackedData(screen, buf, randr,
- srcPitch, dstPitch,
- rot_src_w, rot_src_h,
- top, left, nlines,
- npixels);
- break;
- }
-
- mach64DisplayVideo(screen, id, dstPitch,
- rot_x1, rot_y1, rot_x2, rot_y2,
- dst_x1, dst_y1,
- dst_x2, dst_y2,
- rot_src_w, rot_src_h, rot_drw_w, rot_drw_h);
-
- /* update cliplist */
- if (!REGION_EQUAL (screen->pScreen, &pPortPriv->clip, clipBoxes))
- {
- REGION_COPY (screen->pScreen, &pPortPriv->clip, clipBoxes);
- mach64PaintRegion (screen->pScreen, &pPortPriv->clip, pPortPriv->colorKey);
- }
-
- pPortPriv->videoOn = TRUE;
-
- return Success;
-}
-
-static int
-mach64QueryImageAttributes(KdScreenInfo *screen,
- int id,
- unsigned short *w,
- unsigned short *h,
- int *pitches,
- int *offsets)
-{
- int size, tmp;
-
- if(*w > IMAGE_MAX_WIDTH)
- *w = IMAGE_MAX_WIDTH;
- if(*h > IMAGE_MAX_HEIGHT)
- *h = IMAGE_MAX_HEIGHT;
-
- *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;
-}
-
-
-/* client libraries expect an encoding */
-static KdVideoEncodingRec DummyEncoding[1] =
-{
- {
- 0,
- "XV_IMAGE",
- IMAGE_MAX_WIDTH, IMAGE_MAX_HEIGHT,
- {1, 1}
- }
-};
-
-#define NUM_FORMATS 3
-
-static KdVideoFormatRec Formats[NUM_FORMATS] =
-{
- {15, TrueColor}, {16, TrueColor}, {24, TrueColor}
-};
-
-#define NUM_ATTRIBUTES 3
-
-static KdAttributeRec Attributes[NUM_ATTRIBUTES] =
-{
- {XvSettable | XvGettable, 0, ~0, "XV_COLORKEY"},
- {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"},
- {XvSettable | XvGettable, -1000, 1000, "XV_SATURATION"}
-};
-
-#define NUM_IMAGES 4
-
-static KdImageRec Images[NUM_IMAGES] =
-{
- XVIMAGE_YUY2,
- XVIMAGE_YV12,
- XVIMAGE_I420,
- XVIMAGE_UYVY
-};
-
-static void mach64ResetVideo(KdScreenInfo *screen)
-{
- ScreenPtr pScreen = screen->pScreen;
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
- Mach64PortPrivPtr pPortPriv = mach64s->pAdaptor->pPortPrivates[0].ptr;
- MediaReg *media = mach64c->media_reg;
-
- /*
- * Default to maximum image size in YV12
- */
-
-}
-
-static int
-mach64ReputImage (KdScreenInfo *screen,
- short drw_x,
- short drw_y,
- RegionPtr clipBoxes,
- pointer data)
-{
- ScreenPtr pScreen = screen->pScreen;
- Mach64PortPrivPtr pPortPriv = (Mach64PortPrivPtr)data;
- BoxPtr pOldExtents = REGION_EXTENTS (pScreen, &pPortPriv->clip);
- BoxPtr pNewExtents = REGION_EXTENTS (pScreen, clipBoxes);
-
- if (pOldExtents->x1 == pNewExtents->x1 &&
- pOldExtents->x2 == pNewExtents->x2 &&
- pOldExtents->y1 == pNewExtents->y1 &&
- pOldExtents->y2 == pNewExtents->y2)
- {
- /* update cliplist */
- if (!REGION_EQUAL (screen->pScreen, &pPortPriv->clip, clipBoxes))
- {
- REGION_COPY (screen->pScreen, &pPortPriv->clip, clipBoxes);
- mach64PaintRegion (screen->pScreen, &pPortPriv->clip, pPortPriv->colorKey);
- }
- return Success;
- }
- return BadMatch;
-}
-
-static KdVideoAdaptorPtr
-mach64SetupImageVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- mach64CardInfo(pScreenPriv);
- mach64ScreenInfo(pScreenPriv);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdCardInfo *card = pScreenPriv->card;
- KdVideoAdaptorPtr adapt;
- Mach64PortPrivPtr pPortPriv;
-
- if(!(adapt = xcalloc(1, sizeof(KdVideoAdaptorRec) +
- sizeof(Mach64PortPrivRec) +
- sizeof(DevUnion))))
- return NULL;
-
- adapt->type = XvWindowMask | XvInputMask | XvImageMask;
- adapt->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
- adapt->name = "Mach64 Video Overlay";
- adapt->nEncodings = 1;
- adapt->pEncodings = DummyEncoding;
- adapt->nFormats = NUM_FORMATS;
- adapt->pFormats = Formats;
- adapt->nPorts = 1;
- adapt->pPortPrivates = (DevUnion*)(&adapt[1]);
-
- pPortPriv = (Mach64PortPrivPtr)(&adapt->pPortPrivates[1]);
-
- adapt->pPortPrivates[0].ptr = (pointer)(pPortPriv);
- adapt->pAttributes = Attributes;
- adapt->nImages = NUM_IMAGES;
- adapt->nAttributes = NUM_ATTRIBUTES;
- adapt->pImages = Images;
- adapt->PutVideo = NULL;
- adapt->PutStill = NULL;
- adapt->GetVideo = NULL;
- adapt->GetStill = NULL;
- adapt->StopVideo = mach64StopVideo;
- adapt->SetPortAttribute = mach64SetPortAttribute;
- adapt->GetPortAttribute = mach64GetPortAttribute;
- adapt->QueryBestSize = mach64QueryBestSize;
- adapt->PutImage = mach64PutImage;
- adapt->ReputImage = mach64ReputImage;
- adapt->QueryImageAttributes = mach64QueryImageAttributes;
-
- pPortPriv->colorKey = mach64s->colorKey;
- pPortPriv->videoOn = FALSE;
- pPortPriv->brightness = 0;
- pPortPriv->saturation = 0;
- pPortPriv->currentBuf = 0;
-
- /* gotta uninit this someplace */
- REGION_INIT(pScreen, &pPortPriv->clip, NullBox, 0);
-
- mach64s->pAdaptor = adapt;
-
- xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
- xvSaturation = MAKE_ATOM("XV_SATURATION");
- xvColorKey = MAKE_ATOM("XV_COLORKEY");
-
- mach64ResetVideo(screen);
-
- return adapt;
-}
-
-Bool mach64InitVideo(ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdScreenInfo *screen = pScreenPriv->screen;
- KdVideoAdaptorPtr *adaptors, *newAdaptors = NULL;
- KdVideoAdaptorPtr newAdaptor = NULL;
- int num_adaptors;
- KdCardInfo *card = pScreenPriv->card;
- Mach64ScreenInfo *mach64s = (Mach64ScreenInfo *) screen->driver;
- Mach64CardInfo *mach64c = (Mach64CardInfo *) card->driver;
-
- if (!mach64c->media_reg)
- return FALSE;
-
- newAdaptor = mach64SetupImageVideo(pScreen);
-
- num_adaptors = KdXVListGenericAdaptors(screen, &adaptors);
-
- if(newAdaptor)
- {
- if(!num_adaptors)
- {
- num_adaptors = 1;
- adaptors = &newAdaptor;
- }
- else
- {
- newAdaptors = xalloc((num_adaptors + 1) *
- sizeof(KdVideoAdaptorPtr*));
- if(newAdaptors)
- {
- memcpy(newAdaptors, adaptors,
- num_adaptors * sizeof(KdVideoAdaptorPtr));
- newAdaptors[num_adaptors] = newAdaptor;
- adaptors = newAdaptors;
- num_adaptors++;
- }
- }
- }
-
- if(num_adaptors)
- KdXVScreenInit(pScreen, adaptors, num_adaptors);
-
- if(newAdaptors)
- xfree(newAdaptors);
- return TRUE;
-}
diff --git a/hw/kdrive/trident/trident.c b/hw/kdrive/trident/trident.c
deleted file mode 100644
index 694a70810..000000000
--- a/hw/kdrive/trident/trident.c
+++ /dev/null
@@ -1,612 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "trident.h"
-#include <sys/io.h>
-
-#undef TRI_DEBUG
-
-int trident_clk = 0;
-int trident_mclk = 0;
-
-#define CLOCK 14318 /* KHz */
-#define CLK_N(a,b) (a & 0xff)
-#define CLK_M(a,b) ((b) & 0x3f)
-#define CLK_K(a,b) (((b) >> 6) & 3)
-#define CLK_FREQ(a,b) (((CLK_N(a,b) + 8) * CLOCK) / ((CLK_M(a,b)+2) << CLK_K(a,b)))
-
-Bool
-tridentCardInit (KdCardInfo *card)
-{
- int k;
- char *pixels;
- TridentCardInfo *tridentc;
- CARD8 r39;
-
- tridentc = (TridentCardInfo *) xalloc (sizeof (TridentCardInfo));
- if (!tridentc)
- return FALSE;
-
- iopl (3);
- tridentc->cop_base = (CARD8 *) KdMapDevice (TRIDENT_COP_BASE(card),
- TRIDENT_COP_SIZE(card));
-
- if (tridentc->cop_base)
- {
- KdSetMappedMode (TRIDENT_COP_BASE(card),
- TRIDENT_COP_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- }
- tridentc->cop = (Cop *) (tridentc->cop_base + TRIDENT_COP_OFF(card));
- tridentc->mmio = FALSE;
- r39 = tridentReadIndex (tridentc, 0x3d4, 0x39);
- if (r39 & 1)
- {
- tridentc->mmio = TRUE;
- r39 = tridentReadIndex (tridentc, 0x3d4, 0x39);
- if ((r39 & 1) == 0)
- {
- ErrorF ("Trident: inconsisent IO mapping values\n");
- return FALSE;
- }
- }
-
-#ifdef VESA
- if (!vesaInitialize (card, &tridentc->vesa))
-#else
- if (!fbdevInitialize (card, &tridentc->fb))
-#endif
- {
- xfree (tridentc);
- return FALSE;
- }
-
-#ifdef USE_PCI
- tridentc->window = (CARD32 *) (tridentc->cop_base + 0x10000);
-#else
- tridentc->window = 0;
-#endif
- card->driver = tridentc;
-
- return TRUE;
-}
-
-Bool
-tridentScreenInit (KdScreenInfo *screen)
-{
- TridentCardInfo *tridentc = screen->card->driver;
- TridentScreenInfo *tridents;
- int screen_size, memory;
-
- tridents = (TridentScreenInfo *) xalloc (sizeof (TridentScreenInfo));
- if (!tridents)
- return FALSE;
- memset (tridents, '\0', sizeof (TridentScreenInfo));
-#ifdef VESA
- if (!vesaScreenInitialize (screen, &tridents->vesa))
-#else
- if (!fbdevScreenInitialize (screen, &tridents->fbdev))
-#endif
- {
- xfree (tridents);
- return FALSE;
- }
- if (!tridentc->cop)
- screen->dumb = TRUE;
-#ifdef VESA
- if (tridents->vesa.mapping != VESA_LINEAR)
- screen->dumb = TRUE;
- tridents->screen = tridents->vesa.fb;
- memory = tridents->vesa.fb_size;
-#else
- tridents->screen = tridentc->fb.fb;
- memory = (2048 + 512) * 1024;
-#endif
- screen_size = screen->fb[0].byteStride * screen->height;
- if (tridents->screen && memory >= screen_size + 2048)
- {
- memory -= 2048;
- tridents->cursor_base = tridents->screen + memory - 2048;
- }
- else
- tridents->cursor_base = 0;
- memory -= screen_size;
- if (memory > screen->fb[0].byteStride)
- {
- tridents->off_screen = tridents->screen + screen_size;
- tridents->off_screen_size = memory;
- }
- else
- {
- tridents->off_screen = 0;
- tridents->off_screen_size = 0;
- }
- screen->driver = tridents;
- return TRUE;
-}
-
-Bool
-tridentInitScreen (ScreenPtr pScreen)
-{
-#ifdef VESA
- return vesaInitScreen (pScreen);
-#else
- return fbdevInitScreen (pScreen);
-#endif
-}
-
-Bool
-tridentFinishInitScreen (ScreenPtr pScreen)
-{
-#ifdef VESA
- return vesaFinishInitScreen (pScreen);
-#endif
-}
-
-CARD8
-tridentReadIndex (TridentCardInfo *tridentc, CARD16 port, CARD8 index)
-{
- CARD8 value;
-
- if (tridentc->mmio)
- {
- tridentc->cop_base[port] = index;
- value = tridentc->cop_base[port+1];
- }
- else
- {
- outb (index, port);
- value = inb (port+1);
- }
- return value;
-}
-
-void
-tridentWriteIndex (TridentCardInfo *tridentc, CARD16 port, CARD8 index, CARD8 value)
-{
- if (tridentc->mmio)
- {
- tridentc->cop_base[port] = index;
- tridentc->cop_base[port+1] = value;
- }
- else
- {
- outb (index, port);
- outb (value, port+1);
- }
-}
-
-CARD8
-tridentReadReg (TridentCardInfo *tridentc, CARD16 port)
-{
- CARD8 value;
-
- if (tridentc->mmio)
- {
- value = tridentc->cop_base[port];
- }
- else
- {
- value = inb (port);
- }
- return value;
-}
-
-void
-tridentWriteReg (TridentCardInfo *tridentc, CARD16 port, CARD8 value)
-{
- if (tridentc->mmio)
- {
- tridentc->cop_base[port] = value;
- }
- else
- {
- outb (value, port);
- }
-}
-
-
-void
-tridentPause ()
-{
- struct timeval tv;
-
- tv.tv_sec = 0;
- tv.tv_usec = 50 * 1000;
- select (1, 0, 0, 0, &tv);
-}
-
-void
-tridentPreserve (KdCardInfo *card)
-{
- TridentCardInfo *tridentc = card->driver;
-
-#ifdef VESA
- vesaPreserve(card);
-#else
- fbdevPreserve (card);
-#endif
- tridentPause ();
- tridentc->save.reg_3c4_0e = tridentReadIndex (tridentc, 0x3c4, 0x0e);
- tridentc->save.reg_3d4_36 = tridentReadIndex (tridentc, 0x3d4, 0x36);
- tridentc->save.reg_3d4_39 = tridentReadIndex (tridentc, 0x3d4, 0x39);
- tridentc->save.reg_3d4_62 = tridentReadIndex (tridentc, 0x3d4, 0x62);
- tridentc->save.reg_3ce_21 = tridentReadIndex (tridentc, 0x3ce, 0x21);
- tridentc->save.reg_3c2 = tridentReadReg (tridentc, 0x3cc);
- tridentc->save.reg_3c4_16 = tridentReadIndex (tridentc, 0x3c4, 0x16);
- tridentc->save.reg_3c4_17 = tridentReadIndex (tridentc, 0x3c4, 0x17);
- tridentc->save.reg_3c4_18 = tridentReadIndex (tridentc, 0x3c4, 0x18);
- tridentc->save.reg_3c4_19 = tridentReadIndex (tridentc, 0x3c4, 0x19);
- ErrorF ("clk low 0x%x high 0x%x freq %d\n",
- tridentc->save.reg_3c4_18,
- tridentc->save.reg_3c4_19,
- CLK_FREQ(tridentc->save.reg_3c4_18,
- tridentc->save.reg_3c4_19));
-#ifdef TRI_DEBUG
- fprintf (stderr, "3c4 0e: %02x\n", tridentc->save.reg_3c4_0e);
- fprintf (stderr, "3d4 36: %02x\n", tridentc->save.reg_3d4_36);
- fprintf (stderr, "3d4 39: %02x\n", tridentc->save.reg_3d4_39);
- fprintf (stderr, "3d4 62: %02x\n", tridentc->save.reg_3d4_62);
- fprintf (stderr, "3ce 21: %02x\n", tridentc->save.reg_3ce_21);
- fflush (stderr);
-#endif
- tridentPause ();
-}
-
-void
-tridentSetCLK(int clock, CARD8 *a, CARD8 *b)
-{
- int powerup[4] = { 1,2,4,8 };
- int clock_diff = 750;
- int freq, ffreq;
- int m, n, k;
- int p, q, r, s;
- int startn, endn;
- int endm, endk;
-
- p = q = r = s = 0;
-
- startn = 64;
- endn = 255;
- endm = 63;
- endk = 3;
-
- freq = clock;
-
- for (k=0;k<=endk;k++)
- for (n=startn;n<=endn;n++)
- for (m=1;m<=endm;m++)
- {
- ffreq = ( ( ((n + 8) * CLOCK) / ((m + 2) * powerup[k]) ));
- if ((ffreq > freq - clock_diff) && (ffreq < freq + clock_diff))
- {
- clock_diff = (freq > ffreq) ? freq - ffreq : ffreq - freq;
- p = n; q = m; r = k; s = ffreq;
- }
- }
-
- ErrorF ("ffreq %d clock %d\n", s, clock);
- if (s == 0)
- {
- FatalError("Unable to set programmable clock.\n"
- "Frequency %d is not a valid clock.\n"
- "Please modify XF86Config for a new clock.\n",
- freq);
- }
-
- /* N is all 8bits */
- *a = p;
- /* M is first 6bits, with K last 2bits */
- *b = (q & 0x3F) | (r << 6);
-}
-
-void
-tridentSetMCLK(int clock, CARD8 *a, CARD8 *b)
-{
- int powerup[4] = { 1,2,4,8 };
- int clock_diff = 750;
- int freq, ffreq;
- int m,n,k;
- int p, q, r, s;
- int startn, endn;
- int endm, endk;
-
- p = q = r = s = 0;
-
- startn = 64;
- endn = 255;
- endm = 63;
- endk = 3;
-
- freq = clock;
-
- for (k=0;k<=endk;k++)
- for (n=startn;n<=endn;n++)
- for (m=1;m<=endm;m++) {
- ffreq = ((((n+8)*CLOCK)/((m+2)*powerup[k])));
- if ((ffreq > freq - clock_diff) && (ffreq < freq + clock_diff))
- {
- clock_diff = (freq > ffreq) ? freq - ffreq : ffreq - freq;
- p = n; q = m; r = k; s = ffreq;
- }
- }
-
- if (s == 0)
- {
- FatalError("Unable to set memory clock.\n"
- "Frequency %d is not a valid clock.\n"
- "Please modify XF86Config for a new clock.\n",
- freq);
- }
-
- /* N is all 8bits */
- *a = p;
- /* M is first 6bits, with K last 2bits */
- *b = (q & 0x3F) | (r << 6);
-}
-
-void
-tridentSetMMIO (TridentCardInfo *tridentc)
-{
- int tries;
- CARD8 v;
-
-#ifdef TRI_DEBUG
- fprintf (stderr, "Set MMIO\n");
-#endif
- /* enable config port writes */
- for (tries = 0; tries < 3; tries++)
- {
- /* enable direct read when GE busy, enable PCI retries */
- tridentWriteIndex (tridentc, 0x3d4, 0x62,
- tridentc->save.reg_3d4_62 | 0x70);
- /* make sure the chip is in new mode */
- tridentReadIndex (tridentc, 0x3c4, 0xb);
- /* enable access to upper registers */
- tridentWriteIndex (tridentc, 0x3c4, 0xe,
- tridentc->save.reg_3c4_0e | 0x80);
- v = tridentReadIndex (tridentc, 0x3c4, 0xe);
- if (!(v & 0x80))
- {
- fprintf (stderr, "Trident GE not enabled 0x%x\n", v);
- continue;
- }
- /* enable screen */
- tridentWriteIndex (tridentc, 0x3ce, 0x21, 0x80);
-#ifdef USE_PCI
- /* enable burst r/w, enable memory mapped ports */
- tridentWriteIndex (tridentc, 0x3d4, 0x39, 7);
- tridentc->mmio = TRUE;
- /* reset GE, enable GE, set GE to pci 1 */
- tridentWriteIndex (tridentc, 0x3d4, 0x36, 0x90);
-#else
- /* enable burst r/w, disable memory mapped ports */
- tridentWriteIndex (tridentc, 0x3d4, 0x39, 0x6);
- /* reset GE, enable GE, set GE to 0xbff00 */
- tridentWriteIndex (tridentc, 0x3d4, 0x36, 0x92);
-#endif
- /* set clock */
- if (trident_clk)
- {
- CARD8 a, b;
-
- a = tridentReadIndex (tridentc, 0x3c4, 0x18);
- b = tridentReadIndex (tridentc, 0x3c4, 0x19);
- ErrorF ("old clock 0x%x 0x%x %d\n",
- a, b, CLK_FREQ(a,b));
- tridentSetCLK (trident_clk, &a, &b);
- ErrorF ("clk %d-> 0x%x 0x%x %d\n", trident_clk, a, b,
- CLK_FREQ(a,b));
-#if 1
- tridentWriteIndex (tridentc, 0x3c4, 0x18, a);
- tridentWriteIndex (tridentc, 0x3c4, 0x19, b);
-#endif
- }
- if (trident_mclk)
- {
- CARD8 a, b;
-
- tridentSetMCLK (trident_mclk, &a, &b);
- ErrorF ("mclk %d -> 0x%x 0x%x\n", trident_mclk, a, b);
-#if 0
- tridentWriteIndex (tridentc, 0x3c4, 0x16, a);
- tridentWriteIndex (tridentc, 0x3c4, 0x17, b);
-#endif
- }
- if (trident_clk || trident_mclk)
- {
- CARD8 mode;
-
- mode = tridentReadReg (tridentc, 0x3cc);
- ErrorF ("old mode 0x%x\n", mode);
- mode = (mode & 0xf3) | 0x08;
- ErrorF ("new mode 0x%x\n", mode);
-#if 1
- tridentWriteReg (tridentc, 0x3c2, mode);
-#endif
- }
-#ifdef TRI_DEBUG
- fprintf (stderr, "0x36: 0x%02x\n",
- tridentReadIndex (tridentc, 0x3d4, 0x36));
-#endif
- if (tridentc->cop->status != 0xffffffff)
- break;
- }
-#ifdef TRI_DEBUG
- fprintf (stderr, "COP status 0x%x\n", tridentc->cop->status);
-#endif
- if (tridentc->cop->status == 0xffffffff)
- FatalError ("Trident COP not visible\n");
-}
-
-void
-tridentResetMMIO (TridentCardInfo *tridentc)
-{
-#ifdef TRI_DEBUG
- fprintf (stderr, "Reset MMIO\n");
-#endif
- tridentPause ();
-#if 0
- tridentWriteIndex (tridentc, 0x3c4, 0x16, tridentc->save.reg_3c4_16);
- tridentWriteIndex (tridentc, 0x3c4, 0x17, tridentc->save.reg_3c4_17);
-#endif
- tridentWriteIndex (tridentc, 0x3c4, 0x18, tridentc->save.reg_3c4_18);
- tridentWriteIndex (tridentc, 0x3c4, 0x19, tridentc->save.reg_3c4_19);
- tridentWriteReg (tridentc, 0x3c2, tridentc->save.reg_3c2);
- tridentPause ();
- tridentWriteIndex (tridentc, 0x3ce, 0x21, tridentc->save.reg_3ce_21);
- tridentPause ();
- tridentWriteIndex (tridentc, 0x3d4, 0x62, tridentc->save.reg_3d4_62);
- tridentWriteIndex (tridentc, 0x3d4, 0x39, tridentc->save.reg_3d4_39);
- tridentc->mmio = FALSE;
- tridentWriteIndex (tridentc, 0x3d4, 0x36, tridentc->save.reg_3d4_36);
- tridentWriteIndex (tridentc, 0x3c4, 0x0e, tridentc->save.reg_3c4_0e);
- tridentPause ();
-}
-
-Bool
-tridentEnable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- TridentCardInfo *tridentc = pScreenPriv->card->driver;
-
-#ifdef VESA
- if (!vesaEnable (pScreen))
- return FALSE;
-#else
- if (!fbdevEnable (pScreen))
- return FALSE;
-#endif
- tridentSetMMIO (tridentc);
- return TRUE;
-}
-
-void
-tridentDisable (ScreenPtr pScreen)
-{
-#ifdef VESA
- vesaDisable (pScreen);
-#else
- fbdevDisable (pScreen);
-#endif
-}
-
-const CARD8 tridentDPMSModes[4] = {
- 0x80, /* KD_DPMS_NORMAL */
- 0x8c, /* KD_DPMS_STANDBY */
- 0x8c, /* KD_DPMS_STANDBY */
- 0x8c, /* KD_DPMS_STANDBY */
-/* 0xb0, /* KD_DPMS_SUSPEND */
-/* 0xbc, /* KD_DPMS_POWERDOWN */
-};
-
-Bool
-tridentDPMS (ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- TridentCardInfo *tridentc = pScreenPriv->card->driver;
-
- tridentWriteIndex (tridentc, 0x3ce, 0x21, tridentDPMSModes[mode]);
- tridentPause ();
- return TRUE;
-}
-
-void
-tridentRestore (KdCardInfo *card)
-{
- TridentCardInfo *tridentc = card->driver;
-
- tridentResetMMIO (tridentc);
-#ifdef VESA
- vesaRestore (card);
-#else
- fbdevRestore (card);
-#endif
-}
-
-void
-tridentScreenFini (KdScreenInfo *screen)
-{
- TridentScreenInfo *tridents = (TridentScreenInfo *) screen->driver;
-
-#ifdef VESA
- vesaScreenFini (screen);
-#endif
- xfree (tridents);
- screen->driver = 0;
-}
-
-void
-tridentCardFini (KdCardInfo *card)
-{
- TridentCardInfo *tridentc = card->driver;
-
- if (tridentc->cop_base)
- {
- KdUnmapDevice ((void *) tridentc->cop_base, TRIDENT_COP_SIZE(card));
- KdResetMappedMode (TRIDENT_COP_BASE(card),
- TRIDENT_COP_SIZE(card),
- KD_MAPPED_MODE_REGISTERS);
- }
-#ifdef VESA
- vesaCardFini (card);
-#else
- fbdevCardFini (card);
-#endif
-}
-
-KdCardFuncs tridentFuncs = {
- tridentCardInit, /* cardinit */
- tridentScreenInit, /* scrinit */
- tridentInitScreen, /* initScreen */
- tridentPreserve, /* preserve */
- tridentEnable, /* enable */
- tridentDPMS, /* dpms */
- tridentDisable, /* disable */
- tridentRestore, /* restore */
- tridentScreenFini, /* scrfini */
- tridentCardFini, /* cardfini */
-
- tridentCursorInit, /* initCursor */
- tridentCursorEnable, /* enableCursor */
- tridentCursorDisable, /* disableCursor */
- tridentCursorFini, /* finiCursor */
- tridentRecolorCursor, /* recolorCursor */
-
- tridentDrawInit, /* initAccel */
- tridentDrawEnable, /* enableAccel */
- tridentDrawSync, /* syncAccel */
- tridentDrawDisable, /* disableAccel */
- tridentDrawFini, /* finiAccel */
-
-#ifdef VESA
- vesaGetColors, /* getColors */
- vesaPutColors, /* putColors */
-#else
- fbdevGetColors, /* getColors */
- fbdevPutColors, /* putColors */
-#endif
- tridentFinishInitScreen /* finishInitScreen */
-};
diff --git a/hw/kdrive/trident/trident.h b/hw/kdrive/trident/trident.h
deleted file mode 100644
index feb939de3..000000000
--- a/hw/kdrive/trident/trident.h
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _TRIDENT_H_
-#define _TRIDENT_H_
-#ifdef VESA
-#include <vesa.h>
-#else
-#include <fbdev.h>
-#endif
-
-/*
- * offset from ioport beginning
- */
-
-#ifdef USE_PCI
-#define TRIDENT_COP_BASE(c) (c->attr.address[1])
-#define TRIDENT_COP_OFF(c) 0x2100
-#define TRIDENT_COP_SIZE(c) 0x20000
-#else
-#define TRIDENT_COP_BASE(c) 0xbf000
-#define TRIDENT_COP_OFF(c) 0x00f00
-#define TRIDENT_COP_SIZE(c) (0x2000)
-#endif
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-typedef struct _cop {
- VOL32 src_start_xy; /* 0x00 */
- VOL32 src_end_xy; /* 0x04 */
- VOL32 dst_start_xy; /* 0x08 */
- VOL32 dst_end_xy; /* 0x0c */
- VOL32 alpha; /* 0x10 */
- CARD8 pad14[0xc]; /* 0x14 */
- VOL32 multi; /* 0x20 */
-
-#define COP_MULTI_CLIP_TOP_LEFT 0x10000000
-#define COP_MULTI_DEPTH 0x40000000
-#define COP_MULTI_COLOR_KEY 0x70000000
-#define COP_MULTI_STYLE 0x50000000
-#define COP_MULTI_PATTERN 0x80000000
-#define COP_MULTI_ROP 0x90000000
-#define COP_MULTI_STRIDE 0x60000000
-#define COP_MULTI_Z 0xa0000000
-#define COP_MULTI_ALPHA 0xb0000000
-#define COP_MULTI_TEXTURE 0xd0000000
-#define COP_MULTI_TEXTURE_BOUND 0xe0000000
-#define COP_MULTI_TEXTURE_ADVANCED 0x20000000
-#define COP_MULTI_MASK 0xf0000000
-
-#define COP_DEPTH_8 0x00000000
-#define COP_DEPTH_16 0x00000001
-#define COP_DEPTH_24_32 0x00000002
-#define COP_DEPTH_15 0x00000005
-#define COP_DEPTH_DITHER_DISABLE 0x00000008
-
-
-#define COP_ALPHA_SRC_BLEND_0 0x00000000
-#define COP_ALPHA_SRC_BLEND_1 0x00000001
-#define COP_ALPHA_SRC_BLEND_SRC_C 0x00000002
-#define COP_ALPHA_SRC_BLEND_1_SRC_C 0x00000003
-#define COP_ALPHA_SRC_BLEND_SRC_A 0x00000004
-#define COP_ALPHA_SRC_BLEND_1_SRC_A 0x00000005
-#define COP_ALPHA_SRC_BLEND_DST_A 0x00000006
-#define COP_ALPHA_SRC_BLEND_1_DST_A 0x00000007
-#define COP_ALPHA_SRC_BLEND_DST_C 0x00000008
-#define COP_ALPHA_SRC_BLEND_1_DST_C 0x00000009
-#define COP_ALPHA_SRC_BLEND_SAT 0x0000000A
-#define COP_ALPHA_SRC_BLEND_BG 0x0000000B
-
-#define COP_ALPHA_DST_BLEND_0 0x00000000
-#define COP_ALPHA_DST_BLEND_1 0x00000010
-#define COP_ALPHA_DST_BLEND_SRC_C 0x00000020
-#define COP_ALPHA_DST_BLEND_1_SRC_C 0x00000030
-#define COP_ALPHA_DST_BLEND_SRC_A 0x00000040
-#define COP_ALPHA_DST_BLEND_1_SRC_A 0x00000050
-#define COP_ALPHA_DST_BLEND_DST_A 0x00000060
-#define COP_ALPHA_DST_BLEND_1_DST_A 0x00000070
-#define COP_ALPHA_DST_BLEND_DST_C 0x00000080
-#define COP_ALPHA_DST_BLEND_1_DST_C 0x00000090
-#define COP_ALPHA_DST_BLEND_OTHER 0x000000A0
-
-#define COP_ALPHA_RESULT_ALPHA 0x00100000
-#define COP_ALPHA_DEST_ALPHA 0x00200000
-#define COP_ALPHA_SOURCE_ALPHA 0x00400000
-#define COP_ALPHA_WRITE_ENABLE 0x00800000
-#define COP_ALPHA_TEST_ENABLE 0x01000000
-#define COP_ALPHA_BLEND_ENABLE 0x02000000
-#define COP_ALPHA_DEST_VALUE 0x04000000
-#define COP_ALPHA_SOURCE_VALUE 0x08000000
-
- VOL32 command; /* 0x24 */
-#define COP_OP_NULL 0x00000000
-#define COP_OP_LINE 0x20000000
-#define COP_OP_BLT 0x80000000
-#define COP_OP_TEXT 0x90000000
-#define COP_OP_POLY 0xb0000000
-#define COP_OP_POLY2 0xe0000000
-#define COP_SCL_EXPAND 0x00800000
-#define COP_SCL_OPAQUE 0x00400000
-#define COP_SCL_REVERSE 0x00200000
-#define COP_SCL_MONO_OFF 0x001c0000
-#define COP_LIT_TEXTURE 0x00004000
-#define COP_BILINEAR 0x00002000
-#define COP_OP_ZBUF 0x00000800
-#define COP_OP_ROP 0x00000400
-#define COP_OP_FG 0x00000200
-#define COP_OP_FB 0x00000080
-#define COP_X_REVERSE 0x00000004
-#define COP_CLIP 0x00000001
- VOL32 texture_format; /* 0x28 */
- CARD8 pad2c[0x4]; /* 0x2c */
-
- VOL32 clip_bottom_right; /* 0x30 */
- VOL32 dataIII; /* 0x34 */
- VOL32 dataIV; /* 0x38 */
- CARD8 pad3c[0x8]; /* 0x3c */
-
- VOL32 fg; /* 0x44 */
- VOL32 bg; /* 0x48 */
- CARD8 pad4c[0x4]; /* 0x4c */
-
- VOL32 pattern_fg; /* 0x50 */
- VOL32 pattern_bg; /* 0x54 */
- CARD8 pad58[0xc]; /* 0x58 */
-
- VOL32 status; /* 0x64 */
-#define COP_STATUS_BE_BUSY 0x80000000
-#define COP_STATUS_DPE_BUSY 0x20000000
-#define COP_STATUS_MI_BUSY 0x10000000
-#define COP_STATUS_FIFO_BUSY 0x08000000
-#define COP_STATUS_WB_BUSY 0x00800000
-#define COP_STATUS_Z_FAILED 0x00400000
-#define COP_STATUS_EFFECTIVE 0x00200000
-#define COP_STATUS_LEFT_VIEW 0x00080000
-
- CARD8 pad68[0x4]; /* 0x68 */
-
- VOL32 src_offset; /* 0x6c */
- VOL32 z_offset; /* 0x70 */
- CARD8 pad74[0x4]; /* 0x74 */
-
- VOL32 display_offset; /* 0x78 */
- VOL32 dst_offset; /* 0x7c */
- CARD8 pad80[0x34]; /* 0x80 */
-
- VOL32 semaphore; /* 0xb4 */
-} Cop;
-
-#define TRI_XY(x,y) ((y) << 16 | (x))
-
-typedef struct _tridentSave {
- CARD8 reg_3c4_0e; /* config port value */
- CARD8 reg_3d4_36;
- CARD8 reg_3d4_39;
- CARD8 reg_3d4_62; /* GE setup */
- CARD8 reg_3ce_21; /* DPMS */
- CARD8 reg_3c2; /* clock config */
- CARD8 reg_3c4_16; /* MCLKLow */
- CARD8 reg_3c4_17; /* MCLKHigh */
- CARD8 reg_3c4_18; /* ClockLow */
- CARD8 reg_3c4_19; /* ClockHigh */
-} TridentSave;
-
-typedef struct _tridentCardInfo {
-#ifdef VESA
- VesaCardPrivRec vesa;
-#else
- FbdevPriv fb;
-#endif
- CARD8 *cop_base;
- Cop *cop;
- CARD32 *window;
- CARD32 cop_depth;
- CARD32 cop_stride;
- Bool mmio;
- TridentSave save;
-} TridentCardInfo;
-
-#define getTridentCardInfo(kd) ((TridentCardInfo *) ((kd)->card->driver))
-#define tridentCardInfo(kd) TridentCardInfo *tridentc = getTridentCardInfo(kd)
-
-typedef struct _tridentCursor {
- int width, height;
- int xhot, yhot;
- Bool has_cursor;
- CursorPtr pCursor;
- Pixel source, mask;
-} TridentCursor;
-
-#define TRIDENT_CURSOR_WIDTH 64
-#define TRIDENT_CURSOR_HEIGHT 64
-
-typedef struct _tridentScreenInfo {
-#ifdef VESA
- VesaScreenPrivRec vesa;
-#else
- FbdevScrPriv fbdev;
-#endif
- CARD8 *cursor_base;
- CARD8 *screen;
- CARD8 *off_screen;
- int off_screen_size;
- TridentCursor cursor;
-} TridentScreenInfo;
-
-#define getTridentScreenInfo(kd) ((TridentScreenInfo *) ((kd)->screen->driver))
-#define tridentScreenInfo(kd) TridentScreenInfo *tridents = getTridentScreenInfo(kd)
-
-Bool
-tridentDrawInit (ScreenPtr pScreen);
-
-void
-tridentDrawEnable (ScreenPtr pScreen);
-
-void
-tridentDrawSync (ScreenPtr pScreen);
-
-void
-tridentDrawDisable (ScreenPtr pScreen);
-
-void
-tridentDrawFini (ScreenPtr pScreen);
-
-CARD8
-tridentReadIndex (TridentCardInfo *tridentc, CARD16 port, CARD8 index);
-
-void
-tridentWriteIndex (TridentCardInfo *tridentc, CARD16 port, CARD8 index, CARD8 value);
-
-Bool
-tridentCursorInit (ScreenPtr pScreen);
-
-void
-tridentCursorEnable (ScreenPtr pScreen);
-
-void
-tridentCursorDisable (ScreenPtr pScreen);
-
-void
-tridentCursorFini (ScreenPtr pScreen);
-
-void
-tridentRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef);
-
-extern KdCardFuncs tridentFuncs;
-
-#endif /* _TRIDENT_H_ */
diff --git a/hw/kdrive/trident/tridentcurs.c b/hw/kdrive/trident/tridentcurs.c
deleted file mode 100644
index 4a5938162..000000000
--- a/hw/kdrive/trident/tridentcurs.c
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "trident.h"
-#include "cursorstr.h"
-
-#define SetupCursor(s) KdScreenPriv(s); \
- tridentCardInfo(pScreenPriv); \
- tridentScreenInfo(pScreenPriv); \
- TridentCursor *pCurPriv = &tridents->cursor
-
-static void
-_tridentMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CARD8 xlow, xhigh, ylow, yhigh;
- CARD8 xoff, yoff;
-
- x -= pCurPriv->xhot;
- xoff = 0;
- if (x < 0)
- {
- xoff = -x;
- x = 0;
- }
- y -= pCurPriv->yhot;
- yoff = 0;
- if (y < 0)
- {
- yoff = -y;
- y = 0;
- }
- xlow = (CARD8) x;
- xhigh = (CARD8) (x >> 8);
- ylow = (CARD8) y;
- yhigh = (CARD8) (y >> 8);
-
-
- /* This is the recommended order to move the cursor */
-
- tridentWriteIndex (tridentc, 0x3d4, 0x41, xhigh);
- tridentWriteIndex (tridentc, 0x3d4, 0x40, xlow);
- tridentWriteIndex (tridentc, 0x3d4, 0x42, ylow);
- tridentWriteIndex (tridentc, 0x3d4, 0x46, xoff);
- tridentWriteIndex (tridentc, 0x3d4, 0x47, yoff);
- tridentWriteIndex (tridentc, 0x3d4, 0x43, yhigh);
-}
-
-static void
-tridentMoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor (pScreen);
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- _tridentMoveCursor (pScreen, x, y);
-}
-
-static void
-tridentAllocCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
-
- KdAllocateCursorPixels (pScreen, 0, pCursor,
- &pCurPriv->source, &pCurPriv->mask);
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 4:
- pCurPriv->source |= pCurPriv->source << 4;
- pCurPriv->mask |= pCurPriv->mask << 4;
- case 8:
- pCurPriv->source |= pCurPriv->source << 8;
- pCurPriv->mask |= pCurPriv->mask << 8;
- case 16:
- pCurPriv->source |= pCurPriv->source << 16;
- pCurPriv->mask |= pCurPriv->mask << 16;
- }
-}
-
-static void
-tridentSetCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CARD32 fg, bg;
-
- fg = pCurPriv->source;
- bg = pCurPriv->mask;
- tridentWriteIndex (tridentc, 0x3d4, 0x48, fg);
- tridentWriteIndex (tridentc, 0x3d4, 0x49, fg >> 8);
- tridentWriteIndex (tridentc, 0x3d4, 0x4a, fg >> 16);
-
- tridentWriteIndex (tridentc, 0x3d4, 0x4c, bg);
- tridentWriteIndex (tridentc, 0x3d4, 0x4d, bg >> 8);
- tridentWriteIndex (tridentc, 0x3d4, 0x4e, bg >> 16);
-}
-
-void
-tridentRecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- xColorItem sourceColor, maskColor;
-
- if (!pCurPriv->has_cursor || !pCursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pdef)
- {
- while (ndef)
- {
- if (pdef->pixel == pCurPriv->source ||
- pdef->pixel == pCurPriv->mask)
- break;
- ndef--;
- }
- if (!ndef)
- return;
- }
- tridentAllocCursorColors (pScreen);
- tridentSetCursorColors (pScreen);
-}
-
-#define InvertBits32(v) { \
- v = ((v & 0x55555555) << 1) | ((v >> 1) & 0x55555555); \
- v = ((v & 0x33333333) << 2) | ((v >> 2) & 0x33333333); \
- v = ((v & 0x0f0f0f0f) << 4) | ((v >> 4) & 0x0f0f0f0f); \
-}
-
-static void
-tridentLoadCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- int w, h;
- CARD32 *ram, *msk, *mskLine, *src, *srcLine;
- int i, j;
- int cursor_address;
- int lwsrc;
- unsigned char ramdac_control_;
- CARD32 offset;
-
- /*
- * Allocate new colors
- */
- tridentAllocCursorColors (pScreen);
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- /*
- * Stick new image into cursor memory
- */
- ram = (CARD32 *) tridents->cursor_base;
- mskLine = (CARD32 *) bits->mask;
- srcLine = (CARD32 *) bits->source;
-
- h = bits->height;
- if (h > TRIDENT_CURSOR_HEIGHT)
- h = TRIDENT_CURSOR_HEIGHT;
-
- lwsrc = BitmapBytePad(bits->width) / 4; /* words per line */
-
- for (i = 0; i < TRIDENT_CURSOR_HEIGHT; i++) {
- msk = mskLine;
- src = srcLine;
- mskLine += lwsrc;
- srcLine += lwsrc;
- for (j = 0; j < TRIDENT_CURSOR_WIDTH / 32; j++) {
-
- CARD32 m, s;
-
-#if 1
- if (i < h && j < lwsrc)
- {
- m = *msk++;
- s = *src++;
- InvertBits32(m);
- InvertBits32(s);
- }
- else
- {
- m = 0;
- s = 0;
- }
-#endif
- *ram++ = m;
- *ram++ = s;
- }
- }
-
- /* Set address for cursor bits */
- offset = tridents->cursor_base - (CARD8 *) tridents->screen;
- offset >>= 10;
- tridentWriteIndex (tridentc, 0x3d4, 0x44, (CARD8) (offset & 0xff));
- tridentWriteIndex (tridentc, 0x3d4, 0x45, (CARD8) (offset >> 8));
-
- /* Set new color */
- tridentSetCursorColors (pScreen);
-
- /* Enable the cursor */
- tridentWriteIndex (tridentc, 0x3d4, 0x50, 0xc1);
-
- /* Move to new position */
- tridentMoveCursor (pScreen, x, y);
-}
-
-static void
-tridentUnloadCursor (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- /* Disable cursor */
- tridentWriteIndex (tridentc, 0x3d4, 0x50, 0);
-}
-
-static Bool
-tridentRealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- SetupCursor(pScreen);
-
- if (!pScreenPriv->enabled)
- return TRUE;
-
- /* miRecolorCursor does this */
- if (pCurPriv->pCursor == pCursor)
- {
- if (pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- tridentLoadCursor (pScreen, x, y);
- }
- }
- return TRUE;
-}
-
-static Bool
-tridentUnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- return TRUE;
-}
-
-static void
-tridentSetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
-{
- SetupCursor(pScreen);
-
- pCurPriv->pCursor = pCursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCursor)
- tridentLoadCursor (pScreen, x, y);
- else
- tridentUnloadCursor (pScreen);
-}
-
-miPointerSpriteFuncRec tridentPointerSpriteFuncs = {
- tridentRealizeCursor,
- tridentUnrealizeCursor,
- tridentSetCursor,
- tridentMoveCursor,
-};
-
-static void
-tridentQueryBestSize (int class,
- unsigned short *pwidth, unsigned short *pheight,
- ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- switch (class)
- {
- case CursorShape:
- if (*pwidth > pCurPriv->width)
- *pwidth = pCurPriv->width;
- if (*pheight > pCurPriv->height)
- *pheight = pCurPriv->height;
- if (*pwidth > pScreen->width)
- *pwidth = pScreen->width;
- if (*pheight > pScreen->height)
- *pheight = pScreen->height;
- break;
- default:
- fbQueryBestSize (class, pwidth, pheight, pScreen);
- break;
- }
-}
-
-Bool
-tridentCursorInit (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!tridents->cursor_base)
- {
- pCurPriv->has_cursor = FALSE;
- return FALSE;
- }
-
- pCurPriv->width = TRIDENT_CURSOR_WIDTH;
- pCurPriv->height= TRIDENT_CURSOR_HEIGHT;
- pScreen->QueryBestSize = tridentQueryBestSize;
- miPointerInitialize (pScreen,
- &tridentPointerSpriteFuncs,
- &kdPointerScreenFuncs,
- FALSE);
- pCurPriv->has_cursor = TRUE;
- pCurPriv->pCursor = NULL;
- return TRUE;
-}
-
-void
-tridentCursorEnable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- tridentLoadCursor (pScreen, x, y);
- }
- else
- tridentUnloadCursor (pScreen);
- }
-}
-
-void
-tridentCursorDisable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- tridentUnloadCursor (pScreen);
- }
- }
-}
-
-void
-tridentCursorFini (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- pCurPriv->pCursor = NULL;
-}
diff --git a/hw/kdrive/trident/tridentdraw.c b/hw/kdrive/trident/tridentdraw.c
deleted file mode 100644
index c26d0be8b..000000000
--- a/hw/kdrive/trident/tridentdraw.c
+++ /dev/null
@@ -1,496 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "trident.h"
-#include "tridentdraw.h"
-
-#include "Xmd.h"
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "pixmapstr.h"
-#include "regionstr.h"
-#include "mistruct.h"
-#include "fontstruct.h"
-#include "dixfontstr.h"
-#include "fb.h"
-#include "migc.h"
-#include "miline.h"
-#include "picturestr.h"
-
-CARD8 tridentRop[16] = {
- /* GXclear */ 0x00, /* 0 */
- /* GXand */ 0x88, /* src AND dst */
- /* GXandReverse */ 0x44, /* src AND NOT dst */
- /* GXcopy */ 0xcc, /* src */
- /* GXandInverted*/ 0x22, /* NOT src AND dst */
- /* GXnoop */ 0xaa, /* dst */
- /* GXxor */ 0x66, /* src XOR dst */
- /* GXor */ 0xee, /* src OR dst */
- /* GXnor */ 0x11, /* NOT src AND NOT dst */
- /* GXequiv */ 0x99, /* NOT src XOR dst */
- /* GXinvert */ 0x55, /* NOT dst */
- /* GXorReverse */ 0xdd, /* src OR NOT dst */
- /* GXcopyInverted*/ 0x33, /* NOT src */
- /* GXorInverted */ 0xbb, /* NOT src OR dst */
- /* GXnand */ 0x77, /* NOT src OR NOT dst */
- /* GXset */ 0xff, /* 1 */
-};
-
-#define tridentFillPix(bpp,pixel) {\
- if (bpp == 8) \
- { \
- pixel = pixel & 0xff; \
- pixel = pixel | pixel << 8; \
- } \
- if (bpp <= 16) \
- { \
- pixel = pixel & 0xffff; \
- pixel = pixel | pixel << 16; \
- } \
-}
-
-static Cop *cop;
-static CARD32 cmd;
-
-Bool
-tridentPrepareSolid (DrawablePtr pDrawable,
- int alu,
- Pixel pm,
- Pixel fg)
-{
- FbBits depthMask = FbFullMask(pDrawable->depth);
-
- if ((pm & depthMask) != depthMask)
- return FALSE;
- else
- {
- KdScreenPriv(pDrawable->pScreen);
- tridentCardInfo(pScreenPriv);
- cop = tridentc->cop;
-
- tridentFillPix(pDrawable->bitsPerPixel,fg);
- _tridentInit(cop,tridentc);
- _tridentSetSolidRect(cop,fg,alu,cmd);
- return TRUE;
- }
-}
-
-void
-tridentSolid (int x1, int y1, int x2, int y2)
-{
- _tridentRect (cop, x1, y1, x2 - 1, y2 - 1, cmd);
-}
-
-void
-tridentDoneSolid (void)
-{
-}
-
-Bool
-tridentPrepareCopy (DrawablePtr pSrcDrawable,
- DrawablePtr pDstDrawable,
- int dx,
- int dy,
- int alu,
- Pixel pm)
-{
- FbBits depthMask = FbFullMask(pDstDrawable->depth);
-
- if ((pm & depthMask) == depthMask)
- {
- KdScreenPriv(pDstDrawable->pScreen);
- tridentCardInfo(pScreenPriv);
- cop = tridentc->cop;
- _tridentInit(cop,tridentc);
- cop->multi = COP_MULTI_PATTERN;
- cop->multi = COP_MULTI_ROP | tridentRop[alu];
- cmd = COP_OP_BLT | COP_SCL_OPAQUE | COP_OP_ROP | COP_OP_FB;
- if (dx < 0 || dy < 0)
- cmd |= COP_X_REVERSE;
- return TRUE;
- }
- else
- return FALSE;
-}
-
-void
-tridentCopy (int srcX,
- int srcY,
- int dstX,
- int dstY,
- int w,
- int h)
-{
- if (cmd & COP_X_REVERSE)
- {
- cop->src_start_xy = TRI_XY (srcX + w - 1, srcY + h - 1);
- cop->src_end_xy = TRI_XY (srcX, srcY);
- cop->dst_start_xy = TRI_XY (dstX + w - 1, dstY + h - 1);
- cop->dst_end_xy = TRI_XY (dstX, dstY);
- }
- else
- {
- cop->src_start_xy = TRI_XY (srcX, srcY);
- cop->src_end_xy = TRI_XY (srcX + w - 1, srcY + h - 1);
- cop->dst_start_xy = TRI_XY (dstX, dstY);
- cop->dst_end_xy = TRI_XY (dstX + w - 1, dstY + h - 1);
- }
- _tridentWaitDone (cop);
- cop->command = cmd;
-}
-
-void
-tridentDoneCopy (void)
-{
-}
-
-void
-tridentComposite (CARD8 op,
- PicturePtr pSrc,
- PicturePtr pMask,
- PicturePtr pDst,
- INT16 xSrc,
- INT16 ySrc,
- INT16 xMask,
- INT16 yMask,
- INT16 xDst,
- INT16 yDst,
- CARD16 width,
- CARD16 height)
-{
- SetupTrident (pDst->pDrawable->pScreen);
- tridentScreenInfo(pScreenPriv);
- RegionRec region;
- int n;
- BoxPtr pbox;
- CARD32 rgb;
- CARD8 *msk, *mskLine;
- FbBits *mskBits;
- FbStride mskStride;
- int mskBpp;
- int mskXoff, mskYoff;
- CARD32 *src, *srcLine;
- CARD32 *off, *offLine;
- FbBits *srcBits;
- FbStride srcStride;
- int srcXoff, srcYoff;
- FbStride offStride;
- int srcBpp;
- int x_msk, y_msk, x_src, y_src, x_dst, y_dst;
- int x2;
- int w, h, w_this, h_this, w_remain;
- CARD32 *off_screen;
- int off_size = tridents->off_screen_size >> 2;
- int off_width, off_height;
- int stride = pScreenPriv->screen->fb[0].pixelStride;
- int mskExtra;
- CARD32 off_screen_offset = tridents->off_screen - tridents->screen;
- int mode;
-
-#define MODE_NONE 0
-#define MODE_IMAGE 1
-#define MODE_MASK 2
-
- rgb = *((CARD32 *) ((PixmapPtr) (pSrc->pDrawable))->devPrivate.ptr);
- if (pMask &&
- !pMask->repeat &&
- pMask->format == PICT_a8 &&
- op == PictOpOver &&
- pSrc->repeat &&
- pSrc->pDrawable->width == 1 &&
- pSrc->pDrawable->height == 1 &&
- PICT_FORMAT_BPP(pSrc->format) == 32 &&
- (PICT_FORMAT_A(pSrc->format) == 0 ||
- (rgb & 0xff000000) == 0xff000000) &&
- pDst->pDrawable->bitsPerPixel == 32 &&
- pDst->pDrawable->type == DRAWABLE_WINDOW)
- {
- mode = MODE_MASK;
- }
- else if (!pMask &&
- op == PictOpOver &&
- !pSrc->repeat &&
- PICT_FORMAT_A(pSrc->format) == 8 &&
- PICT_FORMAT_BPP(pSrc->format) == 32 &&
- pDst->pDrawable->bitsPerPixel == 32 &&
- pDst->pDrawable->type == DRAWABLE_WINDOW)
- {
- mode = MODE_IMAGE;
- }
- else
- mode = MODE_NONE;
-
- if (mode != MODE_NONE)
- {
- xDst += pDst->pDrawable->x;
- yDst += pDst->pDrawable->y;
- xSrc += pSrc->pDrawable->x;
- ySrc += pSrc->pDrawable->y;
-
- fbGetDrawable (pSrc->pDrawable, srcBits, srcStride, srcBpp, srcXoff, srcYoff);
-
- if (pMask)
- {
- xMask += pMask->pDrawable->x;
- yMask += pMask->pDrawable->y;
- fbGetDrawable (pMask->pDrawable, mskBits, mskStride, mskBpp, mskXoff, mskYoff);
- mskStride = mskStride * sizeof (FbBits) / sizeof (CARD8);
- }
-
- if (!miComputeCompositeRegion (&region,
- pSrc,
- pMask,
- pDst,
- xSrc,
- ySrc,
- xMask,
- yMask,
- xDst,
- yDst,
- width,
- height))
- return;
-
- _tridentInit(cop,tridentc);
-
- cop->multi = COP_MULTI_PATTERN;
- cop->src_offset = off_screen_offset;
-
- if (mode == MODE_IMAGE)
- {
- cop->multi = (COP_MULTI_ALPHA |
- COP_ALPHA_BLEND_ENABLE |
- COP_ALPHA_WRITE_ENABLE |
- 0x7 << 16 |
- COP_ALPHA_DST_BLEND_1_SRC_A |
- COP_ALPHA_SRC_BLEND_1);
- }
- else
- {
- rgb &= 0xffffff;
- cop->multi = (COP_MULTI_ALPHA |
- COP_ALPHA_BLEND_ENABLE |
- COP_ALPHA_WRITE_ENABLE |
- 0x7 << 16 |
- COP_ALPHA_DST_BLEND_1_SRC_A |
- COP_ALPHA_SRC_BLEND_SRC_A);
- }
-
- n = REGION_NUM_RECTS (&region);
- pbox = REGION_RECTS (&region);
-
- while (n--)
- {
- h = pbox->y2 - pbox->y1;
- w = pbox->x2 - pbox->x1;
-
- offStride = (w + 7) & ~7;
- off_height = off_size / offStride;
- if (off_height > h)
- off_height = h;
-
- cop->multi = COP_MULTI_STRIDE | (stride << 16) | offStride;
-
- y_dst = pbox->y1;
- y_src = y_dst - yDst + ySrc;
- y_msk = y_dst - yDst + yMask;
-
- x_dst = pbox->x1;
- x_src = x_dst - xDst + xSrc;
- x_msk = x_dst - xDst + xMask;
-
- if (mode == MODE_IMAGE)
- srcLine = (CARD32 *) srcBits + (y_src - srcYoff) * srcStride + (x_src - srcXoff);
- else
- mskLine = (CARD8 *) mskBits + (y_msk - mskYoff) * mskStride + (x_msk - mskXoff);
-
- while (h)
- {
- h_this = h;
- if (h_this > off_height)
- h_this = off_height;
- h -= h_this;
-
- offLine = (CARD32 *) tridents->off_screen;
-
- _tridentWaitDone(cop);
-
- cop->dst_start_xy = TRI_XY(x_dst, y_dst);
- cop->dst_end_xy = TRI_XY(x_dst + w - 1, y_dst + h_this - 1);
- cop->src_start_xy = TRI_XY(0,0);
- cop->src_end_xy = TRI_XY(w - 1, h_this - 1);
-
- if (mode == MODE_IMAGE)
- {
- while (h_this--)
- {
- w_remain = w;
- src = srcLine;
- srcLine += srcStride;
- off = offLine;
- offLine += offStride;
- while (w_remain--)
- *off++ = *src++;
- }
- }
- else
- {
- while (h_this--)
- {
- w_remain = w;
- msk = mskLine;
- mskLine += mskStride;
- off = offLine;
- offLine += offStride;
- while (w_remain--)
- *off++ = rgb | (*msk++ << 24);
- }
- }
-
- cop->command = (COP_OP_BLT |
- COP_SCL_OPAQUE |
- COP_OP_FB);
- }
- pbox++;
- }
- cop->src_offset = 0;
-
- KdMarkSync (pDst->pDrawable->pScreen);
- }
- else
- {
- KdCheckComposite (op,
- pSrc,
- pMask,
- pDst,
- xSrc,
- ySrc,
- xMask,
- yMask,
- xDst,
- yDst,
- width,
- height);
- }
-}
-
-KaaScreenPrivRec tridentKaa = {
- tridentPrepareSolid,
- tridentSolid,
- tridentDoneSolid,
-
- tridentPrepareCopy,
- tridentCopy,
- tridentDoneCopy,
-};
-
-Bool
-tridentDrawInit (ScreenPtr pScreen)
-{
- SetupTrident(pScreen);
- tridentScreenInfo(pScreenPriv);
- PictureScreenPtr ps = GetPictureScreen(pScreen);
-
- if (!kaaDrawInit (pScreen, &tridentKaa))
- return FALSE;
-
- if (ps && tridents->off_screen)
- ps->Composite = tridentComposite;
-
- return TRUE;
-}
-
-void
-tridentDrawEnable (ScreenPtr pScreen)
-{
- SetupTrident(pScreen);
- CARD32 cmd;
- CARD32 base;
- CARD16 stride;
- CARD32 format;
- CARD32 alpha;
- int tries;
- int nwrite;
-
- stride = pScreenPriv->screen->fb[0].pixelStride;
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 8:
- format = COP_DEPTH_8;
- break;
- case 16:
- format = COP_DEPTH_16;
- break;
- case 24:
- format = COP_DEPTH_24_32;
- break;
- case 32:
- format = COP_DEPTH_24_32;
- break;
- }
- /*
- * compute a few things which will be set every time the
- * accelerator is used; this avoids problems with APM
- */
- tridentc->cop_depth = COP_MULTI_DEPTH | format;
- tridentc->cop_stride = COP_MULTI_STRIDE | (stride << 16) | (stride);
-
-#define NUM_TRIES 100000
- for (tries = 0; tries < NUM_TRIES; tries++)
- if (!(cop->status & COP_STATUS_BUSY))
- break;
- if (cop->status & COP_STATUS_BUSY)
- FatalError ("Can't initialize graphics coprocessor");
- cop->multi = COP_MULTI_CLIP_TOP_LEFT;
- cop->multi = COP_MULTI_MASK | 0;
- cop->src_offset = 0;
- cop->dst_offset = 0;
- cop->z_offset = 0;
- cop->clip_bottom_right = 0x0fff0fff;
-
- _tridentInit(cop,tridentc);
- _tridentSetSolidRect(cop, pScreen->blackPixel, GXcopy, cmd);
- _tridentRect (cop, 0, 0,
- pScreenPriv->screen->width, pScreenPriv->screen->height,
- cmd);
- KdMarkSync (pScreen);
-}
-
-void
-tridentDrawDisable (ScreenPtr pScreen)
-{
-}
-
-void
-tridentDrawFini (ScreenPtr pScreen)
-{
-}
-
-void
-tridentDrawSync (ScreenPtr pScreen)
-{
- SetupTrident(pScreen);
-
- _tridentWaitIdleEmpty(cop);
-}
diff --git a/hw/kdrive/trident/tridentdraw.h b/hw/kdrive/trident/tridentdraw.h
deleted file mode 100644
index bac11c2a6..000000000
--- a/hw/kdrive/trident/tridentdraw.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _TRIDENTDRAW_H_
-#define _TRIDENTDRAW_H_
-
-#define SetupTrident(s) KdScreenPriv(s); \
- tridentCardInfo(pScreenPriv); \
- Cop *cop = tridentc->cop
-
-#define TridentAlpha (COP_MULTI_ALPHA|COP_ALPHA_WRITE_ENABLE)
-
-#define _tridentInit(cop,tridentc) { \
- if ((cop)->status == 0xffffffff) tridentSetMMIO(tridentc); \
- (cop)->multi = (tridentc)->cop_depth; \
- (cop)->multi = (tridentc)->cop_stride; \
- (cop)->multi = TridentAlpha; \
-} \
-
-#define _tridentSetSolidRect(cop,pix,alu,cmd) {\
- cop->multi = COP_MULTI_PATTERN; \
- cop->multi = COP_MULTI_ROP | tridentRop[alu]; \
- cop->fg = (pix); \
- cmd = COP_OP_BLT | COP_SCL_OPAQUE | COP_OP_ROP | COP_OP_FG; \
-}
-
-#define _tridentRect(cop,x1,y1,x2,y2,cmd) { \
- (cop)->dst_start_xy = TRI_XY (x1,y1); \
- (cop)->dst_end_xy = TRI_XY(x2,y2); \
- _tridentWaitDone(cop); \
- (cop)->command = (cmd); \
-}
-
-#define COP_STATUS_BUSY (COP_STATUS_BE_BUSY | \
- COP_STATUS_DPE_BUSY | \
- COP_STATUS_MI_BUSY)
-
-#define _tridentWaitDone(cop) { \
- int __q__ = 500000; \
- while (__q__-- && (cop)->status & COP_STATUS_BUSY) \
- ; \
- if (!__q__) \
- (cop)->status = 0; \
-}
-
-#define _tridentWaitIdleEmpty(cop) _tridentWaitDone(cop)
-
-#define sourceInvarient(alu) (((alu) & 3) == (((alu) >> 2) & 3))
-
-#endif
diff --git a/hw/kdrive/trident/tridentstub.c b/hw/kdrive/trident/tridentstub.c
deleted file mode 100644
index 0792a50d4..000000000
--- a/hw/kdrive/trident/tridentstub.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "trident.h"
-
-extern int trident_clk, trident_mclk;
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
-
- if (LinuxFindPci (0x1023, 0x9525, 0, &attr))
- KdCardInfoAdd (&tridentFuncs, &attr, 0);
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
-#if 0
- ErrorF("\nTrident Driver Options:\n");
- ErrorF("-clk XXX: what's this?\n");
- ErrorF("-mclk XXX: what's this?\n");
-#endif
- KdUseMsg();
-#ifdef VESA
- vesaUseMsg()
-#endif
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- int ret;
-
- if (!strcmp (argv[i], "-clk"))
- {
- if (i+1 < argc)
- trident_clk = atoi (argv[i+1]);
- else
- UseMsg ();
- return 2;
- }
- if (!strcmp (argv[i], "-mclk"))
- {
- if (i+1 < argc)
- trident_mclk = atoi (argv[i+1]);
- else
- UseMsg ();
- return 2;
- }
-
-#ifdef VESA
- if (!(ret = vesaProcessArgument (argc, argv, i)))
-#endif
- ret = KdProcessArgument(argc, argv, i);
- return ret;
-}
diff --git a/hw/kdrive/trio/s3.c b/hw/kdrive/trio/s3.c
deleted file mode 100644
index cb5104926..000000000
--- a/hw/kdrive/trio/s3.c
+++ /dev/null
@@ -1,1013 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-
-#define REGISTERS_OFFSET (0x1000000)
-#define PACKED_OFFSET (0x8100)
-
-
-CARD8
-_s3ReadIndexRegister (volatile CARD8 *base, CARD8 index)
-{
- CARD8 ret;
- *base = index;
- ret = *(base + 1);
- DRAW_DEBUG ((DEBUG_CRTC, " 0x%3x 0x%02x -> 0x%02x",
- ((int) base) & 0xfff, index, ret));
- return ret;
-}
-
-void
-_s3WriteIndexRegister (volatile CARD8 *base, CARD8 index, CARD8 value)
-{
- DRAW_DEBUG ((DEBUG_CRTC, " 0x%3x 0x%02x <- 0x%02x",
- ((int) base) & 0xfff, index, value));
- *base = index;
- *(base + 1) = value;
-}
-
-/*
- * Map the S3 card and detect its configuration. Do not touch the card
- */
-
-static void
-_s3LoadCrtc (S3Ptr s3, S3Crtc *crtc)
-{
- crtc->h_total_0_7 = GetCrtc (s3, 0x00);
- crtc->h_display_end_0_7 = GetCrtc (s3, 0x01);
- crtc->h_blank_start_0_7 = GetCrtc (s3, 0x02);
- crtc->_h_blank_end = GetCrtc (s3, 0x03);
- crtc->h_sync_start_0_7 = GetCrtc (s3, 0x04);
- crtc->_h_sync_end = GetCrtc (s3, 0x05);
- crtc->v_total_0_7 = GetCrtc (s3, 0x06);
- crtc->crtc_overflow = GetCrtc (s3, 0x07);
- crtc->preset_row_scan = GetCrtc (s3, 0x08);
- crtc->_max_scan_line = GetCrtc (s3, 0x09);
-
- crtc->start_address_8_15 = GetCrtc (s3, 0x0c);
- crtc->start_address_0_7 = GetCrtc (s3, 0x0d);
-
- crtc->v_retrace_start_0_7 = GetCrtc (s3, 0x10);
- crtc->_v_retrace_end = GetCrtc (s3, 0x11);
- crtc->v_display_end_0_7 = GetCrtc (s3, 0x12);
- crtc->screen_off_0_7 = GetCrtc (s3, 0x13);
-
- crtc->v_blank_start_0_7 = GetCrtc (s3, 0x15);
- crtc->v_blank_end_0_7 = GetCrtc (s3, 0x16);
-
- crtc->line_compare_0_7 = GetCrtc (s3, 0x18);
-
- crtc->memory_configuration = GetCrtc (s3, 0x31);
-
- crtc->misc_1 = GetCrtc (s3, 0x3a);
- crtc->h_start_fifo_fetch_0_7 = GetCrtc (s3, 0x3b);
-
- crtc->mode_control = GetCrtc (s3, 0x42);
-
- crtc->hardware_cursor_mode = GetCrtc (s3, 0x45);
- crtc->cursor_address_8_15 = GetCrtc (s3, 0x4C);
- crtc->cursor_address_0_7 = GetCrtc (s3, 0x4D);
-
- crtc->extended_system_control_1 = GetCrtc (s3, 0x50);
- crtc->extended_system_control_2 = GetCrtc (s3, 0x51);
-
- crtc->extended_memory_control = GetCrtc (s3, 0x53);
-
- crtc->extended_ramdac_control = GetCrtc (s3, 0x55);
-
- crtc->extended_horizontal_overflow = GetCrtc (s3, 0x5d);
- crtc->extended_vertical_overflow = GetCrtc (s3, 0x5e);
-
- crtc->l_parm_0_7 = GetCrtc (s3, 0x62);
-
- crtc->extended_misc_control = GetCrtc (s3, 0x65);
-
- crtc->extended_misc_control_2 = GetCrtc (s3, 0x67);
-
- crtc->configuration_3 = GetCrtc (s3, 0x68);
-
- crtc->extended_system_control_3 = GetCrtc (s3, 0x69);
-
- crtc->extended_bios_5 = GetCrtc (s3, 0x6d);
-
- crtc->extended_sequencer_b = GetSrtc (s3, 0x0b);
- crtc->extended_sequencer_d = GetSrtc (s3, 0x0d);
- crtc->dclk_value_low = GetSrtc (s3, 0x12);
- crtc->dclk_value_high = GetSrtc (s3, 0x13);
- crtc->control_2 = GetSrtc (s3, 0x15);
- crtc->ramdac_control = GetSrtc (s3, 0x18);
-
-/* combine values */
-
- switch (crtc_ge_screen_width(crtc)) {
- case 0:
- if (crtc->enable_two_page)
- crtc->ge_screen_pitch = 2048;
- else
- crtc->ge_screen_pitch = 1024;
- break;
- case 1:
- crtc->ge_screen_pitch = 640;
- break;
- case 2:
- /* ignore magic 1600x1200x4 mode */
- crtc->ge_screen_pitch = 800;
- break;
- case 3:
- crtc->ge_screen_pitch = 1280;
- break;
- case 4:
- crtc->ge_screen_pitch = 1152;
- break;
- case 5:
- crtc->ge_screen_pitch = 0; /* reserved */
- break;
- case 6:
- crtc->ge_screen_pitch = 1600;
- break;
- case 7:
- crtc->ge_screen_pitch = 0; /* reserved */
- break;
- }
- switch (crtc->pixel_length) {
- case 0:
- crtc->bits_per_pixel = 8;
- crtc->pixel_width = (crtc_h_display_end(crtc) + 1) * 8;
- break;
- case 1:
- crtc->bits_per_pixel = 16;
- crtc->pixel_width = (crtc_h_display_end(crtc) + 1) * 4;
- break;
- case 3:
- crtc->bits_per_pixel = 32;
- crtc->pixel_width = (crtc_h_display_end(crtc) + 1) * 8;
- break;
- }
- crtc->double_pixel_mode = 0;
- switch (crtc->color_mode) {
- case 0x0:
- crtc->depth = 8; break;
- case 0x1:
- crtc->depth = 8; crtc->double_pixel_mode = 1; break;
- case 0x3:
- crtc->depth = 15; break;
- case 0x5:
- crtc->depth = 16; break;
- case 0x7:
- crtc->depth = 24; break; /* unused */
- case 0xd:
- crtc->depth = 24; break;
- }
-}
-
-static void
-_s3SetBlank (S3Ptr s3, Bool blank)
-{
- CARD8 clock_mode;
-
- DRAW_DEBUG ((DEBUG_S3INIT, "3c4 at 0x%x\n", &s3->crt_vga_3c4));
- clock_mode = _s3ReadIndexRegister (&s3->crt_vga_3c4, 0x01);
- if (blank)
- clock_mode |= 0x20;
- else
- clock_mode &= ~0x20;
- _s3WaitVRetrace (s3);
- _s3WriteIndexRegister (&s3->crt_vga_3c4, 0x01, clock_mode);
- DRAW_DEBUG ((DEBUG_S3INIT, "blank is set to 0x%x", clock_mode));
-}
-
-static void
-_s3SetDepth (S3Ptr s3, S3Crtc *crtc)
-{
- CARD8 save_3c2;
- _s3SetBlank (s3, TRUE);
- PutCrtc(s3, 0x38, 0x48);
- PutCrtc(s3, 0x39, 0xA0);
- PutCrtc(s3, 0x00, crtc->h_total_0_7);
- PutCrtc(s3, 0x01, crtc->h_display_end_0_7);
- PutCrtc(s3, 0x02, crtc->h_blank_start_0_7);
- PutCrtc(s3, 0x03, crtc->_h_blank_end);
- PutCrtc(s3, 0x04, crtc->h_sync_start_0_7);
- PutCrtc(s3, 0x05, crtc->_h_sync_end);
- PutCrtc(s3, 0x06, crtc->v_total_0_7);
- PutCrtc(s3, 0x07, crtc->crtc_overflow);
- PutCrtc(s3, 0x09, crtc->_max_scan_line);
- PutCrtc(s3, 0x0c, crtc->start_address_8_15);
- PutCrtc(s3, 0x0d, crtc->start_address_0_7);
- PutCrtc(s3, 0x10, crtc->v_retrace_start_0_7);
- PutCrtc(s3, 0x11, crtc->_v_retrace_end);
- PutCrtc(s3, 0x12, crtc->v_display_end_0_7);
- PutCrtc(s3, 0x13, crtc->screen_off_0_7);
- PutCrtc(s3, 0x15, crtc->v_blank_start_0_7);
- PutCrtc(s3, 0x16, crtc->v_blank_end_0_7);
- PutCrtc(s3, 0x18, crtc->line_compare_0_7);
- PutCrtc(s3, 0x31, crtc->memory_configuration);
- PutCrtc(s3, 0x3a, crtc->misc_1);
- PutCrtc(s3, 0x3b, crtc->h_start_fifo_fetch_0_7);
- PutCrtc(s3, 0x42, crtc->mode_control);
- PutCrtc(s3, 0x45, crtc->hardware_cursor_mode);
- PutCrtc(s3, 0x4c, crtc->cursor_address_8_15);
- PutCrtc(s3, 0x4d, crtc->cursor_address_0_7);
- PutCrtc(s3, 0x50, crtc->extended_system_control_1);
- PutCrtc(s3, 0x51, crtc->extended_system_control_2);
- PutCrtc(s3, 0x53, crtc->extended_memory_control);
- PutCrtc(s3, 0x55, crtc->extended_ramdac_control);
- PutCrtc(s3, 0x5d, crtc->extended_horizontal_overflow);
- PutCrtc(s3, 0x5e, crtc->extended_vertical_overflow);
- PutCrtc(s3, 0x62, crtc->l_parm_0_7);
- PutCrtc(s3, 0x65, crtc->extended_misc_control);
- PutCrtc(s3, 0x67, crtc->extended_misc_control_2);
- PutCrtc(s3, 0x68, crtc->configuration_3);
- PutCrtc(s3, 0x69, crtc->extended_system_control_3);
- PutCrtc(s3, 0x6d, crtc->extended_bios_5);
- PutCrtc(s3, 0x39, 0x00);
- PutCrtc(s3, 0x38, 0x00);
- PutSrtc(s3, 0x0b, crtc->extended_sequencer_b);
- PutSrtc(s3, 0x0d, crtc->extended_sequencer_d);
- /*
- * Move new dclk/mclk values into PLL
- */
- save_3c2 = s3->crt_vga_3cc;
- DRAW_DEBUG ((DEBUG_S3INIT, "save_3c2 0x%x", save_3c2));
- s3->crt_vga_3c2 = save_3c2 | 0x0c;
-
- PutSrtc(s3, 0x12, crtc->dclk_value_low);
- PutSrtc(s3, 0x13, crtc->dclk_value_high);
-
- DRAW_DEBUG ((DEBUG_S3INIT, "Set PLL load enable, frobbing clk_load..."));
- crtc->dfrq_en = 1;
- PutSrtc(s3, 0x15, crtc->control_2);
- PutSrtc(s3, 0x18, crtc->ramdac_control);
-
- DRAW_DEBUG ((DEBUG_S3INIT, "Clk load frobbed, restoring 3c2 to 0x%x", save_3c2));
- s3->crt_vga_3c2 = save_3c2;
-
- DRAW_DEBUG ((DEBUG_S3INIT, "Enabling display"));
- _s3SetBlank (s3, FALSE);
-}
-
-void
-_s3RestoreCrtc (S3Ptr s3, S3Crtc *crtc)
-{
- _s3SetDepth (s3, crtc);
-}
-
-s3Reset (S3CardInfo *s3c)
-{
- S3Ptr s3 = s3c->s3;
- S3Save *save = &s3c->save;
- CARD8 *cursor_base;
-
- LockS3 (s3c);
-
- _s3UnlockExt (s3);
-
- _s3RestoreCrtc (s3, &save->crtc);
-
- /* set foreground */
- /* Reset cursor color stack pointers */
- (void) GetCrtc(s3, 0x45);
- PutCrtc(s3, 0x4a, save->cursor_fg);
- /* XXX for deeper screens? */
-
- /* set background */
- /* Reset cursor color stack pointers */
- (void) GetCrtc(s3, 0x45);
- PutCrtc(s3, 0x4b, save->cursor_bg);
-
- _s3LockExt (s3);
-
- /* graphics engine state */
- s3->alt_mix = save->alt_mix;
- s3->write_mask = save->write_mask;
- s3->fg = save->fg;
- s3->bg = save->bg;
- /* XXX should save and restore real values? */
- s3->scissors_tl = 0x00000000;
- s3->scissors_br = 0x0fff0fff;
-
- _s3WriteIndexRegister (&s3->crt_vga_3c4, 0x01, save->clock_mode);
- PutCrtc(s3, 0x39, save->lock2);
- PutCrtc(s3, 0x38, save->lock1);
-
- UnlockS3 (s3c);
-}
-
-void
-s3Save (S3CardInfo *s3c)
-{
- S3Ptr s3 = s3c->s3;
- S3Save *save = &s3c->save;
- S3Crtc newCrtc;
- CARD8 t1, t2;
- CARD8 *cursor_base;
-
- LockS3 (s3c);
-
- save->alt_mix = s3->alt_mix;
- save->write_mask = s3->write_mask;
- save->fg = s3->fg;
- save->bg = s3->bg;
-
- save->lock1 = GetCrtc(s3, 0x38);
- save->lock2 = GetCrtc(s3, 0x39);
- save->clock_mode = _s3ReadIndexRegister (&s3->crt_vga_3c4, 0x01);
-
- _s3UnlockExt (s3);
- save->cursor_fg = GetCrtc(s3, 0x4a);
- save->cursor_bg = GetCrtc(s3, 0x4b);
-
- _s3LoadCrtc (s3, &save->crtc);
-
- _s3LockExt (s3);
-
- UnlockS3 (s3c);
-}
-Bool
-s3CardInit (KdCardInfo *card)
-{
- S3CardInfo *s3c;
- S3Ptr s3;
- int size;
- CARD8 *registers;
- CARD32 s3Address = card->attr.address[0];
- CARD8 *temp_buffer;
-
- DRAW_DEBUG ((DEBUG_S3INIT, "s3CardInit"));
- s3c = (S3CardInfo *) xalloc (sizeof (S3CardInfo));
- if (!s3c)
- {
- DRAW_DEBUG ((DEBUG_FAILURE, "can't alloc s3 card info"));
- goto bail0;
- }
-
- memset (s3c, '\0', sizeof (S3CardInfo));
-
- card->driver = s3c;
-
- fprintf (stderr, "S3 at 0x%x\n", s3Address);
- registers = KdMapDevice (s3Address + REGISTERS_OFFSET,
- sizeof (S3) + PACKED_OFFSET);
- if (!registers)
- {
- ErrorF ("Can't map s3 device\n");
- goto bail2;
- }
- s3 = (S3Ptr) (registers + PACKED_OFFSET);
- s3c->registers = registers;
- s3c->s3 = s3;
-
- s3->crt_vga_3c3 = 1; /* wake up part from deep sleep */
- s3->crt_vga_3c2 = 0x01 | 0x02 | 0x0c;
-
- s3->crt_vga_3c4 = 0x58;
- s3->crt_vga_3c5 = 0x10 | 0x3;
-
- /*
- * Can't trust S3 register value for frame buffer amount, must compute
- */
- temp_buffer = KdMapDevice (s3Address, 4096 * 1024);
-
- s3c->memory = KdFrameBufferSize (temp_buffer, 4096 * 1024);
-
- DRAW_DEBUG ((DEBUG_S3INIT, "Detected frame buffer %d", s3c->memory));
-
- KdUnmapDevice (temp_buffer, 4096 * 1024);
-
- if (!s3c->memory)
- {
- ErrorF ("Can't detect s3 frame buffer\n");
- goto bail3;
- }
-
- s3c->frameBuffer = KdMapDevice (s3Address, s3c->memory);
- if (!s3c->frameBuffer)
- {
- ErrorF ("Can't map s3 frame buffer\n");
- goto bail3;
- }
-
- card->driver = s3c;
-
- return TRUE;
-bail3:
- KdUnmapDevice ((void *) s3, sizeof (S3));
-bail2:
-bail1:
- xfree (s3c);
-bail0:
- return FALSE;
-}
-
-Bool
-s3ModeSupported (KdScreenInfo *screen,
- const KdMonitorTiming *t)
-{
- if (t->horizontal != 1600 &&
- t->horizontal != 1280 &&
- t->horizontal != 1152 &&
- t->horizontal != 1024 &&
- t->horizontal != 800 &&
- t->horizontal != 640)
- return FALSE;
- if (t->clock > S3_MAX_CLOCK * 2)
- return FALSE;
- return TRUE;
-}
-
-Bool
-s3ModeUsable (KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- S3CardInfo *s3c = (S3CardInfo *) card->driver;
- int screen_size;
- int pixel_width;
- int byte_width;
-
- if (screen->fb[0].depth >= 24)
- {
- screen->fb[0].depth = 24;
- screen->fb[0].bitsPerPixel = 32;
- }
- else if (screen->fb[0].depth >= 16)
- {
- screen->fb[0].depth = 16;
- screen->fb[0].bitsPerPixel = 16;
- }
- else if (screen->fb[0].depth >= 15)
- {
- screen->fb[0].depth = 15;
- screen->fb[0].bitsPerPixel = 16;
- }
- else
- {
- screen->fb[0].depth = 8;
- screen->fb[0].bitsPerPixel = 8;
- }
-
- byte_width = screen->width * (screen->fb[0].bitsPerPixel >> 3);
- pixel_width = screen->width;
- screen->fb[0].pixelStride = pixel_width;
- screen->fb[0].byteStride = byte_width;
-
- screen_size = byte_width * screen->height;
-
- return screen_size <= s3c->memory;
-}
-
-Bool
-s3ScreenInit (KdScreenInfo *screen)
-{
- KdCardInfo *card = screen->card;
- S3CardInfo *s3c = (S3CardInfo *) card->driver;
- S3ScreenInfo *s3s;
- int screen_size;
- int memory;
- int requested_memory;
- int v_total, h_total;
- int byte_width;
- int pixel_width;
- int m, n, r;
- int i;
- const KdMonitorTiming *t;
-
- DRAW_DEBUG ((DEBUG_S3INIT, "s3ScreenInit"));
- s3s = (S3ScreenInfo *) xalloc (sizeof (S3ScreenInfo));
- if (!s3s)
- return FALSE;
-
- memset (s3s, '\0', sizeof (S3ScreenInfo));
-
- if (!screen->width || !screen->height)
- {
- screen->width = 800;
- screen->height = 600;
- screen->rate = 72;
- }
- if (!screen->fb[0].depth)
- screen->fb[0].depth = 8;
-
- DRAW_DEBUG ((DEBUG_S3INIT, "Requested parameters %dx%dx%d",
- screen->width, screen->height, screen->rate));
- t = KdFindMode (screen, s3ModeSupported);
- screen->rate = t->rate;
- screen->width = t->horizontal;
- screen->height = t->vertical;
- s3GetClock (t->clock, &m, &n, &r, 127, 31, 3);
-#if 0
- fprintf (stderr, "computed %d,%d,%d (%d) provided %d,%d,%d (%d)\n",
- m, n, r, S3_CLOCK(m,n,r),
- t->dac_m, t->dac_n, t->dac_r,
- S3_CLOCK(t->dac_m, t->dac_n, t->dac_r));
-#endif
- /*
- * Can only operate in pixel-doubled mode at 8 bits per pixel
- */
- if (screen->fb[0].depth > 8 && S3_CLOCK(m,n,r) > S3_MAX_CLOCK)
- screen->fb[0].depth = 8;
-
- if (!KdTuneMode (screen, s3ModeUsable, s3ModeSupported))
- {
- xfree (s3s);
- return FALSE;
- }
-
- memory = s3c->memory - screen_size;
-
- /*
- * Stick frame buffer at start of memory
- */
- screen->fb[0].frameBuffer = s3c->frameBuffer;
-
- /*
- * Stick cursor at end of memory
- */
- if (memory >= 2048)
- {
- s3s->cursor_base = s3c->frameBuffer + (s3c->memory - 2048);
- memory -= 2048;
- }
- else
- s3s->cursor_base = 0;
-
- /*
- * Use remaining memory for off-screen storage, but only use
- * one piece (either right or bottom).
- */
- if (memory >= byte_width * S3_TILE_SIZE)
- {
- s3s->fb[0].offscreen = s3c->frameBuffer + screen_size;
- s3s->fb[0].offscreen_x = 0;
- s3s->fb[0].offscreen_y = screen_size / byte_width;
- s3s->fb[0].offscreen_width = pixel_width;
- s3s->fb[0].offscreen_height = memory / byte_width;
- memory -= s3s->fb[0].offscreen_height * byte_width;
- }
- else if (pixel_width - screen->width >= S3_TILE_SIZE)
- {
- s3s->fb[0].offscreen = s3c->frameBuffer + screen->width;
- s3s->fb[0].offscreen_x = screen->width;
- s3s->fb[0].offscreen_y = 0;
- s3s->fb[0].offscreen_width = pixel_width - screen->width;
- s3s->fb[0].offscreen_height = screen->height;
- }
- else
- s3s->fb[0].offscreen = 0;
-
- DRAW_DEBUG ((DEBUG_S3INIT, "depth %d bits %d", screen->fb[0].depth, screen->fb[0].bitsPerPixel));
-
- DRAW_DEBUG ((DEBUG_S3INIT, "Screen size %dx%d memory %d",
- screen->width, screen->height, s3c->memory));
- DRAW_DEBUG ((DEBUG_S3INIT, "frame buffer 0x%x cursor 0x%x offscreen 0x%x",
- s3c->frameBuffer, s3s->cursor_base, s3s->offscreen));
- DRAW_DEBUG ((DEBUG_S3INIT, "offscreen %dx%d+%d+%d",
- s3s->offscreen_width, s3s->offscreen_height,
- s3s->offscreen_x, s3s->offscreen_y));
-
- switch (screen->fb[0].depth) {
- case 8:
- screen->fb[0].visuals = ((1 << StaticGray) |
- (1 << GrayScale) |
- (1 << StaticColor) |
- (1 << PseudoColor) |
- (1 << TrueColor) |
- (1 << DirectColor));
- screen->fb[0].blueMask = 0x00;
- screen->fb[0].greenMask = 0x00;
- screen->fb[0].redMask = 0x00;
- break;
- case 15:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x001f;
- screen->fb[0].greenMask = 0x03e0;
- screen->fb[0].redMask = 0x7c00;
- break;
- case 16:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x001f;
- screen->fb[0].greenMask = 0x07e0;
- screen->fb[0].redMask = 0xf800;
- break;
- case 24:
- screen->fb[0].visuals = (1 << TrueColor);
- screen->fb[0].blueMask = 0x0000ff;
- screen->fb[0].greenMask = 0x00ff00;
- screen->fb[0].redMask = 0xff0000;
- break;
- }
-
- screen->driver = s3s;
-
- return TRUE;
-}
-
-void
-s3Preserve (KdCardInfo *card)
-{
- S3CardInfo *s3c = card->driver;
-
- s3Save (s3c);
-}
-
-/*
- * Enable the card for rendering. Manipulate the initial settings
- * of the card here.
- */
-Bool
-s3Enable (ScreenPtr pScreen)
-{
- KdScreenPriv(pScreen);
- KdCardInfo *card = pScreenPriv->card;
- KdScreenInfo *screen = pScreenPriv->screen;
- s3CardInfo (pScreenPriv);
- s3ScreenInfo (pScreenPriv);
-
- S3Crtc crtcR, *crtc;
- int hactive, hblank, hfp, hbp;
- int vactive, vblank, vfp, vbp;
- int hsize;
-
- int h_total;
- int h_display_end;
- int h_blank_start;
- int h_blank_end;
- int h_sync_start;
- int h_sync_end;
- int h_screen_off;
- int h_start_fifo_fetch;
-
- int v_total;
- int v_retrace_start;
- int v_retrace_end;
- int v_display_end;
- int v_blank_start;
- int v_blank_end;
-
- int h_adjust;
- int h_sync_extend_;
- int h_blank_extend_;
- int i;
- CARD16 cursor_address;
- const KdMonitorTiming *t;
- int m, n, r;
-
- DRAW_DEBUG ((DEBUG_S3INIT, "s3Enable"));
-
- DRAW_DEBUG ((DEBUG_S3INIT, "requested bpp %d current %d",
- pScreenPriv->bitsPerPixel, s3c->save.crtc.bits_per_pixel));
-
- t = KdFindMode (screen, s3ModeSupported);
-
- hfp = t->hfp;
- hbp = t->hbp;
- hblank = t->hblank;
- hactive = t->horizontal;
-
- vfp = t->vfp;
- vbp = t->vbp;
- vblank = t->vblank;
- vactive = t->vertical;
-
- crtcR = s3c->save.crtc;
- crtc = &crtcR;
-
- s3GetClock (t->clock, &m, &n, &r, 127, 31, 3);
- crtc->dclk_pll_m_trio = m;
- crtc->dclk_pll_n_trio = n;
- crtc->dclk_pll_r_trio = r;
-
- crtc->alt_refresh_count = 0x02;
- crtc->enable_alt_refresh = 1;
- crtc->enable_256_or_more = 1;
-
- DRAW_DEBUG ((DEBUG_S3INIT, "memory_bus_size %d\n", crtc->memory_bus_size));
- crtc->memory_bus_size = 1;
-
- crtc->dclk_over_2 = 0;
- crtc->dclk_invert = 0;
- crtc->enable_clock_double = 0;
- crtc->delay_blank = 0;
- crtc->extended_bios_5 = 0;
- /*
- * Compute character lengths for horizontal timing values
- */
- switch (screen->fb[0].bitsPerPixel) {
- case 8:
- hactive = screen->width / 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
- h_screen_off = hactive;
- crtc->pixel_length = 0;
- crtc->color_mode = 0;
- /*
- * Set up for double-pixel mode, switch color modes,
- * divide the dclk and delay h blank by 2 dclks
- */
- if (S3_CLOCK(crtc->dclk_pll_m_trio, crtc->dclk_pll_n_trio,
- crtc->dclk_pll_r_trio) > S3_MAX_CLOCK)
- {
- DRAW_DEBUG ((DEBUG_S3INIT, "S3 clock %g > 80MHz, using pixel double mode",
- S3_CLOCK(crtc->dclk_pll_m_trio, crtc->dclk_pll_n_trio,
- crtc->dclk_pll_r_trio)));
- crtc->color_mode = 1;
- crtc->dclk_over_2 = 1;
- crtc->enable_clock_double = 1;
- crtc->delay_blank = 2;
- crtc->extended_bios_5 = 2;
- }
- h_adjust = 1;
- break;
- case 16:
- hactive = screen->width / 4;
- hblank /= 4;
- hfp /= 4;
- hbp /= 4;
- h_screen_off = hactive;
- crtc->pixel_length = 1;
- crtc->extended_bios_5 = 2;
- if (crtc->depth == 15)
- crtc->color_mode = 3;
- else
- crtc->color_mode = 5;
- h_adjust = 2;
- break;
- case 32:
- hactive = screen->width / 8;
- hblank /= 8;
- hfp /= 8;
- hbp /= 8;
- h_screen_off = hactive * 4;
- crtc->pixel_length = 3;
- crtc->color_mode = 0xd;
- h_adjust = 1;
- break;
- }
-
- /*
- * X server starts frame buffer at top of memory
- */
- DRAW_DEBUG ((DEBUG_S3INIT, "Old start address 0x%x\n",
- crtc_start_address (crtc)));
- crtc_set_start_address (crtc, 0);
-
- /*
- * Compute horizontal register values from timings
- */
- h_total = hactive + hblank - 5;
- h_display_end = hactive - 1;
- h_blank_start = h_display_end;
- h_blank_end = h_blank_start + hblank - h_adjust;
- h_sync_start = hactive + hfp + h_adjust;
- h_sync_end = h_sync_start + hblank - hbp - hfp;
- h_start_fifo_fetch = h_total - 5;
-
- DRAW_DEBUG ((DEBUG_S3INIT, "blank_end 0x%x sync_end 0x%x sync_start 0x%x\n",
- h_blank_end, h_sync_end, h_sync_start));
-
- if (h_blank_end - h_blank_start > 0x40)
- h_blank_extend_ = 1;
- else
- h_blank_extend_ = 0;
-
- if (h_sync_end - h_sync_start > 0x20)
- h_sync_extend_ = 1;
- else
- h_sync_extend_ = 0;
-
- DRAW_DEBUG ((DEBUG_S3INIT, "blank_end 0x%x sync_end 0x%x extend %d\n",
- h_blank_end, h_sync_end, h_sync_extend_));
-
- crtc_set_h_total(crtc, h_total);
- crtc_set_h_display_end (crtc, h_display_end);
- crtc_set_h_blank_start (crtc, h_blank_start);
- crtc_set_h_blank_end (crtc, h_blank_end);
- crtc_set_h_sync_start (crtc, h_sync_start);
- crtc_set_h_sync_end (crtc, h_sync_end);
- crtc_set_screen_off (crtc, h_screen_off);
- crtc_set_h_start_fifo_fetch (crtc, h_start_fifo_fetch);
- crtc->h_sync_extend = h_sync_extend_;
- crtc->h_blank_extend = h_blank_extend_;
-
-
- v_total = vactive + vblank - 2;
- v_retrace_start = vactive + vfp - 1;
- v_retrace_end = v_retrace_start + vblank - vbp - 1;
- v_display_end = vactive - 1;
- v_blank_start = vactive - 1;
- v_blank_end = v_blank_start + vblank - 1;
-
- crtc_set_v_total(crtc, v_total);
- crtc_set_v_retrace_start (crtc, v_retrace_start);
- crtc->v_retrace_end_0_3 = v_retrace_end;
- crtc_set_v_display_end (crtc, v_display_end);
- crtc_set_v_blank_start (crtc, v_blank_start);
- crtc->v_blank_end_0_7 = v_blank_end;
-
- /*
- * Set cursor
- */
- if (!screen->softCursor)
- {
- cursor_address = (s3s->cursor_base - screen->fb[0].frameBuffer) / 1024;
-
- crtc->cursor_address_0_7 = cursor_address;
- crtc->cursor_address_8_15 = cursor_address >> 8;
- crtc->hardware_cursor_ms_x11 = 0;
- crtc->hardware_cursor_enable = 1;
- }
- else
- crtc->hardware_cursor_enable = 0;
-
- /*
- * Set accelerator
- */
- switch (screen->width) {
- case 640: crtc_set_ge_screen_width(crtc,1); break;
- case 800: crtc_set_ge_screen_width(crtc,2); break;
- case 1024: crtc_set_ge_screen_width(crtc,0); break;
- case 1152: crtc_set_ge_screen_width(crtc,4); break;
- case 1280: crtc_set_ge_screen_width(crtc,3); break;
- case 1600: crtc_set_ge_screen_width(crtc,6); break;
- }
-
- /*
- * Set depth values
- */
- crtc->bits_per_pixel = screen->fb[0].bitsPerPixel;
- crtc->depth = screen->fb[0].depth;
-
- crtc->l_parm_0_7 = screen->width / 4; /* Undocumented. */
-
- crtc->disable_v_retrace_int = 1; /* don't let retrace interrupt */
-
- DRAW_DEBUG ((DEBUG_S3INIT, "new h total %d display_end %d",
- crtc_h_total(crtc),
- crtc_h_display_end(crtc)));
- DRAW_DEBUG ((DEBUG_S3INIT, " sync_start %d sync_end %d (%d)",
- crtc_h_sync_start(crtc),
- crtc_h_sync_end(crtc), h_sync_end));
-
- DRAW_DEBUG ((DEBUG_S3INIT, " blank_start %d blank_end %d",
- crtc_h_blank_start(crtc),
- crtc_h_blank_end(crtc)));
-
- DRAW_DEBUG ((DEBUG_S3INIT, " screen_off %d start_fifo %d",
- crtc_screen_off(crtc), crtc_h_start_fifo_fetch(crtc)));
-
- DRAW_DEBUG ((DEBUG_S3INIT, " active %d blank %d fp %d bp %d",
- hactive, hblank, hfp, hbp));
-
- DRAW_DEBUG ((DEBUG_S3INIT, "new v total %d display_end %d",
- crtc_v_total(crtc),
- crtc_v_display_end(crtc)));
- DRAW_DEBUG ((DEBUG_S3INIT, " retrace_start %d retrace_end %d (%d)",
- crtc_v_retrace_start(crtc),
- crtc->v_retrace_end,
- v_retrace_end));
- DRAW_DEBUG ((DEBUG_S3INIT, " blank_start %d blank_end %d",
- crtc_v_blank_start(crtc),
- crtc->v_blank_end_0_7));
-
- DRAW_DEBUG ((DEBUG_S3INIT, " active %d blank %d fp %d bp %d",
- vactive, vblank, vfp, vbp));
-
- /*
- * Set DPMS to normal
- */
- crtc->hsync_control = 0;
- crtc->vsync_control = 0;
-
- LockS3 (s3c);
- _s3SetDepth (s3c->s3, crtc);
- UnlockS3 (s3c);
- return TRUE;
-}
-
-void
-s3Disable (ScreenPtr pScreen)
-{
-}
-
-void
-s3Restore (KdCardInfo *card)
-{
- S3CardInfo *s3c = card->driver;
-
- s3Reset (s3c);
-}
-
-void
-_s3SetSync (S3CardInfo *s3c, int hsync, int vsync)
-{
- /* this abuses the macros defined to access the crtc structure */
- union extended_sequencer_d_u _extended_sequencer_d_u;
- S3Ptr s3 = s3c->s3;
-
- extended_sequencer_d = s3c->save.crtc.extended_sequencer_d;
- hsync_control = hsync;
- vsync_control = vsync;
- PutSrtc (s3, 0x0d, extended_sequencer_d);
-}
-
-Bool
-s3DPMS (ScreenPtr pScreen, int mode)
-{
- KdScreenPriv(pScreen);
- s3CardInfo(pScreenPriv);
-
- switch (mode) {
- case KD_DPMS_NORMAL:
- _s3SetSync (s3c, 0, 0);
- _s3SetBlank (s3c->s3, FALSE);
- break;
- case KD_DPMS_STANDBY:
- _s3SetBlank (s3c->s3, TRUE);
- _s3SetSync (s3c, 1, 0);
- break;
- case KD_DPMS_SUSPEND:
- _s3SetBlank (s3c->s3, TRUE);
- _s3SetSync (s3c, 0, 1);
- break;
- case KD_DPMS_POWERDOWN:
- _s3SetBlank (s3c->s3, TRUE);
- _s3SetSync (s3c, 1, 1);
- break;
- }
- return TRUE;
-}
-
-void
-s3ScreenFini (KdScreenInfo *screen)
-{
- S3ScreenInfo *s3s = (S3ScreenInfo *) screen->driver;
-
- xfree (s3s);
- screen->driver = 0;
-}
-
-void
-s3CardFini (KdCardInfo *card)
-{
- S3CardInfo *s3c = (S3CardInfo *) card->driver;
-
- KdUnmapDevice (s3c->frameBuffer, s3c->memory);
- KdUnmapDevice (s3c->registers, sizeof (S3) + PACKED_OFFSET);
-/* DeleteCriticalSection (&s3c->lock); */
- xfree (s3c);
- card->driver = 0;
-}
-
-KdCardFuncs s3Funcs = {
- s3CardInit,
- s3ScreenInit,
- 0,
- s3Preserve,
- s3Enable,
- s3DPMS,
- s3Disable,
- s3Restore,
- s3ScreenFini,
- s3CardFini,
- s3CursorInit,
- s3CursorEnable,
- s3CursorDisable,
- s3CursorFini,
- s3RecolorCursor,
- s3DrawInit,
- s3DrawEnable,
- s3DrawSync,
- s3DrawDisable,
- s3DrawFini,
- s3GetColors,
- s3PutColors,
-};
-
-void
-S3InitCard (KdCardAttr *attr)
-{
- KdCardInfoAdd (&s3Funcs, attr, 0);
-}
diff --git a/hw/kdrive/trio/s3.h b/hw/kdrive/trio/s3.h
deleted file mode 100644
index b45a8ba80..000000000
--- a/hw/kdrive/trio/s3.h
+++ /dev/null
@@ -1,1200 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _S3_H_
-#define _S3_H_
-
-#include "kdrive.h"
-
-#define PLATFORM 300
-
-#define DRAW_DEBUG(a)
-
-#define DEBUG_S3INIT (DEBUG_ACCEL)
-#define DEBUG_CRTC (DEBUG_ACCEL+1)
-#define DEBUG_PATTERN (DEBUG_ACCEL+2)
-#define DEBUG_RECT (DEBUG_ACCEL+3)
-#define DEBUG_PAINT_WINDOW (DEBUG_ACCEL+4)
-#define DEBUG_SET (DEBUG_ACCEL+5)
-#define DEBUG_RENDER (DEBUG_ACCEL+6)
-#define DEBUG_REGISTERS (DEBUG_ACCEL+7)
-#define DEBUG_ARCS (DEBUG_ACCEL+8)
-#define DEBUG_TEXT (DEBUG_ACCEL+9)
-#define DEBUG_POLYGON (DEBUG_ACCEL+10)
-#define DEBUG_CLIP (DEBUG_ACCEL+11)
-
-/* VESA Approved Register Definitions */
-
-/*
- * Linear Addressing 000 0000 - 0ff ffff (16m)
- * Image data transfer 100 0000 - 100 7fff (32k)
- * PCI config 100 8000 - 100 8043
- * Packed enhanced regs 100 8100 - 100 814a
- * Streams regs 100 8180 - 100 81ff
- * Current Y pos 100 82e8
- * CRT VGA 3b? regs 100 83b0 - 100 83bf
- * CRT VGA 3c? regs 100 83c0 - 100 83cf
- * CRT VGA 3d? regs 100 83d0 - 100 83df
- * Subsystem status (42e8h) 100 8504
- * Advanced function (42e8h) 100 850c
- * Enhanced regs 100 86e8 - 100 eeea
- * Local peripheral bus 100 ff00 - 100 ff5c
- *
- * We don't care about the image transfer or PCI regs, so
- * this structure starts at the packed enhanced regs
- */
-
-typedef volatile CARD32 VOL32;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD8 VOL8;
-
-typedef volatile struct _s3 {
- VOL32 alt_curxy; /* 8100 */
- VOL32 _pad0; /* 8104 */
- VOL32 alt_step; /* 8108 */
- VOL32 _pad1; /* 810c */
- VOL32 err_term; /* 8110 */
- VOL32 _pad2; /* 8114 */
- VOL32 cmd_gp_stat; /* 8118 */
- VOL32 short_stroke; /* 811c */
- VOL32 bg; /* 8120 */
- VOL32 fg; /* 8124 */
- VOL32 write_mask; /* 8128 */
- VOL32 read_mask; /* 812c */
- VOL32 color_cmp; /* 8130 */
- VOL32 alt_mix; /* 8134 */
- VOL32 scissors_tl; /* 8138 */
- VOL32 scissors_br; /* 813c */
- VOL32 pix_cntl_mult_misc2; /* 8140 */
- VOL32 mult_misc_read_sel; /* 8144 */
- VOL32 alt_pcnt; /* 8148 min_axis_pcnt, maj_axis_pcnt */
- VOL8 _pad3[0x19c]; /* 814c */
- VOL16 cur_y; /* 82e8 */
- VOL8 _pad4[0xc6]; /* 82ea */
-
- VOL8 crt_vga_3b0; /* 83b0 */
- VOL8 crt_vga_3b1; /* 83b1 */
- VOL8 crt_vga_3b2; /* 83b2 */
- VOL8 crt_vga_3b3; /* 83b3 */
- VOL8 crt_vga_3b4; /* 83b4 */
- VOL8 crt_vga_3b5; /* 83b5 */
- VOL8 crt_vga_3b6; /* 83b6 */
- VOL8 crt_vga_3b7; /* 83b7 */
- VOL8 crt_vga_3b8; /* 83b8 */
- VOL8 crt_vga_3b9; /* 83b9 */
- VOL8 crt_vga_3ba; /* 83ba */
- VOL8 crt_vga_3bb; /* 83bb */
- VOL8 crt_vga_3bc; /* 83bc */
- VOL8 crt_vga_3bd; /* 83bd */
- VOL8 crt_vga_3be; /* 83be */
- VOL8 crt_vga_3bf; /* 83bf */
-
- VOL8 crt_vga_3c0; /* 83c0 */
- VOL8 crt_vga_3c1; /* 83c1 */
- VOL8 crt_vga_3c2; /* 83c2 */
- VOL8 crt_vga_3c3; /* 83c3 */
- VOL8 crt_vga_3c4; /* 83c4 */
- VOL8 crt_vga_3c5; /* 83c5 */
- VOL8 crt_vga_dac_ad_mk; /* 83c6 */
- VOL8 crt_vga_dac_rd_ad; /* 83c7 */
- VOL8 crt_vga_dac_wt_ad; /* 83c8 */
- VOL8 crt_vga_dac_data; /* 83c9 */
- VOL8 crt_vga_3ca; /* 83ca */
- VOL8 crt_vga_3cb; /* 83cb */
- VOL8 crt_vga_3cc; /* 83cc */
- VOL8 crt_vga_3cd; /* 83cd */
- VOL8 crt_vga_3ce; /* 83ce */
- VOL8 crt_vga_3cf; /* 83cf */
-
- VOL8 crt_vga_3d0; /* 83d0 */
- VOL8 crt_vga_3d1; /* 83d1 */
- VOL8 crt_vga_3d2; /* 83d2 */
- VOL8 crt_vga_3d3; /* 83d3 */
- VOL8 crt_vga_3d4; /* 83d4 */
- VOL8 crt_vga_3d5; /* 83d5 */
- VOL8 crt_vga_3d6; /* 83d6 */
- VOL8 crt_vga_3d7; /* 83d7 */
- VOL8 crt_vga_3d8; /* 83d8 */
- VOL8 crt_vga_3d9; /* 83d9 */
- VOL8 crt_vga_status_1; /* 83da */
- VOL8 crt_vga_3db; /* 83db */
- VOL8 crt_vga_3dc; /* 83dc */
- VOL8 crt_vga_3dd; /* 83dd */
- VOL8 crt_vga_3de; /* 83de */
- VOL8 crt_vga_3df; /* 83df */
-
- VOL8 _pad5[0x124]; /* 83e0 */
- VOL16 subsys_status; /* 8504 */
- VOL8 _pad6[0x6]; /* 8506 */
- VOL16 adv_control; /* 850c */
- VOL8 _pad7[0x1da]; /* 850e */
- VOL16 cur_x; /* 86e8 */
- VOL8 _pad8[0x3fe]; /* 86ea */
- VOL16 desty_axstp; /* 8ae8 */
- VOL8 _pad9[0x3fe]; /* 8aea */
- VOL16 destx_diastp; /* 8ee8 */
- VOL8 _pad10[0x3fe]; /* 8eea */
- VOL16 enh_err_term; /* 92e8 */
- VOL8 _pad11[0x3fe]; /* 92ea */
- VOL16 maj_axis_pcnt; /* 96e8 */
- VOL8 _pad12[0x3fe]; /* 96ea */
- VOL16 enh_cmd_gp_stat; /* 9ae8 */
- VOL8 _pad13[0x3fe]; /* 9aea */
- VOL16 enh_short_stroke; /* 9ee8 */
- VOL8 _pad14[0x3fe]; /* 9eea */
- VOL16 enh_bg; /* a2e8 */
- VOL8 _pad15[0x3fe]; /* a2ea */
- VOL16 enh_fg; /* a6e8 */
- VOL8 _pad16[0x3fe]; /* a6ea */
- VOL16 enh_wrt_mask; /* aae8 */
- VOL8 _pad17[0x3fe]; /* aaea */
- VOL16 enh_rd_mask; /* aee8 */
- VOL8 _pad18[0x3fe]; /* aeea */
- VOL16 enh_color_cmp; /* b2e8 */
- VOL8 _pad19[0x3fe]; /* b2ea */
- VOL16 enh_bg_mix; /* b6e8 */
- VOL8 _pad20[0x3fe]; /* b6ea */
- VOL16 enh_fg_mix; /* bae8 */
- VOL8 _pad21[0x3fe]; /* baea */
- VOL16 enh_rd_reg_dt; /* bee8 */
- VOL8 _pad22[0x23fe]; /* beea */
- VOL32 pix_trans; /* e2e8 */
-} S3, *S3Ptr;
-
-#define VGA_STATUS_1_DTM 0x01
-#define VGA_STATUS_1_VSY 0x08
-
-#define DAC_MASK 0x03c6
-#define DAC_R_INDEX 0x03c7
-#define DAC_W_INDEX 0x03c8
-#define DAC_DATA 0x03c9
-#define DISP_STAT 0x02e8
-#define H_TOTAL 0x02e8
-#define H_DISP 0x06e8
-#define H_SYNC_STRT 0x0ae8
-#define H_SYNC_WID 0x0ee8
-#define V_TOTAL 0x12e8
-#define V_DISP 0x16e8
-#define V_SYNC_STRT 0x1ae8
-#define V_SYNC_WID 0x1ee8
-#define DISP_CNTL 0x22e8
-#define ADVFUNC_CNTL 0x4ae8
-#define SUBSYS_STAT 0x42e8
-#define SUBSYS_CNTL 0x42e8
-#define ROM_PAGE_SEL 0x46e8
-#define CUR_Y 0x82e8
-#define CUR_X 0x86e8
-#define DESTY_AXSTP 0x8ae8
-#define DESTX_DIASTP 0x8ee8
-#define ERR_TERM 0x92e8
-#define MAJ_AXIS_PCNT 0x96e8
-#define GP_STAT 0x9ae8
-#define CMD 0x9ae8
-#define SHORT_STROKE 0x9ee8
-#define BKGD_COLOR 0xa2e8
-#define FRGD_COLOR 0xa6e8
-#define WRT_MASK 0xaae8
-#define RD_MASK 0xaee8
-#define COLOR_CMP 0xb2e8
-#define BKGD_MIX 0xb6e8
-#define FRGD_MIX 0xbae8
-#define MULTIFUNC_CNTL 0xbee8
-#define MIN_AXIS_PCNT 0x0000
-#define SCISSORS_T 0x1000
-#define SCISSORS_L 0x2000
-#define SCISSORS_B 0x3000
-#define SCISSORS_R 0x4000
-#define MEM_CNTL 0x5000
-#define PATTERN_L 0x8000
-#define PATTERN_H 0x9000
-#define PIX_CNTL 0xa000
-#define CONTROL_MISC2 0xd000
-#define PIX_TRANS 0xe2e8
-
-/* Advanced Function Control Regsiter */
-#define CLKSEL 0x0004
-#define DISABPASSTHRU 0x0001
-
-/* Graphics Processor Status Register */
-
-#define GPNSLOT 13
-
-#define GPBUSY_1 0x0080
-#define GPBUSY_2 0x0040
-#define GPBUSY_3 0x0020
-#define GPBUSY_4 0x0010
-#define GPBUSY_5 0x0008
-#define GPBUSY_6 0x0004
-#define GPBUSY_7 0x0002
-#define GPBUSY_8 0x0001
-#define GPBUSY_9 0x8000
-#define GPBUSY_10 0x4000
-#define GPBUSY_11 0x2000
-#define GPBUSY_12 0x1000
-#define GPBUSY_13 0x0800
-
-#define GPEMPTY 0x0400
-#define GPBUSY 0x0200
-#define DATDRDY 0x0100
-
-/* Command Register */
-#define CMD_NOP 0x0000
-#define CMD_LINE 0x2000
-#define CMD_RECT 0x4000
-#define CMD_RECTV1 0x6000
-#define CMD_RECTV2 0x8000
-#define CMD_LINEAF 0xa000
-#define CMD_BITBLT 0xc000
-#define CMD_PATBLT 0xe000
-#define CMD_OP_MSK 0xe000
-#define BYTSEQ 0x1000
-#define _32BITNOPAD 0x0600
-#define _32BIT 0x0400
-#define _16BIT 0x0200
-#define _8BIT 0x0000
-#define PCDATA 0x0100
-#define INC_Y 0x0080
-#define YMAJAXIS 0x0040
-#define INC_X 0x0020
-#define DRAW 0x0010
-#define LINETYPE 0x0008
-#define LASTPIX 0x0004 /* Draw last pixel in line */
-#define PLANAR 0x0002
-#define WRTDATA 0x0001
-
-/* Background Mix Register */
-#define BSS_BKGDCOL 0x0000
-#define BSS_FRGDCOL 0x0020
-#define BSS_PCDATA 0x0040
-#define BSS_BITBLT 0x0060
-
-/* Foreground Mix Register */
-#define FSS_BKGDCOL 0x0000
-#define FSS_FRGDCOL 0x0020
-#define FSS_PCDATA 0x0040
-#define FSS_BITBLT 0x0060
-
-/* The Mixes */
-#define MIX_MASK 0x001f
-
-#define MIX_NOT_DST 0x0000
-#define MIX_0 0x0001
-#define MIX_1 0x0002
-#define MIX_DST 0x0003
-#define MIX_NOT_SRC 0x0004
-#define MIX_XOR 0x0005
-#define MIX_XNOR 0x0006
-#define MIX_SRC 0x0007
-#define MIX_NAND 0x0008
-#define MIX_NOT_SRC_OR_DST 0x0009
-#define MIX_SRC_OR_NOT_DST 0x000a
-#define MIX_OR 0x000b
-#define MIX_AND 0x000c
-#define MIX_SRC_AND_NOT_DST 0x000d
-#define MIX_NOT_SRC_AND_DST 0x000e
-#define MIX_NOR 0x000f
-
-#define MIX_MIN 0x0010
-#define MIX_DST_MINUS_SRC 0x0011
-#define MIX_SRC_MINUS_DST 0x0012
-#define MIX_PLUS 0x0013
-#define MIX_MAX 0x0014
-#define MIX_HALF__DST_MINUS_SRC 0x0015
-#define MIX_HALF__SRC_MINUS_DST 0x0016
-#define MIX_AVERAGE 0x0017
-#define MIX_DST_MINUS_SRC_SAT 0x0018
-#define MIX_SRC_MINUS_DST_SAT 0x001a
-#define MIX_HALF__DST_MINUS_SRC_SAT 0x001c
-#define MIX_HALF__SRC_MINUS_DST_SAT 0x001e
-#define MIX_AVERAGE_SAT 0x001f
-
-/* Pixel Control Register */
-#define MIXSEL_FRGDMIX 0x0000
-#define MIXSEL_PATT 0x0040
-#define MIXSEL_EXPPC 0x0080
-#define MIXSEL_EXPBLT 0x00c0
-#define COLCMPOP_F 0x0000
-#define COLCMPOP_T 0x0008
-#define COLCMPOP_GE 0x0010
-#define COLCMPOP_LT 0x0018
-#define COLCMPOP_NE 0x0020
-#define COLCMPOP_EQ 0x0028
-#define COLCMPOP_LE 0x0030
-#define COLCMPOP_GT 0x0038
-#define PLANEMODE 0x0004
-
-#define FIFO_SLOTS 13
-
-#define GPSLOT(n) (1 << ((n) > 8 ? (15 - ((n) - 9)) : (8 - (n))))
-
-/* Wait for n slots to become available */
-#if 0
-#define _s3WaitSlots(s3,n) { \
- DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitSlots 0x%x %d", (s3)->cmd_gp_stat, n)); \
- while (((s3)->cmd_gp_stat & GPSLOT(n)) != 0); \
- DRAW_DEBUG ((DEBUG_CRTC, " s3 0x%x %d slots ready", (s3)->cmd_gp_stat, n)); \
-}
-#else
-/* let PCI retries solve this problem */
-#define _s3WaitSlots(s3,n)
-#endif
-
-/* Wait until queue is empty */
-#define _s3WaitEmpty(s3) { \
- DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitEmpty 0x%x", (s3)->cmd_gp_stat)); \
- while (!((s3)->cmd_gp_stat & GPEMPTY)) ; \
- DRAW_DEBUG ((DEBUG_CRTC, " s3 empty")); \
-}
-
-/* Wait until GP is idle and queue is empty */
-#define _s3WaitIdleEmpty(s3) { \
- DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitIdleEmpty 0x%x", (s3)->cmd_gp_stat)); \
- while (((s3)->cmd_gp_stat & (GPBUSY|GPEMPTY)) != GPEMPTY) ; \
- DRAW_DEBUG ((DEBUG_CRTC, " s3 idle empty")); \
-}
-
-/* Wait until GP is idle */
-#define _s3WaitIdle(s3) { \
- DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitIdle 0x%x", (s3)->cmd_gp_stat)); \
- while ((s3)->cmd_gp_stat & GPBUSY) ; \
- DRAW_DEBUG ((DEBUG_CRTC, " s3 idle")); \
-}
-
-typedef struct _s3Cursor {
- int width, height;
- int xhot, yhot;
- Bool has_cursor;
- CursorPtr pCursor;
- Pixel source, mask;
-} S3Cursor;
-
-typedef struct _s3PatternCache {
- int id;
- int x, y;
-} S3PatternCache;
-
-typedef struct _s3Patterns {
- S3PatternCache *cache;
- int ncache;
- int last_used;
- int last_id;
-} S3Patterns;
-
-typedef struct _crtc {
- CARD8 h_total_0_7; /* CR0 */
- CARD8 h_display_end_0_7; /* CR1 */
- CARD8 h_blank_start_0_7; /* CR2 */
- union {
- struct {
- CARD8 _h_blank_end_0_4 : 5;
- CARD8 _display_skew : 2;
- CARD8 : 1;
- } _h_blank_end_s;
- CARD8 __h_blank_end; /* CR3 */
- } _h_blank_end_u;
-#define h_blank_end_0_4 _h_blank_end_u._h_blank_end_s._h_blank_end_0_4
-#define display_skew _h_blank_end_u._h_blank_end_s._display_skew
-#define _h_blank_end _h_blank_end_u.__h_blank_end
-
- CARD8 h_sync_start_0_7; /* CR4 */
-
- union {
- struct {
- CARD8 _h_sync_end_0_4 : 5;
- CARD8 _horizontal_skew : 2;
- CARD8 _h_blank_end_5 : 1;
- } _h_sync_end_s;
- CARD8 __h_sync_end; /* CR5 */
- } _h_sync_end_u;
-
-#define h_sync_end_0_4 _h_sync_end_u._h_sync_end_s._h_sync_end_0_4
-#define horizontal_skew _h_sync_end_u._h_sync_end_s._horizontal_skew
-#define h_blank_end_5 _h_sync_end_u._h_sync_end_s._h_blank_end_5
-#define _h_sync_end _h_sync_end_u.__h_sync_end
-
- CARD8 v_total_0_7; /* CR6 */
-
- union {
- struct {
- CARD8 _v_total_8 : 1;
- CARD8 _v_display_end_8 : 1;
- CARD8 _v_retrace_start_8 : 1;
- CARD8 _v_blank_start_8 : 1;
- CARD8 _line_compare_8 : 1;
- CARD8 _v_total_9 : 1;
- CARD8 _v_display_end_9 : 1;
- CARD8 _v_retrace_start_9 : 1;
- } _crtc_overflow_s;
- CARD8 _crtc_overflow; /* CR7 */
- } _crtc_overflow_u;
-
-#define v_total_8 _crtc_overflow_u._crtc_overflow_s._v_total_8
-#define v_display_end_8 _crtc_overflow_u._crtc_overflow_s._v_display_end_8
-#define v_retrace_start_8 _crtc_overflow_u._crtc_overflow_s._v_retrace_start_8
-#define v_blank_start_8 _crtc_overflow_u._crtc_overflow_s._v_blank_start_8
-#define line_compare_8 _crtc_overflow_u._crtc_overflow_s._line_compare_8
-#define v_total_9 _crtc_overflow_u._crtc_overflow_s._v_total_9
-#define v_display_end_9 _crtc_overflow_u._crtc_overflow_s._v_display_end_9
-#define v_retrace_start_9 _crtc_overflow_u._crtc_overflow_s._v_retrace_start_9
-#define crtc_overflow _crtc_overflow_u._crtc_overflow
-
- CARD8 preset_row_scan; /* CR8 (unused) */
-
- union {
- struct {
- CARD8 _max_scan_line : 5;
- CARD8 _v_blank_start_9 : 1;
- CARD8 _line_compare_9 : 1;
- CARD8 _double_scan : 1;
- } _max_scan_line_s;
- CARD8 __max_scan_line; /* CR9 */
- } _max_scan_line_u;
-
-#define max_scan_line _max_scan_line_u._max_scan_line_s._max_scan_line
-#define v_blank_start_9 _max_scan_line_u._max_scan_line_s._v_blank_start_9
-#define line_compare_9 _max_scan_line_u._max_scan_line_s._line_compare_9
-#define double_scan _max_scan_line_u._max_scan_line_s._double_scan
-#define _max_scan_line _max_scan_line_u.__max_scan_line
-
- CARD8 cursor_start;
- CARD8 cursor_end;
-
- CARD8 start_address_8_15; /* CRC */
- CARD8 start_address_0_7; /* CRD */
-
- CARD8 cursor_loc_high;
- CARD8 cursor_loc_low;
-
- CARD8 v_retrace_start_0_7; /* CR10 */
- union {
- struct {
- CARD8 _v_retrace_end_0_3 : 4;
- CARD8 _clear_v_retrace_int : 1;
- CARD8 _disable_v_retrace_int : 1;
- CARD8 _refresh_cycle_select : 1;
- CARD8 _lock_crtc : 1;
- } _v_retrace_end_s;
- CARD8 __v_retrace_end; /* CR11 */
- } _v_retrace_end_u;
-
-#define v_retrace_end_0_3 _v_retrace_end_u._v_retrace_end_s._v_retrace_end_0_3
-#define clear_v_retrace_int _v_retrace_end_u._v_retrace_end_s._clear_v_retrace_int
-#define disable_v_retrace_int _v_retrace_end_u._v_retrace_end_s._disable_v_retrace_int
-#define refresh_cycle_select _v_retrace_end_u._v_retrace_end_s._refresh_cycle_select
-#define lock_crtc _v_retrace_end_u._v_retrace_end_s._lock_crtc
-#define _v_retrace_end _v_retrace_end_u.__v_retrace_end
-
- CARD8 v_display_end_0_7; /* CR12 */
-
- CARD8 screen_off_0_7; /* CR13 */
-
- union {
- struct {
- CARD8 _underline_location : 5;
- CARD8 _count_by_four : 1;
- CARD8 _doubleword_mode : 1;
- CARD8 : 1;
- } _underline_location_s;
- CARD8 __underline_location; /* CR14 (unused) */
- } _underline_location_u;
-
-#define underline_location _underline_location_u._underline_location_s._underline_location
-#define count_by_four _underline_location_u._underline_location_s._count_by_four
-#define doubleword_mode _underline_location_u._underline_location_s._doubleword_mode
-#define _underline_location _underline_location_u.__underline_location
-
- CARD8 v_blank_start_0_7; /* CR15 */
- CARD8 v_blank_end_0_7; /* CR16 */
-
- union {
- struct {
- CARD8 _two_bk_cga : 1;
- CARD8 _four_bk_cga : 1;
- CARD8 _v_total_double : 1;
- CARD8 _word_mode : 1;
- CARD8 : 1;
- CARD8 _address_wrap : 1;
- CARD8 _byte_mode : 1;
- CARD8 _hardware_reset : 1;
- } _crtc_mode_s;
- CARD8 _crtc_mode; /* CR17 (unused) */
- } _crtc_mode_u;
-
- CARD8 line_compare_0_7; /* CR18 (unused) */
-
- union {
- struct {
- CARD8 _enable_base_offset : 1;
- CARD8 _enable_two_page : 1;
- CARD8 _enable_vga_16_bit : 1;
- CARD8 _enhanced_mode_mapping : 1;
- CARD8 _old_display_start : 2;
- CARD8 _enable_high_speed_text : 1;
- CARD8 : 1;
- } _memory_configuration_s;
- CARD8 _memory_configuration; /* CR31 (unused) */
- } _memory_configuration_u;
-
-#define memory_configuration _memory_configuration_u._memory_configuration
-#define enable_base_offset _memory_configuration_u._memory_configuration_s._enable_base_offset
-#define enable_two_page _memory_configuration_u._memory_configuration_s._enable_two_page
-#define enable_vga_16_bit _memory_configuration_u._memory_configuration_s._enable_vga_16_bit
-#define enhanved_mode_mapping _memory_configuration_u._memory_configuration_s._enhanced_mode_mapping
-#define old_display_start _memory_configuration_u._memory_configuration_s._old_display_start
-#define enable_high_speed_text _memory_configuration_u._memory_configuration_s._enable_high_speed_text
-
- union {
- struct {
- CARD8 _alt_refresh_count : 2;
- CARD8 _enable_alt_refresh : 1;
- CARD8 _enable_top_memory : 1;
- CARD8 _enable_256_or_more : 1;
- CARD8 _high_speed_text : 1;
- CARD8 : 1;
- CARD8 _pci_burst_disabled : 1;
- } _misc_1_s;
- CARD8 _misc_1; /* CR3A */
- } _misc_1_u;
-#define misc_1 _misc_1_u._misc_1
-#define alt_refresh_count _misc_1_u._misc_1_s._alt_refresh_count
-#define enable_alt_refresh _misc_1_u._misc_1_s._enable_alt_refresh
-#define enable_top_memory _misc_1_u._misc_1_s._enable_top_memory
-#define enable_256_or_more _misc_1_u._misc_1_s._enable_256_or_more
-#define high_speed_text _misc_1_u._misc_1_s._high_speed_text
-#define pci_burst_disabled _misc_1_u._misc_1_s._pci_burst_disabled
-
- CARD8 h_start_fifo_fetch_0_7; /* CR3B */
-
- union {
- struct {
- CARD8 : 5;
- CARD8 interlace : 1;
- CARD8 : 2;
- } _mode_control_s;
- CARD8 _mode_control; /* CR42 */
- } _mode_control_u;
-
-#define mode_control _mode_control_u._mode_control
-
- union {
- struct {
- CARD8 : 2;
- CARD8 _old_screen_off_8 : 1;
- CARD8 : 4;
- CARD8 h_counter_double_mode : 1;
- } _extended_mode_s;
- CARD8 _extended_mode; /* CR43 (unused) */
- } _extended_mode_u;
-
-#define extended_mode _extended_mode_u._extended_mode
-#define old_screen_off_8 _extended_mode_u._extended_mode_s._old_screen_off_8
-
- union {
- struct {
- CARD8 _hardware_cursor_enable : 1;
- CARD8 : 3;
- CARD8 _hardware_cursor_right : 1;
- CARD8 : 3;
- } _hardware_cursor_mode_s;
- CARD8 _hardware_cursor_mode; /* CR45 */
- } _hardware_cursor_mode_u;
-
-#define hardware_cursor_mode _hardware_cursor_mode_u._hardware_cursor_mode
-#define hardware_cursor_enable _hardware_cursor_mode_u._hardware_cursor_mode_s._hardware_cursor_enable
-
- CARD8 cursor_address_8_15; /* CR4C */
- CARD8 cursor_address_0_7; /* CR4D */
-
- union {
- struct {
- CARD8 _ge_screen_width_2 : 1;
- CARD8 : 3;
- CARD8 _pixel_length : 2;
- CARD8 _ge_screen_width_0_1 : 2;
- } _extended_system_control_1_s;
- CARD8 _extended_system_control_1; /* CR50 */
- } _extended_system_control_1_u;
-#define ge_screen_width_2 _extended_system_control_1_u._extended_system_control_1_s._ge_screen_width_2
-#define pixel_length _extended_system_control_1_u._extended_system_control_1_s._pixel_length
-#define ge_screen_width_0_1 _extended_system_control_1_u._extended_system_control_1_s._ge_screen_width_0_1
-#define extended_system_control_1 _extended_system_control_1_u._extended_system_control_1
-
- union {
- struct {
- CARD8 : 4;
- CARD8 _screen_off_8_9 : 2;
- CARD8 : 2;
- } _extended_system_control_2_s;
- CARD8 _extended_system_control_2; /* CR51 */
- } _extended_system_control_2_u;
-#define extended_system_control_2 _extended_system_control_2_u._extended_system_control_2
-#define screen_off_8_9 _extended_system_control_2_u._extended_system_control_2_s._screen_off_8_9
-
- union {
- struct {
- CARD8 : 1;
- CARD8 big_endian_linear : 2;
- CARD8 mmio_select : 2;
- CARD8 mmio_window : 1;
- CARD8 swap_nibbles : 1;
- CARD8 : 1;
- } _extended_memory_control_s;
- CARD8 _extended_memory_control; /* CR53 */
- } _extended_memory_control_u;
-#define extended_memory_control _extended_memory_control_u._extended_memory_control
-
- union {
- struct {
- CARD8 : 2;
- CARD8 _enable_gir : 1;
- CARD8 : 1;
- CARD8 _hardware_cursor_ms_x11 : 1;
- CARD8 : 2;
- CARD8 _tri_state_off_vclk : 1;
- } _extended_ramdac_control_s;
- CARD8 _extended_ramdac_control; /* CR55 */
- } _extended_ramdac_control_u;
-#define extended_ramdac_control _extended_ramdac_control_u._extended_ramdac_control
-#define hardware_cursor_ms_x11 _extended_ramdac_control_u._extended_ramdac_control_s._hardware_cursor_ms_x11
-
-
- union {
- struct {
- CARD8 _h_total_8 : 1;
- CARD8 _h_display_end_8 : 1;
- CARD8 _h_blank_start_8 : 1;
- CARD8 _h_blank_extend : 1; /* extend h_blank by 64 */
- CARD8 _h_sync_start_8 : 1;
- CARD8 _h_sync_extend : 1; /* extend h_sync by 32 */
- CARD8 _h_start_fifo_fetch_8 : 1;
- CARD8 : 1;
- } _extended_horizontal_overflow_s;
- CARD8 _extended_horizontal_overflow; /* CR5D */
- } _extended_horizontal_overflow_u;
-#define extended_horizontal_overflow _extended_horizontal_overflow_u._extended_horizontal_overflow
-#define h_total_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_total_8
-#define h_display_end_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_display_end_8
-#define h_blank_start_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_blank_start_8
-#define h_blank_extend _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_blank_extend
-#define h_sync_start_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_sync_start_8
-#define h_sync_extend _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_sync_extend
-#define h_start_fifo_fetch_8 _extended_horizontal_overflow_u._extended_horizontal_overflow_s._h_start_fifo_fetch_8
-
-
- union {
- struct {
- CARD8 _v_total_10 : 1;
- CARD8 _v_display_end_10 : 1;
- CARD8 _v_blank_start_10 : 1;
- CARD8 : 1;
- CARD8 _v_retrace_start_10 : 1;
- CARD8 : 1;
- CARD8 _line_compare_10 : 1;
- CARD8 : 1;
- } _extended_vertical_overflow_s;
- CARD8 _extended_vertical_overflow; /* CR5E */
- } _extended_vertical_overflow_u;
-#define extended_vertical_overflow _extended_vertical_overflow_u._extended_vertical_overflow
-#define v_total_10 _extended_vertical_overflow_u._extended_vertical_overflow_s._v_total_10
-#define v_display_end_10 _extended_vertical_overflow_u._extended_vertical_overflow_s._v_display_end_10
-#define v_blank_start_10 _extended_vertical_overflow_u._extended_vertical_overflow_s._v_blank_start_10
-#define v_retrace_start_10 _extended_vertical_overflow_u._extended_vertical_overflow_s._v_retrace_start_10
-#define line_compare_10 _extended_vertical_overflow_u._extended_vertical_overflow_s._line_compare_10
-
-
- CARD8 l_parm_0_7; /* CR62 (undocumented) */
-
- union {
- struct {
- CARD8 : 3;
- CARD8 _delay_blank : 2;
- CARD8 : 3;
- } _extended_misc_control_s;
- CARD8 _extended_misc_control; /* CR65 */
- } _extended_misc_control_u;
-#define extended_misc_control _extended_misc_control_u._extended_misc_control
-#define delay_blank _extended_misc_control_u._extended_misc_control_s._delay_blank
-
- union {
- struct {
- CARD8 _v_clock_phase : 1;
- CARD8 : 3;
- CARD8 _color_mode : 4;
- } _extended_misc_control_2_s;
- CARD8 _extended_misc_control_2; /* CR67 */
- } _extended_misc_control_2_u;
-
-#define v_clock_phase _extended_misc_control_2_u._extended_misc_control_2_s._v_clock_phase
-#define color_mode _extended_misc_control_2_u._extended_misc_control_2_s._color_mode
-#define extended_misc_control_2 _extended_misc_control_2_u._extended_misc_control_2
-
-
- union {
- struct {
- CARD8 cas_oe_str : 2;
- CARD8 ras_low : 1;
- CARD8 ras_precharge : 1;
- CARD8 : 3;
- CARD8 _memory_bus_size : 1; /* 0 = 32, 1 = 32/64 */
- } _configuration_3_s;
- CARD8 _configuration_3; /* CR68 */
- } _configuration_3_u;
-#define configuration_3 _configuration_3_u._configuration_3
-#define memory_bus_size _configuration_3_u._configuration_3_s._memory_bus_size
-
- union {
- struct {
- CARD8 _start_address_16_19 : 4;
- CARD8 : 4;
- } _extended_system_control_3_s;
- CARD8 _extended_system_control_3; /* CR69 */
- } _extended_system_control_3_u;
-#define extended_system_control_3 _extended_system_control_3_u._extended_system_control_3
-#define start_address_16_19 _extended_system_control_3_u._extended_system_control_3_s._start_address_16_19
-
- CARD8 extended_bios_5; /* CR6D */
-
- union {
- struct {
- CARD8 dot_clock_vclki : 1; /* testing only */
- CARD8 vclki_with_vafc : 1; /* feature connector */
- CARD8 : 1;
- CARD8 bpp_24_mode : 1; /* 24 bpp mode */
- CARD8 alt_color_mode : 4; /* feature connector mode */
- } _extended_sequencer_b_s;
- CARD8 _extended_sequencer_b; /* SRB */
- } _extended_sequencer_b_u;
-
-#define extended_sequencer_b _extended_sequencer_b_u._extended_sequencer_b
-
- union extended_sequencer_d_u {
- struct {
- CARD8 enable_feature : 1;
- CARD8 lpb_feature : 1;
- CARD8 : 2;
- CARD8 _hsync_control : 2;
- CARD8 _vsync_control : 2;
- } _extended_sequencer_d_s;
- CARD8 _extended_sequencer_d;
- } _extended_sequencer_d_u;
-
-#define extended_sequencer_d _extended_sequencer_d_u._extended_sequencer_d
-#define hsync_control _extended_sequencer_d_u._extended_sequencer_d_s._hsync_control
-#define vsync_control _extended_sequencer_d_u._extended_sequencer_d_s._vsync_control
-
- union {
- struct {
- CARD8 _dclk_pll_n : 5;
- CARD8 _dclk_pll_r : 2;
- CARD8 : 1;
- } _dclk_value_low_s;
- CARD8 _dclk_value_low; /* SR12 */
- } _dclk_value_low_u;
-
-#define dclk_value_low _dclk_value_low_u._dclk_value_low
-#define dclk_pll_n_trio _dclk_value_low_u._dclk_value_low_s._dclk_pll_n
-#define dclk_pll_r_trio _dclk_value_low_u._dclk_value_low_s._dclk_pll_r
-
- union {
- struct {
- CARD8 _dclk_pll_m : 7;
- CARD8 : 1;
- } _dclk_value_high_s;
- CARD8 _dclk_value_high; /* SR13 */
- } _dclk_value_high_u;
-
-#define dclk_value_high _dclk_value_high_u._dclk_value_high
-#define dclk_pll_m_trio _dclk_value_high_u._dclk_value_high_s._dclk_pll_m
-
- union {
- struct {
- CARD8 _mfrq_en : 1;
- CARD8 _dfrq_en : 1;
- CARD8 _mclk_out : 1;
- CARD8 _vclk_out : 1;
- CARD8 _dclk_over_2 : 1;
- CARD8 _clk_load : 1;
- CARD8 _dclk_invert : 1;
- CARD8 _ena_2_cycle_write : 1;
- } _control_2_s;
- CARD8 _control_2; /* SR15 */
- } _control_2_u;
-
-#define control_2 _control_2_u._control_2
-#define mfrq_en _control_2_u._control_2_s._mfrq_en
-#define dfrq_en _control_2_u._control_2_s._dfrq_en
-#define mclk_out _control_2_u._control_2_s._mclk_out
-#define vclk_out _control_2_u._control_2_s._vclk_out
-#define dclk_over_2 _control_2_u._control_2_s._dclk_over_2
-#define clk_load _control_2_u._control_2_s._clk_load
-#define dclk_invert _control_2_u._control_2_s._dclk_invert
-#define ena_2_cycle_write _control_2_u._control_2_s._ena_2_cycle_write
-
- union {
- struct {
- CARD8 : 5;
- CARD8 _dac_power_down : 1;
- CARD8 _lut_write_control : 1;
- CARD8 _enable_clock_double : 1;
- } _ramdac_control_s;
- CARD8 _ramdac_control; /* SR18 */
- } _ramdac_control_u;
-
-#define ramdac_control _ramdac_control_u._ramdac_control
-#define enable_clock_double _ramdac_control_u._ramdac_control_s._enable_clock_double
-
- union {
- struct {
- CARD8 _dclk_pll_n : 6;
- CARD8 _dclk_pll_r : 2;
- } _dclk_value_low_s;
- CARD8 _dclk_value_low; /* SR36 */
- } _dclk_value_low_savage_u;
-
-#define dclk_value_low_savage _dclk_value_low_savage_u._dclk_value_low
-#define dclk_pll_n_savage_0_5 _dclk_value_low_savage_u._dclk_value_low_s._dclk_pll_n
-#define dclk_pll_r_savage_0_1 _dclk_value_low_savage_u._dclk_value_low_s._dclk_pll_r
-
- CARD8 dclk_pll_m0_savage_0_7; /* SR37 */
- CARD8 dclk_pll_m1_savage_0_7; /* SR38 */
-
- struct {
- CARD8 _dclk_pll_m : 8;
- } _dclk_value_high_s_savage;
-
- union {
- struct {
- CARD8 _dclk_select : 1;
- CARD8 : 1;
- CARD8 _dclk_pll_r_2 : 1;
- CARD8 _dclk_pll_m_8 : 1;
- CARD8 _dclk_pll_n_6 : 1;
- CARD8 _pce : 1;
- CARD8 _ccg : 1;
- CARD8 _csp : 1;
- } _extended_seq_39_s;
- CARD8 _extended_seq_39; /* SR39 */
- } _extended_seq_39_u;
-
-#define extended_seq_39 _extended_seq_39_u._extended_seq_39
-#define dclk_pll_select_savage _extended_seq_39_u._extended_seq_39_s._dclk_select
-#define dclk_pll_r_savage_2 _extended_seq_39_u._extended_seq_39_s._dclk_pll_r_2
-#define dclk_pll_m_savage_8 _extended_seq_39_u._extended_seq_39_s._dclk_pll_m_8
-#define dclk_pll_n_savage_6 _extended_seq_39_u._extended_seq_39_s._dclk_pll_n_6
-
- /* computed values */
- CARD16 ge_screen_pitch;
- CARD8 bits_per_pixel;
- CARD8 depth;
- CARD8 double_pixel_mode;
- CARD16 pixel_width;
-} S3Crtc;
-
-#define crtc_v_total(crtc) ((crtc)->v_total_0_7 | \
- ((crtc)->v_total_8 << 8) | \
- ((crtc)->v_total_9 << 9) | \
- ((crtc)->v_total_10 << 10))
-
-#define crtc_set_v_total(crtc,v) { \
- ((crtc))->v_total_0_7 = (v); \
- ((crtc))->v_total_8 = (v) >> 8; \
- ((crtc))->v_total_9 = (v) >> 9; \
- ((crtc))->v_total_10 = (v) >> 10; \
-}
-
-#define crtc_v_display_end(crtc) ((crtc)->v_display_end_0_7 | \
- ((crtc)->v_display_end_8 << 8) | \
- ((crtc)->v_display_end_9 << 9) | \
- ((crtc)->v_display_end_10 << 10))
-
-#define crtc_set_v_display_end(crtc,v) {\
- ((crtc))->v_display_end_0_7 = (v); \
- ((crtc))->v_display_end_8 = (v) >> 8; \
- ((crtc))->v_display_end_9 = (v) >> 9; \
- ((crtc))->v_display_end_10 = (v) >> 10; \
-}
-
-#define crtc_v_retrace_start(crtc) ((crtc)->v_retrace_start_0_7 | \
- ((crtc)->v_retrace_start_8 << 8) | \
- ((crtc)->v_retrace_start_9 << 9) | \
- ((crtc)->v_retrace_start_10 << 10))
-
-#define crtc_set_v_retrace_start(crtc,v) {\
- ((crtc))->v_retrace_start_0_7 = (v); \
- ((crtc))->v_retrace_start_8 = (v) >> 8; \
- ((crtc))->v_retrace_start_9 = (v) >> 9; \
- ((crtc))->v_retrace_start_10 = (v) >> 10; \
-}
-
-#define crtc_v_blank_start(crtc) ((crtc)->v_blank_start_0_7 | \
- ((crtc)->v_blank_start_8 << 8) | \
- ((crtc)->v_blank_start_9 << 9) | \
- ((crtc)->v_blank_start_10 << 10))
-
-#define crtc_set_v_blank_start(crtc,v) {\
- ((crtc))->v_blank_start_0_7 = (v); \
- ((crtc))->v_blank_start_8 = (v) >> 8; \
- ((crtc))->v_blank_start_9 = (v) >> 9; \
- ((crtc))->v_blank_start_10 = (v) >> 10; \
-}
-
-#define crtc_h_total(crtc) ((crtc)->h_total_0_7 | \
- ((crtc)->h_total_8 << 8))
-
-#define crtc_set_h_total(crtc,v) {\
- ((crtc))->h_total_0_7 = (v); \
- ((crtc))->h_total_8 = (v) >> 8; \
-}
-
-#define crtc_h_display_end(crtc) ((crtc)->h_display_end_0_7 | \
- ((crtc)->h_display_end_8 << 8))
-
-#define crtc_set_h_display_end(crtc,v) {\
- ((crtc))->h_display_end_0_7 = (v); \
- ((crtc))->h_display_end_8 = (v) >> 8; \
-}
-
-#define crtc_h_blank_start(crtc) ((crtc)->h_blank_start_0_7 | \
- ((crtc)->h_blank_start_8 << 8))
-
-#define crtc_set_h_blank_start(crtc,v) {\
- ((crtc))->h_blank_start_0_7 = (v); \
- ((crtc))->h_blank_start_8 = (v) >> 8; \
-}
-
-#define crtc_h_blank_end(crtc) ((crtc)->h_blank_end_0_4 | \
- ((crtc)->h_blank_end_5 << 5))
-
-#define crtc_set_h_blank_end(crtc,v) {\
- ((crtc))->h_blank_end_0_4 = (v); \
- ((crtc))->h_blank_end_5 = (v) >> 5; \
-}
-
-#define crtc_h_sync_start(crtc) ((crtc)->h_sync_start_0_7 | \
- ((crtc)->h_sync_start_8 << 8))
-
-#define crtc_set_h_sync_start(crtc,v) {\
- ((crtc))->h_sync_start_0_7 = (v); \
- ((crtc))->h_sync_start_8 = (v) >> 8; \
-}
-
-#define crtc_h_sync_end(crtc) ((crtc)->h_sync_end_0_4)
-
-#define crtc_set_h_sync_end(crtc,v) {\
- ((crtc))->h_sync_end_0_4 = (v); \
-}
-
-#define crtc_screen_off(crtc) ((crtc)->screen_off_0_7 | \
- (((crtc)->screen_off_8_9 ? \
- ((crtc))->screen_off_8_9 : \
- ((crtc))->old_screen_off_8) << 8))
-
-#define crtc_set_screen_off(crtc,v) {\
- ((crtc))->screen_off_0_7 = (v); \
- ((crtc))->old_screen_off_8 = 0; \
- ((crtc))->screen_off_8_9 = (v) >> 8; \
-}
-
-#define crtc_ge_screen_width(crtc) ((crtc)->ge_screen_width_0_1 | \
- ((crtc)->ge_screen_width_2 << 2))
-
-#define crtc_set_ge_screen_width(crtc,v) { \
- (crtc)->ge_screen_width_0_1 = (v); \
- (crtc)->ge_screen_width_2 = (v) >> 2; \
-}
-
-#define crtc_h_start_fifo_fetch(crtc) ((crtc)->h_start_fifo_fetch_0_7 | \
- ((crtc)->h_start_fifo_fetch_8 << 8))
-
-#define crtc_set_h_start_fifo_fetch(crtc,v) {\
- (crtc)->h_start_fifo_fetch_0_7 = (v); \
- (crtc)->h_start_fifo_fetch_8 = (v) >> 8; \
-}
-
-#define crtc_start_address(crtc) ((crtc)->start_address_0_7 | \
- ((crtc)->start_address_8_15 << 8) | \
- ((crtc)->start_address_16_19 << 16))
-
-#define crtc_set_start_address(crtc,v) {\
- (crtc)->start_address_0_7 = (v); \
- (crtc)->start_address_8_15 = (v) >> 8; \
- (crtc)->start_address_16_19 = (v) >> 16; \
-}
-
-#define crtc_line_compare(crtc) ((crtc)->line_compare_0_7 | \
- ((crtc)->line_compare_8 << 8) | \
- ((crtc)->line_compare_9 << 9) | \
- ((crtc)->line_compare_10 << 10))
-
-#define crtc_set_line_compare(crtc,v) { \
- ((crtc))->line_compare_0_7 = (v); \
- ((crtc))->line_compare_8 = (v) >> 8; \
- ((crtc))->line_compare_9 = (v) >> 9; \
- ((crtc))->line_compare_10 = (v) >> 10; \
-}
-
-
-#define GetCrtc(s3,i) _s3ReadIndexRegister (&(s3)->crt_vga_3d4, (i))
-#define PutCrtc(s3,i,v) _s3WriteIndexRegister (&(s3)->crt_vga_3d4, (i), (v))
-
-#define GetSrtc(s3,i) _s3ReadIndexRegister (&(s3)->crt_vga_3c4, (i))
-#define PutSrtc(s3,i,v) _s3WriteIndexRegister (&(s3)->crt_vga_3c4, (i), (v))
-
-#define S3_CLOCK_REF 14318 /* KHz */
-
-#define S3_CLOCK(m,n,r) (S3_CLOCK_REF * ((m) + 2) / (((n) + 2) * (1 << (r))))
-
-#if PLATFORM == 200
-#define S3_MAX_CLOCK 80000 /* KHz */
-#endif
-#if PLATFORM == 300
-#define S3_MAX_CLOCK 135000 /* KHz */
-#endif
-
-typedef struct _s3Save {
- CARD8 cursor_fg;
- CARD8 cursor_bg;
- CARD8 lock1;
- CARD8 lock2;
- CARD8 locksrtc;
- CARD8 clock_mode;
- CARD32 alt_mix;
- CARD32 write_mask;
- CARD32 fg;
- CARD32 bg;
- S3Crtc crtc;
-} S3Save;
-
-typedef struct _s3CardInfo {
- S3Ptr s3; /* pointer to register structure */
- int memory; /* amount of memory */
- CARD8 *frameBuffer; /* pointer to frame buffer */
- CARD8 *registers; /* pointer to register map */
- S3Save save;
- Bool savage;
- Bool need_sync;
-} S3CardInfo;
-
-typedef struct _s3FbInfo {
- CARD8 *offscreen; /* pointer to offscreen area */
- int offscreen_y; /* top y coordinate of offscreen area */
- int offscreen_x; /* top x coordinate of offscreen area */
- int offscreen_width; /* width of offscreen area */
- int offscreen_height; /* height of offscreen area */
- S3Patterns patterns;
- CARD32 bitmap_offset;
- int accel_stride;
- int accel_bpp;
-} S3FBInfo;
-
-typedef struct _s3ScreenInfo {
- CARD8 *cursor_base; /* pointer to cursor area */
- S3Cursor cursor;
- S3FBInfo fb[1];
-} S3ScreenInfo;
-
-#define LockS3(s3c)
-#define UnlockS3(s3c)
-
-#define getS3CardInfo(kd) ((S3CardInfo *) ((kd)->card->driver))
-#define s3CardInfo(kd) S3CardInfo *s3c = getS3CardInfo(kd)
-
-#define getS3ScreenInfo(kd) ((S3ScreenInfo *) ((kd)->screen->driver))
-#define s3ScreenInfo(kd) S3ScreenInfo *s3s = getS3ScreenInfo(kd)
-
-Bool s3CardInit (KdCardInfo *);
-Bool s3ScreenInit (KdScreenInfo *);
-Bool s3Enable (ScreenPtr pScreen);
-void s3Disable (ScreenPtr pScreen);
-void s3Fini (ScreenPtr pScreen);
-
-Bool s3CursorInit (ScreenPtr pScreen);
-void s3CursorEnable (ScreenPtr pScreen);
-void s3CursorDisable (ScreenPtr pScreen);
-void s3CursorFini (ScreenPtr pScreen);
-void s3RecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdefs);
-
-Bool s3DrawInit (ScreenPtr pScreen);
-void s3DrawEnable (ScreenPtr pScreen);
-void s3DrawSync (ScreenPtr pScreen);
-void s3DrawDisable (ScreenPtr pScreen);
-void s3DrawFini (ScreenPtr pScreen);
-
-void s3GetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs);
-void s3PutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs);
-
-void S3InitCard (KdCardAttr *attr);
-
-void s3GetClock (int target, int *Mp, int *Np, int *Rp, int maxM, int maxN, int maxR);
-
-CARD8 _s3ReadIndexRegister (VOL8 *base, CARD8 index);
-void _s3WriteIndexRegister (VOL8 *base, CARD8 index, CARD8 value);
-
-extern KdCardFuncs s3Funcs;
-
-/*
- * Wait for the begining of the retrace interval
- */
-
-#define S3_RETRACE_LOOP_CHECK if (++_loop_count > 300000) {\
- DRAW_DEBUG ((DEBUG_FAILURE, "S3 wait loop failed at %s:%d", \
- __FILE__, __LINE__)); \
- break; \
-}
-
-#define _s3WaitVRetrace(s3) { \
- VOL8 *_status = &s3->crt_vga_status_1; \
- int _loop_count; \
- DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitVRetrace 0x%x", *_status)); \
- _loop_count = 0; \
- while ((*_status & VGA_STATUS_1_VSY) != 0) S3_RETRACE_LOOP_CHECK; \
- _loop_count = 0; \
- while ((*_status & VGA_STATUS_1_VSY) == 0) S3_RETRACE_LOOP_CHECK; \
-}
-/*
- * Wait for the begining of the retrace interval
- */
-#define _s3WaitVRetraceEnd(s3) { \
- VOL8 *_status = &s3->crt_vga_status_1; \
- int _loop_count; \
- DRAW_DEBUG ((DEBUG_CRTC, "_s3WaitVRetraceEnd 0x%x", *_status)); \
- _loop_count = 0; \
- while ((*_status & VGA_STATUS_1_VSY) == 0) S3_RETRACE_LOOP_CHECK; \
- _loop_count = 0; \
- while ((*_status & VGA_STATUS_1_VSY) != 0) S3_RETRACE_LOOP_CHECK; \
-}
-
-/*
- * This extension register must contain a magic bit pattern to enable
- * the remaining extended registers
- */
-
-#define _s3UnlockExt(s3) _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x39, 0xa0)
-#define _s3LockExt(s3) _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x39, 0x00)
-
-#define S3_CURSOR_WIDTH 64
-#define S3_CURSOR_HEIGHT 64
-#define S3_CURSOR_SIZE ((S3_CURSOR_WIDTH * S3_CURSOR_HEIGHT + 7) / 8)
-
-#define S3_TILE_SIZE 8
-
-#endif /* _S3_H_ */
diff --git a/hw/kdrive/trio/s3clock.c b/hw/kdrive/trio/s3clock.c
deleted file mode 100644
index 9f2d313ca..000000000
--- a/hw/kdrive/trio/s3clock.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-
-/*
- * Clock synthesis:
- *
- * f_out = f_ref * ((M + 2) / ((N + 2) * (1 << R)))
- *
- * Constraints:
- *
- * 1. 135MHz <= f_ref * ((M + 2) / (N + 2)) <= 270 MHz
- * 2. N >= 1
- *
- * Vertical refresh rate = clock / ((hsize + hblank) * (vsize + vblank))
- * Horizontal refresh rate = clock / (hsize + hblank)
- */
-
-/* all in kHz */
-#define MIN_VCO 180000.0
-#define MAX_VCO 360000.0
-
-void
-s3GetClock (int target, int *Mp, int *Np, int *Rp, int maxM, int maxN, int maxR)
-{
- int M, N, R, bestM, bestN;
- int f_vco, f_out;
- int err, abserr, besterr;
-
- /*
- * Compute correct R value to keep VCO in range
- */
- for (R = 0; R <= maxR; R++)
- {
- f_vco = target * (1 << R);
- if (MIN_VCO <= f_vco && f_vco < MAX_VCO)
- break;
- }
-
- /* M = f_out / f_ref * ((N + 2) * (1 << R)); */
- besterr = target;
- for (N = 0; N <= maxN; N++)
- {
- M = (target * (N + 2) * (1 << R) + (S3_CLOCK_REF/2)) / S3_CLOCK_REF - 2;
- if (0 <= M && M <= maxM)
- {
- f_out = S3_CLOCK(M,N,R);
- err = target - f_out;
- if (err < 0)
- err = -err;
- if (err < besterr)
- {
- besterr = err;
- bestM = M;
- bestN = N;
- }
- }
- }
- *Mp = bestM;
- *Np = bestN;
- *Rp = R;
-}
diff --git a/hw/kdrive/trio/s3cmap.c b/hw/kdrive/trio/s3cmap.c
deleted file mode 100644
index cc32da38c..000000000
--- a/hw/kdrive/trio/s3cmap.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-
-void
-s3GetColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- s3CardInfo(pScreenPriv);
- S3Ptr s3 = s3c->s3;
- VOL8 *dac_rd_ad = &s3->crt_vga_dac_rd_ad;
- VOL8 *dac_data = &s3->crt_vga_dac_data;
-
- LockS3 (s3c);
- while (ndef--)
- {
- *dac_rd_ad = pdefs->pixel;
- pdefs->red = *dac_data << 10;
- pdefs->green = *dac_data << 10;
- pdefs->blue = *dac_data << 10;
- pdefs++;
- }
- UnlockS3(s3c);
-}
-
-void
-s3PutColors (ScreenPtr pScreen, int fb, int ndef, xColorItem *pdefs)
-{
- KdScreenPriv(pScreen);
- s3CardInfo(pScreenPriv);
- S3Ptr s3 = s3c->s3;
- VOL8 *dac_wt_ad = &s3->crt_vga_dac_wt_ad;
- VOL8 *dac_data = &s3->crt_vga_dac_data;
-
- LockS3(s3c);
- _s3WaitVRetrace (s3);
- while (ndef--)
- {
- *dac_wt_ad = pdefs->pixel;
- *dac_data = pdefs->red >> 10;
- *dac_data = pdefs->green >> 10;
- *dac_data = pdefs->blue >> 10;
- pdefs++;
- }
- UnlockS3(s3c);
-}
-
diff --git a/hw/kdrive/trio/s3curs.c b/hw/kdrive/trio/s3curs.c
deleted file mode 100644
index 20afad756..000000000
--- a/hw/kdrive/trio/s3curs.c
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-#include "s3draw.h"
-#include "cursorstr.h"
-
-#define SetupCursor(s) KdScreenPriv(s); \
- s3CardInfo(pScreenPriv); \
- s3ScreenInfo(pScreenPriv); \
- S3Ptr s3 = s3c->s3; \
- S3Cursor *pCurPriv = &s3s->cursor
-
-static void
-_s3MoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CARD8 xlow, xhigh, ylow, yhigh;
- CARD8 xoff, yoff;
-
- x -= pCurPriv->xhot;
- xoff = 0;
- if (x < 0)
- {
- xoff = -x;
- x = 0;
- }
- y -= pCurPriv->yhot;
- yoff = 0;
- if (y < 0)
- {
- yoff = -y;
- y = 0;
- }
- xlow = (CARD8) x;
- xhigh = (CARD8) (x >> 8);
- ylow = (CARD8) y;
- yhigh = (CARD8) (y >> 8);
-
-
- /* This is the recommended order to move the cursor */
-
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x46, xhigh);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x47, xlow);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x49, ylow);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4e, xoff);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4f, yoff);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x48, yhigh);
-}
-
-static void
-s3MoveCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor (pScreen);
-
- if (!pCurPriv->has_cursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- LockS3(s3c);
- _s3UnlockExt(s3);
- _s3MoveCursor (pScreen, x, y);
- _s3LockExt(s3);
- UnlockS3(s3c);
-}
-
-static void
-s3AllocCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- xColorItem sourceColor, maskColor;
-
- KdAllocateCursorPixels (pScreen, 0, pCursor,
- &pCurPriv->source, &pCurPriv->mask);
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 4:
- pCurPriv->source |= pCurPriv->source << 4;
- pCurPriv->mask |= pCurPriv->mask << 4;
- case 8:
- pCurPriv->source |= pCurPriv->source << 8;
- pCurPriv->mask |= pCurPriv->mask << 8;
- case 16:
- pCurPriv->source |= pCurPriv->source << 16;
- pCurPriv->mask |= pCurPriv->mask << 16;
- }
-}
-
-static void
-_s3SetCursorColors (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
- /* set foreground */
- /* Reset cursor color stack pointers */
- (void) _s3ReadIndexRegister(&s3->crt_vga_3d4, 0x45);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4a, pCurPriv->source);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4a, pCurPriv->source >> 8);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4a, pCurPriv->source >> 16);
-
- /* set background */
- /* Reset cursor color stack pointers */
- (void) _s3ReadIndexRegister(&s3->crt_vga_3d4, 0x45);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4b, pCurPriv->mask);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4b, pCurPriv->mask >> 8);
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x4b, pCurPriv->mask >> 16);
-}
-
-void
-s3RecolorCursor (ScreenPtr pScreen, int ndef, xColorItem *pdef)
-{
- SetupCursor (pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- xColorItem sourceColor, maskColor;
-
- if (!pCurPriv->has_cursor || !pCursor)
- return;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pdef)
- {
- while (ndef)
- {
- if (pdef->pixel == pCurPriv->source ||
- pdef->pixel == pCurPriv->mask)
- break;
- ndef--;
- }
- if (!ndef)
- return;
- }
- s3AllocCursorColors (pScreen);
- LockS3 (s3c);
- _s3UnlockExt(s3);
- _s3SetCursorColors (pScreen);
- _s3LockExt (s3);
- UnlockS3 (s3c);
-}
-
-static void
-s3LoadCursor (ScreenPtr pScreen, int x, int y)
-{
- SetupCursor(pScreen);
- CursorPtr pCursor = pCurPriv->pCursor;
- CursorBitsPtr bits = pCursor->bits;
- int w, h;
- unsigned char r[2], g[2], b[2];
- unsigned long *ram;
- unsigned long *msk, *mskLine, *src, *srcLine;
- unsigned long and, xor;
- int i, j;
- int cursor_address;
- int wsrc;
- unsigned char ramdac_control_;
-
- /*
- * Allocate new colors
- */
- s3AllocCursorColors (pScreen);
-
- pCurPriv->pCursor = pCursor;
- pCurPriv->xhot = pCursor->bits->xhot;
- pCurPriv->yhot = pCursor->bits->yhot;
-
- /*
- * Stick new image into cursor memory
- */
- ram = (unsigned long *) s3s->cursor_base;
- mskLine = (unsigned long *) bits->mask;
- srcLine = (unsigned long *) bits->source;
-
- h = bits->height;
- if (h > S3_CURSOR_HEIGHT)
- h = S3_CURSOR_HEIGHT;
-
- wsrc = BitmapBytePad(bits->width) / 4; /* ulongs per line */
-
- for (i = 0; i < S3_CURSOR_HEIGHT; i++)
- {
- msk = mskLine;
- src = srcLine;
- mskLine += wsrc;
- srcLine += wsrc;
- for (j = 0; j < S3_CURSOR_WIDTH / 32; j++) {
-
- unsigned long m, s;
-
- if (i < h && j < wsrc)
- {
- m = *msk++;
- s = *src++;
- xor = m & s;
- and = ~m;
- }
- else
- {
- and = 0xffffffff;
- xor = 0x00000000;
- }
-
- S3AdjustBits32(and);
- S3AdjustBits32(xor);
- *ram++ = (and & 0xffff) | (xor << 16);
- *ram++ = (and >> 16) | (xor & 0xffff0000);
- }
- }
-
- _s3WaitIdle (s3);
- _s3UnlockExt (s3);
-
- /* Set new color */
- _s3SetCursorColors (pScreen);
-
- /* Enable the cursor */
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x45, 0x01);
-
- /* Wait for VRetrace to make sure the position is read */
- _s3WaitVRetrace (s3);
-
- /* Move to new position */
- _s3MoveCursor (pScreen, x, y);
-
- _s3LockExt (s3);
- UnlockS3(s3c);
-}
-
-static void
-s3UnloadCursor (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- LockS3 (s3c);
- _s3UnlockExt(s3);
-
- /* Disable cursor */
- _s3WriteIndexRegister (&s3->crt_vga_3d4, 0x45, 0);
-
- _s3LockExt(s3);
- UnlockS3 (s3c);
-}
-
-static Bool
-s3RealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- SetupCursor(pScreen);
-
- if (!pScreenPriv->enabled)
- return TRUE;
-
- /* miRecolorCursor does this */
- if (pCurPriv->pCursor == pCursor)
- {
- if (pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- s3LoadCursor (pScreen, x, y);
- }
- }
- return TRUE;
-}
-
-static Bool
-s3UnrealizeCursor (ScreenPtr pScreen, CursorPtr pCursor)
-{
- return TRUE;
-}
-
-static void
-s3SetCursor (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
-{
- SetupCursor(pScreen);
-
- pCurPriv->pCursor = pCursor;
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCursor)
- s3LoadCursor (pScreen, x, y);
- else
- s3UnloadCursor (pScreen);
-}
-
-miPointerSpriteFuncRec s3PointerSpriteFuncs = {
- s3RealizeCursor,
- s3UnrealizeCursor,
- s3SetCursor,
- s3MoveCursor,
-};
-
-static void
-s3QueryBestSize (int class,
- unsigned short *pwidth, unsigned short *pheight,
- ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- switch (class)
- {
- case CursorShape:
- if (*pwidth > pCurPriv->width)
- *pwidth = pCurPriv->width;
- if (*pheight > pCurPriv->height)
- *pheight = pCurPriv->height;
- if (*pwidth > pScreen->width)
- *pwidth = pScreen->width;
- if (*pheight > pScreen->height)
- *pheight = pScreen->height;
- break;
- default:
- fbQueryBestSize (class, pwidth, pheight, pScreen);
- break;
- }
-}
-
-Bool
-s3CursorInit (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!s3s->cursor_base)
- {
- pCurPriv->has_cursor = FALSE;
- return FALSE;
- }
-
- pCurPriv->width = S3_CURSOR_WIDTH;
- pCurPriv->height= S3_CURSOR_HEIGHT;
- pScreen->QueryBestSize = s3QueryBestSize;
- miPointerInitialize (pScreen,
- &s3PointerSpriteFuncs,
- &kdPointerScreenFuncs,
- FALSE);
- pCurPriv->has_cursor = TRUE;
- pCurPriv->pCursor = NULL;
- return TRUE;
-}
-
-void
-s3CursorEnable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- int x, y;
-
- miPointerPosition (&x, &y);
- s3LoadCursor (pScreen, x, y);
- }
- else
- s3UnloadCursor (pScreen);
- }
-}
-
-void
-s3CursorDisable (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- if (!pScreenPriv->enabled)
- return;
-
- if (pCurPriv->has_cursor)
- {
- if (pCurPriv->pCursor)
- {
- s3UnloadCursor (pScreen);
- }
- }
-}
-
-void
-s3CursorFini (ScreenPtr pScreen)
-{
- SetupCursor (pScreen);
-
- pCurPriv->pCursor = NULL;
-}
diff --git a/hw/kdrive/trio/s3stub.c b/hw/kdrive/trio/s3stub.c
deleted file mode 100644
index f44ad84c6..000000000
--- a/hw/kdrive/trio/s3stub.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 1999 SuSE, Inc.
- *
- * 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 SuSE not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. SuSE makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
- * 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.
- *
- * Author: Keith Packard, SuSE, Inc.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "s3.h"
-
-void
-InitCard (char *name)
-{
- KdCardAttr attr;
- CARD32 count;
-
- count = 0;
- while (LinuxFindPci (0x5333, 0x8904, count, &attr))
- {
- KdCardInfoAdd (&s3Funcs, &attr, 0);
- count++;
- }
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdOsAddInputDrivers ();
- KdInitInput ();
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- return KdProcessArgument (argc, argv, i);
-}
diff --git a/hw/kdrive/ts300/ts300.c b/hw/kdrive/ts300/ts300.c
deleted file mode 100644
index e9ff3a3da..000000000
--- a/hw/kdrive/ts300/ts300.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright © 1999 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-
-extern KdCardFuncs sisFuncs;
-extern KdCardFuncs s3Funcs;
-
-/*
- * Kludgy code to parse the ascii /proc/pci file as the TS300
- * is running a 2.0 kernel
- */
-BOOL
-HasPCI (char *name, KdCardAttr *attr)
-{
- FILE *f;
- char line[1024];
- BOOL waiting;
- BOOL found = FALSE;
- char *mem;
-
- f = fopen ("/proc/pci", "r");
- if (!f)
- return FALSE;
- waiting = FALSE;
- attr->naddr = 0;
- while (fgets (line, sizeof (line), f))
- {
- if (waiting)
- {
-
- if (mem = strstr (line, "memory at "))
- {
- mem += strlen ("memory at ");
- attr->address[attr->naddr++] = strtoul (mem, NULL, 0);
- found = TRUE;
- }
- else if (mem = strstr (line, "I/O at "))
- {
- mem += strlen ("I/O at ");
- attr->io = strtoul (mem, NULL, 0);
- found = TRUE;
- }
- else if (strstr (line, "Bus") && strstr (line, "device") &&
- strstr (line, "function"))
- break;
- }
- else if (strstr (line, "VGA compatible controller"))
- {
- if (strstr (line, name))
- waiting = TRUE;
- }
- }
- fclose (f);
- return found;
-}
-
-typedef struct _PCICard {
- char *user;
- char *name;
- KdCardFuncs *funcs;
-} PCICard;
-
-PCICard PCICards[] = {
- "sis", "Silicon Integrated Systems", &sisFuncs,
- "s3", "S3 Inc.", &s3Funcs,
-};
-
-#define NUM_PCI_CARDS (sizeof (PCICards) / sizeof (PCICards[0]))
-
-void
-InitCard (char *name)
-{
- KdCardInfo *card;
- CARD32 fb;
- int i;
- KdCardAttr attr;
-
- for (i = 0; i < NUM_PCI_CARDS; i++)
- {
- if (!name || !strcmp (name, PCICards[i].user))
- {
- if (HasPCI (PCICards[i].name, &attr))
- {
- KdCardInfoAdd (PCICards[i].funcs, &attr, 0);
- return;
- }
- }
- }
-}
-
-void
-InitOutput (ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- KdInitOutput (pScreenInfo, argc, argv);
-}
-
-void
-InitInput (int argc, char **argv)
-{
- KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
-}
-
-void
-ddxUseMsg (void)
-{
- KdUseMsg();
-}
-
-int
-ddxProcessArgument (int argc, char **argv, int i)
-{
- return KdProcessArgument (argc, argv, i);
-}
diff --git a/hw/kdrive/via/Makefile.am b/hw/kdrive/via/Makefile.am
deleted file mode 100644
index c659379f0..000000000
--- a/hw/kdrive/via/Makefile.am
+++ /dev/null
@@ -1,37 +0,0 @@
-INCLUDES = \
- @KDRIVE_INCS@ \
- -I$(top_srcdir)/hw/kdrive/vesa \
- @KDRIVE_CFLAGS@
-
-bin_PROGRAMS = Xvia
-
-noinst_LIBRARIES = libvia.a
-
-libvia_a_SOURCES = \
- via.c \
- viadraw.c \
- viadraw.h \
- via.h \
- via_regs.h
-
-Xvia_SOURCES = \
- viastub.c
-
-VIA_LIBS = \
- libvia.a \
- $(top_builddir)/hw/kdrive/vesa/libvesa.a
-
-if GLX
-Xvia_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
-endif
-
-Xvia_LDADD = \
- $(VIA_LIBS) \
- @KDRIVE_LIBS@
-
-Xvia_DEPENDENCIES = \
- libvia.a \
- @KDRIVE_LOCAL_LIBS@
-
-relink:
- rm -f $(bin_PROGRAMS) && make $(bin_PROGRAMS)
diff --git a/hw/kdrive/via/via.c b/hw/kdrive/via/via.c
deleted file mode 100644
index b8e1036aa..000000000
--- a/hw/kdrive/via/via.c
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * Copyright © 2004 Ralph Thomas
- *
- * 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 Ralph Thomas not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Ralph Thomas makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * RALPH THOMAS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL RALPH THOMAS 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.
- */
-/*
-** VIA CLE266 driver
-** Copyright 2004 (C) Ralph Thomas <ralpht@gmail.com>
-**
-** http://www.viatech.com.tw/
-*/
-
-#include "via.h"
-#include "viadraw.h"
-
-/*
-** viaCardInit( KdCardInfo* card )
-**
-** Description:
-** Create card specific structures, map chip registers and initialize the
-** VESA driver. We make the VESA driver do boring stuff for us, like set
-** up a framebuffer and program a mode.
-**
-** Parameters:
-** card Information stucture for the card we want to bring up.
-** It should be a VIA card.
-**
-** Return:
-** TRUE Initialization went ok.
-** FALSE Initialization failed.
-*/
-static Bool
-viaCardInit( KdCardInfo* card ) {
- ViaCardInfo* viac;
-
- viac = (ViaCardInfo*) xalloc( sizeof( ViaCardInfo ) );
- if( !viac ) return FALSE;
- memset( viac, '\0', sizeof( ViaCardInfo ) );
-
-
- viaMapReg( card, viac );
-
- if( !vesaInitialize( card, &viac->vesa ) ) {
- xfree( viac );
- return FALSE;
- }
-
- card->driver = viac;
-
- return TRUE;
-}
-
-/*
-** Bool viaScreenInit( KdScreenInfo* screen )
-**
-** Description:
-** Initialize a single screen, described by the screen parameter.
-** This is where fairly low-level screen related things get setup,
-** such as video mode and resolution. Currently that all gets
-** handed off to the VESA driver.
-**
-** Parameters:
-** screen Information structure for the screen to enable.
-**
-** Return:
-** TRUE Screen was initialized successfully
-** FALSE Screen initialization failed
-*/
-static Bool
-viaScreenInit( KdScreenInfo* screen ) {
- ViaCardInfo* viac = screen->card->driver;
- ViaScreenInfo* vias;
-
- vias = (ViaScreenInfo*) xalloc( sizeof( ViaScreenInfo ) );
- if( !vias ) return FALSE;
- memset( vias, '\0', sizeof( ViaScreenInfo ) );
-
- if( !vesaScreenInitialize( screen, &vias->vesa ) ) {
- xfree( vias );
- return FALSE;
- }
-
- /*
- ** XXX: What does this do?
- */
- if( !viac->mapBase )
- screen->dumb = TRUE;
- if( vias->vesa.mapping != VESA_LINEAR )
- screen->dumb = TRUE;
-
- screen->driver = vias;
- return TRUE;
-}
-
-/*
-** Bool viaInitScreen( ScreenPtr pScreen )
-**
-** Description:
-** High level screen initialization occurs here. We could register XV
-** adaptors, etc, here.
-**
-** Arguments:
-** pScreen X screen information
-**
-** Return:
-** TRUE Initialization was successful,
-** FALSE Initialization failed.
-*/
-static Bool
-viaInitScreen( ScreenPtr pScreen ) {
- return vesaInitScreen( pScreen );
-}
-
-/*
-** Bool viaFinishInitScreen
-**
-** Description:
-** Finish up any high-level screen initialization. Per-Screen extension
-** initialization can be done here.
-**
-** Arguments:
-** pScreen X screen information
-**
-** Return:
-** TRUE Initialization was successful.
-** FALSE Initialization failed.
-*/
-static Bool
-viaFinishInitScreen( ScreenPtr pScreen ) {
- return vesaFinishInitScreen( pScreen );
-}
-
-/*
-** Bool viaCreateResources( ScreenPtr pScreen )
-**
-** Description:
-** Do any screen specific configuration.
-**
-** Arguments:
-** pScreen X screen information
-**
-** Return:
-** TRUE configuration was successful.
-** FALSE configuration failed.
-*/
-static Bool
-viaCreateResources( ScreenPtr pScreen ) {
- return vesaCreateResources( pScreen );
-}
-
-/*
-** void viaPreserve( KdCardInfo* card )
-**
-** Description:
-** Save the current state of the chip, so that it can be restored by
-** viaRestore at a later time.
-**
-** Arguments:
-** card Information structure for the chip we want to preserve the
-** state of.
-**
-** Return:
-** None.
-**
-** See Also:
-** viaRestore
-*/
-static void
-viaPreserve( KdCardInfo* card ) {
- vesaPreserve( card );
-}
-
-/*
-** void viaRestore( KdCardInfo* card )
-**
-** Description:
-** Restore the previous state of the chip, as saved by viaPreserve
-** earlier.
-**
-** Arguments:
-** card Information structure for the chip we want to restore the
-** state of.
-**
-** Return:
-** None.
-**
-** See Also:
-** viaPreserve
-*/
-static void viaRestore( KdCardInfo* card ) {
- ViaCardInfo* viac = card->driver;
-
- viaResetMMIO( card, viac );
- vesaRestore( card );
-}
-
-/*
-** Bool viaEnable( ScreenPtr pScreen )
-**
-** Description:
-** This is where we set the card up for drawing the specified screen, e.g.:
-** set the mode and mmap the framebuffer.
-**
-** Arguments:
-** pScreen X screen information
-**
-** Return:
-** TRUE the screen was enabled
-** FALSE the screen could not be enabled
-*/
-static Bool
-viaEnable( ScreenPtr pScreen ) {
- KdScreenPriv( pScreen );
- ViaCardInfo* viac = pScreenPriv->card->driver;
-
- if( !vesaEnable( pScreen ) ) return FALSE;
-
- viaSetMMIO( pScreenPriv->card, viac );
-
- if( !viac->mapBase ) {
- ErrorF( "Could not map CLE266 graphics registers" );
- return FALSE;
- }
-
- return TRUE;
-}
-
-/*
-** void viaDisable( ScreenPtr pScreen )
-**
-** Description:
-** Shut down drawing: save some state and unmap the framebuffer.
-**
-** Arguments:
-** pScreen X screen information
-**
-** Return:
-** None.
-*/
-static void
-viaDisable( ScreenPtr pScreen ) {
- KdScreenPriv( pScreen );
- ViaCardInfo* viac = pScreenPriv->card->driver;
-
- viaResetMMIO( pScreenPriv->card, viac );
- vesaDisable( pScreen );
-}
-
-/*
-** void viaScreenFini( KdScreenInfo* screen )
-**
-** Description:
-** Release memory and resources allocated by viaScreenInit.
-**
-** Arguments:
-** screen Information structure for the screen to release.
-**
-** Return:
-** None.
-**
-** See Also:
-** viaScreenInit
-*/
-static void
-viaScreenFini( KdScreenInfo* screen ) {
- ViaScreenInfo* vias = screen->driver;
-
- vesaScreenFini( screen );
- xfree( vias );
- screen->driver = 0;
-}
-
-/*
-** void viaCardFini( KdCardInfo* card )
-**
-** Description:
-** Release memory and resources allocated by viaCardInit.
-**
-** Arguments:
-** card Information structure for the chip to release.
-**
-** Return:
-** None.
-**
-** See Also:
-** viaCardInit
-*/
-static void
-viaCardFini( KdCardInfo* card ) {
- ViaCardInfo* viac = card->driver;
-
- viaUnmapReg( card, viac );
- vesaCardFini( card );
- xfree( viac );
-}
-
-/*
-** void viaSetMMIO( KdCardInfo* card, ViaCardInfo* viac )
-**
-** Description:
-** Map the card's registers, if they're not already
-** mapped.
-**
-** Arguments:
-** card generic chip information
-** viac VIA-driver specific chip information
-**
-** Return:
-** None.
-*/
-void viaSetMMIO( KdCardInfo* card, ViaCardInfo* viac ) {
- if( !viac->mapBase ) viaMapReg( card, viac );
-}
-
-/*
-** void viaResetMMIO( KdCardInfo* card, ViaCardInfo* viac )
-**
-** Description:
-** Unmap chip's registers.
-**
-** Arguments:
-** card generic chip information
-** viac VIA-driver specific chip information
-**
-** Return:
-** None.
-*/
-void viaResetMMIO( KdCardInfo* card, ViaCardInfo* viac ) {
- viaUnmapReg( card, viac );
-}
-
-/*
-** Bool viaMapReg( KdCardInfo* card, ViaCardInfo* viac )
-**
-** Description:
-** Map the chip's registers into our address space.
-**
-** Arguments:
-** card the card information
-** viac the VIA-driver specific card information
-**
-** Return:
-** TRUE the registers were succesfully mapped
-** FALSE the registers could not be mapped
-*/
-Bool
-viaMapReg( KdCardInfo* card, ViaCardInfo* viac ) {
- viac->mapBase = (VOL8*) KdMapDevice( VIA_REG_BASE( card ),
- VIA_REG_SIZE( card ) );
-
- if( !viac->mapBase ) {
- ErrorF( "Couldn't allocate viac->mapBase\n" );
- return FALSE;
- }
-
- KdSetMappedMode( VIA_REG_BASE( card ), VIA_REG_SIZE( card ),
- KD_MAPPED_MODE_REGISTERS );
-
- /*
- ** Enable extended IO space
- */
- VGAOUT8( 0x3C4, 0x10 );
- VGAOUT8( 0x3C5, 0x01 );
-
- return TRUE;
-}
-
-/*
-** void viaUnmapReg( KdCardInfo* card, ViaCardInfo* viac )
-**
-** Description:
-** Unmap the the chip's registers.
-**
-** Arguments:
-** card the card information
-** viac the VIA-driver specific card information
-**
-** Return:
-** None.
-*/
-void
-viaUnmapReg( KdCardInfo* card, ViaCardInfo* viac ) {
- if( !viac->mapBase ) return;
-
- KdResetMappedMode( VIA_REG_BASE( card ), VIA_REG_SIZE( card ),
- KD_MAPPED_MODE_REGISTERS );
- KdUnmapDevice( (void*) viac->mapBase, VIA_REG_SIZE( card ) );
- viac->mapBase = 0;
-}
-
-KdCardFuncs viaFuncs = {
- viaCardInit, /* cardinit */
- viaScreenInit, /* scrinit */
- viaInitScreen, /* initScreen */
- viaFinishInitScreen, /* finishInitScreen */
- viaCreateResources, /* createRes */
- viaPreserve, /* preserve */
- viaEnable, /* enable */
- vesaDPMS, /* dpms */
- viaDisable, /* disable */
- viaRestore, /* restore */
- viaScreenFini, /* scrfini */
- viaCardFini, /* cardfini */
-
- 0, /* initCursor */
- 0, /* enableCursor */
- 0, /* disableCursor */
- 0, /* finiCursor */
- 0, /* recolorCursor */
-
- viaDrawInit, /* initAccel */
- viaDrawEnable, /* enableAccel */
- viaDrawDisable, /* disableAccel */
- viaDrawFini, /* finiAccel */
-
- vesaGetColors, /* getColors */
- vesaPutColors, /* putColors */
-};
-
diff --git a/hw/kdrive/via/via.h b/hw/kdrive/via/via.h
deleted file mode 100644
index 00f40bc04..000000000
--- a/hw/kdrive/via/via.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright © 2004 Ralph Thomas
- *
- * 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 Ralph Thomas not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Ralph Thomas makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * RALPH THOMAS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL RALPH THOMAS 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.
- */
-/*
-** VIA CLE266 driver
-** Copyright 2004 (C) Ralph Thomas <ralpht@gmail.com>
-**
-** http://www.viatech.com.tw/
-*/
-
-#ifndef _VIA_H_
-#define _VIA_H_
-
-#include <vesa.h>
-#include <klinux.h>
-
-/*
-** Define DebugF so that we can spot debug statements easily.
-*/
-#define DebugF ErrorF
-
-typedef volatile CARD8 VOL8;
-typedef volatile CARD16 VOL16;
-typedef volatile CARD32 VOL32;
-
-/*
-** These macros provide access to data on the card. The VIA graphics chips
-** are only available on IA-32 architecture, so PCI address space and CPU
-** address space are always the same (hence accesses can be performed by
-** dereferencing a pointer into PCI space).
-*/
-#define MMIO_OUT32( mmio, a, v ) (*(VOL32 *)((mmio) + (a)) = (v))
-#define MMIO_IN32( mmio, a ) (*(VOL32 *)((mmio) + (a)))
-#define MMIO_OUT16( mmio, a, v ) (*(VOL16 *)((mmio) + (a)) = (v))
-#define MMIO_IN16( mmio, a ) (*(VOL16 *)((mmio) + (a)))
-#define MMIO_OUT8( mmio, a, v ) (*(VOL8 *)((mmio) + (a)) = (v))
-#define MMIO_IN8( mmio, a, v ) (*(VOL8 *)((mmio) + (a)))
-
-/*
-** VGA regisers are offset 0x8000 from the beginning of the mmap'd register
-** space.
-*/
-#define VIA_MMIO_VGABASE 0x8000
-
-/*
-** The size of the register space, used when we mmap the registers. The
-** argument "c" should be a KdCardInfo*.
-*/
-#define VIA_REG_SIZE(c) (0x9000)
-
-/*
-** The base of the register space, used when we mmap the registers. The
-** argument "c" should be a KdCardInfo*.
-*/
-#define VIA_REG_BASE(c) ((c)->attr.address[1])
-
-/*
-** Access to the mmap'd VGA registers. The VGA registers are offset from the
-** beginning of the 16M pci space by 0x8000. These macros get used just like
-** outb/inb would be used to access VGA.
-*/
-#define VGAOUT32( addr, v ) MMIO_OUT32( viac->mapBase + VIA_MMIO_VGABASE, addr, v )
-#define VGAIN32( addr ) MMIO_IN32( viac->mapBase + VIA_MMIO_VGABASE, addr )
-#define VGAOUT16( addr, v ) MMIO_OUT16( viac->mapBase + VIA_MMIO_VGABASE, addr, v )
-#define VGAIN16( addr ) MIIO_IN16( viac->mapBase + VIA_MMIO_VGABASE, addr )
-#define VGAOUT8( addr, v ) MMIO_OUT8( viac->mapBase + VIA_MMIO_VGABASE, addr, v )
-#define VGAIN8( addr ) MMIO_IN8( viac->mapBase + VIA_MMIO_VGABASE, addr )
-
-/*
-** Access to any of the registers on the chip.
-*/
-#define OUTREG32( addr, v ) MMIO_OUT32( viac->mapBase, addr, v )
-#define INREG32( addr ) MMIO_IN32( viac->mapBase, addr )
-#define OUTREG16( addr, v ) MMIO_OUT16( viac->mapBase, addr, v )
-#define INREG16( addr ) MMIO_IN16( viac->mapBase, addr )
-
-/*
-** We keep all of our chip specific data in a ViaCardInfo.
-*/
-typedef struct _viaCardInfo {
- VesaCardPrivRec vesa; /* card info for VESA driver */
- VOL8* mapBase; /* mmap'd registers */
- CARD32 savedCommand; /* command to issue to GE */
- CARD32 savedFgColor; /* color to issue to GE */
-} ViaCardInfo;
-
-/*
-** We keep all of our screen specific data in a ViaScreenInfo.
-*/
-typedef struct _viaScreenInfo {
- VesaScreenPrivRec vesa;
- KaaScreenInfoRec kaa;
-} ViaScreenInfo;
-
-/*
-** These function prototypes are for support functions. More infomation on each
-** function is available at the place the function is implemented, in via.c.
-*/
-Bool viaMapReg( KdCardInfo* card, ViaCardInfo* viac );
-void viaUnmapReg( KdCardInfo* card, ViaCardInfo* viac );
-void viaSetMMIO( KdCardInfo* card, ViaCardInfo* viac );
-void viaResetMMIO( KdCardInfo* card, ViaCardInfo* viac );
-
-/*
-** The viaFuncs structure gets filled with the addresses of the functions
-** that we use to talk to the graphics chip.
-*/
-extern KdCardFuncs viaFuncs;
-
-#endif
-
diff --git a/hw/kdrive/via/via_regs.h b/hw/kdrive/via/via_regs.h
deleted file mode 100644
index 2d8195d5d..000000000
--- a/hw/kdrive/via/via_regs.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2003 S3 Graphics, Inc. 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, sub license,
- * 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
- * VIA, S3 GRAPHICS, 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.
- */
-
-/*************************************************************************
- *
- * File: via_regs.h
- * Content: The defines of Via registers
- *
- ************************************************************************/
-
-#ifndef _VIA_REGS_H_
-#define _VIA_REGS_H_
-
-/* defines for VIA 2D registers */
-#define VIA_REG_GECMD 0x000
-#define VIA_REG_GEMODE 0x004
-#define VIA_REG_GESTATUS 0x004 /* as same as VIA_REG_GEMODE */
-#define VIA_REG_SRCPOS 0x008
-#define VIA_REG_DSTPOS 0x00C
-#define VIA_REG_LINE_K1K2 0x008
-#define VIA_REG_LINE_XY 0x00C
-#define VIA_REG_DIMENSION 0x010 /* width and height */
-#define VIA_REG_PATADDR 0x014
-#define VIA_REG_FGCOLOR 0x018
-#define VIA_REG_DSTCOLORKEY 0x018 /* as same as VIA_REG_FG */
-#define VIA_REG_BGCOLOR 0x01C
-#define VIA_REG_SRCCOLORKEY 0x01C /* as same as VIA_REG_BG */
-#define VIA_REG_CLIPTL 0x020 /* top and left of clipping */
-#define VIA_REG_CLIPBR 0x024 /* bottom and right of clipping */
-#define VIA_REG_OFFSET 0x028
-#define VIA_REG_LINE_ERROR 0x028
-#define VIA_REG_KEYCONTROL 0x02C /* color key control */
-#define VIA_REG_SRCBASE 0x030
-#define VIA_REG_DSTBASE 0x034
-#define VIA_REG_PITCH 0x038 /* pitch of src and dst */
-#define VIA_REG_MONOPAT0 0x03C
-#define VIA_REG_MONOPAT1 0x040
-#define VIA_REG_COLORPAT 0x100 /* from 0x100 to 0x1ff */
-
-
-
-/* defines for VIA video registers */
-#define VIA_REG_INTERRUPT 0x200
-#define VIA_REG_CRTCSTART 0x214
-
-
-/* defines for VIA HW cursor registers */
-#define VIA_REG_CURSOR_MODE 0x2D0
-#define VIA_REG_CURSOR_POS 0x2D4
-#define VIA_REG_CURSOR_ORG 0x2D8
-#define VIA_REG_CURSOR_BG 0x2DC
-#define VIA_REG_CURSOR_FG 0x2E0
-
-
-/* defines for VIA 3D registers */
-#define VIA_REG_STATUS 0x400
-#define VIA_REG_TRANSET 0x43C
-#define VIA_REG_TRANSPACE 0x440
-
-/* VIA_REG_STATUS(0x400): Engine Status */
-#define VIA_CMD_RGTR_BUSY 0x00000080 /* Command Regulator is busy */
-#define VIA_2D_ENG_BUSY 0x00000001 /* 2D Engine is busy */
-#define VIA_3D_ENG_BUSY 0x00000002 /* 3D Engine is busy */
-#define VIA_VR_QUEUE_BUSY 0x00020000 /* Virtual Queue is busy */
-#define VIA_BUSY (VIA_CMD_RGTR_BUSY|VIA_2D_ENG_BUSY|VIA_3D_ENG_BUSY)
-
-
-/* VIA_REG_GECMD(0x00): 2D Engine Command */
-#define VIA_GEC_NOOP 0x00000000
-#define VIA_GEC_BLT 0x00000001
-#define VIA_GEC_LINE 0x00000005
-
-#define VIA_GEC_SRC_XY 0x00000000
-#define VIA_GEC_SRC_LINEAR 0x00000010
-#define VIA_GEC_DST_XY 0x00000000
-#define VIA_GEC_DST_LINRAT 0x00000020
-
-#define VIA_GEC_SRC_FB 0x00000000
-#define VIA_GEC_SRC_SYS 0x00000040
-#define VIA_GEC_DST_FB 0x00000000
-#define VIA_GEC_DST_SYS 0x00000080
-
-#define VIA_GEC_SRC_MONO 0x00000100 /* source is mono */
-#define VIA_GEC_PAT_MONO 0x00000200 /* pattern is mono */
-
-#define VIA_GEC_MSRC_OPAQUE 0x00000000 /* mono src is opaque */
-#define VIA_GEC_MSRC_TRANS 0x00000400 /* mono src is transparent */
-
-#define VIA_GEC_PAT_FB 0x00000000 /* pattern is in frame buffer */
-#define VIA_GEC_PAT_REG 0x00000800 /* pattern is from reg setting */
-
-#define VIA_GEC_CLIP_DISABLE 0x00000000
-#define VIA_GEC_CLIP_ENABLE 0x00001000
-
-#define VIA_GEC_FIXCOLOR_PAT 0x00002000
-
-#define VIA_GEC_INCX 0x00000000
-#define VIA_GEC_DECY 0x00004000
-#define VIA_GEC_INCY 0x00000000
-#define VIA_GEC_DECX 0x00008000
-
-#define VIA_GEC_MPAT_OPAQUE 0x00000000 /* mono pattern is opaque */
-#define VIA_GEC_MPAT_TRANS 0x00010000 /* mono pattern is transparent */
-
-#define VIA_GEC_MONO_UNPACK 0x00000000
-#define VIA_GEC_MONO_PACK 0x00020000
-#define VIA_GEC_MONO_DWORD 0x00000000
-#define VIA_GEC_MONO_WORD 0x00040000
-#define VIA_GEC_MONO_BYTE 0x00080000
-
-#define VIA_GEC_LASTPIXEL_ON 0x00000000
-#define VIA_GEC_LASTPIXEL_OFF 0x00100000
-#define VIA_GEC_X_MAJOR 0x00000000
-#define VIA_GEC_Y_MAJOR 0x00200000
-#define VIA_GEC_QUICK_START 0x00800000
-
-
-/* VIA_REG_GEMODE(0x04): GE mode */
-#define VIA_GEM_8bpp 0x00000000
-#define VIA_GEM_16bpp 0x00000100
-#define VIA_GEM_32bpp 0x00000300
-
-#define VIA_GEM_640 0x00000000 /* 640*480 */
-#define VIA_GEM_800 0x00000400 /* 800*600 */
-#define VIA_GEM_1024 0x00000800 /* 1024*768 */
-#define VIA_GEM_1280 0x00000C00 /* 1280*1024 */
-#define VIA_GEM_1600 0x00001000 /* 1600*1200 */
-#define VIA_GEM_2048 0x00001400 /* 2048*1536 */
-
-/* VIA_REG_PITCH(0x38): Pitch Setting */
-#define VIA_PITCH_ENABLE 0x80000000
-
-#endif /* _VIA_REGS_H_ */
diff --git a/hw/kdrive/via/viadraw.c b/hw/kdrive/via/viadraw.c
deleted file mode 100644
index a6544ee36..000000000
--- a/hw/kdrive/via/viadraw.c
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
- * Copyright © 2004 Ralph Thomas
- *
- * 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 Ralph Thomas not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Ralph Thomas makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * RALPH THOMAS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL RALPH THOMAS 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.
- */
-/*
-** VIA CLE266 driver
-** Copyright 2004 (C) Ralph Thomas <ralpht@gmail.com>
-**
-** http://www.viatech.com.tw/
-**
-** This code is for accelerated drawing of solids and accelerated
-** copies. Note that there is currently no software FIFO implemented,
-** and no documentation on any hardware FIFO.
-*/
-
-#include "via.h"
-#include "viadraw.h"
-#include "via_regs.h"
-#include <sched.h>
-#include "kdrive.h"
-#include "kaa.h"
-
-/*
-** A global to contain card information between calls into this file.
-** XXX: This is totally brain-damaged. Why don't I get the information
-** I want in viaSolid/viaCopy/viaDoneXXX?
-*/
-static ViaCardInfo* card;
-
-/*
-** Translation table from GC raster operation values into ROP3 values
-** that the VIA chip understands.
-**
-** viaPatternRop is used by viaPrepareSolid.
-** viaCopyRop is used by viaPrepareCopy.
-*/
-CARD8 viaPatternRop[16] = {
- /* GXclear */ 0x00, /* ROP_0 0 */
- /* GXand */ 0xA0, /* ROP_DPa src AND dst */
- /* GXandReverse */ 0x50, /* ROP_PDna src AND NOT dst */
- /* GXcopy */ 0xF0, /* ROP_P src */
- /* GXandInverted*/ 0x0A, /* ROP_DPna NOT src AND dst */
- /* GXnoop */ 0xAA, /* ROP_D dst */
- /* GXxor */ 0x5A, /* ROP_DPx src XOR dst */
- /* GXor */ 0xFA, /* ROP_DPo src OR dst */
- /* GXnor */ 0x05, /* ROP_DPon NOT src AND NOT dst */
- /* GXequiv */ 0xA5, /* ROP_PDxn NOT src XOR dst */
- /* GXinvert */ 0x55, /* ROP_Dn NOT dst */
- /* GXorReverse */ 0xF5, /* ROP_PDno src OR NOT dst */
- /* GXcopyInverted*/ 0x0F, /* ROP_Pn NOT src */
- /* GXorInverted */ 0xAF, /* ROP_DPno NOT src OR dst */
- /* GXnand */ 0x5F, /* ROP_DPan NOT src OR NOT dst */
- /* GXset */ 0xFF, /* ROP_1 1 */
-};
-
-CARD8 viaCopyRop[16] = {
- /* GXclear */ 0x00, /* ROP_0 0 */
- /* GXand */ 0x88, /* ROP_DSa src AND dst */
- /* GXandReverse */ 0x44, /* ROP_SDna src AND NOT dst */
- /* GXcopy */ 0xCC, /* ROP_S src */
- /* GXandInverted*/ 0x22, /* ROP_DSna NOT src AND dst */
- /* GXnoop */ 0xAA, /* ROP_D dst */
- /* GXxor */ 0x66, /* ROP_DSx src XOR dst */
- /* GXor */ 0xEE, /* ROP_DSo src OR dst */
- /* GXnor */ 0x11, /* ROP_DSon NOT src AND NOT dst */
- /* GXequiv */ 0x99, /* ROP_DSxn NOT src XOR dst */
- /* GXinvert */ 0x55, /* ROP_Dn NOT dst */
- /* GXorReverse */ 0xDD, /* ROP_SDno src OR NOT dst */
- /* GXcopyInverted*/ 0x33, /* ROP_Sn NOT src */
- /* GXorInverted */ 0xBB, /* ROP_DSno NOT src OR dst */
- /* GXnand */ 0x77, /* ROP_DSan NOT src OR NOT dst */
- /* GXset */ 0xFF, /* ROP_1 1 */
-};
-
-/*
-** void viaWaitIdle( ViaCardInfo* viac )
-**
-** Description:
-** Block up the CPU while waiting for the last command sent to
-** the chip to complete. As an experiment I'm going to try to
-** yield my process to others instead of just tight looping.
-**
-** Arguments:
-** viac VIA-driver specific chip information
-**
-** Return:
-** None.
-*/
-void
-viaWaitIdle( ViaCardInfo* viac ) {
- while( INREG32( VIA_REG_STATUS ) & VIA_BUSY )
- sched_yield();
-}
-
-/*
-** void viaDrawSync( ScreenPtr pScreen, int marker )
-**
-** Description:
-** Block until the graphics chip has finished all outstanding drawing
-** operations and the framebuffer contents is static.
-**
-** Arguments:
-** pScreen Pointer to screen strucutre for the screen we're
-** waiting for drawing to end on.
-**
-** Return:
-** None.
-*/
-static void
-viaWaitMarker( ScreenPtr pScreen, int marker ) {
- KdScreenPriv( pScreen );
- ViaCardInfo* viac = pScreenPriv->card->driver;
-
- viaWaitIdle( viac );
-}
-
-
-/*
-** Bool viaPrepareSolid( PixmapPtr pPixmap, int alu, Pixel planemask, Pixel fg )
-**
-** Description:
-** Decide if the specified solid fill operation can be accelerated or not,
-** and if the fill can be accelerated, prepare the hardware for doing it.
-**
-** Arguments:
-** pPixmap Pixmap to draw solid into.
-** alu Raster operation to draw using, these are the same
-** values which get set by XSetFunction(3X). See the
-** Xlib PM p. 140 for a list of raster operations as
-** well as descriptions.
-** planemask This is the GC plane mask. We only copy bits which
-** match the plane mask.
-** fg The foreground pixel of the GC, the pixel to draw in.
-**
-** Return:
-** TRUE This operation can be accelerated, call viaSolid to actually
-** have it drawn.
-** FALSE This operation cannot be accelerated, fall back to software.
-**
-** See Also:
-** viaSolid - the function which actually draws the solid.
-*/
-static Bool
-viaPrepareSolid( PixmapPtr pPixmap, int alu, Pixel planeMask, Pixel fg ) {
- ScreenPtr pScreen = pPixmap->drawable.pScreen;
- KdScreenPriv( pScreen );
- ViaCardInfo* viac = pScreenPriv->card->driver;
-
- /*
- ** We don't accelerate when the plane mask is not everything.
- */
- if( ~planeMask & FbFullMask( pPixmap->drawable.depth ) ) return FALSE;
-
- /*
- ** Compose the command, then store the composed command and color
- ** in the viac structure so that when viaSolid gets called we can
- ** write them out.
- */
- viac->savedCommand = VIA_GEC_BLT | VIA_GEC_FIXCOLOR_PAT |
- (viaPatternRop[alu] << 24);
- viac->savedFgColor = fg;
-
- /*
- ** Store pointer to chip information, due to brain-damaged KAA.
- */
- card = viac;
-
- return TRUE;
-}
-
-/*
-** void viaSolid( int x1, int y1, int x2, int y2 )
-**
-** Description:
-** Perform a solid fill, using the data that was stored by viaPrepareSolid.
-**
-** Arguments:
-** x1 x-coordinate of fill origin
-** y1 y-coordinate of fill origin
-** x2 x-coordinate of fill end point
-** y2 y-coordinate of fill end point
-**
-** Return:
-** None.
-**
-** See Also:
-** viaPrepareSolid - the function that composes the GE command and saves
-** the color for us.
-*/
-static void
-viaSolid( int x1, int y1, int x2, int y2 ) {
- ViaCardInfo* viac = card;
- int w = x2 - x1; int h = y2 - y1;
-
- if( !viac ) return;
- if( !w || !h ) return;
-
- /*
- ** Wait for the card to finish the current draw.
- */
- viaWaitIdle( viac );
-
- /*
- ** Do the draw.
- */
- OUTREG32( VIA_REG_DSTPOS, ((y1 << 16) | x1) );
- OUTREG32( VIA_REG_DIMENSION, (((h - 1) << 16) | (w - 1)) );
- OUTREG32( VIA_REG_FGCOLOR, viac->savedFgColor );
- OUTREG32( VIA_REG_GECMD, viac->savedCommand );
-}
-
-/*
-** void viaDoneSolid
-**
-** Description:
-** Finish up drawing of the solid.
-**
-** Arguments:
-** None.
-**
-** Return:
-** None.
-*/
-static void
-viaDoneSolid(void) {
-}
-
-/*
-** Bool viaPrepareCopy( PixmapPtr pSrcPixmap, PixmapPtr pDestPixmap, int dx,
-** int dy, int alu, Pixel planeMask )
-**
-** Description:
-** Set up the VIA chip for a BitBlt.
-**
-** Arguments:
-** pSrcPixmap the source pixmap to copy from
-** pDestPixmap the destination pixmap to copy to
-** dx direction of copy in x
-** dy direction of copy in y
-** alu Raster operation to draw using, these are the same
-** values which get set by XSetFunction(3X). See the
-** Xlib PM p. 140 for a list of raster operations as
-** well as descriptions.
-** planeMask This is the GC plane mask. We only copy bits which
-** match the plane mask.
-**
-** Return:
-** TRUE the requested copy operation can be accelerated using hardware,
-** call viaCopy next.
-** FALSE the requested copy operation cannot be accelerated using
-** hardware - fallback to software.
-**
-** See Also:
-** viaCopy - the function which does the actual copy.
-*/
-static Bool
-viaPrepareCopy( PixmapPtr pSrcPixmap, PixmapPtr pDestPixmap, int dx, int dy,
- int alu, Pixel planeMask ) {
- ScreenPtr pScreen = pDestPixmap->drawable.pScreen;
- KdScreenPriv( pScreen );
- ViaCardInfo* viac = pScreenPriv->card->driver;
-
- /*
- ** Don't accelerate when the plane mask is set.
- */
- if( ~planeMask & FbFullMask( pDestPixmap->drawable.depth ) ) return FALSE;
-
- viac->savedCommand = VIA_GEC_BLT | (viaCopyRop[alu] << 24);
-
- if( dx < 0 ) viac->savedCommand |= VIA_GEC_DECX;
- if( dy < 0 ) viac->savedCommand |= VIA_GEC_DECY;
-
- /*
- ** Store pointer to chip structure, due to brain-damaged KAA.
- */
- card = viac;
-
- return TRUE;
-}
-
-/*
-** void viaCopy( int srcX, int srcY, int dstX, int dstY, int w, int h )
-**
-** Description:
-** Perform a BitBlt from one screen area to another.
-**
-** Arguments:
-** srcX source x-coordinate
-** srcY source y-coordinate
-** dstX destination x-coordinate
-** dstY destination y-coordinate
-** w width of area to copy (pixels)
-** h height of area to copy (pixels)
-**
-** Return:
-** None.
-**
-** See Also:
-** viaPrepareCopy - the function which sets up for the copy.
-*/
-static void
-viaCopy( int srcX, int srcY, int dstX, int dstY, int w, int h ) {
- ViaCardInfo* viac = card;
-
- if( !viac ) return;
- if( !w | !h ) return;
-
- /*
- ** XXX: Check these two "if"s out.
- */
- if( viac->savedCommand & VIA_GEC_DECX ) {
- srcX += ( w - 1 );
- dstX += ( w - 1 );
- }
-
- if( viac->savedCommand & VIA_GEC_DECY ) {
- srcY += ( h - 1 );
- dstY += ( h - 1 );
- }
-
- OUTREG32( VIA_REG_SRCPOS, ((srcY << 16) | srcX) );
- OUTREG32( VIA_REG_DSTPOS, ((dstY << 16) | dstX) );
- OUTREG32( VIA_REG_DIMENSION, (((h - 1) << 16) | (w - 1)) );
- OUTREG32( VIA_REG_GECMD, viac->savedCommand );
-}
-
-/*
-** void viaDoneCopy()
-**
-** Description:
-** Finish up the copy.
-**
-** Arguments:
-** None.
-**
-** Return:
-** None.
-*/
-static void
-viaDoneCopy(void) {
-}
-
-
-/*
-** Bool viaDrawInit( ScreenPtr pScreen )
-**
-** Description:
-** Initialize the 2D acceleration hardware and register the KAA
-** acceleration layer with the VIA acceleration functions (above).
-**
-** Arguments:
-** pScreen Pointer to screen structure for the screen we're
-** enabling acceleration on.
-**
-** Return:
-** TRUE initialization and setup of KAA acceleration was successful.
-** FALSE initialization and setup of KAA acceleration failed.
-*/
-Bool
-viaDrawInit( ScreenPtr pScreen ) {
- KdScreenPriv( pScreen );
- ViaCardInfo* viac = pScreenPriv->card->driver;
- ViaScreenInfo* vias = pScreenPriv->card->driver;
- CARD32 geMode = 0;
-
- if( !viac ) return FALSE;
- DebugF( "viac->mapBase = 0x%x\n", viac->mapBase );
-
- /*
- ** We reset the 2D engine to a known state by setting all of it's
- ** registers to zero.
- */
- OUTREG32( VIA_REG_GEMODE, 0x0 );
- OUTREG32( VIA_REG_SRCPOS, 0x0 );
- OUTREG32( VIA_REG_DSTPOS, 0x0 );
- OUTREG32( VIA_REG_DIMENSION, 0x0 );
- OUTREG32( VIA_REG_PATADDR, 0x0 );
- OUTREG32( VIA_REG_FGCOLOR, 0x0 );
- OUTREG32( VIA_REG_BGCOLOR, 0x0 );
- OUTREG32( VIA_REG_CLIPTL, 0x0 );
- OUTREG32( VIA_REG_CLIPBR, 0x0 );
- OUTREG32( VIA_REG_OFFSET, 0x0 );
- OUTREG32( VIA_REG_KEYCONTROL, 0x0 );
- OUTREG32( VIA_REG_SRCBASE, 0x0 );
- OUTREG32( VIA_REG_DSTBASE, 0x0 );
- OUTREG32( VIA_REG_PITCH, 0x0 );
- OUTREG32( VIA_REG_MONOPAT0, 0x0 );
- OUTREG32( VIA_REG_MONOPAT1, 0x0 );
-
- /*
- ** Set the GE mode up.
- ** XXX: What happens in 24bpp mode?
- */
- switch( pScreenPriv->screen->fb[0].bitsPerPixel ) {
- case 16:
- geMode = VIA_GEM_16bpp;
- break;
- case 32:
- geMode = VIA_GEM_32bpp;
- break;
- default:
- geMode = VIA_GEM_8bpp;
- break;
- }
-
- OUTREG32( VIA_REG_GEMODE, geMode );
-
- /*
- ** Set the source and destination base addresses, and set pitch.
- */
- OUTREG32( VIA_REG_SRCBASE, 0x0 );
- OUTREG32( VIA_REG_DSTBASE, 0x0 );
- OUTREG32( VIA_REG_PITCH, VIA_PITCH_ENABLE |
- ((pScreen->width * pScreenPriv->screen->fb[0].bitsPerPixel >> 3) >> 3) |
- (((pScreen->width * pScreenPriv->screen->fb[0].bitsPerPixel >> 3) >> 3) << 16));
-
- DebugF( "Initialized 2D engine!\n" );
-
- memset(&vias->kaa, 0, sizeof(KaaScreenInfoRec));
- vias->kaa.waitMarker = viaWaitMarker;
- vias->kaa.PrepareSolid = viaPrepareSolid;
- vias->kaa.Solid = viaSolid;
- vias->kaa.DoneSolid = viaDoneSolid;
- vias->kaa.PrepareCopy = viaPrepareCopy;
- vias->kaa.Copy = viaCopy;
- vias->kaa.DoneCopy = viaDoneCopy;
-
- return kaaDrawInit( pScreen, &vias->kaa );
-}
-
-/*
-** void viaDrawEnable( ScreenPtr pScreen )
-**
-** Description:
-** Enable accelerated drawing on the specified screen.
-**
-** Arguments:
-** pScreen Pointer to screen structure for the screen we're
-** enabling acceleration on.
-**
-** Return:
-** None.
-*/
-void
-viaDrawEnable( ScreenPtr pScreen ) {
- kaaMarkSync( pScreen );
-}
-
-/*
-** void viaDrawDisable( ScreenPtr pScreen )
-**
-** Description:
-** Disable accelerated drawing to the specified screen.
-**
-** Arguments:
-** pScreen Pointer to screen structure for the screen we're
-** disabling acceleration on.
-**
-** Return:
-** None
-*/
-void
-viaDrawDisable( ScreenPtr pScreen ) {
-}
-
-/*
-** void viaDrawFini( ScreenPtr pScreen )
-**
-** Description:
-** Shutdown accelerated drawing and free associated strucures and
-** resources.
-**
-** Arguments:
-** pScreen Pointer to screen structure for the screen we're
-** disabling acceleration on.
-**
-** Return:
-** None.
-*/
-void
-viaDrawFini( ScreenPtr pScreen ) {
-}
diff --git a/hw/kdrive/via/viadraw.h b/hw/kdrive/via/viadraw.h
deleted file mode 100644
index 404923053..000000000
--- a/hw/kdrive/via/viadraw.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright © 2004 Ralph Thomas
- *
- * 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 Ralph Thomas not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Ralph Thomas makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * RALPH THOMAS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL RALPH THOMAS 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.
- */
-/*
-** VIA CLE266 driver
-** Copyright 2004 (C) Ralph Thomas <ralpht@gmail.com>
-**
-** http://www.viatech.com.tw/
-**
-** This header has some function prototypes for the hardware
-** accelerated drawing code in viadraw.c.
-*/
-
-#ifndef _VIA_DRAW_H_
-#define _VIA_DRAW_H_
-
-/*
-** More information on these functions is in viadraw.c.
-*/
-void viaWaitIdle( ViaCardInfo* card );
-Bool viaDrawInit( ScreenPtr pScreen );
-void viaDrawEnable( ScreenPtr pScreen );
-void viaDrawDisable( ScreenPtr pScreen );
-void viaDrawFini( ScreenPtr pScreen );
-void viaDrawSync( ScreenPtr pScreen );
-
-#endif
diff --git a/hw/kdrive/via/viastub.c b/hw/kdrive/via/viastub.c
deleted file mode 100644
index 1439010a9..000000000
--- a/hw/kdrive/via/viastub.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright © 2004 Ralph Thomas
- *
- * 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 Ralph Thomas not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Ralph Thomas makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * RALPH THOMAS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL RALPH THOMAS 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.
- */
-/*
-** VIA CLE266 driver
-** Copyright 2004 (C) Ralph Thomas <ralpht@gmail.com>
-**
-** http://www.viatech.com.tw/
-**
-** This is the stub code which links the VIA drawing code into the kdrive
-** framework.
-*/
-
-#include "via.h"
-#include <klinux.h>
-
-/*
-** void InitCard( char* name )
-**
-** Description:
-** Initialize the graphics chip. We find the chip on the PCI bus,
-** register the functions to access the chip.
-**
-** Arguments:
-** name XXX: unknown.
-**
-** Return:
-** None.
-*/
-void
-InitCard( char* name ) {
- KdCardAttr attr;
-
- if( LinuxFindPci( 0x1106, 0x3122, 0, &attr ) )
- KdCardInfoAdd( &viaFuncs, &attr, 0 );
-}
-
-/*
-** void InitOutput( ScreenInfo* pScreenInfo, int argc, char** argv )
-**
-** Description:
-** Initialize I/O, or something. XXX: Or what?
-**
-** Arguments:
-** pScreenInfo XXX
-** argc command line argument count
-** argv command line arguments
-**
-** Return:
-** None.
-*/
-void
-InitOutput( ScreenInfo* pScreenInfo, int argc, char** argv ) {
- KdInitOutput( pScreenInfo, argc, argv );
-}
-
-/*
-** void InitInput( int argc, char** argv )
-**
-** Description:
-** Initialize keyboard and mouse input.
-**
-** Arguments:
-** argc command line argument count
-** argv command line arguments
-**
-** Return:
-** None.
-*/
-void
-InitInput( int argc, char** argv ) {
- KdOsAddInputDrivers();
- KdInitInput();
-}
-
-/*
-** void ddxUseMsg()
-**
-** Description:
-** Print the usage message for Xvia.
-**
-** Arguments:
-** None.
-**
-** Return:
-** None.
-*/
-void
-ddxUseMsg() {
- KdUseMsg();
- vesaUseMsg();
-}
-
-
-/*
-** int ddxProcessArgument( int argc, char** argv, int i )
-**
-** Description:
-** Process a single command line argument.
-**
-** Arguments:
-** argc command line argument count
-** argv command line arguments
-** i number of argument to process
-**
-** Return:
-** some values.
-*/
-int
-ddxProcessArgument( int argc, char** argv, int i ) {
- int ret;
-
- if( !( ret = vesaProcessArgument( argc, argv, i ) ))
- ret = KdProcessArgument( argc, argv, i );
- return ret;
-}
-
diff --git a/hw/kdrive/vxworks/vxkbd.c b/hw/kdrive/vxworks/vxkbd.c
deleted file mode 100644
index ac83ef729..000000000
--- a/hw/kdrive/vxworks/vxkbd.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Copyright © 1999 Network Computing Devices, Inc. All rights reserved.
- *
- * Author: Keith Packard
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include "kkeymap.h"
-#include <X11/keysym.h>
-#include <inputstr.h>
-
-#define VXWORKS_WIDTH 2
-
-KeySym VxWorksKeymap[] = {
-/*7 f1 */ XK_F1, NoSymbol,
-/*8 escape */ XK_Escape, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
-/*13 tab */ XK_Tab, NoSymbol,
-/*14 ` */ XK_grave, XK_asciitilde,
-/*15 f2 */ XK_F2, NoSymbol,
- NoSymbol, NoSymbol,
-/*17 lctrl */ XK_Control_L, NoSymbol,
-/*18 lshift */ XK_Shift_L, NoSymbol,
- NoSymbol, NoSymbol,
-/*20 lock */ XK_Caps_Lock, NoSymbol,
-/*21 q */ XK_Q, NoSymbol,
-/*22 1 */ XK_1, XK_exclam,
-/*23 f3 */ XK_F3, NoSymbol,
- NoSymbol, NoSymbol,
-/*25 lalt */ XK_Meta_L, XK_Alt_L,
-/*26 z */ XK_Z, NoSymbol,
-/*27 s */ XK_S, NoSymbol,
-/*28 a */ XK_A, NoSymbol,
-/*29 w */ XK_W, NoSymbol,
-/*30 2 */ XK_2, XK_at,
-/*31 f4 */ XK_F4, NoSymbol,
- NoSymbol, NoSymbol,
-/*33 c */ XK_C, NoSymbol,
-/*34 x */ XK_X, NoSymbol,
-/*35 d */ XK_D, NoSymbol,
-/*36 e */ XK_E, NoSymbol,
-/*37 4 */ XK_4, XK_dollar,
-/*38 3 */ XK_3, XK_numbersign,
-/*39 f5 */ XK_F5, NoSymbol,
- NoSymbol, NoSymbol,
-/*41 space */ XK_space, NoSymbol,
-/*42 v */ XK_V, NoSymbol,
-/*43 f */ XK_F, NoSymbol,
-/*44 t */ XK_T, NoSymbol,
-/*45 r */ XK_R, NoSymbol,
-/*46 5 */ XK_5, XK_percent,
-/*47 f6 */ XK_F6, NoSymbol,
- NoSymbol, NoSymbol,
-/*49 n */ XK_N, NoSymbol,
-/*50 b */ XK_B, NoSymbol,
-/*51 h */ XK_H, NoSymbol,
-/*52 g */ XK_G, NoSymbol,
-/*53 y */ XK_Y, NoSymbol,
-/*54 6 */ XK_6, XK_asciicircum,
-/*55 f7 */ XK_F7, NoSymbol,
- NoSymbol, NoSymbol,
-/*57 ralt */ XK_Meta_R, XK_Alt_R,
-/*58 m */ XK_M, NoSymbol,
-/*59 j */ XK_J, NoSymbol,
-/*60 u */ XK_U, NoSymbol,
-/*61 7 */ XK_7, XK_ampersand,
-/*62 8 */ XK_8, XK_asterisk,
-/*63 f8 */ XK_F8, NoSymbol,
- NoSymbol, NoSymbol,
-/*65 , */ XK_comma, XK_less,
-/*66 k */ XK_K, NoSymbol,
-/*67 i */ XK_I, NoSymbol,
-/*68 o */ XK_O, NoSymbol,
-/*69 0 */ XK_0, XK_parenright,
-/*70 9 */ XK_9, XK_parenleft,
-/*71 f9 */ XK_F9, NoSymbol,
- NoSymbol, NoSymbol,
-/*73 . */ XK_period, XK_greater,
-/*74 / */ XK_slash, XK_question,
-/*75 l */ XK_L, NoSymbol,
-/*76 ; */ XK_semicolon, XK_colon,
-/*77 p */ XK_P, NoSymbol,
-/*78 - */ XK_minus, XK_underscore,
-/*79 f10 */ XK_F10, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
-/*82 ' */ XK_apostrophe, XK_quotedbl,
- NoSymbol, NoSymbol,
-/*84 [ */ XK_bracketleft, XK_braceleft,
-/*85 = */ XK_equal, XK_plus,
-/*86 f11 */ XK_F11, NoSymbol,
-/*87 sysrq */ XK_Sys_Req, XK_Print,
-/*88 rctrl */ XK_Control_R, NoSymbol,
-/*89 rshift */ XK_Shift_R, NoSymbol,
-/*90 enter */ XK_Return, NoSymbol,
-/*91 ] */ XK_bracketright, XK_braceright,
-/*92 \ */ XK_backslash, XK_bar,
- NoSymbol, NoSymbol,
-/*94 f12 */ XK_F12, NoSymbol,
-/*95 scrolllock*/ XK_Scroll_Lock, NoSymbol,
-/*96 down */ XK_Down, NoSymbol,
-/*97 left */ XK_Left, NoSymbol,
-/*98 pause */ XK_Break, XK_Pause,
-/*99 up */ XK_Up, NoSymbol,
-/*100 delete */ XK_Delete, NoSymbol,
-/*101 end */ XK_End, NoSymbol,
-/*102 bs */ XK_BackSpace, NoSymbol,
-/*103 insert */ XK_Insert, NoSymbol,
- NoSymbol, NoSymbol,
-/*105 np 1 */ XK_KP_End, XK_KP_1,
-/*106 right */ XK_Right, NoSymbol,
-/*107 np 4 */ XK_KP_Left, XK_KP_4,
-/*108 np 7 */ XK_KP_Home, XK_KP_7,
-/*109 pgdn */ XK_Page_Down, NoSymbol,
-/*110 home */ XK_Home, NoSymbol,
-/*111 pgup */ XK_Page_Up, NoSymbol,
-/*112 np 0 */ XK_KP_Insert, XK_KP_0,
-/*113 np . */ XK_KP_Delete, XK_KP_Decimal,
-/*114 np 2 */ XK_KP_Down, XK_KP_2,
-/*115 np 5 */ XK_KP_5, NoSymbol,
-/*116 np 6 */ XK_KP_Right, XK_KP_6,
-/*117 np 8 */ XK_KP_Up, XK_KP_8,
-/*118 numlock */ XK_Num_Lock, NoSymbol,
-/*119 np / */ XK_KP_Divide, NoSymbol,
- NoSymbol, NoSymbol,
-/*121 np enter */ XK_KP_Enter, NoSymbol,
-/*122 np 3 */ XK_KP_Page_Down, XK_KP_3,
- NoSymbol, NoSymbol,
-/*124 np + */ XK_KP_Add, NoSymbol,
-/*125 np 9 */ XK_KP_Page_Up, XK_KP_9,
-/*126 np * */ XK_KP_Multiply, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
-/*132 np - */ XK_KP_Subtract, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
- NoSymbol, NoSymbol,
-/*139 lwin */ XK_Super_L, NoSymbol,
-/*140 rwin */ XK_Super_R, NoSymbol,
-/*141 menu */ XK_Menu, NoSymbol,
-};
-
-void
-VxWorksKeyboardLoad (void)
-{
- KeySym *k;
-
- kdMinScanCode = 7;
- kdKeymapWidth = VXWORKS_WIDTH;
- kdMaxScanCode = 141;
- memcpy (kdKeymap, VxWorksKeymap, sizeof (VxWorksKeymap));
-}
-
-static int kbdFd = -1;
-
-#include <errno.h>
-#include <event.h>
-#include <kbd_ioctl.h>
-
-extern KeyboardCtrl defaultKeyboardControl;
-
-static void
-VxWorksSetAutorepeat (unsigned char *repeats, Bool on)
-{
- int i;
- unsigned char mask;
- int scan_code;
- int key_code;
- unsigned char realkc;
-
- if (on)
- {
- realkc = 1;
- ioctl (kbdFd, KBD_ALL_REPEAT, &realkc);
- for (scan_code = 7; scan_code <= 141; scan_code++)
- {
- key_code = scan_code + 1;
- i = key_code >> 3;
- mask = 1 << (key_code & 7);
- if ((repeats[i] & mask) == 0)
- {
- realkc = scan_code;
- ioctl (kbdFd, KBD_NO_REPEAT, &realkc);
- }
- }
- }
- else
- {
- realkc = 0;
- ioctl (kbdFd, KBD_ALL_REPEAT, &realkc);
- }
-}
-
-int
-VxWorksKeyboardInit (void)
-{
-
- kbdFd = open ("/dev/kbd", O_RDONLY, 0);
- if (kbdFd < 0)
- ErrorF ("keyboard open failure %d\n", errno);
- VxWorksSetAutorepeat (defaultKeyboardControl.autoRepeats, TRUE);
- return -1;
-}
-
-void
-VxWorksKeyboardFini (int fd)
-{
- if (kbdFd >= 0)
- {
- close (kbdFd);
- kbdFd = -1;
- }
-}
-
-void
-VxWorksKeyboardRead (int fd)
-{
-}
-
-void
-VxWorksKeyboardLeds (int leds)
-{
- DeviceIntPtr pKeyboard = inputInfo.keyboard;
- KeyboardCtrl *ctrl = &pKeyboard->kbdfeed->ctrl;
- led_ioctl_info led_info;
- int i;
-
- VxWorksSetAutorepeat (ctrl->autoRepeats, ctrl->autoRepeat);
- for (i = 0; i < 3; i++)
- {
- led_info.bit_n = 1 << i;
- led_info.OFF_or_ON = (leds & (1 << i)) != 0;
- led_info.reversed = 0;
- ioctl (kbdFd, KBD_SET_LED, &led_info);
- }
-}
-
-void
-VxWorksKeyboardBell (int volume, int frequency, int duration)
-{
-}
-
-KdKeyboardFuncs VxWorksKeyboardFuncs = {
- VxWorksKeyboardLoad,
- VxWorksKeyboardInit,
- VxWorksKeyboardRead,
- VxWorksKeyboardLeds,
- VxWorksKeyboardBell,
- VxWorksKeyboardFini,
- 3,
-};
diff --git a/hw/kdrive/vxworks/vxmouse.c b/hw/kdrive/vxworks/vxmouse.c
deleted file mode 100644
index 8192d7e5a..000000000
--- a/hw/kdrive/vxworks/vxmouse.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright © 1999 Network Computing Devices, Inc. All rights reserved.
- *
- * Author: Keith Packard
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#define NEED_EVENTS
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include "inputstr.h"
-#include "scrnintstr.h"
-#include "kdrive.h"
-#include "Xpoll.h"
-#include <event.h>
-#include <smem.h>
-
-static unsigned long mouseState;
-
-#define BUTTON1 0x01
-#define BUTTON2 0x02
-#define BUTTON3 0x04
-
-#include <errno.h>
-
-static int mouseFd = -1;
-
-static eventqueue *eventQueue;
-
-void
-VxMouseRead (int mousePort)
-{
- Event ev;
- int dx, dy;
- unsigned long flags;
- unsigned long mask;
- int n;
-
- while (eventQueue->head != eventQueue->tail)
- {
- ev = *eventQueue->head;
- if (eventQueue->head >= &eventQueue->events[eventQueue->size-1])
- eventQueue->head = &eventQueue->events[0];
- else
- eventQueue->head++;
- switch (ev.e_type) {
- case E_BUTTON:
- switch (ev.e_device) {
- case E_MOUSE:
- switch (ev.e_key) {
- case BUTTON1:
- mask = KD_BUTTON_1;
- break;
- case BUTTON2:
- mask = KD_BUTTON_2;
- break;
- case BUTTON3:
- mask = KD_BUTTON_3;
- break;
- default:
- mask = 0;
- break;
- }
- if (ev.e_direction == E_KBUP)
- mouseState &= ~mask;
- else
- mouseState |= mask;
- KdEnqueueMouseEvent (mouseState | KD_MOUSE_DELTA, 0, 0);
- break;
- case E_DKB:
- KdEnqueueKeyboardEvent (ev.e_key, ev.e_direction == E_KBUP);
- break;
- }
- break;
- case E_MMOTION:
- KdEnqueueMouseEvent (mouseState | KD_MOUSE_DELTA,
- ev.e_x, ev.e_y);
- break;
- }
- }
-}
-
-int
-VxMouseInit (void)
-{
- int mousePort;
- unsigned long ev_size;
-
- mouseState = 0;
- mousePort = open ("/dev/xdev", O_RDONLY, 0);
- if (mousePort < 0)
- ErrorF ("event port open failure %d\n", errno);
- mouseFd = open ("/dev/mouse", O_RDONLY, 0);
- if (mouseFd < 0)
- ErrorF ("mouse open failure %d\n", errno);
- if (eventQueue == 0)
- {
- ioctl (mousePort, EVENT_QUEUE_SMSIZE, &ev_size);
- eventQueue = (eventqueue *) smem_get ("event", ev_size, (SM_READ|SM_WRITE));
- }
- return mousePort;
-}
-
-void
-VxMouseFini (int mousePort)
-{
- if (mousePort >= 0)
- close (mousePort);
- if (mouseFd >= 0)
- {
- close (mouseFd);
- mouseFd = -1;
- }
-}
-
-KdMouseFuncs VxWorksMouseFuncs = {
- VxMouseInit,
- VxMouseRead,
- VxMouseFini
-};
diff --git a/hw/kdrive/vxworks/vxworks.c b/hw/kdrive/vxworks/vxworks.c
deleted file mode 100644
index c9e2be7cc..000000000
--- a/hw/kdrive/vxworks/vxworks.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright © 1999 Network Computing Devices, Inc. All rights reserved.
- *
- * Author: Keith Packard
- */
-
-#ifdef HAVE_CONFIG_H
-#include <kdrive-config.h>
-#endif
-#include "kdrive.h"
-#include <X11/keysym.h>
-
-Bool
-VxWorksSpecialKey (KeySym sym)
-{
- switch (sym) {
- case XK_Sys_Req:
- download(1, "setup", 0);
- return TRUE;
- case XK_Break:
- download(1, "launcher", 0);
- return TRUE;
- }
- return FALSE;
-}
-
-void
-KdOsAddInputDrivers (void)
-{
- KdAddPointerDriver(&VxWorksMouseDriver);
- KdAddPointerDriver(&VxWorksKeyboardDriver);
-}
-
-KdOsFuncs VxWorksFuncs = {
- .SpecialKey = VxWorksSpecialKey,
-};
-
-void
-OsVendorInit (void)
-{
- KdOsInit (&VxWorksFuncs);
-}