summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorFrederic Cambus <fcambus@cvs.openbsd.org>2019-05-06 14:15:09 +0000
committerFrederic Cambus <fcambus@cvs.openbsd.org>2019-05-06 14:15:09 +0000
commit237e992702cdc1b26e14ebd64eedf4e338af77b6 (patch)
tree764181c1c7a760eb1569b6d5a9219c682f3df8e9 /driver
parenta1bb7d00c35809f946521e493721e3c6673f5ce5 (diff)
Update openchrome to 0.6.182.
Tested on my VX900 system. Looks OK to matthieu@
Diffstat (limited to 'driver')
-rw-r--r--driver/xf86-video-openchrome/Makefile.in2
-rw-r--r--driver/xf86-video-openchrome/aclocal.m4216
-rwxr-xr-xdriver/xf86-video-openchrome/configure20
-rw-r--r--driver/xf86-video-openchrome/configure.ac2
-rw-r--r--driver/xf86-video-openchrome/man/Makefile.am2
-rw-r--r--driver/xf86-video-openchrome/man/Makefile.in2
-rw-r--r--driver/xf86-video-openchrome/src/via_display.c403
-rw-r--r--driver/xf86-video-openchrome/src/via_driver.h6
-rw-r--r--driver/xf86-video-openchrome/src/via_fp.c5
-rw-r--r--driver/xf86-video-openchrome/src/via_ums.c149
-rw-r--r--driver/xf86-video-openchrome/src/via_ums.h9
-rw-r--r--driver/xf86-video-openchrome/src/xvmc/xf86dristr.h256
12 files changed, 469 insertions, 603 deletions
diff --git a/driver/xf86-video-openchrome/Makefile.in b/driver/xf86-video-openchrome/Makefile.in
index 8640800fc..0c909103a 100644
--- a/driver/xf86-video-openchrome/Makefile.in
+++ b/driver/xf86-video-openchrome/Makefile.in
@@ -73,7 +73,7 @@ subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(top_srcdir)/configure COPYING ChangeLog NEWS config.guess \
- config.sub install-sh ltmain.sh missing
+ config.sub depcomp install-sh ltmain.sh missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
diff --git a/driver/xf86-video-openchrome/aclocal.m4 b/driver/xf86-video-openchrome/aclocal.m4
index 11447c29f..90a866460 100644
--- a/driver/xf86-video-openchrome/aclocal.m4
+++ b/driver/xf86-video-openchrome/aclocal.m4
@@ -8606,32 +8606,63 @@ m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
-# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
-# serial 1 (pkg-config-0.24)
-#
-# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
+dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+dnl serial 11 (pkg-config-0.29.1)
+dnl
+dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+ [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
AC_DEFUN([PKG_PROG_PKG_CONFIG],
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
@@ -8653,18 +8684,19 @@ if test -n "$PKG_CONFIG"; then
PKG_CONFIG=""
fi
fi[]dnl
-])# PKG_PROG_PKG_CONFIG
+])dnl PKG_PROG_PKG_CONFIG
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists. Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-# only at the first occurence in configure.ac, so if the first place
-# it's called might be skipped (such as if it is within an "if", you
-# have to call PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
AC_DEFUN([PKG_CHECK_EXISTS],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
if test -n "$PKG_CONFIG" && \
@@ -8674,8 +8706,10 @@ m4_ifvaln([$3], [else
$3])dnl
fi])
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
m4_define([_PKG_CONFIG],
[if test -n "$$1"; then
pkg_cv_[]$1="$$1"
@@ -8687,10 +8721,11 @@ m4_define([_PKG_CONFIG],
else
pkg_failed=untried
fi[]dnl
-])# _PKG_CONFIG
+])dnl _PKG_CONFIG
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -8698,19 +8733,17 @@ if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
else
_pkg_short_errors_supported=no
fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
AC_DEFUN([PKG_CHECK_MODULES],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
@@ -8764,16 +8797,40 @@ else
AC_MSG_RESULT([yes])
$3
fi[]dnl
-])# PKG_CHECK_MODULES
+])dnl PKG_CHECK_MODULES
-# PKG_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable pkgconfigdir as the location where a module
-# should install pkg-config .pc files. By default the directory is
-# $libdir/pkgconfig, but the default can be changed by passing
-# DIRECTORY. The user can override through the --with-pkgconfigdir
-# parameter.
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
AC_DEFUN([PKG_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
m4_pushdef([pkg_description],
@@ -8784,16 +8841,18 @@ AC_ARG_WITH([pkgconfigdir],
AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
-]) dnl PKG_INSTALLDIR
+])dnl PKG_INSTALLDIR
-# PKG_NOARCH_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable noarch_pkgconfigdir as the location where a
-# module should install arch-independent pkg-config .pc files. By
-# default the directory is $datadir/pkgconfig, but the default can be
-# changed by passing DIRECTORY. The user can override through the
-# --with-noarch-pkgconfigdir parameter.
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
AC_DEFUN([PKG_NOARCH_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
m4_pushdef([pkg_description],
@@ -8804,7 +8863,24 @@ AC_ARG_WITH([noarch-pkgconfigdir],
AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
-]) dnl PKG_NOARCH_INSTALLDIR
+])dnl PKG_NOARCH_INSTALLDIR
+
+
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])dnl PKG_CHECK_VAR
# Copyright (C) 2002-2012 Free Software Foundation, Inc.
#
diff --git a/driver/xf86-video-openchrome/configure b/driver/xf86-video-openchrome/configure
index 5830ea189..c6b041e9e 100755
--- a/driver/xf86-video-openchrome/configure
+++ b/driver/xf86-video-openchrome/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for xf86-video-openchrome 0.6.176.
+# Generated by GNU Autoconf 2.69 for xf86-video-openchrome 0.6.182.
#
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/openchrome>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='xf86-video-openchrome'
PACKAGE_TARNAME='xf86-video-openchrome'
-PACKAGE_VERSION='0.6.176'
-PACKAGE_STRING='xf86-video-openchrome 0.6.176'
+PACKAGE_VERSION='0.6.182'
+PACKAGE_STRING='xf86-video-openchrome 0.6.182'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/openchrome'
PACKAGE_URL=''
@@ -1371,7 +1371,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures xf86-video-openchrome 0.6.176 to adapt to many kinds of systems.
+\`configure' configures xf86-video-openchrome 0.6.182 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1442,7 +1442,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of xf86-video-openchrome 0.6.176:";;
+ short | recursive ) echo "Configuration of xf86-video-openchrome 0.6.182:";;
esac
cat <<\_ACEOF
@@ -1576,7 +1576,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-xf86-video-openchrome configure 0.6.176
+xf86-video-openchrome configure 0.6.182
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1974,7 +1974,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by xf86-video-openchrome $as_me 0.6.176, which was
+It was created by xf86-video-openchrome $as_me 0.6.182, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2819,7 +2819,7 @@ fi
# Define the identity of the package.
PACKAGE='xf86-video-openchrome'
- VERSION='0.6.176'
+ VERSION='0.6.182'
cat >>confdefs.h <<_ACEOF
@@ -13364,7 +13364,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by xf86-video-openchrome $as_me 0.6.176, which was
+This file was extended by xf86-video-openchrome $as_me 0.6.182, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -13430,7 +13430,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-xf86-video-openchrome config.status 0.6.176
+xf86-video-openchrome config.status 0.6.182
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/driver/xf86-video-openchrome/configure.ac b/driver/xf86-video-openchrome/configure.ac
index 60f461b5d..1a028a0ba 100644
--- a/driver/xf86-video-openchrome/configure.ac
+++ b/driver/xf86-video-openchrome/configure.ac
@@ -23,7 +23,7 @@
# Initialize Autoconf
AC_PREREQ(2.57)
AC_INIT([xf86-video-openchrome],
- [0.6.176],
+ [0.6.182],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/openchrome],
[xf86-video-openchrome])
diff --git a/driver/xf86-video-openchrome/man/Makefile.am b/driver/xf86-video-openchrome/man/Makefile.am
index 2ec9173f4..23ced25db 100644
--- a/driver/xf86-video-openchrome/man/Makefile.am
+++ b/driver/xf86-video-openchrome/man/Makefile.am
@@ -1,5 +1,3 @@
-# $Id: Makefile.am,v 1.5 2018/12/09 21:07:33 fcambus Exp $
-#
# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
#
# Permission to use, copy, modify, distribute, and sell this software and its
diff --git a/driver/xf86-video-openchrome/man/Makefile.in b/driver/xf86-video-openchrome/man/Makefile.in
index 2ba0bddc2..cc35159e8 100644
--- a/driver/xf86-video-openchrome/man/Makefile.in
+++ b/driver/xf86-video-openchrome/man/Makefile.in
@@ -14,8 +14,6 @@
@SET_MAKE@
-# $Id: Makefile.in,v 1.14 2018/12/09 21:07:33 fcambus Exp $
-#
# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
#
# Permission to use, copy, modify, distribute, and sell this software and its
diff --git a/driver/xf86-video-openchrome/src/via_display.c b/driver/xf86-video-openchrome/src/via_display.c
index f18796ba4..a01da20a0 100644
--- a/driver/xf86-video-openchrome/src/via_display.c
+++ b/driver/xf86-video-openchrome/src/via_display.c
@@ -595,6 +595,7 @@ viaIGAInitCommon(ScrnInfoPtr pScrn)
vgaHWPtr hwp = VGAHWPTR(pScrn);
VIAPtr pVia = VIAPTR(pScrn);
VIADisplayPtr pVIADisplay = pVia->pVIADisplay;
+ VIARegPtr Regs = &pVIADisplay->SavedReg;
CARD8 i;
#ifdef HAVE_DEBUG
CARD8 temp;
@@ -611,7 +612,7 @@ viaIGAInitCommon(ScrnInfoPtr pScrn)
temp = hwp->readMiscOut(hwp);
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Misc. Register: 0x%02X\n", temp));
- hwp->writeMiscOut(hwp, temp | 0x22);
+ hwp->writeMiscOut(hwp, temp | 0x23);
temp = hwp->readEnable(hwp);
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
@@ -918,6 +919,25 @@ viaIGAInitCommon(ScrnInfoPtr pScrn)
* 11: Clock on/off according to each engine IDLE status */
ViaSeqMask(hwp, 0x3F, 0xFF, 0xFF);
+ /*
+ * Initialize frame buffer size and GTI for VX800, VX855, and
+ * VX900 chipsets. This code is really necessary for standby
+ * resume to work properly on VIA Embedded EPIA-M830 mainboard.
+ */
+ if ((pVia->Chipset == VIA_VX800) ||
+ (pVia->Chipset == VIA_VX855) ||
+ (pVia->Chipset == VIA_VX900)) {
+ hwp->writeSeq(hwp, 0x14, Regs->SR[0x14]);
+ hwp->writeSeq(hwp, 0x68, Regs->SR[0x68]);
+ hwp->writeSeq(hwp, 0x69, Regs->SR[0x69]);
+ hwp->writeSeq(hwp, 0x6A, Regs->SR[0x6A]);
+ hwp->writeSeq(hwp, 0x6B, Regs->SR[0x6B]);
+ hwp->writeSeq(hwp, 0x6C, Regs->SR[0x6C]);
+ hwp->writeSeq(hwp, 0x6D, Regs->SR[0x6D]);
+ hwp->writeSeq(hwp, 0x6E, Regs->SR[0x6E]);
+ hwp->writeSeq(hwp, 0x6F, Regs->SR[0x6F]);
+ }
+
/* 3X5.36[7] - DPMS VSYNC Output
* 3X5.36[6] - DPMS HSYNC Output
* 3X5.36[5:4] - DPMS Control
@@ -939,11 +959,11 @@ viaIGAInitCommon(ScrnInfoPtr pScrn)
}
/* 3X5.3B through 3X5.3F are scratch pad registers. */
- ViaCrtcMask(hwp, 0x3B, pVIADisplay->originalCR3B, 0xFF);
- ViaCrtcMask(hwp, 0x3C, pVIADisplay->originalCR3C, 0xFF);
- ViaCrtcMask(hwp, 0x3D, pVIADisplay->originalCR3D, 0xFF);
- ViaCrtcMask(hwp, 0x3E, pVIADisplay->originalCR3E, 0xFF);
- ViaCrtcMask(hwp, 0x3F, pVIADisplay->originalCR3F, 0xFF);
+ ViaCrtcMask(hwp, 0x3B, Regs->CR[0x3B], 0xFF);
+ ViaCrtcMask(hwp, 0x3C, Regs->CR[0x3C], 0xFF);
+ ViaCrtcMask(hwp, 0x3D, Regs->CR[0x3D], 0xFF);
+ ViaCrtcMask(hwp, 0x3E, Regs->CR[0x3E], 0xFF);
+ ViaCrtcMask(hwp, 0x3F, Regs->CR[0x3F], 0xFF);
/* 3X5.47[5] - Peep at the PCI-bus
* 0: Disable
@@ -1869,252 +1889,9 @@ ViaDisablePrimaryFIFO(ScrnInfoPtr pScrn)
void
viaIGA1Save(ScrnInfoPtr pScrn)
{
- vgaHWPtr hwp = VGAHWPTR(pScrn);
- VIAPtr pVia = VIAPTR(pScrn);
- VIARegPtr Regs = &pVia->SavedReg;
-
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Entered viaIGA1Save.\n"));
- vgaHWProtect(pScrn, TRUE);
-
- vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_ALL);
-
- DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "Saving sequencer registers.\n"));
-
- /* Unlock extended registers. */
- hwp->writeSeq(hwp, 0x10, 0x01);
-
- Regs->SR[0x14] = hwp->readSeq(hwp, 0x14);
- Regs->SR[0x15] = hwp->readSeq(hwp, 0x15);
- Regs->SR[0x16] = hwp->readSeq(hwp, 0x16);
- Regs->SR[0x17] = hwp->readSeq(hwp, 0x17);
- Regs->SR[0x18] = hwp->readSeq(hwp, 0x18);
- Regs->SR[0x19] = hwp->readSeq(hwp, 0x19);
-
- /* PCI Bus Control */
- Regs->SR[0x1A] = hwp->readSeq(hwp, 0x1A);
-
- Regs->SR[0x1B] = hwp->readSeq(hwp, 0x1B);
- Regs->SR[0x1C] = hwp->readSeq(hwp, 0x1C);
- Regs->SR[0x1D] = hwp->readSeq(hwp, 0x1D);
- Regs->SR[0x1E] = hwp->readSeq(hwp, 0x1E);
- Regs->SR[0x1F] = hwp->readSeq(hwp, 0x1F);
-
- Regs->SR[0x20] = hwp->readSeq(hwp, 0x20);
- Regs->SR[0x21] = hwp->readSeq(hwp, 0x21);
- Regs->SR[0x22] = hwp->readSeq(hwp, 0x22);
-
- /* Registers 3C5.23 through 3C5.25 are not used by Chrome9.
- * Registers 3C5.27 through 3C5.29 are not used by Chrome9. */
- switch (pVia->Chipset) {
- case VIA_CLE266:
- case VIA_KM400:
- case VIA_PM800:
- case VIA_K8M800:
- case VIA_P4M800PRO:
- case VIA_CX700:
- case VIA_P4M890:
- Regs->SR[0x23] = hwp->readSeq(hwp, 0x23);
- Regs->SR[0x24] = hwp->readSeq(hwp, 0x24);
- Regs->SR[0x25] = hwp->readSeq(hwp, 0x25);
-
- Regs->SR[0x27] = hwp->readSeq(hwp, 0x27);
- Regs->SR[0x28] = hwp->readSeq(hwp, 0x28);
- Regs->SR[0x29] = hwp->readSeq(hwp, 0x29);
- break;
- default:
- break;
- }
-
- Regs->SR[0x26] = hwp->readSeq(hwp, 0x26);
-
- Regs->SR[0x2A] = hwp->readSeq(hwp, 0x2A);
- Regs->SR[0x2B] = hwp->readSeq(hwp, 0x2B);
- Regs->SR[0x2D] = hwp->readSeq(hwp, 0x2D);
- Regs->SR[0x2E] = hwp->readSeq(hwp, 0x2E);
-
- /* Save PCI Configuration Memory Base Shadow 0 and 1.
- * These registers are available only in UniChrome, UniChrome Pro,
- * and UniChrome Pro II. */
- switch (pVia->Chipset) {
- case VIA_CLE266:
- case VIA_KM400:
- case VIA_PM800:
- case VIA_K8M800:
- case VIA_P4M800PRO:
- case VIA_CX700:
- case VIA_P4M890:
- Regs->SR[0x2F] = hwp->readSeq(hwp, 0x2F);
- Regs->SR[0x30] = hwp->readSeq(hwp, 0x30);
- break;
- default:
- break;
- }
-
- /* Save PLL settings and several miscellaneous registers.
- * For UniChrome, register 3C5.44 through 3C5.4B are saved.
- * For UniChrome Pro and Chrome9, register 3C5.44 through 3C5.4C
- * are saved. */
- Regs->SR[0x44] = hwp->readSeq(hwp, 0x44);
- Regs->SR[0x45] = hwp->readSeq(hwp, 0x45);
- Regs->SR[0x46] = hwp->readSeq(hwp, 0x46);
- Regs->SR[0x47] = hwp->readSeq(hwp, 0x47);
- Regs->SR[0x48] = hwp->readSeq(hwp, 0x48);
- Regs->SR[0x49] = hwp->readSeq(hwp, 0x49);
- Regs->SR[0x4A] = hwp->readSeq(hwp, 0x4A);
- Regs->SR[0x4B] = hwp->readSeq(hwp, 0x4B);
-
- switch (pVia->Chipset) {
- case VIA_PM800:
- case VIA_K8M800:
- case VIA_P4M800PRO:
- case VIA_CX700:
- case VIA_P4M890:
- case VIA_K8M890:
- case VIA_P4M900:
- case VIA_VX800:
- case VIA_VX855:
- case VIA_VX900:
- Regs->SR[0x4C] = hwp->readSeq(hwp, 0x4C);
-
- /* Save register 3C5.4D.
- * According to CX700 / VX700 (UniChrome Pro II) Open Graphics
- * Programming Manual Part I: Graphics Core / 2D,
- * this register is called Dual Channel Memory Control.
- * According to VX800 / VX855 / VX900 (Chrome9 HC3 / HCM / HD)
- * Open Graphics Programming Manual Part I: Graphics Core / 2D,
- * this register is called Preemptive Arbiter Control.
- * It is likely that this register is also supported in UniChrome Pro. */
- Regs->SR[0x4D] = hwp->readSeq(hwp, 0x4D);
-
- Regs->SR[0x4E] = hwp->readSeq(hwp, 0x4E);
- Regs->SR[0x4F] = hwp->readSeq(hwp, 0x4F);
- break;
- default:
- break;
- }
-
- DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "Finished saving sequencer registers.\n"));
-
- DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "Saving IGA1 registers.\n"));
-
- /* UniChrome Pro or later */
- switch (pVia->Chipset) {
- case VIA_PM800:
- case VIA_K8M800:
- case VIA_P4M800PRO:
- case VIA_CX700:
- case VIA_P4M890:
- case VIA_K8M890:
- case VIA_P4M900:
- case VIA_VX800:
- case VIA_VX855:
- case VIA_VX900:
- /* Display Fetch Blocking Control */
- Regs->CR[0x30] = hwp->readCrtc(hwp, 0x30);
-
- /* Half Line Position */
- Regs->CR[0x31] = hwp->readCrtc(hwp, 0x31);
- break;
- default:
- break;
- }
-
- Regs->CR[0x32] = hwp->readCrtc(hwp, 0x32);
- Regs->CR[0x33] = hwp->readCrtc(hwp, 0x33);
- Regs->CR[0x35] = hwp->readCrtc(hwp, 0x35);
- Regs->CR[0x36] = hwp->readCrtc(hwp, 0x36);
-
- /* UniChrome Pro or later */
- switch (pVia->Chipset) {
- case VIA_PM800:
- case VIA_K8M800:
- case VIA_P4M800PRO:
- case VIA_CX700:
- case VIA_P4M890:
- case VIA_K8M890:
- case VIA_P4M900:
- case VIA_VX800:
- case VIA_VX855:
- case VIA_VX900:
- /* DAC Control Register */
- Regs->CR[0x37] = hwp->readCrtc(hwp, 0x37);
- break;
- default:
- break;
- }
-
- Regs->CR[0x38] = hwp->readCrtc(hwp, 0x38);
- Regs->CR[0x39] = hwp->readCrtc(hwp, 0x39);
- Regs->CR[0x3A] = hwp->readCrtc(hwp, 0x3A);
- Regs->CR[0x3B] = hwp->readCrtc(hwp, 0x3B);
- Regs->CR[0x3C] = hwp->readCrtc(hwp, 0x3C);
- Regs->CR[0x3D] = hwp->readCrtc(hwp, 0x3D);
- Regs->CR[0x3E] = hwp->readCrtc(hwp, 0x3E);
- Regs->CR[0x3F] = hwp->readCrtc(hwp, 0x3F);
-
- Regs->CR[0x40] = hwp->readCrtc(hwp, 0x40);
-
- /* UniChrome Pro or later */
- switch (pVia->Chipset) {
- case VIA_PM800:
- case VIA_K8M800:
- case VIA_P4M800PRO:
- case VIA_CX700:
- case VIA_P4M890:
- case VIA_K8M890:
- case VIA_P4M900:
- case VIA_VX800:
- case VIA_VX855:
- case VIA_VX900:
- Regs->CR[0x43] = hwp->readCrtc(hwp, 0x43);
- Regs->CR[0x45] = hwp->readCrtc(hwp, 0x45);
- break;
- default:
- break;
- }
-
- Regs->CR[0x46] = hwp->readCrtc(hwp, 0x46);
- Regs->CR[0x47] = hwp->readCrtc(hwp, 0x47);
-
- /* Starting Address */
- /* Start Address High */
- Regs->CR[0x0C] = hwp->readCrtc(hwp, 0x0C);
-
- /* Start Address Low */
- Regs->CR[0x0D] = hwp->readCrtc(hwp, 0x0D);
-
- /* UniChrome Pro or later */
- switch (pVia->Chipset) {
- case VIA_PM800:
- case VIA_K8M800:
- case VIA_P4M800PRO:
- case VIA_CX700:
- case VIA_P4M890:
- case VIA_K8M890:
- case VIA_P4M900:
- case VIA_VX800:
- case VIA_VX855:
- case VIA_VX900:
- /* Starting Address Overflow[28:24] */
- Regs->CR[0x48] = hwp->readCrtc(hwp, 0x48);
- break;
- default:
- break;
- }
-
- /* Starting Address Overflow[23:16] */
- Regs->CR[0x34] = hwp->readCrtc(hwp, 0x34);
-
- DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "Finished saving IGA1 registers.\n"));
-
- vgaHWProtect(pScrn, FALSE);
-
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Exiting viaIGA1Save.\n"));
}
@@ -2124,7 +1901,8 @@ viaIGA1Restore(ScrnInfoPtr pScrn)
{
vgaHWPtr hwp = VGAHWPTR(pScrn);
VIAPtr pVia = VIAPTR(pScrn);
- VIARegPtr Regs = &pVia->SavedReg;
+ VIADisplayPtr pVIADisplay = pVia->pVIADisplay;
+ VIARegPtr Regs = &pVIADisplay->SavedReg;
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Entered viaIGA1Restore.\n"));
@@ -3145,131 +2923,9 @@ ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode)
void
viaIGA2Save(ScrnInfoPtr pScrn)
{
- vgaHWPtr hwp = VGAHWPTR(pScrn);
- VIAPtr pVia = VIAPTR(pScrn);
- VIARegPtr Regs = &pVia->SavedReg;
- int i;
-
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Entered viaIGA2Save.\n"));
- vgaHWProtect(pScrn, TRUE);
-
- vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_ALL);
-
- DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "Saving IGA2 registers.\n"));
-
- /* Unlock extended registers. */
- hwp->writeSeq(hwp, 0x10, 0x01);
-
- for (i = 0; i < (0x88 - 0x50 + 1); i++) {
- Regs->CR[i + 0x50] = hwp->readCrtc(hwp, i + 0x50);
- }
-
- for (i = 0; i < (0x92 - 0x8A + 1); i++) {
- Regs->CR[i + 0x8A] = hwp->readCrtc(hwp, i + 0x8A);
- }
-
- for (i = 0; i < (0xA3 - 0x94 + 1); i++) {
- Regs->CR[i + 0x94] = hwp->readCrtc(hwp, i + 0x94);
- }
-
- Regs->CR[0xA4] = hwp->readCrtc(hwp, 0xA4);
-
- for (i = 0; i < (0xAC - 0xA5 + 1); i++) {
- Regs->CR[i + 0xA5] = hwp->readCrtc(hwp, i + 0xA5);
- }
-
- /* Chrome 9 */
- switch (pVia->Chipset) {
- case VIA_K8M890:
- case VIA_P4M900:
- case VIA_VX800:
- case VIA_VX855:
- case VIA_VX900:
- Regs->CR[0xAF] = hwp->readCrtc(hwp, 0xAF);
- break;
- default:
- break;
- }
-
- /* Chrome 9, Chrome 9 HC, and Chrome 9 HC3 */
- switch (pVia->Chipset) {
- case VIA_K8M890:
- case VIA_P4M900:
- case VIA_VX800:
- for (i = 0; i < (0xCD - 0xB0 + 1); i++) {
- Regs->CR[i + 0xB0] = hwp->readCrtc(hwp, i + 0xB0);
- }
-
- break;
- default:
- break;
- }
-
- switch (pVia->Chipset) {
-
- /* UniChrome Pro and UniChrome Pro II */
- case VIA_PM800:
- case VIA_K8M800:
- case VIA_P4M800PRO:
- case VIA_CX700:
- case VIA_P4M890:
- for (i = 0; i < (0xD7 - 0xD0 + 1); i++) {
- Regs->CR[i + 0xD0] = hwp->readCrtc(hwp, i + 0xD0);
- }
-
- break;
-
- /* Chrome 9 */
- case VIA_K8M890:
- case VIA_P4M900:
- case VIA_VX800:
- case VIA_VX855:
- case VIA_VX900:
- for (i = 0; i < (0xEC - 0xD0 + 1); i++) {
- Regs->CR[i + 0xD0] = hwp->readCrtc(hwp, i + 0xD0);
- }
-
- break;
- default:
- break;
- }
-
- /* Chrome 9 */
- switch (pVia->Chipset) {
- case VIA_K8M890:
- case VIA_P4M900:
- case VIA_VX800:
- case VIA_VX855:
- case VIA_VX900:
- for (i = 0; i < (0xF5 - 0xF0 + 1); i++) {
- Regs->CR[i + 0xF0] = hwp->readCrtc(hwp, i + 0xF0);
- }
-
- break;
- default:
- break;
- }
-
- /* Chrome 9 HCM and Chrome 9 HD */
- if ((pVia->Chipset == VIA_VX855) || (pVia->Chipset == VIA_VX900)) {
- for (i = 0; i < (0xFC - 0xF6 + 1); i++) {
- Regs->CR[i + 0xF6] = hwp->readCrtc(hwp, i + 0xF6);
- }
- }
-
- /* Chrome 9 HD */
- if (pVia->Chipset == VIA_VX900) {
- Regs->CR[0xFD] = hwp->readCrtc(hwp, 0xFD);
- }
-
- DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "Finished saving IGA2 registers.\n"));
-
- vgaHWProtect(pScrn, FALSE);
-
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Exiting viaIGA2Save.\n"));
}
@@ -3279,7 +2935,8 @@ viaIGA2Restore(ScrnInfoPtr pScrn)
{
vgaHWPtr hwp = VGAHWPTR(pScrn);
VIAPtr pVia = VIAPTR(pScrn);
- VIARegPtr Regs = &pVia->SavedReg;
+ VIADisplayPtr pVIADisplay = pVia->pVIADisplay;
+ VIARegPtr Regs = &pVIADisplay->SavedReg;
int i;
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
diff --git a/driver/xf86-video-openchrome/src/via_driver.h b/driver/xf86-video-openchrome/src/via_driver.h
index ecde134de..80b9977a3 100644
--- a/driver/xf86-video-openchrome/src/via_driver.h
+++ b/driver/xf86-video-openchrome/src/via_driver.h
@@ -126,11 +126,6 @@
extern int gVIAEntityIndex;
-typedef struct {
- CARD8 SR[256];
- CARD8 CR[256];
-} VIARegRec, *VIARegPtr;
-
/*
* variables that need to be shared among different screens.
*/
@@ -195,7 +190,6 @@ typedef struct _twodContext {
} ViaTwodContext;
typedef struct _VIA {
- VIARegRec SavedReg;
int Bpp, Bpl;
Bool KMS;
diff --git a/driver/xf86-video-openchrome/src/via_fp.c b/driver/xf86-video-openchrome/src/via_fp.c
index c536417c3..a9d1930e9 100644
--- a/driver/xf86-video-openchrome/src/via_fp.c
+++ b/driver/xf86-video-openchrome/src/via_fp.c
@@ -706,13 +706,16 @@ viaFPGetFPInfoScratchPad(xf86OutputPtr output)
{
ScrnInfoPtr pScrn = output->scrn;
vgaHWPtr hwp = VGAHWPTR(pScrn);
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIADisplayPtr pVIADisplay = pVia->pVIADisplay;
VIAFPPtr pVIAFP = (VIAFPPtr) output->driver_private;
+ VIARegPtr Regs = &pVIADisplay->SavedReg;
CARD8 index;
DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"Entered %s.\n", __func__));
- index = hwp->readCrtc(hwp, 0x3F) & 0x0F;
+ index = Regs->CR[0x3F] & 0x0F;
pVIAFP->NativeModeIndex = index;
pVIAFP->NativeWidth = ViaPanelNativeModes[index].Width;
diff --git a/driver/xf86-video-openchrome/src/via_ums.c b/driver/xf86-video-openchrome/src/via_ums.c
index 9b0e3d8ae..533106fcc 100644
--- a/driver/xf86-video-openchrome/src/via_ums.c
+++ b/driver/xf86-video-openchrome/src/via_ums.c
@@ -1075,6 +1075,7 @@ umsCrtcInit(ScrnInfoPtr pScrn)
vgaHWPtr hwp = VGAHWPTR(pScrn);
VIAPtr pVia = VIAPTR(pScrn);
VIADisplayPtr pVIADisplay = pVia->pVIADisplay;
+ VIARegPtr Regs = &pVIADisplay->SavedReg;
#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,8,0,0,0)
ClockRangePtr clockRanges;
#else
@@ -1082,13 +1083,149 @@ umsCrtcInit(ScrnInfoPtr pScrn)
#endif
int max_pitch, max_height;
xf86CrtcPtr iga1, iga2;
+ uint32_t i;
+
+ vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_ALL);
+
+ /* Unlock extended registers. */
+ hwp->writeSeq(hwp, 0x10, 0x01);
+
+ Regs->SR[0x14] = hwp->readSeq(hwp, 0x14);
+ Regs->SR[0x15] = hwp->readSeq(hwp, 0x15);
+ Regs->SR[0x16] = hwp->readSeq(hwp, 0x16);
+ Regs->SR[0x17] = hwp->readSeq(hwp, 0x17);
+ Regs->SR[0x18] = hwp->readSeq(hwp, 0x18);
+ Regs->SR[0x19] = hwp->readSeq(hwp, 0x19);
+ Regs->SR[0x1A] = hwp->readSeq(hwp, 0x1A);
+ Regs->SR[0x1B] = hwp->readSeq(hwp, 0x1B);
+ Regs->SR[0x1C] = hwp->readSeq(hwp, 0x1C);
+ Regs->SR[0x1D] = hwp->readSeq(hwp, 0x1D);
+ Regs->SR[0x1E] = hwp->readSeq(hwp, 0x1E);
+ Regs->SR[0x1F] = hwp->readSeq(hwp, 0x1F);
+ Regs->SR[0x20] = hwp->readSeq(hwp, 0x20);
+ Regs->SR[0x21] = hwp->readSeq(hwp, 0x21);
+ Regs->SR[0x22] = hwp->readSeq(hwp, 0x22);
+ Regs->SR[0x23] = hwp->readSeq(hwp, 0x23);
+ Regs->SR[0x24] = hwp->readSeq(hwp, 0x24);
+
+ Regs->SR[0x27] = hwp->readSeq(hwp, 0x27);
+ Regs->SR[0x28] = hwp->readSeq(hwp, 0x28);
+ Regs->SR[0x29] = hwp->readSeq(hwp, 0x29);
+ Regs->SR[0x2A] = hwp->readSeq(hwp, 0x2A);
+ Regs->SR[0x2B] = hwp->readSeq(hwp, 0x2B);
+
+ Regs->SR[0x2D] = hwp->readSeq(hwp, 0x2D);
+ Regs->SR[0x2E] = hwp->readSeq(hwp, 0x2E);
+ Regs->SR[0x2F] = hwp->readSeq(hwp, 0x2F);
+ Regs->SR[0x30] = hwp->readSeq(hwp, 0x30);
+
+ Regs->SR[0x44] = hwp->readSeq(hwp, 0x44);
+ Regs->SR[0x45] = hwp->readSeq(hwp, 0x45);
+ Regs->SR[0x46] = hwp->readSeq(hwp, 0x46);
+ Regs->SR[0x47] = hwp->readSeq(hwp, 0x47);
+ Regs->SR[0x48] = hwp->readSeq(hwp, 0x48);
+ Regs->SR[0x49] = hwp->readSeq(hwp, 0x49);
+ Regs->SR[0x4A] = hwp->readSeq(hwp, 0x4A);
+ Regs->SR[0x4B] = hwp->readSeq(hwp, 0x4B);
- /* 3X5.3B through 3X5.3F are scratch pad registers. */
- pVIADisplay->originalCR3B = hwp->readCrtc(hwp, 0x3B);
- pVIADisplay->originalCR3C = hwp->readCrtc(hwp, 0x3C);
- pVIADisplay->originalCR3D = hwp->readCrtc(hwp, 0x3D);
- pVIADisplay->originalCR3E = hwp->readCrtc(hwp, 0x3E);
- pVIADisplay->originalCR3F = hwp->readCrtc(hwp, 0x3F);
+ switch (pVia->Chipset) {
+ case VIA_K8M800:
+ case VIA_P4M800PRO:
+ case VIA_PM800:
+ case VIA_CX700:
+ case VIA_P4M890:
+ case VIA_K8M890:
+ case VIA_P4M900:
+ case VIA_VX800:
+ case VIA_VX855:
+ case VIA_VX900:
+ Regs->SR[0x4C] = hwp->readSeq(hwp, 0x4C);
+ Regs->SR[0x4D] = hwp->readSeq(hwp, 0x4D);
+ Regs->SR[0x4E] = hwp->readSeq(hwp, 0x4E);
+ Regs->SR[0x4F] = hwp->readSeq(hwp, 0x4F);
+ break;
+ default:
+ break;
+ }
+
+ if ((pVia->Chipset == VIA_VX800) ||
+ (pVia->Chipset == VIA_VX855) ||
+ (pVia->Chipset == VIA_VX900)) {
+ Regs->SR[0x14] = hwp->readSeq(hwp, 0x14);
+ Regs->SR[0x68] = hwp->readSeq(hwp, 0x68);
+ Regs->SR[0x69] = hwp->readSeq(hwp, 0x69);
+ Regs->SR[0x6A] = hwp->readSeq(hwp, 0x6A);
+ Regs->SR[0x6B] = hwp->readSeq(hwp, 0x6B);
+ Regs->SR[0x6C] = hwp->readSeq(hwp, 0x6C);
+ Regs->SR[0x6D] = hwp->readSeq(hwp, 0x6D);
+ Regs->SR[0x6E] = hwp->readSeq(hwp, 0x6E);
+ Regs->SR[0x6F] = hwp->readSeq(hwp, 0x6F);
+ }
+
+ Regs->CR[0x0C] = hwp->readCrtc(hwp, 0x0C);
+ Regs->CR[0x0D] = hwp->readCrtc(hwp, 0x0D);
+
+ Regs->CR[0x30] = hwp->readCrtc(hwp, 0x30);
+ Regs->CR[0x31] = hwp->readCrtc(hwp, 0x31);
+ Regs->CR[0x32] = hwp->readCrtc(hwp, 0x32);
+ Regs->CR[0x33] = hwp->readCrtc(hwp, 0x33);
+ Regs->CR[0x34] = hwp->readCrtc(hwp, 0x34);
+ Regs->CR[0x35] = hwp->readCrtc(hwp, 0x35);
+ Regs->CR[0x36] = hwp->readCrtc(hwp, 0x36);
+ Regs->CR[0x37] = hwp->readCrtc(hwp, 0x37);
+ Regs->CR[0x38] = hwp->readCrtc(hwp, 0x38);
+ Regs->CR[0x39] = hwp->readCrtc(hwp, 0x39);
+ Regs->CR[0x3A] = hwp->readCrtc(hwp, 0x3A);
+ Regs->CR[0x3B] = hwp->readCrtc(hwp, 0x3B);
+ Regs->CR[0x3C] = hwp->readCrtc(hwp, 0x3C);
+ Regs->CR[0x3D] = hwp->readCrtc(hwp, 0x3D);
+ Regs->CR[0x3E] = hwp->readCrtc(hwp, 0x3E);
+ Regs->CR[0x3F] = hwp->readCrtc(hwp, 0x3F);
+ Regs->CR[0x40] = hwp->readCrtc(hwp, 0x40);
+ Regs->CR[0x43] = hwp->readCrtc(hwp, 0x43);
+ Regs->CR[0x45] = hwp->readCrtc(hwp, 0x45);
+ Regs->CR[0x46] = hwp->readCrtc(hwp, 0x46);
+ Regs->CR[0x47] = hwp->readCrtc(hwp, 0x47);
+ Regs->CR[0x48] = hwp->readCrtc(hwp, 0x48);
+
+ for (i = 0; i < (0xA8 - 0x50 + 1); i++) {
+ Regs->CR[i + 0x50] = hwp->readCrtc(hwp, i + 0x50);
+ }
+
+ switch (pVia->Chipset) {
+ case VIA_CX700:
+ case VIA_VX800:
+ case VIA_VX855:
+ case VIA_VX900:
+ for (i = 0; i < (0xEF - 0xA9 + 1); i++) {
+ Regs->CR[i + 0xA9] = hwp->readCrtc(hwp, i + 0xA9);
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ if ((pVia->Chipset == VIA_VX800) ||
+ (pVia->Chipset == VIA_VX855) ||
+ (pVia->Chipset == VIA_VX900)) {
+ for (i = 0; i < (0xF5 - 0xF0 + 1); i++) {
+ Regs->CR[i + 0xF0] = hwp->readCrtc(hwp, i + 0xF0);
+ }
+ }
+
+ if ((pVia->Chipset == VIA_VX855) ||
+ (pVia->Chipset == VIA_VX900)) {
+ for (i = 0; i < (0xFC - 0xF6 + 1); i++) {
+ Regs->CR[i + 0xF6] = hwp->readCrtc(hwp, i + 0xF6);
+ }
+ }
+
+ if (pVia->Chipset == VIA_VX900) {
+ for (i = 0; i < (0xFF - 0xF7 + 1); i++) {
+ Regs->CR[i + 0xF7] = hwp->readCrtc(hwp, i + 0xF7);
+ }
+ }
/* Read memory bandwidth from registers. */
pVia->MemClk = hwp->readCrtc(hwp, 0x3D) >> 4;
diff --git a/driver/xf86-video-openchrome/src/via_ums.h b/driver/xf86-video-openchrome/src/via_ums.h
index abdb32ae2..628698359 100644
--- a/driver/xf86-video-openchrome/src/via_ums.h
+++ b/driver/xf86-video-openchrome/src/via_ums.h
@@ -159,6 +159,11 @@ enum {
VIA_DPA_CLK_RANGE_150M,
};
+typedef struct {
+ CARD8 SR[256];
+ CARD8 CR[256];
+} VIARegRec, *VIARegPtr;
+
typedef struct ViaPanelMode {
int Width;
int Height;
@@ -223,9 +228,7 @@ typedef struct _VIADISPLAY {
/* OLPC XO-1.5 */
Bool isOLPCXO15;
- /* Shadow copy of CR3B through CR3F. */
- CARD8 originalCR3B, originalCR3C, originalCR3D,
- originalCR3E, originalCR3F;
+ VIARegRec SavedReg;
xf86OutputPtr tv;
diff --git a/driver/xf86-video-openchrome/src/xvmc/xf86dristr.h b/driver/xf86-video-openchrome/src/xvmc/xf86dristr.h
index 3b43438e7..c466564d8 100644
--- a/driver/xf86-video-openchrome/src/xvmc/xf86dristr.h
+++ b/driver/xf86-video-openchrome/src/xvmc/xf86dristr.h
@@ -59,7 +59,7 @@ typedef struct _XF86DRIQueryVersion
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRIQueryVersion */
- CARD16 length B16;
+ CARD16 length;
} xXF86DRIQueryVersionReq;
#define sz_xXF86DRIQueryVersionReq 4
@@ -68,15 +68,15 @@ typedef struct
{
BYTE type; /* X_Reply */
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD16 majorVersion B16; /* major version of DRI protocol */
- CARD16 minorVersion B16; /* minor version of DRI protocol */
- CARD32 patchVersion B32; /* patch version of DRI protocol */
- CARD32 pad3 B32;
- CARD32 pad4 B32;
- CARD32 pad5 B32;
- CARD32 pad6 B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
+ CARD16 majorVersion; /* major version of DRI protocol */
+ CARD16 minorVersion; /* minor version of DRI protocol */
+ CARD32 patchVersion; /* patch version of DRI protocol */
+ CARD32 pad3;
+ CARD32 pad4;
+ CARD32 pad5;
+ CARD32 pad6;
} xXF86DRIQueryVersionReply;
#define sz_xXF86DRIQueryVersionReply 32
@@ -85,8 +85,8 @@ typedef struct _XF86DRIQueryDirectRenderingCapable
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* X_DRIQueryDirectRenderingCapable */
- CARD16 length B16;
- CARD32 screen B32;
+ CARD16 length;
+ CARD32 screen;
} xXF86DRIQueryDirectRenderingCapableReq;
#define sz_xXF86DRIQueryDirectRenderingCapableReq 8
@@ -95,17 +95,17 @@ typedef struct
{
BYTE type; /* X_Reply */
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
BOOL isCapable;
BOOL pad2;
BOOL pad3;
BOOL pad4;
- CARD32 pad5 B32;
- CARD32 pad6 B32;
- CARD32 pad7 B32;
- CARD32 pad8 B32;
- CARD32 pad9 B32;
+ CARD32 pad5;
+ CARD32 pad6;
+ CARD32 pad7;
+ CARD32 pad8;
+ CARD32 pad9;
} xXF86DRIQueryDirectRenderingCapableReply;
#define sz_xXF86DRIQueryDirectRenderingCapableReply 32
@@ -114,8 +114,8 @@ typedef struct _XF86DRIOpenConnection
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRIOpenConnection */
- CARD16 length B16;
- CARD32 screen B32;
+ CARD16 length;
+ CARD32 screen;
} xXF86DRIOpenConnectionReq;
#define sz_xXF86DRIOpenConnectionReq 8
@@ -124,14 +124,14 @@ typedef struct
{
BYTE type; /* X_Reply */
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 hSAREALow B32;
- CARD32 hSAREAHigh B32;
- CARD32 busIdStringLength B32;
- CARD32 pad6 B32;
- CARD32 pad7 B32;
- CARD32 pad8 B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
+ CARD32 hSAREALow;
+ CARD32 hSAREAHigh;
+ CARD32 busIdStringLength;
+ CARD32 pad6;
+ CARD32 pad7;
+ CARD32 pad8;
} xXF86DRIOpenConnectionReply;
#define sz_xXF86DRIOpenConnectionReply 32
@@ -140,9 +140,9 @@ typedef struct _XF86DRIAuthConnection
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRICloseConnection */
- CARD16 length B16;
- CARD32 screen B32;
- CARD32 magic B32;
+ CARD16 length;
+ CARD32 screen;
+ CARD32 magic;
} xXF86DRIAuthConnectionReq;
#define sz_xXF86DRIAuthConnectionReq 12
@@ -151,14 +151,14 @@ typedef struct
{
BYTE type;
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 authenticated B32;
- CARD32 pad2 B32;
- CARD32 pad3 B32;
- CARD32 pad4 B32;
- CARD32 pad5 B32;
- CARD32 pad6 B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
+ CARD32 authenticated;
+ CARD32 pad2;
+ CARD32 pad3;
+ CARD32 pad4;
+ CARD32 pad5;
+ CARD32 pad6;
} xXF86DRIAuthConnectionReply;
#define zx_xXF86DRIAuthConnectionReply 32
@@ -167,8 +167,8 @@ typedef struct _XF86DRICloseConnection
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRICloseConnection */
- CARD16 length B16;
- CARD32 screen B32;
+ CARD16 length;
+ CARD32 screen;
} xXF86DRICloseConnectionReq;
#define sz_xXF86DRICloseConnectionReq 8
@@ -177,8 +177,8 @@ typedef struct _XF86DRIGetClientDriverName
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRIGetClientDriverName */
- CARD16 length B16;
- CARD32 screen B32;
+ CARD16 length;
+ CARD32 screen;
} xXF86DRIGetClientDriverNameReq;
#define sz_xXF86DRIGetClientDriverNameReq 8
@@ -187,14 +187,14 @@ typedef struct
{
BYTE type; /* X_Reply */
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 ddxDriverMajorVersion B32;
- CARD32 ddxDriverMinorVersion B32;
- CARD32 ddxDriverPatchVersion B32;
- CARD32 clientDriverNameLength B32;
- CARD32 pad5 B32;
- CARD32 pad6 B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
+ CARD32 ddxDriverMajorVersion;
+ CARD32 ddxDriverMinorVersion;
+ CARD32 ddxDriverPatchVersion;
+ CARD32 clientDriverNameLength;
+ CARD32 pad5;
+ CARD32 pad6;
} xXF86DRIGetClientDriverNameReply;
#define sz_xXF86DRIGetClientDriverNameReply 32
@@ -203,10 +203,10 @@ typedef struct _XF86DRICreateContext
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRICreateContext */
- CARD16 length B16;
- CARD32 screen B32;
- CARD32 visual B32;
- CARD32 context B32;
+ CARD16 length;
+ CARD32 screen;
+ CARD32 visual;
+ CARD32 context;
} xXF86DRICreateContextReq;
#define sz_xXF86DRICreateContextReq 16
@@ -215,14 +215,14 @@ typedef struct
{
BYTE type; /* X_Reply */
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 hHWContext B32;
- CARD32 pad2 B32;
- CARD32 pad3 B32;
- CARD32 pad4 B32;
- CARD32 pad5 B32;
- CARD32 pad6 B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
+ CARD32 hHWContext;
+ CARD32 pad2;
+ CARD32 pad3;
+ CARD32 pad4;
+ CARD32 pad5;
+ CARD32 pad6;
} xXF86DRICreateContextReply;
#define sz_xXF86DRICreateContextReply 32
@@ -231,9 +231,9 @@ typedef struct _XF86DRIDestroyContext
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRIDestroyContext */
- CARD16 length B16;
- CARD32 screen B32;
- CARD32 context B32;
+ CARD16 length;
+ CARD32 screen;
+ CARD32 context;
} xXF86DRIDestroyContextReq;
#define sz_xXF86DRIDestroyContextReq 12
@@ -242,9 +242,9 @@ typedef struct _XF86DRICreateDrawable
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRICreateDrawable */
- CARD16 length B16;
- CARD32 screen B32;
- CARD32 drawable B32;
+ CARD16 length;
+ CARD32 screen;
+ CARD32 drawable;
} xXF86DRICreateDrawableReq;
#define sz_xXF86DRICreateDrawableReq 12
@@ -253,14 +253,14 @@ typedef struct
{
BYTE type; /* X_Reply */
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 hHWDrawable B32;
- CARD32 pad2 B32;
- CARD32 pad3 B32;
- CARD32 pad4 B32;
- CARD32 pad5 B32;
- CARD32 pad6 B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
+ CARD32 hHWDrawable;
+ CARD32 pad2;
+ CARD32 pad3;
+ CARD32 pad4;
+ CARD32 pad5;
+ CARD32 pad6;
} xXF86DRICreateDrawableReply;
#define sz_xXF86DRICreateDrawableReply 32
@@ -269,9 +269,9 @@ typedef struct _XF86DRIDestroyDrawable
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRIDestroyDrawable */
- CARD16 length B16;
- CARD32 screen B32;
- CARD32 drawable B32;
+ CARD16 length;
+ CARD32 screen;
+ CARD32 drawable;
} xXF86DRIDestroyDrawableReq;
#define sz_xXF86DRIDestroyDrawableReq 12
@@ -280,9 +280,9 @@ typedef struct _XF86DRIGetDrawableInfo
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRIGetDrawableInfo */
- CARD16 length B16;
- CARD32 screen B32;
- CARD32 drawable B32;
+ CARD16 length;
+ CARD32 screen;
+ CARD32 drawable;
} xXF86DRIGetDrawableInfoReq;
#define sz_xXF86DRIGetDrawableInfoReq 12
@@ -291,18 +291,18 @@ typedef struct
{
BYTE type; /* X_Reply */
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 drawableTableIndex B32;
- CARD32 drawableTableStamp B32;
- INT16 drawableX B16;
- INT16 drawableY B16;
- INT16 drawableWidth B16;
- INT16 drawableHeight B16;
- CARD32 numClipRects B32;
- INT16 backX B16;
- INT16 backY B16;
- CARD32 numBackClipRects B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
+ CARD32 drawableTableIndex;
+ CARD32 drawableTableStamp;
+ INT16 drawableX;
+ INT16 drawableY;
+ INT16 drawableWidth;
+ INT16 drawableHeight;
+ CARD32 numClipRects;
+ INT16 backX;
+ INT16 backY;
+ CARD32 numBackClipRects;
} xXF86DRIGetDrawableInfoReply;
#define sz_xXF86DRIGetDrawableInfoReply 36
@@ -311,8 +311,8 @@ typedef struct _XF86DRIGetDeviceInfo
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRIGetDeviceInfo */
- CARD16 length B16;
- CARD32 screen B32;
+ CARD16 length;
+ CARD32 screen;
} xXF86DRIGetDeviceInfoReq;
#define sz_xXF86DRIGetDeviceInfoReq 8
@@ -321,14 +321,14 @@ typedef struct
{
BYTE type; /* X_Reply */
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 hFrameBufferLow B32;
- CARD32 hFrameBufferHigh B32;
- CARD32 framebufferOrigin B32;
- CARD32 framebufferSize B32;
- CARD32 framebufferStride B32;
- CARD32 devPrivateSize B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
+ CARD32 hFrameBufferLow;
+ CARD32 hFrameBufferHigh;
+ CARD32 framebufferOrigin;
+ CARD32 framebufferSize;
+ CARD32 framebufferStride;
+ CARD32 devPrivateSize;
} xXF86DRIGetDeviceInfoReply;
#define sz_xXF86DRIGetDeviceInfoReply 32
@@ -337,9 +337,9 @@ typedef struct _XF86DRIOpenFullScreen
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRIOpenFullScreen */
- CARD16 length B16;
- CARD32 screen B32;
- CARD32 drawable B32;
+ CARD16 length;
+ CARD32 screen;
+ CARD32 drawable;
} xXF86DRIOpenFullScreenReq;
#define sz_xXF86DRIOpenFullScreenReq 12
@@ -348,14 +348,14 @@ typedef struct
{
BYTE type;
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 isFullScreen B32;
- CARD32 pad2 B32;
- CARD32 pad3 B32;
- CARD32 pad4 B32;
- CARD32 pad5 B32;
- CARD32 pad6 B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
+ CARD32 isFullScreen;
+ CARD32 pad2;
+ CARD32 pad3;
+ CARD32 pad4;
+ CARD32 pad5;
+ CARD32 pad6;
} xXF86DRIOpenFullScreenReply;
#define sz_xXF86DRIOpenFullScreenReply 32
@@ -364,9 +364,9 @@ typedef struct _XF86DRICloseFullScreen
{
CARD8 reqType; /* always DRIReqCode */
CARD8 driReqType; /* always X_DRICloseFullScreen */
- CARD16 length B16;
- CARD32 screen B32;
- CARD32 drawable B32;
+ CARD16 length;
+ CARD32 screen;
+ CARD32 drawable;
} xXF86DRICloseFullScreenReq;
#define sz_xXF86DRICloseFullScreenReq 12
@@ -375,14 +375,14 @@ typedef struct
{
BYTE type;
BOOL pad1;
- CARD16 sequenceNumber B16;
- CARD32 length B32;
- CARD32 pad2 B32;
- CARD32 pad3 B32;
- CARD32 pad4 B32;
- CARD32 pad5 B32;
- CARD32 pad6 B32;
- CARD32 pad7 B32;
+ CARD16 sequenceNumber;
+ CARD32 length;
+ CARD32 pad2;
+ CARD32 pad3;
+ CARD32 pad4;
+ CARD32 pad5;
+ CARD32 pad6;
+ CARD32 pad7;
} xXF86DRICloseFullScreenReply;
#define sz_xXF86DRICloseFullScreenReply 32